Snap for 11740702 from ac03ac9aec94f76e52e24b2f65ec6948737b94dd to androidx-viewpager2-release

Change-Id: I5423fd6e31d7a0eaae3fbad824817ee41d6b772c
diff --git a/.gitallowed b/.gitallowed
new file mode 100644
index 0000000..f161c6a
--- /dev/null
+++ b/.gitallowed
@@ -0,0 +1,2 @@
+# Catapult prebuilt have demo secrets that are already public
+systrace/catapult/third_party/polymer/components/**
\ No newline at end of file
diff --git a/NOTICE.txt b/NOTICE.txt
index 7c2bfa3..3101111 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -1,322 +1,6 @@
-Notices for files contained in the tools directory:
-============================================================
-Notices for file(s):
-/bin/newfs_msdos
-------------------------------------------------------------
-Copyright (c) 1998 Robert Nordier
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-Copyright (c) 2013 The NetBSD Foundation, Inc.
-All rights reserved.
-
-This code is derived from software contributed to The NetBSD Foundation
-by Christos Zoulas.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-SPDX-License-Identifier: BSD-2-Clause-FreeBSD
-
-Copyright (c) 1998 Robert Nordier
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in
-   the documentation and/or other materials provided with the
-   distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------
-
-
-============================================================
-Notices for file(s):
-/framework/mockito-host.jar
-------------------------------------------------------------
-The MIT License
-
-Copyright (c) 2007 Mockito contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-============================================================
-Notices for file(s):
-/lib64/libtinyxml2.so
-------------------------------------------------------------
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any
-damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must
-not claim that you wrote the original software. If you use this
-software in a product, an acknowledgment in the product documentation
-would be appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and
-must not be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source
-distribution.
-
-============================================================
-Notices for file(s):
-/lib/libdt_fd_forward.so
-/lib64/libdt_fd_forward.so
-------------------------------------------------------------
-Copyright (C) 2017 The Android Open Source Project
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
-This file implements interfaces from the file jdwpTransport.h. This
-implementation is licensed under the same terms as the file
-jdwpTransport.h. The copyright and license information for the file
-jdwpTransport.h follows.
-
-Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
-This code is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 2 only, as
-published by the Free Software Foundation.  Oracle designates this
-particular file as subject to the "Classpath" exception as provided
-by Oracle in the LICENSE file that accompanied this code.
-
-This code is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-version 2 for more details (a copy is included in the LICENSE file that
-accompanied this code).
-
-You should have received a copy of the GNU General Public License version
-2 along with this work; if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-or visit www.oracle.com if you need additional information or have any
-questions.
-
-============================================================
-Notices for file(s):
-/lib/libcompiler_rt-extras.a
-/lib64/libcompiler_rt-extras.a
-/lib64/libcompiler_rt.so
-------------------------------------------------------------
 ==============================================================================
-compiler_rt License
-==============================================================================
-
-The compiler_rt library is dual licensed under both the University of Illinois
-"BSD-Like" license and the MIT license.  As a user of this code you may choose
-to use it under either license.  As a contributor, you agree to allow your code
-to be used under both.
-
-Full text of the relevant licenses is included below.
-
-==============================================================================
-
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-All rights reserved.
-
-Developed by:
-
-    LLVM Team
-
-    University of Illinois at Urbana-Champaign
-
-    http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimers.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimers in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the names of the LLVM Team, University of Illinois at
-      Urbana-Champaign, nor the names of its contributors may be used to
-      endorse or promote products derived from this Software without specific
-      prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-
-==============================================================================
-
-Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-==============================================================================
-Copyrights and Licenses for Third Party Software Distributed with LLVM:
-==============================================================================
-The LLVM software contains code written by third parties.  Such software will
-have its own individual LICENSE.TXT file in the directory in which it appears.
-This file will describe the copyrights, license, and restrictions which apply
-to that code.
-
-The disclaimer of warranty in the University of Illinois Open Source License
-applies to all code in the LLVM Distribution, and nothing in any of the
-other licenses gives permission to use the names of the LLVM Team or the
-University of Illinois to endorse or promote products derived from this
-Software.
-
-
-============================================================
-Notices for file(s):
-/lib64/libxml2.so
-------------------------------------------------------------
-Except where otherwise noted in the source code (e.g. the files hash.c,
-list.c and the trio files, which are covered by a similar licence but
-with different Copyright notices) all the files are:
-
- Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is fur-
-nished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
-NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-============================================================
-Notices for file(s):
-/lib/liblog.a
-/lib/liblog.so
-/lib64/liblog.a
-/lib64/liblog.so
-------------------------------------------------------------
-
-   Copyright (c) 2005-2014, The Android Open Source Project
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
+Android used by:
+  sdk-repo-linux-platform-tools.zip
 
 
                                  Apache License
@@ -496,45 +180,466 @@
 
    END OF TERMS AND CONDITIONS
 
+   APPENDIX: How to apply the Apache License to your work.
 
-============================================================
-Notices for file(s):
-/bin/v8mkpeephole
-/lib/libv8base.a
-/lib64/libv8base.a
-------------------------------------------------------------
-This license applies to all parts of V8 that are not externally
-maintained libraries.  The externally maintained libraries used by V8
-are:
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
 
-  - PCRE test suite, located in
-    test/mjsunit/third_party/regexp-pcre/regexp-pcre.js.  This is based on the
-    test suite from PCRE-7.3, which is copyrighted by the University
-    of Cambridge and Google, Inc.  The copyright notice and license
-    are embedded in regexp-pcre.js.
+   Copyright [yyyy] [name of copyright owner]
 
-  - Layout tests, located in test/mjsunit/third_party/object-keys.  These are
-    based on layout tests from webkit.org which are copyrighted by
-    Apple Computer, Inc. and released under a 3-clause BSD license.
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
 
-  - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
-    assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
-    assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
-    assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
-    assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
-    This code is copyrighted by Sun Microsystems Inc. and released
-    under a 3-clause BSD license.
+       http://www.apache.org/licenses/LICENSE-2.0
 
-  - Valgrind client API header, located at third_party/valgrind/valgrind.h
-    This is release under the BSD license.
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
 
-These libraries have their own licenses; we recommend you read them,
-as their terms may differ from the terms below.
+==============================================================================
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
 
-Further license information can be found in LICENSE files located in 
-sub-directories.
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
 
-Copyright 2014, the V8 project authors. All rights reserved.
+
+==============================================================================
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+   "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>ICU License - moved to LICENSE</title>
+</head>
+
+<body BGCOLOR="#ffffff">
+  <p>
+    The ICU license is now in plain text format, see <a href="./LICENSE">LICENSE</a>.
+Update links and software appropriately.
+  </p>
+  <i>© 2016 and later: Unicode, Inc. and others. License &amp; terms of use: http://www.unicode.org/copyright.html</i> 
+  <i>© 1995-2016 International Business Machines Corporation and others</i>
+
+</body>
+</html>
+
+==============================================================================
+COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
+
+Copyright © 1991-2018 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+---------------------
+
+Third-Party Software Licenses
+
+This section contains third-party software notices and/or additional
+terms for licensed third-party software components included within ICU
+libraries.
+
+1. ICU License - ICU 1.8.1 to ICU 57.1
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2016 International Business Machines Corporation and others
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies of
+the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+of the copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the
+property of their respective owners.
+
+2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
+
+ #     The Google Chrome software developed by Google is licensed under
+ # the BSD license. Other software included in this distribution is
+ # provided under other licenses, as set forth below.
+ #
+ #  The BSD License
+ #  http://opensource.org/licenses/bsd-license.php
+ #  Copyright (C) 2006-2008, Google Inc.
+ #
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ #  Redistributions of source code must retain the above copyright notice,
+ # this list of conditions and the following disclaimer.
+ #  Redistributions in binary form must reproduce the above
+ # copyright notice, this list of conditions and the following
+ # disclaimer in the documentation and/or other materials provided with
+ # the distribution.
+ #  Neither the name of  Google Inc. nor the names of its
+ # contributors may be used to endorse or promote products derived from
+ # this software without specific prior written permission.
+ #
+ #
+ #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+ #
+ #  The word list in cjdict.txt are generated by combining three word lists
+ # listed below with further processing for compound word breaking. The
+ # frequency is generated with an iterative training against Google web
+ # corpora.
+ #
+ #  * Libtabe (Chinese)
+ #    - https://sourceforge.net/project/?group_id=1519
+ #    - Its license terms and conditions are shown below.
+ #
+ #  * IPADIC (Japanese)
+ #    - http://chasen.aist-nara.ac.jp/chasen/distribution.html
+ #    - Its license terms and conditions are shown below.
+ #
+ #  ---------COPYING.libtabe ---- BEGIN--------------------
+ #
+ #  /*
+ #   * Copyright (c) 1999 TaBE Project.
+ #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
+ #   * All rights reserved.
+ #   *
+ #   * Redistribution and use in source and binary forms, with or without
+ #   * modification, are permitted provided that the following conditions
+ #   * are met:
+ #   *
+ #   * . Redistributions of source code must retain the above copyright
+ #   *   notice, this list of conditions and the following disclaimer.
+ #   * . Redistributions in binary form must reproduce the above copyright
+ #   *   notice, this list of conditions and the following disclaimer in
+ #   *   the documentation and/or other materials provided with the
+ #   *   distribution.
+ #   * . Neither the name of the TaBE Project nor the names of its
+ #   *   contributors may be used to endorse or promote products derived
+ #   *   from this software without specific prior written permission.
+ #   *
+ #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #   * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #   */
+ #
+ #  /*
+ #   * Copyright (c) 1999 Computer Systems and Communication Lab,
+ #   *                    Institute of Information Science, Academia
+ #       *                    Sinica. All rights reserved.
+ #   *
+ #   * Redistribution and use in source and binary forms, with or without
+ #   * modification, are permitted provided that the following conditions
+ #   * are met:
+ #   *
+ #   * . Redistributions of source code must retain the above copyright
+ #   *   notice, this list of conditions and the following disclaimer.
+ #   * . Redistributions in binary form must reproduce the above copyright
+ #   *   notice, this list of conditions and the following disclaimer in
+ #   *   the documentation and/or other materials provided with the
+ #   *   distribution.
+ #   * . Neither the name of the Computer Systems and Communication Lab
+ #   *   nor the names of its contributors may be used to endorse or
+ #   *   promote products derived from this software without specific
+ #   *   prior written permission.
+ #   *
+ #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #   * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #   */
+ #
+ #  Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
+ #      University of Illinois
+ #  c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
+ #
+ #  ---------------COPYING.libtabe-----END--------------------------------
+ #
+ #
+ #  ---------------COPYING.ipadic-----BEGIN-------------------------------
+ #
+ #  Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
+ #  and Technology.  All Rights Reserved.
+ #
+ #  Use, reproduction, and distribution of this software is permitted.
+ #  Any copy of this software, whether in its original form or modified,
+ #  must include both the above copyright notice and the following
+ #  paragraphs.
+ #
+ #  Nara Institute of Science and Technology (NAIST),
+ #  the copyright holders, disclaims all warranties with regard to this
+ #  software, including all implied warranties of merchantability and
+ #  fitness, in no event shall NAIST be liable for
+ #  any special, indirect or consequential damages or any damages
+ #  whatsoever resulting from loss of use, data or profits, whether in an
+ #  action of contract, negligence or other tortuous action, arising out
+ #  of or in connection with the use or performance of this software.
+ #
+ #  A large portion of the dictionary entries
+ #  originate from ICOT Free Software.  The following conditions for ICOT
+ #  Free Software applies to the current dictionary as well.
+ #
+ #  Each User may also freely distribute the Program, whether in its
+ #  original form or modified, to any third party or parties, PROVIDED
+ #  that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+ #  on, or be attached to, the Program, which is distributed substantially
+ #  in the same form as set out herein and that such intended
+ #  distribution, if actually made, will neither violate or otherwise
+ #  contravene any of the laws and regulations of the countries having
+ #  jurisdiction over the User or the intended distribution itself.
+ #
+ #  NO WARRANTY
+ #
+ #  The program was produced on an experimental basis in the course of the
+ #  research and development conducted during the project and is provided
+ #  to users as so produced on an experimental basis.  Accordingly, the
+ #  program is provided without any warranty whatsoever, whether express,
+ #  implied, statutory or otherwise.  The term "warranty" used herein
+ #  includes, but is not limited to, any warranty of the quality,
+ #  performance, merchantability and fitness for a particular purpose of
+ #  the program and the nonexistence of any infringement or violation of
+ #  any right of any third party.
+ #
+ #  Each user of the program will agree and understand, and be deemed to
+ #  have agreed and understood, that there is no warranty whatsoever for
+ #  the program and, accordingly, the entire risk arising from or
+ #  otherwise connected with the program is assumed by the user.
+ #
+ #  Therefore, neither ICOT, the copyright holder, or any other
+ #  organization that participated in or was otherwise related to the
+ #  development of the program and their respective officials, directors,
+ #  officers and other employees shall be held liable for any and all
+ #  damages, including, without limitation, general, special, incidental
+ #  and consequential damages, arising out of or otherwise in connection
+ #  with the use or inability to use the program or any product, material
+ #  or result produced or otherwise obtained by using the program,
+ #  regardless of whether they have been advised of, or otherwise had
+ #  knowledge of, the possibility of such damages at any time during the
+ #  project or thereafter.  Each user will be deemed to have agreed to the
+ #  foregoing by his or her commencement of use of the program.  The term
+ #  "use" as used herein includes, but is not limited to, the use,
+ #  modification, copying and distribution of the program and the
+ #  production of secondary products from the program.
+ #
+ #  In the case where the program, whether in its original form or
+ #  modified, was distributed or delivered to or received by a user from
+ #  any person, organization or entity other than ICOT, unless it makes or
+ #  grants independently of ICOT any specific warranty to the user in
+ #  writing, such person, organization or entity, will also be exempted
+ #  from and not be held liable to the user for any such damages as noted
+ #  above as far as the program is concerned.
+ #
+ #  ---------------COPYING.ipadic-----END----------------------------------
+
+3. Lao Word Break Dictionary Data (laodict.txt)
+
+ #  Copyright (c) 2013 International Business Machines Corporation
+ #  and others. All Rights Reserved.
+ #
+ # Project: http://code.google.com/p/lao-dictionary/
+ # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt
+ # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt
+ #              (copied below)
+ #
+ #  This file is derived from the above dictionary, with slight
+ #  modifications.
+ #  ----------------------------------------------------------------------
+ #  Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ #  modification,
+ #  are permitted provided that the following conditions are met:
+ #
+ #
+ # Redistributions of source code must retain the above copyright notice, this
+ #  list of conditions and the following disclaimer. Redistributions in
+ #  binary form must reproduce the above copyright notice, this list of
+ #  conditions and the following disclaimer in the documentation and/or
+ #  other materials provided with the distribution.
+ #
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # OF THE POSSIBILITY OF SUCH DAMAGE.
+ #  --------------------------------------------------------------------------
+
+4. Burmese Word Break Dictionary Data (burmesedict.txt)
+
+ #  Copyright (c) 2014 International Business Machines Corporation
+ #  and others. All Rights Reserved.
+ #
+ #  This list is part of a project hosted at:
+ #    github.com/kanyawtech/myanmar-karen-word-lists
+ #
+ #  --------------------------------------------------------------------------
+ #  Copyright (c) 2013, LeRoy Benjamin Sharon
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ #  modification, are permitted provided that the following conditions
+ #  are met: Redistributions of source code must retain the above
+ #  copyright notice, this list of conditions and the following
+ #  disclaimer.  Redistributions in binary form must reproduce the
+ #  above copyright notice, this list of conditions and the following
+ #  disclaimer in the documentation and/or other materials provided
+ #  with the distribution.
+ #
+ #    Neither the name Myanmar Karen Word Lists, nor the names of its
+ #    contributors may be used to endorse or promote products derived
+ #    from this software without specific prior written permission.
+ #
+ #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ #  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ #  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ #  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
+ #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ #  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ #  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ #  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ #  SUCH DAMAGE.
+ #  --------------------------------------------------------------------------
+
+5. Time Zone Database
+
+  ICU uses the public domain data and code derived from Time Zone
+Database for its time zone support. The ownership of the TZ database
+is explained in BCP 175: Procedure for Maintaining the Time Zone
+Database section 7.
+
+ # 7.  Database Ownership
+ #
+ #    The TZ database itself is not an IETF Contribution or an IETF
+ #    document.  Rather it is a pre-existing and regularly updated work
+ #    that is in the public domain, and is intended to remain in the
+ #    public domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
+ #    not apply to the TZ Database or contributions that individuals make
+ #    to it.  Should any claims be made and substantiated against the TZ
+ #    Database, the organization that is providing the IANA
+ #    Considerations defined in this RFC, under the memorandum of
+ #    understanding with the IETF, currently ICANN, may act in accordance
+ #    with all competent court orders.  No ownership claims will be made
+ #    by ICANN or the IETF Trust on the database or the code.  Any person
+ #    making a contribution to the database or code waives all rights to
+ #    future claims in that contribution or in the TZ Database.
+
+6. Google double-conversion
+
+Copyright 2006-2011, the V8 project authors. All rights reserved.
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
 met:
@@ -561,579 +666,1769 @@
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-========================================================================
+==============================================================================
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
 
-fdlibm
+See Terms of Use <https://www.unicode.org/copyright.html>
+for definitions of Unicode Inc.’s Data Files and Software.
 
-Copyright (C) 1993-2004 by Sun Microsystems, Inc. All rights reserved.
+NOTICE TO USER: Carefully read the following legal agreement.
+BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
+DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
+YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+TERMS AND CONDITIONS OF THIS AGREEMENT.
+IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
+THE DATA FILES OR SOFTWARE.
 
-Developed at SunSoft, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
+COPYRIGHT AND PERMISSION NOTICE
 
-========================================================================
+Copyright © 1991-2022 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
 
-Strongtalk
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
 
-Copyright (c) 1994-2006 Sun Microsystems Inc.
-All Rights Reserved.
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+----------------------------------------------------------------------
+
+Third-Party Software Licenses
+
+This section contains third-party software notices and/or additional
+terms for licensed third-party software components included within ICU
+libraries.
+
+----------------------------------------------------------------------
+
+ICU License - ICU 1.8.1 to ICU 57.1
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2016 International Business Machines Corporation and others
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies of
+the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+of the copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the
+property of their respective owners.
+
+----------------------------------------------------------------------
+
+Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
+
+ #     The Google Chrome software developed by Google is licensed under
+ # the BSD license. Other software included in this distribution is
+ # provided under other licenses, as set forth below.
+ #
+ #  The BSD License
+ #  http://opensource.org/licenses/bsd-license.php
+ #  Copyright (C) 2006-2008, Google Inc.
+ #
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ #  Redistributions of source code must retain the above copyright notice,
+ # this list of conditions and the following disclaimer.
+ #  Redistributions in binary form must reproduce the above
+ # copyright notice, this list of conditions and the following
+ # disclaimer in the documentation and/or other materials provided with
+ # the distribution.
+ #  Neither the name of  Google Inc. nor the names of its
+ # contributors may be used to endorse or promote products derived from
+ # this software without specific prior written permission.
+ #
+ #
+ #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+ #
+ #  The word list in cjdict.txt are generated by combining three word lists
+ # listed below with further processing for compound word breaking. The
+ # frequency is generated with an iterative training against Google web
+ # corpora.
+ #
+ #  * Libtabe (Chinese)
+ #    - https://sourceforge.net/project/?group_id=1519
+ #    - Its license terms and conditions are shown below.
+ #
+ #  * IPADIC (Japanese)
+ #    - http://chasen.aist-nara.ac.jp/chasen/distribution.html
+ #    - Its license terms and conditions are shown below.
+ #
+ #  ---------COPYING.libtabe ---- BEGIN--------------------
+ #
+ #  /*
+ #   * Copyright (c) 1999 TaBE Project.
+ #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
+ #   * All rights reserved.
+ #   *
+ #   * Redistribution and use in source and binary forms, with or without
+ #   * modification, are permitted provided that the following conditions
+ #   * are met:
+ #   *
+ #   * . Redistributions of source code must retain the above copyright
+ #   *   notice, this list of conditions and the following disclaimer.
+ #   * . Redistributions in binary form must reproduce the above copyright
+ #   *   notice, this list of conditions and the following disclaimer in
+ #   *   the documentation and/or other materials provided with the
+ #   *   distribution.
+ #   * . Neither the name of the TaBE Project nor the names of its
+ #   *   contributors may be used to endorse or promote products derived
+ #   *   from this software without specific prior written permission.
+ #   *
+ #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #   * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #   */
+ #
+ #  /*
+ #   * Copyright (c) 1999 Computer Systems and Communication Lab,
+ #   *                    Institute of Information Science, Academia
+ #       *                    Sinica. All rights reserved.
+ #   *
+ #   * Redistribution and use in source and binary forms, with or without
+ #   * modification, are permitted provided that the following conditions
+ #   * are met:
+ #   *
+ #   * . Redistributions of source code must retain the above copyright
+ #   *   notice, this list of conditions and the following disclaimer.
+ #   * . Redistributions in binary form must reproduce the above copyright
+ #   *   notice, this list of conditions and the following disclaimer in
+ #   *   the documentation and/or other materials provided with the
+ #   *   distribution.
+ #   * . Neither the name of the Computer Systems and Communication Lab
+ #   *   nor the names of its contributors may be used to endorse or
+ #   *   promote products derived from this software without specific
+ #   *   prior written permission.
+ #   *
+ #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #   * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #   */
+ #
+ #  Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
+ #      University of Illinois
+ #  c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
+ #
+ #  ---------------COPYING.libtabe-----END--------------------------------
+ #
+ #
+ #  ---------------COPYING.ipadic-----BEGIN-------------------------------
+ #
+ #  Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
+ #  and Technology.  All Rights Reserved.
+ #
+ #  Use, reproduction, and distribution of this software is permitted.
+ #  Any copy of this software, whether in its original form or modified,
+ #  must include both the above copyright notice and the following
+ #  paragraphs.
+ #
+ #  Nara Institute of Science and Technology (NAIST),
+ #  the copyright holders, disclaims all warranties with regard to this
+ #  software, including all implied warranties of merchantability and
+ #  fitness, in no event shall NAIST be liable for
+ #  any special, indirect or consequential damages or any damages
+ #  whatsoever resulting from loss of use, data or profits, whether in an
+ #  action of contract, negligence or other tortuous action, arising out
+ #  of or in connection with the use or performance of this software.
+ #
+ #  A large portion of the dictionary entries
+ #  originate from ICOT Free Software.  The following conditions for ICOT
+ #  Free Software applies to the current dictionary as well.
+ #
+ #  Each User may also freely distribute the Program, whether in its
+ #  original form or modified, to any third party or parties, PROVIDED
+ #  that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+ #  on, or be attached to, the Program, which is distributed substantially
+ #  in the same form as set out herein and that such intended
+ #  distribution, if actually made, will neither violate or otherwise
+ #  contravene any of the laws and regulations of the countries having
+ #  jurisdiction over the User or the intended distribution itself.
+ #
+ #  NO WARRANTY
+ #
+ #  The program was produced on an experimental basis in the course of the
+ #  research and development conducted during the project and is provided
+ #  to users as so produced on an experimental basis.  Accordingly, the
+ #  program is provided without any warranty whatsoever, whether express,
+ #  implied, statutory or otherwise.  The term "warranty" used herein
+ #  includes, but is not limited to, any warranty of the quality,
+ #  performance, merchantability and fitness for a particular purpose of
+ #  the program and the nonexistence of any infringement or violation of
+ #  any right of any third party.
+ #
+ #  Each user of the program will agree and understand, and be deemed to
+ #  have agreed and understood, that there is no warranty whatsoever for
+ #  the program and, accordingly, the entire risk arising from or
+ #  otherwise connected with the program is assumed by the user.
+ #
+ #  Therefore, neither ICOT, the copyright holder, or any other
+ #  organization that participated in or was otherwise related to the
+ #  development of the program and their respective officials, directors,
+ #  officers and other employees shall be held liable for any and all
+ #  damages, including, without limitation, general, special, incidental
+ #  and consequential damages, arising out of or otherwise in connection
+ #  with the use or inability to use the program or any product, material
+ #  or result produced or otherwise obtained by using the program,
+ #  regardless of whether they have been advised of, or otherwise had
+ #  knowledge of, the possibility of such damages at any time during the
+ #  project or thereafter.  Each user will be deemed to have agreed to the
+ #  foregoing by his or her commencement of use of the program.  The term
+ #  "use" as used herein includes, but is not limited to, the use,
+ #  modification, copying and distribution of the program and the
+ #  production of secondary products from the program.
+ #
+ #  In the case where the program, whether in its original form or
+ #  modified, was distributed or delivered to or received by a user from
+ #  any person, organization or entity other than ICOT, unless it makes or
+ #  grants independently of ICOT any specific warranty to the user in
+ #  writing, such person, organization or entity, will also be exempted
+ #  from and not be held liable to the user for any such damages as noted
+ #  above as far as the program is concerned.
+ #
+ #  ---------------COPYING.ipadic-----END----------------------------------
+
+----------------------------------------------------------------------
+
+Lao Word Break Dictionary Data (laodict.txt)
+
+ # Copyright (C) 2016 and later: Unicode, Inc. and others.
+ # License & terms of use: http://www.unicode.org/copyright.html
+ # Copyright (c) 2015 International Business Machines Corporation
+ # and others. All Rights Reserved.
+ #
+ # Project: https://github.com/rober42539/lao-dictionary
+ # Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt
+ # License: https://github.com/rober42539/lao-dictionary/LICENSE.txt
+ #          (copied below)
+ #
+ #	This file is derived from the above dictionary version of Nov 22, 2020
+ #  ----------------------------------------------------------------------
+ #  Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ #  modification, are permitted provided that the following conditions are met:
+ #
+ #  Redistributions of source code must retain the above copyright notice, this
+ #  list of conditions and the following disclaimer. Redistributions in binary
+ #  form must reproduce the above copyright notice, this list of conditions and
+ #  the following disclaimer in the documentation and/or other materials
+ #  provided with the distribution.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # OF THE POSSIBILITY OF SUCH DAMAGE.
+ #  --------------------------------------------------------------------------
+
+----------------------------------------------------------------------
+
+Burmese Word Break Dictionary Data (burmesedict.txt)
+
+ #  Copyright (c) 2014 International Business Machines Corporation
+ #  and others. All Rights Reserved.
+ #
+ #  This list is part of a project hosted at:
+ #    github.com/kanyawtech/myanmar-karen-word-lists
+ #
+ #  --------------------------------------------------------------------------
+ #  Copyright (c) 2013, LeRoy Benjamin Sharon
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ #  modification, are permitted provided that the following conditions
+ #  are met: Redistributions of source code must retain the above
+ #  copyright notice, this list of conditions and the following
+ #  disclaimer.  Redistributions in binary form must reproduce the
+ #  above copyright notice, this list of conditions and the following
+ #  disclaimer in the documentation and/or other materials provided
+ #  with the distribution.
+ #
+ #    Neither the name Myanmar Karen Word Lists, nor the names of its
+ #    contributors may be used to endorse or promote products derived
+ #    from this software without specific prior written permission.
+ #
+ #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ #  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ #  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ #  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
+ #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ #  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ #  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ #  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ #  SUCH DAMAGE.
+ #  --------------------------------------------------------------------------
+
+----------------------------------------------------------------------
+
+Time Zone Database
+
+  ICU uses the public domain data and code derived from Time Zone
+Database for its time zone support. The ownership of the TZ database
+is explained in BCP 175: Procedure for Maintaining the Time Zone
+Database section 7.
+
+ # 7.  Database Ownership
+ #
+ #    The TZ database itself is not an IETF Contribution or an IETF
+ #    document.  Rather it is a pre-existing and regularly updated work
+ #    that is in the public domain, and is intended to remain in the
+ #    public domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
+ #    not apply to the TZ Database or contributions that individuals make
+ #    to it.  Should any claims be made and substantiated against the TZ
+ #    Database, the organization that is providing the IANA
+ #    Considerations defined in this RFC, under the memorandum of
+ #    understanding with the IETF, currently ICANN, may act in accordance
+ #    with all competent court orders.  No ownership claims will be made
+ #    by ICANN or the IETF Trust on the database or the code.  Any person
+ #    making a contribution to the database or code waives all rights to
+ #    future claims in that contribution or in the TZ Database.
+
+----------------------------------------------------------------------
+
+Google double-conversion
+
+Copyright 2006-2011, the V8 project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+
+File: aclocal.m4 (only for ICU4C)
+Section: pkg.m4 - Macros to locate and utilise pkg-config.
+
+
+Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+
+As a special exception to the GNU General Public License, if you
+distribute this file as part of a program that contains a
+configuration script generated by Autoconf, you may include it under
+the same distribution terms that you use for the rest of that
+program.
+
+
+(The condition for the exception is fulfilled because
+ICU4C includes a configuration script generated by Autoconf,
+namely the `configure` script.)
+
+----------------------------------------------------------------------
+
+File: config.guess (only for ICU4C)
+
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, see <https://www.gnu.org/licenses/>.
+
+As a special exception to the GNU General Public License, if you
+distribute this file as part of a program that contains a
+configuration script generated by Autoconf, you may include it under
+the same distribution terms that you use for the rest of that
+program.  This Exception is an additional permission under section 7
+of the GNU General Public License, version 3 ("GPLv3").
+
+
+(The condition for the exception is fulfilled because
+ICU4C includes a configuration script generated by Autoconf,
+namely the `configure` script.)
+
+----------------------------------------------------------------------
+
+File: install-sh (only for ICU4C)
+
+
+Copyright 1991 by the Massachusetts Institute of Technology
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of M.I.T. not be used in advertising or
+publicity pertaining to distribution of the software without specific,
+written prior permission.  M.I.T. makes no representations about the
+suitability of this software for any purpose.  It is provided "as is"
+without express or implied warranty.
+
+==============================================================================
+Code in this repo uses one or more of the following licenses.
+Refer to each file to determine which licenses apply.
+
+-------------------------------------------------------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-------------------------------------------------------------------------
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+==============================================================================
+BoringSSL is a fork of OpenSSL. As such, large parts of it fall under OpenSSL
+licensing. Files that are completely new have a Google copyright and an ISC
+license. This license is reproduced at the bottom of this file.
+
+Contributors to BoringSSL are required to follow the CLA rules for Chromium:
+https://cla.developers.google.com/clas
+
+Files in third_party/ have their own licenses, as described therein. The MIT
+license, for third_party/fiat, which, unlike other third_party directories, is
+compiled into non-test libraries, is included below.
+
+The OpenSSL toolkit stays under a dual license, i.e. both the conditions of the
+OpenSSL License and the original SSLeay license apply to the toolkit. See below
+for the actual license texts. Actually both licenses are BSD-style Open Source
+licenses. In case of any license issues related to OpenSSL please contact
+openssl-core@openssl.org.
+
+The following are Google-internal bug numbers where explicit permission from
+some authors is recorded for use of their work. (This is purely for our own
+record keeping.)
+  27287199
+  27287880
+  27287883
+  263291445
+
+  OpenSSL License
+  ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+
+ISC license used for completely new code in BoringSSL:
+
+/* Copyright (c) 2015, Google Inc.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
+
+
+The code in third_party/fiat carries the MIT license:
+
+Copyright (c) 2015-2016 the fiat-crypto authors (see
+https://github.com/mit-plv/fiat-crypto/blob/master/AUTHORS).
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+Licenses for support code
+-------------------------
+
+Parts of the TLS test suite are under the Go license. This code is not included
+in BoringSSL (i.e. libcrypto and libssl) when compiled, however, so
+distributing code linked against BoringSSL does not trigger this license:
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
 met:
 
-- Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
 
-- Redistribution in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-- Neither the name of Sun Microsystems or the names of contributors may
-be used to endorse or promote products derived from this software without
-specific prior written permission.
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+BoringSSL uses the Chromium test infrastructure to run a continuous build,
+trybots etc. The scripts which manage this, and the script for generating build
+metadata, are under the Chromium license. Distributing code linked against
+BoringSSL does not trigger this license.
 
-The original source code covered by the above license above has been
-modified significantly by Google Inc.
-Copyright 2006-2008 the V8 project authors. All rights reserved.
+Copyright 2015 The Chromium Authors. All rights reserved.
 
-========================================================================
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
 
-valgrind
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
 
-----------------------------------------------------------------
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-Notice that the following BSD-style license applies to this one
-file (valgrind.h) only.  The rest of Valgrind is licensed under the
-terms of the GNU General Public License, version 2, unless
-otherwise indicated.  See the COPYING file in the source
-distribution for details.
+==============================================================================
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
 
-----------------------------------------------------------------
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-This file is part of Valgrind, a dynamic binary instrumentation
-framework.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
-Copyright (C) 2000-2007 Julian Seward.  All rights reserved.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
 
+==============================================================================
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions
 are met:
-
 1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
+   notice, and the entire permission notice in its entirety,
+   including the disclaimer of warranties.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote
+   products derived from this software without specific prior
+   written permission.
 
-2. The origin of this software must not be misrepresented; you must 
-   not claim that you wrote the original software.  If you use this 
-   software in a product, an acknowledgment in the product 
-   documentation would be appreciated but is not required.
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF
+WHICH ARE HEREBY DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
 
-3. Altered source versions must be plainly marked as such, and must
-   not be misrepresented as being the original software.
+==============================================================================
+This package, the EXT2 filesystem utilities, are made available under
+the GNU Public License version 2, with the exception of the lib/ext2fs
+and lib/e2p libraries, which are made available under the GNU Library
+General Public License Version 2, the lib/uuid library which is made
+available under a BSD-style license and the lib/et and lib/ss
+libraries which are made available under an MIT-style license.  Please
+see lib/uuid/COPYING for more details for the license for the files
+comprising the libuuid library, and the source file headers of the
+libet and libss libraries for more information.
 
-4. The name of the author may not be used to endorse or promote 
-   products derived from this software without specific prior written 
-   permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+The most recent officially distributed version can be found at
+http://e2fsprogs.sourceforge.net.  If you need to make a distribution,
+that's the one you should use.  If there is some reason why you'd like
+a more recent version that is still in ALPHA testing (i.e., either
+using the "WIP" test distributions or one from the hg or git
+repository from the development branch, please contact me
+(tytso@mit.edu) before you ship.  The release schedules for this
+package are flexible, if you give me enough lead time.
 
 
-============================================================
-Notices for file(s):
-/framework/org-netbeans-api-visual.jar
-/framework/org-openide-util.jar
-------------------------------------------------------------
-The GNU General Public License (GPL) Version 2, June 1991 
+					Theodore Ts'o
+					23-June-2007
 
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+----------------------------------------------------------------------
 
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
 
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
 
-Preamble
+			    Preamble
 
-The licenses for most software are designed to take away
-your freedom to share and change it. By contrast, the GNU
-General Public License is intended to guarantee your freedom
-to share and change free software--to make sure the software
-is free for all its users. This General Public License
-applies to most of the Free Software Foundation's software
-and to any other program whose authors commit to using it.
-(Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can
-apply it to your programs, too. When we speak of free
-software, we are referring to freedom, not price. Our
-General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and
-charge for this service if you wish), that you receive
-source code or can get it if you want it, that you can
-change the software or use pieces of it in new free
-programs; and that you know you can do these things. To
-protect your rights, we need to make restrictions that
-forbid anyone to deny you these rights or to ask you to
-surrender the rights. These restrictions translate to
-certain responsibilities for you if you distribute copies of
-the software, or if you modify it.
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
 
-For example, if you distribute copies of such a program,
-whether gratis or for a fee, you must give the recipients
-all the rights that you have. You must make sure that they,
-too, receive or can get the source code. And you must show
-them these terms so they know their rights.
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
 
-We protect your rights with two steps: (1) copyright the
-software, and (2) offer you this license which gives you
-legal permission to copy, distribute and/or modify the
-software.
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
 
-Also, for each author's protection and ours, we want to make
-certain that everyone understands that there is no warranty
-for this free software. If the software is modified by
-someone else and passed on, we want its recipients to know
-that what they have is not the original, so that any
-problems introduced by others will not reflect on the
-original authors' reputations.
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
 
-Finally, any free program is threatened constantly by
-software patents. We wish to avoid the danger that
-redistributors of a free program will individually obtain
-patent licenses, in effect making the program proprietary.
-To prevent this, we have made it clear that any patent must
-be licensed for everyone's free use or not licensed at all.
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
 
-The precise terms and conditions for copying, distribution
-and modification follow.
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
 
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
-MODIFICATION
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
 
-0. This License applies to any program or other work which
-contains a notice placed by the copyright holder saying it
-may be distributed under the terms of this General Public
-License. The "Program", below, refers to any such program or
-work, and a "work based on the Program" means either the
-Program or any derivative work under copyright law: that is
-to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into
-another language. (Hereinafter, translation is included
-without limitation in the term "modification".) Each
-licensee is addressed as "you".
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-Activities other than copying, distribution and modification
-are not covered by this License; they are outside its scope.
-The act of running the Program is not restricted, and the
-output from the Program is covered only if its contents
-constitute a work based on the Program (independent of
-having been made by running the Program). Whether that is
-true depends on what the Program does.
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
 
-1. You may copy and distribute verbatim copies of the
-Program's source code as you receive it, in any medium,
-provided that you conspicuously and appropriately publish on
-each copy an appropriate copyright notice and disclaimer of
-warranty; keep intact all the notices that refer to this
-License and to the absence of any warranty; and give any
-other recipients of the Program a copy of this License along
-with the Program.
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
 
-You may charge a fee for the physical act of transferring a
-copy, and you may at your option offer warranty protection
-in exchange for a fee.
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
 
-2. You may modify your copy or copies of the Program or any
-portion of it, thus forming a work based on the Program, and
-copy and distribute such modifications or work under the
-terms of Section 1 above, provided that you also meet all of
-these conditions:
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
 
-a) You must cause the modified files to carry prominent
-notices stating that you changed the files and the date of
-any change.
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
 
-b) You must cause any work that you distribute or publish,
-that in whole or in part contains or is derived from the
-Program or any part thereof, to be licensed as a whole at no
-charge to all third parties under the terms of this License.
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
 
-c) If the modified program normally reads commands
-interactively when run, you must cause it, when started
-running for such interactive use in the most ordinary way,
-to print or display an announcement including an appropriate
-copyright notice and a notice that there is no warranty (or
-else, saying that you provide a warranty) and that users may
-redistribute the program under these conditions, and telling
-the user how to view a copy of this License. (Exception: if
-the Program itself is interactive but does not normally
-print such an announcement, your work based on the Program
-is not required to print an announcement.)
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
 
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the
-Program, and can be reasonably considered independent and
-separate works in themselves, then this License, and its
-terms, do not apply to those sections when you distribute
-them as separate works. But when you distribute the same
-sections as part of a whole which is a work based on the
-Program, the distribution of the whole must be on the terms
-of this License, whose permissions for other licensees
-extend to the entire whole, and thus to each and every part
-regardless of who wrote it.
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
 
-Thus, it is not the intent of this section to claim rights
-or contest your rights to work written entirely by you;
-rather, the intent is to exercise the right to control the
-distribution of derivative or collective works based on the
-Program. In addition, mere aggregation of another work not
-based on the Program with the Program (or with a work based
-on the Program) on a volume of a storage or distribution
-medium does not bring the other work under the scope of this
-License.
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
 
-3. You may copy and distribute the Program (or a work based
-on it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you
-also do one of the following:
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
 
-a) Accompany it with the complete corresponding
-machine-readable source code, which must be distributed
-under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
 
-b) Accompany it with a written offer, valid for at least
-three years, to give any third party, for a charge no more
-than your cost of physically performing source distribution,
-a complete machine-readable copy of the corresponding source
-code, to be distributed under the terms of Sections 1 and 2
-above on a medium customarily used for software interchange;
-or,
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
 
-c) Accompany it with the information you received as to the
-offer to distribute corresponding source code. (This
-alternative is allowed only for noncommercial distribution
-and only if you received the program in object code or
-executable form with such an offer, in accord with
-Subsection b above.)
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
 
-The source code for a work means the preferred form of the
-work for making modifications to it. For an executable work,
-complete source code means all the source code for all
-modules it contains, plus any associated interface
-definition files, plus the scripts used to control
-compilation and installation of the executable. However, as
-a special exception, the source code distributed need not
-include anything that is normally distributed (in either
-source or binary form) with the major components (compiler,
-kernel, and so on) of the operating system on which the
-executable runs, unless that component itself accompanies
-the executable. If distribution of executable or object code
-is made by offering access to copy from a designated place,
-then offering equivalent access to copy the source code from
-the same place counts as distribution of the source code,
-even though third parties are not compelled to copy the
-source along with the object code.
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
 
-4. You may not copy, modify, sublicense, or distribute the
-Program except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense or distribute
-the Program is void, and will automatically terminate your
-rights under this License. However, parties who have
-received copies, or rights, from you under this License will
-not have their licenses terminated so long as such parties
-remain in full compliance.
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
 
-5. You are not required to accept this License, since you
-have not signed it. However, nothing else grants you
-permission to modify or distribute the Program or its
-derivative works. These actions are prohibited by law if you
-do not accept this License. Therefore, by modifying or
-distributing the Program (or any work based on the Program),
-you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or
-modifying the Program or works based on it.
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
 
-6. Each time you redistribute the Program (or any work based
-on the Program), the recipient automatically receives a
-license from the original licensor to copy, distribute or
-modify the Program subject to these terms and conditions.
-You may not impose any further restrictions on the
-recipients' exercise of the rights granted herein. You are
-not responsible for enforcing compliance by third parties to
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
 this License.
 
-7. If, as a consequence of a court judgment or allegation of
-patent infringement or for any other reason (not limited to
-patent issues), conditions are imposed on you (whether by
-court order, agreement or otherwise) that contradict the
-conditions of this License, they do not excuse you from the
-conditions of this License. If you cannot distribute so as
-to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a
-consequence you may not distribute the Program at all. For
-example, if a patent license would not permit royalty-free
-redistribution of the Program by all those who receive
-copies directly or indirectly through you, then the only way
-you could satisfy both it and this License would be to
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
 refrain entirely from distribution of the Program.
 
-If any portion of this section is held invalid or
-unenforceable under any particular circumstance, the balance
-of the section is intended to apply and the section as a
-whole is intended to apply in other circumstances. It is not
-the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest
-validity of any such claims; this section has the sole
-purpose of protecting the integrity of the free software
-distribution system, which is implemented by public license
-practices. Many people have made generous contributions to
-the wide range of software distributed through that system
-in reliance on consistent application of that system; it is
-up to the author/donor to decide if he or she is willing to
-distribute software through any other system and a licensee
-cannot impose that choice.
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
 
-This section is intended to make thoroughly clear what is
-believed to be a consequence of the rest of this License.
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
 
-8. If the distribution and/or use of the Program is
-restricted in certain countries either by patents or by
-copyrighted interfaces, the original copyright holder who
-places the Program under this License may add an explicit
-geographical distribution limitation excluding those
-countries, so that distribution is permitted only in or
-among countries not thus excluded. In such case, this
-License incorporates the limitation as if written in the
-body of this License.
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
 
-9. The Free Software Foundation may publish revised and/or
-new versions of the General Public License from time to
-time. Such new versions will be similar in spirit to the
-present version, but may differ in detail to address new
-problems or concerns.
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
 
-Each version is given a distinguishing version number. If
-the Program specifies a version number of this License which
-applies to it and "any later version", you have the option
-of following the terms and conditions either of that version
-or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number
-of this License, you may choose any version ever published
-by the Free Software Foundation.
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
 
-10. If you wish to incorporate parts of the Program into
-other free programs whose distribution conditions are
-different, write to the author to ask for permission. For
-software which is copyrighted by the Free Software
-Foundation, write to the Free Software Foundation; we
-sometimes make exceptions for this. Our decision will be
-guided by the two goals of preserving the free status of all
-derivatives of our free software and of promoting the
-sharing and reuse of software generally.
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
 
-NO WARRANTY
+			    NO WARRANTY
 
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS
-NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
-COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
-"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
-IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
-OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
-DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 REPAIR OR CORRECTION.
 
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
-TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
-WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
-ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
-SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
-THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
-LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
-LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
-PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
-HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
 
-END OF TERMS AND CONDITIONS
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
 
-How to Apply These Terms to Your New Programs
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
 
-If you develop a new program, and you want it to be of the
-greatest possible use to the public, the best way to achieve
-this is to make it free software which everyone can
-redistribute and change under these terms.
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
 
-To do so, attach the following notices to the program. It is
-safest to attach them to the start of each source file to
-most effectively convey the exclusion of warranty; and each
-file should have at least the "copyright" line and a pointer
-to where the full notice is found.
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
 
-One line to give the program's name and a brief idea of what
-it does.
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
 
-Copyright (C) <year> <name of author>
-This program is free software; you can redistribute it
-and/or modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later
-version. This program is distributed in the hope that it
-will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE. See the GNU General Public License for
-more details. You should have received a copy of the GNU
-General Public License along with this program; if not,
-write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
 
-Also add information on how to contact you by electronic and
-paper mail. If the program is interactive, make it output a
-short notice like this when it starts in an interactive
-mode:
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 
-Gnomovision version 69, Copyright (C) year name of author
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'. This is free software, and you are welcome to
-redistribute it under certain conditions; type `show c' for
-details. The hypothetical commands `show w' and `show c'
-should show the appropriate parts of the General Public
-License. Of course, the commands you use may be called
-something other than `show w' and `show c'; they could even
-be mouse-clicks or menu items--whatever suits your program.
 
-You should also get your employer (if you work as a
-programmer) or your school, if any, to sign a "copyright
-disclaimer" for the program, if necessary. Here is a sample;
-alter the names:
+Also add information on how to contact you by electronic and paper mail.
 
-Yoyodyne, Inc., hereby disclaims all copyright interest in
-the program `Gnomovision' (which makes passes at compilers)
-written by James Hacker.
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
 
-signature of Ty Coon, 1 April 1989
-Ty Coon, President of Vice
-This General Public License does not permit incorporating
-your program into proprietary programs. If your program is a
-subroutine library, you may consider it more useful to
-permit linking proprietary applications with the library. If
-this is what you want to do, use the GNU Library General
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
 Public License instead of this License.
 
-"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
+----------------------------------------------------------------------
 
-Certain source files distributed by Sun Microsystems, Inc. 
-are subject to  the following clarification and special
-exception to the GPL Version 2, but only where Sun has
-expressly included in the particular source file's header
-the words  "Sun designates this particular file as subject
-to the "Classpath" exception as provided by Sun in the
-License file that accompanied this code." 
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
 
-   Linking this library statically or dynamically with other
-modules is making a combined work based on this library. 
-Thus, the terms and conditions of the GNU General Public
-License Version 2 cover the whole combination. 
+ Copyright (C) 1991 Free Software Foundation, Inc.
+    		    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
 
-  As a special exception, the copyright holders of this
-library give you  permission to link this library with
-independent modules to produce an  executable, regardless of
-the license terms of these independent modules,  and to copy
-and distribute the resulting executable under terms of your 
-choice, provided that you also meet, for each linked
-independent module,  the terms and conditions of the license
-of that module.  An independent  module is a module which is
-not derived from or based on this library.  If  you modify
-this library, you may extend this exception to your version
-of  the library, but you are not obligated to do so.  If you
-do not wish to do so, delete this exception statement from
-your version.
-============================================================
-Notices for file(s):
-/lib/libopenjdkjvm.so
-/lib/libopenjdkjvmd.so
-/lib64/libopenjdkjvm.so
-/lib64/libopenjdkjvmd.so
-------------------------------------------------------------
-Copyright (C) 2014 The Android Open Source Project
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
 
-This file implements interfaces from the file jvm.h. This implementation
-is licensed under the same terms as the file jvm.h.  The
-copyright and license information for the file jvm.h follows.
+			    Preamble
 
-Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
 
-This code is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 2 only, as
-published by the Free Software Foundation.  Oracle designates this
-particular file as subject to the "Classpath" exception as provided
-by Oracle in the LICENSE file that accompanied this code.
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
 
-This code is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-version 2 for more details (a copy is included in the LICENSE file that
-accompanied this code).
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
 
-You should have received a copy of the GNU General Public License version
-2 along with this work; if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
 
-Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-or visit www.oracle.com if you need additional information or have any
-questions.
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
 
-============================================================
-Notices for file(s):
-/bin/mdnsd
-------------------------------------------------------------
-The majority of the source code in the mDNSResponder project is licensed
-under the terms of the Apache License, Version 2.0, available from:
-   <http://www.apache.org/licenses/LICENSE-2.0>
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
 
-To accommodate license compatibility with the widest possible range
-of client code licenses, the shared library code, which is linked
-at runtime into the same address space as the client using it, is
-licensed under the terms of the "Three-Clause BSD License".
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
 
-The Linux Name Service Switch code, contributed by National ICT
-Australia Ltd (NICTA) is licensed under the terms of the NICTA Public
-Software Licence (which is substantially similar to the "Three-Clause
-BSD License", with some additional language pertaining to Australian law).
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
 
-============================================================
-Notices for file(s):
-/bin/fsck.f2fs
-/bin/make_f2fs
-/bin/sload_f2fs
-------------------------------------------------------------
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+==============================================================================
+Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
+Copyright (c) 2001-2022 Expat maintainers
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+==============================================================================
 The tools for F2FS are covered by GNU Public License version 2.
 Exceptionally, the following files are also covered by the GNU Lesser General
 Public License Version 2.1 as the dual licenses.
@@ -1999,359 +3294,73 @@
 
 That's all there is to it!
 
-============================================================
-Notices for file(s):
-/bin/fc_sort
-------------------------------------------------------------
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+==============================================================================
+Copyright (c) 2012 - 2016, Victor Zverovich
 
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
+All rights reserved.
 
-			    Preamble
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
 
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
 
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
+==============================================================================
+Copyright (c) 2012 - present, Victor Zverovich and {fmt} contributors
 
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
 
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
 
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
+--- Optional exception to the license ---
 
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into a machine-executable object form of such
+source code, you may redistribute such embedded portions in such object form
+without including the above copyright and permission notices.
 
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
+==============================================================================
 
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
+   Copyright (c) 2005-2008, The Android Open Source Project
 
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
 
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
 
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-============================================================
-Notices for file(s):
-/bin/assemble_vintf
-/framework/guavalib.jar
-/framework/jarjar.jar
-/framework/objenesis-host.jar
-/lib64/libvintf.so
-------------------------------------------------------------
 
                                  Apache License
                            Version 2.0, January 2004
@@ -2530,1379 +3539,8 @@
 
    END OF TERMS AND CONDITIONS
 
-   APPENDIX: How to apply the Apache License to your work.
 
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-============================================================
-Notices for file(s):
-/lib/libdt_socket.so
-/lib/libjdwp.so
-/lib/libnpt.so
-/lib64/libdt_socket.so
-/lib64/libjdwp.so
-/lib64/libnpt.so
-------------------------------------------------------------
-The GNU General Public License (GPL)
-
-Version 2, June 1991
-
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Everyone is permitted to copy and distribute verbatim copies of this license
-document, but changing it is not allowed.
-
-Preamble
-
-The licenses for most software are designed to take away your freedom to share
-and change it.  By contrast, the GNU General Public License is intended to
-guarantee your freedom to share and change free software--to make sure the
-software is free for all its users.  This General Public License applies to
-most of the Free Software Foundation's software and to any other program whose
-authors commit to using it.  (Some other Free Software Foundation software is
-covered by the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
-When we speak of free software, we are referring to freedom, not price.  Our
-General Public Licenses are designed to make sure that you have the freedom to
-distribute copies of free software (and charge for this service if you wish),
-that you receive source code or can get it if you want it, that you can change
-the software or use pieces of it in new free programs; and that you know you
-can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to deny
-you these rights or to ask you to surrender the rights.  These restrictions
-translate to certain responsibilities for you if you distribute copies of the
-software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis or for
-a fee, you must give the recipients all the rights that you have.  You must
-make sure that they, too, receive or can get the source code.  And you must
-show them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the software, and (2)
-offer you this license which gives you legal permission to copy, distribute
-and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain that
-everyone understands that there is no warranty for this free software.  If the
-software is modified by someone else and passed on, we want its recipients to
-know that what they have is not the original, so that any problems introduced
-by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents.  We
-wish to avoid the danger that redistributors of a free program will
-individually obtain patent licenses, in effect making the program proprietary.
-To prevent this, we have made it clear that any patent must be licensed for
-everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and modification
-follow.
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License applies to any program or other work which contains a notice
-placed by the copyright holder saying it may be distributed under the terms of
-this General Public License.  The "Program", below, refers to any such program
-or work, and a "work based on the Program" means either the Program or any
-derivative work under copyright law: that is to say, a work containing the
-Program or a portion of it, either verbatim or with modifications and/or
-translated into another language.  (Hereinafter, translation is included
-without limitation in the term "modification".) Each licensee is addressed as
-"you".
-
-Activities other than copying, distribution and modification are not covered by
-this License; they are outside its scope.  The act of running the Program is
-not restricted, and the output from the Program is covered only if its contents
-constitute a work based on the Program (independent of having been made by
-running the Program).  Whether that is true depends on what the Program does.
-
-1. You may copy and distribute verbatim copies of the Program's source code as
-you receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this License
-and to the absence of any warranty; and give any other recipients of the
-Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and you may
-at your option offer warranty protection in exchange for a fee.
-
-2. You may modify your copy or copies of the Program or any portion of it, thus
-forming a work based on the Program, and copy and distribute such modifications
-or work under the terms of Section 1 above, provided that you also meet all of
-these conditions:
-
-    a) You must cause the modified files to carry prominent notices stating
-    that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in whole or
-    in part contains or is derived from the Program or any part thereof, to be
-    licensed as a whole at no charge to all third parties under the terms of
-    this License.
-
-    c) If the modified program normally reads commands interactively when run,
-    you must cause it, when started running for such interactive use in the
-    most ordinary way, to print or display an announcement including an
-    appropriate copyright notice and a notice that there is no warranty (or
-    else, saying that you provide a warranty) and that users may redistribute
-    the program under these conditions, and telling the user how to view a copy
-    of this License.  (Exception: if the Program itself is interactive but does
-    not normally print such an announcement, your work based on the Program is
-    not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If identifiable
-sections of that work are not derived from the Program, and can be reasonably
-considered independent and separate works in themselves, then this License, and
-its terms, do not apply to those sections when you distribute them as separate
-works.  But when you distribute the same sections as part of a whole which is a
-work based on the Program, the distribution of the whole must be on the terms
-of this License, whose permissions for other licensees extend to the entire
-whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based on
-the Program.
-
-In addition, mere aggregation of another work not based on the Program with the
-Program (or with a work based on the Program) on a volume of a storage or
-distribution medium does not bring the other work under the scope of this
-License.
-
-3. You may copy and distribute the Program (or a work based on it, under
-Section 2) in object code or executable form under the terms of Sections 1 and
-2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable source
-    code, which must be distributed under the terms of Sections 1 and 2 above
-    on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three years, to
-    give any third party, for a charge no more than your cost of physically
-    performing source distribution, a complete machine-readable copy of the
-    corresponding source code, to be distributed under the terms of Sections 1
-    and 2 above on a medium customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer to
-    distribute corresponding source code.  (This alternative is allowed only
-    for noncommercial distribution and only if you received the program in
-    object code or executable form with such an offer, in accord with
-    Subsection b above.)
-
-The source code for a work means the preferred form of the work for making
-modifications to it.  For an executable work, complete source code means all
-the source code for all modules it contains, plus any associated interface
-definition files, plus the scripts used to control compilation and installation
-of the executable.  However, as a special exception, the source code
-distributed need not include anything that is normally distributed (in either
-source or binary form) with the major components (compiler, kernel, and so on)
-of the operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the source
-code from the same place counts as distribution of the source code, even though
-third parties are not compelled to copy the source along with the object code.
-
-4. You may not copy, modify, sublicense, or distribute the Program except as
-expressly provided under this License.  Any attempt otherwise to copy, modify,
-sublicense or distribute the Program is void, and will automatically terminate
-your rights under this License.  However, parties who have received copies, or
-rights, from you under this License will not have their licenses terminated so
-long as such parties remain in full compliance.
-
-5. You are not required to accept this License, since you have not signed it.
-However, nothing else grants you permission to modify or distribute the Program
-or its derivative works.  These actions are prohibited by law if you do not
-accept this License.  Therefore, by modifying or distributing the Program (or
-any work based on the Program), you indicate your acceptance of this License to
-do so, and all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-6. Each time you redistribute the Program (or any work based on the Program),
-the recipient automatically receives a license from the original licensor to
-copy, distribute or modify the Program subject to these terms and conditions.
-You may not impose any further restrictions on the recipients' exercise of the
-rights granted herein.  You are not responsible for enforcing compliance by
-third parties to this License.
-
-7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues), conditions
-are imposed on you (whether by court order, agreement or otherwise) that
-contradict the conditions of this License, they do not excuse you from the
-conditions of this License.  If you cannot distribute so as to satisfy
-simultaneously your obligations under this License and any other pertinent
-obligations, then as a consequence you may not distribute the Program at all.
-For example, if a patent license would not permit royalty-free redistribution
-of the Program by all those who receive copies directly or indirectly through
-you, then the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply and
-the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or
-other property right claims or to contest validity of any such claims; this
-section has the sole purpose of protecting the integrity of the free software
-distribution system, which is implemented by public license practices.  Many
-people have made generous contributions to the wide range of software
-distributed through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing to
-distribute software through any other system and a licensee cannot impose that
-choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-8. If the distribution and/or use of the Program is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Program under this License may add an explicit
-geographical distribution limitation excluding those countries, so that
-distribution is permitted only in or among countries not thus excluded.  In
-such case, this License incorporates the limitation as if written in the body
-of this License.
-
-9. The Free Software Foundation may publish revised and/or new versions of the
-General Public License from time to time.  Such new versions will be similar in
-spirit to the present version, but may differ in detail to address new problems
-or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any later
-version", you have the option of following the terms and conditions either of
-that version or of any later version published by the Free Software Foundation.
-If the Program does not specify a version number of this License, you may
-choose any version ever published by the Free Software Foundation.
-
-10. If you wish to incorporate parts of the Program into other free programs
-whose distribution conditions are different, write to the author to ask for
-permission.  For software which is copyrighted by the Free Software Foundation,
-write to the Free Software Foundation; we sometimes make exceptions for this.
-Our decision will be guided by the two goals of preserving the free status of
-all derivatives of our free software and of promoting the sharing and reuse of
-software generally.
-
-NO WARRANTY
-
-11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
-THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
-STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
-PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
-YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
-ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
-PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
-BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
-OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the greatest possible
-use to the public, the best way to achieve this is to make it free software
-which everyone can redistribute and change under these terms.
-
-To do so, attach the following notices to the program.  It is safest to attach
-them to the start of each source file to most effectively convey the exclusion
-of warranty; and each file should have at least the "copyright" line and a
-pointer to where the full notice is found.
-
-    One line to give the program's name and a brief idea of what it does.
-
-    Copyright (C) <year> <name of author>
-
-    This program is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the Free
-    Software Foundation; either version 2 of the License, or (at your option)
-    any later version.
-
-    This program is distributed in the hope that it will be useful, but WITHOUT
-    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
-    more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this when it
-starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
-    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
-    software, and you are welcome to redistribute it under certain conditions;
-    type 'show c' for details.
-
-The hypothetical commands 'show w' and 'show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may be
-called something other than 'show w' and 'show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
-is a sample; alter the names:
-
-    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-    'Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-    signature of Ty Coon, 1 April 1989
-
-    Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General Public
-License instead of this License.
-
-
-"CLASSPATH" EXCEPTION TO THE GPL
-
-Certain source files distributed by Oracle America and/or its affiliates are
-subject to the following clarification and special exception to the GPL, but
-only where Oracle has expressly included in the particular source file's header
-the words "Oracle designates this particular file as subject to the "Classpath"
-exception as provided by Oracle in the LICENSE file that accompanied this code."
-
-    Linking this library statically or dynamically with other modules is making
-    a combined work based on this library.  Thus, the terms and conditions of
-    the GNU General Public License cover the whole combination.
-
-    As a special exception, the copyright holders of this library give you
-    permission to link this library with independent modules to produce an
-    executable, regardless of the license terms of these independent modules,
-    and to copy and distribute the resulting executable under terms of your
-    choice, provided that you also meet, for each linked independent module,
-    the terms and conditions of the license of that module.  An independent
-    module is a module which is not derived from or based on this library.  If
-    you modify this library, you may extend this exception to your version of
-    the library, but you are not obligated to do so.  If you do not wish to do
-    so, delete this exception statement from your version.
-
-============================================================
-Notices for file(s):
-/lib64/libcap.so
-------------------------------------------------------------
-Unless otherwise *explicitly* stated, the following text describes the
-licensed conditions under which the contents of this libcap release
-may be used and distributed:
-
--------------------------------------------------------------------------
-Redistribution and use in source and binary forms of libcap, with
-or without modification, are permitted provided that the following
-conditions are met:
-
-1. Redistributions of source code must retain any existing copyright
-   notice, and this entire permission notice in its entirety,
-   including the disclaimer of warranties.
-
-2. Redistributions in binary form must reproduce all prior and current
-   copyright notices, this list of conditions, and the following
-   disclaimer in the documentation and/or other materials provided
-   with the distribution.
-
-3. The name of any author may not be used to endorse or promote
-   products derived from this software without their specific prior
-   written permission.
-
-ALTERNATIVELY, this product may be distributed under the terms of the
-GNU General Public License (v2.0 - see below), in which case the
-provisions of the GNU GPL are required INSTEAD OF the above
-restrictions.  (This clause is necessary due to a potential conflict
-between the GNU GPL and the restrictions contained in a BSD-style
-copyright.)
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
-USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
--------------------------------------------------------------------------
-
--------------------------
-Full text of gpl-2.0.txt:
--------------------------
-
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
-
-============================================================
-Notices for file(s):
-/lib64/libevent-host.so
-------------------------------------------------------------
-Libevent is available for use under the following license, commonly known
-as the 3-clause (or "modified") BSD license:
-
-==============================
-Copyright (c) 2000-2007 Niels Provos <provos@citi.umich.edu>
-Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-3. The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-==============================
-
-Portions of Libevent are based on works by others, also made available by
-them under the three-clause BSD license above.  The copyright notices are
-available in the corresponding source files; the license is as above.  Here's
-a list:
-
-log.c:
-   Copyright (c) 2000 Dug Song <dugsong@monkey.org>
-   Copyright (c) 1993 The Regents of the University of California.
-
-strlcpy.c:
-   Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
-
-win32select.c:
-   Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
-
-evport.c:
-   Copyright (c) 2007 Sun Microsystems
-
-ht-internal.h:
-   Copyright (c) 2002 Christopher Clark
-
-minheap-internal.h:
-   Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
-
-==============================
-
-The arc4module is available under the following, sometimes called the
-"OpenBSD" license:
-
-   Copyright (c) 1996, David Mazieres <dm@uun.org>
-   Copyright (c) 2008, Damien Miller <djm@openbsd.org>
-
-   Permission to use, copy, modify, and distribute this software for any
-   purpose with or without fee is hereby granted, provided that the above
-   copyright notice and this permission notice appear in all copies.
-
-   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-   WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-   MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-   ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-
-============================================================
-Notices for file(s):
-/lib/libopenjdkjvmti.so
-/lib/libopenjdkjvmtid.so
-/lib64/libopenjdkjvmti.so
-/lib64/libopenjdkjvmtid.so
-------------------------------------------------------------
-Copyright (C) 2016 The Android Open Source Project
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
-This file implements interfaces from the file jvmti.h. This implementation
-is licensed under the same terms as the file jvmti.h.  The
-copyright and license information for the file jvmti.h follows.
-
-Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
-This code is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 2 only, as
-published by the Free Software Foundation.  Oracle designates this
-particular file as subject to the "Classpath" exception as provided
-by Oracle in the LICENSE file that accompanied this code.
-
-This code is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-version 2 for more details (a copy is included in the LICENSE file that
-accompanied this code).
-
-You should have received a copy of the GNU General Public License version
-2 along with this work; if not, write to the Free Software Foundation,
-Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-or visit www.oracle.com if you need additional information or have any
-questions.
-
-============================================================
-Notices for file(s):
-/lib64/libchrome.so
-------------------------------------------------------------
-// Copyright 2014 The Chromium Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-============================================================
-Notices for file(s):
-/framework/commons-compress-1.0.jar
-------------------------------------------------------------
-Apache Commons Compress
-Copyright 2002-2009 The Apache Software Foundation
-
-This product includes software developed by
-The Apache Software Foundation (http://www.apache.org/).
-
-Original BZip2 classes contributed by Keiron Liddle
-<keiron@aftexsw.com>, Aftex Software to the Apache Ant project
-
-Original Tar classes from contributors of the Apache Ant project
-
-Original Zip classes from contributors of the Apache Ant project
-
-Original CPIO classes contributed by Markus Kuss and the jRPM project
-(jrpm.sourceforge.net)
-
-============================================================
-Notices for file(s):
-/bin/sgdisk
-------------------------------------------------------------
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-		    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-			    NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-	    How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year  name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-============================================================
-Notices for file(s):
-/lib/libexpat-host.so
-/lib/libexpat.a
-/lib64/libexpat-host.so
-/lib64/libexpat.a
-------------------------------------------------------------
-Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper
-Copyright (c) 2001-2017 Expat maintainers
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-============================================================
-Notices for file(s):
-/bin/sqlite3
-/lib/libsqlite.so
-/lib64/libsqlite.so
-------------------------------------------------------------
-2001 September 15
-
-The author disclaims copyright to this source code.  In place of
-a legal notice, here is a blessing:
-
-   May you do good and not evil.
-   May you find forgiveness for yourself and forgive others.
-   May you share freely, never taking more than you give.
-
-
-============================================================
-Notices for file(s):
-/framework/conscrypt.jar
-/lib/libconscrypt_openjdk_jni.so
-/lib/libjavacrypto.so
-/lib64/libconscrypt_openjdk_jni.so
-/lib64/libjavacrypto.so
-------------------------------------------------------------
-Copyright 2016 The Android Open Source Project
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
------------------------------------------------------------------------
-This product contains a modified portion of `Netty`, a configurable network
-stack in Java, which can be obtained at:
-
-  * LICENSE:
-    * licenses/LICENSE.netty.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * http://netty.io/
-
-This product contains a modified portion of `Apache Harmony`, modular Java runtime,
-which can be obtained at:
-
-  * LICENSE:
-    * licenses/LICENSE.harmony.txt (Apache License 2.0)
-  * HOMEPAGE:
-    * https://harmony.apache.org/
-
-============================================================
-Notices for file(s):
-/lib64/libplatformprotos.so
-------------------------------------------------------------
+==============================================================================
    =========================================================================
    ==  NOTICE file corresponding to the section 4 d of                    ==
    ==  the Apache License, Version 2.0,                                   ==
@@ -3961,17 +3599,6 @@
    =========================================================================
    ==  NOTICE file corresponding to the section 4 d of                    ==
    ==  the Apache License, Version 2.0,                                   ==
-   ==  in this case for the mDnsResponder code.                           ==
-   =========================================================================
-
-mDnsResponder TXTRecord
-This file is Copyright 2004 Apple Computer, Inc.  but released under
-the Apache2 License.
-
-
-   =========================================================================
-   ==  NOTICE file corresponding to the section 4 d of                    ==
-   ==  the Apache License, Version 2.0,                                   ==
    ==  in this case for the TagSoup code.                                 ==
    =========================================================================
 
@@ -4239,613 +3866,37 @@
 or other dealings in these Data Files or Software without prior written
 authorization of the copyright holder.
 
-============================================================
-Notices for file(s):
-/bin/adb
-------------------------------------------------------------
-
-   Copyright (c) 2006-2009, The Android Open Source Project
-   Copyright 2006, Brian Swetland <swetland@frotz.net>
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-------------------------------------------------------------
-libwinpthread license:
-------------------------------------------------------------
-Copyright (c) 2011 mingw-w64 project
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
-
-/*
- * Parts of this library are derived by:
- *
- * Posix Threads library for Microsoft Windows
- *
- * Use at own risk, there is no implied warranty to this code.
- * It uses undocumented features of Microsoft Windows that can change
- * at any time in the future.
- *
- * (C) 2010 Lockless Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- *
- *  * Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *  * Neither the name of Lockless Inc. nor the names of its contributors may be
- *    used to endorse or promote products derived from this software without
- *    specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-============================================================
-Notices for file(s):
-/bin/llvm-rs-cc
-------------------------------------------------------------
-=========================
-NOTICE file for slang.git
-=========================
-
-   Copyright (c) 2005-2011, The Android Open Source Project
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-
-===========================================
-NOTICE file for external/clang (clang.git).
-Note: libclang*.a are statically linked.
-===========================================
-
 ==============================================================================
-LLVM Release License
-==============================================================================
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2007-2011 University of Illinois at Urbana-Champaign.
+Copyright 2008, Google Inc.
 All rights reserved.
 
-Developed by:
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
 
-    LLVM Team
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
 
-    University of Illinois at Urbana-Champaign
-
-    http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimers.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimers in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the names of the LLVM Team, University of Illinois at
-      Urbana-Champaign, nor the names of its contributors may be used to
-      endorse or promote products derived from this Software without specific
-      prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 ==============================================================================
-The LLVM software contains code written by third parties.  Such software will
-have its own individual LICENSE.TXT file in the directory in which it appears.
-This file will describe the copyrights, license, and restrictions which apply
-to that code.
-
-The disclaimer of warranty in the University of Illinois Open Source License
-applies to all code in the LLVM Distribution, and nothing in any of the
-other licenses gives permission to use the names of the LLVM Team or the
-University of Illinois to endorse or promote products derived from this
-Software.
-
-The following pieces of software have additional or alternate copyrights,
-licenses, and/or restrictions:
-
-Program             Directory
--------             ---------
-<none yet>
-
-
-
-=========================================
-NOTICE file for external/llvm (llvm.git).
-Note: libLLVM*.a are statically linked.
-=========================================
-
-==============================================================================
-LLVM Release License
-==============================================================================
-University of Illinois/NCSA
-Open Source License
-
-Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.
-All rights reserved.
-
-Developed by:
-
-    LLVM Team
-
-    University of Illinois at Urbana-Champaign
-
-    http://llvm.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal with
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimers.
-
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimers in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the names of the LLVM Team, University of Illinois at
-      Urbana-Champaign, nor the names of its contributors may be used to
-      endorse or promote products derived from this Software without specific
-      prior written permission.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
-SOFTWARE.
-
-==============================================================================
-Copyrights and Licenses for Third Party Software Distributed with LLVM:
-==============================================================================
-The LLVM software contains code written by third parties.  Such software will
-have its own individual LICENSE.TXT file in the directory in which it appears.
-This file will describe the copyrights, license, and restrictions which apply
-to that code.
-
-The disclaimer of warranty in the University of Illinois Open Source License
-applies to all code in the LLVM Distribution, and nothing in any of the
-other licenses gives permission to use the names of the LLVM Team or the
-University of Illinois to endorse or promote products derived from this
-Software.
-
-The following pieces of software have additional or alternate copyrights,
-licenses, and/or restrictions:
-
-Program             Directory
--------             ---------
-Autoconf            llvm/autoconf
-                    llvm/projects/ModuleMaker/autoconf
-                    llvm/projects/sample/autoconf
-CellSPU backend     llvm/lib/Target/CellSPU/README.txt
-Google Test         llvm/utils/unittest/googletest
-OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
-
-============================================================
-Notices for file(s):
-/lib/libc++.so
-/lib/libc++_static.a
-/lib64/libc++.so
-/lib64/libc++_static.a
-------------------------------------------------------------
 ==============================================================================
 libc++ License
 ==============================================================================
@@ -4923,105 +3974,65 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
-============================================================
-Notices for file(s):
-/lib/libjpeg.so
-/lib64/libjpeg.so
-------------------------------------------------------------
-libjpeg-turbo Licenses
-======================
+==============================================================================
+==============================================================================
+libc++abi License
+==============================================================================
 
-libjpeg-turbo is covered by three compatible BSD-style open source licenses:
+The libc++abi library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license.  As a user of this code you may choose
+to use it under either license.  As a contributor, you agree to allow your code
+to be used under both.
 
-- The IJG (Independent JPEG Group) License, which is listed in
-  [README.ijg](README.ijg)
+Full text of the relevant licenses is included below.
 
-  This license applies to the libjpeg API library and associated programs
-  (any code inherited from libjpeg, and any modifications to that code.)
+==============================================================================
 
-- The Modified (3-clause) BSD License, which is listed in
-  [turbojpeg.c](turbojpeg.c)
+University of Illinois/NCSA
+Open Source License
 
-  This license covers the TurboJPEG API library and associated programs.
+Copyright (c) 2009-2018 by the contributors listed in CREDITS.TXT
 
-- The zlib License, which is listed in [simd/jsimdext.inc](simd/jsimdext.inc)
+All rights reserved.
 
-  This license is a subset of the other two, and it covers the libjpeg-turbo
-  SIMD extensions.
+Developed by:
 
+    LLVM Team
 
-Complying with the libjpeg-turbo Licenses
-=========================================
+    University of Illinois at Urbana-Champaign
 
-This section provides a roll-up of the libjpeg-turbo licensing terms, to the
-best of our understanding.
+    http://llvm.org
 
-1.  If you are distributing a modified version of the libjpeg-turbo source,
-    then:
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
 
-    1.  You cannot alter or remove any existing copyright or license notices
-        from the source.
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
 
-        **Origin**
-        - Clause 1 of the IJG License
-        - Clause 1 of the Modified BSD License
-        - Clauses 1 and 3 of the zlib License
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
 
-    2.  You must add your own copyright notice to the header of each source
-        file you modified, so others can tell that you modified that file (if
-        there is not an existing copyright header in that file, then you can
-        simply add a notice stating that you modified the file.)
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
 
-        **Origin**
-        - Clause 1 of the IJG License
-        - Clause 2 of the zlib License
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
 
-    3.  You must include the IJG README file, and you must not alter any of the
-        copyright or license text in that file.
+==============================================================================
 
-        **Origin**
-        - Clause 1 of the IJG License
-
-2.  If you are distributing only libjpeg-turbo binaries without the source, or
-    if you are distributing an application that statically links with
-    libjpeg-turbo, then:
-
-    1.  Your product documentation must include a message stating:
-
-        This software is based in part on the work of the Independent JPEG
-        Group.
-
-        **Origin**
-        - Clause 2 of the IJG license
-
-    2.  If your binary distribution includes or uses the TurboJPEG API, then
-        your product documentation must include the text of the Modified BSD
-        License.
-
-        **Origin**
-        - Clause 2 of the Modified BSD License
-
-3.  You cannot use the name of the IJG or The libjpeg-turbo Project or the
-    contributors thereof in advertising, publicity, etc.
-
-    **Origin**
-    - IJG License
-    - Clause 3 of the Modified BSD License
-
-4.  The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
-    free of defects, nor do we accept any liability for undesirable
-    consequences resulting from your use of the software.
-
-    **Origin**
-    - IJG License
-    - Modified BSD License
-    - zlib License
-
-============================================================
-Notices for file(s):
-/lib64/libbrotli.so
-------------------------------------------------------------
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -5035,922 +4046,232 @@
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
-============================================================
-Notices for file(s):
-/bin/aapt
-/bin/aidl
-/bin/dexdump
-/bin/dx
-/bin/host_init_verifier
-/bin/showmap
-/framework/dx.jar
-/lib/libaapt.a
-/lib/libandroidfw.a
-/lib/libcutils.a
-/lib/libcutils.so
-/lib/libnativehelper.so
-/lib/libutils.a
-/lib64/libaapt.a
-/lib64/libandroidfw.a
-/lib64/libcutils.a
-/lib64/libcutils.so
-/lib64/libnativehelper.so
-/lib64/libutils.a
-------------------------------------------------------------
+==============================================================================
+==============================================================================
+libc++abi License
+==============================================================================
 
-   Copyright (c) 2005-2008, The Android Open Source Project
+The libc++abi library is dual licensed under both the University of Illinois
+"BSD-Like" license and the MIT license.  As a user of this code you may choose
+to use it under either license.  As a contributor, you agree to allow your code
+to be used under both.
 
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
+Full text of the relevant licenses is included below.
 
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
+==============================================================================
 
+University of Illinois/NCSA
+Open Source License
 
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-
-============================================================
-Notices for file(s):
-/framework/jdiff.jar
-------------------------------------------------------------
-		  GNU LESSER GENERAL PUBLIC LICENSE
-		       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-			    Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-		  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-			    NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-		     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
-
-
-
-============================================================
-Notices for file(s):
-/lib/libjavacore.so
-/lib/libopenjdk.so
-/lib/libopenjdkd.so
-/lib64/libjavacore.so
-/lib64/libopenjdk.so
-/lib64/libopenjdkd.so
-------------------------------------------------------------
-   =========================================================================
-   ==  NOTICE file corresponding to the section 4 d of                    ==
-   ==  the Apache License, Version 2.0,                                   ==
-   ==  in this case for the Android-specific code.                        ==
-   =========================================================================
-
-Android Code
-Copyright 2005-2008 The Android Open Source Project
-
-This product includes software developed as part of
-The Android Open Source Project (http://source.android.com).
-
-   =========================================================================
-   ==  NOTICE file corresponding to the section 4 d of                    ==
-   ==  the Apache License, Version 2.0,                                   ==
-   ==  in this case for the Apache Harmony distribution.                  ==
-   =========================================================================
-
-Apache Harmony
-Copyright 2006 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-Portions of Harmony were originally developed by
-Intel Corporation and are licensed to the Apache Software
-Foundation under the "Software Grant and Corporate Contribution
-License Agreement", informally known as the "Intel Harmony CLA".
-
-
-   =========================================================================
-   ==  NOTICE file for the ICU License.                                   ==
-   =========================================================================
-
-Copyright (c) 1995-2014 International Business Machines Corporation and others
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
 
 All rights reserved.
 
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
+Developed by:
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
-SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
-RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
-CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+    LLVM Team
 
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
+    University of Illinois at Urbana-Champaign
 
-All trademarks and registered trademarks mentioned herein are the
-property of their respective owners.
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+
+Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+==============================================================================
+COPYRIGHT NOTICE, DISCLAIMER, and LICENSE
+=========================================
+
+PNG Reference Library License version 2
+---------------------------------------
+
+ * Copyright (c) 1995-2023 The PNG Reference Library Authors.
+ * Copyright (c) 2018-2023 Cosmin Truta.
+ * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
+ * Copyright (c) 1996-1997 Andreas Dilger.
+ * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
+
+The software is supplied "as is", without warranty of any kind,
+express or implied, including, without limitation, the warranties
+of merchantability, fitness for a particular purpose, title, and
+non-infringement.  In no event shall the Copyright owners, or
+anyone distributing the software, be liable for any damages or
+other liability, whether in contract, tort or otherwise, arising
+from, out of, or in connection with the software, or the use or
+other dealings in the software, even if advised of the possibility
+of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute
+this software, or portions hereof, for any purpose, without fee,
+subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you
+    must not claim that you wrote the original software.  If you
+    use this software in a product, an acknowledgment in the product
+    documentation would be appreciated, but is not required.
+
+ 2. Altered source versions must be plainly marked as such, and must
+    not be misrepresented as being the original software.
+
+ 3. This Copyright notice may not be removed or altered from any
+    source or altered source distribution.
 
 
-   =========================================================================
-   ==  NOTICE file for the KXML License.                                  ==
-   =========================================================================
+PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35)
+-----------------------------------------------------------------------
 
-Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany
+libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are
+Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are
+derived from libpng-1.0.6, and are distributed according to the same
+disclaimer and license as libpng-1.0.6 with the following individuals
+added to the list of Contributing Authors:
 
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
+    Simon-Pierre Cadieux
+    Eric S. Raymond
+    Mans Rullgard
+    Cosmin Truta
+    Gilles Vollant
+    James Yu
+    Mandar Sahastrabuddhe
+    Google Inc.
+    Vadim Barkov
 
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+and with the following additions to the disclaimer:
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+    There is no warranty against interference with your enjoyment of
+    the library or against infringement.  There is no warranty that our
+    efforts or the library will fulfill any of your particular purposes
+    or needs.  This library is provided with all faults, and the entire
+    risk of satisfactory quality, performance, accuracy, and effort is
+    with the user.
 
+Some files in the "contrib" directory and some configure-generated
+files that are distributed with libpng have other copyright owners, and
+are released under other open source licenses.
 
-   =========================================================================
-   ==  NOTICE file for the W3C License.                                   ==
-   =========================================================================
+libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
+libpng-0.96, and are distributed according to the same disclaimer and
+license as libpng-0.96, with the following individuals added to the
+list of Contributing Authors:
 
-Copyright (c) 2000 World Wide Web Consortium, (Massachusetts Institute
-of Technology, Institut National de Recherche en Informatique et en
-Automatique, Keio University). All Rights Reserved. This program is
-distributed under the W3C's Software Intellectual Property License.
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+    Tom Lane
+    Glenn Randers-Pehrson
+    Willem van Schaik
 
-See W3C License http://www.w3.org/Consortium/Legal/ for more details.
+libpng versions 0.89, June 1996, through 0.96, May 1997, are
+Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
+and are distributed according to the same disclaimer and license as
+libpng-0.88, with the following individuals added to the list of
+Contributing Authors:
 
-   =========================================================================
-   ==  NOTICE file for the fdlibm License.                                   ==
-   =========================================================================
+    John Bowler
+    Kevin Bracey
+    Sam Bushell
+    Magnus Holmgren
+    Greg Roelofs
+    Tom Tanner
 
-Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+Some files in the "scripts" directory have other copyright owners,
+but are released under this license.
 
-Developed at SunSoft, a Sun Microsystems, Inc. business.
-Permission to use, copy, modify, and distribute this
-software is freely granted, provided that this notice
-is preserved.
+libpng versions 0.5, May 1995, through 0.88, January 1996, are
+Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
 
-============================================================
-Notices for file(s):
-/framework/doclava.jar
-------------------------------------------------------------
- 
- Copyright (C) 2010 Google Inc.
- 
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- 
- http://www.apache.org/licenses/LICENSE-2.0
- 
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
+For the purposes of this copyright and license, "Contributing Authors"
+is defined as the following set of individuals:
 
+    Andreas Dilger
+    Dave Martindale
+    Guy Eric Schalnat
+    Paul Schmidt
+    Tim Wegner
 
-======================================================================
+The PNG Reference Library is supplied "AS IS".  The Contributing
+Authors and Group 42, Inc. disclaim all warranties, expressed or
+implied, including, without limitation, the warranties of
+merchantability and of fitness for any purpose.  The Contributing
+Authors and Group 42, Inc. assume no liability for direct, indirect,
+incidental, special, exemplary, or consequential damages, which may
+result from the use of the PNG Reference Library, even if advised of
+the possibility of such damage.
 
-jQuery 1.2.6 - New Wave Javascript
+Permission is hereby granted to use, copy, modify, and distribute this
+source code, or portions hereof, for any purpose, without fee, subject
+to the following restrictions:
 
-Copyright (c) 2008 John Resig (jquery.com)
-Dual licensed under the MIT (MIT-LICENSE.txt)
-and GPL (GPL-LICENSE.txt) licenses.
+ 1. The origin of this source code must not be misrepresented.
 
-Copyright (c) 2009 John Resig, http://jquery.com/
+ 2. Altered versions must be plainly marked as such and must not
+    be misrepresented as being the original source.
 
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
+ 3. This Copyright notice may not be removed or altered from any
+    source or altered source distribution.
 
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+The Contributing Authors and Group 42, Inc. specifically permit,
+without fee, and encourage the use of this source code as a component
+to supporting the PNG file format in commercial products.  If you use
+this source code in a product, acknowledgment is not required but would
+be appreciated.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-============================================================
-Notices for file(s):
-/bin/depmod
-------------------------------------------------------------
+==============================================================================
 		  GNU LESSER GENERAL PUBLIC LICENSE
 		       Version 2.1, February 1999
 
  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
@@ -6433,7 +4754,7 @@
 
     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 Also add information on how to contact you by electronic and paper mail.
 
@@ -6451,83 +4772,276 @@
 
 
 
-============================================================
-Notices for file(s):
-/bin/minigzip
-/lib/libz-host.so
-/lib/libz.a
-/lib64/libz-host.so
-/lib64/libz.a
-------------------------------------------------------------
- (C) 1995-2017 Jean-loup Gailly and Mark Adler
+==============================================================================
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Android-specific code.                        ==
+   =========================================================================
 
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
+   Copyright (c) 2005-2008, The Android Open Source Project
 
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
 
-  1. The origin of this software must not be misrepresented; you must not
-     claim that you wrote the original software. If you use this software
-     in a product, an acknowledgment in the product documentation would be
-     appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
-     misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
 
-  Jean-loup Gailly        Mark Adler
-  jloup@gzip.org          madler@alumni.caltech.edu
 
-============================================================
-Notices for file(s):
-/bin/aprotoc
-/lib64/libprotobuf-cpp-full.so
-/lib64/libprotobuf-cpp-lite.so
-/lib64/libprotoc.so
-------------------------------------------------------------
-Copyright 2008, Google Inc.
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   =========================================================================
+   ==  NOTICE file for the x86 JIT libenc subdirectory.                   ==
+   =========================================================================
+
+Apache Harmony
+Copyright 2006, 2010 The Apache Software Foundation.
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Portions of Harmony were originally developed by
+Intel Corporation and are licensed to the Apache Software
+Foundation under the "Software Grant and Corporate Contribution
+License Agreement" and for which the following copyright notices
+apply
+         (C) Copyright 2005 Intel Corporation
+         (C) Copyright 2005-2006 Intel Corporation
+         (C) Copyright 2006 Intel Corporation
+
+Portions of the Apache Portable Runtime used by DRLVM were
+developed at the National Center for Supercomputing Applications
+(NCSA) at the University of Illinois at Urbana-Champaign.
+
+This software contains code derived from the RSA Data Security
+Inc. MD5 Message-Digest Algorithm.
+
+This software contains code derived from UNIX V7, Copyright(C)
+Caldera International Inc.
+
+==============================================================================
+LZ4 Library
+Copyright (c) 2011-2020, Yann Collet
 All rights reserved.
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
 
-    * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
-    * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
 
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+* Redistributions in binary form must reproduce the above copyright notice, this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
 
-Code generated by the Protocol Buffer compiler is owned by the owner
-of the input file used when generating it.  This code is not
-standalone and requires a support library to be linked with it.  This
-support library is itself covered by the above license.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-============================================================
-Notices for file(s):
-/lib64/libfec.so
-/lib64/libsquashfs_utils.so
-------------------------------------------------------------
+==============================================================================
+The majority of the source code in the mDNSResponder project is licensed
+under the terms of the Apache License, Version 2.0, available from:
+   <http://www.apache.org/licenses/LICENSE-2.0>
 
-   Copyright (c) 2015, The Android Open Source Project
+To accommodate license compatibility with the widest possible range
+of client code licenses, the shared library code, which is linked
+at runtime into the same address space as the client using it, is
+licensed under the terms of the "Three-Clause BSD License".
+
+The Linux Name Service Switch code, contributed by National ICT
+Australia Ltd (NICTA) is licensed under the terms of the NICTA Public
+Software Licence (which is substantially similar to the "Three-Clause
+BSD License", with some additional language pertaining to Australian law).
+
+==============================================================================
+
+   Copyright (c) 2006-2009, The Android Open Source Project
+   Copyright 2006, Brian Swetland <swetland@frotz.net>
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -6717,12 +5231,9203 @@
    END OF TERMS AND CONDITIONS
 
 
+==============================================================================
+// Copyright 2018 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+==============================================================================
+Notices for files contained in the tools directory:
 ============================================================
 Notices for file(s):
-/bin/blk_alloc_to_base_fs
-/bin/mke2fs.conf
-/bin/mkuserimg_mke2fs.sh
-/lib64/libext4_utils.so
+/bin/mksdcard
+------------------------------------------------------------
+Copyright 2007, The Android Open Source Project
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Google Inc. nor the names of its contributors may
+      be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY Google Inc. ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+EVENT SHALL Google Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+============================================================
+Notices for file(s):
+/framework/conscrypt-hostdex.jar
+/framework/core-hostdex.jar
+/framework/core-libart-hostdex.jar
+/lib/libjavacore.so
+/lib/libjavacrypto.so
+------------------------------------------------------------
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Android-specific code.                        ==
+   =========================================================================
+
+Android Code
+Copyright 2005-2008 The Android Open Source Project
+
+This product includes software developed as part of
+The Android Open Source Project (http://source.android.com).
+
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Harmony distribution.                  ==
+   =========================================================================
+
+Apache Harmony
+Copyright 2006 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Portions of Harmony were originally developed by
+Intel Corporation and are licensed to the Apache Software
+Foundation under the "Software Grant and Corporate Contribution
+License Agreement", informally known as the "Intel Harmony CLA".
+
+
+   =========================================================================
+   ==  NOTICE file for the ICU License.                                   ==
+   =========================================================================
+
+Copyright (c) 1995-2009 International Business Machines Corporation and others
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies of
+the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+of the copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the
+property of their respective owners.
+
+
+   =========================================================================
+   ==  NOTICE file for the JUnit License.                                 ==
+   =========================================================================
+
+Common Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF
+THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+      a) in the case of the initial Contributor, the initial code and
+         documentation distributed under this Agreement, and
+      b) in the case of each subsequent Contributor:
+
+      i) changes to the Program, and
+
+      ii) additions to the Program;
+
+      where such changes and/or additions to the Program originate
+      from and are distributed by that particular Contributor. A
+      Contribution 'originates' from a Contributor if it was added to
+      the Program by such Contributor itself or anyone acting on such
+      Contributor's behalf. Contributions do not include additions to
+      the Program which: (i) are separate modules of software
+      distributed in conjunction with the Program under their own
+      license agreement, and (ii) are not derivative works of the
+      Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor
+which are necessarily infringed by the use or sale of its Contribution
+alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this
+Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+      a) Subject to the terms of this Agreement, each Contributor
+      hereby grants Recipient a non-exclusive, worldwide, royalty-free
+      copyright license to reproduce, prepare derivative works of,
+      publicly display, publicly perform, distribute and sublicense
+      the Contribution of such Contributor, if any, and such
+      derivative works, in source code and object code form.
+
+      b) Subject to the terms of this Agreement, each Contributor
+      hereby grants Recipient a non-exclusive, worldwide, royalty-free
+      patent license under Licensed Patents to make, use, sell, offer
+      to sell, import and otherwise transfer the Contribution of such
+      Contributor, if any, in source code and object code form. This
+      patent license shall apply to the combination of the
+      Contribution and the Program if, at the time the Contribution is
+      added by the Contributor, such addition of the Contribution
+      causes such combination to be covered by the Licensed Patents.
+      The patent license shall not apply to any other combinations
+      which include the Contribution. No hardware per se is licensed
+      hereunder.
+
+      c) Recipient understands that although each Contributor grants
+      the licenses to its Contributions set forth herein, no
+      assurances are provided by any Contributor that the Program does
+      not infringe the patent or other intellectual property rights of
+      any other entity. Each Contributor disclaims any liability to
+      Recipient for claims brought by any other entity based on
+      infringement of intellectual property rights or otherwise. As a
+      condition to exercising the rights and licenses granted
+      hereunder, each Recipient hereby assumes sole responsibility to
+      secure any other intellectual property rights needed, if any.
+      For example, if a third party patent license is required to
+      allow Recipient to distribute the Program, it is Recipient's
+      responsibility to acquire that license before distributing the
+      Program.
+
+      d) Each Contributor represents that to its knowledge it has
+      sufficient copyright rights in its Contribution, if any, to
+      grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form
+under its own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+      i) effectively disclaims on behalf of all Contributors all
+      warranties and conditions, express and implied, including
+      warranties or conditions of title and non-infringement, and
+      implied warranties or conditions of merchantability and fitness
+      for a particular purpose;
+
+      ii) effectively excludes on behalf of all Contributors all
+      liability for damages, including direct, indirect, special,
+      incidental and consequential damages, such as lost profits;
+
+      iii) states that any provisions which differ from this Agreement
+      are offered by that Contributor alone and not by any other
+      party; and
+
+      iv) states that source code for the Program is available from
+      such Contributor, and informs licensees how to obtain it in a
+      reasonable manner on or through a medium customarily used for
+      software exchange.
+
+When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and 
+
+      b) a copy of this Agreement must be included with each copy of
+      the Program.
+
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a
+commercial product offering should do so in a manner which does not
+create potential liability for other Contributors. Therefore, if a
+Contributor includes the Program in a commercial product offering,
+such Contributor ("Commercial Contributor") hereby agrees to defend
+and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising
+from claims, lawsuits and other legal actions brought by a third party
+against the Indemnified Contributor to the extent caused by the acts
+or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement.
+In order to qualify, an Indemnified Contributor must: a) promptly
+notify the Commercial Contributor in writing of such claim, and b)
+allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement
+negotiations. The Indemnified Contributor may participate in any such
+claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
+WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement, including but not limited to
+the risks and costs of program errors, compliance with applicable
+laws, damage to or loss of data, programs or equipment, and
+unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
+ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with
+respect to a patent applicable to software (including a cross-claim or
+counterclaim in a lawsuit), then any patent licenses granted by that
+Contributor to such Recipient under this Agreement shall terminate as
+of the date such litigation is filed. In addition, if Recipient
+institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program
+itself (excluding combinations of the Program with other software or
+hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and
+survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. IBM is the initial
+Agreement Steward. IBM may assign the responsibility to serve as the
+Agreement Steward to a suitable separate entity. Each new version of
+the Agreement will be given a distinguishing version number. The
+Program (including Contributions) may always be distributed subject to
+the version of the Agreement under which it was received. In addition,
+after a new version of the Agreement is published, Contributor may
+elect to distribute the Program (including its Contributions) under
+the new version. Except as expressly stated in Sections 2(a) and 2(b)
+above, Recipient receives no rights or licenses to the intellectual
+property of any Contributor under this Agreement, whether expressly,
+by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No
+party to this Agreement will bring a legal action under this Agreement
+more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.
+
+
+   =========================================================================
+   ==  NOTICE file for the KXML License.                                  ==
+   =========================================================================
+
+Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+   =========================================================================
+   ==  NOTICE file for the SQLite Java Wrapper License.                   ==
+   =========================================================================
+
+This software is copyrighted by Christian Werner <chw@ch-werner.de>
+and others. The following terms apply to all files associated with the
+software unless explicitly disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
+
+
+   =========================================================================
+   ==  NOTICE file for the W3C License.                                   ==
+   =========================================================================
+
+Copyright (c) 2000 World Wide Web Consortium, (Massachusetts Institute
+of Technology, Institut National de Recherche en Informatique et en
+Automatique, Keio University). All Rights Reserved. This program is
+distributed under the W3C's Software Intellectual Property License.
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+See W3C License http://www.w3.org/Consortium/Legal/ for more details.
+
+============================================================
+Notices for file(s):
+/usr/icu/icudt51l.dat
+------------------------------------------------------------
+ICU License - ICU 1.8.1 and later
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2008 International Business Machines Corporation and others
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the property of their respective owners. 
+
+==============================================================================
+
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+    Unicode Data Files include all data files under the directories
+http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
+http://www.unicode.org/cldr/data/ . Unicode Software includes any source code
+published in the Unicode Standard or under the directories
+http://www.unicode.org/Public/, http://www.unicode.org/reports/, and
+http://www.unicode.org/cldr/data/.
+
+    NOTICE TO USER: Carefully read the following legal agreement. BY
+DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES
+("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND
+AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU
+DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES
+OR SOFTWARE.
+
+    COPYRIGHT AND PERMISSION NOTICE
+
+    Copyright © 1991-2007 Unicode, Inc. All rights reserved. Distributed under
+the Terms of Use in http://www.unicode.org/copyright.html.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+of the Unicode data files and any associated documentation (the "Data Files") or
+Unicode software and any associated documentation (the "Software") to deal in
+the Data Files or Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files or
+Software are furnished to do so, provided that (a) the above copyright notice(s)
+and this permission notice appear with all copies of the Data Files or Software,
+(b) both the above copyright notice(s) and this permission notice appear in
+associated documentation, and (c) there is clear notice in each modified Data
+File or in the Software as well as in the documentation associated with the Data
+File(s) or Software that the data or software has been modified.
+
+    THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
+PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR
+SOFTWARE.
+
+    Except as contained in this notice, the name of a copyright holder shall not
+be used in advertising or otherwise to promote the sale, use or other dealings
+in these Data Files or Software without prior written authorization of the
+copyright holder.
+
+===============================================================================
+
+
+/* This ICU code derived from: */
+/*
+punycode.c 0.4.0 (2001-Nov-17-Sat)
+http://www.cs.berkeley.edu/~amc/idn/
+Adam M. Costello
+http://www.nicemice.net/amc/
+
+Disclaimer and license
+
+Regarding this entire document or any portion of it (including
+the pseudocode and C code), the author makes no guarantees and
+is not responsible for any damage resulting from its use. The
+author grants irrevocable permission to anyone to use, modify,
+and distribute it in any way that does not diminish the rights
+of anyone else to use, modify, and distribute it, provided that
+redistributed derivative works do not contain misleading author or
+version information. Derivative works need not be licensed under
+similar terms.
+*/
+
+
+/*
+** This file is in the public domain, so clarified as of
+** 2006-07-17 by Arthur David Olson.
+*/
+
+============================================================
+Notices for file(s):
+/framework/jcommon-1.0.12.jar
+/framework/jfreechart-1.0.9-swt.jar
+/framework/jfreechart-1.0.9.jar
+------------------------------------------------------------
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+============================================================
+Notices for file(s):
+/lib/third_party_icu_icudata_host_gyp.a
+/lib/third_party_icu_icui18n_host_gyp.a
+/lib/third_party_icu_icuuc_host_gyp.a
+/lib/third_party_protobuf_protobuf_full_do_not_use_host_gyp.a
+/lib/v8_tools_gyp_v8_base_arm_host_gyp.a
+/lib/v8_tools_gyp_v8_nosnapshot_arm_host_gyp.a
+/obj/GYP/shared_intermediates/mksnapshot.arm
+/obj/GYP/shared_intermediates/protoc
+------------------------------------------------------------
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/****************************************************************
+ *
+ * The author of this software is David M. Gay.
+ *
+ * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose without fee is hereby granted, provided that this entire notice
+ * is included in all copies of any software which is or includes a copy
+ * or modification of this software and in all copies of the supporting
+ * documentation for such software.
+ *
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ ***************************************************************/
+
+/* Copyright (c) 2008-2009, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ---
+ * Author: Kostya Serebryany
+ */
+
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape Portable Runtime (NSPR).
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+// Copyright (c) 2006, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   Notice that the following BSD-style license applies to the Valgrind header
+   files used by Chromium (valgrind.h and memcheck.h). However, the rest of
+   Valgrind is licensed under the terms of the GNU General Public License,
+   version 2, unless otherwise indicated.
+
+   ----------------------------------------------------------------
+
+   Copyright (C) 2000-2008 Julian Seward.  All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+      not claim that you wrote the original software.  If you use this 
+      software in a product, an acknowledgment in the product 
+      documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+      not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+      products derived from this software without specific prior written 
+      permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  Copyright (c) 2007 Red Hat, inc
+
+  Permission is hereby granted, free of charge, to any person
+  obtaining a copy of this software and associated documentation files
+  (the "Software"), to deal in the Software without restriction,
+  including without limitation the rights to use, copy, modify, merge,
+  publish, distribute, sublicense, and/or sell copies of the Software,
+  and to permit persons to whom the Software is furnished to do so,
+  subject to the following conditions: 
+
+  The above copyright notice and this permission notice shall be
+  included in all copies or substantial portions of the Software. 
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+
+Copyright 2003-2005 Colin Percival
+All rights reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted providing that the following conditions 
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2007-2009 Google Inc.
+   Copyright 2007-2009 WebDriver committers
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+Copyright (C) 2009 by Tung Mac.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape security libraries.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape security libraries.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1994-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+Copyright 2011, The Chromium Authors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+/*
+** Copyright (c) 2007-2010 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright (c) 2008, Google Inc.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+(WebKit doesn't distribute an explicit license.  This LICENSE is derived from
+license text in the source.)
+
+Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+2006, 2007 Alexander Kellett, Alexey Proskuryakov, Alex Mathews, Allan
+Sandfeld Jensen, Alp Toker, Anders Carlsson, Andrew Wellington, Antti
+Koivisto, Apple Inc., Arthur Langereis, Baron Schwartz, Bjoern Graf,
+Brent Fulgham, Cameron Zwarich, Charles Samuels, Christian Dywan,
+Collabora Ltd., Cyrus Patel, Daniel Molkentin, Dave Maclachlan, David
+Smith, Dawit Alemayehu, Dirk Mueller, Dirk Schulze, Don Gibson, Enrico
+Ros, Eric Seidel, Frederik Holljen, Frerich Raabe, Friedmann Kleint,
+George Staikos, Google Inc., Graham Dennis, Harri Porten, Henry Mason,
+Hiroyuki Ikezoe, Holger Hans Peter Freyther, IBM, James G. Speth, Jan
+Alonzo, Jean-Loup Gailly, John Reis, Jonas Witt, Jon Shier, Jonas
+Witt, Julien Chaffraix, Justin Haygood, Kevin Ollivier, Kevin Watters,
+Kimmo Kinnunen, Kouhei Sutou, Krzysztof Kowalczyk, Lars Knoll, Luca
+Bruno, Maks Orlovich, Malte Starostik, Mark Adler, Martin Jones,
+Marvin Decker, Matt Lilek, Michael Emmel, Mitz Pettel, mozilla.org,
+Netscape Communications Corporation, Nicholas Shanks, Nikolas
+Zimmermann, Nokia, Oliver Hunt, Opened Hand, Paul Johnston, Peter
+Kelly, Pioneer Research Center USA, Rich Moore, Rob Buis, Robin Dunn,
+Ronald Tschalär, Samuel Weinig, Simon Hausmann, Staikos Computing
+Services Inc., Stefan Schimanski, Symantec Corporation, The Dojo
+Foundation, The Karbon Developers, Thomas Boyer, Tim Copperfield,
+Tobias Anton, Torben Weis, Trolltech, University of Cambridge, Vaclav
+Slavik, Waldo Bastian, Xan Lopez, Zack Rusin
+
+The terms and conditions vary from file to file, but are one of:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+
+*OR*
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the
+   distribution.
+3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+   its contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+                  GNU LIBRARY GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+                  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+// Copyright (C) 2002-2013 The ANGLE Project Authors. 
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//     Redistributions of source code must retain the above copyright
+//     notice, this list of conditions and the following disclaimer.
+//
+//     Redistributions in binary form must reproduce the above 
+//     copyright notice, this list of conditions and the following
+//     disclaimer in the documentation and/or other materials provided
+//     with the distribution.
+//
+//     Neither the name of TransGaming Inc., Google Inc., 3DLabs Inc.
+//     Ltd., nor the names of their contributors may be used to endorse
+//     or promote products derived from this software without specific
+//     prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+Copyright (c) 2012, Manfred Moitzi
+
+Permission is hereby granted, free of charge, to any person obtaining a 
+copy of this software and associated documentation files (the 
+"Software"), to deal in the Software without restriction, including 
+without limitation the rights to use, copy, modify, merge, publish, 
+distribute, sublicense, and/or sell copies of the Software, and to 
+permit persons to whom the Software is furnished to do so, subject to 
+the following conditions: 
+
+The above copyright notice and this permission notice shall be included 
+in all copies or substantial portions of the Software. 
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
+
+Deutsche Übersetzung:
+
+Copyright (c) 2012, Manfred Moitzi
+
+Hiermit wird unentgeltlich, jeder Person, die eine Kopie der Software 
+und der zugehörigen Dokumentationen (die "Software") erhält, die 
+Erlaubnis erteilt, uneingeschränkt zu benutzen, inklusive und ohne 
+Ausnahme, dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, 
+verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und 
+Personen, die diese Software erhalten, diese Rechte zu geben, unter den 
+folgenden Bedingungen: 
+
+Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen 
+Kopien oder Teilkopien der Software beizulegen. 
+
+DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE 
+BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN 
+VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER 
+RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND 
+DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE 
+ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, 
+EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER 
+SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN. 
+
+
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+                          MOZILLA PUBLIC LICENSE
+                                Version 1.1
+
+                              ---------------
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation, method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your") means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a) under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code; or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a) under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d) Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2) separate from the Contributor Version;
+          3) for infringements caused by: i) third party modifications of
+          Contributor Version or ii) the combination of Modifications made
+          by that Contributor with other software (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+          (c) Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code. If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice. If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A. You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code. You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1. This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2. If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant") alleging that:
+
+     (a) such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant. If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b) any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3. If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4. In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     http://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above. If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting the provisions above and replace them with the notice and
+     other provisions required by the [___] License. If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+
+     ----------------------------------------------------------------------
+
+     AMENDMENTS
+
+     The Netscape Public License Version 1.1 ("NPL") consists of the
+     Mozilla Public License Version 1.1 with the following Amendments,
+     including Exhibit A-Netscape Public License. Files identified with
+     "Exhibit A-Netscape Public License" are governed by the Netscape
+     Public License Version 1.1.
+
+     Additional Terms applicable to the Netscape Public License.
+          I. Effect.
+          These additional terms described in this Netscape Public
+          License -- Amendments shall apply to the Mozilla Communicator
+          client code and to all Covered Code under this License.
+
+          II. "Netscape's Branded Code" means Covered Code that Netscape
+          distributes and/or permits others to distribute under one or more
+          trademark(s) which are controlled by Netscape but which are not
+          licensed for use under this License.
+
+          III. Netscape and logo.
+          This License does not grant any rights to use the trademarks
+          "Netscape", the "Netscape N and horizon" logo or the "Netscape
+          lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript",
+          "Smart Browsing" even if such marks are included in the Original
+          Code or Modifications.
+
+          IV. Inability to Comply Due to Contractual Obligation.
+          Prior to licensing the Original Code under this License, Netscape
+          has licensed third party code for use in Netscape's Branded Code.
+          To the extent that Netscape is limited contractually from making
+          such third party code available under this License, Netscape may
+          choose to reintegrate such code into Covered Code without being
+          required to distribute such code in Source Code form, even if
+          such code would otherwise be considered "Modifications" under
+          this License.
+
+          V. Use of Modifications and Covered Code by Initial Developer.
+               V.1. In General.
+               The obligations of Section 3 apply to Netscape, except to
+               the extent specified in this Amendment, Section V.2 and V.3.
+
+               V.2. Other Products.
+               Netscape may include Covered Code in products other than the
+               Netscape's Branded Code which are released by Netscape
+               during the two (2) years following the release date of the
+               Original Code, without such additional products becoming
+               subject to the terms of this License, and may license such
+               additional products on different terms from those contained
+               in this License.
+
+               V.3. Alternative Licensing.
+               Netscape may license the Source Code of Netscape's Branded
+               Code, including Modifications incorporated therein, without
+               such Netscape Branded Code becoming subject to the terms of
+               this License, and may license such Netscape Branded Code on
+               different terms from those contained in this License.
+
+          VI. Litigation.
+          Notwithstanding the limitations of Section 11 above, the
+          provisions regarding litigation in Section 11(a), (b) and (c) of
+          the License shall apply to all disputes relating to this License.
+
+     EXHIBIT A-Netscape Public License.
+
+          "The contents of this file are subject to the Netscape Public
+          License Version 1.1 (the "License"); you may not use this file
+          except in compliance with the License. You may obtain a copy of
+          the License at http://www.mozilla.org/NPL/
+
+          Software distributed under the License is distributed on an "AS
+          IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+          implied. See the License for the specific language governing
+          rights and limitations under the License.
+
+          The Original Code is Mozilla Communicator client code, released
+          March 31, 1998.
+
+          The Initial Developer of the Original Code is Netscape
+          Communications Corporation. Portions created by Netscape are
+          Copyright (C) 1998-1999 Netscape Communications Corporation. All
+          Rights Reserved.
+
+          Contributor(s): ______________________________________.
+
+          Alternatively, the contents of this file may be used under the
+          terms of the _____ license (the "[___] License"), in which case
+          the provisions of [______] License are applicable  instead of
+          those above. If you wish to allow use of your version of this
+          file only under the terms of the [____] License and not to allow
+          others to use your version of this file under the NPL, indicate
+          your decision by deleting the provisions above and replace  them
+          with the notice and other provisions required by the [___]
+          License. If you do not delete the provisions above, a recipient
+          may use your version of this file under either the NPL or the
+          [___] License."
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+       51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
+                               and Clark Cooper
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2011 Google Inc. All Rights Reserved.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+Copyright (c) 2007-2009 IOLA and Ole Laursen
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+This software is based in part on the work of the FreeType Team.
+
+----------------------
+
+                    The FreeType Project LICENSE
+                    ----------------------------
+
+                            2006-Jan-27
+
+                    Copyright 1996-2002, 2006 by
+          David Turner, Robert Wilhelm, and Werner Lemberg
+
+
+
+Introduction
+============
+
+  The FreeType  Project is distributed in  several archive packages;
+  some of them may contain, in addition to the FreeType font engine,
+  various tools and  contributions which rely on, or  relate to, the
+  FreeType Project.
+
+  This  license applies  to all  files found  in such  packages, and
+  which do not  fall under their own explicit  license.  The license
+  affects  thus  the  FreeType   font  engine,  the  test  programs,
+  documentation and makefiles, at the very least.
+
+  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
+  (Independent JPEG  Group) licenses, which  all encourage inclusion
+  and  use of  free  software in  commercial  and freeware  products
+  alike.  As a consequence, its main points are that:
+
+    o We don't promise that this software works. However, we will be
+      interested in any kind of bug reports. (`as is' distribution)
+
+    o You can  use this software for whatever you  want, in parts or
+      full form, without having to pay us. (`royalty-free' usage)
+
+    o You may not pretend that  you wrote this software.  If you use
+      it, or  only parts of it,  in a program,  you must acknowledge
+      somewhere  in  your  documentation  that  you  have  used  the
+      FreeType code. (`credits')
+
+  We  specifically  permit  and  encourage  the  inclusion  of  this
+  software, with  or without modifications,  in commercial products.
+  We  disclaim  all warranties  covering  The  FreeType Project  and
+  assume no liability related to The FreeType Project.
+
+
+  Finally,  many  people  asked  us  for  a  preferred  form  for  a
+  credit/disclaimer to use in compliance with this license.  We thus
+  encourage you to use the following text:
+
+   """  
+    Portions of this software are copyright © <year> The FreeType
+    Project (www.freetype.org).  All rights reserved.
+   """
+
+  Please replace <year> with the value from the FreeType version you
+  actually use.
+
+
+Legal Terms
+===========
+
+0. Definitions
+--------------
+
+  Throughout this license,  the terms `package', `FreeType Project',
+  and  `FreeType  archive' refer  to  the  set  of files  originally
+  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
+  Werner Lemberg) as the `FreeType Project', be they named as alpha,
+  beta or final release.
+
+  `You' refers to  the licensee, or person using  the project, where
+  `using' is a generic term including compiling the project's source
+  code as  well as linking it  to form a  `program' or `executable'.
+  This  program is  referred to  as  `a program  using the  FreeType
+  engine'.
+
+  This  license applies  to all  files distributed  in  the original
+  FreeType  Project,   including  all  source   code,  binaries  and
+  documentation,  unless  otherwise  stated   in  the  file  in  its
+  original, unmodified form as  distributed in the original archive.
+  If you are  unsure whether or not a particular  file is covered by
+  this license, you must contact us to verify this.
+
+  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
+  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
+  specified below.
+
+1. No Warranty
+--------------
+
+  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
+  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
+  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
+  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
+  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
+  USE, OF THE FREETYPE PROJECT.
+
+2. Redistribution
+-----------------
+
+  This  license  grants  a  worldwide, royalty-free,  perpetual  and
+  irrevocable right  and license to use,  execute, perform, compile,
+  display,  copy,   create  derivative  works   of,  distribute  and
+  sublicense the  FreeType Project (in  both source and  object code
+  forms)  and  derivative works  thereof  for  any  purpose; and  to
+  authorize others  to exercise  some or all  of the  rights granted
+  herein, subject to the following conditions:
+
+    o Redistribution of  source code  must retain this  license file
+      (`FTL.TXT') unaltered; any  additions, deletions or changes to
+      the original  files must be clearly  indicated in accompanying
+      documentation.   The  copyright   notices  of  the  unaltered,
+      original  files must  be  preserved in  all  copies of  source
+      files.
+
+    o Redistribution in binary form must provide a  disclaimer  that
+      states  that  the software is based in part of the work of the
+      FreeType Team,  in  the  distribution  documentation.  We also
+      encourage you to put an URL to the FreeType web page  in  your
+      documentation, though this isn't mandatory.
+
+  These conditions  apply to any  software derived from or  based on
+  the FreeType Project,  not just the unmodified files.   If you use
+  our work, you  must acknowledge us.  However, no  fee need be paid
+  to us.
+
+3. Advertising
+--------------
+
+  Neither the  FreeType authors and  contributors nor you  shall use
+  the name of the  other for commercial, advertising, or promotional
+  purposes without specific prior written permission.
+
+  We suggest,  but do not require, that  you use one or  more of the
+  following phrases to refer  to this software in your documentation
+  or advertising  materials: `FreeType Project',  `FreeType Engine',
+  `FreeType library', or `FreeType Distribution'.
+
+  As  you have  not signed  this license,  you are  not  required to
+  accept  it.   However,  as  the FreeType  Project  is  copyrighted
+  material, only  this license, or  another one contracted  with the
+  authors, grants you  the right to use, distribute,  and modify it.
+  Therefore,  by  using,  distributing,  or modifying  the  FreeType
+  Project, you indicate that you understand and accept all the terms
+  of this license.
+
+4. Contacts
+-----------
+
+  There are two mailing lists related to FreeType:
+
+    o freetype@nongnu.org
+
+      Discusses general use and applications of FreeType, as well as
+      future and  wanted additions to the  library and distribution.
+      If  you are looking  for support,  start in  this list  if you
+      haven't found anything to help you in the documentation.
+
+    o freetype-devel@nongnu.org
+
+      Discusses bugs,  as well  as engine internals,  design issues,
+      specific licenses, porting, etc.
+
+  Our home page can be found at
+
+    http://www.freetype.org
+
+
+--- end of FTL.TXT ---
+
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+			COPYRIGHTS
+
+Compilation copyright is held by the GPSD project.  All rights reserved.
+
+GPSD project copyrights are assigned to the project lead, currently
+Eric S. Raymond. Other portions of the GPSD code are Copyright (c)
+1997, 1998, 1999, 2000, 2001, 2002 by Remco Treffkorn, and others
+Copyright (c) 2005 by Eric S. Raymond.  For other copyrights, see
+individual files.
+
+			BSD LICENSE
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:<P>
+
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.<P>
+
+Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.<P>
+
+Neither name of the GPSD project nor the names of its contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+    		    59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the 
+    Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
+    Boston, MA  02111-1307  USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+HarfBuzz is licensed under the so-called "Old MIT" license.  Details follow.
+For parts of HarfBuzz that are licensed under different licenses see individual
+files names COPYING in subdirectories where applicable.
+
+Copyright © 2010,2011,2012  Google, Inc.
+Copyright © 2012  Mozilla Foundation
+Copyright © 2011  Codethink Limited
+Copyright © 2008,2010  Nokia Corporation and/or its subsidiary(-ies)
+Copyright © 2009  Keith Stribley
+Copyright © 2009  Martin Hosken and SIL International
+Copyright © 2007  Chris Wilson
+Copyright © 2006  Behdad Esfahbod
+Copyright © 2005  David Turner
+Copyright © 2004,2007,2008,2009,2010  Red Hat, Inc.
+Copyright © 1998-2004  David Turner and Werner Lemberg
+
+For full copyright notices consult the individual files in the package.
+
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in
+all copies of this software.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+/*************************************************************************
+ *
+ *  IAccessible2 IDL Specification 
+ * 
+ *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2006 IBM Corporation 
+ *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
+ *  All rights reserved. 
+ *   
+ *   
+ *  Redistribution and use in source and binary forms, with or without 
+ *  modification, are permitted provided that the following conditions 
+ *  are met: 
+ *   
+ *   1. Redistributions of source code must retain the above copyright 
+ *      notice, this list of conditions and the following disclaimer. 
+ *   
+ *   2. Redistributions in binary form must reproduce the above 
+ *      copyright notice, this list of conditions and the following 
+ *      disclaimer in the documentation and/or other materials 
+ *      provided with the distribution. 
+ *
+ *   3. Neither the name of the Linux Foundation nor the names of its 
+ *      contributors may be used to endorse or promote products 
+ *      derived from this software without specific prior written 
+ *      permission. 
+ *   
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+ *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
+ *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
+ *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ *   
+ *  This BSD License conforms to the Open Source Initiative "Simplified 
+ *  BSD License" as published at: 
+ *  http://www.opensource.org/licenses/bsd-license.php 
+ *   
+ *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
+ *  mark may be used in accordance with the Linux Foundation Trademark 
+ *  Policy to indicate compliance with the IAccessible2 specification. 
+ * 
+ ************************************************************************/ 
+
+LICENSE extracted from IJG's jpeg distribution:
+-----------------------------------------------
+
+In plain English:
+
+1. We don't promise that this software works.  (But if you find any bugs,
+   please let us know!)
+2. You can use this software for whatever you want.  You don't have to pay us.
+3. You may not pretend that you wrote this software.  If you use it in a
+   program, you must acknowledge somewhere in your documentation that
+   you've used the IJG code.
+
+In legalese:
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and you,
+its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-1998, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library.  If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it.  This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+
+ICU License - ICU 1.8.1 and later
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2010 International Business Machines Corporation and others
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, and/or sell
+copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies
+of the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL
+THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM,
+OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
+USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be
+used in advertising or otherwise to promote the sale, use or other dealings in
+this Software without prior written authorization of the copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the property of their respective owners.
+
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2002
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+The following is the license for the jemalloc source code, as provided
+in the initial section of the source files.
+
+Copyright (C) 2006-2008 Jason Evans <jasone@FreeBSD.org>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice(s), this list of conditions and the following disclaimer as
+   the first lines of this file unmodified other than the possible
+   addition of one or more copyright notices.
+2. Redistributions in binary form must reproduce the above copyright
+   notice(s), this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the
+   distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+Copyright (c) 2007-2010 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+
+
+SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+
+Copyright (C) 1992 Silicon Graphics, Inc. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice including the dates of first publication and either
+this permission notice or a reference to http://oss.sgi.com/projects/FreeB/
+shall be included in all copies or substantial portions of the Software. 
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL SILICON
+GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Silicon Graphics, Inc. shall
+not be used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization from Silicon
+Graphics, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above
+    copyright notice, this list of conditions and the following
+    disclaimer in the documentation and/or other materials provided
+    with the distribution.
+
+  * Neither the name of the copyright holders nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License copied from bin/lcov:
+
+#
+#   Copyright (c) International Business Machines  Corp., 2002,2007
+#
+#   This program is free software;  you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or (at
+#   your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful, but
+#   WITHOUT ANY WARRANTY;  without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#   General Public License for more details.                 
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program;  if not, write to the Free Software
+#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
+Copyright (c) 2011 The LevelDB Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/*
+ * Copyright (c) 2008 NVIDIA, Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+Copyright 2000-2007 Niels Provos <provos@citi.umich.edu>
+Copyright 2007-2009 Niels Provos and Nick Mathewson
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Copyright (c) 2013, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * The name of the author may not be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+(Copied from the README.)
+
+--------------------------------------------------------------------------------
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and you,
+its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1991-1998, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to these
+conditions:
+(1) If any part of the source code for this software is distributed, then this
+README file must be included, with this copyright and no-warranty notice
+unaltered; and any additions, deletions, or changes to the original files
+must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work of
+the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG code,
+not just to the unmodified library.  If you use our work, you ought to
+acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company name
+in advertising or publicity relating to this software or products derived from
+it.  This software may be referred to only as "the Independent JPEG Group's
+software".
+
+We specifically permit and encourage the use of this software as the basis of
+commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+
+ansi2knr.c is included in this distribution by permission of L. Peter Deutsch,
+sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA.
+ansi2knr.c is NOT covered by the above copyright and conditions, but instead
+by the usual distribution terms of the Free Software Foundation; principally,
+that you must include source code if you redistribute it.  (See the file
+ansi2knr.c for full details.)  However, since ansi2knr.c is not needed as part
+of any program generated from the IJG code, this does not limit you more than
+the foregoing paragraphs do.
+
+The Unix configuration script "configure" was produced with GNU Autoconf.
+It is copyright by the Free Software Foundation but is freely distributable.
+The same holds for its supporting scripts (config.guess, config.sub,
+ltconfig, ltmain.sh).  Another support script, install-sh, is copyright
+by M.I.T. but is also freely distributable.
+
+It appears that the arithmetic coding option of the JPEG spec is covered by
+patents owned by IBM, AT&T, and Mitsubishi.  Hence arithmetic coding cannot
+legally be used without obtaining one or more licenses.  For this reason,
+support for arithmetic coding has been removed from the free JPEG software.
+(Since arithmetic coding provides only a marginal gain over the unpatented
+Huffman mode, it is unlikely that very many implementations will support it.)
+So far as we are aware, there are no patent restrictions on the remaining
+code.
+
+The IJG distribution formerly included code to read and write GIF files.
+To avoid entanglement with the Unisys LZW patent, GIF reading support has
+been removed altogether, and the GIF writer has been simplified to produce
+"uncompressed GIFs".  This technique does not use the LZW algorithm; the
+resulting GIF files are larger than usual, but are readable by all standard
+GIF decoders.
+
+We are required to state that
+    "The Graphics Interchange Format(c) is the Copyright property of
+    CompuServe Incorporated.  GIF(sm) is a Service Mark property of
+    CompuServe Incorporated."
+
+Copyright (C) 2011 Google Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+This copy of the libpng notices is provided for your convenience.  In case of
+any discrepancy between this copy and the notices in the file png.h that is
+included in the libpng distribution, the latter shall prevail.
+
+COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+
+If you modify libpng you may insert additional notices immediately following
+this sentence.
+
+This code is released under the libpng license.
+
+libpng versions 1.2.6, August 15, 2004, through 1.2.45, July 7, 2011, are
+Copyright (c) 2004, 2006-2009 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-1.2.5
+with the following individual added to the list of Contributing Authors
+
+   Cosmin Truta
+
+libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
+Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-1.0.6
+with the following individuals added to the list of Contributing Authors
+
+   Simon-Pierre Cadieux
+   Eric S. Raymond
+   Gilles Vollant
+
+and with the following additions to the disclaimer:
+
+   There is no warranty against interference with your enjoyment of the
+   library or against infringement.  There is no warranty that our
+   efforts or the library will fulfill any of your particular purposes
+   or needs.  This library is provided with all faults, and the entire
+   risk of satisfactory quality, performance, accuracy, and effort is with
+   the user.
+
+libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-0.96,
+with the following individuals added to the list of Contributing Authors:
+
+   Tom Lane
+   Glenn Randers-Pehrson
+   Willem van Schaik
+
+libpng versions 0.89, June 1996, through 0.96, May 1997, are
+Copyright (c) 1996, 1997 Andreas Dilger
+Distributed according to the same disclaimer and license as libpng-0.88,
+with the following individuals added to the list of Contributing Authors:
+
+   John Bowler
+   Kevin Bracey
+   Sam Bushell
+   Magnus Holmgren
+   Greg Roelofs
+   Tom Tanner
+
+libpng versions 0.5, May 1995, through 0.88, January 1996, are
+Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
+
+For the purposes of this copyright and license, "Contributing Authors"
+is defined as the following set of individuals:
+
+   Andreas Dilger
+   Dave Martindale
+   Guy Eric Schalnat
+   Paul Schmidt
+   Tim Wegner
+
+The PNG Reference Library is supplied "AS IS".  The Contributing Authors
+and Group 42, Inc. disclaim all warranties, expressed or implied,
+including, without limitation, the warranties of merchantability and of
+fitness for any purpose.  The Contributing Authors and Group 42, Inc.
+assume no liability for direct, indirect, incidental, special, exemplary,
+or consequential damages, which may result from the use of the PNG
+Reference Library, even if advised of the possibility of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+source code, or portions hereof, for any purpose, without fee, subject
+to the following restrictions:
+
+1. The origin of this source code must not be misrepresented.
+
+2. Altered versions must be plainly marked as such and must not
+   be misrepresented as being the original source.
+
+3. This Copyright notice may not be removed or altered from any
+   source or altered source distribution.
+
+The Contributing Authors and Group 42, Inc. specifically permit, without
+fee, and encourage the use of this source code as a component to
+supporting the PNG file format in commercial products.  If you use this
+source code in a product, acknowledgment is not required but would be
+appreciated.
+
+
+A "png_get_copyright" function is available, for convenient use in "about"
+boxes and the like:
+
+   printf("%s",png_get_copyright(NULL));
+
+Also, the PNG logo (in PNG format, of course) is supplied in the
+files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
+
+Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
+certification mark of the Open Source Initiative.
+
+Glenn Randers-Pehrson
+glennrp at users.sourceforge.net
+July 7, 2011
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the
+    "Software"), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sub license, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+
+    The above copyright notice and this permission notice (including the
+    next paragraph) shall be included in all copies or substantial portions
+    of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+    IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+    ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Copyright (c) 2010, Google Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+
+  * Neither the name of Google nor the names of its contributors may
+    be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Additional IP Rights Grant (Patents)
+
+"This implementation" means the copyrightable works distributed by
+Google as part of the WebM Project.
+
+Google hereby grants to you a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this section)
+patent license to make, have made, use, offer to sell, sell, import,
+transfer, and otherwise run, modify and propagate the contents of this
+implementation of VP8, where such license applies only to those patent
+claims, both currently owned by Google and acquired in the future,
+licensable by Google that are necessarily infringed by this
+implementation of VP8. This grant does not include claims that would be
+infringed only as a consequence of further modification of this
+implementation. If you or your agent or exclusive licensee institute or
+order or agree to the institution of patent litigation against any
+entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that this implementation of VP8 or any code incorporated within this
+implementation of VP8 constitutes direct or contributory patent
+infringement, or inducement of patent infringement, then any patent
+rights granted to you under this License for this implementation of VP8
+shall terminate as of the date such litigation is filed.
+
+Except where otherwise noted in the source code (e.g. the files hash.c,
+list.c and the trio files, which are covered by a similar licence but
+with different Copyright notices) all the files are:
+
+ Copyright (C) 1998-2003 Daniel Veillard.  All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Daniel Veillard shall not
+be used in advertising or otherwise to promote the sale, use or other deal-
+ings in this Software without prior written authorization from him.
+
+
+Licence for libxslt except libexslt
+----------------------------------------------------------------------
+ Copyright (C) 2001-2002 Daniel Veillard.  All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Daniel Veillard shall not
+be used in advertising or otherwise to promote the sale, use or other deal-
+ings in this Software without prior written authorization from him.
+
+----------------------------------------------------------------------
+
+Licence for libexslt
+----------------------------------------------------------------------
+ Copyright (C) 2001-2002 Thomas Broyer, Charlie Bozeman and Daniel Veillard.
+ All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is fur-
+nished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
+NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
+NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the authors shall not
+be used in advertising or otherwise to promote the sale, use or other deal-
+ings in this Software without prior written authorization from him.
+----------------------------------------------------------------------
+
+LZMA SDK is placed in the public domain.
+
+Copyright (c) 2003-2009 Jonathan 'Wolf' Rentzsch: <http://rentzsch.com>
+Some rights reserved: <http://opensource.org/licenses/mit-license.php>
+
+The default Mesa license is as follows:
+
+Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+
+Some parts of Mesa are copyrighted under the GNU LGPL.  See the
+Mesa/docs/COPYRIGHT file for details.
+
+The following is the standard GNU copyright file.
+----------------------------------------------------------------------
+
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+                    675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL.  It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it.  You can use it for
+your libraries, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library.  If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software.  To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+  Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs.  This
+license, the GNU Library General Public License, applies to certain
+designated libraries.  This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+  The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it.  Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program.  However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+  Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries.  We
+concluded that weaker conditions might promote sharing better.
+
+  However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves.  This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them.  (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.)  The hope is that this
+will lead to faster development of free libraries.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+  Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+		  GNU LIBRARY GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License").  Each licensee is
+addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    c) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    d) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+     Appendix: How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public
+    License along with this library; if not, write to the Free
+    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+ * MODP_B64 - High performance base64 encoder/decoder
+ * Version 1.3 -- 17-Mar-2006
+ * http://modp.com/release/base64
+ *
+ * Copyright (c) 2005, 2006  Nick Galbreath -- nickg [at] modp [dot] com
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *   Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ *   Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ *   Neither the name of the modp.com nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Copyright 2008 MolokoCacao
+All rights reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted providing that the following conditions 
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Copyright (c) 2004-2009 Sergey Lyubka
+Portions Copyright (c) 2009 Gilbert Wellisch
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+Copyright 2010-2011, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+* Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 2002
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+   A C-program for MT19937, with initialization improved 2002/1/26.
+   Coded by Takuji Nishimura and Makoto Matsumoto.
+
+   Before using, initialize the state by using init_genrand(seed)  
+   or init_by_array(init_key, key_length).
+
+   Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+   All rights reserved.                          
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in the
+        documentation and/or other materials provided with the distribution.
+
+     3. The names of its contributors may not be used to endorse or promote 
+        products derived from this software without specific prior written 
+        permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Copyright (c) 2006-2009 The Chromium OS Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Version: MPL 1.1/GPL 2.0/LGPL 2.1
+
+The contents of this file are subject to the Mozilla Public License Version
+1.1 (the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is mozilla.org code.
+
+The Initial Developer of the Original Code is
+Netscape Communications Corporation.
+Portions created by the Initial Developer are Copyright (C) 1998
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+
+  
+  Copyright (c) 2004-2012 by Mulle Kybernetik. All rights reserved.
+
+  Permission to use, copy, modify and distribute this software and its documentation
+  is hereby granted, provided that both the copyright notice and this permission
+  notice appear in all copies of the software, derivative works or modified versions,
+  and any portions thereof, and that both notices appear in supporting documentation,
+  and that credit is given to Mulle Kybernetik in all documents and publicity
+  pertaining to direct or indirect use of this code or its derivatives.
+
+  THIS IS EXPERIMENTAL SOFTWARE AND IT IS KNOWN TO HAVE BUGS, SOME OF WHICH MAY HAVE
+  SERIOUS CONSEQUENCES. THE COPYRIGHT HOLDER ALLOWS FREE USE OF THIS SOFTWARE IN ITS
+  "AS IS" CONDITION. THE COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY OF ANY KIND FOR ANY
+  DAMAGES WHATSOEVER RESULTING DIRECTLY OR INDIRECTLY FROM THE USE OF THIS SOFTWARE
+  OR OF ANY DERIVATIVE WORK.
+
+  LICENSE ISSUES
+  ==============
+
+  The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
+  the OpenSSL License and the original SSLeay license apply to the toolkit.
+  See below for the actual license texts. Actually both licenses are BSD-style
+  Open Source licenses. In case of any license issues related to OpenSSL
+  please contact openssl-core@openssl.org.
+
+  OpenSSL License
+  ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+
+Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic,
+                    Jean-Marc Valin, Timothy B. Terriberry,
+                    CSIRO, Gregory Maxwell, Mark Borgerding,
+                    Erik de Castro Lopo
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+- Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of Internet Society, IETF or IETF Trust, nor the 
+names of specific contributors, may be used to endorse or promote
+products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Opus is subject to the royalty-free patent licenses which are
+specified at:
+
+Xiph.Org Foundation:
+https://datatracker.ietf.org/ipr/1524/
+
+Microsoft Corporation:
+https://datatracker.ietf.org/ipr/1914/
+
+Broadcom Corporation:
+https://datatracker.ietf.org/ipr/1526/
+
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PLY (Python Lex-Yacc)                   Version 3.4
+
+Copyright (C) 2001-2011,
+David M. Beazley (Dabeaz LLC)
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.  
+* Redistributions in binary form must reproduce the above copyright notice, 
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.  
+* Neither the name of the David Beazley or Dabeaz LLC may be used to
+  endorse or promote products derived from this software without
+  specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+// Copyright (c) 2012 The Polymer Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Copyright 2008, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
+
+Copyright (c) 2003-2012, Michael Foord
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+qcms
+Copyright (C) 2009 Mozilla Corporation
+Copyright (C) 1998-2007 Marti Maria
+
+Permission is hereby granted, free of charge, to any person obtaining 
+a copy of this software and associated documentation files (the "Software"), 
+to deal in the Software without restriction, including without limitation 
+the rights to use, copy, modify, merge, publish, distribute, sublicense, 
+and/or sell copies of the Software, and to permit persons to whom the Software 
+is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
+THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// Copyright (c) 2009 The RE2 Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2011 Google Inc. All Rights Reserved.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+Copyright (c) 2006 Bob Ippolito
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+// Copyright (c) 2011 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+All MurmurHash source files are placed in the public domain.
+
+The license below applies to all other code in SMHasher:
+
+Copyright (c) 2011 Google, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+The author disclaims copyright to this source code.  In place of
+a legal notice, here is a blessing:
+
+   May you do good and not evil.
+   May you find forgiveness for yourself and forgive others.
+   May you share freely, never taking more than you give.
+
+SWIG is distributed under the following terms:
+
+I.  
+
+Copyright (c) 1995-1998
+The University of Utah and the Regents of the University of California
+All Rights Reserved
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that 
+(1) The above copyright notice and the following two paragraphs
+appear in all copies of the source code and (2) redistributions
+including binaries reproduces these notices in the supporting
+documentation.   Substantial modifications to this software may be
+copyrighted by their authors and need not follow the licensing terms
+described here, provided that the new terms are clearly indicated in
+all files where they apply.
+
+IN NO EVENT SHALL THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, THE 
+UNIVERSITY OF UTAH OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY
+PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
+EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, AND THE UNIVERSITY OF UTAH
+SPECIFICALLY DISCLAIM ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, 
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND 
+THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE,
+SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+
+II. 
+
+This software includes contributions that are Copyright (c) 1998-2005
+University of Chicago.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.  Redistributions
+in binary form must reproduce the above copyright notice, this list of
+conditions and the following disclaimer in the documentation and/or
+other materials provided with the distribution.  Neither the name of
+the University of Chicago nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF CHICAGO AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF
+CHICAGO OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+III.  
+
+This software includes contributions that are Copyright (c) 2005-2006
+Arizona Board of Regents (University of Arizona).
+All Rights Reserved
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that 
+(1) The above copyright notice and the following two paragraphs
+appear in all copies of the source code and (2) redistributions
+including binaries reproduces these notices in the supporting
+documentation.   Substantial modifications to this software may be
+copyrighted by their authors and need not follow the licensing terms
+described here, provided that the new terms are clearly indicated in
+all files where they apply.
+
+THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF ARIZONA AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF
+ARIZONA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+// Copyright (c) 2005, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+All code here is public domain.
+
+Copyright (c) 2012, Linux USB Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+o Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+o Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer in the
+  documentation and/or other materials provided with the distribution.
+
+o Neither the name of the Linux USB Project nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+(Copied from the COPYRIGHT file of
+https://code.google.com/p/sctp-refimpl/source/browse/trunk/COPYRIGHT)
+--------------------------------------------------------------------------------
+
+Copyright (c) 2001, 2002 Cisco Systems, Inc.
+Copyright (c) 2002-12 Randall R. Stewart
+Copyright (c) 2002-12 Michael Tuexen
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+;*****************************************************************************
+;* x86inc.asm
+;*****************************************************************************
+;* Copyright (C) 2005-2011 x264 project
+;*
+;* Authors: Loren Merritt <lorenm@u.washington.edu>
+;*          Anton Mitrofanov <BugMaster@narod.ru>
+;*          Jason Garrett-Glaser <darkshikari@gmail.com>
+;*
+;* Permission to use, copy, modify, and/or distribute this software for any
+;* purpose with or without fee is hereby granted, provided that the above
+;* copyright notice and this permission notice appear in all copies.
+;*
+;* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+;* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+;* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+;* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+;* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+;* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+;* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;*****************************************************************************
+
+; This is a header file for the x264ASM assembly language, which uses
+; NASM/YASM syntax combined with a large number of macros to provide easy
+; abstraction between different calling conventions (x86_32, win64, linux64).
+; It also has various other useful features to simplify writing the kind of
+; DSP functions that are most often used in x264.
+
+; Unlike the rest of x264, this file is available under an ISC license, as it
+; has significant usefulness outside of x264 and we want it to be available
+; to the largest audience possible.  Of course, if you modify it for your own
+; purposes to add a new feature, we strongly encourage contributing a patch
+; as this feature might be useful for others as well.  Send patches or ideas
+; to x264-devel@videolan.org .
+
+Yasm is Copyright (c) 2001-2010 Peter Johnson and other Yasm developers.
+
+Yasm developers and/or contributors include:
+  Peter Johnson
+  Michael Urman
+  Brian Gladman (Visual Studio build files, other fixes)
+  Stanislav Karchebny (options parser)
+  Mathieu Monnier (SSE4 instruction patches, NASM preprocessor additions)
+  Anonymous "NASM64" developer (NASM preprocessor fixes)
+  Stephen Polkowski (x86 instruction patches)
+  Henryk Richter (Mach-O object format)
+  Ben Skeggs (patches, bug reports)
+  Alexei Svitkine (GAS preprocessor)
+  Samuel Thibault (TASM parser and frontend)
+
+-----------------------------------
+Yasm licensing overview and summary
+-----------------------------------
+
+Note: This document does not provide legal advice nor is it the actual
+license of any part of Yasm.  See the individual licenses for complete
+details.  Consult a lawyer for legal advice.
+
+The primary license of Yasm is the 2-clause BSD license.  Please use this
+license if you plan on submitting code to the project.
+
+Yasm has absolutely no warranty; not even for merchantibility or fitness
+for a particular purpose.
+
+-------
+Libyasm
+-------
+Libyasm is 2-clause or 3-clause BSD licensed, with the exception of
+bitvect, which is triple-licensed under the Artistic license, GPL, and
+LGPL.  Libyasm is thus GPL and LGPL compatible.  In addition, this also
+means that libyasm is free for binary-only distribution as long as the
+terms of the 3-clause BSD license and Artistic license (as it applies to
+bitvect) are fulfilled.
+
+-------
+Modules
+-------
+The modules are 2-clause or 3-clause BSD licensed.
+
+---------
+Frontends
+---------
+The frontends are 2-clause BSD licensed.
+
+-------------
+License Texts
+-------------
+The full text of all licenses are provided in separate files in the source
+distribution.  Each source file may include the entire license (in the case
+of the BSD and Artistic licenses), or may reference the GPL or LGPL license
+file.
+
+BSD.txt - 2-clause and 3-clause BSD licenses
+Artistic.txt - Artistic license
+GNU_GPL-2.0 - GNU General Public License
+GNU_LGPL-2.0 - GNU Library General Public License
+
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.2.4, March 14th, 2010
+
+  Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly
+  Mark Adler
+
+*/
+
+Copyright 2007, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------------------
+
+The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
+licensed separately as follows:
+
+The contents of this file are subject to the Mozilla Public License Version
+1.1 (the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is mozilla.org code.
+
+The Initial Developer of the Original Code is
+Netscape Communications Corporation.
+Portions created by the Initial Developer are Copyright (C) 1998
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+  Darin Fisher (original author)
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+
+Copyright 2007, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-------------------------------------------------------------------------------
+
+The file url_parse.cc is based on nsURLParsers.cc from Mozilla. This file is
+licensed separately as follows:
+
+The contents of this file are subject to the Mozilla Public License Version
+1.1 (the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+http://www.mozilla.org/MPL/
+
+Software distributed under the License is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+for the specific language governing rights and limitations under the
+License.
+
+The Original Code is mozilla.org code.
+
+The Initial Developer of the Original Code is
+Netscape Communications Corporation.
+Portions created by the Initial Developer are Copyright (C) 1998
+the Initial Developer. All Rights Reserved.
+
+Contributor(s):
+  Darin Fisher (original author)
+
+Alternatively, the contents of this file may be used under the terms of
+either the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+in which case the provisions of the GPL or the LGPL are applicable instead
+of those above. If you wish to allow use of your version of this file only
+under the terms of either the GPL or the LGPL, and not to allow others to
+use your version of this file under the terms of the MPL, indicate your
+decision by deleting the provisions above and replace them with the notice
+and other provisions required by the GPL or the LGPL. If you do not delete
+the provisions above, a recipient may use your version of this file under
+the terms of any one of the MPL, the GPL or the LGPL.
+
+This license applies to all parts of V8 that are not externally
+maintained libraries.  The externally maintained libraries used by V8
+are:
+
+  - PCRE test suite, located in
+    test/mjsunit/third_party/regexp-pcre.js.  This is based on the
+    test suite from PCRE-7.3, which is copyrighted by the University
+    of Cambridge and Google, Inc.  The copyright notice and license
+    are embedded in regexp-pcre.js.
+
+  - Layout tests, located in test/mjsunit/third_party.  These are
+    based on layout tests from webkit.org which are copyrighted by
+    Apple Computer, Inc. and released under a 3-clause BSD license.
+
+  - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
+    assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
+    assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
+    assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
+    assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
+    This code is copyrighted by Sun Microsystems Inc. and released
+    under a 3-clause BSD license.
+
+  - Valgrind client API header, located at third_party/valgrind/valgrind.h
+    This is release under the BSD license.
+
+These libraries have their own licenses; we recommend you read them,
+as their terms may differ from the terms below.
+
+Copyright 2006-2012, the V8 project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+============================================================
+Notices for file(s):
+/bin/make_ext4fs
+/bin/mkuserimg.sh
+/lib/libext4_utils_host.a
 ------------------------------------------------------------
 
    Copyright (c) 2010, The Android Open Source Project
@@ -6917,6 +14622,2489 @@
 
 ============================================================
 Notices for file(s):
+/lib/libsqlite_jni.so
+------------------------------------------------------------
+This software is copyrighted by Christian Werner <chw@ch-werner.de>
+and others. The following terms apply to all files associated with the
+software unless explicitly disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
+
+============================================================
+Notices for file(s):
+/lib/libgccdemangle.so
+------------------------------------------------------------
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+============================================================
+Notices for file(s):
+/bin/aapt
+/bin/aidl
+/bin/dexdump
+/bin/jasmin
+/bin/split-select
+/framework/android-mock-generatorlib.jar
+/framework/jasmin.jar
+/lib/lib64cutils.a
+/lib/lib64log.a
+/lib/lib64utils.a
+/lib/libandroidfw.a
+/lib/libcutils.a
+/lib/liblog.a
+/lib/liblog.so
+/lib/libnativehelper.so
+/lib/libsqlite3_android.a
+/lib/libutils.a
+/lib/libzipfile.a
+------------------------------------------------------------
+
+   Copyright (c) 2005-2008, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+============================================================
+Notices for file(s):
+/framework/org.eclipse.core.commands_3.6.0.I20100512-1500.jar
+/framework/org.eclipse.core.expressions_3.4.200.v20100505.jar
+/framework/org.eclipse.core.runtime_3.6.0.v20100505.jar
+/framework/org.eclipse.equinox.common_3.6.0.v20100503.jar
+/framework/org.eclipse.jface_3.6.2.M20110210-1200.jar
+/framework/org.eclipse.osgi_3.6.2.R36x_v20110210.jar
+/framework/org.eclipse.ui.workbench.texteditor_3.6.1.r361_v20100714-0800.jar
+/framework/org.eclipse.ui.workbench_3.6.2.M20110210-1200.jar
+/framework/osgi.jar
+/framework/propertysheet.jar
+/framework/swt.jar
+------------------------------------------------------------
+
+    Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF
+THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+*1. DEFINITIONS*
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and
+documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and
+are distributed by that particular Contributor. A Contribution
+'originates' from a Contributor if it was added to the Program by such
+Contributor itself or anyone acting on such Contributor's behalf.
+Contributions do not include additions to the Program which: (i) are
+separate modules of software distributed in conjunction with the Program
+under their own license agreement, and (ii) are not derivative works of
+the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement,
+including all Contributors.
+
+*2. GRANT OF RIGHTS*
+
+a) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free copyright
+license to reproduce, prepare derivative works of, publicly display,
+publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and
+object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby
+grants Recipient a non-exclusive, worldwide, royalty-free patent license
+under Licensed Patents to make, use, sell, offer to sell, import and
+otherwise transfer the Contribution of such Contributor, if any, in
+source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the
+Contribution is added by the Contributor, such addition of the
+Contribution causes such combination to be covered by the Licensed
+Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the
+licenses to its Contributions set forth herein, no assurances are
+provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient
+copyright rights in its Contribution, if any, to grant the copyright
+license set forth in this Agreement.
+
+*3. REQUIREMENTS*
+
+A Contributor may choose to distribute the Program in object code form
+under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties
+and conditions, express and implied, including warranties or conditions
+of title and non-infringement, and implied warranties or conditions of
+merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for
+damages, including direct, indirect, special, incidental and
+consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are
+offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such
+Contributor, and informs licensees how to obtain it in a reasonable
+manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained
+within the Program.
+
+Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.
+
+*4. COMMERCIAL DISTRIBUTION*
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program, the
+Contributor who includes the Program in a commercial product offering
+should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in
+a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the
+Program in a commercial product offering. The obligations in this
+section do not apply to any claims or Losses relating to any actual or
+alleged intellectual property infringement. In order to qualify, an
+Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial
+Contributor to control, and cooperate with the Commercial Contributor
+in, the defense and any related settlement negotiations. The Indemnified
+Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.
+
+*5. NO WARRANTY*
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED
+ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES
+OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR
+A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program
+and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program
+errors, compliance with applicable laws, damage to or loss of data,
+programs or equipment, and unavailability or interruption of operations.
+
+*6. DISCLAIMER OF LIABILITY*
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
+ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+*7. GENERAL*
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including
+a cross-claim or counterclaim in a lawsuit) alleging that the Program
+itself (excluding combinations of the Program with other software or
+hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails
+to comply with any of the material terms or conditions of this Agreement
+and does not cure such failure in a reasonable period of time after
+becoming aware of such noncompliance. If all Recipient's rights under
+this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's
+obligations under this Agreement and any licenses granted by Recipient
+relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and may
+only be modified in the following manner. The Agreement Steward reserves
+the right to publish new versions (including revisions) of this
+Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the
+initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is
+published, Contributor may elect to distribute the Program (including
+its Contributions) under the new version. Except as expressly stated in
+Sections 2(a) and 2(b) above, Recipient receives no rights or licenses
+to the intellectual property of any Contributor under this Agreement,
+whether expressly, by implication, estoppel or otherwise. All rights in
+the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the
+intellectual property laws of the United States of America. No party to
+this Agreement will bring a legal action under this Agreement more than
+one year after the cause of action arose. Each party waives its rights
+to a jury trial in any resulting litigation.
+
+
+============================================================
+Notices for file(s):
+/framework/bouncycastle-host.jar
+/framework/bouncycastle-hostdex.jar
+------------------------------------------------------------
+Copyright (c) 2000-2013 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+============================================================
+Notices for file(s):
+/framework/commons-compress-1.0.jar
+------------------------------------------------------------
+Apache Commons Compress
+Copyright 2002-2009 The Apache Software Foundation
+
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
+Original BZip2 classes contributed by Keiron Liddle
+<keiron@aftexsw.com>, Aftex Software to the Apache Ant project
+
+Original Tar classes from contributors of the Apache Ant project
+
+Original Zip classes from contributors of the Apache Ant project
+
+Original CPIO classes contributed by Markus Kuss and the jRPM project
+(jrpm.sourceforge.net)
+
+============================================================
+Notices for file(s):
+/lib/libbcc.so
+------------------------------------------------------------
+==========================
+NOTICE file for libbcc.git
+==========================
+
+* NOTICE for lib/ExecutionEngine/, lib/ScriptCRT/, include and helper/.
+
+   Copyright (c) 2005-2011, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
+* NOTICE for runtime/ and lib/CodeGen/.
+  Note: The NOTICE is the same for another git project, external/llvm.git.
+
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+Copyrights and Licenses for Third Party Software Distributed with LLVM:
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+Autoconf            llvm/autoconf
+                    llvm/projects/ModuleMaker/autoconf
+                    llvm/projects/sample/autoconf
+CellSPU backend     llvm/lib/Target/CellSPU/README.txt
+Google Test         llvm/utils/unittest/googletest
+OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
+
+
+
+* NOTICE for tests/disassem.cpp and tests/disassem.h.
+
+/*      $NetBSD: disassem.c,v 1.14 2003/03/27 16:58:36 mycroft Exp $    */
+
+/*-
+ * Copyright (c) 1996 Mark Brinicombe.
+ * Copyright (c) 1996 Brini.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by Brini.
+ * 4. The name of the company nor the name of the author may be used to
+ *    endorse or promote products derived from this software without specific
+ *    prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * RiscBSD kernel project
+ *
+ * db_disasm.c
+ *
+ * Kernel disassembler
+ *
+ * Created      : 10/02/96
+ *
+ * Structured after the sparc/sparc/db_disasm.c by David S. Miller &
+ * Paul Kranenburg
+ *
+ * This code is not complete. Not all instructions are disassembled.
+ */
+
+============================================================
+Notices for file(s):
+/lib/libfdlibm.a
+------------------------------------------------------------
+Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+
+Developed at SunSoft, a Sun Microsystems, Inc. business.
+Permission to use, copy, modify, and distribute this
+software is freely granted, provided that this notice
+is preserved.
+
+============================================================
+Notices for file(s):
+/bin/emulator-arm
+/bin/emulator-mips
+/bin/emulator-x86
+/bin/emulator
+/bin/emulator64-arm
+/bin/emulator64-mips
+/bin/emulator64-x86
+/lib/emulator-common.a
+/lib/emulator-libelff.a
+/lib/emulator-libjpeg.a
+/lib/emulator-libqemu.a
+/lib/emulator-libui.a
+/lib/emulator-target-arm.a
+/lib/emulator-target-i386.a
+/lib/emulator-target-mips.a
+/lib/emulator64-common.a
+/lib/emulator64-libelff.a
+/lib/emulator64-libjpeg.a
+/lib/emulator64-libqemu.a
+/lib/emulator64-libui.a
+/lib/emulator64-target-arm.a
+/lib/emulator64-target-i386.a
+/lib/emulator64-target-mips.a
+------------------------------------------------------------
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                          675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+============================================================
+Notices for file(s):
+/framework/groovy-all-1.7.0.jar
+------------------------------------------------------------
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+============================================================
+Notices for file(s):
+/lib/libcorkscrew.so
+------------------------------------------------------------
+
+   Copyright (c) 2011, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+============================================================
+Notices for file(s):
+/framework/liblzf.jar
+------------------------------------------------------------
+Copyright (c) 2000-2009 Marc Alexander Lehmann <schmorp@schmorp.de>
+
+Redistribution and use in source and binary forms, with or without modifica-
+tion, are permitted provided that the following conditions are met:
+
+  1.  Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+  2.  Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
+CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
+EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
+CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
+ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Alternatively, the following files carry an additional notice that
+explicitly allows relicensing under the GPLv2: lzf.c lzf.h lzfP.h lzf_c.c
+lzf_d.c
+
+
+============================================================
+Notices for file(s):
+/lib/libLLVM.so
+------------------------------------------------------------
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+Copyrights and Licenses for Third Party Software Distributed with LLVM:
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+Autoconf            llvm/autoconf
+                    llvm/projects/ModuleMaker/autoconf
+                    llvm/projects/sample/autoconf
+CellSPU backend     llvm/lib/Target/CellSPU/README.txt
+Google Test         llvm/utils/unittest/googletest
+OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
+
+======================================================================
+== LICENSE.TXT for ./autoconf/LICENSE.TXT
+======================================================================
+
+------------------------------------------------------------------------------
+Autoconf Files
+------------------------------------------------------------------------------
+All autoconf files are licensed under the LLVM license with the following
+additions:
+
+llvm/autoconf/install-sh:
+	This script is licensed under the LLVM license, with the following
+	additional copyrights and restrictions:
+
+	Copyright 1991 by the Massachusetts Institute of Technology
+
+	Permission to use, copy, modify, distribute, and sell this software and its
+	documentation for any purpose is hereby granted without fee, provided that
+	the above copyright notice appear in all copies and that both that
+	copyright notice and this permission notice appear in supporting 
+	documentation, and that the name of M.I.T. not be used in advertising or
+	publicity pertaining to distribution of the software without specific,
+	written prior permission.  M.I.T. makes no representations about the
+	suitability of this software for any purpose.  It is provided "as is"
+	without express or implied warranty.
+
+Please see the source files for additional copyrights.
+
+
+======================================================================
+== LICENSE.TXT for ./projects/sample/autoconf/LICENSE.TXT
+======================================================================
+
+------------------------------------------------------------------------------
+Autoconf Files
+------------------------------------------------------------------------------
+All autoconf files are licensed under the LLVM license with the following
+additions:
+
+llvm/autoconf/install-sh:
+	This script is licensed under the LLVM license, with the following
+	additional copyrights and restrictions:
+
+	Copyright 1991 by the Massachusetts Institute of Technology
+
+	Permission to use, copy, modify, distribute, and sell this software and its
+	documentation for any purpose is hereby granted without fee, provided that
+	the above copyright notice appear in all copies and that both that
+	copyright notice and this permission notice appear in supporting 
+	documentation, and that the name of M.I.T. not be used in advertising or
+	publicity pertaining to distribution of the software without specific,
+	written prior permission.  M.I.T. makes no representations about the
+	suitability of this software for any purpose.  It is provided "as is"
+	without express or implied warranty.
+
+Please see the source files for additional copyrights.
+
+
+======================================================================
+== LICENSE.TXT for ./utils/unittest/googletest/LICENSE.TXT
+======================================================================
+
+Copyright 2008, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================
+== LICENSE.TXT for ./include/llvm/Support/LICENSE.TXT
+======================================================================
+
+LLVM System Interface Library
+-------------------------------------------------------------------------------
+The LLVM System Interface Library is licensed under the Illinois Open Source
+License and has the following additional copyright:
+
+Copyright (C) 2004 eXtensible Systems, Inc.
+
+============================================================
+Notices for file(s):
+/framework/doclava.jar
+------------------------------------------------------------
+ 
+ Copyright (C) 2010 Google Inc.
+ 
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ 
+ http://www.apache.org/licenses/LICENSE-2.0
+ 
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+======================================================================
+
+jQuery 1.2.6 - New Wave Javascript
+
+Copyright (c) 2008 John Resig (jquery.com)
+Dual licensed under the MIT (MIT-LICENSE.txt)
+and GPL (GPL-LICENSE.txt) licenses.
+
+Copyright (c) 2009 John Resig, http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+============================================================
+Notices for file(s):
+/bin/sqlite3
+/lib/libsqlite.so
+------------------------------------------------------------
+2001 September 15
+
+The author disclaims copyright to this source code.  In place of
+a legal notice, here is a blessing:
+
+   May you do good and not evil.
+   May you find forgiveness for yourself and forgive others.
+   May you share freely, never taking more than you give.
+
+
+============================================================
+Notices for file(s):
+/lib/libcrypto-host.so
+/lib/libcrypto_static.a
+/lib/libssl-host.so
+------------------------------------------------------------
+
+  LICENSE ISSUES
+  ==============
+
+  The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
+  the OpenSSL License and the original SSLeay license apply to the toolkit.
+  See below for the actual license texts. Actually both licenses are BSD-style
+  Open Source licenses. In case of any license issues related to OpenSSL
+  please contact openssl-core@openssl.org.
+
+  OpenSSL License
+  ---------------
+
+/* ====================================================================
+ * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ *    nor may "OpenSSL" appear in their names without prior written
+ *    permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the OpenSSL Project
+ *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com).  This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+ Original SSLeay License
+ -----------------------
+
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
+ * All rights reserved.
+ *
+ * This package is an SSL implementation written
+ * by Eric Young (eay@cryptsoft.com).
+ * The implementation was written so as to conform with Netscapes SSL.
+ * 
+ * This library is free for commercial and non-commercial use as long as
+ * the following conditions are aheared to.  The following conditions
+ * apply to all code found in this distribution, be it the RC4, RSA,
+ * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
+ * included with this distribution is covered by the same copyright terms
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
+ * 
+ * Copyright remains Eric Young's, and as such any Copyright notices in
+ * the code are not to be removed.
+ * If this package is used in a product, Eric Young should be given attribution
+ * as the author of the parts of the library used.
+ * This can be in the form of a textual message at program startup or
+ * in documentation (online or textual) provided with the package.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *    "This product includes cryptographic software written by
+ *     Eric Young (eay@cryptsoft.com)"
+ *    The word 'cryptographic' can be left out if the rouines from the library
+ *    being used are not cryptographic related :-).
+ * 4. If you include any Windows specific code (or a derivative thereof) from 
+ *    the apps directory (application code) you must include an acknowledgement:
+ *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
+ * 
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * 
+ * The licence and distribution terms for any publically available version or
+ * derivative of this code cannot be changed.  i.e. this code cannot simply be
+ * copied and put under another distribution licence
+ * [including the GNU Public Licence.]
+ */
+
+
+============================================================
+Notices for file(s):
+/lib/libexpat-host.so
+/lib/libexpat.a
+------------------------------------------------------------
+Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd
+                               and Clark Cooper
+Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+============================================================
+Notices for file(s):
+/lib/libLLVMAnalysis.a
+------------------------------------------------------------
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+Copyrights and Licenses for Third Party Software Distributed with LLVM:
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+Autoconf            llvm/autoconf
+                    llvm/projects/ModuleMaker/autoconf
+                    llvm/projects/sample/autoconf
+CellSPU backend     llvm/lib/Target/CellSPU/README.txt
+Google Test         llvm/utils/unittest/googletest
+OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
+
+============================================================
+Notices for file(s):
 /framework/emmalib.jar
 ------------------------------------------------------------
 Common Public License - v 1.0
@@ -7054,13 +17242,3276 @@
 
 ============================================================
 Notices for file(s):
-/lib/libgtest_host.a
-/lib64/libgtest_host.a
-/lib64/libgtest_prod.so
+/lib/libselinux.a
 ------------------------------------------------------------
-Copyright 2008, Google Inc.
+This library (libselinux) is public domain software, i.e. not copyrighted.
+
+Warranty Exclusion
+------------------
+You agree that this software is a
+non-commercially developed program that may contain "bugs" (as that
+term is used in the industry) and that it may not function as intended.
+The software is licensed "as is". NSA makes no, and hereby expressly
+disclaims all, warranties, express, implied, statutory, or otherwise
+with respect to the software, including noninfringement and the implied
+warranties of merchantability and fitness for a particular purpose.
+
+Limitation of Liability
+-----------------------
+In no event will NSA be liable for any damages, including loss of data,
+lost profits, cost of cover, or other special, incidental,
+consequential, direct or indirect damages arising from the software or
+the use thereof, however caused and on any theory of liability. This
+limitation will apply even if NSA has been advised of the possibility
+of such damage. You acknowledge that this is a reasonable allocation of
+risk.
+
+============================================================
+Notices for file(s):
+/framework/org-netbeans-api-visual.jar
+/framework/org-openide-util.jar
+------------------------------------------------------------
+The GNU General Public License (GPL) Version 2, June 1991 
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away
+your freedom to share and change it. By contrast, the GNU
+General Public License is intended to guarantee your freedom
+to share and change free software--to make sure the software
+is free for all its users. This General Public License
+applies to most of the Free Software Foundation's software
+and to any other program whose authors commit to using it.
+(Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can
+apply it to your programs, too. When we speak of free
+software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and
+charge for this service if you wish), that you receive
+source code or can get it if you want it, that you can
+change the software or use pieces of it in new free
+programs; and that you know you can do these things. To
+protect your rights, we need to make restrictions that
+forbid anyone to deny you these rights or to ask you to
+surrender the rights. These restrictions translate to
+certain responsibilities for you if you distribute copies of
+the software, or if you modify it.
+
+For example, if you distribute copies of such a program,
+whether gratis or for a fee, you must give the recipients
+all the rights that you have. You must make sure that they,
+too, receive or can get the source code. And you must show
+them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the
+software, and (2) offer you this license which gives you
+legal permission to copy, distribute and/or modify the
+software.
+
+Also, for each author's protection and ours, we want to make
+certain that everyone understands that there is no warranty
+for this free software. If the software is modified by
+someone else and passed on, we want its recipients to know
+that what they have is not the original, so that any
+problems introduced by others will not reflect on the
+original authors' reputations.
+
+Finally, any free program is threatened constantly by
+software patents. We wish to avoid the danger that
+redistributors of a free program will individually obtain
+patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must
+be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution
+and modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+MODIFICATION
+
+0. This License applies to any program or other work which
+contains a notice placed by the copyright holder saying it
+may be distributed under the terms of this General Public
+License. The "Program", below, refers to any such program or
+work, and a "work based on the Program" means either the
+Program or any derivative work under copyright law: that is
+to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into
+another language. (Hereinafter, translation is included
+without limitation in the term "modification".) Each
+licensee is addressed as "you".
+
+Activities other than copying, distribution and modification
+are not covered by this License; they are outside its scope.
+The act of running the Program is not restricted, and the
+output from the Program is covered only if its contents
+constitute a work based on the Program (independent of
+having been made by running the Program). Whether that is
+true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the
+Program's source code as you receive it, in any medium,
+provided that you conspicuously and appropriately publish on
+each copy an appropriate copyright notice and disclaimer of
+warranty; keep intact all the notices that refer to this
+License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this License along
+with the Program.
+
+You may charge a fee for the physical act of transferring a
+copy, and you may at your option offer warranty protection
+in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any
+portion of it, thus forming a work based on the Program, and
+copy and distribute such modifications or work under the
+terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+a) You must cause the modified files to carry prominent
+notices stating that you changed the files and the date of
+any change.
+
+b) You must cause any work that you distribute or publish,
+that in whole or in part contains or is derived from the
+Program or any part thereof, to be licensed as a whole at no
+charge to all third parties under the terms of this License.
+
+c) If the modified program normally reads commands
+interactively when run, you must cause it, when started
+running for such interactive use in the most ordinary way,
+to print or display an announcement including an appropriate
+copyright notice and a notice that there is no warranty (or
+else, saying that you provide a warranty) and that users may
+redistribute the program under these conditions, and telling
+the user how to view a copy of this License. (Exception: if
+the Program itself is interactive but does not normally
+print such an announcement, your work based on the Program
+is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the
+Program, and can be reasonably considered independent and
+separate works in themselves, then this License, and its
+terms, do not apply to those sections when you distribute
+them as separate works. But when you distribute the same
+sections as part of a whole which is a work based on the
+Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees
+extend to the entire whole, and thus to each and every part
+regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights
+or contest your rights to work written entirely by you;
+rather, the intent is to exercise the right to control the
+distribution of derivative or collective works based on the
+Program. In addition, mere aggregation of another work not
+based on the Program with the Program (or with a work based
+on the Program) on a volume of a storage or distribution
+medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based
+on it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you
+also do one of the following:
+
+a) Accompany it with the complete corresponding
+machine-readable source code, which must be distributed
+under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+b) Accompany it with a written offer, valid for at least
+three years, to give any third party, for a charge no more
+than your cost of physically performing source distribution,
+a complete machine-readable copy of the corresponding source
+code, to be distributed under the terms of Sections 1 and 2
+above on a medium customarily used for software interchange;
+or,
+
+c) Accompany it with the information you received as to the
+offer to distribute corresponding source code. (This
+alternative is allowed only for noncommercial distribution
+and only if you received the program in object code or
+executable form with such an offer, in accord with
+Subsection b above.)
+
+The source code for a work means the preferred form of the
+work for making modifications to it. For an executable work,
+complete source code means all the source code for all
+modules it contains, plus any associated interface
+definition files, plus the scripts used to control
+compilation and installation of the executable. However, as
+a special exception, the source code distributed need not
+include anything that is normally distributed (in either
+source or binary form) with the major components (compiler,
+kernel, and so on) of the operating system on which the
+executable runs, unless that component itself accompanies
+the executable. If distribution of executable or object code
+is made by offering access to copy from a designated place,
+then offering equivalent access to copy the source code from
+the same place counts as distribution of the source code,
+even though third parties are not compelled to copy the
+source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the
+Program except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense or distribute
+the Program is void, and will automatically terminate your
+rights under this License. However, parties who have
+received copies, or rights, from you under this License will
+not have their licenses terminated so long as such parties
+remain in full compliance.
+
+5. You are not required to accept this License, since you
+have not signed it. However, nothing else grants you
+permission to modify or distribute the Program or its
+derivative works. These actions are prohibited by law if you
+do not accept this License. Therefore, by modifying or
+distributing the Program (or any work based on the Program),
+you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or
+modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based
+on the Program), the recipient automatically receives a
+license from the original licensor to copy, distribute or
+modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein. You are
+not responsible for enforcing compliance by third parties to
+this License.
+
+7. If, as a consequence of a court judgment or allegation of
+patent infringement or for any other reason (not limited to
+patent issues), conditions are imposed on you (whether by
+court order, agreement or otherwise) that contradict the
+conditions of this License, they do not excuse you from the
+conditions of this License. If you cannot distribute so as
+to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a
+consequence you may not distribute the Program at all. For
+example, if a patent license would not permit royalty-free
+redistribution of the Program by all those who receive
+copies directly or indirectly through you, then the only way
+you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or
+unenforceable under any particular circumstance, the balance
+of the section is intended to apply and the section as a
+whole is intended to apply in other circumstances. It is not
+the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest
+validity of any such claims; this section has the sole
+purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license
+practices. Many people have made generous contributions to
+the wide range of software distributed through that system
+in reliance on consistent application of that system; it is
+up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee
+cannot impose that choice.
+
+This section is intended to make thoroughly clear what is
+believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is
+restricted in certain countries either by patents or by
+copyrighted interfaces, the original copyright holder who
+places the Program under this License may add an explicit
+geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or
+among countries not thus excluded. In such case, this
+License incorporates the limitation as if written in the
+body of this License.
+
+9. The Free Software Foundation may publish revised and/or
+new versions of the General Public License from time to
+time. Such new versions will be similar in spirit to the
+present version, but may differ in detail to address new
+problems or concerns.
+
+Each version is given a distinguishing version number. If
+the Program specifies a version number of this License which
+applies to it and "any later version", you have the option
+of following the terms and conditions either of that version
+or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number
+of this License, you may choose any version ever published
+by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into
+other free programs whose distribution conditions are
+different, write to the author to ask for permission. For
+software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we
+sometimes make exceptions for this. Our decision will be
+guided by the two goals of preserving the free status of all
+derivatives of our free software and of promoting the
+sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS
+NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM
+"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
+OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
+TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY
+WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
+ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL,
+SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF
+THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
+LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
+LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
+PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the
+greatest possible use to the public, the best way to achieve
+this is to make it free software which everyone can
+redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is
+safest to attach them to the start of each source file to
+most effectively convey the exclusion of warranty; and each
+file should have at least the "copyright" line and a pointer
+to where the full notice is found.
+
+One line to give the program's name and a brief idea of what
+it does.
+
+Copyright (C) <year> <name of author>
+This program is free software; you can redistribute it
+and/or modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later
+version. This program is distributed in the hope that it
+will be useful, but WITHOUT ANY WARRANTY; without even the
+implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for
+more details. You should have received a copy of the GNU
+General Public License along with this program; if not,
+write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and
+paper mail. If the program is interactive, make it output a
+short notice like this when it starts in an interactive
+mode:
+
+Gnomovision version 69, Copyright (C) year name of author
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'. This is free software, and you are welcome to
+redistribute it under certain conditions; type `show c' for
+details. The hypothetical commands `show w' and `show c'
+should show the appropriate parts of the General Public
+License. Of course, the commands you use may be called
+something other than `show w' and `show c'; they could even
+be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a
+programmer) or your school, if any, to sign a "copyright
+disclaimer" for the program, if necessary. Here is a sample;
+alter the names:
+
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the program `Gnomovision' (which makes passes at compilers)
+written by James Hacker.
+
+signature of Ty Coon, 1 April 1989
+Ty Coon, President of Vice
+This General Public License does not permit incorporating
+your program into proprietary programs. If your program is a
+subroutine library, you may consider it more useful to
+permit linking proprietary applications with the library. If
+this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
+
+Certain source files distributed by Sun Microsystems, Inc. 
+are subject to  the following clarification and special
+exception to the GPL Version 2, but only where Sun has
+expressly included in the particular source file's header
+the words  "Sun designates this particular file as subject
+to the "Classpath" exception as provided by Sun in the
+License file that accompanied this code." 
+
+   Linking this library statically or dynamically with other
+modules is making a combined work based on this library. 
+Thus, the terms and conditions of the GNU General Public
+License Version 2 cover the whole combination. 
+
+  As a special exception, the copyright holders of this
+library give you  permission to link this library with
+independent modules to produce an  executable, regardless of
+the license terms of these independent modules,  and to copy
+and distribute the resulting executable under terms of your 
+choice, provided that you also meet, for each linked
+independent module,  the terms and conditions of the license
+of that module.  An independent  module is a module which is
+not derived from or based on this library.  If  you modify
+this library, you may extend this exception to your version
+of  the library, but you are not obligated to do so.  If you
+do not wish to do so, delete this exception statement from
+your version.
+============================================================
+Notices for file(s):
+/bin/adb
+------------------------------------------------------------
+
+   Copyright (c) 2006-2009, The Android Open Source Project
+   Copyright 2006, Brian Swetland <swetland@frotz.net>
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+============================================================
+Notices for file(s):
+/framework/apache-xml-hostdex.jar
+------------------------------------------------------------
+   =========================================================================
+   ==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
+   ==  Version 2.0, in this case for the Apache Xalan Java distribution.  ==
+   =========================================================================
+
+   Apache Xalan (Xalan XSLT processor)
+   Copyright 1999-2006 The Apache Software Foundation
+
+   Apache Xalan (Xalan serializer)
+   Copyright 1999-2006 The Apache Software Foundation
+
+   This product includes software developed at
+   The Apache Software Foundation (http://www.apache.org/).
+
+   =========================================================================
+   Portions of this software was originally based on the following:
+     - software copyright (c) 1999-2002, Lotus Development Corporation.,
+       http://www.lotus.com.
+     - software copyright (c) 2001-2002, Sun Microsystems.,
+       http://www.sun.com.
+     - software copyright (c) 2003, IBM Corporation., 
+       http://www.ibm.com.
+       
+   =========================================================================
+   The binary distribution package (ie. jars, samples and documentation) of
+   this product includes software developed by the following:
+       
+     - The Apache Software Foundation 
+         - Xerces Java - see LICENSE.txt 
+         - JAXP 1.3 APIs - see LICENSE.txt
+         - Bytecode Engineering Library - see LICENSE.txt
+         - Regular Expression - see LICENSE.txt
+       
+     - Scott Hudson, Frank Flannery, C. Scott Ananian 
+         - CUP Parser Generator runtime (javacup\runtime) - see LICENSE.txt 
+ 
+   ========================================================================= 
+   The source distribution package (ie. all source and tools required to build
+   Xalan Java) of this product includes software developed by the following:
+       
+     - The Apache Software Foundation
+         - Xerces Java - see LICENSE.txt 
+         - JAXP 1.3 APIs - see LICENSE.txt
+         - Bytecode Engineering Library - see LICENSE.txt
+         - Regular Expression - see LICENSE.txt
+         - Ant - see LICENSE.txt
+         - Stylebook doc tool - see LICENSE.txt    
+       
+     - Elliot Joel Berk and C. Scott Ananian 
+         - Lexical Analyzer Generator (JLex) - see LICENSE.txt
+
+   =========================================================================       
+   Apache Xerces Java
+   Copyright 1999-2006 The Apache Software Foundation
+
+   This product includes software developed at
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Portions of Apache Xerces Java in xercesImpl.jar and xml-apis.jar
+   were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - voluntary contributions made by Paul Eng on behalf of the 
+       Apache Software Foundation that were originally developed at iClick, Inc.,
+       software copyright (c) 1999.    
+
+   =========================================================================   
+   Apache xml-commons xml-apis (redistribution of xml-apis.jar)
+
+   Apache XML Commons
+   Copyright 2001-2003,2006 The Apache Software Foundation.
+
+   This product includes software developed at
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
+
+
+============================================================
+Notices for file(s):
+/bin/llvm-rs-cc
+/bin/rs-spec-gen
+/lib/libslang.a
+------------------------------------------------------------
+=========================
+NOTICE file for slang.git
+=========================
+
+   Copyright (c) 2005-2011, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
+===========================================
+NOTICE file for external/clang (clang.git).
+Note: libclang*.a are statically linked.
+===========================================
+
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2007-2011 University of Illinois at Urbana-Champaign.
 All rights reserved.
 
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+<none yet>
+
+
+
+=========================================
+NOTICE file for external/llvm (llvm.git).
+Note: libLLVM*.a are statically linked.
+=========================================
+
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+Copyrights and Licenses for Third Party Software Distributed with LLVM:
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+Autoconf            llvm/autoconf
+                    llvm/projects/ModuleMaker/autoconf
+                    llvm/projects/sample/autoconf
+CellSPU backend     llvm/lib/Target/CellSPU/README.txt
+Google Test         llvm/utils/unittest/googletest
+OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
+
+============================================================
+Notices for file(s):
+/bin/minigzip
+/lib/libunz.a
+/lib/libz-host.so
+/lib/libz.a
+------------------------------------------------------------
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+============================================================
+Notices for file(s):
+/bin/mksnapshot.arm
+------------------------------------------------------------
+Copyright (c) 1994-2006 Sun Microsystems Inc.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+- Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+- Redistribution in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+- Neither the name of Sun Microsystems or the names of contributors may
+be used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The original source code covered by the above license above has been
+modified significantly by Google Inc.
+Copyright 2006-2008 the V8 project authors. All rights reserved.
+
+============================================================
+Notices for file(s):
+/lib/libpng.a
+------------------------------------------------------------
+
+This copy of the libpng notices is provided for your convenience.  In case of
+any discrepancy between this copy and the notices in the file png.h that is
+included in the libpng distribution, the latter shall prevail.
+
+COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
+
+If you modify libpng you may insert additional notices immediately following
+this sentence.
+
+This code is released under the libpng license.
+
+libpng versions 1.2.6, August 15, 2004, through 1.2.46, July 9, 2011, are
+Copyright (c) 2004, 2006-2009 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-1.2.5
+with the following individual added to the list of Contributing Authors
+
+   Cosmin Truta
+
+libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
+Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-1.0.6
+with the following individuals added to the list of Contributing Authors
+
+   Simon-Pierre Cadieux
+   Eric S. Raymond
+   Gilles Vollant
+
+and with the following additions to the disclaimer:
+
+   There is no warranty against interference with your enjoyment of the
+   library or against infringement.  There is no warranty that our
+   efforts or the library will fulfill any of your particular purposes
+   or needs.  This library is provided with all faults, and the entire
+   risk of satisfactory quality, performance, accuracy, and effort is with
+   the user.
+
+libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
+Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are
+distributed according to the same disclaimer and license as libpng-0.96,
+with the following individuals added to the list of Contributing Authors:
+
+   Tom Lane
+   Glenn Randers-Pehrson
+   Willem van Schaik
+
+libpng versions 0.89, June 1996, through 0.96, May 1997, are
+Copyright (c) 1996, 1997 Andreas Dilger
+Distributed according to the same disclaimer and license as libpng-0.88,
+with the following individuals added to the list of Contributing Authors:
+
+   John Bowler
+   Kevin Bracey
+   Sam Bushell
+   Magnus Holmgren
+   Greg Roelofs
+   Tom Tanner
+
+libpng versions 0.5, May 1995, through 0.88, January 1996, are
+Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
+
+For the purposes of this copyright and license, "Contributing Authors"
+is defined as the following set of individuals:
+
+   Andreas Dilger
+   Dave Martindale
+   Guy Eric Schalnat
+   Paul Schmidt
+   Tim Wegner
+
+The PNG Reference Library is supplied "AS IS".  The Contributing Authors
+and Group 42, Inc. disclaim all warranties, expressed or implied,
+including, without limitation, the warranties of merchantability and of
+fitness for any purpose.  The Contributing Authors and Group 42, Inc.
+assume no liability for direct, indirect, incidental, special, exemplary,
+or consequential damages, which may result from the use of the PNG
+Reference Library, even if advised of the possibility of such damage.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+source code, or portions hereof, for any purpose, without fee, subject
+to the following restrictions:
+
+1. The origin of this source code must not be misrepresented.
+
+2. Altered versions must be plainly marked as such and must not
+   be misrepresented as being the original source.
+
+3. This Copyright notice may not be removed or altered from any
+   source or altered source distribution.
+
+The Contributing Authors and Group 42, Inc. specifically permit, without
+fee, and encourage the use of this source code as a component to
+supporting the PNG file format in commercial products.  If you use this
+source code in a product, acknowledgment is not required but would be
+appreciated.
+
+
+A "png_get_copyright" function is available, for convenient use in "about"
+boxes and the like:
+
+   printf("%s",png_get_copyright(NULL));
+
+Also, the PNG logo (in PNG format, of course) is supplied in the
+files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
+
+Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is a
+certification mark of the Open Source Initiative.
+
+Glenn Randers-Pehrson
+glennrp at users.sourceforge.net
+July 9, 2011
+
+============================================================
+Notices for file(s):
+/framework/antlr-runtime.jar
+------------------------------------------------------------
+[The "BSD license"]
+Copyright (c) 201 Terence Parr
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+ 3. The name of the author may not be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+============================================================
+Notices for file(s):
+/framework/junit.jar
+------------------------------------------------------------
+Common Public License - v 1.0
+
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i)	 changes to the Program, and
+ii)	 additions to the Program;
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+
+2. GRANT OF RIGHTS
+
+a)	Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+c)	Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+d)	Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a)	it complies with the terms and conditions of this Agreement; and
+b)	its license agreement:
+i)	effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii)	states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+iv)	states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+When the Program is made available in source code form:
+
+a)	it must be made available under this Agreement; and
+b)	a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+
+If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+============================================================
+Notices for file(s):
+/framework/ant-glob.jar
+------------------------------------------------------------
+/*
+ *                                 Apache License
+ *                           Version 2.0, January 2004
+ *                        http://www.apache.org/licenses/
+ *
+ *   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+ *
+ *   1. Definitions.
+ *
+ *      "License" shall mean the terms and conditions for use, reproduction,
+ *      and distribution as defined by Sections 1 through 9 of this document.
+ *
+ *      "Licensor" shall mean the copyright owner or entity authorized by
+ *      the copyright owner that is granting the License.
+ *
+ *      "Legal Entity" shall mean the union of the acting entity and all
+ *      other entities that control, are controlled by, or are under common
+ *      control with that entity. For the purposes of this definition,
+ *      "control" means (i) the power, direct or indirect, to cause the
+ *      direction or management of such entity, whether by contract or
+ *      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ *      outstanding shares, or (iii) beneficial ownership of such entity.
+ *
+ *      "You" (or "Your") shall mean an individual or Legal Entity
+ *      exercising permissions granted by this License.
+ *
+ *      "Source" form shall mean the preferred form for making modifications,
+ *      including but not limited to software source code, documentation
+ *      source, and configuration files.
+ *
+ *      "Object" form shall mean any form resulting from mechanical
+ *      transformation or translation of a Source form, including but
+ *      not limited to compiled object code, generated documentation,
+ *      and conversions to other media types.
+ *
+ *      "Work" shall mean the work of authorship, whether in Source or
+ *      Object form, made available under the License, as indicated by a
+ *      copyright notice that is included in or attached to the work
+ *      (an example is provided in the Appendix below).
+ *
+ *      "Derivative Works" shall mean any work, whether in Source or Object
+ *      form, that is based on (or derived from) the Work and for which the
+ *      editorial revisions, annotations, elaborations, or other modifications
+ *      represent, as a whole, an original work of authorship. For the purposes
+ *      of this License, Derivative Works shall not include works that remain
+ *      separable from, or merely link (or bind by name) to the interfaces of,
+ *      the Work and Derivative Works thereof.
+ *
+ *      "Contribution" shall mean any work of authorship, including
+ *      the original version of the Work and any modifications or additions
+ *      to that Work or Derivative Works thereof, that is intentionally
+ *      submitted to Licensor for inclusion in the Work by the copyright owner
+ *      or by an individual or Legal Entity authorized to submit on behalf of
+ *      the copyright owner. For the purposes of this definition, "submitted"
+ *      means any form of electronic, verbal, or written communication sent
+ *      to the Licensor or its representatives, including but not limited to
+ *      communication on electronic mailing lists, source code control systems,
+ *      and issue tracking systems that are managed by, or on behalf of, the
+ *      Licensor for the purpose of discussing and improving the Work, but
+ *      excluding communication that is conspicuously marked or otherwise
+ *      designated in writing by the copyright owner as "Not a Contribution."
+ *
+ *      "Contributor" shall mean Licensor and any individual or Legal Entity
+ *      on behalf of whom a Contribution has been received by Licensor and
+ *      subsequently incorporated within the Work.
+ *
+ *   2. Grant of Copyright License. Subject to the terms and conditions of
+ *      this License, each Contributor hereby grants to You a perpetual,
+ *      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *      copyright license to reproduce, prepare Derivative Works of,
+ *      publicly display, publicly perform, sublicense, and distribute the
+ *      Work and such Derivative Works in Source or Object form.
+ *
+ *   3. Grant of Patent License. Subject to the terms and conditions of
+ *      this License, each Contributor hereby grants to You a perpetual,
+ *      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ *      (except as stated in this section) patent license to make, have made,
+ *      use, offer to sell, sell, import, and otherwise transfer the Work,
+ *      where such license applies only to those patent claims licensable
+ *      by such Contributor that are necessarily infringed by their
+ *      Contribution(s) alone or by combination of their Contribution(s)
+ *      with the Work to which such Contribution(s) was submitted. If You
+ *      institute patent litigation against any entity (including a
+ *      cross-claim or counterclaim in a lawsuit) alleging that the Work
+ *      or a Contribution incorporated within the Work constitutes direct
+ *      or contributory patent infringement, then any patent licenses
+ *      granted to You under this License for that Work shall terminate
+ *      as of the date such litigation is filed.
+ *
+ *   4. Redistribution. You may reproduce and distribute copies of the
+ *      Work or Derivative Works thereof in any medium, with or without
+ *      modifications, and in Source or Object form, provided that You
+ *      meet the following conditions:
+ *
+ *      (a) You must give any other recipients of the Work or
+ *          Derivative Works a copy of this License; and
+ *
+ *      (b) You must cause any modified files to carry prominent notices
+ *          stating that You changed the files; and
+ *
+ *      (c) You must retain, in the Source form of any Derivative Works
+ *          that You distribute, all copyright, patent, trademark, and
+ *          attribution notices from the Source form of the Work,
+ *          excluding those notices that do not pertain to any part of
+ *          the Derivative Works; and
+ *
+ *      (d) If the Work includes a "NOTICE" text file as part of its
+ *          distribution, then any Derivative Works that You distribute must
+ *          include a readable copy of the attribution notices contained
+ *          within such NOTICE file, excluding those notices that do not
+ *          pertain to any part of the Derivative Works, in at least one
+ *          of the following places: within a NOTICE text file distributed
+ *          as part of the Derivative Works; within the Source form or
+ *          documentation, if provided along with the Derivative Works; or,
+ *          within a display generated by the Derivative Works, if and
+ *          wherever such third-party notices normally appear. The contents
+ *          of the NOTICE file are for informational purposes only and
+ *          do not modify the License. You may add Your own attribution
+ *          notices within Derivative Works that You distribute, alongside
+ *          or as an addendum to the NOTICE text from the Work, provided
+ *          that such additional attribution notices cannot be construed
+ *          as modifying the License.
+ *
+ *      You may add Your own copyright statement to Your modifications and
+ *      may provide additional or different license terms and conditions
+ *      for use, reproduction, or distribution of Your modifications, or
+ *      for any such Derivative Works as a whole, provided Your use,
+ *      reproduction, and distribution of the Work otherwise complies with
+ *      the conditions stated in this License.
+ *
+ *   5. Submission of Contributions. Unless You explicitly state otherwise,
+ *      any Contribution intentionally submitted for inclusion in the Work
+ *      by You to the Licensor shall be under the terms and conditions of
+ *      this License, without any additional terms or conditions.
+ *      Notwithstanding the above, nothing herein shall supersede or modify
+ *      the terms of any separate license agreement you may have executed
+ *      with Licensor regarding such Contributions.
+ *
+ *   6. Trademarks. This License does not grant permission to use the trade
+ *      names, trademarks, service marks, or product names of the Licensor,
+ *      except as required for reasonable and customary use in describing the
+ *      origin of the Work and reproducing the content of the NOTICE file.
+ *
+ *   7. Disclaimer of Warranty. Unless required by applicable law or
+ *      agreed to in writing, Licensor provides the Work (and each
+ *      Contributor provides its Contributions) on an "AS IS" BASIS,
+ *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ *      implied, including, without limitation, any warranties or conditions
+ *      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ *      PARTICULAR PURPOSE. You are solely responsible for determining the
+ *      appropriateness of using or redistributing the Work and assume any
+ *      risks associated with Your exercise of permissions under this License.
+ *
+ *   8. Limitation of Liability. In no event and under no legal theory,
+ *      whether in tort (including negligence), contract, or otherwise,
+ *      unless required by applicable law (such as deliberate and grossly
+ *      negligent acts) or agreed to in writing, shall any Contributor be
+ *      liable to You for damages, including any direct, indirect, special,
+ *      incidental, or consequential damages of any character arising as a
+ *      result of this License or out of the use or inability to use the
+ *      Work (including but not limited to damages for loss of goodwill,
+ *      work stoppage, computer failure or malfunction, or any and all
+ *      other commercial damages or losses), even if such Contributor
+ *      has been advised of the possibility of such damages.
+ *
+ *   9. Accepting Warranty or Additional Liability. While redistributing
+ *      the Work or Derivative Works thereof, You may choose to offer,
+ *      and charge a fee for, acceptance of support, warranty, indemnity,
+ *      or other liability obligations and/or rights consistent with this
+ *      License. However, in accepting such obligations, You may act only
+ *      on Your own behalf and on Your sole responsibility, not on behalf
+ *      of any other Contributor, and only if You agree to indemnify,
+ *      defend, and hold each Contributor harmless for any liability
+ *      incurred by, or claims asserted against, such Contributor by reason
+ *      of your accepting any such warranty or additional liability.
+ *
+ *   END OF TERMS AND CONDITIONS
+ *
+ *   APPENDIX: How to apply the Apache License to your work.
+ *
+ *      To apply the Apache License to your work, attach the following
+ *      boilerplate notice, with the fields enclosed by brackets "[]"
+ *      replaced with your own identifying information. (Don't include
+ *      the brackets!)  The text should be enclosed in the appropriate
+ *      comment syntax for the file format. We also recommend that a
+ *      file or class name and description of purpose be included on the
+ *      same "printed page" as the copyright notice for easier
+ *      identification within third-party archives.
+ *
+ *   Copyright [yyyy] [name of copyright owner]
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ */
+
+W3C® SOFTWARE NOTICE AND LICENSE
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+
+This work (and included software, documentation such as READMEs, or other
+related items) is being provided by the copyright holders under the following
+license. By obtaining, using and/or copying this work, you (the licensee) agree
+that you have read, understood, and will comply with the following terms and
+conditions.
+
+Permission to copy, modify, and distribute this software and its documentation,
+with or without modification, for any purpose and without fee or royalty is
+hereby granted, provided that you include the following on ALL copies of the
+software and documentation or portions thereof, including modifications:
+
+  1. The full text of this NOTICE in a location viewable to users of the
+     redistributed or derivative work. 
+  2. Any pre-existing intellectual property disclaimers, notices, or terms
+     and conditions. If none exist, the W3C Software Short Notice should be
+     included (hypertext is preferred, text is permitted) within the body
+     of any redistributed or derivative code.
+  3. Notice of any changes or modifications to the files, including the date
+     changes were made. (We recommend you provide URIs to the location from
+     which the code is derived.)
+     
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE
+NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT
+THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
+PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising or
+publicity pertaining to the software without specific, written prior permission.
+Title to copyright in this software and any associated documentation will at
+all times remain with copyright holders.
+
+____________________________________
+
+This formulation of W3C's notice and license became active on December 31 2002.
+This version removes the copyright ownership notice such that this license can
+be used with materials other than those owned by the W3C, reflects that ERCIM
+is now a host of the W3C, includes references to this specific dated version of
+the license, and removes the ambiguous grant of "use". Otherwise, this version
+is the same as the previous version and is written so as to preserve the Free
+Software Foundation's assessment of GPL compatibility and OSI's certification
+under the Open Source Definition. Please see our Copyright FAQ for common
+questions about using materials from our site, including specific terms and
+conditions for packages like libwww, Amaya, and Jigsaw. Other questions about
+this notice can be directed to site-policy@w3.org.
+ 
+Joseph Reagle <site-policy@w3.org> 
+
+This license came from: http://www.megginson.com/SAX/copying.html
+  However please note future versions of SAX may be covered 
+  under http://saxproject.org/?selected=pd
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05
+
+============================================================
+Notices for file(s):
+/lib/libclang.so
+/lib/libclangAnalysis.a
+------------------------------------------------------------
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2007-2011 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+<none yet>
+
+============================================================
+Notices for file(s):
+/framework/guavalib.jar
+------------------------------------------------------------
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+============================================================
+Notices for file(s):
+/core-lambda-stubs.jar
+------------------------------------------------------------
+The GNU General Public License (GPL)
+
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share
+and change it.  By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software--to make sure the
+software is free for all its users.  This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it.  (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+When we speak of free software, we are referring to freedom, not price.  Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny
+you these rights or to ask you to surrender the rights.  These restrictions
+translate to certain responsibilities for you if you distribute copies of the
+software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have.  You must
+make sure that they, too, receive or can get the source code.  And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software.  If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents.  We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice
+placed by the copyright holder saying it may be distributed under the terms of
+this General Public License.  The "Program", below, refers to any such program
+or work, and a "work based on the Program" means either the Program or any
+derivative work under copyright law: that is to say, a work containing the
+Program or a portion of it, either verbatim or with modifications and/or
+translated into another language.  (Hereinafter, translation is included
+without limitation in the term "modification".) Each licensee is addressed as
+"you".
+
+Activities other than copying, distribution and modification are not covered by
+this License; they are outside its scope.  The act of running the Program is
+not restricted, and the output from the Program is covered only if its contents
+constitute a work based on the Program (independent of having been made by
+running the Program).  Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as
+you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus
+forming a work based on the Program, and copy and distribute such modifications
+or work under the terms of Section 1 above, provided that you also meet all of
+these conditions:
+
+    a) You must cause the modified files to carry prominent notices stating
+    that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in whole or
+    in part contains or is derived from the Program or any part thereof, to be
+    licensed as a whole at no charge to all third parties under the terms of
+    this License.
+
+    c) If the modified program normally reads commands interactively when run,
+    you must cause it, when started running for such interactive use in the
+    most ordinary way, to print or display an announcement including an
+    appropriate copyright notice and a notice that there is no warranty (or
+    else, saying that you provide a warranty) and that users may redistribute
+    the program under these conditions, and telling the user how to view a copy
+    of this License.  (Exception: if the Program itself is interactive but does
+    not normally print such an announcement, your work based on the Program is
+    not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License, and
+its terms, do not apply to those sections when you distribute them as separate
+works.  But when you distribute the same sections as part of a whole which is a
+work based on the Program, the distribution of the whole must be on the terms
+of this License, whose permissions for other licensees extend to the entire
+whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with the
+Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+3. You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable source
+    code, which must be distributed under the terms of Sections 1 and 2 above
+    on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three years, to
+    give any third party, for a charge no more than your cost of physically
+    performing source distribution, a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of Sections 1
+    and 2 above on a medium customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer to
+    distribute corresponding source code.  (This alternative is allowed only
+    for noncommercial distribution and only if you received the program in
+    object code or executable form with such an offer, in accord with
+    Subsection b above.)
+
+The source code for a work means the preferred form of the work for making
+modifications to it.  For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and installation
+of the executable.  However, as a special exception, the source code
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the source
+code from the same place counts as distribution of the source code, even though
+third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as
+expressly provided under this License.  Any attempt otherwise to copy, modify,
+sublicense or distribute the Program is void, and will automatically terminate
+your rights under this License.  However, parties who have received copies, or
+rights, from you under this License will not have their licenses terminated so
+long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it.
+However, nothing else grants you permission to modify or distribute the Program
+or its derivative works.  These actions are prohibited by law if you do not
+accept this License.  Therefore, by modifying or distributing the Program (or
+any work based on the Program), you indicate your acceptance of this License to
+do so, and all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program),
+the recipient automatically receives a license from the original licensor to
+copy, distribute or modify the Program subject to these terms and conditions.
+You may not impose any further restrictions on the recipients' exercise of the
+rights granted herein.  You are not responsible for enforcing compliance by
+third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues), conditions
+are imposed on you (whether by court order, agreement or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions of this License.  If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices.  Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain
+countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded.  In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the
+General Public License from time to time.  Such new versions will be similar in
+spirit to the present version, but may differ in detail to address new problems
+or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software Foundation.
+If the Program does not specify a version number of this License, you may
+choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs
+whose distribution conditions are different, write to the author to ask for
+permission.  For software which is copyrighted by the Free Software Foundation,
+write to the Free Software Foundation; we sometimes make exceptions for this.
+Our decision will be guided by the two goals of preserving the free status of
+all derivatives of our free software and of promoting the sharing and reuse of
+software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
+THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
+ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
+OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program.  It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+    One line to give the program's name and a brief idea of what it does.
+
+    Copyright (C) <year> <name of author>
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+    more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc., 59
+    Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
+    with ABSOLUTELY NO WARRANTY; for details type 'show w'.  This is free
+    software, and you are welcome to redistribute it under certain conditions;
+    type 'show c' for details.
+
+The hypothetical commands 'show w' and 'show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may be
+called something other than 'show w' and 'show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.  Here
+is a sample; alter the names:
+
+    Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+    'Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+    signature of Ty Coon, 1 April 1989
+
+    Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL
+
+Certain source files distributed by Oracle America and/or its affiliates are
+subject to the following clarification and special exception to the GPL, but
+only where Oracle has expressly included in the particular source file's header
+the words "Oracle designates this particular file as subject to the "Classpath"
+exception as provided by Oracle in the LICENSE file that accompanied this code."
+
+    Linking this library statically or dynamically with other modules is making
+    a combined work based on this library.  Thus, the terms and conditions of
+    the GNU General Public License cover the whole combination.
+
+    As a special exception, the copyright holders of this library give you
+    permission to link this library with independent modules to produce an
+    executable, regardless of the license terms of these independent modules,
+    and to copy and distribute the resulting executable under terms of your
+    choice, provided that you also meet, for each linked independent module,
+    the terms and conditions of the license of that module.  An independent
+    module is a module which is not derived from or based on this library.  If
+    you modify this library, you may extend this exception to your version of
+    the library, but you are not obligated to do so.  If you do not wish to do
+    so, delete this exception statement from your version.
+
+============================================================
+Notices for file(s):
+/lib/d8.jar
+------------------------------------------------------------
+This file lists all licenses for code distributed.
+All non-library code has the following 3-Clause BSD license.
+
+
+Copyright (c) 2016, the R8 project authors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Summary of distributed libraries:
+
+- artifact: com.google.guava:guava:+
+  name: Guava Google Core Libraries for Java
+  copyrightHolder: The Guava Authors
+  license: The Apache Software License, Version 2.0
+  licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
+- artifact: com.google.code.gson:gson:+
+  name: Gson
+  license: The Apache Software License, Version 2.0
+  licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
+  url: https://github.com/google/gson
+- artifact: it.unimi.dsi:fastutil:+
+  name: fastutil
+  license: Apache License, Version 2.0
+  licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.html
+  url: http://fasutil.di.unimi.it/
+- artifact: net.sf.jopt-simple:jopt-simple:+
+  name: JOpt Simple
+  license: The MIT License
+  licenseUrl: http://www.opensource.org/licenses/mit-license.php
+  url: http://pholser.github.com/jopt-simple
+- artifact: org.ow2.asm:asm-commons:+
+  name: ASM Commons
+  copyrightHolder: INRIA, France Telecom
+  license: ASM license
+  licenseUrl: http://asm.ow2.org/license.html
+  url: http://asm.ow2.org/index.html
+- artifact: org.ow2.asm:asm-tree:+
+  name: ASM Tree
+  copyrightHolder: INRIA, France Telecom
+  license: ASM license
+  licenseUrl: http://asm.ow2.org/license.html
+  url: http://asm.ow2.org/index.html
+- artifact: org.ow2.asm:asm-util:+
+  name: ASM Util
+  copyrightHolder: INRIA, France Telecom
+  license: ASM license
+  licenseUrl: http://asm.ow2.org/license.html
+  url: http://asm.ow2.org/index.html
+- artifact: org.ow2.asm:asm-analysis:+
+  name: ASM Util
+  copyrightHolder: INRIA, France Telecom
+  license: ASM license
+  licenseUrl: http://asm.ow2.org/license.html
+  url: http://asm.ow2.org/index.html
+- artifact: org.ow2.asm:asm:+
+  name: ASM Core
+  copyrightHolder: INRIA, France Telecom
+  license: ASM license
+  licenseUrl: http://asm.ow2.org/license.html
+  url: http://asm.ow2.org/index.html
+- artifact: org.jetbrains.kotlin:kotlin-stdlib:+
+  name: org.jetbrains.kotlin:kotlin-stdlib
+  copyrightHolder: JetBrains s.r.o.
+  license: The Apache License, Version 2.0
+  licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
+  url: https://kotlinlang.org/
+- artifact: org.jetbrains.kotlin:kotlin-stdlib-common:+
+  name: org.jetbrains.kotlin:kotlin-stdlib
+  copyrightHolder: JetBrains s.r.o.
+  license: The Apache License, Version 2.0
+  licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
+  url: https://kotlinlang.org/
+- artifact: org.jetbrains.kotlinx:kotlinx-metadata-jvm:+
+  name: org.jetbrains.kotlinx:kotlinx-metadata-jvm
+  copyrightHolder: JetBrains s.r.o.
+  license: The Apache License, Version 2.0
+  licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
+  url: https://kotlinlang.org/
+- artifact: org.jetbrains:annotations:+
+  name: IntelliJ IDEA Annotations
+  copyrightHolder: JetBrains s.r.o.
+  license: The Apache Software License, Version 2.0
+  licenseUrl: http://www.apache.org/licenses/LICENSE-2.0.txt
+  url: http://www.jetbrains.org
+
+
+Licenses details:
+
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+Copyright (c) 2000-2011 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+Apache Commons Compress
+Copyright 2002-2016 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+The files in the package org.apache.commons.compress.archivers.sevenz
+were derived from the LZMA SDK, version 9.20 (C/ and CPP/7zip/),
+which has been placed in the public domain:
+
+"LZMA SDK is placed in the public domain." (http://www.7-zip.org/sdk.html)
+
+
+ The MIT License
+
+ Copyright (c) 2004-2016 Paul R. Holser, Jr.
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+==============================================================================
+
+   Copyright (c) 2005-2014, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+==============================================================================
+COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
+
+Copyright © 1991-2020 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+---------------------
+
+Third-Party Software Licenses
+
+This section contains third-party software notices and/or additional
+terms for licensed third-party software components included within ICU
+libraries.
+
+1. ICU License - ICU 1.8.1 to ICU 57.1
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2016 International Business Machines Corporation and others
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies of
+the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+of the copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the
+property of their respective owners.
+
+2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
+
+ #     The Google Chrome software developed by Google is licensed under
+ # the BSD license. Other software included in this distribution is
+ # provided under other licenses, as set forth below.
+ #
+ #  The BSD License
+ #  http://opensource.org/licenses/bsd-license.php
+ #  Copyright (C) 2006-2008, Google Inc.
+ #
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ #  Redistributions of source code must retain the above copyright notice,
+ # this list of conditions and the following disclaimer.
+ #  Redistributions in binary form must reproduce the above
+ # copyright notice, this list of conditions and the following
+ # disclaimer in the documentation and/or other materials provided with
+ # the distribution.
+ #  Neither the name of  Google Inc. nor the names of its
+ # contributors may be used to endorse or promote products derived from
+ # this software without specific prior written permission.
+ #
+ #
+ #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+ #
+ #  The word list in cjdict.txt are generated by combining three word lists
+ # listed below with further processing for compound word breaking. The
+ # frequency is generated with an iterative training against Google web
+ # corpora.
+ #
+ #  * Libtabe (Chinese)
+ #    - https://sourceforge.net/project/?group_id=1519
+ #    - Its license terms and conditions are shown below.
+ #
+ #  * IPADIC (Japanese)
+ #    - http://chasen.aist-nara.ac.jp/chasen/distribution.html
+ #    - Its license terms and conditions are shown below.
+ #
+ #  ---------COPYING.libtabe ---- BEGIN--------------------
+ #
+ #  /*
+ #   * Copyright (c) 1999 TaBE Project.
+ #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
+ #   * All rights reserved.
+ #   *
+ #   * Redistribution and use in source and binary forms, with or without
+ #   * modification, are permitted provided that the following conditions
+ #   * are met:
+ #   *
+ #   * . Redistributions of source code must retain the above copyright
+ #   *   notice, this list of conditions and the following disclaimer.
+ #   * . Redistributions in binary form must reproduce the above copyright
+ #   *   notice, this list of conditions and the following disclaimer in
+ #   *   the documentation and/or other materials provided with the
+ #   *   distribution.
+ #   * . Neither the name of the TaBE Project nor the names of its
+ #   *   contributors may be used to endorse or promote products derived
+ #   *   from this software without specific prior written permission.
+ #   *
+ #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #   * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #   */
+ #
+ #  /*
+ #   * Copyright (c) 1999 Computer Systems and Communication Lab,
+ #   *                    Institute of Information Science, Academia
+ #       *                    Sinica. All rights reserved.
+ #   *
+ #   * Redistribution and use in source and binary forms, with or without
+ #   * modification, are permitted provided that the following conditions
+ #   * are met:
+ #   *
+ #   * . Redistributions of source code must retain the above copyright
+ #   *   notice, this list of conditions and the following disclaimer.
+ #   * . Redistributions in binary form must reproduce the above copyright
+ #   *   notice, this list of conditions and the following disclaimer in
+ #   *   the documentation and/or other materials provided with the
+ #   *   distribution.
+ #   * . Neither the name of the Computer Systems and Communication Lab
+ #   *   nor the names of its contributors may be used to endorse or
+ #   *   promote products derived from this software without specific
+ #   *   prior written permission.
+ #   *
+ #   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ #   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ #   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ #   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ #   * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ #   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ #   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ #   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ #   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ #   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ #   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ #   * OF THE POSSIBILITY OF SUCH DAMAGE.
+ #   */
+ #
+ #  Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
+ #      University of Illinois
+ #  c-tsai4@uiuc.edu  http://casper.beckman.uiuc.edu/~c-tsai4
+ #
+ #  ---------------COPYING.libtabe-----END--------------------------------
+ #
+ #
+ #  ---------------COPYING.ipadic-----BEGIN-------------------------------
+ #
+ #  Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
+ #  and Technology.  All Rights Reserved.
+ #
+ #  Use, reproduction, and distribution of this software is permitted.
+ #  Any copy of this software, whether in its original form or modified,
+ #  must include both the above copyright notice and the following
+ #  paragraphs.
+ #
+ #  Nara Institute of Science and Technology (NAIST),
+ #  the copyright holders, disclaims all warranties with regard to this
+ #  software, including all implied warranties of merchantability and
+ #  fitness, in no event shall NAIST be liable for
+ #  any special, indirect or consequential damages or any damages
+ #  whatsoever resulting from loss of use, data or profits, whether in an
+ #  action of contract, negligence or other tortuous action, arising out
+ #  of or in connection with the use or performance of this software.
+ #
+ #  A large portion of the dictionary entries
+ #  originate from ICOT Free Software.  The following conditions for ICOT
+ #  Free Software applies to the current dictionary as well.
+ #
+ #  Each User may also freely distribute the Program, whether in its
+ #  original form or modified, to any third party or parties, PROVIDED
+ #  that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+ #  on, or be attached to, the Program, which is distributed substantially
+ #  in the same form as set out herein and that such intended
+ #  distribution, if actually made, will neither violate or otherwise
+ #  contravene any of the laws and regulations of the countries having
+ #  jurisdiction over the User or the intended distribution itself.
+ #
+ #  NO WARRANTY
+ #
+ #  The program was produced on an experimental basis in the course of the
+ #  research and development conducted during the project and is provided
+ #  to users as so produced on an experimental basis.  Accordingly, the
+ #  program is provided without any warranty whatsoever, whether express,
+ #  implied, statutory or otherwise.  The term "warranty" used herein
+ #  includes, but is not limited to, any warranty of the quality,
+ #  performance, merchantability and fitness for a particular purpose of
+ #  the program and the nonexistence of any infringement or violation of
+ #  any right of any third party.
+ #
+ #  Each user of the program will agree and understand, and be deemed to
+ #  have agreed and understood, that there is no warranty whatsoever for
+ #  the program and, accordingly, the entire risk arising from or
+ #  otherwise connected with the program is assumed by the user.
+ #
+ #  Therefore, neither ICOT, the copyright holder, or any other
+ #  organization that participated in or was otherwise related to the
+ #  development of the program and their respective officials, directors,
+ #  officers and other employees shall be held liable for any and all
+ #  damages, including, without limitation, general, special, incidental
+ #  and consequential damages, arising out of or otherwise in connection
+ #  with the use or inability to use the program or any product, material
+ #  or result produced or otherwise obtained by using the program,
+ #  regardless of whether they have been advised of, or otherwise had
+ #  knowledge of, the possibility of such damages at any time during the
+ #  project or thereafter.  Each user will be deemed to have agreed to the
+ #  foregoing by his or her commencement of use of the program.  The term
+ #  "use" as used herein includes, but is not limited to, the use,
+ #  modification, copying and distribution of the program and the
+ #  production of secondary products from the program.
+ #
+ #  In the case where the program, whether in its original form or
+ #  modified, was distributed or delivered to or received by a user from
+ #  any person, organization or entity other than ICOT, unless it makes or
+ #  grants independently of ICOT any specific warranty to the user in
+ #  writing, such person, organization or entity, will also be exempted
+ #  from and not be held liable to the user for any such damages as noted
+ #  above as far as the program is concerned.
+ #
+ #  ---------------COPYING.ipadic-----END----------------------------------
+
+3. Lao Word Break Dictionary Data (laodict.txt)
+
+ #  Copyright (c) 2013 International Business Machines Corporation
+ #  and others. All Rights Reserved.
+ #
+ # Project: https://github.com/veer66/lao-dictionary
+ # Dictionary: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary.txt
+ # License: https://github.com/veer66/lao-dictionary/blob/master/Lao-Dictionary-LICENSE.txt
+ #              (copied below)
+ #
+ #  This file is derived from the above dictionary, with slight
+ #  modifications.
+ #  ----------------------------------------------------------------------
+ #  Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ #  modification,
+ #  are permitted provided that the following conditions are met:
+ #
+ #
+ # Redistributions of source code must retain the above copyright notice, this
+ #  list of conditions and the following disclaimer. Redistributions in
+ #  binary form must reproduce the above copyright notice, this list of
+ #  conditions and the following disclaimer in the documentation and/or
+ #  other materials provided with the distribution.
+ #
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # OF THE POSSIBILITY OF SUCH DAMAGE.
+ #  --------------------------------------------------------------------------
+
+4. Burmese Word Break Dictionary Data (burmesedict.txt)
+
+ #  Copyright (c) 2014 International Business Machines Corporation
+ #  and others. All Rights Reserved.
+ #
+ #  This list is part of a project hosted at:
+ #    github.com/kanyawtech/myanmar-karen-word-lists
+ #
+ #  --------------------------------------------------------------------------
+ #  Copyright (c) 2013, LeRoy Benjamin Sharon
+ #  All rights reserved.
+ #
+ #  Redistribution and use in source and binary forms, with or without
+ #  modification, are permitted provided that the following conditions
+ #  are met: Redistributions of source code must retain the above
+ #  copyright notice, this list of conditions and the following
+ #  disclaimer.  Redistributions in binary form must reproduce the
+ #  above copyright notice, this list of conditions and the following
+ #  disclaimer in the documentation and/or other materials provided
+ #  with the distribution.
+ #
+ #    Neither the name Myanmar Karen Word Lists, nor the names of its
+ #    contributors may be used to endorse or promote products derived
+ #    from this software without specific prior written permission.
+ #
+ #  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ #  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ #  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ #  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ #  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
+ #  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ #  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ #  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ #  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ #  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ #  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ #  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ #  SUCH DAMAGE.
+ #  --------------------------------------------------------------------------
+
+5. Time Zone Database
+
+  ICU uses the public domain data and code derived from Time Zone
+Database for its time zone support. The ownership of the TZ database
+is explained in BCP 175: Procedure for Maintaining the Time Zone
+Database section 7.
+
+ # 7.  Database Ownership
+ #
+ #    The TZ database itself is not an IETF Contribution or an IETF
+ #    document.  Rather it is a pre-existing and regularly updated work
+ #    that is in the public domain, and is intended to remain in the
+ #    public domain.  Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
+ #    not apply to the TZ Database or contributions that individuals make
+ #    to it.  Should any claims be made and substantiated against the TZ
+ #    Database, the organization that is providing the IANA
+ #    Considerations defined in this RFC, under the memorandum of
+ #    understanding with the IETF, currently ICANN, may act in accordance
+ #    with all competent court orders.  No ownership claims will be made
+ #    by ICANN or the IETF Trust on the database or the code.  Any person
+ #    making a contribution to the database or code waives all rights to
+ #    future claims in that contribution or in the TZ Database.
+
+6. Google double-conversion
+
+Copyright 2006-2011, the V8 project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+==============================================================================
+Copyright 2008 Google Inc.  All rights reserved.
+
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
 met:
@@ -7087,198 +20538,679 @@
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-============================================================
-Notices for file(s):
-/lib64/libbz.so
-------------------------------------------------------------
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
 
---------------------------------------------------------------------------
+==============================================================================
+2001 September 15
 
-This program, "bzip2", the associated library "libbzip2", and all
-documentation, are copyright (C) 1996-2010 Julian R Seward.  All
-rights reserved.
+The author disclaims copyright to this source code.  In place of
+a legal notice, here is a blessing:
+
+   May you do good and not evil.
+   May you find forgiveness for yourself and forgive others.
+   May you share freely, never taking more than you give.
+
+
+==============================================================================
+
+   Copyright (c) 2010, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+==============================================================================
+
+   Copyright (c) 2005-2019, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+==============================================================================
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+Copyright 2010 The Chromium Authors. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
+modification, are permitted provided that the following conditions are
+met:
 
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
 
-2. The origin of this software must not be misrepresented; you must 
-   not claim that you wrote the original software.  If you use this 
-   software in a product, an acknowledgment in the product 
-   documentation would be appreciated but is not required.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-3. Altered source versions must be plainly marked as such, and must
-   not be misrepresented as being the original software.
+==============================================================================
+version 1.2.12, March 27th, 2022
 
-4. The name of the author may not be used to endorse or promote 
-   products derived from this software without specific prior written 
-   permission.
+Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler
 
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
-OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
-GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+This software is provided 'as-is', without any express or implied
+warranty.  In no event will the authors be held liable for any damages
+arising from the use of this software.
 
-Julian Seward, jseward@bzip.org
-bzip2/libbzip2 version 1.0.6 of 6 September 2010
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
 
---------------------------------------------------------------------------
+1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
 
-============================================================
-Notices for file(s):
-/lib64/libpcre2.so
-------------------------------------------------------------
-PCRE LICENCE
-------------
+==============================================================================
+BSD License
 
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
+For Zstandard software
 
-Release 8 of PCRE is distributed under the terms of the "BSD" licence, as
-specified below. The documentation for PCRE, supplied in the "doc"
-directory, is distributed under the same terms as the software itself.
-
-The basic library functions are written in C and are freestanding. Also
-included in the distribution is a set of C++ wrapper functions, and a
-just-in-time compiler that can be used to optimize pattern matching. These
-are both optional features that can be omitted when the library is built.
-
-
-THE BASIC LIBRARY FUNCTIONS
----------------------------
-
-Written by:       Philip Hazel
-Email local part: ph10
-Email domain:     cam.ac.uk
-
-University of Cambridge Computing Service,
-Cambridge, England.
-
-Copyright (c) 1997-2014 University of Cambridge
-All rights reserved.
-
-
-PCRE JUST-IN-TIME COMPILATION SUPPORT
--------------------------------------
-
-Written by:       Zoltan Herczeg
-Email local part: hzmester
-Emain domain:     freemail.hu
-
-Copyright(c) 2010-2014 Zoltan Herczeg
-All rights reserved.
-
-
-STACK-LESS JUST-IN-TIME COMPILER
---------------------------------
-
-Written by:       Zoltan Herczeg
-Email local part: hzmester
-Emain domain:     freemail.hu
-
-Copyright(c) 2009-2014 Zoltan Herczeg
-All rights reserved.
-
-
-THE C++ WRAPPER FUNCTIONS
--------------------------
-
-Contributed by:   Google Inc.
-
-Copyright (c) 2007-2012, Google Inc.
-All rights reserved.
-
-
-THE "BSD" LICENCE
------------------
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the name of Google
-      Inc. nor the names of their contributors may be used to endorse or
-      promote products derived from this software without specific prior
-      written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-End
-
-============================================================
-Notices for file(s):
-/lib64/libtinyalsa.so
-------------------------------------------------------------
-Copyright 2011, The Android Open Source Project
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of The Android Open Source Project nor the names of
-      its contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY The Android Open Source Project ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL The Android Open Source Project BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-
-============================================================
-Notices for file(s):
-/lib/liblz4.so
-/lib64/liblz4.so
-------------------------------------------------------------
-LZ4 Library
-Copyright (c) 2011-2016, Yann Collet
-All rights reserved.
+Copyright (c) Meta Platforms, Inc. and affiliates. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without modification,
 are permitted provided that the following conditions are met:
 
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
+ * Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
 
-* Redistributions in binary form must reproduce the above copyright notice, this
-  list of conditions and the following disclaimer in the documentation and/or
-  other materials provided with the distribution.
+ * Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ * Neither the name Facebook, nor Meta, nor the names of its contributors may
+   be used to endorse or promote products derived from this software without
+   specific prior written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -7291,229 +21223,343 @@
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-============================================================
-Notices for file(s):
-/usr/share/zoneinfo/tzdata
-------------------------------------------------------------
-With a few exceptions, all files in the tz code and data (including
-this one) are in the public domain.  The exceptions are date.c,
-newstrftime.3, and strftime.c, which contain material derived from BSD
-and which use the BSD 3-clause license.
+==============================================================================
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
 
-============================================================
-Notices for file(s):
-/lib64/libcurl-host.so
-------------------------------------------------------------
-COPYRIGHT AND PERMISSION NOTICE
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
 
-Copyright (c) 1996 - 2018, Daniel Stenberg, <daniel@haxx.se>, and many
-contributors, see the THANKS file.
+                            Preamble
 
-All rights reserved.
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
 
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies.
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
 
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization of the copyright holder.
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
 
-============================================================
-Notices for file(s):
-/framework/bouncycastle.jar
-------------------------------------------------------------
-Copyright (c) 2000-2015 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org)
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
 
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
 
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+  The precise terms and conditions for copying, distribution and
+modification follow.
 
-============================================================
-Notices for file(s):
-/lib/libcrypto-host.so
-/lib/libssl-host.so
-/lib64/libcrypto-host.so
-/lib64/libssl-host.so
-------------------------------------------------------------
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
-  LICENSE ISSUES
-  ==============
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
 
-  The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
-  the OpenSSL License and the original SSLeay license apply to the toolkit.
-  See below for the actual license texts. Actually both licenses are BSD-style
-  Open Source licenses. In case of any license issues related to OpenSSL
-  please contact openssl-core@openssl.org.
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
 
-  OpenSSL License
-  ---------------
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
 
-/* ====================================================================
- * Copyright (c) 1998-2011 The OpenSSL Project.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- *    software must display the following acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- *    endorse or promote products derived from this software without
- *    prior written permission. For written permission, please contact
- *    openssl-core@openssl.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- *    nor may "OpenSSL" appear in their names without prior written
- *    permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- *    acknowledgment:
- *    "This product includes software developed by the OpenSSL Project
- *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com).  This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
 
- Original SSLeay License
- -----------------------
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
 
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- * 
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to.  The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- * 
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *    "This product includes cryptographic software written by
- *     Eric Young (eay@cryptsoft.com)"
- *    The word 'cryptographic' can be left out if the rouines from the library
- *    being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from 
- *    the apps directory (application code) you must include an acknowledgement:
- *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- * 
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed.  i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
 
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
 
-============================================================
-Notices for file(s):
-/lib64/libbrillo-stream.so
-/lib64/libbrillo.so
-/lib64/libminijail.so
-------------------------------------------------------------
-// Copyright 2014 The Chromium OS Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
 
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/adb b/adb
index afa4cd8..980ed5f 100755
--- a/adb
+++ b/adb
Binary files differ
diff --git a/api/annotations.zip b/api/annotations.zip
deleted file mode 100644
index 9a44ebb..0000000
--- a/api/annotations.zip
+++ /dev/null
Binary files differ
diff --git a/api/api-versions.xml b/api/api-versions.xml
deleted file mode 100644
index 5f010bf..0000000
--- a/api/api-versions.xml
+++ /dev/null
@@ -1,78714 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<api version="2">
-	<class name="android/Manifest" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/Manifest$permission" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACCEPT_HANDOVER" since="28"/>
-		<field name="ACCESS_CHECKIN_PROPERTIES"/>
-		<field name="ACCESS_COARSE_LOCATION"/>
-		<field name="ACCESS_FINE_LOCATION"/>
-		<field name="ACCESS_LOCATION_EXTRA_COMMANDS"/>
-		<field name="ACCESS_MOCK_LOCATION" removed="23"/>
-		<field name="ACCESS_NETWORK_STATE"/>
-		<field name="ACCESS_NOTIFICATION_POLICY" since="23"/>
-		<field name="ACCESS_SURFACE_FLINGER" removed="23"/>
-		<field name="ACCESS_WIFI_STATE"/>
-		<field name="ACCOUNT_MANAGER" since="5"/>
-		<field name="ADD_SYSTEM_SERVICE" removed="4"/>
-		<field name="ADD_VOICEMAIL" since="14"/>
-		<field name="ANSWER_PHONE_CALLS" since="26"/>
-		<field name="AUTHENTICATE_ACCOUNTS" since="5" removed="23"/>
-		<field name="BATTERY_STATS"/>
-		<field name="BIND_ACCESSIBILITY_SERVICE" since="16"/>
-		<field name="BIND_APPWIDGET" since="3"/>
-		<field name="BIND_AUTOFILL_SERVICE" since="26"/>
-		<field name="BIND_CARRIER_MESSAGING_SERVICE" since="22" deprecated="23"/>
-		<field name="BIND_CARRIER_SERVICES" since="23"/>
-		<field name="BIND_CHOOSER_TARGET_SERVICE" since="23"/>
-		<field name="BIND_CONDITION_PROVIDER_SERVICE" since="24"/>
-		<field name="BIND_DEVICE_ADMIN" since="8"/>
-		<field name="BIND_DREAM_SERVICE" since="21"/>
-		<field name="BIND_INCALL_SERVICE" since="23"/>
-		<field name="BIND_INPUT_METHOD" since="3"/>
-		<field name="BIND_MIDI_DEVICE_SERVICE" since="23"/>
-		<field name="BIND_NFC_SERVICE" since="19"/>
-		<field name="BIND_NOTIFICATION_LISTENER_SERVICE" since="18"/>
-		<field name="BIND_PRINT_SERVICE" since="19"/>
-		<field name="BIND_QUICK_SETTINGS_TILE" since="24"/>
-		<field name="BIND_REMOTEVIEWS" since="11"/>
-		<field name="BIND_SCREENING_SERVICE" since="24"/>
-		<field name="BIND_TELECOM_CONNECTION_SERVICE" since="23"/>
-		<field name="BIND_TEXT_SERVICE" since="14"/>
-		<field name="BIND_TV_INPUT" since="21"/>
-		<field name="BIND_VISUAL_VOICEMAIL_SERVICE" since="26"/>
-		<field name="BIND_VOICE_INTERACTION" since="21"/>
-		<field name="BIND_VPN_SERVICE" since="14"/>
-		<field name="BIND_VR_LISTENER_SERVICE" since="24"/>
-		<field name="BIND_WALLPAPER" since="8"/>
-		<field name="BLUETOOTH"/>
-		<field name="BLUETOOTH_ADMIN"/>
-		<field name="BLUETOOTH_PRIVILEGED" since="19"/>
-		<field name="BODY_SENSORS" since="20"/>
-		<field name="BRICK" removed="23"/>
-		<field name="BROADCAST_PACKAGE_REMOVED"/>
-		<field name="BROADCAST_SMS" since="2"/>
-		<field name="BROADCAST_STICKY"/>
-		<field name="BROADCAST_WAP_PUSH" since="2"/>
-		<field name="CALL_PHONE"/>
-		<field name="CALL_PRIVILEGED"/>
-		<field name="CAMERA"/>
-		<field name="CAPTURE_AUDIO_OUTPUT" since="19"/>
-		<field name="CAPTURE_SECURE_VIDEO_OUTPUT" since="19"/>
-		<field name="CAPTURE_VIDEO_OUTPUT" since="19"/>
-		<field name="CHANGE_COMPONENT_ENABLED_STATE"/>
-		<field name="CHANGE_CONFIGURATION"/>
-		<field name="CHANGE_NETWORK_STATE"/>
-		<field name="CHANGE_WIFI_MULTICAST_STATE" since="4"/>
-		<field name="CHANGE_WIFI_STATE"/>
-		<field name="CLEAR_APP_CACHE"/>
-		<field name="CLEAR_APP_USER_DATA" removed="23"/>
-		<field name="CONTROL_LOCATION_UPDATES"/>
-		<field name="DELETE_CACHE_FILES"/>
-		<field name="DELETE_PACKAGES"/>
-		<field name="DEVICE_POWER" removed="23"/>
-		<field name="DIAGNOSTIC"/>
-		<field name="DISABLE_KEYGUARD"/>
-		<field name="DUMP"/>
-		<field name="EXPAND_STATUS_BAR"/>
-		<field name="FACTORY_TEST"/>
-		<field name="FLASHLIGHT" removed="24"/>
-		<field name="FORCE_BACK" removed="23"/>
-		<field name="FOREGROUND_SERVICE" since="28"/>
-		<field name="FOTA_UPDATE" removed="4"/>
-		<field name="GET_ACCOUNTS"/>
-		<field name="GET_ACCOUNTS_PRIVILEGED" since="23"/>
-		<field name="GET_PACKAGE_SIZE"/>
-		<field name="GET_TASKS" deprecated="21"/>
-		<field name="GET_TOP_ACTIVITY_INFO" since="18" removed="23"/>
-		<field name="GLOBAL_SEARCH" since="4"/>
-		<field name="HARDWARE_TEST" removed="23"/>
-		<field name="INJECT_EVENTS" removed="23"/>
-		<field name="INSTALL_LOCATION_PROVIDER" since="4"/>
-		<field name="INSTALL_PACKAGES"/>
-		<field name="INSTALL_SHORTCUT" since="19"/>
-		<field name="INSTANT_APP_FOREGROUND_SERVICE" since="26"/>
-		<field name="INTERNAL_SYSTEM_WINDOW" removed="23"/>
-		<field name="INTERNET"/>
-		<field name="KILL_BACKGROUND_PROCESSES" since="8"/>
-		<field name="LOCATION_HARDWARE" since="18"/>
-		<field name="MANAGE_ACCOUNTS" since="5" removed="23"/>
-		<field name="MANAGE_APP_TOKENS" removed="23"/>
-		<field name="MANAGE_DOCUMENTS" since="19"/>
-		<field name="MANAGE_OWN_CALLS" since="26"/>
-		<field name="MASTER_CLEAR"/>
-		<field name="MEDIA_CONTENT_CONTROL" since="19"/>
-		<field name="MODIFY_AUDIO_SETTINGS"/>
-		<field name="MODIFY_PHONE_STATE"/>
-		<field name="MOUNT_FORMAT_FILESYSTEMS" since="3"/>
-		<field name="MOUNT_UNMOUNT_FILESYSTEMS"/>
-		<field name="NFC" since="9"/>
-		<field name="NFC_TRANSACTION_EVENT" since="28"/>
-		<field name="PACKAGE_USAGE_STATS" since="23"/>
-		<field name="PERSISTENT_ACTIVITY" deprecated="16"/>
-		<field name="PROCESS_OUTGOING_CALLS"/>
-		<field name="READ_CALENDAR"/>
-		<field name="READ_CALL_LOG" since="16"/>
-		<field name="READ_CONTACTS"/>
-		<field name="READ_EXTERNAL_STORAGE" since="16"/>
-		<field name="READ_FRAME_BUFFER"/>
-		<field name="READ_HISTORY_BOOKMARKS" since="4" removed="23"/>
-		<field name="READ_INPUT_STATE" deprecated="16"/>
-		<field name="READ_LOGS"/>
-		<field name="READ_OWNER_DATA" removed="9"/>
-		<field name="READ_PHONE_NUMBERS" since="26"/>
-		<field name="READ_PHONE_STATE"/>
-		<field name="READ_PROFILE" since="14" removed="23"/>
-		<field name="READ_SMS"/>
-		<field name="READ_SOCIAL_STREAM" since="15" deprecated="21" removed="23"/>
-		<field name="READ_SYNC_SETTINGS"/>
-		<field name="READ_SYNC_STATS"/>
-		<field name="READ_USER_DICTIONARY" since="16" removed="23"/>
-		<field name="READ_VOICEMAIL" since="21"/>
-		<field name="REBOOT"/>
-		<field name="RECEIVE_BOOT_COMPLETED"/>
-		<field name="RECEIVE_MMS"/>
-		<field name="RECEIVE_SMS"/>
-		<field name="RECEIVE_WAP_PUSH"/>
-		<field name="RECORD_AUDIO"/>
-		<field name="REORDER_TASKS"/>
-		<field name="REQUEST_COMPANION_RUN_IN_BACKGROUND" since="26"/>
-		<field name="REQUEST_COMPANION_USE_DATA_IN_BACKGROUND" since="26"/>
-		<field name="REQUEST_DELETE_PACKAGES" since="26"/>
-		<field name="REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23"/>
-		<field name="REQUEST_INSTALL_PACKAGES" since="23"/>
-		<field name="RESTART_PACKAGES" deprecated="16"/>
-		<field name="SEND_RESPOND_VIA_MESSAGE" since="18"/>
-		<field name="SEND_SMS"/>
-		<field name="SET_ACTIVITY_WATCHER" removed="23"/>
-		<field name="SET_ALARM" since="9"/>
-		<field name="SET_ALWAYS_FINISH"/>
-		<field name="SET_ANIMATION_SCALE"/>
-		<field name="SET_DEBUG_APP"/>
-		<field name="SET_ORIENTATION" removed="23"/>
-		<field name="SET_POINTER_SPEED" since="13" removed="23"/>
-		<field name="SET_PREFERRED_APPLICATIONS" deprecated="16"/>
-		<field name="SET_PROCESS_FOREGROUND" removed="4"/>
-		<field name="SET_PROCESS_LIMIT"/>
-		<field name="SET_TIME" since="8"/>
-		<field name="SET_TIME_ZONE"/>
-		<field name="SET_WALLPAPER"/>
-		<field name="SET_WALLPAPER_HINTS"/>
-		<field name="SIGNAL_PERSISTENT_PROCESSES"/>
-		<field name="STATUS_BAR"/>
-		<field name="SUBSCRIBED_FEEDS_READ" removed="23"/>
-		<field name="SUBSCRIBED_FEEDS_WRITE" removed="23"/>
-		<field name="SYSTEM_ALERT_WINDOW"/>
-		<field name="TRANSMIT_IR" since="19"/>
-		<field name="UNINSTALL_SHORTCUT" since="19"/>
-		<field name="UPDATE_DEVICE_STATS" since="3"/>
-		<field name="USE_BIOMETRIC" since="28"/>
-		<field name="USE_CREDENTIALS" since="5" removed="23"/>
-		<field name="USE_FINGERPRINT" since="23" deprecated="28"/>
-		<field name="USE_SIP" since="9"/>
-		<field name="VIBRATE"/>
-		<field name="WAKE_LOCK"/>
-		<field name="WRITE_APN_SETTINGS"/>
-		<field name="WRITE_CALENDAR"/>
-		<field name="WRITE_CALL_LOG" since="16"/>
-		<field name="WRITE_CONTACTS"/>
-		<field name="WRITE_EXTERNAL_STORAGE" since="4"/>
-		<field name="WRITE_GSERVICES"/>
-		<field name="WRITE_HISTORY_BOOKMARKS" since="4" removed="23"/>
-		<field name="WRITE_OWNER_DATA" removed="9"/>
-		<field name="WRITE_PROFILE" since="14" removed="23"/>
-		<field name="WRITE_SECURE_SETTINGS" since="3"/>
-		<field name="WRITE_SETTINGS"/>
-		<field name="WRITE_SMS" removed="23"/>
-		<field name="WRITE_SOCIAL_STREAM" since="15" deprecated="21" removed="23"/>
-		<field name="WRITE_SYNC_SETTINGS"/>
-		<field name="WRITE_USER_DICTIONARY" since="16" removed="23"/>
-		<field name="WRITE_VOICEMAIL" since="21"/>
-	</class>
-	<class name="android/Manifest$permission_group" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACCESSIBILITY_FEATURES" since="18" removed="23"/>
-		<field name="ACCOUNTS" removed="23"/>
-		<field name="AFFECTS_BATTERY" since="17" removed="23"/>
-		<field name="APP_INFO" since="17" removed="23"/>
-		<field name="AUDIO_SETTINGS" since="17" removed="23"/>
-		<field name="BLUETOOTH_NETWORK" since="17" removed="23"/>
-		<field name="BOOKMARKS" since="17" removed="23"/>
-		<field name="CALENDAR" since="17"/>
-		<field name="CALL_LOG" since="29"/>
-		<field name="CAMERA" since="17"/>
-		<field name="CONTACTS" since="23"/>
-		<field name="COST_MONEY" removed="23"/>
-		<field name="DEVELOPMENT_TOOLS" removed="23"/>
-		<field name="DEVICE_ALARMS" since="17" removed="23"/>
-		<field name="DISPLAY" since="17" removed="23"/>
-		<field name="HARDWARE_CONTROLS" removed="23"/>
-		<field name="LOCATION"/>
-		<field name="MESSAGES" removed="23"/>
-		<field name="MICROPHONE" since="17"/>
-		<field name="NETWORK" removed="23"/>
-		<field name="PERSONAL_INFO" removed="23"/>
-		<field name="PHONE" since="23"/>
-		<field name="PHONE_CALLS" removed="23"/>
-		<field name="SCREENLOCK" since="17" removed="23"/>
-		<field name="SENSORS" since="23"/>
-		<field name="SMS" since="23"/>
-		<field name="SOCIAL_INFO" since="17" removed="23"/>
-		<field name="STATUS_BAR" since="17" removed="23"/>
-		<field name="STORAGE" since="4"/>
-		<field name="SYNC_SETTINGS" since="17" removed="23"/>
-		<field name="SYSTEM_CLOCK" since="17" removed="23"/>
-		<field name="SYSTEM_TOOLS" removed="23"/>
-		<field name="USER_DICTIONARY" since="17" removed="23"/>
-		<field name="VOICEMAIL" since="17" removed="23"/>
-		<field name="WALLPAPER" since="17" removed="23"/>
-		<field name="WRITE_USER_DICTIONARY" since="17" removed="23"/>
-	</class>
-	<class name="android/R" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/R$anim" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="accelerate_decelerate_interpolator"/>
-		<field name="accelerate_interpolator"/>
-		<field name="anticipate_interpolator" since="4"/>
-		<field name="anticipate_overshoot_interpolator" since="4"/>
-		<field name="bounce_interpolator" since="4"/>
-		<field name="cycle_interpolator" since="8"/>
-		<field name="decelerate_interpolator"/>
-		<field name="fade_in"/>
-		<field name="fade_out"/>
-		<field name="linear_interpolator" since="4"/>
-		<field name="overshoot_interpolator" since="4"/>
-		<field name="slide_in_left"/>
-		<field name="slide_out_right"/>
-	</class>
-	<class name="android/R$animator" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="fade_in"/>
-		<field name="fade_out"/>
-	</class>
-	<class name="android/R$array" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="emailAddressTypes"/>
-		<field name="imProtocols"/>
-		<field name="organizationTypes"/>
-		<field name="phoneTypes"/>
-		<field name="postalAddressTypes"/>
-	</class>
-	<class name="android/R$attr" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="absListViewStyle"/>
-		<field name="accessibilityEventTypes" since="14"/>
-		<field name="accessibilityFeedbackType" since="14"/>
-		<field name="accessibilityFlags" since="14"/>
-		<field name="accessibilityHeading" since="28"/>
-		<field name="accessibilityLiveRegion" since="19"/>
-		<field name="accessibilityPaneTitle" since="28"/>
-		<field name="accessibilityTraversalAfter" since="22"/>
-		<field name="accessibilityTraversalBefore" since="22"/>
-		<field name="accountPreferences" since="5"/>
-		<field name="accountType" since="5"/>
-		<field name="action"/>
-		<field name="actionBarDivider" since="14"/>
-		<field name="actionBarItemBackground" since="14"/>
-		<field name="actionBarPopupTheme" since="21"/>
-		<field name="actionBarSize" since="11"/>
-		<field name="actionBarSplitStyle" since="14"/>
-		<field name="actionBarStyle" since="11"/>
-		<field name="actionBarTabBarStyle" since="11"/>
-		<field name="actionBarTabStyle" since="11"/>
-		<field name="actionBarTabTextStyle" since="11"/>
-		<field name="actionBarTheme" since="21"/>
-		<field name="actionBarWidgetTheme" since="14"/>
-		<field name="actionButtonStyle" since="11"/>
-		<field name="actionDropDownStyle" since="11"/>
-		<field name="actionLayout" since="11"/>
-		<field name="actionMenuTextAppearance" since="11"/>
-		<field name="actionMenuTextColor" since="11"/>
-		<field name="actionModeBackground" since="11"/>
-		<field name="actionModeCloseButtonStyle" since="11"/>
-		<field name="actionModeCloseDrawable" since="11"/>
-		<field name="actionModeCopyDrawable" since="11"/>
-		<field name="actionModeCutDrawable" since="11"/>
-		<field name="actionModeFindDrawable" since="21"/>
-		<field name="actionModePasteDrawable" since="11"/>
-		<field name="actionModeSelectAllDrawable" since="14"/>
-		<field name="actionModeShareDrawable" since="21"/>
-		<field name="actionModeSplitBackground" since="14"/>
-		<field name="actionModeStyle" since="14"/>
-		<field name="actionModeWebSearchDrawable" since="21"/>
-		<field name="actionOverflowButtonStyle" since="11"/>
-		<field name="actionOverflowMenuStyle" since="21"/>
-		<field name="actionProviderClass" since="14"/>
-		<field name="actionViewClass" since="11"/>
-		<field name="activatedBackgroundIndicator" since="11"/>
-		<field name="activityCloseEnterAnimation"/>
-		<field name="activityCloseExitAnimation"/>
-		<field name="activityOpenEnterAnimation"/>
-		<field name="activityOpenExitAnimation"/>
-		<field name="addPrintersActivity" since="19"/>
-		<field name="addStatesFromChildren"/>
-		<field name="adjustViewBounds"/>
-		<field name="advancedPrintOptionsActivity" since="19"/>
-		<field name="alertDialogIcon" since="11"/>
-		<field name="alertDialogStyle"/>
-		<field name="alertDialogTheme" since="11"/>
-		<field name="alignmentMode" since="14"/>
-		<field name="allContactsName" since="11"/>
-		<field name="allowBackup" since="4"/>
-		<field name="allowClearUserData"/>
-		<field name="allowEmbedded" since="20"/>
-		<field name="allowParallelSyncs" since="11"/>
-		<field name="allowSingleTap" since="3"/>
-		<field name="allowTaskReparenting"/>
-		<field name="allowUndo" since="23"/>
-		<field name="alpha" since="11"/>
-		<field name="alphabeticModifiers" since="26"/>
-		<field name="alphabeticShortcut"/>
-		<field name="alwaysDrawnWithCache"/>
-		<field name="alwaysRetainTaskState"/>
-		<field name="amPmBackgroundColor" since="21" deprecated="23"/>
-		<field name="amPmTextColor" since="21" deprecated="23"/>
-		<field name="ambientShadowAlpha" since="21"/>
-		<field name="angle"/>
-		<field name="animateFirstView" since="11"/>
-		<field name="animateLayoutChanges" since="11"/>
-		<field name="animateOnClick" since="3"/>
-		<field name="animation"/>
-		<field name="animationCache"/>
-		<field name="animationDuration"/>
-		<field name="animationOrder"/>
-		<field name="animationResolution" since="11" deprecated="16"/>
-		<field name="antialias"/>
-		<field name="anyDensity" since="4"/>
-		<field name="apduServiceBanner" since="19"/>
-		<field name="apiKey"/>
-		<field name="appCategory" since="26"/>
-		<field name="appComponentFactory" since="28"/>
-		<field name="author" since="7"/>
-		<field name="authorities"/>
-		<field name="autoAdvanceViewId" since="11"/>
-		<field name="autoCompleteTextViewStyle"/>
-		<field name="autoLink"/>
-		<field name="autoMirrored" since="19"/>
-		<field name="autoRemoveFromRecents" since="21"/>
-		<field name="autoSizeMaxTextSize" since="26"/>
-		<field name="autoSizeMinTextSize" since="26"/>
-		<field name="autoSizePresetSizes" since="26"/>
-		<field name="autoSizeStepGranularity" since="26"/>
-		<field name="autoSizeTextType" since="26"/>
-		<field name="autoStart" since="7"/>
-		<field name="autoText" deprecated="16"/>
-		<field name="autoUrlDetect" since="4"/>
-		<field name="autoVerify" since="23"/>
-		<field name="autofillHints" since="26"/>
-		<field name="autofilledHighlight" since="26"/>
-		<field name="background"/>
-		<field name="backgroundDimAmount"/>
-		<field name="backgroundDimEnabled" since="3"/>
-		<field name="backgroundSplit" since="14"/>
-		<field name="backgroundStacked" since="14"/>
-		<field name="backgroundTint" since="21"/>
-		<field name="backgroundTintMode" since="21"/>
-		<field name="backupAgent" since="4"/>
-		<field name="backupInForeground" since="24"/>
-		<field name="banner" since="21"/>
-		<field name="baseline" since="11"/>
-		<field name="baselineAlignBottom"/>
-		<field name="baselineAligned"/>
-		<field name="baselineAlignedChildIndex"/>
-		<field name="bitmap" since="24"/>
-		<field name="borderlessButtonStyle" since="11"/>
-		<field name="bottom"/>
-		<field name="bottomBright"/>
-		<field name="bottomDark"/>
-		<field name="bottomLeftRadius"/>
-		<field name="bottomMedium"/>
-		<field name="bottomOffset" since="3"/>
-		<field name="bottomRightRadius"/>
-		<field name="breadCrumbShortTitle" since="11"/>
-		<field name="breadCrumbTitle" since="11"/>
-		<field name="breakStrategy" since="23"/>
-		<field name="bufferType"/>
-		<field name="button"/>
-		<field name="buttonBarButtonStyle" since="11"/>
-		<field name="buttonBarNegativeButtonStyle" since="21"/>
-		<field name="buttonBarNeutralButtonStyle" since="21"/>
-		<field name="buttonBarPositiveButtonStyle" since="21"/>
-		<field name="buttonBarStyle" since="11"/>
-		<field name="buttonCornerRadius" since="28"/>
-		<field name="buttonGravity" since="24"/>
-		<field name="buttonStyle"/>
-		<field name="buttonStyleInset"/>
-		<field name="buttonStyleSmall"/>
-		<field name="buttonStyleToggle"/>
-		<field name="buttonTint" since="21"/>
-		<field name="buttonTintMode" since="21"/>
-		<field name="cacheColorHint"/>
-		<field name="calendarTextColor" since="21"/>
-		<field name="calendarViewShown" since="11"/>
-		<field name="calendarViewStyle" since="11"/>
-		<field name="canControlMagnification" since="24"/>
-		<field name="canPerformGestures" since="24"/>
-		<field name="canRecord" since="24"/>
-		<field name="canRequestEnhancedWebAccessibility" since="18" deprecated="26"/>
-		<field name="canRequestFilterKeyEvents" since="18"/>
-		<field name="canRequestFingerprintGestures" since="26"/>
-		<field name="canRequestTouchExplorationMode" since="18"/>
-		<field name="canRetrieveWindowContent" since="14"/>
-		<field name="candidatesTextStyleSpans" since="3"/>
-		<field name="cantSaveState" since="28"/>
-		<field name="capitalize" deprecated="16"/>
-		<field name="category" since="19"/>
-		<field name="centerBright"/>
-		<field name="centerColor"/>
-		<field name="centerDark"/>
-		<field name="centerMedium"/>
-		<field name="centerX"/>
-		<field name="centerY"/>
-		<field name="certDigest" since="26"/>
-		<field name="checkBoxPreferenceStyle"/>
-		<field name="checkMark"/>
-		<field name="checkMarkTint" since="21"/>
-		<field name="checkMarkTintMode" since="21"/>
-		<field name="checkable"/>
-		<field name="checkableBehavior"/>
-		<field name="checkboxStyle"/>
-		<field name="checked"/>
-		<field name="checkedButton"/>
-		<field name="checkedTextViewStyle" since="17"/>
-		<field name="childDivider"/>
-		<field name="childIndicator"/>
-		<field name="childIndicatorEnd" since="18"/>
-		<field name="childIndicatorLeft"/>
-		<field name="childIndicatorRight"/>
-		<field name="childIndicatorStart" since="18"/>
-		<field name="choiceMode"/>
-		<field name="classLoader" since="27"/>
-		<field name="clearTaskOnLaunch"/>
-		<field name="clickable"/>
-		<field name="clipChildren"/>
-		<field name="clipOrientation"/>
-		<field name="clipToPadding"/>
-		<field name="closeIcon" since="21"/>
-		<field name="codes" since="3"/>
-		<field name="collapseColumns"/>
-		<field name="collapseContentDescription" since="22"/>
-		<field name="collapseIcon" since="24"/>
-		<field name="color"/>
-		<field name="colorAccent" since="21"/>
-		<field name="colorActivatedHighlight" since="14"/>
-		<field name="colorBackground"/>
-		<field name="colorBackgroundCacheHint" since="5"/>
-		<field name="colorBackgroundFloating" since="23"/>
-		<field name="colorButtonNormal" since="21"/>
-		<field name="colorControlActivated" since="21"/>
-		<field name="colorControlHighlight" since="21"/>
-		<field name="colorControlNormal" since="21"/>
-		<field name="colorEdgeEffect" since="21"/>
-		<field name="colorError" since="26"/>
-		<field name="colorFocusedHighlight" since="14"/>
-		<field name="colorForeground"/>
-		<field name="colorForegroundInverse"/>
-		<field name="colorLongPressedHighlight" since="14"/>
-		<field name="colorMode" since="26"/>
-		<field name="colorMultiSelectHighlight" since="14"/>
-		<field name="colorPressedHighlight" since="14"/>
-		<field name="colorPrimary" since="21"/>
-		<field name="colorPrimaryDark" since="21"/>
-		<field name="colorSecondary" since="25"/>
-		<field name="columnCount" since="14"/>
-		<field name="columnDelay"/>
-		<field name="columnOrderPreserved" since="14"/>
-		<field name="columnWidth"/>
-		<field name="commitIcon" since="21"/>
-		<field name="compatibleWidthLimitDp" since="13"/>
-		<field name="completionHint"/>
-		<field name="completionHintView"/>
-		<field name="completionThreshold"/>
-		<field name="configChanges"/>
-		<field name="configure" since="3"/>
-		<field name="constantSize"/>
-		<field name="content" since="3"/>
-		<field name="contentAgeHint" since="21"/>
-		<field name="contentAuthority" since="5"/>
-		<field name="contentDescription" since="4"/>
-		<field name="contentInsetEnd" since="21"/>
-		<field name="contentInsetEndWithActions" since="24"/>
-		<field name="contentInsetLeft" since="21"/>
-		<field name="contentInsetRight" since="21"/>
-		<field name="contentInsetStart" since="21"/>
-		<field name="contentInsetStartWithNavigation" since="24"/>
-		<field name="contextClickable" since="23"/>
-		<field name="contextDescription" since="25"/>
-		<field name="contextPopupMenuStyle" since="24"/>
-		<field name="contextUri" since="25"/>
-		<field name="controlX1" since="21"/>
-		<field name="controlX2" since="21"/>
-		<field name="controlY1" since="21"/>
-		<field name="controlY2" since="21"/>
-		<field name="countDown" since="24"/>
-		<field name="country" since="21"/>
-		<field name="cropToPadding"/>
-		<field name="cursorVisible"/>
-		<field name="customNavigationLayout" since="11"/>
-		<field name="customTokens" since="11"/>
-		<field name="cycles"/>
-		<field name="dashGap"/>
-		<field name="dashWidth"/>
-		<field name="data"/>
-		<field name="datePickerDialogTheme" since="21"/>
-		<field name="datePickerMode" since="21"/>
-		<field name="datePickerStyle" since="11"/>
-		<field name="dateTextAppearance" since="11"/>
-		<field name="dayOfWeekBackground" since="21" deprecated="23"/>
-		<field name="dayOfWeekTextAppearance" since="21" deprecated="23"/>
-		<field name="debuggable"/>
-		<field name="defaultFocusHighlightEnabled" since="26"/>
-		<field name="defaultHeight" since="24"/>
-		<field name="defaultToDeviceProtectedStorage" since="24"/>
-		<field name="defaultValue"/>
-		<field name="defaultWidth" since="24"/>
-		<field name="delay"/>
-		<field name="dependency"/>
-		<field name="descendantFocusability"/>
-		<field name="description"/>
-		<field name="detachWallpaper" since="5"/>
-		<field name="detailColumn" since="5"/>
-		<field name="detailSocialSummary" since="5"/>
-		<field name="detailsElementBackground" since="11"/>
-		<field name="dial"/>
-		<field name="dialogCornerRadius" since="28"/>
-		<field name="dialogIcon"/>
-		<field name="dialogLayout"/>
-		<field name="dialogMessage"/>
-		<field name="dialogPreferenceStyle"/>
-		<field name="dialogPreferredPadding" since="22"/>
-		<field name="dialogTheme" since="11"/>
-		<field name="dialogTitle"/>
-		<field name="digits"/>
-		<field name="directBootAware" since="24"/>
-		<field name="direction"/>
-		<field name="directionDescriptions" since="14" deprecated="23"/>
-		<field name="directionPriority"/>
-		<field name="disableDependentsState"/>
-		<field name="disabledAlpha"/>
-		<field name="displayOptions" since="11"/>
-		<field name="dither"/>
-		<field name="divider"/>
-		<field name="dividerHeight"/>
-		<field name="dividerHorizontal" since="11"/>
-		<field name="dividerPadding" since="11"/>
-		<field name="dividerVertical" since="11"/>
-		<field name="documentLaunchMode" since="21"/>
-		<field name="drawSelectorOnTop"/>
-		<field name="drawable"/>
-		<field name="drawableBottom"/>
-		<field name="drawableEnd" since="14"/>
-		<field name="drawableLeft"/>
-		<field name="drawablePadding"/>
-		<field name="drawableRight"/>
-		<field name="drawableStart" since="14"/>
-		<field name="drawableTint" since="23"/>
-		<field name="drawableTintMode" since="23"/>
-		<field name="drawableTop"/>
-		<field name="drawingCacheQuality"/>
-		<field name="dropDownAnchor" since="3"/>
-		<field name="dropDownHeight" since="4"/>
-		<field name="dropDownHintAppearance"/>
-		<field name="dropDownHorizontalOffset" since="5"/>
-		<field name="dropDownItemStyle"/>
-		<field name="dropDownListViewStyle"/>
-		<field name="dropDownSelector"/>
-		<field name="dropDownSpinnerStyle" since="11"/>
-		<field name="dropDownVerticalOffset" since="5"/>
-		<field name="dropDownWidth" since="3"/>
-		<field name="duplicateParentState"/>
-		<field name="duration"/>
-		<field name="editTextBackground" since="11"/>
-		<field name="editTextColor" since="11"/>
-		<field name="editTextPreferenceStyle"/>
-		<field name="editTextStyle"/>
-		<field name="editable" deprecated="16"/>
-		<field name="editorExtras" since="3"/>
-		<field name="elegantTextHeight" since="21"/>
-		<field name="elevation" since="21"/>
-		<field name="ellipsize"/>
-		<field name="ems"/>
-		<field name="enableVrMode" since="24"/>
-		<field name="enabled"/>
-		<field name="end" since="23"/>
-		<field name="endColor"/>
-		<field name="endX" since="24"/>
-		<field name="endY" since="24"/>
-		<field name="endYear" deprecated="16"/>
-		<field name="enterFadeDuration" since="11"/>
-		<field name="entries"/>
-		<field name="entryValues"/>
-		<field name="eventsInterceptionEnabled" since="4"/>
-		<field name="excludeClass" since="21"/>
-		<field name="excludeFromRecents"/>
-		<field name="excludeId" since="21"/>
-		<field name="excludeName" since="21"/>
-		<field name="exitFadeDuration" since="11"/>
-		<field name="expandableListPreferredChildIndicatorLeft"/>
-		<field name="expandableListPreferredChildIndicatorRight"/>
-		<field name="expandableListPreferredChildPaddingLeft"/>
-		<field name="expandableListPreferredItemIndicatorLeft"/>
-		<field name="expandableListPreferredItemIndicatorRight"/>
-		<field name="expandableListPreferredItemPaddingLeft"/>
-		<field name="expandableListViewStyle"/>
-		<field name="expandableListViewWhiteStyle" since="8"/>
-		<field name="exported"/>
-		<field name="externalService" since="24"/>
-		<field name="extraTension" since="4"/>
-		<field name="extractNativeLibs" since="23"/>
-		<field name="factor"/>
-		<field name="fadeDuration" since="4"/>
-		<field name="fadeEnabled" since="4"/>
-		<field name="fadeOffset" since="4"/>
-		<field name="fadeScrollbars" since="5"/>
-		<field name="fadingEdge"/>
-		<field name="fadingEdgeLength"/>
-		<field name="fadingMode" since="19"/>
-		<field name="fallbackLineSpacing" since="28"/>
-		<field name="fastScrollAlwaysVisible" since="11"/>
-		<field name="fastScrollEnabled" since="3"/>
-		<field name="fastScrollOverlayPosition" since="11"/>
-		<field name="fastScrollPreviewBackgroundLeft" since="11"/>
-		<field name="fastScrollPreviewBackgroundRight" since="11"/>
-		<field name="fastScrollStyle" since="21"/>
-		<field name="fastScrollTextColor" since="11"/>
-		<field name="fastScrollThumbDrawable" since="11"/>
-		<field name="fastScrollTrackDrawable" since="11"/>
-		<field name="fillAfter"/>
-		<field name="fillAlpha" since="21"/>
-		<field name="fillBefore"/>
-		<field name="fillColor" since="21"/>
-		<field name="fillEnabled" since="3"/>
-		<field name="fillType" since="24"/>
-		<field name="fillViewport"/>
-		<field name="filter"/>
-		<field name="filterTouchesWhenObscured" since="9"/>
-		<field name="fingerprintAuthDrawable" since="23"/>
-		<field name="finishOnCloseSystemDialogs" since="5"/>
-		<field name="finishOnTaskLaunch"/>
-		<field name="firstBaselineToTopHeight" since="28"/>
-		<field name="firstDayOfWeek" since="11"/>
-		<field name="fitsSystemWindows"/>
-		<field name="flipInterval"/>
-		<field name="focusable"/>
-		<field name="focusableInTouchMode"/>
-		<field name="focusedByDefault" since="26"/>
-		<field name="focusedMonthDateColor" since="11" deprecated="23"/>
-		<field name="font" since="26"/>
-		<field name="fontFamily" since="16"/>
-		<field name="fontFeatureSettings" since="21"/>
-		<field name="fontProviderAuthority" since="26"/>
-		<field name="fontProviderCerts" since="26"/>
-		<field name="fontProviderPackage" since="26"/>
-		<field name="fontProviderQuery" since="26"/>
-		<field name="fontStyle" since="26"/>
-		<field name="fontVariationSettings" since="28"/>
-		<field name="fontWeight" since="26"/>
-		<field name="footerDividersEnabled" since="3"/>
-		<field name="forceHasOverlappingRendering" since="24"/>
-		<field name="foreground"/>
-		<field name="foregroundGravity"/>
-		<field name="foregroundTint" since="21"/>
-		<field name="foregroundTintMode" since="21"/>
-		<field name="format"/>
-		<field name="format12Hour" since="17"/>
-		<field name="format24Hour" since="17"/>
-		<field name="fraction" since="23"/>
-		<field name="fragment" since="11"/>
-		<field name="fragmentAllowEnterTransitionOverlap" since="21"/>
-		<field name="fragmentAllowReturnTransitionOverlap" since="21"/>
-		<field name="fragmentCloseEnterAnimation" since="11"/>
-		<field name="fragmentCloseExitAnimation" since="11"/>
-		<field name="fragmentEnterTransition" since="21"/>
-		<field name="fragmentExitTransition" since="21"/>
-		<field name="fragmentFadeEnterAnimation" since="11"/>
-		<field name="fragmentFadeExitAnimation" since="11"/>
-		<field name="fragmentOpenEnterAnimation" since="11"/>
-		<field name="fragmentOpenExitAnimation" since="11"/>
-		<field name="fragmentReenterTransition" since="21"/>
-		<field name="fragmentReturnTransition" since="21"/>
-		<field name="fragmentSharedElementEnterTransition" since="21"/>
-		<field name="fragmentSharedElementReturnTransition" since="21"/>
-		<field name="freezesText"/>
-		<field name="fromAlpha"/>
-		<field name="fromDegrees"/>
-		<field name="fromId" since="21"/>
-		<field name="fromScene" since="19"/>
-		<field name="fromXDelta"/>
-		<field name="fromXScale"/>
-		<field name="fromYDelta"/>
-		<field name="fromYScale"/>
-		<field name="fullBackupContent" since="23"/>
-		<field name="fullBackupOnly" since="21"/>
-		<field name="fullBright"/>
-		<field name="fullDark"/>
-		<field name="functionalTest"/>
-		<field name="galleryItemBackground"/>
-		<field name="galleryStyle"/>
-		<field name="gestureColor" since="4"/>
-		<field name="gestureStrokeAngleThreshold" since="4"/>
-		<field name="gestureStrokeLengthThreshold" since="4"/>
-		<field name="gestureStrokeSquarenessThreshold" since="4"/>
-		<field name="gestureStrokeType" since="4"/>
-		<field name="gestureStrokeWidth" since="4"/>
-		<field name="glEsVersion" since="4"/>
-		<field name="goIcon" since="21"/>
-		<field name="gradientRadius"/>
-		<field name="grantUriPermissions"/>
-		<field name="gravity"/>
-		<field name="gridViewStyle"/>
-		<field name="groupIndicator"/>
-		<field name="hand_hour"/>
-		<field name="hand_minute"/>
-		<field name="handle" since="3"/>
-		<field name="handleProfiling"/>
-		<field name="hapticFeedbackEnabled" since="3"/>
-		<field name="hardwareAccelerated" since="11"/>
-		<field name="hasCode"/>
-		<field name="headerAmPmTextAppearance" since="21" deprecated="23"/>
-		<field name="headerBackground"/>
-		<field name="headerDayOfMonthTextAppearance" since="21" deprecated="23"/>
-		<field name="headerDividersEnabled" since="3"/>
-		<field name="headerMonthTextAppearance" since="21" deprecated="23"/>
-		<field name="headerTimeTextAppearance" since="21" deprecated="23"/>
-		<field name="headerYearTextAppearance" since="21" deprecated="23"/>
-		<field name="height"/>
-		<field name="hideOnContentScroll" since="21"/>
-		<field name="hint"/>
-		<field name="homeAsUpIndicator" since="11"/>
-		<field name="homeLayout" since="11"/>
-		<field name="horizontalDivider"/>
-		<field name="horizontalGap" since="3"/>
-		<field name="horizontalScrollViewStyle" since="11"/>
-		<field name="horizontalSpacing"/>
-		<field name="host"/>
-		<field name="hotSpotX" since="24"/>
-		<field name="hotSpotY" since="24"/>
-		<field name="hyphenationFrequency" since="23"/>
-		<field name="icon"/>
-		<field name="iconPreview" since="3"/>
-		<field name="iconSpaceReserved" since="26"/>
-		<field name="iconTint" since="26"/>
-		<field name="iconTintMode" since="26"/>
-		<field name="iconifiedByDefault" since="11"/>
-		<field name="id"/>
-		<field name="ignoreGravity"/>
-		<field name="imageButtonStyle"/>
-		<field name="imageWellStyle"/>
-		<field name="imeActionId" since="3"/>
-		<field name="imeActionLabel" since="3"/>
-		<field name="imeExtractEnterAnimation" since="3"/>
-		<field name="imeExtractExitAnimation" since="3"/>
-		<field name="imeFullscreenBackground" since="3"/>
-		<field name="imeOptions" since="3"/>
-		<field name="imeSubtypeExtraValue" since="11"/>
-		<field name="imeSubtypeLocale" since="11"/>
-		<field name="imeSubtypeMode" since="11"/>
-		<field name="immersive" since="11"/>
-		<field name="importantForAccessibility" since="16"/>
-		<field name="importantForAutofill" since="26"/>
-		<field name="inAnimation"/>
-		<field name="includeFontPadding"/>
-		<field name="includeInGlobalSearch" since="4"/>
-		<field name="indeterminate"/>
-		<field name="indeterminateBehavior"/>
-		<field name="indeterminateDrawable"/>
-		<field name="indeterminateDuration"/>
-		<field name="indeterminateOnly"/>
-		<field name="indeterminateProgressStyle" since="11"/>
-		<field name="indeterminateTint" since="21"/>
-		<field name="indeterminateTintMode" since="21"/>
-		<field name="indicatorEnd" since="18"/>
-		<field name="indicatorLeft"/>
-		<field name="indicatorRight"/>
-		<field name="indicatorStart" since="18"/>
-		<field name="inflatedId"/>
-		<field name="initOrder"/>
-		<field name="initialKeyguardLayout" since="17"/>
-		<field name="initialLayout" since="3"/>
-		<field name="innerRadius" since="3"/>
-		<field name="innerRadiusRatio"/>
-		<field name="inputMethod" deprecated="16"/>
-		<field name="inputType" since="3"/>
-		<field name="inset" since="21"/>
-		<field name="insetBottom"/>
-		<field name="insetLeft"/>
-		<field name="insetRight"/>
-		<field name="insetTop"/>
-		<field name="installLocation" since="8"/>
-		<field name="interpolator"/>
-		<field name="isAlwaysSyncable" since="11"/>
-		<field name="isAsciiCapable" since="19"/>
-		<field name="isAuxiliary" since="14"/>
-		<field name="isDefault" since="3"/>
-		<field name="isFeatureSplit" since="26"/>
-		<field name="isGame" since="21"/>
-		<field name="isIndicator"/>
-		<field name="isModifier" since="3"/>
-		<field name="isRepeatable" since="3"/>
-		<field name="isScrollContainer" since="3"/>
-		<field name="isStatic" since="26"/>
-		<field name="isSticky" since="3"/>
-		<field name="isolatedProcess" since="16"/>
-		<field name="isolatedSplits" since="26"/>
-		<field name="itemBackground"/>
-		<field name="itemIconDisabledAlpha"/>
-		<field name="itemPadding" since="11"/>
-		<field name="itemTextAppearance"/>
-		<field name="justificationMode" since="26"/>
-		<field name="keepScreenOn"/>
-		<field name="key"/>
-		<field name="keyBackground" since="3"/>
-		<field name="keyEdgeFlags" since="3"/>
-		<field name="keyHeight" since="3"/>
-		<field name="keyIcon" since="3"/>
-		<field name="keyLabel" since="3"/>
-		<field name="keyOutputText" since="3"/>
-		<field name="keyPreviewHeight" since="3"/>
-		<field name="keyPreviewLayout" since="3"/>
-		<field name="keyPreviewOffset" since="3"/>
-		<field name="keySet" since="19"/>
-		<field name="keyTextColor" since="3"/>
-		<field name="keyTextSize" since="3"/>
-		<field name="keyWidth" since="3"/>
-		<field name="keyboardLayout" since="16"/>
-		<field name="keyboardMode" since="3"/>
-		<field name="keyboardNavigationCluster" since="26"/>
-		<field name="keycode"/>
-		<field name="killAfterRestore" since="5"/>
-		<field name="label"/>
-		<field name="labelFor" since="17"/>
-		<field name="labelTextSize" since="3"/>
-		<field name="languageTag" since="24"/>
-		<field name="largeHeap" since="11"/>
-		<field name="largeScreens" since="4"/>
-		<field name="largestWidthLimitDp" since="13"/>
-		<field name="lastBaselineToBottomHeight" since="28"/>
-		<field name="launchMode"/>
-		<field name="launchTaskBehindSourceAnimation" since="21"/>
-		<field name="launchTaskBehindTargetAnimation" since="21"/>
-		<field name="layerType" since="11"/>
-		<field name="layout"/>
-		<field name="layoutAnimation"/>
-		<field name="layoutDirection" since="17"/>
-		<field name="layoutMode" since="18"/>
-		<field name="layout_above"/>
-		<field name="layout_alignBaseline"/>
-		<field name="layout_alignBottom"/>
-		<field name="layout_alignEnd" since="17"/>
-		<field name="layout_alignLeft"/>
-		<field name="layout_alignParentBottom"/>
-		<field name="layout_alignParentEnd" since="17"/>
-		<field name="layout_alignParentLeft"/>
-		<field name="layout_alignParentRight"/>
-		<field name="layout_alignParentStart" since="17"/>
-		<field name="layout_alignParentTop"/>
-		<field name="layout_alignRight"/>
-		<field name="layout_alignStart" since="17"/>
-		<field name="layout_alignTop"/>
-		<field name="layout_alignWithParentIfMissing"/>
-		<field name="layout_below"/>
-		<field name="layout_centerHorizontal"/>
-		<field name="layout_centerInParent"/>
-		<field name="layout_centerVertical"/>
-		<field name="layout_column"/>
-		<field name="layout_columnSpan" since="14"/>
-		<field name="layout_columnWeight" since="21"/>
-		<field name="layout_gravity"/>
-		<field name="layout_height"/>
-		<field name="layout_margin"/>
-		<field name="layout_marginBottom"/>
-		<field name="layout_marginEnd" since="17"/>
-		<field name="layout_marginHorizontal" since="26"/>
-		<field name="layout_marginLeft"/>
-		<field name="layout_marginRight"/>
-		<field name="layout_marginStart" since="17"/>
-		<field name="layout_marginTop"/>
-		<field name="layout_marginVertical" since="26"/>
-		<field name="layout_row" since="14"/>
-		<field name="layout_rowSpan" since="14"/>
-		<field name="layout_rowWeight" since="21"/>
-		<field name="layout_scale"/>
-		<field name="layout_span"/>
-		<field name="layout_toEndOf" since="17"/>
-		<field name="layout_toLeftOf"/>
-		<field name="layout_toRightOf"/>
-		<field name="layout_toStartOf" since="17"/>
-		<field name="layout_weight"/>
-		<field name="layout_width"/>
-		<field name="layout_x"/>
-		<field name="layout_y"/>
-		<field name="left"/>
-		<field name="letterSpacing" since="21"/>
-		<field name="level" since="24"/>
-		<field name="lineHeight" since="28"/>
-		<field name="lineSpacingExtra"/>
-		<field name="lineSpacingMultiplier"/>
-		<field name="lines"/>
-		<field name="linksClickable"/>
-		<field name="listChoiceBackgroundIndicator" since="11"/>
-		<field name="listChoiceIndicatorMultiple"/>
-		<field name="listChoiceIndicatorSingle"/>
-		<field name="listDivider"/>
-		<field name="listDividerAlertDialog" since="11"/>
-		<field name="listMenuViewStyle" since="24"/>
-		<field name="listPopupWindowStyle" since="11"/>
-		<field name="listPreferredItemHeight"/>
-		<field name="listPreferredItemHeightLarge" since="14"/>
-		<field name="listPreferredItemHeightSmall" since="14"/>
-		<field name="listPreferredItemPaddingEnd" since="17"/>
-		<field name="listPreferredItemPaddingLeft" since="14"/>
-		<field name="listPreferredItemPaddingRight" since="14"/>
-		<field name="listPreferredItemPaddingStart" since="17"/>
-		<field name="listSelector"/>
-		<field name="listSeparatorTextViewStyle"/>
-		<field name="listViewStyle"/>
-		<field name="listViewWhiteStyle"/>
-		<field name="lockTaskMode" since="23"/>
-		<field name="logo" since="11"/>
-		<field name="logoDescription" since="23"/>
-		<field name="longClickable"/>
-		<field name="loopViews" since="11"/>
-		<field name="manageSpaceActivity"/>
-		<field name="mapViewStyle"/>
-		<field name="marqueeRepeatLimit" since="2"/>
-		<field name="matchOrder" since="21"/>
-		<field name="max"/>
-		<field name="maxAspectRatio" since="26"/>
-		<field name="maxButtonHeight" since="24"/>
-		<field name="maxDate" since="11"/>
-		<field name="maxEms"/>
-		<field name="maxHeight"/>
-		<field name="maxItemsPerRow"/>
-		<field name="maxLength"/>
-		<field name="maxLevel"/>
-		<field name="maxLines"/>
-		<field name="maxLongVersionCode" since="28"/>
-		<field name="maxRecents" since="21"/>
-		<field name="maxRows"/>
-		<field name="maxSdkVersion" since="4"/>
-		<field name="maxWidth"/>
-		<field name="maximumAngle" since="21"/>
-		<field name="measureAllChildren"/>
-		<field name="measureWithLargestChild" since="11"/>
-		<field name="mediaRouteButtonStyle" since="16"/>
-		<field name="mediaRouteTypes" since="16"/>
-		<field name="menuCategory"/>
-		<field name="mimeType"/>
-		<field name="min" since="26"/>
-		<field name="minDate" since="11"/>
-		<field name="minEms"/>
-		<field name="minHeight"/>
-		<field name="minLevel"/>
-		<field name="minLines"/>
-		<field name="minResizeHeight" since="14"/>
-		<field name="minResizeWidth" since="14"/>
-		<field name="minSdkVersion"/>
-		<field name="minWidth"/>
-		<field name="minimumHorizontalAngle" since="21"/>
-		<field name="minimumVerticalAngle" since="21"/>
-		<field name="mipMap" since="18"/>
-		<field name="mirrorForRtl" since="18"/>
-		<field name="mode"/>
-		<field name="moreIcon"/>
-		<field name="multiArch" since="21"/>
-		<field name="multiprocess"/>
-		<field name="name"/>
-		<field name="navigationBarColor" since="21"/>
-		<field name="navigationBarDividerColor" since="28"/>
-		<field name="navigationContentDescription" since="21"/>
-		<field name="navigationIcon" since="21"/>
-		<field name="navigationMode" since="11"/>
-		<field name="negativeButtonText"/>
-		<field name="nestedScrollingEnabled" since="21"/>
-		<field name="networkSecurityConfig" since="24"/>
-		<field name="nextClusterForward" since="26"/>
-		<field name="nextFocusDown"/>
-		<field name="nextFocusForward" since="11"/>
-		<field name="nextFocusLeft"/>
-		<field name="nextFocusRight"/>
-		<field name="nextFocusUp"/>
-		<field name="noHistory" since="3"/>
-		<field name="normalScreens" since="4"/>
-		<field name="notificationTimeout" since="14"/>
-		<field name="numColumns"/>
-		<field name="numStars"/>
-		<field name="numberPickerStyle" since="24"/>
-		<field name="numbersBackgroundColor" since="21"/>
-		<field name="numbersInnerTextColor" since="23"/>
-		<field name="numbersSelectorColor" since="21"/>
-		<field name="numbersTextColor" since="21"/>
-		<field name="numeric" deprecated="16"/>
-		<field name="numericModifiers" since="26"/>
-		<field name="numericShortcut"/>
-		<field name="offset" since="24"/>
-		<field name="onClick" since="4"/>
-		<field name="oneshot"/>
-		<field name="opacity" since="11"/>
-		<field name="order"/>
-		<field name="orderInCategory"/>
-		<field name="ordering" since="11"/>
-		<field name="orderingFromXml"/>
-		<field name="orientation"/>
-		<field name="outAnimation"/>
-		<field name="outlineAmbientShadowColor" since="28"/>
-		<field name="outlineProvider" since="21"/>
-		<field name="outlineSpotShadowColor" since="28"/>
-		<field name="overScrollFooter" since="9"/>
-		<field name="overScrollHeader" since="9"/>
-		<field name="overScrollMode" since="9"/>
-		<field name="overlapAnchor" since="21"/>
-		<field name="overridesImplicitlyEnabledSubtype" since="14"/>
-		<field name="packageNames" since="14"/>
-		<field name="padding"/>
-		<field name="paddingBottom"/>
-		<field name="paddingEnd" since="17"/>
-		<field name="paddingHorizontal" since="26"/>
-		<field name="paddingLeft"/>
-		<field name="paddingMode" since="21"/>
-		<field name="paddingRight"/>
-		<field name="paddingStart" since="17"/>
-		<field name="paddingTop"/>
-		<field name="paddingVertical" since="26"/>
-		<field name="panelBackground"/>
-		<field name="panelColorBackground"/>
-		<field name="panelColorForeground"/>
-		<field name="panelFullBackground"/>
-		<field name="panelTextAppearance"/>
-		<field name="parentActivityName" since="16"/>
-		<field name="password" deprecated="16"/>
-		<field name="path"/>
-		<field name="pathData" since="21"/>
-		<field name="pathPattern"/>
-		<field name="pathPrefix"/>
-		<field name="patternPathData" since="21"/>
-		<field name="permission"/>
-		<field name="permissionFlags" since="17"/>
-		<field name="permissionGroup"/>
-		<field name="permissionGroupFlags" since="17"/>
-		<field name="persistableMode" since="21"/>
-		<field name="persistent"/>
-		<field name="persistentDrawingCache"/>
-		<field name="persistentWhenFeatureAvailable" since="26"/>
-		<field name="phoneNumber" deprecated="16"/>
-		<field name="pivotX"/>
-		<field name="pivotY"/>
-		<field name="pointerIcon" since="24"/>
-		<field name="popupAnimationStyle" since="9"/>
-		<field name="popupBackground"/>
-		<field name="popupCharacters" since="3"/>
-		<field name="popupElevation" since="21"/>
-		<field name="popupEnterTransition" since="24"/>
-		<field name="popupExitTransition" since="24"/>
-		<field name="popupKeyboard" since="3"/>
-		<field name="popupLayout" since="3"/>
-		<field name="popupMenuStyle" since="11"/>
-		<field name="popupTheme" since="21"/>
-		<field name="popupWindowStyle"/>
-		<field name="port"/>
-		<field name="positiveButtonText"/>
-		<field name="preferenceCategoryStyle"/>
-		<field name="preferenceFragmentStyle" since="24"/>
-		<field name="preferenceInformationStyle"/>
-		<field name="preferenceLayoutChild"/>
-		<field name="preferenceScreenStyle"/>
-		<field name="preferenceStyle"/>
-		<field name="presentationTheme" since="17"/>
-		<field name="previewImage" since="11"/>
-		<field name="primaryContentAlpha" since="26"/>
-		<field name="priority"/>
-		<field name="privateImeOptions" since="3"/>
-		<field name="process"/>
-		<field name="progress"/>
-		<field name="progressBackgroundTint" since="21"/>
-		<field name="progressBackgroundTintMode" since="21"/>
-		<field name="progressBarPadding" since="11"/>
-		<field name="progressBarStyle"/>
-		<field name="progressBarStyleHorizontal"/>
-		<field name="progressBarStyleInverse" since="4"/>
-		<field name="progressBarStyleLarge"/>
-		<field name="progressBarStyleLargeInverse" since="4"/>
-		<field name="progressBarStyleSmall"/>
-		<field name="progressBarStyleSmallInverse" since="4"/>
-		<field name="progressBarStyleSmallTitle"/>
-		<field name="progressDrawable"/>
-		<field name="progressTint" since="21"/>
-		<field name="progressTintMode" since="21"/>
-		<field name="prompt"/>
-		<field name="propertyName" since="11"/>
-		<field name="propertyXName" since="21"/>
-		<field name="propertyYName" since="21"/>
-		<field name="protectionLevel"/>
-		<field name="publicKey" since="14"/>
-		<field name="queryActionMsg"/>
-		<field name="queryAfterZeroResults" since="4"/>
-		<field name="queryBackground" since="21"/>
-		<field name="queryHint" since="11"/>
-		<field name="quickContactBadgeStyleSmallWindowLarge" since="6"/>
-		<field name="quickContactBadgeStyleSmallWindowMedium" since="6"/>
-		<field name="quickContactBadgeStyleSmallWindowSmall" since="6"/>
-		<field name="quickContactBadgeStyleWindowLarge" since="6"/>
-		<field name="quickContactBadgeStyleWindowMedium" since="6"/>
-		<field name="quickContactBadgeStyleWindowSmall" since="6"/>
-		<field name="radioButtonStyle"/>
-		<field name="radius"/>
-		<field name="rating"/>
-		<field name="ratingBarStyle"/>
-		<field name="ratingBarStyleIndicator"/>
-		<field name="ratingBarStyleSmall"/>
-		<field name="readPermission"/>
-		<field name="recognitionService" since="21"/>
-		<field name="recreateOnConfigChanges" since="26"/>
-		<field name="recycleEnabled" since="26"/>
-		<field name="relinquishTaskIdentity" since="21"/>
-		<field name="reparent" since="21"/>
-		<field name="reparentWithOverlay" since="21"/>
-		<field name="repeatCount"/>
-		<field name="repeatMode"/>
-		<field name="reqFiveWayNav" since="3"/>
-		<field name="reqHardKeyboard" since="3"/>
-		<field name="reqKeyboardType" since="3"/>
-		<field name="reqNavigation" since="3"/>
-		<field name="reqTouchScreen" since="3"/>
-		<field name="requireDeviceUnlock" since="19"/>
-		<field name="required" since="5"/>
-		<field name="requiredAccountType" since="18"/>
-		<field name="requiredFeature" since="26"/>
-		<field name="requiredForAllUsers" since="18"/>
-		<field name="requiredNotFeature" since="26"/>
-		<field name="requiresFadingEdge" since="14"/>
-		<field name="requiresSmallestWidthDp" since="13"/>
-		<field name="resizeClip" since="22"/>
-		<field name="resizeMode" since="12"/>
-		<field name="resizeable" since="4"/>
-		<field name="resizeableActivity" since="24"/>
-		<field name="resource"/>
-		<field name="restoreAnyVersion" since="8"/>
-		<field name="restoreNeedsApplication" since="5" deprecated="16"/>
-		<field name="restrictedAccountType" since="18"/>
-		<field name="restrictionType" since="21"/>
-		<field name="resumeWhilePausing" since="21"/>
-		<field name="reversible" since="21"/>
-		<field name="revisionCode" since="22"/>
-		<field name="right"/>
-		<field name="ringtonePreferenceStyle"/>
-		<field name="ringtoneType"/>
-		<field name="rotation" since="11"/>
-		<field name="rotationAnimation" since="26"/>
-		<field name="rotationX" since="11"/>
-		<field name="rotationY" since="11"/>
-		<field name="roundIcon" since="25"/>
-		<field name="rowCount" since="14"/>
-		<field name="rowDelay"/>
-		<field name="rowEdgeFlags" since="3"/>
-		<field name="rowHeight"/>
-		<field name="rowOrderPreserved" since="14"/>
-		<field name="saveEnabled"/>
-		<field name="scaleGravity"/>
-		<field name="scaleHeight"/>
-		<field name="scaleType"/>
-		<field name="scaleWidth"/>
-		<field name="scaleX" since="11"/>
-		<field name="scaleY" since="11"/>
-		<field name="scheme"/>
-		<field name="screenDensity" since="9"/>
-		<field name="screenOrientation"/>
-		<field name="screenReaderFocusable" since="28"/>
-		<field name="screenSize" since="9"/>
-		<field name="scrollHorizontally"/>
-		<field name="scrollIndicators" since="23"/>
-		<field name="scrollViewStyle"/>
-		<field name="scrollX"/>
-		<field name="scrollY"/>
-		<field name="scrollbarAlwaysDrawHorizontalTrack"/>
-		<field name="scrollbarAlwaysDrawVerticalTrack"/>
-		<field name="scrollbarDefaultDelayBeforeFade" since="5"/>
-		<field name="scrollbarFadeDuration" since="5"/>
-		<field name="scrollbarSize"/>
-		<field name="scrollbarStyle"/>
-		<field name="scrollbarThumbHorizontal"/>
-		<field name="scrollbarThumbVertical"/>
-		<field name="scrollbarTrackHorizontal"/>
-		<field name="scrollbarTrackVertical"/>
-		<field name="scrollbars"/>
-		<field name="scrollingCache"/>
-		<field name="searchButtonText" deprecated="16"/>
-		<field name="searchHintIcon" since="22"/>
-		<field name="searchIcon" since="21"/>
-		<field name="searchMode"/>
-		<field name="searchSettingsDescription" since="4"/>
-		<field name="searchSuggestAuthority"/>
-		<field name="searchSuggestIntentAction"/>
-		<field name="searchSuggestIntentData"/>
-		<field name="searchSuggestPath"/>
-		<field name="searchSuggestSelection"/>
-		<field name="searchSuggestThreshold" since="4"/>
-		<field name="searchViewStyle" since="21"/>
-		<field name="secondaryContentAlpha" since="26"/>
-		<field name="secondaryProgress"/>
-		<field name="secondaryProgressTint" since="21"/>
-		<field name="secondaryProgressTintMode" since="21"/>
-		<field name="seekBarStyle"/>
-		<field name="segmentedButtonStyle" since="11"/>
-		<field name="selectAllOnFocus"/>
-		<field name="selectable"/>
-		<field name="selectableItemBackground" since="11"/>
-		<field name="selectableItemBackgroundBorderless" since="21"/>
-		<field name="selectedDateVerticalBar" since="11" deprecated="23"/>
-		<field name="selectedWeekBackgroundColor" since="11" deprecated="23"/>
-		<field name="sessionService" since="21"/>
-		<field name="settingsActivity" since="3"/>
-		<field name="setupActivity" since="21"/>
-		<field name="shadowColor"/>
-		<field name="shadowDx"/>
-		<field name="shadowDy"/>
-		<field name="shadowRadius"/>
-		<field name="shape"/>
-		<field name="shareInterpolator"/>
-		<field name="sharedUserId"/>
-		<field name="sharedUserLabel" since="3"/>
-		<field name="shortcutDisabledMessage" since="25"/>
-		<field name="shortcutId" since="25"/>
-		<field name="shortcutLongLabel" since="25"/>
-		<field name="shortcutShortLabel" since="25"/>
-		<field name="shouldDisableView"/>
-		<field name="showAsAction" since="11"/>
-		<field name="showDefault"/>
-		<field name="showDividers" since="11"/>
-		<field name="showForAllUsers" since="23"/>
-		<field name="showMetadataInPreview" since="25"/>
-		<field name="showOnLockScreen" since="17" deprecated="23"/>
-		<field name="showSilent"/>
-		<field name="showText" since="21"/>
-		<field name="showWeekNumber" since="11" deprecated="23"/>
-		<field name="showWhenLocked" since="27"/>
-		<field name="shownWeekCount" since="11" deprecated="23"/>
-		<field name="shrinkColumns"/>
-		<field name="singleLine" deprecated="16"/>
-		<field name="singleLineTitle" since="26"/>
-		<field name="singleUser" since="17"/>
-		<field name="slideEdge" since="21"/>
-		<field name="smallIcon" since="5"/>
-		<field name="smallScreens" since="4"/>
-		<field name="smoothScrollbar" since="3"/>
-		<field name="soundEffectsEnabled"/>
-		<field name="spacing"/>
-		<field name="spinnerDropDownItemStyle"/>
-		<field name="spinnerItemStyle"/>
-		<field name="spinnerMode" since="11"/>
-		<field name="spinnerStyle"/>
-		<field name="spinnersShown" since="11"/>
-		<field name="splitMotionEvents" since="11"/>
-		<field name="splitName" since="26"/>
-		<field name="splitTrack" since="21"/>
-		<field name="spotShadowAlpha" since="21"/>
-		<field name="src"/>
-		<field name="ssp" since="19"/>
-		<field name="sspPattern" since="19"/>
-		<field name="sspPrefix" since="19"/>
-		<field name="stackFromBottom"/>
-		<field name="stackViewStyle" since="21"/>
-		<field name="starStyle"/>
-		<field name="start" since="23"/>
-		<field name="startColor"/>
-		<field name="startDelay" since="19"/>
-		<field name="startOffset"/>
-		<field name="startX" since="24"/>
-		<field name="startY" since="24"/>
-		<field name="startYear" deprecated="16"/>
-		<field name="stateListAnimator" since="21"/>
-		<field name="stateNotNeeded"/>
-		<field name="state_above_anchor"/>
-		<field name="state_accelerated" since="11"/>
-		<field name="state_activated" since="11"/>
-		<field name="state_active"/>
-		<field name="state_checkable"/>
-		<field name="state_checked"/>
-		<field name="state_drag_can_accept" since="14"/>
-		<field name="state_drag_hovered" since="14"/>
-		<field name="state_empty"/>
-		<field name="state_enabled"/>
-		<field name="state_expanded"/>
-		<field name="state_first"/>
-		<field name="state_focused"/>
-		<field name="state_hovered" since="14"/>
-		<field name="state_last"/>
-		<field name="state_long_pressable" since="3"/>
-		<field name="state_middle"/>
-		<field name="state_multiline" since="11"/>
-		<field name="state_pressed"/>
-		<field name="state_selected"/>
-		<field name="state_single"/>
-		<field name="state_window_focused"/>
-		<field name="staticWallpaperPreview" since="11"/>
-		<field name="statusBarColor" since="21"/>
-		<field name="stepSize"/>
-		<field name="stopWithTask" since="14"/>
-		<field name="streamType"/>
-		<field name="stretchColumns"/>
-		<field name="stretchMode"/>
-		<field name="strokeAlpha" since="21"/>
-		<field name="strokeColor" since="21"/>
-		<field name="strokeLineCap" since="21"/>
-		<field name="strokeLineJoin" since="21"/>
-		<field name="strokeMiterLimit" since="21"/>
-		<field name="strokeWidth" since="21"/>
-		<field name="subMenuArrow" since="24"/>
-		<field name="submitBackground" since="21"/>
-		<field name="subtitle" since="11"/>
-		<field name="subtitleTextAppearance" since="21"/>
-		<field name="subtitleTextColor" since="23"/>
-		<field name="subtitleTextStyle" since="11"/>
-		<field name="subtypeExtraValue" since="14"/>
-		<field name="subtypeId" since="17"/>
-		<field name="subtypeLocale" since="14"/>
-		<field name="suggestActionMsg"/>
-		<field name="suggestActionMsgColumn"/>
-		<field name="suggestionRowLayout" since="21"/>
-		<field name="summary"/>
-		<field name="summaryColumn" since="5"/>
-		<field name="summaryOff"/>
-		<field name="summaryOn"/>
-		<field name="supportsAssist" since="23"/>
-		<field name="supportsLaunchVoiceAssistFromKeyguard" since="23"/>
-		<field name="supportsLocalInteraction" since="24"/>
-		<field name="supportsPictureInPicture" since="24"/>
-		<field name="supportsRtl" since="17"/>
-		<field name="supportsSwitchingToNextInputMethod" since="19"/>
-		<field name="supportsUploading" since="5"/>
-		<field name="switchMinWidth" since="14"/>
-		<field name="switchPadding" since="14"/>
-		<field name="switchPreferenceStyle" since="14"/>
-		<field name="switchStyle" since="21"/>
-		<field name="switchTextAppearance" since="14"/>
-		<field name="switchTextOff" since="14"/>
-		<field name="switchTextOn" since="14"/>
-		<field name="syncable"/>
-		<field name="tabStripEnabled" since="8"/>
-		<field name="tabStripLeft" since="8"/>
-		<field name="tabStripRight" since="8"/>
-		<field name="tabWidgetStyle"/>
-		<field name="tag"/>
-		<field name="targetActivity"/>
-		<field name="targetClass"/>
-		<field name="targetDescriptions" since="14" deprecated="23"/>
-		<field name="targetId" since="19"/>
-		<field name="targetName" since="21"/>
-		<field name="targetPackage"/>
-		<field name="targetProcesses" since="26"/>
-		<field name="targetSandboxVersion" since="26"/>
-		<field name="targetSdkVersion" since="4"/>
-		<field name="taskAffinity"/>
-		<field name="taskCloseEnterAnimation"/>
-		<field name="taskCloseExitAnimation"/>
-		<field name="taskOpenEnterAnimation"/>
-		<field name="taskOpenExitAnimation"/>
-		<field name="taskToBackEnterAnimation"/>
-		<field name="taskToBackExitAnimation"/>
-		<field name="taskToFrontEnterAnimation"/>
-		<field name="taskToFrontExitAnimation"/>
-		<field name="tension" since="4"/>
-		<field name="testOnly" since="4"/>
-		<field name="text"/>
-		<field name="textAlignment" since="17"/>
-		<field name="textAllCaps" since="14"/>
-		<field name="textAppearance"/>
-		<field name="textAppearanceButton"/>
-		<field name="textAppearanceInverse"/>
-		<field name="textAppearanceLarge"/>
-		<field name="textAppearanceLargeInverse"/>
-		<field name="textAppearanceLargePopupMenu" since="11"/>
-		<field name="textAppearanceListItem" since="14"/>
-		<field name="textAppearanceListItemSecondary" since="21"/>
-		<field name="textAppearanceListItemSmall" since="14"/>
-		<field name="textAppearanceMedium"/>
-		<field name="textAppearanceMediumInverse"/>
-		<field name="textAppearancePopupMenuHeader" since="24"/>
-		<field name="textAppearanceSearchResultSubtitle" since="5"/>
-		<field name="textAppearanceSearchResultTitle" since="5"/>
-		<field name="textAppearanceSmall"/>
-		<field name="textAppearanceSmallInverse"/>
-		<field name="textAppearanceSmallPopupMenu" since="11"/>
-		<field name="textCheckMark"/>
-		<field name="textCheckMarkInverse"/>
-		<field name="textColor"/>
-		<field name="textColorAlertDialogListItem" since="11"/>
-		<field name="textColorHighlight"/>
-		<field name="textColorHighlightInverse" since="11"/>
-		<field name="textColorHint"/>
-		<field name="textColorHintInverse"/>
-		<field name="textColorLink"/>
-		<field name="textColorLinkInverse" since="11"/>
-		<field name="textColorPrimary"/>
-		<field name="textColorPrimaryDisableOnly"/>
-		<field name="textColorPrimaryInverse"/>
-		<field name="textColorPrimaryInverseDisableOnly" since="4"/>
-		<field name="textColorPrimaryInverseNoDisable"/>
-		<field name="textColorPrimaryNoDisable"/>
-		<field name="textColorSecondary"/>
-		<field name="textColorSecondaryInverse"/>
-		<field name="textColorSecondaryInverseNoDisable"/>
-		<field name="textColorSecondaryNoDisable"/>
-		<field name="textColorTertiary"/>
-		<field name="textColorTertiaryInverse"/>
-		<field name="textCursorDrawable" since="12"/>
-		<field name="textDirection" since="17"/>
-		<field name="textEditNoPasteWindowLayout" since="11"/>
-		<field name="textEditPasteWindowLayout" since="11"/>
-		<field name="textEditSideNoPasteWindowLayout" since="11"/>
-		<field name="textEditSidePasteWindowLayout" since="11"/>
-		<field name="textEditSuggestionItemLayout" since="14"/>
-		<field name="textFilterEnabled"/>
-		<field name="textFontWeight" since="28"/>
-		<field name="textIsSelectable" since="11"/>
-		<field name="textOff"/>
-		<field name="textOn"/>
-		<field name="textScaleX"/>
-		<field name="textSelectHandle" since="9"/>
-		<field name="textSelectHandleLeft" since="9"/>
-		<field name="textSelectHandleRight" since="9"/>
-		<field name="textSelectHandleWindowStyle" since="9"/>
-		<field name="textSize"/>
-		<field name="textStyle"/>
-		<field name="textSuggestionsWindowStyle" since="14"/>
-		<field name="textViewStyle"/>
-		<field name="theme"/>
-		<field name="thickness" since="3"/>
-		<field name="thicknessRatio"/>
-		<field name="thumb"/>
-		<field name="thumbOffset"/>
-		<field name="thumbPosition" since="23"/>
-		<field name="thumbTextPadding" since="14"/>
-		<field name="thumbTint" since="21"/>
-		<field name="thumbTintMode" since="21"/>
-		<field name="thumbnail" since="5"/>
-		<field name="tickMark" since="24"/>
-		<field name="tickMarkTint" since="24"/>
-		<field name="tickMarkTintMode" since="24"/>
-		<field name="tileMode"/>
-		<field name="tileModeX" since="21"/>
-		<field name="tileModeY" since="21"/>
-		<field name="timePickerDialogTheme" since="21"/>
-		<field name="timePickerMode" since="21"/>
-		<field name="timePickerStyle" since="21"/>
-		<field name="timeZone" since="17"/>
-		<field name="tint"/>
-		<field name="tintMode" since="21"/>
-		<field name="title"/>
-		<field name="titleCondensed"/>
-		<field name="titleMargin" since="24"/>
-		<field name="titleMarginBottom" since="24"/>
-		<field name="titleMarginEnd" since="24"/>
-		<field name="titleMarginStart" since="24"/>
-		<field name="titleMarginTop" since="24"/>
-		<field name="titleTextAppearance" since="21"/>
-		<field name="titleTextColor" since="23"/>
-		<field name="titleTextStyle" since="11"/>
-		<field name="toAlpha"/>
-		<field name="toDegrees"/>
-		<field name="toId" since="21"/>
-		<field name="toScene" since="19"/>
-		<field name="toXDelta"/>
-		<field name="toXScale"/>
-		<field name="toYDelta"/>
-		<field name="toYScale"/>
-		<field name="toolbarStyle" since="21"/>
-		<field name="tooltipText" since="26"/>
-		<field name="top"/>
-		<field name="topBright"/>
-		<field name="topDark"/>
-		<field name="topLeftRadius"/>
-		<field name="topOffset" since="3"/>
-		<field name="topRightRadius"/>
-		<field name="touchscreenBlocksFocus" since="21"/>
-		<field name="track" since="14"/>
-		<field name="trackTint" since="23"/>
-		<field name="trackTintMode" since="23"/>
-		<field name="transcriptMode"/>
-		<field name="transformPivotX" since="11"/>
-		<field name="transformPivotY" since="11"/>
-		<field name="transition" since="19"/>
-		<field name="transitionGroup" since="21"/>
-		<field name="transitionName" since="21"/>
-		<field name="transitionOrdering" since="19"/>
-		<field name="transitionVisibilityMode" since="21"/>
-		<field name="translateX" since="21"/>
-		<field name="translateY" since="21"/>
-		<field name="translationX" since="11"/>
-		<field name="translationY" since="11"/>
-		<field name="translationZ" since="21"/>
-		<field name="trimPathEnd" since="21"/>
-		<field name="trimPathOffset" since="21"/>
-		<field name="trimPathStart" since="21"/>
-		<field name="ttcIndex" since="28"/>
-		<field name="tunerCount" since="24"/>
-		<field name="turnScreenOn" since="27"/>
-		<field name="type"/>
-		<field name="typeface"/>
-		<field name="uiOptions" since="14"/>
-		<field name="uncertainGestureColor" since="4"/>
-		<field name="unfocusedMonthDateColor" since="11" deprecated="23"/>
-		<field name="unselectedAlpha"/>
-		<field name="updatePeriodMillis" since="3"/>
-		<field name="use32bitAbi" since="24"/>
-		<field name="useDefaultMargins" since="14"/>
-		<field name="useIntrinsicSizeAsMinimum" since="11"/>
-		<field name="useLevel"/>
-		<field name="userVisible" since="5"/>
-		<field name="usesCleartextTraffic" since="23"/>
-		<field name="value"/>
-		<field name="valueFrom" since="11"/>
-		<field name="valueTo" since="11"/>
-		<field name="valueType" since="11"/>
-		<field name="variablePadding"/>
-		<field name="vendor" since="19"/>
-		<field name="version" since="24"/>
-		<field name="versionCode"/>
-		<field name="versionCodeMajor" since="28"/>
-		<field name="versionMajor" since="28"/>
-		<field name="versionName"/>
-		<field name="verticalCorrection" since="3"/>
-		<field name="verticalDivider"/>
-		<field name="verticalGap" since="3"/>
-		<field name="verticalScrollbarPosition" since="11"/>
-		<field name="verticalSpacing"/>
-		<field name="viewportHeight" since="21"/>
-		<field name="viewportWidth" since="21"/>
-		<field name="visibility"/>
-		<field name="visible"/>
-		<field name="visibleToInstantApps" since="26"/>
-		<field name="vmSafeMode" since="8"/>
-		<field name="voiceIcon" since="21"/>
-		<field name="voiceLanguage" since="3"/>
-		<field name="voiceLanguageModel" since="3"/>
-		<field name="voiceMaxResults" since="3"/>
-		<field name="voicePromptText" since="3"/>
-		<field name="voiceSearchMode" since="3"/>
-		<field name="wallpaperCloseEnterAnimation" since="5"/>
-		<field name="wallpaperCloseExitAnimation" since="5"/>
-		<field name="wallpaperIntraCloseEnterAnimation" since="5"/>
-		<field name="wallpaperIntraCloseExitAnimation" since="5"/>
-		<field name="wallpaperIntraOpenEnterAnimation" since="5"/>
-		<field name="wallpaperIntraOpenExitAnimation" since="5"/>
-		<field name="wallpaperOpenEnterAnimation" since="5"/>
-		<field name="wallpaperOpenExitAnimation" since="5"/>
-		<field name="webTextViewStyle" since="8"/>
-		<field name="webViewStyle"/>
-		<field name="weekDayTextAppearance" since="11"/>
-		<field name="weekNumberColor" since="11" deprecated="23"/>
-		<field name="weekSeparatorLineColor" since="11" deprecated="23"/>
-		<field name="weightSum"/>
-		<field name="widgetCategory" since="17"/>
-		<field name="widgetFeatures" since="28"/>
-		<field name="widgetLayout"/>
-		<field name="width"/>
-		<field name="windowActionBar" since="11"/>
-		<field name="windowActionBarOverlay" since="11"/>
-		<field name="windowActionModeOverlay" since="11"/>
-		<field name="windowActivityTransitions" since="21"/>
-		<field name="windowAllowEnterTransitionOverlap" since="21"/>
-		<field name="windowAllowReturnTransitionOverlap" since="21"/>
-		<field name="windowAnimationStyle"/>
-		<field name="windowBackground"/>
-		<field name="windowBackgroundFallback" since="24"/>
-		<field name="windowClipToOutline" since="21"/>
-		<field name="windowCloseOnTouchOutside" since="11"/>
-		<field name="windowContentOverlay"/>
-		<field name="windowContentTransitionManager" since="21"/>
-		<field name="windowContentTransitions" since="21"/>
-		<field name="windowDisablePreview" since="3"/>
-		<field name="windowDrawsSystemBarBackgrounds" since="21"/>
-		<field name="windowElevation" since="21"/>
-		<field name="windowEnableSplitTouch" since="11"/>
-		<field name="windowEnterAnimation"/>
-		<field name="windowEnterTransition" since="21"/>
-		<field name="windowExitAnimation"/>
-		<field name="windowExitTransition" since="21"/>
-		<field name="windowFrame"/>
-		<field name="windowFullscreen"/>
-		<field name="windowHideAnimation"/>
-		<field name="windowIsFloating"/>
-		<field name="windowIsTranslucent"/>
-		<field name="windowLayoutInDisplayCutoutMode" since="28"/>
-		<field name="windowLightNavigationBar" since="28"/>
-		<field name="windowLightStatusBar" since="23"/>
-		<field name="windowMinWidthMajor" since="11"/>
-		<field name="windowMinWidthMinor" since="11"/>
-		<field name="windowNoDisplay" since="3"/>
-		<field name="windowNoTitle"/>
-		<field name="windowOverscan" since="18"/>
-		<field name="windowReenterTransition" since="21"/>
-		<field name="windowReturnTransition" since="21"/>
-		<field name="windowSharedElementEnterTransition" since="21"/>
-		<field name="windowSharedElementExitTransition" since="21"/>
-		<field name="windowSharedElementReenterTransition" since="21"/>
-		<field name="windowSharedElementReturnTransition" since="21"/>
-		<field name="windowSharedElementsUseOverlay" since="21"/>
-		<field name="windowShowAnimation"/>
-		<field name="windowShowWallpaper" since="5"/>
-		<field name="windowSoftInputMode" since="3"/>
-		<field name="windowSplashscreenContent" since="26"/>
-		<field name="windowSwipeToDismiss" since="20"/>
-		<field name="windowTitleBackgroundStyle"/>
-		<field name="windowTitleSize"/>
-		<field name="windowTitleStyle"/>
-		<field name="windowTransitionBackgroundFadeDuration" since="21"/>
-		<field name="windowTranslucentNavigation" since="19"/>
-		<field name="windowTranslucentStatus" since="19"/>
-		<field name="writePermission"/>
-		<field name="x"/>
-		<field name="xlargeScreens" since="9"/>
-		<field name="y"/>
-		<field name="yearListItemTextAppearance" since="21" deprecated="23"/>
-		<field name="yearListSelectorColor" since="21" deprecated="23"/>
-		<field name="yesNoPreferenceStyle"/>
-		<field name="zAdjustment"/>
-	</class>
-	<class name="android/R$bool" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/R$color" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="background_dark"/>
-		<field name="background_light"/>
-		<field name="black"/>
-		<field name="darker_gray"/>
-		<field name="holo_blue_bright" since="14"/>
-		<field name="holo_blue_dark" since="14"/>
-		<field name="holo_blue_light" since="14"/>
-		<field name="holo_green_dark" since="14"/>
-		<field name="holo_green_light" since="14"/>
-		<field name="holo_orange_dark" since="14"/>
-		<field name="holo_orange_light" since="14"/>
-		<field name="holo_purple" since="14"/>
-		<field name="holo_red_dark" since="14"/>
-		<field name="holo_red_light" since="14"/>
-		<field name="primary_text_dark" deprecated="28"/>
-		<field name="primary_text_dark_nodisable" deprecated="28"/>
-		<field name="primary_text_light" deprecated="28"/>
-		<field name="primary_text_light_nodisable" deprecated="28"/>
-		<field name="secondary_text_dark" deprecated="28"/>
-		<field name="secondary_text_dark_nodisable" deprecated="28"/>
-		<field name="secondary_text_light" deprecated="28"/>
-		<field name="secondary_text_light_nodisable" deprecated="28"/>
-		<field name="tab_indicator_text"/>
-		<field name="tertiary_text_dark" deprecated="28"/>
-		<field name="tertiary_text_light" deprecated="28"/>
-		<field name="transparent"/>
-		<field name="white"/>
-		<field name="widget_edittext_dark"/>
-	</class>
-	<class name="android/R$dimen" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="app_icon_size"/>
-		<field name="dialog_min_width_major" since="11"/>
-		<field name="dialog_min_width_minor" since="11"/>
-		<field name="notification_large_icon_height" since="11"/>
-		<field name="notification_large_icon_width" since="11"/>
-		<field name="thumbnail_height"/>
-		<field name="thumbnail_width"/>
-	</class>
-	<class name="android/R$drawable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="alert_dark_frame"/>
-		<field name="alert_light_frame"/>
-		<field name="arrow_down_float"/>
-		<field name="arrow_up_float"/>
-		<field name="bottom_bar"/>
-		<field name="btn_default"/>
-		<field name="btn_default_small"/>
-		<field name="btn_dialog"/>
-		<field name="btn_dropdown"/>
-		<field name="btn_minus"/>
-		<field name="btn_plus"/>
-		<field name="btn_radio"/>
-		<field name="btn_star"/>
-		<field name="btn_star_big_off"/>
-		<field name="btn_star_big_on"/>
-		<field name="button_onoff_indicator_off"/>
-		<field name="button_onoff_indicator_on"/>
-		<field name="checkbox_off_background"/>
-		<field name="checkbox_on_background"/>
-		<field name="dark_header" since="3"/>
-		<field name="dialog_frame"/>
-		<field name="dialog_holo_dark_frame" since="11"/>
-		<field name="dialog_holo_light_frame" since="11"/>
-		<field name="divider_horizontal_bright"/>
-		<field name="divider_horizontal_dark"/>
-		<field name="divider_horizontal_dim_dark"/>
-		<field name="divider_horizontal_textfield"/>
-		<field name="edit_text"/>
-		<field name="editbox_background"/>
-		<field name="editbox_background_normal"/>
-		<field name="editbox_dropdown_dark_frame"/>
-		<field name="editbox_dropdown_light_frame"/>
-		<field name="gallery_thumb"/>
-		<field name="ic_btn_speak_now" since="3"/>
-		<field name="ic_delete"/>
-		<field name="ic_dialog_alert"/>
-		<field name="ic_dialog_dialer"/>
-		<field name="ic_dialog_email"/>
-		<field name="ic_dialog_info"/>
-		<field name="ic_dialog_map"/>
-		<field name="ic_input_add"/>
-		<field name="ic_input_delete"/>
-		<field name="ic_input_get"/>
-		<field name="ic_lock_idle_alarm"/>
-		<field name="ic_lock_idle_charging"/>
-		<field name="ic_lock_idle_lock"/>
-		<field name="ic_lock_idle_low_battery"/>
-		<field name="ic_lock_lock"/>
-		<field name="ic_lock_power_off"/>
-		<field name="ic_lock_silent_mode"/>
-		<field name="ic_lock_silent_mode_off"/>
-		<field name="ic_media_ff"/>
-		<field name="ic_media_next"/>
-		<field name="ic_media_pause"/>
-		<field name="ic_media_play"/>
-		<field name="ic_media_previous"/>
-		<field name="ic_media_rew"/>
-		<field name="ic_menu_add"/>
-		<field name="ic_menu_agenda"/>
-		<field name="ic_menu_always_landscape_portrait"/>
-		<field name="ic_menu_call"/>
-		<field name="ic_menu_camera"/>
-		<field name="ic_menu_close_clear_cancel"/>
-		<field name="ic_menu_compass"/>
-		<field name="ic_menu_crop"/>
-		<field name="ic_menu_day"/>
-		<field name="ic_menu_delete"/>
-		<field name="ic_menu_directions"/>
-		<field name="ic_menu_edit"/>
-		<field name="ic_menu_gallery"/>
-		<field name="ic_menu_help"/>
-		<field name="ic_menu_info_details"/>
-		<field name="ic_menu_manage"/>
-		<field name="ic_menu_mapmode"/>
-		<field name="ic_menu_month"/>
-		<field name="ic_menu_more"/>
-		<field name="ic_menu_my_calendar"/>
-		<field name="ic_menu_mylocation"/>
-		<field name="ic_menu_myplaces"/>
-		<field name="ic_menu_preferences"/>
-		<field name="ic_menu_recent_history"/>
-		<field name="ic_menu_report_image"/>
-		<field name="ic_menu_revert"/>
-		<field name="ic_menu_rotate"/>
-		<field name="ic_menu_save"/>
-		<field name="ic_menu_search"/>
-		<field name="ic_menu_send"/>
-		<field name="ic_menu_set_as"/>
-		<field name="ic_menu_share"/>
-		<field name="ic_menu_slideshow"/>
-		<field name="ic_menu_sort_alphabetically"/>
-		<field name="ic_menu_sort_by_size"/>
-		<field name="ic_menu_today"/>
-		<field name="ic_menu_upload"/>
-		<field name="ic_menu_upload_you_tube"/>
-		<field name="ic_menu_view"/>
-		<field name="ic_menu_week"/>
-		<field name="ic_menu_zoom"/>
-		<field name="ic_notification_clear_all"/>
-		<field name="ic_notification_overlay"/>
-		<field name="ic_partial_secure"/>
-		<field name="ic_popup_disk_full"/>
-		<field name="ic_popup_reminder"/>
-		<field name="ic_popup_sync"/>
-		<field name="ic_search_category_default"/>
-		<field name="ic_secure"/>
-		<field name="list_selector_background"/>
-		<field name="menu_frame"/>
-		<field name="menu_full_frame"/>
-		<field name="menuitem_background"/>
-		<field name="picture_frame"/>
-		<field name="presence_audio_away" since="9"/>
-		<field name="presence_audio_busy" since="9"/>
-		<field name="presence_audio_online" since="9"/>
-		<field name="presence_away"/>
-		<field name="presence_busy"/>
-		<field name="presence_invisible"/>
-		<field name="presence_offline"/>
-		<field name="presence_online"/>
-		<field name="presence_video_away" since="9"/>
-		<field name="presence_video_busy" since="9"/>
-		<field name="presence_video_online" since="9"/>
-		<field name="progress_horizontal"/>
-		<field name="progress_indeterminate_horizontal"/>
-		<field name="radiobutton_off_background"/>
-		<field name="radiobutton_on_background"/>
-		<field name="screen_background_dark"/>
-		<field name="screen_background_dark_transparent" since="5"/>
-		<field name="screen_background_light"/>
-		<field name="screen_background_light_transparent" since="5"/>
-		<field name="spinner_background"/>
-		<field name="spinner_dropdown_background"/>
-		<field name="star_big_off"/>
-		<field name="star_big_on"/>
-		<field name="star_off"/>
-		<field name="star_on"/>
-		<field name="stat_notify_call_mute"/>
-		<field name="stat_notify_chat"/>
-		<field name="stat_notify_error"/>
-		<field name="stat_notify_missed_call"/>
-		<field name="stat_notify_more"/>
-		<field name="stat_notify_sdcard"/>
-		<field name="stat_notify_sdcard_prepare" since="5"/>
-		<field name="stat_notify_sdcard_usb"/>
-		<field name="stat_notify_sync"/>
-		<field name="stat_notify_sync_noanim"/>
-		<field name="stat_notify_voicemail"/>
-		<field name="stat_sys_data_bluetooth"/>
-		<field name="stat_sys_download"/>
-		<field name="stat_sys_download_done"/>
-		<field name="stat_sys_headset"/>
-		<field name="stat_sys_phone_call" deprecated="16"/>
-		<field name="stat_sys_phone_call_forward" deprecated="16"/>
-		<field name="stat_sys_phone_call_on_hold" deprecated="16"/>
-		<field name="stat_sys_speakerphone"/>
-		<field name="stat_sys_upload"/>
-		<field name="stat_sys_upload_done"/>
-		<field name="stat_sys_vp_phone_call" since="4" deprecated="16"/>
-		<field name="stat_sys_vp_phone_call_on_hold" since="4" deprecated="16"/>
-		<field name="stat_sys_warning"/>
-		<field name="status_bar_item_app_background"/>
-		<field name="status_bar_item_background"/>
-		<field name="sym_action_call"/>
-		<field name="sym_action_chat"/>
-		<field name="sym_action_email"/>
-		<field name="sym_call_incoming"/>
-		<field name="sym_call_missed"/>
-		<field name="sym_call_outgoing"/>
-		<field name="sym_contact_card"/>
-		<field name="sym_def_app_icon"/>
-		<field name="title_bar"/>
-		<field name="title_bar_tall" since="3"/>
-		<field name="toast_frame"/>
-		<field name="zoom_plate"/>
-	</class>
-	<class name="android/R$fraction" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/R$id" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="accessibilityActionContextClick" since="23"/>
-		<field name="accessibilityActionHideTooltip" since="28"/>
-		<field name="accessibilityActionMoveWindow" since="26"/>
-		<field name="accessibilityActionScrollDown" since="23"/>
-		<field name="accessibilityActionScrollLeft" since="23"/>
-		<field name="accessibilityActionScrollRight" since="23"/>
-		<field name="accessibilityActionScrollToPosition" since="23"/>
-		<field name="accessibilityActionScrollUp" since="23"/>
-		<field name="accessibilityActionSetProgress" since="24"/>
-		<field name="accessibilityActionShowOnScreen" since="23"/>
-		<field name="accessibilityActionShowTooltip" since="28"/>
-		<field name="addToDictionary" since="3"/>
-		<field name="autofill" since="26"/>
-		<field name="background"/>
-		<field name="button1"/>
-		<field name="button2"/>
-		<field name="button3"/>
-		<field name="candidatesArea" since="3"/>
-		<field name="checkbox"/>
-		<field name="closeButton" since="3"/>
-		<field name="content"/>
-		<field name="copy" since="3"/>
-		<field name="copyUrl" since="3"/>
-		<field name="custom" since="8"/>
-		<field name="cut" since="3"/>
-		<field name="edit"/>
-		<field name="empty"/>
-		<field name="extractArea" since="3"/>
-		<field name="hint"/>
-		<field name="home" since="11"/>
-		<field name="icon"/>
-		<field name="icon1"/>
-		<field name="icon2"/>
-		<field name="icon_frame" since="24"/>
-		<field name="input"/>
-		<field name="inputArea" since="3"/>
-		<field name="inputExtractEditText" since="3"/>
-		<field name="keyboardView" since="3"/>
-		<field name="list"/>
-		<field name="list_container" since="24"/>
-		<field name="mask" since="21"/>
-		<field name="message"/>
-		<field name="navigationBarBackground" since="21"/>
-		<field name="paste" since="3"/>
-		<field name="pasteAsPlainText" since="23"/>
-		<field name="primary"/>
-		<field name="progress"/>
-		<field name="redo" since="23"/>
-		<field name="replaceText" since="23"/>
-		<field name="secondaryProgress"/>
-		<field name="selectAll" since="3"/>
-		<field name="selectTextMode" since="11"/>
-		<field name="selectedIcon"/>
-		<field name="shareText" since="23"/>
-		<field name="startSelectingText" since="3"/>
-		<field name="statusBarBackground" since="21"/>
-		<field name="stopSelectingText" since="3"/>
-		<field name="summary"/>
-		<field name="switchInputMethod" since="3"/>
-		<field name="switch_widget" since="24"/>
-		<field name="tabcontent"/>
-		<field name="tabhost"/>
-		<field name="tabs"/>
-		<field name="text1"/>
-		<field name="text2"/>
-		<field name="textAssist" since="26"/>
-		<field name="title"/>
-		<field name="toggle"/>
-		<field name="undo" since="23"/>
-		<field name="widget_frame"/>
-	</class>
-	<class name="android/R$integer" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="config_longAnimTime"/>
-		<field name="config_mediumAnimTime"/>
-		<field name="config_shortAnimTime"/>
-		<field name="status_bar_notification_info_maxnum" since="14"/>
-	</class>
-	<class name="android/R$interpolator" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="accelerate_cubic"/>
-		<field name="accelerate_decelerate"/>
-		<field name="accelerate_quad"/>
-		<field name="accelerate_quint"/>
-		<field name="anticipate"/>
-		<field name="anticipate_overshoot"/>
-		<field name="bounce"/>
-		<field name="cycle"/>
-		<field name="decelerate_cubic"/>
-		<field name="decelerate_quad"/>
-		<field name="decelerate_quint"/>
-		<field name="fast_out_extra_slow_in" since="28"/>
-		<field name="fast_out_linear_in" since="21"/>
-		<field name="fast_out_slow_in" since="21"/>
-		<field name="linear"/>
-		<field name="linear_out_slow_in" since="21"/>
-		<field name="overshoot"/>
-	</class>
-	<class name="android/R$layout" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="activity_list_item"/>
-		<field name="browser_link_context_header"/>
-		<field name="expandable_list_content"/>
-		<field name="list_content" since="11"/>
-		<field name="preference_category"/>
-		<field name="select_dialog_item"/>
-		<field name="select_dialog_multichoice"/>
-		<field name="select_dialog_singlechoice"/>
-		<field name="simple_dropdown_item_1line"/>
-		<field name="simple_expandable_list_item_1"/>
-		<field name="simple_expandable_list_item_2"/>
-		<field name="simple_gallery_item"/>
-		<field name="simple_list_item_1"/>
-		<field name="simple_list_item_2"/>
-		<field name="simple_list_item_activated_1" since="11"/>
-		<field name="simple_list_item_activated_2" since="11"/>
-		<field name="simple_list_item_checked"/>
-		<field name="simple_list_item_multiple_choice"/>
-		<field name="simple_list_item_single_choice"/>
-		<field name="simple_selectable_list_item" since="11"/>
-		<field name="simple_spinner_dropdown_item"/>
-		<field name="simple_spinner_item"/>
-		<field name="test_list_item"/>
-		<field name="two_line_list_item"/>
-	</class>
-	<class name="android/R$menu" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/R$mipmap" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="sym_def_app_icon"/>
-	</class>
-	<class name="android/R$plurals" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/R$raw" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/R$string" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="VideoView_error_button"/>
-		<field name="VideoView_error_text_invalid_progressive_playback" since="3"/>
-		<field name="VideoView_error_text_unknown"/>
-		<field name="VideoView_error_title"/>
-		<field name="autofill" since="27"/>
-		<field name="cancel"/>
-		<field name="copy"/>
-		<field name="copyUrl"/>
-		<field name="cut"/>
-		<field name="defaultMsisdnAlphaTag"/>
-		<field name="defaultVoiceMailAlphaTag"/>
-		<field name="dialog_alert_title" since="3"/>
-		<field name="emptyPhoneNumber"/>
-		<field name="fingerprint_icon_content_description" since="23"/>
-		<field name="httpErrorBadUrl"/>
-		<field name="httpErrorUnsupportedScheme"/>
-		<field name="no"/>
-		<field name="ok"/>
-		<field name="paste"/>
-		<field name="paste_as_plain_text" since="26"/>
-		<field name="search_go"/>
-		<field name="selectAll"/>
-		<field name="selectTextMode" since="11"/>
-		<field name="status_bar_notification_info_overflow" since="14"/>
-		<field name="unknownName"/>
-		<field name="untitled"/>
-		<field name="yes"/>
-	</class>
-	<class name="android/R$style" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="Animation"/>
-		<field name="Animation_Activity"/>
-		<field name="Animation_Dialog"/>
-		<field name="Animation_InputMethod" since="5"/>
-		<field name="Animation_Toast"/>
-		<field name="Animation_Translucent"/>
-		<field name="DeviceDefault_ButtonBar" since="14"/>
-		<field name="DeviceDefault_ButtonBar_AlertDialog" since="14"/>
-		<field name="DeviceDefault_Light_ButtonBar" since="14"/>
-		<field name="DeviceDefault_Light_ButtonBar_AlertDialog" since="14"/>
-		<field name="DeviceDefault_Light_SegmentedButton" since="14"/>
-		<field name="DeviceDefault_SegmentedButton" since="14"/>
-		<field name="Holo_ButtonBar" since="11"/>
-		<field name="Holo_ButtonBar_AlertDialog" since="11"/>
-		<field name="Holo_Light_ButtonBar" since="11"/>
-		<field name="Holo_Light_ButtonBar_AlertDialog" since="11"/>
-		<field name="Holo_Light_SegmentedButton" since="11"/>
-		<field name="Holo_SegmentedButton" since="11"/>
-		<field name="MediaButton"/>
-		<field name="MediaButton_Ffwd"/>
-		<field name="MediaButton_Next"/>
-		<field name="MediaButton_Pause"/>
-		<field name="MediaButton_Play"/>
-		<field name="MediaButton_Previous"/>
-		<field name="MediaButton_Rew"/>
-		<field name="TextAppearance"/>
-		<field name="TextAppearance_DeviceDefault" since="14"/>
-		<field name="TextAppearance_DeviceDefault_DialogWindowTitle" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Inverse" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Large" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Large_Inverse" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Medium" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Medium_Inverse" since="14"/>
-		<field name="TextAppearance_DeviceDefault_SearchResult_Subtitle" since="14"/>
-		<field name="TextAppearance_DeviceDefault_SearchResult_Title" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Small" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Small_Inverse" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Menu" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" since="14" deprecated="21"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Title" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" since="14" deprecated="21"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" since="14" deprecated="21"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Title" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" since="14" deprecated="21"/>
-		<field name="TextAppearance_DeviceDefault_Widget_Button" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_DropDownHint" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_DropDownItem" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_EditText" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_IconMenu_Item" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu_Large" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu_Small" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_TabWidget" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_TextView" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" since="14"/>
-		<field name="TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" since="14"/>
-		<field name="TextAppearance_DeviceDefault_WindowTitle" since="14"/>
-		<field name="TextAppearance_DialogWindowTitle"/>
-		<field name="TextAppearance_Holo" since="13"/>
-		<field name="TextAppearance_Holo_DialogWindowTitle" since="13"/>
-		<field name="TextAppearance_Holo_Inverse" since="13"/>
-		<field name="TextAppearance_Holo_Large" since="13"/>
-		<field name="TextAppearance_Holo_Large_Inverse" since="13"/>
-		<field name="TextAppearance_Holo_Medium" since="13"/>
-		<field name="TextAppearance_Holo_Medium_Inverse" since="13"/>
-		<field name="TextAppearance_Holo_SearchResult_Subtitle" since="13"/>
-		<field name="TextAppearance_Holo_SearchResult_Title" since="13"/>
-		<field name="TextAppearance_Holo_Small" since="13"/>
-		<field name="TextAppearance_Holo_Small_Inverse" since="13"/>
-		<field name="TextAppearance_Holo_Widget" since="13"/>
-		<field name="TextAppearance_Holo_Widget_ActionBar_Menu" since="14"/>
-		<field name="TextAppearance_Holo_Widget_ActionBar_Subtitle" since="13"/>
-		<field name="TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" since="14"/>
-		<field name="TextAppearance_Holo_Widget_ActionBar_Title" since="13"/>
-		<field name="TextAppearance_Holo_Widget_ActionBar_Title_Inverse" since="14"/>
-		<field name="TextAppearance_Holo_Widget_ActionMode_Subtitle" since="13"/>
-		<field name="TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" since="14"/>
-		<field name="TextAppearance_Holo_Widget_ActionMode_Title" since="13"/>
-		<field name="TextAppearance_Holo_Widget_ActionMode_Title_Inverse" since="14"/>
-		<field name="TextAppearance_Holo_Widget_Button" since="13"/>
-		<field name="TextAppearance_Holo_Widget_DropDownHint" since="13"/>
-		<field name="TextAppearance_Holo_Widget_DropDownItem" since="13"/>
-		<field name="TextAppearance_Holo_Widget_EditText" since="13"/>
-		<field name="TextAppearance_Holo_Widget_IconMenu_Item" since="13"/>
-		<field name="TextAppearance_Holo_Widget_PopupMenu" since="13"/>
-		<field name="TextAppearance_Holo_Widget_PopupMenu_Large" since="13"/>
-		<field name="TextAppearance_Holo_Widget_PopupMenu_Small" since="13"/>
-		<field name="TextAppearance_Holo_Widget_TabWidget" since="13"/>
-		<field name="TextAppearance_Holo_Widget_TextView" since="13"/>
-		<field name="TextAppearance_Holo_Widget_TextView_PopupMenu" since="13"/>
-		<field name="TextAppearance_Holo_Widget_TextView_SpinnerItem" since="13"/>
-		<field name="TextAppearance_Holo_WindowTitle" since="13"/>
-		<field name="TextAppearance_Inverse"/>
-		<field name="TextAppearance_Large"/>
-		<field name="TextAppearance_Large_Inverse"/>
-		<field name="TextAppearance_Material" since="21"/>
-		<field name="TextAppearance_Material_Body1" since="21"/>
-		<field name="TextAppearance_Material_Body2" since="21"/>
-		<field name="TextAppearance_Material_Button" since="21"/>
-		<field name="TextAppearance_Material_Caption" since="21"/>
-		<field name="TextAppearance_Material_DialogWindowTitle" since="21"/>
-		<field name="TextAppearance_Material_Display1" since="21"/>
-		<field name="TextAppearance_Material_Display2" since="21"/>
-		<field name="TextAppearance_Material_Display3" since="21"/>
-		<field name="TextAppearance_Material_Display4" since="21"/>
-		<field name="TextAppearance_Material_Headline" since="21"/>
-		<field name="TextAppearance_Material_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Large" since="21"/>
-		<field name="TextAppearance_Material_Large_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Medium" since="21"/>
-		<field name="TextAppearance_Material_Medium_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Menu" since="21"/>
-		<field name="TextAppearance_Material_Notification" since="21"/>
-		<field name="TextAppearance_Material_Notification_Emphasis" since="21"/>
-		<field name="TextAppearance_Material_Notification_Info" since="21"/>
-		<field name="TextAppearance_Material_Notification_Line2" since="21"/>
-		<field name="TextAppearance_Material_Notification_Time" since="21"/>
-		<field name="TextAppearance_Material_Notification_Title" since="21"/>
-		<field name="TextAppearance_Material_SearchResult_Subtitle" since="21"/>
-		<field name="TextAppearance_Material_SearchResult_Title" since="21"/>
-		<field name="TextAppearance_Material_Small" since="21"/>
-		<field name="TextAppearance_Material_Small_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Subhead" since="21"/>
-		<field name="TextAppearance_Material_Title" since="21"/>
-		<field name="TextAppearance_Material_Widget" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionBar_Menu" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionBar_Subtitle" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionBar_Subtitle_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionBar_Title" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionBar_Title_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionMode_Subtitle" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionMode_Subtitle_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionMode_Title" since="21"/>
-		<field name="TextAppearance_Material_Widget_ActionMode_Title_Inverse" since="21"/>
-		<field name="TextAppearance_Material_Widget_Button" since="21"/>
-		<field name="TextAppearance_Material_Widget_Button_Borderless_Colored" since="24"/>
-		<field name="TextAppearance_Material_Widget_Button_Colored" since="24"/>
-		<field name="TextAppearance_Material_Widget_Button_Inverse" since="23"/>
-		<field name="TextAppearance_Material_Widget_DropDownHint" since="21"/>
-		<field name="TextAppearance_Material_Widget_DropDownItem" since="21"/>
-		<field name="TextAppearance_Material_Widget_EditText" since="21"/>
-		<field name="TextAppearance_Material_Widget_IconMenu_Item" since="21"/>
-		<field name="TextAppearance_Material_Widget_PopupMenu" since="21"/>
-		<field name="TextAppearance_Material_Widget_PopupMenu_Large" since="21"/>
-		<field name="TextAppearance_Material_Widget_PopupMenu_Small" since="21"/>
-		<field name="TextAppearance_Material_Widget_TabWidget" since="21"/>
-		<field name="TextAppearance_Material_Widget_TextView" since="21"/>
-		<field name="TextAppearance_Material_Widget_TextView_PopupMenu" since="21"/>
-		<field name="TextAppearance_Material_Widget_TextView_SpinnerItem" since="21"/>
-		<field name="TextAppearance_Material_Widget_Toolbar_Subtitle" since="21"/>
-		<field name="TextAppearance_Material_Widget_Toolbar_Title" since="21"/>
-		<field name="TextAppearance_Material_WindowTitle" since="21"/>
-		<field name="TextAppearance_Medium"/>
-		<field name="TextAppearance_Medium_Inverse"/>
-		<field name="TextAppearance_Small"/>
-		<field name="TextAppearance_Small_Inverse"/>
-		<field name="TextAppearance_StatusBar_EventContent" since="9"/>
-		<field name="TextAppearance_StatusBar_EventContent_Title" since="9"/>
-		<field name="TextAppearance_StatusBar_Icon" since="9"/>
-		<field name="TextAppearance_StatusBar_Title" since="9"/>
-		<field name="TextAppearance_SuggestionHighlight" since="14"/>
-		<field name="TextAppearance_Theme"/>
-		<field name="TextAppearance_Theme_Dialog"/>
-		<field name="TextAppearance_Widget"/>
-		<field name="TextAppearance_Widget_Button"/>
-		<field name="TextAppearance_Widget_DropDownHint"/>
-		<field name="TextAppearance_Widget_DropDownItem"/>
-		<field name="TextAppearance_Widget_EditText"/>
-		<field name="TextAppearance_Widget_IconMenu_Item"/>
-		<field name="TextAppearance_Widget_PopupMenu_Large" since="11"/>
-		<field name="TextAppearance_Widget_PopupMenu_Small" since="11"/>
-		<field name="TextAppearance_Widget_TabWidget"/>
-		<field name="TextAppearance_Widget_TextView"/>
-		<field name="TextAppearance_Widget_TextView_PopupMenu"/>
-		<field name="TextAppearance_Widget_TextView_SpinnerItem"/>
-		<field name="TextAppearance_WindowTitle"/>
-		<field name="Theme"/>
-		<field name="ThemeOverlay" since="21"/>
-		<field name="ThemeOverlay_Material" since="21"/>
-		<field name="ThemeOverlay_Material_ActionBar" since="21"/>
-		<field name="ThemeOverlay_Material_Dark" since="21"/>
-		<field name="ThemeOverlay_Material_Dark_ActionBar" since="21"/>
-		<field name="ThemeOverlay_Material_Dialog" since="23"/>
-		<field name="ThemeOverlay_Material_Dialog_Alert" since="23"/>
-		<field name="ThemeOverlay_Material_Light" since="21"/>
-		<field name="Theme_Black"/>
-		<field name="Theme_Black_NoTitleBar"/>
-		<field name="Theme_Black_NoTitleBar_Fullscreen"/>
-		<field name="Theme_DeviceDefault" since="14"/>
-		<field name="Theme_DeviceDefault_Dialog" since="14"/>
-		<field name="Theme_DeviceDefault_DialogWhenLarge" since="14"/>
-		<field name="Theme_DeviceDefault_DialogWhenLarge_NoActionBar" since="14"/>
-		<field name="Theme_DeviceDefault_Dialog_Alert" since="22"/>
-		<field name="Theme_DeviceDefault_Dialog_MinWidth" since="14"/>
-		<field name="Theme_DeviceDefault_Dialog_NoActionBar" since="14"/>
-		<field name="Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" since="14"/>
-		<field name="Theme_DeviceDefault_InputMethod" since="14"/>
-		<field name="Theme_DeviceDefault_Light" since="14"/>
-		<field name="Theme_DeviceDefault_Light_DarkActionBar" since="14"/>
-		<field name="Theme_DeviceDefault_Light_Dialog" since="14"/>
-		<field name="Theme_DeviceDefault_Light_DialogWhenLarge" since="14"/>
-		<field name="Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" since="14"/>
-		<field name="Theme_DeviceDefault_Light_Dialog_Alert" since="22"/>
-		<field name="Theme_DeviceDefault_Light_Dialog_MinWidth" since="14"/>
-		<field name="Theme_DeviceDefault_Light_Dialog_NoActionBar" since="14"/>
-		<field name="Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" since="14"/>
-		<field name="Theme_DeviceDefault_Light_NoActionBar" since="14"/>
-		<field name="Theme_DeviceDefault_Light_NoActionBar_Fullscreen" since="14"/>
-		<field name="Theme_DeviceDefault_Light_NoActionBar_Overscan" since="18"/>
-		<field name="Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor" since="19"/>
-		<field name="Theme_DeviceDefault_Light_Panel" since="14"/>
-		<field name="Theme_DeviceDefault_NoActionBar" since="14"/>
-		<field name="Theme_DeviceDefault_NoActionBar_Fullscreen" since="14"/>
-		<field name="Theme_DeviceDefault_NoActionBar_Overscan" since="18"/>
-		<field name="Theme_DeviceDefault_NoActionBar_TranslucentDecor" since="19"/>
-		<field name="Theme_DeviceDefault_Panel" since="14"/>
-		<field name="Theme_DeviceDefault_Settings" since="21"/>
-		<field name="Theme_DeviceDefault_Wallpaper" since="14"/>
-		<field name="Theme_DeviceDefault_Wallpaper_NoTitleBar" since="14"/>
-		<field name="Theme_Dialog"/>
-		<field name="Theme_Holo" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Dialog" since="11" deprecated="28"/>
-		<field name="Theme_Holo_DialogWhenLarge" since="11" deprecated="28"/>
-		<field name="Theme_Holo_DialogWhenLarge_NoActionBar" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Dialog_MinWidth" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Dialog_NoActionBar" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Dialog_NoActionBar_MinWidth" since="11" deprecated="28"/>
-		<field name="Theme_Holo_InputMethod" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light_DarkActionBar" since="14" deprecated="28"/>
-		<field name="Theme_Holo_Light_Dialog" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light_DialogWhenLarge" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light_DialogWhenLarge_NoActionBar" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light_Dialog_MinWidth" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light_Dialog_NoActionBar" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light_Dialog_NoActionBar_MinWidth" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Light_NoActionBar" since="13" deprecated="28"/>
-		<field name="Theme_Holo_Light_NoActionBar_Fullscreen" since="13" deprecated="28"/>
-		<field name="Theme_Holo_Light_NoActionBar_Overscan" since="18" deprecated="28"/>
-		<field name="Theme_Holo_Light_NoActionBar_TranslucentDecor" since="19" deprecated="28"/>
-		<field name="Theme_Holo_Light_Panel" since="11" deprecated="28"/>
-		<field name="Theme_Holo_NoActionBar" since="11" deprecated="28"/>
-		<field name="Theme_Holo_NoActionBar_Fullscreen" since="11" deprecated="28"/>
-		<field name="Theme_Holo_NoActionBar_Overscan" since="18" deprecated="28"/>
-		<field name="Theme_Holo_NoActionBar_TranslucentDecor" since="19" deprecated="28"/>
-		<field name="Theme_Holo_Panel" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Wallpaper" since="11" deprecated="28"/>
-		<field name="Theme_Holo_Wallpaper_NoTitleBar" since="11" deprecated="28"/>
-		<field name="Theme_InputMethod" since="3"/>
-		<field name="Theme_Light"/>
-		<field name="Theme_Light_NoTitleBar"/>
-		<field name="Theme_Light_NoTitleBar_Fullscreen"/>
-		<field name="Theme_Light_Panel" since="3"/>
-		<field name="Theme_Light_WallpaperSettings" since="5"/>
-		<field name="Theme_Material" since="21"/>
-		<field name="Theme_Material_Dialog" since="21"/>
-		<field name="Theme_Material_DialogWhenLarge" since="21"/>
-		<field name="Theme_Material_DialogWhenLarge_NoActionBar" since="21"/>
-		<field name="Theme_Material_Dialog_Alert" since="21"/>
-		<field name="Theme_Material_Dialog_MinWidth" since="21"/>
-		<field name="Theme_Material_Dialog_NoActionBar" since="21"/>
-		<field name="Theme_Material_Dialog_NoActionBar_MinWidth" since="21"/>
-		<field name="Theme_Material_Dialog_Presentation" since="21"/>
-		<field name="Theme_Material_InputMethod" since="21"/>
-		<field name="Theme_Material_Light" since="21"/>
-		<field name="Theme_Material_Light_DarkActionBar" since="21"/>
-		<field name="Theme_Material_Light_Dialog" since="21"/>
-		<field name="Theme_Material_Light_DialogWhenLarge" since="21"/>
-		<field name="Theme_Material_Light_DialogWhenLarge_DarkActionBar" since="24"/>
-		<field name="Theme_Material_Light_DialogWhenLarge_NoActionBar" since="21"/>
-		<field name="Theme_Material_Light_Dialog_Alert" since="21"/>
-		<field name="Theme_Material_Light_Dialog_MinWidth" since="21"/>
-		<field name="Theme_Material_Light_Dialog_NoActionBar" since="21"/>
-		<field name="Theme_Material_Light_Dialog_NoActionBar_MinWidth" since="21"/>
-		<field name="Theme_Material_Light_Dialog_Presentation" since="21"/>
-		<field name="Theme_Material_Light_LightStatusBar" since="23"/>
-		<field name="Theme_Material_Light_NoActionBar" since="21"/>
-		<field name="Theme_Material_Light_NoActionBar_Fullscreen" since="21"/>
-		<field name="Theme_Material_Light_NoActionBar_Overscan" since="21"/>
-		<field name="Theme_Material_Light_NoActionBar_TranslucentDecor" since="21"/>
-		<field name="Theme_Material_Light_Panel" since="21"/>
-		<field name="Theme_Material_Light_Voice" since="21"/>
-		<field name="Theme_Material_NoActionBar" since="21"/>
-		<field name="Theme_Material_NoActionBar_Fullscreen" since="21"/>
-		<field name="Theme_Material_NoActionBar_Overscan" since="21"/>
-		<field name="Theme_Material_NoActionBar_TranslucentDecor" since="21"/>
-		<field name="Theme_Material_Panel" since="21"/>
-		<field name="Theme_Material_Settings" since="21"/>
-		<field name="Theme_Material_Voice" since="21"/>
-		<field name="Theme_Material_Wallpaper" since="21"/>
-		<field name="Theme_Material_Wallpaper_NoTitleBar" since="21"/>
-		<field name="Theme_NoDisplay" since="3"/>
-		<field name="Theme_NoTitleBar"/>
-		<field name="Theme_NoTitleBar_Fullscreen"/>
-		<field name="Theme_NoTitleBar_OverlayActionModes" since="11"/>
-		<field name="Theme_Panel" since="3"/>
-		<field name="Theme_Translucent"/>
-		<field name="Theme_Translucent_NoTitleBar"/>
-		<field name="Theme_Translucent_NoTitleBar_Fullscreen"/>
-		<field name="Theme_Wallpaper" since="5"/>
-		<field name="Theme_WallpaperSettings" since="5"/>
-		<field name="Theme_Wallpaper_NoTitleBar" since="5"/>
-		<field name="Theme_Wallpaper_NoTitleBar_Fullscreen" since="5"/>
-		<field name="Theme_WithActionBar" since="11"/>
-		<field name="Widget"/>
-		<field name="Widget_AbsListView"/>
-		<field name="Widget_ActionBar" since="11"/>
-		<field name="Widget_ActionBar_TabBar" since="13"/>
-		<field name="Widget_ActionBar_TabText" since="13"/>
-		<field name="Widget_ActionBar_TabView" since="13"/>
-		<field name="Widget_ActionButton" since="11"/>
-		<field name="Widget_ActionButton_CloseMode" since="11"/>
-		<field name="Widget_ActionButton_Overflow" since="11"/>
-		<field name="Widget_AutoCompleteTextView"/>
-		<field name="Widget_Button"/>
-		<field name="Widget_Button_Inset"/>
-		<field name="Widget_Button_Small"/>
-		<field name="Widget_Button_Toggle"/>
-		<field name="Widget_CalendarView" since="11"/>
-		<field name="Widget_CompoundButton"/>
-		<field name="Widget_CompoundButton_CheckBox"/>
-		<field name="Widget_CompoundButton_RadioButton"/>
-		<field name="Widget_CompoundButton_Star"/>
-		<field name="Widget_DatePicker" since="11"/>
-		<field name="Widget_DeviceDefault" since="14"/>
-		<field name="Widget_DeviceDefault_ActionBar" since="14"/>
-		<field name="Widget_DeviceDefault_ActionBar_Solid" since="14"/>
-		<field name="Widget_DeviceDefault_ActionBar_TabBar" since="14"/>
-		<field name="Widget_DeviceDefault_ActionBar_TabText" since="14"/>
-		<field name="Widget_DeviceDefault_ActionBar_TabView" since="14"/>
-		<field name="Widget_DeviceDefault_ActionButton" since="14"/>
-		<field name="Widget_DeviceDefault_ActionButton_CloseMode" since="14"/>
-		<field name="Widget_DeviceDefault_ActionButton_Overflow" since="14"/>
-		<field name="Widget_DeviceDefault_ActionButton_TextButton" since="14"/>
-		<field name="Widget_DeviceDefault_ActionMode" since="14"/>
-		<field name="Widget_DeviceDefault_AutoCompleteTextView" since="14"/>
-		<field name="Widget_DeviceDefault_Button" since="14"/>
-		<field name="Widget_DeviceDefault_Button_Borderless" since="14"/>
-		<field name="Widget_DeviceDefault_Button_Borderless_Colored" since="28"/>
-		<field name="Widget_DeviceDefault_Button_Borderless_Small" since="14"/>
-		<field name="Widget_DeviceDefault_Button_Colored" since="28"/>
-		<field name="Widget_DeviceDefault_Button_Inset" since="14"/>
-		<field name="Widget_DeviceDefault_Button_Small" since="14"/>
-		<field name="Widget_DeviceDefault_Button_Toggle" since="14"/>
-		<field name="Widget_DeviceDefault_CalendarView" since="14"/>
-		<field name="Widget_DeviceDefault_CheckedTextView" since="17"/>
-		<field name="Widget_DeviceDefault_CompoundButton_CheckBox" since="14"/>
-		<field name="Widget_DeviceDefault_CompoundButton_RadioButton" since="14"/>
-		<field name="Widget_DeviceDefault_CompoundButton_Star" since="14"/>
-		<field name="Widget_DeviceDefault_DatePicker" since="14"/>
-		<field name="Widget_DeviceDefault_DropDownItem" since="14"/>
-		<field name="Widget_DeviceDefault_DropDownItem_Spinner" since="14"/>
-		<field name="Widget_DeviceDefault_EditText" since="14"/>
-		<field name="Widget_DeviceDefault_ExpandableListView" since="14"/>
-		<field name="Widget_DeviceDefault_FastScroll" since="21"/>
-		<field name="Widget_DeviceDefault_GridView" since="14"/>
-		<field name="Widget_DeviceDefault_HorizontalScrollView" since="14"/>
-		<field name="Widget_DeviceDefault_ImageButton" since="14"/>
-		<field name="Widget_DeviceDefault_Light" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_Solid" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" since="14" deprecated="21"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_TabBar" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" since="14" deprecated="21"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_TabText" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" since="14" deprecated="21"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_TabView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" since="14" deprecated="21"/>
-		<field name="Widget_DeviceDefault_Light_ActionButton" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionButton_CloseMode" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionButton_Overflow" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionMode" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ActionMode_Inverse" since="14" deprecated="21"/>
-		<field name="Widget_DeviceDefault_Light_AutoCompleteTextView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_Button" since="14"/>
-		<field name="Widget_DeviceDefault_Light_Button_Borderless_Small" since="14"/>
-		<field name="Widget_DeviceDefault_Light_Button_Inset" since="14"/>
-		<field name="Widget_DeviceDefault_Light_Button_Small" since="14"/>
-		<field name="Widget_DeviceDefault_Light_Button_Toggle" since="14"/>
-		<field name="Widget_DeviceDefault_Light_CalendarView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_CheckedTextView" since="17"/>
-		<field name="Widget_DeviceDefault_Light_CompoundButton_CheckBox" since="14"/>
-		<field name="Widget_DeviceDefault_Light_CompoundButton_RadioButton" since="14"/>
-		<field name="Widget_DeviceDefault_Light_CompoundButton_Star" since="14"/>
-		<field name="Widget_DeviceDefault_Light_DropDownItem" since="14"/>
-		<field name="Widget_DeviceDefault_Light_DropDownItem_Spinner" since="14"/>
-		<field name="Widget_DeviceDefault_Light_EditText" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ExpandableListView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_FastScroll" since="21"/>
-		<field name="Widget_DeviceDefault_Light_GridView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_HorizontalScrollView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ImageButton" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ListPopupWindow" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ListView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ListView_DropDown" since="14"/>
-		<field name="Widget_DeviceDefault_Light_MediaRouteButton" since="16"/>
-		<field name="Widget_DeviceDefault_Light_PopupMenu" since="14"/>
-		<field name="Widget_DeviceDefault_Light_PopupWindow" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar_Horizontal" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar_Inverse" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar_Large" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar_Small" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ProgressBar_Small_Title" since="14"/>
-		<field name="Widget_DeviceDefault_Light_RatingBar" since="14"/>
-		<field name="Widget_DeviceDefault_Light_RatingBar_Indicator" since="14"/>
-		<field name="Widget_DeviceDefault_Light_RatingBar_Small" since="14"/>
-		<field name="Widget_DeviceDefault_Light_ScrollView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_SeekBar" since="14"/>
-		<field name="Widget_DeviceDefault_Light_Spinner" since="14"/>
-		<field name="Widget_DeviceDefault_Light_StackView" since="21"/>
-		<field name="Widget_DeviceDefault_Light_Tab" since="14"/>
-		<field name="Widget_DeviceDefault_Light_TabWidget" since="14"/>
-		<field name="Widget_DeviceDefault_Light_TextView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_TextView_SpinnerItem" since="14"/>
-		<field name="Widget_DeviceDefault_Light_WebTextView" since="14"/>
-		<field name="Widget_DeviceDefault_Light_WebView" since="14"/>
-		<field name="Widget_DeviceDefault_ListPopupWindow" since="14"/>
-		<field name="Widget_DeviceDefault_ListView" since="14"/>
-		<field name="Widget_DeviceDefault_ListView_DropDown" since="14"/>
-		<field name="Widget_DeviceDefault_MediaRouteButton" since="16"/>
-		<field name="Widget_DeviceDefault_PopupMenu" since="14"/>
-		<field name="Widget_DeviceDefault_PopupWindow" since="14"/>
-		<field name="Widget_DeviceDefault_ProgressBar" since="14"/>
-		<field name="Widget_DeviceDefault_ProgressBar_Horizontal" since="14"/>
-		<field name="Widget_DeviceDefault_ProgressBar_Large" since="14"/>
-		<field name="Widget_DeviceDefault_ProgressBar_Small" since="14"/>
-		<field name="Widget_DeviceDefault_ProgressBar_Small_Title" since="14"/>
-		<field name="Widget_DeviceDefault_RatingBar" since="14"/>
-		<field name="Widget_DeviceDefault_RatingBar_Indicator" since="14"/>
-		<field name="Widget_DeviceDefault_RatingBar_Small" since="14"/>
-		<field name="Widget_DeviceDefault_ScrollView" since="14"/>
-		<field name="Widget_DeviceDefault_SeekBar" since="14"/>
-		<field name="Widget_DeviceDefault_Spinner" since="14"/>
-		<field name="Widget_DeviceDefault_StackView" since="21"/>
-		<field name="Widget_DeviceDefault_Tab" since="14"/>
-		<field name="Widget_DeviceDefault_TabWidget" since="14"/>
-		<field name="Widget_DeviceDefault_TextView" since="14"/>
-		<field name="Widget_DeviceDefault_TextView_SpinnerItem" since="14"/>
-		<field name="Widget_DeviceDefault_WebTextView" since="14"/>
-		<field name="Widget_DeviceDefault_WebView" since="14"/>
-		<field name="Widget_DropDownItem"/>
-		<field name="Widget_DropDownItem_Spinner"/>
-		<field name="Widget_EditText"/>
-		<field name="Widget_ExpandableListView"/>
-		<field name="Widget_FastScroll" since="21"/>
-		<field name="Widget_FragmentBreadCrumbs" since="11"/>
-		<field name="Widget_Gallery"/>
-		<field name="Widget_GridView"/>
-		<field name="Widget_Holo" since="11"/>
-		<field name="Widget_Holo_ActionBar" since="11"/>
-		<field name="Widget_Holo_ActionBar_Solid" since="14"/>
-		<field name="Widget_Holo_ActionBar_TabBar" since="13"/>
-		<field name="Widget_Holo_ActionBar_TabText" since="13"/>
-		<field name="Widget_Holo_ActionBar_TabView" since="13"/>
-		<field name="Widget_Holo_ActionButton" since="11"/>
-		<field name="Widget_Holo_ActionButton_CloseMode" since="11"/>
-		<field name="Widget_Holo_ActionButton_Overflow" since="11"/>
-		<field name="Widget_Holo_ActionButton_TextButton" since="11"/>
-		<field name="Widget_Holo_ActionMode" since="11"/>
-		<field name="Widget_Holo_AutoCompleteTextView" since="11"/>
-		<field name="Widget_Holo_Button" since="11"/>
-		<field name="Widget_Holo_Button_Borderless" since="11"/>
-		<field name="Widget_Holo_Button_Borderless_Small" since="14"/>
-		<field name="Widget_Holo_Button_Inset" since="11"/>
-		<field name="Widget_Holo_Button_Small" since="11"/>
-		<field name="Widget_Holo_Button_Toggle" since="11"/>
-		<field name="Widget_Holo_CalendarView" since="11"/>
-		<field name="Widget_Holo_CheckedTextView" since="17"/>
-		<field name="Widget_Holo_CompoundButton_CheckBox" since="11"/>
-		<field name="Widget_Holo_CompoundButton_RadioButton" since="11"/>
-		<field name="Widget_Holo_CompoundButton_Star" since="11"/>
-		<field name="Widget_Holo_DatePicker" since="11"/>
-		<field name="Widget_Holo_DropDownItem" since="11"/>
-		<field name="Widget_Holo_DropDownItem_Spinner" since="11"/>
-		<field name="Widget_Holo_EditText" since="11"/>
-		<field name="Widget_Holo_ExpandableListView" since="11"/>
-		<field name="Widget_Holo_GridView" since="11"/>
-		<field name="Widget_Holo_HorizontalScrollView" since="11"/>
-		<field name="Widget_Holo_ImageButton" since="11"/>
-		<field name="Widget_Holo_Light" since="11"/>
-		<field name="Widget_Holo_Light_ActionBar" since="11"/>
-		<field name="Widget_Holo_Light_ActionBar_Solid" since="14"/>
-		<field name="Widget_Holo_Light_ActionBar_Solid_Inverse" since="14"/>
-		<field name="Widget_Holo_Light_ActionBar_TabBar" since="13"/>
-		<field name="Widget_Holo_Light_ActionBar_TabBar_Inverse" since="14"/>
-		<field name="Widget_Holo_Light_ActionBar_TabText" since="13"/>
-		<field name="Widget_Holo_Light_ActionBar_TabText_Inverse" since="14"/>
-		<field name="Widget_Holo_Light_ActionBar_TabView" since="13"/>
-		<field name="Widget_Holo_Light_ActionBar_TabView_Inverse" since="14"/>
-		<field name="Widget_Holo_Light_ActionButton" since="11"/>
-		<field name="Widget_Holo_Light_ActionButton_CloseMode" since="11"/>
-		<field name="Widget_Holo_Light_ActionButton_Overflow" since="11"/>
-		<field name="Widget_Holo_Light_ActionMode" since="11"/>
-		<field name="Widget_Holo_Light_ActionMode_Inverse" since="14"/>
-		<field name="Widget_Holo_Light_AutoCompleteTextView" since="11"/>
-		<field name="Widget_Holo_Light_Button" since="11"/>
-		<field name="Widget_Holo_Light_Button_Borderless_Small" since="14"/>
-		<field name="Widget_Holo_Light_Button_Inset" since="11"/>
-		<field name="Widget_Holo_Light_Button_Small" since="11"/>
-		<field name="Widget_Holo_Light_Button_Toggle" since="11"/>
-		<field name="Widget_Holo_Light_CalendarView" since="11"/>
-		<field name="Widget_Holo_Light_CheckedTextView" since="17"/>
-		<field name="Widget_Holo_Light_CompoundButton_CheckBox" since="11"/>
-		<field name="Widget_Holo_Light_CompoundButton_RadioButton" since="11"/>
-		<field name="Widget_Holo_Light_CompoundButton_Star" since="11"/>
-		<field name="Widget_Holo_Light_DropDownItem" since="11"/>
-		<field name="Widget_Holo_Light_DropDownItem_Spinner" since="11"/>
-		<field name="Widget_Holo_Light_EditText" since="11"/>
-		<field name="Widget_Holo_Light_ExpandableListView" since="11"/>
-		<field name="Widget_Holo_Light_GridView" since="11"/>
-		<field name="Widget_Holo_Light_HorizontalScrollView" since="11"/>
-		<field name="Widget_Holo_Light_ImageButton" since="11"/>
-		<field name="Widget_Holo_Light_ListPopupWindow" since="11"/>
-		<field name="Widget_Holo_Light_ListView" since="11"/>
-		<field name="Widget_Holo_Light_ListView_DropDown" since="11"/>
-		<field name="Widget_Holo_Light_MediaRouteButton" since="16"/>
-		<field name="Widget_Holo_Light_PopupMenu" since="11"/>
-		<field name="Widget_Holo_Light_PopupWindow" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar_Horizontal" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar_Inverse" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar_Large" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar_Large_Inverse" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar_Small" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar_Small_Inverse" since="11"/>
-		<field name="Widget_Holo_Light_ProgressBar_Small_Title" since="11"/>
-		<field name="Widget_Holo_Light_RatingBar" since="11"/>
-		<field name="Widget_Holo_Light_RatingBar_Indicator" since="11"/>
-		<field name="Widget_Holo_Light_RatingBar_Small" since="11"/>
-		<field name="Widget_Holo_Light_ScrollView" since="11"/>
-		<field name="Widget_Holo_Light_SeekBar" since="11"/>
-		<field name="Widget_Holo_Light_Spinner" since="11"/>
-		<field name="Widget_Holo_Light_Tab" since="11"/>
-		<field name="Widget_Holo_Light_TabWidget" since="11"/>
-		<field name="Widget_Holo_Light_TextView" since="11"/>
-		<field name="Widget_Holo_Light_TextView_SpinnerItem" since="11"/>
-		<field name="Widget_Holo_Light_WebTextView" since="11"/>
-		<field name="Widget_Holo_Light_WebView" since="11"/>
-		<field name="Widget_Holo_ListPopupWindow" since="11"/>
-		<field name="Widget_Holo_ListView" since="11"/>
-		<field name="Widget_Holo_ListView_DropDown" since="11"/>
-		<field name="Widget_Holo_MediaRouteButton" since="16"/>
-		<field name="Widget_Holo_PopupMenu" since="11"/>
-		<field name="Widget_Holo_PopupWindow" since="11"/>
-		<field name="Widget_Holo_ProgressBar" since="11"/>
-		<field name="Widget_Holo_ProgressBar_Horizontal" since="11"/>
-		<field name="Widget_Holo_ProgressBar_Large" since="11"/>
-		<field name="Widget_Holo_ProgressBar_Small" since="11"/>
-		<field name="Widget_Holo_ProgressBar_Small_Title" since="11"/>
-		<field name="Widget_Holo_RatingBar" since="11"/>
-		<field name="Widget_Holo_RatingBar_Indicator" since="11"/>
-		<field name="Widget_Holo_RatingBar_Small" since="11"/>
-		<field name="Widget_Holo_ScrollView" since="11"/>
-		<field name="Widget_Holo_SeekBar" since="11"/>
-		<field name="Widget_Holo_Spinner" since="11"/>
-		<field name="Widget_Holo_Tab" since="11"/>
-		<field name="Widget_Holo_TabWidget" since="11"/>
-		<field name="Widget_Holo_TextView" since="11"/>
-		<field name="Widget_Holo_TextView_SpinnerItem" since="11"/>
-		<field name="Widget_Holo_WebTextView" since="11"/>
-		<field name="Widget_Holo_WebView" since="11"/>
-		<field name="Widget_ImageButton"/>
-		<field name="Widget_ImageWell"/>
-		<field name="Widget_KeyboardView" since="3"/>
-		<field name="Widget_ListPopupWindow" since="11"/>
-		<field name="Widget_ListView"/>
-		<field name="Widget_ListView_DropDown"/>
-		<field name="Widget_ListView_Menu"/>
-		<field name="Widget_ListView_White"/>
-		<field name="Widget_Material" since="21"/>
-		<field name="Widget_Material_ActionBar" since="21"/>
-		<field name="Widget_Material_ActionBar_Solid" since="21"/>
-		<field name="Widget_Material_ActionBar_TabBar" since="21"/>
-		<field name="Widget_Material_ActionBar_TabText" since="21"/>
-		<field name="Widget_Material_ActionBar_TabView" since="21"/>
-		<field name="Widget_Material_ActionButton" since="21"/>
-		<field name="Widget_Material_ActionButton_CloseMode" since="21"/>
-		<field name="Widget_Material_ActionButton_Overflow" since="21"/>
-		<field name="Widget_Material_ActionMode" since="21"/>
-		<field name="Widget_Material_AutoCompleteTextView" since="21"/>
-		<field name="Widget_Material_Button" since="21"/>
-		<field name="Widget_Material_ButtonBar" since="21"/>
-		<field name="Widget_Material_ButtonBar_AlertDialog" since="21"/>
-		<field name="Widget_Material_Button_Borderless" since="21"/>
-		<field name="Widget_Material_Button_Borderless_Colored" since="21"/>
-		<field name="Widget_Material_Button_Borderless_Small" since="21"/>
-		<field name="Widget_Material_Button_Colored" since="23"/>
-		<field name="Widget_Material_Button_Inset" since="21"/>
-		<field name="Widget_Material_Button_Small" since="21"/>
-		<field name="Widget_Material_Button_Toggle" since="21"/>
-		<field name="Widget_Material_CalendarView" since="21"/>
-		<field name="Widget_Material_CheckedTextView" since="21"/>
-		<field name="Widget_Material_CompoundButton_CheckBox" since="21"/>
-		<field name="Widget_Material_CompoundButton_RadioButton" since="21"/>
-		<field name="Widget_Material_CompoundButton_Star" since="21"/>
-		<field name="Widget_Material_CompoundButton_Switch" since="24"/>
-		<field name="Widget_Material_DatePicker" since="21"/>
-		<field name="Widget_Material_DropDownItem" since="21"/>
-		<field name="Widget_Material_DropDownItem_Spinner" since="21"/>
-		<field name="Widget_Material_EditText" since="21"/>
-		<field name="Widget_Material_ExpandableListView" since="21"/>
-		<field name="Widget_Material_FastScroll" since="21"/>
-		<field name="Widget_Material_GridView" since="21"/>
-		<field name="Widget_Material_HorizontalScrollView" since="21"/>
-		<field name="Widget_Material_ImageButton" since="21"/>
-		<field name="Widget_Material_Light" since="21"/>
-		<field name="Widget_Material_Light_ActionBar" since="21"/>
-		<field name="Widget_Material_Light_ActionBar_Solid" since="21"/>
-		<field name="Widget_Material_Light_ActionBar_TabBar" since="21"/>
-		<field name="Widget_Material_Light_ActionBar_TabText" since="21"/>
-		<field name="Widget_Material_Light_ActionBar_TabView" since="21"/>
-		<field name="Widget_Material_Light_ActionButton" since="21"/>
-		<field name="Widget_Material_Light_ActionButton_CloseMode" since="21"/>
-		<field name="Widget_Material_Light_ActionButton_Overflow" since="21"/>
-		<field name="Widget_Material_Light_ActionMode" since="21"/>
-		<field name="Widget_Material_Light_AutoCompleteTextView" since="21"/>
-		<field name="Widget_Material_Light_Button" since="21"/>
-		<field name="Widget_Material_Light_ButtonBar" since="21"/>
-		<field name="Widget_Material_Light_ButtonBar_AlertDialog" since="21"/>
-		<field name="Widget_Material_Light_Button_Borderless" since="21"/>
-		<field name="Widget_Material_Light_Button_Borderless_Colored" since="21"/>
-		<field name="Widget_Material_Light_Button_Borderless_Small" since="21"/>
-		<field name="Widget_Material_Light_Button_Inset" since="21"/>
-		<field name="Widget_Material_Light_Button_Small" since="21"/>
-		<field name="Widget_Material_Light_Button_Toggle" since="21"/>
-		<field name="Widget_Material_Light_CalendarView" since="21"/>
-		<field name="Widget_Material_Light_CheckedTextView" since="21"/>
-		<field name="Widget_Material_Light_CompoundButton_CheckBox" since="21"/>
-		<field name="Widget_Material_Light_CompoundButton_RadioButton" since="21"/>
-		<field name="Widget_Material_Light_CompoundButton_Star" since="21"/>
-		<field name="Widget_Material_Light_CompoundButton_Switch" since="24"/>
-		<field name="Widget_Material_Light_DatePicker" since="21"/>
-		<field name="Widget_Material_Light_DropDownItem" since="21"/>
-		<field name="Widget_Material_Light_DropDownItem_Spinner" since="21"/>
-		<field name="Widget_Material_Light_EditText" since="21"/>
-		<field name="Widget_Material_Light_ExpandableListView" since="21"/>
-		<field name="Widget_Material_Light_FastScroll" since="21"/>
-		<field name="Widget_Material_Light_GridView" since="21"/>
-		<field name="Widget_Material_Light_HorizontalScrollView" since="21"/>
-		<field name="Widget_Material_Light_ImageButton" since="21"/>
-		<field name="Widget_Material_Light_ListPopupWindow" since="21"/>
-		<field name="Widget_Material_Light_ListView" since="21"/>
-		<field name="Widget_Material_Light_ListView_DropDown" since="21"/>
-		<field name="Widget_Material_Light_MediaRouteButton" since="21"/>
-		<field name="Widget_Material_Light_NumberPicker" since="24"/>
-		<field name="Widget_Material_Light_PopupMenu" since="21"/>
-		<field name="Widget_Material_Light_PopupMenu_Overflow" since="21"/>
-		<field name="Widget_Material_Light_PopupWindow" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar_Horizontal" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar_Inverse" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar_Large" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar_Large_Inverse" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar_Small" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar_Small_Inverse" since="21"/>
-		<field name="Widget_Material_Light_ProgressBar_Small_Title" since="21"/>
-		<field name="Widget_Material_Light_RatingBar" since="21"/>
-		<field name="Widget_Material_Light_RatingBar_Indicator" since="21"/>
-		<field name="Widget_Material_Light_RatingBar_Small" since="21"/>
-		<field name="Widget_Material_Light_ScrollView" since="21"/>
-		<field name="Widget_Material_Light_SearchView" since="21"/>
-		<field name="Widget_Material_Light_SeekBar" since="21"/>
-		<field name="Widget_Material_Light_SegmentedButton" since="21"/>
-		<field name="Widget_Material_Light_Spinner" since="21"/>
-		<field name="Widget_Material_Light_Spinner_Underlined" since="21"/>
-		<field name="Widget_Material_Light_StackView" since="21"/>
-		<field name="Widget_Material_Light_Tab" since="21"/>
-		<field name="Widget_Material_Light_TabWidget" since="21"/>
-		<field name="Widget_Material_Light_TextView" since="21"/>
-		<field name="Widget_Material_Light_TextView_SpinnerItem" since="21"/>
-		<field name="Widget_Material_Light_TimePicker" since="21"/>
-		<field name="Widget_Material_Light_WebTextView" since="21"/>
-		<field name="Widget_Material_Light_WebView" since="21"/>
-		<field name="Widget_Material_ListPopupWindow" since="21"/>
-		<field name="Widget_Material_ListView" since="21"/>
-		<field name="Widget_Material_ListView_DropDown" since="21"/>
-		<field name="Widget_Material_MediaRouteButton" since="21"/>
-		<field name="Widget_Material_NumberPicker" since="24"/>
-		<field name="Widget_Material_PopupMenu" since="21"/>
-		<field name="Widget_Material_PopupMenu_Overflow" since="21"/>
-		<field name="Widget_Material_PopupWindow" since="21"/>
-		<field name="Widget_Material_ProgressBar" since="21"/>
-		<field name="Widget_Material_ProgressBar_Horizontal" since="21"/>
-		<field name="Widget_Material_ProgressBar_Large" since="21"/>
-		<field name="Widget_Material_ProgressBar_Small" since="21"/>
-		<field name="Widget_Material_ProgressBar_Small_Title" since="21"/>
-		<field name="Widget_Material_RatingBar" since="21"/>
-		<field name="Widget_Material_RatingBar_Indicator" since="21"/>
-		<field name="Widget_Material_RatingBar_Small" since="21"/>
-		<field name="Widget_Material_ScrollView" since="21"/>
-		<field name="Widget_Material_SearchView" since="21"/>
-		<field name="Widget_Material_SeekBar" since="21"/>
-		<field name="Widget_Material_SeekBar_Discrete" since="24"/>
-		<field name="Widget_Material_SegmentedButton" since="21"/>
-		<field name="Widget_Material_Spinner" since="21"/>
-		<field name="Widget_Material_Spinner_Underlined" since="21"/>
-		<field name="Widget_Material_StackView" since="21"/>
-		<field name="Widget_Material_Tab" since="21"/>
-		<field name="Widget_Material_TabWidget" since="21"/>
-		<field name="Widget_Material_TextView" since="21"/>
-		<field name="Widget_Material_TextView_SpinnerItem" since="21"/>
-		<field name="Widget_Material_TimePicker" since="21"/>
-		<field name="Widget_Material_Toolbar" since="21"/>
-		<field name="Widget_Material_Toolbar_Button_Navigation" since="21"/>
-		<field name="Widget_Material_WebTextView" since="21"/>
-		<field name="Widget_Material_WebView" since="21"/>
-		<field name="Widget_PopupMenu" since="11"/>
-		<field name="Widget_PopupWindow"/>
-		<field name="Widget_ProgressBar"/>
-		<field name="Widget_ProgressBar_Horizontal"/>
-		<field name="Widget_ProgressBar_Inverse" since="4"/>
-		<field name="Widget_ProgressBar_Large"/>
-		<field name="Widget_ProgressBar_Large_Inverse" since="4"/>
-		<field name="Widget_ProgressBar_Small"/>
-		<field name="Widget_ProgressBar_Small_Inverse" since="4"/>
-		<field name="Widget_RatingBar"/>
-		<field name="Widget_ScrollView"/>
-		<field name="Widget_SeekBar"/>
-		<field name="Widget_Spinner"/>
-		<field name="Widget_Spinner_DropDown" since="11"/>
-		<field name="Widget_StackView" since="21"/>
-		<field name="Widget_TabWidget"/>
-		<field name="Widget_TextView"/>
-		<field name="Widget_TextView_PopupMenu"/>
-		<field name="Widget_TextView_SpinnerItem"/>
-		<field name="Widget_Toolbar" since="21"/>
-		<field name="Widget_Toolbar_Button_Navigation" since="21"/>
-		<field name="Widget_WebView"/>
-	</class>
-	<class name="android/R$transition" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="explode"/>
-		<field name="fade"/>
-		<field name="move"/>
-		<field name="no_transition"/>
-		<field name="slide_bottom"/>
-		<field name="slide_left"/>
-		<field name="slide_right"/>
-		<field name="slide_top"/>
-	</class>
-	<class name="android/R$xml" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityButtonController" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isAccessibilityButtonAvailable()Z"/>
-		<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;)V"/>
-		<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;Landroid/os/Handler;)V"/>
-		<method name="unregisterAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;)V"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAvailabilityChanged(Landroid/accessibilityservice/AccessibilityButtonController;Z)V"/>
-		<method name="onClicked(Landroid/accessibilityservice/AccessibilityButtonController;)V"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityService" since="4">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="disableSelf()V" since="24"/>
-		<method name="dispatchGesture(Landroid/accessibilityservice/GestureDescription;Landroid/accessibilityservice/AccessibilityService$GestureResultCallback;Landroid/os/Handler;)Z" since="24"/>
-		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="21"/>
-		<method name="getAccessibilityButtonController()Landroid/accessibilityservice/AccessibilityButtonController;" since="26"/>
-		<method name="getFingerprintGestureController()Landroid/accessibilityservice/FingerprintGestureController;" since="26"/>
-		<method name="getMagnificationController()Landroid/accessibilityservice/AccessibilityService$MagnificationController;" since="24"/>
-		<method name="getRootInActiveWindow()Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
-		<method name="getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;" since="16"/>
-		<method name="getSoftKeyboardController()Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController;" since="24"/>
-		<method name="getWindows()Ljava/util/List;" since="21"/>
-		<method name="onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V"/>
-		<method name="onGesture(I)Z" since="16"/>
-		<method name="onInterrupt()V"/>
-		<method name="onKeyEvent(Landroid/view/KeyEvent;)Z" since="18"/>
-		<method name="onServiceConnected()V"/>
-		<method name="performGlobalAction(I)Z" since="16"/>
-		<method name="setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V"/>
-		<field name="GESTURE_SWIPE_DOWN" since="16"/>
-		<field name="GESTURE_SWIPE_DOWN_AND_LEFT" since="16"/>
-		<field name="GESTURE_SWIPE_DOWN_AND_RIGHT" since="16"/>
-		<field name="GESTURE_SWIPE_DOWN_AND_UP" since="16"/>
-		<field name="GESTURE_SWIPE_LEFT" since="16"/>
-		<field name="GESTURE_SWIPE_LEFT_AND_DOWN" since="16"/>
-		<field name="GESTURE_SWIPE_LEFT_AND_RIGHT" since="16"/>
-		<field name="GESTURE_SWIPE_LEFT_AND_UP" since="16"/>
-		<field name="GESTURE_SWIPE_RIGHT" since="16"/>
-		<field name="GESTURE_SWIPE_RIGHT_AND_DOWN" since="16"/>
-		<field name="GESTURE_SWIPE_RIGHT_AND_LEFT" since="16"/>
-		<field name="GESTURE_SWIPE_RIGHT_AND_UP" since="16"/>
-		<field name="GESTURE_SWIPE_UP" since="16"/>
-		<field name="GESTURE_SWIPE_UP_AND_DOWN" since="16"/>
-		<field name="GESTURE_SWIPE_UP_AND_LEFT" since="16"/>
-		<field name="GESTURE_SWIPE_UP_AND_RIGHT" since="16"/>
-		<field name="GLOBAL_ACTION_BACK" since="16"/>
-		<field name="GLOBAL_ACTION_HOME" since="16"/>
-		<field name="GLOBAL_ACTION_LOCK_SCREEN" since="28"/>
-		<field name="GLOBAL_ACTION_NOTIFICATIONS" since="16"/>
-		<field name="GLOBAL_ACTION_POWER_DIALOG" since="21"/>
-		<field name="GLOBAL_ACTION_QUICK_SETTINGS" since="17"/>
-		<field name="GLOBAL_ACTION_RECENTS" since="16"/>
-		<field name="GLOBAL_ACTION_TAKE_SCREENSHOT" since="28"/>
-		<field name="GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN" since="24"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA" since="14"/>
-		<field name="SHOW_MODE_AUTO" since="24"/>
-		<field name="SHOW_MODE_HIDDEN" since="24"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityService$GestureResultCallback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCancelled(Landroid/accessibilityservice/GestureDescription;)V"/>
-		<method name="onCompleted(Landroid/accessibilityservice/GestureDescription;)V"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityService$MagnificationController" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/accessibilityservice/AccessibilityService;Ljava/lang/Object;)V" since="29"/>
-		<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;)V"/>
-		<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;Landroid/os/Handler;)V"/>
-		<method name="getCenterX()F"/>
-		<method name="getCenterY()F"/>
-		<method name="getMagnificationRegion()Landroid/graphics/Region;"/>
-		<method name="getScale()F"/>
-		<method name="removeListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;)Z"/>
-		<method name="reset(Z)Z"/>
-		<method name="setCenter(FFZ)Z"/>
-		<method name="setScale(FZ)Z"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onMagnificationChanged(Landroid/accessibilityservice/AccessibilityService$MagnificationController;Landroid/graphics/Region;FFF)V"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityService$SoftKeyboardController" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/accessibilityservice/AccessibilityService;Ljava/lang/Object;)V" since="29"/>
-		<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;)V"/>
-		<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;Landroid/os/Handler;)V"/>
-		<method name="getShowMode()I"/>
-		<method name="removeOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;)Z"/>
-		<method name="setShowMode(I)Z"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onShowModeChanged(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController;I)V"/>
-	</class>
-	<class name="android/accessibilityservice/AccessibilityServiceInfo" since="4">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="capabilityToString(I)Ljava/lang/String;" since="18"/>
-		<method name="feedbackTypeToString(I)Ljava/lang/String;" since="14"/>
-		<method name="flagToString(I)Ljava/lang/String;" since="14"/>
-		<method name="getCanRetrieveWindowContent()Z" since="14" deprecated="18"/>
-		<method name="getCapabilities()I" since="18"/>
-		<method name="getDescription()Ljava/lang/String;" since="14" deprecated="16"/>
-		<method name="getId()Ljava/lang/String;" since="14"/>
-		<method name="getResolveInfo()Landroid/content/pm/ResolveInfo;" since="14"/>
-		<method name="getSettingsActivityName()Ljava/lang/String;" since="14"/>
-		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/String;" since="16"/>
-		<method name="loadSummary(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="26"/>
-		<field name="CAPABILITY_CAN_CONTROL_MAGNIFICATION" since="24"/>
-		<field name="CAPABILITY_CAN_PERFORM_GESTURES" since="24"/>
-		<field name="CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26"/>
-		<field name="CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS" since="18"/>
-		<field name="CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES" since="26"/>
-		<field name="CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION" since="18"/>
-		<field name="CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT" since="18"/>
-		<field name="CREATOR"/>
-		<field name="DEFAULT"/>
-		<field name="FEEDBACK_ALL_MASK" since="14"/>
-		<field name="FEEDBACK_AUDIBLE"/>
-		<field name="FEEDBACK_BRAILLE" since="17"/>
-		<field name="FEEDBACK_GENERIC"/>
-		<field name="FEEDBACK_HAPTIC"/>
-		<field name="FEEDBACK_SPOKEN"/>
-		<field name="FEEDBACK_VISUAL"/>
-		<field name="FLAG_ENABLE_ACCESSIBILITY_VOLUME" since="26"/>
-		<field name="FLAG_INCLUDE_NOT_IMPORTANT_VIEWS" since="16"/>
-		<field name="FLAG_REPORT_VIEW_IDS" since="18"/>
-		<field name="FLAG_REQUEST_ACCESSIBILITY_BUTTON" since="26"/>
-		<field name="FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26"/>
-		<field name="FLAG_REQUEST_FILTER_KEY_EVENTS" since="18"/>
-		<field name="FLAG_REQUEST_FINGERPRINT_GESTURES" since="26"/>
-		<field name="FLAG_REQUEST_TOUCH_EXPLORATION_MODE" since="16"/>
-		<field name="FLAG_RETRIEVE_INTERACTIVE_WINDOWS" since="21"/>
-		<field name="eventTypes"/>
-		<field name="feedbackType"/>
-		<field name="flags"/>
-		<field name="notificationTimeout"/>
-		<field name="packageNames"/>
-	</class>
-	<class name="android/accessibilityservice/FingerprintGestureController" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isGestureDetectionAvailable()Z"/>
-		<method name="registerFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;Landroid/os/Handler;)V"/>
-		<method name="unregisterFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;)V"/>
-		<field name="FINGERPRINT_GESTURE_SWIPE_DOWN"/>
-		<field name="FINGERPRINT_GESTURE_SWIPE_LEFT"/>
-		<field name="FINGERPRINT_GESTURE_SWIPE_RIGHT"/>
-		<field name="FINGERPRINT_GESTURE_SWIPE_UP"/>
-	</class>
-	<class name="android/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGestureDetected(I)V"/>
-		<method name="onGestureDetectionAvailabilityChanged(Z)V"/>
-	</class>
-	<class name="android/accessibilityservice/GestureDescription" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMaxGestureDuration()J"/>
-		<method name="getMaxStrokeCount()I"/>
-		<method name="getStroke(I)Landroid/accessibilityservice/GestureDescription$StrokeDescription;"/>
-		<method name="getStrokeCount()I"/>
-	</class>
-	<class name="android/accessibilityservice/GestureDescription$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addStroke(Landroid/accessibilityservice/GestureDescription$StrokeDescription;)Landroid/accessibilityservice/GestureDescription$Builder;"/>
-		<method name="build()Landroid/accessibilityservice/GestureDescription;"/>
-	</class>
-	<class name="android/accessibilityservice/GestureDescription$StrokeDescription" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/graphics/Path;JJ)V"/>
-		<method name="&lt;init>(Landroid/graphics/Path;JJZ)V" since="26"/>
-		<method name="continueStroke(Landroid/graphics/Path;JJZ)Landroid/accessibilityservice/GestureDescription$StrokeDescription;" since="26"/>
-		<method name="getDuration()J"/>
-		<method name="getPath()Landroid/graphics/Path;"/>
-		<method name="getStartTime()J"/>
-		<method name="willContinue()Z" since="26"/>
-	</class>
-	<class name="android/accounts/AbstractAccountAuthenticator" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="addAccount(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
-		<method name="addAccountFromCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)Landroid/os/Bundle;" since="18"/>
-		<method name="confirmCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
-		<method name="editProperties(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;)Landroid/os/Bundle;"/>
-		<method name="finishSession(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26"/>
-		<method name="getAccountCredentialsForCloning(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;)Landroid/os/Bundle;" since="18"/>
-		<method name="getAccountRemovalAllowed(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;)Landroid/os/Bundle;"/>
-		<method name="getAuthToken(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
-		<method name="getAuthTokenLabel(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getIBinder()Landroid/os/IBinder;"/>
-		<method name="hasFeatures(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)Landroid/os/Bundle;"/>
-		<method name="isCredentialsUpdateSuggested(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;)Landroid/os/Bundle;" since="26"/>
-		<method name="startAddAccountSession(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26"/>
-		<method name="startUpdateCredentialsSession(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26"/>
-		<method name="updateCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
-		<field name="KEY_CUSTOM_TOKEN_EXPIRY" since="23"/>
-	</class>
-	<class name="android/accounts/Account" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-		<field name="name"/>
-		<field name="type"/>
-	</class>
-	<class name="android/accounts/AccountAuthenticatorActivity" since="5">
-		<extends name="android/app/Activity"/>
-		<method name="&lt;init>()V"/>
-		<method name="setAccountAuthenticatorResult(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/accounts/AccountAuthenticatorResponse" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="onError(ILjava/lang/String;)V"/>
-		<method name="onRequestContinued()V"/>
-		<method name="onResult(Landroid/os/Bundle;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/accounts/AccountManager" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addAccount(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
-		<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Z"/>
-		<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/Map;)Z" since="26"/>
-		<method name="addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z)V"/>
-		<method name="addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z[Ljava/lang/String;)V" since="26"/>
-		<method name="blockingGetAuthToken(Landroid/accounts/Account;Ljava/lang/String;Z)Ljava/lang/String;"/>
-		<method name="clearPassword(Landroid/accounts/Account;)V"/>
-		<method name="confirmCredentials(Landroid/accounts/Account;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
-		<method name="editProperties(Ljava/lang/String;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
-		<method name="finishSession(Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
-		<method name="get(Landroid/content/Context;)Landroid/accounts/AccountManager;"/>
-		<method name="getAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;)I" since="26"/>
-		<method name="getAccounts()[Landroid/accounts/Account;"/>
-		<method name="getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;" since="26"/>
-		<method name="getAccountsByType(Ljava/lang/String;)[Landroid/accounts/Account;"/>
-		<method name="getAccountsByTypeAndFeatures(Ljava/lang/String;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
-		<method name="getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;" since="18"/>
-		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
-		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="14"/>
-		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="16"/>
-		<method name="getAuthTokenByFeatures(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/Bundle;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
-		<method name="getAuthenticatorTypes()[Landroid/accounts/AuthenticatorDescription;"/>
-		<method name="getPackagesAndVisibilityForAccount(Landroid/accounts/Account;)Ljava/util/Map;" since="26"/>
-		<method name="getPassword(Landroid/accounts/Account;)Ljava/lang/String;"/>
-		<method name="getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;" since="21"/>
-		<method name="getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="hasFeatures(Landroid/accounts/Account;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="8"/>
-		<method name="invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="isCredentialsUpdateSuggested(Landroid/accounts/Account;Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
-		<method name="newChooseAccountIntent(Landroid/accounts/Account;Ljava/util/ArrayList;[Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;" since="14" deprecated="23"/>
-		<method name="newChooseAccountIntent(Landroid/accounts/Account;Ljava/util/List;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;" since="23"/>
-		<method name="notifyAccountAuthenticated(Landroid/accounts/Account;)Z" since="23"/>
-		<method name="peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="removeAccount(Landroid/accounts/Account;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="22"/>
-		<method name="removeAccount(Landroid/accounts/Account;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="22"/>
-		<method name="removeAccountExplicitly(Landroid/accounts/Account;)Z" since="22"/>
-		<method name="removeOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;)V"/>
-		<method name="renameAccount(Landroid/accounts/Account;Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="21"/>
-		<method name="setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;I)Z" since="26"/>
-		<method name="setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setPassword(Landroid/accounts/Account;Ljava/lang/String;)V"/>
-		<method name="setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="startAddAccountSession(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
-		<method name="startUpdateCredentialsSession(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
-		<method name="updateCredentials(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
-		<field name="ACTION_ACCOUNT_REMOVED" since="26"/>
-		<field name="ACTION_AUTHENTICATOR_INTENT"/>
-		<field name="AUTHENTICATOR_ATTRIBUTES_NAME"/>
-		<field name="AUTHENTICATOR_META_DATA_NAME"/>
-		<field name="ERROR_CODE_BAD_ARGUMENTS"/>
-		<field name="ERROR_CODE_BAD_AUTHENTICATION" since="18"/>
-		<field name="ERROR_CODE_BAD_REQUEST"/>
-		<field name="ERROR_CODE_CANCELED"/>
-		<field name="ERROR_CODE_INVALID_RESPONSE"/>
-		<field name="ERROR_CODE_NETWORK_ERROR"/>
-		<field name="ERROR_CODE_REMOTE_EXCEPTION"/>
-		<field name="ERROR_CODE_UNSUPPORTED_OPERATION"/>
-		<field name="KEY_ACCOUNTS"/>
-		<field name="KEY_ACCOUNT_AUTHENTICATOR_RESPONSE"/>
-		<field name="KEY_ACCOUNT_MANAGER_RESPONSE"/>
-		<field name="KEY_ACCOUNT_NAME"/>
-		<field name="KEY_ACCOUNT_SESSION_BUNDLE" since="26"/>
-		<field name="KEY_ACCOUNT_STATUS_TOKEN" since="26"/>
-		<field name="KEY_ACCOUNT_TYPE"/>
-		<field name="KEY_ANDROID_PACKAGE_NAME" since="14"/>
-		<field name="KEY_AUTHENTICATOR_TYPES"/>
-		<field name="KEY_AUTHTOKEN"/>
-		<field name="KEY_AUTH_FAILED_MESSAGE"/>
-		<field name="KEY_AUTH_TOKEN_LABEL"/>
-		<field name="KEY_BOOLEAN_RESULT"/>
-		<field name="KEY_CALLER_PID" since="11"/>
-		<field name="KEY_CALLER_UID" since="11"/>
-		<field name="KEY_ERROR_CODE"/>
-		<field name="KEY_ERROR_MESSAGE"/>
-		<field name="KEY_INTENT"/>
-		<field name="KEY_LAST_AUTHENTICATED_TIME" since="23"/>
-		<field name="KEY_PASSWORD"/>
-		<field name="KEY_USERDATA"/>
-		<field name="LOGIN_ACCOUNTS_CHANGED_ACTION" deprecated="26"/>
-		<field name="PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE" since="26"/>
-		<field name="PACKAGE_NAME_KEY_LEGACY_VISIBLE" since="26"/>
-		<field name="VISIBILITY_NOT_VISIBLE" since="26"/>
-		<field name="VISIBILITY_UNDEFINED" since="26"/>
-		<field name="VISIBILITY_USER_MANAGED_NOT_VISIBLE" since="26"/>
-		<field name="VISIBILITY_USER_MANAGED_VISIBLE" since="26"/>
-		<field name="VISIBILITY_VISIBLE" since="26"/>
-	</class>
-	<class name="android/accounts/AccountManagerCallback" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="run(Landroid/accounts/AccountManagerFuture;)V"/>
-	</class>
-	<class name="android/accounts/AccountManagerFuture" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="cancel(Z)Z"/>
-		<method name="getResult()Ljava/lang/Object;"/>
-		<method name="getResult(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-		<method name="isCancelled()Z"/>
-		<method name="isDone()Z"/>
-	</class>
-	<class name="android/accounts/AccountsException" since="5">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/accounts/AuthenticatorDescription" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;IIII)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;IIIIZ)V" since="11"/>
-		<method name="newKey(Ljava/lang/String;)Landroid/accounts/AuthenticatorDescription;"/>
-		<field name="CREATOR"/>
-		<field name="accountPreferencesId"/>
-		<field name="customTokens" since="11"/>
-		<field name="iconId"/>
-		<field name="labelId"/>
-		<field name="packageName"/>
-		<field name="smallIconId"/>
-		<field name="type"/>
-	</class>
-	<class name="android/accounts/AuthenticatorException" since="5">
-		<extends name="android/accounts/AccountsException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/accounts/NetworkErrorException" since="5">
-		<extends name="android/accounts/AccountsException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/accounts/OnAccountsUpdateListener" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="onAccountsUpdated([Landroid/accounts/Account;)V"/>
-	</class>
-	<class name="android/accounts/OperationCanceledException" since="5">
-		<extends name="android/accounts/AccountsException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/animation/Animator" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="addListener(Landroid/animation/Animator$AnimatorListener;)V"/>
-		<method name="addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V" since="19"/>
-		<method name="cancel()V"/>
-		<method name="clone()Landroid/animation/Animator;"/>
-		<method name="end()V"/>
-		<method name="getDuration()J"/>
-		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" since="18"/>
-		<method name="getListeners()Ljava/util/ArrayList;"/>
-		<method name="getStartDelay()J"/>
-		<method name="getTotalDuration()J" since="24"/>
-		<method name="isPaused()Z" since="19"/>
-		<method name="isRunning()Z"/>
-		<method name="isStarted()Z" since="14"/>
-		<method name="pause()V" since="19"/>
-		<method name="removeAllListeners()V"/>
-		<method name="removeListener(Landroid/animation/Animator$AnimatorListener;)V"/>
-		<method name="removePauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V" since="19"/>
-		<method name="resume()V" since="19"/>
-		<method name="setDuration(J)Landroid/animation/Animator;"/>
-		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)V"/>
-		<method name="setStartDelay(J)V"/>
-		<method name="setTarget(Ljava/lang/Object;)V"/>
-		<method name="setupEndValues()V"/>
-		<method name="setupStartValues()V"/>
-		<method name="start()V"/>
-		<field name="DURATION_INFINITE" since="24"/>
-	</class>
-	<class name="android/animation/Animator$AnimatorListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onAnimationCancel(Landroid/animation/Animator;)V"/>
-		<method name="onAnimationEnd(Landroid/animation/Animator;)V"/>
-		<method name="onAnimationEnd(Landroid/animation/Animator;Z)V" since="26"/>
-		<method name="onAnimationRepeat(Landroid/animation/Animator;)V"/>
-		<method name="onAnimationStart(Landroid/animation/Animator;)V"/>
-		<method name="onAnimationStart(Landroid/animation/Animator;Z)V" since="26"/>
-	</class>
-	<class name="android/animation/Animator$AnimatorPauseListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onAnimationPause(Landroid/animation/Animator;)V"/>
-		<method name="onAnimationResume(Landroid/animation/Animator;)V"/>
-	</class>
-	<class name="android/animation/AnimatorInflater" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="loadAnimator(Landroid/content/Context;I)Landroid/animation/Animator;"/>
-		<method name="loadStateListAnimator(Landroid/content/Context;I)Landroid/animation/StateListAnimator;" since="21"/>
-	</class>
-	<class name="android/animation/AnimatorListenerAdapter" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/Animator$AnimatorListener"/>
-		<implements name="android/animation/Animator$AnimatorPauseListener" since="19"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/animation/AnimatorSet" since="11">
-		<extends name="android/animation/Animator"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/animation/AnimatorSet;"/>
-		<method name="getChildAnimations()Ljava/util/ArrayList;"/>
-		<method name="getCurrentPlayTime()J" since="26"/>
-		<method name="play(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
-		<method name="playSequentially(Ljava/util/List;)V"/>
-		<method name="playSequentially([Landroid/animation/Animator;)V"/>
-		<method name="playTogether(Ljava/util/Collection;)V"/>
-		<method name="playTogether([Landroid/animation/Animator;)V"/>
-		<method name="reverse()V" since="26"/>
-		<method name="setCurrentPlayTime(J)V" since="26"/>
-		<method name="setDuration(J)Landroid/animation/AnimatorSet;"/>
-	</class>
-	<class name="android/animation/AnimatorSet$Builder" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/animation/AnimatorSet;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/animation/AnimatorSet;Landroid/animation/Animator;)V" since="29"/>
-		<method name="after(J)Landroid/animation/AnimatorSet$Builder;"/>
-		<method name="after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
-		<method name="before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
-		<method name="with(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
-	</class>
-	<class name="android/animation/ArgbEvaluator" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TypeEvaluator"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/animation/BidirectionalTypeConverter" since="21">
-		<extends name="android/animation/TypeConverter"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/Class;)V"/>
-		<method name="convertBack(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="invert()Landroid/animation/BidirectionalTypeConverter;"/>
-	</class>
-	<class name="android/animation/FloatArrayEvaluator" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TypeEvaluator"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([F)V"/>
-		<method name="evaluate(F[F[F)[F"/>
-	</class>
-	<class name="android/animation/FloatEvaluator" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TypeEvaluator"/>
-		<method name="&lt;init>()V"/>
-		<method name="evaluate(FLjava/lang/Number;Ljava/lang/Number;)Ljava/lang/Float;" since="14"/>
-	</class>
-	<class name="android/animation/IntArrayEvaluator" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TypeEvaluator"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([I)V"/>
-		<method name="evaluate(F[I[I)[I"/>
-	</class>
-	<class name="android/animation/IntEvaluator" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TypeEvaluator"/>
-		<method name="&lt;init>()V"/>
-		<method name="evaluate(FLjava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;" since="14"/>
-	</class>
-	<class name="android/animation/Keyframe" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/animation/Keyframe;"/>
-		<method name="getFraction()F"/>
-		<method name="getInterpolator()Landroid/animation/TimeInterpolator;"/>
-		<method name="getType()Ljava/lang/Class;"/>
-		<method name="getValue()Ljava/lang/Object;"/>
-		<method name="hasValue()Z"/>
-		<method name="ofFloat(F)Landroid/animation/Keyframe;"/>
-		<method name="ofFloat(FF)Landroid/animation/Keyframe;"/>
-		<method name="ofInt(F)Landroid/animation/Keyframe;"/>
-		<method name="ofInt(FI)Landroid/animation/Keyframe;"/>
-		<method name="ofObject(F)Landroid/animation/Keyframe;"/>
-		<method name="ofObject(FLjava/lang/Object;)Landroid/animation/Keyframe;"/>
-		<method name="setFraction(F)V"/>
-		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)V"/>
-		<method name="setValue(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/animation/LayoutTransition" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addChild(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
-		<method name="addTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V"/>
-		<method name="disableTransitionType(I)V" since="16"/>
-		<method name="enableTransitionType(I)V" since="16"/>
-		<method name="getAnimator(I)Landroid/animation/Animator;"/>
-		<method name="getDuration(I)J"/>
-		<method name="getInterpolator(I)Landroid/animation/TimeInterpolator;"/>
-		<method name="getStagger(I)J"/>
-		<method name="getStartDelay(I)J"/>
-		<method name="getTransitionListeners()Ljava/util/List;"/>
-		<method name="hideChild(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="16"/>
-		<method name="hideChild(Landroid/view/ViewGroup;Landroid/view/View;I)V" since="16"/>
-		<method name="isChangingLayout()Z"/>
-		<method name="isRunning()Z"/>
-		<method name="isTransitionTypeEnabled(I)Z" since="16"/>
-		<method name="removeChild(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
-		<method name="removeTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V"/>
-		<method name="setAnimateParentHierarchy(Z)V" since="14"/>
-		<method name="setAnimator(ILandroid/animation/Animator;)V"/>
-		<method name="setDuration(IJ)V"/>
-		<method name="setDuration(J)V"/>
-		<method name="setInterpolator(ILandroid/animation/TimeInterpolator;)V"/>
-		<method name="setStagger(IJ)V"/>
-		<method name="setStartDelay(IJ)V"/>
-		<method name="showChild(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="16"/>
-		<method name="showChild(Landroid/view/ViewGroup;Landroid/view/View;I)V" since="16"/>
-		<field name="APPEARING"/>
-		<field name="CHANGE_APPEARING"/>
-		<field name="CHANGE_DISAPPEARING"/>
-		<field name="CHANGING" since="16"/>
-		<field name="DISAPPEARING"/>
-	</class>
-	<class name="android/animation/LayoutTransition$TransitionListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="endTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V"/>
-		<method name="startTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V"/>
-	</class>
-	<class name="android/animation/ObjectAnimator" since="11">
-		<extends name="android/animation/ValueAnimator"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/animation/ObjectAnimator;"/>
-		<method name="getPropertyName()Ljava/lang/String;"/>
-		<method name="getTarget()Ljava/lang/Object;"/>
-		<method name="ofArgb(Ljava/lang/Object;Landroid/util/Property;[I)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofArgb(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofFloat(Ljava/lang/Object;Landroid/util/Property;Landroid/util/Property;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofFloat(Ljava/lang/Object;Landroid/util/Property;[F)Landroid/animation/ObjectAnimator;" since="14"/>
-		<method name="ofFloat(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;"/>
-		<method name="ofInt(Ljava/lang/Object;Landroid/util/Property;Landroid/util/Property;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofInt(Ljava/lang/Object;Landroid/util/Property;[I)Landroid/animation/ObjectAnimator;" since="14"/>
-		<method name="ofInt(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofInt(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;"/>
-		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;[[F)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;[[I)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="14"/>
-		<method name="ofObject(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
-		<method name="ofObject(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;"/>
-		<method name="ofPropertyValuesHolder(Ljava/lang/Object;[Landroid/animation/PropertyValuesHolder;)Landroid/animation/ObjectAnimator;"/>
-		<method name="setAutoCancel(Z)V" since="18"/>
-		<method name="setDuration(J)Landroid/animation/ObjectAnimator;"/>
-		<method name="setProperty(Landroid/util/Property;)V" since="14"/>
-		<method name="setPropertyName(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/animation/PointFEvaluator" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TypeEvaluator"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/PointF;)V"/>
-		<method name="evaluate(FLandroid/graphics/PointF;Landroid/graphics/PointF;)Landroid/graphics/PointF;"/>
-	</class>
-	<class name="android/animation/PropertyValuesHolder" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="clone()Landroid/animation/PropertyValuesHolder;"/>
-		<method name="getPropertyName()Ljava/lang/String;"/>
-		<method name="ofFloat(Landroid/util/Property;[F)Landroid/animation/PropertyValuesHolder;" since="14"/>
-		<method name="ofFloat(Ljava/lang/String;[F)Landroid/animation/PropertyValuesHolder;"/>
-		<method name="ofInt(Landroid/util/Property;[I)Landroid/animation/PropertyValuesHolder;" since="14"/>
-		<method name="ofInt(Ljava/lang/String;[I)Landroid/animation/PropertyValuesHolder;"/>
-		<method name="ofKeyframe(Landroid/util/Property;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="14"/>
-		<method name="ofKeyframe(Ljava/lang/String;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;"/>
-		<method name="ofMultiFloat(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofMultiFloat(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofMultiFloat(Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofMultiFloat(Ljava/lang/String;[[F)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofMultiInt(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofMultiInt(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofMultiInt(Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofMultiInt(Ljava/lang/String;[[I)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="14"/>
-		<method name="ofObject(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
-		<method name="ofObject(Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;"/>
-		<method name="setConverter(Landroid/animation/TypeConverter;)V" since="21"/>
-		<method name="setEvaluator(Landroid/animation/TypeEvaluator;)V"/>
-		<method name="setFloatValues([F)V"/>
-		<method name="setIntValues([I)V"/>
-		<method name="setKeyframes([Landroid/animation/Keyframe;)V"/>
-		<method name="setObjectValues([Ljava/lang/Object;)V"/>
-		<method name="setProperty(Landroid/util/Property;)V" since="14"/>
-		<method name="setPropertyName(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/animation/RectEvaluator" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TypeEvaluator"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;)V" since="21"/>
-		<method name="evaluate(FLandroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/graphics/Rect;"/>
-	</class>
-	<class name="android/animation/StateListAnimator" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable" since="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="addState([ILandroid/animation/Animator;)V"/>
-		<method name="clone()Landroid/animation/StateListAnimator;" since="22"/>
-		<method name="jumpToCurrentState()V"/>
-	</class>
-	<class name="android/animation/TimeAnimator" since="16">
-		<extends name="android/animation/ValueAnimator"/>
-		<method name="&lt;init>()V"/>
-		<method name="setTimeListener(Landroid/animation/TimeAnimator$TimeListener;)V"/>
-	</class>
-	<class name="android/animation/TimeAnimator$TimeListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onTimeUpdate(Landroid/animation/TimeAnimator;JJ)V"/>
-	</class>
-	<class name="android/animation/TimeInterpolator" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="getInterpolation(F)F"/>
-	</class>
-	<class name="android/animation/TypeConverter" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/Class;)V"/>
-		<method name="convert(Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/animation/TypeEvaluator" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/animation/ValueAnimator" since="11">
-		<extends name="android/animation/Animator"/>
-		<method name="&lt;init>()V"/>
-		<method name="addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V"/>
-		<method name="areAnimatorsEnabled()Z" since="26"/>
-		<method name="clone()Landroid/animation/ValueAnimator;"/>
-		<method name="getAnimatedFraction()F" since="12"/>
-		<method name="getAnimatedValue()Ljava/lang/Object;"/>
-		<method name="getAnimatedValue(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getCurrentPlayTime()J"/>
-		<method name="getFrameDelay()J"/>
-		<method name="getInterpolator()Landroid/animation/TimeInterpolator;"/>
-		<method name="getRepeatCount()I"/>
-		<method name="getRepeatMode()I"/>
-		<method name="getValues()[Landroid/animation/PropertyValuesHolder;"/>
-		<method name="ofArgb([I)Landroid/animation/ValueAnimator;" since="21"/>
-		<method name="ofFloat([F)Landroid/animation/ValueAnimator;"/>
-		<method name="ofInt([I)Landroid/animation/ValueAnimator;"/>
-		<method name="ofObject(Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ValueAnimator;"/>
-		<method name="ofPropertyValuesHolder([Landroid/animation/PropertyValuesHolder;)Landroid/animation/ValueAnimator;"/>
-		<method name="removeAllUpdateListeners()V"/>
-		<method name="removeUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V"/>
-		<method name="reverse()V"/>
-		<method name="setCurrentFraction(F)V" since="22"/>
-		<method name="setCurrentPlayTime(J)V"/>
-		<method name="setDuration(J)Landroid/animation/ValueAnimator;"/>
-		<method name="setEvaluator(Landroid/animation/TypeEvaluator;)V"/>
-		<method name="setFloatValues([F)V"/>
-		<method name="setFrameDelay(J)V"/>
-		<method name="setIntValues([I)V"/>
-		<method name="setObjectValues([Ljava/lang/Object;)V"/>
-		<method name="setRepeatCount(I)V"/>
-		<method name="setRepeatMode(I)V"/>
-		<method name="setValues([Landroid/animation/PropertyValuesHolder;)V"/>
-		<field name="INFINITE"/>
-		<field name="RESTART"/>
-		<field name="REVERSE"/>
-	</class>
-	<class name="android/animation/ValueAnimator$AnimatorUpdateListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onAnimationUpdate(Landroid/animation/ValueAnimator;)V"/>
-	</class>
-	<class name="android/annotation/SuppressLint" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="value()[Ljava/lang/String;"/>
-	</class>
-	<class name="android/annotation/TargetApi" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="value()I"/>
-	</class>
-	<class name="android/app/ActionBar" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V"/>
-		<method name="addTab(Landroid/app/ActionBar$Tab;)V" deprecated="21"/>
-		<method name="addTab(Landroid/app/ActionBar$Tab;I)V" deprecated="21"/>
-		<method name="addTab(Landroid/app/ActionBar$Tab;IZ)V" deprecated="21"/>
-		<method name="addTab(Landroid/app/ActionBar$Tab;Z)V" deprecated="21"/>
-		<method name="getCustomView()Landroid/view/View;"/>
-		<method name="getDisplayOptions()I"/>
-		<method name="getElevation()F" since="21"/>
-		<method name="getHeight()I"/>
-		<method name="getHideOffset()I" since="21"/>
-		<method name="getNavigationItemCount()I" deprecated="21"/>
-		<method name="getNavigationMode()I" deprecated="21"/>
-		<method name="getSelectedNavigationIndex()I" deprecated="21"/>
-		<method name="getSelectedTab()Landroid/app/ActionBar$Tab;" deprecated="21"/>
-		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
-		<method name="getTabAt(I)Landroid/app/ActionBar$Tab;" deprecated="21"/>
-		<method name="getTabCount()I" deprecated="21"/>
-		<method name="getThemedContext()Landroid/content/Context;" since="14"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="hide()V"/>
-		<method name="isHideOnContentScrollEnabled()Z" since="21"/>
-		<method name="isShowing()Z"/>
-		<method name="newTab()Landroid/app/ActionBar$Tab;" deprecated="21"/>
-		<method name="removeAllTabs()V" deprecated="21"/>
-		<method name="removeOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V"/>
-		<method name="removeTab(Landroid/app/ActionBar$Tab;)V" deprecated="21"/>
-		<method name="removeTabAt(I)V" deprecated="21"/>
-		<method name="selectTab(Landroid/app/ActionBar$Tab;)V" deprecated="21"/>
-		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setCustomView(I)V"/>
-		<method name="setCustomView(Landroid/view/View;)V"/>
-		<method name="setCustomView(Landroid/view/View;Landroid/app/ActionBar$LayoutParams;)V"/>
-		<method name="setDisplayHomeAsUpEnabled(Z)V"/>
-		<method name="setDisplayOptions(I)V"/>
-		<method name="setDisplayOptions(II)V"/>
-		<method name="setDisplayShowCustomEnabled(Z)V"/>
-		<method name="setDisplayShowHomeEnabled(Z)V"/>
-		<method name="setDisplayShowTitleEnabled(Z)V"/>
-		<method name="setDisplayUseLogoEnabled(Z)V"/>
-		<method name="setElevation(F)V" since="21"/>
-		<method name="setHideOffset(I)V" since="21"/>
-		<method name="setHideOnContentScrollEnabled(Z)V" since="21"/>
-		<method name="setHomeActionContentDescription(I)V" since="18"/>
-		<method name="setHomeActionContentDescription(Ljava/lang/CharSequence;)V" since="18"/>
-		<method name="setHomeAsUpIndicator(I)V" since="18"/>
-		<method name="setHomeAsUpIndicator(Landroid/graphics/drawable/Drawable;)V" since="18"/>
-		<method name="setHomeButtonEnabled(Z)V" since="14"/>
-		<method name="setIcon(I)V" since="14"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="14"/>
-		<method name="setListNavigationCallbacks(Landroid/widget/SpinnerAdapter;Landroid/app/ActionBar$OnNavigationListener;)V" deprecated="21"/>
-		<method name="setLogo(I)V" since="14"/>
-		<method name="setLogo(Landroid/graphics/drawable/Drawable;)V" since="14"/>
-		<method name="setNavigationMode(I)V" deprecated="21"/>
-		<method name="setSelectedNavigationItem(I)V" deprecated="21"/>
-		<method name="setSplitBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="14"/>
-		<method name="setStackedBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="14"/>
-		<method name="setSubtitle(I)V"/>
-		<method name="setSubtitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setTitle(I)V"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="show()V"/>
-		<field name="DISPLAY_HOME_AS_UP"/>
-		<field name="DISPLAY_SHOW_CUSTOM"/>
-		<field name="DISPLAY_SHOW_HOME"/>
-		<field name="DISPLAY_SHOW_TITLE"/>
-		<field name="DISPLAY_USE_LOGO"/>
-		<field name="NAVIGATION_MODE_LIST" deprecated="21"/>
-		<field name="NAVIGATION_MODE_STANDARD" deprecated="21"/>
-		<field name="NAVIGATION_MODE_TABS" deprecated="21"/>
-	</class>
-	<class name="android/app/ActionBar$LayoutParams" since="11">
-		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(Landroid/app/ActionBar$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<field name="gravity"/>
-	</class>
-	<class name="android/app/ActionBar$OnMenuVisibilityListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onMenuVisibilityChanged(Z)V"/>
-	</class>
-	<class name="android/app/ActionBar$OnNavigationListener" since="11" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onNavigationItemSelected(IJ)Z"/>
-	</class>
-	<class name="android/app/ActionBar$Tab" since="11" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;" since="14"/>
-		<method name="getCustomView()Landroid/view/View;"/>
-		<method name="getIcon()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getPosition()I"/>
-		<method name="getTag()Ljava/lang/Object;"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="select()V"/>
-		<method name="setContentDescription(I)Landroid/app/ActionBar$Tab;" since="14"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" since="14"/>
-		<method name="setCustomView(I)Landroid/app/ActionBar$Tab;"/>
-		<method name="setCustomView(Landroid/view/View;)Landroid/app/ActionBar$Tab;"/>
-		<method name="setIcon(I)Landroid/app/ActionBar$Tab;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/ActionBar$Tab;"/>
-		<method name="setTabListener(Landroid/app/ActionBar$TabListener;)Landroid/app/ActionBar$Tab;"/>
-		<method name="setTag(Ljava/lang/Object;)Landroid/app/ActionBar$Tab;"/>
-		<method name="setText(I)Landroid/app/ActionBar$Tab;"/>
-		<method name="setText(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;"/>
-		<field name="INVALID_POSITION"/>
-	</class>
-	<class name="android/app/ActionBar$TabListener" since="11" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onTabReselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V"/>
-		<method name="onTabSelected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V"/>
-		<method name="onTabUnselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V"/>
-	</class>
-	<class name="android/app/Activity" since="1">
-		<extends name="android/view/ContextThemeWrapper"/>
-		<implements name="android/content/ComponentCallbacks" removed="14"/>
-		<implements name="android/content/ComponentCallbacks2" since="14"/>
-		<implements name="android/view/KeyEvent$Callback"/>
-		<implements name="android/view/LayoutInflater$Factory" removed="11"/>
-		<implements name="android/view/LayoutInflater$Factory2" since="11"/>
-		<implements name="android/view/View$OnCreateContextMenuListener"/>
-		<implements name="android/view/Window$Callback"/>
-		<method name="&lt;init>()V"/>
-		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="closeContextMenu()V" since="3"/>
-		<method name="closeOptionsMenu()V"/>
-		<method name="createPendingResult(ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
-		<method name="dismissDialog(I)V" deprecated="16"/>
-		<method name="dismissKeyboardShortcutsHelper()V" since="24"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="11"/>
-		<method name="enterPictureInPictureMode()V" since="24" deprecated="26"/>
-		<method name="enterPictureInPictureMode(Landroid/app/PictureInPictureParams;)Z" since="26"/>
-		<method name="findViewById(I)Landroid/view/View;"/>
-		<method name="finish()V"/>
-		<method name="finishActivity(I)V"/>
-		<method name="finishActivityFromChild(Landroid/app/Activity;I)V"/>
-		<method name="finishAffinity()V" since="16"/>
-		<method name="finishAfterTransition()V" since="21"/>
-		<method name="finishAndRemoveTask()V" since="21"/>
-		<method name="finishFromChild(Landroid/app/Activity;)V"/>
-		<method name="getActionBar()Landroid/app/ActionBar;" since="11"/>
-		<method name="getApplication()Landroid/app/Application;"/>
-		<method name="getCallingActivity()Landroid/content/ComponentName;"/>
-		<method name="getCallingPackage()Ljava/lang/String;"/>
-		<method name="getChangingConfigurations()I"/>
-		<method name="getComponentName()Landroid/content/ComponentName;"/>
-		<method name="getContentScene()Landroid/transition/Scene;" since="21"/>
-		<method name="getContentTransitionManager()Landroid/transition/TransitionManager;" since="21"/>
-		<method name="getCurrentFocus()Landroid/view/View;"/>
-		<method name="getFragmentManager()Landroid/app/FragmentManager;" since="11" deprecated="28"/>
-		<method name="getInstanceCount()J" removed="11"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-		<method name="getLastNonConfigurationInstance()Ljava/lang/Object;" deprecated="16"/>
-		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
-		<method name="getLoaderManager()Landroid/app/LoaderManager;" since="11" deprecated="28"/>
-		<method name="getLocalClassName()Ljava/lang/String;"/>
-		<method name="getMaxNumPictureInPictureActions()I" since="26"/>
-		<method name="getMediaController()Landroid/media/session/MediaController;" since="21"/>
-		<method name="getMenuInflater()Landroid/view/MenuInflater;"/>
-		<method name="getParent()Landroid/app/Activity;"/>
-		<method name="getParentActivityIntent()Landroid/content/Intent;" since="16"/>
-		<method name="getPreferences(I)Landroid/content/SharedPreferences;"/>
-		<method name="getReferrer()Landroid/net/Uri;" since="22"/>
-		<method name="getRequestedOrientation()I"/>
-		<method name="getSearchEvent()Landroid/view/SearchEvent;" since="23"/>
-		<method name="getTaskId()I"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="getTitleColor()I"/>
-		<method name="getVoiceInteractor()Landroid/app/VoiceInteractor;" since="23"/>
-		<method name="getVolumeControlStream()I"/>
-		<method name="getWindow()Landroid/view/Window;"/>
-		<method name="getWindowManager()Landroid/view/WindowManager;"/>
-		<method name="hasWindowFocus()Z" since="3"/>
-		<method name="invalidateOptionsMenu()V" since="11"/>
-		<method name="isActivityTransitionRunning()Z" since="26"/>
-		<method name="isChangingConfigurations()Z" since="11"/>
-		<method name="isChild()Z"/>
-		<method name="isDestroyed()Z" since="17"/>
-		<method name="isFinishing()Z"/>
-		<method name="isImmersive()Z" since="18"/>
-		<method name="isInMultiWindowMode()Z" since="24"/>
-		<method name="isInPictureInPictureMode()Z" since="24"/>
-		<method name="isLocalVoiceInteractionSupported()Z" since="24"/>
-		<method name="isTaskRoot()Z"/>
-		<method name="isVoiceInteraction()Z" since="23"/>
-		<method name="isVoiceInteractionRoot()Z" since="23"/>
-		<method name="managedQuery(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="16"/>
-		<method name="moveTaskToBack(Z)Z"/>
-		<method name="navigateUpTo(Landroid/content/Intent;)Z" since="16"/>
-		<method name="navigateUpToFromChild(Landroid/app/Activity;Landroid/content/Intent;)Z" since="16"/>
-		<method name="onActivityReenter(ILandroid/content/Intent;)V" since="21"/>
-		<method name="onActivityResult(IILandroid/content/Intent;)V"/>
-		<method name="onAttachFragment(Landroid/app/Fragment;)V" since="11" deprecated="28"/>
-		<method name="onBackPressed()V" since="5"/>
-		<method name="onChildTitleChanged(Landroid/app/Activity;Ljava/lang/CharSequence;)V"/>
-		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="onContextMenuClosed(Landroid/view/Menu;)V"/>
-		<method name="onCreate(Landroid/os/Bundle;)V"/>
-		<method name="onCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="onCreateDescription()Ljava/lang/CharSequence;"/>
-		<method name="onCreateDialog(I)Landroid/app/Dialog;" deprecated="16"/>
-		<method name="onCreateDialog(ILandroid/os/Bundle;)Landroid/app/Dialog;" since="8" deprecated="16"/>
-		<method name="onCreateNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16"/>
-		<method name="onCreateOptionsMenu(Landroid/view/Menu;)Z"/>
-		<method name="onCreateThumbnail(Landroid/graphics/Bitmap;Landroid/graphics/Canvas;)Z" deprecated="28"/>
-		<method name="onDestroy()V"/>
-		<method name="onEnterAnimationComplete()V" since="21"/>
-		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
-		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" since="11"/>
-		<method name="onLocalVoiceInteractionStarted()V" since="24"/>
-		<method name="onLocalVoiceInteractionStopped()V" since="24"/>
-		<method name="onMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
-		<method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
-		<method name="onNavigateUp()Z" since="16"/>
-		<method name="onNavigateUpFromChild(Landroid/app/Activity;)Z" since="16"/>
-		<method name="onNewIntent(Landroid/content/Intent;)V"/>
-		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V"/>
-		<method name="onPause()V"/>
-		<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
-		<method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
-		<method name="onPostCreate(Landroid/os/Bundle;)V"/>
-		<method name="onPostCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="onPostResume()V"/>
-		<method name="onPrepareDialog(ILandroid/app/Dialog;)V" deprecated="16"/>
-		<method name="onPrepareDialog(ILandroid/app/Dialog;Landroid/os/Bundle;)V" since="8" deprecated="16"/>
-		<method name="onPrepareNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16"/>
-		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)Z"/>
-		<method name="onProvideAssistContent(Landroid/app/assist/AssistContent;)V" since="23"/>
-		<method name="onProvideAssistData(Landroid/os/Bundle;)V" since="18"/>
-		<method name="onProvideReferrer()Landroid/net/Uri;" since="23"/>
-		<method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23"/>
-		<method name="onRestart()V"/>
-		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="onRestoreInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="onResume()V"/>
-		<method name="onRetainNonConfigurationInstance()Ljava/lang/Object;" deprecated="16"/>
-		<method name="onSaveInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="onSaveInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="onStart()V"/>
-		<method name="onStateNotSaved()V" since="23"/>
-		<method name="onStop()V"/>
-		<method name="onTitleChanged(Ljava/lang/CharSequence;I)V"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onUserInteraction()V" since="3"/>
-		<method name="onUserLeaveHint()V" since="3"/>
-		<method name="onVisibleBehindCanceled()V" since="21" deprecated="26"/>
-		<method name="openContextMenu(Landroid/view/View;)V"/>
-		<method name="openOptionsMenu()V"/>
-		<method name="overridePendingTransition(II)V" since="5"/>
-		<method name="postponeEnterTransition()V" since="21"/>
-		<method name="recreate()V" since="11"/>
-		<method name="registerForContextMenu(Landroid/view/View;)V"/>
-		<method name="releaseInstance()Z" since="21"/>
-		<method name="removeDialog(I)V" deprecated="16"/>
-		<method name="reportFullyDrawn()V" since="19"/>
-		<method name="requestDragAndDropPermissions(Landroid/view/DragEvent;)Landroid/view/DragAndDropPermissions;" since="24"/>
-		<method name="requestPermissions([Ljava/lang/String;I)V" since="23"/>
-		<method name="requestShowKeyboardShortcuts()V" since="24"/>
-		<method name="requestVisibleBehind(Z)Z" since="21" deprecated="26"/>
-		<method name="requestWindowFeature(I)Z"/>
-		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
-		<method name="runOnUiThread(Ljava/lang/Runnable;)V"/>
-		<method name="setActionBar(Landroid/widget/Toolbar;)V" since="21"/>
-		<method name="setContentTransitionManager(Landroid/transition/TransitionManager;)V" since="21"/>
-		<method name="setContentView(I)V"/>
-		<method name="setContentView(Landroid/view/View;)V"/>
-		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="setDefaultKeyMode(I)V"/>
-		<method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
-		<method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
-		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
-		<method name="setFeatureDrawableAlpha(II)V"/>
-		<method name="setFeatureDrawableResource(II)V"/>
-		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V"/>
-		<method name="setFinishOnTouchOutside(Z)V" since="11"/>
-		<method name="setImmersive(Z)V" since="18"/>
-		<method name="setIntent(Landroid/content/Intent;)V"/>
-		<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21"/>
-		<method name="setPersistent(Z)V" removed="11"/>
-		<method name="setPictureInPictureParams(Landroid/app/PictureInPictureParams;)V" since="26"/>
-		<method name="setProgress(I)V" deprecated="24"/>
-		<method name="setProgressBarIndeterminate(Z)V" deprecated="24"/>
-		<method name="setProgressBarIndeterminateVisibility(Z)V" deprecated="24"/>
-		<method name="setProgressBarVisibility(Z)V" deprecated="24"/>
-		<method name="setRequestedOrientation(I)V"/>
-		<method name="setResult(I)V"/>
-		<method name="setResult(ILandroid/content/Intent;)V"/>
-		<method name="setSecondaryProgress(I)V" deprecated="24"/>
-		<method name="setShowWhenLocked(Z)V" since="27"/>
-		<method name="setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V" since="21"/>
-		<method name="setTitle(I)V"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setTitleColor(I)V" deprecated="21"/>
-		<method name="setTurnScreenOn(Z)V" since="27"/>
-		<method name="setVisible(Z)V" since="3"/>
-		<method name="setVolumeControlStream(I)V"/>
-		<method name="setVrModeEnabled(ZLandroid/content/ComponentName;)V" since="24"/>
-		<method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23"/>
-		<method name="shouldUpRecreateTask(Landroid/content/Intent;)Z" since="16"/>
-		<method name="showAssist(Landroid/os/Bundle;)Z" since="23"/>
-		<method name="showDialog(I)V" deprecated="16"/>
-		<method name="showDialog(ILandroid/os/Bundle;)Z" since="8" deprecated="16"/>
-		<method name="showLockTaskEscapeMessage()V" since="23"/>
-		<method name="startActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
-		<method name="startActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
-		<method name="startActivityForResult(Landroid/content/Intent;I)V"/>
-		<method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16"/>
-		<method name="startActivityFromChild(Landroid/app/Activity;Landroid/content/Intent;I)V"/>
-		<method name="startActivityFromChild(Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16"/>
-		<method name="startActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;I)V" since="11" deprecated="28"/>
-		<method name="startActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="28"/>
-		<method name="startActivityIfNeeded(Landroid/content/Intent;I)Z"/>
-		<method name="startActivityIfNeeded(Landroid/content/Intent;ILandroid/os/Bundle;)Z" since="16"/>
-		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;III)V" since="5"/>
-		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="16"/>
-		<method name="startIntentSenderFromChild(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;III)V" since="5"/>
-		<method name="startIntentSenderFromChild(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="16"/>
-		<method name="startLocalVoiceInteraction(Landroid/os/Bundle;)V" since="24"/>
-		<method name="startLockTask()V" since="21"/>
-		<method name="startManagingCursor(Landroid/database/Cursor;)V" deprecated="16"/>
-		<method name="startNextMatchingActivity(Landroid/content/Intent;)Z"/>
-		<method name="startNextMatchingActivity(Landroid/content/Intent;Landroid/os/Bundle;)Z" since="16"/>
-		<method name="startPostponedEnterTransition()V" since="21"/>
-		<method name="startSearch(Ljava/lang/String;ZLandroid/os/Bundle;Z)V"/>
-		<method name="stopLocalVoiceInteraction()V" since="24"/>
-		<method name="stopLockTask()V" since="21"/>
-		<method name="stopManagingCursor(Landroid/database/Cursor;)V" deprecated="16"/>
-		<method name="takeKeyEvents(Z)V"/>
-		<method name="triggerSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="5"/>
-		<method name="unregisterForContextMenu(Landroid/view/View;)V"/>
-		<field name="DEFAULT_KEYS_DIALER"/>
-		<field name="DEFAULT_KEYS_DISABLE"/>
-		<field name="DEFAULT_KEYS_SEARCH_GLOBAL"/>
-		<field name="DEFAULT_KEYS_SEARCH_LOCAL"/>
-		<field name="DEFAULT_KEYS_SHORTCUT"/>
-		<field name="FOCUSED_STATE_SET"/>
-		<field name="RESULT_CANCELED"/>
-		<field name="RESULT_FIRST_USER"/>
-		<field name="RESULT_OK"/>
-	</class>
-	<class name="android/app/ActivityGroup" since="1" deprecated="13">
-		<extends name="android/app/Activity"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="getCurrentActivity()Landroid/app/Activity;"/>
-		<method name="getLocalActivityManager()Landroid/app/LocalActivityManager;"/>
-	</class>
-	<class name="android/app/ActivityManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;)V" since="29"/>
-		<method name="addAppTask(Landroid/app/Activity;Landroid/content/Intent;Landroid/app/ActivityManager$TaskDescription;Landroid/graphics/Bitmap;)I" since="21"/>
-		<method name="clearApplicationUserData()Z" since="19"/>
-		<method name="clearWatchHeapLimit()V" since="23"/>
-		<method name="dumpPackageState(Ljava/io/FileDescriptor;Ljava/lang/String;)V" since="19"/>
-		<method name="getAppTaskThumbnailSize()Landroid/util/Size;" since="21"/>
-		<method name="getAppTasks()Ljava/util/List;" since="21"/>
-		<method name="getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;" since="3"/>
-		<method name="getLargeMemoryClass()I" since="11"/>
-		<method name="getLauncherLargeIconDensity()I" since="11"/>
-		<method name="getLauncherLargeIconSize()I" since="11"/>
-		<method name="getLockTaskModeState()I" since="23"/>
-		<method name="getMemoryClass()I" since="5"/>
-		<method name="getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V"/>
-		<method name="getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V" since="16"/>
-		<method name="getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;" since="5"/>
-		<method name="getProcessesInErrorState()Ljava/util/List;"/>
-		<method name="getRecentTasks(II)Ljava/util/List;" deprecated="21"/>
-		<method name="getRunningAppProcesses()Ljava/util/List;" since="3"/>
-		<method name="getRunningServiceControlPanel(Landroid/content/ComponentName;)Landroid/app/PendingIntent;" since="5"/>
-		<method name="getRunningServices(I)Ljava/util/List;" deprecated="26"/>
-		<method name="getRunningTasks(I)Ljava/util/List;" deprecated="21"/>
-		<method name="isBackgroundRestricted()Z" since="28"/>
-		<method name="isInLockTaskMode()Z" since="21" deprecated="23"/>
-		<method name="isLowRamDevice()Z" since="19"/>
-		<method name="isRunningInTestHarness()Z" since="11"/>
-		<method name="isUserAMonkey()Z" since="8"/>
-		<method name="killBackgroundProcesses(Ljava/lang/String;)V" since="8"/>
-		<method name="moveTaskToFront(II)V" since="11"/>
-		<method name="moveTaskToFront(IILandroid/os/Bundle;)V" since="16"/>
-		<method name="restartPackage(Ljava/lang/String;)V" since="3" deprecated="16"/>
-		<method name="setVrThread(I)V" since="25"/>
-		<method name="setWatchHeapLimit(J)V" since="23"/>
-		<field name="ACTION_REPORT_HEAP_LIMIT" since="23"/>
-		<field name="LOCK_TASK_MODE_LOCKED" since="23"/>
-		<field name="LOCK_TASK_MODE_NONE" since="23"/>
-		<field name="LOCK_TASK_MODE_PINNED" since="23"/>
-		<field name="META_HOME_ALTERNATE" since="19"/>
-		<field name="MOVE_TASK_NO_USER_ACTION" since="12"/>
-		<field name="MOVE_TASK_WITH_HOME" since="11"/>
-		<field name="RECENT_IGNORE_UNAVAILABLE" since="11"/>
-		<field name="RECENT_WITH_EXCLUDED"/>
-	</class>
-	<class name="android/app/ActivityManager$AppTask" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="finishAndRemoveTask()V"/>
-		<method name="getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;"/>
-		<method name="moveToFront()V"/>
-		<method name="setExcludeFromRecents(Z)V"/>
-		<method name="startActivity(Landroid/content/Context;Landroid/content/Intent;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/ActivityManager$MemoryInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="availMem"/>
-		<field name="lowMemory"/>
-		<field name="threshold"/>
-		<field name="totalMem" since="16"/>
-	</class>
-	<class name="android/app/ActivityManager$ProcessErrorStateInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CRASHED"/>
-		<field name="CREATOR"/>
-		<field name="NOT_RESPONDING"/>
-		<field name="NO_ERROR"/>
-		<field name="condition"/>
-		<field name="crashData"/>
-		<field name="longMsg"/>
-		<field name="pid"/>
-		<field name="processName"/>
-		<field name="shortMsg"/>
-		<field name="stackTrace" since="8"/>
-		<field name="tag"/>
-		<field name="uid"/>
-	</class>
-	<class name="android/app/ActivityManager$RecentTaskInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="affiliatedTaskId" since="21"/>
-		<field name="baseActivity" since="23"/>
-		<field name="baseIntent"/>
-		<field name="description" since="11"/>
-		<field name="id"/>
-		<field name="numActivities" since="23"/>
-		<field name="origActivity"/>
-		<field name="persistentId" since="12"/>
-		<field name="taskDescription" since="21"/>
-		<field name="topActivity" since="23"/>
-	</class>
-	<class name="android/app/ActivityManager$RunningAppProcessInfo" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;I[Ljava/lang/String;)V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="IMPORTANCE_BACKGROUND" deprecated="26"/>
-		<field name="IMPORTANCE_CACHED" since="26"/>
-		<field name="IMPORTANCE_CANT_SAVE_STATE" since="28"/>
-		<field name="IMPORTANCE_EMPTY" deprecated="26"/>
-		<field name="IMPORTANCE_FOREGROUND"/>
-		<field name="IMPORTANCE_FOREGROUND_SERVICE" since="23"/>
-		<field name="IMPORTANCE_GONE" since="21"/>
-		<field name="IMPORTANCE_PERCEPTIBLE" since="9"/>
-		<field name="IMPORTANCE_PERCEPTIBLE_PRE_26" since="26"/>
-		<field name="IMPORTANCE_SERVICE"/>
-		<field name="IMPORTANCE_TOP_SLEEPING" since="23"/>
-		<field name="IMPORTANCE_TOP_SLEEPING_PRE_28" since="28" deprecated="28"/>
-		<field name="IMPORTANCE_VISIBLE"/>
-		<field name="REASON_PROVIDER_IN_USE" since="5"/>
-		<field name="REASON_SERVICE_IN_USE" since="5"/>
-		<field name="REASON_UNKNOWN" since="5"/>
-		<field name="importance"/>
-		<field name="importanceReasonCode" since="5"/>
-		<field name="importanceReasonComponent" since="5"/>
-		<field name="importanceReasonPid" since="5"/>
-		<field name="lastTrimLevel" since="16"/>
-		<field name="lru"/>
-		<field name="pid"/>
-		<field name="pkgList"/>
-		<field name="processName"/>
-		<field name="uid" since="5"/>
-	</class>
-	<class name="android/app/ActivityManager$RunningServiceInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_FOREGROUND" since="5"/>
-		<field name="FLAG_PERSISTENT_PROCESS" since="5"/>
-		<field name="FLAG_STARTED" since="5"/>
-		<field name="FLAG_SYSTEM_PROCESS" since="5"/>
-		<field name="activeSince"/>
-		<field name="clientCount"/>
-		<field name="clientLabel" since="5"/>
-		<field name="clientPackage" since="5"/>
-		<field name="crashCount"/>
-		<field name="flags" since="5"/>
-		<field name="foreground"/>
-		<field name="lastActivityTime"/>
-		<field name="pid"/>
-		<field name="process"/>
-		<field name="restarting"/>
-		<field name="service"/>
-		<field name="started"/>
-		<field name="uid" since="5"/>
-	</class>
-	<class name="android/app/ActivityManager$RunningTaskInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="baseActivity"/>
-		<field name="description"/>
-		<field name="id"/>
-		<field name="numActivities"/>
-		<field name="numRunning"/>
-		<field name="thumbnail"/>
-		<field name="topActivity"/>
-	</class>
-	<class name="android/app/ActivityManager$TaskDescription" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/ActivityManager$TaskDescription;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="28"/>
-		<method name="&lt;init>(Ljava/lang/String;II)V" since="28"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/graphics/Bitmap;)V" deprecated="28"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/graphics/Bitmap;I)V" deprecated="28"/>
-		<method name="getIcon()Landroid/graphics/Bitmap;"/>
-		<method name="getLabel()Ljava/lang/String;"/>
-		<method name="getPrimaryColor()I"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/ActivityOptions" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getLaunchBounds()Landroid/graphics/Rect;" since="24"/>
-		<method name="getLaunchDisplayId()I" since="26"/>
-		<method name="getLockTaskMode()Z" since="28"/>
-		<method name="makeBasic()Landroid/app/ActivityOptions;" since="23"/>
-		<method name="makeClipRevealAnimation(Landroid/view/View;IIII)Landroid/app/ActivityOptions;" since="23"/>
-		<method name="makeCustomAnimation(Landroid/content/Context;II)Landroid/app/ActivityOptions;"/>
-		<method name="makeScaleUpAnimation(Landroid/view/View;IIII)Landroid/app/ActivityOptions;"/>
-		<method name="makeSceneTransitionAnimation(Landroid/app/Activity;Landroid/view/View;Ljava/lang/String;)Landroid/app/ActivityOptions;" since="21"/>
-		<method name="makeSceneTransitionAnimation(Landroid/app/Activity;[Landroid/util/Pair;)Landroid/app/ActivityOptions;" since="21"/>
-		<method name="makeTaskLaunchBehind()Landroid/app/ActivityOptions;" since="21"/>
-		<method name="makeThumbnailScaleUpAnimation(Landroid/view/View;Landroid/graphics/Bitmap;II)Landroid/app/ActivityOptions;"/>
-		<method name="requestUsageTimeReport(Landroid/app/PendingIntent;)V" since="23"/>
-		<method name="setAppVerificationBundle(Landroid/os/Bundle;)Landroid/app/ActivityOptions;" since="26"/>
-		<method name="setLaunchBounds(Landroid/graphics/Rect;)Landroid/app/ActivityOptions;" since="24"/>
-		<method name="setLaunchDisplayId(I)Landroid/app/ActivityOptions;" since="26"/>
-		<method name="setLockTaskEnabled(Z)Landroid/app/ActivityOptions;" since="28"/>
-		<method name="toBundle()Landroid/os/Bundle;"/>
-		<method name="update(Landroid/app/ActivityOptions;)V"/>
-		<field name="EXTRA_USAGE_TIME_REPORT" since="23"/>
-		<field name="EXTRA_USAGE_TIME_REPORT_PACKAGES" since="23"/>
-	</class>
-	<class name="android/app/AlarmManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel(Landroid/app/AlarmManager$OnAlarmListener;)V" since="24"/>
-		<method name="cancel(Landroid/app/PendingIntent;)V"/>
-		<method name="getNextAlarmClock()Landroid/app/AlarmManager$AlarmClockInfo;" since="21"/>
-		<method name="set(IJLandroid/app/PendingIntent;)V"/>
-		<method name="set(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24"/>
-		<method name="setAlarmClock(Landroid/app/AlarmManager$AlarmClockInfo;Landroid/app/PendingIntent;)V" since="21"/>
-		<method name="setAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V" since="23"/>
-		<method name="setExact(IJLandroid/app/PendingIntent;)V" since="19"/>
-		<method name="setExact(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24"/>
-		<method name="setExactAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V" since="23"/>
-		<method name="setInexactRepeating(IJJLandroid/app/PendingIntent;)V" since="3"/>
-		<method name="setRepeating(IJJLandroid/app/PendingIntent;)V"/>
-		<method name="setTime(J)V" since="8"/>
-		<method name="setTimeZone(Ljava/lang/String;)V"/>
-		<method name="setWindow(IJJLandroid/app/PendingIntent;)V" since="19"/>
-		<method name="setWindow(IJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24"/>
-		<field name="ACTION_NEXT_ALARM_CLOCK_CHANGED" since="21"/>
-		<field name="ELAPSED_REALTIME"/>
-		<field name="ELAPSED_REALTIME_WAKEUP"/>
-		<field name="INTERVAL_DAY" since="3"/>
-		<field name="INTERVAL_FIFTEEN_MINUTES" since="3"/>
-		<field name="INTERVAL_HALF_DAY" since="3"/>
-		<field name="INTERVAL_HALF_HOUR" since="3"/>
-		<field name="INTERVAL_HOUR" since="3"/>
-		<field name="RTC"/>
-		<field name="RTC_WAKEUP"/>
-	</class>
-	<class name="android/app/AlarmManager$AlarmClockInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(JLandroid/app/PendingIntent;)V"/>
-		<method name="getShowIntent()Landroid/app/PendingIntent;"/>
-		<method name="getTriggerTime()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/AlarmManager$OnAlarmListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onAlarm()V"/>
-	</class>
-	<class name="android/app/AlertDialog" since="1">
-		<extends name="android/app/Dialog"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;ZLandroid/content/DialogInterface$OnCancelListener;)V"/>
-		<method name="getButton(I)Landroid/widget/Button;" since="3"/>
-		<method name="getListView()Landroid/widget/ListView;" since="3"/>
-		<method name="setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" since="3"/>
-		<method name="setButton(ILjava/lang/CharSequence;Landroid/os/Message;)V" since="3"/>
-		<method name="setButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="16"/>
-		<method name="setButton(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="16"/>
-		<method name="setButton2(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="16"/>
-		<method name="setButton2(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="16"/>
-		<method name="setButton3(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="16"/>
-		<method name="setButton3(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="16"/>
-		<method name="setCustomTitle(Landroid/view/View;)V"/>
-		<method name="setIcon(I)V"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setIconAttribute(I)V" since="11"/>
-		<method name="setInverseBackgroundForced(Z)V"/>
-		<method name="setMessage(Ljava/lang/CharSequence;)V"/>
-		<method name="setView(Landroid/view/View;)V"/>
-		<method name="setView(Landroid/view/View;IIII)V" since="3"/>
-		<field name="THEME_DEVICE_DEFAULT_DARK" since="14" deprecated="23"/>
-		<field name="THEME_DEVICE_DEFAULT_LIGHT" since="14" deprecated="23"/>
-		<field name="THEME_HOLO_DARK" since="11" deprecated="23"/>
-		<field name="THEME_HOLO_LIGHT" since="11" deprecated="23"/>
-		<field name="THEME_TRADITIONAL" since="11" deprecated="23"/>
-	</class>
-	<class name="android/app/AlertDialog$Builder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V" since="11"/>
-		<method name="create()Landroid/app/AlertDialog;"/>
-		<method name="getContext()Landroid/content/Context;" since="11"/>
-		<method name="setAdapter(Landroid/widget/ListAdapter;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setCancelable(Z)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setCursor(Landroid/database/Cursor;Landroid/content/DialogInterface$OnClickListener;Ljava/lang/String;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setCustomTitle(Landroid/view/View;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setIcon(I)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setIconAttribute(I)Landroid/app/AlertDialog$Builder;" since="11"/>
-		<method name="setInverseBackgroundForced(Z)Landroid/app/AlertDialog$Builder;" deprecated="23"/>
-		<method name="setItems(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setItems([Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setMessage(I)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setMultiChoiceItems(I[ZLandroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setMultiChoiceItems(Landroid/database/Cursor;Ljava/lang/String;Ljava/lang/String;Landroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setMultiChoiceItems([Ljava/lang/CharSequence;[ZLandroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setNegativeButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setNegativeButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setNeutralButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setNeutralButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)Landroid/app/AlertDialog$Builder;" since="17"/>
-		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setOnKeyListener(Landroid/content/DialogInterface$OnKeyListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setPositiveButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setSingleChoiceItems(IILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setSingleChoiceItems(Landroid/database/Cursor;ILjava/lang/String;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setSingleChoiceItems(Landroid/widget/ListAdapter;ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setSingleChoiceItems([Ljava/lang/CharSequence;ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setTitle(I)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="setView(I)Landroid/app/AlertDialog$Builder;" since="21"/>
-		<method name="setView(Landroid/view/View;)Landroid/app/AlertDialog$Builder;"/>
-		<method name="show()Landroid/app/AlertDialog;"/>
-	</class>
-	<class name="android/app/AliasActivity" since="1">
-		<extends name="android/app/Activity"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/app/AppComponentFactory" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;"/>
-		<method name="instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;"/>
-		<method name="instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;"/>
-		<method name="instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver;"/>
-		<method name="instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service;"/>
-	</class>
-	<class name="android/app/AppOpsManager" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkOp(Ljava/lang/String;ILjava/lang/String;)I"/>
-		<method name="checkOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I"/>
-		<method name="checkPackage(ILjava/lang/String;)V"/>
-		<method name="finishOp(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="noteOp(Ljava/lang/String;ILjava/lang/String;)I"/>
-		<method name="noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I"/>
-		<method name="noteProxyOp(Ljava/lang/String;Ljava/lang/String;)I" since="23"/>
-		<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;)I" since="23"/>
-		<method name="permissionToOp(Ljava/lang/String;)Ljava/lang/String;" since="23"/>
-		<method name="startOp(Ljava/lang/String;ILjava/lang/String;)I"/>
-		<method name="startOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I"/>
-		<method name="startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V"/>
-		<method name="stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V"/>
-		<field name="MODE_ALLOWED"/>
-		<field name="MODE_DEFAULT" since="21"/>
-		<field name="MODE_ERRORED"/>
-		<field name="MODE_IGNORED"/>
-		<field name="OPSTR_ADD_VOICEMAIL" since="23"/>
-		<field name="OPSTR_ANSWER_PHONE_CALLS" since="26"/>
-		<field name="OPSTR_BODY_SENSORS" since="23"/>
-		<field name="OPSTR_CALL_PHONE" since="23"/>
-		<field name="OPSTR_CAMERA" since="23"/>
-		<field name="OPSTR_COARSE_LOCATION"/>
-		<field name="OPSTR_FINE_LOCATION"/>
-		<field name="OPSTR_GET_USAGE_STATS" since="21"/>
-		<field name="OPSTR_MOCK_LOCATION" since="23"/>
-		<field name="OPSTR_MONITOR_HIGH_POWER_LOCATION"/>
-		<field name="OPSTR_MONITOR_LOCATION"/>
-		<field name="OPSTR_PICTURE_IN_PICTURE" since="26"/>
-		<field name="OPSTR_PROCESS_OUTGOING_CALLS" since="26"/>
-		<field name="OPSTR_READ_CALENDAR" since="23"/>
-		<field name="OPSTR_READ_CALL_LOG" since="23"/>
-		<field name="OPSTR_READ_CELL_BROADCASTS" since="23"/>
-		<field name="OPSTR_READ_CONTACTS" since="23"/>
-		<field name="OPSTR_READ_EXTERNAL_STORAGE" since="23"/>
-		<field name="OPSTR_READ_PHONE_NUMBERS" since="26"/>
-		<field name="OPSTR_READ_PHONE_STATE" since="23"/>
-		<field name="OPSTR_READ_SMS" since="23"/>
-		<field name="OPSTR_RECEIVE_MMS" since="23"/>
-		<field name="OPSTR_RECEIVE_SMS" since="23"/>
-		<field name="OPSTR_RECEIVE_WAP_PUSH" since="23"/>
-		<field name="OPSTR_RECORD_AUDIO" since="23"/>
-		<field name="OPSTR_SEND_SMS" since="23"/>
-		<field name="OPSTR_SYSTEM_ALERT_WINDOW" since="23"/>
-		<field name="OPSTR_USE_FINGERPRINT" since="23"/>
-		<field name="OPSTR_USE_SIP" since="23"/>
-		<field name="OPSTR_WRITE_CALENDAR" since="23"/>
-		<field name="OPSTR_WRITE_CALL_LOG" since="23"/>
-		<field name="OPSTR_WRITE_CONTACTS" since="23"/>
-		<field name="OPSTR_WRITE_EXTERNAL_STORAGE" since="23"/>
-		<field name="OPSTR_WRITE_SETTINGS" since="23"/>
-	</class>
-	<class name="android/app/AppOpsManager$OnOpChangedListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onOpChanged(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/app/Application" since="1">
-		<extends name="android/content/ContextWrapper"/>
-		<implements name="android/content/ComponentCallbacks" removed="14"/>
-		<implements name="android/content/ComponentCallbacks2" since="14"/>
-		<method name="&lt;init>()V"/>
-		<method name="getProcessName()Ljava/lang/String;" since="28"/>
-		<method name="onCreate()V"/>
-		<method name="onTerminate()V"/>
-		<method name="registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="14"/>
-		<method name="registerOnProvideAssistDataListener(Landroid/app/Application$OnProvideAssistDataListener;)V" since="18"/>
-		<method name="unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="14"/>
-		<method name="unregisterOnProvideAssistDataListener(Landroid/app/Application$OnProvideAssistDataListener;)V" since="18"/>
-	</class>
-	<class name="android/app/Application$ActivityLifecycleCallbacks" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
-		<method name="onActivityDestroyed(Landroid/app/Activity;)V"/>
-		<method name="onActivityPaused(Landroid/app/Activity;)V"/>
-		<method name="onActivityResumed(Landroid/app/Activity;)V"/>
-		<method name="onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
-		<method name="onActivityStarted(Landroid/app/Activity;)V"/>
-		<method name="onActivityStopped(Landroid/app/Activity;)V"/>
-	</class>
-	<class name="android/app/Application$OnProvideAssistDataListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onProvideAssistData(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/ApplicationErrorReport" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getErrorReportReceiver(Landroid/content/Context;Ljava/lang/String;I)Landroid/content/ComponentName;"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_ANR"/>
-		<field name="TYPE_BATTERY"/>
-		<field name="TYPE_CRASH"/>
-		<field name="TYPE_NONE"/>
-		<field name="TYPE_RUNNING_SERVICE"/>
-		<field name="anrInfo"/>
-		<field name="batteryInfo"/>
-		<field name="crashInfo"/>
-		<field name="installerPackageName"/>
-		<field name="packageName"/>
-		<field name="processName"/>
-		<field name="runningServiceInfo"/>
-		<field name="systemApp"/>
-		<field name="time"/>
-		<field name="type"/>
-	</class>
-	<class name="android/app/ApplicationErrorReport$AnrInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
-		<field name="activity"/>
-		<field name="cause"/>
-		<field name="info"/>
-	</class>
-	<class name="android/app/ApplicationErrorReport$BatteryInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
-		<field name="checkinDetails"/>
-		<field name="durationMicros"/>
-		<field name="usageDetails"/>
-		<field name="usagePercent"/>
-	</class>
-	<class name="android/app/ApplicationErrorReport$CrashInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
-		<field name="exceptionClassName"/>
-		<field name="exceptionMessage"/>
-		<field name="stackTrace"/>
-		<field name="throwClassName"/>
-		<field name="throwFileName"/>
-		<field name="throwLineNumber"/>
-		<field name="throwMethodName"/>
-	</class>
-	<class name="android/app/ApplicationErrorReport$RunningServiceInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
-		<field name="durationMillis"/>
-		<field name="serviceDetails"/>
-	</class>
-	<class name="android/app/AuthenticationRequiredException" since="26">
-		<extends name="java/lang/SecurityException"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;Landroid/app/PendingIntent;)V"/>
-		<method name="getUserAction()Landroid/app/PendingIntent;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/AutomaticZenRule" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZ)V"/>
-		<method name="getConditionId()Landroid/net/Uri;"/>
-		<method name="getCreationTime()J"/>
-		<method name="getInterruptionFilter()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getOwner()Landroid/content/ComponentName;"/>
-		<method name="isEnabled()Z"/>
-		<method name="setConditionId(Landroid/net/Uri;)V"/>
-		<method name="setEnabled(Z)V"/>
-		<method name="setInterruptionFilter(I)V"/>
-		<method name="setName(Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/DatePickerDialog" since="1">
-		<extends name="android/app/AlertDialog"/>
-		<implements name="android/content/DialogInterface$OnClickListener"/>
-		<implements name="android/widget/DatePicker$OnDateChangedListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="24"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V" since="24"/>
-		<method name="&lt;init>(Landroid/content/Context;ILandroid/app/DatePickerDialog$OnDateSetListener;III)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/app/DatePickerDialog$OnDateSetListener;III)V"/>
-		<method name="getDatePicker()Landroid/widget/DatePicker;" since="11"/>
-		<method name="setOnDateSetListener(Landroid/app/DatePickerDialog$OnDateSetListener;)V" since="24"/>
-		<method name="updateDate(III)V"/>
-	</class>
-	<class name="android/app/DatePickerDialog$OnDateSetListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onDateSet(Landroid/widget/DatePicker;III)V"/>
-	</class>
-	<class name="android/app/Dialog" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/DialogInterface"/>
-		<implements name="android/view/KeyEvent$Callback"/>
-		<implements name="android/view/View$OnCreateContextMenuListener"/>
-		<implements name="android/view/Window$Callback"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;ZLandroid/content/DialogInterface$OnCancelListener;)V"/>
-		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="closeOptionsMenu()V"/>
-		<method name="create()V" since="21"/>
-		<method name="findViewById(I)Landroid/view/View;"/>
-		<method name="getActionBar()Landroid/app/ActionBar;" since="11"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getCurrentFocus()Landroid/view/View;"/>
-		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
-		<method name="getOwnerActivity()Landroid/app/Activity;"/>
-		<method name="getSearchEvent()Landroid/view/SearchEvent;" since="23"/>
-		<method name="getVolumeControlStream()I"/>
-		<method name="getWindow()Landroid/view/Window;"/>
-		<method name="hide()V"/>
-		<method name="invalidateOptionsMenu()V" since="11"/>
-		<method name="isShowing()Z"/>
-		<method name="onBackPressed()V" since="5"/>
-		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="onContextMenuClosed(Landroid/view/Menu;)V"/>
-		<method name="onCreate(Landroid/os/Bundle;)V"/>
-		<method name="onCreateOptionsMenu(Landroid/view/Menu;)Z"/>
-		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
-		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" since="11"/>
-		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V"/>
-		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)Z"/>
-		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="onSaveInstanceState()Landroid/os/Bundle;"/>
-		<method name="onStart()V"/>
-		<method name="onStop()V"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="openContextMenu(Landroid/view/View;)V"/>
-		<method name="openOptionsMenu()V"/>
-		<method name="registerForContextMenu(Landroid/view/View;)V"/>
-		<method name="requestWindowFeature(I)Z"/>
-		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
-		<method name="setCancelMessage(Landroid/os/Message;)V"/>
-		<method name="setCancelable(Z)V"/>
-		<method name="setCanceledOnTouchOutside(Z)V"/>
-		<method name="setContentView(I)V"/>
-		<method name="setContentView(Landroid/view/View;)V"/>
-		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="setDismissMessage(Landroid/os/Message;)V"/>
-		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
-		<method name="setFeatureDrawableAlpha(II)V"/>
-		<method name="setFeatureDrawableResource(II)V"/>
-		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V"/>
-		<method name="setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)V"/>
-		<method name="setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)V"/>
-		<method name="setOnKeyListener(Landroid/content/DialogInterface$OnKeyListener;)V"/>
-		<method name="setOnShowListener(Landroid/content/DialogInterface$OnShowListener;)V" since="8"/>
-		<method name="setOwnerActivity(Landroid/app/Activity;)V"/>
-		<method name="setTitle(I)V"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setVolumeControlStream(I)V"/>
-		<method name="show()V"/>
-		<method name="takeKeyEvents(Z)V"/>
-		<method name="unregisterForContextMenu(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/app/DialogFragment" since="11" deprecated="28">
-		<extends name="android/app/Fragment"/>
-		<implements name="android/content/DialogInterface$OnCancelListener"/>
-		<implements name="android/content/DialogInterface$OnDismissListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="dismiss()V"/>
-		<method name="dismissAllowingStateLoss()V" since="12"/>
-		<method name="getDialog()Landroid/app/Dialog;"/>
-		<method name="getShowsDialog()Z"/>
-		<method name="getTheme()I"/>
-		<method name="isCancelable()Z"/>
-		<method name="onCreateDialog(Landroid/os/Bundle;)Landroid/app/Dialog;"/>
-		<method name="setCancelable(Z)V"/>
-		<method name="setShowsDialog(Z)V"/>
-		<method name="setStyle(II)V"/>
-		<method name="show(Landroid/app/FragmentManager;Ljava/lang/String;)V"/>
-		<method name="show(Landroid/app/FragmentTransaction;Ljava/lang/String;)I"/>
-		<field name="STYLE_NORMAL"/>
-		<field name="STYLE_NO_FRAME"/>
-		<field name="STYLE_NO_INPUT"/>
-		<field name="STYLE_NO_TITLE"/>
-	</class>
-	<class name="android/app/DownloadManager" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZ)J" since="12"/>
-		<method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZLandroid/net/Uri;Landroid/net/Uri;)J" since="24"/>
-		<method name="enqueue(Landroid/app/DownloadManager$Request;)J"/>
-		<method name="getMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;" since="11"/>
-		<method name="getMimeTypeForDownloadedFile(J)Ljava/lang/String;" since="11"/>
-		<method name="getRecommendedMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;" since="11"/>
-		<method name="getUriForDownloadedFile(J)Landroid/net/Uri;" since="11"/>
-		<method name="openDownloadedFile(J)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="query(Landroid/app/DownloadManager$Query;)Landroid/database/Cursor;"/>
-		<method name="remove([J)I"/>
-		<field name="ACTION_DOWNLOAD_COMPLETE"/>
-		<field name="ACTION_NOTIFICATION_CLICKED"/>
-		<field name="ACTION_VIEW_DOWNLOADS"/>
-		<field name="COLUMN_BYTES_DOWNLOADED_SO_FAR"/>
-		<field name="COLUMN_DESCRIPTION"/>
-		<field name="COLUMN_ID"/>
-		<field name="COLUMN_LAST_MODIFIED_TIMESTAMP"/>
-		<field name="COLUMN_LOCAL_FILENAME" since="11" deprecated="24"/>
-		<field name="COLUMN_LOCAL_URI"/>
-		<field name="COLUMN_MEDIAPROVIDER_URI"/>
-		<field name="COLUMN_MEDIA_TYPE"/>
-		<field name="COLUMN_REASON"/>
-		<field name="COLUMN_STATUS"/>
-		<field name="COLUMN_TITLE"/>
-		<field name="COLUMN_TOTAL_SIZE_BYTES"/>
-		<field name="COLUMN_URI"/>
-		<field name="ERROR_CANNOT_RESUME"/>
-		<field name="ERROR_DEVICE_NOT_FOUND"/>
-		<field name="ERROR_FILE_ALREADY_EXISTS"/>
-		<field name="ERROR_FILE_ERROR"/>
-		<field name="ERROR_HTTP_DATA_ERROR"/>
-		<field name="ERROR_INSUFFICIENT_SPACE"/>
-		<field name="ERROR_TOO_MANY_REDIRECTS"/>
-		<field name="ERROR_UNHANDLED_HTTP_CODE"/>
-		<field name="ERROR_UNKNOWN"/>
-		<field name="EXTRA_DOWNLOAD_ID"/>
-		<field name="EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS" since="11"/>
-		<field name="INTENT_EXTRAS_SORT_BY_SIZE" since="12"/>
-		<field name="PAUSED_QUEUED_FOR_WIFI"/>
-		<field name="PAUSED_UNKNOWN"/>
-		<field name="PAUSED_WAITING_FOR_NETWORK"/>
-		<field name="PAUSED_WAITING_TO_RETRY"/>
-		<field name="STATUS_FAILED"/>
-		<field name="STATUS_PAUSED"/>
-		<field name="STATUS_PENDING"/>
-		<field name="STATUS_RUNNING"/>
-		<field name="STATUS_SUCCESSFUL"/>
-	</class>
-	<class name="android/app/DownloadManager$Query" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="setFilterById([J)Landroid/app/DownloadManager$Query;"/>
-		<method name="setFilterByStatus(I)Landroid/app/DownloadManager$Query;"/>
-	</class>
-	<class name="android/app/DownloadManager$Request" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/Uri;)V"/>
-		<method name="addRequestHeader(Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
-		<method name="allowScanningByMediaScanner()V" since="11"/>
-		<method name="setAllowedNetworkTypes(I)Landroid/app/DownloadManager$Request;"/>
-		<method name="setAllowedOverMetered(Z)Landroid/app/DownloadManager$Request;" since="16"/>
-		<method name="setAllowedOverRoaming(Z)Landroid/app/DownloadManager$Request;"/>
-		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/app/DownloadManager$Request;"/>
-		<method name="setDestinationInExternalFilesDir(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
-		<method name="setDestinationInExternalPublicDir(Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
-		<method name="setDestinationUri(Landroid/net/Uri;)Landroid/app/DownloadManager$Request;"/>
-		<method name="setMimeType(Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
-		<method name="setNotificationVisibility(I)Landroid/app/DownloadManager$Request;" since="11"/>
-		<method name="setRequiresCharging(Z)Landroid/app/DownloadManager$Request;" since="24"/>
-		<method name="setRequiresDeviceIdle(Z)Landroid/app/DownloadManager$Request;" since="24"/>
-		<method name="setShowRunningNotification(Z)Landroid/app/DownloadManager$Request;" deprecated="16"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/app/DownloadManager$Request;"/>
-		<method name="setVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Request;"/>
-		<field name="NETWORK_MOBILE"/>
-		<field name="NETWORK_WIFI"/>
-		<field name="VISIBILITY_HIDDEN" since="11"/>
-		<field name="VISIBILITY_VISIBLE" since="11"/>
-		<field name="VISIBILITY_VISIBLE_NOTIFY_COMPLETED" since="11"/>
-		<field name="VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION" since="12"/>
-	</class>
-	<class name="android/app/ExpandableListActivity" since="1">
-		<extends name="android/app/Activity"/>
-		<implements name="android/widget/ExpandableListView$OnChildClickListener"/>
-		<implements name="android/widget/ExpandableListView$OnGroupCollapseListener"/>
-		<implements name="android/widget/ExpandableListView$OnGroupExpandListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;"/>
-		<method name="getExpandableListView()Landroid/widget/ExpandableListView;"/>
-		<method name="getSelectedId()J"/>
-		<method name="getSelectedPosition()J"/>
-		<method name="setListAdapter(Landroid/widget/ExpandableListAdapter;)V"/>
-		<method name="setSelectedChild(IIZ)Z"/>
-		<method name="setSelectedGroup(I)V"/>
-	</class>
-	<class name="android/app/Fragment" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/ComponentCallbacks" removed="14"/>
-		<implements name="android/content/ComponentCallbacks2" since="14"/>
-		<implements name="android/view/View$OnCreateContextMenuListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="getActivity()Landroid/app/Activity;"/>
-		<method name="getAllowEnterTransitionOverlap()Z" since="21"/>
-		<method name="getAllowReturnTransitionOverlap()Z" since="21"/>
-		<method name="getArguments()Landroid/os/Bundle;"/>
-		<method name="getChildFragmentManager()Landroid/app/FragmentManager;" since="17"/>
-		<method name="getContext()Landroid/content/Context;" since="23"/>
-		<method name="getEnterTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getExitTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getFragmentManager()Landroid/app/FragmentManager;"/>
-		<method name="getHost()Ljava/lang/Object;" since="23"/>
-		<method name="getId()I"/>
-		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="26"/>
-		<method name="getLoaderManager()Landroid/app/LoaderManager;" deprecated="28"/>
-		<method name="getParentFragment()Landroid/app/Fragment;" since="17"/>
-		<method name="getReenterTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getResources()Landroid/content/res/Resources;"/>
-		<method name="getRetainInstance()Z"/>
-		<method name="getReturnTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="getTag()Ljava/lang/String;"/>
-		<method name="getTargetFragment()Landroid/app/Fragment;"/>
-		<method name="getTargetRequestCode()I"/>
-		<method name="getText(I)Ljava/lang/CharSequence;"/>
-		<method name="getUserVisibleHint()Z" since="15"/>
-		<method name="getView()Landroid/view/View;"/>
-		<method name="instantiate(Landroid/content/Context;Ljava/lang/String;)Landroid/app/Fragment;"/>
-		<method name="instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;"/>
-		<method name="isAdded()Z"/>
-		<method name="isDetached()Z" since="13"/>
-		<method name="isHidden()Z"/>
-		<method name="isInLayout()Z"/>
-		<method name="isRemoving()Z"/>
-		<method name="isResumed()Z"/>
-		<method name="isStateSaved()Z" since="26"/>
-		<method name="isVisible()Z"/>
-		<method name="onActivityCreated(Landroid/os/Bundle;)V"/>
-		<method name="onActivityResult(IILandroid/content/Intent;)V"/>
-		<method name="onAttach(Landroid/app/Activity;)V" deprecated="23"/>
-		<method name="onAttach(Landroid/content/Context;)V" since="23"/>
-		<method name="onAttachFragment(Landroid/app/Fragment;)V" since="24"/>
-		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="onCreate(Landroid/os/Bundle;)V"/>
-		<method name="onCreateAnimator(IZI)Landroid/animation/Animator;"/>
-		<method name="onCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V"/>
-		<method name="onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;"/>
-		<method name="onDestroy()V"/>
-		<method name="onDestroyOptionsMenu()V"/>
-		<method name="onDestroyView()V"/>
-		<method name="onDetach()V"/>
-		<method name="onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;" since="26"/>
-		<method name="onHiddenChanged(Z)V"/>
-		<method name="onInflate(Landroid/app/Activity;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="12" deprecated="23"/>
-		<method name="onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="23"/>
-		<method name="onInflate(Landroid/util/AttributeSet;Landroid/os/Bundle;)V" deprecated="16"/>
-		<method name="onMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
-		<method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
-		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V"/>
-		<method name="onPause()V"/>
-		<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
-		<method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
-		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)V"/>
-		<method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23"/>
-		<method name="onResume()V"/>
-		<method name="onSaveInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="onStart()V"/>
-		<method name="onStop()V"/>
-		<method name="onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V" since="13"/>
-		<method name="onViewStateRestored(Landroid/os/Bundle;)V" since="17"/>
-		<method name="postponeEnterTransition()V" since="26"/>
-		<method name="registerForContextMenu(Landroid/view/View;)V"/>
-		<method name="requestPermissions([Ljava/lang/String;I)V" since="23"/>
-		<method name="setAllowEnterTransitionOverlap(Z)V" since="21"/>
-		<method name="setAllowReturnTransitionOverlap(Z)V" since="21"/>
-		<method name="setArguments(Landroid/os/Bundle;)V"/>
-		<method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
-		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
-		<method name="setExitTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setHasOptionsMenu(Z)V"/>
-		<method name="setInitialSavedState(Landroid/app/Fragment$SavedState;)V" since="13"/>
-		<method name="setMenuVisibility(Z)V" since="14"/>
-		<method name="setReenterTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setRetainInstance(Z)V"/>
-		<method name="setReturnTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setTargetFragment(Landroid/app/Fragment;I)V"/>
-		<method name="setUserVisibleHint(Z)V" since="15"/>
-		<method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23"/>
-		<method name="startActivity(Landroid/content/Intent;)V"/>
-		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16"/>
-		<method name="startActivityForResult(Landroid/content/Intent;I)V"/>
-		<method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16"/>
-		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24"/>
-		<method name="startPostponedEnterTransition()V" since="26"/>
-		<method name="unregisterForContextMenu(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/app/Fragment$InstantiationException" since="11" deprecated="28">
-		<extends name="android/util/AndroidRuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V"/>
-	</class>
-	<class name="android/app/Fragment$SavedState" since="13" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Bundle;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/FragmentBreadCrumbs" since="11" deprecated="21">
-		<extends name="android/view/ViewGroup"/>
-		<implements name="android/app/FragmentManager$OnBackStackChangedListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="setActivity(Landroid/app/Activity;)V"/>
-		<method name="setMaxVisible(I)V"/>
-		<method name="setOnBreadCrumbClickListener(Landroid/app/FragmentBreadCrumbs$OnBreadCrumbClickListener;)V" since="12"/>
-		<method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V"/>
-		<method name="setTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
-	</class>
-	<class name="android/app/FragmentBreadCrumbs$OnBreadCrumbClickListener" since="12" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="onBreadCrumbClick(Landroid/app/FragmentManager$BackStackEntry;I)Z"/>
-	</class>
-	<class name="android/app/FragmentContainer" since="23" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFindViewById(I)Landroid/view/View;"/>
-		<method name="onHasView()Z"/>
-	</class>
-	<class name="android/app/FragmentController" since="23" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/app/FragmentHostCallback;)V" since="29"/>
-		<method name="attachHost(Landroid/app/Fragment;)V"/>
-		<method name="createController(Landroid/app/FragmentHostCallback;)Landroid/app/FragmentController;"/>
-		<method name="dispatchActivityCreated()V"/>
-		<method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V"/>
-		<method name="dispatchContextItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="dispatchCreate()V"/>
-		<method name="dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z"/>
-		<method name="dispatchDestroy()V"/>
-		<method name="dispatchDestroyView()V"/>
-		<method name="dispatchLowMemory()V"/>
-		<method name="dispatchMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
-		<method name="dispatchMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
-		<method name="dispatchOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
-		<method name="dispatchOptionsMenuClosed(Landroid/view/Menu;)V"/>
-		<method name="dispatchPause()V"/>
-		<method name="dispatchPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
-		<method name="dispatchPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
-		<method name="dispatchPrepareOptionsMenu(Landroid/view/Menu;)Z"/>
-		<method name="dispatchResume()V"/>
-		<method name="dispatchStart()V"/>
-		<method name="dispatchStop()V"/>
-		<method name="dispatchTrimMemory(I)V"/>
-		<method name="doLoaderDestroy()V"/>
-		<method name="doLoaderStart()V"/>
-		<method name="doLoaderStop(Z)V"/>
-		<method name="dumpLoaders(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="execPendingActions()Z"/>
-		<method name="findFragmentByWho(Ljava/lang/String;)Landroid/app/Fragment;"/>
-		<method name="getFragmentManager()Landroid/app/FragmentManager;"/>
-		<method name="getLoaderManager()Landroid/app/LoaderManager;"/>
-		<method name="noteStateNotSaved()V"/>
-		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;"/>
-		<method name="reportLoaderStart()V"/>
-		<method name="restoreAllState(Landroid/os/Parcelable;Landroid/app/FragmentManagerNonConfig;)V" since="24"/>
-		<method name="restoreAllState(Landroid/os/Parcelable;Ljava/util/List;)V" deprecated="24"/>
-		<method name="restoreLoaderNonConfig(Landroid/util/ArrayMap;)V"/>
-		<method name="retainLoaderNonConfig()Landroid/util/ArrayMap;"/>
-		<method name="retainNestedNonConfig()Landroid/app/FragmentManagerNonConfig;" since="24"/>
-		<method name="retainNonConfig()Ljava/util/List;" deprecated="24"/>
-		<method name="saveAllState()Landroid/os/Parcelable;"/>
-	</class>
-	<class name="android/app/FragmentHostCallback" since="23" deprecated="28">
-		<extends name="android/app/FragmentContainer"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;I)V"/>
-		<method name="onAttachFragment(Landroid/app/Fragment;)V"/>
-		<method name="onDump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="onGetHost()Ljava/lang/Object;"/>
-		<method name="onGetLayoutInflater()Landroid/view/LayoutInflater;"/>
-		<method name="onGetWindowAnimations()I"/>
-		<method name="onHasWindowAnimations()Z"/>
-		<method name="onInvalidateOptionsMenu()V"/>
-		<method name="onRequestPermissionsFromFragment(Landroid/app/Fragment;[Ljava/lang/String;I)V"/>
-		<method name="onShouldSaveFragmentState(Landroid/app/Fragment;)Z"/>
-		<method name="onStartActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V"/>
-		<method name="onStartIntentSenderFromFragment(Landroid/app/Fragment;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24"/>
-		<method name="onUseFragmentManagerInflaterFactory()Z"/>
-	</class>
-	<class name="android/app/FragmentManager" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V"/>
-		<method name="beginTransaction()Landroid/app/FragmentTransaction;"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="enableDebugLogging(Z)V"/>
-		<method name="executePendingTransactions()Z"/>
-		<method name="findFragmentById(I)Landroid/app/Fragment;"/>
-		<method name="findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;"/>
-		<method name="getBackStackEntryAt(I)Landroid/app/FragmentManager$BackStackEntry;"/>
-		<method name="getBackStackEntryCount()I"/>
-		<method name="getFragment(Landroid/os/Bundle;Ljava/lang/String;)Landroid/app/Fragment;"/>
-		<method name="getFragments()Ljava/util/List;" since="26"/>
-		<method name="getPrimaryNavigationFragment()Landroid/app/Fragment;" since="26"/>
-		<method name="invalidateOptionsMenu()V" since="14"/>
-		<method name="isDestroyed()Z" since="17"/>
-		<method name="isStateSaved()Z" since="26"/>
-		<method name="popBackStack()V"/>
-		<method name="popBackStack(II)V"/>
-		<method name="popBackStack(Ljava/lang/String;I)V"/>
-		<method name="popBackStackImmediate()Z"/>
-		<method name="popBackStackImmediate(II)Z"/>
-		<method name="popBackStackImmediate(Ljava/lang/String;I)Z"/>
-		<method name="putFragment(Landroid/os/Bundle;Ljava/lang/String;Landroid/app/Fragment;)V"/>
-		<method name="registerFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;Z)V" since="26"/>
-		<method name="removeOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V"/>
-		<method name="saveFragmentInstanceState(Landroid/app/Fragment;)Landroid/app/Fragment$SavedState;" since="13"/>
-		<method name="unregisterFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;)V" since="26"/>
-		<field name="POP_BACK_STACK_INCLUSIVE"/>
-	</class>
-	<class name="android/app/FragmentManager$BackStackEntry" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="getBreadCrumbShortTitle()Ljava/lang/CharSequence;"/>
-		<method name="getBreadCrumbShortTitleRes()I"/>
-		<method name="getBreadCrumbTitle()Ljava/lang/CharSequence;"/>
-		<method name="getBreadCrumbTitleRes()I"/>
-		<method name="getId()I"/>
-		<method name="getName()Ljava/lang/String;" since="14"/>
-	</class>
-	<class name="android/app/FragmentManager$FragmentLifecycleCallbacks" since="26" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFragmentActivityCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
-		<method name="onFragmentAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V"/>
-		<method name="onFragmentCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
-		<method name="onFragmentDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
-		<method name="onFragmentDetached(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
-		<method name="onFragmentPaused(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
-		<method name="onFragmentPreAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V"/>
-		<method name="onFragmentPreCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
-		<method name="onFragmentResumed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
-		<method name="onFragmentSaveInstanceState(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V"/>
-		<method name="onFragmentStarted(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
-		<method name="onFragmentStopped(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
-		<method name="onFragmentViewCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/view/View;Landroid/os/Bundle;)V"/>
-		<method name="onFragmentViewDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V"/>
-	</class>
-	<class name="android/app/FragmentManager$OnBackStackChangedListener" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="onBackStackChanged()V"/>
-	</class>
-	<class name="android/app/FragmentManagerNonConfig" since="24" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/List;Ljava/util/List;)V" since="29"/>
-	</class>
-	<class name="android/app/FragmentTransaction" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
-		<method name="add(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
-		<method name="add(Landroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
-		<method name="addSharedElement(Landroid/view/View;Ljava/lang/String;)Landroid/app/FragmentTransaction;" since="21"/>
-		<method name="addToBackStack(Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
-		<method name="attach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13"/>
-		<method name="commit()I"/>
-		<method name="commitAllowingStateLoss()I"/>
-		<method name="commitNow()V" since="24"/>
-		<method name="commitNowAllowingStateLoss()V" since="24"/>
-		<method name="detach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13"/>
-		<method name="disallowAddToBackStack()Landroid/app/FragmentTransaction;"/>
-		<method name="hide(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
-		<method name="isAddToBackStackAllowed()Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="remove(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
-		<method name="replace(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
-		<method name="replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;"/>
-		<method name="runOnCommit(Ljava/lang/Runnable;)Landroid/app/FragmentTransaction;" since="26"/>
-		<method name="setBreadCrumbShortTitle(I)Landroid/app/FragmentTransaction;"/>
-		<method name="setBreadCrumbShortTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;"/>
-		<method name="setBreadCrumbTitle(I)Landroid/app/FragmentTransaction;"/>
-		<method name="setBreadCrumbTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;"/>
-		<method name="setCustomAnimations(II)Landroid/app/FragmentTransaction;"/>
-		<method name="setCustomAnimations(IIII)Landroid/app/FragmentTransaction;" since="13"/>
-		<method name="setPrimaryNavigationFragment(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="26"/>
-		<method name="setReorderingAllowed(Z)Landroid/app/FragmentTransaction;" since="26"/>
-		<method name="setTransition(I)Landroid/app/FragmentTransaction;"/>
-		<method name="setTransitionStyle(I)Landroid/app/FragmentTransaction;"/>
-		<method name="show(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;"/>
-		<field name="TRANSIT_ENTER_MASK"/>
-		<field name="TRANSIT_EXIT_MASK"/>
-		<field name="TRANSIT_FRAGMENT_CLOSE"/>
-		<field name="TRANSIT_FRAGMENT_FADE"/>
-		<field name="TRANSIT_FRAGMENT_OPEN"/>
-		<field name="TRANSIT_NONE"/>
-		<field name="TRANSIT_UNSET"/>
-	</class>
-	<class name="android/app/Instrumentation" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="acquireLooperManager(Landroid/os/Looper;)Landroid/os/TestLooperManager;" since="26"/>
-		<method name="addMonitor(Landroid/app/Instrumentation$ActivityMonitor;)V"/>
-		<method name="addMonitor(Landroid/content/IntentFilter;Landroid/app/Instrumentation$ActivityResult;Z)Landroid/app/Instrumentation$ActivityMonitor;"/>
-		<method name="addMonitor(Ljava/lang/String;Landroid/app/Instrumentation$ActivityResult;Z)Landroid/app/Instrumentation$ActivityMonitor;"/>
-		<method name="addResults(Landroid/os/Bundle;)V" since="26"/>
-		<method name="callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
-		<method name="callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="callActivityOnDestroy(Landroid/app/Activity;)V"/>
-		<method name="callActivityOnNewIntent(Landroid/app/Activity;Landroid/content/Intent;)V"/>
-		<method name="callActivityOnPause(Landroid/app/Activity;)V"/>
-		<method name="callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
-		<method name="callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="callActivityOnRestart(Landroid/app/Activity;)V"/>
-		<method name="callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
-		<method name="callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="callActivityOnResume(Landroid/app/Activity;)V"/>
-		<method name="callActivityOnSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
-		<method name="callActivityOnSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="callActivityOnStart(Landroid/app/Activity;)V"/>
-		<method name="callActivityOnStop(Landroid/app/Activity;)V"/>
-		<method name="callActivityOnUserLeaving(Landroid/app/Activity;)V" since="3"/>
-		<method name="callApplicationOnCreate(Landroid/app/Application;)V"/>
-		<method name="checkMonitorHit(Landroid/app/Instrumentation$ActivityMonitor;I)Z"/>
-		<method name="endPerformanceSnapshot()V"/>
-		<method name="finish(ILandroid/os/Bundle;)V"/>
-		<method name="getAllocCounts()Landroid/os/Bundle;"/>
-		<method name="getBinderCounts()Landroid/os/Bundle;"/>
-		<method name="getComponentName()Landroid/content/ComponentName;"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getProcessName()Ljava/lang/String;" since="26"/>
-		<method name="getTargetContext()Landroid/content/Context;"/>
-		<method name="getUiAutomation()Landroid/app/UiAutomation;" since="18"/>
-		<method name="getUiAutomation(I)Landroid/app/UiAutomation;" since="24"/>
-		<method name="invokeContextMenuAction(Landroid/app/Activity;II)Z"/>
-		<method name="invokeMenuActionSync(Landroid/app/Activity;II)Z"/>
-		<method name="isProfiling()Z"/>
-		<method name="newActivity(Ljava/lang/Class;Landroid/content/Context;Landroid/os/IBinder;Landroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Ljava/lang/Object;)Landroid/app/Activity;"/>
-		<method name="newActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;"/>
-		<method name="newApplication(Ljava/lang/Class;Landroid/content/Context;)Landroid/app/Application;"/>
-		<method name="newApplication(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;"/>
-		<method name="onCreate(Landroid/os/Bundle;)V"/>
-		<method name="onDestroy()V"/>
-		<method name="onException(Ljava/lang/Object;Ljava/lang/Throwable;)Z"/>
-		<method name="onStart()V"/>
-		<method name="removeMonitor(Landroid/app/Instrumentation$ActivityMonitor;)V"/>
-		<method name="runOnMainSync(Ljava/lang/Runnable;)V"/>
-		<method name="sendCharacterSync(I)V"/>
-		<method name="sendKeyDownUpSync(I)V"/>
-		<method name="sendKeySync(Landroid/view/KeyEvent;)V"/>
-		<method name="sendPointerSync(Landroid/view/MotionEvent;)V"/>
-		<method name="sendStatus(ILandroid/os/Bundle;)V"/>
-		<method name="sendStringSync(Ljava/lang/String;)V"/>
-		<method name="sendTrackballEventSync(Landroid/view/MotionEvent;)V"/>
-		<method name="setAutomaticPerformanceSnapshots()V"/>
-		<method name="setInTouchMode(Z)V"/>
-		<method name="start()V"/>
-		<method name="startActivitySync(Landroid/content/Intent;)Landroid/app/Activity;"/>
-		<method name="startActivitySync(Landroid/content/Intent;Landroid/os/Bundle;)Landroid/app/Activity;" since="28"/>
-		<method name="startAllocCounting()V" deprecated="23"/>
-		<method name="startPerformanceSnapshot()V"/>
-		<method name="startProfiling()V"/>
-		<method name="stopAllocCounting()V" deprecated="23"/>
-		<method name="stopProfiling()V"/>
-		<method name="waitForIdle(Ljava/lang/Runnable;)V"/>
-		<method name="waitForIdleSync()V"/>
-		<method name="waitForMonitor(Landroid/app/Instrumentation$ActivityMonitor;)Landroid/app/Activity;"/>
-		<method name="waitForMonitorWithTimeout(Landroid/app/Instrumentation$ActivityMonitor;J)Landroid/app/Activity;"/>
-		<field name="REPORT_KEY_IDENTIFIER"/>
-		<field name="REPORT_KEY_STREAMRESULT"/>
-	</class>
-	<class name="android/app/Instrumentation$ActivityMonitor" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" since="26"/>
-		<method name="&lt;init>(Landroid/content/IntentFilter;Landroid/app/Instrumentation$ActivityResult;Z)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation$ActivityResult;Z)V"/>
-		<method name="getFilter()Landroid/content/IntentFilter;"/>
-		<method name="getHits()I"/>
-		<method name="getLastActivity()Landroid/app/Activity;"/>
-		<method name="getResult()Landroid/app/Instrumentation$ActivityResult;"/>
-		<method name="isBlocking()Z"/>
-		<method name="onStartActivity(Landroid/content/Intent;)Landroid/app/Instrumentation$ActivityResult;" since="26"/>
-		<method name="waitForActivity()Landroid/app/Activity;"/>
-		<method name="waitForActivityWithTimeout(J)Landroid/app/Activity;"/>
-	</class>
-	<class name="android/app/Instrumentation$ActivityResult" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILandroid/content/Intent;)V"/>
-		<method name="getResultCode()I"/>
-		<method name="getResultData()Landroid/content/Intent;"/>
-	</class>
-	<class name="android/app/IntentService" since="3">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="onHandleIntent(Landroid/content/Intent;)V"/>
-		<method name="setIntentRedelivery(Z)V" since="5"/>
-	</class>
-	<class name="android/app/KeyguardManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createConfirmDeviceCredentialIntent(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/Intent;" since="21"/>
-		<method name="exitKeyguardSecurely(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V" deprecated="16"/>
-		<method name="inKeyguardRestrictedInputMode()Z" deprecated="28"/>
-		<method name="isDeviceLocked()Z" since="22"/>
-		<method name="isDeviceSecure()Z" since="23"/>
-		<method name="isKeyguardLocked()Z" since="16"/>
-		<method name="isKeyguardSecure()Z" since="16"/>
-		<method name="newKeyguardLock(Ljava/lang/String;)Landroid/app/KeyguardManager$KeyguardLock;" deprecated="16"/>
-		<method name="requestDismissKeyguard(Landroid/app/Activity;Landroid/app/KeyguardManager$KeyguardDismissCallback;)V" since="26"/>
-	</class>
-	<class name="android/app/KeyguardManager$KeyguardDismissCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onDismissCancelled()V"/>
-		<method name="onDismissError()V"/>
-		<method name="onDismissSucceeded()V"/>
-	</class>
-	<class name="android/app/KeyguardManager$KeyguardLock" since="1" deprecated="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/app/KeyguardManager;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/app/KeyguardManager;Ljava/lang/String;)V" since="29"/>
-		<method name="disableKeyguard()V"/>
-		<method name="reenableKeyguard()V"/>
-	</class>
-	<class name="android/app/KeyguardManager$OnKeyguardExitResult" since="1" deprecated="26">
-		<extends name="java/lang/Object"/>
-		<method name="onKeyguardExitResult(Z)V"/>
-	</class>
-	<class name="android/app/LauncherActivity" since="1">
-		<extends name="android/app/ListActivity"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTargetIntent()Landroid/content/Intent;"/>
-		<method name="intentForPosition(I)Landroid/content/Intent;" since="3"/>
-		<method name="itemForPosition(I)Landroid/app/LauncherActivity$ListItem;" since="4"/>
-		<method name="makeListItems()Ljava/util/List;" since="3"/>
-		<method name="onQueryPackageManager(Landroid/content/Intent;)Ljava/util/List;" since="5"/>
-		<method name="onSetContentView()V" since="5"/>
-	</class>
-	<class name="android/app/LauncherActivity$IconResizer" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/app/LauncherActivity;)V"/>
-		<method name="createIconThumbnail(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;"/>
-	</class>
-	<class name="android/app/LauncherActivity$ListItem" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="className"/>
-		<field name="extras"/>
-		<field name="icon"/>
-		<field name="label"/>
-		<field name="packageName"/>
-		<field name="resolveInfo" since="4"/>
-	</class>
-	<class name="android/app/ListActivity" since="1">
-		<extends name="android/app/Activity"/>
-		<method name="&lt;init>()V"/>
-		<method name="getListAdapter()Landroid/widget/ListAdapter;"/>
-		<method name="getListView()Landroid/widget/ListView;"/>
-		<method name="getSelectedItemId()J"/>
-		<method name="getSelectedItemPosition()I"/>
-		<method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V"/>
-		<method name="setListAdapter(Landroid/widget/ListAdapter;)V"/>
-		<method name="setSelection(I)V"/>
-	</class>
-	<class name="android/app/ListFragment" since="11" deprecated="28">
-		<extends name="android/app/Fragment"/>
-		<method name="&lt;init>()V"/>
-		<method name="getListAdapter()Landroid/widget/ListAdapter;"/>
-		<method name="getListView()Landroid/widget/ListView;"/>
-		<method name="getSelectedItemId()J"/>
-		<method name="getSelectedItemPosition()I"/>
-		<method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V"/>
-		<method name="setEmptyText(Ljava/lang/CharSequence;)V"/>
-		<method name="setListAdapter(Landroid/widget/ListAdapter;)V"/>
-		<method name="setListShown(Z)V"/>
-		<method name="setListShownNoAnimation(Z)V"/>
-		<method name="setSelection(I)V"/>
-	</class>
-	<class name="android/app/LoaderManager" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="destroyLoader(I)V"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="enableDebugLogging(Z)V"/>
-		<method name="getLoader(I)Landroid/content/Loader;"/>
-		<method name="initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;"/>
-		<method name="restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;"/>
-	</class>
-	<class name="android/app/LoaderManager$LoaderCallbacks" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="onCreateLoader(ILandroid/os/Bundle;)Landroid/content/Loader;"/>
-		<method name="onLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V"/>
-		<method name="onLoaderReset(Landroid/content/Loader;)V"/>
-	</class>
-	<class name="android/app/LocalActivityManager" since="1" deprecated="13">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/app/Activity;Z)V"/>
-		<method name="destroyActivity(Ljava/lang/String;Z)Landroid/view/Window;"/>
-		<method name="dispatchCreate(Landroid/os/Bundle;)V"/>
-		<method name="dispatchDestroy(Z)V"/>
-		<method name="dispatchPause(Z)V"/>
-		<method name="dispatchResume()V"/>
-		<method name="dispatchStop()V"/>
-		<method name="getActivity(Ljava/lang/String;)Landroid/app/Activity;"/>
-		<method name="getCurrentActivity()Landroid/app/Activity;"/>
-		<method name="getCurrentId()Ljava/lang/String;"/>
-		<method name="removeAllActivities()V"/>
-		<method name="saveInstanceState()Landroid/os/Bundle;"/>
-		<method name="startActivity(Ljava/lang/String;Landroid/content/Intent;)Landroid/view/Window;"/>
-	</class>
-	<class name="android/app/MediaRouteActionProvider" since="16">
-		<extends name="android/view/ActionProvider"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="setExtendedSettingsClickListener(Landroid/view/View$OnClickListener;)V"/>
-		<method name="setRouteTypes(I)V"/>
-	</class>
-	<class name="android/app/MediaRouteButton" since="16">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getRouteTypes()I"/>
-		<method name="setExtendedSettingsClickListener(Landroid/view/View$OnClickListener;)V"/>
-		<method name="setRouteTypes(I)V"/>
-		<method name="showDialog()V"/>
-	</class>
-	<class name="android/app/NativeActivity" since="9">
-		<extends name="android/app/Activity"/>
-		<implements name="android/view/InputQueue$Callback"/>
-		<implements name="android/view/SurfaceHolder$Callback2"/>
-		<implements name="android/view/ViewTreeObserver$OnGlobalLayoutListener"/>
-		<method name="&lt;init>()V"/>
-		<field name="META_DATA_FUNC_NAME"/>
-		<field name="META_DATA_LIB_NAME"/>
-	</class>
-	<class name="android/app/Notification" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(ILjava/lang/CharSequence;J)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="clone()Landroid/app/Notification;" since="9"/>
-		<method name="getBadgeIconType()I" since="26"/>
-		<method name="getChannelId()Ljava/lang/String;" since="26"/>
-		<method name="getGroup()Ljava/lang/String;" since="20"/>
-		<method name="getGroupAlertBehavior()I" since="26"/>
-		<method name="getLargeIcon()Landroid/graphics/drawable/Icon;" since="23"/>
-		<method name="getSettingsText()Ljava/lang/CharSequence;" since="26"/>
-		<method name="getShortcutId()Ljava/lang/String;" since="26"/>
-		<method name="getSmallIcon()Landroid/graphics/drawable/Icon;" since="23"/>
-		<method name="getSortKey()Ljava/lang/String;" since="20"/>
-		<method name="getTimeoutAfter()J" since="26"/>
-		<method name="setLatestEventInfo(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="16" removed="23"/>
-		<field name="AUDIO_ATTRIBUTES_DEFAULT" since="21"/>
-		<field name="BADGE_ICON_LARGE" since="26"/>
-		<field name="BADGE_ICON_NONE" since="26"/>
-		<field name="BADGE_ICON_SMALL" since="26"/>
-		<field name="CATEGORY_ALARM" since="21"/>
-		<field name="CATEGORY_CALL" since="21"/>
-		<field name="CATEGORY_EMAIL" since="21"/>
-		<field name="CATEGORY_ERROR" since="21"/>
-		<field name="CATEGORY_EVENT" since="21"/>
-		<field name="CATEGORY_MESSAGE" since="21"/>
-		<field name="CATEGORY_NAVIGATION" since="28"/>
-		<field name="CATEGORY_PROGRESS" since="21"/>
-		<field name="CATEGORY_PROMO" since="21"/>
-		<field name="CATEGORY_RECOMMENDATION" since="21"/>
-		<field name="CATEGORY_REMINDER" since="23"/>
-		<field name="CATEGORY_SERVICE" since="21"/>
-		<field name="CATEGORY_SOCIAL" since="21"/>
-		<field name="CATEGORY_STATUS" since="21"/>
-		<field name="CATEGORY_SYSTEM" since="21"/>
-		<field name="CATEGORY_TRANSPORT" since="21"/>
-		<field name="COLOR_DEFAULT" since="21"/>
-		<field name="CREATOR"/>
-		<field name="DEFAULT_ALL"/>
-		<field name="DEFAULT_LIGHTS"/>
-		<field name="DEFAULT_SOUND"/>
-		<field name="DEFAULT_VIBRATE"/>
-		<field name="EXTRA_AUDIO_CONTENTS_URI" since="26"/>
-		<field name="EXTRA_BACKGROUND_IMAGE_URI" since="21"/>
-		<field name="EXTRA_BIG_TEXT" since="21"/>
-		<field name="EXTRA_CHANNEL_GROUP_ID" since="28"/>
-		<field name="EXTRA_CHANNEL_ID" since="26"/>
-		<field name="EXTRA_CHRONOMETER_COUNT_DOWN" since="24"/>
-		<field name="EXTRA_COLORIZED" since="26"/>
-		<field name="EXTRA_COMPACT_ACTIONS" since="21"/>
-		<field name="EXTRA_CONVERSATION_TITLE" since="24"/>
-		<field name="EXTRA_HISTORIC_MESSAGES" since="26"/>
-		<field name="EXTRA_INFO_TEXT" since="19"/>
-		<field name="EXTRA_IS_GROUP_CONVERSATION" since="28"/>
-		<field name="EXTRA_LARGE_ICON" since="19" deprecated="26"/>
-		<field name="EXTRA_LARGE_ICON_BIG" since="19"/>
-		<field name="EXTRA_MEDIA_SESSION" since="21"/>
-		<field name="EXTRA_MESSAGES" since="24"/>
-		<field name="EXTRA_MESSAGING_PERSON" since="28"/>
-		<field name="EXTRA_NOTIFICATION_ID" since="26"/>
-		<field name="EXTRA_NOTIFICATION_TAG" since="26"/>
-		<field name="EXTRA_PEOPLE" since="19" deprecated="28"/>
-		<field name="EXTRA_PEOPLE_LIST" since="28"/>
-		<field name="EXTRA_PICTURE" since="19"/>
-		<field name="EXTRA_PROGRESS" since="19"/>
-		<field name="EXTRA_PROGRESS_INDETERMINATE" since="19"/>
-		<field name="EXTRA_PROGRESS_MAX" since="19"/>
-		<field name="EXTRA_REMOTE_INPUT_DRAFT" since="28"/>
-		<field name="EXTRA_REMOTE_INPUT_HISTORY" since="24"/>
-		<field name="EXTRA_SELF_DISPLAY_NAME" since="24" deprecated="28"/>
-		<field name="EXTRA_SHOW_CHRONOMETER" since="19"/>
-		<field name="EXTRA_SHOW_WHEN" since="19"/>
-		<field name="EXTRA_SMALL_ICON" since="19" deprecated="26"/>
-		<field name="EXTRA_SUB_TEXT" since="19"/>
-		<field name="EXTRA_SUMMARY_TEXT" since="19"/>
-		<field name="EXTRA_TEMPLATE" since="21"/>
-		<field name="EXTRA_TEXT" since="19"/>
-		<field name="EXTRA_TEXT_LINES" since="19"/>
-		<field name="EXTRA_TITLE" since="19"/>
-		<field name="EXTRA_TITLE_BIG" since="19"/>
-		<field name="FLAG_AUTO_CANCEL"/>
-		<field name="FLAG_FOREGROUND_SERVICE" since="5"/>
-		<field name="FLAG_GROUP_SUMMARY" since="20"/>
-		<field name="FLAG_HIGH_PRIORITY" since="11" deprecated="16"/>
-		<field name="FLAG_INSISTENT"/>
-		<field name="FLAG_LOCAL_ONLY" since="20"/>
-		<field name="FLAG_NO_CLEAR"/>
-		<field name="FLAG_ONGOING_EVENT"/>
-		<field name="FLAG_ONLY_ALERT_ONCE"/>
-		<field name="FLAG_SHOW_LIGHTS" deprecated="26"/>
-		<field name="GROUP_ALERT_ALL" since="26"/>
-		<field name="GROUP_ALERT_CHILDREN" since="26"/>
-		<field name="GROUP_ALERT_SUMMARY" since="26"/>
-		<field name="INTENT_CATEGORY_NOTIFICATION_PREFERENCES" since="21"/>
-		<field name="PRIORITY_DEFAULT" since="16" deprecated="26"/>
-		<field name="PRIORITY_HIGH" since="16" deprecated="26"/>
-		<field name="PRIORITY_LOW" since="16" deprecated="26"/>
-		<field name="PRIORITY_MAX" since="16" deprecated="26"/>
-		<field name="PRIORITY_MIN" since="16" deprecated="26"/>
-		<field name="STREAM_DEFAULT" deprecated="21"/>
-		<field name="VISIBILITY_PRIVATE" since="21"/>
-		<field name="VISIBILITY_PUBLIC" since="21"/>
-		<field name="VISIBILITY_SECRET" since="21"/>
-		<field name="actions" since="19"/>
-		<field name="audioAttributes" since="21" deprecated="26"/>
-		<field name="audioStreamType" deprecated="21"/>
-		<field name="bigContentView" since="16" deprecated="24"/>
-		<field name="category" since="21"/>
-		<field name="color" since="21"/>
-		<field name="contentIntent"/>
-		<field name="contentView" deprecated="24"/>
-		<field name="defaults" deprecated="26"/>
-		<field name="deleteIntent"/>
-		<field name="extras" since="19"/>
-		<field name="flags"/>
-		<field name="fullScreenIntent" since="9"/>
-		<field name="headsUpContentView" since="21" deprecated="24"/>
-		<field name="icon" deprecated="23"/>
-		<field name="iconLevel"/>
-		<field name="largeIcon" since="11" deprecated="23"/>
-		<field name="ledARGB" deprecated="26"/>
-		<field name="ledOffMS" deprecated="26"/>
-		<field name="ledOnMS" deprecated="26"/>
-		<field name="number" deprecated="24"/>
-		<field name="priority" since="16" deprecated="26"/>
-		<field name="publicVersion" since="21"/>
-		<field name="sound" deprecated="26"/>
-		<field name="tickerText"/>
-		<field name="tickerView" since="11" deprecated="21"/>
-		<field name="vibrate" deprecated="26"/>
-		<field name="visibility" since="21"/>
-		<field name="when"/>
-	</class>
-	<class name="android/app/Notification$Action" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="23"/>
-		<method name="clone()Landroid/app/Notification$Action;"/>
-		<method name="getAllowGeneratedReplies()Z" since="24"/>
-		<method name="getDataOnlyRemoteInputs()[Landroid/app/RemoteInput;" since="26"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="20"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;" since="23"/>
-		<method name="getRemoteInputs()[Landroid/app/RemoteInput;" since="20"/>
-		<method name="getSemanticAction()I" since="28"/>
-		<field name="CREATOR"/>
-		<field name="SEMANTIC_ACTION_ARCHIVE" since="28"/>
-		<field name="SEMANTIC_ACTION_CALL" since="28"/>
-		<field name="SEMANTIC_ACTION_DELETE" since="28"/>
-		<field name="SEMANTIC_ACTION_MARK_AS_READ" since="28"/>
-		<field name="SEMANTIC_ACTION_MARK_AS_UNREAD" since="28"/>
-		<field name="SEMANTIC_ACTION_MUTE" since="28"/>
-		<field name="SEMANTIC_ACTION_NONE" since="28"/>
-		<field name="SEMANTIC_ACTION_REPLY" since="28"/>
-		<field name="SEMANTIC_ACTION_THUMBS_DOWN" since="28"/>
-		<field name="SEMANTIC_ACTION_THUMBS_UP" since="28"/>
-		<field name="SEMANTIC_ACTION_UNMUTE" since="28"/>
-		<field name="actionIntent"/>
-		<field name="icon" deprecated="23"/>
-		<field name="title"/>
-	</class>
-	<class name="android/app/Notification$Action$Builder" since="20">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="23"/>
-		<method name="&lt;init>(Landroid/app/Notification$Action;)V"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" since="23"/>
-		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Action$Builder;"/>
-		<method name="addRemoteInput(Landroid/app/RemoteInput;)Landroid/app/Notification$Action$Builder;"/>
-		<method name="build()Landroid/app/Notification$Action;"/>
-		<method name="extend(Landroid/app/Notification$Action$Extender;)Landroid/app/Notification$Action$Builder;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="setAllowGeneratedReplies(Z)Landroid/app/Notification$Action$Builder;" since="24"/>
-		<method name="setSemanticAction(I)Landroid/app/Notification$Action$Builder;" since="28"/>
-	</class>
-	<class name="android/app/Notification$Action$Extender" since="20">
-		<extends name="java/lang/Object"/>
-		<method name="extend(Landroid/app/Notification$Action$Builder;)Landroid/app/Notification$Action$Builder;"/>
-	</class>
-	<class name="android/app/Notification$Action$WearableExtender" since="20">
-		<extends name="java/lang/Object"/>
-		<implements name="android/app/Notification$Action$Extender"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/Notification$Action;)V"/>
-		<method name="clone()Landroid/app/Notification$Action$WearableExtender;"/>
-		<method name="getCancelLabel()Ljava/lang/CharSequence;" since="22" deprecated="28"/>
-		<method name="getConfirmLabel()Ljava/lang/CharSequence;" since="22" deprecated="28"/>
-		<method name="getHintDisplayActionInline()Z" since="25"/>
-		<method name="getHintLaunchesActivity()Z" since="24"/>
-		<method name="getInProgressLabel()Ljava/lang/CharSequence;" since="22" deprecated="28"/>
-		<method name="isAvailableOffline()Z"/>
-		<method name="setAvailableOffline(Z)Landroid/app/Notification$Action$WearableExtender;"/>
-		<method name="setCancelLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28"/>
-		<method name="setConfirmLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28"/>
-		<method name="setHintDisplayActionInline(Z)Landroid/app/Notification$Action$WearableExtender;" since="25"/>
-		<method name="setHintLaunchesActivity(Z)Landroid/app/Notification$Action$WearableExtender;" since="24"/>
-		<method name="setInProgressLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28"/>
-	</class>
-	<class name="android/app/Notification$BigPictureStyle" since="16">
-		<extends name="android/app/Notification$Style"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
-		<method name="bigLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$BigPictureStyle;"/>
-		<method name="bigLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BigPictureStyle;" since="23"/>
-		<method name="bigPicture(Landroid/graphics/Bitmap;)Landroid/app/Notification$BigPictureStyle;"/>
-		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;"/>
-		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;"/>
-	</class>
-	<class name="android/app/Notification$BigTextStyle" since="16">
-		<extends name="android/app/Notification$Style"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
-		<method name="bigText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
-		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
-		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
-	</class>
-	<class name="android/app/Notification$Builder" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="26"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V" since="26"/>
-		<method name="addAction(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;" since="16" deprecated="23"/>
-		<method name="addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;" since="20"/>
-		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;" since="20"/>
-		<method name="addPerson(Landroid/app/Person;)Landroid/app/Notification$Builder;" since="28"/>
-		<method name="addPerson(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="21" deprecated="28"/>
-		<method name="build()Landroid/app/Notification;" since="16"/>
-		<method name="createBigContentView()Landroid/widget/RemoteViews;" since="24"/>
-		<method name="createContentView()Landroid/widget/RemoteViews;" since="24"/>
-		<method name="createHeadsUpContentView()Landroid/widget/RemoteViews;" since="24"/>
-		<method name="extend(Landroid/app/Notification$Extender;)Landroid/app/Notification$Builder;" since="20"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="20"/>
-		<method name="getNotification()Landroid/app/Notification;" deprecated="16"/>
-		<method name="getStyle()Landroid/app/Notification$Style;" since="28"/>
-		<method name="recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;" since="24"/>
-		<method name="setActions([Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;" since="24"/>
-		<method name="setAutoCancel(Z)Landroid/app/Notification$Builder;"/>
-		<method name="setBadgeIconType(I)Landroid/app/Notification$Builder;" since="26"/>
-		<method name="setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="21"/>
-		<method name="setChannelId(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="26"/>
-		<method name="setChronometerCountDown(Z)Landroid/app/Notification$Builder;" since="24"/>
-		<method name="setColor(I)Landroid/app/Notification$Builder;" since="21"/>
-		<method name="setColorized(Z)Landroid/app/Notification$Builder;" since="26"/>
-		<method name="setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" deprecated="24"/>
-		<method name="setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" deprecated="24"/>
-		<method name="setContentIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;"/>
-		<method name="setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;"/>
-		<method name="setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;"/>
-		<method name="setCustomBigContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24"/>
-		<method name="setCustomContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24"/>
-		<method name="setCustomHeadsUpContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24"/>
-		<method name="setDefaults(I)Landroid/app/Notification$Builder;" deprecated="26"/>
-		<method name="setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;"/>
-		<method name="setExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;" since="19"/>
-		<method name="setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;"/>
-		<method name="setGroup(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="20"/>
-		<method name="setGroupAlertBehavior(I)Landroid/app/Notification$Builder;" since="26"/>
-		<method name="setGroupSummary(Z)Landroid/app/Notification$Builder;" since="20"/>
-		<method name="setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$Builder;"/>
-		<method name="setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;" since="23"/>
-		<method name="setLights(III)Landroid/app/Notification$Builder;" deprecated="26"/>
-		<method name="setLocalOnly(Z)Landroid/app/Notification$Builder;" since="20"/>
-		<method name="setNumber(I)Landroid/app/Notification$Builder;" deprecated="24"/>
-		<method name="setOngoing(Z)Landroid/app/Notification$Builder;"/>
-		<method name="setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;"/>
-		<method name="setPriority(I)Landroid/app/Notification$Builder;" since="16" deprecated="26"/>
-		<method name="setProgress(IIZ)Landroid/app/Notification$Builder;" since="14"/>
-		<method name="setPublicVersion(Landroid/app/Notification;)Landroid/app/Notification$Builder;" since="21"/>
-		<method name="setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="24"/>
-		<method name="setSettingsText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="26"/>
-		<method name="setShortcutId(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="26"/>
-		<method name="setShowWhen(Z)Landroid/app/Notification$Builder;" since="17"/>
-		<method name="setSmallIcon(I)Landroid/app/Notification$Builder;"/>
-		<method name="setSmallIcon(II)Landroid/app/Notification$Builder;"/>
-		<method name="setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;" since="23"/>
-		<method name="setSortKey(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="20"/>
-		<method name="setSound(Landroid/net/Uri;)Landroid/app/Notification$Builder;" deprecated="26"/>
-		<method name="setSound(Landroid/net/Uri;I)Landroid/app/Notification$Builder;" deprecated="21"/>
-		<method name="setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)Landroid/app/Notification$Builder;" since="21" deprecated="26"/>
-		<method name="setStyle(Landroid/app/Notification$Style;)Landroid/app/Notification$Builder;" since="16"/>
-		<method name="setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="16"/>
-		<method name="setTicker(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;"/>
-		<method name="setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" deprecated="21"/>
-		<method name="setTimeoutAfter(J)Landroid/app/Notification$Builder;" since="26"/>
-		<method name="setUsesChronometer(Z)Landroid/app/Notification$Builder;" since="16"/>
-		<method name="setVibrate([J)Landroid/app/Notification$Builder;" deprecated="26"/>
-		<method name="setVisibility(I)Landroid/app/Notification$Builder;" since="21"/>
-		<method name="setWhen(J)Landroid/app/Notification$Builder;"/>
-	</class>
-	<class name="android/app/Notification$CarExtender" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/app/Notification$Extender"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/Notification;)V"/>
-		<method name="getColor()I"/>
-		<method name="getLargeIcon()Landroid/graphics/Bitmap;"/>
-		<method name="getUnreadConversation()Landroid/app/Notification$CarExtender$UnreadConversation;"/>
-		<method name="setColor(I)Landroid/app/Notification$CarExtender;"/>
-		<method name="setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$CarExtender;"/>
-		<method name="setUnreadConversation(Landroid/app/Notification$CarExtender$UnreadConversation;)Landroid/app/Notification$CarExtender;"/>
-	</class>
-	<class name="android/app/Notification$CarExtender$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="addMessage(Ljava/lang/String;)Landroid/app/Notification$CarExtender$Builder;"/>
-		<method name="build()Landroid/app/Notification$CarExtender$UnreadConversation;"/>
-		<method name="setLatestTimestamp(J)Landroid/app/Notification$CarExtender$Builder;"/>
-		<method name="setReadPendingIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$CarExtender$Builder;"/>
-		<method name="setReplyAction(Landroid/app/PendingIntent;Landroid/app/RemoteInput;)Landroid/app/Notification$CarExtender$Builder;"/>
-	</class>
-	<class name="android/app/Notification$CarExtender$UnreadConversation" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([Ljava/lang/String;Landroid/app/RemoteInput;Landroid/app/PendingIntent;Landroid/app/PendingIntent;[Ljava/lang/String;J)V" since="29"/>
-		<method name="getLatestTimestamp()J"/>
-		<method name="getMessages()[Ljava/lang/String;"/>
-		<method name="getParticipant()Ljava/lang/String;"/>
-		<method name="getParticipants()[Ljava/lang/String;"/>
-		<method name="getReadPendingIntent()Landroid/app/PendingIntent;"/>
-		<method name="getRemoteInput()Landroid/app/RemoteInput;"/>
-		<method name="getReplyPendingIntent()Landroid/app/PendingIntent;"/>
-	</class>
-	<class name="android/app/Notification$DecoratedCustomViewStyle" since="24">
-		<extends name="android/app/Notification$Style"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/app/Notification$DecoratedMediaCustomViewStyle" since="24">
-		<extends name="android/app/Notification$MediaStyle"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/app/Notification$Extender" since="20">
-		<extends name="java/lang/Object"/>
-		<method name="extend(Landroid/app/Notification$Builder;)Landroid/app/Notification$Builder;"/>
-	</class>
-	<class name="android/app/Notification$InboxStyle" since="16">
-		<extends name="android/app/Notification$Style"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
-		<method name="addLine(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;"/>
-		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;"/>
-		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;"/>
-	</class>
-	<class name="android/app/Notification$MediaStyle" since="21">
-		<extends name="android/app/Notification$Style"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
-		<method name="setMediaSession(Landroid/media/session/MediaSession$Token;)Landroid/app/Notification$MediaStyle;"/>
-		<method name="setShowActionsInCompactView([I)Landroid/app/Notification$MediaStyle;"/>
-	</class>
-	<class name="android/app/Notification$MessagingStyle" since="24">
-		<extends name="android/app/Notification$Style"/>
-		<method name="&lt;init>(Landroid/app/Person;)V" since="28"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V" deprecated="28"/>
-		<method name="addHistoricMessage(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Notification$MessagingStyle;" since="26"/>
-		<method name="addMessage(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Notification$MessagingStyle;"/>
-		<method name="addMessage(Ljava/lang/CharSequence;JLandroid/app/Person;)Landroid/app/Notification$MessagingStyle;" since="28"/>
-		<method name="addMessage(Ljava/lang/CharSequence;JLjava/lang/CharSequence;)Landroid/app/Notification$MessagingStyle;" deprecated="28"/>
-		<method name="getConversationTitle()Ljava/lang/CharSequence;"/>
-		<method name="getHistoricMessages()Ljava/util/List;" since="26"/>
-		<method name="getMessages()Ljava/util/List;"/>
-		<method name="getUser()Landroid/app/Person;" since="28"/>
-		<method name="getUserDisplayName()Ljava/lang/CharSequence;" deprecated="28"/>
-		<method name="isGroupConversation()Z" since="28"/>
-		<method name="setConversationTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$MessagingStyle;"/>
-		<method name="setGroupConversation(Z)Landroid/app/Notification$MessagingStyle;" since="28"/>
-		<field name="MAXIMUM_RETAINED_MESSAGES"/>
-	</class>
-	<class name="android/app/Notification$MessagingStyle$Message" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;JLandroid/app/Person;)V" since="28"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;JLjava/lang/CharSequence;)V" deprecated="28"/>
-		<method name="getDataMimeType()Ljava/lang/String;"/>
-		<method name="getDataUri()Landroid/net/Uri;"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="26"/>
-		<method name="getSender()Ljava/lang/CharSequence;" deprecated="28"/>
-		<method name="getSenderPerson()Landroid/app/Person;" since="28"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="getTimestamp()J"/>
-		<method name="setData(Ljava/lang/String;Landroid/net/Uri;)Landroid/app/Notification$MessagingStyle$Message;"/>
-	</class>
-	<class name="android/app/Notification$Style" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/app/Notification;"/>
-		<method name="checkBuilder()V"/>
-		<method name="getStandardView(I)Landroid/widget/RemoteViews;"/>
-		<method name="internalSetBigContentTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="internalSetSummaryText(Ljava/lang/CharSequence;)V"/>
-		<method name="setBuilder(Landroid/app/Notification$Builder;)V"/>
-		<field name="mBuilder"/>
-	</class>
-	<class name="android/app/Notification$WearableExtender" since="20">
-		<extends name="java/lang/Object"/>
-		<implements name="android/app/Notification$Extender"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/Notification;)V"/>
-		<method name="addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$WearableExtender;"/>
-		<method name="addActions(Ljava/util/List;)Landroid/app/Notification$WearableExtender;"/>
-		<method name="addPage(Landroid/app/Notification;)Landroid/app/Notification$WearableExtender;"/>
-		<method name="addPages(Ljava/util/List;)Landroid/app/Notification$WearableExtender;"/>
-		<method name="clearActions()Landroid/app/Notification$WearableExtender;"/>
-		<method name="clearPages()Landroid/app/Notification$WearableExtender;"/>
-		<method name="clone()Landroid/app/Notification$WearableExtender;"/>
-		<method name="getActions()Ljava/util/List;"/>
-		<method name="getBackground()Landroid/graphics/Bitmap;"/>
-		<method name="getBridgeTag()Ljava/lang/String;" since="26"/>
-		<method name="getContentAction()I"/>
-		<method name="getContentIcon()I" deprecated="28"/>
-		<method name="getContentIconGravity()I" deprecated="28"/>
-		<method name="getContentIntentAvailableOffline()Z"/>
-		<method name="getCustomContentHeight()I" deprecated="28"/>
-		<method name="getCustomSizePreset()I" deprecated="28"/>
-		<method name="getDismissalId()Ljava/lang/String;" since="24"/>
-		<method name="getDisplayIntent()Landroid/app/PendingIntent;"/>
-		<method name="getGravity()I" deprecated="28"/>
-		<method name="getHintAmbientBigPicture()Z" since="24"/>
-		<method name="getHintAvoidBackgroundClipping()Z" since="22" deprecated="28"/>
-		<method name="getHintContentIntentLaunchesActivity()Z" since="24"/>
-		<method name="getHintHideIcon()Z" deprecated="28"/>
-		<method name="getHintScreenTimeout()I" since="22" deprecated="28"/>
-		<method name="getHintShowBackgroundOnly()Z" deprecated="28"/>
-		<method name="getPages()Ljava/util/List;"/>
-		<method name="getStartScrollBottom()Z"/>
-		<method name="setBackground(Landroid/graphics/Bitmap;)Landroid/app/Notification$WearableExtender;"/>
-		<method name="setBridgeTag(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="26"/>
-		<method name="setContentAction(I)Landroid/app/Notification$WearableExtender;"/>
-		<method name="setContentIcon(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
-		<method name="setContentIconGravity(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
-		<method name="setContentIntentAvailableOffline(Z)Landroid/app/Notification$WearableExtender;"/>
-		<method name="setCustomContentHeight(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
-		<method name="setCustomSizePreset(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
-		<method name="setDismissalId(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="24"/>
-		<method name="setDisplayIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$WearableExtender;"/>
-		<method name="setGravity(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
-		<method name="setHintAmbientBigPicture(Z)Landroid/app/Notification$WearableExtender;" since="24"/>
-		<method name="setHintAvoidBackgroundClipping(Z)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28"/>
-		<method name="setHintContentIntentLaunchesActivity(Z)Landroid/app/Notification$WearableExtender;" since="24"/>
-		<method name="setHintHideIcon(Z)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
-		<method name="setHintScreenTimeout(I)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28"/>
-		<method name="setHintShowBackgroundOnly(Z)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
-		<method name="setStartScrollBottom(Z)Landroid/app/Notification$WearableExtender;"/>
-		<field name="SCREEN_TIMEOUT_LONG" since="22"/>
-		<field name="SCREEN_TIMEOUT_SHORT" since="22"/>
-		<field name="SIZE_DEFAULT"/>
-		<field name="SIZE_FULL_SCREEN"/>
-		<field name="SIZE_LARGE"/>
-		<field name="SIZE_MEDIUM"/>
-		<field name="SIZE_SMALL"/>
-		<field name="SIZE_XSMALL"/>
-		<field name="UNSET_ACTION_INDEX"/>
-	</class>
-	<class name="android/app/NotificationChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
-		<method name="canBypassDnd()Z"/>
-		<method name="canShowBadge()Z"/>
-		<method name="enableLights(Z)V"/>
-		<method name="enableVibration(Z)V"/>
-		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getGroup()Ljava/lang/String;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getImportance()I"/>
-		<method name="getLightColor()I"/>
-		<method name="getLockscreenVisibility()I"/>
-		<method name="getName()Ljava/lang/CharSequence;"/>
-		<method name="getSound()Landroid/net/Uri;"/>
-		<method name="getVibrationPattern()[J"/>
-		<method name="setBypassDnd(Z)V"/>
-		<method name="setDescription(Ljava/lang/String;)V"/>
-		<method name="setGroup(Ljava/lang/String;)V"/>
-		<method name="setImportance(I)V"/>
-		<method name="setLightColor(I)V"/>
-		<method name="setLockscreenVisibility(I)V"/>
-		<method name="setName(Ljava/lang/CharSequence;)V"/>
-		<method name="setShowBadge(Z)V"/>
-		<method name="setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)V"/>
-		<method name="setVibrationPattern([J)V"/>
-		<method name="shouldShowLights()Z"/>
-		<method name="shouldVibrate()Z"/>
-		<field name="CREATOR"/>
-		<field name="DEFAULT_CHANNEL_ID"/>
-	</class>
-	<class name="android/app/NotificationChannelGroup" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;)V"/>
-		<method name="clone()Landroid/app/NotificationChannelGroup;"/>
-		<method name="getChannels()Ljava/util/List;"/>
-		<method name="getDescription()Ljava/lang/String;" since="28"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/CharSequence;"/>
-		<method name="isBlocked()Z" since="28"/>
-		<method name="setDescription(Ljava/lang/String;)V" since="28"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/NotificationManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;)V" since="29"/>
-		<method name="addAutomaticZenRule(Landroid/app/AutomaticZenRule;)Ljava/lang/String;" since="24"/>
-		<method name="areNotificationsEnabled()Z" since="24"/>
-		<method name="cancel(I)V"/>
-		<method name="cancel(Ljava/lang/String;I)V" since="5"/>
-		<method name="cancelAll()V"/>
-		<method name="createNotificationChannel(Landroid/app/NotificationChannel;)V" since="26"/>
-		<method name="createNotificationChannelGroup(Landroid/app/NotificationChannelGroup;)V" since="26"/>
-		<method name="createNotificationChannelGroups(Ljava/util/List;)V" since="26"/>
-		<method name="createNotificationChannels(Ljava/util/List;)V" since="26"/>
-		<method name="deleteNotificationChannel(Ljava/lang/String;)V" since="26"/>
-		<method name="deleteNotificationChannelGroup(Ljava/lang/String;)V" since="26"/>
-		<method name="getActiveNotifications()[Landroid/service/notification/StatusBarNotification;" since="23"/>
-		<method name="getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;" since="24"/>
-		<method name="getAutomaticZenRules()Ljava/util/Map;" since="24"/>
-		<method name="getCurrentInterruptionFilter()I" since="23"/>
-		<method name="getImportance()I" since="24"/>
-		<method name="getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;" since="26"/>
-		<method name="getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;" since="28"/>
-		<method name="getNotificationChannelGroups()Ljava/util/List;" since="26"/>
-		<method name="getNotificationChannels()Ljava/util/List;" since="26"/>
-		<method name="getNotificationPolicy()Landroid/app/NotificationManager$Policy;" since="23"/>
-		<method name="isNotificationListenerAccessGranted(Landroid/content/ComponentName;)Z" since="27"/>
-		<method name="isNotificationPolicyAccessGranted()Z" since="23"/>
-		<method name="notify(ILandroid/app/Notification;)V"/>
-		<method name="notify(Ljava/lang/String;ILandroid/app/Notification;)V" since="5"/>
-		<method name="removeAutomaticZenRule(Ljava/lang/String;)Z" since="24"/>
-		<method name="setInterruptionFilter(I)V" since="23"/>
-		<method name="setNotificationPolicy(Landroid/app/NotificationManager$Policy;)V" since="23"/>
-		<method name="updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z" since="24"/>
-		<field name="ACTION_APP_BLOCK_STATE_CHANGED" since="28"/>
-		<field name="ACTION_INTERRUPTION_FILTER_CHANGED" since="23"/>
-		<field name="ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED" since="28"/>
-		<field name="ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED" since="28"/>
-		<field name="ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED" since="23"/>
-		<field name="ACTION_NOTIFICATION_POLICY_CHANGED" since="23"/>
-		<field name="EXTRA_BLOCKED_STATE" since="28"/>
-		<field name="EXTRA_NOTIFICATION_CHANNEL_GROUP_ID" since="28"/>
-		<field name="EXTRA_NOTIFICATION_CHANNEL_ID" since="28"/>
-		<field name="IMPORTANCE_DEFAULT" since="24"/>
-		<field name="IMPORTANCE_HIGH" since="24"/>
-		<field name="IMPORTANCE_LOW" since="24"/>
-		<field name="IMPORTANCE_MAX" since="24"/>
-		<field name="IMPORTANCE_MIN" since="24"/>
-		<field name="IMPORTANCE_NONE" since="24"/>
-		<field name="IMPORTANCE_UNSPECIFIED" since="24"/>
-		<field name="INTERRUPTION_FILTER_ALARMS" since="23"/>
-		<field name="INTERRUPTION_FILTER_ALL" since="23"/>
-		<field name="INTERRUPTION_FILTER_NONE" since="23"/>
-		<field name="INTERRUPTION_FILTER_PRIORITY" since="23"/>
-		<field name="INTERRUPTION_FILTER_UNKNOWN" since="23"/>
-	</class>
-	<class name="android/app/NotificationManager$Policy" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIII)V" since="24"/>
-		<method name="priorityCategoriesToString(I)Ljava/lang/String;"/>
-		<method name="prioritySendersToString(I)Ljava/lang/String;"/>
-		<method name="suppressedEffectsToString(I)Ljava/lang/String;" since="24"/>
-		<field name="CREATOR"/>
-		<field name="PRIORITY_CATEGORY_ALARMS" since="28"/>
-		<field name="PRIORITY_CATEGORY_CALLS"/>
-		<field name="PRIORITY_CATEGORY_EVENTS"/>
-		<field name="PRIORITY_CATEGORY_MEDIA" since="28"/>
-		<field name="PRIORITY_CATEGORY_MESSAGES"/>
-		<field name="PRIORITY_CATEGORY_REMINDERS"/>
-		<field name="PRIORITY_CATEGORY_REPEAT_CALLERS"/>
-		<field name="PRIORITY_CATEGORY_SYSTEM" since="28"/>
-		<field name="PRIORITY_SENDERS_ANY"/>
-		<field name="PRIORITY_SENDERS_CONTACTS"/>
-		<field name="PRIORITY_SENDERS_STARRED"/>
-		<field name="SUPPRESSED_EFFECT_AMBIENT" since="28"/>
-		<field name="SUPPRESSED_EFFECT_BADGE" since="28"/>
-		<field name="SUPPRESSED_EFFECT_FULL_SCREEN_INTENT" since="28"/>
-		<field name="SUPPRESSED_EFFECT_LIGHTS" since="28"/>
-		<field name="SUPPRESSED_EFFECT_NOTIFICATION_LIST" since="28"/>
-		<field name="SUPPRESSED_EFFECT_PEEK" since="28"/>
-		<field name="SUPPRESSED_EFFECT_SCREEN_OFF" since="24" deprecated="28"/>
-		<field name="SUPPRESSED_EFFECT_SCREEN_ON" since="24" deprecated="28"/>
-		<field name="SUPPRESSED_EFFECT_STATUS_BAR" since="28"/>
-		<field name="priorityCallSenders"/>
-		<field name="priorityCategories"/>
-		<field name="priorityMessageSenders"/>
-		<field name="suppressedVisualEffects" since="24"/>
-	</class>
-	<class name="android/app/PendingIntent" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/IBinder;Ljava/lang/Object;)V" since="29"/>
-		<method name="cancel()V"/>
-		<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;I)Landroid/app/PendingIntent;" since="11"/>
-		<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;" since="16"/>
-		<method name="getActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
-		<method name="getActivity(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;" since="16"/>
-		<method name="getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
-		<method name="getCreatorPackage()Ljava/lang/String;" since="17"/>
-		<method name="getCreatorUid()I" since="17"/>
-		<method name="getCreatorUserHandle()Landroid/os/UserHandle;" since="17"/>
-		<method name="getForegroundService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;" since="26"/>
-		<method name="getIntentSender()Landroid/content/IntentSender;" since="4"/>
-		<method name="getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
-		<method name="getTargetPackage()Ljava/lang/String;" deprecated="17"/>
-		<method name="readPendingIntentOrNullFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;"/>
-		<method name="send()V"/>
-		<method name="send(I)V"/>
-		<method name="send(ILandroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V"/>
-		<method name="send(Landroid/content/Context;ILandroid/content/Intent;)V"/>
-		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V"/>
-		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V" since="14"/>
-		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)V" since="23"/>
-		<method name="writePendingIntentOrNullToParcel(Landroid/app/PendingIntent;Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_CANCEL_CURRENT"/>
-		<field name="FLAG_IMMUTABLE" since="23"/>
-		<field name="FLAG_NO_CREATE"/>
-		<field name="FLAG_ONE_SHOT"/>
-		<field name="FLAG_UPDATE_CURRENT" since="3"/>
-	</class>
-	<class name="android/app/PendingIntent$CanceledException" since="1">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/app/PendingIntent$OnFinished" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/Person" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/CharSequence;"/>
-		<method name="getUri()Ljava/lang/String;"/>
-		<method name="isBot()Z"/>
-		<method name="isImportant()Z"/>
-		<method name="toBuilder()Landroid/app/Person$Builder;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/Person$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/app/Person;"/>
-		<method name="setBot(Z)Landroid/app/Person$Builder;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Person$Builder;"/>
-		<method name="setImportant(Z)Landroid/app/Person$Builder;"/>
-		<method name="setKey(Ljava/lang/String;)Landroid/app/Person$Builder;"/>
-		<method name="setName(Ljava/lang/CharSequence;)Landroid/app/Person$Builder;"/>
-		<method name="setUri(Ljava/lang/String;)Landroid/app/Person$Builder;"/>
-	</class>
-	<class name="android/app/PictureInPictureParams" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/PictureInPictureParams$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/app/PictureInPictureParams;"/>
-		<method name="setActions(Ljava/util/List;)Landroid/app/PictureInPictureParams$Builder;"/>
-		<method name="setAspectRatio(Landroid/util/Rational;)Landroid/app/PictureInPictureParams$Builder;"/>
-		<method name="setSourceRectHint(Landroid/graphics/Rect;)Landroid/app/PictureInPictureParams$Builder;"/>
-	</class>
-	<class name="android/app/Presentation" since="17">
-		<extends name="android/app/Dialog"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/Display;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/Display;I)V"/>
-		<method name="getDisplay()Landroid/view/Display;"/>
-		<method name="getResources()Landroid/content/res/Resources;"/>
-		<method name="onDisplayChanged()V"/>
-		<method name="onDisplayRemoved()V"/>
-	</class>
-	<class name="android/app/ProgressDialog" since="1" deprecated="26">
-		<extends name="android/app/AlertDialog"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="getMax()I"/>
-		<method name="getProgress()I"/>
-		<method name="getSecondaryProgress()I"/>
-		<method name="incrementProgressBy(I)V"/>
-		<method name="incrementSecondaryProgressBy(I)V"/>
-		<method name="isIndeterminate()Z"/>
-		<method name="setIndeterminate(Z)V"/>
-		<method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setMax(I)V"/>
-		<method name="setProgress(I)V"/>
-		<method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setProgressNumberFormat(Ljava/lang/String;)V" since="11"/>
-		<method name="setProgressPercentFormat(Ljava/text/NumberFormat;)V" since="11"/>
-		<method name="setProgressStyle(I)V"/>
-		<method name="setSecondaryProgress(I)V"/>
-		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/app/ProgressDialog;"/>
-		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Landroid/app/ProgressDialog;"/>
-		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZ)Landroid/app/ProgressDialog;"/>
-		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZLandroid/content/DialogInterface$OnCancelListener;)Landroid/app/ProgressDialog;"/>
-		<field name="STYLE_HORIZONTAL"/>
-		<field name="STYLE_SPINNER"/>
-	</class>
-	<class name="android/app/RemoteAction" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V"/>
-		<method name="clone()Landroid/app/RemoteAction;"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/PrintWriter;)V"/>
-		<method name="getActionIntent()Landroid/app/PendingIntent;"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="isEnabled()Z"/>
-		<method name="setEnabled(Z)V"/>
-		<method name="setShouldShowIcon(Z)V" since="28"/>
-		<method name="shouldShowIcon()Z" since="28"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/RemoteInput" since="20">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="addDataResultToIntent(Landroid/app/RemoteInput;Landroid/content/Intent;Ljava/util/Map;)V" since="26"/>
-		<method name="addResultsToIntent([Landroid/app/RemoteInput;Landroid/content/Intent;Landroid/os/Bundle;)V"/>
-		<method name="getAllowFreeFormInput()Z"/>
-		<method name="getAllowedDataTypes()Ljava/util/Set;" since="26"/>
-		<method name="getChoices()[Ljava/lang/CharSequence;"/>
-		<method name="getDataResultsFromIntent(Landroid/content/Intent;Ljava/lang/String;)Ljava/util/Map;" since="26"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getResultKey()Ljava/lang/String;"/>
-		<method name="getResultsFromIntent(Landroid/content/Intent;)Landroid/os/Bundle;"/>
-		<method name="getResultsSource(Landroid/content/Intent;)I" since="28"/>
-		<method name="isDataOnly()Z" since="26"/>
-		<method name="setResultsSource(Landroid/content/Intent;I)V" since="28"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_RESULTS_DATA"/>
-		<field name="RESULTS_CLIP_LABEL"/>
-		<field name="SOURCE_CHOICE" since="28"/>
-		<field name="SOURCE_FREE_FORM_INPUT" since="28"/>
-	</class>
-	<class name="android/app/RemoteInput$Builder" since="20">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/RemoteInput$Builder;"/>
-		<method name="build()Landroid/app/RemoteInput;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="setAllowDataType(Ljava/lang/String;Z)Landroid/app/RemoteInput$Builder;" since="26"/>
-		<method name="setAllowFreeFormInput(Z)Landroid/app/RemoteInput$Builder;"/>
-		<method name="setChoices([Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;"/>
-		<method name="setLabel(Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;"/>
-	</class>
-	<class name="android/app/SearchManager" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/DialogInterface$OnCancelListener"/>
-		<implements name="android/content/DialogInterface$OnDismissListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="getGlobalSearchActivity()Landroid/content/ComponentName;" since="16"/>
-		<method name="getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;" since="8"/>
-		<method name="getSearchablesInGlobalSearch()Ljava/util/List;" since="8"/>
-		<method name="setOnCancelListener(Landroid/app/SearchManager$OnCancelListener;)V"/>
-		<method name="setOnDismissListener(Landroid/app/SearchManager$OnDismissListener;)V"/>
-		<method name="startSearch(Ljava/lang/String;ZLandroid/content/ComponentName;Landroid/os/Bundle;Z)V"/>
-		<method name="stopSearch()V"/>
-		<method name="triggerSearch(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;)V" since="5"/>
-		<field name="ACTION_KEY"/>
-		<field name="ACTION_MSG"/>
-		<field name="APP_DATA"/>
-		<field name="CURSOR_EXTRA_KEY_IN_PROGRESS" since="8"/>
-		<field name="EXTRA_DATA_KEY" since="4"/>
-		<field name="EXTRA_NEW_SEARCH" since="12"/>
-		<field name="EXTRA_SELECT_QUERY" since="8"/>
-		<field name="EXTRA_WEB_SEARCH_PENDINGINTENT" since="14"/>
-		<field name="FLAG_QUERY_REFINEMENT" since="11"/>
-		<field name="INTENT_ACTION_GLOBAL_SEARCH" since="8"/>
-		<field name="INTENT_ACTION_SEARCHABLES_CHANGED" since="4"/>
-		<field name="INTENT_ACTION_SEARCH_SETTINGS" since="8"/>
-		<field name="INTENT_ACTION_SEARCH_SETTINGS_CHANGED" since="4"/>
-		<field name="INTENT_ACTION_WEB_SEARCH_SETTINGS" since="4"/>
-		<field name="INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED" since="16"/>
-		<field name="MENU_KEY"/>
-		<field name="MENU_KEYCODE"/>
-		<field name="QUERY"/>
-		<field name="SHORTCUT_MIME_TYPE" since="4"/>
-		<field name="SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG" since="21"/>
-		<field name="SUGGEST_COLUMN_CONTENT_TYPE" since="21"/>
-		<field name="SUGGEST_COLUMN_DURATION" since="21"/>
-		<field name="SUGGEST_COLUMN_FLAGS" since="11"/>
-		<field name="SUGGEST_COLUMN_FORMAT"/>
-		<field name="SUGGEST_COLUMN_ICON_1"/>
-		<field name="SUGGEST_COLUMN_ICON_2"/>
-		<field name="SUGGEST_COLUMN_INTENT_ACTION"/>
-		<field name="SUGGEST_COLUMN_INTENT_DATA"/>
-		<field name="SUGGEST_COLUMN_INTENT_DATA_ID"/>
-		<field name="SUGGEST_COLUMN_INTENT_EXTRA_DATA" since="4"/>
-		<field name="SUGGEST_COLUMN_IS_LIVE" since="21"/>
-		<field name="SUGGEST_COLUMN_LAST_ACCESS_HINT" since="14"/>
-		<field name="SUGGEST_COLUMN_PRODUCTION_YEAR" since="21"/>
-		<field name="SUGGEST_COLUMN_PURCHASE_PRICE" since="21"/>
-		<field name="SUGGEST_COLUMN_QUERY"/>
-		<field name="SUGGEST_COLUMN_RATING_SCORE" since="21"/>
-		<field name="SUGGEST_COLUMN_RATING_STYLE" since="21"/>
-		<field name="SUGGEST_COLUMN_RENTAL_PRICE" since="21"/>
-		<field name="SUGGEST_COLUMN_RESULT_CARD_IMAGE" since="21"/>
-		<field name="SUGGEST_COLUMN_SHORTCUT_ID" since="4"/>
-		<field name="SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING" since="4"/>
-		<field name="SUGGEST_COLUMN_TEXT_1"/>
-		<field name="SUGGEST_COLUMN_TEXT_2"/>
-		<field name="SUGGEST_COLUMN_TEXT_2_URL" since="8"/>
-		<field name="SUGGEST_COLUMN_VIDEO_HEIGHT" since="21"/>
-		<field name="SUGGEST_COLUMN_VIDEO_WIDTH" since="21"/>
-		<field name="SUGGEST_MIME_TYPE"/>
-		<field name="SUGGEST_NEVER_MAKE_SHORTCUT" since="4"/>
-		<field name="SUGGEST_PARAMETER_LIMIT" since="5"/>
-		<field name="SUGGEST_URI_PATH_QUERY"/>
-		<field name="SUGGEST_URI_PATH_SHORTCUT" since="4"/>
-		<field name="USER_QUERY" since="4"/>
-	</class>
-	<class name="android/app/SearchManager$OnCancelListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onCancel()V"/>
-	</class>
-	<class name="android/app/SearchManager$OnDismissListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onDismiss()V"/>
-	</class>
-	<class name="android/app/SearchableInfo" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="autoUrlDetect()Z"/>
-		<method name="getHintId()I"/>
-		<method name="getImeOptions()I"/>
-		<method name="getInputType()I"/>
-		<method name="getSearchActivity()Landroid/content/ComponentName;"/>
-		<method name="getSettingsDescriptionId()I"/>
-		<method name="getSuggestAuthority()Ljava/lang/String;"/>
-		<method name="getSuggestIntentAction()Ljava/lang/String;"/>
-		<method name="getSuggestIntentData()Ljava/lang/String;"/>
-		<method name="getSuggestPackage()Ljava/lang/String;"/>
-		<method name="getSuggestPath()Ljava/lang/String;"/>
-		<method name="getSuggestSelection()Ljava/lang/String;"/>
-		<method name="getSuggestThreshold()I"/>
-		<method name="getVoiceLanguageId()I"/>
-		<method name="getVoiceLanguageModeId()I"/>
-		<method name="getVoiceMaxResults()I"/>
-		<method name="getVoicePromptTextId()I"/>
-		<method name="getVoiceSearchEnabled()Z"/>
-		<method name="getVoiceSearchLaunchRecognizer()Z"/>
-		<method name="getVoiceSearchLaunchWebSearch()Z"/>
-		<method name="queryAfterZeroResults()Z"/>
-		<method name="shouldIncludeInGlobalSearch()Z"/>
-		<method name="shouldRewriteQueryFromData()Z"/>
-		<method name="shouldRewriteQueryFromText()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/Service" since="1">
-		<extends name="android/content/ContextWrapper"/>
-		<implements name="android/content/ComponentCallbacks" removed="14"/>
-		<implements name="android/content/ComponentCallbacks2" since="14"/>
-		<method name="&lt;init>()V"/>
-		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="getApplication()Landroid/app/Application;"/>
-		<method name="onBind(Landroid/content/Intent;)Landroid/os/IBinder;"/>
-		<method name="onCreate()V"/>
-		<method name="onDestroy()V"/>
-		<method name="onRebind(Landroid/content/Intent;)V"/>
-		<method name="onStart(Landroid/content/Intent;I)V" deprecated="16"/>
-		<method name="onStartCommand(Landroid/content/Intent;II)I" since="5"/>
-		<method name="onTaskRemoved(Landroid/content/Intent;)V" since="14"/>
-		<method name="onUnbind(Landroid/content/Intent;)Z"/>
-		<method name="setForeground(Z)V" removed="11"/>
-		<method name="startForeground(ILandroid/app/Notification;)V" since="5"/>
-		<method name="stopForeground(I)V" since="24"/>
-		<method name="stopForeground(Z)V" since="5"/>
-		<method name="stopSelf()V"/>
-		<method name="stopSelf(I)V"/>
-		<method name="stopSelfResult(I)Z"/>
-		<field name="START_CONTINUATION_MASK" since="5"/>
-		<field name="START_FLAG_REDELIVERY" since="5"/>
-		<field name="START_FLAG_RETRY" since="5"/>
-		<field name="START_NOT_STICKY" since="5"/>
-		<field name="START_REDELIVER_INTENT" since="5"/>
-		<field name="START_STICKY" since="5"/>
-		<field name="START_STICKY_COMPATIBILITY" since="5"/>
-		<field name="STOP_FOREGROUND_DETACH" since="24"/>
-		<field name="STOP_FOREGROUND_REMOVE" since="24"/>
-	</class>
-	<class name="android/app/SharedElementCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCaptureSharedElementSnapshot(Landroid/view/View;Landroid/graphics/Matrix;Landroid/graphics/RectF;)Landroid/os/Parcelable;"/>
-		<method name="onCreateSnapshotView(Landroid/content/Context;Landroid/os/Parcelable;)Landroid/view/View;"/>
-		<method name="onMapSharedElements(Ljava/util/List;Ljava/util/Map;)V"/>
-		<method name="onRejectSharedElements(Ljava/util/List;)V"/>
-		<method name="onSharedElementEnd(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V"/>
-		<method name="onSharedElementStart(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V"/>
-		<method name="onSharedElementsArrived(Ljava/util/List;Ljava/util/List;Landroid/app/SharedElementCallback$OnSharedElementsReadyListener;)V" since="23"/>
-	</class>
-	<class name="android/app/SharedElementCallback$OnSharedElementsReadyListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onSharedElementsReady()V"/>
-	</class>
-	<class name="android/app/TabActivity" since="1" deprecated="13">
-		<extends name="android/app/ActivityGroup"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTabHost()Landroid/widget/TabHost;"/>
-		<method name="getTabWidget()Landroid/widget/TabWidget;"/>
-		<method name="setDefaultTab(I)V"/>
-		<method name="setDefaultTab(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/app/TaskStackBuilder" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addNextIntent(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;"/>
-		<method name="addNextIntentWithParentStack(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;"/>
-		<method name="addParentStack(Landroid/app/Activity;)Landroid/app/TaskStackBuilder;"/>
-		<method name="addParentStack(Landroid/content/ComponentName;)Landroid/app/TaskStackBuilder;"/>
-		<method name="addParentStack(Ljava/lang/Class;)Landroid/app/TaskStackBuilder;"/>
-		<method name="create(Landroid/content/Context;)Landroid/app/TaskStackBuilder;"/>
-		<method name="editIntentAt(I)Landroid/content/Intent;"/>
-		<method name="getIntentCount()I"/>
-		<method name="getIntents()[Landroid/content/Intent;"/>
-		<method name="getPendingIntent(II)Landroid/app/PendingIntent;"/>
-		<method name="getPendingIntent(IILandroid/os/Bundle;)Landroid/app/PendingIntent;"/>
-		<method name="startActivities()V"/>
-		<method name="startActivities(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/TimePickerDialog" since="1">
-		<extends name="android/app/AlertDialog"/>
-		<implements name="android/content/DialogInterface$OnClickListener"/>
-		<implements name="android/widget/TimePicker$OnTimeChangedListener"/>
-		<method name="&lt;init>(Landroid/content/Context;ILandroid/app/TimePickerDialog$OnTimeSetListener;IIZ)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/app/TimePickerDialog$OnTimeSetListener;IIZ)V"/>
-		<method name="updateTime(II)V"/>
-	</class>
-	<class name="android/app/TimePickerDialog$OnTimeSetListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onTimeSet(Landroid/widget/TimePicker;II)V"/>
-	</class>
-	<class name="android/app/UiAutomation" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clearWindowAnimationFrameStats()V" since="21"/>
-		<method name="clearWindowContentFrameStats(I)Z" since="21"/>
-		<method name="executeAndWaitForEvent(Ljava/lang/Runnable;Landroid/app/UiAutomation$AccessibilityEventFilter;J)Landroid/view/accessibility/AccessibilityEvent;"/>
-		<method name="executeShellCommand(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="21"/>
-		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="21"/>
-		<method name="getRootInActiveWindow()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;"/>
-		<method name="getWindowAnimationFrameStats()Landroid/view/WindowAnimationFrameStats;" since="21"/>
-		<method name="getWindowContentFrameStats(I)Landroid/view/WindowContentFrameStats;" since="21"/>
-		<method name="getWindows()Ljava/util/List;" since="21"/>
-		<method name="grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;)V" since="28"/>
-		<method name="grantRuntimePermissionAsUser(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V" since="28"/>
-		<method name="injectInputEvent(Landroid/view/InputEvent;Z)Z"/>
-		<method name="performGlobalAction(I)Z"/>
-		<method name="revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;)V" since="28"/>
-		<method name="revokeRuntimePermissionAsUser(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V" since="28"/>
-		<method name="setOnAccessibilityEventListener(Landroid/app/UiAutomation$OnAccessibilityEventListener;)V"/>
-		<method name="setRotation(I)Z"/>
-		<method name="setRunAsMonkey(Z)V"/>
-		<method name="setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V"/>
-		<method name="takeScreenshot()Landroid/graphics/Bitmap;"/>
-		<method name="waitForIdle(JJ)V"/>
-		<field name="FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES" since="24"/>
-		<field name="ROTATION_FREEZE_0"/>
-		<field name="ROTATION_FREEZE_180"/>
-		<field name="ROTATION_FREEZE_270"/>
-		<field name="ROTATION_FREEZE_90"/>
-		<field name="ROTATION_FREEZE_CURRENT"/>
-		<field name="ROTATION_UNFREEZE"/>
-	</class>
-	<class name="android/app/UiAutomation$AccessibilityEventFilter" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Landroid/view/accessibility/AccessibilityEvent;)Z"/>
-	</class>
-	<class name="android/app/UiAutomation$OnAccessibilityEventListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V"/>
-	</class>
-	<class name="android/app/UiModeManager" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="disableCarMode(I)V"/>
-		<method name="enableCarMode(I)V"/>
-		<method name="getCurrentModeType()I"/>
-		<method name="getNightMode()I"/>
-		<method name="setNightMode(I)V"/>
-		<field name="ACTION_ENTER_CAR_MODE"/>
-		<field name="ACTION_ENTER_DESK_MODE"/>
-		<field name="ACTION_EXIT_CAR_MODE"/>
-		<field name="ACTION_EXIT_DESK_MODE"/>
-		<field name="DISABLE_CAR_MODE_GO_HOME"/>
-		<field name="ENABLE_CAR_MODE_ALLOW_SLEEP" since="21"/>
-		<field name="ENABLE_CAR_MODE_GO_CAR_HOME"/>
-		<field name="MODE_NIGHT_AUTO"/>
-		<field name="MODE_NIGHT_NO"/>
-		<field name="MODE_NIGHT_YES"/>
-	</class>
-	<class name="android/app/VoiceInteractor" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getActiveRequest(Ljava/lang/String;)Landroid/app/VoiceInteractor$Request;"/>
-		<method name="getActiveRequests()[Landroid/app/VoiceInteractor$Request;"/>
-		<method name="submitRequest(Landroid/app/VoiceInteractor$Request;)Z"/>
-		<method name="submitRequest(Landroid/app/VoiceInteractor$Request;Ljava/lang/String;)Z"/>
-		<method name="supportsCommands([Ljava/lang/String;)[Z"/>
-	</class>
-	<class name="android/app/VoiceInteractor$AbortVoiceRequest" since="23">
-		<extends name="android/app/VoiceInteractor$Request"/>
-		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V"/>
-		<method name="onAbortResult(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/VoiceInteractor$CommandRequest" since="23">
-		<extends name="android/app/VoiceInteractor$Request"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="onCommandResult(ZLandroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/VoiceInteractor$CompleteVoiceRequest" since="23">
-		<extends name="android/app/VoiceInteractor$Request"/>
-		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V"/>
-		<method name="onCompleteResult(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/VoiceInteractor$ConfirmationRequest" since="23">
-		<extends name="android/app/VoiceInteractor$Request"/>
-		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V"/>
-		<method name="onConfirmationResult(ZLandroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/VoiceInteractor$PickOptionRequest" since="23">
-		<extends name="android/app/VoiceInteractor$Request"/>
-		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;[Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
-		<method name="onPickOptionResult(Z[Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/app/VoiceInteractor$PickOptionRequest$Option" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;I)V"/>
-		<method name="addSynonym(Ljava/lang/CharSequence;)Landroid/app/VoiceInteractor$PickOptionRequest$Option;"/>
-		<method name="countSynonyms()I"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getIndex()I"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getSynonymAt(I)Ljava/lang/CharSequence;"/>
-		<method name="setExtras(Landroid/os/Bundle;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/VoiceInteractor$Prompt" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="&lt;init>([Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
-		<method name="countVoicePrompts()I"/>
-		<method name="getVisualPrompt()Ljava/lang/CharSequence;"/>
-		<method name="getVoicePromptAt(I)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/VoiceInteractor$Request" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="getActivity()Landroid/app/Activity;"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="onAttached(Landroid/app/Activity;)V"/>
-		<method name="onCancel()V"/>
-		<method name="onDetached()V"/>
-	</class>
-	<class name="android/app/WallpaperColors" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="fromBitmap(Landroid/graphics/Bitmap;)Landroid/app/WallpaperColors;"/>
-		<method name="fromDrawable(Landroid/graphics/drawable/Drawable;)Landroid/app/WallpaperColors;"/>
-		<method name="getPrimaryColor()Landroid/graphics/Color;"/>
-		<method name="getSecondaryColor()Landroid/graphics/Color;"/>
-		<method name="getTertiaryColor()Landroid/graphics/Color;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/WallpaperInfo" since="7">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getComponent()Landroid/content/ComponentName;"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
-		<method name="getServiceName()Ljava/lang/String;"/>
-		<method name="getSettingsActivity()Ljava/lang/String;"/>
-		<method name="getShowMetadataInPreview()Z" since="25"/>
-		<method name="loadAuthor(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<method name="loadContextDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="25"/>
-		<method name="loadContextUri(Landroid/content/pm/PackageManager;)Landroid/net/Uri;" since="25"/>
-		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<method name="loadThumbnail(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/WallpaperManager" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;)V" since="27"/>
-		<method name="clear()V"/>
-		<method name="clear(I)V" since="24"/>
-		<method name="clearWallpaper()V" since="28"/>
-		<method name="clearWallpaperOffsets(Landroid/os/IBinder;)V"/>
-		<method name="forgetLoadedWallpaper()V" since="14"/>
-		<method name="getBuiltInDrawable()Landroid/graphics/drawable/Drawable;" since="19"/>
-		<method name="getBuiltInDrawable(I)Landroid/graphics/drawable/Drawable;" since="24"/>
-		<method name="getBuiltInDrawable(IIZFF)Landroid/graphics/drawable/Drawable;" since="19"/>
-		<method name="getBuiltInDrawable(IIZFFI)Landroid/graphics/drawable/Drawable;" since="24"/>
-		<method name="getCropAndSetWallpaperIntent(Landroid/net/Uri;)Landroid/content/Intent;" since="19"/>
-		<method name="getDesiredMinimumHeight()I"/>
-		<method name="getDesiredMinimumWidth()I"/>
-		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getFastDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getInstance(Landroid/content/Context;)Landroid/app/WallpaperManager;"/>
-		<method name="getWallpaperColors(I)Landroid/app/WallpaperColors;" since="27"/>
-		<method name="getWallpaperFile(I)Landroid/os/ParcelFileDescriptor;" since="24"/>
-		<method name="getWallpaperId(I)I" since="24"/>
-		<method name="getWallpaperInfo()Landroid/app/WallpaperInfo;" since="7"/>
-		<method name="hasResourceWallpaper(I)Z" since="17"/>
-		<method name="isSetWallpaperAllowed()Z" since="24"/>
-		<method name="isWallpaperSupported()Z" since="23"/>
-		<method name="peekDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="peekFastDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="removeOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;)V" since="27"/>
-		<method name="sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)V" since="7"/>
-		<method name="setBitmap(Landroid/graphics/Bitmap;)V"/>
-		<method name="setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Z)I" since="24"/>
-		<method name="setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;ZI)I" since="24"/>
-		<method name="setDisplayPadding(Landroid/graphics/Rect;)V" since="28"/>
-		<method name="setResource(I)V"/>
-		<method name="setResource(II)I" since="24"/>
-		<method name="setStream(Ljava/io/InputStream;)V"/>
-		<method name="setStream(Ljava/io/InputStream;Landroid/graphics/Rect;Z)I" since="24"/>
-		<method name="setStream(Ljava/io/InputStream;Landroid/graphics/Rect;ZI)I" since="24"/>
-		<method name="setWallpaperOffsetSteps(FF)V" since="7"/>
-		<method name="setWallpaperOffsets(Landroid/os/IBinder;FF)V"/>
-		<method name="suggestDesiredDimensions(II)V"/>
-		<field name="ACTION_CHANGE_LIVE_WALLPAPER" since="16"/>
-		<field name="ACTION_CROP_AND_SET_WALLPAPER" since="19"/>
-		<field name="ACTION_LIVE_WALLPAPER_CHOOSER" since="7"/>
-		<field name="COMMAND_DROP" since="7"/>
-		<field name="COMMAND_SECONDARY_TAP" since="11"/>
-		<field name="COMMAND_TAP" since="7"/>
-		<field name="EXTRA_LIVE_WALLPAPER_COMPONENT" since="16"/>
-		<field name="FLAG_LOCK" since="24"/>
-		<field name="FLAG_SYSTEM" since="24"/>
-		<field name="WALLPAPER_PREVIEW_META_DATA" since="11"/>
-	</class>
-	<class name="android/app/WallpaperManager$OnColorsChangedListener" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="onColorsChanged(Landroid/app/WallpaperColors;I)V"/>
-	</class>
-	<class name="android/app/admin/ConnectEvent" since="26">
-		<extends name="android/app/admin/NetworkEvent"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getInetAddress()Ljava/net/InetAddress;"/>
-		<method name="getPort()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/admin/DeviceAdminInfo" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getActivityInfo()Landroid/content/pm/ActivityInfo;"/>
-		<method name="getComponent()Landroid/content/ComponentName;"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getReceiverName()Ljava/lang/String;"/>
-		<method name="getTagForPolicy(I)Ljava/lang/String;"/>
-		<method name="isVisible()Z"/>
-		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<method name="supportsTransferOwnership()Z" since="28"/>
-		<method name="usesPolicy(I)Z"/>
-		<field name="CREATOR"/>
-		<field name="USES_ENCRYPTED_STORAGE" since="11"/>
-		<field name="USES_POLICY_DISABLE_CAMERA" since="14"/>
-		<field name="USES_POLICY_DISABLE_KEYGUARD_FEATURES" since="17"/>
-		<field name="USES_POLICY_EXPIRE_PASSWORD" since="11"/>
-		<field name="USES_POLICY_FORCE_LOCK"/>
-		<field name="USES_POLICY_LIMIT_PASSWORD"/>
-		<field name="USES_POLICY_RESET_PASSWORD"/>
-		<field name="USES_POLICY_WATCH_LOGIN"/>
-		<field name="USES_POLICY_WIPE_DATA"/>
-	</class>
-	<class name="android/app/admin/DeviceAdminReceiver" since="8">
-		<extends name="android/content/BroadcastReceiver"/>
-		<method name="&lt;init>()V"/>
-		<method name="getManager(Landroid/content/Context;)Landroid/app/admin/DevicePolicyManager;"/>
-		<method name="getWho(Landroid/content/Context;)Landroid/content/ComponentName;"/>
-		<method name="onBugreportFailed(Landroid/content/Context;Landroid/content/Intent;I)V" since="24"/>
-		<method name="onBugreportShared(Landroid/content/Context;Landroid/content/Intent;Ljava/lang/String;)V" since="24"/>
-		<method name="onBugreportSharingDeclined(Landroid/content/Context;Landroid/content/Intent;)V" since="24"/>
-		<method name="onChoosePrivateKeyAlias(Landroid/content/Context;Landroid/content/Intent;ILandroid/net/Uri;Ljava/lang/String;)Ljava/lang/String;" since="23"/>
-		<method name="onDisableRequested(Landroid/content/Context;Landroid/content/Intent;)Ljava/lang/CharSequence;"/>
-		<method name="onDisabled(Landroid/content/Context;Landroid/content/Intent;)V"/>
-		<method name="onEnabled(Landroid/content/Context;Landroid/content/Intent;)V"/>
-		<method name="onLockTaskModeEntering(Landroid/content/Context;Landroid/content/Intent;Ljava/lang/String;)V" since="21"/>
-		<method name="onLockTaskModeExiting(Landroid/content/Context;Landroid/content/Intent;)V" since="21"/>
-		<method name="onNetworkLogsAvailable(Landroid/content/Context;Landroid/content/Intent;JI)V" since="26"/>
-		<method name="onPasswordChanged(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26"/>
-		<method name="onPasswordChanged(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
-		<method name="onPasswordExpiring(Landroid/content/Context;Landroid/content/Intent;)V" since="11" deprecated="26"/>
-		<method name="onPasswordExpiring(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
-		<method name="onPasswordFailed(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26"/>
-		<method name="onPasswordFailed(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
-		<method name="onPasswordSucceeded(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26"/>
-		<method name="onPasswordSucceeded(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
-		<method name="onProfileProvisioningComplete(Landroid/content/Context;Landroid/content/Intent;)V" since="21"/>
-		<method name="onReadyForUserInitialization(Landroid/content/Context;Landroid/content/Intent;)V" since="23" deprecated="24"/>
-		<method name="onSecurityLogsAvailable(Landroid/content/Context;Landroid/content/Intent;)V" since="24"/>
-		<method name="onSystemUpdatePending(Landroid/content/Context;Landroid/content/Intent;J)V" since="23"/>
-		<method name="onTransferAffiliatedProfileOwnershipComplete(Landroid/content/Context;Landroid/os/UserHandle;)V" since="28"/>
-		<method name="onTransferOwnershipComplete(Landroid/content/Context;Landroid/os/PersistableBundle;)V" since="28"/>
-		<method name="onUserAdded(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
-		<method name="onUserRemoved(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
-		<method name="onUserStarted(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
-		<method name="onUserStopped(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
-		<method name="onUserSwitched(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
-		<field name="ACTION_DEVICE_ADMIN_DISABLED"/>
-		<field name="ACTION_DEVICE_ADMIN_DISABLE_REQUESTED"/>
-		<field name="ACTION_DEVICE_ADMIN_ENABLED"/>
-		<field name="ACTION_LOCK_TASK_ENTERING" since="21"/>
-		<field name="ACTION_LOCK_TASK_EXITING" since="21"/>
-		<field name="ACTION_PASSWORD_CHANGED"/>
-		<field name="ACTION_PASSWORD_EXPIRING" since="11"/>
-		<field name="ACTION_PASSWORD_FAILED"/>
-		<field name="ACTION_PASSWORD_SUCCEEDED"/>
-		<field name="ACTION_PROFILE_PROVISIONING_COMPLETE" since="21"/>
-		<field name="BUGREPORT_FAILURE_FAILED_COMPLETING" since="24"/>
-		<field name="BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE" since="24"/>
-		<field name="DEVICE_ADMIN_META_DATA"/>
-		<field name="EXTRA_DISABLE_WARNING"/>
-		<field name="EXTRA_LOCK_TASK_PACKAGE" since="21"/>
-		<field name="EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE" since="28"/>
-	</class>
-	<class name="android/app/admin/DeviceAdminService" since="26">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/app/admin/DevicePolicyManager" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V" since="21"/>
-		<method name="addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
-		<method name="addOverrideApn(Landroid/content/ComponentName;Landroid/telephony/data/ApnSetting;)I" since="28"/>
-		<method name="addPersistentPreferredActivity(Landroid/content/ComponentName;Landroid/content/IntentFilter;Landroid/content/ComponentName;)V" since="21"/>
-		<method name="addUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
-		<method name="bindDeviceAdminServiceAsUser(Landroid/content/ComponentName;Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z" since="26"/>
-		<method name="clearApplicationUserData(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/app/admin/DevicePolicyManager$OnClearApplicationUserDataListener;)V" since="28"/>
-		<method name="clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V" since="21"/>
-		<method name="clearDeviceOwnerApp(Ljava/lang/String;)V" since="21" deprecated="26"/>
-		<method name="clearPackagePersistentPreferredActivities(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
-		<method name="clearProfileOwner(Landroid/content/ComponentName;)V" since="24" deprecated="26"/>
-		<method name="clearResetPasswordToken(Landroid/content/ComponentName;)Z" since="26"/>
-		<method name="clearUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
-		<method name="createAdminSupportIntent(Ljava/lang/String;)Landroid/content/Intent;" since="26"/>
-		<method name="createAndInitializeUser(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;)Landroid/os/UserHandle;" since="21" deprecated="23" removed="24"/>
-		<method name="createAndManageUser(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/PersistableBundle;I)Landroid/os/UserHandle;" since="24"/>
-		<method name="createUser(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/UserHandle;" since="21" deprecated="23" removed="24"/>
-		<method name="enableSystemApp(Landroid/content/ComponentName;Landroid/content/Intent;)I" since="21"/>
-		<method name="enableSystemApp(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
-		<method name="generateKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Landroid/security/keystore/KeyGenParameterSpec;I)Landroid/security/AttestedKeyPair;" since="28"/>
-		<method name="getAccountTypesWithManagementDisabled()[Ljava/lang/String;" since="21"/>
-		<method name="getActiveAdmins()Ljava/util/List;"/>
-		<method name="getAffiliationIds(Landroid/content/ComponentName;)Ljava/util/Set;" since="26"/>
-		<method name="getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24"/>
-		<method name="getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/Bundle;" since="21"/>
-		<method name="getApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24" deprecated="26"/>
-		<method name="getAutoTimeRequired()Z" since="21"/>
-		<method name="getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;" since="26"/>
-		<method name="getBluetoothContactSharingDisabled(Landroid/content/ComponentName;)Z" since="23"/>
-		<method name="getCameraDisabled(Landroid/content/ComponentName;)Z" since="14"/>
-		<method name="getCertInstallerPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="23" deprecated="26"/>
-		<method name="getCrossProfileCallerIdDisabled(Landroid/content/ComponentName;)Z" since="21"/>
-		<method name="getCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;)Z" since="24"/>
-		<method name="getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
-		<method name="getCurrentFailedPasswordAttempts()I"/>
-		<method name="getDelegatePackages(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="26"/>
-		<method name="getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="26"/>
-		<method name="getDeviceOwnerLockScreenInfo()Ljava/lang/CharSequence;" since="24"/>
-		<method name="getEndUserSessionMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="28"/>
-		<method name="getInstalledCaCerts(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
-		<method name="getKeepUninstalledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
-		<method name="getKeyguardDisabledFeatures(Landroid/content/ComponentName;)I" since="17"/>
-		<method name="getLockTaskFeatures(Landroid/content/ComponentName;)I" since="28"/>
-		<method name="getLockTaskPackages(Landroid/content/ComponentName;)[Ljava/lang/String;" since="26"/>
-		<method name="getLongSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24"/>
-		<method name="getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;)I"/>
-		<method name="getMaximumTimeToLock(Landroid/content/ComponentName;)J"/>
-		<method name="getMeteredDataDisabledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
-		<method name="getOrganizationColor(Landroid/content/ComponentName;)I" since="24"/>
-		<method name="getOrganizationName(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24"/>
-		<method name="getOverrideApns(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
-		<method name="getParentProfileInstance(Landroid/content/ComponentName;)Landroid/app/admin/DevicePolicyManager;" since="24"/>
-		<method name="getPasswordExpiration(Landroid/content/ComponentName;)J" since="11"/>
-		<method name="getPasswordExpirationTimeout(Landroid/content/ComponentName;)J" since="11"/>
-		<method name="getPasswordHistoryLength(Landroid/content/ComponentName;)I" since="11"/>
-		<method name="getPasswordMaximumLength(I)I"/>
-		<method name="getPasswordMinimumLength(Landroid/content/ComponentName;)I"/>
-		<method name="getPasswordMinimumLetters(Landroid/content/ComponentName;)I" since="11"/>
-		<method name="getPasswordMinimumLowerCase(Landroid/content/ComponentName;)I" since="11"/>
-		<method name="getPasswordMinimumNonLetter(Landroid/content/ComponentName;)I" since="11"/>
-		<method name="getPasswordMinimumNumeric(Landroid/content/ComponentName;)I" since="11"/>
-		<method name="getPasswordMinimumSymbols(Landroid/content/ComponentName;)I" since="11"/>
-		<method name="getPasswordMinimumUpperCase(Landroid/content/ComponentName;)I" since="11"/>
-		<method name="getPasswordQuality(Landroid/content/ComponentName;)I"/>
-		<method name="getPendingSystemUpdate(Landroid/content/ComponentName;)Landroid/app/admin/SystemUpdateInfo;" since="26"/>
-		<method name="getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)I" since="23"/>
-		<method name="getPermissionPolicy(Landroid/content/ComponentName;)I" since="23"/>
-		<method name="getPermittedAccessibilityServices(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
-		<method name="getPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;)Ljava/util/List;" since="26"/>
-		<method name="getPermittedInputMethods(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
-		<method name="getRequiredStrongAuthTimeout(Landroid/content/ComponentName;)J" since="26"/>
-		<method name="getScreenCaptureDisabled(Landroid/content/ComponentName;)Z" since="21"/>
-		<method name="getSecondaryUsers(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
-		<method name="getShortSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24"/>
-		<method name="getStartUserSessionMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="28"/>
-		<method name="getStorageEncryption(Landroid/content/ComponentName;)Z" since="11"/>
-		<method name="getStorageEncryptionStatus()I" since="11"/>
-		<method name="getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;" since="23"/>
-		<method name="getTransferOwnershipBundle()Landroid/os/PersistableBundle;" since="28"/>
-		<method name="getTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;)Ljava/util/List;" since="23"/>
-		<method name="getUserRestrictions(Landroid/content/ComponentName;)Landroid/os/Bundle;" since="24"/>
-		<method name="getWifiMacAddress(Landroid/content/ComponentName;)Ljava/lang/String;" since="24"/>
-		<method name="hasCaCertInstalled(Landroid/content/ComponentName;[B)Z" since="21"/>
-		<method name="hasGrantedPolicy(Landroid/content/ComponentName;I)Z" since="11"/>
-		<method name="installCaCert(Landroid/content/ComponentName;[B)Z" since="21"/>
-		<method name="installExistingPackage(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="28"/>
-		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;Ljava/security/cert/Certificate;Ljava/lang/String;)Z" since="21"/>
-		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;I)Z" since="28"/>
-		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;Z)Z" since="24"/>
-		<method name="isActivePasswordSufficient()Z"/>
-		<method name="isAdminActive(Landroid/content/ComponentName;)Z"/>
-		<method name="isAffiliatedUser()Z" since="28"/>
-		<method name="isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
-		<method name="isBackupServiceEnabled(Landroid/content/ComponentName;)Z" since="26"/>
-		<method name="isCallerApplicationRestrictionsManagingPackage()Z" since="24" deprecated="26"/>
-		<method name="isDeviceIdAttestationSupported()Z" since="28"/>
-		<method name="isDeviceOwnerApp(Ljava/lang/String;)Z" since="18"/>
-		<method name="isEphemeralUser(Landroid/content/ComponentName;)Z" since="28"/>
-		<method name="isLockTaskPermitted(Ljava/lang/String;)Z" since="21"/>
-		<method name="isLogoutEnabled()Z" since="28"/>
-		<method name="isManagedProfile(Landroid/content/ComponentName;)Z" since="24"/>
-		<method name="isMasterVolumeMuted(Landroid/content/ComponentName;)Z" since="21"/>
-		<method name="isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z" since="26"/>
-		<method name="isOverrideApnEnabled(Landroid/content/ComponentName;)Z" since="28"/>
-		<method name="isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="24"/>
-		<method name="isProfileOwnerApp(Ljava/lang/String;)Z" since="21"/>
-		<method name="isProvisioningAllowed(Ljava/lang/String;)Z" since="24"/>
-		<method name="isResetPasswordTokenActive(Landroid/content/ComponentName;)Z" since="26"/>
-		<method name="isSecurityLoggingEnabled(Landroid/content/ComponentName;)Z" since="24"/>
-		<method name="isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
-		<method name="isUsingUnifiedPassword(Landroid/content/ComponentName;)Z" since="28"/>
-		<method name="lockNow()V"/>
-		<method name="lockNow(I)V" since="26"/>
-		<method name="logoutUser(Landroid/content/ComponentName;)I" since="28"/>
-		<method name="reboot(Landroid/content/ComponentName;)V" since="24"/>
-		<method name="removeActiveAdmin(Landroid/content/ComponentName;)V"/>
-		<method name="removeCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
-		<method name="removeKeyPair(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="24"/>
-		<method name="removeOverrideApn(Landroid/content/ComponentName;I)Z" since="28"/>
-		<method name="removeUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z" since="21"/>
-		<method name="requestBugreport(Landroid/content/ComponentName;)Z" since="24"/>
-		<method name="resetPassword(Ljava/lang/String;I)Z"/>
-		<method name="resetPasswordWithToken(Landroid/content/ComponentName;Ljava/lang/String;[BI)Z" since="26"/>
-		<method name="retrieveNetworkLogs(Landroid/content/ComponentName;J)Ljava/util/List;" since="26"/>
-		<method name="retrievePreRebootSecurityLogs(Landroid/content/ComponentName;)Ljava/util/List;" since="24"/>
-		<method name="retrieveSecurityLogs(Landroid/content/ComponentName;)Ljava/util/List;" since="24"/>
-		<method name="setAccountManagementDisabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="21"/>
-		<method name="setAffiliationIds(Landroid/content/ComponentName;Ljava/util/Set;)V" since="26"/>
-		<method name="setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="24"/>
-		<method name="setApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Z)Z" since="21"/>
-		<method name="setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)V" since="21"/>
-		<method name="setApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="24" deprecated="26"/>
-		<method name="setAutoTimeRequired(Landroid/content/ComponentName;Z)V" since="21"/>
-		<method name="setBackupServiceEnabled(Landroid/content/ComponentName;Z)V" since="26"/>
-		<method name="setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V" since="23"/>
-		<method name="setCameraDisabled(Landroid/content/ComponentName;Z)V" since="14"/>
-		<method name="setCertInstallerPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="23" deprecated="26"/>
-		<method name="setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V" since="21"/>
-		<method name="setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V" since="24"/>
-		<method name="setDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V" since="26"/>
-		<method name="setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
-		<method name="setEndUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="28"/>
-		<method name="setGlobalSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="21"/>
-		<method name="setKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/util/List;)V" since="28"/>
-		<method name="setKeyPairCertificate(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;Z)Z" since="28"/>
-		<method name="setKeyguardDisabled(Landroid/content/ComponentName;Z)Z" since="23"/>
-		<method name="setKeyguardDisabledFeatures(Landroid/content/ComponentName;I)V" since="17"/>
-		<method name="setLockTaskFeatures(Landroid/content/ComponentName;I)V" since="28"/>
-		<method name="setLockTaskPackages(Landroid/content/ComponentName;[Ljava/lang/String;)V" since="21"/>
-		<method name="setLogoutEnabled(Landroid/content/ComponentName;Z)V" since="28"/>
-		<method name="setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
-		<method name="setMasterVolumeMuted(Landroid/content/ComponentName;Z)V" since="21"/>
-		<method name="setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;I)V"/>
-		<method name="setMaximumTimeToLock(Landroid/content/ComponentName;J)V"/>
-		<method name="setMeteredDataDisabledPackages(Landroid/content/ComponentName;Ljava/util/List;)Ljava/util/List;" since="28"/>
-		<method name="setNetworkLoggingEnabled(Landroid/content/ComponentName;Z)V" since="26"/>
-		<method name="setOrganizationColor(Landroid/content/ComponentName;I)V" since="24"/>
-		<method name="setOrganizationName(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
-		<method name="setOverrideApnsEnabled(Landroid/content/ComponentName;Z)V" since="28"/>
-		<method name="setPackagesSuspended(Landroid/content/ComponentName;[Ljava/lang/String;Z)[Ljava/lang/String;" since="24"/>
-		<method name="setPasswordExpirationTimeout(Landroid/content/ComponentName;J)V" since="11"/>
-		<method name="setPasswordHistoryLength(Landroid/content/ComponentName;I)V" since="11"/>
-		<method name="setPasswordMinimumLength(Landroid/content/ComponentName;I)V"/>
-		<method name="setPasswordMinimumLetters(Landroid/content/ComponentName;I)V" since="11"/>
-		<method name="setPasswordMinimumLowerCase(Landroid/content/ComponentName;I)V" since="11"/>
-		<method name="setPasswordMinimumNonLetter(Landroid/content/ComponentName;I)V" since="11"/>
-		<method name="setPasswordMinimumNumeric(Landroid/content/ComponentName;I)V" since="11"/>
-		<method name="setPasswordMinimumSymbols(Landroid/content/ComponentName;I)V" since="11"/>
-		<method name="setPasswordMinimumUpperCase(Landroid/content/ComponentName;I)V" since="11"/>
-		<method name="setPasswordQuality(Landroid/content/ComponentName;I)V"/>
-		<method name="setPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)Z" since="23"/>
-		<method name="setPermissionPolicy(Landroid/content/ComponentName;I)V" since="23"/>
-		<method name="setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z" since="21"/>
-		<method name="setPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;Ljava/util/List;)Z" since="26"/>
-		<method name="setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z" since="21"/>
-		<method name="setProfileEnabled(Landroid/content/ComponentName;)V" since="21"/>
-		<method name="setProfileName(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
-		<method name="setRecommendedGlobalProxy(Landroid/content/ComponentName;Landroid/net/ProxyInfo;)V" since="21"/>
-		<method name="setRequiredStrongAuthTimeout(Landroid/content/ComponentName;J)V" since="26"/>
-		<method name="setResetPasswordToken(Landroid/content/ComponentName;[B)Z" since="26"/>
-		<method name="setRestrictionsProvider(Landroid/content/ComponentName;Landroid/content/ComponentName;)V" since="21"/>
-		<method name="setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V" since="21"/>
-		<method name="setSecureSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="21"/>
-		<method name="setSecurityLoggingEnabled(Landroid/content/ComponentName;Z)V" since="24"/>
-		<method name="setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
-		<method name="setStartUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="28"/>
-		<method name="setStatusBarDisabled(Landroid/content/ComponentName;Z)Z" since="23"/>
-		<method name="setStorageEncryption(Landroid/content/ComponentName;Z)I" since="11"/>
-		<method name="setSystemSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="28"/>
-		<method name="setSystemUpdatePolicy(Landroid/content/ComponentName;Landroid/app/admin/SystemUpdatePolicy;)V" since="23"/>
-		<method name="setTime(Landroid/content/ComponentName;J)Z" since="28"/>
-		<method name="setTimeZone(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="28"/>
-		<method name="setTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/os/PersistableBundle;)V" since="23"/>
-		<method name="setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="21"/>
-		<method name="setUserIcon(Landroid/content/ComponentName;Landroid/graphics/Bitmap;)V" since="23"/>
-		<method name="startUserInBackground(Landroid/content/ComponentName;Landroid/os/UserHandle;)I" since="28"/>
-		<method name="stopUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)I" since="28"/>
-		<method name="switchUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z" since="21"/>
-		<method name="transferOwnership(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/os/PersistableBundle;)V" since="28"/>
-		<method name="uninstallAllUserCaCerts(Landroid/content/ComponentName;)V" since="21"/>
-		<method name="uninstallCaCert(Landroid/content/ComponentName;[B)V" since="21"/>
-		<method name="updateOverrideApn(Landroid/content/ComponentName;ILandroid/telephony/data/ApnSetting;)Z" since="28"/>
-		<method name="wipeData(I)V"/>
-		<method name="wipeData(ILjava/lang/CharSequence;)V" since="28"/>
-		<field name="ACTION_ADD_DEVICE_ADMIN"/>
-		<field name="ACTION_APPLICATION_DELEGATION_SCOPES_CHANGED" since="26"/>
-		<field name="ACTION_DEVICE_ADMIN_SERVICE" since="26"/>
-		<field name="ACTION_DEVICE_OWNER_CHANGED" since="23"/>
-		<field name="ACTION_MANAGED_PROFILE_PROVISIONED" since="23"/>
-		<field name="ACTION_PROFILE_OWNER_CHANGED" since="28"/>
-		<field name="ACTION_PROVISIONING_SUCCESSFUL" since="26"/>
-		<field name="ACTION_PROVISION_MANAGED_DEVICE" since="23"/>
-		<field name="ACTION_PROVISION_MANAGED_PROFILE" since="21"/>
-		<field name="ACTION_SET_NEW_PARENT_PROFILE_PASSWORD" since="24"/>
-		<field name="ACTION_SET_NEW_PASSWORD"/>
-		<field name="ACTION_START_ENCRYPTION" since="11"/>
-		<field name="ACTION_SYSTEM_UPDATE_POLICY_CHANGED" since="23"/>
-		<field name="DELEGATION_APP_RESTRICTIONS" since="26"/>
-		<field name="DELEGATION_BLOCK_UNINSTALL" since="26"/>
-		<field name="DELEGATION_CERT_INSTALL" since="26"/>
-		<field name="DELEGATION_ENABLE_SYSTEM_APP" since="26"/>
-		<field name="DELEGATION_INSTALL_EXISTING_PACKAGE" since="28"/>
-		<field name="DELEGATION_KEEP_UNINSTALLED_PACKAGES" since="28"/>
-		<field name="DELEGATION_PACKAGE_ACCESS" since="26"/>
-		<field name="DELEGATION_PERMISSION_GRANT" since="26"/>
-		<field name="ENCRYPTION_STATUS_ACTIVATING" since="11"/>
-		<field name="ENCRYPTION_STATUS_ACTIVE" since="11"/>
-		<field name="ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY" since="23"/>
-		<field name="ENCRYPTION_STATUS_ACTIVE_PER_USER" since="24"/>
-		<field name="ENCRYPTION_STATUS_INACTIVE" since="11"/>
-		<field name="ENCRYPTION_STATUS_UNSUPPORTED" since="11"/>
-		<field name="EXTRA_ADD_EXPLANATION"/>
-		<field name="EXTRA_DELEGATION_SCOPES" since="26"/>
-		<field name="EXTRA_DEVICE_ADMIN"/>
-		<field name="EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE" since="22"/>
-		<field name="EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE" since="21"/>
-		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME" since="23"/>
-		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE" since="23"/>
-		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM" since="21"/>
-		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER" since="21"/>
-		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION" since="21"/>
-		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME" since="21" deprecated="23"/>
-		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM" since="23"/>
-		<field name="EXTRA_PROVISIONING_DISCLAIMERS" since="26"/>
-		<field name="EXTRA_PROVISIONING_DISCLAIMER_CONTENT" since="26"/>
-		<field name="EXTRA_PROVISIONING_DISCLAIMER_HEADER" since="26"/>
-		<field name="EXTRA_PROVISIONING_EMAIL_ADDRESS" since="21" deprecated="26"/>
-		<field name="EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION" since="26"/>
-		<field name="EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED" since="22"/>
-		<field name="EXTRA_PROVISIONING_LOCALE" since="21"/>
-		<field name="EXTRA_PROVISIONING_LOCAL_TIME" since="21"/>
-		<field name="EXTRA_PROVISIONING_LOGO_URI" since="24"/>
-		<field name="EXTRA_PROVISIONING_MAIN_COLOR" since="24"/>
-		<field name="EXTRA_PROVISIONING_SKIP_ENCRYPTION" since="23"/>
-		<field name="EXTRA_PROVISIONING_SKIP_USER_CONSENT" since="26"/>
-		<field name="EXTRA_PROVISIONING_TIME_ZONE" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_HIDDEN" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_PAC_URL" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_PASSWORD" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_PROXY_BYPASS" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_PROXY_HOST" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_PROXY_PORT" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_SECURITY_TYPE" since="21"/>
-		<field name="EXTRA_PROVISIONING_WIFI_SSID" since="21"/>
-		<field name="FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY" since="26"/>
-		<field name="FLAG_MANAGED_CAN_ACCESS_PARENT" since="21"/>
-		<field name="FLAG_PARENT_CAN_ACCESS_MANAGED" since="21"/>
-		<field name="ID_TYPE_BASE_INFO" since="28"/>
-		<field name="ID_TYPE_IMEI" since="28"/>
-		<field name="ID_TYPE_MEID" since="28"/>
-		<field name="ID_TYPE_SERIAL" since="28"/>
-		<field name="INSTALLKEY_REQUEST_CREDENTIALS_ACCESS" since="28"/>
-		<field name="INSTALLKEY_SET_USER_SELECTABLE" since="28"/>
-		<field name="KEYGUARD_DISABLE_BIOMETRICS" since="28"/>
-		<field name="KEYGUARD_DISABLE_FACE" since="28"/>
-		<field name="KEYGUARD_DISABLE_FEATURES_ALL" since="17"/>
-		<field name="KEYGUARD_DISABLE_FEATURES_NONE" since="17"/>
-		<field name="KEYGUARD_DISABLE_FINGERPRINT" since="21"/>
-		<field name="KEYGUARD_DISABLE_IRIS" since="28"/>
-		<field name="KEYGUARD_DISABLE_REMOTE_INPUT" since="24"/>
-		<field name="KEYGUARD_DISABLE_SECURE_CAMERA" since="17"/>
-		<field name="KEYGUARD_DISABLE_SECURE_NOTIFICATIONS" since="21"/>
-		<field name="KEYGUARD_DISABLE_TRUST_AGENTS" since="21"/>
-		<field name="KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS" since="21"/>
-		<field name="KEYGUARD_DISABLE_WIDGETS_ALL" since="17"/>
-		<field name="LEAVE_ALL_SYSTEM_APPS_ENABLED" since="28"/>
-		<field name="LOCK_TASK_FEATURE_GLOBAL_ACTIONS" since="28"/>
-		<field name="LOCK_TASK_FEATURE_HOME" since="28"/>
-		<field name="LOCK_TASK_FEATURE_KEYGUARD" since="28"/>
-		<field name="LOCK_TASK_FEATURE_NONE" since="28"/>
-		<field name="LOCK_TASK_FEATURE_NOTIFICATIONS" since="28"/>
-		<field name="LOCK_TASK_FEATURE_OVERVIEW" since="28"/>
-		<field name="LOCK_TASK_FEATURE_SYSTEM_INFO" since="28"/>
-		<field name="MAKE_USER_EPHEMERAL" since="28"/>
-		<field name="MIME_TYPE_PROVISIONING_NFC" since="21"/>
-		<field name="PASSWORD_QUALITY_ALPHABETIC"/>
-		<field name="PASSWORD_QUALITY_ALPHANUMERIC"/>
-		<field name="PASSWORD_QUALITY_BIOMETRIC_WEAK" since="14"/>
-		<field name="PASSWORD_QUALITY_COMPLEX" since="11"/>
-		<field name="PASSWORD_QUALITY_NUMERIC"/>
-		<field name="PASSWORD_QUALITY_NUMERIC_COMPLEX" since="21"/>
-		<field name="PASSWORD_QUALITY_SOMETHING"/>
-		<field name="PASSWORD_QUALITY_UNSPECIFIED"/>
-		<field name="PERMISSION_GRANT_STATE_DEFAULT" since="23"/>
-		<field name="PERMISSION_GRANT_STATE_DENIED" since="23"/>
-		<field name="PERMISSION_GRANT_STATE_GRANTED" since="23"/>
-		<field name="PERMISSION_POLICY_AUTO_DENY" since="23"/>
-		<field name="PERMISSION_POLICY_AUTO_GRANT" since="23"/>
-		<field name="PERMISSION_POLICY_PROMPT" since="23"/>
-		<field name="POLICY_DISABLE_CAMERA" since="26"/>
-		<field name="POLICY_DISABLE_SCREEN_CAPTURE" since="26"/>
-		<field name="RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT" since="23"/>
-		<field name="RESET_PASSWORD_REQUIRE_ENTRY"/>
-		<field name="SKIP_SETUP_WIZARD" since="24"/>
-		<field name="WIPE_EUICC" since="28"/>
-		<field name="WIPE_EXTERNAL_STORAGE" since="9"/>
-		<field name="WIPE_RESET_PROTECTION_DATA" since="22"/>
-	</class>
-	<class name="android/app/admin/DevicePolicyManager$OnClearApplicationUserDataListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onApplicationUserDataCleared(Ljava/lang/String;Z)V"/>
-	</class>
-	<class name="android/app/admin/DnsEvent" since="26">
-		<extends name="android/app/admin/NetworkEvent"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getHostname()Ljava/lang/String;"/>
-		<method name="getInetAddresses()Ljava/util/List;"/>
-		<method name="getTotalResolvedAddressCount()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/admin/FreezePeriod" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/time/MonthDay;Ljava/time/MonthDay;)V"/>
-		<method name="getEnd()Ljava/time/MonthDay;"/>
-		<method name="getStart()Ljava/time/MonthDay;"/>
-	</class>
-	<class name="android/app/admin/NetworkEvent" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getId()J" since="28"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getTimestamp()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/admin/SecurityLog" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="LEVEL_ERROR" since="28"/>
-		<field name="LEVEL_INFO" since="28"/>
-		<field name="LEVEL_WARNING" since="28"/>
-		<field name="TAG_ADB_SHELL_CMD"/>
-		<field name="TAG_ADB_SHELL_INTERACTIVE"/>
-		<field name="TAG_APP_PROCESS_START"/>
-		<field name="TAG_CERT_AUTHORITY_INSTALLED" since="28"/>
-		<field name="TAG_CERT_AUTHORITY_REMOVED" since="28"/>
-		<field name="TAG_CERT_VALIDATION_FAILURE" since="28"/>
-		<field name="TAG_CRYPTO_SELF_TEST_COMPLETED" since="28"/>
-		<field name="TAG_KEYGUARD_DISABLED_FEATURES_SET" since="28"/>
-		<field name="TAG_KEYGUARD_DISMISSED"/>
-		<field name="TAG_KEYGUARD_DISMISS_AUTH_ATTEMPT"/>
-		<field name="TAG_KEYGUARD_SECURED"/>
-		<field name="TAG_KEY_DESTRUCTION" since="28"/>
-		<field name="TAG_KEY_GENERATED" since="28"/>
-		<field name="TAG_KEY_IMPORT" since="28"/>
-		<field name="TAG_KEY_INTEGRITY_VIOLATION" since="28"/>
-		<field name="TAG_LOGGING_STARTED" since="28"/>
-		<field name="TAG_LOGGING_STOPPED" since="28"/>
-		<field name="TAG_LOG_BUFFER_SIZE_CRITICAL" since="28"/>
-		<field name="TAG_MAX_PASSWORD_ATTEMPTS_SET" since="28"/>
-		<field name="TAG_MAX_SCREEN_LOCK_TIMEOUT_SET" since="28"/>
-		<field name="TAG_MEDIA_MOUNT" since="28"/>
-		<field name="TAG_MEDIA_UNMOUNT" since="28"/>
-		<field name="TAG_OS_SHUTDOWN" since="28"/>
-		<field name="TAG_OS_STARTUP" since="28"/>
-		<field name="TAG_PASSWORD_COMPLEXITY_SET" since="28"/>
-		<field name="TAG_PASSWORD_EXPIRATION_SET" since="28"/>
-		<field name="TAG_PASSWORD_HISTORY_LENGTH_SET" since="28"/>
-		<field name="TAG_REMOTE_LOCK" since="28"/>
-		<field name="TAG_SYNC_RECV_FILE"/>
-		<field name="TAG_SYNC_SEND_FILE"/>
-		<field name="TAG_USER_RESTRICTION_ADDED" since="28"/>
-		<field name="TAG_USER_RESTRICTION_REMOVED" since="28"/>
-		<field name="TAG_WIPE_FAILURE" since="28"/>
-	</class>
-	<class name="android/app/admin/SecurityLog$SecurityEvent" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([B)V" since="29"/>
-		<method name="getData()Ljava/lang/Object;"/>
-		<method name="getId()J" since="28"/>
-		<method name="getLogLevel()I" since="28"/>
-		<method name="getTag()I"/>
-		<method name="getTimeNanos()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/admin/SystemUpdateInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getReceivedTime()J"/>
-		<method name="getSecurityPatchState()I"/>
-		<field name="CREATOR"/>
-		<field name="SECURITY_PATCH_STATE_FALSE"/>
-		<field name="SECURITY_PATCH_STATE_TRUE"/>
-		<field name="SECURITY_PATCH_STATE_UNKNOWN"/>
-	</class>
-	<class name="android/app/admin/SystemUpdatePolicy" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="createAutomaticInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;"/>
-		<method name="createPostponeInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;"/>
-		<method name="createWindowedInstallPolicy(II)Landroid/app/admin/SystemUpdatePolicy;"/>
-		<method name="getFreezePeriods()Ljava/util/List;" since="28"/>
-		<method name="getInstallWindowEnd()I"/>
-		<method name="getInstallWindowStart()I"/>
-		<method name="getPolicyType()I"/>
-		<method name="setFreezePeriods(Ljava/util/List;)Landroid/app/admin/SystemUpdatePolicy;" since="28"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_INSTALL_AUTOMATIC"/>
-		<field name="TYPE_INSTALL_WINDOWED"/>
-		<field name="TYPE_POSTPONE"/>
-	</class>
-	<class name="android/app/admin/SystemUpdatePolicy$ValidationFailedException" since="28">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
-		<method name="getErrorCode()I"/>
-		<field name="CREATOR"/>
-		<field name="ERROR_COMBINED_FREEZE_PERIOD_TOO_CLOSE"/>
-		<field name="ERROR_COMBINED_FREEZE_PERIOD_TOO_LONG"/>
-		<field name="ERROR_DUPLICATE_OR_OVERLAP"/>
-		<field name="ERROR_NEW_FREEZE_PERIOD_TOO_CLOSE"/>
-		<field name="ERROR_NEW_FREEZE_PERIOD_TOO_LONG"/>
-		<field name="ERROR_UNKNOWN"/>
-	</class>
-	<class name="android/app/assist/AssistContent" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getClipData()Landroid/content/ClipData;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-		<method name="getStructuredData()Ljava/lang/String;"/>
-		<method name="getWebUri()Landroid/net/Uri;"/>
-		<method name="isAppProvidedIntent()Z"/>
-		<method name="isAppProvidedWebUri()Z" since="24"/>
-		<method name="setClipData(Landroid/content/ClipData;)V"/>
-		<method name="setIntent(Landroid/content/Intent;)V"/>
-		<method name="setStructuredData(Ljava/lang/String;)V"/>
-		<method name="setWebUri(Landroid/net/Uri;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/assist/AssistStructure" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAcquisitionEndTime()J" since="26"/>
-		<method name="getAcquisitionStartTime()J" since="26"/>
-		<method name="getActivityComponent()Landroid/content/ComponentName;"/>
-		<method name="getWindowNodeAt(I)Landroid/app/assist/AssistStructure$WindowNode;"/>
-		<method name="getWindowNodeCount()I"/>
-		<method name="isHomeActivity()Z" since="26"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/assist/AssistStructure$ViewNode" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAlpha()F"/>
-		<method name="getAutofillHints()[Ljava/lang/String;" since="26"/>
-		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
-		<method name="getAutofillOptions()[Ljava/lang/CharSequence;" since="26"/>
-		<method name="getAutofillType()I" since="26"/>
-		<method name="getAutofillValue()Landroid/view/autofill/AutofillValue;" since="26"/>
-		<method name="getChildAt(I)Landroid/app/assist/AssistStructure$ViewNode;"/>
-		<method name="getChildCount()I"/>
-		<method name="getClassName()Ljava/lang/String;"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
-		<method name="getElevation()F"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getHeight()I"/>
-		<method name="getHint()Ljava/lang/String;"/>
-		<method name="getHtmlInfo()Landroid/view/ViewStructure$HtmlInfo;" since="26"/>
-		<method name="getId()I"/>
-		<method name="getIdEntry()Ljava/lang/String;"/>
-		<method name="getIdPackage()Ljava/lang/String;"/>
-		<method name="getIdType()Ljava/lang/String;"/>
-		<method name="getImportantForAutofill()I" since="28"/>
-		<method name="getInputType()I" since="26"/>
-		<method name="getLeft()I"/>
-		<method name="getLocaleList()Landroid/os/LocaleList;" since="26"/>
-		<method name="getMaxTextEms()I" since="28"/>
-		<method name="getMaxTextLength()I" since="28"/>
-		<method name="getMinTextEms()I" since="28"/>
-		<method name="getScrollX()I"/>
-		<method name="getScrollY()I"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="getTextBackgroundColor()I"/>
-		<method name="getTextColor()I"/>
-		<method name="getTextIdEntry()Ljava/lang/String;" since="28"/>
-		<method name="getTextLineBaselines()[I"/>
-		<method name="getTextLineCharOffsets()[I"/>
-		<method name="getTextSelectionEnd()I"/>
-		<method name="getTextSelectionStart()I"/>
-		<method name="getTextSize()F"/>
-		<method name="getTextStyle()I"/>
-		<method name="getTop()I"/>
-		<method name="getTransformation()Landroid/graphics/Matrix;"/>
-		<method name="getVisibility()I"/>
-		<method name="getWebDomain()Ljava/lang/String;" since="26"/>
-		<method name="getWebScheme()Ljava/lang/String;" since="28"/>
-		<method name="getWidth()I"/>
-		<method name="isAccessibilityFocused()Z"/>
-		<method name="isActivated()Z"/>
-		<method name="isAssistBlocked()Z"/>
-		<method name="isCheckable()Z"/>
-		<method name="isChecked()Z"/>
-		<method name="isClickable()Z"/>
-		<method name="isContextClickable()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isFocusable()Z"/>
-		<method name="isFocused()Z"/>
-		<method name="isLongClickable()Z"/>
-		<method name="isOpaque()Z" since="26"/>
-		<method name="isSelected()Z"/>
-		<field name="TEXT_COLOR_UNDEFINED"/>
-		<field name="TEXT_STYLE_BOLD"/>
-		<field name="TEXT_STYLE_ITALIC"/>
-		<field name="TEXT_STYLE_STRIKE_THRU"/>
-		<field name="TEXT_STYLE_UNDERLINE"/>
-	</class>
-	<class name="android/app/assist/AssistStructure$WindowNode" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDisplayId()I"/>
-		<method name="getHeight()I"/>
-		<method name="getLeft()I"/>
-		<method name="getRootViewNode()Landroid/app/assist/AssistStructure$ViewNode;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="getTop()I"/>
-		<method name="getWidth()I"/>
-	</class>
-	<class name="android/app/backup/BackupAgent" since="8">
-		<extends name="android/content/ContextWrapper"/>
-		<method name="&lt;init>()V"/>
-		<method name="fullBackupFile(Ljava/io/File;Landroid/app/backup/FullBackupDataOutput;)V" since="14"/>
-		<method name="onBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V"/>
-		<method name="onCreate()V"/>
-		<method name="onDestroy()V"/>
-		<method name="onFullBackup(Landroid/app/backup/FullBackupDataOutput;)V" since="14"/>
-		<method name="onQuotaExceeded(JJ)V" since="24"/>
-		<method name="onRestore(Landroid/app/backup/BackupDataInput;ILandroid/os/ParcelFileDescriptor;)V"/>
-		<method name="onRestore(Landroid/app/backup/BackupDataInput;JLandroid/os/ParcelFileDescriptor;)V" since="28"/>
-		<method name="onRestoreFile(Landroid/os/ParcelFileDescriptor;JLjava/io/File;IJJ)V" since="14"/>
-		<method name="onRestoreFinished()V" since="21"/>
-		<field name="FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED" since="28"/>
-		<field name="FLAG_DEVICE_TO_DEVICE_TRANSFER" since="28"/>
-		<field name="TYPE_DIRECTORY" since="14"/>
-		<field name="TYPE_FILE" since="14"/>
-	</class>
-	<class name="android/app/backup/BackupAgentHelper" since="8">
-		<extends name="android/app/backup/BackupAgent"/>
-		<method name="&lt;init>()V"/>
-		<method name="addHelper(Ljava/lang/String;Landroid/app/backup/BackupHelper;)V"/>
-	</class>
-	<class name="android/app/backup/BackupDataInput" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="29"/>
-		<method name="getDataSize()I"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="readEntityData([BII)I"/>
-		<method name="readNextHeader()Z"/>
-		<method name="skipEntityData()V"/>
-	</class>
-	<class name="android/app/backup/BackupDataInputStream" since="8">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/app/backup/BackupDataInput;)V" since="29"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="size()I"/>
-	</class>
-	<class name="android/app/backup/BackupDataOutput" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="29"/>
-		<method name="getQuota()J" since="26"/>
-		<method name="getTransportFlags()I" since="28"/>
-		<method name="writeEntityData([BI)I"/>
-		<method name="writeEntityHeader(Ljava/lang/String;I)I"/>
-	</class>
-	<class name="android/app/backup/BackupHelper" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V"/>
-		<method name="restoreEntity(Landroid/app/backup/BackupDataInputStream;)V"/>
-		<method name="writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V"/>
-	</class>
-	<class name="android/app/backup/BackupManager" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="dataChanged()V"/>
-		<method name="dataChanged(Ljava/lang/String;)V"/>
-		<method name="requestRestore(Landroid/app/backup/RestoreObserver;)I" deprecated="28"/>
-	</class>
-	<class name="android/app/backup/FileBackupHelper" since="8">
-		<extends name="android/app/backup/FileBackupHelperBase" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<implements name="android/app/backup/BackupHelper"/>
-		<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/app/backup/FileBackupHelperBase" since="8" removed="29">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V"/>
-	</class>
-	<class name="android/app/backup/FullBackupDataOutput" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-		<method name="getQuota()J" since="26"/>
-		<method name="getTransportFlags()I" since="28"/>
-	</class>
-	<class name="android/app/backup/RestoreObserver" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onUpdate(ILjava/lang/String;)V"/>
-		<method name="restoreFinished(I)V"/>
-		<method name="restoreStarting(I)V"/>
-	</class>
-	<class name="android/app/backup/SharedPreferencesBackupHelper" since="8">
-		<extends name="android/app/backup/FileBackupHelperBase" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<implements name="android/app/backup/BackupHelper"/>
-		<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/app/job/JobInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getBackoffPolicy()I"/>
-		<method name="getClipData()Landroid/content/ClipData;" since="26"/>
-		<method name="getClipGrantFlags()I" since="26"/>
-		<method name="getEstimatedNetworkDownloadBytes()J" since="28"/>
-		<method name="getEstimatedNetworkUploadBytes()J" since="28"/>
-		<method name="getExtras()Landroid/os/PersistableBundle;"/>
-		<method name="getFlexMillis()J" since="24"/>
-		<method name="getId()I"/>
-		<method name="getInitialBackoffMillis()J"/>
-		<method name="getIntervalMillis()J"/>
-		<method name="getMaxExecutionDelayMillis()J"/>
-		<method name="getMinFlexMillis()J" since="24"/>
-		<method name="getMinLatencyMillis()J"/>
-		<method name="getMinPeriodMillis()J" since="24"/>
-		<method name="getNetworkType()I" deprecated="28"/>
-		<method name="getRequiredNetwork()Landroid/net/NetworkRequest;" since="28"/>
-		<method name="getService()Landroid/content/ComponentName;"/>
-		<method name="getTransientExtras()Landroid/os/Bundle;" since="26"/>
-		<method name="getTriggerContentMaxDelay()J" since="24"/>
-		<method name="getTriggerContentUpdateDelay()J" since="24"/>
-		<method name="getTriggerContentUris()[Landroid/app/job/JobInfo$TriggerContentUri;" since="24"/>
-		<method name="isImportantWhileForeground()Z" since="28"/>
-		<method name="isPeriodic()Z"/>
-		<method name="isPersisted()Z"/>
-		<method name="isPrefetch()Z" since="28"/>
-		<method name="isRequireBatteryNotLow()Z" since="26"/>
-		<method name="isRequireCharging()Z"/>
-		<method name="isRequireDeviceIdle()Z"/>
-		<method name="isRequireStorageNotLow()Z" since="26"/>
-		<field name="BACKOFF_POLICY_EXPONENTIAL"/>
-		<field name="BACKOFF_POLICY_LINEAR"/>
-		<field name="CREATOR"/>
-		<field name="DEFAULT_INITIAL_BACKOFF_MILLIS"/>
-		<field name="MAX_BACKOFF_DELAY_MILLIS"/>
-		<field name="NETWORK_BYTES_UNKNOWN" since="28"/>
-		<field name="NETWORK_TYPE_ANY"/>
-		<field name="NETWORK_TYPE_CELLULAR" since="28"/>
-		<field name="NETWORK_TYPE_METERED" since="26" deprecated="28"/>
-		<field name="NETWORK_TYPE_NONE"/>
-		<field name="NETWORK_TYPE_NOT_ROAMING" since="24"/>
-		<field name="NETWORK_TYPE_UNMETERED"/>
-	</class>
-	<class name="android/app/job/JobInfo$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILandroid/content/ComponentName;)V"/>
-		<method name="addTriggerContentUri(Landroid/app/job/JobInfo$TriggerContentUri;)Landroid/app/job/JobInfo$Builder;" since="24"/>
-		<method name="build()Landroid/app/job/JobInfo;"/>
-		<method name="setBackoffCriteria(JI)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setClipData(Landroid/content/ClipData;I)Landroid/app/job/JobInfo$Builder;" since="26"/>
-		<method name="setEstimatedNetworkBytes(JJ)Landroid/app/job/JobInfo$Builder;" since="28"/>
-		<method name="setExtras(Landroid/os/PersistableBundle;)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setImportantWhileForeground(Z)Landroid/app/job/JobInfo$Builder;" since="28"/>
-		<method name="setMinimumLatency(J)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setOverrideDeadline(J)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setPeriodic(J)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setPeriodic(JJ)Landroid/app/job/JobInfo$Builder;" since="24"/>
-		<method name="setPersisted(Z)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setPrefetch(Z)Landroid/app/job/JobInfo$Builder;" since="28"/>
-		<method name="setRequiredNetwork(Landroid/net/NetworkRequest;)Landroid/app/job/JobInfo$Builder;" since="28"/>
-		<method name="setRequiredNetworkType(I)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setRequiresBatteryNotLow(Z)Landroid/app/job/JobInfo$Builder;" since="26"/>
-		<method name="setRequiresCharging(Z)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setRequiresDeviceIdle(Z)Landroid/app/job/JobInfo$Builder;"/>
-		<method name="setRequiresStorageNotLow(Z)Landroid/app/job/JobInfo$Builder;" since="26"/>
-		<method name="setTransientExtras(Landroid/os/Bundle;)Landroid/app/job/JobInfo$Builder;" since="26"/>
-		<method name="setTriggerContentMaxDelay(J)Landroid/app/job/JobInfo$Builder;" since="24"/>
-		<method name="setTriggerContentUpdateDelay(J)Landroid/app/job/JobInfo$Builder;" since="24"/>
-	</class>
-	<class name="android/app/job/JobInfo$TriggerContentUri" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/net/Uri;I)V"/>
-		<method name="getFlags()I"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_NOTIFY_FOR_DESCENDANTS"/>
-	</class>
-	<class name="android/app/job/JobParameters" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="completeWork(Landroid/app/job/JobWorkItem;)V" since="26"/>
-		<method name="dequeueWork()Landroid/app/job/JobWorkItem;" since="26"/>
-		<method name="getClipData()Landroid/content/ClipData;" since="26"/>
-		<method name="getClipGrantFlags()I" since="26"/>
-		<method name="getExtras()Landroid/os/PersistableBundle;"/>
-		<method name="getJobId()I"/>
-		<method name="getNetwork()Landroid/net/Network;" since="28"/>
-		<method name="getTransientExtras()Landroid/os/Bundle;" since="26"/>
-		<method name="getTriggeredContentAuthorities()[Ljava/lang/String;" since="24"/>
-		<method name="getTriggeredContentUris()[Landroid/net/Uri;" since="24"/>
-		<method name="isOverrideDeadlineExpired()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/job/JobScheduler" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel(I)V"/>
-		<method name="cancelAll()V"/>
-		<method name="enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I" since="26"/>
-		<method name="getAllPendingJobs()Ljava/util/List;"/>
-		<method name="getPendingJob(I)Landroid/app/job/JobInfo;" since="24"/>
-		<method name="schedule(Landroid/app/job/JobInfo;)I"/>
-		<field name="RESULT_FAILURE"/>
-		<field name="RESULT_SUCCESS"/>
-	</class>
-	<class name="android/app/job/JobService" since="21">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="jobFinished(Landroid/app/job/JobParameters;Z)V"/>
-		<method name="onStartJob(Landroid/app/job/JobParameters;)Z"/>
-		<method name="onStopJob(Landroid/app/job/JobParameters;)Z"/>
-		<field name="PERMISSION_BIND"/>
-	</class>
-	<class name="android/app/job/JobServiceEngine" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/app/Service;)V"/>
-		<method name="getBinder()Landroid/os/IBinder;"/>
-		<method name="jobFinished(Landroid/app/job/JobParameters;Z)V"/>
-		<method name="onStartJob(Landroid/app/job/JobParameters;)Z"/>
-		<method name="onStopJob(Landroid/app/job/JobParameters;)Z"/>
-	</class>
-	<class name="android/app/job/JobWorkItem" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/Intent;)V"/>
-		<method name="&lt;init>(Landroid/content/Intent;JJ)V" since="28"/>
-		<method name="getDeliveryCount()I"/>
-		<method name="getEstimatedNetworkDownloadBytes()J" since="28"/>
-		<method name="getEstimatedNetworkUploadBytes()J" since="28"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/slice/Slice" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="getHints()Ljava/util/List;"/>
-		<method name="getItems()Ljava/util/List;"/>
-		<method name="getSpec()Landroid/app/slice/SliceSpec;"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-		<method name="isCallerNeeded()Z"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_RANGE_VALUE"/>
-		<field name="EXTRA_TOGGLE_STATE"/>
-		<field name="HINT_ACTIONS"/>
-		<field name="HINT_ERROR"/>
-		<field name="HINT_HORIZONTAL"/>
-		<field name="HINT_KEYWORDS"/>
-		<field name="HINT_LARGE"/>
-		<field name="HINT_LAST_UPDATED"/>
-		<field name="HINT_LIST"/>
-		<field name="HINT_LIST_ITEM"/>
-		<field name="HINT_NO_TINT"/>
-		<field name="HINT_PARTIAL"/>
-		<field name="HINT_PERMISSION_REQUEST"/>
-		<field name="HINT_SEE_MORE"/>
-		<field name="HINT_SELECTED"/>
-		<field name="HINT_SHORTCUT"/>
-		<field name="HINT_SUMMARY"/>
-		<field name="HINT_TITLE"/>
-		<field name="HINT_TTL"/>
-		<field name="SUBTYPE_COLOR"/>
-		<field name="SUBTYPE_CONTENT_DESCRIPTION"/>
-		<field name="SUBTYPE_LAYOUT_DIRECTION"/>
-		<field name="SUBTYPE_MAX"/>
-		<field name="SUBTYPE_MESSAGE"/>
-		<field name="SUBTYPE_MILLIS"/>
-		<field name="SUBTYPE_PRIORITY"/>
-		<field name="SUBTYPE_RANGE"/>
-		<field name="SUBTYPE_SOURCE"/>
-		<field name="SUBTYPE_TOGGLE"/>
-		<field name="SUBTYPE_VALUE"/>
-	</class>
-	<class name="android/app/slice/Slice$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/app/slice/Slice$Builder;)V"/>
-		<method name="&lt;init>(Landroid/net/Uri;Landroid/app/slice/SliceSpec;)V"/>
-		<method name="addAction(Landroid/app/PendingIntent;Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addBundle(Landroid/os/Bundle;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addHints(Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addIcon(Landroid/graphics/drawable/Icon;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addInt(ILjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addLong(JLjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addRemoteInput(Landroid/app/RemoteInput;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addSubSlice(Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="addText(Ljava/lang/CharSequence;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
-		<method name="build()Landroid/app/slice/Slice;"/>
-		<method name="setCallerNeeded(Z)Landroid/app/slice/Slice$Builder;"/>
-	</class>
-	<class name="android/app/slice/SliceItem" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getAction()Landroid/app/PendingIntent;"/>
-		<method name="getBundle()Landroid/os/Bundle;"/>
-		<method name="getFormat()Ljava/lang/String;"/>
-		<method name="getHints()Ljava/util/List;"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
-		<method name="getInt()I"/>
-		<method name="getLong()J"/>
-		<method name="getRemoteInput()Landroid/app/RemoteInput;"/>
-		<method name="getSlice()Landroid/app/slice/Slice;"/>
-		<method name="getSubType()Ljava/lang/String;"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="hasHint(Ljava/lang/String;)Z"/>
-		<field name="CREATOR"/>
-		<field name="FORMAT_ACTION"/>
-		<field name="FORMAT_BUNDLE"/>
-		<field name="FORMAT_IMAGE"/>
-		<field name="FORMAT_INT"/>
-		<field name="FORMAT_LONG"/>
-		<field name="FORMAT_REMOTE_INPUT"/>
-		<field name="FORMAT_SLICE"/>
-		<field name="FORMAT_TEXT"/>
-	</class>
-	<class name="android/app/slice/SliceManager" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="bindSlice(Landroid/content/Intent;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
-		<method name="bindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
-		<method name="checkSlicePermission(Landroid/net/Uri;II)I"/>
-		<method name="getPinnedSlices()Ljava/util/List;"/>
-		<method name="getPinnedSpecs(Landroid/net/Uri;)Ljava/util/Set;"/>
-		<method name="getSliceDescendants(Landroid/net/Uri;)Ljava/util/Collection;"/>
-		<method name="grantSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V"/>
-		<method name="mapIntentToUri(Landroid/content/Intent;)Landroid/net/Uri;"/>
-		<method name="pinSlice(Landroid/net/Uri;Ljava/util/Set;)V"/>
-		<method name="revokeSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V"/>
-		<method name="unpinSlice(Landroid/net/Uri;)V"/>
-		<field name="CATEGORY_SLICE"/>
-		<field name="SLICE_METADATA_KEY"/>
-	</class>
-	<class name="android/app/slice/SliceMetrics" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;)V"/>
-		<method name="logHidden()V"/>
-		<method name="logTouch(ILandroid/net/Uri;)V"/>
-		<method name="logVisible()V"/>
-	</class>
-	<class name="android/app/slice/SliceProvider" since="28">
-		<extends name="android/content/ContentProvider"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([Ljava/lang/String;)V"/>
-		<method name="onBindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
-		<method name="onCreatePermissionRequest(Landroid/net/Uri;)Landroid/app/PendingIntent;"/>
-		<method name="onGetSliceDescendants(Landroid/net/Uri;)Ljava/util/Collection;"/>
-		<method name="onMapIntentToUri(Landroid/content/Intent;)Landroid/net/Uri;"/>
-		<method name="onSlicePinned(Landroid/net/Uri;)V"/>
-		<method name="onSliceUnpinned(Landroid/net/Uri;)V"/>
-		<field name="SLICE_TYPE"/>
-	</class>
-	<class name="android/app/slice/SliceSpec" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="canRender(Landroid/app/slice/SliceSpec;)Z"/>
-		<method name="getRevision()I"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/usage/ConfigurationStats" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/app/usage/ConfigurationStats;)V"/>
-		<method name="getActivationCount()I"/>
-		<method name="getConfiguration()Landroid/content/res/Configuration;"/>
-		<method name="getFirstTimeStamp()J"/>
-		<method name="getLastTimeActive()J"/>
-		<method name="getLastTimeStamp()J"/>
-		<method name="getTotalTimeActive()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/usage/EventStats" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/app/usage/EventStats;)V"/>
-		<method name="add(Landroid/app/usage/EventStats;)V"/>
-		<method name="getCount()I"/>
-		<method name="getEventType()I"/>
-		<method name="getFirstTimeStamp()J"/>
-		<method name="getLastEventTime()J"/>
-		<method name="getLastTimeStamp()J"/>
-		<method name="getTotalTime()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/usage/ExternalStorageStats" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAppBytes()J"/>
-		<method name="getAudioBytes()J"/>
-		<method name="getImageBytes()J"/>
-		<method name="getTotalBytes()J"/>
-		<method name="getVideoBytes()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/usage/NetworkStats" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getNextBucket(Landroid/app/usage/NetworkStats$Bucket;)Z"/>
-		<method name="hasNextBucket()Z"/>
-	</class>
-	<class name="android/app/usage/NetworkStats$Bucket" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultNetworkStatus()I" since="28"/>
-		<method name="getEndTimeStamp()J"/>
-		<method name="getMetered()I" since="26"/>
-		<method name="getRoaming()I" since="24"/>
-		<method name="getRxBytes()J"/>
-		<method name="getRxPackets()J"/>
-		<method name="getStartTimeStamp()J"/>
-		<method name="getState()I"/>
-		<method name="getTag()I" since="24"/>
-		<method name="getTxBytes()J"/>
-		<method name="getTxPackets()J"/>
-		<method name="getUid()I"/>
-		<field name="DEFAULT_NETWORK_ALL" since="28"/>
-		<field name="DEFAULT_NETWORK_NO" since="28"/>
-		<field name="DEFAULT_NETWORK_YES" since="28"/>
-		<field name="METERED_ALL" since="26"/>
-		<field name="METERED_NO" since="26"/>
-		<field name="METERED_YES" since="26"/>
-		<field name="ROAMING_ALL" since="24"/>
-		<field name="ROAMING_NO" since="24"/>
-		<field name="ROAMING_YES" since="24"/>
-		<field name="STATE_ALL"/>
-		<field name="STATE_DEFAULT"/>
-		<field name="STATE_FOREGROUND"/>
-		<field name="TAG_NONE" since="24"/>
-		<field name="UID_ALL"/>
-		<field name="UID_REMOVED"/>
-		<field name="UID_TETHERING"/>
-	</class>
-	<class name="android/app/usage/NetworkStatsManager" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="queryDetails(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;"/>
-		<method name="queryDetailsForUid(ILjava/lang/String;JJI)Landroid/app/usage/NetworkStats;"/>
-		<method name="queryDetailsForUidTag(ILjava/lang/String;JJII)Landroid/app/usage/NetworkStats;" since="24"/>
-		<method name="queryDetailsForUidTagState(ILjava/lang/String;JJIII)Landroid/app/usage/NetworkStats;" since="28"/>
-		<method name="querySummary(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;"/>
-		<method name="querySummaryForDevice(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats$Bucket;"/>
-		<method name="querySummaryForUser(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats$Bucket;"/>
-		<method name="registerUsageCallback(ILjava/lang/String;JLandroid/app/usage/NetworkStatsManager$UsageCallback;)V" since="24"/>
-		<method name="registerUsageCallback(ILjava/lang/String;JLandroid/app/usage/NetworkStatsManager$UsageCallback;Landroid/os/Handler;)V" since="24"/>
-		<method name="unregisterUsageCallback(Landroid/app/usage/NetworkStatsManager$UsageCallback;)V" since="24"/>
-	</class>
-	<class name="android/app/usage/NetworkStatsManager$UsageCallback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onThresholdReached(ILjava/lang/String;)V"/>
-	</class>
-	<class name="android/app/usage/StorageStats" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAppBytes()J"/>
-		<method name="getCacheBytes()J"/>
-		<method name="getDataBytes()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/usage/StorageStatsManager" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFreeBytes(Ljava/util/UUID;)J"/>
-		<method name="getTotalBytes(Ljava/util/UUID;)J"/>
-		<method name="queryExternalStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/ExternalStorageStats;"/>
-		<method name="queryStatsForPackage(Ljava/util/UUID;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;"/>
-		<method name="queryStatsForUid(Ljava/util/UUID;I)Landroid/app/usage/StorageStats;"/>
-		<method name="queryStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;"/>
-	</class>
-	<class name="android/app/usage/UsageEvents" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getNextEvent(Landroid/app/usage/UsageEvents$Event;)Z"/>
-		<method name="hasNextEvent()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/usage/UsageEvents$Event" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAppStandbyBucket()I" since="28"/>
-		<method name="getClassName()Ljava/lang/String;"/>
-		<method name="getConfiguration()Landroid/content/res/Configuration;"/>
-		<method name="getEventType()I"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getShortcutId()Ljava/lang/String;" since="25"/>
-		<method name="getTimeStamp()J"/>
-		<field name="CONFIGURATION_CHANGE"/>
-		<field name="KEYGUARD_HIDDEN" since="28"/>
-		<field name="KEYGUARD_SHOWN" since="28"/>
-		<field name="MOVE_TO_BACKGROUND"/>
-		<field name="MOVE_TO_FOREGROUND"/>
-		<field name="NONE"/>
-		<field name="SCREEN_INTERACTIVE" since="28"/>
-		<field name="SCREEN_NON_INTERACTIVE" since="28"/>
-		<field name="SHORTCUT_INVOCATION" since="25"/>
-		<field name="STANDBY_BUCKET_CHANGED" since="28"/>
-		<field name="USER_INTERACTION" since="23"/>
-	</class>
-	<class name="android/app/usage/UsageStats" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/app/usage/UsageStats;)V"/>
-		<method name="add(Landroid/app/usage/UsageStats;)V"/>
-		<method name="getFirstTimeStamp()J"/>
-		<method name="getLastTimeStamp()J"/>
-		<method name="getLastTimeUsed()J"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getTotalTimeInForeground()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/app/usage/UsageStatsManager" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAppStandbyBucket()I" since="28"/>
-		<method name="isAppInactive(Ljava/lang/String;)Z" since="23"/>
-		<method name="queryAndAggregateUsageStats(JJ)Ljava/util/Map;"/>
-		<method name="queryConfigurations(IJJ)Ljava/util/List;"/>
-		<method name="queryEventStats(IJJ)Ljava/util/List;" since="28"/>
-		<method name="queryEvents(JJ)Landroid/app/usage/UsageEvents;"/>
-		<method name="queryEventsForSelf(JJ)Landroid/app/usage/UsageEvents;" since="28"/>
-		<method name="queryUsageStats(IJJ)Ljava/util/List;"/>
-		<field name="INTERVAL_BEST"/>
-		<field name="INTERVAL_DAILY"/>
-		<field name="INTERVAL_MONTHLY"/>
-		<field name="INTERVAL_WEEKLY"/>
-		<field name="INTERVAL_YEARLY"/>
-		<field name="STANDBY_BUCKET_ACTIVE" since="28"/>
-		<field name="STANDBY_BUCKET_FREQUENT" since="28"/>
-		<field name="STANDBY_BUCKET_RARE" since="28"/>
-		<field name="STANDBY_BUCKET_WORKING_SET" since="28"/>
-	</class>
-	<class name="android/appwidget/AppWidgetHost" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="allocateAppWidgetId()I"/>
-		<method name="clearViews()V" since="11"/>
-		<method name="createView(Landroid/content/Context;ILandroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetHostView;"/>
-		<method name="deleteAllHosts()V"/>
-		<method name="deleteAppWidgetId(I)V"/>
-		<method name="deleteHost()V"/>
-		<method name="getAppWidgetIds()[I" since="26"/>
-		<method name="onCreateView(Landroid/content/Context;ILandroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetHostView;"/>
-		<method name="onProviderChanged(ILandroid/appwidget/AppWidgetProviderInfo;)V"/>
-		<method name="onProvidersChanged()V" since="17"/>
-		<method name="startAppWidgetConfigureActivityForResult(Landroid/app/Activity;IIILandroid/os/Bundle;)V" since="21"/>
-		<method name="startListening()V"/>
-		<method name="stopListening()V"/>
-	</class>
-	<class name="android/appwidget/AppWidgetHostView" since="3">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;II)V"/>
-		<method name="getAppWidgetId()I"/>
-		<method name="getAppWidgetInfo()Landroid/appwidget/AppWidgetProviderInfo;"/>
-		<method name="getDefaultPaddingForWidget(Landroid/content/Context;Landroid/content/ComponentName;Landroid/graphics/Rect;)Landroid/graphics/Rect;" since="15"/>
-		<method name="getDefaultView()Landroid/view/View;"/>
-		<method name="getErrorView()Landroid/view/View;"/>
-		<method name="prepareView(Landroid/view/View;)V"/>
-		<method name="setAppWidget(ILandroid/appwidget/AppWidgetProviderInfo;)V"/>
-		<method name="setExecutor(Ljava/util/concurrent/Executor;)V" since="26"/>
-		<method name="updateAppWidget(Landroid/widget/RemoteViews;)V"/>
-		<method name="updateAppWidgetOptions(Landroid/os/Bundle;)V" since="16"/>
-		<method name="updateAppWidgetSize(Landroid/os/Bundle;IIII)V" since="16"/>
-	</class>
-	<class name="android/appwidget/AppWidgetManager" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="bindAppWidgetId(ILandroid/content/ComponentName;)V" removed="16"/>
-		<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;)Z" since="16"/>
-		<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;Landroid/os/Bundle;)Z" since="17"/>
-		<method name="bindAppWidgetIdIfAllowed(ILandroid/os/UserHandle;Landroid/content/ComponentName;Landroid/os/Bundle;)Z" since="21"/>
-		<method name="getAppWidgetIds(Landroid/content/ComponentName;)[I"/>
-		<method name="getAppWidgetInfo(I)Landroid/appwidget/AppWidgetProviderInfo;"/>
-		<method name="getAppWidgetOptions(I)Landroid/os/Bundle;" since="16"/>
-		<method name="getInstalledProviders()Ljava/util/List;"/>
-		<method name="getInstalledProvidersForPackage(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
-		<method name="getInstalledProvidersForProfile(Landroid/os/UserHandle;)Ljava/util/List;" since="21"/>
-		<method name="getInstance(Landroid/content/Context;)Landroid/appwidget/AppWidgetManager;"/>
-		<method name="isRequestPinAppWidgetSupported()Z" since="26"/>
-		<method name="notifyAppWidgetViewDataChanged(II)V" since="11"/>
-		<method name="notifyAppWidgetViewDataChanged([II)V" since="11"/>
-		<method name="partiallyUpdateAppWidget(ILandroid/widget/RemoteViews;)V" since="11"/>
-		<method name="partiallyUpdateAppWidget([ILandroid/widget/RemoteViews;)V" since="11"/>
-		<method name="requestPinAppWidget(Landroid/content/ComponentName;Landroid/os/Bundle;Landroid/app/PendingIntent;)Z" since="26"/>
-		<method name="updateAppWidget(ILandroid/widget/RemoteViews;)V"/>
-		<method name="updateAppWidget(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V"/>
-		<method name="updateAppWidget([ILandroid/widget/RemoteViews;)V"/>
-		<method name="updateAppWidgetOptions(ILandroid/os/Bundle;)V" since="16"/>
-		<method name="updateAppWidgetProviderInfo(Landroid/content/ComponentName;Ljava/lang/String;)V" since="28"/>
-		<field name="ACTION_APPWIDGET_BIND" since="16"/>
-		<field name="ACTION_APPWIDGET_CONFIGURE"/>
-		<field name="ACTION_APPWIDGET_DELETED"/>
-		<field name="ACTION_APPWIDGET_DISABLED"/>
-		<field name="ACTION_APPWIDGET_ENABLED"/>
-		<field name="ACTION_APPWIDGET_HOST_RESTORED" since="21"/>
-		<field name="ACTION_APPWIDGET_OPTIONS_CHANGED" since="16"/>
-		<field name="ACTION_APPWIDGET_PICK"/>
-		<field name="ACTION_APPWIDGET_RESTORED" since="21"/>
-		<field name="ACTION_APPWIDGET_UPDATE"/>
-		<field name="EXTRA_APPWIDGET_ID"/>
-		<field name="EXTRA_APPWIDGET_IDS"/>
-		<field name="EXTRA_APPWIDGET_OLD_IDS" since="21"/>
-		<field name="EXTRA_APPWIDGET_OPTIONS" since="16"/>
-		<field name="EXTRA_APPWIDGET_PREVIEW" since="26"/>
-		<field name="EXTRA_APPWIDGET_PROVIDER" since="16"/>
-		<field name="EXTRA_APPWIDGET_PROVIDER_PROFILE" since="21"/>
-		<field name="EXTRA_CUSTOM_EXTRAS"/>
-		<field name="EXTRA_CUSTOM_INFO"/>
-		<field name="EXTRA_HOST_ID" since="21"/>
-		<field name="INVALID_APPWIDGET_ID"/>
-		<field name="META_DATA_APPWIDGET_PROVIDER"/>
-		<field name="OPTION_APPWIDGET_HOST_CATEGORY" since="17"/>
-		<field name="OPTION_APPWIDGET_MAX_HEIGHT" since="16"/>
-		<field name="OPTION_APPWIDGET_MAX_WIDTH" since="16"/>
-		<field name="OPTION_APPWIDGET_MIN_HEIGHT" since="16"/>
-		<field name="OPTION_APPWIDGET_MIN_WIDTH" since="16"/>
-	</class>
-	<class name="android/appwidget/AppWidgetProvider" since="3">
-		<extends name="android/content/BroadcastReceiver"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAppWidgetOptionsChanged(Landroid/content/Context;Landroid/appwidget/AppWidgetManager;ILandroid/os/Bundle;)V" since="16"/>
-		<method name="onDeleted(Landroid/content/Context;[I)V"/>
-		<method name="onDisabled(Landroid/content/Context;)V"/>
-		<method name="onEnabled(Landroid/content/Context;)V"/>
-		<method name="onRestored(Landroid/content/Context;[I[I)V" since="21"/>
-		<method name="onUpdate(Landroid/content/Context;Landroid/appwidget/AppWidgetManager;[I)V"/>
-	</class>
-	<class name="android/appwidget/AppWidgetProviderInfo" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="clone()Landroid/appwidget/AppWidgetProviderInfo;" since="17"/>
-		<method name="getProfile()Landroid/os/UserHandle;" since="21"/>
-		<method name="loadIcon(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/String;" since="21"/>
-		<method name="loadPreviewImage(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<field name="CREATOR"/>
-		<field name="RESIZE_BOTH" since="12"/>
-		<field name="RESIZE_HORIZONTAL" since="12"/>
-		<field name="RESIZE_NONE" since="12"/>
-		<field name="RESIZE_VERTICAL" since="12"/>
-		<field name="WIDGET_CATEGORY_HOME_SCREEN" since="17"/>
-		<field name="WIDGET_CATEGORY_KEYGUARD" since="17"/>
-		<field name="WIDGET_CATEGORY_SEARCHBOX" since="21"/>
-		<field name="WIDGET_FEATURE_HIDE_FROM_PICKER" since="28"/>
-		<field name="WIDGET_FEATURE_RECONFIGURABLE" since="28"/>
-		<field name="autoAdvanceViewId" since="11"/>
-		<field name="configure"/>
-		<field name="icon"/>
-		<field name="initialKeyguardLayout" since="17"/>
-		<field name="initialLayout"/>
-		<field name="label" deprecated="21"/>
-		<field name="minHeight"/>
-		<field name="minResizeHeight" since="14"/>
-		<field name="minResizeWidth" since="14"/>
-		<field name="minWidth"/>
-		<field name="previewImage" since="11"/>
-		<field name="provider"/>
-		<field name="resizeMode" since="12"/>
-		<field name="updatePeriodMillis"/>
-		<field name="widgetCategory" since="17"/>
-		<field name="widgetFeatures" since="28"/>
-	</class>
-	<class name="android/bluetooth/BluetoothA2dp" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/bluetooth/BluetoothProfile"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
-		<method name="isA2dpPlaying(Landroid/bluetooth/BluetoothDevice;)Z"/>
-		<field name="ACTION_CONNECTION_STATE_CHANGED"/>
-		<field name="ACTION_PLAYING_STATE_CHANGED"/>
-		<field name="STATE_NOT_PLAYING"/>
-		<field name="STATE_PLAYING"/>
-	</class>
-	<class name="android/bluetooth/BluetoothAdapter" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancelDiscovery()Z"/>
-		<method name="checkBluetoothAddress(Ljava/lang/String;)Z"/>
-		<method name="closeProfileProxy(ILandroid/bluetooth/BluetoothProfile;)V" since="11"/>
-		<method name="disable()Z"/>
-		<method name="enable()Z"/>
-		<method name="getAddress()Ljava/lang/String;"/>
-		<method name="getBluetoothLeAdvertiser()Landroid/bluetooth/le/BluetoothLeAdvertiser;" since="21"/>
-		<method name="getBluetoothLeScanner()Landroid/bluetooth/le/BluetoothLeScanner;" since="21"/>
-		<method name="getBondedDevices()Ljava/util/Set;"/>
-		<method name="getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;"/>
-		<method name="getLeMaximumAdvertisingDataLength()I" since="26"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getProfileConnectionState(I)I" since="14"/>
-		<method name="getProfileProxy(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;I)Z" since="11"/>
-		<method name="getRemoteDevice(Ljava/lang/String;)Landroid/bluetooth/BluetoothDevice;"/>
-		<method name="getRemoteDevice([B)Landroid/bluetooth/BluetoothDevice;" since="16"/>
-		<method name="getScanMode()I"/>
-		<method name="getState()I"/>
-		<method name="isDiscovering()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isLe2MPhySupported()Z" since="26"/>
-		<method name="isLeCodedPhySupported()Z" since="26"/>
-		<method name="isLeExtendedAdvertisingSupported()Z" since="26"/>
-		<method name="isLePeriodicAdvertisingSupported()Z" since="26"/>
-		<method name="isMultipleAdvertisementSupported()Z" since="21"/>
-		<method name="isOffloadedFilteringSupported()Z" since="21"/>
-		<method name="isOffloadedScanBatchingSupported()Z" since="21"/>
-		<method name="listenUsingInsecureRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;" since="10"/>
-		<method name="listenUsingRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;"/>
-		<method name="setName(Ljava/lang/String;)Z"/>
-		<method name="startDiscovery()Z"/>
-		<method name="startLeScan(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z" since="18" deprecated="21"/>
-		<method name="startLeScan([Ljava/util/UUID;Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z" since="18" deprecated="21"/>
-		<method name="stopLeScan(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V" since="18" deprecated="21"/>
-		<field name="ACTION_CONNECTION_STATE_CHANGED" since="11"/>
-		<field name="ACTION_DISCOVERY_FINISHED"/>
-		<field name="ACTION_DISCOVERY_STARTED"/>
-		<field name="ACTION_LOCAL_NAME_CHANGED"/>
-		<field name="ACTION_REQUEST_DISCOVERABLE"/>
-		<field name="ACTION_REQUEST_ENABLE"/>
-		<field name="ACTION_SCAN_MODE_CHANGED"/>
-		<field name="ACTION_STATE_CHANGED"/>
-		<field name="ERROR"/>
-		<field name="EXTRA_CONNECTION_STATE" since="11"/>
-		<field name="EXTRA_DISCOVERABLE_DURATION"/>
-		<field name="EXTRA_LOCAL_NAME"/>
-		<field name="EXTRA_PREVIOUS_CONNECTION_STATE" since="11"/>
-		<field name="EXTRA_PREVIOUS_SCAN_MODE"/>
-		<field name="EXTRA_PREVIOUS_STATE"/>
-		<field name="EXTRA_SCAN_MODE"/>
-		<field name="EXTRA_STATE"/>
-		<field name="SCAN_MODE_CONNECTABLE"/>
-		<field name="SCAN_MODE_CONNECTABLE_DISCOVERABLE"/>
-		<field name="SCAN_MODE_NONE"/>
-		<field name="STATE_CONNECTED" since="11"/>
-		<field name="STATE_CONNECTING" since="11"/>
-		<field name="STATE_DISCONNECTED" since="11"/>
-		<field name="STATE_DISCONNECTING" since="11"/>
-		<field name="STATE_OFF"/>
-		<field name="STATE_ON"/>
-		<field name="STATE_TURNING_OFF"/>
-		<field name="STATE_TURNING_ON"/>
-	</class>
-	<class name="android/bluetooth/BluetoothAdapter$LeScanCallback" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onLeScan(Landroid/bluetooth/BluetoothDevice;I[B)V"/>
-	</class>
-	<class name="android/bluetooth/BluetoothAssignedNumbers" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AAMP_OF_AMERICA" since="19"/>
-		<field name="ACCEL_SEMICONDUCTOR"/>
-		<field name="ACE_SENSOR" since="19"/>
-		<field name="ADIDAS" since="19"/>
-		<field name="ADVANCED_PANMOBIL_SYSTEMS" since="19"/>
-		<field name="AIROHA_TECHNOLOGY" since="19"/>
-		<field name="ALCATEL"/>
-		<field name="ALPWISE" since="19"/>
-		<field name="AMICCOM_ELECTRONICS" since="19"/>
-		<field name="APLIX" since="19"/>
-		<field name="APPLE"/>
-		<field name="APT_LICENSING"/>
-		<field name="ARCHOS" since="19"/>
-		<field name="ARP_DEVICES" since="19"/>
-		<field name="ATHEROS_COMMUNICATIONS"/>
-		<field name="ATMEL"/>
-		<field name="AUSTCO_COMMUNICATION_SYSTEMS" since="19"/>
-		<field name="AUTONET_MOBILE" since="19"/>
-		<field name="AVAGO"/>
-		<field name="AVM_BERLIN"/>
-		<field name="A_AND_D_ENGINEERING" since="19"/>
-		<field name="A_AND_R_CAMBRIDGE" since="19"/>
-		<field name="BANDSPEED"/>
-		<field name="BAND_XI_INTERNATIONAL" since="19"/>
-		<field name="BDE_TECHNOLOGY" since="19"/>
-		<field name="BEATS_ELECTRONICS" since="19"/>
-		<field name="BEAUTIFUL_ENTERPRISE" since="19"/>
-		<field name="BEKEY" since="19"/>
-		<field name="BELKIN_INTERNATIONAL"/>
-		<field name="BINAURIC" since="19"/>
-		<field name="BIOSENTRONICS" since="19"/>
-		<field name="BLUEGIGA"/>
-		<field name="BLUERADIOS" since="19"/>
-		<field name="BLUETOOTH_SIG"/>
-		<field name="BLUETREK_TECHNOLOGIES" since="19"/>
-		<field name="BOSE" since="19"/>
-		<field name="BRIARTEK" since="19"/>
-		<field name="BROADCOM"/>
-		<field name="CAEN_RFID" since="19"/>
-		<field name="CAMBRIDGE_SILICON_RADIO"/>
-		<field name="CATC"/>
-		<field name="CINETIX" since="19"/>
-		<field name="CLARINOX_TECHNOLOGIES" since="19"/>
-		<field name="COLORFY" since="19"/>
-		<field name="COMMIL"/>
-		<field name="CONEXANT_SYSTEMS"/>
-		<field name="CONNECTBLUE" since="19"/>
-		<field name="CONTINENTAL_AUTOMOTIVE"/>
-		<field name="CONWISE_TECHNOLOGY"/>
-		<field name="CREATIVE_TECHNOLOGY" since="19"/>
-		<field name="C_TECHNOLOGIES"/>
-		<field name="DANLERS" since="19"/>
-		<field name="DELORME_PUBLISHING_COMPANY" since="19"/>
-		<field name="DEXCOM" since="19"/>
-		<field name="DIALOG_SEMICONDUCTOR" since="19"/>
-		<field name="DIGIANSWER"/>
-		<field name="ECLIPSE"/>
-		<field name="ECOTEST" since="19"/>
-		<field name="ELGATO_SYSTEMS" since="19"/>
-		<field name="EM_MICROELECTRONIC_MARIN"/>
-		<field name="EQUINOX_AG" since="19"/>
-		<field name="ERICSSON_TECHNOLOGY"/>
-		<field name="EVLUMA" since="19"/>
-		<field name="FREE2MOVE"/>
-		<field name="FUNAI_ELECTRIC" since="19"/>
-		<field name="GARMIN_INTERNATIONAL" since="19"/>
-		<field name="GCT_SEMICONDUCTOR"/>
-		<field name="GELO" since="19"/>
-		<field name="GENEQ" since="19"/>
-		<field name="GENERAL_MOTORS" since="19"/>
-		<field name="GENNUM"/>
-		<field name="GEOFORCE" since="19"/>
-		<field name="GIBSON_GUITARS" since="19"/>
-		<field name="GN_NETCOM" since="19"/>
-		<field name="GN_RESOUND" since="19"/>
-		<field name="GOOGLE" since="19"/>
-		<field name="GREEN_THROTTLE_GAMES" since="19"/>
-		<field name="GROUP_SENSE" since="19"/>
-		<field name="HANLYNN_TECHNOLOGIES" since="19"/>
-		<field name="HARMAN_INTERNATIONAL"/>
-		<field name="HEWLETT_PACKARD" since="19"/>
-		<field name="HITACHI"/>
-		<field name="HOSIDEN" since="19"/>
-		<field name="IBM"/>
-		<field name="INFINEON_TECHNOLOGIES"/>
-		<field name="INGENIEUR_SYSTEMGRUPPE_ZAHN" since="19"/>
-		<field name="INTEGRATED_SILICON_SOLUTION"/>
-		<field name="INTEGRATED_SYSTEM_SOLUTION"/>
-		<field name="INTEL"/>
-		<field name="INVENTEL"/>
-		<field name="IPEXTREME"/>
-		<field name="I_TECH_DYNAMIC_GLOBAL_DISTRIBUTION" since="19"/>
-		<field name="JAWBONE" since="19"/>
-		<field name="JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS" since="19"/>
-		<field name="JOHNSON_CONTROLS" since="19"/>
-		<field name="J_AND_M"/>
-		<field name="KAWANTECH" since="19"/>
-		<field name="KC_TECHNOLOGY"/>
-		<field name="KENSINGTON_COMPUTER_PRODUCTS_GROUP" since="19"/>
-		<field name="LAIRD_TECHNOLOGIES" since="19"/>
-		<field name="LESSWIRE" since="19"/>
-		<field name="LG_ELECTRONICS" since="19"/>
-		<field name="LINAK" since="19"/>
-		<field name="LUCENT"/>
-		<field name="LUDUS_HELSINKI" since="19"/>
-		<field name="MACRONIX"/>
-		<field name="MAGNETI_MARELLI" since="19"/>
-		<field name="MANSELLA"/>
-		<field name="MARVELL"/>
-		<field name="MATSUSHITA_ELECTRIC"/>
-		<field name="MC10" since="19"/>
-		<field name="MEDIATEK"/>
-		<field name="MESO_INTERNATIONAL" since="19"/>
-		<field name="META_WATCH" since="19"/>
-		<field name="MEWTEL_TECHNOLOGY"/>
-		<field name="MICOMMAND" since="19"/>
-		<field name="MICROCHIP_TECHNOLOGY" since="19"/>
-		<field name="MICROSOFT"/>
-		<field name="MINDTREE" since="19"/>
-		<field name="MISFIT_WEARABLES" since="19"/>
-		<field name="MITEL_SEMICONDUCTOR"/>
-		<field name="MITSUBISHI_ELECTRIC"/>
-		<field name="MOBILIAN_CORPORATION"/>
-		<field name="MONSTER" since="19"/>
-		<field name="MOTOROLA"/>
-		<field name="MSTAR_SEMICONDUCTOR" since="19"/>
-		<field name="MUZIK" since="19"/>
-		<field name="NEC"/>
-		<field name="NEC_LIGHTING" since="19"/>
-		<field name="NEWLOGIC"/>
-		<field name="NIKE" since="19"/>
-		<field name="NINE_SOLUTIONS" since="19"/>
-		<field name="NOKIA_MOBILE_PHONES"/>
-		<field name="NORDIC_SEMICONDUCTOR"/>
-		<field name="NORWOOD_SYSTEMS"/>
-		<field name="ODM_TECHNOLOGY" since="19"/>
-		<field name="OMEGAWAVE" since="19"/>
-		<field name="ONSET_COMPUTER" since="19"/>
-		<field name="OPEN_INTERFACE"/>
-		<field name="OTL_DYNAMICS" since="19"/>
-		<field name="PANDA_OCEAN" since="19"/>
-		<field name="PARROT"/>
-		<field name="PARTHUS_TECHNOLOGIES"/>
-		<field name="PASSIF_SEMICONDUCTOR" since="19"/>
-		<field name="PETER_SYSTEMTECHNIK" since="19"/>
-		<field name="PHILIPS_SEMICONDUCTORS"/>
-		<field name="PLANTRONICS"/>
-		<field name="POLAR_ELECTRO" since="19"/>
-		<field name="POLAR_ELECTRO_EUROPE" since="19"/>
-		<field name="PROCTER_AND_GAMBLE" since="19"/>
-		<field name="QUALCOMM"/>
-		<field name="QUALCOMM_CONNECTED_EXPERIENCES" since="19"/>
-		<field name="QUALCOMM_INNOVATION_CENTER" since="19"/>
-		<field name="QUALCOMM_LABS" since="19"/>
-		<field name="QUALCOMM_TECHNOLOGIES" since="19"/>
-		<field name="QUINTIC" since="19"/>
-		<field name="QUUPPA" since="19"/>
-		<field name="RALINK_TECHNOLOGY"/>
-		<field name="RDA_MICROELECTRONICS" since="19"/>
-		<field name="REALTEK_SEMICONDUCTOR"/>
-		<field name="RED_M"/>
-		<field name="RENESAS_TECHNOLOGY"/>
-		<field name="RESEARCH_IN_MOTION"/>
-		<field name="RF_MICRO_DEVICES"/>
-		<field name="RIVIERAWAVES"/>
-		<field name="ROHDE_AND_SCHWARZ"/>
-		<field name="RTX_TELECOM"/>
-		<field name="SAMSUNG_ELECTRONICS" since="19"/>
-		<field name="SARIS_CYCLING_GROUP" since="19"/>
-		<field name="SEERS_TECHNOLOGY" since="19"/>
-		<field name="SEIKO_EPSON"/>
-		<field name="SELFLY" since="19"/>
-		<field name="SEMILINK" since="19"/>
-		<field name="SENNHEISER_COMMUNICATIONS" since="19"/>
-		<field name="SHANGHAI_SUPER_SMART_ELECTRONICS" since="19"/>
-		<field name="SHENZHEN_EXCELSECU_DATA_TECHNOLOGY" since="19"/>
-		<field name="SIGNIA_TECHNOLOGIES"/>
-		<field name="SILICON_WAVE"/>
-		<field name="SIRF_TECHNOLOGY"/>
-		<field name="SOCKET_MOBILE"/>
-		<field name="SONY_ERICSSON"/>
-		<field name="SOUND_ID" since="19"/>
-		<field name="SPORTS_TRACKING_TECHNOLOGIES" since="19"/>
-		<field name="SR_MEDIZINELEKTRONIK" since="19"/>
-		<field name="STACCATO_COMMUNICATIONS"/>
-		<field name="STALMART_TECHNOLOGY" since="19"/>
-		<field name="STARKEY_LABORATORIES" since="19"/>
-		<field name="STOLLMAN_E_PLUS_V" since="19"/>
-		<field name="STONESTREET_ONE"/>
-		<field name="ST_MICROELECTRONICS"/>
-		<field name="SUMMIT_DATA_COMMUNICATIONS" since="19"/>
-		<field name="SUUNTO" since="19"/>
-		<field name="SWIRL_NETWORKS" since="19"/>
-		<field name="SYMBOL_TECHNOLOGIES"/>
-		<field name="SYNOPSYS"/>
-		<field name="SYSTEMS_AND_CHIPS"/>
-		<field name="S_POWER_ELECTRONICS" since="19"/>
-		<field name="TAIXINGBANG_TECHNOLOGY" since="19"/>
-		<field name="TENOVIS"/>
-		<field name="TERAX"/>
-		<field name="TEXAS_INSTRUMENTS"/>
-		<field name="THINKOPTICS" since="19"/>
-		<field name="THREECOM"/>
-		<field name="THREE_DIJOY"/>
-		<field name="THREE_DSP"/>
-		<field name="TIMEKEEPING_SYSTEMS" since="19"/>
-		<field name="TIMEX_GROUP_USA" since="19"/>
-		<field name="TOPCORN_POSITIONING_SYSTEMS" since="19"/>
-		<field name="TOSHIBA"/>
-		<field name="TRANSILICA"/>
-		<field name="TRELAB" since="19"/>
-		<field name="TTPCOM"/>
-		<field name="TXTR" since="19"/>
-		<field name="TZERO_TECHNOLOGIES"/>
-		<field name="UNIVERSAL_ELECTRONICS" since="19"/>
-		<field name="VERTU" since="19"/>
-		<field name="VISTEON" since="19"/>
-		<field name="VIZIO"/>
-		<field name="VOYETRA_TURTLE_BEACH" since="19"/>
-		<field name="WAVEPLUS_TECHNOLOGY"/>
-		<field name="WICENTRIC"/>
-		<field name="WIDCOMM"/>
-		<field name="WUXI_VIMICRO" since="19"/>
-		<field name="ZEEVO"/>
-		<field name="ZER01_TV" since="19"/>
-		<field name="ZOMM" since="19"/>
-		<field name="ZSCAN_SOFTWARE" since="19"/>
-	</class>
-	<class name="android/bluetooth/BluetoothClass" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="getDeviceClass()I"/>
-		<method name="getMajorDeviceClass()I"/>
-		<method name="hasService(I)Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/BluetoothClass$Device" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUDIO_VIDEO_CAMCORDER"/>
-		<field name="AUDIO_VIDEO_CAR_AUDIO"/>
-		<field name="AUDIO_VIDEO_HANDSFREE"/>
-		<field name="AUDIO_VIDEO_HEADPHONES"/>
-		<field name="AUDIO_VIDEO_HIFI_AUDIO"/>
-		<field name="AUDIO_VIDEO_LOUDSPEAKER"/>
-		<field name="AUDIO_VIDEO_MICROPHONE"/>
-		<field name="AUDIO_VIDEO_PORTABLE_AUDIO"/>
-		<field name="AUDIO_VIDEO_SET_TOP_BOX"/>
-		<field name="AUDIO_VIDEO_UNCATEGORIZED"/>
-		<field name="AUDIO_VIDEO_VCR"/>
-		<field name="AUDIO_VIDEO_VIDEO_CAMERA"/>
-		<field name="AUDIO_VIDEO_VIDEO_CONFERENCING"/>
-		<field name="AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER"/>
-		<field name="AUDIO_VIDEO_VIDEO_GAMING_TOY"/>
-		<field name="AUDIO_VIDEO_VIDEO_MONITOR"/>
-		<field name="AUDIO_VIDEO_WEARABLE_HEADSET"/>
-		<field name="COMPUTER_DESKTOP"/>
-		<field name="COMPUTER_HANDHELD_PC_PDA"/>
-		<field name="COMPUTER_LAPTOP"/>
-		<field name="COMPUTER_PALM_SIZE_PC_PDA"/>
-		<field name="COMPUTER_SERVER"/>
-		<field name="COMPUTER_UNCATEGORIZED"/>
-		<field name="COMPUTER_WEARABLE"/>
-		<field name="HEALTH_BLOOD_PRESSURE"/>
-		<field name="HEALTH_DATA_DISPLAY"/>
-		<field name="HEALTH_GLUCOSE"/>
-		<field name="HEALTH_PULSE_OXIMETER"/>
-		<field name="HEALTH_PULSE_RATE"/>
-		<field name="HEALTH_THERMOMETER"/>
-		<field name="HEALTH_UNCATEGORIZED"/>
-		<field name="HEALTH_WEIGHING"/>
-		<field name="PHONE_CELLULAR"/>
-		<field name="PHONE_CORDLESS"/>
-		<field name="PHONE_ISDN"/>
-		<field name="PHONE_MODEM_OR_GATEWAY"/>
-		<field name="PHONE_SMART"/>
-		<field name="PHONE_UNCATEGORIZED"/>
-		<field name="TOY_CONTROLLER"/>
-		<field name="TOY_DOLL_ACTION_FIGURE"/>
-		<field name="TOY_GAME"/>
-		<field name="TOY_ROBOT"/>
-		<field name="TOY_UNCATEGORIZED"/>
-		<field name="TOY_VEHICLE"/>
-		<field name="WEARABLE_GLASSES"/>
-		<field name="WEARABLE_HELMET"/>
-		<field name="WEARABLE_JACKET"/>
-		<field name="WEARABLE_PAGER"/>
-		<field name="WEARABLE_UNCATEGORIZED"/>
-		<field name="WEARABLE_WRIST_WATCH"/>
-	</class>
-	<class name="android/bluetooth/BluetoothClass$Device$Major" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUDIO_VIDEO"/>
-		<field name="COMPUTER"/>
-		<field name="HEALTH"/>
-		<field name="IMAGING"/>
-		<field name="MISC"/>
-		<field name="NETWORKING"/>
-		<field name="PERIPHERAL"/>
-		<field name="PHONE"/>
-		<field name="TOY"/>
-		<field name="UNCATEGORIZED"/>
-		<field name="WEARABLE"/>
-	</class>
-	<class name="android/bluetooth/BluetoothClass$Service" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUDIO"/>
-		<field name="CAPTURE"/>
-		<field name="INFORMATION"/>
-		<field name="LIMITED_DISCOVERABILITY"/>
-		<field name="NETWORKING"/>
-		<field name="OBJECT_TRANSFER"/>
-		<field name="POSITIONING"/>
-		<field name="RENDER"/>
-		<field name="TELEPHONY"/>
-	</class>
-	<class name="android/bluetooth/BluetoothDevice" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;" since="18"/>
-		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;I)Landroid/bluetooth/BluetoothGatt;" since="23"/>
-		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;II)Landroid/bluetooth/BluetoothGatt;" since="26"/>
-		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;IILandroid/os/Handler;)Landroid/bluetooth/BluetoothGatt;" since="26"/>
-		<method name="createBond()Z" since="19"/>
-		<method name="createInsecureRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;" since="10"/>
-		<method name="createRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;"/>
-		<method name="fetchUuidsWithSdp()Z" since="15"/>
-		<method name="getAddress()Ljava/lang/String;"/>
-		<method name="getBluetoothClass()Landroid/bluetooth/BluetoothClass;"/>
-		<method name="getBondState()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getType()I" since="18"/>
-		<method name="getUuids()[Landroid/os/ParcelUuid;" since="15"/>
-		<method name="setPairingConfirmation(Z)Z" since="19"/>
-		<method name="setPin([B)Z" since="19"/>
-		<field name="ACTION_ACL_CONNECTED"/>
-		<field name="ACTION_ACL_DISCONNECTED"/>
-		<field name="ACTION_ACL_DISCONNECT_REQUESTED"/>
-		<field name="ACTION_BOND_STATE_CHANGED"/>
-		<field name="ACTION_CLASS_CHANGED"/>
-		<field name="ACTION_FOUND"/>
-		<field name="ACTION_NAME_CHANGED"/>
-		<field name="ACTION_PAIRING_REQUEST" since="19"/>
-		<field name="ACTION_UUID" since="15"/>
-		<field name="BOND_BONDED"/>
-		<field name="BOND_BONDING"/>
-		<field name="BOND_NONE"/>
-		<field name="CREATOR"/>
-		<field name="DEVICE_TYPE_CLASSIC" since="18"/>
-		<field name="DEVICE_TYPE_DUAL" since="18"/>
-		<field name="DEVICE_TYPE_LE" since="18"/>
-		<field name="DEVICE_TYPE_UNKNOWN" since="18"/>
-		<field name="ERROR"/>
-		<field name="EXTRA_BOND_STATE"/>
-		<field name="EXTRA_CLASS"/>
-		<field name="EXTRA_DEVICE"/>
-		<field name="EXTRA_NAME"/>
-		<field name="EXTRA_PAIRING_KEY" since="19"/>
-		<field name="EXTRA_PAIRING_VARIANT" since="19"/>
-		<field name="EXTRA_PREVIOUS_BOND_STATE"/>
-		<field name="EXTRA_RSSI"/>
-		<field name="EXTRA_UUID" since="15"/>
-		<field name="PAIRING_VARIANT_PASSKEY_CONFIRMATION" since="19"/>
-		<field name="PAIRING_VARIANT_PIN" since="19"/>
-		<field name="PHY_LE_1M" since="26"/>
-		<field name="PHY_LE_1M_MASK" since="26"/>
-		<field name="PHY_LE_2M" since="26"/>
-		<field name="PHY_LE_2M_MASK" since="26"/>
-		<field name="PHY_LE_CODED" since="26"/>
-		<field name="PHY_LE_CODED_MASK" since="26"/>
-		<field name="PHY_OPTION_NO_PREFERRED" since="26"/>
-		<field name="PHY_OPTION_S2" since="26"/>
-		<field name="PHY_OPTION_S8" since="26"/>
-		<field name="TRANSPORT_AUTO" since="23"/>
-		<field name="TRANSPORT_BREDR" since="23"/>
-		<field name="TRANSPORT_LE" since="23"/>
-	</class>
-	<class name="android/bluetooth/BluetoothGatt" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/bluetooth/BluetoothProfile"/>
-		<method name="&lt;init>()V"/>
-		<method name="abortReliableWrite()V" since="19"/>
-		<method name="abortReliableWrite(Landroid/bluetooth/BluetoothDevice;)V" deprecated="19"/>
-		<method name="beginReliableWrite()Z"/>
-		<method name="close()V"/>
-		<method name="connect()Z"/>
-		<method name="disconnect()V"/>
-		<method name="discoverServices()Z"/>
-		<method name="executeReliableWrite()Z"/>
-		<method name="getDevice()Landroid/bluetooth/BluetoothDevice;"/>
-		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;"/>
-		<method name="getServices()Ljava/util/List;"/>
-		<method name="readCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z"/>
-		<method name="readDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z"/>
-		<method name="readPhy()V" since="26"/>
-		<method name="readRemoteRssi()Z"/>
-		<method name="requestConnectionPriority(I)Z" since="21"/>
-		<method name="requestMtu(I)Z" since="21"/>
-		<method name="setCharacteristicNotification(Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z"/>
-		<method name="setPreferredPhy(III)V" since="26"/>
-		<method name="writeCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z"/>
-		<method name="writeDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z"/>
-		<field name="CONNECTION_PRIORITY_BALANCED" since="21"/>
-		<field name="CONNECTION_PRIORITY_HIGH" since="21"/>
-		<field name="CONNECTION_PRIORITY_LOW_POWER" since="21"/>
-		<field name="GATT_CONNECTION_CONGESTED" since="21"/>
-		<field name="GATT_FAILURE"/>
-		<field name="GATT_INSUFFICIENT_AUTHENTICATION"/>
-		<field name="GATT_INSUFFICIENT_ENCRYPTION"/>
-		<field name="GATT_INVALID_ATTRIBUTE_LENGTH"/>
-		<field name="GATT_INVALID_OFFSET"/>
-		<field name="GATT_READ_NOT_PERMITTED"/>
-		<field name="GATT_REQUEST_NOT_SUPPORTED"/>
-		<field name="GATT_SUCCESS"/>
-		<field name="GATT_WRITE_NOT_PERMITTED"/>
-	</class>
-	<class name="android/bluetooth/BluetoothGattCallback" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCharacteristicChanged(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;)V"/>
-		<method name="onCharacteristicRead(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V"/>
-		<method name="onCharacteristicWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V"/>
-		<method name="onConnectionStateChange(Landroid/bluetooth/BluetoothGatt;II)V"/>
-		<method name="onDescriptorRead(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattDescriptor;I)V"/>
-		<method name="onDescriptorWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattDescriptor;I)V"/>
-		<method name="onMtuChanged(Landroid/bluetooth/BluetoothGatt;II)V" since="21"/>
-		<method name="onPhyRead(Landroid/bluetooth/BluetoothGatt;III)V" since="26"/>
-		<method name="onPhyUpdate(Landroid/bluetooth/BluetoothGatt;III)V" since="26"/>
-		<method name="onReadRemoteRssi(Landroid/bluetooth/BluetoothGatt;II)V"/>
-		<method name="onReliableWriteCompleted(Landroid/bluetooth/BluetoothGatt;I)V"/>
-		<method name="onServicesDiscovered(Landroid/bluetooth/BluetoothGatt;I)V"/>
-	</class>
-	<class name="android/bluetooth/BluetoothGattCharacteristic" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="24"/>
-		<method name="&lt;init>(Ljava/util/UUID;II)V"/>
-		<method name="addDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z"/>
-		<method name="getDescriptor(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattDescriptor;"/>
-		<method name="getDescriptors()Ljava/util/List;"/>
-		<method name="getFloatValue(II)Ljava/lang/Float;"/>
-		<method name="getInstanceId()I"/>
-		<method name="getIntValue(II)Ljava/lang/Integer;"/>
-		<method name="getPermissions()I"/>
-		<method name="getProperties()I"/>
-		<method name="getService()Landroid/bluetooth/BluetoothGattService;"/>
-		<method name="getStringValue(I)Ljava/lang/String;"/>
-		<method name="getUuid()Ljava/util/UUID;"/>
-		<method name="getValue()[B"/>
-		<method name="getWriteType()I"/>
-		<method name="setValue(III)Z"/>
-		<method name="setValue(IIII)Z"/>
-		<method name="setValue(Ljava/lang/String;)Z"/>
-		<method name="setValue([B)Z"/>
-		<method name="setWriteType(I)V"/>
-		<field name="CREATOR" since="24"/>
-		<field name="FORMAT_FLOAT"/>
-		<field name="FORMAT_SFLOAT"/>
-		<field name="FORMAT_SINT16"/>
-		<field name="FORMAT_SINT32"/>
-		<field name="FORMAT_SINT8"/>
-		<field name="FORMAT_UINT16"/>
-		<field name="FORMAT_UINT32"/>
-		<field name="FORMAT_UINT8"/>
-		<field name="PERMISSION_READ"/>
-		<field name="PERMISSION_READ_ENCRYPTED"/>
-		<field name="PERMISSION_READ_ENCRYPTED_MITM"/>
-		<field name="PERMISSION_WRITE"/>
-		<field name="PERMISSION_WRITE_ENCRYPTED"/>
-		<field name="PERMISSION_WRITE_ENCRYPTED_MITM"/>
-		<field name="PERMISSION_WRITE_SIGNED"/>
-		<field name="PERMISSION_WRITE_SIGNED_MITM"/>
-		<field name="PROPERTY_BROADCAST"/>
-		<field name="PROPERTY_EXTENDED_PROPS"/>
-		<field name="PROPERTY_INDICATE"/>
-		<field name="PROPERTY_NOTIFY"/>
-		<field name="PROPERTY_READ"/>
-		<field name="PROPERTY_SIGNED_WRITE"/>
-		<field name="PROPERTY_WRITE"/>
-		<field name="PROPERTY_WRITE_NO_RESPONSE"/>
-		<field name="WRITE_TYPE_DEFAULT"/>
-		<field name="WRITE_TYPE_NO_RESPONSE"/>
-		<field name="WRITE_TYPE_SIGNED"/>
-		<field name="mDescriptors"/>
-	</class>
-	<class name="android/bluetooth/BluetoothGattDescriptor" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="24"/>
-		<method name="&lt;init>(Ljava/util/UUID;I)V"/>
-		<method name="getCharacteristic()Landroid/bluetooth/BluetoothGattCharacteristic;"/>
-		<method name="getPermissions()I"/>
-		<method name="getUuid()Ljava/util/UUID;"/>
-		<method name="getValue()[B"/>
-		<method name="setValue([B)Z"/>
-		<field name="CREATOR" since="24"/>
-		<field name="DISABLE_NOTIFICATION_VALUE"/>
-		<field name="ENABLE_INDICATION_VALUE"/>
-		<field name="ENABLE_NOTIFICATION_VALUE"/>
-		<field name="PERMISSION_READ"/>
-		<field name="PERMISSION_READ_ENCRYPTED"/>
-		<field name="PERMISSION_READ_ENCRYPTED_MITM"/>
-		<field name="PERMISSION_WRITE"/>
-		<field name="PERMISSION_WRITE_ENCRYPTED"/>
-		<field name="PERMISSION_WRITE_ENCRYPTED_MITM"/>
-		<field name="PERMISSION_WRITE_SIGNED"/>
-		<field name="PERMISSION_WRITE_SIGNED_MITM"/>
-	</class>
-	<class name="android/bluetooth/BluetoothGattServer" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/bluetooth/BluetoothProfile"/>
-		<method name="&lt;init>()V"/>
-		<method name="addService(Landroid/bluetooth/BluetoothGattService;)Z"/>
-		<method name="cancelConnection(Landroid/bluetooth/BluetoothDevice;)V"/>
-		<method name="clearServices()V"/>
-		<method name="close()V"/>
-		<method name="connect(Landroid/bluetooth/BluetoothDevice;Z)Z"/>
-		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;"/>
-		<method name="getServices()Ljava/util/List;"/>
-		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z"/>
-		<method name="readPhy(Landroid/bluetooth/BluetoothDevice;)V" since="26"/>
-		<method name="removeService(Landroid/bluetooth/BluetoothGattService;)Z"/>
-		<method name="sendResponse(Landroid/bluetooth/BluetoothDevice;III[B)Z"/>
-		<method name="setPreferredPhy(Landroid/bluetooth/BluetoothDevice;III)V" since="26"/>
-	</class>
-	<class name="android/bluetooth/BluetoothGattServerCallback" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCharacteristicReadRequest(Landroid/bluetooth/BluetoothDevice;IILandroid/bluetooth/BluetoothGattCharacteristic;)V"/>
-		<method name="onCharacteristicWriteRequest(Landroid/bluetooth/BluetoothDevice;ILandroid/bluetooth/BluetoothGattCharacteristic;ZZI[B)V"/>
-		<method name="onConnectionStateChange(Landroid/bluetooth/BluetoothDevice;II)V"/>
-		<method name="onDescriptorReadRequest(Landroid/bluetooth/BluetoothDevice;IILandroid/bluetooth/BluetoothGattDescriptor;)V"/>
-		<method name="onDescriptorWriteRequest(Landroid/bluetooth/BluetoothDevice;ILandroid/bluetooth/BluetoothGattDescriptor;ZZI[B)V"/>
-		<method name="onExecuteWrite(Landroid/bluetooth/BluetoothDevice;IZ)V"/>
-		<method name="onMtuChanged(Landroid/bluetooth/BluetoothDevice;I)V" since="22"/>
-		<method name="onNotificationSent(Landroid/bluetooth/BluetoothDevice;I)V" since="21"/>
-		<method name="onPhyRead(Landroid/bluetooth/BluetoothDevice;III)V" since="26"/>
-		<method name="onPhyUpdate(Landroid/bluetooth/BluetoothDevice;III)V" since="26"/>
-		<method name="onServiceAdded(ILandroid/bluetooth/BluetoothGattService;)V"/>
-	</class>
-	<class name="android/bluetooth/BluetoothGattService" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="24"/>
-		<method name="&lt;init>(Ljava/util/UUID;I)V"/>
-		<method name="addCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z"/>
-		<method name="addService(Landroid/bluetooth/BluetoothGattService;)Z"/>
-		<method name="getCharacteristic(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattCharacteristic;"/>
-		<method name="getCharacteristics()Ljava/util/List;"/>
-		<method name="getIncludedServices()Ljava/util/List;"/>
-		<method name="getInstanceId()I"/>
-		<method name="getType()I"/>
-		<method name="getUuid()Ljava/util/UUID;"/>
-		<field name="CREATOR" since="24"/>
-		<field name="SERVICE_TYPE_PRIMARY"/>
-		<field name="SERVICE_TYPE_SECONDARY"/>
-		<field name="mCharacteristics"/>
-		<field name="mIncludedServices"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHeadset" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/bluetooth/BluetoothProfile"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
-		<method name="isAudioConnected(Landroid/bluetooth/BluetoothDevice;)Z"/>
-		<method name="sendVendorSpecificResultCode(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;Ljava/lang/String;)Z" since="19"/>
-		<method name="startVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z"/>
-		<method name="stopVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z"/>
-		<field name="ACTION_AUDIO_STATE_CHANGED"/>
-		<field name="ACTION_CONNECTION_STATE_CHANGED"/>
-		<field name="ACTION_VENDOR_SPECIFIC_HEADSET_EVENT"/>
-		<field name="AT_CMD_TYPE_ACTION"/>
-		<field name="AT_CMD_TYPE_BASIC"/>
-		<field name="AT_CMD_TYPE_READ"/>
-		<field name="AT_CMD_TYPE_SET"/>
-		<field name="AT_CMD_TYPE_TEST"/>
-		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS"/>
-		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD"/>
-		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE"/>
-		<field name="STATE_AUDIO_CONNECTED"/>
-		<field name="STATE_AUDIO_CONNECTING"/>
-		<field name="STATE_AUDIO_DISCONNECTED"/>
-		<field name="VENDOR_RESULT_CODE_COMMAND_ANDROID" since="19"/>
-		<field name="VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHealth" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/bluetooth/BluetoothProfile"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
-		<method name="connectChannelToSource(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z"/>
-		<method name="disconnectChannel(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;I)Z"/>
-		<method name="getMainChannelFd(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="registerSinkAppConfiguration(Ljava/lang/String;ILandroid/bluetooth/BluetoothHealthCallback;)Z"/>
-		<method name="unregisterAppConfiguration(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z"/>
-		<field name="APP_CONFIG_REGISTRATION_FAILURE"/>
-		<field name="APP_CONFIG_REGISTRATION_SUCCESS"/>
-		<field name="APP_CONFIG_UNREGISTRATION_FAILURE"/>
-		<field name="APP_CONFIG_UNREGISTRATION_SUCCESS"/>
-		<field name="CHANNEL_TYPE_RELIABLE"/>
-		<field name="CHANNEL_TYPE_STREAMING"/>
-		<field name="SINK_ROLE"/>
-		<field name="SOURCE_ROLE"/>
-		<field name="STATE_CHANNEL_CONNECTED"/>
-		<field name="STATE_CHANNEL_CONNECTING"/>
-		<field name="STATE_CHANNEL_DISCONNECTED"/>
-		<field name="STATE_CHANNEL_DISCONNECTING"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHealthAppConfiguration" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
-		<method name="getDataType()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getRole()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHealthCallback" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onHealthAppConfigurationStatusChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;I)V"/>
-		<method name="onHealthChannelStateChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;Landroid/bluetooth/BluetoothDevice;IILandroid/os/ParcelFileDescriptor;I)V"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHidDevice" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/bluetooth/BluetoothProfile"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;)V" since="29"/>
-		<method name="connect(Landroid/bluetooth/BluetoothDevice;)Z"/>
-		<method name="disconnect(Landroid/bluetooth/BluetoothDevice;)Z"/>
-		<method name="registerApp(Landroid/bluetooth/BluetoothHidDeviceAppSdpSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Ljava/util/concurrent/Executor;Landroid/bluetooth/BluetoothHidDevice$Callback;)Z"/>
-		<method name="replyReport(Landroid/bluetooth/BluetoothDevice;BB[B)Z"/>
-		<method name="reportError(Landroid/bluetooth/BluetoothDevice;B)Z"/>
-		<method name="sendReport(Landroid/bluetooth/BluetoothDevice;I[B)Z"/>
-		<method name="unregisterApp()Z"/>
-		<field name="ACTION_CONNECTION_STATE_CHANGED"/>
-		<field name="ERROR_RSP_INVALID_PARAM"/>
-		<field name="ERROR_RSP_INVALID_RPT_ID"/>
-		<field name="ERROR_RSP_NOT_READY"/>
-		<field name="ERROR_RSP_SUCCESS"/>
-		<field name="ERROR_RSP_UNKNOWN"/>
-		<field name="ERROR_RSP_UNSUPPORTED_REQ"/>
-		<field name="PROTOCOL_BOOT_MODE"/>
-		<field name="PROTOCOL_REPORT_MODE"/>
-		<field name="REPORT_TYPE_FEATURE"/>
-		<field name="REPORT_TYPE_INPUT"/>
-		<field name="REPORT_TYPE_OUTPUT"/>
-		<field name="SUBCLASS1_COMBO"/>
-		<field name="SUBCLASS1_KEYBOARD"/>
-		<field name="SUBCLASS1_MOUSE"/>
-		<field name="SUBCLASS1_NONE"/>
-		<field name="SUBCLASS2_CARD_READER"/>
-		<field name="SUBCLASS2_DIGITIZER_TABLET"/>
-		<field name="SUBCLASS2_GAMEPAD"/>
-		<field name="SUBCLASS2_JOYSTICK"/>
-		<field name="SUBCLASS2_REMOTE_CONTROL"/>
-		<field name="SUBCLASS2_SENSING_DEVICE"/>
-		<field name="SUBCLASS2_UNCATEGORIZED"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHidDevice$Callback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAppStatusChanged(Landroid/bluetooth/BluetoothDevice;Z)V"/>
-		<method name="onConnectionStateChanged(Landroid/bluetooth/BluetoothDevice;I)V"/>
-		<method name="onGetReport(Landroid/bluetooth/BluetoothDevice;BBI)V"/>
-		<method name="onInterruptData(Landroid/bluetooth/BluetoothDevice;B[B)V"/>
-		<method name="onSetProtocol(Landroid/bluetooth/BluetoothDevice;B)V"/>
-		<method name="onSetReport(Landroid/bluetooth/BluetoothDevice;BB[B)V"/>
-		<method name="onVirtualCableUnplug(Landroid/bluetooth/BluetoothDevice;)V"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHidDeviceAppQosSettings" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="getDelayVariation()I"/>
-		<method name="getLatency()I"/>
-		<method name="getPeakBandwidth()I"/>
-		<method name="getServiceType()I"/>
-		<method name="getTokenBucketSize()I"/>
-		<method name="getTokenRate()I"/>
-		<field name="CREATOR"/>
-		<field name="MAX"/>
-		<field name="SERVICE_BEST_EFFORT"/>
-		<field name="SERVICE_GUARANTEED"/>
-		<field name="SERVICE_NO_TRAFFIC"/>
-	</class>
-	<class name="android/bluetooth/BluetoothHidDeviceAppSdpSettings" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;B[B)V"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getDescriptors()[B"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getProvider()Ljava/lang/String;"/>
-		<method name="getSubclass()B"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/BluetoothManager" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="getAdapter()Landroid/bluetooth/BluetoothAdapter;"/>
-		<method name="getConnectedDevices(I)Ljava/util/List;"/>
-		<method name="getConnectionState(Landroid/bluetooth/BluetoothDevice;I)I"/>
-		<method name="getDevicesMatchingConnectionStates(I[I)Ljava/util/List;"/>
-		<method name="openGattServer(Landroid/content/Context;Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;"/>
-	</class>
-	<class name="android/bluetooth/BluetoothProfile" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="getConnectedDevices()Ljava/util/List;"/>
-		<method name="getConnectionState(Landroid/bluetooth/BluetoothDevice;)I"/>
-		<method name="getDevicesMatchingConnectionStates([I)Ljava/util/List;"/>
-		<field name="A2DP"/>
-		<field name="EXTRA_PREVIOUS_STATE"/>
-		<field name="EXTRA_STATE"/>
-		<field name="GATT" since="18"/>
-		<field name="GATT_SERVER" since="18"/>
-		<field name="HEADSET"/>
-		<field name="HEALTH" since="14"/>
-		<field name="HID_DEVICE" since="28"/>
-		<field name="SAP" since="23"/>
-		<field name="STATE_CONNECTED"/>
-		<field name="STATE_CONNECTING"/>
-		<field name="STATE_DISCONNECTED"/>
-		<field name="STATE_DISCONNECTING"/>
-	</class>
-	<class name="android/bluetooth/BluetoothProfile$ServiceListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onServiceConnected(ILandroid/bluetooth/BluetoothProfile;)V"/>
-		<method name="onServiceDisconnected(I)V"/>
-	</class>
-	<class name="android/bluetooth/BluetoothServerSocket" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IZZI)V" since="29"/>
-		<method name="accept()Landroid/bluetooth/BluetoothSocket;"/>
-		<method name="accept(I)Landroid/bluetooth/BluetoothSocket;"/>
-	</class>
-	<class name="android/bluetooth/BluetoothSocket" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/bluetooth/BluetoothSocket;)V" since="29"/>
-		<method name="connect()V"/>
-		<method name="getConnectionType()I" since="23"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getMaxReceivePacketSize()I" since="23"/>
-		<method name="getMaxTransmitPacketSize()I" since="23"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="getRemoteDevice()Landroid/bluetooth/BluetoothDevice;"/>
-		<method name="isConnected()Z" since="14"/>
-		<field name="TYPE_L2CAP" since="23"/>
-		<field name="TYPE_RFCOMM" since="23"/>
-		<field name="TYPE_SCO" since="23"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertiseCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onStartFailure(I)V"/>
-		<method name="onStartSuccess(Landroid/bluetooth/le/AdvertiseSettings;)V"/>
-		<field name="ADVERTISE_FAILED_ALREADY_STARTED"/>
-		<field name="ADVERTISE_FAILED_DATA_TOO_LARGE"/>
-		<field name="ADVERTISE_FAILED_FEATURE_UNSUPPORTED"/>
-		<field name="ADVERTISE_FAILED_INTERNAL_ERROR"/>
-		<field name="ADVERTISE_FAILED_TOO_MANY_ADVERTISERS"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertiseData" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/List;Landroid/util/SparseArray;Ljava/util/Map;ZZ)V" since="29"/>
-		<method name="getIncludeDeviceName()Z"/>
-		<method name="getIncludeTxPowerLevel()Z"/>
-		<method name="getManufacturerSpecificData()Landroid/util/SparseArray;"/>
-		<method name="getServiceData()Ljava/util/Map;"/>
-		<method name="getServiceUuids()Ljava/util/List;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertiseData$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addManufacturerData(I[B)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
-		<method name="addServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
-		<method name="addServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
-		<method name="build()Landroid/bluetooth/le/AdvertiseData;"/>
-		<method name="setIncludeDeviceName(Z)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
-		<method name="setIncludeTxPowerLevel(Z)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertiseSettings" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getMode()I"/>
-		<method name="getTimeout()I"/>
-		<method name="getTxPowerLevel()I"/>
-		<method name="isConnectable()Z"/>
-		<field name="ADVERTISE_MODE_BALANCED"/>
-		<field name="ADVERTISE_MODE_LOW_LATENCY"/>
-		<field name="ADVERTISE_MODE_LOW_POWER"/>
-		<field name="ADVERTISE_TX_POWER_HIGH"/>
-		<field name="ADVERTISE_TX_POWER_LOW"/>
-		<field name="ADVERTISE_TX_POWER_MEDIUM"/>
-		<field name="ADVERTISE_TX_POWER_ULTRA_LOW"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertiseSettings$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/bluetooth/le/AdvertiseSettings;"/>
-		<method name="setAdvertiseMode(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
-		<method name="setConnectable(Z)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
-		<method name="setTimeout(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
-		<method name="setTxPowerLevel(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertisingSet" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="enableAdvertising(ZII)V"/>
-		<method name="setAdvertisingData(Landroid/bluetooth/le/AdvertiseData;)V"/>
-		<method name="setAdvertisingParameters(Landroid/bluetooth/le/AdvertisingSetParameters;)V"/>
-		<method name="setPeriodicAdvertisingData(Landroid/bluetooth/le/AdvertiseData;)V"/>
-		<method name="setPeriodicAdvertisingEnabled(Z)V"/>
-		<method name="setPeriodicAdvertisingParameters(Landroid/bluetooth/le/PeriodicAdvertisingParameters;)V"/>
-		<method name="setScanResponseData(Landroid/bluetooth/le/AdvertiseData;)V"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertisingSetCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAdvertisingDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
-		<method name="onAdvertisingEnabled(Landroid/bluetooth/le/AdvertisingSet;ZI)V"/>
-		<method name="onAdvertisingParametersUpdated(Landroid/bluetooth/le/AdvertisingSet;II)V"/>
-		<method name="onAdvertisingSetStarted(Landroid/bluetooth/le/AdvertisingSet;II)V"/>
-		<method name="onAdvertisingSetStopped(Landroid/bluetooth/le/AdvertisingSet;)V"/>
-		<method name="onPeriodicAdvertisingDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
-		<method name="onPeriodicAdvertisingEnabled(Landroid/bluetooth/le/AdvertisingSet;ZI)V"/>
-		<method name="onPeriodicAdvertisingParametersUpdated(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
-		<method name="onScanResponseDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
-		<field name="ADVERTISE_FAILED_ALREADY_STARTED"/>
-		<field name="ADVERTISE_FAILED_DATA_TOO_LARGE"/>
-		<field name="ADVERTISE_FAILED_FEATURE_UNSUPPORTED"/>
-		<field name="ADVERTISE_FAILED_INTERNAL_ERROR"/>
-		<field name="ADVERTISE_FAILED_TOO_MANY_ADVERTISERS"/>
-		<field name="ADVERTISE_SUCCESS"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertisingSetParameters" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getInterval()I"/>
-		<method name="getPrimaryPhy()I"/>
-		<method name="getSecondaryPhy()I"/>
-		<method name="getTxPowerLevel()I"/>
-		<method name="includeTxPower()Z"/>
-		<method name="isAnonymous()Z"/>
-		<method name="isConnectable()Z"/>
-		<method name="isLegacy()Z"/>
-		<method name="isScannable()Z"/>
-		<field name="CREATOR"/>
-		<field name="INTERVAL_HIGH"/>
-		<field name="INTERVAL_LOW"/>
-		<field name="INTERVAL_MAX"/>
-		<field name="INTERVAL_MEDIUM"/>
-		<field name="INTERVAL_MIN"/>
-		<field name="TX_POWER_HIGH"/>
-		<field name="TX_POWER_LOW"/>
-		<field name="TX_POWER_MAX"/>
-		<field name="TX_POWER_MEDIUM"/>
-		<field name="TX_POWER_MIN"/>
-		<field name="TX_POWER_ULTRA_LOW"/>
-	</class>
-	<class name="android/bluetooth/le/AdvertisingSetParameters$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/bluetooth/le/AdvertisingSetParameters;"/>
-		<method name="setAnonymous(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setConnectable(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setIncludeTxPower(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setInterval(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setLegacyMode(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setPrimaryPhy(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setScannable(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setSecondaryPhy(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-		<method name="setTxPowerLevel(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
-	</class>
-	<class name="android/bluetooth/le/BluetoothLeAdvertiser" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V"/>
-		<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V"/>
-		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/AdvertisingSetCallback;)V" since="26"/>
-		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/AdvertisingSetCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertisingSetCallback;)V" since="26"/>
-		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertisingSetCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="stopAdvertising(Landroid/bluetooth/le/AdvertiseCallback;)V"/>
-		<method name="stopAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetCallback;)V" since="26"/>
-	</class>
-	<class name="android/bluetooth/le/BluetoothLeScanner" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="flushPendingScanResults(Landroid/bluetooth/le/ScanCallback;)V"/>
-		<method name="startScan(Landroid/bluetooth/le/ScanCallback;)V"/>
-		<method name="startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/app/PendingIntent;)I" since="26"/>
-		<method name="startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/bluetooth/le/ScanCallback;)V"/>
-		<method name="stopScan(Landroid/app/PendingIntent;)V" since="26"/>
-		<method name="stopScan(Landroid/bluetooth/le/ScanCallback;)V"/>
-		<field name="EXTRA_CALLBACK_TYPE" since="26"/>
-		<field name="EXTRA_ERROR_CODE" since="26"/>
-		<field name="EXTRA_LIST_SCAN_RESULT" since="26"/>
-	</class>
-	<class name="android/bluetooth/le/PeriodicAdvertisingParameters" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getIncludeTxPower()Z"/>
-		<method name="getInterval()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/le/PeriodicAdvertisingParameters$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/bluetooth/le/PeriodicAdvertisingParameters;"/>
-		<method name="setIncludeTxPower(Z)Landroid/bluetooth/le/PeriodicAdvertisingParameters$Builder;"/>
-		<method name="setInterval(I)Landroid/bluetooth/le/PeriodicAdvertisingParameters$Builder;"/>
-	</class>
-	<class name="android/bluetooth/le/ScanCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onBatchScanResults(Ljava/util/List;)V"/>
-		<method name="onScanFailed(I)V"/>
-		<method name="onScanResult(ILandroid/bluetooth/le/ScanResult;)V"/>
-		<field name="SCAN_FAILED_ALREADY_STARTED"/>
-		<field name="SCAN_FAILED_APPLICATION_REGISTRATION_FAILED"/>
-		<field name="SCAN_FAILED_FEATURE_UNSUPPORTED"/>
-		<field name="SCAN_FAILED_INTERNAL_ERROR"/>
-	</class>
-	<class name="android/bluetooth/le/ScanFilter" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;[B[BI[B[B)V" since="29"/>
-		<method name="getDeviceAddress()Ljava/lang/String;"/>
-		<method name="getDeviceName()Ljava/lang/String;"/>
-		<method name="getManufacturerData()[B"/>
-		<method name="getManufacturerDataMask()[B"/>
-		<method name="getManufacturerId()I"/>
-		<method name="getServiceData()[B"/>
-		<method name="getServiceDataMask()[B"/>
-		<method name="getServiceDataUuid()Landroid/os/ParcelUuid;"/>
-		<method name="getServiceUuid()Landroid/os/ParcelUuid;"/>
-		<method name="getServiceUuidMask()Landroid/os/ParcelUuid;"/>
-		<method name="matches(Landroid/bluetooth/le/ScanResult;)Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/le/ScanFilter$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/bluetooth/le/ScanFilter;"/>
-		<method name="setDeviceAddress(Ljava/lang/String;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-		<method name="setDeviceName(Ljava/lang/String;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-		<method name="setManufacturerData(I[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-		<method name="setManufacturerData(I[B[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-		<method name="setServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-		<method name="setServiceData(Landroid/os/ParcelUuid;[B[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-		<method name="setServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-		<method name="setServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
-	</class>
-	<class name="android/bluetooth/le/ScanRecord" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/List;Landroid/util/SparseArray;Ljava/util/Map;IILjava/lang/String;[B)V" since="29"/>
-		<method name="getAdvertiseFlags()I"/>
-		<method name="getBytes()[B"/>
-		<method name="getDeviceName()Ljava/lang/String;"/>
-		<method name="getManufacturerSpecificData()Landroid/util/SparseArray;"/>
-		<method name="getManufacturerSpecificData(I)[B"/>
-		<method name="getServiceData()Ljava/util/Map;"/>
-		<method name="getServiceData(Landroid/os/ParcelUuid;)[B"/>
-		<method name="getServiceUuids()Ljava/util/List;"/>
-		<method name="getTxPowerLevel()I"/>
-	</class>
-	<class name="android/bluetooth/le/ScanResult" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/bluetooth/BluetoothDevice;IIIIIIILandroid/bluetooth/le/ScanRecord;J)V" since="26"/>
-		<method name="&lt;init>(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/le/ScanRecord;IJ)V" deprecated="26"/>
-		<method name="getAdvertisingSid()I" since="26"/>
-		<method name="getDataStatus()I" since="26"/>
-		<method name="getDevice()Landroid/bluetooth/BluetoothDevice;"/>
-		<method name="getPeriodicAdvertisingInterval()I" since="26"/>
-		<method name="getPrimaryPhy()I" since="26"/>
-		<method name="getRssi()I"/>
-		<method name="getScanRecord()Landroid/bluetooth/le/ScanRecord;"/>
-		<method name="getSecondaryPhy()I" since="26"/>
-		<method name="getTimestampNanos()J"/>
-		<method name="getTxPower()I" since="26"/>
-		<method name="isConnectable()Z" since="26"/>
-		<method name="isLegacy()Z" since="26"/>
-		<field name="CREATOR"/>
-		<field name="DATA_COMPLETE" since="26"/>
-		<field name="DATA_TRUNCATED" since="26"/>
-		<field name="PERIODIC_INTERVAL_NOT_PRESENT" since="26"/>
-		<field name="PHY_UNUSED" since="26"/>
-		<field name="SID_NOT_PRESENT" since="26"/>
-		<field name="TX_POWER_NOT_PRESENT" since="26"/>
-	</class>
-	<class name="android/bluetooth/le/ScanSettings" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getCallbackType()I"/>
-		<method name="getLegacy()Z" since="26"/>
-		<method name="getPhy()I" since="26"/>
-		<method name="getReportDelayMillis()J"/>
-		<method name="getScanMode()I"/>
-		<method name="getScanResultType()I"/>
-		<field name="CALLBACK_TYPE_ALL_MATCHES"/>
-		<field name="CALLBACK_TYPE_FIRST_MATCH" since="23"/>
-		<field name="CALLBACK_TYPE_MATCH_LOST" since="23"/>
-		<field name="CREATOR"/>
-		<field name="MATCH_MODE_AGGRESSIVE" since="23"/>
-		<field name="MATCH_MODE_STICKY" since="23"/>
-		<field name="MATCH_NUM_FEW_ADVERTISEMENT" since="23"/>
-		<field name="MATCH_NUM_MAX_ADVERTISEMENT" since="23"/>
-		<field name="MATCH_NUM_ONE_ADVERTISEMENT" since="23"/>
-		<field name="PHY_LE_ALL_SUPPORTED" since="26"/>
-		<field name="SCAN_MODE_BALANCED"/>
-		<field name="SCAN_MODE_LOW_LATENCY"/>
-		<field name="SCAN_MODE_LOW_POWER"/>
-		<field name="SCAN_MODE_OPPORTUNISTIC" since="23"/>
-	</class>
-	<class name="android/bluetooth/le/ScanSettings$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/bluetooth/le/ScanSettings;"/>
-		<method name="setCallbackType(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23"/>
-		<method name="setLegacy(Z)Landroid/bluetooth/le/ScanSettings$Builder;" since="26"/>
-		<method name="setMatchMode(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23"/>
-		<method name="setNumOfMatches(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23"/>
-		<method name="setPhy(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="26"/>
-		<method name="setReportDelay(J)Landroid/bluetooth/le/ScanSettings$Builder;"/>
-		<method name="setScanMode(I)Landroid/bluetooth/le/ScanSettings$Builder;"/>
-	</class>
-	<class name="android/companion/AssociationRequest" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/companion/AssociationRequest$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addDeviceFilter(Landroid/companion/DeviceFilter;)Landroid/companion/AssociationRequest$Builder;"/>
-		<method name="build()Landroid/companion/AssociationRequest;"/>
-		<method name="checkNotUsed()V" since="29"/>
-		<method name="markUsed()V" since="29"/>
-		<method name="setSingleDevice(Z)Landroid/companion/AssociationRequest$Builder;"/>
-	</class>
-	<class name="android/companion/BluetoothDeviceFilter" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/companion/DeviceFilter"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/companion/BluetoothDeviceFilter$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
-		<method name="build()Landroid/companion/BluetoothDeviceFilter;"/>
-		<method name="checkNotUsed()V" since="29"/>
-		<method name="markUsed()V" since="29"/>
-		<method name="setAddress(Ljava/lang/String;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
-		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
-	</class>
-	<class name="android/companion/BluetoothLeDeviceFilter" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/companion/DeviceFilter"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/regex/Pattern;Landroid/bluetooth/le/ScanFilter;[B[BLjava/lang/String;Ljava/lang/String;IIIIZ)V" since="29"/>
-		<method name="getRenamePrefixLengthLimit()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/companion/BluetoothLeDeviceFilter$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/companion/BluetoothLeDeviceFilter;"/>
-		<method name="checkNotUsed()V" since="29"/>
-		<method name="markUsed()V" since="29"/>
-		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
-		<method name="setRawDataFilter([B[B)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
-		<method name="setRenameFromBytes(Ljava/lang/String;Ljava/lang/String;IILjava/nio/ByteOrder;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
-		<method name="setRenameFromName(Ljava/lang/String;Ljava/lang/String;II)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
-		<method name="setScanFilter(Landroid/bluetooth/le/ScanFilter;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
-	</class>
-	<class name="android/companion/CompanionDeviceManager" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="associate(Landroid/companion/AssociationRequest;Landroid/companion/CompanionDeviceManager$Callback;Landroid/os/Handler;)V"/>
-		<method name="disassociate(Ljava/lang/String;)V"/>
-		<method name="getAssociations()Ljava/util/List;"/>
-		<method name="hasNotificationAccess(Landroid/content/ComponentName;)Z"/>
-		<method name="requestNotificationAccess(Landroid/content/ComponentName;)V"/>
-		<field name="EXTRA_DEVICE"/>
-	</class>
-	<class name="android/companion/CompanionDeviceManager$Callback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onDeviceFound(Landroid/content/IntentSender;)V"/>
-		<method name="onFailure(Ljava/lang/CharSequence;)V"/>
-	</class>
-	<class name="android/companion/DeviceFilter" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-	</class>
-	<class name="android/companion/WifiDeviceFilter" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/companion/DeviceFilter"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/regex/Pattern;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/companion/WifiDeviceFilter$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/companion/WifiDeviceFilter;"/>
-		<method name="checkNotUsed()V" since="29"/>
-		<method name="markUsed()V" since="29"/>
-		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/WifiDeviceFilter$Builder;"/>
-	</class>
-	<class name="android/content/AbstractThreadedSyncAdapter" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Z)V"/>
-		<method name="&lt;init>(Landroid/content/Context;ZZ)V" since="11"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getSyncAdapterBinder()Landroid/os/IBinder;"/>
-		<method name="onPerformSync(Landroid/accounts/Account;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/ContentProviderClient;Landroid/content/SyncResult;)V"/>
-		<method name="onSecurityException(Landroid/accounts/Account;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/SyncResult;)V" since="23"/>
-		<method name="onSyncCanceled()V" since="8"/>
-		<method name="onSyncCanceled(Ljava/lang/Thread;)V" since="11"/>
-		<method name="onUnsyncableAccount()Z" since="28"/>
-		<field name="LOG_SYNC_DETAILS" deprecated="16"/>
-	</class>
-	<class name="android/content/ActivityNotFoundException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/content/AsyncQueryHandler" since="1">
-		<extends name="android/os/Handler"/>
-		<method name="&lt;init>(Landroid/content/ContentResolver;)V"/>
-		<method name="cancelOperation(I)V"/>
-		<method name="createHandler(Landroid/os/Looper;)Landroid/os/Handler;"/>
-		<method name="onDeleteComplete(ILjava/lang/Object;I)V"/>
-		<method name="onInsertComplete(ILjava/lang/Object;Landroid/net/Uri;)V"/>
-		<method name="onQueryComplete(ILjava/lang/Object;Landroid/database/Cursor;)V"/>
-		<method name="onUpdateComplete(ILjava/lang/Object;I)V"/>
-		<method name="startDelete(ILjava/lang/Object;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)V"/>
-		<method name="startInsert(ILjava/lang/Object;Landroid/net/Uri;Landroid/content/ContentValues;)V"/>
-		<method name="startQuery(ILjava/lang/Object;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="startUpdate(ILjava/lang/Object;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/content/AsyncQueryHandler$WorkerArgs" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="cookie"/>
-		<field name="handler"/>
-		<field name="orderBy"/>
-		<field name="projection"/>
-		<field name="result"/>
-		<field name="selection"/>
-		<field name="selectionArgs"/>
-		<field name="uri"/>
-		<field name="values"/>
-	</class>
-	<class name="android/content/AsyncQueryHandler$WorkerHandler" since="1">
-		<extends name="android/os/Handler"/>
-		<method name="&lt;init>(Landroid/content/AsyncQueryHandler;Landroid/os/Looper;)V"/>
-	</class>
-	<class name="android/content/AsyncTaskLoader" since="11" deprecated="28">
-		<extends name="android/content/Loader"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="cancelLoad()Z" removed="16"/>
-		<method name="cancelLoadInBackground()V" since="16"/>
-		<method name="isLoadInBackgroundCanceled()Z" since="16"/>
-		<method name="loadInBackground()Ljava/lang/Object;"/>
-		<method name="onCanceled(Ljava/lang/Object;)V"/>
-		<method name="onLoadInBackground()Ljava/lang/Object;"/>
-		<method name="setUpdateThrottle(J)V"/>
-	</class>
-	<class name="android/content/BroadcastReceiver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="abortBroadcast()V"/>
-		<method name="clearAbortBroadcast()V"/>
-		<method name="getAbortBroadcast()Z"/>
-		<method name="getDebugUnregister()Z"/>
-		<method name="getResultCode()I"/>
-		<method name="getResultData()Ljava/lang/String;"/>
-		<method name="getResultExtras(Z)Landroid/os/Bundle;"/>
-		<method name="goAsync()Landroid/content/BroadcastReceiver$PendingResult;" since="11"/>
-		<method name="isInitialStickyBroadcast()Z" since="5"/>
-		<method name="isOrderedBroadcast()Z" since="5"/>
-		<method name="onReceive(Landroid/content/Context;Landroid/content/Intent;)V"/>
-		<method name="peekService(Landroid/content/Context;Landroid/content/Intent;)Landroid/os/IBinder;" since="3"/>
-		<method name="setDebugUnregister(Z)V"/>
-		<method name="setOrderedHint(Z)V"/>
-		<method name="setResult(ILjava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="setResultCode(I)V"/>
-		<method name="setResultData(Ljava/lang/String;)V"/>
-		<method name="setResultExtras(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/content/BroadcastReceiver$PendingResult" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;Landroid/os/Bundle;IZZLandroid/os/IBinder;II)V" since="29"/>
-		<method name="abortBroadcast()V"/>
-		<method name="clearAbortBroadcast()V"/>
-		<method name="finish()V"/>
-		<method name="getAbortBroadcast()Z"/>
-		<method name="getResultCode()I"/>
-		<method name="getResultData()Ljava/lang/String;"/>
-		<method name="getResultExtras(Z)Landroid/os/Bundle;"/>
-		<method name="setResult(ILjava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="setResultCode(I)V"/>
-		<method name="setResultData(Ljava/lang/String;)V"/>
-		<method name="setResultExtras(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/content/ClipData" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/ClipData;)V" since="16"/>
-		<method name="&lt;init>(Landroid/content/ClipDescription;Landroid/content/ClipData$Item;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;[Ljava/lang/String;Landroid/content/ClipData$Item;)V"/>
-		<method name="addItem(Landroid/content/ClipData$Item;)V"/>
-		<method name="addItem(Landroid/content/ContentResolver;Landroid/content/ClipData$Item;)V" since="26"/>
-		<method name="getDescription()Landroid/content/ClipDescription;"/>
-		<method name="getItemAt(I)Landroid/content/ClipData$Item;"/>
-		<method name="getItemCount()I"/>
-		<method name="newHtmlText(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)Landroid/content/ClipData;" since="16"/>
-		<method name="newIntent(Ljava/lang/CharSequence;Landroid/content/Intent;)Landroid/content/ClipData;"/>
-		<method name="newPlainText(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/ClipData;"/>
-		<method name="newRawUri(Ljava/lang/CharSequence;Landroid/net/Uri;)Landroid/content/ClipData;"/>
-		<method name="newUri(Landroid/content/ContentResolver;Ljava/lang/CharSequence;Landroid/net/Uri;)Landroid/content/ClipData;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/ClipData$Item" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Intent;)V"/>
-		<method name="&lt;init>(Landroid/net/Uri;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/content/Intent;Landroid/net/Uri;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/String;)V" since="16"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/String;Landroid/content/Intent;Landroid/net/Uri;)V" since="16"/>
-		<method name="coerceToHtmlText(Landroid/content/Context;)Ljava/lang/String;" since="16"/>
-		<method name="coerceToStyledText(Landroid/content/Context;)Ljava/lang/CharSequence;" since="16"/>
-		<method name="coerceToText(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
-		<method name="getHtmlText()Ljava/lang/String;" since="16"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-	</class>
-	<class name="android/content/ClipDescription" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/ClipDescription;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;[Ljava/lang/String;)V"/>
-		<method name="compareMimeTypes(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="filterMimeTypes(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="getExtras()Landroid/os/PersistableBundle;" since="24"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getMimeType(I)Ljava/lang/String;"/>
-		<method name="getMimeTypeCount()I"/>
-		<method name="getTimestamp()J" since="26"/>
-		<method name="hasMimeType(Ljava/lang/String;)Z"/>
-		<method name="setExtras(Landroid/os/PersistableBundle;)V" since="24"/>
-		<field name="CREATOR"/>
-		<field name="MIMETYPE_TEXT_HTML" since="16"/>
-		<field name="MIMETYPE_TEXT_INTENT"/>
-		<field name="MIMETYPE_TEXT_PLAIN"/>
-		<field name="MIMETYPE_TEXT_URILIST"/>
-	</class>
-	<class name="android/content/ClipboardManager" since="11">
-		<extends name="android/text/ClipboardManager"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V"/>
-		<method name="clearPrimaryClip()V" since="28"/>
-		<method name="getPrimaryClip()Landroid/content/ClipData;"/>
-		<method name="getPrimaryClipDescription()Landroid/content/ClipDescription;"/>
-		<method name="hasPrimaryClip()Z"/>
-		<method name="removePrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V"/>
-		<method name="setPrimaryClip(Landroid/content/ClipData;)V"/>
-	</class>
-	<class name="android/content/ClipboardManager$OnPrimaryClipChangedListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onPrimaryClipChanged()V"/>
-	</class>
-	<class name="android/content/ComponentCallbacks" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V"/>
-		<method name="onLowMemory()V"/>
-	</class>
-	<class name="android/content/ComponentCallbacks2" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/ComponentCallbacks"/>
-		<method name="onTrimMemory(I)V"/>
-		<field name="TRIM_MEMORY_BACKGROUND"/>
-		<field name="TRIM_MEMORY_COMPLETE"/>
-		<field name="TRIM_MEMORY_MODERATE"/>
-		<field name="TRIM_MEMORY_RUNNING_CRITICAL" since="16"/>
-		<field name="TRIM_MEMORY_RUNNING_LOW" since="16"/>
-		<field name="TRIM_MEMORY_RUNNING_MODERATE" since="16"/>
-		<field name="TRIM_MEMORY_UI_HIDDEN"/>
-	</class>
-	<class name="android/content/ComponentName" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/lang/Cloneable" since="8"/>
-		<implements name="java/lang/Comparable" since="4"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="clone()Landroid/content/ComponentName;" since="8"/>
-		<method name="compareTo(Landroid/content/ComponentName;)I" since="4"/>
-		<method name="createRelative(Landroid/content/Context;Ljava/lang/String;)Landroid/content/ComponentName;" since="23"/>
-		<method name="createRelative(Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;" since="23"/>
-		<method name="flattenToShortString()Ljava/lang/String;"/>
-		<method name="flattenToString()Ljava/lang/String;"/>
-		<method name="getClassName()Ljava/lang/String;"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getShortClassName()Ljava/lang/String;"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;"/>
-		<method name="toShortString()Ljava/lang/String;"/>
-		<method name="unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;"/>
-		<method name="writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/ContentProvider" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/ComponentCallbacks" removed="14"/>
-		<implements name="android/content/ComponentCallbacks2" since="14"/>
-		<method name="&lt;init>()V"/>
-		<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5"/>
-		<method name="attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V"/>
-		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
-		<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11"/>
-		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
-		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
-		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="18"/>
-		<method name="getCallingPackage()Ljava/lang/String;" since="19"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getPathPermissions()[Landroid/content/pm/PathPermission;" since="4"/>
-		<method name="getReadPermission()Ljava/lang/String;"/>
-		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
-		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;"/>
-		<method name="getWritePermission()Ljava/lang/String;"/>
-		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;"/>
-		<method name="isTemporary()Z"/>
-		<method name="onCreate()Z"/>
-		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" since="3"/>
-		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
-		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
-		<method name="openFileHelper(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="openPipeHelper(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;Landroid/content/ContentProvider$PipeDataWriter;)Landroid/os/ParcelFileDescriptor;" since="11"/>
-		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
-		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26"/>
-		<method name="setPathPermissions([Landroid/content/pm/PathPermission;)V" since="4"/>
-		<method name="setReadPermission(Ljava/lang/String;)V"/>
-		<method name="setWritePermission(Ljava/lang/String;)V"/>
-		<method name="shutdown()V" since="11"/>
-		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
-		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
-	</class>
-	<class name="android/content/ContentProvider$PipeDataWriter" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="writeDataToPipe(Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/content/ContentProviderClient" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="24"/>
-		<method name="&lt;init>()V"/>
-		<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;"/>
-		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
-		<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="17"/>
-		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
-		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
-		<method name="getLocalContentProvider()Landroid/content/ContentProvider;"/>
-		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
-		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;"/>
-		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;"/>
-		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
-		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
-		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
-		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
-		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26"/>
-		<method name="release()Z" deprecated="24"/>
-		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
-		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
-	</class>
-	<class name="android/content/ContentProviderOperation" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/ContentProviderOperation$Builder;)V" since="29"/>
-		<method name="apply(Landroid/content/ContentProvider;[Landroid/content/ContentProviderResult;I)Landroid/content/ContentProviderResult;"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-		<method name="isAssertQuery()Z" since="23"/>
-		<method name="isDelete()Z" since="23"/>
-		<method name="isInsert()Z" since="23"/>
-		<method name="isReadOperation()Z"/>
-		<method name="isUpdate()Z" since="23"/>
-		<method name="isWriteOperation()Z"/>
-		<method name="isYieldAllowed()Z"/>
-		<method name="newAssertQuery(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="newDelete(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="newInsert(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="newUpdate(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="resolveSelectionArgsBackReferences([Landroid/content/ContentProviderResult;I)[Ljava/lang/String;"/>
-		<method name="resolveValueBackReferences([Landroid/content/ContentProviderResult;I)Landroid/content/ContentValues;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/ContentProviderOperation$Builder" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILandroid/net/Uri;)V" since="29"/>
-		<method name="build()Landroid/content/ContentProviderOperation;"/>
-		<method name="withExpectedCount(I)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="withSelection(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="withSelectionBackReference(II)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="withValue(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="withValueBackReference(Ljava/lang/String;I)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="withValueBackReferences(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="withValues(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;"/>
-		<method name="withYieldAllowed(Z)Landroid/content/ContentProviderOperation$Builder;"/>
-	</class>
-	<class name="android/content/ContentProviderResult" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/net/Uri;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="count"/>
-		<field name="uri"/>
-	</class>
-	<class name="android/content/ContentQueryMap" since="1">
-		<extends name="java/util/Observable"/>
-		<method name="&lt;init>(Landroid/database/Cursor;Ljava/lang/String;ZLandroid/os/Handler;)V"/>
-		<method name="close()V"/>
-		<method name="getRows()Ljava/util/Map;"/>
-		<method name="getValues(Ljava/lang/String;)Landroid/content/ContentValues;"/>
-		<method name="requery()V"/>
-		<method name="setKeepUpdated(Z)V"/>
-	</class>
-	<class name="android/content/ContentResolver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="acquireContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;" since="5"/>
-		<method name="acquireContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;" since="5"/>
-		<method name="acquireUnstableContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;" since="16"/>
-		<method name="acquireUnstableContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;" since="16"/>
-		<method name="addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V" since="8"/>
-		<method name="addStatusChangeListener(ILandroid/content/SyncStatusObserver;)Ljava/lang/Object;" since="5"/>
-		<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5"/>
-		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
-		<method name="call(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11"/>
-		<method name="cancelSync(Landroid/accounts/Account;Ljava/lang/String;)V" since="5"/>
-		<method name="cancelSync(Landroid/content/SyncRequest;)V" since="21"/>
-		<method name="cancelSync(Landroid/net/Uri;)V" deprecated="16"/>
-		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
-		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
-		<method name="getCurrentSync()Landroid/content/SyncInfo;" since="8" deprecated="16"/>
-		<method name="getCurrentSyncs()Ljava/util/List;" since="11"/>
-		<method name="getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I" since="5"/>
-		<method name="getMasterSyncAutomatically()Z" since="5"/>
-		<method name="getOutgoingPersistedUriPermissions()Ljava/util/List;" since="19"/>
-		<method name="getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;)Ljava/util/List;" since="8"/>
-		<method name="getPersistedUriPermissions()Ljava/util/List;" since="19"/>
-		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
-		<method name="getSyncAdapterTypes()[Landroid/content/SyncAdapterType;" since="5"/>
-		<method name="getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
-		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;"/>
-		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;"/>
-		<method name="isSyncActive(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
-		<method name="isSyncPending(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
-		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;)V"/>
-		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V" since="24"/>
-		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;Z)V"/>
-		<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" since="3"/>
-		<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
-		<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
-		<method name="openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;"/>
-		<method name="openOutputStream(Landroid/net/Uri;)Ljava/io/OutputStream;"/>
-		<method name="openOutputStream(Landroid/net/Uri;Ljava/lang/String;)Ljava/io/OutputStream;" since="3"/>
-		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
-		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26"/>
-		<method name="registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;)V"/>
-		<method name="releasePersistableUriPermission(Landroid/net/Uri;I)V" since="19"/>
-		<method name="removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V" since="8"/>
-		<method name="removeStatusChangeListener(Ljava/lang/Object;)V" since="5"/>
-		<method name="requestSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V" since="5"/>
-		<method name="requestSync(Landroid/content/SyncRequest;)V" since="19"/>
-		<method name="setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V" since="5"/>
-		<method name="setMasterSyncAutomatically(Z)V" since="5"/>
-		<method name="setSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;Z)V" since="5"/>
-		<method name="startSync(Landroid/net/Uri;Landroid/os/Bundle;)V" deprecated="16"/>
-		<method name="takePersistableUriPermission(Landroid/net/Uri;I)V" since="19"/>
-		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
-		<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V"/>
-		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
-		<method name="validateSyncExtrasBundle(Landroid/os/Bundle;)V"/>
-		<field name="ANY_CURSOR_ITEM_TYPE" since="21"/>
-		<field name="CURSOR_DIR_BASE_TYPE"/>
-		<field name="CURSOR_ITEM_BASE_TYPE"/>
-		<field name="EXTRA_HONORED_ARGS" since="26"/>
-		<field name="EXTRA_REFRESH_SUPPORTED" since="26"/>
-		<field name="EXTRA_SIZE" since="21"/>
-		<field name="EXTRA_TOTAL_COUNT" since="26"/>
-		<field name="NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS" since="24"/>
-		<field name="NOTIFY_SYNC_TO_NETWORK" since="24"/>
-		<field name="QUERY_ARG_LIMIT" since="26"/>
-		<field name="QUERY_ARG_OFFSET" since="26"/>
-		<field name="QUERY_ARG_SORT_COLLATION" since="26"/>
-		<field name="QUERY_ARG_SORT_COLUMNS" since="26"/>
-		<field name="QUERY_ARG_SORT_DIRECTION" since="26"/>
-		<field name="QUERY_ARG_SQL_SELECTION" since="26"/>
-		<field name="QUERY_ARG_SQL_SELECTION_ARGS" since="26"/>
-		<field name="QUERY_ARG_SQL_SORT_ORDER" since="26"/>
-		<field name="QUERY_SORT_DIRECTION_ASCENDING" since="26"/>
-		<field name="QUERY_SORT_DIRECTION_DESCENDING" since="26"/>
-		<field name="SCHEME_ANDROID_RESOURCE"/>
-		<field name="SCHEME_CONTENT"/>
-		<field name="SCHEME_FILE"/>
-		<field name="SYNC_EXTRAS_ACCOUNT" deprecated="16"/>
-		<field name="SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS"/>
-		<field name="SYNC_EXTRAS_DO_NOT_RETRY" since="8"/>
-		<field name="SYNC_EXTRAS_EXPEDITED"/>
-		<field name="SYNC_EXTRAS_FORCE" deprecated="16"/>
-		<field name="SYNC_EXTRAS_IGNORE_BACKOFF" since="8"/>
-		<field name="SYNC_EXTRAS_IGNORE_SETTINGS" since="8"/>
-		<field name="SYNC_EXTRAS_INITIALIZE" since="5"/>
-		<field name="SYNC_EXTRAS_MANUAL" since="5"/>
-		<field name="SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS"/>
-		<field name="SYNC_EXTRAS_REQUIRE_CHARGING" since="24"/>
-		<field name="SYNC_EXTRAS_UPLOAD"/>
-		<field name="SYNC_OBSERVER_TYPE_ACTIVE" since="8"/>
-		<field name="SYNC_OBSERVER_TYPE_PENDING" since="8"/>
-		<field name="SYNC_OBSERVER_TYPE_SETTINGS" since="8"/>
-	</class>
-	<class name="android/content/ContentUris" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="appendId(Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder;"/>
-		<method name="parseId(Landroid/net/Uri;)J"/>
-		<method name="withAppendedId(Landroid/net/Uri;J)Landroid/net/Uri;"/>
-	</class>
-	<class name="android/content/ContentValues" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/content/ContentValues;)V"/>
-		<method name="clear()V"/>
-		<method name="containsKey(Ljava/lang/String;)Z"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getAsBoolean(Ljava/lang/String;)Ljava/lang/Boolean;"/>
-		<method name="getAsByte(Ljava/lang/String;)Ljava/lang/Byte;"/>
-		<method name="getAsByteArray(Ljava/lang/String;)[B"/>
-		<method name="getAsDouble(Ljava/lang/String;)Ljava/lang/Double;"/>
-		<method name="getAsFloat(Ljava/lang/String;)Ljava/lang/Float;"/>
-		<method name="getAsInteger(Ljava/lang/String;)Ljava/lang/Integer;"/>
-		<method name="getAsLong(Ljava/lang/String;)Ljava/lang/Long;"/>
-		<method name="getAsShort(Ljava/lang/String;)Ljava/lang/Short;"/>
-		<method name="getAsString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="keySet()Ljava/util/Set;" since="11"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Boolean;)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Byte;)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Double;)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Float;)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Integer;)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Long;)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Short;)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="put(Ljava/lang/String;[B)V"/>
-		<method name="putAll(Landroid/content/ContentValues;)V"/>
-		<method name="putNull(Ljava/lang/String;)V"/>
-		<method name="remove(Ljava/lang/String;)V"/>
-		<method name="size()I"/>
-		<method name="valueSet()Ljava/util/Set;"/>
-		<field name="CREATOR"/>
-		<field name="TAG"/>
-	</class>
-	<class name="android/content/Context" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z"/>
-		<method name="checkCallingOrSelfPermission(Ljava/lang/String;)I"/>
-		<method name="checkCallingOrSelfUriPermission(Landroid/net/Uri;I)I"/>
-		<method name="checkCallingPermission(Ljava/lang/String;)I"/>
-		<method name="checkCallingUriPermission(Landroid/net/Uri;I)I"/>
-		<method name="checkPermission(Ljava/lang/String;II)I"/>
-		<method name="checkSelfPermission(Ljava/lang/String;)I" since="23"/>
-		<method name="checkUriPermission(Landroid/net/Uri;III)I"/>
-		<method name="checkUriPermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;III)I"/>
-		<method name="clearWallpaper()V" deprecated="16"/>
-		<method name="createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;" since="17"/>
-		<method name="createContextForSplit(Ljava/lang/String;)Landroid/content/Context;" since="26"/>
-		<method name="createDeviceProtectedStorageContext()Landroid/content/Context;" since="24"/>
-		<method name="createDisplayContext(Landroid/view/Display;)Landroid/content/Context;" since="17"/>
-		<method name="createPackageContext(Ljava/lang/String;I)Landroid/content/Context;"/>
-		<method name="databaseList()[Ljava/lang/String;"/>
-		<method name="deleteDatabase(Ljava/lang/String;)Z"/>
-		<method name="deleteFile(Ljava/lang/String;)Z"/>
-		<method name="deleteSharedPreferences(Ljava/lang/String;)Z" since="24"/>
-		<method name="enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="enforceCallingOrSelfUriPermission(Landroid/net/Uri;ILjava/lang/String;)V"/>
-		<method name="enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="enforceCallingUriPermission(Landroid/net/Uri;ILjava/lang/String;)V"/>
-		<method name="enforcePermission(Ljava/lang/String;IILjava/lang/String;)V"/>
-		<method name="enforceUriPermission(Landroid/net/Uri;IIILjava/lang/String;)V"/>
-		<method name="enforceUriPermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;)V"/>
-		<method name="fileList()[Ljava/lang/String;"/>
-		<method name="getApplicationContext()Landroid/content/Context;"/>
-		<method name="getApplicationInfo()Landroid/content/pm/ApplicationInfo;" since="4"/>
-		<method name="getAssets()Landroid/content/res/AssetManager;"/>
-		<method name="getCacheDir()Ljava/io/File;"/>
-		<method name="getClassLoader()Ljava/lang/ClassLoader;"/>
-		<method name="getCodeCacheDir()Ljava/io/File;" since="21"/>
-		<method name="getColor(I)I" since="23"/>
-		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;" since="23"/>
-		<method name="getContentResolver()Landroid/content/ContentResolver;"/>
-		<method name="getDataDir()Ljava/io/File;" since="24"/>
-		<method name="getDatabasePath(Ljava/lang/String;)Ljava/io/File;"/>
-		<method name="getDir(Ljava/lang/String;I)Ljava/io/File;"/>
-		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="getExternalCacheDir()Ljava/io/File;" since="8"/>
-		<method name="getExternalCacheDirs()[Ljava/io/File;" since="19"/>
-		<method name="getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;" since="8"/>
-		<method name="getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;" since="19"/>
-		<method name="getExternalMediaDirs()[Ljava/io/File;" since="21"/>
-		<method name="getFileStreamPath(Ljava/lang/String;)Ljava/io/File;"/>
-		<method name="getFilesDir()Ljava/io/File;"/>
-		<method name="getMainExecutor()Ljava/util/concurrent/Executor;" since="28"/>
-		<method name="getMainLooper()Landroid/os/Looper;"/>
-		<method name="getNoBackupFilesDir()Ljava/io/File;" since="21"/>
-		<method name="getObbDir()Ljava/io/File;" since="11"/>
-		<method name="getObbDirs()[Ljava/io/File;" since="19"/>
-		<method name="getPackageCodePath()Ljava/lang/String;" since="8"/>
-		<method name="getPackageManager()Landroid/content/pm/PackageManager;"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getPackageResourcePath()Ljava/lang/String;" since="8"/>
-		<method name="getResources()Landroid/content/res/Resources;"/>
-		<method name="getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="getSystemService(Ljava/lang/Class;)Ljava/lang/Object;" since="23"/>
-		<method name="getSystemService(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;" since="23"/>
-		<method name="getText(I)Ljava/lang/CharSequence;"/>
-		<method name="getTheme()Landroid/content/res/Resources$Theme;"/>
-		<method name="getWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="16"/>
-		<method name="getWallpaperDesiredMinimumHeight()I" deprecated="16"/>
-		<method name="getWallpaperDesiredMinimumWidth()I" deprecated="16"/>
-		<method name="grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V"/>
-		<method name="isDeviceProtectedStorage()Z" since="24"/>
-		<method name="isRestricted()Z" since="4"/>
-		<method name="moveDatabaseFrom(Landroid/content/Context;Ljava/lang/String;)Z" since="24"/>
-		<method name="moveSharedPreferencesFrom(Landroid/content/Context;Ljava/lang/String;)Z" since="24"/>
-		<method name="obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;"/>
-		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;"/>
-		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;"/>
-		<method name="obtainStyledAttributes([I)Landroid/content/res/TypedArray;"/>
-		<method name="openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;"/>
-		<method name="openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;"/>
-		<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11"/>
-		<method name="peekWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="16"/>
-		<method name="registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14"/>
-		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;"/>
-		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;" since="26"/>
-		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;"/>
-		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;" since="26"/>
-		<method name="removeStickyBroadcast(Landroid/content/Intent;)V" deprecated="21"/>
-		<method name="removeStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" deprecated="21"/>
-		<method name="revokeUriPermission(Landroid/net/Uri;I)V"/>
-		<method name="revokeUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V" since="26"/>
-		<method name="sendBroadcast(Landroid/content/Intent;)V"/>
-		<method name="sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V"/>
-		<method name="sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17"/>
-		<method name="sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V" since="17"/>
-		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V"/>
-		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17"/>
-		<method name="sendStickyBroadcast(Landroid/content/Intent;)V" deprecated="21"/>
-		<method name="sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" deprecated="21"/>
-		<method name="sendStickyOrderedBroadcast(Landroid/content/Intent;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="5" deprecated="21"/>
-		<method name="sendStickyOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17" deprecated="21"/>
-		<method name="setTheme(I)V"/>
-		<method name="setWallpaper(Landroid/graphics/Bitmap;)V" deprecated="16"/>
-		<method name="setWallpaper(Ljava/io/InputStream;)V" deprecated="16"/>
-		<method name="startActivities([Landroid/content/Intent;)V" since="11"/>
-		<method name="startActivities([Landroid/content/Intent;Landroid/os/Bundle;)V" since="16"/>
-		<method name="startActivity(Landroid/content/Intent;)V"/>
-		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16"/>
-		<method name="startForegroundService(Landroid/content/Intent;)Landroid/content/ComponentName;" since="26"/>
-		<method name="startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)Z"/>
-		<method name="startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;III)V" since="5"/>
-		<method name="startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;IIILandroid/os/Bundle;)V" since="16"/>
-		<method name="startService(Landroid/content/Intent;)Landroid/content/ComponentName;"/>
-		<method name="stopService(Landroid/content/Intent;)Z"/>
-		<method name="unbindService(Landroid/content/ServiceConnection;)V"/>
-		<method name="unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14"/>
-		<method name="unregisterReceiver(Landroid/content/BroadcastReceiver;)V"/>
-		<field name="ACCESSIBILITY_SERVICE" since="4"/>
-		<field name="ACCOUNT_SERVICE" since="5"/>
-		<field name="ACTIVITY_SERVICE"/>
-		<field name="ALARM_SERVICE"/>
-		<field name="APPWIDGET_SERVICE" since="21"/>
-		<field name="APP_OPS_SERVICE" since="19"/>
-		<field name="AUDIO_SERVICE"/>
-		<field name="BATTERY_SERVICE" since="21"/>
-		<field name="BIND_ABOVE_CLIENT" since="14"/>
-		<field name="BIND_ADJUST_WITH_ACTIVITY" since="14"/>
-		<field name="BIND_ALLOW_OOM_MANAGEMENT" since="14"/>
-		<field name="BIND_AUTO_CREATE"/>
-		<field name="BIND_DEBUG_UNBIND"/>
-		<field name="BIND_EXTERNAL_SERVICE" since="24"/>
-		<field name="BIND_IMPORTANT" since="14"/>
-		<field name="BIND_NOT_FOREGROUND" since="8"/>
-		<field name="BIND_WAIVE_PRIORITY" since="14"/>
-		<field name="BLUETOOTH_SERVICE" since="18"/>
-		<field name="CAMERA_SERVICE" since="21"/>
-		<field name="CAPTIONING_SERVICE" since="19"/>
-		<field name="CARRIER_CONFIG_SERVICE" since="23"/>
-		<field name="CLIPBOARD_SERVICE"/>
-		<field name="COMPANION_DEVICE_SERVICE" since="26"/>
-		<field name="CONNECTIVITY_SERVICE"/>
-		<field name="CONSUMER_IR_SERVICE" since="19"/>
-		<field name="CONTEXT_IGNORE_SECURITY"/>
-		<field name="CONTEXT_INCLUDE_CODE"/>
-		<field name="CONTEXT_RESTRICTED" since="4"/>
-		<field name="CROSS_PROFILE_APPS_SERVICE" since="28"/>
-		<field name="DEVICE_POLICY_SERVICE" since="8"/>
-		<field name="DISPLAY_SERVICE" since="17"/>
-		<field name="DOWNLOAD_SERVICE" since="9"/>
-		<field name="DROPBOX_SERVICE" since="8"/>
-		<field name="EUICC_SERVICE" since="28"/>
-		<field name="FINGERPRINT_SERVICE" since="23"/>
-		<field name="HARDWARE_PROPERTIES_SERVICE" since="24"/>
-		<field name="INPUT_METHOD_SERVICE" since="3"/>
-		<field name="INPUT_SERVICE" since="16"/>
-		<field name="IPSEC_SERVICE" since="28"/>
-		<field name="JOB_SCHEDULER_SERVICE" since="21"/>
-		<field name="KEYGUARD_SERVICE"/>
-		<field name="LAUNCHER_APPS_SERVICE" since="21"/>
-		<field name="LAYOUT_INFLATER_SERVICE"/>
-		<field name="LOCATION_SERVICE"/>
-		<field name="MEDIA_PROJECTION_SERVICE" since="21"/>
-		<field name="MEDIA_ROUTER_SERVICE" since="16"/>
-		<field name="MEDIA_SESSION_SERVICE" since="21"/>
-		<field name="MIDI_SERVICE" since="23"/>
-		<field name="MODE_APPEND"/>
-		<field name="MODE_ENABLE_WRITE_AHEAD_LOGGING" since="16"/>
-		<field name="MODE_MULTI_PROCESS" since="11" deprecated="23"/>
-		<field name="MODE_NO_LOCALIZED_COLLATORS" since="24"/>
-		<field name="MODE_PRIVATE"/>
-		<field name="MODE_WORLD_READABLE" deprecated="17"/>
-		<field name="MODE_WORLD_WRITEABLE" deprecated="17"/>
-		<field name="NETWORK_STATS_SERVICE" since="23"/>
-		<field name="NFC_SERVICE" since="10"/>
-		<field name="NOTIFICATION_SERVICE"/>
-		<field name="NSD_SERVICE" since="16"/>
-		<field name="POWER_SERVICE"/>
-		<field name="PRINT_SERVICE" since="19"/>
-		<field name="RECEIVER_VISIBLE_TO_INSTANT_APPS" since="26"/>
-		<field name="RESTRICTIONS_SERVICE" since="21"/>
-		<field name="SEARCH_SERVICE"/>
-		<field name="SENSOR_SERVICE"/>
-		<field name="SHORTCUT_SERVICE" since="25"/>
-		<field name="STORAGE_SERVICE" since="9"/>
-		<field name="STORAGE_STATS_SERVICE" since="26"/>
-		<field name="SYSTEM_HEALTH_SERVICE" since="24"/>
-		<field name="TELECOM_SERVICE" since="21"/>
-		<field name="TELEPHONY_SERVICE"/>
-		<field name="TELEPHONY_SUBSCRIPTION_SERVICE" since="22"/>
-		<field name="TEXT_CLASSIFICATION_SERVICE" since="26"/>
-		<field name="TEXT_SERVICES_MANAGER_SERVICE" since="14"/>
-		<field name="TV_INPUT_SERVICE" since="21"/>
-		<field name="UI_MODE_SERVICE" since="8"/>
-		<field name="USAGE_STATS_SERVICE" since="22"/>
-		<field name="USB_SERVICE" since="12"/>
-		<field name="USER_SERVICE" since="17"/>
-		<field name="VIBRATOR_SERVICE"/>
-		<field name="WALLPAPER_SERVICE"/>
-		<field name="WIFI_AWARE_SERVICE" since="26"/>
-		<field name="WIFI_P2P_SERVICE" since="14"/>
-		<field name="WIFI_RTT_RANGING_SERVICE" since="28"/>
-		<field name="WIFI_SERVICE"/>
-		<field name="WINDOW_SERVICE"/>
-	</class>
-	<class name="android/content/ContextWrapper" since="1">
-		<extends name="android/content/Context"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="attachBaseContext(Landroid/content/Context;)V"/>
-		<method name="getBaseContext()Landroid/content/Context;"/>
-		<method name="getPackageCodePath()Ljava/lang/String;"/>
-		<method name="getPackageResourcePath()Ljava/lang/String;"/>
-	</class>
-	<class name="android/content/CursorLoader" since="11" deprecated="28">
-		<extends name="android/content/AsyncTaskLoader"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="deliverResult(Landroid/database/Cursor;)V"/>
-		<method name="getProjection()[Ljava/lang/String;"/>
-		<method name="getSelection()Ljava/lang/String;"/>
-		<method name="getSelectionArgs()[Ljava/lang/String;"/>
-		<method name="getSortOrder()Ljava/lang/String;"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-		<method name="loadInBackground()Landroid/database/Cursor;"/>
-		<method name="onCanceled(Landroid/database/Cursor;)V"/>
-		<method name="setProjection([Ljava/lang/String;)V"/>
-		<method name="setSelection(Ljava/lang/String;)V"/>
-		<method name="setSelectionArgs([Ljava/lang/String;)V"/>
-		<method name="setSortOrder(Ljava/lang/String;)V"/>
-		<method name="setUri(Landroid/net/Uri;)V"/>
-	</class>
-	<class name="android/content/DialogInterface" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="cancel()V"/>
-		<method name="dismiss()V"/>
-		<field name="BUTTON1" deprecated="16"/>
-		<field name="BUTTON2" deprecated="16"/>
-		<field name="BUTTON3" deprecated="16"/>
-		<field name="BUTTON_NEGATIVE" since="3"/>
-		<field name="BUTTON_NEUTRAL" since="3"/>
-		<field name="BUTTON_POSITIVE" since="3"/>
-	</class>
-	<class name="android/content/DialogInterface$OnCancelListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onCancel(Landroid/content/DialogInterface;)V"/>
-	</class>
-	<class name="android/content/DialogInterface$OnClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onClick(Landroid/content/DialogInterface;I)V"/>
-	</class>
-	<class name="android/content/DialogInterface$OnDismissListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onDismiss(Landroid/content/DialogInterface;)V"/>
-	</class>
-	<class name="android/content/DialogInterface$OnKeyListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onKey(Landroid/content/DialogInterface;ILandroid/view/KeyEvent;)Z"/>
-	</class>
-	<class name="android/content/DialogInterface$OnMultiChoiceClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onClick(Landroid/content/DialogInterface;IZ)V"/>
-	</class>
-	<class name="android/content/DialogInterface$OnShowListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="onShow(Landroid/content/DialogInterface;)V"/>
-	</class>
-	<class name="android/content/Entity" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/ContentValues;)V"/>
-		<method name="addSubValue(Landroid/net/Uri;Landroid/content/ContentValues;)V"/>
-		<method name="getEntityValues()Landroid/content/ContentValues;"/>
-		<method name="getSubValues()Ljava/util/ArrayList;"/>
-	</class>
-	<class name="android/content/Entity$NamedContentValues" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/Uri;Landroid/content/ContentValues;)V"/>
-		<field name="uri"/>
-		<field name="values"/>
-	</class>
-	<class name="android/content/EntityIterator" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Iterator"/>
-		<method name="close()V"/>
-		<method name="reset()V"/>
-	</class>
-	<class name="android/content/Intent" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/lang/Cloneable" since="8"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Landroid/content/Intent;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;Landroid/content/Context;Ljava/lang/Class;)V"/>
-		<method name="addCategory(Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="addFlags(I)Landroid/content/Intent;"/>
-		<method name="cloneFilter()Landroid/content/Intent;"/>
-		<method name="createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;)Landroid/content/Intent;"/>
-		<method name="createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;Landroid/content/IntentSender;)Landroid/content/Intent;" since="22"/>
-		<method name="fillIn(Landroid/content/Intent;I)I"/>
-		<method name="filterEquals(Landroid/content/Intent;)Z"/>
-		<method name="filterHashCode()I"/>
-		<method name="getAction()Ljava/lang/String;"/>
-		<method name="getBooleanArrayExtra(Ljava/lang/String;)[Z"/>
-		<method name="getBooleanExtra(Ljava/lang/String;Z)Z"/>
-		<method name="getBundleExtra(Ljava/lang/String;)Landroid/os/Bundle;"/>
-		<method name="getByteArrayExtra(Ljava/lang/String;)[B"/>
-		<method name="getByteExtra(Ljava/lang/String;B)B"/>
-		<method name="getCategories()Ljava/util/Set;"/>
-		<method name="getCharArrayExtra(Ljava/lang/String;)[C"/>
-		<method name="getCharExtra(Ljava/lang/String;C)C"/>
-		<method name="getCharSequenceArrayExtra(Ljava/lang/String;)[Ljava/lang/CharSequence;" since="8"/>
-		<method name="getCharSequenceArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;" since="8"/>
-		<method name="getCharSequenceExtra(Ljava/lang/String;)Ljava/lang/CharSequence;"/>
-		<method name="getClipData()Landroid/content/ClipData;" since="16"/>
-		<method name="getComponent()Landroid/content/ComponentName;"/>
-		<method name="getData()Landroid/net/Uri;"/>
-		<method name="getDataString()Ljava/lang/String;"/>
-		<method name="getDoubleArrayExtra(Ljava/lang/String;)[D"/>
-		<method name="getDoubleExtra(Ljava/lang/String;D)D"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getFlags()I"/>
-		<method name="getFloatArrayExtra(Ljava/lang/String;)[F"/>
-		<method name="getFloatExtra(Ljava/lang/String;F)F"/>
-		<method name="getIntArrayExtra(Ljava/lang/String;)[I"/>
-		<method name="getIntExtra(Ljava/lang/String;I)I"/>
-		<method name="getIntegerArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="getIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="16"/>
-		<method name="getIntentOld(Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="getLongArrayExtra(Ljava/lang/String;)[J"/>
-		<method name="getLongExtra(Ljava/lang/String;J)J"/>
-		<method name="getPackage()Ljava/lang/String;" since="4"/>
-		<method name="getParcelableArrayExtra(Ljava/lang/String;)[Landroid/os/Parcelable;"/>
-		<method name="getParcelableArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="getParcelableExtra(Ljava/lang/String;)Landroid/os/Parcelable;"/>
-		<method name="getScheme()Ljava/lang/String;"/>
-		<method name="getSelector()Landroid/content/Intent;" since="15"/>
-		<method name="getSerializableExtra(Ljava/lang/String;)Ljava/io/Serializable;"/>
-		<method name="getShortArrayExtra(Ljava/lang/String;)[S"/>
-		<method name="getShortExtra(Ljava/lang/String;S)S"/>
-		<method name="getSourceBounds()Landroid/graphics/Rect;" since="7"/>
-		<method name="getStringArrayExtra(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="getStringArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="getStringExtra(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="hasCategory(Ljava/lang/String;)Z"/>
-		<method name="hasExtra(Ljava/lang/String;)Z"/>
-		<method name="hasFileDescriptors()Z"/>
-		<method name="makeMainActivity(Landroid/content/ComponentName;)Landroid/content/Intent;" since="11"/>
-		<method name="makeMainSelectorActivity(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;" since="15"/>
-		<method name="makeRestartActivityTask(Landroid/content/ComponentName;)Landroid/content/Intent;" since="11"/>
-		<method name="normalizeMimeType(Ljava/lang/String;)Ljava/lang/String;" since="16"/>
-		<method name="parseIntent(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/content/Intent;"/>
-		<method name="parseUri(Ljava/lang/String;I)Landroid/content/Intent;" since="4"/>
-		<method name="putCharSequenceArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;" since="8"/>
-		<method name="putExtra(Ljava/lang/String;B)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;C)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;D)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;F)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;I)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;J)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;Ljava/io/Serializable;)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;S)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;Z)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[B)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[C)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[D)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[F)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[I)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[J)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[Landroid/os/Parcelable;)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[Ljava/lang/CharSequence;)Landroid/content/Intent;" since="8"/>
-		<method name="putExtra(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[S)Landroid/content/Intent;"/>
-		<method name="putExtra(Ljava/lang/String;[Z)Landroid/content/Intent;"/>
-		<method name="putExtras(Landroid/content/Intent;)Landroid/content/Intent;"/>
-		<method name="putExtras(Landroid/os/Bundle;)Landroid/content/Intent;"/>
-		<method name="putIntegerArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"/>
-		<method name="putParcelableArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"/>
-		<method name="putStringArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<method name="removeCategory(Ljava/lang/String;)V"/>
-		<method name="removeExtra(Ljava/lang/String;)V"/>
-		<method name="removeFlags(I)V" since="26"/>
-		<method name="replaceExtras(Landroid/content/Intent;)Landroid/content/Intent;" since="3"/>
-		<method name="replaceExtras(Landroid/os/Bundle;)Landroid/content/Intent;" since="3"/>
-		<method name="resolveActivity(Landroid/content/pm/PackageManager;)Landroid/content/ComponentName;"/>
-		<method name="resolveActivityInfo(Landroid/content/pm/PackageManager;I)Landroid/content/pm/ActivityInfo;"/>
-		<method name="resolveType(Landroid/content/ContentResolver;)Ljava/lang/String;"/>
-		<method name="resolveType(Landroid/content/Context;)Ljava/lang/String;"/>
-		<method name="resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;"/>
-		<method name="setAction(Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="setClass(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;"/>
-		<method name="setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="setClipData(Landroid/content/ClipData;)V" since="16"/>
-		<method name="setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;"/>
-		<method name="setData(Landroid/net/Uri;)Landroid/content/Intent;"/>
-		<method name="setDataAndNormalize(Landroid/net/Uri;)Landroid/content/Intent;" since="16"/>
-		<method name="setDataAndType(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="setDataAndTypeAndNormalize(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;" since="16"/>
-		<method name="setExtrasClassLoader(Ljava/lang/ClassLoader;)V"/>
-		<method name="setFlags(I)Landroid/content/Intent;"/>
-		<method name="setPackage(Ljava/lang/String;)Landroid/content/Intent;" since="4"/>
-		<method name="setSelector(Landroid/content/Intent;)V" since="15"/>
-		<method name="setSourceBounds(Landroid/graphics/Rect;)V" since="7"/>
-		<method name="setType(Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="setTypeAndNormalize(Ljava/lang/String;)Landroid/content/Intent;" since="16"/>
-		<method name="toURI()Ljava/lang/String;" deprecated="16"/>
-		<method name="toUri(I)Ljava/lang/String;" since="4"/>
-		<field name="ACTION_AIRPLANE_MODE_CHANGED"/>
-		<field name="ACTION_ALL_APPS"/>
-		<field name="ACTION_ANSWER"/>
-		<field name="ACTION_APPLICATION_PREFERENCES" since="24"/>
-		<field name="ACTION_APPLICATION_RESTRICTIONS_CHANGED" since="21"/>
-		<field name="ACTION_APP_ERROR" since="14"/>
-		<field name="ACTION_ASSIST" since="16"/>
-		<field name="ACTION_ATTACH_DATA"/>
-		<field name="ACTION_BATTERY_CHANGED"/>
-		<field name="ACTION_BATTERY_LOW"/>
-		<field name="ACTION_BATTERY_OKAY" since="4"/>
-		<field name="ACTION_BOOT_COMPLETED"/>
-		<field name="ACTION_BUG_REPORT"/>
-		<field name="ACTION_CALL"/>
-		<field name="ACTION_CALL_BUTTON"/>
-		<field name="ACTION_CAMERA_BUTTON"/>
-		<field name="ACTION_CARRIER_SETUP" since="26"/>
-		<field name="ACTION_CHOOSER"/>
-		<field name="ACTION_CLOSE_SYSTEM_DIALOGS"/>
-		<field name="ACTION_CONFIGURATION_CHANGED"/>
-		<field name="ACTION_CREATE_DOCUMENT" since="19"/>
-		<field name="ACTION_CREATE_SHORTCUT"/>
-		<field name="ACTION_DATE_CHANGED"/>
-		<field name="ACTION_DEFAULT"/>
-		<field name="ACTION_DELETE"/>
-		<field name="ACTION_DEVICE_STORAGE_LOW" deprecated="26"/>
-		<field name="ACTION_DEVICE_STORAGE_OK" deprecated="26"/>
-		<field name="ACTION_DIAL"/>
-		<field name="ACTION_DOCK_EVENT" since="5"/>
-		<field name="ACTION_DREAMING_STARTED" since="17"/>
-		<field name="ACTION_DREAMING_STOPPED" since="17"/>
-		<field name="ACTION_EDIT"/>
-		<field name="ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" since="8"/>
-		<field name="ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE" since="8"/>
-		<field name="ACTION_FACTORY_TEST"/>
-		<field name="ACTION_GET_CONTENT"/>
-		<field name="ACTION_GET_RESTRICTION_ENTRIES" since="18"/>
-		<field name="ACTION_GTALK_SERVICE_CONNECTED"/>
-		<field name="ACTION_GTALK_SERVICE_DISCONNECTED"/>
-		<field name="ACTION_HEADSET_PLUG"/>
-		<field name="ACTION_INPUT_METHOD_CHANGED" since="3"/>
-		<field name="ACTION_INSERT"/>
-		<field name="ACTION_INSERT_OR_EDIT"/>
-		<field name="ACTION_INSTALL_FAILURE" since="27"/>
-		<field name="ACTION_INSTALL_PACKAGE" since="14"/>
-		<field name="ACTION_LOCALE_CHANGED" since="7"/>
-		<field name="ACTION_LOCKED_BOOT_COMPLETED" since="24"/>
-		<field name="ACTION_MAIN"/>
-		<field name="ACTION_MANAGED_PROFILE_ADDED" since="21"/>
-		<field name="ACTION_MANAGED_PROFILE_AVAILABLE" since="24"/>
-		<field name="ACTION_MANAGED_PROFILE_REMOVED" since="21"/>
-		<field name="ACTION_MANAGED_PROFILE_UNAVAILABLE" since="24"/>
-		<field name="ACTION_MANAGED_PROFILE_UNLOCKED" since="24"/>
-		<field name="ACTION_MANAGE_NETWORK_USAGE" since="14"/>
-		<field name="ACTION_MANAGE_PACKAGE_STORAGE"/>
-		<field name="ACTION_MEDIA_BAD_REMOVAL"/>
-		<field name="ACTION_MEDIA_BUTTON"/>
-		<field name="ACTION_MEDIA_CHECKING" since="3"/>
-		<field name="ACTION_MEDIA_EJECT"/>
-		<field name="ACTION_MEDIA_MOUNTED"/>
-		<field name="ACTION_MEDIA_NOFS" since="3"/>
-		<field name="ACTION_MEDIA_REMOVED"/>
-		<field name="ACTION_MEDIA_SCANNER_FINISHED"/>
-		<field name="ACTION_MEDIA_SCANNER_SCAN_FILE"/>
-		<field name="ACTION_MEDIA_SCANNER_STARTED"/>
-		<field name="ACTION_MEDIA_SHARED"/>
-		<field name="ACTION_MEDIA_UNMOUNTABLE"/>
-		<field name="ACTION_MEDIA_UNMOUNTED"/>
-		<field name="ACTION_MY_PACKAGE_REPLACED" since="12"/>
-		<field name="ACTION_MY_PACKAGE_SUSPENDED" since="28"/>
-		<field name="ACTION_MY_PACKAGE_UNSUSPENDED" since="28"/>
-		<field name="ACTION_NEW_OUTGOING_CALL"/>
-		<field name="ACTION_OPEN_DOCUMENT" since="19"/>
-		<field name="ACTION_OPEN_DOCUMENT_TREE" since="21"/>
-		<field name="ACTION_PACKAGES_SUSPENDED" since="24"/>
-		<field name="ACTION_PACKAGES_UNSUSPENDED" since="24"/>
-		<field name="ACTION_PACKAGE_ADDED"/>
-		<field name="ACTION_PACKAGE_CHANGED"/>
-		<field name="ACTION_PACKAGE_DATA_CLEARED" since="3"/>
-		<field name="ACTION_PACKAGE_FIRST_LAUNCH" since="12"/>
-		<field name="ACTION_PACKAGE_FULLY_REMOVED" since="14"/>
-		<field name="ACTION_PACKAGE_INSTALL" deprecated="16"/>
-		<field name="ACTION_PACKAGE_NEEDS_VERIFICATION" since="14"/>
-		<field name="ACTION_PACKAGE_REMOVED"/>
-		<field name="ACTION_PACKAGE_REPLACED" since="3"/>
-		<field name="ACTION_PACKAGE_RESTARTED"/>
-		<field name="ACTION_PACKAGE_VERIFIED" since="17"/>
-		<field name="ACTION_PASTE" since="11"/>
-		<field name="ACTION_PICK"/>
-		<field name="ACTION_PICK_ACTIVITY"/>
-		<field name="ACTION_POWER_CONNECTED" since="4"/>
-		<field name="ACTION_POWER_DISCONNECTED" since="4"/>
-		<field name="ACTION_POWER_USAGE_SUMMARY" since="4"/>
-		<field name="ACTION_PROCESS_TEXT" since="23"/>
-		<field name="ACTION_PROVIDER_CHANGED"/>
-		<field name="ACTION_QUICK_CLOCK" since="17"/>
-		<field name="ACTION_QUICK_VIEW" since="24"/>
-		<field name="ACTION_REBOOT"/>
-		<field name="ACTION_RUN"/>
-		<field name="ACTION_SCREEN_OFF"/>
-		<field name="ACTION_SCREEN_ON"/>
-		<field name="ACTION_SEARCH"/>
-		<field name="ACTION_SEARCH_LONG_PRESS" since="3"/>
-		<field name="ACTION_SEND"/>
-		<field name="ACTION_SENDTO"/>
-		<field name="ACTION_SEND_MULTIPLE" since="4"/>
-		<field name="ACTION_SET_WALLPAPER"/>
-		<field name="ACTION_SHOW_APP_INFO" since="24"/>
-		<field name="ACTION_SHUTDOWN" since="4"/>
-		<field name="ACTION_SYNC"/>
-		<field name="ACTION_SYSTEM_TUTORIAL" since="3"/>
-		<field name="ACTION_TIMEZONE_CHANGED"/>
-		<field name="ACTION_TIME_CHANGED"/>
-		<field name="ACTION_TIME_TICK"/>
-		<field name="ACTION_UID_REMOVED"/>
-		<field name="ACTION_UMS_CONNECTED" deprecated="16"/>
-		<field name="ACTION_UMS_DISCONNECTED" deprecated="16"/>
-		<field name="ACTION_UNINSTALL_PACKAGE" since="14"/>
-		<field name="ACTION_USER_BACKGROUND" since="17"/>
-		<field name="ACTION_USER_FOREGROUND" since="17"/>
-		<field name="ACTION_USER_INITIALIZE" since="17"/>
-		<field name="ACTION_USER_PRESENT" since="3"/>
-		<field name="ACTION_USER_UNLOCKED" since="24"/>
-		<field name="ACTION_VIEW"/>
-		<field name="ACTION_VOICE_COMMAND"/>
-		<field name="ACTION_WALLPAPER_CHANGED" deprecated="16"/>
-		<field name="ACTION_WEB_SEARCH"/>
-		<field name="CATEGORY_ALTERNATIVE"/>
-		<field name="CATEGORY_APP_BROWSER" since="15"/>
-		<field name="CATEGORY_APP_CALCULATOR" since="15"/>
-		<field name="CATEGORY_APP_CALENDAR" since="15"/>
-		<field name="CATEGORY_APP_CONTACTS" since="15"/>
-		<field name="CATEGORY_APP_EMAIL" since="15"/>
-		<field name="CATEGORY_APP_GALLERY" since="15"/>
-		<field name="CATEGORY_APP_MAPS" since="15"/>
-		<field name="CATEGORY_APP_MARKET" since="11"/>
-		<field name="CATEGORY_APP_MESSAGING" since="15"/>
-		<field name="CATEGORY_APP_MUSIC" since="15"/>
-		<field name="CATEGORY_BROWSABLE"/>
-		<field name="CATEGORY_CAR_DOCK" since="5"/>
-		<field name="CATEGORY_CAR_MODE" since="8"/>
-		<field name="CATEGORY_DEFAULT"/>
-		<field name="CATEGORY_DESK_DOCK" since="5"/>
-		<field name="CATEGORY_DEVELOPMENT_PREFERENCE"/>
-		<field name="CATEGORY_EMBED"/>
-		<field name="CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST"/>
-		<field name="CATEGORY_GADGET" removed="3"/>
-		<field name="CATEGORY_HE_DESK_DOCK" since="11"/>
-		<field name="CATEGORY_HOME"/>
-		<field name="CATEGORY_INFO" since="3"/>
-		<field name="CATEGORY_LAUNCHER"/>
-		<field name="CATEGORY_LEANBACK_LAUNCHER" since="21"/>
-		<field name="CATEGORY_LE_DESK_DOCK" since="11"/>
-		<field name="CATEGORY_MONKEY"/>
-		<field name="CATEGORY_OPENABLE"/>
-		<field name="CATEGORY_PREFERENCE"/>
-		<field name="CATEGORY_SAMPLE_CODE"/>
-		<field name="CATEGORY_SELECTED_ALTERNATIVE"/>
-		<field name="CATEGORY_TAB"/>
-		<field name="CATEGORY_TEST"/>
-		<field name="CATEGORY_TYPED_OPENABLE" since="26"/>
-		<field name="CATEGORY_UNIT_TEST"/>
-		<field name="CATEGORY_VOICE" since="23"/>
-		<field name="CATEGORY_VR_HOME" since="26"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_ALARM_COUNT"/>
-		<field name="EXTRA_ALLOW_MULTIPLE" since="18"/>
-		<field name="EXTRA_ALLOW_REPLACE" since="14" deprecated="16"/>
-		<field name="EXTRA_ALTERNATE_INTENTS" since="23"/>
-		<field name="EXTRA_ASSIST_CONTEXT" since="18"/>
-		<field name="EXTRA_ASSIST_INPUT_DEVICE_ID" since="23"/>
-		<field name="EXTRA_ASSIST_INPUT_HINT_KEYBOARD" since="21"/>
-		<field name="EXTRA_ASSIST_PACKAGE" since="18"/>
-		<field name="EXTRA_ASSIST_UID" since="23"/>
-		<field name="EXTRA_BCC"/>
-		<field name="EXTRA_BUG_REPORT" since="14"/>
-		<field name="EXTRA_CC"/>
-		<field name="EXTRA_CHANGED_COMPONENT_NAME" since="5" deprecated="16"/>
-		<field name="EXTRA_CHANGED_COMPONENT_NAME_LIST" since="7"/>
-		<field name="EXTRA_CHANGED_PACKAGE_LIST" since="8"/>
-		<field name="EXTRA_CHANGED_UID_LIST" since="8"/>
-		<field name="EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER" since="23"/>
-		<field name="EXTRA_CHOOSER_TARGETS" since="24"/>
-		<field name="EXTRA_CHOSEN_COMPONENT" since="22"/>
-		<field name="EXTRA_CHOSEN_COMPONENT_INTENT_SENDER" since="22"/>
-		<field name="EXTRA_COMPONENT_NAME" since="26"/>
-		<field name="EXTRA_CONTENT_ANNOTATIONS" since="26"/>
-		<field name="EXTRA_DATA_REMOVED" since="3"/>
-		<field name="EXTRA_DOCK_STATE" since="5"/>
-		<field name="EXTRA_DOCK_STATE_CAR" since="5"/>
-		<field name="EXTRA_DOCK_STATE_DESK" since="5"/>
-		<field name="EXTRA_DOCK_STATE_HE_DESK" since="11"/>
-		<field name="EXTRA_DOCK_STATE_LE_DESK" since="11"/>
-		<field name="EXTRA_DOCK_STATE_UNDOCKED" since="5"/>
-		<field name="EXTRA_DONT_KILL_APP"/>
-		<field name="EXTRA_EMAIL"/>
-		<field name="EXTRA_EXCLUDE_COMPONENTS" since="24"/>
-		<field name="EXTRA_FROM_STORAGE" since="26"/>
-		<field name="EXTRA_HTML_TEXT" since="16"/>
-		<field name="EXTRA_INDEX" since="24"/>
-		<field name="EXTRA_INITIAL_INTENTS" since="5"/>
-		<field name="EXTRA_INSTALLER_PACKAGE_NAME" since="14"/>
-		<field name="EXTRA_INTENT"/>
-		<field name="EXTRA_KEY_EVENT"/>
-		<field name="EXTRA_LOCAL_ONLY" since="11"/>
-		<field name="EXTRA_MIME_TYPES" since="19"/>
-		<field name="EXTRA_NOT_UNKNOWN_SOURCE" since="14"/>
-		<field name="EXTRA_ORIGINATING_URI" since="17"/>
-		<field name="EXTRA_PACKAGE_NAME" since="24"/>
-		<field name="EXTRA_PHONE_NUMBER"/>
-		<field name="EXTRA_PROCESS_TEXT" since="23"/>
-		<field name="EXTRA_PROCESS_TEXT_READONLY" since="23"/>
-		<field name="EXTRA_QUICK_VIEW_FEATURES" since="26"/>
-		<field name="EXTRA_QUIET_MODE" since="24"/>
-		<field name="EXTRA_REFERRER" since="17"/>
-		<field name="EXTRA_REFERRER_NAME" since="22"/>
-		<field name="EXTRA_REMOTE_INTENT_TOKEN" since="5"/>
-		<field name="EXTRA_REPLACEMENT_EXTRAS" since="21"/>
-		<field name="EXTRA_REPLACING" since="3"/>
-		<field name="EXTRA_RESTRICTIONS_BUNDLE" since="18"/>
-		<field name="EXTRA_RESTRICTIONS_INTENT" since="18"/>
-		<field name="EXTRA_RESTRICTIONS_LIST" since="18"/>
-		<field name="EXTRA_RESULT_RECEIVER" since="23"/>
-		<field name="EXTRA_RETURN_RESULT" since="14"/>
-		<field name="EXTRA_SHORTCUT_ICON" deprecated="26"/>
-		<field name="EXTRA_SHORTCUT_ICON_RESOURCE" deprecated="26"/>
-		<field name="EXTRA_SHORTCUT_INTENT" deprecated="26"/>
-		<field name="EXTRA_SHORTCUT_NAME" deprecated="26"/>
-		<field name="EXTRA_SHUTDOWN_USERSPACE_ONLY" since="19"/>
-		<field name="EXTRA_SPLIT_NAME" since="27"/>
-		<field name="EXTRA_STREAM"/>
-		<field name="EXTRA_SUBJECT"/>
-		<field name="EXTRA_SUSPENDED_PACKAGE_EXTRAS" since="28"/>
-		<field name="EXTRA_TEMPLATE"/>
-		<field name="EXTRA_TEXT"/>
-		<field name="EXTRA_TITLE"/>
-		<field name="EXTRA_UID"/>
-		<field name="EXTRA_USER" since="21"/>
-		<field name="FILL_IN_ACTION"/>
-		<field name="FILL_IN_CATEGORIES"/>
-		<field name="FILL_IN_CLIP_DATA" since="16"/>
-		<field name="FILL_IN_COMPONENT"/>
-		<field name="FILL_IN_DATA"/>
-		<field name="FILL_IN_PACKAGE" since="4"/>
-		<field name="FILL_IN_SELECTOR" since="15"/>
-		<field name="FILL_IN_SOURCE_BOUNDS" since="7"/>
-		<field name="FLAG_ACTIVITY_BROUGHT_TO_FRONT"/>
-		<field name="FLAG_ACTIVITY_CLEAR_TASK" since="11"/>
-		<field name="FLAG_ACTIVITY_CLEAR_TOP"/>
-		<field name="FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET" since="3" deprecated="21"/>
-		<field name="FLAG_ACTIVITY_CLOSE_SYSTEM_DIALOGS" since="16" removed="17"/>
-		<field name="FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS"/>
-		<field name="FLAG_ACTIVITY_FORWARD_RESULT"/>
-		<field name="FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY"/>
-		<field name="FLAG_ACTIVITY_LAUNCH_ADJACENT" since="24"/>
-		<field name="FLAG_ACTIVITY_MATCH_EXTERNAL" since="28"/>
-		<field name="FLAG_ACTIVITY_MULTIPLE_TASK"/>
-		<field name="FLAG_ACTIVITY_NEW_DOCUMENT" since="21"/>
-		<field name="FLAG_ACTIVITY_NEW_TASK"/>
-		<field name="FLAG_ACTIVITY_NO_ANIMATION" since="5"/>
-		<field name="FLAG_ACTIVITY_NO_HISTORY"/>
-		<field name="FLAG_ACTIVITY_NO_USER_ACTION" since="3"/>
-		<field name="FLAG_ACTIVITY_PREVIOUS_IS_TOP"/>
-		<field name="FLAG_ACTIVITY_REORDER_TO_FRONT" since="3"/>
-		<field name="FLAG_ACTIVITY_RESET_TASK_IF_NEEDED"/>
-		<field name="FLAG_ACTIVITY_RETAIN_IN_RECENTS" since="21"/>
-		<field name="FLAG_ACTIVITY_SINGLE_TOP"/>
-		<field name="FLAG_ACTIVITY_TASK_ON_HOME" since="11"/>
-		<field name="FLAG_DEBUG_LOG_RESOLUTION"/>
-		<field name="FLAG_EXCLUDE_STOPPED_PACKAGES" since="12"/>
-		<field name="FLAG_FROM_BACKGROUND"/>
-		<field name="FLAG_GRANT_PERSISTABLE_URI_PERMISSION" since="19"/>
-		<field name="FLAG_GRANT_PREFIX_URI_PERMISSION" since="21"/>
-		<field name="FLAG_GRANT_READ_URI_PERMISSION"/>
-		<field name="FLAG_GRANT_WRITE_URI_PERMISSION"/>
-		<field name="FLAG_INCLUDE_STOPPED_PACKAGES" since="12"/>
-		<field name="FLAG_RECEIVER_FOREGROUND" since="16"/>
-		<field name="FLAG_RECEIVER_NO_ABORT" since="19"/>
-		<field name="FLAG_RECEIVER_REGISTERED_ONLY"/>
-		<field name="FLAG_RECEIVER_REPLACE_PENDING" since="8"/>
-		<field name="FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS" since="26"/>
-		<field name="METADATA_DOCK_HOME" since="5"/>
-		<field name="URI_ALLOW_UNSAFE" since="22"/>
-		<field name="URI_ANDROID_APP_SCHEME" since="22"/>
-		<field name="URI_INTENT_SCHEME" since="4"/>
-	</class>
-	<class name="android/content/Intent$FilterComparison" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Intent;)V"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-	</class>
-	<class name="android/content/Intent$ShortcutIconResource" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="fromContext(Landroid/content/Context;I)Landroid/content/Intent$ShortcutIconResource;"/>
-		<field name="CREATOR"/>
-		<field name="packageName"/>
-		<field name="resourceName"/>
-	</class>
-	<class name="android/content/IntentFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/IntentFilter;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="actionsIterator()Ljava/util/Iterator;"/>
-		<method name="addAction(Ljava/lang/String;)V"/>
-		<method name="addCategory(Ljava/lang/String;)V"/>
-		<method name="addDataAuthority(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="addDataPath(Ljava/lang/String;I)V"/>
-		<method name="addDataScheme(Ljava/lang/String;)V"/>
-		<method name="addDataSchemeSpecificPart(Ljava/lang/String;I)V" since="19"/>
-		<method name="addDataType(Ljava/lang/String;)V"/>
-		<method name="authoritiesIterator()Ljava/util/Iterator;"/>
-		<method name="categoriesIterator()Ljava/util/Iterator;"/>
-		<method name="countActions()I"/>
-		<method name="countCategories()I"/>
-		<method name="countDataAuthorities()I"/>
-		<method name="countDataPaths()I"/>
-		<method name="countDataSchemeSpecificParts()I" since="19"/>
-		<method name="countDataSchemes()I"/>
-		<method name="countDataTypes()I"/>
-		<method name="create(Ljava/lang/String;Ljava/lang/String;)Landroid/content/IntentFilter;"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getAction(I)Ljava/lang/String;"/>
-		<method name="getCategory(I)Ljava/lang/String;"/>
-		<method name="getDataAuthority(I)Landroid/content/IntentFilter$AuthorityEntry;"/>
-		<method name="getDataPath(I)Landroid/os/PatternMatcher;"/>
-		<method name="getDataScheme(I)Ljava/lang/String;"/>
-		<method name="getDataSchemeSpecificPart(I)Landroid/os/PatternMatcher;" since="19"/>
-		<method name="getDataType(I)Ljava/lang/String;"/>
-		<method name="getPriority()I"/>
-		<method name="hasAction(Ljava/lang/String;)Z"/>
-		<method name="hasCategory(Ljava/lang/String;)Z"/>
-		<method name="hasDataAuthority(Landroid/net/Uri;)Z"/>
-		<method name="hasDataPath(Ljava/lang/String;)Z"/>
-		<method name="hasDataScheme(Ljava/lang/String;)Z"/>
-		<method name="hasDataSchemeSpecificPart(Ljava/lang/String;)Z" since="19"/>
-		<method name="hasDataType(Ljava/lang/String;)Z"/>
-		<method name="match(Landroid/content/ContentResolver;Landroid/content/Intent;ZLjava/lang/String;)I"/>
-		<method name="match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;)I"/>
-		<method name="matchAction(Ljava/lang/String;)Z"/>
-		<method name="matchCategories(Ljava/util/Set;)Ljava/lang/String;"/>
-		<method name="matchData(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)I"/>
-		<method name="matchDataAuthority(Landroid/net/Uri;)I"/>
-		<method name="pathsIterator()Ljava/util/Iterator;"/>
-		<method name="readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V"/>
-		<method name="schemeSpecificPartsIterator()Ljava/util/Iterator;" since="19"/>
-		<method name="schemesIterator()Ljava/util/Iterator;"/>
-		<method name="setPriority(I)V"/>
-		<method name="typesIterator()Ljava/util/Iterator;"/>
-		<method name="writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V"/>
-		<field name="CREATOR"/>
-		<field name="MATCH_ADJUSTMENT_MASK"/>
-		<field name="MATCH_ADJUSTMENT_NORMAL"/>
-		<field name="MATCH_CATEGORY_EMPTY"/>
-		<field name="MATCH_CATEGORY_HOST"/>
-		<field name="MATCH_CATEGORY_MASK"/>
-		<field name="MATCH_CATEGORY_PATH"/>
-		<field name="MATCH_CATEGORY_PORT"/>
-		<field name="MATCH_CATEGORY_SCHEME"/>
-		<field name="MATCH_CATEGORY_SCHEME_SPECIFIC_PART" since="19"/>
-		<field name="MATCH_CATEGORY_TYPE"/>
-		<field name="NO_MATCH_ACTION"/>
-		<field name="NO_MATCH_CATEGORY"/>
-		<field name="NO_MATCH_DATA"/>
-		<field name="NO_MATCH_TYPE"/>
-		<field name="SYSTEM_HIGH_PRIORITY"/>
-		<field name="SYSTEM_LOW_PRIORITY"/>
-	</class>
-	<class name="android/content/IntentFilter$AuthorityEntry" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="match(Landroid/net/Uri;)I"/>
-	</class>
-	<class name="android/content/IntentFilter$MalformedMimeTypeException" since="1">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/content/IntentSender" since="4">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/IBinder;)V" since="29"/>
-		<method name="getCreatorPackage()Ljava/lang/String;" since="17"/>
-		<method name="getCreatorUid()I" since="17"/>
-		<method name="getCreatorUserHandle()Landroid/os/UserHandle;" since="17"/>
-		<method name="getTargetPackage()Ljava/lang/String;" since="9" deprecated="17"/>
-		<method name="readIntentSenderOrNullFromParcel(Landroid/os/Parcel;)Landroid/content/IntentSender;"/>
-		<method name="sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;)V"/>
-		<method name="sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V" since="14"/>
-		<method name="writeIntentSenderOrNullToParcel(Landroid/content/IntentSender;Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/IntentSender$OnFinished" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="onSendFinished(Landroid/content/IntentSender;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/content/IntentSender$SendIntentException" since="4">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/content/Loader" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="abandon()V"/>
-		<method name="cancelLoad()Z" since="16"/>
-		<method name="commitContentChanged()V" since="18"/>
-		<method name="dataToString(Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="deliverCancellation()V" since="16"/>
-		<method name="deliverResult(Ljava/lang/Object;)V"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="forceLoad()V"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getId()I"/>
-		<method name="isAbandoned()Z"/>
-		<method name="isReset()Z"/>
-		<method name="isStarted()Z"/>
-		<method name="onAbandon()V"/>
-		<method name="onCancelLoad()Z" since="16"/>
-		<method name="onContentChanged()V"/>
-		<method name="onForceLoad()V"/>
-		<method name="onReset()V"/>
-		<method name="onStartLoading()V"/>
-		<method name="onStopLoading()V"/>
-		<method name="registerListener(ILandroid/content/Loader$OnLoadCompleteListener;)V"/>
-		<method name="registerOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16"/>
-		<method name="reset()V"/>
-		<method name="rollbackContentChanged()V" since="18"/>
-		<method name="startLoading()V"/>
-		<method name="stopLoading()V"/>
-		<method name="takeContentChanged()Z"/>
-		<method name="unregisterListener(Landroid/content/Loader$OnLoadCompleteListener;)V"/>
-		<method name="unregisterOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16"/>
-	</class>
-	<class name="android/content/Loader$ForceLoadContentObserver" since="11" deprecated="28">
-		<extends name="android/database/ContentObserver"/>
-		<method name="&lt;init>(Landroid/content/Loader;)V"/>
-	</class>
-	<class name="android/content/Loader$OnLoadCanceledListener" since="16" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="onLoadCanceled(Landroid/content/Loader;)V"/>
-	</class>
-	<class name="android/content/Loader$OnLoadCompleteListener" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/content/MutableContextWrapper" since="1">
-		<extends name="android/content/ContextWrapper"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="setBaseContext(Landroid/content/Context;)V"/>
-	</class>
-	<class name="android/content/OperationApplicationException" since="5">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="getNumSuccessfulYieldPoints()I"/>
-	</class>
-	<class name="android/content/PeriodicSync" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V"/>
-		<field name="CREATOR"/>
-		<field name="account"/>
-		<field name="authority"/>
-		<field name="extras"/>
-		<field name="period"/>
-	</class>
-	<class name="android/content/QuickViewConstants" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="FEATURE_DELETE" since="28"/>
-		<field name="FEATURE_DOWNLOAD"/>
-		<field name="FEATURE_EDIT"/>
-		<field name="FEATURE_PRINT"/>
-		<field name="FEATURE_SEND"/>
-		<field name="FEATURE_VIEW"/>
-	</class>
-	<class name="android/content/ReceiverCallNotAllowedException" since="1">
-		<extends name="android/util/AndroidRuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/content/RestrictionEntry" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ILjava/lang/String;)V" since="21"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="21"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[Ljava/lang/String;)V"/>
-		<method name="createBundleArrayEntry(Ljava/lang/String;[Landroid/content/RestrictionEntry;)Landroid/content/RestrictionEntry;" since="23"/>
-		<method name="createBundleEntry(Ljava/lang/String;[Landroid/content/RestrictionEntry;)Landroid/content/RestrictionEntry;" since="23"/>
-		<method name="getAllSelectedStrings()[Ljava/lang/String;"/>
-		<method name="getChoiceEntries()[Ljava/lang/String;"/>
-		<method name="getChoiceValues()[Ljava/lang/String;"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getIntValue()I" since="21"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="getRestrictions()[Landroid/content/RestrictionEntry;" since="23"/>
-		<method name="getSelectedState()Z"/>
-		<method name="getSelectedString()Ljava/lang/String;"/>
-		<method name="getTitle()Ljava/lang/String;"/>
-		<method name="getType()I"/>
-		<method name="setAllSelectedStrings([Ljava/lang/String;)V"/>
-		<method name="setChoiceEntries(Landroid/content/Context;I)V"/>
-		<method name="setChoiceEntries([Ljava/lang/String;)V"/>
-		<method name="setChoiceValues(Landroid/content/Context;I)V"/>
-		<method name="setChoiceValues([Ljava/lang/String;)V"/>
-		<method name="setDescription(Ljava/lang/String;)V"/>
-		<method name="setIntValue(I)V" since="21"/>
-		<method name="setRestrictions([Landroid/content/RestrictionEntry;)V" since="23"/>
-		<method name="setSelectedState(Z)V"/>
-		<method name="setSelectedString(Ljava/lang/String;)V"/>
-		<method name="setTitle(Ljava/lang/String;)V"/>
-		<method name="setType(I)V"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_BOOLEAN"/>
-		<field name="TYPE_BUNDLE" since="23"/>
-		<field name="TYPE_BUNDLE_ARRAY" since="23"/>
-		<field name="TYPE_CHOICE"/>
-		<field name="TYPE_INTEGER" since="21"/>
-		<field name="TYPE_MULTI_SELECT"/>
-		<field name="TYPE_NULL"/>
-		<field name="TYPE_STRING" since="21"/>
-	</class>
-	<class name="android/content/RestrictionsManager" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="convertRestrictionsToBundle(Ljava/util/List;)Landroid/os/Bundle;" since="23"/>
-		<method name="createLocalApprovalIntent()Landroid/content/Intent;"/>
-		<method name="getApplicationRestrictions()Landroid/os/Bundle;"/>
-		<method name="getManifestRestrictions(Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="hasRestrictionsProvider()Z"/>
-		<method name="notifyPermissionResponse(Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
-		<method name="requestPermission(Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
-		<field name="ACTION_PERMISSION_RESPONSE_RECEIVED"/>
-		<field name="ACTION_REQUEST_LOCAL_APPROVAL"/>
-		<field name="ACTION_REQUEST_PERMISSION"/>
-		<field name="EXTRA_PACKAGE_NAME"/>
-		<field name="EXTRA_REQUEST_BUNDLE"/>
-		<field name="EXTRA_REQUEST_ID"/>
-		<field name="EXTRA_REQUEST_TYPE"/>
-		<field name="EXTRA_RESPONSE_BUNDLE"/>
-		<field name="META_DATA_APP_RESTRICTIONS"/>
-		<field name="REQUEST_KEY_APPROVE_LABEL"/>
-		<field name="REQUEST_KEY_DATA"/>
-		<field name="REQUEST_KEY_DENY_LABEL"/>
-		<field name="REQUEST_KEY_ICON"/>
-		<field name="REQUEST_KEY_ID"/>
-		<field name="REQUEST_KEY_MESSAGE"/>
-		<field name="REQUEST_KEY_NEW_REQUEST"/>
-		<field name="REQUEST_KEY_TITLE"/>
-		<field name="REQUEST_TYPE_APPROVAL"/>
-		<field name="RESPONSE_KEY_ERROR_CODE"/>
-		<field name="RESPONSE_KEY_MESSAGE"/>
-		<field name="RESPONSE_KEY_RESPONSE_TIMESTAMP"/>
-		<field name="RESPONSE_KEY_RESULT"/>
-		<field name="RESULT_APPROVED"/>
-		<field name="RESULT_DENIED"/>
-		<field name="RESULT_ERROR"/>
-		<field name="RESULT_ERROR_BAD_REQUEST"/>
-		<field name="RESULT_ERROR_INTERNAL"/>
-		<field name="RESULT_ERROR_NETWORK"/>
-		<field name="RESULT_NO_RESPONSE"/>
-		<field name="RESULT_UNKNOWN_REQUEST"/>
-	</class>
-	<class name="android/content/SearchRecentSuggestionsProvider" since="1">
-		<extends name="android/content/ContentProvider"/>
-		<method name="&lt;init>()V"/>
-		<method name="setupSuggestions(Ljava/lang/String;I)V"/>
-		<field name="DATABASE_MODE_2LINES"/>
-		<field name="DATABASE_MODE_QUERIES"/>
-	</class>
-	<class name="android/content/ServiceConnection" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onBindingDied(Landroid/content/ComponentName;)V" since="26"/>
-		<method name="onNullBinding(Landroid/content/ComponentName;)V" since="28"/>
-		<method name="onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V"/>
-		<method name="onServiceDisconnected(Landroid/content/ComponentName;)V"/>
-	</class>
-	<class name="android/content/SharedPreferences" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="contains(Ljava/lang/String;)Z"/>
-		<method name="edit()Landroid/content/SharedPreferences$Editor;"/>
-		<method name="getAll()Ljava/util/Map;"/>
-		<method name="getBoolean(Ljava/lang/String;Z)Z"/>
-		<method name="getFloat(Ljava/lang/String;F)F"/>
-		<method name="getInt(Ljava/lang/String;I)I"/>
-		<method name="getLong(Ljava/lang/String;J)J"/>
-		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;" since="11"/>
-		<method name="registerOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V"/>
-		<method name="unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V"/>
-	</class>
-	<class name="android/content/SharedPreferences$Editor" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="apply()V" since="9"/>
-		<method name="clear()Landroid/content/SharedPreferences$Editor;"/>
-		<method name="commit()Z"/>
-		<method name="putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;"/>
-		<method name="putFloat(Ljava/lang/String;F)Landroid/content/SharedPreferences$Editor;"/>
-		<method name="putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;"/>
-		<method name="putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;"/>
-		<method name="putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;"/>
-		<method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)Landroid/content/SharedPreferences$Editor;" since="11"/>
-		<method name="remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;"/>
-	</class>
-	<class name="android/content/SharedPreferences$OnSharedPreferenceChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/content/SyncAdapterType" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ZZ)V"/>
-		<method name="allowParallelSyncs()Z" since="11"/>
-		<method name="getSettingsActivity()Ljava/lang/String;" since="14"/>
-		<method name="isAlwaysSyncable()Z" since="11"/>
-		<method name="isUserVisible()Z"/>
-		<method name="newKey(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SyncAdapterType;"/>
-		<method name="supportsUploading()Z"/>
-		<field name="CREATOR"/>
-		<field name="accountType"/>
-		<field name="authority"/>
-		<field name="isKey"/>
-	</class>
-	<class name="android/content/SyncContext" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getSyncContextBinder()Landroid/os/IBinder;"/>
-		<method name="onFinished(Landroid/content/SyncResult;)V"/>
-	</class>
-	<class name="android/content/SyncInfo" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="11"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/SyncInfo;)V" since="29"/>
-		<field name="account"/>
-		<field name="authority"/>
-		<field name="startTime"/>
-	</class>
-	<class name="android/content/SyncRequest" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/SyncRequest$Builder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/content/SyncRequest;"/>
-		<method name="setDisallowMetered(Z)Landroid/content/SyncRequest$Builder;"/>
-		<method name="setExpedited(Z)Landroid/content/SyncRequest$Builder;"/>
-		<method name="setExtras(Landroid/os/Bundle;)Landroid/content/SyncRequest$Builder;"/>
-		<method name="setIgnoreBackoff(Z)Landroid/content/SyncRequest$Builder;"/>
-		<method name="setIgnoreSettings(Z)Landroid/content/SyncRequest$Builder;"/>
-		<method name="setManual(Z)Landroid/content/SyncRequest$Builder;"/>
-		<method name="setNoRetry(Z)Landroid/content/SyncRequest$Builder;"/>
-		<method name="setRequiresCharging(Z)Landroid/content/SyncRequest$Builder;" since="24"/>
-		<method name="setSyncAdapter(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncRequest$Builder;"/>
-		<method name="syncOnce()Landroid/content/SyncRequest$Builder;"/>
-		<method name="syncPeriodic(JJ)Landroid/content/SyncRequest$Builder;"/>
-	</class>
-	<class name="android/content/SyncResult" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="clear()V"/>
-		<method name="hasError()Z"/>
-		<method name="hasHardError()Z"/>
-		<method name="hasSoftError()Z"/>
-		<method name="madeSomeProgress()Z"/>
-		<method name="toDebugString()Ljava/lang/String;"/>
-		<field name="ALREADY_IN_PROGRESS"/>
-		<field name="CREATOR"/>
-		<field name="databaseError"/>
-		<field name="delayUntil" since="8"/>
-		<field name="fullSyncRequested"/>
-		<field name="moreRecordsToGet"/>
-		<field name="partialSyncUnavailable"/>
-		<field name="stats"/>
-		<field name="syncAlreadyInProgress"/>
-		<field name="tooManyDeletions"/>
-		<field name="tooManyRetries"/>
-	</class>
-	<class name="android/content/SyncStats" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="clear()V"/>
-		<field name="CREATOR"/>
-		<field name="numAuthExceptions"/>
-		<field name="numConflictDetectedExceptions"/>
-		<field name="numDeletes"/>
-		<field name="numEntries"/>
-		<field name="numInserts"/>
-		<field name="numIoExceptions"/>
-		<field name="numParseExceptions"/>
-		<field name="numSkippedEntries"/>
-		<field name="numUpdates"/>
-	</class>
-	<class name="android/content/SyncStatusObserver" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="onStatusChanged(I)V"/>
-	</class>
-	<class name="android/content/UriMatcher" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="addURI(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="match(Landroid/net/Uri;)I"/>
-		<field name="NO_MATCH"/>
-	</class>
-	<class name="android/content/UriPermission" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getPersistedTime()J"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-		<method name="isReadPermission()Z"/>
-		<method name="isWritePermission()Z"/>
-		<field name="CREATOR"/>
-		<field name="INVALID_TIME"/>
-	</class>
-	<class name="android/content/pm/ActivityInfo" since="1">
-		<extends name="android/content/pm/ComponentInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/ActivityInfo;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getThemeResource()I"/>
-		<field name="COLOR_MODE_DEFAULT" since="26"/>
-		<field name="COLOR_MODE_HDR" since="26"/>
-		<field name="COLOR_MODE_WIDE_COLOR_GAMUT" since="26"/>
-		<field name="CONFIG_COLOR_MODE" since="26"/>
-		<field name="CONFIG_DENSITY" since="17"/>
-		<field name="CONFIG_FONT_SCALE"/>
-		<field name="CONFIG_KEYBOARD"/>
-		<field name="CONFIG_KEYBOARD_HIDDEN"/>
-		<field name="CONFIG_LAYOUT_DIRECTION" since="17"/>
-		<field name="CONFIG_LOCALE"/>
-		<field name="CONFIG_MCC"/>
-		<field name="CONFIG_MNC"/>
-		<field name="CONFIG_NAVIGATION"/>
-		<field name="CONFIG_ORIENTATION"/>
-		<field name="CONFIG_SCREEN_LAYOUT" since="4"/>
-		<field name="CONFIG_SCREEN_SIZE" since="13"/>
-		<field name="CONFIG_SMALLEST_SCREEN_SIZE" since="13"/>
-		<field name="CONFIG_TOUCHSCREEN"/>
-		<field name="CONFIG_UI_MODE" since="8"/>
-		<field name="CREATOR"/>
-		<field name="DOCUMENT_LAUNCH_ALWAYS" since="21"/>
-		<field name="DOCUMENT_LAUNCH_INTO_EXISTING" since="21"/>
-		<field name="DOCUMENT_LAUNCH_NEVER" since="21"/>
-		<field name="DOCUMENT_LAUNCH_NONE" since="21"/>
-		<field name="FLAG_ALLOW_TASK_REPARENTING"/>
-		<field name="FLAG_ALWAYS_RETAIN_TASK_STATE"/>
-		<field name="FLAG_AUTO_REMOVE_FROM_RECENTS" since="21"/>
-		<field name="FLAG_CLEAR_TASK_ON_LAUNCH"/>
-		<field name="FLAG_ENABLE_VR_MODE" since="24"/>
-		<field name="FLAG_EXCLUDE_FROM_RECENTS"/>
-		<field name="FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS" since="5"/>
-		<field name="FLAG_FINISH_ON_TASK_LAUNCH"/>
-		<field name="FLAG_HARDWARE_ACCELERATED" since="11"/>
-		<field name="FLAG_IMMERSIVE" since="18"/>
-		<field name="FLAG_MULTIPROCESS"/>
-		<field name="FLAG_NO_HISTORY" since="3"/>
-		<field name="FLAG_RELINQUISH_TASK_IDENTITY" since="21"/>
-		<field name="FLAG_RESUME_WHILE_PAUSING" since="21"/>
-		<field name="FLAG_SINGLE_USER" since="17"/>
-		<field name="FLAG_STATE_NOT_NEEDED"/>
-		<field name="LAUNCH_MULTIPLE"/>
-		<field name="LAUNCH_SINGLE_INSTANCE"/>
-		<field name="LAUNCH_SINGLE_TASK"/>
-		<field name="LAUNCH_SINGLE_TOP"/>
-		<field name="PERSIST_ACROSS_REBOOTS" since="21"/>
-		<field name="PERSIST_NEVER" since="21"/>
-		<field name="PERSIST_ROOT_ONLY" since="21"/>
-		<field name="SCREEN_ORIENTATION_BEHIND"/>
-		<field name="SCREEN_ORIENTATION_FULL_SENSOR" since="9"/>
-		<field name="SCREEN_ORIENTATION_FULL_USER" since="18"/>
-		<field name="SCREEN_ORIENTATION_LANDSCAPE"/>
-		<field name="SCREEN_ORIENTATION_LOCKED" since="18"/>
-		<field name="SCREEN_ORIENTATION_NOSENSOR"/>
-		<field name="SCREEN_ORIENTATION_PORTRAIT"/>
-		<field name="SCREEN_ORIENTATION_REVERSE_LANDSCAPE" since="9"/>
-		<field name="SCREEN_ORIENTATION_REVERSE_PORTRAIT" since="9"/>
-		<field name="SCREEN_ORIENTATION_SENSOR"/>
-		<field name="SCREEN_ORIENTATION_SENSOR_LANDSCAPE" since="9"/>
-		<field name="SCREEN_ORIENTATION_SENSOR_PORTRAIT" since="9"/>
-		<field name="SCREEN_ORIENTATION_UNSPECIFIED"/>
-		<field name="SCREEN_ORIENTATION_USER"/>
-		<field name="SCREEN_ORIENTATION_USER_LANDSCAPE" since="18"/>
-		<field name="SCREEN_ORIENTATION_USER_PORTRAIT" since="18"/>
-		<field name="UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" since="14"/>
-		<field name="colorMode" since="26"/>
-		<field name="configChanges"/>
-		<field name="documentLaunchMode" since="21"/>
-		<field name="flags"/>
-		<field name="launchMode"/>
-		<field name="maxRecents" since="21"/>
-		<field name="parentActivityName" since="16"/>
-		<field name="permission"/>
-		<field name="persistableMode" since="21"/>
-		<field name="screenOrientation"/>
-		<field name="softInputMode" since="3"/>
-		<field name="targetActivity"/>
-		<field name="taskAffinity"/>
-		<field name="theme"/>
-		<field name="uiOptions" since="14"/>
-		<field name="windowLayout" since="24"/>
-	</class>
-	<class name="android/content/pm/ActivityInfo$WindowLayout" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IFIFIII)V"/>
-		<field name="gravity"/>
-		<field name="height"/>
-		<field name="heightFraction"/>
-		<field name="minHeight"/>
-		<field name="minWidth"/>
-		<field name="width"/>
-		<field name="widthFraction"/>
-	</class>
-	<class name="android/content/pm/ApplicationInfo" since="1">
-		<extends name="android/content/pm/PackageItemInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/ApplicationInfo;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getCategoryTitle(Landroid/content/Context;I)Ljava/lang/CharSequence;" since="26"/>
-		<method name="isVirtualPreload()Z" since="27"/>
-		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<field name="CATEGORY_AUDIO" since="26"/>
-		<field name="CATEGORY_GAME" since="26"/>
-		<field name="CATEGORY_IMAGE" since="26"/>
-		<field name="CATEGORY_MAPS" since="26"/>
-		<field name="CATEGORY_NEWS" since="26"/>
-		<field name="CATEGORY_PRODUCTIVITY" since="26"/>
-		<field name="CATEGORY_SOCIAL" since="26"/>
-		<field name="CATEGORY_UNDEFINED" since="26"/>
-		<field name="CATEGORY_VIDEO" since="26"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_ALLOW_BACKUP" since="8"/>
-		<field name="FLAG_ALLOW_CLEAR_USER_DATA"/>
-		<field name="FLAG_ALLOW_TASK_REPARENTING"/>
-		<field name="FLAG_DEBUGGABLE"/>
-		<field name="FLAG_EXTERNAL_STORAGE" since="8"/>
-		<field name="FLAG_EXTRACT_NATIVE_LIBS" since="23"/>
-		<field name="FLAG_FACTORY_TEST"/>
-		<field name="FLAG_FULL_BACKUP_ONLY" since="21"/>
-		<field name="FLAG_HARDWARE_ACCELERATED" since="23"/>
-		<field name="FLAG_HAS_CODE"/>
-		<field name="FLAG_INSTALLED" since="17"/>
-		<field name="FLAG_IS_DATA_ONLY" since="17"/>
-		<field name="FLAG_IS_GAME" since="21" deprecated="26"/>
-		<field name="FLAG_KILL_AFTER_RESTORE" since="8"/>
-		<field name="FLAG_LARGE_HEAP" since="11"/>
-		<field name="FLAG_MULTIARCH" since="21"/>
-		<field name="FLAG_PERSISTENT"/>
-		<field name="FLAG_RESIZEABLE_FOR_SCREENS" since="4"/>
-		<field name="FLAG_RESTORE_ANY_VERSION" since="8"/>
-		<field name="FLAG_STOPPED" since="12"/>
-		<field name="FLAG_SUPPORTS_LARGE_SCREENS" since="4"/>
-		<field name="FLAG_SUPPORTS_NORMAL_SCREENS" since="4"/>
-		<field name="FLAG_SUPPORTS_RTL" since="17"/>
-		<field name="FLAG_SUPPORTS_SCREEN_DENSITIES" since="4"/>
-		<field name="FLAG_SUPPORTS_SMALL_SCREENS" since="4"/>
-		<field name="FLAG_SUPPORTS_XLARGE_SCREENS" since="11"/>
-		<field name="FLAG_SUSPENDED" since="24"/>
-		<field name="FLAG_SYSTEM"/>
-		<field name="FLAG_TEST_ONLY" since="4"/>
-		<field name="FLAG_UPDATED_SYSTEM_APP" since="4"/>
-		<field name="FLAG_USES_CLEARTEXT_TRAFFIC" since="23"/>
-		<field name="FLAG_VM_SAFE_MODE" since="8"/>
-		<field name="appComponentFactory" since="28"/>
-		<field name="backupAgentName" since="8"/>
-		<field name="category" since="26"/>
-		<field name="className"/>
-		<field name="compatibleWidthLimitDp" since="13"/>
-		<field name="dataDir"/>
-		<field name="descriptionRes"/>
-		<field name="deviceProtectedDataDir" since="24"/>
-		<field name="enabled"/>
-		<field name="flags"/>
-		<field name="largestWidthLimitDp" since="13"/>
-		<field name="manageSpaceActivityName"/>
-		<field name="minSdkVersion" since="24"/>
-		<field name="nativeLibraryDir" since="9"/>
-		<field name="permission"/>
-		<field name="processName"/>
-		<field name="publicSourceDir"/>
-		<field name="requiresSmallestWidthDp" since="13"/>
-		<field name="sharedLibraryFiles"/>
-		<field name="sourceDir"/>
-		<field name="splitNames" since="26"/>
-		<field name="splitPublicSourceDirs" since="21"/>
-		<field name="splitSourceDirs" since="21"/>
-		<field name="storageUuid" since="26"/>
-		<field name="targetSdkVersion" since="4"/>
-		<field name="taskAffinity"/>
-		<field name="theme"/>
-		<field name="uiOptions" since="14"/>
-		<field name="uid"/>
-	</class>
-	<class name="android/content/pm/ApplicationInfo$DisplayNameComparator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Comparator"/>
-		<method name="&lt;init>(Landroid/content/pm/PackageManager;)V"/>
-		<method name="compare(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;)I"/>
-	</class>
-	<class name="android/content/pm/ChangedPackages" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ILjava/util/List;)V"/>
-		<method name="getPackageNames()Ljava/util/List;"/>
-		<method name="getSequenceNumber()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/pm/ComponentInfo" since="1">
-		<extends name="android/content/pm/PackageItemInfo"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/ComponentInfo;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="getBannerResource()I" since="20"/>
-		<method name="getIconResource()I"/>
-		<method name="getLogoResource()I" since="19"/>
-		<method name="isEnabled()Z" since="11"/>
-		<field name="applicationInfo"/>
-		<field name="descriptionRes" since="8"/>
-		<field name="directBootAware" since="24"/>
-		<field name="enabled"/>
-		<field name="exported"/>
-		<field name="processName"/>
-		<field name="splitName" since="26"/>
-	</class>
-	<class name="android/content/pm/ConfigurationInfo" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/ConfigurationInfo;)V"/>
-		<method name="getGlEsVersion()Ljava/lang/String;" since="4"/>
-		<field name="CREATOR"/>
-		<field name="GL_ES_VERSION_UNDEFINED" since="4"/>
-		<field name="INPUT_FEATURE_FIVE_WAY_NAV"/>
-		<field name="INPUT_FEATURE_HARD_KEYBOARD"/>
-		<field name="reqGlEsVersion" since="4"/>
-		<field name="reqInputFeatures"/>
-		<field name="reqKeyboardType"/>
-		<field name="reqNavigation"/>
-		<field name="reqTouchScreen"/>
-	</class>
-	<class name="android/content/pm/CrossProfileApps" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getProfileSwitchingIconDrawable(Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getProfileSwitchingLabel(Landroid/os/UserHandle;)Ljava/lang/CharSequence;"/>
-		<method name="getTargetUserProfiles()Ljava/util/List;"/>
-		<method name="startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;)V"/>
-	</class>
-	<class name="android/content/pm/FeatureGroupInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/FeatureGroupInfo;)V"/>
-		<field name="CREATOR"/>
-		<field name="features"/>
-	</class>
-	<class name="android/content/pm/FeatureInfo" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/FeatureInfo;)V"/>
-		<method name="getGlEsVersion()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_REQUIRED"/>
-		<field name="GL_ES_VERSION_UNDEFINED"/>
-		<field name="flags"/>
-		<field name="name"/>
-		<field name="reqGlEsVersion"/>
-		<field name="version" since="24"/>
-	</class>
-	<class name="android/content/pm/IPackageInstallObserver" since="1" removed="4">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/IInterface"/>
-		<method name="packageInstalled(Ljava/lang/String;I)V"/>
-	</class>
-	<class name="android/content/pm/IPackageInstallObserver$Stub" since="1" removed="4">
-		<extends name="android/os/Binder"/>
-		<implements name="android/content/pm/IPackageInstallObserver"/>
-		<method name="&lt;init>()V"/>
-		<method name="asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallObserver;"/>
-	</class>
-	<class name="android/content/pm/InstrumentationInfo" since="1">
-		<extends name="android/content/pm/PackageItemInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/InstrumentationInfo;)V"/>
-		<field name="CREATOR"/>
-		<field name="dataDir"/>
-		<field name="functionalTest"/>
-		<field name="handleProfiling"/>
-		<field name="publicSourceDir"/>
-		<field name="sourceDir"/>
-		<field name="splitNames" since="26"/>
-		<field name="splitPublicSourceDirs" since="21"/>
-		<field name="splitSourceDirs" since="21"/>
-		<field name="targetPackage"/>
-		<field name="targetProcesses" since="26"/>
-	</class>
-	<class name="android/content/pm/LabeledIntent" since="5">
-		<extends name="android/content/Intent"/>
-		<method name="&lt;init>(Landroid/content/Intent;Ljava/lang/String;II)V"/>
-		<method name="&lt;init>(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;II)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
-		<method name="getIconResource()I"/>
-		<method name="getLabelResource()I"/>
-		<method name="getNonLocalizedLabel()Ljava/lang/CharSequence;"/>
-		<method name="getSourcePackage()Ljava/lang/String;"/>
-		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/pm/LauncherActivityInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="getApplicationInfo()Landroid/content/pm/ApplicationInfo;"/>
-		<method name="getBadgedIcon(I)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getComponentName()Landroid/content/ComponentName;"/>
-		<method name="getFirstInstallTime()J"/>
-		<method name="getIcon(I)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getUser()Landroid/os/UserHandle;"/>
-	</class>
-	<class name="android/content/pm/LauncherApps" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="getActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;"/>
-		<method name="getApplicationInfo(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;" since="26"/>
-		<method name="getPinItemRequest(Landroid/content/Intent;)Landroid/content/pm/LauncherApps$PinItemRequest;" since="26"/>
-		<method name="getProfiles()Ljava/util/List;" since="26"/>
-		<method name="getShortcutBadgedIconDrawable(Landroid/content/pm/ShortcutInfo;I)Landroid/graphics/drawable/Drawable;" since="25"/>
-		<method name="getShortcutConfigActivityIntent(Landroid/content/pm/LauncherActivityInfo;)Landroid/content/IntentSender;" since="26"/>
-		<method name="getShortcutConfigActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
-		<method name="getShortcutIconDrawable(Landroid/content/pm/ShortcutInfo;I)Landroid/graphics/drawable/Drawable;" since="25"/>
-		<method name="getShortcuts(Landroid/content/pm/LauncherApps$ShortcutQuery;Landroid/os/UserHandle;)Ljava/util/List;" since="25"/>
-		<method name="getSuspendedPackageLauncherExtras(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;" since="28"/>
-		<method name="hasShortcutHostPermission()Z" since="25"/>
-		<method name="isActivityEnabled(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z"/>
-		<method name="isPackageEnabled(Ljava/lang/String;Landroid/os/UserHandle;)Z"/>
-		<method name="pinShortcuts(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V" since="25"/>
-		<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;)V"/>
-		<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;Landroid/os/Handler;)V"/>
-		<method name="resolveActivity(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/LauncherActivityInfo;"/>
-		<method name="startAppDetailsActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V"/>
-		<method name="startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V"/>
-		<method name="startShortcut(Landroid/content/pm/ShortcutInfo;Landroid/graphics/Rect;Landroid/os/Bundle;)V" since="25"/>
-		<method name="startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V" since="25"/>
-		<method name="unregisterCallback(Landroid/content/pm/LauncherApps$Callback;)V"/>
-		<field name="ACTION_CONFIRM_PIN_APPWIDGET" since="26"/>
-		<field name="ACTION_CONFIRM_PIN_SHORTCUT" since="26"/>
-		<field name="EXTRA_PIN_ITEM_REQUEST" since="26"/>
-	</class>
-	<class name="android/content/pm/LauncherApps$Callback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onPackageAdded(Ljava/lang/String;Landroid/os/UserHandle;)V"/>
-		<method name="onPackageChanged(Ljava/lang/String;Landroid/os/UserHandle;)V"/>
-		<method name="onPackageRemoved(Ljava/lang/String;Landroid/os/UserHandle;)V"/>
-		<method name="onPackagesAvailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V"/>
-		<method name="onPackagesSuspended([Ljava/lang/String;Landroid/os/UserHandle;)V" since="24"/>
-		<method name="onPackagesSuspended([Ljava/lang/String;Landroid/os/UserHandle;Landroid/os/Bundle;)V" since="28"/>
-		<method name="onPackagesUnavailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V"/>
-		<method name="onPackagesUnsuspended([Ljava/lang/String;Landroid/os/UserHandle;)V" since="24"/>
-		<method name="onShortcutsChanged(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V" since="25"/>
-	</class>
-	<class name="android/content/pm/LauncherApps$PinItemRequest" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="accept()Z"/>
-		<method name="accept(Landroid/os/Bundle;)Z"/>
-		<method name="getAppWidgetProviderInfo(Landroid/content/Context;)Landroid/appwidget/AppWidgetProviderInfo;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getRequestType()I"/>
-		<method name="getShortcutInfo()Landroid/content/pm/ShortcutInfo;"/>
-		<method name="isValid()Z"/>
-		<field name="CREATOR"/>
-		<field name="REQUEST_TYPE_APPWIDGET"/>
-		<field name="REQUEST_TYPE_SHORTCUT"/>
-	</class>
-	<class name="android/content/pm/LauncherApps$ShortcutQuery" since="25">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="setActivity(Landroid/content/ComponentName;)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
-		<method name="setChangedSince(J)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
-		<method name="setPackage(Ljava/lang/String;)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
-		<method name="setQueryFlags(I)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
-		<method name="setShortcutIds(Ljava/util/List;)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
-		<field name="FLAG_GET_KEY_FIELDS_ONLY"/>
-		<field name="FLAG_MATCH_DYNAMIC"/>
-		<field name="FLAG_MATCH_MANIFEST"/>
-		<field name="FLAG_MATCH_PINNED"/>
-		<field name="FLAG_MATCH_PINNED_BY_ANY_LAUNCHER" since="28"/>
-	</class>
-	<class name="android/content/pm/PackageInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getLongVersionCode()J" since="28"/>
-		<method name="setLongVersionCode(J)V" since="28"/>
-		<field name="CREATOR"/>
-		<field name="INSTALL_LOCATION_AUTO" since="21"/>
-		<field name="INSTALL_LOCATION_INTERNAL_ONLY" since="21"/>
-		<field name="INSTALL_LOCATION_PREFER_EXTERNAL" since="21"/>
-		<field name="REQUESTED_PERMISSION_GRANTED" since="16"/>
-		<field name="REQUESTED_PERMISSION_REQUIRED" since="16" removed="23"/>
-		<field name="activities"/>
-		<field name="applicationInfo"/>
-		<field name="baseRevisionCode" since="22"/>
-		<field name="configPreferences" since="3"/>
-		<field name="featureGroups" since="21"/>
-		<field name="firstInstallTime" since="9"/>
-		<field name="gids"/>
-		<field name="installLocation" since="21"/>
-		<field name="instrumentation"/>
-		<field name="lastUpdateTime" since="9"/>
-		<field name="packageName"/>
-		<field name="permissions"/>
-		<field name="providers"/>
-		<field name="receivers"/>
-		<field name="reqFeatures" since="5"/>
-		<field name="requestedPermissions"/>
-		<field name="requestedPermissionsFlags" since="16"/>
-		<field name="services"/>
-		<field name="sharedUserId" since="3"/>
-		<field name="sharedUserLabel" since="3"/>
-		<field name="signatures" deprecated="28"/>
-		<field name="signingInfo" since="28"/>
-		<field name="splitNames" since="21"/>
-		<field name="splitRevisionCodes" since="22"/>
-		<field name="versionCode" deprecated="28"/>
-		<field name="versionName"/>
-	</class>
-	<class name="android/content/pm/PackageInstaller" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="abandonSession(I)V"/>
-		<method name="createSession(Landroid/content/pm/PackageInstaller$SessionParams;)I"/>
-		<method name="getAllSessions()Ljava/util/List;"/>
-		<method name="getMySessions()Ljava/util/List;"/>
-		<method name="getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;"/>
-		<method name="openSession(I)Landroid/content/pm/PackageInstaller$Session;"/>
-		<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V"/>
-		<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;Landroid/os/Handler;)V"/>
-		<method name="uninstall(Landroid/content/pm/VersionedPackage;Landroid/content/IntentSender;)V" since="26"/>
-		<method name="uninstall(Ljava/lang/String;Landroid/content/IntentSender;)V"/>
-		<method name="unregisterSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V"/>
-		<method name="updateSessionAppIcon(ILandroid/graphics/Bitmap;)V"/>
-		<method name="updateSessionAppLabel(ILjava/lang/CharSequence;)V"/>
-		<field name="ACTION_SESSION_COMMITTED" since="26"/>
-		<field name="ACTION_SESSION_DETAILS"/>
-		<field name="EXTRA_OTHER_PACKAGE_NAME"/>
-		<field name="EXTRA_PACKAGE_NAME"/>
-		<field name="EXTRA_SESSION" since="26"/>
-		<field name="EXTRA_SESSION_ID"/>
-		<field name="EXTRA_STATUS"/>
-		<field name="EXTRA_STATUS_MESSAGE"/>
-		<field name="EXTRA_STORAGE_PATH"/>
-		<field name="STATUS_FAILURE"/>
-		<field name="STATUS_FAILURE_ABORTED"/>
-		<field name="STATUS_FAILURE_BLOCKED"/>
-		<field name="STATUS_FAILURE_CONFLICT"/>
-		<field name="STATUS_FAILURE_INCOMPATIBLE"/>
-		<field name="STATUS_FAILURE_INVALID"/>
-		<field name="STATUS_FAILURE_STORAGE"/>
-		<field name="STATUS_PENDING_USER_ACTION"/>
-		<field name="STATUS_SUCCESS"/>
-	</class>
-	<class name="android/content/pm/PackageInstaller$Session" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V"/>
-		<method name="abandon()V"/>
-		<method name="commit(Landroid/content/IntentSender;)V"/>
-		<method name="fsync(Ljava/io/OutputStream;)V"/>
-		<method name="getNames()[Ljava/lang/String;"/>
-		<method name="openRead(Ljava/lang/String;)Ljava/io/InputStream;"/>
-		<method name="openWrite(Ljava/lang/String;JJ)Ljava/io/OutputStream;"/>
-		<method name="removeSplit(Ljava/lang/String;)V" since="24"/>
-		<method name="setStagingProgress(F)V"/>
-		<method name="transfer(Ljava/lang/String;)V" since="27"/>
-	</class>
-	<class name="android/content/pm/PackageInstaller$SessionCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onActiveChanged(IZ)V"/>
-		<method name="onBadgingChanged(I)V"/>
-		<method name="onCreated(I)V"/>
-		<method name="onFinished(IZ)V"/>
-		<method name="onProgressChanged(IF)V"/>
-	</class>
-	<class name="android/content/pm/PackageInstaller$SessionInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="createDetailsIntent()Landroid/content/Intent;"/>
-		<method name="getAppIcon()Landroid/graphics/Bitmap;"/>
-		<method name="getAppLabel()Ljava/lang/CharSequence;"/>
-		<method name="getAppPackageName()Ljava/lang/String;"/>
-		<method name="getInstallLocation()I" since="27"/>
-		<method name="getInstallReason()I" since="26"/>
-		<method name="getInstallerPackageName()Ljava/lang/String;"/>
-		<method name="getMode()I" since="27"/>
-		<method name="getOriginatingUid()I" since="27"/>
-		<method name="getOriginatingUri()Landroid/net/Uri;" since="27"/>
-		<method name="getProgress()F"/>
-		<method name="getReferrerUri()Landroid/net/Uri;" since="27"/>
-		<method name="getSessionId()I"/>
-		<method name="getSize()J" since="27"/>
-		<method name="isActive()Z"/>
-		<method name="isSealed()Z" since="26"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/pm/PackageInstaller$SessionParams" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="setAppIcon(Landroid/graphics/Bitmap;)V"/>
-		<method name="setAppLabel(Ljava/lang/CharSequence;)V"/>
-		<method name="setAppPackageName(Ljava/lang/String;)V"/>
-		<method name="setInstallLocation(I)V"/>
-		<method name="setInstallReason(I)V" since="26"/>
-		<method name="setOriginatingUid(I)V" since="24"/>
-		<method name="setOriginatingUri(Landroid/net/Uri;)V"/>
-		<method name="setReferrerUri(Landroid/net/Uri;)V"/>
-		<method name="setSize(J)V"/>
-		<field name="CREATOR"/>
-		<field name="MODE_FULL_INSTALL"/>
-		<field name="MODE_INHERIT_EXISTING"/>
-	</class>
-	<class name="android/content/pm/PackageItemInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/PackageItemInfo;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="dumpBack(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="dumpFront(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="loadBanner(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="20"/>
-		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<method name="loadLogo(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="9"/>
-		<method name="loadUnbadgedIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="22"/>
-		<method name="loadXmlMetaData(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;"/>
-		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
-		<field name="banner" since="20"/>
-		<field name="icon"/>
-		<field name="labelRes"/>
-		<field name="logo" since="9"/>
-		<field name="metaData"/>
-		<field name="name"/>
-		<field name="nonLocalizedLabel"/>
-		<field name="packageName"/>
-	</class>
-	<class name="android/content/pm/PackageItemInfo$DisplayNameComparator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Comparator"/>
-		<method name="&lt;init>(Landroid/content/pm/PackageManager;)V"/>
-		<method name="compare(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/PackageItemInfo;)I"/>
-	</class>
-	<class name="android/content/pm/PackageManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPackageToPreferred(Ljava/lang/String;)V" deprecated="16"/>
-		<method name="addPermission(Landroid/content/pm/PermissionInfo;)Z"/>
-		<method name="addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z" since="8"/>
-		<method name="addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V" deprecated="16"/>
-		<method name="canRequestPackageInstalls()Z" since="26"/>
-		<method name="canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8"/>
-		<method name="checkPermission(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="checkSignatures(II)I" since="5"/>
-		<method name="checkSignatures(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="clearInstantAppCookie()V" since="26"/>
-		<method name="clearPackagePreferredActivities(Ljava/lang/String;)V"/>
-		<method name="currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8"/>
-		<method name="extendVerificationTimeout(IIJ)V" since="17"/>
-		<method name="getActivityBanner(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" since="20"/>
-		<method name="getActivityBanner(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;" since="20"/>
-		<method name="getActivityIcon(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getActivityIcon(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getActivityInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;"/>
-		<method name="getActivityLogo(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" since="9"/>
-		<method name="getActivityLogo(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;" since="9"/>
-		<method name="getAllPermissionGroups(I)Ljava/util/List;"/>
-		<method name="getApplicationBanner(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" since="20"/>
-		<method name="getApplicationBanner(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="20"/>
-		<method name="getApplicationEnabledSetting(Ljava/lang/String;)I"/>
-		<method name="getApplicationIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getApplicationIcon(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;"/>
-		<method name="getApplicationLabel(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;"/>
-		<method name="getApplicationLogo(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" since="9"/>
-		<method name="getApplicationLogo(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="9"/>
-		<method name="getChangedPackages(I)Landroid/content/pm/ChangedPackages;" since="26"/>
-		<method name="getComponentEnabledSetting(Landroid/content/ComponentName;)I"/>
-		<method name="getDefaultActivityIcon()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getDrawable(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getInstalledApplications(I)Ljava/util/List;"/>
-		<method name="getInstalledPackages(I)Ljava/util/List;"/>
-		<method name="getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;" since="5"/>
-		<method name="getInstantAppCookie()[B" since="26"/>
-		<method name="getInstantAppCookieMaxBytes()I" since="26"/>
-		<method name="getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;"/>
-		<method name="getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="3"/>
-		<method name="getLeanbackLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="21"/>
-		<method name="getNameForUid(I)Ljava/lang/String;"/>
-		<method name="getPackageArchiveInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"/>
-		<method name="getPackageGids(Ljava/lang/String;)[I"/>
-		<method name="getPackageGids(Ljava/lang/String;I)[I" since="24"/>
-		<method name="getPackageInfo(Landroid/content/pm/VersionedPackage;I)Landroid/content/pm/PackageInfo;" since="26"/>
-		<method name="getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"/>
-		<method name="getPackageInstaller()Landroid/content/pm/PackageInstaller;" since="21"/>
-		<method name="getPackageUid(Ljava/lang/String;I)I" since="24"/>
-		<method name="getPackagesForUid(I)[Ljava/lang/String;"/>
-		<method name="getPackagesHoldingPermissions([Ljava/lang/String;I)Ljava/util/List;" since="18"/>
-		<method name="getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;"/>
-		<method name="getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;"/>
-		<method name="getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I"/>
-		<method name="getPreferredPackages(I)Ljava/util/List;"/>
-		<method name="getProviderInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ProviderInfo;" since="9"/>
-		<method name="getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;"/>
-		<method name="getResourcesForActivity(Landroid/content/ComponentName;)Landroid/content/res/Resources;"/>
-		<method name="getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;"/>
-		<method name="getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;"/>
-		<method name="getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;"/>
-		<method name="getSharedLibraries(I)Ljava/util/List;" since="26"/>
-		<method name="getSuspendedPackageAppExtras()Landroid/os/Bundle;" since="28"/>
-		<method name="getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;" since="5"/>
-		<method name="getSystemSharedLibraryNames()[Ljava/lang/String;" since="3"/>
-		<method name="getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;"/>
-		<method name="getUserBadgedDrawableForDensity(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;Landroid/graphics/Rect;I)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="getUserBadgedLabel(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence;" since="21"/>
-		<method name="getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;"/>
-		<method name="hasSigningCertificate(I[BI)Z" since="28"/>
-		<method name="hasSigningCertificate(Ljava/lang/String;[BI)Z" since="28"/>
-		<method name="hasSystemFeature(Ljava/lang/String;)Z" since="5"/>
-		<method name="hasSystemFeature(Ljava/lang/String;I)Z" since="24"/>
-		<method name="installPackage(Landroid/net/Uri;)V" removed="4"/>
-		<method name="installPackage(Landroid/net/Uri;Landroid/content/pm/IPackageInstallObserver;I)V" removed="4"/>
-		<method name="isInstantApp()Z" since="26"/>
-		<method name="isInstantApp(Ljava/lang/String;)Z" since="26"/>
-		<method name="isPackageSuspended()Z" since="28"/>
-		<method name="isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;)Z" since="23"/>
-		<method name="isSafeMode()Z" since="3"/>
-		<method name="queryBroadcastReceivers(Landroid/content/Intent;I)Ljava/util/List;"/>
-		<method name="queryContentProviders(Ljava/lang/String;II)Ljava/util/List;"/>
-		<method name="queryInstrumentation(Ljava/lang/String;I)Ljava/util/List;"/>
-		<method name="queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;"/>
-		<method name="queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I)Ljava/util/List;"/>
-		<method name="queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;" since="19"/>
-		<method name="queryIntentServices(Landroid/content/Intent;I)Ljava/util/List;"/>
-		<method name="queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;"/>
-		<method name="removePackageFromPreferred(Ljava/lang/String;)V" deprecated="16"/>
-		<method name="removePermission(Ljava/lang/String;)V"/>
-		<method name="resolveActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;"/>
-		<method name="resolveContentProvider(Ljava/lang/String;I)Landroid/content/pm/ProviderInfo;"/>
-		<method name="resolveService(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;"/>
-		<method name="setApplicationCategoryHint(Ljava/lang/String;I)V" since="26"/>
-		<method name="setApplicationEnabledSetting(Ljava/lang/String;II)V"/>
-		<method name="setComponentEnabledSetting(Landroid/content/ComponentName;II)V"/>
-		<method name="setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V" since="11"/>
-		<method name="updateInstantAppCookie([B)V" since="26"/>
-		<method name="verifyPendingInstall(II)V" since="14"/>
-		<field name="CERT_INPUT_RAW_X509" since="28"/>
-		<field name="CERT_INPUT_SHA256" since="28"/>
-		<field name="COMPONENT_ENABLED_STATE_DEFAULT"/>
-		<field name="COMPONENT_ENABLED_STATE_DISABLED"/>
-		<field name="COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED" since="18"/>
-		<field name="COMPONENT_ENABLED_STATE_DISABLED_USER" since="14"/>
-		<field name="COMPONENT_ENABLED_STATE_ENABLED"/>
-		<field name="DONT_KILL_APP"/>
-		<field name="EXTRA_VERIFICATION_ID" since="14"/>
-		<field name="EXTRA_VERIFICATION_RESULT" since="17"/>
-		<field name="FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS" since="26"/>
-		<field name="FEATURE_APP_WIDGETS" since="18"/>
-		<field name="FEATURE_AUDIO_LOW_LATENCY" since="9"/>
-		<field name="FEATURE_AUDIO_OUTPUT" since="21"/>
-		<field name="FEATURE_AUDIO_PRO" since="23"/>
-		<field name="FEATURE_AUTOFILL" since="26"/>
-		<field name="FEATURE_AUTOMOTIVE" since="23"/>
-		<field name="FEATURE_BACKUP" since="20"/>
-		<field name="FEATURE_BLUETOOTH" since="8"/>
-		<field name="FEATURE_BLUETOOTH_LE" since="18"/>
-		<field name="FEATURE_CAMERA" since="7"/>
-		<field name="FEATURE_CAMERA_ANY" since="17"/>
-		<field name="FEATURE_CAMERA_AR" since="28"/>
-		<field name="FEATURE_CAMERA_AUTOFOCUS" since="7"/>
-		<field name="FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING" since="21"/>
-		<field name="FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR" since="21"/>
-		<field name="FEATURE_CAMERA_CAPABILITY_RAW" since="21"/>
-		<field name="FEATURE_CAMERA_EXTERNAL" since="20"/>
-		<field name="FEATURE_CAMERA_FLASH" since="7"/>
-		<field name="FEATURE_CAMERA_FRONT" since="9"/>
-		<field name="FEATURE_CAMERA_LEVEL_FULL" since="21"/>
-		<field name="FEATURE_CANT_SAVE_STATE" since="29"/>
-		<field name="FEATURE_COMPANION_DEVICE_SETUP" since="26"/>
-		<field name="FEATURE_CONNECTION_SERVICE" since="21"/>
-		<field name="FEATURE_CONSUMER_IR" since="19"/>
-		<field name="FEATURE_DEVICE_ADMIN" since="19"/>
-		<field name="FEATURE_EMBEDDED" since="26"/>
-		<field name="FEATURE_ETHERNET" since="24"/>
-		<field name="FEATURE_FAKETOUCH" since="11"/>
-		<field name="FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT" since="13"/>
-		<field name="FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND" since="13"/>
-		<field name="FEATURE_FINGERPRINT" since="23"/>
-		<field name="FEATURE_FREEFORM_WINDOW_MANAGEMENT" since="24"/>
-		<field name="FEATURE_GAMEPAD" since="21"/>
-		<field name="FEATURE_HIFI_SENSORS" since="23"/>
-		<field name="FEATURE_HOME_SCREEN" since="18"/>
-		<field name="FEATURE_INPUT_METHODS" since="18"/>
-		<field name="FEATURE_LEANBACK" since="21"/>
-		<field name="FEATURE_LEANBACK_ONLY" since="26"/>
-		<field name="FEATURE_LIVE_TV" since="21"/>
-		<field name="FEATURE_LIVE_WALLPAPER" since="7"/>
-		<field name="FEATURE_LOCATION" since="8"/>
-		<field name="FEATURE_LOCATION_GPS" since="8"/>
-		<field name="FEATURE_LOCATION_NETWORK" since="8"/>
-		<field name="FEATURE_MANAGED_USERS" since="21"/>
-		<field name="FEATURE_MICROPHONE" since="8"/>
-		<field name="FEATURE_MIDI" since="23"/>
-		<field name="FEATURE_NFC" since="9"/>
-		<field name="FEATURE_NFC_HOST_CARD_EMULATION" since="19"/>
-		<field name="FEATURE_NFC_HOST_CARD_EMULATION_NFCF" since="24"/>
-		<field name="FEATURE_OPENGLES_EXTENSION_PACK" since="21"/>
-		<field name="FEATURE_PC" since="27"/>
-		<field name="FEATURE_PICTURE_IN_PICTURE" since="24"/>
-		<field name="FEATURE_PRINTING" since="20"/>
-		<field name="FEATURE_RAM_LOW" since="27"/>
-		<field name="FEATURE_RAM_NORMAL" since="27"/>
-		<field name="FEATURE_SCREEN_LANDSCAPE" since="13"/>
-		<field name="FEATURE_SCREEN_PORTRAIT" since="13"/>
-		<field name="FEATURE_SECURELY_REMOVES_USERS" since="21"/>
-		<field name="FEATURE_SENSOR_ACCELEROMETER" since="8"/>
-		<field name="FEATURE_SENSOR_AMBIENT_TEMPERATURE" since="21"/>
-		<field name="FEATURE_SENSOR_BAROMETER" since="9"/>
-		<field name="FEATURE_SENSOR_COMPASS" since="8"/>
-		<field name="FEATURE_SENSOR_GYROSCOPE" since="9"/>
-		<field name="FEATURE_SENSOR_HEART_RATE" since="20"/>
-		<field name="FEATURE_SENSOR_HEART_RATE_ECG" since="21"/>
-		<field name="FEATURE_SENSOR_LIGHT" since="7"/>
-		<field name="FEATURE_SENSOR_PROXIMITY" since="7"/>
-		<field name="FEATURE_SENSOR_RELATIVE_HUMIDITY" since="21"/>
-		<field name="FEATURE_SENSOR_STEP_COUNTER" since="19"/>
-		<field name="FEATURE_SENSOR_STEP_DETECTOR" since="19"/>
-		<field name="FEATURE_SIP" since="9"/>
-		<field name="FEATURE_SIP_VOIP" since="9"/>
-		<field name="FEATURE_STRONGBOX_KEYSTORE" since="28"/>
-		<field name="FEATURE_TELEPHONY" since="7"/>
-		<field name="FEATURE_TELEPHONY_CDMA" since="7"/>
-		<field name="FEATURE_TELEPHONY_EUICC" since="28"/>
-		<field name="FEATURE_TELEPHONY_GSM" since="7"/>
-		<field name="FEATURE_TELEPHONY_MBMS" since="28"/>
-		<field name="FEATURE_TELEVISION" since="16" deprecated="21"/>
-		<field name="FEATURE_TOUCHSCREEN" since="8"/>
-		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH" since="7"/>
-		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT" since="8"/>
-		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND" since="9"/>
-		<field name="FEATURE_USB_ACCESSORY" since="12"/>
-		<field name="FEATURE_USB_HOST" since="12"/>
-		<field name="FEATURE_VERIFIED_BOOT" since="21"/>
-		<field name="FEATURE_VR_HEADTRACKING" since="26"/>
-		<field name="FEATURE_VR_MODE" since="24" deprecated="28"/>
-		<field name="FEATURE_VR_MODE_HIGH_PERFORMANCE" since="24"/>
-		<field name="FEATURE_VULKAN_HARDWARE_COMPUTE" since="26"/>
-		<field name="FEATURE_VULKAN_HARDWARE_LEVEL" since="24"/>
-		<field name="FEATURE_VULKAN_HARDWARE_VERSION" since="24"/>
-		<field name="FEATURE_WATCH" since="20"/>
-		<field name="FEATURE_WEBVIEW" since="20"/>
-		<field name="FEATURE_WIFI" since="8"/>
-		<field name="FEATURE_WIFI_AWARE" since="26"/>
-		<field name="FEATURE_WIFI_DIRECT" since="14"/>
-		<field name="FEATURE_WIFI_PASSPOINT" since="27"/>
-		<field name="FEATURE_WIFI_RTT" since="28"/>
-		<field name="FORWARD_LOCK_PACKAGE" removed="4"/>
-		<field name="GET_ACTIVITIES"/>
-		<field name="GET_CONFIGURATIONS" since="3"/>
-		<field name="GET_DISABLED_COMPONENTS" deprecated="24"/>
-		<field name="GET_DISABLED_UNTIL_USED_COMPONENTS" since="18" deprecated="24"/>
-		<field name="GET_GIDS"/>
-		<field name="GET_INSTRUMENTATION"/>
-		<field name="GET_INTENT_FILTERS"/>
-		<field name="GET_META_DATA"/>
-		<field name="GET_PERMISSIONS"/>
-		<field name="GET_PROVIDERS"/>
-		<field name="GET_RECEIVERS"/>
-		<field name="GET_RESOLVED_FILTER"/>
-		<field name="GET_SERVICES"/>
-		<field name="GET_SHARED_LIBRARY_FILES"/>
-		<field name="GET_SIGNATURES" deprecated="28"/>
-		<field name="GET_SIGNING_CERTIFICATES" since="28"/>
-		<field name="GET_UNINSTALLED_PACKAGES" since="3" deprecated="24"/>
-		<field name="GET_URI_PERMISSION_PATTERNS"/>
-		<field name="INSTALL_FAILED_ALREADY_EXISTS" removed="4"/>
-		<field name="INSTALL_FAILED_CONFLICTING_PROVIDER" since="3" removed="4"/>
-		<field name="INSTALL_FAILED_DEXOPT" removed="4"/>
-		<field name="INSTALL_FAILED_DUPLICATE_PACKAGE" removed="4"/>
-		<field name="INSTALL_FAILED_INSUFFICIENT_STORAGE" removed="4"/>
-		<field name="INSTALL_FAILED_INVALID_APK" removed="4"/>
-		<field name="INSTALL_FAILED_INVALID_URI" removed="4"/>
-		<field name="INSTALL_FAILED_MISSING_SHARED_LIBRARY" removed="4"/>
-		<field name="INSTALL_FAILED_NO_SHARED_USER" removed="4"/>
-		<field name="INSTALL_FAILED_OLDER_SDK" removed="4"/>
-		<field name="INSTALL_FAILED_REPLACE_COULDNT_DELETE" removed="4"/>
-		<field name="INSTALL_FAILED_SHARED_USER_INCOMPATIBLE" removed="4"/>
-		<field name="INSTALL_FAILED_UPDATE_INCOMPATIBLE" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_BAD_MANIFEST" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_MANIFEST_EMPTY" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_MANIFEST_MALFORMED" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_NOT_APK" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_NO_CERTIFICATES" removed="4"/>
-		<field name="INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION" removed="4"/>
-		<field name="INSTALL_REASON_DEVICE_RESTORE" since="26"/>
-		<field name="INSTALL_REASON_DEVICE_SETUP" since="26"/>
-		<field name="INSTALL_REASON_POLICY" since="26"/>
-		<field name="INSTALL_REASON_UNKNOWN" since="26"/>
-		<field name="INSTALL_REASON_USER" since="26"/>
-		<field name="INSTALL_SUCCEEDED" removed="4"/>
-		<field name="MATCH_ALL" since="23"/>
-		<field name="MATCH_DEFAULT_ONLY"/>
-		<field name="MATCH_DIRECT_BOOT_AWARE" since="24"/>
-		<field name="MATCH_DIRECT_BOOT_UNAWARE" since="24"/>
-		<field name="MATCH_DISABLED_COMPONENTS" since="24"/>
-		<field name="MATCH_DISABLED_UNTIL_USED_COMPONENTS" since="24"/>
-		<field name="MATCH_SYSTEM_ONLY" since="24"/>
-		<field name="MATCH_UNINSTALLED_PACKAGES" since="24"/>
-		<field name="MAXIMUM_VERIFICATION_TIMEOUT" since="17"/>
-		<field name="PERMISSION_DENIED"/>
-		<field name="PERMISSION_GRANTED"/>
-		<field name="PKG_INSTALL_COMPLETE" removed="8"/>
-		<field name="PKG_INSTALL_INCOMPLETE" removed="8"/>
-		<field name="REPLACE_EXISTING_PACKAGE" removed="4"/>
-		<field name="SIGNATURE_FIRST_NOT_SIGNED"/>
-		<field name="SIGNATURE_MATCH"/>
-		<field name="SIGNATURE_NEITHER_SIGNED"/>
-		<field name="SIGNATURE_NO_MATCH"/>
-		<field name="SIGNATURE_SECOND_NOT_SIGNED"/>
-		<field name="SIGNATURE_UNKNOWN_PACKAGE"/>
-		<field name="VERIFICATION_ALLOW" since="14"/>
-		<field name="VERIFICATION_REJECT" since="14"/>
-		<field name="VERSION_CODE_HIGHEST" since="26"/>
-	</class>
-	<class name="android/content/pm/PackageManager$NameNotFoundException" since="1">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/content/pm/PackageStats" since="1" deprecated="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/pm/PackageStats;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-		<field name="cacheSize"/>
-		<field name="codeSize"/>
-		<field name="dataSize"/>
-		<field name="externalCacheSize" since="11"/>
-		<field name="externalCodeSize" since="14"/>
-		<field name="externalDataSize" since="11"/>
-		<field name="externalMediaSize" since="11"/>
-		<field name="externalObbSize" since="11"/>
-		<field name="packageName"/>
-	</class>
-	<class name="android/content/pm/PathPermission" since="4">
-		<extends name="android/os/PatternMatcher"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getReadPermission()Ljava/lang/String;"/>
-		<method name="getWritePermission()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/pm/PermissionGroupInfo" since="1">
-		<extends name="android/content/pm/PackageItemInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/PermissionGroupInfo;)V"/>
-		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_PERSONAL_INFO" since="17"/>
-		<field name="descriptionRes"/>
-		<field name="flags" since="17"/>
-		<field name="nonLocalizedDescription"/>
-		<field name="priority" since="17"/>
-	</class>
-	<class name="android/content/pm/PermissionInfo" since="1">
-		<extends name="android/content/pm/PackageItemInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/PermissionInfo;)V"/>
-		<method name="getProtection()I" since="28"/>
-		<method name="getProtectionFlags()I" since="28"/>
-		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_COSTS_MONEY" since="17"/>
-		<field name="FLAG_INSTALLED" since="23"/>
-		<field name="PROTECTION_DANGEROUS"/>
-		<field name="PROTECTION_FLAG_APPOP" since="21"/>
-		<field name="PROTECTION_FLAG_DEVELOPMENT" since="16"/>
-		<field name="PROTECTION_FLAG_INSTALLER" since="23"/>
-		<field name="PROTECTION_FLAG_INSTANT" since="27"/>
-		<field name="PROTECTION_FLAG_PRE23" since="23"/>
-		<field name="PROTECTION_FLAG_PREINSTALLED" since="23"/>
-		<field name="PROTECTION_FLAG_PRIVILEGED" since="23"/>
-		<field name="PROTECTION_FLAG_RUNTIME_ONLY" since="26"/>
-		<field name="PROTECTION_FLAG_SETUP" since="24"/>
-		<field name="PROTECTION_FLAG_SYSTEM" since="16" deprecated="23"/>
-		<field name="PROTECTION_FLAG_VERIFIER" since="23"/>
-		<field name="PROTECTION_MASK_BASE" since="16" deprecated="28"/>
-		<field name="PROTECTION_MASK_FLAGS" since="16" deprecated="28"/>
-		<field name="PROTECTION_NORMAL"/>
-		<field name="PROTECTION_SIGNATURE"/>
-		<field name="PROTECTION_SIGNATURE_OR_SYSTEM" deprecated="23"/>
-		<field name="descriptionRes"/>
-		<field name="flags" since="17"/>
-		<field name="group"/>
-		<field name="nonLocalizedDescription"/>
-		<field name="protectionLevel" deprecated="28"/>
-	</class>
-	<class name="android/content/pm/ProviderInfo" since="1">
-		<extends name="android/content/pm/ComponentInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/ProviderInfo;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="19"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_SINGLE_USER" since="17"/>
-		<field name="authority"/>
-		<field name="flags" since="17"/>
-		<field name="grantUriPermissions"/>
-		<field name="initOrder"/>
-		<field name="isSyncable" deprecated="16"/>
-		<field name="multiprocess"/>
-		<field name="pathPermissions" since="4"/>
-		<field name="readPermission"/>
-		<field name="uriPermissionPatterns"/>
-		<field name="writePermission"/>
-	</class>
-	<class name="android/content/pm/ResolveInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/ResolveInfo;)V" since="17"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getIconResource()I"/>
-		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-		<field name="activityInfo"/>
-		<field name="filter"/>
-		<field name="icon"/>
-		<field name="isDefault"/>
-		<field name="isInstantAppAvailable" since="26"/>
-		<field name="labelRes"/>
-		<field name="match"/>
-		<field name="nonLocalizedLabel"/>
-		<field name="preferredOrder"/>
-		<field name="priority"/>
-		<field name="providerInfo" since="19"/>
-		<field name="resolvePackageName" since="5"/>
-		<field name="serviceInfo"/>
-		<field name="specificIndex"/>
-	</class>
-	<class name="android/content/pm/ResolveInfo$DisplayNameComparator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Comparator"/>
-		<method name="&lt;init>(Landroid/content/pm/PackageManager;)V"/>
-		<method name="compare(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I"/>
-	</class>
-	<class name="android/content/pm/ServiceInfo" since="1">
-		<extends name="android/content/pm/ComponentInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/ServiceInfo;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="5"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_EXTERNAL_SERVICE" since="24"/>
-		<field name="FLAG_ISOLATED_PROCESS" since="16"/>
-		<field name="FLAG_SINGLE_USER" since="17"/>
-		<field name="FLAG_STOP_WITH_TASK" since="14"/>
-		<field name="flags" since="14"/>
-		<field name="permission"/>
-	</class>
-	<class name="android/content/pm/SharedLibraryInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getDeclaringPackage()Landroid/content/pm/VersionedPackage;"/>
-		<method name="getDependentPackages()Ljava/util/List;"/>
-		<method name="getLongVersion()J" since="28"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getType()I"/>
-		<method name="getVersion()I" deprecated="28"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_BUILTIN"/>
-		<field name="TYPE_DYNAMIC"/>
-		<field name="TYPE_STATIC"/>
-		<field name="VERSION_UNDEFINED"/>
-	</class>
-	<class name="android/content/pm/ShortcutInfo" since="25">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/pm/ShortcutInfo$Builder;)V" since="29"/>
-		<method name="getActivity()Landroid/content/ComponentName;"/>
-		<method name="getCategories()Ljava/util/Set;"/>
-		<method name="getDisabledMessage()Ljava/lang/CharSequence;"/>
-		<method name="getDisabledReason()I" since="28"/>
-		<method name="getExtras()Landroid/os/PersistableBundle;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-		<method name="getIntents()[Landroid/content/Intent;"/>
-		<method name="getLastChangedTimestamp()J"/>
-		<method name="getLongLabel()Ljava/lang/CharSequence;"/>
-		<method name="getPackage()Ljava/lang/String;"/>
-		<method name="getRank()I"/>
-		<method name="getShortLabel()Ljava/lang/CharSequence;"/>
-		<method name="getUserHandle()Landroid/os/UserHandle;"/>
-		<method name="hasKeyFieldsOnly()Z"/>
-		<method name="isDeclaredInManifest()Z"/>
-		<method name="isDynamic()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isImmutable()Z"/>
-		<method name="isPinned()Z"/>
-		<field name="CREATOR"/>
-		<field name="DISABLED_REASON_APP_CHANGED" since="28"/>
-		<field name="DISABLED_REASON_BACKUP_NOT_SUPPORTED" since="28"/>
-		<field name="DISABLED_REASON_BY_APP" since="28"/>
-		<field name="DISABLED_REASON_NOT_DISABLED" since="28"/>
-		<field name="DISABLED_REASON_OTHER_RESTORE_ISSUE" since="28"/>
-		<field name="DISABLED_REASON_SIGNATURE_MISMATCH" since="28"/>
-		<field name="DISABLED_REASON_UNKNOWN" since="28"/>
-		<field name="DISABLED_REASON_VERSION_LOWER" since="28"/>
-		<field name="SHORTCUT_CATEGORY_CONVERSATION"/>
-	</class>
-	<class name="android/content/pm/ShortcutInfo$Builder" since="25">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="build()Landroid/content/pm/ShortcutInfo;"/>
-		<method name="setActivity(Landroid/content/ComponentName;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setCategories(Ljava/util/Set;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setDisabledMessage(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setExtras(Landroid/os/PersistableBundle;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setIntent(Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setIntents([Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setLongLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setRank(I)Landroid/content/pm/ShortcutInfo$Builder;"/>
-		<method name="setShortLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
-	</class>
-	<class name="android/content/pm/ShortcutManager" since="25">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addDynamicShortcuts(Ljava/util/List;)Z"/>
-		<method name="createShortcutResultIntent(Landroid/content/pm/ShortcutInfo;)Landroid/content/Intent;" since="26"/>
-		<method name="disableShortcuts(Ljava/util/List;)V"/>
-		<method name="disableShortcuts(Ljava/util/List;Ljava/lang/CharSequence;)V"/>
-		<method name="enableShortcuts(Ljava/util/List;)V"/>
-		<method name="getDynamicShortcuts()Ljava/util/List;"/>
-		<method name="getIconMaxHeight()I"/>
-		<method name="getIconMaxWidth()I"/>
-		<method name="getManifestShortcuts()Ljava/util/List;"/>
-		<method name="getMaxShortcutCountPerActivity()I"/>
-		<method name="getPinnedShortcuts()Ljava/util/List;"/>
-		<method name="isRateLimitingActive()Z"/>
-		<method name="isRequestPinShortcutSupported()Z" since="26"/>
-		<method name="removeAllDynamicShortcuts()V"/>
-		<method name="removeDynamicShortcuts(Ljava/util/List;)V"/>
-		<method name="reportShortcutUsed(Ljava/lang/String;)V"/>
-		<method name="requestPinShortcut(Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;)Z" since="26"/>
-		<method name="setDynamicShortcuts(Ljava/util/List;)Z"/>
-		<method name="updateShortcuts(Ljava/util/List;)Z"/>
-	</class>
-	<class name="android/content/pm/Signature" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="toByteArray()[B"/>
-		<method name="toChars()[C"/>
-		<method name="toChars([C[I)[C"/>
-		<method name="toCharsString()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/pm/SigningInfo" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/pm/SigningInfo;)V"/>
-		<method name="getApkContentsSigners()[Landroid/content/pm/Signature;"/>
-		<method name="getSigningCertificateHistory()[Landroid/content/pm/Signature;"/>
-		<method name="hasMultipleSigners()Z"/>
-		<method name="hasPastSigningCertificates()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/pm/VersionedPackage" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;J)V" since="28"/>
-		<method name="getLongVersionCode()J" since="28"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getVersionCode()I" deprecated="28"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/res/AssetFileDescriptor" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="3"/>
-		<implements name="java/io/Closeable" since="19"/>
-		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;JJ)V"/>
-		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;JJLandroid/os/Bundle;)V" since="19"/>
-		<method name="close()V"/>
-		<method name="createInputStream()Ljava/io/FileInputStream;" since="3"/>
-		<method name="createOutputStream()Ljava/io/FileOutputStream;" since="3"/>
-		<method name="getDeclaredLength()J" since="3"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="19"/>
-		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
-		<method name="getLength()J"/>
-		<method name="getParcelFileDescriptor()Landroid/os/ParcelFileDescriptor;"/>
-		<method name="getStartOffset()J"/>
-		<field name="CREATOR" since="3"/>
-		<field name="UNKNOWN_LENGTH" since="3"/>
-	</class>
-	<class name="android/content/res/AssetFileDescriptor$AutoCloseInputStream" since="3">
-		<extends name="android/os/ParcelFileDescriptor$AutoCloseInputStream"/>
-		<method name="&lt;init>(Landroid/content/res/AssetFileDescriptor;)V"/>
-	</class>
-	<class name="android/content/res/AssetFileDescriptor$AutoCloseOutputStream" since="3">
-		<extends name="android/os/ParcelFileDescriptor$AutoCloseOutputStream"/>
-		<method name="&lt;init>(Landroid/content/res/AssetFileDescriptor;)V"/>
-	</class>
-	<class name="android/content/res/AssetManager" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="21"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="getLocales()[Ljava/lang/String;"/>
-		<method name="list(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="open(Ljava/lang/String;)Ljava/io/InputStream;"/>
-		<method name="open(Ljava/lang/String;I)Ljava/io/InputStream;"/>
-		<method name="openFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
-		<method name="openNonAssetFd(ILjava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
-		<method name="openNonAssetFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
-		<method name="openXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;"/>
-		<method name="openXmlResourceParser(Ljava/lang/String;)Landroid/content/res/XmlResourceParser;"/>
-		<field name="ACCESS_BUFFER"/>
-		<field name="ACCESS_RANDOM"/>
-		<field name="ACCESS_STREAMING"/>
-		<field name="ACCESS_UNKNOWN"/>
-	</class>
-	<class name="android/content/res/AssetManager$AssetInputStream" since="1">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Landroid/content/res/AssetManager;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/res/AssetManager;J)V" since="29"/>
-		<method name="getAssetInt()I" removed="21"/>
-	</class>
-	<class name="android/content/res/ColorStateList" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>([[I[I)V"/>
-		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/res/ColorStateList;" deprecated="23"/>
-		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;" since="23"/>
-		<method name="getChangingConfigurations()I" since="23"/>
-		<method name="getColorForState([II)I"/>
-		<method name="getDefaultColor()I"/>
-		<method name="isOpaque()Z" since="21"/>
-		<method name="isStateful()Z"/>
-		<method name="valueOf(I)Landroid/content/res/ColorStateList;"/>
-		<method name="withAlpha(I)Landroid/content/res/ColorStateList;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/content/res/Configuration" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/res/Configuration;)V"/>
-		<method name="compareTo(Landroid/content/res/Configuration;)I"/>
-		<method name="diff(Landroid/content/res/Configuration;)I"/>
-		<method name="equals(Landroid/content/res/Configuration;)Z"/>
-		<method name="getLayoutDirection()I" since="17"/>
-		<method name="getLocales()Landroid/os/LocaleList;" since="24"/>
-		<method name="isLayoutSizeAtLeast(I)Z" since="11"/>
-		<method name="isScreenHdr()Z" since="26"/>
-		<method name="isScreenRound()Z" since="23"/>
-		<method name="isScreenWideColorGamut()Z" since="26"/>
-		<method name="needNewResources(II)Z"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V" since="8"/>
-		<method name="setLayoutDirection(Ljava/util/Locale;)V" since="17"/>
-		<method name="setLocale(Ljava/util/Locale;)V" since="17"/>
-		<method name="setLocales(Landroid/os/LocaleList;)V" since="24"/>
-		<method name="setTo(Landroid/content/res/Configuration;)V" since="8"/>
-		<method name="setToDefaults()V"/>
-		<method name="updateFrom(Landroid/content/res/Configuration;)I"/>
-		<field name="COLOR_MODE_HDR_MASK" since="26"/>
-		<field name="COLOR_MODE_HDR_NO" since="26"/>
-		<field name="COLOR_MODE_HDR_SHIFT" since="26"/>
-		<field name="COLOR_MODE_HDR_UNDEFINED" since="26"/>
-		<field name="COLOR_MODE_HDR_YES" since="26"/>
-		<field name="COLOR_MODE_UNDEFINED" since="26"/>
-		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_MASK" since="26"/>
-		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_NO" since="26"/>
-		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED" since="26"/>
-		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_YES" since="26"/>
-		<field name="CREATOR"/>
-		<field name="DENSITY_DPI_UNDEFINED" since="17"/>
-		<field name="HARDKEYBOARDHIDDEN_NO" since="3"/>
-		<field name="HARDKEYBOARDHIDDEN_UNDEFINED" since="3"/>
-		<field name="HARDKEYBOARDHIDDEN_YES" since="3"/>
-		<field name="KEYBOARDHIDDEN_NO"/>
-		<field name="KEYBOARDHIDDEN_UNDEFINED"/>
-		<field name="KEYBOARDHIDDEN_YES"/>
-		<field name="KEYBOARD_12KEY"/>
-		<field name="KEYBOARD_NOKEYS"/>
-		<field name="KEYBOARD_QWERTY"/>
-		<field name="KEYBOARD_UNDEFINED"/>
-		<field name="MNC_ZERO" since="19"/>
-		<field name="NAVIGATIONHIDDEN_NO" since="5"/>
-		<field name="NAVIGATIONHIDDEN_UNDEFINED" since="5"/>
-		<field name="NAVIGATIONHIDDEN_YES" since="5"/>
-		<field name="NAVIGATION_DPAD"/>
-		<field name="NAVIGATION_NONAV"/>
-		<field name="NAVIGATION_TRACKBALL"/>
-		<field name="NAVIGATION_UNDEFINED"/>
-		<field name="NAVIGATION_WHEEL"/>
-		<field name="ORIENTATION_LANDSCAPE"/>
-		<field name="ORIENTATION_PORTRAIT"/>
-		<field name="ORIENTATION_SQUARE" deprecated="16"/>
-		<field name="ORIENTATION_UNDEFINED"/>
-		<field name="SCREENLAYOUT_LAYOUTDIR_LTR" since="17"/>
-		<field name="SCREENLAYOUT_LAYOUTDIR_MASK" since="17"/>
-		<field name="SCREENLAYOUT_LAYOUTDIR_RTL" since="17"/>
-		<field name="SCREENLAYOUT_LAYOUTDIR_SHIFT" since="17"/>
-		<field name="SCREENLAYOUT_LAYOUTDIR_UNDEFINED" since="17"/>
-		<field name="SCREENLAYOUT_LONG_MASK" since="4"/>
-		<field name="SCREENLAYOUT_LONG_NO" since="4"/>
-		<field name="SCREENLAYOUT_LONG_UNDEFINED" since="4"/>
-		<field name="SCREENLAYOUT_LONG_YES" since="4"/>
-		<field name="SCREENLAYOUT_ROUND_MASK" since="23"/>
-		<field name="SCREENLAYOUT_ROUND_NO" since="23"/>
-		<field name="SCREENLAYOUT_ROUND_UNDEFINED" since="23"/>
-		<field name="SCREENLAYOUT_ROUND_YES" since="23"/>
-		<field name="SCREENLAYOUT_SIZE_LARGE" since="4"/>
-		<field name="SCREENLAYOUT_SIZE_MASK" since="4"/>
-		<field name="SCREENLAYOUT_SIZE_NORMAL" since="4"/>
-		<field name="SCREENLAYOUT_SIZE_SMALL" since="4"/>
-		<field name="SCREENLAYOUT_SIZE_UNDEFINED" since="4"/>
-		<field name="SCREENLAYOUT_SIZE_XLARGE" since="9"/>
-		<field name="SCREENLAYOUT_UNDEFINED" since="17"/>
-		<field name="SCREEN_HEIGHT_DP_UNDEFINED" since="13"/>
-		<field name="SCREEN_WIDTH_DP_UNDEFINED" since="13"/>
-		<field name="SMALLEST_SCREEN_WIDTH_DP_UNDEFINED" since="13"/>
-		<field name="TOUCHSCREEN_FINGER"/>
-		<field name="TOUCHSCREEN_NOTOUCH"/>
-		<field name="TOUCHSCREEN_STYLUS" deprecated="16"/>
-		<field name="TOUCHSCREEN_UNDEFINED"/>
-		<field name="UI_MODE_NIGHT_MASK" since="8"/>
-		<field name="UI_MODE_NIGHT_NO" since="8"/>
-		<field name="UI_MODE_NIGHT_UNDEFINED" since="8"/>
-		<field name="UI_MODE_NIGHT_YES" since="8"/>
-		<field name="UI_MODE_TYPE_APPLIANCE" since="16"/>
-		<field name="UI_MODE_TYPE_CAR" since="8"/>
-		<field name="UI_MODE_TYPE_DESK" since="8"/>
-		<field name="UI_MODE_TYPE_MASK" since="8"/>
-		<field name="UI_MODE_TYPE_NORMAL" since="8"/>
-		<field name="UI_MODE_TYPE_TELEVISION" since="13"/>
-		<field name="UI_MODE_TYPE_UNDEFINED" since="8"/>
-		<field name="UI_MODE_TYPE_VR_HEADSET" since="26"/>
-		<field name="UI_MODE_TYPE_WATCH" since="20"/>
-		<field name="colorMode" since="26"/>
-		<field name="densityDpi" since="17"/>
-		<field name="fontScale"/>
-		<field name="hardKeyboardHidden" since="3"/>
-		<field name="keyboard"/>
-		<field name="keyboardHidden"/>
-		<field name="locale" deprecated="24"/>
-		<field name="mcc"/>
-		<field name="mnc"/>
-		<field name="navigation"/>
-		<field name="navigationHidden" since="5"/>
-		<field name="orientation"/>
-		<field name="screenHeightDp" since="13"/>
-		<field name="screenLayout" since="4"/>
-		<field name="screenWidthDp" since="13"/>
-		<field name="smallestScreenWidthDp" since="13"/>
-		<field name="touchscreen"/>
-		<field name="uiMode" since="8"/>
-	</class>
-	<class name="android/content/res/ObbInfo" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-		<field name="OBB_OVERLAY"/>
-		<field name="filename"/>
-		<field name="flags"/>
-		<field name="packageName"/>
-		<field name="version"/>
-	</class>
-	<class name="android/content/res/ObbScanner" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getObbInfo(Ljava/lang/String;)Landroid/content/res/ObbInfo;"/>
-	</class>
-	<class name="android/content/res/Resources" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V" deprecated="25"/>
-		<method name="finishPreloading()V"/>
-		<method name="flushLayoutCache()V"/>
-		<method name="getAnimation(I)Landroid/content/res/XmlResourceParser;"/>
-		<method name="getAssets()Landroid/content/res/AssetManager;"/>
-		<method name="getBoolean(I)Z" since="3"/>
-		<method name="getColor(I)I" deprecated="23"/>
-		<method name="getColor(ILandroid/content/res/Resources$Theme;)I" since="23"/>
-		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;" deprecated="23"/>
-		<method name="getColorStateList(ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;" since="23"/>
-		<method name="getConfiguration()Landroid/content/res/Configuration;"/>
-		<method name="getDimension(I)F"/>
-		<method name="getDimensionPixelOffset(I)I"/>
-		<method name="getDimensionPixelSize(I)I"/>
-		<method name="getDisplayMetrics()Landroid/util/DisplayMetrics;"/>
-		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" deprecated="22"/>
-		<method name="getDrawable(ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;" since="15" deprecated="22"/>
-		<method name="getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="getFont(I)Landroid/graphics/Typeface;" since="26"/>
-		<method name="getFraction(III)F" since="3"/>
-		<method name="getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="getIntArray(I)[I"/>
-		<method name="getInteger(I)I"/>
-		<method name="getLayout(I)Landroid/content/res/XmlResourceParser;"/>
-		<method name="getMovie(I)Landroid/graphics/Movie;"/>
-		<method name="getQuantityString(II)Ljava/lang/String;"/>
-		<method name="getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="getQuantityText(II)Ljava/lang/CharSequence;"/>
-		<method name="getResourceEntryName(I)Ljava/lang/String;"/>
-		<method name="getResourceName(I)Ljava/lang/String;"/>
-		<method name="getResourcePackageName(I)Ljava/lang/String;"/>
-		<method name="getResourceTypeName(I)Ljava/lang/String;"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="getStringArray(I)[Ljava/lang/String;"/>
-		<method name="getSystem()Landroid/content/res/Resources;"/>
-		<method name="getText(I)Ljava/lang/CharSequence;"/>
-		<method name="getText(ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getTextArray(I)[Ljava/lang/CharSequence;"/>
-		<method name="getValue(ILandroid/util/TypedValue;Z)V"/>
-		<method name="getValue(Ljava/lang/String;Landroid/util/TypedValue;Z)V"/>
-		<method name="getValueForDensity(IILandroid/util/TypedValue;Z)V" since="15"/>
-		<method name="getXml(I)Landroid/content/res/XmlResourceParser;"/>
-		<method name="newTheme()Landroid/content/res/Resources$Theme;"/>
-		<method name="obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;"/>
-		<method name="obtainTypedArray(I)Landroid/content/res/TypedArray;"/>
-		<method name="openRawResource(I)Ljava/io/InputStream;"/>
-		<method name="openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;" since="3"/>
-		<method name="openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;"/>
-		<method name="parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="3"/>
-		<method name="parseBundleExtras(Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;)V" since="3"/>
-		<method name="updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V" deprecated="25"/>
-	</class>
-	<class name="android/content/res/Resources$NotFoundException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V" since="24"/>
-	</class>
-	<class name="android/content/res/Resources$Theme" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;)V"/>
-		<method name="applyStyle(IZ)V"/>
-		<method name="dump(ILjava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getChangingConfigurations()I" since="23"/>
-		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="getResources()Landroid/content/res/Resources;" since="21"/>
-		<method name="obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;"/>
-		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;"/>
-		<method name="obtainStyledAttributes([I)Landroid/content/res/TypedArray;"/>
-		<method name="resolveAttribute(ILandroid/util/TypedValue;Z)Z"/>
-		<method name="setTo(Landroid/content/res/Resources$Theme;)V"/>
-	</class>
-	<class name="android/content/res/TypedArray" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;)V" since="29"/>
-		<method name="getBoolean(IZ)Z"/>
-		<method name="getChangingConfigurations()I" since="21"/>
-		<method name="getColor(II)I"/>
-		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;"/>
-		<method name="getDimension(IF)F"/>
-		<method name="getDimensionPixelOffset(II)I"/>
-		<method name="getDimensionPixelSize(II)I"/>
-		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getFloat(IF)F"/>
-		<method name="getFont(I)Landroid/graphics/Typeface;" since="26"/>
-		<method name="getFraction(IIIF)F"/>
-		<method name="getIndex(I)I"/>
-		<method name="getIndexCount()I"/>
-		<method name="getInt(II)I"/>
-		<method name="getInteger(II)I"/>
-		<method name="getLayoutDimension(II)I" since="3"/>
-		<method name="getLayoutDimension(ILjava/lang/String;)I"/>
-		<method name="getNonResourceString(I)Ljava/lang/String;"/>
-		<method name="getPositionDescription()Ljava/lang/String;"/>
-		<method name="getResourceId(II)I"/>
-		<method name="getResources()Landroid/content/res/Resources;"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="getText(I)Ljava/lang/CharSequence;"/>
-		<method name="getTextArray(I)[Ljava/lang/CharSequence;"/>
-		<method name="getType(I)I" since="21"/>
-		<method name="getValue(ILandroid/util/TypedValue;)Z"/>
-		<method name="hasValue(I)Z"/>
-		<method name="hasValueOrEmpty(I)Z" since="22"/>
-		<method name="length()I"/>
-		<method name="peekValue(I)Landroid/util/TypedValue;"/>
-		<method name="recycle()V"/>
-	</class>
-	<class name="android/content/res/XmlResourceParser" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/util/AttributeSet"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<implements name="org/xmlpull/v1/XmlPullParser"/>
-		<method name="close()V"/>
-	</class>
-	<class name="android/database/AbstractCursor" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/database/CrossProcessCursor"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkPosition()V"/>
-		<method name="getNotificationUri()Landroid/net/Uri;" since="11"/>
-		<method name="getUpdatedField(I)Ljava/lang/Object;" deprecated="16"/>
-		<method name="isFieldUpdated(I)Z" deprecated="16"/>
-		<method name="onChange(Z)V"/>
-		<field name="mClosed" deprecated="23"/>
-		<field name="mContentResolver" deprecated="23"/>
-		<field name="mCurrentRowID" deprecated="16" removed="23"/>
-		<field name="mPos" deprecated="23"/>
-		<field name="mRowIdColumnIndex" deprecated="16" removed="23"/>
-		<field name="mUpdatedRows" deprecated="16" removed="23"/>
-	</class>
-	<class name="android/database/AbstractCursor$SelfContentObserver" since="1">
-		<extends name="android/database/ContentObserver"/>
-		<method name="&lt;init>(Landroid/database/AbstractCursor;)V"/>
-	</class>
-	<class name="android/database/AbstractWindowedCursor" since="1">
-		<extends name="android/database/AbstractCursor"/>
-		<method name="&lt;init>()V"/>
-		<method name="hasWindow()Z"/>
-		<method name="isBlob(I)Z" deprecated="16"/>
-		<method name="isFloat(I)Z" since="5" deprecated="16"/>
-		<method name="isLong(I)Z" since="5" deprecated="16"/>
-		<method name="isString(I)Z" since="5" deprecated="16"/>
-		<method name="setWindow(Landroid/database/CursorWindow;)V"/>
-		<field name="mWindow"/>
-	</class>
-	<class name="android/database/CharArrayBuffer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>([C)V"/>
-		<field name="data"/>
-		<field name="sizeCopied"/>
-	</class>
-	<class name="android/database/ContentObservable" since="1">
-		<extends name="android/database/Observable"/>
-		<method name="&lt;init>()V"/>
-		<method name="dispatchChange(Z)V" deprecated="16"/>
-		<method name="dispatchChange(ZLandroid/net/Uri;)V" since="16"/>
-		<method name="notifyChange(Z)V" deprecated="16"/>
-		<method name="registerObserver(Landroid/database/ContentObserver;)V"/>
-	</class>
-	<class name="android/database/ContentObserver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/os/Handler;)V"/>
-		<method name="deliverSelfNotifications()Z"/>
-		<method name="dispatchChange(Z)V" deprecated="16"/>
-		<method name="dispatchChange(ZLandroid/net/Uri;)V" since="16"/>
-		<method name="onChange(Z)V"/>
-		<method name="onChange(ZLandroid/net/Uri;)V" since="16"/>
-	</class>
-	<class name="android/database/CrossProcessCursor" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/database/Cursor"/>
-		<method name="fillWindow(ILandroid/database/CursorWindow;)V"/>
-		<method name="getWindow()Landroid/database/CursorWindow;"/>
-		<method name="onMove(II)Z"/>
-	</class>
-	<class name="android/database/CrossProcessCursorWrapper" since="15">
-		<extends name="android/database/CursorWrapper"/>
-		<implements name="android/database/CrossProcessCursor"/>
-		<method name="&lt;init>(Landroid/database/Cursor;)V"/>
-	</class>
-	<class name="android/database/Cursor" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="16"/>
-		<method name="close()V"/>
-		<method name="copyStringToBuffer(ILandroid/database/CharArrayBuffer;)V"/>
-		<method name="deactivate()V" deprecated="16"/>
-		<method name="getBlob(I)[B"/>
-		<method name="getColumnCount()I"/>
-		<method name="getColumnIndex(Ljava/lang/String;)I"/>
-		<method name="getColumnIndexOrThrow(Ljava/lang/String;)I"/>
-		<method name="getColumnName(I)Ljava/lang/String;"/>
-		<method name="getColumnNames()[Ljava/lang/String;"/>
-		<method name="getCount()I"/>
-		<method name="getDouble(I)D"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getFloat(I)F"/>
-		<method name="getInt(I)I"/>
-		<method name="getLong(I)J"/>
-		<method name="getNotificationUri()Landroid/net/Uri;" since="19"/>
-		<method name="getPosition()I"/>
-		<method name="getShort(I)S"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="getType(I)I" since="11"/>
-		<method name="getWantsAllOnMoveCalls()Z"/>
-		<method name="isAfterLast()Z"/>
-		<method name="isBeforeFirst()Z"/>
-		<method name="isClosed()Z"/>
-		<method name="isFirst()Z"/>
-		<method name="isLast()Z"/>
-		<method name="isNull(I)Z"/>
-		<method name="move(I)Z"/>
-		<method name="moveToFirst()Z"/>
-		<method name="moveToLast()Z"/>
-		<method name="moveToNext()Z"/>
-		<method name="moveToPosition(I)Z"/>
-		<method name="moveToPrevious()Z"/>
-		<method name="registerContentObserver(Landroid/database/ContentObserver;)V"/>
-		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V"/>
-		<method name="requery()Z" deprecated="16"/>
-		<method name="respond(Landroid/os/Bundle;)Landroid/os/Bundle;"/>
-		<method name="setExtras(Landroid/os/Bundle;)V" since="23"/>
-		<method name="setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V"/>
-		<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V"/>
-		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V"/>
-		<field name="FIELD_TYPE_BLOB" since="11"/>
-		<field name="FIELD_TYPE_FLOAT" since="11"/>
-		<field name="FIELD_TYPE_INTEGER" since="11"/>
-		<field name="FIELD_TYPE_NULL" since="11"/>
-		<field name="FIELD_TYPE_STRING" since="11"/>
-	</class>
-	<class name="android/database/CursorIndexOutOfBoundsException" since="1">
-		<extends name="java/lang/IndexOutOfBoundsException"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/CursorJoiner" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Iterable"/>
-		<implements name="java/util/Iterator"/>
-		<method name="&lt;init>(Landroid/database/Cursor;[Ljava/lang/String;Landroid/database/Cursor;[Ljava/lang/String;)V"/>
-		<method name="next()Landroid/database/CursorJoiner$Result;"/>
-	</class>
-	<class name="android/database/CursorJoiner$Result" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/database/CursorJoiner$Result;"/>
-		<method name="values()[Landroid/database/CursorJoiner$Result;"/>
-		<field name="BOTH"/>
-		<field name="LEFT"/>
-		<field name="RIGHT"/>
-	</class>
-	<class name="android/database/CursorWindow" since="1">
-		<extends name="android/database/sqlite/SQLiteClosable"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="15"/>
-		<method name="&lt;init>(Ljava/lang/String;J)V" since="28"/>
-		<method name="&lt;init>(Z)V" deprecated="16"/>
-		<method name="allocRow()Z"/>
-		<method name="clear()V"/>
-		<method name="close()V" removed="16"/>
-		<method name="copyStringToBuffer(IILandroid/database/CharArrayBuffer;)V"/>
-		<method name="freeLastRow()V"/>
-		<method name="getBlob(II)[B"/>
-		<method name="getDouble(II)D"/>
-		<method name="getFloat(II)F"/>
-		<method name="getInt(II)I"/>
-		<method name="getLong(II)J"/>
-		<method name="getNumRows()I"/>
-		<method name="getShort(II)S"/>
-		<method name="getStartPosition()I"/>
-		<method name="getString(II)Ljava/lang/String;"/>
-		<method name="getType(II)I" since="11"/>
-		<method name="isBlob(II)Z" deprecated="16"/>
-		<method name="isFloat(II)Z" since="5" deprecated="16"/>
-		<method name="isLong(II)Z" since="5" deprecated="16"/>
-		<method name="isNull(II)Z" deprecated="16"/>
-		<method name="isString(II)Z" since="5" deprecated="16"/>
-		<method name="newFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;"/>
-		<method name="putBlob([BII)Z"/>
-		<method name="putDouble(DII)Z"/>
-		<method name="putLong(JII)Z"/>
-		<method name="putNull(II)Z"/>
-		<method name="putString(Ljava/lang/String;II)Z"/>
-		<method name="setNumColumns(I)Z"/>
-		<method name="setStartPosition(I)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/database/CursorWrapper" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/database/Cursor"/>
-		<method name="&lt;init>(Landroid/database/Cursor;)V"/>
-		<method name="getWrappedCursor()Landroid/database/Cursor;" since="11"/>
-	</class>
-	<class name="android/database/DataSetObservable" since="1">
-		<extends name="android/database/Observable"/>
-		<method name="&lt;init>()V"/>
-		<method name="notifyChanged()V"/>
-		<method name="notifyInvalidated()V"/>
-	</class>
-	<class name="android/database/DataSetObserver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onChanged()V"/>
-		<method name="onInvalidated()V"/>
-	</class>
-	<class name="android/database/DatabaseErrorHandler" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onCorruption(Landroid/database/sqlite/SQLiteDatabase;)V"/>
-	</class>
-	<class name="android/database/DatabaseUtils" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V"/>
-		<method name="appendSelectionArgs([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
-		<method name="appendValueToSql(Ljava/lang/StringBuilder;Ljava/lang/Object;)V"/>
-		<method name="bindObjectToProgram(Landroid/database/sqlite/SQLiteProgram;ILjava/lang/Object;)V"/>
-		<method name="blobFileDescriptorForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="11"/>
-		<method name="blobFileDescriptorForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="11"/>
-		<method name="concatenateWhere(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
-		<method name="createDbFromSqlStatements(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="cursorDoubleToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
-		<method name="cursorDoubleToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
-		<method name="cursorDoubleToCursorValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
-		<method name="cursorFloatToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
-		<method name="cursorIntToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
-		<method name="cursorIntToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
-		<method name="cursorIntToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
-		<method name="cursorLongToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
-		<method name="cursorLongToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
-		<method name="cursorLongToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
-		<method name="cursorRowToContentValues(Landroid/database/Cursor;Landroid/content/ContentValues;)V"/>
-		<method name="cursorShortToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
-		<method name="cursorStringToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
-		<method name="cursorStringToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
-		<method name="cursorStringToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
-		<method name="cursorStringToInsertHelper(Landroid/database/Cursor;Ljava/lang/String;Landroid/database/DatabaseUtils$InsertHelper;I)V"/>
-		<method name="dumpCurrentRow(Landroid/database/Cursor;)V"/>
-		<method name="dumpCurrentRow(Landroid/database/Cursor;Ljava/io/PrintStream;)V"/>
-		<method name="dumpCurrentRow(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V"/>
-		<method name="dumpCurrentRowToString(Landroid/database/Cursor;)Ljava/lang/String;"/>
-		<method name="dumpCursor(Landroid/database/Cursor;)V"/>
-		<method name="dumpCursor(Landroid/database/Cursor;Ljava/io/PrintStream;)V"/>
-		<method name="dumpCursor(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V"/>
-		<method name="dumpCursorToString(Landroid/database/Cursor;)Ljava/lang/String;"/>
-		<method name="getCollationKey(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getHexCollationKey(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getSqlStatementType(Ljava/lang/String;)I" since="11"/>
-		<method name="longForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)J"/>
-		<method name="longForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)J"/>
-		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)J"/>
-		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;)J" since="11"/>
-		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)J" since="11"/>
-		<method name="readExceptionFromParcel(Landroid/os/Parcel;)V"/>
-		<method name="readExceptionWithFileNotFoundExceptionFromParcel(Landroid/os/Parcel;)V"/>
-		<method name="readExceptionWithOperationApplicationExceptionFromParcel(Landroid/os/Parcel;)V" since="5"/>
-		<method name="sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="stringForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="stringForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="writeExceptionToParcel(Landroid/os/Parcel;Ljava/lang/Exception;)V"/>
-		<field name="STATEMENT_ABORT" since="11"/>
-		<field name="STATEMENT_ATTACH" since="11"/>
-		<field name="STATEMENT_BEGIN" since="11"/>
-		<field name="STATEMENT_COMMIT" since="11"/>
-		<field name="STATEMENT_DDL" since="11"/>
-		<field name="STATEMENT_OTHER" since="11"/>
-		<field name="STATEMENT_PRAGMA" since="11"/>
-		<field name="STATEMENT_SELECT" since="11"/>
-		<field name="STATEMENT_UNPREPARED" since="11"/>
-		<field name="STATEMENT_UPDATE" since="11"/>
-	</class>
-	<class name="android/database/DatabaseUtils$InsertHelper" since="1" deprecated="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)V"/>
-		<method name="bind(ID)V"/>
-		<method name="bind(IF)V"/>
-		<method name="bind(II)V"/>
-		<method name="bind(IJ)V"/>
-		<method name="bind(ILjava/lang/String;)V"/>
-		<method name="bind(IZ)V"/>
-		<method name="bind(I[B)V"/>
-		<method name="bindNull(I)V"/>
-		<method name="close()V"/>
-		<method name="execute()J"/>
-		<method name="getColumnIndex(Ljava/lang/String;)I"/>
-		<method name="insert(Landroid/content/ContentValues;)J"/>
-		<method name="prepareForInsert()V"/>
-		<method name="prepareForReplace()V"/>
-		<method name="replace(Landroid/content/ContentValues;)J"/>
-		<field name="TABLE_INFO_PRAGMA_DEFAULT_INDEX" removed="17"/>
-	</class>
-	<class name="android/database/DefaultDatabaseErrorHandler" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/database/DatabaseErrorHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/database/MatrixCursor" since="1">
-		<extends name="android/database/AbstractCursor"/>
-		<method name="&lt;init>([Ljava/lang/String;)V"/>
-		<method name="&lt;init>([Ljava/lang/String;I)V"/>
-		<method name="addRow(Ljava/lang/Iterable;)V"/>
-		<method name="addRow([Ljava/lang/Object;)V"/>
-		<method name="newRow()Landroid/database/MatrixCursor$RowBuilder;"/>
-	</class>
-	<class name="android/database/MatrixCursor$RowBuilder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/database/MatrixCursor;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/database/MatrixCursor;I)V" since="29"/>
-		<method name="add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;"/>
-		<method name="add(Ljava/lang/String;Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;" since="19"/>
-	</class>
-	<class name="android/database/MergeCursor" since="1">
-		<extends name="android/database/AbstractCursor"/>
-		<method name="&lt;init>([Landroid/database/Cursor;)V"/>
-	</class>
-	<class name="android/database/Observable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="registerObserver(Ljava/lang/Object;)V"/>
-		<method name="unregisterAll()V"/>
-		<method name="unregisterObserver(Ljava/lang/Object;)V"/>
-		<field name="mObservers"/>
-	</class>
-	<class name="android/database/SQLException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16"/>
-	</class>
-	<class name="android/database/StaleDataException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteAbortException" since="1">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteAccessPermException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteBlobTooBigException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteCantOpenDatabaseException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteClosable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="16"/>
-		<method name="&lt;init>()V"/>
-		<method name="acquireReference()V"/>
-		<method name="onAllReferencesReleased()V"/>
-		<method name="onAllReferencesReleasedFromContainer()V" deprecated="16"/>
-		<method name="releaseReference()V"/>
-		<method name="releaseReferenceFromContainer()V" deprecated="16"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteConstraintException" since="1">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteCursor" since="1">
-		<extends name="android/database/AbstractWindowedCursor"/>
-		<method name="&lt;init>(Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" since="11"/>
-		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" deprecated="16"/>
-		<method name="getDatabase()Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="setFillWindowForwardOnly(Z)V" since="28"/>
-		<method name="setSelectionArguments([Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteCursorDriver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="cursorClosed()V"/>
-		<method name="cursorDeactivated()V"/>
-		<method name="cursorRequeried(Landroid/database/Cursor;)V"/>
-		<method name="query(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="setBindArguments([Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDatabase" since="1">
-		<extends name="android/database/sqlite/SQLiteClosable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="beginTransaction()V"/>
-		<method name="beginTransactionNonExclusive()V" since="11"/>
-		<method name="beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V" since="5"/>
-		<method name="beginTransactionWithListenerNonExclusive(Landroid/database/sqlite/SQLiteTransactionListener;)V" since="11"/>
-		<method name="close()V" removed="16"/>
-		<method name="compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;"/>
-		<method name="create(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="createInMemory(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;" since="27"/>
-		<method name="delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I"/>
-		<method name="deleteDatabase(Ljava/io/File;)Z" since="16"/>
-		<method name="disableWriteAheadLogging()V" since="16"/>
-		<method name="enableWriteAheadLogging()Z" since="11"/>
-		<method name="endTransaction()V"/>
-		<method name="execSQL(Ljava/lang/String;)V"/>
-		<method name="execSQL(Ljava/lang/String;[Ljava/lang/Object;)V"/>
-		<method name="findEditTable(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getAttachedDbs()Ljava/util/List;" since="11"/>
-		<method name="getMaximumSize()J"/>
-		<method name="getPageSize()J"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getSyncedTables()Ljava/util/Map;" deprecated="16"/>
-		<method name="getVersion()I"/>
-		<method name="inTransaction()Z"/>
-		<method name="insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
-		<method name="insertOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
-		<method name="insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J" since="8"/>
-		<method name="isDatabaseIntegrityOk()Z" since="11"/>
-		<method name="isDbLockedByCurrentThread()Z"/>
-		<method name="isDbLockedByOtherThreads()Z" deprecated="16"/>
-		<method name="isOpen()Z"/>
-		<method name="isReadOnly()Z"/>
-		<method name="isWriteAheadLoggingEnabled()Z" since="16"/>
-		<method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
-		<method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
-		<method name="needUpgrade(I)Z"/>
-		<method name="openDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;" since="27"/>
-		<method name="openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11"/>
-		<method name="openOrCreateDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="openOrCreateDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="openOrCreateDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11"/>
-		<method name="query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="rawQuery(Ljava/lang/String;[Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="releaseMemory()I"/>
-		<method name="replace(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
-		<method name="replaceOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
-		<method name="setForeignKeyConstraintsEnabled(Z)V" since="16"/>
-		<method name="setLocale(Ljava/util/Locale;)V"/>
-		<method name="setLockingEnabled(Z)V" deprecated="16"/>
-		<method name="setMaxSqlCacheSize(I)V" since="11"/>
-		<method name="setMaximumSize(J)J"/>
-		<method name="setPageSize(J)V"/>
-		<method name="setTransactionSuccessful()V"/>
-		<method name="setVersion(I)V"/>
-		<method name="update(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
-		<method name="updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I" since="8"/>
-		<method name="validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V" since="24"/>
-		<method name="yieldIfContended()Z" deprecated="16"/>
-		<method name="yieldIfContendedSafely()Z" since="3"/>
-		<method name="yieldIfContendedSafely(J)Z" since="5"/>
-		<field name="CONFLICT_ABORT" since="8"/>
-		<field name="CONFLICT_FAIL" since="8"/>
-		<field name="CONFLICT_IGNORE" since="8"/>
-		<field name="CONFLICT_NONE" since="8"/>
-		<field name="CONFLICT_REPLACE" since="8"/>
-		<field name="CONFLICT_ROLLBACK" since="8"/>
-		<field name="CREATE_IF_NECESSARY"/>
-		<field name="ENABLE_WRITE_AHEAD_LOGGING" since="16"/>
-		<field name="MAX_SQL_CACHE_SIZE" since="11"/>
-		<field name="NO_LOCALIZED_COLLATORS"/>
-		<field name="OPEN_READONLY"/>
-		<field name="OPEN_READWRITE"/>
-		<field name="SQLITE_MAX_LIKE_PATTERN_LENGTH"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDatabase$CursorFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDatabase$OpenParams" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;IIJLjava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="getCursorFactory()Landroid/database/sqlite/SQLiteDatabase$CursorFactory;"/>
-		<method name="getErrorHandler()Landroid/database/DatabaseErrorHandler;"/>
-		<method name="getIdleConnectionTimeout()J"/>
-		<method name="getJournalMode()Ljava/lang/String;" since="28"/>
-		<method name="getLookasideSlotCount()I"/>
-		<method name="getLookasideSlotSize()I"/>
-		<method name="getOpenFlags()I"/>
-		<method name="getSynchronousMode()Ljava/lang/String;" since="28"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDatabase$OpenParams$Builder" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V"/>
-		<method name="addOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
-		<method name="build()Landroid/database/sqlite/SQLiteDatabase$OpenParams;"/>
-		<method name="removeOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
-		<method name="setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
-		<method name="setErrorHandler(Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
-		<method name="setIdleConnectionTimeout(J)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
-		<method name="setJournalMode(Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" since="28"/>
-		<method name="setLookasideConfig(II)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
-		<method name="setOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
-		<method name="setSynchronousMode(Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" since="28"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDatabaseCorruptException" since="1">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDatabaseLockedException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDatatypeMismatchException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDiskIOException" since="1">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteDoneException" since="1">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteException" since="1">
-		<extends name="android/database/SQLException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteFullException" since="1">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteMisuseException" since="1">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteOpenHelper" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)V" since="11"/>
-		<method name="close()V"/>
-		<method name="getDatabaseName()Ljava/lang/String;" since="14"/>
-		<method name="getReadableDatabase()Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="getWritableDatabase()Landroid/database/sqlite/SQLiteDatabase;"/>
-		<method name="onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V" since="16"/>
-		<method name="onCreate(Landroid/database/sqlite/SQLiteDatabase;)V"/>
-		<method name="onDowngrade(Landroid/database/sqlite/SQLiteDatabase;II)V" since="11"/>
-		<method name="onOpen(Landroid/database/sqlite/SQLiteDatabase;)V"/>
-		<method name="onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V"/>
-		<method name="setIdleConnectionTimeout(J)V" since="27"/>
-		<method name="setLookasideConfig(II)V" since="27"/>
-		<method name="setOpenParams(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28"/>
-		<method name="setWriteAheadLoggingEnabled(Z)V" since="16"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteOutOfMemoryException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteProgram" since="1">
-		<extends name="android/database/sqlite/SQLiteClosable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V" since="29"/>
-		<method name="bindAllArgsAsStrings([Ljava/lang/String;)V" since="11"/>
-		<method name="bindBlob(I[B)V"/>
-		<method name="bindDouble(ID)V"/>
-		<method name="bindLong(IJ)V"/>
-		<method name="bindNull(I)V"/>
-		<method name="bindString(ILjava/lang/String;)V"/>
-		<method name="clearBindings()V"/>
-		<method name="close()V" removed="16"/>
-		<method name="compile(Ljava/lang/String;Z)V" removed="16"/>
-		<method name="getUniqueId()I" deprecated="16"/>
-		<method name="native_bind_blob(I[B)V" removed="16"/>
-		<method name="native_bind_double(ID)V" removed="16"/>
-		<method name="native_bind_long(IJ)V" removed="16"/>
-		<method name="native_bind_null(I)V" removed="16"/>
-		<method name="native_bind_string(ILjava/lang/String;)V" removed="16"/>
-		<method name="native_compile(Ljava/lang/String;)V" removed="16"/>
-		<method name="native_finalize()V" removed="16"/>
-		<field name="mDatabase" removed="16"/>
-		<field name="nHandle" removed="16"/>
-		<field name="nStatement" removed="16"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteQuery" since="1">
-		<extends name="android/database/sqlite/SQLiteProgram"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V" since="29"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteQueryBuilder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V"/>
-		<method name="appendWhere(Ljava/lang/CharSequence;)V"/>
-		<method name="appendWhereEscapeString(Ljava/lang/String;)V"/>
-		<method name="buildQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
-		<method name="buildQuery([Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="buildQueryString(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="buildUnionQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
-		<method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="getTables()Ljava/lang/String;"/>
-		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
-		<method name="setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)V"/>
-		<method name="setDistinct(Z)V"/>
-		<method name="setProjectionMap(Ljava/util/Map;)V"/>
-		<method name="setStrict(Z)V" since="14"/>
-		<method name="setTables(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteReadOnlyDatabaseException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteStatement" since="1">
-		<extends name="android/database/sqlite/SQLiteProgram"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V" since="29"/>
-		<method name="execute()V"/>
-		<method name="executeInsert()J"/>
-		<method name="executeUpdateDelete()I" since="11"/>
-		<method name="simpleQueryForBlobFileDescriptor()Landroid/os/ParcelFileDescriptor;" since="11"/>
-		<method name="simpleQueryForLong()J"/>
-		<method name="simpleQueryForString()Ljava/lang/String;"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteTableLockedException" since="11">
-		<extends name="android/database/sqlite/SQLiteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/database/sqlite/SQLiteTransactionListener" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="onBegin()V"/>
-		<method name="onCommit()V"/>
-		<method name="onRollback()V"/>
-	</class>
-	<class name="android/drm/DrmConvertedStatus" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I[BI)V"/>
-		<field name="STATUS_ERROR"/>
-		<field name="STATUS_INPUTDATA_ERROR"/>
-		<field name="STATUS_OK"/>
-		<field name="convertedData"/>
-		<field name="offset"/>
-		<field name="statusCode"/>
-	</class>
-	<class name="android/drm/DrmErrorEvent" since="11">
-		<extends name="android/drm/DrmEvent"/>
-		<method name="&lt;init>(IILjava/lang/String;)V"/>
-		<method name="&lt;init>(IILjava/lang/String;Ljava/util/HashMap;)V" since="12"/>
-		<field name="TYPE_ACQUIRE_DRM_INFO_FAILED" since="12"/>
-		<field name="TYPE_NOT_SUPPORTED"/>
-		<field name="TYPE_NO_INTERNET_CONNECTION"/>
-		<field name="TYPE_OUT_OF_MEMORY"/>
-		<field name="TYPE_PROCESS_DRM_INFO_FAILED"/>
-		<field name="TYPE_REMOVE_ALL_RIGHTS_FAILED"/>
-		<field name="TYPE_RIGHTS_NOT_INSTALLED"/>
-		<field name="TYPE_RIGHTS_RENEWAL_NOT_ALLOWED"/>
-	</class>
-	<class name="android/drm/DrmEvent" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IILjava/lang/String;)V"/>
-		<method name="&lt;init>(IILjava/lang/String;Ljava/util/HashMap;)V" since="12"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;" since="12"/>
-		<method name="getMessage()Ljava/lang/String;"/>
-		<method name="getType()I"/>
-		<method name="getUniqueId()I"/>
-		<field name="DRM_INFO_OBJECT" since="12"/>
-		<field name="DRM_INFO_STATUS_OBJECT"/>
-		<field name="TYPE_ALL_RIGHTS_REMOVED"/>
-		<field name="TYPE_DRM_INFO_PROCESSED"/>
-	</class>
-	<class name="android/drm/DrmInfo" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(I[BLjava/lang/String;)V"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getData()[B"/>
-		<method name="getInfoType()I"/>
-		<method name="getMimeType()Ljava/lang/String;"/>
-		<method name="iterator()Ljava/util/Iterator;"/>
-		<method name="keyIterator()Ljava/util/Iterator;"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/drm/DrmInfoEvent" since="11">
-		<extends name="android/drm/DrmEvent"/>
-		<method name="&lt;init>(IILjava/lang/String;)V"/>
-		<method name="&lt;init>(IILjava/lang/String;Ljava/util/HashMap;)V" since="12"/>
-		<field name="TYPE_ACCOUNT_ALREADY_REGISTERED"/>
-		<field name="TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT"/>
-		<field name="TYPE_REMOVE_RIGHTS"/>
-		<field name="TYPE_RIGHTS_INSTALLED"/>
-		<field name="TYPE_RIGHTS_REMOVED" since="12"/>
-		<field name="TYPE_WAIT_FOR_RIGHTS"/>
-	</class>
-	<class name="android/drm/DrmInfoRequest" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getInfoType()I"/>
-		<method name="getMimeType()Ljava/lang/String;"/>
-		<method name="iterator()Ljava/util/Iterator;"/>
-		<method name="keyIterator()Ljava/util/Iterator;"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<field name="ACCOUNT_ID"/>
-		<field name="SUBSCRIPTION_ID"/>
-		<field name="TYPE_REGISTRATION_INFO"/>
-		<field name="TYPE_RIGHTS_ACQUISITION_INFO"/>
-		<field name="TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO"/>
-		<field name="TYPE_UNREGISTRATION_INFO"/>
-	</class>
-	<class name="android/drm/DrmInfoStatus" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IILandroid/drm/ProcessedData;Ljava/lang/String;)V"/>
-		<field name="STATUS_ERROR"/>
-		<field name="STATUS_OK"/>
-		<field name="data"/>
-		<field name="infoType"/>
-		<field name="mimeType"/>
-		<field name="statusCode"/>
-	</class>
-	<class name="android/drm/DrmManagerClient" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="24"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="acquireDrmInfo(Landroid/drm/DrmInfoRequest;)Landroid/drm/DrmInfo;"/>
-		<method name="acquireRights(Landroid/drm/DrmInfoRequest;)I"/>
-		<method name="canHandle(Landroid/net/Uri;Ljava/lang/String;)Z"/>
-		<method name="canHandle(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="checkRightsStatus(Landroid/net/Uri;)I"/>
-		<method name="checkRightsStatus(Landroid/net/Uri;I)I"/>
-		<method name="checkRightsStatus(Ljava/lang/String;)I"/>
-		<method name="checkRightsStatus(Ljava/lang/String;I)I"/>
-		<method name="closeConvertSession(I)Landroid/drm/DrmConvertedStatus;"/>
-		<method name="convertData(I[B)Landroid/drm/DrmConvertedStatus;"/>
-		<method name="getAvailableDrmEngines()[Ljava/lang/String;"/>
-		<method name="getConstraints(Landroid/net/Uri;I)Landroid/content/ContentValues;"/>
-		<method name="getConstraints(Ljava/lang/String;I)Landroid/content/ContentValues;"/>
-		<method name="getDrmObjectType(Landroid/net/Uri;Ljava/lang/String;)I"/>
-		<method name="getDrmObjectType(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="getMetadata(Landroid/net/Uri;)Landroid/content/ContentValues;"/>
-		<method name="getMetadata(Ljava/lang/String;)Landroid/content/ContentValues;"/>
-		<method name="getOriginalMimeType(Landroid/net/Uri;)Ljava/lang/String;"/>
-		<method name="getOriginalMimeType(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="openConvertSession(Ljava/lang/String;)I"/>
-		<method name="processDrmInfo(Landroid/drm/DrmInfo;)I"/>
-		<method name="release()V" since="16" deprecated="24"/>
-		<method name="removeAllRights()I"/>
-		<method name="removeRights(Landroid/net/Uri;)I"/>
-		<method name="removeRights(Ljava/lang/String;)I"/>
-		<method name="saveRights(Landroid/drm/DrmRights;Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="setOnErrorListener(Landroid/drm/DrmManagerClient$OnErrorListener;)V"/>
-		<method name="setOnEventListener(Landroid/drm/DrmManagerClient$OnEventListener;)V"/>
-		<method name="setOnInfoListener(Landroid/drm/DrmManagerClient$OnInfoListener;)V"/>
-		<field name="ERROR_NONE"/>
-		<field name="ERROR_UNKNOWN"/>
-	</class>
-	<class name="android/drm/DrmManagerClient$OnErrorListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onError(Landroid/drm/DrmManagerClient;Landroid/drm/DrmErrorEvent;)V"/>
-	</class>
-	<class name="android/drm/DrmManagerClient$OnEventListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onEvent(Landroid/drm/DrmManagerClient;Landroid/drm/DrmEvent;)V" since="12"/>
-		<method name="onEvent(Landroid/drm/DrmManagerClient;Landroid/drm/DrmEvent;Ljava/util/HashMap;)V" removed="12"/>
-	</class>
-	<class name="android/drm/DrmManagerClient$OnInfoListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onInfo(Landroid/drm/DrmManagerClient;Landroid/drm/DrmInfoEvent;)V"/>
-	</class>
-	<class name="android/drm/DrmRights" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/drm/ProcessedData;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getAccountId()Ljava/lang/String;"/>
-		<method name="getData()[B"/>
-		<method name="getMimeType()Ljava/lang/String;"/>
-		<method name="getSubscriptionId()Ljava/lang/String;"/>
-	</class>
-	<class name="android/drm/DrmStore" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-	</class>
-	<class name="android/drm/DrmStore$Action" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="DEFAULT"/>
-		<field name="DISPLAY"/>
-		<field name="EXECUTE"/>
-		<field name="OUTPUT"/>
-		<field name="PLAY"/>
-		<field name="PREVIEW"/>
-		<field name="RINGTONE"/>
-		<field name="TRANSFER"/>
-	</class>
-	<class name="android/drm/DrmStore$ConstraintsColumns" since="11">
-		<extends name="java/lang/Object"/>
-		<field name="EXTENDED_METADATA"/>
-		<field name="LICENSE_AVAILABLE_TIME"/>
-		<field name="LICENSE_EXPIRY_TIME"/>
-		<field name="LICENSE_START_TIME"/>
-		<field name="MAX_REPEAT_COUNT"/>
-		<field name="REMAINING_REPEAT_COUNT"/>
-	</class>
-	<class name="android/drm/DrmStore$DrmObjectType" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="CONTENT"/>
-		<field name="RIGHTS_OBJECT"/>
-		<field name="TRIGGER_OBJECT"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/drm/DrmStore$Playback" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="PAUSE"/>
-		<field name="RESUME"/>
-		<field name="START"/>
-		<field name="STOP"/>
-	</class>
-	<class name="android/drm/DrmStore$RightsStatus" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="RIGHTS_EXPIRED"/>
-		<field name="RIGHTS_INVALID"/>
-		<field name="RIGHTS_NOT_ACQUIRED"/>
-		<field name="RIGHTS_VALID"/>
-	</class>
-	<class name="android/drm/DrmSupportInfo" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addFileSuffix(Ljava/lang/String;)V"/>
-		<method name="addMimeType(Ljava/lang/String;)V"/>
-		<method name="getDescriprition()Ljava/lang/String;" deprecated="16"/>
-		<method name="getDescription()Ljava/lang/String;" since="16"/>
-		<method name="getFileSuffixIterator()Ljava/util/Iterator;"/>
-		<method name="getMimeTypeIterator()Ljava/util/Iterator;"/>
-		<method name="setDescription(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/drm/DrmUtils" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getExtendedMetadataParser([B)Landroid/drm/DrmUtils$ExtendedMetadataParser;"/>
-	</class>
-	<class name="android/drm/DrmUtils$ExtendedMetadataParser" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([B)V" since="29"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="iterator()Ljava/util/Iterator;"/>
-		<method name="keyIterator()Ljava/util/Iterator;"/>
-	</class>
-	<class name="android/drm/ProcessedData" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([BLjava/lang/String;)V" since="29"/>
-		<method name="getAccountId()Ljava/lang/String;"/>
-		<method name="getData()[B"/>
-		<method name="getSubscriptionId()Ljava/lang/String;"/>
-	</class>
-	<class name="android/gesture/Gesture" since="4">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="addStroke(Landroid/gesture/GestureStroke;)V"/>
-		<method name="getBoundingBox()Landroid/graphics/RectF;"/>
-		<method name="getID()J"/>
-		<method name="getLength()F"/>
-		<method name="getStrokes()Ljava/util/ArrayList;"/>
-		<method name="getStrokesCount()I"/>
-		<method name="toBitmap(IIII)Landroid/graphics/Bitmap;"/>
-		<method name="toBitmap(IIIII)Landroid/graphics/Bitmap;"/>
-		<method name="toPath()Landroid/graphics/Path;"/>
-		<method name="toPath(IIII)Landroid/graphics/Path;"/>
-		<method name="toPath(Landroid/graphics/Path;)Landroid/graphics/Path;"/>
-		<method name="toPath(Landroid/graphics/Path;IIII)Landroid/graphics/Path;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/gesture/GestureLibraries" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="fromFile(Ljava/io/File;)Landroid/gesture/GestureLibrary;"/>
-		<method name="fromFile(Ljava/lang/String;)Landroid/gesture/GestureLibrary;"/>
-		<method name="fromPrivateFile(Landroid/content/Context;Ljava/lang/String;)Landroid/gesture/GestureLibrary;"/>
-		<method name="fromRawResource(Landroid/content/Context;I)Landroid/gesture/GestureLibrary;"/>
-	</class>
-	<class name="android/gesture/GestureLibrary" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
-		<method name="getGestureEntries()Ljava/util/Set;"/>
-		<method name="getGestures(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="getOrientationStyle()I"/>
-		<method name="getSequenceType()I"/>
-		<method name="isReadOnly()Z"/>
-		<method name="load()Z"/>
-		<method name="recognize(Landroid/gesture/Gesture;)Ljava/util/ArrayList;"/>
-		<method name="removeEntry(Ljava/lang/String;)V"/>
-		<method name="removeGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
-		<method name="save()Z"/>
-		<method name="setOrientationStyle(I)V"/>
-		<method name="setSequenceType(I)V"/>
-		<field name="mStore"/>
-	</class>
-	<class name="android/gesture/GestureOverlayView" since="4">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addOnGestureListener(Landroid/gesture/GestureOverlayView$OnGestureListener;)V"/>
-		<method name="addOnGesturePerformedListener(Landroid/gesture/GestureOverlayView$OnGesturePerformedListener;)V"/>
-		<method name="addOnGesturingListener(Landroid/gesture/GestureOverlayView$OnGesturingListener;)V"/>
-		<method name="cancelClearAnimation()V"/>
-		<method name="cancelGesture()V"/>
-		<method name="clear(Z)V"/>
-		<method name="getCurrentStroke()Ljava/util/ArrayList;"/>
-		<method name="getFadeOffset()J"/>
-		<method name="getGesture()Landroid/gesture/Gesture;"/>
-		<method name="getGestureColor()I"/>
-		<method name="getGesturePath()Landroid/graphics/Path;"/>
-		<method name="getGesturePath(Landroid/graphics/Path;)Landroid/graphics/Path;"/>
-		<method name="getGestureStrokeAngleThreshold()F"/>
-		<method name="getGestureStrokeLengthThreshold()F"/>
-		<method name="getGestureStrokeSquarenessTreshold()F"/>
-		<method name="getGestureStrokeType()I"/>
-		<method name="getGestureStrokeWidth()F"/>
-		<method name="getOrientation()I"/>
-		<method name="getUncertainGestureColor()I"/>
-		<method name="isEventsInterceptionEnabled()Z"/>
-		<method name="isFadeEnabled()Z"/>
-		<method name="isGestureVisible()Z"/>
-		<method name="isGesturing()Z"/>
-		<method name="removeAllOnGestureListeners()V"/>
-		<method name="removeAllOnGesturePerformedListeners()V"/>
-		<method name="removeAllOnGesturingListeners()V"/>
-		<method name="removeOnGestureListener(Landroid/gesture/GestureOverlayView$OnGestureListener;)V"/>
-		<method name="removeOnGesturePerformedListener(Landroid/gesture/GestureOverlayView$OnGesturePerformedListener;)V"/>
-		<method name="removeOnGesturingListener(Landroid/gesture/GestureOverlayView$OnGesturingListener;)V"/>
-		<method name="setEventsInterceptionEnabled(Z)V"/>
-		<method name="setFadeEnabled(Z)V"/>
-		<method name="setFadeOffset(J)V"/>
-		<method name="setGesture(Landroid/gesture/Gesture;)V"/>
-		<method name="setGestureColor(I)V"/>
-		<method name="setGestureStrokeAngleThreshold(F)V"/>
-		<method name="setGestureStrokeLengthThreshold(F)V"/>
-		<method name="setGestureStrokeSquarenessTreshold(F)V"/>
-		<method name="setGestureStrokeType(I)V"/>
-		<method name="setGestureStrokeWidth(F)V"/>
-		<method name="setGestureVisible(Z)V"/>
-		<method name="setOrientation(I)V"/>
-		<method name="setUncertainGestureColor(I)V"/>
-		<field name="GESTURE_STROKE_TYPE_MULTIPLE"/>
-		<field name="GESTURE_STROKE_TYPE_SINGLE"/>
-		<field name="ORIENTATION_HORIZONTAL"/>
-		<field name="ORIENTATION_VERTICAL"/>
-	</class>
-	<class name="android/gesture/GestureOverlayView$OnGestureListener" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="onGesture(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
-		<method name="onGestureCancelled(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
-		<method name="onGestureEnded(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
-		<method name="onGestureStarted(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
-	</class>
-	<class name="android/gesture/GestureOverlayView$OnGesturePerformedListener" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="onGesturePerformed(Landroid/gesture/GestureOverlayView;Landroid/gesture/Gesture;)V"/>
-	</class>
-	<class name="android/gesture/GestureOverlayView$OnGesturingListener" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="onGesturingEnded(Landroid/gesture/GestureOverlayView;)V"/>
-		<method name="onGesturingStarted(Landroid/gesture/GestureOverlayView;)V"/>
-	</class>
-	<class name="android/gesture/GesturePoint" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(FFJ)V"/>
-		<field name="timestamp"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/gesture/GestureStore" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
-		<method name="getGestureEntries()Ljava/util/Set;"/>
-		<method name="getGestures(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="getOrientationStyle()I"/>
-		<method name="getSequenceType()I"/>
-		<method name="hasChanged()Z"/>
-		<method name="load(Ljava/io/InputStream;)V"/>
-		<method name="load(Ljava/io/InputStream;Z)V"/>
-		<method name="recognize(Landroid/gesture/Gesture;)Ljava/util/ArrayList;"/>
-		<method name="removeEntry(Ljava/lang/String;)V"/>
-		<method name="removeGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
-		<method name="save(Ljava/io/OutputStream;)V"/>
-		<method name="save(Ljava/io/OutputStream;Z)V"/>
-		<method name="setOrientationStyle(I)V"/>
-		<method name="setSequenceType(I)V"/>
-		<field name="ORIENTATION_INVARIANT"/>
-		<field name="ORIENTATION_SENSITIVE"/>
-		<field name="SEQUENCE_INVARIANT"/>
-		<field name="SEQUENCE_SENSITIVE"/>
-	</class>
-	<class name="android/gesture/GestureStroke" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/util/ArrayList;)V"/>
-		<method name="clearPath()V"/>
-		<method name="computeOrientedBoundingBox()Landroid/gesture/OrientedBoundingBox;"/>
-		<method name="getPath()Landroid/graphics/Path;"/>
-		<method name="toPath(FFI)Landroid/graphics/Path;"/>
-		<field name="boundingBox"/>
-		<field name="length"/>
-		<field name="points"/>
-	</class>
-	<class name="android/gesture/GestureUtils" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="computeOrientedBoundingBox(Ljava/util/ArrayList;)Landroid/gesture/OrientedBoundingBox;"/>
-		<method name="computeOrientedBoundingBox([F)Landroid/gesture/OrientedBoundingBox;"/>
-		<method name="spatialSampling(Landroid/gesture/Gesture;I)[F"/>
-		<method name="spatialSampling(Landroid/gesture/Gesture;IZ)[F"/>
-		<method name="temporalSampling(Landroid/gesture/GestureStroke;I)[F"/>
-	</class>
-	<class name="android/gesture/OrientedBoundingBox" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(FFFFF)V" since="29"/>
-		<field name="centerX"/>
-		<field name="centerY"/>
-		<field name="height"/>
-		<field name="orientation"/>
-		<field name="squareness"/>
-		<field name="width"/>
-	</class>
-	<class name="android/gesture/Prediction" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;D)V" since="29"/>
-		<field name="name"/>
-		<field name="score"/>
-	</class>
-	<class name="android/graphics/AvoidXfermode" since="1" deprecated="16" removed="24">
-		<extends name="android/graphics/Xfermode"/>
-		<method name="&lt;init>(IILandroid/graphics/AvoidXfermode$Mode;)V"/>
-	</class>
-	<class name="android/graphics/AvoidXfermode$Mode" since="1" removed="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/AvoidXfermode$Mode;"/>
-		<method name="values()[Landroid/graphics/AvoidXfermode$Mode;"/>
-		<field name="AVOID"/>
-		<field name="TARGET"/>
-	</class>
-	<class name="android/graphics/Bitmap" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z"/>
-		<method name="copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;"/>
-		<method name="copyPixelsFromBuffer(Ljava/nio/Buffer;)V" since="3"/>
-		<method name="copyPixelsToBuffer(Ljava/nio/Buffer;)V"/>
-		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"/>
-		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;" since="26"/>
-		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="26"/>
-		<method name="createBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;"/>
-		<method name="createBitmap(Landroid/graphics/Bitmap;IIII)Landroid/graphics/Bitmap;"/>
-		<method name="createBitmap(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;"/>
-		<method name="createBitmap(Landroid/graphics/Picture;)Landroid/graphics/Bitmap;" since="28"/>
-		<method name="createBitmap(Landroid/graphics/Picture;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="28"/>
-		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17"/>
-		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;" since="26"/>
-		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="26"/>
-		<method name="createBitmap(Landroid/util/DisplayMetrics;[IIIIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17"/>
-		<method name="createBitmap(Landroid/util/DisplayMetrics;[IIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17"/>
-		<method name="createBitmap([IIIIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"/>
-		<method name="createBitmap([IIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"/>
-		<method name="createScaledBitmap(Landroid/graphics/Bitmap;IIZ)Landroid/graphics/Bitmap;"/>
-		<method name="eraseColor(I)V"/>
-		<method name="extractAlpha()Landroid/graphics/Bitmap;"/>
-		<method name="extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;"/>
-		<method name="getAllocationByteCount()I" since="19"/>
-		<method name="getByteCount()I" since="12"/>
-		<method name="getColorSpace()Landroid/graphics/ColorSpace;" since="26"/>
-		<method name="getConfig()Landroid/graphics/Bitmap$Config;"/>
-		<method name="getDensity()I" since="4"/>
-		<method name="getGenerationId()I" since="12"/>
-		<method name="getHeight()I"/>
-		<method name="getNinePatchChunk()[B"/>
-		<method name="getPixel(II)I"/>
-		<method name="getPixels([IIIIIII)V"/>
-		<method name="getRowBytes()I"/>
-		<method name="getScaledHeight(I)I" since="4"/>
-		<method name="getScaledHeight(Landroid/graphics/Canvas;)I" since="4"/>
-		<method name="getScaledHeight(Landroid/util/DisplayMetrics;)I" since="4"/>
-		<method name="getScaledWidth(I)I" since="4"/>
-		<method name="getScaledWidth(Landroid/graphics/Canvas;)I" since="4"/>
-		<method name="getScaledWidth(Landroid/util/DisplayMetrics;)I" since="4"/>
-		<method name="getWidth()I"/>
-		<method name="hasAlpha()Z"/>
-		<method name="hasMipMap()Z" since="17"/>
-		<method name="isMutable()Z"/>
-		<method name="isPremultiplied()Z" since="17"/>
-		<method name="isRecycled()Z"/>
-		<method name="prepareToDraw()V" since="4"/>
-		<method name="reconfigure(IILandroid/graphics/Bitmap$Config;)V" since="19"/>
-		<method name="recycle()V"/>
-		<method name="sameAs(Landroid/graphics/Bitmap;)Z" since="12"/>
-		<method name="setConfig(Landroid/graphics/Bitmap$Config;)V" since="19"/>
-		<method name="setDensity(I)V" since="4"/>
-		<method name="setHasAlpha(Z)V" since="12"/>
-		<method name="setHasMipMap(Z)V" since="17"/>
-		<method name="setHeight(I)V" since="19"/>
-		<method name="setPixel(III)V"/>
-		<method name="setPixels([IIIIIII)V"/>
-		<method name="setPremultiplied(Z)V" since="19"/>
-		<method name="setWidth(I)V" since="19"/>
-		<field name="CREATOR"/>
-		<field name="DENSITY_NONE" since="4"/>
-	</class>
-	<class name="android/graphics/Bitmap$CompressFormat" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$CompressFormat;"/>
-		<method name="values()[Landroid/graphics/Bitmap$CompressFormat;"/>
-		<field name="JPEG"/>
-		<field name="PNG"/>
-		<field name="WEBP" since="14"/>
-	</class>
-	<class name="android/graphics/Bitmap$Config" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;"/>
-		<method name="values()[Landroid/graphics/Bitmap$Config;"/>
-		<field name="ALPHA_8"/>
-		<field name="ARGB_4444" deprecated="28"/>
-		<field name="ARGB_8888"/>
-		<field name="HARDWARE" since="26"/>
-		<field name="RGBA_F16" since="26"/>
-		<field name="RGB_565"/>
-	</class>
-	<class name="android/graphics/BitmapFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="decodeByteArray([BII)Landroid/graphics/Bitmap;"/>
-		<method name="decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeFile(Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeFileDescriptor(Ljava/io/FileDescriptor;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeFileDescriptor(Ljava/io/FileDescriptor;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeResource(Landroid/content/res/Resources;I)Landroid/graphics/Bitmap;"/>
-		<method name="decodeResource(Landroid/content/res/Resources;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="4"/>
-		<method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeStream(Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
-	</class>
-	<class name="android/graphics/BitmapFactory$Options" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="requestCancelDecode()V" deprecated="24"/>
-		<field name="inBitmap" since="11"/>
-		<field name="inDensity" since="4"/>
-		<field name="inDither" deprecated="24"/>
-		<field name="inInputShareable" since="4" deprecated="21"/>
-		<field name="inJustDecodeBounds"/>
-		<field name="inMutable" since="11"/>
-		<field name="inPreferQualityOverSpeed" since="10" deprecated="24"/>
-		<field name="inPreferredColorSpace" since="26"/>
-		<field name="inPreferredConfig"/>
-		<field name="inPremultiplied" since="19"/>
-		<field name="inPurgeable" since="4" deprecated="21"/>
-		<field name="inSampleSize"/>
-		<field name="inScaled" since="4"/>
-		<field name="inScreenDensity" since="4"/>
-		<field name="inTargetDensity" since="4"/>
-		<field name="inTempStorage"/>
-		<field name="mCancel" deprecated="24"/>
-		<field name="outColorSpace" since="26"/>
-		<field name="outConfig" since="26"/>
-		<field name="outHeight"/>
-		<field name="outMimeType"/>
-		<field name="outWidth"/>
-	</class>
-	<class name="android/graphics/BitmapRegionDecoder" since="10">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-		<method name="decodeRegion(Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-		<method name="isRecycled()Z"/>
-		<method name="newInstance(Ljava/io/FileDescriptor;Z)Landroid/graphics/BitmapRegionDecoder;"/>
-		<method name="newInstance(Ljava/io/InputStream;Z)Landroid/graphics/BitmapRegionDecoder;"/>
-		<method name="newInstance(Ljava/lang/String;Z)Landroid/graphics/BitmapRegionDecoder;"/>
-		<method name="newInstance([BIIZ)Landroid/graphics/BitmapRegionDecoder;"/>
-		<method name="recycle()V"/>
-	</class>
-	<class name="android/graphics/BitmapShader" since="1">
-		<extends name="android/graphics/Shader"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V"/>
-	</class>
-	<class name="android/graphics/BlurMaskFilter" since="1">
-		<extends name="android/graphics/MaskFilter"/>
-		<method name="&lt;init>(FLandroid/graphics/BlurMaskFilter$Blur;)V"/>
-	</class>
-	<class name="android/graphics/BlurMaskFilter$Blur" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/BlurMaskFilter$Blur;"/>
-		<method name="values()[Landroid/graphics/BlurMaskFilter$Blur;"/>
-		<field name="INNER"/>
-		<field name="NORMAL"/>
-		<field name="OUTER"/>
-		<field name="SOLID"/>
-	</class>
-	<class name="android/graphics/Camera" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="applyToCanvas(Landroid/graphics/Canvas;)V"/>
-		<method name="dotWithNormal(FFF)F"/>
-		<method name="getLocationX()F" since="16"/>
-		<method name="getLocationY()F" since="16"/>
-		<method name="getLocationZ()F" since="16"/>
-		<method name="getMatrix(Landroid/graphics/Matrix;)V"/>
-		<method name="restore()V"/>
-		<method name="rotate(FFF)V" since="12"/>
-		<method name="rotateX(F)V"/>
-		<method name="rotateY(F)V"/>
-		<method name="rotateZ(F)V"/>
-		<method name="save()V"/>
-		<method name="setLocation(FFF)V" since="12"/>
-		<method name="translate(FFF)V"/>
-	</class>
-	<class name="android/graphics/Canvas" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;)V"/>
-		<method name="&lt;init>(Ljavax/microedition/khronos/opengles/GL;)V" removed="11"/>
-		<method name="clipOutPath(Landroid/graphics/Path;)Z" since="26"/>
-		<method name="clipOutRect(FFFF)Z" since="26"/>
-		<method name="clipOutRect(IIII)Z" since="26"/>
-		<method name="clipOutRect(Landroid/graphics/Rect;)Z" since="26"/>
-		<method name="clipOutRect(Landroid/graphics/RectF;)Z" since="26"/>
-		<method name="clipPath(Landroid/graphics/Path;)Z"/>
-		<method name="clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z" deprecated="26"/>
-		<method name="clipRect(FFFF)Z"/>
-		<method name="clipRect(FFFFLandroid/graphics/Region$Op;)Z" deprecated="26"/>
-		<method name="clipRect(IIII)Z"/>
-		<method name="clipRect(Landroid/graphics/Rect;)Z"/>
-		<method name="clipRect(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z" deprecated="26"/>
-		<method name="clipRect(Landroid/graphics/RectF;)Z"/>
-		<method name="clipRect(Landroid/graphics/RectF;Landroid/graphics/Region$Op;)Z" deprecated="26"/>
-		<method name="clipRegion(Landroid/graphics/Region;)Z" deprecated="21" removed="26"/>
-		<method name="clipRegion(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z" deprecated="21" removed="26"/>
-		<method name="concat(Landroid/graphics/Matrix;)V"/>
-		<method name="drawARGB(IIII)V"/>
-		<method name="drawArc(FFFFFFZLandroid/graphics/Paint;)V" since="21"/>
-		<method name="drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V"/>
-		<method name="drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V"/>
-		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Matrix;Landroid/graphics/Paint;)V"/>
-		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
-		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
-		<method name="drawBitmap([IIIFFIIZLandroid/graphics/Paint;)V" since="3" deprecated="21"/>
-		<method name="drawBitmap([IIIIIIIZLandroid/graphics/Paint;)V" deprecated="21"/>
-		<method name="drawBitmapMesh(Landroid/graphics/Bitmap;II[FI[IILandroid/graphics/Paint;)V"/>
-		<method name="drawCircle(FFFLandroid/graphics/Paint;)V"/>
-		<method name="drawColor(I)V"/>
-		<method name="drawColor(ILandroid/graphics/PorterDuff$Mode;)V"/>
-		<method name="drawLine(FFFFLandroid/graphics/Paint;)V"/>
-		<method name="drawLines([FIILandroid/graphics/Paint;)V"/>
-		<method name="drawLines([FLandroid/graphics/Paint;)V"/>
-		<method name="drawOval(FFFFLandroid/graphics/Paint;)V" since="21"/>
-		<method name="drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
-		<method name="drawPaint(Landroid/graphics/Paint;)V"/>
-		<method name="drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V"/>
-		<method name="drawPicture(Landroid/graphics/Picture;)V"/>
-		<method name="drawPicture(Landroid/graphics/Picture;Landroid/graphics/Rect;)V"/>
-		<method name="drawPicture(Landroid/graphics/Picture;Landroid/graphics/RectF;)V"/>
-		<method name="drawPoint(FFLandroid/graphics/Paint;)V"/>
-		<method name="drawPoints([FIILandroid/graphics/Paint;)V"/>
-		<method name="drawPoints([FLandroid/graphics/Paint;)V"/>
-		<method name="drawPosText(Ljava/lang/String;[FLandroid/graphics/Paint;)V" deprecated="16"/>
-		<method name="drawPosText([CII[FLandroid/graphics/Paint;)V" deprecated="16"/>
-		<method name="drawRGB(III)V"/>
-		<method name="drawRect(FFFFLandroid/graphics/Paint;)V"/>
-		<method name="drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
-		<method name="drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
-		<method name="drawRoundRect(FFFFFFLandroid/graphics/Paint;)V" since="21"/>
-		<method name="drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V"/>
-		<method name="drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V"/>
-		<method name="drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V"/>
-		<method name="drawText(Ljava/lang/String;IIFFLandroid/graphics/Paint;)V"/>
-		<method name="drawText([CIIFFLandroid/graphics/Paint;)V"/>
-		<method name="drawTextOnPath(Ljava/lang/String;Landroid/graphics/Path;FFLandroid/graphics/Paint;)V"/>
-		<method name="drawTextOnPath([CIILandroid/graphics/Path;FFLandroid/graphics/Paint;)V"/>
-		<method name="drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V" since="23"/>
-		<method name="drawTextRun([CIIIIFFZLandroid/graphics/Paint;)V" since="23"/>
-		<method name="drawVertices(Landroid/graphics/Canvas$VertexMode;I[FI[FI[II[SIILandroid/graphics/Paint;)V"/>
-		<method name="freeGlCaches()V" removed="11"/>
-		<method name="getClipBounds()Landroid/graphics/Rect;"/>
-		<method name="getClipBounds(Landroid/graphics/Rect;)Z"/>
-		<method name="getDensity()I" since="4"/>
-		<method name="getDrawFilter()Landroid/graphics/DrawFilter;"/>
-		<method name="getGL()Ljavax/microedition/khronos/opengles/GL;" removed="11"/>
-		<method name="getHeight()I"/>
-		<method name="getMatrix()Landroid/graphics/Matrix;" deprecated="16"/>
-		<method name="getMatrix(Landroid/graphics/Matrix;)V" deprecated="16"/>
-		<method name="getMaximumBitmapHeight()I" since="14"/>
-		<method name="getMaximumBitmapWidth()I" since="14"/>
-		<method name="getSaveCount()I"/>
-		<method name="getWidth()I"/>
-		<method name="isHardwareAccelerated()Z" since="11"/>
-		<method name="isOpaque()Z"/>
-		<method name="quickReject(FFFFLandroid/graphics/Canvas$EdgeType;)Z"/>
-		<method name="quickReject(Landroid/graphics/Path;Landroid/graphics/Canvas$EdgeType;)Z"/>
-		<method name="quickReject(Landroid/graphics/RectF;Landroid/graphics/Canvas$EdgeType;)Z"/>
-		<method name="restore()V"/>
-		<method name="restoreToCount(I)V"/>
-		<method name="rotate(F)V"/>
-		<method name="rotate(FFF)V"/>
-		<method name="save()I"/>
-		<method name="save(I)I" deprecated="26" removed="28"/>
-		<method name="saveLayer(FFFFLandroid/graphics/Paint;)I" since="21"/>
-		<method name="saveLayer(FFFFLandroid/graphics/Paint;I)I" deprecated="26"/>
-		<method name="saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I" since="21"/>
-		<method name="saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I" deprecated="26"/>
-		<method name="saveLayerAlpha(FFFFI)I" since="21"/>
-		<method name="saveLayerAlpha(FFFFII)I" deprecated="26"/>
-		<method name="saveLayerAlpha(Landroid/graphics/RectF;I)I" since="21"/>
-		<method name="saveLayerAlpha(Landroid/graphics/RectF;II)I" deprecated="26"/>
-		<method name="scale(FF)V"/>
-		<method name="scale(FFFF)V"/>
-		<method name="setBitmap(Landroid/graphics/Bitmap;)V"/>
-		<method name="setDensity(I)V" since="4"/>
-		<method name="setDrawFilter(Landroid/graphics/DrawFilter;)V"/>
-		<method name="setMatrix(Landroid/graphics/Matrix;)V"/>
-		<method name="setViewport(II)V" removed="11"/>
-		<method name="skew(FF)V"/>
-		<method name="translate(FF)V"/>
-		<field name="ALL_SAVE_FLAG"/>
-		<field name="CLIP_SAVE_FLAG" deprecated="26" removed="28"/>
-		<field name="CLIP_TO_LAYER_SAVE_FLAG" deprecated="26" removed="28"/>
-		<field name="FULL_COLOR_LAYER_SAVE_FLAG" deprecated="26" removed="28"/>
-		<field name="HAS_ALPHA_LAYER_SAVE_FLAG" deprecated="26" removed="28"/>
-		<field name="MATRIX_SAVE_FLAG" deprecated="26" removed="28"/>
-	</class>
-	<class name="android/graphics/Canvas$EdgeType" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Canvas$EdgeType;"/>
-		<method name="values()[Landroid/graphics/Canvas$EdgeType;"/>
-		<field name="AA"/>
-		<field name="BW"/>
-	</class>
-	<class name="android/graphics/Canvas$VertexMode" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Canvas$VertexMode;"/>
-		<method name="values()[Landroid/graphics/Canvas$VertexMode;"/>
-		<field name="TRIANGLES"/>
-		<field name="TRIANGLE_FAN"/>
-		<field name="TRIANGLE_STRIP"/>
-	</class>
-	<class name="android/graphics/Color" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="HSVToColor(I[F)I"/>
-		<method name="HSVToColor([F)I"/>
-		<method name="RGBToHSV(III[F)V"/>
-		<method name="alpha()F" since="26"/>
-		<method name="alpha(I)I"/>
-		<method name="alpha(J)F" since="26"/>
-		<method name="argb(FFFF)I" since="26"/>
-		<method name="argb(IIII)I"/>
-		<method name="blue()F" since="26"/>
-		<method name="blue(I)I"/>
-		<method name="blue(J)F" since="26"/>
-		<method name="colorSpace(J)Landroid/graphics/ColorSpace;" since="26"/>
-		<method name="colorToHSV(I[F)V"/>
-		<method name="convert(FFFFLandroid/graphics/ColorSpace$Connector;)J" since="26"/>
-		<method name="convert(FFFFLandroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;)J" since="26"/>
-		<method name="convert(ILandroid/graphics/ColorSpace;)J" since="26"/>
-		<method name="convert(JLandroid/graphics/ColorSpace$Connector;)J" since="26"/>
-		<method name="convert(JLandroid/graphics/ColorSpace;)J" since="26"/>
-		<method name="convert(Landroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26"/>
-		<method name="getColorSpace()Landroid/graphics/ColorSpace;" since="26"/>
-		<method name="getComponent(I)F" since="26"/>
-		<method name="getComponentCount()I" since="26"/>
-		<method name="getComponents()[F" since="26"/>
-		<method name="getComponents([F)[F" since="26"/>
-		<method name="getModel()Landroid/graphics/ColorSpace$Model;" since="26"/>
-		<method name="green()F" since="26"/>
-		<method name="green(I)I"/>
-		<method name="green(J)F" since="26"/>
-		<method name="isInColorSpace(JLandroid/graphics/ColorSpace;)Z" since="26"/>
-		<method name="isSrgb()Z" since="26"/>
-		<method name="isSrgb(J)Z" since="26"/>
-		<method name="isWideGamut()Z" since="26"/>
-		<method name="isWideGamut(J)Z" since="26"/>
-		<method name="luminance()F" since="26"/>
-		<method name="luminance(I)F" since="24"/>
-		<method name="luminance(J)F" since="26"/>
-		<method name="pack()J" since="26"/>
-		<method name="pack(FFF)J" since="26"/>
-		<method name="pack(FFFF)J" since="26"/>
-		<method name="pack(FFFFLandroid/graphics/ColorSpace;)J" since="26"/>
-		<method name="pack(I)J" since="26"/>
-		<method name="parseColor(Ljava/lang/String;)I"/>
-		<method name="red()F" since="26"/>
-		<method name="red(I)I"/>
-		<method name="red(J)F" since="26"/>
-		<method name="rgb(FFF)I" since="26"/>
-		<method name="rgb(III)I"/>
-		<method name="toArgb()I" since="26"/>
-		<method name="toArgb(J)I" since="26"/>
-		<method name="valueOf(FFF)Landroid/graphics/Color;" since="26"/>
-		<method name="valueOf(FFFF)Landroid/graphics/Color;" since="26"/>
-		<method name="valueOf(FFFFLandroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26"/>
-		<method name="valueOf(I)Landroid/graphics/Color;" since="26"/>
-		<method name="valueOf(J)Landroid/graphics/Color;" since="26"/>
-		<method name="valueOf([FLandroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26"/>
-		<field name="BLACK"/>
-		<field name="BLUE"/>
-		<field name="CYAN"/>
-		<field name="DKGRAY"/>
-		<field name="GRAY"/>
-		<field name="GREEN"/>
-		<field name="LTGRAY"/>
-		<field name="MAGENTA"/>
-		<field name="RED"/>
-		<field name="TRANSPARENT"/>
-		<field name="WHITE"/>
-		<field name="YELLOW"/>
-	</class>
-	<class name="android/graphics/ColorFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="26"/>
-	</class>
-	<class name="android/graphics/ColorMatrix" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/ColorMatrix;)V"/>
-		<method name="&lt;init>([F)V"/>
-		<method name="getArray()[F"/>
-		<method name="postConcat(Landroid/graphics/ColorMatrix;)V"/>
-		<method name="preConcat(Landroid/graphics/ColorMatrix;)V"/>
-		<method name="reset()V"/>
-		<method name="set(Landroid/graphics/ColorMatrix;)V"/>
-		<method name="set([F)V"/>
-		<method name="setConcat(Landroid/graphics/ColorMatrix;Landroid/graphics/ColorMatrix;)V"/>
-		<method name="setRGB2YUV()V"/>
-		<method name="setRotate(IF)V"/>
-		<method name="setSaturation(F)V"/>
-		<method name="setScale(FFFF)V"/>
-		<method name="setYUV2RGB()V"/>
-	</class>
-	<class name="android/graphics/ColorMatrixColorFilter" since="1">
-		<extends name="android/graphics/ColorFilter"/>
-		<method name="&lt;init>(Landroid/graphics/ColorMatrix;)V"/>
-		<method name="&lt;init>([F)V"/>
-		<method name="getColorMatrix(Landroid/graphics/ColorMatrix;)V" since="26"/>
-	</class>
-	<class name="android/graphics/ColorSpace" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/graphics/ColorSpace$Model;I)V" since="29"/>
-		<method name="adapt(Landroid/graphics/ColorSpace;[F)Landroid/graphics/ColorSpace;"/>
-		<method name="adapt(Landroid/graphics/ColorSpace;[FLandroid/graphics/ColorSpace$Adaptation;)Landroid/graphics/ColorSpace;"/>
-		<method name="connect(Landroid/graphics/ColorSpace;)Landroid/graphics/ColorSpace$Connector;"/>
-		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)Landroid/graphics/ColorSpace$Connector;"/>
-		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;)Landroid/graphics/ColorSpace$Connector;"/>
-		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)Landroid/graphics/ColorSpace$Connector;"/>
-		<method name="fromXyz(FFF)[F"/>
-		<method name="fromXyz([F)[F"/>
-		<method name="get(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace;"/>
-		<method name="getComponentCount()I"/>
-		<method name="getId()I"/>
-		<method name="getMaxValue(I)F"/>
-		<method name="getMinValue(I)F"/>
-		<method name="getModel()Landroid/graphics/ColorSpace$Model;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="isSrgb()Z"/>
-		<method name="isWideGamut()Z"/>
-		<method name="match([FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)Landroid/graphics/ColorSpace;"/>
-		<method name="toXyz(FFF)[F"/>
-		<method name="toXyz([F)[F"/>
-		<field name="ILLUMINANT_A"/>
-		<field name="ILLUMINANT_B"/>
-		<field name="ILLUMINANT_C"/>
-		<field name="ILLUMINANT_D50"/>
-		<field name="ILLUMINANT_D55"/>
-		<field name="ILLUMINANT_D60"/>
-		<field name="ILLUMINANT_D65"/>
-		<field name="ILLUMINANT_D75"/>
-		<field name="ILLUMINANT_E"/>
-		<field name="MAX_ID"/>
-		<field name="MIN_ID"/>
-	</class>
-	<class name="android/graphics/ColorSpace$Adaptation" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Adaptation;"/>
-		<method name="values()[Landroid/graphics/ColorSpace$Adaptation;"/>
-		<field name="BRADFORD"/>
-		<field name="CIECAT02"/>
-		<field name="VON_KRIES"/>
-	</class>
-	<class name="android/graphics/ColorSpace$Connector" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)V" since="29"/>
-		<method name="getDestination()Landroid/graphics/ColorSpace;"/>
-		<method name="getRenderIntent()Landroid/graphics/ColorSpace$RenderIntent;"/>
-		<method name="getSource()Landroid/graphics/ColorSpace;"/>
-		<method name="transform(FFF)[F"/>
-		<method name="transform([F)[F"/>
-	</class>
-	<class name="android/graphics/ColorSpace$Model" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="getComponentCount()I"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Model;"/>
-		<method name="values()[Landroid/graphics/ColorSpace$Model;"/>
-		<field name="CMYK"/>
-		<field name="LAB"/>
-		<field name="RGB"/>
-		<field name="XYZ"/>
-	</class>
-	<class name="android/graphics/ColorSpace$Named" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Named;"/>
-		<method name="values()[Landroid/graphics/ColorSpace$Named;"/>
-		<field name="ACES"/>
-		<field name="ACESCG"/>
-		<field name="ADOBE_RGB"/>
-		<field name="BT2020"/>
-		<field name="BT709"/>
-		<field name="CIE_LAB"/>
-		<field name="CIE_XYZ"/>
-		<field name="DCI_P3"/>
-		<field name="DISPLAY_P3"/>
-		<field name="EXTENDED_SRGB"/>
-		<field name="LINEAR_EXTENDED_SRGB"/>
-		<field name="LINEAR_SRGB"/>
-		<field name="NTSC_1953"/>
-		<field name="PRO_PHOTO_RGB"/>
-		<field name="SMPTE_C"/>
-		<field name="SRGB"/>
-	</class>
-	<class name="android/graphics/ColorSpace$RenderIntent" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$RenderIntent;"/>
-		<method name="values()[Landroid/graphics/ColorSpace$RenderIntent;"/>
-		<field name="ABSOLUTE"/>
-		<field name="PERCEPTUAL"/>
-		<field name="RELATIVE"/>
-		<field name="SATURATION"/>
-	</class>
-	<class name="android/graphics/ColorSpace$Rgb" since="26">
-		<extends name="android/graphics/ColorSpace"/>
-		<method name="&lt;init>(Ljava/lang/String;[FD)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[F[FD)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[F[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FF)V"/>
-		<method name="fromLinear(FFF)[F"/>
-		<method name="fromLinear([F)[F"/>
-		<method name="getEotf()Ljava/util/function/DoubleUnaryOperator;"/>
-		<method name="getInverseTransform()[F"/>
-		<method name="getInverseTransform([F)[F"/>
-		<method name="getOetf()Ljava/util/function/DoubleUnaryOperator;"/>
-		<method name="getPrimaries()[F"/>
-		<method name="getPrimaries([F)[F"/>
-		<method name="getTransferParameters()Landroid/graphics/ColorSpace$Rgb$TransferParameters;"/>
-		<method name="getTransform()[F"/>
-		<method name="getTransform([F)[F"/>
-		<method name="getWhitePoint()[F"/>
-		<method name="getWhitePoint([F)[F"/>
-		<method name="toLinear(FFF)[F"/>
-		<method name="toLinear([F)[F"/>
-	</class>
-	<class name="android/graphics/ColorSpace$Rgb$TransferParameters" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(DDDDD)V"/>
-		<method name="&lt;init>(DDDDDDD)V"/>
-		<field name="a"/>
-		<field name="b"/>
-		<field name="c"/>
-		<field name="d"/>
-		<field name="e"/>
-		<field name="f"/>
-		<field name="g"/>
-	</class>
-	<class name="android/graphics/ComposePathEffect" since="1">
-		<extends name="android/graphics/PathEffect"/>
-		<method name="&lt;init>(Landroid/graphics/PathEffect;Landroid/graphics/PathEffect;)V"/>
-	</class>
-	<class name="android/graphics/ComposeShader" since="1">
-		<extends name="android/graphics/Shader"/>
-		<method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/PorterDuff$Mode;)V"/>
-		<method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/Xfermode;)V"/>
-	</class>
-	<class name="android/graphics/CornerPathEffect" since="1">
-		<extends name="android/graphics/PathEffect"/>
-		<method name="&lt;init>(F)V"/>
-	</class>
-	<class name="android/graphics/DashPathEffect" since="1">
-		<extends name="android/graphics/PathEffect"/>
-		<method name="&lt;init>([FF)V"/>
-	</class>
-	<class name="android/graphics/DiscretePathEffect" since="1">
-		<extends name="android/graphics/PathEffect"/>
-		<method name="&lt;init>(FF)V"/>
-	</class>
-	<class name="android/graphics/DrawFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/EmbossMaskFilter" since="1">
-		<extends name="android/graphics/MaskFilter"/>
-		<method name="&lt;init>([FFFF)V" deprecated="28"/>
-	</class>
-	<class name="android/graphics/ImageDecoder" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JIIZZ)V" since="29"/>
-		<method name="createSource(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/ImageDecoder$Source;"/>
-		<method name="createSource(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/ImageDecoder$Source;"/>
-		<method name="createSource(Landroid/content/res/Resources;I)Landroid/graphics/ImageDecoder$Source;"/>
-		<method name="createSource(Ljava/io/File;)Landroid/graphics/ImageDecoder$Source;"/>
-		<method name="createSource(Ljava/nio/ByteBuffer;)Landroid/graphics/ImageDecoder$Source;"/>
-		<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/Bitmap;"/>
-		<method name="decodeDrawable(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="decodeDrawable(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getAllocator()I"/>
-		<method name="getCrop()Landroid/graphics/Rect;"/>
-		<method name="getMemorySizePolicy()I"/>
-		<method name="getOnPartialImageListener()Landroid/graphics/ImageDecoder$OnPartialImageListener;"/>
-		<method name="getPostProcessor()Landroid/graphics/PostProcessor;"/>
-		<method name="isDecodeAsAlphaMaskEnabled()Z"/>
-		<method name="isMutableRequired()Z"/>
-		<method name="isUnpremultipliedRequired()Z"/>
-		<method name="setAllocator(I)V"/>
-		<method name="setCrop(Landroid/graphics/Rect;)V"/>
-		<method name="setDecodeAsAlphaMaskEnabled(Z)V"/>
-		<method name="setMemorySizePolicy(I)V"/>
-		<method name="setMutableRequired(Z)V"/>
-		<method name="setOnPartialImageListener(Landroid/graphics/ImageDecoder$OnPartialImageListener;)V"/>
-		<method name="setPostProcessor(Landroid/graphics/PostProcessor;)V"/>
-		<method name="setTargetColorSpace(Landroid/graphics/ColorSpace;)V"/>
-		<method name="setTargetSampleSize(I)V"/>
-		<method name="setTargetSize(II)V"/>
-		<method name="setUnpremultipliedRequired(Z)V"/>
-		<field name="ALLOCATOR_DEFAULT"/>
-		<field name="ALLOCATOR_HARDWARE"/>
-		<field name="ALLOCATOR_SHARED_MEMORY"/>
-		<field name="ALLOCATOR_SOFTWARE"/>
-		<field name="MEMORY_POLICY_DEFAULT"/>
-		<field name="MEMORY_POLICY_LOW_RAM"/>
-	</class>
-	<class name="android/graphics/ImageDecoder$DecodeException" since="28">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/Throwable;Landroid/graphics/ImageDecoder$Source;)V" since="29"/>
-		<method name="getError()I"/>
-		<method name="getSource()Landroid/graphics/ImageDecoder$Source;"/>
-		<field name="SOURCE_EXCEPTION"/>
-		<field name="SOURCE_INCOMPLETE"/>
-		<field name="SOURCE_MALFORMED_DATA"/>
-	</class>
-	<class name="android/graphics/ImageDecoder$ImageInfo" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/graphics/ImageDecoder;)V" since="29"/>
-		<method name="getColorSpace()Landroid/graphics/ColorSpace;"/>
-		<method name="getMimeType()Ljava/lang/String;"/>
-		<method name="getSize()Landroid/util/Size;"/>
-		<method name="isAnimated()Z"/>
-	</class>
-	<class name="android/graphics/ImageDecoder$OnHeaderDecodedListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V"/>
-	</class>
-	<class name="android/graphics/ImageDecoder$OnPartialImageListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onPartialImage(Landroid/graphics/ImageDecoder$DecodeException;)Z"/>
-	</class>
-	<class name="android/graphics/ImageDecoder$Source" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/ImageFormat" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBitsPerPixel(I)I"/>
-		<field name="DEPTH16" since="23"/>
-		<field name="DEPTH_POINT_CLOUD" since="23"/>
-		<field name="FLEX_RGBA_8888" since="23"/>
-		<field name="FLEX_RGB_888" since="23"/>
-		<field name="JPEG"/>
-		<field name="NV16"/>
-		<field name="NV21"/>
-		<field name="PRIVATE" since="23"/>
-		<field name="RAW10" since="21"/>
-		<field name="RAW12" since="23"/>
-		<field name="RAW_PRIVATE" since="24"/>
-		<field name="RAW_SENSOR" since="21"/>
-		<field name="RGB_565"/>
-		<field name="UNKNOWN"/>
-		<field name="YUV_420_888" since="19"/>
-		<field name="YUV_422_888" since="23"/>
-		<field name="YUV_444_888" since="23"/>
-		<field name="YUY2"/>
-		<field name="YV12" since="9"/>
-	</class>
-	<class name="android/graphics/Interpolator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getKeyFrameCount()I"/>
-		<method name="getValueCount()I"/>
-		<method name="reset(I)V"/>
-		<method name="reset(II)V"/>
-		<method name="setKeyFrame(II[F)V"/>
-		<method name="setKeyFrame(II[F[F)V"/>
-		<method name="setRepeatMirror(FZ)V"/>
-		<method name="timeToValues(I[F)Landroid/graphics/Interpolator$Result;"/>
-		<method name="timeToValues([F)Landroid/graphics/Interpolator$Result;"/>
-	</class>
-	<class name="android/graphics/Interpolator$Result" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Interpolator$Result;"/>
-		<method name="values()[Landroid/graphics/Interpolator$Result;"/>
-		<field name="FREEZE_END"/>
-		<field name="FREEZE_START"/>
-		<field name="NORMAL"/>
-	</class>
-	<class name="android/graphics/LayerRasterizer" since="1" deprecated="21" removed="26">
-		<extends name="android/graphics/Rasterizer"/>
-		<method name="&lt;init>()V"/>
-		<method name="addLayer(Landroid/graphics/Paint;)V"/>
-		<method name="addLayer(Landroid/graphics/Paint;FF)V"/>
-	</class>
-	<class name="android/graphics/LightingColorFilter" since="1">
-		<extends name="android/graphics/ColorFilter"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getColorAdd()I" since="26"/>
-		<method name="getColorMultiply()I" since="26"/>
-	</class>
-	<class name="android/graphics/LinearGradient" since="1">
-		<extends name="android/graphics/Shader"/>
-		<method name="&lt;init>(FFFFIILandroid/graphics/Shader$TileMode;)V"/>
-		<method name="&lt;init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V"/>
-	</class>
-	<class name="android/graphics/MaskFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/Matrix" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/Matrix;)V"/>
-		<method name="getValues([F)V"/>
-		<method name="invert(Landroid/graphics/Matrix;)Z"/>
-		<method name="isAffine()Z" since="21"/>
-		<method name="isIdentity()Z"/>
-		<method name="mapPoints([F)V"/>
-		<method name="mapPoints([FI[FII)V"/>
-		<method name="mapPoints([F[F)V"/>
-		<method name="mapRadius(F)F"/>
-		<method name="mapRect(Landroid/graphics/RectF;)Z"/>
-		<method name="mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z"/>
-		<method name="mapVectors([F)V"/>
-		<method name="mapVectors([FI[FII)V"/>
-		<method name="mapVectors([F[F)V"/>
-		<method name="postConcat(Landroid/graphics/Matrix;)Z"/>
-		<method name="postRotate(F)Z"/>
-		<method name="postRotate(FFF)Z"/>
-		<method name="postScale(FF)Z"/>
-		<method name="postScale(FFFF)Z"/>
-		<method name="postSkew(FF)Z"/>
-		<method name="postSkew(FFFF)Z"/>
-		<method name="postTranslate(FF)Z"/>
-		<method name="preConcat(Landroid/graphics/Matrix;)Z"/>
-		<method name="preRotate(F)Z"/>
-		<method name="preRotate(FFF)Z"/>
-		<method name="preScale(FF)Z"/>
-		<method name="preScale(FFFF)Z"/>
-		<method name="preSkew(FF)Z"/>
-		<method name="preSkew(FFFF)Z"/>
-		<method name="preTranslate(FF)Z"/>
-		<method name="rectStaysRect()Z"/>
-		<method name="reset()V"/>
-		<method name="set(Landroid/graphics/Matrix;)V"/>
-		<method name="setConcat(Landroid/graphics/Matrix;Landroid/graphics/Matrix;)Z"/>
-		<method name="setPolyToPoly([FI[FII)Z"/>
-		<method name="setRectToRect(Landroid/graphics/RectF;Landroid/graphics/RectF;Landroid/graphics/Matrix$ScaleToFit;)Z"/>
-		<method name="setRotate(F)V"/>
-		<method name="setRotate(FFF)V"/>
-		<method name="setScale(FF)V"/>
-		<method name="setScale(FFFF)V"/>
-		<method name="setSinCos(FF)V"/>
-		<method name="setSinCos(FFFF)V"/>
-		<method name="setSkew(FF)V"/>
-		<method name="setSkew(FFFF)V"/>
-		<method name="setTranslate(FF)V"/>
-		<method name="setValues([F)V"/>
-		<method name="toShortString()Ljava/lang/String;"/>
-		<field name="MPERSP_0"/>
-		<field name="MPERSP_1"/>
-		<field name="MPERSP_2"/>
-		<field name="MSCALE_X"/>
-		<field name="MSCALE_Y"/>
-		<field name="MSKEW_X"/>
-		<field name="MSKEW_Y"/>
-		<field name="MTRANS_X"/>
-		<field name="MTRANS_Y"/>
-	</class>
-	<class name="android/graphics/Matrix$ScaleToFit" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Matrix$ScaleToFit;"/>
-		<method name="values()[Landroid/graphics/Matrix$ScaleToFit;"/>
-		<field name="CENTER"/>
-		<field name="END"/>
-		<field name="FILL"/>
-		<field name="START"/>
-	</class>
-	<class name="android/graphics/Movie" since="1" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-		<method name="decodeByteArray([BII)Landroid/graphics/Movie;"/>
-		<method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Movie;"/>
-		<method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Movie;"/>
-		<method name="draw(Landroid/graphics/Canvas;FF)V"/>
-		<method name="draw(Landroid/graphics/Canvas;FFLandroid/graphics/Paint;)V"/>
-		<method name="duration()I"/>
-		<method name="height()I"/>
-		<method name="isOpaque()Z"/>
-		<method name="setTime(I)Z"/>
-		<method name="width()I"/>
-	</class>
-	<class name="android/graphics/NinePatch" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;[B)V" since="19"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;[BLjava/lang/String;)V"/>
-		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;)V"/>
-		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
-		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/RectF;)V"/>
-		<method name="getBitmap()Landroid/graphics/Bitmap;" since="19"/>
-		<method name="getDensity()I" since="4"/>
-		<method name="getHeight()I"/>
-		<method name="getName()Ljava/lang/String;" since="19"/>
-		<method name="getPaint()Landroid/graphics/Paint;" since="19"/>
-		<method name="getTransparentRegion(Landroid/graphics/Rect;)Landroid/graphics/Region;"/>
-		<method name="getWidth()I"/>
-		<method name="hasAlpha()Z"/>
-		<method name="isNinePatchChunk([B)Z"/>
-		<method name="setPaint(Landroid/graphics/Paint;)V"/>
-	</class>
-	<class name="android/graphics/Outline" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/Outline;)V"/>
-		<method name="canClip()Z"/>
-		<method name="getAlpha()F"/>
-		<method name="getRadius()F" since="24"/>
-		<method name="getRect(Landroid/graphics/Rect;)Z" since="24"/>
-		<method name="isEmpty()Z"/>
-		<method name="offset(II)V" since="22"/>
-		<method name="set(Landroid/graphics/Outline;)V"/>
-		<method name="setAlpha(F)V"/>
-		<method name="setConvexPath(Landroid/graphics/Path;)V"/>
-		<method name="setEmpty()V"/>
-		<method name="setOval(IIII)V"/>
-		<method name="setOval(Landroid/graphics/Rect;)V"/>
-		<method name="setRect(IIII)V"/>
-		<method name="setRect(Landroid/graphics/Rect;)V"/>
-		<method name="setRoundRect(IIIIF)V"/>
-		<method name="setRoundRect(Landroid/graphics/Rect;F)V"/>
-	</class>
-	<class name="android/graphics/Paint" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/graphics/Paint;)V"/>
-		<method name="ascent()F"/>
-		<method name="breakText(Ljava/lang/CharSequence;IIZF[F)I"/>
-		<method name="breakText(Ljava/lang/String;ZF[F)I"/>
-		<method name="breakText([CIIF[F)I"/>
-		<method name="clearShadowLayer()V"/>
-		<method name="descent()F"/>
-		<method name="equalsForTextMeasurement(Landroid/graphics/Paint;)Z" since="28"/>
-		<method name="getAlpha()I"/>
-		<method name="getColor()I"/>
-		<method name="getColorFilter()Landroid/graphics/ColorFilter;"/>
-		<method name="getFillPath(Landroid/graphics/Path;Landroid/graphics/Path;)Z"/>
-		<method name="getFlags()I"/>
-		<method name="getFontFeatureSettings()Ljava/lang/String;" since="21"/>
-		<method name="getFontMetrics()Landroid/graphics/Paint$FontMetrics;"/>
-		<method name="getFontMetrics(Landroid/graphics/Paint$FontMetrics;)F"/>
-		<method name="getFontMetricsInt()Landroid/graphics/Paint$FontMetricsInt;"/>
-		<method name="getFontMetricsInt(Landroid/graphics/Paint$FontMetricsInt;)I"/>
-		<method name="getFontSpacing()F"/>
-		<method name="getFontVariationSettings()Ljava/lang/String;" since="26"/>
-		<method name="getHinting()I" since="14"/>
-		<method name="getLetterSpacing()F" since="21"/>
-		<method name="getMaskFilter()Landroid/graphics/MaskFilter;"/>
-		<method name="getOffsetForAdvance(Ljava/lang/CharSequence;IIIIZF)I" since="23"/>
-		<method name="getOffsetForAdvance([CIIIIZF)I" since="23"/>
-		<method name="getPathEffect()Landroid/graphics/PathEffect;"/>
-		<method name="getRasterizer()Landroid/graphics/Rasterizer;" deprecated="21" removed="26"/>
-		<method name="getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F" since="23"/>
-		<method name="getRunAdvance([CIIIIZI)F" since="23"/>
-		<method name="getShader()Landroid/graphics/Shader;"/>
-		<method name="getStrokeCap()Landroid/graphics/Paint$Cap;"/>
-		<method name="getStrokeJoin()Landroid/graphics/Paint$Join;"/>
-		<method name="getStrokeMiter()F"/>
-		<method name="getStrokeWidth()F"/>
-		<method name="getStyle()Landroid/graphics/Paint$Style;"/>
-		<method name="getTextAlign()Landroid/graphics/Paint$Align;"/>
-		<method name="getTextBounds(Ljava/lang/String;IILandroid/graphics/Rect;)V"/>
-		<method name="getTextBounds([CIILandroid/graphics/Rect;)V"/>
-		<method name="getTextLocale()Ljava/util/Locale;" since="17"/>
-		<method name="getTextLocales()Landroid/os/LocaleList;" since="24"/>
-		<method name="getTextPath(Ljava/lang/String;IIFFLandroid/graphics/Path;)V"/>
-		<method name="getTextPath([CIIFFLandroid/graphics/Path;)V"/>
-		<method name="getTextScaleX()F"/>
-		<method name="getTextSize()F"/>
-		<method name="getTextSkewX()F"/>
-		<method name="getTextWidths(Ljava/lang/CharSequence;II[F)I"/>
-		<method name="getTextWidths(Ljava/lang/String;II[F)I"/>
-		<method name="getTextWidths(Ljava/lang/String;[F)I"/>
-		<method name="getTextWidths([CII[F)I"/>
-		<method name="getTypeface()Landroid/graphics/Typeface;"/>
-		<method name="getXfermode()Landroid/graphics/Xfermode;"/>
-		<method name="hasGlyph(Ljava/lang/String;)Z" since="23"/>
-		<method name="isAntiAlias()Z"/>
-		<method name="isDither()Z"/>
-		<method name="isElegantTextHeight()Z" since="21"/>
-		<method name="isFakeBoldText()Z"/>
-		<method name="isFilterBitmap()Z"/>
-		<method name="isLinearText()Z" deprecated="16"/>
-		<method name="isStrikeThruText()Z"/>
-		<method name="isSubpixelText()Z"/>
-		<method name="isUnderlineText()Z"/>
-		<method name="measureText(Ljava/lang/CharSequence;II)F"/>
-		<method name="measureText(Ljava/lang/String;)F"/>
-		<method name="measureText(Ljava/lang/String;II)F"/>
-		<method name="measureText([CII)F"/>
-		<method name="reset()V"/>
-		<method name="set(Landroid/graphics/Paint;)V"/>
-		<method name="setARGB(IIII)V"/>
-		<method name="setAlpha(I)V"/>
-		<method name="setAntiAlias(Z)V"/>
-		<method name="setColor(I)V"/>
-		<method name="setColorFilter(Landroid/graphics/ColorFilter;)Landroid/graphics/ColorFilter;"/>
-		<method name="setDither(Z)V"/>
-		<method name="setElegantTextHeight(Z)V" since="21"/>
-		<method name="setFakeBoldText(Z)V"/>
-		<method name="setFilterBitmap(Z)V"/>
-		<method name="setFlags(I)V"/>
-		<method name="setFontFeatureSettings(Ljava/lang/String;)V" since="21"/>
-		<method name="setFontVariationSettings(Ljava/lang/String;)Z" since="26"/>
-		<method name="setHinting(I)V" since="14"/>
-		<method name="setLetterSpacing(F)V" since="21"/>
-		<method name="setLinearText(Z)V" deprecated="16"/>
-		<method name="setMaskFilter(Landroid/graphics/MaskFilter;)Landroid/graphics/MaskFilter;"/>
-		<method name="setPathEffect(Landroid/graphics/PathEffect;)Landroid/graphics/PathEffect;"/>
-		<method name="setRasterizer(Landroid/graphics/Rasterizer;)Landroid/graphics/Rasterizer;" deprecated="21" removed="26"/>
-		<method name="setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;"/>
-		<method name="setShadowLayer(FFFI)V"/>
-		<method name="setStrikeThruText(Z)V"/>
-		<method name="setStrokeCap(Landroid/graphics/Paint$Cap;)V"/>
-		<method name="setStrokeJoin(Landroid/graphics/Paint$Join;)V"/>
-		<method name="setStrokeMiter(F)V"/>
-		<method name="setStrokeWidth(F)V"/>
-		<method name="setStyle(Landroid/graphics/Paint$Style;)V"/>
-		<method name="setSubpixelText(Z)V"/>
-		<method name="setTextAlign(Landroid/graphics/Paint$Align;)V"/>
-		<method name="setTextLocale(Ljava/util/Locale;)V" since="17"/>
-		<method name="setTextLocales(Landroid/os/LocaleList;)V" since="24"/>
-		<method name="setTextScaleX(F)V"/>
-		<method name="setTextSize(F)V"/>
-		<method name="setTextSkewX(F)V"/>
-		<method name="setTypeface(Landroid/graphics/Typeface;)Landroid/graphics/Typeface;"/>
-		<method name="setUnderlineText(Z)V"/>
-		<method name="setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;"/>
-		<field name="ANTI_ALIAS_FLAG"/>
-		<field name="DEV_KERN_TEXT_FLAG"/>
-		<field name="DITHER_FLAG"/>
-		<field name="EMBEDDED_BITMAP_TEXT_FLAG" since="19"/>
-		<field name="FAKE_BOLD_TEXT_FLAG"/>
-		<field name="FILTER_BITMAP_FLAG"/>
-		<field name="HINTING_OFF" since="14"/>
-		<field name="HINTING_ON" since="14"/>
-		<field name="LINEAR_TEXT_FLAG"/>
-		<field name="STRIKE_THRU_TEXT_FLAG"/>
-		<field name="SUBPIXEL_TEXT_FLAG"/>
-		<field name="UNDERLINE_TEXT_FLAG"/>
-	</class>
-	<class name="android/graphics/Paint$Align" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Align;"/>
-		<method name="values()[Landroid/graphics/Paint$Align;"/>
-		<field name="CENTER"/>
-		<field name="LEFT"/>
-		<field name="RIGHT"/>
-	</class>
-	<class name="android/graphics/Paint$Cap" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Cap;"/>
-		<method name="values()[Landroid/graphics/Paint$Cap;"/>
-		<field name="BUTT"/>
-		<field name="ROUND"/>
-		<field name="SQUARE"/>
-	</class>
-	<class name="android/graphics/Paint$FontMetrics" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ascent"/>
-		<field name="bottom"/>
-		<field name="descent"/>
-		<field name="leading"/>
-		<field name="top"/>
-	</class>
-	<class name="android/graphics/Paint$FontMetricsInt" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ascent"/>
-		<field name="bottom"/>
-		<field name="descent"/>
-		<field name="leading"/>
-		<field name="top"/>
-	</class>
-	<class name="android/graphics/Paint$Join" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Join;"/>
-		<method name="values()[Landroid/graphics/Paint$Join;"/>
-		<field name="BEVEL"/>
-		<field name="MITER"/>
-		<field name="ROUND"/>
-	</class>
-	<class name="android/graphics/Paint$Style" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Style;"/>
-		<method name="values()[Landroid/graphics/Paint$Style;"/>
-		<field name="FILL"/>
-		<field name="FILL_AND_STROKE"/>
-		<field name="STROKE"/>
-	</class>
-	<class name="android/graphics/PaintFlagsDrawFilter" since="1">
-		<extends name="android/graphics/DrawFilter"/>
-		<method name="&lt;init>(II)V"/>
-	</class>
-	<class name="android/graphics/Path" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/Path;)V"/>
-		<method name="addArc(FFFFFF)V" since="21"/>
-		<method name="addArc(Landroid/graphics/RectF;FF)V"/>
-		<method name="addCircle(FFFLandroid/graphics/Path$Direction;)V"/>
-		<method name="addOval(FFFFLandroid/graphics/Path$Direction;)V" since="21"/>
-		<method name="addOval(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V"/>
-		<method name="addPath(Landroid/graphics/Path;)V"/>
-		<method name="addPath(Landroid/graphics/Path;FF)V"/>
-		<method name="addPath(Landroid/graphics/Path;Landroid/graphics/Matrix;)V"/>
-		<method name="addRect(FFFFLandroid/graphics/Path$Direction;)V"/>
-		<method name="addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V"/>
-		<method name="addRoundRect(FFFFFFLandroid/graphics/Path$Direction;)V" since="21"/>
-		<method name="addRoundRect(FFFF[FLandroid/graphics/Path$Direction;)V" since="21"/>
-		<method name="addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V"/>
-		<method name="addRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/Path$Direction;)V"/>
-		<method name="approximate(F)[F" since="26"/>
-		<method name="arcTo(FFFFFFZ)V" since="21"/>
-		<method name="arcTo(Landroid/graphics/RectF;FF)V"/>
-		<method name="arcTo(Landroid/graphics/RectF;FFZ)V"/>
-		<method name="close()V"/>
-		<method name="computeBounds(Landroid/graphics/RectF;Z)V"/>
-		<method name="cubicTo(FFFFFF)V"/>
-		<method name="getFillType()Landroid/graphics/Path$FillType;"/>
-		<method name="incReserve(I)V"/>
-		<method name="isConvex()Z" since="21"/>
-		<method name="isEmpty()Z"/>
-		<method name="isInverseFillType()Z"/>
-		<method name="isRect(Landroid/graphics/RectF;)Z"/>
-		<method name="lineTo(FF)V"/>
-		<method name="moveTo(FF)V"/>
-		<method name="offset(FF)V"/>
-		<method name="offset(FFLandroid/graphics/Path;)V"/>
-		<method name="op(Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z" since="19"/>
-		<method name="op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z" since="19"/>
-		<method name="quadTo(FFFF)V"/>
-		<method name="rCubicTo(FFFFFF)V"/>
-		<method name="rLineTo(FF)V"/>
-		<method name="rMoveTo(FF)V"/>
-		<method name="rQuadTo(FFFF)V"/>
-		<method name="reset()V"/>
-		<method name="rewind()V"/>
-		<method name="set(Landroid/graphics/Path;)V"/>
-		<method name="setFillType(Landroid/graphics/Path$FillType;)V"/>
-		<method name="setLastPoint(FF)V"/>
-		<method name="toggleInverseFillType()V"/>
-		<method name="transform(Landroid/graphics/Matrix;)V"/>
-		<method name="transform(Landroid/graphics/Matrix;Landroid/graphics/Path;)V"/>
-	</class>
-	<class name="android/graphics/Path$Direction" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$Direction;"/>
-		<method name="values()[Landroid/graphics/Path$Direction;"/>
-		<field name="CCW"/>
-		<field name="CW"/>
-	</class>
-	<class name="android/graphics/Path$FillType" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$FillType;"/>
-		<method name="values()[Landroid/graphics/Path$FillType;"/>
-		<field name="EVEN_ODD"/>
-		<field name="INVERSE_EVEN_ODD"/>
-		<field name="INVERSE_WINDING"/>
-		<field name="WINDING"/>
-	</class>
-	<class name="android/graphics/Path$Op" since="19">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$Op;"/>
-		<method name="values()[Landroid/graphics/Path$Op;"/>
-		<field name="DIFFERENCE"/>
-		<field name="INTERSECT"/>
-		<field name="REVERSE_DIFFERENCE"/>
-		<field name="UNION"/>
-		<field name="XOR"/>
-	</class>
-	<class name="android/graphics/PathDashPathEffect" since="1">
-		<extends name="android/graphics/PathEffect"/>
-		<method name="&lt;init>(Landroid/graphics/Path;FFLandroid/graphics/PathDashPathEffect$Style;)V"/>
-	</class>
-	<class name="android/graphics/PathDashPathEffect$Style" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/PathDashPathEffect$Style;"/>
-		<method name="values()[Landroid/graphics/PathDashPathEffect$Style;"/>
-		<field name="MORPH"/>
-		<field name="ROTATE"/>
-		<field name="TRANSLATE"/>
-	</class>
-	<class name="android/graphics/PathEffect" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/PathMeasure" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/Path;Z)V"/>
-		<method name="getLength()F"/>
-		<method name="getMatrix(FLandroid/graphics/Matrix;I)Z"/>
-		<method name="getPosTan(F[F[F)Z"/>
-		<method name="getSegment(FFLandroid/graphics/Path;Z)Z"/>
-		<method name="isClosed()Z"/>
-		<method name="nextContour()Z"/>
-		<method name="setPath(Landroid/graphics/Path;Z)V"/>
-		<field name="POSITION_MATRIX_FLAG"/>
-		<field name="TANGENT_MATRIX_FLAG"/>
-	</class>
-	<class name="android/graphics/Picture" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/Picture;)V"/>
-		<method name="beginRecording(II)Landroid/graphics/Canvas;"/>
-		<method name="createFromStream(Ljava/io/InputStream;)Landroid/graphics/Picture;" deprecated="18"/>
-		<method name="draw(Landroid/graphics/Canvas;)V"/>
-		<method name="endRecording()V"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-		<method name="requiresHardwareAcceleration()Z" since="28"/>
-		<method name="writeToStream(Ljava/io/OutputStream;)V" deprecated="18"/>
-	</class>
-	<class name="android/graphics/PixelFormat" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="formatHasAlpha(I)Z"/>
-		<method name="getPixelFormatInfo(ILandroid/graphics/PixelFormat;)V"/>
-		<field name="A_8" deprecated="19"/>
-		<field name="JPEG" deprecated="16"/>
-		<field name="LA_88" deprecated="16"/>
-		<field name="L_8" deprecated="19"/>
-		<field name="OPAQUE"/>
-		<field name="RGBA_1010102" since="26"/>
-		<field name="RGBA_4444" deprecated="16"/>
-		<field name="RGBA_5551" deprecated="16"/>
-		<field name="RGBA_8888"/>
-		<field name="RGBA_F16" since="26"/>
-		<field name="RGBX_8888"/>
-		<field name="RGB_332" deprecated="16"/>
-		<field name="RGB_565"/>
-		<field name="RGB_888"/>
-		<field name="TRANSLUCENT"/>
-		<field name="TRANSPARENT"/>
-		<field name="UNKNOWN"/>
-		<field name="YCbCr_420_SP" deprecated="16"/>
-		<field name="YCbCr_422_I" since="5" deprecated="16"/>
-		<field name="YCbCr_422_SP" deprecated="16"/>
-		<field name="bitsPerPixel"/>
-		<field name="bytesPerPixel"/>
-	</class>
-	<class name="android/graphics/PixelXorXfermode" since="1" deprecated="16" removed="24">
-		<extends name="android/graphics/Xfermode"/>
-		<method name="&lt;init>(I)V"/>
-	</class>
-	<class name="android/graphics/Point" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="13"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/graphics/Point;)V"/>
-		<method name="equals(II)Z"/>
-		<method name="negate()V"/>
-		<method name="offset(II)V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V" since="13"/>
-		<method name="set(II)V"/>
-		<field name="CREATOR" since="13"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/graphics/PointF" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="13"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(FF)V"/>
-		<method name="&lt;init>(Landroid/graphics/Point;)V"/>
-		<method name="equals(FF)Z"/>
-		<method name="length()F"/>
-		<method name="length(FF)F"/>
-		<method name="negate()V"/>
-		<method name="offset(FF)V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V" since="13"/>
-		<method name="set(FF)V"/>
-		<method name="set(Landroid/graphics/PointF;)V"/>
-		<field name="CREATOR" since="13"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/graphics/PorterDuff" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/PorterDuff$Mode" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/PorterDuff$Mode;"/>
-		<method name="values()[Landroid/graphics/PorterDuff$Mode;"/>
-		<field name="ADD" since="11"/>
-		<field name="CLEAR"/>
-		<field name="DARKEN"/>
-		<field name="DST"/>
-		<field name="DST_ATOP"/>
-		<field name="DST_IN"/>
-		<field name="DST_OUT"/>
-		<field name="DST_OVER"/>
-		<field name="LIGHTEN"/>
-		<field name="MULTIPLY"/>
-		<field name="OVERLAY" since="11"/>
-		<field name="SCREEN"/>
-		<field name="SRC"/>
-		<field name="SRC_ATOP"/>
-		<field name="SRC_IN"/>
-		<field name="SRC_OUT"/>
-		<field name="SRC_OVER"/>
-		<field name="XOR"/>
-	</class>
-	<class name="android/graphics/PorterDuffColorFilter" since="1">
-		<extends name="android/graphics/ColorFilter"/>
-		<method name="&lt;init>(ILandroid/graphics/PorterDuff$Mode;)V"/>
-	</class>
-	<class name="android/graphics/PorterDuffXfermode" since="1">
-		<extends name="android/graphics/Xfermode"/>
-		<method name="&lt;init>(Landroid/graphics/PorterDuff$Mode;)V"/>
-	</class>
-	<class name="android/graphics/PostProcessor" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onPostProcess(Landroid/graphics/Canvas;)I"/>
-	</class>
-	<class name="android/graphics/RadialGradient" since="1">
-		<extends name="android/graphics/Shader"/>
-		<method name="&lt;init>(FFFIILandroid/graphics/Shader$TileMode;)V"/>
-		<method name="&lt;init>(FFF[I[FLandroid/graphics/Shader$TileMode;)V"/>
-	</class>
-	<class name="android/graphics/Rasterizer" since="1" deprecated="21" removed="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/Rect" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(IIII)V"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;)V"/>
-		<method name="centerX()I"/>
-		<method name="centerY()I"/>
-		<method name="contains(II)Z"/>
-		<method name="contains(IIII)Z"/>
-		<method name="contains(Landroid/graphics/Rect;)Z"/>
-		<method name="exactCenterX()F"/>
-		<method name="exactCenterY()F"/>
-		<method name="flattenToString()Ljava/lang/String;" since="7"/>
-		<method name="height()I"/>
-		<method name="inset(II)V"/>
-		<method name="intersect(IIII)Z"/>
-		<method name="intersect(Landroid/graphics/Rect;)Z"/>
-		<method name="intersects(IIII)Z"/>
-		<method name="intersects(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="offset(II)V"/>
-		<method name="offsetTo(II)V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<method name="set(IIII)V"/>
-		<method name="set(Landroid/graphics/Rect;)V"/>
-		<method name="setEmpty()V"/>
-		<method name="setIntersect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z"/>
-		<method name="sort()V"/>
-		<method name="toShortString()Ljava/lang/String;" since="3"/>
-		<method name="unflattenFromString(Ljava/lang/String;)Landroid/graphics/Rect;" since="7"/>
-		<method name="union(II)V"/>
-		<method name="union(IIII)V"/>
-		<method name="union(Landroid/graphics/Rect;)V"/>
-		<method name="width()I"/>
-		<field name="CREATOR"/>
-		<field name="bottom"/>
-		<field name="left"/>
-		<field name="right"/>
-		<field name="top"/>
-	</class>
-	<class name="android/graphics/RectF" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(FFFF)V"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;)V"/>
-		<method name="&lt;init>(Landroid/graphics/RectF;)V"/>
-		<method name="centerX()F"/>
-		<method name="centerY()F"/>
-		<method name="contains(FF)Z"/>
-		<method name="contains(FFFF)Z"/>
-		<method name="contains(Landroid/graphics/RectF;)Z"/>
-		<method name="height()F"/>
-		<method name="inset(FF)V"/>
-		<method name="intersect(FFFF)Z"/>
-		<method name="intersect(Landroid/graphics/RectF;)Z"/>
-		<method name="intersects(FFFF)Z"/>
-		<method name="intersects(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="offset(FF)V"/>
-		<method name="offsetTo(FF)V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V" since="3"/>
-		<method name="round(Landroid/graphics/Rect;)V"/>
-		<method name="roundOut(Landroid/graphics/Rect;)V"/>
-		<method name="set(FFFF)V"/>
-		<method name="set(Landroid/graphics/Rect;)V"/>
-		<method name="set(Landroid/graphics/RectF;)V"/>
-		<method name="setEmpty()V"/>
-		<method name="setIntersect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z"/>
-		<method name="sort()V"/>
-		<method name="toShortString()Ljava/lang/String;" since="14"/>
-		<method name="union(FF)V"/>
-		<method name="union(FFFF)V"/>
-		<method name="union(Landroid/graphics/RectF;)V"/>
-		<method name="width()F"/>
-		<field name="CREATOR" since="3"/>
-		<field name="bottom"/>
-		<field name="left"/>
-		<field name="right"/>
-		<field name="top"/>
-	</class>
-	<class name="android/graphics/Region" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(IIII)V"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;)V"/>
-		<method name="&lt;init>(Landroid/graphics/Region;)V"/>
-		<method name="contains(II)Z"/>
-		<method name="getBoundaryPath()Landroid/graphics/Path;"/>
-		<method name="getBoundaryPath(Landroid/graphics/Path;)Z"/>
-		<method name="getBounds()Landroid/graphics/Rect;"/>
-		<method name="getBounds(Landroid/graphics/Rect;)Z"/>
-		<method name="isComplex()Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="isRect()Z"/>
-		<method name="op(IIIILandroid/graphics/Region$Op;)Z"/>
-		<method name="op(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z"/>
-		<method name="op(Landroid/graphics/Rect;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z"/>
-		<method name="op(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z"/>
-		<method name="op(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z"/>
-		<method name="quickContains(IIII)Z"/>
-		<method name="quickContains(Landroid/graphics/Rect;)Z"/>
-		<method name="quickReject(IIII)Z"/>
-		<method name="quickReject(Landroid/graphics/Rect;)Z"/>
-		<method name="quickReject(Landroid/graphics/Region;)Z"/>
-		<method name="set(IIII)Z"/>
-		<method name="set(Landroid/graphics/Rect;)Z"/>
-		<method name="set(Landroid/graphics/Region;)Z"/>
-		<method name="setEmpty()V"/>
-		<method name="setPath(Landroid/graphics/Path;Landroid/graphics/Region;)Z"/>
-		<method name="translate(II)V"/>
-		<method name="translate(IILandroid/graphics/Region;)V"/>
-		<method name="union(Landroid/graphics/Rect;)Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/graphics/Region$Op" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Region$Op;"/>
-		<method name="values()[Landroid/graphics/Region$Op;"/>
-		<field name="DIFFERENCE"/>
-		<field name="INTERSECT"/>
-		<field name="REPLACE"/>
-		<field name="REVERSE_DIFFERENCE"/>
-		<field name="UNION"/>
-		<field name="XOR"/>
-	</class>
-	<class name="android/graphics/RegionIterator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/graphics/Region;)V"/>
-		<method name="next(Landroid/graphics/Rect;)Z"/>
-	</class>
-	<class name="android/graphics/Shader" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="26"/>
-		<method name="getLocalMatrix(Landroid/graphics/Matrix;)Z"/>
-		<method name="setLocalMatrix(Landroid/graphics/Matrix;)V"/>
-	</class>
-	<class name="android/graphics/Shader$TileMode" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Shader$TileMode;"/>
-		<method name="values()[Landroid/graphics/Shader$TileMode;"/>
-		<field name="CLAMP"/>
-		<field name="MIRROR"/>
-		<field name="REPEAT"/>
-	</class>
-	<class name="android/graphics/SumPathEffect" since="1">
-		<extends name="android/graphics/PathEffect"/>
-		<method name="&lt;init>(Landroid/graphics/PathEffect;Landroid/graphics/PathEffect;)V"/>
-	</class>
-	<class name="android/graphics/SurfaceTexture" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IZ)V" since="19"/>
-		<method name="&lt;init>(Z)V" since="26"/>
-		<method name="attachToGLContext(I)V" since="16"/>
-		<method name="detachFromGLContext()V" since="16"/>
-		<method name="getTimestamp()J" since="14"/>
-		<method name="getTransformMatrix([F)V"/>
-		<method name="isReleased()Z" since="26"/>
-		<method name="release()V" since="14"/>
-		<method name="releaseTexImage()V" since="19"/>
-		<method name="setDefaultBufferSize(II)V" since="15"/>
-		<method name="setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V"/>
-		<method name="setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;Landroid/os/Handler;)V" since="21"/>
-		<method name="updateTexImage()V"/>
-	</class>
-	<class name="android/graphics/SurfaceTexture$OnFrameAvailableListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onFrameAvailable(Landroid/graphics/SurfaceTexture;)V"/>
-	</class>
-	<class name="android/graphics/SurfaceTexture$OutOfResourcesException" since="11" deprecated="19">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/graphics/SweepGradient" since="1">
-		<extends name="android/graphics/Shader"/>
-		<method name="&lt;init>(FFII)V"/>
-		<method name="&lt;init>(FF[I[F)V"/>
-	</class>
-	<class name="android/graphics/Typeface" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-		<method name="create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;"/>
-		<method name="create(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;" since="28"/>
-		<method name="create(Ljava/lang/String;I)Landroid/graphics/Typeface;"/>
-		<method name="createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;"/>
-		<method name="createFromFile(Ljava/io/File;)Landroid/graphics/Typeface;" since="4"/>
-		<method name="createFromFile(Ljava/lang/String;)Landroid/graphics/Typeface;" since="4"/>
-		<method name="defaultFromStyle(I)Landroid/graphics/Typeface;"/>
-		<method name="getStyle()I"/>
-		<method name="getWeight()I" since="28"/>
-		<method name="isBold()Z"/>
-		<method name="isItalic()Z"/>
-		<field name="BOLD"/>
-		<field name="BOLD_ITALIC"/>
-		<field name="DEFAULT"/>
-		<field name="DEFAULT_BOLD"/>
-		<field name="ITALIC"/>
-		<field name="MONOSPACE"/>
-		<field name="NORMAL"/>
-		<field name="SANS_SERIF"/>
-		<field name="SERIF"/>
-	</class>
-	<class name="android/graphics/Typeface$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/res/AssetManager;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="build()Landroid/graphics/Typeface;"/>
-		<method name="setFallback(Ljava/lang/String;)Landroid/graphics/Typeface$Builder;"/>
-		<method name="setFontVariationSettings(Ljava/lang/String;)Landroid/graphics/Typeface$Builder;"/>
-		<method name="setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/Typeface$Builder;"/>
-		<method name="setItalic(Z)Landroid/graphics/Typeface$Builder;"/>
-		<method name="setTtcIndex(I)Landroid/graphics/Typeface$Builder;"/>
-		<method name="setWeight(I)Landroid/graphics/Typeface$Builder;"/>
-	</class>
-	<class name="android/graphics/Xfermode" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/YuvImage" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>([BIII[I)V"/>
-		<method name="compressToJpeg(Landroid/graphics/Rect;ILjava/io/OutputStream;)Z"/>
-		<method name="getHeight()I"/>
-		<method name="getStrides()[I"/>
-		<method name="getWidth()I"/>
-		<method name="getYuvData()[B"/>
-		<method name="getYuvFormat()I"/>
-	</class>
-	<class name="android/graphics/drawable/AdaptiveIconDrawable" since="26">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<implements name="android/graphics/drawable/Drawable$Callback"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getExtraInsetFraction()F"/>
-		<method name="getForeground()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getIconMask()Landroid/graphics/Path;"/>
-		<method name="setOpacity(I)V"/>
-	</class>
-	<class name="android/graphics/drawable/Animatable" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="isRunning()Z"/>
-		<method name="start()V"/>
-		<method name="stop()V"/>
-	</class>
-	<class name="android/graphics/drawable/Animatable2" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/graphics/drawable/Animatable"/>
-		<method name="clearAnimationCallbacks()V"/>
-		<method name="registerAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)V"/>
-		<method name="unregisterAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)Z"/>
-	</class>
-	<class name="android/graphics/drawable/Animatable2$AnimationCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAnimationEnd(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="onAnimationStart(Landroid/graphics/drawable/Drawable;)V"/>
-	</class>
-	<class name="android/graphics/drawable/AnimatedImageDrawable" since="28">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<implements name="android/graphics/drawable/Animatable2"/>
-		<method name="&lt;init>()V"/>
-		<method name="getRepeatCount()I"/>
-		<method name="setRepeatCount(I)V"/>
-		<field name="REPEAT_INFINITE"/>
-	</class>
-	<class name="android/graphics/drawable/AnimatedStateListDrawable" since="21">
-		<extends name="android/graphics/drawable/StateListDrawable"/>
-		<method name="&lt;init>()V"/>
-		<method name="addState([ILandroid/graphics/drawable/Drawable;I)V"/>
-		<method name="addTransition(IILandroid/graphics/drawable/Drawable;Z)V"/>
-	</class>
-	<class name="android/graphics/drawable/AnimatedVectorDrawable" since="21">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<implements name="android/graphics/drawable/Animatable" removed="23"/>
-		<implements name="android/graphics/drawable/Animatable2" since="23"/>
-		<method name="&lt;init>()V"/>
-		<method name="reset()V" since="23"/>
-	</class>
-	<class name="android/graphics/drawable/AnimationDrawable" since="1">
-		<extends name="android/graphics/drawable/DrawableContainer"/>
-		<implements name="android/graphics/drawable/Animatable" since="4"/>
-		<implements name="java/lang/Runnable"/>
-		<method name="&lt;init>()V"/>
-		<method name="addFrame(Landroid/graphics/drawable/Drawable;I)V"/>
-		<method name="getDuration(I)I"/>
-		<method name="getFrame(I)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getNumberOfFrames()I"/>
-		<method name="isOneShot()Z"/>
-		<method name="isRunning()Z"/>
-		<method name="setOneShot(Z)V"/>
-		<method name="start()V"/>
-		<method name="stop()V"/>
-	</class>
-	<class name="android/graphics/drawable/BitmapDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;)V" since="4" deprecated="18"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;)V" since="4"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;Ljava/io/InputStream;)V" since="5"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;Ljava/lang/String;)V" since="5"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="16"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="16"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="16"/>
-		<method name="getBitmap()Landroid/graphics/Bitmap;"/>
-		<method name="getGravity()I"/>
-		<method name="getPaint()Landroid/graphics/Paint;"/>
-		<method name="getTileModeX()Landroid/graphics/Shader$TileMode;"/>
-		<method name="getTileModeY()Landroid/graphics/Shader$TileMode;"/>
-		<method name="hasAntiAlias()Z" since="18"/>
-		<method name="hasMipMap()Z" since="18"/>
-		<method name="setAntiAlias(Z)V"/>
-		<method name="setGravity(I)V"/>
-		<method name="setMipMap(Z)V" since="18"/>
-		<method name="setTargetDensity(I)V" since="4"/>
-		<method name="setTargetDensity(Landroid/graphics/Canvas;)V" since="4"/>
-		<method name="setTargetDensity(Landroid/util/DisplayMetrics;)V" since="4"/>
-		<method name="setTileModeX(Landroid/graphics/Shader$TileMode;)V"/>
-		<method name="setTileModeXY(Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V"/>
-		<method name="setTileModeY(Landroid/graphics/Shader$TileMode;)V"/>
-	</class>
-	<class name="android/graphics/drawable/ClipDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable" removed="23"/>
-		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
-		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;II)V"/>
-		<field name="HORIZONTAL"/>
-		<field name="VERTICAL"/>
-	</class>
-	<class name="android/graphics/drawable/ColorDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getAlpha()I"/>
-		<method name="getColor()I" since="11"/>
-		<method name="setColor(I)V" since="11"/>
-	</class>
-	<class name="android/graphics/drawable/Drawable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="applyTheme(Landroid/content/res/Resources$Theme;)V" since="21"/>
-		<method name="canApplyTheme()Z" since="21"/>
-		<method name="clearColorFilter()V"/>
-		<method name="copyBounds()Landroid/graphics/Rect;"/>
-		<method name="copyBounds(Landroid/graphics/Rect;)V"/>
-		<method name="createFromPath(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="createFromResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="4"/>
-		<method name="createFromResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/drawable/Drawable;" since="5" deprecated="28"/>
-		<method name="createFromStream(Ljava/io/InputStream;Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
-		<method name="draw(Landroid/graphics/Canvas;)V"/>
-		<method name="getAlpha()I" since="19"/>
-		<method name="getBounds()Landroid/graphics/Rect;"/>
-		<method name="getCallback()Landroid/graphics/drawable/Drawable$Callback;" since="11"/>
-		<method name="getChangingConfigurations()I"/>
-		<method name="getColorFilter()Landroid/graphics/ColorFilter;" since="21"/>
-		<method name="getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;"/>
-		<method name="getCurrent()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getDirtyBounds()Landroid/graphics/Rect;" since="21"/>
-		<method name="getHotspotBounds(Landroid/graphics/Rect;)V" since="23"/>
-		<method name="getIntrinsicHeight()I"/>
-		<method name="getIntrinsicWidth()I"/>
-		<method name="getLayoutDirection()I" since="23"/>
-		<method name="getLevel()I"/>
-		<method name="getMinimumHeight()I"/>
-		<method name="getMinimumWidth()I"/>
-		<method name="getOpacity()I"/>
-		<method name="getOutline(Landroid/graphics/Outline;)V" since="21"/>
-		<method name="getPadding(Landroid/graphics/Rect;)Z"/>
-		<method name="getState()[I"/>
-		<method name="getTransparentRegion()Landroid/graphics/Region;"/>
-		<method name="inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)V"/>
-		<method name="inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V" since="21"/>
-		<method name="invalidateSelf()V"/>
-		<method name="isAutoMirrored()Z" since="19"/>
-		<method name="isFilterBitmap()Z" since="23"/>
-		<method name="isStateful()Z"/>
-		<method name="isVisible()Z"/>
-		<method name="jumpToCurrentState()V" since="11"/>
-		<method name="mutate()Landroid/graphics/drawable/Drawable;" since="3"/>
-		<method name="onBoundsChange(Landroid/graphics/Rect;)V"/>
-		<method name="onLayoutDirectionChanged(I)Z" since="23"/>
-		<method name="onLevelChange(I)Z"/>
-		<method name="onStateChange([I)Z"/>
-		<method name="resolveOpacity(II)I"/>
-		<method name="scheduleSelf(Ljava/lang/Runnable;J)V"/>
-		<method name="setAlpha(I)V"/>
-		<method name="setAutoMirrored(Z)V" since="19"/>
-		<method name="setBounds(IIII)V"/>
-		<method name="setBounds(Landroid/graphics/Rect;)V"/>
-		<method name="setCallback(Landroid/graphics/drawable/Drawable$Callback;)V"/>
-		<method name="setChangingConfigurations(I)V"/>
-		<method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V"/>
-		<method name="setColorFilter(Landroid/graphics/ColorFilter;)V"/>
-		<method name="setDither(Z)V" deprecated="23"/>
-		<method name="setFilterBitmap(Z)V"/>
-		<method name="setHotspot(FF)V" since="21"/>
-		<method name="setHotspotBounds(IIII)V" since="21"/>
-		<method name="setLayoutDirection(I)Z" since="23"/>
-		<method name="setLevel(I)Z"/>
-		<method name="setState([I)Z"/>
-		<method name="setTint(I)V" since="21"/>
-		<method name="setTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setVisible(ZZ)Z"/>
-		<method name="unscheduleSelf(Ljava/lang/Runnable;)V"/>
-	</class>
-	<class name="android/graphics/drawable/Drawable$Callback" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="invalidateDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V"/>
-		<method name="unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V"/>
-	</class>
-	<class name="android/graphics/drawable/Drawable$ConstantState" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="canApplyTheme()Z" since="21"/>
-		<method name="getChangingConfigurations()I"/>
-		<method name="newDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;" since="5"/>
-		<method name="newDrawable(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
-	</class>
-	<class name="android/graphics/drawable/DrawableContainer" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<implements name="android/graphics/drawable/Drawable$Callback"/>
-		<method name="&lt;init>()V"/>
-		<method name="selectDrawable(I)Z"/>
-		<method name="setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V"/>
-		<method name="setEnterFadeDuration(I)V" since="11"/>
-		<method name="setExitFadeDuration(I)V" since="11"/>
-	</class>
-	<class name="android/graphics/drawable/DrawableContainer$DrawableContainerState" since="1">
-		<extends name="android/graphics/drawable/Drawable$ConstantState"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;Landroid/graphics/drawable/DrawableContainer;Landroid/content/res/Resources;)V" since="29"/>
-		<method name="addChild(Landroid/graphics/drawable/Drawable;)I"/>
-		<method name="canConstantState()Z"/>
-		<method name="computeConstantSize()V" since="11"/>
-		<method name="getChild(I)Landroid/graphics/drawable/Drawable;" since="19"/>
-		<method name="getChildCount()I"/>
-		<method name="getChildren()[Landroid/graphics/drawable/Drawable;"/>
-		<method name="getConstantHeight()I"/>
-		<method name="getConstantMinimumHeight()I"/>
-		<method name="getConstantMinimumWidth()I"/>
-		<method name="getConstantPadding()Landroid/graphics/Rect;"/>
-		<method name="getConstantWidth()I"/>
-		<method name="getEnterFadeDuration()I" since="11"/>
-		<method name="getExitFadeDuration()I" since="11"/>
-		<method name="getOpacity()I"/>
-		<method name="growArray(II)V"/>
-		<method name="isConstantSize()Z"/>
-		<method name="isStateful()Z"/>
-		<method name="setConstantSize(Z)V"/>
-		<method name="setEnterFadeDuration(I)V" since="11"/>
-		<method name="setExitFadeDuration(I)V" since="11"/>
-		<method name="setVariablePadding(Z)V"/>
-	</class>
-	<class name="android/graphics/drawable/DrawableWrapper" since="23">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<implements name="android/graphics/drawable/Drawable$Callback"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="setDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-	</class>
-	<class name="android/graphics/drawable/GradientDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V"/>
-		<method name="getColor()Landroid/content/res/ColorStateList;" since="24"/>
-		<method name="getColors()[I" since="24"/>
-		<method name="getCornerRadii()[F" since="24"/>
-		<method name="getCornerRadius()F" since="24"/>
-		<method name="getGradientCenterX()F" since="24"/>
-		<method name="getGradientCenterY()F" since="24"/>
-		<method name="getGradientRadius()F" since="21"/>
-		<method name="getGradientType()I" since="24"/>
-		<method name="getOrientation()Landroid/graphics/drawable/GradientDrawable$Orientation;" since="16"/>
-		<method name="getShape()I" since="24"/>
-		<method name="getUseLevel()Z" since="24"/>
-		<method name="setColor(I)V"/>
-		<method name="setColor(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setColors([I)V" since="16"/>
-		<method name="setCornerRadii([F)V"/>
-		<method name="setCornerRadius(F)V"/>
-		<method name="setGradientCenter(FF)V"/>
-		<method name="setGradientRadius(F)V"/>
-		<method name="setGradientType(I)V"/>
-		<method name="setOrientation(Landroid/graphics/drawable/GradientDrawable$Orientation;)V" since="16"/>
-		<method name="setShape(I)V"/>
-		<method name="setSize(II)V"/>
-		<method name="setStroke(II)V"/>
-		<method name="setStroke(IIFF)V"/>
-		<method name="setStroke(ILandroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setStroke(ILandroid/content/res/ColorStateList;FF)V" since="21"/>
-		<method name="setUseLevel(Z)V"/>
-		<field name="LINE"/>
-		<field name="LINEAR_GRADIENT"/>
-		<field name="OVAL"/>
-		<field name="RADIAL_GRADIENT"/>
-		<field name="RECTANGLE"/>
-		<field name="RING"/>
-		<field name="SWEEP_GRADIENT"/>
-	</class>
-	<class name="android/graphics/drawable/GradientDrawable$Orientation" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/drawable/GradientDrawable$Orientation;"/>
-		<method name="values()[Landroid/graphics/drawable/GradientDrawable$Orientation;"/>
-		<field name="BL_TR"/>
-		<field name="BOTTOM_TOP"/>
-		<field name="BR_TL"/>
-		<field name="LEFT_RIGHT"/>
-		<field name="RIGHT_LEFT"/>
-		<field name="TL_BR"/>
-		<field name="TOP_BOTTOM"/>
-		<field name="TR_BL"/>
-	</class>
-	<class name="android/graphics/drawable/Icon" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="createWithAdaptiveBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;" since="26"/>
-		<method name="createWithBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;"/>
-		<method name="createWithContentUri(Landroid/net/Uri;)Landroid/graphics/drawable/Icon;"/>
-		<method name="createWithContentUri(Ljava/lang/String;)Landroid/graphics/drawable/Icon;"/>
-		<method name="createWithData([BII)Landroid/graphics/drawable/Icon;"/>
-		<method name="createWithFilePath(Ljava/lang/String;)Landroid/graphics/drawable/Icon;"/>
-		<method name="createWithResource(Landroid/content/Context;I)Landroid/graphics/drawable/Icon;"/>
-		<method name="createWithResource(Ljava/lang/String;I)Landroid/graphics/drawable/Icon;"/>
-		<method name="getResId()I" since="28"/>
-		<method name="getResPackage()Ljava/lang/String;" since="28"/>
-		<method name="getType()I" since="28"/>
-		<method name="getUri()Landroid/net/Uri;" since="28"/>
-		<method name="loadDrawable(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadDrawableAsync(Landroid/content/Context;Landroid/graphics/drawable/Icon$OnDrawableLoadedListener;Landroid/os/Handler;)V"/>
-		<method name="loadDrawableAsync(Landroid/content/Context;Landroid/os/Message;)V"/>
-		<method name="setTint(I)Landroid/graphics/drawable/Icon;"/>
-		<method name="setTintList(Landroid/content/res/ColorStateList;)Landroid/graphics/drawable/Icon;"/>
-		<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/drawable/Icon;"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_ADAPTIVE_BITMAP" since="28"/>
-		<field name="TYPE_BITMAP" since="28"/>
-		<field name="TYPE_DATA" since="28"/>
-		<field name="TYPE_RESOURCE" since="28"/>
-		<field name="TYPE_URI" since="28"/>
-	</class>
-	<class name="android/graphics/drawable/Icon$OnDrawableLoadedListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onDrawableLoaded(Landroid/graphics/drawable/Drawable;)V"/>
-	</class>
-	<class name="android/graphics/drawable/InsetDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable" removed="23"/>
-		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
-		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;F)V" since="26"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;FFFF)V" since="26"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;I)V"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;IIII)V"/>
-		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="19" removed="23"/>
-	</class>
-	<class name="android/graphics/drawable/LayerDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<implements name="android/graphics/drawable/Drawable$Callback"/>
-		<method name="&lt;init>([Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="addLayer(Landroid/graphics/drawable/Drawable;)I" since="23"/>
-		<method name="findDrawableByLayerId(I)Landroid/graphics/drawable/Drawable;"/>
-		<method name="findIndexByLayerId(I)I" since="23"/>
-		<method name="getBottomPadding()I" since="23"/>
-		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getEndPadding()I" since="23"/>
-		<method name="getId(I)I"/>
-		<method name="getLayerGravity(I)I" since="23"/>
-		<method name="getLayerHeight(I)I" since="23"/>
-		<method name="getLayerInsetBottom(I)I" since="23"/>
-		<method name="getLayerInsetEnd(I)I" since="23"/>
-		<method name="getLayerInsetLeft(I)I" since="23"/>
-		<method name="getLayerInsetRight(I)I" since="23"/>
-		<method name="getLayerInsetStart(I)I" since="23"/>
-		<method name="getLayerInsetTop(I)I" since="23"/>
-		<method name="getLayerWidth(I)I" since="23"/>
-		<method name="getLeftPadding()I" since="23"/>
-		<method name="getNumberOfLayers()I"/>
-		<method name="getPaddingMode()I" since="21"/>
-		<method name="getRightPadding()I" since="23"/>
-		<method name="getStartPadding()I" since="23"/>
-		<method name="getTopPadding()I" since="23"/>
-		<method name="setDrawable(ILandroid/graphics/drawable/Drawable;)V" since="23"/>
-		<method name="setDrawableByLayerId(ILandroid/graphics/drawable/Drawable;)Z"/>
-		<method name="setId(II)V"/>
-		<method name="setLayerGravity(II)V" since="23"/>
-		<method name="setLayerHeight(II)V" since="23"/>
-		<method name="setLayerInset(IIIII)V"/>
-		<method name="setLayerInsetBottom(II)V" since="23"/>
-		<method name="setLayerInsetEnd(II)V" since="23"/>
-		<method name="setLayerInsetLeft(II)V" since="23"/>
-		<method name="setLayerInsetRelative(IIIII)V" since="23"/>
-		<method name="setLayerInsetRight(II)V" since="23"/>
-		<method name="setLayerInsetStart(II)V" since="23"/>
-		<method name="setLayerInsetTop(II)V" since="23"/>
-		<method name="setLayerSize(III)V" since="23"/>
-		<method name="setLayerWidth(II)V" since="23"/>
-		<method name="setOpacity(I)V" since="11"/>
-		<method name="setPadding(IIII)V" since="23"/>
-		<method name="setPaddingMode(I)V" since="21"/>
-		<method name="setPaddingRelative(IIII)V" since="23"/>
-		<field name="INSET_UNDEFINED" since="24"/>
-		<field name="PADDING_MODE_NEST" since="21"/>
-		<field name="PADDING_MODE_STACK" since="21"/>
-	</class>
-	<class name="android/graphics/drawable/LevelListDrawable" since="1">
-		<extends name="android/graphics/drawable/DrawableContainer"/>
-		<method name="&lt;init>()V"/>
-		<method name="addLevel(IILandroid/graphics/drawable/Drawable;)V"/>
-	</class>
-	<class name="android/graphics/drawable/NinePatchDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" since="4"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/NinePatch;)V" since="4"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/graphics/NinePatch;)V" deprecated="16"/>
-		<method name="getPaint()Landroid/graphics/Paint;"/>
-		<method name="setTargetDensity(I)V" since="4"/>
-		<method name="setTargetDensity(Landroid/graphics/Canvas;)V" since="4"/>
-		<method name="setTargetDensity(Landroid/util/DisplayMetrics;)V" since="4"/>
-	</class>
-	<class name="android/graphics/drawable/PaintDrawable" since="1">
-		<extends name="android/graphics/drawable/ShapeDrawable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="setCornerRadii([F)V"/>
-		<method name="setCornerRadius(F)V"/>
-	</class>
-	<class name="android/graphics/drawable/PictureDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<method name="&lt;init>(Landroid/graphics/Picture;)V"/>
-		<method name="getPicture()Landroid/graphics/Picture;"/>
-		<method name="setPicture(Landroid/graphics/Picture;)V"/>
-	</class>
-	<class name="android/graphics/drawable/RippleDrawable" since="21">
-		<extends name="android/graphics/drawable/LayerDrawable"/>
-		<method name="&lt;init>(Landroid/content/res/ColorStateList;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="getRadius()I" since="23"/>
-		<method name="setColor(Landroid/content/res/ColorStateList;)V"/>
-		<method name="setRadius(I)V" since="23"/>
-		<field name="RADIUS_AUTO" since="23"/>
-	</class>
-	<class name="android/graphics/drawable/RotateDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable" removed="23"/>
-		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
-		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="3" removed="23"/>
-		<method name="getFromDegrees()F" since="21"/>
-		<method name="getPivotX()F" since="21"/>
-		<method name="getPivotY()F" since="21"/>
-		<method name="getToDegrees()F" since="21"/>
-		<method name="isPivotXRelative()Z" since="21"/>
-		<method name="isPivotYRelative()Z" since="21"/>
-		<method name="setDrawable(Landroid/graphics/drawable/Drawable;)V" since="21" removed="23"/>
-		<method name="setFromDegrees(F)V" since="21"/>
-		<method name="setPivotX(F)V" since="21"/>
-		<method name="setPivotXRelative(Z)V" since="21"/>
-		<method name="setPivotY(F)V" since="21"/>
-		<method name="setPivotYRelative(Z)V" since="21"/>
-		<method name="setToDegrees(F)V" since="21"/>
-	</class>
-	<class name="android/graphics/drawable/ScaleDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable" removed="23"/>
-		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
-		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;IFF)V"/>
-		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="3" removed="23"/>
-	</class>
-	<class name="android/graphics/drawable/ShapeDrawable" since="1">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/shapes/Shape;)V"/>
-		<method name="getPaint()Landroid/graphics/Paint;"/>
-		<method name="getShaderFactory()Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;"/>
-		<method name="getShape()Landroid/graphics/drawable/shapes/Shape;"/>
-		<method name="inflateTag(Ljava/lang/String;Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Z"/>
-		<method name="onDraw(Landroid/graphics/drawable/shapes/Shape;Landroid/graphics/Canvas;Landroid/graphics/Paint;)V"/>
-		<method name="setIntrinsicHeight(I)V"/>
-		<method name="setIntrinsicWidth(I)V"/>
-		<method name="setPadding(IIII)V"/>
-		<method name="setPadding(Landroid/graphics/Rect;)V"/>
-		<method name="setShaderFactory(Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;)V"/>
-		<method name="setShape(Landroid/graphics/drawable/shapes/Shape;)V"/>
-	</class>
-	<class name="android/graphics/drawable/ShapeDrawable$ShaderFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="resize(II)Landroid/graphics/Shader;"/>
-	</class>
-	<class name="android/graphics/drawable/StateListDrawable" since="1">
-		<extends name="android/graphics/drawable/DrawableContainer"/>
-		<method name="&lt;init>()V"/>
-		<method name="addState([ILandroid/graphics/drawable/Drawable;)V"/>
-	</class>
-	<class name="android/graphics/drawable/TransitionDrawable" since="1">
-		<extends name="android/graphics/drawable/LayerDrawable"/>
-		<method name="&lt;init>()V" removed="3"/>
-		<method name="&lt;init>([Landroid/graphics/drawable/Drawable;)V" since="3"/>
-		<method name="isCrossFadeEnabled()Z"/>
-		<method name="resetTransition()V"/>
-		<method name="reverseTransition(I)V"/>
-		<method name="setCrossFadeEnabled(Z)V"/>
-		<method name="startTransition(I)V"/>
-	</class>
-	<class name="android/graphics/drawable/VectorDrawable" since="21">
-		<extends name="android/graphics/drawable/Drawable"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/graphics/drawable/shapes/ArcShape" since="1">
-		<extends name="android/graphics/drawable/shapes/RectShape"/>
-		<method name="&lt;init>(FF)V"/>
-		<method name="clone()Landroid/graphics/drawable/shapes/ArcShape;" since="26"/>
-		<method name="getStartAngle()F" since="26"/>
-		<method name="getSweepAngle()F" since="26"/>
-	</class>
-	<class name="android/graphics/drawable/shapes/OvalShape" since="1">
-		<extends name="android/graphics/drawable/shapes/RectShape"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/graphics/drawable/shapes/OvalShape;" since="26"/>
-	</class>
-	<class name="android/graphics/drawable/shapes/PathShape" since="1">
-		<extends name="android/graphics/drawable/shapes/Shape"/>
-		<method name="&lt;init>(Landroid/graphics/Path;FF)V"/>
-		<method name="clone()Landroid/graphics/drawable/shapes/PathShape;" since="3"/>
-	</class>
-	<class name="android/graphics/drawable/shapes/RectShape" since="1">
-		<extends name="android/graphics/drawable/shapes/Shape"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/graphics/drawable/shapes/RectShape;" since="3"/>
-		<method name="rect()Landroid/graphics/RectF;"/>
-	</class>
-	<class name="android/graphics/drawable/shapes/RoundRectShape" since="1">
-		<extends name="android/graphics/drawable/shapes/RectShape"/>
-		<method name="&lt;init>([FLandroid/graphics/RectF;[F)V"/>
-		<method name="clone()Landroid/graphics/drawable/shapes/RoundRectShape;" since="3"/>
-	</class>
-	<class name="android/graphics/drawable/shapes/Shape" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/graphics/drawable/shapes/Shape;" since="3"/>
-		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V"/>
-		<method name="getHeight()F"/>
-		<method name="getOutline(Landroid/graphics/Outline;)V" since="21"/>
-		<method name="getWidth()F"/>
-		<method name="hasAlpha()Z"/>
-		<method name="onResize(FF)V"/>
-		<method name="resize(FF)V"/>
-	</class>
-	<class name="android/graphics/fonts/FontVariationAxis" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;F)V"/>
-		<method name="fromFontVariationSettings(Ljava/lang/String;)[Landroid/graphics/fonts/FontVariationAxis;"/>
-		<method name="getStyleValue()F"/>
-		<method name="getTag()Ljava/lang/String;"/>
-		<method name="toFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/graphics/pdf/PdfDocument" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="finishPage(Landroid/graphics/pdf/PdfDocument$Page;)V"/>
-		<method name="getPages()Ljava/util/List;"/>
-		<method name="startPage(Landroid/graphics/pdf/PdfDocument$PageInfo;)Landroid/graphics/pdf/PdfDocument$Page;"/>
-		<method name="writeTo(Ljava/io/OutputStream;)V"/>
-	</class>
-	<class name="android/graphics/pdf/PdfDocument$Page" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/graphics/Canvas;Landroid/graphics/pdf/PdfDocument$PageInfo;)V" since="29"/>
-		<method name="getCanvas()Landroid/graphics/Canvas;"/>
-		<method name="getInfo()Landroid/graphics/pdf/PdfDocument$PageInfo;"/>
-	</class>
-	<class name="android/graphics/pdf/PdfDocument$PageInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentRect()Landroid/graphics/Rect;"/>
-		<method name="getPageHeight()I"/>
-		<method name="getPageNumber()I"/>
-		<method name="getPageWidth()I"/>
-	</class>
-	<class name="android/graphics/pdf/PdfDocument$PageInfo$Builder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="create()Landroid/graphics/pdf/PdfDocument$PageInfo;"/>
-		<method name="setContentRect(Landroid/graphics/Rect;)Landroid/graphics/pdf/PdfDocument$PageInfo$Builder;"/>
-	</class>
-	<class name="android/graphics/pdf/PdfRenderer" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
-		<method name="getPageCount()I"/>
-		<method name="openPage(I)Landroid/graphics/pdf/PdfRenderer$Page;"/>
-		<method name="shouldScaleForPrinting()Z"/>
-	</class>
-	<class name="android/graphics/pdf/PdfRenderer$Page" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>(Landroid/graphics/pdf/PdfRenderer;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/graphics/pdf/PdfRenderer;I)V" since="29"/>
-		<method name="getHeight()I"/>
-		<method name="getIndex()I"/>
-		<method name="getWidth()I"/>
-		<method name="render(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Matrix;I)V"/>
-		<field name="RENDER_MODE_FOR_DISPLAY"/>
-		<field name="RENDER_MODE_FOR_PRINT"/>
-	</class>
-	<class name="android/hardware/Camera" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addCallbackBuffer([B)V" since="8"/>
-		<method name="autoFocus(Landroid/hardware/Camera$AutoFocusCallback;)V"/>
-		<method name="cancelAutoFocus()V" since="5"/>
-		<method name="enableShutterSound(Z)Z" since="17"/>
-		<method name="getCameraInfo(ILandroid/hardware/Camera$CameraInfo;)V" since="9"/>
-		<method name="getNumberOfCameras()I" since="9"/>
-		<method name="getParameters()Landroid/hardware/Camera$Parameters;"/>
-		<method name="lock()V" since="5"/>
-		<method name="open()Landroid/hardware/Camera;"/>
-		<method name="open(I)Landroid/hardware/Camera;" since="9"/>
-		<method name="reconnect()V" since="8"/>
-		<method name="release()V"/>
-		<method name="setAutoFocusMoveCallback(Landroid/hardware/Camera$AutoFocusMoveCallback;)V" since="16"/>
-		<method name="setDisplayOrientation(I)V" since="8"/>
-		<method name="setErrorCallback(Landroid/hardware/Camera$ErrorCallback;)V"/>
-		<method name="setFaceDetectionListener(Landroid/hardware/Camera$FaceDetectionListener;)V" since="14"/>
-		<method name="setOneShotPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" since="3"/>
-		<method name="setParameters(Landroid/hardware/Camera$Parameters;)V"/>
-		<method name="setPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V"/>
-		<method name="setPreviewCallbackWithBuffer(Landroid/hardware/Camera$PreviewCallback;)V" since="8"/>
-		<method name="setPreviewDisplay(Landroid/view/SurfaceHolder;)V"/>
-		<method name="setPreviewTexture(Landroid/graphics/SurfaceTexture;)V" since="11"/>
-		<method name="setZoomChangeListener(Landroid/hardware/Camera$OnZoomChangeListener;)V" since="8"/>
-		<method name="startFaceDetection()V" since="14"/>
-		<method name="startPreview()V"/>
-		<method name="startSmoothZoom(I)V" since="8"/>
-		<method name="stopFaceDetection()V" since="14"/>
-		<method name="stopPreview()V"/>
-		<method name="stopSmoothZoom()V" since="8"/>
-		<method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V"/>
-		<method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" since="5"/>
-		<method name="unlock()V" since="5"/>
-		<field name="ACTION_NEW_PICTURE" since="14" deprecated="24"/>
-		<field name="ACTION_NEW_VIDEO" since="14" deprecated="24"/>
-		<field name="CAMERA_ERROR_EVICTED" since="23"/>
-		<field name="CAMERA_ERROR_SERVER_DIED"/>
-		<field name="CAMERA_ERROR_UNKNOWN"/>
-	</class>
-	<class name="android/hardware/Camera$Area" since="14" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;I)V"/>
-		<field name="rect"/>
-		<field name="weight"/>
-	</class>
-	<class name="android/hardware/Camera$AutoFocusCallback" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onAutoFocus(ZLandroid/hardware/Camera;)V"/>
-	</class>
-	<class name="android/hardware/Camera$AutoFocusMoveCallback" since="16" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onAutoFocusMoving(ZLandroid/hardware/Camera;)V"/>
-	</class>
-	<class name="android/hardware/Camera$CameraInfo" since="9" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CAMERA_FACING_BACK"/>
-		<field name="CAMERA_FACING_FRONT"/>
-		<field name="canDisableShutterSound" since="17"/>
-		<field name="facing"/>
-		<field name="orientation"/>
-	</class>
-	<class name="android/hardware/Camera$ErrorCallback" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onError(ILandroid/hardware/Camera;)V"/>
-	</class>
-	<class name="android/hardware/Camera$Face" since="14" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="id"/>
-		<field name="leftEye"/>
-		<field name="mouth"/>
-		<field name="rect"/>
-		<field name="rightEye"/>
-		<field name="score"/>
-	</class>
-	<class name="android/hardware/Camera$FaceDetectionListener" since="14" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onFaceDetection([Landroid/hardware/Camera$Face;Landroid/hardware/Camera;)V"/>
-	</class>
-	<class name="android/hardware/Camera$OnZoomChangeListener" since="8" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onZoomChange(IZLandroid/hardware/Camera;)V"/>
-	</class>
-	<class name="android/hardware/Camera$Parameters" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/hardware/Camera;)V"/>
-		<method name="flatten()Ljava/lang/String;"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getAntibanding()Ljava/lang/String;" since="5"/>
-		<method name="getAutoExposureLock()Z" since="14"/>
-		<method name="getAutoWhiteBalanceLock()Z" since="14"/>
-		<method name="getColorEffect()Ljava/lang/String;" since="5"/>
-		<method name="getExposureCompensation()I" since="8"/>
-		<method name="getExposureCompensationStep()F" since="8"/>
-		<method name="getFlashMode()Ljava/lang/String;" since="5"/>
-		<method name="getFocalLength()F" since="8"/>
-		<method name="getFocusAreas()Ljava/util/List;" since="14"/>
-		<method name="getFocusDistances([F)V" since="9"/>
-		<method name="getFocusMode()Ljava/lang/String;" since="5"/>
-		<method name="getHorizontalViewAngle()F" since="8"/>
-		<method name="getInt(Ljava/lang/String;)I"/>
-		<method name="getJpegQuality()I" since="5"/>
-		<method name="getJpegThumbnailQuality()I" since="5"/>
-		<method name="getJpegThumbnailSize()Landroid/hardware/Camera$Size;" since="5"/>
-		<method name="getMaxExposureCompensation()I" since="8"/>
-		<method name="getMaxNumDetectedFaces()I" since="14"/>
-		<method name="getMaxNumFocusAreas()I" since="14"/>
-		<method name="getMaxNumMeteringAreas()I" since="14"/>
-		<method name="getMaxZoom()I" since="8"/>
-		<method name="getMeteringAreas()Ljava/util/List;" since="14"/>
-		<method name="getMinExposureCompensation()I" since="8"/>
-		<method name="getPictureFormat()I"/>
-		<method name="getPictureSize()Landroid/hardware/Camera$Size;"/>
-		<method name="getPreferredPreviewSizeForVideo()Landroid/hardware/Camera$Size;" since="11"/>
-		<method name="getPreviewFormat()I"/>
-		<method name="getPreviewFpsRange([I)V" since="9"/>
-		<method name="getPreviewFrameRate()I" deprecated="16"/>
-		<method name="getPreviewSize()Landroid/hardware/Camera$Size;"/>
-		<method name="getSceneMode()Ljava/lang/String;" since="5"/>
-		<method name="getSupportedAntibanding()Ljava/util/List;" since="5"/>
-		<method name="getSupportedColorEffects()Ljava/util/List;" since="5"/>
-		<method name="getSupportedFlashModes()Ljava/util/List;" since="5"/>
-		<method name="getSupportedFocusModes()Ljava/util/List;" since="5"/>
-		<method name="getSupportedJpegThumbnailSizes()Ljava/util/List;" since="8"/>
-		<method name="getSupportedPictureFormats()Ljava/util/List;" since="5"/>
-		<method name="getSupportedPictureSizes()Ljava/util/List;" since="5"/>
-		<method name="getSupportedPreviewFormats()Ljava/util/List;" since="5"/>
-		<method name="getSupportedPreviewFpsRange()Ljava/util/List;" since="9"/>
-		<method name="getSupportedPreviewFrameRates()Ljava/util/List;" since="5" deprecated="16"/>
-		<method name="getSupportedPreviewSizes()Ljava/util/List;" since="5"/>
-		<method name="getSupportedSceneModes()Ljava/util/List;" since="5"/>
-		<method name="getSupportedVideoSizes()Ljava/util/List;" since="11"/>
-		<method name="getSupportedWhiteBalance()Ljava/util/List;" since="5"/>
-		<method name="getVerticalViewAngle()F" since="8"/>
-		<method name="getVideoStabilization()Z" since="15"/>
-		<method name="getWhiteBalance()Ljava/lang/String;" since="5"/>
-		<method name="getZoom()I" since="8"/>
-		<method name="getZoomRatios()Ljava/util/List;" since="8"/>
-		<method name="isAutoExposureLockSupported()Z" since="14"/>
-		<method name="isAutoWhiteBalanceLockSupported()Z" since="14"/>
-		<method name="isSmoothZoomSupported()Z" since="8"/>
-		<method name="isVideoSnapshotSupported()Z" since="14"/>
-		<method name="isVideoStabilizationSupported()Z" since="15"/>
-		<method name="isZoomSupported()Z" since="8"/>
-		<method name="remove(Ljava/lang/String;)V"/>
-		<method name="removeGpsData()V" since="5"/>
-		<method name="set(Ljava/lang/String;I)V"/>
-		<method name="set(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setAntibanding(Ljava/lang/String;)V" since="5"/>
-		<method name="setAutoExposureLock(Z)V" since="14"/>
-		<method name="setAutoWhiteBalanceLock(Z)V" since="14"/>
-		<method name="setColorEffect(Ljava/lang/String;)V" since="5"/>
-		<method name="setExposureCompensation(I)V" since="8"/>
-		<method name="setFlashMode(Ljava/lang/String;)V" since="5"/>
-		<method name="setFocusAreas(Ljava/util/List;)V" since="14"/>
-		<method name="setFocusMode(Ljava/lang/String;)V" since="5"/>
-		<method name="setGpsAltitude(D)V" since="5"/>
-		<method name="setGpsLatitude(D)V" since="5"/>
-		<method name="setGpsLongitude(D)V" since="5"/>
-		<method name="setGpsProcessingMethod(Ljava/lang/String;)V" since="8"/>
-		<method name="setGpsTimestamp(J)V" since="5"/>
-		<method name="setJpegQuality(I)V" since="5"/>
-		<method name="setJpegThumbnailQuality(I)V" since="5"/>
-		<method name="setJpegThumbnailSize(II)V" since="5"/>
-		<method name="setMeteringAreas(Ljava/util/List;)V" since="14"/>
-		<method name="setPictureFormat(I)V"/>
-		<method name="setPictureSize(II)V"/>
-		<method name="setPreviewFormat(I)V"/>
-		<method name="setPreviewFpsRange(II)V" since="9"/>
-		<method name="setPreviewFrameRate(I)V" deprecated="16"/>
-		<method name="setPreviewSize(II)V"/>
-		<method name="setRecordingHint(Z)V" since="14"/>
-		<method name="setRotation(I)V" since="5"/>
-		<method name="setSceneMode(Ljava/lang/String;)V" since="5"/>
-		<method name="setVideoStabilization(Z)V" since="15"/>
-		<method name="setWhiteBalance(Ljava/lang/String;)V" since="5"/>
-		<method name="setZoom(I)V" since="8"/>
-		<method name="unflatten(Ljava/lang/String;)V"/>
-		<field name="ANTIBANDING_50HZ" since="5"/>
-		<field name="ANTIBANDING_60HZ" since="5"/>
-		<field name="ANTIBANDING_AUTO" since="5"/>
-		<field name="ANTIBANDING_OFF" since="5"/>
-		<field name="EFFECT_AQUA" since="5"/>
-		<field name="EFFECT_BLACKBOARD" since="5"/>
-		<field name="EFFECT_MONO" since="5"/>
-		<field name="EFFECT_NEGATIVE" since="5"/>
-		<field name="EFFECT_NONE" since="5"/>
-		<field name="EFFECT_POSTERIZE" since="5"/>
-		<field name="EFFECT_SEPIA" since="5"/>
-		<field name="EFFECT_SOLARIZE" since="5"/>
-		<field name="EFFECT_WHITEBOARD" since="5"/>
-		<field name="FLASH_MODE_AUTO" since="5"/>
-		<field name="FLASH_MODE_OFF" since="5"/>
-		<field name="FLASH_MODE_ON" since="5"/>
-		<field name="FLASH_MODE_RED_EYE" since="5"/>
-		<field name="FLASH_MODE_TORCH" since="5"/>
-		<field name="FOCUS_DISTANCE_FAR_INDEX" since="9"/>
-		<field name="FOCUS_DISTANCE_NEAR_INDEX" since="9"/>
-		<field name="FOCUS_DISTANCE_OPTIMAL_INDEX" since="9"/>
-		<field name="FOCUS_MODE_AUTO" since="5"/>
-		<field name="FOCUS_MODE_CONTINUOUS_PICTURE" since="14"/>
-		<field name="FOCUS_MODE_CONTINUOUS_VIDEO" since="9"/>
-		<field name="FOCUS_MODE_EDOF" since="8"/>
-		<field name="FOCUS_MODE_FIXED" since="5"/>
-		<field name="FOCUS_MODE_INFINITY" since="5"/>
-		<field name="FOCUS_MODE_MACRO" since="5"/>
-		<field name="PREVIEW_FPS_MAX_INDEX" since="9"/>
-		<field name="PREVIEW_FPS_MIN_INDEX" since="9"/>
-		<field name="SCENE_MODE_ACTION" since="5"/>
-		<field name="SCENE_MODE_AUTO" since="5"/>
-		<field name="SCENE_MODE_BARCODE" since="8"/>
-		<field name="SCENE_MODE_BEACH" since="5"/>
-		<field name="SCENE_MODE_CANDLELIGHT" since="5"/>
-		<field name="SCENE_MODE_FIREWORKS" since="5"/>
-		<field name="SCENE_MODE_HDR" since="17"/>
-		<field name="SCENE_MODE_LANDSCAPE" since="5"/>
-		<field name="SCENE_MODE_NIGHT" since="5"/>
-		<field name="SCENE_MODE_NIGHT_PORTRAIT" since="5"/>
-		<field name="SCENE_MODE_PARTY" since="5"/>
-		<field name="SCENE_MODE_PORTRAIT" since="5"/>
-		<field name="SCENE_MODE_SNOW" since="5"/>
-		<field name="SCENE_MODE_SPORTS" since="5"/>
-		<field name="SCENE_MODE_STEADYPHOTO" since="5"/>
-		<field name="SCENE_MODE_SUNSET" since="5"/>
-		<field name="SCENE_MODE_THEATRE" since="5"/>
-		<field name="WHITE_BALANCE_AUTO" since="5"/>
-		<field name="WHITE_BALANCE_CLOUDY_DAYLIGHT" since="5"/>
-		<field name="WHITE_BALANCE_DAYLIGHT" since="5"/>
-		<field name="WHITE_BALANCE_FLUORESCENT" since="5"/>
-		<field name="WHITE_BALANCE_INCANDESCENT" since="5"/>
-		<field name="WHITE_BALANCE_SHADE" since="5"/>
-		<field name="WHITE_BALANCE_TWILIGHT" since="5"/>
-		<field name="WHITE_BALANCE_WARM_FLUORESCENT" since="5"/>
-	</class>
-	<class name="android/hardware/Camera$PictureCallback" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onPictureTaken([BLandroid/hardware/Camera;)V"/>
-	</class>
-	<class name="android/hardware/Camera$PreviewCallback" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onPreviewFrame([BLandroid/hardware/Camera;)V"/>
-	</class>
-	<class name="android/hardware/Camera$ShutterCallback" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="onShutter()V"/>
-	</class>
-	<class name="android/hardware/Camera$Size" since="1" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/hardware/Camera;II)V"/>
-		<field name="height"/>
-		<field name="width"/>
-	</class>
-	<class name="android/hardware/ConsumerIrManager" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCarrierFrequencies()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;"/>
-		<method name="hasIrEmitter()Z"/>
-		<method name="transmit(I[I)V"/>
-	</class>
-	<class name="android/hardware/ConsumerIrManager$CarrierFrequencyRange" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/hardware/ConsumerIrManager;II)V"/>
-		<method name="getMaxFrequency()I"/>
-		<method name="getMinFrequency()I"/>
-	</class>
-	<class name="android/hardware/GeomagneticField" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(FFFJ)V"/>
-		<method name="getDeclination()F"/>
-		<method name="getFieldStrength()F"/>
-		<method name="getHorizontalStrength()F"/>
-		<method name="getInclination()F"/>
-		<method name="getX()F"/>
-		<method name="getY()F"/>
-		<method name="getZ()F"/>
-	</class>
-	<class name="android/hardware/HardwareBuffer" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-		<method name="create(IIIIJ)Landroid/hardware/HardwareBuffer;"/>
-		<method name="getFormat()I"/>
-		<method name="getHeight()I"/>
-		<method name="getLayers()I"/>
-		<method name="getUsage()J"/>
-		<method name="getWidth()I"/>
-		<method name="isClosed()Z"/>
-		<field name="BLOB"/>
-		<field name="CREATOR"/>
-		<field name="DS_24UI8" since="28"/>
-		<field name="DS_FP32UI8" since="28"/>
-		<field name="D_16" since="28"/>
-		<field name="D_24" since="28"/>
-		<field name="D_FP32" since="28"/>
-		<field name="RGBA_1010102"/>
-		<field name="RGBA_8888"/>
-		<field name="RGBA_FP16"/>
-		<field name="RGBX_8888"/>
-		<field name="RGB_565"/>
-		<field name="RGB_888"/>
-		<field name="S_UI8" since="28"/>
-		<field name="USAGE_CPU_READ_OFTEN"/>
-		<field name="USAGE_CPU_READ_RARELY"/>
-		<field name="USAGE_CPU_WRITE_OFTEN"/>
-		<field name="USAGE_CPU_WRITE_RARELY"/>
-		<field name="USAGE_GPU_COLOR_OUTPUT"/>
-		<field name="USAGE_GPU_CUBE_MAP" since="28"/>
-		<field name="USAGE_GPU_DATA_BUFFER"/>
-		<field name="USAGE_GPU_MIPMAP_COMPLETE" since="28"/>
-		<field name="USAGE_GPU_SAMPLED_IMAGE"/>
-		<field name="USAGE_PROTECTED_CONTENT"/>
-		<field name="USAGE_SENSOR_DIRECT_DATA"/>
-		<field name="USAGE_VIDEO_ENCODE"/>
-	</class>
-	<class name="android/hardware/Sensor" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFifoMaxEventCount()I" since="19"/>
-		<method name="getFifoReservedEventCount()I" since="19"/>
-		<method name="getHighestDirectReportRateLevel()I" since="26"/>
-		<method name="getId()I" since="24"/>
-		<method name="getMaxDelay()I" since="21"/>
-		<method name="getMaximumRange()F"/>
-		<method name="getMinDelay()I" since="9"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPower()F"/>
-		<method name="getReportingMode()I" since="21"/>
-		<method name="getResolution()F"/>
-		<method name="getStringType()Ljava/lang/String;" since="20"/>
-		<method name="getType()I"/>
-		<method name="getVendor()Ljava/lang/String;"/>
-		<method name="getVersion()I"/>
-		<method name="isAdditionalInfoSupported()Z" since="24"/>
-		<method name="isDirectChannelTypeSupported(I)Z" since="26"/>
-		<method name="isDynamicSensor()Z" since="24"/>
-		<method name="isWakeUpSensor()Z" since="21"/>
-		<field name="REPORTING_MODE_CONTINUOUS" since="21"/>
-		<field name="REPORTING_MODE_ONE_SHOT" since="21"/>
-		<field name="REPORTING_MODE_ON_CHANGE" since="21"/>
-		<field name="REPORTING_MODE_SPECIAL_TRIGGER" since="21"/>
-		<field name="STRING_TYPE_ACCELEROMETER" since="20"/>
-		<field name="STRING_TYPE_ACCELEROMETER_UNCALIBRATED" since="26"/>
-		<field name="STRING_TYPE_AMBIENT_TEMPERATURE" since="20"/>
-		<field name="STRING_TYPE_GAME_ROTATION_VECTOR" since="20"/>
-		<field name="STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR" since="20"/>
-		<field name="STRING_TYPE_GRAVITY" since="20"/>
-		<field name="STRING_TYPE_GYROSCOPE" since="20"/>
-		<field name="STRING_TYPE_GYROSCOPE_UNCALIBRATED" since="20"/>
-		<field name="STRING_TYPE_HEART_BEAT" since="24"/>
-		<field name="STRING_TYPE_HEART_RATE" since="20"/>
-		<field name="STRING_TYPE_LIGHT" since="20"/>
-		<field name="STRING_TYPE_LINEAR_ACCELERATION" since="20"/>
-		<field name="STRING_TYPE_LOW_LATENCY_OFFBODY_DETECT" since="26"/>
-		<field name="STRING_TYPE_MAGNETIC_FIELD" since="20"/>
-		<field name="STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED" since="20"/>
-		<field name="STRING_TYPE_MOTION_DETECT" since="24"/>
-		<field name="STRING_TYPE_ORIENTATION" since="20" deprecated="20"/>
-		<field name="STRING_TYPE_POSE_6DOF" since="24"/>
-		<field name="STRING_TYPE_PRESSURE" since="20"/>
-		<field name="STRING_TYPE_PROXIMITY" since="20"/>
-		<field name="STRING_TYPE_RELATIVE_HUMIDITY" since="20"/>
-		<field name="STRING_TYPE_ROTATION_VECTOR" since="20"/>
-		<field name="STRING_TYPE_SIGNIFICANT_MOTION" since="20"/>
-		<field name="STRING_TYPE_STATIONARY_DETECT" since="24"/>
-		<field name="STRING_TYPE_STEP_COUNTER" since="20"/>
-		<field name="STRING_TYPE_STEP_DETECTOR" since="20"/>
-		<field name="STRING_TYPE_TEMPERATURE" since="20" deprecated="20"/>
-		<field name="TYPE_ACCELEROMETER"/>
-		<field name="TYPE_ACCELEROMETER_UNCALIBRATED" since="26"/>
-		<field name="TYPE_ALL"/>
-		<field name="TYPE_AMBIENT_TEMPERATURE" since="14"/>
-		<field name="TYPE_DEVICE_PRIVATE_BASE" since="24"/>
-		<field name="TYPE_GAME_ROTATION_VECTOR" since="18"/>
-		<field name="TYPE_GEOMAGNETIC_ROTATION_VECTOR" since="19"/>
-		<field name="TYPE_GRAVITY" since="9"/>
-		<field name="TYPE_GYROSCOPE"/>
-		<field name="TYPE_GYROSCOPE_UNCALIBRATED" since="18"/>
-		<field name="TYPE_HEART_BEAT" since="24"/>
-		<field name="TYPE_HEART_RATE" since="20"/>
-		<field name="TYPE_LIGHT"/>
-		<field name="TYPE_LINEAR_ACCELERATION" since="9"/>
-		<field name="TYPE_LOW_LATENCY_OFFBODY_DETECT" since="26"/>
-		<field name="TYPE_MAGNETIC_FIELD"/>
-		<field name="TYPE_MAGNETIC_FIELD_UNCALIBRATED" since="18"/>
-		<field name="TYPE_MOTION_DETECT" since="24"/>
-		<field name="TYPE_ORIENTATION" deprecated="16"/>
-		<field name="TYPE_POSE_6DOF" since="24"/>
-		<field name="TYPE_PRESSURE"/>
-		<field name="TYPE_PROXIMITY"/>
-		<field name="TYPE_RELATIVE_HUMIDITY" since="14"/>
-		<field name="TYPE_ROTATION_VECTOR" since="9"/>
-		<field name="TYPE_SIGNIFICANT_MOTION" since="18"/>
-		<field name="TYPE_STATIONARY_DETECT" since="24"/>
-		<field name="TYPE_STEP_COUNTER" since="19"/>
-		<field name="TYPE_STEP_DETECTOR" since="19"/>
-		<field name="TYPE_TEMPERATURE" deprecated="16"/>
-	</class>
-	<class name="android/hardware/SensorAdditionalInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/hardware/Sensor;II[I[F)V" since="29"/>
-		<field name="TYPE_FRAME_BEGIN"/>
-		<field name="TYPE_FRAME_END"/>
-		<field name="TYPE_INTERNAL_TEMPERATURE"/>
-		<field name="TYPE_SAMPLING"/>
-		<field name="TYPE_SENSOR_PLACEMENT"/>
-		<field name="TYPE_UNTRACKED_DELAY"/>
-		<field name="TYPE_VEC3_CALIBRATION"/>
-		<field name="floatValues"/>
-		<field name="intValues"/>
-		<field name="sensor"/>
-		<field name="serial"/>
-		<field name="type"/>
-	</class>
-	<class name="android/hardware/SensorDirectChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/hardware/SensorManager;IIJ)V" since="29"/>
-		<method name="configure(Landroid/hardware/Sensor;I)I"/>
-		<field name="RATE_FAST"/>
-		<field name="RATE_NORMAL"/>
-		<field name="RATE_STOP"/>
-		<field name="RATE_VERY_FAST"/>
-		<field name="TYPE_HARDWARE_BUFFER"/>
-		<field name="TYPE_MEMORY_FILE"/>
-	</class>
-	<class name="android/hardware/SensorEvent" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<field name="accuracy"/>
-		<field name="sensor"/>
-		<field name="timestamp"/>
-		<field name="values"/>
-	</class>
-	<class name="android/hardware/SensorEventCallback" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/hardware/SensorEventListener2"/>
-		<method name="&lt;init>()V"/>
-		<method name="onSensorAdditionalInfo(Landroid/hardware/SensorAdditionalInfo;)V"/>
-	</class>
-	<class name="android/hardware/SensorEventListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onAccuracyChanged(Landroid/hardware/Sensor;I)V"/>
-		<method name="onSensorChanged(Landroid/hardware/SensorEvent;)V"/>
-	</class>
-	<class name="android/hardware/SensorEventListener2" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/hardware/SensorEventListener"/>
-		<method name="onFlushCompleted(Landroid/hardware/Sensor;)V"/>
-	</class>
-	<class name="android/hardware/SensorListener" since="1" deprecated="3">
-		<extends name="java/lang/Object"/>
-		<method name="onAccuracyChanged(II)V"/>
-		<method name="onSensorChanged(I[F)V"/>
-	</class>
-	<class name="android/hardware/SensorManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancelTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18"/>
-		<method name="createDirectChannel(Landroid/hardware/HardwareBuffer;)Landroid/hardware/SensorDirectChannel;" since="26"/>
-		<method name="createDirectChannel(Landroid/os/MemoryFile;)Landroid/hardware/SensorDirectChannel;" since="26"/>
-		<method name="flush(Landroid/hardware/SensorEventListener;)Z" since="19"/>
-		<method name="getAltitude(FF)F" since="9"/>
-		<method name="getAngleChange([F[F[F)V" since="9"/>
-		<method name="getDefaultSensor(I)Landroid/hardware/Sensor;" since="3"/>
-		<method name="getDefaultSensor(IZ)Landroid/hardware/Sensor;" since="21"/>
-		<method name="getDynamicSensorList(I)Ljava/util/List;" since="24"/>
-		<method name="getInclination([F)F" since="3"/>
-		<method name="getOrientation([F[F)[F" since="3"/>
-		<method name="getQuaternionFromVector([F[F)V" since="9"/>
-		<method name="getRotationMatrix([F[F[F[F)Z" since="3"/>
-		<method name="getRotationMatrixFromVector([F[F)V" since="9"/>
-		<method name="getSensorList(I)Ljava/util/List;" since="3"/>
-		<method name="getSensors()I" deprecated="16"/>
-		<method name="isDynamicSensorDiscoverySupported()Z" since="24"/>
-		<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24"/>
-		<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;Landroid/os/Handler;)V" since="24"/>
-		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;I)Z" since="3"/>
-		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;II)Z" since="19"/>
-		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;IILandroid/os/Handler;)Z" since="19"/>
-		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;)Z" since="3"/>
-		<method name="registerListener(Landroid/hardware/SensorListener;I)Z" deprecated="16"/>
-		<method name="registerListener(Landroid/hardware/SensorListener;II)Z" deprecated="16"/>
-		<method name="remapCoordinateSystem([FII[F)Z" since="3"/>
-		<method name="requestTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18"/>
-		<method name="unregisterDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24"/>
-		<method name="unregisterListener(Landroid/hardware/SensorEventListener;)V" since="3"/>
-		<method name="unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V" since="3"/>
-		<method name="unregisterListener(Landroid/hardware/SensorListener;)V" deprecated="16"/>
-		<method name="unregisterListener(Landroid/hardware/SensorListener;I)V" deprecated="16"/>
-		<field name="AXIS_MINUS_X" since="3"/>
-		<field name="AXIS_MINUS_Y" since="3"/>
-		<field name="AXIS_MINUS_Z" since="3"/>
-		<field name="AXIS_X" since="3"/>
-		<field name="AXIS_Y" since="3"/>
-		<field name="AXIS_Z" since="3"/>
-		<field name="DATA_X" deprecated="16"/>
-		<field name="DATA_Y" deprecated="16"/>
-		<field name="DATA_Z" deprecated="16"/>
-		<field name="GRAVITY_DEATH_STAR_I"/>
-		<field name="GRAVITY_EARTH"/>
-		<field name="GRAVITY_JUPITER"/>
-		<field name="GRAVITY_MARS"/>
-		<field name="GRAVITY_MERCURY"/>
-		<field name="GRAVITY_MOON"/>
-		<field name="GRAVITY_NEPTUNE"/>
-		<field name="GRAVITY_PLUTO"/>
-		<field name="GRAVITY_SATURN"/>
-		<field name="GRAVITY_SUN"/>
-		<field name="GRAVITY_THE_ISLAND"/>
-		<field name="GRAVITY_URANUS"/>
-		<field name="GRAVITY_VENUS"/>
-		<field name="LIGHT_CLOUDY"/>
-		<field name="LIGHT_FULLMOON"/>
-		<field name="LIGHT_NO_MOON"/>
-		<field name="LIGHT_OVERCAST"/>
-		<field name="LIGHT_SHADE"/>
-		<field name="LIGHT_SUNLIGHT"/>
-		<field name="LIGHT_SUNLIGHT_MAX"/>
-		<field name="LIGHT_SUNRISE"/>
-		<field name="MAGNETIC_FIELD_EARTH_MAX"/>
-		<field name="MAGNETIC_FIELD_EARTH_MIN"/>
-		<field name="PRESSURE_STANDARD_ATMOSPHERE" since="9"/>
-		<field name="RAW_DATA_INDEX" deprecated="16"/>
-		<field name="RAW_DATA_X" deprecated="16"/>
-		<field name="RAW_DATA_Y" deprecated="16"/>
-		<field name="RAW_DATA_Z" deprecated="16"/>
-		<field name="SENSOR_ACCELEROMETER" deprecated="16"/>
-		<field name="SENSOR_ALL" deprecated="16"/>
-		<field name="SENSOR_DELAY_FASTEST"/>
-		<field name="SENSOR_DELAY_GAME"/>
-		<field name="SENSOR_DELAY_NORMAL"/>
-		<field name="SENSOR_DELAY_UI"/>
-		<field name="SENSOR_LIGHT" deprecated="16"/>
-		<field name="SENSOR_MAGNETIC_FIELD" deprecated="16"/>
-		<field name="SENSOR_MAX" deprecated="16"/>
-		<field name="SENSOR_MIN" deprecated="16"/>
-		<field name="SENSOR_ORIENTATION" deprecated="16"/>
-		<field name="SENSOR_ORIENTATION_RAW" deprecated="16"/>
-		<field name="SENSOR_PROXIMITY" deprecated="16"/>
-		<field name="SENSOR_STATUS_ACCURACY_HIGH"/>
-		<field name="SENSOR_STATUS_ACCURACY_LOW"/>
-		<field name="SENSOR_STATUS_ACCURACY_MEDIUM"/>
-		<field name="SENSOR_STATUS_NO_CONTACT" since="20"/>
-		<field name="SENSOR_STATUS_UNRELIABLE"/>
-		<field name="SENSOR_TEMPERATURE" deprecated="16"/>
-		<field name="SENSOR_TRICORDER" deprecated="16"/>
-		<field name="STANDARD_GRAVITY"/>
-	</class>
-	<class name="android/hardware/SensorManager$DynamicSensorCallback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onDynamicSensorConnected(Landroid/hardware/Sensor;)V"/>
-		<method name="onDynamicSensorDisconnected(Landroid/hardware/Sensor;)V"/>
-	</class>
-	<class name="android/hardware/TriggerEvent" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<field name="sensor"/>
-		<field name="timestamp"/>
-		<field name="values"/>
-	</class>
-	<class name="android/hardware/TriggerEventListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onTrigger(Landroid/hardware/TriggerEvent;)V"/>
-	</class>
-	<class name="android/hardware/biometrics/BiometricPrompt" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="authenticate(Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V"/>
-		<method name="authenticate(Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V"/>
-		<field name="BIOMETRIC_ACQUIRED_GOOD"/>
-		<field name="BIOMETRIC_ACQUIRED_IMAGER_DIRTY"/>
-		<field name="BIOMETRIC_ACQUIRED_INSUFFICIENT"/>
-		<field name="BIOMETRIC_ACQUIRED_PARTIAL"/>
-		<field name="BIOMETRIC_ACQUIRED_TOO_FAST"/>
-		<field name="BIOMETRIC_ACQUIRED_TOO_SLOW"/>
-		<field name="BIOMETRIC_ERROR_CANCELED"/>
-		<field name="BIOMETRIC_ERROR_HW_NOT_PRESENT"/>
-		<field name="BIOMETRIC_ERROR_HW_UNAVAILABLE"/>
-		<field name="BIOMETRIC_ERROR_LOCKOUT"/>
-		<field name="BIOMETRIC_ERROR_LOCKOUT_PERMANENT"/>
-		<field name="BIOMETRIC_ERROR_NO_BIOMETRICS"/>
-		<field name="BIOMETRIC_ERROR_NO_SPACE"/>
-		<field name="BIOMETRIC_ERROR_TIMEOUT"/>
-		<field name="BIOMETRIC_ERROR_UNABLE_TO_PROCESS"/>
-		<field name="BIOMETRIC_ERROR_USER_CANCELED"/>
-		<field name="BIOMETRIC_ERROR_VENDOR"/>
-	</class>
-	<class name="android/hardware/biometrics/BiometricPrompt$AuthenticationCallback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAuthenticationError(ILjava/lang/CharSequence;)V"/>
-		<method name="onAuthenticationFailed()V"/>
-		<method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V"/>
-		<method name="onAuthenticationSucceeded(Landroid/hardware/biometrics/BiometricPrompt$AuthenticationResult;)V"/>
-	</class>
-	<class name="android/hardware/biometrics/BiometricPrompt$AuthenticationResult" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCryptoObject()Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;"/>
-	</class>
-	<class name="android/hardware/biometrics/BiometricPrompt$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="build()Landroid/hardware/biometrics/BiometricPrompt;"/>
-		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
-		<method name="setNegativeButton(Ljava/lang/CharSequence;Ljava/util/concurrent/Executor;Landroid/content/DialogInterface$OnClickListener;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
-		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
-	</class>
-	<class name="android/hardware/biometrics/BiometricPrompt$CryptoObject" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/Signature;)V"/>
-		<method name="&lt;init>(Ljavax/crypto/Cipher;)V"/>
-		<method name="&lt;init>(Ljavax/crypto/Mac;)V"/>
-		<method name="getCipher()Ljavax/crypto/Cipher;"/>
-		<method name="getMac()Ljavax/crypto/Mac;"/>
-		<method name="getSignature()Ljava/security/Signature;"/>
-	</class>
-	<class name="android/hardware/camera2/CameraAccessException" since="21">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(ILjava/lang/Throwable;)V"/>
-		<method name="getReason()I"/>
-		<field name="CAMERA_DISABLED"/>
-		<field name="CAMERA_DISCONNECTED"/>
-		<field name="CAMERA_ERROR"/>
-		<field name="CAMERA_IN_USE" since="23"/>
-		<field name="MAX_CAMERAS_IN_USE" since="23"/>
-	</class>
-	<class name="android/hardware/camera2/CameraCaptureSession" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="abortCaptures()V"/>
-		<method name="capture(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
-		<method name="captureBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
-		<method name="captureBurstRequests(Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
-		<method name="captureSingleRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
-		<method name="finalizeOutputConfigurations(Ljava/util/List;)V" since="26"/>
-		<method name="getDevice()Landroid/hardware/camera2/CameraDevice;"/>
-		<method name="getInputSurface()Landroid/view/Surface;" since="23"/>
-		<method name="isReprocessable()Z" since="23"/>
-		<method name="prepare(Landroid/view/Surface;)V" since="23"/>
-		<method name="setRepeatingBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
-		<method name="setRepeatingBurstRequests(Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
-		<method name="setRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
-		<method name="setSingleRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
-		<method name="stopRepeating()V"/>
-		<method name="updateOutputConfiguration(Landroid/hardware/camera2/params/OutputConfiguration;)V" since="28"/>
-	</class>
-	<class name="android/hardware/camera2/CameraCaptureSession$CaptureCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCaptureBufferLost(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/view/Surface;J)V" since="24"/>
-		<method name="onCaptureCompleted(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V"/>
-		<method name="onCaptureFailed(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureFailure;)V"/>
-		<method name="onCaptureProgressed(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V"/>
-		<method name="onCaptureSequenceAborted(Landroid/hardware/camera2/CameraCaptureSession;I)V"/>
-		<method name="onCaptureSequenceCompleted(Landroid/hardware/camera2/CameraCaptureSession;IJ)V"/>
-		<method name="onCaptureStarted(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;JJ)V"/>
-	</class>
-	<class name="android/hardware/camera2/CameraCaptureSession$StateCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onActive(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
-		<method name="onCaptureQueueEmpty(Landroid/hardware/camera2/CameraCaptureSession;)V" since="26"/>
-		<method name="onClosed(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
-		<method name="onConfigureFailed(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
-		<method name="onConfigured(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
-		<method name="onReady(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
-		<method name="onSurfacePrepared(Landroid/hardware/camera2/CameraCaptureSession;Landroid/view/Surface;)V" since="23"/>
-	</class>
-	<class name="android/hardware/camera2/CameraCharacteristics" since="21">
-		<extends name="android/hardware/camera2/CameraMetadata"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;"/>
-		<method name="getAvailableCaptureRequestKeys()Ljava/util/List;"/>
-		<method name="getAvailableCaptureResultKeys()Ljava/util/List;"/>
-		<method name="getAvailablePhysicalCameraRequestKeys()Ljava/util/List;" since="28"/>
-		<method name="getAvailableSessionKeys()Ljava/util/List;" since="28"/>
-		<method name="getPhysicalCameraIds()Ljava/util/Set;" since="28"/>
-		<field name="COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES"/>
-		<field name="CONTROL_AE_AVAILABLE_ANTIBANDING_MODES"/>
-		<field name="CONTROL_AE_AVAILABLE_MODES"/>
-		<field name="CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES"/>
-		<field name="CONTROL_AE_COMPENSATION_RANGE"/>
-		<field name="CONTROL_AE_COMPENSATION_STEP"/>
-		<field name="CONTROL_AE_LOCK_AVAILABLE" since="23"/>
-		<field name="CONTROL_AF_AVAILABLE_MODES"/>
-		<field name="CONTROL_AVAILABLE_EFFECTS"/>
-		<field name="CONTROL_AVAILABLE_MODES" since="23"/>
-		<field name="CONTROL_AVAILABLE_SCENE_MODES"/>
-		<field name="CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES"/>
-		<field name="CONTROL_AWB_AVAILABLE_MODES"/>
-		<field name="CONTROL_AWB_LOCK_AVAILABLE" since="23"/>
-		<field name="CONTROL_MAX_REGIONS_AE"/>
-		<field name="CONTROL_MAX_REGIONS_AF"/>
-		<field name="CONTROL_MAX_REGIONS_AWB"/>
-		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE" since="24"/>
-		<field name="DEPTH_DEPTH_IS_EXCLUSIVE" since="23"/>
-		<field name="DISTORTION_CORRECTION_AVAILABLE_MODES" since="28"/>
-		<field name="EDGE_AVAILABLE_EDGE_MODES"/>
-		<field name="FLASH_INFO_AVAILABLE"/>
-		<field name="HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES"/>
-		<field name="INFO_SUPPORTED_HARDWARE_LEVEL"/>
-		<field name="INFO_VERSION" since="28"/>
-		<field name="JPEG_AVAILABLE_THUMBNAIL_SIZES"/>
-		<field name="LENS_DISTORTION" since="28"/>
-		<field name="LENS_FACING"/>
-		<field name="LENS_INFO_AVAILABLE_APERTURES"/>
-		<field name="LENS_INFO_AVAILABLE_FILTER_DENSITIES"/>
-		<field name="LENS_INFO_AVAILABLE_FOCAL_LENGTHS"/>
-		<field name="LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION"/>
-		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION"/>
-		<field name="LENS_INFO_HYPERFOCAL_DISTANCE"/>
-		<field name="LENS_INFO_MINIMUM_FOCUS_DISTANCE"/>
-		<field name="LENS_INTRINSIC_CALIBRATION" since="23"/>
-		<field name="LENS_POSE_REFERENCE" since="28"/>
-		<field name="LENS_POSE_ROTATION" since="23"/>
-		<field name="LENS_POSE_TRANSLATION" since="23"/>
-		<field name="LENS_RADIAL_DISTORTION" since="23" deprecated="28"/>
-		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE" since="28"/>
-		<field name="NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES"/>
-		<field name="REPROCESS_MAX_CAPTURE_STALL" since="23"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES"/>
-		<field name="REQUEST_MAX_NUM_INPUT_STREAMS" since="23"/>
-		<field name="REQUEST_MAX_NUM_OUTPUT_PROC"/>
-		<field name="REQUEST_MAX_NUM_OUTPUT_PROC_STALLING"/>
-		<field name="REQUEST_MAX_NUM_OUTPUT_RAW"/>
-		<field name="REQUEST_PARTIAL_RESULT_COUNT"/>
-		<field name="REQUEST_PIPELINE_MAX_DEPTH"/>
-		<field name="SCALER_AVAILABLE_MAX_DIGITAL_ZOOM"/>
-		<field name="SCALER_CROPPING_TYPE"/>
-		<field name="SCALER_STREAM_CONFIGURATION_MAP"/>
-		<field name="SENSOR_AVAILABLE_TEST_PATTERN_MODES"/>
-		<field name="SENSOR_BLACK_LEVEL_PATTERN"/>
-		<field name="SENSOR_CALIBRATION_TRANSFORM1"/>
-		<field name="SENSOR_CALIBRATION_TRANSFORM2"/>
-		<field name="SENSOR_COLOR_TRANSFORM1"/>
-		<field name="SENSOR_COLOR_TRANSFORM2"/>
-		<field name="SENSOR_FORWARD_MATRIX1"/>
-		<field name="SENSOR_FORWARD_MATRIX2"/>
-		<field name="SENSOR_INFO_ACTIVE_ARRAY_SIZE"/>
-		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT"/>
-		<field name="SENSOR_INFO_EXPOSURE_TIME_RANGE"/>
-		<field name="SENSOR_INFO_LENS_SHADING_APPLIED" since="23"/>
-		<field name="SENSOR_INFO_MAX_FRAME_DURATION"/>
-		<field name="SENSOR_INFO_PHYSICAL_SIZE"/>
-		<field name="SENSOR_INFO_PIXEL_ARRAY_SIZE"/>
-		<field name="SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE" since="23"/>
-		<field name="SENSOR_INFO_SENSITIVITY_RANGE"/>
-		<field name="SENSOR_INFO_TIMESTAMP_SOURCE"/>
-		<field name="SENSOR_INFO_WHITE_LEVEL"/>
-		<field name="SENSOR_MAX_ANALOG_SENSITIVITY"/>
-		<field name="SENSOR_OPTICAL_BLACK_REGIONS" since="24"/>
-		<field name="SENSOR_ORIENTATION"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT2"/>
-		<field name="SHADING_AVAILABLE_MODES" since="23"/>
-		<field name="STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES"/>
-		<field name="STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES"/>
-		<field name="STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES" since="23"/>
-		<field name="STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES" since="28"/>
-		<field name="STATISTICS_INFO_MAX_FACE_COUNT"/>
-		<field name="SYNC_MAX_LATENCY"/>
-		<field name="TONEMAP_AVAILABLE_TONE_MAP_MODES"/>
-		<field name="TONEMAP_MAX_CURVE_POINTS"/>
-	</class>
-	<class name="android/hardware/camera2/CameraCharacteristics$Key" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
-		<method name="getName()Ljava/lang/String;"/>
-	</class>
-	<class name="android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession" since="23">
-		<extends name="android/hardware/camera2/CameraCaptureSession"/>
-		<method name="&lt;init>()V"/>
-		<method name="createHighSpeedRequestList(Landroid/hardware/camera2/CaptureRequest;)Ljava/util/List;"/>
-	</class>
-	<class name="android/hardware/camera2/CameraDevice" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;"/>
-		<method name="createCaptureRequest(ILjava/util/Set;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="28"/>
-		<method name="createCaptureSession(Landroid/hardware/camera2/params/SessionConfiguration;)V" since="28"/>
-		<method name="createCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V"/>
-		<method name="createCaptureSessionByOutputConfigurations(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="24"/>
-		<method name="createConstrainedHighSpeedCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="23"/>
-		<method name="createReprocessCaptureRequest(Landroid/hardware/camera2/TotalCaptureResult;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="23"/>
-		<method name="createReprocessableCaptureSession(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="23"/>
-		<method name="createReprocessableCaptureSessionByConfigurations(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="24"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<field name="TEMPLATE_MANUAL"/>
-		<field name="TEMPLATE_PREVIEW"/>
-		<field name="TEMPLATE_RECORD"/>
-		<field name="TEMPLATE_STILL_CAPTURE"/>
-		<field name="TEMPLATE_VIDEO_SNAPSHOT"/>
-		<field name="TEMPLATE_ZERO_SHUTTER_LAG"/>
-	</class>
-	<class name="android/hardware/camera2/CameraDevice$StateCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onClosed(Landroid/hardware/camera2/CameraDevice;)V"/>
-		<method name="onDisconnected(Landroid/hardware/camera2/CameraDevice;)V"/>
-		<method name="onError(Landroid/hardware/camera2/CameraDevice;I)V"/>
-		<method name="onOpened(Landroid/hardware/camera2/CameraDevice;)V"/>
-		<field name="ERROR_CAMERA_DEVICE"/>
-		<field name="ERROR_CAMERA_DISABLED"/>
-		<field name="ERROR_CAMERA_IN_USE"/>
-		<field name="ERROR_CAMERA_SERVICE"/>
-		<field name="ERROR_MAX_CAMERAS_IN_USE"/>
-	</class>
-	<class name="android/hardware/camera2/CameraManager" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraCharacteristics;"/>
-		<method name="getCameraIdList()[Ljava/lang/String;"/>
-		<method name="openCamera(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;)V"/>
-		<method name="openCamera(Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraDevice$StateCallback;)V" since="28"/>
-		<method name="registerAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Landroid/os/Handler;)V"/>
-		<method name="registerAvailabilityCallback(Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V" since="28"/>
-		<method name="registerTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;)V" since="23"/>
-		<method name="registerTorchCallback(Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraManager$TorchCallback;)V" since="28"/>
-		<method name="setTorchMode(Ljava/lang/String;Z)V" since="23"/>
-		<method name="unregisterAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V"/>
-		<method name="unregisterTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;)V" since="23"/>
-	</class>
-	<class name="android/hardware/camera2/CameraManager$AvailabilityCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCameraAvailable(Ljava/lang/String;)V"/>
-		<method name="onCameraUnavailable(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/hardware/camera2/CameraManager$TorchCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onTorchModeChanged(Ljava/lang/String;Z)V"/>
-		<method name="onTorchModeUnavailable(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/hardware/camera2/CameraMetadata" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getKeys()Ljava/util/List;"/>
-		<field name="COLOR_CORRECTION_ABERRATION_MODE_FAST"/>
-		<field name="COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY"/>
-		<field name="COLOR_CORRECTION_ABERRATION_MODE_OFF"/>
-		<field name="COLOR_CORRECTION_MODE_FAST"/>
-		<field name="COLOR_CORRECTION_MODE_HIGH_QUALITY"/>
-		<field name="COLOR_CORRECTION_MODE_TRANSFORM_MATRIX"/>
-		<field name="CONTROL_AE_ANTIBANDING_MODE_50HZ"/>
-		<field name="CONTROL_AE_ANTIBANDING_MODE_60HZ"/>
-		<field name="CONTROL_AE_ANTIBANDING_MODE_AUTO"/>
-		<field name="CONTROL_AE_ANTIBANDING_MODE_OFF"/>
-		<field name="CONTROL_AE_MODE_OFF"/>
-		<field name="CONTROL_AE_MODE_ON"/>
-		<field name="CONTROL_AE_MODE_ON_ALWAYS_FLASH"/>
-		<field name="CONTROL_AE_MODE_ON_AUTO_FLASH"/>
-		<field name="CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE"/>
-		<field name="CONTROL_AE_MODE_ON_EXTERNAL_FLASH" since="28"/>
-		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL" since="23"/>
-		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_IDLE"/>
-		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_START"/>
-		<field name="CONTROL_AE_STATE_CONVERGED"/>
-		<field name="CONTROL_AE_STATE_FLASH_REQUIRED"/>
-		<field name="CONTROL_AE_STATE_INACTIVE"/>
-		<field name="CONTROL_AE_STATE_LOCKED"/>
-		<field name="CONTROL_AE_STATE_PRECAPTURE"/>
-		<field name="CONTROL_AE_STATE_SEARCHING"/>
-		<field name="CONTROL_AF_MODE_AUTO"/>
-		<field name="CONTROL_AF_MODE_CONTINUOUS_PICTURE"/>
-		<field name="CONTROL_AF_MODE_CONTINUOUS_VIDEO"/>
-		<field name="CONTROL_AF_MODE_EDOF"/>
-		<field name="CONTROL_AF_MODE_MACRO"/>
-		<field name="CONTROL_AF_MODE_OFF"/>
-		<field name="CONTROL_AF_SCENE_CHANGE_DETECTED" since="28"/>
-		<field name="CONTROL_AF_SCENE_CHANGE_NOT_DETECTED" since="28"/>
-		<field name="CONTROL_AF_STATE_ACTIVE_SCAN"/>
-		<field name="CONTROL_AF_STATE_FOCUSED_LOCKED"/>
-		<field name="CONTROL_AF_STATE_INACTIVE"/>
-		<field name="CONTROL_AF_STATE_NOT_FOCUSED_LOCKED"/>
-		<field name="CONTROL_AF_STATE_PASSIVE_FOCUSED"/>
-		<field name="CONTROL_AF_STATE_PASSIVE_SCAN"/>
-		<field name="CONTROL_AF_STATE_PASSIVE_UNFOCUSED"/>
-		<field name="CONTROL_AF_TRIGGER_CANCEL"/>
-		<field name="CONTROL_AF_TRIGGER_IDLE"/>
-		<field name="CONTROL_AF_TRIGGER_START"/>
-		<field name="CONTROL_AWB_MODE_AUTO"/>
-		<field name="CONTROL_AWB_MODE_CLOUDY_DAYLIGHT"/>
-		<field name="CONTROL_AWB_MODE_DAYLIGHT"/>
-		<field name="CONTROL_AWB_MODE_FLUORESCENT"/>
-		<field name="CONTROL_AWB_MODE_INCANDESCENT"/>
-		<field name="CONTROL_AWB_MODE_OFF"/>
-		<field name="CONTROL_AWB_MODE_SHADE"/>
-		<field name="CONTROL_AWB_MODE_TWILIGHT"/>
-		<field name="CONTROL_AWB_MODE_WARM_FLUORESCENT"/>
-		<field name="CONTROL_AWB_STATE_CONVERGED"/>
-		<field name="CONTROL_AWB_STATE_INACTIVE"/>
-		<field name="CONTROL_AWB_STATE_LOCKED"/>
-		<field name="CONTROL_AWB_STATE_SEARCHING"/>
-		<field name="CONTROL_CAPTURE_INTENT_CUSTOM"/>
-		<field name="CONTROL_CAPTURE_INTENT_MANUAL"/>
-		<field name="CONTROL_CAPTURE_INTENT_MOTION_TRACKING" since="28"/>
-		<field name="CONTROL_CAPTURE_INTENT_PREVIEW"/>
-		<field name="CONTROL_CAPTURE_INTENT_STILL_CAPTURE"/>
-		<field name="CONTROL_CAPTURE_INTENT_VIDEO_RECORD"/>
-		<field name="CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT"/>
-		<field name="CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG"/>
-		<field name="CONTROL_EFFECT_MODE_AQUA"/>
-		<field name="CONTROL_EFFECT_MODE_BLACKBOARD"/>
-		<field name="CONTROL_EFFECT_MODE_MONO"/>
-		<field name="CONTROL_EFFECT_MODE_NEGATIVE"/>
-		<field name="CONTROL_EFFECT_MODE_OFF"/>
-		<field name="CONTROL_EFFECT_MODE_POSTERIZE"/>
-		<field name="CONTROL_EFFECT_MODE_SEPIA"/>
-		<field name="CONTROL_EFFECT_MODE_SOLARIZE"/>
-		<field name="CONTROL_EFFECT_MODE_WHITEBOARD"/>
-		<field name="CONTROL_MODE_AUTO"/>
-		<field name="CONTROL_MODE_OFF"/>
-		<field name="CONTROL_MODE_OFF_KEEP_STATE"/>
-		<field name="CONTROL_MODE_USE_SCENE_MODE"/>
-		<field name="CONTROL_SCENE_MODE_ACTION"/>
-		<field name="CONTROL_SCENE_MODE_BARCODE"/>
-		<field name="CONTROL_SCENE_MODE_BEACH"/>
-		<field name="CONTROL_SCENE_MODE_CANDLELIGHT"/>
-		<field name="CONTROL_SCENE_MODE_DISABLED"/>
-		<field name="CONTROL_SCENE_MODE_FACE_PRIORITY"/>
-		<field name="CONTROL_SCENE_MODE_FIREWORKS"/>
-		<field name="CONTROL_SCENE_MODE_HDR" since="22"/>
-		<field name="CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO" deprecated="23"/>
-		<field name="CONTROL_SCENE_MODE_LANDSCAPE"/>
-		<field name="CONTROL_SCENE_MODE_NIGHT"/>
-		<field name="CONTROL_SCENE_MODE_NIGHT_PORTRAIT"/>
-		<field name="CONTROL_SCENE_MODE_PARTY"/>
-		<field name="CONTROL_SCENE_MODE_PORTRAIT"/>
-		<field name="CONTROL_SCENE_MODE_SNOW"/>
-		<field name="CONTROL_SCENE_MODE_SPORTS"/>
-		<field name="CONTROL_SCENE_MODE_STEADYPHOTO"/>
-		<field name="CONTROL_SCENE_MODE_SUNSET"/>
-		<field name="CONTROL_SCENE_MODE_THEATRE"/>
-		<field name="CONTROL_VIDEO_STABILIZATION_MODE_OFF"/>
-		<field name="CONTROL_VIDEO_STABILIZATION_MODE_ON"/>
-		<field name="DISTORTION_CORRECTION_MODE_FAST" since="28"/>
-		<field name="DISTORTION_CORRECTION_MODE_HIGH_QUALITY" since="28"/>
-		<field name="DISTORTION_CORRECTION_MODE_OFF" since="28"/>
-		<field name="EDGE_MODE_FAST"/>
-		<field name="EDGE_MODE_HIGH_QUALITY"/>
-		<field name="EDGE_MODE_OFF"/>
-		<field name="EDGE_MODE_ZERO_SHUTTER_LAG" since="23"/>
-		<field name="FLASH_MODE_OFF"/>
-		<field name="FLASH_MODE_SINGLE"/>
-		<field name="FLASH_MODE_TORCH"/>
-		<field name="FLASH_STATE_CHARGING"/>
-		<field name="FLASH_STATE_FIRED"/>
-		<field name="FLASH_STATE_PARTIAL"/>
-		<field name="FLASH_STATE_READY"/>
-		<field name="FLASH_STATE_UNAVAILABLE"/>
-		<field name="HOT_PIXEL_MODE_FAST"/>
-		<field name="HOT_PIXEL_MODE_HIGH_QUALITY"/>
-		<field name="HOT_PIXEL_MODE_OFF"/>
-		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_3" since="24"/>
-		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL" since="28"/>
-		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_FULL"/>
-		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY"/>
-		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED"/>
-		<field name="LENS_FACING_BACK"/>
-		<field name="LENS_FACING_EXTERNAL" since="23"/>
-		<field name="LENS_FACING_FRONT"/>
-		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE"/>
-		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED"/>
-		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED"/>
-		<field name="LENS_OPTICAL_STABILIZATION_MODE_OFF"/>
-		<field name="LENS_OPTICAL_STABILIZATION_MODE_ON"/>
-		<field name="LENS_POSE_REFERENCE_GYROSCOPE" since="28"/>
-		<field name="LENS_POSE_REFERENCE_PRIMARY_CAMERA" since="28"/>
-		<field name="LENS_STATE_MOVING"/>
-		<field name="LENS_STATE_STATIONARY"/>
-		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE" since="28"/>
-		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED" since="28"/>
-		<field name="NOISE_REDUCTION_MODE_FAST"/>
-		<field name="NOISE_REDUCTION_MODE_HIGH_QUALITY"/>
-		<field name="NOISE_REDUCTION_MODE_MINIMAL" since="23"/>
-		<field name="NOISE_REDUCTION_MODE_OFF"/>
-		<field name="NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG" since="23"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE" since="22"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO" since="23"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT" since="23"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA" since="28"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME" since="28"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING" since="28"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING" since="23"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_RAW"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS" since="22"/>
-		<field name="REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING" since="23"/>
-		<field name="SCALER_CROPPING_TYPE_CENTER_ONLY"/>
-		<field name="SCALER_CROPPING_TYPE_FREEFORM"/>
-		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR"/>
-		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG"/>
-		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG"/>
-		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB"/>
-		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB"/>
-		<field name="SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME"/>
-		<field name="SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_D50"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_D55"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_D65"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_D75"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_FLASH"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_SHADE"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN"/>
-		<field name="SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT"/>
-		<field name="SENSOR_TEST_PATTERN_MODE_COLOR_BARS"/>
-		<field name="SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY"/>
-		<field name="SENSOR_TEST_PATTERN_MODE_CUSTOM1"/>
-		<field name="SENSOR_TEST_PATTERN_MODE_OFF"/>
-		<field name="SENSOR_TEST_PATTERN_MODE_PN9"/>
-		<field name="SENSOR_TEST_PATTERN_MODE_SOLID_COLOR"/>
-		<field name="SHADING_MODE_FAST"/>
-		<field name="SHADING_MODE_HIGH_QUALITY"/>
-		<field name="SHADING_MODE_OFF"/>
-		<field name="STATISTICS_FACE_DETECT_MODE_FULL"/>
-		<field name="STATISTICS_FACE_DETECT_MODE_OFF"/>
-		<field name="STATISTICS_FACE_DETECT_MODE_SIMPLE"/>
-		<field name="STATISTICS_LENS_SHADING_MAP_MODE_OFF"/>
-		<field name="STATISTICS_LENS_SHADING_MAP_MODE_ON"/>
-		<field name="STATISTICS_OIS_DATA_MODE_OFF" since="28"/>
-		<field name="STATISTICS_OIS_DATA_MODE_ON" since="28"/>
-		<field name="STATISTICS_SCENE_FLICKER_50HZ"/>
-		<field name="STATISTICS_SCENE_FLICKER_60HZ"/>
-		<field name="STATISTICS_SCENE_FLICKER_NONE"/>
-		<field name="SYNC_MAX_LATENCY_PER_FRAME_CONTROL"/>
-		<field name="SYNC_MAX_LATENCY_UNKNOWN"/>
-		<field name="TONEMAP_MODE_CONTRAST_CURVE"/>
-		<field name="TONEMAP_MODE_FAST"/>
-		<field name="TONEMAP_MODE_GAMMA_VALUE" since="23"/>
-		<field name="TONEMAP_MODE_HIGH_QUALITY"/>
-		<field name="TONEMAP_MODE_PRESET_CURVE" since="23"/>
-		<field name="TONEMAP_PRESET_CURVE_REC709" since="23"/>
-		<field name="TONEMAP_PRESET_CURVE_SRGB" since="23"/>
-	</class>
-	<class name="android/hardware/camera2/CaptureFailure" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/hardware/camera2/CaptureRequest;IZIJ)V" since="29"/>
-		<method name="getFrameNumber()J"/>
-		<method name="getReason()I"/>
-		<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;"/>
-		<method name="getSequenceId()I"/>
-		<method name="wasImageCaptured()Z"/>
-		<field name="REASON_ERROR"/>
-		<field name="REASON_FLUSHED"/>
-	</class>
-	<class name="android/hardware/camera2/CaptureRequest" since="21">
-		<extends name="android/hardware/camera2/CameraMetadata"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;"/>
-		<method name="getTag()Ljava/lang/Object;"/>
-		<method name="isReprocess()Z" since="23"/>
-		<field name="BLACK_LEVEL_LOCK"/>
-		<field name="COLOR_CORRECTION_ABERRATION_MODE"/>
-		<field name="COLOR_CORRECTION_GAINS"/>
-		<field name="COLOR_CORRECTION_MODE"/>
-		<field name="COLOR_CORRECTION_TRANSFORM"/>
-		<field name="CONTROL_AE_ANTIBANDING_MODE"/>
-		<field name="CONTROL_AE_EXPOSURE_COMPENSATION"/>
-		<field name="CONTROL_AE_LOCK"/>
-		<field name="CONTROL_AE_MODE"/>
-		<field name="CONTROL_AE_PRECAPTURE_TRIGGER"/>
-		<field name="CONTROL_AE_REGIONS"/>
-		<field name="CONTROL_AE_TARGET_FPS_RANGE"/>
-		<field name="CONTROL_AF_MODE"/>
-		<field name="CONTROL_AF_REGIONS"/>
-		<field name="CONTROL_AF_TRIGGER"/>
-		<field name="CONTROL_AWB_LOCK"/>
-		<field name="CONTROL_AWB_MODE"/>
-		<field name="CONTROL_AWB_REGIONS"/>
-		<field name="CONTROL_CAPTURE_INTENT"/>
-		<field name="CONTROL_EFFECT_MODE"/>
-		<field name="CONTROL_ENABLE_ZSL" since="26"/>
-		<field name="CONTROL_MODE"/>
-		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST" since="24"/>
-		<field name="CONTROL_SCENE_MODE"/>
-		<field name="CONTROL_VIDEO_STABILIZATION_MODE"/>
-		<field name="CREATOR"/>
-		<field name="DISTORTION_CORRECTION_MODE" since="28"/>
-		<field name="EDGE_MODE"/>
-		<field name="FLASH_MODE"/>
-		<field name="HOT_PIXEL_MODE"/>
-		<field name="JPEG_GPS_LOCATION"/>
-		<field name="JPEG_ORIENTATION"/>
-		<field name="JPEG_QUALITY"/>
-		<field name="JPEG_THUMBNAIL_QUALITY"/>
-		<field name="JPEG_THUMBNAIL_SIZE"/>
-		<field name="LENS_APERTURE"/>
-		<field name="LENS_FILTER_DENSITY"/>
-		<field name="LENS_FOCAL_LENGTH"/>
-		<field name="LENS_FOCUS_DISTANCE"/>
-		<field name="LENS_OPTICAL_STABILIZATION_MODE"/>
-		<field name="NOISE_REDUCTION_MODE"/>
-		<field name="REPROCESS_EFFECTIVE_EXPOSURE_FACTOR" since="23"/>
-		<field name="SCALER_CROP_REGION"/>
-		<field name="SENSOR_EXPOSURE_TIME"/>
-		<field name="SENSOR_FRAME_DURATION"/>
-		<field name="SENSOR_SENSITIVITY"/>
-		<field name="SENSOR_TEST_PATTERN_DATA"/>
-		<field name="SENSOR_TEST_PATTERN_MODE"/>
-		<field name="SHADING_MODE"/>
-		<field name="STATISTICS_FACE_DETECT_MODE"/>
-		<field name="STATISTICS_HOT_PIXEL_MAP_MODE"/>
-		<field name="STATISTICS_LENS_SHADING_MAP_MODE"/>
-		<field name="STATISTICS_OIS_DATA_MODE" since="28"/>
-		<field name="TONEMAP_CURVE"/>
-		<field name="TONEMAP_GAMMA" since="23"/>
-		<field name="TONEMAP_MODE"/>
-		<field name="TONEMAP_PRESET_CURVE" since="23"/>
-	</class>
-	<class name="android/hardware/camera2/CaptureRequest$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addTarget(Landroid/view/Surface;)V"/>
-		<method name="build()Landroid/hardware/camera2/CaptureRequest;"/>
-		<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;"/>
-		<method name="getPhysicalCameraKey(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/String;)Ljava/lang/Object;" since="28"/>
-		<method name="removeTarget(Landroid/view/Surface;)V"/>
-		<method name="set(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;)V"/>
-		<method name="setPhysicalCameraKey(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;Ljava/lang/String;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="28"/>
-		<method name="setTag(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/hardware/camera2/CaptureRequest$Key" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
-		<method name="getName()Ljava/lang/String;"/>
-	</class>
-	<class name="android/hardware/camera2/CaptureResult" since="21">
-		<extends name="android/hardware/camera2/CameraMetadata"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Landroid/hardware/camera2/CaptureResult$Key;)Ljava/lang/Object;"/>
-		<method name="getFrameNumber()J"/>
-		<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;"/>
-		<method name="getSequenceId()I"/>
-		<field name="BLACK_LEVEL_LOCK"/>
-		<field name="COLOR_CORRECTION_ABERRATION_MODE"/>
-		<field name="COLOR_CORRECTION_GAINS"/>
-		<field name="COLOR_CORRECTION_MODE"/>
-		<field name="COLOR_CORRECTION_TRANSFORM"/>
-		<field name="CONTROL_AE_ANTIBANDING_MODE"/>
-		<field name="CONTROL_AE_EXPOSURE_COMPENSATION"/>
-		<field name="CONTROL_AE_LOCK"/>
-		<field name="CONTROL_AE_MODE"/>
-		<field name="CONTROL_AE_PRECAPTURE_TRIGGER"/>
-		<field name="CONTROL_AE_REGIONS"/>
-		<field name="CONTROL_AE_STATE"/>
-		<field name="CONTROL_AE_TARGET_FPS_RANGE"/>
-		<field name="CONTROL_AF_MODE"/>
-		<field name="CONTROL_AF_REGIONS"/>
-		<field name="CONTROL_AF_SCENE_CHANGE" since="28"/>
-		<field name="CONTROL_AF_STATE"/>
-		<field name="CONTROL_AF_TRIGGER"/>
-		<field name="CONTROL_AWB_LOCK"/>
-		<field name="CONTROL_AWB_MODE"/>
-		<field name="CONTROL_AWB_REGIONS"/>
-		<field name="CONTROL_AWB_STATE"/>
-		<field name="CONTROL_CAPTURE_INTENT"/>
-		<field name="CONTROL_EFFECT_MODE"/>
-		<field name="CONTROL_ENABLE_ZSL" since="26"/>
-		<field name="CONTROL_MODE"/>
-		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST" since="24"/>
-		<field name="CONTROL_SCENE_MODE"/>
-		<field name="CONTROL_VIDEO_STABILIZATION_MODE"/>
-		<field name="DISTORTION_CORRECTION_MODE" since="28"/>
-		<field name="EDGE_MODE"/>
-		<field name="FLASH_MODE"/>
-		<field name="FLASH_STATE"/>
-		<field name="HOT_PIXEL_MODE"/>
-		<field name="JPEG_GPS_LOCATION"/>
-		<field name="JPEG_ORIENTATION"/>
-		<field name="JPEG_QUALITY"/>
-		<field name="JPEG_THUMBNAIL_QUALITY"/>
-		<field name="JPEG_THUMBNAIL_SIZE"/>
-		<field name="LENS_APERTURE"/>
-		<field name="LENS_DISTORTION" since="28"/>
-		<field name="LENS_FILTER_DENSITY"/>
-		<field name="LENS_FOCAL_LENGTH"/>
-		<field name="LENS_FOCUS_DISTANCE"/>
-		<field name="LENS_FOCUS_RANGE"/>
-		<field name="LENS_INTRINSIC_CALIBRATION" since="23"/>
-		<field name="LENS_OPTICAL_STABILIZATION_MODE"/>
-		<field name="LENS_POSE_ROTATION" since="23"/>
-		<field name="LENS_POSE_TRANSLATION" since="23"/>
-		<field name="LENS_RADIAL_DISTORTION" since="23" deprecated="28"/>
-		<field name="LENS_STATE"/>
-		<field name="NOISE_REDUCTION_MODE"/>
-		<field name="REPROCESS_EFFECTIVE_EXPOSURE_FACTOR" since="23"/>
-		<field name="REQUEST_PIPELINE_DEPTH"/>
-		<field name="SCALER_CROP_REGION"/>
-		<field name="SENSOR_DYNAMIC_BLACK_LEVEL" since="24"/>
-		<field name="SENSOR_DYNAMIC_WHITE_LEVEL" since="24"/>
-		<field name="SENSOR_EXPOSURE_TIME"/>
-		<field name="SENSOR_FRAME_DURATION"/>
-		<field name="SENSOR_GREEN_SPLIT"/>
-		<field name="SENSOR_NEUTRAL_COLOR_POINT"/>
-		<field name="SENSOR_NOISE_PROFILE"/>
-		<field name="SENSOR_ROLLING_SHUTTER_SKEW"/>
-		<field name="SENSOR_SENSITIVITY"/>
-		<field name="SENSOR_TEST_PATTERN_DATA"/>
-		<field name="SENSOR_TEST_PATTERN_MODE"/>
-		<field name="SENSOR_TIMESTAMP"/>
-		<field name="SHADING_MODE"/>
-		<field name="STATISTICS_FACES"/>
-		<field name="STATISTICS_FACE_DETECT_MODE"/>
-		<field name="STATISTICS_HOT_PIXEL_MAP"/>
-		<field name="STATISTICS_HOT_PIXEL_MAP_MODE"/>
-		<field name="STATISTICS_LENS_SHADING_CORRECTION_MAP"/>
-		<field name="STATISTICS_LENS_SHADING_MAP_MODE"/>
-		<field name="STATISTICS_OIS_DATA_MODE" since="28"/>
-		<field name="STATISTICS_OIS_SAMPLES" since="28"/>
-		<field name="STATISTICS_SCENE_FLICKER"/>
-		<field name="TONEMAP_CURVE"/>
-		<field name="TONEMAP_GAMMA" since="23"/>
-		<field name="TONEMAP_MODE"/>
-		<field name="TONEMAP_PRESET_CURVE" since="23"/>
-	</class>
-	<class name="android/hardware/camera2/CaptureResult$Key" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
-		<method name="getName()Ljava/lang/String;"/>
-	</class>
-	<class name="android/hardware/camera2/DngCreator" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>(Landroid/hardware/camera2/CameraCharacteristics;Landroid/hardware/camera2/CaptureResult;)V"/>
-		<method name="setDescription(Ljava/lang/String;)Landroid/hardware/camera2/DngCreator;"/>
-		<method name="setLocation(Landroid/location/Location;)Landroid/hardware/camera2/DngCreator;"/>
-		<method name="setOrientation(I)Landroid/hardware/camera2/DngCreator;"/>
-		<method name="setThumbnail(Landroid/graphics/Bitmap;)Landroid/hardware/camera2/DngCreator;"/>
-		<method name="setThumbnail(Landroid/media/Image;)Landroid/hardware/camera2/DngCreator;"/>
-		<method name="writeByteBuffer(Ljava/io/OutputStream;Landroid/util/Size;Ljava/nio/ByteBuffer;J)V"/>
-		<method name="writeImage(Ljava/io/OutputStream;Landroid/media/Image;)V"/>
-		<method name="writeInputStream(Ljava/io/OutputStream;Landroid/util/Size;Ljava/io/InputStream;J)V"/>
-		<field name="MAX_THUMBNAIL_DIMENSION"/>
-	</class>
-	<class name="android/hardware/camera2/TotalCaptureResult" since="21">
-		<extends name="android/hardware/camera2/CaptureResult"/>
-		<method name="&lt;init>()V"/>
-		<method name="getPartialResults()Ljava/util/List;"/>
-		<method name="getPhysicalCameraResults()Ljava/util/Map;" since="28"/>
-	</class>
-	<class name="android/hardware/camera2/params/BlackLevelPattern" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([I)V" since="29"/>
-		<method name="copyTo([II)V"/>
-		<method name="getOffsetForIndex(II)I"/>
-		<field name="COUNT"/>
-	</class>
-	<class name="android/hardware/camera2/params/ColorSpaceTransform" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>([I)V"/>
-		<method name="&lt;init>([Landroid/util/Rational;)V"/>
-		<method name="copyElements([II)V"/>
-		<method name="copyElements([Landroid/util/Rational;I)V"/>
-		<method name="getElement(II)Landroid/util/Rational;"/>
-	</class>
-	<class name="android/hardware/camera2/params/Face" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;I)V" since="29"/>
-		<method name="getBounds()Landroid/graphics/Rect;"/>
-		<method name="getId()I"/>
-		<method name="getLeftEyePosition()Landroid/graphics/Point;"/>
-		<method name="getMouthPosition()Landroid/graphics/Point;"/>
-		<method name="getRightEyePosition()Landroid/graphics/Point;"/>
-		<method name="getScore()I"/>
-		<field name="ID_UNSUPPORTED"/>
-		<field name="SCORE_MAX"/>
-		<field name="SCORE_MIN"/>
-	</class>
-	<class name="android/hardware/camera2/params/InputConfiguration" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="getFormat()I"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-	</class>
-	<class name="android/hardware/camera2/params/LensShadingMap" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([FII)V" since="29"/>
-		<method name="copyGainFactors([FI)V"/>
-		<method name="getColumnCount()I"/>
-		<method name="getGainFactor(III)F"/>
-		<method name="getGainFactorCount()I"/>
-		<method name="getGainFactorVector(II)Landroid/hardware/camera2/params/RggbChannelVector;"/>
-		<method name="getRowCount()I"/>
-		<field name="MINIMUM_GAIN_FACTOR"/>
-	</class>
-	<class name="android/hardware/camera2/params/MeteringRectangle" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IIIII)V"/>
-		<method name="&lt;init>(Landroid/graphics/Point;Landroid/util/Size;I)V"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;I)V"/>
-		<method name="equals(Landroid/hardware/camera2/params/MeteringRectangle;)Z"/>
-		<method name="getHeight()I"/>
-		<method name="getMeteringWeight()I"/>
-		<method name="getRect()Landroid/graphics/Rect;"/>
-		<method name="getSize()Landroid/util/Size;"/>
-		<method name="getUpperLeftPoint()Landroid/graphics/Point;"/>
-		<method name="getWidth()I"/>
-		<method name="getX()I"/>
-		<method name="getY()I"/>
-		<field name="METERING_WEIGHT_DONT_CARE"/>
-		<field name="METERING_WEIGHT_MAX"/>
-		<field name="METERING_WEIGHT_MIN"/>
-	</class>
-	<class name="android/hardware/camera2/params/OisSample" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(JFF)V"/>
-		<method name="getTimestamp()J"/>
-		<method name="getXshift()F"/>
-		<method name="getYshift()F"/>
-	</class>
-	<class name="android/hardware/camera2/params/OutputConfiguration" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ILandroid/view/Surface;)V"/>
-		<method name="&lt;init>(Landroid/util/Size;Ljava/lang/Class;)V" since="26"/>
-		<method name="&lt;init>(Landroid/view/Surface;)V"/>
-		<method name="addSurface(Landroid/view/Surface;)V" since="26"/>
-		<method name="enableSurfaceSharing()V" since="26"/>
-		<method name="getMaxSharedSurfaceCount()I" since="28"/>
-		<method name="getSurface()Landroid/view/Surface;"/>
-		<method name="getSurfaceGroupId()I"/>
-		<method name="getSurfaces()Ljava/util/List;" since="26"/>
-		<method name="removeSurface(Landroid/view/Surface;)V" since="28"/>
-		<method name="setPhysicalCameraId(Ljava/lang/String;)V" since="28"/>
-		<field name="CREATOR"/>
-		<field name="SURFACE_GROUP_ID_NONE"/>
-	</class>
-	<class name="android/hardware/camera2/params/RggbChannelVector" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(FFFF)V"/>
-		<method name="copyTo([FI)V"/>
-		<method name="getBlue()F"/>
-		<method name="getComponent(I)F"/>
-		<method name="getGreenEven()F"/>
-		<method name="getGreenOdd()F"/>
-		<method name="getRed()F"/>
-		<field name="BLUE"/>
-		<field name="COUNT"/>
-		<field name="GREEN_EVEN"/>
-		<field name="GREEN_ODD"/>
-		<field name="RED"/>
-	</class>
-	<class name="android/hardware/camera2/params/SessionConfiguration" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;)V"/>
-		<method name="getExecutor()Ljava/util/concurrent/Executor;"/>
-		<method name="getInputConfiguration()Landroid/hardware/camera2/params/InputConfiguration;"/>
-		<method name="getOutputConfigurations()Ljava/util/List;"/>
-		<method name="getSessionParameters()Landroid/hardware/camera2/CaptureRequest;"/>
-		<method name="getSessionType()I"/>
-		<method name="getStateCallback()Landroid/hardware/camera2/CameraCaptureSession$StateCallback;"/>
-		<method name="setInputConfiguration(Landroid/hardware/camera2/params/InputConfiguration;)V"/>
-		<method name="setSessionParameters(Landroid/hardware/camera2/CaptureRequest;)V"/>
-		<field name="SESSION_HIGH_SPEED"/>
-		<field name="SESSION_REGULAR"/>
-	</class>
-	<class name="android/hardware/camera2/params/StreamConfigurationMap" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getHighResolutionOutputSizes(I)[Landroid/util/Size;" since="23"/>
-		<method name="getHighSpeedVideoFpsRanges()[Landroid/util/Range;"/>
-		<method name="getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)[Landroid/util/Range;"/>
-		<method name="getHighSpeedVideoSizes()[Landroid/util/Size;"/>
-		<method name="getHighSpeedVideoSizesFor(Landroid/util/Range;)[Landroid/util/Size;"/>
-		<method name="getInputFormats()[I" since="23"/>
-		<method name="getInputSizes(I)[Landroid/util/Size;" since="23"/>
-		<method name="getOutputFormats()[I"/>
-		<method name="getOutputMinFrameDuration(ILandroid/util/Size;)J"/>
-		<method name="getOutputMinFrameDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
-		<method name="getOutputSizes(I)[Landroid/util/Size;"/>
-		<method name="getOutputSizes(Ljava/lang/Class;)[Landroid/util/Size;"/>
-		<method name="getOutputStallDuration(ILandroid/util/Size;)J"/>
-		<method name="getOutputStallDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
-		<method name="getValidOutputFormatsForInput(I)[I" since="23"/>
-		<method name="isOutputSupportedFor(I)Z"/>
-		<method name="isOutputSupportedFor(Landroid/view/Surface;)Z"/>
-		<method name="isOutputSupportedFor(Ljava/lang/Class;)Z"/>
-	</class>
-	<class name="android/hardware/camera2/params/TonemapCurve" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>([F[F[F)V"/>
-		<method name="copyColorCurve(I[FI)V"/>
-		<method name="getPoint(II)Landroid/graphics/PointF;"/>
-		<method name="getPointCount(I)I"/>
-		<field name="CHANNEL_BLUE"/>
-		<field name="CHANNEL_GREEN"/>
-		<field name="CHANNEL_RED"/>
-		<field name="LEVEL_BLACK"/>
-		<field name="LEVEL_WHITE"/>
-		<field name="POINT_SIZE"/>
-	</class>
-	<class name="android/hardware/display/DisplayManager" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;I)Landroid/hardware/display/VirtualDisplay;" since="19"/>
-		<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;ILandroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;" since="21"/>
-		<method name="getDisplay(I)Landroid/view/Display;"/>
-		<method name="getDisplays()[Landroid/view/Display;"/>
-		<method name="getDisplays(Ljava/lang/String;)[Landroid/view/Display;"/>
-		<method name="registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V"/>
-		<method name="unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V"/>
-		<field name="DISPLAY_CATEGORY_PRESENTATION"/>
-		<field name="VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR" since="21"/>
-		<field name="VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY" since="20"/>
-		<field name="VIRTUAL_DISPLAY_FLAG_PRESENTATION" since="19"/>
-		<field name="VIRTUAL_DISPLAY_FLAG_PUBLIC" since="19"/>
-		<field name="VIRTUAL_DISPLAY_FLAG_SECURE" since="19"/>
-	</class>
-	<class name="android/hardware/display/DisplayManager$DisplayListener" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="onDisplayAdded(I)V"/>
-		<method name="onDisplayChanged(I)V"/>
-		<method name="onDisplayRemoved(I)V"/>
-	</class>
-	<class name="android/hardware/display/VirtualDisplay" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDisplay()Landroid/view/Display;"/>
-		<method name="getSurface()Landroid/view/Surface;" since="20"/>
-		<method name="release()V"/>
-		<method name="resize(III)V" since="21"/>
-		<method name="setSurface(Landroid/view/Surface;)V" since="20"/>
-	</class>
-	<class name="android/hardware/display/VirtualDisplay$Callback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onPaused()V"/>
-		<method name="onResumed()V"/>
-		<method name="onStopped()V"/>
-	</class>
-	<class name="android/hardware/fingerprint/FingerprintManager" since="23" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="authenticate(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;Landroid/os/CancellationSignal;ILandroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback;Landroid/os/Handler;)V" deprecated="28"/>
-		<method name="hasEnrolledFingerprints()Z" deprecated="28"/>
-		<method name="isHardwareDetected()Z" deprecated="28"/>
-		<field name="FINGERPRINT_ACQUIRED_GOOD"/>
-		<field name="FINGERPRINT_ACQUIRED_IMAGER_DIRTY"/>
-		<field name="FINGERPRINT_ACQUIRED_INSUFFICIENT"/>
-		<field name="FINGERPRINT_ACQUIRED_PARTIAL"/>
-		<field name="FINGERPRINT_ACQUIRED_TOO_FAST"/>
-		<field name="FINGERPRINT_ACQUIRED_TOO_SLOW"/>
-		<field name="FINGERPRINT_ERROR_CANCELED"/>
-		<field name="FINGERPRINT_ERROR_HW_NOT_PRESENT" since="28"/>
-		<field name="FINGERPRINT_ERROR_HW_UNAVAILABLE"/>
-		<field name="FINGERPRINT_ERROR_LOCKOUT"/>
-		<field name="FINGERPRINT_ERROR_LOCKOUT_PERMANENT" since="27"/>
-		<field name="FINGERPRINT_ERROR_NO_FINGERPRINTS" since="28"/>
-		<field name="FINGERPRINT_ERROR_NO_SPACE"/>
-		<field name="FINGERPRINT_ERROR_TIMEOUT"/>
-		<field name="FINGERPRINT_ERROR_UNABLE_TO_PROCESS"/>
-		<field name="FINGERPRINT_ERROR_USER_CANCELED" since="27"/>
-		<field name="FINGERPRINT_ERROR_VENDOR" since="27"/>
-	</class>
-	<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationCallback" since="23" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAuthenticationError(ILjava/lang/CharSequence;)V"/>
-		<method name="onAuthenticationFailed()V"/>
-		<method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V"/>
-		<method name="onAuthenticationSucceeded(Landroid/hardware/fingerprint/FingerprintManager$AuthenticationResult;)V"/>
-	</class>
-	<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationResult" since="23" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCryptoObject()Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;"/>
-	</class>
-	<class name="android/hardware/fingerprint/FingerprintManager$CryptoObject" since="23" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/Signature;)V"/>
-		<method name="&lt;init>(Ljavax/crypto/Cipher;)V"/>
-		<method name="&lt;init>(Ljavax/crypto/Mac;)V"/>
-		<method name="getCipher()Ljavax/crypto/Cipher;"/>
-		<method name="getMac()Ljavax/crypto/Mac;"/>
-		<method name="getSignature()Ljava/security/Signature;"/>
-	</class>
-	<class name="android/hardware/input/InputManager" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInputDevice(I)Landroid/view/InputDevice;"/>
-		<method name="getInputDeviceIds()[I"/>
-		<method name="registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V"/>
-		<method name="unregisterInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;)V"/>
-		<field name="ACTION_QUERY_KEYBOARD_LAYOUTS"/>
-		<field name="META_DATA_KEYBOARD_LAYOUTS"/>
-	</class>
-	<class name="android/hardware/input/InputManager$InputDeviceListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onInputDeviceAdded(I)V"/>
-		<method name="onInputDeviceChanged(I)V"/>
-		<method name="onInputDeviceRemoved(I)V"/>
-	</class>
-	<class name="android/hardware/location/GeofenceHardware" since="18" removed="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addGeofence(IILandroid/hardware/location/GeofenceHardwareRequest;Landroid/hardware/location/GeofenceHardwareCallback;)Z"/>
-		<method name="getMonitoringTypes()[I"/>
-		<method name="getStatusOfMonitoringType(I)I"/>
-		<method name="pauseGeofence(II)Z"/>
-		<method name="registerForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z"/>
-		<method name="removeGeofence(II)Z"/>
-		<method name="resumeGeofence(III)Z"/>
-		<method name="unregisterForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z"/>
-		<field name="GEOFENCE_ENTERED"/>
-		<field name="GEOFENCE_ERROR_ID_EXISTS"/>
-		<field name="GEOFENCE_ERROR_ID_UNKNOWN"/>
-		<field name="GEOFENCE_ERROR_INVALID_TRANSITION"/>
-		<field name="GEOFENCE_ERROR_TOO_MANY_GEOFENCES"/>
-		<field name="GEOFENCE_EXITED"/>
-		<field name="GEOFENCE_FAILURE"/>
-		<field name="GEOFENCE_SUCCESS"/>
-		<field name="GEOFENCE_UNCERTAIN"/>
-		<field name="MONITORING_TYPE_GPS_HARDWARE"/>
-		<field name="MONITOR_CURRENTLY_AVAILABLE"/>
-		<field name="MONITOR_CURRENTLY_UNAVAILABLE"/>
-		<field name="MONITOR_UNSUPPORTED"/>
-	</class>
-	<class name="android/hardware/location/GeofenceHardwareCallback" since="18" removed="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGeofenceAdd(II)V"/>
-		<method name="onGeofencePause(II)V"/>
-		<method name="onGeofenceRemove(II)V"/>
-		<method name="onGeofenceResume(II)V"/>
-		<method name="onGeofenceTransition(IILandroid/location/Location;JI)V"/>
-	</class>
-	<class name="android/hardware/location/GeofenceHardwareMonitorCallback" since="18" removed="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onMonitoringSystemChange(IZLandroid/location/Location;)V"/>
-	</class>
-	<class name="android/hardware/location/GeofenceHardwareRequest" since="18" removed="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createCircularGeofence(DDD)Landroid/hardware/location/GeofenceHardwareRequest;"/>
-		<method name="getLastTransition()I"/>
-		<method name="getLatitude()D"/>
-		<method name="getLongitude()D"/>
-		<method name="getMonitorTransitions()I"/>
-		<method name="getNotificationResponsiveness()I"/>
-		<method name="getRadius()D"/>
-		<method name="getUnknownTimer()I"/>
-		<method name="setLastTransition(I)V"/>
-		<method name="setMonitorTransitions(I)V"/>
-		<method name="setNotificationResponsiveness(I)V"/>
-		<method name="setUnknownTimer(I)V"/>
-	</class>
-	<class name="android/hardware/usb/UsbAccessory" since="12">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([Ljava/lang/String;)V" since="29"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getManufacturer()Ljava/lang/String;"/>
-		<method name="getModel()Ljava/lang/String;"/>
-		<method name="getSerial()Ljava/lang/String;"/>
-		<method name="getUri()Ljava/lang/String;"/>
-		<method name="getVersion()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/hardware/usb/UsbConfiguration" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;II)V" since="29"/>
-		<method name="getId()I"/>
-		<method name="getInterface(I)Landroid/hardware/usb/UsbInterface;"/>
-		<method name="getInterfaceCount()I"/>
-		<method name="getMaxPower()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="isRemoteWakeup()Z"/>
-		<method name="isSelfPowered()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/hardware/usb/UsbConstants" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="USB_CLASS_APP_SPEC"/>
-		<field name="USB_CLASS_AUDIO"/>
-		<field name="USB_CLASS_CDC_DATA"/>
-		<field name="USB_CLASS_COMM"/>
-		<field name="USB_CLASS_CONTENT_SEC"/>
-		<field name="USB_CLASS_CSCID"/>
-		<field name="USB_CLASS_HID"/>
-		<field name="USB_CLASS_HUB"/>
-		<field name="USB_CLASS_MASS_STORAGE"/>
-		<field name="USB_CLASS_MISC"/>
-		<field name="USB_CLASS_PER_INTERFACE"/>
-		<field name="USB_CLASS_PHYSICA"/>
-		<field name="USB_CLASS_PRINTER"/>
-		<field name="USB_CLASS_STILL_IMAGE"/>
-		<field name="USB_CLASS_VENDOR_SPEC"/>
-		<field name="USB_CLASS_VIDEO"/>
-		<field name="USB_CLASS_WIRELESS_CONTROLLER"/>
-		<field name="USB_DIR_IN"/>
-		<field name="USB_DIR_OUT"/>
-		<field name="USB_ENDPOINT_DIR_MASK"/>
-		<field name="USB_ENDPOINT_NUMBER_MASK"/>
-		<field name="USB_ENDPOINT_XFERTYPE_MASK"/>
-		<field name="USB_ENDPOINT_XFER_BULK"/>
-		<field name="USB_ENDPOINT_XFER_CONTROL"/>
-		<field name="USB_ENDPOINT_XFER_INT"/>
-		<field name="USB_ENDPOINT_XFER_ISOC"/>
-		<field name="USB_INTERFACE_SUBCLASS_BOOT"/>
-		<field name="USB_SUBCLASS_VENDOR_SPEC"/>
-		<field name="USB_TYPE_CLASS"/>
-		<field name="USB_TYPE_MASK"/>
-		<field name="USB_TYPE_RESERVED"/>
-		<field name="USB_TYPE_STANDARD"/>
-		<field name="USB_TYPE_VENDOR"/>
-	</class>
-	<class name="android/hardware/usb/UsbDevice" since="12">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="getConfiguration(I)Landroid/hardware/usb/UsbConfiguration;" since="21"/>
-		<method name="getConfigurationCount()I" since="21"/>
-		<method name="getDeviceClass()I"/>
-		<method name="getDeviceId()I"/>
-		<method name="getDeviceId(Ljava/lang/String;)I"/>
-		<method name="getDeviceName()Ljava/lang/String;"/>
-		<method name="getDeviceName(I)Ljava/lang/String;"/>
-		<method name="getDeviceProtocol()I"/>
-		<method name="getDeviceSubclass()I"/>
-		<method name="getInterface(I)Landroid/hardware/usb/UsbInterface;"/>
-		<method name="getInterfaceCount()I"/>
-		<method name="getManufacturerName()Ljava/lang/String;" since="21"/>
-		<method name="getProductId()I"/>
-		<method name="getProductName()Ljava/lang/String;" since="21"/>
-		<method name="getSerialNumber()Ljava/lang/String;" since="21"/>
-		<method name="getVendorId()I"/>
-		<method name="getVersion()Ljava/lang/String;" since="23"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/hardware/usb/UsbDeviceConnection" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/hardware/usb/UsbDevice;)V" since="29"/>
-		<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BII)I"/>
-		<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BIII)I" since="18"/>
-		<method name="claimInterface(Landroid/hardware/usb/UsbInterface;Z)Z"/>
-		<method name="close()V"/>
-		<method name="controlTransfer(IIII[BII)I"/>
-		<method name="controlTransfer(IIII[BIII)I" since="18"/>
-		<method name="getFileDescriptor()I"/>
-		<method name="getRawDescriptors()[B" since="13"/>
-		<method name="getSerial()Ljava/lang/String;"/>
-		<method name="releaseInterface(Landroid/hardware/usb/UsbInterface;)Z"/>
-		<method name="requestWait()Landroid/hardware/usb/UsbRequest;"/>
-		<method name="requestWait(J)Landroid/hardware/usb/UsbRequest;" since="26"/>
-		<method name="setConfiguration(Landroid/hardware/usb/UsbConfiguration;)Z" since="21"/>
-		<method name="setInterface(Landroid/hardware/usb/UsbInterface;)Z" since="21"/>
-	</class>
-	<class name="android/hardware/usb/UsbEndpoint" since="12">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="getAddress()I"/>
-		<method name="getAttributes()I"/>
-		<method name="getDirection()I"/>
-		<method name="getEndpointNumber()I"/>
-		<method name="getInterval()I"/>
-		<method name="getMaxPacketSize()I"/>
-		<method name="getType()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/hardware/usb/UsbInterface" since="12">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IILjava/lang/String;III)V" since="29"/>
-		<method name="getAlternateSetting()I" since="21"/>
-		<method name="getEndpoint(I)Landroid/hardware/usb/UsbEndpoint;"/>
-		<method name="getEndpointCount()I"/>
-		<method name="getId()I"/>
-		<method name="getInterfaceClass()I"/>
-		<method name="getInterfaceProtocol()I"/>
-		<method name="getInterfaceSubclass()I"/>
-		<method name="getName()Ljava/lang/String;" since="21"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/hardware/usb/UsbManager" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAccessoryList()[Landroid/hardware/usb/UsbAccessory;"/>
-		<method name="getDeviceList()Ljava/util/HashMap;"/>
-		<method name="hasPermission(Landroid/hardware/usb/UsbAccessory;)Z"/>
-		<method name="hasPermission(Landroid/hardware/usb/UsbDevice;)Z"/>
-		<method name="openAccessory(Landroid/hardware/usb/UsbAccessory;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="openDevice(Landroid/hardware/usb/UsbDevice;)Landroid/hardware/usb/UsbDeviceConnection;"/>
-		<method name="requestPermission(Landroid/hardware/usb/UsbAccessory;Landroid/app/PendingIntent;)V"/>
-		<method name="requestPermission(Landroid/hardware/usb/UsbDevice;Landroid/app/PendingIntent;)V"/>
-		<field name="ACTION_USB_ACCESSORY_ATTACHED"/>
-		<field name="ACTION_USB_ACCESSORY_DETACHED"/>
-		<field name="ACTION_USB_DEVICE_ATTACHED"/>
-		<field name="ACTION_USB_DEVICE_DETACHED"/>
-		<field name="EXTRA_ACCESSORY"/>
-		<field name="EXTRA_DEVICE"/>
-		<field name="EXTRA_PERMISSION_GRANTED"/>
-	</class>
-	<class name="android/hardware/usb/UsbRequest" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()Z"/>
-		<method name="close()V"/>
-		<method name="getClientData()Ljava/lang/Object;"/>
-		<method name="getEndpoint()Landroid/hardware/usb/UsbEndpoint;"/>
-		<method name="initialize(Landroid/hardware/usb/UsbDeviceConnection;Landroid/hardware/usb/UsbEndpoint;)Z"/>
-		<method name="queue(Ljava/nio/ByteBuffer;)Z" since="26"/>
-		<method name="queue(Ljava/nio/ByteBuffer;I)Z" deprecated="26"/>
-		<method name="setClientData(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/icu/lang/UCharacter" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/lang/UCharacterEnums$ECharacterCategory"/>
-		<implements name="android/icu/lang/UCharacterEnums$ECharacterDirection"/>
-		<method name="&lt;init>()V"/>
-		<method name="charCount(I)I"/>
-		<method name="codePointAt(Ljava/lang/CharSequence;I)I"/>
-		<method name="codePointAt([CI)I"/>
-		<method name="codePointAt([CII)I"/>
-		<method name="codePointBefore(Ljava/lang/CharSequence;I)I"/>
-		<method name="codePointBefore([CI)I"/>
-		<method name="codePointBefore([CII)I"/>
-		<method name="codePointCount(Ljava/lang/CharSequence;II)I"/>
-		<method name="codePointCount([CII)I"/>
-		<method name="digit(I)I"/>
-		<method name="digit(II)I"/>
-		<method name="foldCase(II)I"/>
-		<method name="foldCase(IZ)I"/>
-		<method name="foldCase(Ljava/lang/String;I)Ljava/lang/String;"/>
-		<method name="foldCase(Ljava/lang/String;Z)Ljava/lang/String;"/>
-		<method name="forDigit(II)C"/>
-		<method name="getAge(I)Landroid/icu/util/VersionInfo;"/>
-		<method name="getBidiPairedBracket(I)I"/>
-		<method name="getCharFromExtendedName(Ljava/lang/String;)I"/>
-		<method name="getCharFromName(Ljava/lang/String;)I"/>
-		<method name="getCharFromNameAlias(Ljava/lang/String;)I"/>
-		<method name="getCodePoint(C)I"/>
-		<method name="getCodePoint(CC)I"/>
-		<method name="getCombiningClass(I)I"/>
-		<method name="getDirection(I)I"/>
-		<method name="getDirectionality(I)B"/>
-		<method name="getExtendedName(I)Ljava/lang/String;"/>
-		<method name="getExtendedNameIterator()Landroid/icu/util/ValueIterator;"/>
-		<method name="getHanNumericValue(I)I"/>
-		<method name="getIntPropertyMaxValue(I)I"/>
-		<method name="getIntPropertyMinValue(I)I"/>
-		<method name="getIntPropertyValue(II)I"/>
-		<method name="getMirror(I)I"/>
-		<method name="getName(I)Ljava/lang/String;"/>
-		<method name="getName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getNameAlias(I)Ljava/lang/String;"/>
-		<method name="getNameIterator()Landroid/icu/util/ValueIterator;"/>
-		<method name="getNumericValue(I)I"/>
-		<method name="getPropertyEnum(Ljava/lang/CharSequence;)I"/>
-		<method name="getPropertyName(II)Ljava/lang/String;"/>
-		<method name="getPropertyValueEnum(ILjava/lang/CharSequence;)I"/>
-		<method name="getPropertyValueName(III)Ljava/lang/String;"/>
-		<method name="getType(I)I"/>
-		<method name="getTypeIterator()Landroid/icu/util/RangeValueIterator;"/>
-		<method name="getUnicodeNumericValue(I)D"/>
-		<method name="getUnicodeVersion()Landroid/icu/util/VersionInfo;"/>
-		<method name="hasBinaryProperty(II)Z"/>
-		<method name="isBMP(I)Z"/>
-		<method name="isBaseForm(I)Z"/>
-		<method name="isDefined(I)Z"/>
-		<method name="isDigit(I)Z"/>
-		<method name="isHighSurrogate(C)Z"/>
-		<method name="isISOControl(I)Z"/>
-		<method name="isIdentifierIgnorable(I)Z"/>
-		<method name="isJavaIdentifierPart(I)Z"/>
-		<method name="isJavaIdentifierStart(I)Z"/>
-		<method name="isLegal(I)Z"/>
-		<method name="isLegal(Ljava/lang/String;)Z"/>
-		<method name="isLetter(I)Z"/>
-		<method name="isLetterOrDigit(I)Z"/>
-		<method name="isLowSurrogate(C)Z"/>
-		<method name="isLowerCase(I)Z"/>
-		<method name="isMirrored(I)Z"/>
-		<method name="isPrintable(I)Z"/>
-		<method name="isSpaceChar(I)Z"/>
-		<method name="isSupplementary(I)Z"/>
-		<method name="isSupplementaryCodePoint(I)Z"/>
-		<method name="isSurrogatePair(CC)Z"/>
-		<method name="isTitleCase(I)Z"/>
-		<method name="isUAlphabetic(I)Z"/>
-		<method name="isULowercase(I)Z"/>
-		<method name="isUUppercase(I)Z"/>
-		<method name="isUWhiteSpace(I)Z"/>
-		<method name="isUnicodeIdentifierPart(I)Z"/>
-		<method name="isUnicodeIdentifierStart(I)Z"/>
-		<method name="isUpperCase(I)Z"/>
-		<method name="isValidCodePoint(I)Z"/>
-		<method name="isWhitespace(I)Z"/>
-		<method name="offsetByCodePoints(Ljava/lang/CharSequence;II)I"/>
-		<method name="offsetByCodePoints([CIIII)I"/>
-		<method name="toChars(I)[C"/>
-		<method name="toChars(I[CI)I"/>
-		<method name="toCodePoint(CC)I"/>
-		<method name="toLowerCase(I)I"/>
-		<method name="toLowerCase(Landroid/icu/util/ULocale;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toLowerCase(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toLowerCase(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<method name="toTitleCase(I)I"/>
-		<method name="toTitleCase(Landroid/icu/util/ULocale;Ljava/lang/String;Landroid/icu/text/BreakIterator;)Ljava/lang/String;"/>
-		<method name="toTitleCase(Landroid/icu/util/ULocale;Ljava/lang/String;Landroid/icu/text/BreakIterator;I)Ljava/lang/String;"/>
-		<method name="toTitleCase(Ljava/lang/String;Landroid/icu/text/BreakIterator;)Ljava/lang/String;"/>
-		<method name="toTitleCase(Ljava/util/Locale;Ljava/lang/String;Landroid/icu/text/BreakIterator;)Ljava/lang/String;"/>
-		<method name="toTitleCase(Ljava/util/Locale;Ljava/lang/String;Landroid/icu/text/BreakIterator;I)Ljava/lang/String;"/>
-		<method name="toUpperCase(I)I"/>
-		<method name="toUpperCase(Landroid/icu/util/ULocale;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toUpperCase(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toUpperCase(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="FOLD_CASE_DEFAULT"/>
-		<field name="FOLD_CASE_EXCLUDE_SPECIAL_I"/>
-		<field name="MAX_CODE_POINT"/>
-		<field name="MAX_HIGH_SURROGATE"/>
-		<field name="MAX_LOW_SURROGATE"/>
-		<field name="MAX_RADIX"/>
-		<field name="MAX_SURROGATE"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_CODE_POINT"/>
-		<field name="MIN_HIGH_SURROGATE"/>
-		<field name="MIN_LOW_SURROGATE"/>
-		<field name="MIN_RADIX"/>
-		<field name="MIN_SUPPLEMENTARY_CODE_POINT"/>
-		<field name="MIN_SURROGATE"/>
-		<field name="MIN_VALUE"/>
-		<field name="NO_NUMERIC_VALUE"/>
-		<field name="REPLACEMENT_CHAR"/>
-		<field name="SUPPLEMENTARY_MIN_VALUE"/>
-		<field name="TITLECASE_NO_BREAK_ADJUSTMENT"/>
-		<field name="TITLECASE_NO_LOWERCASE"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$BidiPairedBracketType" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="CLOSE"/>
-		<field name="NONE"/>
-		<field name="OPEN"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$DecompositionType" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="CANONICAL"/>
-		<field name="CIRCLE"/>
-		<field name="COMPAT"/>
-		<field name="FINAL"/>
-		<field name="FONT"/>
-		<field name="FRACTION"/>
-		<field name="INITIAL"/>
-		<field name="ISOLATED"/>
-		<field name="MEDIAL"/>
-		<field name="NARROW"/>
-		<field name="NOBREAK"/>
-		<field name="NONE"/>
-		<field name="SMALL"/>
-		<field name="SQUARE"/>
-		<field name="SUB"/>
-		<field name="SUPER"/>
-		<field name="VERTICAL"/>
-		<field name="WIDE"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$EastAsianWidth" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="AMBIGUOUS"/>
-		<field name="FULLWIDTH"/>
-		<field name="HALFWIDTH"/>
-		<field name="NARROW"/>
-		<field name="NEUTRAL"/>
-		<field name="WIDE"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$GraphemeClusterBreak" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="CONTROL"/>
-		<field name="CR"/>
-		<field name="EXTEND"/>
-		<field name="E_BASE" since="26"/>
-		<field name="E_BASE_GAZ" since="26"/>
-		<field name="E_MODIFIER" since="26"/>
-		<field name="GLUE_AFTER_ZWJ" since="26"/>
-		<field name="L"/>
-		<field name="LF"/>
-		<field name="LV"/>
-		<field name="LVT"/>
-		<field name="OTHER"/>
-		<field name="PREPEND"/>
-		<field name="REGIONAL_INDICATOR"/>
-		<field name="SPACING_MARK"/>
-		<field name="T"/>
-		<field name="V"/>
-		<field name="ZWJ" since="26"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$HangulSyllableType" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="LEADING_JAMO"/>
-		<field name="LVT_SYLLABLE"/>
-		<field name="LV_SYLLABLE"/>
-		<field name="NOT_APPLICABLE"/>
-		<field name="TRAILING_JAMO"/>
-		<field name="VOWEL_JAMO"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$JoiningGroup" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="AFRICAN_FEH" since="26"/>
-		<field name="AFRICAN_NOON" since="26"/>
-		<field name="AFRICAN_QAF" since="26"/>
-		<field name="AIN"/>
-		<field name="ALAPH"/>
-		<field name="ALEF"/>
-		<field name="BEH"/>
-		<field name="BETH"/>
-		<field name="BURUSHASKI_YEH_BARREE"/>
-		<field name="DAL"/>
-		<field name="DALATH_RISH"/>
-		<field name="E"/>
-		<field name="FARSI_YEH"/>
-		<field name="FE"/>
-		<field name="FEH"/>
-		<field name="FINAL_SEMKATH"/>
-		<field name="GAF"/>
-		<field name="GAMAL"/>
-		<field name="HAH"/>
-		<field name="HAMZA_ON_HEH_GOAL"/>
-		<field name="HANIFI_ROHINGYA_KINNA_YA" since="29"/>
-		<field name="HANIFI_ROHINGYA_PA" since="29"/>
-		<field name="HE"/>
-		<field name="HEH"/>
-		<field name="HEH_GOAL"/>
-		<field name="HETH"/>
-		<field name="KAF"/>
-		<field name="KAPH"/>
-		<field name="KHAPH"/>
-		<field name="KNOTTED_HEH"/>
-		<field name="LAM"/>
-		<field name="LAMADH"/>
-		<field name="MALAYALAM_BHA" since="28"/>
-		<field name="MALAYALAM_JA" since="28"/>
-		<field name="MALAYALAM_LLA" since="28"/>
-		<field name="MALAYALAM_LLLA" since="28"/>
-		<field name="MALAYALAM_NGA" since="28"/>
-		<field name="MALAYALAM_NNA" since="28"/>
-		<field name="MALAYALAM_NNNA" since="28"/>
-		<field name="MALAYALAM_NYA" since="28"/>
-		<field name="MALAYALAM_RA" since="28"/>
-		<field name="MALAYALAM_SSA" since="28"/>
-		<field name="MALAYALAM_TTA" since="28"/>
-		<field name="MANICHAEAN_ALEPH"/>
-		<field name="MANICHAEAN_AYIN"/>
-		<field name="MANICHAEAN_BETH"/>
-		<field name="MANICHAEAN_DALETH"/>
-		<field name="MANICHAEAN_DHAMEDH"/>
-		<field name="MANICHAEAN_FIVE"/>
-		<field name="MANICHAEAN_GIMEL"/>
-		<field name="MANICHAEAN_HETH"/>
-		<field name="MANICHAEAN_HUNDRED"/>
-		<field name="MANICHAEAN_KAPH"/>
-		<field name="MANICHAEAN_LAMEDH"/>
-		<field name="MANICHAEAN_MEM"/>
-		<field name="MANICHAEAN_NUN"/>
-		<field name="MANICHAEAN_ONE"/>
-		<field name="MANICHAEAN_PE"/>
-		<field name="MANICHAEAN_QOPH"/>
-		<field name="MANICHAEAN_RESH"/>
-		<field name="MANICHAEAN_SADHE"/>
-		<field name="MANICHAEAN_SAMEKH"/>
-		<field name="MANICHAEAN_TAW"/>
-		<field name="MANICHAEAN_TEN"/>
-		<field name="MANICHAEAN_TETH"/>
-		<field name="MANICHAEAN_THAMEDH"/>
-		<field name="MANICHAEAN_TWENTY"/>
-		<field name="MANICHAEAN_WAW"/>
-		<field name="MANICHAEAN_YODH"/>
-		<field name="MANICHAEAN_ZAYIN"/>
-		<field name="MEEM"/>
-		<field name="MIM"/>
-		<field name="NOON"/>
-		<field name="NO_JOINING_GROUP"/>
-		<field name="NUN"/>
-		<field name="NYA"/>
-		<field name="PE"/>
-		<field name="QAF"/>
-		<field name="QAPH"/>
-		<field name="REH"/>
-		<field name="REVERSED_PE"/>
-		<field name="ROHINGYA_YEH"/>
-		<field name="SAD"/>
-		<field name="SADHE"/>
-		<field name="SEEN"/>
-		<field name="SEMKATH"/>
-		<field name="SHIN"/>
-		<field name="STRAIGHT_WAW"/>
-		<field name="SWASH_KAF"/>
-		<field name="SYRIAC_WAW"/>
-		<field name="TAH"/>
-		<field name="TAW"/>
-		<field name="TEH_MARBUTA"/>
-		<field name="TEH_MARBUTA_GOAL"/>
-		<field name="TETH"/>
-		<field name="WAW"/>
-		<field name="YEH"/>
-		<field name="YEH_BARREE"/>
-		<field name="YEH_WITH_TAIL"/>
-		<field name="YUDH"/>
-		<field name="YUDH_HE"/>
-		<field name="ZAIN"/>
-		<field name="ZHAIN"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$JoiningType" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="DUAL_JOINING"/>
-		<field name="JOIN_CAUSING"/>
-		<field name="LEFT_JOINING"/>
-		<field name="NON_JOINING"/>
-		<field name="RIGHT_JOINING"/>
-		<field name="TRANSPARENT"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$LineBreak" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="ALPHABETIC"/>
-		<field name="AMBIGUOUS"/>
-		<field name="BREAK_AFTER"/>
-		<field name="BREAK_BEFORE"/>
-		<field name="BREAK_BOTH"/>
-		<field name="BREAK_SYMBOLS"/>
-		<field name="CARRIAGE_RETURN"/>
-		<field name="CLOSE_PARENTHESIS"/>
-		<field name="CLOSE_PUNCTUATION"/>
-		<field name="COMBINING_MARK"/>
-		<field name="COMPLEX_CONTEXT"/>
-		<field name="CONDITIONAL_JAPANESE_STARTER"/>
-		<field name="CONTINGENT_BREAK"/>
-		<field name="EXCLAMATION"/>
-		<field name="E_BASE" since="26"/>
-		<field name="E_MODIFIER" since="26"/>
-		<field name="GLUE"/>
-		<field name="H2"/>
-		<field name="H3"/>
-		<field name="HEBREW_LETTER"/>
-		<field name="HYPHEN"/>
-		<field name="IDEOGRAPHIC"/>
-		<field name="INFIX_NUMERIC"/>
-		<field name="INSEPARABLE"/>
-		<field name="INSEPERABLE"/>
-		<field name="JL"/>
-		<field name="JT"/>
-		<field name="JV"/>
-		<field name="LINE_FEED"/>
-		<field name="MANDATORY_BREAK"/>
-		<field name="NEXT_LINE"/>
-		<field name="NONSTARTER"/>
-		<field name="NUMERIC"/>
-		<field name="OPEN_PUNCTUATION"/>
-		<field name="POSTFIX_NUMERIC"/>
-		<field name="PREFIX_NUMERIC"/>
-		<field name="QUOTATION"/>
-		<field name="REGIONAL_INDICATOR"/>
-		<field name="SPACE"/>
-		<field name="SURROGATE"/>
-		<field name="UNKNOWN"/>
-		<field name="WORD_JOINER"/>
-		<field name="ZWJ" since="26"/>
-		<field name="ZWSPACE"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$NumericType" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="DECIMAL"/>
-		<field name="DIGIT"/>
-		<field name="NONE"/>
-		<field name="NUMERIC"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$SentenceBreak" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="ATERM"/>
-		<field name="CLOSE"/>
-		<field name="CR"/>
-		<field name="EXTEND"/>
-		<field name="FORMAT"/>
-		<field name="LF"/>
-		<field name="LOWER"/>
-		<field name="NUMERIC"/>
-		<field name="OLETTER"/>
-		<field name="OTHER"/>
-		<field name="SCONTINUE"/>
-		<field name="SEP"/>
-		<field name="SP"/>
-		<field name="STERM"/>
-		<field name="UPPER"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$UnicodeBlock" since="24">
-		<extends name="java/lang/Character$Subset"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
-		<method name="forName(Ljava/lang/String;)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
-		<method name="getID()I"/>
-		<method name="getInstance(I)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
-		<method name="of(I)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
-		<field name="ADLAM" since="26"/>
-		<field name="ADLAM_ID" since="26"/>
-		<field name="AEGEAN_NUMBERS"/>
-		<field name="AEGEAN_NUMBERS_ID"/>
-		<field name="AHOM"/>
-		<field name="AHOM_ID"/>
-		<field name="ALCHEMICAL_SYMBOLS"/>
-		<field name="ALCHEMICAL_SYMBOLS_ID"/>
-		<field name="ALPHABETIC_PRESENTATION_FORMS"/>
-		<field name="ALPHABETIC_PRESENTATION_FORMS_ID"/>
-		<field name="ANATOLIAN_HIEROGLYPHS"/>
-		<field name="ANATOLIAN_HIEROGLYPHS_ID"/>
-		<field name="ANCIENT_GREEK_MUSICAL_NOTATION"/>
-		<field name="ANCIENT_GREEK_MUSICAL_NOTATION_ID"/>
-		<field name="ANCIENT_GREEK_NUMBERS"/>
-		<field name="ANCIENT_GREEK_NUMBERS_ID"/>
-		<field name="ANCIENT_SYMBOLS"/>
-		<field name="ANCIENT_SYMBOLS_ID"/>
-		<field name="ARABIC"/>
-		<field name="ARABIC_EXTENDED_A"/>
-		<field name="ARABIC_EXTENDED_A_ID"/>
-		<field name="ARABIC_ID"/>
-		<field name="ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS"/>
-		<field name="ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS_ID"/>
-		<field name="ARABIC_PRESENTATION_FORMS_A"/>
-		<field name="ARABIC_PRESENTATION_FORMS_A_ID"/>
-		<field name="ARABIC_PRESENTATION_FORMS_B"/>
-		<field name="ARABIC_PRESENTATION_FORMS_B_ID"/>
-		<field name="ARABIC_SUPPLEMENT"/>
-		<field name="ARABIC_SUPPLEMENT_ID"/>
-		<field name="ARMENIAN"/>
-		<field name="ARMENIAN_ID"/>
-		<field name="ARROWS"/>
-		<field name="ARROWS_ID"/>
-		<field name="AVESTAN"/>
-		<field name="AVESTAN_ID"/>
-		<field name="BALINESE"/>
-		<field name="BALINESE_ID"/>
-		<field name="BAMUM"/>
-		<field name="BAMUM_ID"/>
-		<field name="BAMUM_SUPPLEMENT"/>
-		<field name="BAMUM_SUPPLEMENT_ID"/>
-		<field name="BASIC_LATIN"/>
-		<field name="BASIC_LATIN_ID"/>
-		<field name="BASSA_VAH"/>
-		<field name="BASSA_VAH_ID"/>
-		<field name="BATAK"/>
-		<field name="BATAK_ID"/>
-		<field name="BENGALI"/>
-		<field name="BENGALI_ID"/>
-		<field name="BHAIKSUKI" since="26"/>
-		<field name="BHAIKSUKI_ID" since="26"/>
-		<field name="BLOCK_ELEMENTS"/>
-		<field name="BLOCK_ELEMENTS_ID"/>
-		<field name="BOPOMOFO"/>
-		<field name="BOPOMOFO_EXTENDED"/>
-		<field name="BOPOMOFO_EXTENDED_ID"/>
-		<field name="BOPOMOFO_ID"/>
-		<field name="BOX_DRAWING"/>
-		<field name="BOX_DRAWING_ID"/>
-		<field name="BRAHMI"/>
-		<field name="BRAHMI_ID"/>
-		<field name="BRAILLE_PATTERNS"/>
-		<field name="BRAILLE_PATTERNS_ID"/>
-		<field name="BUGINESE"/>
-		<field name="BUGINESE_ID"/>
-		<field name="BUHID"/>
-		<field name="BUHID_ID"/>
-		<field name="BYZANTINE_MUSICAL_SYMBOLS"/>
-		<field name="BYZANTINE_MUSICAL_SYMBOLS_ID"/>
-		<field name="CARIAN"/>
-		<field name="CARIAN_ID"/>
-		<field name="CAUCASIAN_ALBANIAN"/>
-		<field name="CAUCASIAN_ALBANIAN_ID"/>
-		<field name="CHAKMA"/>
-		<field name="CHAKMA_ID"/>
-		<field name="CHAM"/>
-		<field name="CHAM_ID"/>
-		<field name="CHEROKEE"/>
-		<field name="CHEROKEE_ID"/>
-		<field name="CHEROKEE_SUPPLEMENT"/>
-		<field name="CHEROKEE_SUPPLEMENT_ID"/>
-		<field name="CHESS_SYMBOLS" since="29"/>
-		<field name="CHESS_SYMBOLS_ID" since="29"/>
-		<field name="CJK_COMPATIBILITY"/>
-		<field name="CJK_COMPATIBILITY_FORMS"/>
-		<field name="CJK_COMPATIBILITY_FORMS_ID"/>
-		<field name="CJK_COMPATIBILITY_ID"/>
-		<field name="CJK_COMPATIBILITY_IDEOGRAPHS"/>
-		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_ID"/>
-		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT"/>
-		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT_ID"/>
-		<field name="CJK_RADICALS_SUPPLEMENT"/>
-		<field name="CJK_RADICALS_SUPPLEMENT_ID"/>
-		<field name="CJK_STROKES"/>
-		<field name="CJK_STROKES_ID"/>
-		<field name="CJK_SYMBOLS_AND_PUNCTUATION"/>
-		<field name="CJK_SYMBOLS_AND_PUNCTUATION_ID"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A_ID"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B_ID"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C_ID"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D_ID"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E_ID"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F" since="28"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F_ID" since="28"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_ID"/>
-		<field name="COMBINING_DIACRITICAL_MARKS"/>
-		<field name="COMBINING_DIACRITICAL_MARKS_EXTENDED"/>
-		<field name="COMBINING_DIACRITICAL_MARKS_EXTENDED_ID"/>
-		<field name="COMBINING_DIACRITICAL_MARKS_ID"/>
-		<field name="COMBINING_DIACRITICAL_MARKS_SUPPLEMENT"/>
-		<field name="COMBINING_DIACRITICAL_MARKS_SUPPLEMENT_ID"/>
-		<field name="COMBINING_HALF_MARKS"/>
-		<field name="COMBINING_HALF_MARKS_ID"/>
-		<field name="COMBINING_MARKS_FOR_SYMBOLS"/>
-		<field name="COMBINING_MARKS_FOR_SYMBOLS_ID"/>
-		<field name="COMMON_INDIC_NUMBER_FORMS"/>
-		<field name="COMMON_INDIC_NUMBER_FORMS_ID"/>
-		<field name="CONTROL_PICTURES"/>
-		<field name="CONTROL_PICTURES_ID"/>
-		<field name="COPTIC"/>
-		<field name="COPTIC_EPACT_NUMBERS"/>
-		<field name="COPTIC_EPACT_NUMBERS_ID"/>
-		<field name="COPTIC_ID"/>
-		<field name="COUNTING_ROD_NUMERALS"/>
-		<field name="COUNTING_ROD_NUMERALS_ID"/>
-		<field name="CUNEIFORM"/>
-		<field name="CUNEIFORM_ID"/>
-		<field name="CUNEIFORM_NUMBERS_AND_PUNCTUATION"/>
-		<field name="CUNEIFORM_NUMBERS_AND_PUNCTUATION_ID"/>
-		<field name="CURRENCY_SYMBOLS"/>
-		<field name="CURRENCY_SYMBOLS_ID"/>
-		<field name="CYPRIOT_SYLLABARY"/>
-		<field name="CYPRIOT_SYLLABARY_ID"/>
-		<field name="CYRILLIC"/>
-		<field name="CYRILLIC_EXTENDED_A"/>
-		<field name="CYRILLIC_EXTENDED_A_ID"/>
-		<field name="CYRILLIC_EXTENDED_B"/>
-		<field name="CYRILLIC_EXTENDED_B_ID"/>
-		<field name="CYRILLIC_EXTENDED_C" since="26"/>
-		<field name="CYRILLIC_EXTENDED_C_ID" since="26"/>
-		<field name="CYRILLIC_ID"/>
-		<field name="CYRILLIC_SUPPLEMENT"/>
-		<field name="CYRILLIC_SUPPLEMENTARY"/>
-		<field name="CYRILLIC_SUPPLEMENTARY_ID"/>
-		<field name="CYRILLIC_SUPPLEMENT_ID"/>
-		<field name="DESERET"/>
-		<field name="DESERET_ID"/>
-		<field name="DEVANAGARI"/>
-		<field name="DEVANAGARI_EXTENDED"/>
-		<field name="DEVANAGARI_EXTENDED_ID"/>
-		<field name="DEVANAGARI_ID"/>
-		<field name="DINGBATS"/>
-		<field name="DINGBATS_ID"/>
-		<field name="DOGRA" since="29"/>
-		<field name="DOGRA_ID" since="29"/>
-		<field name="DOMINO_TILES"/>
-		<field name="DOMINO_TILES_ID"/>
-		<field name="DUPLOYAN"/>
-		<field name="DUPLOYAN_ID"/>
-		<field name="EARLY_DYNASTIC_CUNEIFORM"/>
-		<field name="EARLY_DYNASTIC_CUNEIFORM_ID"/>
-		<field name="EGYPTIAN_HIEROGLYPHS"/>
-		<field name="EGYPTIAN_HIEROGLYPHS_ID"/>
-		<field name="ELBASAN"/>
-		<field name="ELBASAN_ID"/>
-		<field name="EMOTICONS"/>
-		<field name="EMOTICONS_ID"/>
-		<field name="ENCLOSED_ALPHANUMERICS"/>
-		<field name="ENCLOSED_ALPHANUMERICS_ID"/>
-		<field name="ENCLOSED_ALPHANUMERIC_SUPPLEMENT"/>
-		<field name="ENCLOSED_ALPHANUMERIC_SUPPLEMENT_ID"/>
-		<field name="ENCLOSED_CJK_LETTERS_AND_MONTHS"/>
-		<field name="ENCLOSED_CJK_LETTERS_AND_MONTHS_ID"/>
-		<field name="ENCLOSED_IDEOGRAPHIC_SUPPLEMENT"/>
-		<field name="ENCLOSED_IDEOGRAPHIC_SUPPLEMENT_ID"/>
-		<field name="ETHIOPIC"/>
-		<field name="ETHIOPIC_EXTENDED"/>
-		<field name="ETHIOPIC_EXTENDED_A"/>
-		<field name="ETHIOPIC_EXTENDED_A_ID"/>
-		<field name="ETHIOPIC_EXTENDED_ID"/>
-		<field name="ETHIOPIC_ID"/>
-		<field name="ETHIOPIC_SUPPLEMENT"/>
-		<field name="ETHIOPIC_SUPPLEMENT_ID"/>
-		<field name="GENERAL_PUNCTUATION"/>
-		<field name="GENERAL_PUNCTUATION_ID"/>
-		<field name="GEOMETRIC_SHAPES"/>
-		<field name="GEOMETRIC_SHAPES_EXTENDED"/>
-		<field name="GEOMETRIC_SHAPES_EXTENDED_ID"/>
-		<field name="GEOMETRIC_SHAPES_ID"/>
-		<field name="GEORGIAN"/>
-		<field name="GEORGIAN_EXTENDED" since="29"/>
-		<field name="GEORGIAN_EXTENDED_ID" since="29"/>
-		<field name="GEORGIAN_ID"/>
-		<field name="GEORGIAN_SUPPLEMENT"/>
-		<field name="GEORGIAN_SUPPLEMENT_ID"/>
-		<field name="GLAGOLITIC"/>
-		<field name="GLAGOLITIC_ID"/>
-		<field name="GLAGOLITIC_SUPPLEMENT" since="26"/>
-		<field name="GLAGOLITIC_SUPPLEMENT_ID" since="26"/>
-		<field name="GOTHIC"/>
-		<field name="GOTHIC_ID"/>
-		<field name="GRANTHA"/>
-		<field name="GRANTHA_ID"/>
-		<field name="GREEK"/>
-		<field name="GREEK_EXTENDED"/>
-		<field name="GREEK_EXTENDED_ID"/>
-		<field name="GREEK_ID"/>
-		<field name="GUJARATI"/>
-		<field name="GUJARATI_ID"/>
-		<field name="GUNJALA_GONDI" since="29"/>
-		<field name="GUNJALA_GONDI_ID" since="29"/>
-		<field name="GURMUKHI"/>
-		<field name="GURMUKHI_ID"/>
-		<field name="HALFWIDTH_AND_FULLWIDTH_FORMS"/>
-		<field name="HALFWIDTH_AND_FULLWIDTH_FORMS_ID"/>
-		<field name="HANGUL_COMPATIBILITY_JAMO"/>
-		<field name="HANGUL_COMPATIBILITY_JAMO_ID"/>
-		<field name="HANGUL_JAMO"/>
-		<field name="HANGUL_JAMO_EXTENDED_A"/>
-		<field name="HANGUL_JAMO_EXTENDED_A_ID"/>
-		<field name="HANGUL_JAMO_EXTENDED_B"/>
-		<field name="HANGUL_JAMO_EXTENDED_B_ID"/>
-		<field name="HANGUL_JAMO_ID"/>
-		<field name="HANGUL_SYLLABLES"/>
-		<field name="HANGUL_SYLLABLES_ID"/>
-		<field name="HANIFI_ROHINGYA" since="29"/>
-		<field name="HANIFI_ROHINGYA_ID" since="29"/>
-		<field name="HANUNOO"/>
-		<field name="HANUNOO_ID"/>
-		<field name="HATRAN"/>
-		<field name="HATRAN_ID"/>
-		<field name="HEBREW"/>
-		<field name="HEBREW_ID"/>
-		<field name="HIGH_PRIVATE_USE_SURROGATES"/>
-		<field name="HIGH_PRIVATE_USE_SURROGATES_ID"/>
-		<field name="HIGH_SURROGATES"/>
-		<field name="HIGH_SURROGATES_ID"/>
-		<field name="HIRAGANA"/>
-		<field name="HIRAGANA_ID"/>
-		<field name="IDEOGRAPHIC_DESCRIPTION_CHARACTERS"/>
-		<field name="IDEOGRAPHIC_DESCRIPTION_CHARACTERS_ID"/>
-		<field name="IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION" since="26"/>
-		<field name="IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION_ID" since="26"/>
-		<field name="IMPERIAL_ARAMAIC"/>
-		<field name="IMPERIAL_ARAMAIC_ID"/>
-		<field name="INDIC_SIYAQ_NUMBERS" since="29"/>
-		<field name="INDIC_SIYAQ_NUMBERS_ID" since="29"/>
-		<field name="INSCRIPTIONAL_PAHLAVI"/>
-		<field name="INSCRIPTIONAL_PAHLAVI_ID"/>
-		<field name="INSCRIPTIONAL_PARTHIAN"/>
-		<field name="INSCRIPTIONAL_PARTHIAN_ID"/>
-		<field name="INVALID_CODE"/>
-		<field name="INVALID_CODE_ID"/>
-		<field name="IPA_EXTENSIONS"/>
-		<field name="IPA_EXTENSIONS_ID"/>
-		<field name="JAVANESE"/>
-		<field name="JAVANESE_ID"/>
-		<field name="KAITHI"/>
-		<field name="KAITHI_ID"/>
-		<field name="KANA_EXTENDED_A" since="28"/>
-		<field name="KANA_EXTENDED_A_ID" since="28"/>
-		<field name="KANA_SUPPLEMENT"/>
-		<field name="KANA_SUPPLEMENT_ID"/>
-		<field name="KANBUN"/>
-		<field name="KANBUN_ID"/>
-		<field name="KANGXI_RADICALS"/>
-		<field name="KANGXI_RADICALS_ID"/>
-		<field name="KANNADA"/>
-		<field name="KANNADA_ID"/>
-		<field name="KATAKANA"/>
-		<field name="KATAKANA_ID"/>
-		<field name="KATAKANA_PHONETIC_EXTENSIONS"/>
-		<field name="KATAKANA_PHONETIC_EXTENSIONS_ID"/>
-		<field name="KAYAH_LI"/>
-		<field name="KAYAH_LI_ID"/>
-		<field name="KHAROSHTHI"/>
-		<field name="KHAROSHTHI_ID"/>
-		<field name="KHMER"/>
-		<field name="KHMER_ID"/>
-		<field name="KHMER_SYMBOLS"/>
-		<field name="KHMER_SYMBOLS_ID"/>
-		<field name="KHOJKI"/>
-		<field name="KHOJKI_ID"/>
-		<field name="KHUDAWADI"/>
-		<field name="KHUDAWADI_ID"/>
-		<field name="LAO"/>
-		<field name="LAO_ID"/>
-		<field name="LATIN_1_SUPPLEMENT"/>
-		<field name="LATIN_1_SUPPLEMENT_ID"/>
-		<field name="LATIN_EXTENDED_A"/>
-		<field name="LATIN_EXTENDED_ADDITIONAL"/>
-		<field name="LATIN_EXTENDED_ADDITIONAL_ID"/>
-		<field name="LATIN_EXTENDED_A_ID"/>
-		<field name="LATIN_EXTENDED_B"/>
-		<field name="LATIN_EXTENDED_B_ID"/>
-		<field name="LATIN_EXTENDED_C"/>
-		<field name="LATIN_EXTENDED_C_ID"/>
-		<field name="LATIN_EXTENDED_D"/>
-		<field name="LATIN_EXTENDED_D_ID"/>
-		<field name="LATIN_EXTENDED_E"/>
-		<field name="LATIN_EXTENDED_E_ID"/>
-		<field name="LEPCHA"/>
-		<field name="LEPCHA_ID"/>
-		<field name="LETTERLIKE_SYMBOLS"/>
-		<field name="LETTERLIKE_SYMBOLS_ID"/>
-		<field name="LIMBU"/>
-		<field name="LIMBU_ID"/>
-		<field name="LINEAR_A"/>
-		<field name="LINEAR_A_ID"/>
-		<field name="LINEAR_B_IDEOGRAMS"/>
-		<field name="LINEAR_B_IDEOGRAMS_ID"/>
-		<field name="LINEAR_B_SYLLABARY"/>
-		<field name="LINEAR_B_SYLLABARY_ID"/>
-		<field name="LISU"/>
-		<field name="LISU_ID"/>
-		<field name="LOW_SURROGATES"/>
-		<field name="LOW_SURROGATES_ID"/>
-		<field name="LYCIAN"/>
-		<field name="LYCIAN_ID"/>
-		<field name="LYDIAN"/>
-		<field name="LYDIAN_ID"/>
-		<field name="MAHAJANI"/>
-		<field name="MAHAJANI_ID"/>
-		<field name="MAHJONG_TILES"/>
-		<field name="MAHJONG_TILES_ID"/>
-		<field name="MAKASAR" since="29"/>
-		<field name="MAKASAR_ID" since="29"/>
-		<field name="MALAYALAM"/>
-		<field name="MALAYALAM_ID"/>
-		<field name="MANDAIC"/>
-		<field name="MANDAIC_ID"/>
-		<field name="MANICHAEAN"/>
-		<field name="MANICHAEAN_ID"/>
-		<field name="MARCHEN" since="26"/>
-		<field name="MARCHEN_ID" since="26"/>
-		<field name="MASARAM_GONDI" since="28"/>
-		<field name="MASARAM_GONDI_ID" since="28"/>
-		<field name="MATHEMATICAL_ALPHANUMERIC_SYMBOLS"/>
-		<field name="MATHEMATICAL_ALPHANUMERIC_SYMBOLS_ID"/>
-		<field name="MATHEMATICAL_OPERATORS"/>
-		<field name="MATHEMATICAL_OPERATORS_ID"/>
-		<field name="MAYAN_NUMERALS" since="29"/>
-		<field name="MAYAN_NUMERALS_ID" since="29"/>
-		<field name="MEDEFAIDRIN" since="29"/>
-		<field name="MEDEFAIDRIN_ID" since="29"/>
-		<field name="MEETEI_MAYEK"/>
-		<field name="MEETEI_MAYEK_EXTENSIONS"/>
-		<field name="MEETEI_MAYEK_EXTENSIONS_ID"/>
-		<field name="MEETEI_MAYEK_ID"/>
-		<field name="MENDE_KIKAKUI"/>
-		<field name="MENDE_KIKAKUI_ID"/>
-		<field name="MEROITIC_CURSIVE"/>
-		<field name="MEROITIC_CURSIVE_ID"/>
-		<field name="MEROITIC_HIEROGLYPHS"/>
-		<field name="MEROITIC_HIEROGLYPHS_ID"/>
-		<field name="MIAO"/>
-		<field name="MIAO_ID"/>
-		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A"/>
-		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A_ID"/>
-		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B"/>
-		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B_ID"/>
-		<field name="MISCELLANEOUS_SYMBOLS"/>
-		<field name="MISCELLANEOUS_SYMBOLS_AND_ARROWS"/>
-		<field name="MISCELLANEOUS_SYMBOLS_AND_ARROWS_ID"/>
-		<field name="MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS"/>
-		<field name="MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS_ID"/>
-		<field name="MISCELLANEOUS_SYMBOLS_ID"/>
-		<field name="MISCELLANEOUS_TECHNICAL"/>
-		<field name="MISCELLANEOUS_TECHNICAL_ID"/>
-		<field name="MODI"/>
-		<field name="MODIFIER_TONE_LETTERS"/>
-		<field name="MODIFIER_TONE_LETTERS_ID"/>
-		<field name="MODI_ID"/>
-		<field name="MONGOLIAN"/>
-		<field name="MONGOLIAN_ID"/>
-		<field name="MONGOLIAN_SUPPLEMENT" since="26"/>
-		<field name="MONGOLIAN_SUPPLEMENT_ID" since="26"/>
-		<field name="MRO"/>
-		<field name="MRO_ID"/>
-		<field name="MULTANI"/>
-		<field name="MULTANI_ID"/>
-		<field name="MUSICAL_SYMBOLS"/>
-		<field name="MUSICAL_SYMBOLS_ID"/>
-		<field name="MYANMAR"/>
-		<field name="MYANMAR_EXTENDED_A"/>
-		<field name="MYANMAR_EXTENDED_A_ID"/>
-		<field name="MYANMAR_EXTENDED_B"/>
-		<field name="MYANMAR_EXTENDED_B_ID"/>
-		<field name="MYANMAR_ID"/>
-		<field name="NABATAEAN"/>
-		<field name="NABATAEAN_ID"/>
-		<field name="NEWA" since="26"/>
-		<field name="NEWA_ID" since="26"/>
-		<field name="NEW_TAI_LUE"/>
-		<field name="NEW_TAI_LUE_ID"/>
-		<field name="NKO"/>
-		<field name="NKO_ID"/>
-		<field name="NO_BLOCK"/>
-		<field name="NUMBER_FORMS"/>
-		<field name="NUMBER_FORMS_ID"/>
-		<field name="NUSHU" since="28"/>
-		<field name="NUSHU_ID" since="28"/>
-		<field name="OGHAM"/>
-		<field name="OGHAM_ID"/>
-		<field name="OLD_HUNGARIAN"/>
-		<field name="OLD_HUNGARIAN_ID"/>
-		<field name="OLD_ITALIC"/>
-		<field name="OLD_ITALIC_ID"/>
-		<field name="OLD_NORTH_ARABIAN"/>
-		<field name="OLD_NORTH_ARABIAN_ID"/>
-		<field name="OLD_PERMIC"/>
-		<field name="OLD_PERMIC_ID"/>
-		<field name="OLD_PERSIAN"/>
-		<field name="OLD_PERSIAN_ID"/>
-		<field name="OLD_SOGDIAN" since="29"/>
-		<field name="OLD_SOGDIAN_ID" since="29"/>
-		<field name="OLD_SOUTH_ARABIAN"/>
-		<field name="OLD_SOUTH_ARABIAN_ID"/>
-		<field name="OLD_TURKIC"/>
-		<field name="OLD_TURKIC_ID"/>
-		<field name="OL_CHIKI"/>
-		<field name="OL_CHIKI_ID"/>
-		<field name="OPTICAL_CHARACTER_RECOGNITION"/>
-		<field name="OPTICAL_CHARACTER_RECOGNITION_ID"/>
-		<field name="ORIYA"/>
-		<field name="ORIYA_ID"/>
-		<field name="ORNAMENTAL_DINGBATS"/>
-		<field name="ORNAMENTAL_DINGBATS_ID"/>
-		<field name="OSAGE" since="26"/>
-		<field name="OSAGE_ID" since="26"/>
-		<field name="OSMANYA"/>
-		<field name="OSMANYA_ID"/>
-		<field name="PAHAWH_HMONG"/>
-		<field name="PAHAWH_HMONG_ID"/>
-		<field name="PALMYRENE"/>
-		<field name="PALMYRENE_ID"/>
-		<field name="PAU_CIN_HAU"/>
-		<field name="PAU_CIN_HAU_ID"/>
-		<field name="PHAGS_PA"/>
-		<field name="PHAGS_PA_ID"/>
-		<field name="PHAISTOS_DISC"/>
-		<field name="PHAISTOS_DISC_ID"/>
-		<field name="PHOENICIAN"/>
-		<field name="PHOENICIAN_ID"/>
-		<field name="PHONETIC_EXTENSIONS"/>
-		<field name="PHONETIC_EXTENSIONS_ID"/>
-		<field name="PHONETIC_EXTENSIONS_SUPPLEMENT"/>
-		<field name="PHONETIC_EXTENSIONS_SUPPLEMENT_ID"/>
-		<field name="PLAYING_CARDS"/>
-		<field name="PLAYING_CARDS_ID"/>
-		<field name="PRIVATE_USE"/>
-		<field name="PRIVATE_USE_AREA"/>
-		<field name="PRIVATE_USE_AREA_ID"/>
-		<field name="PRIVATE_USE_ID"/>
-		<field name="PSALTER_PAHLAVI"/>
-		<field name="PSALTER_PAHLAVI_ID"/>
-		<field name="REJANG"/>
-		<field name="REJANG_ID"/>
-		<field name="RUMI_NUMERAL_SYMBOLS"/>
-		<field name="RUMI_NUMERAL_SYMBOLS_ID"/>
-		<field name="RUNIC"/>
-		<field name="RUNIC_ID"/>
-		<field name="SAMARITAN"/>
-		<field name="SAMARITAN_ID"/>
-		<field name="SAURASHTRA"/>
-		<field name="SAURASHTRA_ID"/>
-		<field name="SHARADA"/>
-		<field name="SHARADA_ID"/>
-		<field name="SHAVIAN"/>
-		<field name="SHAVIAN_ID"/>
-		<field name="SHORTHAND_FORMAT_CONTROLS"/>
-		<field name="SHORTHAND_FORMAT_CONTROLS_ID"/>
-		<field name="SIDDHAM"/>
-		<field name="SIDDHAM_ID"/>
-		<field name="SINHALA"/>
-		<field name="SINHALA_ARCHAIC_NUMBERS"/>
-		<field name="SINHALA_ARCHAIC_NUMBERS_ID"/>
-		<field name="SINHALA_ID"/>
-		<field name="SMALL_FORM_VARIANTS"/>
-		<field name="SMALL_FORM_VARIANTS_ID"/>
-		<field name="SOGDIAN" since="29"/>
-		<field name="SOGDIAN_ID" since="29"/>
-		<field name="SORA_SOMPENG"/>
-		<field name="SORA_SOMPENG_ID"/>
-		<field name="SOYOMBO" since="28"/>
-		<field name="SOYOMBO_ID" since="28"/>
-		<field name="SPACING_MODIFIER_LETTERS"/>
-		<field name="SPACING_MODIFIER_LETTERS_ID"/>
-		<field name="SPECIALS"/>
-		<field name="SPECIALS_ID"/>
-		<field name="SUNDANESE"/>
-		<field name="SUNDANESE_ID"/>
-		<field name="SUNDANESE_SUPPLEMENT"/>
-		<field name="SUNDANESE_SUPPLEMENT_ID"/>
-		<field name="SUPERSCRIPTS_AND_SUBSCRIPTS"/>
-		<field name="SUPERSCRIPTS_AND_SUBSCRIPTS_ID"/>
-		<field name="SUPPLEMENTAL_ARROWS_A"/>
-		<field name="SUPPLEMENTAL_ARROWS_A_ID"/>
-		<field name="SUPPLEMENTAL_ARROWS_B"/>
-		<field name="SUPPLEMENTAL_ARROWS_B_ID"/>
-		<field name="SUPPLEMENTAL_ARROWS_C"/>
-		<field name="SUPPLEMENTAL_ARROWS_C_ID"/>
-		<field name="SUPPLEMENTAL_MATHEMATICAL_OPERATORS"/>
-		<field name="SUPPLEMENTAL_MATHEMATICAL_OPERATORS_ID"/>
-		<field name="SUPPLEMENTAL_PUNCTUATION"/>
-		<field name="SUPPLEMENTAL_PUNCTUATION_ID"/>
-		<field name="SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS"/>
-		<field name="SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS_ID"/>
-		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A"/>
-		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A_ID"/>
-		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B"/>
-		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B_ID"/>
-		<field name="SUTTON_SIGNWRITING"/>
-		<field name="SUTTON_SIGNWRITING_ID"/>
-		<field name="SYLOTI_NAGRI"/>
-		<field name="SYLOTI_NAGRI_ID"/>
-		<field name="SYRIAC"/>
-		<field name="SYRIAC_ID"/>
-		<field name="SYRIAC_SUPPLEMENT" since="28"/>
-		<field name="SYRIAC_SUPPLEMENT_ID" since="28"/>
-		<field name="TAGALOG"/>
-		<field name="TAGALOG_ID"/>
-		<field name="TAGBANWA"/>
-		<field name="TAGBANWA_ID"/>
-		<field name="TAGS"/>
-		<field name="TAGS_ID"/>
-		<field name="TAI_LE"/>
-		<field name="TAI_LE_ID"/>
-		<field name="TAI_THAM"/>
-		<field name="TAI_THAM_ID"/>
-		<field name="TAI_VIET"/>
-		<field name="TAI_VIET_ID"/>
-		<field name="TAI_XUAN_JING_SYMBOLS"/>
-		<field name="TAI_XUAN_JING_SYMBOLS_ID"/>
-		<field name="TAKRI"/>
-		<field name="TAKRI_ID"/>
-		<field name="TAMIL"/>
-		<field name="TAMIL_ID"/>
-		<field name="TANGUT" since="26"/>
-		<field name="TANGUT_COMPONENTS" since="26"/>
-		<field name="TANGUT_COMPONENTS_ID" since="26"/>
-		<field name="TANGUT_ID" since="26"/>
-		<field name="TELUGU"/>
-		<field name="TELUGU_ID"/>
-		<field name="THAANA"/>
-		<field name="THAANA_ID"/>
-		<field name="THAI"/>
-		<field name="THAI_ID"/>
-		<field name="TIBETAN"/>
-		<field name="TIBETAN_ID"/>
-		<field name="TIFINAGH"/>
-		<field name="TIFINAGH_ID"/>
-		<field name="TIRHUTA"/>
-		<field name="TIRHUTA_ID"/>
-		<field name="TRANSPORT_AND_MAP_SYMBOLS"/>
-		<field name="TRANSPORT_AND_MAP_SYMBOLS_ID"/>
-		<field name="UGARITIC"/>
-		<field name="UGARITIC_ID"/>
-		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS"/>
-		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED"/>
-		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_ID"/>
-		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_ID"/>
-		<field name="VAI"/>
-		<field name="VAI_ID"/>
-		<field name="VARIATION_SELECTORS"/>
-		<field name="VARIATION_SELECTORS_ID"/>
-		<field name="VARIATION_SELECTORS_SUPPLEMENT"/>
-		<field name="VARIATION_SELECTORS_SUPPLEMENT_ID"/>
-		<field name="VEDIC_EXTENSIONS"/>
-		<field name="VEDIC_EXTENSIONS_ID"/>
-		<field name="VERTICAL_FORMS"/>
-		<field name="VERTICAL_FORMS_ID"/>
-		<field name="WARANG_CITI"/>
-		<field name="WARANG_CITI_ID"/>
-		<field name="YIJING_HEXAGRAM_SYMBOLS"/>
-		<field name="YIJING_HEXAGRAM_SYMBOLS_ID"/>
-		<field name="YI_RADICALS"/>
-		<field name="YI_RADICALS_ID"/>
-		<field name="YI_SYLLABLES"/>
-		<field name="YI_SYLLABLES_ID"/>
-		<field name="ZANABAZAR_SQUARE" since="28"/>
-		<field name="ZANABAZAR_SQUARE_ID" since="28"/>
-	</class>
-	<class name="android/icu/lang/UCharacter$WordBreak" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="ALETTER"/>
-		<field name="CR"/>
-		<field name="DOUBLE_QUOTE"/>
-		<field name="EXTEND"/>
-		<field name="EXTENDNUMLET"/>
-		<field name="E_BASE" since="26"/>
-		<field name="E_BASE_GAZ" since="26"/>
-		<field name="E_MODIFIER" since="26"/>
-		<field name="FORMAT"/>
-		<field name="GLUE_AFTER_ZWJ" since="26"/>
-		<field name="HEBREW_LETTER"/>
-		<field name="KATAKANA"/>
-		<field name="LF"/>
-		<field name="MIDLETTER"/>
-		<field name="MIDNUM"/>
-		<field name="MIDNUMLET"/>
-		<field name="NEWLINE"/>
-		<field name="NUMERIC"/>
-		<field name="OTHER"/>
-		<field name="REGIONAL_INDICATOR"/>
-		<field name="SINGLE_QUOTE"/>
-		<field name="WSEGSPACE" since="29"/>
-		<field name="ZWJ" since="26"/>
-	</class>
-	<class name="android/icu/lang/UCharacterCategory" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/lang/UCharacterEnums$ECharacterCategory"/>
-		<method name="&lt;init>()V"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/lang/UCharacterDirection" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/lang/UCharacterEnums$ECharacterDirection"/>
-		<method name="&lt;init>()V"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/lang/UCharacterEnums" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/icu/lang/UCharacterEnums$ECharacterCategory" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="COMBINING_SPACING_MARK"/>
-		<field name="CONNECTOR_PUNCTUATION"/>
-		<field name="CONTROL"/>
-		<field name="CURRENCY_SYMBOL"/>
-		<field name="DASH_PUNCTUATION"/>
-		<field name="DECIMAL_DIGIT_NUMBER"/>
-		<field name="ENCLOSING_MARK"/>
-		<field name="END_PUNCTUATION"/>
-		<field name="FINAL_PUNCTUATION"/>
-		<field name="FINAL_QUOTE_PUNCTUATION"/>
-		<field name="FORMAT"/>
-		<field name="GENERAL_OTHER_TYPES"/>
-		<field name="INITIAL_PUNCTUATION"/>
-		<field name="INITIAL_QUOTE_PUNCTUATION"/>
-		<field name="LETTER_NUMBER"/>
-		<field name="LINE_SEPARATOR"/>
-		<field name="LOWERCASE_LETTER"/>
-		<field name="MATH_SYMBOL"/>
-		<field name="MODIFIER_LETTER"/>
-		<field name="MODIFIER_SYMBOL"/>
-		<field name="NON_SPACING_MARK"/>
-		<field name="OTHER_LETTER"/>
-		<field name="OTHER_NUMBER"/>
-		<field name="OTHER_PUNCTUATION"/>
-		<field name="OTHER_SYMBOL"/>
-		<field name="PARAGRAPH_SEPARATOR"/>
-		<field name="PRIVATE_USE"/>
-		<field name="SPACE_SEPARATOR"/>
-		<field name="START_PUNCTUATION"/>
-		<field name="SURROGATE"/>
-		<field name="TITLECASE_LETTER"/>
-		<field name="UNASSIGNED"/>
-		<field name="UPPERCASE_LETTER"/>
-	</class>
-	<class name="android/icu/lang/UCharacterEnums$ECharacterDirection" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="ARABIC_NUMBER"/>
-		<field name="BLOCK_SEPARATOR"/>
-		<field name="BOUNDARY_NEUTRAL"/>
-		<field name="COMMON_NUMBER_SEPARATOR"/>
-		<field name="DIRECTIONALITY_ARABIC_NUMBER"/>
-		<field name="DIRECTIONALITY_BOUNDARY_NEUTRAL"/>
-		<field name="DIRECTIONALITY_COMMON_NUMBER_SEPARATOR"/>
-		<field name="DIRECTIONALITY_EUROPEAN_NUMBER"/>
-		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR"/>
-		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR"/>
-		<field name="DIRECTIONALITY_LEFT_TO_RIGHT"/>
-		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING"/>
-		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE"/>
-		<field name="DIRECTIONALITY_NONSPACING_MARK"/>
-		<field name="DIRECTIONALITY_OTHER_NEUTRALS"/>
-		<field name="DIRECTIONALITY_PARAGRAPH_SEPARATOR"/>
-		<field name="DIRECTIONALITY_POP_DIRECTIONAL_FORMAT"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE"/>
-		<field name="DIRECTIONALITY_SEGMENT_SEPARATOR"/>
-		<field name="DIRECTIONALITY_UNDEFINED"/>
-		<field name="DIRECTIONALITY_WHITESPACE"/>
-		<field name="DIR_NON_SPACING_MARK"/>
-		<field name="EUROPEAN_NUMBER"/>
-		<field name="EUROPEAN_NUMBER_SEPARATOR"/>
-		<field name="EUROPEAN_NUMBER_TERMINATOR"/>
-		<field name="FIRST_STRONG_ISOLATE"/>
-		<field name="LEFT_TO_RIGHT"/>
-		<field name="LEFT_TO_RIGHT_EMBEDDING"/>
-		<field name="LEFT_TO_RIGHT_ISOLATE"/>
-		<field name="LEFT_TO_RIGHT_OVERRIDE"/>
-		<field name="OTHER_NEUTRAL"/>
-		<field name="POP_DIRECTIONAL_FORMAT"/>
-		<field name="POP_DIRECTIONAL_ISOLATE"/>
-		<field name="RIGHT_TO_LEFT"/>
-		<field name="RIGHT_TO_LEFT_ARABIC"/>
-		<field name="RIGHT_TO_LEFT_EMBEDDING"/>
-		<field name="RIGHT_TO_LEFT_ISOLATE"/>
-		<field name="RIGHT_TO_LEFT_OVERRIDE"/>
-		<field name="SEGMENT_SEPARATOR"/>
-		<field name="WHITE_SPACE_NEUTRAL"/>
-	</class>
-	<class name="android/icu/lang/UProperty" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="AGE"/>
-		<field name="ALPHABETIC"/>
-		<field name="ASCII_HEX_DIGIT"/>
-		<field name="BIDI_CLASS"/>
-		<field name="BIDI_CONTROL"/>
-		<field name="BIDI_MIRRORED"/>
-		<field name="BIDI_MIRRORING_GLYPH"/>
-		<field name="BIDI_PAIRED_BRACKET"/>
-		<field name="BIDI_PAIRED_BRACKET_TYPE"/>
-		<field name="BINARY_START"/>
-		<field name="BLOCK"/>
-		<field name="CANONICAL_COMBINING_CLASS"/>
-		<field name="CASED"/>
-		<field name="CASE_FOLDING"/>
-		<field name="CASE_IGNORABLE"/>
-		<field name="CASE_SENSITIVE"/>
-		<field name="CHANGES_WHEN_CASEFOLDED"/>
-		<field name="CHANGES_WHEN_CASEMAPPED"/>
-		<field name="CHANGES_WHEN_LOWERCASED"/>
-		<field name="CHANGES_WHEN_NFKC_CASEFOLDED"/>
-		<field name="CHANGES_WHEN_TITLECASED"/>
-		<field name="CHANGES_WHEN_UPPERCASED"/>
-		<field name="DASH"/>
-		<field name="DECOMPOSITION_TYPE"/>
-		<field name="DEFAULT_IGNORABLE_CODE_POINT"/>
-		<field name="DEPRECATED"/>
-		<field name="DIACRITIC"/>
-		<field name="DOUBLE_START"/>
-		<field name="EAST_ASIAN_WIDTH"/>
-		<field name="EMOJI" since="28"/>
-		<field name="EMOJI_COMPONENT" since="28"/>
-		<field name="EMOJI_MODIFIER" since="28"/>
-		<field name="EMOJI_MODIFIER_BASE" since="28"/>
-		<field name="EMOJI_PRESENTATION" since="28"/>
-		<field name="EXTENDED_PICTOGRAPHIC" since="29"/>
-		<field name="EXTENDER"/>
-		<field name="FULL_COMPOSITION_EXCLUSION"/>
-		<field name="GENERAL_CATEGORY"/>
-		<field name="GENERAL_CATEGORY_MASK"/>
-		<field name="GRAPHEME_BASE"/>
-		<field name="GRAPHEME_CLUSTER_BREAK"/>
-		<field name="GRAPHEME_EXTEND"/>
-		<field name="GRAPHEME_LINK"/>
-		<field name="HANGUL_SYLLABLE_TYPE"/>
-		<field name="HEX_DIGIT"/>
-		<field name="HYPHEN"/>
-		<field name="IDEOGRAPHIC"/>
-		<field name="IDS_BINARY_OPERATOR"/>
-		<field name="IDS_TRINARY_OPERATOR"/>
-		<field name="ID_CONTINUE"/>
-		<field name="ID_START"/>
-		<field name="INT_START"/>
-		<field name="JOINING_GROUP"/>
-		<field name="JOINING_TYPE"/>
-		<field name="JOIN_CONTROL"/>
-		<field name="LEAD_CANONICAL_COMBINING_CLASS"/>
-		<field name="LINE_BREAK"/>
-		<field name="LOGICAL_ORDER_EXCEPTION"/>
-		<field name="LOWERCASE"/>
-		<field name="LOWERCASE_MAPPING"/>
-		<field name="MASK_START"/>
-		<field name="MATH"/>
-		<field name="NAME"/>
-		<field name="NFC_INERT"/>
-		<field name="NFC_QUICK_CHECK"/>
-		<field name="NFD_INERT"/>
-		<field name="NFD_QUICK_CHECK"/>
-		<field name="NFKC_INERT"/>
-		<field name="NFKC_QUICK_CHECK"/>
-		<field name="NFKD_INERT"/>
-		<field name="NFKD_QUICK_CHECK"/>
-		<field name="NONCHARACTER_CODE_POINT"/>
-		<field name="NUMERIC_TYPE"/>
-		<field name="NUMERIC_VALUE"/>
-		<field name="OTHER_PROPERTY_START"/>
-		<field name="PATTERN_SYNTAX"/>
-		<field name="PATTERN_WHITE_SPACE"/>
-		<field name="POSIX_ALNUM"/>
-		<field name="POSIX_BLANK"/>
-		<field name="POSIX_GRAPH"/>
-		<field name="POSIX_PRINT"/>
-		<field name="POSIX_XDIGIT"/>
-		<field name="PREPENDED_CONCATENATION_MARK" since="28"/>
-		<field name="QUOTATION_MARK"/>
-		<field name="RADICAL"/>
-		<field name="REGIONAL_INDICATOR" since="28"/>
-		<field name="SCRIPT"/>
-		<field name="SCRIPT_EXTENSIONS"/>
-		<field name="SEGMENT_STARTER"/>
-		<field name="SENTENCE_BREAK"/>
-		<field name="SIMPLE_CASE_FOLDING"/>
-		<field name="SIMPLE_LOWERCASE_MAPPING"/>
-		<field name="SIMPLE_TITLECASE_MAPPING"/>
-		<field name="SIMPLE_UPPERCASE_MAPPING"/>
-		<field name="SOFT_DOTTED"/>
-		<field name="STRING_START"/>
-		<field name="S_TERM"/>
-		<field name="TERMINAL_PUNCTUATION"/>
-		<field name="TITLECASE_MAPPING"/>
-		<field name="TRAIL_CANONICAL_COMBINING_CLASS"/>
-		<field name="UNIFIED_IDEOGRAPH"/>
-		<field name="UPPERCASE"/>
-		<field name="UPPERCASE_MAPPING"/>
-		<field name="VARIATION_SELECTOR"/>
-		<field name="WHITE_SPACE"/>
-		<field name="WORD_BREAK"/>
-		<field name="XID_CONTINUE"/>
-		<field name="XID_START"/>
-	</class>
-	<class name="android/icu/lang/UProperty$NameChoice" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="LONG"/>
-		<field name="SHORT"/>
-	</class>
-	<class name="android/icu/lang/UScript" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="breaksBetweenLetters(I)Z"/>
-		<method name="getCode(Landroid/icu/util/ULocale;)[I"/>
-		<method name="getCode(Ljava/lang/String;)[I"/>
-		<method name="getCode(Ljava/util/Locale;)[I"/>
-		<method name="getCodeFromName(Ljava/lang/String;)I"/>
-		<method name="getName(I)Ljava/lang/String;"/>
-		<method name="getSampleString(I)Ljava/lang/String;"/>
-		<method name="getScript(I)I"/>
-		<method name="getScriptExtensions(ILjava/util/BitSet;)I"/>
-		<method name="getShortName(I)Ljava/lang/String;"/>
-		<method name="getUsage(I)Landroid/icu/lang/UScript$ScriptUsage;"/>
-		<method name="hasScript(II)Z"/>
-		<method name="isCased(I)Z"/>
-		<method name="isRightToLeft(I)Z"/>
-		<field name="ADLAM" since="26"/>
-		<field name="AFAKA"/>
-		<field name="AHOM"/>
-		<field name="ANATOLIAN_HIEROGLYPHS"/>
-		<field name="ARABIC"/>
-		<field name="ARMENIAN"/>
-		<field name="AVESTAN"/>
-		<field name="BALINESE"/>
-		<field name="BAMUM"/>
-		<field name="BASSA_VAH"/>
-		<field name="BATAK"/>
-		<field name="BENGALI"/>
-		<field name="BHAIKSUKI" since="26"/>
-		<field name="BLISSYMBOLS"/>
-		<field name="BOOK_PAHLAVI"/>
-		<field name="BOPOMOFO"/>
-		<field name="BRAHMI"/>
-		<field name="BRAILLE"/>
-		<field name="BUGINESE"/>
-		<field name="BUHID"/>
-		<field name="CANADIAN_ABORIGINAL"/>
-		<field name="CARIAN"/>
-		<field name="CAUCASIAN_ALBANIAN"/>
-		<field name="CHAKMA"/>
-		<field name="CHAM"/>
-		<field name="CHEROKEE"/>
-		<field name="CIRTH"/>
-		<field name="COMMON"/>
-		<field name="COPTIC"/>
-		<field name="CUNEIFORM"/>
-		<field name="CYPRIOT"/>
-		<field name="CYRILLIC"/>
-		<field name="DEMOTIC_EGYPTIAN"/>
-		<field name="DESERET"/>
-		<field name="DEVANAGARI"/>
-		<field name="DOGRA" since="29"/>
-		<field name="DUPLOYAN"/>
-		<field name="EASTERN_SYRIAC"/>
-		<field name="EGYPTIAN_HIEROGLYPHS"/>
-		<field name="ELBASAN"/>
-		<field name="ESTRANGELO_SYRIAC"/>
-		<field name="ETHIOPIC"/>
-		<field name="GEORGIAN"/>
-		<field name="GLAGOLITIC"/>
-		<field name="GOTHIC"/>
-		<field name="GRANTHA"/>
-		<field name="GREEK"/>
-		<field name="GUJARATI"/>
-		<field name="GUNJALA_GONDI" since="29"/>
-		<field name="GURMUKHI"/>
-		<field name="HAN"/>
-		<field name="HANGUL"/>
-		<field name="HANIFI_ROHINGYA" since="29"/>
-		<field name="HANUNOO"/>
-		<field name="HAN_WITH_BOPOMOFO" since="26"/>
-		<field name="HARAPPAN_INDUS"/>
-		<field name="HATRAN"/>
-		<field name="HEBREW"/>
-		<field name="HIERATIC_EGYPTIAN"/>
-		<field name="HIRAGANA"/>
-		<field name="IMPERIAL_ARAMAIC"/>
-		<field name="INHERITED"/>
-		<field name="INSCRIPTIONAL_PAHLAVI"/>
-		<field name="INSCRIPTIONAL_PARTHIAN"/>
-		<field name="INVALID_CODE"/>
-		<field name="JAMO" since="26"/>
-		<field name="JAPANESE"/>
-		<field name="JAVANESE"/>
-		<field name="JURCHEN"/>
-		<field name="KAITHI"/>
-		<field name="KANNADA"/>
-		<field name="KATAKANA"/>
-		<field name="KATAKANA_OR_HIRAGANA"/>
-		<field name="KAYAH_LI"/>
-		<field name="KHAROSHTHI"/>
-		<field name="KHMER"/>
-		<field name="KHOJKI"/>
-		<field name="KHUDAWADI"/>
-		<field name="KHUTSURI"/>
-		<field name="KOREAN"/>
-		<field name="KPELLE"/>
-		<field name="LANNA"/>
-		<field name="LAO"/>
-		<field name="LATIN"/>
-		<field name="LATIN_FRAKTUR"/>
-		<field name="LATIN_GAELIC"/>
-		<field name="LEPCHA"/>
-		<field name="LIMBU"/>
-		<field name="LINEAR_A"/>
-		<field name="LINEAR_B"/>
-		<field name="LISU"/>
-		<field name="LOMA"/>
-		<field name="LYCIAN"/>
-		<field name="LYDIAN"/>
-		<field name="MAHAJANI"/>
-		<field name="MAKASAR" since="29"/>
-		<field name="MALAYALAM"/>
-		<field name="MANDAEAN"/>
-		<field name="MANDAIC"/>
-		<field name="MANICHAEAN"/>
-		<field name="MARCHEN" since="26"/>
-		<field name="MASARAM_GONDI" since="28"/>
-		<field name="MATHEMATICAL_NOTATION"/>
-		<field name="MAYAN_HIEROGLYPHS"/>
-		<field name="MEDEFAIDRIN" since="29"/>
-		<field name="MEITEI_MAYEK"/>
-		<field name="MENDE"/>
-		<field name="MEROITIC"/>
-		<field name="MEROITIC_CURSIVE"/>
-		<field name="MEROITIC_HIEROGLYPHS"/>
-		<field name="MIAO"/>
-		<field name="MODI"/>
-		<field name="MONGOLIAN"/>
-		<field name="MOON"/>
-		<field name="MRO"/>
-		<field name="MULTANI"/>
-		<field name="MYANMAR"/>
-		<field name="NABATAEAN"/>
-		<field name="NAKHI_GEBA"/>
-		<field name="NEWA" since="26"/>
-		<field name="NEW_TAI_LUE"/>
-		<field name="NKO"/>
-		<field name="NUSHU"/>
-		<field name="OGHAM"/>
-		<field name="OLD_CHURCH_SLAVONIC_CYRILLIC"/>
-		<field name="OLD_HUNGARIAN"/>
-		<field name="OLD_ITALIC"/>
-		<field name="OLD_NORTH_ARABIAN"/>
-		<field name="OLD_PERMIC"/>
-		<field name="OLD_PERSIAN"/>
-		<field name="OLD_SOGDIAN" since="29"/>
-		<field name="OLD_SOUTH_ARABIAN"/>
-		<field name="OL_CHIKI"/>
-		<field name="ORIYA"/>
-		<field name="ORKHON"/>
-		<field name="OSAGE" since="26"/>
-		<field name="OSMANYA"/>
-		<field name="PAHAWH_HMONG"/>
-		<field name="PALMYRENE"/>
-		<field name="PAU_CIN_HAU"/>
-		<field name="PHAGS_PA"/>
-		<field name="PHOENICIAN"/>
-		<field name="PHONETIC_POLLARD"/>
-		<field name="PSALTER_PAHLAVI"/>
-		<field name="REJANG"/>
-		<field name="RONGORONGO"/>
-		<field name="RUNIC"/>
-		<field name="SAMARITAN"/>
-		<field name="SARATI"/>
-		<field name="SAURASHTRA"/>
-		<field name="SHARADA"/>
-		<field name="SHAVIAN"/>
-		<field name="SIDDHAM"/>
-		<field name="SIGN_WRITING"/>
-		<field name="SIMPLIFIED_HAN"/>
-		<field name="SINDHI"/>
-		<field name="SINHALA"/>
-		<field name="SOGDIAN" since="29"/>
-		<field name="SORA_SOMPENG"/>
-		<field name="SOYOMBO" since="28"/>
-		<field name="SUNDANESE"/>
-		<field name="SYLOTI_NAGRI"/>
-		<field name="SYMBOLS"/>
-		<field name="SYMBOLS_EMOJI" since="26"/>
-		<field name="SYRIAC"/>
-		<field name="TAGALOG"/>
-		<field name="TAGBANWA"/>
-		<field name="TAI_LE"/>
-		<field name="TAI_VIET"/>
-		<field name="TAKRI"/>
-		<field name="TAMIL"/>
-		<field name="TANGUT"/>
-		<field name="TELUGU"/>
-		<field name="TENGWAR"/>
-		<field name="THAANA"/>
-		<field name="THAI"/>
-		<field name="TIBETAN"/>
-		<field name="TIFINAGH"/>
-		<field name="TIRHUTA"/>
-		<field name="TRADITIONAL_HAN"/>
-		<field name="UCAS"/>
-		<field name="UGARITIC"/>
-		<field name="UNKNOWN"/>
-		<field name="UNWRITTEN_LANGUAGES"/>
-		<field name="VAI"/>
-		<field name="VISIBLE_SPEECH"/>
-		<field name="WARANG_CITI"/>
-		<field name="WESTERN_SYRIAC"/>
-		<field name="WOLEAI"/>
-		<field name="YI"/>
-		<field name="ZANABAZAR_SQUARE" since="28"/>
-	</class>
-	<class name="android/icu/lang/UScript$ScriptUsage" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/lang/UScript$ScriptUsage;"/>
-		<method name="values()[Landroid/icu/lang/UScript$ScriptUsage;"/>
-		<field name="ASPIRATIONAL"/>
-		<field name="EXCLUDED"/>
-		<field name="LIMITED_USE"/>
-		<field name="NOT_ENCODED"/>
-		<field name="RECOMMENDED"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/icu/math/BigDecimal" since="24">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(D)V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/math/BigDecimal;)V"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;)V"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;I)V"/>
-		<method name="&lt;init>([C)V"/>
-		<method name="&lt;init>([CII)V"/>
-		<method name="abs()Landroid/icu/math/BigDecimal;"/>
-		<method name="abs(Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="add(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="add(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="byteValueExact()B"/>
-		<method name="compareTo(Landroid/icu/math/BigDecimal;)I"/>
-		<method name="compareTo(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)I"/>
-		<method name="divide(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="divide(Landroid/icu/math/BigDecimal;I)Landroid/icu/math/BigDecimal;"/>
-		<method name="divide(Landroid/icu/math/BigDecimal;II)Landroid/icu/math/BigDecimal;"/>
-		<method name="divide(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="divideInteger(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="divideInteger(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="format(II)Ljava/lang/String;"/>
-		<method name="format(IIIIII)Ljava/lang/String;"/>
-		<method name="intValueExact()I"/>
-		<method name="longValueExact()J"/>
-		<method name="max(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="max(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="min(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="min(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="movePointLeft(I)Landroid/icu/math/BigDecimal;"/>
-		<method name="movePointRight(I)Landroid/icu/math/BigDecimal;"/>
-		<method name="multiply(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="multiply(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="negate()Landroid/icu/math/BigDecimal;"/>
-		<method name="negate(Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="plus()Landroid/icu/math/BigDecimal;"/>
-		<method name="plus(Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="pow(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="pow(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="remainder(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="remainder(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="scale()I"/>
-		<method name="setScale(I)Landroid/icu/math/BigDecimal;"/>
-		<method name="setScale(II)Landroid/icu/math/BigDecimal;"/>
-		<method name="shortValueExact()S"/>
-		<method name="signum()I"/>
-		<method name="subtract(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
-		<method name="subtract(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
-		<method name="toBigDecimal()Ljava/math/BigDecimal;"/>
-		<method name="toBigInteger()Ljava/math/BigInteger;"/>
-		<method name="toBigIntegerExact()Ljava/math/BigInteger;"/>
-		<method name="toCharArray()[C"/>
-		<method name="unscaledValue()Ljava/math/BigInteger;"/>
-		<method name="valueOf(D)Landroid/icu/math/BigDecimal;"/>
-		<method name="valueOf(J)Landroid/icu/math/BigDecimal;"/>
-		<method name="valueOf(JI)Landroid/icu/math/BigDecimal;"/>
-		<field name="ONE"/>
-		<field name="ROUND_CEILING"/>
-		<field name="ROUND_DOWN"/>
-		<field name="ROUND_FLOOR"/>
-		<field name="ROUND_HALF_DOWN"/>
-		<field name="ROUND_HALF_EVEN"/>
-		<field name="ROUND_HALF_UP"/>
-		<field name="ROUND_UNNECESSARY"/>
-		<field name="ROUND_UP"/>
-		<field name="TEN"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="android/icu/math/MathContext" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(IIZ)V"/>
-		<method name="&lt;init>(IIZI)V"/>
-		<method name="getDigits()I"/>
-		<method name="getForm()I"/>
-		<method name="getLostDigits()Z"/>
-		<method name="getRoundingMode()I"/>
-		<field name="DEFAULT"/>
-		<field name="ENGINEERING"/>
-		<field name="PLAIN"/>
-		<field name="ROUND_CEILING"/>
-		<field name="ROUND_DOWN"/>
-		<field name="ROUND_FLOOR"/>
-		<field name="ROUND_HALF_DOWN"/>
-		<field name="ROUND_HALF_EVEN"/>
-		<field name="ROUND_HALF_UP"/>
-		<field name="ROUND_UNNECESSARY"/>
-		<field name="ROUND_UP"/>
-		<field name="SCIENTIFIC"/>
-	</class>
-	<class name="android/icu/text/AlphabeticIndex" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Iterable"/>
-		<method name="&lt;init>(Landroid/icu/text/RuleBasedCollator;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="addLabels(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="addLabels([Landroid/icu/util/ULocale;)Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="addLabels([Ljava/util/Locale;)Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="addRecord(Ljava/lang/CharSequence;Ljava/lang/Object;)Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="buildImmutableIndex()Landroid/icu/text/AlphabeticIndex$ImmutableIndex;"/>
-		<method name="clearRecords()Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="getBucketCount()I"/>
-		<method name="getBucketIndex(Ljava/lang/CharSequence;)I"/>
-		<method name="getBucketLabels()Ljava/util/List;"/>
-		<method name="getCollator()Landroid/icu/text/RuleBasedCollator;"/>
-		<method name="getInflowLabel()Ljava/lang/String;"/>
-		<method name="getMaxLabelCount()I"/>
-		<method name="getOverflowLabel()Ljava/lang/String;"/>
-		<method name="getRecordCount()I"/>
-		<method name="getUnderflowLabel()Ljava/lang/String;"/>
-		<method name="setInflowLabel(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="setMaxLabelCount(I)Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="setOverflowLabel(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex;"/>
-		<method name="setUnderflowLabel(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex;"/>
-	</class>
-	<class name="android/icu/text/AlphabeticIndex$Bucket" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Iterable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;)V" since="29"/>
-		<method name="getLabel()Ljava/lang/String;"/>
-		<method name="getLabelType()Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;"/>
-		<method name="size()I"/>
-	</class>
-	<class name="android/icu/text/AlphabeticIndex$Bucket$LabelType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;"/>
-		<method name="values()[Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;"/>
-		<field name="INFLOW"/>
-		<field name="NORMAL"/>
-		<field name="OVERFLOW"/>
-		<field name="UNDERFLOW"/>
-	</class>
-	<class name="android/icu/text/AlphabeticIndex$ImmutableIndex" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Iterable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBucket(I)Landroid/icu/text/AlphabeticIndex$Bucket;"/>
-		<method name="getBucketCount()I"/>
-		<method name="getBucketIndex(Ljava/lang/CharSequence;)I"/>
-	</class>
-	<class name="android/icu/text/AlphabeticIndex$Record" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/Object;)V" since="29"/>
-		<method name="getData()Ljava/lang/Object;"/>
-		<method name="getName()Ljava/lang/CharSequence;"/>
-	</class>
-	<class name="android/icu/text/BreakIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="current()I"/>
-		<method name="first()I"/>
-		<method name="following(I)I"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCharacterInstance()Landroid/icu/text/BreakIterator;"/>
-		<method name="getCharacterInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getCharacterInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getLineInstance()Landroid/icu/text/BreakIterator;"/>
-		<method name="getLineInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getLineInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getRuleStatus()I"/>
-		<method name="getRuleStatusVec([I)I"/>
-		<method name="getSentenceInstance()Landroid/icu/text/BreakIterator;"/>
-		<method name="getSentenceInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getSentenceInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getText()Ljava/text/CharacterIterator;"/>
-		<method name="getTitleInstance()Landroid/icu/text/BreakIterator;"/>
-		<method name="getTitleInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getTitleInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getWordInstance()Landroid/icu/text/BreakIterator;"/>
-		<method name="getWordInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="getWordInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
-		<method name="isBoundary(I)Z"/>
-		<method name="last()I"/>
-		<method name="next()I"/>
-		<method name="next(I)I"/>
-		<method name="preceding(I)I"/>
-		<method name="previous()I"/>
-		<method name="setText(Ljava/lang/String;)V"/>
-		<method name="setText(Ljava/text/CharacterIterator;)V"/>
-		<field name="DONE"/>
-		<field name="KIND_CHARACTER"/>
-		<field name="KIND_LINE"/>
-		<field name="KIND_SENTENCE"/>
-		<field name="KIND_TITLE"/>
-		<field name="KIND_WORD"/>
-		<field name="WORD_IDEO"/>
-		<field name="WORD_IDEO_LIMIT"/>
-		<field name="WORD_KANA"/>
-		<field name="WORD_KANA_LIMIT"/>
-		<field name="WORD_LETTER"/>
-		<field name="WORD_LETTER_LIMIT"/>
-		<field name="WORD_NONE"/>
-		<field name="WORD_NONE_LIMIT"/>
-		<field name="WORD_NUMBER"/>
-		<field name="WORD_NUMBER_LIMIT"/>
-	</class>
-	<class name="android/icu/text/CollationElementIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/icu/text/RuleBasedCollator;)V" since="29"/>
-		<method name="getMaxExpansion(I)I"/>
-		<method name="getOffset()I"/>
-		<method name="next()I"/>
-		<method name="previous()I"/>
-		<method name="primaryOrder(I)I"/>
-		<method name="reset()V"/>
-		<method name="secondaryOrder(I)I"/>
-		<method name="setOffset(I)V"/>
-		<method name="setText(Landroid/icu/text/UCharacterIterator;)V"/>
-		<method name="setText(Ljava/lang/String;)V"/>
-		<method name="setText(Ljava/text/CharacterIterator;)V"/>
-		<method name="tertiaryOrder(I)I"/>
-		<field name="IGNORABLE"/>
-		<field name="NULLORDER"/>
-	</class>
-	<class name="android/icu/text/CollationKey" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
-		<method name="compareTo(Landroid/icu/text/CollationKey;)I"/>
-		<method name="equals(Landroid/icu/text/CollationKey;)Z"/>
-		<method name="getBound(II)Landroid/icu/text/CollationKey;"/>
-		<method name="getSourceString()Ljava/lang/String;"/>
-		<method name="merge(Landroid/icu/text/CollationKey;)Landroid/icu/text/CollationKey;"/>
-		<method name="toByteArray()[B"/>
-	</class>
-	<class name="android/icu/text/CollationKey$BoundMode" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="LOWER"/>
-		<field name="UPPER"/>
-		<field name="UPPER_LONG"/>
-	</class>
-	<class name="android/icu/text/Collator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/util/Freezable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/Comparator"/>
-		<method name="&lt;init>()V"/>
-		<method name="cloneAsThawed()Landroid/icu/text/Collator;"/>
-		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="equals(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="freeze()Landroid/icu/text/Collator;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getAvailableULocales()[Landroid/icu/util/ULocale;"/>
-		<method name="getCollationKey(Ljava/lang/String;)Landroid/icu/text/CollationKey;"/>
-		<method name="getDecomposition()I"/>
-		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getEquivalentReorderCodes(I)[I"/>
-		<method name="getFunctionalEquivalent(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;"/>
-		<method name="getFunctionalEquivalent(Ljava/lang/String;Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
-		<method name="getInstance()Landroid/icu/text/Collator;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/Collator;"/>
-		<method name="getKeywordValues(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="getKeywordValuesForLocale(Ljava/lang/String;Landroid/icu/util/ULocale;Z)[Ljava/lang/String;"/>
-		<method name="getKeywords()[Ljava/lang/String;"/>
-		<method name="getMaxVariable()I"/>
-		<method name="getReorderCodes()[I"/>
-		<method name="getStrength()I"/>
-		<method name="getTailoredSet()Landroid/icu/text/UnicodeSet;"/>
-		<method name="getUCAVersion()Landroid/icu/util/VersionInfo;"/>
-		<method name="getVariableTop()I"/>
-		<method name="getVersion()Landroid/icu/util/VersionInfo;"/>
-		<method name="setDecomposition(I)V"/>
-		<method name="setMaxVariable(I)Landroid/icu/text/Collator;"/>
-		<method name="setReorderCodes([I)V"/>
-		<method name="setStrength(I)V"/>
-		<field name="CANONICAL_DECOMPOSITION"/>
-		<field name="FULL_DECOMPOSITION"/>
-		<field name="IDENTICAL"/>
-		<field name="NO_DECOMPOSITION"/>
-		<field name="PRIMARY"/>
-		<field name="QUATERNARY"/>
-		<field name="SECONDARY"/>
-		<field name="TERTIARY"/>
-	</class>
-	<class name="android/icu/text/Collator$ReorderCodes" since="24">
-		<extends name="java/lang/Object"/>
-		<field name="CURRENCY"/>
-		<field name="DEFAULT"/>
-		<field name="DIGIT"/>
-		<field name="FIRST"/>
-		<field name="NONE"/>
-		<field name="OTHERS"/>
-		<field name="PUNCTUATION"/>
-		<field name="SPACE"/>
-		<field name="SYMBOL"/>
-	</class>
-	<class name="android/icu/text/CompactDecimalFormat" since="24">
-		<extends name="android/icu/text/DecimalFormat"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)V" since="29"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)Landroid/icu/text/CompactDecimalFormat;"/>
-		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)Landroid/icu/text/CompactDecimalFormat;"/>
-	</class>
-	<class name="android/icu/text/CompactDecimalFormat$CompactStyle" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/CompactDecimalFormat$CompactStyle;"/>
-		<method name="values()[Landroid/icu/text/CompactDecimalFormat$CompactStyle;"/>
-		<field name="LONG"/>
-		<field name="SHORT"/>
-	</class>
-	<class name="android/icu/text/CurrencyPluralInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="getCurrencyPluralPattern(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getInstance()Landroid/icu/text/CurrencyPluralInfo;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyPluralInfo;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/CurrencyPluralInfo;"/>
-		<method name="getLocale()Landroid/icu/util/ULocale;"/>
-		<method name="getPluralRules()Landroid/icu/text/PluralRules;"/>
-		<method name="setCurrencyPluralPattern(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setLocale(Landroid/icu/util/ULocale;)V"/>
-		<method name="setPluralRules(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/icu/text/DateFormat" since="24">
-		<extends name="android/icu/text/UFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(Ljava/util/Date;)Ljava/lang/String;"/>
-		<method name="format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getBooleanAttribute(Landroid/icu/text/DateFormat$BooleanAttribute;)Z"/>
-		<method name="getCalendar()Landroid/icu/util/Calendar;"/>
-		<method name="getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;"/>
-		<method name="getDateInstance()Landroid/icu/text/DateFormat;"/>
-		<method name="getDateInstance(I)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateInstance(ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateInstance(Landroid/icu/util/Calendar;I)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateInstance(Landroid/icu/util/Calendar;ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateInstance(Landroid/icu/util/Calendar;ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeInstance()Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeInstance(II)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeInstance(IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeInstance(IILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeInstance(Landroid/icu/util/Calendar;II)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeInstance(Landroid/icu/util/Calendar;IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeInstance(Landroid/icu/util/Calendar;IILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getInstance()Landroid/icu/text/DateFormat;"/>
-		<method name="getInstance(Landroid/icu/util/Calendar;)Landroid/icu/text/DateFormat;"/>
-		<method name="getInstance(Landroid/icu/util/Calendar;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getInstanceForSkeleton(Landroid/icu/util/Calendar;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getInstanceForSkeleton(Landroid/icu/util/Calendar;Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getInstanceForSkeleton(Ljava/lang/String;)Landroid/icu/text/DateFormat;"/>
-		<method name="getInstanceForSkeleton(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getInstanceForSkeleton(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getNumberFormat()Landroid/icu/text/NumberFormat;"/>
-		<method name="getPatternInstance(Landroid/icu/util/Calendar;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getPatternInstance(Landroid/icu/util/Calendar;Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getPatternInstance(Ljava/lang/String;)Landroid/icu/text/DateFormat;"/>
-		<method name="getPatternInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getPatternInstance(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeInstance()Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeInstance(I)Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeInstance(ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeInstance(Landroid/icu/util/Calendar;I)Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeInstance(Landroid/icu/util/Calendar;ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeInstance(Landroid/icu/util/Calendar;ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getTimeZone()Landroid/icu/util/TimeZone;"/>
-		<method name="isCalendarLenient()Z"/>
-		<method name="isLenient()Z"/>
-		<method name="parse(Ljava/lang/String;)Ljava/util/Date;"/>
-		<method name="parse(Ljava/lang/String;Landroid/icu/util/Calendar;Ljava/text/ParsePosition;)V"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;"/>
-		<method name="setBooleanAttribute(Landroid/icu/text/DateFormat$BooleanAttribute;Z)Landroid/icu/text/DateFormat;"/>
-		<method name="setCalendar(Landroid/icu/util/Calendar;)V"/>
-		<method name="setCalendarLenient(Z)V"/>
-		<method name="setContext(Landroid/icu/text/DisplayContext;)V"/>
-		<method name="setLenient(Z)V"/>
-		<method name="setNumberFormat(Landroid/icu/text/NumberFormat;)V"/>
-		<method name="setTimeZone(Landroid/icu/util/TimeZone;)V"/>
-		<field name="ABBR_GENERIC_TZ"/>
-		<field name="ABBR_MONTH"/>
-		<field name="ABBR_MONTH_DAY"/>
-		<field name="ABBR_MONTH_WEEKDAY_DAY"/>
-		<field name="ABBR_QUARTER"/>
-		<field name="ABBR_SPECIFIC_TZ"/>
-		<field name="ABBR_UTC_TZ"/>
-		<field name="ABBR_WEEKDAY"/>
-		<field name="AM_PM_FIELD"/>
-		<field name="AM_PM_MIDNIGHT_NOON_FIELD" since="28"/>
-		<field name="DATE_FIELD"/>
-		<field name="DAY"/>
-		<field name="DAY_OF_WEEK_FIELD"/>
-		<field name="DAY_OF_WEEK_IN_MONTH_FIELD"/>
-		<field name="DAY_OF_YEAR_FIELD"/>
-		<field name="DEFAULT"/>
-		<field name="DOW_LOCAL_FIELD"/>
-		<field name="ERA_FIELD"/>
-		<field name="EXTENDED_YEAR_FIELD"/>
-		<field name="FLEXIBLE_DAY_PERIOD_FIELD" since="28"/>
-		<field name="FRACTIONAL_SECOND_FIELD"/>
-		<field name="FULL"/>
-		<field name="GENERIC_TZ"/>
-		<field name="HOUR"/>
-		<field name="HOUR0_FIELD"/>
-		<field name="HOUR1_FIELD"/>
-		<field name="HOUR24"/>
-		<field name="HOUR24_MINUTE"/>
-		<field name="HOUR24_MINUTE_SECOND"/>
-		<field name="HOUR_MINUTE"/>
-		<field name="HOUR_MINUTE_SECOND"/>
-		<field name="HOUR_OF_DAY0_FIELD"/>
-		<field name="HOUR_OF_DAY1_FIELD"/>
-		<field name="JULIAN_DAY_FIELD"/>
-		<field name="LOCATION_TZ"/>
-		<field name="LONG"/>
-		<field name="MEDIUM"/>
-		<field name="MILLISECONDS_IN_DAY_FIELD"/>
-		<field name="MILLISECOND_FIELD"/>
-		<field name="MINUTE"/>
-		<field name="MINUTE_FIELD"/>
-		<field name="MINUTE_SECOND"/>
-		<field name="MONTH"/>
-		<field name="MONTH_DAY"/>
-		<field name="MONTH_FIELD"/>
-		<field name="MONTH_WEEKDAY_DAY"/>
-		<field name="NONE"/>
-		<field name="NUM_MONTH"/>
-		<field name="NUM_MONTH_DAY"/>
-		<field name="NUM_MONTH_WEEKDAY_DAY"/>
-		<field name="QUARTER"/>
-		<field name="QUARTER_FIELD"/>
-		<field name="RELATIVE"/>
-		<field name="RELATIVE_DEFAULT"/>
-		<field name="RELATIVE_FULL"/>
-		<field name="RELATIVE_LONG"/>
-		<field name="RELATIVE_MEDIUM"/>
-		<field name="RELATIVE_SHORT"/>
-		<field name="SECOND"/>
-		<field name="SECOND_FIELD"/>
-		<field name="SHORT"/>
-		<field name="SPECIFIC_TZ"/>
-		<field name="STANDALONE_DAY_FIELD"/>
-		<field name="STANDALONE_MONTH_FIELD"/>
-		<field name="STANDALONE_QUARTER_FIELD"/>
-		<field name="TIMEZONE_FIELD"/>
-		<field name="TIMEZONE_GENERIC_FIELD"/>
-		<field name="TIMEZONE_ISO_FIELD"/>
-		<field name="TIMEZONE_ISO_LOCAL_FIELD"/>
-		<field name="TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD"/>
-		<field name="TIMEZONE_RFC_FIELD"/>
-		<field name="TIMEZONE_SPECIAL_FIELD"/>
-		<field name="WEEKDAY"/>
-		<field name="WEEK_OF_MONTH_FIELD"/>
-		<field name="WEEK_OF_YEAR_FIELD"/>
-		<field name="YEAR"/>
-		<field name="YEAR_ABBR_MONTH"/>
-		<field name="YEAR_ABBR_MONTH_DAY"/>
-		<field name="YEAR_ABBR_MONTH_WEEKDAY_DAY"/>
-		<field name="YEAR_ABBR_QUARTER"/>
-		<field name="YEAR_FIELD"/>
-		<field name="YEAR_MONTH"/>
-		<field name="YEAR_MONTH_DAY"/>
-		<field name="YEAR_MONTH_WEEKDAY_DAY"/>
-		<field name="YEAR_NAME_FIELD"/>
-		<field name="YEAR_NUM_MONTH"/>
-		<field name="YEAR_NUM_MONTH_DAY"/>
-		<field name="YEAR_NUM_MONTH_WEEKDAY_DAY"/>
-		<field name="YEAR_QUARTER"/>
-		<field name="YEAR_WOY_FIELD"/>
-		<field name="calendar"/>
-		<field name="numberFormat"/>
-	</class>
-	<class name="android/icu/text/DateFormat$BooleanAttribute" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DateFormat$BooleanAttribute;"/>
-		<method name="values()[Landroid/icu/text/DateFormat$BooleanAttribute;"/>
-		<field name="PARSE_ALLOW_NUMERIC"/>
-		<field name="PARSE_ALLOW_WHITESPACE"/>
-		<field name="PARSE_MULTIPLE_PATTERNS_FOR_MATCH" since="26"/>
-		<field name="PARSE_PARTIAL_LITERAL_MATCH" since="26"/>
-	</class>
-	<class name="android/icu/text/DateFormat$Field" since="24">
-		<extends name="java/text/Format$Field"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getCalendarField()I"/>
-		<method name="ofCalendarField(I)Landroid/icu/text/DateFormat$Field;"/>
-		<field name="AM_PM"/>
-		<field name="AM_PM_MIDNIGHT_NOON" since="28"/>
-		<field name="DAY_OF_MONTH"/>
-		<field name="DAY_OF_WEEK"/>
-		<field name="DAY_OF_WEEK_IN_MONTH"/>
-		<field name="DAY_OF_YEAR"/>
-		<field name="DOW_LOCAL"/>
-		<field name="ERA"/>
-		<field name="EXTENDED_YEAR"/>
-		<field name="FLEXIBLE_DAY_PERIOD" since="28"/>
-		<field name="HOUR0"/>
-		<field name="HOUR1"/>
-		<field name="HOUR_OF_DAY0"/>
-		<field name="HOUR_OF_DAY1"/>
-		<field name="JULIAN_DAY"/>
-		<field name="MILLISECOND"/>
-		<field name="MILLISECONDS_IN_DAY"/>
-		<field name="MINUTE"/>
-		<field name="MONTH"/>
-		<field name="QUARTER"/>
-		<field name="SECOND"/>
-		<field name="TIME_ZONE"/>
-		<field name="WEEK_OF_MONTH"/>
-		<field name="WEEK_OF_YEAR"/>
-		<field name="YEAR"/>
-		<field name="YEAR_WOY"/>
-	</class>
-	<class name="android/icu/text/DateFormatSymbols" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/Calendar;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/lang/Class;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/util/ResourceBundle;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/ResourceBundle;Ljava/util/Locale;)V"/>
-		<method name="getAmPmStrings()[Ljava/lang/String;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getEraNames()[Ljava/lang/String;"/>
-		<method name="getEras()[Ljava/lang/String;"/>
-		<method name="getInstance()Landroid/icu/text/DateFormatSymbols;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormatSymbols;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/DateFormatSymbols;"/>
-		<method name="getLocalPatternChars()Ljava/lang/String;"/>
-		<method name="getMonths()[Ljava/lang/String;"/>
-		<method name="getMonths(II)[Ljava/lang/String;"/>
-		<method name="getQuarters(II)[Ljava/lang/String;"/>
-		<method name="getShortMonths()[Ljava/lang/String;"/>
-		<method name="getShortWeekdays()[Ljava/lang/String;"/>
-		<method name="getWeekdays()[Ljava/lang/String;"/>
-		<method name="getWeekdays(II)[Ljava/lang/String;"/>
-		<method name="getYearNames(II)[Ljava/lang/String;"/>
-		<method name="getZodiacNames(II)[Ljava/lang/String;"/>
-		<method name="getZoneStrings()[[Ljava/lang/String;"/>
-		<method name="initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V"/>
-		<method name="setAmPmStrings([Ljava/lang/String;)V"/>
-		<method name="setEraNames([Ljava/lang/String;)V"/>
-		<method name="setEras([Ljava/lang/String;)V"/>
-		<method name="setLocalPatternChars(Ljava/lang/String;)V"/>
-		<method name="setMonths([Ljava/lang/String;)V"/>
-		<method name="setMonths([Ljava/lang/String;II)V"/>
-		<method name="setQuarters([Ljava/lang/String;II)V"/>
-		<method name="setShortMonths([Ljava/lang/String;)V"/>
-		<method name="setShortWeekdays([Ljava/lang/String;)V"/>
-		<method name="setWeekdays([Ljava/lang/String;)V"/>
-		<method name="setWeekdays([Ljava/lang/String;II)V"/>
-		<method name="setYearNames([Ljava/lang/String;II)V"/>
-		<method name="setZodiacNames([Ljava/lang/String;II)V"/>
-		<method name="setZoneStrings([[Ljava/lang/String;)V"/>
-		<field name="ABBREVIATED"/>
-		<field name="FORMAT"/>
-		<field name="NARROW"/>
-		<field name="SHORT"/>
-		<field name="STANDALONE"/>
-		<field name="WIDE"/>
-	</class>
-	<class name="android/icu/text/DateIntervalFormat" since="24">
-		<extends name="android/icu/text/UFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(Landroid/icu/util/DateInterval;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="getDateFormat()Landroid/icu/text/DateFormat;"/>
-		<method name="getDateIntervalInfo()Landroid/icu/text/DateIntervalInfo;"/>
-		<method name="getInstance(Ljava/lang/String;)Landroid/icu/text/DateIntervalFormat;"/>
-		<method name="getInstance(Ljava/lang/String;Landroid/icu/text/DateIntervalInfo;)Landroid/icu/text/DateIntervalFormat;"/>
-		<method name="getInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateIntervalFormat;"/>
-		<method name="getInstance(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/text/DateIntervalInfo;)Landroid/icu/text/DateIntervalFormat;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateIntervalFormat;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/util/Locale;Landroid/icu/text/DateIntervalInfo;)Landroid/icu/text/DateIntervalFormat;"/>
-		<method name="getTimeZone()Landroid/icu/util/TimeZone;"/>
-		<method name="setDateIntervalInfo(Landroid/icu/text/DateIntervalInfo;)V"/>
-		<method name="setTimeZone(Landroid/icu/util/TimeZone;)V"/>
-	</class>
-	<class name="android/icu/text/DateIntervalInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/util/Freezable"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="cloneAsThawed()Landroid/icu/text/DateIntervalInfo;"/>
-		<method name="freeze()Landroid/icu/text/DateIntervalInfo;"/>
-		<method name="getDefaultOrder()Z"/>
-		<method name="getFallbackIntervalPattern()Ljava/lang/String;"/>
-		<method name="getIntervalPattern(Ljava/lang/String;I)Landroid/icu/text/DateIntervalInfo$PatternInfo;"/>
-		<method name="setFallbackIntervalPattern(Ljava/lang/String;)V"/>
-		<method name="setIntervalPattern(Ljava/lang/String;ILjava/lang/String;)V"/>
-	</class>
-	<class name="android/icu/text/DateIntervalInfo$PatternInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Z)V"/>
-		<method name="firstDateInPtnIsLaterDate()Z"/>
-		<method name="getFirstPart()Ljava/lang/String;"/>
-		<method name="getSecondPart()Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/text/DateTimePatternGenerator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/util/Freezable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPattern(Ljava/lang/String;ZLandroid/icu/text/DateTimePatternGenerator$PatternInfo;)Landroid/icu/text/DateTimePatternGenerator;"/>
-		<method name="cloneAsThawed()Landroid/icu/text/DateTimePatternGenerator;"/>
-		<method name="freeze()Landroid/icu/text/DateTimePatternGenerator;"/>
-		<method name="getAppendItemFormat(I)Ljava/lang/String;"/>
-		<method name="getAppendItemName(I)Ljava/lang/String;"/>
-		<method name="getBaseSkeleton(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getBaseSkeletons(Ljava/util/Set;)Ljava/util/Set;"/>
-		<method name="getBestPattern(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getBestPattern(Ljava/lang/String;I)Ljava/lang/String;"/>
-		<method name="getDateTimeFormat()Ljava/lang/String;"/>
-		<method name="getDecimal()Ljava/lang/String;"/>
-		<method name="getEmptyInstance()Landroid/icu/text/DateTimePatternGenerator;"/>
-		<method name="getInstance()Landroid/icu/text/DateTimePatternGenerator;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateTimePatternGenerator;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/DateTimePatternGenerator;"/>
-		<method name="getSkeleton(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getSkeletons(Ljava/util/Map;)Ljava/util/Map;"/>
-		<method name="replaceFieldTypes(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="replaceFieldTypes(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;"/>
-		<method name="setAppendItemFormat(ILjava/lang/String;)V"/>
-		<method name="setAppendItemName(ILjava/lang/String;)V"/>
-		<method name="setDateTimeFormat(Ljava/lang/String;)V"/>
-		<method name="setDecimal(Ljava/lang/String;)V"/>
-		<field name="DAY"/>
-		<field name="DAYPERIOD"/>
-		<field name="DAY_OF_WEEK_IN_MONTH"/>
-		<field name="DAY_OF_YEAR"/>
-		<field name="ERA"/>
-		<field name="FRACTIONAL_SECOND"/>
-		<field name="HOUR"/>
-		<field name="MATCH_ALL_FIELDS_LENGTH"/>
-		<field name="MATCH_HOUR_FIELD_LENGTH"/>
-		<field name="MATCH_NO_OPTIONS"/>
-		<field name="MINUTE"/>
-		<field name="MONTH"/>
-		<field name="QUARTER"/>
-		<field name="SECOND"/>
-		<field name="WEEKDAY"/>
-		<field name="WEEK_OF_MONTH"/>
-		<field name="WEEK_OF_YEAR"/>
-		<field name="YEAR"/>
-		<field name="ZONE"/>
-	</class>
-	<class name="android/icu/text/DateTimePatternGenerator$PatternInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BASE_CONFLICT"/>
-		<field name="CONFLICT"/>
-		<field name="OK"/>
-		<field name="conflictingPattern"/>
-		<field name="status"/>
-	</class>
-	<class name="android/icu/text/DecimalFormat" since="24">
-		<extends name="android/icu/text/NumberFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/CurrencyPluralInfo;I)V"/>
-		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="areSignificantDigitsUsed()Z"/>
-		<method name="getCurrencyPluralInfo()Landroid/icu/text/CurrencyPluralInfo;"/>
-		<method name="getCurrencyUsage()Landroid/icu/util/Currency$CurrencyUsage;"/>
-		<method name="getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;"/>
-		<method name="getFormatWidth()I"/>
-		<method name="getGroupingSize()I"/>
-		<method name="getMathContext()Ljava/math/MathContext;"/>
-		<method name="getMathContextICU()Landroid/icu/math/MathContext;"/>
-		<method name="getMaximumSignificantDigits()I"/>
-		<method name="getMinimumExponentDigits()B"/>
-		<method name="getMinimumSignificantDigits()I"/>
-		<method name="getMultiplier()I"/>
-		<method name="getNegativePrefix()Ljava/lang/String;"/>
-		<method name="getNegativeSuffix()Ljava/lang/String;"/>
-		<method name="getPadCharacter()C"/>
-		<method name="getPadPosition()I"/>
-		<method name="getParseMaxDigits()I" deprecated="28"/>
-		<method name="getPositivePrefix()Ljava/lang/String;"/>
-		<method name="getPositiveSuffix()Ljava/lang/String;"/>
-		<method name="getRoundingIncrement()Ljava/math/BigDecimal;"/>
-		<method name="getSecondaryGroupingSize()I"/>
-		<method name="isDecimalPatternMatchRequired()Z"/>
-		<method name="isDecimalSeparatorAlwaysShown()Z"/>
-		<method name="isExponentSignAlwaysShown()Z"/>
-		<method name="isParseBigDecimal()Z"/>
-		<method name="isScientificNotation()Z"/>
-		<method name="setCurrencyPluralInfo(Landroid/icu/text/CurrencyPluralInfo;)V"/>
-		<method name="setCurrencyUsage(Landroid/icu/util/Currency$CurrencyUsage;)V"/>
-		<method name="setDecimalFormatSymbols(Landroid/icu/text/DecimalFormatSymbols;)V"/>
-		<method name="setDecimalPatternMatchRequired(Z)V"/>
-		<method name="setDecimalSeparatorAlwaysShown(Z)V"/>
-		<method name="setExponentSignAlwaysShown(Z)V"/>
-		<method name="setFormatWidth(I)V"/>
-		<method name="setGroupingSize(I)V"/>
-		<method name="setMathContext(Ljava/math/MathContext;)V"/>
-		<method name="setMathContextICU(Landroid/icu/math/MathContext;)V"/>
-		<method name="setMaximumSignificantDigits(I)V"/>
-		<method name="setMinimumExponentDigits(B)V"/>
-		<method name="setMinimumSignificantDigits(I)V"/>
-		<method name="setMultiplier(I)V"/>
-		<method name="setNegativePrefix(Ljava/lang/String;)V"/>
-		<method name="setNegativeSuffix(Ljava/lang/String;)V"/>
-		<method name="setPadCharacter(C)V"/>
-		<method name="setPadPosition(I)V"/>
-		<method name="setParseBigDecimal(Z)V"/>
-		<method name="setParseMaxDigits(I)V" deprecated="28"/>
-		<method name="setPositivePrefix(Ljava/lang/String;)V"/>
-		<method name="setPositiveSuffix(Ljava/lang/String;)V"/>
-		<method name="setRoundingIncrement(D)V"/>
-		<method name="setRoundingIncrement(Landroid/icu/math/BigDecimal;)V"/>
-		<method name="setRoundingIncrement(Ljava/math/BigDecimal;)V"/>
-		<method name="setScientificNotation(Z)V"/>
-		<method name="setSecondaryGroupingSize(I)V"/>
-		<method name="setSignificantDigitsUsed(Z)V"/>
-		<method name="toLocalizedPattern()Ljava/lang/String;"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-		<field name="PAD_AFTER_PREFIX"/>
-		<field name="PAD_AFTER_SUFFIX"/>
-		<field name="PAD_BEFORE_PREFIX"/>
-		<field name="PAD_BEFORE_SUFFIX"/>
-	</class>
-	<class name="android/icu/text/DecimalFormatSymbols" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCurrency()Landroid/icu/util/Currency;"/>
-		<method name="getCurrencySymbol()Ljava/lang/String;"/>
-		<method name="getDecimalSeparator()C"/>
-		<method name="getDecimalSeparatorString()Ljava/lang/String;" since="28"/>
-		<method name="getDigit()C"/>
-		<method name="getDigitStrings()[Ljava/lang/String;" since="28"/>
-		<method name="getDigits()[C"/>
-		<method name="getExponentMultiplicationSign()Ljava/lang/String;"/>
-		<method name="getExponentSeparator()Ljava/lang/String;"/>
-		<method name="getGroupingSeparator()C"/>
-		<method name="getGroupingSeparatorString()Ljava/lang/String;" since="28"/>
-		<method name="getInfinity()Ljava/lang/String;"/>
-		<method name="getInstance()Landroid/icu/text/DecimalFormatSymbols;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DecimalFormatSymbols;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/DecimalFormatSymbols;"/>
-		<method name="getInternationalCurrencySymbol()Ljava/lang/String;"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getMinusSign()C"/>
-		<method name="getMinusSignString()Ljava/lang/String;" since="28"/>
-		<method name="getMonetaryDecimalSeparator()C"/>
-		<method name="getMonetaryDecimalSeparatorString()Ljava/lang/String;" since="28"/>
-		<method name="getMonetaryGroupingSeparator()C"/>
-		<method name="getMonetaryGroupingSeparatorString()Ljava/lang/String;" since="28"/>
-		<method name="getNaN()Ljava/lang/String;"/>
-		<method name="getPadEscape()C"/>
-		<method name="getPatternForCurrencySpacing(IZ)Ljava/lang/String;"/>
-		<method name="getPatternSeparator()C"/>
-		<method name="getPerMill()C"/>
-		<method name="getPerMillString()Ljava/lang/String;" since="28"/>
-		<method name="getPercent()C"/>
-		<method name="getPercentString()Ljava/lang/String;" since="28"/>
-		<method name="getPlusSign()C"/>
-		<method name="getPlusSignString()Ljava/lang/String;" since="28"/>
-		<method name="getSignificantDigit()C"/>
-		<method name="getULocale()Landroid/icu/util/ULocale;"/>
-		<method name="getZeroDigit()C"/>
-		<method name="setCurrency(Landroid/icu/util/Currency;)V"/>
-		<method name="setCurrencySymbol(Ljava/lang/String;)V"/>
-		<method name="setDecimalSeparator(C)V"/>
-		<method name="setDecimalSeparatorString(Ljava/lang/String;)V" since="28"/>
-		<method name="setDigit(C)V"/>
-		<method name="setDigitStrings([Ljava/lang/String;)V" since="28"/>
-		<method name="setExponentMultiplicationSign(Ljava/lang/String;)V"/>
-		<method name="setExponentSeparator(Ljava/lang/String;)V"/>
-		<method name="setGroupingSeparator(C)V"/>
-		<method name="setGroupingSeparatorString(Ljava/lang/String;)V" since="28"/>
-		<method name="setInfinity(Ljava/lang/String;)V"/>
-		<method name="setInternationalCurrencySymbol(Ljava/lang/String;)V"/>
-		<method name="setMinusSign(C)V"/>
-		<method name="setMinusSignString(Ljava/lang/String;)V" since="28"/>
-		<method name="setMonetaryDecimalSeparator(C)V"/>
-		<method name="setMonetaryDecimalSeparatorString(Ljava/lang/String;)V" since="28"/>
-		<method name="setMonetaryGroupingSeparator(C)V"/>
-		<method name="setMonetaryGroupingSeparatorString(Ljava/lang/String;)V" since="28"/>
-		<method name="setNaN(Ljava/lang/String;)V"/>
-		<method name="setPadEscape(C)V"/>
-		<method name="setPatternForCurrencySpacing(IZLjava/lang/String;)V"/>
-		<method name="setPatternSeparator(C)V"/>
-		<method name="setPerMill(C)V"/>
-		<method name="setPerMillString(Ljava/lang/String;)V" since="28"/>
-		<method name="setPercent(C)V"/>
-		<method name="setPercentString(Ljava/lang/String;)V" since="28"/>
-		<method name="setPlusSign(C)V"/>
-		<method name="setPlusSignString(Ljava/lang/String;)V" since="28"/>
-		<method name="setSignificantDigit(C)V"/>
-		<method name="setZeroDigit(C)V"/>
-		<field name="CURRENCY_SPC_CURRENCY_MATCH"/>
-		<field name="CURRENCY_SPC_INSERT"/>
-		<field name="CURRENCY_SPC_SURROUNDING_MATCH"/>
-	</class>
-	<class name="android/icu/text/DisplayContext" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="type()Landroid/icu/text/DisplayContext$Type;"/>
-		<method name="value()I"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DisplayContext;"/>
-		<method name="values()[Landroid/icu/text/DisplayContext;"/>
-		<field name="CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE"/>
-		<field name="CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE"/>
-		<field name="CAPITALIZATION_FOR_STANDALONE"/>
-		<field name="CAPITALIZATION_FOR_UI_LIST_OR_MENU"/>
-		<field name="CAPITALIZATION_NONE"/>
-		<field name="DIALECT_NAMES"/>
-		<field name="LENGTH_FULL"/>
-		<field name="LENGTH_SHORT"/>
-		<field name="NO_SUBSTITUTE" since="28"/>
-		<field name="STANDARD_NAMES"/>
-		<field name="SUBSTITUTE" since="28"/>
-	</class>
-	<class name="android/icu/text/DisplayContext$Type" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DisplayContext$Type;"/>
-		<method name="values()[Landroid/icu/text/DisplayContext$Type;"/>
-		<field name="CAPITALIZATION"/>
-		<field name="DIALECT_HANDLING"/>
-		<field name="DISPLAY_LENGTH"/>
-		<field name="SUBSTITUTE_HANDLING" since="28"/>
-	</class>
-	<class name="android/icu/text/IDNA" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="29"/>
-		<method name="getUTS46Instance(I)Landroid/icu/text/IDNA;"/>
-		<method name="labelToASCII(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
-		<method name="labelToUnicode(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
-		<method name="nameToASCII(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
-		<method name="nameToUnicode(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
-		<field name="CHECK_BIDI"/>
-		<field name="CHECK_CONTEXTJ"/>
-		<field name="CHECK_CONTEXTO"/>
-		<field name="DEFAULT"/>
-		<field name="NONTRANSITIONAL_TO_ASCII"/>
-		<field name="NONTRANSITIONAL_TO_UNICODE"/>
-		<field name="USE_STD3_RULES"/>
-	</class>
-	<class name="android/icu/text/IDNA$Error" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/IDNA$Error;"/>
-		<method name="values()[Landroid/icu/text/IDNA$Error;"/>
-		<field name="BIDI"/>
-		<field name="CONTEXTJ"/>
-		<field name="CONTEXTO_DIGITS"/>
-		<field name="CONTEXTO_PUNCTUATION"/>
-		<field name="DISALLOWED"/>
-		<field name="DOMAIN_NAME_TOO_LONG"/>
-		<field name="EMPTY_LABEL"/>
-		<field name="HYPHEN_3_4"/>
-		<field name="INVALID_ACE_LABEL"/>
-		<field name="LABEL_HAS_DOT"/>
-		<field name="LABEL_TOO_LONG"/>
-		<field name="LEADING_COMBINING_MARK"/>
-		<field name="LEADING_HYPHEN"/>
-		<field name="PUNYCODE"/>
-		<field name="TRAILING_HYPHEN"/>
-	</class>
-	<class name="android/icu/text/IDNA$Info" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getErrors()Ljava/util/Set;"/>
-		<method name="hasErrors()Z"/>
-		<method name="isTransitionalDifferent()Z"/>
-	</class>
-	<class name="android/icu/text/ListFormatter" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="29" deprecated="29"/>
-		<method name="format(Ljava/util/Collection;)Ljava/lang/String;"/>
-		<method name="format([Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="getInstance()Landroid/icu/text/ListFormatter;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/ListFormatter;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/ListFormatter;"/>
-		<method name="getPatternForNumItems(I)Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/text/LocaleDisplayNames" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="29"/>
-		<method name="getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;"/>
-		<method name="getDialectHandling()Landroid/icu/text/LocaleDisplayNames$DialectHandling;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/LocaleDisplayNames;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/LocaleDisplayNames$DialectHandling;)Landroid/icu/text/LocaleDisplayNames;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/LocaleDisplayNames;"/>
-		<method name="getInstance(Ljava/util/Locale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;"/>
-		<method name="getLocale()Landroid/icu/util/ULocale;"/>
-		<method name="getUiList(Ljava/util/Set;ZLjava/util/Comparator;)Ljava/util/List;" since="26"/>
-		<method name="getUiListCompareWholeItems(Ljava/util/Set;Ljava/util/Comparator;)Ljava/util/List;" since="26"/>
-		<method name="keyDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="keyValueDisplayName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="languageDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="localeDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="localeDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="localeDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="regionDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="scriptDisplayName(I)Ljava/lang/String;"/>
-		<method name="scriptDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="variantDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/text/LocaleDisplayNames$DialectHandling" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/LocaleDisplayNames$DialectHandling;"/>
-		<method name="values()[Landroid/icu/text/LocaleDisplayNames$DialectHandling;"/>
-		<field name="DIALECT_NAMES"/>
-		<field name="STANDARD_NAMES"/>
-	</class>
-	<class name="android/icu/text/LocaleDisplayNames$UiListItem" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getComparator(Ljava/util/Comparator;Z)Ljava/util/Comparator;"/>
-		<field name="minimized"/>
-		<field name="modified"/>
-		<field name="nameInDisplayLocale"/>
-		<field name="nameInSelf"/>
-	</class>
-	<class name="android/icu/text/MeasureFormat" since="24">
-		<extends name="android/icu/text/UFormat"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$FormatWidth;)V" since="29"/>
-		<method name="formatMeasurePerUnit(Landroid/icu/util/Measure;Landroid/icu/util/MeasureUnit;Ljava/lang/StringBuilder;Ljava/text/FieldPosition;)Ljava/lang/StringBuilder;" since="26"/>
-		<method name="formatMeasures(Ljava/lang/StringBuilder;Ljava/text/FieldPosition;[Landroid/icu/util/Measure;)Ljava/lang/StringBuilder;"/>
-		<method name="formatMeasures([Landroid/icu/util/Measure;)Ljava/lang/String;"/>
-		<method name="getCurrencyFormat()Landroid/icu/text/MeasureFormat;"/>
-		<method name="getCurrencyFormat(Landroid/icu/util/ULocale;)Landroid/icu/text/MeasureFormat;"/>
-		<method name="getCurrencyFormat(Ljava/util/Locale;)Landroid/icu/text/MeasureFormat;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$FormatWidth;)Landroid/icu/text/MeasureFormat;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$FormatWidth;Landroid/icu/text/NumberFormat;)Landroid/icu/text/MeasureFormat;"/>
-		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/MeasureFormat$FormatWidth;)Landroid/icu/text/MeasureFormat;"/>
-		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/MeasureFormat$FormatWidth;Landroid/icu/text/NumberFormat;)Landroid/icu/text/MeasureFormat;"/>
-		<method name="getLocale()Landroid/icu/util/ULocale;"/>
-		<method name="getNumberFormat()Landroid/icu/text/NumberFormat;"/>
-		<method name="getUnitDisplayName(Landroid/icu/util/MeasureUnit;)Ljava/lang/String;" since="28"/>
-		<method name="getWidth()Landroid/icu/text/MeasureFormat$FormatWidth;"/>
-		<method name="parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Landroid/icu/util/Measure;"/>
-	</class>
-	<class name="android/icu/text/MeasureFormat$FormatWidth" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MeasureFormat$FormatWidth;"/>
-		<method name="values()[Landroid/icu/text/MeasureFormat$FormatWidth;"/>
-		<field name="NARROW"/>
-		<field name="NUMERIC"/>
-		<field name="SHORT"/>
-		<field name="WIDE"/>
-	</class>
-	<class name="android/icu/text/MessageFormat" since="24">
-		<extends name="android/icu/text/UFormat"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="applyPattern(Ljava/lang/String;Landroid/icu/text/MessagePattern$ApostropheMode;)V"/>
-		<method name="autoQuoteApostrophe(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="format(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/String;"/>
-		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="format(Ljava/util/Map;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format([Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="getApostropheMode()Landroid/icu/text/MessagePattern$ApostropheMode;"/>
-		<method name="getArgumentNames()Ljava/util/Set;"/>
-		<method name="getFormatByArgumentName(Ljava/lang/String;)Ljava/text/Format;"/>
-		<method name="getFormats()[Ljava/text/Format;"/>
-		<method name="getFormatsByArgumentIndex()[Ljava/text/Format;"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getULocale()Landroid/icu/util/ULocale;"/>
-		<method name="parse(Ljava/lang/String;)[Ljava/lang/Object;"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)[Ljava/lang/Object;"/>
-		<method name="parseToMap(Ljava/lang/String;)Ljava/util/Map;"/>
-		<method name="parseToMap(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Map;"/>
-		<method name="setFormat(ILjava/text/Format;)V"/>
-		<method name="setFormatByArgumentIndex(ILjava/text/Format;)V"/>
-		<method name="setFormatByArgumentName(Ljava/lang/String;Ljava/text/Format;)V"/>
-		<method name="setFormats([Ljava/text/Format;)V"/>
-		<method name="setFormatsByArgumentIndex([Ljava/text/Format;)V"/>
-		<method name="setFormatsByArgumentName(Ljava/util/Map;)V"/>
-		<method name="setLocale(Landroid/icu/util/ULocale;)V"/>
-		<method name="setLocale(Ljava/util/Locale;)V"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-		<method name="usesNamedArguments()Z"/>
-	</class>
-	<class name="android/icu/text/MessageFormat$Field" since="24">
-		<extends name="java/text/Format$Field"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="ARGUMENT"/>
-	</class>
-	<class name="android/icu/text/MessagePattern" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/util/Freezable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/icu/text/MessagePattern$ApostropheMode;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="autoQuoteApostropheDeep()Ljava/lang/String;"/>
-		<method name="clear()V"/>
-		<method name="clearPatternAndSetApostropheMode(Landroid/icu/text/MessagePattern$ApostropheMode;)V"/>
-		<method name="cloneAsThawed()Landroid/icu/text/MessagePattern;"/>
-		<method name="countParts()I"/>
-		<method name="freeze()Landroid/icu/text/MessagePattern;"/>
-		<method name="getApostropheMode()Landroid/icu/text/MessagePattern$ApostropheMode;"/>
-		<method name="getLimitPartIndex(I)I"/>
-		<method name="getNumericValue(Landroid/icu/text/MessagePattern$Part;)D"/>
-		<method name="getPart(I)Landroid/icu/text/MessagePattern$Part;"/>
-		<method name="getPartType(I)Landroid/icu/text/MessagePattern$Part$Type;"/>
-		<method name="getPatternIndex(I)I"/>
-		<method name="getPatternString()Ljava/lang/String;"/>
-		<method name="getPluralOffset(I)D"/>
-		<method name="getSubstring(Landroid/icu/text/MessagePattern$Part;)Ljava/lang/String;"/>
-		<method name="hasNamedArguments()Z"/>
-		<method name="hasNumberedArguments()Z"/>
-		<method name="parse(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
-		<method name="parseChoiceStyle(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
-		<method name="parsePluralStyle(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
-		<method name="parseSelectStyle(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
-		<method name="partSubstringMatches(Landroid/icu/text/MessagePattern$Part;Ljava/lang/String;)Z"/>
-		<method name="validateArgumentName(Ljava/lang/String;)I"/>
-		<field name="ARG_NAME_NOT_NUMBER"/>
-		<field name="ARG_NAME_NOT_VALID"/>
-		<field name="NO_NUMERIC_VALUE"/>
-	</class>
-	<class name="android/icu/text/MessagePattern$ApostropheMode" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MessagePattern$ApostropheMode;"/>
-		<method name="values()[Landroid/icu/text/MessagePattern$ApostropheMode;"/>
-		<field name="DOUBLE_OPTIONAL"/>
-		<field name="DOUBLE_REQUIRED"/>
-	</class>
-	<class name="android/icu/text/MessagePattern$ArgType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="hasPluralStyle()Z"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MessagePattern$ArgType;"/>
-		<method name="values()[Landroid/icu/text/MessagePattern$ArgType;"/>
-		<field name="CHOICE"/>
-		<field name="NONE"/>
-		<field name="PLURAL"/>
-		<field name="SELECT"/>
-		<field name="SELECTORDINAL"/>
-		<field name="SIMPLE"/>
-	</class>
-	<class name="android/icu/text/MessagePattern$Part" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/icu/text/MessagePattern$Part$Type;III)V" since="29"/>
-		<method name="getArgType()Landroid/icu/text/MessagePattern$ArgType;"/>
-		<method name="getIndex()I"/>
-		<method name="getLength()I"/>
-		<method name="getLimit()I"/>
-		<method name="getType()Landroid/icu/text/MessagePattern$Part$Type;"/>
-		<method name="getValue()I"/>
-	</class>
-	<class name="android/icu/text/MessagePattern$Part$Type" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="hasNumericValue()Z"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MessagePattern$Part$Type;"/>
-		<method name="values()[Landroid/icu/text/MessagePattern$Part$Type;"/>
-		<field name="ARG_DOUBLE"/>
-		<field name="ARG_INT"/>
-		<field name="ARG_LIMIT"/>
-		<field name="ARG_NAME"/>
-		<field name="ARG_NUMBER"/>
-		<field name="ARG_SELECTOR"/>
-		<field name="ARG_START"/>
-		<field name="ARG_STYLE"/>
-		<field name="ARG_TYPE"/>
-		<field name="INSERT_CHAR"/>
-		<field name="MSG_LIMIT"/>
-		<field name="MSG_START"/>
-		<field name="REPLACE_NUMBER"/>
-		<field name="SKIP_SYNTAX"/>
-	</class>
-	<class name="android/icu/text/Normalizer" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="compare(III)I"/>
-		<method name="compare(ILjava/lang/String;I)I"/>
-		<method name="compare(Ljava/lang/String;Ljava/lang/String;I)I"/>
-		<method name="compare([CII[CIII)I"/>
-		<method name="compare([C[CI)I"/>
-		<field name="COMPARE_CODE_POINT_ORDER"/>
-		<field name="COMPARE_IGNORE_CASE"/>
-		<field name="FOLD_CASE_DEFAULT"/>
-		<field name="FOLD_CASE_EXCLUDE_SPECIAL_I"/>
-		<field name="INPUT_IS_FCD"/>
-		<field name="MAYBE"/>
-		<field name="NO"/>
-		<field name="YES"/>
-	</class>
-	<class name="android/icu/text/Normalizer$QuickCheckResult" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-	</class>
-	<class name="android/icu/text/Normalizer2" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="29"/>
-		<method name="append(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
-		<method name="composePair(II)I"/>
-		<method name="getCombiningClass(I)I"/>
-		<method name="getDecomposition(I)Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/io/InputStream;Ljava/lang/String;Landroid/icu/text/Normalizer2$Mode;)Landroid/icu/text/Normalizer2;"/>
-		<method name="getNFCInstance()Landroid/icu/text/Normalizer2;"/>
-		<method name="getNFDInstance()Landroid/icu/text/Normalizer2;"/>
-		<method name="getNFKCCasefoldInstance()Landroid/icu/text/Normalizer2;"/>
-		<method name="getNFKCInstance()Landroid/icu/text/Normalizer2;"/>
-		<method name="getNFKDInstance()Landroid/icu/text/Normalizer2;"/>
-		<method name="getRawDecomposition(I)Ljava/lang/String;"/>
-		<method name="hasBoundaryAfter(I)Z"/>
-		<method name="hasBoundaryBefore(I)Z"/>
-		<method name="isInert(I)Z"/>
-		<method name="isNormalized(Ljava/lang/CharSequence;)Z"/>
-		<method name="normalize(Ljava/lang/CharSequence;)Ljava/lang/String;"/>
-		<method name="normalize(Ljava/lang/CharSequence;Ljava/lang/Appendable;)Ljava/lang/Appendable;"/>
-		<method name="normalize(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;"/>
-		<method name="normalizeSecondAndAppend(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
-		<method name="quickCheck(Ljava/lang/CharSequence;)Landroid/icu/text/Normalizer$QuickCheckResult;"/>
-		<method name="spanQuickCheckYes(Ljava/lang/CharSequence;)I"/>
-	</class>
-	<class name="android/icu/text/Normalizer2$Mode" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/Normalizer2$Mode;"/>
-		<method name="values()[Landroid/icu/text/Normalizer2$Mode;"/>
-		<field name="COMPOSE"/>
-		<field name="COMPOSE_CONTIGUOUS"/>
-		<field name="DECOMPOSE"/>
-		<field name="FCD"/>
-	</class>
-	<class name="android/icu/text/NumberFormat" since="24">
-		<extends name="android/icu/text/UFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(D)Ljava/lang/String;"/>
-		<method name="format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(J)Ljava/lang/String;"/>
-		<method name="format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(Landroid/icu/math/BigDecimal;)Ljava/lang/String;"/>
-		<method name="format(Landroid/icu/math/BigDecimal;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(Landroid/icu/util/CurrencyAmount;)Ljava/lang/String;"/>
-		<method name="format(Landroid/icu/util/CurrencyAmount;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(Ljava/math/BigDecimal;)Ljava/lang/String;"/>
-		<method name="format(Ljava/math/BigDecimal;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(Ljava/math/BigInteger;)Ljava/lang/String;"/>
-		<method name="format(Ljava/math/BigInteger;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;"/>
-		<method name="getCurrency()Landroid/icu/util/Currency;"/>
-		<method name="getCurrencyInstance()Landroid/icu/text/NumberFormat;"/>
-		<method name="getCurrencyInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getCurrencyInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getInstance()Landroid/icu/text/NumberFormat;"/>
-		<method name="getInstance(I)Landroid/icu/text/NumberFormat;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getInstance(Ljava/util/Locale;I)Landroid/icu/text/NumberFormat;"/>
-		<method name="getIntegerInstance()Landroid/icu/text/NumberFormat;"/>
-		<method name="getIntegerInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getIntegerInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getMaximumFractionDigits()I"/>
-		<method name="getMaximumIntegerDigits()I"/>
-		<method name="getMinimumFractionDigits()I"/>
-		<method name="getMinimumIntegerDigits()I"/>
-		<method name="getNumberInstance()Landroid/icu/text/NumberFormat;"/>
-		<method name="getNumberInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getNumberInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getPattern(Landroid/icu/util/ULocale;I)Ljava/lang/String;"/>
-		<method name="getPercentInstance()Landroid/icu/text/NumberFormat;"/>
-		<method name="getPercentInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getPercentInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getRoundingMode()I"/>
-		<method name="getScientificInstance()Landroid/icu/text/NumberFormat;"/>
-		<method name="getScientificInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="getScientificInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
-		<method name="isGroupingUsed()Z"/>
-		<method name="isParseIntegerOnly()Z"/>
-		<method name="isParseStrict()Z"/>
-		<method name="parse(Ljava/lang/String;)Ljava/lang/Number;"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;"/>
-		<method name="parseCurrency(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Landroid/icu/util/CurrencyAmount;"/>
-		<method name="setContext(Landroid/icu/text/DisplayContext;)V"/>
-		<method name="setCurrency(Landroid/icu/util/Currency;)V"/>
-		<method name="setGroupingUsed(Z)V"/>
-		<method name="setMaximumFractionDigits(I)V"/>
-		<method name="setMaximumIntegerDigits(I)V"/>
-		<method name="setMinimumFractionDigits(I)V"/>
-		<method name="setMinimumIntegerDigits(I)V"/>
-		<method name="setParseIntegerOnly(Z)V"/>
-		<method name="setParseStrict(Z)V"/>
-		<method name="setRoundingMode(I)V"/>
-		<field name="ACCOUNTINGCURRENCYSTYLE"/>
-		<field name="CASHCURRENCYSTYLE"/>
-		<field name="CURRENCYSTYLE"/>
-		<field name="FRACTION_FIELD"/>
-		<field name="INTEGERSTYLE"/>
-		<field name="INTEGER_FIELD"/>
-		<field name="ISOCURRENCYSTYLE"/>
-		<field name="NUMBERSTYLE"/>
-		<field name="PERCENTSTYLE"/>
-		<field name="PLURALCURRENCYSTYLE"/>
-		<field name="SCIENTIFICSTYLE"/>
-		<field name="STANDARDCURRENCYSTYLE" since="26"/>
-	</class>
-	<class name="android/icu/text/NumberFormat$Field" since="24">
-		<extends name="java/text/Format$Field"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="CURRENCY"/>
-		<field name="DECIMAL_SEPARATOR"/>
-		<field name="EXPONENT"/>
-		<field name="EXPONENT_SIGN"/>
-		<field name="EXPONENT_SYMBOL"/>
-		<field name="FRACTION"/>
-		<field name="GROUPING_SEPARATOR"/>
-		<field name="INTEGER"/>
-		<field name="PERCENT"/>
-		<field name="PERMILLE"/>
-		<field name="SIGN"/>
-	</class>
-	<class name="android/icu/text/NumberingSystem" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAvailableNames()[Ljava/lang/String;"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getInstance()Landroid/icu/text/NumberingSystem;"/>
-		<method name="getInstance(IZLjava/lang/String;)Landroid/icu/text/NumberingSystem;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/NumberingSystem;"/>
-		<method name="getInstanceByName(Ljava/lang/String;)Landroid/icu/text/NumberingSystem;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getRadix()I"/>
-		<method name="isAlgorithmic()Z"/>
-		<method name="isValidDigitString(Ljava/lang/String;)Z"/>
-	</class>
-	<class name="android/icu/text/PluralFormat" since="24">
-		<extends name="android/icu/text/UFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/icu/text/PluralRules;)V"/>
-		<method name="&lt;init>(Landroid/icu/text/PluralRules;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;Landroid/icu/text/PluralRules$PluralType;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;Landroid/icu/text/PluralRules;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="equals(Landroid/icu/text/PluralFormat;)Z"/>
-		<method name="format(D)Ljava/lang/String;"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;"/>
-		<method name="setNumberFormat(Landroid/icu/text/NumberFormat;)V"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/text/PluralRules" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="createRules(Ljava/lang/String;)Landroid/icu/text/PluralRules;"/>
-		<method name="equals(Landroid/icu/text/PluralRules;)Z"/>
-		<method name="forLocale(Landroid/icu/util/ULocale;)Landroid/icu/text/PluralRules;"/>
-		<method name="forLocale(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;)Landroid/icu/text/PluralRules;"/>
-		<method name="forLocale(Ljava/util/Locale;)Landroid/icu/text/PluralRules;"/>
-		<method name="forLocale(Ljava/util/Locale;Landroid/icu/text/PluralRules$PluralType;)Landroid/icu/text/PluralRules;"/>
-		<method name="getAllKeywordValues(Ljava/lang/String;)Ljava/util/Collection;"/>
-		<method name="getKeywords()Ljava/util/Set;"/>
-		<method name="getSamples(Ljava/lang/String;)Ljava/util/Collection;"/>
-		<method name="getUniqueKeywordValue(Ljava/lang/String;)D"/>
-		<method name="parseDescription(Ljava/lang/String;)Landroid/icu/text/PluralRules;"/>
-		<method name="select(D)Ljava/lang/String;"/>
-		<field name="DEFAULT"/>
-		<field name="KEYWORD_FEW"/>
-		<field name="KEYWORD_MANY"/>
-		<field name="KEYWORD_ONE"/>
-		<field name="KEYWORD_OTHER"/>
-		<field name="KEYWORD_TWO"/>
-		<field name="KEYWORD_ZERO"/>
-		<field name="NO_UNIQUE_VALUE"/>
-	</class>
-	<class name="android/icu/text/PluralRules$PluralType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/PluralRules$PluralType;"/>
-		<method name="values()[Landroid/icu/text/PluralRules$PluralType;"/>
-		<field name="CARDINAL"/>
-		<field name="ORDINAL"/>
-	</class>
-	<class name="android/icu/text/RelativeDateTimeFormatter" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/EnumMap;Ljava/util/EnumMap;Ljava/lang/String;Landroid/icu/text/PluralRules;Landroid/icu/text/NumberFormat;Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/DisplayContext;Landroid/icu/text/BreakIterator;Landroid/icu/util/ULocale;)V" since="29"/>
-		<method name="combineDateAndTime(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="format(DLandroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;)Ljava/lang/String;"/>
-		<method name="format(DLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;)Ljava/lang/String;" since="28"/>
-		<method name="format(Landroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;)Ljava/lang/String;"/>
-		<method name="formatNumeric(DLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;)Ljava/lang/String;" since="28"/>
-		<method name="getCapitalizationContext()Landroid/icu/text/DisplayContext;"/>
-		<method name="getFormatStyle()Landroid/icu/text/RelativeDateTimeFormatter$Style;"/>
-		<method name="getInstance()Landroid/icu/text/RelativeDateTimeFormatter;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/NumberFormat;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/NumberFormat;Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/DisplayContext;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
-		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/NumberFormat;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
-		<method name="getNumberFormat()Landroid/icu/text/NumberFormat;"/>
-	</class>
-	<class name="android/icu/text/RelativeDateTimeFormatter$AbsoluteUnit" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;"/>
-		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;"/>
-		<field name="DAY"/>
-		<field name="FRIDAY"/>
-		<field name="MONDAY"/>
-		<field name="MONTH"/>
-		<field name="NOW"/>
-		<field name="SATURDAY"/>
-		<field name="SUNDAY"/>
-		<field name="THURSDAY"/>
-		<field name="TUESDAY"/>
-		<field name="WEDNESDAY"/>
-		<field name="WEEK"/>
-		<field name="YEAR"/>
-	</class>
-	<class name="android/icu/text/RelativeDateTimeFormatter$Direction" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$Direction;"/>
-		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$Direction;"/>
-		<field name="LAST"/>
-		<field name="LAST_2"/>
-		<field name="NEXT"/>
-		<field name="NEXT_2"/>
-		<field name="PLAIN"/>
-		<field name="THIS"/>
-	</class>
-	<class name="android/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit" since="28">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;"/>
-		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;"/>
-		<field name="DAY"/>
-		<field name="FRIDAY"/>
-		<field name="HOUR"/>
-		<field name="MINUTE"/>
-		<field name="MONDAY"/>
-		<field name="MONTH"/>
-		<field name="QUARTER"/>
-		<field name="SATURDAY"/>
-		<field name="SECOND"/>
-		<field name="SUNDAY"/>
-		<field name="THURSDAY"/>
-		<field name="TUESDAY"/>
-		<field name="WEDNESDAY"/>
-		<field name="WEEK"/>
-		<field name="YEAR"/>
-	</class>
-	<class name="android/icu/text/RelativeDateTimeFormatter$RelativeUnit" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;"/>
-		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;"/>
-		<field name="DAYS"/>
-		<field name="HOURS"/>
-		<field name="MINUTES"/>
-		<field name="MONTHS"/>
-		<field name="SECONDS"/>
-		<field name="WEEKS"/>
-		<field name="YEARS"/>
-	</class>
-	<class name="android/icu/text/RelativeDateTimeFormatter$Style" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$Style;"/>
-		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$Style;"/>
-		<field name="LONG"/>
-		<field name="NARROW"/>
-		<field name="SHORT"/>
-	</class>
-	<class name="android/icu/text/Replaceable" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="char32At(I)I"/>
-		<method name="charAt(I)C"/>
-		<method name="copy(III)V"/>
-		<method name="getChars(II[CI)V"/>
-		<method name="hasMetaData()Z"/>
-		<method name="length()I"/>
-		<method name="replace(IILjava/lang/String;)V"/>
-		<method name="replace(II[CII)V"/>
-	</class>
-	<class name="android/icu/text/RuleBasedCollator" since="24">
-		<extends name="android/icu/text/Collator"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="cloneAsThawed()Landroid/icu/text/RuleBasedCollator;"/>
-		<method name="getCollationElementIterator(Landroid/icu/text/UCharacterIterator;)Landroid/icu/text/CollationElementIterator;"/>
-		<method name="getCollationElementIterator(Ljava/lang/String;)Landroid/icu/text/CollationElementIterator;"/>
-		<method name="getCollationElementIterator(Ljava/text/CharacterIterator;)Landroid/icu/text/CollationElementIterator;"/>
-		<method name="getContractionsAndExpansions(Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;Z)V"/>
-		<method name="getNumericCollation()Z"/>
-		<method name="getRules()Ljava/lang/String;"/>
-		<method name="getRules(Z)Ljava/lang/String;"/>
-		<method name="isAlternateHandlingShifted()Z"/>
-		<method name="isCaseLevel()Z"/>
-		<method name="isFrenchCollation()Z"/>
-		<method name="isLowerCaseFirst()Z"/>
-		<method name="isUpperCaseFirst()Z"/>
-		<method name="setAlternateHandlingDefault()V"/>
-		<method name="setAlternateHandlingShifted(Z)V"/>
-		<method name="setCaseFirstDefault()V"/>
-		<method name="setCaseLevel(Z)V"/>
-		<method name="setCaseLevelDefault()V"/>
-		<method name="setDecompositionDefault()V"/>
-		<method name="setFrenchCollation(Z)V"/>
-		<method name="setFrenchCollationDefault()V"/>
-		<method name="setLowerCaseFirst(Z)V"/>
-		<method name="setMaxVariable(I)Landroid/icu/text/RuleBasedCollator;"/>
-		<method name="setNumericCollation(Z)V"/>
-		<method name="setNumericCollationDefault()V"/>
-		<method name="setStrengthDefault()V"/>
-		<method name="setUpperCaseFirst(Z)V"/>
-	</class>
-	<class name="android/icu/text/ScientificNumberFormatter" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="getMarkupInstance(Landroid/icu/text/DecimalFormat;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/ScientificNumberFormatter;"/>
-		<method name="getMarkupInstance(Landroid/icu/util/ULocale;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/ScientificNumberFormatter;"/>
-		<method name="getSuperscriptInstance(Landroid/icu/text/DecimalFormat;)Landroid/icu/text/ScientificNumberFormatter;"/>
-		<method name="getSuperscriptInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/ScientificNumberFormatter;"/>
-	</class>
-	<class name="android/icu/text/SearchIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/text/CharacterIterator;Landroid/icu/text/BreakIterator;)V"/>
-		<method name="first()I"/>
-		<method name="following(I)I"/>
-		<method name="getBreakIterator()Landroid/icu/text/BreakIterator;"/>
-		<method name="getElementComparisonType()Landroid/icu/text/SearchIterator$ElementComparisonType;"/>
-		<method name="getIndex()I"/>
-		<method name="getMatchLength()I"/>
-		<method name="getMatchStart()I"/>
-		<method name="getMatchedText()Ljava/lang/String;"/>
-		<method name="getTarget()Ljava/text/CharacterIterator;"/>
-		<method name="handleNext(I)I"/>
-		<method name="handlePrevious(I)I"/>
-		<method name="isOverlapping()Z"/>
-		<method name="last()I"/>
-		<method name="next()I"/>
-		<method name="preceding(I)I"/>
-		<method name="previous()I"/>
-		<method name="reset()V"/>
-		<method name="setBreakIterator(Landroid/icu/text/BreakIterator;)V"/>
-		<method name="setElementComparisonType(Landroid/icu/text/SearchIterator$ElementComparisonType;)V"/>
-		<method name="setIndex(I)V"/>
-		<method name="setMatchLength(I)V"/>
-		<method name="setOverlapping(Z)V"/>
-		<method name="setTarget(Ljava/text/CharacterIterator;)V"/>
-		<field name="DONE"/>
-		<field name="breakIterator"/>
-		<field name="matchLength"/>
-		<field name="targetText"/>
-	</class>
-	<class name="android/icu/text/SearchIterator$ElementComparisonType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/SearchIterator$ElementComparisonType;"/>
-		<method name="values()[Landroid/icu/text/SearchIterator$ElementComparisonType;"/>
-		<field name="ANY_BASE_WEIGHT_IS_WILDCARD"/>
-		<field name="PATTERN_BASE_WEIGHT_IS_WILDCARD"/>
-		<field name="STANDARD_ELEMENT_COMPARISON"/>
-	</class>
-	<class name="android/icu/text/SelectFormat" since="24">
-		<extends name="java/text/Format"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="format(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/text/SimpleDateFormat" since="24">
-		<extends name="android/icu/text/DateFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/text/DateFormatSymbols;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
-		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="get2DigitYearStart()Ljava/util/Date;"/>
-		<method name="getDateFormatSymbols()Landroid/icu/text/DateFormatSymbols;"/>
-		<method name="getNumberFormat(C)Landroid/icu/text/NumberFormat;"/>
-		<method name="getSymbols()Landroid/icu/text/DateFormatSymbols;"/>
-		<method name="getTimeZoneFormat()Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="matchQuarterString(Ljava/lang/String;II[Ljava/lang/String;Landroid/icu/util/Calendar;)I"/>
-		<method name="matchString(Ljava/lang/String;II[Ljava/lang/String;Landroid/icu/util/Calendar;)I"/>
-		<method name="patternCharToDateFormatField(C)Landroid/icu/text/DateFormat$Field;"/>
-		<method name="set2DigitYearStart(Ljava/util/Date;)V"/>
-		<method name="setDateFormatSymbols(Landroid/icu/text/DateFormatSymbols;)V"/>
-		<method name="setNumberFormat(Ljava/lang/String;Landroid/icu/text/NumberFormat;)V"/>
-		<method name="setTimeZoneFormat(Landroid/icu/text/TimeZoneFormat;)V"/>
-		<method name="subFormat(CIILjava/text/FieldPosition;Landroid/icu/text/DateFormatSymbols;Landroid/icu/util/Calendar;)Ljava/lang/String;"/>
-		<method name="subParse(Ljava/lang/String;ICIZZ[ZLandroid/icu/util/Calendar;)I"/>
-		<method name="toLocalizedPattern()Ljava/lang/String;"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-		<method name="zeroPaddingNumber(JII)Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/text/StringPrepParseException" since="24">
-		<extends name="java/text/ParseException"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;II)V"/>
-		<method name="getError()I"/>
-		<field name="ACE_PREFIX_ERROR"/>
-		<field name="BUFFER_OVERFLOW_ERROR"/>
-		<field name="CHECK_BIDI_ERROR"/>
-		<field name="DOMAIN_NAME_TOO_LONG_ERROR"/>
-		<field name="ILLEGAL_CHAR_FOUND"/>
-		<field name="INVALID_CHAR_FOUND"/>
-		<field name="LABEL_TOO_LONG_ERROR"/>
-		<field name="PROHIBITED_ERROR"/>
-		<field name="STD3_ASCII_RULES_ERROR"/>
-		<field name="UNASSIGNED_ERROR"/>
-		<field name="VERIFICATION_ERROR"/>
-		<field name="ZERO_LENGTH_LABEL"/>
-	</class>
-	<class name="android/icu/text/StringSearch" since="24">
-		<extends name="android/icu/text/SearchIterator"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Landroid/icu/text/RuleBasedCollator;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Landroid/icu/text/RuleBasedCollator;Landroid/icu/text/BreakIterator;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Ljava/util/Locale;)V"/>
-		<method name="getCollator()Landroid/icu/text/RuleBasedCollator;"/>
-		<method name="getPattern()Ljava/lang/String;"/>
-		<method name="isCanonical()Z"/>
-		<method name="setCanonical(Z)V"/>
-		<method name="setCollator(Landroid/icu/text/RuleBasedCollator;)V"/>
-		<method name="setPattern(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/icu/text/SymbolTable" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="lookup(Ljava/lang/String;)[C"/>
-		<method name="lookupMatcher(I)Landroid/icu/text/UnicodeMatcher;"/>
-		<method name="parseReference(Ljava/lang/String;Ljava/text/ParsePosition;I)Ljava/lang/String;"/>
-		<field name="SYMBOL_REF"/>
-	</class>
-	<class name="android/icu/text/TimeZoneFormat" since="24">
-		<extends name="android/icu/text/UFormat"/>
-		<implements name="android/icu/util/Freezable"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="cloneAsThawed()Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="format(Landroid/icu/text/TimeZoneFormat$Style;Landroid/icu/util/TimeZone;J)Ljava/lang/String;"/>
-		<method name="format(Landroid/icu/text/TimeZoneFormat$Style;Landroid/icu/util/TimeZone;JLandroid/icu/util/Output;)Ljava/lang/String;"/>
-		<method name="formatOffsetISO8601Basic(IZZZ)Ljava/lang/String;"/>
-		<method name="formatOffsetISO8601Extended(IZZZ)Ljava/lang/String;"/>
-		<method name="formatOffsetLocalizedGMT(I)Ljava/lang/String;"/>
-		<method name="formatOffsetShortLocalizedGMT(I)Ljava/lang/String;"/>
-		<method name="freeze()Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="getDefaultParseOptions()Ljava/util/EnumSet;"/>
-		<method name="getGMTOffsetDigits()Ljava/lang/String;"/>
-		<method name="getGMTOffsetPattern(Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;)Ljava/lang/String;"/>
-		<method name="getGMTPattern()Ljava/lang/String;"/>
-		<method name="getGMTZeroFormat()Ljava/lang/String;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="getTimeZoneNames()Landroid/icu/text/TimeZoneNames;"/>
-		<method name="parse(Landroid/icu/text/TimeZoneFormat$Style;Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/util/Output;)Landroid/icu/util/TimeZone;"/>
-		<method name="parse(Landroid/icu/text/TimeZoneFormat$Style;Ljava/lang/String;Ljava/text/ParsePosition;Ljava/util/EnumSet;Landroid/icu/util/Output;)Landroid/icu/util/TimeZone;"/>
-		<method name="parse(Ljava/lang/String;)Landroid/icu/util/TimeZone;"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Landroid/icu/util/TimeZone;"/>
-		<method name="parseOffsetISO8601(Ljava/lang/String;Ljava/text/ParsePosition;)I"/>
-		<method name="parseOffsetLocalizedGMT(Ljava/lang/String;Ljava/text/ParsePosition;)I"/>
-		<method name="parseOffsetShortLocalizedGMT(Ljava/lang/String;Ljava/text/ParsePosition;)I"/>
-		<method name="setDefaultParseOptions(Ljava/util/EnumSet;)Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="setGMTOffsetDigits(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="setGMTOffsetPattern(Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="setGMTPattern(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="setGMTZeroFormat(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
-		<method name="setTimeZoneNames(Landroid/icu/text/TimeZoneNames;)Landroid/icu/text/TimeZoneFormat;"/>
-	</class>
-	<class name="android/icu/text/TimeZoneFormat$GMTOffsetPatternType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;"/>
-		<method name="values()[Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;"/>
-		<field name="NEGATIVE_H"/>
-		<field name="NEGATIVE_HM"/>
-		<field name="NEGATIVE_HMS"/>
-		<field name="POSITIVE_H"/>
-		<field name="POSITIVE_HM"/>
-		<field name="POSITIVE_HMS"/>
-	</class>
-	<class name="android/icu/text/TimeZoneFormat$ParseOption" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$ParseOption;"/>
-		<method name="values()[Landroid/icu/text/TimeZoneFormat$ParseOption;"/>
-		<field name="ALL_STYLES"/>
-		<field name="TZ_DATABASE_ABBREVIATIONS"/>
-	</class>
-	<class name="android/icu/text/TimeZoneFormat$Style" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$Style;"/>
-		<method name="values()[Landroid/icu/text/TimeZoneFormat$Style;"/>
-		<field name="EXEMPLAR_LOCATION"/>
-		<field name="GENERIC_LOCATION"/>
-		<field name="GENERIC_LONG"/>
-		<field name="GENERIC_SHORT"/>
-		<field name="ISO_BASIC_FIXED"/>
-		<field name="ISO_BASIC_FULL"/>
-		<field name="ISO_BASIC_LOCAL_FIXED"/>
-		<field name="ISO_BASIC_LOCAL_FULL"/>
-		<field name="ISO_BASIC_LOCAL_SHORT"/>
-		<field name="ISO_BASIC_SHORT"/>
-		<field name="ISO_EXTENDED_FIXED"/>
-		<field name="ISO_EXTENDED_FULL"/>
-		<field name="ISO_EXTENDED_LOCAL_FIXED"/>
-		<field name="ISO_EXTENDED_LOCAL_FULL"/>
-		<field name="LOCALIZED_GMT"/>
-		<field name="LOCALIZED_GMT_SHORT"/>
-		<field name="SPECIFIC_LONG"/>
-		<field name="SPECIFIC_SHORT"/>
-		<field name="ZONE_ID"/>
-		<field name="ZONE_ID_SHORT"/>
-	</class>
-	<class name="android/icu/text/TimeZoneFormat$TimeType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$TimeType;"/>
-		<method name="values()[Landroid/icu/text/TimeZoneFormat$TimeType;"/>
-		<field name="DAYLIGHT"/>
-		<field name="STANDARD"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/icu/text/TimeZoneNames" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAvailableMetaZoneIDs()Ljava/util/Set;"/>
-		<method name="getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;"/>
-		<method name="getDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;J)Ljava/lang/String;"/>
-		<method name="getExemplarLocationName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/TimeZoneNames;"/>
-		<method name="getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;"/>
-		<method name="getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;"/>
-		<method name="getReferenceZoneID(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getTZDBInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;"/>
-		<method name="getTimeZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/icu/text/TimeZoneNames$NameType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneNames$NameType;"/>
-		<method name="values()[Landroid/icu/text/TimeZoneNames$NameType;"/>
-		<field name="EXEMPLAR_LOCATION"/>
-		<field name="LONG_DAYLIGHT"/>
-		<field name="LONG_GENERIC"/>
-		<field name="LONG_STANDARD"/>
-		<field name="SHORT_DAYLIGHT"/>
-		<field name="SHORT_GENERIC"/>
-		<field name="SHORT_STANDARD"/>
-	</class>
-	<class name="android/icu/text/UCharacterIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="current()I"/>
-		<method name="currentCodePoint()I"/>
-		<method name="getCharacterIterator()Ljava/text/CharacterIterator;"/>
-		<method name="getIndex()I"/>
-		<method name="getInstance(Landroid/icu/text/Replaceable;)Landroid/icu/text/UCharacterIterator;"/>
-		<method name="getInstance(Ljava/lang/String;)Landroid/icu/text/UCharacterIterator;"/>
-		<method name="getInstance(Ljava/lang/StringBuffer;)Landroid/icu/text/UCharacterIterator;"/>
-		<method name="getInstance(Ljava/text/CharacterIterator;)Landroid/icu/text/UCharacterIterator;"/>
-		<method name="getInstance([C)Landroid/icu/text/UCharacterIterator;"/>
-		<method name="getInstance([CII)Landroid/icu/text/UCharacterIterator;"/>
-		<method name="getLength()I"/>
-		<method name="getText()Ljava/lang/String;"/>
-		<method name="getText([C)I"/>
-		<method name="getText([CI)I"/>
-		<method name="moveCodePointIndex(I)I"/>
-		<method name="moveIndex(I)I"/>
-		<method name="next()I"/>
-		<method name="nextCodePoint()I"/>
-		<method name="previous()I"/>
-		<method name="previousCodePoint()I"/>
-		<method name="setIndex(I)V"/>
-		<method name="setToLimit()V"/>
-		<method name="setToStart()V"/>
-		<field name="DONE"/>
-	</class>
-	<class name="android/icu/text/UFormat" since="24">
-		<extends name="java/text/Format"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/icu/text/UnicodeFilter" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/text/UnicodeMatcher"/>
-		<method name="&lt;init>()V" deprecated="29"/>
-		<method name="contains(I)Z"/>
-	</class>
-	<class name="android/icu/text/UnicodeMatcher" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="addMatchSetTo(Landroid/icu/text/UnicodeSet;)V"/>
-		<method name="matches(Landroid/icu/text/Replaceable;[IIZ)I"/>
-		<method name="matchesIndexValue(I)Z"/>
-		<method name="toPattern(Z)Ljava/lang/String;"/>
-		<field name="ETHER"/>
-		<field name="U_MATCH"/>
-		<field name="U_MISMATCH"/>
-		<field name="U_PARTIAL_MATCH"/>
-	</class>
-	<class name="android/icu/text/UnicodeSet" since="24">
-		<extends name="android/icu/text/UnicodeFilter"/>
-		<implements name="android/icu/util/Freezable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/lang/Iterable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/icu/text/UnicodeSet;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/text/SymbolTable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/text/SymbolTable;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-		<method name="&lt;init>([I)V"/>
-		<method name="_generatePattern(Ljava/lang/StringBuffer;Z)Ljava/lang/StringBuffer;"/>
-		<method name="_generatePattern(Ljava/lang/StringBuffer;ZZ)Ljava/lang/StringBuffer;"/>
-		<method name="add(I)Landroid/icu/text/UnicodeSet;"/>
-		<method name="add(II)Landroid/icu/text/UnicodeSet;"/>
-		<method name="add(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="add(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="addAll(II)Landroid/icu/text/UnicodeSet;"/>
-		<method name="addAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="addAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="addAll(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="addAll([Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="addAllTo(Ljava/util/Collection;)Ljava/util/Collection;"/>
-		<method name="applyIntPropertyValue(II)Landroid/icu/text/UnicodeSet;"/>
-		<method name="applyPattern(Ljava/lang/String;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="applyPattern(Ljava/lang/String;I)Landroid/icu/text/UnicodeSet;"/>
-		<method name="applyPattern(Ljava/lang/String;Z)Landroid/icu/text/UnicodeSet;"/>
-		<method name="applyPropertyAlias(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="applyPropertyAlias(Ljava/lang/String;Ljava/lang/String;Landroid/icu/text/SymbolTable;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="charAt(I)I"/>
-		<method name="clear()Landroid/icu/text/UnicodeSet;"/>
-		<method name="cloneAsThawed()Landroid/icu/text/UnicodeSet;"/>
-		<method name="closeOver(I)Landroid/icu/text/UnicodeSet;"/>
-		<method name="compact()Landroid/icu/text/UnicodeSet;"/>
-		<method name="compareTo(Landroid/icu/text/UnicodeSet;)I"/>
-		<method name="compareTo(Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet$ComparisonStyle;)I"/>
-		<method name="compareTo(Ljava/lang/Iterable;)I"/>
-		<method name="complement()Landroid/icu/text/UnicodeSet;"/>
-		<method name="complement(I)Landroid/icu/text/UnicodeSet;"/>
-		<method name="complement(II)Landroid/icu/text/UnicodeSet;"/>
-		<method name="complement(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="complementAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="complementAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="contains(II)Z"/>
-		<method name="contains(Ljava/lang/CharSequence;)Z"/>
-		<method name="containsAll(Landroid/icu/text/UnicodeSet;)Z"/>
-		<method name="containsAll(Ljava/lang/Iterable;)Z"/>
-		<method name="containsAll(Ljava/lang/String;)Z"/>
-		<method name="containsNone(II)Z"/>
-		<method name="containsNone(Landroid/icu/text/UnicodeSet;)Z"/>
-		<method name="containsNone(Ljava/lang/CharSequence;)Z"/>
-		<method name="containsNone(Ljava/lang/Iterable;)Z"/>
-		<method name="containsSome(II)Z"/>
-		<method name="containsSome(Landroid/icu/text/UnicodeSet;)Z"/>
-		<method name="containsSome(Ljava/lang/CharSequence;)Z"/>
-		<method name="containsSome(Ljava/lang/Iterable;)Z"/>
-		<method name="freeze()Landroid/icu/text/UnicodeSet;"/>
-		<method name="from(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="fromAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="getRangeCount()I"/>
-		<method name="getRangeEnd(I)I"/>
-		<method name="getRangeStart(I)I"/>
-		<method name="indexOf(I)I"/>
-		<method name="isEmpty()Z"/>
-		<method name="ranges()Ljava/lang/Iterable;"/>
-		<method name="remove(I)Landroid/icu/text/UnicodeSet;"/>
-		<method name="remove(II)Landroid/icu/text/UnicodeSet;"/>
-		<method name="remove(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="removeAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="removeAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="removeAll(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="removeAllStrings()Landroid/icu/text/UnicodeSet;"/>
-		<method name="retain(I)Landroid/icu/text/UnicodeSet;"/>
-		<method name="retain(II)Landroid/icu/text/UnicodeSet;"/>
-		<method name="retain(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="retainAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="retainAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="retainAll(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="set(II)Landroid/icu/text/UnicodeSet;"/>
-		<method name="set(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
-		<method name="size()I"/>
-		<method name="span(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;)I"/>
-		<method name="span(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSet$SpanCondition;)I"/>
-		<method name="spanBack(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;)I"/>
-		<method name="spanBack(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSet$SpanCondition;)I"/>
-		<method name="strings()Ljava/util/Collection;"/>
-		<field name="ADD_CASE_MAPPINGS"/>
-		<field name="ALL_CODE_POINTS"/>
-		<field name="CASE"/>
-		<field name="CASE_INSENSITIVE"/>
-		<field name="EMPTY"/>
-		<field name="IGNORE_SPACE"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_VALUE"/>
-	</class>
-	<class name="android/icu/text/UnicodeSet$ComparisonStyle" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSet$ComparisonStyle;"/>
-		<method name="values()[Landroid/icu/text/UnicodeSet$ComparisonStyle;"/>
-		<field name="LEXICOGRAPHIC"/>
-		<field name="LONGER_FIRST"/>
-		<field name="SHORTER_FIRST"/>
-	</class>
-	<class name="android/icu/text/UnicodeSet$EntryRange" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="codepoint"/>
-		<field name="codepointEnd"/>
-	</class>
-	<class name="android/icu/text/UnicodeSet$SpanCondition" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSet$SpanCondition;"/>
-		<method name="values()[Landroid/icu/text/UnicodeSet$SpanCondition;"/>
-		<field name="CONDITION_COUNT"/>
-		<field name="CONTAINED"/>
-		<field name="NOT_CONTAINED"/>
-		<field name="SIMPLE"/>
-	</class>
-	<class name="android/icu/text/UnicodeSetIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/icu/text/UnicodeSet;)V"/>
-		<method name="getString()Ljava/lang/String;"/>
-		<method name="next()Z"/>
-		<method name="nextRange()Z"/>
-		<method name="reset()V"/>
-		<method name="reset(Landroid/icu/text/UnicodeSet;)V"/>
-		<field name="IS_STRING"/>
-		<field name="codepoint"/>
-		<field name="codepointEnd"/>
-		<field name="string"/>
-	</class>
-	<class name="android/icu/text/UnicodeSetSpanner" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/icu/text/UnicodeSet;)V"/>
-		<method name="countIn(Ljava/lang/CharSequence;)I"/>
-		<method name="countIn(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;)I"/>
-		<method name="countIn(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;Landroid/icu/text/UnicodeSet$SpanCondition;)I"/>
-		<method name="deleteFrom(Ljava/lang/CharSequence;)Ljava/lang/String;"/>
-		<method name="deleteFrom(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSet$SpanCondition;)Ljava/lang/String;"/>
-		<method name="getUnicodeSet()Landroid/icu/text/UnicodeSet;"/>
-		<method name="replaceFrom(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
-		<method name="replaceFrom(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;)Ljava/lang/String;"/>
-		<method name="replaceFrom(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;Landroid/icu/text/UnicodeSet$SpanCondition;)Ljava/lang/String;"/>
-		<method name="trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="trim(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$TrimOption;)Ljava/lang/CharSequence;"/>
-		<method name="trim(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$TrimOption;Landroid/icu/text/UnicodeSet$SpanCondition;)Ljava/lang/CharSequence;"/>
-	</class>
-	<class name="android/icu/text/UnicodeSetSpanner$CountMethod" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSetSpanner$CountMethod;"/>
-		<method name="values()[Landroid/icu/text/UnicodeSetSpanner$CountMethod;"/>
-		<field name="MIN_ELEMENTS"/>
-		<field name="WHOLE_SPAN"/>
-	</class>
-	<class name="android/icu/text/UnicodeSetSpanner$TrimOption" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSetSpanner$TrimOption;"/>
-		<method name="values()[Landroid/icu/text/UnicodeSetSpanner$TrimOption;"/>
-		<field name="BOTH"/>
-		<field name="LEADING"/>
-		<field name="TRAILING"/>
-	</class>
-	<class name="android/icu/util/BuddhistCalendar" since="24">
-		<extends name="android/icu/util/GregorianCalendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<field name="BE"/>
-	</class>
-	<class name="android/icu/util/CECalendar" since="24" removed="29">
-		<extends name="android/icu/util/Calendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-	</class>
-	<class name="android/icu/util/Calendar" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="add(II)V"/>
-		<method name="after(Ljava/lang/Object;)Z"/>
-		<method name="before(Ljava/lang/Object;)Z"/>
-		<method name="clear()V"/>
-		<method name="clear(I)V"/>
-		<method name="compareTo(Landroid/icu/util/Calendar;)I"/>
-		<method name="complete()V"/>
-		<method name="computeFields()V"/>
-		<method name="computeGregorianFields(I)V"/>
-		<method name="computeGregorianMonthStart(II)I"/>
-		<method name="computeJulianDay()I"/>
-		<method name="computeMillisInDay()I" deprecated="26"/>
-		<method name="computeTime()V"/>
-		<method name="computeZoneOffset(JI)I" deprecated="26"/>
-		<method name="fieldDifference(Ljava/util/Date;I)I"/>
-		<method name="fieldName(I)Ljava/lang/String;"/>
-		<method name="floorDivide(II)I"/>
-		<method name="floorDivide(II[I)I"/>
-		<method name="floorDivide(JI[I)I"/>
-		<method name="floorDivide(JJ)J"/>
-		<method name="get(I)I"/>
-		<method name="getActualMaximum(I)I"/>
-		<method name="getActualMinimum(I)I"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getDateTimeFormat(IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDateTimeFormat(IILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getFieldCount()I"/>
-		<method name="getFieldResolutionTable()[[[I"/>
-		<method name="getFirstDayOfWeek()I"/>
-		<method name="getGreatestMinimum(I)I"/>
-		<method name="getGregorianDayOfMonth()I"/>
-		<method name="getGregorianDayOfYear()I"/>
-		<method name="getGregorianMonth()I"/>
-		<method name="getGregorianYear()I"/>
-		<method name="getInstance()Landroid/icu/util/Calendar;"/>
-		<method name="getInstance(Landroid/icu/util/TimeZone;)Landroid/icu/util/Calendar;"/>
-		<method name="getInstance(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;"/>
-		<method name="getInstance(Landroid/icu/util/TimeZone;Ljava/util/Locale;)Landroid/icu/util/Calendar;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/util/Calendar;"/>
-		<method name="getKeywordValuesForLocale(Ljava/lang/String;Landroid/icu/util/ULocale;Z)[Ljava/lang/String;"/>
-		<method name="getLeastMaximum(I)I"/>
-		<method name="getLimit(II)I"/>
-		<method name="getMaximum(I)I"/>
-		<method name="getMinimalDaysInFirstWeek()I"/>
-		<method name="getMinimum(I)I"/>
-		<method name="getRepeatedWallTimeOption()I"/>
-		<method name="getSkippedWallTimeOption()I"/>
-		<method name="getStamp(I)I"/>
-		<method name="getTime()Ljava/util/Date;"/>
-		<method name="getTimeInMillis()J"/>
-		<method name="getTimeZone()Landroid/icu/util/TimeZone;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="getWeekData()Landroid/icu/util/Calendar$WeekData;"/>
-		<method name="getWeekDataForRegion(Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;"/>
-		<method name="gregorianMonthLength(II)I"/>
-		<method name="gregorianPreviousMonthLength(II)I"/>
-		<method name="handleComputeFields(I)V"/>
-		<method name="handleComputeJulianDay(I)I"/>
-		<method name="handleComputeMonthStart(IIZ)I"/>
-		<method name="handleCreateFields()[I"/>
-		<method name="handleGetDateFormat(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-		<method name="handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="handleGetDateFormat(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
-		<method name="handleGetExtendedYear()I"/>
-		<method name="handleGetLimit(II)I"/>
-		<method name="handleGetMonthLength(II)I"/>
-		<method name="handleGetYearLength(I)I"/>
-		<method name="internalGet(I)I"/>
-		<method name="internalGet(II)I"/>
-		<method name="internalGetTimeInMillis()J"/>
-		<method name="internalSet(II)V"/>
-		<method name="isEquivalentTo(Landroid/icu/util/Calendar;)Z"/>
-		<method name="isGregorianLeapYear(I)Z"/>
-		<method name="isLenient()Z"/>
-		<method name="isSet(I)Z"/>
-		<method name="isWeekend()Z"/>
-		<method name="isWeekend(Ljava/util/Date;)Z"/>
-		<method name="julianDayToDayOfWeek(I)I"/>
-		<method name="julianDayToMillis(I)J"/>
-		<method name="millisToJulianDay(J)I"/>
-		<method name="newerField(II)I"/>
-		<method name="newestStamp(III)I"/>
-		<method name="pinField(I)V"/>
-		<method name="prepareGetActual(IZ)V"/>
-		<method name="resolveFields([[[I)I"/>
-		<method name="roll(II)V"/>
-		<method name="roll(IZ)V"/>
-		<method name="set(II)V"/>
-		<method name="set(III)V"/>
-		<method name="set(IIIII)V"/>
-		<method name="set(IIIIII)V"/>
-		<method name="setFirstDayOfWeek(I)V"/>
-		<method name="setLenient(Z)V"/>
-		<method name="setMinimalDaysInFirstWeek(I)V"/>
-		<method name="setRepeatedWallTimeOption(I)V"/>
-		<method name="setSkippedWallTimeOption(I)V"/>
-		<method name="setTime(Ljava/util/Date;)V"/>
-		<method name="setTimeInMillis(J)V"/>
-		<method name="setTimeZone(Landroid/icu/util/TimeZone;)V"/>
-		<method name="setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;"/>
-		<method name="validateField(I)V"/>
-		<method name="validateField(III)V"/>
-		<method name="validateFields()V"/>
-		<method name="weekNumber(II)I"/>
-		<method name="weekNumber(III)I"/>
-		<field name="AM"/>
-		<field name="AM_PM"/>
-		<field name="APRIL"/>
-		<field name="AUGUST"/>
-		<field name="BASE_FIELD_COUNT" deprecated="26"/>
-		<field name="DATE"/>
-		<field name="DAY_OF_MONTH"/>
-		<field name="DAY_OF_WEEK"/>
-		<field name="DAY_OF_WEEK_IN_MONTH"/>
-		<field name="DAY_OF_YEAR"/>
-		<field name="DECEMBER"/>
-		<field name="DOW_LOCAL"/>
-		<field name="DST_OFFSET"/>
-		<field name="EPOCH_JULIAN_DAY"/>
-		<field name="ERA"/>
-		<field name="EXTENDED_YEAR"/>
-		<field name="FEBRUARY"/>
-		<field name="FRIDAY"/>
-		<field name="GREATEST_MINIMUM"/>
-		<field name="HOUR"/>
-		<field name="HOUR_OF_DAY"/>
-		<field name="INTERNALLY_SET"/>
-		<field name="IS_LEAP_MONTH"/>
-		<field name="JANUARY"/>
-		<field name="JAN_1_1_JULIAN_DAY"/>
-		<field name="JULIAN_DAY"/>
-		<field name="JULY"/>
-		<field name="JUNE"/>
-		<field name="LEAST_MAXIMUM"/>
-		<field name="MARCH"/>
-		<field name="MAXIMUM"/>
-		<field name="MAX_DATE"/>
-		<field name="MAX_FIELD_COUNT" deprecated="26"/>
-		<field name="MAX_JULIAN"/>
-		<field name="MAX_MILLIS"/>
-		<field name="MAY"/>
-		<field name="MILLISECOND"/>
-		<field name="MILLISECONDS_IN_DAY"/>
-		<field name="MINIMUM"/>
-		<field name="MINIMUM_USER_STAMP"/>
-		<field name="MINUTE"/>
-		<field name="MIN_DATE"/>
-		<field name="MIN_JULIAN"/>
-		<field name="MIN_MILLIS"/>
-		<field name="MONDAY"/>
-		<field name="MONTH"/>
-		<field name="NOVEMBER"/>
-		<field name="OCTOBER"/>
-		<field name="ONE_DAY"/>
-		<field name="ONE_HOUR"/>
-		<field name="ONE_MINUTE"/>
-		<field name="ONE_SECOND"/>
-		<field name="ONE_WEEK"/>
-		<field name="PM"/>
-		<field name="RESOLVE_REMAP"/>
-		<field name="SATURDAY"/>
-		<field name="SECOND"/>
-		<field name="SEPTEMBER"/>
-		<field name="SUNDAY"/>
-		<field name="THURSDAY"/>
-		<field name="TUESDAY"/>
-		<field name="UNDECIMBER"/>
-		<field name="UNSET"/>
-		<field name="WALLTIME_FIRST"/>
-		<field name="WALLTIME_LAST"/>
-		<field name="WALLTIME_NEXT_VALID"/>
-		<field name="WEDNESDAY"/>
-		<field name="WEEK_OF_MONTH"/>
-		<field name="WEEK_OF_YEAR"/>
-		<field name="YEAR"/>
-		<field name="YEAR_WOY"/>
-		<field name="ZONE_OFFSET"/>
-	</class>
-	<class name="android/icu/util/Calendar$WeekData" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<field name="firstDayOfWeek"/>
-		<field name="minimalDaysInFirstWeek"/>
-		<field name="weekendCease"/>
-		<field name="weekendCeaseMillis"/>
-		<field name="weekendOnset"/>
-		<field name="weekendOnsetMillis"/>
-	</class>
-	<class name="android/icu/util/ChineseCalendar" since="24">
-		<extends name="android/icu/util/Calendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(IIII)V"/>
-		<method name="&lt;init>(IIIII)V"/>
-		<method name="&lt;init>(IIIIIII)V"/>
-		<method name="&lt;init>(IIIIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
-	</class>
-	<class name="android/icu/util/CopticCalendar" since="24">
-		<extends name="android/icu/util/CECalendar" removed="29"/>
-		<extends name="android/icu/util/Calendar" since="29"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<field name="AMSHIR"/>
-		<field name="BABA"/>
-		<field name="BARAMHAT"/>
-		<field name="BARAMOUDA"/>
-		<field name="BASHANS"/>
-		<field name="EPEP"/>
-		<field name="HATOR"/>
-		<field name="KIAHK"/>
-		<field name="MESRA"/>
-		<field name="NASIE"/>
-		<field name="PAONA"/>
-		<field name="TOBA"/>
-		<field name="TOUT"/>
-	</class>
-	<class name="android/icu/util/Currency" since="24">
-		<extends name="android/icu/util/MeasureUnit"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getAvailableCurrencies()Ljava/util/Set;"/>
-		<method name="getAvailableCurrencyCodes(Landroid/icu/util/ULocale;Ljava/util/Date;)[Ljava/lang/String;"/>
-		<method name="getAvailableCurrencyCodes(Ljava/util/Locale;Ljava/util/Date;)[Ljava/lang/String;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getAvailableULocales()[Landroid/icu/util/ULocale;"/>
-		<method name="getCurrencyCode()Ljava/lang/String;"/>
-		<method name="getDefaultFractionDigits()I"/>
-		<method name="getDefaultFractionDigits(Landroid/icu/util/Currency$CurrencyUsage;)I"/>
-		<method name="getDisplayName()Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Currency;"/>
-		<method name="getInstance(Ljava/lang/String;)Landroid/icu/util/Currency;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/util/Currency;"/>
-		<method name="getKeywordValuesForLocale(Ljava/lang/String;Landroid/icu/util/ULocale;Z)[Ljava/lang/String;"/>
-		<method name="getName(Landroid/icu/util/ULocale;ILjava/lang/String;[Z)Ljava/lang/String;"/>
-		<method name="getName(Landroid/icu/util/ULocale;I[Z)Ljava/lang/String;"/>
-		<method name="getName(Ljava/util/Locale;ILjava/lang/String;[Z)Ljava/lang/String;"/>
-		<method name="getName(Ljava/util/Locale;I[Z)Ljava/lang/String;"/>
-		<method name="getNumericCode()I"/>
-		<method name="getRoundingIncrement()D"/>
-		<method name="getRoundingIncrement(Landroid/icu/util/Currency$CurrencyUsage;)D"/>
-		<method name="getSymbol()Ljava/lang/String;"/>
-		<method name="getSymbol(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getSymbol(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="isAvailable(Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)Z"/>
-		<field name="LONG_NAME"/>
-		<field name="PLURAL_LONG_NAME"/>
-		<field name="SYMBOL_NAME"/>
-	</class>
-	<class name="android/icu/util/Currency$CurrencyUsage" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/Currency$CurrencyUsage;"/>
-		<method name="values()[Landroid/icu/util/Currency$CurrencyUsage;"/>
-		<field name="CASH"/>
-		<field name="STANDARD"/>
-	</class>
-	<class name="android/icu/util/CurrencyAmount" since="24">
-		<extends name="android/icu/util/Measure"/>
-		<method name="&lt;init>(DLandroid/icu/util/Currency;)V"/>
-		<method name="&lt;init>(Ljava/lang/Number;Landroid/icu/util/Currency;)V"/>
-		<method name="getCurrency()Landroid/icu/util/Currency;"/>
-	</class>
-	<class name="android/icu/util/DateInterval" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(JJ)V"/>
-		<method name="getFromDate()J"/>
-		<method name="getToDate()J"/>
-	</class>
-	<class name="android/icu/util/EthiopicCalendar" since="26">
-		<extends name="android/icu/util/CECalendar" removed="29"/>
-		<extends name="android/icu/util/Calendar" since="29"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="isAmeteAlemEra()Z"/>
-		<method name="setAmeteAlemEra(Z)V"/>
-		<field name="GENBOT"/>
-		<field name="HAMLE"/>
-		<field name="HEDAR"/>
-		<field name="MEGABIT"/>
-		<field name="MESKEREM"/>
-		<field name="MIAZIA"/>
-		<field name="NEHASSE"/>
-		<field name="PAGUMEN"/>
-		<field name="SENE"/>
-		<field name="TAHSAS"/>
-		<field name="TEKEMT"/>
-		<field name="TER"/>
-		<field name="YEKATIT"/>
-	</class>
-	<class name="android/icu/util/Freezable" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="cloneAsThawed()Ljava/lang/Object;"/>
-		<method name="freeze()Ljava/lang/Object;"/>
-		<method name="isFrozen()Z"/>
-	</class>
-	<class name="android/icu/util/GregorianCalendar" since="24">
-		<extends name="android/icu/util/Calendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIII)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="getGregorianChange()Ljava/util/Date;"/>
-		<method name="isLeapYear(I)Z"/>
-		<method name="setGregorianChange(Ljava/util/Date;)V"/>
-		<field name="AD"/>
-		<field name="BC"/>
-		<field name="invertGregorian"/>
-		<field name="isGregorian"/>
-	</class>
-	<class name="android/icu/util/HebrewCalendar" since="24">
-		<extends name="android/icu/util/Calendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<field name="ADAR"/>
-		<field name="ADAR_1"/>
-		<field name="AV"/>
-		<field name="ELUL"/>
-		<field name="HESHVAN"/>
-		<field name="IYAR"/>
-		<field name="KISLEV"/>
-		<field name="NISAN"/>
-		<field name="SHEVAT"/>
-		<field name="SIVAN"/>
-		<field name="TAMUZ"/>
-		<field name="TEVET"/>
-		<field name="TISHRI"/>
-	</class>
-	<class name="android/icu/util/ICUUncheckedIOException" since="24">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/icu/util/IllformedLocaleException" since="28">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getErrorIndex()I"/>
-	</class>
-	<class name="android/icu/util/IndianCalendar" since="24">
-		<extends name="android/icu/util/Calendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<field name="AGRAHAYANA"/>
-		<field name="ASADHA"/>
-		<field name="ASVINA"/>
-		<field name="BHADRA"/>
-		<field name="CHAITRA"/>
-		<field name="IE"/>
-		<field name="JYAISTHA"/>
-		<field name="KARTIKA"/>
-		<field name="MAGHA"/>
-		<field name="PAUSA"/>
-		<field name="PHALGUNA"/>
-		<field name="SRAVANA"/>
-		<field name="VAISAKHA"/>
-	</class>
-	<class name="android/icu/util/IslamicCalendar" since="24">
-		<extends name="android/icu/util/Calendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="getCalculationType()Landroid/icu/util/IslamicCalendar$CalculationType;"/>
-		<method name="setCalculationType(Landroid/icu/util/IslamicCalendar$CalculationType;)V"/>
-		<field name="DHU_AL_HIJJAH"/>
-		<field name="DHU_AL_QIDAH"/>
-		<field name="JUMADA_1"/>
-		<field name="JUMADA_2"/>
-		<field name="MUHARRAM"/>
-		<field name="RABI_1"/>
-		<field name="RABI_2"/>
-		<field name="RAJAB"/>
-		<field name="RAMADAN"/>
-		<field name="SAFAR"/>
-		<field name="SHABAN"/>
-		<field name="SHAWWAL"/>
-	</class>
-	<class name="android/icu/util/IslamicCalendar$CalculationType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/IslamicCalendar$CalculationType;"/>
-		<method name="values()[Landroid/icu/util/IslamicCalendar$CalculationType;"/>
-		<field name="ISLAMIC"/>
-		<field name="ISLAMIC_CIVIL"/>
-		<field name="ISLAMIC_TBLA"/>
-		<field name="ISLAMIC_UMALQURA"/>
-	</class>
-	<class name="android/icu/util/JapaneseCalendar" since="24">
-		<extends name="android/icu/util/GregorianCalendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIII)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<field name="CURRENT_ERA"/>
-		<field name="HEISEI"/>
-		<field name="MEIJI"/>
-		<field name="SHOWA"/>
-		<field name="TAISHO"/>
-	</class>
-	<class name="android/icu/util/LocaleData" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCLDRVersion()Landroid/icu/util/VersionInfo;"/>
-		<method name="getDelimiter(I)Ljava/lang/String;"/>
-		<method name="getInstance()Landroid/icu/util/LocaleData;"/>
-		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/LocaleData;"/>
-		<method name="getMeasurementSystem(Landroid/icu/util/ULocale;)Landroid/icu/util/LocaleData$MeasurementSystem;"/>
-		<method name="getNoSubstitute()Z"/>
-		<method name="getPaperSize(Landroid/icu/util/ULocale;)Landroid/icu/util/LocaleData$PaperSize;"/>
-		<method name="setNoSubstitute(Z)V"/>
-		<field name="ALT_QUOTATION_END"/>
-		<field name="ALT_QUOTATION_START"/>
-		<field name="QUOTATION_END"/>
-		<field name="QUOTATION_START"/>
-	</class>
-	<class name="android/icu/util/LocaleData$MeasurementSystem" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="SI"/>
-		<field name="UK"/>
-		<field name="US"/>
-	</class>
-	<class name="android/icu/util/LocaleData$PaperSize" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(II)V" since="29"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-	</class>
-	<class name="android/icu/util/Measure" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Number;Landroid/icu/util/MeasureUnit;)V"/>
-		<method name="getNumber()Ljava/lang/Number;"/>
-		<method name="getUnit()Landroid/icu/util/MeasureUnit;"/>
-	</class>
-	<class name="android/icu/util/MeasureUnit" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" since="29" deprecated="29"/>
-		<method name="getAvailable()Ljava/util/Set;"/>
-		<method name="getAvailable(Ljava/lang/String;)Ljava/util/Set;"/>
-		<method name="getAvailableTypes()Ljava/util/Set;"/>
-		<method name="getSubtype()Ljava/lang/String;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<field name="ACRE"/>
-		<field name="ACRE_FOOT"/>
-		<field name="AMPERE"/>
-		<field name="ARC_MINUTE"/>
-		<field name="ARC_SECOND"/>
-		<field name="ASTRONOMICAL_UNIT"/>
-		<field name="BIT"/>
-		<field name="BUSHEL"/>
-		<field name="BYTE"/>
-		<field name="CALORIE"/>
-		<field name="CARAT"/>
-		<field name="CELSIUS"/>
-		<field name="CENTILITER"/>
-		<field name="CENTIMETER"/>
-		<field name="CENTURY" since="26"/>
-		<field name="CUBIC_CENTIMETER"/>
-		<field name="CUBIC_FOOT"/>
-		<field name="CUBIC_INCH"/>
-		<field name="CUBIC_KILOMETER"/>
-		<field name="CUBIC_METER"/>
-		<field name="CUBIC_MILE"/>
-		<field name="CUBIC_YARD"/>
-		<field name="CUP"/>
-		<field name="CUP_METRIC" since="26"/>
-		<field name="DAY"/>
-		<field name="DECILITER"/>
-		<field name="DECIMETER"/>
-		<field name="DEGREE"/>
-		<field name="FAHRENHEIT"/>
-		<field name="FATHOM"/>
-		<field name="FLUID_OUNCE"/>
-		<field name="FOODCALORIE"/>
-		<field name="FOOT"/>
-		<field name="FURLONG"/>
-		<field name="GALLON"/>
-		<field name="GALLON_IMPERIAL" since="28"/>
-		<field name="GENERIC_TEMPERATURE" since="26"/>
-		<field name="GIGABIT"/>
-		<field name="GIGABYTE"/>
-		<field name="GIGAHERTZ"/>
-		<field name="GIGAWATT"/>
-		<field name="GRAM"/>
-		<field name="G_FORCE"/>
-		<field name="HECTARE"/>
-		<field name="HECTOLITER"/>
-		<field name="HECTOPASCAL"/>
-		<field name="HERTZ"/>
-		<field name="HORSEPOWER"/>
-		<field name="HOUR"/>
-		<field name="INCH"/>
-		<field name="INCH_HG"/>
-		<field name="JOULE"/>
-		<field name="KARAT"/>
-		<field name="KELVIN"/>
-		<field name="KILOBIT"/>
-		<field name="KILOBYTE"/>
-		<field name="KILOCALORIE"/>
-		<field name="KILOGRAM"/>
-		<field name="KILOHERTZ"/>
-		<field name="KILOJOULE"/>
-		<field name="KILOMETER"/>
-		<field name="KILOMETER_PER_HOUR"/>
-		<field name="KILOWATT"/>
-		<field name="KILOWATT_HOUR"/>
-		<field name="KNOT" since="26"/>
-		<field name="LIGHT_YEAR"/>
-		<field name="LITER"/>
-		<field name="LITER_PER_100KILOMETERS" since="26"/>
-		<field name="LITER_PER_KILOMETER"/>
-		<field name="LUX"/>
-		<field name="MEGABIT"/>
-		<field name="MEGABYTE"/>
-		<field name="MEGAHERTZ"/>
-		<field name="MEGALITER"/>
-		<field name="MEGAWATT"/>
-		<field name="METER"/>
-		<field name="METER_PER_SECOND"/>
-		<field name="METER_PER_SECOND_SQUARED"/>
-		<field name="METRIC_TON"/>
-		<field name="MICROGRAM"/>
-		<field name="MICROMETER"/>
-		<field name="MICROSECOND"/>
-		<field name="MILE"/>
-		<field name="MILE_PER_GALLON"/>
-		<field name="MILE_PER_GALLON_IMPERIAL" since="28"/>
-		<field name="MILE_PER_HOUR"/>
-		<field name="MILE_SCANDINAVIAN" since="26"/>
-		<field name="MILLIAMPERE"/>
-		<field name="MILLIBAR"/>
-		<field name="MILLIGRAM"/>
-		<field name="MILLIGRAM_PER_DECILITER" since="28"/>
-		<field name="MILLILITER"/>
-		<field name="MILLIMETER"/>
-		<field name="MILLIMETER_OF_MERCURY"/>
-		<field name="MILLIMOLE_PER_LITER" since="28"/>
-		<field name="MILLISECOND"/>
-		<field name="MILLIWATT"/>
-		<field name="MINUTE"/>
-		<field name="MONTH"/>
-		<field name="NANOMETER"/>
-		<field name="NANOSECOND"/>
-		<field name="NAUTICAL_MILE"/>
-		<field name="OHM"/>
-		<field name="OUNCE"/>
-		<field name="OUNCE_TROY"/>
-		<field name="PARSEC"/>
-		<field name="PART_PER_MILLION" since="28"/>
-		<field name="PICOMETER"/>
-		<field name="PINT"/>
-		<field name="PINT_METRIC" since="26"/>
-		<field name="POINT" since="29"/>
-		<field name="POUND"/>
-		<field name="POUND_PER_SQUARE_INCH"/>
-		<field name="QUART"/>
-		<field name="RADIAN"/>
-		<field name="REVOLUTION_ANGLE" since="26"/>
-		<field name="SECOND"/>
-		<field name="SQUARE_CENTIMETER"/>
-		<field name="SQUARE_FOOT"/>
-		<field name="SQUARE_INCH"/>
-		<field name="SQUARE_KILOMETER"/>
-		<field name="SQUARE_METER"/>
-		<field name="SQUARE_MILE"/>
-		<field name="SQUARE_YARD"/>
-		<field name="STONE"/>
-		<field name="TABLESPOON"/>
-		<field name="TEASPOON"/>
-		<field name="TERABIT"/>
-		<field name="TERABYTE"/>
-		<field name="TON"/>
-		<field name="VOLT"/>
-		<field name="WATT"/>
-		<field name="WEEK"/>
-		<field name="YARD"/>
-		<field name="YEAR"/>
-	</class>
-	<class name="android/icu/util/Output" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/icu/util/RangeValueIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="next(Landroid/icu/util/RangeValueIterator$Element;)Z"/>
-		<method name="reset()V"/>
-	</class>
-	<class name="android/icu/util/RangeValueIterator$Element" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="limit"/>
-		<field name="start"/>
-		<field name="value"/>
-	</class>
-	<class name="android/icu/util/TaiwanCalendar" since="24">
-		<extends name="android/icu/util/GregorianCalendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
-		<method name="&lt;init>(Ljava/util/Date;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<field name="BEFORE_MINGUO"/>
-		<field name="MINGUO"/>
-	</class>
-	<class name="android/icu/util/TimeUnit" since="24">
-		<extends name="android/icu/util/MeasureUnit"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="values()[Landroid/icu/util/TimeUnit;"/>
-	</class>
-	<class name="android/icu/util/TimeZone" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/icu/util/Freezable"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="cloneAsThawed()Landroid/icu/util/TimeZone;"/>
-		<method name="countEquivalentIDs(Ljava/lang/String;)I"/>
-		<method name="freeze()Landroid/icu/util/TimeZone;"/>
-		<method name="getAvailableIDs()[Ljava/lang/String;"/>
-		<method name="getAvailableIDs(I)[Ljava/lang/String;"/>
-		<method name="getAvailableIDs(Landroid/icu/util/TimeZone$SystemTimeZoneType;Ljava/lang/String;Ljava/lang/Integer;)Ljava/util/Set;"/>
-		<method name="getAvailableIDs(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="getCanonicalID(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getCanonicalID(Ljava/lang/String;[Z)Ljava/lang/String;"/>
-		<method name="getDSTSavings()I"/>
-		<method name="getDefault()Landroid/icu/util/TimeZone;"/>
-		<method name="getDisplayName()Ljava/lang/String;"/>
-		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(ZI)Ljava/lang/String;"/>
-		<method name="getDisplayName(ZILandroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getEquivalentID(Ljava/lang/String;I)Ljava/lang/String;"/>
-		<method name="getFrozenTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;"/>
-		<method name="getID()Ljava/lang/String;"/>
-		<method name="getIDForWindowsID(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getOffset(IIIIII)I"/>
-		<method name="getOffset(J)I"/>
-		<method name="getOffset(JZ[I)V"/>
-		<method name="getRawOffset()I"/>
-		<method name="getRegion(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getTZDataVersion()Ljava/lang/String;"/>
-		<method name="getTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;"/>
-		<method name="getTimeZone(Ljava/lang/String;I)Landroid/icu/util/TimeZone;"/>
-		<method name="getWindowsID(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="hasSameRules(Landroid/icu/util/TimeZone;)Z"/>
-		<method name="inDaylightTime(Ljava/util/Date;)Z"/>
-		<method name="observesDaylightTime()Z"/>
-		<method name="setID(Ljava/lang/String;)V"/>
-		<method name="setRawOffset(I)V"/>
-		<method name="useDaylightTime()Z"/>
-		<field name="GENERIC_LOCATION"/>
-		<field name="GMT_ZONE"/>
-		<field name="LONG"/>
-		<field name="LONG_GENERIC"/>
-		<field name="LONG_GMT"/>
-		<field name="SHORT"/>
-		<field name="SHORT_COMMONLY_USED"/>
-		<field name="SHORT_GENERIC"/>
-		<field name="SHORT_GMT"/>
-		<field name="TIMEZONE_ICU" since="26"/>
-		<field name="TIMEZONE_JDK" since="26"/>
-		<field name="UNKNOWN_ZONE"/>
-		<field name="UNKNOWN_ZONE_ID"/>
-	</class>
-	<class name="android/icu/util/TimeZone$SystemTimeZoneType" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/TimeZone$SystemTimeZoneType;"/>
-		<method name="values()[Landroid/icu/util/TimeZone$SystemTimeZoneType;"/>
-		<field name="ANY" since="28"/>
-		<field name="CANONICAL" since="28"/>
-		<field name="CANONICAL_LOCATION" since="28"/>
-	</class>
-	<class name="android/icu/util/ULocale" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="acceptLanguage(Ljava/lang/String;[Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
-		<method name="acceptLanguage(Ljava/lang/String;[Z)Landroid/icu/util/ULocale;"/>
-		<method name="acceptLanguage([Landroid/icu/util/ULocale;[Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
-		<method name="acceptLanguage([Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
-		<method name="addLikelySubtags(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;"/>
-		<method name="canonicalize(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="compareTo(Landroid/icu/util/ULocale;)I"/>
-		<method name="createCanonical(Ljava/lang/String;)Landroid/icu/util/ULocale;"/>
-		<method name="forLanguageTag(Ljava/lang/String;)Landroid/icu/util/ULocale;"/>
-		<method name="forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;"/>
-		<method name="getAvailableLocales()[Landroid/icu/util/ULocale;"/>
-		<method name="getBaseName()Ljava/lang/String;"/>
-		<method name="getBaseName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getCharacterOrientation()Ljava/lang/String;"/>
-		<method name="getCountry()Ljava/lang/String;"/>
-		<method name="getCountry(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDefault()Landroid/icu/util/ULocale;"/>
-		<method name="getDefault(Landroid/icu/util/ULocale$Category;)Landroid/icu/util/ULocale;"/>
-		<method name="getDisplayCountry()Ljava/lang/String;"/>
-		<method name="getDisplayCountry(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayCountry(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayCountry(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayKeyword(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayKeyword(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayKeyword(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayKeywordValue(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayKeywordValue(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayKeywordValue(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayKeywordValue(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayLanguage()Ljava/lang/String;"/>
-		<method name="getDisplayLanguage(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayLanguage(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayLanguage(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayLanguageWithDialect()Ljava/lang/String;"/>
-		<method name="getDisplayLanguageWithDialect(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayLanguageWithDialect(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayLanguageWithDialect(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayName()Ljava/lang/String;"/>
-		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayNameWithDialect()Ljava/lang/String;"/>
-		<method name="getDisplayNameWithDialect(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayNameWithDialect(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayNameWithDialect(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayScript()Ljava/lang/String;"/>
-		<method name="getDisplayScript(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayScript(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayScript(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDisplayVariant()Ljava/lang/String;"/>
-		<method name="getDisplayVariant(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayVariant(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
-		<method name="getDisplayVariant(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getExtension(C)Ljava/lang/String;"/>
-		<method name="getExtensionKeys()Ljava/util/Set;"/>
-		<method name="getFallback()Landroid/icu/util/ULocale;"/>
-		<method name="getFallback(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getISO3Country()Ljava/lang/String;"/>
-		<method name="getISO3Country(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getISO3Language()Ljava/lang/String;"/>
-		<method name="getISO3Language(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getISOCountries()[Ljava/lang/String;"/>
-		<method name="getISOLanguages()[Ljava/lang/String;"/>
-		<method name="getKeywordValue(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getKeywordValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getKeywords()Ljava/util/Iterator;"/>
-		<method name="getKeywords(Ljava/lang/String;)Ljava/util/Iterator;"/>
-		<method name="getLanguage()Ljava/lang/String;"/>
-		<method name="getLanguage(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getLineOrientation()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getScript()Ljava/lang/String;"/>
-		<method name="getScript(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getUnicodeLocaleAttributes()Ljava/util/Set;"/>
-		<method name="getUnicodeLocaleKeys()Ljava/util/Set;"/>
-		<method name="getUnicodeLocaleType(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getVariant()Ljava/lang/String;"/>
-		<method name="getVariant(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="isRightToLeft()Z"/>
-		<method name="minimizeSubtags(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;"/>
-		<method name="setKeywordValue(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/ULocale;"/>
-		<method name="setKeywordValue(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toLanguageTag()Ljava/lang/String;"/>
-		<method name="toLegacyKey(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toLegacyType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toLocale()Ljava/util/Locale;"/>
-		<method name="toUnicodeLocaleKey(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toUnicodeLocaleType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="CANADA"/>
-		<field name="CANADA_FRENCH"/>
-		<field name="CHINA"/>
-		<field name="CHINESE"/>
-		<field name="ENGLISH"/>
-		<field name="FRANCE"/>
-		<field name="FRENCH"/>
-		<field name="GERMAN"/>
-		<field name="GERMANY"/>
-		<field name="ITALIAN"/>
-		<field name="ITALY"/>
-		<field name="JAPAN"/>
-		<field name="JAPANESE"/>
-		<field name="KOREA"/>
-		<field name="KOREAN"/>
-		<field name="PRC"/>
-		<field name="PRIVATE_USE_EXTENSION"/>
-		<field name="ROOT"/>
-		<field name="SIMPLIFIED_CHINESE"/>
-		<field name="TAIWAN"/>
-		<field name="TRADITIONAL_CHINESE"/>
-		<field name="UK"/>
-		<field name="UNICODE_LOCALE_EXTENSION"/>
-		<field name="US"/>
-	</class>
-	<class name="android/icu/util/ULocale$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addUnicodeLocaleAttribute(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="build()Landroid/icu/util/ULocale;"/>
-		<method name="clear()Landroid/icu/util/ULocale$Builder;"/>
-		<method name="clearExtensions()Landroid/icu/util/ULocale$Builder;"/>
-		<method name="removeUnicodeLocaleAttribute(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setExtension(CLjava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setLanguage(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setLanguageTag(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setLocale(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setRegion(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setScript(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setUnicodeLocaleKeyword(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-		<method name="setVariant(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
-	</class>
-	<class name="android/icu/util/ULocale$Category" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/ULocale$Category;"/>
-		<method name="values()[Landroid/icu/util/ULocale$Category;"/>
-		<field name="DISPLAY"/>
-		<field name="FORMAT"/>
-	</class>
-	<class name="android/icu/util/UniversalTimeScale" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="bigDecimalFrom(DI)Landroid/icu/math/BigDecimal;"/>
-		<method name="bigDecimalFrom(JI)Landroid/icu/math/BigDecimal;"/>
-		<method name="bigDecimalFrom(Landroid/icu/math/BigDecimal;I)Landroid/icu/math/BigDecimal;"/>
-		<method name="from(JI)J"/>
-		<method name="getTimeScaleValue(II)J"/>
-		<method name="toBigDecimal(JI)Landroid/icu/math/BigDecimal;"/>
-		<method name="toBigDecimal(Landroid/icu/math/BigDecimal;I)Landroid/icu/math/BigDecimal;"/>
-		<method name="toLong(JI)J"/>
-		<field name="DB2_TIME"/>
-		<field name="DOTNET_DATE_TIME"/>
-		<field name="EPOCH_OFFSET_PLUS_1_VALUE"/>
-		<field name="EPOCH_OFFSET_VALUE"/>
-		<field name="EXCEL_TIME"/>
-		<field name="FROM_MAX_VALUE"/>
-		<field name="FROM_MIN_VALUE"/>
-		<field name="ICU4C_TIME"/>
-		<field name="JAVA_TIME"/>
-		<field name="MAC_OLD_TIME"/>
-		<field name="MAC_TIME"/>
-		<field name="MAX_SCALE" deprecated="28"/>
-		<field name="TO_MAX_VALUE"/>
-		<field name="TO_MIN_VALUE"/>
-		<field name="UNITS_VALUE"/>
-		<field name="UNIX_MICROSECONDS_TIME"/>
-		<field name="UNIX_TIME"/>
-		<field name="WINDOWS_FILE_TIME"/>
-	</class>
-	<class name="android/icu/util/ValueIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="next(Landroid/icu/util/ValueIterator$Element;)Z"/>
-		<method name="reset()V"/>
-		<method name="setRange(II)V"/>
-	</class>
-	<class name="android/icu/util/ValueIterator$Element" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="integer"/>
-		<field name="value"/>
-	</class>
-	<class name="android/icu/util/VersionInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="compareTo(Landroid/icu/util/VersionInfo;)I"/>
-		<method name="getInstance(I)Landroid/icu/util/VersionInfo;"/>
-		<method name="getInstance(II)Landroid/icu/util/VersionInfo;"/>
-		<method name="getInstance(III)Landroid/icu/util/VersionInfo;"/>
-		<method name="getInstance(IIII)Landroid/icu/util/VersionInfo;"/>
-		<method name="getInstance(Ljava/lang/String;)Landroid/icu/util/VersionInfo;"/>
-		<method name="getMajor()I"/>
-		<method name="getMicro()I"/>
-		<method name="getMilli()I"/>
-		<method name="getMinor()I"/>
-		<field name="ICU_VERSION"/>
-		<field name="UCOL_BUILDER_VERSION"/>
-		<field name="UCOL_RUNTIME_VERSION"/>
-		<field name="UNICODE_10_0" since="28"/>
-		<field name="UNICODE_11_0" since="29"/>
-		<field name="UNICODE_1_0"/>
-		<field name="UNICODE_1_0_1"/>
-		<field name="UNICODE_1_1_0"/>
-		<field name="UNICODE_1_1_5"/>
-		<field name="UNICODE_2_0"/>
-		<field name="UNICODE_2_1_2"/>
-		<field name="UNICODE_2_1_5"/>
-		<field name="UNICODE_2_1_8"/>
-		<field name="UNICODE_2_1_9"/>
-		<field name="UNICODE_3_0"/>
-		<field name="UNICODE_3_0_1"/>
-		<field name="UNICODE_3_1_0"/>
-		<field name="UNICODE_3_1_1"/>
-		<field name="UNICODE_3_2"/>
-		<field name="UNICODE_4_0"/>
-		<field name="UNICODE_4_0_1"/>
-		<field name="UNICODE_4_1"/>
-		<field name="UNICODE_5_0"/>
-		<field name="UNICODE_5_1"/>
-		<field name="UNICODE_5_2"/>
-		<field name="UNICODE_6_0"/>
-		<field name="UNICODE_6_1"/>
-		<field name="UNICODE_6_2"/>
-		<field name="UNICODE_6_3"/>
-		<field name="UNICODE_7_0"/>
-		<field name="UNICODE_8_0"/>
-		<field name="UNICODE_9_0" since="26"/>
-	</class>
-	<class name="android/inputmethodservice/AbstractInputMethodService" since="3">
-		<extends name="android/app/Service"/>
-		<implements name="android/view/KeyEvent$Callback"/>
-		<method name="&lt;init>()V"/>
-		<method name="getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;" since="5"/>
-		<method name="onCreateInputMethodInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;"/>
-		<method name="onCreateInputMethodSessionInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;"/>
-		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="17"/>
-		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/inputmethod/InputMethod"/>
-		<method name="&lt;init>(Landroid/inputmethodservice/AbstractInputMethodService;)V"/>
-	</class>
-	<class name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/inputmethod/InputMethodSession"/>
-		<method name="&lt;init>(Landroid/inputmethodservice/AbstractInputMethodService;)V"/>
-		<method name="isEnabled()Z"/>
-		<method name="isRevoked()Z"/>
-		<method name="revokeSelf()V"/>
-		<method name="setEnabled(Z)V"/>
-	</class>
-	<class name="android/inputmethodservice/ExtractEditText" since="3">
-		<extends name="android/widget/EditText"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="finishInternalChanges()V"/>
-		<method name="hasVerticalScrollBar()Z"/>
-		<method name="startInternalChanges()V"/>
-	</class>
-	<class name="android/inputmethodservice/InputMethodService" since="3">
-		<extends name="android/inputmethodservice/AbstractInputMethodService"/>
-		<method name="&lt;init>()V"/>
-		<method name="enableHardwareAcceleration()Z" since="17" deprecated="21"/>
-		<method name="getBackDisposition()I" since="11"/>
-		<method name="getCandidatesHiddenVisibility()I"/>
-		<method name="getCurrentInputBinding()Landroid/view/inputmethod/InputBinding;"/>
-		<method name="getCurrentInputConnection()Landroid/view/inputmethod/InputConnection;"/>
-		<method name="getCurrentInputEditorInfo()Landroid/view/inputmethod/EditorInfo;"/>
-		<method name="getCurrentInputStarted()Z"/>
-		<method name="getInputMethodWindowRecommendedHeight()I" since="21"/>
-		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
-		<method name="getMaxWidth()I"/>
-		<method name="getTextForImeAction(I)Ljava/lang/CharSequence;"/>
-		<method name="getWindow()Landroid/app/Dialog;"/>
-		<method name="hideStatusIcon()V"/>
-		<method name="hideWindow()V"/>
-		<method name="isExtractViewShown()Z"/>
-		<method name="isFullscreenMode()Z"/>
-		<method name="isInputViewShown()Z"/>
-		<method name="isShowInputRequested()Z"/>
-		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="onBindInput()V"/>
-		<method name="onComputeInsets(Landroid/inputmethodservice/InputMethodService$Insets;)V"/>
-		<method name="onConfigureWindow(Landroid/view/Window;ZZ)V"/>
-		<method name="onCreateCandidatesView()Landroid/view/View;"/>
-		<method name="onCreateExtractTextView()Landroid/view/View;"/>
-		<method name="onCreateInputView()Landroid/view/View;"/>
-		<method name="onCurrentInputMethodSubtypeChanged(Landroid/view/inputmethod/InputMethodSubtype;)V" since="11"/>
-		<method name="onDisplayCompletions([Landroid/view/inputmethod/CompletionInfo;)V"/>
-		<method name="onEvaluateFullscreenMode()Z"/>
-		<method name="onEvaluateInputViewShown()Z"/>
-		<method name="onExtractTextContextMenuItem(I)Z"/>
-		<method name="onExtractedCursorMovement(II)V"/>
-		<method name="onExtractedSelectionChanged(II)V"/>
-		<method name="onExtractedTextClicked()V"/>
-		<method name="onExtractingInputChanged(Landroid/view/inputmethod/EditorInfo;)V"/>
-		<method name="onFinishCandidatesView(Z)V"/>
-		<method name="onFinishInput()V"/>
-		<method name="onFinishInputView(Z)V"/>
-		<method name="onInitializeInterface()V"/>
-		<method name="onShowInputRequested(IZ)Z"/>
-		<method name="onStartCandidatesView(Landroid/view/inputmethod/EditorInfo;Z)V"/>
-		<method name="onStartInput(Landroid/view/inputmethod/EditorInfo;Z)V"/>
-		<method name="onStartInputView(Landroid/view/inputmethod/EditorInfo;Z)V"/>
-		<method name="onUnbindInput()V"/>
-		<method name="onUpdateCursor(Landroid/graphics/Rect;)V" deprecated="21"/>
-		<method name="onUpdateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21"/>
-		<method name="onUpdateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V"/>
-		<method name="onUpdateExtractingViews(Landroid/view/inputmethod/EditorInfo;)V"/>
-		<method name="onUpdateExtractingVisibility(Landroid/view/inputmethod/EditorInfo;)V"/>
-		<method name="onUpdateSelection(IIIIII)V"/>
-		<method name="onViewClicked(Z)V" since="14"/>
-		<method name="onWindowHidden()V"/>
-		<method name="onWindowShown()V"/>
-		<method name="requestHideSelf(I)V"/>
-		<method name="requestShowSelf(I)V" since="28"/>
-		<method name="sendDefaultEditorAction(Z)Z"/>
-		<method name="sendDownUpKeyEvents(I)V"/>
-		<method name="sendKeyChar(C)V"/>
-		<method name="setBackDisposition(I)V" since="11"/>
-		<method name="setCandidatesView(Landroid/view/View;)V"/>
-		<method name="setCandidatesViewShown(Z)V"/>
-		<method name="setExtractView(Landroid/view/View;)V"/>
-		<method name="setExtractViewShown(Z)V"/>
-		<method name="setInputView(Landroid/view/View;)V"/>
-		<method name="shouldOfferSwitchingToNextInputMethod()Z" since="28"/>
-		<method name="showStatusIcon(I)V"/>
-		<method name="showWindow(Z)V"/>
-		<method name="switchInputMethod(Ljava/lang/String;)V"/>
-		<method name="switchInputMethod(Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V" since="28"/>
-		<method name="switchToNextInputMethod(Z)Z" since="28"/>
-		<method name="switchToPreviousInputMethod()Z" since="28"/>
-		<method name="updateFullscreenMode()V"/>
-		<method name="updateInputViewShown()V"/>
-		<field name="BACK_DISPOSITION_ADJUST_NOTHING" since="28"/>
-		<field name="BACK_DISPOSITION_DEFAULT" since="11"/>
-		<field name="BACK_DISPOSITION_WILL_DISMISS" since="11" deprecated="28"/>
-		<field name="BACK_DISPOSITION_WILL_NOT_DISMISS" since="11" deprecated="28"/>
-	</class>
-	<class name="android/inputmethodservice/InputMethodService$InputMethodImpl" since="3">
-		<extends name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl"/>
-		<method name="&lt;init>(Landroid/inputmethodservice/InputMethodService;)V"/>
-	</class>
-	<class name="android/inputmethodservice/InputMethodService$InputMethodSessionImpl" since="3">
-		<extends name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl"/>
-		<method name="&lt;init>(Landroid/inputmethodservice/InputMethodService;)V"/>
-	</class>
-	<class name="android/inputmethodservice/InputMethodService$Insets" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="TOUCHABLE_INSETS_CONTENT"/>
-		<field name="TOUCHABLE_INSETS_FRAME"/>
-		<field name="TOUCHABLE_INSETS_REGION" since="11"/>
-		<field name="TOUCHABLE_INSETS_VISIBLE"/>
-		<field name="contentTopInsets"/>
-		<field name="touchableInsets"/>
-		<field name="touchableRegion" since="11"/>
-		<field name="visibleTopInsets"/>
-	</class>
-	<class name="android/inputmethodservice/Keyboard" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;IIII)V" since="11"/>
-		<method name="&lt;init>(Landroid/content/Context;ILjava/lang/CharSequence;II)V"/>
-		<method name="createKeyFromXml(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Key;"/>
-		<method name="createRowFromXml(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Row;"/>
-		<method name="getHeight()I"/>
-		<method name="getHorizontalGap()I"/>
-		<method name="getKeyHeight()I"/>
-		<method name="getKeyWidth()I"/>
-		<method name="getKeys()Ljava/util/List;"/>
-		<method name="getMinWidth()I"/>
-		<method name="getModifierKeys()Ljava/util/List;"/>
-		<method name="getNearestKeys(II)[I"/>
-		<method name="getShiftKeyIndex()I"/>
-		<method name="getVerticalGap()I"/>
-		<method name="isShifted()Z"/>
-		<method name="setHorizontalGap(I)V"/>
-		<method name="setKeyHeight(I)V"/>
-		<method name="setKeyWidth(I)V"/>
-		<method name="setShifted(Z)Z"/>
-		<method name="setVerticalGap(I)V"/>
-		<field name="EDGE_BOTTOM"/>
-		<field name="EDGE_LEFT"/>
-		<field name="EDGE_RIGHT"/>
-		<field name="EDGE_TOP"/>
-		<field name="KEYCODE_ALT"/>
-		<field name="KEYCODE_CANCEL"/>
-		<field name="KEYCODE_DELETE"/>
-		<field name="KEYCODE_DONE"/>
-		<field name="KEYCODE_MODE_CHANGE"/>
-		<field name="KEYCODE_SHIFT"/>
-	</class>
-	<class name="android/inputmethodservice/Keyboard$Key" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)V"/>
-		<method name="&lt;init>(Landroid/inputmethodservice/Keyboard$Row;)V"/>
-		<method name="getCurrentDrawableState()[I"/>
-		<method name="isInside(II)Z"/>
-		<method name="onPressed()V"/>
-		<method name="onReleased(Z)V"/>
-		<method name="squaredDistanceFrom(II)I"/>
-		<field name="codes"/>
-		<field name="edgeFlags"/>
-		<field name="gap"/>
-		<field name="height"/>
-		<field name="icon"/>
-		<field name="iconPreview"/>
-		<field name="label"/>
-		<field name="modifier"/>
-		<field name="on"/>
-		<field name="popupCharacters"/>
-		<field name="popupResId"/>
-		<field name="pressed"/>
-		<field name="repeatable"/>
-		<field name="sticky"/>
-		<field name="text"/>
-		<field name="width"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/inputmethodservice/Keyboard$Row" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard;Landroid/content/res/XmlResourceParser;)V"/>
-		<method name="&lt;init>(Landroid/inputmethodservice/Keyboard;)V"/>
-		<field name="defaultHeight"/>
-		<field name="defaultHorizontalGap"/>
-		<field name="defaultWidth"/>
-		<field name="mode"/>
-		<field name="rowEdgeFlags"/>
-		<field name="verticalGap"/>
-	</class>
-	<class name="android/inputmethodservice/KeyboardView" since="3">
-		<extends name="android/view/View"/>
-		<implements name="android/view/View$OnClickListener"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="closing()V"/>
-		<method name="getKeyboard()Landroid/inputmethodservice/Keyboard;"/>
-		<method name="getOnKeyboardActionListener()Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;"/>
-		<method name="handleBack()Z"/>
-		<method name="invalidateAllKeys()V" since="4"/>
-		<method name="invalidateKey(I)V" since="4"/>
-		<method name="isPreviewEnabled()Z"/>
-		<method name="isProximityCorrectionEnabled()Z"/>
-		<method name="isShifted()Z"/>
-		<method name="onLongPress(Landroid/inputmethodservice/Keyboard$Key;)Z"/>
-		<method name="setKeyboard(Landroid/inputmethodservice/Keyboard;)V"/>
-		<method name="setOnKeyboardActionListener(Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;)V"/>
-		<method name="setPopupOffset(II)V"/>
-		<method name="setPopupParent(Landroid/view/View;)V"/>
-		<method name="setPreviewEnabled(Z)V"/>
-		<method name="setProximityCorrectionEnabled(Z)V"/>
-		<method name="setShifted(Z)Z"/>
-		<method name="setVerticalCorrection(I)V"/>
-		<method name="swipeDown()V"/>
-		<method name="swipeLeft()V"/>
-		<method name="swipeRight()V"/>
-		<method name="swipeUp()V"/>
-	</class>
-	<class name="android/inputmethodservice/KeyboardView$OnKeyboardActionListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onKey(I[I)V"/>
-		<method name="onPress(I)V"/>
-		<method name="onRelease(I)V"/>
-		<method name="onText(Ljava/lang/CharSequence;)V"/>
-		<method name="swipeDown()V"/>
-		<method name="swipeLeft()V"/>
-		<method name="swipeRight()V"/>
-		<method name="swipeUp()V"/>
-	</class>
-	<class name="android/location/Address" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="clearLatitude()V"/>
-		<method name="clearLongitude()V"/>
-		<method name="getAddressLine(I)Ljava/lang/String;"/>
-		<method name="getAdminArea()Ljava/lang/String;"/>
-		<method name="getCountryCode()Ljava/lang/String;"/>
-		<method name="getCountryName()Ljava/lang/String;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getFeatureName()Ljava/lang/String;"/>
-		<method name="getLatitude()D"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getLocality()Ljava/lang/String;"/>
-		<method name="getLongitude()D"/>
-		<method name="getMaxAddressLineIndex()I"/>
-		<method name="getPhone()Ljava/lang/String;"/>
-		<method name="getPostalCode()Ljava/lang/String;"/>
-		<method name="getPremises()Ljava/lang/String;" since="4"/>
-		<method name="getSubAdminArea()Ljava/lang/String;"/>
-		<method name="getSubLocality()Ljava/lang/String;" since="4"/>
-		<method name="getSubThoroughfare()Ljava/lang/String;" since="4"/>
-		<method name="getThoroughfare()Ljava/lang/String;"/>
-		<method name="getUrl()Ljava/lang/String;"/>
-		<method name="hasLatitude()Z"/>
-		<method name="hasLongitude()Z"/>
-		<method name="setAddressLine(ILjava/lang/String;)V"/>
-		<method name="setAdminArea(Ljava/lang/String;)V"/>
-		<method name="setCountryCode(Ljava/lang/String;)V"/>
-		<method name="setCountryName(Ljava/lang/String;)V"/>
-		<method name="setExtras(Landroid/os/Bundle;)V"/>
-		<method name="setFeatureName(Ljava/lang/String;)V"/>
-		<method name="setLatitude(D)V"/>
-		<method name="setLocality(Ljava/lang/String;)V"/>
-		<method name="setLongitude(D)V"/>
-		<method name="setPhone(Ljava/lang/String;)V"/>
-		<method name="setPostalCode(Ljava/lang/String;)V"/>
-		<method name="setPremises(Ljava/lang/String;)V" since="4"/>
-		<method name="setSubAdminArea(Ljava/lang/String;)V"/>
-		<method name="setSubLocality(Ljava/lang/String;)V" since="4"/>
-		<method name="setSubThoroughfare(Ljava/lang/String;)V" since="4"/>
-		<method name="setThoroughfare(Ljava/lang/String;)V"/>
-		<method name="setUrl(Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/location/Criteria" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/location/Criteria;)V"/>
-		<method name="getAccuracy()I"/>
-		<method name="getBearingAccuracy()I" since="9"/>
-		<method name="getHorizontalAccuracy()I" since="9"/>
-		<method name="getPowerRequirement()I"/>
-		<method name="getSpeedAccuracy()I" since="9"/>
-		<method name="getVerticalAccuracy()I" since="9"/>
-		<method name="isAltitudeRequired()Z"/>
-		<method name="isBearingRequired()Z"/>
-		<method name="isCostAllowed()Z"/>
-		<method name="isSpeedRequired()Z"/>
-		<method name="setAccuracy(I)V"/>
-		<method name="setAltitudeRequired(Z)V"/>
-		<method name="setBearingAccuracy(I)V" since="9"/>
-		<method name="setBearingRequired(Z)V"/>
-		<method name="setCostAllowed(Z)V"/>
-		<method name="setHorizontalAccuracy(I)V" since="9"/>
-		<method name="setPowerRequirement(I)V"/>
-		<method name="setSpeedAccuracy(I)V" since="9"/>
-		<method name="setSpeedRequired(Z)V"/>
-		<method name="setVerticalAccuracy(I)V" since="9"/>
-		<field name="ACCURACY_COARSE"/>
-		<field name="ACCURACY_FINE"/>
-		<field name="ACCURACY_HIGH" since="9"/>
-		<field name="ACCURACY_LOW" since="9"/>
-		<field name="ACCURACY_MEDIUM" since="9"/>
-		<field name="CREATOR"/>
-		<field name="NO_REQUIREMENT"/>
-		<field name="POWER_HIGH"/>
-		<field name="POWER_LOW"/>
-		<field name="POWER_MEDIUM"/>
-	</class>
-	<class name="android/location/Geocoder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/Locale;)V"/>
-		<method name="getFromLocation(DDI)Ljava/util/List;"/>
-		<method name="getFromLocationName(Ljava/lang/String;I)Ljava/util/List;"/>
-		<method name="getFromLocationName(Ljava/lang/String;IDDDD)Ljava/util/List;"/>
-		<method name="isPresent()Z" since="9"/>
-	</class>
-	<class name="android/location/GnssClock" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBiasNanos()D"/>
-		<method name="getBiasUncertaintyNanos()D"/>
-		<method name="getDriftNanosPerSecond()D"/>
-		<method name="getDriftUncertaintyNanosPerSecond()D"/>
-		<method name="getFullBiasNanos()J"/>
-		<method name="getHardwareClockDiscontinuityCount()I"/>
-		<method name="getLeapSecond()I"/>
-		<method name="getTimeNanos()J"/>
-		<method name="getTimeUncertaintyNanos()D"/>
-		<method name="hasBiasNanos()Z"/>
-		<method name="hasBiasUncertaintyNanos()Z"/>
-		<method name="hasDriftNanosPerSecond()Z"/>
-		<method name="hasDriftUncertaintyNanosPerSecond()Z"/>
-		<method name="hasFullBiasNanos()Z"/>
-		<method name="hasLeapSecond()Z"/>
-		<method name="hasTimeUncertaintyNanos()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/location/GnssMeasurement" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAccumulatedDeltaRangeMeters()D"/>
-		<method name="getAccumulatedDeltaRangeState()I"/>
-		<method name="getAccumulatedDeltaRangeUncertaintyMeters()D"/>
-		<method name="getAutomaticGainControlLevelDb()D" since="26"/>
-		<method name="getCarrierCycles()J" deprecated="28"/>
-		<method name="getCarrierFrequencyHz()F"/>
-		<method name="getCarrierPhase()D" deprecated="28"/>
-		<method name="getCarrierPhaseUncertainty()D" deprecated="28"/>
-		<method name="getCn0DbHz()D"/>
-		<method name="getConstellationType()I"/>
-		<method name="getMultipathIndicator()I"/>
-		<method name="getPseudorangeRateMetersPerSecond()D"/>
-		<method name="getPseudorangeRateUncertaintyMetersPerSecond()D"/>
-		<method name="getReceivedSvTimeNanos()J"/>
-		<method name="getReceivedSvTimeUncertaintyNanos()J"/>
-		<method name="getSnrInDb()D"/>
-		<method name="getState()I"/>
-		<method name="getSvid()I"/>
-		<method name="getTimeOffsetNanos()D"/>
-		<method name="hasAutomaticGainControlLevelDb()Z" since="26"/>
-		<method name="hasCarrierCycles()Z" deprecated="28"/>
-		<method name="hasCarrierFrequencyHz()Z"/>
-		<method name="hasCarrierPhase()Z" deprecated="28"/>
-		<method name="hasCarrierPhaseUncertainty()Z" deprecated="28"/>
-		<method name="hasSnrInDb()Z"/>
-		<field name="ADR_STATE_CYCLE_SLIP"/>
-		<field name="ADR_STATE_HALF_CYCLE_REPORTED" since="28"/>
-		<field name="ADR_STATE_HALF_CYCLE_RESOLVED" since="28"/>
-		<field name="ADR_STATE_RESET"/>
-		<field name="ADR_STATE_UNKNOWN"/>
-		<field name="ADR_STATE_VALID"/>
-		<field name="CREATOR"/>
-		<field name="MULTIPATH_INDICATOR_DETECTED"/>
-		<field name="MULTIPATH_INDICATOR_NOT_DETECTED"/>
-		<field name="MULTIPATH_INDICATOR_UNKNOWN"/>
-		<field name="STATE_BDS_D2_BIT_SYNC"/>
-		<field name="STATE_BDS_D2_SUBFRAME_SYNC"/>
-		<field name="STATE_BIT_SYNC"/>
-		<field name="STATE_CODE_LOCK"/>
-		<field name="STATE_GAL_E1BC_CODE_LOCK"/>
-		<field name="STATE_GAL_E1B_PAGE_SYNC"/>
-		<field name="STATE_GAL_E1C_2ND_CODE_LOCK"/>
-		<field name="STATE_GLO_STRING_SYNC"/>
-		<field name="STATE_GLO_TOD_DECODED"/>
-		<field name="STATE_GLO_TOD_KNOWN" since="26"/>
-		<field name="STATE_MSEC_AMBIGUOUS"/>
-		<field name="STATE_SBAS_SYNC"/>
-		<field name="STATE_SUBFRAME_SYNC"/>
-		<field name="STATE_SYMBOL_SYNC"/>
-		<field name="STATE_TOW_DECODED"/>
-		<field name="STATE_TOW_KNOWN" since="26"/>
-		<field name="STATE_UNKNOWN"/>
-	</class>
-	<class name="android/location/GnssMeasurementsEvent" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/location/GnssClock;[Landroid/location/GnssMeasurement;)V" since="29"/>
-		<method name="getClock()Landroid/location/GnssClock;"/>
-		<method name="getMeasurements()Ljava/util/Collection;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/location/GnssMeasurementsEvent$Callback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGnssMeasurementsReceived(Landroid/location/GnssMeasurementsEvent;)V"/>
-		<method name="onStatusChanged(I)V"/>
-		<field name="STATUS_LOCATION_DISABLED"/>
-		<field name="STATUS_NOT_ALLOWED" since="28"/>
-		<field name="STATUS_NOT_SUPPORTED"/>
-		<field name="STATUS_READY"/>
-	</class>
-	<class name="android/location/GnssNavigationMessage" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getData()[B"/>
-		<method name="getMessageId()I"/>
-		<method name="getStatus()I"/>
-		<method name="getSubmessageId()I"/>
-		<method name="getSvid()I"/>
-		<method name="getType()I"/>
-		<field name="CREATOR"/>
-		<field name="STATUS_PARITY_PASSED"/>
-		<field name="STATUS_PARITY_REBUILT"/>
-		<field name="STATUS_UNKNOWN"/>
-		<field name="TYPE_BDS_D1"/>
-		<field name="TYPE_BDS_D2"/>
-		<field name="TYPE_GAL_F"/>
-		<field name="TYPE_GAL_I"/>
-		<field name="TYPE_GLO_L1CA"/>
-		<field name="TYPE_GPS_CNAV2"/>
-		<field name="TYPE_GPS_L1CA"/>
-		<field name="TYPE_GPS_L2CNAV"/>
-		<field name="TYPE_GPS_L5CNAV"/>
-		<field name="TYPE_UNKNOWN"/>
-	</class>
-	<class name="android/location/GnssNavigationMessage$Callback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGnssNavigationMessageReceived(Landroid/location/GnssNavigationMessage;)V"/>
-		<method name="onStatusChanged(I)V"/>
-		<field name="STATUS_LOCATION_DISABLED"/>
-		<field name="STATUS_NOT_SUPPORTED"/>
-		<field name="STATUS_READY"/>
-	</class>
-	<class name="android/location/GnssStatus" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I[I[F[F[F[F)V" since="29"/>
-		<method name="getAzimuthDegrees(I)F"/>
-		<method name="getCarrierFrequencyHz(I)F" since="26"/>
-		<method name="getCn0DbHz(I)F"/>
-		<method name="getConstellationType(I)I"/>
-		<method name="getElevationDegrees(I)F"/>
-		<method name="getSatelliteCount()I"/>
-		<method name="getSvid(I)I"/>
-		<method name="hasAlmanacData(I)Z"/>
-		<method name="hasCarrierFrequencyHz(I)Z" since="26"/>
-		<method name="hasEphemerisData(I)Z"/>
-		<method name="usedInFix(I)Z"/>
-		<field name="CONSTELLATION_BEIDOU"/>
-		<field name="CONSTELLATION_GALILEO"/>
-		<field name="CONSTELLATION_GLONASS"/>
-		<field name="CONSTELLATION_GPS"/>
-		<field name="CONSTELLATION_QZSS"/>
-		<field name="CONSTELLATION_SBAS"/>
-		<field name="CONSTELLATION_UNKNOWN"/>
-	</class>
-	<class name="android/location/GnssStatus$Callback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFirstFix(I)V"/>
-		<method name="onSatelliteStatusChanged(Landroid/location/GnssStatus;)V"/>
-		<method name="onStarted()V"/>
-		<method name="onStopped()V"/>
-	</class>
-	<class name="android/location/GpsSatellite" since="3" deprecated="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="getAzimuth()F"/>
-		<method name="getElevation()F"/>
-		<method name="getPrn()I"/>
-		<method name="getSnr()F"/>
-		<method name="hasAlmanac()Z"/>
-		<method name="hasEphemeris()Z"/>
-		<method name="usedInFix()Z"/>
-	</class>
-	<class name="android/location/GpsStatus" since="3" deprecated="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMaxSatellites()I"/>
-		<method name="getSatellites()Ljava/lang/Iterable;"/>
-		<method name="getTimeToFirstFix()I"/>
-		<field name="GPS_EVENT_FIRST_FIX"/>
-		<field name="GPS_EVENT_SATELLITE_STATUS"/>
-		<field name="GPS_EVENT_STARTED"/>
-		<field name="GPS_EVENT_STOPPED"/>
-	</class>
-	<class name="android/location/GpsStatus$Listener" since="3" deprecated="24">
-		<extends name="java/lang/Object"/>
-		<method name="onGpsStatusChanged(I)V"/>
-	</class>
-	<class name="android/location/GpsStatus$NmeaListener" since="5" deprecated="24">
-		<extends name="java/lang/Object"/>
-		<method name="onNmeaReceived(JLjava/lang/String;)V"/>
-	</class>
-	<class name="android/location/Location" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/location/Location;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="bearingTo(Landroid/location/Location;)F"/>
-		<method name="convert(DI)Ljava/lang/String;"/>
-		<method name="convert(Ljava/lang/String;)D"/>
-		<method name="distanceBetween(DDDD[F)V"/>
-		<method name="distanceTo(Landroid/location/Location;)F"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="3"/>
-		<method name="getAccuracy()F"/>
-		<method name="getAltitude()D"/>
-		<method name="getBearing()F"/>
-		<method name="getBearingAccuracyDegrees()F" since="26"/>
-		<method name="getElapsedRealtimeNanos()J" since="17"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getLatitude()D"/>
-		<method name="getLongitude()D"/>
-		<method name="getProvider()Ljava/lang/String;"/>
-		<method name="getSpeed()F"/>
-		<method name="getSpeedAccuracyMetersPerSecond()F" since="26"/>
-		<method name="getTime()J"/>
-		<method name="getVerticalAccuracyMeters()F" since="26"/>
-		<method name="hasAccuracy()Z"/>
-		<method name="hasAltitude()Z"/>
-		<method name="hasBearing()Z"/>
-		<method name="hasBearingAccuracy()Z" since="26"/>
-		<method name="hasSpeed()Z"/>
-		<method name="hasSpeedAccuracy()Z" since="26"/>
-		<method name="hasVerticalAccuracy()Z" since="26"/>
-		<method name="isFromMockProvider()Z" since="18"/>
-		<method name="removeAccuracy()V" deprecated="26"/>
-		<method name="removeAltitude()V" deprecated="26"/>
-		<method name="removeBearing()V" deprecated="26"/>
-		<method name="removeSpeed()V" deprecated="26"/>
-		<method name="reset()V"/>
-		<method name="set(Landroid/location/Location;)V"/>
-		<method name="setAccuracy(F)V"/>
-		<method name="setAltitude(D)V"/>
-		<method name="setBearing(F)V"/>
-		<method name="setBearingAccuracyDegrees(F)V" since="26"/>
-		<method name="setElapsedRealtimeNanos(J)V" since="17"/>
-		<method name="setExtras(Landroid/os/Bundle;)V"/>
-		<method name="setLatitude(D)V"/>
-		<method name="setLongitude(D)V"/>
-		<method name="setProvider(Ljava/lang/String;)V"/>
-		<method name="setSpeed(F)V"/>
-		<method name="setSpeedAccuracyMetersPerSecond(F)V" since="26"/>
-		<method name="setTime(J)V"/>
-		<method name="setVerticalAccuracyMeters(F)V" since="26"/>
-		<field name="CREATOR"/>
-		<field name="FORMAT_DEGREES"/>
-		<field name="FORMAT_MINUTES"/>
-		<field name="FORMAT_SECONDS"/>
-	</class>
-	<class name="android/location/LocationListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onLocationChanged(Landroid/location/Location;)V"/>
-		<method name="onProviderDisabled(Ljava/lang/String;)V"/>
-		<method name="onProviderEnabled(Ljava/lang/String;)V"/>
-		<method name="onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/location/LocationManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addGpsStatusListener(Landroid/location/GpsStatus$Listener;)Z" since="3" deprecated="24"/>
-		<method name="addNmeaListener(Landroid/location/GpsStatus$NmeaListener;)Z" since="5" deprecated="24"/>
-		<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;)Z" since="24"/>
-		<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;Landroid/os/Handler;)Z" since="24"/>
-		<method name="addProximityAlert(DDFJLandroid/app/PendingIntent;)V"/>
-		<method name="addTestProvider(Ljava/lang/String;ZZZZZZZII)V" since="3"/>
-		<method name="clearTestProviderEnabled(Ljava/lang/String;)V" since="3"/>
-		<method name="clearTestProviderLocation(Ljava/lang/String;)V" since="3"/>
-		<method name="clearTestProviderStatus(Ljava/lang/String;)V" since="3"/>
-		<method name="getAllProviders()Ljava/util/List;"/>
-		<method name="getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;"/>
-		<method name="getGnssHardwareModelName()Ljava/lang/String;" since="28"/>
-		<method name="getGnssYearOfHardware()I" since="28"/>
-		<method name="getGpsStatus(Landroid/location/GpsStatus;)Landroid/location/GpsStatus;" since="3" deprecated="24"/>
-		<method name="getLastKnownLocation(Ljava/lang/String;)Landroid/location/Location;"/>
-		<method name="getProvider(Ljava/lang/String;)Landroid/location/LocationProvider;"/>
-		<method name="getProviders(Landroid/location/Criteria;Z)Ljava/util/List;"/>
-		<method name="getProviders(Z)Ljava/util/List;"/>
-		<method name="isLocationEnabled()Z" since="28"/>
-		<method name="isProviderEnabled(Ljava/lang/String;)Z"/>
-		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)Z" since="24"/>
-		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;Landroid/os/Handler;)Z" since="24"/>
-		<method name="registerGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;)Z" since="24"/>
-		<method name="registerGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;Landroid/os/Handler;)Z" since="24"/>
-		<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;)Z" since="24"/>
-		<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;Landroid/os/Handler;)Z" since="24"/>
-		<method name="removeGpsStatusListener(Landroid/location/GpsStatus$Listener;)V" since="3" deprecated="24"/>
-		<method name="removeNmeaListener(Landroid/location/GpsStatus$NmeaListener;)V" since="5" deprecated="24"/>
-		<method name="removeNmeaListener(Landroid/location/OnNmeaMessageListener;)V" since="24"/>
-		<method name="removeProximityAlert(Landroid/app/PendingIntent;)V"/>
-		<method name="removeTestProvider(Ljava/lang/String;)V" since="3"/>
-		<method name="removeUpdates(Landroid/app/PendingIntent;)V" since="3"/>
-		<method name="removeUpdates(Landroid/location/LocationListener;)V"/>
-		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Landroid/app/PendingIntent;)V" since="9"/>
-		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9"/>
-		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/app/PendingIntent;)V" since="3"/>
-		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V"/>
-		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;Landroid/os/Looper;)V"/>
-		<method name="requestSingleUpdate(Landroid/location/Criteria;Landroid/app/PendingIntent;)V" since="9"/>
-		<method name="requestSingleUpdate(Landroid/location/Criteria;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9"/>
-		<method name="requestSingleUpdate(Ljava/lang/String;Landroid/app/PendingIntent;)V" since="9"/>
-		<method name="requestSingleUpdate(Ljava/lang/String;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9"/>
-		<method name="sendExtraCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Z" since="3"/>
-		<method name="setTestProviderEnabled(Ljava/lang/String;Z)V" since="3"/>
-		<method name="setTestProviderLocation(Ljava/lang/String;Landroid/location/Location;)V" since="3"/>
-		<method name="setTestProviderStatus(Ljava/lang/String;ILandroid/os/Bundle;J)V" since="3"/>
-		<method name="unregisterGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)V" since="24"/>
-		<method name="unregisterGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;)V" since="24"/>
-		<method name="unregisterGnssStatusCallback(Landroid/location/GnssStatus$Callback;)V" since="24"/>
-		<field name="GPS_PROVIDER"/>
-		<field name="KEY_LOCATION_CHANGED" since="3"/>
-		<field name="KEY_PROVIDER_ENABLED" since="3"/>
-		<field name="KEY_PROXIMITY_ENTERING"/>
-		<field name="KEY_STATUS_CHANGED" since="3"/>
-		<field name="MODE_CHANGED_ACTION" since="19"/>
-		<field name="NETWORK_PROVIDER"/>
-		<field name="PASSIVE_PROVIDER" since="8"/>
-		<field name="PROVIDERS_CHANGED_ACTION" since="9"/>
-	</class>
-	<class name="android/location/LocationProvider" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAccuracy()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPowerRequirement()I"/>
-		<method name="hasMonetaryCost()Z"/>
-		<method name="meetsCriteria(Landroid/location/Criteria;)Z"/>
-		<method name="requiresCell()Z"/>
-		<method name="requiresNetwork()Z"/>
-		<method name="requiresSatellite()Z"/>
-		<method name="supportsAltitude()Z"/>
-		<method name="supportsBearing()Z"/>
-		<method name="supportsSpeed()Z"/>
-		<field name="AVAILABLE"/>
-		<field name="OUT_OF_SERVICE"/>
-		<field name="TEMPORARILY_UNAVAILABLE"/>
-	</class>
-	<class name="android/location/OnNmeaMessageListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onNmeaMessage(Ljava/lang/String;J)V"/>
-	</class>
-	<class name="android/location/SettingInjectorService" since="19">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="onGetEnabled()Z"/>
-		<method name="onGetSummary()Ljava/lang/String;" deprecated="21"/>
-		<field name="ACTION_INJECTED_SETTING_CHANGED"/>
-		<field name="ACTION_SERVICE_INTENT"/>
-		<field name="ATTRIBUTES_NAME"/>
-		<field name="META_DATA_NAME"/>
-	</class>
-	<class name="android/media/AsyncPlayer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="play(Landroid/content/Context;Landroid/net/Uri;ZI)V" deprecated="23"/>
-		<method name="play(Landroid/content/Context;Landroid/net/Uri;ZLandroid/media/AudioAttributes;)V" since="23"/>
-		<method name="stop()V"/>
-	</class>
-	<class name="android/media/AudioAttributes" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentType()I"/>
-		<method name="getFlags()I"/>
-		<method name="getUsage()I"/>
-		<method name="getVolumeControlStream()I" since="26"/>
-		<field name="CONTENT_TYPE_MOVIE"/>
-		<field name="CONTENT_TYPE_MUSIC"/>
-		<field name="CONTENT_TYPE_SONIFICATION"/>
-		<field name="CONTENT_TYPE_SPEECH"/>
-		<field name="CONTENT_TYPE_UNKNOWN"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_AUDIBILITY_ENFORCED"/>
-		<field name="FLAG_HW_AV_SYNC"/>
-		<field name="FLAG_LOW_LATENCY" since="24" deprecated="26"/>
-		<field name="USAGE_ALARM"/>
-		<field name="USAGE_ASSISTANCE_ACCESSIBILITY"/>
-		<field name="USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
-		<field name="USAGE_ASSISTANCE_SONIFICATION"/>
-		<field name="USAGE_ASSISTANT" since="26"/>
-		<field name="USAGE_GAME"/>
-		<field name="USAGE_MEDIA"/>
-		<field name="USAGE_NOTIFICATION"/>
-		<field name="USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/>
-		<field name="USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/>
-		<field name="USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/>
-		<field name="USAGE_NOTIFICATION_EVENT"/>
-		<field name="USAGE_NOTIFICATION_RINGTONE"/>
-		<field name="USAGE_UNKNOWN"/>
-		<field name="USAGE_VOICE_COMMUNICATION"/>
-		<field name="USAGE_VOICE_COMMUNICATION_SIGNALLING"/>
-	</class>
-	<class name="android/media/AudioAttributes$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/media/AudioAttributes;)V"/>
-		<method name="build()Landroid/media/AudioAttributes;"/>
-		<method name="setContentType(I)Landroid/media/AudioAttributes$Builder;"/>
-		<method name="setFlags(I)Landroid/media/AudioAttributes$Builder;"/>
-		<method name="setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;"/>
-		<method name="setUsage(I)Landroid/media/AudioAttributes$Builder;"/>
-	</class>
-	<class name="android/media/AudioDeviceCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAudioDevicesAdded([Landroid/media/AudioDeviceInfo;)V"/>
-		<method name="onAudioDevicesRemoved([Landroid/media/AudioDeviceInfo;)V"/>
-	</class>
-	<class name="android/media/AudioDeviceInfo" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAddress()Ljava/lang/String;" since="28"/>
-		<method name="getChannelCounts()[I"/>
-		<method name="getChannelIndexMasks()[I"/>
-		<method name="getChannelMasks()[I"/>
-		<method name="getEncodings()[I"/>
-		<method name="getId()I"/>
-		<method name="getProductName()Ljava/lang/CharSequence;"/>
-		<method name="getSampleRates()[I"/>
-		<method name="getType()I"/>
-		<method name="isSink()Z"/>
-		<method name="isSource()Z"/>
-		<field name="TYPE_AUX_LINE"/>
-		<field name="TYPE_BLUETOOTH_A2DP"/>
-		<field name="TYPE_BLUETOOTH_SCO"/>
-		<field name="TYPE_BUILTIN_EARPIECE"/>
-		<field name="TYPE_BUILTIN_MIC"/>
-		<field name="TYPE_BUILTIN_SPEAKER"/>
-		<field name="TYPE_BUS" since="24"/>
-		<field name="TYPE_DOCK"/>
-		<field name="TYPE_FM"/>
-		<field name="TYPE_FM_TUNER"/>
-		<field name="TYPE_HDMI"/>
-		<field name="TYPE_HDMI_ARC"/>
-		<field name="TYPE_HEARING_AID" since="28"/>
-		<field name="TYPE_IP"/>
-		<field name="TYPE_LINE_ANALOG"/>
-		<field name="TYPE_LINE_DIGITAL"/>
-		<field name="TYPE_TELEPHONY"/>
-		<field name="TYPE_TV_TUNER"/>
-		<field name="TYPE_UNKNOWN"/>
-		<field name="TYPE_USB_ACCESSORY"/>
-		<field name="TYPE_USB_DEVICE"/>
-		<field name="TYPE_USB_HEADSET" since="26"/>
-		<field name="TYPE_WIRED_HEADPHONES"/>
-		<field name="TYPE_WIRED_HEADSET"/>
-	</class>
-	<class name="android/media/AudioFocusRequest" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;Landroid/media/AudioAttributes;II)V" since="29"/>
-		<method name="acceptsDelayedFocusGain()Z"/>
-		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
-		<method name="getFocusGain()I"/>
-		<method name="willPauseWhenDucked()Z"/>
-	</class>
-	<class name="android/media/AudioFocusRequest$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/media/AudioFocusRequest;)V"/>
-		<method name="build()Landroid/media/AudioFocusRequest;"/>
-		<method name="setAcceptsDelayedFocusGain(Z)Landroid/media/AudioFocusRequest$Builder;"/>
-		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioFocusRequest$Builder;"/>
-		<method name="setFocusGain(I)Landroid/media/AudioFocusRequest$Builder;"/>
-		<method name="setForceDucking(Z)Landroid/media/AudioFocusRequest$Builder;" since="28"/>
-		<method name="setOnAudioFocusChangeListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;)Landroid/media/AudioFocusRequest$Builder;"/>
-		<method name="setOnAudioFocusChangeListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;)Landroid/media/AudioFocusRequest$Builder;"/>
-		<method name="setWillPauseWhenDucked(Z)Landroid/media/AudioFocusRequest$Builder;"/>
-	</class>
-	<class name="android/media/AudioFormat" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="24"/>
-		<method name="&lt;init>()V"/>
-		<method name="getChannelCount()I" since="23"/>
-		<method name="getChannelIndexMask()I" since="23"/>
-		<method name="getChannelMask()I" since="21"/>
-		<method name="getEncoding()I" since="21"/>
-		<method name="getSampleRate()I" since="21"/>
-		<field name="CHANNEL_CONFIGURATION_DEFAULT" deprecated="16"/>
-		<field name="CHANNEL_CONFIGURATION_INVALID" deprecated="16"/>
-		<field name="CHANNEL_CONFIGURATION_MONO" deprecated="16"/>
-		<field name="CHANNEL_CONFIGURATION_STEREO" deprecated="16"/>
-		<field name="CHANNEL_INVALID" since="5"/>
-		<field name="CHANNEL_IN_BACK" since="5"/>
-		<field name="CHANNEL_IN_BACK_PROCESSED" since="5"/>
-		<field name="CHANNEL_IN_DEFAULT" since="5"/>
-		<field name="CHANNEL_IN_FRONT" since="5"/>
-		<field name="CHANNEL_IN_FRONT_PROCESSED" since="5"/>
-		<field name="CHANNEL_IN_LEFT" since="5"/>
-		<field name="CHANNEL_IN_LEFT_PROCESSED" since="5"/>
-		<field name="CHANNEL_IN_MONO" since="5"/>
-		<field name="CHANNEL_IN_PRESSURE" since="5"/>
-		<field name="CHANNEL_IN_RIGHT" since="5"/>
-		<field name="CHANNEL_IN_RIGHT_PROCESSED" since="5"/>
-		<field name="CHANNEL_IN_STEREO" since="5"/>
-		<field name="CHANNEL_IN_VOICE_DNLINK" since="5"/>
-		<field name="CHANNEL_IN_VOICE_UPLINK" since="5"/>
-		<field name="CHANNEL_IN_X_AXIS" since="5"/>
-		<field name="CHANNEL_IN_Y_AXIS" since="5"/>
-		<field name="CHANNEL_IN_Z_AXIS" since="5"/>
-		<field name="CHANNEL_OUT_5POINT1" since="5"/>
-		<field name="CHANNEL_OUT_7POINT1" since="5" deprecated="23"/>
-		<field name="CHANNEL_OUT_7POINT1_SURROUND" since="23"/>
-		<field name="CHANNEL_OUT_BACK_CENTER" since="5"/>
-		<field name="CHANNEL_OUT_BACK_LEFT" since="5"/>
-		<field name="CHANNEL_OUT_BACK_RIGHT" since="5"/>
-		<field name="CHANNEL_OUT_DEFAULT" since="5"/>
-		<field name="CHANNEL_OUT_FRONT_CENTER" since="5"/>
-		<field name="CHANNEL_OUT_FRONT_LEFT" since="5"/>
-		<field name="CHANNEL_OUT_FRONT_LEFT_OF_CENTER" since="5"/>
-		<field name="CHANNEL_OUT_FRONT_RIGHT" since="5"/>
-		<field name="CHANNEL_OUT_FRONT_RIGHT_OF_CENTER" since="5"/>
-		<field name="CHANNEL_OUT_LOW_FREQUENCY" since="5"/>
-		<field name="CHANNEL_OUT_MONO" since="5"/>
-		<field name="CHANNEL_OUT_QUAD" since="5"/>
-		<field name="CHANNEL_OUT_SIDE_LEFT" since="21"/>
-		<field name="CHANNEL_OUT_SIDE_RIGHT" since="21"/>
-		<field name="CHANNEL_OUT_STEREO" since="5"/>
-		<field name="CHANNEL_OUT_SURROUND" since="5"/>
-		<field name="CREATOR" since="24"/>
-		<field name="ENCODING_AAC_ELD" since="28"/>
-		<field name="ENCODING_AAC_HE_V1" since="28"/>
-		<field name="ENCODING_AAC_HE_V2" since="28"/>
-		<field name="ENCODING_AAC_LC" since="28"/>
-		<field name="ENCODING_AAC_XHE" since="28"/>
-		<field name="ENCODING_AC3" since="21"/>
-		<field name="ENCODING_AC4" since="28"/>
-		<field name="ENCODING_DEFAULT"/>
-		<field name="ENCODING_DOLBY_TRUEHD" since="25"/>
-		<field name="ENCODING_DTS" since="23"/>
-		<field name="ENCODING_DTS_HD" since="23"/>
-		<field name="ENCODING_E_AC3" since="21"/>
-		<field name="ENCODING_E_AC3_JOC" since="28"/>
-		<field name="ENCODING_IEC61937" since="24"/>
-		<field name="ENCODING_INVALID"/>
-		<field name="ENCODING_MP3" since="28"/>
-		<field name="ENCODING_PCM_16BIT"/>
-		<field name="ENCODING_PCM_8BIT"/>
-		<field name="ENCODING_PCM_FLOAT" since="21"/>
-		<field name="SAMPLE_RATE_UNSPECIFIED" since="24"/>
-	</class>
-	<class name="android/media/AudioFormat$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/media/AudioFormat;)V"/>
-		<method name="build()Landroid/media/AudioFormat;"/>
-		<method name="setChannelIndexMask(I)Landroid/media/AudioFormat$Builder;" since="23"/>
-		<method name="setChannelMask(I)Landroid/media/AudioFormat$Builder;"/>
-		<method name="setEncoding(I)Landroid/media/AudioFormat$Builder;"/>
-		<method name="setSampleRate(I)Landroid/media/AudioFormat$Builder;"/>
-	</class>
-	<class name="android/media/AudioManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;)I" since="8" deprecated="26"/>
-		<method name="abandonAudioFocusRequest(Landroid/media/AudioFocusRequest;)I" since="26"/>
-		<method name="adjustStreamVolume(III)V"/>
-		<method name="adjustSuggestedStreamVolume(III)V"/>
-		<method name="adjustVolume(II)V"/>
-		<method name="dispatchMediaKeyEvent(Landroid/view/KeyEvent;)V" since="19"/>
-		<method name="generateAudioSessionId()I" since="21"/>
-		<method name="getActivePlaybackConfigurations()Ljava/util/List;" since="26"/>
-		<method name="getActiveRecordingConfigurations()Ljava/util/List;" since="24"/>
-		<method name="getDevices(I)[Landroid/media/AudioDeviceInfo;" since="23"/>
-		<method name="getMicrophones()Ljava/util/List;" since="28"/>
-		<method name="getMode()I"/>
-		<method name="getParameters(Ljava/lang/String;)Ljava/lang/String;" since="5"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" since="17"/>
-		<method name="getRingerMode()I"/>
-		<method name="getRouting(I)I" deprecated="16"/>
-		<method name="getStreamMaxVolume(I)I"/>
-		<method name="getStreamMinVolume(I)I" since="28"/>
-		<method name="getStreamVolume(I)I"/>
-		<method name="getStreamVolumeDb(III)F" since="28"/>
-		<method name="getVibrateSetting(I)I" deprecated="16"/>
-		<method name="isBluetoothA2dpOn()Z" since="3" deprecated="26"/>
-		<method name="isBluetoothScoAvailableOffCall()Z" since="8"/>
-		<method name="isBluetoothScoOn()Z"/>
-		<method name="isMicrophoneMute()Z"/>
-		<method name="isMusicActive()Z"/>
-		<method name="isSpeakerphoneOn()Z"/>
-		<method name="isStreamMute(I)Z" since="23"/>
-		<method name="isVolumeFixed()Z" since="21"/>
-		<method name="isWiredHeadsetOn()Z" since="5" deprecated="16"/>
-		<method name="loadSoundEffects()V"/>
-		<method name="playSoundEffect(I)V"/>
-		<method name="playSoundEffect(IF)V" since="3"/>
-		<method name="registerAudioDeviceCallback(Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V" since="23"/>
-		<method name="registerAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="registerAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;Landroid/os/Handler;)V" since="24"/>
-		<method name="registerMediaButtonEventReceiver(Landroid/app/PendingIntent;)V" since="18" deprecated="21"/>
-		<method name="registerMediaButtonEventReceiver(Landroid/content/ComponentName;)V" since="8" deprecated="21"/>
-		<method name="registerRemoteControlClient(Landroid/media/RemoteControlClient;)V" since="14" deprecated="21"/>
-		<method name="registerRemoteController(Landroid/media/RemoteController;)Z" since="19" deprecated="21"/>
-		<method name="requestAudioFocus(Landroid/media/AudioFocusRequest;)I" since="26"/>
-		<method name="requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;II)I" since="8" deprecated="26"/>
-		<method name="setBluetoothA2dpOn(Z)V" since="3" deprecated="16"/>
-		<method name="setBluetoothScoOn(Z)V"/>
-		<method name="setMicrophoneMute(Z)V"/>
-		<method name="setMode(I)V"/>
-		<method name="setParameters(Ljava/lang/String;)V" since="5"/>
-		<method name="setRingerMode(I)V"/>
-		<method name="setRouting(III)V" deprecated="16"/>
-		<method name="setSpeakerphoneOn(Z)V"/>
-		<method name="setStreamMute(IZ)V" deprecated="23"/>
-		<method name="setStreamSolo(IZ)V" deprecated="23"/>
-		<method name="setStreamVolume(III)V"/>
-		<method name="setVibrateSetting(II)V" deprecated="16"/>
-		<method name="setWiredHeadsetOn(Z)V" since="5" deprecated="16"/>
-		<method name="shouldVibrate(I)Z" deprecated="16"/>
-		<method name="startBluetoothSco()V" since="8"/>
-		<method name="stopBluetoothSco()V" since="8"/>
-		<method name="unloadSoundEffects()V"/>
-		<method name="unregisterAudioDeviceCallback(Landroid/media/AudioDeviceCallback;)V" since="23"/>
-		<method name="unregisterAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;)V" since="26"/>
-		<method name="unregisterAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;)V" since="24"/>
-		<method name="unregisterMediaButtonEventReceiver(Landroid/app/PendingIntent;)V" since="18" deprecated="21"/>
-		<method name="unregisterMediaButtonEventReceiver(Landroid/content/ComponentName;)V" since="8" deprecated="21"/>
-		<method name="unregisterRemoteControlClient(Landroid/media/RemoteControlClient;)V" since="14" deprecated="21"/>
-		<method name="unregisterRemoteController(Landroid/media/RemoteController;)V" since="19" deprecated="21"/>
-		<field name="ACTION_AUDIO_BECOMING_NOISY" since="3"/>
-		<field name="ACTION_HDMI_AUDIO_PLUG" since="21"/>
-		<field name="ACTION_HEADSET_PLUG" since="21"/>
-		<field name="ACTION_MICROPHONE_MUTE_CHANGED" since="28"/>
-		<field name="ACTION_SCO_AUDIO_STATE_CHANGED" since="8" deprecated="16"/>
-		<field name="ACTION_SCO_AUDIO_STATE_UPDATED" since="14"/>
-		<field name="ADJUST_LOWER"/>
-		<field name="ADJUST_MUTE" since="23"/>
-		<field name="ADJUST_RAISE"/>
-		<field name="ADJUST_SAME"/>
-		<field name="ADJUST_TOGGLE_MUTE" since="23"/>
-		<field name="ADJUST_UNMUTE" since="23"/>
-		<field name="AUDIOFOCUS_GAIN" since="8"/>
-		<field name="AUDIOFOCUS_GAIN_TRANSIENT" since="8"/>
-		<field name="AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE" since="19"/>
-		<field name="AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK" since="8"/>
-		<field name="AUDIOFOCUS_LOSS" since="8"/>
-		<field name="AUDIOFOCUS_LOSS_TRANSIENT" since="8"/>
-		<field name="AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK" since="8"/>
-		<field name="AUDIOFOCUS_NONE" since="26"/>
-		<field name="AUDIOFOCUS_REQUEST_DELAYED" since="26"/>
-		<field name="AUDIOFOCUS_REQUEST_FAILED" since="8"/>
-		<field name="AUDIOFOCUS_REQUEST_GRANTED" since="8"/>
-		<field name="AUDIO_SESSION_ID_GENERATE" since="21"/>
-		<field name="ERROR" since="21"/>
-		<field name="ERROR_DEAD_OBJECT" since="21"/>
-		<field name="EXTRA_AUDIO_PLUG_STATE" since="21"/>
-		<field name="EXTRA_ENCODINGS" since="21"/>
-		<field name="EXTRA_MAX_CHANNEL_COUNT" since="21"/>
-		<field name="EXTRA_RINGER_MODE"/>
-		<field name="EXTRA_SCO_AUDIO_PREVIOUS_STATE" since="14"/>
-		<field name="EXTRA_SCO_AUDIO_STATE" since="8"/>
-		<field name="EXTRA_VIBRATE_SETTING" deprecated="16"/>
-		<field name="EXTRA_VIBRATE_TYPE" deprecated="16"/>
-		<field name="FLAG_ALLOW_RINGER_MODES"/>
-		<field name="FLAG_PLAY_SOUND"/>
-		<field name="FLAG_REMOVE_SOUND_AND_VIBRATE"/>
-		<field name="FLAG_SHOW_UI"/>
-		<field name="FLAG_VIBRATE"/>
-		<field name="FX_FOCUS_NAVIGATION_DOWN"/>
-		<field name="FX_FOCUS_NAVIGATION_LEFT"/>
-		<field name="FX_FOCUS_NAVIGATION_RIGHT"/>
-		<field name="FX_FOCUS_NAVIGATION_UP"/>
-		<field name="FX_KEYPRESS_DELETE" since="3"/>
-		<field name="FX_KEYPRESS_INVALID" since="19"/>
-		<field name="FX_KEYPRESS_RETURN" since="3"/>
-		<field name="FX_KEYPRESS_SPACEBAR" since="3"/>
-		<field name="FX_KEYPRESS_STANDARD" since="3"/>
-		<field name="FX_KEY_CLICK"/>
-		<field name="GET_DEVICES_ALL" since="23"/>
-		<field name="GET_DEVICES_INPUTS" since="23"/>
-		<field name="GET_DEVICES_OUTPUTS" since="23"/>
-		<field name="MODE_CURRENT"/>
-		<field name="MODE_INVALID"/>
-		<field name="MODE_IN_CALL"/>
-		<field name="MODE_IN_COMMUNICATION" since="11"/>
-		<field name="MODE_NORMAL"/>
-		<field name="MODE_RINGTONE"/>
-		<field name="NUM_STREAMS" deprecated="16"/>
-		<field name="PROPERTY_OUTPUT_FRAMES_PER_BUFFER" since="17"/>
-		<field name="PROPERTY_OUTPUT_SAMPLE_RATE" since="17"/>
-		<field name="PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED" since="24"/>
-		<field name="PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND" since="23"/>
-		<field name="PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND" since="23"/>
-		<field name="RINGER_MODE_CHANGED_ACTION"/>
-		<field name="RINGER_MODE_NORMAL"/>
-		<field name="RINGER_MODE_SILENT"/>
-		<field name="RINGER_MODE_VIBRATE"/>
-		<field name="ROUTE_ALL" deprecated="16"/>
-		<field name="ROUTE_BLUETOOTH" deprecated="16"/>
-		<field name="ROUTE_BLUETOOTH_A2DP" since="3" deprecated="16"/>
-		<field name="ROUTE_BLUETOOTH_SCO" since="3" deprecated="16"/>
-		<field name="ROUTE_EARPIECE" deprecated="16"/>
-		<field name="ROUTE_HEADSET" deprecated="16"/>
-		<field name="ROUTE_SPEAKER" deprecated="16"/>
-		<field name="SCO_AUDIO_STATE_CONNECTED" since="8"/>
-		<field name="SCO_AUDIO_STATE_CONNECTING" since="14"/>
-		<field name="SCO_AUDIO_STATE_DISCONNECTED" since="8"/>
-		<field name="SCO_AUDIO_STATE_ERROR" since="8"/>
-		<field name="STREAM_ACCESSIBILITY" since="26"/>
-		<field name="STREAM_ALARM"/>
-		<field name="STREAM_DTMF" since="5"/>
-		<field name="STREAM_MUSIC"/>
-		<field name="STREAM_NOTIFICATION" since="3"/>
-		<field name="STREAM_RING"/>
-		<field name="STREAM_SYSTEM"/>
-		<field name="STREAM_VOICE_CALL"/>
-		<field name="USE_DEFAULT_STREAM_TYPE"/>
-		<field name="VIBRATE_SETTING_CHANGED_ACTION" deprecated="16"/>
-		<field name="VIBRATE_SETTING_OFF" deprecated="16"/>
-		<field name="VIBRATE_SETTING_ON" deprecated="16"/>
-		<field name="VIBRATE_SETTING_ONLY_SILENT" deprecated="16"/>
-		<field name="VIBRATE_TYPE_NOTIFICATION" deprecated="16"/>
-		<field name="VIBRATE_TYPE_RINGER" deprecated="16"/>
-	</class>
-	<class name="android/media/AudioManager$AudioPlaybackCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onPlaybackConfigChanged(Ljava/util/List;)V"/>
-	</class>
-	<class name="android/media/AudioManager$AudioRecordingCallback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onRecordingConfigChanged(Ljava/util/List;)V"/>
-	</class>
-	<class name="android/media/AudioManager$OnAudioFocusChangeListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="onAudioFocusChange(I)V"/>
-	</class>
-	<class name="android/media/AudioPlaybackConfiguration" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/media/AudioPresentation" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IILjava/util/Map;Ljava/lang/String;IZZZ)V" since="29"/>
-		<method name="getLabels()Ljava/util/Map;"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getMasteringIndication()I"/>
-		<method name="hasAudioDescription()Z"/>
-		<method name="hasDialogueEnhancement()Z"/>
-		<method name="hasSpokenSubtitles()Z"/>
-		<field name="MASTERED_FOR_3D"/>
-		<field name="MASTERED_FOR_HEADPHONE"/>
-		<field name="MASTERED_FOR_STEREO"/>
-		<field name="MASTERED_FOR_SURROUND"/>
-		<field name="MASTERING_NOT_INDICATED"/>
-	</class>
-	<class name="android/media/AudioRecord" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/AudioRouting" since="24"/>
-		<method name="&lt;init>(IIIII)V"/>
-		<method name="addOnRoutingChangedListener(Landroid/media/AudioRecord$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24"/>
-		<method name="getActiveMicrophones()Ljava/util/List;" since="28"/>
-		<method name="getAudioFormat()I"/>
-		<method name="getAudioSessionId()I" since="16"/>
-		<method name="getAudioSource()I"/>
-		<method name="getBufferSizeInFrames()I" since="23"/>
-		<method name="getChannelConfiguration()I"/>
-		<method name="getChannelCount()I"/>
-		<method name="getFormat()Landroid/media/AudioFormat;" since="23"/>
-		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28"/>
-		<method name="getMinBufferSize(III)I"/>
-		<method name="getNotificationMarkerPosition()I"/>
-		<method name="getPositionNotificationPeriod()I"/>
-		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
-		<method name="getRecordingState()I"/>
-		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
-		<method name="getSampleRate()I"/>
-		<method name="getState()I"/>
-		<method name="getTimestamp(Landroid/media/AudioTimestamp;I)I" since="24"/>
-		<method name="read(Ljava/nio/ByteBuffer;I)I"/>
-		<method name="read(Ljava/nio/ByteBuffer;II)I" since="23"/>
-		<method name="read([BII)I"/>
-		<method name="read([BIII)I" since="23"/>
-		<method name="read([FIII)I" since="23"/>
-		<method name="read([SII)I"/>
-		<method name="read([SIII)I" since="23"/>
-		<method name="release()V"/>
-		<method name="removeOnRoutingChangedListener(Landroid/media/AudioRecord$OnRoutingChangedListener;)V" since="23" deprecated="24"/>
-		<method name="setNotificationMarkerPosition(I)I"/>
-		<method name="setPositionNotificationPeriod(I)I"/>
-		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z" since="23"/>
-		<method name="setRecordPositionUpdateListener(Landroid/media/AudioRecord$OnRecordPositionUpdateListener;)V"/>
-		<method name="setRecordPositionUpdateListener(Landroid/media/AudioRecord$OnRecordPositionUpdateListener;Landroid/os/Handler;)V"/>
-		<method name="startRecording()V"/>
-		<method name="startRecording(Landroid/media/MediaSyncEvent;)V" since="16"/>
-		<method name="stop()V"/>
-		<field name="ERROR"/>
-		<field name="ERROR_BAD_VALUE"/>
-		<field name="ERROR_DEAD_OBJECT" since="24"/>
-		<field name="ERROR_INVALID_OPERATION"/>
-		<field name="READ_BLOCKING" since="23"/>
-		<field name="READ_NON_BLOCKING" since="23"/>
-		<field name="RECORDSTATE_RECORDING"/>
-		<field name="RECORDSTATE_STOPPED"/>
-		<field name="STATE_INITIALIZED"/>
-		<field name="STATE_UNINITIALIZED"/>
-		<field name="SUCCESS"/>
-	</class>
-	<class name="android/media/AudioRecord$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/media/AudioRecord;"/>
-		<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioRecord$Builder;"/>
-		<method name="setAudioSource(I)Landroid/media/AudioRecord$Builder;"/>
-		<method name="setBufferSizeInBytes(I)Landroid/media/AudioRecord$Builder;"/>
-	</class>
-	<class name="android/media/AudioRecord$MetricsConstants" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CHANNELS"/>
-		<field name="ENCODING"/>
-		<field name="LATENCY"/>
-		<field name="SAMPLERATE"/>
-		<field name="SOURCE"/>
-	</class>
-	<class name="android/media/AudioRecord$OnRecordPositionUpdateListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onMarkerReached(Landroid/media/AudioRecord;)V"/>
-		<method name="onPeriodicNotification(Landroid/media/AudioRecord;)V"/>
-	</class>
-	<class name="android/media/AudioRecord$OnRoutingChangedListener" since="23" deprecated="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24"/>
-		<method name="onRoutingChanged(Landroid/media/AudioRecord;)V"/>
-	</class>
-	<class name="android/media/AudioRecordingConfiguration" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getAudioDevice()Landroid/media/AudioDeviceInfo;"/>
-		<method name="getClientAudioSessionId()I"/>
-		<method name="getClientAudioSource()I"/>
-		<method name="getClientFormat()Landroid/media/AudioFormat;"/>
-		<method name="getFormat()Landroid/media/AudioFormat;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/media/AudioRouting" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="addOnRoutingChangedListener(Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/os/Handler;)V"/>
-		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;"/>
-		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;"/>
-		<method name="removeOnRoutingChangedListener(Landroid/media/AudioRouting$OnRoutingChangedListener;)V"/>
-		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z"/>
-	</class>
-	<class name="android/media/AudioRouting$OnRoutingChangedListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onRoutingChanged(Landroid/media/AudioRouting;)V"/>
-	</class>
-	<class name="android/media/AudioTimestamp" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="TIMEBASE_BOOTTIME" since="24"/>
-		<field name="TIMEBASE_MONOTONIC" since="24"/>
-		<field name="framePosition"/>
-		<field name="nanoTime"/>
-	</class>
-	<class name="android/media/AudioTrack" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/AudioRouting" since="24"/>
-		<implements name="android/media/VolumeAutomation" since="26"/>
-		<method name="&lt;init>(IIIIII)V" deprecated="26"/>
-		<method name="&lt;init>(IIIIIII)V" since="9" deprecated="26"/>
-		<method name="&lt;init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;III)V" since="21"/>
-		<method name="addOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24"/>
-		<method name="attachAuxEffect(I)I" since="9"/>
-		<method name="flush()V"/>
-		<method name="getAudioFormat()I"/>
-		<method name="getAudioSessionId()I" since="9"/>
-		<method name="getBufferCapacityInFrames()I" since="24"/>
-		<method name="getBufferSizeInFrames()I" since="23"/>
-		<method name="getChannelConfiguration()I"/>
-		<method name="getChannelCount()I"/>
-		<method name="getFormat()Landroid/media/AudioFormat;" since="23"/>
-		<method name="getMaxVolume()F"/>
-		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28"/>
-		<method name="getMinBufferSize(III)I"/>
-		<method name="getMinVolume()F"/>
-		<method name="getNativeFrameCount()I" deprecated="19"/>
-		<method name="getNativeOutputSampleRate(I)I"/>
-		<method name="getNotificationMarkerPosition()I"/>
-		<method name="getPerformanceMode()I" since="26"/>
-		<method name="getPlayState()I"/>
-		<method name="getPlaybackHeadPosition()I"/>
-		<method name="getPlaybackParams()Landroid/media/PlaybackParams;" since="23"/>
-		<method name="getPlaybackRate()I"/>
-		<method name="getPositionNotificationPeriod()I"/>
-		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
-		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
-		<method name="getSampleRate()I"/>
-		<method name="getState()I"/>
-		<method name="getStreamType()I"/>
-		<method name="getTimestamp(Landroid/media/AudioTimestamp;)Z" since="19"/>
-		<method name="getUnderrunCount()I" since="24"/>
-		<method name="pause()V"/>
-		<method name="play()V"/>
-		<method name="release()V"/>
-		<method name="reloadStaticData()I"/>
-		<method name="removeOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;)V" since="23" deprecated="24"/>
-		<method name="setAuxEffectSendLevel(F)I" since="9"/>
-		<method name="setBufferSizeInFrames(I)I" since="24"/>
-		<method name="setLoopPoints(III)I"/>
-		<method name="setNotificationMarkerPosition(I)I"/>
-		<method name="setPlaybackHeadPosition(I)I"/>
-		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
-		<method name="setPlaybackPositionUpdateListener(Landroid/media/AudioTrack$OnPlaybackPositionUpdateListener;)V"/>
-		<method name="setPlaybackPositionUpdateListener(Landroid/media/AudioTrack$OnPlaybackPositionUpdateListener;Landroid/os/Handler;)V"/>
-		<method name="setPlaybackRate(I)I"/>
-		<method name="setPositionNotificationPeriod(I)I"/>
-		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z" since="23"/>
-		<method name="setPresentation(Landroid/media/AudioPresentation;)I" since="28"/>
-		<method name="setState(I)V" deprecated="19"/>
-		<method name="setStereoVolume(FF)I" deprecated="21"/>
-		<method name="setVolume(F)I" since="21"/>
-		<method name="stop()V"/>
-		<method name="write(Ljava/nio/ByteBuffer;II)I" since="21"/>
-		<method name="write(Ljava/nio/ByteBuffer;IIJ)I" since="23"/>
-		<method name="write([BII)I"/>
-		<method name="write([BIII)I" since="23"/>
-		<method name="write([FIII)I" since="21"/>
-		<method name="write([SII)I"/>
-		<method name="write([SIII)I" since="23"/>
-		<field name="ERROR"/>
-		<field name="ERROR_BAD_VALUE"/>
-		<field name="ERROR_DEAD_OBJECT" since="24"/>
-		<field name="ERROR_INVALID_OPERATION"/>
-		<field name="MODE_STATIC"/>
-		<field name="MODE_STREAM"/>
-		<field name="PERFORMANCE_MODE_LOW_LATENCY" since="26"/>
-		<field name="PERFORMANCE_MODE_NONE" since="26"/>
-		<field name="PERFORMANCE_MODE_POWER_SAVING" since="26"/>
-		<field name="PLAYSTATE_PAUSED"/>
-		<field name="PLAYSTATE_PLAYING"/>
-		<field name="PLAYSTATE_STOPPED"/>
-		<field name="STATE_INITIALIZED"/>
-		<field name="STATE_NO_STATIC_DATA"/>
-		<field name="STATE_UNINITIALIZED"/>
-		<field name="SUCCESS"/>
-		<field name="WRITE_BLOCKING" since="21"/>
-		<field name="WRITE_NON_BLOCKING" since="21"/>
-	</class>
-	<class name="android/media/AudioTrack$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/media/AudioTrack;"/>
-		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioTrack$Builder;"/>
-		<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioTrack$Builder;"/>
-		<method name="setBufferSizeInBytes(I)Landroid/media/AudioTrack$Builder;"/>
-		<method name="setPerformanceMode(I)Landroid/media/AudioTrack$Builder;" since="26"/>
-		<method name="setSessionId(I)Landroid/media/AudioTrack$Builder;"/>
-		<method name="setTransferMode(I)Landroid/media/AudioTrack$Builder;"/>
-	</class>
-	<class name="android/media/AudioTrack$MetricsConstants" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CHANNELMASK"/>
-		<field name="CONTENTTYPE"/>
-		<field name="SAMPLERATE"/>
-		<field name="STREAMTYPE"/>
-		<field name="USAGE"/>
-	</class>
-	<class name="android/media/AudioTrack$OnPlaybackPositionUpdateListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onMarkerReached(Landroid/media/AudioTrack;)V"/>
-		<method name="onPeriodicNotification(Landroid/media/AudioTrack;)V"/>
-	</class>
-	<class name="android/media/AudioTrack$OnRoutingChangedListener" since="23" deprecated="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24"/>
-		<method name="onRoutingChanged(Landroid/media/AudioTrack;)V"/>
-	</class>
-	<class name="android/media/CamcorderProfile" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIIIIIIIIIII)V" since="29"/>
-		<method name="get(I)Landroid/media/CamcorderProfile;"/>
-		<method name="get(II)Landroid/media/CamcorderProfile;" since="9"/>
-		<method name="hasProfile(I)Z" since="11"/>
-		<method name="hasProfile(II)Z" since="11"/>
-		<field name="QUALITY_1080P" since="11"/>
-		<field name="QUALITY_2160P" since="21"/>
-		<field name="QUALITY_480P" since="11"/>
-		<field name="QUALITY_720P" since="11"/>
-		<field name="QUALITY_CIF" since="11"/>
-		<field name="QUALITY_HIGH"/>
-		<field name="QUALITY_HIGH_SPEED_1080P" since="21"/>
-		<field name="QUALITY_HIGH_SPEED_2160P" since="21"/>
-		<field name="QUALITY_HIGH_SPEED_480P" since="21"/>
-		<field name="QUALITY_HIGH_SPEED_720P" since="21"/>
-		<field name="QUALITY_HIGH_SPEED_HIGH" since="21"/>
-		<field name="QUALITY_HIGH_SPEED_LOW" since="21"/>
-		<field name="QUALITY_LOW"/>
-		<field name="QUALITY_QCIF" since="11"/>
-		<field name="QUALITY_QVGA" since="15"/>
-		<field name="QUALITY_TIME_LAPSE_1080P" since="11"/>
-		<field name="QUALITY_TIME_LAPSE_2160P" since="21"/>
-		<field name="QUALITY_TIME_LAPSE_480P" since="11"/>
-		<field name="QUALITY_TIME_LAPSE_720P" since="11"/>
-		<field name="QUALITY_TIME_LAPSE_CIF" since="11"/>
-		<field name="QUALITY_TIME_LAPSE_HIGH" since="11"/>
-		<field name="QUALITY_TIME_LAPSE_LOW" since="11"/>
-		<field name="QUALITY_TIME_LAPSE_QCIF" since="11"/>
-		<field name="QUALITY_TIME_LAPSE_QVGA" since="15"/>
-		<field name="audioBitRate"/>
-		<field name="audioChannels"/>
-		<field name="audioCodec"/>
-		<field name="audioSampleRate"/>
-		<field name="duration"/>
-		<field name="fileFormat"/>
-		<field name="quality"/>
-		<field name="videoBitRate"/>
-		<field name="videoCodec"/>
-		<field name="videoFrameHeight"/>
-		<field name="videoFrameRate"/>
-		<field name="videoFrameWidth"/>
-	</class>
-	<class name="android/media/CameraProfile" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getJpegEncodingQualityParameter(I)I"/>
-		<method name="getJpegEncodingQualityParameter(II)I" since="9"/>
-		<field name="QUALITY_HIGH"/>
-		<field name="QUALITY_LOW"/>
-		<field name="QUALITY_MEDIUM"/>
-	</class>
-	<class name="android/media/DeniedByServerException" since="18">
-		<extends name="android/media/MediaDrmException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/DrmInitData" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Ljava/util/UUID;)Landroid/media/DrmInitData$SchemeInitData;"/>
-	</class>
-	<class name="android/media/DrmInitData$SchemeInitData" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;[B)V" since="29"/>
-		<field name="data"/>
-		<field name="mimeType"/>
-	</class>
-	<class name="android/media/ExifInterface" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="24"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getAltitude(D)D" since="9"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getAttributeDouble(Ljava/lang/String;D)D" since="8"/>
-		<method name="getAttributeInt(Ljava/lang/String;I)I"/>
-		<method name="getLatLong([F)Z"/>
-		<method name="getThumbnail()[B"/>
-		<method name="getThumbnailBitmap()Landroid/graphics/Bitmap;" since="26"/>
-		<method name="getThumbnailBytes()[B" since="26"/>
-		<method name="getThumbnailRange()[J" since="24"/>
-		<method name="hasThumbnail()Z"/>
-		<method name="isThumbnailCompressed()Z" since="26"/>
-		<method name="saveAttributes()V"/>
-		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="ORIENTATION_FLIP_HORIZONTAL"/>
-		<field name="ORIENTATION_FLIP_VERTICAL"/>
-		<field name="ORIENTATION_NORMAL"/>
-		<field name="ORIENTATION_ROTATE_180"/>
-		<field name="ORIENTATION_ROTATE_270"/>
-		<field name="ORIENTATION_ROTATE_90"/>
-		<field name="ORIENTATION_TRANSPOSE"/>
-		<field name="ORIENTATION_TRANSVERSE"/>
-		<field name="ORIENTATION_UNDEFINED"/>
-		<field name="TAG_APERTURE" since="11" deprecated="24"/>
-		<field name="TAG_APERTURE_VALUE" since="24"/>
-		<field name="TAG_ARTIST" since="24"/>
-		<field name="TAG_BITS_PER_SAMPLE" since="24"/>
-		<field name="TAG_BRIGHTNESS_VALUE" since="24"/>
-		<field name="TAG_CFA_PATTERN" since="24"/>
-		<field name="TAG_COLOR_SPACE" since="24"/>
-		<field name="TAG_COMPONENTS_CONFIGURATION" since="24"/>
-		<field name="TAG_COMPRESSED_BITS_PER_PIXEL" since="24"/>
-		<field name="TAG_COMPRESSION" since="24"/>
-		<field name="TAG_CONTRAST" since="24"/>
-		<field name="TAG_COPYRIGHT" since="24"/>
-		<field name="TAG_CUSTOM_RENDERED" since="24"/>
-		<field name="TAG_DATETIME"/>
-		<field name="TAG_DATETIME_DIGITIZED" since="23"/>
-		<field name="TAG_DATETIME_ORIGINAL" since="24"/>
-		<field name="TAG_DEFAULT_CROP_SIZE" since="26"/>
-		<field name="TAG_DEVICE_SETTING_DESCRIPTION" since="24"/>
-		<field name="TAG_DIGITAL_ZOOM_RATIO" since="24"/>
-		<field name="TAG_DNG_VERSION" since="26"/>
-		<field name="TAG_EXIF_VERSION" since="24"/>
-		<field name="TAG_EXPOSURE_BIAS_VALUE" since="24"/>
-		<field name="TAG_EXPOSURE_INDEX" since="24"/>
-		<field name="TAG_EXPOSURE_MODE" since="24"/>
-		<field name="TAG_EXPOSURE_PROGRAM" since="24"/>
-		<field name="TAG_EXPOSURE_TIME" since="11"/>
-		<field name="TAG_FILE_SOURCE" since="24"/>
-		<field name="TAG_FLASH"/>
-		<field name="TAG_FLASHPIX_VERSION" since="24"/>
-		<field name="TAG_FLASH_ENERGY" since="24"/>
-		<field name="TAG_FOCAL_LENGTH" since="8"/>
-		<field name="TAG_FOCAL_LENGTH_IN_35MM_FILM" since="24"/>
-		<field name="TAG_FOCAL_PLANE_RESOLUTION_UNIT" since="24"/>
-		<field name="TAG_FOCAL_PLANE_X_RESOLUTION" since="24"/>
-		<field name="TAG_FOCAL_PLANE_Y_RESOLUTION" since="24"/>
-		<field name="TAG_F_NUMBER" since="24"/>
-		<field name="TAG_GAIN_CONTROL" since="24"/>
-		<field name="TAG_GPS_ALTITUDE" since="9"/>
-		<field name="TAG_GPS_ALTITUDE_REF" since="9"/>
-		<field name="TAG_GPS_AREA_INFORMATION" since="24"/>
-		<field name="TAG_GPS_DATESTAMP" since="8"/>
-		<field name="TAG_GPS_DEST_BEARING" since="24"/>
-		<field name="TAG_GPS_DEST_BEARING_REF" since="24"/>
-		<field name="TAG_GPS_DEST_DISTANCE" since="24"/>
-		<field name="TAG_GPS_DEST_DISTANCE_REF" since="24"/>
-		<field name="TAG_GPS_DEST_LATITUDE" since="24"/>
-		<field name="TAG_GPS_DEST_LATITUDE_REF" since="24"/>
-		<field name="TAG_GPS_DEST_LONGITUDE" since="24"/>
-		<field name="TAG_GPS_DEST_LONGITUDE_REF" since="24"/>
-		<field name="TAG_GPS_DIFFERENTIAL" since="24"/>
-		<field name="TAG_GPS_DOP" since="24"/>
-		<field name="TAG_GPS_IMG_DIRECTION" since="24"/>
-		<field name="TAG_GPS_IMG_DIRECTION_REF" since="24"/>
-		<field name="TAG_GPS_LATITUDE"/>
-		<field name="TAG_GPS_LATITUDE_REF"/>
-		<field name="TAG_GPS_LONGITUDE"/>
-		<field name="TAG_GPS_LONGITUDE_REF"/>
-		<field name="TAG_GPS_MAP_DATUM" since="24"/>
-		<field name="TAG_GPS_MEASURE_MODE" since="24"/>
-		<field name="TAG_GPS_PROCESSING_METHOD" since="8"/>
-		<field name="TAG_GPS_SATELLITES" since="24"/>
-		<field name="TAG_GPS_SPEED" since="24"/>
-		<field name="TAG_GPS_SPEED_REF" since="24"/>
-		<field name="TAG_GPS_STATUS" since="24"/>
-		<field name="TAG_GPS_TIMESTAMP" since="8"/>
-		<field name="TAG_GPS_TRACK" since="24"/>
-		<field name="TAG_GPS_TRACK_REF" since="24"/>
-		<field name="TAG_GPS_VERSION_ID" since="24"/>
-		<field name="TAG_IMAGE_DESCRIPTION" since="24"/>
-		<field name="TAG_IMAGE_LENGTH"/>
-		<field name="TAG_IMAGE_UNIQUE_ID" since="24"/>
-		<field name="TAG_IMAGE_WIDTH"/>
-		<field name="TAG_INTEROPERABILITY_INDEX" since="24"/>
-		<field name="TAG_ISO" since="11" deprecated="24"/>
-		<field name="TAG_ISO_SPEED_RATINGS" since="24"/>
-		<field name="TAG_JPEG_INTERCHANGE_FORMAT" since="24"/>
-		<field name="TAG_JPEG_INTERCHANGE_FORMAT_LENGTH" since="24"/>
-		<field name="TAG_LIGHT_SOURCE" since="24"/>
-		<field name="TAG_MAKE"/>
-		<field name="TAG_MAKER_NOTE" since="24"/>
-		<field name="TAG_MAX_APERTURE_VALUE" since="24"/>
-		<field name="TAG_METERING_MODE" since="24"/>
-		<field name="TAG_MODEL"/>
-		<field name="TAG_NEW_SUBFILE_TYPE" since="26"/>
-		<field name="TAG_OECF" since="24"/>
-		<field name="TAG_ORF_ASPECT_FRAME" since="26"/>
-		<field name="TAG_ORF_PREVIEW_IMAGE_LENGTH" since="26"/>
-		<field name="TAG_ORF_PREVIEW_IMAGE_START" since="26"/>
-		<field name="TAG_ORF_THUMBNAIL_IMAGE" since="26"/>
-		<field name="TAG_ORIENTATION"/>
-		<field name="TAG_PHOTOMETRIC_INTERPRETATION" since="24"/>
-		<field name="TAG_PIXEL_X_DIMENSION" since="24"/>
-		<field name="TAG_PIXEL_Y_DIMENSION" since="24"/>
-		<field name="TAG_PLANAR_CONFIGURATION" since="24"/>
-		<field name="TAG_PRIMARY_CHROMATICITIES" since="24"/>
-		<field name="TAG_REFERENCE_BLACK_WHITE" since="24"/>
-		<field name="TAG_RELATED_SOUND_FILE" since="24"/>
-		<field name="TAG_RESOLUTION_UNIT" since="24"/>
-		<field name="TAG_ROWS_PER_STRIP" since="24"/>
-		<field name="TAG_RW2_ISO" since="26"/>
-		<field name="TAG_RW2_JPG_FROM_RAW" since="26"/>
-		<field name="TAG_RW2_SENSOR_BOTTOM_BORDER" since="26"/>
-		<field name="TAG_RW2_SENSOR_LEFT_BORDER" since="26"/>
-		<field name="TAG_RW2_SENSOR_RIGHT_BORDER" since="26"/>
-		<field name="TAG_RW2_SENSOR_TOP_BORDER" since="26"/>
-		<field name="TAG_SAMPLES_PER_PIXEL" since="24"/>
-		<field name="TAG_SATURATION" since="24"/>
-		<field name="TAG_SCENE_CAPTURE_TYPE" since="24"/>
-		<field name="TAG_SCENE_TYPE" since="24"/>
-		<field name="TAG_SENSING_METHOD" since="24"/>
-		<field name="TAG_SHARPNESS" since="24"/>
-		<field name="TAG_SHUTTER_SPEED_VALUE" since="24"/>
-		<field name="TAG_SOFTWARE" since="24"/>
-		<field name="TAG_SPATIAL_FREQUENCY_RESPONSE" since="24"/>
-		<field name="TAG_SPECTRAL_SENSITIVITY" since="24"/>
-		<field name="TAG_STRIP_BYTE_COUNTS" since="24"/>
-		<field name="TAG_STRIP_OFFSETS" since="24"/>
-		<field name="TAG_SUBFILE_TYPE" since="26"/>
-		<field name="TAG_SUBJECT_AREA" since="24"/>
-		<field name="TAG_SUBJECT_DISTANCE" since="24"/>
-		<field name="TAG_SUBJECT_DISTANCE_RANGE" since="24"/>
-		<field name="TAG_SUBJECT_LOCATION" since="24"/>
-		<field name="TAG_SUBSEC_TIME" since="23"/>
-		<field name="TAG_SUBSEC_TIME_DIG" since="23" deprecated="24"/>
-		<field name="TAG_SUBSEC_TIME_DIGITIZED" since="24"/>
-		<field name="TAG_SUBSEC_TIME_ORIG" since="23" deprecated="24"/>
-		<field name="TAG_SUBSEC_TIME_ORIGINAL" since="24"/>
-		<field name="TAG_THUMBNAIL_IMAGE_LENGTH" since="24"/>
-		<field name="TAG_THUMBNAIL_IMAGE_WIDTH" since="24"/>
-		<field name="TAG_TRANSFER_FUNCTION" since="24"/>
-		<field name="TAG_USER_COMMENT" since="24"/>
-		<field name="TAG_WHITE_BALANCE"/>
-		<field name="TAG_WHITE_POINT" since="24"/>
-		<field name="TAG_X_RESOLUTION" since="24"/>
-		<field name="TAG_Y_CB_CR_COEFFICIENTS" since="24"/>
-		<field name="TAG_Y_CB_CR_POSITIONING" since="24"/>
-		<field name="TAG_Y_CB_CR_SUB_SAMPLING" since="24"/>
-		<field name="TAG_Y_RESOLUTION" since="24"/>
-		<field name="WHITEBALANCE_AUTO"/>
-		<field name="WHITEBALANCE_MANUAL"/>
-	</class>
-	<class name="android/media/FaceDetector" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="findFaces(Landroid/graphics/Bitmap;[Landroid/media/FaceDetector$Face;)I"/>
-	</class>
-	<class name="android/media/FaceDetector$Face" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/FaceDetector;)V"/>
-		<method name="confidence()F"/>
-		<method name="eyesDistance()F"/>
-		<method name="getMidPoint(Landroid/graphics/PointF;)V"/>
-		<method name="pose(I)F"/>
-		<field name="CONFIDENCE_THRESHOLD"/>
-		<field name="EULER_X"/>
-		<field name="EULER_Y"/>
-		<field name="EULER_Z"/>
-	</class>
-	<class name="android/media/Image" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCropRect()Landroid/graphics/Rect;" since="21"/>
-		<method name="getFormat()I"/>
-		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" since="28"/>
-		<method name="getHeight()I"/>
-		<method name="getPlanes()[Landroid/media/Image$Plane;"/>
-		<method name="getTimestamp()J"/>
-		<method name="getWidth()I"/>
-		<method name="setCropRect(Landroid/graphics/Rect;)V" since="21"/>
-		<method name="setTimestamp(J)V" since="23"/>
-	</class>
-	<class name="android/media/Image$Plane" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBuffer()Ljava/nio/ByteBuffer;"/>
-		<method name="getPixelStride()I"/>
-		<method name="getRowStride()I"/>
-	</class>
-	<class name="android/media/ImageReader" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIIIJ)V" since="29"/>
-		<method name="acquireLatestImage()Landroid/media/Image;"/>
-		<method name="acquireNextImage()Landroid/media/Image;"/>
-		<method name="discardFreeBuffers()V" since="28"/>
-		<method name="getHeight()I"/>
-		<method name="getImageFormat()I"/>
-		<method name="getMaxImages()I"/>
-		<method name="getSurface()Landroid/view/Surface;"/>
-		<method name="getWidth()I"/>
-		<method name="newInstance(IIII)Landroid/media/ImageReader;"/>
-		<method name="setOnImageAvailableListener(Landroid/media/ImageReader$OnImageAvailableListener;Landroid/os/Handler;)V"/>
-	</class>
-	<class name="android/media/ImageReader$OnImageAvailableListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onImageAvailable(Landroid/media/ImageReader;)V"/>
-	</class>
-	<class name="android/media/ImageWriter" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/view/Surface;II)V" since="29"/>
-		<method name="dequeueInputImage()Landroid/media/Image;"/>
-		<method name="getFormat()I"/>
-		<method name="getMaxImages()I"/>
-		<method name="newInstance(Landroid/view/Surface;I)Landroid/media/ImageWriter;"/>
-		<method name="queueInputImage(Landroid/media/Image;)V"/>
-		<method name="setOnImageReleasedListener(Landroid/media/ImageWriter$OnImageReleasedListener;Landroid/os/Handler;)V"/>
-	</class>
-	<class name="android/media/ImageWriter$OnImageReleasedListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onImageReleased(Landroid/media/ImageWriter;)V"/>
-	</class>
-	<class name="android/media/JetPlayer" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clearQueue()Z"/>
-		<method name="closeJetFile()Z"/>
-		<method name="getJetPlayer()Landroid/media/JetPlayer;"/>
-		<method name="getMaxTracks()I"/>
-		<method name="loadJetFile(Landroid/content/res/AssetFileDescriptor;)Z"/>
-		<method name="loadJetFile(Ljava/lang/String;)Z"/>
-		<method name="pause()Z"/>
-		<method name="play()Z"/>
-		<method name="queueJetSegment(IIIIIB)Z"/>
-		<method name="queueJetSegmentMuteArray(IIII[ZB)Z"/>
-		<method name="release()V"/>
-		<method name="setEventListener(Landroid/media/JetPlayer$OnJetEventListener;)V"/>
-		<method name="setEventListener(Landroid/media/JetPlayer$OnJetEventListener;Landroid/os/Handler;)V"/>
-		<method name="setMuteArray([ZZ)Z"/>
-		<method name="setMuteFlag(IZZ)Z"/>
-		<method name="setMuteFlags(IZ)Z"/>
-		<method name="triggerClip(I)Z"/>
-	</class>
-	<class name="android/media/JetPlayer$OnJetEventListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onJetEvent(Landroid/media/JetPlayer;SBBBB)V"/>
-		<method name="onJetNumQueuedSegmentUpdate(Landroid/media/JetPlayer;I)V"/>
-		<method name="onJetPauseUpdate(Landroid/media/JetPlayer;I)V"/>
-		<method name="onJetUserIdUpdate(Landroid/media/JetPlayer;II)V"/>
-	</class>
-	<class name="android/media/MediaActionSound" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="load(I)V"/>
-		<method name="play(I)V"/>
-		<method name="release()V"/>
-		<field name="FOCUS_COMPLETE"/>
-		<field name="SHUTTER_CLICK"/>
-		<field name="START_VIDEO_RECORDING"/>
-		<field name="STOP_VIDEO_RECORDING"/>
-	</class>
-	<class name="android/media/MediaCas" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="enumeratePlugins()[Landroid/media/MediaCas$PluginDescriptor;"/>
-		<method name="isSystemIdSupported(I)Z"/>
-		<method name="openSession()Landroid/media/MediaCas$Session;"/>
-		<method name="processEmm([B)V"/>
-		<method name="processEmm([BII)V"/>
-		<method name="provision(Ljava/lang/String;)V"/>
-		<method name="refreshEntitlements(I[B)V"/>
-		<method name="sendEvent(II[B)V"/>
-		<method name="setEventListener(Landroid/media/MediaCas$EventListener;Landroid/os/Handler;)V"/>
-		<method name="setPrivateData([B)V"/>
-	</class>
-	<class name="android/media/MediaCas$EventListener" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="onEvent(Landroid/media/MediaCas;II[B)V"/>
-	</class>
-	<class name="android/media/MediaCas$PluginDescriptor" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getSystemId()I"/>
-	</class>
-	<class name="android/media/MediaCas$Session" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>(Landroid/media/MediaCas;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/MediaCas;Ljava/util/ArrayList;)V" since="29"/>
-		<method name="processEcm([B)V"/>
-		<method name="processEcm([BII)V"/>
-		<method name="setPrivateData([B)V"/>
-	</class>
-	<class name="android/media/MediaCasException" since="26">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/media/MediaCasException$DeniedByServerException" since="26">
-		<extends name="android/media/MediaCasException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/media/MediaCasException$NotProvisionedException" since="26">
-		<extends name="android/media/MediaCasException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/media/MediaCasException$ResourceBusyException" since="26">
-		<extends name="android/media/MediaCasException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/media/MediaCasException$UnsupportedCasException" since="26">
-		<extends name="android/media/MediaCasException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/media/MediaCasStateException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="getDiagnosticInfo()Ljava/lang/String;"/>
-	</class>
-	<class name="android/media/MediaCodec" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;ZZ)V" since="29"/>
-		<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;ILandroid/media/MediaDescrambler;)V" since="26"/>
-		<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V"/>
-		<method name="createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;"/>
-		<method name="createDecoderByType(Ljava/lang/String;)Landroid/media/MediaCodec;"/>
-		<method name="createEncoderByType(Ljava/lang/String;)Landroid/media/MediaCodec;"/>
-		<method name="createInputSurface()Landroid/view/Surface;" since="18"/>
-		<method name="createPersistentInputSurface()Landroid/view/Surface;" since="23"/>
-		<method name="dequeueInputBuffer(J)I"/>
-		<method name="dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I"/>
-		<method name="flush()V"/>
-		<method name="getCodecInfo()Landroid/media/MediaCodecInfo;" since="18"/>
-		<method name="getInputBuffer(I)Ljava/nio/ByteBuffer;" since="21"/>
-		<method name="getInputBuffers()[Ljava/nio/ByteBuffer;" deprecated="21"/>
-		<method name="getInputFormat()Landroid/media/MediaFormat;" since="21"/>
-		<method name="getInputImage(I)Landroid/media/Image;" since="21"/>
-		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
-		<method name="getName()Ljava/lang/String;" since="18"/>
-		<method name="getOutputBuffer(I)Ljava/nio/ByteBuffer;" since="21"/>
-		<method name="getOutputBuffers()[Ljava/nio/ByteBuffer;" deprecated="21"/>
-		<method name="getOutputFormat()Landroid/media/MediaFormat;"/>
-		<method name="getOutputFormat(I)Landroid/media/MediaFormat;" since="21"/>
-		<method name="getOutputImage(I)Landroid/media/Image;" since="21"/>
-		<method name="queueInputBuffer(IIIJI)V"/>
-		<method name="queueSecureInputBuffer(IILandroid/media/MediaCodec$CryptoInfo;JI)V"/>
-		<method name="release()V"/>
-		<method name="releaseOutputBuffer(IJ)V" since="21"/>
-		<method name="releaseOutputBuffer(IZ)V"/>
-		<method name="reset()V" since="21"/>
-		<method name="setCallback(Landroid/media/MediaCodec$Callback;)V" since="21"/>
-		<method name="setCallback(Landroid/media/MediaCodec$Callback;Landroid/os/Handler;)V" since="23"/>
-		<method name="setInputSurface(Landroid/view/Surface;)V" since="23"/>
-		<method name="setOnFrameRenderedListener(Landroid/media/MediaCodec$OnFrameRenderedListener;Landroid/os/Handler;)V" since="23"/>
-		<method name="setOutputSurface(Landroid/view/Surface;)V" since="23"/>
-		<method name="setParameters(Landroid/os/Bundle;)V" since="19"/>
-		<method name="setVideoScalingMode(I)V"/>
-		<method name="signalEndOfInputStream()V" since="18"/>
-		<method name="start()V"/>
-		<method name="stop()V"/>
-		<field name="BUFFER_FLAG_CODEC_CONFIG"/>
-		<field name="BUFFER_FLAG_END_OF_STREAM"/>
-		<field name="BUFFER_FLAG_KEY_FRAME" since="21"/>
-		<field name="BUFFER_FLAG_PARTIAL_FRAME" since="26"/>
-		<field name="BUFFER_FLAG_SYNC_FRAME" deprecated="21"/>
-		<field name="CONFIGURE_FLAG_ENCODE"/>
-		<field name="CRYPTO_MODE_AES_CBC" since="24"/>
-		<field name="CRYPTO_MODE_AES_CTR"/>
-		<field name="CRYPTO_MODE_UNENCRYPTED"/>
-		<field name="INFO_OUTPUT_BUFFERS_CHANGED" deprecated="21"/>
-		<field name="INFO_OUTPUT_FORMAT_CHANGED"/>
-		<field name="INFO_TRY_AGAIN_LATER"/>
-		<field name="PARAMETER_KEY_REQUEST_SYNC_FRAME" since="19"/>
-		<field name="PARAMETER_KEY_SUSPEND" since="19"/>
-		<field name="PARAMETER_KEY_VIDEO_BITRATE" since="19"/>
-		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT"/>
-		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING"/>
-	</class>
-	<class name="android/media/MediaCodec$BufferInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="set(IIJI)V"/>
-		<field name="flags"/>
-		<field name="offset"/>
-		<field name="presentationTimeUs"/>
-		<field name="size"/>
-	</class>
-	<class name="android/media/MediaCodec$Callback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onError(Landroid/media/MediaCodec;Landroid/media/MediaCodec$CodecException;)V"/>
-		<method name="onInputBufferAvailable(Landroid/media/MediaCodec;I)V"/>
-		<method name="onOutputBufferAvailable(Landroid/media/MediaCodec;ILandroid/media/MediaCodec$BufferInfo;)V"/>
-		<method name="onOutputFormatChanged(Landroid/media/MediaCodec;Landroid/media/MediaFormat;)V"/>
-	</class>
-	<class name="android/media/MediaCodec$CodecException" since="21">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IILjava/lang/String;)V" since="29"/>
-		<method name="getDiagnosticInfo()Ljava/lang/String;"/>
-		<method name="getErrorCode()I" since="23"/>
-		<method name="isRecoverable()Z"/>
-		<method name="isTransient()Z"/>
-		<field name="ERROR_INSUFFICIENT_RESOURCE" since="23"/>
-		<field name="ERROR_RECLAIMED" since="23"/>
-	</class>
-	<class name="android/media/MediaCodec$CryptoException" since="16">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-		<method name="getErrorCode()I"/>
-		<field name="ERROR_INSUFFICIENT_OUTPUT_PROTECTION" since="21"/>
-		<field name="ERROR_KEY_EXPIRED" since="19"/>
-		<field name="ERROR_NO_KEY" since="19"/>
-		<field name="ERROR_RESOURCE_BUSY" since="19"/>
-		<field name="ERROR_SESSION_NOT_OPENED" since="23"/>
-		<field name="ERROR_UNSUPPORTED_OPERATION" since="24"/>
-	</class>
-	<class name="android/media/MediaCodec$CryptoInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="set(I[I[I[B[BI)V"/>
-		<method name="setPattern(Landroid/media/MediaCodec$CryptoInfo$Pattern;)V" since="24"/>
-		<field name="iv"/>
-		<field name="key"/>
-		<field name="mode"/>
-		<field name="numBytesOfClearData"/>
-		<field name="numBytesOfEncryptedData"/>
-		<field name="numSubSamples"/>
-	</class>
-	<class name="android/media/MediaCodec$CryptoInfo$Pattern" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getEncryptBlocks()I"/>
-		<method name="getSkipBlocks()I"/>
-		<method name="set(II)V"/>
-	</class>
-	<class name="android/media/MediaCodec$MetricsConstants" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CODEC"/>
-		<field name="ENCODER"/>
-		<field name="HEIGHT"/>
-		<field name="MIME_TYPE"/>
-		<field name="MODE"/>
-		<field name="MODE_AUDIO"/>
-		<field name="MODE_VIDEO"/>
-		<field name="ROTATION"/>
-		<field name="SECURE"/>
-		<field name="WIDTH"/>
-	</class>
-	<class name="android/media/MediaCodec$OnFrameRenderedListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onFrameRendered(Landroid/media/MediaCodec;JJ)V"/>
-	</class>
-	<class name="android/media/MediaCodecInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Z[Landroid/media/MediaCodecInfo$CodecCapabilities;)V" since="29"/>
-		<method name="getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getSupportedTypes()[Ljava/lang/String;"/>
-		<method name="isEncoder()Z"/>
-	</class>
-	<class name="android/media/MediaCodecInfo$AudioCapabilities" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBitrateRange()Landroid/util/Range;"/>
-		<method name="getMaxInputChannelCount()I"/>
-		<method name="getSupportedSampleRateRanges()[Landroid/util/Range;"/>
-		<method name="getSupportedSampleRates()[I"/>
-		<method name="isSampleRateSupported(I)Z"/>
-	</class>
-	<class name="android/media/MediaCodecInfo$CodecCapabilities" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createFromProfileLevel(Ljava/lang/String;II)Landroid/media/MediaCodecInfo$CodecCapabilities;" since="21"/>
-		<method name="getAudioCapabilities()Landroid/media/MediaCodecInfo$AudioCapabilities;" since="21"/>
-		<method name="getDefaultFormat()Landroid/media/MediaFormat;" since="21"/>
-		<method name="getEncoderCapabilities()Landroid/media/MediaCodecInfo$EncoderCapabilities;" since="21"/>
-		<method name="getMaxSupportedInstances()I" since="23"/>
-		<method name="getMimeType()Ljava/lang/String;" since="21"/>
-		<method name="getVideoCapabilities()Landroid/media/MediaCodecInfo$VideoCapabilities;" since="21"/>
-		<method name="isFeatureRequired(Ljava/lang/String;)Z" since="21"/>
-		<method name="isFeatureSupported(Ljava/lang/String;)Z" since="19"/>
-		<method name="isFormatSupported(Landroid/media/MediaFormat;)Z" since="21"/>
-		<field name="COLOR_Format12bitRGB444" deprecated="23"/>
-		<field name="COLOR_Format16bitARGB1555" deprecated="23"/>
-		<field name="COLOR_Format16bitARGB4444" deprecated="23"/>
-		<field name="COLOR_Format16bitBGR565" deprecated="23"/>
-		<field name="COLOR_Format16bitRGB565"/>
-		<field name="COLOR_Format18BitBGR666" deprecated="23"/>
-		<field name="COLOR_Format18bitARGB1665" deprecated="23"/>
-		<field name="COLOR_Format18bitRGB666" deprecated="23"/>
-		<field name="COLOR_Format19bitARGB1666" deprecated="23"/>
-		<field name="COLOR_Format24BitABGR6666" deprecated="23"/>
-		<field name="COLOR_Format24BitARGB6666" deprecated="23"/>
-		<field name="COLOR_Format24bitARGB1887" deprecated="23"/>
-		<field name="COLOR_Format24bitBGR888"/>
-		<field name="COLOR_Format24bitRGB888" deprecated="23"/>
-		<field name="COLOR_Format25bitARGB1888" deprecated="23"/>
-		<field name="COLOR_Format32bitABGR8888" since="23"/>
-		<field name="COLOR_Format32bitARGB8888" deprecated="23"/>
-		<field name="COLOR_Format32bitBGRA8888" deprecated="23"/>
-		<field name="COLOR_Format8bitRGB332" deprecated="23"/>
-		<field name="COLOR_FormatCbYCrY" deprecated="23"/>
-		<field name="COLOR_FormatCrYCbY" deprecated="23"/>
-		<field name="COLOR_FormatL16"/>
-		<field name="COLOR_FormatL2" deprecated="23"/>
-		<field name="COLOR_FormatL24" deprecated="23"/>
-		<field name="COLOR_FormatL32" deprecated="23"/>
-		<field name="COLOR_FormatL4" deprecated="23"/>
-		<field name="COLOR_FormatL8"/>
-		<field name="COLOR_FormatMonochrome" deprecated="23"/>
-		<field name="COLOR_FormatRGBAFlexible" since="23"/>
-		<field name="COLOR_FormatRGBFlexible" since="23"/>
-		<field name="COLOR_FormatRawBayer10bit"/>
-		<field name="COLOR_FormatRawBayer8bit"/>
-		<field name="COLOR_FormatRawBayer8bitcompressed"/>
-		<field name="COLOR_FormatSurface" since="18"/>
-		<field name="COLOR_FormatYCbYCr" deprecated="23"/>
-		<field name="COLOR_FormatYCrYCb" deprecated="23"/>
-		<field name="COLOR_FormatYUV411PackedPlanar" deprecated="23"/>
-		<field name="COLOR_FormatYUV411Planar" deprecated="23"/>
-		<field name="COLOR_FormatYUV420Flexible" since="21"/>
-		<field name="COLOR_FormatYUV420PackedPlanar" deprecated="23"/>
-		<field name="COLOR_FormatYUV420PackedSemiPlanar" deprecated="23"/>
-		<field name="COLOR_FormatYUV420Planar" deprecated="23"/>
-		<field name="COLOR_FormatYUV420SemiPlanar" deprecated="23"/>
-		<field name="COLOR_FormatYUV422Flexible" since="23"/>
-		<field name="COLOR_FormatYUV422PackedPlanar" deprecated="23"/>
-		<field name="COLOR_FormatYUV422PackedSemiPlanar" deprecated="23"/>
-		<field name="COLOR_FormatYUV422Planar" deprecated="23"/>
-		<field name="COLOR_FormatYUV422SemiPlanar" deprecated="23"/>
-		<field name="COLOR_FormatYUV444Flexible" since="23"/>
-		<field name="COLOR_FormatYUV444Interleaved" deprecated="23"/>
-		<field name="COLOR_QCOM_FormatYUV420SemiPlanar" deprecated="23"/>
-		<field name="COLOR_TI_FormatYUV420PackedSemiPlanar" deprecated="23"/>
-		<field name="FEATURE_AdaptivePlayback" since="19"/>
-		<field name="FEATURE_IntraRefresh" since="24"/>
-		<field name="FEATURE_PartialFrame" since="26"/>
-		<field name="FEATURE_SecurePlayback" since="21"/>
-		<field name="FEATURE_TunneledPlayback" since="21"/>
-		<field name="colorFormats"/>
-		<field name="profileLevels"/>
-	</class>
-	<class name="android/media/MediaCodecInfo$CodecProfileLevel" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AACObjectELD"/>
-		<field name="AACObjectERLC"/>
-		<field name="AACObjectERScalable" since="26"/>
-		<field name="AACObjectHE"/>
-		<field name="AACObjectHE_PS"/>
-		<field name="AACObjectLC"/>
-		<field name="AACObjectLD"/>
-		<field name="AACObjectLTP"/>
-		<field name="AACObjectMain"/>
-		<field name="AACObjectSSR"/>
-		<field name="AACObjectScalable"/>
-		<field name="AACObjectXHE" since="28"/>
-		<field name="AVCLevel1"/>
-		<field name="AVCLevel11"/>
-		<field name="AVCLevel12"/>
-		<field name="AVCLevel13"/>
-		<field name="AVCLevel1b"/>
-		<field name="AVCLevel2"/>
-		<field name="AVCLevel21"/>
-		<field name="AVCLevel22"/>
-		<field name="AVCLevel3"/>
-		<field name="AVCLevel31"/>
-		<field name="AVCLevel32"/>
-		<field name="AVCLevel4"/>
-		<field name="AVCLevel41"/>
-		<field name="AVCLevel42"/>
-		<field name="AVCLevel5"/>
-		<field name="AVCLevel51"/>
-		<field name="AVCLevel52" since="21"/>
-		<field name="AVCProfileBaseline"/>
-		<field name="AVCProfileConstrainedBaseline" since="27"/>
-		<field name="AVCProfileConstrainedHigh" since="27"/>
-		<field name="AVCProfileExtended"/>
-		<field name="AVCProfileHigh"/>
-		<field name="AVCProfileHigh10"/>
-		<field name="AVCProfileHigh422"/>
-		<field name="AVCProfileHigh444"/>
-		<field name="AVCProfileMain"/>
-		<field name="DolbyVisionLevelFhd24" since="24"/>
-		<field name="DolbyVisionLevelFhd30" since="24"/>
-		<field name="DolbyVisionLevelFhd60" since="24"/>
-		<field name="DolbyVisionLevelHd24" since="24"/>
-		<field name="DolbyVisionLevelHd30" since="24"/>
-		<field name="DolbyVisionLevelUhd24" since="24"/>
-		<field name="DolbyVisionLevelUhd30" since="24"/>
-		<field name="DolbyVisionLevelUhd48" since="24"/>
-		<field name="DolbyVisionLevelUhd60" since="24"/>
-		<field name="DolbyVisionProfileDvavPen" since="24"/>
-		<field name="DolbyVisionProfileDvavPer" since="24"/>
-		<field name="DolbyVisionProfileDvavSe" since="27"/>
-		<field name="DolbyVisionProfileDvheDen" since="24"/>
-		<field name="DolbyVisionProfileDvheDer" since="24"/>
-		<field name="DolbyVisionProfileDvheDtb" since="24"/>
-		<field name="DolbyVisionProfileDvheDth" since="24"/>
-		<field name="DolbyVisionProfileDvheDtr" since="24"/>
-		<field name="DolbyVisionProfileDvheSt" since="27"/>
-		<field name="DolbyVisionProfileDvheStn" since="24"/>
-		<field name="H263Level10"/>
-		<field name="H263Level20"/>
-		<field name="H263Level30"/>
-		<field name="H263Level40"/>
-		<field name="H263Level45"/>
-		<field name="H263Level50"/>
-		<field name="H263Level60"/>
-		<field name="H263Level70"/>
-		<field name="H263ProfileBackwardCompatible"/>
-		<field name="H263ProfileBaseline"/>
-		<field name="H263ProfileH320Coding"/>
-		<field name="H263ProfileHighCompression"/>
-		<field name="H263ProfileHighLatency"/>
-		<field name="H263ProfileISWV2"/>
-		<field name="H263ProfileISWV3"/>
-		<field name="H263ProfileInterlace"/>
-		<field name="H263ProfileInternet"/>
-		<field name="HEVCHighTierLevel1" since="21"/>
-		<field name="HEVCHighTierLevel2" since="21"/>
-		<field name="HEVCHighTierLevel21" since="21"/>
-		<field name="HEVCHighTierLevel3" since="21"/>
-		<field name="HEVCHighTierLevel31" since="21"/>
-		<field name="HEVCHighTierLevel4" since="21"/>
-		<field name="HEVCHighTierLevel41" since="21"/>
-		<field name="HEVCHighTierLevel5" since="21"/>
-		<field name="HEVCHighTierLevel51" since="21"/>
-		<field name="HEVCHighTierLevel52" since="21"/>
-		<field name="HEVCHighTierLevel6" since="21"/>
-		<field name="HEVCHighTierLevel61" since="21"/>
-		<field name="HEVCHighTierLevel62" since="21"/>
-		<field name="HEVCMainTierLevel1" since="21"/>
-		<field name="HEVCMainTierLevel2" since="21"/>
-		<field name="HEVCMainTierLevel21" since="21"/>
-		<field name="HEVCMainTierLevel3" since="21"/>
-		<field name="HEVCMainTierLevel31" since="21"/>
-		<field name="HEVCMainTierLevel4" since="21"/>
-		<field name="HEVCMainTierLevel41" since="21"/>
-		<field name="HEVCMainTierLevel5" since="21"/>
-		<field name="HEVCMainTierLevel51" since="21"/>
-		<field name="HEVCMainTierLevel52" since="21"/>
-		<field name="HEVCMainTierLevel6" since="21"/>
-		<field name="HEVCMainTierLevel61" since="21"/>
-		<field name="HEVCMainTierLevel62" since="21"/>
-		<field name="HEVCProfileMain" since="21"/>
-		<field name="HEVCProfileMain10" since="21"/>
-		<field name="HEVCProfileMain10HDR10" since="24"/>
-		<field name="HEVCProfileMainStill" since="28"/>
-		<field name="MPEG2LevelH14" since="23"/>
-		<field name="MPEG2LevelHL" since="23"/>
-		<field name="MPEG2LevelHP" since="24"/>
-		<field name="MPEG2LevelLL" since="23"/>
-		<field name="MPEG2LevelML" since="23"/>
-		<field name="MPEG2Profile422" since="23"/>
-		<field name="MPEG2ProfileHigh" since="23"/>
-		<field name="MPEG2ProfileMain" since="23"/>
-		<field name="MPEG2ProfileSNR" since="23"/>
-		<field name="MPEG2ProfileSimple" since="23"/>
-		<field name="MPEG2ProfileSpatial" since="23"/>
-		<field name="MPEG4Level0"/>
-		<field name="MPEG4Level0b"/>
-		<field name="MPEG4Level1"/>
-		<field name="MPEG4Level2"/>
-		<field name="MPEG4Level3"/>
-		<field name="MPEG4Level3b" since="24"/>
-		<field name="MPEG4Level4"/>
-		<field name="MPEG4Level4a"/>
-		<field name="MPEG4Level5"/>
-		<field name="MPEG4Level6" since="24"/>
-		<field name="MPEG4ProfileAdvancedCoding"/>
-		<field name="MPEG4ProfileAdvancedCore"/>
-		<field name="MPEG4ProfileAdvancedRealTime"/>
-		<field name="MPEG4ProfileAdvancedScalable"/>
-		<field name="MPEG4ProfileAdvancedSimple"/>
-		<field name="MPEG4ProfileBasicAnimated"/>
-		<field name="MPEG4ProfileCore"/>
-		<field name="MPEG4ProfileCoreScalable"/>
-		<field name="MPEG4ProfileHybrid"/>
-		<field name="MPEG4ProfileMain"/>
-		<field name="MPEG4ProfileNbit"/>
-		<field name="MPEG4ProfileScalableTexture"/>
-		<field name="MPEG4ProfileSimple"/>
-		<field name="MPEG4ProfileSimpleFBA"/>
-		<field name="MPEG4ProfileSimpleFace"/>
-		<field name="MPEG4ProfileSimpleScalable"/>
-		<field name="VP8Level_Version0" since="18"/>
-		<field name="VP8Level_Version1" since="18"/>
-		<field name="VP8Level_Version2" since="18"/>
-		<field name="VP8Level_Version3" since="18"/>
-		<field name="VP8ProfileMain" since="18"/>
-		<field name="VP9Level1" since="24"/>
-		<field name="VP9Level11" since="24"/>
-		<field name="VP9Level2" since="24"/>
-		<field name="VP9Level21" since="24"/>
-		<field name="VP9Level3" since="24"/>
-		<field name="VP9Level31" since="24"/>
-		<field name="VP9Level4" since="24"/>
-		<field name="VP9Level41" since="24"/>
-		<field name="VP9Level5" since="24"/>
-		<field name="VP9Level51" since="24"/>
-		<field name="VP9Level52" since="24"/>
-		<field name="VP9Level6" since="24"/>
-		<field name="VP9Level61" since="24"/>
-		<field name="VP9Level62" since="24"/>
-		<field name="VP9Profile0" since="24"/>
-		<field name="VP9Profile1" since="24"/>
-		<field name="VP9Profile2" since="24"/>
-		<field name="VP9Profile2HDR" since="24"/>
-		<field name="VP9Profile3" since="24"/>
-		<field name="VP9Profile3HDR" since="24"/>
-		<field name="level"/>
-		<field name="profile"/>
-	</class>
-	<class name="android/media/MediaCodecInfo$EncoderCapabilities" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getComplexityRange()Landroid/util/Range;"/>
-		<method name="getQualityRange()Landroid/util/Range;" since="28"/>
-		<method name="isBitrateModeSupported(I)Z"/>
-		<field name="BITRATE_MODE_CBR"/>
-		<field name="BITRATE_MODE_CQ"/>
-		<field name="BITRATE_MODE_VBR"/>
-	</class>
-	<class name="android/media/MediaCodecInfo$VideoCapabilities" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="areSizeAndRateSupported(IID)Z"/>
-		<method name="getAchievableFrameRatesFor(II)Landroid/util/Range;" since="23"/>
-		<method name="getBitrateRange()Landroid/util/Range;"/>
-		<method name="getHeightAlignment()I"/>
-		<method name="getSupportedFrameRates()Landroid/util/Range;"/>
-		<method name="getSupportedFrameRatesFor(II)Landroid/util/Range;"/>
-		<method name="getSupportedHeights()Landroid/util/Range;"/>
-		<method name="getSupportedHeightsFor(I)Landroid/util/Range;"/>
-		<method name="getSupportedWidths()Landroid/util/Range;"/>
-		<method name="getSupportedWidthsFor(I)Landroid/util/Range;"/>
-		<method name="getWidthAlignment()I"/>
-		<method name="isSizeSupported(II)Z"/>
-	</class>
-	<class name="android/media/MediaCodecList" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="21"/>
-		<method name="&lt;init>(I)V" since="21"/>
-		<method name="findDecoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21"/>
-		<method name="findEncoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21"/>
-		<method name="getCodecCount()I" deprecated="21"/>
-		<method name="getCodecInfoAt(I)Landroid/media/MediaCodecInfo;" deprecated="21"/>
-		<method name="getCodecInfos()[Landroid/media/MediaCodecInfo;" since="21"/>
-		<field name="ALL_CODECS" since="21"/>
-		<field name="REGULAR_CODECS" since="21"/>
-	</class>
-	<class name="android/media/MediaCrypto" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/util/UUID;[B)V"/>
-		<method name="isCryptoSchemeSupported(Ljava/util/UUID;)Z"/>
-		<method name="release()V"/>
-		<method name="requiresSecureDecoderComponent(Ljava/lang/String;)Z"/>
-		<method name="setMediaDrmSession([B)V" since="23"/>
-	</class>
-	<class name="android/media/MediaCryptoException" since="16">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/MediaDataSource" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getSize()J"/>
-		<method name="readAt(J[BII)I"/>
-	</class>
-	<class name="android/media/MediaDescrambler" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="descramble(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Landroid/media/MediaCodec$CryptoInfo;)I"/>
-		<method name="requiresSecureDecoderComponent(Ljava/lang/String;)Z"/>
-		<method name="setMediaCasSession(Landroid/media/MediaCas$Session;)V"/>
-		<field name="SCRAMBLE_CONTROL_EVEN_KEY" since="28"/>
-		<field name="SCRAMBLE_CONTROL_ODD_KEY" since="28"/>
-		<field name="SCRAMBLE_CONTROL_RESERVED" since="28"/>
-		<field name="SCRAMBLE_CONTROL_UNSCRAMBLED" since="28"/>
-		<field name="SCRAMBLE_FLAG_PES_HEADER" since="28"/>
-	</class>
-	<class name="android/media/MediaDescription" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getDescription()Ljava/lang/CharSequence;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getIconBitmap()Landroid/graphics/Bitmap;"/>
-		<method name="getIconUri()Landroid/net/Uri;"/>
-		<method name="getMediaId()Ljava/lang/String;"/>
-		<method name="getMediaUri()Landroid/net/Uri;" since="23"/>
-		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<field name="BT_FOLDER_TYPE_ALBUMS" since="26"/>
-		<field name="BT_FOLDER_TYPE_ARTISTS" since="26"/>
-		<field name="BT_FOLDER_TYPE_GENRES" since="26"/>
-		<field name="BT_FOLDER_TYPE_MIXED" since="26"/>
-		<field name="BT_FOLDER_TYPE_PLAYLISTS" since="26"/>
-		<field name="BT_FOLDER_TYPE_TITLES" since="26"/>
-		<field name="BT_FOLDER_TYPE_YEARS" since="26"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_BT_FOLDER_TYPE" since="26"/>
-	</class>
-	<class name="android/media/MediaDescription$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/media/MediaDescription;"/>
-		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;"/>
-		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/MediaDescription$Builder;"/>
-		<method name="setIconBitmap(Landroid/graphics/Bitmap;)Landroid/media/MediaDescription$Builder;"/>
-		<method name="setIconUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;"/>
-		<method name="setMediaId(Ljava/lang/String;)Landroid/media/MediaDescription$Builder;"/>
-		<method name="setMediaUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;" since="23"/>
-		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;"/>
-	</class>
-	<class name="android/media/MediaDrm" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="28"/>
-		<method name="&lt;init>(Ljava/util/UUID;)V"/>
-		<method name="closeSession([B)V"/>
-		<method name="getConnectedHdcpLevel()I" since="28"/>
-		<method name="getCryptoSession([BLjava/lang/String;Ljava/lang/String;)Landroid/media/MediaDrm$CryptoSession;"/>
-		<method name="getKeyRequest([B[BLjava/lang/String;ILjava/util/HashMap;)Landroid/media/MediaDrm$KeyRequest;"/>
-		<method name="getMaxHdcpLevel()I" since="28"/>
-		<method name="getMaxSecurityLevel()I" since="28"/>
-		<method name="getMaxSessionCount()I" since="28"/>
-		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28"/>
-		<method name="getOpenSessionCount()I" since="28"/>
-		<method name="getPropertyByteArray(Ljava/lang/String;)[B"/>
-		<method name="getPropertyString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getProvisionRequest()Landroid/media/MediaDrm$ProvisionRequest;"/>
-		<method name="getSecureStop([B)[B" since="22"/>
-		<method name="getSecureStopIds()Ljava/util/List;" since="28"/>
-		<method name="getSecureStops()Ljava/util/List;"/>
-		<method name="getSecurityLevel([B)I" since="28"/>
-		<method name="isCryptoSchemeSupported(Ljava/util/UUID;)Z"/>
-		<method name="isCryptoSchemeSupported(Ljava/util/UUID;Ljava/lang/String;)Z" since="19"/>
-		<method name="openSession()[B"/>
-		<method name="openSession(I)[B" since="28"/>
-		<method name="provideKeyResponse([B[B)[B"/>
-		<method name="provideProvisionResponse([B)V"/>
-		<method name="queryKeyStatus([B)Ljava/util/HashMap;"/>
-		<method name="release()V" deprecated="28"/>
-		<method name="releaseAllSecureStops()V" since="22" deprecated="28"/>
-		<method name="releaseSecureStops([B)V"/>
-		<method name="removeAllSecureStops()V" since="28"/>
-		<method name="removeKeys([B)V"/>
-		<method name="removeSecureStop([B)V" since="28"/>
-		<method name="restoreKeys([B[B)V"/>
-		<method name="setOnEventListener(Landroid/media/MediaDrm$OnEventListener;)V"/>
-		<method name="setOnExpirationUpdateListener(Landroid/media/MediaDrm$OnExpirationUpdateListener;Landroid/os/Handler;)V" since="23"/>
-		<method name="setOnKeyStatusChangeListener(Landroid/media/MediaDrm$OnKeyStatusChangeListener;Landroid/os/Handler;)V" since="23"/>
-		<method name="setPropertyByteArray(Ljava/lang/String;[B)V"/>
-		<method name="setPropertyString(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="EVENT_KEY_EXPIRED" deprecated="26"/>
-		<field name="EVENT_KEY_REQUIRED"/>
-		<field name="EVENT_PROVISION_REQUIRED" deprecated="23"/>
-		<field name="EVENT_SESSION_RECLAIMED" since="23"/>
-		<field name="EVENT_VENDOR_DEFINED"/>
-		<field name="HDCP_LEVEL_UNKNOWN" since="28"/>
-		<field name="HDCP_NONE" since="28"/>
-		<field name="HDCP_NO_DIGITAL_OUTPUT" since="28"/>
-		<field name="HDCP_V1" since="28"/>
-		<field name="HDCP_V2" since="28"/>
-		<field name="HDCP_V2_1" since="28"/>
-		<field name="HDCP_V2_2" since="28"/>
-		<field name="KEY_TYPE_OFFLINE"/>
-		<field name="KEY_TYPE_RELEASE"/>
-		<field name="KEY_TYPE_STREAMING"/>
-		<field name="PROPERTY_ALGORITHMS"/>
-		<field name="PROPERTY_DESCRIPTION"/>
-		<field name="PROPERTY_DEVICE_UNIQUE_ID"/>
-		<field name="PROPERTY_VENDOR"/>
-		<field name="PROPERTY_VERSION"/>
-		<field name="SECURITY_LEVEL_HW_SECURE_ALL" since="28"/>
-		<field name="SECURITY_LEVEL_HW_SECURE_CRYPTO" since="28"/>
-		<field name="SECURITY_LEVEL_HW_SECURE_DECODE" since="28"/>
-		<field name="SECURITY_LEVEL_SW_SECURE_CRYPTO" since="28"/>
-		<field name="SECURITY_LEVEL_SW_SECURE_DECODE" since="28"/>
-		<field name="SECURITY_LEVEL_UNKNOWN" since="28"/>
-	</class>
-	<class name="android/media/MediaDrm$CryptoSession" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/MediaDrm;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/MediaDrm;[BLjava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="decrypt([B[B[B)[B"/>
-		<method name="encrypt([B[B[B)[B"/>
-		<method name="sign([B[B)[B"/>
-		<method name="verify([B[B[B)Z"/>
-	</class>
-	<class name="android/media/MediaDrm$HdcpLevel" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/media/MediaDrm$KeyRequest" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getData()[B"/>
-		<method name="getDefaultUrl()Ljava/lang/String;"/>
-		<method name="getRequestType()I" since="23"/>
-		<field name="REQUEST_TYPE_INITIAL" since="23"/>
-		<field name="REQUEST_TYPE_NONE" since="28"/>
-		<field name="REQUEST_TYPE_RELEASE" since="23"/>
-		<field name="REQUEST_TYPE_RENEWAL" since="23"/>
-		<field name="REQUEST_TYPE_UPDATE" since="28"/>
-	</class>
-	<class name="android/media/MediaDrm$KeyStatus" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([BI)V" since="29"/>
-		<method name="getKeyId()[B"/>
-		<method name="getStatusCode()I"/>
-		<field name="STATUS_EXPIRED"/>
-		<field name="STATUS_INTERNAL_ERROR"/>
-		<field name="STATUS_OUTPUT_NOT_ALLOWED"/>
-		<field name="STATUS_PENDING"/>
-		<field name="STATUS_USABLE"/>
-	</class>
-	<class name="android/media/MediaDrm$MediaDrmStateException" since="21">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
-		<method name="getDiagnosticInfo()Ljava/lang/String;"/>
-	</class>
-	<class name="android/media/MediaDrm$MetricsConstants" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CLOSE_SESSION_ERROR_COUNT"/>
-		<field name="CLOSE_SESSION_ERROR_LIST"/>
-		<field name="CLOSE_SESSION_OK_COUNT"/>
-		<field name="EVENT_KEY_EXPIRED_COUNT"/>
-		<field name="EVENT_KEY_NEEDED_COUNT"/>
-		<field name="EVENT_PROVISION_REQUIRED_COUNT"/>
-		<field name="EVENT_SESSION_RECLAIMED_COUNT"/>
-		<field name="EVENT_VENDOR_DEFINED_COUNT"/>
-		<field name="GET_DEVICE_UNIQUE_ID_ERROR_COUNT"/>
-		<field name="GET_DEVICE_UNIQUE_ID_ERROR_LIST"/>
-		<field name="GET_DEVICE_UNIQUE_ID_OK_COUNT"/>
-		<field name="GET_KEY_REQUEST_ERROR_COUNT"/>
-		<field name="GET_KEY_REQUEST_ERROR_LIST"/>
-		<field name="GET_KEY_REQUEST_OK_COUNT"/>
-		<field name="GET_KEY_REQUEST_OK_TIME_MICROS"/>
-		<field name="GET_PROVISION_REQUEST_ERROR_COUNT"/>
-		<field name="GET_PROVISION_REQUEST_ERROR_LIST"/>
-		<field name="GET_PROVISION_REQUEST_OK_COUNT"/>
-		<field name="KEY_STATUS_EXPIRED_COUNT"/>
-		<field name="KEY_STATUS_INTERNAL_ERROR_COUNT"/>
-		<field name="KEY_STATUS_OUTPUT_NOT_ALLOWED_COUNT"/>
-		<field name="KEY_STATUS_PENDING_COUNT"/>
-		<field name="KEY_STATUS_USABLE_COUNT"/>
-		<field name="OPEN_SESSION_ERROR_COUNT"/>
-		<field name="OPEN_SESSION_ERROR_LIST"/>
-		<field name="OPEN_SESSION_OK_COUNT"/>
-		<field name="PROVIDE_KEY_RESPONSE_ERROR_COUNT"/>
-		<field name="PROVIDE_KEY_RESPONSE_ERROR_LIST"/>
-		<field name="PROVIDE_KEY_RESPONSE_OK_COUNT"/>
-		<field name="PROVIDE_KEY_RESPONSE_OK_TIME_MICROS"/>
-		<field name="PROVIDE_PROVISION_RESPONSE_ERROR_COUNT"/>
-		<field name="PROVIDE_PROVISION_RESPONSE_ERROR_LIST"/>
-		<field name="PROVIDE_PROVISION_RESPONSE_OK_COUNT"/>
-		<field name="SESSION_END_TIMES_MS"/>
-		<field name="SESSION_START_TIMES_MS"/>
-	</class>
-	<class name="android/media/MediaDrm$OnEventListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onEvent(Landroid/media/MediaDrm;[BII[B)V"/>
-	</class>
-	<class name="android/media/MediaDrm$OnExpirationUpdateListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onExpirationUpdate(Landroid/media/MediaDrm;[BJ)V"/>
-	</class>
-	<class name="android/media/MediaDrm$OnKeyStatusChangeListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onKeyStatusChange(Landroid/media/MediaDrm;[BLjava/util/List;Z)V"/>
-	</class>
-	<class name="android/media/MediaDrm$ProvisionRequest" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getData()[B"/>
-		<method name="getDefaultUrl()Ljava/lang/String;"/>
-	</class>
-	<class name="android/media/MediaDrm$SecurityLevel" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/media/MediaDrmException" since="18">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/MediaDrmResetException" since="23">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/MediaExtractor" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="advance()Z"/>
-		<method name="getAudioPresentations(I)Ljava/util/List;" since="28"/>
-		<method name="getCachedDuration()J"/>
-		<method name="getCasInfo(I)Landroid/media/MediaExtractor$CasInfo;" since="26"/>
-		<method name="getDrmInitData()Landroid/media/DrmInitData;" since="24"/>
-		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
-		<method name="getPsshInfo()Ljava/util/Map;" since="18"/>
-		<method name="getSampleCryptoInfo(Landroid/media/MediaCodec$CryptoInfo;)Z"/>
-		<method name="getSampleFlags()I"/>
-		<method name="getSampleSize()J" since="28"/>
-		<method name="getSampleTime()J"/>
-		<method name="getSampleTrackIndex()I"/>
-		<method name="getTrackCount()I"/>
-		<method name="getTrackFormat(I)Landroid/media/MediaFormat;"/>
-		<method name="hasCacheReachedEndOfStream()Z"/>
-		<method name="readSampleData(Ljava/nio/ByteBuffer;I)I"/>
-		<method name="release()V"/>
-		<method name="seekTo(JI)V"/>
-		<method name="selectTrack(I)V"/>
-		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;)V"/>
-		<method name="setDataSource(Landroid/content/res/AssetFileDescriptor;)V" since="24"/>
-		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23"/>
-		<method name="setDataSource(Ljava/io/FileDescriptor;)V"/>
-		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V"/>
-		<method name="setDataSource(Ljava/lang/String;)V"/>
-		<method name="setDataSource(Ljava/lang/String;Ljava/util/Map;)V"/>
-		<method name="setMediaCas(Landroid/media/MediaCas;)V" since="26"/>
-		<method name="unselectTrack(I)V"/>
-		<field name="SAMPLE_FLAG_ENCRYPTED"/>
-		<field name="SAMPLE_FLAG_PARTIAL_FRAME" since="26"/>
-		<field name="SAMPLE_FLAG_SYNC"/>
-		<field name="SEEK_TO_CLOSEST_SYNC"/>
-		<field name="SEEK_TO_NEXT_SYNC"/>
-		<field name="SEEK_TO_PREVIOUS_SYNC"/>
-	</class>
-	<class name="android/media/MediaExtractor$CasInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILandroid/media/MediaCas$Session;)V" since="29"/>
-		<method name="getSession()Landroid/media/MediaCas$Session;"/>
-		<method name="getSystemId()I"/>
-	</class>
-	<class name="android/media/MediaExtractor$MetricsConstants" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="FORMAT"/>
-		<field name="MIME_TYPE"/>
-		<field name="TRACKS"/>
-	</class>
-	<class name="android/media/MediaFormat" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="containsKey(Ljava/lang/String;)Z"/>
-		<method name="createAudioFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;"/>
-		<method name="createSubtitleFormat(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaFormat;" since="19"/>
-		<method name="createVideoFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;"/>
-		<method name="getByteBuffer(Ljava/lang/String;)Ljava/nio/ByteBuffer;"/>
-		<method name="getFeatureEnabled(Ljava/lang/String;)Z" since="21"/>
-		<method name="getFloat(Ljava/lang/String;)F"/>
-		<method name="getInteger(Ljava/lang/String;)I"/>
-		<method name="getLong(Ljava/lang/String;)J"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="setByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)V"/>
-		<method name="setFeatureEnabled(Ljava/lang/String;Z)V" since="21"/>
-		<method name="setFloat(Ljava/lang/String;F)V"/>
-		<method name="setInteger(Ljava/lang/String;I)V"/>
-		<method name="setLong(Ljava/lang/String;J)V"/>
-		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="COLOR_RANGE_FULL" since="24"/>
-		<field name="COLOR_RANGE_LIMITED" since="24"/>
-		<field name="COLOR_STANDARD_BT2020" since="24"/>
-		<field name="COLOR_STANDARD_BT601_NTSC" since="24"/>
-		<field name="COLOR_STANDARD_BT601_PAL" since="24"/>
-		<field name="COLOR_STANDARD_BT709" since="24"/>
-		<field name="COLOR_TRANSFER_HLG" since="24"/>
-		<field name="COLOR_TRANSFER_LINEAR" since="24"/>
-		<field name="COLOR_TRANSFER_SDR_VIDEO" since="24"/>
-		<field name="COLOR_TRANSFER_ST2084" since="24"/>
-		<field name="KEY_AAC_DRC_ATTENUATION_FACTOR" since="21"/>
-		<field name="KEY_AAC_DRC_BOOST_FACTOR" since="21"/>
-		<field name="KEY_AAC_DRC_EFFECT_TYPE" since="28"/>
-		<field name="KEY_AAC_DRC_HEAVY_COMPRESSION" since="21"/>
-		<field name="KEY_AAC_DRC_TARGET_REFERENCE_LEVEL" since="21"/>
-		<field name="KEY_AAC_ENCODED_TARGET_LEVEL" since="21"/>
-		<field name="KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT" since="21"/>
-		<field name="KEY_AAC_PROFILE"/>
-		<field name="KEY_AAC_SBR_MODE" since="21"/>
-		<field name="KEY_AUDIO_SESSION_ID" since="21"/>
-		<field name="KEY_BITRATE_MODE" since="21"/>
-		<field name="KEY_BIT_RATE"/>
-		<field name="KEY_CAPTURE_RATE" since="21"/>
-		<field name="KEY_CHANNEL_COUNT"/>
-		<field name="KEY_CHANNEL_MASK"/>
-		<field name="KEY_COLOR_FORMAT"/>
-		<field name="KEY_COLOR_RANGE" since="24"/>
-		<field name="KEY_COLOR_STANDARD" since="24"/>
-		<field name="KEY_COLOR_TRANSFER" since="24"/>
-		<field name="KEY_COMPLEXITY" since="21"/>
-		<field name="KEY_DURATION"/>
-		<field name="KEY_FLAC_COMPRESSION_LEVEL"/>
-		<field name="KEY_FRAME_RATE"/>
-		<field name="KEY_GRID_COLUMNS" since="28"/>
-		<field name="KEY_GRID_ROWS" since="28"/>
-		<field name="KEY_HDR_STATIC_INFO" since="24"/>
-		<field name="KEY_HEIGHT"/>
-		<field name="KEY_INTRA_REFRESH_PERIOD" since="24"/>
-		<field name="KEY_IS_ADTS"/>
-		<field name="KEY_IS_AUTOSELECT" since="19"/>
-		<field name="KEY_IS_DEFAULT" since="19"/>
-		<field name="KEY_IS_FORCED_SUBTITLE" since="19"/>
-		<field name="KEY_I_FRAME_INTERVAL"/>
-		<field name="KEY_LANGUAGE" since="19"/>
-		<field name="KEY_LATENCY" since="26"/>
-		<field name="KEY_LEVEL" since="23"/>
-		<field name="KEY_MAX_HEIGHT" since="19"/>
-		<field name="KEY_MAX_INPUT_SIZE"/>
-		<field name="KEY_MAX_WIDTH" since="19"/>
-		<field name="KEY_MIME"/>
-		<field name="KEY_OPERATING_RATE" since="23"/>
-		<field name="KEY_OUTPUT_REORDER_DEPTH" since="28"/>
-		<field name="KEY_PCM_ENCODING" since="24"/>
-		<field name="KEY_PRIORITY" since="23"/>
-		<field name="KEY_PROFILE" since="21"/>
-		<field name="KEY_PUSH_BLANK_BUFFERS_ON_STOP" since="19"/>
-		<field name="KEY_QUALITY" since="28"/>
-		<field name="KEY_REPEAT_PREVIOUS_FRAME_AFTER" since="19"/>
-		<field name="KEY_ROTATION" since="23"/>
-		<field name="KEY_SAMPLE_RATE"/>
-		<field name="KEY_SLICE_HEIGHT" since="23"/>
-		<field name="KEY_STRIDE" since="23"/>
-		<field name="KEY_TEMPORAL_LAYERING" since="21"/>
-		<field name="KEY_TILE_HEIGHT" since="28"/>
-		<field name="KEY_TILE_WIDTH" since="28"/>
-		<field name="KEY_TRACK_ID" since="24"/>
-		<field name="KEY_WIDTH"/>
-		<field name="MIMETYPE_AUDIO_AAC" since="21"/>
-		<field name="MIMETYPE_AUDIO_AC3" since="21"/>
-		<field name="MIMETYPE_AUDIO_AMR_NB" since="21"/>
-		<field name="MIMETYPE_AUDIO_AMR_WB" since="21"/>
-		<field name="MIMETYPE_AUDIO_EAC3" since="23"/>
-		<field name="MIMETYPE_AUDIO_FLAC" since="21"/>
-		<field name="MIMETYPE_AUDIO_G711_ALAW" since="21"/>
-		<field name="MIMETYPE_AUDIO_G711_MLAW" since="21"/>
-		<field name="MIMETYPE_AUDIO_MPEG" since="21"/>
-		<field name="MIMETYPE_AUDIO_MSGSM" since="21"/>
-		<field name="MIMETYPE_AUDIO_OPUS" since="21"/>
-		<field name="MIMETYPE_AUDIO_QCELP" since="21"/>
-		<field name="MIMETYPE_AUDIO_RAW" since="21"/>
-		<field name="MIMETYPE_AUDIO_SCRAMBLED" since="26"/>
-		<field name="MIMETYPE_AUDIO_VORBIS" since="21"/>
-		<field name="MIMETYPE_IMAGE_ANDROID_HEIC" since="28"/>
-		<field name="MIMETYPE_TEXT_CEA_608" since="21"/>
-		<field name="MIMETYPE_TEXT_CEA_708" since="28"/>
-		<field name="MIMETYPE_TEXT_SUBRIP" since="28"/>
-		<field name="MIMETYPE_TEXT_VTT" since="21"/>
-		<field name="MIMETYPE_VIDEO_AVC" since="21"/>
-		<field name="MIMETYPE_VIDEO_DOLBY_VISION" since="24"/>
-		<field name="MIMETYPE_VIDEO_H263" since="21"/>
-		<field name="MIMETYPE_VIDEO_HEVC" since="21"/>
-		<field name="MIMETYPE_VIDEO_MPEG2" since="21"/>
-		<field name="MIMETYPE_VIDEO_MPEG4" since="21"/>
-		<field name="MIMETYPE_VIDEO_RAW" since="21"/>
-		<field name="MIMETYPE_VIDEO_SCRAMBLED" since="26"/>
-		<field name="MIMETYPE_VIDEO_VP8" since="21"/>
-		<field name="MIMETYPE_VIDEO_VP9" since="21"/>
-	</class>
-	<class name="android/media/MediaMetadata" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Bundle;)V" since="29"/>
-		<method name="containsKey(Ljava/lang/String;)Z"/>
-		<method name="getBitmap(Ljava/lang/String;)Landroid/graphics/Bitmap;"/>
-		<method name="getDescription()Landroid/media/MediaDescription;"/>
-		<method name="getLong(Ljava/lang/String;)J"/>
-		<method name="getRating(Ljava/lang/String;)Landroid/media/Rating;"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getText(Ljava/lang/String;)Ljava/lang/CharSequence;"/>
-		<method name="keySet()Ljava/util/Set;"/>
-		<method name="size()I"/>
-		<field name="CREATOR"/>
-		<field name="METADATA_KEY_ALBUM"/>
-		<field name="METADATA_KEY_ALBUM_ART"/>
-		<field name="METADATA_KEY_ALBUM_ARTIST"/>
-		<field name="METADATA_KEY_ALBUM_ART_URI"/>
-		<field name="METADATA_KEY_ART"/>
-		<field name="METADATA_KEY_ARTIST"/>
-		<field name="METADATA_KEY_ART_URI"/>
-		<field name="METADATA_KEY_AUTHOR"/>
-		<field name="METADATA_KEY_BT_FOLDER_TYPE" since="26"/>
-		<field name="METADATA_KEY_COMPILATION"/>
-		<field name="METADATA_KEY_COMPOSER"/>
-		<field name="METADATA_KEY_DATE"/>
-		<field name="METADATA_KEY_DISC_NUMBER"/>
-		<field name="METADATA_KEY_DISPLAY_DESCRIPTION"/>
-		<field name="METADATA_KEY_DISPLAY_ICON"/>
-		<field name="METADATA_KEY_DISPLAY_ICON_URI"/>
-		<field name="METADATA_KEY_DISPLAY_SUBTITLE"/>
-		<field name="METADATA_KEY_DISPLAY_TITLE"/>
-		<field name="METADATA_KEY_DURATION"/>
-		<field name="METADATA_KEY_GENRE"/>
-		<field name="METADATA_KEY_MEDIA_ID"/>
-		<field name="METADATA_KEY_MEDIA_URI" since="26"/>
-		<field name="METADATA_KEY_NUM_TRACKS"/>
-		<field name="METADATA_KEY_RATING"/>
-		<field name="METADATA_KEY_TITLE"/>
-		<field name="METADATA_KEY_TRACK_NUMBER"/>
-		<field name="METADATA_KEY_USER_RATING"/>
-		<field name="METADATA_KEY_WRITER"/>
-		<field name="METADATA_KEY_YEAR"/>
-	</class>
-	<class name="android/media/MediaMetadata$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/media/MediaMetadata;)V"/>
-		<method name="build()Landroid/media/MediaMetadata;"/>
-		<method name="putBitmap(Ljava/lang/String;Landroid/graphics/Bitmap;)Landroid/media/MediaMetadata$Builder;"/>
-		<method name="putLong(Ljava/lang/String;J)Landroid/media/MediaMetadata$Builder;"/>
-		<method name="putRating(Ljava/lang/String;Landroid/media/Rating;)Landroid/media/MediaMetadata$Builder;"/>
-		<method name="putString(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaMetadata$Builder;"/>
-		<method name="putText(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/media/MediaMetadata$Builder;"/>
-	</class>
-	<class name="android/media/MediaMetadataEditor" since="19" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addEditableKey(I)V"/>
-		<method name="apply()V"/>
-		<method name="clear()V"/>
-		<method name="getBitmap(ILandroid/graphics/Bitmap;)Landroid/graphics/Bitmap;"/>
-		<method name="getEditableKeys()[I"/>
-		<method name="getLong(IJ)J"/>
-		<method name="getObject(ILjava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getString(ILjava/lang/String;)Ljava/lang/String;"/>
-		<method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/MediaMetadataEditor;"/>
-		<method name="putLong(IJ)Landroid/media/MediaMetadataEditor;"/>
-		<method name="putObject(ILjava/lang/Object;)Landroid/media/MediaMetadataEditor;"/>
-		<method name="putString(ILjava/lang/String;)Landroid/media/MediaMetadataEditor;"/>
-		<method name="removeEditableKeys()V"/>
-		<field name="BITMAP_KEY_ARTWORK"/>
-		<field name="RATING_KEY_BY_OTHERS"/>
-		<field name="RATING_KEY_BY_USER"/>
-	</class>
-	<class name="android/media/MediaMetadataRetriever" since="10">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="extractMetadata(I)Ljava/lang/String;"/>
-		<method name="getEmbeddedPicture()[B"/>
-		<method name="getFrameAtIndex(I)Landroid/graphics/Bitmap;" since="28"/>
-		<method name="getFrameAtIndex(ILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28"/>
-		<method name="getFrameAtTime()Landroid/graphics/Bitmap;"/>
-		<method name="getFrameAtTime(J)Landroid/graphics/Bitmap;"/>
-		<method name="getFrameAtTime(JI)Landroid/graphics/Bitmap;"/>
-		<method name="getFramesAtIndex(II)Ljava/util/List;" since="28"/>
-		<method name="getFramesAtIndex(IILandroid/media/MediaMetadataRetriever$BitmapParams;)Ljava/util/List;" since="28"/>
-		<method name="getImageAtIndex(I)Landroid/graphics/Bitmap;" since="28"/>
-		<method name="getImageAtIndex(ILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28"/>
-		<method name="getPrimaryImage()Landroid/graphics/Bitmap;" since="28"/>
-		<method name="getPrimaryImage(Landroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28"/>
-		<method name="getScaledFrameAtTime(JIII)Landroid/graphics/Bitmap;" since="27"/>
-		<method name="release()V"/>
-		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;)V"/>
-		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23"/>
-		<method name="setDataSource(Ljava/io/FileDescriptor;)V"/>
-		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V"/>
-		<method name="setDataSource(Ljava/lang/String;)V"/>
-		<method name="setDataSource(Ljava/lang/String;Ljava/util/Map;)V" since="14"/>
-		<field name="METADATA_KEY_ALBUM"/>
-		<field name="METADATA_KEY_ALBUMARTIST"/>
-		<field name="METADATA_KEY_ARTIST"/>
-		<field name="METADATA_KEY_AUTHOR"/>
-		<field name="METADATA_KEY_BITRATE" since="14"/>
-		<field name="METADATA_KEY_CAPTURE_FRAMERATE" since="23"/>
-		<field name="METADATA_KEY_CD_TRACK_NUMBER"/>
-		<field name="METADATA_KEY_COMPILATION"/>
-		<field name="METADATA_KEY_COMPOSER"/>
-		<field name="METADATA_KEY_DATE"/>
-		<field name="METADATA_KEY_DISC_NUMBER"/>
-		<field name="METADATA_KEY_DURATION"/>
-		<field name="METADATA_KEY_GENRE"/>
-		<field name="METADATA_KEY_HAS_AUDIO" since="14"/>
-		<field name="METADATA_KEY_HAS_IMAGE" since="28"/>
-		<field name="METADATA_KEY_HAS_VIDEO" since="14"/>
-		<field name="METADATA_KEY_IMAGE_COUNT" since="28"/>
-		<field name="METADATA_KEY_IMAGE_HEIGHT" since="28"/>
-		<field name="METADATA_KEY_IMAGE_PRIMARY" since="28"/>
-		<field name="METADATA_KEY_IMAGE_ROTATION" since="28"/>
-		<field name="METADATA_KEY_IMAGE_WIDTH" since="28"/>
-		<field name="METADATA_KEY_LOCATION" since="15"/>
-		<field name="METADATA_KEY_MIMETYPE"/>
-		<field name="METADATA_KEY_NUM_TRACKS"/>
-		<field name="METADATA_KEY_TITLE"/>
-		<field name="METADATA_KEY_VIDEO_FRAME_COUNT" since="28"/>
-		<field name="METADATA_KEY_VIDEO_HEIGHT" since="14"/>
-		<field name="METADATA_KEY_VIDEO_ROTATION" since="17"/>
-		<field name="METADATA_KEY_VIDEO_WIDTH" since="14"/>
-		<field name="METADATA_KEY_WRITER"/>
-		<field name="METADATA_KEY_YEAR"/>
-		<field name="OPTION_CLOSEST"/>
-		<field name="OPTION_CLOSEST_SYNC"/>
-		<field name="OPTION_NEXT_SYNC"/>
-		<field name="OPTION_PREVIOUS_SYNC"/>
-	</class>
-	<class name="android/media/MediaMetadataRetriever$BitmapParams" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getActualConfig()Landroid/graphics/Bitmap$Config;"/>
-		<method name="getPreferredConfig()Landroid/graphics/Bitmap$Config;"/>
-		<method name="setPreferredConfig(Landroid/graphics/Bitmap$Config;)V"/>
-	</class>
-	<class name="android/media/MediaMuxer" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;I)V" since="26"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="addTrack(Landroid/media/MediaFormat;)I"/>
-		<method name="release()V"/>
-		<method name="setLocation(FF)V" since="19"/>
-		<method name="setOrientationHint(I)V"/>
-		<method name="start()V"/>
-		<method name="stop()V"/>
-		<method name="writeSampleData(ILjava/nio/ByteBuffer;Landroid/media/MediaCodec$BufferInfo;)V"/>
-	</class>
-	<class name="android/media/MediaMuxer$OutputFormat" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="MUXER_OUTPUT_3GPP" since="26"/>
-		<field name="MUXER_OUTPUT_HEIF" since="28"/>
-		<field name="MUXER_OUTPUT_MPEG_4"/>
-		<field name="MUXER_OUTPUT_WEBM" since="21"/>
-	</class>
-	<class name="android/media/MediaPlayer" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/AudioRouting" since="28"/>
-		<implements name="android/media/VolumeAutomation" since="26"/>
-		<method name="&lt;init>()V"/>
-		<method name="addTimedTextSource(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;)V" since="16"/>
-		<method name="addTimedTextSource(Ljava/io/FileDescriptor;JJLjava/lang/String;)V" since="16"/>
-		<method name="addTimedTextSource(Ljava/io/FileDescriptor;Ljava/lang/String;)V" since="16"/>
-		<method name="addTimedTextSource(Ljava/lang/String;Ljava/lang/String;)V" since="16"/>
-		<method name="attachAuxEffect(I)V" since="9"/>
-		<method name="clearOnMediaTimeDiscontinuityListener()V" since="28"/>
-		<method name="clearOnSubtitleDataListener()V" since="28"/>
-		<method name="create(Landroid/content/Context;I)Landroid/media/MediaPlayer;"/>
-		<method name="create(Landroid/content/Context;ILandroid/media/AudioAttributes;I)Landroid/media/MediaPlayer;" since="21"/>
-		<method name="create(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/MediaPlayer;"/>
-		<method name="create(Landroid/content/Context;Landroid/net/Uri;Landroid/view/SurfaceHolder;)Landroid/media/MediaPlayer;"/>
-		<method name="create(Landroid/content/Context;Landroid/net/Uri;Landroid/view/SurfaceHolder;Landroid/media/AudioAttributes;I)Landroid/media/MediaPlayer;" since="21"/>
-		<method name="deselectTrack(I)V" since="16"/>
-		<method name="getAudioSessionId()I" since="9"/>
-		<method name="getCurrentPosition()I"/>
-		<method name="getDrmInfo()Landroid/media/MediaPlayer$DrmInfo;" since="26"/>
-		<method name="getDrmPropertyString(Ljava/lang/String;)Ljava/lang/String;" since="26"/>
-		<method name="getDuration()I"/>
-		<method name="getKeyRequest([B[BLjava/lang/String;ILjava/util/Map;)Landroid/media/MediaDrm$KeyRequest;" since="26"/>
-		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
-		<method name="getPlaybackParams()Landroid/media/PlaybackParams;" since="23"/>
-		<method name="getSelectedTrack(I)I" since="21"/>
-		<method name="getSyncParams()Landroid/media/SyncParams;" since="23"/>
-		<method name="getTimestamp()Landroid/media/MediaTimestamp;" since="23"/>
-		<method name="getTrackInfo()[Landroid/media/MediaPlayer$TrackInfo;" since="16"/>
-		<method name="getVideoHeight()I"/>
-		<method name="getVideoWidth()I"/>
-		<method name="isLooping()Z" since="3"/>
-		<method name="isPlaying()Z"/>
-		<method name="pause()V"/>
-		<method name="prepare()V"/>
-		<method name="prepareAsync()V"/>
-		<method name="prepareDrm(Ljava/util/UUID;)V" since="26"/>
-		<method name="provideKeyResponse([B[B)[B" since="26"/>
-		<method name="release()V"/>
-		<method name="releaseDrm()V" since="26"/>
-		<method name="reset()V"/>
-		<method name="restoreKeys([B)V" since="26"/>
-		<method name="seekTo(I)V"/>
-		<method name="seekTo(JI)V" since="26"/>
-		<method name="selectTrack(I)V" since="16"/>
-		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="21"/>
-		<method name="setAudioSessionId(I)V" since="9"/>
-		<method name="setAudioStreamType(I)V" deprecated="26"/>
-		<method name="setAuxEffectSendLevel(F)V" since="9"/>
-		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;)V"/>
-		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;)V" since="14"/>
-		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;Ljava/util/List;)V" since="26"/>
-		<method name="setDataSource(Landroid/content/res/AssetFileDescriptor;)V" since="24"/>
-		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23"/>
-		<method name="setDataSource(Ljava/io/FileDescriptor;)V"/>
-		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V"/>
-		<method name="setDataSource(Ljava/lang/String;)V"/>
-		<method name="setDisplay(Landroid/view/SurfaceHolder;)V"/>
-		<method name="setDrmPropertyString(Ljava/lang/String;Ljava/lang/String;)V" since="26"/>
-		<method name="setLooping(Z)V"/>
-		<method name="setNextMediaPlayer(Landroid/media/MediaPlayer;)V" since="16"/>
-		<method name="setOnBufferingUpdateListener(Landroid/media/MediaPlayer$OnBufferingUpdateListener;)V"/>
-		<method name="setOnCompletionListener(Landroid/media/MediaPlayer$OnCompletionListener;)V"/>
-		<method name="setOnDrmConfigHelper(Landroid/media/MediaPlayer$OnDrmConfigHelper;)V" since="26"/>
-		<method name="setOnDrmInfoListener(Landroid/media/MediaPlayer$OnDrmInfoListener;)V" since="26"/>
-		<method name="setOnDrmInfoListener(Landroid/media/MediaPlayer$OnDrmInfoListener;Landroid/os/Handler;)V" since="26"/>
-		<method name="setOnDrmPreparedListener(Landroid/media/MediaPlayer$OnDrmPreparedListener;)V" since="26"/>
-		<method name="setOnDrmPreparedListener(Landroid/media/MediaPlayer$OnDrmPreparedListener;Landroid/os/Handler;)V" since="26"/>
-		<method name="setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V"/>
-		<method name="setOnInfoListener(Landroid/media/MediaPlayer$OnInfoListener;)V" since="3"/>
-		<method name="setOnMediaTimeDiscontinuityListener(Landroid/media/MediaPlayer$OnMediaTimeDiscontinuityListener;)V" since="28"/>
-		<method name="setOnMediaTimeDiscontinuityListener(Landroid/media/MediaPlayer$OnMediaTimeDiscontinuityListener;Landroid/os/Handler;)V" since="28"/>
-		<method name="setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V"/>
-		<method name="setOnSeekCompleteListener(Landroid/media/MediaPlayer$OnSeekCompleteListener;)V"/>
-		<method name="setOnSubtitleDataListener(Landroid/media/MediaPlayer$OnSubtitleDataListener;)V" since="28"/>
-		<method name="setOnSubtitleDataListener(Landroid/media/MediaPlayer$OnSubtitleDataListener;Landroid/os/Handler;)V" since="28"/>
-		<method name="setOnTimedMetaDataAvailableListener(Landroid/media/MediaPlayer$OnTimedMetaDataAvailableListener;)V" since="23"/>
-		<method name="setOnTimedTextListener(Landroid/media/MediaPlayer$OnTimedTextListener;)V" since="16"/>
-		<method name="setOnVideoSizeChangedListener(Landroid/media/MediaPlayer$OnVideoSizeChangedListener;)V" since="3"/>
-		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
-		<method name="setScreenOnWhilePlaying(Z)V"/>
-		<method name="setSurface(Landroid/view/Surface;)V" since="14"/>
-		<method name="setSyncParams(Landroid/media/SyncParams;)V" since="23"/>
-		<method name="setVideoScalingMode(I)V" since="16"/>
-		<method name="setVolume(FF)V"/>
-		<method name="setWakeMode(Landroid/content/Context;I)V"/>
-		<method name="start()V"/>
-		<method name="stop()V"/>
-		<field name="MEDIA_ERROR_IO" since="17"/>
-		<field name="MEDIA_ERROR_MALFORMED" since="17"/>
-		<field name="MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK" since="3"/>
-		<field name="MEDIA_ERROR_SERVER_DIED"/>
-		<field name="MEDIA_ERROR_TIMED_OUT" since="17"/>
-		<field name="MEDIA_ERROR_UNKNOWN"/>
-		<field name="MEDIA_ERROR_UNSUPPORTED" since="17"/>
-		<field name="MEDIA_INFO_AUDIO_NOT_PLAYING" since="26"/>
-		<field name="MEDIA_INFO_BAD_INTERLEAVING" since="3"/>
-		<field name="MEDIA_INFO_BUFFERING_END" since="9"/>
-		<field name="MEDIA_INFO_BUFFERING_START" since="9"/>
-		<field name="MEDIA_INFO_METADATA_UPDATE" since="5"/>
-		<field name="MEDIA_INFO_NOT_SEEKABLE" since="3"/>
-		<field name="MEDIA_INFO_STARTED_AS_NEXT" since="28"/>
-		<field name="MEDIA_INFO_SUBTITLE_TIMED_OUT" since="19"/>
-		<field name="MEDIA_INFO_UNKNOWN" since="3"/>
-		<field name="MEDIA_INFO_UNSUPPORTED_SUBTITLE" since="19"/>
-		<field name="MEDIA_INFO_VIDEO_NOT_PLAYING" since="26"/>
-		<field name="MEDIA_INFO_VIDEO_RENDERING_START" since="17"/>
-		<field name="MEDIA_INFO_VIDEO_TRACK_LAGGING" since="3"/>
-		<field name="MEDIA_MIMETYPE_TEXT_SUBRIP" since="16" deprecated="28"/>
-		<field name="PREPARE_DRM_STATUS_PREPARATION_ERROR" since="26"/>
-		<field name="PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR" since="26"/>
-		<field name="PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR" since="26"/>
-		<field name="PREPARE_DRM_STATUS_SUCCESS" since="26"/>
-		<field name="SEEK_CLOSEST" since="26"/>
-		<field name="SEEK_CLOSEST_SYNC" since="26"/>
-		<field name="SEEK_NEXT_SYNC" since="26"/>
-		<field name="SEEK_PREVIOUS_SYNC" since="26"/>
-		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT" since="16"/>
-		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING" since="16"/>
-	</class>
-	<class name="android/media/MediaPlayer$DrmInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getPssh()Ljava/util/Map;"/>
-		<method name="getSupportedSchemes()[Ljava/util/UUID;"/>
-	</class>
-	<class name="android/media/MediaPlayer$MetricsConstants" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CODEC_AUDIO"/>
-		<field name="CODEC_VIDEO"/>
-		<field name="DURATION"/>
-		<field name="ERRORS"/>
-		<field name="ERROR_CODE"/>
-		<field name="FRAMES"/>
-		<field name="FRAMES_DROPPED"/>
-		<field name="HEIGHT"/>
-		<field name="MIME_TYPE_AUDIO"/>
-		<field name="MIME_TYPE_VIDEO"/>
-		<field name="PLAYING"/>
-		<field name="WIDTH"/>
-	</class>
-	<class name="android/media/MediaPlayer$NoDrmSchemeException" since="26">
-		<extends name="android/media/MediaDrmException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnBufferingUpdateListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onBufferingUpdate(Landroid/media/MediaPlayer;I)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnCompletionListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onCompletion(Landroid/media/MediaPlayer;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnDrmConfigHelper" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="onDrmConfig(Landroid/media/MediaPlayer;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnDrmInfoListener" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="onDrmInfo(Landroid/media/MediaPlayer;Landroid/media/MediaPlayer$DrmInfo;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnDrmPreparedListener" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="onDrmPrepared(Landroid/media/MediaPlayer;I)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnErrorListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onError(Landroid/media/MediaPlayer;II)Z"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnInfoListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onInfo(Landroid/media/MediaPlayer;II)Z"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnMediaTimeDiscontinuityListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onMediaTimeDiscontinuity(Landroid/media/MediaPlayer;Landroid/media/MediaTimestamp;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnPreparedListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onPrepared(Landroid/media/MediaPlayer;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnSeekCompleteListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onSeekComplete(Landroid/media/MediaPlayer;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnSubtitleDataListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onSubtitleData(Landroid/media/MediaPlayer;Landroid/media/SubtitleData;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnTimedMetaDataAvailableListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onTimedMetaDataAvailable(Landroid/media/MediaPlayer;Landroid/media/TimedMetaData;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnTimedTextListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onTimedText(Landroid/media/MediaPlayer;Landroid/media/TimedText;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$OnVideoSizeChangedListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onVideoSizeChanged(Landroid/media/MediaPlayer;II)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$ProvisioningNetworkErrorException" since="26">
-		<extends name="android/media/MediaDrmException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$ProvisioningServerErrorException" since="26">
-		<extends name="android/media/MediaDrmException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/MediaPlayer$TrackInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getFormat()Landroid/media/MediaFormat;" since="19"/>
-		<method name="getLanguage()Ljava/lang/String;"/>
-		<method name="getTrackType()I"/>
-		<field name="MEDIA_TRACK_TYPE_AUDIO"/>
-		<field name="MEDIA_TRACK_TYPE_METADATA" since="23"/>
-		<field name="MEDIA_TRACK_TYPE_SUBTITLE" since="21"/>
-		<field name="MEDIA_TRACK_TYPE_TIMEDTEXT"/>
-		<field name="MEDIA_TRACK_TYPE_UNKNOWN"/>
-		<field name="MEDIA_TRACK_TYPE_VIDEO"/>
-	</class>
-	<class name="android/media/MediaRecorder" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/AudioRouting" since="28"/>
-		<method name="&lt;init>()V"/>
-		<method name="getActiveMicrophones()Ljava/util/List;" since="28"/>
-		<method name="getAudioSourceMax()I" since="4"/>
-		<method name="getMaxAmplitude()I"/>
-		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
-		<method name="getSurface()Landroid/view/Surface;" since="21"/>
-		<method name="pause()V" since="24"/>
-		<method name="prepare()V"/>
-		<method name="release()V"/>
-		<method name="reset()V"/>
-		<method name="resume()V" since="24"/>
-		<method name="setAudioChannels(I)V" since="8"/>
-		<method name="setAudioEncoder(I)V"/>
-		<method name="setAudioEncodingBitRate(I)V" since="8"/>
-		<method name="setAudioSamplingRate(I)V" since="8"/>
-		<method name="setAudioSource(I)V"/>
-		<method name="setAuxiliaryOutputFile(Ljava/io/FileDescriptor;)V" since="11" removed="16"/>
-		<method name="setAuxiliaryOutputFile(Ljava/lang/String;)V" since="11" removed="16"/>
-		<method name="setCamera(Landroid/hardware/Camera;)V" since="3" deprecated="21"/>
-		<method name="setCaptureRate(D)V" since="11"/>
-		<method name="setInputSurface(Landroid/view/Surface;)V" since="23"/>
-		<method name="setLocation(FF)V" since="14"/>
-		<method name="setMaxDuration(I)V" since="3"/>
-		<method name="setMaxFileSize(J)V" since="3"/>
-		<method name="setNextOutputFile(Ljava/io/File;)V" since="26"/>
-		<method name="setNextOutputFile(Ljava/io/FileDescriptor;)V" since="26"/>
-		<method name="setOnErrorListener(Landroid/media/MediaRecorder$OnErrorListener;)V" since="3"/>
-		<method name="setOnInfoListener(Landroid/media/MediaRecorder$OnInfoListener;)V" since="3"/>
-		<method name="setOrientationHint(I)V" since="9"/>
-		<method name="setOutputFile(Ljava/io/File;)V" since="26"/>
-		<method name="setOutputFile(Ljava/io/FileDescriptor;)V" since="3"/>
-		<method name="setOutputFile(Ljava/lang/String;)V"/>
-		<method name="setOutputFormat(I)V"/>
-		<method name="setPreviewDisplay(Landroid/view/Surface;)V"/>
-		<method name="setProfile(Landroid/media/CamcorderProfile;)V" since="8"/>
-		<method name="setVideoEncoder(I)V" since="3"/>
-		<method name="setVideoEncodingBitRate(I)V" since="8"/>
-		<method name="setVideoEncodingProfileLevel(II)V" since="26"/>
-		<method name="setVideoFrameRate(I)V" since="3"/>
-		<method name="setVideoSize(II)V" since="3"/>
-		<method name="setVideoSource(I)V" since="3"/>
-		<method name="start()V"/>
-		<method name="stop()V"/>
-		<field name="MEDIA_ERROR_SERVER_DIED" since="17"/>
-		<field name="MEDIA_RECORDER_ERROR_UNKNOWN" since="3"/>
-		<field name="MEDIA_RECORDER_INFO_MAX_DURATION_REACHED" since="3"/>
-		<field name="MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING" since="26"/>
-		<field name="MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED" since="3"/>
-		<field name="MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED" since="26"/>
-		<field name="MEDIA_RECORDER_INFO_UNKNOWN" since="3"/>
-	</class>
-	<class name="android/media/MediaRecorder$AudioEncoder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
-		<field name="AAC" since="10"/>
-		<field name="AAC_ELD" since="16"/>
-		<field name="AMR_NB"/>
-		<field name="AMR_WB" since="10"/>
-		<field name="DEFAULT"/>
-		<field name="HE_AAC" since="16"/>
-		<field name="VORBIS" since="21"/>
-	</class>
-	<class name="android/media/MediaRecorder$AudioSource" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
-		<field name="CAMCORDER" since="7"/>
-		<field name="DEFAULT"/>
-		<field name="MIC"/>
-		<field name="REMOTE_SUBMIX" since="19"/>
-		<field name="UNPROCESSED" since="24"/>
-		<field name="VOICE_CALL" since="4"/>
-		<field name="VOICE_COMMUNICATION" since="11"/>
-		<field name="VOICE_DOWNLINK" since="4"/>
-		<field name="VOICE_RECOGNITION" since="7"/>
-		<field name="VOICE_UPLINK" since="4"/>
-	</class>
-	<class name="android/media/MediaRecorder$MetricsConstants" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUDIO_BITRATE"/>
-		<field name="AUDIO_CHANNELS"/>
-		<field name="AUDIO_SAMPLERATE"/>
-		<field name="AUDIO_TIMESCALE"/>
-		<field name="CAPTURE_FPS"/>
-		<field name="CAPTURE_FPS_ENABLE"/>
-		<field name="FRAMERATE"/>
-		<field name="HEIGHT"/>
-		<field name="MOVIE_TIMESCALE"/>
-		<field name="ROTATION"/>
-		<field name="VIDEO_BITRATE"/>
-		<field name="VIDEO_IFRAME_INTERVAL"/>
-		<field name="VIDEO_LEVEL"/>
-		<field name="VIDEO_PROFILE"/>
-		<field name="VIDEO_TIMESCALE"/>
-		<field name="WIDTH"/>
-	</class>
-	<class name="android/media/MediaRecorder$OnErrorListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onError(Landroid/media/MediaRecorder;II)V"/>
-	</class>
-	<class name="android/media/MediaRecorder$OnInfoListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onInfo(Landroid/media/MediaRecorder;II)V"/>
-	</class>
-	<class name="android/media/MediaRecorder$OutputFormat" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
-		<field name="AAC_ADTS" since="16"/>
-		<field name="AMR_NB" since="10"/>
-		<field name="AMR_WB" since="10"/>
-		<field name="DEFAULT"/>
-		<field name="MPEG_2_TS" since="26"/>
-		<field name="MPEG_4"/>
-		<field name="RAW_AMR" since="3" deprecated="16"/>
-		<field name="THREE_GPP"/>
-		<field name="WEBM" since="21"/>
-	</class>
-	<class name="android/media/MediaRecorder$VideoEncoder" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
-		<field name="DEFAULT"/>
-		<field name="H263"/>
-		<field name="H264"/>
-		<field name="HEVC" since="24"/>
-		<field name="MPEG_4_SP"/>
-		<field name="VP8" since="21"/>
-	</class>
-	<class name="android/media/MediaRecorder$VideoSource" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/MediaRecorder;)V"/>
-		<field name="CAMERA"/>
-		<field name="DEFAULT"/>
-		<field name="SURFACE" since="21"/>
-	</class>
-	<class name="android/media/MediaRouter" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addCallback(ILandroid/media/MediaRouter$Callback;)V"/>
-		<method name="addCallback(ILandroid/media/MediaRouter$Callback;I)V" since="18"/>
-		<method name="addUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V"/>
-		<method name="clearUserRoutes()V"/>
-		<method name="createRouteCategory(IZ)Landroid/media/MediaRouter$RouteCategory;"/>
-		<method name="createRouteCategory(Ljava/lang/CharSequence;Z)Landroid/media/MediaRouter$RouteCategory;"/>
-		<method name="createUserRoute(Landroid/media/MediaRouter$RouteCategory;)Landroid/media/MediaRouter$UserRouteInfo;"/>
-		<method name="getCategoryAt(I)Landroid/media/MediaRouter$RouteCategory;"/>
-		<method name="getCategoryCount()I"/>
-		<method name="getDefaultRoute()Landroid/media/MediaRouter$RouteInfo;" since="18"/>
-		<method name="getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;"/>
-		<method name="getRouteCount()I"/>
-		<method name="getSelectedRoute(I)Landroid/media/MediaRouter$RouteInfo;"/>
-		<method name="removeCallback(Landroid/media/MediaRouter$Callback;)V"/>
-		<method name="removeUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V"/>
-		<method name="selectRoute(ILandroid/media/MediaRouter$RouteInfo;)V"/>
-		<field name="CALLBACK_FLAG_PERFORM_ACTIVE_SCAN" since="18"/>
-		<field name="CALLBACK_FLAG_UNFILTERED_EVENTS" since="18"/>
-		<field name="ROUTE_TYPE_LIVE_AUDIO"/>
-		<field name="ROUTE_TYPE_LIVE_VIDEO" since="17"/>
-		<field name="ROUTE_TYPE_USER"/>
-	</class>
-	<class name="android/media/MediaRouter$Callback" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onRouteAdded(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
-		<method name="onRouteChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
-		<method name="onRouteGrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;I)V"/>
-		<method name="onRoutePresentationDisplayChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V" since="17"/>
-		<method name="onRouteRemoved(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
-		<method name="onRouteSelected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V"/>
-		<method name="onRouteUngrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;)V"/>
-		<method name="onRouteUnselected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V"/>
-		<method name="onRouteVolumeChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
-	</class>
-	<class name="android/media/MediaRouter$RouteCategory" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;IZ)V" since="29"/>
-		<method name="getName()Ljava/lang/CharSequence;"/>
-		<method name="getName(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
-		<method name="getRoutes(Ljava/util/List;)Ljava/util/List;"/>
-		<method name="getSupportedTypes()I"/>
-		<method name="isGroupable()Z"/>
-	</class>
-	<class name="android/media/MediaRouter$RouteGroup" since="16">
-		<extends name="android/media/MediaRouter$RouteInfo"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/MediaRouter$RouteCategory;)V" since="29"/>
-		<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;)V"/>
-		<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;I)V"/>
-		<method name="getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;"/>
-		<method name="getRouteCount()I"/>
-		<method name="removeRoute(I)V"/>
-		<method name="removeRoute(Landroid/media/MediaRouter$RouteInfo;)V"/>
-		<method name="setIconDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setIconResource(I)V"/>
-	</class>
-	<class name="android/media/MediaRouter$RouteInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/MediaRouter$RouteCategory;)V" since="29"/>
-		<method name="getCategory()Landroid/media/MediaRouter$RouteCategory;"/>
-		<method name="getDescription()Ljava/lang/CharSequence;" since="18"/>
-		<method name="getDeviceType()I" since="24"/>
-		<method name="getGroup()Landroid/media/MediaRouter$RouteGroup;"/>
-		<method name="getIconDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getName()Ljava/lang/CharSequence;"/>
-		<method name="getName(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
-		<method name="getPlaybackStream()I"/>
-		<method name="getPlaybackType()I"/>
-		<method name="getPresentationDisplay()Landroid/view/Display;" since="17"/>
-		<method name="getStatus()Ljava/lang/CharSequence;"/>
-		<method name="getSupportedTypes()I"/>
-		<method name="getTag()Ljava/lang/Object;"/>
-		<method name="getVolume()I"/>
-		<method name="getVolumeHandling()I"/>
-		<method name="getVolumeMax()I"/>
-		<method name="isConnecting()Z" since="18"/>
-		<method name="isEnabled()Z" since="17"/>
-		<method name="requestSetVolume(I)V"/>
-		<method name="requestUpdateVolume(I)V"/>
-		<method name="setTag(Ljava/lang/Object;)V"/>
-		<field name="DEVICE_TYPE_BLUETOOTH" since="24"/>
-		<field name="DEVICE_TYPE_SPEAKER" since="24"/>
-		<field name="DEVICE_TYPE_TV" since="24"/>
-		<field name="DEVICE_TYPE_UNKNOWN" since="24"/>
-		<field name="PLAYBACK_TYPE_LOCAL"/>
-		<field name="PLAYBACK_TYPE_REMOTE"/>
-		<field name="PLAYBACK_VOLUME_FIXED"/>
-		<field name="PLAYBACK_VOLUME_VARIABLE"/>
-	</class>
-	<class name="android/media/MediaRouter$SimpleCallback" since="16">
-		<extends name="android/media/MediaRouter$Callback"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/media/MediaRouter$UserRouteInfo" since="16">
-		<extends name="android/media/MediaRouter$RouteInfo"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/MediaRouter$RouteCategory;)V" since="29"/>
-		<method name="getRemoteControlClient()Landroid/media/RemoteControlClient;"/>
-		<method name="setDescription(Ljava/lang/CharSequence;)V" since="18"/>
-		<method name="setIconDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setIconResource(I)V"/>
-		<method name="setName(I)V"/>
-		<method name="setName(Ljava/lang/CharSequence;)V"/>
-		<method name="setPlaybackStream(I)V"/>
-		<method name="setPlaybackType(I)V"/>
-		<method name="setRemoteControlClient(Landroid/media/RemoteControlClient;)V"/>
-		<method name="setStatus(Ljava/lang/CharSequence;)V"/>
-		<method name="setVolume(I)V"/>
-		<method name="setVolumeCallback(Landroid/media/MediaRouter$VolumeCallback;)V"/>
-		<method name="setVolumeHandling(I)V"/>
-		<method name="setVolumeMax(I)V"/>
-	</class>
-	<class name="android/media/MediaRouter$VolumeCallback" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onVolumeSetRequest(Landroid/media/MediaRouter$RouteInfo;I)V"/>
-		<method name="onVolumeUpdateRequest(Landroid/media/MediaRouter$RouteInfo;I)V"/>
-	</class>
-	<class name="android/media/MediaScannerConnection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/ServiceConnection"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/media/MediaScannerConnection$MediaScannerConnectionClient;)V"/>
-		<method name="connect()V"/>
-		<method name="disconnect()V"/>
-		<method name="isConnected()Z"/>
-		<method name="scanFile(Landroid/content/Context;[Ljava/lang/String;[Ljava/lang/String;Landroid/media/MediaScannerConnection$OnScanCompletedListener;)V" since="8"/>
-		<method name="scanFile(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/MediaScannerConnection$MediaScannerConnectionClient" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/MediaScannerConnection$OnScanCompletedListener" since="8"/>
-		<method name="onMediaScannerConnected()V"/>
-		<method name="onScanCompleted(Ljava/lang/String;Landroid/net/Uri;)V"/>
-	</class>
-	<class name="android/media/MediaScannerConnection$OnScanCompletedListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="onScanCompleted(Ljava/lang/String;Landroid/net/Uri;)V"/>
-	</class>
-	<class name="android/media/MediaSync" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createInputSurface()Landroid/view/Surface;"/>
-		<method name="flush()V"/>
-		<method name="getPlaybackParams()Landroid/media/PlaybackParams;"/>
-		<method name="getSyncParams()Landroid/media/SyncParams;"/>
-		<method name="getTimestamp()Landroid/media/MediaTimestamp;"/>
-		<method name="queueAudio(Ljava/nio/ByteBuffer;IJ)V"/>
-		<method name="release()V"/>
-		<method name="setAudioTrack(Landroid/media/AudioTrack;)V"/>
-		<method name="setCallback(Landroid/media/MediaSync$Callback;Landroid/os/Handler;)V"/>
-		<method name="setOnErrorListener(Landroid/media/MediaSync$OnErrorListener;Landroid/os/Handler;)V"/>
-		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V"/>
-		<method name="setSurface(Landroid/view/Surface;)V"/>
-		<method name="setSyncParams(Landroid/media/SyncParams;)V"/>
-		<field name="MEDIASYNC_ERROR_AUDIOTRACK_FAIL"/>
-		<field name="MEDIASYNC_ERROR_SURFACE_FAIL"/>
-	</class>
-	<class name="android/media/MediaSync$Callback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAudioBufferConsumed(Landroid/media/MediaSync;Ljava/nio/ByteBuffer;I)V"/>
-	</class>
-	<class name="android/media/MediaSync$OnErrorListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onError(Landroid/media/MediaSync;II)V"/>
-	</class>
-	<class name="android/media/MediaSyncEvent" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="createEvent(I)Landroid/media/MediaSyncEvent;"/>
-		<method name="getAudioSessionId()I"/>
-		<method name="getType()I"/>
-		<method name="setAudioSessionId(I)Landroid/media/MediaSyncEvent;"/>
-		<field name="SYNC_EVENT_NONE"/>
-		<field name="SYNC_EVENT_PRESENTATION_COMPLETE"/>
-	</class>
-	<class name="android/media/MediaTimestamp" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAnchorMediaTimeUs()J"/>
-		<method name="getAnchorSytemNanoTime()J"/>
-		<method name="getMediaClockRate()F"/>
-		<field name="TIMESTAMP_UNKNOWN" since="28"/>
-	</class>
-	<class name="android/media/MicrophoneInfo" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;IIILandroid/media/MicrophoneInfo$Coordinate3F;Landroid/media/MicrophoneInfo$Coordinate3F;Ljava/util/List;Ljava/util/List;FFFI)V" since="29"/>
-		<method name="getAddress()Ljava/lang/String;"/>
-		<method name="getChannelMapping()Ljava/util/List;"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getDirectionality()I"/>
-		<method name="getFrequencyResponse()Ljava/util/List;"/>
-		<method name="getGroup()I"/>
-		<method name="getId()I"/>
-		<method name="getIndexInTheGroup()I"/>
-		<method name="getLocation()I"/>
-		<method name="getMaxSpl()F"/>
-		<method name="getMinSpl()F"/>
-		<method name="getOrientation()Landroid/media/MicrophoneInfo$Coordinate3F;"/>
-		<method name="getPosition()Landroid/media/MicrophoneInfo$Coordinate3F;"/>
-		<method name="getSensitivity()F"/>
-		<method name="getType()I"/>
-		<field name="CHANNEL_MAPPING_DIRECT"/>
-		<field name="CHANNEL_MAPPING_PROCESSED"/>
-		<field name="DIRECTIONALITY_BI_DIRECTIONAL"/>
-		<field name="DIRECTIONALITY_CARDIOID"/>
-		<field name="DIRECTIONALITY_HYPER_CARDIOID"/>
-		<field name="DIRECTIONALITY_OMNI"/>
-		<field name="DIRECTIONALITY_SUPER_CARDIOID"/>
-		<field name="DIRECTIONALITY_UNKNOWN"/>
-		<field name="GROUP_UNKNOWN"/>
-		<field name="INDEX_IN_THE_GROUP_UNKNOWN"/>
-		<field name="LOCATION_MAINBODY"/>
-		<field name="LOCATION_MAINBODY_MOVABLE"/>
-		<field name="LOCATION_PERIPHERAL"/>
-		<field name="LOCATION_UNKNOWN"/>
-		<field name="ORIENTATION_UNKNOWN"/>
-		<field name="POSITION_UNKNOWN"/>
-		<field name="SENSITIVITY_UNKNOWN"/>
-		<field name="SPL_UNKNOWN"/>
-	</class>
-	<class name="android/media/MicrophoneInfo$Coordinate3F" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(FFF)V" since="29"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/media/NotProvisionedException" since="18">
-		<extends name="android/media/MediaDrmException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/PlaybackParams" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="allowDefaults()Landroid/media/PlaybackParams;"/>
-		<method name="getAudioFallbackMode()I"/>
-		<method name="getPitch()F"/>
-		<method name="getSpeed()F"/>
-		<method name="setAudioFallbackMode(I)Landroid/media/PlaybackParams;"/>
-		<method name="setPitch(F)Landroid/media/PlaybackParams;"/>
-		<method name="setSpeed(F)Landroid/media/PlaybackParams;"/>
-		<field name="AUDIO_FALLBACK_MODE_DEFAULT"/>
-		<field name="AUDIO_FALLBACK_MODE_FAIL"/>
-		<field name="AUDIO_FALLBACK_MODE_MUTE"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/media/Rating" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IF)V" since="29"/>
-		<method name="getPercentRating()F"/>
-		<method name="getRatingStyle()I"/>
-		<method name="getStarRating()F"/>
-		<method name="hasHeart()Z"/>
-		<method name="isRated()Z"/>
-		<method name="isThumbUp()Z"/>
-		<method name="newHeartRating(Z)Landroid/media/Rating;"/>
-		<method name="newPercentageRating(F)Landroid/media/Rating;"/>
-		<method name="newStarRating(IF)Landroid/media/Rating;"/>
-		<method name="newThumbRating(Z)Landroid/media/Rating;"/>
-		<method name="newUnratedRating(I)Landroid/media/Rating;"/>
-		<field name="CREATOR"/>
-		<field name="RATING_3_STARS"/>
-		<field name="RATING_4_STARS"/>
-		<field name="RATING_5_STARS"/>
-		<field name="RATING_HEART"/>
-		<field name="RATING_NONE" since="21"/>
-		<field name="RATING_PERCENTAGE"/>
-		<field name="RATING_THUMB_UP_DOWN"/>
-	</class>
-	<class name="android/media/RemoteControlClient" since="14" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/app/PendingIntent;)V"/>
-		<method name="&lt;init>(Landroid/app/PendingIntent;Landroid/os/Looper;)V"/>
-		<method name="editMetadata(Z)Landroid/media/RemoteControlClient$MetadataEditor;"/>
-		<method name="getMediaSession()Landroid/media/session/MediaSession;" since="21"/>
-		<method name="setMetadataUpdateListener(Landroid/media/RemoteControlClient$OnMetadataUpdateListener;)V" since="19"/>
-		<method name="setOnGetPlaybackPositionListener(Landroid/media/RemoteControlClient$OnGetPlaybackPositionListener;)V" since="18"/>
-		<method name="setPlaybackPositionUpdateListener(Landroid/media/RemoteControlClient$OnPlaybackPositionUpdateListener;)V" since="18"/>
-		<method name="setPlaybackState(I)V"/>
-		<method name="setPlaybackState(IJF)V" since="18"/>
-		<method name="setTransportControlFlags(I)V"/>
-		<field name="FLAG_KEY_MEDIA_FAST_FORWARD"/>
-		<field name="FLAG_KEY_MEDIA_NEXT"/>
-		<field name="FLAG_KEY_MEDIA_PAUSE"/>
-		<field name="FLAG_KEY_MEDIA_PLAY"/>
-		<field name="FLAG_KEY_MEDIA_PLAY_PAUSE"/>
-		<field name="FLAG_KEY_MEDIA_POSITION_UPDATE" since="18"/>
-		<field name="FLAG_KEY_MEDIA_PREVIOUS"/>
-		<field name="FLAG_KEY_MEDIA_RATING" since="19"/>
-		<field name="FLAG_KEY_MEDIA_REWIND"/>
-		<field name="FLAG_KEY_MEDIA_STOP"/>
-		<field name="PLAYSTATE_BUFFERING"/>
-		<field name="PLAYSTATE_ERROR"/>
-		<field name="PLAYSTATE_FAST_FORWARDING"/>
-		<field name="PLAYSTATE_PAUSED"/>
-		<field name="PLAYSTATE_PLAYING"/>
-		<field name="PLAYSTATE_REWINDING"/>
-		<field name="PLAYSTATE_SKIPPING_BACKWARDS"/>
-		<field name="PLAYSTATE_SKIPPING_FORWARDS"/>
-		<field name="PLAYSTATE_STOPPED"/>
-	</class>
-	<class name="android/media/RemoteControlClient$MetadataEditor" since="14" deprecated="21">
-		<extends name="android/media/MediaMetadataEditor" since="19"/>
-		<extends name="java/lang/Object" removed="19"/>
-		<method name="&lt;init>(Landroid/media/RemoteControlClient;)V"/>
-		<method name="apply()V"/>
-		<method name="clear()V"/>
-		<method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/RemoteControlClient$MetadataEditor;"/>
-		<method name="putLong(IJ)Landroid/media/RemoteControlClient$MetadataEditor;"/>
-		<method name="putObject(ILjava/lang/Object;)Landroid/media/RemoteControlClient$MetadataEditor;" since="22"/>
-		<method name="putString(ILjava/lang/String;)Landroid/media/RemoteControlClient$MetadataEditor;"/>
-		<field name="BITMAP_KEY_ARTWORK"/>
-	</class>
-	<class name="android/media/RemoteControlClient$OnGetPlaybackPositionListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onGetPlaybackPosition()J"/>
-	</class>
-	<class name="android/media/RemoteControlClient$OnMetadataUpdateListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onMetadataUpdate(ILjava/lang/Object;)V"/>
-	</class>
-	<class name="android/media/RemoteControlClient$OnPlaybackPositionUpdateListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onPlaybackPositionUpdate(J)V"/>
-	</class>
-	<class name="android/media/RemoteController" since="19" deprecated="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;Landroid/os/Looper;)V"/>
-		<method name="clearArtworkConfiguration()Z"/>
-		<method name="editMetadata()Landroid/media/RemoteController$MetadataEditor;"/>
-		<method name="getEstimatedMediaPosition()J"/>
-		<method name="seekTo(J)Z"/>
-		<method name="sendMediaKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="setArtworkConfiguration(II)Z"/>
-		<method name="setSynchronizationMode(I)Z"/>
-		<field name="POSITION_SYNCHRONIZATION_CHECK"/>
-		<field name="POSITION_SYNCHRONIZATION_NONE"/>
-	</class>
-	<class name="android/media/RemoteController$MetadataEditor" since="19">
-		<extends name="android/media/MediaMetadataEditor"/>
-		<method name="&lt;init>(Landroid/media/RemoteController;)V"/>
-	</class>
-	<class name="android/media/RemoteController$OnClientUpdateListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onClientChange(Z)V"/>
-		<method name="onClientMetadataUpdate(Landroid/media/RemoteController$MetadataEditor;)V"/>
-		<method name="onClientPlaybackStateUpdate(I)V"/>
-		<method name="onClientPlaybackStateUpdate(IJJF)V"/>
-		<method name="onClientTransportControlUpdate(I)V"/>
-	</class>
-	<class name="android/media/ResourceBusyException" since="19">
-		<extends name="android/media/MediaDrmException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/Ringtone" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Z)V" since="29"/>
-		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" since="21"/>
-		<method name="getStreamType()I" deprecated="21"/>
-		<method name="getTitle(Landroid/content/Context;)Ljava/lang/String;"/>
-		<method name="getVolume()F" since="28"/>
-		<method name="isLooping()Z" since="28"/>
-		<method name="isPlaying()Z"/>
-		<method name="play()V"/>
-		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="21"/>
-		<method name="setLooping(Z)V" since="28"/>
-		<method name="setStreamType(I)V" deprecated="21"/>
-		<method name="setVolume(F)V" since="28"/>
-		<method name="stop()V"/>
-	</class>
-	<class name="android/media/RingtoneManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/app/Activity;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="getActualDefaultRingtoneUri(Landroid/content/Context;I)Landroid/net/Uri;"/>
-		<method name="getCursor()Landroid/database/Cursor;"/>
-		<method name="getDefaultType(Landroid/net/Uri;)I"/>
-		<method name="getDefaultUri(I)Landroid/net/Uri;"/>
-		<method name="getIncludeDrm()Z" deprecated="19"/>
-		<method name="getRingtone(I)Landroid/media/Ringtone;"/>
-		<method name="getRingtone(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/Ringtone;"/>
-		<method name="getRingtonePosition(Landroid/net/Uri;)I"/>
-		<method name="getRingtoneUri(I)Landroid/net/Uri;"/>
-		<method name="getStopPreviousRingtone()Z"/>
-		<method name="getValidRingtoneUri(Landroid/content/Context;)Landroid/net/Uri;"/>
-		<method name="inferStreamType()I" since="3"/>
-		<method name="isDefault(Landroid/net/Uri;)Z"/>
-		<method name="setActualDefaultRingtoneUri(Landroid/content/Context;ILandroid/net/Uri;)V"/>
-		<method name="setIncludeDrm(Z)V" deprecated="19"/>
-		<method name="setStopPreviousRingtone(Z)V"/>
-		<method name="setType(I)V"/>
-		<method name="stopPreviousRingtone()V"/>
-		<field name="ACTION_RINGTONE_PICKER"/>
-		<field name="EXTRA_RINGTONE_DEFAULT_URI"/>
-		<field name="EXTRA_RINGTONE_EXISTING_URI"/>
-		<field name="EXTRA_RINGTONE_INCLUDE_DRM" deprecated="19"/>
-		<field name="EXTRA_RINGTONE_PICKED_URI"/>
-		<field name="EXTRA_RINGTONE_SHOW_DEFAULT"/>
-		<field name="EXTRA_RINGTONE_SHOW_SILENT"/>
-		<field name="EXTRA_RINGTONE_TITLE"/>
-		<field name="EXTRA_RINGTONE_TYPE"/>
-		<field name="ID_COLUMN_INDEX"/>
-		<field name="TITLE_COLUMN_INDEX"/>
-		<field name="TYPE_ALARM"/>
-		<field name="TYPE_ALL"/>
-		<field name="TYPE_NOTIFICATION"/>
-		<field name="TYPE_RINGTONE"/>
-		<field name="URI_COLUMN_INDEX"/>
-	</class>
-	<class name="android/media/SoundPool" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(III)V" deprecated="21"/>
-		<method name="autoPause()V" since="8"/>
-		<method name="autoResume()V" since="8"/>
-		<method name="load(Landroid/content/Context;II)I"/>
-		<method name="load(Landroid/content/res/AssetFileDescriptor;I)I" since="3"/>
-		<method name="load(Ljava/io/FileDescriptor;JJI)I" since="3"/>
-		<method name="load(Ljava/lang/String;I)I"/>
-		<method name="pause(I)V"/>
-		<method name="play(IFFIIF)I"/>
-		<method name="release()V"/>
-		<method name="resume(I)V"/>
-		<method name="setLoop(II)V"/>
-		<method name="setOnLoadCompleteListener(Landroid/media/SoundPool$OnLoadCompleteListener;)V" since="8"/>
-		<method name="setPriority(II)V"/>
-		<method name="setRate(IF)V"/>
-		<method name="setVolume(IFF)V"/>
-		<method name="stop(I)V"/>
-		<method name="unload(I)Z"/>
-	</class>
-	<class name="android/media/SoundPool$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/media/SoundPool;"/>
-		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/SoundPool$Builder;"/>
-		<method name="setMaxStreams(I)Landroid/media/SoundPool$Builder;"/>
-	</class>
-	<class name="android/media/SoundPool$OnLoadCompleteListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="onLoadComplete(Landroid/media/SoundPool;II)V"/>
-	</class>
-	<class name="android/media/SubtitleData" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getData()[B"/>
-		<method name="getDurationUs()J"/>
-		<method name="getStartTimeUs()J"/>
-		<method name="getTrackIndex()I"/>
-	</class>
-	<class name="android/media/SyncParams" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="allowDefaults()Landroid/media/SyncParams;"/>
-		<method name="getAudioAdjustMode()I"/>
-		<method name="getFrameRate()F"/>
-		<method name="getSyncSource()I"/>
-		<method name="getTolerance()F"/>
-		<method name="setAudioAdjustMode(I)Landroid/media/SyncParams;"/>
-		<method name="setFrameRate(F)Landroid/media/SyncParams;"/>
-		<method name="setSyncSource(I)Landroid/media/SyncParams;"/>
-		<method name="setTolerance(F)Landroid/media/SyncParams;"/>
-		<field name="AUDIO_ADJUST_MODE_DEFAULT"/>
-		<field name="AUDIO_ADJUST_MODE_RESAMPLE"/>
-		<field name="AUDIO_ADJUST_MODE_STRETCH"/>
-		<field name="SYNC_SOURCE_AUDIO"/>
-		<field name="SYNC_SOURCE_DEFAULT"/>
-		<field name="SYNC_SOURCE_SYSTEM_CLOCK"/>
-		<field name="SYNC_SOURCE_VSYNC"/>
-	</class>
-	<class name="android/media/ThumbnailUtils" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createVideoThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;"/>
-		<method name="extractThumbnail(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;"/>
-		<method name="extractThumbnail(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;"/>
-		<field name="OPTIONS_RECYCLE_INPUT"/>
-	</class>
-	<class name="android/media/TimedMetaData" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getMetaData()[B"/>
-		<method name="getTimestamp()J"/>
-	</class>
-	<class name="android/media/TimedText" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getBounds()Landroid/graphics/Rect;"/>
-		<method name="getText()Ljava/lang/String;"/>
-	</class>
-	<class name="android/media/ToneGenerator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getAudioSessionId()I" since="16"/>
-		<method name="release()V"/>
-		<method name="startTone(I)Z"/>
-		<method name="startTone(II)Z" since="5"/>
-		<method name="stopTone()V"/>
-		<field name="MAX_VOLUME"/>
-		<field name="MIN_VOLUME"/>
-		<field name="TONE_CDMA_ABBR_ALERT" since="4"/>
-		<field name="TONE_CDMA_ABBR_INTERCEPT" since="4"/>
-		<field name="TONE_CDMA_ABBR_REORDER" since="4"/>
-		<field name="TONE_CDMA_ALERT_AUTOREDIAL_LITE" since="4"/>
-		<field name="TONE_CDMA_ALERT_CALL_GUARD" since="4"/>
-		<field name="TONE_CDMA_ALERT_INCALL_LITE" since="4"/>
-		<field name="TONE_CDMA_ALERT_NETWORK_LITE" since="4"/>
-		<field name="TONE_CDMA_ANSWER" since="4"/>
-		<field name="TONE_CDMA_CALLDROP_LITE" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT3" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT5" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT6" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT7" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING" since="4"/>
-		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI" since="4"/>
-		<field name="TONE_CDMA_CONFIRM" since="4"/>
-		<field name="TONE_CDMA_DIAL_TONE_LITE" since="4"/>
-		<field name="TONE_CDMA_EMERGENCY_RINGBACK" since="4"/>
-		<field name="TONE_CDMA_HIGH_L" since="4"/>
-		<field name="TONE_CDMA_HIGH_PBX_L" since="4"/>
-		<field name="TONE_CDMA_HIGH_PBX_SLS" since="4"/>
-		<field name="TONE_CDMA_HIGH_PBX_SS" since="4"/>
-		<field name="TONE_CDMA_HIGH_PBX_SSL" since="4"/>
-		<field name="TONE_CDMA_HIGH_PBX_S_X4" since="4"/>
-		<field name="TONE_CDMA_HIGH_SLS" since="4"/>
-		<field name="TONE_CDMA_HIGH_SS" since="4"/>
-		<field name="TONE_CDMA_HIGH_SSL" since="4"/>
-		<field name="TONE_CDMA_HIGH_SS_2" since="4"/>
-		<field name="TONE_CDMA_HIGH_S_X4" since="4"/>
-		<field name="TONE_CDMA_INTERCEPT" since="4"/>
-		<field name="TONE_CDMA_KEYPAD_VOLUME_KEY_LITE" since="4"/>
-		<field name="TONE_CDMA_LOW_L" since="4"/>
-		<field name="TONE_CDMA_LOW_PBX_L" since="4"/>
-		<field name="TONE_CDMA_LOW_PBX_SLS" since="4"/>
-		<field name="TONE_CDMA_LOW_PBX_SS" since="4"/>
-		<field name="TONE_CDMA_LOW_PBX_SSL" since="4"/>
-		<field name="TONE_CDMA_LOW_PBX_S_X4" since="4"/>
-		<field name="TONE_CDMA_LOW_SLS" since="4"/>
-		<field name="TONE_CDMA_LOW_SS" since="4"/>
-		<field name="TONE_CDMA_LOW_SSL" since="4"/>
-		<field name="TONE_CDMA_LOW_SS_2" since="4"/>
-		<field name="TONE_CDMA_LOW_S_X4" since="4"/>
-		<field name="TONE_CDMA_MED_L" since="4"/>
-		<field name="TONE_CDMA_MED_PBX_L" since="4"/>
-		<field name="TONE_CDMA_MED_PBX_SLS" since="4"/>
-		<field name="TONE_CDMA_MED_PBX_SS" since="4"/>
-		<field name="TONE_CDMA_MED_PBX_SSL" since="4"/>
-		<field name="TONE_CDMA_MED_PBX_S_X4" since="4"/>
-		<field name="TONE_CDMA_MED_SLS" since="4"/>
-		<field name="TONE_CDMA_MED_SS" since="4"/>
-		<field name="TONE_CDMA_MED_SSL" since="4"/>
-		<field name="TONE_CDMA_MED_SS_2" since="4"/>
-		<field name="TONE_CDMA_MED_S_X4" since="4"/>
-		<field name="TONE_CDMA_NETWORK_BUSY" since="4"/>
-		<field name="TONE_CDMA_NETWORK_BUSY_ONE_SHOT" since="4"/>
-		<field name="TONE_CDMA_NETWORK_CALLWAITING" since="4"/>
-		<field name="TONE_CDMA_NETWORK_USA_RINGBACK" since="4"/>
-		<field name="TONE_CDMA_ONE_MIN_BEEP" since="4"/>
-		<field name="TONE_CDMA_PIP" since="4"/>
-		<field name="TONE_CDMA_PRESSHOLDKEY_LITE" since="4"/>
-		<field name="TONE_CDMA_REORDER" since="4"/>
-		<field name="TONE_CDMA_SIGNAL_OFF" since="4"/>
-		<field name="TONE_CDMA_SOFT_ERROR_LITE" since="4"/>
-		<field name="TONE_DTMF_0"/>
-		<field name="TONE_DTMF_1"/>
-		<field name="TONE_DTMF_2"/>
-		<field name="TONE_DTMF_3"/>
-		<field name="TONE_DTMF_4"/>
-		<field name="TONE_DTMF_5"/>
-		<field name="TONE_DTMF_6"/>
-		<field name="TONE_DTMF_7"/>
-		<field name="TONE_DTMF_8"/>
-		<field name="TONE_DTMF_9"/>
-		<field name="TONE_DTMF_A"/>
-		<field name="TONE_DTMF_B"/>
-		<field name="TONE_DTMF_C"/>
-		<field name="TONE_DTMF_D"/>
-		<field name="TONE_DTMF_P"/>
-		<field name="TONE_DTMF_S"/>
-		<field name="TONE_PROP_ACK"/>
-		<field name="TONE_PROP_BEEP"/>
-		<field name="TONE_PROP_BEEP2"/>
-		<field name="TONE_PROP_NACK"/>
-		<field name="TONE_PROP_PROMPT"/>
-		<field name="TONE_SUP_BUSY"/>
-		<field name="TONE_SUP_CALL_WAITING"/>
-		<field name="TONE_SUP_CONFIRM" since="4"/>
-		<field name="TONE_SUP_CONGESTION"/>
-		<field name="TONE_SUP_CONGESTION_ABBREV" since="4"/>
-		<field name="TONE_SUP_DIAL"/>
-		<field name="TONE_SUP_ERROR"/>
-		<field name="TONE_SUP_INTERCEPT" since="4"/>
-		<field name="TONE_SUP_INTERCEPT_ABBREV" since="4"/>
-		<field name="TONE_SUP_PIP" since="4"/>
-		<field name="TONE_SUP_RADIO_ACK"/>
-		<field name="TONE_SUP_RADIO_NOTAVAIL"/>
-		<field name="TONE_SUP_RINGTONE"/>
-	</class>
-	<class name="android/media/UnsupportedSchemeException" since="18">
-		<extends name="android/media/MediaDrmException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/media/VolumeAutomation" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="createVolumeShaper(Landroid/media/VolumeShaper$Configuration;)Landroid/media/VolumeShaper;"/>
-	</class>
-	<class name="android/media/VolumeProvider" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="getCurrentVolume()I"/>
-		<method name="getMaxVolume()I"/>
-		<method name="getVolumeControl()I"/>
-		<method name="onAdjustVolume(I)V"/>
-		<method name="onSetVolumeTo(I)V"/>
-		<method name="setCurrentVolume(I)V"/>
-		<field name="VOLUME_CONTROL_ABSOLUTE"/>
-		<field name="VOLUME_CONTROL_FIXED"/>
-		<field name="VOLUME_CONTROL_RELATIVE"/>
-	</class>
-	<class name="android/media/VolumeShaper" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="apply(Landroid/media/VolumeShaper$Operation;)V"/>
-		<method name="getVolume()F"/>
-		<method name="replace(Landroid/media/VolumeShaper$Configuration;Landroid/media/VolumeShaper$Operation;Z)V"/>
-	</class>
-	<class name="android/media/VolumeShaper$Configuration" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="getDuration()J"/>
-		<method name="getInterpolatorType()I"/>
-		<method name="getMaximumCurvePoints()I"/>
-		<method name="getTimes()[F"/>
-		<method name="getVolumes()[F"/>
-		<field name="CREATOR"/>
-		<field name="CUBIC_RAMP"/>
-		<field name="INTERPOLATOR_TYPE_CUBIC"/>
-		<field name="INTERPOLATOR_TYPE_CUBIC_MONOTONIC"/>
-		<field name="INTERPOLATOR_TYPE_LINEAR"/>
-		<field name="INTERPOLATOR_TYPE_STEP"/>
-		<field name="LINEAR_RAMP"/>
-		<field name="SCURVE_RAMP"/>
-		<field name="SINE_RAMP"/>
-	</class>
-	<class name="android/media/VolumeShaper$Configuration$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/media/VolumeShaper$Configuration;)V"/>
-		<method name="build()Landroid/media/VolumeShaper$Configuration;"/>
-		<method name="invertVolumes()Landroid/media/VolumeShaper$Configuration$Builder;"/>
-		<method name="reflectTimes()Landroid/media/VolumeShaper$Configuration$Builder;"/>
-		<method name="scaleToEndVolume(F)Landroid/media/VolumeShaper$Configuration$Builder;"/>
-		<method name="scaleToStartVolume(F)Landroid/media/VolumeShaper$Configuration$Builder;"/>
-		<method name="setCurve([F[F)Landroid/media/VolumeShaper$Configuration$Builder;"/>
-		<method name="setDuration(J)Landroid/media/VolumeShaper$Configuration$Builder;"/>
-		<method name="setInterpolatorType(I)Landroid/media/VolumeShaper$Configuration$Builder;"/>
-	</class>
-	<class name="android/media/VolumeShaper$Operation" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIF)V" since="29"/>
-		<field name="CREATOR"/>
-		<field name="PLAY"/>
-		<field name="REVERSE"/>
-	</class>
-	<class name="android/media/audiofx/AcousticEchoCanceler" since="16">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="create(I)Landroid/media/audiofx/AcousticEchoCanceler;"/>
-		<method name="isAvailable()Z"/>
-	</class>
-	<class name="android/media/audiofx/AudioEffect" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/UUID;Ljava/util/UUID;II)V" since="29"/>
-		<method name="getDescriptor()Landroid/media/audiofx/AudioEffect$Descriptor;"/>
-		<method name="getEnabled()Z"/>
-		<method name="getId()I"/>
-		<method name="hasControl()Z"/>
-		<method name="queryEffects()[Landroid/media/audiofx/AudioEffect$Descriptor;"/>
-		<method name="release()V"/>
-		<method name="setControlStatusListener(Landroid/media/audiofx/AudioEffect$OnControlStatusChangeListener;)V"/>
-		<method name="setEnableStatusListener(Landroid/media/audiofx/AudioEffect$OnEnableStatusChangeListener;)V"/>
-		<method name="setEnabled(Z)I"/>
-		<field name="ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION"/>
-		<field name="ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL"/>
-		<field name="ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION"/>
-		<field name="ALREADY_EXISTS"/>
-		<field name="CONTENT_TYPE_GAME"/>
-		<field name="CONTENT_TYPE_MOVIE"/>
-		<field name="CONTENT_TYPE_MUSIC"/>
-		<field name="CONTENT_TYPE_VOICE"/>
-		<field name="EFFECT_AUXILIARY"/>
-		<field name="EFFECT_INSERT"/>
-		<field name="EFFECT_TYPE_AEC" since="18"/>
-		<field name="EFFECT_TYPE_AGC" since="18"/>
-		<field name="EFFECT_TYPE_BASS_BOOST" since="18"/>
-		<field name="EFFECT_TYPE_DYNAMICS_PROCESSING" since="28"/>
-		<field name="EFFECT_TYPE_ENV_REVERB" since="18"/>
-		<field name="EFFECT_TYPE_EQUALIZER" since="18"/>
-		<field name="EFFECT_TYPE_LOUDNESS_ENHANCER" since="19"/>
-		<field name="EFFECT_TYPE_NS" since="18"/>
-		<field name="EFFECT_TYPE_PRESET_REVERB" since="18"/>
-		<field name="EFFECT_TYPE_VIRTUALIZER" since="18"/>
-		<field name="ERROR"/>
-		<field name="ERROR_BAD_VALUE"/>
-		<field name="ERROR_DEAD_OBJECT"/>
-		<field name="ERROR_INVALID_OPERATION"/>
-		<field name="ERROR_NO_INIT"/>
-		<field name="ERROR_NO_MEMORY"/>
-		<field name="EXTRA_AUDIO_SESSION"/>
-		<field name="EXTRA_CONTENT_TYPE"/>
-		<field name="EXTRA_PACKAGE_NAME"/>
-		<field name="SUCCESS"/>
-	</class>
-	<class name="android/media/audiofx/AudioEffect$Descriptor" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="connectMode"/>
-		<field name="implementor"/>
-		<field name="name"/>
-		<field name="type"/>
-		<field name="uuid"/>
-	</class>
-	<class name="android/media/audiofx/AudioEffect$OnControlStatusChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onControlStatusChange(Landroid/media/audiofx/AudioEffect;Z)V"/>
-	</class>
-	<class name="android/media/audiofx/AudioEffect$OnEnableStatusChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onEnableStatusChange(Landroid/media/audiofx/AudioEffect;Z)V"/>
-	</class>
-	<class name="android/media/audiofx/AutomaticGainControl" since="16">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="create(I)Landroid/media/audiofx/AutomaticGainControl;"/>
-		<method name="isAvailable()Z"/>
-	</class>
-	<class name="android/media/audiofx/BassBoost" since="9">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getProperties()Landroid/media/audiofx/BassBoost$Settings;"/>
-		<method name="getRoundedStrength()S"/>
-		<method name="getStrengthSupported()Z"/>
-		<method name="setParameterListener(Landroid/media/audiofx/BassBoost$OnParameterChangeListener;)V"/>
-		<method name="setProperties(Landroid/media/audiofx/BassBoost$Settings;)V"/>
-		<method name="setStrength(S)V"/>
-		<field name="PARAM_STRENGTH"/>
-		<field name="PARAM_STRENGTH_SUPPORTED"/>
-	</class>
-	<class name="android/media/audiofx/BassBoost$OnParameterChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onParameterChange(Landroid/media/audiofx/BassBoost;IIS)V"/>
-	</class>
-	<class name="android/media/audiofx/BassBoost$Settings" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="strength"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing" since="28">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IILandroid/media/audiofx/DynamicsProcessing$Config;)V"/>
-		<method name="getChannelByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Channel;"/>
-		<method name="getChannelCount()I"/>
-		<method name="getConfig()Landroid/media/audiofx/DynamicsProcessing$Config;"/>
-		<method name="getInputGainByChannelIndex(I)F"/>
-		<method name="getLimiterByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Limiter;"/>
-		<method name="getMbcBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
-		<method name="getMbcByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Mbc;"/>
-		<method name="getPostEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
-		<method name="getPostEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
-		<method name="getPreEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
-		<method name="getPreEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
-		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
-		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
-		<method name="setInputGainAllChannelsTo(F)V"/>
-		<method name="setInputGainbyChannel(IF)V"/>
-		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
-		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
-		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
-		<method name="setMbcBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
-		<method name="setMbcBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
-		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
-		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPostEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPostEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPreEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPreEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<field name="VARIANT_FAVOR_FREQUENCY_RESOLUTION"/>
-		<field name="VARIANT_FAVOR_TIME_RESOLUTION"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$BandBase" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ZF)V"/>
-		<method name="getCutoffFrequency()F"/>
-		<method name="isEnabled()Z"/>
-		<method name="setCutoffFrequency(F)V"/>
-		<method name="setEnabled(Z)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$BandStage" since="28">
-		<extends name="android/media/audiofx/DynamicsProcessing$Stage"/>
-		<method name="&lt;init>(ZZI)V"/>
-		<method name="getBandCount()I"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$Channel" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(FZIZIZIZ)V"/>
-		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
-		<method name="getInputGain()F"/>
-		<method name="getLimiter()Landroid/media/audiofx/DynamicsProcessing$Limiter;"/>
-		<method name="getMbc()Landroid/media/audiofx/DynamicsProcessing$Mbc;"/>
-		<method name="getMbcBand(I)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
-		<method name="getPostEq()Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
-		<method name="getPostEqBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
-		<method name="getPreEq()Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
-		<method name="getPreEqBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
-		<method name="setInputGain(F)V"/>
-		<method name="setLimiter(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
-		<method name="setMbc(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
-		<method name="setMbcBand(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
-		<method name="setPostEq(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPostEqBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPreEq(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPreEqBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$Config" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Config;)V" since="29"/>
-		<method name="getChannelByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Channel;"/>
-		<method name="getInputGainByChannelIndex(I)F"/>
-		<method name="getLimiterByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Limiter;"/>
-		<method name="getMbcBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
-		<method name="getMbcBandCount()I"/>
-		<method name="getMbcByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Mbc;"/>
-		<method name="getPostEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
-		<method name="getPostEqBandCount()I"/>
-		<method name="getPostEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
-		<method name="getPreEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
-		<method name="getPreEqBandCount()I"/>
-		<method name="getPreEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
-		<method name="getPreferredFrameDuration()F"/>
-		<method name="getVariant()I"/>
-		<method name="isLimiterInUse()Z"/>
-		<method name="isMbcInUse()Z"/>
-		<method name="isPostEqInUse()Z"/>
-		<method name="isPreEqInUse()Z"/>
-		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
-		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
-		<method name="setInputGainAllChannelsTo(F)V"/>
-		<method name="setInputGainByChannelIndex(IF)V"/>
-		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
-		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
-		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
-		<method name="setMbcBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
-		<method name="setMbcBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
-		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
-		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPostEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPostEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="setPreEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPreEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$Config$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IIZIZIZIZ)V"/>
-		<method name="build()Landroid/media/audiofx/DynamicsProcessing$Config;"/>
-		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setInputGainAllChannelsTo(F)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setInputGainByChannelIndex(IF)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-		<method name="setPreferredFrameDuration(F)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$Eq" since="28">
-		<extends name="android/media/audiofx/DynamicsProcessing$BandStage"/>
-		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
-		<method name="&lt;init>(ZZI)V"/>
-		<method name="getBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
-		<method name="setBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$EqBand" since="28">
-		<extends name="android/media/audiofx/DynamicsProcessing$BandBase"/>
-		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
-		<method name="&lt;init>(ZFF)V"/>
-		<method name="getGain()F"/>
-		<method name="setGain(F)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$Limiter" since="28">
-		<extends name="android/media/audiofx/DynamicsProcessing$Stage"/>
-		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
-		<method name="&lt;init>(ZZIFFFFF)V"/>
-		<method name="getAttackTime()F"/>
-		<method name="getLinkGroup()I"/>
-		<method name="getPostGain()F"/>
-		<method name="getRatio()F"/>
-		<method name="getReleaseTime()F"/>
-		<method name="getThreshold()F"/>
-		<method name="setAttackTime(F)V"/>
-		<method name="setLinkGroup(I)V"/>
-		<method name="setPostGain(F)V"/>
-		<method name="setRatio(F)V"/>
-		<method name="setReleaseTime(F)V"/>
-		<method name="setThreshold(F)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$Mbc" since="28">
-		<extends name="android/media/audiofx/DynamicsProcessing$BandStage"/>
-		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
-		<method name="&lt;init>(ZZI)V"/>
-		<method name="getBand(I)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
-		<method name="setBand(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$MbcBand" since="28">
-		<extends name="android/media/audiofx/DynamicsProcessing$BandBase"/>
-		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
-		<method name="&lt;init>(ZFFFFFFFFFF)V"/>
-		<method name="getAttackTime()F"/>
-		<method name="getExpanderRatio()F"/>
-		<method name="getKneeWidth()F"/>
-		<method name="getNoiseGateThreshold()F"/>
-		<method name="getPostGain()F"/>
-		<method name="getPreGain()F"/>
-		<method name="getRatio()F"/>
-		<method name="getReleaseTime()F"/>
-		<method name="getThreshold()F"/>
-		<method name="setAttackTime(F)V"/>
-		<method name="setExpanderRatio(F)V"/>
-		<method name="setKneeWidth(F)V"/>
-		<method name="setNoiseGateThreshold(F)V"/>
-		<method name="setPostGain(F)V"/>
-		<method name="setPreGain(F)V"/>
-		<method name="setRatio(F)V"/>
-		<method name="setReleaseTime(F)V"/>
-		<method name="setThreshold(F)V"/>
-	</class>
-	<class name="android/media/audiofx/DynamicsProcessing$Stage" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ZZ)V"/>
-		<method name="isEnabled()Z"/>
-		<method name="isInUse()Z"/>
-		<method name="setEnabled(Z)V"/>
-	</class>
-	<class name="android/media/audiofx/EnvironmentalReverb" since="9">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getDecayHFRatio()S"/>
-		<method name="getDecayTime()I"/>
-		<method name="getDensity()S"/>
-		<method name="getDiffusion()S"/>
-		<method name="getProperties()Landroid/media/audiofx/EnvironmentalReverb$Settings;"/>
-		<method name="getReflectionsDelay()I"/>
-		<method name="getReflectionsLevel()S"/>
-		<method name="getReverbDelay()I"/>
-		<method name="getReverbLevel()S"/>
-		<method name="getRoomHFLevel()S"/>
-		<method name="getRoomLevel()S"/>
-		<method name="setDecayHFRatio(S)V"/>
-		<method name="setDecayTime(I)V"/>
-		<method name="setDensity(S)V"/>
-		<method name="setDiffusion(S)V"/>
-		<method name="setParameterListener(Landroid/media/audiofx/EnvironmentalReverb$OnParameterChangeListener;)V"/>
-		<method name="setProperties(Landroid/media/audiofx/EnvironmentalReverb$Settings;)V"/>
-		<method name="setReflectionsDelay(I)V"/>
-		<method name="setReflectionsLevel(S)V"/>
-		<method name="setReverbDelay(I)V"/>
-		<method name="setReverbLevel(S)V"/>
-		<method name="setRoomHFLevel(S)V"/>
-		<method name="setRoomLevel(S)V"/>
-		<field name="PARAM_DECAY_HF_RATIO"/>
-		<field name="PARAM_DECAY_TIME"/>
-		<field name="PARAM_DENSITY"/>
-		<field name="PARAM_DIFFUSION"/>
-		<field name="PARAM_REFLECTIONS_DELAY"/>
-		<field name="PARAM_REFLECTIONS_LEVEL"/>
-		<field name="PARAM_REVERB_DELAY"/>
-		<field name="PARAM_REVERB_LEVEL"/>
-		<field name="PARAM_ROOM_HF_LEVEL"/>
-		<field name="PARAM_ROOM_LEVEL"/>
-	</class>
-	<class name="android/media/audiofx/EnvironmentalReverb$OnParameterChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onParameterChange(Landroid/media/audiofx/EnvironmentalReverb;III)V"/>
-	</class>
-	<class name="android/media/audiofx/EnvironmentalReverb$Settings" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="decayHFRatio"/>
-		<field name="decayTime"/>
-		<field name="density"/>
-		<field name="diffusion"/>
-		<field name="reflectionsDelay"/>
-		<field name="reflectionsLevel"/>
-		<field name="reverbDelay"/>
-		<field name="reverbLevel"/>
-		<field name="roomHFLevel"/>
-		<field name="roomLevel"/>
-	</class>
-	<class name="android/media/audiofx/Equalizer" since="9">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getBand(I)S"/>
-		<method name="getBandFreqRange(S)[I"/>
-		<method name="getBandLevel(S)S"/>
-		<method name="getBandLevelRange()[S"/>
-		<method name="getCenterFreq(S)I"/>
-		<method name="getCurrentPreset()S"/>
-		<method name="getNumberOfBands()S"/>
-		<method name="getNumberOfPresets()S"/>
-		<method name="getPresetName(S)Ljava/lang/String;"/>
-		<method name="getProperties()Landroid/media/audiofx/Equalizer$Settings;"/>
-		<method name="setBandLevel(SS)V"/>
-		<method name="setParameterListener(Landroid/media/audiofx/Equalizer$OnParameterChangeListener;)V"/>
-		<method name="setProperties(Landroid/media/audiofx/Equalizer$Settings;)V"/>
-		<method name="usePreset(S)V"/>
-		<field name="PARAM_BAND_FREQ_RANGE"/>
-		<field name="PARAM_BAND_LEVEL"/>
-		<field name="PARAM_CENTER_FREQ"/>
-		<field name="PARAM_CURRENT_PRESET"/>
-		<field name="PARAM_GET_BAND"/>
-		<field name="PARAM_GET_NUM_OF_PRESETS"/>
-		<field name="PARAM_GET_PRESET_NAME"/>
-		<field name="PARAM_LEVEL_RANGE"/>
-		<field name="PARAM_NUM_BANDS"/>
-		<field name="PARAM_STRING_SIZE_MAX"/>
-	</class>
-	<class name="android/media/audiofx/Equalizer$OnParameterChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onParameterChange(Landroid/media/audiofx/Equalizer;IIII)V"/>
-	</class>
-	<class name="android/media/audiofx/Equalizer$Settings" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="bandLevels"/>
-		<field name="curPreset"/>
-		<field name="numBands"/>
-	</class>
-	<class name="android/media/audiofx/LoudnessEnhancer" since="19">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getTargetGain()F"/>
-		<method name="setTargetGain(I)V"/>
-		<field name="PARAM_TARGET_GAIN_MB"/>
-	</class>
-	<class name="android/media/audiofx/NoiseSuppressor" since="16">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="create(I)Landroid/media/audiofx/NoiseSuppressor;"/>
-		<method name="isAvailable()Z"/>
-	</class>
-	<class name="android/media/audiofx/PresetReverb" since="9">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getPreset()S"/>
-		<method name="getProperties()Landroid/media/audiofx/PresetReverb$Settings;"/>
-		<method name="setParameterListener(Landroid/media/audiofx/PresetReverb$OnParameterChangeListener;)V"/>
-		<method name="setPreset(S)V"/>
-		<method name="setProperties(Landroid/media/audiofx/PresetReverb$Settings;)V"/>
-		<field name="PARAM_PRESET"/>
-		<field name="PRESET_LARGEHALL"/>
-		<field name="PRESET_LARGEROOM"/>
-		<field name="PRESET_MEDIUMHALL"/>
-		<field name="PRESET_MEDIUMROOM"/>
-		<field name="PRESET_NONE"/>
-		<field name="PRESET_PLATE"/>
-		<field name="PRESET_SMALLROOM"/>
-	</class>
-	<class name="android/media/audiofx/PresetReverb$OnParameterChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onParameterChange(Landroid/media/audiofx/PresetReverb;IIS)V"/>
-	</class>
-	<class name="android/media/audiofx/PresetReverb$Settings" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="preset"/>
-	</class>
-	<class name="android/media/audiofx/Virtualizer" since="9">
-		<extends name="android/media/audiofx/AudioEffect"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="canVirtualize(II)Z" since="21"/>
-		<method name="forceVirtualizationMode(I)Z" since="21"/>
-		<method name="getProperties()Landroid/media/audiofx/Virtualizer$Settings;"/>
-		<method name="getRoundedStrength()S"/>
-		<method name="getSpeakerAngles(II[I)Z" since="21"/>
-		<method name="getStrengthSupported()Z"/>
-		<method name="getVirtualizationMode()I" since="21"/>
-		<method name="setParameterListener(Landroid/media/audiofx/Virtualizer$OnParameterChangeListener;)V"/>
-		<method name="setProperties(Landroid/media/audiofx/Virtualizer$Settings;)V"/>
-		<method name="setStrength(S)V"/>
-		<field name="PARAM_STRENGTH"/>
-		<field name="PARAM_STRENGTH_SUPPORTED"/>
-		<field name="VIRTUALIZATION_MODE_AUTO" since="21"/>
-		<field name="VIRTUALIZATION_MODE_BINAURAL" since="21"/>
-		<field name="VIRTUALIZATION_MODE_OFF" since="21"/>
-		<field name="VIRTUALIZATION_MODE_TRANSAURAL" since="21"/>
-	</class>
-	<class name="android/media/audiofx/Virtualizer$OnParameterChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onParameterChange(Landroid/media/audiofx/Virtualizer;IIS)V"/>
-	</class>
-	<class name="android/media/audiofx/Virtualizer$Settings" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="strength"/>
-	</class>
-	<class name="android/media/audiofx/Visualizer" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getCaptureSize()I"/>
-		<method name="getCaptureSizeRange()[I"/>
-		<method name="getEnabled()Z"/>
-		<method name="getFft([B)I"/>
-		<method name="getMaxCaptureRate()I"/>
-		<method name="getMeasurementMode()I" since="19"/>
-		<method name="getMeasurementPeakRms(Landroid/media/audiofx/Visualizer$MeasurementPeakRms;)I" since="19"/>
-		<method name="getSamplingRate()I"/>
-		<method name="getScalingMode()I" since="16"/>
-		<method name="getWaveForm([B)I"/>
-		<method name="release()V"/>
-		<method name="setCaptureSize(I)I"/>
-		<method name="setDataCaptureListener(Landroid/media/audiofx/Visualizer$OnDataCaptureListener;IZZ)I"/>
-		<method name="setEnabled(Z)I"/>
-		<method name="setMeasurementMode(I)I" since="19"/>
-		<method name="setScalingMode(I)I" since="16"/>
-		<field name="ALREADY_EXISTS"/>
-		<field name="ERROR"/>
-		<field name="ERROR_BAD_VALUE"/>
-		<field name="ERROR_DEAD_OBJECT"/>
-		<field name="ERROR_INVALID_OPERATION"/>
-		<field name="ERROR_NO_INIT"/>
-		<field name="ERROR_NO_MEMORY"/>
-		<field name="MEASUREMENT_MODE_NONE" since="19"/>
-		<field name="MEASUREMENT_MODE_PEAK_RMS" since="19"/>
-		<field name="SCALING_MODE_AS_PLAYED" since="16"/>
-		<field name="SCALING_MODE_NORMALIZED" since="16"/>
-		<field name="STATE_ENABLED"/>
-		<field name="STATE_INITIALIZED"/>
-		<field name="STATE_UNINITIALIZED"/>
-		<field name="SUCCESS"/>
-	</class>
-	<class name="android/media/audiofx/Visualizer$MeasurementPeakRms" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="mPeak"/>
-		<field name="mRms"/>
-	</class>
-	<class name="android/media/audiofx/Visualizer$OnDataCaptureListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onFftDataCapture(Landroid/media/audiofx/Visualizer;[BI)V"/>
-		<method name="onWaveFormDataCapture(Landroid/media/audiofx/Visualizer;[BI)V"/>
-	</class>
-	<class name="android/media/browse/MediaBrowser" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;Landroid/media/browse/MediaBrowser$ConnectionCallback;Landroid/os/Bundle;)V"/>
-		<method name="connect()V"/>
-		<method name="disconnect()V"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getItem(Ljava/lang/String;Landroid/media/browse/MediaBrowser$ItemCallback;)V" since="23"/>
-		<method name="getRoot()Ljava/lang/String;"/>
-		<method name="getServiceComponent()Landroid/content/ComponentName;"/>
-		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
-		<method name="isConnected()Z"/>
-		<method name="subscribe(Ljava/lang/String;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V"/>
-		<method name="subscribe(Ljava/lang/String;Landroid/os/Bundle;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V" since="24"/>
-		<method name="unsubscribe(Ljava/lang/String;)V"/>
-		<method name="unsubscribe(Ljava/lang/String;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V" since="24"/>
-		<field name="EXTRA_PAGE" since="24"/>
-		<field name="EXTRA_PAGE_SIZE" since="24"/>
-	</class>
-	<class name="android/media/browse/MediaBrowser$ConnectionCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onConnected()V"/>
-		<method name="onConnectionFailed()V"/>
-		<method name="onConnectionSuspended()V"/>
-	</class>
-	<class name="android/media/browse/MediaBrowser$ItemCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onError(Ljava/lang/String;)V"/>
-		<method name="onItemLoaded(Landroid/media/browse/MediaBrowser$MediaItem;)V"/>
-	</class>
-	<class name="android/media/browse/MediaBrowser$MediaItem" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/media/MediaDescription;I)V"/>
-		<method name="getDescription()Landroid/media/MediaDescription;"/>
-		<method name="getFlags()I"/>
-		<method name="getMediaId()Ljava/lang/String;"/>
-		<method name="isBrowsable()Z"/>
-		<method name="isPlayable()Z"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_BROWSABLE"/>
-		<field name="FLAG_PLAYABLE"/>
-	</class>
-	<class name="android/media/browse/MediaBrowser$SubscriptionCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onChildrenLoaded(Ljava/lang/String;Ljava/util/List;)V"/>
-		<method name="onChildrenLoaded(Ljava/lang/String;Ljava/util/List;Landroid/os/Bundle;)V" since="24"/>
-		<method name="onError(Ljava/lang/String;)V"/>
-		<method name="onError(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-	</class>
-	<class name="android/media/effect/Effect" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="apply(IIII)V"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="release()V"/>
-		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setUpdateListener(Landroid/media/effect/EffectUpdateListener;)V"/>
-	</class>
-	<class name="android/media/effect/EffectContext" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createWithCurrentGlContext()Landroid/media/effect/EffectContext;"/>
-		<method name="getFactory()Landroid/media/effect/EffectFactory;"/>
-		<method name="release()V"/>
-	</class>
-	<class name="android/media/effect/EffectFactory" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/effect/EffectContext;)V" since="29"/>
-		<method name="createEffect(Ljava/lang/String;)Landroid/media/effect/Effect;"/>
-		<method name="isEffectSupported(Ljava/lang/String;)Z"/>
-		<field name="EFFECT_AUTOFIX"/>
-		<field name="EFFECT_BACKDROPPER"/>
-		<field name="EFFECT_BITMAPOVERLAY"/>
-		<field name="EFFECT_BLACKWHITE"/>
-		<field name="EFFECT_BRIGHTNESS"/>
-		<field name="EFFECT_CONTRAST"/>
-		<field name="EFFECT_CROP"/>
-		<field name="EFFECT_CROSSPROCESS"/>
-		<field name="EFFECT_DOCUMENTARY"/>
-		<field name="EFFECT_DUOTONE"/>
-		<field name="EFFECT_FILLLIGHT"/>
-		<field name="EFFECT_FISHEYE"/>
-		<field name="EFFECT_FLIP"/>
-		<field name="EFFECT_GRAIN"/>
-		<field name="EFFECT_GRAYSCALE"/>
-		<field name="EFFECT_LOMOISH"/>
-		<field name="EFFECT_NEGATIVE"/>
-		<field name="EFFECT_POSTERIZE"/>
-		<field name="EFFECT_REDEYE"/>
-		<field name="EFFECT_ROTATE"/>
-		<field name="EFFECT_SATURATE"/>
-		<field name="EFFECT_SEPIA"/>
-		<field name="EFFECT_SHARPEN"/>
-		<field name="EFFECT_STRAIGHTEN"/>
-		<field name="EFFECT_TEMPERATURE"/>
-		<field name="EFFECT_TINT"/>
-		<field name="EFFECT_VIGNETTE"/>
-	</class>
-	<class name="android/media/effect/EffectUpdateListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onEffectUpdated(Landroid/media/effect/Effect;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/media/midi/MidiDevice" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V"/>
-		<method name="connectPorts(Landroid/media/midi/MidiInputPort;I)Landroid/media/midi/MidiDevice$MidiConnection;"/>
-		<method name="getInfo()Landroid/media/midi/MidiDeviceInfo;"/>
-		<method name="openInputPort(I)Landroid/media/midi/MidiInputPort;"/>
-		<method name="openOutputPort(I)Landroid/media/midi/MidiOutputPort;"/>
-	</class>
-	<class name="android/media/midi/MidiDevice$MidiConnection" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>(Landroid/media/midi/MidiDevice;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/midi/MidiDevice;Landroid/os/IBinder;Landroid/media/midi/MidiInputPort;)V" since="29"/>
-	</class>
-	<class name="android/media/midi/MidiDeviceInfo" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII[Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Z)V" since="29"/>
-		<method name="getId()I"/>
-		<method name="getInputPortCount()I"/>
-		<method name="getOutputPortCount()I"/>
-		<method name="getPorts()[Landroid/media/midi/MidiDeviceInfo$PortInfo;"/>
-		<method name="getProperties()Landroid/os/Bundle;"/>
-		<method name="getType()I"/>
-		<method name="isPrivate()Z"/>
-		<field name="CREATOR"/>
-		<field name="PROPERTY_BLUETOOTH_DEVICE"/>
-		<field name="PROPERTY_MANUFACTURER"/>
-		<field name="PROPERTY_NAME"/>
-		<field name="PROPERTY_PRODUCT"/>
-		<field name="PROPERTY_SERIAL_NUMBER"/>
-		<field name="PROPERTY_USB_DEVICE"/>
-		<field name="PROPERTY_VERSION"/>
-		<field name="TYPE_BLUETOOTH"/>
-		<field name="TYPE_USB"/>
-		<field name="TYPE_VIRTUAL"/>
-	</class>
-	<class name="android/media/midi/MidiDeviceInfo$PortInfo" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IILjava/lang/String;)V" since="29"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPortNumber()I"/>
-		<method name="getType()I"/>
-		<field name="TYPE_INPUT"/>
-		<field name="TYPE_OUTPUT"/>
-	</class>
-	<class name="android/media/midi/MidiDeviceService" since="23">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDeviceInfo()Landroid/media/midi/MidiDeviceInfo;"/>
-		<method name="getOutputPortReceivers()[Landroid/media/midi/MidiReceiver;"/>
-		<method name="onClose()V"/>
-		<method name="onDeviceStatusChanged(Landroid/media/midi/MidiDeviceStatus;)V"/>
-		<method name="onGetInputPortReceivers()[Landroid/media/midi/MidiReceiver;"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/media/midi/MidiDeviceStatus" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/media/midi/MidiDeviceInfo;)V" since="29"/>
-		<method name="getDeviceInfo()Landroid/media/midi/MidiDeviceInfo;"/>
-		<method name="getOutputPortOpenCount(I)I"/>
-		<method name="isInputPortOpen(I)Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/media/midi/MidiInputPort" since="23">
-		<extends name="android/media/midi/MidiReceiver"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;I)V" since="29"/>
-		<method name="getPortNumber()I"/>
-	</class>
-	<class name="android/media/midi/MidiManager" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDevices()[Landroid/media/midi/MidiDeviceInfo;"/>
-		<method name="openBluetoothDevice(Landroid/bluetooth/BluetoothDevice;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V"/>
-		<method name="openDevice(Landroid/media/midi/MidiDeviceInfo;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V"/>
-		<method name="registerDeviceCallback(Landroid/media/midi/MidiManager$DeviceCallback;Landroid/os/Handler;)V"/>
-		<method name="unregisterDeviceCallback(Landroid/media/midi/MidiManager$DeviceCallback;)V"/>
-	</class>
-	<class name="android/media/midi/MidiManager$DeviceCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onDeviceAdded(Landroid/media/midi/MidiDeviceInfo;)V"/>
-		<method name="onDeviceRemoved(Landroid/media/midi/MidiDeviceInfo;)V"/>
-		<method name="onDeviceStatusChanged(Landroid/media/midi/MidiDeviceStatus;)V"/>
-	</class>
-	<class name="android/media/midi/MidiManager$OnDeviceOpenedListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onDeviceOpened(Landroid/media/midi/MidiDevice;)V"/>
-	</class>
-	<class name="android/media/midi/MidiOutputPort" since="23">
-		<extends name="android/media/midi/MidiSender"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;I)V" since="29"/>
-		<method name="getPortNumber()I"/>
-	</class>
-	<class name="android/media/midi/MidiReceiver" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="flush()V"/>
-		<method name="getMaxMessageSize()I"/>
-		<method name="onFlush()V"/>
-		<method name="onSend([BIIJ)V"/>
-		<method name="send([BII)V"/>
-		<method name="send([BIIJ)V"/>
-	</class>
-	<class name="android/media/midi/MidiSender" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="connect(Landroid/media/midi/MidiReceiver;)V"/>
-		<method name="disconnect(Landroid/media/midi/MidiReceiver;)V"/>
-		<method name="onConnect(Landroid/media/midi/MidiReceiver;)V"/>
-		<method name="onDisconnect(Landroid/media/midi/MidiReceiver;)V"/>
-	</class>
-	<class name="android/media/projection/MediaProjection" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createVirtualDisplay(Ljava/lang/String;IIIILandroid/view/Surface;Landroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;"/>
-		<method name="registerCallback(Landroid/media/projection/MediaProjection$Callback;Landroid/os/Handler;)V"/>
-		<method name="stop()V"/>
-		<method name="unregisterCallback(Landroid/media/projection/MediaProjection$Callback;)V"/>
-	</class>
-	<class name="android/media/projection/MediaProjection$Callback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onStop()V"/>
-	</class>
-	<class name="android/media/projection/MediaProjectionManager" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="createScreenCaptureIntent()Landroid/content/Intent;"/>
-		<method name="getMediaProjection(ILandroid/content/Intent;)Landroid/media/projection/MediaProjection;"/>
-	</class>
-	<class name="android/media/session/MediaController" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/media/session/MediaSession$Token;)V"/>
-		<method name="adjustVolume(II)V"/>
-		<method name="dispatchMediaButtonEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getFlags()J"/>
-		<method name="getMetadata()Landroid/media/MediaMetadata;"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getPlaybackInfo()Landroid/media/session/MediaController$PlaybackInfo;"/>
-		<method name="getPlaybackState()Landroid/media/session/PlaybackState;"/>
-		<method name="getQueue()Ljava/util/List;"/>
-		<method name="getQueueTitle()Ljava/lang/CharSequence;"/>
-		<method name="getRatingType()I"/>
-		<method name="getSessionActivity()Landroid/app/PendingIntent;"/>
-		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
-		<method name="getTransportControls()Landroid/media/session/MediaController$TransportControls;"/>
-		<method name="registerCallback(Landroid/media/session/MediaController$Callback;)V"/>
-		<method name="registerCallback(Landroid/media/session/MediaController$Callback;Landroid/os/Handler;)V"/>
-		<method name="sendCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V"/>
-		<method name="setVolumeTo(II)V"/>
-		<method name="unregisterCallback(Landroid/media/session/MediaController$Callback;)V"/>
-	</class>
-	<class name="android/media/session/MediaController$Callback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAudioInfoChanged(Landroid/media/session/MediaController$PlaybackInfo;)V"/>
-		<method name="onExtrasChanged(Landroid/os/Bundle;)V"/>
-		<method name="onMetadataChanged(Landroid/media/MediaMetadata;)V"/>
-		<method name="onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V"/>
-		<method name="onQueueChanged(Ljava/util/List;)V"/>
-		<method name="onQueueTitleChanged(Ljava/lang/CharSequence;)V"/>
-		<method name="onSessionDestroyed()V"/>
-		<method name="onSessionEvent(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/media/session/MediaController$PlaybackInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILandroid/media/AudioAttributes;III)V" since="29"/>
-		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
-		<method name="getCurrentVolume()I"/>
-		<method name="getMaxVolume()I"/>
-		<method name="getPlaybackType()I"/>
-		<method name="getVolumeControl()I"/>
-		<field name="PLAYBACK_TYPE_LOCAL"/>
-		<field name="PLAYBACK_TYPE_REMOTE"/>
-	</class>
-	<class name="android/media/session/MediaController$TransportControls" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/media/session/MediaController;)V"/>
-		<method name="fastForward()V"/>
-		<method name="pause()V"/>
-		<method name="play()V"/>
-		<method name="playFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="playFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="playFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23"/>
-		<method name="prepare()V" since="24"/>
-		<method name="prepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-		<method name="prepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-		<method name="prepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="24"/>
-		<method name="rewind()V"/>
-		<method name="seekTo(J)V"/>
-		<method name="sendCustomAction(Landroid/media/session/PlaybackState$CustomAction;Landroid/os/Bundle;)V"/>
-		<method name="sendCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="setRating(Landroid/media/Rating;)V"/>
-		<method name="skipToNext()V"/>
-		<method name="skipToPrevious()V"/>
-		<method name="skipToQueueItem(J)V"/>
-		<method name="stop()V"/>
-	</class>
-	<class name="android/media/session/MediaSession" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="getController()Landroid/media/session/MediaController;"/>
-		<method name="getCurrentControllerInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;" since="28"/>
-		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
-		<method name="isActive()Z"/>
-		<method name="release()V"/>
-		<method name="sendSessionEvent(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="setActive(Z)V"/>
-		<method name="setCallback(Landroid/media/session/MediaSession$Callback;)V"/>
-		<method name="setCallback(Landroid/media/session/MediaSession$Callback;Landroid/os/Handler;)V"/>
-		<method name="setExtras(Landroid/os/Bundle;)V"/>
-		<method name="setFlags(I)V"/>
-		<method name="setMediaButtonReceiver(Landroid/app/PendingIntent;)V"/>
-		<method name="setMetadata(Landroid/media/MediaMetadata;)V"/>
-		<method name="setPlaybackState(Landroid/media/session/PlaybackState;)V"/>
-		<method name="setPlaybackToLocal(Landroid/media/AudioAttributes;)V"/>
-		<method name="setPlaybackToRemote(Landroid/media/VolumeProvider;)V"/>
-		<method name="setQueue(Ljava/util/List;)V"/>
-		<method name="setQueueTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setRatingType(I)V" since="22"/>
-		<method name="setSessionActivity(Landroid/app/PendingIntent;)V"/>
-		<field name="FLAG_HANDLES_MEDIA_BUTTONS" deprecated="26"/>
-		<field name="FLAG_HANDLES_TRANSPORT_CONTROLS" deprecated="26"/>
-	</class>
-	<class name="android/media/session/MediaSession$Callback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V"/>
-		<method name="onCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="onFastForward()V"/>
-		<method name="onMediaButtonEvent(Landroid/content/Intent;)Z"/>
-		<method name="onPause()V"/>
-		<method name="onPlay()V"/>
-		<method name="onPlayFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="onPlayFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="onPlayFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23"/>
-		<method name="onPrepare()V" since="24"/>
-		<method name="onPrepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-		<method name="onPrepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-		<method name="onPrepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="24"/>
-		<method name="onRewind()V"/>
-		<method name="onSeekTo(J)V"/>
-		<method name="onSetRating(Landroid/media/Rating;)V"/>
-		<method name="onSkipToNext()V"/>
-		<method name="onSkipToPrevious()V"/>
-		<method name="onSkipToQueueItem(J)V"/>
-		<method name="onStop()V"/>
-	</class>
-	<class name="android/media/session/MediaSession$QueueItem" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/media/MediaDescription;J)V"/>
-		<method name="getDescription()Landroid/media/MediaDescription;"/>
-		<method name="getQueueId()J"/>
-		<field name="CREATOR"/>
-		<field name="UNKNOWN_ID"/>
-	</class>
-	<class name="android/media/session/MediaSession$Token" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/media/session/MediaSessionManager" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;)V"/>
-		<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;Landroid/os/Handler;)V"/>
-		<method name="getActiveSessions(Landroid/content/ComponentName;)Ljava/util/List;"/>
-		<method name="isTrustedForMediaControl(Landroid/media/session/MediaSessionManager$RemoteUserInfo;)Z" since="28"/>
-		<method name="removeOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;)V"/>
-	</class>
-	<class name="android/media/session/MediaSessionManager$OnActiveSessionsChangedListener" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="onActiveSessionsChanged(Ljava/util/List;)V"/>
-	</class>
-	<class name="android/media/session/MediaSessionManager$RemoteUserInfo" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;II)V"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getPid()I"/>
-		<method name="getUid()I"/>
-	</class>
-	<class name="android/media/session/PlaybackState" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getActions()J"/>
-		<method name="getActiveQueueItemId()J"/>
-		<method name="getBufferedPosition()J"/>
-		<method name="getCustomActions()Ljava/util/List;"/>
-		<method name="getErrorMessage()Ljava/lang/CharSequence;"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="22"/>
-		<method name="getLastPositionUpdateTime()J"/>
-		<method name="getPlaybackSpeed()F"/>
-		<method name="getPosition()J"/>
-		<method name="getState()I"/>
-		<field name="ACTION_FAST_FORWARD"/>
-		<field name="ACTION_PAUSE"/>
-		<field name="ACTION_PLAY"/>
-		<field name="ACTION_PLAY_FROM_MEDIA_ID"/>
-		<field name="ACTION_PLAY_FROM_SEARCH"/>
-		<field name="ACTION_PLAY_FROM_URI" since="23"/>
-		<field name="ACTION_PLAY_PAUSE"/>
-		<field name="ACTION_PREPARE" since="24"/>
-		<field name="ACTION_PREPARE_FROM_MEDIA_ID" since="24"/>
-		<field name="ACTION_PREPARE_FROM_SEARCH" since="24"/>
-		<field name="ACTION_PREPARE_FROM_URI" since="24"/>
-		<field name="ACTION_REWIND"/>
-		<field name="ACTION_SEEK_TO"/>
-		<field name="ACTION_SET_RATING"/>
-		<field name="ACTION_SKIP_TO_NEXT"/>
-		<field name="ACTION_SKIP_TO_PREVIOUS"/>
-		<field name="ACTION_SKIP_TO_QUEUE_ITEM"/>
-		<field name="ACTION_STOP"/>
-		<field name="CREATOR"/>
-		<field name="PLAYBACK_POSITION_UNKNOWN"/>
-		<field name="STATE_BUFFERING"/>
-		<field name="STATE_CONNECTING"/>
-		<field name="STATE_ERROR"/>
-		<field name="STATE_FAST_FORWARDING"/>
-		<field name="STATE_NONE"/>
-		<field name="STATE_PAUSED"/>
-		<field name="STATE_PLAYING"/>
-		<field name="STATE_REWINDING"/>
-		<field name="STATE_SKIPPING_TO_NEXT"/>
-		<field name="STATE_SKIPPING_TO_PREVIOUS"/>
-		<field name="STATE_SKIPPING_TO_QUEUE_ITEM"/>
-		<field name="STATE_STOPPED"/>
-	</class>
-	<class name="android/media/session/PlaybackState$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/media/session/PlaybackState;)V"/>
-		<method name="addCustomAction(Landroid/media/session/PlaybackState$CustomAction;)Landroid/media/session/PlaybackState$Builder;"/>
-		<method name="addCustomAction(Ljava/lang/String;Ljava/lang/String;I)Landroid/media/session/PlaybackState$Builder;"/>
-		<method name="build()Landroid/media/session/PlaybackState;"/>
-		<method name="setActions(J)Landroid/media/session/PlaybackState$Builder;"/>
-		<method name="setActiveQueueItemId(J)Landroid/media/session/PlaybackState$Builder;"/>
-		<method name="setBufferedPosition(J)Landroid/media/session/PlaybackState$Builder;"/>
-		<method name="setErrorMessage(Ljava/lang/CharSequence;)Landroid/media/session/PlaybackState$Builder;"/>
-		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/session/PlaybackState$Builder;" since="22"/>
-		<method name="setState(IJF)Landroid/media/session/PlaybackState$Builder;"/>
-		<method name="setState(IJFJ)Landroid/media/session/PlaybackState$Builder;"/>
-	</class>
-	<class name="android/media/session/PlaybackState$CustomAction" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getAction()Ljava/lang/String;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getIcon()I"/>
-		<method name="getName()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/media/session/PlaybackState$CustomAction$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
-		<method name="build()Landroid/media/session/PlaybackState$CustomAction;"/>
-		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/session/PlaybackState$CustomAction$Builder;"/>
-	</class>
-	<class name="android/media/tv/TvContentRating" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V" since="29"/>
-		<method name="contains(Landroid/media/tv/TvContentRating;)Z" since="24"/>
-		<method name="createRating(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/media/tv/TvContentRating;"/>
-		<method name="flattenToString()Ljava/lang/String;"/>
-		<method name="getDomain()Ljava/lang/String;"/>
-		<method name="getMainRating()Ljava/lang/String;"/>
-		<method name="getRatingSystem()Ljava/lang/String;"/>
-		<method name="getSubRatings()Ljava/util/List;"/>
-		<method name="unflattenFromString(Ljava/lang/String;)Landroid/media/tv/TvContentRating;"/>
-		<field name="UNRATED" since="23"/>
-	</class>
-	<class name="android/media/tv/TvContract" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="buildChannelLogoUri(J)Landroid/net/Uri;"/>
-		<method name="buildChannelLogoUri(Landroid/net/Uri;)Landroid/net/Uri;"/>
-		<method name="buildChannelUri(J)Landroid/net/Uri;"/>
-		<method name="buildChannelUriForPassthroughInput(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildChannelsUriForInput(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildInputId(Landroid/content/ComponentName;)Ljava/lang/String;"/>
-		<method name="buildPreviewProgramUri(J)Landroid/net/Uri;" since="26"/>
-		<method name="buildPreviewProgramsUriForChannel(J)Landroid/net/Uri;" since="26"/>
-		<method name="buildPreviewProgramsUriForChannel(Landroid/net/Uri;)Landroid/net/Uri;" since="26"/>
-		<method name="buildProgramUri(J)Landroid/net/Uri;"/>
-		<method name="buildProgramsUriForChannel(J)Landroid/net/Uri;"/>
-		<method name="buildProgramsUriForChannel(JJJ)Landroid/net/Uri;"/>
-		<method name="buildProgramsUriForChannel(Landroid/net/Uri;)Landroid/net/Uri;"/>
-		<method name="buildProgramsUriForChannel(Landroid/net/Uri;JJ)Landroid/net/Uri;"/>
-		<method name="buildRecordedProgramUri(J)Landroid/net/Uri;" since="24"/>
-		<method name="buildWatchNextProgramUri(J)Landroid/net/Uri;" since="26"/>
-		<method name="isChannelUri(Landroid/net/Uri;)Z" since="24"/>
-		<method name="isChannelUriForPassthroughInput(Landroid/net/Uri;)Z" since="24"/>
-		<method name="isChannelUriForTunerInput(Landroid/net/Uri;)Z" since="24"/>
-		<method name="isProgramUri(Landroid/net/Uri;)Z" since="24"/>
-		<method name="isRecordedProgramUri(Landroid/net/Uri;)Z" since="27"/>
-		<method name="requestChannelBrowsable(Landroid/content/Context;J)V" since="26"/>
-		<field name="ACTION_INITIALIZE_PROGRAMS" since="26"/>
-		<field name="ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT" since="26"/>
-		<field name="ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED" since="26"/>
-		<field name="ACTION_REQUEST_CHANNEL_BROWSABLE" since="26"/>
-		<field name="ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" since="26"/>
-		<field name="AUTHORITY"/>
-		<field name="EXTRA_CHANNEL_ID" since="26"/>
-		<field name="EXTRA_PREVIEW_PROGRAM_ID" since="26"/>
-		<field name="EXTRA_WATCH_NEXT_PROGRAM_ID" since="26"/>
-	</class>
-	<class name="android/media/tv/TvContract$BaseTvColumns" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<field name="COLUMN_PACKAGE_NAME"/>
-	</class>
-	<class name="android/media/tv/TvContract$Channels" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getVideoResolution(Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="COLUMN_APP_LINK_COLOR" since="23"/>
-		<field name="COLUMN_APP_LINK_ICON_URI" since="23"/>
-		<field name="COLUMN_APP_LINK_INTENT_URI" since="23"/>
-		<field name="COLUMN_APP_LINK_POSTER_ART_URI" since="23"/>
-		<field name="COLUMN_APP_LINK_TEXT" since="23"/>
-		<field name="COLUMN_BROWSABLE" since="26"/>
-		<field name="COLUMN_DESCRIPTION"/>
-		<field name="COLUMN_DISPLAY_NAME"/>
-		<field name="COLUMN_DISPLAY_NUMBER"/>
-		<field name="COLUMN_INPUT_ID"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" since="23"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" since="23"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" since="23"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_ID" since="26"/>
-		<field name="COLUMN_LOCKED" since="26"/>
-		<field name="COLUMN_NETWORK_AFFILIATION"/>
-		<field name="COLUMN_ORIGINAL_NETWORK_ID"/>
-		<field name="COLUMN_SEARCHABLE"/>
-		<field name="COLUMN_SERVICE_ID"/>
-		<field name="COLUMN_SERVICE_TYPE"/>
-		<field name="COLUMN_TRANSIENT" since="26"/>
-		<field name="COLUMN_TRANSPORT_STREAM_ID"/>
-		<field name="COLUMN_TYPE"/>
-		<field name="COLUMN_VERSION_NUMBER"/>
-		<field name="COLUMN_VIDEO_FORMAT"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="SERVICE_TYPE_AUDIO"/>
-		<field name="SERVICE_TYPE_AUDIO_VIDEO"/>
-		<field name="SERVICE_TYPE_OTHER"/>
-		<field name="TYPE_1SEG"/>
-		<field name="TYPE_ATSC_C"/>
-		<field name="TYPE_ATSC_M_H"/>
-		<field name="TYPE_ATSC_T"/>
-		<field name="TYPE_CMMB"/>
-		<field name="TYPE_DTMB"/>
-		<field name="TYPE_DVB_C"/>
-		<field name="TYPE_DVB_C2"/>
-		<field name="TYPE_DVB_H"/>
-		<field name="TYPE_DVB_S"/>
-		<field name="TYPE_DVB_S2"/>
-		<field name="TYPE_DVB_SH"/>
-		<field name="TYPE_DVB_T"/>
-		<field name="TYPE_DVB_T2"/>
-		<field name="TYPE_ISDB_C"/>
-		<field name="TYPE_ISDB_S"/>
-		<field name="TYPE_ISDB_T"/>
-		<field name="TYPE_ISDB_TB"/>
-		<field name="TYPE_NTSC"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_PAL"/>
-		<field name="TYPE_PREVIEW" since="26"/>
-		<field name="TYPE_SECAM"/>
-		<field name="TYPE_S_DMB"/>
-		<field name="TYPE_T_DMB"/>
-		<field name="VIDEO_FORMAT_1080I"/>
-		<field name="VIDEO_FORMAT_1080P"/>
-		<field name="VIDEO_FORMAT_2160P"/>
-		<field name="VIDEO_FORMAT_240P"/>
-		<field name="VIDEO_FORMAT_360P"/>
-		<field name="VIDEO_FORMAT_4320P"/>
-		<field name="VIDEO_FORMAT_480I"/>
-		<field name="VIDEO_FORMAT_480P"/>
-		<field name="VIDEO_FORMAT_576I"/>
-		<field name="VIDEO_FORMAT_576P"/>
-		<field name="VIDEO_FORMAT_720P"/>
-		<field name="VIDEO_RESOLUTION_ED"/>
-		<field name="VIDEO_RESOLUTION_FHD"/>
-		<field name="VIDEO_RESOLUTION_HD"/>
-		<field name="VIDEO_RESOLUTION_SD"/>
-		<field name="VIDEO_RESOLUTION_UHD"/>
-	</class>
-	<class name="android/media/tv/TvContract$Channels$Logo" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-	</class>
-	<class name="android/media/tv/TvContract$PreviewPrograms" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="ASPECT_RATIO_16_9"/>
-		<field name="ASPECT_RATIO_1_1"/>
-		<field name="ASPECT_RATIO_2_3"/>
-		<field name="ASPECT_RATIO_3_2"/>
-		<field name="ASPECT_RATIO_4_3"/>
-		<field name="AVAILABILITY_AVAILABLE"/>
-		<field name="AVAILABILITY_FREE_WITH_SUBSCRIPTION"/>
-		<field name="AVAILABILITY_PAID_CONTENT"/>
-		<field name="COLUMN_AUDIO_LANGUAGE"/>
-		<field name="COLUMN_AUTHOR"/>
-		<field name="COLUMN_AVAILABILITY"/>
-		<field name="COLUMN_BROWSABLE"/>
-		<field name="COLUMN_CANONICAL_GENRE"/>
-		<field name="COLUMN_CHANNEL_ID"/>
-		<field name="COLUMN_CONTENT_ID"/>
-		<field name="COLUMN_CONTENT_RATING"/>
-		<field name="COLUMN_DURATION_MILLIS"/>
-		<field name="COLUMN_EPISODE_DISPLAY_NUMBER"/>
-		<field name="COLUMN_EPISODE_TITLE"/>
-		<field name="COLUMN_INTENT_URI"/>
-		<field name="COLUMN_INTERACTION_COUNT"/>
-		<field name="COLUMN_INTERACTION_TYPE"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_ID"/>
-		<field name="COLUMN_ITEM_COUNT"/>
-		<field name="COLUMN_LAST_PLAYBACK_POSITION_MILLIS"/>
-		<field name="COLUMN_LIVE"/>
-		<field name="COLUMN_LOGO_URI"/>
-		<field name="COLUMN_LONG_DESCRIPTION"/>
-		<field name="COLUMN_OFFER_PRICE"/>
-		<field name="COLUMN_POSTER_ART_ASPECT_RATIO"/>
-		<field name="COLUMN_POSTER_ART_URI"/>
-		<field name="COLUMN_PREVIEW_VIDEO_URI"/>
-		<field name="COLUMN_RELEASE_DATE"/>
-		<field name="COLUMN_REVIEW_RATING"/>
-		<field name="COLUMN_REVIEW_RATING_STYLE"/>
-		<field name="COLUMN_SEARCHABLE"/>
-		<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
-		<field name="COLUMN_SEASON_TITLE"/>
-		<field name="COLUMN_SHORT_DESCRIPTION"/>
-		<field name="COLUMN_STARTING_PRICE"/>
-		<field name="COLUMN_THUMBNAIL_ASPECT_RATIO"/>
-		<field name="COLUMN_THUMBNAIL_URI"/>
-		<field name="COLUMN_TITLE"/>
-		<field name="COLUMN_TRANSIENT"/>
-		<field name="COLUMN_TYPE"/>
-		<field name="COLUMN_VERSION_NUMBER"/>
-		<field name="COLUMN_VIDEO_HEIGHT"/>
-		<field name="COLUMN_VIDEO_WIDTH"/>
-		<field name="COLUMN_WEIGHT"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="INTERACTION_TYPE_FANS"/>
-		<field name="INTERACTION_TYPE_FOLLOWERS"/>
-		<field name="INTERACTION_TYPE_LIKES"/>
-		<field name="INTERACTION_TYPE_LISTENS"/>
-		<field name="INTERACTION_TYPE_THUMBS"/>
-		<field name="INTERACTION_TYPE_VIEWERS"/>
-		<field name="INTERACTION_TYPE_VIEWS"/>
-		<field name="REVIEW_RATING_STYLE_PERCENTAGE"/>
-		<field name="REVIEW_RATING_STYLE_STARS"/>
-		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN"/>
-		<field name="TYPE_ALBUM"/>
-		<field name="TYPE_ARTIST"/>
-		<field name="TYPE_CHANNEL"/>
-		<field name="TYPE_CLIP"/>
-		<field name="TYPE_EVENT"/>
-		<field name="TYPE_MOVIE"/>
-		<field name="TYPE_PLAYLIST"/>
-		<field name="TYPE_STATION"/>
-		<field name="TYPE_TRACK"/>
-		<field name="TYPE_TV_EPISODE"/>
-		<field name="TYPE_TV_SEASON"/>
-		<field name="TYPE_TV_SERIES"/>
-	</class>
-	<class name="android/media/tv/TvContract$Programs" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="COLUMN_AUDIO_LANGUAGE"/>
-		<field name="COLUMN_BROADCAST_GENRE"/>
-		<field name="COLUMN_CANONICAL_GENRE"/>
-		<field name="COLUMN_CHANNEL_ID"/>
-		<field name="COLUMN_CONTENT_RATING"/>
-		<field name="COLUMN_END_TIME_UTC_MILLIS"/>
-		<field name="COLUMN_EPISODE_DISPLAY_NUMBER" since="24"/>
-		<field name="COLUMN_EPISODE_NUMBER" deprecated="24"/>
-		<field name="COLUMN_EPISODE_TITLE"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" since="23"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" since="23"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" since="23"/>
-		<field name="COLUMN_LONG_DESCRIPTION"/>
-		<field name="COLUMN_POSTER_ART_URI"/>
-		<field name="COLUMN_RECORDING_PROHIBITED" since="24"/>
-		<field name="COLUMN_REVIEW_RATING" since="26"/>
-		<field name="COLUMN_REVIEW_RATING_STYLE" since="26"/>
-		<field name="COLUMN_SEARCHABLE" since="23"/>
-		<field name="COLUMN_SEASON_DISPLAY_NUMBER" since="24"/>
-		<field name="COLUMN_SEASON_NUMBER" deprecated="24"/>
-		<field name="COLUMN_SEASON_TITLE" since="24"/>
-		<field name="COLUMN_SHORT_DESCRIPTION"/>
-		<field name="COLUMN_START_TIME_UTC_MILLIS"/>
-		<field name="COLUMN_THUMBNAIL_URI"/>
-		<field name="COLUMN_TITLE"/>
-		<field name="COLUMN_VERSION_NUMBER"/>
-		<field name="COLUMN_VIDEO_HEIGHT"/>
-		<field name="COLUMN_VIDEO_WIDTH"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="REVIEW_RATING_STYLE_PERCENTAGE" since="26"/>
-		<field name="REVIEW_RATING_STYLE_STARS" since="26"/>
-		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" since="26"/>
-	</class>
-	<class name="android/media/tv/TvContract$Programs$Genres" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="decode(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="encode([Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="isCanonical(Ljava/lang/String;)Z" since="24"/>
-		<field name="ANIMAL_WILDLIFE"/>
-		<field name="ARTS" since="22"/>
-		<field name="COMEDY"/>
-		<field name="DRAMA"/>
-		<field name="EDUCATION"/>
-		<field name="ENTERTAINMENT" since="22"/>
-		<field name="FAMILY_KIDS"/>
-		<field name="GAMING"/>
-		<field name="LIFE_STYLE" since="22"/>
-		<field name="MOVIES"/>
-		<field name="MUSIC" since="22"/>
-		<field name="NEWS"/>
-		<field name="PREMIER" since="22"/>
-		<field name="SHOPPING"/>
-		<field name="SPORTS"/>
-		<field name="TECH_SCIENCE" since="22"/>
-		<field name="TRAVEL"/>
-	</class>
-	<class name="android/media/tv/TvContract$RecordedPrograms" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="COLUMN_AUDIO_LANGUAGE"/>
-		<field name="COLUMN_BROADCAST_GENRE"/>
-		<field name="COLUMN_CANONICAL_GENRE"/>
-		<field name="COLUMN_CHANNEL_ID"/>
-		<field name="COLUMN_CONTENT_RATING"/>
-		<field name="COLUMN_END_TIME_UTC_MILLIS"/>
-		<field name="COLUMN_EPISODE_DISPLAY_NUMBER"/>
-		<field name="COLUMN_EPISODE_TITLE"/>
-		<field name="COLUMN_INPUT_ID"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4"/>
-		<field name="COLUMN_LONG_DESCRIPTION"/>
-		<field name="COLUMN_POSTER_ART_URI"/>
-		<field name="COLUMN_RECORDING_DATA_BYTES"/>
-		<field name="COLUMN_RECORDING_DATA_URI"/>
-		<field name="COLUMN_RECORDING_DURATION_MILLIS"/>
-		<field name="COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS"/>
-		<field name="COLUMN_REVIEW_RATING" since="26"/>
-		<field name="COLUMN_REVIEW_RATING_STYLE" since="26"/>
-		<field name="COLUMN_SEARCHABLE"/>
-		<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
-		<field name="COLUMN_SEASON_TITLE"/>
-		<field name="COLUMN_SHORT_DESCRIPTION"/>
-		<field name="COLUMN_START_TIME_UTC_MILLIS"/>
-		<field name="COLUMN_THUMBNAIL_URI"/>
-		<field name="COLUMN_TITLE"/>
-		<field name="COLUMN_VERSION_NUMBER"/>
-		<field name="COLUMN_VIDEO_HEIGHT"/>
-		<field name="COLUMN_VIDEO_WIDTH"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="REVIEW_RATING_STYLE_PERCENTAGE" since="26"/>
-		<field name="REVIEW_RATING_STYLE_STARS" since="26"/>
-		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" since="26"/>
-	</class>
-	<class name="android/media/tv/TvContract$WatchNextPrograms" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="ASPECT_RATIO_16_9"/>
-		<field name="ASPECT_RATIO_1_1"/>
-		<field name="ASPECT_RATIO_2_3"/>
-		<field name="ASPECT_RATIO_3_2"/>
-		<field name="ASPECT_RATIO_4_3"/>
-		<field name="AVAILABILITY_AVAILABLE"/>
-		<field name="AVAILABILITY_FREE_WITH_SUBSCRIPTION"/>
-		<field name="AVAILABILITY_PAID_CONTENT"/>
-		<field name="COLUMN_AUDIO_LANGUAGE"/>
-		<field name="COLUMN_AUTHOR"/>
-		<field name="COLUMN_AVAILABILITY"/>
-		<field name="COLUMN_BROWSABLE"/>
-		<field name="COLUMN_CANONICAL_GENRE"/>
-		<field name="COLUMN_CONTENT_ID"/>
-		<field name="COLUMN_CONTENT_RATING"/>
-		<field name="COLUMN_DURATION_MILLIS"/>
-		<field name="COLUMN_EPISODE_DISPLAY_NUMBER"/>
-		<field name="COLUMN_EPISODE_TITLE"/>
-		<field name="COLUMN_INTENT_URI"/>
-		<field name="COLUMN_INTERACTION_COUNT"/>
-		<field name="COLUMN_INTERACTION_TYPE"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4"/>
-		<field name="COLUMN_INTERNAL_PROVIDER_ID"/>
-		<field name="COLUMN_ITEM_COUNT"/>
-		<field name="COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS"/>
-		<field name="COLUMN_LAST_PLAYBACK_POSITION_MILLIS"/>
-		<field name="COLUMN_LIVE"/>
-		<field name="COLUMN_LOGO_URI"/>
-		<field name="COLUMN_LONG_DESCRIPTION"/>
-		<field name="COLUMN_OFFER_PRICE"/>
-		<field name="COLUMN_POSTER_ART_ASPECT_RATIO"/>
-		<field name="COLUMN_POSTER_ART_URI"/>
-		<field name="COLUMN_PREVIEW_VIDEO_URI"/>
-		<field name="COLUMN_RELEASE_DATE"/>
-		<field name="COLUMN_REVIEW_RATING"/>
-		<field name="COLUMN_REVIEW_RATING_STYLE"/>
-		<field name="COLUMN_SEARCHABLE"/>
-		<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
-		<field name="COLUMN_SEASON_TITLE"/>
-		<field name="COLUMN_SHORT_DESCRIPTION"/>
-		<field name="COLUMN_STARTING_PRICE"/>
-		<field name="COLUMN_THUMBNAIL_ASPECT_RATIO"/>
-		<field name="COLUMN_THUMBNAIL_URI"/>
-		<field name="COLUMN_TITLE"/>
-		<field name="COLUMN_TRANSIENT"/>
-		<field name="COLUMN_TYPE"/>
-		<field name="COLUMN_VERSION_NUMBER"/>
-		<field name="COLUMN_VIDEO_HEIGHT"/>
-		<field name="COLUMN_VIDEO_WIDTH"/>
-		<field name="COLUMN_WATCH_NEXT_TYPE"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="INTERACTION_TYPE_FANS"/>
-		<field name="INTERACTION_TYPE_FOLLOWERS"/>
-		<field name="INTERACTION_TYPE_LIKES"/>
-		<field name="INTERACTION_TYPE_LISTENS"/>
-		<field name="INTERACTION_TYPE_THUMBS"/>
-		<field name="INTERACTION_TYPE_VIEWERS"/>
-		<field name="INTERACTION_TYPE_VIEWS"/>
-		<field name="REVIEW_RATING_STYLE_PERCENTAGE"/>
-		<field name="REVIEW_RATING_STYLE_STARS"/>
-		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN"/>
-		<field name="TYPE_ALBUM"/>
-		<field name="TYPE_ARTIST"/>
-		<field name="TYPE_CHANNEL"/>
-		<field name="TYPE_CLIP"/>
-		<field name="TYPE_EVENT"/>
-		<field name="TYPE_MOVIE"/>
-		<field name="TYPE_PLAYLIST"/>
-		<field name="TYPE_STATION"/>
-		<field name="TYPE_TRACK"/>
-		<field name="TYPE_TV_EPISODE"/>
-		<field name="TYPE_TV_SEASON"/>
-		<field name="TYPE_TV_SERIES"/>
-		<field name="WATCH_NEXT_TYPE_CONTINUE"/>
-		<field name="WATCH_NEXT_TYPE_NEW"/>
-		<field name="WATCH_NEXT_TYPE_NEXT"/>
-		<field name="WATCH_NEXT_TYPE_WATCHLIST"/>
-	</class>
-	<class name="android/media/tv/TvInputInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="canRecord()Z" since="24"/>
-		<method name="createSettingsIntent()Landroid/content/Intent;" deprecated="26"/>
-		<method name="createSetupIntent()Landroid/content/Intent;"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="24"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getParentId()Ljava/lang/String;"/>
-		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
-		<method name="getTunerCount()I" since="24"/>
-		<method name="getType()I"/>
-		<method name="isHidden(Landroid/content/Context;)Z" since="24"/>
-		<method name="isPassthroughInput()Z"/>
-		<method name="loadCustomLabel(Landroid/content/Context;)Ljava/lang/CharSequence;" since="24"/>
-		<method name="loadIcon(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_INPUT_ID"/>
-		<field name="TYPE_COMPONENT"/>
-		<field name="TYPE_COMPOSITE"/>
-		<field name="TYPE_DISPLAY_PORT"/>
-		<field name="TYPE_DVI"/>
-		<field name="TYPE_HDMI"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_SCART"/>
-		<field name="TYPE_SVIDEO"/>
-		<field name="TYPE_TUNER"/>
-		<field name="TYPE_VGA"/>
-	</class>
-	<class name="android/media/tv/TvInputInfo$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;)V"/>
-		<method name="build()Landroid/media/tv/TvInputInfo;"/>
-		<method name="setCanRecord(Z)Landroid/media/tv/TvInputInfo$Builder;"/>
-		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/tv/TvInputInfo$Builder;"/>
-		<method name="setTunerCount(I)Landroid/media/tv/TvInputInfo$Builder;"/>
-	</class>
-	<class name="android/media/tv/TvInputManager" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBlockedRatings()Ljava/util/List;" since="28"/>
-		<method name="getInputState(Ljava/lang/String;)I"/>
-		<method name="getTvInputInfo(Ljava/lang/String;)Landroid/media/tv/TvInputInfo;"/>
-		<method name="getTvInputList()Ljava/util/List;"/>
-		<method name="isParentalControlsEnabled()Z"/>
-		<method name="isRatingBlocked(Landroid/media/tv/TvContentRating;)Z"/>
-		<method name="registerCallback(Landroid/media/tv/TvInputManager$TvInputCallback;Landroid/os/Handler;)V"/>
-		<method name="unregisterCallback(Landroid/media/tv/TvInputManager$TvInputCallback;)V"/>
-		<method name="updateTvInputInfo(Landroid/media/tv/TvInputInfo;)V" since="24"/>
-		<field name="ACTION_BLOCKED_RATINGS_CHANGED"/>
-		<field name="ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED"/>
-		<field name="ACTION_QUERY_CONTENT_RATING_SYSTEMS"/>
-		<field name="ACTION_SETUP_INPUTS" since="24"/>
-		<field name="ACTION_VIEW_RECORDING_SCHEDULES" since="26"/>
-		<field name="INPUT_STATE_CONNECTED"/>
-		<field name="INPUT_STATE_CONNECTED_STANDBY"/>
-		<field name="INPUT_STATE_DISCONNECTED"/>
-		<field name="META_DATA_CONTENT_RATING_SYSTEMS"/>
-		<field name="RECORDING_ERROR_INSUFFICIENT_SPACE" since="24"/>
-		<field name="RECORDING_ERROR_RESOURCE_BUSY" since="24"/>
-		<field name="RECORDING_ERROR_UNKNOWN" since="24"/>
-		<field name="TIME_SHIFT_INVALID_TIME" since="23"/>
-		<field name="TIME_SHIFT_STATUS_AVAILABLE" since="23"/>
-		<field name="TIME_SHIFT_STATUS_UNAVAILABLE" since="23"/>
-		<field name="TIME_SHIFT_STATUS_UNKNOWN" since="23"/>
-		<field name="TIME_SHIFT_STATUS_UNSUPPORTED" since="23"/>
-		<field name="VIDEO_UNAVAILABLE_REASON_AUDIO_ONLY" since="23"/>
-		<field name="VIDEO_UNAVAILABLE_REASON_BUFFERING"/>
-		<field name="VIDEO_UNAVAILABLE_REASON_TUNING"/>
-		<field name="VIDEO_UNAVAILABLE_REASON_UNKNOWN"/>
-		<field name="VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL"/>
-	</class>
-	<class name="android/media/tv/TvInputManager$TvInputCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onInputAdded(Ljava/lang/String;)V"/>
-		<method name="onInputRemoved(Ljava/lang/String;)V"/>
-		<method name="onInputStateChanged(Ljava/lang/String;I)V"/>
-		<method name="onInputUpdated(Ljava/lang/String;)V" since="24"/>
-		<method name="onTvInputInfoUpdated(Landroid/media/tv/TvInputInfo;)V" since="24"/>
-	</class>
-	<class name="android/media/tv/TvInputService" since="21">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCreateRecordingSession(Ljava/lang/String;)Landroid/media/tv/TvInputService$RecordingSession;" since="24"/>
-		<method name="onCreateSession(Ljava/lang/String;)Landroid/media/tv/TvInputService$Session;"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/media/tv/TvInputService$HardwareSession" since="21">
-		<extends name="android/media/tv/TvInputService$Session"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="getHardwareInputId()Ljava/lang/String;"/>
-		<method name="onHardwareVideoAvailable()V"/>
-		<method name="onHardwareVideoUnavailable(I)V"/>
-	</class>
-	<class name="android/media/tv/TvInputService$RecordingSession" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="notifyError(I)V"/>
-		<method name="notifyRecordingStopped(Landroid/net/Uri;)V"/>
-		<method name="notifyTuned(Landroid/net/Uri;)V"/>
-		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="onRelease()V"/>
-		<method name="onStartRecording(Landroid/net/Uri;)V"/>
-		<method name="onStopRecording()V"/>
-		<method name="onTune(Landroid/net/Uri;)V"/>
-		<method name="onTune(Landroid/net/Uri;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/media/tv/TvInputService$Session" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/KeyEvent$Callback"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="layoutSurface(IIII)V" since="23"/>
-		<method name="notifyChannelRetuned(Landroid/net/Uri;)V"/>
-		<method name="notifyContentAllowed()V"/>
-		<method name="notifyContentBlocked(Landroid/media/tv/TvContentRating;)V"/>
-		<method name="notifyTimeShiftStatusChanged(I)V" since="23"/>
-		<method name="notifyTrackSelected(ILjava/lang/String;)V"/>
-		<method name="notifyTracksChanged(Ljava/util/List;)V"/>
-		<method name="notifyVideoAvailable()V"/>
-		<method name="notifyVideoUnavailable(I)V"/>
-		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-		<method name="onCreateOverlayView()Landroid/view/View;"/>
-		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onOverlayViewSizeChanged(II)V" since="23"/>
-		<method name="onRelease()V"/>
-		<method name="onSelectTrack(ILjava/lang/String;)Z"/>
-		<method name="onSetCaptionEnabled(Z)V"/>
-		<method name="onSetStreamVolume(F)V"/>
-		<method name="onSetSurface(Landroid/view/Surface;)Z"/>
-		<method name="onSurfaceChanged(III)V"/>
-		<method name="onTimeShiftGetCurrentPosition()J" since="23"/>
-		<method name="onTimeShiftGetStartPosition()J" since="23"/>
-		<method name="onTimeShiftPause()V" since="23"/>
-		<method name="onTimeShiftPlay(Landroid/net/Uri;)V" since="24"/>
-		<method name="onTimeShiftResume()V" since="23"/>
-		<method name="onTimeShiftSeekTo(J)V" since="23"/>
-		<method name="onTimeShiftSetPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onTune(Landroid/net/Uri;)Z"/>
-		<method name="onTune(Landroid/net/Uri;Landroid/os/Bundle;)Z" since="24"/>
-		<method name="onUnblockContent(Landroid/media/tv/TvContentRating;)V"/>
-		<method name="setOverlayViewEnabled(Z)V"/>
-	</class>
-	<class name="android/media/tv/TvRecordingClient" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/media/tv/TvRecordingClient$RecordingCallback;Landroid/os/Handler;)V"/>
-		<method name="release()V"/>
-		<method name="sendAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="startRecording(Landroid/net/Uri;)V"/>
-		<method name="stopRecording()V"/>
-		<method name="tune(Ljava/lang/String;Landroid/net/Uri;)V"/>
-		<method name="tune(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/media/tv/TvRecordingClient$RecordingCallback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onConnectionFailed(Ljava/lang/String;)V"/>
-		<method name="onDisconnected(Ljava/lang/String;)V"/>
-		<method name="onError(I)V"/>
-		<method name="onRecordingStopped(Landroid/net/Uri;)V"/>
-		<method name="onTuned(Landroid/net/Uri;)V"/>
-	</class>
-	<class name="android/media/tv/TvTrackInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getAudioChannelCount()I"/>
-		<method name="getAudioSampleRate()I"/>
-		<method name="getDescription()Ljava/lang/CharSequence;" since="23"/>
-		<method name="getExtra()Landroid/os/Bundle;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getLanguage()Ljava/lang/String;"/>
-		<method name="getType()I"/>
-		<method name="getVideoActiveFormatDescription()B" since="24"/>
-		<method name="getVideoFrameRate()F"/>
-		<method name="getVideoHeight()I"/>
-		<method name="getVideoPixelAspectRatio()F" since="23"/>
-		<method name="getVideoWidth()I"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_AUDIO"/>
-		<field name="TYPE_SUBTITLE"/>
-		<field name="TYPE_VIDEO"/>
-	</class>
-	<class name="android/media/tv/TvTrackInfo$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-		<method name="build()Landroid/media/tv/TvTrackInfo;"/>
-		<method name="setAudioChannelCount(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
-		<method name="setAudioSampleRate(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
-		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/tv/TvTrackInfo$Builder;" since="23"/>
-		<method name="setExtra(Landroid/os/Bundle;)Landroid/media/tv/TvTrackInfo$Builder;"/>
-		<method name="setLanguage(Ljava/lang/String;)Landroid/media/tv/TvTrackInfo$Builder;"/>
-		<method name="setVideoActiveFormatDescription(B)Landroid/media/tv/TvTrackInfo$Builder;" since="24"/>
-		<method name="setVideoFrameRate(F)Landroid/media/tv/TvTrackInfo$Builder;"/>
-		<method name="setVideoHeight(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
-		<method name="setVideoPixelAspectRatio(F)Landroid/media/tv/TvTrackInfo$Builder;" since="23"/>
-		<method name="setVideoWidth(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
-	</class>
-	<class name="android/media/tv/TvView" since="21">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="dispatchUnhandledInputEvent(Landroid/view/InputEvent;)Z"/>
-		<method name="getSelectedTrack(I)Ljava/lang/String;"/>
-		<method name="getTracks(I)Ljava/util/List;"/>
-		<method name="onUnhandledInputEvent(Landroid/view/InputEvent;)Z"/>
-		<method name="reset()V"/>
-		<method name="selectTrack(ILjava/lang/String;)V"/>
-		<method name="sendAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-		<method name="setCallback(Landroid/media/tv/TvView$TvInputCallback;)V"/>
-		<method name="setCaptionEnabled(Z)V"/>
-		<method name="setOnUnhandledInputEventListener(Landroid/media/tv/TvView$OnUnhandledInputEventListener;)V"/>
-		<method name="setStreamVolume(F)V"/>
-		<method name="setTimeShiftPositionCallback(Landroid/media/tv/TvView$TimeShiftPositionCallback;)V" since="23"/>
-		<method name="setZOrderMediaOverlay(Z)V" since="24"/>
-		<method name="setZOrderOnTop(Z)V" since="24"/>
-		<method name="timeShiftPause()V" since="23"/>
-		<method name="timeShiftPlay(Ljava/lang/String;Landroid/net/Uri;)V" since="24"/>
-		<method name="timeShiftResume()V" since="23"/>
-		<method name="timeShiftSeekTo(J)V" since="23"/>
-		<method name="timeShiftSetPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
-		<method name="tune(Ljava/lang/String;Landroid/net/Uri;)V"/>
-		<method name="tune(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V" since="24"/>
-	</class>
-	<class name="android/media/tv/TvView$OnUnhandledInputEventListener" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="onUnhandledInputEvent(Landroid/view/InputEvent;)Z"/>
-	</class>
-	<class name="android/media/tv/TvView$TimeShiftPositionCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onTimeShiftCurrentPositionChanged(Ljava/lang/String;J)V"/>
-		<method name="onTimeShiftStartPositionChanged(Ljava/lang/String;J)V"/>
-	</class>
-	<class name="android/media/tv/TvView$TvInputCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onChannelRetuned(Ljava/lang/String;Landroid/net/Uri;)V"/>
-		<method name="onConnectionFailed(Ljava/lang/String;)V"/>
-		<method name="onContentAllowed(Ljava/lang/String;)V"/>
-		<method name="onContentBlocked(Ljava/lang/String;Landroid/media/tv/TvContentRating;)V"/>
-		<method name="onDisconnected(Ljava/lang/String;)V"/>
-		<method name="onTimeShiftStatusChanged(Ljava/lang/String;I)V" since="23"/>
-		<method name="onTrackSelected(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="onTracksChanged(Ljava/lang/String;Ljava/util/List;)V"/>
-		<method name="onVideoAvailable(Ljava/lang/String;)V"/>
-		<method name="onVideoSizeChanged(Ljava/lang/String;II)V"/>
-		<method name="onVideoUnavailable(Ljava/lang/String;I)V"/>
-	</class>
-	<class name="android/mtp/MtpConstants" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isAbstractObject(I)Z"/>
-		<field name="ASSOCIATION_TYPE_GENERIC_FOLDER"/>
-		<field name="FORMAT_3GP_CONTAINER"/>
-		<field name="FORMAT_AAC"/>
-		<field name="FORMAT_ABSTRACT_AUDIO_ALBUM"/>
-		<field name="FORMAT_ABSTRACT_AUDIO_PLAYLIST"/>
-		<field name="FORMAT_ABSTRACT_AV_PLAYLIST"/>
-		<field name="FORMAT_ABSTRACT_DOCUMENT"/>
-		<field name="FORMAT_ABSTRACT_IMAGE_ALBUM"/>
-		<field name="FORMAT_ABSTRACT_MEDIACAST"/>
-		<field name="FORMAT_ABSTRACT_MULTIMEDIA_ALBUM"/>
-		<field name="FORMAT_ABSTRACT_VIDEO_ALBUM"/>
-		<field name="FORMAT_ABSTRACT_VIDEO_PLAYLIST"/>
-		<field name="FORMAT_AIFF"/>
-		<field name="FORMAT_ASF"/>
-		<field name="FORMAT_ASSOCIATION"/>
-		<field name="FORMAT_ASX_PLAYLIST"/>
-		<field name="FORMAT_AUDIBLE"/>
-		<field name="FORMAT_AVI"/>
-		<field name="FORMAT_BMP"/>
-		<field name="FORMAT_DEFINED" since="24"/>
-		<field name="FORMAT_DNG" since="24"/>
-		<field name="FORMAT_DPOF"/>
-		<field name="FORMAT_EXECUTABLE"/>
-		<field name="FORMAT_EXIF_JPEG"/>
-		<field name="FORMAT_FLAC"/>
-		<field name="FORMAT_GIF"/>
-		<field name="FORMAT_HTML"/>
-		<field name="FORMAT_JFIF"/>
-		<field name="FORMAT_JP2"/>
-		<field name="FORMAT_JPX"/>
-		<field name="FORMAT_M3U_PLAYLIST"/>
-		<field name="FORMAT_MP2"/>
-		<field name="FORMAT_MP3"/>
-		<field name="FORMAT_MP4_CONTAINER"/>
-		<field name="FORMAT_MPEG"/>
-		<field name="FORMAT_MPL_PLAYLIST"/>
-		<field name="FORMAT_MS_EXCEL_SPREADSHEET"/>
-		<field name="FORMAT_MS_POWERPOINT_PRESENTATION"/>
-		<field name="FORMAT_MS_WORD_DOCUMENT"/>
-		<field name="FORMAT_OGG"/>
-		<field name="FORMAT_PICT"/>
-		<field name="FORMAT_PLS_PLAYLIST"/>
-		<field name="FORMAT_PNG"/>
-		<field name="FORMAT_SCRIPT"/>
-		<field name="FORMAT_TEXT"/>
-		<field name="FORMAT_TIFF"/>
-		<field name="FORMAT_TIFF_EP"/>
-		<field name="FORMAT_UNDEFINED"/>
-		<field name="FORMAT_UNDEFINED_AUDIO"/>
-		<field name="FORMAT_UNDEFINED_COLLECTION"/>
-		<field name="FORMAT_UNDEFINED_DOCUMENT"/>
-		<field name="FORMAT_UNDEFINED_FIRMWARE"/>
-		<field name="FORMAT_UNDEFINED_VIDEO"/>
-		<field name="FORMAT_WAV"/>
-		<field name="FORMAT_WINDOWS_IMAGE_FORMAT"/>
-		<field name="FORMAT_WMA"/>
-		<field name="FORMAT_WMV"/>
-		<field name="FORMAT_WPL_PLAYLIST"/>
-		<field name="FORMAT_XML_DOCUMENT"/>
-		<field name="OPERATION_CLOSE_SESSION" since="24"/>
-		<field name="OPERATION_COPY_OBJECT" since="24"/>
-		<field name="OPERATION_DELETE_OBJECT" since="24"/>
-		<field name="OPERATION_FORMAT_STORE" since="24"/>
-		<field name="OPERATION_GET_DEVICE_INFO" since="24"/>
-		<field name="OPERATION_GET_DEVICE_PROP_DESC" since="24"/>
-		<field name="OPERATION_GET_DEVICE_PROP_VALUE" since="24"/>
-		<field name="OPERATION_GET_NUM_OBJECTS" since="24"/>
-		<field name="OPERATION_GET_OBJECT" since="24"/>
-		<field name="OPERATION_GET_OBJECT_HANDLES" since="24"/>
-		<field name="OPERATION_GET_OBJECT_INFO" since="24"/>
-		<field name="OPERATION_GET_OBJECT_PROPS_SUPPORTED" since="24"/>
-		<field name="OPERATION_GET_OBJECT_PROP_DESC" since="24"/>
-		<field name="OPERATION_GET_OBJECT_PROP_VALUE" since="24"/>
-		<field name="OPERATION_GET_OBJECT_REFERENCES" since="24"/>
-		<field name="OPERATION_GET_PARTIAL_OBJECT" since="24"/>
-		<field name="OPERATION_GET_PARTIAL_OBJECT_64" since="24"/>
-		<field name="OPERATION_GET_STORAGE_INFO" since="24"/>
-		<field name="OPERATION_GET_STORAGE_I_DS" since="24"/>
-		<field name="OPERATION_GET_THUMB" since="24"/>
-		<field name="OPERATION_INITIATE_CAPTURE" since="24"/>
-		<field name="OPERATION_INITIATE_OPEN_CAPTURE" since="24"/>
-		<field name="OPERATION_MOVE_OBJECT" since="24"/>
-		<field name="OPERATION_OPEN_SESSION" since="24"/>
-		<field name="OPERATION_POWER_DOWN" since="24"/>
-		<field name="OPERATION_RESET_DEVICE" since="24"/>
-		<field name="OPERATION_RESET_DEVICE_PROP_VALUE" since="24"/>
-		<field name="OPERATION_SELF_TEST" since="24"/>
-		<field name="OPERATION_SEND_OBJECT" since="24"/>
-		<field name="OPERATION_SEND_OBJECT_INFO" since="24"/>
-		<field name="OPERATION_SET_DEVICE_PROP_VALUE" since="24"/>
-		<field name="OPERATION_SET_OBJECT_PROP_VALUE" since="24"/>
-		<field name="OPERATION_SET_OBJECT_PROTECTION" since="24"/>
-		<field name="OPERATION_SET_OBJECT_REFERENCES" since="24"/>
-		<field name="OPERATION_SKIP" since="24"/>
-		<field name="OPERATION_TERMINATE_OPEN_CAPTURE" since="24"/>
-		<field name="PROTECTION_STATUS_NONE"/>
-		<field name="PROTECTION_STATUS_NON_TRANSFERABLE_DATA"/>
-		<field name="PROTECTION_STATUS_READ_ONLY"/>
-		<field name="PROTECTION_STATUS_READ_ONLY_DATA"/>
-	</class>
-	<class name="android/mtp/MtpDevice" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/hardware/usb/UsbDevice;)V"/>
-		<method name="close()V"/>
-		<method name="deleteObject(I)Z"/>
-		<method name="getDeviceId()I"/>
-		<method name="getDeviceInfo()Landroid/mtp/MtpDeviceInfo;"/>
-		<method name="getDeviceName()Ljava/lang/String;"/>
-		<method name="getObject(II)[B"/>
-		<method name="getObjectHandles(III)[I"/>
-		<method name="getObjectInfo(I)Landroid/mtp/MtpObjectInfo;"/>
-		<method name="getParent(I)J"/>
-		<method name="getPartialObject(IJJ[B)J" since="24"/>
-		<method name="getPartialObject64(IJJ[B)J" since="24"/>
-		<method name="getStorageId(I)J"/>
-		<method name="getStorageIds()[I"/>
-		<method name="getStorageInfo(I)Landroid/mtp/MtpStorageInfo;"/>
-		<method name="getThumbnail(I)[B"/>
-		<method name="importFile(ILandroid/os/ParcelFileDescriptor;)Z" since="24"/>
-		<method name="importFile(ILjava/lang/String;)Z"/>
-		<method name="open(Landroid/hardware/usb/UsbDeviceConnection;)Z"/>
-		<method name="readEvent(Landroid/os/CancellationSignal;)Landroid/mtp/MtpEvent;" since="24"/>
-		<method name="sendObject(IJLandroid/os/ParcelFileDescriptor;)Z" since="24"/>
-		<method name="sendObjectInfo(Landroid/mtp/MtpObjectInfo;)Landroid/mtp/MtpObjectInfo;" since="24"/>
-	</class>
-	<class name="android/mtp/MtpDeviceInfo" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEventsSupported()[I" since="24"/>
-		<method name="getManufacturer()Ljava/lang/String;"/>
-		<method name="getModel()Ljava/lang/String;"/>
-		<method name="getOperationsSupported()[I" since="24"/>
-		<method name="getSerialNumber()Ljava/lang/String;"/>
-		<method name="getVersion()Ljava/lang/String;"/>
-		<method name="isEventSupported(I)Z" since="24"/>
-		<method name="isOperationSupported(I)Z" since="24"/>
-	</class>
-	<class name="android/mtp/MtpEvent" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDevicePropCode()I"/>
-		<method name="getEventCode()I"/>
-		<method name="getObjectFormatCode()I"/>
-		<method name="getObjectHandle()I"/>
-		<method name="getObjectPropCode()I"/>
-		<method name="getParameter1()I"/>
-		<method name="getParameter2()I"/>
-		<method name="getParameter3()I"/>
-		<method name="getStorageId()I"/>
-		<method name="getTransactionId()I"/>
-		<field name="EVENT_CANCEL_TRANSACTION"/>
-		<field name="EVENT_CAPTURE_COMPLETE"/>
-		<field name="EVENT_DEVICE_INFO_CHANGED"/>
-		<field name="EVENT_DEVICE_PROP_CHANGED"/>
-		<field name="EVENT_DEVICE_RESET"/>
-		<field name="EVENT_OBJECT_ADDED"/>
-		<field name="EVENT_OBJECT_INFO_CHANGED"/>
-		<field name="EVENT_OBJECT_PROP_CHANGED"/>
-		<field name="EVENT_OBJECT_PROP_DESC_CHANGED"/>
-		<field name="EVENT_OBJECT_REFERENCES_CHANGED"/>
-		<field name="EVENT_OBJECT_REMOVED"/>
-		<field name="EVENT_REQUEST_OBJECT_TRANSFER"/>
-		<field name="EVENT_STORAGE_INFO_CHANGED"/>
-		<field name="EVENT_STORE_ADDED"/>
-		<field name="EVENT_STORE_FULL"/>
-		<field name="EVENT_STORE_REMOVED"/>
-		<field name="EVENT_UNDEFINED"/>
-		<field name="EVENT_UNREPORTED_STATUS"/>
-	</class>
-	<class name="android/mtp/MtpObjectInfo" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAssociationDesc()I"/>
-		<method name="getAssociationType()I"/>
-		<method name="getCompressedSize()I"/>
-		<method name="getCompressedSizeLong()J" since="24"/>
-		<method name="getDateCreated()J"/>
-		<method name="getDateModified()J"/>
-		<method name="getFormat()I"/>
-		<method name="getImagePixDepth()I"/>
-		<method name="getImagePixDepthLong()J" since="24"/>
-		<method name="getImagePixHeight()I"/>
-		<method name="getImagePixHeightLong()J" since="24"/>
-		<method name="getImagePixWidth()I"/>
-		<method name="getImagePixWidthLong()J" since="24"/>
-		<method name="getKeywords()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getObjectHandle()I"/>
-		<method name="getParent()I"/>
-		<method name="getProtectionStatus()I"/>
-		<method name="getSequenceNumber()I"/>
-		<method name="getSequenceNumberLong()J" since="24"/>
-		<method name="getStorageId()I"/>
-		<method name="getThumbCompressedSize()I"/>
-		<method name="getThumbCompressedSizeLong()J" since="24"/>
-		<method name="getThumbFormat()I"/>
-		<method name="getThumbPixHeight()I"/>
-		<method name="getThumbPixHeightLong()J" since="24"/>
-		<method name="getThumbPixWidth()I"/>
-		<method name="getThumbPixWidthLong()J" since="24"/>
-	</class>
-	<class name="android/mtp/MtpObjectInfo$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/mtp/MtpObjectInfo;)V"/>
-		<method name="build()Landroid/mtp/MtpObjectInfo;"/>
-		<method name="setAssociationDesc(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setAssociationType(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setCompressedSize(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setDateCreated(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setDateModified(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setFormat(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setImagePixDepth(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setImagePixHeight(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setImagePixWidth(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setKeywords(Ljava/lang/String;)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setName(Ljava/lang/String;)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setObjectHandle(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setParent(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setProtectionStatus(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setSequenceNumber(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setStorageId(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setThumbCompressedSize(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setThumbFormat(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setThumbPixHeight(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-		<method name="setThumbPixWidth(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
-	</class>
-	<class name="android/mtp/MtpStorageInfo" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getFreeSpace()J"/>
-		<method name="getMaxCapacity()J"/>
-		<method name="getStorageId()I"/>
-		<method name="getVolumeIdentifier()Ljava/lang/String;"/>
-	</class>
-	<class name="android/net/CaptivePortal" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/IBinder;)V" since="29"/>
-		<method name="ignoreNetwork()V"/>
-		<method name="reportCaptivePortalDismissed()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/ConnectivityManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addDefaultNetworkActiveListener(Landroid/net/ConnectivityManager$OnNetworkActiveListener;)V" since="21"/>
-		<method name="bindProcessToNetwork(Landroid/net/Network;)Z" since="23"/>
-		<method name="getActiveNetwork()Landroid/net/Network;" since="23"/>
-		<method name="getActiveNetworkInfo()Landroid/net/NetworkInfo;"/>
-		<method name="getAllNetworkInfo()[Landroid/net/NetworkInfo;" deprecated="23"/>
-		<method name="getAllNetworks()[Landroid/net/Network;" since="21"/>
-		<method name="getBackgroundDataSetting()Z" since="3" deprecated="16"/>
-		<method name="getBoundNetworkForProcess()Landroid/net/Network;" since="23"/>
-		<method name="getDefaultProxy()Landroid/net/ProxyInfo;" since="23"/>
-		<method name="getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;" since="21"/>
-		<method name="getMultipathPreference(Landroid/net/Network;)I" since="26"/>
-		<method name="getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;" since="21"/>
-		<method name="getNetworkInfo(I)Landroid/net/NetworkInfo;" deprecated="23"/>
-		<method name="getNetworkInfo(Landroid/net/Network;)Landroid/net/NetworkInfo;" since="21"/>
-		<method name="getNetworkPreference()I" deprecated="21"/>
-		<method name="getNetworkWatchlistConfigHash()[B" since="28"/>
-		<method name="getProcessDefaultNetwork()Landroid/net/Network;" since="21" deprecated="23"/>
-		<method name="getRestrictBackgroundStatus()I" since="24"/>
-		<method name="isActiveNetworkMetered()Z" since="16"/>
-		<method name="isDefaultNetworkActive()Z" since="21"/>
-		<method name="isNetworkTypeValid(I)Z" deprecated="23"/>
-		<method name="registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V" since="24"/>
-		<method name="registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/app/PendingIntent;)V" since="23"/>
-		<method name="registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;)V" since="21"/>
-		<method name="registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="releaseNetworkRequest(Landroid/app/PendingIntent;)V" since="22"/>
-		<method name="removeDefaultNetworkActiveListener(Landroid/net/ConnectivityManager$OnNetworkActiveListener;)V" since="21"/>
-		<method name="reportBadNetwork(Landroid/net/Network;)V" since="21" deprecated="23"/>
-		<method name="reportNetworkConnectivity(Landroid/net/Network;Z)V" since="23"/>
-		<method name="requestBandwidthUpdate(Landroid/net/Network;)Z" since="23"/>
-		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/app/PendingIntent;)V" since="22"/>
-		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;)V" since="21"/>
-		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;I)V" since="26"/>
-		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;I)V" since="26"/>
-		<method name="requestRouteToHost(II)Z" deprecated="21" removed="26"/>
-		<method name="setNetworkPreference(I)V" deprecated="21"/>
-		<method name="setProcessDefaultNetwork(Landroid/net/Network;)Z" since="21" deprecated="23"/>
-		<method name="startUsingNetworkFeature(ILjava/lang/String;)I" deprecated="21" removed="26"/>
-		<method name="stopUsingNetworkFeature(ILjava/lang/String;)I" deprecated="21" removed="26"/>
-		<method name="unregisterNetworkCallback(Landroid/app/PendingIntent;)V" since="23"/>
-		<method name="unregisterNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V" since="21"/>
-		<field name="ACTION_BACKGROUND_DATA_SETTING_CHANGED" since="3" deprecated="16"/>
-		<field name="ACTION_CAPTIVE_PORTAL_SIGN_IN" since="23"/>
-		<field name="ACTION_RESTRICT_BACKGROUND_CHANGED" since="24"/>
-		<field name="CONNECTIVITY_ACTION" deprecated="28"/>
-		<field name="DEFAULT_NETWORK_PREFERENCE" deprecated="18"/>
-		<field name="EXTRA_CAPTIVE_PORTAL" since="23"/>
-		<field name="EXTRA_CAPTIVE_PORTAL_URL" since="24"/>
-		<field name="EXTRA_EXTRA_INFO"/>
-		<field name="EXTRA_IS_FAILOVER"/>
-		<field name="EXTRA_NETWORK" since="22"/>
-		<field name="EXTRA_NETWORK_INFO" deprecated="16"/>
-		<field name="EXTRA_NETWORK_REQUEST" since="22"/>
-		<field name="EXTRA_NETWORK_TYPE" since="17"/>
-		<field name="EXTRA_NO_CONNECTIVITY"/>
-		<field name="EXTRA_OTHER_NETWORK_INFO"/>
-		<field name="EXTRA_REASON"/>
-		<field name="MULTIPATH_PREFERENCE_HANDOVER" since="26"/>
-		<field name="MULTIPATH_PREFERENCE_PERFORMANCE" since="26"/>
-		<field name="MULTIPATH_PREFERENCE_RELIABILITY" since="26"/>
-		<field name="RESTRICT_BACKGROUND_STATUS_DISABLED" since="24"/>
-		<field name="RESTRICT_BACKGROUND_STATUS_ENABLED" since="24"/>
-		<field name="RESTRICT_BACKGROUND_STATUS_WHITELISTED" since="24"/>
-		<field name="TYPE_BLUETOOTH" since="13" deprecated="28"/>
-		<field name="TYPE_DUMMY" since="14" deprecated="28"/>
-		<field name="TYPE_ETHERNET" since="13" deprecated="28"/>
-		<field name="TYPE_MOBILE" deprecated="28"/>
-		<field name="TYPE_MOBILE_DUN" since="8" deprecated="28"/>
-		<field name="TYPE_MOBILE_HIPRI" since="8" deprecated="23"/>
-		<field name="TYPE_MOBILE_MMS" since="8" deprecated="23"/>
-		<field name="TYPE_MOBILE_SUPL" since="8" deprecated="23"/>
-		<field name="TYPE_VPN" since="21" deprecated="28"/>
-		<field name="TYPE_WIFI" deprecated="28"/>
-		<field name="TYPE_WIMAX" since="8" deprecated="28"/>
-	</class>
-	<class name="android/net/ConnectivityManager$NetworkCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAvailable(Landroid/net/Network;)V"/>
-		<method name="onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V"/>
-		<method name="onLinkPropertiesChanged(Landroid/net/Network;Landroid/net/LinkProperties;)V"/>
-		<method name="onLosing(Landroid/net/Network;I)V"/>
-		<method name="onLost(Landroid/net/Network;)V"/>
-		<method name="onUnavailable()V" since="26"/>
-	</class>
-	<class name="android/net/ConnectivityManager$OnNetworkActiveListener" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="onNetworkActive()V"/>
-	</class>
-	<class name="android/net/Credentials" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="getGid()I"/>
-		<method name="getPid()I"/>
-		<method name="getUid()I"/>
-	</class>
-	<class name="android/net/DhcpInfo" since="1" deprecated="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="dns1"/>
-		<field name="dns2"/>
-		<field name="gateway"/>
-		<field name="ipAddress"/>
-		<field name="leaseDuration"/>
-		<field name="netmask"/>
-		<field name="serverAddress"/>
-	</class>
-	<class name="android/net/IpPrefix" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="contains(Ljava/net/InetAddress;)Z" since="23"/>
-		<method name="getAddress()Ljava/net/InetAddress;"/>
-		<method name="getPrefixLength()I"/>
-		<method name="getRawAddress()[B"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/IpSecAlgorithm" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[BI)V"/>
-		<method name="getKey()[B"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getTruncationLengthBits()I"/>
-		<field name="AUTH_CRYPT_AES_GCM"/>
-		<field name="AUTH_HMAC_MD5"/>
-		<field name="AUTH_HMAC_SHA1"/>
-		<field name="AUTH_HMAC_SHA256"/>
-		<field name="AUTH_HMAC_SHA384"/>
-		<field name="AUTH_HMAC_SHA512"/>
-		<field name="CREATOR"/>
-		<field name="CRYPT_AES_CBC"/>
-	</class>
-	<class name="android/net/IpSecManager" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;)Landroid/net/IpSecManager$SecurityParameterIndex;"/>
-		<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;I)Landroid/net/IpSecManager$SecurityParameterIndex;"/>
-		<method name="applyTransportModeTransform(Ljava/io/FileDescriptor;ILandroid/net/IpSecTransform;)V"/>
-		<method name="applyTransportModeTransform(Ljava/net/DatagramSocket;ILandroid/net/IpSecTransform;)V"/>
-		<method name="applyTransportModeTransform(Ljava/net/Socket;ILandroid/net/IpSecTransform;)V"/>
-		<method name="openUdpEncapsulationSocket()Landroid/net/IpSecManager$UdpEncapsulationSocket;"/>
-		<method name="openUdpEncapsulationSocket(I)Landroid/net/IpSecManager$UdpEncapsulationSocket;"/>
-		<method name="removeTransportModeTransforms(Ljava/io/FileDescriptor;)V"/>
-		<method name="removeTransportModeTransforms(Ljava/net/DatagramSocket;)V"/>
-		<method name="removeTransportModeTransforms(Ljava/net/Socket;)V"/>
-		<field name="DIRECTION_IN"/>
-		<field name="DIRECTION_OUT"/>
-	</class>
-	<class name="android/net/IpSecManager$ResourceUnavailableException" since="28">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/net/IpSecManager$SecurityParameterIndex" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getSpi()I"/>
-	</class>
-	<class name="android/net/IpSecManager$SpiUnavailableException" since="28">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
-		<method name="getSpi()I"/>
-	</class>
-	<class name="android/net/IpSecManager$UdpEncapsulationSocket" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
-		<method name="getPort()I"/>
-	</class>
-	<class name="android/net/IpSecTransform" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/net/IpSecTransform$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="buildTransportModeTransform(Ljava/net/InetAddress;Landroid/net/IpSecManager$SecurityParameterIndex;)Landroid/net/IpSecTransform;"/>
-		<method name="setAuthenticatedEncryption(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;"/>
-		<method name="setAuthentication(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;"/>
-		<method name="setEncryption(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;"/>
-		<method name="setIpv4Encapsulation(Landroid/net/IpSecManager$UdpEncapsulationSocket;I)Landroid/net/IpSecTransform$Builder;"/>
-	</class>
-	<class name="android/net/LinkAddress" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/net/InterfaceAddress;)V" since="29"/>
-		<method name="getAddress()Ljava/net/InetAddress;"/>
-		<method name="getFlags()I"/>
-		<method name="getPrefixLength()I"/>
-		<method name="getScope()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/LinkProperties" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDnsServers()Ljava/util/List;"/>
-		<method name="getDomains()Ljava/lang/String;"/>
-		<method name="getHttpProxy()Landroid/net/ProxyInfo;"/>
-		<method name="getInterfaceName()Ljava/lang/String;"/>
-		<method name="getLinkAddresses()Ljava/util/List;"/>
-		<method name="getPrivateDnsServerName()Ljava/lang/String;" since="28"/>
-		<method name="getRoutes()Ljava/util/List;"/>
-		<method name="isPrivateDnsActive()Z" since="28"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/LocalServerSocket" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="28"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="accept()Landroid/net/LocalSocket;"/>
-		<method name="close()V"/>
-		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
-		<method name="getLocalSocketAddress()Landroid/net/LocalSocketAddress;"/>
-	</class>
-	<class name="android/net/LocalSocket" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="17"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V" since="19"/>
-		<method name="bind(Landroid/net/LocalSocketAddress;)V"/>
-		<method name="close()V"/>
-		<method name="connect(Landroid/net/LocalSocketAddress;)V"/>
-		<method name="connect(Landroid/net/LocalSocketAddress;I)V"/>
-		<method name="getAncillaryFileDescriptors()[Ljava/io/FileDescriptor;"/>
-		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getLocalSocketAddress()Landroid/net/LocalSocketAddress;"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="getPeerCredentials()Landroid/net/Credentials;"/>
-		<method name="getReceiveBufferSize()I"/>
-		<method name="getRemoteSocketAddress()Landroid/net/LocalSocketAddress;"/>
-		<method name="getSendBufferSize()I"/>
-		<method name="getSoTimeout()I"/>
-		<method name="isBound()Z"/>
-		<method name="isClosed()Z"/>
-		<method name="isConnected()Z"/>
-		<method name="isInputShutdown()Z"/>
-		<method name="isOutputShutdown()Z"/>
-		<method name="setFileDescriptorsForSend([Ljava/io/FileDescriptor;)V"/>
-		<method name="setReceiveBufferSize(I)V"/>
-		<method name="setSendBufferSize(I)V"/>
-		<method name="setSoTimeout(I)V"/>
-		<method name="shutdownInput()V"/>
-		<method name="shutdownOutput()V"/>
-		<field name="SOCKET_DGRAM" since="19"/>
-		<field name="SOCKET_SEQPACKET" since="19"/>
-		<field name="SOCKET_STREAM" since="19"/>
-	</class>
-	<class name="android/net/LocalSocketAddress" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/net/LocalSocketAddress$Namespace;)V"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getNamespace()Landroid/net/LocalSocketAddress$Namespace;"/>
-	</class>
-	<class name="android/net/LocalSocketAddress$Namespace" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/net/LocalSocketAddress$Namespace;"/>
-		<method name="values()[Landroid/net/LocalSocketAddress$Namespace;"/>
-		<field name="ABSTRACT"/>
-		<field name="FILESYSTEM"/>
-		<field name="RESERVED"/>
-	</class>
-	<class name="android/net/MacAddress" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-		<method name="fromBytes([B)Landroid/net/MacAddress;"/>
-		<method name="fromString(Ljava/lang/String;)Landroid/net/MacAddress;"/>
-		<method name="getAddressType()I"/>
-		<method name="isLocallyAssigned()Z"/>
-		<method name="toByteArray()[B"/>
-		<method name="toOuiString()Ljava/lang/String;"/>
-		<field name="BROADCAST_ADDRESS"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_BROADCAST"/>
-		<field name="TYPE_MULTICAST"/>
-		<field name="TYPE_UNICAST"/>
-	</class>
-	<class name="android/net/MailTo" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBody()Ljava/lang/String;"/>
-		<method name="getCc()Ljava/lang/String;"/>
-		<method name="getHeaders()Ljava/util/Map;"/>
-		<method name="getSubject()Ljava/lang/String;"/>
-		<method name="getTo()Ljava/lang/String;"/>
-		<method name="isMailTo(Ljava/lang/String;)Z"/>
-		<method name="parse(Ljava/lang/String;)Landroid/net/MailTo;"/>
-		<field name="MAILTO_SCHEME"/>
-	</class>
-	<class name="android/net/Network" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="bindSocket(Ljava/io/FileDescriptor;)V" since="23"/>
-		<method name="bindSocket(Ljava/net/DatagramSocket;)V" since="22"/>
-		<method name="bindSocket(Ljava/net/Socket;)V"/>
-		<method name="fromNetworkHandle(J)Landroid/net/Network;" since="28"/>
-		<method name="getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;"/>
-		<method name="getByName(Ljava/lang/String;)Ljava/net/InetAddress;"/>
-		<method name="getNetworkHandle()J" since="23"/>
-		<method name="getSocketFactory()Ljavax/net/SocketFactory;"/>
-		<method name="openConnection(Ljava/net/URL;)Ljava/net/URLConnection;"/>
-		<method name="openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;" since="23"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/NetworkCapabilities" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/net/NetworkCapabilities;)V"/>
-		<method name="getLinkDownstreamBandwidthKbps()I"/>
-		<method name="getLinkUpstreamBandwidthKbps()I"/>
-		<method name="hasCapability(I)Z"/>
-		<method name="hasTransport(I)Z"/>
-		<field name="CREATOR"/>
-		<field name="NET_CAPABILITY_CAPTIVE_PORTAL" since="23"/>
-		<field name="NET_CAPABILITY_CBS"/>
-		<field name="NET_CAPABILITY_DUN"/>
-		<field name="NET_CAPABILITY_EIMS"/>
-		<field name="NET_CAPABILITY_FOREGROUND" since="28"/>
-		<field name="NET_CAPABILITY_FOTA"/>
-		<field name="NET_CAPABILITY_IA"/>
-		<field name="NET_CAPABILITY_IMS"/>
-		<field name="NET_CAPABILITY_INTERNET"/>
-		<field name="NET_CAPABILITY_MMS"/>
-		<field name="NET_CAPABILITY_NOT_CONGESTED" since="28"/>
-		<field name="NET_CAPABILITY_NOT_METERED"/>
-		<field name="NET_CAPABILITY_NOT_RESTRICTED"/>
-		<field name="NET_CAPABILITY_NOT_ROAMING" since="28"/>
-		<field name="NET_CAPABILITY_NOT_SUSPENDED" since="28"/>
-		<field name="NET_CAPABILITY_NOT_VPN"/>
-		<field name="NET_CAPABILITY_RCS"/>
-		<field name="NET_CAPABILITY_SUPL"/>
-		<field name="NET_CAPABILITY_TRUSTED"/>
-		<field name="NET_CAPABILITY_VALIDATED" since="23"/>
-		<field name="NET_CAPABILITY_WIFI_P2P"/>
-		<field name="NET_CAPABILITY_XCAP"/>
-		<field name="TRANSPORT_BLUETOOTH"/>
-		<field name="TRANSPORT_CELLULAR"/>
-		<field name="TRANSPORT_ETHERNET"/>
-		<field name="TRANSPORT_LOWPAN" since="27"/>
-		<field name="TRANSPORT_VPN"/>
-		<field name="TRANSPORT_WIFI"/>
-		<field name="TRANSPORT_WIFI_AWARE" since="26"/>
-	</class>
-	<class name="android/net/NetworkInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" since="3" removed="29"/>
-		<method name="&lt;init>(I)V" removed="3"/>
-		<method name="&lt;init>(Landroid/net/NetworkInfo;)V" since="29"/>
-		<method name="getDetailedState()Landroid/net/NetworkInfo$DetailedState;"/>
-		<method name="getExtraInfo()Ljava/lang/String;"/>
-		<method name="getReason()Ljava/lang/String;" deprecated="28"/>
-		<method name="getState()Landroid/net/NetworkInfo$State;" deprecated="28"/>
-		<method name="getSubtype()I" since="3"/>
-		<method name="getSubtypeName()Ljava/lang/String;" since="3"/>
-		<method name="getType()I" deprecated="28"/>
-		<method name="getTypeName()Ljava/lang/String;" deprecated="28"/>
-		<method name="isAvailable()Z" deprecated="28"/>
-		<method name="isConnected()Z"/>
-		<method name="isConnectedOrConnecting()Z" deprecated="28"/>
-		<method name="isFailover()Z" deprecated="28"/>
-		<method name="isRoaming()Z" since="3" deprecated="28"/>
-		<field name="CREATOR" since="24"/>
-	</class>
-	<class name="android/net/NetworkInfo$DetailedState" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$DetailedState;"/>
-		<method name="values()[Landroid/net/NetworkInfo$DetailedState;"/>
-		<field name="AUTHENTICATING"/>
-		<field name="BLOCKED" since="14"/>
-		<field name="CAPTIVE_PORTAL_CHECK" since="17"/>
-		<field name="CONNECTED"/>
-		<field name="CONNECTING"/>
-		<field name="DISCONNECTED"/>
-		<field name="DISCONNECTING"/>
-		<field name="FAILED"/>
-		<field name="IDLE"/>
-		<field name="OBTAINING_IPADDR"/>
-		<field name="SCANNING"/>
-		<field name="SUSPENDED"/>
-		<field name="VERIFYING_POOR_LINK" since="16"/>
-	</class>
-	<class name="android/net/NetworkInfo$State" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$State;"/>
-		<method name="values()[Landroid/net/NetworkInfo$State;"/>
-		<field name="CONNECTED"/>
-		<field name="CONNECTING"/>
-		<field name="DISCONNECTED"/>
-		<field name="DISCONNECTING"/>
-		<field name="SUSPENDED"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/net/NetworkRequest" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/NetworkRequest;)V" since="29"/>
-		<method name="hasCapability(I)Z" since="28"/>
-		<method name="hasTransport(I)Z" since="28"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/NetworkRequest$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addCapability(I)Landroid/net/NetworkRequest$Builder;"/>
-		<method name="addTransportType(I)Landroid/net/NetworkRequest$Builder;"/>
-		<method name="build()Landroid/net/NetworkRequest;"/>
-		<method name="removeCapability(I)Landroid/net/NetworkRequest$Builder;"/>
-		<method name="removeTransportType(I)Landroid/net/NetworkRequest$Builder;"/>
-		<method name="setNetworkSpecifier(Landroid/net/NetworkSpecifier;)Landroid/net/NetworkRequest$Builder;" since="26"/>
-		<method name="setNetworkSpecifier(Ljava/lang/String;)Landroid/net/NetworkRequest$Builder;"/>
-	</class>
-	<class name="android/net/NetworkSpecifier" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/net/ParseException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<field name="response"/>
-	</class>
-	<class name="android/net/Proxy" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultHost()Ljava/lang/String;" deprecated="16"/>
-		<method name="getDefaultPort()I" deprecated="16"/>
-		<method name="getHost(Landroid/content/Context;)Ljava/lang/String;" deprecated="16"/>
-		<method name="getPort(Landroid/content/Context;)I" deprecated="16"/>
-		<field name="EXTRA_PROXY_INFO" since="21" deprecated="23"/>
-		<field name="PROXY_CHANGE_ACTION"/>
-	</class>
-	<class name="android/net/ProxyInfo" since="21" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/Uri;)V" since="29"/>
-		<method name="buildDirectProxy(Ljava/lang/String;I)Landroid/net/ProxyInfo;"/>
-		<method name="buildDirectProxy(Ljava/lang/String;ILjava/util/List;)Landroid/net/ProxyInfo;"/>
-		<method name="buildPacProxy(Landroid/net/Uri;)Landroid/net/ProxyInfo;"/>
-		<method name="getExclusionList()[Ljava/lang/String;"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getPacFileUrl()Landroid/net/Uri;"/>
-		<method name="getPort()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/PskKeyManager" since="21" removed="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="chooseClientKeyIdentity(Ljava/lang/String;Ljava/net/Socket;)Ljava/lang/String;"/>
-		<method name="chooseClientKeyIdentity(Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
-		<method name="chooseServerKeyIdentityHint(Ljava/net/Socket;)Ljava/lang/String;"/>
-		<method name="chooseServerKeyIdentityHint(Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
-		<method name="getKey(Ljava/lang/String;Ljava/lang/String;Ljava/net/Socket;)Ljavax/crypto/SecretKey;"/>
-		<method name="getKey(Ljava/lang/String;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)Ljavax/crypto/SecretKey;"/>
-		<field name="MAX_IDENTITY_HINT_LENGTH_BYTES"/>
-		<field name="MAX_IDENTITY_LENGTH_BYTES"/>
-		<field name="MAX_KEY_LENGTH_BYTES"/>
-	</class>
-	<class name="android/net/RouteInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;)V" since="29"/>
-		<method name="getDestination()Landroid/net/IpPrefix;"/>
-		<method name="getGateway()Ljava/net/InetAddress;"/>
-		<method name="getInterface()Ljava/lang/String;"/>
-		<method name="isDefaultRoute()Z"/>
-		<method name="matches(Ljava/net/InetAddress;)Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/SSLCertificateSocketFactory" since="1">
-		<extends name="javax/net/ssl/SSLSocketFactory"/>
-		<method name="&lt;init>(I)V" deprecated="16"/>
-		<method name="getDefault(I)Ljavax/net/SocketFactory;"/>
-		<method name="getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8"/>
-		<method name="getHttpSocketFactory(ILandroid/net/SSLSessionCache;)Lorg/apache/http/conn/ssl/SSLSocketFactory;" since="8" deprecated="22" removed="23"/>
-		<method name="getInsecure(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8"/>
-		<method name="getNpnSelectedProtocol(Ljava/net/Socket;)[B" since="16"/>
-		<method name="setHostname(Ljava/net/Socket;Ljava/lang/String;)V" since="17"/>
-		<method name="setKeyManagers([Ljavax/net/ssl/KeyManager;)V" since="14"/>
-		<method name="setNpnProtocols([[B)V" since="16"/>
-		<method name="setTrustManagers([Ljavax/net/ssl/TrustManager;)V" since="14"/>
-		<method name="setUseSessionTickets(Ljava/net/Socket;Z)V" since="17"/>
-	</class>
-	<class name="android/net/SSLSessionCache" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-	</class>
-	<class name="android/net/TrafficStats" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clearThreadStatsTag()V" since="14"/>
-		<method name="clearThreadStatsUid()V" since="28"/>
-		<method name="getAndSetThreadStatsTag(I)I" since="26"/>
-		<method name="getMobileRxBytes()J"/>
-		<method name="getMobileRxPackets()J"/>
-		<method name="getMobileTxBytes()J"/>
-		<method name="getMobileTxPackets()J"/>
-		<method name="getThreadStatsTag()I" since="14"/>
-		<method name="getThreadStatsUid()I" since="28"/>
-		<method name="getTotalRxBytes()J"/>
-		<method name="getTotalRxPackets()J"/>
-		<method name="getTotalTxBytes()J"/>
-		<method name="getTotalTxPackets()J"/>
-		<method name="getUidRxBytes(I)J"/>
-		<method name="getUidRxPackets(I)J" since="12"/>
-		<method name="getUidTcpRxBytes(I)J" since="12" deprecated="18"/>
-		<method name="getUidTcpRxSegments(I)J" since="12" deprecated="18"/>
-		<method name="getUidTcpTxBytes(I)J" since="12" deprecated="18"/>
-		<method name="getUidTcpTxSegments(I)J" since="12" deprecated="18"/>
-		<method name="getUidTxBytes(I)J"/>
-		<method name="getUidTxPackets(I)J" since="12"/>
-		<method name="getUidUdpRxBytes(I)J" since="12" deprecated="18"/>
-		<method name="getUidUdpRxPackets(I)J" since="12" deprecated="18"/>
-		<method name="getUidUdpTxBytes(I)J" since="12" deprecated="18"/>
-		<method name="getUidUdpTxPackets(I)J" since="12" deprecated="18"/>
-		<method name="incrementOperationCount(I)V" since="14"/>
-		<method name="incrementOperationCount(II)V" since="14"/>
-		<method name="setThreadStatsTag(I)V" since="14"/>
-		<method name="setThreadStatsUid(I)V" since="28"/>
-		<method name="tagDatagramSocket(Ljava/net/DatagramSocket;)V" since="24"/>
-		<method name="tagFileDescriptor(Ljava/io/FileDescriptor;)V" since="28"/>
-		<method name="tagSocket(Ljava/net/Socket;)V" since="14"/>
-		<method name="untagDatagramSocket(Ljava/net/DatagramSocket;)V" since="24"/>
-		<method name="untagFileDescriptor(Ljava/io/FileDescriptor;)V" since="28"/>
-		<method name="untagSocket(Ljava/net/Socket;)V" since="14"/>
-		<field name="UNSUPPORTED"/>
-	</class>
-	<class name="android/net/Uri" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V"/>
-		<method name="buildUpon()Landroid/net/Uri$Builder;"/>
-		<method name="compareTo(Landroid/net/Uri;)I"/>
-		<method name="decode(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="encode(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="fromFile(Ljava/io/File;)Landroid/net/Uri;"/>
-		<method name="fromParts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="getAuthority()Ljava/lang/String;"/>
-		<method name="getBooleanQueryParameter(Ljava/lang/String;Z)Z" since="11"/>
-		<method name="getEncodedAuthority()Ljava/lang/String;"/>
-		<method name="getEncodedFragment()Ljava/lang/String;"/>
-		<method name="getEncodedPath()Ljava/lang/String;"/>
-		<method name="getEncodedQuery()Ljava/lang/String;"/>
-		<method name="getEncodedSchemeSpecificPart()Ljava/lang/String;"/>
-		<method name="getEncodedUserInfo()Ljava/lang/String;"/>
-		<method name="getFragment()Ljava/lang/String;"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getLastPathSegment()Ljava/lang/String;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getPathSegments()Ljava/util/List;"/>
-		<method name="getPort()I"/>
-		<method name="getQuery()Ljava/lang/String;"/>
-		<method name="getQueryParameter(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getQueryParameterNames()Ljava/util/Set;" since="11"/>
-		<method name="getQueryParameters(Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="getScheme()Ljava/lang/String;"/>
-		<method name="getSchemeSpecificPart()Ljava/lang/String;"/>
-		<method name="getUserInfo()Ljava/lang/String;"/>
-		<method name="isAbsolute()Z"/>
-		<method name="isHierarchical()Z"/>
-		<method name="isOpaque()Z"/>
-		<method name="isRelative()Z"/>
-		<method name="normalizeScheme()Landroid/net/Uri;" since="16"/>
-		<method name="parse(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V"/>
-		<field name="CREATOR"/>
-		<field name="EMPTY"/>
-	</class>
-	<class name="android/net/Uri$Builder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="appendPath(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="authority(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="build()Landroid/net/Uri;"/>
-		<method name="clearQuery()Landroid/net/Uri$Builder;" since="11"/>
-		<method name="encodedAuthority(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="encodedOpaquePart(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="encodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="encodedQuery(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="opaquePart(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="path(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="query(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-		<method name="scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
-	</class>
-	<class name="android/net/UrlQuerySanitizer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="addSanitizedEntry(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="clear()V"/>
-		<method name="decodeHexDigit(C)I"/>
-		<method name="getAllButNulAndAngleBracketsLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getAllButNulLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getAllButWhitespaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getAllIllegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getAllowUnregisteredParamaters()Z"/>
-		<method name="getAmpAndSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getAmpLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getEffectiveValueSanitizer(Ljava/lang/String;)Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getParameterList()Ljava/util/List;"/>
-		<method name="getParameterSet()Ljava/util/Set;"/>
-		<method name="getPreferFirstRepeatedParameter()Z"/>
-		<method name="getSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getUnregisteredParameterValueSanitizer()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getUrlAndSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getUrlLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getValueSanitizer(Ljava/lang/String;)Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
-		<method name="hasParameter(Ljava/lang/String;)Z"/>
-		<method name="isHexDigit(C)Z"/>
-		<method name="parseEntry(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="parseQuery(Ljava/lang/String;)V"/>
-		<method name="parseUrl(Ljava/lang/String;)V"/>
-		<method name="registerParameter(Ljava/lang/String;Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V"/>
-		<method name="registerParameters([Ljava/lang/String;Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V"/>
-		<method name="setAllowUnregisteredParamaters(Z)V"/>
-		<method name="setPreferFirstRepeatedParameter(Z)V"/>
-		<method name="setUnregisteredParameterValueSanitizer(Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V"/>
-		<method name="unescape(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/net/UrlQuerySanitizer$IllegalCharacterValueSanitizer" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/net/UrlQuerySanitizer$ValueSanitizer"/>
-		<method name="&lt;init>(I)V"/>
-		<field name="ALL_BUT_NUL_AND_ANGLE_BRACKETS_LEGAL"/>
-		<field name="ALL_BUT_NUL_LEGAL"/>
-		<field name="ALL_BUT_WHITESPACE_LEGAL"/>
-		<field name="ALL_ILLEGAL"/>
-		<field name="ALL_OK"/>
-		<field name="ALL_WHITESPACE_OK"/>
-		<field name="AMP_AND_SPACE_LEGAL"/>
-		<field name="AMP_LEGAL"/>
-		<field name="AMP_OK"/>
-		<field name="DQUOTE_OK"/>
-		<field name="GT_OK"/>
-		<field name="LT_OK"/>
-		<field name="NON_7_BIT_ASCII_OK"/>
-		<field name="NUL_OK"/>
-		<field name="OTHER_WHITESPACE_OK"/>
-		<field name="PCT_OK"/>
-		<field name="SCRIPT_URL_OK"/>
-		<field name="SPACE_LEGAL"/>
-		<field name="SPACE_OK"/>
-		<field name="SQUOTE_OK"/>
-		<field name="URL_AND_SPACE_LEGAL"/>
-		<field name="URL_LEGAL"/>
-	</class>
-	<class name="android/net/UrlQuerySanitizer$ParameterValuePair" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/UrlQuerySanitizer;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="mParameter"/>
-		<field name="mValue"/>
-	</class>
-	<class name="android/net/UrlQuerySanitizer$ValueSanitizer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="sanitize(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/net/VpnService" since="14">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onRevoke()V"/>
-		<method name="prepare(Landroid/content/Context;)Landroid/content/Intent;"/>
-		<method name="protect(I)Z"/>
-		<method name="protect(Ljava/net/DatagramSocket;)Z"/>
-		<method name="protect(Ljava/net/Socket;)Z"/>
-		<method name="setUnderlyingNetworks([Landroid/net/Network;)Z" since="22"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA_SUPPORTS_ALWAYS_ON" since="27"/>
-	</class>
-	<class name="android/net/VpnService$Builder" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/VpnService;)V"/>
-		<method name="addAddress(Ljava/lang/String;I)Landroid/net/VpnService$Builder;"/>
-		<method name="addAddress(Ljava/net/InetAddress;I)Landroid/net/VpnService$Builder;"/>
-		<method name="addAllowedApplication(Ljava/lang/String;)Landroid/net/VpnService$Builder;" since="21"/>
-		<method name="addDisallowedApplication(Ljava/lang/String;)Landroid/net/VpnService$Builder;" since="21"/>
-		<method name="addDnsServer(Ljava/lang/String;)Landroid/net/VpnService$Builder;"/>
-		<method name="addDnsServer(Ljava/net/InetAddress;)Landroid/net/VpnService$Builder;"/>
-		<method name="addRoute(Ljava/lang/String;I)Landroid/net/VpnService$Builder;"/>
-		<method name="addRoute(Ljava/net/InetAddress;I)Landroid/net/VpnService$Builder;"/>
-		<method name="addSearchDomain(Ljava/lang/String;)Landroid/net/VpnService$Builder;"/>
-		<method name="allowBypass()Landroid/net/VpnService$Builder;" since="21"/>
-		<method name="allowFamily(I)Landroid/net/VpnService$Builder;" since="21"/>
-		<method name="establish()Landroid/os/ParcelFileDescriptor;"/>
-		<method name="setBlocking(Z)Landroid/net/VpnService$Builder;" since="21"/>
-		<method name="setConfigureIntent(Landroid/app/PendingIntent;)Landroid/net/VpnService$Builder;"/>
-		<method name="setMtu(I)Landroid/net/VpnService$Builder;"/>
-		<method name="setSession(Ljava/lang/String;)Landroid/net/VpnService$Builder;"/>
-		<method name="setUnderlyingNetworks([Landroid/net/Network;)Landroid/net/VpnService$Builder;" since="22"/>
-	</class>
-	<class name="android/net/http/AndroidHttpClient" since="8" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/HttpClient"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="disableCurlLogging()V"/>
-		<method name="enableCurlLogging(Ljava/lang/String;I)V"/>
-		<method name="getCompressedEntity([BLandroid/content/ContentResolver;)Lorg/apache/http/entity/AbstractHttpEntity;"/>
-		<method name="getMinGzipSize(Landroid/content/ContentResolver;)J"/>
-		<method name="getUngzippedContent(Lorg/apache/http/HttpEntity;)Ljava/io/InputStream;"/>
-		<method name="modifyRequestToAcceptGzipResponse(Lorg/apache/http/HttpRequest;)V"/>
-		<method name="newInstance(Ljava/lang/String;)Landroid/net/http/AndroidHttpClient;" deprecated="22"/>
-		<method name="newInstance(Ljava/lang/String;Landroid/content/Context;)Landroid/net/http/AndroidHttpClient;" deprecated="22"/>
-		<method name="parseDate(Ljava/lang/String;)J"/>
-		<field name="DEFAULT_SYNC_MIN_GZIP_BYTES"/>
-	</class>
-	<class name="android/net/http/HttpResponseCache" since="14">
-		<extends name="java/net/ResponseCache"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V"/>
-		<method name="delete()V"/>
-		<method name="flush()V"/>
-		<method name="getHitCount()I"/>
-		<method name="getInstalled()Landroid/net/http/HttpResponseCache;"/>
-		<method name="getNetworkCount()I"/>
-		<method name="getRequestCount()I"/>
-		<method name="install(Ljava/io/File;J)Landroid/net/http/HttpResponseCache;"/>
-		<method name="maxSize()J"/>
-		<method name="size()J"/>
-	</class>
-	<class name="android/net/http/SslCertificate" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)V" since="8" deprecated="16"/>
-		<method name="&lt;init>(Ljava/security/cert/X509Certificate;)V"/>
-		<method name="getIssuedBy()Landroid/net/http/SslCertificate$DName;"/>
-		<method name="getIssuedTo()Landroid/net/http/SslCertificate$DName;"/>
-		<method name="getValidNotAfter()Ljava/lang/String;" deprecated="16"/>
-		<method name="getValidNotAfterDate()Ljava/util/Date;" since="8"/>
-		<method name="getValidNotBefore()Ljava/lang/String;" deprecated="16"/>
-		<method name="getValidNotBeforeDate()Ljava/util/Date;" since="8"/>
-		<method name="getX509Certificate()Ljava/security/cert/X509Certificate;" since="29"/>
-		<method name="restoreState(Landroid/os/Bundle;)Landroid/net/http/SslCertificate;"/>
-		<method name="saveState(Landroid/net/http/SslCertificate;)Landroid/os/Bundle;"/>
-	</class>
-	<class name="android/net/http/SslCertificate$DName" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/http/SslCertificate;Ljava/lang/String;)V"/>
-		<method name="getCName()Ljava/lang/String;"/>
-		<method name="getDName()Ljava/lang/String;"/>
-		<method name="getOName()Ljava/lang/String;"/>
-		<method name="getUName()Ljava/lang/String;"/>
-	</class>
-	<class name="android/net/http/SslError" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILandroid/net/http/SslCertificate;)V" deprecated="16"/>
-		<method name="&lt;init>(ILandroid/net/http/SslCertificate;Ljava/lang/String;)V" since="14"/>
-		<method name="&lt;init>(ILjava/security/cert/X509Certificate;)V" deprecated="16"/>
-		<method name="&lt;init>(ILjava/security/cert/X509Certificate;Ljava/lang/String;)V" since="14"/>
-		<method name="addError(I)Z"/>
-		<method name="getCertificate()Landroid/net/http/SslCertificate;"/>
-		<method name="getPrimaryError()I"/>
-		<method name="getUrl()Ljava/lang/String;" since="14"/>
-		<method name="hasError(I)Z"/>
-		<field name="SSL_DATE_INVALID" since="14"/>
-		<field name="SSL_EXPIRED"/>
-		<field name="SSL_IDMISMATCH"/>
-		<field name="SSL_INVALID" since="14"/>
-		<field name="SSL_MAX_ERROR" deprecated="16"/>
-		<field name="SSL_NOTYETVALID"/>
-		<field name="SSL_UNTRUSTED"/>
-	</class>
-	<class name="android/net/http/X509TrustManagerExtensions" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/net/ssl/X509TrustManager;)V"/>
-		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="isSameTrustConfiguration(Ljava/lang/String;Ljava/lang/String;)Z" since="28"/>
-		<method name="isUserAddedCertificate(Ljava/security/cert/X509Certificate;)Z" since="21"/>
-	</class>
-	<class name="android/net/nsd/NsdManager" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="discoverServices(Ljava/lang/String;ILandroid/net/nsd/NsdManager$DiscoveryListener;)V"/>
-		<method name="registerService(Landroid/net/nsd/NsdServiceInfo;ILandroid/net/nsd/NsdManager$RegistrationListener;)V"/>
-		<method name="resolveService(Landroid/net/nsd/NsdServiceInfo;Landroid/net/nsd/NsdManager$ResolveListener;)V"/>
-		<method name="stopServiceDiscovery(Landroid/net/nsd/NsdManager$DiscoveryListener;)V"/>
-		<method name="unregisterService(Landroid/net/nsd/NsdManager$RegistrationListener;)V"/>
-		<field name="ACTION_NSD_STATE_CHANGED"/>
-		<field name="EXTRA_NSD_STATE"/>
-		<field name="FAILURE_ALREADY_ACTIVE"/>
-		<field name="FAILURE_INTERNAL_ERROR"/>
-		<field name="FAILURE_MAX_LIMIT"/>
-		<field name="NSD_STATE_DISABLED"/>
-		<field name="NSD_STATE_ENABLED"/>
-		<field name="PROTOCOL_DNS_SD"/>
-	</class>
-	<class name="android/net/nsd/NsdManager$DiscoveryListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onDiscoveryStarted(Ljava/lang/String;)V"/>
-		<method name="onDiscoveryStopped(Ljava/lang/String;)V"/>
-		<method name="onServiceFound(Landroid/net/nsd/NsdServiceInfo;)V"/>
-		<method name="onServiceLost(Landroid/net/nsd/NsdServiceInfo;)V"/>
-		<method name="onStartDiscoveryFailed(Ljava/lang/String;I)V"/>
-		<method name="onStopDiscoveryFailed(Ljava/lang/String;I)V"/>
-	</class>
-	<class name="android/net/nsd/NsdManager$RegistrationListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onRegistrationFailed(Landroid/net/nsd/NsdServiceInfo;I)V"/>
-		<method name="onServiceRegistered(Landroid/net/nsd/NsdServiceInfo;)V"/>
-		<method name="onServiceUnregistered(Landroid/net/nsd/NsdServiceInfo;)V"/>
-		<method name="onUnregistrationFailed(Landroid/net/nsd/NsdServiceInfo;I)V"/>
-	</class>
-	<class name="android/net/nsd/NsdManager$ResolveListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onResolveFailed(Landroid/net/nsd/NsdServiceInfo;I)V"/>
-		<method name="onServiceResolved(Landroid/net/nsd/NsdServiceInfo;)V"/>
-	</class>
-	<class name="android/net/nsd/NsdServiceInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAttributes()Ljava/util/Map;" since="21"/>
-		<method name="getHost()Ljava/net/InetAddress;"/>
-		<method name="getPort()I"/>
-		<method name="getServiceName()Ljava/lang/String;"/>
-		<method name="getServiceType()Ljava/lang/String;"/>
-		<method name="removeAttribute(Ljava/lang/String;)V" since="21"/>
-		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V" since="21"/>
-		<method name="setHost(Ljava/net/InetAddress;)V"/>
-		<method name="setPort(I)V"/>
-		<method name="setServiceName(Ljava/lang/String;)V"/>
-		<method name="setServiceType(Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/rtp/AudioCodec" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="getCodec(ILjava/lang/String;Ljava/lang/String;)Landroid/net/rtp/AudioCodec;"/>
-		<method name="getCodecs()[Landroid/net/rtp/AudioCodec;"/>
-		<field name="AMR"/>
-		<field name="GSM"/>
-		<field name="GSM_EFR"/>
-		<field name="PCMA"/>
-		<field name="PCMU"/>
-		<field name="fmtp"/>
-		<field name="rtpmap"/>
-		<field name="type"/>
-	</class>
-	<class name="android/net/rtp/AudioGroup" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clear()V"/>
-		<method name="getMode()I"/>
-		<method name="getStreams()[Landroid/net/rtp/AudioStream;"/>
-		<method name="sendDtmf(I)V"/>
-		<method name="setMode(I)V"/>
-		<field name="MODE_ECHO_SUPPRESSION"/>
-		<field name="MODE_MUTED"/>
-		<field name="MODE_NORMAL"/>
-		<field name="MODE_ON_HOLD"/>
-	</class>
-	<class name="android/net/rtp/AudioStream" since="12">
-		<extends name="android/net/rtp/RtpStream"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;)V"/>
-		<method name="getCodec()Landroid/net/rtp/AudioCodec;"/>
-		<method name="getDtmfType()I"/>
-		<method name="getGroup()Landroid/net/rtp/AudioGroup;"/>
-		<method name="join(Landroid/net/rtp/AudioGroup;)V"/>
-		<method name="setCodec(Landroid/net/rtp/AudioCodec;)V"/>
-		<method name="setDtmfType(I)V"/>
-	</class>
-	<class name="android/net/rtp/RtpStream" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;)V" since="29"/>
-		<method name="associate(Ljava/net/InetAddress;I)V"/>
-		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
-		<method name="getLocalPort()I"/>
-		<method name="getMode()I"/>
-		<method name="getRemoteAddress()Ljava/net/InetAddress;"/>
-		<method name="getRemotePort()I"/>
-		<method name="isBusy()Z"/>
-		<method name="release()V"/>
-		<method name="setMode(I)V"/>
-		<field name="MODE_NORMAL"/>
-		<field name="MODE_RECEIVE_ONLY"/>
-		<field name="MODE_SEND_ONLY"/>
-	</class>
-	<class name="android/net/sip/SipAudioCall" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/net/sip/SipProfile;)V"/>
-		<method name="answerCall(I)V"/>
-		<method name="attachCall(Landroid/net/sip/SipSession;Ljava/lang/String;)V"/>
-		<method name="close()V"/>
-		<method name="continueCall(I)V"/>
-		<method name="endCall()V"/>
-		<method name="getLocalProfile()Landroid/net/sip/SipProfile;"/>
-		<method name="getPeerProfile()Landroid/net/sip/SipProfile;"/>
-		<method name="getState()I"/>
-		<method name="holdCall(I)V"/>
-		<method name="isInCall()Z"/>
-		<method name="isMuted()Z"/>
-		<method name="isOnHold()Z"/>
-		<method name="makeCall(Landroid/net/sip/SipProfile;Landroid/net/sip/SipSession;I)V"/>
-		<method name="sendDtmf(I)V"/>
-		<method name="sendDtmf(ILandroid/os/Message;)V"/>
-		<method name="setListener(Landroid/net/sip/SipAudioCall$Listener;)V"/>
-		<method name="setListener(Landroid/net/sip/SipAudioCall$Listener;Z)V"/>
-		<method name="setSpeakerMode(Z)V"/>
-		<method name="startAudio()V"/>
-		<method name="toggleMute()V"/>
-	</class>
-	<class name="android/net/sip/SipAudioCall$Listener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCallBusy(Landroid/net/sip/SipAudioCall;)V"/>
-		<method name="onCallEnded(Landroid/net/sip/SipAudioCall;)V"/>
-		<method name="onCallEstablished(Landroid/net/sip/SipAudioCall;)V"/>
-		<method name="onCallHeld(Landroid/net/sip/SipAudioCall;)V"/>
-		<method name="onCalling(Landroid/net/sip/SipAudioCall;)V"/>
-		<method name="onChanged(Landroid/net/sip/SipAudioCall;)V"/>
-		<method name="onError(Landroid/net/sip/SipAudioCall;ILjava/lang/String;)V"/>
-		<method name="onReadyToCall(Landroid/net/sip/SipAudioCall;)V"/>
-		<method name="onRinging(Landroid/net/sip/SipAudioCall;Landroid/net/sip/SipProfile;)V"/>
-		<method name="onRingingBack(Landroid/net/sip/SipAudioCall;)V"/>
-	</class>
-	<class name="android/net/sip/SipErrorCode" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<field name="CLIENT_ERROR"/>
-		<field name="CROSS_DOMAIN_AUTHENTICATION"/>
-		<field name="DATA_CONNECTION_LOST"/>
-		<field name="INVALID_CREDENTIALS"/>
-		<field name="INVALID_REMOTE_URI"/>
-		<field name="IN_PROGRESS"/>
-		<field name="NO_ERROR"/>
-		<field name="PEER_NOT_REACHABLE"/>
-		<field name="SERVER_ERROR"/>
-		<field name="SERVER_UNREACHABLE"/>
-		<field name="SOCKET_ERROR"/>
-		<field name="TIME_OUT"/>
-		<field name="TRANSACTION_TERMINTED"/>
-	</class>
-	<class name="android/net/sip/SipException" since="9">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/net/sip/SipManager" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="close(Ljava/lang/String;)V"/>
-		<method name="createSipSession(Landroid/net/sip/SipProfile;Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;"/>
-		<method name="getCallId(Landroid/content/Intent;)Ljava/lang/String;"/>
-		<method name="getOfferSessionDescription(Landroid/content/Intent;)Ljava/lang/String;"/>
-		<method name="getSessionFor(Landroid/content/Intent;)Landroid/net/sip/SipSession;"/>
-		<method name="isApiSupported(Landroid/content/Context;)Z"/>
-		<method name="isIncomingCallIntent(Landroid/content/Intent;)Z"/>
-		<method name="isOpened(Ljava/lang/String;)Z"/>
-		<method name="isRegistered(Ljava/lang/String;)Z"/>
-		<method name="isSipWifiOnly(Landroid/content/Context;)Z"/>
-		<method name="isVoipSupported(Landroid/content/Context;)Z"/>
-		<method name="makeAudioCall(Landroid/net/sip/SipProfile;Landroid/net/sip/SipProfile;Landroid/net/sip/SipAudioCall$Listener;I)Landroid/net/sip/SipAudioCall;"/>
-		<method name="makeAudioCall(Ljava/lang/String;Ljava/lang/String;Landroid/net/sip/SipAudioCall$Listener;I)Landroid/net/sip/SipAudioCall;"/>
-		<method name="newInstance(Landroid/content/Context;)Landroid/net/sip/SipManager;"/>
-		<method name="open(Landroid/net/sip/SipProfile;)V"/>
-		<method name="open(Landroid/net/sip/SipProfile;Landroid/app/PendingIntent;Landroid/net/sip/SipRegistrationListener;)V"/>
-		<method name="register(Landroid/net/sip/SipProfile;ILandroid/net/sip/SipRegistrationListener;)V"/>
-		<method name="setRegistrationListener(Ljava/lang/String;Landroid/net/sip/SipRegistrationListener;)V"/>
-		<method name="takeAudioCall(Landroid/content/Intent;Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;"/>
-		<method name="unregister(Landroid/net/sip/SipProfile;Landroid/net/sip/SipRegistrationListener;)V"/>
-		<field name="EXTRA_CALL_ID"/>
-		<field name="EXTRA_OFFER_SD"/>
-		<field name="INCOMING_CALL_RESULT_CODE"/>
-	</class>
-	<class name="android/net/sip/SipProfile" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAuthUserName()Ljava/lang/String;" since="12"/>
-		<method name="getAutoRegistration()Z"/>
-		<method name="getDisplayName()Ljava/lang/String;"/>
-		<method name="getPassword()Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="getProfileName()Ljava/lang/String;"/>
-		<method name="getProtocol()Ljava/lang/String;"/>
-		<method name="getProxyAddress()Ljava/lang/String;"/>
-		<method name="getSendKeepAlive()Z"/>
-		<method name="getSipDomain()Ljava/lang/String;"/>
-		<method name="getUriString()Ljava/lang/String;"/>
-		<method name="getUserName()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/sip/SipProfile$Builder" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/sip/SipProfile;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="build()Landroid/net/sip/SipProfile;"/>
-		<method name="setAuthUserName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" since="12"/>
-		<method name="setAutoRegistration(Z)Landroid/net/sip/SipProfile$Builder;"/>
-		<method name="setDisplayName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;"/>
-		<method name="setOutboundProxy(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;"/>
-		<method name="setPassword(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;"/>
-		<method name="setPort(I)Landroid/net/sip/SipProfile$Builder;"/>
-		<method name="setProfileName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;"/>
-		<method name="setProtocol(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;"/>
-		<method name="setSendKeepAlive(Z)Landroid/net/sip/SipProfile$Builder;"/>
-	</class>
-	<class name="android/net/sip/SipRegistrationListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onRegistering(Ljava/lang/String;)V"/>
-		<method name="onRegistrationDone(Ljava/lang/String;J)V"/>
-		<method name="onRegistrationFailed(Ljava/lang/String;ILjava/lang/String;)V"/>
-	</class>
-	<class name="android/net/sip/SipSession" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="answerCall(Ljava/lang/String;I)V"/>
-		<method name="changeCall(Ljava/lang/String;I)V"/>
-		<method name="endCall()V"/>
-		<method name="getCallId()Ljava/lang/String;"/>
-		<method name="getLocalIp()Ljava/lang/String;"/>
-		<method name="getLocalProfile()Landroid/net/sip/SipProfile;"/>
-		<method name="getPeerProfile()Landroid/net/sip/SipProfile;"/>
-		<method name="getState()I"/>
-		<method name="isInCall()Z"/>
-		<method name="makeCall(Landroid/net/sip/SipProfile;Ljava/lang/String;I)V"/>
-		<method name="register(I)V"/>
-		<method name="setListener(Landroid/net/sip/SipSession$Listener;)V"/>
-		<method name="unregister()V"/>
-	</class>
-	<class name="android/net/sip/SipSession$Listener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCallBusy(Landroid/net/sip/SipSession;)V"/>
-		<method name="onCallChangeFailed(Landroid/net/sip/SipSession;ILjava/lang/String;)V"/>
-		<method name="onCallEnded(Landroid/net/sip/SipSession;)V"/>
-		<method name="onCallEstablished(Landroid/net/sip/SipSession;Ljava/lang/String;)V"/>
-		<method name="onCalling(Landroid/net/sip/SipSession;)V"/>
-		<method name="onError(Landroid/net/sip/SipSession;ILjava/lang/String;)V"/>
-		<method name="onRegistering(Landroid/net/sip/SipSession;)V"/>
-		<method name="onRegistrationDone(Landroid/net/sip/SipSession;I)V"/>
-		<method name="onRegistrationFailed(Landroid/net/sip/SipSession;ILjava/lang/String;)V"/>
-		<method name="onRegistrationTimeout(Landroid/net/sip/SipSession;)V"/>
-		<method name="onRinging(Landroid/net/sip/SipSession;Landroid/net/sip/SipProfile;Ljava/lang/String;)V"/>
-		<method name="onRingingBack(Landroid/net/sip/SipSession;)V"/>
-	</class>
-	<class name="android/net/sip/SipSession$State" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<field name="DEREGISTERING"/>
-		<field name="INCOMING_CALL"/>
-		<field name="INCOMING_CALL_ANSWERING"/>
-		<field name="IN_CALL"/>
-		<field name="NOT_DEFINED"/>
-		<field name="OUTGOING_CALL"/>
-		<field name="OUTGOING_CALL_CANCELING"/>
-		<field name="OUTGOING_CALL_RING_BACK"/>
-		<field name="PINGING"/>
-		<field name="READY_TO_CALL"/>
-		<field name="REGISTERING"/>
-	</class>
-	<class name="android/net/wifi/ScanResult" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="is80211mcResponder()Z" since="23"/>
-		<method name="isPasspointNetwork()Z" since="23"/>
-		<field name="BSSID"/>
-		<field name="CHANNEL_WIDTH_160MHZ" since="23"/>
-		<field name="CHANNEL_WIDTH_20MHZ" since="23"/>
-		<field name="CHANNEL_WIDTH_40MHZ" since="23"/>
-		<field name="CHANNEL_WIDTH_80MHZ" since="23"/>
-		<field name="CHANNEL_WIDTH_80MHZ_PLUS_MHZ" since="23"/>
-		<field name="SSID"/>
-		<field name="capabilities"/>
-		<field name="centerFreq0" since="23"/>
-		<field name="centerFreq1" since="23"/>
-		<field name="channelWidth" since="23"/>
-		<field name="frequency"/>
-		<field name="level"/>
-		<field name="operatorFriendlyName" since="23"/>
-		<field name="timestamp" since="17"/>
-		<field name="venueName" since="23"/>
-	</class>
-	<class name="android/net/wifi/SupplicantState" since="1">
-		<extends name="java/lang/Enum"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="isValidState(Landroid/net/wifi/SupplicantState;)Z"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/net/wifi/SupplicantState;"/>
-		<method name="values()[Landroid/net/wifi/SupplicantState;"/>
-		<field name="ASSOCIATED"/>
-		<field name="ASSOCIATING"/>
-		<field name="AUTHENTICATING" since="14"/>
-		<field name="COMPLETED"/>
-		<field name="DISCONNECTED"/>
-		<field name="DORMANT"/>
-		<field name="FOUR_WAY_HANDSHAKE"/>
-		<field name="GROUP_HANDSHAKE"/>
-		<field name="INACTIVE"/>
-		<field name="INTERFACE_DISABLED" since="14"/>
-		<field name="INVALID"/>
-		<field name="SCANNING"/>
-		<field name="UNINITIALIZED"/>
-	</class>
-	<class name="android/net/wifi/WifiConfiguration" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getHttpProxy()Landroid/net/ProxyInfo;" since="26"/>
-		<method name="isPasspoint()Z" since="23"/>
-		<method name="setHttpProxy(Landroid/net/ProxyInfo;)V" since="26"/>
-		<field name="BSSID"/>
-		<field name="FQDN" since="21"/>
-		<field name="SSID"/>
-		<field name="allowedAuthAlgorithms"/>
-		<field name="allowedGroupCiphers"/>
-		<field name="allowedKeyManagement"/>
-		<field name="allowedPairwiseCiphers"/>
-		<field name="allowedProtocols"/>
-		<field name="enterpriseConfig" since="18"/>
-		<field name="hiddenSSID"/>
-		<field name="isHomeProviderNetwork" since="26"/>
-		<field name="networkId"/>
-		<field name="preSharedKey"/>
-		<field name="priority" deprecated="26"/>
-		<field name="providerFriendlyName" since="23"/>
-		<field name="roamingConsortiumIds" since="23"/>
-		<field name="status"/>
-		<field name="wepKeys" deprecated="28"/>
-		<field name="wepTxKeyIndex" deprecated="28"/>
-	</class>
-	<class name="android/net/wifi/WifiConfiguration$AuthAlgorithm" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="LEAP"/>
-		<field name="OPEN"/>
-		<field name="SHARED" deprecated="28"/>
-		<field name="strings"/>
-		<field name="varName"/>
-	</class>
-	<class name="android/net/wifi/WifiConfiguration$GroupCipher" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CCMP"/>
-		<field name="TKIP"/>
-		<field name="WEP104" deprecated="28"/>
-		<field name="WEP40" deprecated="28"/>
-		<field name="strings"/>
-		<field name="varName"/>
-	</class>
-	<class name="android/net/wifi/WifiConfiguration$KeyMgmt" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="IEEE8021X"/>
-		<field name="NONE"/>
-		<field name="WPA_EAP"/>
-		<field name="WPA_PSK"/>
-		<field name="strings"/>
-		<field name="varName"/>
-	</class>
-	<class name="android/net/wifi/WifiConfiguration$PairwiseCipher" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CCMP"/>
-		<field name="NONE"/>
-		<field name="TKIP" deprecated="28"/>
-		<field name="strings"/>
-		<field name="varName"/>
-	</class>
-	<class name="android/net/wifi/WifiConfiguration$Protocol" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="RSN"/>
-		<field name="WPA" deprecated="28"/>
-		<field name="strings"/>
-		<field name="varName"/>
-	</class>
-	<class name="android/net/wifi/WifiConfiguration$Status" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CURRENT"/>
-		<field name="DISABLED"/>
-		<field name="ENABLED"/>
-		<field name="strings"/>
-	</class>
-	<class name="android/net/wifi/WifiEnterpriseConfig" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/WifiEnterpriseConfig;)V"/>
-		<method name="getAltSubjectMatch()Ljava/lang/String;" since="23"/>
-		<method name="getAnonymousIdentity()Ljava/lang/String;"/>
-		<method name="getCaCertificate()Ljava/security/cert/X509Certificate;"/>
-		<method name="getCaCertificates()[Ljava/security/cert/X509Certificate;" since="24"/>
-		<method name="getClientCertificate()Ljava/security/cert/X509Certificate;"/>
-		<method name="getClientCertificateChain()[Ljava/security/cert/X509Certificate;" since="26"/>
-		<method name="getDomainSuffixMatch()Ljava/lang/String;" since="23"/>
-		<method name="getEapMethod()I"/>
-		<method name="getIdentity()Ljava/lang/String;"/>
-		<method name="getPassword()Ljava/lang/String;"/>
-		<method name="getPhase2Method()I"/>
-		<method name="getPlmn()Ljava/lang/String;" since="23"/>
-		<method name="getRealm()Ljava/lang/String;" since="23"/>
-		<method name="getSubjectMatch()Ljava/lang/String;" deprecated="23"/>
-		<method name="setAltSubjectMatch(Ljava/lang/String;)V" since="23"/>
-		<method name="setAnonymousIdentity(Ljava/lang/String;)V"/>
-		<method name="setCaCertificate(Ljava/security/cert/X509Certificate;)V"/>
-		<method name="setCaCertificates([Ljava/security/cert/X509Certificate;)V" since="24"/>
-		<method name="setClientKeyEntry(Ljava/security/PrivateKey;Ljava/security/cert/X509Certificate;)V"/>
-		<method name="setClientKeyEntryWithCertificateChain(Ljava/security/PrivateKey;[Ljava/security/cert/X509Certificate;)V" since="26"/>
-		<method name="setDomainSuffixMatch(Ljava/lang/String;)V" since="23"/>
-		<method name="setEapMethod(I)V"/>
-		<method name="setIdentity(Ljava/lang/String;)V"/>
-		<method name="setPassword(Ljava/lang/String;)V"/>
-		<method name="setPhase2Method(I)V"/>
-		<method name="setPlmn(Ljava/lang/String;)V" since="23"/>
-		<method name="setRealm(Ljava/lang/String;)V" since="23"/>
-		<method name="setSubjectMatch(Ljava/lang/String;)V" deprecated="23"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/WifiEnterpriseConfig$Eap" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AKA" since="21"/>
-		<field name="AKA_PRIME" since="23"/>
-		<field name="NONE"/>
-		<field name="PEAP"/>
-		<field name="PWD"/>
-		<field name="SIM" since="21"/>
-		<field name="TLS"/>
-		<field name="TTLS"/>
-		<field name="UNAUTH_TLS" since="24"/>
-	</class>
-	<class name="android/net/wifi/WifiEnterpriseConfig$Phase2" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AKA" since="26"/>
-		<field name="AKA_PRIME" since="26"/>
-		<field name="GTC"/>
-		<field name="MSCHAP"/>
-		<field name="MSCHAPV2"/>
-		<field name="NONE"/>
-		<field name="PAP"/>
-		<field name="SIM" since="26"/>
-	</class>
-	<class name="android/net/wifi/WifiInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBSSID()Ljava/lang/String;"/>
-		<method name="getDetailedStateOf(Landroid/net/wifi/SupplicantState;)Landroid/net/NetworkInfo$DetailedState;"/>
-		<method name="getFrequency()I" since="21"/>
-		<method name="getHiddenSSID()Z"/>
-		<method name="getIpAddress()I"/>
-		<method name="getLinkSpeed()I"/>
-		<method name="getMacAddress()Ljava/lang/String;"/>
-		<method name="getNetworkId()I"/>
-		<method name="getRssi()I"/>
-		<method name="getSSID()Ljava/lang/String;"/>
-		<method name="getSupplicantState()Landroid/net/wifi/SupplicantState;"/>
-		<field name="FREQUENCY_UNITS" since="21"/>
-		<field name="LINK_SPEED_UNITS"/>
-	</class>
-	<class name="android/net/wifi/WifiManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addNetwork(Landroid/net/wifi/WifiConfiguration;)I"/>
-		<method name="addOrUpdatePasspointConfiguration(Landroid/net/wifi/hotspot2/PasspointConfiguration;)V" since="26"/>
-		<method name="calculateSignalLevel(II)I"/>
-		<method name="cancelWps(Landroid/net/wifi/WifiManager$WpsCallback;)V" since="21" deprecated="28"/>
-		<method name="compareSignalLevel(II)I"/>
-		<method name="createMulticastLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$MulticastLock;" since="4"/>
-		<method name="createWifiLock(ILjava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;" since="3"/>
-		<method name="createWifiLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;"/>
-		<method name="disableNetwork(I)Z"/>
-		<method name="disconnect()Z"/>
-		<method name="enableNetwork(IZ)Z"/>
-		<method name="getConfiguredNetworks()Ljava/util/List;"/>
-		<method name="getConnectionInfo()Landroid/net/wifi/WifiInfo;"/>
-		<method name="getDhcpInfo()Landroid/net/DhcpInfo;" deprecated="18"/>
-		<method name="getPasspointConfigurations()Ljava/util/List;" since="26"/>
-		<method name="getScanResults()Ljava/util/List;"/>
-		<method name="getWifiState()I"/>
-		<method name="is5GHzBandSupported()Z" since="21"/>
-		<method name="isDeviceToApRttSupported()Z" since="21"/>
-		<method name="isEnhancedPowerReportingSupported()Z" since="21"/>
-		<method name="isP2pSupported()Z" since="21"/>
-		<method name="isPreferredNetworkOffloadSupported()Z" since="21"/>
-		<method name="isScanAlwaysAvailable()Z" since="18"/>
-		<method name="isTdlsSupported()Z" since="21"/>
-		<method name="isWifiEnabled()Z"/>
-		<method name="pingSupplicant()Z" deprecated="26"/>
-		<method name="reassociate()Z"/>
-		<method name="reconnect()Z"/>
-		<method name="removeNetwork(I)Z"/>
-		<method name="removePasspointConfiguration(Ljava/lang/String;)V" since="26"/>
-		<method name="saveConfiguration()Z" deprecated="26"/>
-		<method name="setTdlsEnabled(Ljava/net/InetAddress;Z)V" since="19"/>
-		<method name="setTdlsEnabledWithMacAddress(Ljava/lang/String;Z)V" since="19"/>
-		<method name="setWifiEnabled(Z)Z"/>
-		<method name="startLocalOnlyHotspot(Landroid/net/wifi/WifiManager$LocalOnlyHotspotCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="startScan()Z" deprecated="28"/>
-		<method name="startWps(Landroid/net/wifi/WpsInfo;Landroid/net/wifi/WifiManager$WpsCallback;)V" since="21" deprecated="28"/>
-		<method name="updateNetwork(Landroid/net/wifi/WifiConfiguration;)I"/>
-		<field name="ACTION_PICK_WIFI_NETWORK"/>
-		<field name="ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE" since="18"/>
-		<field name="ERROR_AUTHENTICATING" deprecated="28"/>
-		<field name="EXTRA_BSSID" deprecated="28"/>
-		<field name="EXTRA_NETWORK_INFO"/>
-		<field name="EXTRA_NEW_RSSI"/>
-		<field name="EXTRA_NEW_STATE" deprecated="28"/>
-		<field name="EXTRA_PREVIOUS_WIFI_STATE"/>
-		<field name="EXTRA_RESULTS_UPDATED" since="23"/>
-		<field name="EXTRA_SUPPLICANT_CONNECTED" deprecated="28"/>
-		<field name="EXTRA_SUPPLICANT_ERROR" deprecated="28"/>
-		<field name="EXTRA_WIFI_INFO" since="14" deprecated="28"/>
-		<field name="EXTRA_WIFI_STATE"/>
-		<field name="NETWORK_IDS_CHANGED_ACTION"/>
-		<field name="NETWORK_STATE_CHANGED_ACTION"/>
-		<field name="RSSI_CHANGED_ACTION"/>
-		<field name="SCAN_RESULTS_AVAILABLE_ACTION"/>
-		<field name="SUPPLICANT_CONNECTION_CHANGE_ACTION" deprecated="28"/>
-		<field name="SUPPLICANT_STATE_CHANGED_ACTION" deprecated="28"/>
-		<field name="WIFI_MODE_FULL" since="3"/>
-		<field name="WIFI_MODE_FULL_HIGH_PERF" since="12"/>
-		<field name="WIFI_MODE_SCAN_ONLY" since="3"/>
-		<field name="WIFI_STATE_CHANGED_ACTION"/>
-		<field name="WIFI_STATE_DISABLED"/>
-		<field name="WIFI_STATE_DISABLING"/>
-		<field name="WIFI_STATE_ENABLED"/>
-		<field name="WIFI_STATE_ENABLING"/>
-		<field name="WIFI_STATE_UNKNOWN"/>
-		<field name="WPS_AUTH_FAILURE" since="21" deprecated="28"/>
-		<field name="WPS_OVERLAP_ERROR" since="21" deprecated="28"/>
-		<field name="WPS_TIMED_OUT" since="21" deprecated="28"/>
-		<field name="WPS_TKIP_ONLY_PROHIBITED" since="21" deprecated="28"/>
-		<field name="WPS_WEP_PROHIBITED" since="21" deprecated="28"/>
-	</class>
-	<class name="android/net/wifi/WifiManager$LocalOnlyHotspotCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFailed(I)V"/>
-		<method name="onStarted(Landroid/net/wifi/WifiManager$LocalOnlyHotspotReservation;)V"/>
-		<method name="onStopped()V"/>
-		<field name="ERROR_GENERIC"/>
-		<field name="ERROR_INCOMPATIBLE_MODE"/>
-		<field name="ERROR_NO_CHANNEL"/>
-		<field name="ERROR_TETHERING_DISALLOWED"/>
-	</class>
-	<class name="android/net/wifi/WifiManager$LocalOnlyHotspotReservation" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>(Landroid/net/wifi/WifiManager;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/wifi/WifiManager;Landroid/net/wifi/WifiConfiguration;)V" since="29"/>
-		<method name="getWifiConfiguration()Landroid/net/wifi/WifiConfiguration;"/>
-	</class>
-	<class name="android/net/wifi/WifiManager$MulticastLock" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/wifi/WifiManager;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/wifi/WifiManager;Ljava/lang/String;)V" since="29"/>
-		<method name="acquire()V"/>
-		<method name="isHeld()Z"/>
-		<method name="release()V"/>
-		<method name="setReferenceCounted(Z)V"/>
-	</class>
-	<class name="android/net/wifi/WifiManager$WifiLock" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/wifi/WifiManager;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/wifi/WifiManager;ILjava/lang/String;)V" since="29"/>
-		<method name="acquire()V"/>
-		<method name="isHeld()Z"/>
-		<method name="release()V"/>
-		<method name="setReferenceCounted(Z)V"/>
-		<method name="setWorkSource(Landroid/os/WorkSource;)V" since="9"/>
-	</class>
-	<class name="android/net/wifi/WifiManager$WpsCallback" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFailed(I)V" deprecated="28"/>
-		<method name="onStarted(Ljava/lang/String;)V" deprecated="28"/>
-		<method name="onSucceeded()V" deprecated="28"/>
-	</class>
-	<class name="android/net/wifi/WpsInfo" since="14" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" deprecated="28"/>
-		<method name="&lt;init>(Landroid/net/wifi/WpsInfo;)V" deprecated="28"/>
-		<field name="BSSID" since="21" deprecated="28"/>
-		<field name="CREATOR" deprecated="28"/>
-		<field name="DISPLAY" deprecated="28"/>
-		<field name="INVALID" deprecated="28"/>
-		<field name="KEYPAD" deprecated="28"/>
-		<field name="LABEL" deprecated="28"/>
-		<field name="PBC" deprecated="28"/>
-		<field name="pin" deprecated="28"/>
-		<field name="setup" deprecated="28"/>
-	</class>
-	<class name="android/net/wifi/aware/AttachCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAttachFailed()V"/>
-		<method name="onAttached(Landroid/net/wifi/aware/WifiAwareSession;)V"/>
-	</class>
-	<class name="android/net/wifi/aware/Characteristics" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Bundle;)V" since="29"/>
-		<method name="getMaxMatchFilterLength()I"/>
-		<method name="getMaxServiceNameLength()I"/>
-		<method name="getMaxServiceSpecificInfoLength()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/aware/DiscoverySession" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;II)V" since="29"/>
-		<method name="createNetworkSpecifierOpen(Landroid/net/wifi/aware/PeerHandle;)Landroid/net/NetworkSpecifier;"/>
-		<method name="createNetworkSpecifierPassphrase(Landroid/net/wifi/aware/PeerHandle;Ljava/lang/String;)Landroid/net/NetworkSpecifier;"/>
-		<method name="sendMessage(Landroid/net/wifi/aware/PeerHandle;I[B)V"/>
-	</class>
-	<class name="android/net/wifi/aware/DiscoverySessionCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onMessageReceived(Landroid/net/wifi/aware/PeerHandle;[B)V"/>
-		<method name="onMessageSendFailed(I)V"/>
-		<method name="onMessageSendSucceeded(I)V"/>
-		<method name="onPublishStarted(Landroid/net/wifi/aware/PublishDiscoverySession;)V"/>
-		<method name="onServiceDiscovered(Landroid/net/wifi/aware/PeerHandle;[BLjava/util/List;)V"/>
-		<method name="onServiceDiscoveredWithinRange(Landroid/net/wifi/aware/PeerHandle;[BLjava/util/List;I)V" since="28"/>
-		<method name="onSessionConfigFailed()V"/>
-		<method name="onSessionConfigUpdated()V"/>
-		<method name="onSessionTerminated()V"/>
-		<method name="onSubscribeStarted(Landroid/net/wifi/aware/SubscribeDiscoverySession;)V"/>
-	</class>
-	<class name="android/net/wifi/aware/IdentityChangedListener" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onIdentityChanged([B)V"/>
-	</class>
-	<class name="android/net/wifi/aware/PeerHandle" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-	</class>
-	<class name="android/net/wifi/aware/PublishConfig" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([B[B[BIIZZ)V" since="29"/>
-		<field name="CREATOR"/>
-		<field name="PUBLISH_TYPE_SOLICITED"/>
-		<field name="PUBLISH_TYPE_UNSOLICITED"/>
-	</class>
-	<class name="android/net/wifi/aware/PublishConfig$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/net/wifi/aware/PublishConfig;"/>
-		<method name="setMatchFilter(Ljava/util/List;)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
-		<method name="setPublishType(I)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
-		<method name="setRangingEnabled(Z)Landroid/net/wifi/aware/PublishConfig$Builder;" since="28"/>
-		<method name="setServiceName(Ljava/lang/String;)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
-		<method name="setServiceSpecificInfo([B)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
-		<method name="setTerminateNotificationEnabled(Z)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
-		<method name="setTtlSec(I)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
-	</class>
-	<class name="android/net/wifi/aware/PublishDiscoverySession" since="26">
-		<extends name="android/net/wifi/aware/DiscoverySession"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;II)V" since="29"/>
-		<method name="updatePublish(Landroid/net/wifi/aware/PublishConfig;)V"/>
-	</class>
-	<class name="android/net/wifi/aware/SubscribeConfig" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([B[B[BIIZZIZI)V" since="29"/>
-		<field name="CREATOR"/>
-		<field name="SUBSCRIBE_TYPE_ACTIVE"/>
-		<field name="SUBSCRIBE_TYPE_PASSIVE"/>
-	</class>
-	<class name="android/net/wifi/aware/SubscribeConfig$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/net/wifi/aware/SubscribeConfig;"/>
-		<method name="setMatchFilter(Ljava/util/List;)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
-		<method name="setMaxDistanceMm(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;" since="28"/>
-		<method name="setMinDistanceMm(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;" since="28"/>
-		<method name="setServiceName(Ljava/lang/String;)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
-		<method name="setServiceSpecificInfo([B)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
-		<method name="setSubscribeType(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
-		<method name="setTerminateNotificationEnabled(Z)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
-		<method name="setTtlSec(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
-	</class>
-	<class name="android/net/wifi/aware/SubscribeDiscoverySession" since="26">
-		<extends name="android/net/wifi/aware/DiscoverySession"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;II)V" since="29"/>
-		<method name="updateSubscribe(Landroid/net/wifi/aware/SubscribeConfig;)V"/>
-	</class>
-	<class name="android/net/wifi/aware/WifiAwareManager" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="attach(Landroid/net/wifi/aware/AttachCallback;Landroid/net/wifi/aware/IdentityChangedListener;Landroid/os/Handler;)V"/>
-		<method name="attach(Landroid/net/wifi/aware/AttachCallback;Landroid/os/Handler;)V"/>
-		<method name="getCharacteristics()Landroid/net/wifi/aware/Characteristics;"/>
-		<method name="isAvailable()Z"/>
-		<field name="ACTION_WIFI_AWARE_STATE_CHANGED"/>
-		<field name="WIFI_AWARE_DATA_PATH_ROLE_INITIATOR"/>
-		<field name="WIFI_AWARE_DATA_PATH_ROLE_RESPONDER"/>
-	</class>
-	<class name="android/net/wifi/aware/WifiAwareSession" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/wifi/aware/WifiAwareManager;Landroid/os/Binder;I)V" since="29"/>
-		<method name="createNetworkSpecifierOpen(I[B)Landroid/net/NetworkSpecifier;"/>
-		<method name="createNetworkSpecifierPassphrase(I[BLjava/lang/String;)Landroid/net/NetworkSpecifier;"/>
-		<method name="publish(Landroid/net/wifi/aware/PublishConfig;Landroid/net/wifi/aware/DiscoverySessionCallback;Landroid/os/Handler;)V"/>
-		<method name="subscribe(Landroid/net/wifi/aware/SubscribeConfig;Landroid/net/wifi/aware/DiscoverySessionCallback;Landroid/os/Handler;)V"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/ConfigParser" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="parsePasspointConfig(Ljava/lang/String;[B)Landroid/net/wifi/hotspot2/PasspointConfiguration;"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/PasspointConfiguration" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/hotspot2/PasspointConfiguration;)V"/>
-		<method name="getCredential()Landroid/net/wifi/hotspot2/pps/Credential;"/>
-		<method name="getHomeSp()Landroid/net/wifi/hotspot2/pps/HomeSp;"/>
-		<method name="setCredential(Landroid/net/wifi/hotspot2/pps/Credential;)V"/>
-		<method name="setHomeSp(Landroid/net/wifi/hotspot2/pps/HomeSp;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/omadm/PpsMoParser" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="parseMoText(Ljava/lang/String;)Landroid/net/wifi/hotspot2/PasspointConfiguration;"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/pps/Credential" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential;)V"/>
-		<method name="getCaCertificate()Ljava/security/cert/X509Certificate;"/>
-		<method name="getCertCredential()Landroid/net/wifi/hotspot2/pps/Credential$CertificateCredential;"/>
-		<method name="getClientCertificateChain()[Ljava/security/cert/X509Certificate;"/>
-		<method name="getClientPrivateKey()Ljava/security/PrivateKey;"/>
-		<method name="getRealm()Ljava/lang/String;"/>
-		<method name="getSimCredential()Landroid/net/wifi/hotspot2/pps/Credential$SimCredential;"/>
-		<method name="getUserCredential()Landroid/net/wifi/hotspot2/pps/Credential$UserCredential;"/>
-		<method name="setCaCertificate(Ljava/security/cert/X509Certificate;)V"/>
-		<method name="setCertCredential(Landroid/net/wifi/hotspot2/pps/Credential$CertificateCredential;)V"/>
-		<method name="setClientCertificateChain([Ljava/security/cert/X509Certificate;)V"/>
-		<method name="setClientPrivateKey(Ljava/security/PrivateKey;)V"/>
-		<method name="setRealm(Ljava/lang/String;)V"/>
-		<method name="setSimCredential(Landroid/net/wifi/hotspot2/pps/Credential$SimCredential;)V"/>
-		<method name="setUserCredential(Landroid/net/wifi/hotspot2/pps/Credential$UserCredential;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/pps/Credential$CertificateCredential" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential$CertificateCredential;)V"/>
-		<method name="getCertSha256Fingerprint()[B"/>
-		<method name="getCertType()Ljava/lang/String;"/>
-		<method name="setCertSha256Fingerprint([B)V"/>
-		<method name="setCertType(Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/pps/Credential$SimCredential" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential$SimCredential;)V"/>
-		<method name="getEapType()I"/>
-		<method name="getImsi()Ljava/lang/String;"/>
-		<method name="setEapType(I)V"/>
-		<method name="setImsi(Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/pps/Credential$UserCredential" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential$UserCredential;)V"/>
-		<method name="getEapType()I"/>
-		<method name="getNonEapInnerMethod()Ljava/lang/String;"/>
-		<method name="getPassword()Ljava/lang/String;"/>
-		<method name="getUsername()Ljava/lang/String;"/>
-		<method name="setEapType(I)V"/>
-		<method name="setNonEapInnerMethod(Ljava/lang/String;)V"/>
-		<method name="setPassword(Ljava/lang/String;)V"/>
-		<method name="setUsername(Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/hotspot2/pps/HomeSp" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/HomeSp;)V"/>
-		<method name="getFqdn()Ljava/lang/String;"/>
-		<method name="getFriendlyName()Ljava/lang/String;"/>
-		<method name="getRoamingConsortiumOis()[J"/>
-		<method name="setFqdn(Ljava/lang/String;)V"/>
-		<method name="setFriendlyName(Ljava/lang/String;)V"/>
-		<method name="setRoamingConsortiumOis([J)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pConfig" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pConfig;)V"/>
-		<field name="CREATOR"/>
-		<field name="deviceAddress"/>
-		<field name="groupOwnerIntent"/>
-		<field name="wps"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pDevice" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
-		<method name="isGroupOwner()Z"/>
-		<method name="isServiceDiscoveryCapable()Z"/>
-		<method name="wpsDisplaySupported()Z"/>
-		<method name="wpsKeypadSupported()Z"/>
-		<method name="wpsPbcSupported()Z"/>
-		<field name="AVAILABLE"/>
-		<field name="CONNECTED"/>
-		<field name="CREATOR"/>
-		<field name="FAILED"/>
-		<field name="INVITED"/>
-		<field name="UNAVAILABLE"/>
-		<field name="deviceAddress"/>
-		<field name="deviceName"/>
-		<field name="primaryDeviceType"/>
-		<field name="secondaryDeviceType"/>
-		<field name="status"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pDeviceList" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pDeviceList;)V"/>
-		<method name="get(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pDevice;" since="18"/>
-		<method name="getDeviceList()Ljava/util/Collection;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pGroup" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pGroup;)V"/>
-		<method name="getClientList()Ljava/util/Collection;"/>
-		<method name="getInterface()Ljava/lang/String;"/>
-		<method name="getNetworkName()Ljava/lang/String;"/>
-		<method name="getOwner()Landroid/net/wifi/p2p/WifiP2pDevice;"/>
-		<method name="getPassphrase()Ljava/lang/String;"/>
-		<method name="isGroupOwner()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pInfo;)V"/>
-		<field name="CREATOR"/>
-		<field name="groupFormed"/>
-		<field name="groupOwnerAddress"/>
-		<field name="isGroupOwner"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addLocalService(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<method name="addServiceRequest(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<method name="cancelConnect(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
-		<method name="clearLocalServices(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<method name="clearServiceRequests(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<method name="connect(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pConfig;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
-		<method name="createGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
-		<method name="discoverPeers(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
-		<method name="discoverServices(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<method name="initialize(Landroid/content/Context;Landroid/os/Looper;Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;"/>
-		<method name="removeGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
-		<method name="removeLocalService(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<method name="removeServiceRequest(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<method name="requestConnectionInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ConnectionInfoListener;)V"/>
-		<method name="requestGroupInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$GroupInfoListener;)V"/>
-		<method name="requestPeers(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$PeerListListener;)V"/>
-		<method name="setDnsSdResponseListeners(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$DnsSdServiceResponseListener;Landroid/net/wifi/p2p/WifiP2pManager$DnsSdTxtRecordListener;)V" since="16"/>
-		<method name="setServiceResponseListener(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ServiceResponseListener;)V" since="16"/>
-		<method name="setUpnpServiceResponseListener(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$UpnpServiceResponseListener;)V" since="16"/>
-		<method name="stopPeerDiscovery(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
-		<field name="BUSY"/>
-		<field name="ERROR"/>
-		<field name="EXTRA_DISCOVERY_STATE" since="16"/>
-		<field name="EXTRA_NETWORK_INFO"/>
-		<field name="EXTRA_P2P_DEVICE_LIST" since="18"/>
-		<field name="EXTRA_WIFI_P2P_DEVICE"/>
-		<field name="EXTRA_WIFI_P2P_GROUP" since="18"/>
-		<field name="EXTRA_WIFI_P2P_INFO"/>
-		<field name="EXTRA_WIFI_STATE"/>
-		<field name="NO_SERVICE_REQUESTS" since="16"/>
-		<field name="P2P_UNSUPPORTED"/>
-		<field name="WIFI_P2P_CONNECTION_CHANGED_ACTION"/>
-		<field name="WIFI_P2P_DISCOVERY_CHANGED_ACTION" since="16"/>
-		<field name="WIFI_P2P_DISCOVERY_STARTED" since="16"/>
-		<field name="WIFI_P2P_DISCOVERY_STOPPED" since="16"/>
-		<field name="WIFI_P2P_PEERS_CHANGED_ACTION"/>
-		<field name="WIFI_P2P_STATE_CHANGED_ACTION"/>
-		<field name="WIFI_P2P_STATE_DISABLED"/>
-		<field name="WIFI_P2P_STATE_ENABLED"/>
-		<field name="WIFI_P2P_THIS_DEVICE_CHANGED_ACTION"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$ActionListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onFailure(I)V"/>
-		<method name="onSuccess()V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$Channel" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="27"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/os/Looper;Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;Landroid/os/Binder;Landroid/net/wifi/p2p/WifiP2pManager;)V" since="29"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$ChannelListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onChannelDisconnected()V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$ConnectionInfoListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onConnectionInfoAvailable(Landroid/net/wifi/p2p/WifiP2pInfo;)V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$DnsSdServiceResponseListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onDnsSdServiceAvailable(Ljava/lang/String;Ljava/lang/String;Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$DnsSdTxtRecordListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onDnsSdTxtRecordAvailable(Ljava/lang/String;Ljava/util/Map;Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$GroupInfoListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onGroupInfoAvailable(Landroid/net/wifi/p2p/WifiP2pGroup;)V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$PeerListListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onPeersAvailable(Landroid/net/wifi/p2p/WifiP2pDeviceList;)V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$ServiceResponseListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onServiceAvailable(I[BLandroid/net/wifi/p2p/WifiP2pDevice;)V"/>
-	</class>
-	<class name="android/net/wifi/p2p/WifiP2pManager$UpnpServiceResponseListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onUpnpServiceAvailable(Ljava/util/List;Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
-	</class>
-	<class name="android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo" since="16">
-		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/List;)V" since="29"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo;"/>
-	</class>
-	<class name="android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest" since="16">
-		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest"/>
-		<method name="&lt;init>()V"/>
-		<method name="newInstance()Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
-		<method name="newInstance(Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
-	</class>
-	<class name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/List;)V" since="29"/>
-		<field name="SERVICE_TYPE_ALL"/>
-		<field name="SERVICE_TYPE_BONJOUR"/>
-		<field name="SERVICE_TYPE_UPNP"/>
-		<field name="SERVICE_TYPE_VENDOR_SPECIFIC"/>
-	</class>
-	<class name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
-		<method name="newInstance(I)Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;"/>
-		<method name="newInstance(ILjava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;"/>
-	</class>
-	<class name="android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo" since="16">
-		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/List;)V" since="29"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo;"/>
-	</class>
-	<class name="android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest" since="16">
-		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest"/>
-		<method name="&lt;init>()V"/>
-		<method name="newInstance()Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest;"/>
-		<method name="newInstance(Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest;"/>
-	</class>
-	<class name="android/net/wifi/rtt/RangingRequest" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMaxPeers()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/net/wifi/rtt/RangingRequest$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addAccessPoint(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
-		<method name="addAccessPoints(Ljava/util/List;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
-		<method name="addWifiAwarePeer(Landroid/net/MacAddress;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
-		<method name="addWifiAwarePeer(Landroid/net/wifi/aware/PeerHandle;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
-		<method name="build()Landroid/net/wifi/rtt/RangingRequest;"/>
-	</class>
-	<class name="android/net/wifi/rtt/RangingResult" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILandroid/net/MacAddress;IIIII[B[BJ)V" since="29"/>
-		<method name="getDistanceMm()I"/>
-		<method name="getDistanceStdDevMm()I"/>
-		<method name="getMacAddress()Landroid/net/MacAddress;"/>
-		<method name="getNumAttemptedMeasurements()I"/>
-		<method name="getNumSuccessfulMeasurements()I"/>
-		<method name="getPeerHandle()Landroid/net/wifi/aware/PeerHandle;"/>
-		<method name="getRangingTimestampMillis()J"/>
-		<method name="getRssi()I"/>
-		<method name="getStatus()I"/>
-		<field name="CREATOR"/>
-		<field name="STATUS_FAIL"/>
-		<field name="STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC"/>
-		<field name="STATUS_SUCCESS"/>
-	</class>
-	<class name="android/net/wifi/rtt/RangingResultCallback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onRangingFailure(I)V"/>
-		<method name="onRangingResults(Ljava/util/List;)V"/>
-		<field name="STATUS_CODE_FAIL"/>
-		<field name="STATUS_CODE_FAIL_RTT_NOT_AVAILABLE"/>
-	</class>
-	<class name="android/net/wifi/rtt/WifiRttManager" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isAvailable()Z"/>
-		<method name="startRanging(Landroid/net/wifi/rtt/RangingRequest;Ljava/util/concurrent/Executor;Landroid/net/wifi/rtt/RangingResultCallback;)V"/>
-		<field name="ACTION_WIFI_RTT_STATE_CHANGED"/>
-	</class>
-	<class name="android/nfc/FormatException" since="9">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16"/>
-	</class>
-	<class name="android/nfc/NdefMessage" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/nfc/NdefRecord;[Landroid/nfc/NdefRecord;)V" since="16"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="&lt;init>([Landroid/nfc/NdefRecord;)V"/>
-		<method name="getByteArrayLength()I" since="16"/>
-		<method name="getRecords()[Landroid/nfc/NdefRecord;"/>
-		<method name="toByteArray()[B"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/nfc/NdefRecord" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(S[B[B[B)V"/>
-		<method name="&lt;init>([B)V" deprecated="16"/>
-		<method name="createApplicationRecord(Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="14"/>
-		<method name="createExternal(Ljava/lang/String;Ljava/lang/String;[B)Landroid/nfc/NdefRecord;" since="16"/>
-		<method name="createMime(Ljava/lang/String;[B)Landroid/nfc/NdefRecord;" since="16"/>
-		<method name="createTextRecord(Ljava/lang/String;Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="21"/>
-		<method name="createUri(Landroid/net/Uri;)Landroid/nfc/NdefRecord;" since="14"/>
-		<method name="createUri(Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="14"/>
-		<method name="getId()[B"/>
-		<method name="getPayload()[B"/>
-		<method name="getTnf()S"/>
-		<method name="getType()[B"/>
-		<method name="toByteArray()[B" deprecated="16"/>
-		<method name="toMimeType()Ljava/lang/String;" since="16"/>
-		<method name="toUri()Landroid/net/Uri;" since="16"/>
-		<field name="CREATOR"/>
-		<field name="RTD_ALTERNATIVE_CARRIER"/>
-		<field name="RTD_HANDOVER_CARRIER"/>
-		<field name="RTD_HANDOVER_REQUEST"/>
-		<field name="RTD_HANDOVER_SELECT"/>
-		<field name="RTD_SMART_POSTER"/>
-		<field name="RTD_TEXT"/>
-		<field name="RTD_URI"/>
-		<field name="TNF_ABSOLUTE_URI"/>
-		<field name="TNF_EMPTY"/>
-		<field name="TNF_EXTERNAL_TYPE"/>
-		<field name="TNF_MIME_MEDIA"/>
-		<field name="TNF_UNCHANGED"/>
-		<field name="TNF_UNKNOWN"/>
-		<field name="TNF_WELL_KNOWN"/>
-	</class>
-	<class name="android/nfc/NfcAdapter" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="disableForegroundDispatch(Landroid/app/Activity;)V" since="10"/>
-		<method name="disableForegroundNdefPush(Landroid/app/Activity;)V" since="10" deprecated="16"/>
-		<method name="disableReaderMode(Landroid/app/Activity;)V" since="19"/>
-		<method name="enableForegroundDispatch(Landroid/app/Activity;Landroid/app/PendingIntent;[Landroid/content/IntentFilter;[[Ljava/lang/String;)V" since="10"/>
-		<method name="enableForegroundNdefPush(Landroid/app/Activity;Landroid/nfc/NdefMessage;)V" since="10" deprecated="16"/>
-		<method name="enableReaderMode(Landroid/app/Activity;Landroid/nfc/NfcAdapter$ReaderCallback;ILandroid/os/Bundle;)V" since="19"/>
-		<method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;" removed="16"/>
-		<method name="getDefaultAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;" since="10"/>
-		<method name="ignore(Landroid/nfc/Tag;ILandroid/nfc/NfcAdapter$OnTagRemovedListener;Landroid/os/Handler;)Z" since="24"/>
-		<method name="invokeBeam(Landroid/app/Activity;)Z" since="21"/>
-		<method name="isEnabled()Z"/>
-		<method name="isNdefPushEnabled()Z" since="16"/>
-		<method name="setBeamPushUris([Landroid/net/Uri;Landroid/app/Activity;)V" since="16"/>
-		<method name="setBeamPushUrisCallback(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback;Landroid/app/Activity;)V" since="16"/>
-		<method name="setNdefPushMessage(Landroid/nfc/NdefMessage;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14"/>
-		<method name="setNdefPushMessageCallback(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14"/>
-		<method name="setOnNdefPushCompleteCallback(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14"/>
-		<field name="ACTION_ADAPTER_STATE_CHANGED" since="18"/>
-		<field name="ACTION_NDEF_DISCOVERED" since="10"/>
-		<field name="ACTION_TAG_DISCOVERED"/>
-		<field name="ACTION_TECH_DISCOVERED" since="10"/>
-		<field name="ACTION_TRANSACTION_DETECTED" since="28"/>
-		<field name="EXTRA_ADAPTER_STATE" since="18"/>
-		<field name="EXTRA_AID" since="28"/>
-		<field name="EXTRA_DATA" since="28"/>
-		<field name="EXTRA_ID"/>
-		<field name="EXTRA_NDEF_MESSAGES"/>
-		<field name="EXTRA_READER_PRESENCE_CHECK_DELAY" since="19"/>
-		<field name="EXTRA_SECURE_ELEMENT_NAME" since="28"/>
-		<field name="EXTRA_TAG" since="10"/>
-		<field name="FLAG_READER_NFC_A" since="19"/>
-		<field name="FLAG_READER_NFC_B" since="19"/>
-		<field name="FLAG_READER_NFC_BARCODE" since="19"/>
-		<field name="FLAG_READER_NFC_F" since="19"/>
-		<field name="FLAG_READER_NFC_V" since="19"/>
-		<field name="FLAG_READER_NO_PLATFORM_SOUNDS" since="19"/>
-		<field name="FLAG_READER_SKIP_NDEF_CHECK" since="19"/>
-		<field name="STATE_OFF" since="18"/>
-		<field name="STATE_ON" since="18"/>
-		<field name="STATE_TURNING_OFF" since="18"/>
-		<field name="STATE_TURNING_ON" since="18"/>
-	</class>
-	<class name="android/nfc/NfcAdapter$CreateBeamUrisCallback" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="createBeamUris(Landroid/nfc/NfcEvent;)[Landroid/net/Uri;"/>
-	</class>
-	<class name="android/nfc/NfcAdapter$CreateNdefMessageCallback" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="createNdefMessage(Landroid/nfc/NfcEvent;)Landroid/nfc/NdefMessage;"/>
-	</class>
-	<class name="android/nfc/NfcAdapter$OnNdefPushCompleteCallback" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onNdefPushComplete(Landroid/nfc/NfcEvent;)V"/>
-	</class>
-	<class name="android/nfc/NfcAdapter$OnTagRemovedListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onTagRemoved()V"/>
-	</class>
-	<class name="android/nfc/NfcAdapter$ReaderCallback" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onTagDiscovered(Landroid/nfc/Tag;)V"/>
-	</class>
-	<class name="android/nfc/NfcEvent" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/NfcAdapter;B)V" since="29"/>
-		<field name="nfcAdapter"/>
-		<field name="peerLlcpMajorVersion" since="23"/>
-		<field name="peerLlcpMinorVersion" since="23"/>
-	</class>
-	<class name="android/nfc/NfcManager" since="10">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;"/>
-	</class>
-	<class name="android/nfc/Tag" since="10">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getId()[B"/>
-		<method name="getTechList()[Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/nfc/TagLostException" since="10">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/nfc/cardemulation/CardEmulation" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="categoryAllowsForegroundPreference(Ljava/lang/String;)Z" since="21"/>
-		<method name="getAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="21"/>
-		<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/CardEmulation;"/>
-		<method name="getSelectionModeForCategory(Ljava/lang/String;)I"/>
-		<method name="isDefaultServiceForAid(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
-		<method name="isDefaultServiceForCategory(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
-		<method name="registerAidsForService(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)Z" since="21"/>
-		<method name="removeAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
-		<method name="setPreferredService(Landroid/app/Activity;Landroid/content/ComponentName;)Z" since="21"/>
-		<method name="supportsAidPrefixRegistration()Z" since="21"/>
-		<method name="unsetPreferredService(Landroid/app/Activity;)Z" since="21"/>
-		<field name="ACTION_CHANGE_DEFAULT"/>
-		<field name="CATEGORY_OTHER"/>
-		<field name="CATEGORY_PAYMENT"/>
-		<field name="EXTRA_CATEGORY"/>
-		<field name="EXTRA_SERVICE_COMPONENT"/>
-		<field name="SELECTION_MODE_ALWAYS_ASK"/>
-		<field name="SELECTION_MODE_ASK_IF_CONFLICT"/>
-		<field name="SELECTION_MODE_PREFER_DEFAULT"/>
-	</class>
-	<class name="android/nfc/cardemulation/HostApduService" since="19">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="notifyUnhandled()V"/>
-		<method name="onDeactivated(I)V"/>
-		<method name="processCommandApdu([BLandroid/os/Bundle;)[B"/>
-		<method name="sendResponseApdu([B)V"/>
-		<field name="DEACTIVATION_DESELECTED"/>
-		<field name="DEACTIVATION_LINK_LOSS"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/nfc/cardemulation/HostNfcFService" since="24">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onDeactivated(I)V"/>
-		<method name="processNfcFPacket([BLandroid/os/Bundle;)[B"/>
-		<method name="sendResponsePacket([B)V"/>
-		<field name="DEACTIVATION_LINK_LOSS"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/nfc/cardemulation/NfcFCardEmulation" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="disableService(Landroid/app/Activity;)Z"/>
-		<method name="enableService(Landroid/app/Activity;Landroid/content/ComponentName;)Z"/>
-		<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/NfcFCardEmulation;"/>
-		<method name="getNfcid2ForService(Landroid/content/ComponentName;)Ljava/lang/String;"/>
-		<method name="getSystemCodeForService(Landroid/content/ComponentName;)Ljava/lang/String;"/>
-		<method name="registerSystemCodeForService(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
-		<method name="setNfcid2ForService(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
-		<method name="unregisterSystemCodeForService(Landroid/content/ComponentName;)Z"/>
-	</class>
-	<class name="android/nfc/cardemulation/OffHostApduService" since="19">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/nfc/tech/BasicTagTechnology" since="10" removed="29">
-		<extends name="java/lang/Object"/>
-		<implements name="android/nfc/tech/TagTechnology"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/nfc/tech/IsoDep" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/IsoDep;"/>
-		<method name="getHiLayerResponse()[B"/>
-		<method name="getHistoricalBytes()[B"/>
-		<method name="getMaxTransceiveLength()I" since="14"/>
-		<method name="getTimeout()I" since="14"/>
-		<method name="isExtendedLengthApduSupported()Z" since="16"/>
-		<method name="setTimeout(I)V"/>
-		<method name="transceive([B)[B"/>
-	</class>
-	<class name="android/nfc/tech/MifareClassic" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="authenticateSectorWithKeyA(I[B)Z"/>
-		<method name="authenticateSectorWithKeyB(I[B)Z"/>
-		<method name="blockToSector(I)I"/>
-		<method name="decrement(II)V"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/MifareClassic;"/>
-		<method name="getBlockCount()I"/>
-		<method name="getBlockCountInSector(I)I"/>
-		<method name="getMaxTransceiveLength()I" since="14"/>
-		<method name="getSectorCount()I"/>
-		<method name="getSize()I"/>
-		<method name="getTimeout()I" since="14"/>
-		<method name="getType()I"/>
-		<method name="increment(II)V"/>
-		<method name="readBlock(I)[B"/>
-		<method name="restore(I)V"/>
-		<method name="sectorToBlock(I)I"/>
-		<method name="setTimeout(I)V" since="14"/>
-		<method name="transceive([B)[B"/>
-		<method name="transfer(I)V"/>
-		<method name="writeBlock(I[B)V"/>
-		<field name="BLOCK_SIZE"/>
-		<field name="KEY_DEFAULT"/>
-		<field name="KEY_MIFARE_APPLICATION_DIRECTORY"/>
-		<field name="KEY_NFC_FORUM"/>
-		<field name="SIZE_1K"/>
-		<field name="SIZE_2K"/>
-		<field name="SIZE_4K"/>
-		<field name="SIZE_MINI"/>
-		<field name="TYPE_CLASSIC"/>
-		<field name="TYPE_PLUS"/>
-		<field name="TYPE_PRO"/>
-		<field name="TYPE_UNKNOWN"/>
-	</class>
-	<class name="android/nfc/tech/MifareUltralight" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/MifareUltralight;"/>
-		<method name="getMaxTransceiveLength()I" since="14"/>
-		<method name="getTimeout()I" since="14"/>
-		<method name="getType()I"/>
-		<method name="readPages(I)[B"/>
-		<method name="setTimeout(I)V" since="14"/>
-		<method name="transceive([B)[B"/>
-		<method name="writePage(I[B)V"/>
-		<field name="PAGE_SIZE"/>
-		<field name="TYPE_ULTRALIGHT"/>
-		<field name="TYPE_ULTRALIGHT_C"/>
-		<field name="TYPE_UNKNOWN"/>
-	</class>
-	<class name="android/nfc/tech/Ndef" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="canMakeReadOnly()Z"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/Ndef;"/>
-		<method name="getCachedNdefMessage()Landroid/nfc/NdefMessage;"/>
-		<method name="getMaxSize()I"/>
-		<method name="getNdefMessage()Landroid/nfc/NdefMessage;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="isWritable()Z"/>
-		<method name="makeReadOnly()Z"/>
-		<method name="writeNdefMessage(Landroid/nfc/NdefMessage;)V"/>
-		<field name="MIFARE_CLASSIC"/>
-		<field name="NFC_FORUM_TYPE_1"/>
-		<field name="NFC_FORUM_TYPE_2"/>
-		<field name="NFC_FORUM_TYPE_3"/>
-		<field name="NFC_FORUM_TYPE_4"/>
-	</class>
-	<class name="android/nfc/tech/NdefFormatable" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="format(Landroid/nfc/NdefMessage;)V"/>
-		<method name="formatReadOnly(Landroid/nfc/NdefMessage;)V"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NdefFormatable;"/>
-	</class>
-	<class name="android/nfc/tech/NfcA" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcA;"/>
-		<method name="getAtqa()[B"/>
-		<method name="getMaxTransceiveLength()I" since="14"/>
-		<method name="getSak()S"/>
-		<method name="getTimeout()I" since="14"/>
-		<method name="setTimeout(I)V" since="14"/>
-		<method name="transceive([B)[B"/>
-	</class>
-	<class name="android/nfc/tech/NfcB" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcB;"/>
-		<method name="getApplicationData()[B"/>
-		<method name="getMaxTransceiveLength()I" since="14"/>
-		<method name="getProtocolInfo()[B"/>
-		<method name="transceive([B)[B"/>
-	</class>
-	<class name="android/nfc/tech/NfcBarcode" since="17">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcBarcode;"/>
-		<method name="getBarcode()[B"/>
-		<method name="getType()I"/>
-		<field name="TYPE_KOVIO"/>
-		<field name="TYPE_UNKNOWN"/>
-	</class>
-	<class name="android/nfc/tech/NfcF" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcF;"/>
-		<method name="getManufacturer()[B"/>
-		<method name="getMaxTransceiveLength()I" since="14"/>
-		<method name="getSystemCode()[B"/>
-		<method name="getTimeout()I" since="14"/>
-		<method name="setTimeout(I)V" since="14"/>
-		<method name="transceive([B)[B"/>
-	</class>
-	<class name="android/nfc/tech/NfcV" since="10">
-		<extends name="android/nfc/tech/BasicTagTechnology" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/nfc/Tag;)V" since="29"/>
-		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcV;"/>
-		<method name="getDsfId()B"/>
-		<method name="getMaxTransceiveLength()I" since="14"/>
-		<method name="getResponseFlags()B"/>
-		<method name="transceive([B)[B"/>
-	</class>
-	<class name="android/nfc/tech/TagTechnology" since="10">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="connect()V"/>
-		<method name="getTag()Landroid/nfc/Tag;"/>
-		<method name="isConnected()Z"/>
-	</class>
-	<class name="android/opengl/EGL14" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="eglBindAPI(I)Z"/>
-		<method name="eglBindTexImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z"/>
-		<method name="eglChooseConfig(Landroid/opengl/EGLDisplay;[II[Landroid/opengl/EGLConfig;II[II)Z"/>
-		<method name="eglCopyBuffers(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z"/>
-		<method name="eglCreateContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Landroid/opengl/EGLContext;[II)Landroid/opengl/EGLContext;"/>
-		<method name="eglCreatePbufferFromClientBuffer(Landroid/opengl/EGLDisplay;IILandroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;"/>
-		<method name="eglCreatePbufferSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;"/>
-		<method name="eglCreatePixmapSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Landroid/opengl/EGLSurface;" deprecated="26"/>
-		<method name="eglCreateWindowSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/lang/Object;[II)Landroid/opengl/EGLSurface;"/>
-		<method name="eglDestroyContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;)Z"/>
-		<method name="eglDestroySurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z"/>
-		<method name="eglGetConfigAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Z"/>
-		<method name="eglGetConfigs(Landroid/opengl/EGLDisplay;[Landroid/opengl/EGLConfig;II[II)Z"/>
-		<method name="eglGetCurrentContext()Landroid/opengl/EGLContext;"/>
-		<method name="eglGetCurrentDisplay()Landroid/opengl/EGLDisplay;"/>
-		<method name="eglGetCurrentSurface(I)Landroid/opengl/EGLSurface;"/>
-		<method name="eglGetDisplay(I)Landroid/opengl/EGLDisplay;"/>
-		<method name="eglGetError()I"/>
-		<method name="eglInitialize(Landroid/opengl/EGLDisplay;[II[II)Z"/>
-		<method name="eglMakeCurrent(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;Landroid/opengl/EGLSurface;Landroid/opengl/EGLContext;)Z"/>
-		<method name="eglQueryAPI()I"/>
-		<method name="eglQueryContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;I[II)Z"/>
-		<method name="eglQueryString(Landroid/opengl/EGLDisplay;I)Ljava/lang/String;"/>
-		<method name="eglQuerySurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I[II)Z"/>
-		<method name="eglReleaseTexImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z"/>
-		<method name="eglReleaseThread()Z"/>
-		<method name="eglSurfaceAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;II)Z"/>
-		<method name="eglSwapBuffers(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z"/>
-		<method name="eglSwapInterval(Landroid/opengl/EGLDisplay;I)Z"/>
-		<method name="eglTerminate(Landroid/opengl/EGLDisplay;)Z"/>
-		<method name="eglWaitClient()Z"/>
-		<method name="eglWaitGL()Z"/>
-		<method name="eglWaitNative(I)Z"/>
-		<field name="EGL_ALPHA_MASK_SIZE"/>
-		<field name="EGL_ALPHA_SIZE"/>
-		<field name="EGL_BACK_BUFFER"/>
-		<field name="EGL_BAD_ACCESS"/>
-		<field name="EGL_BAD_ALLOC"/>
-		<field name="EGL_BAD_ATTRIBUTE"/>
-		<field name="EGL_BAD_CONFIG"/>
-		<field name="EGL_BAD_CONTEXT"/>
-		<field name="EGL_BAD_CURRENT_SURFACE"/>
-		<field name="EGL_BAD_DISPLAY"/>
-		<field name="EGL_BAD_MATCH"/>
-		<field name="EGL_BAD_NATIVE_PIXMAP"/>
-		<field name="EGL_BAD_NATIVE_WINDOW"/>
-		<field name="EGL_BAD_PARAMETER"/>
-		<field name="EGL_BAD_SURFACE"/>
-		<field name="EGL_BIND_TO_TEXTURE_RGB"/>
-		<field name="EGL_BIND_TO_TEXTURE_RGBA"/>
-		<field name="EGL_BLUE_SIZE"/>
-		<field name="EGL_BUFFER_DESTROYED"/>
-		<field name="EGL_BUFFER_PRESERVED"/>
-		<field name="EGL_BUFFER_SIZE"/>
-		<field name="EGL_CLIENT_APIS"/>
-		<field name="EGL_COLOR_BUFFER_TYPE"/>
-		<field name="EGL_CONFIG_CAVEAT"/>
-		<field name="EGL_CONFIG_ID"/>
-		<field name="EGL_CONFORMANT"/>
-		<field name="EGL_CONTEXT_CLIENT_TYPE"/>
-		<field name="EGL_CONTEXT_CLIENT_VERSION"/>
-		<field name="EGL_CONTEXT_LOST"/>
-		<field name="EGL_CORE_NATIVE_ENGINE"/>
-		<field name="EGL_DEFAULT_DISPLAY"/>
-		<field name="EGL_DEPTH_SIZE"/>
-		<field name="EGL_DISPLAY_SCALING"/>
-		<field name="EGL_DRAW"/>
-		<field name="EGL_EXTENSIONS"/>
-		<field name="EGL_FALSE"/>
-		<field name="EGL_GREEN_SIZE"/>
-		<field name="EGL_HEIGHT"/>
-		<field name="EGL_HORIZONTAL_RESOLUTION"/>
-		<field name="EGL_LARGEST_PBUFFER"/>
-		<field name="EGL_LEVEL"/>
-		<field name="EGL_LUMINANCE_BUFFER"/>
-		<field name="EGL_LUMINANCE_SIZE"/>
-		<field name="EGL_MATCH_NATIVE_PIXMAP"/>
-		<field name="EGL_MAX_PBUFFER_HEIGHT"/>
-		<field name="EGL_MAX_PBUFFER_PIXELS"/>
-		<field name="EGL_MAX_PBUFFER_WIDTH"/>
-		<field name="EGL_MAX_SWAP_INTERVAL"/>
-		<field name="EGL_MIN_SWAP_INTERVAL"/>
-		<field name="EGL_MIPMAP_LEVEL"/>
-		<field name="EGL_MIPMAP_TEXTURE"/>
-		<field name="EGL_MULTISAMPLE_RESOLVE"/>
-		<field name="EGL_MULTISAMPLE_RESOLVE_BOX"/>
-		<field name="EGL_MULTISAMPLE_RESOLVE_BOX_BIT"/>
-		<field name="EGL_MULTISAMPLE_RESOLVE_DEFAULT"/>
-		<field name="EGL_NATIVE_RENDERABLE"/>
-		<field name="EGL_NATIVE_VISUAL_ID"/>
-		<field name="EGL_NATIVE_VISUAL_TYPE"/>
-		<field name="EGL_NONE"/>
-		<field name="EGL_NON_CONFORMANT_CONFIG"/>
-		<field name="EGL_NOT_INITIALIZED"/>
-		<field name="EGL_NO_CONTEXT"/>
-		<field name="EGL_NO_DISPLAY"/>
-		<field name="EGL_NO_SURFACE"/>
-		<field name="EGL_NO_TEXTURE"/>
-		<field name="EGL_OPENGL_API"/>
-		<field name="EGL_OPENGL_BIT"/>
-		<field name="EGL_OPENGL_ES2_BIT"/>
-		<field name="EGL_OPENGL_ES_API"/>
-		<field name="EGL_OPENGL_ES_BIT"/>
-		<field name="EGL_OPENVG_API"/>
-		<field name="EGL_OPENVG_BIT"/>
-		<field name="EGL_OPENVG_IMAGE"/>
-		<field name="EGL_PBUFFER_BIT"/>
-		<field name="EGL_PIXEL_ASPECT_RATIO"/>
-		<field name="EGL_PIXMAP_BIT"/>
-		<field name="EGL_READ"/>
-		<field name="EGL_RED_SIZE"/>
-		<field name="EGL_RENDERABLE_TYPE"/>
-		<field name="EGL_RENDER_BUFFER"/>
-		<field name="EGL_RGB_BUFFER"/>
-		<field name="EGL_SAMPLES"/>
-		<field name="EGL_SAMPLE_BUFFERS"/>
-		<field name="EGL_SINGLE_BUFFER"/>
-		<field name="EGL_SLOW_CONFIG"/>
-		<field name="EGL_STENCIL_SIZE"/>
-		<field name="EGL_SUCCESS"/>
-		<field name="EGL_SURFACE_TYPE"/>
-		<field name="EGL_SWAP_BEHAVIOR"/>
-		<field name="EGL_SWAP_BEHAVIOR_PRESERVED_BIT"/>
-		<field name="EGL_TEXTURE_2D"/>
-		<field name="EGL_TEXTURE_FORMAT"/>
-		<field name="EGL_TEXTURE_RGB"/>
-		<field name="EGL_TEXTURE_RGBA"/>
-		<field name="EGL_TEXTURE_TARGET"/>
-		<field name="EGL_TRANSPARENT_BLUE_VALUE"/>
-		<field name="EGL_TRANSPARENT_GREEN_VALUE"/>
-		<field name="EGL_TRANSPARENT_RED_VALUE"/>
-		<field name="EGL_TRANSPARENT_RGB"/>
-		<field name="EGL_TRANSPARENT_TYPE"/>
-		<field name="EGL_TRUE"/>
-		<field name="EGL_VENDOR"/>
-		<field name="EGL_VERSION"/>
-		<field name="EGL_VERTICAL_RESOLUTION"/>
-		<field name="EGL_VG_ALPHA_FORMAT"/>
-		<field name="EGL_VG_ALPHA_FORMAT_NONPRE"/>
-		<field name="EGL_VG_ALPHA_FORMAT_PRE"/>
-		<field name="EGL_VG_ALPHA_FORMAT_PRE_BIT"/>
-		<field name="EGL_VG_COLORSPACE"/>
-		<field name="EGL_VG_COLORSPACE_LINEAR"/>
-		<field name="EGL_VG_COLORSPACE_LINEAR_BIT"/>
-		<field name="EGL_VG_COLORSPACE_sRGB"/>
-		<field name="EGL_WIDTH"/>
-		<field name="EGL_WINDOW_BIT"/>
-	</class>
-	<class name="android/opengl/EGLConfig" since="17">
-		<extends name="android/opengl/EGLObjectHandle"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-	</class>
-	<class name="android/opengl/EGLContext" since="17">
-		<extends name="android/opengl/EGLObjectHandle"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-	</class>
-	<class name="android/opengl/EGLDisplay" since="17">
-		<extends name="android/opengl/EGLObjectHandle"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-	</class>
-	<class name="android/opengl/EGLExt" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="eglPresentationTimeANDROID(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;J)Z"/>
-		<field name="EGL_CONTEXT_FLAGS_KHR"/>
-		<field name="EGL_CONTEXT_MAJOR_VERSION_KHR"/>
-		<field name="EGL_CONTEXT_MINOR_VERSION_KHR"/>
-		<field name="EGL_OPENGL_ES3_BIT_KHR"/>
-		<field name="EGL_RECORDABLE_ANDROID" since="26"/>
-	</class>
-	<class name="android/opengl/EGLObjectHandle" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V" deprecated="21"/>
-		<method name="&lt;init>(J)V" since="21"/>
-		<method name="getHandle()I" deprecated="21"/>
-		<method name="getNativeHandle()J" since="21"/>
-	</class>
-	<class name="android/opengl/EGLSurface" since="17">
-		<extends name="android/opengl/EGLObjectHandle"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-	</class>
-	<class name="android/opengl/ETC1" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="decodeBlock(Ljava/nio/Buffer;Ljava/nio/Buffer;)V"/>
-		<method name="decodeImage(Ljava/nio/Buffer;Ljava/nio/Buffer;IIII)V"/>
-		<method name="encodeBlock(Ljava/nio/Buffer;ILjava/nio/Buffer;)V"/>
-		<method name="encodeImage(Ljava/nio/Buffer;IIIILjava/nio/Buffer;)V"/>
-		<method name="formatHeader(Ljava/nio/Buffer;II)V"/>
-		<method name="getEncodedDataSize(II)I"/>
-		<method name="getHeight(Ljava/nio/Buffer;)I"/>
-		<method name="getWidth(Ljava/nio/Buffer;)I"/>
-		<method name="isValid(Ljava/nio/Buffer;)Z"/>
-		<field name="DECODED_BLOCK_SIZE"/>
-		<field name="ENCODED_BLOCK_SIZE"/>
-		<field name="ETC1_RGB8_OES"/>
-		<field name="ETC_PKM_HEADER_SIZE"/>
-	</class>
-	<class name="android/opengl/ETC1Util" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="compressTexture(Ljava/nio/Buffer;IIII)Landroid/opengl/ETC1Util$ETC1Texture;"/>
-		<method name="createTexture(Ljava/io/InputStream;)Landroid/opengl/ETC1Util$ETC1Texture;"/>
-		<method name="isETC1Supported()Z"/>
-		<method name="loadTexture(IIIIILandroid/opengl/ETC1Util$ETC1Texture;)V"/>
-		<method name="loadTexture(IIIIILjava/io/InputStream;)V"/>
-		<method name="writeTexture(Landroid/opengl/ETC1Util$ETC1Texture;Ljava/io/OutputStream;)V"/>
-	</class>
-	<class name="android/opengl/ETC1Util$ETC1Texture" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IILjava/nio/ByteBuffer;)V"/>
-		<method name="getData()Ljava/nio/ByteBuffer;"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-	</class>
-	<class name="android/opengl/GLDebugHelper" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="wrap(Ljavax/microedition/khronos/egl/EGL;ILjava/io/Writer;)Ljavax/microedition/khronos/egl/EGL;"/>
-		<method name="wrap(Ljavax/microedition/khronos/opengles/GL;ILjava/io/Writer;)Ljavax/microedition/khronos/opengles/GL;"/>
-		<field name="CONFIG_CHECK_GL_ERROR"/>
-		<field name="CONFIG_CHECK_THREAD"/>
-		<field name="CONFIG_LOG_ARGUMENT_NAMES"/>
-		<field name="ERROR_WRONG_THREAD"/>
-	</class>
-	<class name="android/opengl/GLES10" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="glActiveTexture(I)V"/>
-		<method name="glAlphaFunc(IF)V"/>
-		<method name="glAlphaFuncx(II)V"/>
-		<method name="glBindTexture(II)V"/>
-		<method name="glBlendFunc(II)V"/>
-		<method name="glClear(I)V"/>
-		<method name="glClearColor(FFFF)V"/>
-		<method name="glClearColorx(IIII)V"/>
-		<method name="glClearDepthf(F)V"/>
-		<method name="glClearDepthx(I)V"/>
-		<method name="glClearStencil(I)V"/>
-		<method name="glClientActiveTexture(I)V"/>
-		<method name="glColor4f(FFFF)V"/>
-		<method name="glColor4x(IIII)V"/>
-		<method name="glColorMask(ZZZZ)V"/>
-		<method name="glColorPointer(IIILjava/nio/Buffer;)V"/>
-		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCopyTexImage2D(IIIIIIII)V"/>
-		<method name="glCopyTexSubImage2D(IIIIIIII)V"/>
-		<method name="glCullFace(I)V"/>
-		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteTextures(I[II)V"/>
-		<method name="glDepthFunc(I)V"/>
-		<method name="glDepthMask(Z)V"/>
-		<method name="glDepthRangef(FF)V"/>
-		<method name="glDepthRangex(II)V"/>
-		<method name="glDisable(I)V"/>
-		<method name="glDisableClientState(I)V"/>
-		<method name="glDrawArrays(III)V"/>
-		<method name="glDrawElements(IIILjava/nio/Buffer;)V"/>
-		<method name="glEnable(I)V"/>
-		<method name="glEnableClientState(I)V"/>
-		<method name="glFinish()V"/>
-		<method name="glFlush()V"/>
-		<method name="glFogf(IF)V"/>
-		<method name="glFogfv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glFogfv(I[FI)V"/>
-		<method name="glFogx(II)V"/>
-		<method name="glFogxv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glFogxv(I[II)V"/>
-		<method name="glFrontFace(I)V"/>
-		<method name="glFrustumf(FFFFFF)V"/>
-		<method name="glFrustumx(IIIIII)V"/>
-		<method name="glGenTextures(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenTextures(I[II)V"/>
-		<method name="glGetError()I"/>
-		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetIntegerv(I[II)V"/>
-		<method name="glGetString(I)Ljava/lang/String;"/>
-		<method name="glHint(II)V"/>
-		<method name="glLightModelf(IF)V"/>
-		<method name="glLightModelfv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glLightModelfv(I[FI)V"/>
-		<method name="glLightModelx(II)V"/>
-		<method name="glLightModelxv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glLightModelxv(I[II)V"/>
-		<method name="glLightf(IIF)V"/>
-		<method name="glLightfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glLightfv(II[FI)V"/>
-		<method name="glLightx(III)V"/>
-		<method name="glLightxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glLightxv(II[II)V"/>
-		<method name="glLineWidth(F)V"/>
-		<method name="glLineWidthx(I)V"/>
-		<method name="glLoadIdentity()V"/>
-		<method name="glLoadMatrixf(Ljava/nio/FloatBuffer;)V"/>
-		<method name="glLoadMatrixf([FI)V"/>
-		<method name="glLoadMatrixx(Ljava/nio/IntBuffer;)V"/>
-		<method name="glLoadMatrixx([II)V"/>
-		<method name="glLogicOp(I)V"/>
-		<method name="glMaterialf(IIF)V"/>
-		<method name="glMaterialfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glMaterialfv(II[FI)V"/>
-		<method name="glMaterialx(III)V"/>
-		<method name="glMaterialxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glMaterialxv(II[II)V"/>
-		<method name="glMatrixMode(I)V"/>
-		<method name="glMultMatrixf(Ljava/nio/FloatBuffer;)V"/>
-		<method name="glMultMatrixf([FI)V"/>
-		<method name="glMultMatrixx(Ljava/nio/IntBuffer;)V"/>
-		<method name="glMultMatrixx([II)V"/>
-		<method name="glMultiTexCoord4f(IFFFF)V"/>
-		<method name="glMultiTexCoord4x(IIIII)V"/>
-		<method name="glNormal3f(FFF)V"/>
-		<method name="glNormal3x(III)V"/>
-		<method name="glNormalPointer(IILjava/nio/Buffer;)V"/>
-		<method name="glOrthof(FFFFFF)V"/>
-		<method name="glOrthox(IIIIII)V"/>
-		<method name="glPixelStorei(II)V"/>
-		<method name="glPointSize(F)V"/>
-		<method name="glPointSizex(I)V"/>
-		<method name="glPolygonOffset(FF)V"/>
-		<method name="glPolygonOffsetx(II)V"/>
-		<method name="glPopMatrix()V"/>
-		<method name="glPushMatrix()V"/>
-		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V"/>
-		<method name="glRotatef(FFFF)V"/>
-		<method name="glRotatex(IIII)V"/>
-		<method name="glSampleCoverage(FZ)V"/>
-		<method name="glSampleCoveragex(IZ)V"/>
-		<method name="glScalef(FFF)V"/>
-		<method name="glScalex(III)V"/>
-		<method name="glScissor(IIII)V"/>
-		<method name="glShadeModel(I)V"/>
-		<method name="glStencilFunc(III)V"/>
-		<method name="glStencilMask(I)V"/>
-		<method name="glStencilOp(III)V"/>
-		<method name="glTexCoordPointer(IIILjava/nio/Buffer;)V"/>
-		<method name="glTexEnvf(IIF)V"/>
-		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexEnvfv(II[FI)V"/>
-		<method name="glTexEnvx(III)V"/>
-		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexEnvxv(II[II)V"/>
-		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glTexParameterf(IIF)V"/>
-		<method name="glTexParameterx(III)V"/>
-		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glTranslatef(FFF)V"/>
-		<method name="glTranslatex(III)V"/>
-		<method name="glVertexPointer(IIILjava/nio/Buffer;)V"/>
-		<method name="glViewport(IIII)V"/>
-		<field name="GL_ADD"/>
-		<field name="GL_ALIASED_LINE_WIDTH_RANGE"/>
-		<field name="GL_ALIASED_POINT_SIZE_RANGE"/>
-		<field name="GL_ALPHA"/>
-		<field name="GL_ALPHA_BITS"/>
-		<field name="GL_ALPHA_TEST"/>
-		<field name="GL_ALWAYS"/>
-		<field name="GL_AMBIENT"/>
-		<field name="GL_AMBIENT_AND_DIFFUSE"/>
-		<field name="GL_AND"/>
-		<field name="GL_AND_INVERTED"/>
-		<field name="GL_AND_REVERSE"/>
-		<field name="GL_BACK"/>
-		<field name="GL_BLEND"/>
-		<field name="GL_BLUE_BITS"/>
-		<field name="GL_BYTE"/>
-		<field name="GL_CCW"/>
-		<field name="GL_CLAMP_TO_EDGE"/>
-		<field name="GL_CLEAR"/>
-		<field name="GL_COLOR_ARRAY"/>
-		<field name="GL_COLOR_BUFFER_BIT"/>
-		<field name="GL_COLOR_LOGIC_OP"/>
-		<field name="GL_COLOR_MATERIAL"/>
-		<field name="GL_COMPRESSED_TEXTURE_FORMATS"/>
-		<field name="GL_CONSTANT_ATTENUATION"/>
-		<field name="GL_COPY"/>
-		<field name="GL_COPY_INVERTED"/>
-		<field name="GL_CULL_FACE"/>
-		<field name="GL_CW"/>
-		<field name="GL_DECAL"/>
-		<field name="GL_DECR"/>
-		<field name="GL_DEPTH_BITS"/>
-		<field name="GL_DEPTH_BUFFER_BIT"/>
-		<field name="GL_DEPTH_TEST"/>
-		<field name="GL_DIFFUSE"/>
-		<field name="GL_DITHER"/>
-		<field name="GL_DONT_CARE"/>
-		<field name="GL_DST_ALPHA"/>
-		<field name="GL_DST_COLOR"/>
-		<field name="GL_EMISSION"/>
-		<field name="GL_EQUAL"/>
-		<field name="GL_EQUIV"/>
-		<field name="GL_EXP"/>
-		<field name="GL_EXP2"/>
-		<field name="GL_EXTENSIONS"/>
-		<field name="GL_FALSE"/>
-		<field name="GL_FASTEST"/>
-		<field name="GL_FIXED"/>
-		<field name="GL_FLAT"/>
-		<field name="GL_FLOAT"/>
-		<field name="GL_FOG"/>
-		<field name="GL_FOG_COLOR"/>
-		<field name="GL_FOG_DENSITY"/>
-		<field name="GL_FOG_END"/>
-		<field name="GL_FOG_HINT"/>
-		<field name="GL_FOG_MODE"/>
-		<field name="GL_FOG_START"/>
-		<field name="GL_FRONT"/>
-		<field name="GL_FRONT_AND_BACK"/>
-		<field name="GL_GEQUAL"/>
-		<field name="GL_GREATER"/>
-		<field name="GL_GREEN_BITS"/>
-		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES"/>
-		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE_OES"/>
-		<field name="GL_INCR"/>
-		<field name="GL_INVALID_ENUM"/>
-		<field name="GL_INVALID_OPERATION"/>
-		<field name="GL_INVALID_VALUE"/>
-		<field name="GL_INVERT"/>
-		<field name="GL_KEEP"/>
-		<field name="GL_LEQUAL"/>
-		<field name="GL_LESS"/>
-		<field name="GL_LIGHT0"/>
-		<field name="GL_LIGHT1"/>
-		<field name="GL_LIGHT2"/>
-		<field name="GL_LIGHT3"/>
-		<field name="GL_LIGHT4"/>
-		<field name="GL_LIGHT5"/>
-		<field name="GL_LIGHT6"/>
-		<field name="GL_LIGHT7"/>
-		<field name="GL_LIGHTING"/>
-		<field name="GL_LIGHT_MODEL_AMBIENT"/>
-		<field name="GL_LIGHT_MODEL_TWO_SIDE"/>
-		<field name="GL_LINEAR"/>
-		<field name="GL_LINEAR_ATTENUATION"/>
-		<field name="GL_LINEAR_MIPMAP_LINEAR"/>
-		<field name="GL_LINEAR_MIPMAP_NEAREST"/>
-		<field name="GL_LINES"/>
-		<field name="GL_LINE_LOOP"/>
-		<field name="GL_LINE_SMOOTH"/>
-		<field name="GL_LINE_SMOOTH_HINT"/>
-		<field name="GL_LINE_STRIP"/>
-		<field name="GL_LUMINANCE"/>
-		<field name="GL_LUMINANCE_ALPHA"/>
-		<field name="GL_MAX_ELEMENTS_INDICES"/>
-		<field name="GL_MAX_ELEMENTS_VERTICES"/>
-		<field name="GL_MAX_LIGHTS"/>
-		<field name="GL_MAX_MODELVIEW_STACK_DEPTH"/>
-		<field name="GL_MAX_PROJECTION_STACK_DEPTH"/>
-		<field name="GL_MAX_TEXTURE_SIZE"/>
-		<field name="GL_MAX_TEXTURE_STACK_DEPTH"/>
-		<field name="GL_MAX_TEXTURE_UNITS"/>
-		<field name="GL_MAX_VIEWPORT_DIMS"/>
-		<field name="GL_MODELVIEW"/>
-		<field name="GL_MODULATE"/>
-		<field name="GL_MULTISAMPLE"/>
-		<field name="GL_NAND"/>
-		<field name="GL_NEAREST"/>
-		<field name="GL_NEAREST_MIPMAP_LINEAR"/>
-		<field name="GL_NEAREST_MIPMAP_NEAREST"/>
-		<field name="GL_NEVER"/>
-		<field name="GL_NICEST"/>
-		<field name="GL_NOOP"/>
-		<field name="GL_NOR"/>
-		<field name="GL_NORMALIZE"/>
-		<field name="GL_NORMAL_ARRAY"/>
-		<field name="GL_NOTEQUAL"/>
-		<field name="GL_NO_ERROR"/>
-		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"/>
-		<field name="GL_ONE"/>
-		<field name="GL_ONE_MINUS_DST_ALPHA"/>
-		<field name="GL_ONE_MINUS_DST_COLOR"/>
-		<field name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<field name="GL_ONE_MINUS_SRC_COLOR"/>
-		<field name="GL_OR"/>
-		<field name="GL_OR_INVERTED"/>
-		<field name="GL_OR_REVERSE"/>
-		<field name="GL_OUT_OF_MEMORY"/>
-		<field name="GL_PACK_ALIGNMENT"/>
-		<field name="GL_PALETTE4_R5_G6_B5_OES"/>
-		<field name="GL_PALETTE4_RGB5_A1_OES"/>
-		<field name="GL_PALETTE4_RGB8_OES"/>
-		<field name="GL_PALETTE4_RGBA4_OES"/>
-		<field name="GL_PALETTE4_RGBA8_OES"/>
-		<field name="GL_PALETTE8_R5_G6_B5_OES"/>
-		<field name="GL_PALETTE8_RGB5_A1_OES"/>
-		<field name="GL_PALETTE8_RGB8_OES"/>
-		<field name="GL_PALETTE8_RGBA4_OES"/>
-		<field name="GL_PALETTE8_RGBA8_OES"/>
-		<field name="GL_PERSPECTIVE_CORRECTION_HINT"/>
-		<field name="GL_POINTS"/>
-		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
-		<field name="GL_POINT_SIZE"/>
-		<field name="GL_POINT_SMOOTH"/>
-		<field name="GL_POINT_SMOOTH_HINT"/>
-		<field name="GL_POLYGON_OFFSET_FILL"/>
-		<field name="GL_POLYGON_SMOOTH_HINT"/>
-		<field name="GL_POSITION"/>
-		<field name="GL_PROJECTION"/>
-		<field name="GL_QUADRATIC_ATTENUATION"/>
-		<field name="GL_RED_BITS"/>
-		<field name="GL_RENDERER"/>
-		<field name="GL_REPEAT"/>
-		<field name="GL_REPLACE"/>
-		<field name="GL_RESCALE_NORMAL"/>
-		<field name="GL_RGB"/>
-		<field name="GL_RGBA"/>
-		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"/>
-		<field name="GL_SAMPLE_ALPHA_TO_ONE"/>
-		<field name="GL_SAMPLE_COVERAGE"/>
-		<field name="GL_SCISSOR_TEST"/>
-		<field name="GL_SET"/>
-		<field name="GL_SHININESS"/>
-		<field name="GL_SHORT"/>
-		<field name="GL_SMOOTH"/>
-		<field name="GL_SMOOTH_LINE_WIDTH_RANGE"/>
-		<field name="GL_SMOOTH_POINT_SIZE_RANGE"/>
-		<field name="GL_SPECULAR"/>
-		<field name="GL_SPOT_CUTOFF"/>
-		<field name="GL_SPOT_DIRECTION"/>
-		<field name="GL_SPOT_EXPONENT"/>
-		<field name="GL_SRC_ALPHA"/>
-		<field name="GL_SRC_ALPHA_SATURATE"/>
-		<field name="GL_SRC_COLOR"/>
-		<field name="GL_STACK_OVERFLOW"/>
-		<field name="GL_STACK_UNDERFLOW"/>
-		<field name="GL_STENCIL_BITS"/>
-		<field name="GL_STENCIL_BUFFER_BIT"/>
-		<field name="GL_STENCIL_TEST"/>
-		<field name="GL_SUBPIXEL_BITS"/>
-		<field name="GL_TEXTURE"/>
-		<field name="GL_TEXTURE0"/>
-		<field name="GL_TEXTURE1"/>
-		<field name="GL_TEXTURE10"/>
-		<field name="GL_TEXTURE11"/>
-		<field name="GL_TEXTURE12"/>
-		<field name="GL_TEXTURE13"/>
-		<field name="GL_TEXTURE14"/>
-		<field name="GL_TEXTURE15"/>
-		<field name="GL_TEXTURE16"/>
-		<field name="GL_TEXTURE17"/>
-		<field name="GL_TEXTURE18"/>
-		<field name="GL_TEXTURE19"/>
-		<field name="GL_TEXTURE2"/>
-		<field name="GL_TEXTURE20"/>
-		<field name="GL_TEXTURE21"/>
-		<field name="GL_TEXTURE22"/>
-		<field name="GL_TEXTURE23"/>
-		<field name="GL_TEXTURE24"/>
-		<field name="GL_TEXTURE25"/>
-		<field name="GL_TEXTURE26"/>
-		<field name="GL_TEXTURE27"/>
-		<field name="GL_TEXTURE28"/>
-		<field name="GL_TEXTURE29"/>
-		<field name="GL_TEXTURE3"/>
-		<field name="GL_TEXTURE30"/>
-		<field name="GL_TEXTURE31"/>
-		<field name="GL_TEXTURE4"/>
-		<field name="GL_TEXTURE5"/>
-		<field name="GL_TEXTURE6"/>
-		<field name="GL_TEXTURE7"/>
-		<field name="GL_TEXTURE8"/>
-		<field name="GL_TEXTURE9"/>
-		<field name="GL_TEXTURE_2D"/>
-		<field name="GL_TEXTURE_COORD_ARRAY"/>
-		<field name="GL_TEXTURE_ENV"/>
-		<field name="GL_TEXTURE_ENV_COLOR"/>
-		<field name="GL_TEXTURE_ENV_MODE"/>
-		<field name="GL_TEXTURE_MAG_FILTER"/>
-		<field name="GL_TEXTURE_MIN_FILTER"/>
-		<field name="GL_TEXTURE_WRAP_S"/>
-		<field name="GL_TEXTURE_WRAP_T"/>
-		<field name="GL_TRIANGLES"/>
-		<field name="GL_TRIANGLE_FAN"/>
-		<field name="GL_TRIANGLE_STRIP"/>
-		<field name="GL_TRUE"/>
-		<field name="GL_UNPACK_ALIGNMENT"/>
-		<field name="GL_UNSIGNED_BYTE"/>
-		<field name="GL_UNSIGNED_SHORT"/>
-		<field name="GL_UNSIGNED_SHORT_4_4_4_4"/>
-		<field name="GL_UNSIGNED_SHORT_5_5_5_1"/>
-		<field name="GL_UNSIGNED_SHORT_5_6_5"/>
-		<field name="GL_VENDOR"/>
-		<field name="GL_VERSION"/>
-		<field name="GL_VERTEX_ARRAY"/>
-		<field name="GL_XOR"/>
-		<field name="GL_ZERO"/>
-	</class>
-	<class name="android/opengl/GLES10Ext" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="glQueryMatrixxOES(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I"/>
-		<method name="glQueryMatrixxOES([II[II)I"/>
-	</class>
-	<class name="android/opengl/GLES11" since="4">
-		<extends name="android/opengl/GLES10"/>
-		<method name="&lt;init>()V"/>
-		<method name="glBindBuffer(II)V"/>
-		<method name="glBufferData(IILjava/nio/Buffer;I)V"/>
-		<method name="glBufferSubData(IIILjava/nio/Buffer;)V"/>
-		<method name="glClipPlanef(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glClipPlanef(I[FI)V"/>
-		<method name="glClipPlanex(ILjava/nio/IntBuffer;)V"/>
-		<method name="glClipPlanex(I[II)V"/>
-		<method name="glColor4ub(BBBB)V"/>
-		<method name="glColorPointer(IIII)V"/>
-		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteBuffers(I[II)V"/>
-		<method name="glDrawElements(IIII)V"/>
-		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenBuffers(I[II)V"/>
-		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetBooleanv(I[ZI)V"/>
-		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetBufferParameteriv(II[II)V"/>
-		<method name="glGetClipPlanef(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetClipPlanef(I[FI)V"/>
-		<method name="glGetClipPlanex(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetClipPlanex(I[II)V"/>
-		<method name="glGetFixedv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetFixedv(I[II)V"/>
-		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetFloatv(I[FI)V"/>
-		<method name="glGetLightfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetLightfv(II[FI)V"/>
-		<method name="glGetLightxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetLightxv(II[II)V"/>
-		<method name="glGetMaterialfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetMaterialfv(II[FI)V"/>
-		<method name="glGetMaterialxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetMaterialxv(II[II)V"/>
-		<method name="glGetTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetTexEnvfv(II[FI)V"/>
-		<method name="glGetTexEnviv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexEnviv(II[II)V"/>
-		<method name="glGetTexEnvxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexEnvxv(II[II)V"/>
-		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetTexParameterfv(II[FI)V"/>
-		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameteriv(II[II)V"/>
-		<method name="glGetTexParameterxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameterxv(II[II)V"/>
-		<method name="glIsBuffer(I)Z"/>
-		<method name="glIsEnabled(I)Z"/>
-		<method name="glIsTexture(I)Z"/>
-		<method name="glNormalPointer(III)V"/>
-		<method name="glPointParameterf(IF)V"/>
-		<method name="glPointParameterfv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glPointParameterfv(I[FI)V"/>
-		<method name="glPointParameterx(II)V"/>
-		<method name="glPointParameterxv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glPointParameterxv(I[II)V"/>
-		<method name="glPointSizePointerOES(IILjava/nio/Buffer;)V"/>
-		<method name="glTexCoordPointer(IIII)V"/>
-		<method name="glTexEnvi(III)V"/>
-		<method name="glTexEnviv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexEnviv(II[II)V"/>
-		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexParameterfv(II[FI)V"/>
-		<method name="glTexParameteri(III)V"/>
-		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameteriv(II[II)V"/>
-		<method name="glTexParameterxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameterxv(II[II)V"/>
-		<method name="glVertexPointer(IIII)V"/>
-		<field name="GL_ACTIVE_TEXTURE"/>
-		<field name="GL_ADD_SIGNED"/>
-		<field name="GL_ALPHA_SCALE"/>
-		<field name="GL_ALPHA_TEST_FUNC"/>
-		<field name="GL_ALPHA_TEST_REF"/>
-		<field name="GL_ARRAY_BUFFER"/>
-		<field name="GL_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_BLEND_DST"/>
-		<field name="GL_BLEND_SRC"/>
-		<field name="GL_BUFFER_ACCESS"/>
-		<field name="GL_BUFFER_SIZE"/>
-		<field name="GL_BUFFER_USAGE"/>
-		<field name="GL_CLIENT_ACTIVE_TEXTURE"/>
-		<field name="GL_CLIP_PLANE0"/>
-		<field name="GL_CLIP_PLANE1"/>
-		<field name="GL_CLIP_PLANE2"/>
-		<field name="GL_CLIP_PLANE3"/>
-		<field name="GL_CLIP_PLANE4"/>
-		<field name="GL_CLIP_PLANE5"/>
-		<field name="GL_COLOR_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_COLOR_ARRAY_POINTER"/>
-		<field name="GL_COLOR_ARRAY_SIZE"/>
-		<field name="GL_COLOR_ARRAY_STRIDE"/>
-		<field name="GL_COLOR_ARRAY_TYPE"/>
-		<field name="GL_COLOR_CLEAR_VALUE"/>
-		<field name="GL_COLOR_WRITEMASK"/>
-		<field name="GL_COMBINE"/>
-		<field name="GL_COMBINE_ALPHA"/>
-		<field name="GL_COMBINE_RGB"/>
-		<field name="GL_CONSTANT"/>
-		<field name="GL_COORD_REPLACE_OES"/>
-		<field name="GL_CULL_FACE_MODE"/>
-		<field name="GL_CURRENT_COLOR"/>
-		<field name="GL_CURRENT_NORMAL"/>
-		<field name="GL_CURRENT_TEXTURE_COORDS"/>
-		<field name="GL_DEPTH_CLEAR_VALUE"/>
-		<field name="GL_DEPTH_FUNC"/>
-		<field name="GL_DEPTH_RANGE"/>
-		<field name="GL_DEPTH_WRITEMASK"/>
-		<field name="GL_DOT3_RGB"/>
-		<field name="GL_DOT3_RGBA"/>
-		<field name="GL_DYNAMIC_DRAW"/>
-		<field name="GL_ELEMENT_ARRAY_BUFFER"/>
-		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_FRONT_FACE"/>
-		<field name="GL_GENERATE_MIPMAP"/>
-		<field name="GL_GENERATE_MIPMAP_HINT"/>
-		<field name="GL_INTERPOLATE"/>
-		<field name="GL_LINE_WIDTH"/>
-		<field name="GL_LOGIC_OP_MODE"/>
-		<field name="GL_MATRIX_MODE"/>
-		<field name="GL_MAX_CLIP_PLANES"/>
-		<field name="GL_MODELVIEW_MATRIX"/>
-		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_MODELVIEW_STACK_DEPTH"/>
-		<field name="GL_NORMAL_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_NORMAL_ARRAY_POINTER"/>
-		<field name="GL_NORMAL_ARRAY_STRIDE"/>
-		<field name="GL_NORMAL_ARRAY_TYPE"/>
-		<field name="GL_OPERAND0_ALPHA"/>
-		<field name="GL_OPERAND0_RGB"/>
-		<field name="GL_OPERAND1_ALPHA"/>
-		<field name="GL_OPERAND1_RGB"/>
-		<field name="GL_OPERAND2_ALPHA"/>
-		<field name="GL_OPERAND2_RGB"/>
-		<field name="GL_POINT_DISTANCE_ATTENUATION"/>
-		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
-		<field name="GL_POINT_SIZE"/>
-		<field name="GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_POINTER_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_STRIDE_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_TYPE_OES"/>
-		<field name="GL_POINT_SIZE_MAX"/>
-		<field name="GL_POINT_SIZE_MIN"/>
-		<field name="GL_POINT_SPRITE_OES"/>
-		<field name="GL_POLYGON_OFFSET_FACTOR"/>
-		<field name="GL_POLYGON_OFFSET_UNITS"/>
-		<field name="GL_PREVIOUS"/>
-		<field name="GL_PRIMARY_COLOR"/>
-		<field name="GL_PROJECTION_MATRIX"/>
-		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_PROJECTION_STACK_DEPTH"/>
-		<field name="GL_RGB_SCALE"/>
-		<field name="GL_SAMPLES"/>
-		<field name="GL_SAMPLE_BUFFERS"/>
-		<field name="GL_SAMPLE_COVERAGE_INVERT"/>
-		<field name="GL_SAMPLE_COVERAGE_VALUE"/>
-		<field name="GL_SCISSOR_BOX"/>
-		<field name="GL_SHADE_MODEL"/>
-		<field name="GL_SRC0_ALPHA"/>
-		<field name="GL_SRC0_RGB"/>
-		<field name="GL_SRC1_ALPHA"/>
-		<field name="GL_SRC1_RGB"/>
-		<field name="GL_SRC2_ALPHA"/>
-		<field name="GL_SRC2_RGB"/>
-		<field name="GL_STATIC_DRAW"/>
-		<field name="GL_STENCIL_CLEAR_VALUE"/>
-		<field name="GL_STENCIL_FAIL"/>
-		<field name="GL_STENCIL_FUNC"/>
-		<field name="GL_STENCIL_PASS_DEPTH_FAIL"/>
-		<field name="GL_STENCIL_PASS_DEPTH_PASS"/>
-		<field name="GL_STENCIL_REF"/>
-		<field name="GL_STENCIL_VALUE_MASK"/>
-		<field name="GL_STENCIL_WRITEMASK"/>
-		<field name="GL_SUBTRACT"/>
-		<field name="GL_TEXTURE_BINDING_2D"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_POINTER"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_SIZE"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_STRIDE"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_TYPE"/>
-		<field name="GL_TEXTURE_MATRIX"/>
-		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_TEXTURE_STACK_DEPTH"/>
-		<field name="GL_VERTEX_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_VERTEX_ARRAY_POINTER"/>
-		<field name="GL_VERTEX_ARRAY_SIZE"/>
-		<field name="GL_VERTEX_ARRAY_STRIDE"/>
-		<field name="GL_VERTEX_ARRAY_TYPE"/>
-		<field name="GL_VIEWPORT"/>
-		<field name="GL_WRITE_ONLY"/>
-	</class>
-	<class name="android/opengl/GLES11Ext" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="glAlphaFuncxOES(II)V"/>
-		<method name="glBindFramebufferOES(II)V"/>
-		<method name="glBindRenderbufferOES(II)V"/>
-		<method name="glBlendEquationOES(I)V"/>
-		<method name="glBlendEquationSeparateOES(II)V"/>
-		<method name="glBlendFuncSeparateOES(IIII)V"/>
-		<method name="glCheckFramebufferStatusOES(I)I"/>
-		<method name="glClearColorxOES(IIII)V"/>
-		<method name="glClearDepthfOES(F)V"/>
-		<method name="glClearDepthxOES(I)V"/>
-		<method name="glClipPlanefOES(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glClipPlanefOES(I[FI)V"/>
-		<method name="glClipPlanexOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glClipPlanexOES(I[II)V"/>
-		<method name="glColor4xOES(IIII)V"/>
-		<method name="glCurrentPaletteMatrixOES(I)V"/>
-		<method name="glDeleteFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteFramebuffersOES(I[II)V"/>
-		<method name="glDeleteRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteRenderbuffersOES(I[II)V"/>
-		<method name="glDepthRangefOES(FF)V"/>
-		<method name="glDepthRangexOES(II)V"/>
-		<method name="glDrawTexfOES(FFFFF)V"/>
-		<method name="glDrawTexfvOES(Ljava/nio/FloatBuffer;)V"/>
-		<method name="glDrawTexfvOES([FI)V"/>
-		<method name="glDrawTexiOES(IIIII)V"/>
-		<method name="glDrawTexivOES(Ljava/nio/IntBuffer;)V"/>
-		<method name="glDrawTexivOES([II)V"/>
-		<method name="glDrawTexsOES(SSSSS)V"/>
-		<method name="glDrawTexsvOES(Ljava/nio/ShortBuffer;)V"/>
-		<method name="glDrawTexsvOES([SI)V"/>
-		<method name="glDrawTexxOES(IIIII)V"/>
-		<method name="glDrawTexxvOES(Ljava/nio/IntBuffer;)V"/>
-		<method name="glDrawTexxvOES([II)V"/>
-		<method name="glEGLImageTargetRenderbufferStorageOES(ILjava/nio/Buffer;)V"/>
-		<method name="glEGLImageTargetTexture2DOES(ILjava/nio/Buffer;)V"/>
-		<method name="glFogxOES(II)V"/>
-		<method name="glFogxvOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glFogxvOES(I[II)V"/>
-		<method name="glFramebufferRenderbufferOES(IIII)V"/>
-		<method name="glFramebufferTexture2DOES(IIIII)V"/>
-		<method name="glFrustumfOES(FFFFFF)V"/>
-		<method name="glFrustumxOES(IIIIII)V"/>
-		<method name="glGenFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenFramebuffersOES(I[II)V"/>
-		<method name="glGenRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenRenderbuffersOES(I[II)V"/>
-		<method name="glGenerateMipmapOES(I)V"/>
-		<method name="glGetClipPlanefOES(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetClipPlanefOES(I[FI)V"/>
-		<method name="glGetClipPlanexOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetClipPlanexOES(I[II)V"/>
-		<method name="glGetFixedvOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetFixedvOES(I[II)V"/>
-		<method name="glGetFramebufferAttachmentParameterivOES(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetFramebufferAttachmentParameterivOES(III[II)V"/>
-		<method name="glGetLightxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetLightxvOES(II[II)V"/>
-		<method name="glGetMaterialxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetMaterialxvOES(II[II)V"/>
-		<method name="glGetRenderbufferParameterivOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetRenderbufferParameterivOES(II[II)V"/>
-		<method name="glGetTexEnvxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexEnvxvOES(II[II)V"/>
-		<method name="glGetTexGenfvOES(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetTexGenfvOES(II[FI)V"/>
-		<method name="glGetTexGenivOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexGenivOES(II[II)V"/>
-		<method name="glGetTexGenxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexGenxvOES(II[II)V"/>
-		<method name="glGetTexParameterxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameterxvOES(II[II)V"/>
-		<method name="glIsFramebufferOES(I)Z"/>
-		<method name="glIsRenderbufferOES(I)Z"/>
-		<method name="glLightModelxOES(II)V"/>
-		<method name="glLightModelxvOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glLightModelxvOES(I[II)V"/>
-		<method name="glLightxOES(III)V"/>
-		<method name="glLightxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glLightxvOES(II[II)V"/>
-		<method name="glLineWidthxOES(I)V"/>
-		<method name="glLoadMatrixxOES(Ljava/nio/IntBuffer;)V"/>
-		<method name="glLoadMatrixxOES([II)V"/>
-		<method name="glLoadPaletteFromModelViewMatrixOES()V"/>
-		<method name="glMaterialxOES(III)V"/>
-		<method name="glMaterialxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glMaterialxvOES(II[II)V"/>
-		<method name="glMatrixIndexPointerOES(IIILjava/nio/Buffer;)V"/>
-		<method name="glMultMatrixxOES(Ljava/nio/IntBuffer;)V"/>
-		<method name="glMultMatrixxOES([II)V"/>
-		<method name="glMultiTexCoord4xOES(IIIII)V"/>
-		<method name="glNormal3xOES(III)V"/>
-		<method name="glOrthofOES(FFFFFF)V"/>
-		<method name="glOrthoxOES(IIIIII)V"/>
-		<method name="glPointParameterxOES(II)V"/>
-		<method name="glPointParameterxvOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glPointParameterxvOES(I[II)V"/>
-		<method name="glPointSizexOES(I)V"/>
-		<method name="glPolygonOffsetxOES(II)V"/>
-		<method name="glRenderbufferStorageOES(IIII)V"/>
-		<method name="glRotatexOES(IIII)V"/>
-		<method name="glSampleCoveragexOES(IZ)V"/>
-		<method name="glScalexOES(III)V"/>
-		<method name="glTexEnvxOES(III)V"/>
-		<method name="glTexEnvxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexEnvxvOES(II[II)V"/>
-		<method name="glTexGenfOES(IIF)V"/>
-		<method name="glTexGenfvOES(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexGenfvOES(II[FI)V"/>
-		<method name="glTexGeniOES(III)V"/>
-		<method name="glTexGenivOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexGenivOES(II[II)V"/>
-		<method name="glTexGenxOES(III)V"/>
-		<method name="glTexGenxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexGenxvOES(II[II)V"/>
-		<method name="glTexParameterxOES(III)V"/>
-		<method name="glTexParameterxvOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameterxvOES(II[II)V"/>
-		<method name="glTranslatexOES(III)V"/>
-		<method name="glWeightPointerOES(IIILjava/nio/Buffer;)V"/>
-		<field name="GL_3DC_XY_AMD"/>
-		<field name="GL_3DC_X_AMD"/>
-		<field name="GL_ATC_RGBA_EXPLICIT_ALPHA_AMD"/>
-		<field name="GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD"/>
-		<field name="GL_ATC_RGB_AMD"/>
-		<field name="GL_BGRA"/>
-		<field name="GL_BLEND_DST_ALPHA_OES"/>
-		<field name="GL_BLEND_DST_RGB_OES"/>
-		<field name="GL_BLEND_EQUATION_ALPHA_OES"/>
-		<field name="GL_BLEND_EQUATION_OES"/>
-		<field name="GL_BLEND_EQUATION_RGB_OES"/>
-		<field name="GL_BLEND_SRC_ALPHA_OES"/>
-		<field name="GL_BLEND_SRC_RGB_OES"/>
-		<field name="GL_BUFFER_ACCESS_OES"/>
-		<field name="GL_BUFFER_MAPPED_OES"/>
-		<field name="GL_BUFFER_MAP_POINTER_OES"/>
-		<field name="GL_COLOR_ATTACHMENT0_OES"/>
-		<field name="GL_CURRENT_PALETTE_MATRIX_OES"/>
-		<field name="GL_DECR_WRAP_OES"/>
-		<field name="GL_DEPTH24_STENCIL8_OES"/>
-		<field name="GL_DEPTH_ATTACHMENT_OES"/>
-		<field name="GL_DEPTH_COMPONENT16_OES"/>
-		<field name="GL_DEPTH_COMPONENT24_OES"/>
-		<field name="GL_DEPTH_COMPONENT32_OES"/>
-		<field name="GL_DEPTH_STENCIL_OES"/>
-		<field name="GL_ETC1_RGB8_OES"/>
-		<field name="GL_FIXED_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES"/>
-		<field name="GL_FRAMEBUFFER_BINDING_OES"/>
-		<field name="GL_FRAMEBUFFER_COMPLETE_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES"/>
-		<field name="GL_FRAMEBUFFER_OES"/>
-		<field name="GL_FRAMEBUFFER_UNSUPPORTED_OES"/>
-		<field name="GL_FUNC_ADD_OES"/>
-		<field name="GL_FUNC_REVERSE_SUBTRACT_OES"/>
-		<field name="GL_FUNC_SUBTRACT_OES"/>
-		<field name="GL_INCR_WRAP_OES"/>
-		<field name="GL_INVALID_FRAMEBUFFER_OPERATION_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_POINTER_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_SIZE_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_STRIDE_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_TYPE_OES"/>
-		<field name="GL_MATRIX_PALETTE_OES"/>
-		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES"/>
-		<field name="GL_MAX_PALETTE_MATRICES_OES"/>
-		<field name="GL_MAX_RENDERBUFFER_SIZE_OES"/>
-		<field name="GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT"/>
-		<field name="GL_MAX_VERTEX_UNITS_OES"/>
-		<field name="GL_MIRRORED_REPEAT_OES"/>
-		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_NONE_OES"/>
-		<field name="GL_NORMAL_MAP_OES"/>
-		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_REFLECTION_MAP_OES"/>
-		<field name="GL_RENDERBUFFER_ALPHA_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_BINDING_OES"/>
-		<field name="GL_RENDERBUFFER_BLUE_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_DEPTH_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_GREEN_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_HEIGHT_OES"/>
-		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES"/>
-		<field name="GL_RENDERBUFFER_OES"/>
-		<field name="GL_RENDERBUFFER_RED_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_STENCIL_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_WIDTH_OES"/>
-		<field name="GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES" since="15"/>
-		<field name="GL_RGB565_OES"/>
-		<field name="GL_RGB5_A1_OES"/>
-		<field name="GL_RGB8_OES"/>
-		<field name="GL_RGBA4_OES"/>
-		<field name="GL_RGBA8_OES"/>
-		<field name="GL_SAMPLER_EXTERNAL_OES" since="15"/>
-		<field name="GL_STENCIL_ATTACHMENT_OES"/>
-		<field name="GL_STENCIL_INDEX1_OES"/>
-		<field name="GL_STENCIL_INDEX4_OES"/>
-		<field name="GL_STENCIL_INDEX8_OES"/>
-		<field name="GL_TEXTURE_BINDING_CUBE_MAP_OES"/>
-		<field name="GL_TEXTURE_BINDING_EXTERNAL_OES" since="15"/>
-		<field name="GL_TEXTURE_CROP_RECT_OES"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES"/>
-		<field name="GL_TEXTURE_CUBE_MAP_OES"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES"/>
-		<field name="GL_TEXTURE_EXTERNAL_OES" since="15"/>
-		<field name="GL_TEXTURE_GEN_MODE_OES"/>
-		<field name="GL_TEXTURE_GEN_STR_OES"/>
-		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_TEXTURE_MAX_ANISOTROPY_EXT"/>
-		<field name="GL_UNSIGNED_INT_24_8_OES"/>
-		<field name="GL_WEIGHT_ARRAY_BUFFER_BINDING_OES"/>
-		<field name="GL_WEIGHT_ARRAY_OES"/>
-		<field name="GL_WEIGHT_ARRAY_POINTER_OES"/>
-		<field name="GL_WEIGHT_ARRAY_SIZE_OES"/>
-		<field name="GL_WEIGHT_ARRAY_STRIDE_OES"/>
-		<field name="GL_WEIGHT_ARRAY_TYPE_OES"/>
-		<field name="GL_WRITE_ONLY_OES"/>
-	</class>
-	<class name="android/opengl/GLES20" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="glActiveTexture(I)V"/>
-		<method name="glAttachShader(II)V"/>
-		<method name="glBindAttribLocation(IILjava/lang/String;)V"/>
-		<method name="glBindBuffer(II)V"/>
-		<method name="glBindFramebuffer(II)V"/>
-		<method name="glBindRenderbuffer(II)V"/>
-		<method name="glBindTexture(II)V"/>
-		<method name="glBlendColor(FFFF)V"/>
-		<method name="glBlendEquation(I)V"/>
-		<method name="glBlendEquationSeparate(II)V"/>
-		<method name="glBlendFunc(II)V"/>
-		<method name="glBlendFuncSeparate(IIII)V"/>
-		<method name="glBufferData(IILjava/nio/Buffer;I)V"/>
-		<method name="glBufferSubData(IIILjava/nio/Buffer;)V"/>
-		<method name="glCheckFramebufferStatus(I)I"/>
-		<method name="glClear(I)V"/>
-		<method name="glClearColor(FFFF)V"/>
-		<method name="glClearDepthf(F)V"/>
-		<method name="glClearStencil(I)V"/>
-		<method name="glColorMask(ZZZZ)V"/>
-		<method name="glCompileShader(I)V"/>
-		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCopyTexImage2D(IIIIIIII)V"/>
-		<method name="glCopyTexSubImage2D(IIIIIIII)V"/>
-		<method name="glCreateProgram()I"/>
-		<method name="glCreateShader(I)I"/>
-		<method name="glCullFace(I)V"/>
-		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteBuffers(I[II)V"/>
-		<method name="glDeleteFramebuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteFramebuffers(I[II)V"/>
-		<method name="glDeleteProgram(I)V"/>
-		<method name="glDeleteRenderbuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteRenderbuffers(I[II)V"/>
-		<method name="glDeleteShader(I)V"/>
-		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteTextures(I[II)V"/>
-		<method name="glDepthFunc(I)V"/>
-		<method name="glDepthMask(Z)V"/>
-		<method name="glDepthRangef(FF)V"/>
-		<method name="glDetachShader(II)V"/>
-		<method name="glDisable(I)V"/>
-		<method name="glDisableVertexAttribArray(I)V"/>
-		<method name="glDrawArrays(III)V"/>
-		<method name="glDrawElements(IIII)V" since="9"/>
-		<method name="glDrawElements(IIILjava/nio/Buffer;)V"/>
-		<method name="glEnable(I)V"/>
-		<method name="glEnableVertexAttribArray(I)V"/>
-		<method name="glFinish()V"/>
-		<method name="glFlush()V"/>
-		<method name="glFramebufferRenderbuffer(IIII)V"/>
-		<method name="glFramebufferTexture2D(IIIII)V"/>
-		<method name="glFrontFace(I)V"/>
-		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenBuffers(I[II)V"/>
-		<method name="glGenFramebuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenFramebuffers(I[II)V"/>
-		<method name="glGenRenderbuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenRenderbuffers(I[II)V"/>
-		<method name="glGenTextures(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenTextures(I[II)V"/>
-		<method name="glGenerateMipmap(I)V"/>
-		<method name="glGetActiveAttrib(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" removed="21"/>
-		<method name="glGetActiveAttrib(III[II[II[II[BI)V"/>
-		<method name="glGetActiveAttrib(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;" since="17"/>
-		<method name="glGetActiveAttrib(II[II[II)Ljava/lang/String;" since="17"/>
-		<method name="glGetActiveUniform(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" removed="21"/>
-		<method name="glGetActiveUniform(III[II[II[II[BI)V"/>
-		<method name="glGetActiveUniform(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;" since="17"/>
-		<method name="glGetActiveUniform(II[II[II)Ljava/lang/String;" since="17"/>
-		<method name="glGetAttachedShaders(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
-		<method name="glGetAttachedShaders(II[II[II)V"/>
-		<method name="glGetAttribLocation(ILjava/lang/String;)I"/>
-		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetBooleanv(I[ZI)V"/>
-		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetBufferParameteriv(II[II)V"/>
-		<method name="glGetError()I"/>
-		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetFloatv(I[FI)V"/>
-		<method name="glGetFramebufferAttachmentParameteriv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetFramebufferAttachmentParameteriv(III[II)V"/>
-		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetIntegerv(I[II)V"/>
-		<method name="glGetProgramInfoLog(I)Ljava/lang/String;"/>
-		<method name="glGetProgramiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetProgramiv(II[II)V"/>
-		<method name="glGetRenderbufferParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetRenderbufferParameteriv(II[II)V"/>
-		<method name="glGetShaderInfoLog(I)Ljava/lang/String;"/>
-		<method name="glGetShaderPrecisionFormat(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
-		<method name="glGetShaderPrecisionFormat(II[II[II)V"/>
-		<method name="glGetShaderSource(I)Ljava/lang/String;" since="17"/>
-		<method name="glGetShaderSource(IILjava/nio/IntBuffer;B)V" removed="21"/>
-		<method name="glGetShaderSource(II[II[BI)V"/>
-		<method name="glGetShaderiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetShaderiv(II[II)V"/>
-		<method name="glGetString(I)Ljava/lang/String;"/>
-		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetTexParameterfv(II[FI)V"/>
-		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameteriv(II[II)V"/>
-		<method name="glGetUniformLocation(ILjava/lang/String;)I"/>
-		<method name="glGetUniformfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetUniformfv(II[FI)V"/>
-		<method name="glGetUniformiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetUniformiv(II[II)V"/>
-		<method name="glGetVertexAttribfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetVertexAttribfv(II[FI)V"/>
-		<method name="glGetVertexAttribiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetVertexAttribiv(II[II)V"/>
-		<method name="glHint(II)V"/>
-		<method name="glIsBuffer(I)Z"/>
-		<method name="glIsEnabled(I)Z"/>
-		<method name="glIsFramebuffer(I)Z"/>
-		<method name="glIsProgram(I)Z"/>
-		<method name="glIsRenderbuffer(I)Z"/>
-		<method name="glIsShader(I)Z"/>
-		<method name="glIsTexture(I)Z"/>
-		<method name="glLineWidth(F)V"/>
-		<method name="glLinkProgram(I)V"/>
-		<method name="glPixelStorei(II)V"/>
-		<method name="glPolygonOffset(FF)V"/>
-		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V"/>
-		<method name="glReleaseShaderCompiler()V"/>
-		<method name="glRenderbufferStorage(IIII)V"/>
-		<method name="glSampleCoverage(FZ)V"/>
-		<method name="glScissor(IIII)V"/>
-		<method name="glShaderBinary(ILjava/nio/IntBuffer;ILjava/nio/Buffer;I)V"/>
-		<method name="glShaderBinary(I[IIILjava/nio/Buffer;I)V"/>
-		<method name="glShaderSource(ILjava/lang/String;)V"/>
-		<method name="glStencilFunc(III)V"/>
-		<method name="glStencilFuncSeparate(IIII)V"/>
-		<method name="glStencilMask(I)V"/>
-		<method name="glStencilMaskSeparate(II)V"/>
-		<method name="glStencilOp(III)V"/>
-		<method name="glStencilOpSeparate(IIII)V"/>
-		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glTexParameterf(IIF)V"/>
-		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexParameterfv(II[FI)V"/>
-		<method name="glTexParameteri(III)V"/>
-		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameteriv(II[II)V"/>
-		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glUniform1f(IF)V"/>
-		<method name="glUniform1fv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glUniform1fv(II[FI)V"/>
-		<method name="glUniform1i(II)V"/>
-		<method name="glUniform1iv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform1iv(II[II)V"/>
-		<method name="glUniform2f(IFF)V"/>
-		<method name="glUniform2fv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glUniform2fv(II[FI)V"/>
-		<method name="glUniform2i(III)V"/>
-		<method name="glUniform2iv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform2iv(II[II)V"/>
-		<method name="glUniform3f(IFFF)V"/>
-		<method name="glUniform3fv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glUniform3fv(II[FI)V"/>
-		<method name="glUniform3i(IIII)V"/>
-		<method name="glUniform3iv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform3iv(II[II)V"/>
-		<method name="glUniform4f(IFFFF)V"/>
-		<method name="glUniform4fv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glUniform4fv(II[FI)V"/>
-		<method name="glUniform4i(IIIII)V"/>
-		<method name="glUniform4iv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform4iv(II[II)V"/>
-		<method name="glUniformMatrix2fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix2fv(IIZ[FI)V"/>
-		<method name="glUniformMatrix3fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix3fv(IIZ[FI)V"/>
-		<method name="glUniformMatrix4fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix4fv(IIZ[FI)V"/>
-		<method name="glUseProgram(I)V"/>
-		<method name="glValidateProgram(I)V"/>
-		<method name="glVertexAttrib1f(IF)V"/>
-		<method name="glVertexAttrib1fv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glVertexAttrib1fv(I[FI)V"/>
-		<method name="glVertexAttrib2f(IFF)V"/>
-		<method name="glVertexAttrib2fv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glVertexAttrib2fv(I[FI)V"/>
-		<method name="glVertexAttrib3f(IFFF)V"/>
-		<method name="glVertexAttrib3fv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glVertexAttrib3fv(I[FI)V"/>
-		<method name="glVertexAttrib4f(IFFFF)V"/>
-		<method name="glVertexAttrib4fv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glVertexAttrib4fv(I[FI)V"/>
-		<method name="glVertexAttribPointer(IIIZII)V" since="9"/>
-		<method name="glVertexAttribPointer(IIIZILjava/nio/Buffer;)V"/>
-		<method name="glViewport(IIII)V"/>
-		<field name="GL_ACTIVE_ATTRIBUTES"/>
-		<field name="GL_ACTIVE_ATTRIBUTE_MAX_LENGTH"/>
-		<field name="GL_ACTIVE_TEXTURE"/>
-		<field name="GL_ACTIVE_UNIFORMS"/>
-		<field name="GL_ACTIVE_UNIFORM_MAX_LENGTH"/>
-		<field name="GL_ALIASED_LINE_WIDTH_RANGE"/>
-		<field name="GL_ALIASED_POINT_SIZE_RANGE"/>
-		<field name="GL_ALPHA"/>
-		<field name="GL_ALPHA_BITS"/>
-		<field name="GL_ALWAYS"/>
-		<field name="GL_ARRAY_BUFFER"/>
-		<field name="GL_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_ATTACHED_SHADERS"/>
-		<field name="GL_BACK"/>
-		<field name="GL_BLEND"/>
-		<field name="GL_BLEND_COLOR"/>
-		<field name="GL_BLEND_DST_ALPHA"/>
-		<field name="GL_BLEND_DST_RGB"/>
-		<field name="GL_BLEND_EQUATION"/>
-		<field name="GL_BLEND_EQUATION_ALPHA"/>
-		<field name="GL_BLEND_EQUATION_RGB"/>
-		<field name="GL_BLEND_SRC_ALPHA"/>
-		<field name="GL_BLEND_SRC_RGB"/>
-		<field name="GL_BLUE_BITS"/>
-		<field name="GL_BOOL"/>
-		<field name="GL_BOOL_VEC2"/>
-		<field name="GL_BOOL_VEC3"/>
-		<field name="GL_BOOL_VEC4"/>
-		<field name="GL_BUFFER_SIZE"/>
-		<field name="GL_BUFFER_USAGE"/>
-		<field name="GL_BYTE"/>
-		<field name="GL_CCW"/>
-		<field name="GL_CLAMP_TO_EDGE"/>
-		<field name="GL_COLOR_ATTACHMENT0"/>
-		<field name="GL_COLOR_BUFFER_BIT"/>
-		<field name="GL_COLOR_CLEAR_VALUE"/>
-		<field name="GL_COLOR_WRITEMASK"/>
-		<field name="GL_COMPILE_STATUS"/>
-		<field name="GL_COMPRESSED_TEXTURE_FORMATS"/>
-		<field name="GL_CONSTANT_ALPHA"/>
-		<field name="GL_CONSTANT_COLOR"/>
-		<field name="GL_CULL_FACE"/>
-		<field name="GL_CULL_FACE_MODE"/>
-		<field name="GL_CURRENT_PROGRAM"/>
-		<field name="GL_CURRENT_VERTEX_ATTRIB"/>
-		<field name="GL_CW"/>
-		<field name="GL_DECR"/>
-		<field name="GL_DECR_WRAP"/>
-		<field name="GL_DELETE_STATUS"/>
-		<field name="GL_DEPTH_ATTACHMENT"/>
-		<field name="GL_DEPTH_BITS"/>
-		<field name="GL_DEPTH_BUFFER_BIT"/>
-		<field name="GL_DEPTH_CLEAR_VALUE"/>
-		<field name="GL_DEPTH_COMPONENT"/>
-		<field name="GL_DEPTH_COMPONENT16"/>
-		<field name="GL_DEPTH_FUNC"/>
-		<field name="GL_DEPTH_RANGE"/>
-		<field name="GL_DEPTH_TEST"/>
-		<field name="GL_DEPTH_WRITEMASK"/>
-		<field name="GL_DITHER"/>
-		<field name="GL_DONT_CARE"/>
-		<field name="GL_DST_ALPHA"/>
-		<field name="GL_DST_COLOR"/>
-		<field name="GL_DYNAMIC_DRAW"/>
-		<field name="GL_ELEMENT_ARRAY_BUFFER"/>
-		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_EQUAL"/>
-		<field name="GL_EXTENSIONS"/>
-		<field name="GL_FALSE"/>
-		<field name="GL_FASTEST"/>
-		<field name="GL_FIXED"/>
-		<field name="GL_FLOAT"/>
-		<field name="GL_FLOAT_MAT2"/>
-		<field name="GL_FLOAT_MAT3"/>
-		<field name="GL_FLOAT_MAT4"/>
-		<field name="GL_FLOAT_VEC2"/>
-		<field name="GL_FLOAT_VEC3"/>
-		<field name="GL_FLOAT_VEC4"/>
-		<field name="GL_FRAGMENT_SHADER"/>
-		<field name="GL_FRAMEBUFFER"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"/>
-		<field name="GL_FRAMEBUFFER_BINDING"/>
-		<field name="GL_FRAMEBUFFER_COMPLETE"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"/>
-		<field name="GL_FRAMEBUFFER_UNSUPPORTED"/>
-		<field name="GL_FRONT"/>
-		<field name="GL_FRONT_AND_BACK"/>
-		<field name="GL_FRONT_FACE"/>
-		<field name="GL_FUNC_ADD"/>
-		<field name="GL_FUNC_REVERSE_SUBTRACT"/>
-		<field name="GL_FUNC_SUBTRACT"/>
-		<field name="GL_GENERATE_MIPMAP_HINT"/>
-		<field name="GL_GEQUAL"/>
-		<field name="GL_GREATER"/>
-		<field name="GL_GREEN_BITS"/>
-		<field name="GL_HIGH_FLOAT"/>
-		<field name="GL_HIGH_INT"/>
-		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT"/>
-		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE"/>
-		<field name="GL_INCR"/>
-		<field name="GL_INCR_WRAP"/>
-		<field name="GL_INFO_LOG_LENGTH"/>
-		<field name="GL_INT"/>
-		<field name="GL_INT_VEC2"/>
-		<field name="GL_INT_VEC3"/>
-		<field name="GL_INT_VEC4"/>
-		<field name="GL_INVALID_ENUM"/>
-		<field name="GL_INVALID_FRAMEBUFFER_OPERATION"/>
-		<field name="GL_INVALID_OPERATION"/>
-		<field name="GL_INVALID_VALUE"/>
-		<field name="GL_INVERT"/>
-		<field name="GL_KEEP"/>
-		<field name="GL_LEQUAL"/>
-		<field name="GL_LESS"/>
-		<field name="GL_LINEAR"/>
-		<field name="GL_LINEAR_MIPMAP_LINEAR"/>
-		<field name="GL_LINEAR_MIPMAP_NEAREST"/>
-		<field name="GL_LINES"/>
-		<field name="GL_LINE_LOOP"/>
-		<field name="GL_LINE_STRIP"/>
-		<field name="GL_LINE_WIDTH"/>
-		<field name="GL_LINK_STATUS"/>
-		<field name="GL_LOW_FLOAT"/>
-		<field name="GL_LOW_INT"/>
-		<field name="GL_LUMINANCE"/>
-		<field name="GL_LUMINANCE_ALPHA"/>
-		<field name="GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS"/>
-		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE"/>
-		<field name="GL_MAX_FRAGMENT_UNIFORM_VECTORS"/>
-		<field name="GL_MAX_RENDERBUFFER_SIZE"/>
-		<field name="GL_MAX_TEXTURE_IMAGE_UNITS"/>
-		<field name="GL_MAX_TEXTURE_SIZE"/>
-		<field name="GL_MAX_VARYING_VECTORS"/>
-		<field name="GL_MAX_VERTEX_ATTRIBS"/>
-		<field name="GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS"/>
-		<field name="GL_MAX_VERTEX_UNIFORM_VECTORS"/>
-		<field name="GL_MAX_VIEWPORT_DIMS"/>
-		<field name="GL_MEDIUM_FLOAT"/>
-		<field name="GL_MEDIUM_INT"/>
-		<field name="GL_MIRRORED_REPEAT"/>
-		<field name="GL_NEAREST"/>
-		<field name="GL_NEAREST_MIPMAP_LINEAR"/>
-		<field name="GL_NEAREST_MIPMAP_NEAREST"/>
-		<field name="GL_NEVER"/>
-		<field name="GL_NICEST"/>
-		<field name="GL_NONE"/>
-		<field name="GL_NOTEQUAL"/>
-		<field name="GL_NO_ERROR"/>
-		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"/>
-		<field name="GL_NUM_SHADER_BINARY_FORMATS"/>
-		<field name="GL_ONE"/>
-		<field name="GL_ONE_MINUS_CONSTANT_ALPHA"/>
-		<field name="GL_ONE_MINUS_CONSTANT_COLOR"/>
-		<field name="GL_ONE_MINUS_DST_ALPHA"/>
-		<field name="GL_ONE_MINUS_DST_COLOR"/>
-		<field name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<field name="GL_ONE_MINUS_SRC_COLOR"/>
-		<field name="GL_OUT_OF_MEMORY"/>
-		<field name="GL_PACK_ALIGNMENT"/>
-		<field name="GL_POINTS"/>
-		<field name="GL_POLYGON_OFFSET_FACTOR"/>
-		<field name="GL_POLYGON_OFFSET_FILL"/>
-		<field name="GL_POLYGON_OFFSET_UNITS"/>
-		<field name="GL_RED_BITS"/>
-		<field name="GL_RENDERBUFFER"/>
-		<field name="GL_RENDERBUFFER_ALPHA_SIZE"/>
-		<field name="GL_RENDERBUFFER_BINDING"/>
-		<field name="GL_RENDERBUFFER_BLUE_SIZE"/>
-		<field name="GL_RENDERBUFFER_DEPTH_SIZE"/>
-		<field name="GL_RENDERBUFFER_GREEN_SIZE"/>
-		<field name="GL_RENDERBUFFER_HEIGHT"/>
-		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT"/>
-		<field name="GL_RENDERBUFFER_RED_SIZE"/>
-		<field name="GL_RENDERBUFFER_STENCIL_SIZE"/>
-		<field name="GL_RENDERBUFFER_WIDTH"/>
-		<field name="GL_RENDERER"/>
-		<field name="GL_REPEAT"/>
-		<field name="GL_REPLACE"/>
-		<field name="GL_RGB"/>
-		<field name="GL_RGB565"/>
-		<field name="GL_RGB5_A1"/>
-		<field name="GL_RGBA"/>
-		<field name="GL_RGBA4"/>
-		<field name="GL_SAMPLER_2D"/>
-		<field name="GL_SAMPLER_CUBE"/>
-		<field name="GL_SAMPLES"/>
-		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"/>
-		<field name="GL_SAMPLE_BUFFERS"/>
-		<field name="GL_SAMPLE_COVERAGE"/>
-		<field name="GL_SAMPLE_COVERAGE_INVERT"/>
-		<field name="GL_SAMPLE_COVERAGE_VALUE"/>
-		<field name="GL_SCISSOR_BOX"/>
-		<field name="GL_SCISSOR_TEST"/>
-		<field name="GL_SHADER_BINARY_FORMATS"/>
-		<field name="GL_SHADER_COMPILER"/>
-		<field name="GL_SHADER_SOURCE_LENGTH"/>
-		<field name="GL_SHADER_TYPE"/>
-		<field name="GL_SHADING_LANGUAGE_VERSION"/>
-		<field name="GL_SHORT"/>
-		<field name="GL_SRC_ALPHA"/>
-		<field name="GL_SRC_ALPHA_SATURATE"/>
-		<field name="GL_SRC_COLOR"/>
-		<field name="GL_STATIC_DRAW"/>
-		<field name="GL_STENCIL_ATTACHMENT"/>
-		<field name="GL_STENCIL_BACK_FAIL"/>
-		<field name="GL_STENCIL_BACK_FUNC"/>
-		<field name="GL_STENCIL_BACK_PASS_DEPTH_FAIL"/>
-		<field name="GL_STENCIL_BACK_PASS_DEPTH_PASS"/>
-		<field name="GL_STENCIL_BACK_REF"/>
-		<field name="GL_STENCIL_BACK_VALUE_MASK"/>
-		<field name="GL_STENCIL_BACK_WRITEMASK"/>
-		<field name="GL_STENCIL_BITS"/>
-		<field name="GL_STENCIL_BUFFER_BIT"/>
-		<field name="GL_STENCIL_CLEAR_VALUE"/>
-		<field name="GL_STENCIL_FAIL"/>
-		<field name="GL_STENCIL_FUNC"/>
-		<field name="GL_STENCIL_INDEX" deprecated="18"/>
-		<field name="GL_STENCIL_INDEX8"/>
-		<field name="GL_STENCIL_PASS_DEPTH_FAIL"/>
-		<field name="GL_STENCIL_PASS_DEPTH_PASS"/>
-		<field name="GL_STENCIL_REF"/>
-		<field name="GL_STENCIL_TEST"/>
-		<field name="GL_STENCIL_VALUE_MASK"/>
-		<field name="GL_STENCIL_WRITEMASK"/>
-		<field name="GL_STREAM_DRAW"/>
-		<field name="GL_SUBPIXEL_BITS"/>
-		<field name="GL_TEXTURE"/>
-		<field name="GL_TEXTURE0"/>
-		<field name="GL_TEXTURE1"/>
-		<field name="GL_TEXTURE10"/>
-		<field name="GL_TEXTURE11"/>
-		<field name="GL_TEXTURE12"/>
-		<field name="GL_TEXTURE13"/>
-		<field name="GL_TEXTURE14"/>
-		<field name="GL_TEXTURE15"/>
-		<field name="GL_TEXTURE16"/>
-		<field name="GL_TEXTURE17"/>
-		<field name="GL_TEXTURE18"/>
-		<field name="GL_TEXTURE19"/>
-		<field name="GL_TEXTURE2"/>
-		<field name="GL_TEXTURE20"/>
-		<field name="GL_TEXTURE21"/>
-		<field name="GL_TEXTURE22"/>
-		<field name="GL_TEXTURE23"/>
-		<field name="GL_TEXTURE24"/>
-		<field name="GL_TEXTURE25"/>
-		<field name="GL_TEXTURE26"/>
-		<field name="GL_TEXTURE27"/>
-		<field name="GL_TEXTURE28"/>
-		<field name="GL_TEXTURE29"/>
-		<field name="GL_TEXTURE3"/>
-		<field name="GL_TEXTURE30"/>
-		<field name="GL_TEXTURE31"/>
-		<field name="GL_TEXTURE4"/>
-		<field name="GL_TEXTURE5"/>
-		<field name="GL_TEXTURE6"/>
-		<field name="GL_TEXTURE7"/>
-		<field name="GL_TEXTURE8"/>
-		<field name="GL_TEXTURE9"/>
-		<field name="GL_TEXTURE_2D"/>
-		<field name="GL_TEXTURE_BINDING_2D"/>
-		<field name="GL_TEXTURE_BINDING_CUBE_MAP"/>
-		<field name="GL_TEXTURE_CUBE_MAP"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/>
-		<field name="GL_TEXTURE_MAG_FILTER"/>
-		<field name="GL_TEXTURE_MIN_FILTER"/>
-		<field name="GL_TEXTURE_WRAP_S"/>
-		<field name="GL_TEXTURE_WRAP_T"/>
-		<field name="GL_TRIANGLES"/>
-		<field name="GL_TRIANGLE_FAN"/>
-		<field name="GL_TRIANGLE_STRIP"/>
-		<field name="GL_TRUE"/>
-		<field name="GL_UNPACK_ALIGNMENT"/>
-		<field name="GL_UNSIGNED_BYTE"/>
-		<field name="GL_UNSIGNED_INT"/>
-		<field name="GL_UNSIGNED_SHORT"/>
-		<field name="GL_UNSIGNED_SHORT_4_4_4_4"/>
-		<field name="GL_UNSIGNED_SHORT_5_5_5_1"/>
-		<field name="GL_UNSIGNED_SHORT_5_6_5"/>
-		<field name="GL_VALIDATE_STATUS"/>
-		<field name="GL_VENDOR"/>
-		<field name="GL_VERSION"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_ENABLED"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_NORMALIZED"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_POINTER"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_SIZE"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_STRIDE"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_TYPE"/>
-		<field name="GL_VERTEX_SHADER"/>
-		<field name="GL_VIEWPORT"/>
-		<field name="GL_ZERO"/>
-	</class>
-	<class name="android/opengl/GLES30" since="18">
-		<extends name="android/opengl/GLES20"/>
-		<method name="&lt;init>()V"/>
-		<method name="glBeginQuery(II)V"/>
-		<method name="glBeginTransformFeedback(I)V"/>
-		<method name="glBindBufferBase(III)V"/>
-		<method name="glBindBufferRange(IIIII)V"/>
-		<method name="glBindSampler(II)V"/>
-		<method name="glBindTransformFeedback(II)V"/>
-		<method name="glBindVertexArray(I)V"/>
-		<method name="glBlitFramebuffer(IIIIIIIIII)V"/>
-		<method name="glClearBufferfi(IIFI)V"/>
-		<method name="glClearBufferfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glClearBufferfv(II[FI)V"/>
-		<method name="glClearBufferiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glClearBufferiv(II[II)V"/>
-		<method name="glClearBufferuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glClearBufferuiv(II[II)V"/>
-		<method name="glClientWaitSync(JIJ)I"/>
-		<method name="glCompressedTexImage3D(IIIIIIIII)V"/>
-		<method name="glCompressedTexImage3D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCompressedTexSubImage3D(IIIIIIIIIII)V"/>
-		<method name="glCompressedTexSubImage3D(IIIIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCopyBufferSubData(IIIII)V"/>
-		<method name="glCopyTexSubImage3D(IIIIIIIII)V"/>
-		<method name="glDeleteQueries(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteQueries(I[II)V"/>
-		<method name="glDeleteSamplers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteSamplers(I[II)V"/>
-		<method name="glDeleteSync(J)V"/>
-		<method name="glDeleteTransformFeedbacks(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteTransformFeedbacks(I[II)V"/>
-		<method name="glDeleteVertexArrays(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteVertexArrays(I[II)V"/>
-		<method name="glDrawArraysInstanced(IIII)V"/>
-		<method name="glDrawBuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDrawBuffers(I[II)V"/>
-		<method name="glDrawElementsInstanced(IIIII)V"/>
-		<method name="glDrawElementsInstanced(IIILjava/nio/Buffer;I)V"/>
-		<method name="glDrawRangeElements(IIIIII)V"/>
-		<method name="glDrawRangeElements(IIIIILjava/nio/Buffer;)V"/>
-		<method name="glEndQuery(I)V"/>
-		<method name="glEndTransformFeedback()V"/>
-		<method name="glFenceSync(II)J"/>
-		<method name="glFlushMappedBufferRange(III)V"/>
-		<method name="glFramebufferTextureLayer(IIIII)V"/>
-		<method name="glGenQueries(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenQueries(I[II)V"/>
-		<method name="glGenSamplers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenSamplers(I[II)V"/>
-		<method name="glGenTransformFeedbacks(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenTransformFeedbacks(I[II)V"/>
-		<method name="glGenVertexArrays(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenVertexArrays(I[II)V"/>
-		<method name="glGetActiveUniformBlockName(II)Ljava/lang/String;"/>
-		<method name="glGetActiveUniformBlockName(III[II[BI)V"/>
-		<method name="glGetActiveUniformBlockName(IILjava/nio/Buffer;Ljava/nio/Buffer;)V"/>
-		<method name="glGetActiveUniformBlockiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetActiveUniformBlockiv(III[II)V"/>
-		<method name="glGetActiveUniformsiv(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetActiveUniformsiv(II[III[II)V"/>
-		<method name="glGetBufferParameteri64v(IILjava/nio/LongBuffer;)V"/>
-		<method name="glGetBufferParameteri64v(II[JI)V"/>
-		<method name="glGetBufferPointerv(II)Ljava/nio/Buffer;"/>
-		<method name="glGetFragDataLocation(ILjava/lang/String;)I"/>
-		<method name="glGetInteger64i_v(IILjava/nio/LongBuffer;)V"/>
-		<method name="glGetInteger64i_v(II[JI)V"/>
-		<method name="glGetInteger64v(ILjava/nio/LongBuffer;)V"/>
-		<method name="glGetInteger64v(I[JI)V"/>
-		<method name="glGetIntegeri_v(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetIntegeri_v(II[II)V"/>
-		<method name="glGetInternalformativ(IIIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetInternalformativ(IIII[II)V"/>
-		<method name="glGetProgramBinary(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;)V"/>
-		<method name="glGetProgramBinary(II[II[IILjava/nio/Buffer;)V"/>
-		<method name="glGetQueryObjectuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetQueryObjectuiv(II[II)V"/>
-		<method name="glGetQueryiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetQueryiv(II[II)V"/>
-		<method name="glGetSamplerParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetSamplerParameterfv(II[FI)V"/>
-		<method name="glGetSamplerParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetSamplerParameteriv(II[II)V"/>
-		<method name="glGetStringi(II)Ljava/lang/String;"/>
-		<method name="glGetSynciv(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
-		<method name="glGetSynciv(JII[II[II)V"/>
-		<method name="glGetTransformFeedbackVarying(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" deprecated="24"/>
-		<method name="glGetTransformFeedbackVarying(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)V" since="24"/>
-		<method name="glGetTransformFeedbackVarying(III[II[II[II[BI)V"/>
-		<method name="glGetTransformFeedbackVarying(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;"/>
-		<method name="glGetTransformFeedbackVarying(II[II[II)Ljava/lang/String;"/>
-		<method name="glGetUniformBlockIndex(ILjava/lang/String;)I"/>
-		<method name="glGetUniformIndices(I[Ljava/lang/String;Ljava/nio/IntBuffer;)V"/>
-		<method name="glGetUniformIndices(I[Ljava/lang/String;[II)V"/>
-		<method name="glGetUniformuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetUniformuiv(II[II)V"/>
-		<method name="glGetVertexAttribIiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetVertexAttribIiv(II[II)V"/>
-		<method name="glGetVertexAttribIuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetVertexAttribIuiv(II[II)V"/>
-		<method name="glInvalidateFramebuffer(IILjava/nio/IntBuffer;)V"/>
-		<method name="glInvalidateFramebuffer(II[II)V"/>
-		<method name="glInvalidateSubFramebuffer(IILjava/nio/IntBuffer;IIII)V"/>
-		<method name="glInvalidateSubFramebuffer(II[IIIIII)V"/>
-		<method name="glIsQuery(I)Z"/>
-		<method name="glIsSampler(I)Z"/>
-		<method name="glIsSync(J)Z"/>
-		<method name="glIsTransformFeedback(I)Z"/>
-		<method name="glIsVertexArray(I)Z"/>
-		<method name="glMapBufferRange(IIII)Ljava/nio/Buffer;"/>
-		<method name="glPauseTransformFeedback()V"/>
-		<method name="glProgramBinary(IILjava/nio/Buffer;I)V"/>
-		<method name="glProgramParameteri(III)V"/>
-		<method name="glReadBuffer(I)V"/>
-		<method name="glReadPixels(IIIIIII)V" since="24"/>
-		<method name="glRenderbufferStorageMultisample(IIIII)V"/>
-		<method name="glResumeTransformFeedback()V"/>
-		<method name="glSamplerParameterf(IIF)V"/>
-		<method name="glSamplerParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glSamplerParameterfv(II[FI)V"/>
-		<method name="glSamplerParameteri(III)V"/>
-		<method name="glSamplerParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glSamplerParameteriv(II[II)V"/>
-		<method name="glTexImage3D(IIIIIIIIII)V"/>
-		<method name="glTexImage3D(IIIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glTexStorage2D(IIIII)V"/>
-		<method name="glTexStorage3D(IIIIII)V"/>
-		<method name="glTexSubImage3D(IIIIIIIIIII)V"/>
-		<method name="glTexSubImage3D(IIIIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glTransformFeedbackVaryings(I[Ljava/lang/String;I)V"/>
-		<method name="glUniform1ui(II)V"/>
-		<method name="glUniform1uiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform1uiv(II[II)V"/>
-		<method name="glUniform2ui(III)V"/>
-		<method name="glUniform2uiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform2uiv(II[II)V"/>
-		<method name="glUniform3ui(IIII)V"/>
-		<method name="glUniform3uiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform3uiv(II[II)V"/>
-		<method name="glUniform4ui(IIIII)V"/>
-		<method name="glUniform4uiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glUniform4uiv(II[II)V"/>
-		<method name="glUniformBlockBinding(III)V"/>
-		<method name="glUniformMatrix2x3fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix2x3fv(IIZ[FI)V"/>
-		<method name="glUniformMatrix2x4fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix2x4fv(IIZ[FI)V"/>
-		<method name="glUniformMatrix3x2fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix3x2fv(IIZ[FI)V"/>
-		<method name="glUniformMatrix3x4fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix3x4fv(IIZ[FI)V"/>
-		<method name="glUniformMatrix4x2fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix4x2fv(IIZ[FI)V"/>
-		<method name="glUniformMatrix4x3fv(IIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glUniformMatrix4x3fv(IIZ[FI)V"/>
-		<method name="glUnmapBuffer(I)Z"/>
-		<method name="glVertexAttribDivisor(II)V"/>
-		<method name="glVertexAttribI4i(IIIII)V"/>
-		<method name="glVertexAttribI4iv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glVertexAttribI4iv(I[II)V"/>
-		<method name="glVertexAttribI4ui(IIIII)V"/>
-		<method name="glVertexAttribI4uiv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glVertexAttribI4uiv(I[II)V"/>
-		<method name="glVertexAttribIPointer(IIIII)V"/>
-		<method name="glVertexAttribIPointer(IIIILjava/nio/Buffer;)V"/>
-		<method name="glWaitSync(JIJ)V"/>
-		<field name="GL_ACTIVE_UNIFORM_BLOCKS"/>
-		<field name="GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH"/>
-		<field name="GL_ALREADY_SIGNALED"/>
-		<field name="GL_ANY_SAMPLES_PASSED"/>
-		<field name="GL_ANY_SAMPLES_PASSED_CONSERVATIVE"/>
-		<field name="GL_BLUE"/>
-		<field name="GL_BUFFER_ACCESS_FLAGS"/>
-		<field name="GL_BUFFER_MAPPED"/>
-		<field name="GL_BUFFER_MAP_LENGTH"/>
-		<field name="GL_BUFFER_MAP_OFFSET"/>
-		<field name="GL_BUFFER_MAP_POINTER"/>
-		<field name="GL_COLOR"/>
-		<field name="GL_COLOR_ATTACHMENT1"/>
-		<field name="GL_COLOR_ATTACHMENT10"/>
-		<field name="GL_COLOR_ATTACHMENT11"/>
-		<field name="GL_COLOR_ATTACHMENT12"/>
-		<field name="GL_COLOR_ATTACHMENT13"/>
-		<field name="GL_COLOR_ATTACHMENT14"/>
-		<field name="GL_COLOR_ATTACHMENT15"/>
-		<field name="GL_COLOR_ATTACHMENT2"/>
-		<field name="GL_COLOR_ATTACHMENT3"/>
-		<field name="GL_COLOR_ATTACHMENT4"/>
-		<field name="GL_COLOR_ATTACHMENT5"/>
-		<field name="GL_COLOR_ATTACHMENT6"/>
-		<field name="GL_COLOR_ATTACHMENT7"/>
-		<field name="GL_COLOR_ATTACHMENT8"/>
-		<field name="GL_COLOR_ATTACHMENT9"/>
-		<field name="GL_COMPARE_REF_TO_TEXTURE"/>
-		<field name="GL_COMPRESSED_R11_EAC"/>
-		<field name="GL_COMPRESSED_RG11_EAC"/>
-		<field name="GL_COMPRESSED_RGB8_ETC2"/>
-		<field name="GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2"/>
-		<field name="GL_COMPRESSED_RGBA8_ETC2_EAC"/>
-		<field name="GL_COMPRESSED_SIGNED_R11_EAC"/>
-		<field name="GL_COMPRESSED_SIGNED_RG11_EAC"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC"/>
-		<field name="GL_COMPRESSED_SRGB8_ETC2"/>
-		<field name="GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2"/>
-		<field name="GL_CONDITION_SATISFIED"/>
-		<field name="GL_COPY_READ_BUFFER"/>
-		<field name="GL_COPY_READ_BUFFER_BINDING"/>
-		<field name="GL_COPY_WRITE_BUFFER"/>
-		<field name="GL_COPY_WRITE_BUFFER_BINDING"/>
-		<field name="GL_CURRENT_QUERY"/>
-		<field name="GL_DEPTH"/>
-		<field name="GL_DEPTH24_STENCIL8"/>
-		<field name="GL_DEPTH32F_STENCIL8"/>
-		<field name="GL_DEPTH_COMPONENT24"/>
-		<field name="GL_DEPTH_COMPONENT32F"/>
-		<field name="GL_DEPTH_STENCIL"/>
-		<field name="GL_DEPTH_STENCIL_ATTACHMENT"/>
-		<field name="GL_DRAW_BUFFER0"/>
-		<field name="GL_DRAW_BUFFER1"/>
-		<field name="GL_DRAW_BUFFER10"/>
-		<field name="GL_DRAW_BUFFER11"/>
-		<field name="GL_DRAW_BUFFER12"/>
-		<field name="GL_DRAW_BUFFER13"/>
-		<field name="GL_DRAW_BUFFER14"/>
-		<field name="GL_DRAW_BUFFER15"/>
-		<field name="GL_DRAW_BUFFER2"/>
-		<field name="GL_DRAW_BUFFER3"/>
-		<field name="GL_DRAW_BUFFER4"/>
-		<field name="GL_DRAW_BUFFER5"/>
-		<field name="GL_DRAW_BUFFER6"/>
-		<field name="GL_DRAW_BUFFER7"/>
-		<field name="GL_DRAW_BUFFER8"/>
-		<field name="GL_DRAW_BUFFER9"/>
-		<field name="GL_DRAW_FRAMEBUFFER"/>
-		<field name="GL_DRAW_FRAMEBUFFER_BINDING"/>
-		<field name="GL_DYNAMIC_COPY"/>
-		<field name="GL_DYNAMIC_READ"/>
-		<field name="GL_FLOAT_32_UNSIGNED_INT_24_8_REV"/>
-		<field name="GL_FLOAT_MAT2x3"/>
-		<field name="GL_FLOAT_MAT2x4"/>
-		<field name="GL_FLOAT_MAT3x2"/>
-		<field name="GL_FLOAT_MAT3x4"/>
-		<field name="GL_FLOAT_MAT4x2"/>
-		<field name="GL_FLOAT_MAT4x3"/>
-		<field name="GL_FRAGMENT_SHADER_DERIVATIVE_HINT"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER"/>
-		<field name="GL_FRAMEBUFFER_DEFAULT"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"/>
-		<field name="GL_FRAMEBUFFER_UNDEFINED"/>
-		<field name="GL_GREEN"/>
-		<field name="GL_HALF_FLOAT"/>
-		<field name="GL_INTERLEAVED_ATTRIBS"/>
-		<field name="GL_INT_2_10_10_10_REV"/>
-		<field name="GL_INT_SAMPLER_2D"/>
-		<field name="GL_INT_SAMPLER_2D_ARRAY"/>
-		<field name="GL_INT_SAMPLER_3D"/>
-		<field name="GL_INT_SAMPLER_CUBE"/>
-		<field name="GL_INVALID_INDEX"/>
-		<field name="GL_MAJOR_VERSION"/>
-		<field name="GL_MAP_FLUSH_EXPLICIT_BIT"/>
-		<field name="GL_MAP_INVALIDATE_BUFFER_BIT"/>
-		<field name="GL_MAP_INVALIDATE_RANGE_BIT"/>
-		<field name="GL_MAP_READ_BIT"/>
-		<field name="GL_MAP_UNSYNCHRONIZED_BIT"/>
-		<field name="GL_MAP_WRITE_BIT"/>
-		<field name="GL_MAX"/>
-		<field name="GL_MAX_3D_TEXTURE_SIZE"/>
-		<field name="GL_MAX_ARRAY_TEXTURE_LAYERS"/>
-		<field name="GL_MAX_COLOR_ATTACHMENTS"/>
-		<field name="GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_COMBINED_UNIFORM_BLOCKS"/>
-		<field name="GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_DRAW_BUFFERS"/>
-		<field name="GL_MAX_ELEMENTS_INDICES"/>
-		<field name="GL_MAX_ELEMENTS_VERTICES"/>
-		<field name="GL_MAX_ELEMENT_INDEX"/>
-		<field name="GL_MAX_FRAGMENT_INPUT_COMPONENTS"/>
-		<field name="GL_MAX_FRAGMENT_UNIFORM_BLOCKS"/>
-		<field name="GL_MAX_FRAGMENT_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_PROGRAM_TEXEL_OFFSET"/>
-		<field name="GL_MAX_SAMPLES"/>
-		<field name="GL_MAX_SERVER_WAIT_TIMEOUT"/>
-		<field name="GL_MAX_TEXTURE_LOD_BIAS"/>
-		<field name="GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS"/>
-		<field name="GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS"/>
-		<field name="GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS"/>
-		<field name="GL_MAX_UNIFORM_BLOCK_SIZE"/>
-		<field name="GL_MAX_UNIFORM_BUFFER_BINDINGS"/>
-		<field name="GL_MAX_VARYING_COMPONENTS"/>
-		<field name="GL_MAX_VERTEX_OUTPUT_COMPONENTS"/>
-		<field name="GL_MAX_VERTEX_UNIFORM_BLOCKS"/>
-		<field name="GL_MAX_VERTEX_UNIFORM_COMPONENTS"/>
-		<field name="GL_MIN"/>
-		<field name="GL_MINOR_VERSION"/>
-		<field name="GL_MIN_PROGRAM_TEXEL_OFFSET"/>
-		<field name="GL_NUM_EXTENSIONS"/>
-		<field name="GL_NUM_PROGRAM_BINARY_FORMATS"/>
-		<field name="GL_NUM_SAMPLE_COUNTS"/>
-		<field name="GL_OBJECT_TYPE"/>
-		<field name="GL_PACK_ROW_LENGTH"/>
-		<field name="GL_PACK_SKIP_PIXELS"/>
-		<field name="GL_PACK_SKIP_ROWS"/>
-		<field name="GL_PIXEL_PACK_BUFFER"/>
-		<field name="GL_PIXEL_PACK_BUFFER_BINDING"/>
-		<field name="GL_PIXEL_UNPACK_BUFFER"/>
-		<field name="GL_PIXEL_UNPACK_BUFFER_BINDING"/>
-		<field name="GL_PRIMITIVE_RESTART_FIXED_INDEX"/>
-		<field name="GL_PROGRAM_BINARY_FORMATS"/>
-		<field name="GL_PROGRAM_BINARY_LENGTH"/>
-		<field name="GL_PROGRAM_BINARY_RETRIEVABLE_HINT"/>
-		<field name="GL_QUERY_RESULT"/>
-		<field name="GL_QUERY_RESULT_AVAILABLE"/>
-		<field name="GL_R11F_G11F_B10F"/>
-		<field name="GL_R16F"/>
-		<field name="GL_R16I"/>
-		<field name="GL_R16UI"/>
-		<field name="GL_R32F"/>
-		<field name="GL_R32I"/>
-		<field name="GL_R32UI"/>
-		<field name="GL_R8"/>
-		<field name="GL_R8I"/>
-		<field name="GL_R8UI"/>
-		<field name="GL_R8_SNORM"/>
-		<field name="GL_RASTERIZER_DISCARD"/>
-		<field name="GL_READ_BUFFER"/>
-		<field name="GL_READ_FRAMEBUFFER"/>
-		<field name="GL_READ_FRAMEBUFFER_BINDING"/>
-		<field name="GL_RED"/>
-		<field name="GL_RED_INTEGER"/>
-		<field name="GL_RENDERBUFFER_SAMPLES"/>
-		<field name="GL_RG"/>
-		<field name="GL_RG16F"/>
-		<field name="GL_RG16I"/>
-		<field name="GL_RG16UI"/>
-		<field name="GL_RG32F"/>
-		<field name="GL_RG32I"/>
-		<field name="GL_RG32UI"/>
-		<field name="GL_RG8"/>
-		<field name="GL_RG8I"/>
-		<field name="GL_RG8UI"/>
-		<field name="GL_RG8_SNORM"/>
-		<field name="GL_RGB10_A2"/>
-		<field name="GL_RGB10_A2UI"/>
-		<field name="GL_RGB16F"/>
-		<field name="GL_RGB16I"/>
-		<field name="GL_RGB16UI"/>
-		<field name="GL_RGB32F"/>
-		<field name="GL_RGB32I"/>
-		<field name="GL_RGB32UI"/>
-		<field name="GL_RGB8"/>
-		<field name="GL_RGB8I"/>
-		<field name="GL_RGB8UI"/>
-		<field name="GL_RGB8_SNORM"/>
-		<field name="GL_RGB9_E5"/>
-		<field name="GL_RGBA16F"/>
-		<field name="GL_RGBA16I"/>
-		<field name="GL_RGBA16UI"/>
-		<field name="GL_RGBA32F"/>
-		<field name="GL_RGBA32I"/>
-		<field name="GL_RGBA32UI"/>
-		<field name="GL_RGBA8"/>
-		<field name="GL_RGBA8I"/>
-		<field name="GL_RGBA8UI"/>
-		<field name="GL_RGBA8_SNORM"/>
-		<field name="GL_RGBA_INTEGER"/>
-		<field name="GL_RGB_INTEGER"/>
-		<field name="GL_RG_INTEGER"/>
-		<field name="GL_SAMPLER_2D_ARRAY"/>
-		<field name="GL_SAMPLER_2D_ARRAY_SHADOW"/>
-		<field name="GL_SAMPLER_2D_SHADOW"/>
-		<field name="GL_SAMPLER_3D"/>
-		<field name="GL_SAMPLER_BINDING"/>
-		<field name="GL_SAMPLER_CUBE_SHADOW"/>
-		<field name="GL_SEPARATE_ATTRIBS"/>
-		<field name="GL_SIGNALED"/>
-		<field name="GL_SIGNED_NORMALIZED"/>
-		<field name="GL_SRGB"/>
-		<field name="GL_SRGB8"/>
-		<field name="GL_SRGB8_ALPHA8"/>
-		<field name="GL_STATIC_COPY"/>
-		<field name="GL_STATIC_READ"/>
-		<field name="GL_STENCIL"/>
-		<field name="GL_STREAM_COPY"/>
-		<field name="GL_STREAM_READ"/>
-		<field name="GL_SYNC_CONDITION"/>
-		<field name="GL_SYNC_FENCE"/>
-		<field name="GL_SYNC_FLAGS"/>
-		<field name="GL_SYNC_FLUSH_COMMANDS_BIT"/>
-		<field name="GL_SYNC_GPU_COMMANDS_COMPLETE"/>
-		<field name="GL_SYNC_STATUS"/>
-		<field name="GL_TEXTURE_2D_ARRAY"/>
-		<field name="GL_TEXTURE_3D"/>
-		<field name="GL_TEXTURE_BASE_LEVEL"/>
-		<field name="GL_TEXTURE_BINDING_2D_ARRAY"/>
-		<field name="GL_TEXTURE_BINDING_3D"/>
-		<field name="GL_TEXTURE_COMPARE_FUNC"/>
-		<field name="GL_TEXTURE_COMPARE_MODE"/>
-		<field name="GL_TEXTURE_IMMUTABLE_FORMAT"/>
-		<field name="GL_TEXTURE_IMMUTABLE_LEVELS"/>
-		<field name="GL_TEXTURE_MAX_LEVEL"/>
-		<field name="GL_TEXTURE_MAX_LOD"/>
-		<field name="GL_TEXTURE_MIN_LOD"/>
-		<field name="GL_TEXTURE_SWIZZLE_A"/>
-		<field name="GL_TEXTURE_SWIZZLE_B"/>
-		<field name="GL_TEXTURE_SWIZZLE_G"/>
-		<field name="GL_TEXTURE_SWIZZLE_R"/>
-		<field name="GL_TEXTURE_WRAP_R"/>
-		<field name="GL_TIMEOUT_EXPIRED"/>
-		<field name="GL_TIMEOUT_IGNORED"/>
-		<field name="GL_TRANSFORM_FEEDBACK"/>
-		<field name="GL_TRANSFORM_FEEDBACK_ACTIVE"/>
-		<field name="GL_TRANSFORM_FEEDBACK_BINDING"/>
-		<field name="GL_TRANSFORM_FEEDBACK_BUFFER"/>
-		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_BINDING"/>
-		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_MODE"/>
-		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_SIZE"/>
-		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_START"/>
-		<field name="GL_TRANSFORM_FEEDBACK_PAUSED"/>
-		<field name="GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN"/>
-		<field name="GL_TRANSFORM_FEEDBACK_VARYINGS"/>
-		<field name="GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH"/>
-		<field name="GL_UNIFORM_ARRAY_STRIDE"/>
-		<field name="GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS"/>
-		<field name="GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES"/>
-		<field name="GL_UNIFORM_BLOCK_BINDING"/>
-		<field name="GL_UNIFORM_BLOCK_DATA_SIZE"/>
-		<field name="GL_UNIFORM_BLOCK_INDEX"/>
-		<field name="GL_UNIFORM_BLOCK_NAME_LENGTH"/>
-		<field name="GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER"/>
-		<field name="GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER"/>
-		<field name="GL_UNIFORM_BUFFER"/>
-		<field name="GL_UNIFORM_BUFFER_BINDING"/>
-		<field name="GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT"/>
-		<field name="GL_UNIFORM_BUFFER_SIZE"/>
-		<field name="GL_UNIFORM_BUFFER_START"/>
-		<field name="GL_UNIFORM_IS_ROW_MAJOR"/>
-		<field name="GL_UNIFORM_MATRIX_STRIDE"/>
-		<field name="GL_UNIFORM_NAME_LENGTH"/>
-		<field name="GL_UNIFORM_OFFSET"/>
-		<field name="GL_UNIFORM_SIZE"/>
-		<field name="GL_UNIFORM_TYPE"/>
-		<field name="GL_UNPACK_IMAGE_HEIGHT"/>
-		<field name="GL_UNPACK_ROW_LENGTH"/>
-		<field name="GL_UNPACK_SKIP_IMAGES"/>
-		<field name="GL_UNPACK_SKIP_PIXELS"/>
-		<field name="GL_UNPACK_SKIP_ROWS"/>
-		<field name="GL_UNSIGNALED"/>
-		<field name="GL_UNSIGNED_INT_10F_11F_11F_REV"/>
-		<field name="GL_UNSIGNED_INT_24_8"/>
-		<field name="GL_UNSIGNED_INT_2_10_10_10_REV"/>
-		<field name="GL_UNSIGNED_INT_5_9_9_9_REV"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_2D"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_2D_ARRAY"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_3D"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE"/>
-		<field name="GL_UNSIGNED_INT_VEC2"/>
-		<field name="GL_UNSIGNED_INT_VEC3"/>
-		<field name="GL_UNSIGNED_INT_VEC4"/>
-		<field name="GL_UNSIGNED_NORMALIZED"/>
-		<field name="GL_VERTEX_ARRAY_BINDING"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_DIVISOR"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_INTEGER"/>
-		<field name="GL_WAIT_FAILED"/>
-	</class>
-	<class name="android/opengl/GLES31" since="21">
-		<extends name="android/opengl/GLES30"/>
-		<method name="&lt;init>()V"/>
-		<method name="glActiveShaderProgram(II)V"/>
-		<method name="glBindImageTexture(IIIZIII)V"/>
-		<method name="glBindProgramPipeline(I)V"/>
-		<method name="glBindVertexBuffer(IIJI)V"/>
-		<method name="glCreateShaderProgramv(I[Ljava/lang/String;)I"/>
-		<method name="glDeleteProgramPipelines(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteProgramPipelines(I[II)V"/>
-		<method name="glDispatchCompute(III)V"/>
-		<method name="glDispatchComputeIndirect(J)V"/>
-		<method name="glDrawArraysIndirect(IJ)V"/>
-		<method name="glDrawElementsIndirect(IIJ)V"/>
-		<method name="glFramebufferParameteri(III)V"/>
-		<method name="glGenProgramPipelines(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenProgramPipelines(I[II)V"/>
-		<method name="glGetBooleani_v(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetBooleani_v(II[ZI)V"/>
-		<method name="glGetFramebufferParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetFramebufferParameteriv(II[II)V"/>
-		<method name="glGetMultisamplefv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetMultisamplefv(II[FI)V"/>
-		<method name="glGetProgramInterfaceiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetProgramInterfaceiv(III[II)V"/>
-		<method name="glGetProgramPipelineInfoLog(I)Ljava/lang/String;"/>
-		<method name="glGetProgramPipelineiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetProgramPipelineiv(II[II)V"/>
-		<method name="glGetProgramResourceIndex(IILjava/lang/String;)I"/>
-		<method name="glGetProgramResourceLocation(IILjava/lang/String;)I"/>
-		<method name="glGetProgramResourceName(III)Ljava/lang/String;"/>
-		<method name="glGetProgramResourceiv(IIIILjava/nio/IntBuffer;ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
-		<method name="glGetProgramResourceiv(IIII[III[II[II)V"/>
-		<method name="glGetTexLevelParameterfv(IIILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetTexLevelParameterfv(III[FI)V"/>
-		<method name="glGetTexLevelParameteriv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexLevelParameteriv(III[II)V"/>
-		<method name="glIsProgramPipeline(I)Z"/>
-		<method name="glMemoryBarrier(I)V"/>
-		<method name="glMemoryBarrierByRegion(I)V"/>
-		<method name="glProgramUniform1f(IIF)V"/>
-		<method name="glProgramUniform1fv(IIILjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniform1fv(III[FI)V"/>
-		<method name="glProgramUniform1i(III)V"/>
-		<method name="glProgramUniform1iv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform1iv(III[II)V"/>
-		<method name="glProgramUniform1ui(III)V"/>
-		<method name="glProgramUniform1uiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform1uiv(III[II)V"/>
-		<method name="glProgramUniform2f(IIFF)V"/>
-		<method name="glProgramUniform2fv(IIILjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniform2fv(III[FI)V"/>
-		<method name="glProgramUniform2i(IIII)V"/>
-		<method name="glProgramUniform2iv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform2iv(III[II)V"/>
-		<method name="glProgramUniform2ui(IIII)V"/>
-		<method name="glProgramUniform2uiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform2uiv(III[II)V"/>
-		<method name="glProgramUniform3f(IIFFF)V"/>
-		<method name="glProgramUniform3fv(IIILjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniform3fv(III[FI)V"/>
-		<method name="glProgramUniform3i(IIIII)V"/>
-		<method name="glProgramUniform3iv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform3iv(III[II)V"/>
-		<method name="glProgramUniform3ui(IIIII)V"/>
-		<method name="glProgramUniform3uiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform3uiv(III[II)V"/>
-		<method name="glProgramUniform4f(IIFFFF)V"/>
-		<method name="glProgramUniform4fv(IIILjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniform4fv(III[FI)V"/>
-		<method name="glProgramUniform4i(IIIIII)V"/>
-		<method name="glProgramUniform4iv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform4iv(III[II)V"/>
-		<method name="glProgramUniform4ui(IIIIII)V"/>
-		<method name="glProgramUniform4uiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glProgramUniform4uiv(III[II)V"/>
-		<method name="glProgramUniformMatrix2fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix2fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix2x3fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix2x3fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix2x4fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix2x4fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix3fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix3fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix3x2fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix3x2fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix3x4fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix3x4fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix4fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix4fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix4x2fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix4x2fv(IIIZ[FI)V"/>
-		<method name="glProgramUniformMatrix4x3fv(IIIZLjava/nio/FloatBuffer;)V"/>
-		<method name="glProgramUniformMatrix4x3fv(IIIZ[FI)V"/>
-		<method name="glSampleMaski(II)V"/>
-		<method name="glTexStorage2DMultisample(IIIIIZ)V"/>
-		<method name="glUseProgramStages(III)V"/>
-		<method name="glValidateProgramPipeline(I)V"/>
-		<method name="glVertexAttribBinding(II)V"/>
-		<method name="glVertexAttribFormat(IIIZI)V"/>
-		<method name="glVertexAttribIFormat(IIII)V"/>
-		<method name="glVertexBindingDivisor(II)V"/>
-		<field name="GL_ACTIVE_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_ACTIVE_PROGRAM"/>
-		<field name="GL_ACTIVE_RESOURCES"/>
-		<field name="GL_ACTIVE_VARIABLES"/>
-		<field name="GL_ALL_BARRIER_BITS" since="24"/>
-		<field name="GL_ALL_SHADER_BITS"/>
-		<field name="GL_ARRAY_SIZE"/>
-		<field name="GL_ARRAY_STRIDE"/>
-		<field name="GL_ATOMIC_COUNTER_BARRIER_BIT"/>
-		<field name="GL_ATOMIC_COUNTER_BUFFER"/>
-		<field name="GL_ATOMIC_COUNTER_BUFFER_BINDING"/>
-		<field name="GL_ATOMIC_COUNTER_BUFFER_INDEX"/>
-		<field name="GL_ATOMIC_COUNTER_BUFFER_SIZE"/>
-		<field name="GL_ATOMIC_COUNTER_BUFFER_START"/>
-		<field name="GL_BLOCK_INDEX"/>
-		<field name="GL_BUFFER_BINDING"/>
-		<field name="GL_BUFFER_DATA_SIZE"/>
-		<field name="GL_BUFFER_UPDATE_BARRIER_BIT"/>
-		<field name="GL_BUFFER_VARIABLE"/>
-		<field name="GL_COMMAND_BARRIER_BIT"/>
-		<field name="GL_COMPUTE_SHADER"/>
-		<field name="GL_COMPUTE_SHADER_BIT"/>
-		<field name="GL_COMPUTE_WORK_GROUP_SIZE"/>
-		<field name="GL_DEPTH_STENCIL_TEXTURE_MODE"/>
-		<field name="GL_DISPATCH_INDIRECT_BUFFER"/>
-		<field name="GL_DISPATCH_INDIRECT_BUFFER_BINDING"/>
-		<field name="GL_DRAW_INDIRECT_BUFFER"/>
-		<field name="GL_DRAW_INDIRECT_BUFFER_BINDING"/>
-		<field name="GL_ELEMENT_ARRAY_BARRIER_BIT" since="24"/>
-		<field name="GL_FRAGMENT_SHADER_BIT"/>
-		<field name="GL_FRAMEBUFFER_BARRIER_BIT"/>
-		<field name="GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"/>
-		<field name="GL_FRAMEBUFFER_DEFAULT_HEIGHT"/>
-		<field name="GL_FRAMEBUFFER_DEFAULT_SAMPLES"/>
-		<field name="GL_FRAMEBUFFER_DEFAULT_WIDTH"/>
-		<field name="GL_IMAGE_2D"/>
-		<field name="GL_IMAGE_2D_ARRAY"/>
-		<field name="GL_IMAGE_3D"/>
-		<field name="GL_IMAGE_BINDING_ACCESS"/>
-		<field name="GL_IMAGE_BINDING_FORMAT"/>
-		<field name="GL_IMAGE_BINDING_LAYER"/>
-		<field name="GL_IMAGE_BINDING_LAYERED"/>
-		<field name="GL_IMAGE_BINDING_LEVEL"/>
-		<field name="GL_IMAGE_BINDING_NAME"/>
-		<field name="GL_IMAGE_CUBE"/>
-		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS"/>
-		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE"/>
-		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_TYPE"/>
-		<field name="GL_INT_IMAGE_2D"/>
-		<field name="GL_INT_IMAGE_2D_ARRAY"/>
-		<field name="GL_INT_IMAGE_3D"/>
-		<field name="GL_INT_IMAGE_CUBE"/>
-		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE"/>
-		<field name="GL_IS_ROW_MAJOR"/>
-		<field name="GL_LOCATION"/>
-		<field name="GL_MATRIX_STRIDE"/>
-		<field name="GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS"/>
-		<field name="GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE"/>
-		<field name="GL_MAX_COLOR_TEXTURE_SAMPLES"/>
-		<field name="GL_MAX_COMBINED_ATOMIC_COUNTERS"/>
-		<field name="GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_COMBINED_IMAGE_UNIFORMS"/>
-		<field name="GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES"/>
-		<field name="GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS"/>
-		<field name="GL_MAX_COMPUTE_ATOMIC_COUNTERS"/>
-		<field name="GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_MAX_COMPUTE_IMAGE_UNIFORMS"/>
-		<field name="GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS"/>
-		<field name="GL_MAX_COMPUTE_SHARED_MEMORY_SIZE"/>
-		<field name="GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS"/>
-		<field name="GL_MAX_COMPUTE_UNIFORM_BLOCKS"/>
-		<field name="GL_MAX_COMPUTE_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_COMPUTE_WORK_GROUP_COUNT"/>
-		<field name="GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS"/>
-		<field name="GL_MAX_COMPUTE_WORK_GROUP_SIZE"/>
-		<field name="GL_MAX_DEPTH_TEXTURE_SAMPLES"/>
-		<field name="GL_MAX_FRAGMENT_ATOMIC_COUNTERS"/>
-		<field name="GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_MAX_FRAGMENT_IMAGE_UNIFORMS"/>
-		<field name="GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS"/>
-		<field name="GL_MAX_FRAMEBUFFER_HEIGHT"/>
-		<field name="GL_MAX_FRAMEBUFFER_SAMPLES"/>
-		<field name="GL_MAX_FRAMEBUFFER_WIDTH"/>
-		<field name="GL_MAX_IMAGE_UNITS"/>
-		<field name="GL_MAX_INTEGER_SAMPLES"/>
-		<field name="GL_MAX_NAME_LENGTH"/>
-		<field name="GL_MAX_NUM_ACTIVE_VARIABLES"/>
-		<field name="GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET"/>
-		<field name="GL_MAX_SAMPLE_MASK_WORDS"/>
-		<field name="GL_MAX_SHADER_STORAGE_BLOCK_SIZE"/>
-		<field name="GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS"/>
-		<field name="GL_MAX_UNIFORM_LOCATIONS"/>
-		<field name="GL_MAX_VERTEX_ATOMIC_COUNTERS"/>
-		<field name="GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_MAX_VERTEX_ATTRIB_BINDINGS"/>
-		<field name="GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET"/>
-		<field name="GL_MAX_VERTEX_ATTRIB_STRIDE"/>
-		<field name="GL_MAX_VERTEX_IMAGE_UNIFORMS"/>
-		<field name="GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS"/>
-		<field name="GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET"/>
-		<field name="GL_NAME_LENGTH"/>
-		<field name="GL_NUM_ACTIVE_VARIABLES"/>
-		<field name="GL_OFFSET"/>
-		<field name="GL_PIXEL_BUFFER_BARRIER_BIT"/>
-		<field name="GL_PROGRAM_INPUT"/>
-		<field name="GL_PROGRAM_OUTPUT"/>
-		<field name="GL_PROGRAM_PIPELINE_BINDING"/>
-		<field name="GL_PROGRAM_SEPARABLE"/>
-		<field name="GL_READ_ONLY"/>
-		<field name="GL_READ_WRITE"/>
-		<field name="GL_REFERENCED_BY_COMPUTE_SHADER"/>
-		<field name="GL_REFERENCED_BY_FRAGMENT_SHADER"/>
-		<field name="GL_REFERENCED_BY_VERTEX_SHADER"/>
-		<field name="GL_SAMPLER_2D_MULTISAMPLE"/>
-		<field name="GL_SAMPLE_MASK"/>
-		<field name="GL_SAMPLE_MASK_VALUE"/>
-		<field name="GL_SAMPLE_POSITION"/>
-		<field name="GL_SHADER_IMAGE_ACCESS_BARRIER_BIT" since="24"/>
-		<field name="GL_SHADER_STORAGE_BARRIER_BIT"/>
-		<field name="GL_SHADER_STORAGE_BLOCK"/>
-		<field name="GL_SHADER_STORAGE_BUFFER"/>
-		<field name="GL_SHADER_STORAGE_BUFFER_BINDING"/>
-		<field name="GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT"/>
-		<field name="GL_SHADER_STORAGE_BUFFER_SIZE"/>
-		<field name="GL_SHADER_STORAGE_BUFFER_START"/>
-		<field name="GL_STENCIL_INDEX"/>
-		<field name="GL_TEXTURE_2D_MULTISAMPLE"/>
-		<field name="GL_TEXTURE_ALPHA_SIZE"/>
-		<field name="GL_TEXTURE_ALPHA_TYPE"/>
-		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE"/>
-		<field name="GL_TEXTURE_BLUE_SIZE"/>
-		<field name="GL_TEXTURE_BLUE_TYPE"/>
-		<field name="GL_TEXTURE_COMPRESSED"/>
-		<field name="GL_TEXTURE_DEPTH"/>
-		<field name="GL_TEXTURE_DEPTH_SIZE"/>
-		<field name="GL_TEXTURE_DEPTH_TYPE"/>
-		<field name="GL_TEXTURE_FETCH_BARRIER_BIT"/>
-		<field name="GL_TEXTURE_FIXED_SAMPLE_LOCATIONS"/>
-		<field name="GL_TEXTURE_GREEN_SIZE"/>
-		<field name="GL_TEXTURE_GREEN_TYPE"/>
-		<field name="GL_TEXTURE_HEIGHT"/>
-		<field name="GL_TEXTURE_INTERNAL_FORMAT"/>
-		<field name="GL_TEXTURE_RED_SIZE"/>
-		<field name="GL_TEXTURE_RED_TYPE"/>
-		<field name="GL_TEXTURE_SAMPLES"/>
-		<field name="GL_TEXTURE_SHARED_SIZE"/>
-		<field name="GL_TEXTURE_STENCIL_SIZE"/>
-		<field name="GL_TEXTURE_UPDATE_BARRIER_BIT"/>
-		<field name="GL_TEXTURE_WIDTH"/>
-		<field name="GL_TOP_LEVEL_ARRAY_SIZE"/>
-		<field name="GL_TOP_LEVEL_ARRAY_STRIDE"/>
-		<field name="GL_TRANSFORM_FEEDBACK_BARRIER_BIT"/>
-		<field name="GL_TRANSFORM_FEEDBACK_VARYING"/>
-		<field name="GL_TYPE"/>
-		<field name="GL_UNIFORM"/>
-		<field name="GL_UNIFORM_BARRIER_BIT"/>
-		<field name="GL_UNIFORM_BLOCK"/>
-		<field name="GL_UNSIGNED_INT_ATOMIC_COUNTER"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_2D"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_2D_ARRAY"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_3D"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_CUBE"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE"/>
-		<field name="GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT" since="24"/>
-		<field name="GL_VERTEX_ATTRIB_BINDING"/>
-		<field name="GL_VERTEX_ATTRIB_RELATIVE_OFFSET"/>
-		<field name="GL_VERTEX_BINDING_BUFFER"/>
-		<field name="GL_VERTEX_BINDING_DIVISOR"/>
-		<field name="GL_VERTEX_BINDING_OFFSET"/>
-		<field name="GL_VERTEX_BINDING_STRIDE"/>
-		<field name="GL_VERTEX_SHADER_BIT"/>
-		<field name="GL_WRITE_ONLY"/>
-	</class>
-	<class name="android/opengl/GLES31Ext" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="glBlendBarrierKHR()V"/>
-		<method name="glBlendEquationSeparateiEXT(III)V"/>
-		<method name="glBlendEquationiEXT(II)V"/>
-		<method name="glBlendFuncSeparateiEXT(IIIII)V"/>
-		<method name="glBlendFunciEXT(III)V"/>
-		<method name="glColorMaskiEXT(IZZZZ)V"/>
-		<method name="glCopyImageSubDataEXT(IIIIIIIIIIIIIII)V"/>
-		<method name="glDebugMessageCallbackKHR(Landroid/opengl/GLES31Ext$DebugProcKHR;)V"/>
-		<method name="glDebugMessageControlKHR(IIIILjava/nio/IntBuffer;Z)V"/>
-		<method name="glDebugMessageControlKHR(IIII[IIZ)V"/>
-		<method name="glDebugMessageInsertKHR(IIIILjava/lang/String;)V"/>
-		<method name="glDisableiEXT(II)V"/>
-		<method name="glEnableiEXT(II)V"/>
-		<method name="glFramebufferTextureEXT(IIII)V"/>
-		<method name="glGetDebugMessageCallbackKHR()Landroid/opengl/GLES31Ext$DebugProcKHR;"/>
-		<method name="glGetDebugMessageLogKHR(II[II[II[II[II[II[BI)I"/>
-		<method name="glGetDebugMessageLogKHR(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;"/>
-		<method name="glGetDebugMessageLogKHR(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I"/>
-		<method name="glGetDebugMessageLogKHR(I[II[II[II[II)[Ljava/lang/String;"/>
-		<method name="glGetObjectLabelKHR(II)Ljava/lang/String;"/>
-		<method name="glGetObjectPtrLabelKHR(J)Ljava/lang/String;"/>
-		<method name="glGetSamplerParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetSamplerParameterIivEXT(II[II)V"/>
-		<method name="glGetSamplerParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetSamplerParameterIuivEXT(II[II)V"/>
-		<method name="glGetTexParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameterIivEXT(II[II)V"/>
-		<method name="glGetTexParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameterIuivEXT(II[II)V"/>
-		<method name="glIsEnablediEXT(II)Z"/>
-		<method name="glMinSampleShadingOES(F)V"/>
-		<method name="glObjectLabelKHR(IIILjava/lang/String;)V"/>
-		<method name="glObjectPtrLabelKHR(JLjava/lang/String;)V"/>
-		<method name="glPatchParameteriEXT(II)V"/>
-		<method name="glPopDebugGroupKHR()V"/>
-		<method name="glPrimitiveBoundingBoxEXT(FFFFFFFF)V"/>
-		<method name="glPushDebugGroupKHR(IIILjava/lang/String;)V"/>
-		<method name="glSamplerParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glSamplerParameterIivEXT(II[II)V"/>
-		<method name="glSamplerParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glSamplerParameterIuivEXT(II[II)V"/>
-		<method name="glTexBufferEXT(III)V"/>
-		<method name="glTexBufferRangeEXT(IIIII)V"/>
-		<method name="glTexParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameterIivEXT(II[II)V"/>
-		<method name="glTexParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameterIuivEXT(II[II)V"/>
-		<method name="glTexStorage3DMultisampleOES(IIIIIIZ)V"/>
-		<field name="GL_BLEND_ADVANCED_COHERENT_KHR"/>
-		<field name="GL_BUFFER_KHR"/>
-		<field name="GL_CLAMP_TO_BORDER_EXT"/>
-		<field name="GL_COLORBURN_KHR"/>
-		<field name="GL_COLORDODGE_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x10_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x5_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x6_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x8_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_12x10_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_12x12_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_4x4_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_5x4_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_5x5_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_6x5_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_6x6_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_8x5_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_8x6_KHR"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_8x8_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR"/>
-		<field name="GL_CONTEXT_FLAG_DEBUG_BIT_KHR"/>
-		<field name="GL_DARKEN_KHR"/>
-		<field name="GL_DEBUG_CALLBACK_FUNCTION_KHR"/>
-		<field name="GL_DEBUG_CALLBACK_USER_PARAM_KHR"/>
-		<field name="GL_DEBUG_GROUP_STACK_DEPTH_KHR"/>
-		<field name="GL_DEBUG_LOGGED_MESSAGES_KHR"/>
-		<field name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR"/>
-		<field name="GL_DEBUG_OUTPUT_KHR"/>
-		<field name="GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR"/>
-		<field name="GL_DEBUG_SEVERITY_HIGH_KHR"/>
-		<field name="GL_DEBUG_SEVERITY_LOW_KHR"/>
-		<field name="GL_DEBUG_SEVERITY_MEDIUM_KHR"/>
-		<field name="GL_DEBUG_SEVERITY_NOTIFICATION_KHR"/>
-		<field name="GL_DEBUG_SOURCE_API_KHR"/>
-		<field name="GL_DEBUG_SOURCE_APPLICATION_KHR"/>
-		<field name="GL_DEBUG_SOURCE_OTHER_KHR"/>
-		<field name="GL_DEBUG_SOURCE_SHADER_COMPILER_KHR"/>
-		<field name="GL_DEBUG_SOURCE_THIRD_PARTY_KHR"/>
-		<field name="GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR"/>
-		<field name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR"/>
-		<field name="GL_DEBUG_TYPE_ERROR_KHR"/>
-		<field name="GL_DEBUG_TYPE_MARKER_KHR"/>
-		<field name="GL_DEBUG_TYPE_OTHER_KHR"/>
-		<field name="GL_DEBUG_TYPE_PERFORMANCE_KHR"/>
-		<field name="GL_DEBUG_TYPE_POP_GROUP_KHR"/>
-		<field name="GL_DEBUG_TYPE_PORTABILITY_KHR"/>
-		<field name="GL_DEBUG_TYPE_PUSH_GROUP_KHR"/>
-		<field name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR"/>
-		<field name="GL_DECODE_EXT"/>
-		<field name="GL_DIFFERENCE_KHR"/>
-		<field name="GL_EXCLUSION_KHR"/>
-		<field name="GL_FIRST_VERTEX_CONVENTION_EXT"/>
-		<field name="GL_FRACTIONAL_EVEN_EXT"/>
-		<field name="GL_FRACTIONAL_ODD_EXT"/>
-		<field name="GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT"/>
-		<field name="GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT"/>
-		<field name="GL_GEOMETRY_LINKED_INPUT_TYPE_EXT"/>
-		<field name="GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT"/>
-		<field name="GL_GEOMETRY_LINKED_VERTICES_OUT_EXT"/>
-		<field name="GL_GEOMETRY_SHADER_BIT_EXT"/>
-		<field name="GL_GEOMETRY_SHADER_EXT"/>
-		<field name="GL_GEOMETRY_SHADER_INVOCATIONS_EXT"/>
-		<field name="GL_HARDLIGHT_KHR"/>
-		<field name="GL_HSL_COLOR_KHR"/>
-		<field name="GL_HSL_HUE_KHR"/>
-		<field name="GL_HSL_LUMINOSITY_KHR"/>
-		<field name="GL_HSL_SATURATION_KHR"/>
-		<field name="GL_IMAGE_BUFFER_EXT"/>
-		<field name="GL_IMAGE_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_INT_IMAGE_BUFFER_EXT"/>
-		<field name="GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES"/>
-		<field name="GL_INT_SAMPLER_BUFFER_EXT"/>
-		<field name="GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_ISOLINES_EXT"/>
-		<field name="GL_IS_PER_PATCH_EXT"/>
-		<field name="GL_LAST_VERTEX_CONVENTION_EXT"/>
-		<field name="GL_LAYER_PROVOKING_VERTEX_EXT"/>
-		<field name="GL_LIGHTEN_KHR"/>
-		<field name="GL_LINES_ADJACENCY_EXT"/>
-		<field name="GL_LINE_STRIP_ADJACENCY_EXT"/>
-		<field name="GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT"/>
-		<field name="GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT"/>
-		<field name="GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT"/>
-		<field name="GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR"/>
-		<field name="GL_MAX_DEBUG_LOGGED_MESSAGES_KHR"/>
-		<field name="GL_MAX_DEBUG_MESSAGE_LENGTH_KHR"/>
-		<field name="GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES"/>
-		<field name="GL_MAX_FRAMEBUFFER_LAYERS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT"/>
-		<field name="GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT"/>
-		<field name="GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT"/>
-		<field name="GL_MAX_LABEL_LENGTH_KHR"/>
-		<field name="GL_MAX_PATCH_VERTICES_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT"/>
-		<field name="GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT"/>
-		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TESS_GEN_LEVEL_EXT"/>
-		<field name="GL_MAX_TESS_PATCH_COMPONENTS_EXT"/>
-		<field name="GL_MAX_TEXTURE_BUFFER_SIZE_EXT"/>
-		<field name="GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES"/>
-		<field name="GL_MIN_SAMPLE_SHADING_VALUE_OES"/>
-		<field name="GL_MULTIPLY_KHR"/>
-		<field name="GL_OVERLAY_KHR"/>
-		<field name="GL_PATCHES_EXT"/>
-		<field name="GL_PATCH_VERTICES_EXT"/>
-		<field name="GL_PRIMITIVES_GENERATED_EXT"/>
-		<field name="GL_PRIMITIVE_BOUNDING_BOX_EXT"/>
-		<field name="GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"/>
-		<field name="GL_PROGRAM_KHR"/>
-		<field name="GL_QUADS_EXT"/>
-		<field name="GL_QUERY_KHR"/>
-		<field name="GL_REFERENCED_BY_GEOMETRY_SHADER_EXT"/>
-		<field name="GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT"/>
-		<field name="GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT"/>
-		<field name="GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES"/>
-		<field name="GL_SAMPLER_BUFFER_EXT"/>
-		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT"/>
-		<field name="GL_SAMPLER_KHR"/>
-		<field name="GL_SAMPLE_SHADING_OES"/>
-		<field name="GL_SCREEN_KHR"/>
-		<field name="GL_SHADER_KHR"/>
-		<field name="GL_SKIP_DECODE_EXT"/>
-		<field name="GL_SOFTLIGHT_KHR"/>
-		<field name="GL_STACK_OVERFLOW_KHR"/>
-		<field name="GL_STACK_UNDERFLOW_KHR"/>
-		<field name="GL_STENCIL_INDEX8_OES"/>
-		<field name="GL_STENCIL_INDEX_OES"/>
-		<field name="GL_TESS_CONTROL_OUTPUT_VERTICES_EXT"/>
-		<field name="GL_TESS_CONTROL_SHADER_BIT_EXT"/>
-		<field name="GL_TESS_CONTROL_SHADER_EXT"/>
-		<field name="GL_TESS_EVALUATION_SHADER_BIT_EXT"/>
-		<field name="GL_TESS_EVALUATION_SHADER_EXT"/>
-		<field name="GL_TESS_GEN_MODE_EXT"/>
-		<field name="GL_TESS_GEN_POINT_MODE_EXT"/>
-		<field name="GL_TESS_GEN_SPACING_EXT"/>
-		<field name="GL_TESS_GEN_VERTEX_ORDER_EXT"/>
-		<field name="GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES"/>
-		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES"/>
-		<field name="GL_TEXTURE_BINDING_BUFFER_EXT"/>
-		<field name="GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_TEXTURE_BORDER_COLOR_EXT"/>
-		<field name="GL_TEXTURE_BUFFER_BINDING_EXT"/>
-		<field name="GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT"/>
-		<field name="GL_TEXTURE_BUFFER_EXT"/>
-		<field name="GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT"/>
-		<field name="GL_TEXTURE_BUFFER_OFFSET_EXT"/>
-		<field name="GL_TEXTURE_BUFFER_SIZE_EXT"/>
-		<field name="GL_TEXTURE_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_TEXTURE_SRGB_DECODE_EXT"/>
-		<field name="GL_TRIANGLES_ADJACENCY_EXT"/>
-		<field name="GL_TRIANGLE_STRIP_ADJACENCY_EXT"/>
-		<field name="GL_UNDEFINED_VERTEX_EXT"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_BUFFER_EXT"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT"/>
-		<field name="GL_VERTEX_ARRAY_KHR"/>
-	</class>
-	<class name="android/opengl/GLES31Ext$DebugProcKHR" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="onMessage(IIIILjava/lang/String;)V"/>
-	</class>
-	<class name="android/opengl/GLES32" since="24">
-		<extends name="android/opengl/GLES31"/>
-		<method name="&lt;init>()V"/>
-		<method name="glBlendBarrier()V"/>
-		<method name="glBlendEquationSeparatei(III)V"/>
-		<method name="glBlendEquationi(II)V"/>
-		<method name="glBlendFuncSeparatei(IIIII)V"/>
-		<method name="glBlendFunci(III)V"/>
-		<method name="glColorMaski(IZZZZ)V"/>
-		<method name="glCopyImageSubData(IIIIIIIIIIIIIII)V"/>
-		<method name="glDebugMessageCallback(Landroid/opengl/GLES32$DebugProc;)V"/>
-		<method name="glDebugMessageControl(IIIILjava/nio/IntBuffer;Z)V"/>
-		<method name="glDebugMessageControl(IIII[IIZ)V"/>
-		<method name="glDebugMessageInsert(IIIIILjava/lang/String;)V"/>
-		<method name="glDisablei(II)V"/>
-		<method name="glDrawElementsBaseVertex(IIILjava/nio/Buffer;I)V"/>
-		<method name="glDrawElementsInstancedBaseVertex(IIIIII)V"/>
-		<method name="glDrawElementsInstancedBaseVertex(IIILjava/nio/Buffer;II)V"/>
-		<method name="glDrawRangeElementsBaseVertex(IIIIILjava/nio/Buffer;I)V"/>
-		<method name="glEnablei(II)V"/>
-		<method name="glFramebufferTexture(IIII)V"/>
-		<method name="glGetDebugMessageLog(II[II[II[II[II[II[BI)I"/>
-		<method name="glGetDebugMessageLog(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;"/>
-		<method name="glGetDebugMessageLog(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I"/>
-		<method name="glGetDebugMessageLog(I[II[II[II[II)[Ljava/lang/String;"/>
-		<method name="glGetGraphicsResetStatus()I"/>
-		<method name="glGetObjectLabel(II)Ljava/lang/String;"/>
-		<method name="glGetObjectPtrLabel(J)Ljava/lang/String;"/>
-		<method name="glGetPointerv(I)J"/>
-		<method name="glGetSamplerParameterIiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetSamplerParameterIiv(II[II)V"/>
-		<method name="glGetSamplerParameterIuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetSamplerParameterIuiv(II[II)V"/>
-		<method name="glGetTexParameterIiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameterIiv(II[II)V"/>
-		<method name="glGetTexParameterIuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameterIuiv(II[II)V"/>
-		<method name="glGetnUniformfv(IIILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetnUniformfv(III[FI)V"/>
-		<method name="glGetnUniformiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetnUniformiv(III[II)V"/>
-		<method name="glGetnUniformuiv(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetnUniformuiv(III[II)V"/>
-		<method name="glIsEnabledi(II)Z"/>
-		<method name="glMinSampleShading(F)V"/>
-		<method name="glObjectLabel(IIILjava/lang/String;)V"/>
-		<method name="glObjectPtrLabel(JLjava/lang/String;)V"/>
-		<method name="glPatchParameteri(II)V"/>
-		<method name="glPopDebugGroup()V"/>
-		<method name="glPrimitiveBoundingBox(FFFFFFFF)V"/>
-		<method name="glPushDebugGroup(IIILjava/lang/String;)V"/>
-		<method name="glReadnPixels(IIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glSamplerParameterIiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glSamplerParameterIiv(II[II)V"/>
-		<method name="glSamplerParameterIuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glSamplerParameterIuiv(II[II)V"/>
-		<method name="glTexBuffer(III)V"/>
-		<method name="glTexBufferRange(IIIII)V"/>
-		<method name="glTexParameterIiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameterIiv(II[II)V"/>
-		<method name="glTexParameterIuiv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameterIuiv(II[II)V"/>
-		<method name="glTexStorage3DMultisample(IIIIIIZ)V"/>
-		<field name="GL_BUFFER"/>
-		<field name="GL_CLAMP_TO_BORDER"/>
-		<field name="GL_COLORBURN"/>
-		<field name="GL_COLORDODGE"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x10"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x5"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x6"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_10x8"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_12x10"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_12x12"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_4x4"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_5x4"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_5x5"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_6x5"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_6x6"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_8x5"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_8x6"/>
-		<field name="GL_COMPRESSED_RGBA_ASTC_8x8"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6"/>
-		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8"/>
-		<field name="GL_CONTEXT_FLAGS"/>
-		<field name="GL_CONTEXT_FLAG_DEBUG_BIT"/>
-		<field name="GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT"/>
-		<field name="GL_CONTEXT_LOST"/>
-		<field name="GL_DARKEN"/>
-		<field name="GL_DEBUG_CALLBACK_FUNCTION"/>
-		<field name="GL_DEBUG_CALLBACK_USER_PARAM"/>
-		<field name="GL_DEBUG_GROUP_STACK_DEPTH"/>
-		<field name="GL_DEBUG_LOGGED_MESSAGES"/>
-		<field name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH"/>
-		<field name="GL_DEBUG_OUTPUT"/>
-		<field name="GL_DEBUG_OUTPUT_SYNCHRONOUS"/>
-		<field name="GL_DEBUG_SEVERITY_HIGH"/>
-		<field name="GL_DEBUG_SEVERITY_LOW"/>
-		<field name="GL_DEBUG_SEVERITY_MEDIUM"/>
-		<field name="GL_DEBUG_SEVERITY_NOTIFICATION"/>
-		<field name="GL_DEBUG_SOURCE_API"/>
-		<field name="GL_DEBUG_SOURCE_APPLICATION"/>
-		<field name="GL_DEBUG_SOURCE_OTHER"/>
-		<field name="GL_DEBUG_SOURCE_SHADER_COMPILER"/>
-		<field name="GL_DEBUG_SOURCE_THIRD_PARTY"/>
-		<field name="GL_DEBUG_SOURCE_WINDOW_SYSTEM"/>
-		<field name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"/>
-		<field name="GL_DEBUG_TYPE_ERROR"/>
-		<field name="GL_DEBUG_TYPE_MARKER"/>
-		<field name="GL_DEBUG_TYPE_OTHER"/>
-		<field name="GL_DEBUG_TYPE_PERFORMANCE"/>
-		<field name="GL_DEBUG_TYPE_POP_GROUP"/>
-		<field name="GL_DEBUG_TYPE_PORTABILITY"/>
-		<field name="GL_DEBUG_TYPE_PUSH_GROUP"/>
-		<field name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"/>
-		<field name="GL_DIFFERENCE"/>
-		<field name="GL_EXCLUSION"/>
-		<field name="GL_FIRST_VERTEX_CONVENTION"/>
-		<field name="GL_FRACTIONAL_EVEN"/>
-		<field name="GL_FRACTIONAL_ODD"/>
-		<field name="GL_FRAGMENT_INTERPOLATION_OFFSET_BITS"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_LAYERED"/>
-		<field name="GL_FRAMEBUFFER_DEFAULT_LAYERS"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS"/>
-		<field name="GL_GEOMETRY_INPUT_TYPE"/>
-		<field name="GL_GEOMETRY_OUTPUT_TYPE"/>
-		<field name="GL_GEOMETRY_SHADER"/>
-		<field name="GL_GEOMETRY_SHADER_BIT"/>
-		<field name="GL_GEOMETRY_SHADER_INVOCATIONS"/>
-		<field name="GL_GEOMETRY_VERTICES_OUT"/>
-		<field name="GL_GUILTY_CONTEXT_RESET"/>
-		<field name="GL_HARDLIGHT"/>
-		<field name="GL_HSL_COLOR"/>
-		<field name="GL_HSL_HUE"/>
-		<field name="GL_HSL_LUMINOSITY"/>
-		<field name="GL_HSL_SATURATION"/>
-		<field name="GL_IMAGE_BUFFER"/>
-		<field name="GL_IMAGE_CUBE_MAP_ARRAY"/>
-		<field name="GL_INNOCENT_CONTEXT_RESET"/>
-		<field name="GL_INT_IMAGE_BUFFER"/>
-		<field name="GL_INT_IMAGE_CUBE_MAP_ARRAY"/>
-		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY"/>
-		<field name="GL_INT_SAMPLER_BUFFER"/>
-		<field name="GL_INT_SAMPLER_CUBE_MAP_ARRAY"/>
-		<field name="GL_ISOLINES"/>
-		<field name="GL_IS_PER_PATCH"/>
-		<field name="GL_LAST_VERTEX_CONVENTION"/>
-		<field name="GL_LAYER_PROVOKING_VERTEX"/>
-		<field name="GL_LIGHTEN"/>
-		<field name="GL_LINES_ADJACENCY"/>
-		<field name="GL_LINE_STRIP_ADJACENCY"/>
-		<field name="GL_LOSE_CONTEXT_ON_RESET"/>
-		<field name="GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_DEBUG_GROUP_STACK_DEPTH"/>
-		<field name="GL_MAX_DEBUG_LOGGED_MESSAGES"/>
-		<field name="GL_MAX_DEBUG_MESSAGE_LENGTH"/>
-		<field name="GL_MAX_FRAGMENT_INTERPOLATION_OFFSET"/>
-		<field name="GL_MAX_FRAMEBUFFER_LAYERS"/>
-		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTERS"/>
-		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_MAX_GEOMETRY_IMAGE_UNIFORMS"/>
-		<field name="GL_MAX_GEOMETRY_INPUT_COMPONENTS"/>
-		<field name="GL_MAX_GEOMETRY_OUTPUT_COMPONENTS"/>
-		<field name="GL_MAX_GEOMETRY_OUTPUT_VERTICES"/>
-		<field name="GL_MAX_GEOMETRY_SHADER_INVOCATIONS"/>
-		<field name="GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS"/>
-		<field name="GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS"/>
-		<field name="GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS"/>
-		<field name="GL_MAX_GEOMETRY_UNIFORM_BLOCKS"/>
-		<field name="GL_MAX_GEOMETRY_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_LABEL_LENGTH"/>
-		<field name="GL_MAX_PATCH_VERTICES"/>
-		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS"/>
-		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS"/>
-		<field name="GL_MAX_TESS_CONTROL_INPUT_COMPONENTS"/>
-		<field name="GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS"/>
-		<field name="GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS"/>
-		<field name="GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS"/>
-		<field name="GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS"/>
-		<field name="GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS"/>
-		<field name="GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS"/>
-		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS"/>
-		<field name="GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS"/>
-		<field name="GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS"/>
-		<field name="GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS"/>
-		<field name="GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS"/>
-		<field name="GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS"/>
-		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS"/>
-		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS"/>
-		<field name="GL_MAX_TESS_GEN_LEVEL"/>
-		<field name="GL_MAX_TESS_PATCH_COMPONENTS"/>
-		<field name="GL_MAX_TEXTURE_BUFFER_SIZE"/>
-		<field name="GL_MIN_FRAGMENT_INTERPOLATION_OFFSET"/>
-		<field name="GL_MIN_SAMPLE_SHADING_VALUE"/>
-		<field name="GL_MULTIPLY"/>
-		<field name="GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY"/>
-		<field name="GL_MULTISAMPLE_LINE_WIDTH_RANGE"/>
-		<field name="GL_NO_RESET_NOTIFICATION"/>
-		<field name="GL_OVERLAY"/>
-		<field name="GL_PATCHES"/>
-		<field name="GL_PATCH_VERTICES"/>
-		<field name="GL_PRIMITIVES_GENERATED"/>
-		<field name="GL_PRIMITIVE_BOUNDING_BOX"/>
-		<field name="GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"/>
-		<field name="GL_PROGRAM"/>
-		<field name="GL_PROGRAM_PIPELINE"/>
-		<field name="GL_QUADS"/>
-		<field name="GL_QUERY"/>
-		<field name="GL_REFERENCED_BY_GEOMETRY_SHADER"/>
-		<field name="GL_REFERENCED_BY_TESS_CONTROL_SHADER"/>
-		<field name="GL_REFERENCED_BY_TESS_EVALUATION_SHADER"/>
-		<field name="GL_RESET_NOTIFICATION_STRATEGY"/>
-		<field name="GL_SAMPLER"/>
-		<field name="GL_SAMPLER_2D_MULTISAMPLE_ARRAY"/>
-		<field name="GL_SAMPLER_BUFFER"/>
-		<field name="GL_SAMPLER_CUBE_MAP_ARRAY"/>
-		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW"/>
-		<field name="GL_SAMPLE_SHADING"/>
-		<field name="GL_SCREEN"/>
-		<field name="GL_SHADER"/>
-		<field name="GL_SOFTLIGHT"/>
-		<field name="GL_STACK_OVERFLOW"/>
-		<field name="GL_STACK_UNDERFLOW"/>
-		<field name="GL_TESS_CONTROL_OUTPUT_VERTICES"/>
-		<field name="GL_TESS_CONTROL_SHADER"/>
-		<field name="GL_TESS_CONTROL_SHADER_BIT"/>
-		<field name="GL_TESS_EVALUATION_SHADER"/>
-		<field name="GL_TESS_EVALUATION_SHADER_BIT"/>
-		<field name="GL_TESS_GEN_MODE"/>
-		<field name="GL_TESS_GEN_POINT_MODE"/>
-		<field name="GL_TESS_GEN_SPACING"/>
-		<field name="GL_TESS_GEN_VERTEX_ORDER"/>
-		<field name="GL_TEXTURE_2D_MULTISAMPLE_ARRAY"/>
-		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY"/>
-		<field name="GL_TEXTURE_BINDING_BUFFER"/>
-		<field name="GL_TEXTURE_BINDING_CUBE_MAP_ARRAY"/>
-		<field name="GL_TEXTURE_BORDER_COLOR"/>
-		<field name="GL_TEXTURE_BUFFER"/>
-		<field name="GL_TEXTURE_BUFFER_BINDING"/>
-		<field name="GL_TEXTURE_BUFFER_DATA_STORE_BINDING"/>
-		<field name="GL_TEXTURE_BUFFER_OFFSET"/>
-		<field name="GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT"/>
-		<field name="GL_TEXTURE_BUFFER_SIZE"/>
-		<field name="GL_TEXTURE_CUBE_MAP_ARRAY"/>
-		<field name="GL_TRIANGLES_ADJACENCY"/>
-		<field name="GL_TRIANGLE_STRIP_ADJACENCY"/>
-		<field name="GL_UNDEFINED_VERTEX"/>
-		<field name="GL_UNKNOWN_CONTEXT_RESET"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_BUFFER"/>
-		<field name="GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_BUFFER"/>
-		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY"/>
-		<field name="GL_VERTEX_ARRAY"/>
-	</class>
-	<class name="android/opengl/GLES32$DebugProc" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onMessage(IIIILjava/lang/String;)V"/>
-	</class>
-	<class name="android/opengl/GLException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-	</class>
-	<class name="android/opengl/GLSurfaceView" since="3">
-		<extends name="android/view/SurfaceView"/>
-		<implements name="android/view/SurfaceHolder$Callback" removed="24"/>
-		<implements name="android/view/SurfaceHolder$Callback2" since="24"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="getDebugFlags()I"/>
-		<method name="getPreserveEGLContextOnPause()Z" since="11"/>
-		<method name="getRenderMode()I"/>
-		<method name="onPause()V"/>
-		<method name="onResume()V"/>
-		<method name="queueEvent(Ljava/lang/Runnable;)V"/>
-		<method name="requestRender()V"/>
-		<method name="setDebugFlags(I)V"/>
-		<method name="setEGLConfigChooser(IIIIII)V"/>
-		<method name="setEGLConfigChooser(Landroid/opengl/GLSurfaceView$EGLConfigChooser;)V"/>
-		<method name="setEGLConfigChooser(Z)V"/>
-		<method name="setEGLContextClientVersion(I)V" since="8"/>
-		<method name="setEGLContextFactory(Landroid/opengl/GLSurfaceView$EGLContextFactory;)V" since="5"/>
-		<method name="setEGLWindowSurfaceFactory(Landroid/opengl/GLSurfaceView$EGLWindowSurfaceFactory;)V" since="5"/>
-		<method name="setGLWrapper(Landroid/opengl/GLSurfaceView$GLWrapper;)V"/>
-		<method name="setPreserveEGLContextOnPause(Z)V" since="11"/>
-		<method name="setRenderMode(I)V"/>
-		<method name="setRenderer(Landroid/opengl/GLSurfaceView$Renderer;)V"/>
-		<field name="DEBUG_CHECK_GL_ERROR"/>
-		<field name="DEBUG_LOG_GL_CALLS"/>
-		<field name="RENDERMODE_CONTINUOUSLY"/>
-		<field name="RENDERMODE_WHEN_DIRTY"/>
-	</class>
-	<class name="android/opengl/GLSurfaceView$EGLConfigChooser" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="chooseConfig(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;)Ljavax/microedition/khronos/egl/EGLConfig;"/>
-	</class>
-	<class name="android/opengl/GLSurfaceView$EGLContextFactory" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="createContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;)Ljavax/microedition/khronos/egl/EGLContext;"/>
-		<method name="destroyContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)V"/>
-	</class>
-	<class name="android/opengl/GLSurfaceView$EGLWindowSurfaceFactory" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="createWindowSurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLSurface;"/>
-		<method name="destroySurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)V"/>
-	</class>
-	<class name="android/opengl/GLSurfaceView$GLWrapper" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="wrap(Ljavax/microedition/khronos/opengles/GL;)Ljavax/microedition/khronos/opengles/GL;"/>
-	</class>
-	<class name="android/opengl/GLSurfaceView$Renderer" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onDrawFrame(Ljavax/microedition/khronos/opengles/GL10;)V"/>
-		<method name="onSurfaceChanged(Ljavax/microedition/khronos/opengles/GL10;II)V"/>
-		<method name="onSurfaceCreated(Ljavax/microedition/khronos/opengles/GL10;Ljavax/microedition/khronos/egl/EGLConfig;)V"/>
-	</class>
-	<class name="android/opengl/GLU" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="gluErrorString(I)Ljava/lang/String;"/>
-		<method name="gluLookAt(Ljavax/microedition/khronos/opengles/GL10;FFFFFFFFF)V"/>
-		<method name="gluOrtho2D(Ljavax/microedition/khronos/opengles/GL10;FFFF)V"/>
-		<method name="gluPerspective(Ljavax/microedition/khronos/opengles/GL10;FFFF)V"/>
-		<method name="gluProject(FFF[FI[FI[II[FI)I"/>
-		<method name="gluUnProject(FFF[FI[FI[II[FI)I"/>
-	</class>
-	<class name="android/opengl/GLUtils" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEGLErrorString(I)Ljava/lang/String;" since="14"/>
-		<method name="getInternalFormat(Landroid/graphics/Bitmap;)I"/>
-		<method name="getType(Landroid/graphics/Bitmap;)I"/>
-		<method name="texImage2D(IIILandroid/graphics/Bitmap;I)V"/>
-		<method name="texImage2D(IIILandroid/graphics/Bitmap;II)V"/>
-		<method name="texImage2D(IILandroid/graphics/Bitmap;I)V"/>
-		<method name="texSubImage2D(IIIILandroid/graphics/Bitmap;)V"/>
-		<method name="texSubImage2D(IIIILandroid/graphics/Bitmap;II)V"/>
-	</class>
-	<class name="android/opengl/Matrix" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="19"/>
-		<method name="frustumM([FIFFFFFF)V"/>
-		<method name="invertM([FI[FI)Z"/>
-		<method name="length(FFF)F"/>
-		<method name="multiplyMM([FI[FI[FI)V"/>
-		<method name="multiplyMV([FI[FI[FI)V"/>
-		<method name="orthoM([FIFFFFFF)V"/>
-		<method name="perspectiveM([FIFFFF)V" since="14"/>
-		<method name="rotateM([FIFFFF)V"/>
-		<method name="rotateM([FI[FIFFFF)V"/>
-		<method name="scaleM([FIFFF)V"/>
-		<method name="scaleM([FI[FIFFF)V"/>
-		<method name="setIdentityM([FI)V"/>
-		<method name="setLookAtM([FIFFFFFFFFF)V" since="8"/>
-		<method name="setRotateEulerM([FIFFF)V"/>
-		<method name="setRotateM([FIFFFF)V"/>
-		<method name="translateM([FIFFF)V"/>
-		<method name="translateM([FI[FIFFF)V"/>
-		<method name="transposeM([FI[FI)V"/>
-	</class>
-	<class name="android/opengl/Visibility" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="computeBoundingSphere([FII[FI)V"/>
-		<method name="frustumCullSpheres([FI[FII[III)I"/>
-		<method name="visibilityTest([FI[FI[CII)I"/>
-	</class>
-	<class name="android/os/AsyncTask" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel(Z)Z"/>
-		<method name="doInBackground([Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="execute(Ljava/lang/Runnable;)V" since="11"/>
-		<method name="execute([Ljava/lang/Object;)Landroid/os/AsyncTask;"/>
-		<method name="executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/os/AsyncTask;" since="11"/>
-		<method name="get()Ljava/lang/Object;"/>
-		<method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-		<method name="getStatus()Landroid/os/AsyncTask$Status;"/>
-		<method name="isCancelled()Z"/>
-		<method name="onCancelled()V"/>
-		<method name="onCancelled(Ljava/lang/Object;)V" since="11"/>
-		<method name="onPostExecute(Ljava/lang/Object;)V"/>
-		<method name="onPreExecute()V"/>
-		<method name="onProgressUpdate([Ljava/lang/Object;)V"/>
-		<method name="publishProgress([Ljava/lang/Object;)V"/>
-		<field name="SERIAL_EXECUTOR" since="11"/>
-		<field name="THREAD_POOL_EXECUTOR" since="11"/>
-	</class>
-	<class name="android/os/AsyncTask$Status" since="3">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/os/AsyncTask$Status;"/>
-		<method name="values()[Landroid/os/AsyncTask$Status;"/>
-		<field name="FINISHED"/>
-		<field name="PENDING"/>
-		<field name="RUNNING"/>
-	</class>
-	<class name="android/os/BadParcelableException" since="1">
-		<extends name="android/util/AndroidRuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/os/BaseBundle" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clear()V"/>
-		<method name="containsKey(Ljava/lang/String;)Z"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getBoolean(Ljava/lang/String;)Z" since="22"/>
-		<method name="getBoolean(Ljava/lang/String;Z)Z" since="22"/>
-		<method name="getBooleanArray(Ljava/lang/String;)[Z" since="22"/>
-		<method name="getDouble(Ljava/lang/String;)D"/>
-		<method name="getDouble(Ljava/lang/String;D)D"/>
-		<method name="getDoubleArray(Ljava/lang/String;)[D"/>
-		<method name="getInt(Ljava/lang/String;)I"/>
-		<method name="getInt(Ljava/lang/String;I)I"/>
-		<method name="getIntArray(Ljava/lang/String;)[I"/>
-		<method name="getLong(Ljava/lang/String;)J"/>
-		<method name="getLong(Ljava/lang/String;J)J"/>
-		<method name="getLongArray(Ljava/lang/String;)[J"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="isEmpty()Z"/>
-		<method name="keySet()Ljava/util/Set;"/>
-		<method name="putAll(Landroid/os/PersistableBundle;)V"/>
-		<method name="putBoolean(Ljava/lang/String;Z)V" since="22"/>
-		<method name="putBooleanArray(Ljava/lang/String;[Z)V" since="22"/>
-		<method name="putDouble(Ljava/lang/String;D)V"/>
-		<method name="putDoubleArray(Ljava/lang/String;[D)V"/>
-		<method name="putInt(Ljava/lang/String;I)V"/>
-		<method name="putIntArray(Ljava/lang/String;[I)V"/>
-		<method name="putLong(Ljava/lang/String;J)V"/>
-		<method name="putLongArray(Ljava/lang/String;[J)V"/>
-		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="putStringArray(Ljava/lang/String;[Ljava/lang/String;)V"/>
-		<method name="remove(Ljava/lang/String;)V"/>
-		<method name="size()I"/>
-	</class>
-	<class name="android/os/BatteryManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="computeChargeTimeRemaining()J" since="28"/>
-		<method name="getIntProperty(I)I" since="21"/>
-		<method name="getLongProperty(I)J" since="21"/>
-		<method name="isCharging()Z" since="23"/>
-		<field name="ACTION_CHARGING" since="23"/>
-		<field name="ACTION_DISCHARGING" since="23"/>
-		<field name="BATTERY_HEALTH_COLD" since="11"/>
-		<field name="BATTERY_HEALTH_DEAD"/>
-		<field name="BATTERY_HEALTH_GOOD"/>
-		<field name="BATTERY_HEALTH_OVERHEAT"/>
-		<field name="BATTERY_HEALTH_OVER_VOLTAGE"/>
-		<field name="BATTERY_HEALTH_UNKNOWN"/>
-		<field name="BATTERY_HEALTH_UNSPECIFIED_FAILURE"/>
-		<field name="BATTERY_PLUGGED_AC"/>
-		<field name="BATTERY_PLUGGED_USB"/>
-		<field name="BATTERY_PLUGGED_WIRELESS" since="17"/>
-		<field name="BATTERY_PROPERTY_CAPACITY" since="21"/>
-		<field name="BATTERY_PROPERTY_CHARGE_COUNTER" since="21"/>
-		<field name="BATTERY_PROPERTY_CURRENT_AVERAGE" since="21"/>
-		<field name="BATTERY_PROPERTY_CURRENT_NOW" since="21"/>
-		<field name="BATTERY_PROPERTY_ENERGY_COUNTER" since="21"/>
-		<field name="BATTERY_PROPERTY_STATUS" since="26"/>
-		<field name="BATTERY_STATUS_CHARGING"/>
-		<field name="BATTERY_STATUS_DISCHARGING"/>
-		<field name="BATTERY_STATUS_FULL"/>
-		<field name="BATTERY_STATUS_NOT_CHARGING"/>
-		<field name="BATTERY_STATUS_UNKNOWN"/>
-		<field name="EXTRA_BATTERY_LOW" since="28"/>
-		<field name="EXTRA_HEALTH" since="5"/>
-		<field name="EXTRA_ICON_SMALL" since="5"/>
-		<field name="EXTRA_LEVEL" since="5"/>
-		<field name="EXTRA_PLUGGED" since="5"/>
-		<field name="EXTRA_PRESENT" since="5"/>
-		<field name="EXTRA_SCALE" since="5"/>
-		<field name="EXTRA_STATUS" since="5"/>
-		<field name="EXTRA_TECHNOLOGY" since="5"/>
-		<field name="EXTRA_TEMPERATURE" since="5"/>
-		<field name="EXTRA_VOLTAGE" since="5"/>
-	</class>
-	<class name="android/os/Binder" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/IBinder"/>
-		<method name="&lt;init>()V"/>
-		<method name="attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V"/>
-		<method name="clearCallingIdentity()J"/>
-		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
-		<method name="flushPendingCommands()V"/>
-		<method name="getCallingPid()I"/>
-		<method name="getCallingUid()I"/>
-		<method name="getCallingUserHandle()Landroid/os/UserHandle;" since="17"/>
-		<method name="joinThreadPool()V"/>
-		<method name="onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z"/>
-		<method name="restoreCallingIdentity(J)V"/>
-	</class>
-	<class name="android/os/Build" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getRadioVersion()Ljava/lang/String;" since="14"/>
-		<method name="getSerial()Ljava/lang/String;" since="26"/>
-		<field name="BOARD"/>
-		<field name="BOOTLOADER" since="8"/>
-		<field name="BRAND"/>
-		<field name="CPU_ABI" since="4" deprecated="21"/>
-		<field name="CPU_ABI2" since="8" deprecated="21"/>
-		<field name="DEVICE"/>
-		<field name="DISPLAY" since="3"/>
-		<field name="FINGERPRINT"/>
-		<field name="HARDWARE" since="8"/>
-		<field name="HOST"/>
-		<field name="ID"/>
-		<field name="MANUFACTURER" since="4"/>
-		<field name="MODEL"/>
-		<field name="PRODUCT"/>
-		<field name="RADIO" since="8" deprecated="16"/>
-		<field name="SERIAL" since="9" deprecated="26"/>
-		<field name="SUPPORTED_32_BIT_ABIS" since="21"/>
-		<field name="SUPPORTED_64_BIT_ABIS" since="21"/>
-		<field name="SUPPORTED_ABIS" since="21"/>
-		<field name="TAGS"/>
-		<field name="TIME"/>
-		<field name="TYPE"/>
-		<field name="UNKNOWN" since="8"/>
-		<field name="USER"/>
-	</class>
-	<class name="android/os/Build$VERSION" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BASE_OS" since="23"/>
-		<field name="CODENAME" since="4"/>
-		<field name="INCREMENTAL"/>
-		<field name="PREVIEW_SDK_INT" since="23"/>
-		<field name="RELEASE"/>
-		<field name="SDK" deprecated="16"/>
-		<field name="SDK_INT" since="4"/>
-		<field name="SECURITY_PATCH" since="23"/>
-	</class>
-	<class name="android/os/Build$VERSION_CODES" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BASE"/>
-		<field name="BASE_1_1"/>
-		<field name="CUPCAKE"/>
-		<field name="CUR_DEVELOPMENT"/>
-		<field name="DONUT"/>
-		<field name="ECLAIR" since="5"/>
-		<field name="ECLAIR_0_1" since="6"/>
-		<field name="ECLAIR_MR1" since="7"/>
-		<field name="FROYO" since="8"/>
-		<field name="GINGERBREAD" since="9"/>
-		<field name="GINGERBREAD_MR1" since="10"/>
-		<field name="HONEYCOMB" since="11"/>
-		<field name="HONEYCOMB_MR1" since="12"/>
-		<field name="HONEYCOMB_MR2" since="13"/>
-		<field name="ICE_CREAM_SANDWICH" since="14"/>
-		<field name="ICE_CREAM_SANDWICH_MR1" since="15"/>
-		<field name="JELLY_BEAN" since="16"/>
-		<field name="JELLY_BEAN_MR1" since="17"/>
-		<field name="JELLY_BEAN_MR2" since="18"/>
-		<field name="KITKAT" since="19"/>
-		<field name="KITKAT_WATCH" since="20"/>
-		<field name="L" since="21" removed="22"/>
-		<field name="LOLLIPOP" since="21"/>
-		<field name="LOLLIPOP_MR1" since="22"/>
-		<field name="M" since="23"/>
-		<field name="N" since="24"/>
-		<field name="N_MR1" since="25"/>
-		<field name="O" since="26"/>
-		<field name="O_MR1" since="27"/>
-		<field name="P" since="28"/>
-	</class>
-	<class name="android/os/Bundle" since="1">
-		<extends name="android/os/BaseBundle" since="21"/>
-		<extends name="java/lang/Object" removed="21"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/os/Bundle;)V"/>
-		<method name="&lt;init>(Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="&lt;init>(Ljava/lang/ClassLoader;)V"/>
-		<method name="clear()V"/>
-		<method name="containsKey(Ljava/lang/String;)Z" removed="21"/>
-		<method name="deepCopy()Landroid/os/Bundle;" since="26"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" removed="21"/>
-		<method name="getBinder(Ljava/lang/String;)Landroid/os/IBinder;" since="18"/>
-		<method name="getBoolean(Ljava/lang/String;)Z" removed="22"/>
-		<method name="getBoolean(Ljava/lang/String;Z)Z" removed="22"/>
-		<method name="getBooleanArray(Ljava/lang/String;)[Z" removed="22"/>
-		<method name="getBundle(Ljava/lang/String;)Landroid/os/Bundle;"/>
-		<method name="getByte(Ljava/lang/String;)B"/>
-		<method name="getByte(Ljava/lang/String;B)Ljava/lang/Byte;"/>
-		<method name="getByteArray(Ljava/lang/String;)[B"/>
-		<method name="getChar(Ljava/lang/String;)C"/>
-		<method name="getChar(Ljava/lang/String;C)C"/>
-		<method name="getCharArray(Ljava/lang/String;)[C"/>
-		<method name="getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;"/>
-		<method name="getCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="12"/>
-		<method name="getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;" since="8"/>
-		<method name="getCharSequenceArrayList(Ljava/lang/String;)Ljava/util/ArrayList;" since="8"/>
-		<method name="getClassLoader()Ljava/lang/ClassLoader;" since="11"/>
-		<method name="getDouble(Ljava/lang/String;)D" removed="21"/>
-		<method name="getDouble(Ljava/lang/String;D)D" removed="21"/>
-		<method name="getDoubleArray(Ljava/lang/String;)[D" removed="21"/>
-		<method name="getFloat(Ljava/lang/String;)F"/>
-		<method name="getFloat(Ljava/lang/String;F)F"/>
-		<method name="getFloatArray(Ljava/lang/String;)[F"/>
-		<method name="getInt(Ljava/lang/String;)I" removed="21"/>
-		<method name="getInt(Ljava/lang/String;I)I" removed="21"/>
-		<method name="getIntArray(Ljava/lang/String;)[I" removed="21"/>
-		<method name="getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="getLong(Ljava/lang/String;)J" removed="21"/>
-		<method name="getLong(Ljava/lang/String;J)J" removed="21"/>
-		<method name="getLongArray(Ljava/lang/String;)[J" removed="21"/>
-		<method name="getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;"/>
-		<method name="getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;"/>
-		<method name="getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="getSerializable(Ljava/lang/String;)Ljava/io/Serializable;"/>
-		<method name="getShort(Ljava/lang/String;)S"/>
-		<method name="getShort(Ljava/lang/String;S)S"/>
-		<method name="getShortArray(Ljava/lang/String;)[S"/>
-		<method name="getSize(Ljava/lang/String;)Landroid/util/Size;" since="21"/>
-		<method name="getSizeF(Ljava/lang/String;)Landroid/util/SizeF;" since="21"/>
-		<method name="getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" removed="21"/>
-		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="12" removed="21"/>
-		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;" removed="21"/>
-		<method name="getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="hasFileDescriptors()Z"/>
-		<method name="isEmpty()Z" removed="21"/>
-		<method name="keySet()Ljava/util/Set;" removed="21"/>
-		<method name="putAll(Landroid/os/Bundle;)V"/>
-		<method name="putBinder(Ljava/lang/String;Landroid/os/IBinder;)V" since="18"/>
-		<method name="putBoolean(Ljava/lang/String;Z)V" removed="22"/>
-		<method name="putBooleanArray(Ljava/lang/String;[Z)V" removed="22"/>
-		<method name="putBundle(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="putByte(Ljava/lang/String;B)V"/>
-		<method name="putByteArray(Ljava/lang/String;[B)V"/>
-		<method name="putChar(Ljava/lang/String;C)V"/>
-		<method name="putCharArray(Ljava/lang/String;[C)V"/>
-		<method name="putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V"/>
-		<method name="putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V" since="8"/>
-		<method name="putCharSequenceArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V" since="8"/>
-		<method name="putDouble(Ljava/lang/String;D)V" removed="21"/>
-		<method name="putDoubleArray(Ljava/lang/String;[D)V" removed="21"/>
-		<method name="putFloat(Ljava/lang/String;F)V"/>
-		<method name="putFloatArray(Ljava/lang/String;[F)V"/>
-		<method name="putInt(Ljava/lang/String;I)V" removed="21"/>
-		<method name="putIntArray(Ljava/lang/String;[I)V" removed="21"/>
-		<method name="putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V"/>
-		<method name="putLong(Ljava/lang/String;J)V" removed="21"/>
-		<method name="putLongArray(Ljava/lang/String;[J)V" removed="21"/>
-		<method name="putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V"/>
-		<method name="putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V"/>
-		<method name="putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V"/>
-		<method name="putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V"/>
-		<method name="putShort(Ljava/lang/String;S)V"/>
-		<method name="putShortArray(Ljava/lang/String;[S)V"/>
-		<method name="putSize(Ljava/lang/String;Landroid/util/Size;)V" since="21"/>
-		<method name="putSizeF(Ljava/lang/String;Landroid/util/SizeF;)V" since="21"/>
-		<method name="putSparseParcelableArray(Ljava/lang/String;Landroid/util/SparseArray;)V"/>
-		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V" removed="21"/>
-		<method name="putStringArray(Ljava/lang/String;[Ljava/lang/String;)V" removed="21"/>
-		<method name="putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<method name="remove(Ljava/lang/String;)V"/>
-		<method name="setClassLoader(Ljava/lang/ClassLoader;)V"/>
-		<method name="size()I" removed="21"/>
-		<field name="CREATOR"/>
-		<field name="EMPTY"/>
-	</class>
-	<class name="android/os/CancellationSignal" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="isCanceled()Z"/>
-		<method name="setOnCancelListener(Landroid/os/CancellationSignal$OnCancelListener;)V"/>
-		<method name="throwIfCanceled()V"/>
-	</class>
-	<class name="android/os/CancellationSignal$OnCancelListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onCancel()V"/>
-	</class>
-	<class name="android/os/ConditionVariable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="block()V"/>
-		<method name="block(J)Z"/>
-		<method name="close()V"/>
-		<method name="open()V"/>
-	</class>
-	<class name="android/os/CountDownTimer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(JJ)V"/>
-		<method name="cancel()V"/>
-		<method name="onFinish()V"/>
-		<method name="onTick(J)V"/>
-		<method name="start()Landroid/os/CountDownTimer;"/>
-	</class>
-	<class name="android/os/CpuUsageInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getActive()J"/>
-		<method name="getTotal()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/DeadObjectException" since="1">
-		<extends name="android/os/RemoteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="23"/>
-	</class>
-	<class name="android/os/DeadSystemException" since="24">
-		<extends name="android/os/DeadObjectException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/Debug" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="attachJvmtiAgent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V" since="28"/>
-		<method name="changeDebugPort(I)V" deprecated="16"/>
-		<method name="dumpHprofData(Ljava/lang/String;)V" since="3"/>
-		<method name="dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;[Ljava/lang/String;)Z" since="8"/>
-		<method name="enableEmulatorTraceOutput()V"/>
-		<method name="getBinderDeathObjectCount()I"/>
-		<method name="getBinderLocalObjectCount()I"/>
-		<method name="getBinderProxyObjectCount()I"/>
-		<method name="getBinderReceivedTransactions()I"/>
-		<method name="getBinderSentTransactions()I"/>
-		<method name="getGlobalAllocCount()I" deprecated="23"/>
-		<method name="getGlobalAllocSize()I" deprecated="23"/>
-		<method name="getGlobalClassInitCount()I" since="8" deprecated="23"/>
-		<method name="getGlobalClassInitTime()I" since="8" deprecated="23"/>
-		<method name="getGlobalExternalAllocCount()I" deprecated="16"/>
-		<method name="getGlobalExternalAllocSize()I" deprecated="16"/>
-		<method name="getGlobalExternalFreedCount()I" deprecated="16"/>
-		<method name="getGlobalExternalFreedSize()I" deprecated="16"/>
-		<method name="getGlobalFreedCount()I" deprecated="23"/>
-		<method name="getGlobalFreedSize()I" deprecated="23"/>
-		<method name="getGlobalGcInvocationCount()I" deprecated="23"/>
-		<method name="getLoadedClassCount()I"/>
-		<method name="getMemoryInfo(Landroid/os/Debug$MemoryInfo;)V"/>
-		<method name="getNativeHeapAllocatedSize()J"/>
-		<method name="getNativeHeapFreeSize()J"/>
-		<method name="getNativeHeapSize()J"/>
-		<method name="getPss()J" since="14"/>
-		<method name="getRuntimeStat(Ljava/lang/String;)Ljava/lang/String;" since="23"/>
-		<method name="getRuntimeStats()Ljava/util/Map;" since="23"/>
-		<method name="getThreadAllocCount()I" deprecated="23"/>
-		<method name="getThreadAllocSize()I" deprecated="23"/>
-		<method name="getThreadExternalAllocCount()I" deprecated="16"/>
-		<method name="getThreadExternalAllocSize()I" deprecated="16"/>
-		<method name="getThreadGcInvocationCount()I" deprecated="23"/>
-		<method name="isDebuggerConnected()Z"/>
-		<method name="printLoadedClasses(I)V"/>
-		<method name="resetAllCounts()V" deprecated="23"/>
-		<method name="resetGlobalAllocCount()V" deprecated="23"/>
-		<method name="resetGlobalAllocSize()V" deprecated="23"/>
-		<method name="resetGlobalClassInitCount()V" since="8" deprecated="23"/>
-		<method name="resetGlobalClassInitTime()V" since="8" deprecated="23"/>
-		<method name="resetGlobalExternalAllocCount()V" deprecated="16"/>
-		<method name="resetGlobalExternalAllocSize()V" deprecated="16"/>
-		<method name="resetGlobalExternalFreedCount()V" deprecated="16"/>
-		<method name="resetGlobalExternalFreedSize()V" deprecated="16"/>
-		<method name="resetGlobalFreedCount()V" deprecated="23"/>
-		<method name="resetGlobalFreedSize()V" deprecated="23"/>
-		<method name="resetGlobalGcInvocationCount()V" deprecated="23"/>
-		<method name="resetThreadAllocCount()V" deprecated="23"/>
-		<method name="resetThreadAllocSize()V" deprecated="23"/>
-		<method name="resetThreadExternalAllocCount()V" deprecated="16"/>
-		<method name="resetThreadExternalAllocSize()V" deprecated="16"/>
-		<method name="resetThreadGcInvocationCount()V" deprecated="23"/>
-		<method name="setAllocationLimit(I)I" deprecated="16"/>
-		<method name="setGlobalAllocationLimit(I)I" deprecated="16"/>
-		<method name="startAllocCounting()V" deprecated="18"/>
-		<method name="startMethodTracing()V"/>
-		<method name="startMethodTracing(Ljava/lang/String;)V"/>
-		<method name="startMethodTracing(Ljava/lang/String;I)V"/>
-		<method name="startMethodTracing(Ljava/lang/String;II)V"/>
-		<method name="startMethodTracingSampling(Ljava/lang/String;II)V" since="21"/>
-		<method name="startNativeTracing()V"/>
-		<method name="stopAllocCounting()V" deprecated="18"/>
-		<method name="stopMethodTracing()V"/>
-		<method name="stopNativeTracing()V"/>
-		<method name="threadCpuTimeNanos()J"/>
-		<method name="waitForDebugger()V"/>
-		<method name="waitingForDebugger()Z"/>
-		<field name="SHOW_CLASSLOADER"/>
-		<field name="SHOW_FULL_DETAIL"/>
-		<field name="SHOW_INITIALIZED"/>
-		<field name="TRACE_COUNT_ALLOCS" deprecated="23"/>
-	</class>
-	<class name="android/os/Debug$InstructionCount" since="1" deprecated="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="collect()Z"/>
-		<method name="globalMethodInvocations()I"/>
-		<method name="globalTotal()I"/>
-		<method name="resetAndStart()Z"/>
-	</class>
-	<class name="android/os/Debug$MemoryInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="5"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMemoryStat(Ljava/lang/String;)Ljava/lang/String;" since="23"/>
-		<method name="getMemoryStats()Ljava/util/Map;" since="23"/>
-		<method name="getOtherLabel(I)Ljava/lang/String;" since="14" removed="19"/>
-		<method name="getOtherPrivateDirty(I)I" since="14" removed="19"/>
-		<method name="getOtherPss(I)I" since="14" removed="19"/>
-		<method name="getOtherSharedDirty(I)I" since="14" removed="19"/>
-		<method name="getTotalPrivateClean()I" since="19"/>
-		<method name="getTotalPrivateDirty()I" since="5"/>
-		<method name="getTotalPss()I" since="5"/>
-		<method name="getTotalSharedClean()I" since="19"/>
-		<method name="getTotalSharedDirty()I" since="5"/>
-		<method name="getTotalSwappablePss()I" since="19"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V" since="5"/>
-		<field name="CREATOR" since="5"/>
-		<field name="dalvikPrivateDirty"/>
-		<field name="dalvikPss"/>
-		<field name="dalvikSharedDirty"/>
-		<field name="nativePrivateDirty"/>
-		<field name="nativePss"/>
-		<field name="nativeSharedDirty"/>
-		<field name="otherPrivateDirty"/>
-		<field name="otherPss"/>
-		<field name="otherSharedDirty"/>
-	</class>
-	<class name="android/os/DropBoxManager" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addData(Ljava/lang/String;[BI)V"/>
-		<method name="addFile(Ljava/lang/String;Ljava/io/File;I)V"/>
-		<method name="addText(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;"/>
-		<method name="isTagEnabled(Ljava/lang/String;)Z"/>
-		<field name="ACTION_DROPBOX_ENTRY_ADDED" since="11"/>
-		<field name="EXTRA_TAG" since="11"/>
-		<field name="EXTRA_TIME" since="11"/>
-		<field name="IS_EMPTY"/>
-		<field name="IS_GZIPPED"/>
-		<field name="IS_TEXT"/>
-	</class>
-	<class name="android/os/DropBoxManager$Entry" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/io/Closeable" since="9"/>
-		<method name="&lt;init>(Ljava/lang/String;J)V"/>
-		<method name="&lt;init>(Ljava/lang/String;JLandroid/os/ParcelFileDescriptor;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;JLjava/io/File;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;JLjava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;J[BI)V"/>
-		<method name="close()V"/>
-		<method name="getFlags()I"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getTag()Ljava/lang/String;"/>
-		<method name="getText(I)Ljava/lang/String;"/>
-		<method name="getTimeMillis()J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/Environment" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDataDirectory()Ljava/io/File;"/>
-		<method name="getDownloadCacheDirectory()Ljava/io/File;"/>
-		<method name="getExternalStorageDirectory()Ljava/io/File;"/>
-		<method name="getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File;" since="8"/>
-		<method name="getExternalStorageState()Ljava/lang/String;"/>
-		<method name="getExternalStorageState(Ljava/io/File;)Ljava/lang/String;" since="21"/>
-		<method name="getRootDirectory()Ljava/io/File;"/>
-		<method name="getStorageState(Ljava/io/File;)Ljava/lang/String;" since="19" deprecated="21"/>
-		<method name="isExternalStorageEmulated()Z" since="11"/>
-		<method name="isExternalStorageEmulated(Ljava/io/File;)Z" since="21"/>
-		<method name="isExternalStorageRemovable()Z" since="9"/>
-		<method name="isExternalStorageRemovable(Ljava/io/File;)Z" since="21"/>
-		<field name="DIRECTORY_ALARMS" since="8"/>
-		<field name="DIRECTORY_DCIM" since="8"/>
-		<field name="DIRECTORY_DOCUMENTS" since="19"/>
-		<field name="DIRECTORY_DOWNLOADS" since="8"/>
-		<field name="DIRECTORY_MOVIES" since="8"/>
-		<field name="DIRECTORY_MUSIC" since="8"/>
-		<field name="DIRECTORY_NOTIFICATIONS" since="8"/>
-		<field name="DIRECTORY_PICTURES" since="8"/>
-		<field name="DIRECTORY_PODCASTS" since="8"/>
-		<field name="DIRECTORY_RINGTONES" since="8"/>
-		<field name="MEDIA_BAD_REMOVAL"/>
-		<field name="MEDIA_CHECKING" since="3"/>
-		<field name="MEDIA_EJECTING" since="23"/>
-		<field name="MEDIA_MOUNTED"/>
-		<field name="MEDIA_MOUNTED_READ_ONLY"/>
-		<field name="MEDIA_NOFS" since="3"/>
-		<field name="MEDIA_REMOVED"/>
-		<field name="MEDIA_SHARED"/>
-		<field name="MEDIA_UNKNOWN" since="19"/>
-		<field name="MEDIA_UNMOUNTABLE"/>
-		<field name="MEDIA_UNMOUNTED"/>
-	</class>
-	<class name="android/os/FileObserver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="onEvent(ILjava/lang/String;)V"/>
-		<method name="startWatching()V"/>
-		<method name="stopWatching()V"/>
-		<field name="ACCESS"/>
-		<field name="ALL_EVENTS"/>
-		<field name="ATTRIB"/>
-		<field name="CLOSE_NOWRITE"/>
-		<field name="CLOSE_WRITE"/>
-		<field name="CREATE"/>
-		<field name="DELETE"/>
-		<field name="DELETE_SELF"/>
-		<field name="MODIFY"/>
-		<field name="MOVED_FROM"/>
-		<field name="MOVED_TO"/>
-		<field name="MOVE_SELF"/>
-		<field name="OPEN"/>
-	</class>
-	<class name="android/os/FileUriExposedException" since="24">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/os/Handler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Handler$Callback;)V" since="3"/>
-		<method name="&lt;init>(Landroid/os/Looper;)V"/>
-		<method name="&lt;init>(Landroid/os/Looper;Landroid/os/Handler$Callback;)V" since="3"/>
-		<method name="createAsync(Landroid/os/Looper;)Landroid/os/Handler;" since="28"/>
-		<method name="createAsync(Landroid/os/Looper;Landroid/os/Handler$Callback;)Landroid/os/Handler;" since="28"/>
-		<method name="dispatchMessage(Landroid/os/Message;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getLooper()Landroid/os/Looper;"/>
-		<method name="getMessageName(Landroid/os/Message;)Ljava/lang/String;" since="14"/>
-		<method name="handleMessage(Landroid/os/Message;)V"/>
-		<method name="hasMessages(I)Z"/>
-		<method name="hasMessages(ILjava/lang/Object;)Z"/>
-		<method name="obtainMessage()Landroid/os/Message;"/>
-		<method name="obtainMessage(I)Landroid/os/Message;"/>
-		<method name="obtainMessage(III)Landroid/os/Message;"/>
-		<method name="obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;"/>
-		<method name="obtainMessage(ILjava/lang/Object;)Landroid/os/Message;"/>
-		<method name="post(Ljava/lang/Runnable;)Z"/>
-		<method name="postAtFrontOfQueue(Ljava/lang/Runnable;)Z"/>
-		<method name="postAtTime(Ljava/lang/Runnable;J)Z"/>
-		<method name="postAtTime(Ljava/lang/Runnable;Ljava/lang/Object;J)Z"/>
-		<method name="postDelayed(Ljava/lang/Runnable;J)Z"/>
-		<method name="postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)Z" since="28"/>
-		<method name="removeCallbacks(Ljava/lang/Runnable;)V"/>
-		<method name="removeCallbacks(Ljava/lang/Runnable;Ljava/lang/Object;)V"/>
-		<method name="removeCallbacksAndMessages(Ljava/lang/Object;)V"/>
-		<method name="removeMessages(I)V"/>
-		<method name="removeMessages(ILjava/lang/Object;)V"/>
-		<method name="sendEmptyMessage(I)Z"/>
-		<method name="sendEmptyMessageAtTime(IJ)Z"/>
-		<method name="sendEmptyMessageDelayed(IJ)Z"/>
-		<method name="sendMessage(Landroid/os/Message;)Z"/>
-		<method name="sendMessageAtFrontOfQueue(Landroid/os/Message;)Z"/>
-		<method name="sendMessageAtTime(Landroid/os/Message;J)Z"/>
-		<method name="sendMessageDelayed(Landroid/os/Message;J)Z"/>
-	</class>
-	<class name="android/os/Handler$Callback" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="handleMessage(Landroid/os/Message;)Z"/>
-	</class>
-	<class name="android/os/HandlerThread" since="1">
-		<extends name="java/lang/Thread"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getLooper()Landroid/os/Looper;"/>
-		<method name="getThreadId()I"/>
-		<method name="onLooperPrepared()V"/>
-		<method name="quit()Z" since="5"/>
-		<method name="quitSafely()Z" since="18"/>
-	</class>
-	<class name="android/os/HardwarePropertiesManager" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCpuUsages()[Landroid/os/CpuUsageInfo;"/>
-		<method name="getDeviceTemperatures(II)[F"/>
-		<method name="getFanSpeeds()[F"/>
-		<field name="DEVICE_TEMPERATURE_BATTERY"/>
-		<field name="DEVICE_TEMPERATURE_CPU"/>
-		<field name="DEVICE_TEMPERATURE_GPU"/>
-		<field name="DEVICE_TEMPERATURE_SKIN"/>
-		<field name="TEMPERATURE_CURRENT"/>
-		<field name="TEMPERATURE_SHUTDOWN"/>
-		<field name="TEMPERATURE_THROTTLING"/>
-		<field name="TEMPERATURE_THROTTLING_BELOW_VR_MIN"/>
-		<field name="UNDEFINED_TEMPERATURE"/>
-	</class>
-	<class name="android/os/IBinder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V" since="3"/>
-		<method name="dumpAsync(Ljava/io/FileDescriptor;[Ljava/lang/String;)V" since="13"/>
-		<method name="getInterfaceDescriptor()Ljava/lang/String;"/>
-		<method name="isBinderAlive()Z"/>
-		<method name="linkToDeath(Landroid/os/IBinder$DeathRecipient;I)V"/>
-		<method name="pingBinder()Z"/>
-		<method name="queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;"/>
-		<method name="transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z"/>
-		<method name="unlinkToDeath(Landroid/os/IBinder$DeathRecipient;I)Z"/>
-		<field name="DUMP_TRANSACTION"/>
-		<field name="FIRST_CALL_TRANSACTION"/>
-		<field name="FLAG_ONEWAY"/>
-		<field name="INTERFACE_TRANSACTION"/>
-		<field name="LAST_CALL_TRANSACTION"/>
-		<field name="LIKE_TRANSACTION" since="15"/>
-		<field name="PING_TRANSACTION"/>
-		<field name="TWEET_TRANSACTION" since="13"/>
-	</class>
-	<class name="android/os/IBinder$DeathRecipient" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="binderDied()V"/>
-	</class>
-	<class name="android/os/IInterface" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="asBinder()Landroid/os/IBinder;"/>
-	</class>
-	<class name="android/os/LocaleList" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>([Ljava/util/Locale;)V"/>
-		<method name="forLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;"/>
-		<method name="get(I)Ljava/util/Locale;"/>
-		<method name="getAdjustedDefault()Landroid/os/LocaleList;"/>
-		<method name="getDefault()Landroid/os/LocaleList;"/>
-		<method name="getEmptyLocaleList()Landroid/os/LocaleList;"/>
-		<method name="getFirstMatch([Ljava/lang/String;)Ljava/util/Locale;"/>
-		<method name="indexOf(Ljava/util/Locale;)I"/>
-		<method name="isEmpty()Z"/>
-		<method name="setDefault(Landroid/os/LocaleList;)V"/>
-		<method name="size()I"/>
-		<method name="toLanguageTags()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/Looper" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Z)V" since="29"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getMainLooper()Landroid/os/Looper;"/>
-		<method name="getQueue()Landroid/os/MessageQueue;" since="23"/>
-		<method name="getThread()Ljava/lang/Thread;" since="3"/>
-		<method name="isCurrentThread()Z" since="23"/>
-		<method name="loop()V"/>
-		<method name="myLooper()Landroid/os/Looper;"/>
-		<method name="myQueue()Landroid/os/MessageQueue;"/>
-		<method name="prepare()V"/>
-		<method name="prepareMainLooper()V"/>
-		<method name="quit()V"/>
-		<method name="quitSafely()V" since="18"/>
-		<method name="setMessageLogging(Landroid/util/Printer;)V"/>
-	</class>
-	<class name="android/os/MemoryFile" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="allowPurging(Z)Z" deprecated="27"/>
-		<method name="close()V"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="isPurgingAllowed()Z" deprecated="27"/>
-		<method name="length()I"/>
-		<method name="readBytes([BIII)I"/>
-		<method name="writeBytes([BIII)V"/>
-	</class>
-	<class name="android/os/Message" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="copyFrom(Landroid/os/Message;)V"/>
-		<method name="getCallback()Ljava/lang/Runnable;"/>
-		<method name="getData()Landroid/os/Bundle;"/>
-		<method name="getTarget()Landroid/os/Handler;"/>
-		<method name="getWhen()J"/>
-		<method name="isAsynchronous()Z" since="22"/>
-		<method name="obtain()Landroid/os/Message;"/>
-		<method name="obtain(Landroid/os/Handler;)Landroid/os/Message;"/>
-		<method name="obtain(Landroid/os/Handler;I)Landroid/os/Message;"/>
-		<method name="obtain(Landroid/os/Handler;III)Landroid/os/Message;"/>
-		<method name="obtain(Landroid/os/Handler;IIILjava/lang/Object;)Landroid/os/Message;"/>
-		<method name="obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;"/>
-		<method name="obtain(Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/os/Message;"/>
-		<method name="obtain(Landroid/os/Message;)Landroid/os/Message;"/>
-		<method name="peekData()Landroid/os/Bundle;"/>
-		<method name="recycle()V"/>
-		<method name="sendToTarget()V"/>
-		<method name="setAsynchronous(Z)V" since="22"/>
-		<method name="setData(Landroid/os/Bundle;)V"/>
-		<method name="setTarget(Landroid/os/Handler;)V"/>
-		<field name="CREATOR"/>
-		<field name="arg1"/>
-		<field name="arg2"/>
-		<field name="obj"/>
-		<field name="replyTo"/>
-		<field name="sendingUid" since="21"/>
-		<field name="what"/>
-	</class>
-	<class name="android/os/MessageQueue" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Z)V" since="29"/>
-		<method name="addIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V"/>
-		<method name="addOnFileDescriptorEventListener(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V" since="23"/>
-		<method name="isIdle()Z" since="23"/>
-		<method name="removeIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V"/>
-		<method name="removeOnFileDescriptorEventListener(Ljava/io/FileDescriptor;)V" since="23"/>
-	</class>
-	<class name="android/os/MessageQueue$IdleHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="queueIdle()Z"/>
-	</class>
-	<class name="android/os/MessageQueue$OnFileDescriptorEventListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I"/>
-		<field name="EVENT_ERROR"/>
-		<field name="EVENT_INPUT"/>
-		<field name="EVENT_OUTPUT"/>
-	</class>
-	<class name="android/os/Messenger" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Handler;)V"/>
-		<method name="&lt;init>(Landroid/os/IBinder;)V"/>
-		<method name="getBinder()Landroid/os/IBinder;"/>
-		<method name="readMessengerOrNullFromParcel(Landroid/os/Parcel;)Landroid/os/Messenger;"/>
-		<method name="send(Landroid/os/Message;)V"/>
-		<method name="writeMessengerOrNullToParcel(Landroid/os/Messenger;Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/NetworkOnMainThreadException" since="11">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/OperationCanceledException" since="16">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/os/Parcel" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(J)V" since="29"/>
-		<method name="appendFrom(Landroid/os/Parcel;II)V"/>
-		<method name="createBinderArray()[Landroid/os/IBinder;"/>
-		<method name="createBinderArrayList()Ljava/util/ArrayList;"/>
-		<method name="createBooleanArray()[Z"/>
-		<method name="createByteArray()[B"/>
-		<method name="createCharArray()[C"/>
-		<method name="createDoubleArray()[D"/>
-		<method name="createFloatArray()[F"/>
-		<method name="createIntArray()[I"/>
-		<method name="createLongArray()[J"/>
-		<method name="createStringArray()[Ljava/lang/String;"/>
-		<method name="createStringArrayList()Ljava/util/ArrayList;"/>
-		<method name="createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;"/>
-		<method name="createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;"/>
-		<method name="dataAvail()I"/>
-		<method name="dataCapacity()I"/>
-		<method name="dataPosition()I"/>
-		<method name="dataSize()I"/>
-		<method name="enforceInterface(Ljava/lang/String;)V"/>
-		<method name="hasFileDescriptors()Z"/>
-		<method name="marshall()[B"/>
-		<method name="obtain()Landroid/os/Parcel;"/>
-		<method name="obtain(I)Landroid/os/Parcel;" removed="21"/>
-		<method name="readArray(Ljava/lang/ClassLoader;)[Ljava/lang/Object;"/>
-		<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;"/>
-		<method name="readBinderArray([Landroid/os/IBinder;)V"/>
-		<method name="readBinderList(Ljava/util/List;)V"/>
-		<method name="readBooleanArray([Z)V"/>
-		<method name="readBundle()Landroid/os/Bundle;"/>
-		<method name="readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;"/>
-		<method name="readByte()B"/>
-		<method name="readByteArray([B)V"/>
-		<method name="readCharArray([C)V"/>
-		<method name="readDouble()D"/>
-		<method name="readDoubleArray([D)V"/>
-		<method name="readException()V"/>
-		<method name="readException(ILjava/lang/String;)V"/>
-		<method name="readFileDescriptor()Landroid/os/ParcelFileDescriptor;"/>
-		<method name="readFloat()F"/>
-		<method name="readFloatArray([F)V"/>
-		<method name="readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;"/>
-		<method name="readInt()I"/>
-		<method name="readIntArray([I)V"/>
-		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;)V"/>
-		<method name="readLong()J"/>
-		<method name="readLongArray([J)V"/>
-		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V"/>
-		<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;"/>
-		<method name="readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;"/>
-		<method name="readPersistableBundle()Landroid/os/PersistableBundle;" since="21"/>
-		<method name="readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;" since="21"/>
-		<method name="readSerializable()Ljava/io/Serializable;"/>
-		<method name="readSize()Landroid/util/Size;" since="21"/>
-		<method name="readSizeF()Landroid/util/SizeF;" since="21"/>
-		<method name="readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;"/>
-		<method name="readSparseBooleanArray()Landroid/util/SparseBooleanArray;"/>
-		<method name="readString()Ljava/lang/String;"/>
-		<method name="readStringArray([Ljava/lang/String;)V"/>
-		<method name="readStringList(Ljava/util/List;)V"/>
-		<method name="readStrongBinder()Landroid/os/IBinder;"/>
-		<method name="readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V"/>
-		<method name="readTypedList(Ljava/util/List;Landroid/os/Parcelable$Creator;)V"/>
-		<method name="readTypedObject(Landroid/os/Parcelable$Creator;)Ljava/lang/Object;" since="23"/>
-		<method name="readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;"/>
-		<method name="recycle()V"/>
-		<method name="setDataCapacity(I)V"/>
-		<method name="setDataPosition(I)V"/>
-		<method name="setDataSize(I)V"/>
-		<method name="unmarshall([BII)V"/>
-		<method name="writeArray([Ljava/lang/Object;)V"/>
-		<method name="writeBinderArray([Landroid/os/IBinder;)V"/>
-		<method name="writeBinderList(Ljava/util/List;)V"/>
-		<method name="writeBooleanArray([Z)V"/>
-		<method name="writeBundle(Landroid/os/Bundle;)V"/>
-		<method name="writeByte(B)V"/>
-		<method name="writeByteArray([B)V"/>
-		<method name="writeByteArray([BII)V"/>
-		<method name="writeCharArray([C)V"/>
-		<method name="writeDouble(D)V"/>
-		<method name="writeDoubleArray([D)V"/>
-		<method name="writeException(Ljava/lang/Exception;)V"/>
-		<method name="writeFileDescriptor(Ljava/io/FileDescriptor;)V"/>
-		<method name="writeFloat(F)V"/>
-		<method name="writeFloatArray([F)V"/>
-		<method name="writeInt(I)V"/>
-		<method name="writeIntArray([I)V"/>
-		<method name="writeInterfaceToken(Ljava/lang/String;)V"/>
-		<method name="writeList(Ljava/util/List;)V"/>
-		<method name="writeLong(J)V"/>
-		<method name="writeLongArray([J)V"/>
-		<method name="writeMap(Ljava/util/Map;)V"/>
-		<method name="writeNoException()V"/>
-		<method name="writeParcelable(Landroid/os/Parcelable;I)V"/>
-		<method name="writeParcelableArray([Landroid/os/Parcelable;I)V"/>
-		<method name="writePersistableBundle(Landroid/os/PersistableBundle;)V" since="21"/>
-		<method name="writeSerializable(Ljava/io/Serializable;)V"/>
-		<method name="writeSize(Landroid/util/Size;)V" since="21"/>
-		<method name="writeSizeF(Landroid/util/SizeF;)V" since="21"/>
-		<method name="writeSparseArray(Landroid/util/SparseArray;)V"/>
-		<method name="writeSparseBooleanArray(Landroid/util/SparseBooleanArray;)V"/>
-		<method name="writeString(Ljava/lang/String;)V"/>
-		<method name="writeStringArray([Ljava/lang/String;)V"/>
-		<method name="writeStringList(Ljava/util/List;)V"/>
-		<method name="writeStrongBinder(Landroid/os/IBinder;)V"/>
-		<method name="writeStrongInterface(Landroid/os/IInterface;)V"/>
-		<method name="writeTypedArray([Landroid/os/Parcelable;I)V"/>
-		<method name="writeTypedList(Ljava/util/List;)V"/>
-		<method name="writeTypedObject(Landroid/os/Parcelable;I)V" since="23"/>
-		<method name="writeValue(Ljava/lang/Object;)V"/>
-		<field name="STRING_CREATOR"/>
-	</class>
-	<class name="android/os/ParcelFileDescriptor" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/io/Closeable" since="16"/>
-		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
-		<method name="adoptFd(I)Landroid/os/ParcelFileDescriptor;" since="13"/>
-		<method name="canDetectErrors()Z" since="19"/>
-		<method name="checkError()V" since="19"/>
-		<method name="close()V"/>
-		<method name="closeWithError(Ljava/lang/String;)V" since="19"/>
-		<method name="createPipe()[Landroid/os/ParcelFileDescriptor;" since="9"/>
-		<method name="createReliablePipe()[Landroid/os/ParcelFileDescriptor;" since="19"/>
-		<method name="createReliableSocketPair()[Landroid/os/ParcelFileDescriptor;" since="19"/>
-		<method name="createSocketPair()[Landroid/os/ParcelFileDescriptor;" since="19"/>
-		<method name="detachFd()I" since="12"/>
-		<method name="dup()Landroid/os/ParcelFileDescriptor;" since="14"/>
-		<method name="dup(Ljava/io/FileDescriptor;)Landroid/os/ParcelFileDescriptor;" since="13"/>
-		<method name="fromDatagramSocket(Ljava/net/DatagramSocket;)Landroid/os/ParcelFileDescriptor;" since="14"/>
-		<method name="fromFd(I)Landroid/os/ParcelFileDescriptor;" since="13"/>
-		<method name="fromSocket(Ljava/net/Socket;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="getFd()I" since="12"/>
-		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
-		<method name="getStatSize()J" since="3"/>
-		<method name="open(Ljava/io/File;I)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="open(Ljava/io/File;ILandroid/os/Handler;Landroid/os/ParcelFileDescriptor$OnCloseListener;)Landroid/os/ParcelFileDescriptor;" since="19"/>
-		<method name="parseMode(Ljava/lang/String;)I" since="19"/>
-		<field name="CREATOR"/>
-		<field name="MODE_APPEND" since="3"/>
-		<field name="MODE_CREATE"/>
-		<field name="MODE_READ_ONLY"/>
-		<field name="MODE_READ_WRITE"/>
-		<field name="MODE_TRUNCATE"/>
-		<field name="MODE_WORLD_READABLE" deprecated="19"/>
-		<field name="MODE_WORLD_WRITEABLE" deprecated="19"/>
-		<field name="MODE_WRITE_ONLY"/>
-	</class>
-	<class name="android/os/ParcelFileDescriptor$AutoCloseInputStream" since="1">
-		<extends name="java/io/FileInputStream"/>
-		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
-	</class>
-	<class name="android/os/ParcelFileDescriptor$AutoCloseOutputStream" since="1">
-		<extends name="java/io/FileOutputStream"/>
-		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
-	</class>
-	<class name="android/os/ParcelFileDescriptor$FileDescriptorDetachedException" since="19">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/ParcelFileDescriptor$OnCloseListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onClose(Ljava/io/IOException;)V"/>
-	</class>
-	<class name="android/os/ParcelFormatException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/os/ParcelUuid" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/util/UUID;)V"/>
-		<method name="fromString(Ljava/lang/String;)Landroid/os/ParcelUuid;"/>
-		<method name="getUuid()Ljava/util/UUID;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/Parcelable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="describeContents()I"/>
-		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
-		<field name="CONTENTS_FILE_DESCRIPTOR"/>
-		<field name="PARCELABLE_WRITE_RETURN_VALUE"/>
-	</class>
-	<class name="android/os/Parcelable$ClassLoaderCreator" since="13">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable$Creator"/>
-		<method name="createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/os/Parcelable$Creator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;"/>
-		<method name="newArray(I)[Ljava/lang/Object;"/>
-	</class>
-	<class name="android/os/PatternMatcher" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getType()I"/>
-		<method name="match(Ljava/lang/String;)Z"/>
-		<field name="CREATOR"/>
-		<field name="PATTERN_ADVANCED_GLOB" since="26"/>
-		<field name="PATTERN_LITERAL"/>
-		<field name="PATTERN_PREFIX"/>
-		<field name="PATTERN_SIMPLE_GLOB"/>
-	</class>
-	<class name="android/os/PersistableBundle" since="21">
-		<extends name="android/os/BaseBundle"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/os/PersistableBundle;)V"/>
-		<method name="deepCopy()Landroid/os/PersistableBundle;" since="26"/>
-		<method name="getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;"/>
-		<method name="putPersistableBundle(Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
-		<field name="CREATOR"/>
-		<field name="EMPTY"/>
-	</class>
-	<class name="android/os/PowerManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getLocationPowerSaveMode()I" since="28"/>
-		<method name="goToSleep(J)V" removed="21"/>
-		<method name="isDeviceIdleMode()Z" since="23"/>
-		<method name="isIgnoringBatteryOptimizations(Ljava/lang/String;)Z" since="23"/>
-		<method name="isInteractive()Z" since="20"/>
-		<method name="isPowerSaveMode()Z" since="21"/>
-		<method name="isScreenOn()Z" since="7" deprecated="20"/>
-		<method name="isSustainedPerformanceModeSupported()Z" since="24"/>
-		<method name="isWakeLockLevelSupported(I)Z" since="21"/>
-		<method name="newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;"/>
-		<method name="reboot(Ljava/lang/String;)V" since="8"/>
-		<method name="userActivity(JZ)V" removed="21"/>
-		<method name="wakeUp(J)V" since="17" removed="21"/>
-		<field name="ACQUIRE_CAUSES_WAKEUP"/>
-		<field name="ACTION_DEVICE_IDLE_MODE_CHANGED" since="23"/>
-		<field name="ACTION_POWER_SAVE_MODE_CHANGED" since="21"/>
-		<field name="FULL_WAKE_LOCK" deprecated="17"/>
-		<field name="LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF" since="28"/>
-		<field name="LOCATION_MODE_FOREGROUND_ONLY" since="28"/>
-		<field name="LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF" since="28"/>
-		<field name="LOCATION_MODE_NO_CHANGE" since="28"/>
-		<field name="ON_AFTER_RELEASE"/>
-		<field name="PARTIAL_WAKE_LOCK"/>
-		<field name="PROXIMITY_SCREEN_OFF_WAKE_LOCK" since="21"/>
-		<field name="RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY" since="21"/>
-		<field name="SCREEN_BRIGHT_WAKE_LOCK" deprecated="16"/>
-		<field name="SCREEN_DIM_WAKE_LOCK" deprecated="17"/>
-	</class>
-	<class name="android/os/PowerManager$WakeLock" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/os/PowerManager;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/PowerManager;ILjava/lang/String;Ljava/lang/String;)V" since="29"/>
-		<method name="acquire()V"/>
-		<method name="acquire(J)V"/>
-		<method name="isHeld()Z"/>
-		<method name="release()V"/>
-		<method name="release(I)V" since="21"/>
-		<method name="setReferenceCounted(Z)V"/>
-		<method name="setWorkSource(Landroid/os/WorkSource;)V" since="9"/>
-	</class>
-	<class name="android/os/Process" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getElapsedCpuTime()J"/>
-		<method name="getExclusiveCores()[I" since="24"/>
-		<method name="getGidForName(Ljava/lang/String;)I"/>
-		<method name="getStartElapsedRealtime()J" since="24"/>
-		<method name="getStartUptimeMillis()J" since="24"/>
-		<method name="getThreadPriority(I)I"/>
-		<method name="getUidForName(Ljava/lang/String;)I"/>
-		<method name="is64Bit()Z" since="23"/>
-		<method name="isApplicationUid(I)Z" since="24"/>
-		<method name="isIsolated()Z" since="28"/>
-		<method name="killProcess(I)V"/>
-		<method name="myPid()I"/>
-		<method name="myTid()I"/>
-		<method name="myUid()I" since="2"/>
-		<method name="myUserHandle()Landroid/os/UserHandle;" since="17"/>
-		<method name="sendSignal(II)V"/>
-		<method name="setThreadPriority(I)V"/>
-		<method name="setThreadPriority(II)V"/>
-		<method name="supportsProcesses()Z" deprecated="16"/>
-		<field name="BLUETOOTH_GID" removed="18"/>
-		<field name="FIRST_APPLICATION_UID"/>
-		<field name="LAST_APPLICATION_UID"/>
-		<field name="PHONE_UID"/>
-		<field name="SIGNAL_KILL"/>
-		<field name="SIGNAL_QUIT"/>
-		<field name="SIGNAL_USR1"/>
-		<field name="SYSTEM_UID"/>
-		<field name="THREAD_PRIORITY_AUDIO"/>
-		<field name="THREAD_PRIORITY_BACKGROUND"/>
-		<field name="THREAD_PRIORITY_DEFAULT"/>
-		<field name="THREAD_PRIORITY_DISPLAY"/>
-		<field name="THREAD_PRIORITY_FOREGROUND"/>
-		<field name="THREAD_PRIORITY_LESS_FAVORABLE"/>
-		<field name="THREAD_PRIORITY_LOWEST"/>
-		<field name="THREAD_PRIORITY_MORE_FAVORABLE"/>
-		<field name="THREAD_PRIORITY_URGENT_AUDIO"/>
-		<field name="THREAD_PRIORITY_URGENT_DISPLAY"/>
-		<field name="THREAD_PRIORITY_VIDEO" since="28"/>
-	</class>
-	<class name="android/os/ProxyFileDescriptorCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFsync()V"/>
-		<method name="onGetSize()J"/>
-		<method name="onRead(JI[B)I"/>
-		<method name="onRelease()V"/>
-		<method name="onWrite(JI[B)I"/>
-	</class>
-	<class name="android/os/RecoverySystem" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="installPackage(Landroid/content/Context;Ljava/io/File;)V"/>
-		<method name="rebootWipeCache(Landroid/content/Context;)V" since="14"/>
-		<method name="rebootWipeUserData(Landroid/content/Context;)V"/>
-		<method name="verifyPackage(Ljava/io/File;Landroid/os/RecoverySystem$ProgressListener;Ljava/io/File;)V"/>
-	</class>
-	<class name="android/os/RecoverySystem$ProgressListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="onProgress(I)V"/>
-	</class>
-	<class name="android/os/RemoteCallbackList" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="beginBroadcast()I"/>
-		<method name="finishBroadcast()V"/>
-		<method name="getBroadcastCookie(I)Ljava/lang/Object;" since="4"/>
-		<method name="getBroadcastItem(I)Landroid/os/IInterface;"/>
-		<method name="getRegisteredCallbackCookie(I)Ljava/lang/Object;" since="26"/>
-		<method name="getRegisteredCallbackCount()I" since="17"/>
-		<method name="getRegisteredCallbackItem(I)Landroid/os/IInterface;" since="26"/>
-		<method name="kill()V"/>
-		<method name="onCallbackDied(Landroid/os/IInterface;)V"/>
-		<method name="onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V" since="4"/>
-		<method name="register(Landroid/os/IInterface;)Z"/>
-		<method name="register(Landroid/os/IInterface;Ljava/lang/Object;)Z" since="4"/>
-		<method name="unregister(Landroid/os/IInterface;)Z"/>
-	</class>
-	<class name="android/os/RemoteException" since="1">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="15"/>
-	</class>
-	<class name="android/os/ResultReceiver" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Handler;)V"/>
-		<method name="onReceiveResult(ILandroid/os/Bundle;)V"/>
-		<method name="send(ILandroid/os/Bundle;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/SharedMemory" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="29"/>
-		<method name="create(Ljava/lang/String;I)Landroid/os/SharedMemory;"/>
-		<method name="getSize()I"/>
-		<method name="map(III)Ljava/nio/ByteBuffer;"/>
-		<method name="mapReadOnly()Ljava/nio/ByteBuffer;"/>
-		<method name="mapReadWrite()Ljava/nio/ByteBuffer;"/>
-		<method name="setProtect(I)Z"/>
-		<method name="unmap(Ljava/nio/ByteBuffer;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/StatFs" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getAvailableBlocks()I" deprecated="18"/>
-		<method name="getAvailableBlocksLong()J" since="18"/>
-		<method name="getAvailableBytes()J" since="18"/>
-		<method name="getBlockCount()I" deprecated="18"/>
-		<method name="getBlockCountLong()J" since="18"/>
-		<method name="getBlockSize()I" deprecated="18"/>
-		<method name="getBlockSizeLong()J" since="18"/>
-		<method name="getFreeBlocks()I" deprecated="18"/>
-		<method name="getFreeBlocksLong()J" since="18"/>
-		<method name="getFreeBytes()J" since="18"/>
-		<method name="getTotalBytes()J" since="18"/>
-		<method name="restat(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/os/StrictMode" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;"/>
-		<method name="allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;"/>
-		<method name="enableDefaults()V"/>
-		<method name="getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;"/>
-		<method name="getVmPolicy()Landroid/os/StrictMode$VmPolicy;"/>
-		<method name="noteSlowCall(Ljava/lang/String;)V" since="11"/>
-		<method name="setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V"/>
-		<method name="setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V"/>
-	</class>
-	<class name="android/os/StrictMode$OnThreadViolationListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onThreadViolation(Landroid/os/strictmode/Violation;)V"/>
-	</class>
-	<class name="android/os/StrictMode$OnVmViolationListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onVmViolation(Landroid/os/strictmode/Violation;)V"/>
-	</class>
-	<class name="android/os/StrictMode$ThreadPolicy" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILandroid/os/StrictMode$OnThreadViolationListener;Ljava/util/concurrent/Executor;)V" since="29"/>
-		<field name="LAX"/>
-	</class>
-	<class name="android/os/StrictMode$ThreadPolicy$Builder" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/StrictMode$ThreadPolicy;)V"/>
-		<method name="build()Landroid/os/StrictMode$ThreadPolicy;"/>
-		<method name="detectAll()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="detectCustomSlowCalls()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
-		<method name="detectDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="detectDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="detectNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="detectResourceMismatches()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="23"/>
-		<method name="detectUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="26"/>
-		<method name="penaltyDeath()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="penaltyDeathOnNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
-		<method name="penaltyDialog()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="penaltyDropBox()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="penaltyFlashScreen()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
-		<method name="penaltyListener(Ljava/util/concurrent/Executor;Landroid/os/StrictMode$OnThreadViolationListener;)Landroid/os/StrictMode$ThreadPolicy$Builder;" since="28"/>
-		<method name="penaltyLog()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="permitAll()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="permitCustomSlowCalls()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
-		<method name="permitDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="permitDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="permitNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
-		<method name="permitResourceMismatches()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="23"/>
-		<method name="permitUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="26"/>
-	</class>
-	<class name="android/os/StrictMode$VmPolicy" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/util/HashMap;Landroid/os/StrictMode$OnVmViolationListener;Ljava/util/concurrent/Executor;)V" since="29"/>
-		<field name="LAX"/>
-	</class>
-	<class name="android/os/StrictMode$VmPolicy$Builder" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/StrictMode$VmPolicy;)V" since="11"/>
-		<method name="build()Landroid/os/StrictMode$VmPolicy;"/>
-		<method name="detectActivityLeaks()Landroid/os/StrictMode$VmPolicy$Builder;" since="11"/>
-		<method name="detectAll()Landroid/os/StrictMode$VmPolicy$Builder;"/>
-		<method name="detectCleartextNetwork()Landroid/os/StrictMode$VmPolicy$Builder;" since="23"/>
-		<method name="detectContentUriWithoutPermission()Landroid/os/StrictMode$VmPolicy$Builder;" since="26"/>
-		<method name="detectFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;" since="18"/>
-		<method name="detectLeakedClosableObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="11"/>
-		<method name="detectLeakedRegistrationObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="16"/>
-		<method name="detectLeakedSqlLiteObjects()Landroid/os/StrictMode$VmPolicy$Builder;"/>
-		<method name="detectNonSdkApiUsage()Landroid/os/StrictMode$VmPolicy$Builder;" since="28"/>
-		<method name="detectUntaggedSockets()Landroid/os/StrictMode$VmPolicy$Builder;" since="26"/>
-		<method name="penaltyDeath()Landroid/os/StrictMode$VmPolicy$Builder;"/>
-		<method name="penaltyDeathOnCleartextNetwork()Landroid/os/StrictMode$VmPolicy$Builder;" since="23"/>
-		<method name="penaltyDeathOnFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;" since="24"/>
-		<method name="penaltyDropBox()Landroid/os/StrictMode$VmPolicy$Builder;"/>
-		<method name="penaltyListener(Ljava/util/concurrent/Executor;Landroid/os/StrictMode$OnVmViolationListener;)Landroid/os/StrictMode$VmPolicy$Builder;" since="28"/>
-		<method name="penaltyLog()Landroid/os/StrictMode$VmPolicy$Builder;"/>
-		<method name="permitNonSdkApiUsage()Landroid/os/StrictMode$VmPolicy$Builder;" since="28"/>
-		<method name="setClassInstanceLimit(Ljava/lang/Class;I)Landroid/os/StrictMode$VmPolicy$Builder;" since="11"/>
-	</class>
-	<class name="android/os/SystemClock" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="currentThreadTimeMillis()J"/>
-		<method name="elapsedRealtime()J"/>
-		<method name="elapsedRealtimeNanos()J" since="17"/>
-		<method name="setCurrentTimeMillis(J)Z"/>
-		<method name="sleep(J)V"/>
-		<method name="uptimeMillis()J"/>
-	</class>
-	<class name="android/os/TestLooperManager" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Looper;)V" since="29"/>
-		<method name="execute(Landroid/os/Message;)V"/>
-		<method name="getMessageQueue()Landroid/os/MessageQueue;"/>
-		<method name="hasMessages(Landroid/os/Handler;Ljava/lang/Object;I)Z"/>
-		<method name="hasMessages(Landroid/os/Handler;Ljava/lang/Object;Ljava/lang/Runnable;)Z"/>
-		<method name="next()Landroid/os/Message;"/>
-		<method name="recycle(Landroid/os/Message;)V"/>
-		<method name="release()V"/>
-	</class>
-	<class name="android/os/TokenWatcher" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/os/Handler;Ljava/lang/String;)V"/>
-		<method name="acquire(Landroid/os/IBinder;Ljava/lang/String;)V"/>
-		<method name="acquired()V"/>
-		<method name="cleanup(Landroid/os/IBinder;Z)V"/>
-		<method name="dump()V"/>
-		<method name="dump(Ljava/io/PrintWriter;)V" since="16"/>
-		<method name="isAcquired()Z"/>
-		<method name="release(Landroid/os/IBinder;)V"/>
-		<method name="released()V"/>
-	</class>
-	<class name="android/os/Trace" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="beginSection(Ljava/lang/String;)V"/>
-		<method name="endSection()V"/>
-	</class>
-	<class name="android/os/TransactionTooLargeException" since="15">
-		<extends name="android/os/RemoteException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="23"/>
-	</class>
-	<class name="android/os/UserHandle" since="17">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="getUserHandleForUid(I)Landroid/os/UserHandle;" since="24"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;"/>
-		<method name="writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/UserManager" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createUserCreationIntent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)Landroid/content/Intent;" since="24"/>
-		<method name="getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;" since="18"/>
-		<method name="getSerialNumberForUser(Landroid/os/UserHandle;)J"/>
-		<method name="getUserCount()I"/>
-		<method name="getUserCreationTime(Landroid/os/UserHandle;)J" since="23"/>
-		<method name="getUserForSerialNumber(J)Landroid/os/UserHandle;"/>
-		<method name="getUserName()Ljava/lang/String;"/>
-		<method name="getUserProfiles()Ljava/util/List;" since="21"/>
-		<method name="getUserRestrictions()Landroid/os/Bundle;" since="18"/>
-		<method name="getUserRestrictions(Landroid/os/UserHandle;)Landroid/os/Bundle;" since="18"/>
-		<method name="hasUserRestriction(Ljava/lang/String;)Z" since="21"/>
-		<method name="isDemoUser()Z" since="25"/>
-		<method name="isQuietModeEnabled(Landroid/os/UserHandle;)Z" since="24"/>
-		<method name="isSystemUser()Z" since="23"/>
-		<method name="isUserAGoat()Z"/>
-		<method name="isUserRunning(Landroid/os/UserHandle;)Z"/>
-		<method name="isUserRunningOrStopping(Landroid/os/UserHandle;)Z"/>
-		<method name="isUserUnlocked()Z" since="24"/>
-		<method name="isUserUnlocked(Landroid/os/UserHandle;)Z" since="24"/>
-		<method name="requestQuietModeEnabled(ZLandroid/os/UserHandle;)Z" since="28"/>
-		<method name="setRestrictionsChallenge(Ljava/lang/String;)Z" since="19" deprecated="23"/>
-		<method name="setUserRestriction(Ljava/lang/String;Z)V" since="18" deprecated="21"/>
-		<method name="setUserRestrictions(Landroid/os/Bundle;)V" since="18" deprecated="21"/>
-		<method name="setUserRestrictions(Landroid/os/Bundle;Landroid/os/UserHandle;)V" since="18" deprecated="21"/>
-		<method name="supportsMultipleUsers()Z" since="24"/>
-		<field name="ALLOW_PARENT_PROFILE_APP_LINKING" since="23"/>
-		<field name="DISALLOW_ADD_MANAGED_PROFILE" since="26"/>
-		<field name="DISALLOW_ADD_USER" since="21"/>
-		<field name="DISALLOW_ADJUST_VOLUME" since="21"/>
-		<field name="DISALLOW_AIRPLANE_MODE" since="28"/>
-		<field name="DISALLOW_AMBIENT_DISPLAY" since="28"/>
-		<field name="DISALLOW_APPS_CONTROL" since="21"/>
-		<field name="DISALLOW_AUTOFILL" since="26"/>
-		<field name="DISALLOW_BLUETOOTH" since="26"/>
-		<field name="DISALLOW_BLUETOOTH_SHARING" since="26"/>
-		<field name="DISALLOW_CONFIG_BLUETOOTH" since="18"/>
-		<field name="DISALLOW_CONFIG_BRIGHTNESS" since="28"/>
-		<field name="DISALLOW_CONFIG_CELL_BROADCASTS" since="21"/>
-		<field name="DISALLOW_CONFIG_CREDENTIALS" since="18"/>
-		<field name="DISALLOW_CONFIG_DATE_TIME" since="28"/>
-		<field name="DISALLOW_CONFIG_LOCALE" since="28"/>
-		<field name="DISALLOW_CONFIG_LOCATION" since="28"/>
-		<field name="DISALLOW_CONFIG_MOBILE_NETWORKS" since="21"/>
-		<field name="DISALLOW_CONFIG_SCREEN_TIMEOUT" since="28"/>
-		<field name="DISALLOW_CONFIG_TETHERING" since="21"/>
-		<field name="DISALLOW_CONFIG_VPN" since="21"/>
-		<field name="DISALLOW_CONFIG_WIFI" since="18"/>
-		<field name="DISALLOW_CREATE_WINDOWS" since="21"/>
-		<field name="DISALLOW_CROSS_PROFILE_COPY_PASTE" since="21"/>
-		<field name="DISALLOW_DATA_ROAMING" since="24"/>
-		<field name="DISALLOW_DEBUGGING_FEATURES" since="21"/>
-		<field name="DISALLOW_FACTORY_RESET" since="21"/>
-		<field name="DISALLOW_FUN" since="23"/>
-		<field name="DISALLOW_INSTALL_APPS" since="18"/>
-		<field name="DISALLOW_INSTALL_UNKNOWN_SOURCES" since="18"/>
-		<field name="DISALLOW_MODIFY_ACCOUNTS" since="18"/>
-		<field name="DISALLOW_MOUNT_PHYSICAL_MEDIA" since="21"/>
-		<field name="DISALLOW_NETWORK_RESET" since="23"/>
-		<field name="DISALLOW_OUTGOING_BEAM" since="22"/>
-		<field name="DISALLOW_OUTGOING_CALLS" since="21"/>
-		<field name="DISALLOW_PRINTING" since="28"/>
-		<field name="DISALLOW_REMOVE_MANAGED_PROFILE" since="26"/>
-		<field name="DISALLOW_REMOVE_USER" since="18"/>
-		<field name="DISALLOW_SAFE_BOOT" since="23"/>
-		<field name="DISALLOW_SET_USER_ICON" since="24"/>
-		<field name="DISALLOW_SET_WALLPAPER" since="24"/>
-		<field name="DISALLOW_SHARE_INTO_MANAGED_PROFILE" since="28"/>
-		<field name="DISALLOW_SHARE_LOCATION" since="18"/>
-		<field name="DISALLOW_SMS" since="21"/>
-		<field name="DISALLOW_SYSTEM_ERROR_DIALOGS" since="28"/>
-		<field name="DISALLOW_UNIFIED_PASSWORD" since="28"/>
-		<field name="DISALLOW_UNINSTALL_APPS" since="18"/>
-		<field name="DISALLOW_UNMUTE_MICROPHONE" since="21"/>
-		<field name="DISALLOW_USB_FILE_TRANSFER" since="18"/>
-		<field name="DISALLOW_USER_SWITCH" since="28"/>
-		<field name="ENSURE_VERIFY_APPS" since="21"/>
-		<field name="KEY_RESTRICTIONS_PENDING" since="22"/>
-		<field name="USER_CREATION_FAILED_NOT_PERMITTED" since="24"/>
-		<field name="USER_CREATION_FAILED_NO_MORE_USERS" since="24"/>
-		<field name="USER_OPERATION_ERROR_CURRENT_USER" since="28"/>
-		<field name="USER_OPERATION_ERROR_LOW_STORAGE" since="28"/>
-		<field name="USER_OPERATION_ERROR_MANAGED_PROFILE" since="28"/>
-		<field name="USER_OPERATION_ERROR_MAX_RUNNING_USERS" since="28"/>
-		<field name="USER_OPERATION_ERROR_MAX_USERS" since="28"/>
-		<field name="USER_OPERATION_ERROR_UNKNOWN" since="28"/>
-		<field name="USER_OPERATION_SUCCESS" since="28"/>
-	</class>
-	<class name="android/os/UserManager$UserOperationException" since="28">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
-		<method name="getUserOperationResult()I"/>
-	</class>
-	<class name="android/os/VibrationEffect" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="createOneShot(JI)Landroid/os/VibrationEffect;"/>
-		<method name="createWaveform([JI)Landroid/os/VibrationEffect;"/>
-		<method name="createWaveform([J[II)Landroid/os/VibrationEffect;"/>
-		<field name="CREATOR"/>
-		<field name="DEFAULT_AMPLITUDE"/>
-	</class>
-	<class name="android/os/Vibrator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="hasAmplitudeControl()Z" since="26"/>
-		<method name="hasVibrator()Z" since="11"/>
-		<method name="vibrate(J)V" deprecated="26"/>
-		<method name="vibrate(JLandroid/media/AudioAttributes;)V" since="21" deprecated="26"/>
-		<method name="vibrate(Landroid/os/VibrationEffect;)V" since="26"/>
-		<method name="vibrate(Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V" since="26"/>
-		<method name="vibrate([JI)V" deprecated="26"/>
-		<method name="vibrate([JILandroid/media/AudioAttributes;)V" since="21" deprecated="26"/>
-	</class>
-	<class name="android/os/WorkSource" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/WorkSource;)V"/>
-		<method name="add(Landroid/os/WorkSource;)Z"/>
-		<method name="clear()V"/>
-		<method name="diff(Landroid/os/WorkSource;)Z"/>
-		<method name="remove(Landroid/os/WorkSource;)Z"/>
-		<method name="set(Landroid/os/WorkSource;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/health/HealthStats" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDataType()Ljava/lang/String;"/>
-		<method name="getMeasurement(I)J"/>
-		<method name="getMeasurementKeyAt(I)I"/>
-		<method name="getMeasurementKeyCount()I"/>
-		<method name="getMeasurements(I)Ljava/util/Map;"/>
-		<method name="getMeasurementsKeyAt(I)I"/>
-		<method name="getMeasurementsKeyCount()I"/>
-		<method name="getStats(I)Ljava/util/Map;"/>
-		<method name="getStatsKeyAt(I)I"/>
-		<method name="getStatsKeyCount()I"/>
-		<method name="getTimer(I)Landroid/os/health/TimerStat;"/>
-		<method name="getTimerCount(I)I"/>
-		<method name="getTimerKeyAt(I)I"/>
-		<method name="getTimerKeyCount()I"/>
-		<method name="getTimerTime(I)J"/>
-		<method name="getTimers(I)Ljava/util/Map;"/>
-		<method name="getTimersKeyAt(I)I"/>
-		<method name="getTimersKeyCount()I"/>
-		<method name="hasMeasurement(I)Z"/>
-		<method name="hasMeasurements(I)Z"/>
-		<method name="hasStats(I)Z"/>
-		<method name="hasTimer(I)Z"/>
-		<method name="hasTimers(I)Z"/>
-	</class>
-	<class name="android/os/health/PackageHealthStats" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="MEASUREMENTS_WAKEUP_ALARMS_COUNT"/>
-		<field name="STATS_SERVICES"/>
-	</class>
-	<class name="android/os/health/PidHealthStats" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="MEASUREMENT_WAKE_NESTING_COUNT"/>
-		<field name="MEASUREMENT_WAKE_START_MS"/>
-		<field name="MEASUREMENT_WAKE_SUM_MS"/>
-	</class>
-	<class name="android/os/health/ProcessHealthStats" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="MEASUREMENT_ANR_COUNT"/>
-		<field name="MEASUREMENT_CRASHES_COUNT"/>
-		<field name="MEASUREMENT_FOREGROUND_MS"/>
-		<field name="MEASUREMENT_STARTS_COUNT"/>
-		<field name="MEASUREMENT_SYSTEM_TIME_MS"/>
-		<field name="MEASUREMENT_USER_TIME_MS"/>
-	</class>
-	<class name="android/os/health/ServiceHealthStats" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="MEASUREMENT_LAUNCH_COUNT"/>
-		<field name="MEASUREMENT_START_SERVICE_COUNT"/>
-	</class>
-	<class name="android/os/health/SystemHealthManager" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="takeMyUidSnapshot()Landroid/os/health/HealthStats;"/>
-		<method name="takeUidSnapshot(I)Landroid/os/health/HealthStats;"/>
-		<method name="takeUidSnapshots([I)[Landroid/os/health/HealthStats;"/>
-	</class>
-	<class name="android/os/health/TimerStat" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(IJ)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="getCount()I"/>
-		<method name="getTime()J"/>
-		<method name="setCount(I)V"/>
-		<method name="setTime(J)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/os/health/UidHealthStats" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="MEASUREMENT_BLUETOOTH_IDLE_MS"/>
-		<field name="MEASUREMENT_BLUETOOTH_POWER_MAMS"/>
-		<field name="MEASUREMENT_BLUETOOTH_RX_BYTES"/>
-		<field name="MEASUREMENT_BLUETOOTH_RX_MS"/>
-		<field name="MEASUREMENT_BLUETOOTH_RX_PACKETS"/>
-		<field name="MEASUREMENT_BLUETOOTH_TX_BYTES"/>
-		<field name="MEASUREMENT_BLUETOOTH_TX_MS"/>
-		<field name="MEASUREMENT_BLUETOOTH_TX_PACKETS"/>
-		<field name="MEASUREMENT_BUTTON_USER_ACTIVITY_COUNT"/>
-		<field name="MEASUREMENT_CPU_POWER_MAMS" deprecated="26"/>
-		<field name="MEASUREMENT_MOBILE_IDLE_MS"/>
-		<field name="MEASUREMENT_MOBILE_POWER_MAMS"/>
-		<field name="MEASUREMENT_MOBILE_RX_BYTES"/>
-		<field name="MEASUREMENT_MOBILE_RX_MS"/>
-		<field name="MEASUREMENT_MOBILE_RX_PACKETS"/>
-		<field name="MEASUREMENT_MOBILE_TX_BYTES"/>
-		<field name="MEASUREMENT_MOBILE_TX_MS"/>
-		<field name="MEASUREMENT_MOBILE_TX_PACKETS"/>
-		<field name="MEASUREMENT_OTHER_USER_ACTIVITY_COUNT"/>
-		<field name="MEASUREMENT_REALTIME_BATTERY_MS"/>
-		<field name="MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS"/>
-		<field name="MEASUREMENT_SYSTEM_CPU_TIME_MS"/>
-		<field name="MEASUREMENT_TOUCH_USER_ACTIVITY_COUNT"/>
-		<field name="MEASUREMENT_UPTIME_BATTERY_MS"/>
-		<field name="MEASUREMENT_UPTIME_SCREEN_OFF_BATTERY_MS"/>
-		<field name="MEASUREMENT_USER_CPU_TIME_MS"/>
-		<field name="MEASUREMENT_WIFI_FULL_LOCK_MS"/>
-		<field name="MEASUREMENT_WIFI_IDLE_MS"/>
-		<field name="MEASUREMENT_WIFI_MULTICAST_MS"/>
-		<field name="MEASUREMENT_WIFI_POWER_MAMS"/>
-		<field name="MEASUREMENT_WIFI_RUNNING_MS"/>
-		<field name="MEASUREMENT_WIFI_RX_BYTES"/>
-		<field name="MEASUREMENT_WIFI_RX_MS"/>
-		<field name="MEASUREMENT_WIFI_RX_PACKETS"/>
-		<field name="MEASUREMENT_WIFI_TX_BYTES"/>
-		<field name="MEASUREMENT_WIFI_TX_MS"/>
-		<field name="MEASUREMENT_WIFI_TX_PACKETS"/>
-		<field name="STATS_PACKAGES"/>
-		<field name="STATS_PIDS"/>
-		<field name="STATS_PROCESSES"/>
-		<field name="TIMERS_JOBS"/>
-		<field name="TIMERS_SENSORS"/>
-		<field name="TIMERS_SYNCS"/>
-		<field name="TIMERS_WAKELOCKS_DRAW"/>
-		<field name="TIMERS_WAKELOCKS_FULL"/>
-		<field name="TIMERS_WAKELOCKS_PARTIAL"/>
-		<field name="TIMERS_WAKELOCKS_WINDOW"/>
-		<field name="TIMER_AUDIO"/>
-		<field name="TIMER_BLUETOOTH_SCAN"/>
-		<field name="TIMER_CAMERA"/>
-		<field name="TIMER_FLASHLIGHT"/>
-		<field name="TIMER_FOREGROUND_ACTIVITY"/>
-		<field name="TIMER_GPS_SENSOR"/>
-		<field name="TIMER_MOBILE_RADIO_ACTIVE"/>
-		<field name="TIMER_PROCESS_STATE_BACKGROUND_MS"/>
-		<field name="TIMER_PROCESS_STATE_CACHED_MS"/>
-		<field name="TIMER_PROCESS_STATE_FOREGROUND_MS"/>
-		<field name="TIMER_PROCESS_STATE_FOREGROUND_SERVICE_MS"/>
-		<field name="TIMER_PROCESS_STATE_TOP_MS"/>
-		<field name="TIMER_PROCESS_STATE_TOP_SLEEPING_MS"/>
-		<field name="TIMER_VIBRATOR"/>
-		<field name="TIMER_VIDEO"/>
-		<field name="TIMER_WIFI_SCAN"/>
-	</class>
-	<class name="android/os/storage/OnObbStateChangeListener" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onObbStateChange(Ljava/lang/String;I)V"/>
-		<field name="ERROR_ALREADY_MOUNTED"/>
-		<field name="ERROR_COULD_NOT_MOUNT"/>
-		<field name="ERROR_COULD_NOT_UNMOUNT"/>
-		<field name="ERROR_INTERNAL"/>
-		<field name="ERROR_NOT_MOUNTED"/>
-		<field name="ERROR_PERMISSION_DENIED"/>
-		<field name="MOUNTED"/>
-		<field name="UNMOUNTED"/>
-	</class>
-	<class name="android/os/storage/StorageManager" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="allocateBytes(Ljava/io/FileDescriptor;J)V" since="26"/>
-		<method name="allocateBytes(Ljava/util/UUID;J)V" since="26"/>
-		<method name="getAllocatableBytes(Ljava/util/UUID;)J" since="26"/>
-		<method name="getCacheQuotaBytes(Ljava/util/UUID;)J" since="26"/>
-		<method name="getCacheSizeBytes(Ljava/util/UUID;)J" since="26"/>
-		<method name="getMountedObbPath(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getPrimaryStorageVolume()Landroid/os/storage/StorageVolume;" since="24"/>
-		<method name="getStorageVolume(Ljava/io/File;)Landroid/os/storage/StorageVolume;" since="24"/>
-		<method name="getStorageVolumes()Ljava/util/List;" since="24"/>
-		<method name="getUuidForPath(Ljava/io/File;)Ljava/util/UUID;" since="26"/>
-		<method name="isAllocationSupported(Ljava/io/FileDescriptor;)Z" since="27"/>
-		<method name="isCacheBehaviorGroup(Ljava/io/File;)Z" since="26"/>
-		<method name="isCacheBehaviorTombstone(Ljava/io/File;)Z" since="26"/>
-		<method name="isEncrypted(Ljava/io/File;)Z" since="24"/>
-		<method name="isObbMounted(Ljava/lang/String;)Z"/>
-		<method name="mountObb(Ljava/lang/String;Ljava/lang/String;Landroid/os/storage/OnObbStateChangeListener;)Z"/>
-		<method name="openProxyFileDescriptor(ILandroid/os/ProxyFileDescriptorCallback;Landroid/os/Handler;)Landroid/os/ParcelFileDescriptor;" since="26"/>
-		<method name="setCacheBehaviorGroup(Ljava/io/File;Z)V" since="26"/>
-		<method name="setCacheBehaviorTombstone(Ljava/io/File;Z)V" since="26"/>
-		<method name="unmountObb(Ljava/lang/String;ZLandroid/os/storage/OnObbStateChangeListener;)Z"/>
-		<field name="ACTION_MANAGE_STORAGE" since="25"/>
-		<field name="EXTRA_REQUESTED_BYTES" since="26"/>
-		<field name="EXTRA_UUID" since="26"/>
-		<field name="UUID_DEFAULT" since="26"/>
-	</class>
-	<class name="android/os/storage/StorageVolume" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="createAccessIntent(Ljava/lang/String;)Landroid/content/Intent;"/>
-		<method name="getDescription(Landroid/content/Context;)Ljava/lang/String;"/>
-		<method name="getState()Ljava/lang/String;"/>
-		<method name="getUuid()Ljava/lang/String;"/>
-		<method name="isEmulated()Z"/>
-		<method name="isPrimary()Z"/>
-		<method name="isRemovable()Z"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_STORAGE_VOLUME"/>
-	</class>
-	<class name="android/os/strictmode/CleartextNetworkViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/ContentUriWithoutPermissionViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/Uri;Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/CustomViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/DiskReadViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/strictmode/DiskWriteViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/strictmode/FileUriExposedViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/InstanceCountViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Class;JI)V" since="29"/>
-		<method name="getNumberOfInstances()J"/>
-	</class>
-	<class name="android/os/strictmode/IntentReceiverLeakedViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/LeakedClosableViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/NetworkViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/strictmode/NonSdkApiUsedViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/ResourceMismatchViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/ServiceConnectionLeakedViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/SqliteObjectLeakedViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/UnbufferedIoViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/strictmode/UntaggedSocketViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/os/strictmode/Violation" since="28">
-		<extends name="java/lang/Throwable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/os/strictmode/WebViewMethodCalledOnWrongThreadViolation" since="28">
-		<extends name="android/os/strictmode/Violation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="29"/>
-	</class>
-	<class name="android/preference/CheckBoxPreference" since="1">
-		<extends name="android/preference/Preference" removed="14"/>
-		<extends name="android/preference/TwoStatePreference" since="14"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getDisableDependentsState()Z" removed="14"/>
-		<method name="getSummaryOff()Ljava/lang/CharSequence;" removed="14"/>
-		<method name="getSummaryOn()Ljava/lang/CharSequence;" removed="14"/>
-		<method name="isChecked()Z" removed="14"/>
-		<method name="setChecked(Z)V" removed="14"/>
-		<method name="setDisableDependentsState(Z)V" removed="14"/>
-		<method name="setSummaryOff(I)V" removed="14"/>
-		<method name="setSummaryOff(Ljava/lang/CharSequence;)V" removed="14"/>
-		<method name="setSummaryOn(I)V" removed="14"/>
-		<method name="setSummaryOn(Ljava/lang/CharSequence;)V" removed="14"/>
-	</class>
-	<class name="android/preference/DialogPreference" since="1">
-		<extends name="android/preference/Preference"/>
-		<implements name="android/content/DialogInterface$OnClickListener"/>
-		<implements name="android/content/DialogInterface$OnDismissListener"/>
-		<implements name="android/preference/PreferenceManager$OnActivityDestroyListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getDialog()Landroid/app/Dialog;" since="3"/>
-		<method name="getDialogIcon()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getDialogLayoutResource()I"/>
-		<method name="getDialogMessage()Ljava/lang/CharSequence;"/>
-		<method name="getDialogTitle()Ljava/lang/CharSequence;"/>
-		<method name="getNegativeButtonText()Ljava/lang/CharSequence;"/>
-		<method name="getPositiveButtonText()Ljava/lang/CharSequence;"/>
-		<method name="onBindDialogView(Landroid/view/View;)V"/>
-		<method name="onCreateDialogView()Landroid/view/View;"/>
-		<method name="onDialogClosed(Z)V"/>
-		<method name="onPrepareDialogBuilder(Landroid/app/AlertDialog$Builder;)V"/>
-		<method name="setDialogIcon(I)V"/>
-		<method name="setDialogIcon(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setDialogLayoutResource(I)V"/>
-		<method name="setDialogMessage(I)V"/>
-		<method name="setDialogMessage(Ljava/lang/CharSequence;)V"/>
-		<method name="setDialogTitle(I)V"/>
-		<method name="setDialogTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setNegativeButtonText(I)V"/>
-		<method name="setNegativeButtonText(Ljava/lang/CharSequence;)V"/>
-		<method name="setPositiveButtonText(I)V"/>
-		<method name="setPositiveButtonText(Ljava/lang/CharSequence;)V"/>
-		<method name="showDialog(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/preference/EditTextPreference" since="1">
-		<extends name="android/preference/DialogPreference"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getEditText()Landroid/widget/EditText;"/>
-		<method name="getText()Ljava/lang/String;"/>
-		<method name="onAddEditTextToDialogView(Landroid/view/View;Landroid/widget/EditText;)V"/>
-		<method name="setText(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/preference/ListPreference" since="1">
-		<extends name="android/preference/DialogPreference"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="findIndexOfValue(Ljava/lang/String;)I"/>
-		<method name="getEntries()[Ljava/lang/CharSequence;"/>
-		<method name="getEntry()Ljava/lang/CharSequence;"/>
-		<method name="getEntryValues()[Ljava/lang/CharSequence;"/>
-		<method name="getValue()Ljava/lang/String;"/>
-		<method name="setEntries(I)V"/>
-		<method name="setEntries([Ljava/lang/CharSequence;)V"/>
-		<method name="setEntryValues(I)V"/>
-		<method name="setEntryValues([Ljava/lang/CharSequence;)V"/>
-		<method name="setValue(Ljava/lang/String;)V"/>
-		<method name="setValueIndex(I)V"/>
-	</class>
-	<class name="android/preference/MultiSelectListPreference" since="11">
-		<extends name="android/preference/DialogPreference"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="findIndexOfValue(Ljava/lang/String;)I"/>
-		<method name="getEntries()[Ljava/lang/CharSequence;"/>
-		<method name="getEntryValues()[Ljava/lang/CharSequence;"/>
-		<method name="getValues()Ljava/util/Set;"/>
-		<method name="setEntries(I)V"/>
-		<method name="setEntries([Ljava/lang/CharSequence;)V"/>
-		<method name="setEntryValues(I)V"/>
-		<method name="setEntryValues([Ljava/lang/CharSequence;)V"/>
-		<method name="setValues(Ljava/util/Set;)V"/>
-	</class>
-	<class name="android/preference/Preference" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="callChangeListener(Ljava/lang/Object;)Z"/>
-		<method name="compareTo(Landroid/preference/Preference;)I"/>
-		<method name="findPreferenceInHierarchy(Ljava/lang/String;)Landroid/preference/Preference;"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getDependency()Ljava/lang/String;"/>
-		<method name="getEditor()Landroid/content/SharedPreferences$Editor;"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="11"/>
-		<method name="getFragment()Ljava/lang/String;" since="11"/>
-		<method name="getIcon()Landroid/graphics/drawable/Drawable;" since="11"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="getLayoutResource()I"/>
-		<method name="getOnPreferenceChangeListener()Landroid/preference/Preference$OnPreferenceChangeListener;"/>
-		<method name="getOnPreferenceClickListener()Landroid/preference/Preference$OnPreferenceClickListener;"/>
-		<method name="getOrder()I"/>
-		<method name="getParent()Landroid/preference/PreferenceGroup;" since="26"/>
-		<method name="getPersistedBoolean(Z)Z"/>
-		<method name="getPersistedFloat(F)F"/>
-		<method name="getPersistedInt(I)I"/>
-		<method name="getPersistedLong(J)J"/>
-		<method name="getPersistedString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getPersistedStringSet(Ljava/util/Set;)Ljava/util/Set;" since="24"/>
-		<method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26"/>
-		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;"/>
-		<method name="getSharedPreferences()Landroid/content/SharedPreferences;"/>
-		<method name="getShouldDisableView()Z"/>
-		<method name="getSummary()Ljava/lang/CharSequence;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="getTitleRes()I" since="14"/>
-		<method name="getView(Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="getWidgetLayoutResource()I"/>
-		<method name="hasKey()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isIconSpaceReserved()Z" since="26"/>
-		<method name="isPersistent()Z"/>
-		<method name="isRecycleEnabled()Z" since="26"/>
-		<method name="isSelectable()Z"/>
-		<method name="isSingleLineTitle()Z" since="26"/>
-		<method name="notifyChanged()V"/>
-		<method name="notifyDependencyChange(Z)V"/>
-		<method name="notifyHierarchyChanged()V"/>
-		<method name="onAttachedToActivity()V"/>
-		<method name="onAttachedToHierarchy(Landroid/preference/PreferenceManager;)V"/>
-		<method name="onBindView(Landroid/view/View;)V"/>
-		<method name="onClick()V"/>
-		<method name="onCreateView(Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="onDependencyChanged(Landroid/preference/Preference;Z)V"/>
-		<method name="onGetDefaultValue(Landroid/content/res/TypedArray;I)Ljava/lang/Object;"/>
-		<method name="onParentChanged(Landroid/preference/Preference;Z)V" since="19"/>
-		<method name="onPrepareForRemoval()V"/>
-		<method name="onRestoreInstanceState(Landroid/os/Parcelable;)V"/>
-		<method name="onSaveInstanceState()Landroid/os/Parcelable;"/>
-		<method name="onSetInitialValue(ZLjava/lang/Object;)V"/>
-		<method name="peekExtras()Landroid/os/Bundle;" since="11"/>
-		<method name="persistBoolean(Z)Z"/>
-		<method name="persistFloat(F)Z"/>
-		<method name="persistInt(I)Z"/>
-		<method name="persistLong(J)Z"/>
-		<method name="persistString(Ljava/lang/String;)Z"/>
-		<method name="persistStringSet(Ljava/util/Set;)Z" since="24"/>
-		<method name="restoreHierarchyState(Landroid/os/Bundle;)V"/>
-		<method name="saveHierarchyState(Landroid/os/Bundle;)V"/>
-		<method name="setDefaultValue(Ljava/lang/Object;)V"/>
-		<method name="setDependency(Ljava/lang/String;)V"/>
-		<method name="setEnabled(Z)V"/>
-		<method name="setFragment(Ljava/lang/String;)V" since="11"/>
-		<method name="setIcon(I)V" since="11"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="11"/>
-		<method name="setIconSpaceReserved(Z)V" since="26"/>
-		<method name="setIntent(Landroid/content/Intent;)V"/>
-		<method name="setKey(Ljava/lang/String;)V"/>
-		<method name="setLayoutResource(I)V"/>
-		<method name="setOnPreferenceChangeListener(Landroid/preference/Preference$OnPreferenceChangeListener;)V"/>
-		<method name="setOnPreferenceClickListener(Landroid/preference/Preference$OnPreferenceClickListener;)V"/>
-		<method name="setOrder(I)V"/>
-		<method name="setPersistent(Z)V"/>
-		<method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26"/>
-		<method name="setRecycleEnabled(Z)V" since="26"/>
-		<method name="setSelectable(Z)V"/>
-		<method name="setShouldDisableView(Z)V"/>
-		<method name="setSingleLineTitle(Z)V" since="26"/>
-		<method name="setSummary(I)V"/>
-		<method name="setSummary(Ljava/lang/CharSequence;)V"/>
-		<method name="setTitle(I)V"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setWidgetLayoutResource(I)V"/>
-		<method name="shouldCommit()Z"/>
-		<method name="shouldDisableDependents()Z"/>
-		<method name="shouldPersist()Z"/>
-		<field name="DEFAULT_ORDER"/>
-	</class>
-	<class name="android/preference/Preference$BaseSavedState" since="1">
-		<extends name="android/view/AbsSavedState"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcelable;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/preference/Preference$OnPreferenceChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onPreferenceChange(Landroid/preference/Preference;Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="android/preference/Preference$OnPreferenceClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onPreferenceClick(Landroid/preference/Preference;)Z"/>
-	</class>
-	<class name="android/preference/PreferenceActivity" since="1">
-		<extends name="android/app/ListActivity"/>
-		<implements name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="16"/>
-		<method name="addPreferencesFromResource(I)V" deprecated="16"/>
-		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="16"/>
-		<method name="finishPreferencePanel(Landroid/app/Fragment;ILandroid/content/Intent;)V" since="11"/>
-		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="16"/>
-		<method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="16"/>
-		<method name="hasHeaders()Z" since="11"/>
-		<method name="invalidateHeaders()V" since="11"/>
-		<method name="isMultiPane()Z" since="11"/>
-		<method name="isValidFragment(Ljava/lang/String;)Z" since="19"/>
-		<method name="loadHeadersFromResource(ILjava/util/List;)V" since="11"/>
-		<method name="onBuildHeaders(Ljava/util/List;)V" since="11"/>
-		<method name="onBuildStartFragmentIntent(Ljava/lang/String;Landroid/os/Bundle;II)Landroid/content/Intent;" since="14"/>
-		<method name="onGetInitialHeader()Landroid/preference/PreferenceActivity$Header;" since="11"/>
-		<method name="onGetNewHeader()Landroid/preference/PreferenceActivity$Header;" since="11"/>
-		<method name="onHeaderClick(Landroid/preference/PreferenceActivity$Header;I)V" since="11"/>
-		<method name="onIsHidingHeaders()Z" since="11"/>
-		<method name="onIsMultiPane()Z" since="11"/>
-		<method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="16"/>
-		<method name="setListFooter(Landroid/view/View;)V" since="11"/>
-		<method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" since="11"/>
-		<method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="16"/>
-		<method name="showBreadCrumbs(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" since="11"/>
-		<method name="startPreferenceFragment(Landroid/app/Fragment;Z)V" since="11"/>
-		<method name="startPreferencePanel(Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/CharSequence;Landroid/app/Fragment;I)V" since="11"/>
-		<method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;I)V" since="11"/>
-		<method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;III)V" since="14"/>
-		<method name="switchToHeader(Landroid/preference/PreferenceActivity$Header;)V" since="11"/>
-		<method name="switchToHeader(Ljava/lang/String;Landroid/os/Bundle;)V" since="11"/>
-		<field name="EXTRA_NO_HEADERS" since="11"/>
-		<field name="EXTRA_SHOW_FRAGMENT" since="11"/>
-		<field name="EXTRA_SHOW_FRAGMENT_ARGUMENTS" since="11"/>
-		<field name="EXTRA_SHOW_FRAGMENT_SHORT_TITLE" since="14"/>
-		<field name="EXTRA_SHOW_FRAGMENT_TITLE" since="14"/>
-		<field name="HEADER_ID_UNDEFINED" since="11"/>
-	</class>
-	<class name="android/preference/PreferenceActivity$Header" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBreadCrumbShortTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
-		<method name="getBreadCrumbTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
-		<method name="getSummary(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
-		<method name="getTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<field name="CREATOR"/>
-		<field name="breadCrumbShortTitle"/>
-		<field name="breadCrumbShortTitleRes"/>
-		<field name="breadCrumbTitle"/>
-		<field name="breadCrumbTitleRes"/>
-		<field name="extras"/>
-		<field name="fragment"/>
-		<field name="fragmentArguments"/>
-		<field name="iconRes"/>
-		<field name="id"/>
-		<field name="intent"/>
-		<field name="summary"/>
-		<field name="summaryRes"/>
-		<field name="title"/>
-		<field name="titleRes"/>
-	</class>
-	<class name="android/preference/PreferenceCategory" since="1">
-		<extends name="android/preference/PreferenceGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/preference/PreferenceDataStore" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="getBoolean(Ljava/lang/String;Z)Z"/>
-		<method name="getFloat(Ljava/lang/String;F)F"/>
-		<method name="getInt(Ljava/lang/String;I)I"/>
-		<method name="getLong(Ljava/lang/String;J)J"/>
-		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;"/>
-		<method name="putBoolean(Ljava/lang/String;Z)V"/>
-		<method name="putFloat(Ljava/lang/String;F)V"/>
-		<method name="putInt(Ljava/lang/String;I)V"/>
-		<method name="putLong(Ljava/lang/String;J)V"/>
-		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)V"/>
-	</class>
-	<class name="android/preference/PreferenceFragment" since="11" deprecated="28">
-		<extends name="android/app/Fragment"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPreferencesFromIntent(Landroid/content/Intent;)V"/>
-		<method name="addPreferencesFromResource(I)V"/>
-		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;"/>
-		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;"/>
-		<method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;"/>
-		<method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z"/>
-		<method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V"/>
-	</class>
-	<class name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="onPreferenceStartFragment(Landroid/preference/PreferenceFragment;Landroid/preference/Preference;)Z"/>
-	</class>
-	<class name="android/preference/PreferenceGroup" since="1">
-		<extends name="android/preference/Preference"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addItemFromInflater(Landroid/preference/Preference;)V"/>
-		<method name="addPreference(Landroid/preference/Preference;)Z"/>
-		<method name="dispatchRestoreInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="dispatchSaveInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;"/>
-		<method name="getPreference(I)Landroid/preference/Preference;"/>
-		<method name="getPreferenceCount()I"/>
-		<method name="isOnSameScreenAsChildren()Z"/>
-		<method name="isOrderingAsAdded()Z"/>
-		<method name="onPrepareAddPreference(Landroid/preference/Preference;)Z"/>
-		<method name="removeAll()V"/>
-		<method name="removePreference(Landroid/preference/Preference;)Z"/>
-		<method name="setOrderingAsAdded(Z)V"/>
-	</class>
-	<class name="android/preference/PreferenceManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="createPreferenceScreen(Landroid/content/Context;)Landroid/preference/PreferenceScreen;"/>
-		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;"/>
-		<method name="getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;"/>
-		<method name="getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;" since="24"/>
-		<method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26"/>
-		<method name="getSharedPreferences()Landroid/content/SharedPreferences;"/>
-		<method name="getSharedPreferencesMode()I"/>
-		<method name="getSharedPreferencesName()Ljava/lang/String;"/>
-		<method name="isStorageDefault()Z" since="24"/>
-		<method name="isStorageDeviceProtected()Z" since="24"/>
-		<method name="setDefaultValues(Landroid/content/Context;IZ)V"/>
-		<method name="setDefaultValues(Landroid/content/Context;Ljava/lang/String;IIZ)V"/>
-		<method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26"/>
-		<method name="setSharedPreferencesMode(I)V"/>
-		<method name="setSharedPreferencesName(Ljava/lang/String;)V"/>
-		<method name="setStorageDefault()V" since="24"/>
-		<method name="setStorageDeviceProtected()V" since="24"/>
-		<field name="KEY_HAS_SET_DEFAULT_VALUES"/>
-		<field name="METADATA_KEY_PREFERENCES"/>
-	</class>
-	<class name="android/preference/PreferenceManager$OnActivityDestroyListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onActivityDestroy()V"/>
-	</class>
-	<class name="android/preference/PreferenceManager$OnActivityResultListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onActivityResult(IILandroid/content/Intent;)Z"/>
-	</class>
-	<class name="android/preference/PreferenceManager$OnActivityStopListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onActivityStop()V"/>
-	</class>
-	<class name="android/preference/PreferenceScreen" since="1">
-		<extends name="android/preference/PreferenceGroup"/>
-		<implements name="android/content/DialogInterface$OnDismissListener"/>
-		<implements name="android/widget/AdapterView$OnItemClickListener"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="29"/>
-		<method name="bind(Landroid/widget/ListView;)V"/>
-		<method name="getDialog()Landroid/app/Dialog;"/>
-		<method name="getRootAdapter()Landroid/widget/ListAdapter;"/>
-		<method name="onCreateRootAdapter()Landroid/widget/ListAdapter;"/>
-	</class>
-	<class name="android/preference/RingtonePreference" since="1">
-		<extends name="android/preference/Preference"/>
-		<implements name="android/preference/PreferenceManager$OnActivityResultListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getRingtoneType()I"/>
-		<method name="getShowDefault()Z"/>
-		<method name="getShowSilent()Z"/>
-		<method name="onPrepareRingtonePickerIntent(Landroid/content/Intent;)V"/>
-		<method name="onRestoreRingtone()Landroid/net/Uri;"/>
-		<method name="onSaveRingtone(Landroid/net/Uri;)V"/>
-		<method name="setRingtoneType(I)V"/>
-		<method name="setShowDefault(Z)V"/>
-		<method name="setShowSilent(Z)V"/>
-	</class>
-	<class name="android/preference/SwitchPreference" since="14">
-		<extends name="android/preference/TwoStatePreference"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getSwitchTextOff()Ljava/lang/CharSequence;"/>
-		<method name="getSwitchTextOn()Ljava/lang/CharSequence;"/>
-		<method name="setSwitchTextOff(I)V"/>
-		<method name="setSwitchTextOff(Ljava/lang/CharSequence;)V"/>
-		<method name="setSwitchTextOn(I)V"/>
-		<method name="setSwitchTextOn(Ljava/lang/CharSequence;)V"/>
-	</class>
-	<class name="android/preference/TwoStatePreference" since="14">
-		<extends name="android/preference/Preference"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getDisableDependentsState()Z"/>
-		<method name="getSummaryOff()Ljava/lang/CharSequence;"/>
-		<method name="getSummaryOn()Ljava/lang/CharSequence;"/>
-		<method name="isChecked()Z"/>
-		<method name="setChecked(Z)V"/>
-		<method name="setDisableDependentsState(Z)V"/>
-		<method name="setSummaryOff(I)V"/>
-		<method name="setSummaryOff(Ljava/lang/CharSequence;)V"/>
-		<method name="setSummaryOn(I)V"/>
-		<method name="setSummaryOn(Ljava/lang/CharSequence;)V"/>
-	</class>
-	<class name="android/print/PageRange" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getEnd()I"/>
-		<method name="getStart()I"/>
-		<field name="ALL_PAGES"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/print/PrintAttributes" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getColorMode()I"/>
-		<method name="getDuplexMode()I" since="23"/>
-		<method name="getMediaSize()Landroid/print/PrintAttributes$MediaSize;"/>
-		<method name="getMinMargins()Landroid/print/PrintAttributes$Margins;"/>
-		<method name="getResolution()Landroid/print/PrintAttributes$Resolution;"/>
-		<field name="COLOR_MODE_COLOR"/>
-		<field name="COLOR_MODE_MONOCHROME"/>
-		<field name="CREATOR"/>
-		<field name="DUPLEX_MODE_LONG_EDGE" since="23"/>
-		<field name="DUPLEX_MODE_NONE" since="23"/>
-		<field name="DUPLEX_MODE_SHORT_EDGE" since="23"/>
-	</class>
-	<class name="android/print/PrintAttributes$Builder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/print/PrintAttributes;"/>
-		<method name="setColorMode(I)Landroid/print/PrintAttributes$Builder;"/>
-		<method name="setDuplexMode(I)Landroid/print/PrintAttributes$Builder;" since="23"/>
-		<method name="setMediaSize(Landroid/print/PrintAttributes$MediaSize;)Landroid/print/PrintAttributes$Builder;"/>
-		<method name="setMinMargins(Landroid/print/PrintAttributes$Margins;)Landroid/print/PrintAttributes$Builder;"/>
-		<method name="setResolution(Landroid/print/PrintAttributes$Resolution;)Landroid/print/PrintAttributes$Builder;"/>
-	</class>
-	<class name="android/print/PrintAttributes$Margins" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(IIII)V"/>
-		<method name="getBottomMils()I"/>
-		<method name="getLeftMils()I"/>
-		<method name="getRightMils()I"/>
-		<method name="getTopMils()I"/>
-		<field name="NO_MARGINS"/>
-	</class>
-	<class name="android/print/PrintAttributes$MediaSize" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;II)V"/>
-		<method name="asLandscape()Landroid/print/PrintAttributes$MediaSize;"/>
-		<method name="asPortrait()Landroid/print/PrintAttributes$MediaSize;"/>
-		<method name="getHeightMils()I"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getLabel(Landroid/content/pm/PackageManager;)Ljava/lang/String;"/>
-		<method name="getWidthMils()I"/>
-		<method name="isPortrait()Z"/>
-		<field name="ISO_A0"/>
-		<field name="ISO_A1"/>
-		<field name="ISO_A10"/>
-		<field name="ISO_A2"/>
-		<field name="ISO_A3"/>
-		<field name="ISO_A4"/>
-		<field name="ISO_A5"/>
-		<field name="ISO_A6"/>
-		<field name="ISO_A7"/>
-		<field name="ISO_A8"/>
-		<field name="ISO_A9"/>
-		<field name="ISO_B0"/>
-		<field name="ISO_B1"/>
-		<field name="ISO_B10"/>
-		<field name="ISO_B2"/>
-		<field name="ISO_B3"/>
-		<field name="ISO_B4"/>
-		<field name="ISO_B5"/>
-		<field name="ISO_B6"/>
-		<field name="ISO_B7"/>
-		<field name="ISO_B8"/>
-		<field name="ISO_B9"/>
-		<field name="ISO_C0"/>
-		<field name="ISO_C1"/>
-		<field name="ISO_C10"/>
-		<field name="ISO_C2"/>
-		<field name="ISO_C3"/>
-		<field name="ISO_C4"/>
-		<field name="ISO_C5"/>
-		<field name="ISO_C6"/>
-		<field name="ISO_C7"/>
-		<field name="ISO_C8"/>
-		<field name="ISO_C9"/>
-		<field name="JIS_B0"/>
-		<field name="JIS_B1"/>
-		<field name="JIS_B10"/>
-		<field name="JIS_B2"/>
-		<field name="JIS_B3"/>
-		<field name="JIS_B4"/>
-		<field name="JIS_B5"/>
-		<field name="JIS_B6"/>
-		<field name="JIS_B7"/>
-		<field name="JIS_B8"/>
-		<field name="JIS_B9"/>
-		<field name="JIS_EXEC"/>
-		<field name="JPN_CHOU2"/>
-		<field name="JPN_CHOU3"/>
-		<field name="JPN_CHOU4"/>
-		<field name="JPN_HAGAKI"/>
-		<field name="JPN_KAHU"/>
-		<field name="JPN_KAKU2"/>
-		<field name="JPN_OUFUKU"/>
-		<field name="JPN_YOU4"/>
-		<field name="NA_FOOLSCAP"/>
-		<field name="NA_GOVT_LETTER"/>
-		<field name="NA_INDEX_3X5"/>
-		<field name="NA_INDEX_4X6"/>
-		<field name="NA_INDEX_5X8"/>
-		<field name="NA_JUNIOR_LEGAL"/>
-		<field name="NA_LEDGER"/>
-		<field name="NA_LEGAL"/>
-		<field name="NA_LETTER"/>
-		<field name="NA_MONARCH"/>
-		<field name="NA_QUARTO"/>
-		<field name="NA_TABLOID"/>
-		<field name="OM_DAI_PA_KAI"/>
-		<field name="OM_JUURO_KU_KAI"/>
-		<field name="OM_PA_KAI"/>
-		<field name="PRC_1"/>
-		<field name="PRC_10"/>
-		<field name="PRC_16K"/>
-		<field name="PRC_2"/>
-		<field name="PRC_3"/>
-		<field name="PRC_4"/>
-		<field name="PRC_5"/>
-		<field name="PRC_6"/>
-		<field name="PRC_7"/>
-		<field name="PRC_8"/>
-		<field name="PRC_9"/>
-		<field name="ROC_16K"/>
-		<field name="ROC_8K"/>
-		<field name="UNKNOWN_LANDSCAPE"/>
-		<field name="UNKNOWN_PORTRAIT"/>
-	</class>
-	<class name="android/print/PrintAttributes$Resolution" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;II)V"/>
-		<method name="getHorizontalDpi()I"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getLabel()Ljava/lang/String;"/>
-		<method name="getVerticalDpi()I"/>
-	</class>
-	<class name="android/print/PrintDocumentAdapter" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFinish()V"/>
-		<method name="onLayout(Landroid/print/PrintAttributes;Landroid/print/PrintAttributes;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$LayoutResultCallback;Landroid/os/Bundle;)V"/>
-		<method name="onStart()V"/>
-		<method name="onWrite([Landroid/print/PageRange;Landroid/os/ParcelFileDescriptor;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$WriteResultCallback;)V"/>
-		<field name="EXTRA_PRINT_PREVIEW"/>
-	</class>
-	<class name="android/print/PrintDocumentAdapter$LayoutResultCallback" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onLayoutCancelled()V"/>
-		<method name="onLayoutFailed(Ljava/lang/CharSequence;)V"/>
-		<method name="onLayoutFinished(Landroid/print/PrintDocumentInfo;Z)V"/>
-	</class>
-	<class name="android/print/PrintDocumentAdapter$WriteResultCallback" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onWriteCancelled()V"/>
-		<method name="onWriteFailed(Ljava/lang/CharSequence;)V"/>
-		<method name="onWriteFinished([Landroid/print/PageRange;)V"/>
-	</class>
-	<class name="android/print/PrintDocumentInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentType()I"/>
-		<method name="getDataSize()J"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPageCount()I"/>
-		<field name="CONTENT_TYPE_DOCUMENT"/>
-		<field name="CONTENT_TYPE_PHOTO"/>
-		<field name="CONTENT_TYPE_UNKNOWN"/>
-		<field name="CREATOR"/>
-		<field name="PAGE_COUNT_UNKNOWN"/>
-	</class>
-	<class name="android/print/PrintDocumentInfo$Builder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="build()Landroid/print/PrintDocumentInfo;"/>
-		<method name="setContentType(I)Landroid/print/PrintDocumentInfo$Builder;"/>
-		<method name="setPageCount(I)Landroid/print/PrintDocumentInfo$Builder;"/>
-	</class>
-	<class name="android/print/PrintJob" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/print/PrintJobInfo;Landroid/print/PrintManager;)V" since="29"/>
-		<method name="cancel()V"/>
-		<method name="getId()Landroid/print/PrintJobId;"/>
-		<method name="getInfo()Landroid/print/PrintJobInfo;"/>
-		<method name="isBlocked()Z"/>
-		<method name="isCancelled()Z"/>
-		<method name="isCompleted()Z"/>
-		<method name="isFailed()Z"/>
-		<method name="isQueued()Z"/>
-		<method name="isStarted()Z"/>
-		<method name="restart()V"/>
-	</class>
-	<class name="android/print/PrintJobId" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/print/PrintJobInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAdvancedIntOption(Ljava/lang/String;)I" since="26"/>
-		<method name="getAdvancedStringOption(Ljava/lang/String;)Ljava/lang/String;" since="26"/>
-		<method name="getAttributes()Landroid/print/PrintAttributes;"/>
-		<method name="getCopies()I"/>
-		<method name="getCreationTime()J"/>
-		<method name="getId()Landroid/print/PrintJobId;"/>
-		<method name="getLabel()Ljava/lang/String;"/>
-		<method name="getPages()[Landroid/print/PageRange;"/>
-		<method name="getPrinterId()Landroid/print/PrinterId;"/>
-		<method name="getState()I"/>
-		<method name="hasAdvancedOption(Ljava/lang/String;)Z" since="26"/>
-		<field name="CREATOR"/>
-		<field name="STATE_BLOCKED"/>
-		<field name="STATE_CANCELED"/>
-		<field name="STATE_COMPLETED"/>
-		<field name="STATE_CREATED"/>
-		<field name="STATE_FAILED"/>
-		<field name="STATE_QUEUED"/>
-		<field name="STATE_STARTED"/>
-	</class>
-	<class name="android/print/PrintJobInfo$Builder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/print/PrintJobInfo;)V"/>
-		<method name="build()Landroid/print/PrintJobInfo;"/>
-		<method name="putAdvancedOption(Ljava/lang/String;I)V"/>
-		<method name="putAdvancedOption(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setAttributes(Landroid/print/PrintAttributes;)V"/>
-		<method name="setCopies(I)V"/>
-		<method name="setPages([Landroid/print/PageRange;)V"/>
-	</class>
-	<class name="android/print/PrintManager" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getPrintJobs()Ljava/util/List;"/>
-		<method name="print(Ljava/lang/String;Landroid/print/PrintDocumentAdapter;Landroid/print/PrintAttributes;)Landroid/print/PrintJob;"/>
-	</class>
-	<class name="android/print/PrinterCapabilitiesInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getColorModes()I"/>
-		<method name="getDefaults()Landroid/print/PrintAttributes;"/>
-		<method name="getDuplexModes()I" since="23"/>
-		<method name="getMediaSizes()Ljava/util/List;"/>
-		<method name="getMinMargins()Landroid/print/PrintAttributes$Margins;"/>
-		<method name="getResolutions()Ljava/util/List;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/print/PrinterCapabilitiesInfo$Builder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/print/PrinterId;)V"/>
-		<method name="addMediaSize(Landroid/print/PrintAttributes$MediaSize;Z)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
-		<method name="addResolution(Landroid/print/PrintAttributes$Resolution;Z)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
-		<method name="build()Landroid/print/PrinterCapabilitiesInfo;"/>
-		<method name="setColorModes(II)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
-		<method name="setDuplexModes(II)Landroid/print/PrinterCapabilitiesInfo$Builder;" since="23"/>
-		<method name="setMinMargins(Landroid/print/PrintAttributes$Margins;)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
-	</class>
-	<class name="android/print/PrinterId" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getLocalId()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/print/PrinterInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getCapabilities()Landroid/print/PrinterCapabilitiesInfo;"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getId()Landroid/print/PrinterId;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getStatus()I"/>
-		<field name="CREATOR"/>
-		<field name="STATUS_BUSY"/>
-		<field name="STATUS_IDLE"/>
-		<field name="STATUS_UNAVAILABLE"/>
-	</class>
-	<class name="android/print/PrinterInfo$Builder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/print/PrinterId;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Landroid/print/PrinterInfo;)V"/>
-		<method name="build()Landroid/print/PrinterInfo;"/>
-		<method name="setCapabilities(Landroid/print/PrinterCapabilitiesInfo;)Landroid/print/PrinterInfo$Builder;"/>
-		<method name="setDescription(Ljava/lang/String;)Landroid/print/PrinterInfo$Builder;"/>
-		<method name="setHasCustomPrinterIcon(Z)Landroid/print/PrinterInfo$Builder;" since="24"/>
-		<method name="setIconResourceId(I)Landroid/print/PrinterInfo$Builder;" since="24"/>
-		<method name="setInfoIntent(Landroid/app/PendingIntent;)Landroid/print/PrinterInfo$Builder;" since="24"/>
-		<method name="setName(Ljava/lang/String;)Landroid/print/PrinterInfo$Builder;"/>
-		<method name="setStatus(I)Landroid/print/PrinterInfo$Builder;"/>
-	</class>
-	<class name="android/print/pdf/PrintedPdfDocument" since="19">
-		<extends name="android/graphics/pdf/PdfDocument"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/print/PrintAttributes;)V"/>
-		<method name="getPageContentRect()Landroid/graphics/Rect;"/>
-		<method name="getPageHeight()I"/>
-		<method name="getPageWidth()I"/>
-		<method name="startPage(I)Landroid/graphics/pdf/PdfDocument$Page;"/>
-	</class>
-	<class name="android/printservice/CustomPrinterIconCallback" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCustomPrinterIconLoaded(Landroid/graphics/drawable/Icon;)Z"/>
-	</class>
-	<class name="android/printservice/PrintDocument" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getData()Landroid/os/ParcelFileDescriptor;"/>
-		<method name="getInfo()Landroid/print/PrintDocumentInfo;"/>
-	</class>
-	<class name="android/printservice/PrintJob" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="block(Ljava/lang/String;)Z"/>
-		<method name="cancel()Z"/>
-		<method name="complete()Z"/>
-		<method name="fail(Ljava/lang/String;)Z"/>
-		<method name="getAdvancedIntOption(Ljava/lang/String;)I"/>
-		<method name="getAdvancedStringOption(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getDocument()Landroid/printservice/PrintDocument;"/>
-		<method name="getId()Landroid/print/PrintJobId;"/>
-		<method name="getInfo()Landroid/print/PrintJobInfo;"/>
-		<method name="getTag()Ljava/lang/String;"/>
-		<method name="hasAdvancedOption(Ljava/lang/String;)Z"/>
-		<method name="isBlocked()Z"/>
-		<method name="isCancelled()Z"/>
-		<method name="isCompleted()Z"/>
-		<method name="isFailed()Z"/>
-		<method name="isQueued()Z"/>
-		<method name="isStarted()Z"/>
-		<method name="setProgress(F)V" since="24"/>
-		<method name="setStatus(I)V" since="24"/>
-		<method name="setStatus(Ljava/lang/CharSequence;)V" since="24"/>
-		<method name="setTag(Ljava/lang/String;)Z"/>
-		<method name="start()Z"/>
-	</class>
-	<class name="android/printservice/PrintService" since="19">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="generatePrinterId(Ljava/lang/String;)Landroid/print/PrinterId;"/>
-		<method name="getActivePrintJobs()Ljava/util/List;"/>
-		<method name="onConnected()V"/>
-		<method name="onCreatePrinterDiscoverySession()Landroid/printservice/PrinterDiscoverySession;"/>
-		<method name="onDisconnected()V"/>
-		<method name="onPrintJobQueued(Landroid/printservice/PrintJob;)V"/>
-		<method name="onRequestCancelPrintJob(Landroid/printservice/PrintJob;)V"/>
-		<field name="EXTRA_CAN_SELECT_PRINTER" since="26"/>
-		<field name="EXTRA_PRINTER_INFO" since="21"/>
-		<field name="EXTRA_PRINT_DOCUMENT_INFO" since="23"/>
-		<field name="EXTRA_PRINT_JOB_INFO"/>
-		<field name="EXTRA_SELECT_PRINTER" since="26"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/printservice/PrinterDiscoverySession" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPrinters(Ljava/util/List;)V"/>
-		<method name="getPrinters()Ljava/util/List;"/>
-		<method name="getTrackedPrinters()Ljava/util/List;"/>
-		<method name="isDestroyed()Z"/>
-		<method name="isPrinterDiscoveryStarted()Z"/>
-		<method name="onDestroy()V"/>
-		<method name="onRequestCustomPrinterIcon(Landroid/print/PrinterId;Landroid/os/CancellationSignal;Landroid/printservice/CustomPrinterIconCallback;)V" since="24"/>
-		<method name="onStartPrinterDiscovery(Ljava/util/List;)V"/>
-		<method name="onStartPrinterStateTracking(Landroid/print/PrinterId;)V"/>
-		<method name="onStopPrinterDiscovery()V"/>
-		<method name="onStopPrinterStateTracking(Landroid/print/PrinterId;)V"/>
-		<method name="onValidatePrinters(Ljava/util/List;)V"/>
-		<method name="removePrinters(Ljava/util/List;)V"/>
-	</class>
-	<class name="android/provider/AlarmClock" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACTION_DISMISS_ALARM" since="23"/>
-		<field name="ACTION_DISMISS_TIMER" since="28"/>
-		<field name="ACTION_SET_ALARM"/>
-		<field name="ACTION_SET_TIMER" since="19"/>
-		<field name="ACTION_SHOW_ALARMS" since="19"/>
-		<field name="ACTION_SHOW_TIMERS" since="26"/>
-		<field name="ACTION_SNOOZE_ALARM" since="23"/>
-		<field name="ALARM_SEARCH_MODE_ALL" since="23"/>
-		<field name="ALARM_SEARCH_MODE_LABEL" since="23"/>
-		<field name="ALARM_SEARCH_MODE_NEXT" since="23"/>
-		<field name="ALARM_SEARCH_MODE_TIME" since="23"/>
-		<field name="EXTRA_ALARM_SEARCH_MODE" since="23"/>
-		<field name="EXTRA_ALARM_SNOOZE_DURATION" since="23"/>
-		<field name="EXTRA_DAYS" since="19"/>
-		<field name="EXTRA_HOUR"/>
-		<field name="EXTRA_IS_PM" since="23"/>
-		<field name="EXTRA_LENGTH" since="19"/>
-		<field name="EXTRA_MESSAGE"/>
-		<field name="EXTRA_MINUTES"/>
-		<field name="EXTRA_RINGTONE" since="19"/>
-		<field name="EXTRA_SKIP_UI" since="11"/>
-		<field name="EXTRA_VIBRATE" since="19"/>
-		<field name="VALUE_RINGTONE_SILENT" since="19"/>
-	</class>
-	<class name="android/provider/BaseColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="_COUNT"/>
-		<field name="_ID"/>
-	</class>
-	<class name="android/provider/BlockedNumberContract" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="canCurrentUserBlockNumbers(Landroid/content/Context;)Z"/>
-		<method name="isBlocked(Landroid/content/Context;Ljava/lang/String;)Z"/>
-		<method name="unblock(Landroid/content/Context;Ljava/lang/String;)I"/>
-		<field name="AUTHORITY"/>
-		<field name="AUTHORITY_URI"/>
-	</class>
-	<class name="android/provider/BlockedNumberContract$BlockedNumbers" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="COLUMN_E164_NUMBER"/>
-		<field name="COLUMN_ID"/>
-		<field name="COLUMN_ORIGINAL_NUMBER"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/Browser" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addSearchUrl(Landroid/content/ContentResolver;Ljava/lang/String;)V" removed="23"/>
-		<method name="canClearHistory(Landroid/content/ContentResolver;)Z" removed="23"/>
-		<method name="clearHistory(Landroid/content/ContentResolver;)V" removed="23"/>
-		<method name="clearSearches(Landroid/content/ContentResolver;)V" removed="23"/>
-		<method name="deleteFromHistory(Landroid/content/ContentResolver;Ljava/lang/String;)V" removed="23"/>
-		<method name="deleteHistoryTimeFrame(Landroid/content/ContentResolver;JJ)V" removed="23"/>
-		<method name="getAllBookmarks(Landroid/content/ContentResolver;)Landroid/database/Cursor;" removed="23"/>
-		<method name="getAllVisitedUrls(Landroid/content/ContentResolver;)Landroid/database/Cursor;" removed="23"/>
-		<method name="requestAllIcons(Landroid/content/ContentResolver;Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V" removed="23"/>
-		<method name="saveBookmark(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V" removed="23"/>
-		<method name="sendString(Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="truncateHistory(Landroid/content/ContentResolver;)V" removed="23"/>
-		<method name="updateVisitedHistory(Landroid/content/ContentResolver;Ljava/lang/String;Z)V" removed="23"/>
-		<field name="BOOKMARKS_URI" removed="23"/>
-		<field name="EXTRA_APPLICATION_ID" since="3"/>
-		<field name="EXTRA_CREATE_NEW_TAB" since="12"/>
-		<field name="EXTRA_HEADERS" since="8"/>
-		<field name="HISTORY_PROJECTION" removed="23"/>
-		<field name="HISTORY_PROJECTION_BOOKMARK_INDEX" removed="23"/>
-		<field name="HISTORY_PROJECTION_DATE_INDEX" removed="23"/>
-		<field name="HISTORY_PROJECTION_FAVICON_INDEX" removed="23"/>
-		<field name="HISTORY_PROJECTION_ID_INDEX" removed="23"/>
-		<field name="HISTORY_PROJECTION_TITLE_INDEX" removed="23"/>
-		<field name="HISTORY_PROJECTION_URL_INDEX" removed="23"/>
-		<field name="HISTORY_PROJECTION_VISITS_INDEX" removed="23"/>
-		<field name="INITIAL_ZOOM_LEVEL"/>
-		<field name="SEARCHES_PROJECTION" removed="23"/>
-		<field name="SEARCHES_PROJECTION_DATE_INDEX" removed="23"/>
-		<field name="SEARCHES_PROJECTION_SEARCH_INDEX" removed="23"/>
-		<field name="SEARCHES_URI" removed="23"/>
-		<field name="TRUNCATE_HISTORY_PROJECTION" removed="23"/>
-		<field name="TRUNCATE_HISTORY_PROJECTION_ID_INDEX" removed="23"/>
-		<field name="TRUNCATE_N_OLDEST" removed="23"/>
-	</class>
-	<class name="android/provider/Browser$BookmarkColumns" since="1" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="BOOKMARK"/>
-		<field name="CREATED"/>
-		<field name="DATE"/>
-		<field name="FAVICON"/>
-		<field name="TITLE"/>
-		<field name="URL"/>
-		<field name="VISITS"/>
-	</class>
-	<class name="android/provider/Browser$SearchColumns" since="1" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="DATE"/>
-		<field name="SEARCH"/>
-		<field name="URL" deprecated="16"/>
-	</class>
-	<class name="android/provider/CalendarContract" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACCOUNT_TYPE_LOCAL"/>
-		<field name="ACTION_EVENT_REMINDER"/>
-		<field name="ACTION_HANDLE_CUSTOM_EVENT" since="16"/>
-		<field name="AUTHORITY"/>
-		<field name="CALLER_IS_SYNCADAPTER"/>
-		<field name="CONTENT_URI"/>
-		<field name="EXTRA_CUSTOM_APP_URI" since="16"/>
-		<field name="EXTRA_EVENT_ALL_DAY"/>
-		<field name="EXTRA_EVENT_BEGIN_TIME"/>
-		<field name="EXTRA_EVENT_END_TIME"/>
-	</class>
-	<class name="android/provider/CalendarContract$Attendees" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$AttendeesColumns"/>
-		<implements name="android/provider/CalendarContract$EventsColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$AttendeesColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="ATTENDEE_EMAIL"/>
-		<field name="ATTENDEE_IDENTITY" since="16"/>
-		<field name="ATTENDEE_ID_NAMESPACE" since="16"/>
-		<field name="ATTENDEE_NAME"/>
-		<field name="ATTENDEE_RELATIONSHIP"/>
-		<field name="ATTENDEE_STATUS"/>
-		<field name="ATTENDEE_STATUS_ACCEPTED"/>
-		<field name="ATTENDEE_STATUS_DECLINED"/>
-		<field name="ATTENDEE_STATUS_INVITED"/>
-		<field name="ATTENDEE_STATUS_NONE"/>
-		<field name="ATTENDEE_STATUS_TENTATIVE"/>
-		<field name="ATTENDEE_TYPE"/>
-		<field name="EVENT_ID"/>
-		<field name="RELATIONSHIP_ATTENDEE"/>
-		<field name="RELATIONSHIP_NONE"/>
-		<field name="RELATIONSHIP_ORGANIZER"/>
-		<field name="RELATIONSHIP_PERFORMER"/>
-		<field name="RELATIONSHIP_SPEAKER"/>
-		<field name="TYPE_NONE"/>
-		<field name="TYPE_OPTIONAL"/>
-		<field name="TYPE_REQUIRED"/>
-		<field name="TYPE_RESOURCE" since="15"/>
-	</class>
-	<class name="android/provider/CalendarContract$CalendarAlerts" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$CalendarAlertsColumns"/>
-		<implements name="android/provider/CalendarContract$CalendarColumns"/>
-		<implements name="android/provider/CalendarContract$EventsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="CONTENT_URI_BY_INSTANCE"/>
-	</class>
-	<class name="android/provider/CalendarContract$CalendarAlertsColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="ALARM_TIME"/>
-		<field name="BEGIN"/>
-		<field name="CREATION_TIME"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="END"/>
-		<field name="EVENT_ID"/>
-		<field name="MINUTES"/>
-		<field name="NOTIFY_TIME"/>
-		<field name="RECEIVED_TIME"/>
-		<field name="STATE"/>
-		<field name="STATE_DISMISSED"/>
-		<field name="STATE_FIRED"/>
-		<field name="STATE_SCHEDULED"/>
-	</class>
-	<class name="android/provider/CalendarContract$CalendarCache" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/CalendarContract$CalendarCacheColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="KEY_TIMEZONE_INSTANCES"/>
-		<field name="KEY_TIMEZONE_INSTANCES_PREVIOUS"/>
-		<field name="KEY_TIMEZONE_TYPE"/>
-		<field name="TIMEZONE_TYPE_AUTO"/>
-		<field name="TIMEZONE_TYPE_HOME"/>
-		<field name="URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$CalendarCacheColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="KEY"/>
-		<field name="VALUE"/>
-	</class>
-	<class name="android/provider/CalendarContract$CalendarColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="ALLOWED_ATTENDEE_TYPES" since="15"/>
-		<field name="ALLOWED_AVAILABILITY" since="15"/>
-		<field name="ALLOWED_REMINDERS"/>
-		<field name="CALENDAR_ACCESS_LEVEL"/>
-		<field name="CALENDAR_COLOR"/>
-		<field name="CALENDAR_COLOR_KEY" since="15"/>
-		<field name="CALENDAR_DISPLAY_NAME"/>
-		<field name="CALENDAR_TIME_ZONE"/>
-		<field name="CAL_ACCESS_CONTRIBUTOR"/>
-		<field name="CAL_ACCESS_EDITOR"/>
-		<field name="CAL_ACCESS_FREEBUSY"/>
-		<field name="CAL_ACCESS_NONE"/>
-		<field name="CAL_ACCESS_OVERRIDE"/>
-		<field name="CAL_ACCESS_OWNER"/>
-		<field name="CAL_ACCESS_READ"/>
-		<field name="CAL_ACCESS_RESPOND"/>
-		<field name="CAL_ACCESS_ROOT"/>
-		<field name="CAN_MODIFY_TIME_ZONE"/>
-		<field name="CAN_ORGANIZER_RESPOND"/>
-		<field name="IS_PRIMARY" since="17"/>
-		<field name="MAX_REMINDERS"/>
-		<field name="OWNER_ACCOUNT"/>
-		<field name="SYNC_EVENTS"/>
-		<field name="VISIBLE"/>
-	</class>
-	<class name="android/provider/CalendarContract$CalendarEntity" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$CalendarColumns"/>
-		<implements name="android/provider/CalendarContract$SyncColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$CalendarSyncColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="CAL_SYNC1"/>
-		<field name="CAL_SYNC10"/>
-		<field name="CAL_SYNC2"/>
-		<field name="CAL_SYNC3"/>
-		<field name="CAL_SYNC4"/>
-		<field name="CAL_SYNC5"/>
-		<field name="CAL_SYNC6"/>
-		<field name="CAL_SYNC7"/>
-		<field name="CAL_SYNC8"/>
-		<field name="CAL_SYNC9"/>
-	</class>
-	<class name="android/provider/CalendarContract$Calendars" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$CalendarColumns"/>
-		<implements name="android/provider/CalendarContract$SyncColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CALENDAR_LOCATION"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="NAME"/>
-	</class>
-	<class name="android/provider/CalendarContract$Colors" since="15">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/CalendarContract$ColorsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$ColorsColumns" since="15">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/SyncStateContract$Columns"/>
-		<field name="COLOR"/>
-		<field name="COLOR_KEY"/>
-		<field name="COLOR_TYPE"/>
-		<field name="TYPE_CALENDAR"/>
-		<field name="TYPE_EVENT"/>
-	</class>
-	<class name="android/provider/CalendarContract$EventDays" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/CalendarContract$EventDaysColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="query(Landroid/content/ContentResolver;II[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$EventDaysColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="ENDDAY"/>
-		<field name="STARTDAY"/>
-	</class>
-	<class name="android/provider/CalendarContract$Events" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$CalendarColumns"/>
-		<implements name="android/provider/CalendarContract$EventsColumns"/>
-		<implements name="android/provider/CalendarContract$SyncColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_EXCEPTION_URI"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$EventsColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="ACCESS_CONFIDENTIAL"/>
-		<field name="ACCESS_DEFAULT"/>
-		<field name="ACCESS_LEVEL"/>
-		<field name="ACCESS_PRIVATE"/>
-		<field name="ACCESS_PUBLIC"/>
-		<field name="ALL_DAY"/>
-		<field name="AVAILABILITY"/>
-		<field name="AVAILABILITY_BUSY"/>
-		<field name="AVAILABILITY_FREE"/>
-		<field name="AVAILABILITY_TENTATIVE" since="15"/>
-		<field name="CALENDAR_ID"/>
-		<field name="CAN_INVITE_OTHERS"/>
-		<field name="CUSTOM_APP_PACKAGE" since="16"/>
-		<field name="CUSTOM_APP_URI" since="16"/>
-		<field name="DESCRIPTION"/>
-		<field name="DISPLAY_COLOR" since="16"/>
-		<field name="DTEND"/>
-		<field name="DTSTART"/>
-		<field name="DURATION"/>
-		<field name="EVENT_COLOR"/>
-		<field name="EVENT_COLOR_KEY" since="15"/>
-		<field name="EVENT_END_TIMEZONE"/>
-		<field name="EVENT_LOCATION"/>
-		<field name="EVENT_TIMEZONE"/>
-		<field name="EXDATE"/>
-		<field name="EXRULE"/>
-		<field name="GUESTS_CAN_INVITE_OTHERS"/>
-		<field name="GUESTS_CAN_MODIFY"/>
-		<field name="GUESTS_CAN_SEE_GUESTS"/>
-		<field name="HAS_ALARM"/>
-		<field name="HAS_ATTENDEE_DATA"/>
-		<field name="HAS_EXTENDED_PROPERTIES"/>
-		<field name="IS_ORGANIZER" since="17"/>
-		<field name="LAST_DATE"/>
-		<field name="LAST_SYNCED"/>
-		<field name="ORGANIZER"/>
-		<field name="ORIGINAL_ALL_DAY"/>
-		<field name="ORIGINAL_ID"/>
-		<field name="ORIGINAL_INSTANCE_TIME"/>
-		<field name="ORIGINAL_SYNC_ID"/>
-		<field name="RDATE"/>
-		<field name="RRULE"/>
-		<field name="SELF_ATTENDEE_STATUS"/>
-		<field name="STATUS"/>
-		<field name="STATUS_CANCELED"/>
-		<field name="STATUS_CONFIRMED"/>
-		<field name="STATUS_TENTATIVE"/>
-		<field name="SYNC_DATA1"/>
-		<field name="SYNC_DATA10"/>
-		<field name="SYNC_DATA2"/>
-		<field name="SYNC_DATA3"/>
-		<field name="SYNC_DATA4"/>
-		<field name="SYNC_DATA5"/>
-		<field name="SYNC_DATA6"/>
-		<field name="SYNC_DATA7"/>
-		<field name="SYNC_DATA8"/>
-		<field name="SYNC_DATA9"/>
-		<field name="TITLE"/>
-		<field name="UID_2445" since="17"/>
-	</class>
-	<class name="android/provider/CalendarContract$EventsEntity" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$EventsColumns"/>
-		<implements name="android/provider/CalendarContract$SyncColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentProviderClient;)Landroid/content/EntityIterator;"/>
-		<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentResolver;)Landroid/content/EntityIterator;"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$ExtendedProperties" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$EventsColumns"/>
-		<implements name="android/provider/CalendarContract$ExtendedPropertiesColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$ExtendedPropertiesColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="EVENT_ID"/>
-		<field name="NAME"/>
-		<field name="VALUE"/>
-	</class>
-	<class name="android/provider/CalendarContract$Instances" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$CalendarColumns"/>
-		<implements name="android/provider/CalendarContract$EventsColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJ)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJLjava/lang/String;)Landroid/database/Cursor;"/>
-		<field name="BEGIN"/>
-		<field name="CONTENT_BY_DAY_URI"/>
-		<field name="CONTENT_SEARCH_BY_DAY_URI"/>
-		<field name="CONTENT_SEARCH_URI"/>
-		<field name="CONTENT_URI"/>
-		<field name="END"/>
-		<field name="END_DAY"/>
-		<field name="END_MINUTE"/>
-		<field name="EVENT_ID"/>
-		<field name="START_DAY"/>
-		<field name="START_MINUTE"/>
-	</class>
-	<class name="android/provider/CalendarContract$Reminders" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/CalendarContract$EventsColumns"/>
-		<implements name="android/provider/CalendarContract$RemindersColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CalendarContract$RemindersColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<field name="EVENT_ID"/>
-		<field name="METHOD"/>
-		<field name="METHOD_ALARM" since="16"/>
-		<field name="METHOD_ALERT"/>
-		<field name="METHOD_DEFAULT"/>
-		<field name="METHOD_EMAIL"/>
-		<field name="METHOD_SMS"/>
-		<field name="MINUTES"/>
-		<field name="MINUTES_DEFAULT"/>
-	</class>
-	<class name="android/provider/CalendarContract$SyncColumns" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/CalendarContract$CalendarSyncColumns"/>
-		<field name="ACCOUNT_NAME"/>
-		<field name="ACCOUNT_TYPE"/>
-		<field name="CAN_PARTIALLY_UPDATE"/>
-		<field name="DELETED"/>
-		<field name="DIRTY"/>
-		<field name="MUTATORS" since="18"/>
-		<field name="_SYNC_ID"/>
-	</class>
-	<class name="android/provider/CalendarContract$SyncState" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/SyncStateContract$Columns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CallLog" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUTHORITY"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/CallLog$Calls" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getLastOutgoingCall(Landroid/content/Context;)Ljava/lang/String;" since="8"/>
-		<field name="ANSWERED_EXTERNALLY_TYPE" since="25"/>
-		<field name="BLOCKED_TYPE" since="24"/>
-		<field name="CACHED_FORMATTED_NUMBER" since="21"/>
-		<field name="CACHED_LOOKUP_URI" since="21"/>
-		<field name="CACHED_MATCHED_NUMBER" since="21"/>
-		<field name="CACHED_NAME"/>
-		<field name="CACHED_NORMALIZED_NUMBER" since="21"/>
-		<field name="CACHED_NUMBER_LABEL"/>
-		<field name="CACHED_NUMBER_TYPE"/>
-		<field name="CACHED_PHOTO_ID" since="21"/>
-		<field name="CACHED_PHOTO_URI" since="23"/>
-		<field name="CONTENT_FILTER_URI"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="CONTENT_URI_WITH_VOICEMAIL" since="21"/>
-		<field name="COUNTRY_ISO" since="21"/>
-		<field name="DATA_USAGE" since="21"/>
-		<field name="DATE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="DURATION"/>
-		<field name="EXTRA_CALL_TYPE_FILTER" since="21"/>
-		<field name="FEATURES" since="21"/>
-		<field name="FEATURES_HD_CALL" since="26"/>
-		<field name="FEATURES_PULLED_EXTERNALLY" since="25"/>
-		<field name="FEATURES_RTT" since="28"/>
-		<field name="FEATURES_VIDEO" since="21"/>
-		<field name="FEATURES_WIFI" since="26"/>
-		<field name="GEOCODED_LOCATION" since="21"/>
-		<field name="INCOMING_TYPE"/>
-		<field name="IS_READ" since="14"/>
-		<field name="LAST_MODIFIED" since="24"/>
-		<field name="LIMIT_PARAM_KEY" since="17"/>
-		<field name="MISSED_TYPE"/>
-		<field name="NEW"/>
-		<field name="NUMBER"/>
-		<field name="NUMBER_PRESENTATION" since="19"/>
-		<field name="OFFSET_PARAM_KEY" since="17"/>
-		<field name="OUTGOING_TYPE"/>
-		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="21"/>
-		<field name="PHONE_ACCOUNT_ID" since="21"/>
-		<field name="POST_DIAL_DIGITS" since="24"/>
-		<field name="PRESENTATION_ALLOWED" since="19"/>
-		<field name="PRESENTATION_PAYPHONE" since="19"/>
-		<field name="PRESENTATION_RESTRICTED" since="19"/>
-		<field name="PRESENTATION_UNKNOWN" since="19"/>
-		<field name="REJECTED_TYPE" since="24"/>
-		<field name="TRANSCRIPTION" since="21"/>
-		<field name="TYPE"/>
-		<field name="VIA_NUMBER" since="24"/>
-		<field name="VOICEMAIL_TYPE" since="21"/>
-		<field name="VOICEMAIL_URI" since="21"/>
-	</class>
-	<class name="android/provider/Contacts" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUTHORITY" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="KIND_EMAIL" deprecated="16"/>
-		<field name="KIND_IM" deprecated="16"/>
-		<field name="KIND_ORGANIZATION" deprecated="16"/>
-		<field name="KIND_PHONE" deprecated="16"/>
-		<field name="KIND_POSTAL" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$ContactMethods" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$ContactMethodsColumns"/>
-		<implements name="android/provider/Contacts$PeopleColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPostalLocation(Landroid/content/Context;JDD)V" deprecated="16"/>
-		<method name="decodeImProtocol(Ljava/lang/String;)Ljava/lang/Object;" deprecated="16"/>
-		<method name="encodeCustomImProtocol(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="encodePredefinedImProtocol(I)Ljava/lang/String;" deprecated="16"/>
-		<method name="getDisplayLabel(Landroid/content/Context;IILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
-		<field name="CONTENT_EMAIL_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_EMAIL_TYPE" deprecated="16"/>
-		<field name="CONTENT_EMAIL_URI" deprecated="16"/>
-		<field name="CONTENT_IM_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_POSTAL_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_POSTAL_TYPE" deprecated="16"/>
-		<field name="CONTENT_TYPE" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="PERSON_ID" deprecated="16"/>
-		<field name="POSTAL_LOCATION_LATITUDE" deprecated="16"/>
-		<field name="POSTAL_LOCATION_LONGITUDE" deprecated="16"/>
-		<field name="PROTOCOL_AIM" deprecated="16"/>
-		<field name="PROTOCOL_GOOGLE_TALK" deprecated="16"/>
-		<field name="PROTOCOL_ICQ" deprecated="16"/>
-		<field name="PROTOCOL_JABBER" deprecated="16"/>
-		<field name="PROTOCOL_MSN" deprecated="16"/>
-		<field name="PROTOCOL_QQ" deprecated="16"/>
-		<field name="PROTOCOL_SKYPE" deprecated="16"/>
-		<field name="PROTOCOL_YAHOO" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$ContactMethodsColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="AUX_DATA" deprecated="16"/>
-		<field name="DATA" deprecated="16"/>
-		<field name="ISPRIMARY" deprecated="16"/>
-		<field name="KIND" deprecated="16"/>
-		<field name="LABEL" deprecated="16"/>
-		<field name="TYPE" deprecated="16"/>
-		<field name="TYPE_CUSTOM" deprecated="16"/>
-		<field name="TYPE_HOME" deprecated="16"/>
-		<field name="TYPE_OTHER" deprecated="16"/>
-		<field name="TYPE_WORK" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Extensions" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$ExtensionsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_TYPE" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="PERSON_ID" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$ExtensionsColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="NAME" deprecated="16"/>
-		<field name="VALUE" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$GroupMembership" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$GroupsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY" deprecated="16"/>
-		<field name="CONTENT_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_TYPE" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="GROUP_ID" deprecated="16"/>
-		<field name="GROUP_SYNC_ACCOUNT" deprecated="16"/>
-		<field name="GROUP_SYNC_ACCOUNT_TYPE" since="5" deprecated="16"/>
-		<field name="GROUP_SYNC_ID" deprecated="16"/>
-		<field name="PERSON_ID" deprecated="16"/>
-		<field name="RAW_CONTENT_URI" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Groups" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$GroupsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_TYPE" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="DELETED_CONTENT_URI" deprecated="16"/>
-		<field name="GROUP_ANDROID_STARRED" deprecated="16"/>
-		<field name="GROUP_MY_CONTACTS" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$GroupsColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="NAME" deprecated="16"/>
-		<field name="NOTES" deprecated="16"/>
-		<field name="SHOULD_SYNC" deprecated="16"/>
-		<field name="SYSTEM_ID" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Intents" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="ATTACH_IMAGE" deprecated="16"/>
-		<field name="EXTRA_CREATE_DESCRIPTION" since="3" deprecated="16"/>
-		<field name="EXTRA_FORCE_CREATE" since="3" deprecated="16"/>
-		<field name="SEARCH_SUGGESTION_CLICKED" deprecated="16"/>
-		<field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED" deprecated="16"/>
-		<field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED" deprecated="16"/>
-		<field name="SHOW_OR_CREATE_CONTACT" since="3" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Intents$Insert" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="ACTION" deprecated="16"/>
-		<field name="COMPANY" deprecated="16"/>
-		<field name="EMAIL" deprecated="16"/>
-		<field name="EMAIL_ISPRIMARY" deprecated="16"/>
-		<field name="EMAIL_TYPE" deprecated="16"/>
-		<field name="FULL_MODE" deprecated="16"/>
-		<field name="IM_HANDLE" deprecated="16"/>
-		<field name="IM_ISPRIMARY" deprecated="16"/>
-		<field name="IM_PROTOCOL" deprecated="16"/>
-		<field name="JOB_TITLE" deprecated="16"/>
-		<field name="NAME" deprecated="16"/>
-		<field name="NOTES" deprecated="16"/>
-		<field name="PHONE" deprecated="16"/>
-		<field name="PHONETIC_NAME" since="3" deprecated="16"/>
-		<field name="PHONE_ISPRIMARY" deprecated="16"/>
-		<field name="PHONE_TYPE" deprecated="16"/>
-		<field name="POSTAL" deprecated="16"/>
-		<field name="POSTAL_ISPRIMARY" deprecated="16"/>
-		<field name="POSTAL_TYPE" deprecated="16"/>
-		<field name="SECONDARY_EMAIL" since="3" deprecated="16"/>
-		<field name="SECONDARY_EMAIL_TYPE" since="3" deprecated="16"/>
-		<field name="SECONDARY_PHONE" since="3" deprecated="16"/>
-		<field name="SECONDARY_PHONE_TYPE" since="3" deprecated="16"/>
-		<field name="TERTIARY_EMAIL" since="3" deprecated="16"/>
-		<field name="TERTIARY_EMAIL_TYPE" since="3" deprecated="16"/>
-		<field name="TERTIARY_PHONE" since="3" deprecated="16"/>
-		<field name="TERTIARY_PHONE_TYPE" since="3" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Intents$UI" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="FILTER_CONTACTS_ACTION" deprecated="16"/>
-		<field name="FILTER_TEXT_EXTRA_KEY" deprecated="16"/>
-		<field name="GROUP_NAME_EXTRA_KEY" deprecated="16"/>
-		<field name="LIST_ALL_CONTACTS_ACTION" deprecated="16"/>
-		<field name="LIST_CONTACTS_WITH_PHONES_ACTION" deprecated="16"/>
-		<field name="LIST_DEFAULT" deprecated="16"/>
-		<field name="LIST_FREQUENT_ACTION" deprecated="16"/>
-		<field name="LIST_GROUP_ACTION" deprecated="16"/>
-		<field name="LIST_STARRED_ACTION" deprecated="16"/>
-		<field name="LIST_STREQUENT_ACTION" deprecated="16"/>
-		<field name="TITLE_EXTRA_KEY" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$OrganizationColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="COMPANY" deprecated="16"/>
-		<field name="ISPRIMARY" deprecated="16"/>
-		<field name="LABEL" deprecated="16"/>
-		<field name="PERSON_ID" deprecated="16"/>
-		<field name="TITLE" deprecated="16"/>
-		<field name="TYPE" deprecated="16"/>
-		<field name="TYPE_CUSTOM" deprecated="16"/>
-		<field name="TYPE_OTHER" deprecated="16"/>
-		<field name="TYPE_WORK" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Organizations" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$OrganizationColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
-		<field name="CONTENT_DIRECTORY" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$People" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$PeopleColumns"/>
-		<implements name="android/provider/Contacts$PhonesColumns"/>
-		<implements name="android/provider/Contacts$PresenceColumns"/>
-		<method name="&lt;init>()V" deprecated="29"/>
-		<method name="addToGroup(Landroid/content/ContentResolver;JJ)Landroid/net/Uri;" deprecated="16"/>
-		<method name="addToGroup(Landroid/content/ContentResolver;JLjava/lang/String;)Landroid/net/Uri;" deprecated="16"/>
-		<method name="addToMyContactsGroup(Landroid/content/ContentResolver;J)Landroid/net/Uri;" deprecated="16"/>
-		<method name="createPersonInMyContactsGroup(Landroid/content/ContentResolver;Landroid/content/ContentValues;)Landroid/net/Uri;" deprecated="16"/>
-		<method name="loadContactPhoto(Landroid/content/Context;Landroid/net/Uri;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" deprecated="16"/>
-		<method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="16"/>
-		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;" deprecated="16"/>
-		<method name="queryGroups(Landroid/content/ContentResolver;J)Landroid/database/Cursor;" deprecated="16"/>
-		<method name="setPhotoData(Landroid/content/ContentResolver;Landroid/net/Uri;[B)V" deprecated="16"/>
-		<field name="CONTENT_FILTER_URI" deprecated="16"/>
-		<field name="CONTENT_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_TYPE" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="DELETED_CONTENT_URI" deprecated="16"/>
-		<field name="PRIMARY_EMAIL_ID" deprecated="16"/>
-		<field name="PRIMARY_ORGANIZATION_ID" deprecated="16"/>
-		<field name="PRIMARY_PHONE_ID" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$People$ContactMethods" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$ContactMethodsColumns"/>
-		<implements name="android/provider/Contacts$PeopleColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$People$Extensions" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$ExtensionsColumns"/>
-		<method name="&lt;init>()V" deprecated="29"/>
-		<field name="CONTENT_DIRECTORY" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="PERSON_ID" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$People$Phones" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$PeopleColumns"/>
-		<implements name="android/provider/Contacts$PhonesColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$PeopleColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="CUSTOM_RINGTONE" deprecated="16"/>
-		<field name="DISPLAY_NAME" deprecated="16"/>
-		<field name="LAST_TIME_CONTACTED" deprecated="16"/>
-		<field name="NAME" deprecated="16"/>
-		<field name="NOTES" deprecated="16"/>
-		<field name="PHONETIC_NAME" since="3" deprecated="16"/>
-		<field name="PHOTO_VERSION" deprecated="16"/>
-		<field name="SEND_TO_VOICEMAIL" deprecated="16"/>
-		<field name="STARRED" deprecated="16"/>
-		<field name="TIMES_CONTACTED" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Phones" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$PeopleColumns"/>
-		<implements name="android/provider/Contacts$PhonesColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
-		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="16"/>
-		<field name="CONTENT_FILTER_URL" deprecated="16"/>
-		<field name="CONTENT_ITEM_TYPE" deprecated="16"/>
-		<field name="CONTENT_TYPE" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="PERSON_ID" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$PhonesColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="ISPRIMARY" deprecated="16"/>
-		<field name="LABEL" deprecated="16"/>
-		<field name="NUMBER" deprecated="16"/>
-		<field name="NUMBER_KEY" deprecated="16"/>
-		<field name="TYPE" deprecated="16"/>
-		<field name="TYPE_CUSTOM" deprecated="16"/>
-		<field name="TYPE_FAX_HOME" deprecated="16"/>
-		<field name="TYPE_FAX_WORK" deprecated="16"/>
-		<field name="TYPE_HOME" deprecated="16"/>
-		<field name="TYPE_MOBILE" deprecated="16"/>
-		<field name="TYPE_OTHER" deprecated="16"/>
-		<field name="TYPE_PAGER" deprecated="16"/>
-		<field name="TYPE_WORK" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$Photos" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$PhotosColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$PhotosColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="DATA" deprecated="16"/>
-		<field name="DOWNLOAD_REQUIRED" deprecated="16"/>
-		<field name="EXISTS_ON_SERVER" deprecated="16"/>
-		<field name="LOCAL_VERSION" deprecated="16"/>
-		<field name="PERSON_ID" deprecated="16"/>
-		<field name="SYNC_ERROR" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$PresenceColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="AVAILABLE" since="8"/>
-		<field name="AWAY" since="8"/>
-		<field name="DO_NOT_DISTURB" since="8"/>
-		<field name="IDLE" since="8"/>
-		<field name="IM_ACCOUNT" deprecated="16"/>
-		<field name="IM_HANDLE" deprecated="16"/>
-		<field name="IM_PROTOCOL" deprecated="16"/>
-		<field name="INVISIBLE" since="8"/>
-		<field name="OFFLINE" since="8"/>
-		<field name="PRESENCE_CUSTOM_STATUS" since="8"/>
-		<field name="PRESENCE_STATUS" since="8"/>
-		<field name="PRIORITY" since="8"/>
-	</class>
-	<class name="android/provider/Contacts$Settings" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Contacts$SettingsColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="setSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
-		<field name="CONTENT_DIRECTORY" deprecated="16"/>
-		<field name="CONTENT_URI" deprecated="16"/>
-		<field name="DEFAULT_SORT_ORDER" deprecated="16"/>
-		<field name="SYNC_EVERYTHING" deprecated="16"/>
-	</class>
-	<class name="android/provider/Contacts$SettingsColumns" since="1" deprecated="5">
-		<extends name="java/lang/Object"/>
-		<field name="KEY" deprecated="16"/>
-		<field name="VALUE" deprecated="16"/>
-		<field name="_SYNC_ACCOUNT" deprecated="16"/>
-		<field name="_SYNC_ACCOUNT_TYPE" since="5" deprecated="16"/>
-	</class>
-	<class name="android/provider/ContactsContract" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isProfileId(J)Z" since="14"/>
-		<field name="AUTHORITY"/>
-		<field name="AUTHORITY_URI"/>
-		<field name="CALLER_IS_SYNCADAPTER"/>
-		<field name="DEFERRED_SNIPPETING" since="21"/>
-		<field name="DEFERRED_SNIPPETING_QUERY" since="21"/>
-		<field name="DIRECTORY_PARAM_KEY" since="11"/>
-		<field name="LIMIT_PARAM_KEY" since="11"/>
-		<field name="PRIMARY_ACCOUNT_NAME" since="14"/>
-		<field name="PRIMARY_ACCOUNT_TYPE" since="14"/>
-		<field name="REMOVE_DUPLICATE_ENTRIES" since="21"/>
-		<field name="STREQUENT_PHONE_ONLY" since="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$AggregationExceptions" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="RAW_CONTACT_ID1"/>
-		<field name="RAW_CONTACT_ID2"/>
-		<field name="TYPE"/>
-		<field name="TYPE_AUTOMATIC"/>
-		<field name="TYPE_KEEP_SEPARATE"/>
-		<field name="TYPE_KEEP_TOGETHER"/>
-	</class>
-	<class name="android/provider/ContactsContract$BaseSyncColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="SYNC1"/>
-		<field name="SYNC2"/>
-		<field name="SYNC3"/>
-		<field name="SYNC4"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$BaseTypes" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="TYPE_CUSTOM"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Callable" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_FILTER_URI"/>
-		<field name="CONTENT_URI"/>
-		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$BaseTypes"/>
-		<field name="DATA"/>
-		<field name="LABEL"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Contactables" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_FILTER_URI"/>
-		<field name="CONTENT_URI"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="VISIBLE_CONTACTS_ONLY"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Email" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getTypeLabelResource(I)I"/>
-		<field name="ADDRESS" since="11"/>
-		<field name="CONTENT_FILTER_URI"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_LOOKUP_URI"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="DISPLAY_NAME"/>
-		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
-		<field name="ENTERPRISE_CONTENT_LOOKUP_URI" since="23"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="TYPE_HOME"/>
-		<field name="TYPE_MOBILE"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_WORK"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Event" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="21"/>
-		<method name="getTypeResource(Ljava/lang/Integer;)I"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="START_DATE"/>
-		<field name="TYPE_ANNIVERSARY"/>
-		<field name="TYPE_BIRTHDAY"/>
-		<field name="TYPE_OTHER"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$GroupMembership" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="GROUP_ROW_ID"/>
-		<field name="GROUP_SOURCE_ID"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Identity" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="IDENTITY"/>
-		<field name="NAMESPACE"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Im" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getProtocolLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getProtocolLabelResource(I)I"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getTypeLabelResource(I)I"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CUSTOM_PROTOCOL"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="PROTOCOL"/>
-		<field name="PROTOCOL_AIM"/>
-		<field name="PROTOCOL_CUSTOM"/>
-		<field name="PROTOCOL_GOOGLE_TALK"/>
-		<field name="PROTOCOL_ICQ"/>
-		<field name="PROTOCOL_JABBER"/>
-		<field name="PROTOCOL_MSN"/>
-		<field name="PROTOCOL_NETMEETING"/>
-		<field name="PROTOCOL_QQ"/>
-		<field name="PROTOCOL_SKYPE"/>
-		<field name="PROTOCOL_YAHOO"/>
-		<field name="TYPE_HOME"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_WORK"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Nickname" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="NAME"/>
-		<field name="TYPE_DEFAULT"/>
-		<field name="TYPE_INITIALS"/>
-		<field name="TYPE_MAIDEN_NAME" since="9"/>
-		<field name="TYPE_MAINDEN_NAME" deprecated="16"/>
-		<field name="TYPE_OTHER_NAME"/>
-		<field name="TYPE_SHORT_NAME"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Note" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="NOTE"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Organization" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getTypeLabelResource(I)I"/>
-		<field name="COMPANY"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="DEPARTMENT"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="JOB_DESCRIPTION"/>
-		<field name="OFFICE_LOCATION"/>
-		<field name="PHONETIC_NAME"/>
-		<field name="PHONETIC_NAME_STYLE" since="24"/>
-		<field name="SYMBOL"/>
-		<field name="TITLE"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_WORK"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Phone" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getTypeLabelResource(I)I"/>
-		<field name="CONTENT_FILTER_URI"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="NORMALIZED_NUMBER" since="16"/>
-		<field name="NUMBER"/>
-		<field name="SEARCH_DISPLAY_NAME_KEY" since="16"/>
-		<field name="SEARCH_PHONE_NUMBER_KEY" since="16"/>
-		<field name="TYPE_ASSISTANT"/>
-		<field name="TYPE_CALLBACK"/>
-		<field name="TYPE_CAR"/>
-		<field name="TYPE_COMPANY_MAIN"/>
-		<field name="TYPE_FAX_HOME"/>
-		<field name="TYPE_FAX_WORK"/>
-		<field name="TYPE_HOME"/>
-		<field name="TYPE_ISDN"/>
-		<field name="TYPE_MAIN"/>
-		<field name="TYPE_MMS"/>
-		<field name="TYPE_MOBILE"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_OTHER_FAX"/>
-		<field name="TYPE_PAGER"/>
-		<field name="TYPE_RADIO"/>
-		<field name="TYPE_TELEX"/>
-		<field name="TYPE_TTY_TDD"/>
-		<field name="TYPE_WORK"/>
-		<field name="TYPE_WORK_MOBILE"/>
-		<field name="TYPE_WORK_PAGER"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Photo" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="PHOTO"/>
-		<field name="PHOTO_FILE_ID" since="14"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Relation" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="11"/>
-		<method name="getTypeLabelResource(I)I" since="11"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="NAME"/>
-		<field name="TYPE_ASSISTANT"/>
-		<field name="TYPE_BROTHER"/>
-		<field name="TYPE_CHILD"/>
-		<field name="TYPE_DOMESTIC_PARTNER"/>
-		<field name="TYPE_FATHER"/>
-		<field name="TYPE_FRIEND"/>
-		<field name="TYPE_MANAGER"/>
-		<field name="TYPE_MOTHER"/>
-		<field name="TYPE_PARENT"/>
-		<field name="TYPE_PARTNER"/>
-		<field name="TYPE_REFERRED_BY"/>
-		<field name="TYPE_RELATIVE"/>
-		<field name="TYPE_SISTER"/>
-		<field name="TYPE_SPOUSE"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$SipAddress" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getTypeLabelResource(I)I"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="SIP_ADDRESS"/>
-		<field name="TYPE_HOME"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_WORK"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$StructuredName" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="DISPLAY_NAME"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="FAMILY_NAME"/>
-		<field name="FULL_NAME_STYLE" since="21"/>
-		<field name="GIVEN_NAME"/>
-		<field name="MIDDLE_NAME"/>
-		<field name="PHONETIC_FAMILY_NAME"/>
-		<field name="PHONETIC_GIVEN_NAME"/>
-		<field name="PHONETIC_MIDDLE_NAME"/>
-		<field name="PHONETIC_NAME_STYLE" since="24"/>
-		<field name="PREFIX"/>
-		<field name="SUFFIX"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$StructuredPostal" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getTypeLabelResource(I)I"/>
-		<field name="CITY"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="COUNTRY"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="FORMATTED_ADDRESS"/>
-		<field name="NEIGHBORHOOD"/>
-		<field name="POBOX"/>
-		<field name="POSTCODE"/>
-		<field name="REGION"/>
-		<field name="STREET"/>
-		<field name="TYPE_HOME"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_WORK"/>
-	</class>
-	<class name="android/provider/ContactsContract$CommonDataKinds$Website" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="TYPE_BLOG"/>
-		<field name="TYPE_FTP"/>
-		<field name="TYPE_HOME"/>
-		<field name="TYPE_HOMEPAGE"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_PROFILE"/>
-		<field name="TYPE_WORK"/>
-		<field name="URL"/>
-	</class>
-	<class name="android/provider/ContactsContract$ContactNameColumns" since="11">
-		<extends name="java/lang/Object"/>
-		<field name="DISPLAY_NAME_ALTERNATIVE"/>
-		<field name="DISPLAY_NAME_PRIMARY"/>
-		<field name="DISPLAY_NAME_SOURCE"/>
-		<field name="PHONETIC_NAME"/>
-		<field name="PHONETIC_NAME_STYLE"/>
-		<field name="SORT_KEY_ALTERNATIVE"/>
-		<field name="SORT_KEY_PRIMARY"/>
-	</class>
-	<class name="android/provider/ContactsContract$ContactOptionsColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="CUSTOM_RINGTONE"/>
-		<field name="LAST_TIME_CONTACTED"/>
-		<field name="PINNED" since="21"/>
-		<field name="SEND_TO_VOICEMAIL"/>
-		<field name="STARRED"/>
-		<field name="TIMES_CONTACTED"/>
-	</class>
-	<class name="android/provider/ContactsContract$ContactStatusColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="CONTACT_CHAT_CAPABILITY" since="11"/>
-		<field name="CONTACT_PRESENCE"/>
-		<field name="CONTACT_STATUS"/>
-		<field name="CONTACT_STATUS_ICON"/>
-		<field name="CONTACT_STATUS_LABEL"/>
-		<field name="CONTACT_STATUS_RES_PACKAGE"/>
-		<field name="CONTACT_STATUS_TIMESTAMP"/>
-	</class>
-	<class name="android/provider/ContactsContract$Contacts" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11"/>
-		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
-		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
-		<implements name="android/provider/ContactsContract$ContactsColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getLookupUri(JLjava/lang/String;)Landroid/net/Uri;"/>
-		<method name="getLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
-		<method name="isEnterpriseContactId(J)Z" since="21"/>
-		<method name="lookupContact(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
-		<method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="16"/>
-		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;"/>
-		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;Z)Ljava/io/InputStream;" since="14"/>
-		<field name="CONTENT_FILTER_URI"/>
-		<field name="CONTENT_FREQUENT_URI" since="21"/>
-		<field name="CONTENT_GROUP_URI"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_LOOKUP_URI"/>
-		<field name="CONTENT_MULTI_VCARD_URI" since="21"/>
-		<field name="CONTENT_STREQUENT_FILTER_URI"/>
-		<field name="CONTENT_STREQUENT_URI"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="CONTENT_VCARD_TYPE"/>
-		<field name="CONTENT_VCARD_URI"/>
-		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="QUERY_PARAMETER_VCARD_NO_PHOTO" since="23"/>
-	</class>
-	<class name="android/provider/ContactsContract$Contacts$AggregationSuggestions" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$ContactOptionsColumns" since="11"/>
-		<implements name="android/provider/ContactsContract$ContactStatusColumns" since="11"/>
-		<implements name="android/provider/ContactsContract$ContactsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-	</class>
-	<class name="android/provider/ContactsContract$Contacts$AggregationSuggestions$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addNameParameter(Ljava/lang/String;)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;"/>
-		<method name="build()Landroid/net/Uri;"/>
-		<method name="setContactId(J)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;"/>
-		<method name="setLimit(I)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;"/>
-	</class>
-	<class name="android/provider/ContactsContract$Contacts$Data" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-	</class>
-	<class name="android/provider/ContactsContract$Contacts$Entity" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$BaseSyncColumns"/>
-		<implements name="android/provider/ContactsContract$ContactNameColumns"/>
-		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
-		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
-		<implements name="android/provider/ContactsContract$ContactsColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumns"/>
-		<implements name="android/provider/ContactsContract$DataUsageStatColumns" since="21"/>
-		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
-		<implements name="android/provider/ContactsContract$StatusColumns"/>
-		<implements name="android/provider/ContactsContract$SyncColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-		<field name="DATA_ID"/>
-		<field name="RAW_CONTACT_ID"/>
-	</class>
-	<class name="android/provider/ContactsContract$Contacts$Photo" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumns" removed="11"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" since="11"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-		<field name="DISPLAY_PHOTO" since="14"/>
-		<field name="PHOTO" since="11"/>
-		<field name="PHOTO_FILE_ID" since="14"/>
-	</class>
-	<class name="android/provider/ContactsContract$Contacts$StreamItems" since="15" deprecated="21" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY" deprecated="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$ContactsColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="CONTACT_LAST_UPDATED_TIMESTAMP" since="18"/>
-		<field name="DISPLAY_NAME"/>
-		<field name="HAS_PHONE_NUMBER"/>
-		<field name="IN_DEFAULT_DIRECTORY" since="21"/>
-		<field name="IN_VISIBLE_GROUP"/>
-		<field name="IS_USER_PROFILE" since="14"/>
-		<field name="LOOKUP_KEY"/>
-		<field name="NAME_RAW_CONTACT_ID" since="21"/>
-		<field name="PHOTO_FILE_ID" since="14"/>
-		<field name="PHOTO_ID"/>
-		<field name="PHOTO_THUMBNAIL_URI" since="11"/>
-		<field name="PHOTO_URI" since="11"/>
-	</class>
-	<class name="android/provider/ContactsContract$Data" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
-		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
-		<field name="VISIBLE_CONTACTS_ONLY" since="18"/>
-	</class>
-	<class name="android/provider/ContactsContract$DataColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="CARRIER_PRESENCE" since="23"/>
-		<field name="CARRIER_PRESENCE_VT_CAPABLE" since="23"/>
-		<field name="DATA1"/>
-		<field name="DATA10"/>
-		<field name="DATA11"/>
-		<field name="DATA12"/>
-		<field name="DATA13"/>
-		<field name="DATA14"/>
-		<field name="DATA15"/>
-		<field name="DATA2"/>
-		<field name="DATA3"/>
-		<field name="DATA4"/>
-		<field name="DATA5"/>
-		<field name="DATA6"/>
-		<field name="DATA7"/>
-		<field name="DATA8"/>
-		<field name="DATA9"/>
-		<field name="DATA_VERSION"/>
-		<field name="IS_PRIMARY"/>
-		<field name="IS_READ_ONLY" since="11"/>
-		<field name="IS_SUPER_PRIMARY"/>
-		<field name="MIMETYPE"/>
-		<field name="PREFERRED_PHONE_ACCOUNT_COMPONENT_NAME" since="28"/>
-		<field name="PREFERRED_PHONE_ACCOUNT_ID" since="28"/>
-		<field name="RAW_CONTACT_ID"/>
-		<field name="RES_PACKAGE" since="21"/>
-		<field name="SYNC1"/>
-		<field name="SYNC2"/>
-		<field name="SYNC3"/>
-		<field name="SYNC4"/>
-	</class>
-	<class name="android/provider/ContactsContract$DataColumnsWithJoins" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11"/>
-		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
-		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
-		<implements name="android/provider/ContactsContract$ContactsColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumns"/>
-		<implements name="android/provider/ContactsContract$DataUsageStatColumns" since="18"/>
-		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
-		<implements name="android/provider/ContactsContract$StatusColumns"/>
-	</class>
-	<class name="android/provider/ContactsContract$DataUsageFeedback" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="DELETE_USAGE_URI" since="16"/>
-		<field name="FEEDBACK_URI"/>
-		<field name="USAGE_TYPE"/>
-		<field name="USAGE_TYPE_CALL"/>
-		<field name="USAGE_TYPE_LONG_TEXT"/>
-		<field name="USAGE_TYPE_SHORT_TEXT"/>
-	</class>
-	<class name="android/provider/ContactsContract$DataUsageStatColumns" since="18">
-		<extends name="java/lang/Object"/>
-		<field name="LAST_TIME_USED"/>
-		<field name="TIMES_USED"/>
-	</class>
-	<class name="android/provider/ContactsContract$DeletedContacts" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$DeletedContactsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DAYS_KEPT_MILLISECONDS"/>
-	</class>
-	<class name="android/provider/ContactsContract$DeletedContactsColumns" since="18">
-		<extends name="java/lang/Object"/>
-		<field name="CONTACT_DELETED_TIMESTAMP"/>
-		<field name="CONTACT_ID"/>
-	</class>
-	<class name="android/provider/ContactsContract$Directory" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="isEnterpriseDirectoryId(J)Z" since="24"/>
-		<method name="isRemoteDirectoryId(J)Z" since="24"/>
-		<method name="notifyDirectoryChange(Landroid/content/ContentResolver;)V"/>
-		<field name="ACCOUNT_NAME"/>
-		<field name="ACCOUNT_TYPE"/>
-		<field name="CALLER_PACKAGE_PARAM_KEY" since="26"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT"/>
-		<field name="DIRECTORY_AUTHORITY"/>
-		<field name="DISPLAY_NAME"/>
-		<field name="ENTERPRISE_CONTENT_URI" since="24"/>
-		<field name="ENTERPRISE_DEFAULT" since="24"/>
-		<field name="ENTERPRISE_LOCAL_INVISIBLE" since="24"/>
-		<field name="EXPORT_SUPPORT"/>
-		<field name="EXPORT_SUPPORT_ANY_ACCOUNT"/>
-		<field name="EXPORT_SUPPORT_NONE"/>
-		<field name="EXPORT_SUPPORT_SAME_ACCOUNT_ONLY"/>
-		<field name="LOCAL_INVISIBLE"/>
-		<field name="PACKAGE_NAME"/>
-		<field name="PHOTO_SUPPORT"/>
-		<field name="PHOTO_SUPPORT_FULL"/>
-		<field name="PHOTO_SUPPORT_FULL_SIZE_ONLY"/>
-		<field name="PHOTO_SUPPORT_NONE"/>
-		<field name="PHOTO_SUPPORT_THUMBNAIL_ONLY"/>
-		<field name="SHORTCUT_SUPPORT"/>
-		<field name="SHORTCUT_SUPPORT_DATA_ITEMS_ONLY"/>
-		<field name="SHORTCUT_SUPPORT_FULL"/>
-		<field name="SHORTCUT_SUPPORT_NONE"/>
-		<field name="TYPE_RESOURCE_ID"/>
-	</class>
-	<class name="android/provider/ContactsContract$DisplayNameSources" since="11">
-		<extends name="java/lang/Object"/>
-		<field name="EMAIL"/>
-		<field name="NICKNAME"/>
-		<field name="ORGANIZATION"/>
-		<field name="PHONE"/>
-		<field name="STRUCTURED_NAME"/>
-		<field name="STRUCTURED_PHONETIC_NAME" since="23"/>
-		<field name="UNDEFINED"/>
-	</class>
-	<class name="android/provider/ContactsContract$DisplayPhoto" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_MAX_DIMENSIONS_URI"/>
-		<field name="CONTENT_URI"/>
-		<field name="DISPLAY_MAX_DIM"/>
-		<field name="THUMBNAIL_MAX_DIM"/>
-	</class>
-	<class name="android/provider/ContactsContract$FullNameStyle" since="11">
-		<extends name="java/lang/Object"/>
-		<field name="CHINESE"/>
-		<field name="CJK"/>
-		<field name="JAPANESE"/>
-		<field name="KOREAN"/>
-		<field name="UNDEFINED"/>
-		<field name="WESTERN"/>
-	</class>
-	<class name="android/provider/ContactsContract$Groups" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$GroupsColumns"/>
-		<implements name="android/provider/ContactsContract$SyncColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_SUMMARY_URI"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/ContactsContract$GroupsColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="AUTO_ADD" since="11"/>
-		<field name="DATA_SET" since="14"/>
-		<field name="DELETED"/>
-		<field name="FAVORITES" since="11"/>
-		<field name="GROUP_IS_READ_ONLY" since="11"/>
-		<field name="GROUP_VISIBLE"/>
-		<field name="NOTES"/>
-		<field name="RES_PACKAGE" since="21"/>
-		<field name="SHOULD_SYNC"/>
-		<field name="SUMMARY_COUNT"/>
-		<field name="SUMMARY_WITH_PHONES"/>
-		<field name="SYSTEM_ID"/>
-		<field name="TITLE"/>
-		<field name="TITLE_RES" since="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$Intents" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACTION_VOICE_SEND_MESSAGE_TO_CONTACTS" since="24"/>
-		<field name="ATTACH_IMAGE"/>
-		<field name="CONTACTS_DATABASE_CREATED" since="18"/>
-		<field name="EXTRA_CREATE_DESCRIPTION"/>
-		<field name="EXTRA_FORCE_CREATE"/>
-		<field name="EXTRA_RECIPIENT_CONTACT_CHAT_ID" since="24"/>
-		<field name="EXTRA_RECIPIENT_CONTACT_NAME" since="24"/>
-		<field name="EXTRA_RECIPIENT_CONTACT_URI" since="24"/>
-		<field name="INVITE_CONTACT" since="14"/>
-		<field name="METADATA_ACCOUNT_TYPE" since="24"/>
-		<field name="METADATA_MIMETYPE" since="24"/>
-		<field name="SEARCH_SUGGESTION_CLICKED"/>
-		<field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED"/>
-		<field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED"/>
-		<field name="SHOW_OR_CREATE_CONTACT"/>
-	</class>
-	<class name="android/provider/ContactsContract$Intents$Insert" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACTION"/>
-		<field name="COMPANY"/>
-		<field name="DATA" since="11"/>
-		<field name="EMAIL"/>
-		<field name="EMAIL_ISPRIMARY"/>
-		<field name="EMAIL_TYPE"/>
-		<field name="EXTRA_ACCOUNT" since="23"/>
-		<field name="EXTRA_DATA_SET" since="23"/>
-		<field name="FULL_MODE"/>
-		<field name="IM_HANDLE"/>
-		<field name="IM_ISPRIMARY"/>
-		<field name="IM_PROTOCOL"/>
-		<field name="JOB_TITLE"/>
-		<field name="NAME"/>
-		<field name="NOTES"/>
-		<field name="PHONE"/>
-		<field name="PHONETIC_NAME"/>
-		<field name="PHONE_ISPRIMARY"/>
-		<field name="PHONE_TYPE"/>
-		<field name="POSTAL"/>
-		<field name="POSTAL_ISPRIMARY"/>
-		<field name="POSTAL_TYPE"/>
-		<field name="SECONDARY_EMAIL"/>
-		<field name="SECONDARY_EMAIL_TYPE"/>
-		<field name="SECONDARY_PHONE"/>
-		<field name="SECONDARY_PHONE_TYPE"/>
-		<field name="TERTIARY_EMAIL"/>
-		<field name="TERTIARY_EMAIL_TYPE"/>
-		<field name="TERTIARY_PHONE"/>
-		<field name="TERTIARY_PHONE_TYPE"/>
-	</class>
-	<class name="android/provider/ContactsContract$PhoneLookup" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$ContactNameColumns" since="26"/>
-		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
-		<implements name="android/provider/ContactsContract$ContactsColumns"/>
-		<implements name="android/provider/ContactsContract$PhoneLookupColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_FILTER_URI"/>
-		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="21"/>
-		<field name="QUERY_PARAMETER_SIP_ADDRESS" since="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$PhoneLookupColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="CONTACT_ID" since="24"/>
-		<field name="DATA_ID" since="24"/>
-		<field name="LABEL"/>
-		<field name="NORMALIZED_NUMBER" since="16"/>
-		<field name="NUMBER"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="android/provider/ContactsContract$PhoneticNameStyle" since="11">
-		<extends name="java/lang/Object"/>
-		<field name="JAPANESE"/>
-		<field name="KOREAN"/>
-		<field name="PINYIN"/>
-		<field name="UNDEFINED"/>
-	</class>
-	<class name="android/provider/ContactsContract$PinnedPositions" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="pin(Landroid/content/ContentResolver;JI)V"/>
-		<method name="undemote(Landroid/content/ContentResolver;J)V"/>
-		<field name="DEMOTED"/>
-		<field name="UNPINNED"/>
-	</class>
-	<class name="android/provider/ContactsContract$Presence" since="5" deprecated="5">
-		<extends name="android/provider/ContactsContract$StatusUpdates"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/provider/ContactsContract$PresenceColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="CUSTOM_PROTOCOL"/>
-		<field name="DATA_ID"/>
-		<field name="IM_ACCOUNT"/>
-		<field name="IM_HANDLE"/>
-		<field name="PROTOCOL"/>
-	</class>
-	<class name="android/provider/ContactsContract$Profile" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$ContactNameColumns"/>
-		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
-		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
-		<implements name="android/provider/ContactsContract$ContactsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_RAW_CONTACTS_URI"/>
-		<field name="CONTENT_URI"/>
-		<field name="CONTENT_VCARD_URI"/>
-		<field name="MIN_ID"/>
-	</class>
-	<class name="android/provider/ContactsContract$ProfileSyncState" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/SyncStateContract$Columns"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B"/>
-		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;"/>
-		<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
-		<method name="set(Landroid/content/ContentProviderClient;Landroid/accounts/Account;[B)V"/>
-		<field name="CONTENT_DIRECTORY"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/ContactsContract$ProviderStatus" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="DATABASE_CREATION_TIMESTAMP" since="26"/>
-		<field name="STATUS"/>
-		<field name="STATUS_BUSY"/>
-		<field name="STATUS_EMPTY"/>
-		<field name="STATUS_NORMAL"/>
-	</class>
-	<class name="android/provider/ContactsContract$QuickContact" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="showQuickContact(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;I[Ljava/lang/String;)V"/>
-		<method name="showQuickContact(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;)V" since="23"/>
-		<method name="showQuickContact(Landroid/content/Context;Landroid/view/View;Landroid/net/Uri;I[Ljava/lang/String;)V"/>
-		<method name="showQuickContact(Landroid/content/Context;Landroid/view/View;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;)V" since="23"/>
-		<field name="ACTION_QUICK_CONTACT" since="21"/>
-		<field name="EXTRA_EXCLUDE_MIMES" since="21"/>
-		<field name="EXTRA_MODE" since="23"/>
-		<field name="EXTRA_PRIORITIZED_MIMETYPE" since="23"/>
-		<field name="MODE_LARGE"/>
-		<field name="MODE_MEDIUM"/>
-		<field name="MODE_SMALL"/>
-	</class>
-	<class name="android/provider/ContactsContract$RawContacts" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11"/>
-		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
-		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
-		<implements name="android/provider/ContactsContract$SyncColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
-		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8"/>
-		<field name="AGGREGATION_MODE_DEFAULT"/>
-		<field name="AGGREGATION_MODE_DISABLED"/>
-		<field name="AGGREGATION_MODE_IMMEDIATE" deprecated="16"/>
-		<field name="AGGREGATION_MODE_SUSPENDED"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/ContactsContract$RawContacts$Data" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-	</class>
-	<class name="android/provider/ContactsContract$RawContacts$DisplayPhoto" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-	</class>
-	<class name="android/provider/ContactsContract$RawContacts$Entity" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-		<field name="DATA_ID"/>
-	</class>
-	<class name="android/provider/ContactsContract$RawContacts$StreamItems" since="15" deprecated="21" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY" deprecated="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$RawContactsColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="ACCOUNT_TYPE_AND_DATA_SET" since="21"/>
-		<field name="AGGREGATION_MODE"/>
-		<field name="BACKUP_ID" since="24"/>
-		<field name="CONTACT_ID"/>
-		<field name="DATA_SET" since="14"/>
-		<field name="DELETED"/>
-		<field name="METADATA_DIRTY" since="24"/>
-		<field name="RAW_CONTACT_IS_READ_ONLY" since="11"/>
-		<field name="RAW_CONTACT_IS_USER_PROFILE" since="14"/>
-	</class>
-	<class name="android/provider/ContactsContract$RawContactsEntity" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$DataColumns"/>
-		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="DATA_ID"/>
-		<field name="PROFILE_CONTENT_URI" since="14"/>
-	</class>
-	<class name="android/provider/ContactsContract$SearchSnippets" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="DEFERRED_SNIPPETING_KEY"/>
-		<field name="SNIPPET"/>
-	</class>
-	<class name="android/provider/ContactsContract$Settings" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$SettingsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/ContactsContract$SettingsColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="ACCOUNT_NAME"/>
-		<field name="ACCOUNT_TYPE"/>
-		<field name="ANY_UNSYNCED"/>
-		<field name="DATA_SET" since="14"/>
-		<field name="SHOULD_SYNC"/>
-		<field name="UNGROUPED_COUNT"/>
-		<field name="UNGROUPED_VISIBLE"/>
-		<field name="UNGROUPED_WITH_PHONES"/>
-	</class>
-	<class name="android/provider/ContactsContract$StatusColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<field name="AVAILABLE" since="8"/>
-		<field name="AWAY" since="8"/>
-		<field name="CAPABILITY_HAS_CAMERA" since="11"/>
-		<field name="CAPABILITY_HAS_VIDEO" since="11"/>
-		<field name="CAPABILITY_HAS_VOICE" since="11"/>
-		<field name="CHAT_CAPABILITY" since="11"/>
-		<field name="DO_NOT_DISTURB" since="8"/>
-		<field name="IDLE" since="8"/>
-		<field name="INVISIBLE" since="8"/>
-		<field name="OFFLINE" since="8"/>
-		<field name="PRESENCE"/>
-		<field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="16"/>
-		<field name="PRESENCE_STATUS" since="8" deprecated="16"/>
-		<field name="STATUS"/>
-		<field name="STATUS_ICON"/>
-		<field name="STATUS_LABEL"/>
-		<field name="STATUS_RES_PACKAGE"/>
-		<field name="STATUS_TIMESTAMP"/>
-	</class>
-	<class name="android/provider/ContactsContract$StatusUpdates" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$PresenceColumns"/>
-		<implements name="android/provider/ContactsContract$StatusColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getPresenceIconResourceId(I)I"/>
-		<method name="getPresencePrecedence(I)I"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="PROFILE_CONTENT_URI" since="14"/>
-	</class>
-	<class name="android/provider/ContactsContract$StreamItemPhotos" since="15" deprecated="21" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$StreamItemPhotosColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="PHOTO" deprecated="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$StreamItemPhotosColumns" since="15" deprecated="21" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="PHOTO_FILE_ID" deprecated="21"/>
-		<field name="PHOTO_URI" deprecated="21"/>
-		<field name="SORT_INDEX" deprecated="21"/>
-		<field name="STREAM_ITEM_ID" deprecated="21"/>
-		<field name="SYNC1" deprecated="21"/>
-		<field name="SYNC2" deprecated="21"/>
-		<field name="SYNC3" deprecated="21"/>
-		<field name="SYNC4" deprecated="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$StreamItems" since="15" deprecated="21" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_ITEM_TYPE" deprecated="21"/>
-		<field name="CONTENT_LIMIT_URI" deprecated="21"/>
-		<field name="CONTENT_PHOTO_URI" deprecated="21"/>
-		<field name="CONTENT_TYPE" deprecated="21"/>
-		<field name="CONTENT_URI" deprecated="21"/>
-		<field name="MAX_ITEMS" deprecated="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$StreamItems$StreamItemPhotos" since="15" deprecated="21" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/ContactsContract$StreamItemPhotosColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY" deprecated="21"/>
-		<field name="CONTENT_ITEM_TYPE" deprecated="21"/>
-		<field name="CONTENT_TYPE" deprecated="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$StreamItemsColumns" since="15" deprecated="21" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="ACCOUNT_NAME" deprecated="21"/>
-		<field name="ACCOUNT_TYPE" deprecated="21"/>
-		<field name="COMMENTS" deprecated="21"/>
-		<field name="CONTACT_ID" deprecated="21"/>
-		<field name="CONTACT_LOOKUP_KEY" deprecated="21"/>
-		<field name="DATA_SET" deprecated="21"/>
-		<field name="RAW_CONTACT_ID" deprecated="21"/>
-		<field name="RAW_CONTACT_SOURCE_ID" deprecated="21"/>
-		<field name="RES_ICON" deprecated="21"/>
-		<field name="RES_LABEL" deprecated="21"/>
-		<field name="RES_PACKAGE" deprecated="21"/>
-		<field name="SYNC1" deprecated="21"/>
-		<field name="SYNC2" deprecated="21"/>
-		<field name="SYNC3" deprecated="21"/>
-		<field name="SYNC4" deprecated="21"/>
-		<field name="TEXT" deprecated="21"/>
-		<field name="TIMESTAMP" deprecated="21"/>
-	</class>
-	<class name="android/provider/ContactsContract$SyncColumns" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/ContactsContract$BaseSyncColumns"/>
-		<field name="ACCOUNT_NAME"/>
-		<field name="ACCOUNT_TYPE"/>
-		<field name="DIRTY"/>
-		<field name="SOURCE_ID"/>
-		<field name="VERSION"/>
-	</class>
-	<class name="android/provider/ContactsContract$SyncState" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/SyncStateContract$Columns"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B"/>
-		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;"/>
-		<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
-		<method name="set(Landroid/content/ContentProviderClient;Landroid/accounts/Account;[B)V"/>
-		<field name="CONTENT_DIRECTORY"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/DocumentsContract" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="buildChildDocumentsUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildChildDocumentsUriUsingTree(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
-		<method name="buildDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildDocumentUriUsingTree(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
-		<method name="buildRecentDocumentsUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildRootUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildRootsUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildSearchDocumentsUri(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="buildTreeDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
-		<method name="copyDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri;" since="24"/>
-		<method name="createDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
-		<method name="createWebLinkIntent(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/os/Bundle;)Landroid/content/IntentSender;" since="26"/>
-		<method name="deleteDocument(Landroid/content/ContentResolver;Landroid/net/Uri;)Z"/>
-		<method name="ejectRoot(Landroid/content/ContentResolver;Landroid/net/Uri;)V" since="26"/>
-		<method name="findDocumentPath(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/provider/DocumentsContract$Path;" since="26"/>
-		<method name="getDocumentId(Landroid/net/Uri;)Ljava/lang/String;"/>
-		<method name="getDocumentThumbnail(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;"/>
-		<method name="getRootId(Landroid/net/Uri;)Ljava/lang/String;"/>
-		<method name="getSearchDocumentsQuery(Landroid/net/Uri;)Ljava/lang/String;"/>
-		<method name="getTreeDocumentId(Landroid/net/Uri;)Ljava/lang/String;" since="21"/>
-		<method name="isDocumentUri(Landroid/content/Context;Landroid/net/Uri;)Z"/>
-		<method name="isTreeUri(Landroid/net/Uri;)Z" since="24"/>
-		<method name="moveDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri;" since="24"/>
-		<method name="removeDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Z" since="24"/>
-		<method name="renameDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
-		<field name="ACTION_DOCUMENT_SETTINGS" since="26"/>
-		<field name="EXTRA_ERROR"/>
-		<field name="EXTRA_EXCLUDE_SELF" since="23"/>
-		<field name="EXTRA_INFO"/>
-		<field name="EXTRA_INITIAL_URI" since="26"/>
-		<field name="EXTRA_LOADING"/>
-		<field name="EXTRA_ORIENTATION" since="24"/>
-		<field name="EXTRA_PROMPT" since="23"/>
-		<field name="PROVIDER_INTERFACE"/>
-	</class>
-	<class name="android/provider/DocumentsContract$Document" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="COLUMN_DISPLAY_NAME"/>
-		<field name="COLUMN_DOCUMENT_ID"/>
-		<field name="COLUMN_FLAGS"/>
-		<field name="COLUMN_ICON"/>
-		<field name="COLUMN_LAST_MODIFIED"/>
-		<field name="COLUMN_MIME_TYPE"/>
-		<field name="COLUMN_SIZE"/>
-		<field name="COLUMN_SUMMARY"/>
-		<field name="FLAG_DIR_PREFERS_GRID"/>
-		<field name="FLAG_DIR_PREFERS_LAST_MODIFIED"/>
-		<field name="FLAG_DIR_SUPPORTS_CREATE"/>
-		<field name="FLAG_SUPPORTS_COPY" since="24"/>
-		<field name="FLAG_SUPPORTS_DELETE"/>
-		<field name="FLAG_SUPPORTS_MOVE" since="24"/>
-		<field name="FLAG_SUPPORTS_REMOVE" since="24"/>
-		<field name="FLAG_SUPPORTS_RENAME" since="21"/>
-		<field name="FLAG_SUPPORTS_SETTINGS" since="26"/>
-		<field name="FLAG_SUPPORTS_THUMBNAIL"/>
-		<field name="FLAG_SUPPORTS_WRITE"/>
-		<field name="FLAG_VIRTUAL_DOCUMENT" since="24"/>
-		<field name="FLAG_WEB_LINKABLE" since="26"/>
-		<field name="MIME_TYPE_DIR"/>
-	</class>
-	<class name="android/provider/DocumentsContract$Path" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/List;)V"/>
-		<method name="getPath()Ljava/util/List;"/>
-		<method name="getRootId()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/provider/DocumentsContract$Root" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="COLUMN_AVAILABLE_BYTES"/>
-		<field name="COLUMN_CAPACITY_BYTES" since="24"/>
-		<field name="COLUMN_DOCUMENT_ID"/>
-		<field name="COLUMN_FLAGS"/>
-		<field name="COLUMN_ICON"/>
-		<field name="COLUMN_MIME_TYPES"/>
-		<field name="COLUMN_ROOT_ID"/>
-		<field name="COLUMN_SUMMARY"/>
-		<field name="COLUMN_TITLE"/>
-		<field name="FLAG_LOCAL_ONLY"/>
-		<field name="FLAG_SUPPORTS_CREATE"/>
-		<field name="FLAG_SUPPORTS_EJECT" since="26"/>
-		<field name="FLAG_SUPPORTS_IS_CHILD" since="21"/>
-		<field name="FLAG_SUPPORTS_RECENTS"/>
-		<field name="FLAG_SUPPORTS_SEARCH"/>
-		<field name="MIME_TYPE_ITEM" since="26"/>
-	</class>
-	<class name="android/provider/DocumentsProvider" since="19">
-		<extends name="android/content/ContentProvider"/>
-		<method name="&lt;init>()V"/>
-		<method name="copyDocument(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="24"/>
-		<method name="createDocument(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="createWebLinkIntent(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/IntentSender;" since="26"/>
-		<method name="deleteDocument(Ljava/lang/String;)V"/>
-		<method name="ejectRoot(Ljava/lang/String;)V" since="26"/>
-		<method name="findDocumentPath(Ljava/lang/String;Ljava/lang/String;)Landroid/provider/DocumentsContract$Path;" since="26"/>
-		<method name="getDocumentStreamTypes(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" since="24"/>
-		<method name="getDocumentType(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="isChildDocument(Ljava/lang/String;Ljava/lang/String;)Z" since="21"/>
-		<method name="moveDocument(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="24"/>
-		<method name="openDocument(Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;"/>
-		<method name="openDocumentThumbnail(Ljava/lang/String;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;"/>
-		<method name="openTypedDocument(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="24"/>
-		<method name="queryChildDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/database/Cursor;" since="26"/>
-		<method name="queryChildDocuments(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="queryDocument(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="queryRecentDocuments(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="queryRoots([Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="querySearchDocuments(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="removeDocument(Ljava/lang/String;Ljava/lang/String;)V" since="24"/>
-		<method name="renameDocument(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="revokeDocumentPermission(Ljava/lang/String;)V" since="21"/>
-	</class>
-	<class name="android/provider/FontRequest" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V"/>
-		<method name="getCertificates()Ljava/util/List;"/>
-		<method name="getProviderAuthority()Ljava/lang/String;"/>
-		<method name="getProviderPackage()Ljava/lang/String;"/>
-		<method name="getQuery()Ljava/lang/String;"/>
-	</class>
-	<class name="android/provider/FontsContract" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroid/provider/FontsContract$FontInfo;)Landroid/graphics/Typeface;"/>
-		<method name="fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/provider/FontRequest;)Landroid/provider/FontsContract$FontFamilyResult;"/>
-		<method name="requestFonts(Landroid/content/Context;Landroid/provider/FontRequest;Landroid/os/Handler;Landroid/os/CancellationSignal;Landroid/provider/FontsContract$FontRequestCallback;)V"/>
-	</class>
-	<class name="android/provider/FontsContract$Columns" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="FILE_ID"/>
-		<field name="ITALIC"/>
-		<field name="RESULT_CODE"/>
-		<field name="RESULT_CODE_FONT_NOT_FOUND"/>
-		<field name="RESULT_CODE_FONT_UNAVAILABLE"/>
-		<field name="RESULT_CODE_MALFORMED_QUERY"/>
-		<field name="RESULT_CODE_OK"/>
-		<field name="TTC_INDEX"/>
-		<field name="VARIATION_SETTINGS"/>
-		<field name="WEIGHT"/>
-	</class>
-	<class name="android/provider/FontsContract$FontFamilyResult" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I[Landroid/provider/FontsContract$FontInfo;)V" since="29"/>
-		<method name="getFonts()[Landroid/provider/FontsContract$FontInfo;"/>
-		<method name="getStatusCode()I"/>
-		<field name="STATUS_OK"/>
-		<field name="STATUS_REJECTED"/>
-		<field name="STATUS_UNEXPECTED_DATA_PROVIDED"/>
-		<field name="STATUS_WRONG_CERTIFICATES"/>
-	</class>
-	<class name="android/provider/FontsContract$FontInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/net/Uri;I[Landroid/graphics/fonts/FontVariationAxis;IZI)V" since="29"/>
-		<method name="getAxes()[Landroid/graphics/fonts/FontVariationAxis;"/>
-		<method name="getResultCode()I"/>
-		<method name="getTtcIndex()I"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-		<method name="getWeight()I"/>
-		<method name="isItalic()Z"/>
-	</class>
-	<class name="android/provider/FontsContract$FontRequestCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onTypefaceRequestFailed(I)V"/>
-		<method name="onTypefaceRetrieved(Landroid/graphics/Typeface;)V"/>
-		<field name="FAIL_REASON_FONT_LOAD_ERROR"/>
-		<field name="FAIL_REASON_FONT_NOT_FOUND"/>
-		<field name="FAIL_REASON_FONT_UNAVAILABLE"/>
-		<field name="FAIL_REASON_MALFORMED_QUERY"/>
-		<field name="FAIL_REASON_PROVIDER_NOT_FOUND"/>
-		<field name="FAIL_REASON_WRONG_CERTIFICATES"/>
-	</class>
-	<class name="android/provider/LiveFolders" since="3" deprecated="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACTION_CREATE_LIVE_FOLDER"/>
-		<field name="DESCRIPTION"/>
-		<field name="DISPLAY_MODE_GRID"/>
-		<field name="DISPLAY_MODE_LIST"/>
-		<field name="EXTRA_LIVE_FOLDER_BASE_INTENT"/>
-		<field name="EXTRA_LIVE_FOLDER_DISPLAY_MODE"/>
-		<field name="EXTRA_LIVE_FOLDER_ICON"/>
-		<field name="EXTRA_LIVE_FOLDER_NAME"/>
-		<field name="ICON_BITMAP"/>
-		<field name="ICON_PACKAGE"/>
-		<field name="ICON_RESOURCE"/>
-		<field name="INTENT"/>
-		<field name="NAME"/>
-	</class>
-	<class name="android/provider/MediaStore" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDocumentUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/net/Uri;" since="26"/>
-		<method name="getMediaScannerUri()Landroid/net/Uri;"/>
-		<method name="getVersion(Landroid/content/Context;)Ljava/lang/String;" since="12"/>
-		<field name="ACTION_IMAGE_CAPTURE" since="3"/>
-		<field name="ACTION_IMAGE_CAPTURE_SECURE" since="17"/>
-		<field name="ACTION_VIDEO_CAPTURE" since="3"/>
-		<field name="AUTHORITY"/>
-		<field name="EXTRA_DURATION_LIMIT" since="8"/>
-		<field name="EXTRA_FINISH_ON_COMPLETION" since="3"/>
-		<field name="EXTRA_FULL_SCREEN" since="8"/>
-		<field name="EXTRA_MEDIA_ALBUM" since="3"/>
-		<field name="EXTRA_MEDIA_ARTIST" since="3"/>
-		<field name="EXTRA_MEDIA_FOCUS" since="3"/>
-		<field name="EXTRA_MEDIA_GENRE" since="21"/>
-		<field name="EXTRA_MEDIA_PLAYLIST" since="21"/>
-		<field name="EXTRA_MEDIA_RADIO_CHANNEL" since="21"/>
-		<field name="EXTRA_MEDIA_TITLE" since="3"/>
-		<field name="EXTRA_OUTPUT" since="3"/>
-		<field name="EXTRA_SCREEN_ORIENTATION" since="3"/>
-		<field name="EXTRA_SHOW_ACTION_ICONS" since="8"/>
-		<field name="EXTRA_SIZE_LIMIT" since="8"/>
-		<field name="EXTRA_VIDEO_QUALITY" since="3"/>
-		<field name="INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH" since="9"/>
-		<field name="INTENT_ACTION_MEDIA_SEARCH" since="3"/>
-		<field name="INTENT_ACTION_MUSIC_PLAYER" since="8" deprecated="16"/>
-		<field name="INTENT_ACTION_STILL_IMAGE_CAMERA" since="3"/>
-		<field name="INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE" since="17"/>
-		<field name="INTENT_ACTION_TEXT_OPEN_FROM_SEARCH" since="17"/>
-		<field name="INTENT_ACTION_VIDEO_CAMERA" since="3"/>
-		<field name="INTENT_ACTION_VIDEO_PLAY_FROM_SEARCH" since="17"/>
-		<field name="MEDIA_IGNORE_FILENAME" since="9"/>
-		<field name="MEDIA_SCANNER_VOLUME"/>
-		<field name="META_DATA_STILL_IMAGE_CAMERA_PREWARM_SERVICE" since="23"/>
-		<field name="UNKNOWN_STRING" since="8"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="keyFor(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$AlbumColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="ALBUM"/>
-		<field name="ALBUM_ART"/>
-		<field name="ALBUM_ID"/>
-		<field name="ALBUM_KEY"/>
-		<field name="ARTIST"/>
-		<field name="FIRST_YEAR"/>
-		<field name="LAST_YEAR"/>
-		<field name="NUMBER_OF_SONGS"/>
-		<field name="NUMBER_OF_SONGS_FOR_ARTIST" since="3"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Albums" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/MediaStore$Audio$AlbumColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="ENTRY_CONTENT_TYPE"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$ArtistColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="ARTIST"/>
-		<field name="ARTIST_KEY"/>
-		<field name="NUMBER_OF_ALBUMS"/>
-		<field name="NUMBER_OF_TRACKS"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Artists" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/MediaStore$Audio$ArtistColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="ENTRY_CONTENT_TYPE"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Artists$Albums" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$Audio$AlbumColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$AudioColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$MediaColumns"/>
-		<field name="ALBUM"/>
-		<field name="ALBUM_ART" removed="14"/>
-		<field name="ALBUM_ID"/>
-		<field name="ALBUM_KEY"/>
-		<field name="ARTIST"/>
-		<field name="ARTIST_ID"/>
-		<field name="ARTIST_KEY"/>
-		<field name="BOOKMARK" since="8"/>
-		<field name="COMPOSER"/>
-		<field name="DURATION"/>
-		<field name="IS_ALARM"/>
-		<field name="IS_MUSIC"/>
-		<field name="IS_NOTIFICATION"/>
-		<field name="IS_PODCAST" since="8"/>
-		<field name="IS_RINGTONE"/>
-		<field name="TITLE_KEY"/>
-		<field name="TRACK"/>
-		<field name="YEAR"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Genres" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/MediaStore$Audio$GenresColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="getContentUriForAudioId(Ljava/lang/String;I)Landroid/net/Uri;" since="11"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="ENTRY_CONTENT_TYPE"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Genres$Members" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$Audio$AudioColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;"/>
-		<field name="AUDIO_ID"/>
-		<field name="CONTENT_DIRECTORY"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="GENRE_ID"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$GenresColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="NAME"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Media" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$Audio$AudioColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="getContentUriForPath(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="ENTRY_CONTENT_TYPE" since="21"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="EXTRA_MAX_BYTES" since="3"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-		<field name="RECORD_SOUND_ACTION"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Playlists" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/MediaStore$Audio$PlaylistsColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="ENTRY_CONTENT_TYPE"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Playlists$Members" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$Audio$AudioColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;"/>
-		<method name="moveItem(Landroid/content/ContentResolver;JII)Z" since="8"/>
-		<field name="AUDIO_ID"/>
-		<field name="CONTENT_DIRECTORY"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="PLAYLIST_ID"/>
-		<field name="PLAY_ORDER"/>
-		<field name="_ID"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$PlaylistsColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="DATA"/>
-		<field name="DATE_ADDED"/>
-		<field name="DATE_MODIFIED"/>
-		<field name="NAME"/>
-	</class>
-	<class name="android/provider/MediaStore$Audio$Radio" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ENTRY_CONTENT_TYPE"/>
-	</class>
-	<class name="android/provider/MediaStore$Files" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;"/>
-	</class>
-	<class name="android/provider/MediaStore$Files$FileColumns" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$MediaColumns"/>
-		<field name="MEDIA_TYPE"/>
-		<field name="MEDIA_TYPE_AUDIO"/>
-		<field name="MEDIA_TYPE_IMAGE"/>
-		<field name="MEDIA_TYPE_NONE"/>
-		<field name="MEDIA_TYPE_PLAYLIST"/>
-		<field name="MEDIA_TYPE_VIDEO"/>
-		<field name="MIME_TYPE"/>
-		<field name="PARENT"/>
-		<field name="TITLE"/>
-	</class>
-	<class name="android/provider/MediaStore$Images" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/provider/MediaStore$Images$ImageColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$MediaColumns"/>
-		<field name="BUCKET_DISPLAY_NAME"/>
-		<field name="BUCKET_ID"/>
-		<field name="DATE_TAKEN"/>
-		<field name="DESCRIPTION"/>
-		<field name="IS_PRIVATE"/>
-		<field name="LATITUDE"/>
-		<field name="LONGITUDE"/>
-		<field name="MINI_THUMB_MAGIC"/>
-		<field name="ORIENTATION"/>
-		<field name="PICASA_ID"/>
-	</class>
-	<class name="android/provider/MediaStore$Images$Media" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$Images$ImageColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBitmap(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/Bitmap;"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="insertImage(Landroid/content/ContentResolver;Landroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="insertImage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-	</class>
-	<class name="android/provider/MediaStore$Images$Thumbnails" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V" since="5"/>
-		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="5"/>
-		<method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8"/>
-		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="queryMiniThumbnail(Landroid/content/ContentResolver;JI[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<method name="queryMiniThumbnails(Landroid/content/ContentResolver;Landroid/net/Uri;I[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<field name="DATA"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="FULL_SCREEN_KIND"/>
-		<field name="HEIGHT"/>
-		<field name="IMAGE_ID"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-		<field name="KIND"/>
-		<field name="MICRO_KIND"/>
-		<field name="MINI_KIND"/>
-		<field name="THUMB_DATA" since="5"/>
-		<field name="WIDTH"/>
-	</class>
-	<class name="android/provider/MediaStore$MediaColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<field name="DATA"/>
-		<field name="DATE_ADDED"/>
-		<field name="DATE_MODIFIED"/>
-		<field name="DISPLAY_NAME"/>
-		<field name="HEIGHT" since="16"/>
-		<field name="MIME_TYPE"/>
-		<field name="SIZE"/>
-		<field name="TITLE"/>
-		<field name="WIDTH" since="16"/>
-	</class>
-	<class name="android/provider/MediaStore$Video" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/MediaStore$Video$Media" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$Video$VideoColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-	</class>
-	<class name="android/provider/MediaStore$Video$Thumbnails" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V"/>
-		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8"/>
-		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
-		<method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8"/>
-		<field name="DATA"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="EXTERNAL_CONTENT_URI"/>
-		<field name="FULL_SCREEN_KIND"/>
-		<field name="HEIGHT"/>
-		<field name="INTERNAL_CONTENT_URI"/>
-		<field name="KIND"/>
-		<field name="MICRO_KIND"/>
-		<field name="MINI_KIND"/>
-		<field name="VIDEO_ID"/>
-		<field name="WIDTH"/>
-	</class>
-	<class name="android/provider/MediaStore$Video$VideoColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/MediaStore$MediaColumns"/>
-		<field name="ALBUM"/>
-		<field name="ARTIST"/>
-		<field name="BOOKMARK" since="3"/>
-		<field name="BUCKET_DISPLAY_NAME" since="3"/>
-		<field name="BUCKET_ID" since="3"/>
-		<field name="CATEGORY"/>
-		<field name="DATE_TAKEN"/>
-		<field name="DESCRIPTION"/>
-		<field name="DURATION"/>
-		<field name="IS_PRIVATE"/>
-		<field name="LANGUAGE"/>
-		<field name="LATITUDE"/>
-		<field name="LONGITUDE"/>
-		<field name="MINI_THUMB_MAGIC"/>
-		<field name="RESOLUTION"/>
-		<field name="TAGS"/>
-	</class>
-	<class name="android/provider/OpenableColumns" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="DISPLAY_NAME"/>
-		<field name="SIZE"/>
-	</class>
-	<class name="android/provider/SearchRecentSuggestions" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;I)V"/>
-		<method name="clearHistory()V"/>
-		<method name="saveRecentQuery(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="truncateHistory(Landroid/content/ContentResolver;I)V"/>
-		<field name="QUERIES_PROJECTION_1LINE"/>
-		<field name="QUERIES_PROJECTION_2LINE"/>
-		<field name="QUERIES_PROJECTION_DATE_INDEX"/>
-		<field name="QUERIES_PROJECTION_DISPLAY1_INDEX"/>
-		<field name="QUERIES_PROJECTION_DISPLAY2_INDEX"/>
-		<field name="QUERIES_PROJECTION_QUERY_INDEX"/>
-	</class>
-	<class name="android/provider/Settings" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="canDrawOverlays(Landroid/content/Context;)Z" since="23"/>
-		<field name="ACTION_ACCESSIBILITY_SETTINGS" since="5"/>
-		<field name="ACTION_ADD_ACCOUNT" since="8"/>
-		<field name="ACTION_AIRPLANE_MODE_SETTINGS" since="3"/>
-		<field name="ACTION_APN_SETTINGS"/>
-		<field name="ACTION_APPLICATION_DETAILS_SETTINGS" since="9"/>
-		<field name="ACTION_APPLICATION_DEVELOPMENT_SETTINGS" since="3"/>
-		<field name="ACTION_APPLICATION_SETTINGS"/>
-		<field name="ACTION_APP_NOTIFICATION_SETTINGS" since="26"/>
-		<field name="ACTION_BATTERY_SAVER_SETTINGS" since="22"/>
-		<field name="ACTION_BLUETOOTH_SETTINGS"/>
-		<field name="ACTION_CAPTIONING_SETTINGS" since="19"/>
-		<field name="ACTION_CAST_SETTINGS" since="21"/>
-		<field name="ACTION_CHANNEL_NOTIFICATION_SETTINGS" since="26"/>
-		<field name="ACTION_DATA_ROAMING_SETTINGS" since="3"/>
-		<field name="ACTION_DATA_USAGE_SETTINGS" since="28"/>
-		<field name="ACTION_DATE_SETTINGS"/>
-		<field name="ACTION_DEVICE_INFO_SETTINGS" since="8"/>
-		<field name="ACTION_DISPLAY_SETTINGS"/>
-		<field name="ACTION_DREAM_SETTINGS" since="18"/>
-		<field name="ACTION_FINGERPRINT_ENROLL" since="28"/>
-		<field name="ACTION_HARD_KEYBOARD_SETTINGS" since="24"/>
-		<field name="ACTION_HOME_SETTINGS" since="21"/>
-		<field name="ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS" since="24"/>
-		<field name="ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS" since="23"/>
-		<field name="ACTION_INPUT_METHOD_SETTINGS" since="3"/>
-		<field name="ACTION_INPUT_METHOD_SUBTYPE_SETTINGS" since="11"/>
-		<field name="ACTION_INTERNAL_STORAGE_SETTINGS" since="3"/>
-		<field name="ACTION_LOCALE_SETTINGS"/>
-		<field name="ACTION_LOCATION_SOURCE_SETTINGS"/>
-		<field name="ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS" since="9"/>
-		<field name="ACTION_MANAGE_APPLICATIONS_SETTINGS" since="3"/>
-		<field name="ACTION_MANAGE_DEFAULT_APPS_SETTINGS" since="24"/>
-		<field name="ACTION_MANAGE_OVERLAY_PERMISSION" since="23"/>
-		<field name="ACTION_MANAGE_UNKNOWN_APP_SOURCES" since="26"/>
-		<field name="ACTION_MANAGE_WRITE_SETTINGS" since="23"/>
-		<field name="ACTION_MEMORY_CARD_SETTINGS" since="3"/>
-		<field name="ACTION_NETWORK_OPERATOR_SETTINGS" since="3"/>
-		<field name="ACTION_NFCSHARING_SETTINGS" since="14"/>
-		<field name="ACTION_NFC_PAYMENT_SETTINGS" since="19"/>
-		<field name="ACTION_NFC_SETTINGS" since="16"/>
-		<field name="ACTION_NIGHT_DISPLAY_SETTINGS" since="26"/>
-		<field name="ACTION_NOTIFICATION_LISTENER_SETTINGS" since="22"/>
-		<field name="ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS" since="23"/>
-		<field name="ACTION_PRINT_SETTINGS" since="19"/>
-		<field name="ACTION_PRIVACY_SETTINGS" since="5"/>
-		<field name="ACTION_QUICK_LAUNCH_SETTINGS" since="3"/>
-		<field name="ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23"/>
-		<field name="ACTION_REQUEST_SET_AUTOFILL_SERVICE" since="26"/>
-		<field name="ACTION_SEARCH_SETTINGS" since="8"/>
-		<field name="ACTION_SECURITY_SETTINGS"/>
-		<field name="ACTION_SETTINGS"/>
-		<field name="ACTION_SHOW_REGULATORY_INFO" since="21"/>
-		<field name="ACTION_SOUND_SETTINGS"/>
-		<field name="ACTION_STORAGE_VOLUME_ACCESS_SETTINGS" since="28"/>
-		<field name="ACTION_SYNC_SETTINGS" since="3"/>
-		<field name="ACTION_USAGE_ACCESS_SETTINGS" since="21"/>
-		<field name="ACTION_USER_DICTIONARY_SETTINGS" since="3"/>
-		<field name="ACTION_VOICE_CONTROL_AIRPLANE_MODE" since="23"/>
-		<field name="ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE" since="23"/>
-		<field name="ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE" since="23"/>
-		<field name="ACTION_VOICE_INPUT_SETTINGS" since="21"/>
-		<field name="ACTION_VPN_SETTINGS" since="24"/>
-		<field name="ACTION_VR_LISTENER_SETTINGS" since="24"/>
-		<field name="ACTION_WEBVIEW_SETTINGS" since="24"/>
-		<field name="ACTION_WIFI_IP_SETTINGS" since="3"/>
-		<field name="ACTION_WIFI_SETTINGS"/>
-		<field name="ACTION_WIRELESS_SETTINGS"/>
-		<field name="ACTION_ZEN_MODE_PRIORITY_SETTINGS" since="26"/>
-		<field name="AUTHORITY"/>
-		<field name="EXTRA_ACCOUNT_TYPES" since="18"/>
-		<field name="EXTRA_AIRPLANE_MODE_ENABLED" since="23"/>
-		<field name="EXTRA_APP_PACKAGE" since="26"/>
-		<field name="EXTRA_AUTHORITIES" since="8"/>
-		<field name="EXTRA_BATTERY_SAVER_MODE_ENABLED" since="23"/>
-		<field name="EXTRA_CHANNEL_ID" since="26"/>
-		<field name="EXTRA_DO_NOT_DISTURB_MODE_ENABLED" since="23"/>
-		<field name="EXTRA_DO_NOT_DISTURB_MODE_MINUTES" since="23"/>
-		<field name="EXTRA_INPUT_METHOD_ID" since="11"/>
-		<field name="EXTRA_SUB_ID" since="28"/>
-		<field name="INTENT_CATEGORY_USAGE_ACCESS_CONFIG" since="23"/>
-		<field name="METADATA_USAGE_ACCESS_REASON" since="23"/>
-	</class>
-	<class name="android/provider/Settings$Global" since="17">
-		<extends name="android/provider/Settings$NameValueTable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F"/>
-		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F"/>
-		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I"/>
-		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I"/>
-		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J"/>
-		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J"/>
-		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z"/>
-		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z"/>
-		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z"/>
-		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<field name="ADB_ENABLED"/>
-		<field name="AIRPLANE_MODE_ON"/>
-		<field name="AIRPLANE_MODE_RADIOS"/>
-		<field name="ALWAYS_FINISH_ACTIVITIES"/>
-		<field name="ANIMATOR_DURATION_SCALE"/>
-		<field name="AUTO_TIME"/>
-		<field name="AUTO_TIME_ZONE"/>
-		<field name="BLUETOOTH_ON"/>
-		<field name="BOOT_COUNT" since="24"/>
-		<field name="CONTACT_METADATA_SYNC_ENABLED" since="24"/>
-		<field name="CONTENT_URI"/>
-		<field name="DATA_ROAMING"/>
-		<field name="DEBUG_APP"/>
-		<field name="DEVELOPMENT_SETTINGS_ENABLED"/>
-		<field name="DEVICE_NAME" since="25"/>
-		<field name="DEVICE_PROVISIONED"/>
-		<field name="HTTP_PROXY"/>
-		<field name="INSTALL_NON_MARKET_APPS" deprecated="21"/>
-		<field name="MODE_RINGER"/>
-		<field name="NETWORK_PREFERENCE"/>
-		<field name="RADIO_BLUETOOTH"/>
-		<field name="RADIO_CELL"/>
-		<field name="RADIO_NFC"/>
-		<field name="RADIO_WIFI"/>
-		<field name="SHOW_PROCESSES" deprecated="26"/>
-		<field name="STAY_ON_WHILE_PLUGGED_IN"/>
-		<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
-		<field name="TRANSITION_ANIMATION_SCALE"/>
-		<field name="USB_MASS_STORAGE_ENABLED"/>
-		<field name="USE_GOOGLE_MAIL"/>
-		<field name="WAIT_FOR_DEBUGGER"/>
-		<field name="WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN" since="23"/>
-		<field name="WIFI_MAX_DHCP_RETRY_COUNT"/>
-		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS"/>
-		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="26"/>
-		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY"/>
-		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT"/>
-		<field name="WIFI_ON"/>
-		<field name="WIFI_SLEEP_POLICY"/>
-		<field name="WIFI_SLEEP_POLICY_DEFAULT"/>
-		<field name="WIFI_SLEEP_POLICY_NEVER"/>
-		<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED"/>
-		<field name="WIFI_WATCHDOG_ON"/>
-		<field name="WINDOW_ANIMATION_SCALE"/>
-	</class>
-	<class name="android/provider/Settings$NameValueTable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getUriFor(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="putString(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<field name="NAME"/>
-		<field name="VALUE"/>
-	</class>
-	<class name="android/provider/Settings$Secure" since="3">
-		<extends name="android/provider/Settings$NameValueTable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F"/>
-		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F"/>
-		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I"/>
-		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I"/>
-		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J"/>
-		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J"/>
-		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="isLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;)Z" since="8" deprecated="19"/>
-		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z"/>
-		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z"/>
-		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z"/>
-		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="setLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;Z)V" since="8" deprecated="19"/>
-		<field name="ACCESSIBILITY_DISPLAY_INVERSION_ENABLED" since="21"/>
-		<field name="ACCESSIBILITY_ENABLED" since="4"/>
-		<field name="ACCESSIBILITY_SPEAK_PASSWORD" since="15" deprecated="26"/>
-		<field name="ADB_ENABLED" deprecated="17"/>
-		<field name="ALLOWED_GEOLOCATION_ORIGINS" since="8"/>
-		<field name="ALLOW_MOCK_LOCATION" deprecated="23"/>
-		<field name="ANDROID_ID"/>
-		<field name="BACKGROUND_DATA" deprecated="16"/>
-		<field name="BLUETOOTH_ON" deprecated="17"/>
-		<field name="CONTENT_URI"/>
-		<field name="DATA_ROAMING" deprecated="17"/>
-		<field name="DEFAULT_INPUT_METHOD"/>
-		<field name="DEVELOPMENT_SETTINGS_ENABLED" since="16" deprecated="17"/>
-		<field name="DEVICE_PROVISIONED" deprecated="17"/>
-		<field name="ENABLED_ACCESSIBILITY_SERVICES" since="4"/>
-		<field name="ENABLED_INPUT_METHODS"/>
-		<field name="HTTP_PROXY" deprecated="17"/>
-		<field name="INPUT_METHOD_SELECTOR_VISIBILITY" since="11"/>
-		<field name="INSTALL_NON_MARKET_APPS" deprecated="17"/>
-		<field name="LOCATION_MODE" since="19" deprecated="28"/>
-		<field name="LOCATION_MODE_BATTERY_SAVING" since="19" deprecated="28"/>
-		<field name="LOCATION_MODE_HIGH_ACCURACY" since="19" deprecated="28"/>
-		<field name="LOCATION_MODE_OFF" since="19" deprecated="28"/>
-		<field name="LOCATION_MODE_SENSORS_ONLY" since="19" deprecated="28"/>
-		<field name="LOCATION_PROVIDERS_ALLOWED" deprecated="19"/>
-		<field name="LOCK_PATTERN_ENABLED" since="8" deprecated="23"/>
-		<field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="8" deprecated="17"/>
-		<field name="LOCK_PATTERN_VISIBLE" since="8" deprecated="23"/>
-		<field name="LOGGING_ID" deprecated="16"/>
-		<field name="NETWORK_PREFERENCE" deprecated="17"/>
-		<field name="PARENTAL_CONTROL_ENABLED"/>
-		<field name="PARENTAL_CONTROL_LAST_UPDATE"/>
-		<field name="PARENTAL_CONTROL_REDIRECT_URL"/>
-		<field name="RTT_CALLING_MODE" since="28"/>
-		<field name="SELECTED_INPUT_METHOD_SUBTYPE" since="11"/>
-		<field name="SETTINGS_CLASSNAME"/>
-		<field name="SKIP_FIRST_USE_HINTS" since="21"/>
-		<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
-		<field name="TOUCH_EXPLORATION_ENABLED" since="14"/>
-		<field name="TTS_DEFAULT_COUNTRY" since="4" deprecated="16"/>
-		<field name="TTS_DEFAULT_LANG" since="4" deprecated="16"/>
-		<field name="TTS_DEFAULT_PITCH" since="4"/>
-		<field name="TTS_DEFAULT_RATE" since="4"/>
-		<field name="TTS_DEFAULT_SYNTH" since="4"/>
-		<field name="TTS_DEFAULT_VARIANT" since="4" deprecated="16"/>
-		<field name="TTS_ENABLED_PLUGINS" since="8"/>
-		<field name="TTS_USE_DEFAULTS" since="4" deprecated="16"/>
-		<field name="USB_MASS_STORAGE_ENABLED" deprecated="17"/>
-		<field name="USE_GOOGLE_MAIL" deprecated="17"/>
-		<field name="WIFI_MAX_DHCP_RETRY_COUNT" deprecated="17"/>
-		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" deprecated="17"/>
-		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="17"/>
-		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="17"/>
-		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="17"/>
-		<field name="WIFI_ON" deprecated="17"/>
-		<field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_AP_COUNT" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_ON" deprecated="17"/>
-		<field name="WIFI_WATCHDOG_PING_COUNT" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_WATCH_LIST" deprecated="16"/>
-	</class>
-	<class name="android/provider/Settings$SettingNotFoundException" since="1">
-		<extends name="android/util/AndroidException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/provider/Settings$System" since="1">
-		<extends name="android/provider/Settings$NameValueTable"/>
-		<method name="&lt;init>()V"/>
-		<method name="canWrite(Landroid/content/Context;)Z" since="23"/>
-		<method name="getConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)V"/>
-		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F"/>
-		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F"/>
-		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I"/>
-		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I"/>
-		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J" since="3"/>
-		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J" since="3"/>
-		<method name="getShowGTalkServiceStatus(Landroid/content/ContentResolver;)Z" deprecated="17"/>
-		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<method name="putConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)Z"/>
-		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z"/>
-		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z"/>
-		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z" since="3"/>
-		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="setShowGTalkServiceStatus(Landroid/content/ContentResolver;Z)V" deprecated="17"/>
-		<field name="ACCELEROMETER_ROTATION" since="3"/>
-		<field name="ADB_ENABLED" deprecated="16"/>
-		<field name="AIRPLANE_MODE_ON" deprecated="17"/>
-		<field name="AIRPLANE_MODE_RADIOS" deprecated="17"/>
-		<field name="ALARM_ALERT" since="5"/>
-		<field name="ALWAYS_FINISH_ACTIVITIES" deprecated="17"/>
-		<field name="ANDROID_ID" deprecated="16"/>
-		<field name="ANIMATOR_DURATION_SCALE" since="16" deprecated="17"/>
-		<field name="APPEND_FOR_LAST_AUDIBLE" removed="23"/>
-		<field name="AUTO_TIME" deprecated="17"/>
-		<field name="AUTO_TIME_ZONE" since="11" deprecated="17"/>
-		<field name="BLUETOOTH_DISCOVERABILITY"/>
-		<field name="BLUETOOTH_DISCOVERABILITY_TIMEOUT"/>
-		<field name="BLUETOOTH_ON" deprecated="16"/>
-		<field name="CONTENT_URI"/>
-		<field name="DATA_ROAMING" deprecated="16"/>
-		<field name="DATE_FORMAT"/>
-		<field name="DEBUG_APP" deprecated="17"/>
-		<field name="DEFAULT_ALARM_ALERT_URI" since="5"/>
-		<field name="DEFAULT_NOTIFICATION_URI"/>
-		<field name="DEFAULT_RINGTONE_URI"/>
-		<field name="DEVICE_PROVISIONED" deprecated="16"/>
-		<field name="DIM_SCREEN" deprecated="17"/>
-		<field name="DTMF_TONE_TYPE_WHEN_DIALING" since="23"/>
-		<field name="DTMF_TONE_WHEN_DIALING"/>
-		<field name="END_BUTTON_BEHAVIOR"/>
-		<field name="FONT_SCALE"/>
-		<field name="HAPTIC_FEEDBACK_ENABLED" since="3"/>
-		<field name="HTTP_PROXY" deprecated="16"/>
-		<field name="INSTALL_NON_MARKET_APPS" deprecated="16"/>
-		<field name="LOCATION_PROVIDERS_ALLOWED" deprecated="16"/>
-		<field name="LOCK_PATTERN_ENABLED" deprecated="16"/>
-		<field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="3" deprecated="16"/>
-		<field name="LOCK_PATTERN_VISIBLE" deprecated="16"/>
-		<field name="LOGGING_ID" deprecated="16"/>
-		<field name="MODE_RINGER" deprecated="17"/>
-		<field name="MODE_RINGER_STREAMS_AFFECTED"/>
-		<field name="MUTE_STREAMS_AFFECTED"/>
-		<field name="NETWORK_PREFERENCE" deprecated="16"/>
-		<field name="NEXT_ALARM_FORMATTED" deprecated="21"/>
-		<field name="NOTIFICATION_SOUND"/>
-		<field name="PARENTAL_CONTROL_ENABLED" deprecated="16"/>
-		<field name="PARENTAL_CONTROL_LAST_UPDATE" deprecated="16"/>
-		<field name="PARENTAL_CONTROL_REDIRECT_URL" deprecated="16"/>
-		<field name="RADIO_BLUETOOTH" deprecated="17"/>
-		<field name="RADIO_CELL" deprecated="17"/>
-		<field name="RADIO_NFC" since="14" deprecated="17"/>
-		<field name="RADIO_WIFI" deprecated="17"/>
-		<field name="RINGTONE"/>
-		<field name="SCREEN_BRIGHTNESS"/>
-		<field name="SCREEN_BRIGHTNESS_MODE" since="8"/>
-		<field name="SCREEN_BRIGHTNESS_MODE_AUTOMATIC" since="8"/>
-		<field name="SCREEN_BRIGHTNESS_MODE_MANUAL" since="8"/>
-		<field name="SCREEN_OFF_TIMEOUT"/>
-		<field name="SETTINGS_CLASSNAME" deprecated="16"/>
-		<field name="SETUP_WIZARD_HAS_RUN"/>
-		<field name="SHOW_GTALK_SERVICE_STATUS"/>
-		<field name="SHOW_PROCESSES" deprecated="17"/>
-		<field name="SHOW_WEB_SUGGESTIONS" since="4" deprecated="16"/>
-		<field name="SOUND_EFFECTS_ENABLED"/>
-		<field name="STAY_ON_WHILE_PLUGGED_IN" deprecated="17"/>
-		<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
-		<field name="TEXT_AUTO_CAPS"/>
-		<field name="TEXT_AUTO_PUNCTUATE"/>
-		<field name="TEXT_AUTO_REPLACE"/>
-		<field name="TEXT_SHOW_PASSWORD"/>
-		<field name="TIME_12_24"/>
-		<field name="TRANSITION_ANIMATION_SCALE" deprecated="17"/>
-		<field name="USB_MASS_STORAGE_ENABLED" deprecated="16"/>
-		<field name="USER_ROTATION" since="11"/>
-		<field name="USE_GOOGLE_MAIL" deprecated="16"/>
-		<field name="VIBRATE_ON"/>
-		<field name="VIBRATE_WHEN_RINGING" since="23"/>
-		<field name="VOLUME_ALARM" removed="23"/>
-		<field name="VOLUME_BLUETOOTH_SCO" since="8" removed="23"/>
-		<field name="VOLUME_MUSIC" removed="23"/>
-		<field name="VOLUME_NOTIFICATION" since="3" removed="23"/>
-		<field name="VOLUME_RING" removed="23"/>
-		<field name="VOLUME_SETTINGS" removed="23"/>
-		<field name="VOLUME_SYSTEM" removed="23"/>
-		<field name="VOLUME_VOICE" removed="23"/>
-		<field name="WAIT_FOR_DEBUGGER" deprecated="17"/>
-		<field name="WALLPAPER_ACTIVITY" deprecated="17"/>
-		<field name="WIFI_MAX_DHCP_RETRY_COUNT" since="3" deprecated="16"/>
-		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" since="3" deprecated="16"/>
-		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="16"/>
-		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="16"/>
-		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="16"/>
-		<field name="WIFI_ON" deprecated="16"/>
-		<field name="WIFI_SLEEP_POLICY" since="3" deprecated="17"/>
-		<field name="WIFI_SLEEP_POLICY_DEFAULT" since="3" deprecated="17"/>
-		<field name="WIFI_SLEEP_POLICY_NEVER" since="3" deprecated="17"/>
-		<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED" since="3" deprecated="17"/>
-		<field name="WIFI_STATIC_DNS1" deprecated="17"/>
-		<field name="WIFI_STATIC_DNS2" deprecated="17"/>
-		<field name="WIFI_STATIC_GATEWAY" deprecated="17"/>
-		<field name="WIFI_STATIC_IP" deprecated="17"/>
-		<field name="WIFI_STATIC_NETMASK" deprecated="17"/>
-		<field name="WIFI_USE_STATIC_IP" deprecated="17"/>
-		<field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_AP_COUNT" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_ON" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_PING_COUNT" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="16"/>
-		<field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="16"/>
-		<field name="WINDOW_ANIMATION_SCALE" deprecated="17"/>
-	</class>
-	<class name="android/provider/SettingsSlicesContract" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUTHORITY"/>
-		<field name="BASE_URI"/>
-		<field name="KEY_AIRPLANE_MODE"/>
-		<field name="KEY_BATTERY_SAVER"/>
-		<field name="KEY_BLUETOOTH"/>
-		<field name="KEY_LOCATION"/>
-		<field name="KEY_WIFI"/>
-		<field name="PATH_SETTING_ACTION"/>
-		<field name="PATH_SETTING_INTENT"/>
-	</class>
-	<class name="android/provider/SyncStateContract" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/provider/SyncStateContract$Columns" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<field name="ACCOUNT_NAME"/>
-		<field name="ACCOUNT_TYPE"/>
-		<field name="DATA"/>
-	</class>
-	<class name="android/provider/SyncStateContract$Constants" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/SyncStateContract$Columns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_DIRECTORY"/>
-	</class>
-	<class name="android/provider/SyncStateContract$Helpers" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;)[B"/>
-		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;)Landroid/util/Pair;"/>
-		<method name="insert(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;[B)Landroid/net/Uri;"/>
-		<method name="newSetOperation(Landroid/net/Uri;Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
-		<method name="newUpdateOperation(Landroid/net/Uri;[B)Landroid/content/ContentProviderOperation;"/>
-		<method name="set(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;[B)V"/>
-		<method name="update(Landroid/content/ContentProviderClient;Landroid/net/Uri;[B)V"/>
-	</class>
-	<class name="android/provider/Telephony" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/provider/Telephony$BaseMmsColumns" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<field name="CONTENT_CLASS"/>
-		<field name="CONTENT_LOCATION"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CREATOR" since="21"/>
-		<field name="DATE"/>
-		<field name="DATE_SENT"/>
-		<field name="DELIVERY_REPORT"/>
-		<field name="DELIVERY_TIME"/>
-		<field name="EXPIRY"/>
-		<field name="LOCKED"/>
-		<field name="MESSAGE_BOX"/>
-		<field name="MESSAGE_BOX_ALL"/>
-		<field name="MESSAGE_BOX_DRAFTS"/>
-		<field name="MESSAGE_BOX_FAILED" since="21"/>
-		<field name="MESSAGE_BOX_INBOX"/>
-		<field name="MESSAGE_BOX_OUTBOX"/>
-		<field name="MESSAGE_BOX_SENT"/>
-		<field name="MESSAGE_CLASS"/>
-		<field name="MESSAGE_ID"/>
-		<field name="MESSAGE_SIZE"/>
-		<field name="MESSAGE_TYPE"/>
-		<field name="MMS_VERSION"/>
-		<field name="PRIORITY"/>
-		<field name="READ"/>
-		<field name="READ_REPORT"/>
-		<field name="READ_STATUS"/>
-		<field name="REPORT_ALLOWED"/>
-		<field name="RESPONSE_STATUS"/>
-		<field name="RESPONSE_TEXT"/>
-		<field name="RETRIEVE_STATUS"/>
-		<field name="RETRIEVE_TEXT"/>
-		<field name="RETRIEVE_TEXT_CHARSET"/>
-		<field name="SEEN"/>
-		<field name="STATUS"/>
-		<field name="SUBJECT"/>
-		<field name="SUBJECT_CHARSET"/>
-		<field name="SUBSCRIPTION_ID" since="22"/>
-		<field name="TEXT_ONLY"/>
-		<field name="THREAD_ID"/>
-		<field name="TRANSACTION_ID"/>
-	</class>
-	<class name="android/provider/Telephony$CanonicalAddressesColumns" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<field name="ADDRESS"/>
-	</class>
-	<class name="android/provider/Telephony$CarrierId" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getUriForSubscriptionId(I)Landroid/net/Uri;"/>
-		<field name="CARRIER_ID"/>
-		<field name="CARRIER_NAME"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/Telephony$Carriers" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="APN"/>
-		<field name="AUTH_TYPE"/>
-		<field name="BEARER" deprecated="28"/>
-		<field name="CARRIER_ENABLED"/>
-		<field name="CONTENT_URI"/>
-		<field name="CURRENT"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="MCC"/>
-		<field name="MMSC"/>
-		<field name="MMSPORT"/>
-		<field name="MMSPROXY"/>
-		<field name="MNC"/>
-		<field name="MVNO_MATCH_DATA"/>
-		<field name="MVNO_TYPE"/>
-		<field name="NAME"/>
-		<field name="NETWORK_TYPE_BITMASK" since="28"/>
-		<field name="NUMERIC"/>
-		<field name="PASSWORD"/>
-		<field name="PORT"/>
-		<field name="PROTOCOL"/>
-		<field name="PROXY"/>
-		<field name="ROAMING_PROTOCOL"/>
-		<field name="SERVER"/>
-		<field name="SUBSCRIPTION_ID" since="22"/>
-		<field name="TYPE"/>
-		<field name="USER"/>
-	</class>
-	<class name="android/provider/Telephony$Mms" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/Telephony$BaseMmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="REPORT_REQUEST_URI"/>
-		<field name="REPORT_STATUS_URI"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Addr" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="ADDRESS"/>
-		<field name="CHARSET"/>
-		<field name="CONTACT_ID"/>
-		<field name="MSG_ID"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Draft" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/Telephony$BaseMmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Inbox" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/Telephony$BaseMmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Intents" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_CHANGED_ACTION"/>
-		<field name="DELETED_CONTENTS"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Outbox" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/Telephony$BaseMmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Part" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CHARSET"/>
-		<field name="CONTENT_DISPOSITION"/>
-		<field name="CONTENT_ID"/>
-		<field name="CONTENT_LOCATION"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CT_START"/>
-		<field name="CT_TYPE"/>
-		<field name="FILENAME"/>
-		<field name="MSG_ID"/>
-		<field name="NAME"/>
-		<field name="SEQ"/>
-		<field name="TEXT"/>
-		<field name="_DATA"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Rate" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="SENT_TIME"/>
-	</class>
-	<class name="android/provider/Telephony$Mms$Sent" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/Telephony$BaseMmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$MmsSms" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_CONVERSATIONS_URI"/>
-		<field name="CONTENT_DRAFT_URI"/>
-		<field name="CONTENT_FILTER_BYPHONE_URI"/>
-		<field name="CONTENT_LOCKED_URI"/>
-		<field name="CONTENT_UNDELIVERED_URI"/>
-		<field name="CONTENT_URI"/>
-		<field name="ERR_TYPE_GENERIC"/>
-		<field name="ERR_TYPE_GENERIC_PERMANENT"/>
-		<field name="ERR_TYPE_MMS_PROTO_PERMANENT"/>
-		<field name="ERR_TYPE_MMS_PROTO_TRANSIENT"/>
-		<field name="ERR_TYPE_SMS_PROTO_PERMANENT"/>
-		<field name="ERR_TYPE_SMS_PROTO_TRANSIENT"/>
-		<field name="ERR_TYPE_TRANSPORT_FAILURE"/>
-		<field name="MMS_PROTO"/>
-		<field name="NO_ERROR"/>
-		<field name="SEARCH_URI"/>
-		<field name="SMS_PROTO"/>
-		<field name="TYPE_DISCRIMINATOR_COLUMN"/>
-	</class>
-	<class name="android/provider/Telephony$MmsSms$PendingMessages" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DUE_TIME"/>
-		<field name="ERROR_CODE"/>
-		<field name="ERROR_TYPE"/>
-		<field name="LAST_TRY"/>
-		<field name="MSG_ID"/>
-		<field name="MSG_TYPE"/>
-		<field name="PROTO_TYPE"/>
-		<field name="RETRY_INDEX"/>
-		<field name="SUBSCRIPTION_ID" since="22"/>
-	</class>
-	<class name="android/provider/Telephony$ServiceStateTable" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getUriForSubscriptionId(I)Landroid/net/Uri;"/>
-		<method name="getUriForSubscriptionIdAndField(ILjava/lang/String;)Landroid/net/Uri;"/>
-		<field name="AUTHORITY"/>
-		<field name="CONTENT_URI"/>
-		<field name="IS_MANUAL_NETWORK_SELECTION"/>
-		<field name="VOICE_OPERATOR_NUMERIC"/>
-		<field name="VOICE_REG_STATE"/>
-	</class>
-	<class name="android/provider/Telephony$Sms" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultSmsPackage(Landroid/content/Context;)Ljava/lang/String;"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$Sms$Conversations" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="MESSAGE_COUNT"/>
-		<field name="SNIPPET"/>
-	</class>
-	<class name="android/provider/Telephony$Sms$Draft" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$Sms$Inbox" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$Sms$Intents" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMessagesFromIntent(Landroid/content/Intent;)[Landroid/telephony/SmsMessage;"/>
-		<field name="ACTION_CHANGE_DEFAULT"/>
-		<field name="ACTION_DEFAULT_SMS_PACKAGE_CHANGED" since="24"/>
-		<field name="ACTION_EXTERNAL_PROVIDER_CHANGE" since="24"/>
-		<field name="DATA_SMS_RECEIVED_ACTION"/>
-		<field name="EXTRA_IS_DEFAULT_SMS_APP" since="24"/>
-		<field name="EXTRA_PACKAGE_NAME"/>
-		<field name="RESULT_SMS_DUPLICATED"/>
-		<field name="RESULT_SMS_GENERIC_ERROR"/>
-		<field name="RESULT_SMS_HANDLED"/>
-		<field name="RESULT_SMS_OUT_OF_MEMORY"/>
-		<field name="RESULT_SMS_UNSUPPORTED"/>
-		<field name="SECRET_CODE_ACTION" since="28"/>
-		<field name="SIM_FULL_ACTION"/>
-		<field name="SMS_CB_RECEIVED_ACTION"/>
-		<field name="SMS_DELIVER_ACTION"/>
-		<field name="SMS_EMERGENCY_CB_RECEIVED_ACTION" removed="24"/>
-		<field name="SMS_RECEIVED_ACTION"/>
-		<field name="SMS_REJECTED_ACTION"/>
-		<field name="SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION"/>
-		<field name="WAP_PUSH_DELIVER_ACTION"/>
-		<field name="WAP_PUSH_RECEIVED_ACTION"/>
-	</class>
-	<class name="android/provider/Telephony$Sms$Outbox" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$Sms$Sent" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
-		<method name="&lt;init>()V"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-	</class>
-	<class name="android/provider/Telephony$TextBasedSmsColumns" since="19">
-		<extends name="java/lang/Object"/>
-		<field name="ADDRESS"/>
-		<field name="BODY"/>
-		<field name="CREATOR" since="21"/>
-		<field name="DATE"/>
-		<field name="DATE_SENT"/>
-		<field name="ERROR_CODE"/>
-		<field name="LOCKED"/>
-		<field name="MESSAGE_TYPE_ALL"/>
-		<field name="MESSAGE_TYPE_DRAFT"/>
-		<field name="MESSAGE_TYPE_FAILED"/>
-		<field name="MESSAGE_TYPE_INBOX"/>
-		<field name="MESSAGE_TYPE_OUTBOX"/>
-		<field name="MESSAGE_TYPE_QUEUED"/>
-		<field name="MESSAGE_TYPE_SENT"/>
-		<field name="PERSON"/>
-		<field name="PROTOCOL"/>
-		<field name="READ"/>
-		<field name="REPLY_PATH_PRESENT"/>
-		<field name="SEEN"/>
-		<field name="SERVICE_CENTER"/>
-		<field name="STATUS"/>
-		<field name="STATUS_COMPLETE"/>
-		<field name="STATUS_FAILED"/>
-		<field name="STATUS_NONE"/>
-		<field name="STATUS_PENDING"/>
-		<field name="SUBJECT"/>
-		<field name="SUBSCRIPTION_ID" since="22"/>
-		<field name="THREAD_ID"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="android/provider/Telephony$Threads" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/Telephony$ThreadsColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/lang/String;)J" since="23"/>
-		<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/util/Set;)J" since="23"/>
-		<field name="BROADCAST_THREAD"/>
-		<field name="COMMON_THREAD"/>
-		<field name="CONTENT_URI"/>
-		<field name="OBSOLETE_THREADS_URI"/>
-	</class>
-	<class name="android/provider/Telephony$ThreadsColumns" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<field name="ARCHIVED" since="21"/>
-		<field name="DATE"/>
-		<field name="ERROR"/>
-		<field name="HAS_ATTACHMENT"/>
-		<field name="MESSAGE_COUNT"/>
-		<field name="READ"/>
-		<field name="RECIPIENT_IDS"/>
-		<field name="SNIPPET"/>
-		<field name="SNIPPET_CHARSET"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="android/provider/UserDictionary" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="AUTHORITY"/>
-		<field name="CONTENT_URI"/>
-	</class>
-	<class name="android/provider/UserDictionary$Words" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="addWord(Landroid/content/Context;Ljava/lang/String;II)V" deprecated="16"/>
-		<method name="addWord(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;Ljava/util/Locale;)V" since="16"/>
-		<field name="APP_ID"/>
-		<field name="CONTENT_ITEM_TYPE"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CONTENT_URI"/>
-		<field name="DEFAULT_SORT_ORDER"/>
-		<field name="FREQUENCY"/>
-		<field name="LOCALE"/>
-		<field name="LOCALE_TYPE_ALL" deprecated="16"/>
-		<field name="LOCALE_TYPE_CURRENT" deprecated="16"/>
-		<field name="SHORTCUT" since="16"/>
-		<field name="WORD"/>
-		<field name="_ID"/>
-	</class>
-	<class name="android/provider/VoicemailContract" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACTION_FETCH_VOICEMAIL"/>
-		<field name="ACTION_NEW_VOICEMAIL"/>
-		<field name="ACTION_SYNC_VOICEMAIL" since="24"/>
-		<field name="AUTHORITY"/>
-		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="25"/>
-		<field name="EXTRA_SELF_CHANGE"/>
-		<field name="PARAM_KEY_SOURCE_PACKAGE"/>
-	</class>
-	<class name="android/provider/VoicemailContract$Status" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<field name="CONFIGURATION_STATE"/>
-		<field name="CONFIGURATION_STATE_CAN_BE_CONFIGURED"/>
-		<field name="CONFIGURATION_STATE_CONFIGURING" since="25"/>
-		<field name="CONFIGURATION_STATE_DISABLED" since="25"/>
-		<field name="CONFIGURATION_STATE_FAILED" since="25"/>
-		<field name="CONFIGURATION_STATE_NOT_CONFIGURED"/>
-		<field name="CONFIGURATION_STATE_OK"/>
-		<field name="CONTENT_URI"/>
-		<field name="DATA_CHANNEL_STATE"/>
-		<field name="DATA_CHANNEL_STATE_BAD_CONFIGURATION" since="24"/>
-		<field name="DATA_CHANNEL_STATE_COMMUNICATION_ERROR" since="24"/>
-		<field name="DATA_CHANNEL_STATE_NO_CONNECTION"/>
-		<field name="DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED" since="24"/>
-		<field name="DATA_CHANNEL_STATE_OK"/>
-		<field name="DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR" since="24"/>
-		<field name="DATA_CHANNEL_STATE_SERVER_ERROR" since="24"/>
-		<field name="DIR_TYPE"/>
-		<field name="ITEM_TYPE"/>
-		<field name="NOTIFICATION_CHANNEL_STATE"/>
-		<field name="NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING"/>
-		<field name="NOTIFICATION_CHANNEL_STATE_NO_CONNECTION"/>
-		<field name="NOTIFICATION_CHANNEL_STATE_OK"/>
-		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="23"/>
-		<field name="PHONE_ACCOUNT_ID" since="23"/>
-		<field name="QUOTA_OCCUPIED" since="24"/>
-		<field name="QUOTA_TOTAL" since="24"/>
-		<field name="QUOTA_UNAVAILABLE" since="24"/>
-		<field name="SETTINGS_URI"/>
-		<field name="SOURCE_PACKAGE"/>
-		<field name="SOURCE_TYPE" since="25"/>
-		<field name="VOICEMAIL_ACCESS_URI"/>
-	</class>
-	<class name="android/provider/VoicemailContract$Voicemails" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/provider/BaseColumns"/>
-		<implements name="android/provider/OpenableColumns"/>
-		<method name="&lt;init>()V"/>
-		<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;"/>
-		<field name="ARCHIVED" since="26"/>
-		<field name="BACKED_UP" since="26"/>
-		<field name="CONTENT_URI"/>
-		<field name="DATE"/>
-		<field name="DELETED" since="23"/>
-		<field name="DIRTY" since="23"/>
-		<field name="DIRTY_RETAIN" since="28"/>
-		<field name="DIR_TYPE"/>
-		<field name="DURATION"/>
-		<field name="HAS_CONTENT"/>
-		<field name="IS_OMTP_VOICEMAIL" since="26"/>
-		<field name="IS_READ"/>
-		<field name="ITEM_TYPE"/>
-		<field name="LAST_MODIFIED" since="24"/>
-		<field name="MIME_TYPE"/>
-		<field name="NEW" since="28"/>
-		<field name="NUMBER"/>
-		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="23"/>
-		<field name="PHONE_ACCOUNT_ID" since="23"/>
-		<field name="RESTORED" since="26"/>
-		<field name="SOURCE_DATA"/>
-		<field name="SOURCE_PACKAGE"/>
-		<field name="TRANSCRIPTION" since="21"/>
-	</class>
-	<class name="android/renderscript/Allocation" since="11">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Type;I)V" since="29"/>
-		<method name="copy1DRangeFrom(IILandroid/renderscript/Allocation;I)V" since="14"/>
-		<method name="copy1DRangeFrom(IILjava/lang/Object;)V" since="21"/>
-		<method name="copy1DRangeFrom(II[B)V"/>
-		<method name="copy1DRangeFrom(II[F)V"/>
-		<method name="copy1DRangeFrom(II[I)V"/>
-		<method name="copy1DRangeFrom(II[S)V"/>
-		<method name="copy1DRangeFromUnchecked(IILjava/lang/Object;)V" since="21"/>
-		<method name="copy1DRangeFromUnchecked(II[B)V"/>
-		<method name="copy1DRangeFromUnchecked(II[F)V"/>
-		<method name="copy1DRangeFromUnchecked(II[I)V"/>
-		<method name="copy1DRangeFromUnchecked(II[S)V"/>
-		<method name="copy1DRangeTo(IILjava/lang/Object;)V" since="23"/>
-		<method name="copy1DRangeTo(II[B)V" since="23"/>
-		<method name="copy1DRangeTo(II[F)V" since="23"/>
-		<method name="copy1DRangeTo(II[I)V" since="23"/>
-		<method name="copy1DRangeTo(II[S)V" since="23"/>
-		<method name="copy1DRangeToUnchecked(IILjava/lang/Object;)V" since="23"/>
-		<method name="copy1DRangeToUnchecked(II[B)V" since="23"/>
-		<method name="copy1DRangeToUnchecked(II[F)V" since="23"/>
-		<method name="copy1DRangeToUnchecked(II[I)V" since="23"/>
-		<method name="copy1DRangeToUnchecked(II[S)V" since="23"/>
-		<method name="copy2DRangeFrom(IIIILandroid/renderscript/Allocation;II)V" since="14"/>
-		<method name="copy2DRangeFrom(IIIILjava/lang/Object;)V" since="21"/>
-		<method name="copy2DRangeFrom(IIII[B)V"/>
-		<method name="copy2DRangeFrom(IIII[F)V"/>
-		<method name="copy2DRangeFrom(IIII[I)V"/>
-		<method name="copy2DRangeFrom(IIII[S)V"/>
-		<method name="copy2DRangeFrom(IILandroid/graphics/Bitmap;)V"/>
-		<method name="copy2DRangeTo(IIIILjava/lang/Object;)V" since="23"/>
-		<method name="copy2DRangeTo(IIII[B)V" since="23"/>
-		<method name="copy2DRangeTo(IIII[F)V" since="23"/>
-		<method name="copy2DRangeTo(IIII[I)V" since="23"/>
-		<method name="copy2DRangeTo(IIII[S)V" since="23"/>
-		<method name="copy3DRangeFrom(IIIIIILandroid/renderscript/Allocation;III)V" since="23"/>
-		<method name="copy3DRangeFrom(IIIIIILjava/lang/Object;)V" since="23"/>
-		<method name="copy3DRangeTo(IIIIIILjava/lang/Object;)V" since="23"/>
-		<method name="copyFrom(Landroid/graphics/Bitmap;)V"/>
-		<method name="copyFrom(Landroid/renderscript/Allocation;)V" since="18"/>
-		<method name="copyFrom(Ljava/lang/Object;)V" since="21"/>
-		<method name="copyFrom([B)V"/>
-		<method name="copyFrom([F)V"/>
-		<method name="copyFrom([I)V"/>
-		<method name="copyFrom([Landroid/renderscript/BaseObj;)V"/>
-		<method name="copyFrom([S)V"/>
-		<method name="copyFromUnchecked(Ljava/lang/Object;)V" since="21"/>
-		<method name="copyFromUnchecked([B)V"/>
-		<method name="copyFromUnchecked([F)V"/>
-		<method name="copyFromUnchecked([I)V"/>
-		<method name="copyFromUnchecked([S)V"/>
-		<method name="copyTo(Landroid/graphics/Bitmap;)V"/>
-		<method name="copyTo(Ljava/lang/Object;)V" since="21"/>
-		<method name="copyTo([B)V"/>
-		<method name="copyTo([F)V"/>
-		<method name="copyTo([I)V"/>
-		<method name="copyTo([S)V"/>
-		<method name="createAllocations(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;II)[Landroid/renderscript/Allocation;" since="24"/>
-		<method name="createCubemapFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;"/>
-		<method name="createCubemapFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;"/>
-		<method name="createCubemapFromCubeFaces(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;"/>
-		<method name="createCubemapFromCubeFaces(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;"/>
-		<method name="createFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;"/>
-		<method name="createFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;"/>
-		<method name="createFromBitmapResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)Landroid/renderscript/Allocation;"/>
-		<method name="createFromBitmapResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;ILandroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;"/>
-		<method name="createFromString(Landroid/renderscript/RenderScript;Ljava/lang/String;I)Landroid/renderscript/Allocation;"/>
-		<method name="createSized(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;I)Landroid/renderscript/Allocation;"/>
-		<method name="createSized(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;II)Landroid/renderscript/Allocation;"/>
-		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;)Landroid/renderscript/Allocation;"/>
-		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;I)Landroid/renderscript/Allocation;"/>
-		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;"/>
-		<method name="generateMipmaps()V"/>
-		<method name="getByteBuffer()Ljava/nio/ByteBuffer;" since="24"/>
-		<method name="getBytesSize()I" since="16"/>
-		<method name="getElement()Landroid/renderscript/Element;" since="16"/>
-		<method name="getStride()J" since="24"/>
-		<method name="getSurface()Landroid/view/Surface;" since="16"/>
-		<method name="getTimeStamp()J" since="24"/>
-		<method name="getType()Landroid/renderscript/Type;"/>
-		<method name="getUsage()I" since="16"/>
-		<method name="ioReceive()V" since="16"/>
-		<method name="ioSend()V" since="16"/>
-		<method name="resize(I)V" deprecated="18"/>
-		<method name="setAutoPadding(Z)V" since="23"/>
-		<method name="setFromFieldPacker(IIIILandroid/renderscript/FieldPacker;)V" since="23"/>
-		<method name="setFromFieldPacker(IILandroid/renderscript/FieldPacker;)V"/>
-		<method name="setFromFieldPacker(ILandroid/renderscript/FieldPacker;)V"/>
-		<method name="setOnBufferAvailableListener(Landroid/renderscript/Allocation$OnBufferAvailableListener;)V" since="19"/>
-		<method name="setSurface(Landroid/view/Surface;)V" since="16"/>
-		<method name="syncAll(I)V"/>
-		<field name="USAGE_GRAPHICS_CONSTANTS"/>
-		<field name="USAGE_GRAPHICS_RENDER_TARGET" since="14"/>
-		<field name="USAGE_GRAPHICS_TEXTURE"/>
-		<field name="USAGE_GRAPHICS_VERTEX"/>
-		<field name="USAGE_IO_INPUT" since="16"/>
-		<field name="USAGE_IO_OUTPUT" since="16"/>
-		<field name="USAGE_SCRIPT"/>
-		<field name="USAGE_SHARED" since="18"/>
-	</class>
-	<class name="android/renderscript/Allocation$MipmapControl" since="11">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Allocation$MipmapControl;"/>
-		<method name="values()[Landroid/renderscript/Allocation$MipmapControl;"/>
-		<field name="MIPMAP_FULL"/>
-		<field name="MIPMAP_NONE"/>
-		<field name="MIPMAP_ON_SYNC_TO_TEXTURE"/>
-	</class>
-	<class name="android/renderscript/Allocation$OnBufferAvailableListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onBufferAvailable(Landroid/renderscript/Allocation;)V"/>
-	</class>
-	<class name="android/renderscript/AllocationAdapter" since="11">
-		<extends name="android/renderscript/Allocation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Allocation;Landroid/renderscript/Type;)V" since="29"/>
-		<method name="create1D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;" since="14"/>
-		<method name="create2D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;"/>
-		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;Landroid/renderscript/Type;)Landroid/renderscript/AllocationAdapter;" since="23"/>
-		<method name="readData([F)V" removed="14"/>
-		<method name="readData([I)V" removed="14"/>
-		<method name="setFace(Landroid/renderscript/Type$CubemapFace;)V"/>
-		<method name="setLOD(I)V"/>
-		<method name="setX(I)V" since="23"/>
-		<method name="setY(I)V"/>
-		<method name="setZ(I)V"/>
-		<method name="subData(ILandroid/renderscript/FieldPacker;)V" removed="14"/>
-		<method name="subData1D(II[B)V" removed="14"/>
-		<method name="subData1D(II[F)V" removed="14"/>
-		<method name="subData1D(II[I)V" removed="14"/>
-		<method name="subData1D(II[S)V" removed="14"/>
-		<method name="subData2D(IIII[F)V" removed="14"/>
-		<method name="subData2D(IIII[I)V" removed="14"/>
-		<method name="subElementData(IILandroid/renderscript/FieldPacker;)V" removed="14"/>
-	</class>
-	<class name="android/renderscript/BaseObj" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="destroy()V"/>
-		<method name="getName()Ljava/lang/String;" since="14"/>
-		<method name="setName(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/renderscript/Byte2" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(BB)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/renderscript/Byte3" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(BBB)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Byte4" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(BBBB)V" since="14"/>
-		<field name="w"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Double2" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(DD)V"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/renderscript/Double3" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(DDD)V"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Double4" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(DDDD)V"/>
-		<field name="w"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Element" since="11">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="ALLOCATION(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="A_8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="BOOLEAN(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="ELEMENT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="F16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23"/>
-		<method name="F16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23"/>
-		<method name="F16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23"/>
-		<method name="F16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23"/>
-		<method name="F32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="F32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="F32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="F32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="F64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="F64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="F64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="F64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="FONT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="16"/>
-		<method name="I16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="I16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="I32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="I64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="I8_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I8_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="I8_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="MATRIX4X4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="16"/>
-		<method name="MATRIX_2X2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="MATRIX_3X3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="MATRIX_4X4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="MESH(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="PROGRAM_FRAGMENT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="PROGRAM_RASTER(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="PROGRAM_STORE(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="PROGRAM_VERTEX(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="RGBA_4444(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="RGBA_5551(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="RGBA_8888(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="RGB_565(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="RGB_888(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="SAMPLER(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="SCRIPT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="TYPE(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="U16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="U16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="U32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="U64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="U8_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U8_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14"/>
-		<method name="U8_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;"/>
-		<method name="YUV(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="19"/>
-		<method name="createPixel(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;Landroid/renderscript/Element$DataKind;)Landroid/renderscript/Element;"/>
-		<method name="createVector(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;I)Landroid/renderscript/Element;"/>
-		<method name="getBytesSize()I" since="16"/>
-		<method name="getDataKind()Landroid/renderscript/Element$DataKind;" since="16"/>
-		<method name="getDataType()Landroid/renderscript/Element$DataType;" since="16"/>
-		<method name="getSubElement(I)Landroid/renderscript/Element;" since="16"/>
-		<method name="getSubElementArraySize(I)I" since="16"/>
-		<method name="getSubElementCount()I" since="16"/>
-		<method name="getSubElementName(I)Ljava/lang/String;" since="16"/>
-		<method name="getSubElementOffsetBytes(I)I" since="16"/>
-		<method name="getVectorSize()I" since="16"/>
-		<method name="isCompatible(Landroid/renderscript/Element;)Z" since="14"/>
-		<method name="isComplex()Z"/>
-	</class>
-	<class name="android/renderscript/Element$Builder" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
-		<method name="add(Landroid/renderscript/Element;Ljava/lang/String;)Landroid/renderscript/Element$Builder;"/>
-		<method name="add(Landroid/renderscript/Element;Ljava/lang/String;I)Landroid/renderscript/Element$Builder;"/>
-		<method name="create()Landroid/renderscript/Element;"/>
-	</class>
-	<class name="android/renderscript/Element$DataKind" since="11">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Element$DataKind;"/>
-		<method name="values()[Landroid/renderscript/Element$DataKind;"/>
-		<field name="PIXEL_A"/>
-		<field name="PIXEL_DEPTH" since="14"/>
-		<field name="PIXEL_L"/>
-		<field name="PIXEL_LA"/>
-		<field name="PIXEL_RGB"/>
-		<field name="PIXEL_RGBA"/>
-		<field name="PIXEL_YUV" since="18"/>
-		<field name="USER"/>
-	</class>
-	<class name="android/renderscript/Element$DataType" since="11">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Element$DataType;"/>
-		<method name="values()[Landroid/renderscript/Element$DataType;"/>
-		<field name="BOOLEAN"/>
-		<field name="FLOAT_16" since="23"/>
-		<field name="FLOAT_32"/>
-		<field name="FLOAT_64"/>
-		<field name="MATRIX_2X2"/>
-		<field name="MATRIX_3X3"/>
-		<field name="MATRIX_4X4"/>
-		<field name="NONE" since="16"/>
-		<field name="RS_ALLOCATION"/>
-		<field name="RS_ELEMENT"/>
-		<field name="RS_FONT" since="16"/>
-		<field name="RS_MESH"/>
-		<field name="RS_PROGRAM_FRAGMENT"/>
-		<field name="RS_PROGRAM_RASTER"/>
-		<field name="RS_PROGRAM_STORE"/>
-		<field name="RS_PROGRAM_VERTEX"/>
-		<field name="RS_SAMPLER"/>
-		<field name="RS_SCRIPT"/>
-		<field name="RS_TYPE"/>
-		<field name="SIGNED_16"/>
-		<field name="SIGNED_32"/>
-		<field name="SIGNED_64"/>
-		<field name="SIGNED_8"/>
-		<field name="UNSIGNED_16"/>
-		<field name="UNSIGNED_32"/>
-		<field name="UNSIGNED_4_4_4_4"/>
-		<field name="UNSIGNED_5_5_5_1"/>
-		<field name="UNSIGNED_5_6_5"/>
-		<field name="UNSIGNED_64"/>
-		<field name="UNSIGNED_8"/>
-	</class>
-	<class name="android/renderscript/FieldPacker" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>([B)V" since="18"/>
-		<method name="addBoolean(Z)V"/>
-		<method name="addF32(F)V"/>
-		<method name="addF32(Landroid/renderscript/Float2;)V"/>
-		<method name="addF32(Landroid/renderscript/Float3;)V"/>
-		<method name="addF32(Landroid/renderscript/Float4;)V"/>
-		<method name="addF64(D)V"/>
-		<method name="addF64(Landroid/renderscript/Double2;)V" since="14"/>
-		<method name="addF64(Landroid/renderscript/Double3;)V" since="14"/>
-		<method name="addF64(Landroid/renderscript/Double4;)V" since="14"/>
-		<method name="addI16(Landroid/renderscript/Short2;)V"/>
-		<method name="addI16(Landroid/renderscript/Short3;)V"/>
-		<method name="addI16(Landroid/renderscript/Short4;)V"/>
-		<method name="addI16(S)V"/>
-		<method name="addI32(I)V"/>
-		<method name="addI32(Landroid/renderscript/Int2;)V"/>
-		<method name="addI32(Landroid/renderscript/Int3;)V"/>
-		<method name="addI32(Landroid/renderscript/Int4;)V"/>
-		<method name="addI64(J)V"/>
-		<method name="addI64(Landroid/renderscript/Long2;)V" since="14"/>
-		<method name="addI64(Landroid/renderscript/Long3;)V" since="14"/>
-		<method name="addI64(Landroid/renderscript/Long4;)V" since="14"/>
-		<method name="addI8(B)V"/>
-		<method name="addI8(Landroid/renderscript/Byte2;)V"/>
-		<method name="addI8(Landroid/renderscript/Byte3;)V"/>
-		<method name="addI8(Landroid/renderscript/Byte4;)V"/>
-		<method name="addMatrix(Landroid/renderscript/Matrix2f;)V"/>
-		<method name="addMatrix(Landroid/renderscript/Matrix3f;)V"/>
-		<method name="addMatrix(Landroid/renderscript/Matrix4f;)V"/>
-		<method name="addObj(Landroid/renderscript/BaseObj;)V"/>
-		<method name="addU16(I)V"/>
-		<method name="addU16(Landroid/renderscript/Int2;)V"/>
-		<method name="addU16(Landroid/renderscript/Int3;)V"/>
-		<method name="addU16(Landroid/renderscript/Int4;)V"/>
-		<method name="addU32(J)V"/>
-		<method name="addU32(Landroid/renderscript/Long2;)V"/>
-		<method name="addU32(Landroid/renderscript/Long3;)V"/>
-		<method name="addU32(Landroid/renderscript/Long4;)V"/>
-		<method name="addU64(J)V"/>
-		<method name="addU64(Landroid/renderscript/Long2;)V" since="14"/>
-		<method name="addU64(Landroid/renderscript/Long3;)V" since="14"/>
-		<method name="addU64(Landroid/renderscript/Long4;)V" since="14"/>
-		<method name="addU8(Landroid/renderscript/Short2;)V"/>
-		<method name="addU8(Landroid/renderscript/Short3;)V"/>
-		<method name="addU8(Landroid/renderscript/Short4;)V"/>
-		<method name="addU8(S)V"/>
-		<method name="align(I)V"/>
-		<method name="getData()[B"/>
-		<method name="reset()V"/>
-		<method name="reset(I)V"/>
-		<method name="skip(I)V"/>
-		<method name="subBoolean()Z" since="18"/>
-		<method name="subByte2()Landroid/renderscript/Byte2;" since="18"/>
-		<method name="subByte3()Landroid/renderscript/Byte3;" since="18"/>
-		<method name="subByte4()Landroid/renderscript/Byte4;" since="18"/>
-		<method name="subDouble2()Landroid/renderscript/Double2;" since="18"/>
-		<method name="subDouble3()Landroid/renderscript/Double3;" since="18"/>
-		<method name="subDouble4()Landroid/renderscript/Double4;" since="18"/>
-		<method name="subF32()F" since="18"/>
-		<method name="subF64()D" since="18"/>
-		<method name="subFloat2()Landroid/renderscript/Float2;" since="18"/>
-		<method name="subFloat3()Landroid/renderscript/Float3;" since="18"/>
-		<method name="subFloat4()Landroid/renderscript/Float4;" since="18"/>
-		<method name="subI16()S" since="18"/>
-		<method name="subI32()I" since="18"/>
-		<method name="subI64()J" since="18"/>
-		<method name="subI8()B" since="18"/>
-		<method name="subInt2()Landroid/renderscript/Int2;" since="18"/>
-		<method name="subInt3()Landroid/renderscript/Int3;" since="18"/>
-		<method name="subInt4()Landroid/renderscript/Int4;" since="18"/>
-		<method name="subLong2()Landroid/renderscript/Long2;" since="18"/>
-		<method name="subLong3()Landroid/renderscript/Long3;" since="18"/>
-		<method name="subLong4()Landroid/renderscript/Long4;" since="18"/>
-		<method name="subMatrix2f()Landroid/renderscript/Matrix2f;" since="18"/>
-		<method name="subMatrix3f()Landroid/renderscript/Matrix3f;" since="18"/>
-		<method name="subMatrix4f()Landroid/renderscript/Matrix4f;" since="18"/>
-		<method name="subShort2()Landroid/renderscript/Short2;" since="18"/>
-		<method name="subShort3()Landroid/renderscript/Short3;" since="18"/>
-		<method name="subShort4()Landroid/renderscript/Short4;" since="18"/>
-		<method name="subalign(I)V" since="18"/>
-	</class>
-	<class name="android/renderscript/FileA3D" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V"/>
-		<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16"/>
-		<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/io/File;)Landroid/renderscript/FileA3D;" deprecated="16"/>
-		<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16"/>
-		<method name="createFromResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)Landroid/renderscript/FileA3D;" deprecated="16"/>
-		<method name="getIndexEntry(I)Landroid/renderscript/FileA3D$IndexEntry;" deprecated="16"/>
-		<method name="getIndexEntryCount()I" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/FileA3D$EntryType" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/FileA3D$EntryType;"/>
-		<method name="values()[Landroid/renderscript/FileA3D$EntryType;"/>
-		<field name="MESH"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/renderscript/FileA3D$IndexEntry" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEntryType()Landroid/renderscript/FileA3D$EntryType;" deprecated="16"/>
-		<method name="getMesh()Landroid/renderscript/Mesh;" deprecated="16"/>
-		<method name="getName()Ljava/lang/String;" deprecated="16"/>
-		<method name="getObject()Landroid/renderscript/BaseObj;" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/Float2" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(FF)V"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/renderscript/Float3" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(FFF)V"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Float4" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(FFFF)V"/>
-		<field name="w"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Font" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;Landroid/renderscript/Font$Style;F)Landroid/renderscript/Font;" deprecated="16"/>
-		<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;F)Landroid/renderscript/Font;" deprecated="16"/>
-		<method name="createFromFile(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/io/File;F)Landroid/renderscript/Font;" deprecated="16"/>
-		<method name="createFromFile(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;F)Landroid/renderscript/Font;" deprecated="16"/>
-		<method name="createFromResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;IF)Landroid/renderscript/Font;" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/Font$Style" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Font$Style;"/>
-		<method name="values()[Landroid/renderscript/Font$Style;"/>
-		<field name="BOLD"/>
-		<field name="BOLD_ITALIC"/>
-		<field name="ITALIC"/>
-		<field name="NORMAL"/>
-	</class>
-	<class name="android/renderscript/Int2" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(II)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/renderscript/Int3" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Int4" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(IIII)V" since="14"/>
-		<field name="w"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Long2" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(JJ)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/renderscript/Long3" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(JJJ)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Long4" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(JJJJ)V" since="14"/>
-		<field name="w"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Matrix2f" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([F)V"/>
-		<method name="get(II)F"/>
-		<method name="getArray()[F"/>
-		<method name="load(Landroid/renderscript/Matrix2f;)V"/>
-		<method name="loadIdentity()V"/>
-		<method name="loadMultiply(Landroid/renderscript/Matrix2f;Landroid/renderscript/Matrix2f;)V"/>
-		<method name="loadRotate(F)V"/>
-		<method name="loadScale(FF)V"/>
-		<method name="multiply(Landroid/renderscript/Matrix2f;)V"/>
-		<method name="rotate(F)V"/>
-		<method name="scale(FF)V"/>
-		<method name="set(IIF)V"/>
-		<method name="transpose()V"/>
-	</class>
-	<class name="android/renderscript/Matrix3f" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([F)V"/>
-		<method name="get(II)F"/>
-		<method name="getArray()[F"/>
-		<method name="load(Landroid/renderscript/Matrix3f;)V"/>
-		<method name="loadIdentity()V"/>
-		<method name="loadMultiply(Landroid/renderscript/Matrix3f;Landroid/renderscript/Matrix3f;)V"/>
-		<method name="loadRotate(F)V"/>
-		<method name="loadRotate(FFFF)V"/>
-		<method name="loadScale(FF)V"/>
-		<method name="loadScale(FFF)V"/>
-		<method name="loadTranslate(FF)V"/>
-		<method name="multiply(Landroid/renderscript/Matrix3f;)V"/>
-		<method name="rotate(F)V"/>
-		<method name="rotate(FFFF)V"/>
-		<method name="scale(FF)V"/>
-		<method name="scale(FFF)V"/>
-		<method name="set(IIF)V"/>
-		<method name="translate(FF)V"/>
-		<method name="transpose()V"/>
-	</class>
-	<class name="android/renderscript/Matrix4f" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([F)V"/>
-		<method name="get(II)F"/>
-		<method name="getArray()[F"/>
-		<method name="inverse()Z"/>
-		<method name="inverseTranspose()Z"/>
-		<method name="load(Landroid/renderscript/Matrix4f;)V"/>
-		<method name="loadFrustum(FFFFFF)V"/>
-		<method name="loadIdentity()V"/>
-		<method name="loadMultiply(Landroid/renderscript/Matrix4f;Landroid/renderscript/Matrix4f;)V"/>
-		<method name="loadOrtho(FFFFFF)V"/>
-		<method name="loadOrthoWindow(II)V"/>
-		<method name="loadPerspective(FFFF)V"/>
-		<method name="loadProjectionNormalized(II)V"/>
-		<method name="loadRotate(FFFF)V"/>
-		<method name="loadScale(FFF)V"/>
-		<method name="loadTranslate(FFF)V"/>
-		<method name="multiply(Landroid/renderscript/Matrix4f;)V"/>
-		<method name="rotate(FFFF)V"/>
-		<method name="scale(FFF)V"/>
-		<method name="set(IIF)V"/>
-		<method name="translate(FFF)V"/>
-		<method name="transpose()V"/>
-	</class>
-	<class name="android/renderscript/Mesh" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V"/>
-		<method name="getIndexSetAllocation(I)Landroid/renderscript/Allocation;" deprecated="16"/>
-		<method name="getPrimitive(I)Landroid/renderscript/Mesh$Primitive;" deprecated="16"/>
-		<method name="getPrimitiveCount()I" deprecated="16"/>
-		<method name="getVertexAllocation(I)Landroid/renderscript/Allocation;" deprecated="16"/>
-		<method name="getVertexAllocationCount()I" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/Mesh$AllocationBuilder" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
-		<method name="addIndexSetAllocation(Landroid/renderscript/Allocation;Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16"/>
-		<method name="addIndexSetType(Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16"/>
-		<method name="addVertexAllocation(Landroid/renderscript/Allocation;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16"/>
-		<method name="create()Landroid/renderscript/Mesh;" deprecated="16"/>
-		<method name="getCurrentIndexSetIndex()I" deprecated="16"/>
-		<method name="getCurrentVertexTypeIndex()I" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/Mesh$Builder" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;I)V" deprecated="16"/>
-		<method name="addIndexSetType(Landroid/renderscript/Element;ILandroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
-		<method name="addIndexSetType(Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
-		<method name="addIndexSetType(Landroid/renderscript/Type;Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
-		<method name="addVertexType(Landroid/renderscript/Element;I)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
-		<method name="addVertexType(Landroid/renderscript/Type;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
-		<method name="create()Landroid/renderscript/Mesh;" deprecated="16"/>
-		<method name="getCurrentIndexSetIndex()I" deprecated="16"/>
-		<method name="getCurrentVertexTypeIndex()I" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/Mesh$Primitive" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Mesh$Primitive;"/>
-		<method name="values()[Landroid/renderscript/Mesh$Primitive;"/>
-		<field name="LINE"/>
-		<field name="LINE_STRIP"/>
-		<field name="POINT"/>
-		<field name="TRIANGLE"/>
-		<field name="TRIANGLE_FAN"/>
-		<field name="TRIANGLE_STRIP"/>
-	</class>
-	<class name="android/renderscript/Mesh$TriangleMeshBuilder" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;II)V" deprecated="16"/>
-		<method name="addTriangle(III)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
-		<method name="addVertex(FF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
-		<method name="addVertex(FFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
-		<method name="create(Z)Landroid/renderscript/Mesh;" deprecated="16"/>
-		<method name="setColor(FFFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
-		<method name="setNormal(FFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
-		<method name="setTexture(FF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
-		<field name="COLOR" deprecated="16"/>
-		<field name="NORMAL" deprecated="16"/>
-		<field name="TEXTURE_0" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/Program" since="11" removed="18">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V"/>
-		<method name="bindConstants(Landroid/renderscript/Allocation;I)V"/>
-		<method name="bindSampler(Landroid/renderscript/Sampler;I)V"/>
-		<method name="bindTexture(Landroid/renderscript/Allocation;I)V"/>
-		<method name="getConstant(I)Landroid/renderscript/Type;" since="16"/>
-		<method name="getConstantCount()I" since="16"/>
-		<method name="getTextureCount()I" since="16"/>
-		<method name="getTextureName(I)Ljava/lang/String;" since="16"/>
-		<method name="getTextureType(I)Landroid/renderscript/Program$TextureType;" since="16"/>
-	</class>
-	<class name="android/renderscript/Program$BaseProgramBuilder" since="11" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
-		<method name="addConstant(Landroid/renderscript/Type;)Landroid/renderscript/Program$BaseProgramBuilder;"/>
-		<method name="addTexture(Landroid/renderscript/Program$TextureType;)Landroid/renderscript/Program$BaseProgramBuilder;"/>
-		<method name="addTexture(Landroid/renderscript/Program$TextureType;Ljava/lang/String;)Landroid/renderscript/Program$BaseProgramBuilder;" since="16"/>
-		<method name="getCurrentConstantIndex()I"/>
-		<method name="getCurrentTextureIndex()I"/>
-		<method name="initProgram(Landroid/renderscript/Program;)V"/>
-		<method name="setShader(Landroid/content/res/Resources;I)Landroid/renderscript/Program$BaseProgramBuilder;"/>
-		<method name="setShader(Ljava/lang/String;)Landroid/renderscript/Program$BaseProgramBuilder;"/>
-	</class>
-	<class name="android/renderscript/Program$TextureType" since="11" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Program$TextureType;"/>
-		<method name="values()[Landroid/renderscript/Program$TextureType;"/>
-		<field name="TEXTURE_2D"/>
-		<field name="TEXTURE_CUBE"/>
-	</class>
-	<class name="android/renderscript/ProgramFragment" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/Program"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/renderscript/ProgramFragment$Builder" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/Program$BaseProgramBuilder"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
-		<method name="create()Landroid/renderscript/ProgramFragment;" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramFragmentFixedFunction" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/ProgramFragment"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
-		<method name="create()Landroid/renderscript/ProgramFragmentFixedFunction;" deprecated="16"/>
-		<method name="setPointSpriteTexCoordinateReplacement(Z)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16"/>
-		<method name="setTexture(Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;I)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16"/>
-		<method name="setVaryingColor(Z)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16"/>
-		<field name="MAX_TEXTURE" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;"/>
-		<method name="values()[Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;"/>
-		<field name="DECAL"/>
-		<field name="MODULATE"/>
-		<field name="REPLACE"/>
-	</class>
-	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder$Format" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;"/>
-		<method name="values()[Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;"/>
-		<field name="ALPHA"/>
-		<field name="LUMINANCE_ALPHA"/>
-		<field name="RGB"/>
-		<field name="RGBA"/>
-	</class>
-	<class name="android/renderscript/ProgramRaster" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V"/>
-		<method name="CULL_BACK(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
-		<method name="CULL_FRONT(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
-		<method name="CULL_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
-		<method name="getCullMode()Landroid/renderscript/ProgramRaster$CullMode;" since="16" deprecated="16"/>
-		<method name="isPointSpriteEnabled()Z" since="16" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramRaster$Builder" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
-		<method name="create()Landroid/renderscript/ProgramRaster;" deprecated="16"/>
-		<method name="setCullMode(Landroid/renderscript/ProgramRaster$CullMode;)Landroid/renderscript/ProgramRaster$Builder;" deprecated="16"/>
-		<method name="setPointSpriteEnabled(Z)Landroid/renderscript/ProgramRaster$Builder;" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramRaster$CullMode" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramRaster$CullMode;"/>
-		<method name="values()[Landroid/renderscript/ProgramRaster$CullMode;"/>
-		<field name="BACK"/>
-		<field name="FRONT"/>
-		<field name="NONE"/>
-	</class>
-	<class name="android/renderscript/ProgramStore" since="11" removed="18">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V"/>
-		<method name="BLEND_ALPHA_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
-		<method name="BLEND_ALPHA_DEPTH_TEST(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
-		<method name="BLEND_NONE_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
-		<method name="BLEND_NONE_DEPTH_TEST(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
-		<method name="getBlendDstFunc()Landroid/renderscript/ProgramStore$BlendDstFunc;" since="16"/>
-		<method name="getBlendSrcFunc()Landroid/renderscript/ProgramStore$BlendSrcFunc;" since="16"/>
-		<method name="getDepthFunc()Landroid/renderscript/ProgramStore$DepthFunc;" since="16"/>
-		<method name="isColorMaskAlphaEnabled()Z" since="16"/>
-		<method name="isColorMaskBlueEnabled()Z" since="16"/>
-		<method name="isColorMaskGreenEnabled()Z" since="16"/>
-		<method name="isColorMaskRedEnabled()Z" since="16"/>
-		<method name="isDepthMaskEnabled()Z" since="16"/>
-		<method name="isDitherEnabled()Z" since="16"/>
-	</class>
-	<class name="android/renderscript/ProgramStore$BlendDstFunc" since="11" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$BlendDstFunc;"/>
-		<method name="values()[Landroid/renderscript/ProgramStore$BlendDstFunc;"/>
-		<field name="DST_ALPHA"/>
-		<field name="ONE"/>
-		<field name="ONE_MINUS_DST_ALPHA"/>
-		<field name="ONE_MINUS_SRC_ALPHA"/>
-		<field name="ONE_MINUS_SRC_COLOR"/>
-		<field name="SRC_ALPHA"/>
-		<field name="SRC_COLOR"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="android/renderscript/ProgramStore$BlendSrcFunc" since="11" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$BlendSrcFunc;"/>
-		<method name="values()[Landroid/renderscript/ProgramStore$BlendSrcFunc;"/>
-		<field name="DST_ALPHA"/>
-		<field name="DST_COLOR"/>
-		<field name="ONE"/>
-		<field name="ONE_MINUS_DST_ALPHA"/>
-		<field name="ONE_MINUS_DST_COLOR"/>
-		<field name="ONE_MINUS_SRC_ALPHA"/>
-		<field name="SRC_ALPHA"/>
-		<field name="SRC_ALPHA_SATURATE"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="android/renderscript/ProgramStore$Builder" since="11" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
-		<method name="create()Landroid/renderscript/ProgramStore;"/>
-		<method name="setBlendFunc(Landroid/renderscript/ProgramStore$BlendSrcFunc;Landroid/renderscript/ProgramStore$BlendDstFunc;)Landroid/renderscript/ProgramStore$Builder;"/>
-		<method name="setColorMaskEnabled(ZZZZ)Landroid/renderscript/ProgramStore$Builder;"/>
-		<method name="setDepthFunc(Landroid/renderscript/ProgramStore$DepthFunc;)Landroid/renderscript/ProgramStore$Builder;"/>
-		<method name="setDepthMaskEnabled(Z)Landroid/renderscript/ProgramStore$Builder;"/>
-		<method name="setDitherEnabled(Z)Landroid/renderscript/ProgramStore$Builder;"/>
-	</class>
-	<class name="android/renderscript/ProgramStore$DepthFunc" since="11" removed="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$DepthFunc;"/>
-		<method name="values()[Landroid/renderscript/ProgramStore$DepthFunc;"/>
-		<field name="ALWAYS"/>
-		<field name="EQUAL"/>
-		<field name="GREATER"/>
-		<field name="GREATER_OR_EQUAL"/>
-		<field name="LESS"/>
-		<field name="LESS_OR_EQUAL"/>
-		<field name="NOT_EQUAL"/>
-	</class>
-	<class name="android/renderscript/ProgramVertex" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/Program"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInput(I)Landroid/renderscript/Element;" since="16" deprecated="16"/>
-		<method name="getInputCount()I" since="16" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramVertex$Builder" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/Program$BaseProgramBuilder"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
-		<method name="addInput(Landroid/renderscript/Element;)Landroid/renderscript/ProgramVertex$Builder;" deprecated="16"/>
-		<method name="create()Landroid/renderscript/ProgramVertex;" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramVertexFixedFunction" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/ProgramVertex"/>
-		<method name="&lt;init>()V"/>
-		<method name="bindConstants(Landroid/renderscript/ProgramVertexFixedFunction$Constants;)V" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramVertexFixedFunction$Builder" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
-		<method name="create()Landroid/renderscript/ProgramVertexFixedFunction;" deprecated="16"/>
-		<method name="setTextureMatrixEnable(Z)Landroid/renderscript/ProgramVertexFixedFunction$Builder;" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/ProgramVertexFixedFunction$Constants" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
-		<method name="destroy()V" deprecated="16"/>
-		<method name="setModelview(Landroid/renderscript/Matrix4f;)V" deprecated="16"/>
-		<method name="setProjection(Landroid/renderscript/Matrix4f;)V" deprecated="16"/>
-		<method name="setTexture(Landroid/renderscript/Matrix4f;)V" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/RSDriverException" since="11">
-		<extends name="android/renderscript/RSRuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/renderscript/RSIllegalArgumentException" since="11">
-		<extends name="android/renderscript/RSRuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/renderscript/RSInvalidStateException" since="11">
-		<extends name="android/renderscript/RSRuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/renderscript/RSRuntimeException" since="11">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/renderscript/RSSurfaceView" since="11" deprecated="16" removed="18">
-		<extends name="android/view/SurfaceView"/>
-		<implements name="android/view/SurfaceHolder$Callback"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="16"/>
-		<method name="createRenderScriptGL(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
-		<method name="destroyRenderScriptGL()V" deprecated="16"/>
-		<method name="getRenderScriptGL()Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
-		<method name="pause()V" deprecated="16"/>
-		<method name="resume()V" deprecated="16"/>
-		<method name="setRenderScriptGL(Landroid/renderscript/RenderScriptGL;)V" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/RSTextureView" since="14" deprecated="16" removed="18">
-		<extends name="android/view/TextureView"/>
-		<implements name="android/view/TextureView$SurfaceTextureListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="16"/>
-		<method name="createRenderScriptGL(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
-		<method name="destroyRenderScriptGL()V" deprecated="16"/>
-		<method name="getRenderScriptGL()Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
-		<method name="pause()V" deprecated="16"/>
-		<method name="resume()V" deprecated="16"/>
-		<method name="setRenderScriptGL(Landroid/renderscript/RenderScriptGL;)V" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/RenderScript" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="contextDump()V"/>
-		<method name="create(Landroid/content/Context;)Landroid/renderscript/RenderScript;"/>
-		<method name="create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;)Landroid/renderscript/RenderScript;" since="18"/>
-		<method name="create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript;" since="21"/>
-		<method name="createMultiContext(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;II)Landroid/renderscript/RenderScript;" since="23"/>
-		<method name="destroy()V"/>
-		<method name="finish()V"/>
-		<method name="getApplicationContext()Landroid/content/Context;"/>
-		<method name="getErrorHandler()Landroid/renderscript/RenderScript$RSErrorHandler;"/>
-		<method name="getMessageHandler()Landroid/renderscript/RenderScript$RSMessageHandler;"/>
-		<method name="getMinorVersion()J" since="23"/>
-		<method name="releaseAllContexts()V" since="23"/>
-		<method name="sendMessage(I[I)V" since="18"/>
-		<method name="setErrorHandler(Landroid/renderscript/RenderScript$RSErrorHandler;)V"/>
-		<method name="setMessageHandler(Landroid/renderscript/RenderScript$RSMessageHandler;)V"/>
-		<method name="setPriority(Landroid/renderscript/RenderScript$Priority;)V"/>
-		<field name="CREATE_FLAG_LOW_LATENCY" since="21"/>
-		<field name="CREATE_FLAG_LOW_POWER" since="21"/>
-		<field name="CREATE_FLAG_NONE" since="21"/>
-	</class>
-	<class name="android/renderscript/RenderScript$ContextType" since="18">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/RenderScript$ContextType;"/>
-		<method name="values()[Landroid/renderscript/RenderScript$ContextType;"/>
-		<field name="DEBUG"/>
-		<field name="NORMAL"/>
-		<field name="PROFILE"/>
-	</class>
-	<class name="android/renderscript/RenderScript$Priority" since="11">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/RenderScript$Priority;"/>
-		<method name="values()[Landroid/renderscript/RenderScript$Priority;"/>
-		<field name="LOW"/>
-		<field name="NORMAL"/>
-	</class>
-	<class name="android/renderscript/RenderScript$RSErrorHandler" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable"/>
-		<method name="&lt;init>()V"/>
-		<field name="mErrorMessage"/>
-		<field name="mErrorNum"/>
-	</class>
-	<class name="android/renderscript/RenderScript$RSMessageHandler" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable"/>
-		<method name="&lt;init>()V"/>
-		<field name="mData"/>
-		<field name="mID"/>
-		<field name="mLength"/>
-	</class>
-	<class name="android/renderscript/RenderScriptGL" since="11" deprecated="16" removed="18">
-		<extends name="android/renderscript/RenderScript"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/renderscript/RenderScriptGL$SurfaceConfig;)V" deprecated="16"/>
-		<method name="bindProgramFragment(Landroid/renderscript/ProgramFragment;)V" deprecated="16"/>
-		<method name="bindProgramRaster(Landroid/renderscript/ProgramRaster;)V" deprecated="16"/>
-		<method name="bindProgramStore(Landroid/renderscript/ProgramStore;)V" deprecated="16"/>
-		<method name="bindProgramVertex(Landroid/renderscript/ProgramVertex;)V" deprecated="16"/>
-		<method name="bindRootScript(Landroid/renderscript/Script;)V" deprecated="16"/>
-		<method name="getHeight()I" deprecated="16"/>
-		<method name="getWidth()I" deprecated="16"/>
-		<method name="pause()V" deprecated="16"/>
-		<method name="resume()V" deprecated="16"/>
-		<method name="setSurface(Landroid/view/SurfaceHolder;II)V" deprecated="16"/>
-		<method name="setSurfaceTexture(Landroid/graphics/SurfaceTexture;II)V" since="14" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/RenderScriptGL$SurfaceConfig" since="11" deprecated="16" removed="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)V" deprecated="16"/>
-		<method name="setAlpha(II)V" deprecated="16"/>
-		<method name="setColor(II)V" deprecated="16"/>
-		<method name="setDepth(II)V" deprecated="16"/>
-		<method name="setSamples(IIF)V" deprecated="16"/>
-	</class>
-	<class name="android/renderscript/Sampler" since="11">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="CLAMP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
-		<method name="CLAMP_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
-		<method name="CLAMP_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
-		<method name="MIRRORED_REPEAT_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18"/>
-		<method name="MIRRORED_REPEAT_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18"/>
-		<method name="MIRRORED_REPEAT_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18"/>
-		<method name="WRAP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
-		<method name="WRAP_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
-		<method name="WRAP_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;"/>
-		<method name="getAnisotropy()F" since="16"/>
-		<method name="getMagnification()Landroid/renderscript/Sampler$Value;" since="16"/>
-		<method name="getMinification()Landroid/renderscript/Sampler$Value;" since="16"/>
-		<method name="getWrapS()Landroid/renderscript/Sampler$Value;" since="16"/>
-		<method name="getWrapT()Landroid/renderscript/Sampler$Value;" since="16"/>
-	</class>
-	<class name="android/renderscript/Sampler$Builder" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
-		<method name="create()Landroid/renderscript/Sampler;"/>
-		<method name="setAnisotropy(F)V"/>
-		<method name="setMagnification(Landroid/renderscript/Sampler$Value;)V"/>
-		<method name="setMinification(Landroid/renderscript/Sampler$Value;)V"/>
-		<method name="setWrapS(Landroid/renderscript/Sampler$Value;)V"/>
-		<method name="setWrapT(Landroid/renderscript/Sampler$Value;)V"/>
-	</class>
-	<class name="android/renderscript/Sampler$Value" since="11">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Sampler$Value;"/>
-		<method name="values()[Landroid/renderscript/Sampler$Value;"/>
-		<field name="CLAMP"/>
-		<field name="LINEAR"/>
-		<field name="LINEAR_MIP_LINEAR"/>
-		<field name="LINEAR_MIP_NEAREST"/>
-		<field name="MIRRORED_REPEAT" since="18"/>
-		<field name="NEAREST"/>
-		<field name="WRAP"/>
-	</class>
-	<class name="android/renderscript/Script" since="11">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="bindAllocation(Landroid/renderscript/Allocation;I)V"/>
-		<method name="createFieldID(ILandroid/renderscript/Element;)Landroid/renderscript/Script$FieldID;" since="17"/>
-		<method name="createInvokeID(I)Landroid/renderscript/Script$InvokeID;" since="23"/>
-		<method name="createKernelID(IILandroid/renderscript/Element;Landroid/renderscript/Element;)Landroid/renderscript/Script$KernelID;" since="17"/>
-		<method name="forEach(ILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;)V" since="14"/>
-		<method name="forEach(ILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;Landroid/renderscript/Script$LaunchOptions;)V" since="18"/>
-		<method name="forEach(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;)V" since="23"/>
-		<method name="forEach(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;Landroid/renderscript/Script$LaunchOptions;)V" since="23"/>
-		<method name="getVarB(I)Z" since="18"/>
-		<method name="getVarD(I)D" since="18"/>
-		<method name="getVarF(I)F" since="18"/>
-		<method name="getVarI(I)I" since="18"/>
-		<method name="getVarJ(I)J" since="18"/>
-		<method name="getVarV(ILandroid/renderscript/FieldPacker;)V" since="18"/>
-		<method name="invoke(I)V"/>
-		<method name="invoke(ILandroid/renderscript/FieldPacker;)V"/>
-		<method name="reduce(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="24"/>
-		<method name="setTimeZone(Ljava/lang/String;)V"/>
-		<method name="setVar(ID)V"/>
-		<method name="setVar(IF)V"/>
-		<method name="setVar(II)V"/>
-		<method name="setVar(IJ)V"/>
-		<method name="setVar(ILandroid/renderscript/BaseObj;)V"/>
-		<method name="setVar(ILandroid/renderscript/FieldPacker;)V"/>
-		<method name="setVar(ILandroid/renderscript/FieldPacker;Landroid/renderscript/Element;[I)V" since="16"/>
-		<method name="setVar(IZ)V"/>
-	</class>
-	<class name="android/renderscript/Script$Builder" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" since="29"/>
-	</class>
-	<class name="android/renderscript/Script$FieldBase" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAllocation()Landroid/renderscript/Allocation;"/>
-		<method name="getElement()Landroid/renderscript/Element;"/>
-		<method name="getType()Landroid/renderscript/Type;"/>
-		<method name="init(Landroid/renderscript/RenderScript;I)V"/>
-		<method name="init(Landroid/renderscript/RenderScript;II)V"/>
-		<method name="updateAllocation()V"/>
-		<field name="mAllocation"/>
-		<field name="mElement"/>
-	</class>
-	<class name="android/renderscript/Script$FieldID" since="17">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Script;I)V" since="29"/>
-	</class>
-	<class name="android/renderscript/Script$InvokeID" since="23">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Script;I)V" since="29"/>
-	</class>
-	<class name="android/renderscript/Script$KernelID" since="17">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Script;II)V" since="29"/>
-	</class>
-	<class name="android/renderscript/Script$LaunchOptions" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getXEnd()I"/>
-		<method name="getXStart()I"/>
-		<method name="getYEnd()I"/>
-		<method name="getYStart()I"/>
-		<method name="getZEnd()I"/>
-		<method name="getZStart()I"/>
-		<method name="setX(II)Landroid/renderscript/Script$LaunchOptions;"/>
-		<method name="setY(II)Landroid/renderscript/Script$LaunchOptions;"/>
-		<method name="setZ(II)Landroid/renderscript/Script$LaunchOptions;"/>
-	</class>
-	<class name="android/renderscript/ScriptC" since="11">
-		<extends name="android/renderscript/Script"/>
-		<method name="&lt;init>(ILandroid/renderscript/RenderScript;)V"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="21"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)V"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;Ljava/lang/String;[B[B)V" since="21"/>
-	</class>
-	<class name="android/renderscript/ScriptGroup" since="17">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="execute()V" deprecated="23"/>
-		<method name="execute([Ljava/lang/Object;)[Ljava/lang/Object;" since="23"/>
-		<method name="setInput(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Allocation;)V" deprecated="23"/>
-		<method name="setOutput(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Allocation;)V" deprecated="23"/>
-	</class>
-	<class name="android/renderscript/ScriptGroup$Binding" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/Script$FieldID;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/renderscript/ScriptGroup$Builder" since="17" deprecated="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
-		<method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Builder;"/>
-		<method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;"/>
-		<method name="addKernel(Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;"/>
-		<method name="create()Landroid/renderscript/ScriptGroup;"/>
-	</class>
-	<class name="android/renderscript/ScriptGroup$Builder2" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
-		<method name="addInput()Landroid/renderscript/ScriptGroup$Input;"/>
-		<method name="addInvoke(Landroid/renderscript/Script$InvokeID;[Ljava/lang/Object;)Landroid/renderscript/ScriptGroup$Closure;"/>
-		<method name="addKernel(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Type;[Ljava/lang/Object;)Landroid/renderscript/ScriptGroup$Closure;"/>
-		<method name="create(Ljava/lang/String;[Landroid/renderscript/ScriptGroup$Future;)Landroid/renderscript/ScriptGroup;"/>
-	</class>
-	<class name="android/renderscript/ScriptGroup$Closure" since="23">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="getGlobal(Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Future;"/>
-		<method name="getReturn()Landroid/renderscript/ScriptGroup$Future;"/>
-	</class>
-	<class name="android/renderscript/ScriptGroup$Future" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/renderscript/ScriptGroup$Closure;Landroid/renderscript/Script$FieldID;Ljava/lang/Object;)V" since="29"/>
-	</class>
-	<class name="android/renderscript/ScriptGroup$Input" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsic" since="17">
-		<extends name="android/renderscript/Script"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsic3DLUT" since="18">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;Landroid/renderscript/Element;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsic3DLUT;"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getKernelID()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setLUT(Landroid/renderscript/Allocation;)V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicBLAS" since="23">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="BNNM(Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;II)V"/>
-		<method name="CGBMV(IIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CGEMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V"/>
-		<method name="CGEMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CGERC(Landroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="CGERU(Landroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="CHBMV(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CHEMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V"/>
-		<method name="CHEMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CHER(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="CHER2(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="CHER2K(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V"/>
-		<method name="CHERK(IIFLandroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V"/>
-		<method name="CHPMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CHPR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="CHPR2(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="CSYMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V"/>
-		<method name="CSYR2K(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V"/>
-		<method name="CSYRK(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V"/>
-		<method name="CTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CTRMM(IIIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="CTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="CTRSM(IIIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="CTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="DGBMV(IIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V"/>
-		<method name="DGEMM(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V"/>
-		<method name="DGEMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V"/>
-		<method name="DGER(DLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="DSBMV(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V"/>
-		<method name="DSPMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V"/>
-		<method name="DSPR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="DSPR2(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="DSYMM(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V"/>
-		<method name="DSYMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V"/>
-		<method name="DSYR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="DSYR2(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="DSYR2K(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V"/>
-		<method name="DSYRK(IIDLandroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V"/>
-		<method name="DTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="DTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="DTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="DTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="DTRMM(IIIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="DTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="DTRSM(IIIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="DTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="SGBMV(IIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V"/>
-		<method name="SGEMM(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V"/>
-		<method name="SGEMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V"/>
-		<method name="SGER(FLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="SSBMV(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V"/>
-		<method name="SSPMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V"/>
-		<method name="SSPR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="SSPR2(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="SSYMM(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V"/>
-		<method name="SSYMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V"/>
-		<method name="SSYR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="SSYR2(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="SSYR2K(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V"/>
-		<method name="SSYRK(IIFLandroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V"/>
-		<method name="STBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="STBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="STPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="STPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="STRMM(IIIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="STRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="STRSM(IIIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="STRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZGBMV(IIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZGEMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V"/>
-		<method name="ZGEMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZGERC(Landroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="ZGERU(Landroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="ZHBMV(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZHEMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V"/>
-		<method name="ZHEMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZHER(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="ZHER2(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="ZHER2K(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V"/>
-		<method name="ZHERK(IIDLandroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V"/>
-		<method name="ZHPMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZHPR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="ZHPR2(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V"/>
-		<method name="ZSYMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V"/>
-		<method name="ZSYR2K(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V"/>
-		<method name="ZSYRK(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V"/>
-		<method name="ZTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZTRMM(IIIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="ZTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="ZTRSM(IIIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="ZTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V"/>
-		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicBLAS;"/>
-		<field name="CONJ_TRANSPOSE"/>
-		<field name="LEFT"/>
-		<field name="LOWER"/>
-		<field name="NON_UNIT"/>
-		<field name="NO_TRANSPOSE"/>
-		<field name="RIGHT"/>
-		<field name="TRANSPOSE"/>
-		<field name="UNIT"/>
-		<field name="UPPER"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicBlend" since="17">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlend;"/>
-		<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachClear(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachClear(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachDst(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachDst(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachDstAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachDstAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachDstIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachDstIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachDstOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachDstOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachDstOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachDstOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachMultiply(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachMultiply(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachSrc(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachSrc(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachSrcAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachSrcAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachSrcIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachSrcIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachSrcOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachSrcOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachSrcOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachSrcOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachSubtract(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachSubtract(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEachXor(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEachXor(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getKernelIDAdd()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDClear()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDDst()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDDstAtop()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDDstIn()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDDstOut()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDDstOver()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDMultiply()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDSrc()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDSrcAtop()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDSrcIn()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDSrcOut()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDSrcOver()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDSubtract()Landroid/renderscript/Script$KernelID;"/>
-		<method name="getKernelIDXor()Landroid/renderscript/Script$KernelID;"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicBlur" since="17">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlur;"/>
-		<method name="forEach(Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;"/>
-		<method name="getKernelID()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setInput(Landroid/renderscript/Allocation;)V"/>
-		<method name="setRadius(F)V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicColorMatrix" since="17">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" since="19"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" deprecated="19"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getKernelID()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setAdd(FFFF)V" since="19"/>
-		<method name="setAdd(Landroid/renderscript/Float4;)V" since="19"/>
-		<method name="setColorMatrix(Landroid/renderscript/Matrix3f;)V"/>
-		<method name="setColorMatrix(Landroid/renderscript/Matrix4f;)V"/>
-		<method name="setGreyscale()V"/>
-		<method name="setRGBtoYUV()V"/>
-		<method name="setYUVtoRGB()V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicConvolve3x3" since="17">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve3x3;"/>
-		<method name="forEach(Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;"/>
-		<method name="getKernelID()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setCoefficients([F)V"/>
-		<method name="setInput(Landroid/renderscript/Allocation;)V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicConvolve5x5" since="17">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve5x5;"/>
-		<method name="forEach(Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;"/>
-		<method name="getKernelID()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setCoefficients([F)V"/>
-		<method name="setInput(Landroid/renderscript/Allocation;)V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicHistogram" since="19">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicHistogram;"/>
-		<method name="forEach(Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="forEach_Dot(Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach_Dot(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;"/>
-		<method name="getKernelID_Separate()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setDotCoefficients(FFFF)V"/>
-		<method name="setOutput(Landroid/renderscript/Allocation;)V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicLUT" since="17">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicLUT;"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21"/>
-		<method name="getKernelID()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setAlpha(II)V"/>
-		<method name="setBlue(II)V"/>
-		<method name="setGreen(II)V"/>
-		<method name="setRed(II)V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicResize" since="20">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicResize;"/>
-		<method name="forEach_bicubic(Landroid/renderscript/Allocation;)V"/>
-		<method name="forEach_bicubic(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V"/>
-		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;"/>
-		<method name="getKernelID_bicubic()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setInput(Landroid/renderscript/Allocation;)V"/>
-	</class>
-	<class name="android/renderscript/ScriptIntrinsicYuvToRGB" since="17">
-		<extends name="android/renderscript/ScriptIntrinsic"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicYuvToRGB;"/>
-		<method name="forEach(Landroid/renderscript/Allocation;)V"/>
-		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;"/>
-		<method name="getKernelID()Landroid/renderscript/Script$KernelID;"/>
-		<method name="setInput(Landroid/renderscript/Allocation;)V"/>
-	</class>
-	<class name="android/renderscript/Short2" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(SS)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/renderscript/Short3" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(SSS)V" since="14"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Short4" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(SSSS)V" since="14"/>
-		<field name="w"/>
-		<field name="x"/>
-		<field name="y"/>
-		<field name="z"/>
-	</class>
-	<class name="android/renderscript/Type" since="11">
-		<extends name="android/renderscript/BaseObj"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="29"/>
-		<method name="createX(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;I)Landroid/renderscript/Type;" since="21"/>
-		<method name="createXY(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;II)Landroid/renderscript/Type;" since="21"/>
-		<method name="createXYZ(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;III)Landroid/renderscript/Type;" since="21"/>
-		<method name="getCount()I"/>
-		<method name="getElement()Landroid/renderscript/Element;"/>
-		<method name="getX()I"/>
-		<method name="getY()I"/>
-		<method name="getYuv()I" since="18"/>
-		<method name="getZ()I"/>
-		<method name="hasFaces()Z"/>
-		<method name="hasMipmaps()Z"/>
-	</class>
-	<class name="android/renderscript/Type$Builder" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)V"/>
-		<method name="create()Landroid/renderscript/Type;"/>
-		<method name="setFaces(Z)Landroid/renderscript/Type$Builder;"/>
-		<method name="setMipmaps(Z)Landroid/renderscript/Type$Builder;"/>
-		<method name="setX(I)Landroid/renderscript/Type$Builder;"/>
-		<method name="setY(I)Landroid/renderscript/Type$Builder;"/>
-		<method name="setYuvFormat(I)Landroid/renderscript/Type$Builder;" since="18"/>
-		<method name="setZ(I)Landroid/renderscript/Type$Builder;" since="18"/>
-	</class>
-	<class name="android/renderscript/Type$CubemapFace" since="11">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Type$CubemapFace;"/>
-		<method name="values()[Landroid/renderscript/Type$CubemapFace;"/>
-		<field name="NEGATIVE_X"/>
-		<field name="NEGATIVE_Y"/>
-		<field name="NEGATIVE_Z"/>
-		<field name="POSITIVE_X" since="14"/>
-		<field name="POSITIVE_Y" since="14"/>
-		<field name="POSITIVE_Z" since="14"/>
-		<field name="POSITVE_X" deprecated="28"/>
-		<field name="POSITVE_Y" deprecated="28"/>
-		<field name="POSITVE_Z" deprecated="28"/>
-	</class>
-	<class name="android/sax/Element" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/sax/Element;Ljava/lang/String;Ljava/lang/String;I)V" since="29"/>
-		<method name="getChild(Ljava/lang/String;)Landroid/sax/Element;"/>
-		<method name="getChild(Ljava/lang/String;Ljava/lang/String;)Landroid/sax/Element;"/>
-		<method name="requireChild(Ljava/lang/String;)Landroid/sax/Element;"/>
-		<method name="requireChild(Ljava/lang/String;Ljava/lang/String;)Landroid/sax/Element;"/>
-		<method name="setElementListener(Landroid/sax/ElementListener;)V"/>
-		<method name="setEndElementListener(Landroid/sax/EndElementListener;)V"/>
-		<method name="setEndTextElementListener(Landroid/sax/EndTextElementListener;)V"/>
-		<method name="setStartElementListener(Landroid/sax/StartElementListener;)V"/>
-		<method name="setTextElementListener(Landroid/sax/TextElementListener;)V"/>
-	</class>
-	<class name="android/sax/ElementListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/sax/EndElementListener"/>
-		<implements name="android/sax/StartElementListener"/>
-	</class>
-	<class name="android/sax/EndElementListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="end()V"/>
-	</class>
-	<class name="android/sax/EndTextElementListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="end(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/sax/RootElement" since="1">
-		<extends name="android/sax/Element"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;"/>
-	</class>
-	<class name="android/sax/StartElementListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="start(Lorg/xml/sax/Attributes;)V"/>
-	</class>
-	<class name="android/sax/TextElementListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/sax/EndTextElementListener"/>
-		<implements name="android/sax/StartElementListener"/>
-	</class>
-	<class name="android/se/omapi/Channel" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-		<method name="&lt;init>()V"/>
-		<method name="getSelectResponse()[B"/>
-		<method name="getSession()Landroid/se/omapi/Session;"/>
-		<method name="isBasicChannel()Z"/>
-		<method name="selectNext()Z"/>
-		<method name="transmit([B)[B"/>
-	</class>
-	<class name="android/se/omapi/Reader" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="closeSessions()V"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getSEService()Landroid/se/omapi/SEService;"/>
-		<method name="isSecureElementPresent()Z"/>
-		<method name="openSession()Landroid/se/omapi/Session;"/>
-	</class>
-	<class name="android/se/omapi/SEService" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/se/omapi/SEService$OnConnectedListener;)V"/>
-		<method name="getReaders()[Landroid/se/omapi/Reader;"/>
-		<method name="getVersion()Ljava/lang/String;"/>
-		<method name="isConnected()Z"/>
-		<method name="shutdown()V"/>
-	</class>
-	<class name="android/se/omapi/SEService$OnConnectedListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onConnected()V"/>
-	</class>
-	<class name="android/se/omapi/Session" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="closeChannels()V"/>
-		<method name="getATR()[B"/>
-		<method name="getReader()Landroid/se/omapi/Reader;"/>
-		<method name="isClosed()Z"/>
-		<method name="openBasicChannel([B)Landroid/se/omapi/Channel;"/>
-		<method name="openBasicChannel([BB)Landroid/se/omapi/Channel;"/>
-		<method name="openLogicalChannel([B)Landroid/se/omapi/Channel;"/>
-		<method name="openLogicalChannel([BB)Landroid/se/omapi/Channel;"/>
-	</class>
-	<class name="android/security/AttestedKeyPair" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/security/KeyPair;[Ljava/security/cert/Certificate;)V" since="29"/>
-		<method name="getAttestationRecord()Ljava/util/List;"/>
-		<method name="getKeyPair()Ljava/security/KeyPair;"/>
-	</class>
-	<class name="android/security/ConfirmationAlreadyPresentingException" since="28">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/security/ConfirmationCallback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCanceled()V"/>
-		<method name="onConfirmed([B)V"/>
-		<method name="onDismissed()V"/>
-		<method name="onError(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/ConfirmationNotAvailableException" since="28">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/security/ConfirmationPrompt" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/CharSequence;[B)V" since="29"/>
-		<method name="cancelPrompt()V"/>
-		<method name="isSupported(Landroid/content/Context;)Z"/>
-		<method name="presentPrompt(Ljava/util/concurrent/Executor;Landroid/security/ConfirmationCallback;)V"/>
-	</class>
-	<class name="android/security/ConfirmationPrompt$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="build()Landroid/security/ConfirmationPrompt;"/>
-		<method name="setExtraData([B)Landroid/security/ConfirmationPrompt$Builder;"/>
-		<method name="setPromptText(Ljava/lang/CharSequence;)Landroid/security/ConfirmationPrompt$Builder;"/>
-	</class>
-	<class name="android/security/KeyChain" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="choosePrivateKeyAlias(Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Landroid/net/Uri;Ljava/lang/String;)V" since="23"/>
-		<method name="choosePrivateKeyAlias(Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="createInstallIntent()Landroid/content/Intent;"/>
-		<method name="getCertificateChain(Landroid/content/Context;Ljava/lang/String;)[Ljava/security/cert/X509Certificate;"/>
-		<method name="getPrivateKey(Landroid/content/Context;Ljava/lang/String;)Ljava/security/PrivateKey;"/>
-		<method name="isBoundKeyAlgorithm(Ljava/lang/String;)Z" since="18" deprecated="23"/>
-		<method name="isKeyAlgorithmSupported(Ljava/lang/String;)Z" since="18"/>
-		<field name="ACTION_KEYCHAIN_CHANGED" since="26"/>
-		<field name="ACTION_KEY_ACCESS_CHANGED" since="26"/>
-		<field name="ACTION_STORAGE_CHANGED" since="16" deprecated="26"/>
-		<field name="ACTION_TRUST_STORE_CHANGED" since="26"/>
-		<field name="EXTRA_CERTIFICATE"/>
-		<field name="EXTRA_KEY_ACCESSIBLE" since="26"/>
-		<field name="EXTRA_KEY_ALIAS" since="26"/>
-		<field name="EXTRA_NAME"/>
-		<field name="EXTRA_PKCS12"/>
-	</class>
-	<class name="android/security/KeyChainAliasCallback" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="alias(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/security/KeyChainException" since="14">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/KeyPairGeneratorSpec" since="18" deprecated="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;ILjava/security/spec/AlgorithmParameterSpec;Ljavax/security/auth/x500/X500Principal;Ljava/math/BigInteger;Ljava/util/Date;Ljava/util/Date;I)V" since="29"/>
-		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="19"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getEndDate()Ljava/util/Date;"/>
-		<method name="getKeySize()I" since="19"/>
-		<method name="getKeyType()Ljava/lang/String;" since="19"/>
-		<method name="getKeystoreAlias()Ljava/lang/String;"/>
-		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
-		<method name="getStartDate()Ljava/util/Date;"/>
-		<method name="getSubjectDN()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="isEncryptionRequired()Z"/>
-	</class>
-	<class name="android/security/KeyPairGeneratorSpec$Builder" since="18" deprecated="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="build()Landroid/security/KeyPairGeneratorSpec;"/>
-		<method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19"/>
-		<method name="setAlias(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
-		<method name="setEncryptionRequired()Landroid/security/KeyPairGeneratorSpec$Builder;"/>
-		<method name="setEndDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
-		<method name="setKeySize(I)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19"/>
-		<method name="setKeyType(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19"/>
-		<method name="setSerialNumber(Ljava/math/BigInteger;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
-		<method name="setStartDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
-		<method name="setSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/KeyPairGeneratorSpec$Builder;"/>
-	</class>
-	<class name="android/security/KeyStoreParameter" since="18" deprecated="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$ProtectionParameter"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="isEncryptionRequired()Z"/>
-	</class>
-	<class name="android/security/KeyStoreParameter$Builder" since="18" deprecated="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="build()Landroid/security/KeyStoreParameter;"/>
-		<method name="setEncryptionRequired(Z)Landroid/security/KeyStoreParameter$Builder;"/>
-	</class>
-	<class name="android/security/NetworkSecurityPolicy" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/security/NetworkSecurityPolicy;"/>
-		<method name="isCleartextTrafficPermitted()Z"/>
-		<method name="isCleartextTrafficPermitted(Ljava/lang/String;)Z" since="24"/>
-	</class>
-	<class name="android/security/keystore/KeyExpiredException" since="23">
-		<extends name="java/security/InvalidKeyException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/keystore/KeyGenParameterSpec" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;IILjava/security/spec/AlgorithmParameterSpec;Ljavax/security/auth/x500/X500Principal;Ljava/math/BigInteger;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIZ[BZZZZZZ)V" since="29"/>
-		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;"/>
-		<method name="getAttestationChallenge()[B" since="24"/>
-		<method name="getBlockModes()[Ljava/lang/String;"/>
-		<method name="getCertificateNotAfter()Ljava/util/Date;"/>
-		<method name="getCertificateNotBefore()Ljava/util/Date;"/>
-		<method name="getCertificateSerialNumber()Ljava/math/BigInteger;"/>
-		<method name="getCertificateSubject()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getDigests()[Ljava/lang/String;"/>
-		<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
-		<method name="getKeySize()I"/>
-		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;"/>
-		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;"/>
-		<method name="getKeyValidityStart()Ljava/util/Date;"/>
-		<method name="getKeystoreAlias()Ljava/lang/String;"/>
-		<method name="getPurposes()I"/>
-		<method name="getSignaturePaddings()[Ljava/lang/String;"/>
-		<method name="getUserAuthenticationValidityDurationSeconds()I"/>
-		<method name="isDigestsSpecified()Z"/>
-		<method name="isInvalidatedByBiometricEnrollment()Z" since="24"/>
-		<method name="isRandomizedEncryptionRequired()Z"/>
-		<method name="isStrongBoxBacked()Z" since="28"/>
-		<method name="isUnlockedDeviceRequired()Z" since="28"/>
-		<method name="isUserAuthenticationRequired()Z"/>
-		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24"/>
-		<method name="isUserConfirmationRequired()Z" since="28"/>
-		<method name="isUserPresenceRequired()Z" since="28"/>
-	</class>
-	<class name="android/security/keystore/KeyGenParameterSpec$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="build()Landroid/security/keystore/KeyGenParameterSpec;"/>
-		<method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setAttestationChallenge([B)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24"/>
-		<method name="setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setCertificateNotAfter(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setCertificateNotBefore(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setCertificateSerialNumber(Ljava/math/BigInteger;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setCertificateSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setInvalidatedByBiometricEnrollment(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24"/>
-		<method name="setIsStrongBoxBacked(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
-		<method name="setKeySize(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setKeyValidityEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setKeyValidityForConsumptionEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setKeyValidityForOriginationEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setKeyValidityStart(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setRandomizedEncryptionRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setSignaturePaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setUnlockedDeviceRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
-		<method name="setUserAuthenticationRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setUserAuthenticationValidWhileOnBody(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24"/>
-		<method name="setUserAuthenticationValidityDurationSeconds(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
-		<method name="setUserConfirmationRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
-		<method name="setUserPresenceRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
-	</class>
-	<class name="android/security/keystore/KeyInfo" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;ZIILjava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZIZZZZZ)V" since="29"/>
-		<method name="getBlockModes()[Ljava/lang/String;"/>
-		<method name="getDigests()[Ljava/lang/String;"/>
-		<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
-		<method name="getKeySize()I"/>
-		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;"/>
-		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;"/>
-		<method name="getKeyValidityStart()Ljava/util/Date;"/>
-		<method name="getKeystoreAlias()Ljava/lang/String;"/>
-		<method name="getOrigin()I"/>
-		<method name="getPurposes()I"/>
-		<method name="getSignaturePaddings()[Ljava/lang/String;"/>
-		<method name="getUserAuthenticationValidityDurationSeconds()I"/>
-		<method name="isInsideSecureHardware()Z"/>
-		<method name="isInvalidatedByBiometricEnrollment()Z" since="24"/>
-		<method name="isTrustedUserPresenceRequired()Z" since="28"/>
-		<method name="isUserAuthenticationRequired()Z"/>
-		<method name="isUserAuthenticationRequirementEnforcedBySecureHardware()Z"/>
-		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24"/>
-		<method name="isUserConfirmationRequired()Z" since="28"/>
-	</class>
-	<class name="android/security/keystore/KeyNotYetValidException" since="23">
-		<extends name="java/security/InvalidKeyException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/keystore/KeyPermanentlyInvalidatedException" since="23">
-		<extends name="java/security/InvalidKeyException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/keystore/KeyProperties" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BLOCK_MODE_CBC"/>
-		<field name="BLOCK_MODE_CTR"/>
-		<field name="BLOCK_MODE_ECB"/>
-		<field name="BLOCK_MODE_GCM"/>
-		<field name="DIGEST_MD5"/>
-		<field name="DIGEST_NONE"/>
-		<field name="DIGEST_SHA1"/>
-		<field name="DIGEST_SHA224"/>
-		<field name="DIGEST_SHA256"/>
-		<field name="DIGEST_SHA384"/>
-		<field name="DIGEST_SHA512"/>
-		<field name="ENCRYPTION_PADDING_NONE"/>
-		<field name="ENCRYPTION_PADDING_PKCS7"/>
-		<field name="ENCRYPTION_PADDING_RSA_OAEP"/>
-		<field name="ENCRYPTION_PADDING_RSA_PKCS1"/>
-		<field name="KEY_ALGORITHM_3DES" since="28" deprecated="28"/>
-		<field name="KEY_ALGORITHM_AES"/>
-		<field name="KEY_ALGORITHM_EC"/>
-		<field name="KEY_ALGORITHM_HMAC_SHA1"/>
-		<field name="KEY_ALGORITHM_HMAC_SHA224"/>
-		<field name="KEY_ALGORITHM_HMAC_SHA256"/>
-		<field name="KEY_ALGORITHM_HMAC_SHA384"/>
-		<field name="KEY_ALGORITHM_HMAC_SHA512"/>
-		<field name="KEY_ALGORITHM_RSA"/>
-		<field name="ORIGIN_GENERATED"/>
-		<field name="ORIGIN_IMPORTED"/>
-		<field name="ORIGIN_SECURELY_IMPORTED" since="28"/>
-		<field name="ORIGIN_UNKNOWN"/>
-		<field name="PURPOSE_DECRYPT"/>
-		<field name="PURPOSE_ENCRYPT"/>
-		<field name="PURPOSE_SIGN"/>
-		<field name="PURPOSE_VERIFY"/>
-		<field name="PURPOSE_WRAP_KEY" since="28"/>
-		<field name="SIGNATURE_PADDING_RSA_PKCS1"/>
-		<field name="SIGNATURE_PADDING_RSA_PSS"/>
-	</class>
-	<class name="android/security/keystore/KeyProtection" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$ProtectionParameter"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/Date;Ljava/util/Date;Ljava/util/Date;I[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;ZZIZZZJZZZZ)V" since="29"/>
-		<method name="getBlockModes()[Ljava/lang/String;"/>
-		<method name="getDigests()[Ljava/lang/String;"/>
-		<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
-		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;"/>
-		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;"/>
-		<method name="getKeyValidityStart()Ljava/util/Date;"/>
-		<method name="getPurposes()I"/>
-		<method name="getSignaturePaddings()[Ljava/lang/String;"/>
-		<method name="getUserAuthenticationValidityDurationSeconds()I"/>
-		<method name="isDigestsSpecified()Z"/>
-		<method name="isInvalidatedByBiometricEnrollment()Z" since="24"/>
-		<method name="isRandomizedEncryptionRequired()Z"/>
-		<method name="isUnlockedDeviceRequired()Z" since="28"/>
-		<method name="isUserAuthenticationRequired()Z"/>
-		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24"/>
-		<method name="isUserConfirmationRequired()Z" since="28"/>
-		<method name="isUserPresenceRequired()Z" since="28"/>
-	</class>
-	<class name="android/security/keystore/KeyProtection$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="build()Landroid/security/keystore/KeyProtection;"/>
-		<method name="setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setInvalidatedByBiometricEnrollment(Z)Landroid/security/keystore/KeyProtection$Builder;" since="24"/>
-		<method name="setKeyValidityEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setKeyValidityForConsumptionEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setKeyValidityForOriginationEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setKeyValidityStart(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setRandomizedEncryptionRequired(Z)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setSignaturePaddings([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setUnlockedDeviceRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28"/>
-		<method name="setUserAuthenticationRequired(Z)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setUserAuthenticationValidWhileOnBody(Z)Landroid/security/keystore/KeyProtection$Builder;" since="24"/>
-		<method name="setUserAuthenticationValidityDurationSeconds(I)Landroid/security/keystore/KeyProtection$Builder;"/>
-		<method name="setUserConfirmationRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28"/>
-		<method name="setUserPresenceRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28"/>
-	</class>
-	<class name="android/security/keystore/SecureKeyImportUnavailableException" since="28">
-		<extends name="java/security/ProviderException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/keystore/StrongBoxUnavailableException" since="28">
-		<extends name="java/security/ProviderException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/keystore/UserNotAuthenticatedException" since="23">
-		<extends name="java/security/InvalidKeyException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/keystore/UserPresenceUnavailableException" since="28">
-		<extends name="java/security/InvalidKeyException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/security/keystore/WrappedKeyEntry" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$Entry"/>
-		<method name="&lt;init>([BLjava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;"/>
-		<method name="getTransformation()Ljava/lang/String;"/>
-		<method name="getWrappedKeyBytes()[B"/>
-		<method name="getWrappingKeyAlias()Ljava/lang/String;"/>
-	</class>
-	<class name="android/service/autofill/AutofillService" since="26">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFillEventHistory()Landroid/service/autofill/FillEventHistory;"/>
-		<method name="onConnected()V"/>
-		<method name="onDisconnected()V"/>
-		<method name="onFillRequest(Landroid/service/autofill/FillRequest;Landroid/os/CancellationSignal;Landroid/service/autofill/FillCallback;)V"/>
-		<method name="onSaveRequest(Landroid/service/autofill/SaveRequest;Landroid/service/autofill/SaveCallback;)V"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/service/autofill/BatchUpdates" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/BatchUpdates$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/BatchUpdates$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/service/autofill/BatchUpdates;"/>
-		<method name="transformChild(ILandroid/service/autofill/Transformation;)Landroid/service/autofill/BatchUpdates$Builder;"/>
-		<method name="updateTemplate(Landroid/widget/RemoteViews;)Landroid/service/autofill/BatchUpdates$Builder;"/>
-	</class>
-	<class name="android/service/autofill/CharSequenceTransformation" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/service/autofill/Transformation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/CharSequenceTransformation$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/CharSequenceTransformation$Builder" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;Ljava/lang/String;)V"/>
-		<method name="addField(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;Ljava/lang/String;)Landroid/service/autofill/CharSequenceTransformation$Builder;"/>
-		<method name="build()Landroid/service/autofill/CharSequenceTransformation;"/>
-	</class>
-	<class name="android/service/autofill/CustomDescription" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/CustomDescription$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/CustomDescription$Builder" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/widget/RemoteViews;)V"/>
-		<method name="addChild(ILandroid/service/autofill/Transformation;)Landroid/service/autofill/CustomDescription$Builder;"/>
-		<method name="batchUpdate(Landroid/service/autofill/Validator;Landroid/service/autofill/BatchUpdates;)Landroid/service/autofill/CustomDescription$Builder;" since="28"/>
-		<method name="build()Landroid/service/autofill/CustomDescription;"/>
-	</class>
-	<class name="android/service/autofill/Dataset" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/Dataset$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/Dataset$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/widget/RemoteViews;)V"/>
-		<method name="build()Landroid/service/autofill/Dataset;"/>
-		<method name="setAuthentication(Landroid/content/IntentSender;)Landroid/service/autofill/Dataset$Builder;"/>
-		<method name="setId(Ljava/lang/String;)Landroid/service/autofill/Dataset$Builder;"/>
-		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)Landroid/service/autofill/Dataset$Builder;"/>
-		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/widget/RemoteViews;)Landroid/service/autofill/Dataset$Builder;"/>
-		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;)Landroid/service/autofill/Dataset$Builder;" since="28"/>
-		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;Landroid/widget/RemoteViews;)Landroid/service/autofill/Dataset$Builder;" since="28"/>
-	</class>
-	<class name="android/service/autofill/DateTransformation" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/service/autofill/Transformation"/>
-		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Landroid/icu/text/DateFormat;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/DateValueSanitizer" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/service/autofill/Sanitizer"/>
-		<method name="&lt;init>(Landroid/icu/text/DateFormat;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/FieldClassification" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/ArrayList;)V" since="29"/>
-		<method name="getMatches()Ljava/util/List;"/>
-	</class>
-	<class name="android/service/autofill/FieldClassification$Match" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;F)V" since="29"/>
-		<method name="getCategoryId()Ljava/lang/String;"/>
-		<method name="getScore()F"/>
-	</class>
-	<class name="android/service/autofill/FillCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFailure(Ljava/lang/CharSequence;)V"/>
-		<method name="onSuccess(Landroid/service/autofill/FillResponse;)V"/>
-	</class>
-	<class name="android/service/autofill/FillContext" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getRequestId()I"/>
-		<method name="getStructure()Landroid/app/assist/AssistStructure;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/FillEventHistory" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILandroid/os/Bundle;)V" since="29"/>
-		<method name="getClientState()Landroid/os/Bundle;" deprecated="28"/>
-		<method name="getEvents()Ljava/util/List;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/FillEventHistory$Event" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;Landroid/os/Bundle;Ljava/util/List;Landroid/util/ArraySet;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;[Landroid/view/autofill/AutofillId;[Landroid/service/autofill/FieldClassification;)V" since="29"/>
-		<method name="getChangedFields()Ljava/util/Map;" since="28"/>
-		<method name="getClientState()Landroid/os/Bundle;" since="28"/>
-		<method name="getDatasetId()Ljava/lang/String;"/>
-		<method name="getFieldsClassification()Ljava/util/Map;" since="28"/>
-		<method name="getIgnoredDatasetIds()Ljava/util/Set;" since="28"/>
-		<method name="getManuallyEnteredField()Ljava/util/Map;" since="28"/>
-		<method name="getSelectedDatasetIds()Ljava/util/Set;" since="28"/>
-		<method name="getType()I"/>
-		<field name="TYPE_AUTHENTICATION_SELECTED"/>
-		<field name="TYPE_CONTEXT_COMMITTED" since="28"/>
-		<field name="TYPE_DATASET_AUTHENTICATION_SELECTED"/>
-		<field name="TYPE_DATASET_SELECTED"/>
-		<field name="TYPE_SAVE_SHOWN"/>
-	</class>
-	<class name="android/service/autofill/FillRequest" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getClientState()Landroid/os/Bundle;"/>
-		<method name="getFillContexts()Ljava/util/List;"/>
-		<method name="getFlags()I"/>
-		<method name="getId()I"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_MANUAL_REQUEST"/>
-	</class>
-	<class name="android/service/autofill/FillResponse" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/FillResponse$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_DISABLE_ACTIVITY_ONLY" since="28"/>
-		<field name="FLAG_TRACK_CONTEXT_COMMITED" since="28"/>
-	</class>
-	<class name="android/service/autofill/FillResponse$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addDataset(Landroid/service/autofill/Dataset;)Landroid/service/autofill/FillResponse$Builder;"/>
-		<method name="build()Landroid/service/autofill/FillResponse;"/>
-		<method name="disableAutofill(J)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
-		<method name="setAuthentication([Landroid/view/autofill/AutofillId;Landroid/content/IntentSender;Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;"/>
-		<method name="setClientState(Landroid/os/Bundle;)Landroid/service/autofill/FillResponse$Builder;"/>
-		<method name="setFieldClassificationIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
-		<method name="setFlags(I)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
-		<method name="setFooter(Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
-		<method name="setHeader(Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
-		<method name="setIgnoredIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/FillResponse$Builder;"/>
-		<method name="setSaveInfo(Landroid/service/autofill/SaveInfo;)Landroid/service/autofill/FillResponse$Builder;"/>
-	</class>
-	<class name="android/service/autofill/ImageTransformation" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/service/autofill/Transformation"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/ImageTransformation$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/ImageTransformation$Builder" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;I)V" deprecated="28"/>
-		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;ILjava/lang/CharSequence;)V" since="28"/>
-		<method name="addOption(Ljava/util/regex/Pattern;I)Landroid/service/autofill/ImageTransformation$Builder;" deprecated="28"/>
-		<method name="addOption(Ljava/util/regex/Pattern;ILjava/lang/CharSequence;)Landroid/service/autofill/ImageTransformation$Builder;" since="28"/>
-		<method name="build()Landroid/service/autofill/ImageTransformation;"/>
-	</class>
-	<class name="android/service/autofill/LuhnChecksumValidator" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/service/autofill/Validator"/>
-		<method name="&lt;init>([Landroid/view/autofill/AutofillId;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/RegexValidator" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/service/autofill/Validator"/>
-		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/Sanitizer" since="28">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="android/service/autofill/SaveCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFailure(Ljava/lang/CharSequence;)V"/>
-		<method name="onSuccess()V"/>
-		<method name="onSuccess(Landroid/content/IntentSender;)V" since="28"/>
-	</class>
-	<class name="android/service/autofill/SaveInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/SaveInfo$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_DONT_SAVE_ON_FINISH" since="28"/>
-		<field name="FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE"/>
-		<field name="NEGATIVE_BUTTON_STYLE_CANCEL"/>
-		<field name="NEGATIVE_BUTTON_STYLE_REJECT"/>
-		<field name="SAVE_DATA_TYPE_ADDRESS"/>
-		<field name="SAVE_DATA_TYPE_CREDIT_CARD"/>
-		<field name="SAVE_DATA_TYPE_EMAIL_ADDRESS"/>
-		<field name="SAVE_DATA_TYPE_GENERIC"/>
-		<field name="SAVE_DATA_TYPE_PASSWORD"/>
-		<field name="SAVE_DATA_TYPE_USERNAME"/>
-	</class>
-	<class name="android/service/autofill/SaveInfo$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V" since="27"/>
-		<method name="&lt;init>(I[Landroid/view/autofill/AutofillId;)V"/>
-		<method name="addSanitizer(Landroid/service/autofill/Sanitizer;[Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;" since="28"/>
-		<method name="build()Landroid/service/autofill/SaveInfo;"/>
-		<method name="setCustomDescription(Landroid/service/autofill/CustomDescription;)Landroid/service/autofill/SaveInfo$Builder;" since="27"/>
-		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/service/autofill/SaveInfo$Builder;"/>
-		<method name="setFlags(I)Landroid/service/autofill/SaveInfo$Builder;"/>
-		<method name="setNegativeAction(ILandroid/content/IntentSender;)Landroid/service/autofill/SaveInfo$Builder;"/>
-		<method name="setOptionalIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;"/>
-		<method name="setTriggerId(Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;" since="28"/>
-		<method name="setValidator(Landroid/service/autofill/Validator;)Landroid/service/autofill/SaveInfo$Builder;" since="27"/>
-	</class>
-	<class name="android/service/autofill/SaveRequest" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getClientState()Landroid/os/Bundle;"/>
-		<method name="getDatasetIds()Ljava/util/List;" since="28"/>
-		<method name="getFillContexts()Ljava/util/List;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/TextValueSanitizer" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/service/autofill/Sanitizer"/>
-		<method name="&lt;init>(Ljava/util/regex/Pattern;Ljava/lang/String;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/Transformation" since="27">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="android/service/autofill/UserData" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/autofill/UserData$Builder;)V" since="29"/>
-		<method name="getFieldClassificationAlgorithm()Ljava/lang/String;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getMaxCategoryCount()I"/>
-		<method name="getMaxFieldClassificationIdsSize()I"/>
-		<method name="getMaxUserDataSize()I"/>
-		<method name="getMaxValueLength()I"/>
-		<method name="getMinValueLength()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/autofill/UserData$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="add(Ljava/lang/String;Ljava/lang/String;)Landroid/service/autofill/UserData$Builder;"/>
-		<method name="build()Landroid/service/autofill/UserData;"/>
-		<method name="setFieldClassificationAlgorithm(Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;"/>
-	</class>
-	<class name="android/service/autofill/Validator" since="27">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="android/service/autofill/Validators" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="and([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;"/>
-		<method name="not(Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;" since="28"/>
-		<method name="or([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;"/>
-	</class>
-	<class name="android/service/carrier/CarrierIdentifier" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>([BLjava/lang/String;Ljava/lang/String;)V" since="28"/>
-		<method name="getGid1()Ljava/lang/String;"/>
-		<method name="getGid2()Ljava/lang/String;"/>
-		<method name="getImsi()Ljava/lang/String;"/>
-		<method name="getMcc()Ljava/lang/String;"/>
-		<method name="getMnc()Ljava/lang/String;"/>
-		<method name="getSpn()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/carrier/CarrierMessagingService" since="22">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onDownloadMms(Landroid/net/Uri;ILandroid/net/Uri;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V"/>
-		<method name="onFilterSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="24"/>
-		<method name="onReceiveTextSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="24"/>
-		<method name="onSendDataSms([BILjava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23"/>
-		<method name="onSendDataSms([BILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23"/>
-		<method name="onSendMms(Landroid/net/Uri;ILandroid/net/Uri;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V"/>
-		<method name="onSendMultipartTextSms(Ljava/util/List;ILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23"/>
-		<method name="onSendMultipartTextSms(Ljava/util/List;ILjava/lang/String;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23"/>
-		<method name="onSendTextSms(Ljava/lang/String;ILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23"/>
-		<method name="onSendTextSms(Ljava/lang/String;ILjava/lang/String;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23"/>
-		<field name="DOWNLOAD_STATUS_ERROR"/>
-		<field name="DOWNLOAD_STATUS_OK"/>
-		<field name="DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK"/>
-		<field name="RECEIVE_OPTIONS_DEFAULT" since="24"/>
-		<field name="RECEIVE_OPTIONS_DROP" since="24"/>
-		<field name="RECEIVE_OPTIONS_SKIP_NOTIFY_WHEN_CREDENTIAL_PROTECTED_STORAGE_UNAVAILABLE" since="24"/>
-		<field name="SEND_FLAG_REQUEST_DELIVERY_STATUS" since="23"/>
-		<field name="SEND_STATUS_ERROR"/>
-		<field name="SEND_STATUS_OK"/>
-		<field name="SEND_STATUS_RETRY_ON_CARRIER_NETWORK"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/carrier/CarrierMessagingService$ResultCallback" since="22">
-		<extends name="java/lang/Object"/>
-		<method name="onReceiveResult(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/service/carrier/CarrierMessagingService$SendMmsResult" since="22">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I[B)V"/>
-		<method name="getSendConfPdu()[B"/>
-		<method name="getSendStatus()I"/>
-	</class>
-	<class name="android/service/carrier/CarrierMessagingService$SendMultipartSmsResult" since="22">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I[I)V"/>
-		<method name="getMessageRefs()[I"/>
-		<method name="getSendStatus()I"/>
-	</class>
-	<class name="android/service/carrier/CarrierMessagingService$SendSmsResult" since="22">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getMessageRef()I"/>
-		<method name="getSendStatus()I"/>
-	</class>
-	<class name="android/service/carrier/CarrierService" since="23">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="notifyCarrierNetworkChange(Z)V"/>
-		<method name="onLoadConfig(Landroid/service/carrier/CarrierIdentifier;)Landroid/os/PersistableBundle;"/>
-		<field name="CARRIER_SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/carrier/MessagePdu" since="22">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/util/List;)V"/>
-		<method name="getPdus()Ljava/util/List;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/chooser/ChooserTarget" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/graphics/drawable/Icon;FLandroid/content/ComponentName;Landroid/os/Bundle;)V"/>
-		<method name="getComponentName()Landroid/content/ComponentName;"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
-		<method name="getIntentExtras()Landroid/os/Bundle;"/>
-		<method name="getScore()F"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/chooser/ChooserTargetService" since="23">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGetChooserTargets(Landroid/content/ComponentName;Landroid/content/IntentFilter;)Ljava/util/List;"/>
-		<field name="BIND_PERMISSION"/>
-		<field name="META_DATA_NAME"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/dreams/DreamService" since="17">
-		<extends name="android/app/Service"/>
-		<implements name="android/view/Window$Callback"/>
-		<method name="&lt;init>()V"/>
-		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="findViewById(I)Landroid/view/View;"/>
-		<method name="finish()V"/>
-		<method name="getWindow()Landroid/view/Window;"/>
-		<method name="getWindowManager()Landroid/view/WindowManager;"/>
-		<method name="isFullscreen()Z"/>
-		<method name="isInteractive()Z"/>
-		<method name="isScreenBright()Z"/>
-		<method name="onDreamingStarted()V"/>
-		<method name="onDreamingStopped()V"/>
-		<method name="onWakeUp()V" since="21"/>
-		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
-		<method name="setContentView(I)V"/>
-		<method name="setContentView(Landroid/view/View;)V"/>
-		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="setFullscreen(Z)V"/>
-		<method name="setInteractive(Z)V"/>
-		<method name="setScreenBright(Z)V"/>
-		<method name="wakeUp()V" since="21"/>
-		<field name="DREAM_META_DATA"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/media/CameraPrewarmService" since="23">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCooldown(Z)V"/>
-		<method name="onPrewarm()V"/>
-	</class>
-	<class name="android/service/media/MediaBrowserService" since="21">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBrowserRootHints()Landroid/os/Bundle;" since="24"/>
-		<method name="getCurrentBrowserInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;" since="28"/>
-		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
-		<method name="notifyChildrenChanged(Ljava/lang/String;)V"/>
-		<method name="notifyChildrenChanged(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
-		<method name="onGetRoot(Ljava/lang/String;ILandroid/os/Bundle;)Landroid/service/media/MediaBrowserService$BrowserRoot;"/>
-		<method name="onLoadChildren(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;)V"/>
-		<method name="onLoadChildren(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;Landroid/os/Bundle;)V" since="24"/>
-		<method name="onLoadItem(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;)V" since="23"/>
-		<method name="setSessionToken(Landroid/media/session/MediaSession$Token;)V"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/media/MediaBrowserService$BrowserRoot" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getRootId()Ljava/lang/String;"/>
-		<field name="EXTRA_OFFLINE" since="24"/>
-		<field name="EXTRA_RECENT" since="24"/>
-		<field name="EXTRA_SUGGESTED" since="24"/>
-	</class>
-	<class name="android/service/media/MediaBrowserService$Result" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/service/media/MediaBrowserService;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/service/media/MediaBrowserService;Ljava/lang/Object;)V" since="29"/>
-		<method name="detach()V"/>
-		<method name="sendResult(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/service/notification/Condition" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/net/Uri;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;III)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="copy()Landroid/service/notification/Condition;"/>
-		<method name="isValidId(Landroid/net/Uri;Ljava/lang/String;)Z"/>
-		<method name="newId(Landroid/content/Context;)Landroid/net/Uri$Builder;"/>
-		<method name="relevanceToString(I)Ljava/lang/String;"/>
-		<method name="stateToString(I)Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_RELEVANT_ALWAYS"/>
-		<field name="FLAG_RELEVANT_NOW"/>
-		<field name="SCHEME"/>
-		<field name="STATE_ERROR"/>
-		<field name="STATE_FALSE"/>
-		<field name="STATE_TRUE"/>
-		<field name="STATE_UNKNOWN"/>
-		<field name="flags"/>
-		<field name="icon"/>
-		<field name="id"/>
-		<field name="line1"/>
-		<field name="line2"/>
-		<field name="state"/>
-		<field name="summary"/>
-	</class>
-	<class name="android/service/notification/ConditionProviderService" since="24">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="notifyCondition(Landroid/service/notification/Condition;)V"/>
-		<method name="notifyConditions([Landroid/service/notification/Condition;)V"/>
-		<method name="onConnected()V"/>
-		<method name="onRequestConditions(I)V"/>
-		<method name="onSubscribe(Landroid/net/Uri;)V"/>
-		<method name="onUnsubscribe(Landroid/net/Uri;)V"/>
-		<method name="requestRebind(Landroid/content/ComponentName;)V" since="26"/>
-		<method name="requestUnbind()V" since="26"/>
-		<field name="EXTRA_RULE_ID"/>
-		<field name="META_DATA_CONFIGURATION_ACTIVITY"/>
-		<field name="META_DATA_RULE_INSTANCE_LIMIT"/>
-		<field name="META_DATA_RULE_TYPE"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/notification/NotificationListenerService" since="18">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancelAllNotifications()V"/>
-		<method name="cancelNotification(Ljava/lang/String;)V" since="21"/>
-		<method name="cancelNotification(Ljava/lang/String;Ljava/lang/String;I)V" deprecated="21"/>
-		<method name="cancelNotifications([Ljava/lang/String;)V" since="21"/>
-		<method name="getActiveNotifications()[Landroid/service/notification/StatusBarNotification;"/>
-		<method name="getActiveNotifications([Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;" since="21"/>
-		<method name="getCurrentInterruptionFilter()I" since="21"/>
-		<method name="getCurrentListenerHints()I" since="21"/>
-		<method name="getCurrentRanking()Landroid/service/notification/NotificationListenerService$RankingMap;" since="21"/>
-		<method name="getNotificationChannelGroups(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
-		<method name="getNotificationChannels(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
-		<method name="getSnoozedNotifications()[Landroid/service/notification/StatusBarNotification;" since="26"/>
-		<method name="onInterruptionFilterChanged(I)V" since="21"/>
-		<method name="onListenerConnected()V" since="21"/>
-		<method name="onListenerDisconnected()V" since="24"/>
-		<method name="onListenerHintsChanged(I)V" since="21"/>
-		<method name="onNotificationChannelGroupModified(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V" since="26"/>
-		<method name="onNotificationChannelModified(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V" since="26"/>
-		<method name="onNotificationPosted(Landroid/service/notification/StatusBarNotification;)V"/>
-		<method name="onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21"/>
-		<method name="onNotificationRankingUpdate(Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21"/>
-		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)V"/>
-		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21"/>
-		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V" since="26"/>
-		<method name="requestInterruptionFilter(I)V" since="21"/>
-		<method name="requestListenerHints(I)V" since="21"/>
-		<method name="requestRebind(Landroid/content/ComponentName;)V" since="24"/>
-		<method name="requestUnbind()V" since="24"/>
-		<method name="setNotificationsShown([Ljava/lang/String;)V" since="23"/>
-		<method name="snoozeNotification(Ljava/lang/String;J)V" since="26"/>
-		<method name="updateNotificationChannel(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;)V" since="26"/>
-		<field name="HINT_HOST_DISABLE_CALL_EFFECTS" since="24"/>
-		<field name="HINT_HOST_DISABLE_EFFECTS" since="21"/>
-		<field name="HINT_HOST_DISABLE_NOTIFICATION_EFFECTS" since="24"/>
-		<field name="INTERRUPTION_FILTER_ALARMS" since="23"/>
-		<field name="INTERRUPTION_FILTER_ALL" since="21"/>
-		<field name="INTERRUPTION_FILTER_NONE" since="21"/>
-		<field name="INTERRUPTION_FILTER_PRIORITY" since="21"/>
-		<field name="INTERRUPTION_FILTER_UNKNOWN" since="23"/>
-		<field name="NOTIFICATION_CHANNEL_OR_GROUP_ADDED" since="26"/>
-		<field name="NOTIFICATION_CHANNEL_OR_GROUP_DELETED" since="26"/>
-		<field name="NOTIFICATION_CHANNEL_OR_GROUP_UPDATED" since="26"/>
-		<field name="REASON_APP_CANCEL" since="26"/>
-		<field name="REASON_APP_CANCEL_ALL" since="26"/>
-		<field name="REASON_CANCEL" since="26"/>
-		<field name="REASON_CANCEL_ALL" since="26"/>
-		<field name="REASON_CHANNEL_BANNED" since="26"/>
-		<field name="REASON_CLICK" since="26"/>
-		<field name="REASON_ERROR" since="26"/>
-		<field name="REASON_GROUP_OPTIMIZATION" since="26"/>
-		<field name="REASON_GROUP_SUMMARY_CANCELED" since="26"/>
-		<field name="REASON_LISTENER_CANCEL" since="26"/>
-		<field name="REASON_LISTENER_CANCEL_ALL" since="26"/>
-		<field name="REASON_PACKAGE_BANNED" since="26"/>
-		<field name="REASON_PACKAGE_CHANGED" since="26"/>
-		<field name="REASON_PACKAGE_SUSPENDED" since="26"/>
-		<field name="REASON_PROFILE_TURNED_OFF" since="26"/>
-		<field name="REASON_SNOOZED" since="26"/>
-		<field name="REASON_TIMEOUT" since="26"/>
-		<field name="REASON_UNAUTOBUNDLED" since="26"/>
-		<field name="REASON_USER_STOPPED" since="26"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SUPPRESSED_EFFECT_SCREEN_OFF" since="24" deprecated="28"/>
-		<field name="SUPPRESSED_EFFECT_SCREEN_ON" since="24" deprecated="28"/>
-	</class>
-	<class name="android/service/notification/NotificationListenerService$Ranking" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="canShowBadge()Z" since="26"/>
-		<method name="getChannel()Landroid/app/NotificationChannel;" since="26"/>
-		<method name="getImportance()I" since="24"/>
-		<method name="getImportanceExplanation()Ljava/lang/CharSequence;" since="24"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="getOverrideGroupKey()Ljava/lang/String;" since="24"/>
-		<method name="getRank()I"/>
-		<method name="getSuppressedVisualEffects()I" since="24"/>
-		<method name="getUserSentiment()I" since="28"/>
-		<method name="isAmbient()Z"/>
-		<method name="isSuspended()Z" since="28"/>
-		<method name="matchesInterruptionFilter()Z"/>
-		<field name="USER_SENTIMENT_NEGATIVE" since="28"/>
-		<field name="USER_SENTIMENT_NEUTRAL" since="28"/>
-		<field name="USER_SENTIMENT_POSITIVE" since="28"/>
-	</class>
-	<class name="android/service/notification/NotificationListenerService$RankingMap" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getOrderedKeys()[Ljava/lang/String;"/>
-		<method name="getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/notification/StatusBarNotification" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IIILandroid/app/Notification;Landroid/os/UserHandle;J)V" deprecated="26"/>
-		<method name="clone()Landroid/service/notification/StatusBarNotification;"/>
-		<method name="getGroupKey()Ljava/lang/String;" since="21"/>
-		<method name="getId()I"/>
-		<method name="getKey()Ljava/lang/String;" since="20"/>
-		<method name="getNotification()Landroid/app/Notification;"/>
-		<method name="getOverrideGroupKey()Ljava/lang/String;" since="24"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getPostTime()J"/>
-		<method name="getTag()Ljava/lang/String;"/>
-		<method name="getUser()Landroid/os/UserHandle;" since="21"/>
-		<method name="getUserId()I" deprecated="21"/>
-		<method name="isClearable()Z"/>
-		<method name="isGroup()Z" since="24"/>
-		<method name="isOngoing()Z"/>
-		<method name="setOverrideGroupKey(Ljava/lang/String;)V" since="24"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/service/quicksettings/Tile" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getState()I"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
-		<method name="setIcon(Landroid/graphics/drawable/Icon;)V"/>
-		<method name="setLabel(Ljava/lang/CharSequence;)V"/>
-		<method name="setState(I)V"/>
-		<method name="updateTile()V"/>
-		<field name="CREATOR"/>
-		<field name="STATE_ACTIVE"/>
-		<field name="STATE_INACTIVE"/>
-		<field name="STATE_UNAVAILABLE"/>
-	</class>
-	<class name="android/service/quicksettings/TileService" since="24">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="getQsTile()Landroid/service/quicksettings/Tile;"/>
-		<method name="isLocked()Z"/>
-		<method name="isSecure()Z"/>
-		<method name="onClick()V"/>
-		<method name="onStartListening()V"/>
-		<method name="onStopListening()V"/>
-		<method name="onTileAdded()V"/>
-		<method name="onTileRemoved()V"/>
-		<method name="requestListeningState(Landroid/content/Context;Landroid/content/ComponentName;)V"/>
-		<method name="showDialog(Landroid/app/Dialog;)V"/>
-		<method name="startActivityAndCollapse(Landroid/content/Intent;)V"/>
-		<method name="unlockAndRun(Ljava/lang/Runnable;)V"/>
-		<field name="ACTION_QS_TILE"/>
-		<field name="ACTION_QS_TILE_PREFERENCES"/>
-		<field name="META_DATA_ACTIVE_TILE"/>
-	</class>
-	<class name="android/service/restrictions/RestrictionsReceiver" since="21">
-		<extends name="android/content/BroadcastReceiver"/>
-		<method name="&lt;init>()V"/>
-		<method name="onRequestPermission(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
-	</class>
-	<class name="android/service/textservice/SpellCheckerService" since="14">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="createSession()Landroid/service/textservice/SpellCheckerService$Session;"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/textservice/SpellCheckerService$Session" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBundle()Landroid/os/Bundle;"/>
-		<method name="getLocale()Ljava/lang/String;"/>
-		<method name="onCancel()V"/>
-		<method name="onClose()V" since="15"/>
-		<method name="onCreate()V"/>
-		<method name="onGetSentenceSuggestionsMultiple([Landroid/view/textservice/TextInfo;I)[Landroid/view/textservice/SentenceSuggestionsInfo;" since="16"/>
-		<method name="onGetSuggestions(Landroid/view/textservice/TextInfo;I)Landroid/view/textservice/SuggestionsInfo;"/>
-		<method name="onGetSuggestionsMultiple([Landroid/view/textservice/TextInfo;IZ)[Landroid/view/textservice/SuggestionsInfo;"/>
-	</class>
-	<class name="android/service/voice/AlwaysOnHotwordDetector" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createEnrollIntent()Landroid/content/Intent;"/>
-		<method name="createReEnrollIntent()Landroid/content/Intent;"/>
-		<method name="createUnEnrollIntent()Landroid/content/Intent;"/>
-		<method name="getSupportedRecognitionModes()I"/>
-		<method name="startRecognition(I)Z"/>
-		<method name="stopRecognition()Z"/>
-		<field name="RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS"/>
-		<field name="RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO"/>
-		<field name="RECOGNITION_MODE_USER_IDENTIFICATION"/>
-		<field name="RECOGNITION_MODE_VOICE_TRIGGER"/>
-		<field name="STATE_HARDWARE_UNAVAILABLE"/>
-		<field name="STATE_KEYPHRASE_ENROLLED"/>
-		<field name="STATE_KEYPHRASE_UNENROLLED"/>
-		<field name="STATE_KEYPHRASE_UNSUPPORTED"/>
-	</class>
-	<class name="android/service/voice/AlwaysOnHotwordDetector$Callback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAvailabilityChanged(I)V"/>
-		<method name="onDetected(Landroid/service/voice/AlwaysOnHotwordDetector$EventPayload;)V"/>
-		<method name="onError()V"/>
-		<method name="onRecognitionPaused()V"/>
-		<method name="onRecognitionResumed()V"/>
-	</class>
-	<class name="android/service/voice/AlwaysOnHotwordDetector$EventPayload" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ZZLandroid/media/AudioFormat;I[B)V" since="29"/>
-		<method name="getCaptureAudioFormat()Landroid/media/AudioFormat;"/>
-		<method name="getTriggerAudio()[B"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionService" since="21">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="createAlwaysOnHotwordDetector(Ljava/lang/String;Ljava/util/Locale;Landroid/service/voice/AlwaysOnHotwordDetector$Callback;)Landroid/service/voice/AlwaysOnHotwordDetector;"/>
-		<method name="getDisabledShowContext()I" since="23"/>
-		<method name="isActiveService(Landroid/content/Context;Landroid/content/ComponentName;)Z"/>
-		<method name="onLaunchVoiceAssistFromKeyguard()V" since="23"/>
-		<method name="onReady()V"/>
-		<method name="onShutdown()V"/>
-		<method name="setDisabledShowContext(I)V" since="23"/>
-		<method name="showSession(Landroid/os/Bundle;I)V" since="23"/>
-		<method name="startSession(Landroid/os/Bundle;)V" removed="23"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/ComponentCallbacks2" since="23"/>
-		<implements name="android/view/KeyEvent$Callback"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;)V"/>
-		<method name="closeSystemDialogs()V" since="23"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="23"/>
-		<method name="finish()V"/>
-		<method name="getContext()Landroid/content/Context;" since="23"/>
-		<method name="getDisabledShowContext()I" since="23"/>
-		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="23"/>
-		<method name="getUserDisabledShowContext()I" since="23"/>
-		<method name="getWindow()Landroid/app/Dialog;" since="23"/>
-		<method name="hide()V" since="23"/>
-		<method name="onAssistStructureFailure(Ljava/lang/Throwable;)V" since="23"/>
-		<method name="onBackPressed()V" since="23"/>
-		<method name="onCancelRequest(Landroid/service/voice/VoiceInteractionSession$Request;)V" since="23"/>
-		<method name="onCloseSystemDialogs()V"/>
-		<method name="onComputeInsets(Landroid/service/voice/VoiceInteractionSession$Insets;)V" since="23"/>
-		<method name="onCreate()V" since="23"/>
-		<method name="onCreate(Landroid/os/Bundle;)V" removed="23"/>
-		<method name="onCreateContentView()Landroid/view/View;" since="23"/>
-		<method name="onDestroy()V"/>
-		<method name="onGetSupportedCommands([Ljava/lang/String;)[Z" since="23"/>
-		<method name="onHandleAssist(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;)V" since="23"/>
-		<method name="onHandleAssistSecondary(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;II)V" since="24"/>
-		<method name="onHandleScreenshot(Landroid/graphics/Bitmap;)V" since="23"/>
-		<method name="onHide()V" since="23"/>
-		<method name="onLockscreenShown()V" since="23"/>
-		<method name="onPrepareShow(Landroid/os/Bundle;I)V" since="26"/>
-		<method name="onRequestAbortVoice(Landroid/service/voice/VoiceInteractionSession$AbortVoiceRequest;)V" since="23"/>
-		<method name="onRequestCommand(Landroid/service/voice/VoiceInteractionSession$CommandRequest;)V" since="23"/>
-		<method name="onRequestCompleteVoice(Landroid/service/voice/VoiceInteractionSession$CompleteVoiceRequest;)V" since="23"/>
-		<method name="onRequestConfirmation(Landroid/service/voice/VoiceInteractionSession$ConfirmationRequest;)V" since="23"/>
-		<method name="onRequestPickOption(Landroid/service/voice/VoiceInteractionSession$PickOptionRequest;)V" since="23"/>
-		<method name="onShow(Landroid/os/Bundle;I)V" since="23"/>
-		<method name="onTaskFinished(Landroid/content/Intent;I)V" since="23"/>
-		<method name="onTaskStarted(Landroid/content/Intent;I)V" since="23"/>
-		<method name="setContentView(Landroid/view/View;)V"/>
-		<method name="setDisabledShowContext(I)V" since="23"/>
-		<method name="setKeepAwake(Z)V" since="23"/>
-		<method name="setTheme(I)V" since="23"/>
-		<method name="setUiEnabled(Z)V" since="26"/>
-		<method name="show(Landroid/os/Bundle;I)V" since="23"/>
-		<method name="startAssistantActivity(Landroid/content/Intent;)V" since="26"/>
-		<method name="startVoiceActivity(Landroid/content/Intent;)V" since="23"/>
-		<field name="SHOW_SOURCE_ACTIVITY" since="24"/>
-		<field name="SHOW_SOURCE_APPLICATION" since="23"/>
-		<field name="SHOW_SOURCE_ASSIST_GESTURE" since="23"/>
-		<field name="SHOW_WITH_ASSIST" since="23"/>
-		<field name="SHOW_WITH_SCREENSHOT" since="23"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession$AbortVoiceRequest" since="23">
-		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23"/>
-		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
-		<method name="sendAbortResult(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession$CommandRequest" since="23">
-		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCommand()Ljava/lang/String;"/>
-		<method name="sendIntermediateResult(Landroid/os/Bundle;)V"/>
-		<method name="sendResult(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession$CompleteVoiceRequest" since="23">
-		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23"/>
-		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
-		<method name="sendCompleteResult(Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession$ConfirmationRequest" since="23">
-		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
-		<method name="&lt;init>()V"/>
-		<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23"/>
-		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
-		<method name="sendConfirmationResult(ZLandroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession$Insets" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="TOUCHABLE_INSETS_CONTENT"/>
-		<field name="TOUCHABLE_INSETS_FRAME"/>
-		<field name="TOUCHABLE_INSETS_REGION"/>
-		<field name="contentInsets"/>
-		<field name="touchableInsets"/>
-		<field name="touchableRegion"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession$PickOptionRequest" since="23">
-		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
-		<method name="&lt;init>()V"/>
-		<method name="getOptions()[Landroid/app/VoiceInteractor$PickOptionRequest$Option;"/>
-		<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23"/>
-		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
-		<method name="sendIntermediatePickOptionResult([Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
-		<method name="sendPickOptionResult([Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSession$Request" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="getCallingPackage()Ljava/lang/String;"/>
-		<method name="getCallingUid()I"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="isActive()Z"/>
-	</class>
-	<class name="android/service/voice/VoiceInteractionSessionService" since="21">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onNewSession(Landroid/os/Bundle;)Landroid/service/voice/VoiceInteractionSession;"/>
-	</class>
-	<class name="android/service/vr/VrListenerService" since="24">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="isVrModePackageEnabled(Landroid/content/Context;Landroid/content/ComponentName;)Z"/>
-		<method name="onCurrentVrActivityChanged(Landroid/content/ComponentName;)V"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/service/wallpaper/WallpaperService" since="7">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCreateEngine()Landroid/service/wallpaper/WallpaperService$Engine;"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/service/wallpaper/WallpaperService$Engine" since="7">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/service/wallpaper/WallpaperService;)V"/>
-		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="14"/>
-		<method name="getDesiredMinimumHeight()I"/>
-		<method name="getDesiredMinimumWidth()I"/>
-		<method name="getSurfaceHolder()Landroid/view/SurfaceHolder;"/>
-		<method name="isPreview()Z"/>
-		<method name="isVisible()Z"/>
-		<method name="notifyColorsChanged()V" since="27"/>
-		<method name="onApplyWindowInsets(Landroid/view/WindowInsets;)V" since="21"/>
-		<method name="onCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;"/>
-		<method name="onComputeColors()Landroid/app/WallpaperColors;" since="27"/>
-		<method name="onCreate(Landroid/view/SurfaceHolder;)V"/>
-		<method name="onDesiredSizeChanged(II)V"/>
-		<method name="onDestroy()V"/>
-		<method name="onOffsetsChanged(FFFFII)V"/>
-		<method name="onSurfaceChanged(Landroid/view/SurfaceHolder;III)V"/>
-		<method name="onSurfaceCreated(Landroid/view/SurfaceHolder;)V"/>
-		<method name="onSurfaceDestroyed(Landroid/view/SurfaceHolder;)V"/>
-		<method name="onSurfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V" since="9"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)V"/>
-		<method name="onVisibilityChanged(Z)V"/>
-		<method name="setOffsetNotificationsEnabled(Z)V" since="15"/>
-		<method name="setTouchEventsEnabled(Z)V"/>
-	</class>
-	<class name="android/speech/RecognitionListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="onBeginningOfSpeech()V"/>
-		<method name="onBufferReceived([B)V"/>
-		<method name="onEndOfSpeech()V"/>
-		<method name="onError(I)V"/>
-		<method name="onEvent(ILandroid/os/Bundle;)V"/>
-		<method name="onPartialResults(Landroid/os/Bundle;)V"/>
-		<method name="onReadyForSpeech(Landroid/os/Bundle;)V"/>
-		<method name="onResults(Landroid/os/Bundle;)V"/>
-		<method name="onRmsChanged(F)V"/>
-	</class>
-	<class name="android/speech/RecognitionService" since="8">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCancel(Landroid/speech/RecognitionService$Callback;)V"/>
-		<method name="onStartListening(Landroid/content/Intent;Landroid/speech/RecognitionService$Callback;)V"/>
-		<method name="onStopListening(Landroid/speech/RecognitionService$Callback;)V"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/speech/RecognitionService$Callback" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/speech/RecognitionService;)V"/>
-		<method name="beginningOfSpeech()V"/>
-		<method name="bufferReceived([B)V"/>
-		<method name="endOfSpeech()V"/>
-		<method name="error(I)V"/>
-		<method name="getCallingUid()I" since="23"/>
-		<method name="partialResults(Landroid/os/Bundle;)V"/>
-		<method name="readyForSpeech(Landroid/os/Bundle;)V"/>
-		<method name="results(Landroid/os/Bundle;)V"/>
-		<method name="rmsChanged(F)V"/>
-	</class>
-	<class name="android/speech/RecognizerIntent" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getVoiceDetailsIntent(Landroid/content/Context;)Landroid/content/Intent;" since="8"/>
-		<field name="ACTION_GET_LANGUAGE_DETAILS" since="8"/>
-		<field name="ACTION_RECOGNIZE_SPEECH"/>
-		<field name="ACTION_VOICE_SEARCH_HANDS_FREE" since="16"/>
-		<field name="ACTION_WEB_SEARCH"/>
-		<field name="DETAILS_META_DATA" since="8"/>
-		<field name="EXTRA_CALLING_PACKAGE" since="8"/>
-		<field name="EXTRA_CONFIDENCE_SCORES" since="14"/>
-		<field name="EXTRA_LANGUAGE"/>
-		<field name="EXTRA_LANGUAGE_MODEL"/>
-		<field name="EXTRA_LANGUAGE_PREFERENCE" since="8"/>
-		<field name="EXTRA_MAX_RESULTS"/>
-		<field name="EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE" since="8"/>
-		<field name="EXTRA_ORIGIN" since="14"/>
-		<field name="EXTRA_PARTIAL_RESULTS" since="8"/>
-		<field name="EXTRA_PREFER_OFFLINE" since="23"/>
-		<field name="EXTRA_PROMPT"/>
-		<field name="EXTRA_RESULTS"/>
-		<field name="EXTRA_RESULTS_PENDINGINTENT"/>
-		<field name="EXTRA_RESULTS_PENDINGINTENT_BUNDLE"/>
-		<field name="EXTRA_SECURE" since="16"/>
-		<field name="EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS" since="8"/>
-		<field name="EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS" since="8"/>
-		<field name="EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS" since="8"/>
-		<field name="EXTRA_SUPPORTED_LANGUAGES" since="8"/>
-		<field name="EXTRA_WEB_SEARCH_ONLY" since="11"/>
-		<field name="LANGUAGE_MODEL_FREE_FORM"/>
-		<field name="LANGUAGE_MODEL_WEB_SEARCH"/>
-		<field name="RESULT_AUDIO_ERROR"/>
-		<field name="RESULT_CLIENT_ERROR"/>
-		<field name="RESULT_NETWORK_ERROR"/>
-		<field name="RESULT_NO_MATCH"/>
-		<field name="RESULT_SERVER_ERROR"/>
-	</class>
-	<class name="android/speech/RecognizerResultsIntent" since="10">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ACTION_VOICE_SEARCH_RESULTS"/>
-		<field name="EXTRA_VOICE_SEARCH_RESULT_HTML"/>
-		<field name="EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS"/>
-		<field name="EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS"/>
-		<field name="EXTRA_VOICE_SEARCH_RESULT_STRINGS"/>
-		<field name="EXTRA_VOICE_SEARCH_RESULT_URLS"/>
-		<field name="URI_SCHEME_INLINE"/>
-	</class>
-	<class name="android/speech/SpeechRecognizer" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;)V" since="29"/>
-		<method name="cancel()V"/>
-		<method name="createSpeechRecognizer(Landroid/content/Context;)Landroid/speech/SpeechRecognizer;"/>
-		<method name="createSpeechRecognizer(Landroid/content/Context;Landroid/content/ComponentName;)Landroid/speech/SpeechRecognizer;"/>
-		<method name="destroy()V"/>
-		<method name="isRecognitionAvailable(Landroid/content/Context;)Z"/>
-		<method name="setRecognitionListener(Landroid/speech/RecognitionListener;)V"/>
-		<method name="startListening(Landroid/content/Intent;)V"/>
-		<method name="stopListening()V"/>
-		<field name="CONFIDENCE_SCORES" since="14"/>
-		<field name="ERROR_AUDIO"/>
-		<field name="ERROR_CLIENT"/>
-		<field name="ERROR_INSUFFICIENT_PERMISSIONS"/>
-		<field name="ERROR_NETWORK"/>
-		<field name="ERROR_NETWORK_TIMEOUT"/>
-		<field name="ERROR_NO_MATCH"/>
-		<field name="ERROR_RECOGNIZER_BUSY"/>
-		<field name="ERROR_SERVER"/>
-		<field name="ERROR_SPEECH_TIMEOUT"/>
-		<field name="RESULTS_RECOGNITION"/>
-	</class>
-	<class name="android/speech/tts/SynthesisCallback" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="audioAvailable([BII)I"/>
-		<method name="done()I"/>
-		<method name="error()V"/>
-		<method name="error(I)V" since="21"/>
-		<method name="getMaxBufferSize()I"/>
-		<method name="hasFinished()Z" since="21"/>
-		<method name="hasStarted()Z" since="21"/>
-		<method name="rangeStart(III)V" since="26"/>
-		<method name="start(III)I"/>
-	</class>
-	<class name="android/speech/tts/SynthesisRequest" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/os/Bundle;)V" since="21"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="getCallerUid()I" since="19"/>
-		<method name="getCharSequenceText()Ljava/lang/CharSequence;" since="21"/>
-		<method name="getCountry()Ljava/lang/String;"/>
-		<method name="getLanguage()Ljava/lang/String;"/>
-		<method name="getParams()Landroid/os/Bundle;"/>
-		<method name="getPitch()I"/>
-		<method name="getSpeechRate()I"/>
-		<method name="getText()Ljava/lang/String;" deprecated="21"/>
-		<method name="getVariant()Ljava/lang/String;"/>
-		<method name="getVoiceName()Ljava/lang/String;" since="21"/>
-	</class>
-	<class name="android/speech/tts/TextToSpeech" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/speech/tts/TextToSpeech$OnInitListener;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/speech/tts/TextToSpeech$OnInitListener;Ljava/lang/String;)V" since="14"/>
-		<method name="addEarcon(Ljava/lang/String;Ljava/io/File;)I" since="21"/>
-		<method name="addEarcon(Ljava/lang/String;Ljava/lang/String;)I" deprecated="21"/>
-		<method name="addEarcon(Ljava/lang/String;Ljava/lang/String;I)I"/>
-		<method name="addSpeech(Ljava/lang/CharSequence;Ljava/io/File;)I" since="21"/>
-		<method name="addSpeech(Ljava/lang/CharSequence;Ljava/lang/String;I)I" since="21"/>
-		<method name="addSpeech(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="addSpeech(Ljava/lang/String;Ljava/lang/String;I)I"/>
-		<method name="areDefaultsEnforced()Z" since="8" deprecated="21"/>
-		<method name="getAvailableLanguages()Ljava/util/Set;" since="21"/>
-		<method name="getDefaultEngine()Ljava/lang/String;" since="8"/>
-		<method name="getDefaultLanguage()Ljava/util/Locale;" since="18" deprecated="21"/>
-		<method name="getDefaultVoice()Landroid/speech/tts/Voice;" since="21"/>
-		<method name="getEngines()Ljava/util/List;" since="14"/>
-		<method name="getFeatures(Ljava/util/Locale;)Ljava/util/Set;" since="15" deprecated="21"/>
-		<method name="getLanguage()Ljava/util/Locale;" deprecated="21"/>
-		<method name="getMaxSpeechInputLength()I" since="18"/>
-		<method name="getVoice()Landroid/speech/tts/Voice;" since="21"/>
-		<method name="getVoices()Ljava/util/Set;" since="21"/>
-		<method name="isLanguageAvailable(Ljava/util/Locale;)I"/>
-		<method name="isSpeaking()Z"/>
-		<method name="playEarcon(Ljava/lang/String;ILandroid/os/Bundle;Ljava/lang/String;)I" since="21"/>
-		<method name="playEarcon(Ljava/lang/String;ILjava/util/HashMap;)I" deprecated="21"/>
-		<method name="playSilence(JILjava/util/HashMap;)I" deprecated="21"/>
-		<method name="playSilentUtterance(JILjava/lang/String;)I" since="21"/>
-		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)I" since="21"/>
-		<method name="setEngineByPackageName(Ljava/lang/String;)I" since="8" deprecated="16"/>
-		<method name="setLanguage(Ljava/util/Locale;)I"/>
-		<method name="setOnUtteranceCompletedListener(Landroid/speech/tts/TextToSpeech$OnUtteranceCompletedListener;)I" deprecated="16"/>
-		<method name="setOnUtteranceProgressListener(Landroid/speech/tts/UtteranceProgressListener;)I" since="15"/>
-		<method name="setPitch(F)I"/>
-		<method name="setSpeechRate(F)I"/>
-		<method name="setVoice(Landroid/speech/tts/Voice;)I" since="21"/>
-		<method name="shutdown()V"/>
-		<method name="speak(Ljava/lang/CharSequence;ILandroid/os/Bundle;Ljava/lang/String;)I" since="21"/>
-		<method name="speak(Ljava/lang/String;ILjava/util/HashMap;)I" deprecated="21"/>
-		<method name="stop()I"/>
-		<method name="synthesizeToFile(Ljava/lang/CharSequence;Landroid/os/Bundle;Ljava/io/File;Ljava/lang/String;)I" since="21"/>
-		<method name="synthesizeToFile(Ljava/lang/String;Ljava/util/HashMap;Ljava/lang/String;)I" deprecated="21"/>
-		<field name="ACTION_TTS_QUEUE_PROCESSING_COMPLETED"/>
-		<field name="ERROR"/>
-		<field name="ERROR_INVALID_REQUEST" since="21"/>
-		<field name="ERROR_NETWORK" since="21"/>
-		<field name="ERROR_NETWORK_TIMEOUT" since="21"/>
-		<field name="ERROR_NOT_INSTALLED_YET" since="21"/>
-		<field name="ERROR_OUTPUT" since="21"/>
-		<field name="ERROR_SERVICE" since="21"/>
-		<field name="ERROR_SYNTHESIS" since="21"/>
-		<field name="LANG_AVAILABLE"/>
-		<field name="LANG_COUNTRY_AVAILABLE"/>
-		<field name="LANG_COUNTRY_VAR_AVAILABLE"/>
-		<field name="LANG_MISSING_DATA"/>
-		<field name="LANG_NOT_SUPPORTED"/>
-		<field name="QUEUE_ADD"/>
-		<field name="QUEUE_FLUSH"/>
-		<field name="STOPPED" since="21"/>
-		<field name="SUCCESS"/>
-	</class>
-	<class name="android/speech/tts/TextToSpeech$Engine" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/speech/tts/TextToSpeech;)V"/>
-		<field name="ACTION_CHECK_TTS_DATA"/>
-		<field name="ACTION_GET_SAMPLE_TEXT" since="18"/>
-		<field name="ACTION_INSTALL_TTS_DATA"/>
-		<field name="ACTION_TTS_DATA_INSTALLED"/>
-		<field name="CHECK_VOICE_DATA_BAD_DATA" deprecated="18"/>
-		<field name="CHECK_VOICE_DATA_FAIL"/>
-		<field name="CHECK_VOICE_DATA_MISSING_DATA" deprecated="18"/>
-		<field name="CHECK_VOICE_DATA_MISSING_VOLUME" deprecated="18"/>
-		<field name="CHECK_VOICE_DATA_PASS"/>
-		<field name="DEFAULT_STREAM"/>
-		<field name="EXTRA_AVAILABLE_VOICES" since="8"/>
-		<field name="EXTRA_CHECK_VOICE_DATA_FOR" since="8" deprecated="18"/>
-		<field name="EXTRA_SAMPLE_TEXT" since="18"/>
-		<field name="EXTRA_TTS_DATA_INSTALLED" deprecated="18"/>
-		<field name="EXTRA_UNAVAILABLE_VOICES" since="8"/>
-		<field name="EXTRA_VOICE_DATA_FILES" deprecated="18"/>
-		<field name="EXTRA_VOICE_DATA_FILES_INFO" deprecated="18"/>
-		<field name="EXTRA_VOICE_DATA_ROOT_DIRECTORY" deprecated="18"/>
-		<field name="INTENT_ACTION_TTS_SERVICE" since="14"/>
-		<field name="KEY_FEATURE_EMBEDDED_SYNTHESIS" since="15" deprecated="21"/>
-		<field name="KEY_FEATURE_NETWORK_RETRIES_COUNT" since="21"/>
-		<field name="KEY_FEATURE_NETWORK_SYNTHESIS" since="15" deprecated="21"/>
-		<field name="KEY_FEATURE_NETWORK_TIMEOUT_MS" since="21"/>
-		<field name="KEY_FEATURE_NOT_INSTALLED" since="21"/>
-		<field name="KEY_PARAM_PAN" since="11"/>
-		<field name="KEY_PARAM_SESSION_ID" since="21"/>
-		<field name="KEY_PARAM_STREAM"/>
-		<field name="KEY_PARAM_UTTERANCE_ID"/>
-		<field name="KEY_PARAM_VOLUME" since="11"/>
-		<field name="SERVICE_META_DATA" since="14"/>
-	</class>
-	<class name="android/speech/tts/TextToSpeech$EngineInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="icon"/>
-		<field name="label"/>
-		<field name="name"/>
-	</class>
-	<class name="android/speech/tts/TextToSpeech$OnInitListener" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="onInit(I)V"/>
-	</class>
-	<class name="android/speech/tts/TextToSpeech$OnUtteranceCompletedListener" since="4" deprecated="18">
-		<extends name="java/lang/Object"/>
-		<method name="onUtteranceCompleted(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/speech/tts/TextToSpeechService" since="14">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGetDefaultVoiceNameFor(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="onGetFeaturesForLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Set;" since="15"/>
-		<method name="onGetLanguage()[Ljava/lang/String;"/>
-		<method name="onGetVoices()Ljava/util/List;" since="21"/>
-		<method name="onIsLanguageAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="onIsValidVoiceName(Ljava/lang/String;)I" since="21"/>
-		<method name="onLoadLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="onLoadVoice(Ljava/lang/String;)I" since="21"/>
-		<method name="onStop()V"/>
-		<method name="onSynthesizeText(Landroid/speech/tts/SynthesisRequest;Landroid/speech/tts/SynthesisCallback;)V"/>
-	</class>
-	<class name="android/speech/tts/UtteranceProgressListener" since="15">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAudioAvailable(Ljava/lang/String;[B)V" since="24"/>
-		<method name="onBeginSynthesis(Ljava/lang/String;III)V" since="24"/>
-		<method name="onDone(Ljava/lang/String;)V"/>
-		<method name="onError(Ljava/lang/String;)V" deprecated="21"/>
-		<method name="onError(Ljava/lang/String;I)V" since="21"/>
-		<method name="onRangeStart(Ljava/lang/String;III)V" since="26"/>
-		<method name="onStart(Ljava/lang/String;)V"/>
-		<method name="onStop(Ljava/lang/String;Z)V" since="23"/>
-	</class>
-	<class name="android/speech/tts/Voice" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;IIZLjava/util/Set;)V"/>
-		<method name="getFeatures()Ljava/util/Set;"/>
-		<method name="getLatency()I"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getQuality()I"/>
-		<method name="isNetworkConnectionRequired()Z"/>
-		<field name="CREATOR"/>
-		<field name="LATENCY_HIGH"/>
-		<field name="LATENCY_LOW"/>
-		<field name="LATENCY_NORMAL"/>
-		<field name="LATENCY_VERY_HIGH"/>
-		<field name="LATENCY_VERY_LOW"/>
-		<field name="QUALITY_HIGH"/>
-		<field name="QUALITY_LOW"/>
-		<field name="QUALITY_NORMAL"/>
-		<field name="QUALITY_VERY_HIGH"/>
-		<field name="QUALITY_VERY_LOW"/>
-	</class>
-	<class name="android/system/ErrnoException" since="21">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<field name="errno"/>
-	</class>
-	<class name="android/system/Int64Ref" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(J)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/system/Os" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="accept(Ljava/io/FileDescriptor;Ljava/net/InetSocketAddress;)Ljava/io/FileDescriptor;"/>
-		<method name="access(Ljava/lang/String;I)Z"/>
-		<method name="bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V"/>
-		<method name="chmod(Ljava/lang/String;I)V"/>
-		<method name="chown(Ljava/lang/String;II)V"/>
-		<method name="close(Ljava/io/FileDescriptor;)V"/>
-		<method name="connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V"/>
-		<method name="dup(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;"/>
-		<method name="dup2(Ljava/io/FileDescriptor;I)Ljava/io/FileDescriptor;"/>
-		<method name="environ()[Ljava/lang/String;"/>
-		<method name="execv(Ljava/lang/String;[Ljava/lang/String;)V"/>
-		<method name="execve(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V"/>
-		<method name="fchmod(Ljava/io/FileDescriptor;I)V"/>
-		<method name="fchown(Ljava/io/FileDescriptor;II)V"/>
-		<method name="fdatasync(Ljava/io/FileDescriptor;)V"/>
-		<method name="fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;"/>
-		<method name="fstatvfs(Ljava/io/FileDescriptor;)Landroid/system/StructStatVfs;"/>
-		<method name="fsync(Ljava/io/FileDescriptor;)V"/>
-		<method name="ftruncate(Ljava/io/FileDescriptor;J)V"/>
-		<method name="gai_strerror(I)Ljava/lang/String;"/>
-		<method name="getegid()I"/>
-		<method name="getenv(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="geteuid()I"/>
-		<method name="getgid()I"/>
-		<method name="getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;"/>
-		<method name="getpid()I"/>
-		<method name="getppid()I"/>
-		<method name="getsockname(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;"/>
-		<method name="gettid()I"/>
-		<method name="getuid()I"/>
-		<method name="getxattr(Ljava/lang/String;Ljava/lang/String;)[B" since="26"/>
-		<method name="if_indextoname(I)Ljava/lang/String;"/>
-		<method name="if_nametoindex(Ljava/lang/String;)I" since="26"/>
-		<method name="inet_pton(ILjava/lang/String;)Ljava/net/InetAddress;"/>
-		<method name="isatty(Ljava/io/FileDescriptor;)Z"/>
-		<method name="kill(II)V"/>
-		<method name="lchown(Ljava/lang/String;II)V"/>
-		<method name="link(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="listen(Ljava/io/FileDescriptor;I)V"/>
-		<method name="listxattr(Ljava/lang/String;)[Ljava/lang/String;" since="26"/>
-		<method name="lseek(Ljava/io/FileDescriptor;JI)J"/>
-		<method name="lstat(Ljava/lang/String;)Landroid/system/StructStat;"/>
-		<method name="mincore(JJ[B)V"/>
-		<method name="mkdir(Ljava/lang/String;I)V"/>
-		<method name="mkfifo(Ljava/lang/String;I)V"/>
-		<method name="mlock(JJ)V"/>
-		<method name="mmap(JJIILjava/io/FileDescriptor;J)J"/>
-		<method name="msync(JJI)V"/>
-		<method name="munlock(JJ)V"/>
-		<method name="munmap(JJ)V"/>
-		<method name="open(Ljava/lang/String;II)Ljava/io/FileDescriptor;"/>
-		<method name="pipe()[Ljava/io/FileDescriptor;"/>
-		<method name="poll([Landroid/system/StructPollfd;I)I"/>
-		<method name="posix_fallocate(Ljava/io/FileDescriptor;JJ)V"/>
-		<method name="prctl(IJJJJ)I"/>
-		<method name="pread(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I"/>
-		<method name="pread(Ljava/io/FileDescriptor;[BIIJ)I"/>
-		<method name="pwrite(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I"/>
-		<method name="pwrite(Ljava/io/FileDescriptor;[BIIJ)I"/>
-		<method name="read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I"/>
-		<method name="read(Ljava/io/FileDescriptor;[BII)I"/>
-		<method name="readlink(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="readv(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I"/>
-		<method name="recvfrom(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetSocketAddress;)I"/>
-		<method name="recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I"/>
-		<method name="remove(Ljava/lang/String;)V"/>
-		<method name="removexattr(Ljava/lang/String;Ljava/lang/String;)V" since="26"/>
-		<method name="rename(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="sendfile(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/system/Int64Ref;J)J" since="28"/>
-		<method name="sendfile(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/util/MutableLong;J)J" removed="28"/>
-		<method name="sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I"/>
-		<method name="sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I"/>
-		<method name="setegid(I)V"/>
-		<method name="setenv(Ljava/lang/String;Ljava/lang/String;Z)V"/>
-		<method name="seteuid(I)V"/>
-		<method name="setgid(I)V"/>
-		<method name="setsid()I"/>
-		<method name="setsockoptInt(Ljava/io/FileDescriptor;III)V" since="26"/>
-		<method name="setuid(I)V"/>
-		<method name="setxattr(Ljava/lang/String;Ljava/lang/String;[BI)V" since="26"/>
-		<method name="shutdown(Ljava/io/FileDescriptor;I)V"/>
-		<method name="socket(III)Ljava/io/FileDescriptor;"/>
-		<method name="socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V"/>
-		<method name="stat(Ljava/lang/String;)Landroid/system/StructStat;"/>
-		<method name="statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;"/>
-		<method name="strerror(I)Ljava/lang/String;"/>
-		<method name="strsignal(I)Ljava/lang/String;"/>
-		<method name="symlink(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="sysconf(I)J"/>
-		<method name="tcdrain(Ljava/io/FileDescriptor;)V"/>
-		<method name="tcsendbreak(Ljava/io/FileDescriptor;I)V"/>
-		<method name="umask(I)I"/>
-		<method name="uname()Landroid/system/StructUtsname;"/>
-		<method name="unsetenv(Ljava/lang/String;)V"/>
-		<method name="waitpid(ILandroid/util/MutableInt;I)I" removed="28"/>
-		<method name="write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I"/>
-		<method name="write(Ljava/io/FileDescriptor;[BII)I"/>
-		<method name="writev(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I"/>
-	</class>
-	<class name="android/system/OsConstants" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="S_ISBLK(I)Z"/>
-		<method name="S_ISCHR(I)Z"/>
-		<method name="S_ISDIR(I)Z"/>
-		<method name="S_ISFIFO(I)Z"/>
-		<method name="S_ISLNK(I)Z"/>
-		<method name="S_ISREG(I)Z"/>
-		<method name="S_ISSOCK(I)Z"/>
-		<method name="WCOREDUMP(I)Z"/>
-		<method name="WEXITSTATUS(I)I"/>
-		<method name="WIFEXITED(I)Z"/>
-		<method name="WIFSIGNALED(I)Z"/>
-		<method name="WIFSTOPPED(I)Z"/>
-		<method name="WSTOPSIG(I)I"/>
-		<method name="WTERMSIG(I)I"/>
-		<method name="errnoName(I)Ljava/lang/String;"/>
-		<method name="gaiName(I)Ljava/lang/String;"/>
-		<field name="AF_INET"/>
-		<field name="AF_INET6"/>
-		<field name="AF_UNIX"/>
-		<field name="AF_UNSPEC"/>
-		<field name="AI_ADDRCONFIG"/>
-		<field name="AI_ALL"/>
-		<field name="AI_CANONNAME"/>
-		<field name="AI_NUMERICHOST"/>
-		<field name="AI_NUMERICSERV"/>
-		<field name="AI_PASSIVE"/>
-		<field name="AI_V4MAPPED"/>
-		<field name="CAP_AUDIT_CONTROL"/>
-		<field name="CAP_AUDIT_WRITE"/>
-		<field name="CAP_BLOCK_SUSPEND"/>
-		<field name="CAP_CHOWN"/>
-		<field name="CAP_DAC_OVERRIDE"/>
-		<field name="CAP_DAC_READ_SEARCH"/>
-		<field name="CAP_FOWNER"/>
-		<field name="CAP_FSETID"/>
-		<field name="CAP_IPC_LOCK"/>
-		<field name="CAP_IPC_OWNER"/>
-		<field name="CAP_KILL"/>
-		<field name="CAP_LAST_CAP"/>
-		<field name="CAP_LEASE"/>
-		<field name="CAP_LINUX_IMMUTABLE"/>
-		<field name="CAP_MAC_ADMIN"/>
-		<field name="CAP_MAC_OVERRIDE"/>
-		<field name="CAP_MKNOD"/>
-		<field name="CAP_NET_ADMIN"/>
-		<field name="CAP_NET_BIND_SERVICE"/>
-		<field name="CAP_NET_BROADCAST"/>
-		<field name="CAP_NET_RAW"/>
-		<field name="CAP_SETFCAP"/>
-		<field name="CAP_SETGID"/>
-		<field name="CAP_SETPCAP"/>
-		<field name="CAP_SETUID"/>
-		<field name="CAP_SYSLOG"/>
-		<field name="CAP_SYS_ADMIN"/>
-		<field name="CAP_SYS_BOOT"/>
-		<field name="CAP_SYS_CHROOT"/>
-		<field name="CAP_SYS_MODULE"/>
-		<field name="CAP_SYS_NICE"/>
-		<field name="CAP_SYS_PACCT"/>
-		<field name="CAP_SYS_PTRACE"/>
-		<field name="CAP_SYS_RAWIO"/>
-		<field name="CAP_SYS_RESOURCE"/>
-		<field name="CAP_SYS_TIME"/>
-		<field name="CAP_SYS_TTY_CONFIG"/>
-		<field name="CAP_WAKE_ALARM"/>
-		<field name="E2BIG"/>
-		<field name="EACCES"/>
-		<field name="EADDRINUSE"/>
-		<field name="EADDRNOTAVAIL"/>
-		<field name="EAFNOSUPPORT"/>
-		<field name="EAGAIN"/>
-		<field name="EAI_AGAIN"/>
-		<field name="EAI_BADFLAGS"/>
-		<field name="EAI_FAIL"/>
-		<field name="EAI_FAMILY"/>
-		<field name="EAI_MEMORY"/>
-		<field name="EAI_NODATA"/>
-		<field name="EAI_NONAME"/>
-		<field name="EAI_OVERFLOW"/>
-		<field name="EAI_SERVICE"/>
-		<field name="EAI_SOCKTYPE"/>
-		<field name="EAI_SYSTEM"/>
-		<field name="EALREADY"/>
-		<field name="EBADF"/>
-		<field name="EBADMSG"/>
-		<field name="EBUSY"/>
-		<field name="ECANCELED"/>
-		<field name="ECHILD"/>
-		<field name="ECONNABORTED"/>
-		<field name="ECONNREFUSED"/>
-		<field name="ECONNRESET"/>
-		<field name="EDEADLK"/>
-		<field name="EDESTADDRREQ"/>
-		<field name="EDOM"/>
-		<field name="EDQUOT"/>
-		<field name="EEXIST"/>
-		<field name="EFAULT"/>
-		<field name="EFBIG"/>
-		<field name="EHOSTUNREACH"/>
-		<field name="EIDRM"/>
-		<field name="EILSEQ"/>
-		<field name="EINPROGRESS"/>
-		<field name="EINTR"/>
-		<field name="EINVAL"/>
-		<field name="EIO"/>
-		<field name="EISCONN"/>
-		<field name="EISDIR"/>
-		<field name="ELOOP"/>
-		<field name="EMFILE"/>
-		<field name="EMLINK"/>
-		<field name="EMSGSIZE"/>
-		<field name="EMULTIHOP"/>
-		<field name="ENAMETOOLONG"/>
-		<field name="ENETDOWN"/>
-		<field name="ENETRESET"/>
-		<field name="ENETUNREACH"/>
-		<field name="ENFILE"/>
-		<field name="ENOBUFS"/>
-		<field name="ENODATA"/>
-		<field name="ENODEV"/>
-		<field name="ENOENT"/>
-		<field name="ENOEXEC"/>
-		<field name="ENOLCK"/>
-		<field name="ENOLINK"/>
-		<field name="ENOMEM"/>
-		<field name="ENOMSG"/>
-		<field name="ENOPROTOOPT"/>
-		<field name="ENOSPC"/>
-		<field name="ENOSR"/>
-		<field name="ENOSTR"/>
-		<field name="ENOSYS"/>
-		<field name="ENOTCONN"/>
-		<field name="ENOTDIR"/>
-		<field name="ENOTEMPTY"/>
-		<field name="ENOTSOCK"/>
-		<field name="ENOTSUP"/>
-		<field name="ENOTTY"/>
-		<field name="ENXIO"/>
-		<field name="EOPNOTSUPP"/>
-		<field name="EOVERFLOW"/>
-		<field name="EPERM"/>
-		<field name="EPIPE"/>
-		<field name="EPROTO"/>
-		<field name="EPROTONOSUPPORT"/>
-		<field name="EPROTOTYPE"/>
-		<field name="ERANGE"/>
-		<field name="EROFS"/>
-		<field name="ESPIPE"/>
-		<field name="ESRCH"/>
-		<field name="ESTALE"/>
-		<field name="ETIME"/>
-		<field name="ETIMEDOUT"/>
-		<field name="ETXTBSY"/>
-		<field name="EXDEV"/>
-		<field name="EXIT_FAILURE"/>
-		<field name="EXIT_SUCCESS"/>
-		<field name="FD_CLOEXEC"/>
-		<field name="FIONREAD"/>
-		<field name="F_DUPFD"/>
-		<field name="F_DUPFD_CLOEXEC" since="27"/>
-		<field name="F_GETFD"/>
-		<field name="F_GETFL"/>
-		<field name="F_GETLK"/>
-		<field name="F_GETLK64"/>
-		<field name="F_GETOWN"/>
-		<field name="F_OK"/>
-		<field name="F_RDLCK"/>
-		<field name="F_SETFD"/>
-		<field name="F_SETFL"/>
-		<field name="F_SETLK"/>
-		<field name="F_SETLK64"/>
-		<field name="F_SETLKW"/>
-		<field name="F_SETLKW64"/>
-		<field name="F_SETOWN"/>
-		<field name="F_UNLCK"/>
-		<field name="F_WRLCK"/>
-		<field name="IFA_F_DADFAILED"/>
-		<field name="IFA_F_DEPRECATED"/>
-		<field name="IFA_F_HOMEADDRESS"/>
-		<field name="IFA_F_NODAD"/>
-		<field name="IFA_F_OPTIMISTIC"/>
-		<field name="IFA_F_PERMANENT"/>
-		<field name="IFA_F_SECONDARY"/>
-		<field name="IFA_F_TEMPORARY"/>
-		<field name="IFA_F_TENTATIVE"/>
-		<field name="IFF_ALLMULTI"/>
-		<field name="IFF_AUTOMEDIA"/>
-		<field name="IFF_BROADCAST"/>
-		<field name="IFF_DEBUG"/>
-		<field name="IFF_DYNAMIC"/>
-		<field name="IFF_LOOPBACK"/>
-		<field name="IFF_MASTER"/>
-		<field name="IFF_MULTICAST"/>
-		<field name="IFF_NOARP"/>
-		<field name="IFF_NOTRAILERS"/>
-		<field name="IFF_POINTOPOINT"/>
-		<field name="IFF_PORTSEL"/>
-		<field name="IFF_PROMISC"/>
-		<field name="IFF_RUNNING"/>
-		<field name="IFF_SLAVE"/>
-		<field name="IFF_UP"/>
-		<field name="IPPROTO_ICMP"/>
-		<field name="IPPROTO_ICMPV6"/>
-		<field name="IPPROTO_IP"/>
-		<field name="IPPROTO_IPV6"/>
-		<field name="IPPROTO_RAW"/>
-		<field name="IPPROTO_TCP"/>
-		<field name="IPPROTO_UDP"/>
-		<field name="IPV6_CHECKSUM"/>
-		<field name="IPV6_MULTICAST_HOPS"/>
-		<field name="IPV6_MULTICAST_IF"/>
-		<field name="IPV6_MULTICAST_LOOP"/>
-		<field name="IPV6_RECVDSTOPTS"/>
-		<field name="IPV6_RECVHOPLIMIT"/>
-		<field name="IPV6_RECVHOPOPTS"/>
-		<field name="IPV6_RECVPKTINFO"/>
-		<field name="IPV6_RECVRTHDR"/>
-		<field name="IPV6_RECVTCLASS"/>
-		<field name="IPV6_TCLASS"/>
-		<field name="IPV6_UNICAST_HOPS"/>
-		<field name="IPV6_V6ONLY"/>
-		<field name="IP_MULTICAST_IF"/>
-		<field name="IP_MULTICAST_LOOP"/>
-		<field name="IP_MULTICAST_TTL"/>
-		<field name="IP_TOS"/>
-		<field name="IP_TTL"/>
-		<field name="MAP_FIXED"/>
-		<field name="MAP_PRIVATE"/>
-		<field name="MAP_SHARED"/>
-		<field name="MCAST_BLOCK_SOURCE"/>
-		<field name="MCAST_JOIN_GROUP"/>
-		<field name="MCAST_JOIN_SOURCE_GROUP"/>
-		<field name="MCAST_LEAVE_GROUP"/>
-		<field name="MCAST_LEAVE_SOURCE_GROUP"/>
-		<field name="MCAST_UNBLOCK_SOURCE"/>
-		<field name="MCL_CURRENT"/>
-		<field name="MCL_FUTURE"/>
-		<field name="MSG_CTRUNC"/>
-		<field name="MSG_DONTROUTE"/>
-		<field name="MSG_EOR"/>
-		<field name="MSG_OOB"/>
-		<field name="MSG_PEEK"/>
-		<field name="MSG_TRUNC"/>
-		<field name="MSG_WAITALL"/>
-		<field name="MS_ASYNC"/>
-		<field name="MS_INVALIDATE"/>
-		<field name="MS_SYNC"/>
-		<field name="NI_DGRAM"/>
-		<field name="NI_NAMEREQD"/>
-		<field name="NI_NOFQDN"/>
-		<field name="NI_NUMERICHOST"/>
-		<field name="NI_NUMERICSERV"/>
-		<field name="O_ACCMODE"/>
-		<field name="O_APPEND"/>
-		<field name="O_CLOEXEC" since="27"/>
-		<field name="O_CREAT"/>
-		<field name="O_DSYNC" since="27"/>
-		<field name="O_EXCL"/>
-		<field name="O_NOCTTY"/>
-		<field name="O_NOFOLLOW"/>
-		<field name="O_NONBLOCK"/>
-		<field name="O_RDONLY"/>
-		<field name="O_RDWR"/>
-		<field name="O_SYNC"/>
-		<field name="O_TRUNC"/>
-		<field name="O_WRONLY"/>
-		<field name="POLLERR"/>
-		<field name="POLLHUP"/>
-		<field name="POLLIN"/>
-		<field name="POLLNVAL"/>
-		<field name="POLLOUT"/>
-		<field name="POLLPRI"/>
-		<field name="POLLRDBAND"/>
-		<field name="POLLRDNORM"/>
-		<field name="POLLWRBAND"/>
-		<field name="POLLWRNORM"/>
-		<field name="PROT_EXEC"/>
-		<field name="PROT_NONE"/>
-		<field name="PROT_READ"/>
-		<field name="PROT_WRITE"/>
-		<field name="PR_GET_DUMPABLE"/>
-		<field name="PR_SET_DUMPABLE"/>
-		<field name="PR_SET_NO_NEW_PRIVS"/>
-		<field name="RT_SCOPE_HOST"/>
-		<field name="RT_SCOPE_LINK"/>
-		<field name="RT_SCOPE_NOWHERE"/>
-		<field name="RT_SCOPE_SITE"/>
-		<field name="RT_SCOPE_UNIVERSE"/>
-		<field name="R_OK"/>
-		<field name="SEEK_CUR"/>
-		<field name="SEEK_END"/>
-		<field name="SEEK_SET"/>
-		<field name="SHUT_RD"/>
-		<field name="SHUT_RDWR"/>
-		<field name="SHUT_WR"/>
-		<field name="SIGABRT"/>
-		<field name="SIGALRM"/>
-		<field name="SIGBUS"/>
-		<field name="SIGCHLD"/>
-		<field name="SIGCONT"/>
-		<field name="SIGFPE"/>
-		<field name="SIGHUP"/>
-		<field name="SIGILL"/>
-		<field name="SIGINT"/>
-		<field name="SIGIO"/>
-		<field name="SIGKILL"/>
-		<field name="SIGPIPE"/>
-		<field name="SIGPROF"/>
-		<field name="SIGPWR"/>
-		<field name="SIGQUIT"/>
-		<field name="SIGRTMAX"/>
-		<field name="SIGRTMIN"/>
-		<field name="SIGSEGV"/>
-		<field name="SIGSTKFLT"/>
-		<field name="SIGSTOP"/>
-		<field name="SIGSYS"/>
-		<field name="SIGTERM"/>
-		<field name="SIGTRAP"/>
-		<field name="SIGTSTP"/>
-		<field name="SIGTTIN"/>
-		<field name="SIGTTOU"/>
-		<field name="SIGURG"/>
-		<field name="SIGUSR1"/>
-		<field name="SIGUSR2"/>
-		<field name="SIGVTALRM"/>
-		<field name="SIGWINCH"/>
-		<field name="SIGXCPU"/>
-		<field name="SIGXFSZ"/>
-		<field name="SIOCGIFADDR"/>
-		<field name="SIOCGIFBRDADDR"/>
-		<field name="SIOCGIFDSTADDR"/>
-		<field name="SIOCGIFNETMASK"/>
-		<field name="SOCK_DGRAM"/>
-		<field name="SOCK_RAW"/>
-		<field name="SOCK_SEQPACKET"/>
-		<field name="SOCK_STREAM"/>
-		<field name="SOL_SOCKET"/>
-		<field name="SO_BINDTODEVICE"/>
-		<field name="SO_BROADCAST"/>
-		<field name="SO_DEBUG"/>
-		<field name="SO_DONTROUTE"/>
-		<field name="SO_ERROR"/>
-		<field name="SO_KEEPALIVE"/>
-		<field name="SO_LINGER"/>
-		<field name="SO_OOBINLINE"/>
-		<field name="SO_PASSCRED"/>
-		<field name="SO_PEERCRED"/>
-		<field name="SO_RCVBUF"/>
-		<field name="SO_RCVLOWAT"/>
-		<field name="SO_RCVTIMEO"/>
-		<field name="SO_REUSEADDR"/>
-		<field name="SO_SNDBUF"/>
-		<field name="SO_SNDLOWAT"/>
-		<field name="SO_SNDTIMEO"/>
-		<field name="SO_TYPE"/>
-		<field name="STDERR_FILENO"/>
-		<field name="STDIN_FILENO"/>
-		<field name="STDOUT_FILENO"/>
-		<field name="ST_MANDLOCK" since="23"/>
-		<field name="ST_NOATIME" since="23"/>
-		<field name="ST_NODEV" since="23"/>
-		<field name="ST_NODIRATIME" since="23"/>
-		<field name="ST_NOEXEC" since="23"/>
-		<field name="ST_NOSUID" since="23"/>
-		<field name="ST_RDONLY" since="23"/>
-		<field name="ST_RELATIME" since="23"/>
-		<field name="ST_SYNCHRONOUS" since="23"/>
-		<field name="S_IFBLK"/>
-		<field name="S_IFCHR"/>
-		<field name="S_IFDIR"/>
-		<field name="S_IFIFO"/>
-		<field name="S_IFLNK"/>
-		<field name="S_IFMT"/>
-		<field name="S_IFREG"/>
-		<field name="S_IFSOCK"/>
-		<field name="S_IRGRP"/>
-		<field name="S_IROTH"/>
-		<field name="S_IRUSR"/>
-		<field name="S_IRWXG"/>
-		<field name="S_IRWXO"/>
-		<field name="S_IRWXU"/>
-		<field name="S_ISGID"/>
-		<field name="S_ISUID"/>
-		<field name="S_ISVTX"/>
-		<field name="S_IWGRP"/>
-		<field name="S_IWOTH"/>
-		<field name="S_IWUSR"/>
-		<field name="S_IXGRP"/>
-		<field name="S_IXOTH"/>
-		<field name="S_IXUSR"/>
-		<field name="TCP_NODELAY"/>
-		<field name="TCP_USER_TIMEOUT" since="26"/>
-		<field name="WCONTINUED"/>
-		<field name="WEXITED"/>
-		<field name="WNOHANG"/>
-		<field name="WNOWAIT"/>
-		<field name="WSTOPPED"/>
-		<field name="WUNTRACED"/>
-		<field name="W_OK"/>
-		<field name="X_OK"/>
-		<field name="_SC_2_CHAR_TERM"/>
-		<field name="_SC_2_C_BIND"/>
-		<field name="_SC_2_C_DEV"/>
-		<field name="_SC_2_C_VERSION"/>
-		<field name="_SC_2_FORT_DEV"/>
-		<field name="_SC_2_FORT_RUN"/>
-		<field name="_SC_2_LOCALEDEF"/>
-		<field name="_SC_2_SW_DEV"/>
-		<field name="_SC_2_UPE"/>
-		<field name="_SC_2_VERSION"/>
-		<field name="_SC_AIO_LISTIO_MAX"/>
-		<field name="_SC_AIO_MAX"/>
-		<field name="_SC_AIO_PRIO_DELTA_MAX"/>
-		<field name="_SC_ARG_MAX"/>
-		<field name="_SC_ASYNCHRONOUS_IO"/>
-		<field name="_SC_ATEXIT_MAX"/>
-		<field name="_SC_AVPHYS_PAGES"/>
-		<field name="_SC_BC_BASE_MAX"/>
-		<field name="_SC_BC_DIM_MAX"/>
-		<field name="_SC_BC_SCALE_MAX"/>
-		<field name="_SC_BC_STRING_MAX"/>
-		<field name="_SC_CHILD_MAX"/>
-		<field name="_SC_CLK_TCK"/>
-		<field name="_SC_COLL_WEIGHTS_MAX"/>
-		<field name="_SC_DELAYTIMER_MAX"/>
-		<field name="_SC_EXPR_NEST_MAX"/>
-		<field name="_SC_FSYNC"/>
-		<field name="_SC_GETGR_R_SIZE_MAX"/>
-		<field name="_SC_GETPW_R_SIZE_MAX"/>
-		<field name="_SC_IOV_MAX"/>
-		<field name="_SC_JOB_CONTROL"/>
-		<field name="_SC_LINE_MAX"/>
-		<field name="_SC_LOGIN_NAME_MAX"/>
-		<field name="_SC_MAPPED_FILES"/>
-		<field name="_SC_MEMLOCK"/>
-		<field name="_SC_MEMLOCK_RANGE"/>
-		<field name="_SC_MEMORY_PROTECTION"/>
-		<field name="_SC_MESSAGE_PASSING"/>
-		<field name="_SC_MQ_OPEN_MAX"/>
-		<field name="_SC_MQ_PRIO_MAX"/>
-		<field name="_SC_NGROUPS_MAX"/>
-		<field name="_SC_NPROCESSORS_CONF"/>
-		<field name="_SC_NPROCESSORS_ONLN"/>
-		<field name="_SC_OPEN_MAX"/>
-		<field name="_SC_PAGESIZE"/>
-		<field name="_SC_PAGE_SIZE"/>
-		<field name="_SC_PASS_MAX"/>
-		<field name="_SC_PHYS_PAGES"/>
-		<field name="_SC_PRIORITIZED_IO"/>
-		<field name="_SC_PRIORITY_SCHEDULING"/>
-		<field name="_SC_REALTIME_SIGNALS"/>
-		<field name="_SC_RE_DUP_MAX"/>
-		<field name="_SC_RTSIG_MAX"/>
-		<field name="_SC_SAVED_IDS"/>
-		<field name="_SC_SEMAPHORES"/>
-		<field name="_SC_SEM_NSEMS_MAX"/>
-		<field name="_SC_SEM_VALUE_MAX"/>
-		<field name="_SC_SHARED_MEMORY_OBJECTS"/>
-		<field name="_SC_SIGQUEUE_MAX"/>
-		<field name="_SC_STREAM_MAX"/>
-		<field name="_SC_SYNCHRONIZED_IO"/>
-		<field name="_SC_THREADS"/>
-		<field name="_SC_THREAD_ATTR_STACKADDR"/>
-		<field name="_SC_THREAD_ATTR_STACKSIZE"/>
-		<field name="_SC_THREAD_DESTRUCTOR_ITERATIONS"/>
-		<field name="_SC_THREAD_KEYS_MAX"/>
-		<field name="_SC_THREAD_PRIORITY_SCHEDULING"/>
-		<field name="_SC_THREAD_PRIO_INHERIT"/>
-		<field name="_SC_THREAD_PRIO_PROTECT"/>
-		<field name="_SC_THREAD_SAFE_FUNCTIONS"/>
-		<field name="_SC_THREAD_STACK_MIN"/>
-		<field name="_SC_THREAD_THREADS_MAX"/>
-		<field name="_SC_TIMERS"/>
-		<field name="_SC_TIMER_MAX"/>
-		<field name="_SC_TTY_NAME_MAX"/>
-		<field name="_SC_TZNAME_MAX"/>
-		<field name="_SC_VERSION"/>
-		<field name="_SC_XBS5_ILP32_OFF32"/>
-		<field name="_SC_XBS5_ILP32_OFFBIG"/>
-		<field name="_SC_XBS5_LP64_OFF64"/>
-		<field name="_SC_XBS5_LPBIG_OFFBIG"/>
-		<field name="_SC_XOPEN_CRYPT"/>
-		<field name="_SC_XOPEN_ENH_I18N"/>
-		<field name="_SC_XOPEN_LEGACY"/>
-		<field name="_SC_XOPEN_REALTIME"/>
-		<field name="_SC_XOPEN_REALTIME_THREADS"/>
-		<field name="_SC_XOPEN_SHM"/>
-		<field name="_SC_XOPEN_UNIX"/>
-		<field name="_SC_XOPEN_VERSION"/>
-		<field name="_SC_XOPEN_XCU_VERSION"/>
-	</class>
-	<class name="android/system/StructPollfd" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="events"/>
-		<field name="fd"/>
-		<field name="revents"/>
-		<field name="userData"/>
-	</class>
-	<class name="android/system/StructStat" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(JJIJIIJJJJJJJ)V"/>
-		<method name="&lt;init>(JJIJIIJJLandroid/system/StructTimespec;Landroid/system/StructTimespec;Landroid/system/StructTimespec;JJ)V" since="27"/>
-		<field name="st_atim" since="27"/>
-		<field name="st_atime"/>
-		<field name="st_blksize"/>
-		<field name="st_blocks"/>
-		<field name="st_ctim" since="27"/>
-		<field name="st_ctime"/>
-		<field name="st_dev"/>
-		<field name="st_gid"/>
-		<field name="st_ino"/>
-		<field name="st_mode"/>
-		<field name="st_mtim" since="27"/>
-		<field name="st_mtime"/>
-		<field name="st_nlink"/>
-		<field name="st_rdev"/>
-		<field name="st_size"/>
-		<field name="st_uid"/>
-	</class>
-	<class name="android/system/StructStatVfs" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(JJJJJJJJJJJ)V"/>
-		<field name="f_bavail"/>
-		<field name="f_bfree"/>
-		<field name="f_blocks"/>
-		<field name="f_bsize"/>
-		<field name="f_favail"/>
-		<field name="f_ffree"/>
-		<field name="f_files"/>
-		<field name="f_flag"/>
-		<field name="f_frsize"/>
-		<field name="f_fsid"/>
-		<field name="f_namemax"/>
-	</class>
-	<class name="android/system/StructTimespec" since="27">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(JJ)V"/>
-		<method name="compareTo(Landroid/system/StructTimespec;)I"/>
-		<field name="tv_nsec"/>
-		<field name="tv_sec"/>
-	</class>
-	<class name="android/system/StructUtsname" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="machine"/>
-		<field name="nodename"/>
-		<field name="release"/>
-		<field name="sysname"/>
-		<field name="version"/>
-	</class>
-	<class name="android/telecom/Call" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="answer(I)V"/>
-		<method name="conference(Landroid/telecom/Call;)V"/>
-		<method name="deflect(Landroid/net/Uri;)V" since="28"/>
-		<method name="disconnect()V"/>
-		<method name="getCannedTextResponses()Ljava/util/List;"/>
-		<method name="getChildren()Ljava/util/List;"/>
-		<method name="getConferenceableCalls()Ljava/util/List;"/>
-		<method name="getDetails()Landroid/telecom/Call$Details;"/>
-		<method name="getParent()Landroid/telecom/Call;"/>
-		<method name="getRemainingPostDialSequence()Ljava/lang/String;"/>
-		<method name="getRttCall()Landroid/telecom/Call$RttCall;" since="26"/>
-		<method name="getState()I"/>
-		<method name="getVideoCall()Landroid/telecom/InCallService$VideoCall;"/>
-		<method name="handoverTo(Landroid/telecom/PhoneAccountHandle;ILandroid/os/Bundle;)V" since="28"/>
-		<method name="hold()V"/>
-		<method name="isRttActive()Z" since="26"/>
-		<method name="mergeConference()V"/>
-		<method name="phoneAccountSelected(Landroid/telecom/PhoneAccountHandle;Z)V"/>
-		<method name="playDtmfTone(C)V"/>
-		<method name="postDialContinue(Z)V"/>
-		<method name="pullExternalCall()V" since="25"/>
-		<method name="putExtras(Landroid/os/Bundle;)V" since="25"/>
-		<method name="registerCallback(Landroid/telecom/Call$Callback;)V"/>
-		<method name="registerCallback(Landroid/telecom/Call$Callback;Landroid/os/Handler;)V"/>
-		<method name="reject(ZLjava/lang/String;)V"/>
-		<method name="removeExtras(Ljava/util/List;)V" since="25"/>
-		<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
-		<method name="respondToRttRequest(IZ)V" since="26"/>
-		<method name="sendCallEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
-		<method name="sendRttRequest()V" since="26"/>
-		<method name="splitFromConference()V"/>
-		<method name="stopDtmfTone()V"/>
-		<method name="stopRtt()V" since="26"/>
-		<method name="swapConference()V"/>
-		<method name="unhold()V"/>
-		<method name="unregisterCallback(Landroid/telecom/Call$Callback;)V"/>
-		<field name="AVAILABLE_PHONE_ACCOUNTS"/>
-		<field name="EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS" since="26"/>
-		<field name="STATE_ACTIVE"/>
-		<field name="STATE_CONNECTING"/>
-		<field name="STATE_DIALING"/>
-		<field name="STATE_DISCONNECTED"/>
-		<field name="STATE_DISCONNECTING"/>
-		<field name="STATE_HOLDING"/>
-		<field name="STATE_NEW"/>
-		<field name="STATE_PULLING_CALL" since="25"/>
-		<field name="STATE_RINGING"/>
-		<field name="STATE_SELECT_PHONE_ACCOUNT"/>
-	</class>
-	<class name="android/telecom/Call$Callback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCallDestroyed(Landroid/telecom/Call;)V"/>
-		<method name="onCannedTextResponsesLoaded(Landroid/telecom/Call;Ljava/util/List;)V"/>
-		<method name="onChildrenChanged(Landroid/telecom/Call;Ljava/util/List;)V"/>
-		<method name="onConferenceableCallsChanged(Landroid/telecom/Call;Ljava/util/List;)V"/>
-		<method name="onConnectionEvent(Landroid/telecom/Call;Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
-		<method name="onDetailsChanged(Landroid/telecom/Call;Landroid/telecom/Call$Details;)V"/>
-		<method name="onHandoverComplete(Landroid/telecom/Call;)V" since="28"/>
-		<method name="onHandoverFailed(Landroid/telecom/Call;I)V" since="28"/>
-		<method name="onParentChanged(Landroid/telecom/Call;Landroid/telecom/Call;)V"/>
-		<method name="onPostDialWait(Landroid/telecom/Call;Ljava/lang/String;)V"/>
-		<method name="onRttInitiationFailure(Landroid/telecom/Call;I)V" since="26"/>
-		<method name="onRttModeChanged(Landroid/telecom/Call;I)V" since="26"/>
-		<method name="onRttRequest(Landroid/telecom/Call;I)V" since="26"/>
-		<method name="onRttStatusChanged(Landroid/telecom/Call;ZLandroid/telecom/Call$RttCall;)V" since="26"/>
-		<method name="onStateChanged(Landroid/telecom/Call;I)V"/>
-		<method name="onVideoCallChanged(Landroid/telecom/Call;Landroid/telecom/InCallService$VideoCall;)V"/>
-		<field name="HANDOVER_FAILURE_DEST_APP_REJECTED" since="28"/>
-		<field name="HANDOVER_FAILURE_NOT_SUPPORTED" since="28"/>
-		<field name="HANDOVER_FAILURE_ONGOING_EMERGENCY_CALL" since="28"/>
-		<field name="HANDOVER_FAILURE_UNKNOWN" since="28"/>
-		<field name="HANDOVER_FAILURE_USER_REJECTED" since="28"/>
-	</class>
-	<class name="android/telecom/Call$Details" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;ILjava/lang/String;ILandroid/telecom/PhoneAccountHandle;IILandroid/telecom/DisconnectCause;JLandroid/telecom/GatewayInfo;ILandroid/telecom/StatusHints;Landroid/os/Bundle;Landroid/os/Bundle;J)V" since="29"/>
-		<method name="can(I)Z"/>
-		<method name="can(II)Z"/>
-		<method name="capabilitiesToString(I)Ljava/lang/String;"/>
-		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
-		<method name="getCallCapabilities()I"/>
-		<method name="getCallProperties()I"/>
-		<method name="getCallerDisplayName()Ljava/lang/String;"/>
-		<method name="getCallerDisplayNamePresentation()I"/>
-		<method name="getConnectTimeMillis()J"/>
-		<method name="getCreationTimeMillis()J" since="26"/>
-		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getGatewayInfo()Landroid/telecom/GatewayInfo;"/>
-		<method name="getHandle()Landroid/net/Uri;"/>
-		<method name="getHandlePresentation()I"/>
-		<method name="getIntentExtras()Landroid/os/Bundle;"/>
-		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
-		<method name="getVideoState()I"/>
-		<method name="hasProperty(I)Z"/>
-		<method name="hasProperty(II)Z"/>
-		<method name="propertiesToString(I)Ljava/lang/String;"/>
-		<field name="CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO" since="24"/>
-		<field name="CAPABILITY_CAN_PAUSE_VIDEO"/>
-		<field name="CAPABILITY_CAN_PULL_CALL" since="25"/>
-		<field name="CAPABILITY_DISCONNECT_FROM_CONFERENCE"/>
-		<field name="CAPABILITY_HOLD"/>
-		<field name="CAPABILITY_MANAGE_CONFERENCE"/>
-		<field name="CAPABILITY_MERGE_CONFERENCE"/>
-		<field name="CAPABILITY_MUTE"/>
-		<field name="CAPABILITY_RESPOND_VIA_TEXT"/>
-		<field name="CAPABILITY_SEPARATE_FROM_CONFERENCE"/>
-		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL"/>
-		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_RX"/>
-		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_TX"/>
-		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL"/>
-		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_RX"/>
-		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_TX"/>
-		<field name="CAPABILITY_SUPPORT_DEFLECT" since="28"/>
-		<field name="CAPABILITY_SUPPORT_HOLD"/>
-		<field name="CAPABILITY_SWAP_CONFERENCE"/>
-		<field name="PROPERTY_CONFERENCE"/>
-		<field name="PROPERTY_EMERGENCY_CALLBACK_MODE"/>
-		<field name="PROPERTY_ENTERPRISE_CALL" since="24"/>
-		<field name="PROPERTY_GENERIC_CONFERENCE"/>
-		<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25"/>
-		<field name="PROPERTY_HIGH_DEF_AUDIO"/>
-		<field name="PROPERTY_IS_EXTERNAL_CALL" since="25"/>
-		<field name="PROPERTY_RTT" since="28"/>
-		<field name="PROPERTY_SELF_MANAGED" since="26"/>
-		<field name="PROPERTY_WIFI"/>
-	</class>
-	<class name="android/telecom/Call$RttCall" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getRttAudioMode()I"/>
-		<method name="read()Ljava/lang/String;"/>
-		<method name="readImmediately()Ljava/lang/String;" since="27"/>
-		<method name="setRttMode(I)V"/>
-		<method name="write(Ljava/lang/String;)V"/>
-		<field name="RTT_MODE_FULL"/>
-		<field name="RTT_MODE_HCO"/>
-		<field name="RTT_MODE_VCO"/>
-	</class>
-	<class name="android/telecom/CallAudioState" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ZII)V"/>
-		<method name="audioRouteToString(I)Ljava/lang/String;"/>
-		<method name="getActiveBluetoothDevice()Landroid/bluetooth/BluetoothDevice;" since="28"/>
-		<method name="getRoute()I"/>
-		<method name="getSupportedBluetoothDevices()Ljava/util/Collection;" since="28"/>
-		<method name="getSupportedRouteMask()I"/>
-		<method name="isMuted()Z"/>
-		<field name="CREATOR"/>
-		<field name="ROUTE_BLUETOOTH"/>
-		<field name="ROUTE_EARPIECE"/>
-		<field name="ROUTE_SPEAKER"/>
-		<field name="ROUTE_WIRED_HEADSET"/>
-		<field name="ROUTE_WIRED_OR_EARPIECE"/>
-	</class>
-	<class name="android/telecom/CallScreeningService" since="24">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onScreenCall(Landroid/telecom/Call$Details;)V"/>
-		<method name="respondToCall(Landroid/telecom/Call$Details;Landroid/telecom/CallScreeningService$CallResponse;)V"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/telecom/CallScreeningService$CallResponse" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ZZZZ)V" since="29"/>
-		<method name="getDisallowCall()Z"/>
-		<method name="getRejectCall()Z"/>
-		<method name="getSkipCallLog()Z"/>
-		<method name="getSkipNotification()Z"/>
-	</class>
-	<class name="android/telecom/CallScreeningService$CallResponse$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/telecom/CallScreeningService$CallResponse;"/>
-		<method name="setDisallowCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
-		<method name="setRejectCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
-		<method name="setSkipCallLog(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
-		<method name="setSkipNotification(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
-	</class>
-	<class name="android/telecom/Conference" since="23">
-		<extends name="android/telecom/Conferenceable"/>
-		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;)V"/>
-		<method name="addConnection(Landroid/telecom/Connection;)Z"/>
-		<method name="destroy()V"/>
-		<method name="getCallAudioState()Landroid/telecom/CallAudioState;"/>
-		<method name="getConferenceableConnections()Ljava/util/List;"/>
-		<method name="getConnectionCapabilities()I"/>
-		<method name="getConnectionProperties()I" since="25"/>
-		<method name="getConnectionTime()J"/>
-		<method name="getConnections()Ljava/util/List;"/>
-		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
-		<method name="getState()I"/>
-		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
-		<method name="getVideoProvider()Landroid/telecom/Connection$VideoProvider;"/>
-		<method name="getVideoState()I"/>
-		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V"/>
-		<method name="onConnectionAdded(Landroid/telecom/Connection;)V"/>
-		<method name="onDisconnect()V"/>
-		<method name="onExtrasChanged(Landroid/os/Bundle;)V" since="25"/>
-		<method name="onHold()V"/>
-		<method name="onMerge()V"/>
-		<method name="onMerge(Landroid/telecom/Connection;)V"/>
-		<method name="onPlayDtmfTone(C)V"/>
-		<method name="onSeparate(Landroid/telecom/Connection;)V"/>
-		<method name="onStopDtmfTone()V"/>
-		<method name="onSwap()V"/>
-		<method name="onUnhold()V"/>
-		<method name="putExtras(Landroid/os/Bundle;)V" since="25"/>
-		<method name="removeConnection(Landroid/telecom/Connection;)V"/>
-		<method name="removeExtras(Ljava/util/List;)V" since="25"/>
-		<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
-		<method name="setActive()V"/>
-		<method name="setConferenceableConnections(Ljava/util/List;)V"/>
-		<method name="setConnectionCapabilities(I)V"/>
-		<method name="setConnectionProperties(I)V" since="25"/>
-		<method name="setConnectionStartElapsedRealTime(J)V" since="28"/>
-		<method name="setConnectionTime(J)V"/>
-		<method name="setDialing()V"/>
-		<method name="setDisconnected(Landroid/telecom/DisconnectCause;)V"/>
-		<method name="setExtras(Landroid/os/Bundle;)V"/>
-		<method name="setOnHold()V"/>
-		<method name="setStatusHints(Landroid/telecom/StatusHints;)V"/>
-		<method name="setVideoProvider(Landroid/telecom/Connection;Landroid/telecom/Connection$VideoProvider;)V"/>
-		<method name="setVideoState(Landroid/telecom/Connection;I)V"/>
-		<field name="CONNECT_TIME_NOT_SPECIFIED"/>
-	</class>
-	<class name="android/telecom/Conferenceable" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/telecom/Connection" since="23">
-		<extends name="android/telecom/Conferenceable"/>
-		<method name="&lt;init>()V"/>
-		<method name="capabilitiesToString(I)Ljava/lang/String;"/>
-		<method name="createCanceledConnection()Landroid/telecom/Connection;"/>
-		<method name="createFailedConnection(Landroid/telecom/DisconnectCause;)Landroid/telecom/Connection;"/>
-		<method name="destroy()V"/>
-		<method name="getAddress()Landroid/net/Uri;"/>
-		<method name="getAddressPresentation()I"/>
-		<method name="getAudioModeIsVoip()Z"/>
-		<method name="getCallAudioState()Landroid/telecom/CallAudioState;"/>
-		<method name="getCallerDisplayName()Ljava/lang/String;"/>
-		<method name="getCallerDisplayNamePresentation()I"/>
-		<method name="getConference()Landroid/telecom/Conference;"/>
-		<method name="getConferenceables()Ljava/util/List;"/>
-		<method name="getConnectionCapabilities()I"/>
-		<method name="getConnectionProperties()I" since="25"/>
-		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getState()I"/>
-		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
-		<method name="getVideoProvider()Landroid/telecom/Connection$VideoProvider;"/>
-		<method name="handleRttUpgradeResponse(Landroid/telecom/Connection$RttTextStream;)V" since="28"/>
-		<method name="isRingbackRequested()Z"/>
-		<method name="onAbort()V"/>
-		<method name="onAnswer()V"/>
-		<method name="onAnswer(I)V"/>
-		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V"/>
-		<method name="onCallEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
-		<method name="onDeflect(Landroid/net/Uri;)V" since="28"/>
-		<method name="onDisconnect()V"/>
-		<method name="onExtrasChanged(Landroid/os/Bundle;)V" since="25"/>
-		<method name="onHandoverComplete()V" since="28"/>
-		<method name="onHold()V"/>
-		<method name="onPlayDtmfTone(C)V"/>
-		<method name="onPostDialContinue(Z)V"/>
-		<method name="onPullExternalCall()V" since="25"/>
-		<method name="onReject()V"/>
-		<method name="onReject(Ljava/lang/String;)V" since="24"/>
-		<method name="onSeparate()V"/>
-		<method name="onShowIncomingCallUi()V" since="26"/>
-		<method name="onSilence()V" since="29"/>
-		<method name="onStartRtt(Landroid/telecom/Connection$RttTextStream;)V" since="28"/>
-		<method name="onStateChanged(I)V"/>
-		<method name="onStopDtmfTone()V"/>
-		<method name="onStopRtt()V" since="28"/>
-		<method name="onUnhold()V"/>
-		<method name="propertiesToString(I)Ljava/lang/String;" since="25"/>
-		<method name="putExtras(Landroid/os/Bundle;)V" since="25"/>
-		<method name="removeExtras(Ljava/util/List;)V" since="25"/>
-		<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
-		<method name="requestBluetoothAudio(Landroid/bluetooth/BluetoothDevice;)V" since="28"/>
-		<method name="sendConnectionEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
-		<method name="sendRemoteRttRequest()V" since="28"/>
-		<method name="sendRttInitiationFailure(I)V" since="28"/>
-		<method name="sendRttInitiationSuccess()V" since="28"/>
-		<method name="sendRttSessionRemotelyTerminated()V" since="28"/>
-		<method name="setActive()V"/>
-		<method name="setAddress(Landroid/net/Uri;I)V"/>
-		<method name="setAudioModeIsVoip(Z)V"/>
-		<method name="setAudioRoute(I)V" since="26"/>
-		<method name="setCallerDisplayName(Ljava/lang/String;I)V"/>
-		<method name="setConferenceableConnections(Ljava/util/List;)V"/>
-		<method name="setConferenceables(Ljava/util/List;)V"/>
-		<method name="setConnectionCapabilities(I)V"/>
-		<method name="setConnectionProperties(I)V" since="25"/>
-		<method name="setDialing()V"/>
-		<method name="setDisconnected(Landroid/telecom/DisconnectCause;)V"/>
-		<method name="setExtras(Landroid/os/Bundle;)V"/>
-		<method name="setInitialized()V"/>
-		<method name="setInitializing()V"/>
-		<method name="setNextPostDialChar(C)V"/>
-		<method name="setOnHold()V"/>
-		<method name="setPostDialWait(Ljava/lang/String;)V"/>
-		<method name="setPulling()V" since="25"/>
-		<method name="setRingbackRequested(Z)V"/>
-		<method name="setRinging()V"/>
-		<method name="setStatusHints(Landroid/telecom/StatusHints;)V"/>
-		<method name="setVideoProvider(Landroid/telecom/Connection$VideoProvider;)V"/>
-		<method name="setVideoState(I)V"/>
-		<method name="stateToString(I)Ljava/lang/String;"/>
-		<field name="CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO" since="24"/>
-		<field name="CAPABILITY_CAN_PAUSE_VIDEO"/>
-		<field name="CAPABILITY_CAN_PULL_CALL" since="25"/>
-		<field name="CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION" since="24"/>
-		<field name="CAPABILITY_CAN_UPGRADE_TO_VIDEO"/>
-		<field name="CAPABILITY_DISCONNECT_FROM_CONFERENCE"/>
-		<field name="CAPABILITY_HOLD"/>
-		<field name="CAPABILITY_MANAGE_CONFERENCE"/>
-		<field name="CAPABILITY_MERGE_CONFERENCE"/>
-		<field name="CAPABILITY_MUTE"/>
-		<field name="CAPABILITY_RESPOND_VIA_TEXT"/>
-		<field name="CAPABILITY_SEPARATE_FROM_CONFERENCE"/>
-		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL"/>
-		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_RX"/>
-		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_TX"/>
-		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL"/>
-		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_RX"/>
-		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_TX"/>
-		<field name="CAPABILITY_SUPPORT_DEFLECT" since="28"/>
-		<field name="CAPABILITY_SUPPORT_HOLD"/>
-		<field name="CAPABILITY_SWAP_CONFERENCE"/>
-		<field name="EVENT_CALL_MERGE_FAILED" since="25"/>
-		<field name="EVENT_CALL_PULL_FAILED" since="25"/>
-		<field name="EXTRA_ANSWERING_DROPS_FG_CALL" since="25"/>
-		<field name="EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME" since="26"/>
-		<field name="EXTRA_CALL_SUBJECT"/>
-		<field name="EXTRA_CHILD_ADDRESS"/>
-		<field name="EXTRA_LAST_FORWARDED_NUMBER"/>
-		<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25"/>
-		<field name="PROPERTY_IS_EXTERNAL_CALL" since="25"/>
-		<field name="PROPERTY_IS_RTT" since="28"/>
-		<field name="PROPERTY_SELF_MANAGED" since="26"/>
-		<field name="STATE_ACTIVE"/>
-		<field name="STATE_DIALING"/>
-		<field name="STATE_DISCONNECTED"/>
-		<field name="STATE_HOLDING"/>
-		<field name="STATE_INITIALIZING"/>
-		<field name="STATE_NEW"/>
-		<field name="STATE_PULLING_CALL" since="25"/>
-		<field name="STATE_RINGING"/>
-	</class>
-	<class name="android/telecom/Connection$RttModifyStatus" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="SESSION_MODIFY_REQUEST_FAIL"/>
-		<field name="SESSION_MODIFY_REQUEST_INVALID"/>
-		<field name="SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE"/>
-		<field name="SESSION_MODIFY_REQUEST_SUCCESS"/>
-		<field name="SESSION_MODIFY_REQUEST_TIMED_OUT"/>
-	</class>
-	<class name="android/telecom/Connection$RttTextStream" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;Landroid/os/ParcelFileDescriptor;)V" since="29"/>
-		<method name="read()Ljava/lang/String;"/>
-		<method name="readImmediately()Ljava/lang/String;"/>
-		<method name="write(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/telecom/Connection$VideoProvider" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="changeCameraCapabilities(Landroid/telecom/VideoProfile$CameraCapabilities;)V"/>
-		<method name="changePeerDimensions(II)V"/>
-		<method name="changeVideoQuality(I)V"/>
-		<method name="handleCallSessionEvent(I)V"/>
-		<method name="onRequestCameraCapabilities()V"/>
-		<method name="onRequestConnectionDataUsage()V"/>
-		<method name="onSendSessionModifyRequest(Landroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
-		<method name="onSendSessionModifyResponse(Landroid/telecom/VideoProfile;)V"/>
-		<method name="onSetCamera(Ljava/lang/String;)V"/>
-		<method name="onSetDeviceOrientation(I)V"/>
-		<method name="onSetDisplaySurface(Landroid/view/Surface;)V"/>
-		<method name="onSetPauseImage(Landroid/net/Uri;)V"/>
-		<method name="onSetPreviewSurface(Landroid/view/Surface;)V"/>
-		<method name="onSetZoom(F)V"/>
-		<method name="receiveSessionModifyRequest(Landroid/telecom/VideoProfile;)V"/>
-		<method name="receiveSessionModifyResponse(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
-		<method name="setCallDataUsage(J)V"/>
-		<field name="SESSION_EVENT_CAMERA_FAILURE"/>
-		<field name="SESSION_EVENT_CAMERA_PERMISSION_ERROR" since="26"/>
-		<field name="SESSION_EVENT_CAMERA_READY"/>
-		<field name="SESSION_EVENT_RX_PAUSE"/>
-		<field name="SESSION_EVENT_RX_RESUME"/>
-		<field name="SESSION_EVENT_TX_START"/>
-		<field name="SESSION_EVENT_TX_STOP"/>
-		<field name="SESSION_MODIFY_REQUEST_FAIL"/>
-		<field name="SESSION_MODIFY_REQUEST_INVALID"/>
-		<field name="SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE"/>
-		<field name="SESSION_MODIFY_REQUEST_SUCCESS"/>
-		<field name="SESSION_MODIFY_REQUEST_TIMED_OUT"/>
-	</class>
-	<class name="android/telecom/ConnectionRequest" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;)V"/>
-		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;I)V"/>
-		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
-		<method name="getAddress()Landroid/net/Uri;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getRttTextStream()Landroid/telecom/Connection$RttTextStream;" since="28"/>
-		<method name="getVideoState()I"/>
-		<method name="isRequestingRtt()Z" since="28"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telecom/ConnectionService" since="23">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="addConference(Landroid/telecom/Conference;)V"/>
-		<method name="addExistingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/Connection;)V"/>
-		<method name="conferenceRemoteConnections(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConnection;)V"/>
-		<method name="connectionServiceFocusReleased()V" since="28"/>
-		<method name="createRemoteIncomingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConnection;"/>
-		<method name="createRemoteOutgoingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConnection;"/>
-		<method name="getAllConferences()Ljava/util/Collection;" since="24"/>
-		<method name="getAllConnections()Ljava/util/Collection;"/>
-		<method name="onConference(Landroid/telecom/Connection;Landroid/telecom/Connection;)V"/>
-		<method name="onConnectionServiceFocusGained()V" since="28"/>
-		<method name="onConnectionServiceFocusLost()V" since="28"/>
-		<method name="onCreateIncomingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;"/>
-		<method name="onCreateIncomingConnectionFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="26"/>
-		<method name="onCreateIncomingHandoverConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" since="28"/>
-		<method name="onCreateOutgoingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;"/>
-		<method name="onCreateOutgoingConnectionFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="26"/>
-		<method name="onCreateOutgoingHandoverConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" since="28"/>
-		<method name="onHandoverFailed(Landroid/telecom/ConnectionRequest;I)V" since="28"/>
-		<method name="onRemoteConferenceAdded(Landroid/telecom/RemoteConference;)V"/>
-		<method name="onRemoteExistingConnectionAdded(Landroid/telecom/RemoteConnection;)V"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/telecom/DisconnectCause" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-		<method name="getCode()I"/>
-		<method name="getDescription()Ljava/lang/CharSequence;"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getReason()Ljava/lang/String;"/>
-		<method name="getTone()I"/>
-		<field name="ANSWERED_ELSEWHERE" since="25"/>
-		<field name="BUSY"/>
-		<field name="CALL_PULLED" since="25"/>
-		<field name="CANCELED"/>
-		<field name="CONNECTION_MANAGER_NOT_SUPPORTED"/>
-		<field name="CREATOR"/>
-		<field name="ERROR"/>
-		<field name="LOCAL"/>
-		<field name="MISSED"/>
-		<field name="OTHER"/>
-		<field name="REJECTED"/>
-		<field name="REMOTE"/>
-		<field name="RESTRICTED"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/telecom/GatewayInfo" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;)V"/>
-		<method name="getGatewayAddress()Landroid/net/Uri;"/>
-		<method name="getGatewayProviderPackageName()Ljava/lang/String;"/>
-		<method name="getOriginalAddress()Landroid/net/Uri;"/>
-		<method name="isEmpty()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telecom/InCallService" since="23">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="canAddCall()Z"/>
-		<method name="getCallAudioState()Landroid/telecom/CallAudioState;"/>
-		<method name="getCalls()Ljava/util/List;"/>
-		<method name="onBringToForeground(Z)V"/>
-		<method name="onCallAdded(Landroid/telecom/Call;)V"/>
-		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V"/>
-		<method name="onCallRemoved(Landroid/telecom/Call;)V"/>
-		<method name="onCanAddCallChanged(Z)V"/>
-		<method name="onConnectionEvent(Landroid/telecom/Call;Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
-		<method name="onSilenceRinger()V" since="24"/>
-		<method name="requestBluetoothAudio(Landroid/bluetooth/BluetoothDevice;)V" since="28"/>
-		<method name="setAudioRoute(I)V"/>
-		<method name="setMuted(Z)V"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/telecom/InCallService$VideoCall" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="registerCallback(Landroid/telecom/InCallService$VideoCall$Callback;)V"/>
-		<method name="registerCallback(Landroid/telecom/InCallService$VideoCall$Callback;Landroid/os/Handler;)V"/>
-		<method name="requestCallDataUsage()V"/>
-		<method name="requestCameraCapabilities()V"/>
-		<method name="sendSessionModifyRequest(Landroid/telecom/VideoProfile;)V"/>
-		<method name="sendSessionModifyResponse(Landroid/telecom/VideoProfile;)V"/>
-		<method name="setCamera(Ljava/lang/String;)V"/>
-		<method name="setDeviceOrientation(I)V"/>
-		<method name="setDisplaySurface(Landroid/view/Surface;)V"/>
-		<method name="setPauseImage(Landroid/net/Uri;)V"/>
-		<method name="setPreviewSurface(Landroid/view/Surface;)V"/>
-		<method name="setZoom(F)V"/>
-		<method name="unregisterCallback(Landroid/telecom/InCallService$VideoCall$Callback;)V"/>
-	</class>
-	<class name="android/telecom/InCallService$VideoCall$Callback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCallDataUsageChanged(J)V"/>
-		<method name="onCallSessionEvent(I)V"/>
-		<method name="onCameraCapabilitiesChanged(Landroid/telecom/VideoProfile$CameraCapabilities;)V"/>
-		<method name="onPeerDimensionsChanged(II)V"/>
-		<method name="onSessionModifyRequestReceived(Landroid/telecom/VideoProfile;)V"/>
-		<method name="onSessionModifyResponseReceived(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
-		<method name="onVideoQualityChanged(I)V"/>
-	</class>
-	<class name="android/telecom/PhoneAccount" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="builder(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
-		<method name="getAddress()Landroid/net/Uri;"/>
-		<method name="getCapabilities()I"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="24"/>
-		<method name="getHighlightColor()I"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getShortDescription()Ljava/lang/CharSequence;"/>
-		<method name="getSubscriptionAddress()Landroid/net/Uri;"/>
-		<method name="getSupportedUriSchemes()Ljava/util/List;"/>
-		<method name="hasCapabilities(I)Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="supportsUriScheme(Ljava/lang/String;)Z"/>
-		<method name="toBuilder()Landroid/telecom/PhoneAccount$Builder;"/>
-		<field name="CAPABILITY_CALL_PROVIDER"/>
-		<field name="CAPABILITY_CALL_SUBJECT"/>
-		<field name="CAPABILITY_CONNECTION_MANAGER"/>
-		<field name="CAPABILITY_PLACE_EMERGENCY_CALLS"/>
-		<field name="CAPABILITY_RTT" since="26"/>
-		<field name="CAPABILITY_SELF_MANAGED" since="26"/>
-		<field name="CAPABILITY_SIM_SUBSCRIPTION"/>
-		<field name="CAPABILITY_SUPPORTS_VIDEO_CALLING" since="26"/>
-		<field name="CAPABILITY_VIDEO_CALLING"/>
-		<field name="CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE" since="24"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_CALL_SUBJECT_CHARACTER_ENCODING" since="24"/>
-		<field name="EXTRA_CALL_SUBJECT_MAX_LENGTH" since="24"/>
-		<field name="EXTRA_LOG_SELF_MANAGED_CALLS" since="28"/>
-		<field name="EXTRA_SUPPORTS_HANDOVER_FROM" since="28"/>
-		<field name="EXTRA_SUPPORTS_HANDOVER_TO" since="28"/>
-		<field name="NO_HIGHLIGHT_COLOR"/>
-		<field name="NO_RESOURCE_ID"/>
-		<field name="SCHEME_SIP"/>
-		<field name="SCHEME_TEL"/>
-		<field name="SCHEME_VOICEMAIL"/>
-	</class>
-	<class name="android/telecom/PhoneAccount$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/telecom/PhoneAccount;)V"/>
-		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)V"/>
-		<method name="addSupportedUriScheme(Ljava/lang/String;)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="build()Landroid/telecom/PhoneAccount;"/>
-		<method name="setAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="setCapabilities(I)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="setExtras(Landroid/os/Bundle;)Landroid/telecom/PhoneAccount$Builder;" since="24"/>
-		<method name="setHighlightColor(I)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="setShortDescription(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="setSubscriptionAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;"/>
-		<method name="setSupportedUriSchemes(Ljava/util/List;)Landroid/telecom/PhoneAccount$Builder;"/>
-	</class>
-	<class name="android/telecom/PhoneAccountHandle" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/ComponentName;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/UserHandle;)V"/>
-		<method name="getComponentName()Landroid/content/ComponentName;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getUserHandle()Landroid/os/UserHandle;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telecom/RemoteConference" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="disconnect()V"/>
-		<method name="getConferenceableConnections()Ljava/util/List;"/>
-		<method name="getConnectionCapabilities()I"/>
-		<method name="getConnectionProperties()I" since="24"/>
-		<method name="getConnections()Ljava/util/List;"/>
-		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getState()I"/>
-		<method name="hold()V"/>
-		<method name="merge()V"/>
-		<method name="playDtmfTone(C)V"/>
-		<method name="registerCallback(Landroid/telecom/RemoteConference$Callback;)V"/>
-		<method name="registerCallback(Landroid/telecom/RemoteConference$Callback;Landroid/os/Handler;)V"/>
-		<method name="separate(Landroid/telecom/RemoteConnection;)V"/>
-		<method name="setCallAudioState(Landroid/telecom/CallAudioState;)V"/>
-		<method name="stopDtmfTone()V"/>
-		<method name="swap()V"/>
-		<method name="unhold()V"/>
-		<method name="unregisterCallback(Landroid/telecom/RemoteConference$Callback;)V"/>
-	</class>
-	<class name="android/telecom/RemoteConference$Callback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onConferenceableConnectionsChanged(Landroid/telecom/RemoteConference;Ljava/util/List;)V"/>
-		<method name="onConnectionAdded(Landroid/telecom/RemoteConference;Landroid/telecom/RemoteConnection;)V"/>
-		<method name="onConnectionCapabilitiesChanged(Landroid/telecom/RemoteConference;I)V"/>
-		<method name="onConnectionPropertiesChanged(Landroid/telecom/RemoteConference;I)V" since="25"/>
-		<method name="onConnectionRemoved(Landroid/telecom/RemoteConference;Landroid/telecom/RemoteConnection;)V"/>
-		<method name="onDestroyed(Landroid/telecom/RemoteConference;)V"/>
-		<method name="onDisconnected(Landroid/telecom/RemoteConference;Landroid/telecom/DisconnectCause;)V"/>
-		<method name="onExtrasChanged(Landroid/telecom/RemoteConference;Landroid/os/Bundle;)V"/>
-		<method name="onStateChanged(Landroid/telecom/RemoteConference;II)V"/>
-	</class>
-	<class name="android/telecom/RemoteConnection" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/telecom/DisconnectCause;)V" since="29"/>
-		<method name="abort()V"/>
-		<method name="answer()V"/>
-		<method name="disconnect()V"/>
-		<method name="getAddress()Landroid/net/Uri;"/>
-		<method name="getAddressPresentation()I"/>
-		<method name="getCallerDisplayName()Ljava/lang/CharSequence;"/>
-		<method name="getCallerDisplayNamePresentation()I"/>
-		<method name="getConference()Landroid/telecom/RemoteConference;"/>
-		<method name="getConferenceableConnections()Ljava/util/List;"/>
-		<method name="getConnectionCapabilities()I"/>
-		<method name="getConnectionProperties()I" since="25"/>
-		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getState()I"/>
-		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
-		<method name="getVideoProvider()Landroid/telecom/RemoteConnection$VideoProvider;"/>
-		<method name="getVideoState()I"/>
-		<method name="hold()V"/>
-		<method name="isRingbackRequested()Z"/>
-		<method name="isVoipAudioMode()Z"/>
-		<method name="playDtmfTone(C)V"/>
-		<method name="postDialContinue(Z)V"/>
-		<method name="pullExternalCall()V" since="25"/>
-		<method name="registerCallback(Landroid/telecom/RemoteConnection$Callback;)V"/>
-		<method name="registerCallback(Landroid/telecom/RemoteConnection$Callback;Landroid/os/Handler;)V"/>
-		<method name="reject()V"/>
-		<method name="setCallAudioState(Landroid/telecom/CallAudioState;)V"/>
-		<method name="stopDtmfTone()V"/>
-		<method name="unhold()V"/>
-		<method name="unregisterCallback(Landroid/telecom/RemoteConnection$Callback;)V"/>
-	</class>
-	<class name="android/telecom/RemoteConnection$Callback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAddressChanged(Landroid/telecom/RemoteConnection;Landroid/net/Uri;I)V"/>
-		<method name="onCallerDisplayNameChanged(Landroid/telecom/RemoteConnection;Ljava/lang/String;I)V"/>
-		<method name="onConferenceChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConference;)V"/>
-		<method name="onConferenceableConnectionsChanged(Landroid/telecom/RemoteConnection;Ljava/util/List;)V"/>
-		<method name="onConnectionCapabilitiesChanged(Landroid/telecom/RemoteConnection;I)V"/>
-		<method name="onConnectionEvent(Landroid/telecom/RemoteConnection;Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
-		<method name="onConnectionPropertiesChanged(Landroid/telecom/RemoteConnection;I)V" since="25"/>
-		<method name="onDestroyed(Landroid/telecom/RemoteConnection;)V"/>
-		<method name="onDisconnected(Landroid/telecom/RemoteConnection;Landroid/telecom/DisconnectCause;)V"/>
-		<method name="onExtrasChanged(Landroid/telecom/RemoteConnection;Landroid/os/Bundle;)V"/>
-		<method name="onPostDialChar(Landroid/telecom/RemoteConnection;C)V"/>
-		<method name="onPostDialWait(Landroid/telecom/RemoteConnection;Ljava/lang/String;)V"/>
-		<method name="onRingbackRequested(Landroid/telecom/RemoteConnection;Z)V"/>
-		<method name="onStateChanged(Landroid/telecom/RemoteConnection;I)V"/>
-		<method name="onStatusHintsChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/StatusHints;)V"/>
-		<method name="onVideoProviderChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConnection$VideoProvider;)V"/>
-		<method name="onVideoStateChanged(Landroid/telecom/RemoteConnection;I)V"/>
-		<method name="onVoipAudioChanged(Landroid/telecom/RemoteConnection;Z)V"/>
-	</class>
-	<class name="android/telecom/RemoteConnection$VideoProvider" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="registerCallback(Landroid/telecom/RemoteConnection$VideoProvider$Callback;)V"/>
-		<method name="requestCallDataUsage()V"/>
-		<method name="requestCameraCapabilities()V"/>
-		<method name="sendSessionModifyRequest(Landroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
-		<method name="sendSessionModifyResponse(Landroid/telecom/VideoProfile;)V"/>
-		<method name="setCamera(Ljava/lang/String;)V"/>
-		<method name="setDeviceOrientation(I)V"/>
-		<method name="setDisplaySurface(Landroid/view/Surface;)V"/>
-		<method name="setPauseImage(Landroid/net/Uri;)V"/>
-		<method name="setPreviewSurface(Landroid/view/Surface;)V"/>
-		<method name="setZoom(F)V"/>
-		<method name="unregisterCallback(Landroid/telecom/RemoteConnection$VideoProvider$Callback;)V"/>
-	</class>
-	<class name="android/telecom/RemoteConnection$VideoProvider$Callback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCallDataUsageChanged(Landroid/telecom/RemoteConnection$VideoProvider;J)V"/>
-		<method name="onCallSessionEvent(Landroid/telecom/RemoteConnection$VideoProvider;I)V"/>
-		<method name="onCameraCapabilitiesChanged(Landroid/telecom/RemoteConnection$VideoProvider;Landroid/telecom/VideoProfile$CameraCapabilities;)V"/>
-		<method name="onPeerDimensionsChanged(Landroid/telecom/RemoteConnection$VideoProvider;II)V"/>
-		<method name="onSessionModifyRequestReceived(Landroid/telecom/RemoteConnection$VideoProvider;Landroid/telecom/VideoProfile;)V"/>
-		<method name="onSessionModifyResponseReceived(Landroid/telecom/RemoteConnection$VideoProvider;ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
-		<method name="onVideoQualityChanged(Landroid/telecom/RemoteConnection$VideoProvider;I)V"/>
-	</class>
-	<class name="android/telecom/StatusHints" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/graphics/drawable/Icon;Landroid/os/Bundle;)V"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telecom/TelecomManager" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="acceptHandover(Landroid/net/Uri;ILandroid/telecom/PhoneAccountHandle;)V" since="28"/>
-		<method name="acceptRingingCall()V" since="26"/>
-		<method name="acceptRingingCall(I)V" since="26"/>
-		<method name="addNewIncomingCall(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V" since="23"/>
-		<method name="cancelMissedCallsNotification()V"/>
-		<method name="createManageBlockedNumbersIntent()Landroid/content/Intent;" since="24"/>
-		<method name="endCall()Z" since="29"/>
-		<method name="getAdnUriForPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="23"/>
-		<method name="getCallCapablePhoneAccounts()Ljava/util/List;" since="23"/>
-		<method name="getDefaultDialerPackage()Ljava/lang/String;" since="23"/>
-		<method name="getDefaultOutgoingPhoneAccount(Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;" since="23"/>
-		<method name="getLine1Number(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;" since="23"/>
-		<method name="getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;" since="23"/>
-		<method name="getSelfManagedPhoneAccounts()Ljava/util/List;" since="26"/>
-		<method name="getSimCallManager()Landroid/telecom/PhoneAccountHandle;" since="23"/>
-		<method name="getVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;" since="23"/>
-		<method name="handleMmi(Ljava/lang/String;)Z"/>
-		<method name="handleMmi(Ljava/lang/String;Landroid/telecom/PhoneAccountHandle;)Z" since="23"/>
-		<method name="isInCall()Z"/>
-		<method name="isInManagedCall()Z" since="26"/>
-		<method name="isIncomingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z" since="26"/>
-		<method name="isOutgoingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z" since="26"/>
-		<method name="isTtySupported()Z" since="28"/>
-		<method name="isVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Z" since="23"/>
-		<method name="placeCall(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23"/>
-		<method name="registerPhoneAccount(Landroid/telecom/PhoneAccount;)V" since="23"/>
-		<method name="showInCallScreen(Z)V"/>
-		<method name="silenceRinger()V" since="23"/>
-		<method name="unregisterPhoneAccount(Landroid/telecom/PhoneAccountHandle;)V" since="23"/>
-		<field name="ACTION_CHANGE_DEFAULT_DIALER" since="23"/>
-		<field name="ACTION_CHANGE_PHONE_ACCOUNTS" since="23"/>
-		<field name="ACTION_CONFIGURE_PHONE_ACCOUNT" since="23"/>
-		<field name="ACTION_DEFAULT_DIALER_CHANGED" since="23"/>
-		<field name="ACTION_INCOMING_CALL" since="23" deprecated="26"/>
-		<field name="ACTION_PHONE_ACCOUNT_REGISTERED" since="26"/>
-		<field name="ACTION_PHONE_ACCOUNT_UNREGISTERED" since="26"/>
-		<field name="ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS" since="23"/>
-		<field name="ACTION_SHOW_CALL_SETTINGS"/>
-		<field name="ACTION_SHOW_MISSED_CALLS_NOTIFICATION" since="24"/>
-		<field name="ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS" since="23"/>
-		<field name="DTMF_CHARACTER_PAUSE"/>
-		<field name="DTMF_CHARACTER_WAIT"/>
-		<field name="EXTRA_CALL_BACK_NUMBER" since="23"/>
-		<field name="EXTRA_CALL_DISCONNECT_CAUSE"/>
-		<field name="EXTRA_CALL_DISCONNECT_MESSAGE"/>
-		<field name="EXTRA_CALL_SUBJECT" since="23"/>
-		<field name="EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME" since="23"/>
-		<field name="EXTRA_INCOMING_CALL_ADDRESS" since="23"/>
-		<field name="EXTRA_INCOMING_CALL_EXTRAS" since="23"/>
-		<field name="EXTRA_INCOMING_VIDEO_STATE" since="26"/>
-		<field name="EXTRA_NOTIFICATION_COUNT" since="24"/>
-		<field name="EXTRA_NOTIFICATION_PHONE_NUMBER" since="24"/>
-		<field name="EXTRA_OUTGOING_CALL_EXTRAS" since="23"/>
-		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="23"/>
-		<field name="EXTRA_START_CALL_WITH_RTT" since="26"/>
-		<field name="EXTRA_START_CALL_WITH_SPEAKERPHONE"/>
-		<field name="EXTRA_START_CALL_WITH_VIDEO_STATE" since="23"/>
-		<field name="GATEWAY_ORIGINAL_ADDRESS"/>
-		<field name="GATEWAY_PROVIDER_PACKAGE"/>
-		<field name="METADATA_INCLUDE_EXTERNAL_CALLS" since="25"/>
-		<field name="METADATA_INCLUDE_SELF_MANAGED_CALLS" since="26"/>
-		<field name="METADATA_IN_CALL_SERVICE_RINGING" since="24"/>
-		<field name="METADATA_IN_CALL_SERVICE_UI" since="23"/>
-		<field name="PRESENTATION_ALLOWED"/>
-		<field name="PRESENTATION_PAYPHONE"/>
-		<field name="PRESENTATION_RESTRICTED"/>
-		<field name="PRESENTATION_UNKNOWN"/>
-	</class>
-	<class name="android/telecom/VideoProfile" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getQuality()I"/>
-		<method name="getVideoState()I"/>
-		<method name="isAudioOnly(I)Z"/>
-		<method name="isBidirectional(I)Z"/>
-		<method name="isPaused(I)Z"/>
-		<method name="isReceptionEnabled(I)Z"/>
-		<method name="isTransmissionEnabled(I)Z"/>
-		<method name="isVideo(I)Z"/>
-		<method name="videoStateToString(I)Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-		<field name="QUALITY_DEFAULT"/>
-		<field name="QUALITY_HIGH"/>
-		<field name="QUALITY_LOW"/>
-		<field name="QUALITY_MEDIUM"/>
-		<field name="STATE_AUDIO_ONLY"/>
-		<field name="STATE_BIDIRECTIONAL"/>
-		<field name="STATE_PAUSED"/>
-		<field name="STATE_RX_ENABLED"/>
-		<field name="STATE_TX_ENABLED"/>
-	</class>
-	<class name="android/telecom/VideoProfile$CameraCapabilities" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/AccessNetworkConstants" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/telephony/AccessNetworkConstants$AccessNetworkType" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CDMA2000"/>
-		<field name="EUTRAN"/>
-		<field name="GERAN"/>
-		<field name="IWLAN"/>
-		<field name="UNKNOWN"/>
-		<field name="UTRAN"/>
-	</class>
-	<class name="android/telephony/AccessNetworkConstants$EutranBand" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BAND_1"/>
-		<field name="BAND_10"/>
-		<field name="BAND_11"/>
-		<field name="BAND_12"/>
-		<field name="BAND_13"/>
-		<field name="BAND_14"/>
-		<field name="BAND_17"/>
-		<field name="BAND_18"/>
-		<field name="BAND_19"/>
-		<field name="BAND_2"/>
-		<field name="BAND_20"/>
-		<field name="BAND_21"/>
-		<field name="BAND_22"/>
-		<field name="BAND_23"/>
-		<field name="BAND_24"/>
-		<field name="BAND_25"/>
-		<field name="BAND_26"/>
-		<field name="BAND_27"/>
-		<field name="BAND_28"/>
-		<field name="BAND_3"/>
-		<field name="BAND_30"/>
-		<field name="BAND_31"/>
-		<field name="BAND_33"/>
-		<field name="BAND_34"/>
-		<field name="BAND_35"/>
-		<field name="BAND_36"/>
-		<field name="BAND_37"/>
-		<field name="BAND_38"/>
-		<field name="BAND_39"/>
-		<field name="BAND_4"/>
-		<field name="BAND_40"/>
-		<field name="BAND_41"/>
-		<field name="BAND_42"/>
-		<field name="BAND_43"/>
-		<field name="BAND_44"/>
-		<field name="BAND_45"/>
-		<field name="BAND_46"/>
-		<field name="BAND_47"/>
-		<field name="BAND_48"/>
-		<field name="BAND_5"/>
-		<field name="BAND_6"/>
-		<field name="BAND_65"/>
-		<field name="BAND_66"/>
-		<field name="BAND_68"/>
-		<field name="BAND_7"/>
-		<field name="BAND_70"/>
-		<field name="BAND_8"/>
-		<field name="BAND_9"/>
-	</class>
-	<class name="android/telephony/AccessNetworkConstants$GeranBand" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BAND_450"/>
-		<field name="BAND_480"/>
-		<field name="BAND_710"/>
-		<field name="BAND_750"/>
-		<field name="BAND_850"/>
-		<field name="BAND_DCS1800"/>
-		<field name="BAND_E900"/>
-		<field name="BAND_ER900"/>
-		<field name="BAND_P900"/>
-		<field name="BAND_PCS1900"/>
-		<field name="BAND_R900"/>
-		<field name="BAND_T380"/>
-		<field name="BAND_T410"/>
-		<field name="BAND_T810"/>
-	</class>
-	<class name="android/telephony/AccessNetworkConstants$UtranBand" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BAND_1"/>
-		<field name="BAND_10"/>
-		<field name="BAND_11"/>
-		<field name="BAND_12"/>
-		<field name="BAND_13"/>
-		<field name="BAND_14"/>
-		<field name="BAND_19"/>
-		<field name="BAND_2"/>
-		<field name="BAND_20"/>
-		<field name="BAND_21"/>
-		<field name="BAND_22"/>
-		<field name="BAND_25"/>
-		<field name="BAND_26"/>
-		<field name="BAND_3"/>
-		<field name="BAND_4"/>
-		<field name="BAND_5"/>
-		<field name="BAND_6"/>
-		<field name="BAND_7"/>
-		<field name="BAND_8"/>
-		<field name="BAND_9"/>
-	</class>
-	<class name="android/telephony/CarrierConfigManager" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="getConfig()Landroid/os/PersistableBundle;"/>
-		<method name="getConfigForSubId(I)Landroid/os/PersistableBundle;"/>
-		<method name="isConfigForIdentifiedCarrier(Landroid/os/PersistableBundle;)Z" since="28"/>
-		<method name="notifyConfigChangedForSubId(I)V"/>
-		<field name="ACTION_CARRIER_CONFIG_CHANGED"/>
-		<field name="DATA_CYCLE_THRESHOLD_DISABLED" since="26"/>
-		<field name="EXTRA_SLOT_INDEX" since="28"/>
-		<field name="EXTRA_SUBSCRIPTION_INDEX" since="28"/>
-		<field name="KEY_ADDITIONAL_CALL_SETTING_BOOL"/>
-		<field name="KEY_ALLOW_ADDING_APNS_BOOL" since="24"/>
-		<field name="KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL" since="25"/>
-		<field name="KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL"/>
-		<field name="KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL" since="24"/>
-		<field name="KEY_ALLOW_LOCAL_DTMF_TONES_BOOL"/>
-		<field name="KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL" since="25"/>
-		<field name="KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL" since="24"/>
-		<field name="KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL" since="24"/>
-		<field name="KEY_APN_EXPAND_BOOL"/>
-		<field name="KEY_AUTO_RETRY_ENABLED_BOOL"/>
-		<field name="KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY" since="26"/>
-		<field name="KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL"/>
-		<field name="KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS" since="26"/>
-		<field name="KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL" since="24"/>
-		<field name="KEY_CARRIER_IMS_GBA_REQUIRED_BOOL" since="24"/>
-		<field name="KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL" since="24"/>
-		<field name="KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING" since="24"/>
-		<field name="KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING" since="24"/>
-		<field name="KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING" since="24"/>
-		<field name="KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT" since="24"/>
-		<field name="KEY_CARRIER_NAME_OVERRIDE_BOOL" since="28"/>
-		<field name="KEY_CARRIER_NAME_STRING" since="28"/>
-		<field name="KEY_CARRIER_SETTINGS_ENABLE_BOOL"/>
-		<field name="KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL" since="24"/>
-		<field name="KEY_CARRIER_VOLTE_AVAILABLE_BOOL"/>
-		<field name="KEY_CARRIER_VOLTE_PROVISIONED_BOOL" since="26"/>
-		<field name="KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL"/>
-		<field name="KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL"/>
-		<field name="KEY_CARRIER_VT_AVAILABLE_BOOL"/>
-		<field name="KEY_CARRIER_VVM_PACKAGE_NAME_STRING" deprecated="26"/>
-		<field name="KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY" since="26"/>
-		<field name="KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL"/>
-		<field name="KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL" since="24"/>
-		<field name="KEY_CDMA_3WAYCALL_FLASH_DELAY_INT" since="26"/>
-		<field name="KEY_CDMA_DTMF_TONE_DELAY_INT" since="24"/>
-		<field name="KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY"/>
-		<field name="KEY_CDMA_ROAMING_MODE_INT" since="28"/>
-		<field name="KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY"/>
-		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_BOOL" since="24"/>
-		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING" since="24"/>
-		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING" since="24"/>
-		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING" since="24"/>
-		<field name="KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING" since="26"/>
-		<field name="KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING" since="28"/>
-		<field name="KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL" since="28"/>
-		<field name="KEY_CSP_ENABLED_BOOL"/>
-		<field name="KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG" since="26"/>
-		<field name="KEY_DATA_WARNING_THRESHOLD_BYTES_LONG" since="26"/>
-		<field name="KEY_DEFAULT_SIM_CALL_MANAGER_STRING"/>
-		<field name="KEY_DEFAULT_VM_NUMBER_STRING" since="26"/>
-		<field name="KEY_DIAL_STRING_REPLACE_STRING_ARRAY" since="26"/>
-		<field name="KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL"/>
-		<field name="KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL" since="27"/>
-		<field name="KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL" since="25"/>
-		<field name="KEY_DTMF_TYPE_ENABLED_BOOL"/>
-		<field name="KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT" since="24"/>
-		<field name="KEY_EDITABLE_ENHANCED_4G_LTE_BOOL" since="24"/>
-		<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_BOOL" since="26"/>
-		<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL" since="28"/>
-		<field name="KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL"/>
-		<field name="KEY_FORCE_HOME_NETWORK_BOOL"/>
-		<field name="KEY_GSM_DTMF_TONE_DELAY_INT" since="24"/>
-		<field name="KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY"/>
-		<field name="KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY"/>
-		<field name="KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL"/>
-		<field name="KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL"/>
-		<field name="KEY_HIDE_ENHANCED_4G_LTE_BOOL" since="26"/>
-		<field name="KEY_HIDE_IMS_APN_BOOL" since="24"/>
-		<field name="KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL" since="24"/>
-		<field name="KEY_HIDE_SIM_LOCK_SETTINGS_BOOL"/>
-		<field name="KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL"/>
-		<field name="KEY_IMS_CONFERENCE_SIZE_LIMIT_INT" since="26"/>
-		<field name="KEY_IMS_DTMF_TONE_DELAY_INT" since="24"/>
-		<field name="KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL" since="26"/>
-		<field name="KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL" since="26"/>
-		<field name="KEY_MMS_ALIAS_ENABLED_BOOL"/>
-		<field name="KEY_MMS_ALIAS_MAX_CHARS_INT"/>
-		<field name="KEY_MMS_ALIAS_MIN_CHARS_INT"/>
-		<field name="KEY_MMS_ALLOW_ATTACH_AUDIO_BOOL"/>
-		<field name="KEY_MMS_APPEND_TRANSACTION_ID_BOOL"/>
-		<field name="KEY_MMS_EMAIL_GATEWAY_NUMBER_STRING"/>
-		<field name="KEY_MMS_GROUP_MMS_ENABLED_BOOL"/>
-		<field name="KEY_MMS_HTTP_PARAMS_STRING"/>
-		<field name="KEY_MMS_HTTP_SOCKET_TIMEOUT_INT"/>
-		<field name="KEY_MMS_MAX_IMAGE_HEIGHT_INT"/>
-		<field name="KEY_MMS_MAX_IMAGE_WIDTH_INT"/>
-		<field name="KEY_MMS_MAX_MESSAGE_SIZE_INT"/>
-		<field name="KEY_MMS_MESSAGE_TEXT_MAX_SIZE_INT"/>
-		<field name="KEY_MMS_MMS_DELIVERY_REPORT_ENABLED_BOOL"/>
-		<field name="KEY_MMS_MMS_ENABLED_BOOL"/>
-		<field name="KEY_MMS_MMS_READ_REPORT_ENABLED_BOOL"/>
-		<field name="KEY_MMS_MULTIPART_SMS_ENABLED_BOOL"/>
-		<field name="KEY_MMS_NAI_SUFFIX_STRING"/>
-		<field name="KEY_MMS_NOTIFY_WAP_MMSC_ENABLED_BOOL"/>
-		<field name="KEY_MMS_RECIPIENT_LIMIT_INT"/>
-		<field name="KEY_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_BOOL"/>
-		<field name="KEY_MMS_SHOW_CELL_BROADCAST_APP_LINKS_BOOL"/>
-		<field name="KEY_MMS_SMS_DELIVERY_REPORT_ENABLED_BOOL"/>
-		<field name="KEY_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_INT"/>
-		<field name="KEY_MMS_SMS_TO_MMS_TEXT_THRESHOLD_INT"/>
-		<field name="KEY_MMS_SUBJECT_MAX_LENGTH_INT"/>
-		<field name="KEY_MMS_SUPPORT_HTTP_CHARSET_HEADER_BOOL"/>
-		<field name="KEY_MMS_SUPPORT_MMS_CONTENT_DISPOSITION_BOOL"/>
-		<field name="KEY_MMS_UA_PROF_TAG_NAME_STRING"/>
-		<field name="KEY_MMS_UA_PROF_URL_STRING"/>
-		<field name="KEY_MMS_USER_AGENT_STRING"/>
-		<field name="KEY_MONTHLY_DATA_CYCLE_DAY_INT" since="26"/>
-		<field name="KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY" since="26"/>
-		<field name="KEY_OPERATOR_SELECTION_EXPAND_BOOL"/>
-		<field name="KEY_PREFER_2G_BOOL"/>
-		<field name="KEY_RCS_CONFIG_SERVER_URL_STRING" since="26"/>
-		<field name="KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL" since="24"/>
-		<field name="KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL" since="26"/>
-		<field name="KEY_RTT_SUPPORTED_BOOL" since="28"/>
-		<field name="KEY_SHOW_APN_SETTING_CDMA_BOOL"/>
-		<field name="KEY_SHOW_CDMA_CHOICES_BOOL"/>
-		<field name="KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL" since="24"/>
-		<field name="KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL"/>
-		<field name="KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL" since="28"/>
-		<field name="KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL" since="26"/>
-		<field name="KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL"/>
-		<field name="KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL" since="26"/>
-		<field name="KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL" since="26"/>
-		<field name="KEY_SUPPORT_CONFERENCE_CALL_BOOL" since="24"/>
-		<field name="KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL" since="29"/>
-		<field name="KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL"/>
-		<field name="KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL"/>
-		<field name="KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL" since="25"/>
-		<field name="KEY_USE_HFA_FOR_PROVISIONING_BOOL"/>
-		<field name="KEY_USE_OTASP_FOR_PROVISIONING_BOOL"/>
-		<field name="KEY_USE_RCS_PRESENCE_BOOL" since="24"/>
-		<field name="KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL"/>
-		<field name="KEY_VOICE_PRIVACY_DISABLE_UI_BOOL"/>
-		<field name="KEY_VOLTE_REPLACEMENT_RAT_INT"/>
-		<field name="KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL" since="24"/>
-		<field name="KEY_VVM_CLIENT_PREFIX_STRING" since="26"/>
-		<field name="KEY_VVM_DESTINATION_NUMBER_STRING"/>
-		<field name="KEY_VVM_DISABLED_CAPABILITIES_STRING_ARRAY" since="26"/>
-		<field name="KEY_VVM_LEGACY_MODE_ENABLED_BOOL" since="26"/>
-		<field name="KEY_VVM_PORT_NUMBER_INT"/>
-		<field name="KEY_VVM_PREFETCH_BOOL" since="24"/>
-		<field name="KEY_VVM_SSL_ENABLED_BOOL" since="26"/>
-		<field name="KEY_VVM_TYPE_STRING"/>
-		<field name="KEY_WORLD_PHONE_BOOL"/>
-	</class>
-	<class name="android/telephony/CellIdentity" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;ILandroid/os/Parcel;)V" since="29"/>
-		<method name="getOperatorAlphaLong()Ljava/lang/CharSequence;"/>
-		<method name="getOperatorAlphaShort()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellIdentityCdma" since="17">
-		<extends name="android/telephony/CellIdentity" since="28"/>
-		<extends name="java/lang/Object" removed="28"/>
-		<implements name="android/os/Parcelable" removed="28"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBasestationId()I"/>
-		<method name="getLatitude()I"/>
-		<method name="getLongitude()I"/>
-		<method name="getNetworkId()I"/>
-		<method name="getSystemId()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellIdentityGsm" since="17">
-		<extends name="android/telephony/CellIdentity" since="28"/>
-		<extends name="java/lang/Object" removed="28"/>
-		<implements name="android/os/Parcelable" removed="28"/>
-		<method name="&lt;init>()V"/>
-		<method name="getArfcn()I" since="24"/>
-		<method name="getBsic()I" since="24"/>
-		<method name="getCid()I"/>
-		<method name="getLac()I"/>
-		<method name="getMcc()I" deprecated="28"/>
-		<method name="getMccString()Ljava/lang/String;" since="28"/>
-		<method name="getMnc()I" deprecated="28"/>
-		<method name="getMncString()Ljava/lang/String;" since="28"/>
-		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28"/>
-		<method name="getPsc()I" deprecated="18"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellIdentityLte" since="17">
-		<extends name="android/telephony/CellIdentity" since="28"/>
-		<extends name="java/lang/Object" removed="28"/>
-		<implements name="android/os/Parcelable" removed="28"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBandwidth()I" since="28"/>
-		<method name="getCi()I"/>
-		<method name="getEarfcn()I" since="24"/>
-		<method name="getMcc()I" deprecated="28"/>
-		<method name="getMccString()Ljava/lang/String;" since="28"/>
-		<method name="getMnc()I" deprecated="28"/>
-		<method name="getMncString()Ljava/lang/String;" since="28"/>
-		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28"/>
-		<method name="getPci()I"/>
-		<method name="getTac()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellIdentityTdscdma" since="28">
-		<extends name="android/telephony/CellIdentity"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCid()I"/>
-		<method name="getCpid()I"/>
-		<method name="getLac()I"/>
-		<method name="getMccString()Ljava/lang/String;"/>
-		<method name="getMncString()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellIdentityWcdma" since="18">
-		<extends name="android/telephony/CellIdentity" since="28"/>
-		<extends name="java/lang/Object" removed="28"/>
-		<implements name="android/os/Parcelable" removed="28"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCid()I"/>
-		<method name="getLac()I"/>
-		<method name="getMcc()I" deprecated="28"/>
-		<method name="getMccString()Ljava/lang/String;" since="28"/>
-		<method name="getMnc()I" deprecated="28"/>
-		<method name="getMncString()Ljava/lang/String;" since="28"/>
-		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28"/>
-		<method name="getPsc()I"/>
-		<method name="getUarfcn()I" since="24"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellInfo" since="17">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCellConnectionStatus()I" since="28"/>
-		<method name="getTimeStamp()J"/>
-		<method name="isRegistered()Z"/>
-		<field name="CONNECTION_NONE" since="28"/>
-		<field name="CONNECTION_PRIMARY_SERVING" since="28"/>
-		<field name="CONNECTION_SECONDARY_SERVING" since="28"/>
-		<field name="CONNECTION_UNKNOWN" since="28"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellInfoCdma" since="17">
-		<extends name="android/telephony/CellInfo"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCellIdentity()Landroid/telephony/CellIdentityCdma;"/>
-		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthCdma;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellInfoGsm" since="17">
-		<extends name="android/telephony/CellInfo"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCellIdentity()Landroid/telephony/CellIdentityGsm;"/>
-		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthGsm;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellInfoLte" since="17">
-		<extends name="android/telephony/CellInfo"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCellIdentity()Landroid/telephony/CellIdentityLte;"/>
-		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthLte;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellInfoWcdma" since="18">
-		<extends name="android/telephony/CellInfo"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCellIdentity()Landroid/telephony/CellIdentityWcdma;"/>
-		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthWcdma;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellLocation" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEmpty()Landroid/telephony/CellLocation;"/>
-		<method name="requestLocationUpdate()V"/>
-	</class>
-	<class name="android/telephony/CellSignalStrength" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAsuLevel()I"/>
-		<method name="getDbm()I"/>
-		<method name="getLevel()I"/>
-		<field name="SIGNAL_STRENGTH_GOOD" since="23"/>
-		<field name="SIGNAL_STRENGTH_GREAT" since="23"/>
-		<field name="SIGNAL_STRENGTH_MODERATE" since="23"/>
-		<field name="SIGNAL_STRENGTH_NONE_OR_UNKNOWN" since="23"/>
-		<field name="SIGNAL_STRENGTH_POOR" since="23"/>
-	</class>
-	<class name="android/telephony/CellSignalStrengthCdma" since="17">
-		<extends name="android/telephony/CellSignalStrength"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCdmaDbm()I"/>
-		<method name="getCdmaEcio()I"/>
-		<method name="getCdmaLevel()I"/>
-		<method name="getEvdoDbm()I"/>
-		<method name="getEvdoEcio()I"/>
-		<method name="getEvdoLevel()I"/>
-		<method name="getEvdoSnr()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellSignalStrengthGsm" since="17">
-		<extends name="android/telephony/CellSignalStrength"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTimingAdvance()I" since="26"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellSignalStrengthLte" since="17">
-		<extends name="android/telephony/CellSignalStrength"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCqi()I" since="26"/>
-		<method name="getRsrp()I" since="26"/>
-		<method name="getRsrq()I" since="26"/>
-		<method name="getRssnr()I" since="26"/>
-		<method name="getTimingAdvance()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/CellSignalStrengthWcdma" since="18">
-		<extends name="android/telephony/CellSignalStrength"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/IccOpenLogicalChannelResponse" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getChannel()I"/>
-		<method name="getSelectResponse()[B"/>
-		<method name="getStatus()I"/>
-		<field name="CREATOR"/>
-		<field name="INVALID_CHANNEL"/>
-		<field name="STATUS_MISSING_RESOURCE"/>
-		<field name="STATUS_NO_ERROR"/>
-		<field name="STATUS_NO_SUCH_ELEMENT"/>
-		<field name="STATUS_UNKNOWN_ERROR"/>
-	</class>
-	<class name="android/telephony/MbmsDownloadSession" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsDownloadSessionCallback;)V" since="29"/>
-		<method name="addProgressListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadProgressListener;)V"/>
-		<method name="addStatusListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadStatusListener;)V"/>
-		<method name="cancelDownload(Landroid/telephony/mbms/DownloadRequest;)V"/>
-		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;"/>
-		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;"/>
-		<method name="download(Landroid/telephony/mbms/DownloadRequest;)V"/>
-		<method name="getTempFileRootDirectory()Ljava/io/File;"/>
-		<method name="listPendingDownloads()Ljava/util/List;"/>
-		<method name="removeProgressListener(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/DownloadProgressListener;)V"/>
-		<method name="removeStatusListener(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/DownloadStatusListener;)V"/>
-		<method name="requestDownloadState(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;)V"/>
-		<method name="requestUpdateFileServices(Ljava/util/List;)V"/>
-		<method name="resetDownloadKnowledge(Landroid/telephony/mbms/DownloadRequest;)V"/>
-		<method name="setTempFileRootDirectory(Ljava/io/File;)V"/>
-		<field name="DEFAULT_TOP_LEVEL_TEMP_DIRECTORY"/>
-		<field name="EXTRA_MBMS_COMPLETED_FILE_URI"/>
-		<field name="EXTRA_MBMS_DOWNLOAD_REQUEST"/>
-		<field name="EXTRA_MBMS_DOWNLOAD_RESULT"/>
-		<field name="EXTRA_MBMS_FILE_INFO"/>
-		<field name="RESULT_CANCELLED"/>
-		<field name="RESULT_DOWNLOAD_FAILURE"/>
-		<field name="RESULT_EXPIRED"/>
-		<field name="RESULT_FILE_ROOT_UNREACHABLE"/>
-		<field name="RESULT_IO_ERROR"/>
-		<field name="RESULT_OUT_OF_STORAGE"/>
-		<field name="RESULT_SERVICE_ID_NOT_DEFINED"/>
-		<field name="RESULT_SUCCESSFUL"/>
-		<field name="STATUS_ACTIVELY_DOWNLOADING"/>
-		<field name="STATUS_PENDING_DOWNLOAD"/>
-		<field name="STATUS_PENDING_DOWNLOAD_WINDOW"/>
-		<field name="STATUS_PENDING_REPAIR"/>
-		<field name="STATUS_UNKNOWN"/>
-	</class>
-	<class name="android/telephony/MbmsStreamingSession" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsStreamingSessionCallback;)V" since="29"/>
-		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;"/>
-		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;"/>
-		<method name="requestUpdateStreamingServices(Ljava/util/List;)V"/>
-		<method name="startStreaming(Landroid/telephony/mbms/StreamingServiceInfo;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/StreamingServiceCallback;)Landroid/telephony/mbms/StreamingService;"/>
-	</class>
-	<class name="android/telephony/NeighboringCellInfo" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<method name="&lt;init>(II)V" deprecated="16"/>
-		<method name="&lt;init>(ILjava/lang/String;I)V" since="7"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="getCid()I"/>
-		<method name="getLac()I" since="5"/>
-		<method name="getNetworkType()I" since="5"/>
-		<method name="getPsc()I" since="5"/>
-		<method name="getRssi()I"/>
-		<method name="setCid(I)V" deprecated="16"/>
-		<method name="setRssi(I)V" deprecated="16"/>
-		<field name="CREATOR"/>
-		<field name="UNKNOWN_CID"/>
-		<field name="UNKNOWN_RSSI"/>
-	</class>
-	<class name="android/telephony/NetworkScan" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(II)V" since="29"/>
-		<method name="stopScan()V"/>
-		<field name="ERROR_INTERRUPTED"/>
-		<field name="ERROR_INVALID_SCAN"/>
-		<field name="ERROR_INVALID_SCANID"/>
-		<field name="ERROR_MODEM_ERROR"/>
-		<field name="ERROR_MODEM_UNAVAILABLE"/>
-		<field name="ERROR_RADIO_INTERFACE_ERROR"/>
-		<field name="ERROR_UNSUPPORTED"/>
-		<field name="SUCCESS"/>
-	</class>
-	<class name="android/telephony/NetworkScanRequest" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(I[Landroid/telephony/RadioAccessSpecifier;IIZILjava/util/ArrayList;)V"/>
-		<method name="getIncrementalResults()Z"/>
-		<method name="getIncrementalResultsPeriodicity()I"/>
-		<method name="getMaxSearchTime()I"/>
-		<method name="getPlmns()Ljava/util/ArrayList;"/>
-		<method name="getScanType()I"/>
-		<method name="getSearchPeriodicity()I"/>
-		<method name="getSpecifiers()[Landroid/telephony/RadioAccessSpecifier;"/>
-		<field name="CREATOR"/>
-		<field name="SCAN_TYPE_ONE_SHOT"/>
-		<field name="SCAN_TYPE_PERIODIC"/>
-	</class>
-	<class name="android/telephony/PhoneNumberFormattingTextWatcher" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/TextWatcher"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="21"/>
-	</class>
-	<class name="android/telephony/PhoneNumberUtils" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addTtsSpan(Landroid/text/Spannable;II)V" since="23"/>
-		<method name="calledPartyBCDFragmentToString([BII)Ljava/lang/String;" deprecated="28"/>
-		<method name="calledPartyBCDFragmentToString([BIII)Ljava/lang/String;" since="28"/>
-		<method name="calledPartyBCDToString([BII)Ljava/lang/String;" deprecated="28"/>
-		<method name="calledPartyBCDToString([BIII)Ljava/lang/String;" since="28"/>
-		<method name="compare(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Z" since="5"/>
-		<method name="compare(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="convertKeypadLettersToDigits(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="createTtsSpan(Ljava/lang/String;)Landroid/text/style/TtsSpan;" since="23"/>
-		<method name="createTtsSpannable(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="23"/>
-		<method name="extractNetworkPortion(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="extractPostDialPortion(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="formatJapaneseNumber(Landroid/text/Editable;)V" since="3" deprecated="21"/>
-		<method name="formatNanpNumber(Landroid/text/Editable;)V" deprecated="21"/>
-		<method name="formatNumber(Landroid/text/Editable;I)V" deprecated="21"/>
-		<method name="formatNumber(Ljava/lang/String;)Ljava/lang/String;" deprecated="21"/>
-		<method name="formatNumber(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="formatNumber(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="formatNumberToE164(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="formatNumberToRFC3966(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="23"/>
-		<method name="getFormatTypeForLocale(Ljava/util/Locale;)I" deprecated="21"/>
-		<method name="getNumberFromIntent(Landroid/content/Intent;Landroid/content/Context;)Ljava/lang/String;"/>
-		<method name="getStrippedReversed(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="is12Key(C)Z"/>
-		<method name="isDialable(C)Z"/>
-		<method name="isEmergencyNumber(Ljava/lang/String;)Z"/>
-		<method name="isGlobalPhoneNumber(Ljava/lang/String;)Z"/>
-		<method name="isISODigit(C)Z"/>
-		<method name="isLocalEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Z" since="21"/>
-		<method name="isNonSeparator(C)Z"/>
-		<method name="isReallyDialable(C)Z"/>
-		<method name="isStartsPostDial(C)Z"/>
-		<method name="isVoiceMailNumber(Ljava/lang/String;)Z" since="21"/>
-		<method name="isWellFormedSmsAddress(Ljava/lang/String;)Z"/>
-		<method name="networkPortionToCalledPartyBCD(Ljava/lang/String;)[B"/>
-		<method name="networkPortionToCalledPartyBCDWithLength(Ljava/lang/String;)[B"/>
-		<method name="normalizeNumber(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="numberToCalledPartyBCD(Ljava/lang/String;)[B" deprecated="28"/>
-		<method name="numberToCalledPartyBCD(Ljava/lang/String;I)[B" since="28"/>
-		<method name="replaceUnicodeDigits(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="stringFromStringAndTOA(Ljava/lang/String;I)Ljava/lang/String;"/>
-		<method name="stripSeparators(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toCallerIDMinMatch(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toaFromString(Ljava/lang/String;)I"/>
-		<field name="BCD_EXTENDED_TYPE_CALLED_PARTY" since="28"/>
-		<field name="BCD_EXTENDED_TYPE_EF_ADN" since="28"/>
-		<field name="FORMAT_JAPAN" since="3"/>
-		<field name="FORMAT_NANP"/>
-		<field name="FORMAT_UNKNOWN"/>
-		<field name="PAUSE"/>
-		<field name="TOA_International"/>
-		<field name="TOA_Unknown"/>
-		<field name="WAIT"/>
-		<field name="WILD"/>
-	</class>
-	<class name="android/telephony/PhoneStateListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCallForwardingIndicatorChanged(Z)V"/>
-		<method name="onCallStateChanged(ILjava/lang/String;)V"/>
-		<method name="onCellInfoChanged(Ljava/util/List;)V" since="17"/>
-		<method name="onCellLocationChanged(Landroid/telephony/CellLocation;)V"/>
-		<method name="onDataActivity(I)V"/>
-		<method name="onDataConnectionStateChanged(I)V"/>
-		<method name="onDataConnectionStateChanged(II)V" since="7"/>
-		<method name="onMessageWaitingIndicatorChanged(Z)V"/>
-		<method name="onServiceStateChanged(Landroid/telephony/ServiceState;)V"/>
-		<method name="onSignalStrengthChanged(I)V" deprecated="16"/>
-		<method name="onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V" since="7"/>
-		<method name="onUserMobileDataStateChanged(Z)V" since="28"/>
-		<field name="LISTEN_CALL_FORWARDING_INDICATOR"/>
-		<field name="LISTEN_CALL_STATE"/>
-		<field name="LISTEN_CELL_INFO" since="17"/>
-		<field name="LISTEN_CELL_LOCATION"/>
-		<field name="LISTEN_DATA_ACTIVITY"/>
-		<field name="LISTEN_DATA_CONNECTION_STATE"/>
-		<field name="LISTEN_MESSAGE_WAITING_INDICATOR"/>
-		<field name="LISTEN_NONE"/>
-		<field name="LISTEN_SERVICE_STATE"/>
-		<field name="LISTEN_SIGNAL_STRENGTH" deprecated="16"/>
-		<field name="LISTEN_SIGNAL_STRENGTHS" since="7"/>
-		<field name="LISTEN_USER_MOBILE_DATA_STATE" since="28"/>
-	</class>
-	<class name="android/telephony/RadioAccessSpecifier" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(I[I[I)V"/>
-		<method name="getBands()[I"/>
-		<method name="getChannels()[I"/>
-		<method name="getRadioAccessNetwork()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/ServiceState" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Landroid/telephony/ServiceState;)V"/>
-		<method name="copyFrom(Landroid/telephony/ServiceState;)V"/>
-		<method name="getCdmaNetworkId()I" since="28"/>
-		<method name="getCdmaSystemId()I" since="28"/>
-		<method name="getCellBandwidths()[I" since="28"/>
-		<method name="getChannelNumber()I" since="28"/>
-		<method name="getDuplexMode()I" since="28"/>
-		<method name="getIsManualSelection()Z"/>
-		<method name="getOperatorAlphaLong()Ljava/lang/String;"/>
-		<method name="getOperatorAlphaShort()Ljava/lang/String;"/>
-		<method name="getOperatorNumeric()Ljava/lang/String;"/>
-		<method name="getRoaming()Z"/>
-		<method name="getState()I"/>
-		<method name="setIsManualSelection(Z)V"/>
-		<method name="setOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setRoaming(Z)V"/>
-		<method name="setState(I)V"/>
-		<method name="setStateOff()V"/>
-		<method name="setStateOutOfService()V"/>
-		<field name="CREATOR"/>
-		<field name="DUPLEX_MODE_FDD" since="28"/>
-		<field name="DUPLEX_MODE_TDD" since="28"/>
-		<field name="DUPLEX_MODE_UNKNOWN" since="28"/>
-		<field name="STATE_EMERGENCY_ONLY"/>
-		<field name="STATE_IN_SERVICE"/>
-		<field name="STATE_OUT_OF_SERVICE"/>
-		<field name="STATE_POWER_OFF"/>
-		<field name="UNKNOWN_ID" since="28"/>
-	</class>
-	<class name="android/telephony/SignalStrength" since="7">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCdmaDbm()I"/>
-		<method name="getCdmaEcio()I"/>
-		<method name="getEvdoDbm()I"/>
-		<method name="getEvdoEcio()I"/>
-		<method name="getEvdoSnr()I"/>
-		<method name="getGsmBitErrorRate()I"/>
-		<method name="getGsmSignalStrength()I"/>
-		<method name="getLevel()I" since="23"/>
-		<method name="isGsm()Z"/>
-	</class>
-	<class name="android/telephony/SmsManager" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="createAppSpecificSmsToken(Landroid/app/PendingIntent;)Ljava/lang/String;" since="26"/>
-		<method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;"/>
-		<method name="downloadMultimediaMessage(Landroid/content/Context;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;)V" since="21"/>
-		<method name="getCarrierConfigValues()Landroid/os/Bundle;" since="21"/>
-		<method name="getDefault()Landroid/telephony/SmsManager;"/>
-		<method name="getDefaultSmsSubscriptionId()I" since="22"/>
-		<method name="getSmsManagerForSubscriptionId(I)Landroid/telephony/SmsManager;" since="22"/>
-		<method name="getSubscriptionId()I" since="22"/>
-		<method name="injectSmsPdu([BLjava/lang/String;Landroid/app/PendingIntent;)V" since="22"/>
-		<method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V"/>
-		<method name="sendMultimediaMessage(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;)V" since="21"/>
-		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V"/>
-		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V"/>
-		<method name="sendTextMessageWithoutPersisting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" since="28"/>
-		<field name="EXTRA_MMS_DATA" since="21"/>
-		<field name="EXTRA_MMS_HTTP_STATUS" since="22"/>
-		<field name="MMS_CONFIG_ALIAS_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_ALIAS_MAX_CHARS" since="21"/>
-		<field name="MMS_CONFIG_ALIAS_MIN_CHARS" since="21"/>
-		<field name="MMS_CONFIG_ALLOW_ATTACH_AUDIO" since="21"/>
-		<field name="MMS_CONFIG_APPEND_TRANSACTION_ID" since="21"/>
-		<field name="MMS_CONFIG_EMAIL_GATEWAY_NUMBER" since="21"/>
-		<field name="MMS_CONFIG_GROUP_MMS_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_HTTP_PARAMS" since="21"/>
-		<field name="MMS_CONFIG_HTTP_SOCKET_TIMEOUT" since="21"/>
-		<field name="MMS_CONFIG_MAX_IMAGE_HEIGHT" since="21"/>
-		<field name="MMS_CONFIG_MAX_IMAGE_WIDTH" since="21"/>
-		<field name="MMS_CONFIG_MAX_MESSAGE_SIZE" since="21"/>
-		<field name="MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE" since="21"/>
-		<field name="MMS_CONFIG_MMS_DELIVERY_REPORT_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_MMS_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_MMS_READ_REPORT_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_MULTIPART_SMS_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_NAI_SUFFIX" since="21"/>
-		<field name="MMS_CONFIG_NOTIFY_WAP_MMSC_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_RECIPIENT_LIMIT" since="21"/>
-		<field name="MMS_CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES" since="21"/>
-		<field name="MMS_CONFIG_SHOW_CELL_BROADCAST_APP_LINKS" since="22"/>
-		<field name="MMS_CONFIG_SMS_DELIVERY_REPORT_ENABLED" since="21"/>
-		<field name="MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD" since="21"/>
-		<field name="MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD" since="21"/>
-		<field name="MMS_CONFIG_SUBJECT_MAX_LENGTH" since="21"/>
-		<field name="MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER" since="23"/>
-		<field name="MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION" since="21"/>
-		<field name="MMS_CONFIG_UA_PROF_TAG_NAME" since="21"/>
-		<field name="MMS_CONFIG_UA_PROF_URL" since="21"/>
-		<field name="MMS_CONFIG_USER_AGENT" since="21"/>
-		<field name="MMS_ERROR_CONFIGURATION_ERROR" since="21"/>
-		<field name="MMS_ERROR_HTTP_FAILURE" since="21"/>
-		<field name="MMS_ERROR_INVALID_APN" since="21"/>
-		<field name="MMS_ERROR_IO_ERROR" since="21"/>
-		<field name="MMS_ERROR_NO_DATA_NETWORK" since="22"/>
-		<field name="MMS_ERROR_RETRY" since="21"/>
-		<field name="MMS_ERROR_UNABLE_CONNECT_MMS" since="21"/>
-		<field name="MMS_ERROR_UNSPECIFIED" since="21"/>
-		<field name="RESULT_ERROR_GENERIC_FAILURE"/>
-		<field name="RESULT_ERROR_LIMIT_EXCEEDED" since="27"/>
-		<field name="RESULT_ERROR_NO_SERVICE"/>
-		<field name="RESULT_ERROR_NULL_PDU"/>
-		<field name="RESULT_ERROR_RADIO_OFF"/>
-		<field name="RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED" since="27"/>
-		<field name="RESULT_ERROR_SHORT_CODE_NOT_ALLOWED" since="27"/>
-		<field name="STATUS_ON_ICC_FREE"/>
-		<field name="STATUS_ON_ICC_READ"/>
-		<field name="STATUS_ON_ICC_SENT"/>
-		<field name="STATUS_ON_ICC_UNREAD"/>
-		<field name="STATUS_ON_ICC_UNSENT"/>
-	</class>
-	<class name="android/telephony/SmsMessage" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="calculateLength(Ljava/lang/CharSequence;Z)[I"/>
-		<method name="calculateLength(Ljava/lang/String;Z)[I"/>
-		<method name="createFromPdu([B)Landroid/telephony/SmsMessage;" deprecated="23"/>
-		<method name="createFromPdu([BLjava/lang/String;)Landroid/telephony/SmsMessage;" since="23"/>
-		<method name="getDisplayMessageBody()Ljava/lang/String;"/>
-		<method name="getDisplayOriginatingAddress()Ljava/lang/String;"/>
-		<method name="getEmailBody()Ljava/lang/String;"/>
-		<method name="getEmailFrom()Ljava/lang/String;"/>
-		<method name="getIndexOnIcc()I"/>
-		<method name="getIndexOnSim()I" deprecated="16"/>
-		<method name="getMessageBody()Ljava/lang/String;"/>
-		<method name="getMessageClass()Landroid/telephony/SmsMessage$MessageClass;"/>
-		<method name="getOriginatingAddress()Ljava/lang/String;"/>
-		<method name="getPdu()[B"/>
-		<method name="getProtocolIdentifier()I"/>
-		<method name="getPseudoSubject()Ljava/lang/String;"/>
-		<method name="getServiceCenterAddress()Ljava/lang/String;"/>
-		<method name="getStatus()I"/>
-		<method name="getStatusOnIcc()I"/>
-		<method name="getStatusOnSim()I" deprecated="16"/>
-		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/SmsMessage$SubmitPdu;"/>
-		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/SmsMessage$SubmitPdu;"/>
-		<method name="getTPLayerLengthForPDU(Ljava/lang/String;)I"/>
-		<method name="getTimestampMillis()J"/>
-		<method name="getUserData()[B"/>
-		<method name="isCphsMwiMessage()Z"/>
-		<method name="isEmail()Z"/>
-		<method name="isMWIClearMessage()Z"/>
-		<method name="isMWISetMessage()Z"/>
-		<method name="isMwiDontStore()Z"/>
-		<method name="isReplace()Z"/>
-		<method name="isReplyPathPresent()Z"/>
-		<method name="isStatusReportMessage()Z"/>
-		<field name="ENCODING_16BIT"/>
-		<field name="ENCODING_7BIT"/>
-		<field name="ENCODING_8BIT"/>
-		<field name="ENCODING_UNKNOWN"/>
-		<field name="FORMAT_3GPP" since="28"/>
-		<field name="FORMAT_3GPP2" since="28"/>
-		<field name="MAX_USER_DATA_BYTES"/>
-		<field name="MAX_USER_DATA_BYTES_WITH_HEADER"/>
-		<field name="MAX_USER_DATA_SEPTETS"/>
-		<field name="MAX_USER_DATA_SEPTETS_WITH_HEADER"/>
-	</class>
-	<class name="android/telephony/SmsMessage$MessageClass" since="4">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/telephony/SmsMessage$MessageClass;"/>
-		<method name="values()[Landroid/telephony/SmsMessage$MessageClass;"/>
-		<field name="CLASS_0"/>
-		<field name="CLASS_1"/>
-		<field name="CLASS_2"/>
-		<field name="CLASS_3"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/telephony/SmsMessage$SubmitPdu" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="encodedMessage"/>
-		<field name="encodedScAddress"/>
-	</class>
-	<class name="android/telephony/SubscriptionInfo" since="22">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="createIconBitmap(Landroid/content/Context;)Landroid/graphics/Bitmap;"/>
-		<method name="getCarrierName()Ljava/lang/CharSequence;"/>
-		<method name="getCountryIso()Ljava/lang/String;"/>
-		<method name="getDataRoaming()I"/>
-		<method name="getDisplayName()Ljava/lang/CharSequence;"/>
-		<method name="getIccId()Ljava/lang/String;"/>
-		<method name="getIconTint()I"/>
-		<method name="getMcc()I" deprecated="29"/>
-		<method name="getMccString()Ljava/lang/String;" since="29"/>
-		<method name="getMnc()I" deprecated="29"/>
-		<method name="getMncString()Ljava/lang/String;" since="29"/>
-		<method name="getNumber()Ljava/lang/String;"/>
-		<method name="getParentSubId()I" since="29"/>
-		<method name="getSimSlotIndex()I"/>
-		<method name="getSubscriptionId()I"/>
-		<method name="isEmbedded()Z" since="28"/>
-		<method name="isOpportunistic()Z" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/SubscriptionManager" since="22">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V"/>
-		<method name="canManageSubscription(Landroid/telephony/SubscriptionInfo;)Z" since="28"/>
-		<method name="from(Landroid/content/Context;)Landroid/telephony/SubscriptionManager;" deprecated="28"/>
-		<method name="getAccessibleSubscriptionInfoList()Ljava/util/List;" since="28"/>
-		<method name="getActiveSubscriptionInfo(I)Landroid/telephony/SubscriptionInfo;"/>
-		<method name="getActiveSubscriptionInfoCount()I"/>
-		<method name="getActiveSubscriptionInfoCountMax()I"/>
-		<method name="getActiveSubscriptionInfoForSimSlotIndex(I)Landroid/telephony/SubscriptionInfo;"/>
-		<method name="getActiveSubscriptionInfoList()Ljava/util/List;"/>
-		<method name="getDefaultDataSubscriptionId()I" since="24"/>
-		<method name="getDefaultSmsSubscriptionId()I" since="24"/>
-		<method name="getDefaultSubscriptionId()I" since="24"/>
-		<method name="getDefaultVoiceSubscriptionId()I" since="24"/>
-		<method name="getSubscriptionPlans(I)Ljava/util/List;" since="28"/>
-		<method name="isNetworkRoaming(I)Z"/>
-		<method name="removeOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V"/>
-		<method name="setSubscriptionOverrideCongested(IZJ)V" since="28"/>
-		<method name="setSubscriptionOverrideUnmetered(IZJ)V" since="28"/>
-		<method name="setSubscriptionPlans(ILjava/util/List;)V" since="28"/>
-		<method name="switchToSubscription(ILandroid/app/PendingIntent;)V" since="29"/>
-		<field name="ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED" since="26"/>
-		<field name="ACTION_DEFAULT_SUBSCRIPTION_CHANGED" since="26"/>
-		<field name="ACTION_MANAGE_SUBSCRIPTION_PLANS" since="28"/>
-		<field name="ACTION_REFRESH_SUBSCRIPTION_PLANS" since="28"/>
-		<field name="DATA_ROAMING_DISABLE"/>
-		<field name="DATA_ROAMING_ENABLE"/>
-		<field name="EXTRA_SUBSCRIPTION_INDEX" since="26"/>
-		<field name="INVALID_SUBSCRIPTION_ID" since="24"/>
-	</class>
-	<class name="android/telephony/SubscriptionManager$OnSubscriptionsChangedListener" since="22">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onSubscriptionsChanged()V"/>
-	</class>
-	<class name="android/telephony/SubscriptionPlan" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="cycleIterator()Ljava/util/Iterator;"/>
-		<method name="getDataLimitBehavior()I"/>
-		<method name="getDataLimitBytes()J"/>
-		<method name="getDataUsageBytes()J"/>
-		<method name="getDataUsageTime()J"/>
-		<method name="getSummary()Ljava/lang/CharSequence;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<field name="BYTES_UNKNOWN"/>
-		<field name="BYTES_UNLIMITED"/>
-		<field name="CREATOR"/>
-		<field name="LIMIT_BEHAVIOR_BILLED"/>
-		<field name="LIMIT_BEHAVIOR_DISABLED"/>
-		<field name="LIMIT_BEHAVIOR_THROTTLED"/>
-		<field name="LIMIT_BEHAVIOR_UNKNOWN"/>
-		<field name="TIME_UNKNOWN"/>
-	</class>
-	<class name="android/telephony/SubscriptionPlan$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;Ljava/time/Period;)V" since="29"/>
-		<method name="build()Landroid/telephony/SubscriptionPlan;"/>
-		<method name="createNonrecurring(Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;)Landroid/telephony/SubscriptionPlan$Builder;"/>
-		<method name="createRecurring(Ljava/time/ZonedDateTime;Ljava/time/Period;)Landroid/telephony/SubscriptionPlan$Builder;"/>
-		<method name="setDataLimit(JI)Landroid/telephony/SubscriptionPlan$Builder;"/>
-		<method name="setDataUsage(JJ)Landroid/telephony/SubscriptionPlan$Builder;"/>
-		<method name="setSummary(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;"/>
-	</class>
-	<class name="android/telephony/TelephonyManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="canChangeDtmfToneLength()Z" since="23"/>
-		<method name="createForPhoneAccountHandle(Landroid/telecom/PhoneAccountHandle;)Landroid/telephony/TelephonyManager;" since="26"/>
-		<method name="createForSubscriptionId(I)Landroid/telephony/TelephonyManager;" since="24"/>
-		<method name="getAllCellInfo()Ljava/util/List;" since="17"/>
-		<method name="getCallState()I"/>
-		<method name="getCarrierConfig()Landroid/os/PersistableBundle;" since="26"/>
-		<method name="getCellLocation()Landroid/telephony/CellLocation;" deprecated="26"/>
-		<method name="getDataActivity()I"/>
-		<method name="getDataNetworkType()I" since="24"/>
-		<method name="getDataState()I"/>
-		<method name="getDeviceId()Ljava/lang/String;" deprecated="26"/>
-		<method name="getDeviceId(I)Ljava/lang/String;" since="23" deprecated="26"/>
-		<method name="getDeviceSoftwareVersion()Ljava/lang/String;"/>
-		<method name="getForbiddenPlmns()[Ljava/lang/String;" since="26"/>
-		<method name="getGroupIdLevel1()Ljava/lang/String;" since="18"/>
-		<method name="getIccAuthentication(IILjava/lang/String;)Ljava/lang/String;" since="24"/>
-		<method name="getImei()Ljava/lang/String;" since="26"/>
-		<method name="getImei(I)Ljava/lang/String;" since="26"/>
-		<method name="getLine1Number()Ljava/lang/String;"/>
-		<method name="getManufacturerCode()Ljava/lang/String;" since="29"/>
-		<method name="getManufacturerCode(I)Ljava/lang/String;" since="29"/>
-		<method name="getMeid()Ljava/lang/String;" since="26"/>
-		<method name="getMeid(I)Ljava/lang/String;" since="26"/>
-		<method name="getMmsUAProfUrl()Ljava/lang/String;" since="19"/>
-		<method name="getMmsUserAgent()Ljava/lang/String;" since="19"/>
-		<method name="getNai()Ljava/lang/String;" since="28"/>
-		<method name="getNeighboringCellInfo()Ljava/util/List;" since="3" deprecated="23"/>
-		<method name="getNetworkCountryIso()Ljava/lang/String;"/>
-		<method name="getNetworkOperator()Ljava/lang/String;"/>
-		<method name="getNetworkOperatorName()Ljava/lang/String;"/>
-		<method name="getNetworkSpecifier()Ljava/lang/String;" since="26"/>
-		<method name="getNetworkType()I"/>
-		<method name="getPhoneCount()I" since="23"/>
-		<method name="getPhoneType()I"/>
-		<method name="getServiceState()Landroid/telephony/ServiceState;" since="26"/>
-		<method name="getSignalStrength()Landroid/telephony/SignalStrength;" since="28"/>
-		<method name="getSimCarrierId()I" since="28"/>
-		<method name="getSimCarrierIdName()Ljava/lang/CharSequence;" since="28"/>
-		<method name="getSimCountryIso()Ljava/lang/String;"/>
-		<method name="getSimOperator()Ljava/lang/String;"/>
-		<method name="getSimOperatorName()Ljava/lang/String;"/>
-		<method name="getSimSerialNumber()Ljava/lang/String;"/>
-		<method name="getSimState()I"/>
-		<method name="getSimState(I)I" since="26"/>
-		<method name="getSubscriberId()Ljava/lang/String;"/>
-		<method name="getTypeAllocationCode()Ljava/lang/String;" since="29"/>
-		<method name="getTypeAllocationCode(I)Ljava/lang/String;" since="29"/>
-		<method name="getVisualVoicemailPackageName()Ljava/lang/String;" since="26"/>
-		<method name="getVoiceMailAlphaTag()Ljava/lang/String;"/>
-		<method name="getVoiceMailNumber()Ljava/lang/String;"/>
-		<method name="getVoiceNetworkType()I" since="24"/>
-		<method name="getVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="24"/>
-		<method name="hasCarrierPrivileges()Z" since="22"/>
-		<method name="hasIccCard()Z" since="5"/>
-		<method name="iccCloseLogicalChannel(I)Z" since="21"/>
-		<method name="iccExchangeSimIO(IIIIILjava/lang/String;)[B" since="21"/>
-		<method name="iccOpenLogicalChannel(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;" since="21" deprecated="26"/>
-		<method name="iccOpenLogicalChannel(Ljava/lang/String;I)Landroid/telephony/IccOpenLogicalChannelResponse;" since="26"/>
-		<method name="iccTransmitApduBasicChannel(IIIIILjava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="iccTransmitApduLogicalChannel(IIIIIILjava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="isConcurrentVoiceAndDataSupported()Z" since="26"/>
-		<method name="isDataEnabled()Z" since="26"/>
-		<method name="isHearingAidCompatibilitySupported()Z" since="23"/>
-		<method name="isNetworkRoaming()Z"/>
-		<method name="isSmsCapable()Z" since="21"/>
-		<method name="isTtyModeSupported()Z" since="23" deprecated="28"/>
-		<method name="isVoiceCapable()Z" since="22"/>
-		<method name="isVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;)Z" since="24"/>
-		<method name="isWorldPhone()Z" since="23"/>
-		<method name="listen(Landroid/telephony/PhoneStateListener;I)V"/>
-		<method name="requestNetworkScan(Landroid/telephony/NetworkScanRequest;Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyScanManager$NetworkScanCallback;)Landroid/telephony/NetworkScan;" since="28"/>
-		<method name="sendDialerSpecialCode(Ljava/lang/String;)V" since="26"/>
-		<method name="sendEnvelopeWithStatus(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="sendUssdRequest(Ljava/lang/String;Landroid/telephony/TelephonyManager$UssdResponseCallback;Landroid/os/Handler;)V" since="26"/>
-		<method name="sendVisualVoicemailSms(Ljava/lang/String;ILjava/lang/String;Landroid/app/PendingIntent;)V" since="26"/>
-		<method name="setDataEnabled(Z)V" since="26"/>
-		<method name="setLine1NumberForDisplay(Ljava/lang/String;Ljava/lang/String;)Z" since="22"/>
-		<method name="setNetworkSelectionModeAutomatic()V" since="28"/>
-		<method name="setNetworkSelectionModeManual(Ljava/lang/String;Z)Z" since="28"/>
-		<method name="setOperatorBrandOverride(Ljava/lang/String;)Z" since="22"/>
-		<method name="setPreferredNetworkTypeToGlobal()Z" since="22"/>
-		<method name="setVisualVoicemailSmsFilterSettings(Landroid/telephony/VisualVoicemailSmsFilterSettings;)V" since="26"/>
-		<method name="setVoiceMailNumber(Ljava/lang/String;Ljava/lang/String;)Z" since="22"/>
-		<method name="setVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;)V" since="26" deprecated="28"/>
-		<method name="setVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;Z)V" since="26" deprecated="28"/>
-		<field name="ACTION_CONFIGURE_VOICEMAIL" since="23"/>
-		<field name="ACTION_PHONE_STATE_CHANGED" since="3"/>
-		<field name="ACTION_RESPOND_VIA_MESSAGE" since="18"/>
-		<field name="ACTION_SHOW_VOICEMAIL_NOTIFICATION" since="26"/>
-		<field name="ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED" since="28"/>
-		<field name="APPTYPE_CSIM" since="24"/>
-		<field name="APPTYPE_ISIM" since="24"/>
-		<field name="APPTYPE_RUIM" since="24"/>
-		<field name="APPTYPE_SIM" since="24"/>
-		<field name="APPTYPE_USIM" since="24"/>
-		<field name="AUTHTYPE_EAP_AKA" since="24"/>
-		<field name="AUTHTYPE_EAP_SIM" since="24"/>
-		<field name="CALL_STATE_IDLE"/>
-		<field name="CALL_STATE_OFFHOOK"/>
-		<field name="CALL_STATE_RINGING"/>
-		<field name="CDMA_ROAMING_MODE_AFFILIATED" since="28"/>
-		<field name="CDMA_ROAMING_MODE_ANY" since="28"/>
-		<field name="CDMA_ROAMING_MODE_HOME" since="28"/>
-		<field name="CDMA_ROAMING_MODE_RADIO_DEFAULT" since="28"/>
-		<field name="DATA_ACTIVITY_DORMANT" since="4"/>
-		<field name="DATA_ACTIVITY_IN"/>
-		<field name="DATA_ACTIVITY_INOUT"/>
-		<field name="DATA_ACTIVITY_NONE"/>
-		<field name="DATA_ACTIVITY_OUT"/>
-		<field name="DATA_CONNECTED"/>
-		<field name="DATA_CONNECTING"/>
-		<field name="DATA_DISCONNECTED"/>
-		<field name="DATA_SUSPENDED"/>
-		<field name="EXTRA_CALL_VOICEMAIL_INTENT" since="26"/>
-		<field name="EXTRA_CARRIER_ID" since="28"/>
-		<field name="EXTRA_CARRIER_NAME" since="28"/>
-		<field name="EXTRA_HIDE_PUBLIC_SETTINGS" since="26"/>
-		<field name="EXTRA_INCOMING_NUMBER" since="3"/>
-		<field name="EXTRA_IS_REFRESH" since="27"/>
-		<field name="EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT" since="26"/>
-		<field name="EXTRA_NOTIFICATION_COUNT" since="26"/>
-		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="26"/>
-		<field name="EXTRA_STATE" since="3"/>
-		<field name="EXTRA_STATE_IDLE" since="3"/>
-		<field name="EXTRA_STATE_OFFHOOK" since="3"/>
-		<field name="EXTRA_STATE_RINGING" since="3"/>
-		<field name="EXTRA_SUBSCRIPTION_ID" since="28"/>
-		<field name="EXTRA_VOICEMAIL_NUMBER" since="26"/>
-		<field name="METADATA_HIDE_VOICEMAIL_SETTINGS_MENU" since="26"/>
-		<field name="NETWORK_TYPE_1xRTT" since="4"/>
-		<field name="NETWORK_TYPE_CDMA" since="4"/>
-		<field name="NETWORK_TYPE_EDGE"/>
-		<field name="NETWORK_TYPE_EHRPD" since="11"/>
-		<field name="NETWORK_TYPE_EVDO_0" since="4"/>
-		<field name="NETWORK_TYPE_EVDO_A" since="4"/>
-		<field name="NETWORK_TYPE_EVDO_B" since="9"/>
-		<field name="NETWORK_TYPE_GPRS"/>
-		<field name="NETWORK_TYPE_GSM" since="25"/>
-		<field name="NETWORK_TYPE_HSDPA" since="5"/>
-		<field name="NETWORK_TYPE_HSPA" since="5"/>
-		<field name="NETWORK_TYPE_HSPAP" since="13"/>
-		<field name="NETWORK_TYPE_HSUPA" since="5"/>
-		<field name="NETWORK_TYPE_IDEN" since="8"/>
-		<field name="NETWORK_TYPE_IWLAN" since="25"/>
-		<field name="NETWORK_TYPE_LTE" since="11"/>
-		<field name="NETWORK_TYPE_TD_SCDMA" since="25"/>
-		<field name="NETWORK_TYPE_UMTS"/>
-		<field name="NETWORK_TYPE_UNKNOWN"/>
-		<field name="PHONE_TYPE_CDMA" since="4"/>
-		<field name="PHONE_TYPE_GSM"/>
-		<field name="PHONE_TYPE_NONE"/>
-		<field name="PHONE_TYPE_SIP" since="11"/>
-		<field name="SIM_STATE_ABSENT"/>
-		<field name="SIM_STATE_CARD_IO_ERROR" since="26"/>
-		<field name="SIM_STATE_CARD_RESTRICTED" since="26"/>
-		<field name="SIM_STATE_NETWORK_LOCKED"/>
-		<field name="SIM_STATE_NOT_READY" since="26"/>
-		<field name="SIM_STATE_PERM_DISABLED" since="26"/>
-		<field name="SIM_STATE_PIN_REQUIRED"/>
-		<field name="SIM_STATE_PUK_REQUIRED"/>
-		<field name="SIM_STATE_READY"/>
-		<field name="SIM_STATE_UNKNOWN"/>
-		<field name="UNKNOWN_CARRIER_ID" since="28"/>
-		<field name="USSD_ERROR_SERVICE_UNAVAIL" since="26"/>
-		<field name="USSD_RETURN_FAILURE" since="26"/>
-		<field name="VVM_TYPE_CVVM" since="23"/>
-		<field name="VVM_TYPE_OMTP" since="23"/>
-	</class>
-	<class name="android/telephony/TelephonyManager$UssdResponseCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onReceiveUssdResponse(Landroid/telephony/TelephonyManager;Ljava/lang/String;Ljava/lang/CharSequence;)V"/>
-		<method name="onReceiveUssdResponseFailed(Landroid/telephony/TelephonyManager;Ljava/lang/String;I)V"/>
-	</class>
-	<class name="android/telephony/TelephonyScanManager" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/telephony/TelephonyScanManager$NetworkScanCallback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onComplete()V"/>
-		<method name="onError(I)V"/>
-		<method name="onResults(Ljava/util/List;)V"/>
-	</class>
-	<class name="android/telephony/VisualVoicemailService" since="26">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onCellServiceConnected(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telecom/PhoneAccountHandle;)V"/>
-		<method name="onSimRemoved(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telecom/PhoneAccountHandle;)V"/>
-		<method name="onSmsReceived(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telephony/VisualVoicemailSms;)V"/>
-		<method name="onStopped(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;)V"/>
-		<field name="SERVICE_INTERFACE"/>
-	</class>
-	<class name="android/telephony/VisualVoicemailService$VisualVoicemailTask" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Messenger;I)V" since="29"/>
-		<method name="finish()V"/>
-	</class>
-	<class name="android/telephony/VisualVoicemailSms" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFields()Landroid/os/Bundle;"/>
-		<method name="getMessageBody()Ljava/lang/String;"/>
-		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
-		<method name="getPrefix()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/VisualVoicemailSmsFilterSettings" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;)V" since="29"/>
-		<field name="CREATOR"/>
-		<field name="DESTINATION_PORT_ANY"/>
-		<field name="DESTINATION_PORT_DATA_SMS"/>
-		<field name="clientPrefix"/>
-		<field name="destinationPort"/>
-		<field name="originatingNumbers"/>
-	</class>
-	<class name="android/telephony/VisualVoicemailSmsFilterSettings$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/telephony/VisualVoicemailSmsFilterSettings;"/>
-		<method name="setClientPrefix(Ljava/lang/String;)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;"/>
-		<method name="setDestinationPort(I)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;"/>
-		<method name="setOriginatingNumbers(Ljava/util/List;)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;"/>
-	</class>
-	<class name="android/telephony/cdma/CdmaCellLocation" since="5">
-		<extends name="android/telephony/CellLocation"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Bundle;)V"/>
-		<method name="convertQuartSecToDecDegrees(I)D" since="17"/>
-		<method name="fillInNotifierBundle(Landroid/os/Bundle;)V"/>
-		<method name="getBaseStationId()I"/>
-		<method name="getBaseStationLatitude()I"/>
-		<method name="getBaseStationLongitude()I"/>
-		<method name="getNetworkId()I"/>
-		<method name="getSystemId()I"/>
-		<method name="setCellLocationData(III)V"/>
-		<method name="setCellLocationData(IIIII)V"/>
-		<method name="setStateInvalid()V"/>
-	</class>
-	<class name="android/telephony/data/ApnSetting" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/telephony/data/ApnSetting$Builder;)V" since="29"/>
-		<method name="getApnName()Ljava/lang/String;"/>
-		<method name="getApnTypeBitmask()I"/>
-		<method name="getAuthType()I"/>
-		<method name="getEntryName()Ljava/lang/String;"/>
-		<method name="getId()I"/>
-		<method name="getMmsProxyAddress()Ljava/net/InetAddress;" deprecated="29"/>
-		<method name="getMmsProxyAddressAsString()Ljava/lang/String;" since="29"/>
-		<method name="getMmsProxyPort()I"/>
-		<method name="getMmsc()Landroid/net/Uri;"/>
-		<method name="getMvnoType()I"/>
-		<method name="getNetworkTypeBitmask()I"/>
-		<method name="getOperatorNumeric()Ljava/lang/String;"/>
-		<method name="getPassword()Ljava/lang/String;"/>
-		<method name="getProtocol()I"/>
-		<method name="getProxyAddress()Ljava/net/InetAddress;" deprecated="29"/>
-		<method name="getProxyAddressAsString()Ljava/lang/String;" since="29"/>
-		<method name="getProxyPort()I"/>
-		<method name="getRoamingProtocol()I"/>
-		<method name="getUser()Ljava/lang/String;"/>
-		<method name="isEnabled()Z"/>
-		<field name="AUTH_TYPE_CHAP"/>
-		<field name="AUTH_TYPE_NONE"/>
-		<field name="AUTH_TYPE_PAP"/>
-		<field name="AUTH_TYPE_PAP_OR_CHAP"/>
-		<field name="CREATOR"/>
-		<field name="MVNO_TYPE_GID"/>
-		<field name="MVNO_TYPE_ICCID"/>
-		<field name="MVNO_TYPE_IMSI"/>
-		<field name="MVNO_TYPE_SPN"/>
-		<field name="PROTOCOL_IP"/>
-		<field name="PROTOCOL_IPV4V6"/>
-		<field name="PROTOCOL_IPV6"/>
-		<field name="PROTOCOL_PPP"/>
-		<field name="TYPE_CBS"/>
-		<field name="TYPE_DEFAULT"/>
-		<field name="TYPE_DUN"/>
-		<field name="TYPE_EMERGENCY"/>
-		<field name="TYPE_FOTA"/>
-		<field name="TYPE_HIPRI"/>
-		<field name="TYPE_IA"/>
-		<field name="TYPE_IMS"/>
-		<field name="TYPE_MMS"/>
-		<field name="TYPE_SUPL"/>
-	</class>
-	<class name="android/telephony/data/ApnSetting$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/telephony/data/ApnSetting;"/>
-		<method name="setApnName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setApnTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setAuthType(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setCarrierEnabled(Z)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setEntryName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setMmsProxyAddress(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" since="29"/>
-		<method name="setMmsProxyAddress(Ljava/net/InetAddress;)Landroid/telephony/data/ApnSetting$Builder;" deprecated="29"/>
-		<method name="setMmsProxyPort(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setMmsc(Landroid/net/Uri;)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setMvnoType(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setNetworkTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setOperatorNumeric(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setPassword(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setProtocol(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setProxyAddress(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" since="29"/>
-		<method name="setProxyAddress(Ljava/net/InetAddress;)Landroid/telephony/data/ApnSetting$Builder;" deprecated="29"/>
-		<method name="setProxyPort(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setRoamingProtocol(I)Landroid/telephony/data/ApnSetting$Builder;"/>
-		<method name="setUser(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
-	</class>
-	<class name="android/telephony/euicc/DownloadableSubscription" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="forActivationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription;"/>
-		<method name="getConfirmationCode()Ljava/lang/String;"/>
-		<method name="getEncodedActivationCode()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/euicc/EuiccInfo" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getOsVersion()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/euicc/EuiccManager" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="deleteSubscription(ILandroid/app/PendingIntent;)V"/>
-		<method name="downloadSubscription(Landroid/telephony/euicc/DownloadableSubscription;ZLandroid/app/PendingIntent;)V"/>
-		<method name="getEid()Ljava/lang/String;"/>
-		<method name="getEuiccInfo()Landroid/telephony/euicc/EuiccInfo;"/>
-		<method name="isEnabled()Z"/>
-		<method name="startResolutionActivity(Landroid/app/Activity;ILandroid/content/Intent;Landroid/app/PendingIntent;)V"/>
-		<method name="switchToSubscription(ILandroid/app/PendingIntent;)V"/>
-		<field name="ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS"/>
-		<field name="ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE"/>
-		<field name="EMBEDDED_SUBSCRIPTION_RESULT_ERROR"/>
-		<field name="EMBEDDED_SUBSCRIPTION_RESULT_OK"/>
-		<field name="EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR"/>
-		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE"/>
-		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION"/>
-		<field name="META_DATA_CARRIER_ICON"/>
-	</class>
-	<class name="android/telephony/gsm/GsmCellLocation" since="1">
-		<extends name="android/telephony/CellLocation"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Bundle;)V"/>
-		<method name="fillInNotifierBundle(Landroid/os/Bundle;)V"/>
-		<method name="getCid()I"/>
-		<method name="getLac()I"/>
-		<method name="getPsc()I" since="9"/>
-		<method name="setLacAndCid(II)V"/>
-		<method name="setStateInvalid()V"/>
-	</class>
-	<class name="android/telephony/gsm/SmsManager" since="1" deprecated="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="29"/>
-		<method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;" deprecated="16"/>
-		<method name="getDefault()Landroid/telephony/gsm/SmsManager;" deprecated="16"/>
-		<method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="16"/>
-		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V" deprecated="16"/>
-		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="16"/>
-		<field name="RESULT_ERROR_GENERIC_FAILURE" deprecated="16"/>
-		<field name="RESULT_ERROR_NO_SERVICE" deprecated="16"/>
-		<field name="RESULT_ERROR_NULL_PDU" deprecated="16"/>
-		<field name="RESULT_ERROR_RADIO_OFF" deprecated="16"/>
-		<field name="STATUS_ON_SIM_FREE" deprecated="16"/>
-		<field name="STATUS_ON_SIM_READ" deprecated="16"/>
-		<field name="STATUS_ON_SIM_SENT" deprecated="16"/>
-		<field name="STATUS_ON_SIM_UNREAD" deprecated="16"/>
-		<field name="STATUS_ON_SIM_UNSENT" deprecated="16"/>
-	</class>
-	<class name="android/telephony/gsm/SmsMessage" since="1" deprecated="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<method name="calculateLength(Ljava/lang/CharSequence;Z)[I" since="3" deprecated="16"/>
-		<method name="calculateLength(Ljava/lang/String;Z)[I" deprecated="16"/>
-		<method name="createFromPdu([B)Landroid/telephony/gsm/SmsMessage;" deprecated="16"/>
-		<method name="getDisplayMessageBody()Ljava/lang/String;" deprecated="16"/>
-		<method name="getDisplayOriginatingAddress()Ljava/lang/String;" deprecated="16"/>
-		<method name="getEmailBody()Ljava/lang/String;" deprecated="16"/>
-		<method name="getEmailFrom()Ljava/lang/String;" deprecated="16"/>
-		<method name="getIndexOnSim()I" deprecated="16"/>
-		<method name="getMessageBody()Ljava/lang/String;" deprecated="16"/>
-		<method name="getMessageClass()Landroid/telephony/gsm/SmsMessage$MessageClass;" deprecated="16"/>
-		<method name="getOriginatingAddress()Ljava/lang/String;" deprecated="16"/>
-		<method name="getPdu()[B" deprecated="16"/>
-		<method name="getProtocolIdentifier()I" deprecated="16"/>
-		<method name="getPseudoSubject()Ljava/lang/String;" deprecated="16"/>
-		<method name="getServiceCenterAddress()Ljava/lang/String;" deprecated="16"/>
-		<method name="getStatus()I" deprecated="16"/>
-		<method name="getStatusOnSim()I" deprecated="16"/>
-		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="16"/>
-		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="16"/>
-		<method name="getTPLayerLengthForPDU(Ljava/lang/String;)I" deprecated="16"/>
-		<method name="getTimestampMillis()J" deprecated="16"/>
-		<method name="getUserData()[B" deprecated="16"/>
-		<method name="isCphsMwiMessage()Z" deprecated="16"/>
-		<method name="isEmail()Z" deprecated="16"/>
-		<method name="isMWIClearMessage()Z" deprecated="16"/>
-		<method name="isMWISetMessage()Z" deprecated="16"/>
-		<method name="isMwiDontStore()Z" deprecated="16"/>
-		<method name="isReplace()Z" deprecated="16"/>
-		<method name="isReplyPathPresent()Z" deprecated="16"/>
-		<method name="isStatusReportMessage()Z" deprecated="16"/>
-		<field name="ENCODING_16BIT" deprecated="16"/>
-		<field name="ENCODING_7BIT" deprecated="16"/>
-		<field name="ENCODING_8BIT" deprecated="16"/>
-		<field name="ENCODING_UNKNOWN" deprecated="16"/>
-		<field name="MAX_USER_DATA_BYTES" deprecated="16"/>
-		<field name="MAX_USER_DATA_SEPTETS" deprecated="16"/>
-		<field name="MAX_USER_DATA_SEPTETS_WITH_HEADER" deprecated="16"/>
-	</class>
-	<class name="android/telephony/gsm/SmsMessage$MessageClass" since="1" deprecated="4">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/telephony/gsm/SmsMessage$MessageClass;"/>
-		<method name="values()[Landroid/telephony/gsm/SmsMessage$MessageClass;"/>
-		<field name="CLASS_0"/>
-		<field name="CLASS_1"/>
-		<field name="CLASS_2"/>
-		<field name="CLASS_3"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/telephony/gsm/SmsMessage$SubmitPdu" since="1" deprecated="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<field name="encodedMessage" deprecated="16"/>
-		<field name="encodedScAddress" deprecated="16"/>
-	</class>
-	<class name="android/telephony/mbms/DownloadProgressListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onProgressUpdated(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;IIII)V"/>
-	</class>
-	<class name="android/telephony/mbms/DownloadRequest" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getDestinationUri()Landroid/net/Uri;"/>
-		<method name="getFileServiceId()Ljava/lang/String;"/>
-		<method name="getMaxAppIntentSize()I"/>
-		<method name="getMaxDestinationUriSize()I"/>
-		<method name="getSourceUri()Landroid/net/Uri;"/>
-		<method name="getSubscriptionId()I"/>
-		<method name="toByteArray()[B"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/mbms/DownloadRequest$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/net/Uri;Landroid/net/Uri;)V"/>
-		<method name="build()Landroid/telephony/mbms/DownloadRequest;"/>
-		<method name="fromDownloadRequest(Landroid/telephony/mbms/DownloadRequest;)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
-		<method name="fromSerializedRequest([B)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
-		<method name="setAppIntent(Landroid/content/Intent;)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
-		<method name="setServiceInfo(Landroid/telephony/mbms/FileServiceInfo;)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
-		<method name="setSubscriptionId(I)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
-	</class>
-	<class name="android/telephony/mbms/DownloadStatusListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onStatusUpdated(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;I)V"/>
-	</class>
-	<class name="android/telephony/mbms/FileInfo" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getMimeType()Ljava/lang/String;"/>
-		<method name="getUri()Landroid/net/Uri;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/mbms/FileServiceInfo" since="28">
-		<extends name="android/telephony/mbms/ServiceInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getFiles()Ljava/util/List;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsDownloadReceiver" since="28">
-		<extends name="android/content/BroadcastReceiver"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsDownloadSessionCallback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onError(ILjava/lang/String;)V"/>
-		<method name="onFileServicesUpdated(Ljava/util/List;)V"/>
-		<method name="onMiddlewareReady()V"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsErrors" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ERROR_MIDDLEWARE_LOST"/>
-		<field name="ERROR_MIDDLEWARE_NOT_BOUND"/>
-		<field name="ERROR_NO_UNIQUE_MIDDLEWARE"/>
-		<field name="SUCCESS"/>
-		<field name="UNKNOWN"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsErrors$DownloadErrors" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT"/>
-		<field name="ERROR_UNKNOWN_DOWNLOAD_REQUEST"/>
-		<field name="ERROR_UNKNOWN_FILE_INFO"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsErrors$GeneralErrors" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ERROR_CARRIER_CHANGE_NOT_ALLOWED"/>
-		<field name="ERROR_IN_E911"/>
-		<field name="ERROR_MIDDLEWARE_NOT_YET_READY"/>
-		<field name="ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE"/>
-		<field name="ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE"/>
-		<field name="ERROR_OUT_OF_MEMORY"/>
-		<field name="ERROR_UNABLE_TO_READ_SIM"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsErrors$InitializationErrors" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ERROR_APP_PERMISSIONS_NOT_GRANTED"/>
-		<field name="ERROR_DUPLICATE_INITIALIZE"/>
-		<field name="ERROR_UNABLE_TO_INITIALIZE"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsErrors$StreamingErrors" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ERROR_CONCURRENT_SERVICE_LIMIT_REACHED"/>
-		<field name="ERROR_DUPLICATE_START_STREAM"/>
-		<field name="ERROR_UNABLE_TO_START_SERVICE"/>
-	</class>
-	<class name="android/telephony/mbms/MbmsStreamingSessionCallback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onError(ILjava/lang/String;)V"/>
-		<method name="onMiddlewareReady()V"/>
-		<method name="onStreamingServicesUpdated(Ljava/util/List;)V"/>
-	</class>
-	<class name="android/telephony/mbms/ServiceInfo" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getLocales()Ljava/util/List;"/>
-		<method name="getNameForLocale(Ljava/util/Locale;)Ljava/lang/CharSequence;"/>
-		<method name="getNamedContentLocales()Ljava/util/Set;"/>
-		<method name="getServiceClassName()Ljava/lang/String;"/>
-		<method name="getServiceId()Ljava/lang/String;"/>
-		<method name="getSessionEndTime()Ljava/util/Date;"/>
-		<method name="getSessionStartTime()Ljava/util/Date;"/>
-	</class>
-	<class name="android/telephony/mbms/StreamingService" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInfo()Landroid/telephony/mbms/StreamingServiceInfo;"/>
-		<method name="getPlaybackUri()Landroid/net/Uri;"/>
-		<field name="BROADCAST_METHOD"/>
-		<field name="REASON_BY_USER_REQUEST"/>
-		<field name="REASON_END_OF_SESSION"/>
-		<field name="REASON_FREQUENCY_CONFLICT"/>
-		<field name="REASON_LEFT_MBMS_BROADCAST_AREA"/>
-		<field name="REASON_NONE"/>
-		<field name="REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE"/>
-		<field name="REASON_OUT_OF_MEMORY"/>
-		<field name="STATE_STALLED"/>
-		<field name="STATE_STARTED"/>
-		<field name="STATE_STOPPED"/>
-		<field name="UNICAST_METHOD"/>
-	</class>
-	<class name="android/telephony/mbms/StreamingServiceCallback" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onBroadcastSignalStrengthUpdated(I)V"/>
-		<method name="onError(ILjava/lang/String;)V"/>
-		<method name="onMediaDescriptionUpdated()V"/>
-		<method name="onStreamMethodUpdated(I)V"/>
-		<method name="onStreamStateUpdated(II)V"/>
-		<field name="SIGNAL_STRENGTH_UNAVAILABLE"/>
-	</class>
-	<class name="android/telephony/mbms/StreamingServiceInfo" since="28">
-		<extends name="android/telephony/mbms/ServiceInfo"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/test/ActivityInstrumentationTestCase" since="1" deprecated="3" removed="28">
-		<extends name="android/test/ActivityTestCase"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V"/>
-		<method name="testActivityTestCaseSetUpProperly()V"/>
-	</class>
-	<class name="android/test/ActivityInstrumentationTestCase2" since="3" deprecated="24" removed="28">
-		<extends name="android/test/ActivityTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" since="8"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="16"/>
-		<method name="setActivityInitialTouchMode(Z)V"/>
-		<method name="setActivityIntent(Landroid/content/Intent;)V"/>
-	</class>
-	<class name="android/test/ActivityTestCase" since="1" deprecated="24" removed="28">
-		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>()V"/>
-		<method name="getActivity()Landroid/app/Activity;"/>
-		<method name="scrubClass(Ljava/lang/Class;)V"/>
-		<method name="setActivity(Landroid/app/Activity;)V"/>
-	</class>
-	<class name="android/test/ActivityUnitTestCase" since="1" deprecated="24" removed="28">
-		<extends name="android/test/ActivityTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V"/>
-		<method name="getFinishedActivityRequest()I"/>
-		<method name="getRequestedOrientation()I"/>
-		<method name="getStartedActivityIntent()Landroid/content/Intent;"/>
-		<method name="getStartedActivityRequest()I"/>
-		<method name="isFinishCalled()Z"/>
-		<method name="setActivityContext(Landroid/content/Context;)V"/>
-		<method name="setApplication(Landroid/app/Application;)V"/>
-		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;"/>
-	</class>
-	<class name="android/test/AndroidTestCase" since="1" deprecated="24" removed="28">
-		<extends name="junit/framework/TestCase"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4"/>
-		<method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4"/>
-		<method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="scrubClass(Ljava/lang/Class;)V"/>
-		<method name="setContext(Landroid/content/Context;)V"/>
-		<method name="testAndroidTestCaseSetupProperly()V"/>
-		<field name="mContext"/>
-	</class>
-	<class name="android/test/AndroidTestRunner" since="1" deprecated="24" removed="28">
-		<extends name="junit/runner/BaseTestRunner"/>
-		<method name="&lt;init>()V"/>
-		<method name="addTestListener(Ljunit/framework/TestListener;)V"/>
-		<method name="clearTestListeners()V"/>
-		<method name="createTestResult()Ljunit/framework/TestResult;"/>
-		<method name="getTestCases()Ljava/util/List;"/>
-		<method name="getTestClassName()Ljava/lang/String;"/>
-		<method name="getTestResult()Ljunit/framework/TestResult;"/>
-		<method name="runTest()V"/>
-		<method name="runTest(Ljunit/framework/TestResult;)V"/>
-		<method name="setContext(Landroid/content/Context;)V"/>
-		<method name="setInstrumentaiton(Landroid/app/Instrumentation;)V" deprecated="16"/>
-		<method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5"/>
-		<method name="setTest(Ljunit/framework/Test;)V"/>
-		<method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/test/ApplicationTestCase" since="1" deprecated="24" removed="28">
-		<extends name="android/test/AndroidTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V"/>
-		<method name="createApplication()V"/>
-		<method name="getApplication()Landroid/app/Application;"/>
-		<method name="getSystemContext()Landroid/content/Context;"/>
-		<method name="terminateApplication()V"/>
-		<method name="testApplicationTestCaseSetUpProperly()V"/>
-	</class>
-	<class name="android/test/AssertionFailedError" since="1" deprecated="16" removed="28">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/test/ComparisonFailure" since="1" deprecated="16" removed="28">
-		<extends name="android/test/AssertionFailedError"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/test/FlakyTest" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="tolerance()I"/>
-	</class>
-	<class name="android/test/InstrumentationTestCase" since="1" deprecated="24" removed="28">
-		<extends name="junit/framework/TestCase"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstrumentation()Landroid/app/Instrumentation;"/>
-		<method name="injectInsrumentation(Landroid/app/Instrumentation;)V" deprecated="16"/>
-		<method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5"/>
-		<method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;"/>
-		<method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3"/>
-		<method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3"/>
-		<method name="sendKeys(Ljava/lang/String;)V"/>
-		<method name="sendKeys([I)V"/>
-		<method name="sendRepeatedKeys([I)V"/>
-	</class>
-	<class name="android/test/InstrumentationTestRunner" since="1" deprecated="24" removed="28">
-		<extends name="android/app/Instrumentation"/>
-		<implements name="android/test/TestSuiteProvider"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAllTests()Ljunit/framework/TestSuite;"/>
-		<method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;"/>
-		<method name="getArguments()Landroid/os/Bundle;" since="18"/>
-		<method name="getLoader()Ljava/lang/ClassLoader;"/>
-		<field name="REPORT_KEY_NAME_CLASS"/>
-		<field name="REPORT_KEY_NAME_TEST"/>
-		<field name="REPORT_KEY_NUM_CURRENT"/>
-		<field name="REPORT_KEY_NUM_TOTAL"/>
-		<field name="REPORT_KEY_STACK"/>
-		<field name="REPORT_VALUE_ID"/>
-		<field name="REPORT_VALUE_RESULT_ERROR"/>
-		<field name="REPORT_VALUE_RESULT_FAILURE"/>
-		<field name="REPORT_VALUE_RESULT_OK"/>
-		<field name="REPORT_VALUE_RESULT_START"/>
-	</class>
-	<class name="android/test/InstrumentationTestSuite" since="1" deprecated="24" removed="28">
-		<extends name="junit/framework/TestSuite"/>
-		<method name="&lt;init>(Landroid/app/Instrumentation;)V"/>
-		<method name="&lt;init>(Ljava/lang/Class;Landroid/app/Instrumentation;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation;)V"/>
-	</class>
-	<class name="android/test/IsolatedContext" since="1" deprecated="24" removed="28">
-		<extends name="android/content/ContextWrapper"/>
-		<method name="&lt;init>(Landroid/content/ContentResolver;Landroid/content/Context;)V"/>
-		<method name="getAndClearBroadcastIntents()Ljava/util/List;"/>
-	</class>
-	<class name="android/test/LoaderTestCase" since="11" removed="28">
-		<extends name="android/test/AndroidTestCase"/>
-		<method name="&lt;init>()V"/>
-		<method name="getLoaderResultSynchronously(Landroid/content/Loader;)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/test/MoreAsserts" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V"/>
-		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V"/>
-		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
-		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
-		<method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
-		<method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
-		<method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
-		<method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V"/>
-		<method name="assertEmpty(Ljava/lang/Iterable;)V"/>
-		<method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V"/>
-		<method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V"/>
-		<method name="assertEmpty(Ljava/util/Map;)V"/>
-		<method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V"/>
-		<method name="assertEquals(Ljava/lang/String;[B[B)V"/>
-		<method name="assertEquals(Ljava/lang/String;[D[D)V"/>
-		<method name="assertEquals(Ljava/lang/String;[I[I)V"/>
-		<method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V"/>
-		<method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V"/>
-		<method name="assertEquals([B[B)V"/>
-		<method name="assertEquals([D[D)V"/>
-		<method name="assertEquals([I[I)V"/>
-		<method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V"/>
-		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
-		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;"/>
-		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="assertNotEmpty(Ljava/lang/Iterable;)V"/>
-		<method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V"/>
-		<method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V"/>
-		<method name="assertNotEmpty(Ljava/util/Map;)V"/>
-		<method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V"/>
-		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V"/>
-	</class>
-	<class name="android/test/PerformanceTestCase" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="isPerformanceOnly()Z"/>
-		<method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I"/>
-	</class>
-	<class name="android/test/PerformanceTestCase$Intermediates" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="addIntermediate(Ljava/lang/String;)V"/>
-		<method name="addIntermediate(Ljava/lang/String;J)V"/>
-		<method name="finishTiming(Z)V"/>
-		<method name="setInternalIterations(I)V"/>
-		<method name="startTiming(Z)V"/>
-	</class>
-	<class name="android/test/ProviderTestCase" since="1" deprecated="5" removed="28">
-		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
-		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;"/>
-		<method name="getMockContext()Landroid/test/IsolatedContext;"/>
-		<method name="getProvider()Landroid/content/ContentProvider;"/>
-		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;"/>
-	</class>
-	<class name="android/test/ProviderTestCase2" since="3" removed="28">
-		<extends name="android/test/AndroidTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
-		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;"/>
-		<method name="getMockContext()Landroid/test/IsolatedContext;"/>
-		<method name="getProvider()Landroid/content/ContentProvider;"/>
-		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;"/>
-	</class>
-	<class name="android/test/RenamingDelegatingContext" since="1" deprecated="24" removed="28">
-		<extends name="android/content/ContextWrapper"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="getDatabasePrefix()Ljava/lang/String;"/>
-		<method name="makeExistingFilesAndDbsAccessible()V"/>
-		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;"/>
-		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;"/>
-	</class>
-	<class name="android/test/ServiceTestCase" since="1" deprecated="24" removed="28">
-		<extends name="android/test/AndroidTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V"/>
-		<method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;"/>
-		<method name="getApplication()Landroid/app/Application;"/>
-		<method name="getService()Landroid/app/Service;"/>
-		<method name="getSystemContext()Landroid/content/Context;"/>
-		<method name="setApplication(Landroid/app/Application;)V"/>
-		<method name="setupService()V"/>
-		<method name="shutdownService()V"/>
-		<method name="startService(Landroid/content/Intent;)V"/>
-		<method name="testServiceTestCaseSetUpProperly()V"/>
-	</class>
-	<class name="android/test/SingleLaunchActivityTestCase" since="1" deprecated="24" removed="28">
-		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V"/>
-		<method name="getActivity()Landroid/app/Activity;"/>
-		<method name="testActivityTestCaseSetUpProperly()V"/>
-	</class>
-	<class name="android/test/SyncBaseInstrumentation" since="1" deprecated="24" removed="28">
-		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancelSyncsandDisableAutoSync()V"/>
-		<method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/test/TestSuiteProvider" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="getTestSuite()Ljunit/framework/TestSuite;"/>
-	</class>
-	<class name="android/test/TouchUtils" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V"/>
-		<method name="drag(Landroid/test/ActivityInstrumentationTestCase;FFFFI)V" deprecated="16"/>
-		<method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3"/>
-		<method name="dragQuarterScreenDown(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="16"/>
-		<method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3"/>
-		<method name="dragQuarterScreenUp(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="16"/>
-		<method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3"/>
-		<method name="dragViewBy(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="16"/>
-		<method name="dragViewBy(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="16"/>
-		<method name="dragViewTo(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="16"/>
-		<method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3"/>
-		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="16"/>
-		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="16"/>
-		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3"/>
-		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3"/>
-		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="16"/>
-		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="16"/>
-		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3"/>
-		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3"/>
-		<method name="dragViewToX(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="16"/>
-		<method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3"/>
-		<method name="dragViewToY(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="16"/>
-		<method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3"/>
-		<method name="longClickView(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="16"/>
-		<method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3"/>
-		<method name="scrollToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="16"/>
-		<method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3"/>
-		<method name="scrollToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="16"/>
-		<method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3"/>
-		<method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V"/>
-		<method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V"/>
-	</class>
-	<class name="android/test/UiThreadTest" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/test/ViewAsserts" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V"/>
-		<method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
-		<method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V"/>
-		<method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
-		<method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V"/>
-		<method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V"/>
-		<method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V"/>
-		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V"/>
-		<method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V"/>
-	</class>
-	<class name="android/test/mock/MockApplication" since="1" deprecated="24" removed="28">
-		<extends name="android/app/Application"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/test/mock/MockContentProvider" since="8" removed="28">
-		<extends name="android/content/ContentProvider"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V"/>
-	</class>
-	<class name="android/test/mock/MockContentResolver" since="1" removed="28">
-		<extends name="android/content/ContentResolver"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="18"/>
-		<method name="addProvider(Ljava/lang/String;Landroid/content/ContentProvider;)V"/>
-	</class>
-	<class name="android/test/mock/MockContext" since="1" removed="28">
-		<extends name="android/content/Context"/>
-		<method name="&lt;init>()V"/>
-		<method name="getPackageCodePath()Ljava/lang/String;"/>
-		<method name="getPackageResourcePath()Ljava/lang/String;"/>
-	</class>
-	<class name="android/test/mock/MockCursor" since="8" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/database/Cursor"/>
-		<method name="&lt;init>()V"/>
-		<method name="abortUpdates()V" removed="11"/>
-		<method name="commitUpdates()Z" removed="11"/>
-		<method name="commitUpdates(Ljava/util/Map;)Z" removed="11"/>
-		<method name="deleteRow()Z" removed="11"/>
-		<method name="hasUpdates()Z" removed="11"/>
-		<method name="supportsUpdates()Z" removed="11"/>
-		<method name="updateBlob(I[B)Z" removed="11"/>
-		<method name="updateDouble(ID)Z" removed="11"/>
-		<method name="updateFloat(IF)Z" removed="11"/>
-		<method name="updateInt(II)Z" removed="11"/>
-		<method name="updateLong(IJ)Z" removed="11"/>
-		<method name="updateShort(IS)Z" removed="11"/>
-		<method name="updateString(ILjava/lang/String;)Z" removed="11"/>
-		<method name="updateToNull(I)Z" removed="11"/>
-	</class>
-	<class name="android/test/mock/MockDialogInterface" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/content/DialogInterface"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/test/mock/MockPackageManager" since="1" deprecated="24" removed="28">
-		<extends name="android/content/pm/PackageManager"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23"/>
-		<method name="getDefaultBrowserPackageName(I)Ljava/lang/String;" since="23" removed="24"/>
-		<method name="setDefaultBrowserPackageName(Ljava/lang/String;I)Z" since="23" removed="24"/>
-		<method name="setPackageObbPath(Ljava/lang/String;Ljava/lang/String;)V" since="9" removed="10"/>
-	</class>
-	<class name="android/test/mock/MockResources" since="1" deprecated="24" removed="28">
-		<extends name="android/content/res/Resources"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/test/suitebuilder/TestMethod" since="1" deprecated="26" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="3"/>
-		<method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Ljunit/framework/TestCase;)V" since="3"/>
-		<method name="createTest()Ljunit/framework/TestCase;"/>
-		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"/>
-		<method name="getEnclosingClass()Ljava/lang/Class;"/>
-		<method name="getEnclosingClassname()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-	</class>
-	<class name="android/test/suitebuilder/TestSuiteBuilder" since="1" deprecated="26" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
-		<method name="addRequirements(Ljava/util/List;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
-		<method name="addRequirements([Lcom/android/internal/util/Predicate;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
-		<method name="build()Ljunit/framework/TestSuite;"/>
-		<method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
-		<method name="getSuiteName()Ljava/lang/String;"/>
-		<method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;"/>
-		<method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
-		<method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;"/>
-	</class>
-	<class name="android/test/suitebuilder/TestSuiteBuilder$FailedToCreateTests" since="1" deprecated="26" removed="28">
-		<extends name="junit/framework/TestCase"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="testSuiteConstructionFailed()V"/>
-	</class>
-	<class name="android/test/suitebuilder/annotation/LargeTest" since="2" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/test/suitebuilder/annotation/MediumTest" since="2" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/test/suitebuilder/annotation/SmallTest" since="2" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/test/suitebuilder/annotation/Smoke" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/test/suitebuilder/annotation/Suppress" since="1" deprecated="24" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/text/AlteredCharSequence" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/GetChars"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;[CII)V" since="29"/>
-		<method name="make(Ljava/lang/CharSequence;[CII)Landroid/text/AlteredCharSequence;"/>
-	</class>
-	<class name="android/text/AndroidCharacter" since="1" deprecated="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDirectionalities([C[BI)V"/>
-		<method name="getEastAsianWidth(C)I" since="8"/>
-		<method name="getEastAsianWidths([CII[B)V" since="8"/>
-		<method name="getMirror(C)C"/>
-		<method name="mirror([CII)Z"/>
-		<field name="EAST_ASIAN_WIDTH_AMBIGUOUS" since="8"/>
-		<field name="EAST_ASIAN_WIDTH_FULL_WIDTH" since="8"/>
-		<field name="EAST_ASIAN_WIDTH_HALF_WIDTH" since="8"/>
-		<field name="EAST_ASIAN_WIDTH_NARROW" since="8"/>
-		<field name="EAST_ASIAN_WIDTH_NEUTRAL" since="8"/>
-		<field name="EAST_ASIAN_WIDTH_WIDE" since="8"/>
-	</class>
-	<class name="android/text/Annotation" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="getValue()Ljava/lang/String;"/>
-	</class>
-	<class name="android/text/AutoText" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/res/Resources;)V" since="29"/>
-		<method name="get(Ljava/lang/CharSequence;IILandroid/view/View;)Ljava/lang/String;"/>
-		<method name="getSize(Landroid/view/View;)I" since="3"/>
-	</class>
-	<class name="android/text/BidiFormatter" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ZILandroid/text/TextDirectionHeuristic;)V" since="29"/>
-		<method name="getInstance()Landroid/text/BidiFormatter;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/text/BidiFormatter;"/>
-		<method name="getInstance(Z)Landroid/text/BidiFormatter;"/>
-		<method name="getStereoReset()Z"/>
-		<method name="isRtl(Ljava/lang/CharSequence;)Z" since="26"/>
-		<method name="isRtl(Ljava/lang/String;)Z"/>
-		<method name="isRtlContext()Z"/>
-		<method name="unicodeWrap(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="26"/>
-		<method name="unicodeWrap(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;)Ljava/lang/CharSequence;" since="26"/>
-		<method name="unicodeWrap(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/CharSequence;" since="26"/>
-		<method name="unicodeWrap(Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;" since="26"/>
-		<method name="unicodeWrap(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;)Ljava/lang/String;"/>
-		<method name="unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/String;"/>
-		<method name="unicodeWrap(Ljava/lang/String;Z)Ljava/lang/String;"/>
-	</class>
-	<class name="android/text/BidiFormatter$Builder" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="build()Landroid/text/BidiFormatter;"/>
-		<method name="setTextDirectionHeuristic(Landroid/text/TextDirectionHeuristic;)Landroid/text/BidiFormatter$Builder;"/>
-		<method name="stereoReset(Z)Landroid/text/BidiFormatter$Builder;"/>
-	</class>
-	<class name="android/text/BoringLayout" since="1">
-		<extends name="android/text/Layout"/>
-		<implements name="android/text/TextUtils$EllipsizeCallback"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)V"/>
-		<method name="isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;)Landroid/text/BoringLayout$Metrics;"/>
-		<method name="isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;"/>
-		<method name="make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;"/>
-		<method name="make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;"/>
-		<method name="replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;"/>
-		<method name="replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;"/>
-	</class>
-	<class name="android/text/BoringLayout$Metrics" since="1">
-		<extends name="android/graphics/Paint$FontMetricsInt"/>
-		<method name="&lt;init>()V"/>
-		<field name="width"/>
-	</class>
-	<class name="android/text/ClipboardManager" since="1" deprecated="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="hasText()Z"/>
-		<method name="setText(Ljava/lang/CharSequence;)V"/>
-	</class>
-	<class name="android/text/DynamicLayout" since="1">
-		<extends name="android/text/Layout"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZLandroid/text/TextUtils$TruncateAt;I)V" deprecated="28"/>
-	</class>
-	<class name="android/text/DynamicLayout$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/text/DynamicLayout;"/>
-		<method name="obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setBreakStrategy(I)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setDisplayText(Ljava/lang/CharSequence;)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setEllipsizedWidth(I)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setHyphenationFrequency(I)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setIncludePad(Z)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setJustificationMode(I)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setLineSpacing(FF)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/DynamicLayout$Builder;"/>
-		<method name="setUseLineSpacingFromFallbacks(Z)Landroid/text/DynamicLayout$Builder;"/>
-	</class>
-	<class name="android/text/Editable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/GetChars"/>
-		<implements name="android/text/Spannable"/>
-		<implements name="java/lang/Appendable"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="append(C)Landroid/text/Editable;"/>
-		<method name="append(Ljava/lang/CharSequence;)Landroid/text/Editable;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Landroid/text/Editable;"/>
-		<method name="clear()V"/>
-		<method name="clearSpans()V"/>
-		<method name="delete(II)Landroid/text/Editable;"/>
-		<method name="getFilters()[Landroid/text/InputFilter;"/>
-		<method name="insert(ILjava/lang/CharSequence;)Landroid/text/Editable;"/>
-		<method name="insert(ILjava/lang/CharSequence;II)Landroid/text/Editable;"/>
-		<method name="replace(IILjava/lang/CharSequence;)Landroid/text/Editable;"/>
-		<method name="replace(IILjava/lang/CharSequence;II)Landroid/text/Editable;"/>
-		<method name="setFilters([Landroid/text/InputFilter;)V"/>
-	</class>
-	<class name="android/text/Editable$Factory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/text/Editable$Factory;"/>
-		<method name="newEditable(Ljava/lang/CharSequence;)Landroid/text/Editable;"/>
-	</class>
-	<class name="android/text/GetChars" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="getChars(II[CI)V"/>
-	</class>
-	<class name="android/text/Html" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="escapeHtml(Ljava/lang/CharSequence;)Ljava/lang/String;" since="16"/>
-		<method name="fromHtml(Ljava/lang/String;)Landroid/text/Spanned;" deprecated="24"/>
-		<method name="fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;" since="24"/>
-		<method name="fromHtml(Ljava/lang/String;ILandroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;" since="24"/>
-		<method name="fromHtml(Ljava/lang/String;Landroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;" deprecated="24"/>
-		<method name="toHtml(Landroid/text/Spanned;)Ljava/lang/String;" deprecated="24"/>
-		<method name="toHtml(Landroid/text/Spanned;I)Ljava/lang/String;" since="24"/>
-		<field name="FROM_HTML_MODE_COMPACT" since="24"/>
-		<field name="FROM_HTML_MODE_LEGACY" since="24"/>
-		<field name="FROM_HTML_OPTION_USE_CSS_COLORS" since="24"/>
-		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE" since="24"/>
-		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_DIV" since="24"/>
-		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_HEADING" since="24"/>
-		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_LIST" since="24"/>
-		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM" since="24"/>
-		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH" since="24"/>
-		<field name="TO_HTML_PARAGRAPH_LINES_CONSECUTIVE" since="24"/>
-		<field name="TO_HTML_PARAGRAPH_LINES_INDIVIDUAL" since="24"/>
-	</class>
-	<class name="android/text/Html$ImageGetter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getDrawable(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
-	</class>
-	<class name="android/text/Html$TagHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="handleTag(ZLjava/lang/String;Landroid/text/Editable;Lorg/xml/sax/XMLReader;)V"/>
-	</class>
-	<class name="android/text/InputFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;"/>
-	</class>
-	<class name="android/text/InputFilter$AllCaps" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/InputFilter"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V" since="27"/>
-	</class>
-	<class name="android/text/InputFilter$LengthFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/InputFilter"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getMax()I" since="21"/>
-	</class>
-	<class name="android/text/InputType" since="3">
-		<extends name="java/lang/Object"/>
-		<field name="TYPE_CLASS_DATETIME"/>
-		<field name="TYPE_CLASS_NUMBER"/>
-		<field name="TYPE_CLASS_PHONE"/>
-		<field name="TYPE_CLASS_TEXT"/>
-		<field name="TYPE_DATETIME_VARIATION_DATE"/>
-		<field name="TYPE_DATETIME_VARIATION_NORMAL"/>
-		<field name="TYPE_DATETIME_VARIATION_TIME"/>
-		<field name="TYPE_MASK_CLASS"/>
-		<field name="TYPE_MASK_FLAGS"/>
-		<field name="TYPE_MASK_VARIATION"/>
-		<field name="TYPE_NULL"/>
-		<field name="TYPE_NUMBER_FLAG_DECIMAL"/>
-		<field name="TYPE_NUMBER_FLAG_SIGNED"/>
-		<field name="TYPE_NUMBER_VARIATION_NORMAL" since="11"/>
-		<field name="TYPE_NUMBER_VARIATION_PASSWORD" since="11"/>
-		<field name="TYPE_TEXT_FLAG_AUTO_COMPLETE"/>
-		<field name="TYPE_TEXT_FLAG_AUTO_CORRECT"/>
-		<field name="TYPE_TEXT_FLAG_CAP_CHARACTERS"/>
-		<field name="TYPE_TEXT_FLAG_CAP_SENTENCES"/>
-		<field name="TYPE_TEXT_FLAG_CAP_WORDS"/>
-		<field name="TYPE_TEXT_FLAG_IME_MULTI_LINE"/>
-		<field name="TYPE_TEXT_FLAG_MULTI_LINE"/>
-		<field name="TYPE_TEXT_FLAG_NO_SUGGESTIONS" since="5"/>
-		<field name="TYPE_TEXT_VARIATION_EMAIL_ADDRESS"/>
-		<field name="TYPE_TEXT_VARIATION_EMAIL_SUBJECT"/>
-		<field name="TYPE_TEXT_VARIATION_FILTER"/>
-		<field name="TYPE_TEXT_VARIATION_LONG_MESSAGE"/>
-		<field name="TYPE_TEXT_VARIATION_NORMAL"/>
-		<field name="TYPE_TEXT_VARIATION_PASSWORD"/>
-		<field name="TYPE_TEXT_VARIATION_PERSON_NAME"/>
-		<field name="TYPE_TEXT_VARIATION_PHONETIC"/>
-		<field name="TYPE_TEXT_VARIATION_POSTAL_ADDRESS"/>
-		<field name="TYPE_TEXT_VARIATION_SHORT_MESSAGE"/>
-		<field name="TYPE_TEXT_VARIATION_URI"/>
-		<field name="TYPE_TEXT_VARIATION_VISIBLE_PASSWORD"/>
-		<field name="TYPE_TEXT_VARIATION_WEB_EDIT_TEXT"/>
-		<field name="TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS" since="11"/>
-		<field name="TYPE_TEXT_VARIATION_WEB_PASSWORD" since="11"/>
-	</class>
-	<class name="android/text/Layout" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FF)V"/>
-		<method name="draw(Landroid/graphics/Canvas;)V"/>
-		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V"/>
-		<method name="getAlignment()Landroid/text/Layout$Alignment;"/>
-		<method name="getBottomPadding()I"/>
-		<method name="getCursorPath(ILandroid/graphics/Path;Ljava/lang/CharSequence;)V"/>
-		<method name="getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;)F"/>
-		<method name="getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F"/>
-		<method name="getEllipsisCount(I)I"/>
-		<method name="getEllipsisStart(I)I"/>
-		<method name="getEllipsizedWidth()I"/>
-		<method name="getHeight()I"/>
-		<method name="getLineAscent(I)I"/>
-		<method name="getLineBaseline(I)I"/>
-		<method name="getLineBottom(I)I"/>
-		<method name="getLineBounds(ILandroid/graphics/Rect;)I"/>
-		<method name="getLineContainsTab(I)Z"/>
-		<method name="getLineCount()I"/>
-		<method name="getLineDescent(I)I"/>
-		<method name="getLineDirections(I)Landroid/text/Layout$Directions;"/>
-		<method name="getLineEnd(I)I"/>
-		<method name="getLineForOffset(I)I"/>
-		<method name="getLineForVertical(I)I"/>
-		<method name="getLineLeft(I)F"/>
-		<method name="getLineMax(I)F"/>
-		<method name="getLineRight(I)F"/>
-		<method name="getLineStart(I)I"/>
-		<method name="getLineTop(I)I"/>
-		<method name="getLineVisibleEnd(I)I"/>
-		<method name="getLineWidth(I)F"/>
-		<method name="getOffsetForHorizontal(IF)I"/>
-		<method name="getOffsetToLeftOf(I)I"/>
-		<method name="getOffsetToRightOf(I)I"/>
-		<method name="getPaint()Landroid/text/TextPaint;"/>
-		<method name="getParagraphAlignment(I)Landroid/text/Layout$Alignment;"/>
-		<method name="getParagraphDirection(I)I"/>
-		<method name="getParagraphLeft(I)I"/>
-		<method name="getParagraphRight(I)I"/>
-		<method name="getPrimaryHorizontal(I)F"/>
-		<method name="getSecondaryHorizontal(I)F"/>
-		<method name="getSelectionPath(IILandroid/graphics/Path;)V"/>
-		<method name="getSpacingAdd()F"/>
-		<method name="getSpacingMultiplier()F"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="getTopPadding()I"/>
-		<method name="getWidth()I"/>
-		<method name="increaseWidthTo(I)V"/>
-		<method name="isRtlCharAt(I)Z" since="14"/>
-		<method name="isSpanned()Z"/>
-		<field name="BREAK_STRATEGY_BALANCED" since="23"/>
-		<field name="BREAK_STRATEGY_HIGH_QUALITY" since="23"/>
-		<field name="BREAK_STRATEGY_SIMPLE" since="23"/>
-		<field name="DEFAULT_LINESPACING_ADDITION" since="28"/>
-		<field name="DEFAULT_LINESPACING_MULTIPLIER" since="28"/>
-		<field name="DIR_LEFT_TO_RIGHT"/>
-		<field name="DIR_RIGHT_TO_LEFT"/>
-		<field name="HYPHENATION_FREQUENCY_FULL" since="23"/>
-		<field name="HYPHENATION_FREQUENCY_NONE" since="23"/>
-		<field name="HYPHENATION_FREQUENCY_NORMAL" since="23"/>
-		<field name="JUSTIFICATION_MODE_INTER_WORD" since="26"/>
-		<field name="JUSTIFICATION_MODE_NONE" since="26"/>
-	</class>
-	<class name="android/text/Layout$Alignment" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/text/Layout$Alignment;"/>
-		<method name="values()[Landroid/text/Layout$Alignment;"/>
-		<field name="ALIGN_CENTER"/>
-		<field name="ALIGN_NORMAL"/>
-		<field name="ALIGN_OPPOSITE"/>
-	</class>
-	<class name="android/text/Layout$Directions" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([I)V" since="29"/>
-	</class>
-	<class name="android/text/LoginFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/InputFilter"/>
-		<method name="&lt;init>()V"/>
-		<method name="isAllowed(C)Z"/>
-		<method name="onInvalidCharacter(C)V"/>
-		<method name="onStart()V"/>
-		<method name="onStop()V"/>
-	</class>
-	<class name="android/text/LoginFilter$PasswordFilterGMail" since="1">
-		<extends name="android/text/LoginFilter"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-	</class>
-	<class name="android/text/LoginFilter$UsernameFilterGMail" since="1">
-		<extends name="android/text/LoginFilter"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-	</class>
-	<class name="android/text/LoginFilter$UsernameFilterGeneric" since="1">
-		<extends name="android/text/LoginFilter"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-	</class>
-	<class name="android/text/NoCopySpan" since="3">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="android/text/NoCopySpan$Concrete" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/NoCopySpan"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/text/ParcelableSpan" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="getSpanTypeId()I"/>
-	</class>
-	<class name="android/text/PrecomputedText" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/Spannable"/>
-		<method name="&lt;init>()V"/>
-		<method name="create(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;)Landroid/text/PrecomputedText;"/>
-		<method name="getBounds(IILandroid/graphics/Rect;)V"/>
-		<method name="getParagraphCount()I"/>
-		<method name="getParagraphEnd(I)I"/>
-		<method name="getParagraphStart(I)I"/>
-		<method name="getParams()Landroid/text/PrecomputedText$Params;"/>
-		<method name="getWidth(II)F"/>
-	</class>
-	<class name="android/text/PrecomputedText$Params" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;II)V" since="29"/>
-		<method name="getBreakStrategy()I"/>
-		<method name="getHyphenationFrequency()I"/>
-		<method name="getTextDirection()Landroid/text/TextDirectionHeuristic;"/>
-		<method name="getTextPaint()Landroid/text/TextPaint;"/>
-	</class>
-	<class name="android/text/PrecomputedText$Params$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/text/TextPaint;)V"/>
-		<method name="build()Landroid/text/PrecomputedText$Params;"/>
-		<method name="setBreakStrategy(I)Landroid/text/PrecomputedText$Params$Builder;"/>
-		<method name="setHyphenationFrequency(I)Landroid/text/PrecomputedText$Params$Builder;"/>
-		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/PrecomputedText$Params$Builder;"/>
-	</class>
-	<class name="android/text/Selection" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="extendDown(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="extendLeft(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="extendRight(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="extendSelection(Landroid/text/Spannable;I)V"/>
-		<method name="extendToLeftEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="extendToRightEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="extendUp(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="getSelectionEnd(Ljava/lang/CharSequence;)I"/>
-		<method name="getSelectionStart(Ljava/lang/CharSequence;)I"/>
-		<method name="moveDown(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="moveLeft(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="moveRight(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="moveToLeftEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="moveToRightEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="moveUp(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
-		<method name="removeSelection(Landroid/text/Spannable;)V"/>
-		<method name="selectAll(Landroid/text/Spannable;)V"/>
-		<method name="setSelection(Landroid/text/Spannable;I)V"/>
-		<method name="setSelection(Landroid/text/Spannable;II)V"/>
-		<field name="SELECTION_END"/>
-		<field name="SELECTION_START"/>
-	</class>
-	<class name="android/text/SpanWatcher" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/NoCopySpan" since="3"/>
-		<method name="onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V"/>
-		<method name="onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V"/>
-		<method name="onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V"/>
-	</class>
-	<class name="android/text/Spannable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/Spanned"/>
-		<method name="removeSpan(Ljava/lang/Object;)V"/>
-		<method name="setSpan(Ljava/lang/Object;III)V"/>
-	</class>
-	<class name="android/text/Spannable$Factory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/text/Spannable$Factory;"/>
-		<method name="newSpannable(Ljava/lang/CharSequence;)Landroid/text/Spannable;"/>
-	</class>
-	<class name="android/text/SpannableString" since="1">
-		<extends name="android/text/SpannableStringInternal" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<implements name="android/text/GetChars"/>
-		<implements name="android/text/Spannable"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;"/>
-	</class>
-	<class name="android/text/SpannableStringBuilder" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/Editable"/>
-		<implements name="android/text/GetChars"/>
-		<implements name="android/text/Spannable"/>
-		<implements name="java/lang/Appendable"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
-		<method name="append(C)Landroid/text/SpannableStringBuilder;"/>
-		<method name="append(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
-		<method name="append(Ljava/lang/CharSequence;Ljava/lang/Object;I)Landroid/text/SpannableStringBuilder;" since="21"/>
-		<method name="delete(II)Landroid/text/SpannableStringBuilder;"/>
-		<method name="getTextRunCursor(IIIIILandroid/graphics/Paint;)I" since="11" deprecated="16"/>
-		<method name="getTextWatcherDepth()I" since="23"/>
-		<method name="insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
-		<method name="insert(ILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
-		<method name="replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
-		<method name="replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
-		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
-	</class>
-	<class name="android/text/SpannableStringInternal" since="1" removed="29">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="charAt(I)C"/>
-		<method name="getChars(II[CI)V"/>
-		<method name="getSpanEnd(Ljava/lang/Object;)I"/>
-		<method name="getSpanFlags(Ljava/lang/Object;)I"/>
-		<method name="getSpanStart(Ljava/lang/Object;)I"/>
-		<method name="getSpans(IILjava/lang/Class;)[Ljava/lang/Object;"/>
-		<method name="length()I"/>
-		<method name="nextSpanTransition(IILjava/lang/Class;)I"/>
-	</class>
-	<class name="android/text/Spanned" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="getSpanEnd(Ljava/lang/Object;)I"/>
-		<method name="getSpanFlags(Ljava/lang/Object;)I"/>
-		<method name="getSpanStart(Ljava/lang/Object;)I"/>
-		<method name="getSpans(IILjava/lang/Class;)[Ljava/lang/Object;"/>
-		<method name="nextSpanTransition(IILjava/lang/Class;)I"/>
-		<field name="SPAN_COMPOSING" since="3"/>
-		<field name="SPAN_EXCLUSIVE_EXCLUSIVE"/>
-		<field name="SPAN_EXCLUSIVE_INCLUSIVE"/>
-		<field name="SPAN_INCLUSIVE_EXCLUSIVE"/>
-		<field name="SPAN_INCLUSIVE_INCLUSIVE"/>
-		<field name="SPAN_INTERMEDIATE" since="3"/>
-		<field name="SPAN_MARK_MARK"/>
-		<field name="SPAN_MARK_POINT"/>
-		<field name="SPAN_PARAGRAPH"/>
-		<field name="SPAN_POINT_MARK"/>
-		<field name="SPAN_POINT_MARK_MASK" since="3"/>
-		<field name="SPAN_POINT_POINT"/>
-		<field name="SPAN_PRIORITY"/>
-		<field name="SPAN_PRIORITY_SHIFT"/>
-		<field name="SPAN_USER"/>
-		<field name="SPAN_USER_SHIFT"/>
-	</class>
-	<class name="android/text/SpannedString" since="1">
-		<extends name="android/text/SpannableStringInternal" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<implements name="android/text/GetChars"/>
-		<implements name="android/text/Spanned"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannedString;"/>
-	</class>
-	<class name="android/text/StaticLayout" since="1">
-		<extends name="android/text/Layout"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZLandroid/text/TextUtils$TruncateAt;I)V" deprecated="28"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
-	</class>
-	<class name="android/text/StaticLayout$Builder" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/text/StaticLayout;"/>
-		<method name="obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setBreakStrategy(I)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setEllipsizedWidth(I)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setHyphenationFrequency(I)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setIncludePad(Z)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setIndents([I[I)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setJustificationMode(I)Landroid/text/StaticLayout$Builder;" since="26"/>
-		<method name="setLineSpacing(FF)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setMaxLines(I)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setText(Ljava/lang/CharSequence;)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/StaticLayout$Builder;"/>
-		<method name="setUseLineSpacingFromFallbacks(Z)Landroid/text/StaticLayout$Builder;" since="28"/>
-	</class>
-	<class name="android/text/TextDirectionHeuristic" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="isRtl(Ljava/lang/CharSequence;II)Z"/>
-		<method name="isRtl([CII)Z"/>
-	</class>
-	<class name="android/text/TextDirectionHeuristics" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ANYRTL_LTR"/>
-		<field name="FIRSTSTRONG_LTR"/>
-		<field name="FIRSTSTRONG_RTL"/>
-		<field name="LOCALE"/>
-		<field name="LTR"/>
-		<field name="RTL"/>
-	</class>
-	<class name="android/text/TextPaint" since="1">
-		<extends name="android/graphics/Paint"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/graphics/Paint;)V"/>
-		<method name="set(Landroid/text/TextPaint;)V"/>
-		<field name="baselineShift"/>
-		<field name="bgColor"/>
-		<field name="density" since="5"/>
-		<field name="drawableState"/>
-		<field name="linkColor"/>
-	</class>
-	<class name="android/text/TextUtils" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="commaEllipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLjava/lang/String;Ljava/lang/String;)Ljava/lang/CharSequence;" deprecated="26"/>
-		<method name="concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V"/>
-		<method name="dumpSpans(Ljava/lang/CharSequence;Landroid/util/Printer;Ljava/lang/String;)V" since="3"/>
-		<method name="ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;)Ljava/lang/CharSequence;"/>
-		<method name="ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;ZLandroid/text/TextUtils$EllipsizeCallback;)Ljava/lang/CharSequence;"/>
-		<method name="equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z"/>
-		<method name="expandTemplate(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="getCapsMode(Ljava/lang/CharSequence;II)I" since="3"/>
-		<method name="getChars(Ljava/lang/CharSequence;II[CI)V"/>
-		<method name="getLayoutDirectionFromLocale(Ljava/util/Locale;)I" since="17"/>
-		<method name="getOffsetAfter(Ljava/lang/CharSequence;I)I"/>
-		<method name="getOffsetBefore(Ljava/lang/CharSequence;I)I"/>
-		<method name="getReverse(Ljava/lang/CharSequence;II)Ljava/lang/CharSequence;" deprecated="24"/>
-		<method name="getTrimmedLength(Ljava/lang/CharSequence;)I"/>
-		<method name="htmlEncode(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="indexOf(Ljava/lang/CharSequence;C)I"/>
-		<method name="indexOf(Ljava/lang/CharSequence;CI)I"/>
-		<method name="indexOf(Ljava/lang/CharSequence;CII)I"/>
-		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I"/>
-		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;I)I"/>
-		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;II)I"/>
-		<method name="isDigitsOnly(Ljava/lang/CharSequence;)Z"/>
-		<method name="isEmpty(Ljava/lang/CharSequence;)Z"/>
-		<method name="isGraphic(C)Z" deprecated="24"/>
-		<method name="isGraphic(Ljava/lang/CharSequence;)Z"/>
-		<method name="join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;"/>
-		<method name="join(Ljava/lang/CharSequence;[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="lastIndexOf(Ljava/lang/CharSequence;C)I"/>
-		<method name="lastIndexOf(Ljava/lang/CharSequence;CI)I"/>
-		<method name="lastIndexOf(Ljava/lang/CharSequence;CII)I"/>
-		<method name="listEllipsize(Landroid/content/Context;Ljava/util/List;Ljava/lang/String;Landroid/text/TextPaint;FI)Ljava/lang/CharSequence;" since="26"/>
-		<method name="regionMatches(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z"/>
-		<method name="replace(Ljava/lang/CharSequence;[Ljava/lang/String;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="split(Ljava/lang/String;Ljava/util/regex/Pattern;)[Ljava/lang/String;"/>
-		<method name="stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="substring(Ljava/lang/CharSequence;II)Ljava/lang/String;"/>
-		<method name="writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V"/>
-		<field name="CAP_MODE_CHARACTERS" since="3"/>
-		<field name="CAP_MODE_SENTENCES" since="3"/>
-		<field name="CAP_MODE_WORDS" since="3"/>
-		<field name="CHAR_SEQUENCE_CREATOR"/>
-	</class>
-	<class name="android/text/TextUtils$EllipsizeCallback" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="ellipsized(II)V"/>
-	</class>
-	<class name="android/text/TextUtils$SimpleStringSplitter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/TextUtils$StringSplitter"/>
-		<implements name="java/util/Iterator"/>
-		<method name="&lt;init>(C)V"/>
-		<method name="next()Ljava/lang/String;"/>
-	</class>
-	<class name="android/text/TextUtils$StringSplitter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Iterable"/>
-		<method name="setString(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/text/TextUtils$TruncateAt" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/text/TextUtils$TruncateAt;"/>
-		<method name="values()[Landroid/text/TextUtils$TruncateAt;"/>
-		<field name="END"/>
-		<field name="MARQUEE" since="2"/>
-		<field name="MIDDLE"/>
-		<field name="START"/>
-	</class>
-	<class name="android/text/TextWatcher" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/NoCopySpan" since="3"/>
-		<method name="afterTextChanged(Landroid/text/Editable;)V"/>
-		<method name="beforeTextChanged(Ljava/lang/CharSequence;III)V"/>
-		<method name="onTextChanged(Ljava/lang/CharSequence;III)V"/>
-	</class>
-	<class name="android/text/format/DateFormat" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/lang/CharSequence;J)Ljava/lang/CharSequence;"/>
-		<method name="format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;"/>
-		<method name="format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;"/>
-		<method name="getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;" since="18"/>
-		<method name="getDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
-		<method name="getDateFormatOrder(Landroid/content/Context;)[C"/>
-		<method name="getLongDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
-		<method name="getMediumDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
-		<method name="getTimeFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
-		<method name="is24HourFormat(Landroid/content/Context;)Z"/>
-		<field name="AM_PM" deprecated="18" removed="22"/>
-		<field name="CAPITAL_AM_PM" deprecated="18" removed="22"/>
-		<field name="DATE" deprecated="18" removed="22"/>
-		<field name="DAY" deprecated="18" removed="22"/>
-		<field name="HOUR" deprecated="18" removed="22"/>
-		<field name="HOUR_OF_DAY" deprecated="18" removed="22"/>
-		<field name="MINUTE" deprecated="18" removed="22"/>
-		<field name="MONTH" deprecated="18" removed="22"/>
-		<field name="QUOTE" deprecated="18" removed="22"/>
-		<field name="SECONDS" deprecated="18" removed="22"/>
-		<field name="STANDALONE_MONTH" since="17" deprecated="18" removed="22"/>
-		<field name="TIME_ZONE" deprecated="18" removed="22"/>
-		<field name="YEAR" deprecated="18" removed="22"/>
-	</class>
-	<class name="android/text/format/DateUtils" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;"/>
-		<method name="formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJI)Ljava/util/Formatter;" since="5"/>
-		<method name="formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;" since="9"/>
-		<method name="formatDateTime(Landroid/content/Context;JI)Ljava/lang/String;"/>
-		<method name="formatElapsedTime(J)Ljava/lang/String;"/>
-		<method name="formatElapsedTime(Ljava/lang/StringBuilder;J)Ljava/lang/String;"/>
-		<method name="formatSameDayTime(JJII)Ljava/lang/CharSequence;"/>
-		<method name="getAMPMString(I)Ljava/lang/String;" deprecated="17"/>
-		<method name="getDayOfWeekString(II)Ljava/lang/String;" deprecated="17"/>
-		<method name="getMonthString(II)Ljava/lang/String;" deprecated="17"/>
-		<method name="getRelativeDateTimeString(Landroid/content/Context;JJJI)Ljava/lang/CharSequence;"/>
-		<method name="getRelativeTimeSpanString(J)Ljava/lang/CharSequence;"/>
-		<method name="getRelativeTimeSpanString(JJJ)Ljava/lang/CharSequence;"/>
-		<method name="getRelativeTimeSpanString(JJJI)Ljava/lang/CharSequence;"/>
-		<method name="getRelativeTimeSpanString(Landroid/content/Context;J)Ljava/lang/CharSequence;"/>
-		<method name="getRelativeTimeSpanString(Landroid/content/Context;JZ)Ljava/lang/CharSequence;"/>
-		<method name="isToday(J)Z"/>
-		<field name="ABBREV_MONTH_FORMAT" deprecated="17"/>
-		<field name="ABBREV_WEEKDAY_FORMAT"/>
-		<field name="DAY_IN_MILLIS"/>
-		<field name="FORMAT_12HOUR" deprecated="17"/>
-		<field name="FORMAT_24HOUR" deprecated="17"/>
-		<field name="FORMAT_ABBREV_ALL"/>
-		<field name="FORMAT_ABBREV_MONTH"/>
-		<field name="FORMAT_ABBREV_RELATIVE"/>
-		<field name="FORMAT_ABBREV_TIME"/>
-		<field name="FORMAT_ABBREV_WEEKDAY"/>
-		<field name="FORMAT_CAP_AMPM" deprecated="17"/>
-		<field name="FORMAT_CAP_MIDNIGHT" deprecated="17"/>
-		<field name="FORMAT_CAP_NOON" deprecated="17"/>
-		<field name="FORMAT_CAP_NOON_MIDNIGHT" deprecated="17"/>
-		<field name="FORMAT_NO_MIDNIGHT"/>
-		<field name="FORMAT_NO_MONTH_DAY"/>
-		<field name="FORMAT_NO_NOON"/>
-		<field name="FORMAT_NO_NOON_MIDNIGHT" deprecated="17"/>
-		<field name="FORMAT_NO_YEAR"/>
-		<field name="FORMAT_NUMERIC_DATE"/>
-		<field name="FORMAT_SHOW_DATE"/>
-		<field name="FORMAT_SHOW_TIME"/>
-		<field name="FORMAT_SHOW_WEEKDAY"/>
-		<field name="FORMAT_SHOW_YEAR"/>
-		<field name="FORMAT_UTC" deprecated="16"/>
-		<field name="HOUR_IN_MILLIS"/>
-		<field name="HOUR_MINUTE_24" deprecated="17"/>
-		<field name="LENGTH_LONG" deprecated="17"/>
-		<field name="LENGTH_MEDIUM" deprecated="17"/>
-		<field name="LENGTH_SHORT" deprecated="17"/>
-		<field name="LENGTH_SHORTER" deprecated="17"/>
-		<field name="LENGTH_SHORTEST" deprecated="17"/>
-		<field name="MINUTE_IN_MILLIS"/>
-		<field name="MONTH_DAY_FORMAT"/>
-		<field name="MONTH_FORMAT"/>
-		<field name="NUMERIC_MONTH_FORMAT"/>
-		<field name="SECOND_IN_MILLIS"/>
-		<field name="WEEKDAY_FORMAT"/>
-		<field name="WEEK_IN_MILLIS"/>
-		<field name="YEAR_FORMAT"/>
-		<field name="YEAR_FORMAT_TWO_DIGITS"/>
-		<field name="YEAR_IN_MILLIS"/>
-		<field name="sameMonthTable" deprecated="17"/>
-		<field name="sameYearTable" deprecated="17"/>
-	</class>
-	<class name="android/text/format/Formatter" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="formatFileSize(Landroid/content/Context;J)Ljava/lang/String;"/>
-		<method name="formatIpAddress(I)Ljava/lang/String;" deprecated="16"/>
-		<method name="formatShortFileSize(Landroid/content/Context;J)Ljava/lang/String;" since="5"/>
-	</class>
-	<class name="android/text/format/Time" since="3" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/text/format/Time;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="after(Landroid/text/format/Time;)Z"/>
-		<method name="before(Landroid/text/format/Time;)Z"/>
-		<method name="clear(Ljava/lang/String;)V"/>
-		<method name="compare(Landroid/text/format/Time;Landroid/text/format/Time;)I"/>
-		<method name="format(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="format2445()Ljava/lang/String;"/>
-		<method name="format3339(Z)Ljava/lang/String;"/>
-		<method name="getActualMaximum(I)I"/>
-		<method name="getCurrentTimezone()Ljava/lang/String;"/>
-		<method name="getJulianDay(JJ)I"/>
-		<method name="getJulianMondayFromWeeksSinceEpoch(I)I" since="11"/>
-		<method name="getWeekNumber()I"/>
-		<method name="getWeeksSinceEpochFromJulianDay(II)I" since="11"/>
-		<method name="isEpoch(Landroid/text/format/Time;)Z"/>
-		<method name="normalize(Z)J"/>
-		<method name="parse(Ljava/lang/String;)Z"/>
-		<method name="parse3339(Ljava/lang/String;)Z"/>
-		<method name="set(III)V"/>
-		<method name="set(IIIIII)V"/>
-		<method name="set(J)V"/>
-		<method name="set(Landroid/text/format/Time;)V"/>
-		<method name="setJulianDay(I)J"/>
-		<method name="setToNow()V"/>
-		<method name="switchTimezone(Ljava/lang/String;)V"/>
-		<method name="toMillis(Z)J"/>
-		<field name="EPOCH_JULIAN_DAY"/>
-		<field name="FRIDAY"/>
-		<field name="HOUR"/>
-		<field name="MINUTE"/>
-		<field name="MONDAY"/>
-		<field name="MONDAY_BEFORE_JULIAN_EPOCH" since="11"/>
-		<field name="MONTH"/>
-		<field name="MONTH_DAY"/>
-		<field name="SATURDAY"/>
-		<field name="SECOND"/>
-		<field name="SUNDAY"/>
-		<field name="THURSDAY"/>
-		<field name="TIMEZONE_UTC"/>
-		<field name="TUESDAY"/>
-		<field name="WEDNESDAY"/>
-		<field name="WEEK_DAY"/>
-		<field name="WEEK_NUM"/>
-		<field name="YEAR"/>
-		<field name="YEAR_DAY"/>
-		<field name="allDay"/>
-		<field name="gmtoff"/>
-		<field name="hour"/>
-		<field name="isDst"/>
-		<field name="minute"/>
-		<field name="month"/>
-		<field name="monthDay"/>
-		<field name="second"/>
-		<field name="timezone"/>
-		<field name="weekDay"/>
-		<field name="year"/>
-		<field name="yearDay"/>
-	</class>
-	<class name="android/text/method/ArrowKeyMovementMethod" since="1">
-		<extends name="android/text/method/BaseMovementMethod" since="11"/>
-		<extends name="java/lang/Object" removed="11"/>
-		<implements name="android/text/method/MovementMethod"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/text/method/MovementMethod;"/>
-	</class>
-	<class name="android/text/method/BaseKeyListener" since="1">
-		<extends name="android/text/method/MetaKeyKeyListener"/>
-		<implements name="android/text/method/KeyListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="backspace(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
-		<method name="forwardDelete(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" since="11"/>
-	</class>
-	<class name="android/text/method/BaseMovementMethod" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/method/MovementMethod"/>
-		<method name="&lt;init>()V"/>
-		<method name="bottom(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="down(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="end(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="getMovementMetaState(Landroid/text/Spannable;Landroid/view/KeyEvent;)I"/>
-		<method name="handleMovementKey(Landroid/widget/TextView;Landroid/text/Spannable;IILandroid/view/KeyEvent;)Z"/>
-		<method name="home(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="left(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="lineEnd(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="lineStart(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="pageDown(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="pageUp(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="right(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="top(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="up(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-	</class>
-	<class name="android/text/method/CharacterPickerDialog" since="1">
-		<extends name="android/app/Dialog"/>
-		<implements name="android/view/View$OnClickListener"/>
-		<implements name="android/widget/AdapterView$OnItemClickListener"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;Landroid/text/Editable;Ljava/lang/String;Z)V"/>
-	</class>
-	<class name="android/text/method/DateKeyListener" since="1">
-		<extends name="android/text/method/NumberKeyListener"/>
-		<method name="&lt;init>()V" deprecated="26"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
-		<method name="getInstance()Landroid/text/method/DateKeyListener;" deprecated="26"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DateKeyListener;" since="26"/>
-		<field name="CHARACTERS" deprecated="26"/>
-	</class>
-	<class name="android/text/method/DateTimeKeyListener" since="1">
-		<extends name="android/text/method/NumberKeyListener"/>
-		<method name="&lt;init>()V" deprecated="26"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
-		<method name="getInstance()Landroid/text/method/DateTimeKeyListener;" deprecated="26"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DateTimeKeyListener;" since="26"/>
-		<field name="CHARACTERS" deprecated="26"/>
-	</class>
-	<class name="android/text/method/DialerKeyListener" since="1">
-		<extends name="android/text/method/NumberKeyListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/text/method/DialerKeyListener;"/>
-		<field name="CHARACTERS"/>
-	</class>
-	<class name="android/text/method/DigitsKeyListener" since="1">
-		<extends name="android/text/method/NumberKeyListener"/>
-		<method name="&lt;init>()V" deprecated="26"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
-		<method name="&lt;init>(Ljava/util/Locale;ZZ)V" since="26"/>
-		<method name="&lt;init>(ZZ)V" deprecated="26"/>
-		<method name="getInstance()Landroid/text/method/DigitsKeyListener;" deprecated="26"/>
-		<method name="getInstance(Ljava/lang/String;)Landroid/text/method/DigitsKeyListener;"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DigitsKeyListener;" since="26"/>
-		<method name="getInstance(Ljava/util/Locale;ZZ)Landroid/text/method/DigitsKeyListener;" since="26"/>
-		<method name="getInstance(ZZ)Landroid/text/method/DigitsKeyListener;" deprecated="26"/>
-	</class>
-	<class name="android/text/method/HideReturnsTransformationMethod" since="1">
-		<extends name="android/text/method/ReplacementTransformationMethod"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/text/method/HideReturnsTransformationMethod;"/>
-	</class>
-	<class name="android/text/method/KeyListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="clearMetaKeyState(Landroid/view/View;Landroid/text/Editable;I)V" since="3"/>
-		<method name="getInputType()I" since="3"/>
-		<method name="onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
-		<method name="onKeyOther(Landroid/view/View;Landroid/text/Editable;Landroid/view/KeyEvent;)Z" since="3"/>
-		<method name="onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
-	</class>
-	<class name="android/text/method/LinkMovementMethod" since="1">
-		<extends name="android/text/method/ScrollingMovementMethod"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/text/method/MetaKeyKeyListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="adjustMetaAfterKeypress(J)J" since="3"/>
-		<method name="adjustMetaAfterKeypress(Landroid/text/Spannable;)V"/>
-		<method name="clearMetaKeyState(JI)J" since="3"/>
-		<method name="clearMetaKeyState(Landroid/text/Editable;I)V" since="3"/>
-		<method name="clearMetaKeyState(Landroid/view/View;Landroid/text/Editable;I)V" since="3"/>
-		<method name="getMetaState(J)I" since="3"/>
-		<method name="getMetaState(JI)I" since="3"/>
-		<method name="getMetaState(Ljava/lang/CharSequence;)I"/>
-		<method name="getMetaState(Ljava/lang/CharSequence;I)I"/>
-		<method name="getMetaState(Ljava/lang/CharSequence;ILandroid/view/KeyEvent;)I" since="19"/>
-		<method name="getMetaState(Ljava/lang/CharSequence;Landroid/view/KeyEvent;)I" since="19"/>
-		<method name="handleKeyDown(JILandroid/view/KeyEvent;)J" since="3"/>
-		<method name="handleKeyUp(JILandroid/view/KeyEvent;)J" since="3"/>
-		<method name="isMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z"/>
-		<method name="isSelectingMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z" since="3"/>
-		<method name="onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
-		<method name="onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
-		<method name="resetLockedMeta(J)J" since="3"/>
-		<method name="resetLockedMeta(Landroid/text/Spannable;)V"/>
-		<method name="resetMetaState(Landroid/text/Spannable;)V"/>
-		<field name="META_ALT_LOCKED"/>
-		<field name="META_ALT_ON"/>
-		<field name="META_CAP_LOCKED"/>
-		<field name="META_SHIFT_ON"/>
-		<field name="META_SYM_LOCKED"/>
-		<field name="META_SYM_ON"/>
-	</class>
-	<class name="android/text/method/MovementMethod" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="canSelectArbitrarily()Z"/>
-		<method name="initialize(Landroid/widget/TextView;Landroid/text/Spannable;)V"/>
-		<method name="onGenericMotionEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z" since="12"/>
-		<method name="onKeyDown(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z"/>
-		<method name="onKeyOther(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/KeyEvent;)Z" since="3"/>
-		<method name="onKeyUp(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z"/>
-		<method name="onTakeFocus(Landroid/widget/TextView;Landroid/text/Spannable;I)V"/>
-		<method name="onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z"/>
-		<method name="onTrackballEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/text/method/MultiTapKeyListener" since="1">
-		<extends name="android/text/method/BaseKeyListener"/>
-		<implements name="android/text/SpanWatcher"/>
-		<method name="&lt;init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V"/>
-		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/MultiTapKeyListener;"/>
-	</class>
-	<class name="android/text/method/NumberKeyListener" since="1">
-		<extends name="android/text/method/BaseKeyListener"/>
-		<implements name="android/text/InputFilter"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAcceptedChars()[C"/>
-		<method name="lookup(Landroid/view/KeyEvent;Landroid/text/Spannable;)I"/>
-		<method name="ok([CC)Z"/>
-	</class>
-	<class name="android/text/method/PasswordTransformationMethod" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/TextWatcher"/>
-		<implements name="android/text/method/TransformationMethod"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/text/method/PasswordTransformationMethod;"/>
-	</class>
-	<class name="android/text/method/QwertyKeyListener" since="1">
-		<extends name="android/text/method/BaseKeyListener"/>
-		<method name="&lt;init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V"/>
-		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/QwertyKeyListener;"/>
-		<method name="getInstanceForFullKeyboard()Landroid/text/method/QwertyKeyListener;" since="11"/>
-		<method name="markAsReplaced(Landroid/text/Spannable;IILjava/lang/String;)V"/>
-	</class>
-	<class name="android/text/method/ReplacementTransformationMethod" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/method/TransformationMethod"/>
-		<method name="&lt;init>()V"/>
-		<method name="getOriginal()[C"/>
-		<method name="getReplacement()[C"/>
-	</class>
-	<class name="android/text/method/ScrollingMovementMethod" since="1">
-		<extends name="android/text/method/BaseMovementMethod" since="11"/>
-		<extends name="java/lang/Object" removed="11"/>
-		<implements name="android/text/method/MovementMethod"/>
-		<method name="&lt;init>()V"/>
-		<method name="down(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="getInstance()Landroid/text/method/MovementMethod;"/>
-		<method name="left(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="right(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-		<method name="up(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
-	</class>
-	<class name="android/text/method/SingleLineTransformationMethod" since="1">
-		<extends name="android/text/method/ReplacementTransformationMethod"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/text/method/SingleLineTransformationMethod;"/>
-	</class>
-	<class name="android/text/method/TextKeyListener" since="1">
-		<extends name="android/text/method/BaseKeyListener"/>
-		<implements name="android/text/SpanWatcher"/>
-		<method name="&lt;init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V"/>
-		<method name="clear(Landroid/text/Editable;)V"/>
-		<method name="getInstance()Landroid/text/method/TextKeyListener;"/>
-		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/TextKeyListener;"/>
-		<method name="release()V"/>
-		<method name="shouldCap(Landroid/text/method/TextKeyListener$Capitalize;Ljava/lang/CharSequence;I)Z"/>
-	</class>
-	<class name="android/text/method/TextKeyListener$Capitalize" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/text/method/TextKeyListener$Capitalize;"/>
-		<method name="values()[Landroid/text/method/TextKeyListener$Capitalize;"/>
-		<field name="CHARACTERS"/>
-		<field name="NONE"/>
-		<field name="SENTENCES"/>
-		<field name="WORDS"/>
-	</class>
-	<class name="android/text/method/TimeKeyListener" since="1">
-		<extends name="android/text/method/NumberKeyListener"/>
-		<method name="&lt;init>()V" deprecated="26"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
-		<method name="getInstance()Landroid/text/method/TimeKeyListener;" deprecated="26"/>
-		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/TimeKeyListener;" since="26"/>
-		<field name="CHARACTERS" deprecated="26"/>
-	</class>
-	<class name="android/text/method/Touch" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInitialScrollX(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3"/>
-		<method name="getInitialScrollY(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3"/>
-		<method name="onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z"/>
-		<method name="scrollTo(Landroid/widget/TextView;Landroid/text/Layout;II)V"/>
-	</class>
-	<class name="android/text/method/TransformationMethod" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getTransformation(Ljava/lang/CharSequence;Landroid/view/View;)Ljava/lang/CharSequence;"/>
-		<method name="onFocusChanged(Landroid/view/View;Ljava/lang/CharSequence;ZILandroid/graphics/Rect;)V"/>
-	</class>
-	<class name="android/text/style/AbsoluteSizeSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IZ)V" since="5"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getDip()Z" since="5"/>
-		<method name="getSize()I"/>
-	</class>
-	<class name="android/text/style/AlignmentSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/ParagraphStyle"/>
-		<method name="getAlignment()Landroid/text/Layout$Alignment;"/>
-	</class>
-	<class name="android/text/style/AlignmentSpan$Standard" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/AlignmentSpan"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="&lt;init>(Landroid/text/Layout$Alignment;)V"/>
-	</class>
-	<class name="android/text/style/BackgroundColorSpan" since="1">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getBackgroundColor()I"/>
-	</class>
-	<class name="android/text/style/BulletSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/LeadingMarginSpan"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(III)V" since="28"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getBulletRadius()I" since="28"/>
-		<method name="getColor()I" since="28"/>
-		<method name="getGapWidth()I" since="28"/>
-		<field name="STANDARD_GAP_WIDTH"/>
-	</class>
-	<class name="android/text/style/CharacterStyle" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getUnderlying()Landroid/text/style/CharacterStyle;"/>
-		<method name="updateDrawState(Landroid/text/TextPaint;)V"/>
-		<method name="wrap(Landroid/text/style/CharacterStyle;)Landroid/text/style/CharacterStyle;"/>
-	</class>
-	<class name="android/text/style/ClickableSpan" since="1">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="onClick(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/text/style/DrawableMarginSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/LeadingMarginSpan"/>
-		<implements name="android/text/style/LineHeightSpan"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;I)V"/>
-	</class>
-	<class name="android/text/style/DynamicDrawableSpan" since="1">
-		<extends name="android/text/style/ReplacementSpan"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V" since="3"/>
-		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getVerticalAlignment()I" since="3"/>
-		<field name="ALIGN_BASELINE" since="3"/>
-		<field name="ALIGN_BOTTOM" since="3"/>
-		<field name="mVerticalAlignment" since="3"/>
-	</class>
-	<class name="android/text/style/EasyEditSpan" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/ParcelableSpan"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/app/PendingIntent;)V" since="18"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="18"/>
-		<field name="EXTRA_TEXT_CHANGED_TYPE" since="18"/>
-		<field name="TEXT_DELETED" since="18"/>
-		<field name="TEXT_MODIFIED" since="18"/>
-	</class>
-	<class name="android/text/style/ForegroundColorSpan" since="1">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getForegroundColor()I"/>
-	</class>
-	<class name="android/text/style/IconMarginSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/LeadingMarginSpan"/>
-		<implements name="android/text/style/LineHeightSpan"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;)V"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;I)V"/>
-	</class>
-	<class name="android/text/style/ImageSpan" since="1">
-		<extends name="android/text/style/DynamicDrawableSpan"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;II)V" since="3"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/graphics/Bitmap;)V" since="4"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/graphics/Bitmap;I)V" since="4"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;I)V" since="3"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/graphics/Bitmap;I)V" since="3" deprecated="16"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;I)V" since="3"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;I)V" since="3"/>
-		<method name="getSource()Ljava/lang/String;"/>
-	</class>
-	<class name="android/text/style/LeadingMarginSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/ParagraphStyle"/>
-		<method name="drawLeadingMargin(Landroid/graphics/Canvas;Landroid/graphics/Paint;IIIIILjava/lang/CharSequence;IIZLandroid/text/Layout;)V"/>
-		<method name="getLeadingMargin(Z)I"/>
-	</class>
-	<class name="android/text/style/LeadingMarginSpan$LeadingMarginSpan2" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/LeadingMarginSpan"/>
-		<implements name="android/text/style/WrapTogetherSpan"/>
-		<method name="getLeadingMarginLineCount()I"/>
-	</class>
-	<class name="android/text/style/LeadingMarginSpan$Standard" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/LeadingMarginSpan"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-	</class>
-	<class name="android/text/style/LineBackgroundSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/ParagraphStyle"/>
-		<method name="drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Paint;IIIIILjava/lang/CharSequence;III)V"/>
-	</class>
-	<class name="android/text/style/LineHeightSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/ParagraphStyle"/>
-		<implements name="android/text/style/WrapTogetherSpan"/>
-		<method name="chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V"/>
-	</class>
-	<class name="android/text/style/LineHeightSpan$WithDensity" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/LineHeightSpan"/>
-		<method name="chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V"/>
-	</class>
-	<class name="android/text/style/LocaleSpan" since="17">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan"/>
-		<method name="&lt;init>(Landroid/os/LocaleList;)V" since="24"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getLocales()Landroid/os/LocaleList;" since="24"/>
-	</class>
-	<class name="android/text/style/MaskFilterSpan" since="1">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-		<method name="&lt;init>(Landroid/graphics/MaskFilter;)V"/>
-		<method name="getMaskFilter()Landroid/graphics/MaskFilter;"/>
-	</class>
-	<class name="android/text/style/MetricAffectingSpan" since="1">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/style/UpdateLayout"/>
-		<method name="&lt;init>()V"/>
-		<method name="getUnderlying()Landroid/text/style/MetricAffectingSpan;"/>
-		<method name="updateMeasureState(Landroid/text/TextPaint;)V"/>
-	</class>
-	<class name="android/text/style/ParagraphStyle" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="android/text/style/QuoteSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/LeadingMarginSpan"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(III)V" since="28"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getColor()I"/>
-		<method name="getGapWidth()I" since="28"/>
-		<method name="getStripeWidth()I" since="28"/>
-		<field name="STANDARD_COLOR" since="28"/>
-		<field name="STANDARD_GAP_WIDTH_PX" since="28"/>
-		<field name="STANDARD_STRIPE_WIDTH_PX" since="28"/>
-	</class>
-	<class name="android/text/style/RasterizerSpan" since="1" removed="26">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-		<method name="&lt;init>(Landroid/graphics/Rasterizer;)V"/>
-		<method name="getRasterizer()Landroid/graphics/Rasterizer;"/>
-	</class>
-	<class name="android/text/style/RelativeSizeSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getSizeChange()F"/>
-	</class>
-	<class name="android/text/style/ReplacementSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<method name="&lt;init>()V"/>
-		<method name="draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V"/>
-		<method name="getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I"/>
-	</class>
-	<class name="android/text/style/ScaleXSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getScaleX()F"/>
-	</class>
-	<class name="android/text/style/StrikethroughSpan" since="1">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-	</class>
-	<class name="android/text/style/StyleSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="getStyle()I"/>
-	</class>
-	<class name="android/text/style/SubscriptSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-	</class>
-	<class name="android/text/style/SuggestionSpan" since="14">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/ParcelableSpan"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/Locale;[Ljava/lang/String;ILjava/lang/Class;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;[Ljava/lang/String;I)V"/>
-		<method name="getFlags()I"/>
-		<method name="getLocale()Ljava/lang/String;" deprecated="24"/>
-		<method name="getLocaleObject()Ljava/util/Locale;" since="24"/>
-		<method name="getSuggestions()[Ljava/lang/String;"/>
-		<method name="setFlags(I)V"/>
-		<field name="ACTION_SUGGESTION_PICKED"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_AUTO_CORRECTION" since="15"/>
-		<field name="FLAG_EASY_CORRECT"/>
-		<field name="FLAG_MISSPELLED"/>
-		<field name="SUGGESTIONS_MAX_SIZE"/>
-		<field name="SUGGESTION_SPAN_PICKED_AFTER"/>
-		<field name="SUGGESTION_SPAN_PICKED_BEFORE"/>
-		<field name="SUGGESTION_SPAN_PICKED_HASHCODE"/>
-	</class>
-	<class name="android/text/style/SuperscriptSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-	</class>
-	<class name="android/text/style/TabStopSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/ParagraphStyle"/>
-		<method name="getTabStop()I"/>
-	</class>
-	<class name="android/text/style/TabStopSpan$Standard" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/TabStopSpan"/>
-		<method name="&lt;init>(I)V"/>
-	</class>
-	<class name="android/text/style/TextAppearanceSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;II)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="&lt;init>(Ljava/lang/String;IILandroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V"/>
-		<method name="getFamily()Ljava/lang/String;"/>
-		<method name="getLinkTextColor()Landroid/content/res/ColorStateList;"/>
-		<method name="getTextColor()Landroid/content/res/ColorStateList;"/>
-		<method name="getTextSize()I"/>
-		<method name="getTextStyle()I"/>
-	</class>
-	<class name="android/text/style/TtsSpan" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/ParcelableSpan"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
-		<method name="getArgs()Landroid/os/PersistableBundle;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<field name="ANIMACY_ANIMATE"/>
-		<field name="ANIMACY_INANIMATE"/>
-		<field name="ARG_ANIMACY"/>
-		<field name="ARG_CASE"/>
-		<field name="ARG_COUNTRY_CODE"/>
-		<field name="ARG_CURRENCY"/>
-		<field name="ARG_DAY"/>
-		<field name="ARG_DENOMINATOR"/>
-		<field name="ARG_DIGITS"/>
-		<field name="ARG_DOMAIN"/>
-		<field name="ARG_EXTENSION"/>
-		<field name="ARG_FRACTIONAL_PART"/>
-		<field name="ARG_FRAGMENT_ID"/>
-		<field name="ARG_GENDER"/>
-		<field name="ARG_HOURS"/>
-		<field name="ARG_INTEGER_PART"/>
-		<field name="ARG_MINUTES"/>
-		<field name="ARG_MONTH"/>
-		<field name="ARG_MULTIPLICITY"/>
-		<field name="ARG_NUMBER"/>
-		<field name="ARG_NUMBER_PARTS"/>
-		<field name="ARG_NUMERATOR"/>
-		<field name="ARG_PASSWORD"/>
-		<field name="ARG_PATH"/>
-		<field name="ARG_PORT"/>
-		<field name="ARG_PROTOCOL"/>
-		<field name="ARG_QUANTITY"/>
-		<field name="ARG_QUERY_STRING"/>
-		<field name="ARG_TEXT"/>
-		<field name="ARG_UNIT"/>
-		<field name="ARG_USERNAME"/>
-		<field name="ARG_VERBATIM"/>
-		<field name="ARG_WEEKDAY"/>
-		<field name="ARG_YEAR"/>
-		<field name="CASE_ABLATIVE"/>
-		<field name="CASE_ACCUSATIVE"/>
-		<field name="CASE_DATIVE"/>
-		<field name="CASE_GENITIVE"/>
-		<field name="CASE_INSTRUMENTAL"/>
-		<field name="CASE_LOCATIVE"/>
-		<field name="CASE_NOMINATIVE"/>
-		<field name="CASE_VOCATIVE"/>
-		<field name="GENDER_FEMALE"/>
-		<field name="GENDER_MALE"/>
-		<field name="GENDER_NEUTRAL"/>
-		<field name="MONTH_APRIL"/>
-		<field name="MONTH_AUGUST"/>
-		<field name="MONTH_DECEMBER"/>
-		<field name="MONTH_FEBRUARY"/>
-		<field name="MONTH_JANUARY"/>
-		<field name="MONTH_JULY"/>
-		<field name="MONTH_JUNE"/>
-		<field name="MONTH_MARCH"/>
-		<field name="MONTH_MAY"/>
-		<field name="MONTH_NOVEMBER"/>
-		<field name="MONTH_OCTOBER"/>
-		<field name="MONTH_SEPTEMBER"/>
-		<field name="MULTIPLICITY_DUAL"/>
-		<field name="MULTIPLICITY_PLURAL"/>
-		<field name="MULTIPLICITY_SINGLE"/>
-		<field name="TYPE_CARDINAL"/>
-		<field name="TYPE_DATE"/>
-		<field name="TYPE_DECIMAL"/>
-		<field name="TYPE_DIGITS"/>
-		<field name="TYPE_ELECTRONIC"/>
-		<field name="TYPE_FRACTION"/>
-		<field name="TYPE_MEASURE"/>
-		<field name="TYPE_MONEY"/>
-		<field name="TYPE_ORDINAL"/>
-		<field name="TYPE_TELEPHONE"/>
-		<field name="TYPE_TEXT"/>
-		<field name="TYPE_TIME"/>
-		<field name="TYPE_VERBATIM"/>
-		<field name="WEEKDAY_FRIDAY"/>
-		<field name="WEEKDAY_MONDAY"/>
-		<field name="WEEKDAY_SATURDAY"/>
-		<field name="WEEKDAY_SUNDAY"/>
-		<field name="WEEKDAY_THURSDAY"/>
-		<field name="WEEKDAY_TUESDAY"/>
-		<field name="WEEKDAY_WEDNESDAY"/>
-	</class>
-	<class name="android/text/style/TtsSpan$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="build()Landroid/text/style/TtsSpan;"/>
-		<method name="setIntArgument(Ljava/lang/String;I)Landroid/text/style/TtsSpan$Builder;"/>
-		<method name="setLongArgument(Ljava/lang/String;J)Landroid/text/style/TtsSpan$Builder;"/>
-		<method name="setStringArgument(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$Builder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$CardinalBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="setNumber(J)Landroid/text/style/TtsSpan$CardinalBuilder;"/>
-		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$CardinalBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$DateBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)V"/>
-		<method name="setDay(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
-		<method name="setMonth(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
-		<method name="setWeekday(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
-		<method name="setYear(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$DecimalBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(DII)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setArgumentsFromDouble(DII)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
-		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
-		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
-		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$DigitsBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="setDigits(Ljava/lang/String;)Landroid/text/style/TtsSpan$DigitsBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$ElectronicBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="setDomain(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setEmailArguments(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setFragmentId(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setPassword(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setPath(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setPort(I)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setProtocol(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setQueryString(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-		<method name="setUsername(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$FractionBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(JJJ)V"/>
-		<method name="setDenominator(J)Landroid/text/style/TtsSpan$FractionBuilder;"/>
-		<method name="setDenominator(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;"/>
-		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$FractionBuilder;"/>
-		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;"/>
-		<method name="setNumerator(J)Landroid/text/style/TtsSpan$FractionBuilder;"/>
-		<method name="setNumerator(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$MeasureBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="setDenominator(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setDenominator(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setNumber(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setNumerator(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setNumerator(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-		<method name="setUnit(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$MoneyBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="setCurrency(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
-		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
-		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
-		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
-		<method name="setQuantity(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$OrdinalBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="setNumber(J)Landroid/text/style/TtsSpan$OrdinalBuilder;"/>
-		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$OrdinalBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$SemioticClassBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$Builder"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="setAnimacy(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
-		<method name="setCase(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
-		<method name="setGender(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
-		<method name="setMultiplicity(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$TelephoneBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="setCountryCode(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;"/>
-		<method name="setExtension(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;"/>
-		<method name="setNumberParts(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$TextBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="setText(Ljava/lang/String;)Landroid/text/style/TtsSpan$TextBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$TimeBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="setHours(I)Landroid/text/style/TtsSpan$TimeBuilder;"/>
-		<method name="setMinutes(I)Landroid/text/style/TtsSpan$TimeBuilder;"/>
-	</class>
-	<class name="android/text/style/TtsSpan$VerbatimBuilder" since="21">
-		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="setVerbatim(Ljava/lang/String;)Landroid/text/style/TtsSpan$VerbatimBuilder;"/>
-	</class>
-	<class name="android/text/style/TypefaceSpan" since="1">
-		<extends name="android/text/style/MetricAffectingSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(Landroid/graphics/Typeface;)V" since="28"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getFamily()Ljava/lang/String;"/>
-		<method name="getTypeface()Landroid/graphics/Typeface;" since="28"/>
-	</class>
-	<class name="android/text/style/URLSpan" since="1">
-		<extends name="android/text/style/ClickableSpan"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getURL()Ljava/lang/String;"/>
-	</class>
-	<class name="android/text/style/UnderlineSpan" since="1">
-		<extends name="android/text/style/CharacterStyle"/>
-		<implements name="android/text/ParcelableSpan" since="3"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
-	</class>
-	<class name="android/text/style/UpdateAppearance" since="3">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="android/text/style/UpdateLayout" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/UpdateAppearance" since="3"/>
-	</class>
-	<class name="android/text/style/WrapTogetherSpan" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/text/style/ParagraphStyle"/>
-	</class>
-	<class name="android/text/util/Linkify" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addLinks(Landroid/text/Spannable;I)Z"/>
-		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;)Z"/>
-		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z"/>
-		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z" since="24"/>
-		<method name="addLinks(Landroid/widget/TextView;I)Z"/>
-		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;)V"/>
-		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V"/>
-		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V" since="24"/>
-		<field name="ALL"/>
-		<field name="EMAIL_ADDRESSES"/>
-		<field name="MAP_ADDRESSES" deprecated="28"/>
-		<field name="PHONE_NUMBERS"/>
-		<field name="WEB_URLS"/>
-		<field name="sPhoneNumberMatchFilter"/>
-		<field name="sPhoneNumberTransformFilter"/>
-		<field name="sUrlMatchFilter"/>
-	</class>
-	<class name="android/text/util/Linkify$MatchFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="acceptMatch(Ljava/lang/CharSequence;II)Z"/>
-	</class>
-	<class name="android/text/util/Linkify$TransformFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="transformUrl(Ljava/util/regex/Matcher;Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/text/util/Rfc822Token" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getAddress()Ljava/lang/String;"/>
-		<method name="getComment()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="quoteComment(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="quoteName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="quoteNameIfNecessary(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="setAddress(Ljava/lang/String;)V"/>
-		<method name="setComment(Ljava/lang/String;)V"/>
-		<method name="setName(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/text/util/Rfc822Tokenizer" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/MultiAutoCompleteTextView$Tokenizer"/>
-		<method name="&lt;init>()V"/>
-		<method name="tokenize(Ljava/lang/CharSequence;)[Landroid/text/util/Rfc822Token;"/>
-		<method name="tokenize(Ljava/lang/CharSequence;Ljava/util/Collection;)V" since="8"/>
-	</class>
-	<class name="android/transition/ArcMotion" since="21">
-		<extends name="android/transition/PathMotion"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="getMaximumAngle()F"/>
-		<method name="getMinimumHorizontalAngle()F"/>
-		<method name="getMinimumVerticalAngle()F"/>
-		<method name="setMaximumAngle(F)V"/>
-		<method name="setMinimumHorizontalAngle(F)V"/>
-		<method name="setMinimumVerticalAngle(F)V"/>
-	</class>
-	<class name="android/transition/AutoTransition" since="19">
-		<extends name="android/transition/TransitionSet"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
-	</class>
-	<class name="android/transition/ChangeBounds" since="19">
-		<extends name="android/transition/Transition"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
-		<method name="getResizeClip()Z" since="22"/>
-		<method name="setReparent(Z)V" deprecated="21"/>
-		<method name="setResizeClip(Z)V"/>
-	</class>
-	<class name="android/transition/ChangeClipBounds" since="21">
-		<extends name="android/transition/Transition"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/transition/ChangeImageTransform" since="21">
-		<extends name="android/transition/Transition"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/transition/ChangeScroll" since="23">
-		<extends name="android/transition/Transition"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/transition/ChangeTransform" since="21">
-		<extends name="android/transition/Transition"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="getReparent()Z"/>
-		<method name="getReparentWithOverlay()Z"/>
-		<method name="setReparent(Z)V"/>
-		<method name="setReparentWithOverlay(Z)V"/>
-	</class>
-	<class name="android/transition/CircularPropagation" since="21">
-		<extends name="android/transition/VisibilityPropagation"/>
-		<method name="&lt;init>()V"/>
-		<method name="setPropagationSpeed(F)V"/>
-	</class>
-	<class name="android/transition/Explode" since="21">
-		<extends name="android/transition/Visibility"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/transition/Fade" since="19">
-		<extends name="android/transition/Visibility"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
-		<field name="IN"/>
-		<field name="OUT"/>
-	</class>
-	<class name="android/transition/PathMotion" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="getPath(FFFF)Landroid/graphics/Path;"/>
-	</class>
-	<class name="android/transition/PatternPathMotion" since="21">
-		<extends name="android/transition/PathMotion"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/graphics/Path;)V"/>
-		<method name="getPatternPath()Landroid/graphics/Path;"/>
-		<method name="setPatternPath(Landroid/graphics/Path;)V"/>
-	</class>
-	<class name="android/transition/Scene" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup;Landroid/view/View;)V" since="21"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup;Landroid/view/ViewGroup;)V" deprecated="21"/>
-		<method name="enter()V"/>
-		<method name="exit()V"/>
-		<method name="getSceneForLayout(Landroid/view/ViewGroup;ILandroid/content/Context;)Landroid/transition/Scene;"/>
-		<method name="getSceneRoot()Landroid/view/ViewGroup;"/>
-		<method name="setEnterAction(Ljava/lang/Runnable;)V"/>
-		<method name="setExitAction(Ljava/lang/Runnable;)V"/>
-	</class>
-	<class name="android/transition/SidePropagation" since="21">
-		<extends name="android/transition/VisibilityPropagation"/>
-		<method name="&lt;init>()V"/>
-		<method name="setPropagationSpeed(F)V"/>
-		<method name="setSide(I)V"/>
-	</class>
-	<class name="android/transition/Slide" since="21">
-		<extends name="android/transition/Visibility"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="getSlideEdge()I"/>
-		<method name="setSlideEdge(I)V"/>
-	</class>
-	<class name="android/transition/Transition" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
-		<method name="addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;"/>
-		<method name="addTarget(I)Landroid/transition/Transition;"/>
-		<method name="addTarget(Landroid/view/View;)Landroid/transition/Transition;"/>
-		<method name="addTarget(Ljava/lang/Class;)Landroid/transition/Transition;" since="21"/>
-		<method name="addTarget(Ljava/lang/String;)Landroid/transition/Transition;" since="21"/>
-		<method name="canRemoveViews()Z" since="21"/>
-		<method name="captureEndValues(Landroid/transition/TransitionValues;)V"/>
-		<method name="captureStartValues(Landroid/transition/TransitionValues;)V"/>
-		<method name="clone()Landroid/transition/Transition;"/>
-		<method name="createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;"/>
-		<method name="excludeChildren(IZ)Landroid/transition/Transition;"/>
-		<method name="excludeChildren(Landroid/view/View;Z)Landroid/transition/Transition;"/>
-		<method name="excludeChildren(Ljava/lang/Class;Z)Landroid/transition/Transition;"/>
-		<method name="excludeTarget(IZ)Landroid/transition/Transition;"/>
-		<method name="excludeTarget(Landroid/view/View;Z)Landroid/transition/Transition;"/>
-		<method name="excludeTarget(Ljava/lang/Class;Z)Landroid/transition/Transition;"/>
-		<method name="excludeTarget(Ljava/lang/String;Z)Landroid/transition/Transition;" since="21"/>
-		<method name="getDuration()J"/>
-		<method name="getEpicenter()Landroid/graphics/Rect;" since="21"/>
-		<method name="getEpicenterCallback()Landroid/transition/Transition$EpicenterCallback;" since="21"/>
-		<method name="getInterpolator()Landroid/animation/TimeInterpolator;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPathMotion()Landroid/transition/PathMotion;" since="21"/>
-		<method name="getPropagation()Landroid/transition/TransitionPropagation;" since="21"/>
-		<method name="getStartDelay()J"/>
-		<method name="getTargetIds()Ljava/util/List;"/>
-		<method name="getTargetNames()Ljava/util/List;" since="21"/>
-		<method name="getTargetTypes()Ljava/util/List;" since="21"/>
-		<method name="getTargets()Ljava/util/List;"/>
-		<method name="getTransitionProperties()[Ljava/lang/String;"/>
-		<method name="getTransitionValues(Landroid/view/View;Z)Landroid/transition/TransitionValues;"/>
-		<method name="isTransitionRequired(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Z" since="23"/>
-		<method name="removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;"/>
-		<method name="removeTarget(I)Landroid/transition/Transition;"/>
-		<method name="removeTarget(Landroid/view/View;)Landroid/transition/Transition;"/>
-		<method name="removeTarget(Ljava/lang/Class;)Landroid/transition/Transition;" since="21"/>
-		<method name="removeTarget(Ljava/lang/String;)Landroid/transition/Transition;" since="21"/>
-		<method name="setDuration(J)Landroid/transition/Transition;"/>
-		<method name="setEpicenterCallback(Landroid/transition/Transition$EpicenterCallback;)V" since="21"/>
-		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/Transition;"/>
-		<method name="setMatchOrder([I)V" since="21"/>
-		<method name="setPathMotion(Landroid/transition/PathMotion;)V" since="21"/>
-		<method name="setPropagation(Landroid/transition/TransitionPropagation;)V" since="21"/>
-		<method name="setStartDelay(J)Landroid/transition/Transition;"/>
-		<field name="MATCH_ID" since="21"/>
-		<field name="MATCH_INSTANCE" since="21"/>
-		<field name="MATCH_ITEM_ID" since="21"/>
-		<field name="MATCH_NAME" since="21"/>
-	</class>
-	<class name="android/transition/Transition$EpicenterCallback" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGetEpicenter(Landroid/transition/Transition;)Landroid/graphics/Rect;"/>
-	</class>
-	<class name="android/transition/Transition$TransitionListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onTransitionCancel(Landroid/transition/Transition;)V"/>
-		<method name="onTransitionEnd(Landroid/transition/Transition;)V"/>
-		<method name="onTransitionPause(Landroid/transition/Transition;)V"/>
-		<method name="onTransitionResume(Landroid/transition/Transition;)V"/>
-		<method name="onTransitionStart(Landroid/transition/Transition;)V"/>
-	</class>
-	<class name="android/transition/TransitionInflater" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="from(Landroid/content/Context;)Landroid/transition/TransitionInflater;"/>
-		<method name="inflateTransition(I)Landroid/transition/Transition;"/>
-		<method name="inflateTransitionManager(ILandroid/view/ViewGroup;)Landroid/transition/TransitionManager;"/>
-	</class>
-	<class name="android/transition/TransitionListenerAdapter" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/transition/Transition$TransitionListener"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/transition/TransitionManager" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="beginDelayedTransition(Landroid/view/ViewGroup;)V"/>
-		<method name="beginDelayedTransition(Landroid/view/ViewGroup;Landroid/transition/Transition;)V"/>
-		<method name="endTransitions(Landroid/view/ViewGroup;)V" since="23"/>
-		<method name="go(Landroid/transition/Scene;)V"/>
-		<method name="go(Landroid/transition/Scene;Landroid/transition/Transition;)V"/>
-		<method name="setTransition(Landroid/transition/Scene;Landroid/transition/Scene;Landroid/transition/Transition;)V"/>
-		<method name="setTransition(Landroid/transition/Scene;Landroid/transition/Transition;)V"/>
-		<method name="transitionTo(Landroid/transition/Scene;)V"/>
-	</class>
-	<class name="android/transition/TransitionPropagation" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="captureValues(Landroid/transition/TransitionValues;)V"/>
-		<method name="getPropagationProperties()[Ljava/lang/String;"/>
-		<method name="getStartDelay(Landroid/view/ViewGroup;Landroid/transition/Transition;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)J"/>
-	</class>
-	<class name="android/transition/TransitionSet" since="19">
-		<extends name="android/transition/Transition"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
-		<method name="addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;"/>
-		<method name="addTarget(I)Landroid/transition/TransitionSet;"/>
-		<method name="addTarget(Landroid/view/View;)Landroid/transition/TransitionSet;"/>
-		<method name="addTarget(Ljava/lang/Class;)Landroid/transition/TransitionSet;" since="21"/>
-		<method name="addTarget(Ljava/lang/String;)Landroid/transition/TransitionSet;" since="21"/>
-		<method name="addTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;"/>
-		<method name="clone()Landroid/transition/TransitionSet;"/>
-		<method name="getOrdering()I"/>
-		<method name="getTransitionAt(I)Landroid/transition/Transition;" since="21"/>
-		<method name="getTransitionCount()I" since="21"/>
-		<method name="removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;"/>
-		<method name="removeTarget(I)Landroid/transition/TransitionSet;"/>
-		<method name="removeTarget(Landroid/view/View;)Landroid/transition/TransitionSet;"/>
-		<method name="removeTarget(Ljava/lang/Class;)Landroid/transition/TransitionSet;" since="21"/>
-		<method name="removeTarget(Ljava/lang/String;)Landroid/transition/TransitionSet;" since="21"/>
-		<method name="removeTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;"/>
-		<method name="setDuration(J)Landroid/transition/TransitionSet;"/>
-		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/TransitionSet;"/>
-		<method name="setOrdering(I)Landroid/transition/TransitionSet;"/>
-		<method name="setStartDelay(J)Landroid/transition/TransitionSet;"/>
-		<field name="ORDERING_SEQUENTIAL"/>
-		<field name="ORDERING_TOGETHER"/>
-	</class>
-	<class name="android/transition/TransitionValues" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="values"/>
-		<field name="view"/>
-	</class>
-	<class name="android/transition/Visibility" since="19">
-		<extends name="android/transition/Transition"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
-		<method name="getMode()I" since="21"/>
-		<method name="isVisible(Landroid/transition/TransitionValues;)Z"/>
-		<method name="onAppear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;"/>
-		<method name="onAppear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;" since="21"/>
-		<method name="onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;"/>
-		<method name="onDisappear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;" since="21"/>
-		<method name="setMode(I)V" since="21"/>
-		<field name="MODE_IN" since="21"/>
-		<field name="MODE_OUT" since="21"/>
-	</class>
-	<class name="android/transition/VisibilityPropagation" since="21">
-		<extends name="android/transition/TransitionPropagation"/>
-		<method name="&lt;init>()V"/>
-		<method name="getViewVisibility(Landroid/transition/TransitionValues;)I"/>
-		<method name="getViewX(Landroid/transition/TransitionValues;)I"/>
-		<method name="getViewY(Landroid/transition/TransitionValues;)I"/>
-	</class>
-	<class name="android/util/AndroidException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="11"/>
-	</class>
-	<class name="android/util/AndroidRuntimeException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="11"/>
-	</class>
-	<class name="android/util/ArrayMap" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Map"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/util/ArrayMap;)V"/>
-		<method name="containsAll(Ljava/util/Collection;)Z"/>
-		<method name="ensureCapacity(I)V"/>
-		<method name="indexOfKey(Ljava/lang/Object;)I" since="21"/>
-		<method name="keyAt(I)Ljava/lang/Object;"/>
-		<method name="putAll(Landroid/util/ArrayMap;)V"/>
-		<method name="removeAll(Ljava/util/Collection;)Z"/>
-		<method name="removeAt(I)Ljava/lang/Object;"/>
-		<method name="retainAll(Ljava/util/Collection;)Z"/>
-		<method name="setValueAt(ILjava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="valueAt(I)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/util/ArraySet" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Collection"/>
-		<implements name="java/util/Set"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Landroid/util/ArraySet;)V"/>
-		<method name="addAll(Landroid/util/ArraySet;)V"/>
-		<method name="ensureCapacity(I)V"/>
-		<method name="indexOf(Ljava/lang/Object;)I"/>
-		<method name="removeAll(Landroid/util/ArraySet;)Z"/>
-		<method name="removeAt(I)Ljava/lang/Object;"/>
-		<method name="valueAt(I)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/util/AtomicFile" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="delete()V"/>
-		<method name="failWrite(Ljava/io/FileOutputStream;)V"/>
-		<method name="finishWrite(Ljava/io/FileOutputStream;)V"/>
-		<method name="getBaseFile()Ljava/io/File;"/>
-		<method name="openRead()Ljava/io/FileInputStream;"/>
-		<method name="readFully()[B"/>
-		<method name="startWrite()Ljava/io/FileOutputStream;"/>
-	</class>
-	<class name="android/util/AttributeSet" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getAttributeBooleanValue(IZ)Z"/>
-		<method name="getAttributeBooleanValue(Ljava/lang/String;Ljava/lang/String;Z)Z"/>
-		<method name="getAttributeCount()I"/>
-		<method name="getAttributeFloatValue(IF)F"/>
-		<method name="getAttributeFloatValue(Ljava/lang/String;Ljava/lang/String;F)F"/>
-		<method name="getAttributeIntValue(II)I"/>
-		<method name="getAttributeIntValue(Ljava/lang/String;Ljava/lang/String;I)I"/>
-		<method name="getAttributeListValue(I[Ljava/lang/String;I)I"/>
-		<method name="getAttributeListValue(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)I"/>
-		<method name="getAttributeName(I)Ljava/lang/String;"/>
-		<method name="getAttributeNameResource(I)I"/>
-		<method name="getAttributeNamespace(I)Ljava/lang/String;" since="28"/>
-		<method name="getAttributeResourceValue(II)I"/>
-		<method name="getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I"/>
-		<method name="getAttributeUnsignedIntValue(II)I"/>
-		<method name="getAttributeUnsignedIntValue(Ljava/lang/String;Ljava/lang/String;I)I"/>
-		<method name="getAttributeValue(I)Ljava/lang/String;"/>
-		<method name="getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getClassAttribute()Ljava/lang/String;"/>
-		<method name="getIdAttribute()Ljava/lang/String;"/>
-		<method name="getIdAttributeResourceValue(I)I"/>
-		<method name="getPositionDescription()Ljava/lang/String;"/>
-		<method name="getStyleAttribute()I"/>
-	</class>
-	<class name="android/util/Base64" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="decode(Ljava/lang/String;I)[B"/>
-		<method name="decode([BI)[B"/>
-		<method name="decode([BIII)[B"/>
-		<method name="encode([BI)[B"/>
-		<method name="encode([BIII)[B"/>
-		<method name="encodeToString([BI)Ljava/lang/String;"/>
-		<method name="encodeToString([BIII)Ljava/lang/String;"/>
-		<field name="CRLF"/>
-		<field name="DEFAULT"/>
-		<field name="NO_CLOSE"/>
-		<field name="NO_PADDING"/>
-		<field name="NO_WRAP"/>
-		<field name="URL_SAFE"/>
-	</class>
-	<class name="android/util/Base64DataException" since="11">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/util/Base64InputStream" since="8">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
-	</class>
-	<class name="android/util/Base64OutputStream" since="8">
-		<extends name="java/io/FilterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;I)V"/>
-	</class>
-	<class name="android/util/Config" since="1" deprecated="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="DEBUG" deprecated="16"/>
-		<field name="LOGD" deprecated="16"/>
-		<field name="LOGV" deprecated="16"/>
-		<field name="PROFILE" deprecated="16"/>
-		<field name="RELEASE" deprecated="16"/>
-	</class>
-	<class name="android/util/DebugUtils" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isObjectSelected(Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="android/util/DisplayMetrics" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="equals(Landroid/util/DisplayMetrics;)Z" since="17"/>
-		<method name="setTo(Landroid/util/DisplayMetrics;)V"/>
-		<method name="setToDefaults()V"/>
-		<field name="DENSITY_260" since="25"/>
-		<field name="DENSITY_280" since="22"/>
-		<field name="DENSITY_300" since="25"/>
-		<field name="DENSITY_340" since="25"/>
-		<field name="DENSITY_360" since="23"/>
-		<field name="DENSITY_400" since="19"/>
-		<field name="DENSITY_420" since="23"/>
-		<field name="DENSITY_440" since="28"/>
-		<field name="DENSITY_560" since="21"/>
-		<field name="DENSITY_DEFAULT" since="4"/>
-		<field name="DENSITY_DEVICE_STABLE" since="24"/>
-		<field name="DENSITY_HIGH" since="4"/>
-		<field name="DENSITY_LOW" since="4"/>
-		<field name="DENSITY_MEDIUM" since="4"/>
-		<field name="DENSITY_TV" since="13"/>
-		<field name="DENSITY_XHIGH" since="9"/>
-		<field name="DENSITY_XXHIGH" since="16"/>
-		<field name="DENSITY_XXXHIGH" since="18"/>
-		<field name="density"/>
-		<field name="densityDpi" since="4"/>
-		<field name="heightPixels"/>
-		<field name="scaledDensity"/>
-		<field name="widthPixels"/>
-		<field name="xdpi"/>
-		<field name="ydpi"/>
-	</class>
-	<class name="android/util/EventLog" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTagCode(Ljava/lang/String;)I"/>
-		<method name="getTagName(I)Ljava/lang/String;"/>
-		<method name="readEvents([ILjava/util/Collection;)V"/>
-		<method name="writeEvent(IF)I" since="23"/>
-		<method name="writeEvent(II)I"/>
-		<method name="writeEvent(IJ)I"/>
-		<method name="writeEvent(ILjava/lang/String;)I"/>
-		<method name="writeEvent(I[Ljava/lang/Object;)I"/>
-	</class>
-	<class name="android/util/EventLog$Event" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>([B)V" since="29"/>
-		<method name="getData()Ljava/lang/Object;"/>
-		<method name="getProcessId()I"/>
-		<method name="getTag()I"/>
-		<method name="getThreadId()I"/>
-		<method name="getTimeNanos()J"/>
-	</class>
-	<class name="android/util/EventLogTags" since="1" deprecated="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/BufferedReader;)V"/>
-		<method name="get(I)Landroid/util/EventLogTags$Description;"/>
-		<method name="get(Ljava/lang/String;)Landroid/util/EventLogTags$Description;"/>
-	</class>
-	<class name="android/util/EventLogTags$Description" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/lang/String;)V" since="29"/>
-		<field name="mName"/>
-		<field name="mTag"/>
-	</class>
-	<class name="android/util/FloatMath" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="ceil(F)F" removed="23"/>
-		<method name="cos(F)F" removed="23"/>
-		<method name="exp(F)F" since="17" removed="23"/>
-		<method name="floor(F)F" removed="23"/>
-		<method name="hypot(FF)F" since="17" removed="23"/>
-		<method name="pow(FF)F" since="17" removed="23"/>
-		<method name="sin(F)F" removed="23"/>
-		<method name="sqrt(F)F" removed="23"/>
-	</class>
-	<class name="android/util/FloatProperty" since="24">
-		<extends name="android/util/Property"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="set(Ljava/lang/Object;Ljava/lang/Float;)V"/>
-		<method name="setValue(Ljava/lang/Object;F)V"/>
-	</class>
-	<class name="android/util/Half" since="26">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(D)V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(S)V"/>
-		<method name="abs(S)S"/>
-		<method name="ceil(S)S"/>
-		<method name="compare(SS)I"/>
-		<method name="compareTo(Landroid/util/Half;)I"/>
-		<method name="copySign(SS)S"/>
-		<method name="equals(SS)Z"/>
-		<method name="floor(S)S"/>
-		<method name="getExponent(S)I"/>
-		<method name="getSign(S)I"/>
-		<method name="getSignificand(S)I"/>
-		<method name="greater(SS)Z"/>
-		<method name="greaterEquals(SS)Z"/>
-		<method name="halfToIntBits(S)I"/>
-		<method name="halfToRawIntBits(S)I"/>
-		<method name="halfToShortBits(S)S"/>
-		<method name="halfValue()S"/>
-		<method name="hashCode(S)I"/>
-		<method name="intBitsToHalf(I)S"/>
-		<method name="isInfinite(S)Z"/>
-		<method name="isNaN()Z"/>
-		<method name="isNaN(S)Z"/>
-		<method name="isNormalized(S)Z"/>
-		<method name="less(SS)Z"/>
-		<method name="lessEquals(SS)Z"/>
-		<method name="max(SS)S"/>
-		<method name="min(SS)S"/>
-		<method name="parseHalf(Ljava/lang/String;)S"/>
-		<method name="round(S)S"/>
-		<method name="toFloat(S)F"/>
-		<method name="toHalf(F)S"/>
-		<method name="toHexString(S)Ljava/lang/String;"/>
-		<method name="toString(S)Ljava/lang/String;"/>
-		<method name="trunc(S)S"/>
-		<method name="valueOf(F)Landroid/util/Half;"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/util/Half;"/>
-		<method name="valueOf(S)Landroid/util/Half;"/>
-		<field name="EPSILON"/>
-		<field name="LOWEST_VALUE"/>
-		<field name="MAX_EXPONENT"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_EXPONENT"/>
-		<field name="MIN_NORMAL"/>
-		<field name="MIN_VALUE"/>
-		<field name="NEGATIVE_INFINITY"/>
-		<field name="NEGATIVE_ZERO"/>
-		<field name="NaN"/>
-		<field name="POSITIVE_INFINITY"/>
-		<field name="POSITIVE_ZERO"/>
-		<field name="SIZE"/>
-	</class>
-	<class name="android/util/IntProperty" since="24">
-		<extends name="android/util/Property"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="set(Ljava/lang/Object;Ljava/lang/Integer;)V"/>
-		<method name="setValue(Ljava/lang/Object;I)V"/>
-	</class>
-	<class name="android/util/JsonReader" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<method name="beginArray()V"/>
-		<method name="beginObject()V"/>
-		<method name="endArray()V"/>
-		<method name="endObject()V"/>
-		<method name="hasNext()Z"/>
-		<method name="isLenient()Z"/>
-		<method name="nextBoolean()Z"/>
-		<method name="nextDouble()D"/>
-		<method name="nextInt()I"/>
-		<method name="nextLong()J"/>
-		<method name="nextName()Ljava/lang/String;"/>
-		<method name="nextNull()V"/>
-		<method name="nextString()Ljava/lang/String;"/>
-		<method name="peek()Landroid/util/JsonToken;"/>
-		<method name="setLenient(Z)V"/>
-		<method name="skipValue()V"/>
-	</class>
-	<class name="android/util/JsonToken" since="11">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/util/JsonToken;"/>
-		<method name="values()[Landroid/util/JsonToken;"/>
-		<field name="BEGIN_ARRAY"/>
-		<field name="BEGIN_OBJECT"/>
-		<field name="BOOLEAN"/>
-		<field name="END_ARRAY"/>
-		<field name="END_DOCUMENT"/>
-		<field name="END_OBJECT"/>
-		<field name="NAME"/>
-		<field name="NULL"/>
-		<field name="NUMBER"/>
-		<field name="STRING"/>
-	</class>
-	<class name="android/util/JsonWriter" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>(Ljava/io/Writer;)V"/>
-		<method name="beginArray()Landroid/util/JsonWriter;"/>
-		<method name="beginObject()Landroid/util/JsonWriter;"/>
-		<method name="endArray()Landroid/util/JsonWriter;"/>
-		<method name="endObject()Landroid/util/JsonWriter;"/>
-		<method name="flush()V"/>
-		<method name="isLenient()Z"/>
-		<method name="name(Ljava/lang/String;)Landroid/util/JsonWriter;"/>
-		<method name="nullValue()Landroid/util/JsonWriter;"/>
-		<method name="setIndent(Ljava/lang/String;)V"/>
-		<method name="setLenient(Z)V"/>
-		<method name="value(D)Landroid/util/JsonWriter;"/>
-		<method name="value(J)Landroid/util/JsonWriter;"/>
-		<method name="value(Ljava/lang/Number;)Landroid/util/JsonWriter;"/>
-		<method name="value(Ljava/lang/String;)Landroid/util/JsonWriter;"/>
-		<method name="value(Z)Landroid/util/JsonWriter;"/>
-	</class>
-	<class name="android/util/LayoutDirection" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="INHERIT"/>
-		<field name="LOCALE"/>
-		<field name="LTR"/>
-		<field name="RTL"/>
-	</class>
-	<class name="android/util/Log" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="d(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
-		<method name="e(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
-		<method name="getStackTraceString(Ljava/lang/Throwable;)Ljava/lang/String;"/>
-		<method name="i(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
-		<method name="isLoggable(Ljava/lang/String;I)Z"/>
-		<method name="println(ILjava/lang/String;Ljava/lang/String;)I"/>
-		<method name="v(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="v(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
-		<method name="w(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
-		<method name="w(Ljava/lang/String;Ljava/lang/Throwable;)I"/>
-		<method name="wtf(Ljava/lang/String;Ljava/lang/String;)I" since="8"/>
-		<method name="wtf(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" since="8"/>
-		<method name="wtf(Ljava/lang/String;Ljava/lang/Throwable;)I" since="8"/>
-		<field name="ASSERT"/>
-		<field name="DEBUG"/>
-		<field name="ERROR"/>
-		<field name="INFO"/>
-		<field name="VERBOSE"/>
-		<field name="WARN"/>
-	</class>
-	<class name="android/util/LogPrinter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/util/Printer"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-	</class>
-	<class name="android/util/LongSparseArray" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(JLjava/lang/Object;)V"/>
-		<method name="clear()V"/>
-		<method name="clone()Landroid/util/LongSparseArray;"/>
-		<method name="delete(J)V"/>
-		<method name="get(J)Ljava/lang/Object;"/>
-		<method name="get(JLjava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="indexOfKey(J)I"/>
-		<method name="indexOfValue(Ljava/lang/Object;)I"/>
-		<method name="keyAt(I)J"/>
-		<method name="put(JLjava/lang/Object;)V"/>
-		<method name="remove(J)V"/>
-		<method name="removeAt(I)V"/>
-		<method name="setValueAt(ILjava/lang/Object;)V"/>
-		<method name="size()I"/>
-		<method name="valueAt(I)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/util/LruCache" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="create(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="createCount()I"/>
-		<method name="entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="evictAll()V"/>
-		<method name="evictionCount()I"/>
-		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="hitCount()I"/>
-		<method name="maxSize()I"/>
-		<method name="missCount()I"/>
-		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="putCount()I"/>
-		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="resize(I)V" since="21"/>
-		<method name="size()I"/>
-		<method name="sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I"/>
-		<method name="snapshot()Ljava/util/Map;"/>
-		<method name="trimToSize(I)V" since="17"/>
-	</class>
-	<class name="android/util/MalformedJsonException" since="11">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/util/MonthDisplayHelper" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="getColumnOf(I)I"/>
-		<method name="getDayAt(II)I"/>
-		<method name="getDigitsForRow(I)[I"/>
-		<method name="getFirstDayOfMonth()I"/>
-		<method name="getMonth()I"/>
-		<method name="getNumberOfDaysInMonth()I"/>
-		<method name="getOffset()I"/>
-		<method name="getRowOf(I)I"/>
-		<method name="getWeekStartDay()I"/>
-		<method name="getYear()I"/>
-		<method name="isWithinCurrentMonth(II)Z"/>
-		<method name="nextMonth()V"/>
-		<method name="previousMonth()V"/>
-	</class>
-	<class name="android/util/MutableBoolean" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Z)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/MutableByte" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(B)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/MutableChar" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(C)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/MutableDouble" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(D)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/MutableFloat" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(F)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/MutableInt" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/MutableLong" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(J)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/MutableShort" since="21" deprecated="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(S)V"/>
-		<field name="value"/>
-	</class>
-	<class name="android/util/NoSuchPropertyException" since="14">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/util/Pair" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;"/>
-		<field name="first"/>
-		<field name="second"/>
-	</class>
-	<class name="android/util/Patterns" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="concatGroups(Ljava/util/regex/Matcher;)Ljava/lang/String;"/>
-		<method name="digitsAndPlusOnly(Ljava/util/regex/Matcher;)Ljava/lang/String;"/>
-		<field name="DOMAIN_NAME"/>
-		<field name="EMAIL_ADDRESS"/>
-		<field name="GOOD_IRI_CHAR" deprecated="24"/>
-		<field name="IP_ADDRESS"/>
-		<field name="PHONE"/>
-		<field name="TOP_LEVEL_DOMAIN" deprecated="21"/>
-		<field name="TOP_LEVEL_DOMAIN_STR" deprecated="21"/>
-		<field name="TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" deprecated="21"/>
-		<field name="WEB_URL"/>
-	</class>
-	<class name="android/util/PrintStreamPrinter" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/util/Printer"/>
-		<method name="&lt;init>(Ljava/io/PrintStream;)V"/>
-	</class>
-	<class name="android/util/PrintWriterPrinter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/util/Printer"/>
-		<method name="&lt;init>(Ljava/io/PrintWriter;)V"/>
-	</class>
-	<class name="android/util/Printer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="println(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/util/Property" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
-		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getType()Ljava/lang/Class;"/>
-		<method name="isReadOnly()Z"/>
-		<method name="of(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Landroid/util/Property;"/>
-		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/util/Range" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Comparable;Ljava/lang/Comparable;)V"/>
-		<method name="clamp(Ljava/lang/Comparable;)Ljava/lang/Comparable;"/>
-		<method name="contains(Landroid/util/Range;)Z"/>
-		<method name="contains(Ljava/lang/Comparable;)Z"/>
-		<method name="create(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;"/>
-		<method name="extend(Landroid/util/Range;)Landroid/util/Range;"/>
-		<method name="extend(Ljava/lang/Comparable;)Landroid/util/Range;"/>
-		<method name="extend(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;"/>
-		<method name="getLower()Ljava/lang/Comparable;"/>
-		<method name="getUpper()Ljava/lang/Comparable;"/>
-		<method name="intersect(Landroid/util/Range;)Landroid/util/Range;"/>
-		<method name="intersect(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;"/>
-	</class>
-	<class name="android/util/Rational" since="21">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="compareTo(Landroid/util/Rational;)I"/>
-		<method name="getDenominator()I"/>
-		<method name="getNumerator()I"/>
-		<method name="isFinite()Z"/>
-		<method name="isInfinite()Z"/>
-		<method name="isNaN()Z"/>
-		<method name="isZero()Z"/>
-		<method name="parseRational(Ljava/lang/String;)Landroid/util/Rational;"/>
-		<field name="NEGATIVE_INFINITY"/>
-		<field name="NaN"/>
-		<field name="POSITIVE_INFINITY"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="android/util/Size" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-		<method name="parseSize(Ljava/lang/String;)Landroid/util/Size;"/>
-	</class>
-	<class name="android/util/SizeF" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(FF)V"/>
-		<method name="getHeight()F"/>
-		<method name="getWidth()F"/>
-		<method name="parseSizeF(Ljava/lang/String;)Landroid/util/SizeF;"/>
-	</class>
-	<class name="android/util/SparseArray" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable" since="14"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(ILjava/lang/Object;)V"/>
-		<method name="clear()V"/>
-		<method name="clone()Landroid/util/SparseArray;" since="14"/>
-		<method name="delete(I)V"/>
-		<method name="get(I)Ljava/lang/Object;"/>
-		<method name="get(ILjava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="indexOfKey(I)I"/>
-		<method name="indexOfValue(Ljava/lang/Object;)I"/>
-		<method name="keyAt(I)I"/>
-		<method name="put(ILjava/lang/Object;)V"/>
-		<method name="remove(I)V"/>
-		<method name="removeAt(I)V" since="11"/>
-		<method name="removeAtRange(II)V" since="19"/>
-		<method name="setValueAt(ILjava/lang/Object;)V"/>
-		<method name="size()I"/>
-		<method name="valueAt(I)Ljava/lang/Object;"/>
-	</class>
-	<class name="android/util/SparseBooleanArray" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable" since="14"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(IZ)V"/>
-		<method name="clear()V"/>
-		<method name="clone()Landroid/util/SparseBooleanArray;" since="14"/>
-		<method name="delete(I)V"/>
-		<method name="get(I)Z"/>
-		<method name="get(IZ)Z"/>
-		<method name="indexOfKey(I)I"/>
-		<method name="indexOfValue(Z)I"/>
-		<method name="keyAt(I)I"/>
-		<method name="put(IZ)V"/>
-		<method name="removeAt(I)V" since="28"/>
-		<method name="size()I"/>
-		<method name="valueAt(I)Z"/>
-	</class>
-	<class name="android/util/SparseIntArray" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable" since="14"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(II)V"/>
-		<method name="clear()V"/>
-		<method name="clone()Landroid/util/SparseIntArray;" since="14"/>
-		<method name="delete(I)V"/>
-		<method name="get(I)I"/>
-		<method name="get(II)I"/>
-		<method name="indexOfKey(I)I"/>
-		<method name="indexOfValue(I)I"/>
-		<method name="keyAt(I)I"/>
-		<method name="put(II)V"/>
-		<method name="removeAt(I)V" since="3"/>
-		<method name="size()I"/>
-		<method name="valueAt(I)I"/>
-	</class>
-	<class name="android/util/SparseLongArray" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(IJ)V"/>
-		<method name="clear()V"/>
-		<method name="clone()Landroid/util/SparseLongArray;"/>
-		<method name="delete(I)V"/>
-		<method name="get(I)J"/>
-		<method name="get(IJ)J"/>
-		<method name="indexOfKey(I)I"/>
-		<method name="indexOfValue(J)I"/>
-		<method name="keyAt(I)I"/>
-		<method name="put(IJ)V"/>
-		<method name="removeAt(I)V"/>
-		<method name="size()I"/>
-		<method name="valueAt(I)J"/>
-	</class>
-	<class name="android/util/StateSet" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="dump([I)Ljava/lang/String;"/>
-		<method name="isWildCard([I)Z"/>
-		<method name="stateSetMatches([II)Z"/>
-		<method name="stateSetMatches([I[I)Z"/>
-		<method name="trimStateSet([II)[I"/>
-		<field name="NOTHING" since="11"/>
-		<field name="WILD_CARD"/>
-	</class>
-	<class name="android/util/StatsLog" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="logEvent(I)Z"/>
-		<method name="logStart(I)Z"/>
-		<method name="logStop(I)Z"/>
-	</class>
-	<class name="android/util/StringBuilderPrinter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/util/Printer"/>
-		<method name="&lt;init>(Ljava/lang/StringBuilder;)V"/>
-	</class>
-	<class name="android/util/TimeFormatException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-	</class>
-	<class name="android/util/TimeUtils" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getTimeZone(IZJLjava/lang/String;)Ljava/util/TimeZone;"/>
-		<method name="getTimeZoneDatabaseVersion()Ljava/lang/String;" since="3"/>
-	</class>
-	<class name="android/util/TimingLogger" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="addSplit(Ljava/lang/String;)V"/>
-		<method name="dumpToLog()V"/>
-		<method name="reset()V"/>
-		<method name="reset(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/util/TypedValue" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="applyDimension(IFLandroid/util/DisplayMetrics;)F"/>
-		<method name="coerceToString()Ljava/lang/CharSequence;"/>
-		<method name="coerceToString(II)Ljava/lang/String;"/>
-		<method name="complexToDimension(ILandroid/util/DisplayMetrics;)F"/>
-		<method name="complexToDimensionNoisy(ILandroid/util/DisplayMetrics;)F" removed="20"/>
-		<method name="complexToDimensionPixelOffset(ILandroid/util/DisplayMetrics;)I"/>
-		<method name="complexToDimensionPixelSize(ILandroid/util/DisplayMetrics;)I"/>
-		<method name="complexToFloat(I)F"/>
-		<method name="complexToFraction(IFF)F"/>
-		<method name="getComplexUnit()I" since="22"/>
-		<method name="getDimension(Landroid/util/DisplayMetrics;)F"/>
-		<method name="getFloat()F"/>
-		<method name="getFraction(FF)F"/>
-		<method name="setTo(Landroid/util/TypedValue;)V"/>
-		<field name="COMPLEX_MANTISSA_MASK"/>
-		<field name="COMPLEX_MANTISSA_SHIFT"/>
-		<field name="COMPLEX_RADIX_0p23"/>
-		<field name="COMPLEX_RADIX_16p7"/>
-		<field name="COMPLEX_RADIX_23p0"/>
-		<field name="COMPLEX_RADIX_8p15"/>
-		<field name="COMPLEX_RADIX_MASK"/>
-		<field name="COMPLEX_RADIX_SHIFT"/>
-		<field name="COMPLEX_UNIT_DIP"/>
-		<field name="COMPLEX_UNIT_FRACTION"/>
-		<field name="COMPLEX_UNIT_FRACTION_PARENT"/>
-		<field name="COMPLEX_UNIT_IN"/>
-		<field name="COMPLEX_UNIT_MASK"/>
-		<field name="COMPLEX_UNIT_MM"/>
-		<field name="COMPLEX_UNIT_PT"/>
-		<field name="COMPLEX_UNIT_PX"/>
-		<field name="COMPLEX_UNIT_SHIFT"/>
-		<field name="COMPLEX_UNIT_SP"/>
-		<field name="DATA_NULL_EMPTY" since="22"/>
-		<field name="DATA_NULL_UNDEFINED" since="22"/>
-		<field name="DENSITY_DEFAULT" since="4"/>
-		<field name="DENSITY_NONE" since="4"/>
-		<field name="TYPE_ATTRIBUTE"/>
-		<field name="TYPE_DIMENSION"/>
-		<field name="TYPE_FIRST_COLOR_INT"/>
-		<field name="TYPE_FIRST_INT"/>
-		<field name="TYPE_FLOAT"/>
-		<field name="TYPE_FRACTION"/>
-		<field name="TYPE_INT_BOOLEAN"/>
-		<field name="TYPE_INT_COLOR_ARGB4"/>
-		<field name="TYPE_INT_COLOR_ARGB8"/>
-		<field name="TYPE_INT_COLOR_RGB4"/>
-		<field name="TYPE_INT_COLOR_RGB8"/>
-		<field name="TYPE_INT_DEC"/>
-		<field name="TYPE_INT_HEX"/>
-		<field name="TYPE_LAST_COLOR_INT"/>
-		<field name="TYPE_LAST_INT"/>
-		<field name="TYPE_NULL"/>
-		<field name="TYPE_REFERENCE"/>
-		<field name="TYPE_STRING"/>
-		<field name="assetCookie"/>
-		<field name="changingConfigurations"/>
-		<field name="data"/>
-		<field name="density" since="4"/>
-		<field name="resourceId"/>
-		<field name="string"/>
-		<field name="type"/>
-	</class>
-	<class name="android/util/Xml" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="asAttributeSet(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/AttributeSet;"/>
-		<method name="findEncodingByName(Ljava/lang/String;)Landroid/util/Xml$Encoding;"/>
-		<method name="newPullParser()Lorg/xmlpull/v1/XmlPullParser;"/>
-		<method name="newSerializer()Lorg/xmlpull/v1/XmlSerializer;"/>
-		<method name="parse(Ljava/io/InputStream;Landroid/util/Xml$Encoding;Lorg/xml/sax/ContentHandler;)V"/>
-		<method name="parse(Ljava/io/Reader;Lorg/xml/sax/ContentHandler;)V"/>
-		<method name="parse(Ljava/lang/String;Lorg/xml/sax/ContentHandler;)V"/>
-		<field name="FEATURE_RELAXED"/>
-	</class>
-	<class name="android/util/Xml$Encoding" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/util/Xml$Encoding;"/>
-		<method name="values()[Landroid/util/Xml$Encoding;"/>
-		<field name="ISO_8859_1"/>
-		<field name="US_ASCII"/>
-		<field name="UTF_16"/>
-		<field name="UTF_8"/>
-	</class>
-	<class name="android/view/AbsSavedState" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V" since="24"/>
-		<method name="&lt;init>(Landroid/os/Parcelable;)V"/>
-		<method name="getSuperState()Landroid/os/Parcelable;"/>
-		<field name="CREATOR"/>
-		<field name="EMPTY_STATE"/>
-	</class>
-	<class name="android/view/ActionMode" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="finish()V"/>
-		<method name="getCustomView()Landroid/view/View;"/>
-		<method name="getMenu()Landroid/view/Menu;"/>
-		<method name="getMenuInflater()Landroid/view/MenuInflater;"/>
-		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
-		<method name="getTag()Ljava/lang/Object;" since="14"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="getTitleOptionalHint()Z" since="16"/>
-		<method name="getType()I" since="23"/>
-		<method name="hide(J)V" since="23"/>
-		<method name="invalidate()V"/>
-		<method name="invalidateContentRect()V" since="23"/>
-		<method name="isTitleOptional()Z" since="16"/>
-		<method name="onWindowFocusChanged(Z)V" since="23"/>
-		<method name="setCustomView(Landroid/view/View;)V"/>
-		<method name="setSubtitle(I)V"/>
-		<method name="setSubtitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setTag(Ljava/lang/Object;)V" since="14"/>
-		<method name="setTitle(I)V"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setTitleOptionalHint(Z)V" since="16"/>
-		<method name="setType(I)V" since="23"/>
-		<field name="DEFAULT_HIDE_DURATION" since="23"/>
-		<field name="TYPE_FLOATING" since="23"/>
-		<field name="TYPE_PRIMARY" since="23"/>
-	</class>
-	<class name="android/view/ActionMode$Callback" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onActionItemClicked(Landroid/view/ActionMode;Landroid/view/MenuItem;)Z"/>
-		<method name="onCreateActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z"/>
-		<method name="onDestroyActionMode(Landroid/view/ActionMode;)V"/>
-		<method name="onPrepareActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z"/>
-	</class>
-	<class name="android/view/ActionMode$Callback2" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/ActionMode$Callback"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGetContentRect(Landroid/view/ActionMode;Landroid/view/View;Landroid/graphics/Rect;)V"/>
-	</class>
-	<class name="android/view/ActionProvider" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="hasSubMenu()Z"/>
-		<method name="isVisible()Z" since="16"/>
-		<method name="onCreateActionView()Landroid/view/View;" deprecated="16"/>
-		<method name="onCreateActionView(Landroid/view/MenuItem;)Landroid/view/View;" since="16"/>
-		<method name="onPerformDefaultAction()Z"/>
-		<method name="onPrepareSubMenu(Landroid/view/SubMenu;)V"/>
-		<method name="overridesItemVisibility()Z" since="16"/>
-		<method name="refreshVisibility()V" since="16"/>
-		<method name="setVisibilityListener(Landroid/view/ActionProvider$VisibilityListener;)V" since="16"/>
-	</class>
-	<class name="android/view/ActionProvider$VisibilityListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onActionProviderVisibilityChanged(Z)V"/>
-	</class>
-	<class name="android/view/Choreographer" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Looper;I)V" since="29"/>
-		<method name="getInstance()Landroid/view/Choreographer;"/>
-		<method name="postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V"/>
-		<method name="postFrameCallbackDelayed(Landroid/view/Choreographer$FrameCallback;J)V"/>
-		<method name="removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V"/>
-	</class>
-	<class name="android/view/Choreographer$FrameCallback" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="doFrame(J)V"/>
-	</class>
-	<class name="android/view/CollapsibleActionView" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onActionViewCollapsed()V"/>
-		<method name="onActionViewExpanded()V"/>
-	</class>
-	<class name="android/view/ContextMenu" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/Menu"/>
-		<method name="clearHeader()V"/>
-		<method name="setHeaderIcon(I)Landroid/view/ContextMenu;"/>
-		<method name="setHeaderIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/ContextMenu;"/>
-		<method name="setHeaderTitle(I)Landroid/view/ContextMenu;"/>
-		<method name="setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/ContextMenu;"/>
-		<method name="setHeaderView(Landroid/view/View;)Landroid/view/ContextMenu;"/>
-	</class>
-	<class name="android/view/ContextMenu$ContextMenuInfo" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="android/view/ContextThemeWrapper" since="1">
-		<extends name="android/content/ContextWrapper"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/res/Resources$Theme;)V" since="23"/>
-		<method name="applyOverrideConfiguration(Landroid/content/res/Configuration;)V" since="17"/>
-		<method name="onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V"/>
-	</class>
-	<class name="android/view/Display" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAppVsyncOffsetNanos()J" since="21"/>
-		<method name="getCurrentSizeRange(Landroid/graphics/Point;Landroid/graphics/Point;)V" since="16"/>
-		<method name="getDisplayId()I"/>
-		<method name="getFlags()I" since="17"/>
-		<method name="getHdrCapabilities()Landroid/view/Display$HdrCapabilities;" since="24"/>
-		<method name="getHeight()I" deprecated="16"/>
-		<method name="getMetrics(Landroid/util/DisplayMetrics;)V"/>
-		<method name="getMode()Landroid/view/Display$Mode;" since="23"/>
-		<method name="getName()Ljava/lang/String;" since="17"/>
-		<method name="getOrientation()I" deprecated="16"/>
-		<method name="getPixelFormat()I" deprecated="17"/>
-		<method name="getPresentationDeadlineNanos()J" since="21"/>
-		<method name="getRealMetrics(Landroid/util/DisplayMetrics;)V" since="17"/>
-		<method name="getRealSize(Landroid/graphics/Point;)V" since="17"/>
-		<method name="getRectSize(Landroid/graphics/Rect;)V" since="13"/>
-		<method name="getRefreshRate()F"/>
-		<method name="getRotation()I" since="8"/>
-		<method name="getSize(Landroid/graphics/Point;)V" since="13"/>
-		<method name="getState()I" since="20"/>
-		<method name="getSupportedModes()[Landroid/view/Display$Mode;" since="23"/>
-		<method name="getSupportedRefreshRates()[F" since="21" deprecated="23"/>
-		<method name="getWidth()I" deprecated="16"/>
-		<method name="isHdr()Z" since="26"/>
-		<method name="isValid()Z" since="17"/>
-		<method name="isWideColorGamut()Z" since="26"/>
-		<field name="DEFAULT_DISPLAY"/>
-		<field name="FLAG_PRESENTATION" since="19"/>
-		<field name="FLAG_PRIVATE" since="19"/>
-		<field name="FLAG_ROUND" since="23"/>
-		<field name="FLAG_SECURE" since="17"/>
-		<field name="FLAG_SUPPORTS_PROTECTED_BUFFERS" since="17"/>
-		<field name="INVALID_DISPLAY" since="23"/>
-		<field name="STATE_DOZE" since="21"/>
-		<field name="STATE_DOZE_SUSPEND" since="21"/>
-		<field name="STATE_DOZING" since="20" removed="21"/>
-		<field name="STATE_OFF" since="20"/>
-		<field name="STATE_ON" since="20"/>
-		<field name="STATE_ON_SUSPEND" since="28"/>
-		<field name="STATE_UNKNOWN" since="20"/>
-		<field name="STATE_VR" since="26"/>
-	</class>
-	<class name="android/view/Display$HdrCapabilities" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDesiredMaxAverageLuminance()F"/>
-		<method name="getDesiredMaxLuminance()F"/>
-		<method name="getDesiredMinLuminance()F"/>
-		<method name="getSupportedHdrTypes()[I"/>
-		<field name="CREATOR"/>
-		<field name="HDR_TYPE_DOLBY_VISION"/>
-		<field name="HDR_TYPE_HDR10"/>
-		<field name="HDR_TYPE_HLG"/>
-		<field name="INVALID_LUMINANCE"/>
-	</class>
-	<class name="android/view/Display$Mode" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getModeId()I"/>
-		<method name="getPhysicalHeight()I"/>
-		<method name="getPhysicalWidth()I"/>
-		<method name="getRefreshRate()F"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/DisplayCutout" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;Ljava/util/List;)V"/>
-		<method name="getBoundingRects()Ljava/util/List;"/>
-		<method name="getSafeInsetBottom()I"/>
-		<method name="getSafeInsetLeft()I"/>
-		<method name="getSafeInsetRight()I"/>
-		<method name="getSafeInsetTop()I"/>
-	</class>
-	<class name="android/view/DragAndDropPermissions" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="25"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="release()V"/>
-		<field name="CREATOR" since="25"/>
-	</class>
-	<class name="android/view/DragEvent" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAction()I"/>
-		<method name="getClipData()Landroid/content/ClipData;"/>
-		<method name="getClipDescription()Landroid/content/ClipDescription;"/>
-		<method name="getLocalState()Ljava/lang/Object;"/>
-		<method name="getResult()Z"/>
-		<method name="getX()F"/>
-		<method name="getY()F"/>
-		<field name="ACTION_DRAG_ENDED"/>
-		<field name="ACTION_DRAG_ENTERED"/>
-		<field name="ACTION_DRAG_EXITED"/>
-		<field name="ACTION_DRAG_LOCATION"/>
-		<field name="ACTION_DRAG_STARTED"/>
-		<field name="ACTION_DROP"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/FocusFinder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="findNearestTouchable(Landroid/view/ViewGroup;III[I)Landroid/view/View;"/>
-		<method name="findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;"/>
-		<method name="findNextFocusFromRect(Landroid/view/ViewGroup;Landroid/graphics/Rect;I)Landroid/view/View;"/>
-		<method name="findNextKeyboardNavigationCluster(Landroid/view/View;Landroid/view/View;I)Landroid/view/View;" since="26"/>
-		<method name="getInstance()Landroid/view/FocusFinder;"/>
-	</class>
-	<class name="android/view/FrameMetrics" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/FrameMetrics;)V"/>
-		<method name="getMetric(I)J"/>
-		<field name="ANIMATION_DURATION"/>
-		<field name="COMMAND_ISSUE_DURATION"/>
-		<field name="DRAW_DURATION"/>
-		<field name="FIRST_DRAW_FRAME"/>
-		<field name="INPUT_HANDLING_DURATION"/>
-		<field name="INTENDED_VSYNC_TIMESTAMP" since="26"/>
-		<field name="LAYOUT_MEASURE_DURATION"/>
-		<field name="SWAP_BUFFERS_DURATION"/>
-		<field name="SYNC_DURATION"/>
-		<field name="TOTAL_DURATION"/>
-		<field name="UNKNOWN_DELAY_DURATION"/>
-		<field name="VSYNC_TIMESTAMP" since="26"/>
-	</class>
-	<class name="android/view/FrameStats" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEndTimeNano()J"/>
-		<method name="getFrameCount()I"/>
-		<method name="getFramePresentedTimeNano(I)J"/>
-		<method name="getRefreshPeriodNano()J"/>
-		<method name="getStartTimeNano()J"/>
-		<field name="UNDEFINED_TIME_NANO"/>
-	</class>
-	<class name="android/view/GestureDetector" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;)V" since="3"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" since="3"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;Z)V" since="8"/>
-		<method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" deprecated="16"/>
-		<method name="isLongpressEnabled()Z"/>
-		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="23"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V" since="23"/>
-		<method name="setIsLongpressEnabled(Z)V"/>
-		<method name="setOnDoubleTapListener(Landroid/view/GestureDetector$OnDoubleTapListener;)V" since="3"/>
-	</class>
-	<class name="android/view/GestureDetector$OnContextClickListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onContextClick(Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/view/GestureDetector$OnDoubleTapListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onDoubleTap(Landroid/view/MotionEvent;)Z"/>
-		<method name="onDoubleTapEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onSingleTapConfirmed(Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/view/GestureDetector$OnGestureListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onDown(Landroid/view/MotionEvent;)Z"/>
-		<method name="onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z"/>
-		<method name="onLongPress(Landroid/view/MotionEvent;)V"/>
-		<method name="onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z"/>
-		<method name="onShowPress(Landroid/view/MotionEvent;)V"/>
-		<method name="onSingleTapUp(Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/view/GestureDetector$SimpleOnGestureListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/GestureDetector$OnContextClickListener" since="23"/>
-		<implements name="android/view/GestureDetector$OnDoubleTapListener" since="3"/>
-		<implements name="android/view/GestureDetector$OnGestureListener"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/view/Gravity" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;)V"/>
-		<method name="apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;I)V" since="17"/>
-		<method name="apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;)V"/>
-		<method name="apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;I)V" since="17"/>
-		<method name="applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;)V" since="3"/>
-		<method name="applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;I)V" since="17"/>
-		<method name="getAbsoluteGravity(II)I" since="14"/>
-		<method name="isHorizontal(I)Z"/>
-		<method name="isVertical(I)Z"/>
-		<field name="AXIS_CLIP" since="3"/>
-		<field name="AXIS_PULL_AFTER"/>
-		<field name="AXIS_PULL_BEFORE"/>
-		<field name="AXIS_SPECIFIED"/>
-		<field name="AXIS_X_SHIFT"/>
-		<field name="AXIS_Y_SHIFT"/>
-		<field name="BOTTOM"/>
-		<field name="CENTER"/>
-		<field name="CENTER_HORIZONTAL"/>
-		<field name="CENTER_VERTICAL"/>
-		<field name="CLIP_HORIZONTAL" since="3"/>
-		<field name="CLIP_VERTICAL" since="3"/>
-		<field name="DISPLAY_CLIP_HORIZONTAL" since="3"/>
-		<field name="DISPLAY_CLIP_VERTICAL" since="3"/>
-		<field name="END" since="14"/>
-		<field name="FILL"/>
-		<field name="FILL_HORIZONTAL"/>
-		<field name="FILL_VERTICAL"/>
-		<field name="HORIZONTAL_GRAVITY_MASK"/>
-		<field name="LEFT"/>
-		<field name="NO_GRAVITY"/>
-		<field name="RELATIVE_HORIZONTAL_GRAVITY_MASK" since="14"/>
-		<field name="RELATIVE_LAYOUT_DIRECTION" since="14"/>
-		<field name="RIGHT"/>
-		<field name="START" since="14"/>
-		<field name="TOP"/>
-		<field name="VERTICAL_GRAVITY_MASK"/>
-	</class>
-	<class name="android/view/HapticFeedbackConstants" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CLOCK_TICK" since="21"/>
-		<field name="CONTEXT_CLICK" since="23"/>
-		<field name="FLAG_IGNORE_GLOBAL_SETTING"/>
-		<field name="FLAG_IGNORE_VIEW_SETTING"/>
-		<field name="KEYBOARD_PRESS" since="27"/>
-		<field name="KEYBOARD_RELEASE" since="27"/>
-		<field name="KEYBOARD_TAP" since="8"/>
-		<field name="LONG_PRESS"/>
-		<field name="TEXT_HANDLE_MOVE" since="27"/>
-		<field name="VIRTUAL_KEY" since="5"/>
-		<field name="VIRTUAL_KEY_RELEASE" since="27"/>
-	</class>
-	<class name="android/view/InflateException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="android/view/InputDevice" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getControllerNumber()I" since="19"/>
-		<method name="getDescriptor()Ljava/lang/String;" since="16"/>
-		<method name="getDevice(I)Landroid/view/InputDevice;"/>
-		<method name="getDeviceIds()[I"/>
-		<method name="getId()I"/>
-		<method name="getKeyCharacterMap()Landroid/view/KeyCharacterMap;"/>
-		<method name="getKeyboardType()I"/>
-		<method name="getMotionRange(I)Landroid/view/InputDevice$MotionRange;"/>
-		<method name="getMotionRange(II)Landroid/view/InputDevice$MotionRange;" since="12"/>
-		<method name="getMotionRanges()Ljava/util/List;" since="12"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getProductId()I" since="19"/>
-		<method name="getSources()I"/>
-		<method name="getVendorId()I" since="19"/>
-		<method name="getVibrator()Landroid/os/Vibrator;" since="16"/>
-		<method name="hasKeys([I)[Z" since="19"/>
-		<method name="hasMicrophone()Z" since="23"/>
-		<method name="isEnabled()Z" since="27"/>
-		<method name="isVirtual()Z" since="16"/>
-		<method name="supportsSource(I)Z" since="21"/>
-		<field name="CREATOR"/>
-		<field name="KEYBOARD_TYPE_ALPHABETIC"/>
-		<field name="KEYBOARD_TYPE_NONE"/>
-		<field name="KEYBOARD_TYPE_NON_ALPHABETIC"/>
-		<field name="MOTION_RANGE_ORIENTATION" deprecated="16"/>
-		<field name="MOTION_RANGE_PRESSURE" deprecated="16"/>
-		<field name="MOTION_RANGE_SIZE" deprecated="16"/>
-		<field name="MOTION_RANGE_TOOL_MAJOR" deprecated="16"/>
-		<field name="MOTION_RANGE_TOOL_MINOR" deprecated="16"/>
-		<field name="MOTION_RANGE_TOUCH_MAJOR" deprecated="16"/>
-		<field name="MOTION_RANGE_TOUCH_MINOR" deprecated="16"/>
-		<field name="MOTION_RANGE_X" deprecated="16"/>
-		<field name="MOTION_RANGE_Y" deprecated="16"/>
-		<field name="SOURCE_ANY"/>
-		<field name="SOURCE_BLUETOOTH_STYLUS" since="23"/>
-		<field name="SOURCE_CLASS_BUTTON"/>
-		<field name="SOURCE_CLASS_JOYSTICK" since="12"/>
-		<field name="SOURCE_CLASS_MASK"/>
-		<field name="SOURCE_CLASS_NONE" since="18"/>
-		<field name="SOURCE_CLASS_POINTER"/>
-		<field name="SOURCE_CLASS_POSITION"/>
-		<field name="SOURCE_CLASS_TRACKBALL"/>
-		<field name="SOURCE_DPAD"/>
-		<field name="SOURCE_GAMEPAD" since="12"/>
-		<field name="SOURCE_HDMI" since="21"/>
-		<field name="SOURCE_JOYSTICK" since="12"/>
-		<field name="SOURCE_KEYBOARD"/>
-		<field name="SOURCE_MOUSE"/>
-		<field name="SOURCE_MOUSE_RELATIVE" since="26"/>
-		<field name="SOURCE_ROTARY_ENCODER" since="26"/>
-		<field name="SOURCE_STYLUS" since="14"/>
-		<field name="SOURCE_TOUCHPAD"/>
-		<field name="SOURCE_TOUCHSCREEN"/>
-		<field name="SOURCE_TOUCH_NAVIGATION" since="18"/>
-		<field name="SOURCE_TRACKBALL"/>
-		<field name="SOURCE_UNKNOWN"/>
-	</class>
-	<class name="android/view/InputDevice$MotionRange" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIFFFFF)V" since="29"/>
-		<method name="getAxis()I" since="12"/>
-		<method name="getFlat()F"/>
-		<method name="getFuzz()F"/>
-		<method name="getMax()F"/>
-		<method name="getMin()F"/>
-		<method name="getRange()F"/>
-		<method name="getResolution()F" since="18"/>
-		<method name="getSource()I" since="12"/>
-		<method name="isFromSource(I)Z" since="18"/>
-	</class>
-	<class name="android/view/InputEvent" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDevice()Landroid/view/InputDevice;"/>
-		<method name="getDeviceId()I"/>
-		<method name="getEventTime()J" since="16"/>
-		<method name="getSource()I"/>
-		<method name="isFromSource(I)Z" since="18"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/InputQueue" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/view/InputQueue$Callback" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="onInputQueueCreated(Landroid/view/InputQueue;)V"/>
-		<method name="onInputQueueDestroyed(Landroid/view/InputQueue;)V"/>
-	</class>
-	<class name="android/view/KeyCharacterMap" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="16"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="deviceHasKey(I)Z" since="3"/>
-		<method name="deviceHasKeys([I)[Z" since="3"/>
-		<method name="get(II)I"/>
-		<method name="getDeadChar(II)I"/>
-		<method name="getDisplayLabel(I)C"/>
-		<method name="getEvents([C)[Landroid/view/KeyEvent;"/>
-		<method name="getKeyData(ILandroid/view/KeyCharacterMap$KeyData;)Z" deprecated="16"/>
-		<method name="getKeyboardType()I"/>
-		<method name="getMatch(I[C)C"/>
-		<method name="getMatch(I[CI)C"/>
-		<method name="getModifierBehavior()I" since="11"/>
-		<method name="getNumber(I)C"/>
-		<method name="isPrintingKey(I)Z"/>
-		<method name="load(I)Landroid/view/KeyCharacterMap;"/>
-		<field name="ALPHA"/>
-		<field name="BUILT_IN_KEYBOARD" deprecated="16"/>
-		<field name="COMBINING_ACCENT"/>
-		<field name="COMBINING_ACCENT_MASK"/>
-		<field name="CREATOR" since="16"/>
-		<field name="FULL" since="11"/>
-		<field name="HEX_INPUT"/>
-		<field name="MODIFIER_BEHAVIOR_CHORDED" since="11"/>
-		<field name="MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED" since="11"/>
-		<field name="NUMERIC"/>
-		<field name="PICKER_DIALOG_INPUT"/>
-		<field name="PREDICTIVE"/>
-		<field name="SPECIAL_FUNCTION" since="11"/>
-		<field name="VIRTUAL_KEYBOARD" since="11"/>
-	</class>
-	<class name="android/view/KeyCharacterMap$KeyData" since="1" deprecated="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="META_LENGTH"/>
-		<field name="displayLabel"/>
-		<field name="meta"/>
-		<field name="number"/>
-	</class>
-	<class name="android/view/KeyCharacterMap$UnavailableException" since="11">
-		<extends name="android/util/AndroidRuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/view/KeyEvent" since="1">
-		<extends name="android/view/InputEvent" since="9"/>
-		<extends name="java/lang/Object" removed="9"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(JJIII)V"/>
-		<method name="&lt;init>(JJIIII)V"/>
-		<method name="&lt;init>(JJIIIIII)V"/>
-		<method name="&lt;init>(JJIIIIIII)V"/>
-		<method name="&lt;init>(JJIIIIIIII)V" since="9"/>
-		<method name="&lt;init>(JLjava/lang/String;II)V" since="3"/>
-		<method name="&lt;init>(Landroid/view/KeyEvent;)V" since="3"/>
-		<method name="&lt;init>(Landroid/view/KeyEvent;JI)V" deprecated="16"/>
-		<method name="changeAction(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3"/>
-		<method name="changeFlags(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3"/>
-		<method name="changeTimeRepeat(Landroid/view/KeyEvent;JI)Landroid/view/KeyEvent;" since="3"/>
-		<method name="changeTimeRepeat(Landroid/view/KeyEvent;JII)Landroid/view/KeyEvent;" since="5"/>
-		<method name="dispatch(Landroid/view/KeyEvent$Callback;)Z" deprecated="16"/>
-		<method name="dispatch(Landroid/view/KeyEvent$Callback;Landroid/view/KeyEvent$DispatcherState;Ljava/lang/Object;)Z" since="5"/>
-		<method name="getAction()I"/>
-		<method name="getCharacters()Ljava/lang/String;" since="3"/>
-		<method name="getDeadChar(II)I"/>
-		<method name="getDeviceId()I"/>
-		<method name="getDisplayLabel()C"/>
-		<method name="getDownTime()J"/>
-		<method name="getEventTime()J"/>
-		<method name="getFlags()I"/>
-		<method name="getKeyCharacterMap()Landroid/view/KeyCharacterMap;" since="11"/>
-		<method name="getKeyCode()I"/>
-		<method name="getKeyData(Landroid/view/KeyCharacterMap$KeyData;)Z" deprecated="16"/>
-		<method name="getMatch([C)C"/>
-		<method name="getMatch([CI)C"/>
-		<method name="getMaxKeyCode()I" since="3"/>
-		<method name="getMetaState()I"/>
-		<method name="getModifierMetaStateMask()I" since="11"/>
-		<method name="getModifiers()I" since="13"/>
-		<method name="getNumber()C"/>
-		<method name="getRepeatCount()I"/>
-		<method name="getScanCode()I"/>
-		<method name="getUnicodeChar()I"/>
-		<method name="getUnicodeChar(I)I"/>
-		<method name="hasModifiers(I)Z" since="11"/>
-		<method name="hasNoModifiers()Z" since="11"/>
-		<method name="isAltPressed()Z"/>
-		<method name="isCanceled()Z" since="5"/>
-		<method name="isCapsLockOn()Z" since="11"/>
-		<method name="isCtrlPressed()Z" since="11"/>
-		<method name="isFunctionPressed()Z" since="11"/>
-		<method name="isGamepadButton(I)Z" since="12"/>
-		<method name="isLongPress()Z" since="5"/>
-		<method name="isMetaPressed()Z" since="11"/>
-		<method name="isModifierKey(I)Z"/>
-		<method name="isNumLockOn()Z" since="11"/>
-		<method name="isPrintingKey()Z"/>
-		<method name="isScrollLockOn()Z" since="11"/>
-		<method name="isShiftPressed()Z"/>
-		<method name="isSymPressed()Z"/>
-		<method name="isSystem()Z"/>
-		<method name="isTracking()Z" since="5"/>
-		<method name="keyCodeFromString(Ljava/lang/String;)I" since="12"/>
-		<method name="keyCodeToString(I)Ljava/lang/String;" since="12"/>
-		<method name="metaStateHasModifiers(II)Z" since="11"/>
-		<method name="metaStateHasNoModifiers(I)Z" since="11"/>
-		<method name="normalizeMetaState(I)I" since="11"/>
-		<method name="setSource(I)V" since="12"/>
-		<method name="startTracking()V" since="5"/>
-		<field name="ACTION_DOWN"/>
-		<field name="ACTION_MULTIPLE"/>
-		<field name="ACTION_UP"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_CANCELED" since="5"/>
-		<field name="FLAG_CANCELED_LONG_PRESS" since="5"/>
-		<field name="FLAG_EDITOR_ACTION" since="3"/>
-		<field name="FLAG_FALLBACK" since="11"/>
-		<field name="FLAG_FROM_SYSTEM" since="3"/>
-		<field name="FLAG_KEEP_TOUCH_MODE" since="3"/>
-		<field name="FLAG_LONG_PRESS" since="5"/>
-		<field name="FLAG_SOFT_KEYBOARD" since="3"/>
-		<field name="FLAG_TRACKING" since="5"/>
-		<field name="FLAG_VIRTUAL_HARD_KEY" since="5"/>
-		<field name="FLAG_WOKE_HERE" deprecated="20"/>
-		<field name="KEYCODE_0"/>
-		<field name="KEYCODE_1"/>
-		<field name="KEYCODE_11" since="21"/>
-		<field name="KEYCODE_12" since="21"/>
-		<field name="KEYCODE_2"/>
-		<field name="KEYCODE_3"/>
-		<field name="KEYCODE_3D_MODE" since="14"/>
-		<field name="KEYCODE_4"/>
-		<field name="KEYCODE_5"/>
-		<field name="KEYCODE_6"/>
-		<field name="KEYCODE_7"/>
-		<field name="KEYCODE_8"/>
-		<field name="KEYCODE_9"/>
-		<field name="KEYCODE_A"/>
-		<field name="KEYCODE_ALL_APPS" since="28"/>
-		<field name="KEYCODE_ALT_LEFT"/>
-		<field name="KEYCODE_ALT_RIGHT"/>
-		<field name="KEYCODE_APOSTROPHE"/>
-		<field name="KEYCODE_APP_SWITCH" since="11"/>
-		<field name="KEYCODE_ASSIST" since="16"/>
-		<field name="KEYCODE_AT"/>
-		<field name="KEYCODE_AVR_INPUT" since="11"/>
-		<field name="KEYCODE_AVR_POWER" since="11"/>
-		<field name="KEYCODE_B"/>
-		<field name="KEYCODE_BACK"/>
-		<field name="KEYCODE_BACKSLASH"/>
-		<field name="KEYCODE_BOOKMARK" since="11"/>
-		<field name="KEYCODE_BREAK" since="11"/>
-		<field name="KEYCODE_BRIGHTNESS_DOWN" since="18"/>
-		<field name="KEYCODE_BRIGHTNESS_UP" since="18"/>
-		<field name="KEYCODE_BUTTON_1" since="12"/>
-		<field name="KEYCODE_BUTTON_10" since="12"/>
-		<field name="KEYCODE_BUTTON_11" since="12"/>
-		<field name="KEYCODE_BUTTON_12" since="12"/>
-		<field name="KEYCODE_BUTTON_13" since="12"/>
-		<field name="KEYCODE_BUTTON_14" since="12"/>
-		<field name="KEYCODE_BUTTON_15" since="12"/>
-		<field name="KEYCODE_BUTTON_16" since="12"/>
-		<field name="KEYCODE_BUTTON_2" since="12"/>
-		<field name="KEYCODE_BUTTON_3" since="12"/>
-		<field name="KEYCODE_BUTTON_4" since="12"/>
-		<field name="KEYCODE_BUTTON_5" since="12"/>
-		<field name="KEYCODE_BUTTON_6" since="12"/>
-		<field name="KEYCODE_BUTTON_7" since="12"/>
-		<field name="KEYCODE_BUTTON_8" since="12"/>
-		<field name="KEYCODE_BUTTON_9" since="12"/>
-		<field name="KEYCODE_BUTTON_A" since="9"/>
-		<field name="KEYCODE_BUTTON_B" since="9"/>
-		<field name="KEYCODE_BUTTON_C" since="9"/>
-		<field name="KEYCODE_BUTTON_L1" since="9"/>
-		<field name="KEYCODE_BUTTON_L2" since="9"/>
-		<field name="KEYCODE_BUTTON_MODE" since="9"/>
-		<field name="KEYCODE_BUTTON_R1" since="9"/>
-		<field name="KEYCODE_BUTTON_R2" since="9"/>
-		<field name="KEYCODE_BUTTON_SELECT" since="9"/>
-		<field name="KEYCODE_BUTTON_START" since="9"/>
-		<field name="KEYCODE_BUTTON_THUMBL" since="9"/>
-		<field name="KEYCODE_BUTTON_THUMBR" since="9"/>
-		<field name="KEYCODE_BUTTON_X" since="9"/>
-		<field name="KEYCODE_BUTTON_Y" since="9"/>
-		<field name="KEYCODE_BUTTON_Z" since="9"/>
-		<field name="KEYCODE_C"/>
-		<field name="KEYCODE_CALCULATOR" since="15"/>
-		<field name="KEYCODE_CALENDAR" since="15"/>
-		<field name="KEYCODE_CALL"/>
-		<field name="KEYCODE_CAMERA"/>
-		<field name="KEYCODE_CAPS_LOCK" since="11"/>
-		<field name="KEYCODE_CAPTIONS" since="11"/>
-		<field name="KEYCODE_CHANNEL_DOWN" since="11"/>
-		<field name="KEYCODE_CHANNEL_UP" since="11"/>
-		<field name="KEYCODE_CLEAR"/>
-		<field name="KEYCODE_COMMA"/>
-		<field name="KEYCODE_CONTACTS" since="15"/>
-		<field name="KEYCODE_COPY" since="24"/>
-		<field name="KEYCODE_CTRL_LEFT" since="11"/>
-		<field name="KEYCODE_CTRL_RIGHT" since="11"/>
-		<field name="KEYCODE_CUT" since="24"/>
-		<field name="KEYCODE_D"/>
-		<field name="KEYCODE_DEL"/>
-		<field name="KEYCODE_DPAD_CENTER"/>
-		<field name="KEYCODE_DPAD_DOWN"/>
-		<field name="KEYCODE_DPAD_DOWN_LEFT" since="24"/>
-		<field name="KEYCODE_DPAD_DOWN_RIGHT" since="24"/>
-		<field name="KEYCODE_DPAD_LEFT"/>
-		<field name="KEYCODE_DPAD_RIGHT"/>
-		<field name="KEYCODE_DPAD_UP"/>
-		<field name="KEYCODE_DPAD_UP_LEFT" since="24"/>
-		<field name="KEYCODE_DPAD_UP_RIGHT" since="24"/>
-		<field name="KEYCODE_DVR" since="11"/>
-		<field name="KEYCODE_E"/>
-		<field name="KEYCODE_EISU" since="16"/>
-		<field name="KEYCODE_ENDCALL"/>
-		<field name="KEYCODE_ENTER"/>
-		<field name="KEYCODE_ENVELOPE"/>
-		<field name="KEYCODE_EQUALS"/>
-		<field name="KEYCODE_ESCAPE" since="11"/>
-		<field name="KEYCODE_EXPLORER"/>
-		<field name="KEYCODE_F"/>
-		<field name="KEYCODE_F1" since="11"/>
-		<field name="KEYCODE_F10" since="11"/>
-		<field name="KEYCODE_F11" since="11"/>
-		<field name="KEYCODE_F12" since="11"/>
-		<field name="KEYCODE_F2" since="11"/>
-		<field name="KEYCODE_F3" since="11"/>
-		<field name="KEYCODE_F4" since="11"/>
-		<field name="KEYCODE_F5" since="11"/>
-		<field name="KEYCODE_F6" since="11"/>
-		<field name="KEYCODE_F7" since="11"/>
-		<field name="KEYCODE_F8" since="11"/>
-		<field name="KEYCODE_F9" since="11"/>
-		<field name="KEYCODE_FOCUS"/>
-		<field name="KEYCODE_FORWARD" since="11"/>
-		<field name="KEYCODE_FORWARD_DEL" since="11"/>
-		<field name="KEYCODE_FUNCTION" since="11"/>
-		<field name="KEYCODE_G"/>
-		<field name="KEYCODE_GRAVE"/>
-		<field name="KEYCODE_GUIDE" since="11"/>
-		<field name="KEYCODE_H"/>
-		<field name="KEYCODE_HEADSETHOOK"/>
-		<field name="KEYCODE_HELP" since="21"/>
-		<field name="KEYCODE_HENKAN" since="16"/>
-		<field name="KEYCODE_HOME"/>
-		<field name="KEYCODE_I"/>
-		<field name="KEYCODE_INFO" since="11"/>
-		<field name="KEYCODE_INSERT" since="11"/>
-		<field name="KEYCODE_J"/>
-		<field name="KEYCODE_K"/>
-		<field name="KEYCODE_KANA" since="16"/>
-		<field name="KEYCODE_KATAKANA_HIRAGANA" since="16"/>
-		<field name="KEYCODE_L"/>
-		<field name="KEYCODE_LANGUAGE_SWITCH" since="14"/>
-		<field name="KEYCODE_LAST_CHANNEL" since="21"/>
-		<field name="KEYCODE_LEFT_BRACKET"/>
-		<field name="KEYCODE_M"/>
-		<field name="KEYCODE_MANNER_MODE" since="14"/>
-		<field name="KEYCODE_MEDIA_AUDIO_TRACK" since="19"/>
-		<field name="KEYCODE_MEDIA_CLOSE" since="11"/>
-		<field name="KEYCODE_MEDIA_EJECT" since="11"/>
-		<field name="KEYCODE_MEDIA_FAST_FORWARD" since="3"/>
-		<field name="KEYCODE_MEDIA_NEXT" since="3"/>
-		<field name="KEYCODE_MEDIA_PAUSE" since="11"/>
-		<field name="KEYCODE_MEDIA_PLAY" since="11"/>
-		<field name="KEYCODE_MEDIA_PLAY_PAUSE" since="3"/>
-		<field name="KEYCODE_MEDIA_PREVIOUS" since="3"/>
-		<field name="KEYCODE_MEDIA_RECORD" since="11"/>
-		<field name="KEYCODE_MEDIA_REWIND" since="3"/>
-		<field name="KEYCODE_MEDIA_SKIP_BACKWARD" since="23"/>
-		<field name="KEYCODE_MEDIA_SKIP_FORWARD" since="23"/>
-		<field name="KEYCODE_MEDIA_STEP_BACKWARD" since="23"/>
-		<field name="KEYCODE_MEDIA_STEP_FORWARD" since="23"/>
-		<field name="KEYCODE_MEDIA_STOP" since="3"/>
-		<field name="KEYCODE_MEDIA_TOP_MENU" since="21"/>
-		<field name="KEYCODE_MENU"/>
-		<field name="KEYCODE_META_LEFT" since="11"/>
-		<field name="KEYCODE_META_RIGHT" since="11"/>
-		<field name="KEYCODE_MINUS"/>
-		<field name="KEYCODE_MOVE_END" since="11"/>
-		<field name="KEYCODE_MOVE_HOME" since="11"/>
-		<field name="KEYCODE_MUHENKAN" since="16"/>
-		<field name="KEYCODE_MUSIC" since="15"/>
-		<field name="KEYCODE_MUTE" since="3"/>
-		<field name="KEYCODE_N"/>
-		<field name="KEYCODE_NAVIGATE_IN" since="23"/>
-		<field name="KEYCODE_NAVIGATE_NEXT" since="23"/>
-		<field name="KEYCODE_NAVIGATE_OUT" since="23"/>
-		<field name="KEYCODE_NAVIGATE_PREVIOUS" since="23"/>
-		<field name="KEYCODE_NOTIFICATION"/>
-		<field name="KEYCODE_NUM"/>
-		<field name="KEYCODE_NUMPAD_0" since="11"/>
-		<field name="KEYCODE_NUMPAD_1" since="11"/>
-		<field name="KEYCODE_NUMPAD_2" since="11"/>
-		<field name="KEYCODE_NUMPAD_3" since="11"/>
-		<field name="KEYCODE_NUMPAD_4" since="11"/>
-		<field name="KEYCODE_NUMPAD_5" since="11"/>
-		<field name="KEYCODE_NUMPAD_6" since="11"/>
-		<field name="KEYCODE_NUMPAD_7" since="11"/>
-		<field name="KEYCODE_NUMPAD_8" since="11"/>
-		<field name="KEYCODE_NUMPAD_9" since="11"/>
-		<field name="KEYCODE_NUMPAD_ADD" since="11"/>
-		<field name="KEYCODE_NUMPAD_COMMA" since="11"/>
-		<field name="KEYCODE_NUMPAD_DIVIDE" since="11"/>
-		<field name="KEYCODE_NUMPAD_DOT" since="11"/>
-		<field name="KEYCODE_NUMPAD_ENTER" since="11"/>
-		<field name="KEYCODE_NUMPAD_EQUALS" since="11"/>
-		<field name="KEYCODE_NUMPAD_LEFT_PAREN" since="11"/>
-		<field name="KEYCODE_NUMPAD_MULTIPLY" since="11"/>
-		<field name="KEYCODE_NUMPAD_RIGHT_PAREN" since="11"/>
-		<field name="KEYCODE_NUMPAD_SUBTRACT" since="11"/>
-		<field name="KEYCODE_NUM_LOCK" since="11"/>
-		<field name="KEYCODE_O"/>
-		<field name="KEYCODE_P"/>
-		<field name="KEYCODE_PAGE_DOWN" since="9"/>
-		<field name="KEYCODE_PAGE_UP" since="9"/>
-		<field name="KEYCODE_PAIRING" since="21"/>
-		<field name="KEYCODE_PASTE" since="24"/>
-		<field name="KEYCODE_PERIOD"/>
-		<field name="KEYCODE_PICTSYMBOLS" since="9"/>
-		<field name="KEYCODE_PLUS"/>
-		<field name="KEYCODE_POUND"/>
-		<field name="KEYCODE_POWER"/>
-		<field name="KEYCODE_PROG_BLUE" since="11"/>
-		<field name="KEYCODE_PROG_GREEN" since="11"/>
-		<field name="KEYCODE_PROG_RED" since="11"/>
-		<field name="KEYCODE_PROG_YELLOW" since="11"/>
-		<field name="KEYCODE_Q"/>
-		<field name="KEYCODE_R"/>
-		<field name="KEYCODE_REFRESH" since="28"/>
-		<field name="KEYCODE_RIGHT_BRACKET"/>
-		<field name="KEYCODE_RO" since="16"/>
-		<field name="KEYCODE_S"/>
-		<field name="KEYCODE_SCROLL_LOCK" since="11"/>
-		<field name="KEYCODE_SEARCH"/>
-		<field name="KEYCODE_SEMICOLON"/>
-		<field name="KEYCODE_SETTINGS" since="11"/>
-		<field name="KEYCODE_SHIFT_LEFT"/>
-		<field name="KEYCODE_SHIFT_RIGHT"/>
-		<field name="KEYCODE_SLASH"/>
-		<field name="KEYCODE_SLEEP" since="20"/>
-		<field name="KEYCODE_SOFT_LEFT"/>
-		<field name="KEYCODE_SOFT_RIGHT"/>
-		<field name="KEYCODE_SOFT_SLEEP" since="24"/>
-		<field name="KEYCODE_SPACE"/>
-		<field name="KEYCODE_STAR"/>
-		<field name="KEYCODE_STB_INPUT" since="11"/>
-		<field name="KEYCODE_STB_POWER" since="11"/>
-		<field name="KEYCODE_STEM_1" since="24"/>
-		<field name="KEYCODE_STEM_2" since="24"/>
-		<field name="KEYCODE_STEM_3" since="24"/>
-		<field name="KEYCODE_STEM_PRIMARY" since="24"/>
-		<field name="KEYCODE_SWITCH_CHARSET" since="9"/>
-		<field name="KEYCODE_SYM"/>
-		<field name="KEYCODE_SYSRQ" since="11"/>
-		<field name="KEYCODE_SYSTEM_NAVIGATION_DOWN" since="25"/>
-		<field name="KEYCODE_SYSTEM_NAVIGATION_LEFT" since="25"/>
-		<field name="KEYCODE_SYSTEM_NAVIGATION_RIGHT" since="25"/>
-		<field name="KEYCODE_SYSTEM_NAVIGATION_UP" since="25"/>
-		<field name="KEYCODE_T"/>
-		<field name="KEYCODE_TAB"/>
-		<field name="KEYCODE_TV" since="11"/>
-		<field name="KEYCODE_TV_ANTENNA_CABLE" since="21"/>
-		<field name="KEYCODE_TV_AUDIO_DESCRIPTION" since="21"/>
-		<field name="KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN" since="21"/>
-		<field name="KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP" since="21"/>
-		<field name="KEYCODE_TV_CONTENTS_MENU" since="21"/>
-		<field name="KEYCODE_TV_DATA_SERVICE" since="21"/>
-		<field name="KEYCODE_TV_INPUT" since="11"/>
-		<field name="KEYCODE_TV_INPUT_COMPONENT_1" since="21"/>
-		<field name="KEYCODE_TV_INPUT_COMPONENT_2" since="21"/>
-		<field name="KEYCODE_TV_INPUT_COMPOSITE_1" since="21"/>
-		<field name="KEYCODE_TV_INPUT_COMPOSITE_2" since="21"/>
-		<field name="KEYCODE_TV_INPUT_HDMI_1" since="21"/>
-		<field name="KEYCODE_TV_INPUT_HDMI_2" since="21"/>
-		<field name="KEYCODE_TV_INPUT_HDMI_3" since="21"/>
-		<field name="KEYCODE_TV_INPUT_HDMI_4" since="21"/>
-		<field name="KEYCODE_TV_INPUT_VGA_1" since="21"/>
-		<field name="KEYCODE_TV_MEDIA_CONTEXT_MENU" since="21"/>
-		<field name="KEYCODE_TV_NETWORK" since="21"/>
-		<field name="KEYCODE_TV_NUMBER_ENTRY" since="21"/>
-		<field name="KEYCODE_TV_POWER" since="11"/>
-		<field name="KEYCODE_TV_RADIO_SERVICE" since="21"/>
-		<field name="KEYCODE_TV_SATELLITE" since="21"/>
-		<field name="KEYCODE_TV_SATELLITE_BS" since="21"/>
-		<field name="KEYCODE_TV_SATELLITE_CS" since="21"/>
-		<field name="KEYCODE_TV_SATELLITE_SERVICE" since="21"/>
-		<field name="KEYCODE_TV_TELETEXT" since="21"/>
-		<field name="KEYCODE_TV_TERRESTRIAL_ANALOG" since="21"/>
-		<field name="KEYCODE_TV_TERRESTRIAL_DIGITAL" since="21"/>
-		<field name="KEYCODE_TV_TIMER_PROGRAMMING" since="21"/>
-		<field name="KEYCODE_TV_ZOOM_MODE" since="21"/>
-		<field name="KEYCODE_U"/>
-		<field name="KEYCODE_UNKNOWN"/>
-		<field name="KEYCODE_V"/>
-		<field name="KEYCODE_VOICE_ASSIST" since="21"/>
-		<field name="KEYCODE_VOLUME_DOWN"/>
-		<field name="KEYCODE_VOLUME_MUTE" since="11"/>
-		<field name="KEYCODE_VOLUME_UP"/>
-		<field name="KEYCODE_W"/>
-		<field name="KEYCODE_WAKEUP" since="20"/>
-		<field name="KEYCODE_WINDOW" since="11"/>
-		<field name="KEYCODE_X"/>
-		<field name="KEYCODE_Y"/>
-		<field name="KEYCODE_YEN" since="16"/>
-		<field name="KEYCODE_Z"/>
-		<field name="KEYCODE_ZENKAKU_HANKAKU" since="16"/>
-		<field name="KEYCODE_ZOOM_IN" since="11"/>
-		<field name="KEYCODE_ZOOM_OUT" since="11"/>
-		<field name="MAX_KEYCODE" deprecated="16"/>
-		<field name="META_ALT_LEFT_ON"/>
-		<field name="META_ALT_MASK" since="11"/>
-		<field name="META_ALT_ON"/>
-		<field name="META_ALT_RIGHT_ON"/>
-		<field name="META_CAPS_LOCK_ON" since="11"/>
-		<field name="META_CTRL_LEFT_ON" since="11"/>
-		<field name="META_CTRL_MASK" since="11"/>
-		<field name="META_CTRL_ON" since="11"/>
-		<field name="META_CTRL_RIGHT_ON" since="11"/>
-		<field name="META_FUNCTION_ON" since="11"/>
-		<field name="META_META_LEFT_ON" since="11"/>
-		<field name="META_META_MASK" since="11"/>
-		<field name="META_META_ON" since="11"/>
-		<field name="META_META_RIGHT_ON" since="11"/>
-		<field name="META_NUM_LOCK_ON" since="11"/>
-		<field name="META_SCROLL_LOCK_ON" since="11"/>
-		<field name="META_SHIFT_LEFT_ON"/>
-		<field name="META_SHIFT_MASK" since="11"/>
-		<field name="META_SHIFT_ON"/>
-		<field name="META_SHIFT_RIGHT_ON"/>
-		<field name="META_SYM_ON"/>
-	</class>
-	<class name="android/view/KeyEvent$Callback" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onKeyDown(ILandroid/view/KeyEvent;)Z"/>
-		<method name="onKeyLongPress(ILandroid/view/KeyEvent;)Z" since="5"/>
-		<method name="onKeyMultiple(IILandroid/view/KeyEvent;)Z"/>
-		<method name="onKeyUp(ILandroid/view/KeyEvent;)Z"/>
-	</class>
-	<class name="android/view/KeyEvent$DispatcherState" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="handleUpEvent(Landroid/view/KeyEvent;)V"/>
-		<method name="isTracking(Landroid/view/KeyEvent;)Z"/>
-		<method name="performedLongPress(Landroid/view/KeyEvent;)V"/>
-		<method name="reset()V"/>
-		<method name="reset(Ljava/lang/Object;)V"/>
-		<method name="startTracking(Landroid/view/KeyEvent;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/view/KeyboardShortcutGroup" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/util/List;)V"/>
-		<method name="addItem(Landroid/view/KeyboardShortcutInfo;)V"/>
-		<method name="getItems()Ljava/util/List;"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/KeyboardShortcutInfo" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;CI)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
-		<method name="getBaseCharacter()C"/>
-		<method name="getKeycode()I"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getModifiers()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/LayoutInflater" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V"/>
-		<method name="cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;"/>
-		<method name="createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;"/>
-		<method name="from(Landroid/content/Context;)Landroid/view/LayoutInflater;"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getFactory()Landroid/view/LayoutInflater$Factory;"/>
-		<method name="getFactory2()Landroid/view/LayoutInflater$Factory2;" since="11"/>
-		<method name="getFilter()Landroid/view/LayoutInflater$Filter;"/>
-		<method name="inflate(ILandroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;"/>
-		<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;"/>
-		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="11"/>
-		<method name="onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;"/>
-		<method name="setFactory(Landroid/view/LayoutInflater$Factory;)V"/>
-		<method name="setFactory2(Landroid/view/LayoutInflater$Factory2;)V" since="11"/>
-		<method name="setFilter(Landroid/view/LayoutInflater$Filter;)V"/>
-	</class>
-	<class name="android/view/LayoutInflater$Factory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;"/>
-	</class>
-	<class name="android/view/LayoutInflater$Factory2" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/LayoutInflater$Factory"/>
-		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;"/>
-	</class>
-	<class name="android/view/LayoutInflater$Filter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onLoadClass(Ljava/lang/Class;)Z"/>
-	</class>
-	<class name="android/view/Menu" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="add(I)Landroid/view/MenuItem;"/>
-		<method name="add(IIII)Landroid/view/MenuItem;"/>
-		<method name="add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;"/>
-		<method name="add(Ljava/lang/CharSequence;)Landroid/view/MenuItem;"/>
-		<method name="addIntentOptions(IIILandroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I[Landroid/view/MenuItem;)I"/>
-		<method name="addSubMenu(I)Landroid/view/SubMenu;"/>
-		<method name="addSubMenu(IIII)Landroid/view/SubMenu;"/>
-		<method name="addSubMenu(IIILjava/lang/CharSequence;)Landroid/view/SubMenu;"/>
-		<method name="addSubMenu(Ljava/lang/CharSequence;)Landroid/view/SubMenu;"/>
-		<method name="clear()V"/>
-		<method name="close()V" since="3"/>
-		<method name="findItem(I)Landroid/view/MenuItem;"/>
-		<method name="getItem(I)Landroid/view/MenuItem;" since="3"/>
-		<method name="hasVisibleItems()Z"/>
-		<method name="isShortcutKey(ILandroid/view/KeyEvent;)Z"/>
-		<method name="performIdentifierAction(II)Z"/>
-		<method name="performShortcut(ILandroid/view/KeyEvent;I)Z"/>
-		<method name="removeGroup(I)V"/>
-		<method name="removeItem(I)V"/>
-		<method name="setGroupCheckable(IZZ)V"/>
-		<method name="setGroupDividerEnabled(Z)V" since="28"/>
-		<method name="setGroupEnabled(IZ)V"/>
-		<method name="setGroupVisible(IZ)V"/>
-		<method name="setQwertyMode(Z)V"/>
-		<method name="size()I"/>
-		<field name="CATEGORY_ALTERNATIVE"/>
-		<field name="CATEGORY_CONTAINER"/>
-		<field name="CATEGORY_SECONDARY"/>
-		<field name="CATEGORY_SYSTEM"/>
-		<field name="FIRST"/>
-		<field name="FLAG_ALWAYS_PERFORM_CLOSE"/>
-		<field name="FLAG_APPEND_TO_GROUP"/>
-		<field name="FLAG_PERFORM_NO_CLOSE"/>
-		<field name="NONE"/>
-		<field name="SUPPORTED_MODIFIERS_MASK" since="26"/>
-	</class>
-	<class name="android/view/MenuInflater" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="inflate(ILandroid/view/Menu;)V"/>
-	</class>
-	<class name="android/view/MenuItem" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="collapseActionView()Z" since="14"/>
-		<method name="expandActionView()Z" since="14"/>
-		<method name="getActionProvider()Landroid/view/ActionProvider;" since="14"/>
-		<method name="getActionView()Landroid/view/View;" since="11"/>
-		<method name="getAlphabeticModifiers()I" since="26"/>
-		<method name="getAlphabeticShortcut()C"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;" since="26"/>
-		<method name="getGroupId()I"/>
-		<method name="getIcon()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getIconTintList()Landroid/content/res/ColorStateList;" since="26"/>
-		<method name="getIconTintMode()Landroid/graphics/PorterDuff$Mode;" since="26"/>
-		<method name="getIntent()Landroid/content/Intent;"/>
-		<method name="getItemId()I"/>
-		<method name="getMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;"/>
-		<method name="getNumericModifiers()I" since="26"/>
-		<method name="getNumericShortcut()C"/>
-		<method name="getOrder()I"/>
-		<method name="getSubMenu()Landroid/view/SubMenu;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="getTitleCondensed()Ljava/lang/CharSequence;"/>
-		<method name="getTooltipText()Ljava/lang/CharSequence;" since="26"/>
-		<method name="hasSubMenu()Z"/>
-		<method name="isActionViewExpanded()Z" since="14"/>
-		<method name="isCheckable()Z"/>
-		<method name="isChecked()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isVisible()Z"/>
-		<method name="setActionProvider(Landroid/view/ActionProvider;)Landroid/view/MenuItem;" since="14"/>
-		<method name="setActionView(I)Landroid/view/MenuItem;" since="11"/>
-		<method name="setActionView(Landroid/view/View;)Landroid/view/MenuItem;" since="11"/>
-		<method name="setAlphabeticShortcut(C)Landroid/view/MenuItem;"/>
-		<method name="setAlphabeticShortcut(CI)Landroid/view/MenuItem;" since="26"/>
-		<method name="setCheckable(Z)Landroid/view/MenuItem;"/>
-		<method name="setChecked(Z)Landroid/view/MenuItem;"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" since="26"/>
-		<method name="setEnabled(Z)Landroid/view/MenuItem;"/>
-		<method name="setIcon(I)Landroid/view/MenuItem;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/MenuItem;"/>
-		<method name="setIconTintList(Landroid/content/res/ColorStateList;)Landroid/view/MenuItem;" since="26"/>
-		<method name="setIconTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/view/MenuItem;" since="26"/>
-		<method name="setIntent(Landroid/content/Intent;)Landroid/view/MenuItem;"/>
-		<method name="setNumericShortcut(C)Landroid/view/MenuItem;"/>
-		<method name="setNumericShortcut(CI)Landroid/view/MenuItem;" since="26"/>
-		<method name="setOnActionExpandListener(Landroid/view/MenuItem$OnActionExpandListener;)Landroid/view/MenuItem;" since="14"/>
-		<method name="setOnMenuItemClickListener(Landroid/view/MenuItem$OnMenuItemClickListener;)Landroid/view/MenuItem;"/>
-		<method name="setShortcut(CC)Landroid/view/MenuItem;"/>
-		<method name="setShortcut(CCII)Landroid/view/MenuItem;" since="26"/>
-		<method name="setShowAsAction(I)V" since="11"/>
-		<method name="setShowAsActionFlags(I)Landroid/view/MenuItem;" since="14"/>
-		<method name="setTitle(I)Landroid/view/MenuItem;"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/view/MenuItem;"/>
-		<method name="setTitleCondensed(Ljava/lang/CharSequence;)Landroid/view/MenuItem;"/>
-		<method name="setTooltipText(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" since="26"/>
-		<method name="setVisible(Z)Landroid/view/MenuItem;"/>
-		<field name="SHOW_AS_ACTION_ALWAYS" since="11"/>
-		<field name="SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" since="14"/>
-		<field name="SHOW_AS_ACTION_IF_ROOM" since="11"/>
-		<field name="SHOW_AS_ACTION_NEVER" since="11"/>
-		<field name="SHOW_AS_ACTION_WITH_TEXT" since="11"/>
-	</class>
-	<class name="android/view/MenuItem$OnActionExpandListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onMenuItemActionCollapse(Landroid/view/MenuItem;)Z"/>
-		<method name="onMenuItemActionExpand(Landroid/view/MenuItem;)Z"/>
-	</class>
-	<class name="android/view/MenuItem$OnMenuItemClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
-	</class>
-	<class name="android/view/MotionEvent" since="1">
-		<extends name="android/view/InputEvent" since="9"/>
-		<extends name="java/lang/Object" removed="9"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="actionToString(I)Ljava/lang/String;" since="19"/>
-		<method name="addBatch(JFFFFI)V"/>
-		<method name="addBatch(J[Landroid/view/MotionEvent$PointerCoords;I)V" since="9"/>
-		<method name="axisFromString(Ljava/lang/String;)I" since="12"/>
-		<method name="axisToString(I)Ljava/lang/String;" since="12"/>
-		<method name="findPointerIndex(I)I" since="5"/>
-		<method name="getAction()I"/>
-		<method name="getActionButton()I" since="23"/>
-		<method name="getActionIndex()I" since="8"/>
-		<method name="getActionMasked()I" since="8"/>
-		<method name="getAxisValue(I)F" since="12"/>
-		<method name="getAxisValue(II)F" since="12"/>
-		<method name="getButtonState()I" since="14"/>
-		<method name="getDeviceId()I"/>
-		<method name="getDownTime()J"/>
-		<method name="getEdgeFlags()I"/>
-		<method name="getEventTime()J"/>
-		<method name="getFlags()I" since="9"/>
-		<method name="getHistoricalAxisValue(II)F" since="12"/>
-		<method name="getHistoricalAxisValue(III)F" since="12"/>
-		<method name="getHistoricalEventTime(I)J"/>
-		<method name="getHistoricalOrientation(I)F" since="9"/>
-		<method name="getHistoricalOrientation(II)F" since="9"/>
-		<method name="getHistoricalPointerCoords(IILandroid/view/MotionEvent$PointerCoords;)V" since="9"/>
-		<method name="getHistoricalPressure(I)F"/>
-		<method name="getHistoricalPressure(II)F" since="5"/>
-		<method name="getHistoricalSize(I)F"/>
-		<method name="getHistoricalSize(II)F" since="5"/>
-		<method name="getHistoricalToolMajor(I)F" since="9"/>
-		<method name="getHistoricalToolMajor(II)F" since="9"/>
-		<method name="getHistoricalToolMinor(I)F" since="9"/>
-		<method name="getHistoricalToolMinor(II)F" since="9"/>
-		<method name="getHistoricalTouchMajor(I)F" since="9"/>
-		<method name="getHistoricalTouchMajor(II)F" since="9"/>
-		<method name="getHistoricalTouchMinor(I)F" since="9"/>
-		<method name="getHistoricalTouchMinor(II)F" since="9"/>
-		<method name="getHistoricalX(I)F"/>
-		<method name="getHistoricalX(II)F" since="5"/>
-		<method name="getHistoricalY(I)F"/>
-		<method name="getHistoricalY(II)F" since="5"/>
-		<method name="getHistorySize()I"/>
-		<method name="getMetaState()I"/>
-		<method name="getOrientation()F" since="9"/>
-		<method name="getOrientation(I)F" since="9"/>
-		<method name="getPointerCoords(ILandroid/view/MotionEvent$PointerCoords;)V" since="9"/>
-		<method name="getPointerCount()I" since="5"/>
-		<method name="getPointerId(I)I" since="5"/>
-		<method name="getPointerProperties(ILandroid/view/MotionEvent$PointerProperties;)V" since="14"/>
-		<method name="getPressure()F"/>
-		<method name="getPressure(I)F" since="5"/>
-		<method name="getRawX()F"/>
-		<method name="getRawY()F"/>
-		<method name="getSize()F"/>
-		<method name="getSize(I)F" since="5"/>
-		<method name="getToolMajor()F" since="9"/>
-		<method name="getToolMajor(I)F" since="9"/>
-		<method name="getToolMinor()F" since="9"/>
-		<method name="getToolMinor(I)F" since="9"/>
-		<method name="getToolType(I)I" since="14"/>
-		<method name="getTouchMajor()F" since="9"/>
-		<method name="getTouchMajor(I)F" since="9"/>
-		<method name="getTouchMinor()F" since="9"/>
-		<method name="getTouchMinor(I)F" since="9"/>
-		<method name="getX()F"/>
-		<method name="getX(I)F" since="5"/>
-		<method name="getXPrecision()F"/>
-		<method name="getY()F"/>
-		<method name="getY(I)F" since="5"/>
-		<method name="getYPrecision()F"/>
-		<method name="isButtonPressed(I)Z" since="21"/>
-		<method name="obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;"/>
-		<method name="obtain(JJIFFI)Landroid/view/MotionEvent;"/>
-		<method name="obtain(JJIIFFFFIFFII)Landroid/view/MotionEvent;" since="5" deprecated="16"/>
-		<method name="obtain(JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent;" since="9" deprecated="16"/>
-		<method name="obtain(JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent;" since="14"/>
-		<method name="obtain(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;"/>
-		<method name="obtainNoHistory(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;" since="5"/>
-		<method name="offsetLocation(FF)V"/>
-		<method name="recycle()V"/>
-		<method name="setAction(I)V"/>
-		<method name="setEdgeFlags(I)V"/>
-		<method name="setLocation(FF)V"/>
-		<method name="setSource(I)V" since="12"/>
-		<method name="transform(Landroid/graphics/Matrix;)V" since="11"/>
-		<field name="ACTION_BUTTON_PRESS" since="23"/>
-		<field name="ACTION_BUTTON_RELEASE" since="23"/>
-		<field name="ACTION_CANCEL"/>
-		<field name="ACTION_DOWN"/>
-		<field name="ACTION_HOVER_ENTER" since="14"/>
-		<field name="ACTION_HOVER_EXIT" since="14"/>
-		<field name="ACTION_HOVER_MOVE" since="12"/>
-		<field name="ACTION_MASK" since="5"/>
-		<field name="ACTION_MOVE"/>
-		<field name="ACTION_OUTSIDE" since="3"/>
-		<field name="ACTION_POINTER_1_DOWN" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_1_UP" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_2_DOWN" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_2_UP" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_3_DOWN" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_3_UP" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_DOWN" since="5"/>
-		<field name="ACTION_POINTER_ID_MASK" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_ID_SHIFT" since="5" deprecated="16"/>
-		<field name="ACTION_POINTER_INDEX_MASK" since="8"/>
-		<field name="ACTION_POINTER_INDEX_SHIFT" since="8"/>
-		<field name="ACTION_POINTER_UP" since="5"/>
-		<field name="ACTION_SCROLL" since="12"/>
-		<field name="ACTION_UP"/>
-		<field name="AXIS_BRAKE" since="12"/>
-		<field name="AXIS_DISTANCE" since="14"/>
-		<field name="AXIS_GAS" since="12"/>
-		<field name="AXIS_GENERIC_1" since="12"/>
-		<field name="AXIS_GENERIC_10" since="12"/>
-		<field name="AXIS_GENERIC_11" since="12"/>
-		<field name="AXIS_GENERIC_12" since="12"/>
-		<field name="AXIS_GENERIC_13" since="12"/>
-		<field name="AXIS_GENERIC_14" since="12"/>
-		<field name="AXIS_GENERIC_15" since="12"/>
-		<field name="AXIS_GENERIC_16" since="12"/>
-		<field name="AXIS_GENERIC_2" since="12"/>
-		<field name="AXIS_GENERIC_3" since="12"/>
-		<field name="AXIS_GENERIC_4" since="12"/>
-		<field name="AXIS_GENERIC_5" since="12"/>
-		<field name="AXIS_GENERIC_6" since="12"/>
-		<field name="AXIS_GENERIC_7" since="12"/>
-		<field name="AXIS_GENERIC_8" since="12"/>
-		<field name="AXIS_GENERIC_9" since="12"/>
-		<field name="AXIS_HAT_X" since="12"/>
-		<field name="AXIS_HAT_Y" since="12"/>
-		<field name="AXIS_HSCROLL" since="12"/>
-		<field name="AXIS_LTRIGGER" since="12"/>
-		<field name="AXIS_ORIENTATION" since="12"/>
-		<field name="AXIS_PRESSURE" since="12"/>
-		<field name="AXIS_RELATIVE_X" since="24"/>
-		<field name="AXIS_RELATIVE_Y" since="24"/>
-		<field name="AXIS_RTRIGGER" since="12"/>
-		<field name="AXIS_RUDDER" since="12"/>
-		<field name="AXIS_RX" since="12"/>
-		<field name="AXIS_RY" since="12"/>
-		<field name="AXIS_RZ" since="12"/>
-		<field name="AXIS_SCROLL" since="26"/>
-		<field name="AXIS_SIZE" since="12"/>
-		<field name="AXIS_THROTTLE" since="12"/>
-		<field name="AXIS_TILT" since="14"/>
-		<field name="AXIS_TOOL_MAJOR" since="12"/>
-		<field name="AXIS_TOOL_MINOR" since="12"/>
-		<field name="AXIS_TOUCH_MAJOR" since="12"/>
-		<field name="AXIS_TOUCH_MINOR" since="12"/>
-		<field name="AXIS_VSCROLL" since="12"/>
-		<field name="AXIS_WHEEL" since="12"/>
-		<field name="AXIS_X" since="12"/>
-		<field name="AXIS_Y" since="12"/>
-		<field name="AXIS_Z" since="12"/>
-		<field name="BUTTON_BACK" since="14"/>
-		<field name="BUTTON_FORWARD" since="14"/>
-		<field name="BUTTON_PRIMARY" since="14"/>
-		<field name="BUTTON_SECONDARY" since="14"/>
-		<field name="BUTTON_STYLUS_PRIMARY" since="23"/>
-		<field name="BUTTON_STYLUS_SECONDARY" since="23"/>
-		<field name="BUTTON_TERTIARY" since="14"/>
-		<field name="CREATOR"/>
-		<field name="EDGE_BOTTOM"/>
-		<field name="EDGE_LEFT"/>
-		<field name="EDGE_RIGHT"/>
-		<field name="EDGE_TOP"/>
-		<field name="FLAG_WINDOW_IS_OBSCURED" since="9"/>
-		<field name="INVALID_POINTER_ID" since="14"/>
-		<field name="TOOL_TYPE_ERASER" since="14"/>
-		<field name="TOOL_TYPE_FINGER" since="14"/>
-		<field name="TOOL_TYPE_MOUSE" since="14"/>
-		<field name="TOOL_TYPE_STYLUS" since="14"/>
-		<field name="TOOL_TYPE_UNKNOWN" since="14"/>
-	</class>
-	<class name="android/view/MotionEvent$PointerCoords" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/view/MotionEvent$PointerCoords;)V" since="12"/>
-		<method name="clear()V" since="12"/>
-		<method name="copyFrom(Landroid/view/MotionEvent$PointerCoords;)V" since="12"/>
-		<method name="getAxisValue(I)F" since="12"/>
-		<method name="setAxisValue(IF)V" since="12"/>
-		<field name="orientation"/>
-		<field name="pressure"/>
-		<field name="size"/>
-		<field name="toolMajor"/>
-		<field name="toolMinor"/>
-		<field name="touchMajor"/>
-		<field name="touchMinor"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/view/MotionEvent$PointerProperties" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/view/MotionEvent$PointerProperties;)V"/>
-		<method name="clear()V"/>
-		<method name="copyFrom(Landroid/view/MotionEvent$PointerProperties;)V"/>
-		<field name="id"/>
-		<field name="toolType"/>
-	</class>
-	<class name="android/view/OrientationEventListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="canDetectOrientation()Z"/>
-		<method name="disable()V"/>
-		<method name="enable()V"/>
-		<method name="onOrientationChanged(I)V"/>
-		<field name="ORIENTATION_UNKNOWN"/>
-	</class>
-	<class name="android/view/OrientationListener" since="1" deprecated="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/hardware/SensorListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V" since="3"/>
-		<method name="disable()V"/>
-		<method name="enable()V"/>
-		<method name="onOrientationChanged(I)V"/>
-		<field name="ORIENTATION_UNKNOWN"/>
-	</class>
-	<class name="android/view/PixelCopy" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="request(Landroid/view/Surface;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V"/>
-		<method name="request(Landroid/view/Surface;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
-		<method name="request(Landroid/view/SurfaceView;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V"/>
-		<method name="request(Landroid/view/SurfaceView;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
-		<method name="request(Landroid/view/Window;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
-		<method name="request(Landroid/view/Window;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
-		<field name="ERROR_DESTINATION_INVALID"/>
-		<field name="ERROR_SOURCE_INVALID"/>
-		<field name="ERROR_SOURCE_NO_DATA"/>
-		<field name="ERROR_TIMEOUT"/>
-		<field name="ERROR_UNKNOWN"/>
-		<field name="SUCCESS"/>
-	</class>
-	<class name="android/view/PixelCopy$OnPixelCopyFinishedListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onPixelCopyFinished(I)V"/>
-	</class>
-	<class name="android/view/PointerIcon" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="create(Landroid/graphics/Bitmap;FF)Landroid/view/PointerIcon;"/>
-		<method name="getSystemIcon(Landroid/content/Context;I)Landroid/view/PointerIcon;"/>
-		<method name="load(Landroid/content/res/Resources;I)Landroid/view/PointerIcon;"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_ALIAS"/>
-		<field name="TYPE_ALL_SCROLL"/>
-		<field name="TYPE_ARROW"/>
-		<field name="TYPE_CELL"/>
-		<field name="TYPE_CONTEXT_MENU"/>
-		<field name="TYPE_COPY"/>
-		<field name="TYPE_CROSSHAIR"/>
-		<field name="TYPE_DEFAULT"/>
-		<field name="TYPE_GRAB"/>
-		<field name="TYPE_GRABBING"/>
-		<field name="TYPE_HAND"/>
-		<field name="TYPE_HELP"/>
-		<field name="TYPE_HORIZONTAL_DOUBLE_ARROW"/>
-		<field name="TYPE_NO_DROP"/>
-		<field name="TYPE_NULL"/>
-		<field name="TYPE_TEXT"/>
-		<field name="TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW"/>
-		<field name="TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW"/>
-		<field name="TYPE_VERTICAL_DOUBLE_ARROW"/>
-		<field name="TYPE_VERTICAL_TEXT"/>
-		<field name="TYPE_WAIT"/>
-		<field name="TYPE_ZOOM_IN"/>
-		<field name="TYPE_ZOOM_OUT"/>
-	</class>
-	<class name="android/view/ScaleGestureDetector" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;Landroid/os/Handler;)V" since="19"/>
-		<method name="getCurrentSpan()F"/>
-		<method name="getCurrentSpanX()F" since="11"/>
-		<method name="getCurrentSpanY()F" since="11"/>
-		<method name="getEventTime()J"/>
-		<method name="getFocusX()F"/>
-		<method name="getFocusY()F"/>
-		<method name="getPreviousSpan()F"/>
-		<method name="getPreviousSpanX()F" since="11"/>
-		<method name="getPreviousSpanY()F" since="11"/>
-		<method name="getScaleFactor()F"/>
-		<method name="getTimeDelta()J"/>
-		<method name="isInProgress()Z"/>
-		<method name="isQuickScaleEnabled()Z" since="19"/>
-		<method name="isStylusScaleEnabled()Z" since="23"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="setQuickScaleEnabled(Z)V" since="19"/>
-		<method name="setStylusScaleEnabled(Z)V" since="23"/>
-	</class>
-	<class name="android/view/ScaleGestureDetector$OnScaleGestureListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="onScale(Landroid/view/ScaleGestureDetector;)Z"/>
-		<method name="onScaleBegin(Landroid/view/ScaleGestureDetector;)Z"/>
-		<method name="onScaleEnd(Landroid/view/ScaleGestureDetector;)V"/>
-	</class>
-	<class name="android/view/ScaleGestureDetector$SimpleOnScaleGestureListener" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/ScaleGestureDetector$OnScaleGestureListener"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/view/SearchEvent" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/InputDevice;)V"/>
-		<method name="getInputDevice()Landroid/view/InputDevice;"/>
-	</class>
-	<class name="android/view/SoundEffectConstants" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContantForFocusDirection(I)I"/>
-		<field name="CLICK"/>
-		<field name="NAVIGATION_DOWN"/>
-		<field name="NAVIGATION_LEFT"/>
-		<field name="NAVIGATION_RIGHT"/>
-		<field name="NAVIGATION_UP"/>
-	</class>
-	<class name="android/view/SubMenu" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/Menu"/>
-		<method name="clearHeader()V"/>
-		<method name="getItem()Landroid/view/MenuItem;"/>
-		<method name="setHeaderIcon(I)Landroid/view/SubMenu;"/>
-		<method name="setHeaderIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;"/>
-		<method name="setHeaderTitle(I)Landroid/view/SubMenu;"/>
-		<method name="setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/SubMenu;"/>
-		<method name="setHeaderView(Landroid/view/View;)Landroid/view/SubMenu;"/>
-		<method name="setIcon(I)Landroid/view/SubMenu;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;"/>
-	</class>
-	<class name="android/view/Surface" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="14"/>
-		<method name="&lt;init>(Landroid/graphics/SurfaceTexture;)V" since="14"/>
-		<method name="freeze()V" removed="14"/>
-		<method name="hide()V" removed="14"/>
-		<method name="isValid()Z"/>
-		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;"/>
-		<method name="lockHardwareCanvas()Landroid/graphics/Canvas;" since="23"/>
-		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
-		<method name="release()V" since="14"/>
-		<method name="setAlpha(F)V" removed="14"/>
-		<method name="setFlags(II)V" removed="14"/>
-		<method name="setFreezeTint(I)V" removed="14"/>
-		<method name="setLayer(I)V" removed="14"/>
-		<method name="setMatrix(FFFF)V" removed="14"/>
-		<method name="setOrientation(II)V" removed="14"/>
-		<method name="setPosition(II)V" removed="14"/>
-		<method name="setSize(II)V" removed="14"/>
-		<method name="setTransparentRegionHint(Landroid/graphics/Region;)V" removed="14"/>
-		<method name="show()V" removed="14"/>
-		<method name="unfreeze()V" removed="14"/>
-		<method name="unlockCanvas(Landroid/graphics/Canvas;)V" deprecated="17"/>
-		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V"/>
-		<field name="CREATOR"/>
-		<field name="FX_SURFACE_BLUR" removed="14"/>
-		<field name="FX_SURFACE_DIM" removed="14"/>
-		<field name="FX_SURFACE_MASK" removed="14"/>
-		<field name="FX_SURFACE_NORMAL" removed="14"/>
-		<field name="GPU" removed="14"/>
-		<field name="HARDWARE" removed="14"/>
-		<field name="HIDDEN" removed="14"/>
-		<field name="NON_PREMULTIPLIED" removed="14"/>
-		<field name="PUSH_BUFFERS" removed="14"/>
-		<field name="ROTATION_0"/>
-		<field name="ROTATION_180"/>
-		<field name="ROTATION_270"/>
-		<field name="ROTATION_90"/>
-		<field name="SECURE" removed="14"/>
-		<field name="SURACE_FROZEN" removed="14"/>
-		<field name="SURFACE_BLUR_FREEZE" removed="14"/>
-		<field name="SURFACE_DITHER" removed="14"/>
-		<field name="SURFACE_FROZEN" since="4" removed="14"/>
-		<field name="SURFACE_HIDDEN" removed="14"/>
-	</class>
-	<class name="android/view/Surface$OutOfResourcesException" since="1">
-		<extends name="java/lang/Exception" removed="19"/>
-		<extends name="java/lang/RuntimeException" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/view/SurfaceHolder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="addCallback(Landroid/view/SurfaceHolder$Callback;)V"/>
-		<method name="getSurface()Landroid/view/Surface;"/>
-		<method name="getSurfaceFrame()Landroid/graphics/Rect;"/>
-		<method name="isCreating()Z"/>
-		<method name="lockCanvas()Landroid/graphics/Canvas;"/>
-		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;"/>
-		<method name="lockHardwareCanvas()Landroid/graphics/Canvas;" since="26"/>
-		<method name="removeCallback(Landroid/view/SurfaceHolder$Callback;)V"/>
-		<method name="setFixedSize(II)V"/>
-		<method name="setFormat(I)V"/>
-		<method name="setKeepScreenOn(Z)V"/>
-		<method name="setSizeFromLayout()V"/>
-		<method name="setType(I)V" deprecated="16"/>
-		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V"/>
-		<field name="SURFACE_TYPE_GPU" deprecated="16"/>
-		<field name="SURFACE_TYPE_HARDWARE" deprecated="16"/>
-		<field name="SURFACE_TYPE_NORMAL" deprecated="16"/>
-		<field name="SURFACE_TYPE_PUSH_BUFFERS" deprecated="16"/>
-	</class>
-	<class name="android/view/SurfaceHolder$BadSurfaceTypeException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/view/SurfaceHolder$Callback" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="surfaceChanged(Landroid/view/SurfaceHolder;III)V"/>
-		<method name="surfaceCreated(Landroid/view/SurfaceHolder;)V"/>
-		<method name="surfaceDestroyed(Landroid/view/SurfaceHolder;)V"/>
-	</class>
-	<class name="android/view/SurfaceHolder$Callback2" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/SurfaceHolder$Callback"/>
-		<method name="surfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V"/>
-		<method name="surfaceRedrawNeededAsync(Landroid/view/SurfaceHolder;Ljava/lang/Runnable;)V" since="26"/>
-	</class>
-	<class name="android/view/SurfaceView" since="1">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z"/>
-		<method name="getHolder()Landroid/view/SurfaceHolder;"/>
-		<method name="setSecure(Z)V" since="17"/>
-		<method name="setZOrderMediaOverlay(Z)V" since="5"/>
-		<method name="setZOrderOnTop(Z)V" since="5"/>
-	</class>
-	<class name="android/view/TextureView" since="14">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getBitmap()Landroid/graphics/Bitmap;"/>
-		<method name="getBitmap(II)Landroid/graphics/Bitmap;"/>
-		<method name="getBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;"/>
-		<method name="getSurfaceTexture()Landroid/graphics/SurfaceTexture;"/>
-		<method name="getSurfaceTextureListener()Landroid/view/TextureView$SurfaceTextureListener;"/>
-		<method name="getTransform(Landroid/graphics/Matrix;)Landroid/graphics/Matrix;"/>
-		<method name="isAvailable()Z"/>
-		<method name="lockCanvas()Landroid/graphics/Canvas;"/>
-		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;"/>
-		<method name="setOpaque(Z)V"/>
-		<method name="setSurfaceTexture(Landroid/graphics/SurfaceTexture;)V" since="16"/>
-		<method name="setSurfaceTextureListener(Landroid/view/TextureView$SurfaceTextureListener;)V"/>
-		<method name="setTransform(Landroid/graphics/Matrix;)V"/>
-		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V"/>
-	</class>
-	<class name="android/view/TextureView$SurfaceTextureListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onSurfaceTextureAvailable(Landroid/graphics/SurfaceTexture;II)V"/>
-		<method name="onSurfaceTextureDestroyed(Landroid/graphics/SurfaceTexture;)Z"/>
-		<method name="onSurfaceTextureSizeChanged(Landroid/graphics/SurfaceTexture;II)V"/>
-		<method name="onSurfaceTextureUpdated(Landroid/graphics/SurfaceTexture;)V"/>
-	</class>
-	<class name="android/view/TouchDelegate" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/graphics/Rect;Landroid/view/View;)V"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<field name="ABOVE"/>
-		<field name="BELOW"/>
-		<field name="TO_LEFT"/>
-		<field name="TO_RIGHT"/>
-	</class>
-	<class name="android/view/VelocityTracker" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="addMovement(Landroid/view/MotionEvent;)V"/>
-		<method name="clear()V"/>
-		<method name="computeCurrentVelocity(I)V"/>
-		<method name="computeCurrentVelocity(IF)V" since="4"/>
-		<method name="getXVelocity()F"/>
-		<method name="getXVelocity(I)F" since="8"/>
-		<method name="getYVelocity()F"/>
-		<method name="getYVelocity(I)F" since="8"/>
-		<method name="obtain()Landroid/view/VelocityTracker;"/>
-		<method name="recycle()V"/>
-	</class>
-	<class name="android/view/View" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/graphics/drawable/Drawable$Callback"/>
-		<implements name="android/view/KeyEvent$Callback"/>
-		<implements name="android/view/accessibility/AccessibilityEventSource" since="4"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addChildrenForAccessibility(Ljava/util/ArrayList;)V" since="16"/>
-		<method name="addExtraDataToAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26"/>
-		<method name="addFocusables(Ljava/util/ArrayList;I)V"/>
-		<method name="addFocusables(Ljava/util/ArrayList;II)V" since="4"/>
-		<method name="addKeyboardNavigationClusters(Ljava/util/Collection;I)V" since="26"/>
-		<method name="addOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V" since="12"/>
-		<method name="addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V" since="11"/>
-		<method name="addOnUnhandledKeyEventListener(Landroid/view/View$OnUnhandledKeyEventListener;)V" since="28"/>
-		<method name="addTouchables(Ljava/util/ArrayList;)V"/>
-		<method name="animate()Landroid/view/ViewPropertyAnimator;" since="12"/>
-		<method name="announceForAccessibility(Ljava/lang/CharSequence;)V" since="16"/>
-		<method name="autofill(Landroid/util/SparseArray;)V" since="26"/>
-		<method name="autofill(Landroid/view/autofill/AutofillValue;)V" since="26"/>
-		<method name="awakenScrollBars()Z" since="5"/>
-		<method name="awakenScrollBars(I)Z" since="5"/>
-		<method name="awakenScrollBars(IZ)Z" since="5"/>
-		<method name="bringToFront()V"/>
-		<method name="buildDrawingCache()V" deprecated="28"/>
-		<method name="buildDrawingCache(Z)V" since="4" deprecated="28"/>
-		<method name="buildLayer()V" since="12"/>
-		<method name="callOnClick()Z" since="15"/>
-		<method name="canResolveLayoutDirection()Z" since="19"/>
-		<method name="canResolveTextAlignment()Z" since="19"/>
-		<method name="canResolveTextDirection()Z" since="19"/>
-		<method name="canScrollHorizontally(I)Z" since="14"/>
-		<method name="canScrollVertically(I)Z" since="14"/>
-		<method name="cancelDragAndDrop()V" since="24"/>
-		<method name="cancelLongPress()V"/>
-		<method name="cancelPendingInputEvents()V" since="19"/>
-		<method name="checkInputConnectionProxy(Landroid/view/View;)Z" since="3"/>
-		<method name="clearAnimation()V"/>
-		<method name="clearFocus()V"/>
-		<method name="combineMeasuredStates(II)I" since="11"/>
-		<method name="computeHorizontalScrollExtent()I"/>
-		<method name="computeHorizontalScrollOffset()I"/>
-		<method name="computeHorizontalScrollRange()I"/>
-		<method name="computeScroll()V"/>
-		<method name="computeSystemWindowInsets(Landroid/view/WindowInsets;Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21"/>
-		<method name="computeVerticalScrollExtent()I"/>
-		<method name="computeVerticalScrollOffset()I"/>
-		<method name="computeVerticalScrollRange()I"/>
-		<method name="createAccessibilityNodeInfo()Landroid/view/accessibility/AccessibilityNodeInfo;" since="14"/>
-		<method name="createContextMenu(Landroid/view/ContextMenu;)V"/>
-		<method name="destroyDrawingCache()V" deprecated="28"/>
-		<method name="dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;" since="20"/>
-		<method name="dispatchCapturedPointerEvent(Landroid/view/MotionEvent;)Z" since="26"/>
-		<method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V" since="8"/>
-		<method name="dispatchDisplayHint(I)V" since="8"/>
-		<method name="dispatchDragEvent(Landroid/view/DragEvent;)Z" since="11"/>
-		<method name="dispatchDraw(Landroid/graphics/Canvas;)V"/>
-		<method name="dispatchDrawableHotspotChanged(FF)V" since="22"/>
-		<method name="dispatchFinishTemporaryDetach()V" since="24"/>
-		<method name="dispatchGenericFocusedEvent(Landroid/view/MotionEvent;)Z" since="14"/>
-		<method name="dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
-		<method name="dispatchGenericPointerEvent(Landroid/view/MotionEvent;)Z" since="14"/>
-		<method name="dispatchHoverEvent(Landroid/view/MotionEvent;)Z" since="14"/>
-		<method name="dispatchKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z" since="3"/>
-		<method name="dispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="dispatchNestedFling(FFZ)Z" since="21"/>
-		<method name="dispatchNestedPreFling(FF)Z" since="21"/>
-		<method name="dispatchNestedPrePerformAccessibilityAction(ILandroid/os/Bundle;)Z" since="22"/>
-		<method name="dispatchNestedPreScroll(II[I[I)Z" since="21"/>
-		<method name="dispatchNestedScroll(IIII[I)Z" since="21"/>
-		<method name="dispatchPointerCaptureChanged(Z)V" since="26"/>
-		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z" since="4"/>
-		<method name="dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V" since="26"/>
-		<method name="dispatchProvideStructure(Landroid/view/ViewStructure;)V" since="23"/>
-		<method name="dispatchRestoreInstanceState(Landroid/util/SparseArray;)V"/>
-		<method name="dispatchSaveInstanceState(Landroid/util/SparseArray;)V"/>
-		<method name="dispatchSetActivated(Z)V" since="11"/>
-		<method name="dispatchSetPressed(Z)V"/>
-		<method name="dispatchSetSelected(Z)V"/>
-		<method name="dispatchStartTemporaryDetach()V" since="24"/>
-		<method name="dispatchSystemUiVisibilityChanged(I)V" since="11"/>
-		<method name="dispatchTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="dispatchTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="dispatchUnhandledMove(Landroid/view/View;I)Z"/>
-		<method name="dispatchVisibilityChanged(Landroid/view/View;I)V" since="8"/>
-		<method name="dispatchWindowFocusChanged(Z)V"/>
-		<method name="dispatchWindowSystemUiVisiblityChanged(I)V" since="16"/>
-		<method name="dispatchWindowVisibilityChanged(I)V"/>
-		<method name="draw(Landroid/graphics/Canvas;)V"/>
-		<method name="drawableHotspotChanged(FF)V" since="21"/>
-		<method name="drawableStateChanged()V"/>
-		<method name="findFocus()Landroid/view/View;"/>
-		<method name="findViewById(I)Landroid/view/View;"/>
-		<method name="findViewWithTag(Ljava/lang/Object;)Landroid/view/View;"/>
-		<method name="findViewsWithText(Ljava/util/ArrayList;Ljava/lang/CharSequence;I)V" since="14"/>
-		<method name="fitSystemWindows(Landroid/graphics/Rect;)Z" deprecated="20"/>
-		<method name="fitsSystemWindows()Z" since="14" removed="16"/>
-		<method name="focusSearch(I)Landroid/view/View;"/>
-		<method name="forceHasOverlappingRendering(Z)V" since="24"/>
-		<method name="forceLayout()V"/>
-		<method name="generateViewId()I" since="17"/>
-		<method name="getAccessibilityClassName()Ljava/lang/CharSequence;" since="23"/>
-		<method name="getAccessibilityLiveRegion()I" since="19"/>
-		<method name="getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;" since="16"/>
-		<method name="getAccessibilityPaneTitle()Ljava/lang/CharSequence;" since="28"/>
-		<method name="getAccessibilityTraversalAfter()I" since="22"/>
-		<method name="getAccessibilityTraversalBefore()I" since="22"/>
-		<method name="getAlpha()F" since="11"/>
-		<method name="getAnimation()Landroid/view/animation/Animation;"/>
-		<method name="getApplicationWindowToken()Landroid/os/IBinder;"/>
-		<method name="getAutofillHints()[Ljava/lang/String;" since="26"/>
-		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
-		<method name="getAutofillType()I" since="26"/>
-		<method name="getAutofillValue()Landroid/view/autofill/AutofillValue;" since="26"/>
-		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getBackgroundTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="getBaseline()I"/>
-		<method name="getBottom()I"/>
-		<method name="getBottomFadingEdgeStrength()F"/>
-		<method name="getBottomPaddingOffset()I" since="2"/>
-		<method name="getCameraDistance()F" since="16"/>
-		<method name="getClipBounds()Landroid/graphics/Rect;" since="18"/>
-		<method name="getClipBounds(Landroid/graphics/Rect;)Z" since="23"/>
-		<method name="getClipToOutline()Z" since="21"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;" since="4"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getContextMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;"/>
-		<method name="getDefaultFocusHighlightEnabled()Z" since="26"/>
-		<method name="getDefaultSize(II)I"/>
-		<method name="getDisplay()Landroid/view/Display;" since="17"/>
-		<method name="getDrawableState()[I"/>
-		<method name="getDrawingCache()Landroid/graphics/Bitmap;" deprecated="28"/>
-		<method name="getDrawingCache(Z)Landroid/graphics/Bitmap;" since="4" deprecated="28"/>
-		<method name="getDrawingCacheBackgroundColor()I" deprecated="28"/>
-		<method name="getDrawingCacheQuality()I" deprecated="28"/>
-		<method name="getDrawingRect(Landroid/graphics/Rect;)V"/>
-		<method name="getDrawingTime()J"/>
-		<method name="getElevation()F" since="21"/>
-		<method name="getFilterTouchesWhenObscured()Z" since="9"/>
-		<method name="getFitsSystemWindows()Z" since="16"/>
-		<method name="getFocusable()I" since="26"/>
-		<method name="getFocusables(I)Ljava/util/ArrayList;"/>
-		<method name="getFocusedRect(Landroid/graphics/Rect;)V"/>
-		<method name="getForeground()Landroid/graphics/drawable/Drawable;" since="23"/>
-		<method name="getForegroundGravity()I" since="23"/>
-		<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="23"/>
-		<method name="getForegroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
-		<method name="getGlobalVisibleRect(Landroid/graphics/Rect;)Z"/>
-		<method name="getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z"/>
-		<method name="getHandler()Landroid/os/Handler;"/>
-		<method name="getHasOverlappingRendering()Z" since="24"/>
-		<method name="getHeight()I"/>
-		<method name="getHitRect(Landroid/graphics/Rect;)V"/>
-		<method name="getHorizontalFadingEdgeLength()I"/>
-		<method name="getHorizontalScrollbarHeight()I"/>
-		<method name="getId()I"/>
-		<method name="getImportantForAccessibility()I" since="16"/>
-		<method name="getImportantForAutofill()I" since="26"/>
-		<method name="getKeepScreenOn()Z"/>
-		<method name="getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;" since="5"/>
-		<method name="getLabelFor()I" since="17"/>
-		<method name="getLayerType()I" since="11"/>
-		<method name="getLayoutDirection()I" since="17"/>
-		<method name="getLayoutParams()Landroid/view/ViewGroup$LayoutParams;"/>
-		<method name="getLeft()I"/>
-		<method name="getLeftFadingEdgeStrength()F"/>
-		<method name="getLeftPaddingOffset()I" since="2"/>
-		<method name="getLocalVisibleRect(Landroid/graphics/Rect;)Z"/>
-		<method name="getLocationInWindow([I)V"/>
-		<method name="getLocationOnScreen([I)V"/>
-		<method name="getMatrix()Landroid/graphics/Matrix;" since="11"/>
-		<method name="getMeasuredHeight()I"/>
-		<method name="getMeasuredHeightAndState()I" since="11"/>
-		<method name="getMeasuredState()I" since="11"/>
-		<method name="getMeasuredWidth()I"/>
-		<method name="getMeasuredWidthAndState()I" since="11"/>
-		<method name="getMinimumHeight()I" since="16"/>
-		<method name="getMinimumWidth()I" since="16"/>
-		<method name="getNextClusterForwardId()I" since="26"/>
-		<method name="getNextFocusDownId()I"/>
-		<method name="getNextFocusForwardId()I" since="11"/>
-		<method name="getNextFocusLeftId()I"/>
-		<method name="getNextFocusRightId()I"/>
-		<method name="getNextFocusUpId()I"/>
-		<method name="getOnFocusChangeListener()Landroid/view/View$OnFocusChangeListener;"/>
-		<method name="getOutlineAmbientShadowColor()I" since="28"/>
-		<method name="getOutlineProvider()Landroid/view/ViewOutlineProvider;" since="21"/>
-		<method name="getOutlineSpotShadowColor()I" since="28"/>
-		<method name="getOverScrollMode()I" since="9"/>
-		<method name="getOverlay()Landroid/view/ViewOverlay;" since="18"/>
-		<method name="getPaddingBottom()I"/>
-		<method name="getPaddingEnd()I" since="17"/>
-		<method name="getPaddingLeft()I"/>
-		<method name="getPaddingRight()I"/>
-		<method name="getPaddingStart()I" since="17"/>
-		<method name="getPaddingTop()I"/>
-		<method name="getParent()Landroid/view/ViewParent;"/>
-		<method name="getParentForAccessibility()Landroid/view/ViewParent;" since="16"/>
-		<method name="getPivotX()F" since="11"/>
-		<method name="getPivotY()F" since="11"/>
-		<method name="getPointerIcon()Landroid/view/PointerIcon;" since="24"/>
-		<method name="getResources()Landroid/content/res/Resources;"/>
-		<method name="getRevealOnFocusHint()Z" since="25"/>
-		<method name="getRight()I"/>
-		<method name="getRightFadingEdgeStrength()F"/>
-		<method name="getRightPaddingOffset()I" since="2"/>
-		<method name="getRootView()Landroid/view/View;"/>
-		<method name="getRootWindowInsets()Landroid/view/WindowInsets;" since="23"/>
-		<method name="getRotation()F" since="11"/>
-		<method name="getRotationX()F" since="11"/>
-		<method name="getRotationY()F" since="11"/>
-		<method name="getScaleX()F" since="11"/>
-		<method name="getScaleY()F" since="11"/>
-		<method name="getScrollBarDefaultDelayBeforeFade()I" since="16"/>
-		<method name="getScrollBarFadeDuration()I" since="16"/>
-		<method name="getScrollBarSize()I" since="16"/>
-		<method name="getScrollBarStyle()I"/>
-		<method name="getScrollIndicators()I" since="23"/>
-		<method name="getScrollX()I"/>
-		<method name="getScrollY()I"/>
-		<method name="getSolidColor()I"/>
-		<method name="getStateListAnimator()Landroid/animation/StateListAnimator;" since="21"/>
-		<method name="getSuggestedMinimumHeight()I"/>
-		<method name="getSuggestedMinimumWidth()I"/>
-		<method name="getSystemUiVisibility()I" since="11"/>
-		<method name="getTag()Ljava/lang/Object;"/>
-		<method name="getTag(I)Ljava/lang/Object;" since="4"/>
-		<method name="getTextAlignment()I" since="17"/>
-		<method name="getTextDirection()I" since="17"/>
-		<method name="getTooltipText()Ljava/lang/CharSequence;" since="26"/>
-		<method name="getTop()I"/>
-		<method name="getTopFadingEdgeStrength()F"/>
-		<method name="getTopPaddingOffset()I" since="2"/>
-		<method name="getTouchDelegate()Landroid/view/TouchDelegate;"/>
-		<method name="getTouchables()Ljava/util/ArrayList;"/>
-		<method name="getTransitionName()Ljava/lang/String;" since="21"/>
-		<method name="getTranslationX()F" since="11"/>
-		<method name="getTranslationY()F" since="11"/>
-		<method name="getTranslationZ()F" since="21"/>
-		<method name="getVerticalFadingEdgeLength()I"/>
-		<method name="getVerticalScrollbarPosition()I" since="11"/>
-		<method name="getVerticalScrollbarWidth()I"/>
-		<method name="getViewTreeObserver()Landroid/view/ViewTreeObserver;"/>
-		<method name="getVisibility()I"/>
-		<method name="getWidth()I"/>
-		<method name="getWindowAttachCount()I"/>
-		<method name="getWindowId()Landroid/view/WindowId;" since="18"/>
-		<method name="getWindowSystemUiVisibility()I" since="16"/>
-		<method name="getWindowToken()Landroid/os/IBinder;"/>
-		<method name="getWindowVisibility()I"/>
-		<method name="getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V" since="3"/>
-		<method name="getX()F" since="11"/>
-		<method name="getY()F" since="11"/>
-		<method name="getZ()F" since="21"/>
-		<method name="hasExplicitFocusable()Z" since="26"/>
-		<method name="hasFocus()Z"/>
-		<method name="hasFocusable()Z"/>
-		<method name="hasNestedScrollingParent()Z" since="21"/>
-		<method name="hasOnClickListeners()Z" since="15"/>
-		<method name="hasOverlappingRendering()Z" since="16"/>
-		<method name="hasPointerCapture()Z" since="26"/>
-		<method name="hasTransientState()Z" since="16"/>
-		<method name="hasWindowFocus()Z"/>
-		<method name="inflate(Landroid/content/Context;ILandroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="initializeFadingEdge(Landroid/content/res/TypedArray;)V" removed="21"/>
-		<method name="initializeScrollbars(Landroid/content/res/TypedArray;)V" removed="21"/>
-		<method name="invalidate()V"/>
-		<method name="invalidate(IIII)V" deprecated="28"/>
-		<method name="invalidate(Landroid/graphics/Rect;)V" deprecated="28"/>
-		<method name="invalidateOutline()V" since="21"/>
-		<method name="isAccessibilityFocused()Z" since="21"/>
-		<method name="isAccessibilityHeading()Z" since="28"/>
-		<method name="isActivated()Z" since="11"/>
-		<method name="isAttachedToWindow()Z" since="19"/>
-		<method name="isClickable()Z"/>
-		<method name="isContextClickable()Z" since="23"/>
-		<method name="isDirty()Z" since="11"/>
-		<method name="isDrawingCacheEnabled()Z" deprecated="28"/>
-		<method name="isDuplicateParentStateEnabled()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isFocusable()Z"/>
-		<method name="isFocusableInTouchMode()Z"/>
-		<method name="isFocused()Z"/>
-		<method name="isFocusedByDefault()Z" since="26"/>
-		<method name="isHapticFeedbackEnabled()Z" since="3"/>
-		<method name="isHardwareAccelerated()Z" since="11"/>
-		<method name="isHorizontalFadingEdgeEnabled()Z"/>
-		<method name="isHorizontalScrollBarEnabled()Z"/>
-		<method name="isHovered()Z" since="14"/>
-		<method name="isImportantForAccessibility()Z" since="21"/>
-		<method name="isImportantForAutofill()Z" since="26"/>
-		<method name="isInEditMode()Z" since="3"/>
-		<method name="isInLayout()Z" since="18"/>
-		<method name="isInTouchMode()Z"/>
-		<method name="isKeyboardNavigationCluster()Z" since="26"/>
-		<method name="isLaidOut()Z" since="19"/>
-		<method name="isLayoutDirectionResolved()Z" since="19"/>
-		<method name="isLayoutRequested()Z"/>
-		<method name="isLongClickable()Z"/>
-		<method name="isNestedScrollingEnabled()Z" since="21"/>
-		<method name="isOpaque()Z" since="7"/>
-		<method name="isPaddingOffsetRequired()Z" since="2"/>
-		<method name="isPaddingRelative()Z" since="17"/>
-		<method name="isPivotSet()Z" since="28"/>
-		<method name="isPressed()Z"/>
-		<method name="isSaveEnabled()Z"/>
-		<method name="isSaveFromParentEnabled()Z" since="11"/>
-		<method name="isScreenReaderFocusable()Z" since="28"/>
-		<method name="isScrollContainer()Z" since="16"/>
-		<method name="isScrollbarFadingEnabled()Z" since="5"/>
-		<method name="isSelected()Z"/>
-		<method name="isShown()Z"/>
-		<method name="isSoundEffectsEnabled()Z"/>
-		<method name="isTemporarilyDetached()Z" since="24"/>
-		<method name="isTextAlignmentResolved()Z" since="19"/>
-		<method name="isTextDirectionResolved()Z" since="19"/>
-		<method name="isVerticalFadingEdgeEnabled()Z"/>
-		<method name="isVerticalScrollBarEnabled()Z"/>
-		<method name="isVisibleToUserForAutofill(I)Z" since="28"/>
-		<method name="jumpDrawablesToCurrentState()V" since="11"/>
-		<method name="keyboardNavigationClusterSearch(Landroid/view/View;I)Landroid/view/View;" since="26"/>
-		<method name="layout(IIII)V"/>
-		<method name="measure(II)V"/>
-		<method name="mergeDrawableStates([I[I)[I"/>
-		<method name="offsetLeftAndRight(I)V"/>
-		<method name="offsetTopAndBottom(I)V"/>
-		<method name="onAnimationEnd()V"/>
-		<method name="onAnimationStart()V"/>
-		<method name="onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;" since="20"/>
-		<method name="onAttachedToWindow()V"/>
-		<method name="onCancelPendingInputEvents()V" since="19"/>
-		<method name="onCapturedPointerEvent(Landroid/view/MotionEvent;)Z" since="26"/>
-		<method name="onCheckIsTextEditor()Z" since="3"/>
-		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V" since="8"/>
-		<method name="onCreateContextMenu(Landroid/view/ContextMenu;)V"/>
-		<method name="onCreateDrawableState(I)[I"/>
-		<method name="onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;" since="3"/>
-		<method name="onDetachedFromWindow()V"/>
-		<method name="onDisplayHint(I)V" since="8"/>
-		<method name="onDragEvent(Landroid/view/DragEvent;)Z" since="11"/>
-		<method name="onDraw(Landroid/graphics/Canvas;)V"/>
-		<method name="onDrawForeground(Landroid/graphics/Canvas;)V" since="23"/>
-		<method name="onDrawScrollBars(Landroid/graphics/Canvas;)V" since="7"/>
-		<method name="onFilterTouchEventForSecurity(Landroid/view/MotionEvent;)Z" since="9"/>
-		<method name="onFinishInflate()V"/>
-		<method name="onFinishTemporaryDetach()V" since="3"/>
-		<method name="onFocusChanged(ZILandroid/graphics/Rect;)V"/>
-		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
-		<method name="onHoverChanged(Z)V" since="14"/>
-		<method name="onHoverEvent(Landroid/view/MotionEvent;)Z" since="14"/>
-		<method name="onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" since="14"/>
-		<method name="onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V" since="14"/>
-		<method name="onKeyPreIme(ILandroid/view/KeyEvent;)Z" since="3"/>
-		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z"/>
-		<method name="onLayout(ZIIII)V"/>
-		<method name="onMeasure(II)V"/>
-		<method name="onOverScrolled(IIZZ)V" since="9"/>
-		<method name="onPointerCaptureChange(Z)V" since="26"/>
-		<method name="onPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" since="14"/>
-		<method name="onProvideAutofillStructure(Landroid/view/ViewStructure;I)V" since="26"/>
-		<method name="onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V" since="26"/>
-		<method name="onProvideStructure(Landroid/view/ViewStructure;)V" since="23"/>
-		<method name="onProvideVirtualStructure(Landroid/view/ViewStructure;)V" since="23"/>
-		<method name="onResolvePointerIcon(Landroid/view/MotionEvent;I)Landroid/view/PointerIcon;" since="24"/>
-		<method name="onRestoreInstanceState(Landroid/os/Parcelable;)V"/>
-		<method name="onRtlPropertiesChanged(I)V" since="17"/>
-		<method name="onSaveInstanceState()Landroid/os/Parcelable;"/>
-		<method name="onScreenStateChanged(I)V" since="16"/>
-		<method name="onScrollChanged(IIII)V"/>
-		<method name="onSetAlpha(I)Z"/>
-		<method name="onSizeChanged(IIII)V"/>
-		<method name="onStartTemporaryDetach()V" since="3"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onVisibilityAggregated(Z)V" since="24"/>
-		<method name="onVisibilityChanged(Landroid/view/View;I)V" since="8"/>
-		<method name="onWindowFocusChanged(Z)V"/>
-		<method name="onWindowSystemUiVisibilityChanged(I)V" since="16"/>
-		<method name="onWindowVisibilityChanged(I)V"/>
-		<method name="overScrollBy(IIIIIIIIZ)Z" since="9"/>
-		<method name="performAccessibilityAction(ILandroid/os/Bundle;)Z" since="16"/>
-		<method name="performClick()Z"/>
-		<method name="performContextClick()Z" since="23"/>
-		<method name="performContextClick(FF)Z" since="24"/>
-		<method name="performHapticFeedback(I)Z" since="3"/>
-		<method name="performHapticFeedback(II)Z" since="3"/>
-		<method name="performLongClick()Z"/>
-		<method name="performLongClick(FF)Z" since="24"/>
-		<method name="playSoundEffect(I)V"/>
-		<method name="post(Ljava/lang/Runnable;)Z"/>
-		<method name="postDelayed(Ljava/lang/Runnable;J)Z"/>
-		<method name="postInvalidate()V"/>
-		<method name="postInvalidate(IIII)V"/>
-		<method name="postInvalidateDelayed(J)V"/>
-		<method name="postInvalidateDelayed(JIIII)V"/>
-		<method name="postInvalidateOnAnimation()V" since="16"/>
-		<method name="postInvalidateOnAnimation(IIII)V" since="16"/>
-		<method name="postOnAnimation(Ljava/lang/Runnable;)V" since="16"/>
-		<method name="postOnAnimationDelayed(Ljava/lang/Runnable;J)V" since="16"/>
-		<method name="refreshDrawableState()V"/>
-		<method name="releasePointerCapture()V" since="26"/>
-		<method name="removeCallbacks(Ljava/lang/Runnable;)Z"/>
-		<method name="removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V" since="12"/>
-		<method name="removeOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V" since="11"/>
-		<method name="removeOnUnhandledKeyEventListener(Landroid/view/View$OnUnhandledKeyEventListener;)V" since="28"/>
-		<method name="requestApplyInsets()V" since="20"/>
-		<method name="requestFitSystemWindows()V" since="16" deprecated="20"/>
-		<method name="requestFocus()Z"/>
-		<method name="requestFocus(I)Z"/>
-		<method name="requestFocus(ILandroid/graphics/Rect;)Z"/>
-		<method name="requestFocusFromTouch()Z"/>
-		<method name="requestLayout()V"/>
-		<method name="requestPointerCapture()V" since="26"/>
-		<method name="requestRectangleOnScreen(Landroid/graphics/Rect;)Z"/>
-		<method name="requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z"/>
-		<method name="requestUnbufferedDispatch(Landroid/view/MotionEvent;)V" since="21"/>
-		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
-		<method name="resetPivot()V" since="28"/>
-		<method name="resolveSize(II)I"/>
-		<method name="resolveSizeAndState(III)I" since="11"/>
-		<method name="restoreDefaultFocus()Z" since="26"/>
-		<method name="restoreHierarchyState(Landroid/util/SparseArray;)V"/>
-		<method name="saveHierarchyState(Landroid/util/SparseArray;)V"/>
-		<method name="scrollBy(II)V"/>
-		<method name="scrollTo(II)V"/>
-		<method name="setAccessibilityDelegate(Landroid/view/View$AccessibilityDelegate;)V" since="14"/>
-		<method name="setAccessibilityHeading(Z)V" since="28"/>
-		<method name="setAccessibilityLiveRegion(I)V" since="19"/>
-		<method name="setAccessibilityPaneTitle(Ljava/lang/CharSequence;)V" since="28"/>
-		<method name="setAccessibilityTraversalAfter(I)V" since="22"/>
-		<method name="setAccessibilityTraversalBefore(I)V" since="22"/>
-		<method name="setActivated(Z)V" since="11"/>
-		<method name="setAlpha(F)V" since="11"/>
-		<method name="setAnimation(Landroid/view/animation/Animation;)V"/>
-		<method name="setAutofillHints([Ljava/lang/String;)V" since="26"/>
-		<method name="setAutofillId(Landroid/view/autofill/AutofillId;)V" since="28"/>
-		<method name="setBackground(Landroid/graphics/drawable/Drawable;)V" since="16"/>
-		<method name="setBackgroundColor(I)V"/>
-		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="16"/>
-		<method name="setBackgroundResource(I)V"/>
-		<method name="setBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setBottom(I)V" since="11"/>
-		<method name="setCameraDistance(F)V" since="12"/>
-		<method name="setClickable(Z)V"/>
-		<method name="setClipBounds(Landroid/graphics/Rect;)V" since="18"/>
-		<method name="setClipToOutline(Z)V" since="21"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)V" since="4"/>
-		<method name="setContextClickable(Z)V" since="23"/>
-		<method name="setDefaultFocusHighlightEnabled(Z)V" since="26"/>
-		<method name="setDrawingCacheBackgroundColor(I)V" deprecated="28"/>
-		<method name="setDrawingCacheEnabled(Z)V" deprecated="28"/>
-		<method name="setDrawingCacheQuality(I)V" deprecated="28"/>
-		<method name="setDuplicateParentStateEnabled(Z)V"/>
-		<method name="setElevation(F)V" since="21"/>
-		<method name="setEnabled(Z)V"/>
-		<method name="setFadingEdgeLength(I)V"/>
-		<method name="setFilterTouchesWhenObscured(Z)V" since="9"/>
-		<method name="setFitsSystemWindows(Z)V" since="14"/>
-		<method name="setFocusable(I)V" since="26"/>
-		<method name="setFocusable(Z)V"/>
-		<method name="setFocusableInTouchMode(Z)V"/>
-		<method name="setFocusedByDefault(Z)V" since="26"/>
-		<method name="setForeground(Landroid/graphics/drawable/Drawable;)V" since="23"/>
-		<method name="setForegroundGravity(I)V" since="23"/>
-		<method name="setForegroundTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
-		<method name="setForegroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
-		<method name="setHapticFeedbackEnabled(Z)V" since="3"/>
-		<method name="setHasTransientState(Z)V" since="16"/>
-		<method name="setHorizontalFadingEdgeEnabled(Z)V"/>
-		<method name="setHorizontalScrollBarEnabled(Z)V"/>
-		<method name="setHovered(Z)V" since="14"/>
-		<method name="setId(I)V"/>
-		<method name="setImportantForAccessibility(I)V" since="16"/>
-		<method name="setImportantForAutofill(I)V" since="26"/>
-		<method name="setKeepScreenOn(Z)V"/>
-		<method name="setKeyboardNavigationCluster(Z)V" since="26"/>
-		<method name="setLabelFor(I)V" since="17"/>
-		<method name="setLayerPaint(Landroid/graphics/Paint;)V" since="17"/>
-		<method name="setLayerType(ILandroid/graphics/Paint;)V" since="11"/>
-		<method name="setLayoutDirection(I)V" since="17"/>
-		<method name="setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="setLeft(I)V" since="11"/>
-		<method name="setLongClickable(Z)V"/>
-		<method name="setMeasuredDimension(II)V"/>
-		<method name="setMinimumHeight(I)V"/>
-		<method name="setMinimumWidth(I)V"/>
-		<method name="setNestedScrollingEnabled(Z)V" since="21"/>
-		<method name="setNextClusterForwardId(I)V" since="26"/>
-		<method name="setNextFocusDownId(I)V"/>
-		<method name="setNextFocusForwardId(I)V" since="11"/>
-		<method name="setNextFocusLeftId(I)V"/>
-		<method name="setNextFocusRightId(I)V"/>
-		<method name="setNextFocusUpId(I)V"/>
-		<method name="setOnApplyWindowInsetsListener(Landroid/view/View$OnApplyWindowInsetsListener;)V" since="20"/>
-		<method name="setOnCapturedPointerListener(Landroid/view/View$OnCapturedPointerListener;)V" since="26"/>
-		<method name="setOnClickListener(Landroid/view/View$OnClickListener;)V"/>
-		<method name="setOnContextClickListener(Landroid/view/View$OnContextClickListener;)V" since="23"/>
-		<method name="setOnCreateContextMenuListener(Landroid/view/View$OnCreateContextMenuListener;)V"/>
-		<method name="setOnDragListener(Landroid/view/View$OnDragListener;)V" since="11"/>
-		<method name="setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V"/>
-		<method name="setOnGenericMotionListener(Landroid/view/View$OnGenericMotionListener;)V" since="12"/>
-		<method name="setOnHoverListener(Landroid/view/View$OnHoverListener;)V" since="14"/>
-		<method name="setOnKeyListener(Landroid/view/View$OnKeyListener;)V"/>
-		<method name="setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V"/>
-		<method name="setOnScrollChangeListener(Landroid/view/View$OnScrollChangeListener;)V" since="23"/>
-		<method name="setOnSystemUiVisibilityChangeListener(Landroid/view/View$OnSystemUiVisibilityChangeListener;)V" since="11"/>
-		<method name="setOnTouchListener(Landroid/view/View$OnTouchListener;)V"/>
-		<method name="setOutlineAmbientShadowColor(I)V" since="28"/>
-		<method name="setOutlineProvider(Landroid/view/ViewOutlineProvider;)V" since="21"/>
-		<method name="setOutlineSpotShadowColor(I)V" since="28"/>
-		<method name="setOverScrollMode(I)V" since="9"/>
-		<method name="setPadding(IIII)V"/>
-		<method name="setPaddingRelative(IIII)V" since="17"/>
-		<method name="setPivotX(F)V" since="11"/>
-		<method name="setPivotY(F)V" since="11"/>
-		<method name="setPointerIcon(Landroid/view/PointerIcon;)V" since="24"/>
-		<method name="setPressed(Z)V"/>
-		<method name="setRevealOnFocusHint(Z)V" since="25"/>
-		<method name="setRight(I)V" since="11"/>
-		<method name="setRotation(F)V" since="11"/>
-		<method name="setRotationX(F)V" since="11"/>
-		<method name="setRotationY(F)V" since="11"/>
-		<method name="setSaveEnabled(Z)V"/>
-		<method name="setSaveFromParentEnabled(Z)V" since="11"/>
-		<method name="setScaleX(F)V" since="11"/>
-		<method name="setScaleY(F)V" since="11"/>
-		<method name="setScreenReaderFocusable(Z)V" since="28"/>
-		<method name="setScrollBarDefaultDelayBeforeFade(I)V" since="16"/>
-		<method name="setScrollBarFadeDuration(I)V" since="16"/>
-		<method name="setScrollBarSize(I)V" since="16"/>
-		<method name="setScrollBarStyle(I)V"/>
-		<method name="setScrollContainer(Z)V" since="3"/>
-		<method name="setScrollIndicators(I)V" since="23"/>
-		<method name="setScrollIndicators(II)V" since="23"/>
-		<method name="setScrollX(I)V" since="14"/>
-		<method name="setScrollY(I)V" since="14"/>
-		<method name="setScrollbarFadingEnabled(Z)V" since="5"/>
-		<method name="setSelected(Z)V"/>
-		<method name="setSoundEffectsEnabled(Z)V"/>
-		<method name="setStateListAnimator(Landroid/animation/StateListAnimator;)V" since="21"/>
-		<method name="setSystemUiVisibility(I)V" since="11"/>
-		<method name="setTag(ILjava/lang/Object;)V" since="4"/>
-		<method name="setTag(Ljava/lang/Object;)V"/>
-		<method name="setTextAlignment(I)V" since="17"/>
-		<method name="setTextDirection(I)V" since="17"/>
-		<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="26"/>
-		<method name="setTop(I)V" since="11"/>
-		<method name="setTouchDelegate(Landroid/view/TouchDelegate;)V"/>
-		<method name="setTransitionName(Ljava/lang/String;)V" since="21"/>
-		<method name="setTranslationX(F)V" since="11"/>
-		<method name="setTranslationY(F)V" since="11"/>
-		<method name="setTranslationZ(F)V" since="21"/>
-		<method name="setVerticalFadingEdgeEnabled(Z)V"/>
-		<method name="setVerticalScrollBarEnabled(Z)V"/>
-		<method name="setVerticalScrollbarPosition(I)V" since="11"/>
-		<method name="setVisibility(I)V"/>
-		<method name="setWillNotCacheDrawing(Z)V" deprecated="28"/>
-		<method name="setWillNotDraw(Z)V"/>
-		<method name="setX(F)V" since="11"/>
-		<method name="setY(F)V" since="11"/>
-		<method name="setZ(F)V" since="21"/>
-		<method name="showContextMenu()Z"/>
-		<method name="showContextMenu(FF)Z" since="24"/>
-		<method name="startActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
-		<method name="startActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
-		<method name="startAnimation(Landroid/view/animation/Animation;)V"/>
-		<method name="startDrag(Landroid/content/ClipData;Landroid/view/View$DragShadowBuilder;Ljava/lang/Object;I)Z" since="11" deprecated="24"/>
-		<method name="startDragAndDrop(Landroid/content/ClipData;Landroid/view/View$DragShadowBuilder;Ljava/lang/Object;I)Z" since="24"/>
-		<method name="startNestedScroll(I)Z" since="21"/>
-		<method name="stopNestedScroll()V" since="21"/>
-		<method name="unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="updateDragShadow(Landroid/view/View$DragShadowBuilder;)V" since="24"/>
-		<method name="verifyDrawable(Landroid/graphics/drawable/Drawable;)Z"/>
-		<method name="willNotCacheDrawing()Z" deprecated="28"/>
-		<method name="willNotDraw()Z"/>
-		<field name="ACCESSIBILITY_LIVE_REGION_ASSERTIVE" since="19"/>
-		<field name="ACCESSIBILITY_LIVE_REGION_NONE" since="19"/>
-		<field name="ACCESSIBILITY_LIVE_REGION_POLITE" since="19"/>
-		<field name="ALPHA" since="14"/>
-		<field name="AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS" since="26"/>
-		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE" since="26"/>
-		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY" since="26"/>
-		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH" since="26"/>
-		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR" since="26"/>
-		<field name="AUTOFILL_HINT_CREDIT_CARD_NUMBER" since="26"/>
-		<field name="AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE" since="26"/>
-		<field name="AUTOFILL_HINT_EMAIL_ADDRESS" since="26"/>
-		<field name="AUTOFILL_HINT_NAME" since="26"/>
-		<field name="AUTOFILL_HINT_PASSWORD" since="26"/>
-		<field name="AUTOFILL_HINT_PHONE" since="26"/>
-		<field name="AUTOFILL_HINT_POSTAL_ADDRESS" since="26"/>
-		<field name="AUTOFILL_HINT_POSTAL_CODE" since="26"/>
-		<field name="AUTOFILL_HINT_USERNAME" since="26"/>
-		<field name="AUTOFILL_TYPE_DATE" since="26"/>
-		<field name="AUTOFILL_TYPE_LIST" since="26"/>
-		<field name="AUTOFILL_TYPE_NONE" since="26"/>
-		<field name="AUTOFILL_TYPE_TEXT" since="26"/>
-		<field name="AUTOFILL_TYPE_TOGGLE" since="26"/>
-		<field name="DRAG_FLAG_GLOBAL" since="24"/>
-		<field name="DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION" since="24"/>
-		<field name="DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION" since="24"/>
-		<field name="DRAG_FLAG_GLOBAL_URI_READ" since="24"/>
-		<field name="DRAG_FLAG_GLOBAL_URI_WRITE" since="24"/>
-		<field name="DRAG_FLAG_OPAQUE" since="24"/>
-		<field name="DRAWING_CACHE_QUALITY_AUTO" deprecated="28"/>
-		<field name="DRAWING_CACHE_QUALITY_HIGH" deprecated="28"/>
-		<field name="DRAWING_CACHE_QUALITY_LOW" deprecated="28"/>
-		<field name="EMPTY_STATE_SET"/>
-		<field name="ENABLED_FOCUSED_SELECTED_STATE_SET"/>
-		<field name="ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="ENABLED_FOCUSED_STATE_SET"/>
-		<field name="ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="ENABLED_SELECTED_STATE_SET"/>
-		<field name="ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="ENABLED_STATE_SET"/>
-		<field name="ENABLED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="FIND_VIEWS_WITH_CONTENT_DESCRIPTION" since="14"/>
-		<field name="FIND_VIEWS_WITH_TEXT" since="14"/>
-		<field name="FOCUSABLE" since="26"/>
-		<field name="FOCUSABLES_ALL" since="4"/>
-		<field name="FOCUSABLES_TOUCH_MODE" since="4"/>
-		<field name="FOCUSABLE_AUTO" since="26"/>
-		<field name="FOCUSED_SELECTED_STATE_SET"/>
-		<field name="FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="FOCUSED_STATE_SET"/>
-		<field name="FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="FOCUS_BACKWARD"/>
-		<field name="FOCUS_DOWN"/>
-		<field name="FOCUS_FORWARD"/>
-		<field name="FOCUS_LEFT"/>
-		<field name="FOCUS_RIGHT"/>
-		<field name="FOCUS_UP"/>
-		<field name="GONE"/>
-		<field name="HAPTIC_FEEDBACK_ENABLED" since="3"/>
-		<field name="IMPORTANT_FOR_ACCESSIBILITY_AUTO" since="16"/>
-		<field name="IMPORTANT_FOR_ACCESSIBILITY_NO" since="16"/>
-		<field name="IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS" since="19"/>
-		<field name="IMPORTANT_FOR_ACCESSIBILITY_YES" since="16"/>
-		<field name="IMPORTANT_FOR_AUTOFILL_AUTO" since="26"/>
-		<field name="IMPORTANT_FOR_AUTOFILL_NO" since="26"/>
-		<field name="IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS" since="26"/>
-		<field name="IMPORTANT_FOR_AUTOFILL_YES" since="26"/>
-		<field name="IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS" since="26"/>
-		<field name="INVISIBLE"/>
-		<field name="KEEP_SCREEN_ON"/>
-		<field name="LAYER_TYPE_HARDWARE" since="11"/>
-		<field name="LAYER_TYPE_NONE" since="11"/>
-		<field name="LAYER_TYPE_SOFTWARE" since="11"/>
-		<field name="LAYOUT_DIRECTION_INHERIT" since="17"/>
-		<field name="LAYOUT_DIRECTION_LOCALE" since="17"/>
-		<field name="LAYOUT_DIRECTION_LTR" since="17"/>
-		<field name="LAYOUT_DIRECTION_RTL" since="17"/>
-		<field name="MEASURED_HEIGHT_STATE_SHIFT" since="11"/>
-		<field name="MEASURED_SIZE_MASK" since="11"/>
-		<field name="MEASURED_STATE_MASK" since="11"/>
-		<field name="MEASURED_STATE_TOO_SMALL" since="11"/>
-		<field name="NOT_FOCUSABLE" since="26"/>
-		<field name="NO_ID"/>
-		<field name="OVER_SCROLL_ALWAYS" since="9"/>
-		<field name="OVER_SCROLL_IF_CONTENT_SCROLLS" since="9"/>
-		<field name="OVER_SCROLL_NEVER" since="9"/>
-		<field name="PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET"/>
-		<field name="PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_ENABLED_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_ENABLED_SELECTED_STATE_SET"/>
-		<field name="PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_ENABLED_STATE_SET"/>
-		<field name="PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_FOCUSED_SELECTED_STATE_SET"/>
-		<field name="PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_SELECTED_STATE_SET"/>
-		<field name="PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="PRESSED_STATE_SET" since="19"/>
-		<field name="PRESSED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="ROTATION" since="14"/>
-		<field name="ROTATION_X" since="14"/>
-		<field name="ROTATION_Y" since="14"/>
-		<field name="SCALE_X" since="14"/>
-		<field name="SCALE_Y" since="14"/>
-		<field name="SCREEN_STATE_OFF" since="16"/>
-		<field name="SCREEN_STATE_ON" since="16"/>
-		<field name="SCROLLBARS_INSIDE_INSET"/>
-		<field name="SCROLLBARS_INSIDE_OVERLAY"/>
-		<field name="SCROLLBARS_OUTSIDE_INSET"/>
-		<field name="SCROLLBARS_OUTSIDE_OVERLAY"/>
-		<field name="SCROLLBAR_POSITION_DEFAULT" since="11"/>
-		<field name="SCROLLBAR_POSITION_LEFT" since="11"/>
-		<field name="SCROLLBAR_POSITION_RIGHT" since="11"/>
-		<field name="SCROLL_AXIS_HORIZONTAL" since="21"/>
-		<field name="SCROLL_AXIS_NONE" since="21"/>
-		<field name="SCROLL_AXIS_VERTICAL" since="21"/>
-		<field name="SCROLL_INDICATOR_BOTTOM" since="23"/>
-		<field name="SCROLL_INDICATOR_END" since="23"/>
-		<field name="SCROLL_INDICATOR_LEFT" since="23"/>
-		<field name="SCROLL_INDICATOR_RIGHT" since="23"/>
-		<field name="SCROLL_INDICATOR_START" since="23"/>
-		<field name="SCROLL_INDICATOR_TOP" since="23"/>
-		<field name="SELECTED_STATE_SET"/>
-		<field name="SELECTED_WINDOW_FOCUSED_STATE_SET"/>
-		<field name="SOUND_EFFECTS_ENABLED"/>
-		<field name="STATUS_BAR_HIDDEN" since="11" deprecated="16"/>
-		<field name="STATUS_BAR_VISIBLE" since="11" deprecated="16"/>
-		<field name="SYSTEM_UI_FLAG_FULLSCREEN" since="16"/>
-		<field name="SYSTEM_UI_FLAG_HIDE_NAVIGATION" since="14"/>
-		<field name="SYSTEM_UI_FLAG_IMMERSIVE" since="19"/>
-		<field name="SYSTEM_UI_FLAG_IMMERSIVE_STICKY" since="19"/>
-		<field name="SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN" since="16"/>
-		<field name="SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION" since="16"/>
-		<field name="SYSTEM_UI_FLAG_LAYOUT_STABLE" since="16"/>
-		<field name="SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR" since="26"/>
-		<field name="SYSTEM_UI_FLAG_LIGHT_STATUS_BAR" since="23"/>
-		<field name="SYSTEM_UI_FLAG_LOW_PROFILE" since="14"/>
-		<field name="SYSTEM_UI_FLAG_VISIBLE" since="14"/>
-		<field name="SYSTEM_UI_LAYOUT_FLAGS" since="16"/>
-		<field name="TEXT_ALIGNMENT_CENTER" since="17"/>
-		<field name="TEXT_ALIGNMENT_GRAVITY" since="17"/>
-		<field name="TEXT_ALIGNMENT_INHERIT" since="16"/>
-		<field name="TEXT_ALIGNMENT_RESOLVED_DEFAULT" since="16" removed="17"/>
-		<field name="TEXT_ALIGNMENT_TEXT_END" since="17"/>
-		<field name="TEXT_ALIGNMENT_TEXT_START" since="17"/>
-		<field name="TEXT_ALIGNMENT_VIEW_END" since="17"/>
-		<field name="TEXT_ALIGNMENT_VIEW_START" since="17"/>
-		<field name="TEXT_DIRECTION_ANY_RTL" since="17"/>
-		<field name="TEXT_DIRECTION_FIRST_STRONG" since="17"/>
-		<field name="TEXT_DIRECTION_FIRST_STRONG_LTR" since="23"/>
-		<field name="TEXT_DIRECTION_FIRST_STRONG_RTL" since="23"/>
-		<field name="TEXT_DIRECTION_INHERIT" since="17"/>
-		<field name="TEXT_DIRECTION_LOCALE" since="17"/>
-		<field name="TEXT_DIRECTION_LTR" since="17"/>
-		<field name="TEXT_DIRECTION_RTL" since="17"/>
-		<field name="TRANSLATION_X" since="14"/>
-		<field name="TRANSLATION_Y" since="14"/>
-		<field name="TRANSLATION_Z" since="21"/>
-		<field name="VIEW_LOG_TAG"/>
-		<field name="VISIBLE"/>
-		<field name="WINDOW_FOCUSED_STATE_SET"/>
-		<field name="X" since="14"/>
-		<field name="Y" since="14"/>
-		<field name="Z" since="21"/>
-	</class>
-	<class name="android/view/View$AccessibilityDelegate" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addExtraDataToAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26"/>
-		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z"/>
-		<method name="getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;" since="16"/>
-		<method name="onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V"/>
-		<method name="onInitializeAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;)V"/>
-		<method name="onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V"/>
-		<method name="onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z"/>
-		<method name="performAccessibilityAction(Landroid/view/View;ILandroid/os/Bundle;)Z" since="16"/>
-		<method name="sendAccessibilityEvent(Landroid/view/View;I)V"/>
-		<method name="sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V"/>
-	</class>
-	<class name="android/view/View$BaseSavedState" since="1">
-		<extends name="android/view/AbsSavedState"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V" since="24"/>
-		<method name="&lt;init>(Landroid/os/Parcelable;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/View$DragShadowBuilder" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/view/View;)V"/>
-		<method name="getView()Landroid/view/View;"/>
-		<method name="onDrawShadow(Landroid/graphics/Canvas;)V"/>
-		<method name="onProvideShadowMetrics(Landroid/graphics/Point;Landroid/graphics/Point;)V"/>
-	</class>
-	<class name="android/view/View$MeasureSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMode(I)I"/>
-		<method name="getSize(I)I"/>
-		<method name="makeMeasureSpec(II)I"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<field name="AT_MOST"/>
-		<field name="EXACTLY"/>
-		<field name="UNSPECIFIED"/>
-	</class>
-	<class name="android/view/View$OnApplyWindowInsetsListener" since="20">
-		<extends name="java/lang/Object"/>
-		<method name="onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;"/>
-	</class>
-	<class name="android/view/View$OnAttachStateChangeListener" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="onViewAttachedToWindow(Landroid/view/View;)V"/>
-		<method name="onViewDetachedFromWindow(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/view/View$OnCapturedPointerListener" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="onCapturedPointer(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/view/View$OnClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onClick(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/view/View$OnContextClickListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onContextClick(Landroid/view/View;)Z"/>
-	</class>
-	<class name="android/view/View$OnCreateContextMenuListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onCreateContextMenu(Landroid/view/ContextMenu;Landroid/view/View;Landroid/view/ContextMenu$ContextMenuInfo;)V"/>
-	</class>
-	<class name="android/view/View$OnDragListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onDrag(Landroid/view/View;Landroid/view/DragEvent;)Z"/>
-	</class>
-	<class name="android/view/View$OnFocusChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onFocusChange(Landroid/view/View;Z)V"/>
-	</class>
-	<class name="android/view/View$OnGenericMotionListener" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="onGenericMotion(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/view/View$OnHoverListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onHover(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/view/View$OnKeyListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onKey(Landroid/view/View;ILandroid/view/KeyEvent;)Z"/>
-	</class>
-	<class name="android/view/View$OnLayoutChangeListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onLayoutChange(Landroid/view/View;IIIIIIII)V"/>
-	</class>
-	<class name="android/view/View$OnLongClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onLongClick(Landroid/view/View;)Z"/>
-	</class>
-	<class name="android/view/View$OnScrollChangeListener" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="onScrollChange(Landroid/view/View;IIII)V"/>
-	</class>
-	<class name="android/view/View$OnSystemUiVisibilityChangeListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onSystemUiVisibilityChange(I)V"/>
-	</class>
-	<class name="android/view/View$OnTouchListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onTouch(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
-	</class>
-	<class name="android/view/View$OnUnhandledKeyEventListener" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="onUnhandledKeyEvent(Landroid/view/View;Landroid/view/KeyEvent;)Z"/>
-	</class>
-	<class name="android/view/ViewAnimationUtils" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createCircularReveal(Landroid/view/View;IIFF)Landroid/animation/Animator;"/>
-	</class>
-	<class name="android/view/ViewConfiguration" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="16"/>
-		<method name="get(Landroid/content/Context;)Landroid/view/ViewConfiguration;" since="3"/>
-		<method name="getDefaultActionModeHideDuration()J" since="23"/>
-		<method name="getDoubleTapTimeout()I" since="3"/>
-		<method name="getEdgeSlop()I" deprecated="16"/>
-		<method name="getFadingEdgeLength()I" deprecated="16"/>
-		<method name="getGlobalActionKeyTimeout()J" deprecated="20"/>
-		<method name="getJumpTapTimeout()I"/>
-		<method name="getKeyRepeatDelay()I" since="12"/>
-		<method name="getKeyRepeatTimeout()I" since="12"/>
-		<method name="getLongPressTimeout()I"/>
-		<method name="getMaximumDrawingCacheSize()I" deprecated="16"/>
-		<method name="getMaximumFlingVelocity()I" since="4" deprecated="16"/>
-		<method name="getMinimumFlingVelocity()I" deprecated="16"/>
-		<method name="getPressedStateDuration()I"/>
-		<method name="getScaledDoubleTapSlop()I" since="3"/>
-		<method name="getScaledEdgeSlop()I" since="3"/>
-		<method name="getScaledFadingEdgeLength()I" since="3"/>
-		<method name="getScaledHorizontalScrollFactor()F" since="26"/>
-		<method name="getScaledHoverSlop()I" since="28"/>
-		<method name="getScaledMaximumDrawingCacheSize()I" since="3"/>
-		<method name="getScaledMaximumFlingVelocity()I" since="4"/>
-		<method name="getScaledMinimumFlingVelocity()I" since="3"/>
-		<method name="getScaledOverflingDistance()I" since="9"/>
-		<method name="getScaledOverscrollDistance()I" since="9"/>
-		<method name="getScaledPagingTouchSlop()I" since="8"/>
-		<method name="getScaledScrollBarSize()I" since="3"/>
-		<method name="getScaledTouchSlop()I" since="3"/>
-		<method name="getScaledVerticalScrollFactor()F" since="26"/>
-		<method name="getScaledWindowTouchSlop()I" since="3"/>
-		<method name="getScrollBarFadeDuration()I" since="5"/>
-		<method name="getScrollBarSize()I" deprecated="16"/>
-		<method name="getScrollDefaultDelay()I" since="5"/>
-		<method name="getScrollFriction()F"/>
-		<method name="getTapTimeout()I"/>
-		<method name="getTouchSlop()I" deprecated="16"/>
-		<method name="getWindowTouchSlop()I" deprecated="16"/>
-		<method name="getZoomControlsTimeout()J"/>
-		<method name="hasPermanentMenuKey()Z" since="14"/>
-		<method name="shouldShowMenuShortcutsWhenKeyboardPresent()Z" since="28"/>
-	</class>
-	<class name="android/view/ViewDebug" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="dumpCapturedView(Ljava/lang/String;Ljava/lang/Object;)V" since="3"/>
-		<method name="startHierarchyTracing(Ljava/lang/String;Landroid/view/View;)V" deprecated="16"/>
-		<method name="startRecyclerTracing(Ljava/lang/String;Landroid/view/View;)V" deprecated="16"/>
-		<method name="stopHierarchyTracing()V" deprecated="16"/>
-		<method name="stopRecyclerTracing()V" deprecated="16"/>
-		<method name="trace(Landroid/view/View;Landroid/view/ViewDebug$HierarchyTraceType;)V" deprecated="16"/>
-		<method name="trace(Landroid/view/View;Landroid/view/ViewDebug$RecyclerTraceType;[I)V" deprecated="16"/>
-		<field name="TRACE_HIERARCHY" deprecated="16"/>
-		<field name="TRACE_RECYCLER" deprecated="16"/>
-	</class>
-	<class name="android/view/ViewDebug$CapturedViewProperty" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="retrieveReturn()Z"/>
-	</class>
-	<class name="android/view/ViewDebug$ExportedProperty" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="category()Ljava/lang/String;" since="9"/>
-		<method name="deepExport()Z"/>
-		<method name="flagMapping()[Landroid/view/ViewDebug$FlagToString;" since="4"/>
-		<method name="formatToHexString()Z" since="21"/>
-		<method name="hasAdjacentMapping()Z" since="21"/>
-		<method name="indexMapping()[Landroid/view/ViewDebug$IntToString;" since="3"/>
-		<method name="mapping()[Landroid/view/ViewDebug$IntToString;"/>
-		<method name="prefix()Ljava/lang/String;"/>
-		<method name="resolveId()Z"/>
-	</class>
-	<class name="android/view/ViewDebug$FlagToString" since="4">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="equals()I"/>
-		<method name="mask()I"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="outputIf()Z"/>
-	</class>
-	<class name="android/view/ViewDebug$HierarchyTraceType" since="1" deprecated="16">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$HierarchyTraceType;"/>
-		<method name="values()[Landroid/view/ViewDebug$HierarchyTraceType;"/>
-		<field name="BUILD_CACHE"/>
-		<field name="DRAW"/>
-		<field name="INVALIDATE"/>
-		<field name="INVALIDATE_CHILD"/>
-		<field name="INVALIDATE_CHILD_IN_PARENT"/>
-		<field name="ON_LAYOUT"/>
-		<field name="ON_MEASURE"/>
-		<field name="REQUEST_LAYOUT"/>
-	</class>
-	<class name="android/view/ViewDebug$IntToString" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="from()I"/>
-		<method name="to()Ljava/lang/String;"/>
-	</class>
-	<class name="android/view/ViewDebug$RecyclerTraceType" since="1" deprecated="16">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$RecyclerTraceType;"/>
-		<method name="values()[Landroid/view/ViewDebug$RecyclerTraceType;"/>
-		<field name="BIND_VIEW"/>
-		<field name="MOVE_FROM_ACTIVE_TO_SCRAP_HEAP"/>
-		<field name="MOVE_TO_ACTIVE_HEAP" removed="8"/>
-		<field name="MOVE_TO_SCRAP_HEAP"/>
-		<field name="NEW_VIEW"/>
-		<field name="RECYCLE_FROM_ACTIVE_HEAP"/>
-		<field name="RECYCLE_FROM_SCRAP_HEAP"/>
-	</class>
-	<class name="android/view/ViewGroup" since="1">
-		<extends name="android/view/View"/>
-		<implements name="android/view/ViewManager"/>
-		<implements name="android/view/ViewParent"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addStatesFromChildren()Z"/>
-		<method name="addView(Landroid/view/View;)V"/>
-		<method name="addView(Landroid/view/View;I)V"/>
-		<method name="addView(Landroid/view/View;II)V"/>
-		<method name="addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)Z"/>
-		<method name="addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)Z"/>
-		<method name="attachLayoutAnimationParameters(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;II)V"/>
-		<method name="attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="canAnimate()Z"/>
-		<method name="checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z"/>
-		<method name="cleanupLayoutState(Landroid/view/View;)V"/>
-		<method name="clearDisappearingChildren()V"/>
-		<method name="debug(I)V"/>
-		<method name="detachAllViewsFromParent()V"/>
-		<method name="detachViewFromParent(I)V"/>
-		<method name="detachViewFromParent(Landroid/view/View;)V"/>
-		<method name="detachViewsFromParent(II)V"/>
-		<method name="dispatchFreezeSelfOnly(Landroid/util/SparseArray;)V"/>
-		<method name="dispatchThawSelfOnly(Landroid/util/SparseArray;)V"/>
-		<method name="drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z"/>
-		<method name="endViewTransition(Landroid/view/View;)V" since="11"/>
-		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z"/>
-		<method name="generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;"/>
-		<method name="getChildAt(I)Landroid/view/View;"/>
-		<method name="getChildCount()I"/>
-		<method name="getChildDrawingOrder(II)I"/>
-		<method name="getChildMeasureSpec(III)I"/>
-		<method name="getChildStaticTransformation(Landroid/view/View;Landroid/view/animation/Transformation;)Z"/>
-		<method name="getClipChildren()Z" since="18"/>
-		<method name="getClipToPadding()Z" since="21"/>
-		<method name="getDescendantFocusability()I"/>
-		<method name="getFocusedChild()Landroid/view/View;"/>
-		<method name="getLayoutAnimation()Landroid/view/animation/LayoutAnimationController;"/>
-		<method name="getLayoutAnimationListener()Landroid/view/animation/Animation$AnimationListener;"/>
-		<method name="getLayoutMode()I" since="18"/>
-		<method name="getLayoutTransition()Landroid/animation/LayoutTransition;" since="11"/>
-		<method name="getNestedScrollAxes()I" since="21"/>
-		<method name="getOverlay()Landroid/view/ViewGroupOverlay;" since="18"/>
-		<method name="getPersistentDrawingCache()I" deprecated="28"/>
-		<method name="getTouchscreenBlocksFocus()Z" since="21"/>
-		<method name="indexOfChild(Landroid/view/View;)I"/>
-		<method name="isAlwaysDrawnWithCacheEnabled()Z" deprecated="23"/>
-		<method name="isAnimationCacheEnabled()Z" deprecated="23"/>
-		<method name="isChildrenDrawingOrderEnabled()Z" since="7"/>
-		<method name="isChildrenDrawnWithCacheEnabled()Z" deprecated="23"/>
-		<method name="isMotionEventSplittingEnabled()Z" since="11"/>
-		<method name="isTransitionGroup()Z" since="21"/>
-		<method name="measureChild(Landroid/view/View;II)V"/>
-		<method name="measureChildWithMargins(Landroid/view/View;IIII)V"/>
-		<method name="measureChildren(II)V"/>
-		<method name="offsetDescendantRectToMyCoords(Landroid/view/View;Landroid/graphics/Rect;)V"/>
-		<method name="offsetRectIntoDescendantCoords(Landroid/view/View;Landroid/graphics/Rect;)V"/>
-		<method name="onInterceptHoverEvent(Landroid/view/MotionEvent;)Z" since="14"/>
-		<method name="onInterceptTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z"/>
-		<method name="onRequestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" since="14"/>
-		<method name="onViewAdded(Landroid/view/View;)V" since="23"/>
-		<method name="onViewRemoved(Landroid/view/View;)V" since="23"/>
-		<method name="removeAllViews()V"/>
-		<method name="removeAllViewsInLayout()V"/>
-		<method name="removeDetachedView(Landroid/view/View;Z)V"/>
-		<method name="removeViewAt(I)V"/>
-		<method name="removeViewInLayout(Landroid/view/View;)V"/>
-		<method name="removeViews(II)V"/>
-		<method name="removeViewsInLayout(II)V"/>
-		<method name="requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z"/>
-		<method name="resetResolvedLayoutDirection()V" since="14" removed="16"/>
-		<method name="resetResolvedTextDirection()V" since="14" removed="16"/>
-		<method name="scheduleLayoutAnimation()V"/>
-		<method name="setAddStatesFromChildren(Z)V"/>
-		<method name="setAlwaysDrawnWithCacheEnabled(Z)V" deprecated="23"/>
-		<method name="setAnimationCacheEnabled(Z)V" deprecated="23"/>
-		<method name="setChildrenDrawingCacheEnabled(Z)V" deprecated="28"/>
-		<method name="setChildrenDrawingOrderEnabled(Z)V" since="7"/>
-		<method name="setChildrenDrawnWithCacheEnabled(Z)V" deprecated="23"/>
-		<method name="setClipChildren(Z)V"/>
-		<method name="setClipToPadding(Z)V"/>
-		<method name="setDescendantFocusability(I)V"/>
-		<method name="setLayoutAnimation(Landroid/view/animation/LayoutAnimationController;)V"/>
-		<method name="setLayoutAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V"/>
-		<method name="setLayoutMode(I)V" since="18"/>
-		<method name="setLayoutTransition(Landroid/animation/LayoutTransition;)V" since="11"/>
-		<method name="setMotionEventSplittingEnabled(Z)V" since="11"/>
-		<method name="setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V"/>
-		<method name="setPersistentDrawingCache(I)V" deprecated="28"/>
-		<method name="setStaticTransformationsEnabled(Z)V" since="3"/>
-		<method name="setTouchscreenBlocksFocus(Z)V" since="21"/>
-		<method name="setTransitionGroup(Z)V" since="21"/>
-		<method name="shouldDelayChildPressedState()Z" since="14"/>
-		<method name="startLayoutAnimation()V"/>
-		<method name="startViewTransition(Landroid/view/View;)V" since="11"/>
-		<field name="CLIP_TO_PADDING_MASK"/>
-		<field name="FLAG_USE_CHILD_DRAWING_ORDER" removed="7"/>
-		<field name="FOCUS_AFTER_DESCENDANTS"/>
-		<field name="FOCUS_BEFORE_DESCENDANTS"/>
-		<field name="FOCUS_BLOCK_DESCENDANTS"/>
-		<field name="LAYOUT_MODE_CLIP_BOUNDS" since="18"/>
-		<field name="LAYOUT_MODE_OPTICAL_BOUNDS" since="18"/>
-		<field name="PERSISTENT_ALL_CACHES" deprecated="28"/>
-		<field name="PERSISTENT_ANIMATION_CACHE" deprecated="28"/>
-		<field name="PERSISTENT_NO_CACHE" deprecated="28"/>
-		<field name="PERSISTENT_SCROLLING_CACHE" deprecated="28"/>
-	</class>
-	<class name="android/view/ViewGroup$LayoutParams" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="resolveLayoutDirection(I)V" since="17"/>
-		<method name="setBaseAttributes(Landroid/content/res/TypedArray;II)V"/>
-		<field name="FILL_PARENT" deprecated="16"/>
-		<field name="MATCH_PARENT" since="8"/>
-		<field name="WRAP_CONTENT"/>
-		<field name="height"/>
-		<field name="layoutAnimationParameters"/>
-		<field name="width"/>
-	</class>
-	<class name="android/view/ViewGroup$MarginLayoutParams" since="1">
-		<extends name="android/view/ViewGroup$LayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-		<method name="getLayoutDirection()I" since="17"/>
-		<method name="getMarginEnd()I" since="17"/>
-		<method name="getMarginStart()I" since="17"/>
-		<method name="isMarginRelative()Z" since="17"/>
-		<method name="setLayoutDirection(I)V" since="17"/>
-		<method name="setMarginEnd(I)V" since="17"/>
-		<method name="setMarginStart(I)V" since="17"/>
-		<method name="setMargins(IIII)V"/>
-		<field name="bottomMargin"/>
-		<field name="leftMargin"/>
-		<field name="rightMargin"/>
-		<field name="topMargin"/>
-	</class>
-	<class name="android/view/ViewGroup$OnHierarchyChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onChildViewAdded(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="onChildViewRemoved(Landroid/view/View;Landroid/view/View;)V"/>
-	</class>
-	<class name="android/view/ViewGroupOverlay" since="18">
-		<extends name="android/view/ViewOverlay"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;)V" since="29"/>
-		<method name="add(Landroid/view/View;)V"/>
-		<method name="remove(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/view/ViewManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="removeView(Landroid/view/View;)V"/>
-		<method name="updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-	</class>
-	<class name="android/view/ViewOutlineProvider" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getOutline(Landroid/view/View;Landroid/graphics/Outline;)V"/>
-		<field name="BACKGROUND"/>
-		<field name="BOUNDS"/>
-		<field name="PADDED_BOUNDS"/>
-	</class>
-	<class name="android/view/ViewOverlay" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;)V" since="29"/>
-		<method name="add(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="clear()V"/>
-		<method name="remove(Landroid/graphics/drawable/Drawable;)V"/>
-	</class>
-	<class name="android/view/ViewParent" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="bringChildToFront(Landroid/view/View;)V"/>
-		<method name="canResolveLayoutDirection()Z" since="19"/>
-		<method name="canResolveTextAlignment()Z" since="19"/>
-		<method name="canResolveTextDirection()Z" since="19"/>
-		<method name="childDrawableStateChanged(Landroid/view/View;)V"/>
-		<method name="childHasTransientStateChanged(Landroid/view/View;Z)V" since="19"/>
-		<method name="clearChildFocus(Landroid/view/View;)V"/>
-		<method name="createContextMenu(Landroid/view/ContextMenu;)V"/>
-		<method name="focusSearch(Landroid/view/View;I)Landroid/view/View;"/>
-		<method name="focusableViewAvailable(Landroid/view/View;)V"/>
-		<method name="getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z"/>
-		<method name="getLayoutDirection()I" since="19"/>
-		<method name="getParent()Landroid/view/ViewParent;"/>
-		<method name="getParentForAccessibility()Landroid/view/ViewParent;" since="16"/>
-		<method name="getTextAlignment()I" since="19"/>
-		<method name="getTextDirection()I" since="19"/>
-		<method name="invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V" deprecated="26"/>
-		<method name="invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;" deprecated="26"/>
-		<method name="isLayoutDirectionResolved()Z" since="19"/>
-		<method name="isLayoutRequested()Z"/>
-		<method name="isTextAlignmentResolved()Z" since="19"/>
-		<method name="isTextDirectionResolved()Z" since="19"/>
-		<method name="keyboardNavigationClusterSearch(Landroid/view/View;I)Landroid/view/View;" since="26"/>
-		<method name="notifySubtreeAccessibilityStateChanged(Landroid/view/View;Landroid/view/View;I)V" since="19"/>
-		<method name="onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V" since="26"/>
-		<method name="onNestedFling(Landroid/view/View;FFZ)Z" since="21"/>
-		<method name="onNestedPreFling(Landroid/view/View;FF)Z" since="21"/>
-		<method name="onNestedPrePerformAccessibilityAction(Landroid/view/View;ILandroid/os/Bundle;)Z" since="22"/>
-		<method name="onNestedPreScroll(Landroid/view/View;II[I)V" since="21"/>
-		<method name="onNestedScroll(Landroid/view/View;IIII)V" since="21"/>
-		<method name="onNestedScrollAccepted(Landroid/view/View;Landroid/view/View;I)V" since="21"/>
-		<method name="onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z" since="21"/>
-		<method name="onStopNestedScroll(Landroid/view/View;)V" since="21"/>
-		<method name="recomputeViewAttributes(Landroid/view/View;)V"/>
-		<method name="requestChildFocus(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z" since="3"/>
-		<method name="requestDisallowInterceptTouchEvent(Z)V"/>
-		<method name="requestFitSystemWindows()V" since="16"/>
-		<method name="requestLayout()V"/>
-		<method name="requestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" since="14"/>
-		<method name="requestTransparentRegion(Landroid/view/View;)V"/>
-		<method name="showContextMenuForChild(Landroid/view/View;)Z"/>
-		<method name="showContextMenuForChild(Landroid/view/View;FF)Z" since="24"/>
-		<method name="startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
-		<method name="startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
-	</class>
-	<class name="android/view/ViewPropertyAnimator" since="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/view/View;)V" since="29"/>
-		<method name="alpha(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="alphaBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="cancel()V" since="14"/>
-		<method name="getDuration()J" since="14"/>
-		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" since="18"/>
-		<method name="getStartDelay()J" since="14"/>
-		<method name="rotation(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="rotationBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="rotationX(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="rotationXBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="rotationY(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="rotationYBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="scaleX(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="scaleXBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="scaleY(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="scaleYBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="setDuration(J)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="setListener(Landroid/animation/Animator$AnimatorListener;)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="setStartDelay(J)Landroid/view/ViewPropertyAnimator;" since="14"/>
-		<method name="setUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)Landroid/view/ViewPropertyAnimator;" since="19"/>
-		<method name="start()V" since="14"/>
-		<method name="translationX(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="translationXBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="translationY(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="translationYBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="translationZ(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
-		<method name="translationZBy(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
-		<method name="withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;" since="16"/>
-		<method name="withLayer()Landroid/view/ViewPropertyAnimator;" since="16"/>
-		<method name="withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;" since="16"/>
-		<method name="x(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="xBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="y(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="yBy(F)Landroid/view/ViewPropertyAnimator;"/>
-		<method name="z(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
-		<method name="zBy(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
-	</class>
-	<class name="android/view/ViewStructure" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addChildCount(I)I"/>
-		<method name="asyncCommit()V"/>
-		<method name="asyncNewChild(I)Landroid/view/ViewStructure;"/>
-		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
-		<method name="getChildCount()I"/>
-		<method name="getExtras()Landroid/os/Bundle;"/>
-		<method name="getHint()Ljava/lang/CharSequence;"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="getTextSelectionEnd()I"/>
-		<method name="getTextSelectionStart()I"/>
-		<method name="hasExtras()Z"/>
-		<method name="newChild(I)Landroid/view/ViewStructure;"/>
-		<method name="newHtmlInfoBuilder(Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;" since="26"/>
-		<method name="setAccessibilityFocused(Z)V"/>
-		<method name="setActivated(Z)V"/>
-		<method name="setAlpha(F)V"/>
-		<method name="setAutofillHints([Ljava/lang/String;)V" since="26"/>
-		<method name="setAutofillId(Landroid/view/autofill/AutofillId;)V" since="26"/>
-		<method name="setAutofillId(Landroid/view/autofill/AutofillId;I)V" since="26"/>
-		<method name="setAutofillOptions([Ljava/lang/CharSequence;)V" since="26"/>
-		<method name="setAutofillType(I)V" since="26"/>
-		<method name="setAutofillValue(Landroid/view/autofill/AutofillValue;)V" since="26"/>
-		<method name="setCheckable(Z)V"/>
-		<method name="setChecked(Z)V"/>
-		<method name="setChildCount(I)V"/>
-		<method name="setClassName(Ljava/lang/String;)V"/>
-		<method name="setClickable(Z)V"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
-		<method name="setContextClickable(Z)V"/>
-		<method name="setDataIsSensitive(Z)V" since="26"/>
-		<method name="setDimens(IIIIII)V"/>
-		<method name="setElevation(F)V"/>
-		<method name="setEnabled(Z)V"/>
-		<method name="setFocusable(Z)V"/>
-		<method name="setFocused(Z)V"/>
-		<method name="setHint(Ljava/lang/CharSequence;)V"/>
-		<method name="setHtmlInfo(Landroid/view/ViewStructure$HtmlInfo;)V" since="26"/>
-		<method name="setId(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setImportantForAutofill(I)V" since="28"/>
-		<method name="setInputType(I)V" since="26"/>
-		<method name="setLocaleList(Landroid/os/LocaleList;)V" since="26"/>
-		<method name="setLongClickable(Z)V"/>
-		<method name="setMaxTextEms(I)V" since="28"/>
-		<method name="setMaxTextLength(I)V" since="28"/>
-		<method name="setMinTextEms(I)V" since="28"/>
-		<method name="setOpaque(Z)V" since="26"/>
-		<method name="setSelected(Z)V"/>
-		<method name="setText(Ljava/lang/CharSequence;)V"/>
-		<method name="setText(Ljava/lang/CharSequence;II)V"/>
-		<method name="setTextIdEntry(Ljava/lang/String;)V" since="28"/>
-		<method name="setTextLines([I[I)V"/>
-		<method name="setTextStyle(FIII)V"/>
-		<method name="setTransformation(Landroid/graphics/Matrix;)V"/>
-		<method name="setVisibility(I)V"/>
-		<method name="setWebDomain(Ljava/lang/String;)V" since="26"/>
-	</class>
-	<class name="android/view/ViewStructure$HtmlInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAttributes()Ljava/util/List;"/>
-		<method name="getTag()Ljava/lang/String;"/>
-	</class>
-	<class name="android/view/ViewStructure$HtmlInfo$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;"/>
-		<method name="build()Landroid/view/ViewStructure$HtmlInfo;"/>
-	</class>
-	<class name="android/view/ViewStub" since="1">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getInflatedId()I"/>
-		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="16"/>
-		<method name="getLayoutResource()I"/>
-		<method name="inflate()Landroid/view/View;"/>
-		<method name="setInflatedId(I)V"/>
-		<method name="setLayoutInflater(Landroid/view/LayoutInflater;)V" since="16"/>
-		<method name="setLayoutResource(I)V"/>
-		<method name="setOnInflateListener(Landroid/view/ViewStub$OnInflateListener;)V"/>
-	</class>
-	<class name="android/view/ViewStub$OnInflateListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onInflate(Landroid/view/ViewStub;Landroid/view/View;)V"/>
-	</class>
-	<class name="android/view/ViewTreeObserver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16"/>
-		<method name="addOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V"/>
-		<method name="addOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V"/>
-		<method name="addOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V"/>
-		<method name="addOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3"/>
-		<method name="addOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V"/>
-		<method name="addOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18"/>
-		<method name="addOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18"/>
-		<method name="dispatchOnDraw()V" since="16"/>
-		<method name="dispatchOnGlobalLayout()V"/>
-		<method name="dispatchOnPreDraw()Z"/>
-		<method name="isAlive()Z"/>
-		<method name="removeGlobalOnLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" deprecated="16"/>
-		<method name="removeOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16"/>
-		<method name="removeOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V"/>
-		<method name="removeOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" since="16"/>
-		<method name="removeOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V"/>
-		<method name="removeOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3"/>
-		<method name="removeOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V"/>
-		<method name="removeOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18"/>
-		<method name="removeOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnDrawListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onDraw()V"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnGlobalFocusChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onGlobalFocusChanged(Landroid/view/View;Landroid/view/View;)V"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnGlobalLayoutListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onGlobalLayout()V"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnPreDrawListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onPreDraw()Z"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnScrollChangedListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onScrollChanged()V"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnTouchModeChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onTouchModeChanged(Z)V"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnWindowAttachListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onWindowAttached()V"/>
-		<method name="onWindowDetached()V"/>
-	</class>
-	<class name="android/view/ViewTreeObserver$OnWindowFocusChangeListener" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="onWindowFocusChanged(Z)V"/>
-	</class>
-	<class name="android/view/Window" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="addFlags(I)V"/>
-		<method name="addOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;Landroid/os/Handler;)V" since="24"/>
-		<method name="clearFlags(I)V"/>
-		<method name="closeAllPanels()V"/>
-		<method name="closePanel(I)V"/>
-		<method name="findViewById(I)Landroid/view/View;"/>
-		<method name="getAllowEnterTransitionOverlap()Z" since="21"/>
-		<method name="getAllowReturnTransitionOverlap()Z" since="21"/>
-		<method name="getAttributes()Landroid/view/WindowManager$LayoutParams;"/>
-		<method name="getCallback()Landroid/view/Window$Callback;"/>
-		<method name="getColorMode()I" since="26"/>
-		<method name="getContainer()Landroid/view/Window;"/>
-		<method name="getContentScene()Landroid/transition/Scene;" since="21"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getCurrentFocus()Landroid/view/View;"/>
-		<method name="getDecorView()Landroid/view/View;"/>
-		<method name="getDefaultFeatures(Landroid/content/Context;)I" since="22"/>
-		<method name="getEnterTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getExitTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getFeatures()I"/>
-		<method name="getForcedWindowFlags()I"/>
-		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
-		<method name="getLocalFeatures()I"/>
-		<method name="getMediaController()Landroid/media/session/MediaController;" since="21"/>
-		<method name="getNavigationBarColor()I" since="21"/>
-		<method name="getNavigationBarDividerColor()I" since="28"/>
-		<method name="getReenterTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getReturnTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getSharedElementExitTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getSharedElementReenterTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21"/>
-		<method name="getSharedElementsUseOverlay()Z" since="21"/>
-		<method name="getStatusBarColor()I" since="21"/>
-		<method name="getTransitionBackgroundFadeDuration()J" since="21"/>
-		<method name="getTransitionManager()Landroid/transition/TransitionManager;" since="21"/>
-		<method name="getVolumeControlStream()I"/>
-		<method name="getWindowManager()Landroid/view/WindowManager;"/>
-		<method name="getWindowStyle()Landroid/content/res/TypedArray;"/>
-		<method name="hasChildren()Z"/>
-		<method name="hasFeature(I)Z" since="11"/>
-		<method name="hasSoftInputMode()Z" since="3"/>
-		<method name="injectInputEvent(Landroid/view/InputEvent;)V" since="19"/>
-		<method name="invalidatePanelMenu(I)V" since="11"/>
-		<method name="isActive()Z"/>
-		<method name="isFloating()Z"/>
-		<method name="isShortcutKey(ILandroid/view/KeyEvent;)Z"/>
-		<method name="isWideColorGamut()Z" since="27"/>
-		<method name="makeActive()V"/>
-		<method name="onActive()V"/>
-		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V"/>
-		<method name="openPanel(ILandroid/view/KeyEvent;)V"/>
-		<method name="peekDecorView()Landroid/view/View;"/>
-		<method name="performContextMenuIdentifierAction(II)Z"/>
-		<method name="performPanelIdentifierAction(III)Z"/>
-		<method name="performPanelShortcut(IILandroid/view/KeyEvent;I)Z"/>
-		<method name="removeOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V" since="24"/>
-		<method name="requestFeature(I)Z"/>
-		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
-		<method name="restoreHierarchyState(Landroid/os/Bundle;)V"/>
-		<method name="saveHierarchyState()Landroid/os/Bundle;"/>
-		<method name="setAllowEnterTransitionOverlap(Z)V" since="21"/>
-		<method name="setAllowReturnTransitionOverlap(Z)V" since="21"/>
-		<method name="setAttributes(Landroid/view/WindowManager$LayoutParams;)V"/>
-		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setBackgroundDrawableResource(I)V"/>
-		<method name="setCallback(Landroid/view/Window$Callback;)V"/>
-		<method name="setChildDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
-		<method name="setChildInt(II)V"/>
-		<method name="setClipToOutline(Z)V" since="22"/>
-		<method name="setColorMode(I)V" since="26"/>
-		<method name="setContainer(Landroid/view/Window;)V"/>
-		<method name="setContentView(I)V"/>
-		<method name="setContentView(Landroid/view/View;)V"/>
-		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="setDecorCaptionShade(I)V" since="24"/>
-		<method name="setDefaultWindowFormat(I)V"/>
-		<method name="setDimAmount(F)V" since="14"/>
-		<method name="setElevation(F)V" since="22"/>
-		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setExitTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
-		<method name="setFeatureDrawableAlpha(II)V"/>
-		<method name="setFeatureDrawableResource(II)V"/>
-		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V"/>
-		<method name="setFeatureInt(II)V"/>
-		<method name="setFlags(II)V"/>
-		<method name="setFormat(I)V"/>
-		<method name="setGravity(I)V"/>
-		<method name="setIcon(I)V" since="19"/>
-		<method name="setLayout(II)V"/>
-		<method name="setLocalFocus(ZZ)V" since="19"/>
-		<method name="setLogo(I)V" since="19"/>
-		<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21"/>
-		<method name="setNavigationBarColor(I)V" since="21"/>
-		<method name="setNavigationBarDividerColor(I)V" since="28"/>
-		<method name="setReenterTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setResizingCaptionDrawable(Landroid/graphics/drawable/Drawable;)V" since="24"/>
-		<method name="setRestrictedCaptionAreaListener(Landroid/view/Window$OnRestrictedCaptionAreaChangedListener;)V" since="24"/>
-		<method name="setReturnTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setSharedElementExitTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setSharedElementReenterTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21"/>
-		<method name="setSharedElementsUseOverlay(Z)V" since="21"/>
-		<method name="setSoftInputMode(I)V" since="3"/>
-		<method name="setStatusBarColor(I)V" since="21"/>
-		<method name="setSustainedPerformanceMode(Z)V" since="24"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setTitleColor(I)V" deprecated="21"/>
-		<method name="setTransitionBackgroundFadeDuration(J)V" since="21"/>
-		<method name="setTransitionManager(Landroid/transition/TransitionManager;)V" since="21"/>
-		<method name="setType(I)V"/>
-		<method name="setUiOptions(I)V" since="14"/>
-		<method name="setUiOptions(II)V" since="14"/>
-		<method name="setVolumeControlStream(I)V"/>
-		<method name="setWindowAnimations(I)V" since="3"/>
-		<method name="setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;)V"/>
-		<method name="setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;Z)V" since="11"/>
-		<method name="superDispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
-		<method name="superDispatchKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="superDispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z" since="11"/>
-		<method name="superDispatchTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="superDispatchTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="takeInputQueue(Landroid/view/InputQueue$Callback;)V" since="9"/>
-		<method name="takeKeyEvents(Z)V"/>
-		<method name="takeSurface(Landroid/view/SurfaceHolder$Callback2;)V" since="9"/>
-		<method name="togglePanel(ILandroid/view/KeyEvent;)V"/>
-		<field name="DECOR_CAPTION_SHADE_AUTO" since="24"/>
-		<field name="DECOR_CAPTION_SHADE_DARK" since="24"/>
-		<field name="DECOR_CAPTION_SHADE_LIGHT" since="24"/>
-		<field name="DEFAULT_FEATURES" deprecated="22"/>
-		<field name="FEATURE_ACTION_BAR" since="11"/>
-		<field name="FEATURE_ACTION_BAR_OVERLAY" since="11"/>
-		<field name="FEATURE_ACTION_MODE_OVERLAY" since="11"/>
-		<field name="FEATURE_ACTIVITY_TRANSITIONS" since="21"/>
-		<field name="FEATURE_CONTENT_TRANSITIONS" since="21"/>
-		<field name="FEATURE_CONTEXT_MENU"/>
-		<field name="FEATURE_CUSTOM_TITLE"/>
-		<field name="FEATURE_INDETERMINATE_PROGRESS" deprecated="24"/>
-		<field name="FEATURE_LEFT_ICON"/>
-		<field name="FEATURE_NO_TITLE"/>
-		<field name="FEATURE_OPTIONS_PANEL"/>
-		<field name="FEATURE_PROGRESS" deprecated="24"/>
-		<field name="FEATURE_RIGHT_ICON"/>
-		<field name="FEATURE_SWIPE_TO_DISMISS" since="20"/>
-		<field name="ID_ANDROID_CONTENT"/>
-		<field name="NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME" since="21"/>
-		<field name="PROGRESS_END" deprecated="24"/>
-		<field name="PROGRESS_INDETERMINATE_OFF" deprecated="24"/>
-		<field name="PROGRESS_INDETERMINATE_ON" deprecated="24"/>
-		<field name="PROGRESS_SECONDARY_END" deprecated="24"/>
-		<field name="PROGRESS_SECONDARY_START" deprecated="24"/>
-		<field name="PROGRESS_START" deprecated="24"/>
-		<field name="PROGRESS_VISIBILITY_OFF" deprecated="24"/>
-		<field name="PROGRESS_VISIBILITY_ON" deprecated="24"/>
-		<field name="STATUS_BAR_BACKGROUND_TRANSITION_NAME" since="21"/>
-	</class>
-	<class name="android/view/Window$Callback" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
-		<method name="dispatchKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="dispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z" since="11"/>
-		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z" since="4"/>
-		<method name="dispatchTouchEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="dispatchTrackballEvent(Landroid/view/MotionEvent;)Z"/>
-		<method name="onActionModeFinished(Landroid/view/ActionMode;)V" since="11"/>
-		<method name="onActionModeStarted(Landroid/view/ActionMode;)V" since="11"/>
-		<method name="onAttachedToWindow()V" since="5"/>
-		<method name="onContentChanged()V"/>
-		<method name="onCreatePanelMenu(ILandroid/view/Menu;)Z"/>
-		<method name="onCreatePanelView(I)Landroid/view/View;"/>
-		<method name="onDetachedFromWindow()V" since="5"/>
-		<method name="onMenuItemSelected(ILandroid/view/MenuItem;)Z"/>
-		<method name="onMenuOpened(ILandroid/view/Menu;)Z"/>
-		<method name="onPanelClosed(ILandroid/view/Menu;)V"/>
-		<method name="onPointerCaptureChanged(Z)V" since="26"/>
-		<method name="onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z"/>
-		<method name="onProvideKeyboardShortcuts(Ljava/util/List;Landroid/view/Menu;I)V" since="24"/>
-		<method name="onSearchRequested()Z"/>
-		<method name="onSearchRequested(Landroid/view/SearchEvent;)Z" since="23"/>
-		<method name="onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V"/>
-		<method name="onWindowFocusChanged(Z)V"/>
-		<method name="onWindowStartingActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
-		<method name="onWindowStartingActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
-	</class>
-	<class name="android/view/Window$OnFrameMetricsAvailableListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V"/>
-	</class>
-	<class name="android/view/Window$OnRestrictedCaptionAreaChangedListener" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="onRestrictedCaptionAreaChanged(Landroid/graphics/Rect;)V"/>
-	</class>
-	<class name="android/view/WindowAnimationFrameStats" since="21">
-		<extends name="android/view/FrameStats"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/WindowContentFrameStats" since="21">
-		<extends name="android/view/FrameStats"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFramePostedTimeNano(I)J"/>
-		<method name="getFrameReadyTimeNano(I)J"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/WindowId" since="18">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/IBinder;)V" since="29"/>
-		<method name="isFocused()Z"/>
-		<method name="registerFocusObserver(Landroid/view/WindowId$FocusObserver;)V"/>
-		<method name="unregisterFocusObserver(Landroid/view/WindowId$FocusObserver;)V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/WindowId$FocusObserver" since="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onFocusGained(Landroid/view/WindowId;)V"/>
-		<method name="onFocusLost(Landroid/view/WindowId;)V"/>
-	</class>
-	<class name="android/view/WindowInsets" since="20">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/WindowInsets;)V"/>
-		<method name="consumeDisplayCutout()Landroid/view/WindowInsets;" since="28"/>
-		<method name="consumeStableInsets()Landroid/view/WindowInsets;" since="21"/>
-		<method name="consumeSystemWindowInsets()Landroid/view/WindowInsets;"/>
-		<method name="getDisplayCutout()Landroid/view/DisplayCutout;" since="28"/>
-		<method name="getStableInsetBottom()I" since="21"/>
-		<method name="getStableInsetLeft()I" since="21"/>
-		<method name="getStableInsetRight()I" since="21"/>
-		<method name="getStableInsetTop()I" since="21"/>
-		<method name="getSystemWindowInsetBottom()I"/>
-		<method name="getSystemWindowInsetLeft()I"/>
-		<method name="getSystemWindowInsetRight()I"/>
-		<method name="getSystemWindowInsetTop()I"/>
-		<method name="hasInsets()Z"/>
-		<method name="hasStableInsets()Z" since="21"/>
-		<method name="hasSystemWindowInsets()Z"/>
-		<method name="isConsumed()Z" since="21"/>
-		<method name="isRound()Z"/>
-		<method name="replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;"/>
-		<method name="replaceSystemWindowInsets(Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21"/>
-	</class>
-	<class name="android/view/WindowManager" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/ViewManager"/>
-		<method name="getDefaultDisplay()Landroid/view/Display;"/>
-		<method name="removeViewImmediate(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/view/WindowManager$BadTokenException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/view/WindowManager$InvalidDisplayException" since="17">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/view/WindowManager$LayoutParams" since="1">
-		<extends name="android/view/ViewGroup$LayoutParams"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIII)V"/>
-		<method name="&lt;init>(IIIIIII)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="copyFrom(Landroid/view/WindowManager$LayoutParams;)I"/>
-		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getColorMode()I" since="26"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="mayUseInputMethod(I)Z" since="3"/>
-		<method name="setColorMode(I)V" since="26"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<field name="ALPHA_CHANGED"/>
-		<field name="ANIMATION_CHANGED"/>
-		<field name="BRIGHTNESS_OVERRIDE_FULL" since="8"/>
-		<field name="BRIGHTNESS_OVERRIDE_NONE" since="8"/>
-		<field name="BRIGHTNESS_OVERRIDE_OFF" since="8"/>
-		<field name="CREATOR"/>
-		<field name="DIM_AMOUNT_CHANGED"/>
-		<field name="FIRST_APPLICATION_WINDOW"/>
-		<field name="FIRST_SUB_WINDOW"/>
-		<field name="FIRST_SYSTEM_WINDOW"/>
-		<field name="FLAGS_CHANGED"/>
-		<field name="FLAG_ALLOW_LOCK_WHILE_SCREEN_ON" since="8"/>
-		<field name="FLAG_ALT_FOCUSABLE_IM" since="3"/>
-		<field name="FLAG_BLUR_BEHIND" deprecated="16"/>
-		<field name="FLAG_DIM_BEHIND"/>
-		<field name="FLAG_DISMISS_KEYGUARD" since="5" deprecated="26"/>
-		<field name="FLAG_DITHER" deprecated="17"/>
-		<field name="FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS" since="21"/>
-		<field name="FLAG_FORCE_NOT_FULLSCREEN"/>
-		<field name="FLAG_FULLSCREEN"/>
-		<field name="FLAG_HARDWARE_ACCELERATED" since="11"/>
-		<field name="FLAG_IGNORE_CHEEK_PRESSES"/>
-		<field name="FLAG_KEEP_SCREEN_ON"/>
-		<field name="FLAG_LAYOUT_ATTACHED_IN_DECOR" since="22"/>
-		<field name="FLAG_LAYOUT_INSET_DECOR"/>
-		<field name="FLAG_LAYOUT_IN_OVERSCAN" since="18"/>
-		<field name="FLAG_LAYOUT_IN_SCREEN"/>
-		<field name="FLAG_LAYOUT_NO_LIMITS"/>
-		<field name="FLAG_LOCAL_FOCUS_MODE" since="19"/>
-		<field name="FLAG_NOT_FOCUSABLE"/>
-		<field name="FLAG_NOT_TOUCHABLE"/>
-		<field name="FLAG_NOT_TOUCH_MODAL"/>
-		<field name="FLAG_SCALED"/>
-		<field name="FLAG_SECURE"/>
-		<field name="FLAG_SHOW_WALLPAPER" since="5"/>
-		<field name="FLAG_SHOW_WHEN_LOCKED" since="5" deprecated="27"/>
-		<field name="FLAG_SPLIT_TOUCH" since="11"/>
-		<field name="FLAG_TOUCHABLE_WHEN_WAKING" deprecated="20"/>
-		<field name="FLAG_TRANSLUCENT_NAVIGATION" since="19"/>
-		<field name="FLAG_TRANSLUCENT_STATUS" since="19"/>
-		<field name="FLAG_TURN_SCREEN_ON" since="5" deprecated="27"/>
-		<field name="FLAG_WATCH_OUTSIDE_TOUCH" since="3"/>
-		<field name="FORMAT_CHANGED"/>
-		<field name="LAST_APPLICATION_WINDOW"/>
-		<field name="LAST_SUB_WINDOW"/>
-		<field name="LAST_SYSTEM_WINDOW"/>
-		<field name="LAYOUT_CHANGED"/>
-		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT" since="28"/>
-		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER" since="28"/>
-		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES" since="28"/>
-		<field name="MEMORY_TYPE_CHANGED"/>
-		<field name="MEMORY_TYPE_GPU" deprecated="16"/>
-		<field name="MEMORY_TYPE_HARDWARE" deprecated="16"/>
-		<field name="MEMORY_TYPE_NORMAL" deprecated="16"/>
-		<field name="MEMORY_TYPE_PUSH_BUFFERS" deprecated="16"/>
-		<field name="ROTATION_ANIMATION_CHANGED" since="18"/>
-		<field name="ROTATION_ANIMATION_CROSSFADE" since="18"/>
-		<field name="ROTATION_ANIMATION_JUMPCUT" since="18"/>
-		<field name="ROTATION_ANIMATION_ROTATE" since="18"/>
-		<field name="ROTATION_ANIMATION_SEAMLESS" since="26"/>
-		<field name="SCREEN_BRIGHTNESS_CHANGED" since="3"/>
-		<field name="SCREEN_ORIENTATION_CHANGED" since="3"/>
-		<field name="SOFT_INPUT_ADJUST_NOTHING" since="11"/>
-		<field name="SOFT_INPUT_ADJUST_PAN" since="3"/>
-		<field name="SOFT_INPUT_ADJUST_RESIZE" since="3"/>
-		<field name="SOFT_INPUT_ADJUST_UNSPECIFIED" since="3"/>
-		<field name="SOFT_INPUT_IS_FORWARD_NAVIGATION" since="3"/>
-		<field name="SOFT_INPUT_MASK_ADJUST" since="3"/>
-		<field name="SOFT_INPUT_MASK_STATE" since="3"/>
-		<field name="SOFT_INPUT_MODE_CHANGED" since="3"/>
-		<field name="SOFT_INPUT_STATE_ALWAYS_HIDDEN" since="3"/>
-		<field name="SOFT_INPUT_STATE_ALWAYS_VISIBLE" since="3"/>
-		<field name="SOFT_INPUT_STATE_HIDDEN" since="3"/>
-		<field name="SOFT_INPUT_STATE_UNCHANGED" since="3"/>
-		<field name="SOFT_INPUT_STATE_UNSPECIFIED" since="3"/>
-		<field name="SOFT_INPUT_STATE_VISIBLE" since="3"/>
-		<field name="TITLE_CHANGED"/>
-		<field name="TYPE_ACCESSIBILITY_OVERLAY" since="22"/>
-		<field name="TYPE_APPLICATION"/>
-		<field name="TYPE_APPLICATION_ATTACHED_DIALOG" since="3"/>
-		<field name="TYPE_APPLICATION_MEDIA"/>
-		<field name="TYPE_APPLICATION_OVERLAY" since="26"/>
-		<field name="TYPE_APPLICATION_PANEL"/>
-		<field name="TYPE_APPLICATION_STARTING"/>
-		<field name="TYPE_APPLICATION_SUB_PANEL"/>
-		<field name="TYPE_BASE_APPLICATION"/>
-		<field name="TYPE_CHANGED"/>
-		<field name="TYPE_DRAWN_APPLICATION" since="25"/>
-		<field name="TYPE_INPUT_METHOD" since="3"/>
-		<field name="TYPE_INPUT_METHOD_DIALOG" since="3"/>
-		<field name="TYPE_KEYGUARD" removed="21"/>
-		<field name="TYPE_KEYGUARD_DIALOG"/>
-		<field name="TYPE_PHONE" deprecated="26"/>
-		<field name="TYPE_PRIORITY_PHONE" deprecated="26"/>
-		<field name="TYPE_PRIVATE_PRESENTATION" since="19"/>
-		<field name="TYPE_SEARCH_BAR"/>
-		<field name="TYPE_STATUS_BAR"/>
-		<field name="TYPE_STATUS_BAR_PANEL"/>
-		<field name="TYPE_SYSTEM_ALERT" deprecated="26"/>
-		<field name="TYPE_SYSTEM_DIALOG"/>
-		<field name="TYPE_SYSTEM_ERROR" deprecated="26"/>
-		<field name="TYPE_SYSTEM_OVERLAY" deprecated="26"/>
-		<field name="TYPE_TOAST" deprecated="26"/>
-		<field name="TYPE_WALLPAPER" since="5"/>
-		<field name="alpha"/>
-		<field name="buttonBrightness" since="8"/>
-		<field name="dimAmount"/>
-		<field name="flags"/>
-		<field name="format"/>
-		<field name="gravity"/>
-		<field name="horizontalMargin"/>
-		<field name="horizontalWeight"/>
-		<field name="layoutInDisplayCutoutMode" since="28"/>
-		<field name="memoryType" deprecated="16"/>
-		<field name="packageName"/>
-		<field name="preferredDisplayModeId" since="23"/>
-		<field name="preferredRefreshRate" since="21" deprecated="23"/>
-		<field name="rotationAnimation" since="18"/>
-		<field name="screenBrightness" since="3"/>
-		<field name="screenOrientation" since="3"/>
-		<field name="softInputMode" since="3"/>
-		<field name="systemUiVisibility" since="11"/>
-		<field name="token"/>
-		<field name="type"/>
-		<field name="verticalMargin"/>
-		<field name="verticalWeight"/>
-		<field name="windowAnimations"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityEvent" since="4">
-		<extends name="android/view/accessibility/AccessibilityRecord" since="14"/>
-		<extends name="java/lang/Object" removed="14"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="appendRecord(Landroid/view/accessibility/AccessibilityRecord;)V" since="14"/>
-		<method name="eventTypeToString(I)Ljava/lang/String;" since="14"/>
-		<method name="getAction()I" since="16"/>
-		<method name="getAddedCount()I" removed="14"/>
-		<method name="getBeforeText()Ljava/lang/CharSequence;" removed="14"/>
-		<method name="getClassName()Ljava/lang/CharSequence;" removed="14"/>
-		<method name="getContentChangeTypes()I" since="19"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;" removed="14"/>
-		<method name="getCurrentItemIndex()I" removed="14"/>
-		<method name="getEventTime()J"/>
-		<method name="getEventType()I"/>
-		<method name="getFromIndex()I" removed="14"/>
-		<method name="getItemCount()I" removed="14"/>
-		<method name="getMovementGranularity()I" since="16"/>
-		<method name="getPackageName()Ljava/lang/CharSequence;"/>
-		<method name="getParcelableData()Landroid/os/Parcelable;" removed="14"/>
-		<method name="getRecord(I)Landroid/view/accessibility/AccessibilityRecord;" since="14"/>
-		<method name="getRecordCount()I" since="14"/>
-		<method name="getRemovedCount()I" removed="14"/>
-		<method name="getText()Ljava/util/List;" removed="14"/>
-		<method name="getWindowChanges()I" since="28"/>
-		<method name="initFromParcel(Landroid/os/Parcel;)V"/>
-		<method name="isChecked()Z" removed="14"/>
-		<method name="isEnabled()Z" removed="14"/>
-		<method name="isFullScreen()Z" removed="14"/>
-		<method name="isPassword()Z" removed="14"/>
-		<method name="obtain()Landroid/view/accessibility/AccessibilityEvent;"/>
-		<method name="obtain(I)Landroid/view/accessibility/AccessibilityEvent;"/>
-		<method name="obtain(Landroid/view/accessibility/AccessibilityEvent;)Landroid/view/accessibility/AccessibilityEvent;" since="14"/>
-		<method name="recycle()V"/>
-		<method name="setAction(I)V" since="16"/>
-		<method name="setAddedCount(I)V" removed="14"/>
-		<method name="setBeforeText(Ljava/lang/CharSequence;)V" removed="14"/>
-		<method name="setChecked(Z)V" removed="14"/>
-		<method name="setClassName(Ljava/lang/CharSequence;)V" removed="14"/>
-		<method name="setContentChangeTypes(I)V" since="19"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)V" removed="14"/>
-		<method name="setCurrentItemIndex(I)V" removed="14"/>
-		<method name="setEnabled(Z)V" removed="14"/>
-		<method name="setEventTime(J)V"/>
-		<method name="setEventType(I)V"/>
-		<method name="setFromIndex(I)V" removed="14"/>
-		<method name="setFullScreen(Z)V" removed="14"/>
-		<method name="setItemCount(I)V" removed="14"/>
-		<method name="setMovementGranularity(I)V" since="16"/>
-		<method name="setPackageName(Ljava/lang/CharSequence;)V"/>
-		<method name="setParcelableData(Landroid/os/Parcelable;)V" removed="14"/>
-		<method name="setPassword(Z)V" removed="14"/>
-		<method name="setRemovedCount(I)V" removed="14"/>
-		<field name="CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION" since="19"/>
-		<field name="CONTENT_CHANGE_TYPE_PANE_APPEARED" since="28"/>
-		<field name="CONTENT_CHANGE_TYPE_PANE_DISAPPEARED" since="28"/>
-		<field name="CONTENT_CHANGE_TYPE_PANE_TITLE" since="28"/>
-		<field name="CONTENT_CHANGE_TYPE_SUBTREE" since="19"/>
-		<field name="CONTENT_CHANGE_TYPE_TEXT" since="19"/>
-		<field name="CONTENT_CHANGE_TYPE_UNDEFINED" since="19"/>
-		<field name="CREATOR"/>
-		<field name="INVALID_POSITION"/>
-		<field name="MAX_TEXT_LENGTH" deprecated="16"/>
-		<field name="TYPES_ALL_MASK"/>
-		<field name="TYPE_ANNOUNCEMENT" since="16"/>
-		<field name="TYPE_ASSIST_READING_CONTEXT" since="23"/>
-		<field name="TYPE_GESTURE_DETECTION_END" since="17"/>
-		<field name="TYPE_GESTURE_DETECTION_START" since="17"/>
-		<field name="TYPE_NOTIFICATION_STATE_CHANGED"/>
-		<field name="TYPE_TOUCH_EXPLORATION_GESTURE_END" since="14"/>
-		<field name="TYPE_TOUCH_EXPLORATION_GESTURE_START" since="14"/>
-		<field name="TYPE_TOUCH_INTERACTION_END" since="17"/>
-		<field name="TYPE_TOUCH_INTERACTION_START" since="17"/>
-		<field name="TYPE_VIEW_ACCESSIBILITY_FOCUSED" since="16"/>
-		<field name="TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED" since="16"/>
-		<field name="TYPE_VIEW_CLICKED"/>
-		<field name="TYPE_VIEW_CONTEXT_CLICKED" since="23"/>
-		<field name="TYPE_VIEW_FOCUSED"/>
-		<field name="TYPE_VIEW_HOVER_ENTER" since="14"/>
-		<field name="TYPE_VIEW_HOVER_EXIT" since="14"/>
-		<field name="TYPE_VIEW_LONG_CLICKED"/>
-		<field name="TYPE_VIEW_SCROLLED" since="14"/>
-		<field name="TYPE_VIEW_SELECTED"/>
-		<field name="TYPE_VIEW_TEXT_CHANGED"/>
-		<field name="TYPE_VIEW_TEXT_SELECTION_CHANGED" since="14"/>
-		<field name="TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY" since="16"/>
-		<field name="TYPE_WINDOWS_CHANGED" since="21"/>
-		<field name="TYPE_WINDOW_CONTENT_CHANGED" since="14"/>
-		<field name="TYPE_WINDOW_STATE_CHANGED"/>
-		<field name="WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED" since="28"/>
-		<field name="WINDOWS_CHANGE_ACTIVE" since="28"/>
-		<field name="WINDOWS_CHANGE_ADDED" since="28"/>
-		<field name="WINDOWS_CHANGE_BOUNDS" since="28"/>
-		<field name="WINDOWS_CHANGE_CHILDREN" since="28"/>
-		<field name="WINDOWS_CHANGE_FOCUSED" since="28"/>
-		<field name="WINDOWS_CHANGE_LAYER" since="28"/>
-		<field name="WINDOWS_CHANGE_PARENT" since="28"/>
-		<field name="WINDOWS_CHANGE_PIP" since="28"/>
-		<field name="WINDOWS_CHANGE_REMOVED" since="28"/>
-		<field name="WINDOWS_CHANGE_TITLE" since="28"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityEventSource" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="sendAccessibilityEvent(I)V"/>
-		<method name="sendAccessibilityEventUnchecked(Landroid/view/accessibility/AccessibilityEvent;)V"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityManager" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addAccessibilityRequestPreparer(Landroid/view/accessibility/AccessibilityRequestPreparer;)V" since="27"/>
-		<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14"/>
-		<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Landroid/os/Handler;)V" since="26"/>
-		<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19"/>
-		<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;Landroid/os/Handler;)V" since="26"/>
-		<method name="getAccessibilityServiceList()Ljava/util/List;" deprecated="16"/>
-		<method name="getEnabledAccessibilityServiceList(I)Ljava/util/List;" since="14"/>
-		<method name="getInstalledAccessibilityServiceList()Ljava/util/List;" since="14"/>
-		<method name="interrupt()V"/>
-		<method name="isAccessibilityButtonSupported()Z" since="27"/>
-		<method name="isEnabled()Z"/>
-		<method name="isTouchExplorationEnabled()Z" since="14"/>
-		<method name="removeAccessibilityRequestPreparer(Landroid/view/accessibility/AccessibilityRequestPreparer;)V" since="27"/>
-		<method name="removeAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14"/>
-		<method name="removeTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19"/>
-		<method name="sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onAccessibilityStateChanged(Z)V"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="onTouchExplorationStateChanged(Z)V"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityNodeInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="addAction(I)V" deprecated="21"/>
-		<method name="addAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V" since="21"/>
-		<method name="addChild(Landroid/view/View;)V"/>
-		<method name="addChild(Landroid/view/View;I)V" since="16"/>
-		<method name="canOpenPopup()Z" since="19"/>
-		<method name="findAccessibilityNodeInfosByText(Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="findAccessibilityNodeInfosByViewId(Ljava/lang/String;)Ljava/util/List;" since="18"/>
-		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
-		<method name="focusSearch(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
-		<method name="getActionList()Ljava/util/List;" since="21"/>
-		<method name="getActions()I" deprecated="21"/>
-		<method name="getAvailableExtraData()Ljava/util/List;" since="26"/>
-		<method name="getBoundsInParent(Landroid/graphics/Rect;)V"/>
-		<method name="getBoundsInScreen(Landroid/graphics/Rect;)V"/>
-		<method name="getChild(I)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="getChildCount()I"/>
-		<method name="getClassName()Ljava/lang/CharSequence;"/>
-		<method name="getCollectionInfo()Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;" since="19"/>
-		<method name="getCollectionItemInfo()Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;" since="19"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
-		<method name="getDrawingOrder()I" since="24"/>
-		<method name="getError()Ljava/lang/CharSequence;" since="21"/>
-		<method name="getExtras()Landroid/os/Bundle;" since="19"/>
-		<method name="getHintText()Ljava/lang/CharSequence;" since="26"/>
-		<method name="getInputType()I" since="19"/>
-		<method name="getLabelFor()Landroid/view/accessibility/AccessibilityNodeInfo;" since="17"/>
-		<method name="getLabeledBy()Landroid/view/accessibility/AccessibilityNodeInfo;" since="17"/>
-		<method name="getLiveRegion()I" since="19"/>
-		<method name="getMaxTextLength()I" since="21"/>
-		<method name="getMovementGranularities()I" since="16"/>
-		<method name="getPackageName()Ljava/lang/CharSequence;"/>
-		<method name="getPaneTitle()Ljava/lang/CharSequence;" since="28"/>
-		<method name="getParent()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="getRangeInfo()Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;" since="19"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="getTextSelectionEnd()I" since="18"/>
-		<method name="getTextSelectionStart()I" since="18"/>
-		<method name="getTooltipText()Ljava/lang/CharSequence;" since="28"/>
-		<method name="getTraversalAfter()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22"/>
-		<method name="getTraversalBefore()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22"/>
-		<method name="getViewIdResourceName()Ljava/lang/String;" since="18"/>
-		<method name="getWindow()Landroid/view/accessibility/AccessibilityWindowInfo;" since="21"/>
-		<method name="getWindowId()I"/>
-		<method name="isAccessibilityFocused()Z" since="16"/>
-		<method name="isCheckable()Z"/>
-		<method name="isChecked()Z"/>
-		<method name="isClickable()Z"/>
-		<method name="isContentInvalid()Z" since="19"/>
-		<method name="isContextClickable()Z" since="23"/>
-		<method name="isDismissable()Z" since="19"/>
-		<method name="isEditable()Z" since="18"/>
-		<method name="isEnabled()Z"/>
-		<method name="isFocusable()Z"/>
-		<method name="isFocused()Z"/>
-		<method name="isHeading()Z" since="28"/>
-		<method name="isImportantForAccessibility()Z" since="24"/>
-		<method name="isLongClickable()Z"/>
-		<method name="isMultiLine()Z" since="19"/>
-		<method name="isPassword()Z"/>
-		<method name="isScreenReaderFocusable()Z" since="28"/>
-		<method name="isScrollable()Z"/>
-		<method name="isSelected()Z"/>
-		<method name="isShowingHintText()Z" since="26"/>
-		<method name="isVisibleToUser()Z" since="16"/>
-		<method name="obtain()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="obtain(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="obtain(Landroid/view/View;I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
-		<method name="obtain(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="performAction(I)Z"/>
-		<method name="performAction(ILandroid/os/Bundle;)Z" since="16"/>
-		<method name="recycle()V"/>
-		<method name="refresh()Z" since="18"/>
-		<method name="refreshWithExtraData(Ljava/lang/String;Landroid/os/Bundle;)Z" since="26"/>
-		<method name="removeAction(I)V" since="21" deprecated="21"/>
-		<method name="removeAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z" since="21"/>
-		<method name="removeChild(Landroid/view/View;)Z" since="21"/>
-		<method name="removeChild(Landroid/view/View;I)Z" since="21"/>
-		<method name="setAccessibilityFocused(Z)V" since="16"/>
-		<method name="setAvailableExtraData(Ljava/util/List;)V" since="26"/>
-		<method name="setBoundsInParent(Landroid/graphics/Rect;)V"/>
-		<method name="setBoundsInScreen(Landroid/graphics/Rect;)V"/>
-		<method name="setCanOpenPopup(Z)V" since="19"/>
-		<method name="setCheckable(Z)V"/>
-		<method name="setChecked(Z)V"/>
-		<method name="setClassName(Ljava/lang/CharSequence;)V"/>
-		<method name="setClickable(Z)V"/>
-		<method name="setCollectionInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;)V" since="19"/>
-		<method name="setCollectionItemInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V" since="19"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
-		<method name="setContentInvalid(Z)V" since="19"/>
-		<method name="setContextClickable(Z)V" since="23"/>
-		<method name="setDismissable(Z)V" since="19"/>
-		<method name="setDrawingOrder(I)V" since="24"/>
-		<method name="setEditable(Z)V" since="18"/>
-		<method name="setEnabled(Z)V"/>
-		<method name="setError(Ljava/lang/CharSequence;)V" since="21"/>
-		<method name="setFocusable(Z)V"/>
-		<method name="setFocused(Z)V"/>
-		<method name="setHeading(Z)V" since="28"/>
-		<method name="setHintText(Ljava/lang/CharSequence;)V" since="26"/>
-		<method name="setImportantForAccessibility(Z)V" since="24"/>
-		<method name="setInputType(I)V" since="19"/>
-		<method name="setLabelFor(Landroid/view/View;)V" since="17"/>
-		<method name="setLabelFor(Landroid/view/View;I)V" since="17"/>
-		<method name="setLabeledBy(Landroid/view/View;)V" since="17"/>
-		<method name="setLabeledBy(Landroid/view/View;I)V" since="17"/>
-		<method name="setLiveRegion(I)V" since="19"/>
-		<method name="setLongClickable(Z)V"/>
-		<method name="setMaxTextLength(I)V" since="21"/>
-		<method name="setMovementGranularities(I)V" since="16"/>
-		<method name="setMultiLine(Z)V" since="19"/>
-		<method name="setPackageName(Ljava/lang/CharSequence;)V"/>
-		<method name="setPaneTitle(Ljava/lang/CharSequence;)V" since="28"/>
-		<method name="setParent(Landroid/view/View;)V"/>
-		<method name="setParent(Landroid/view/View;I)V" since="16"/>
-		<method name="setPassword(Z)V"/>
-		<method name="setRangeInfo(Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;)V" since="19"/>
-		<method name="setScreenReaderFocusable(Z)V" since="28"/>
-		<method name="setScrollable(Z)V"/>
-		<method name="setSelected(Z)V"/>
-		<method name="setShowingHintText(Z)V" since="26"/>
-		<method name="setSource(Landroid/view/View;)V"/>
-		<method name="setSource(Landroid/view/View;I)V" since="16"/>
-		<method name="setText(Ljava/lang/CharSequence;)V"/>
-		<method name="setTextSelection(II)V" since="18"/>
-		<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="28"/>
-		<method name="setTraversalAfter(Landroid/view/View;)V" since="22"/>
-		<method name="setTraversalAfter(Landroid/view/View;I)V" since="22"/>
-		<method name="setTraversalBefore(Landroid/view/View;)V" since="22"/>
-		<method name="setTraversalBefore(Landroid/view/View;I)V" since="22"/>
-		<method name="setViewIdResourceName(Ljava/lang/String;)V" since="18"/>
-		<method name="setVisibleToUser(Z)V" since="16"/>
-		<field name="ACTION_ACCESSIBILITY_FOCUS" since="16"/>
-		<field name="ACTION_ARGUMENT_COLUMN_INT" since="23"/>
-		<field name="ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN" since="18"/>
-		<field name="ACTION_ARGUMENT_HTML_ELEMENT_STRING" since="16"/>
-		<field name="ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT" since="16"/>
-		<field name="ACTION_ARGUMENT_MOVE_WINDOW_X" since="26"/>
-		<field name="ACTION_ARGUMENT_MOVE_WINDOW_Y" since="26"/>
-		<field name="ACTION_ARGUMENT_PROGRESS_VALUE" since="24"/>
-		<field name="ACTION_ARGUMENT_ROW_INT" since="23"/>
-		<field name="ACTION_ARGUMENT_SELECTION_END_INT" since="18"/>
-		<field name="ACTION_ARGUMENT_SELECTION_START_INT" since="18"/>
-		<field name="ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE" since="21"/>
-		<field name="ACTION_CLEAR_ACCESSIBILITY_FOCUS" since="16"/>
-		<field name="ACTION_CLEAR_FOCUS"/>
-		<field name="ACTION_CLEAR_SELECTION"/>
-		<field name="ACTION_CLICK" since="16"/>
-		<field name="ACTION_COLLAPSE" since="19"/>
-		<field name="ACTION_COPY" since="18"/>
-		<field name="ACTION_CUT" since="18"/>
-		<field name="ACTION_DISMISS" since="19"/>
-		<field name="ACTION_EXPAND" since="19"/>
-		<field name="ACTION_FOCUS"/>
-		<field name="ACTION_LONG_CLICK" since="16"/>
-		<field name="ACTION_NEXT_AT_MOVEMENT_GRANULARITY" since="16"/>
-		<field name="ACTION_NEXT_HTML_ELEMENT" since="16"/>
-		<field name="ACTION_PASTE" since="18"/>
-		<field name="ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY" since="16"/>
-		<field name="ACTION_PREVIOUS_HTML_ELEMENT" since="16"/>
-		<field name="ACTION_SCROLL_BACKWARD" since="16"/>
-		<field name="ACTION_SCROLL_FORWARD" since="16"/>
-		<field name="ACTION_SELECT"/>
-		<field name="ACTION_SET_SELECTION" since="18"/>
-		<field name="ACTION_SET_TEXT" since="21"/>
-		<field name="CREATOR"/>
-		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH" since="26"/>
-		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX" since="26"/>
-		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY" since="26"/>
-		<field name="FOCUS_ACCESSIBILITY" since="16"/>
-		<field name="FOCUS_INPUT" since="16"/>
-		<field name="MOVEMENT_GRANULARITY_CHARACTER" since="16"/>
-		<field name="MOVEMENT_GRANULARITY_LINE" since="16"/>
-		<field name="MOVEMENT_GRANULARITY_PAGE" since="16"/>
-		<field name="MOVEMENT_GRANULARITY_PARAGRAPH" since="16"/>
-		<field name="MOVEMENT_GRANULARITY_WORD" since="16"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityNodeInfo$AccessibilityAction" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(ILjava/lang/CharSequence;)V"/>
-		<method name="getId()I"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<field name="ACTION_ACCESSIBILITY_FOCUS"/>
-		<field name="ACTION_CLEAR_ACCESSIBILITY_FOCUS"/>
-		<field name="ACTION_CLEAR_FOCUS"/>
-		<field name="ACTION_CLEAR_SELECTION"/>
-		<field name="ACTION_CLICK"/>
-		<field name="ACTION_COLLAPSE"/>
-		<field name="ACTION_CONTEXT_CLICK" since="23"/>
-		<field name="ACTION_COPY"/>
-		<field name="ACTION_CUT"/>
-		<field name="ACTION_DISMISS"/>
-		<field name="ACTION_EXPAND"/>
-		<field name="ACTION_FOCUS"/>
-		<field name="ACTION_HIDE_TOOLTIP" since="28"/>
-		<field name="ACTION_LONG_CLICK"/>
-		<field name="ACTION_MOVE_WINDOW" since="26"/>
-		<field name="ACTION_NEXT_AT_MOVEMENT_GRANULARITY"/>
-		<field name="ACTION_NEXT_HTML_ELEMENT"/>
-		<field name="ACTION_PASTE"/>
-		<field name="ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY"/>
-		<field name="ACTION_PREVIOUS_HTML_ELEMENT"/>
-		<field name="ACTION_SCROLL_BACKWARD"/>
-		<field name="ACTION_SCROLL_DOWN" since="23"/>
-		<field name="ACTION_SCROLL_FORWARD"/>
-		<field name="ACTION_SCROLL_LEFT" since="23"/>
-		<field name="ACTION_SCROLL_RIGHT" since="23"/>
-		<field name="ACTION_SCROLL_TO_POSITION" since="23"/>
-		<field name="ACTION_SCROLL_UP" since="23"/>
-		<field name="ACTION_SELECT"/>
-		<field name="ACTION_SET_PROGRESS" since="24"/>
-		<field name="ACTION_SET_SELECTION"/>
-		<field name="ACTION_SET_TEXT"/>
-		<field name="ACTION_SHOW_ON_SCREEN" since="23"/>
-		<field name="ACTION_SHOW_TOOLTIP" since="28"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIZI)V" since="29"/>
-		<method name="getColumnCount()I"/>
-		<method name="getRowCount()I"/>
-		<method name="getSelectionMode()I" since="21"/>
-		<method name="isHierarchical()Z"/>
-		<method name="obtain(IIZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;"/>
-		<method name="obtain(IIZI)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;" since="21"/>
-		<field name="SELECTION_MODE_MULTIPLE" since="21"/>
-		<field name="SELECTION_MODE_NONE" since="21"/>
-		<field name="SELECTION_MODE_SINGLE" since="21"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIIIZZ)V" since="29"/>
-		<method name="getColumnIndex()I"/>
-		<method name="getColumnSpan()I"/>
-		<method name="getRowIndex()I"/>
-		<method name="getRowSpan()I"/>
-		<method name="isHeading()Z" deprecated="28"/>
-		<method name="isSelected()Z" since="21"/>
-		<method name="obtain(IIIIZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;"/>
-		<method name="obtain(IIIIZZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;" since="21"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityNodeInfo$RangeInfo" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IFFF)V" since="29"/>
-		<method name="getCurrent()F"/>
-		<method name="getMax()F"/>
-		<method name="getMin()F"/>
-		<method name="getType()I"/>
-		<method name="obtain(IFFF)Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;"/>
-		<field name="RANGE_TYPE_FLOAT"/>
-		<field name="RANGE_TYPE_INT"/>
-		<field name="RANGE_TYPE_PERCENT"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityNodeProvider" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addExtraDataToAccessibilityNodeInfo(ILandroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26"/>
-		<method name="createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="findAccessibilityNodeInfosByText(Ljava/lang/String;I)Ljava/util/List;"/>
-		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="19"/>
-		<method name="performAction(IILandroid/os/Bundle;)Z"/>
-		<field name="HOST_VIEW_ID" since="21"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityRecord" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAddedCount()I"/>
-		<method name="getBeforeText()Ljava/lang/CharSequence;"/>
-		<method name="getClassName()Ljava/lang/CharSequence;"/>
-		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
-		<method name="getCurrentItemIndex()I"/>
-		<method name="getFromIndex()I"/>
-		<method name="getItemCount()I"/>
-		<method name="getMaxScrollX()I" since="15"/>
-		<method name="getMaxScrollY()I" since="15"/>
-		<method name="getParcelableData()Landroid/os/Parcelable;"/>
-		<method name="getRemovedCount()I"/>
-		<method name="getScrollDeltaX()I" since="28"/>
-		<method name="getScrollDeltaY()I" since="28"/>
-		<method name="getScrollX()I"/>
-		<method name="getScrollY()I"/>
-		<method name="getSource()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="getText()Ljava/util/List;"/>
-		<method name="getToIndex()I"/>
-		<method name="getWindowId()I"/>
-		<method name="isChecked()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isFullScreen()Z"/>
-		<method name="isPassword()Z"/>
-		<method name="isScrollable()Z"/>
-		<method name="obtain()Landroid/view/accessibility/AccessibilityRecord;"/>
-		<method name="obtain(Landroid/view/accessibility/AccessibilityRecord;)Landroid/view/accessibility/AccessibilityRecord;"/>
-		<method name="recycle()V"/>
-		<method name="setAddedCount(I)V"/>
-		<method name="setBeforeText(Ljava/lang/CharSequence;)V"/>
-		<method name="setChecked(Z)V"/>
-		<method name="setClassName(Ljava/lang/CharSequence;)V"/>
-		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
-		<method name="setCurrentItemIndex(I)V"/>
-		<method name="setEnabled(Z)V"/>
-		<method name="setFromIndex(I)V"/>
-		<method name="setFullScreen(Z)V"/>
-		<method name="setItemCount(I)V"/>
-		<method name="setMaxScrollX(I)V" since="15"/>
-		<method name="setMaxScrollY(I)V" since="15"/>
-		<method name="setParcelableData(Landroid/os/Parcelable;)V"/>
-		<method name="setPassword(Z)V"/>
-		<method name="setRemovedCount(I)V"/>
-		<method name="setScrollDeltaX(I)V" since="28"/>
-		<method name="setScrollDeltaY(I)V" since="28"/>
-		<method name="setScrollX(I)V"/>
-		<method name="setScrollY(I)V"/>
-		<method name="setScrollable(Z)V"/>
-		<method name="setSource(Landroid/view/View;)V"/>
-		<method name="setSource(Landroid/view/View;I)V" since="16"/>
-		<method name="setToIndex(I)V"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityRequestPreparer" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/View;I)V"/>
-		<method name="getView()Landroid/view/View;"/>
-		<method name="onPrepareExtraData(ILjava/lang/String;Landroid/os/Bundle;Landroid/os/Message;)V"/>
-		<field name="REQUEST_TYPE_EXTRA_DATA"/>
-	</class>
-	<class name="android/view/accessibility/AccessibilityWindowInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAnchor()Landroid/view/accessibility/AccessibilityNodeInfo;" since="24"/>
-		<method name="getBoundsInScreen(Landroid/graphics/Rect;)V"/>
-		<method name="getChild(I)Landroid/view/accessibility/AccessibilityWindowInfo;"/>
-		<method name="getChildCount()I"/>
-		<method name="getId()I"/>
-		<method name="getLayer()I"/>
-		<method name="getParent()Landroid/view/accessibility/AccessibilityWindowInfo;"/>
-		<method name="getRoot()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;" since="24"/>
-		<method name="getType()I"/>
-		<method name="isAccessibilityFocused()Z"/>
-		<method name="isActive()Z"/>
-		<method name="isFocused()Z"/>
-		<method name="isInPictureInPictureMode()Z" since="26"/>
-		<method name="obtain()Landroid/view/accessibility/AccessibilityWindowInfo;"/>
-		<method name="obtain(Landroid/view/accessibility/AccessibilityWindowInfo;)Landroid/view/accessibility/AccessibilityWindowInfo;"/>
-		<method name="recycle()V"/>
-		<field name="CREATOR"/>
-		<field name="TYPE_ACCESSIBILITY_OVERLAY" since="22"/>
-		<field name="TYPE_APPLICATION"/>
-		<field name="TYPE_INPUT_METHOD"/>
-		<field name="TYPE_SPLIT_SCREEN_DIVIDER" since="24"/>
-		<field name="TYPE_SYSTEM"/>
-	</class>
-	<class name="android/view/accessibility/CaptioningManager" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="addCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V"/>
-		<method name="getFontScale()F"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getUserStyle()Landroid/view/accessibility/CaptioningManager$CaptionStyle;"/>
-		<method name="isEnabled()Z"/>
-		<method name="removeCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V"/>
-	</class>
-	<class name="android/view/accessibility/CaptioningManager$CaptionStyle" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIIIILjava/lang/String;)V" since="29"/>
-		<method name="getTypeface()Landroid/graphics/Typeface;"/>
-		<method name="hasBackgroundColor()Z" since="21"/>
-		<method name="hasEdgeColor()Z" since="21"/>
-		<method name="hasEdgeType()Z" since="21"/>
-		<method name="hasForegroundColor()Z" since="21"/>
-		<method name="hasWindowColor()Z" since="21"/>
-		<field name="EDGE_TYPE_DEPRESSED" since="21"/>
-		<field name="EDGE_TYPE_DROP_SHADOW"/>
-		<field name="EDGE_TYPE_NONE"/>
-		<field name="EDGE_TYPE_OUTLINE"/>
-		<field name="EDGE_TYPE_RAISED" since="21"/>
-		<field name="EDGE_TYPE_UNSPECIFIED" since="21"/>
-		<field name="backgroundColor"/>
-		<field name="edgeColor"/>
-		<field name="edgeType"/>
-		<field name="foregroundColor"/>
-		<field name="windowColor" since="21"/>
-	</class>
-	<class name="android/view/accessibility/CaptioningManager$CaptioningChangeListener" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onEnabledChanged(Z)V"/>
-		<method name="onFontScaleChanged(F)V"/>
-		<method name="onLocaleChanged(Ljava/util/Locale;)V"/>
-		<method name="onUserStyleChanged(Landroid/view/accessibility/CaptioningManager$CaptionStyle;)V"/>
-	</class>
-	<class name="android/view/animation/AccelerateDecelerateInterpolator" since="1">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/AccelerateInterpolator" since="1">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/AlphaAnimation" since="1">
-		<extends name="android/view/animation/Animation"/>
-		<method name="&lt;init>(FF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/Animation" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable" since="3"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="applyTransformation(FLandroid/view/animation/Transformation;)V"/>
-		<method name="cancel()V" since="8"/>
-		<method name="clone()Landroid/view/animation/Animation;" since="3"/>
-		<method name="computeDurationHint()J" since="3"/>
-		<method name="ensureInterpolator()V"/>
-		<method name="getBackgroundColor()I" since="12"/>
-		<method name="getDetachWallpaper()Z" since="5"/>
-		<method name="getDuration()J"/>
-		<method name="getFillAfter()Z"/>
-		<method name="getFillBefore()Z"/>
-		<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
-		<method name="getRepeatCount()I"/>
-		<method name="getRepeatMode()I"/>
-		<method name="getScaleFactor()F" since="11"/>
-		<method name="getStartOffset()J"/>
-		<method name="getStartTime()J"/>
-		<method name="getTransformation(JLandroid/view/animation/Transformation;)Z"/>
-		<method name="getTransformation(JLandroid/view/animation/Transformation;F)Z" since="11"/>
-		<method name="getZAdjustment()I"/>
-		<method name="hasEnded()Z"/>
-		<method name="hasStarted()Z"/>
-		<method name="initialize(IIII)V"/>
-		<method name="isFillEnabled()Z" since="3"/>
-		<method name="isInitialized()Z"/>
-		<method name="reset()V"/>
-		<method name="resolveSize(IFII)F"/>
-		<method name="restrictDuration(J)V"/>
-		<method name="scaleCurrentDuration(F)V"/>
-		<method name="setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V"/>
-		<method name="setBackgroundColor(I)V" since="12"/>
-		<method name="setDetachWallpaper(Z)V" since="5"/>
-		<method name="setDuration(J)V"/>
-		<method name="setFillAfter(Z)V"/>
-		<method name="setFillBefore(Z)V"/>
-		<method name="setFillEnabled(Z)V" since="3"/>
-		<method name="setInterpolator(Landroid/content/Context;I)V"/>
-		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V"/>
-		<method name="setRepeatCount(I)V"/>
-		<method name="setRepeatMode(I)V"/>
-		<method name="setStartOffset(J)V"/>
-		<method name="setStartTime(J)V"/>
-		<method name="setZAdjustment(I)V"/>
-		<method name="start()V"/>
-		<method name="startNow()V"/>
-		<method name="willChangeBounds()Z"/>
-		<method name="willChangeTransformationMatrix()Z"/>
-		<field name="ABSOLUTE"/>
-		<field name="INFINITE"/>
-		<field name="RELATIVE_TO_PARENT"/>
-		<field name="RELATIVE_TO_SELF"/>
-		<field name="RESTART"/>
-		<field name="REVERSE"/>
-		<field name="START_ON_FIRST_FRAME"/>
-		<field name="ZORDER_BOTTOM"/>
-		<field name="ZORDER_NORMAL"/>
-		<field name="ZORDER_TOP"/>
-	</class>
-	<class name="android/view/animation/Animation$AnimationListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onAnimationEnd(Landroid/view/animation/Animation;)V"/>
-		<method name="onAnimationRepeat(Landroid/view/animation/Animation;)V"/>
-		<method name="onAnimationStart(Landroid/view/animation/Animation;)V"/>
-	</class>
-	<class name="android/view/animation/Animation$Description" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="type"/>
-		<field name="value"/>
-	</class>
-	<class name="android/view/animation/AnimationSet" since="1">
-		<extends name="android/view/animation/Animation"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="addAnimation(Landroid/view/animation/Animation;)V"/>
-		<method name="clone()Landroid/view/animation/AnimationSet;" since="3"/>
-		<method name="getAnimations()Ljava/util/List;"/>
-	</class>
-	<class name="android/view/animation/AnimationUtils" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="currentAnimationTimeMillis()J"/>
-		<method name="loadAnimation(Landroid/content/Context;I)Landroid/view/animation/Animation;"/>
-		<method name="loadInterpolator(Landroid/content/Context;I)Landroid/view/animation/Interpolator;"/>
-		<method name="loadLayoutAnimation(Landroid/content/Context;I)Landroid/view/animation/LayoutAnimationController;"/>
-		<method name="makeInAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;"/>
-		<method name="makeInChildBottomAnimation(Landroid/content/Context;)Landroid/view/animation/Animation;"/>
-		<method name="makeOutAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;"/>
-	</class>
-	<class name="android/view/animation/AnticipateInterpolator" since="4">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/AnticipateOvershootInterpolator" since="4">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(FF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/BaseInterpolator" since="22">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/animation/Interpolator"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/view/animation/BounceInterpolator" since="4">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/CycleInterpolator" since="1">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/DecelerateInterpolator" since="1">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/GridLayoutAnimationController" since="1">
-		<extends name="android/view/animation/LayoutAnimationController"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/animation/Animation;)V"/>
-		<method name="&lt;init>(Landroid/view/animation/Animation;FF)V"/>
-		<method name="getColumnDelay()F"/>
-		<method name="getDirection()I"/>
-		<method name="getDirectionPriority()I"/>
-		<method name="getRowDelay()F"/>
-		<method name="setColumnDelay(F)V"/>
-		<method name="setDirection(I)V"/>
-		<method name="setDirectionPriority(I)V"/>
-		<method name="setRowDelay(F)V"/>
-		<field name="DIRECTION_BOTTOM_TO_TOP"/>
-		<field name="DIRECTION_HORIZONTAL_MASK"/>
-		<field name="DIRECTION_LEFT_TO_RIGHT"/>
-		<field name="DIRECTION_RIGHT_TO_LEFT"/>
-		<field name="DIRECTION_TOP_TO_BOTTOM"/>
-		<field name="DIRECTION_VERTICAL_MASK"/>
-		<field name="PRIORITY_COLUMN"/>
-		<field name="PRIORITY_NONE"/>
-		<field name="PRIORITY_ROW"/>
-	</class>
-	<class name="android/view/animation/GridLayoutAnimationController$AnimationParameters" since="1">
-		<extends name="android/view/animation/LayoutAnimationController$AnimationParameters"/>
-		<method name="&lt;init>()V"/>
-		<field name="column"/>
-		<field name="columnsCount"/>
-		<field name="row"/>
-		<field name="rowsCount"/>
-	</class>
-	<class name="android/view/animation/Interpolator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/animation/TimeInterpolator" since="11"/>
-		<method name="getInterpolation(F)F" removed="11"/>
-	</class>
-	<class name="android/view/animation/LayoutAnimationController" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/animation/Animation;)V"/>
-		<method name="&lt;init>(Landroid/view/animation/Animation;F)V"/>
-		<method name="getAnimation()Landroid/view/animation/Animation;"/>
-		<method name="getAnimationForView(Landroid/view/View;)Landroid/view/animation/Animation;"/>
-		<method name="getDelay()F"/>
-		<method name="getDelayForView(Landroid/view/View;)J"/>
-		<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
-		<method name="getOrder()I"/>
-		<method name="getTransformedIndex(Landroid/view/animation/LayoutAnimationController$AnimationParameters;)I"/>
-		<method name="isDone()Z"/>
-		<method name="setAnimation(Landroid/content/Context;I)V"/>
-		<method name="setAnimation(Landroid/view/animation/Animation;)V"/>
-		<method name="setDelay(F)V"/>
-		<method name="setInterpolator(Landroid/content/Context;I)V"/>
-		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V"/>
-		<method name="setOrder(I)V"/>
-		<method name="start()V"/>
-		<method name="willOverlap()Z"/>
-		<field name="ORDER_NORMAL"/>
-		<field name="ORDER_RANDOM"/>
-		<field name="ORDER_REVERSE"/>
-		<field name="mAnimation"/>
-		<field name="mInterpolator"/>
-		<field name="mRandomizer"/>
-	</class>
-	<class name="android/view/animation/LayoutAnimationController$AnimationParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="count"/>
-		<field name="index"/>
-	</class>
-	<class name="android/view/animation/LinearInterpolator" since="1">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/OvershootInterpolator" since="4">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/PathInterpolator" since="21">
-		<extends name="android/view/animation/BaseInterpolator" since="22"/>
-		<extends name="java/lang/Object" removed="22"/>
-		<implements name="android/view/animation/Interpolator" removed="22"/>
-		<method name="&lt;init>(FF)V"/>
-		<method name="&lt;init>(FFFF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/graphics/Path;)V"/>
-	</class>
-	<class name="android/view/animation/RotateAnimation" since="1">
-		<extends name="android/view/animation/Animation"/>
-		<method name="&lt;init>(FF)V"/>
-		<method name="&lt;init>(FFFF)V"/>
-		<method name="&lt;init>(FFIFIF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/ScaleAnimation" since="1">
-		<extends name="android/view/animation/Animation"/>
-		<method name="&lt;init>(FFFF)V"/>
-		<method name="&lt;init>(FFFFFF)V"/>
-		<method name="&lt;init>(FFFFIFIF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/animation/Transformation" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clear()V"/>
-		<method name="compose(Landroid/view/animation/Transformation;)V"/>
-		<method name="getAlpha()F"/>
-		<method name="getMatrix()Landroid/graphics/Matrix;"/>
-		<method name="getTransformationType()I"/>
-		<method name="set(Landroid/view/animation/Transformation;)V"/>
-		<method name="setAlpha(F)V"/>
-		<method name="setTransformationType(I)V"/>
-		<method name="toShortString()Ljava/lang/String;" since="3"/>
-		<field name="TYPE_ALPHA"/>
-		<field name="TYPE_BOTH"/>
-		<field name="TYPE_IDENTITY"/>
-		<field name="TYPE_MATRIX"/>
-		<field name="mAlpha"/>
-		<field name="mMatrix"/>
-		<field name="mTransformationType"/>
-	</class>
-	<class name="android/view/animation/TranslateAnimation" since="1">
-		<extends name="android/view/animation/Animation"/>
-		<method name="&lt;init>(FFFF)V"/>
-		<method name="&lt;init>(IFIFIFIF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/view/autofill/AutofillId" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/autofill/AutofillManager" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="commit()V"/>
-		<method name="disableAutofillServices()V"/>
-		<method name="getAutofillServiceComponentName()Landroid/content/ComponentName;" since="28"/>
-		<method name="getAvailableFieldClassificationAlgorithms()Ljava/util/List;" since="28"/>
-		<method name="getDefaultFieldClassificationAlgorithm()Ljava/lang/String;" since="28"/>
-		<method name="getNextAutofillId()Landroid/view/autofill/AutofillId;" since="28"/>
-		<method name="getUserData()Landroid/service/autofill/UserData;" since="28"/>
-		<method name="getUserDataId()Ljava/lang/String;" since="28"/>
-		<method name="hasEnabledAutofillServices()Z"/>
-		<method name="isAutofillSupported()Z"/>
-		<method name="isEnabled()Z"/>
-		<method name="isFieldClassificationEnabled()Z" since="28"/>
-		<method name="notifyValueChanged(Landroid/view/View;)V"/>
-		<method name="notifyValueChanged(Landroid/view/View;ILandroid/view/autofill/AutofillValue;)V"/>
-		<method name="notifyViewClicked(Landroid/view/View;)V" since="28"/>
-		<method name="notifyViewClicked(Landroid/view/View;I)V" since="28"/>
-		<method name="notifyViewEntered(Landroid/view/View;)V"/>
-		<method name="notifyViewEntered(Landroid/view/View;ILandroid/graphics/Rect;)V"/>
-		<method name="notifyViewExited(Landroid/view/View;)V"/>
-		<method name="notifyViewExited(Landroid/view/View;I)V"/>
-		<method name="notifyViewVisibilityChanged(Landroid/view/View;IZ)V" since="27"/>
-		<method name="notifyViewVisibilityChanged(Landroid/view/View;Z)V" since="27"/>
-		<method name="registerCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V"/>
-		<method name="requestAutofill(Landroid/view/View;)V"/>
-		<method name="requestAutofill(Landroid/view/View;ILandroid/graphics/Rect;)V"/>
-		<method name="setUserData(Landroid/service/autofill/UserData;)V" since="28"/>
-		<method name="unregisterCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V"/>
-		<field name="EXTRA_ASSIST_STRUCTURE"/>
-		<field name="EXTRA_AUTHENTICATION_RESULT"/>
-		<field name="EXTRA_CLIENT_STATE"/>
-	</class>
-	<class name="android/view/autofill/AutofillManager$AutofillCallback" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAutofillEvent(Landroid/view/View;I)V"/>
-		<method name="onAutofillEvent(Landroid/view/View;II)V"/>
-		<field name="EVENT_INPUT_HIDDEN"/>
-		<field name="EVENT_INPUT_SHOWN"/>
-		<field name="EVENT_INPUT_UNAVAILABLE"/>
-	</class>
-	<class name="android/view/autofill/AutofillValue" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="forDate(J)Landroid/view/autofill/AutofillValue;"/>
-		<method name="forList(I)Landroid/view/autofill/AutofillValue;"/>
-		<method name="forText(Ljava/lang/CharSequence;)Landroid/view/autofill/AutofillValue;"/>
-		<method name="forToggle(Z)Landroid/view/autofill/AutofillValue;"/>
-		<method name="getDateValue()J"/>
-		<method name="getListValue()I"/>
-		<method name="getTextValue()Ljava/lang/CharSequence;"/>
-		<method name="getToggleValue()Z"/>
-		<method name="isDate()Z"/>
-		<method name="isList()Z"/>
-		<method name="isText()Z"/>
-		<method name="isToggle()Z"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/inputmethod/BaseInputConnection" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/inputmethod/InputConnection"/>
-		<method name="&lt;init>(Landroid/view/View;Z)V"/>
-		<method name="getComposingSpanEnd(Landroid/text/Spannable;)I"/>
-		<method name="getComposingSpanStart(Landroid/text/Spannable;)I"/>
-		<method name="getEditable()Landroid/text/Editable;"/>
-		<method name="removeComposingSpans(Landroid/text/Spannable;)V"/>
-		<method name="setComposingSpans(Landroid/text/Spannable;)V"/>
-	</class>
-	<class name="android/view/inputmethod/CompletionInfo" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(JILjava/lang/CharSequence;)V"/>
-		<method name="&lt;init>(JILjava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
-		<method name="getId()J"/>
-		<method name="getLabel()Ljava/lang/CharSequence;"/>
-		<method name="getPosition()I"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/inputmethod/CorrectionInfo" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ILjava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
-		<method name="getNewText()Ljava/lang/CharSequence;"/>
-		<method name="getOffset()I"/>
-		<method name="getOldText()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/inputmethod/CursorAnchorInfo" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="getCharacterBounds(I)Landroid/graphics/RectF;"/>
-		<method name="getCharacterBoundsFlags(I)I"/>
-		<method name="getComposingText()Ljava/lang/CharSequence;"/>
-		<method name="getComposingTextStart()I"/>
-		<method name="getInsertionMarkerBaseline()F"/>
-		<method name="getInsertionMarkerBottom()F"/>
-		<method name="getInsertionMarkerFlags()I"/>
-		<method name="getInsertionMarkerHorizontal()F"/>
-		<method name="getInsertionMarkerTop()F"/>
-		<method name="getMatrix()Landroid/graphics/Matrix;"/>
-		<method name="getSelectionEnd()I"/>
-		<method name="getSelectionStart()I"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_HAS_INVISIBLE_REGION"/>
-		<field name="FLAG_HAS_VISIBLE_REGION"/>
-		<field name="FLAG_IS_RTL"/>
-	</class>
-	<class name="android/view/inputmethod/CursorAnchorInfo$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addCharacterBounds(IFFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
-		<method name="build()Landroid/view/inputmethod/CursorAnchorInfo;"/>
-		<method name="reset()V"/>
-		<method name="setComposingText(ILjava/lang/CharSequence;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
-		<method name="setInsertionMarkerLocation(FFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
-		<method name="setMatrix(Landroid/graphics/Matrix;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
-		<method name="setSelectionRange(II)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
-	</class>
-	<class name="android/view/inputmethod/EditorInfo" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/text/InputType"/>
-		<method name="&lt;init>()V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="makeCompatible(I)V" since="11"/>
-		<field name="CREATOR"/>
-		<field name="IME_ACTION_DONE"/>
-		<field name="IME_ACTION_GO"/>
-		<field name="IME_ACTION_NEXT"/>
-		<field name="IME_ACTION_NONE"/>
-		<field name="IME_ACTION_PREVIOUS" since="11"/>
-		<field name="IME_ACTION_SEARCH"/>
-		<field name="IME_ACTION_SEND"/>
-		<field name="IME_ACTION_UNSPECIFIED"/>
-		<field name="IME_FLAG_FORCE_ASCII" since="16"/>
-		<field name="IME_FLAG_NAVIGATE_NEXT" since="11"/>
-		<field name="IME_FLAG_NAVIGATE_PREVIOUS" since="11"/>
-		<field name="IME_FLAG_NO_ACCESSORY_ACTION"/>
-		<field name="IME_FLAG_NO_ENTER_ACTION"/>
-		<field name="IME_FLAG_NO_EXTRACT_UI"/>
-		<field name="IME_FLAG_NO_FULLSCREEN" since="11"/>
-		<field name="IME_FLAG_NO_PERSONALIZED_LEARNING" since="26"/>
-		<field name="IME_MASK_ACTION"/>
-		<field name="IME_NULL"/>
-		<field name="actionId"/>
-		<field name="actionLabel"/>
-		<field name="contentMimeTypes" since="25"/>
-		<field name="extras"/>
-		<field name="fieldId"/>
-		<field name="fieldName"/>
-		<field name="hintLocales" since="24"/>
-		<field name="hintText"/>
-		<field name="imeOptions"/>
-		<field name="initialCapsMode"/>
-		<field name="initialSelEnd"/>
-		<field name="initialSelStart"/>
-		<field name="inputType"/>
-		<field name="label"/>
-		<field name="packageName"/>
-		<field name="privateImeOptions"/>
-	</class>
-	<class name="android/view/inputmethod/ExtractedText" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-		<field name="FLAG_SELECTING"/>
-		<field name="FLAG_SINGLE_LINE"/>
-		<field name="flags"/>
-		<field name="hint" since="28"/>
-		<field name="partialEndOffset"/>
-		<field name="partialStartOffset"/>
-		<field name="selectionEnd"/>
-		<field name="selectionStart"/>
-		<field name="startOffset"/>
-		<field name="text"/>
-	</class>
-	<class name="android/view/inputmethod/ExtractedTextRequest" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-		<field name="flags"/>
-		<field name="hintMaxChars"/>
-		<field name="hintMaxLines"/>
-		<field name="token"/>
-	</class>
-	<class name="android/view/inputmethod/InputBinding" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/view/inputmethod/InputConnection;Landroid/os/IBinder;II)V"/>
-		<method name="&lt;init>(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputBinding;)V"/>
-		<method name="getConnection()Landroid/view/inputmethod/InputConnection;"/>
-		<method name="getConnectionToken()Landroid/os/IBinder;"/>
-		<method name="getPid()I"/>
-		<method name="getUid()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/inputmethod/InputConnection" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="beginBatchEdit()Z"/>
-		<method name="clearMetaKeyStates(I)Z"/>
-		<method name="closeConnection()V" since="24"/>
-		<method name="commitCompletion(Landroid/view/inputmethod/CompletionInfo;)Z"/>
-		<method name="commitContent(Landroid/view/inputmethod/InputContentInfo;ILandroid/os/Bundle;)Z" since="25"/>
-		<method name="commitCorrection(Landroid/view/inputmethod/CorrectionInfo;)Z" since="11"/>
-		<method name="commitText(Ljava/lang/CharSequence;I)Z"/>
-		<method name="deleteSurroundingText(II)Z"/>
-		<method name="deleteSurroundingTextInCodePoints(II)Z" since="24"/>
-		<method name="endBatchEdit()Z"/>
-		<method name="finishComposingText()Z"/>
-		<method name="getCursorCapsMode(I)I"/>
-		<method name="getExtractedText(Landroid/view/inputmethod/ExtractedTextRequest;I)Landroid/view/inputmethod/ExtractedText;"/>
-		<method name="getHandler()Landroid/os/Handler;" since="24"/>
-		<method name="getSelectedText(I)Ljava/lang/CharSequence;" since="9"/>
-		<method name="getTextAfterCursor(II)Ljava/lang/CharSequence;"/>
-		<method name="getTextBeforeCursor(II)Ljava/lang/CharSequence;"/>
-		<method name="performContextMenuAction(I)Z"/>
-		<method name="performEditorAction(I)Z"/>
-		<method name="performPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)Z"/>
-		<method name="reportFullscreenMode(Z)Z"/>
-		<method name="requestCursorUpdates(I)Z" since="21"/>
-		<method name="sendKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="setComposingRegion(II)Z" since="9"/>
-		<method name="setComposingText(Ljava/lang/CharSequence;I)Z"/>
-		<method name="setSelection(II)Z"/>
-		<field name="CURSOR_UPDATE_IMMEDIATE" since="21"/>
-		<field name="CURSOR_UPDATE_MONITOR" since="21"/>
-		<field name="GET_EXTRACTED_TEXT_MONITOR"/>
-		<field name="GET_TEXT_WITH_STYLES"/>
-		<field name="INPUT_CONTENT_GRANT_READ_URI_PERMISSION" since="25"/>
-	</class>
-	<class name="android/view/inputmethod/InputConnectionWrapper" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/inputmethod/InputConnection"/>
-		<method name="&lt;init>(Landroid/view/inputmethod/InputConnection;Z)V"/>
-		<method name="setTarget(Landroid/view/inputmethod/InputConnection;)V"/>
-	</class>
-	<class name="android/view/inputmethod/InputContentInfo" since="25">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/net/Uri;Landroid/content/ClipDescription;)V"/>
-		<method name="&lt;init>(Landroid/net/Uri;Landroid/content/ClipDescription;Landroid/net/Uri;)V"/>
-		<method name="getContentUri()Landroid/net/Uri;"/>
-		<method name="getDescription()Landroid/content/ClipDescription;"/>
-		<method name="getLinkUri()Landroid/net/Uri;"/>
-		<method name="releasePermission()V"/>
-		<method name="requestPermission()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethod" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="attachToken(Landroid/os/IBinder;)V"/>
-		<method name="bindInput(Landroid/view/inputmethod/InputBinding;)V"/>
-		<method name="changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V" since="11"/>
-		<method name="createSession(Landroid/view/inputmethod/InputMethod$SessionCallback;)V"/>
-		<method name="hideSoftInput(ILandroid/os/ResultReceiver;)V"/>
-		<method name="restartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V"/>
-		<method name="revokeSession(Landroid/view/inputmethod/InputMethodSession;)V"/>
-		<method name="setSessionEnabled(Landroid/view/inputmethod/InputMethodSession;Z)V"/>
-		<method name="showSoftInput(ILandroid/os/ResultReceiver;)V"/>
-		<method name="startInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V"/>
-		<method name="unbindInput()V"/>
-		<field name="SERVICE_INTERFACE"/>
-		<field name="SERVICE_META_DATA"/>
-		<field name="SHOW_EXPLICIT"/>
-		<field name="SHOW_FORCED"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethod$SessionCallback" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="sessionCreated(Landroid/view/inputmethod/InputMethodSession;)V"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethodInfo" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;)V"/>
-		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
-		<method name="getComponent()Landroid/content/ComponentName;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getIsDefaultResourceId()I"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
-		<method name="getServiceName()Ljava/lang/String;"/>
-		<method name="getSettingsActivity()Ljava/lang/String;"/>
-		<method name="getSubtypeAt(I)Landroid/view/inputmethod/InputMethodSubtype;" since="11"/>
-		<method name="getSubtypeCount()I" since="11"/>
-		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethodManager" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="dispatchKeyEventFromInputMethod(Landroid/view/View;Landroid/view/KeyEvent;)V" since="24"/>
-		<method name="displayCompletions(Landroid/view/View;[Landroid/view/inputmethod/CompletionInfo;)V"/>
-		<method name="getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;" since="11"/>
-		<method name="getEnabledInputMethodList()Ljava/util/List;"/>
-		<method name="getEnabledInputMethodSubtypeList(Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;" since="11"/>
-		<method name="getInputMethodList()Ljava/util/List;"/>
-		<method name="getLastInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;" since="14"/>
-		<method name="getShortcutInputMethodsAndSubtypes()Ljava/util/Map;" since="11"/>
-		<method name="hideSoftInputFromInputMethod(Landroid/os/IBinder;I)V" deprecated="28"/>
-		<method name="hideSoftInputFromWindow(Landroid/os/IBinder;I)Z"/>
-		<method name="hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z"/>
-		<method name="hideStatusIcon(Landroid/os/IBinder;)V" deprecated="28"/>
-		<method name="isAcceptingText()Z"/>
-		<method name="isActive()Z"/>
-		<method name="isActive(Landroid/view/View;)Z"/>
-		<method name="isFullscreenMode()Z"/>
-		<method name="isWatchingCursor(Landroid/view/View;)Z" deprecated="21"/>
-		<method name="restartInput(Landroid/view/View;)V"/>
-		<method name="sendAppPrivateCommand(Landroid/view/View;Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V" since="14"/>
-		<method name="setCurrentInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)Z" since="11"/>
-		<method name="setInputMethod(Landroid/os/IBinder;Ljava/lang/String;)V" deprecated="28"/>
-		<method name="setInputMethodAndSubtype(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V" since="11" deprecated="28"/>
-		<method name="shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z" since="19" deprecated="28"/>
-		<method name="showInputMethodAndSubtypeEnabler(Ljava/lang/String;)V" since="11"/>
-		<method name="showInputMethodPicker()V"/>
-		<method name="showSoftInput(Landroid/view/View;I)Z"/>
-		<method name="showSoftInput(Landroid/view/View;ILandroid/os/ResultReceiver;)Z"/>
-		<method name="showSoftInputFromInputMethod(Landroid/os/IBinder;I)V" deprecated="28"/>
-		<method name="showStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V" deprecated="28"/>
-		<method name="switchToLastInputMethod(Landroid/os/IBinder;)Z" since="11" deprecated="28"/>
-		<method name="switchToNextInputMethod(Landroid/os/IBinder;Z)Z" since="16" deprecated="28"/>
-		<method name="toggleSoftInput(II)V"/>
-		<method name="toggleSoftInputFromWindow(Landroid/os/IBinder;II)V"/>
-		<method name="updateCursor(Landroid/view/View;IIII)V" deprecated="21"/>
-		<method name="updateCursorAnchorInfo(Landroid/view/View;Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21"/>
-		<method name="updateExtractedText(Landroid/view/View;ILandroid/view/inputmethod/ExtractedText;)V"/>
-		<method name="updateSelection(Landroid/view/View;IIII)V"/>
-		<method name="viewClicked(Landroid/view/View;)V" since="14"/>
-		<field name="HIDE_IMPLICIT_ONLY"/>
-		<field name="HIDE_NOT_ALWAYS"/>
-		<field name="RESULT_HIDDEN"/>
-		<field name="RESULT_SHOWN"/>
-		<field name="RESULT_UNCHANGED_HIDDEN"/>
-		<field name="RESULT_UNCHANGED_SHOWN"/>
-		<field name="SHOW_FORCED"/>
-		<field name="SHOW_IMPLICIT"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethodSession" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="appPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
-		<method name="dispatchGenericMotionEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V" since="17"/>
-		<method name="dispatchKeyEvent(ILandroid/view/KeyEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V"/>
-		<method name="dispatchTrackballEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V"/>
-		<method name="displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V"/>
-		<method name="finishInput()V"/>
-		<method name="toggleSoftInput(II)V"/>
-		<method name="updateCursor(Landroid/graphics/Rect;)V"/>
-		<method name="updateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21"/>
-		<method name="updateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V"/>
-		<method name="updateSelection(IIIIII)V"/>
-		<method name="viewClicked(Z)V" since="14"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethodSession$EventCallback" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="finishedEvent(IZ)V"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethodSubtype" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="14"/>
-		<method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)V" since="14" deprecated="19"/>
-		<method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZI)V" since="17" deprecated="19"/>
-		<method name="containsExtraValueKey(Ljava/lang/String;)Z" since="12"/>
-		<method name="getDisplayName(Landroid/content/Context;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;" since="14"/>
-		<method name="getExtraValue()Ljava/lang/String;"/>
-		<method name="getExtraValueOf(Ljava/lang/String;)Ljava/lang/String;" since="12"/>
-		<method name="getIconResId()I"/>
-		<method name="getLanguageTag()Ljava/lang/String;" since="24"/>
-		<method name="getLocale()Ljava/lang/String;" deprecated="24"/>
-		<method name="getMode()Ljava/lang/String;"/>
-		<method name="getNameResId()I"/>
-		<method name="isAsciiCapable()Z" since="19"/>
-		<method name="isAuxiliary()Z" since="14"/>
-		<method name="overridesImplicitlyEnabledSubtype()Z" since="14"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Landroid/view/inputmethod/InputMethodSubtype;"/>
-		<method name="setIsAsciiCapable(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setIsAuxiliary(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setLanguageTag(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" since="24"/>
-		<method name="setOverridesImplicitlyEnabledSubtype(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setSubtypeExtraValue(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setSubtypeIconResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setSubtypeId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setSubtypeLocale(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setSubtypeMode(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-		<method name="setSubtypeNameResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
-	</class>
-	<class name="android/view/textclassifier/SelectionEvent" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="createSelectionActionEvent(III)Landroid/view/textclassifier/SelectionEvent;"/>
-		<method name="createSelectionActionEvent(IIILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/SelectionEvent;"/>
-		<method name="createSelectionModifiedEvent(II)Landroid/view/textclassifier/SelectionEvent;"/>
-		<method name="createSelectionModifiedEvent(IILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/SelectionEvent;"/>
-		<method name="createSelectionModifiedEvent(IILandroid/view/textclassifier/TextSelection;)Landroid/view/textclassifier/SelectionEvent;"/>
-		<method name="createSelectionStartedEvent(II)Landroid/view/textclassifier/SelectionEvent;"/>
-		<method name="getDurationSincePreviousEvent()J"/>
-		<method name="getDurationSinceSessionStart()J"/>
-		<method name="getEnd()I"/>
-		<method name="getEntityType()Ljava/lang/String;"/>
-		<method name="getEventIndex()I"/>
-		<method name="getEventTime()J"/>
-		<method name="getEventType()I"/>
-		<method name="getInvocationMethod()I"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getResultId()Ljava/lang/String;"/>
-		<method name="getSessionId()Landroid/view/textclassifier/TextClassificationSessionId;"/>
-		<method name="getSmartEnd()I"/>
-		<method name="getSmartStart()I"/>
-		<method name="getStart()I"/>
-		<method name="getWidgetType()Ljava/lang/String;"/>
-		<method name="getWidgetVersion()Ljava/lang/String;"/>
-		<method name="isTerminal(I)Z"/>
-		<field name="ACTION_ABANDON"/>
-		<field name="ACTION_COPY"/>
-		<field name="ACTION_CUT"/>
-		<field name="ACTION_DRAG"/>
-		<field name="ACTION_OTHER"/>
-		<field name="ACTION_OVERTYPE"/>
-		<field name="ACTION_PASTE"/>
-		<field name="ACTION_RESET"/>
-		<field name="ACTION_SELECT_ALL"/>
-		<field name="ACTION_SHARE"/>
-		<field name="ACTION_SMART_SHARE"/>
-		<field name="CREATOR"/>
-		<field name="EVENT_AUTO_SELECTION"/>
-		<field name="EVENT_SELECTION_MODIFIED"/>
-		<field name="EVENT_SELECTION_STARTED"/>
-		<field name="EVENT_SMART_SELECTION_MULTI"/>
-		<field name="EVENT_SMART_SELECTION_SINGLE"/>
-		<field name="INVOCATION_LINK"/>
-		<field name="INVOCATION_MANUAL"/>
-		<field name="INVOCATION_UNKNOWN"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassification" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="28"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getActions()Ljava/util/List;" since="28"/>
-		<method name="getConfidenceScore(Ljava/lang/String;)F"/>
-		<method name="getEntity(I)Ljava/lang/String;"/>
-		<method name="getEntityCount()I"/>
-		<method name="getIcon()Landroid/graphics/drawable/Drawable;" deprecated="28"/>
-		<method name="getId()Ljava/lang/String;" since="28"/>
-		<method name="getIntent()Landroid/content/Intent;" deprecated="28"/>
-		<method name="getLabel()Ljava/lang/CharSequence;" deprecated="28"/>
-		<method name="getOnClickListener()Landroid/view/View$OnClickListener;" deprecated="28"/>
-		<method name="getText()Ljava/lang/String;"/>
-		<field name="CREATOR" since="28"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassification$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/TextClassification$Builder;" since="28"/>
-		<method name="build()Landroid/view/textclassifier/TextClassification;"/>
-		<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextClassification$Builder;"/>
-		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
-		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" since="28"/>
-		<method name="setIntent(Landroid/content/Intent;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
-		<method name="setLabel(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
-		<method name="setOnClickListener(Landroid/view/View$OnClickListener;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
-		<method name="setText(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassification$Request" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
-		<method name="getEndIndex()I"/>
-		<method name="getReferenceTime()Ljava/time/ZonedDateTime;"/>
-		<method name="getStartIndex()I"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassification$Request$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
-		<method name="build()Landroid/view/textclassifier/TextClassification$Request;"/>
-		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification$Request$Builder;"/>
-		<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/TextClassification$Request$Builder;"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassificationContext" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getWidgetType()Ljava/lang/String;"/>
-		<method name="getWidgetVersion()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassificationContext$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="build()Landroid/view/textclassifier/TextClassificationContext;"/>
-		<method name="setWidgetVersion(Ljava/lang/String;)Landroid/view/textclassifier/TextClassificationContext$Builder;"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassificationManager" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/content/Context;)V" since="29"/>
-		<method name="createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;" since="28"/>
-		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;"/>
-		<method name="setTextClassificationSessionFactory(Landroid/view/textclassifier/TextClassificationSessionFactory;)V" since="28"/>
-		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassificationSessionFactory" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassificationSessionId" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassifier" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="classifyText(Landroid/view/textclassifier/TextClassification$Request;)Landroid/view/textclassifier/TextClassification;" since="28"/>
-		<method name="classifyText(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification;"/>
-		<method name="destroy()V" since="28"/>
-		<method name="generateLinks(Landroid/view/textclassifier/TextLinks$Request;)Landroid/view/textclassifier/TextLinks;" since="28"/>
-		<method name="getMaxGenerateLinksTextLength()I" since="28"/>
-		<method name="isDestroyed()Z" since="28"/>
-		<method name="onSelectionEvent(Landroid/view/textclassifier/SelectionEvent;)V" since="28"/>
-		<method name="suggestSelection(Landroid/view/textclassifier/TextSelection$Request;)Landroid/view/textclassifier/TextSelection;" since="28"/>
-		<method name="suggestSelection(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection;"/>
-		<field name="HINT_TEXT_IS_EDITABLE" since="28"/>
-		<field name="HINT_TEXT_IS_NOT_EDITABLE" since="28"/>
-		<field name="NO_OP"/>
-		<field name="TYPE_ADDRESS"/>
-		<field name="TYPE_DATE" since="28"/>
-		<field name="TYPE_DATE_TIME" since="28"/>
-		<field name="TYPE_EMAIL"/>
-		<field name="TYPE_FLIGHT_NUMBER" since="28"/>
-		<field name="TYPE_OTHER"/>
-		<field name="TYPE_PHONE"/>
-		<field name="TYPE_UNKNOWN" since="28"/>
-		<field name="TYPE_URL"/>
-		<field name="WIDGET_TYPE_CUSTOM_EDITTEXT" since="28"/>
-		<field name="WIDGET_TYPE_CUSTOM_TEXTVIEW" since="28"/>
-		<field name="WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW" since="28"/>
-		<field name="WIDGET_TYPE_EDITTEXT" since="28"/>
-		<field name="WIDGET_TYPE_EDIT_WEBVIEW" since="28"/>
-		<field name="WIDGET_TYPE_TEXTVIEW" since="28"/>
-		<field name="WIDGET_TYPE_UNKNOWN" since="28"/>
-		<field name="WIDGET_TYPE_UNSELECTABLE_TEXTVIEW" since="28"/>
-		<field name="WIDGET_TYPE_WEBVIEW" since="28"/>
-	</class>
-	<class name="android/view/textclassifier/TextClassifier$EntityConfig" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="create(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
-		<method name="createWithExplicitEntityList(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
-		<method name="createWithHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
-		<method name="getHints()Ljava/util/Collection;"/>
-		<method name="resolveEntityListModifications(Ljava/util/Collection;)Ljava/util/Collection;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textclassifier/TextLinks" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="apply(Landroid/text/Spannable;ILjava/util/function/Function;)I"/>
-		<method name="getLinks()Ljava/util/Collection;"/>
-		<field name="APPLY_STRATEGY_IGNORE"/>
-		<field name="APPLY_STRATEGY_REPLACE"/>
-		<field name="CREATOR"/>
-		<field name="STATUS_DIFFERENT_TEXT"/>
-		<field name="STATUS_LINKS_APPLIED"/>
-		<field name="STATUS_NO_LINKS_APPLIED"/>
-		<field name="STATUS_NO_LINKS_FOUND"/>
-	</class>
-	<class name="android/view/textclassifier/TextLinks$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="addLink(IILjava/util/Map;)Landroid/view/textclassifier/TextLinks$Builder;"/>
-		<method name="build()Landroid/view/textclassifier/TextLinks;"/>
-		<method name="clearTextLinks()Landroid/view/textclassifier/TextLinks$Builder;"/>
-	</class>
-	<class name="android/view/textclassifier/TextLinks$Request" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
-		<method name="getEntityConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textclassifier/TextLinks$Request$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="build()Landroid/view/textclassifier/TextLinks$Request;"/>
-		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextLinks$Request$Builder;"/>
-		<method name="setEntityConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/TextLinks$Request$Builder;"/>
-	</class>
-	<class name="android/view/textclassifier/TextLinks$TextLink" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getConfidenceScore(Ljava/lang/String;)F"/>
-		<method name="getEnd()I"/>
-		<method name="getEntity(I)Ljava/lang/String;"/>
-		<method name="getEntityCount()I"/>
-		<method name="getStart()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textclassifier/TextLinks$TextLinkSpan" since="28">
-		<extends name="android/text/style/ClickableSpan"/>
-		<method name="&lt;init>(Landroid/view/textclassifier/TextLinks$TextLink;)V"/>
-		<method name="getTextLink()Landroid/view/textclassifier/TextLinks$TextLink;"/>
-	</class>
-	<class name="android/view/textclassifier/TextSelection" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable" since="28"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getConfidenceScore(Ljava/lang/String;)F"/>
-		<method name="getEntity(I)Ljava/lang/String;"/>
-		<method name="getEntityCount()I"/>
-		<method name="getId()Ljava/lang/String;" since="28"/>
-		<method name="getSelectionEndIndex()I"/>
-		<method name="getSelectionStartIndex()I"/>
-		<field name="CREATOR" since="28"/>
-	</class>
-	<class name="android/view/textclassifier/TextSelection$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="build()Landroid/view/textclassifier/TextSelection;"/>
-		<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextSelection$Builder;"/>
-		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextSelection$Builder;" since="28"/>
-	</class>
-	<class name="android/view/textclassifier/TextSelection$Request" since="28">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
-		<method name="getEndIndex()I"/>
-		<method name="getStartIndex()I"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textclassifier/TextSelection$Request$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
-		<method name="build()Landroid/view/textclassifier/TextSelection$Request;"/>
-		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection$Request$Builder;"/>
-	</class>
-	<class name="android/view/textservice/SentenceSuggestionsInfo" since="16">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>([Landroid/view/textservice/SuggestionsInfo;[I[I)V"/>
-		<method name="getLengthAt(I)I"/>
-		<method name="getOffsetAt(I)I"/>
-		<method name="getSuggestionsCount()I"/>
-		<method name="getSuggestionsInfoAt(I)Landroid/view/textservice/SuggestionsInfo;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textservice/SpellCheckerInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V" since="29"/>
-		<method name="getComponent()Landroid/content/ComponentName;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getPackageName()Ljava/lang/String;"/>
-		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
-		<method name="getSettingsActivity()Ljava/lang/String;"/>
-		<method name="getSubtypeAt(I)Landroid/view/textservice/SpellCheckerSubtype;"/>
-		<method name="getSubtypeCount()I"/>
-		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textservice/SpellCheckerSession" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V" since="15"/>
-		<method name="close()V"/>
-		<method name="getSentenceSuggestions([Landroid/view/textservice/TextInfo;I)V" since="16"/>
-		<method name="getSpellChecker()Landroid/view/textservice/SpellCheckerInfo;"/>
-		<method name="getSuggestions(Landroid/view/textservice/TextInfo;I)V" deprecated="16"/>
-		<method name="getSuggestions([Landroid/view/textservice/TextInfo;IZ)V" deprecated="16"/>
-		<method name="isSessionDisconnected()Z"/>
-		<field name="SERVICE_META_DATA"/>
-	</class>
-	<class name="android/view/textservice/SpellCheckerSession$SpellCheckerSessionListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onGetSentenceSuggestions([Landroid/view/textservice/SentenceSuggestionsInfo;)V" since="16"/>
-		<method name="onGetSuggestions([Landroid/view/textservice/SuggestionsInfo;)V"/>
-	</class>
-	<class name="android/view/textservice/SpellCheckerSubtype" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V" deprecated="24"/>
-		<method name="containsExtraValueKey(Ljava/lang/String;)Z" since="16"/>
-		<method name="getDisplayName(Landroid/content/Context;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;"/>
-		<method name="getExtraValue()Ljava/lang/String;"/>
-		<method name="getExtraValueOf(Ljava/lang/String;)Ljava/lang/String;" since="16"/>
-		<method name="getLanguageTag()Ljava/lang/String;" since="24"/>
-		<method name="getLocale()Ljava/lang/String;" deprecated="24"/>
-		<method name="getNameResId()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textservice/SuggestionsInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(I[Ljava/lang/String;)V"/>
-		<method name="&lt;init>(I[Ljava/lang/String;II)V"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="getCookie()I"/>
-		<method name="getSequence()I"/>
-		<method name="getSuggestionAt(I)Ljava/lang/String;"/>
-		<method name="getSuggestionsAttributes()I"/>
-		<method name="getSuggestionsCount()I"/>
-		<method name="setCookieAndSequence(II)V"/>
-		<field name="CREATOR"/>
-		<field name="RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS" since="15"/>
-		<field name="RESULT_ATTR_IN_THE_DICTIONARY"/>
-		<field name="RESULT_ATTR_LOOKS_LIKE_TYPO"/>
-	</class>
-	<class name="android/view/textservice/TextInfo" since="14">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;IIII)V" since="21"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;II)V"/>
-		<method name="getCharSequence()Ljava/lang/CharSequence;" since="21"/>
-		<method name="getCookie()I"/>
-		<method name="getSequence()I"/>
-		<method name="getText()Ljava/lang/String;"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/view/textservice/TextServicesManager" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="newSpellCheckerSession(Landroid/os/Bundle;Ljava/util/Locale;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;Z)Landroid/view/textservice/SpellCheckerSession;"/>
-	</class>
-	<class name="android/webkit/CacheManager" since="1" deprecated="11" removed="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cacheDisabled()Z" deprecated="16"/>
-		<method name="endCacheTransaction()Z" deprecated="16"/>
-		<method name="getCacheFile(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;" deprecated="16"/>
-		<method name="getCacheFileBaseDir()Ljava/io/File;" deprecated="16"/>
-		<method name="saveCacheFile(Ljava/lang/String;Landroid/webkit/CacheManager$CacheResult;)V" deprecated="16"/>
-		<method name="startCacheTransaction()Z" deprecated="16"/>
-	</class>
-	<class name="android/webkit/CacheManager$CacheResult" since="1" deprecated="11" removed="17">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentDisposition()Ljava/lang/String;" since="7"/>
-		<method name="getContentLength()J"/>
-		<method name="getETag()Ljava/lang/String;"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-		<method name="getExpires()J"/>
-		<method name="getExpiresString()Ljava/lang/String;" since="7"/>
-		<method name="getHttpStatusCode()I"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getLastModified()Ljava/lang/String;"/>
-		<method name="getLocalPath()Ljava/lang/String;"/>
-		<method name="getLocation()Ljava/lang/String;"/>
-		<method name="getMimeType()Ljava/lang/String;"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="setEncoding(Ljava/lang/String;)V"/>
-		<method name="setInputStream(Ljava/io/InputStream;)V"/>
-	</class>
-	<class name="android/webkit/CallbackProxy" since="1" removed="8">
-		<extends name="android/os/Handler"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/webkit/WebView;)V"/>
-		<method name="addMessageToConsole(Ljava/lang/String;ILjava/lang/String;)V" since="7"/>
-		<method name="createWindow(ZZ)Landroid/webkit/WebView;"/>
-		<method name="doUpdateVisitedHistory(Ljava/lang/String;Z)V"/>
-		<method name="getBackForwardList()Landroid/webkit/WebBackForwardList;"/>
-		<method name="getProgress()I"/>
-		<method name="getVisitedHistory(Landroid/webkit/ValueCallback;)V" since="7"/>
-		<method name="getWebChromeClient()Landroid/webkit/WebChromeClient;" since="7"/>
-		<method name="onCloseWindow(Landroid/webkit/WebView;)V"/>
-		<method name="onDownloadStart(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)Z"/>
-		<method name="onExceededDatabaseQuota(Ljava/lang/String;Ljava/lang/String;JJJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="5"/>
-		<method name="onFormResubmission(Landroid/os/Message;Landroid/os/Message;)V"/>
-		<method name="onGeolocationPermissionsHidePrompt()V" since="7"/>
-		<method name="onGeolocationPermissionsShowPrompt(Ljava/lang/String;Landroid/webkit/GeolocationPermissions$Callback;)V" since="7"/>
-		<method name="onJsAlert(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="onJsBeforeUnload(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="onJsConfirm(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="onJsPrompt(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="onJsTimeout()Z" since="7"/>
-		<method name="onLoadResource(Ljava/lang/String;)V"/>
-		<method name="onPageFinished(Ljava/lang/String;)V"/>
-		<method name="onPageStarted(Ljava/lang/String;Landroid/graphics/Bitmap;)V"/>
-		<method name="onProgressChanged(I)V"/>
-		<method name="onReachedMaxAppCacheSize(JJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="7"/>
-		<method name="onReceivedError(ILjava/lang/String;Ljava/lang/String;)V"/>
-		<method name="onReceivedHttpAuthRequest(Landroid/webkit/HttpAuthHandler;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="onReceivedIcon(Landroid/graphics/Bitmap;)V"/>
-		<method name="onReceivedTitle(Ljava/lang/String;)V"/>
-		<method name="onRequestFocus()V"/>
-		<method name="onSavePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Message;)Z"/>
-		<method name="onScaleChanged(FF)V"/>
-		<method name="onTooManyRedirects(Landroid/os/Message;Landroid/os/Message;)V"/>
-		<method name="onUnhandledKeyEvent(Landroid/view/KeyEvent;)V"/>
-		<method name="setDownloadListener(Landroid/webkit/DownloadListener;)V"/>
-		<method name="setWebChromeClient(Landroid/webkit/WebChromeClient;)V"/>
-		<method name="setWebViewClient(Landroid/webkit/WebViewClient;)V"/>
-		<method name="shouldOverrideUrlLoading(Ljava/lang/String;)Z"/>
-		<method name="uiOverrideKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="uiOverrideUrlLoading(Ljava/lang/String;)Z"/>
-	</class>
-	<class name="android/webkit/ClientCertRequest" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getKeyTypes()[Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="getPrincipals()[Ljava/security/Principal;"/>
-		<method name="ignore()V"/>
-		<method name="proceed(Ljava/security/PrivateKey;[Ljava/security/cert/X509Certificate;)V"/>
-	</class>
-	<class name="android/webkit/ConsoleMessage" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILandroid/webkit/ConsoleMessage$MessageLevel;)V"/>
-		<method name="lineNumber()I"/>
-		<method name="message()Ljava/lang/String;"/>
-		<method name="messageLevel()Landroid/webkit/ConsoleMessage$MessageLevel;"/>
-		<method name="sourceId()Ljava/lang/String;"/>
-	</class>
-	<class name="android/webkit/ConsoleMessage$MessageLevel" since="8">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/ConsoleMessage$MessageLevel;"/>
-		<method name="values()[Landroid/webkit/ConsoleMessage$MessageLevel;"/>
-		<field name="DEBUG"/>
-		<field name="ERROR"/>
-		<field name="LOG"/>
-		<field name="TIP"/>
-		<field name="WARNING"/>
-	</class>
-	<class name="android/webkit/CookieManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="acceptCookie()Z"/>
-		<method name="acceptThirdPartyCookies(Landroid/webkit/WebView;)Z" since="21"/>
-		<method name="allowFileSchemeCookies()Z" since="12"/>
-		<method name="flush()V" since="21"/>
-		<method name="getCookie(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getInstance()Landroid/webkit/CookieManager;"/>
-		<method name="hasCookies()Z"/>
-		<method name="removeAllCookie()V" deprecated="21"/>
-		<method name="removeAllCookies(Landroid/webkit/ValueCallback;)V" since="21"/>
-		<method name="removeExpiredCookie()V" deprecated="21"/>
-		<method name="removeSessionCookie()V" deprecated="21"/>
-		<method name="removeSessionCookies(Landroid/webkit/ValueCallback;)V" since="21"/>
-		<method name="setAcceptCookie(Z)V"/>
-		<method name="setAcceptFileSchemeCookies(Z)V" since="12"/>
-		<method name="setAcceptThirdPartyCookies(Landroid/webkit/WebView;Z)V" since="21"/>
-		<method name="setCookie(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setCookie(Ljava/lang/String;Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="21"/>
-	</class>
-	<class name="android/webkit/CookieSyncManager" since="1" deprecated="21">
-		<extends name="android/webkit/WebSyncManager" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<method name="&lt;init>()V"/>
-		<method name="createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager;"/>
-		<method name="getInstance()Landroid/webkit/CookieSyncManager;"/>
-		<method name="syncFromRamToFlash()V" deprecated="21"/>
-		<field name="LOGTAG" since="21" removed="29"/>
-		<field name="mDataBase" since="21" removed="29"/>
-		<field name="mHandler" since="21" removed="29"/>
-	</class>
-	<class name="android/webkit/DateSorter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="getBoundary(I)J"/>
-		<method name="getIndex(J)I"/>
-		<method name="getLabel(I)Ljava/lang/String;"/>
-		<field name="DAY_COUNT"/>
-	</class>
-	<class name="android/webkit/DownloadListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onDownloadStart(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V"/>
-	</class>
-	<class name="android/webkit/GeolocationPermissions" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="allow(Ljava/lang/String;)V" since="7"/>
-		<method name="clear(Ljava/lang/String;)V" since="7"/>
-		<method name="clearAll()V" since="7"/>
-		<method name="getAllowed(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7"/>
-		<method name="getInstance()Landroid/webkit/GeolocationPermissions;" since="7"/>
-		<method name="getOrigins(Landroid/webkit/ValueCallback;)V" since="7"/>
-	</class>
-	<class name="android/webkit/GeolocationPermissions$Callback" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="invoke(Ljava/lang/String;ZZ)V"/>
-	</class>
-	<class name="android/webkit/HttpAuthHandler" since="1">
-		<extends name="android/os/Handler"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="proceed(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="useHttpAuthUsernamePassword()Z"/>
-	</class>
-	<class name="android/webkit/JavascriptInterface" since="17">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/webkit/JsPromptResult" since="1">
-		<extends name="android/webkit/JsResult"/>
-		<method name="&lt;init>()V"/>
-		<method name="confirm(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/webkit/JsResult" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="confirm()V"/>
-		<method name="wakeUp()V" removed="16"/>
-		<field name="mProxy" removed="8"/>
-		<field name="mResult" removed="16"/>
-	</class>
-	<class name="android/webkit/MimeTypeMap" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getExtensionFromMimeType(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getFileExtensionFromUrl(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getSingleton()Landroid/webkit/MimeTypeMap;"/>
-		<method name="hasExtension(Ljava/lang/String;)Z"/>
-		<method name="hasMimeType(Ljava/lang/String;)Z"/>
-	</class>
-	<class name="android/webkit/PermissionRequest" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="deny()V"/>
-		<method name="getOrigin()Landroid/net/Uri;"/>
-		<method name="getResources()[Ljava/lang/String;"/>
-		<method name="grant([Ljava/lang/String;)V"/>
-		<field name="RESOURCE_AUDIO_CAPTURE"/>
-		<field name="RESOURCE_MIDI_SYSEX" since="23"/>
-		<field name="RESOURCE_PROTECTED_MEDIA_ID"/>
-		<field name="RESOURCE_VIDEO_CAPTURE"/>
-	</class>
-	<class name="android/webkit/Plugin" since="1" deprecated="5" removed="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="dispatchClickEvent(Landroid/content/Context;)V"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getFileName()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="setClickHandler(Landroid/webkit/Plugin$PreferencesClickHandler;)V"/>
-		<method name="setDescription(Ljava/lang/String;)V"/>
-		<method name="setFileName(Ljava/lang/String;)V"/>
-		<method name="setName(Ljava/lang/String;)V"/>
-		<method name="setPath(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/webkit/Plugin$PreferencesClickHandler" since="1" removed="12">
-		<extends name="java/lang/Object"/>
-		<method name="handleClickEvent(Landroid/content/Context;)V"/>
-	</class>
-	<class name="android/webkit/PluginData" since="3" deprecated="5" removed="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/io/InputStream;JLjava/util/Map;I)V"/>
-		<method name="getContentLength()J"/>
-		<method name="getHeaders()Ljava/util/Map;"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getStatusCode()I"/>
-	</class>
-	<class name="android/webkit/PluginList" since="1" deprecated="5" removed="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPlugin(Landroid/webkit/Plugin;)V"/>
-		<method name="clear()V"/>
-		<method name="getList()Ljava/util/List;"/>
-		<method name="pluginClicked(Landroid/content/Context;I)V"/>
-		<method name="removePlugin(Landroid/webkit/Plugin;)V"/>
-	</class>
-	<class name="android/webkit/PluginStub" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="getEmbeddedView(ILandroid/content/Context;)Landroid/view/View;"/>
-		<method name="getFullScreenView(ILandroid/content/Context;)Landroid/view/View;"/>
-	</class>
-	<class name="android/webkit/RenderProcessGoneDetail" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="didCrash()Z"/>
-		<method name="rendererPriorityAtExit()I"/>
-	</class>
-	<class name="android/webkit/SafeBrowsingResponse" since="27">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="backToSafety(Z)V"/>
-		<method name="proceed(Z)V"/>
-		<method name="showInterstitial(Z)V"/>
-	</class>
-	<class name="android/webkit/ServiceWorkerClient" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="shouldInterceptRequest(Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;"/>
-	</class>
-	<class name="android/webkit/ServiceWorkerController" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/webkit/ServiceWorkerController;"/>
-		<method name="getServiceWorkerWebSettings()Landroid/webkit/ServiceWorkerWebSettings;"/>
-		<method name="setServiceWorkerClient(Landroid/webkit/ServiceWorkerClient;)V"/>
-	</class>
-	<class name="android/webkit/ServiceWorkerWebSettings" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAllowContentAccess()Z"/>
-		<method name="getAllowFileAccess()Z"/>
-		<method name="getBlockNetworkLoads()Z"/>
-		<method name="getCacheMode()I"/>
-		<method name="setAllowContentAccess(Z)V"/>
-		<method name="setAllowFileAccess(Z)V"/>
-		<method name="setBlockNetworkLoads(Z)V"/>
-		<method name="setCacheMode(I)V"/>
-	</class>
-	<class name="android/webkit/SslErrorHandler" since="1">
-		<extends name="android/os/Handler"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()V"/>
-		<method name="proceed()V"/>
-	</class>
-	<class name="android/webkit/TracingConfig" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/util/List;I)V" since="29"/>
-		<method name="getCustomIncludedCategories()Ljava/util/List;"/>
-		<method name="getPredefinedCategories()I"/>
-		<method name="getTracingMode()I"/>
-		<field name="CATEGORIES_ALL"/>
-		<field name="CATEGORIES_ANDROID_WEBVIEW"/>
-		<field name="CATEGORIES_FRAME_VIEWER"/>
-		<field name="CATEGORIES_INPUT_LATENCY"/>
-		<field name="CATEGORIES_JAVASCRIPT_AND_RENDERING"/>
-		<field name="CATEGORIES_NONE"/>
-		<field name="CATEGORIES_RENDERING"/>
-		<field name="CATEGORIES_WEB_DEVELOPER"/>
-		<field name="RECORD_CONTINUOUSLY"/>
-		<field name="RECORD_UNTIL_FULL"/>
-	</class>
-	<class name="android/webkit/TracingConfig$Builder" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addCategories(Ljava/util/Collection;)Landroid/webkit/TracingConfig$Builder;"/>
-		<method name="addCategories([I)Landroid/webkit/TracingConfig$Builder;"/>
-		<method name="addCategories([Ljava/lang/String;)Landroid/webkit/TracingConfig$Builder;"/>
-		<method name="build()Landroid/webkit/TracingConfig;"/>
-		<method name="setTracingMode(I)Landroid/webkit/TracingConfig$Builder;"/>
-	</class>
-	<class name="android/webkit/TracingController" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance()Landroid/webkit/TracingController;"/>
-		<method name="isTracing()Z"/>
-		<method name="start(Landroid/webkit/TracingConfig;)V"/>
-		<method name="stop(Ljava/io/OutputStream;Ljava/util/concurrent/Executor;)Z"/>
-	</class>
-	<class name="android/webkit/URLUtil" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="composeSearchUrl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="decode([B)[B"/>
-		<method name="guessFileName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="guessUrl(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="isAboutUrl(Ljava/lang/String;)Z"/>
-		<method name="isAssetUrl(Ljava/lang/String;)Z"/>
-		<method name="isContentUrl(Ljava/lang/String;)Z"/>
-		<method name="isCookielessProxyUrl(Ljava/lang/String;)Z" deprecated="16"/>
-		<method name="isDataUrl(Ljava/lang/String;)Z"/>
-		<method name="isFileUrl(Ljava/lang/String;)Z"/>
-		<method name="isHttpUrl(Ljava/lang/String;)Z"/>
-		<method name="isHttpsUrl(Ljava/lang/String;)Z"/>
-		<method name="isJavaScriptUrl(Ljava/lang/String;)Z"/>
-		<method name="isNetworkUrl(Ljava/lang/String;)Z"/>
-		<method name="isValidUrl(Ljava/lang/String;)Z"/>
-		<method name="stripAnchor(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="android/webkit/UrlInterceptHandler" since="1" deprecated="5" removed="12">
-		<extends name="java/lang/Object"/>
-		<method name="getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData;" since="3"/>
-		<method name="service(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;"/>
-	</class>
-	<class name="android/webkit/UrlInterceptRegistry" since="1" deprecated="5" removed="12">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData;" since="3"/>
-		<method name="getSurrogate(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;"/>
-		<method name="registerHandler(Landroid/webkit/UrlInterceptHandler;)Z"/>
-		<method name="setUrlInterceptDisabled(Z)V"/>
-		<method name="unregisterHandler(Landroid/webkit/UrlInterceptHandler;)Z"/>
-		<method name="urlInterceptDisabled()Z"/>
-	</class>
-	<class name="android/webkit/ValueCallback" since="7">
-		<extends name="java/lang/Object"/>
-		<method name="onReceiveValue(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="android/webkit/WebBackForwardList" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/webkit/WebBackForwardList;"/>
-		<method name="getCurrentIndex()I"/>
-		<method name="getCurrentItem()Landroid/webkit/WebHistoryItem;"/>
-		<method name="getItemAtIndex(I)Landroid/webkit/WebHistoryItem;"/>
-		<method name="getSize()I"/>
-	</class>
-	<class name="android/webkit/WebChromeClient" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultVideoPoster()Landroid/graphics/Bitmap;" since="7"/>
-		<method name="getVideoLoadingProgressView()Landroid/view/View;" since="7"/>
-		<method name="getVisitedHistory(Landroid/webkit/ValueCallback;)V" since="7"/>
-		<method name="onCloseWindow(Landroid/webkit/WebView;)V"/>
-		<method name="onConsoleMessage(Landroid/webkit/ConsoleMessage;)Z" since="8"/>
-		<method name="onConsoleMessage(Ljava/lang/String;ILjava/lang/String;)V" since="7" deprecated="16"/>
-		<method name="onCreateWindow(Landroid/webkit/WebView;ZZLandroid/os/Message;)Z"/>
-		<method name="onExceededDatabaseQuota(Ljava/lang/String;Ljava/lang/String;JJJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="5" deprecated="19"/>
-		<method name="onGeolocationPermissionsHidePrompt()V" since="5"/>
-		<method name="onGeolocationPermissionsShowPrompt(Ljava/lang/String;Landroid/webkit/GeolocationPermissions$Callback;)V" since="5"/>
-		<method name="onHideCustomView()V" since="7"/>
-		<method name="onJsAlert(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z"/>
-		<method name="onJsBeforeUnload(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z"/>
-		<method name="onJsConfirm(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z"/>
-		<method name="onJsPrompt(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsPromptResult;)Z"/>
-		<method name="onJsTimeout()Z" since="7" deprecated="17"/>
-		<method name="onPermissionRequest(Landroid/webkit/PermissionRequest;)V" since="21"/>
-		<method name="onPermissionRequestCanceled(Landroid/webkit/PermissionRequest;)V" since="21"/>
-		<method name="onProgressChanged(Landroid/webkit/WebView;I)V"/>
-		<method name="onReachedMaxAppCacheSize(JJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="7" deprecated="19"/>
-		<method name="onReceivedIcon(Landroid/webkit/WebView;Landroid/graphics/Bitmap;)V"/>
-		<method name="onReceivedTitle(Landroid/webkit/WebView;Ljava/lang/String;)V"/>
-		<method name="onReceivedTouchIconUrl(Landroid/webkit/WebView;Ljava/lang/String;Z)V" since="7"/>
-		<method name="onRequestFocus(Landroid/webkit/WebView;)V"/>
-		<method name="onShowCustomView(Landroid/view/View;ILandroid/webkit/WebChromeClient$CustomViewCallback;)V" since="14" deprecated="18"/>
-		<method name="onShowCustomView(Landroid/view/View;Landroid/webkit/WebChromeClient$CustomViewCallback;)V" since="7"/>
-		<method name="onShowFileChooser(Landroid/webkit/WebView;Landroid/webkit/ValueCallback;Landroid/webkit/WebChromeClient$FileChooserParams;)Z" since="21"/>
-	</class>
-	<class name="android/webkit/WebChromeClient$CustomViewCallback" since="7">
-		<extends name="java/lang/Object"/>
-		<method name="onCustomViewHidden()V"/>
-	</class>
-	<class name="android/webkit/WebChromeClient$FileChooserParams" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createIntent()Landroid/content/Intent;"/>
-		<method name="getAcceptTypes()[Ljava/lang/String;"/>
-		<method name="getFilenameHint()Ljava/lang/String;"/>
-		<method name="getMode()I"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="isCaptureEnabled()Z"/>
-		<method name="parseResult(ILandroid/content/Intent;)[Landroid/net/Uri;"/>
-		<field name="MODE_OPEN"/>
-		<field name="MODE_OPEN_MULTIPLE"/>
-		<field name="MODE_SAVE"/>
-	</class>
-	<class name="android/webkit/WebHistoryItem" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Landroid/webkit/WebHistoryItem;"/>
-		<method name="getFavicon()Landroid/graphics/Bitmap;"/>
-		<method name="getId()I" deprecated="16" removed="17"/>
-		<method name="getOriginalUrl()Ljava/lang/String;" since="3"/>
-		<method name="getTitle()Ljava/lang/String;"/>
-		<method name="getUrl()Ljava/lang/String;"/>
-	</class>
-	<class name="android/webkit/WebIconDatabase" since="1" deprecated="18">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="getInstance()Landroid/webkit/WebIconDatabase;"/>
-		<method name="open(Ljava/lang/String;)V"/>
-		<method name="releaseIconForPageUrl(Ljava/lang/String;)V"/>
-		<method name="removeAllIcons()V"/>
-		<method name="requestIconForPageUrl(Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V"/>
-		<method name="retainIconForPageUrl(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/webkit/WebIconDatabase$IconListener" since="1" deprecated="18">
-		<extends name="java/lang/Object"/>
-		<method name="onReceivedIcon(Ljava/lang/String;Landroid/graphics/Bitmap;)V"/>
-	</class>
-	<class name="android/webkit/WebMessage" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[Landroid/webkit/WebMessagePort;)V"/>
-		<method name="getData()Ljava/lang/String;"/>
-		<method name="getPorts()[Landroid/webkit/WebMessagePort;"/>
-	</class>
-	<class name="android/webkit/WebMessagePort" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="postMessage(Landroid/webkit/WebMessage;)V"/>
-		<method name="setWebMessageCallback(Landroid/webkit/WebMessagePort$WebMessageCallback;)V"/>
-		<method name="setWebMessageCallback(Landroid/webkit/WebMessagePort$WebMessageCallback;Landroid/os/Handler;)V"/>
-	</class>
-	<class name="android/webkit/WebMessagePort$WebMessageCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onMessage(Landroid/webkit/WebMessagePort;Landroid/webkit/WebMessage;)V"/>
-	</class>
-	<class name="android/webkit/WebResourceError" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDescription()Ljava/lang/CharSequence;"/>
-		<method name="getErrorCode()I"/>
-	</class>
-	<class name="android/webkit/WebResourceRequest" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="getMethod()Ljava/lang/String;"/>
-		<method name="getRequestHeaders()Ljava/util/Map;"/>
-		<method name="getUrl()Landroid/net/Uri;"/>
-		<method name="hasGesture()Z"/>
-		<method name="isForMainFrame()Z"/>
-		<method name="isRedirect()Z" since="24"/>
-	</class>
-	<class name="android/webkit/WebResourceResponse" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/util/Map;Ljava/io/InputStream;)V" since="21"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/io/InputStream;)V"/>
-		<method name="getData()Ljava/io/InputStream;"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-		<method name="getMimeType()Ljava/lang/String;"/>
-		<method name="getReasonPhrase()Ljava/lang/String;" since="21"/>
-		<method name="getResponseHeaders()Ljava/util/Map;" since="21"/>
-		<method name="getStatusCode()I" since="21"/>
-		<method name="setData(Ljava/io/InputStream;)V"/>
-		<method name="setEncoding(Ljava/lang/String;)V"/>
-		<method name="setMimeType(Ljava/lang/String;)V"/>
-		<method name="setResponseHeaders(Ljava/util/Map;)V" since="21"/>
-		<method name="setStatusCodeAndReasonPhrase(ILjava/lang/String;)V" since="21"/>
-	</class>
-	<class name="android/webkit/WebSettings" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="enableSmoothTransition()Z" since="11" deprecated="17"/>
-		<method name="getAllowContentAccess()Z" since="11"/>
-		<method name="getAllowFileAccess()Z" since="3"/>
-		<method name="getAllowFileAccessFromFileURLs()Z" since="16"/>
-		<method name="getAllowUniversalAccessFromFileURLs()Z" since="16"/>
-		<method name="getBlockNetworkImage()Z"/>
-		<method name="getBlockNetworkLoads()Z" since="8"/>
-		<method name="getBuiltInZoomControls()Z" since="3"/>
-		<method name="getCacheMode()I"/>
-		<method name="getCursiveFontFamily()Ljava/lang/String;"/>
-		<method name="getDatabaseEnabled()Z" since="5"/>
-		<method name="getDatabasePath()Ljava/lang/String;" since="5" deprecated="19"/>
-		<method name="getDefaultFixedFontSize()I"/>
-		<method name="getDefaultFontSize()I"/>
-		<method name="getDefaultTextEncodingName()Ljava/lang/String;"/>
-		<method name="getDefaultUserAgent(Landroid/content/Context;)Ljava/lang/String;" since="17"/>
-		<method name="getDefaultZoom()Landroid/webkit/WebSettings$ZoomDensity;" since="7" deprecated="19"/>
-		<method name="getDisabledActionModeMenuItems()I" since="24"/>
-		<method name="getDisplayZoomControls()Z" since="11"/>
-		<method name="getDomStorageEnabled()Z" since="7"/>
-		<method name="getFantasyFontFamily()Ljava/lang/String;"/>
-		<method name="getFixedFontFamily()Ljava/lang/String;"/>
-		<method name="getJavaScriptCanOpenWindowsAutomatically()Z"/>
-		<method name="getJavaScriptEnabled()Z"/>
-		<method name="getLayoutAlgorithm()Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
-		<method name="getLightTouchEnabled()Z" deprecated="18"/>
-		<method name="getLoadWithOverviewMode()Z" since="7"/>
-		<method name="getLoadsImagesAutomatically()Z"/>
-		<method name="getMediaPlaybackRequiresUserGesture()Z" since="17"/>
-		<method name="getMinimumFontSize()I"/>
-		<method name="getMinimumLogicalFontSize()I"/>
-		<method name="getMixedContentMode()I" since="21"/>
-		<method name="getNavDump()Z" deprecated="16" removed="17"/>
-		<method name="getOffscreenPreRaster()Z" since="23"/>
-		<method name="getPluginState()Landroid/webkit/WebSettings$PluginState;" since="8" deprecated="18"/>
-		<method name="getPluginsEnabled()Z" deprecated="16" removed="18"/>
-		<method name="getPluginsPath()Ljava/lang/String;" deprecated="16" removed="18"/>
-		<method name="getSafeBrowsingEnabled()Z" since="26"/>
-		<method name="getSansSerifFontFamily()Ljava/lang/String;"/>
-		<method name="getSaveFormData()Z" deprecated="26"/>
-		<method name="getSavePassword()Z" deprecated="18"/>
-		<method name="getSerifFontFamily()Ljava/lang/String;"/>
-		<method name="getStandardFontFamily()Ljava/lang/String;"/>
-		<method name="getTextSize()Landroid/webkit/WebSettings$TextSize;" deprecated="16"/>
-		<method name="getTextZoom()I" since="14"/>
-		<method name="getUseDoubleTree()Z" deprecated="16" removed="17"/>
-		<method name="getUseWebViewBackgroundForOverscrollBackground()Z" since="9" deprecated="16" removed="17"/>
-		<method name="getUseWideViewPort()Z"/>
-		<method name="getUserAgent()I" deprecated="16" removed="17"/>
-		<method name="getUserAgentString()Ljava/lang/String;" since="3"/>
-		<method name="setAllowContentAccess(Z)V" since="11"/>
-		<method name="setAllowFileAccess(Z)V" since="3"/>
-		<method name="setAllowFileAccessFromFileURLs(Z)V" since="16"/>
-		<method name="setAllowUniversalAccessFromFileURLs(Z)V" since="16"/>
-		<method name="setAppCacheEnabled(Z)V" since="7"/>
-		<method name="setAppCacheMaxSize(J)V" since="7" deprecated="18"/>
-		<method name="setAppCachePath(Ljava/lang/String;)V" since="7"/>
-		<method name="setBlockNetworkImage(Z)V"/>
-		<method name="setBlockNetworkLoads(Z)V" since="8"/>
-		<method name="setBuiltInZoomControls(Z)V" since="3"/>
-		<method name="setCacheMode(I)V"/>
-		<method name="setCursiveFontFamily(Ljava/lang/String;)V"/>
-		<method name="setDatabaseEnabled(Z)V" since="5"/>
-		<method name="setDatabasePath(Ljava/lang/String;)V" since="5" deprecated="19"/>
-		<method name="setDefaultFixedFontSize(I)V"/>
-		<method name="setDefaultFontSize(I)V"/>
-		<method name="setDefaultTextEncodingName(Ljava/lang/String;)V"/>
-		<method name="setDefaultZoom(Landroid/webkit/WebSettings$ZoomDensity;)V" since="7" deprecated="19"/>
-		<method name="setDisabledActionModeMenuItems(I)V" since="24"/>
-		<method name="setDisplayZoomControls(Z)V" since="11"/>
-		<method name="setDomStorageEnabled(Z)V" since="7"/>
-		<method name="setEnableSmoothTransition(Z)V" since="11" deprecated="17"/>
-		<method name="setFantasyFontFamily(Ljava/lang/String;)V"/>
-		<method name="setFixedFontFamily(Ljava/lang/String;)V"/>
-		<method name="setGeolocationDatabasePath(Ljava/lang/String;)V" since="5" deprecated="24"/>
-		<method name="setGeolocationEnabled(Z)V" since="5"/>
-		<method name="setJavaScriptCanOpenWindowsAutomatically(Z)V"/>
-		<method name="setJavaScriptEnabled(Z)V"/>
-		<method name="setLayoutAlgorithm(Landroid/webkit/WebSettings$LayoutAlgorithm;)V"/>
-		<method name="setLightTouchEnabled(Z)V" deprecated="18"/>
-		<method name="setLoadWithOverviewMode(Z)V" since="7"/>
-		<method name="setLoadsImagesAutomatically(Z)V"/>
-		<method name="setMediaPlaybackRequiresUserGesture(Z)V" since="17"/>
-		<method name="setMinimumFontSize(I)V"/>
-		<method name="setMinimumLogicalFontSize(I)V"/>
-		<method name="setMixedContentMode(I)V" since="21"/>
-		<method name="setNavDump(Z)V" deprecated="16" removed="17"/>
-		<method name="setNeedInitialFocus(Z)V"/>
-		<method name="setOffscreenPreRaster(Z)V" since="23"/>
-		<method name="setPluginState(Landroid/webkit/WebSettings$PluginState;)V" since="8" deprecated="18"/>
-		<method name="setPluginsEnabled(Z)V" deprecated="16" removed="18"/>
-		<method name="setPluginsPath(Ljava/lang/String;)V" deprecated="16" removed="18"/>
-		<method name="setRenderPriority(Landroid/webkit/WebSettings$RenderPriority;)V" deprecated="18"/>
-		<method name="setSafeBrowsingEnabled(Z)V" since="26"/>
-		<method name="setSansSerifFontFamily(Ljava/lang/String;)V"/>
-		<method name="setSaveFormData(Z)V" deprecated="26"/>
-		<method name="setSavePassword(Z)V" deprecated="18"/>
-		<method name="setSerifFontFamily(Ljava/lang/String;)V"/>
-		<method name="setStandardFontFamily(Ljava/lang/String;)V"/>
-		<method name="setSupportMultipleWindows(Z)V"/>
-		<method name="setSupportZoom(Z)V"/>
-		<method name="setTextSize(Landroid/webkit/WebSettings$TextSize;)V" deprecated="16"/>
-		<method name="setTextZoom(I)V" since="14"/>
-		<method name="setUseDoubleTree(Z)V" deprecated="16" removed="17"/>
-		<method name="setUseWebViewBackgroundForOverscrollBackground(Z)V" since="9" deprecated="16" removed="17"/>
-		<method name="setUseWideViewPort(Z)V"/>
-		<method name="setUserAgent(I)V" deprecated="16" removed="17"/>
-		<method name="setUserAgentString(Ljava/lang/String;)V" since="3"/>
-		<method name="supportMultipleWindows()Z"/>
-		<method name="supportZoom()Z"/>
-		<field name="LOAD_CACHE_ELSE_NETWORK"/>
-		<field name="LOAD_CACHE_ONLY"/>
-		<field name="LOAD_DEFAULT"/>
-		<field name="LOAD_NORMAL" deprecated="17"/>
-		<field name="LOAD_NO_CACHE"/>
-		<field name="MENU_ITEM_NONE" since="24"/>
-		<field name="MENU_ITEM_PROCESS_TEXT" since="24"/>
-		<field name="MENU_ITEM_SHARE" since="24"/>
-		<field name="MENU_ITEM_WEB_SEARCH" since="24"/>
-		<field name="MIXED_CONTENT_ALWAYS_ALLOW" since="21"/>
-		<field name="MIXED_CONTENT_COMPATIBILITY_MODE" since="21"/>
-		<field name="MIXED_CONTENT_NEVER_ALLOW" since="21"/>
-	</class>
-	<class name="android/webkit/WebSettings$LayoutAlgorithm" since="1" deprecated="12">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
-		<method name="values()[Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
-		<field name="NARROW_COLUMNS" deprecated="28"/>
-		<field name="NORMAL"/>
-		<field name="SINGLE_COLUMN" deprecated="28"/>
-		<field name="TEXT_AUTOSIZING" since="19"/>
-	</class>
-	<class name="android/webkit/WebSettings$PluginState" since="8">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$PluginState;"/>
-		<method name="values()[Landroid/webkit/WebSettings$PluginState;"/>
-		<field name="OFF"/>
-		<field name="ON"/>
-		<field name="ON_DEMAND"/>
-	</class>
-	<class name="android/webkit/WebSettings$RenderPriority" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$RenderPriority;"/>
-		<method name="values()[Landroid/webkit/WebSettings$RenderPriority;"/>
-		<field name="HIGH"/>
-		<field name="LOW"/>
-		<field name="NORMAL"/>
-	</class>
-	<class name="android/webkit/WebSettings$TextSize" since="1" deprecated="16">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$TextSize;"/>
-		<method name="values()[Landroid/webkit/WebSettings$TextSize;"/>
-		<field name="LARGER"/>
-		<field name="LARGEST"/>
-		<field name="NORMAL"/>
-		<field name="SMALLER"/>
-		<field name="SMALLEST"/>
-	</class>
-	<class name="android/webkit/WebSettings$ZoomDensity" since="7">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$ZoomDensity;"/>
-		<method name="values()[Landroid/webkit/WebSettings$ZoomDensity;"/>
-		<field name="CLOSE"/>
-		<field name="FAR"/>
-		<field name="MEDIUM"/>
-	</class>
-	<class name="android/webkit/WebStorage" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="deleteAllData()V" since="7"/>
-		<method name="deleteOrigin(Ljava/lang/String;)V" since="7"/>
-		<method name="getInstance()Landroid/webkit/WebStorage;" since="7"/>
-		<method name="getOrigins(Landroid/webkit/ValueCallback;)V" since="7"/>
-		<method name="getQuotaForOrigin(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7"/>
-		<method name="getUsageForOrigin(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7"/>
-		<method name="setQuotaForOrigin(Ljava/lang/String;J)V" since="7" deprecated="18"/>
-	</class>
-	<class name="android/webkit/WebStorage$Origin" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;JJ)V" since="29"/>
-		<method name="getOrigin()Ljava/lang/String;"/>
-		<method name="getQuota()J"/>
-		<method name="getUsage()J"/>
-	</class>
-	<class name="android/webkit/WebStorage$QuotaUpdater" since="5" deprecated="19">
-		<extends name="java/lang/Object"/>
-		<method name="updateQuota(J)V"/>
-	</class>
-	<class name="android/webkit/WebSyncManager" since="1" deprecated="21" removed="29">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="onSyncInit()V"/>
-		<method name="resetSync()V"/>
-		<method name="startSync()V"/>
-		<method name="stopSync()V"/>
-		<method name="sync()V"/>
-		<field name="LOGTAG"/>
-		<field name="mDataBase"/>
-		<field name="mHandler"/>
-	</class>
-	<class name="android/webkit/WebView" since="1">
-		<extends name="android/widget/AbsoluteLayout"/>
-		<implements name="android/view/ViewGroup$OnHierarchyChangeListener"/>
-		<implements name="android/view/ViewTreeObserver$OnGlobalFocusChangeListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;IZ)V" since="11" deprecated="17"/>
-		<method name="addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V"/>
-		<method name="canGoBack()Z"/>
-		<method name="canGoBackOrForward(I)Z"/>
-		<method name="canGoForward()Z"/>
-		<method name="canZoomIn()Z" since="11" deprecated="17"/>
-		<method name="canZoomOut()Z" since="11" deprecated="17"/>
-		<method name="capturePicture()Landroid/graphics/Picture;" deprecated="19"/>
-		<method name="clearCache(Z)V"/>
-		<method name="clearClientCertPreferences(Ljava/lang/Runnable;)V" since="21"/>
-		<method name="clearFormData()V"/>
-		<method name="clearHistory()V"/>
-		<method name="clearMatches()V" since="3"/>
-		<method name="clearSslPreferences()V"/>
-		<method name="clearView()V" deprecated="18"/>
-		<method name="copyBackForwardList()Landroid/webkit/WebBackForwardList;"/>
-		<method name="createPrintDocumentAdapter()Landroid/print/PrintDocumentAdapter;" since="19" deprecated="21"/>
-		<method name="createPrintDocumentAdapter(Ljava/lang/String;)Landroid/print/PrintDocumentAdapter;" since="21"/>
-		<method name="createWebMessageChannel()[Landroid/webkit/WebMessagePort;" since="23"/>
-		<method name="debugDump()V" deprecated="16" removed="17"/>
-		<method name="destroy()V"/>
-		<method name="disablePlatformNotifications()V" deprecated="16" removed="17"/>
-		<method name="disableWebView()V" since="28"/>
-		<method name="documentHasImages(Landroid/os/Message;)V"/>
-		<method name="emulateShiftHeld()V" since="8" deprecated="16" removed="17"/>
-		<method name="enablePlatformNotifications()V" deprecated="16" removed="17"/>
-		<method name="enableSlowWholeDocumentDraw()V" since="21"/>
-		<method name="evaluateJavascript(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="19"/>
-		<method name="findAddress(Ljava/lang/String;)Ljava/lang/String;" deprecated="28"/>
-		<method name="findAll(Ljava/lang/String;)I" since="3" deprecated="16"/>
-		<method name="findAllAsync(Ljava/lang/String;)V" since="16"/>
-		<method name="findNext(Z)V" since="3"/>
-		<method name="flingScroll(II)V"/>
-		<method name="freeMemory()V" since="7" deprecated="19"/>
-		<method name="getCertificate()Landroid/net/http/SslCertificate;"/>
-		<method name="getContentHeight()I"/>
-		<method name="getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;" since="26"/>
-		<method name="getFavicon()Landroid/graphics/Bitmap;"/>
-		<method name="getHitTestResult()Landroid/webkit/WebView$HitTestResult;"/>
-		<method name="getHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" deprecated="26"/>
-		<method name="getOriginalUrl()Ljava/lang/String;" since="3"/>
-		<method name="getPluginList()Landroid/webkit/PluginList;" removed="12"/>
-		<method name="getProgress()I"/>
-		<method name="getRendererPriorityWaivedWhenNotVisible()Z" since="26"/>
-		<method name="getRendererRequestedPriority()I" since="26"/>
-		<method name="getSafeBrowsingPrivacyPolicyUrl()Landroid/net/Uri;" since="27"/>
-		<method name="getScale()F" deprecated="17"/>
-		<method name="getSettings()Landroid/webkit/WebSettings;"/>
-		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" since="27"/>
-		<method name="getTitle()Ljava/lang/String;"/>
-		<method name="getUrl()Ljava/lang/String;"/>
-		<method name="getVisibleTitleHeight()I" since="11" deprecated="16" removed="17"/>
-		<method name="getWebChromeClient()Landroid/webkit/WebChromeClient;" since="26"/>
-		<method name="getWebViewClassLoader()Ljava/lang/ClassLoader;" since="28"/>
-		<method name="getWebViewClient()Landroid/webkit/WebViewClient;" since="26"/>
-		<method name="getWebViewLooper()Landroid/os/Looper;" since="28"/>
-		<method name="getZoomControls()Landroid/view/View;" removed="16"/>
-		<method name="goBack()V"/>
-		<method name="goBackOrForward(I)V"/>
-		<method name="goForward()V"/>
-		<method name="invokeZoomPicker()V"/>
-		<method name="isPrivateBrowsingEnabled()Z" since="11"/>
-		<method name="loadData(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="loadUrl(Ljava/lang/String;)V"/>
-		<method name="loadUrl(Ljava/lang/String;Ljava/util/Map;)V" since="8"/>
-		<method name="onPause()V" since="11"/>
-		<method name="onResume()V" since="11"/>
-		<method name="overlayHorizontalScrollbar()Z" deprecated="23"/>
-		<method name="overlayVerticalScrollbar()Z" deprecated="23"/>
-		<method name="pageDown(Z)Z"/>
-		<method name="pageUp(Z)Z"/>
-		<method name="pauseTimers()V"/>
-		<method name="postUrl(Ljava/lang/String;[B)V" since="5"/>
-		<method name="postVisualStateCallback(JLandroid/webkit/WebView$VisualStateCallback;)V" since="23"/>
-		<method name="postWebMessage(Landroid/webkit/WebMessage;Landroid/net/Uri;)V" since="23"/>
-		<method name="refreshPlugins(Z)V" removed="12"/>
-		<method name="reload()V"/>
-		<method name="removeJavascriptInterface(Ljava/lang/String;)V" since="11"/>
-		<method name="requestFocusNodeHref(Landroid/os/Message;)V"/>
-		<method name="requestImageRef(Landroid/os/Message;)V"/>
-		<method name="restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="16" removed="17"/>
-		<method name="restoreState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;"/>
-		<method name="resumeTimers()V"/>
-		<method name="savePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="18"/>
-		<method name="savePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="16" removed="17"/>
-		<method name="saveState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;"/>
-		<method name="saveWebArchive(Ljava/lang/String;)V" since="11"/>
-		<method name="saveWebArchive(Ljava/lang/String;ZLandroid/webkit/ValueCallback;)V" since="11"/>
-		<method name="setCertificate(Landroid/net/http/SslCertificate;)V" deprecated="17"/>
-		<method name="setDataDirectorySuffix(Ljava/lang/String;)V" since="28"/>
-		<method name="setDownloadListener(Landroid/webkit/DownloadListener;)V"/>
-		<method name="setFindListener(Landroid/webkit/WebView$FindListener;)V" since="16"/>
-		<method name="setHorizontalScrollbarOverlay(Z)V" deprecated="23"/>
-		<method name="setHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="26"/>
-		<method name="setInitialScale(I)V"/>
-		<method name="setMapTrackballToArrowKeys(Z)V" deprecated="17"/>
-		<method name="setNetworkAvailable(Z)V" since="3"/>
-		<method name="setPictureListener(Landroid/webkit/WebView$PictureListener;)V" deprecated="16"/>
-		<method name="setRendererPriorityPolicy(IZ)V" since="26"/>
-		<method name="setSafeBrowsingWhitelist(Ljava/util/List;Landroid/webkit/ValueCallback;)V" since="27"/>
-		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="27"/>
-		<method name="setVerticalScrollbarOverlay(Z)V" deprecated="23"/>
-		<method name="setWebChromeClient(Landroid/webkit/WebChromeClient;)V"/>
-		<method name="setWebContentsDebuggingEnabled(Z)V" since="19"/>
-		<method name="setWebViewClient(Landroid/webkit/WebViewClient;)V"/>
-		<method name="showFindDialog(Ljava/lang/String;Z)Z" since="11" deprecated="18"/>
-		<method name="startSafeBrowsing(Landroid/content/Context;Landroid/webkit/ValueCallback;)V" since="27"/>
-		<method name="stopLoading()V"/>
-		<method name="zoomBy(F)V" since="21"/>
-		<method name="zoomIn()Z"/>
-		<method name="zoomOut()Z"/>
-		<field name="RENDERER_PRIORITY_BOUND" since="26"/>
-		<field name="RENDERER_PRIORITY_IMPORTANT" since="26"/>
-		<field name="RENDERER_PRIORITY_WAIVED" since="26"/>
-		<field name="SCHEME_GEO"/>
-		<field name="SCHEME_MAILTO"/>
-		<field name="SCHEME_TEL"/>
-	</class>
-	<class name="android/webkit/WebView$FindListener" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="onFindResultReceived(IIZ)V"/>
-	</class>
-	<class name="android/webkit/WebView$HitTestResult" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" since="16"/>
-		<method name="&lt;init>(Landroid/webkit/WebView;)V" removed="16"/>
-		<method name="getExtra()Ljava/lang/String;"/>
-		<method name="getType()I"/>
-		<field name="ANCHOR_TYPE" deprecated="16"/>
-		<field name="EDIT_TEXT_TYPE"/>
-		<field name="EMAIL_TYPE"/>
-		<field name="GEO_TYPE"/>
-		<field name="IMAGE_ANCHOR_TYPE" deprecated="16"/>
-		<field name="IMAGE_TYPE"/>
-		<field name="PHONE_TYPE"/>
-		<field name="SRC_ANCHOR_TYPE"/>
-		<field name="SRC_IMAGE_ANCHOR_TYPE"/>
-		<field name="UNKNOWN_TYPE"/>
-	</class>
-	<class name="android/webkit/WebView$PictureListener" since="1" deprecated="12">
-		<extends name="java/lang/Object"/>
-		<method name="onNewPicture(Landroid/webkit/WebView;Landroid/graphics/Picture;)V" deprecated="16"/>
-	</class>
-	<class name="android/webkit/WebView$VisualStateCallback" since="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onComplete(J)V"/>
-	</class>
-	<class name="android/webkit/WebView$WebViewTransport" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/webkit/WebView;)V"/>
-		<method name="getWebView()Landroid/webkit/WebView;"/>
-		<method name="setWebView(Landroid/webkit/WebView;)V"/>
-	</class>
-	<class name="android/webkit/WebViewClient" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="doUpdateVisitedHistory(Landroid/webkit/WebView;Ljava/lang/String;Z)V"/>
-		<method name="onFormResubmission(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V"/>
-		<method name="onLoadResource(Landroid/webkit/WebView;Ljava/lang/String;)V"/>
-		<method name="onPageCommitVisible(Landroid/webkit/WebView;Ljava/lang/String;)V" since="23"/>
-		<method name="onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V"/>
-		<method name="onPageStarted(Landroid/webkit/WebView;Ljava/lang/String;Landroid/graphics/Bitmap;)V"/>
-		<method name="onReceivedClientCertRequest(Landroid/webkit/WebView;Landroid/webkit/ClientCertRequest;)V" since="21"/>
-		<method name="onReceivedError(Landroid/webkit/WebView;ILjava/lang/String;Ljava/lang/String;)V" deprecated="23"/>
-		<method name="onReceivedError(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceError;)V" since="23"/>
-		<method name="onReceivedHttpAuthRequest(Landroid/webkit/WebView;Landroid/webkit/HttpAuthHandler;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="onReceivedHttpError(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceResponse;)V" since="23"/>
-		<method name="onReceivedLoginRequest(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="12"/>
-		<method name="onReceivedSslError(Landroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V" since="8"/>
-		<method name="onRenderProcessGone(Landroid/webkit/WebView;Landroid/webkit/RenderProcessGoneDetail;)Z" since="26"/>
-		<method name="onSafeBrowsingHit(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;ILandroid/webkit/SafeBrowsingResponse;)V" since="27"/>
-		<method name="onScaleChanged(Landroid/webkit/WebView;FF)V"/>
-		<method name="onTooManyRedirects(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V" deprecated="16"/>
-		<method name="onUnhandledInputEvent(Landroid/webkit/WebView;Landroid/view/InputEvent;)V" since="21" removed="24"/>
-		<method name="onUnhandledKeyEvent(Landroid/webkit/WebView;Landroid/view/KeyEvent;)V" deprecated="21"/>
-		<method name="shouldInterceptRequest(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;" since="21"/>
-		<method name="shouldInterceptRequest(Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;" since="11" deprecated="21"/>
-		<method name="shouldOverrideKeyEvent(Landroid/webkit/WebView;Landroid/view/KeyEvent;)Z"/>
-		<method name="shouldOverrideUrlLoading(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Z" since="24"/>
-		<method name="shouldOverrideUrlLoading(Landroid/webkit/WebView;Ljava/lang/String;)Z" deprecated="24"/>
-		<field name="ERROR_AUTHENTICATION" since="5"/>
-		<field name="ERROR_BAD_URL" since="5"/>
-		<field name="ERROR_CONNECT" since="5"/>
-		<field name="ERROR_FAILED_SSL_HANDSHAKE" since="5"/>
-		<field name="ERROR_FILE" since="5"/>
-		<field name="ERROR_FILE_NOT_FOUND" since="5"/>
-		<field name="ERROR_HOST_LOOKUP" since="5"/>
-		<field name="ERROR_IO" since="5"/>
-		<field name="ERROR_PROXY_AUTHENTICATION" since="5"/>
-		<field name="ERROR_REDIRECT_LOOP" since="5"/>
-		<field name="ERROR_TIMEOUT" since="5"/>
-		<field name="ERROR_TOO_MANY_REQUESTS" since="5"/>
-		<field name="ERROR_UNKNOWN" since="5"/>
-		<field name="ERROR_UNSAFE_RESOURCE" since="26"/>
-		<field name="ERROR_UNSUPPORTED_AUTH_SCHEME" since="5"/>
-		<field name="ERROR_UNSUPPORTED_SCHEME" since="5"/>
-		<field name="SAFE_BROWSING_THREAT_MALWARE" since="27"/>
-		<field name="SAFE_BROWSING_THREAT_PHISHING" since="27"/>
-		<field name="SAFE_BROWSING_THREAT_UNKNOWN" since="27"/>
-		<field name="SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE" since="27"/>
-	</class>
-	<class name="android/webkit/WebViewDatabase" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clearFormData()V" deprecated="26"/>
-		<method name="clearHttpAuthUsernamePassword()V"/>
-		<method name="clearUsernamePassword()V" deprecated="18"/>
-		<method name="getHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" since="26"/>
-		<method name="getInstance(Landroid/content/Context;)Landroid/webkit/WebViewDatabase;"/>
-		<method name="hasFormData()Z" deprecated="26"/>
-		<method name="hasHttpAuthUsernamePassword()Z"/>
-		<method name="hasUsernamePassword()Z" deprecated="18"/>
-		<method name="setHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="26"/>
-		<field name="LOGTAG" removed="17"/>
-	</class>
-	<class name="android/webkit/WebViewFragment" since="11" deprecated="28">
-		<extends name="android/app/Fragment"/>
-		<method name="&lt;init>()V"/>
-		<method name="getWebView()Landroid/webkit/WebView;"/>
-	</class>
-	<class name="android/widget/AbsListView" since="1">
-		<extends name="android/widget/AdapterView"/>
-		<implements name="android/text/TextWatcher"/>
-		<implements name="android/view/ViewTreeObserver$OnGlobalLayoutListener"/>
-		<implements name="android/view/ViewTreeObserver$OnTouchModeChangeListener"/>
-		<implements name="android/widget/Filter$FilterListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="canScrollList(I)Z" since="19"/>
-		<method name="clearChoices()V" since="11"/>
-		<method name="clearTextFilter()V"/>
-		<method name="deferNotifyDataSetChanged()V" since="14"/>
-		<method name="fling(I)V" since="21"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/AbsListView$LayoutParams;"/>
-		<method name="getCacheColorHint()I"/>
-		<method name="getCheckedItemCount()I" since="11"/>
-		<method name="getCheckedItemIds()[J" since="11"/>
-		<method name="getCheckedItemPosition()I" since="11"/>
-		<method name="getCheckedItemPositions()Landroid/util/SparseBooleanArray;" since="11"/>
-		<method name="getChoiceMode()I" since="11"/>
-		<method name="getListPaddingBottom()I"/>
-		<method name="getListPaddingLeft()I"/>
-		<method name="getListPaddingRight()I"/>
-		<method name="getListPaddingTop()I"/>
-		<method name="getSelector()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getTextFilter()Ljava/lang/CharSequence;" since="3"/>
-		<method name="getTranscriptMode()I"/>
-		<method name="handleDataChanged()V"/>
-		<method name="hasTextFilter()Z"/>
-		<method name="invalidateViews()V"/>
-		<method name="isFastScrollAlwaysVisible()Z" since="11"/>
-		<method name="isFastScrollEnabled()Z" since="3"/>
-		<method name="isInFilterMode()Z"/>
-		<method name="isItemChecked(I)Z" since="11"/>
-		<method name="isScrollingCacheEnabled()Z"/>
-		<method name="isSmoothScrollbarEnabled()Z" since="3"/>
-		<method name="isStackFromBottom()Z"/>
-		<method name="isTextFilterEnabled()Z"/>
-		<method name="layoutChildren()V"/>
-		<method name="onInitializeAccessibilityNodeInfoForItem(Landroid/view/View;ILandroid/view/accessibility/AccessibilityNodeInfo;)V" since="19"/>
-		<method name="onRemoteAdapterConnected()Z" since="11"/>
-		<method name="onRemoteAdapterDisconnected()V" since="11"/>
-		<method name="pointToPosition(II)I"/>
-		<method name="pointToRowId(II)J"/>
-		<method name="reclaimViews(Ljava/util/List;)V"/>
-		<method name="scrollListBy(I)V" since="19"/>
-		<method name="setAdapter(Landroid/widget/ListAdapter;)V" since="11"/>
-		<method name="setCacheColorHint(I)V"/>
-		<method name="setChoiceMode(I)V" since="11"/>
-		<method name="setDrawSelectorOnTop(Z)V"/>
-		<method name="setFastScrollAlwaysVisible(Z)V" since="11"/>
-		<method name="setFastScrollEnabled(Z)V" since="3"/>
-		<method name="setFastScrollStyle(I)V" since="21"/>
-		<method name="setFilterText(Ljava/lang/String;)V"/>
-		<method name="setFriction(F)V" since="11"/>
-		<method name="setItemChecked(IZ)V" since="11"/>
-		<method name="setMultiChoiceModeListener(Landroid/widget/AbsListView$MultiChoiceModeListener;)V" since="11"/>
-		<method name="setOnScrollListener(Landroid/widget/AbsListView$OnScrollListener;)V"/>
-		<method name="setRecyclerListener(Landroid/widget/AbsListView$RecyclerListener;)V"/>
-		<method name="setRemoteViewsAdapter(Landroid/content/Intent;)V" since="11"/>
-		<method name="setScrollIndicators(Landroid/view/View;Landroid/view/View;)V"/>
-		<method name="setScrollingCacheEnabled(Z)V"/>
-		<method name="setSelectionFromTop(II)V" since="21"/>
-		<method name="setSelector(I)V"/>
-		<method name="setSelector(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setSmoothScrollbarEnabled(Z)V" since="3"/>
-		<method name="setStackFromBottom(Z)V"/>
-		<method name="setTextFilterEnabled(Z)V"/>
-		<method name="setTranscriptMode(I)V"/>
-		<method name="setVelocityScale(F)V" since="11"/>
-		<method name="smoothScrollBy(II)V" since="8"/>
-		<method name="smoothScrollToPosition(I)V" since="8"/>
-		<method name="smoothScrollToPosition(II)V" since="8"/>
-		<method name="smoothScrollToPositionFromTop(II)V" since="11"/>
-		<method name="smoothScrollToPositionFromTop(III)V" since="11"/>
-		<field name="CHOICE_MODE_MULTIPLE" since="11"/>
-		<field name="CHOICE_MODE_MULTIPLE_MODAL" since="11"/>
-		<field name="CHOICE_MODE_NONE" since="11"/>
-		<field name="CHOICE_MODE_SINGLE" since="11"/>
-		<field name="TRANSCRIPT_MODE_ALWAYS_SCROLL"/>
-		<field name="TRANSCRIPT_MODE_DISABLED"/>
-		<field name="TRANSCRIPT_MODE_NORMAL"/>
-	</class>
-	<class name="android/widget/AbsListView$LayoutParams" since="1">
-		<extends name="android/view/ViewGroup$LayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-	</class>
-	<class name="android/widget/AbsListView$MultiChoiceModeListener" since="11">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/ActionMode$Callback"/>
-		<method name="onItemCheckedStateChanged(Landroid/view/ActionMode;IJZ)V"/>
-	</class>
-	<class name="android/widget/AbsListView$OnScrollListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onScroll(Landroid/widget/AbsListView;III)V"/>
-		<method name="onScrollStateChanged(Landroid/widget/AbsListView;I)V"/>
-		<field name="SCROLL_STATE_FLING"/>
-		<field name="SCROLL_STATE_IDLE"/>
-		<field name="SCROLL_STATE_TOUCH_SCROLL"/>
-	</class>
-	<class name="android/widget/AbsListView$RecyclerListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onMovedToScrapHeap(Landroid/view/View;)V"/>
-	</class>
-	<class name="android/widget/AbsListView$SelectionBoundsAdjuster" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="adjustListItemSelectionBounds(Landroid/graphics/Rect;)V"/>
-	</class>
-	<class name="android/widget/AbsSeekBar" since="1">
-		<extends name="android/widget/ProgressBar"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getKeyProgressIncrement()I" since="3"/>
-		<method name="getSplitTrack()Z" since="21"/>
-		<method name="getThumb()Landroid/graphics/drawable/Drawable;" since="16"/>
-		<method name="getThumbOffset()I"/>
-		<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="getTickMark()Landroid/graphics/drawable/Drawable;" since="24"/>
-		<method name="getTickMarkTintList()Landroid/content/res/ColorStateList;" since="24"/>
-		<method name="getTickMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="24"/>
-		<method name="setKeyProgressIncrement(I)V" since="3"/>
-		<method name="setSplitTrack(Z)V" since="21"/>
-		<method name="setThumb(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setThumbOffset(I)V"/>
-		<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setTickMark(Landroid/graphics/drawable/Drawable;)V" since="24"/>
-		<method name="setTickMarkTintList(Landroid/content/res/ColorStateList;)V" since="24"/>
-		<method name="setTickMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="24"/>
-	</class>
-	<class name="android/widget/AbsSpinner" since="1">
-		<extends name="android/widget/AdapterView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getAdapter()Landroid/widget/SpinnerAdapter;"/>
-		<method name="pointToPosition(II)I"/>
-		<method name="setAdapter(Landroid/widget/SpinnerAdapter;)V"/>
-		<method name="setSelection(IZ)V"/>
-	</class>
-	<class name="android/widget/AbsoluteLayout" since="1" deprecated="3">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/AbsoluteLayout$LayoutParams" since="1">
-		<extends name="android/view/ViewGroup$LayoutParams"/>
-		<method name="&lt;init>(IIII)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="android/widget/ActionMenuView" since="21">
-		<extends name="android/widget/LinearLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="dismissPopupMenus()V"/>
-		<method name="generateDefaultLayoutParams()Landroid/widget/ActionMenuView$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/ActionMenuView$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/ActionMenuView$LayoutParams;"/>
-		<method name="getMenu()Landroid/view/Menu;"/>
-		<method name="getOverflowIcon()Landroid/graphics/drawable/Drawable;" since="23"/>
-		<method name="getPopupTheme()I"/>
-		<method name="hideOverflowMenu()Z"/>
-		<method name="isOverflowMenuShowing()Z"/>
-		<method name="setOnMenuItemClickListener(Landroid/widget/ActionMenuView$OnMenuItemClickListener;)V"/>
-		<method name="setOverflowIcon(Landroid/graphics/drawable/Drawable;)V" since="23"/>
-		<method name="setPopupTheme(I)V"/>
-		<method name="showOverflowMenu()Z"/>
-	</class>
-	<class name="android/widget/ActionMenuView$LayoutParams" since="21">
-		<extends name="android/widget/LinearLayout$LayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/widget/ActionMenuView$LayoutParams;)V"/>
-	</class>
-	<class name="android/widget/ActionMenuView$OnMenuItemClickListener" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
-	</class>
-	<class name="android/widget/Adapter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getAutofillOptions()[Ljava/lang/CharSequence;" since="26"/>
-		<method name="getCount()I"/>
-		<method name="getItem(I)Ljava/lang/Object;"/>
-		<method name="getItemId(I)J"/>
-		<method name="getItemViewType(I)I"/>
-		<method name="getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="getViewTypeCount()I"/>
-		<method name="hasStableIds()Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V"/>
-		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V"/>
-		<field name="IGNORE_ITEM_VIEW_TYPE"/>
-		<field name="NO_SELECTION"/>
-	</class>
-	<class name="android/widget/AdapterView" since="1">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getAdapter()Landroid/widget/Adapter;"/>
-		<method name="getCount()I"/>
-		<method name="getEmptyView()Landroid/view/View;"/>
-		<method name="getFirstVisiblePosition()I"/>
-		<method name="getItemAtPosition(I)Ljava/lang/Object;"/>
-		<method name="getItemIdAtPosition(I)J"/>
-		<method name="getLastVisiblePosition()I"/>
-		<method name="getOnItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;"/>
-		<method name="getOnItemLongClickListener()Landroid/widget/AdapterView$OnItemLongClickListener;"/>
-		<method name="getOnItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;"/>
-		<method name="getPositionForView(Landroid/view/View;)I"/>
-		<method name="getSelectedItem()Ljava/lang/Object;"/>
-		<method name="getSelectedItemId()J"/>
-		<method name="getSelectedItemPosition()I"/>
-		<method name="getSelectedView()Landroid/view/View;"/>
-		<method name="performItemClick(Landroid/view/View;IJ)Z"/>
-		<method name="setAdapter(Landroid/widget/Adapter;)V"/>
-		<method name="setEmptyView(Landroid/view/View;)V"/>
-		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V"/>
-		<method name="setOnItemLongClickListener(Landroid/widget/AdapterView$OnItemLongClickListener;)V"/>
-		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V"/>
-		<method name="setSelection(I)V"/>
-		<field name="INVALID_POSITION"/>
-		<field name="INVALID_ROW_ID"/>
-		<field name="ITEM_VIEW_TYPE_HEADER_OR_FOOTER"/>
-		<field name="ITEM_VIEW_TYPE_IGNORE"/>
-	</class>
-	<class name="android/widget/AdapterView$AdapterContextMenuInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/ContextMenu$ContextMenuInfo"/>
-		<method name="&lt;init>(Landroid/view/View;IJ)V"/>
-		<field name="id"/>
-		<field name="position"/>
-		<field name="targetView"/>
-	</class>
-	<class name="android/widget/AdapterView$OnItemClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V"/>
-	</class>
-	<class name="android/widget/AdapterView$OnItemLongClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onItemLongClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)Z"/>
-	</class>
-	<class name="android/widget/AdapterView$OnItemSelectedListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V"/>
-		<method name="onNothingSelected(Landroid/widget/AdapterView;)V"/>
-	</class>
-	<class name="android/widget/AdapterViewAnimator" since="11">
-		<extends name="android/widget/AdapterView"/>
-		<implements name="android/widget/Advanceable" since="16"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="14"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="advance()V"/>
-		<method name="deferNotifyDataSetChanged()V" since="14"/>
-		<method name="fyiWillBeAdvancedByHostKThx()V"/>
-		<method name="getCurrentView()Landroid/view/View;"/>
-		<method name="getDisplayedChild()I"/>
-		<method name="getInAnimation()Landroid/animation/ObjectAnimator;"/>
-		<method name="getOutAnimation()Landroid/animation/ObjectAnimator;"/>
-		<method name="onRemoteAdapterConnected()Z"/>
-		<method name="onRemoteAdapterDisconnected()V"/>
-		<method name="setAnimateFirstView(Z)V"/>
-		<method name="setDisplayedChild(I)V"/>
-		<method name="setInAnimation(Landroid/animation/ObjectAnimator;)V"/>
-		<method name="setInAnimation(Landroid/content/Context;I)V"/>
-		<method name="setOutAnimation(Landroid/animation/ObjectAnimator;)V"/>
-		<method name="setOutAnimation(Landroid/content/Context;I)V"/>
-		<method name="setRemoteViewsAdapter(Landroid/content/Intent;)V"/>
-		<method name="showNext()V"/>
-		<method name="showPrevious()V"/>
-	</class>
-	<class name="android/widget/AdapterViewFlipper" since="11">
-		<extends name="android/widget/AdapterViewAnimator"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getFlipInterval()I" since="16"/>
-		<method name="isAutoStart()Z"/>
-		<method name="isFlipping()Z"/>
-		<method name="setAutoStart(Z)V"/>
-		<method name="setFlipInterval(I)V"/>
-		<method name="startFlipping()V"/>
-		<method name="stopFlipping()V"/>
-	</class>
-	<class name="android/widget/Advanceable" since="16">
-		<extends name="java/lang/Object"/>
-		<method name="advance()V"/>
-		<method name="fyiWillBeAdvancedByHostKThx()V"/>
-	</class>
-	<class name="android/widget/AlphabetIndexer" since="3">
-		<extends name="android/database/DataSetObserver"/>
-		<implements name="android/widget/SectionIndexer"/>
-		<method name="&lt;init>(Landroid/database/Cursor;ILjava/lang/CharSequence;)V"/>
-		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="setCursor(Landroid/database/Cursor;)V"/>
-		<field name="mAlphabet"/>
-		<field name="mColumnIndex"/>
-		<field name="mDataCursor"/>
-	</class>
-	<class name="android/widget/AnalogClock" since="1" deprecated="23">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/ArrayAdapter" since="1">
-		<extends name="android/widget/BaseAdapter"/>
-		<implements name="android/widget/Filterable"/>
-		<implements name="android/widget/ThemedSpinnerAdapter" since="23"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;IILjava/util/List;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;II[Ljava/lang/Object;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;ILjava/util/List;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I[Ljava/lang/Object;)V"/>
-		<method name="add(Ljava/lang/Object;)V"/>
-		<method name="addAll(Ljava/util/Collection;)V" since="11"/>
-		<method name="addAll([Ljava/lang/Object;)V" since="11"/>
-		<method name="clear()V"/>
-		<method name="createFromResource(Landroid/content/Context;II)Landroid/widget/ArrayAdapter;"/>
-		<method name="getContext()Landroid/content/Context;"/>
-		<method name="getPosition(Ljava/lang/Object;)I"/>
-		<method name="insert(Ljava/lang/Object;I)V"/>
-		<method name="remove(Ljava/lang/Object;)V"/>
-		<method name="setDropDownViewResource(I)V"/>
-		<method name="setNotifyOnChange(Z)V"/>
-		<method name="sort(Ljava/util/Comparator;)V" since="3"/>
-	</class>
-	<class name="android/widget/AutoCompleteTextView" since="1">
-		<extends name="android/widget/EditText"/>
-		<implements name="android/widget/Filter$FilterListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V" since="24"/>
-		<method name="clearListSelection()V" since="3"/>
-		<method name="convertSelectionToString(Ljava/lang/Object;)Ljava/lang/CharSequence;"/>
-		<method name="dismissDropDown()V"/>
-		<method name="enoughToFilter()Z"/>
-		<method name="getAdapter()Landroid/widget/ListAdapter;"/>
-		<method name="getCompletionHint()Ljava/lang/CharSequence;" since="16"/>
-		<method name="getDropDownAnchor()I" since="3"/>
-		<method name="getDropDownBackground()Landroid/graphics/drawable/Drawable;" since="5"/>
-		<method name="getDropDownHeight()I" since="4"/>
-		<method name="getDropDownHorizontalOffset()I" since="5"/>
-		<method name="getDropDownVerticalOffset()I" since="5"/>
-		<method name="getDropDownWidth()I" since="3"/>
-		<method name="getFilter()Landroid/widget/Filter;"/>
-		<method name="getItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" deprecated="16"/>
-		<method name="getItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" deprecated="16"/>
-		<method name="getListSelection()I" since="3"/>
-		<method name="getOnItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" since="3"/>
-		<method name="getOnItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" since="3"/>
-		<method name="getThreshold()I"/>
-		<method name="getValidator()Landroid/widget/AutoCompleteTextView$Validator;"/>
-		<method name="isPerformingCompletion()Z" since="3"/>
-		<method name="isPopupShowing()Z"/>
-		<method name="performCompletion()V"/>
-		<method name="performFiltering(Ljava/lang/CharSequence;I)V"/>
-		<method name="performValidation()V"/>
-		<method name="replaceText(Ljava/lang/CharSequence;)V"/>
-		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
-		<method name="setCompletionHint(Ljava/lang/CharSequence;)V"/>
-		<method name="setDropDownAnchor(I)V" since="3"/>
-		<method name="setDropDownBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="5"/>
-		<method name="setDropDownBackgroundResource(I)V" since="5"/>
-		<method name="setDropDownHeight(I)V" since="4"/>
-		<method name="setDropDownHorizontalOffset(I)V" since="5"/>
-		<method name="setDropDownVerticalOffset(I)V" since="5"/>
-		<method name="setDropDownWidth(I)V" since="3"/>
-		<method name="setListSelection(I)V" since="3"/>
-		<method name="setOnDismissListener(Landroid/widget/AutoCompleteTextView$OnDismissListener;)V" since="17"/>
-		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V"/>
-		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V"/>
-		<method name="setText(Ljava/lang/CharSequence;Z)V" since="17"/>
-		<method name="setThreshold(I)V"/>
-		<method name="setValidator(Landroid/widget/AutoCompleteTextView$Validator;)V"/>
-		<method name="showDropDown()V"/>
-	</class>
-	<class name="android/widget/AutoCompleteTextView$OnDismissListener" since="17">
-		<extends name="java/lang/Object"/>
-		<method name="onDismiss()V"/>
-	</class>
-	<class name="android/widget/AutoCompleteTextView$Validator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="fixText(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-		<method name="isValid(Ljava/lang/CharSequence;)Z"/>
-	</class>
-	<class name="android/widget/BaseAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/ListAdapter"/>
-		<implements name="android/widget/SpinnerAdapter"/>
-		<method name="&lt;init>()V"/>
-		<method name="notifyDataSetChanged()V"/>
-		<method name="notifyDataSetInvalidated()V"/>
-		<method name="setAutofillOptions([Ljava/lang/CharSequence;)V" since="27"/>
-	</class>
-	<class name="android/widget/BaseExpandableListAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/ExpandableListAdapter"/>
-		<implements name="android/widget/HeterogeneousExpandableList" since="8"/>
-		<method name="&lt;init>()V"/>
-		<method name="notifyDataSetChanged()V"/>
-		<method name="notifyDataSetInvalidated()V"/>
-	</class>
-	<class name="android/widget/Button" since="1">
-		<extends name="android/widget/TextView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/CalendarView" since="11">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getDate()J"/>
-		<method name="getDateTextAppearance()I" since="16"/>
-		<method name="getFirstDayOfWeek()I"/>
-		<method name="getFocusedMonthDateColor()I" since="16" deprecated="23"/>
-		<method name="getMaxDate()J"/>
-		<method name="getMinDate()J"/>
-		<method name="getSelectedDateVerticalBar()Landroid/graphics/drawable/Drawable;" since="16" deprecated="23"/>
-		<method name="getSelectedWeekBackgroundColor()I" since="16" deprecated="23"/>
-		<method name="getShowWeekNumber()Z" deprecated="24"/>
-		<method name="getShownWeekCount()I" since="16" deprecated="23"/>
-		<method name="getUnfocusedMonthDateColor()I" since="16" deprecated="23"/>
-		<method name="getWeekDayTextAppearance()I" since="16"/>
-		<method name="getWeekNumberColor()I" since="16" deprecated="23"/>
-		<method name="getWeekSeparatorLineColor()I" since="16" deprecated="23"/>
-		<method name="setDate(J)V"/>
-		<method name="setDate(JZZ)V"/>
-		<method name="setDateTextAppearance(I)V" since="16"/>
-		<method name="setFirstDayOfWeek(I)V"/>
-		<method name="setFocusedMonthDateColor(I)V" since="16" deprecated="23"/>
-		<method name="setMaxDate(J)V"/>
-		<method name="setMinDate(J)V"/>
-		<method name="setOnDateChangeListener(Landroid/widget/CalendarView$OnDateChangeListener;)V"/>
-		<method name="setSelectedDateVerticalBar(I)V" since="16" deprecated="23"/>
-		<method name="setSelectedDateVerticalBar(Landroid/graphics/drawable/Drawable;)V" since="16" deprecated="23"/>
-		<method name="setSelectedWeekBackgroundColor(I)V" since="16" deprecated="23"/>
-		<method name="setShowWeekNumber(Z)V" deprecated="24"/>
-		<method name="setShownWeekCount(I)V" since="16" deprecated="23"/>
-		<method name="setUnfocusedMonthDateColor(I)V" since="16" deprecated="23"/>
-		<method name="setWeekDayTextAppearance(I)V" since="16"/>
-		<method name="setWeekNumberColor(I)V" since="16" deprecated="23"/>
-		<method name="setWeekSeparatorLineColor(I)V" since="16" deprecated="23"/>
-	</class>
-	<class name="android/widget/CalendarView$OnDateChangeListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onSelectedDayChange(Landroid/widget/CalendarView;III)V"/>
-	</class>
-	<class name="android/widget/CheckBox" since="1">
-		<extends name="android/widget/CompoundButton"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/Checkable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="isChecked()Z"/>
-		<method name="setChecked(Z)V"/>
-		<method name="toggle()V"/>
-	</class>
-	<class name="android/widget/CheckedTextView" since="1">
-		<extends name="android/widget/TextView"/>
-		<implements name="android/widget/Checkable"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getCheckMarkDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
-		<method name="getCheckMarkTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getCheckMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="onPaddingChanged(I)V" since="16" removed="17"/>
-		<method name="setCheckMarkDrawable(I)V"/>
-		<method name="setCheckMarkDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setCheckMarkTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setCheckMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-	</class>
-	<class name="android/widget/Chronometer" since="1">
-		<extends name="android/widget/TextView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getBase()J"/>
-		<method name="getFormat()Ljava/lang/String;"/>
-		<method name="getOnChronometerTickListener()Landroid/widget/Chronometer$OnChronometerTickListener;" since="3"/>
-		<method name="isCountDown()Z" since="24"/>
-		<method name="isTheFinalCountDown()Z" since="26"/>
-		<method name="setBase(J)V"/>
-		<method name="setCountDown(Z)V" since="24"/>
-		<method name="setFormat(Ljava/lang/String;)V"/>
-		<method name="setOnChronometerTickListener(Landroid/widget/Chronometer$OnChronometerTickListener;)V" since="3"/>
-		<method name="start()V"/>
-		<method name="stop()V"/>
-	</class>
-	<class name="android/widget/Chronometer$OnChronometerTickListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onChronometerTick(Landroid/widget/Chronometer;)V"/>
-	</class>
-	<class name="android/widget/CompoundButton" since="1">
-		<extends name="android/widget/Button"/>
-		<implements name="android/widget/Checkable"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getButtonDrawable()Landroid/graphics/drawable/Drawable;" since="23"/>
-		<method name="getButtonTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getButtonTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="setButtonDrawable(I)V"/>
-		<method name="setButtonDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setButtonTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setButtonTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setOnCheckedChangeListener(Landroid/widget/CompoundButton$OnCheckedChangeListener;)V"/>
-	</class>
-	<class name="android/widget/CompoundButton$OnCheckedChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onCheckedChanged(Landroid/widget/CompoundButton;Z)V"/>
-	</class>
-	<class name="android/widget/CursorAdapter" since="1">
-		<extends name="android/widget/BaseAdapter"/>
-		<implements name="android/widget/Filterable"/>
-		<implements name="android/widget/ThemedSpinnerAdapter" since="23"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;I)V" since="11"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;Z)V"/>
-		<method name="bindView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;)V"/>
-		<method name="changeCursor(Landroid/database/Cursor;)V"/>
-		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;"/>
-		<method name="getCursor()Landroid/database/Cursor;"/>
-		<method name="getFilterQueryProvider()Landroid/widget/FilterQueryProvider;"/>
-		<method name="init(Landroid/content/Context;Landroid/database/Cursor;Z)V" deprecated="16"/>
-		<method name="newDropDownView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="newView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="onContentChanged()V" since="3"/>
-		<method name="runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;"/>
-		<method name="setFilterQueryProvider(Landroid/widget/FilterQueryProvider;)V"/>
-		<method name="swapCursor(Landroid/database/Cursor;)Landroid/database/Cursor;" since="11"/>
-		<field name="FLAG_AUTO_REQUERY" since="11" deprecated="16"/>
-		<field name="FLAG_REGISTER_CONTENT_OBSERVER" since="11"/>
-	</class>
-	<class name="android/widget/CursorTreeAdapter" since="1">
-		<extends name="android/widget/BaseExpandableListAdapter"/>
-		<implements name="android/widget/Filterable"/>
-		<method name="&lt;init>(Landroid/database/Cursor;Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/database/Cursor;Landroid/content/Context;Z)V"/>
-		<method name="bindChildView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;Z)V"/>
-		<method name="bindGroupView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;Z)V"/>
-		<method name="changeCursor(Landroid/database/Cursor;)V"/>
-		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/String;"/>
-		<method name="getChild(II)Landroid/database/Cursor;"/>
-		<method name="getChildrenCursor(Landroid/database/Cursor;)Landroid/database/Cursor;"/>
-		<method name="getCursor()Landroid/database/Cursor;"/>
-		<method name="getFilterQueryProvider()Landroid/widget/FilterQueryProvider;"/>
-		<method name="getGroup(I)Landroid/database/Cursor;"/>
-		<method name="newChildView(Landroid/content/Context;Landroid/database/Cursor;ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="newGroupView(Landroid/content/Context;Landroid/database/Cursor;ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="notifyDataSetChanged(Z)V"/>
-		<method name="runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;"/>
-		<method name="setChildrenCursor(ILandroid/database/Cursor;)V"/>
-		<method name="setFilterQueryProvider(Landroid/widget/FilterQueryProvider;)V"/>
-		<method name="setGroupCursor(Landroid/database/Cursor;)V"/>
-	</class>
-	<class name="android/widget/DatePicker" since="1">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getCalendarView()Landroid/widget/CalendarView;" since="12" deprecated="24"/>
-		<method name="getCalendarViewShown()Z" since="11" deprecated="24"/>
-		<method name="getDayOfMonth()I"/>
-		<method name="getFirstDayOfWeek()I" since="21"/>
-		<method name="getMaxDate()J" since="11"/>
-		<method name="getMinDate()J" since="11"/>
-		<method name="getMonth()I"/>
-		<method name="getSpinnersShown()Z" since="11" deprecated="24"/>
-		<method name="getYear()I"/>
-		<method name="init(IIILandroid/widget/DatePicker$OnDateChangedListener;)V"/>
-		<method name="setCalendarViewShown(Z)V" since="11" deprecated="24"/>
-		<method name="setFirstDayOfWeek(I)V" since="21"/>
-		<method name="setMaxDate(J)V" since="11"/>
-		<method name="setMinDate(J)V" since="11"/>
-		<method name="setOnDateChangedListener(Landroid/widget/DatePicker$OnDateChangedListener;)V" since="26"/>
-		<method name="setSpinnersShown(Z)V" since="11" deprecated="24"/>
-		<method name="updateDate(III)V"/>
-	</class>
-	<class name="android/widget/DatePicker$OnDateChangedListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onDateChanged(Landroid/widget/DatePicker;III)V"/>
-	</class>
-	<class name="android/widget/DialerFilter" since="1" deprecated="26">
-		<extends name="android/widget/RelativeLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="append(Ljava/lang/String;)V"/>
-		<method name="clearText()V"/>
-		<method name="getDigits()Ljava/lang/CharSequence;"/>
-		<method name="getFilterText()Ljava/lang/CharSequence;"/>
-		<method name="getLetters()Ljava/lang/CharSequence;"/>
-		<method name="getMode()I"/>
-		<method name="isQwertyKeyboard()Z"/>
-		<method name="onModeChange(II)V"/>
-		<method name="removeFilterWatcher(Landroid/text/TextWatcher;)V"/>
-		<method name="setDigitsWatcher(Landroid/text/TextWatcher;)V"/>
-		<method name="setFilterWatcher(Landroid/text/TextWatcher;)V"/>
-		<method name="setLettersWatcher(Landroid/text/TextWatcher;)V"/>
-		<method name="setMode(I)V"/>
-		<field name="DIGITS_AND_LETTERS"/>
-		<field name="DIGITS_AND_LETTERS_NO_DIGITS"/>
-		<field name="DIGITS_AND_LETTERS_NO_LETTERS"/>
-		<field name="DIGITS_ONLY"/>
-		<field name="LETTERS_ONLY"/>
-	</class>
-	<class name="android/widget/DigitalClock" since="1" deprecated="17">
-		<extends name="android/widget/TextView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-	</class>
-	<class name="android/widget/EdgeEffect" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="draw(Landroid/graphics/Canvas;)Z"/>
-		<method name="finish()V"/>
-		<method name="getColor()I" since="21"/>
-		<method name="getMaxHeight()I" since="21"/>
-		<method name="isFinished()Z"/>
-		<method name="onAbsorb(I)V"/>
-		<method name="onPull(F)V"/>
-		<method name="onPull(FF)V" since="21"/>
-		<method name="onRelease()V"/>
-		<method name="setColor(I)V" since="21"/>
-		<method name="setSize(II)V"/>
-	</class>
-	<class name="android/widget/EditText" since="1">
-		<extends name="android/widget/TextView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="extendSelection(I)V"/>
-		<method name="getText()Landroid/text/Editable;"/>
-		<method name="selectAll()V"/>
-		<method name="setSelection(I)V"/>
-		<method name="setSelection(II)V"/>
-	</class>
-	<class name="android/widget/ExpandableListAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="areAllItemsEnabled()Z"/>
-		<method name="getChild(II)Ljava/lang/Object;"/>
-		<method name="getChildId(II)J"/>
-		<method name="getChildView(IIZLandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="getChildrenCount(I)I"/>
-		<method name="getCombinedChildId(JJ)J"/>
-		<method name="getCombinedGroupId(J)J"/>
-		<method name="getGroup(I)Ljava/lang/Object;"/>
-		<method name="getGroupCount()I"/>
-		<method name="getGroupId(I)J"/>
-		<method name="getGroupView(IZLandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="hasStableIds()Z"/>
-		<method name="isChildSelectable(II)Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="onGroupCollapsed(I)V"/>
-		<method name="onGroupExpanded(I)V"/>
-		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V"/>
-		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V"/>
-	</class>
-	<class name="android/widget/ExpandableListView" since="1">
-		<extends name="android/widget/ListView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="collapseGroup(I)Z"/>
-		<method name="expandGroup(I)Z"/>
-		<method name="expandGroup(IZ)Z" since="14"/>
-		<method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;"/>
-		<method name="getExpandableListPosition(I)J"/>
-		<method name="getFlatListPosition(J)I"/>
-		<method name="getPackedPositionChild(J)I"/>
-		<method name="getPackedPositionForChild(II)J"/>
-		<method name="getPackedPositionForGroup(I)J"/>
-		<method name="getPackedPositionGroup(J)I"/>
-		<method name="getPackedPositionType(J)I"/>
-		<method name="getSelectedId()J"/>
-		<method name="getSelectedPosition()J"/>
-		<method name="isGroupExpanded(I)Z"/>
-		<method name="setAdapter(Landroid/widget/ExpandableListAdapter;)V"/>
-		<method name="setChildDivider(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setChildIndicator(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setChildIndicatorBounds(II)V"/>
-		<method name="setChildIndicatorBoundsRelative(II)V" since="18"/>
-		<method name="setGroupIndicator(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setIndicatorBounds(II)V"/>
-		<method name="setIndicatorBoundsRelative(II)V" since="18"/>
-		<method name="setOnChildClickListener(Landroid/widget/ExpandableListView$OnChildClickListener;)V"/>
-		<method name="setOnGroupClickListener(Landroid/widget/ExpandableListView$OnGroupClickListener;)V"/>
-		<method name="setOnGroupCollapseListener(Landroid/widget/ExpandableListView$OnGroupCollapseListener;)V"/>
-		<method name="setOnGroupExpandListener(Landroid/widget/ExpandableListView$OnGroupExpandListener;)V"/>
-		<method name="setSelectedChild(IIZ)Z"/>
-		<method name="setSelectedGroup(I)V"/>
-		<field name="CHILD_INDICATOR_INHERIT"/>
-		<field name="PACKED_POSITION_TYPE_CHILD"/>
-		<field name="PACKED_POSITION_TYPE_GROUP"/>
-		<field name="PACKED_POSITION_TYPE_NULL"/>
-		<field name="PACKED_POSITION_VALUE_NULL"/>
-	</class>
-	<class name="android/widget/ExpandableListView$ExpandableListContextMenuInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/ContextMenu$ContextMenuInfo"/>
-		<method name="&lt;init>(Landroid/view/View;JJ)V"/>
-		<field name="id"/>
-		<field name="packedPosition"/>
-		<field name="targetView"/>
-	</class>
-	<class name="android/widget/ExpandableListView$OnChildClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z"/>
-	</class>
-	<class name="android/widget/ExpandableListView$OnGroupClickListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z"/>
-	</class>
-	<class name="android/widget/ExpandableListView$OnGroupCollapseListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onGroupCollapse(I)V"/>
-	</class>
-	<class name="android/widget/ExpandableListView$OnGroupExpandListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onGroupExpand(I)V"/>
-	</class>
-	<class name="android/widget/Filter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="convertResultToString(Ljava/lang/Object;)Ljava/lang/CharSequence;"/>
-		<method name="filter(Ljava/lang/CharSequence;)V"/>
-		<method name="filter(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterListener;)V"/>
-		<method name="performFiltering(Ljava/lang/CharSequence;)Landroid/widget/Filter$FilterResults;"/>
-		<method name="publishResults(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterResults;)V"/>
-	</class>
-	<class name="android/widget/Filter$FilterListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onFilterComplete(I)V"/>
-	</class>
-	<class name="android/widget/Filter$FilterResults" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="count"/>
-		<field name="values"/>
-	</class>
-	<class name="android/widget/FilterQueryProvider" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="runQuery(Ljava/lang/CharSequence;)Landroid/database/Cursor;"/>
-	</class>
-	<class name="android/widget/Filterable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getFilter()Landroid/widget/Filter;"/>
-	</class>
-	<class name="android/widget/FrameLayout" since="1">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="generateDefaultLayoutParams()Landroid/widget/FrameLayout$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/FrameLayout$LayoutParams;"/>
-		<method name="getConsiderGoneChildrenWhenMeasuring()Z" deprecated="16"/>
-		<method name="getForeground()Landroid/graphics/drawable/Drawable;" removed="23"/>
-		<method name="getForegroundGravity()I" since="16" removed="23"/>
-		<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="21" removed="23"/>
-		<method name="getForegroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" removed="23"/>
-		<method name="getMeasureAllChildren()Z" since="14"/>
-		<method name="setForeground(Landroid/graphics/drawable/Drawable;)V" removed="23"/>
-		<method name="setForegroundGravity(I)V"/>
-		<method name="setForegroundTintList(Landroid/content/res/ColorStateList;)V" since="21" removed="23"/>
-		<method name="setForegroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" removed="23"/>
-		<method name="setMeasureAllChildren(Z)V"/>
-	</class>
-	<class name="android/widget/FrameLayout$LayoutParams" since="1">
-		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/widget/FrameLayout$LayoutParams;)V" since="19"/>
-		<field name="UNSPECIFIED_GRAVITY" since="24"/>
-		<field name="gravity"/>
-	</class>
-	<class name="android/widget/Gallery" since="1" deprecated="16">
-		<extends name="android/widget/AbsSpinner"/>
-		<implements name="android/view/GestureDetector$OnGestureListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="setAnimationDuration(I)V"/>
-		<method name="setCallbackDuringFling(Z)V"/>
-		<method name="setGravity(I)V"/>
-		<method name="setSpacing(I)V"/>
-		<method name="setUnselectedAlpha(F)V"/>
-	</class>
-	<class name="android/widget/Gallery$LayoutParams" since="1">
-		<extends name="android/view/ViewGroup$LayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-	</class>
-	<class name="android/widget/GridLayout" since="14">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="generateDefaultLayoutParams()Landroid/widget/GridLayout$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/GridLayout$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/GridLayout$LayoutParams;"/>
-		<method name="getAlignmentMode()I"/>
-		<method name="getColumnCount()I"/>
-		<method name="getOrientation()I"/>
-		<method name="getRowCount()I"/>
-		<method name="getUseDefaultMargins()Z"/>
-		<method name="isColumnOrderPreserved()Z"/>
-		<method name="isRowOrderPreserved()Z"/>
-		<method name="setAlignmentMode(I)V"/>
-		<method name="setColumnCount(I)V"/>
-		<method name="setColumnOrderPreserved(Z)V"/>
-		<method name="setOrientation(I)V"/>
-		<method name="setRowCount(I)V"/>
-		<method name="setRowOrderPreserved(Z)V"/>
-		<method name="setUseDefaultMargins(Z)V"/>
-		<method name="spec(I)Landroid/widget/GridLayout$Spec;"/>
-		<method name="spec(IF)Landroid/widget/GridLayout$Spec;" since="21"/>
-		<method name="spec(II)Landroid/widget/GridLayout$Spec;"/>
-		<method name="spec(IIF)Landroid/widget/GridLayout$Spec;" since="21"/>
-		<method name="spec(IILandroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Spec;"/>
-		<method name="spec(IILandroid/widget/GridLayout$Alignment;F)Landroid/widget/GridLayout$Spec;" since="21"/>
-		<method name="spec(ILandroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Spec;"/>
-		<method name="spec(ILandroid/widget/GridLayout$Alignment;F)Landroid/widget/GridLayout$Spec;" since="21"/>
-		<field name="ALIGN_BOUNDS"/>
-		<field name="ALIGN_MARGINS"/>
-		<field name="BASELINE"/>
-		<field name="BOTTOM"/>
-		<field name="CENTER"/>
-		<field name="END" since="16"/>
-		<field name="FILL"/>
-		<field name="HORIZONTAL"/>
-		<field name="LEFT"/>
-		<field name="RIGHT"/>
-		<field name="START" since="16"/>
-		<field name="TOP"/>
-		<field name="UNDEFINED"/>
-		<field name="VERTICAL"/>
-	</class>
-	<class name="android/widget/GridLayout$Alignment" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/widget/GridLayout$LayoutParams" since="14">
-		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/widget/GridLayout$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/widget/GridLayout$Spec;Landroid/widget/GridLayout$Spec;)V"/>
-		<method name="setGravity(I)V"/>
-		<field name="columnSpec"/>
-		<field name="rowSpec"/>
-	</class>
-	<class name="android/widget/GridLayout$Spec" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ZIILandroid/widget/GridLayout$Alignment;F)V" since="29"/>
-	</class>
-	<class name="android/widget/GridView" since="1">
-		<extends name="android/widget/AbsListView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getAdapter()Landroid/widget/ListAdapter;"/>
-		<method name="getColumnWidth()I" since="16"/>
-		<method name="getGravity()I" since="16"/>
-		<method name="getHorizontalSpacing()I" since="16"/>
-		<method name="getNumColumns()I" since="11"/>
-		<method name="getRequestedColumnWidth()I" since="16"/>
-		<method name="getRequestedHorizontalSpacing()I" since="16"/>
-		<method name="getStretchMode()I"/>
-		<method name="getVerticalSpacing()I" since="16"/>
-		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
-		<method name="setColumnWidth(I)V"/>
-		<method name="setGravity(I)V"/>
-		<method name="setHorizontalSpacing(I)V"/>
-		<method name="setNumColumns(I)V"/>
-		<method name="setStretchMode(I)V"/>
-		<method name="setVerticalSpacing(I)V"/>
-		<method name="smoothScrollByOffset(I)V" since="11"/>
-		<field name="AUTO_FIT"/>
-		<field name="NO_STRETCH"/>
-		<field name="STRETCH_COLUMN_WIDTH"/>
-		<field name="STRETCH_SPACING"/>
-		<field name="STRETCH_SPACING_UNIFORM" since="3"/>
-	</class>
-	<class name="android/widget/HeaderViewListAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/Filterable"/>
-		<implements name="android/widget/WrapperListAdapter"/>
-		<method name="&lt;init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/widget/ListAdapter;)V"/>
-		<method name="getFootersCount()I"/>
-		<method name="getHeadersCount()I"/>
-		<method name="removeFooter(Landroid/view/View;)Z"/>
-		<method name="removeHeader(Landroid/view/View;)Z"/>
-	</class>
-	<class name="android/widget/HeterogeneousExpandableList" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getChildType(II)I"/>
-		<method name="getChildTypeCount()I"/>
-		<method name="getGroupType(I)I"/>
-		<method name="getGroupTypeCount()I"/>
-	</class>
-	<class name="android/widget/HorizontalScrollView" since="3">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="arrowScroll(I)Z"/>
-		<method name="computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I"/>
-		<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="fling(I)V"/>
-		<method name="fullScroll(I)Z"/>
-		<method name="getMaxScrollAmount()I"/>
-		<method name="isFillViewport()Z"/>
-		<method name="isSmoothScrollingEnabled()Z"/>
-		<method name="pageScroll(I)Z"/>
-		<method name="setFillViewport(Z)V"/>
-		<method name="setSmoothScrollingEnabled(Z)V"/>
-		<method name="smoothScrollBy(II)V"/>
-		<method name="smoothScrollTo(II)V"/>
-	</class>
-	<class name="android/widget/ImageButton" since="1">
-		<extends name="android/widget/ImageView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/ImageSwitcher" since="1">
-		<extends name="android/widget/ViewSwitcher"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="setImageDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setImageResource(I)V"/>
-		<method name="setImageURI(Landroid/net/Uri;)V"/>
-	</class>
-	<class name="android/widget/ImageView" since="1">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="clearColorFilter()V"/>
-		<method name="getAdjustViewBounds()Z" since="16"/>
-		<method name="getBaselineAlignBottom()Z" since="11"/>
-		<method name="getColorFilter()Landroid/graphics/ColorFilter;" since="16"/>
-		<method name="getCropToPadding()Z" since="16"/>
-		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getImageAlpha()I" since="16"/>
-		<method name="getImageMatrix()Landroid/graphics/Matrix;"/>
-		<method name="getImageTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getImageTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="getMaxHeight()I" since="16"/>
-		<method name="getMaxWidth()I" since="16"/>
-		<method name="getScaleType()Landroid/widget/ImageView$ScaleType;"/>
-		<method name="setAdjustViewBounds(Z)V"/>
-		<method name="setAlpha(I)V" deprecated="16"/>
-		<method name="setBaseline(I)V" since="11"/>
-		<method name="setBaselineAlignBottom(Z)V" since="11"/>
-		<method name="setColorFilter(I)V" since="8"/>
-		<method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V"/>
-		<method name="setColorFilter(Landroid/graphics/ColorFilter;)V"/>
-		<method name="setCropToPadding(Z)V" since="16"/>
-		<method name="setFrame(IIII)Z"/>
-		<method name="setImageAlpha(I)V" since="16"/>
-		<method name="setImageBitmap(Landroid/graphics/Bitmap;)V"/>
-		<method name="setImageDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setImageIcon(Landroid/graphics/drawable/Icon;)V" since="23"/>
-		<method name="setImageLevel(I)V"/>
-		<method name="setImageMatrix(Landroid/graphics/Matrix;)V"/>
-		<method name="setImageResource(I)V"/>
-		<method name="setImageState([IZ)V"/>
-		<method name="setImageTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setImageTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setImageURI(Landroid/net/Uri;)V"/>
-		<method name="setMaxHeight(I)V"/>
-		<method name="setMaxWidth(I)V"/>
-		<method name="setScaleType(Landroid/widget/ImageView$ScaleType;)V"/>
-	</class>
-	<class name="android/widget/ImageView$ScaleType" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/widget/ImageView$ScaleType;"/>
-		<method name="values()[Landroid/widget/ImageView$ScaleType;"/>
-		<field name="CENTER"/>
-		<field name="CENTER_CROP"/>
-		<field name="CENTER_INSIDE"/>
-		<field name="FIT_CENTER"/>
-		<field name="FIT_END"/>
-		<field name="FIT_START"/>
-		<field name="FIT_XY"/>
-		<field name="MATRIX"/>
-	</class>
-	<class name="android/widget/LinearLayout" since="1">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="11"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="generateDefaultLayoutParams()Landroid/widget/LinearLayout$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/LinearLayout$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/LinearLayout$LayoutParams;"/>
-		<method name="getBaselineAlignedChildIndex()I"/>
-		<method name="getDividerDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
-		<method name="getDividerPadding()I" since="14"/>
-		<method name="getGravity()I" since="24"/>
-		<method name="getOrientation()I"/>
-		<method name="getShowDividers()I" since="11"/>
-		<method name="getWeightSum()F"/>
-		<method name="isBaselineAligned()Z"/>
-		<method name="isMeasureWithLargestChildEnabled()Z" since="11"/>
-		<method name="setBaselineAligned(Z)V"/>
-		<method name="setBaselineAlignedChildIndex(I)V"/>
-		<method name="setDividerDrawable(Landroid/graphics/drawable/Drawable;)V" since="11"/>
-		<method name="setDividerPadding(I)V" since="14"/>
-		<method name="setGravity(I)V"/>
-		<method name="setHorizontalGravity(I)V"/>
-		<method name="setMeasureWithLargestChildEnabled(Z)V" since="11"/>
-		<method name="setOrientation(I)V"/>
-		<method name="setShowDividers(I)V" since="11"/>
-		<method name="setVerticalGravity(I)V"/>
-		<method name="setWeightSum(F)V"/>
-		<field name="HORIZONTAL"/>
-		<field name="SHOW_DIVIDER_BEGINNING" since="11"/>
-		<field name="SHOW_DIVIDER_END" since="11"/>
-		<field name="SHOW_DIVIDER_MIDDLE" since="11"/>
-		<field name="SHOW_DIVIDER_NONE" since="11"/>
-		<field name="VERTICAL"/>
-	</class>
-	<class name="android/widget/LinearLayout$LayoutParams" since="1">
-		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(IIF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/widget/LinearLayout$LayoutParams;)V" since="19"/>
-		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="gravity"/>
-		<field name="weight"/>
-	</class>
-	<class name="android/widget/ListAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/Adapter"/>
-		<method name="areAllItemsEnabled()Z"/>
-		<method name="isEnabled(I)Z"/>
-	</class>
-	<class name="android/widget/ListPopupWindow" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V"/>
-		<method name="clearListSelection()V"/>
-		<method name="createDragToOpenListener(Landroid/view/View;)Landroid/view/View$OnTouchListener;" since="19"/>
-		<method name="dismiss()V"/>
-		<method name="getAnchorView()Landroid/view/View;"/>
-		<method name="getAnimationStyle()I"/>
-		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getHeight()I"/>
-		<method name="getHorizontalOffset()I"/>
-		<method name="getInputMethodMode()I"/>
-		<method name="getListView()Landroid/widget/ListView;"/>
-		<method name="getPromptPosition()I"/>
-		<method name="getSelectedItem()Ljava/lang/Object;"/>
-		<method name="getSelectedItemId()J"/>
-		<method name="getSelectedItemPosition()I"/>
-		<method name="getSelectedView()Landroid/view/View;"/>
-		<method name="getSoftInputMode()I"/>
-		<method name="getVerticalOffset()I"/>
-		<method name="getWidth()I"/>
-		<method name="isInputMethodNotNeeded()Z"/>
-		<method name="isModal()Z"/>
-		<method name="isShowing()Z"/>
-		<method name="onKeyDown(ILandroid/view/KeyEvent;)Z"/>
-		<method name="onKeyPreIme(ILandroid/view/KeyEvent;)Z"/>
-		<method name="onKeyUp(ILandroid/view/KeyEvent;)Z"/>
-		<method name="performItemClick(I)Z"/>
-		<method name="postShow()V"/>
-		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
-		<method name="setAnchorView(Landroid/view/View;)V"/>
-		<method name="setAnimationStyle(I)V"/>
-		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setContentWidth(I)V"/>
-		<method name="setDropDownGravity(I)V" since="19"/>
-		<method name="setHeight(I)V"/>
-		<method name="setHorizontalOffset(I)V"/>
-		<method name="setInputMethodMode(I)V"/>
-		<method name="setListSelector(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setModal(Z)V"/>
-		<method name="setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V"/>
-		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V"/>
-		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V"/>
-		<method name="setPromptPosition(I)V"/>
-		<method name="setPromptView(Landroid/view/View;)V"/>
-		<method name="setSelection(I)V"/>
-		<method name="setSoftInputMode(I)V"/>
-		<method name="setVerticalOffset(I)V"/>
-		<method name="setWidth(I)V"/>
-		<method name="setWindowLayoutType(I)V" since="23"/>
-		<method name="show()V"/>
-		<field name="INPUT_METHOD_FROM_FOCUSABLE"/>
-		<field name="INPUT_METHOD_NEEDED"/>
-		<field name="INPUT_METHOD_NOT_NEEDED"/>
-		<field name="MATCH_PARENT"/>
-		<field name="POSITION_PROMPT_ABOVE"/>
-		<field name="POSITION_PROMPT_BELOW"/>
-		<field name="WRAP_CONTENT"/>
-	</class>
-	<class name="android/widget/ListView" since="1">
-		<extends name="android/widget/AbsListView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addFooterView(Landroid/view/View;)V"/>
-		<method name="addFooterView(Landroid/view/View;Ljava/lang/Object;Z)V"/>
-		<method name="addHeaderView(Landroid/view/View;)V"/>
-		<method name="addHeaderView(Landroid/view/View;Ljava/lang/Object;Z)V"/>
-		<method name="areFooterDividersEnabled()Z" since="19"/>
-		<method name="areHeaderDividersEnabled()Z" since="19"/>
-		<method name="clearChoices()V" removed="11"/>
-		<method name="findViewTraversal(I)Landroid/view/View;" removed="26"/>
-		<method name="findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;" removed="26"/>
-		<method name="getAdapter()Landroid/widget/ListAdapter;"/>
-		<method name="getCheckItemIds()[J" since="4" deprecated="16"/>
-		<method name="getCheckedItemIds()[J" since="8" removed="11"/>
-		<method name="getCheckedItemPosition()I" removed="11"/>
-		<method name="getCheckedItemPositions()Landroid/util/SparseBooleanArray;" removed="11"/>
-		<method name="getChoiceMode()I" removed="11"/>
-		<method name="getDivider()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getDividerHeight()I"/>
-		<method name="getFooterViewsCount()I"/>
-		<method name="getHeaderViewsCount()I"/>
-		<method name="getItemsCanFocus()Z"/>
-		<method name="getMaxScrollAmount()I"/>
-		<method name="getOverscrollFooter()Landroid/graphics/drawable/Drawable;" since="9"/>
-		<method name="getOverscrollHeader()Landroid/graphics/drawable/Drawable;" since="9"/>
-		<method name="isItemChecked(I)Z" removed="11"/>
-		<method name="removeFooterView(Landroid/view/View;)Z"/>
-		<method name="removeHeaderView(Landroid/view/View;)Z"/>
-		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
-		<method name="setChoiceMode(I)V" removed="11"/>
-		<method name="setDivider(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setDividerHeight(I)V"/>
-		<method name="setFooterDividersEnabled(Z)V" since="3"/>
-		<method name="setHeaderDividersEnabled(Z)V" since="3"/>
-		<method name="setItemChecked(IZ)V" removed="11"/>
-		<method name="setItemsCanFocus(Z)V"/>
-		<method name="setOverscrollFooter(Landroid/graphics/drawable/Drawable;)V" since="9"/>
-		<method name="setOverscrollHeader(Landroid/graphics/drawable/Drawable;)V" since="9"/>
-		<method name="setSelectionAfterHeaderView()V"/>
-		<method name="setSelectionFromTop(II)V" removed="21"/>
-		<method name="smoothScrollByOffset(I)V" since="11"/>
-		<field name="CHOICE_MODE_MULTIPLE" removed="11"/>
-		<field name="CHOICE_MODE_NONE" removed="11"/>
-		<field name="CHOICE_MODE_SINGLE" removed="11"/>
-	</class>
-	<class name="android/widget/ListView$FixedViewInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/widget/ListView;)V"/>
-		<field name="data"/>
-		<field name="isSelectable"/>
-		<field name="view"/>
-	</class>
-	<class name="android/widget/Magnifier" since="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/view/View;)V"/>
-		<method name="dismiss()V"/>
-		<method name="getHeight()I"/>
-		<method name="getWidth()I"/>
-		<method name="getZoom()F"/>
-		<method name="show(FF)V"/>
-		<method name="update()V"/>
-	</class>
-	<class name="android/widget/MediaController" since="1">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Z)V"/>
-		<method name="hide()V"/>
-		<method name="isShowing()Z"/>
-		<method name="setAnchorView(Landroid/view/View;)V"/>
-		<method name="setMediaPlayer(Landroid/widget/MediaController$MediaPlayerControl;)V"/>
-		<method name="setPrevNextListeners(Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;)V"/>
-		<method name="show()V"/>
-		<method name="show(I)V"/>
-	</class>
-	<class name="android/widget/MediaController$MediaPlayerControl" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="canPause()Z" since="5"/>
-		<method name="canSeekBackward()Z" since="5"/>
-		<method name="canSeekForward()Z" since="5"/>
-		<method name="getAudioSessionId()I" since="18"/>
-		<method name="getBufferPercentage()I"/>
-		<method name="getCurrentPosition()I"/>
-		<method name="getDuration()I"/>
-		<method name="isPlaying()Z"/>
-		<method name="pause()V"/>
-		<method name="seekTo(I)V"/>
-		<method name="start()V"/>
-	</class>
-	<class name="android/widget/MultiAutoCompleteTextView" since="1">
-		<extends name="android/widget/AutoCompleteTextView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="performFiltering(Ljava/lang/CharSequence;III)V"/>
-		<method name="setTokenizer(Landroid/widget/MultiAutoCompleteTextView$Tokenizer;)V"/>
-	</class>
-	<class name="android/widget/MultiAutoCompleteTextView$CommaTokenizer" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/MultiAutoCompleteTextView$Tokenizer"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="android/widget/MultiAutoCompleteTextView$Tokenizer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="findTokenEnd(Ljava/lang/CharSequence;I)I"/>
-		<method name="findTokenStart(Ljava/lang/CharSequence;I)I"/>
-		<method name="terminateToken(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
-	</class>
-	<class name="android/widget/NumberPicker" since="11">
-		<extends name="android/widget/LinearLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getDisplayedValues()[Ljava/lang/String;"/>
-		<method name="getMaxValue()I"/>
-		<method name="getMinValue()I"/>
-		<method name="getValue()I"/>
-		<method name="getWrapSelectorWheel()Z"/>
-		<method name="setDisplayedValues([Ljava/lang/String;)V"/>
-		<method name="setFormatter(Landroid/widget/NumberPicker$Formatter;)V"/>
-		<method name="setMaxValue(I)V"/>
-		<method name="setMinValue(I)V"/>
-		<method name="setOnLongPressUpdateInterval(J)V"/>
-		<method name="setOnScrollListener(Landroid/widget/NumberPicker$OnScrollListener;)V"/>
-		<method name="setOnValueChangedListener(Landroid/widget/NumberPicker$OnValueChangeListener;)V"/>
-		<method name="setValue(I)V"/>
-		<method name="setWrapSelectorWheel(Z)V"/>
-	</class>
-	<class name="android/widget/NumberPicker$Formatter" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="format(I)Ljava/lang/String;"/>
-	</class>
-	<class name="android/widget/NumberPicker$OnScrollListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onScrollStateChange(Landroid/widget/NumberPicker;I)V"/>
-		<field name="SCROLL_STATE_FLING"/>
-		<field name="SCROLL_STATE_IDLE"/>
-		<field name="SCROLL_STATE_TOUCH_SCROLL"/>
-	</class>
-	<class name="android/widget/NumberPicker$OnValueChangeListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onValueChange(Landroid/widget/NumberPicker;II)V"/>
-	</class>
-	<class name="android/widget/OverScroller" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;FF)V" deprecated="26"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;FFZ)V" since="11" deprecated="26"/>
-		<method name="abortAnimation()V"/>
-		<method name="computeScrollOffset()Z"/>
-		<method name="fling(IIIIIIII)V"/>
-		<method name="fling(IIIIIIIIII)V"/>
-		<method name="forceFinished(Z)V"/>
-		<method name="getCurrVelocity()F" since="14"/>
-		<method name="getCurrX()I"/>
-		<method name="getCurrY()I"/>
-		<method name="getFinalX()I"/>
-		<method name="getFinalY()I"/>
-		<method name="getStartX()I"/>
-		<method name="getStartY()I"/>
-		<method name="isFinished()Z"/>
-		<method name="isOverScrolled()Z"/>
-		<method name="notifyHorizontalEdgeReached(III)V"/>
-		<method name="notifyVerticalEdgeReached(III)V"/>
-		<method name="setFriction(F)V" since="11"/>
-		<method name="springBack(IIIIII)Z"/>
-		<method name="startScroll(IIII)V"/>
-		<method name="startScroll(IIIII)V"/>
-	</class>
-	<class name="android/widget/PopupMenu" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;I)V" since="19"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;III)V" since="22"/>
-		<method name="dismiss()V"/>
-		<method name="getDragToOpenListener()Landroid/view/View$OnTouchListener;" since="19"/>
-		<method name="getGravity()I" since="23"/>
-		<method name="getMenu()Landroid/view/Menu;"/>
-		<method name="getMenuInflater()Landroid/view/MenuInflater;"/>
-		<method name="inflate(I)V" since="14"/>
-		<method name="setGravity(I)V" since="23"/>
-		<method name="setOnDismissListener(Landroid/widget/PopupMenu$OnDismissListener;)V" since="14"/>
-		<method name="setOnMenuItemClickListener(Landroid/widget/PopupMenu$OnMenuItemClickListener;)V"/>
-		<method name="show()V"/>
-	</class>
-	<class name="android/widget/PopupMenu$OnDismissListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onDismiss(Landroid/widget/PopupMenu;)V"/>
-	</class>
-	<class name="android/widget/PopupMenu$OnMenuItemClickListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
-	</class>
-	<class name="android/widget/PopupWindow" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="11"/>
-		<method name="&lt;init>(Landroid/view/View;)V"/>
-		<method name="&lt;init>(Landroid/view/View;II)V"/>
-		<method name="&lt;init>(Landroid/view/View;IIZ)V"/>
-		<method name="dismiss()V"/>
-		<method name="getAnimationStyle()I"/>
-		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getContentView()Landroid/view/View;"/>
-		<method name="getElevation()F" since="21"/>
-		<method name="getEnterTransition()Landroid/transition/Transition;" since="24"/>
-		<method name="getExitTransition()Landroid/transition/Transition;" since="24"/>
-		<method name="getHeight()I"/>
-		<method name="getInputMethodMode()I" since="3"/>
-		<method name="getMaxAvailableHeight(Landroid/view/View;)I"/>
-		<method name="getMaxAvailableHeight(Landroid/view/View;I)I" since="3"/>
-		<method name="getMaxAvailableHeight(Landroid/view/View;IZ)I" since="24"/>
-		<method name="getOverlapAnchor()Z" since="23"/>
-		<method name="getSoftInputMode()I" since="4"/>
-		<method name="getWidth()I"/>
-		<method name="getWindowLayoutType()I" since="23"/>
-		<method name="isAboveAnchor()Z" since="3"/>
-		<method name="isAttachedInDecor()Z" since="22"/>
-		<method name="isClippingEnabled()Z" since="3"/>
-		<method name="isFocusable()Z"/>
-		<method name="isOutsideTouchable()Z" since="3"/>
-		<method name="isShowing()Z"/>
-		<method name="isSplitTouchEnabled()Z" since="11"/>
-		<method name="isTouchable()Z" since="3"/>
-		<method name="setAnimationStyle(I)V"/>
-		<method name="setAttachedInDecor(Z)V" since="22"/>
-		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setClippingEnabled(Z)V" since="3"/>
-		<method name="setContentView(Landroid/view/View;)V"/>
-		<method name="setElevation(F)V" since="21"/>
-		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="23"/>
-		<method name="setExitTransition(Landroid/transition/Transition;)V" since="23"/>
-		<method name="setFocusable(Z)V"/>
-		<method name="setHeight(I)V"/>
-		<method name="setIgnoreCheekPress()V"/>
-		<method name="setInputMethodMode(I)V" since="3"/>
-		<method name="setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V"/>
-		<method name="setOutsideTouchable(Z)V" since="3"/>
-		<method name="setOverlapAnchor(Z)V" since="23"/>
-		<method name="setSoftInputMode(I)V" since="4"/>
-		<method name="setSplitTouchEnabled(Z)V" since="11"/>
-		<method name="setTouchInterceptor(Landroid/view/View$OnTouchListener;)V" since="3"/>
-		<method name="setTouchable(Z)V" since="3"/>
-		<method name="setWidth(I)V"/>
-		<method name="setWindowLayoutMode(II)V" since="3" deprecated="23"/>
-		<method name="setWindowLayoutType(I)V" since="23"/>
-		<method name="showAsDropDown(Landroid/view/View;)V"/>
-		<method name="showAsDropDown(Landroid/view/View;II)V"/>
-		<method name="showAsDropDown(Landroid/view/View;III)V" since="19"/>
-		<method name="showAtLocation(Landroid/view/View;III)V"/>
-		<method name="update()V" since="3"/>
-		<method name="update(II)V" since="4"/>
-		<method name="update(IIII)V"/>
-		<method name="update(IIIIZ)V" since="3"/>
-		<method name="update(Landroid/view/View;II)V"/>
-		<method name="update(Landroid/view/View;IIII)V"/>
-		<field name="INPUT_METHOD_FROM_FOCUSABLE" since="3"/>
-		<field name="INPUT_METHOD_NEEDED" since="3"/>
-		<field name="INPUT_METHOD_NOT_NEEDED" since="3"/>
-	</class>
-	<class name="android/widget/PopupWindow$OnDismissListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onDismiss()V"/>
-	</class>
-	<class name="android/widget/ProgressBar" since="1">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getIndeterminateDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getIndeterminateTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getIndeterminateTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
-		<method name="getMax()I"/>
-		<method name="getMin()I" since="26"/>
-		<method name="getProgress()I"/>
-		<method name="getProgressBackgroundTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getProgressBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="getProgressDrawable()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getProgressTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="getSecondaryProgress()I"/>
-		<method name="getSecondaryProgressTintList()Landroid/content/res/ColorStateList;" since="21"/>
-		<method name="getSecondaryProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
-		<method name="incrementProgressBy(I)V"/>
-		<method name="incrementSecondaryProgressBy(I)V"/>
-		<method name="isAnimating()Z" since="26"/>
-		<method name="isIndeterminate()Z"/>
-		<method name="setIndeterminate(Z)V"/>
-		<method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setIndeterminateDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21"/>
-		<method name="setIndeterminateTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setIndeterminateTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setInterpolator(Landroid/content/Context;I)V"/>
-		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V"/>
-		<method name="setMax(I)V"/>
-		<method name="setMin(I)V" since="26"/>
-		<method name="setProgress(I)V"/>
-		<method name="setProgress(IZ)V" since="24"/>
-		<method name="setProgressBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setProgressBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setProgressDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21"/>
-		<method name="setProgressTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-		<method name="setSecondaryProgress(I)V"/>
-		<method name="setSecondaryProgressTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
-		<method name="setSecondaryProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
-	</class>
-	<class name="android/widget/QuickContactBadge" since="5">
-		<extends name="android/widget/ImageView"/>
-		<implements name="android/view/View$OnClickListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="assignContactFromEmail(Ljava/lang/String;Z)V"/>
-		<method name="assignContactFromEmail(Ljava/lang/String;ZLandroid/os/Bundle;)V" since="18"/>
-		<method name="assignContactFromPhone(Ljava/lang/String;Z)V"/>
-		<method name="assignContactFromPhone(Ljava/lang/String;ZLandroid/os/Bundle;)V" since="18"/>
-		<method name="assignContactUri(Landroid/net/Uri;)V"/>
-		<method name="setExcludeMimes([Ljava/lang/String;)V"/>
-		<method name="setImageToDefault()V" since="11"/>
-		<method name="setMode(I)V"/>
-		<method name="setOverlay(Landroid/graphics/drawable/Drawable;)V" since="21"/>
-		<method name="setPrioritizedMimeType(Ljava/lang/String;)V" since="23"/>
-		<field name="mExcludeMimes"/>
-	</class>
-	<class name="android/widget/RadioButton" since="1">
-		<extends name="android/widget/CompoundButton"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/RadioGroup" since="1">
-		<extends name="android/widget/LinearLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="check(I)V"/>
-		<method name="clearCheck()V"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RadioGroup$LayoutParams;"/>
-		<method name="getCheckedRadioButtonId()I"/>
-		<method name="setOnCheckedChangeListener(Landroid/widget/RadioGroup$OnCheckedChangeListener;)V"/>
-	</class>
-	<class name="android/widget/RadioGroup$LayoutParams" since="1">
-		<extends name="android/widget/LinearLayout$LayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(IIF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-	</class>
-	<class name="android/widget/RadioGroup$OnCheckedChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onCheckedChanged(Landroid/widget/RadioGroup;I)V"/>
-	</class>
-	<class name="android/widget/RatingBar" since="1">
-		<extends name="android/widget/AbsSeekBar"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getNumStars()I"/>
-		<method name="getOnRatingBarChangeListener()Landroid/widget/RatingBar$OnRatingBarChangeListener;"/>
-		<method name="getRating()F"/>
-		<method name="getStepSize()F"/>
-		<method name="isIndicator()Z"/>
-		<method name="setIsIndicator(Z)V"/>
-		<method name="setNumStars(I)V"/>
-		<method name="setOnRatingBarChangeListener(Landroid/widget/RatingBar$OnRatingBarChangeListener;)V"/>
-		<method name="setRating(F)V"/>
-		<method name="setStepSize(F)V"/>
-	</class>
-	<class name="android/widget/RatingBar$OnRatingBarChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onRatingChanged(Landroid/widget/RatingBar;FZ)V"/>
-	</class>
-	<class name="android/widget/RelativeLayout" since="1">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RelativeLayout$LayoutParams;"/>
-		<method name="getGravity()I" since="16"/>
-		<method name="setGravity(I)V"/>
-		<method name="setHorizontalGravity(I)V"/>
-		<method name="setIgnoreGravity(I)V"/>
-		<method name="setVerticalGravity(I)V"/>
-		<field name="ABOVE"/>
-		<field name="ALIGN_BASELINE"/>
-		<field name="ALIGN_BOTTOM"/>
-		<field name="ALIGN_END" since="17"/>
-		<field name="ALIGN_LEFT"/>
-		<field name="ALIGN_PARENT_BOTTOM"/>
-		<field name="ALIGN_PARENT_END" since="17"/>
-		<field name="ALIGN_PARENT_LEFT"/>
-		<field name="ALIGN_PARENT_RIGHT"/>
-		<field name="ALIGN_PARENT_START" since="17"/>
-		<field name="ALIGN_PARENT_TOP"/>
-		<field name="ALIGN_RIGHT"/>
-		<field name="ALIGN_START" since="17"/>
-		<field name="ALIGN_TOP"/>
-		<field name="BELOW"/>
-		<field name="CENTER_HORIZONTAL"/>
-		<field name="CENTER_IN_PARENT"/>
-		<field name="CENTER_VERTICAL"/>
-		<field name="END_OF" since="17"/>
-		<field name="LEFT_OF"/>
-		<field name="RIGHT_OF"/>
-		<field name="START_OF" since="17"/>
-		<field name="TRUE"/>
-	</class>
-	<class name="android/widget/RelativeLayout$LayoutParams" since="1">
-		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/widget/RelativeLayout$LayoutParams;)V" since="19"/>
-		<method name="addRule(I)V"/>
-		<method name="addRule(II)V"/>
-		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getRule(I)I" since="23"/>
-		<method name="getRules()[I"/>
-		<method name="removeRule(I)V" since="17"/>
-		<field name="alignWithParent"/>
-	</class>
-	<class name="android/widget/RemoteViews" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<implements name="android/view/LayoutInflater$Filter"/>
-		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
-		<method name="&lt;init>(Landroid/widget/RemoteViews;)V" since="28"/>
-		<method name="&lt;init>(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;)V" since="16"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="addView(ILandroid/widget/RemoteViews;)V" since="7"/>
-		<method name="apply(Landroid/content/Context;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="clone()Landroid/widget/RemoteViews;" since="9" deprecated="28"/>
-		<method name="getLayoutId()I"/>
-		<method name="getPackage()Ljava/lang/String;"/>
-		<method name="reapply(Landroid/content/Context;Landroid/view/View;)V"/>
-		<method name="removeAllViews(I)V" since="7"/>
-		<method name="setAccessibilityTraversalAfter(II)V" since="22"/>
-		<method name="setAccessibilityTraversalBefore(II)V" since="22"/>
-		<method name="setBitmap(ILjava/lang/String;Landroid/graphics/Bitmap;)V" since="3"/>
-		<method name="setBoolean(ILjava/lang/String;Z)V" since="3"/>
-		<method name="setBundle(ILjava/lang/String;Landroid/os/Bundle;)V" since="8"/>
-		<method name="setByte(ILjava/lang/String;B)V" since="3"/>
-		<method name="setChar(ILjava/lang/String;C)V" since="3"/>
-		<method name="setCharSequence(ILjava/lang/String;Ljava/lang/CharSequence;)V" since="3"/>
-		<method name="setChronometer(IJLjava/lang/String;Z)V"/>
-		<method name="setChronometerCountDown(IZ)V" since="24"/>
-		<method name="setContentDescription(ILjava/lang/CharSequence;)V" since="15"/>
-		<method name="setDisplayedChild(II)V" since="12"/>
-		<method name="setDouble(ILjava/lang/String;D)V" since="3"/>
-		<method name="setEmptyView(II)V" since="11"/>
-		<method name="setFloat(ILjava/lang/String;F)V" since="3"/>
-		<method name="setIcon(ILjava/lang/String;Landroid/graphics/drawable/Icon;)V" since="23"/>
-		<method name="setImageViewBitmap(ILandroid/graphics/Bitmap;)V" since="3"/>
-		<method name="setImageViewIcon(ILandroid/graphics/drawable/Icon;)V" since="23"/>
-		<method name="setImageViewResource(II)V"/>
-		<method name="setImageViewUri(ILandroid/net/Uri;)V"/>
-		<method name="setInt(ILjava/lang/String;I)V" since="3"/>
-		<method name="setIntent(ILjava/lang/String;Landroid/content/Intent;)V" since="11"/>
-		<method name="setLabelFor(II)V" since="17"/>
-		<method name="setLong(ILjava/lang/String;J)V" since="3"/>
-		<method name="setOnClickFillInIntent(ILandroid/content/Intent;)V" since="11"/>
-		<method name="setOnClickPendingIntent(ILandroid/app/PendingIntent;)V" since="3"/>
-		<method name="setPendingIntentTemplate(ILandroid/app/PendingIntent;)V" since="11"/>
-		<method name="setProgressBar(IIIZ)V"/>
-		<method name="setRelativeScrollPosition(II)V" since="11"/>
-		<method name="setRemoteAdapter(IILandroid/content/Intent;)V" since="11" deprecated="16"/>
-		<method name="setRemoteAdapter(ILandroid/content/Intent;)V" since="14"/>
-		<method name="setScrollPosition(II)V" since="11"/>
-		<method name="setShort(ILjava/lang/String;S)V" since="3"/>
-		<method name="setString(ILjava/lang/String;Ljava/lang/String;)V" since="3"/>
-		<method name="setTextColor(II)V" since="3"/>
-		<method name="setTextViewCompoundDrawables(IIIII)V" since="16"/>
-		<method name="setTextViewCompoundDrawablesRelative(IIIII)V" since="16"/>
-		<method name="setTextViewText(ILjava/lang/CharSequence;)V"/>
-		<method name="setTextViewTextSize(IIF)V" since="16"/>
-		<method name="setUri(ILjava/lang/String;Landroid/net/Uri;)V" since="3"/>
-		<method name="setViewPadding(IIIII)V" since="16"/>
-		<method name="setViewVisibility(II)V"/>
-		<method name="showNext(I)V" since="11"/>
-		<method name="showPrevious(I)V" since="11"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/widget/RemoteViews$ActionException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V" since="3"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/widget/RemoteViews$RemoteView" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="android/widget/RemoteViewsService" since="11">
-		<extends name="android/app/Service"/>
-		<method name="&lt;init>()V"/>
-		<method name="onGetViewFactory(Landroid/content/Intent;)Landroid/widget/RemoteViewsService$RemoteViewsFactory;"/>
-	</class>
-	<class name="android/widget/RemoteViewsService$RemoteViewsFactory" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="getCount()I"/>
-		<method name="getItemId(I)J"/>
-		<method name="getLoadingView()Landroid/widget/RemoteViews;"/>
-		<method name="getViewAt(I)Landroid/widget/RemoteViews;"/>
-		<method name="getViewTypeCount()I"/>
-		<method name="hasStableIds()Z"/>
-		<method name="onCreate()V"/>
-		<method name="onDataSetChanged()V"/>
-		<method name="onDestroy()V"/>
-	</class>
-	<class name="android/widget/ResourceCursorAdapter" since="1">
-		<extends name="android/widget/CursorAdapter"/>
-		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;I)V" since="11"/>
-		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;Z)V" since="3"/>
-		<method name="setDropDownViewResource(I)V"/>
-		<method name="setViewResource(I)V" since="3"/>
-	</class>
-	<class name="android/widget/ResourceCursorTreeAdapter" since="1">
-		<extends name="android/widget/CursorTreeAdapter"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;II)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;III)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;IIII)V"/>
-	</class>
-	<class name="android/widget/ScrollView" since="1">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="arrowScroll(I)Z"/>
-		<method name="computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I"/>
-		<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z"/>
-		<method name="fling(I)V"/>
-		<method name="fullScroll(I)Z"/>
-		<method name="getMaxScrollAmount()I"/>
-		<method name="isFillViewport()Z"/>
-		<method name="isSmoothScrollingEnabled()Z"/>
-		<method name="pageScroll(I)Z"/>
-		<method name="setFillViewport(Z)V"/>
-		<method name="setSmoothScrollingEnabled(Z)V"/>
-		<method name="smoothScrollBy(II)V"/>
-		<method name="smoothScrollTo(II)V"/>
-	</class>
-	<class name="android/widget/Scroller" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V" since="11"/>
-		<method name="abortAnimation()V"/>
-		<method name="computeScrollOffset()Z"/>
-		<method name="extendDuration(I)V"/>
-		<method name="fling(IIIIIIII)V"/>
-		<method name="forceFinished(Z)V"/>
-		<method name="getCurrVelocity()F" since="14"/>
-		<method name="getCurrX()I"/>
-		<method name="getCurrY()I"/>
-		<method name="getDuration()I"/>
-		<method name="getFinalX()I"/>
-		<method name="getFinalY()I"/>
-		<method name="getStartX()I" since="3"/>
-		<method name="getStartY()I" since="3"/>
-		<method name="isFinished()Z"/>
-		<method name="setFinalX(I)V"/>
-		<method name="setFinalY(I)V"/>
-		<method name="setFriction(F)V" since="11"/>
-		<method name="startScroll(IIII)V"/>
-		<method name="startScroll(IIIII)V"/>
-		<method name="timePassed()I"/>
-	</class>
-	<class name="android/widget/SearchView" since="11">
-		<extends name="android/widget/LinearLayout"/>
-		<implements name="android/view/CollapsibleActionView" since="14"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getImeOptions()I" since="16"/>
-		<method name="getInputType()I" since="16"/>
-		<method name="getMaxWidth()I" since="16"/>
-		<method name="getQuery()Ljava/lang/CharSequence;"/>
-		<method name="getQueryHint()Ljava/lang/CharSequence;" since="16"/>
-		<method name="getSuggestionsAdapter()Landroid/widget/CursorAdapter;"/>
-		<method name="isIconfiedByDefault()Z"/>
-		<method name="isIconified()Z"/>
-		<method name="isQueryRefinementEnabled()Z"/>
-		<method name="isSubmitButtonEnabled()Z"/>
-		<method name="setIconified(Z)V"/>
-		<method name="setIconifiedByDefault(Z)V"/>
-		<method name="setImeOptions(I)V" since="14"/>
-		<method name="setInputType(I)V" since="14"/>
-		<method name="setMaxWidth(I)V"/>
-		<method name="setOnCloseListener(Landroid/widget/SearchView$OnCloseListener;)V"/>
-		<method name="setOnQueryTextFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V"/>
-		<method name="setOnQueryTextListener(Landroid/widget/SearchView$OnQueryTextListener;)V"/>
-		<method name="setOnSearchClickListener(Landroid/view/View$OnClickListener;)V"/>
-		<method name="setOnSuggestionListener(Landroid/widget/SearchView$OnSuggestionListener;)V"/>
-		<method name="setQuery(Ljava/lang/CharSequence;Z)V"/>
-		<method name="setQueryHint(Ljava/lang/CharSequence;)V"/>
-		<method name="setQueryRefinementEnabled(Z)V"/>
-		<method name="setSearchableInfo(Landroid/app/SearchableInfo;)V"/>
-		<method name="setSubmitButtonEnabled(Z)V"/>
-		<method name="setSuggestionsAdapter(Landroid/widget/CursorAdapter;)V"/>
-	</class>
-	<class name="android/widget/SearchView$OnCloseListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onClose()Z"/>
-	</class>
-	<class name="android/widget/SearchView$OnQueryTextListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onQueryTextChange(Ljava/lang/String;)Z"/>
-		<method name="onQueryTextSubmit(Ljava/lang/String;)Z"/>
-	</class>
-	<class name="android/widget/SearchView$OnSuggestionListener" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="onSuggestionClick(I)Z"/>
-		<method name="onSuggestionSelect(I)Z"/>
-	</class>
-	<class name="android/widget/SectionIndexer" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="getPositionForSection(I)I"/>
-		<method name="getSectionForPosition(I)I"/>
-		<method name="getSections()[Ljava/lang/Object;"/>
-	</class>
-	<class name="android/widget/SeekBar" since="1">
-		<extends name="android/widget/AbsSeekBar"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="setOnSeekBarChangeListener(Landroid/widget/SeekBar$OnSeekBarChangeListener;)V"/>
-	</class>
-	<class name="android/widget/SeekBar$OnSeekBarChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onProgressChanged(Landroid/widget/SeekBar;IZ)V"/>
-		<method name="onStartTrackingTouch(Landroid/widget/SeekBar;)V"/>
-		<method name="onStopTrackingTouch(Landroid/widget/SeekBar;)V"/>
-	</class>
-	<class name="android/widget/ShareActionProvider" since="14">
-		<extends name="android/view/ActionProvider"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="setOnShareTargetSelectedListener(Landroid/widget/ShareActionProvider$OnShareTargetSelectedListener;)V"/>
-		<method name="setShareHistoryFileName(Ljava/lang/String;)V"/>
-		<method name="setShareIntent(Landroid/content/Intent;)V"/>
-		<field name="DEFAULT_SHARE_HISTORY_FILE_NAME"/>
-	</class>
-	<class name="android/widget/ShareActionProvider$OnShareTargetSelectedListener" since="14">
-		<extends name="java/lang/Object"/>
-		<method name="onShareTargetSelected(Landroid/widget/ShareActionProvider;Landroid/content/Intent;)Z"/>
-	</class>
-	<class name="android/widget/SimpleAdapter" since="1">
-		<extends name="android/widget/BaseAdapter"/>
-		<implements name="android/widget/Filterable"/>
-		<implements name="android/widget/ThemedSpinnerAdapter" since="23"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;I[Ljava/lang/String;[I)V"/>
-		<method name="getViewBinder()Landroid/widget/SimpleAdapter$ViewBinder;"/>
-		<method name="setDropDownViewResource(I)V"/>
-		<method name="setViewBinder(Landroid/widget/SimpleAdapter$ViewBinder;)V"/>
-		<method name="setViewImage(Landroid/widget/ImageView;I)V"/>
-		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V"/>
-		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/widget/SimpleAdapter$ViewBinder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="setViewValue(Landroid/view/View;Ljava/lang/Object;Ljava/lang/String;)Z"/>
-	</class>
-	<class name="android/widget/SimpleCursorAdapter" since="1">
-		<extends name="android/widget/ResourceCursorAdapter"/>
-		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[I)V" deprecated="16"/>
-		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[II)V" since="11"/>
-		<method name="changeCursorAndColumns(Landroid/database/Cursor;[Ljava/lang/String;[I)V" since="3"/>
-		<method name="getCursorToStringConverter()Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;"/>
-		<method name="getStringConversionColumn()I"/>
-		<method name="getViewBinder()Landroid/widget/SimpleCursorAdapter$ViewBinder;"/>
-		<method name="setCursorToStringConverter(Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;)V"/>
-		<method name="setStringConversionColumn(I)V"/>
-		<method name="setViewBinder(Landroid/widget/SimpleCursorAdapter$ViewBinder;)V"/>
-		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V"/>
-		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/widget/SimpleCursorAdapter$CursorToStringConverter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;"/>
-	</class>
-	<class name="android/widget/SimpleCursorAdapter$ViewBinder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="setViewValue(Landroid/view/View;Landroid/database/Cursor;I)Z"/>
-	</class>
-	<class name="android/widget/SimpleCursorTreeAdapter" since="1">
-		<extends name="android/widget/ResourceCursorTreeAdapter"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;II[Ljava/lang/String;[III[Ljava/lang/String;[I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;II[Ljava/lang/String;[II[Ljava/lang/String;[I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;I[Ljava/lang/String;[II[Ljava/lang/String;[I)V"/>
-		<method name="getViewBinder()Landroid/widget/SimpleCursorTreeAdapter$ViewBinder;" since="5"/>
-		<method name="setViewBinder(Landroid/widget/SimpleCursorTreeAdapter$ViewBinder;)V" since="5"/>
-		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V"/>
-		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V" since="5"/>
-	</class>
-	<class name="android/widget/SimpleCursorTreeAdapter$ViewBinder" since="5">
-		<extends name="java/lang/Object"/>
-		<method name="setViewValue(Landroid/view/View;Landroid/database/Cursor;I)Z"/>
-	</class>
-	<class name="android/widget/SimpleExpandableListAdapter" since="1">
-		<extends name="android/widget/BaseExpandableListAdapter"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;II[Ljava/lang/String;[ILjava/util/List;II[Ljava/lang/String;[I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;II[Ljava/lang/String;[ILjava/util/List;I[Ljava/lang/String;[I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;I[Ljava/lang/String;[ILjava/util/List;I[Ljava/lang/String;[I)V"/>
-		<method name="newChildView(ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
-		<method name="newGroupView(ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
-	</class>
-	<class name="android/widget/SlidingDrawer" since="3" deprecated="17">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="animateClose()V"/>
-		<method name="animateOpen()V"/>
-		<method name="animateToggle()V"/>
-		<method name="close()V"/>
-		<method name="getContent()Landroid/view/View;"/>
-		<method name="getHandle()Landroid/view/View;"/>
-		<method name="isMoving()Z"/>
-		<method name="isOpened()Z"/>
-		<method name="lock()V"/>
-		<method name="open()V"/>
-		<method name="setOnDrawerCloseListener(Landroid/widget/SlidingDrawer$OnDrawerCloseListener;)V"/>
-		<method name="setOnDrawerOpenListener(Landroid/widget/SlidingDrawer$OnDrawerOpenListener;)V"/>
-		<method name="setOnDrawerScrollListener(Landroid/widget/SlidingDrawer$OnDrawerScrollListener;)V"/>
-		<method name="toggle()V"/>
-		<method name="unlock()V"/>
-		<field name="ORIENTATION_HORIZONTAL"/>
-		<field name="ORIENTATION_VERTICAL"/>
-	</class>
-	<class name="android/widget/SlidingDrawer$OnDrawerCloseListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onDrawerClosed()V"/>
-	</class>
-	<class name="android/widget/SlidingDrawer$OnDrawerOpenListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onDrawerOpened()V"/>
-	</class>
-	<class name="android/widget/SlidingDrawer$OnDrawerScrollListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onScrollEnded()V"/>
-		<method name="onScrollStarted()V"/>
-	</class>
-	<class name="android/widget/Space" since="14">
-		<extends name="android/view/View"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/Spinner" since="1">
-		<extends name="android/widget/AbsSpinner"/>
-		<implements name="android/content/DialogInterface$OnClickListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;I)V" since="11"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="11"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;III)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;IIILandroid/content/res/Resources$Theme;)V" since="23"/>
-		<method name="getDropDownHorizontalOffset()I" since="16"/>
-		<method name="getDropDownVerticalOffset()I" since="16"/>
-		<method name="getDropDownWidth()I" since="16"/>
-		<method name="getGravity()I" since="16"/>
-		<method name="getPopupBackground()Landroid/graphics/drawable/Drawable;" since="16"/>
-		<method name="getPopupContext()Landroid/content/Context;" since="23"/>
-		<method name="getPrompt()Ljava/lang/CharSequence;"/>
-		<method name="setDropDownHorizontalOffset(I)V" since="16"/>
-		<method name="setDropDownVerticalOffset(I)V" since="16"/>
-		<method name="setDropDownWidth(I)V" since="16"/>
-		<method name="setGravity(I)V" since="11"/>
-		<method name="setPopupBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
-		<method name="setPopupBackgroundResource(I)V" since="16"/>
-		<method name="setPrompt(Ljava/lang/CharSequence;)V"/>
-		<method name="setPromptId(I)V"/>
-		<field name="MODE_DIALOG" since="11"/>
-		<field name="MODE_DROPDOWN" since="11"/>
-	</class>
-	<class name="android/widget/SpinnerAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/Adapter"/>
-		<method name="getDropDownView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
-	</class>
-	<class name="android/widget/StackView" since="11">
-		<extends name="android/widget/AdapterViewAnimator"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="14"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-	</class>
-	<class name="android/widget/Switch" since="14">
-		<extends name="android/widget/CompoundButton"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getShowText()Z" since="21"/>
-		<method name="getSplitTrack()Z" since="21"/>
-		<method name="getSwitchMinWidth()I" since="16"/>
-		<method name="getSwitchPadding()I" since="16"/>
-		<method name="getTextOff()Ljava/lang/CharSequence;"/>
-		<method name="getTextOn()Ljava/lang/CharSequence;"/>
-		<method name="getThumbDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
-		<method name="getThumbTextPadding()I" since="16"/>
-		<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="23"/>
-		<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
-		<method name="getTrackDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
-		<method name="getTrackTintList()Landroid/content/res/ColorStateList;" since="23"/>
-		<method name="getTrackTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
-		<method name="setShowText(Z)V" since="21"/>
-		<method name="setSplitTrack(Z)V" since="21"/>
-		<method name="setSwitchMinWidth(I)V" since="16"/>
-		<method name="setSwitchPadding(I)V" since="16"/>
-		<method name="setSwitchTextAppearance(Landroid/content/Context;I)V"/>
-		<method name="setSwitchTypeface(Landroid/graphics/Typeface;)V"/>
-		<method name="setSwitchTypeface(Landroid/graphics/Typeface;I)V"/>
-		<method name="setTextOff(Ljava/lang/CharSequence;)V"/>
-		<method name="setTextOn(Ljava/lang/CharSequence;)V"/>
-		<method name="setThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
-		<method name="setThumbResource(I)V" since="16"/>
-		<method name="setThumbTextPadding(I)V" since="16"/>
-		<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
-		<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
-		<method name="setTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
-		<method name="setTrackResource(I)V" since="16"/>
-		<method name="setTrackTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
-		<method name="setTrackTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
-	</class>
-	<class name="android/widget/TabHost" since="1">
-		<extends name="android/widget/FrameLayout"/>
-		<implements name="android/view/ViewTreeObserver$OnTouchModeChangeListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addTab(Landroid/widget/TabHost$TabSpec;)V"/>
-		<method name="clearAllTabs()V"/>
-		<method name="getCurrentTab()I"/>
-		<method name="getCurrentTabTag()Ljava/lang/String;"/>
-		<method name="getCurrentTabView()Landroid/view/View;"/>
-		<method name="getCurrentView()Landroid/view/View;"/>
-		<method name="getTabContentView()Landroid/widget/FrameLayout;"/>
-		<method name="getTabWidget()Landroid/widget/TabWidget;"/>
-		<method name="newTabSpec(Ljava/lang/String;)Landroid/widget/TabHost$TabSpec;"/>
-		<method name="setCurrentTab(I)V"/>
-		<method name="setCurrentTabByTag(Ljava/lang/String;)V"/>
-		<method name="setOnTabChangedListener(Landroid/widget/TabHost$OnTabChangeListener;)V"/>
-		<method name="setup()V"/>
-		<method name="setup(Landroid/app/LocalActivityManager;)V"/>
-	</class>
-	<class name="android/widget/TabHost$OnTabChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onTabChanged(Ljava/lang/String;)V"/>
-	</class>
-	<class name="android/widget/TabHost$TabContentFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="createTabContent(Ljava/lang/String;)Landroid/view/View;"/>
-	</class>
-	<class name="android/widget/TabHost$TabSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/widget/TabHost;)V" removed="29"/>
-		<method name="&lt;init>(Landroid/widget/TabHost;Ljava/lang/String;)V" since="29"/>
-		<method name="getTag()Ljava/lang/String;" since="4"/>
-		<method name="setContent(I)Landroid/widget/TabHost$TabSpec;"/>
-		<method name="setContent(Landroid/content/Intent;)Landroid/widget/TabHost$TabSpec;"/>
-		<method name="setContent(Landroid/widget/TabHost$TabContentFactory;)Landroid/widget/TabHost$TabSpec;"/>
-		<method name="setIndicator(Landroid/view/View;)Landroid/widget/TabHost$TabSpec;" since="4"/>
-		<method name="setIndicator(Ljava/lang/CharSequence;)Landroid/widget/TabHost$TabSpec;"/>
-		<method name="setIndicator(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;)Landroid/widget/TabHost$TabSpec;"/>
-	</class>
-	<class name="android/widget/TabWidget" since="1">
-		<extends name="android/widget/LinearLayout"/>
-		<implements name="android/view/View$OnFocusChangeListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="focusCurrentTab(I)V"/>
-		<method name="getChildTabViewAt(I)Landroid/view/View;" since="4"/>
-		<method name="getLeftStripDrawable()Landroid/graphics/drawable/Drawable;" since="24"/>
-		<method name="getRightStripDrawable()Landroid/graphics/drawable/Drawable;" since="24"/>
-		<method name="getTabCount()I" since="4"/>
-		<method name="isStripEnabled()Z" since="8"/>
-		<method name="setCurrentTab(I)V"/>
-		<method name="setDividerDrawable(I)V" since="4"/>
-		<method name="setDividerDrawable(Landroid/graphics/drawable/Drawable;)V" since="4"/>
-		<method name="setLeftStripDrawable(I)V" since="8"/>
-		<method name="setLeftStripDrawable(Landroid/graphics/drawable/Drawable;)V" since="8"/>
-		<method name="setRightStripDrawable(I)V" since="8"/>
-		<method name="setRightStripDrawable(Landroid/graphics/drawable/Drawable;)V" since="8"/>
-		<method name="setStripEnabled(Z)V" since="8"/>
-	</class>
-	<class name="android/widget/TableLayout" since="1">
-		<extends name="android/widget/LinearLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/TableLayout$LayoutParams;"/>
-		<method name="isColumnCollapsed(I)Z"/>
-		<method name="isColumnShrinkable(I)Z"/>
-		<method name="isColumnStretchable(I)Z"/>
-		<method name="isShrinkAllColumns()Z"/>
-		<method name="isStretchAllColumns()Z"/>
-		<method name="setColumnCollapsed(IZ)V"/>
-		<method name="setColumnShrinkable(IZ)V"/>
-		<method name="setColumnStretchable(IZ)V"/>
-		<method name="setShrinkAllColumns(Z)V"/>
-		<method name="setStretchAllColumns(Z)V"/>
-	</class>
-	<class name="android/widget/TableLayout$LayoutParams" since="1">
-		<extends name="android/widget/LinearLayout$LayoutParams"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(IIF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-	</class>
-	<class name="android/widget/TableRow" since="1">
-		<extends name="android/widget/LinearLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/TableRow$LayoutParams;"/>
-		<method name="getVirtualChildAt(I)Landroid/view/View;"/>
-		<method name="getVirtualChildCount()I"/>
-	</class>
-	<class name="android/widget/TableRow$LayoutParams" since="1">
-		<extends name="android/widget/LinearLayout$LayoutParams"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(IIF)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-		<field name="column"/>
-		<field name="span"/>
-	</class>
-	<class name="android/widget/TextClock" since="17">
-		<extends name="android/widget/TextView"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getFormat12Hour()Ljava/lang/CharSequence;"/>
-		<method name="getFormat24Hour()Ljava/lang/CharSequence;"/>
-		<method name="getTimeZone()Ljava/lang/String;"/>
-		<method name="is24HourModeEnabled()Z"/>
-		<method name="setFormat12Hour(Ljava/lang/CharSequence;)V"/>
-		<method name="setFormat24Hour(Ljava/lang/CharSequence;)V"/>
-		<method name="setTimeZone(Ljava/lang/String;)V"/>
-		<field name="DEFAULT_FORMAT_12_HOUR" deprecated="18"/>
-		<field name="DEFAULT_FORMAT_24_HOUR" deprecated="18"/>
-	</class>
-	<class name="android/widget/TextSwitcher" since="1">
-		<extends name="android/widget/ViewSwitcher"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="setCurrentText(Ljava/lang/CharSequence;)V"/>
-		<method name="setText(Ljava/lang/CharSequence;)V"/>
-	</class>
-	<class name="android/widget/TextView" since="1">
-		<extends name="android/view/View"/>
-		<implements name="android/view/ViewTreeObserver$OnPreDrawListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addTextChangedListener(Landroid/text/TextWatcher;)V"/>
-		<method name="append(Ljava/lang/CharSequence;)V"/>
-		<method name="append(Ljava/lang/CharSequence;II)V"/>
-		<method name="beginBatchEdit()V" since="3"/>
-		<method name="bringPointIntoView(I)Z" since="3"/>
-		<method name="clearComposingText()V" since="3"/>
-		<method name="debug(I)V"/>
-		<method name="didTouchFocusSelect()Z" since="3"/>
-		<method name="endBatchEdit()V" since="3"/>
-		<method name="extractText(Landroid/view/inputmethod/ExtractedTextRequest;Landroid/view/inputmethod/ExtractedText;)Z" since="3"/>
-		<method name="getAutoLinkMask()I"/>
-		<method name="getAutoSizeMaxTextSize()I" since="26"/>
-		<method name="getAutoSizeMinTextSize()I" since="26"/>
-		<method name="getAutoSizeStepGranularity()I" since="26"/>
-		<method name="getAutoSizeTextAvailableSizes()[I" since="26"/>
-		<method name="getAutoSizeTextType()I" since="26"/>
-		<method name="getBreakStrategy()I" since="23"/>
-		<method name="getCompoundDrawablePadding()I"/>
-		<method name="getCompoundDrawableTintList()Landroid/content/res/ColorStateList;" since="23"/>
-		<method name="getCompoundDrawableTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
-		<method name="getCompoundDrawables()[Landroid/graphics/drawable/Drawable;"/>
-		<method name="getCompoundDrawablesRelative()[Landroid/graphics/drawable/Drawable;" since="17"/>
-		<method name="getCompoundPaddingBottom()I"/>
-		<method name="getCompoundPaddingEnd()I" since="17"/>
-		<method name="getCompoundPaddingLeft()I"/>
-		<method name="getCompoundPaddingRight()I"/>
-		<method name="getCompoundPaddingStart()I" since="17"/>
-		<method name="getCompoundPaddingTop()I"/>
-		<method name="getCurrentHintTextColor()I"/>
-		<method name="getCurrentTextColor()I"/>
-		<method name="getCustomInsertionActionModeCallback()Landroid/view/ActionMode$Callback;" since="23"/>
-		<method name="getCustomSelectionActionModeCallback()Landroid/view/ActionMode$Callback;" since="11"/>
-		<method name="getDefaultEditable()Z"/>
-		<method name="getDefaultMovementMethod()Landroid/text/method/MovementMethod;"/>
-		<method name="getEditableText()Landroid/text/Editable;" since="3"/>
-		<method name="getEllipsize()Landroid/text/TextUtils$TruncateAt;"/>
-		<method name="getError()Ljava/lang/CharSequence;"/>
-		<method name="getExtendedPaddingBottom()I"/>
-		<method name="getExtendedPaddingTop()I"/>
-		<method name="getFilters()[Landroid/text/InputFilter;"/>
-		<method name="getFirstBaselineToTopHeight()I" since="28"/>
-		<method name="getFontFeatureSettings()Ljava/lang/String;" since="21"/>
-		<method name="getFontVariationSettings()Ljava/lang/String;" since="26"/>
-		<method name="getFreezesText()Z"/>
-		<method name="getGravity()I"/>
-		<method name="getHighlightColor()I" since="16"/>
-		<method name="getHint()Ljava/lang/CharSequence;"/>
-		<method name="getHintTextColors()Landroid/content/res/ColorStateList;"/>
-		<method name="getHyphenationFrequency()I" since="23"/>
-		<method name="getImeActionId()I" since="3"/>
-		<method name="getImeActionLabel()Ljava/lang/CharSequence;" since="3"/>
-		<method name="getImeHintLocales()Landroid/os/LocaleList;" since="24"/>
-		<method name="getImeOptions()I" since="3"/>
-		<method name="getIncludeFontPadding()Z" since="16"/>
-		<method name="getInputExtras(Z)Landroid/os/Bundle;" since="3"/>
-		<method name="getInputType()I" since="3"/>
-		<method name="getJustificationMode()I" since="26"/>
-		<method name="getKeyListener()Landroid/text/method/KeyListener;"/>
-		<method name="getLastBaselineToBottomHeight()I" since="28"/>
-		<method name="getLayout()Landroid/text/Layout;"/>
-		<method name="getLetterSpacing()F" since="21"/>
-		<method name="getLineBounds(ILandroid/graphics/Rect;)I"/>
-		<method name="getLineCount()I"/>
-		<method name="getLineHeight()I"/>
-		<method name="getLineSpacingExtra()F" since="16"/>
-		<method name="getLineSpacingMultiplier()F" since="16"/>
-		<method name="getLinkTextColors()Landroid/content/res/ColorStateList;"/>
-		<method name="getLinksClickable()Z"/>
-		<method name="getMarqueeRepeatLimit()I" since="16"/>
-		<method name="getMaxEms()I" since="16"/>
-		<method name="getMaxHeight()I" since="16"/>
-		<method name="getMaxLines()I" since="16"/>
-		<method name="getMaxWidth()I" since="16"/>
-		<method name="getMinEms()I" since="16"/>
-		<method name="getMinHeight()I" since="16"/>
-		<method name="getMinLines()I" since="16"/>
-		<method name="getMinWidth()I" since="16"/>
-		<method name="getMovementMethod()Landroid/text/method/MovementMethod;"/>
-		<method name="getOffsetForPosition(FF)I" since="14"/>
-		<method name="getPaint()Landroid/text/TextPaint;"/>
-		<method name="getPaintFlags()I"/>
-		<method name="getPrivateImeOptions()Ljava/lang/String;" since="3"/>
-		<method name="getSelectionEnd()I"/>
-		<method name="getSelectionStart()I"/>
-		<method name="getShadowColor()I" since="16"/>
-		<method name="getShadowDx()F" since="16"/>
-		<method name="getShadowDy()F" since="16"/>
-		<method name="getShadowRadius()F" since="16"/>
-		<method name="getShowSoftInputOnFocus()Z" since="21"/>
-		<method name="getText()Ljava/lang/CharSequence;"/>
-		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" since="26"/>
-		<method name="getTextColor(Landroid/content/Context;Landroid/content/res/TypedArray;I)I" removed="21"/>
-		<method name="getTextColors()Landroid/content/res/ColorStateList;"/>
-		<method name="getTextColors(Landroid/content/Context;Landroid/content/res/TypedArray;)Landroid/content/res/ColorStateList;" removed="21"/>
-		<method name="getTextLocale()Ljava/util/Locale;" since="17"/>
-		<method name="getTextLocales()Landroid/os/LocaleList;" since="24"/>
-		<method name="getTextMetricsParams()Landroid/text/PrecomputedText$Params;" since="28"/>
-		<method name="getTextScaleX()F"/>
-		<method name="getTextSize()F"/>
-		<method name="getTotalPaddingBottom()I"/>
-		<method name="getTotalPaddingEnd()I" since="17"/>
-		<method name="getTotalPaddingLeft()I"/>
-		<method name="getTotalPaddingRight()I"/>
-		<method name="getTotalPaddingStart()I" since="17"/>
-		<method name="getTotalPaddingTop()I"/>
-		<method name="getTransformationMethod()Landroid/text/method/TransformationMethod;"/>
-		<method name="getTypeface()Landroid/graphics/Typeface;"/>
-		<method name="getUrls()[Landroid/text/style/URLSpan;"/>
-		<method name="hasSelection()Z"/>
-		<method name="isAllCaps()Z" since="28"/>
-		<method name="isCursorVisible()Z" since="16"/>
-		<method name="isElegantTextHeight()Z" since="28"/>
-		<method name="isFallbackLineSpacing()Z" since="28"/>
-		<method name="isInputMethodTarget()Z" since="3"/>
-		<method name="isSuggestionsEnabled()Z" since="14"/>
-		<method name="isTextSelectable()Z" since="11"/>
-		<method name="length()I"/>
-		<method name="moveCursorToVisibleOffset()Z" since="3"/>
-		<method name="onBeginBatchEdit()V" since="3"/>
-		<method name="onCommitCompletion(Landroid/view/inputmethod/CompletionInfo;)V" since="3"/>
-		<method name="onCommitCorrection(Landroid/view/inputmethod/CorrectionInfo;)V" since="11"/>
-		<method name="onEditorAction(I)V" since="3"/>
-		<method name="onEndBatchEdit()V" since="3"/>
-		<method name="onPrivateIMECommand(Ljava/lang/String;Landroid/os/Bundle;)Z" since="3"/>
-		<method name="onSelectionChanged(II)V" since="3"/>
-		<method name="onTextChanged(Ljava/lang/CharSequence;III)V"/>
-		<method name="onTextContextMenuItem(I)Z" since="3"/>
-		<method name="removeTextChangedListener(Landroid/text/TextWatcher;)V"/>
-		<method name="resetResolvedDrawables()V" since="14" removed="17"/>
-		<method name="resetResolvedLayoutDirection()V" since="14" removed="16"/>
-		<method name="resolveDrawables()V" since="14" removed="17"/>
-		<method name="resolveTextDirection()V" since="14" removed="16"/>
-		<method name="setAllCaps(Z)V" since="14"/>
-		<method name="setAutoLinkMask(I)V"/>
-		<method name="setAutoSizeTextTypeUniformWithConfiguration(IIII)V" since="26"/>
-		<method name="setAutoSizeTextTypeUniformWithPresetSizes([II)V" since="26"/>
-		<method name="setAutoSizeTextTypeWithDefaults(I)V" since="26"/>
-		<method name="setBreakStrategy(I)V" since="23"/>
-		<method name="setCompoundDrawablePadding(I)V"/>
-		<method name="setCompoundDrawableTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
-		<method name="setCompoundDrawableTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
-		<method name="setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" since="17"/>
-		<method name="setCompoundDrawablesRelativeWithIntrinsicBounds(IIII)V" since="17"/>
-		<method name="setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" since="17"/>
-		<method name="setCompoundDrawablesWithIntrinsicBounds(IIII)V" since="3"/>
-		<method name="setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setCursorVisible(Z)V"/>
-		<method name="setCustomInsertionActionModeCallback(Landroid/view/ActionMode$Callback;)V" since="23"/>
-		<method name="setCustomSelectionActionModeCallback(Landroid/view/ActionMode$Callback;)V" since="11"/>
-		<method name="setEditableFactory(Landroid/text/Editable$Factory;)V"/>
-		<method name="setElegantTextHeight(Z)V" since="21"/>
-		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)V"/>
-		<method name="setEms(I)V"/>
-		<method name="setError(Ljava/lang/CharSequence;)V"/>
-		<method name="setError(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setExtractedText(Landroid/view/inputmethod/ExtractedText;)V" since="3"/>
-		<method name="setFallbackLineSpacing(Z)V" since="28"/>
-		<method name="setFilters([Landroid/text/InputFilter;)V"/>
-		<method name="setFirstBaselineToTopHeight(I)V" since="28"/>
-		<method name="setFontFeatureSettings(Ljava/lang/String;)V" since="21"/>
-		<method name="setFontVariationSettings(Ljava/lang/String;)Z" since="26"/>
-		<method name="setFrame(IIII)Z"/>
-		<method name="setFreezesText(Z)V"/>
-		<method name="setGravity(I)V"/>
-		<method name="setHeight(I)V"/>
-		<method name="setHighlightColor(I)V"/>
-		<method name="setHint(I)V"/>
-		<method name="setHint(Ljava/lang/CharSequence;)V"/>
-		<method name="setHintTextColor(I)V"/>
-		<method name="setHintTextColor(Landroid/content/res/ColorStateList;)V"/>
-		<method name="setHorizontallyScrolling(Z)V"/>
-		<method name="setHyphenationFrequency(I)V" since="23"/>
-		<method name="setImeActionLabel(Ljava/lang/CharSequence;I)V" since="3"/>
-		<method name="setImeHintLocales(Landroid/os/LocaleList;)V" since="24"/>
-		<method name="setImeOptions(I)V" since="3"/>
-		<method name="setIncludeFontPadding(Z)V"/>
-		<method name="setInputExtras(I)V" since="3"/>
-		<method name="setInputType(I)V" since="3"/>
-		<method name="setJustificationMode(I)V" since="26"/>
-		<method name="setKeyListener(Landroid/text/method/KeyListener;)V"/>
-		<method name="setLastBaselineToBottomHeight(I)V" since="28"/>
-		<method name="setLetterSpacing(F)V" since="21"/>
-		<method name="setLineHeight(I)V" since="28"/>
-		<method name="setLineSpacing(FF)V"/>
-		<method name="setLines(I)V"/>
-		<method name="setLinkTextColor(I)V"/>
-		<method name="setLinkTextColor(Landroid/content/res/ColorStateList;)V"/>
-		<method name="setLinksClickable(Z)V"/>
-		<method name="setMarqueeRepeatLimit(I)V" since="2"/>
-		<method name="setMaxEms(I)V"/>
-		<method name="setMaxHeight(I)V"/>
-		<method name="setMaxLines(I)V"/>
-		<method name="setMaxWidth(I)V"/>
-		<method name="setMinEms(I)V"/>
-		<method name="setMinHeight(I)V"/>
-		<method name="setMinLines(I)V"/>
-		<method name="setMinWidth(I)V"/>
-		<method name="setMovementMethod(Landroid/text/method/MovementMethod;)V"/>
-		<method name="setOnEditorActionListener(Landroid/widget/TextView$OnEditorActionListener;)V" since="3"/>
-		<method name="setPaddingRelative(IIII)V" since="16"/>
-		<method name="setPaintFlags(I)V"/>
-		<method name="setPrivateImeOptions(Ljava/lang/String;)V" since="3"/>
-		<method name="setRawInputType(I)V" since="3"/>
-		<method name="setScroller(Landroid/widget/Scroller;)V"/>
-		<method name="setSelectAllOnFocus(Z)V"/>
-		<method name="setShadowLayer(FFFI)V"/>
-		<method name="setShowSoftInputOnFocus(Z)V" since="21"/>
-		<method name="setSingleLine()V"/>
-		<method name="setSingleLine(Z)V"/>
-		<method name="setSpannableFactory(Landroid/text/Spannable$Factory;)V"/>
-		<method name="setText(I)V"/>
-		<method name="setText(ILandroid/widget/TextView$BufferType;)V"/>
-		<method name="setText(Ljava/lang/CharSequence;)V"/>
-		<method name="setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V"/>
-		<method name="setText([CII)V"/>
-		<method name="setTextAppearance(I)V" since="23"/>
-		<method name="setTextAppearance(Landroid/content/Context;I)V" deprecated="23"/>
-		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="26"/>
-		<method name="setTextColor(I)V"/>
-		<method name="setTextColor(Landroid/content/res/ColorStateList;)V"/>
-		<method name="setTextIsSelectable(Z)V" since="11"/>
-		<method name="setTextKeepState(Ljava/lang/CharSequence;)V"/>
-		<method name="setTextKeepState(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V"/>
-		<method name="setTextLocale(Ljava/util/Locale;)V" since="17"/>
-		<method name="setTextLocales(Landroid/os/LocaleList;)V" since="24"/>
-		<method name="setTextMetricsParams(Landroid/text/PrecomputedText$Params;)V" since="28"/>
-		<method name="setTextScaleX(F)V"/>
-		<method name="setTextSize(F)V"/>
-		<method name="setTextSize(IF)V"/>
-		<method name="setTransformationMethod(Landroid/text/method/TransformationMethod;)V"/>
-		<method name="setTypeface(Landroid/graphics/Typeface;)V"/>
-		<method name="setTypeface(Landroid/graphics/Typeface;I)V"/>
-		<method name="setWidth(I)V"/>
-		<field name="AUTO_SIZE_TEXT_TYPE_NONE" since="26"/>
-		<field name="AUTO_SIZE_TEXT_TYPE_UNIFORM" since="26"/>
-	</class>
-	<class name="android/widget/TextView$BufferType" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Landroid/widget/TextView$BufferType;"/>
-		<method name="values()[Landroid/widget/TextView$BufferType;"/>
-		<field name="EDITABLE"/>
-		<field name="NORMAL"/>
-		<field name="SPANNABLE"/>
-	</class>
-	<class name="android/widget/TextView$OnEditorActionListener" since="3">
-		<extends name="java/lang/Object"/>
-		<method name="onEditorAction(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z"/>
-	</class>
-	<class name="android/widget/TextView$SavedState" since="1">
-		<extends name="android/view/View$BaseSavedState"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/os/Parcelable;)V" since="29"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/widget/ThemedSpinnerAdapter" since="23">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/SpinnerAdapter"/>
-		<method name="getDropDownViewTheme()Landroid/content/res/Resources$Theme;"/>
-		<method name="setDropDownViewTheme(Landroid/content/res/Resources$Theme;)V"/>
-	</class>
-	<class name="android/widget/TimePicker" since="1">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getCurrentHour()Ljava/lang/Integer;" deprecated="23"/>
-		<method name="getCurrentMinute()Ljava/lang/Integer;" deprecated="23"/>
-		<method name="getHour()I" since="23"/>
-		<method name="getMinute()I" since="23"/>
-		<method name="is24HourView()Z"/>
-		<method name="setCurrentHour(Ljava/lang/Integer;)V" deprecated="23"/>
-		<method name="setCurrentMinute(Ljava/lang/Integer;)V" deprecated="23"/>
-		<method name="setHour(I)V" since="23"/>
-		<method name="setIs24HourView(Ljava/lang/Boolean;)V"/>
-		<method name="setMinute(I)V" since="23"/>
-		<method name="setOnTimeChangedListener(Landroid/widget/TimePicker$OnTimeChangedListener;)V"/>
-		<method name="validateInput()Z" since="26"/>
-	</class>
-	<class name="android/widget/TimePicker$OnTimeChangedListener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="onTimeChanged(Landroid/widget/TimePicker;II)V"/>
-	</class>
-	<class name="android/widget/Toast" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="cancel()V"/>
-		<method name="getDuration()I"/>
-		<method name="getGravity()I"/>
-		<method name="getHorizontalMargin()F"/>
-		<method name="getVerticalMargin()F"/>
-		<method name="getView()Landroid/view/View;"/>
-		<method name="getXOffset()I"/>
-		<method name="getYOffset()I"/>
-		<method name="makeText(Landroid/content/Context;II)Landroid/widget/Toast;"/>
-		<method name="makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;"/>
-		<method name="setDuration(I)V"/>
-		<method name="setGravity(III)V"/>
-		<method name="setMargin(FF)V"/>
-		<method name="setText(I)V"/>
-		<method name="setText(Ljava/lang/CharSequence;)V"/>
-		<method name="setView(Landroid/view/View;)V"/>
-		<method name="show()V"/>
-		<field name="LENGTH_LONG"/>
-		<field name="LENGTH_SHORT"/>
-	</class>
-	<class name="android/widget/ToggleButton" since="1">
-		<extends name="android/widget/CompoundButton"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getTextOff()Ljava/lang/CharSequence;"/>
-		<method name="getTextOn()Ljava/lang/CharSequence;"/>
-		<method name="setTextOff(Ljava/lang/CharSequence;)V"/>
-		<method name="setTextOn(Ljava/lang/CharSequence;)V"/>
-	</class>
-	<class name="android/widget/Toolbar" since="21">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V"/>
-		<method name="collapseActionView()V"/>
-		<method name="dismissPopupMenus()V"/>
-		<method name="generateDefaultLayoutParams()Landroid/widget/Toolbar$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/Toolbar$LayoutParams;"/>
-		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/Toolbar$LayoutParams;"/>
-		<method name="getContentInsetEnd()I"/>
-		<method name="getContentInsetEndWithActions()I" since="24"/>
-		<method name="getContentInsetLeft()I"/>
-		<method name="getContentInsetRight()I"/>
-		<method name="getContentInsetStart()I"/>
-		<method name="getContentInsetStartWithNavigation()I" since="24"/>
-		<method name="getCurrentContentInsetEnd()I" since="24"/>
-		<method name="getCurrentContentInsetLeft()I" since="24"/>
-		<method name="getCurrentContentInsetRight()I" since="24"/>
-		<method name="getCurrentContentInsetStart()I" since="24"/>
-		<method name="getLogo()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getLogoDescription()Ljava/lang/CharSequence;"/>
-		<method name="getMenu()Landroid/view/Menu;"/>
-		<method name="getNavigationContentDescription()Ljava/lang/CharSequence;"/>
-		<method name="getNavigationIcon()Landroid/graphics/drawable/Drawable;"/>
-		<method name="getOverflowIcon()Landroid/graphics/drawable/Drawable;" since="23"/>
-		<method name="getPopupTheme()I"/>
-		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
-		<method name="getTitle()Ljava/lang/CharSequence;"/>
-		<method name="getTitleMarginBottom()I" since="24"/>
-		<method name="getTitleMarginEnd()I" since="24"/>
-		<method name="getTitleMarginStart()I" since="24"/>
-		<method name="getTitleMarginTop()I" since="24"/>
-		<method name="hasExpandedActionView()Z"/>
-		<method name="hideOverflowMenu()Z"/>
-		<method name="inflateMenu(I)V"/>
-		<method name="isOverflowMenuShowing()Z"/>
-		<method name="setContentInsetEndWithActions(I)V" since="24"/>
-		<method name="setContentInsetStartWithNavigation(I)V" since="24"/>
-		<method name="setContentInsetsAbsolute(II)V"/>
-		<method name="setContentInsetsRelative(II)V"/>
-		<method name="setLogo(I)V"/>
-		<method name="setLogo(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setLogoDescription(I)V"/>
-		<method name="setLogoDescription(Ljava/lang/CharSequence;)V"/>
-		<method name="setNavigationContentDescription(I)V"/>
-		<method name="setNavigationContentDescription(Ljava/lang/CharSequence;)V"/>
-		<method name="setNavigationIcon(I)V"/>
-		<method name="setNavigationIcon(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setNavigationOnClickListener(Landroid/view/View$OnClickListener;)V"/>
-		<method name="setOnMenuItemClickListener(Landroid/widget/Toolbar$OnMenuItemClickListener;)V"/>
-		<method name="setOverflowIcon(Landroid/graphics/drawable/Drawable;)V" since="23"/>
-		<method name="setPopupTheme(I)V"/>
-		<method name="setSubtitle(I)V"/>
-		<method name="setSubtitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setSubtitleTextAppearance(Landroid/content/Context;I)V"/>
-		<method name="setSubtitleTextColor(I)V"/>
-		<method name="setTitle(I)V"/>
-		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
-		<method name="setTitleMargin(IIII)V" since="24"/>
-		<method name="setTitleMarginBottom(I)V" since="24"/>
-		<method name="setTitleMarginEnd(I)V" since="24"/>
-		<method name="setTitleMarginStart(I)V" since="24"/>
-		<method name="setTitleMarginTop(I)V" since="24"/>
-		<method name="setTitleTextAppearance(Landroid/content/Context;I)V"/>
-		<method name="setTitleTextColor(I)V"/>
-		<method name="showOverflowMenu()Z"/>
-	</class>
-	<class name="android/widget/Toolbar$LayoutParams" since="21">
-		<extends name="android/app/ActionBar$LayoutParams"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(Landroid/app/ActionBar$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
-		<method name="&lt;init>(Landroid/widget/Toolbar$LayoutParams;)V"/>
-	</class>
-	<class name="android/widget/Toolbar$OnMenuItemClickListener" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
-	</class>
-	<class name="android/widget/TwoLineListItem" since="1" deprecated="17">
-		<extends name="android/widget/RelativeLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="getText1()Landroid/widget/TextView;"/>
-		<method name="getText2()Landroid/widget/TextView;"/>
-	</class>
-	<class name="android/widget/VideoView" since="1">
-		<extends name="android/view/SurfaceView"/>
-		<implements name="android/widget/MediaController$MediaPlayerControl"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="addSubtitleSource(Ljava/io/InputStream;Landroid/media/MediaFormat;)V" since="19"/>
-		<method name="resolveAdjustedSize(II)I"/>
-		<method name="resume()V" since="8"/>
-		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="26"/>
-		<method name="setAudioFocusRequest(I)V" since="26"/>
-		<method name="setMediaController(Landroid/widget/MediaController;)V"/>
-		<method name="setOnCompletionListener(Landroid/media/MediaPlayer$OnCompletionListener;)V"/>
-		<method name="setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V"/>
-		<method name="setOnInfoListener(Landroid/media/MediaPlayer$OnInfoListener;)V" since="17"/>
-		<method name="setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V"/>
-		<method name="setVideoPath(Ljava/lang/String;)V"/>
-		<method name="setVideoURI(Landroid/net/Uri;)V"/>
-		<method name="setVideoURI(Landroid/net/Uri;Ljava/util/Map;)V" since="21"/>
-		<method name="stopPlayback()V"/>
-		<method name="suspend()V" since="8"/>
-	</class>
-	<class name="android/widget/ViewAnimator" since="1">
-		<extends name="android/widget/FrameLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="getAnimateFirstView()Z" since="17"/>
-		<method name="getCurrentView()Landroid/view/View;"/>
-		<method name="getDisplayedChild()I"/>
-		<method name="getInAnimation()Landroid/view/animation/Animation;"/>
-		<method name="getOutAnimation()Landroid/view/animation/Animation;"/>
-		<method name="setAnimateFirstView(Z)V"/>
-		<method name="setDisplayedChild(I)V"/>
-		<method name="setInAnimation(Landroid/content/Context;I)V"/>
-		<method name="setInAnimation(Landroid/view/animation/Animation;)V"/>
-		<method name="setOutAnimation(Landroid/content/Context;I)V"/>
-		<method name="setOutAnimation(Landroid/view/animation/Animation;)V"/>
-		<method name="showNext()V"/>
-		<method name="showPrevious()V"/>
-	</class>
-	<class name="android/widget/ViewFlipper" since="1">
-		<extends name="android/widget/ViewAnimator"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="isAutoStart()Z" since="7"/>
-		<method name="isFlipping()Z"/>
-		<method name="setAutoStart(Z)V" since="7"/>
-		<method name="setFlipInterval(I)V"/>
-		<method name="startFlipping()V"/>
-		<method name="stopFlipping()V"/>
-	</class>
-	<class name="android/widget/ViewSwitcher" since="1">
-		<extends name="android/widget/ViewAnimator"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="getNextView()Landroid/view/View;"/>
-		<method name="reset()V"/>
-		<method name="setFactory(Landroid/widget/ViewSwitcher$ViewFactory;)V"/>
-	</class>
-	<class name="android/widget/ViewSwitcher$ViewFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="makeView()Landroid/view/View;"/>
-	</class>
-	<class name="android/widget/WrapperListAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="android/widget/ListAdapter"/>
-		<method name="getWrappedAdapter()Landroid/widget/ListAdapter;"/>
-	</class>
-	<class name="android/widget/ZoomButton" since="1" deprecated="26">
-		<extends name="android/widget/ImageButton"/>
-		<implements name="android/view/View$OnLongClickListener"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
-		<method name="setZoomSpeed(J)V"/>
-	</class>
-	<class name="android/widget/ZoomButtonsController" since="4" deprecated="26">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/View$OnTouchListener"/>
-		<method name="&lt;init>(Landroid/view/View;)V"/>
-		<method name="getContainer()Landroid/view/ViewGroup;"/>
-		<method name="getZoomControls()Landroid/view/View;"/>
-		<method name="isAutoDismissed()Z"/>
-		<method name="isVisible()Z"/>
-		<method name="setAutoDismissed(Z)V"/>
-		<method name="setFocusable(Z)V"/>
-		<method name="setOnZoomListener(Landroid/widget/ZoomButtonsController$OnZoomListener;)V"/>
-		<method name="setVisible(Z)V"/>
-		<method name="setZoomInEnabled(Z)V"/>
-		<method name="setZoomOutEnabled(Z)V"/>
-		<method name="setZoomSpeed(J)V"/>
-	</class>
-	<class name="android/widget/ZoomButtonsController$OnZoomListener" since="4">
-		<extends name="java/lang/Object"/>
-		<method name="onVisibilityChanged(Z)V"/>
-		<method name="onZoom(Z)V"/>
-	</class>
-	<class name="android/widget/ZoomControls" since="1">
-		<extends name="android/widget/LinearLayout"/>
-		<method name="&lt;init>(Landroid/content/Context;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="hide()V"/>
-		<method name="setIsZoomInEnabled(Z)V"/>
-		<method name="setIsZoomOutEnabled(Z)V"/>
-		<method name="setOnZoomInClickListener(Landroid/view/View$OnClickListener;)V"/>
-		<method name="setOnZoomOutClickListener(Landroid/view/View$OnClickListener;)V"/>
-		<method name="setZoomSpeed(J)V"/>
-		<method name="show()V"/>
-	</class>
-	<class name="androidx/annotation/RecentlyNonNull" since="29">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="androidx/annotation/RecentlyNullable" since="29">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="com/android/internal/util/Predicate" since="1" deprecated="26" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="apply(Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="com/google/android/maps/GeoPoint" since="1" removed="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getLatitudeE6()I"/>
-		<method name="getLongitudeE6()I"/>
-	</class>
-	<class name="com/google/android/maps/ItemizedOverlay" since="1" removed="3">
-		<extends name="com/google/android/maps/Overlay"/>
-		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="boundCenter(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="boundCenterBottom(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;"/>
-		<method name="createItem(I)Lcom/google/android/maps/OverlayItem;"/>
-		<method name="getCenter()Lcom/google/android/maps/GeoPoint;"/>
-		<method name="getFocus()Lcom/google/android/maps/OverlayItem;"/>
-		<method name="getIndexToDraw(I)I"/>
-		<method name="getItem(I)Lcom/google/android/maps/OverlayItem;"/>
-		<method name="getLastFocusedIndex()I"/>
-		<method name="getLatSpanE6()I"/>
-		<method name="getLonSpanE6()I"/>
-		<method name="hitTest(Lcom/google/android/maps/OverlayItem;Landroid/graphics/drawable/Drawable;II)Z"/>
-		<method name="nextFocus(Z)Lcom/google/android/maps/OverlayItem;"/>
-		<method name="onTap(I)Z"/>
-		<method name="populate()V"/>
-		<method name="setDrawFocusedItem(Z)V"/>
-		<method name="setFocus(Lcom/google/android/maps/OverlayItem;)V"/>
-		<method name="setLastFocusedIndex(I)V"/>
-		<method name="setOnFocusChangeListener(Lcom/google/android/maps/ItemizedOverlay$OnFocusChangeListener;)V"/>
-		<method name="size()I"/>
-	</class>
-	<class name="com/google/android/maps/ItemizedOverlay$OnFocusChangeListener" since="1" removed="3">
-		<extends name="java/lang/Object"/>
-		<method name="onFocusChanged(Lcom/google/android/maps/ItemizedOverlay;Lcom/google/android/maps/OverlayItem;)V"/>
-	</class>
-	<class name="com/google/android/maps/MapActivity" since="1" removed="3">
-		<extends name="android/app/Activity"/>
-		<method name="&lt;init>()V"/>
-		<method name="isLocationDisplayed()Z"/>
-		<method name="isRouteDisplayed()Z"/>
-	</class>
-	<class name="com/google/android/maps/MapController" since="1" removed="3">
-		<extends name="java/lang/Object"/>
-		<implements name="android/view/View$OnKeyListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="animateTo(Lcom/google/android/maps/GeoPoint;)V"/>
-		<method name="animateTo(Lcom/google/android/maps/GeoPoint;Landroid/os/Message;)V"/>
-		<method name="animateTo(Lcom/google/android/maps/GeoPoint;Ljava/lang/Runnable;)V"/>
-		<method name="scrollBy(II)V"/>
-		<method name="setCenter(Lcom/google/android/maps/GeoPoint;)V"/>
-		<method name="setZoom(I)I"/>
-		<method name="stopAnimation(Z)V"/>
-		<method name="stopPanning()V"/>
-		<method name="zoomIn()Z"/>
-		<method name="zoomInFixing(II)Z"/>
-		<method name="zoomOut()Z"/>
-		<method name="zoomOutFixing(II)Z"/>
-		<method name="zoomToSpan(II)V"/>
-	</class>
-	<class name="com/google/android/maps/MapView" since="1" removed="3">
-		<extends name="android/view/ViewGroup"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
-		<method name="canCoverCenter()Z"/>
-		<method name="displayZoomControls(Z)V"/>
-		<method name="generateDefaultLayoutParams()Lcom/google/android/maps/MapView$LayoutParams;"/>
-		<method name="getController()Lcom/google/android/maps/MapController;"/>
-		<method name="getLatitudeSpan()I"/>
-		<method name="getLongitudeSpan()I"/>
-		<method name="getMapCenter()Lcom/google/android/maps/GeoPoint;"/>
-		<method name="getMaxZoomLevel()I"/>
-		<method name="getOverlays()Ljava/util/List;"/>
-		<method name="getProjection()Lcom/google/android/maps/Projection;"/>
-		<method name="getZoomControls()Landroid/view/View;"/>
-		<method name="getZoomLevel()I"/>
-		<method name="isSatellite()Z"/>
-		<method name="isStreetView()Z"/>
-		<method name="isTraffic()Z"/>
-		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="onSaveInstanceState(Landroid/os/Bundle;)V"/>
-		<method name="preLoad()V"/>
-		<method name="setReticleDrawMode(Lcom/google/android/maps/MapView$ReticleDrawMode;)V"/>
-		<method name="setSatellite(Z)V"/>
-		<method name="setStreetView(Z)V"/>
-		<method name="setTraffic(Z)V"/>
-	</class>
-	<class name="com/google/android/maps/MapView$LayoutParams" since="1" removed="3">
-		<extends name="android/view/ViewGroup$LayoutParams"/>
-		<method name="&lt;init>(IIIII)V"/>
-		<method name="&lt;init>(IILcom/google/android/maps/GeoPoint;I)V"/>
-		<method name="&lt;init>(IILcom/google/android/maps/GeoPoint;III)V"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
-		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
-		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="BOTTOM"/>
-		<field name="BOTTOM_CENTER"/>
-		<field name="CENTER"/>
-		<field name="CENTER_HORIZONTAL"/>
-		<field name="CENTER_VERTICAL"/>
-		<field name="LEFT"/>
-		<field name="MODE_MAP"/>
-		<field name="MODE_VIEW"/>
-		<field name="RIGHT"/>
-		<field name="TOP"/>
-		<field name="TOP_LEFT"/>
-		<field name="alignment"/>
-		<field name="mode"/>
-		<field name="point"/>
-		<field name="x"/>
-		<field name="y"/>
-	</class>
-	<class name="com/google/android/maps/MapView$ReticleDrawMode" since="1" removed="3">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Lcom/google/android/maps/MapView$ReticleDrawMode;"/>
-		<method name="values()[Lcom/google/android/maps/MapView$ReticleDrawMode;"/>
-		<field name="DRAW_RETICLE_NEVER"/>
-		<field name="DRAW_RETICLE_OVER"/>
-		<field name="DRAW_RETICLE_UNDER"/>
-	</class>
-	<class name="com/google/android/maps/MyLocationOverlay" since="1" removed="3">
-		<extends name="com/google/android/maps/Overlay"/>
-		<implements name="android/hardware/SensorListener"/>
-		<implements name="android/location/LocationListener"/>
-		<method name="&lt;init>(Landroid/content/Context;Lcom/google/android/maps/MapView;)V"/>
-		<method name="disableCompass()V"/>
-		<method name="disableMyLocation()V"/>
-		<method name="dispatchTap()Z"/>
-		<method name="drawCompass(Landroid/graphics/Canvas;F)V"/>
-		<method name="drawMyLocation(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;Landroid/location/Location;Lcom/google/android/maps/GeoPoint;J)V"/>
-		<method name="enableCompass()Z"/>
-		<method name="enableMyLocation()Z"/>
-		<method name="getLastFix()Landroid/location/Location;"/>
-		<method name="getMyLocation()Lcom/google/android/maps/GeoPoint;"/>
-		<method name="getOrientation()F"/>
-		<method name="isCompassEnabled()Z"/>
-		<method name="isMyLocationEnabled()Z"/>
-		<method name="runOnFirstFix(Ljava/lang/Runnable;)Z"/>
-	</class>
-	<class name="com/google/android/maps/Overlay" since="1" removed="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="draw(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;Z)V"/>
-		<method name="draw(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;ZJ)Z"/>
-		<method name="drawAt(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIZ)V"/>
-		<method name="onKeyDown(ILandroid/view/KeyEvent;Lcom/google/android/maps/MapView;)Z"/>
-		<method name="onKeyUp(ILandroid/view/KeyEvent;Lcom/google/android/maps/MapView;)Z"/>
-		<method name="onTap(Lcom/google/android/maps/GeoPoint;Lcom/google/android/maps/MapView;)Z"/>
-		<method name="onTouchEvent(Landroid/view/MotionEvent;Lcom/google/android/maps/MapView;)Z"/>
-		<method name="onTrackballEvent(Landroid/view/MotionEvent;Lcom/google/android/maps/MapView;)Z"/>
-		<field name="SHADOW_X_SKEW"/>
-		<field name="SHADOW_Y_SCALE"/>
-	</class>
-	<class name="com/google/android/maps/OverlayItem" since="1" removed="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lcom/google/android/maps/GeoPoint;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getMarker(I)Landroid/graphics/drawable/Drawable;"/>
-		<method name="getPoint()Lcom/google/android/maps/GeoPoint;"/>
-		<method name="getSnippet()Ljava/lang/String;"/>
-		<method name="getTitle()Ljava/lang/String;"/>
-		<method name="routableAddress()Ljava/lang/String;"/>
-		<method name="setMarker(Landroid/graphics/drawable/Drawable;)V"/>
-		<method name="setState(Landroid/graphics/drawable/Drawable;I)V"/>
-		<field name="ITEM_STATE_FOCUSED_MASK"/>
-		<field name="ITEM_STATE_PRESSED_MASK"/>
-		<field name="ITEM_STATE_SELECTED_MASK"/>
-		<field name="mMarker"/>
-		<field name="mPoint"/>
-		<field name="mSnippet"/>
-		<field name="mTitle"/>
-	</class>
-	<class name="com/google/android/maps/Projection" since="1" removed="3">
-		<extends name="java/lang/Object"/>
-		<method name="fromPixels(II)Lcom/google/android/maps/GeoPoint;"/>
-		<method name="metersToEquatorPixels(F)F"/>
-		<method name="toPixels(Lcom/google/android/maps/GeoPoint;Landroid/graphics/Point;)Landroid/graphics/Point;"/>
-	</class>
-	<class name="com/google/android/maps/TrackballGestureDetector" since="1" removed="3">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="analyze(Landroid/view/MotionEvent;)V"/>
-		<method name="getCurrentDownX()F"/>
-		<method name="getCurrentDownY()F"/>
-		<method name="getFirstDownX()F"/>
-		<method name="getFirstDownY()F"/>
-		<method name="isDoubleTap()Z"/>
-		<method name="isScroll()Z"/>
-		<method name="isTap()Z"/>
-		<method name="registerLongPressCallback(Ljava/lang/Runnable;)V"/>
-		<method name="scrollX()F"/>
-		<method name="scrollY()F"/>
-	</class>
-	<class name="dalvik/annotation/TestTarget" since="1" deprecated="14">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="conceptName()Ljava/lang/String;" since="3"/>
-		<method name="methodArgs()[Ljava/lang/Class;"/>
-		<method name="methodName()Ljava/lang/String;"/>
-	</class>
-	<class name="dalvik/annotation/TestTargetClass" since="1" deprecated="14">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="value()Ljava/lang/Class;"/>
-	</class>
-	<class name="dalvik/bytecode/OpcodeInfo" since="11">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="MAXIMUM_PACKED_VALUE"/>
-		<field name="MAXIMUM_VALUE"/>
-	</class>
-	<class name="dalvik/bytecode/Opcodes" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="OP_ADD_DOUBLE"/>
-		<field name="OP_ADD_DOUBLE_2ADDR"/>
-		<field name="OP_ADD_FLOAT"/>
-		<field name="OP_ADD_FLOAT_2ADDR"/>
-		<field name="OP_ADD_INT"/>
-		<field name="OP_ADD_INT_2ADDR"/>
-		<field name="OP_ADD_INT_LIT16"/>
-		<field name="OP_ADD_INT_LIT8"/>
-		<field name="OP_ADD_LONG"/>
-		<field name="OP_ADD_LONG_2ADDR"/>
-		<field name="OP_AGET"/>
-		<field name="OP_AGET_BOOLEAN"/>
-		<field name="OP_AGET_BYTE"/>
-		<field name="OP_AGET_CHAR"/>
-		<field name="OP_AGET_OBJECT"/>
-		<field name="OP_AGET_SHORT"/>
-		<field name="OP_AGET_WIDE"/>
-		<field name="OP_AND_INT"/>
-		<field name="OP_AND_INT_2ADDR"/>
-		<field name="OP_AND_INT_LIT16"/>
-		<field name="OP_AND_INT_LIT8"/>
-		<field name="OP_AND_LONG"/>
-		<field name="OP_AND_LONG_2ADDR"/>
-		<field name="OP_APUT"/>
-		<field name="OP_APUT_BOOLEAN"/>
-		<field name="OP_APUT_BYTE"/>
-		<field name="OP_APUT_CHAR"/>
-		<field name="OP_APUT_OBJECT"/>
-		<field name="OP_APUT_SHORT"/>
-		<field name="OP_APUT_WIDE"/>
-		<field name="OP_ARRAY_LENGTH"/>
-		<field name="OP_BREAKPOINT" since="8" deprecated="16"/>
-		<field name="OP_CHECK_CAST"/>
-		<field name="OP_CHECK_CAST_JUMBO" since="11"/>
-		<field name="OP_CMPG_DOUBLE"/>
-		<field name="OP_CMPG_FLOAT"/>
-		<field name="OP_CMPL_DOUBLE"/>
-		<field name="OP_CMPL_FLOAT"/>
-		<field name="OP_CMP_LONG"/>
-		<field name="OP_CONST"/>
-		<field name="OP_CONST_16"/>
-		<field name="OP_CONST_4"/>
-		<field name="OP_CONST_CLASS"/>
-		<field name="OP_CONST_CLASS_JUMBO" since="11"/>
-		<field name="OP_CONST_HIGH16"/>
-		<field name="OP_CONST_METHOD_HANDLE" since="28"/>
-		<field name="OP_CONST_METHOD_TYPE" since="28"/>
-		<field name="OP_CONST_STRING"/>
-		<field name="OP_CONST_STRING_JUMBO"/>
-		<field name="OP_CONST_WIDE"/>
-		<field name="OP_CONST_WIDE_16"/>
-		<field name="OP_CONST_WIDE_32"/>
-		<field name="OP_CONST_WIDE_HIGH16"/>
-		<field name="OP_DIV_DOUBLE"/>
-		<field name="OP_DIV_DOUBLE_2ADDR"/>
-		<field name="OP_DIV_FLOAT"/>
-		<field name="OP_DIV_FLOAT_2ADDR"/>
-		<field name="OP_DIV_INT"/>
-		<field name="OP_DIV_INT_2ADDR"/>
-		<field name="OP_DIV_INT_LIT16"/>
-		<field name="OP_DIV_INT_LIT8"/>
-		<field name="OP_DIV_LONG"/>
-		<field name="OP_DIV_LONG_2ADDR"/>
-		<field name="OP_DOUBLE_TO_FLOAT"/>
-		<field name="OP_DOUBLE_TO_INT"/>
-		<field name="OP_DOUBLE_TO_LONG"/>
-		<field name="OP_EXECUTE_INLINE" deprecated="16"/>
-		<field name="OP_EXECUTE_INLINE_RANGE" since="8" deprecated="16"/>
-		<field name="OP_FILLED_NEW_ARRAY"/>
-		<field name="OP_FILLED_NEW_ARRAY_JUMBO" since="11"/>
-		<field name="OP_FILLED_NEW_ARRAY_RANGE"/>
-		<field name="OP_FILL_ARRAY_DATA"/>
-		<field name="OP_FLOAT_TO_DOUBLE"/>
-		<field name="OP_FLOAT_TO_INT"/>
-		<field name="OP_FLOAT_TO_LONG"/>
-		<field name="OP_GOTO"/>
-		<field name="OP_GOTO_16"/>
-		<field name="OP_GOTO_32"/>
-		<field name="OP_IF_EQ"/>
-		<field name="OP_IF_EQZ"/>
-		<field name="OP_IF_GE"/>
-		<field name="OP_IF_GEZ"/>
-		<field name="OP_IF_GT"/>
-		<field name="OP_IF_GTZ"/>
-		<field name="OP_IF_LE"/>
-		<field name="OP_IF_LEZ"/>
-		<field name="OP_IF_LT"/>
-		<field name="OP_IF_LTZ"/>
-		<field name="OP_IF_NE"/>
-		<field name="OP_IF_NEZ"/>
-		<field name="OP_IGET"/>
-		<field name="OP_IGET_BOOLEAN"/>
-		<field name="OP_IGET_BOOLEAN_JUMBO" since="11"/>
-		<field name="OP_IGET_BYTE"/>
-		<field name="OP_IGET_BYTE_JUMBO" since="11"/>
-		<field name="OP_IGET_CHAR"/>
-		<field name="OP_IGET_CHAR_JUMBO" since="11"/>
-		<field name="OP_IGET_JUMBO" since="11"/>
-		<field name="OP_IGET_OBJECT"/>
-		<field name="OP_IGET_OBJECT_JUMBO" since="11"/>
-		<field name="OP_IGET_OBJECT_QUICK" deprecated="16"/>
-		<field name="OP_IGET_QUICK" deprecated="16"/>
-		<field name="OP_IGET_SHORT"/>
-		<field name="OP_IGET_SHORT_JUMBO" since="11"/>
-		<field name="OP_IGET_WIDE"/>
-		<field name="OP_IGET_WIDE_JUMBO" since="11"/>
-		<field name="OP_IGET_WIDE_QUICK" deprecated="16"/>
-		<field name="OP_IGET_WIDE_VOLATILE" since="9" deprecated="16"/>
-		<field name="OP_INSTANCE_OF"/>
-		<field name="OP_INSTANCE_OF_JUMBO" since="11"/>
-		<field name="OP_INT_TO_BYTE"/>
-		<field name="OP_INT_TO_CHAR"/>
-		<field name="OP_INT_TO_DOUBLE"/>
-		<field name="OP_INT_TO_FLOAT"/>
-		<field name="OP_INT_TO_LONG"/>
-		<field name="OP_INT_TO_SHORT"/>
-		<field name="OP_INVOKE_CUSTOM" since="26"/>
-		<field name="OP_INVOKE_CUSTOM_RANGE" since="26"/>
-		<field name="OP_INVOKE_DIRECT"/>
-		<field name="OP_INVOKE_DIRECT_EMPTY" deprecated="16"/>
-		<field name="OP_INVOKE_DIRECT_JUMBO" since="11"/>
-		<field name="OP_INVOKE_DIRECT_RANGE"/>
-		<field name="OP_INVOKE_INTERFACE"/>
-		<field name="OP_INVOKE_INTERFACE_JUMBO" since="11"/>
-		<field name="OP_INVOKE_INTERFACE_RANGE"/>
-		<field name="OP_INVOKE_POLYMORPHIC" since="26"/>
-		<field name="OP_INVOKE_POLYMORPHIC_RANGE" since="26"/>
-		<field name="OP_INVOKE_STATIC"/>
-		<field name="OP_INVOKE_STATIC_JUMBO" since="11"/>
-		<field name="OP_INVOKE_STATIC_RANGE"/>
-		<field name="OP_INVOKE_SUPER"/>
-		<field name="OP_INVOKE_SUPER_JUMBO" since="11"/>
-		<field name="OP_INVOKE_SUPER_QUICK" deprecated="16"/>
-		<field name="OP_INVOKE_SUPER_QUICK_RANGE" deprecated="16"/>
-		<field name="OP_INVOKE_SUPER_RANGE"/>
-		<field name="OP_INVOKE_VIRTUAL"/>
-		<field name="OP_INVOKE_VIRTUAL_JUMBO" since="11"/>
-		<field name="OP_INVOKE_VIRTUAL_QUICK" deprecated="16"/>
-		<field name="OP_INVOKE_VIRTUAL_QUICK_RANGE" deprecated="16"/>
-		<field name="OP_INVOKE_VIRTUAL_RANGE"/>
-		<field name="OP_IPUT"/>
-		<field name="OP_IPUT_BOOLEAN"/>
-		<field name="OP_IPUT_BOOLEAN_JUMBO" since="11"/>
-		<field name="OP_IPUT_BYTE"/>
-		<field name="OP_IPUT_BYTE_JUMBO" since="11"/>
-		<field name="OP_IPUT_CHAR"/>
-		<field name="OP_IPUT_CHAR_JUMBO" since="11"/>
-		<field name="OP_IPUT_JUMBO" since="11"/>
-		<field name="OP_IPUT_OBJECT"/>
-		<field name="OP_IPUT_OBJECT_JUMBO" since="11"/>
-		<field name="OP_IPUT_OBJECT_QUICK" deprecated="16"/>
-		<field name="OP_IPUT_QUICK" deprecated="16"/>
-		<field name="OP_IPUT_SHORT"/>
-		<field name="OP_IPUT_SHORT_JUMBO" since="11"/>
-		<field name="OP_IPUT_WIDE"/>
-		<field name="OP_IPUT_WIDE_JUMBO" since="11"/>
-		<field name="OP_IPUT_WIDE_QUICK" deprecated="16"/>
-		<field name="OP_IPUT_WIDE_VOLATILE" since="9" deprecated="16"/>
-		<field name="OP_LONG_TO_DOUBLE"/>
-		<field name="OP_LONG_TO_FLOAT"/>
-		<field name="OP_LONG_TO_INT"/>
-		<field name="OP_MONITOR_ENTER"/>
-		<field name="OP_MONITOR_EXIT"/>
-		<field name="OP_MOVE"/>
-		<field name="OP_MOVE_16"/>
-		<field name="OP_MOVE_EXCEPTION"/>
-		<field name="OP_MOVE_FROM16"/>
-		<field name="OP_MOVE_OBJECT"/>
-		<field name="OP_MOVE_OBJECT_16"/>
-		<field name="OP_MOVE_OBJECT_FROM16"/>
-		<field name="OP_MOVE_RESULT"/>
-		<field name="OP_MOVE_RESULT_OBJECT"/>
-		<field name="OP_MOVE_RESULT_WIDE"/>
-		<field name="OP_MOVE_WIDE"/>
-		<field name="OP_MOVE_WIDE_16"/>
-		<field name="OP_MOVE_WIDE_FROM16"/>
-		<field name="OP_MUL_DOUBLE"/>
-		<field name="OP_MUL_DOUBLE_2ADDR"/>
-		<field name="OP_MUL_FLOAT"/>
-		<field name="OP_MUL_FLOAT_2ADDR"/>
-		<field name="OP_MUL_INT"/>
-		<field name="OP_MUL_INT_2ADDR"/>
-		<field name="OP_MUL_INT_LIT16"/>
-		<field name="OP_MUL_INT_LIT8"/>
-		<field name="OP_MUL_LONG"/>
-		<field name="OP_MUL_LONG_2ADDR"/>
-		<field name="OP_NEG_DOUBLE"/>
-		<field name="OP_NEG_FLOAT"/>
-		<field name="OP_NEG_INT"/>
-		<field name="OP_NEG_LONG"/>
-		<field name="OP_NEW_ARRAY"/>
-		<field name="OP_NEW_ARRAY_JUMBO" since="11"/>
-		<field name="OP_NEW_INSTANCE"/>
-		<field name="OP_NEW_INSTANCE_JUMBO" since="11"/>
-		<field name="OP_NOP"/>
-		<field name="OP_NOT_INT"/>
-		<field name="OP_NOT_LONG"/>
-		<field name="OP_OR_INT"/>
-		<field name="OP_OR_INT_2ADDR"/>
-		<field name="OP_OR_INT_LIT16"/>
-		<field name="OP_OR_INT_LIT8"/>
-		<field name="OP_OR_LONG"/>
-		<field name="OP_OR_LONG_2ADDR"/>
-		<field name="OP_PACKED_SWITCH"/>
-		<field name="OP_REM_DOUBLE"/>
-		<field name="OP_REM_DOUBLE_2ADDR"/>
-		<field name="OP_REM_FLOAT"/>
-		<field name="OP_REM_FLOAT_2ADDR"/>
-		<field name="OP_REM_INT"/>
-		<field name="OP_REM_INT_2ADDR"/>
-		<field name="OP_REM_INT_LIT16"/>
-		<field name="OP_REM_INT_LIT8"/>
-		<field name="OP_REM_LONG"/>
-		<field name="OP_REM_LONG_2ADDR"/>
-		<field name="OP_RETURN"/>
-		<field name="OP_RETURN_OBJECT"/>
-		<field name="OP_RETURN_VOID"/>
-		<field name="OP_RETURN_WIDE"/>
-		<field name="OP_RSUB_INT"/>
-		<field name="OP_RSUB_INT_LIT8"/>
-		<field name="OP_SGET"/>
-		<field name="OP_SGET_BOOLEAN"/>
-		<field name="OP_SGET_BOOLEAN_JUMBO" since="11"/>
-		<field name="OP_SGET_BYTE"/>
-		<field name="OP_SGET_BYTE_JUMBO" since="11"/>
-		<field name="OP_SGET_CHAR"/>
-		<field name="OP_SGET_CHAR_JUMBO" since="11"/>
-		<field name="OP_SGET_JUMBO" since="11"/>
-		<field name="OP_SGET_OBJECT"/>
-		<field name="OP_SGET_OBJECT_JUMBO" since="11"/>
-		<field name="OP_SGET_SHORT"/>
-		<field name="OP_SGET_SHORT_JUMBO" since="11"/>
-		<field name="OP_SGET_WIDE"/>
-		<field name="OP_SGET_WIDE_JUMBO" since="11"/>
-		<field name="OP_SGET_WIDE_VOLATILE" since="9" deprecated="16"/>
-		<field name="OP_SHL_INT"/>
-		<field name="OP_SHL_INT_2ADDR"/>
-		<field name="OP_SHL_INT_LIT8"/>
-		<field name="OP_SHL_LONG"/>
-		<field name="OP_SHL_LONG_2ADDR"/>
-		<field name="OP_SHR_INT"/>
-		<field name="OP_SHR_INT_2ADDR"/>
-		<field name="OP_SHR_INT_LIT8"/>
-		<field name="OP_SHR_LONG"/>
-		<field name="OP_SHR_LONG_2ADDR"/>
-		<field name="OP_SPARSE_SWITCH"/>
-		<field name="OP_SPUT"/>
-		<field name="OP_SPUT_BOOLEAN"/>
-		<field name="OP_SPUT_BOOLEAN_JUMBO" since="11"/>
-		<field name="OP_SPUT_BYTE"/>
-		<field name="OP_SPUT_BYTE_JUMBO" since="11"/>
-		<field name="OP_SPUT_CHAR"/>
-		<field name="OP_SPUT_CHAR_JUMBO" since="11"/>
-		<field name="OP_SPUT_JUMBO" since="11"/>
-		<field name="OP_SPUT_OBJECT"/>
-		<field name="OP_SPUT_OBJECT_JUMBO" since="11"/>
-		<field name="OP_SPUT_SHORT"/>
-		<field name="OP_SPUT_SHORT_JUMBO" since="11"/>
-		<field name="OP_SPUT_WIDE"/>
-		<field name="OP_SPUT_WIDE_JUMBO" since="11"/>
-		<field name="OP_SPUT_WIDE_VOLATILE" since="9" deprecated="16"/>
-		<field name="OP_SUB_DOUBLE"/>
-		<field name="OP_SUB_DOUBLE_2ADDR"/>
-		<field name="OP_SUB_FLOAT"/>
-		<field name="OP_SUB_FLOAT_2ADDR"/>
-		<field name="OP_SUB_INT"/>
-		<field name="OP_SUB_INT_2ADDR"/>
-		<field name="OP_SUB_LONG"/>
-		<field name="OP_SUB_LONG_2ADDR"/>
-		<field name="OP_THROW"/>
-		<field name="OP_THROW_VERIFICATION_ERROR" since="8" deprecated="16"/>
-		<field name="OP_UNUSED_3e" removed="8"/>
-		<field name="OP_UNUSED_3f" removed="8"/>
-		<field name="OP_UNUSED_40" removed="8"/>
-		<field name="OP_UNUSED_41" removed="8"/>
-		<field name="OP_UNUSED_42" removed="8"/>
-		<field name="OP_UNUSED_43" removed="8"/>
-		<field name="OP_UNUSED_73" removed="8"/>
-		<field name="OP_UNUSED_79" removed="8"/>
-		<field name="OP_UNUSED_7A" removed="8"/>
-		<field name="OP_UNUSED_E3" removed="8"/>
-		<field name="OP_UNUSED_E4" removed="8"/>
-		<field name="OP_UNUSED_E5" removed="8"/>
-		<field name="OP_UNUSED_E6" removed="8"/>
-		<field name="OP_UNUSED_E7" removed="8"/>
-		<field name="OP_UNUSED_E8" removed="8"/>
-		<field name="OP_UNUSED_E9" removed="8"/>
-		<field name="OP_UNUSED_EA" removed="8"/>
-		<field name="OP_UNUSED_EB" removed="8"/>
-		<field name="OP_UNUSED_EC" removed="8"/>
-		<field name="OP_UNUSED_ED" removed="8"/>
-		<field name="OP_UNUSED_EF" removed="8"/>
-		<field name="OP_UNUSED_F1" removed="8"/>
-		<field name="OP_UNUSED_FC" removed="8"/>
-		<field name="OP_UNUSED_FD" removed="8"/>
-		<field name="OP_UNUSED_FE" removed="8"/>
-		<field name="OP_UNUSED_FF" removed="8"/>
-		<field name="OP_USHR_INT"/>
-		<field name="OP_USHR_INT_2ADDR"/>
-		<field name="OP_USHR_INT_LIT8"/>
-		<field name="OP_USHR_LONG"/>
-		<field name="OP_USHR_LONG_2ADDR"/>
-		<field name="OP_XOR_INT"/>
-		<field name="OP_XOR_INT_2ADDR"/>
-		<field name="OP_XOR_INT_LIT16"/>
-		<field name="OP_XOR_INT_LIT8"/>
-		<field name="OP_XOR_LONG"/>
-		<field name="OP_XOR_LONG_2ADDR"/>
-	</class>
-	<class name="dalvik/system/AllocationLimitError" since="1" removed="9">
-		<extends name="java/lang/VirtualMachineError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="dalvik/system/BaseDexClassLoader" since="14">
-		<extends name="java/lang/ClassLoader"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
-	</class>
-	<class name="dalvik/system/DelegateLastClassLoader" since="27">
-		<extends name="dalvik/system/PathClassLoader"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
-	</class>
-	<class name="dalvik/system/DexClassLoader" since="3">
-		<extends name="dalvik/system/BaseDexClassLoader" since="14"/>
-		<extends name="java/lang/ClassLoader" removed="14"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
-	</class>
-	<class name="dalvik/system/DexFile" since="1" deprecated="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/io/File;)V" deprecated="26"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="26"/>
-		<method name="close()V"/>
-		<method name="entries()Ljava/util/Enumeration;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="isDexOptNeeded(Ljava/lang/String;)Z"/>
-		<method name="loadClass(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;"/>
-		<method name="loadDex(Ljava/lang/String;Ljava/lang/String;I)Ldalvik/system/DexFile;" since="3" deprecated="26"/>
-	</class>
-	<class name="dalvik/system/InMemoryDexClassLoader" since="26">
-		<extends name="dalvik/system/BaseDexClassLoader"/>
-		<method name="&lt;init>(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V"/>
-		<method name="&lt;init>([Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V" since="27"/>
-	</class>
-	<class name="dalvik/system/PathClassLoader" since="1">
-		<extends name="dalvik/system/BaseDexClassLoader" since="14"/>
-		<extends name="java/lang/ClassLoader" removed="14"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
-	</class>
-	<class name="dalvik/system/PotentialDeadlockError" since="1" removed="9">
-		<extends name="java/lang/VirtualMachineError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="dalvik/system/StaleDexCacheError" since="1" removed="9">
-		<extends name="java/lang/VirtualMachineError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="dalvik/system/TemporaryDirectory" since="1" removed="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="setUpDirectory(Ljava/io/File;)V"/>
-		<method name="setUpDirectory(Ljava/lang/String;)V"/>
-	</class>
-	<class name="dalvik/system/TouchDex" since="1" removed="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="main([Ljava/lang/String;)V"/>
-		<method name="start(Ljava/lang/String;)I"/>
-	</class>
-	<class name="dalvik/system/VMDebug" since="1" removed="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="dumpHprofData(Ljava/lang/String;)V" since="3"/>
-		<method name="getAllocCount(I)I"/>
-		<method name="getInstructionCount([I)V"/>
-		<method name="getLoadedClassCount()I"/>
-		<method name="isDebuggerConnected()Z"/>
-		<method name="isDebuggingEnabled()Z" since="3"/>
-		<method name="lastDebuggerActivity()J"/>
-		<method name="printLoadedClasses(I)V"/>
-		<method name="resetAllocCount(I)V"/>
-		<method name="resetInstructionCount()V"/>
-		<method name="setAllocationLimit(I)I"/>
-		<method name="setGlobalAllocationLimit(I)I"/>
-		<method name="startAllocCounting()V"/>
-		<method name="startEmulatorTracing()V"/>
-		<method name="startInstructionCounting()V"/>
-		<method name="startMethodTracing()V"/>
-		<method name="startMethodTracing(Ljava/lang/String;II)V"/>
-		<method name="stopAllocCounting()V"/>
-		<method name="stopEmulatorTracing()V"/>
-		<method name="stopInstructionCounting()V"/>
-		<method name="stopMethodTracing()V"/>
-		<method name="threadCpuTimeNanos()J"/>
-		<field name="DEFAULT_METHOD_TRACE_FILE_NAME"/>
-		<field name="KIND_ALL_COUNTS"/>
-		<field name="KIND_GLOBAL_ALLOCATED_BYTES"/>
-		<field name="KIND_GLOBAL_ALLOCATED_OBJECTS"/>
-		<field name="KIND_GLOBAL_CLASS_INIT_COUNT" since="8"/>
-		<field name="KIND_GLOBAL_CLASS_INIT_TIME" since="8"/>
-		<field name="KIND_GLOBAL_EXT_ALLOCATED_BYTES"/>
-		<field name="KIND_GLOBAL_EXT_ALLOCATED_OBJECTS"/>
-		<field name="KIND_GLOBAL_EXT_FREED_BYTES"/>
-		<field name="KIND_GLOBAL_EXT_FREED_OBJECTS"/>
-		<field name="KIND_GLOBAL_FREED_BYTES"/>
-		<field name="KIND_GLOBAL_FREED_OBJECTS"/>
-		<field name="KIND_GLOBAL_GC_INVOCATIONS"/>
-		<field name="KIND_THREAD_ALLOCATED_BYTES"/>
-		<field name="KIND_THREAD_ALLOCATED_OBJECTS"/>
-		<field name="KIND_THREAD_CLASS_INIT_COUNT" since="8"/>
-		<field name="KIND_THREAD_CLASS_INIT_TIME" since="8"/>
-		<field name="KIND_THREAD_EXT_ALLOCATED_BYTES"/>
-		<field name="KIND_THREAD_EXT_ALLOCATED_OBJECTS"/>
-		<field name="KIND_THREAD_EXT_FREED_BYTES"/>
-		<field name="KIND_THREAD_EXT_FREED_OBJECTS"/>
-		<field name="KIND_THREAD_FREED_BYTES"/>
-		<field name="KIND_THREAD_FREED_OBJECTS"/>
-		<field name="KIND_THREAD_GC_INVOCATIONS"/>
-		<field name="TRACE_COUNT_ALLOCS"/>
-	</class>
-	<class name="dalvik/system/VMRuntime" since="1" removed="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="gcSoftReferences()V"/>
-		<method name="getExternalBytesAllocated()J"/>
-		<method name="getMinimumHeapSize()J"/>
-		<method name="getRuntime()Ldalvik/system/VMRuntime;"/>
-		<method name="getTargetHeapUtilization()F"/>
-		<method name="runFinalizationSync()V"/>
-		<method name="setMinimumHeapSize(J)J"/>
-		<method name="setTargetHeapUtilization(F)F"/>
-	</class>
-	<class name="dalvik/system/VMStack" since="1" removed="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCallingClassLoader()Ljava/lang/ClassLoader;"/>
-		<method name="getCallingClassLoader2()Ljava/lang/ClassLoader;"/>
-		<method name="getClasses(IZ)[Ljava/lang/Class;"/>
-		<method name="getThreadStackTrace(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement;"/>
-	</class>
-	<class name="dalvik/system/Zygote" since="1" removed="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="fork()I"/>
-		<method name="forkAndSpecialize(II[II[[I)I" since="3"/>
-		<method name="forkAndSpecialize(II[IZ[[I)I"/>
-		<method name="forkSystemServer(II[II[[I)I" since="3"/>
-		<method name="forkSystemServer(II[IZ[[I)I"/>
-		<field name="DEBUG_ENABLE_ASSERT" since="3"/>
-		<field name="DEBUG_ENABLE_CHECKJNI" since="3"/>
-		<field name="DEBUG_ENABLE_DEBUGGER" since="3"/>
-		<field name="DEBUG_ENABLE_SAFEMODE" since="8"/>
-	</class>
-	<class name="java/awt/font/NumericShaper" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(II)V" since="29"/>
-		<method name="getContextualShaper(I)Ljava/awt/font/NumericShaper;"/>
-		<method name="getContextualShaper(II)Ljava/awt/font/NumericShaper;"/>
-		<method name="getContextualShaper(Ljava/util/Set;)Ljava/awt/font/NumericShaper;" since="24"/>
-		<method name="getContextualShaper(Ljava/util/Set;Ljava/awt/font/NumericShaper$Range;)Ljava/awt/font/NumericShaper;" since="24"/>
-		<method name="getRangeSet()Ljava/util/Set;" since="24"/>
-		<method name="getRanges()I"/>
-		<method name="getShaper(I)Ljava/awt/font/NumericShaper;"/>
-		<method name="getShaper(Ljava/awt/font/NumericShaper$Range;)Ljava/awt/font/NumericShaper;" since="24"/>
-		<method name="isContextual()Z"/>
-		<method name="shape([CII)V"/>
-		<method name="shape([CIII)V"/>
-		<method name="shape([CIILjava/awt/font/NumericShaper$Range;)V" since="24"/>
-		<field name="ALL_RANGES"/>
-		<field name="ARABIC"/>
-		<field name="BENGALI"/>
-		<field name="DEVANAGARI"/>
-		<field name="EASTERN_ARABIC"/>
-		<field name="ETHIOPIC"/>
-		<field name="EUROPEAN"/>
-		<field name="GUJARATI"/>
-		<field name="GURMUKHI"/>
-		<field name="KANNADA"/>
-		<field name="KHMER"/>
-		<field name="LAO"/>
-		<field name="MALAYALAM"/>
-		<field name="MONGOLIAN"/>
-		<field name="MYANMAR"/>
-		<field name="ORIYA"/>
-		<field name="TAMIL"/>
-		<field name="TELUGU"/>
-		<field name="THAI"/>
-		<field name="TIBETAN"/>
-	</class>
-	<class name="java/awt/font/NumericShaper$Range" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/awt/font/NumericShaper$Range;"/>
-		<method name="values()[Ljava/awt/font/NumericShaper$Range;"/>
-		<field name="ARABIC"/>
-		<field name="BALINESE"/>
-		<field name="BENGALI"/>
-		<field name="CHAM"/>
-		<field name="DEVANAGARI"/>
-		<field name="EASTERN_ARABIC"/>
-		<field name="ETHIOPIC"/>
-		<field name="EUROPEAN"/>
-		<field name="GUJARATI"/>
-		<field name="GURMUKHI"/>
-		<field name="JAVANESE"/>
-		<field name="KANNADA"/>
-		<field name="KAYAH_LI"/>
-		<field name="KHMER"/>
-		<field name="LAO"/>
-		<field name="LEPCHA"/>
-		<field name="LIMBU"/>
-		<field name="MALAYALAM"/>
-		<field name="MEETEI_MAYEK"/>
-		<field name="MONGOLIAN"/>
-		<field name="MYANMAR"/>
-		<field name="MYANMAR_SHAN"/>
-		<field name="NEW_TAI_LUE"/>
-		<field name="NKO"/>
-		<field name="OL_CHIKI"/>
-		<field name="ORIYA"/>
-		<field name="SAURASHTRA"/>
-		<field name="SUNDANESE"/>
-		<field name="TAI_THAM_HORA"/>
-		<field name="TAI_THAM_THAM"/>
-		<field name="TAMIL"/>
-		<field name="TELUGU"/>
-		<field name="THAI"/>
-		<field name="TIBETAN"/>
-		<field name="VAI"/>
-	</class>
-	<class name="java/awt/font/TextAttribute" since="1">
-		<extends name="java/text/AttributedCharacterIterator$Attribute"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="BACKGROUND"/>
-		<field name="BIDI_EMBEDDING"/>
-		<field name="CHAR_REPLACEMENT"/>
-		<field name="FAMILY"/>
-		<field name="FONT"/>
-		<field name="FOREGROUND"/>
-		<field name="INPUT_METHOD_HIGHLIGHT"/>
-		<field name="INPUT_METHOD_UNDERLINE"/>
-		<field name="JUSTIFICATION"/>
-		<field name="JUSTIFICATION_FULL"/>
-		<field name="JUSTIFICATION_NONE"/>
-		<field name="KERNING" since="9"/>
-		<field name="KERNING_ON" since="9"/>
-		<field name="LIGATURES" since="9"/>
-		<field name="LIGATURES_ON" since="9"/>
-		<field name="NUMERIC_SHAPING"/>
-		<field name="POSTURE"/>
-		<field name="POSTURE_OBLIQUE"/>
-		<field name="POSTURE_REGULAR"/>
-		<field name="RUN_DIRECTION"/>
-		<field name="RUN_DIRECTION_LTR"/>
-		<field name="RUN_DIRECTION_RTL"/>
-		<field name="SIZE"/>
-		<field name="STRIKETHROUGH"/>
-		<field name="STRIKETHROUGH_ON"/>
-		<field name="SUPERSCRIPT"/>
-		<field name="SUPERSCRIPT_SUB"/>
-		<field name="SUPERSCRIPT_SUPER"/>
-		<field name="SWAP_COLORS"/>
-		<field name="SWAP_COLORS_ON"/>
-		<field name="TRACKING" since="9"/>
-		<field name="TRACKING_LOOSE" since="9"/>
-		<field name="TRACKING_TIGHT" since="9"/>
-		<field name="TRANSFORM"/>
-		<field name="UNDERLINE"/>
-		<field name="UNDERLINE_LOW_DASHED"/>
-		<field name="UNDERLINE_LOW_DOTTED"/>
-		<field name="UNDERLINE_LOW_GRAY"/>
-		<field name="UNDERLINE_LOW_ONE_PIXEL"/>
-		<field name="UNDERLINE_LOW_TWO_PIXEL"/>
-		<field name="UNDERLINE_ON"/>
-		<field name="WEIGHT"/>
-		<field name="WEIGHT_BOLD"/>
-		<field name="WEIGHT_DEMIBOLD"/>
-		<field name="WEIGHT_DEMILIGHT"/>
-		<field name="WEIGHT_EXTRABOLD"/>
-		<field name="WEIGHT_EXTRA_LIGHT"/>
-		<field name="WEIGHT_HEAVY"/>
-		<field name="WEIGHT_LIGHT"/>
-		<field name="WEIGHT_MEDIUM"/>
-		<field name="WEIGHT_REGULAR"/>
-		<field name="WEIGHT_SEMIBOLD"/>
-		<field name="WEIGHT_ULTRABOLD"/>
-		<field name="WIDTH"/>
-		<field name="WIDTH_CONDENSED"/>
-		<field name="WIDTH_EXTENDED"/>
-		<field name="WIDTH_REGULAR"/>
-		<field name="WIDTH_SEMI_CONDENSED"/>
-		<field name="WIDTH_SEMI_EXTENDED"/>
-	</class>
-	<class name="java/beans/IndexedPropertyChangeEvent" since="3">
-		<extends name="java/beans/PropertyChangeEvent"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;I)V"/>
-		<method name="getIndex()I"/>
-	</class>
-	<class name="java/beans/PropertyChangeEvent" since="3">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="getNewValue()Ljava/lang/Object;"/>
-		<method name="getOldValue()Ljava/lang/Object;"/>
-		<method name="getPropagationId()Ljava/lang/Object;"/>
-		<method name="getPropertyName()Ljava/lang/String;"/>
-		<method name="setPropagationId(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/beans/PropertyChangeListener" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="propertyChange(Ljava/beans/PropertyChangeEvent;)V"/>
-	</class>
-	<class name="java/beans/PropertyChangeListenerProxy" since="3">
-		<extends name="java/util/EventListenerProxy"/>
-		<implements name="java/beans/PropertyChangeListener"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V"/>
-		<method name="getPropertyName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/beans/PropertyChangeSupport" since="3">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V"/>
-		<method name="addPropertyChangeListener(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V"/>
-		<method name="fireIndexedPropertyChange(Ljava/lang/String;III)V"/>
-		<method name="fireIndexedPropertyChange(Ljava/lang/String;ILjava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="fireIndexedPropertyChange(Ljava/lang/String;IZZ)V"/>
-		<method name="firePropertyChange(Ljava/beans/PropertyChangeEvent;)V"/>
-		<method name="firePropertyChange(Ljava/lang/String;II)V"/>
-		<method name="firePropertyChange(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="firePropertyChange(Ljava/lang/String;ZZ)V"/>
-		<method name="getPropertyChangeListeners()[Ljava/beans/PropertyChangeListener;"/>
-		<method name="getPropertyChangeListeners(Ljava/lang/String;)[Ljava/beans/PropertyChangeListener;"/>
-		<method name="hasListeners(Ljava/lang/String;)Z"/>
-		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V"/>
-		<method name="removePropertyChangeListener(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V"/>
-	</class>
-	<class name="java/io/BufferedInputStream" since="1">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
-		<field name="buf"/>
-		<field name="count"/>
-		<field name="marklimit"/>
-		<field name="markpos"/>
-		<field name="pos"/>
-	</class>
-	<class name="java/io/BufferedOutputStream" since="1">
-		<extends name="java/io/FilterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;I)V"/>
-		<field name="buf"/>
-		<field name="count"/>
-	</class>
-	<class name="java/io/BufferedReader" since="1">
-		<extends name="java/io/Reader"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<method name="&lt;init>(Ljava/io/Reader;I)V"/>
-		<method name="lines()Ljava/util/stream/Stream;" since="24"/>
-		<method name="readLine()Ljava/lang/String;"/>
-	</class>
-	<class name="java/io/BufferedWriter" since="1">
-		<extends name="java/io/Writer"/>
-		<method name="&lt;init>(Ljava/io/Writer;)V"/>
-		<method name="&lt;init>(Ljava/io/Writer;I)V"/>
-		<method name="newLine()V"/>
-	</class>
-	<class name="java/io/ByteArrayInputStream" since="1">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="&lt;init>([BII)V"/>
-		<field name="buf"/>
-		<field name="count"/>
-		<field name="mark"/>
-		<field name="pos"/>
-	</class>
-	<class name="java/io/ByteArrayOutputStream" since="1">
-		<extends name="java/io/OutputStream"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="reset()V"/>
-		<method name="size()I"/>
-		<method name="toByteArray()[B"/>
-		<method name="toString(I)Ljava/lang/String;" deprecated="16"/>
-		<method name="toString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="writeTo(Ljava/io/OutputStream;)V"/>
-		<field name="buf"/>
-		<field name="count"/>
-	</class>
-	<class name="java/io/CharArrayReader" since="1">
-		<extends name="java/io/Reader"/>
-		<method name="&lt;init>([C)V"/>
-		<method name="&lt;init>([CII)V"/>
-		<field name="buf"/>
-		<field name="count"/>
-		<field name="markedPos"/>
-		<field name="pos"/>
-	</class>
-	<class name="java/io/CharArrayWriter" since="1">
-		<extends name="java/io/Writer"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(C)Ljava/io/CharArrayWriter;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/io/CharArrayWriter;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/CharArrayWriter;"/>
-		<method name="reset()V"/>
-		<method name="size()I"/>
-		<method name="toCharArray()[C"/>
-		<method name="writeTo(Ljava/io/Writer;)V"/>
-		<field name="buf"/>
-		<field name="count"/>
-	</class>
-	<class name="java/io/CharConversionException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/Closeable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<method name="close()V"/>
-	</class>
-	<class name="java/io/Console" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Flushable"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;"/>
-		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;"/>
-		<method name="readLine()Ljava/lang/String;"/>
-		<method name="readLine(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="readPassword()[C"/>
-		<method name="readPassword(Ljava/lang/String;[Ljava/lang/Object;)[C"/>
-		<method name="reader()Ljava/io/Reader;"/>
-		<method name="writer()Ljava/io/PrintWriter;"/>
-	</class>
-	<class name="java/io/DataInput" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="readBoolean()Z"/>
-		<method name="readByte()B"/>
-		<method name="readChar()C"/>
-		<method name="readDouble()D"/>
-		<method name="readFloat()F"/>
-		<method name="readFully([B)V"/>
-		<method name="readFully([BII)V"/>
-		<method name="readInt()I"/>
-		<method name="readLine()Ljava/lang/String;"/>
-		<method name="readLong()J"/>
-		<method name="readShort()S"/>
-		<method name="readUTF()Ljava/lang/String;"/>
-		<method name="readUnsignedByte()I"/>
-		<method name="readUnsignedShort()I"/>
-		<method name="skipBytes(I)I"/>
-	</class>
-	<class name="java/io/DataInputStream" since="1">
-		<extends name="java/io/FilterInputStream"/>
-		<implements name="java/io/DataInput"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="readUTF(Ljava/io/DataInput;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/io/DataOutput" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="write(I)V"/>
-		<method name="write([B)V"/>
-		<method name="write([BII)V"/>
-		<method name="writeBoolean(Z)V"/>
-		<method name="writeByte(I)V"/>
-		<method name="writeBytes(Ljava/lang/String;)V"/>
-		<method name="writeChar(I)V"/>
-		<method name="writeChars(Ljava/lang/String;)V"/>
-		<method name="writeDouble(D)V"/>
-		<method name="writeFloat(F)V"/>
-		<method name="writeInt(I)V"/>
-		<method name="writeLong(J)V"/>
-		<method name="writeShort(I)V"/>
-		<method name="writeUTF(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/DataOutputStream" since="1">
-		<extends name="java/io/FilterOutputStream"/>
-		<implements name="java/io/DataOutput"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="size()I"/>
-		<field name="written"/>
-	</class>
-	<class name="java/io/EOFException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/Externalizable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="readExternal(Ljava/io/ObjectInput;)V"/>
-		<method name="writeExternal(Ljava/io/ObjectOutput;)V"/>
-	</class>
-	<class name="java/io/File" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<method name="canExecute()Z" since="9"/>
-		<method name="canRead()Z"/>
-		<method name="canWrite()Z"/>
-		<method name="compareTo(Ljava/io/File;)I"/>
-		<method name="createNewFile()Z"/>
-		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;"/>
-		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;"/>
-		<method name="delete()Z"/>
-		<method name="deleteOnExit()V"/>
-		<method name="exists()Z"/>
-		<method name="getAbsoluteFile()Ljava/io/File;"/>
-		<method name="getAbsolutePath()Ljava/lang/String;"/>
-		<method name="getCanonicalFile()Ljava/io/File;"/>
-		<method name="getCanonicalPath()Ljava/lang/String;"/>
-		<method name="getFreeSpace()J" since="9"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getParent()Ljava/lang/String;"/>
-		<method name="getParentFile()Ljava/io/File;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getTotalSpace()J" since="9"/>
-		<method name="getUsableSpace()J" since="9"/>
-		<method name="isAbsolute()Z"/>
-		<method name="isDirectory()Z"/>
-		<method name="isFile()Z"/>
-		<method name="isHidden()Z"/>
-		<method name="lastModified()J"/>
-		<method name="length()J"/>
-		<method name="list()[Ljava/lang/String;"/>
-		<method name="list(Ljava/io/FilenameFilter;)[Ljava/lang/String;"/>
-		<method name="listFiles()[Ljava/io/File;"/>
-		<method name="listFiles(Ljava/io/FileFilter;)[Ljava/io/File;"/>
-		<method name="listFiles(Ljava/io/FilenameFilter;)[Ljava/io/File;"/>
-		<method name="listRoots()[Ljava/io/File;"/>
-		<method name="mkdir()Z"/>
-		<method name="mkdirs()Z"/>
-		<method name="renameTo(Ljava/io/File;)Z"/>
-		<method name="setExecutable(Z)Z" since="9"/>
-		<method name="setExecutable(ZZ)Z" since="9"/>
-		<method name="setLastModified(J)Z"/>
-		<method name="setReadOnly()Z"/>
-		<method name="setReadable(Z)Z" since="9"/>
-		<method name="setReadable(ZZ)Z" since="9"/>
-		<method name="setWritable(Z)Z" since="9"/>
-		<method name="setWritable(ZZ)Z" since="9"/>
-		<method name="toPath()Ljava/nio/file/Path;" since="26"/>
-		<method name="toURI()Ljava/net/URI;"/>
-		<method name="toURL()Ljava/net/URL;" deprecated="16"/>
-		<field name="pathSeparator"/>
-		<field name="pathSeparatorChar"/>
-		<field name="separator"/>
-		<field name="separatorChar"/>
-	</class>
-	<class name="java/io/FileDescriptor" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="sync()V"/>
-		<method name="valid()Z"/>
-		<field name="err"/>
-		<field name="in"/>
-		<field name="out"/>
-	</class>
-	<class name="java/io/FileFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/io/File;)Z"/>
-	</class>
-	<class name="java/io/FileInputStream" since="1">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getChannel()Ljava/nio/channels/FileChannel;"/>
-		<method name="getFD()Ljava/io/FileDescriptor;"/>
-	</class>
-	<class name="java/io/FileNotFoundException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/FileOutputStream" since="1">
-		<extends name="java/io/OutputStream"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Z)V"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-		<method name="getChannel()Ljava/nio/channels/FileChannel;"/>
-		<method name="getFD()Ljava/io/FileDescriptor;"/>
-	</class>
-	<class name="java/io/FilePermission" since="1">
-		<extends name="java/security/Permission"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/FileReader" since="1">
-		<extends name="java/io/InputStreamReader"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/FileWriter" since="1">
-		<extends name="java/io/OutputStreamWriter"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Z)V"/>
-		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-	</class>
-	<class name="java/io/FilenameFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/io/File;Ljava/lang/String;)Z"/>
-	</class>
-	<class name="java/io/FilterInputStream" since="1">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<field name="in"/>
-	</class>
-	<class name="java/io/FilterOutputStream" since="1">
-		<extends name="java/io/OutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<field name="out"/>
-	</class>
-	<class name="java/io/FilterReader" since="1">
-		<extends name="java/io/Reader"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<field name="in"/>
-	</class>
-	<class name="java/io/FilterWriter" since="1">
-		<extends name="java/io/Writer"/>
-		<method name="&lt;init>(Ljava/io/Writer;)V"/>
-		<field name="out"/>
-	</class>
-	<class name="java/io/Flushable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="flush()V"/>
-	</class>
-	<class name="java/io/IOError" since="9">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/io/IOException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
-	</class>
-	<class name="java/io/InputStream" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V"/>
-		<method name="available()I"/>
-		<method name="mark(I)V"/>
-		<method name="markSupported()Z"/>
-		<method name="read()I"/>
-		<method name="read([B)I"/>
-		<method name="read([BII)I"/>
-		<method name="reset()V"/>
-		<method name="skip(J)J"/>
-	</class>
-	<class name="java/io/InputStreamReader" since="1">
-		<extends name="java/io/Reader"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/nio/charset/CharsetDecoder;)V"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-	</class>
-	<class name="java/io/InterruptedIOException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="bytesTransferred"/>
-	</class>
-	<class name="java/io/InvalidClassException" since="1">
-		<extends name="java/io/ObjectStreamException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="classname"/>
-	</class>
-	<class name="java/io/InvalidObjectException" since="1">
-		<extends name="java/io/ObjectStreamException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/LineNumberInputStream" since="1" deprecated="1">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="getLineNumber()I"/>
-		<method name="setLineNumber(I)V"/>
-	</class>
-	<class name="java/io/LineNumberReader" since="1">
-		<extends name="java/io/BufferedReader"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<method name="&lt;init>(Ljava/io/Reader;I)V"/>
-		<method name="getLineNumber()I"/>
-		<method name="setLineNumber(I)V"/>
-	</class>
-	<class name="java/io/NotActiveException" since="1">
-		<extends name="java/io/ObjectStreamException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/NotSerializableException" since="1">
-		<extends name="java/io/ObjectStreamException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/ObjectInput" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/DataInput"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<method name="available()I"/>
-		<method name="close()V"/>
-		<method name="read()I"/>
-		<method name="read([B)I"/>
-		<method name="read([BII)I"/>
-		<method name="readObject()Ljava/lang/Object;"/>
-		<method name="skip(J)J"/>
-	</class>
-	<class name="java/io/ObjectInputStream" since="1">
-		<extends name="java/io/InputStream"/>
-		<implements name="java/io/ObjectInput"/>
-		<implements name="java/io/ObjectStreamConstants"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="defaultReadObject()V"/>
-		<method name="enableResolveObject(Z)Z"/>
-		<method name="readClassDescriptor()Ljava/io/ObjectStreamClass;"/>
-		<method name="readFields()Ljava/io/ObjectInputStream$GetField;"/>
-		<method name="readObjectOverride()Ljava/lang/Object;"/>
-		<method name="readStreamHeader()V"/>
-		<method name="readUnshared()Ljava/lang/Object;"/>
-		<method name="registerValidation(Ljava/io/ObjectInputValidation;I)V"/>
-		<method name="resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;"/>
-		<method name="resolveObject(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="resolveProxyClass([Ljava/lang/String;)Ljava/lang/Class;"/>
-	</class>
-	<class name="java/io/ObjectInputStream$GetField" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="defaulted(Ljava/lang/String;)Z"/>
-		<method name="get(Ljava/lang/String;B)B"/>
-		<method name="get(Ljava/lang/String;C)C"/>
-		<method name="get(Ljava/lang/String;D)D"/>
-		<method name="get(Ljava/lang/String;F)F"/>
-		<method name="get(Ljava/lang/String;I)I"/>
-		<method name="get(Ljava/lang/String;J)J"/>
-		<method name="get(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="get(Ljava/lang/String;S)S"/>
-		<method name="get(Ljava/lang/String;Z)Z"/>
-		<method name="getObjectStreamClass()Ljava/io/ObjectStreamClass;"/>
-	</class>
-	<class name="java/io/ObjectInputValidation" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="validateObject()V"/>
-	</class>
-	<class name="java/io/ObjectOutput" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/DataOutput"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<method name="close()V"/>
-		<method name="flush()V"/>
-		<method name="writeObject(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/io/ObjectOutputStream" since="1">
-		<extends name="java/io/OutputStream"/>
-		<implements name="java/io/ObjectOutput"/>
-		<implements name="java/io/ObjectStreamConstants"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="annotateClass(Ljava/lang/Class;)V"/>
-		<method name="annotateProxyClass(Ljava/lang/Class;)V"/>
-		<method name="defaultWriteObject()V"/>
-		<method name="drain()V"/>
-		<method name="enableReplaceObject(Z)Z"/>
-		<method name="putFields()Ljava/io/ObjectOutputStream$PutField;"/>
-		<method name="replaceObject(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="reset()V"/>
-		<method name="useProtocolVersion(I)V"/>
-		<method name="writeClassDescriptor(Ljava/io/ObjectStreamClass;)V"/>
-		<method name="writeFields()V"/>
-		<method name="writeObjectOverride(Ljava/lang/Object;)V"/>
-		<method name="writeStreamHeader()V"/>
-		<method name="writeUnshared(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/io/ObjectOutputStream$PutField" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="put(Ljava/lang/String;B)V"/>
-		<method name="put(Ljava/lang/String;C)V"/>
-		<method name="put(Ljava/lang/String;D)V"/>
-		<method name="put(Ljava/lang/String;F)V"/>
-		<method name="put(Ljava/lang/String;I)V"/>
-		<method name="put(Ljava/lang/String;J)V"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="put(Ljava/lang/String;S)V"/>
-		<method name="put(Ljava/lang/String;Z)V"/>
-		<method name="write(Ljava/io/ObjectOutput;)V" deprecated="16"/>
-	</class>
-	<class name="java/io/ObjectStreamClass" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="forClass()Ljava/lang/Class;"/>
-		<method name="getField(Ljava/lang/String;)Ljava/io/ObjectStreamField;"/>
-		<method name="getFields()[Ljava/io/ObjectStreamField;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getSerialVersionUID()J"/>
-		<method name="lookup(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;"/>
-		<method name="lookupAny(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;" since="9"/>
-		<field name="NO_FIELDS"/>
-	</class>
-	<class name="java/io/ObjectStreamConstants" since="1">
-		<extends name="java/lang/Object"/>
-		<field name="PROTOCOL_VERSION_1"/>
-		<field name="PROTOCOL_VERSION_2"/>
-		<field name="SC_BLOCK_DATA"/>
-		<field name="SC_ENUM"/>
-		<field name="SC_EXTERNALIZABLE"/>
-		<field name="SC_SERIALIZABLE"/>
-		<field name="SC_WRITE_METHOD"/>
-		<field name="STREAM_MAGIC"/>
-		<field name="STREAM_VERSION"/>
-		<field name="SUBCLASS_IMPLEMENTATION_PERMISSION"/>
-		<field name="SUBSTITUTION_PERMISSION"/>
-		<field name="TC_ARRAY"/>
-		<field name="TC_BASE"/>
-		<field name="TC_BLOCKDATA"/>
-		<field name="TC_BLOCKDATALONG"/>
-		<field name="TC_CLASS"/>
-		<field name="TC_CLASSDESC"/>
-		<field name="TC_ENDBLOCKDATA"/>
-		<field name="TC_ENUM"/>
-		<field name="TC_EXCEPTION"/>
-		<field name="TC_LONGSTRING"/>
-		<field name="TC_MAX"/>
-		<field name="TC_NULL"/>
-		<field name="TC_OBJECT"/>
-		<field name="TC_PROXYCLASSDESC"/>
-		<field name="TC_REFERENCE"/>
-		<field name="TC_RESET"/>
-		<field name="TC_STRING"/>
-		<field name="baseWireHandle"/>
-	</class>
-	<class name="java/io/ObjectStreamException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/ObjectStreamField" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getOffset()I"/>
-		<method name="getType()Ljava/lang/Class;"/>
-		<method name="getTypeCode()C"/>
-		<method name="getTypeString()Ljava/lang/String;"/>
-		<method name="isPrimitive()Z"/>
-		<method name="isUnshared()Z"/>
-		<method name="setOffset(I)V"/>
-	</class>
-	<class name="java/io/OptionalDataException" since="1">
-		<extends name="java/io/ObjectStreamException"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<field name="eof"/>
-		<field name="length"/>
-	</class>
-	<class name="java/io/OutputStream" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<implements name="java/io/Flushable"/>
-		<method name="&lt;init>()V"/>
-		<method name="write(I)V"/>
-		<method name="write([B)V"/>
-		<method name="write([BII)V"/>
-	</class>
-	<class name="java/io/OutputStreamWriter" since="1">
-		<extends name="java/io/Writer"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/nio/charset/CharsetEncoder;)V"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-	</class>
-	<class name="java/io/PipedInputStream" since="1">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V" since="9"/>
-		<method name="&lt;init>(Ljava/io/PipedOutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/PipedOutputStream;I)V" since="9"/>
-		<method name="connect(Ljava/io/PipedOutputStream;)V"/>
-		<method name="receive(I)V"/>
-		<field name="PIPE_SIZE"/>
-		<field name="buffer"/>
-		<field name="in"/>
-		<field name="out"/>
-	</class>
-	<class name="java/io/PipedOutputStream" since="1">
-		<extends name="java/io/OutputStream"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/PipedInputStream;)V"/>
-		<method name="connect(Ljava/io/PipedInputStream;)V"/>
-	</class>
-	<class name="java/io/PipedReader" since="1">
-		<extends name="java/io/Reader"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V" since="9"/>
-		<method name="&lt;init>(Ljava/io/PipedWriter;)V"/>
-		<method name="&lt;init>(Ljava/io/PipedWriter;I)V" since="9"/>
-		<method name="connect(Ljava/io/PipedWriter;)V"/>
-	</class>
-	<class name="java/io/PipedWriter" since="1">
-		<extends name="java/io/Writer"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/PipedReader;)V"/>
-		<method name="connect(Ljava/io/PipedReader;)V"/>
-	</class>
-	<class name="java/io/PrintStream" since="1">
-		<extends name="java/io/FilterOutputStream"/>
-		<implements name="java/lang/Appendable"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Z)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;ZLjava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="append(C)Ljava/io/PrintStream;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/io/PrintStream;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/PrintStream;"/>
-		<method name="checkError()Z"/>
-		<method name="clearError()V" since="9"/>
-		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
-		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
-		<method name="print(C)V"/>
-		<method name="print(D)V"/>
-		<method name="print(F)V"/>
-		<method name="print(I)V"/>
-		<method name="print(J)V"/>
-		<method name="print(Ljava/lang/Object;)V"/>
-		<method name="print(Ljava/lang/String;)V"/>
-		<method name="print(Z)V"/>
-		<method name="print([C)V"/>
-		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
-		<method name="printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
-		<method name="println()V"/>
-		<method name="println(C)V"/>
-		<method name="println(D)V"/>
-		<method name="println(F)V"/>
-		<method name="println(I)V"/>
-		<method name="println(J)V"/>
-		<method name="println(Ljava/lang/Object;)V"/>
-		<method name="println(Ljava/lang/String;)V"/>
-		<method name="println(Z)V"/>
-		<method name="println([C)V"/>
-		<method name="setError()V"/>
-	</class>
-	<class name="java/io/PrintWriter" since="1">
-		<extends name="java/io/Writer"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Z)V"/>
-		<method name="&lt;init>(Ljava/io/Writer;)V"/>
-		<method name="&lt;init>(Ljava/io/Writer;Z)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="append(C)Ljava/io/PrintWriter;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/PrintWriter;"/>
-		<method name="checkError()Z"/>
-		<method name="clearError()V" since="9"/>
-		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
-		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
-		<method name="print(C)V"/>
-		<method name="print(D)V"/>
-		<method name="print(F)V"/>
-		<method name="print(I)V"/>
-		<method name="print(J)V"/>
-		<method name="print(Ljava/lang/Object;)V"/>
-		<method name="print(Ljava/lang/String;)V"/>
-		<method name="print(Z)V"/>
-		<method name="print([C)V"/>
-		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
-		<method name="printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
-		<method name="println()V"/>
-		<method name="println(C)V"/>
-		<method name="println(D)V"/>
-		<method name="println(F)V"/>
-		<method name="println(I)V"/>
-		<method name="println(J)V"/>
-		<method name="println(Ljava/lang/Object;)V"/>
-		<method name="println(Ljava/lang/String;)V"/>
-		<method name="println(Z)V"/>
-		<method name="println([C)V"/>
-		<method name="setError()V"/>
-		<field name="out"/>
-	</class>
-	<class name="java/io/PushbackInputStream" since="1">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
-		<method name="unread(I)V"/>
-		<method name="unread([B)V"/>
-		<method name="unread([BII)V"/>
-		<field name="buf"/>
-		<field name="pos"/>
-	</class>
-	<class name="java/io/PushbackReader" since="1">
-		<extends name="java/io/FilterReader"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<method name="&lt;init>(Ljava/io/Reader;I)V"/>
-		<method name="unread(I)V"/>
-		<method name="unread([C)V"/>
-		<method name="unread([CII)V"/>
-	</class>
-	<class name="java/io/RandomAccessFile" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<implements name="java/io/DataInput"/>
-		<implements name="java/io/DataOutput"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getChannel()Ljava/nio/channels/FileChannel;"/>
-		<method name="getFD()Ljava/io/FileDescriptor;"/>
-		<method name="getFilePointer()J"/>
-		<method name="length()J"/>
-		<method name="read()I"/>
-		<method name="read([B)I"/>
-		<method name="read([BII)I"/>
-		<method name="seek(J)V"/>
-		<method name="setLength(J)V"/>
-	</class>
-	<class name="java/io/Reader" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<implements name="java/lang/Readable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="mark(I)V"/>
-		<method name="markSupported()Z"/>
-		<method name="read()I"/>
-		<method name="read([C)I"/>
-		<method name="read([CII)I"/>
-		<method name="ready()Z"/>
-		<method name="reset()V"/>
-		<method name="skip(J)J"/>
-		<field name="lock"/>
-	</class>
-	<class name="java/io/SequenceInputStream" since="1">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/util/Enumeration;)V"/>
-	</class>
-	<class name="java/io/Serializable" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/io/SerializablePermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/StreamCorruptedException" since="1">
-		<extends name="java/io/ObjectStreamException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/StreamTokenizer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="16"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<method name="commentChar(I)V"/>
-		<method name="eolIsSignificant(Z)V"/>
-		<method name="lineno()I"/>
-		<method name="lowerCaseMode(Z)V"/>
-		<method name="nextToken()I"/>
-		<method name="ordinaryChar(I)V"/>
-		<method name="ordinaryChars(II)V"/>
-		<method name="parseNumbers()V"/>
-		<method name="pushBack()V"/>
-		<method name="quoteChar(I)V"/>
-		<method name="resetSyntax()V"/>
-		<method name="slashSlashComments(Z)V"/>
-		<method name="slashStarComments(Z)V"/>
-		<method name="whitespaceChars(II)V"/>
-		<method name="wordChars(II)V"/>
-		<field name="TT_EOF"/>
-		<field name="TT_EOL"/>
-		<field name="TT_NUMBER"/>
-		<field name="TT_WORD"/>
-		<field name="nval"/>
-		<field name="sval"/>
-		<field name="ttype"/>
-	</class>
-	<class name="java/io/StringBufferInputStream" since="1" deprecated="1">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="buffer"/>
-		<field name="count"/>
-		<field name="pos"/>
-	</class>
-	<class name="java/io/StringReader" since="1">
-		<extends name="java/io/Reader"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/StringWriter" since="1">
-		<extends name="java/io/Writer"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(C)Ljava/io/StringWriter;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/io/StringWriter;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/StringWriter;"/>
-		<method name="getBuffer()Ljava/lang/StringBuffer;"/>
-	</class>
-	<class name="java/io/SyncFailedException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/UTFDataFormatException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/UncheckedIOException" since="24">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/io/IOException;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/io/IOException;)V"/>
-		<method name="getCause()Ljava/io/IOException;"/>
-	</class>
-	<class name="java/io/UnsupportedEncodingException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/io/WriteAbortedException" since="1">
-		<extends name="java/io/ObjectStreamException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V"/>
-		<field name="detail"/>
-	</class>
-	<class name="java/io/Writer" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<implements name="java/io/Flushable"/>
-		<implements name="java/lang/Appendable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="append(C)Ljava/io/Writer;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/io/Writer;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/Writer;"/>
-		<method name="write(I)V"/>
-		<method name="write(Ljava/lang/String;)V"/>
-		<method name="write(Ljava/lang/String;II)V"/>
-		<method name="write([C)V"/>
-		<method name="write([CII)V"/>
-		<field name="lock"/>
-	</class>
-	<class name="java/lang/AbstractMethodError" since="1">
-		<extends name="java/lang/IncompatibleClassChangeError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/AbstractStringBuilder" since="1" removed="29">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Appendable" since="26"/>
-		<implements name="java/lang/CharSequence" since="24"/>
-		<method name="&lt;init>()V"/>
-		<method name="append(C)Ljava/lang/AbstractStringBuilder;" since="26"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/AbstractStringBuilder;" since="26"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/AbstractStringBuilder;" since="26"/>
-		<method name="capacity()I"/>
-		<method name="charAt(I)C"/>
-		<method name="codePointAt(I)I"/>
-		<method name="codePointBefore(I)I"/>
-		<method name="codePointCount(II)I"/>
-		<method name="ensureCapacity(I)V"/>
-		<method name="getChars(II[CI)V"/>
-		<method name="indexOf(Ljava/lang/String;)I"/>
-		<method name="indexOf(Ljava/lang/String;I)I"/>
-		<method name="lastIndexOf(Ljava/lang/String;)I"/>
-		<method name="lastIndexOf(Ljava/lang/String;I)I"/>
-		<method name="length()I"/>
-		<method name="offsetByCodePoints(II)I"/>
-		<method name="setCharAt(IC)V"/>
-		<method name="setLength(I)V"/>
-		<method name="subSequence(II)Ljava/lang/CharSequence;"/>
-		<method name="substring(I)Ljava/lang/String;"/>
-		<method name="substring(II)Ljava/lang/String;"/>
-		<method name="trimToSize()V"/>
-	</class>
-	<class name="java/lang/Appendable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="append(C)Ljava/lang/Appendable;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;"/>
-	</class>
-	<class name="java/lang/ArithmeticException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/ArrayIndexOutOfBoundsException" since="1">
-		<extends name="java/lang/IndexOutOfBoundsException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/ArrayStoreException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/AssertionError" since="1">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(C)V"/>
-		<method name="&lt;init>(D)V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19"/>
-		<method name="&lt;init>(Z)V"/>
-	</class>
-	<class name="java/lang/AutoCloseable" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="close()V"/>
-	</class>
-	<class name="java/lang/Boolean" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="booleanValue()Z"/>
-		<method name="compare(ZZ)I" since="19"/>
-		<method name="compareTo(Ljava/lang/Boolean;)I"/>
-		<method name="getBoolean(Ljava/lang/String;)Z"/>
-		<method name="hashCode(Z)I" since="24"/>
-		<method name="logicalAnd(ZZ)Z" since="24"/>
-		<method name="logicalOr(ZZ)Z" since="24"/>
-		<method name="logicalXor(ZZ)Z" since="24"/>
-		<method name="parseBoolean(Ljava/lang/String;)Z"/>
-		<method name="toString(Z)Ljava/lang/String;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Boolean;"/>
-		<method name="valueOf(Z)Ljava/lang/Boolean;"/>
-		<field name="FALSE"/>
-		<field name="TRUE"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/BootstrapMethodError" since="26">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/Byte" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(B)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="compare(BB)I" since="19"/>
-		<method name="compareTo(Ljava/lang/Byte;)I"/>
-		<method name="decode(Ljava/lang/String;)Ljava/lang/Byte;"/>
-		<method name="hashCode(B)I" since="24"/>
-		<method name="parseByte(Ljava/lang/String;)B"/>
-		<method name="parseByte(Ljava/lang/String;I)B"/>
-		<method name="toString(B)Ljava/lang/String;"/>
-		<method name="toUnsignedInt(B)I" since="26"/>
-		<method name="toUnsignedLong(B)J" since="26"/>
-		<method name="valueOf(B)Ljava/lang/Byte;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Byte;"/>
-		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Byte;"/>
-		<field name="BYTES" since="24"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_VALUE"/>
-		<field name="SIZE"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/CharSequence" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="charAt(I)C"/>
-		<method name="chars()Ljava/util/stream/IntStream;" since="24"/>
-		<method name="codePoints()Ljava/util/stream/IntStream;" since="24"/>
-		<method name="length()I"/>
-		<method name="subSequence(II)Ljava/lang/CharSequence;"/>
-	</class>
-	<class name="java/lang/Character" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(C)V"/>
-		<method name="charCount(I)I"/>
-		<method name="charValue()C"/>
-		<method name="codePointAt(Ljava/lang/CharSequence;I)I"/>
-		<method name="codePointAt([CI)I"/>
-		<method name="codePointAt([CII)I"/>
-		<method name="codePointBefore(Ljava/lang/CharSequence;I)I"/>
-		<method name="codePointBefore([CI)I"/>
-		<method name="codePointBefore([CII)I"/>
-		<method name="codePointCount(Ljava/lang/CharSequence;II)I"/>
-		<method name="codePointCount([CII)I"/>
-		<method name="compare(CC)I" since="19"/>
-		<method name="compareTo(Ljava/lang/Character;)I"/>
-		<method name="digit(CI)I"/>
-		<method name="digit(II)I"/>
-		<method name="forDigit(II)C"/>
-		<method name="getDirectionality(C)B"/>
-		<method name="getDirectionality(I)B"/>
-		<method name="getName(I)Ljava/lang/String;" since="19"/>
-		<method name="getNumericValue(C)I"/>
-		<method name="getNumericValue(I)I"/>
-		<method name="getType(C)I"/>
-		<method name="getType(I)I"/>
-		<method name="hashCode(C)I" since="24"/>
-		<method name="highSurrogate(I)C" since="19"/>
-		<method name="isAlphabetic(I)Z" since="19"/>
-		<method name="isBmpCodePoint(I)Z" since="19"/>
-		<method name="isDefined(C)Z"/>
-		<method name="isDefined(I)Z"/>
-		<method name="isDigit(C)Z"/>
-		<method name="isDigit(I)Z"/>
-		<method name="isHighSurrogate(C)Z"/>
-		<method name="isISOControl(C)Z"/>
-		<method name="isISOControl(I)Z"/>
-		<method name="isIdentifierIgnorable(C)Z"/>
-		<method name="isIdentifierIgnorable(I)Z"/>
-		<method name="isIdeographic(I)Z" since="19"/>
-		<method name="isJavaIdentifierPart(C)Z"/>
-		<method name="isJavaIdentifierPart(I)Z"/>
-		<method name="isJavaIdentifierStart(C)Z"/>
-		<method name="isJavaIdentifierStart(I)Z"/>
-		<method name="isJavaLetter(C)Z" deprecated="16"/>
-		<method name="isJavaLetterOrDigit(C)Z" deprecated="16"/>
-		<method name="isLetter(C)Z"/>
-		<method name="isLetter(I)Z"/>
-		<method name="isLetterOrDigit(C)Z"/>
-		<method name="isLetterOrDigit(I)Z"/>
-		<method name="isLowSurrogate(C)Z"/>
-		<method name="isLowerCase(C)Z"/>
-		<method name="isLowerCase(I)Z"/>
-		<method name="isMirrored(C)Z"/>
-		<method name="isMirrored(I)Z"/>
-		<method name="isSpace(C)Z" deprecated="16"/>
-		<method name="isSpaceChar(C)Z"/>
-		<method name="isSpaceChar(I)Z"/>
-		<method name="isSupplementaryCodePoint(I)Z"/>
-		<method name="isSurrogate(C)Z" since="19"/>
-		<method name="isSurrogatePair(CC)Z"/>
-		<method name="isTitleCase(C)Z"/>
-		<method name="isTitleCase(I)Z"/>
-		<method name="isUnicodeIdentifierPart(C)Z"/>
-		<method name="isUnicodeIdentifierPart(I)Z"/>
-		<method name="isUnicodeIdentifierStart(C)Z"/>
-		<method name="isUnicodeIdentifierStart(I)Z"/>
-		<method name="isUpperCase(C)Z"/>
-		<method name="isUpperCase(I)Z"/>
-		<method name="isValidCodePoint(I)Z"/>
-		<method name="isWhitespace(C)Z"/>
-		<method name="isWhitespace(I)Z"/>
-		<method name="lowSurrogate(I)C" since="19"/>
-		<method name="offsetByCodePoints(Ljava/lang/CharSequence;II)I"/>
-		<method name="offsetByCodePoints([CIIII)I"/>
-		<method name="reverseBytes(C)C"/>
-		<method name="toChars(I)[C"/>
-		<method name="toChars(I[CI)I"/>
-		<method name="toCodePoint(CC)I"/>
-		<method name="toLowerCase(C)C"/>
-		<method name="toLowerCase(I)I"/>
-		<method name="toString(C)Ljava/lang/String;"/>
-		<method name="toTitleCase(C)C"/>
-		<method name="toTitleCase(I)I"/>
-		<method name="toUpperCase(C)C"/>
-		<method name="toUpperCase(I)I"/>
-		<method name="valueOf(C)Ljava/lang/Character;"/>
-		<field name="BYTES" since="24"/>
-		<field name="COMBINING_SPACING_MARK"/>
-		<field name="CONNECTOR_PUNCTUATION"/>
-		<field name="CONTROL"/>
-		<field name="CURRENCY_SYMBOL"/>
-		<field name="DASH_PUNCTUATION"/>
-		<field name="DECIMAL_DIGIT_NUMBER"/>
-		<field name="DIRECTIONALITY_ARABIC_NUMBER"/>
-		<field name="DIRECTIONALITY_BOUNDARY_NEUTRAL"/>
-		<field name="DIRECTIONALITY_COMMON_NUMBER_SEPARATOR"/>
-		<field name="DIRECTIONALITY_EUROPEAN_NUMBER"/>
-		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR"/>
-		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR"/>
-		<field name="DIRECTIONALITY_LEFT_TO_RIGHT"/>
-		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING"/>
-		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE"/>
-		<field name="DIRECTIONALITY_NONSPACING_MARK"/>
-		<field name="DIRECTIONALITY_OTHER_NEUTRALS"/>
-		<field name="DIRECTIONALITY_PARAGRAPH_SEPARATOR"/>
-		<field name="DIRECTIONALITY_POP_DIRECTIONAL_FORMAT"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING"/>
-		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE"/>
-		<field name="DIRECTIONALITY_SEGMENT_SEPARATOR"/>
-		<field name="DIRECTIONALITY_UNDEFINED"/>
-		<field name="DIRECTIONALITY_WHITESPACE"/>
-		<field name="ENCLOSING_MARK"/>
-		<field name="END_PUNCTUATION"/>
-		<field name="FINAL_QUOTE_PUNCTUATION"/>
-		<field name="FORMAT"/>
-		<field name="INITIAL_QUOTE_PUNCTUATION"/>
-		<field name="LETTER_NUMBER"/>
-		<field name="LINE_SEPARATOR"/>
-		<field name="LOWERCASE_LETTER"/>
-		<field name="MATH_SYMBOL"/>
-		<field name="MAX_CODE_POINT"/>
-		<field name="MAX_HIGH_SURROGATE"/>
-		<field name="MAX_LOW_SURROGATE"/>
-		<field name="MAX_RADIX"/>
-		<field name="MAX_SURROGATE"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_CODE_POINT"/>
-		<field name="MIN_HIGH_SURROGATE"/>
-		<field name="MIN_LOW_SURROGATE"/>
-		<field name="MIN_RADIX"/>
-		<field name="MIN_SUPPLEMENTARY_CODE_POINT"/>
-		<field name="MIN_SURROGATE"/>
-		<field name="MIN_VALUE"/>
-		<field name="MODIFIER_LETTER"/>
-		<field name="MODIFIER_SYMBOL"/>
-		<field name="NON_SPACING_MARK"/>
-		<field name="OTHER_LETTER"/>
-		<field name="OTHER_NUMBER"/>
-		<field name="OTHER_PUNCTUATION"/>
-		<field name="OTHER_SYMBOL"/>
-		<field name="PARAGRAPH_SEPARATOR"/>
-		<field name="PRIVATE_USE"/>
-		<field name="SIZE"/>
-		<field name="SPACE_SEPARATOR"/>
-		<field name="START_PUNCTUATION"/>
-		<field name="SURROGATE"/>
-		<field name="TITLECASE_LETTER"/>
-		<field name="TYPE"/>
-		<field name="UNASSIGNED"/>
-		<field name="UPPERCASE_LETTER"/>
-	</class>
-	<class name="java/lang/Character$Subset" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/Character$UnicodeBlock" since="1">
-		<extends name="java/lang/Character$Subset"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeBlock;"/>
-		<method name="of(C)Ljava/lang/Character$UnicodeBlock;"/>
-		<method name="of(I)Ljava/lang/Character$UnicodeBlock;"/>
-		<field name="AEGEAN_NUMBERS"/>
-		<field name="ALCHEMICAL_SYMBOLS" since="19"/>
-		<field name="ALPHABETIC_PRESENTATION_FORMS"/>
-		<field name="ANCIENT_GREEK_MUSICAL_NOTATION" since="19"/>
-		<field name="ANCIENT_GREEK_NUMBERS" since="19"/>
-		<field name="ANCIENT_SYMBOLS" since="19"/>
-		<field name="ARABIC"/>
-		<field name="ARABIC_EXTENDED_A" since="26"/>
-		<field name="ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS" since="26"/>
-		<field name="ARABIC_PRESENTATION_FORMS_A"/>
-		<field name="ARABIC_PRESENTATION_FORMS_B"/>
-		<field name="ARABIC_SUPPLEMENT" since="19"/>
-		<field name="ARMENIAN"/>
-		<field name="ARROWS"/>
-		<field name="AVESTAN" since="19"/>
-		<field name="BALINESE" since="19"/>
-		<field name="BAMUM" since="19"/>
-		<field name="BAMUM_SUPPLEMENT" since="19"/>
-		<field name="BASIC_LATIN"/>
-		<field name="BATAK" since="19"/>
-		<field name="BENGALI"/>
-		<field name="BLOCK_ELEMENTS"/>
-		<field name="BOPOMOFO"/>
-		<field name="BOPOMOFO_EXTENDED"/>
-		<field name="BOX_DRAWING"/>
-		<field name="BRAHMI" since="19"/>
-		<field name="BRAILLE_PATTERNS"/>
-		<field name="BUGINESE" since="19"/>
-		<field name="BUHID"/>
-		<field name="BYZANTINE_MUSICAL_SYMBOLS"/>
-		<field name="CARIAN" since="19"/>
-		<field name="CHAKMA" since="26"/>
-		<field name="CHAM" since="19"/>
-		<field name="CHEROKEE"/>
-		<field name="CJK_COMPATIBILITY"/>
-		<field name="CJK_COMPATIBILITY_FORMS"/>
-		<field name="CJK_COMPATIBILITY_IDEOGRAPHS"/>
-		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT"/>
-		<field name="CJK_RADICALS_SUPPLEMENT"/>
-		<field name="CJK_STROKES" since="19"/>
-		<field name="CJK_SYMBOLS_AND_PUNCTUATION"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C" since="19"/>
-		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D" since="19"/>
-		<field name="COMBINING_DIACRITICAL_MARKS"/>
-		<field name="COMBINING_DIACRITICAL_MARKS_SUPPLEMENT" since="19"/>
-		<field name="COMBINING_HALF_MARKS"/>
-		<field name="COMBINING_MARKS_FOR_SYMBOLS"/>
-		<field name="COMMON_INDIC_NUMBER_FORMS" since="19"/>
-		<field name="CONTROL_PICTURES"/>
-		<field name="COPTIC" since="19"/>
-		<field name="COUNTING_ROD_NUMERALS" since="19"/>
-		<field name="CUNEIFORM" since="19"/>
-		<field name="CUNEIFORM_NUMBERS_AND_PUNCTUATION" since="19"/>
-		<field name="CURRENCY_SYMBOLS"/>
-		<field name="CYPRIOT_SYLLABARY"/>
-		<field name="CYRILLIC"/>
-		<field name="CYRILLIC_EXTENDED_A" since="19"/>
-		<field name="CYRILLIC_EXTENDED_B" since="19"/>
-		<field name="CYRILLIC_SUPPLEMENTARY"/>
-		<field name="DESERET"/>
-		<field name="DEVANAGARI"/>
-		<field name="DEVANAGARI_EXTENDED" since="19"/>
-		<field name="DINGBATS"/>
-		<field name="DOMINO_TILES" since="19"/>
-		<field name="EGYPTIAN_HIEROGLYPHS" since="19"/>
-		<field name="EMOTICONS" since="19"/>
-		<field name="ENCLOSED_ALPHANUMERICS"/>
-		<field name="ENCLOSED_ALPHANUMERIC_SUPPLEMENT" since="19"/>
-		<field name="ENCLOSED_CJK_LETTERS_AND_MONTHS"/>
-		<field name="ENCLOSED_IDEOGRAPHIC_SUPPLEMENT" since="19"/>
-		<field name="ETHIOPIC"/>
-		<field name="ETHIOPIC_EXTENDED" since="19"/>
-		<field name="ETHIOPIC_EXTENDED_A" since="19"/>
-		<field name="ETHIOPIC_SUPPLEMENT" since="19"/>
-		<field name="GENERAL_PUNCTUATION"/>
-		<field name="GEOMETRIC_SHAPES"/>
-		<field name="GEORGIAN"/>
-		<field name="GEORGIAN_SUPPLEMENT" since="19"/>
-		<field name="GLAGOLITIC" since="19"/>
-		<field name="GOTHIC"/>
-		<field name="GREEK"/>
-		<field name="GREEK_EXTENDED"/>
-		<field name="GUJARATI"/>
-		<field name="GURMUKHI"/>
-		<field name="HALFWIDTH_AND_FULLWIDTH_FORMS"/>
-		<field name="HANGUL_COMPATIBILITY_JAMO"/>
-		<field name="HANGUL_JAMO"/>
-		<field name="HANGUL_JAMO_EXTENDED_A" since="19"/>
-		<field name="HANGUL_JAMO_EXTENDED_B" since="19"/>
-		<field name="HANGUL_SYLLABLES"/>
-		<field name="HANUNOO"/>
-		<field name="HEBREW"/>
-		<field name="HIGH_PRIVATE_USE_SURROGATES"/>
-		<field name="HIGH_SURROGATES"/>
-		<field name="HIRAGANA"/>
-		<field name="IDEOGRAPHIC_DESCRIPTION_CHARACTERS"/>
-		<field name="IMPERIAL_ARAMAIC" since="19"/>
-		<field name="INSCRIPTIONAL_PAHLAVI" since="19"/>
-		<field name="INSCRIPTIONAL_PARTHIAN" since="19"/>
-		<field name="IPA_EXTENSIONS"/>
-		<field name="JAVANESE" since="19"/>
-		<field name="KAITHI" since="19"/>
-		<field name="KANA_SUPPLEMENT" since="19"/>
-		<field name="KANBUN"/>
-		<field name="KANGXI_RADICALS"/>
-		<field name="KANNADA"/>
-		<field name="KATAKANA"/>
-		<field name="KATAKANA_PHONETIC_EXTENSIONS"/>
-		<field name="KAYAH_LI" since="19"/>
-		<field name="KHAROSHTHI" since="19"/>
-		<field name="KHMER"/>
-		<field name="KHMER_SYMBOLS"/>
-		<field name="LAO"/>
-		<field name="LATIN_1_SUPPLEMENT"/>
-		<field name="LATIN_EXTENDED_A"/>
-		<field name="LATIN_EXTENDED_ADDITIONAL"/>
-		<field name="LATIN_EXTENDED_B"/>
-		<field name="LATIN_EXTENDED_C" since="19"/>
-		<field name="LATIN_EXTENDED_D" since="19"/>
-		<field name="LEPCHA" since="19"/>
-		<field name="LETTERLIKE_SYMBOLS"/>
-		<field name="LIMBU"/>
-		<field name="LINEAR_B_IDEOGRAMS"/>
-		<field name="LINEAR_B_SYLLABARY"/>
-		<field name="LISU" since="19"/>
-		<field name="LOW_SURROGATES"/>
-		<field name="LYCIAN" since="19"/>
-		<field name="LYDIAN" since="19"/>
-		<field name="MAHJONG_TILES" since="19"/>
-		<field name="MALAYALAM"/>
-		<field name="MANDAIC" since="19"/>
-		<field name="MATHEMATICAL_ALPHANUMERIC_SYMBOLS"/>
-		<field name="MATHEMATICAL_OPERATORS"/>
-		<field name="MEETEI_MAYEK" since="19"/>
-		<field name="MEETEI_MAYEK_EXTENSIONS" since="26"/>
-		<field name="MEROITIC_CURSIVE" since="26"/>
-		<field name="MEROITIC_HIEROGLYPHS" since="26"/>
-		<field name="MIAO" since="26"/>
-		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A"/>
-		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B"/>
-		<field name="MISCELLANEOUS_SYMBOLS"/>
-		<field name="MISCELLANEOUS_SYMBOLS_AND_ARROWS"/>
-		<field name="MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS" since="19"/>
-		<field name="MISCELLANEOUS_TECHNICAL"/>
-		<field name="MODIFIER_TONE_LETTERS" since="19"/>
-		<field name="MONGOLIAN"/>
-		<field name="MUSICAL_SYMBOLS"/>
-		<field name="MYANMAR"/>
-		<field name="MYANMAR_EXTENDED_A" since="19"/>
-		<field name="NEW_TAI_LUE" since="19"/>
-		<field name="NKO" since="19"/>
-		<field name="NUMBER_FORMS"/>
-		<field name="OGHAM"/>
-		<field name="OLD_ITALIC"/>
-		<field name="OLD_PERSIAN" since="19"/>
-		<field name="OLD_SOUTH_ARABIAN" since="19"/>
-		<field name="OLD_TURKIC" since="19"/>
-		<field name="OL_CHIKI" since="19"/>
-		<field name="OPTICAL_CHARACTER_RECOGNITION"/>
-		<field name="ORIYA"/>
-		<field name="OSMANYA"/>
-		<field name="PHAGS_PA" since="19"/>
-		<field name="PHAISTOS_DISC" since="19"/>
-		<field name="PHOENICIAN" since="19"/>
-		<field name="PHONETIC_EXTENSIONS"/>
-		<field name="PHONETIC_EXTENSIONS_SUPPLEMENT" since="19"/>
-		<field name="PLAYING_CARDS" since="19"/>
-		<field name="PRIVATE_USE_AREA"/>
-		<field name="REJANG" since="19"/>
-		<field name="RUMI_NUMERAL_SYMBOLS" since="19"/>
-		<field name="RUNIC"/>
-		<field name="SAMARITAN" since="19"/>
-		<field name="SAURASHTRA" since="19"/>
-		<field name="SHARADA" since="26"/>
-		<field name="SHAVIAN"/>
-		<field name="SINHALA"/>
-		<field name="SMALL_FORM_VARIANTS"/>
-		<field name="SORA_SOMPENG" since="26"/>
-		<field name="SPACING_MODIFIER_LETTERS"/>
-		<field name="SPECIALS"/>
-		<field name="SUNDANESE" since="19"/>
-		<field name="SUNDANESE_SUPPLEMENT" since="26"/>
-		<field name="SUPERSCRIPTS_AND_SUBSCRIPTS"/>
-		<field name="SUPPLEMENTAL_ARROWS_A"/>
-		<field name="SUPPLEMENTAL_ARROWS_B"/>
-		<field name="SUPPLEMENTAL_MATHEMATICAL_OPERATORS"/>
-		<field name="SUPPLEMENTAL_PUNCTUATION" since="19"/>
-		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A"/>
-		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B"/>
-		<field name="SURROGATES_AREA" deprecated="16"/>
-		<field name="SYLOTI_NAGRI" since="19"/>
-		<field name="SYRIAC"/>
-		<field name="TAGALOG"/>
-		<field name="TAGBANWA"/>
-		<field name="TAGS"/>
-		<field name="TAI_LE"/>
-		<field name="TAI_THAM" since="19"/>
-		<field name="TAI_VIET" since="19"/>
-		<field name="TAI_XUAN_JING_SYMBOLS"/>
-		<field name="TAKRI" since="26"/>
-		<field name="TAMIL"/>
-		<field name="TELUGU"/>
-		<field name="THAANA"/>
-		<field name="THAI"/>
-		<field name="TIBETAN"/>
-		<field name="TIFINAGH" since="19"/>
-		<field name="TRANSPORT_AND_MAP_SYMBOLS" since="19"/>
-		<field name="UGARITIC"/>
-		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS"/>
-		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED" since="19"/>
-		<field name="VAI" since="19"/>
-		<field name="VARIATION_SELECTORS"/>
-		<field name="VARIATION_SELECTORS_SUPPLEMENT"/>
-		<field name="VEDIC_EXTENSIONS" since="19"/>
-		<field name="VERTICAL_FORMS" since="19"/>
-		<field name="YIJING_HEXAGRAM_SYMBOLS"/>
-		<field name="YI_RADICALS"/>
-		<field name="YI_SYLLABLES"/>
-	</class>
-	<class name="java/lang/Character$UnicodeScript" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeScript;"/>
-		<method name="of(I)Ljava/lang/Character$UnicodeScript;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Character$UnicodeScript;"/>
-		<method name="values()[Ljava/lang/Character$UnicodeScript;"/>
-		<field name="ARABIC"/>
-		<field name="ARMENIAN"/>
-		<field name="AVESTAN"/>
-		<field name="BALINESE"/>
-		<field name="BAMUM"/>
-		<field name="BATAK"/>
-		<field name="BENGALI"/>
-		<field name="BOPOMOFO"/>
-		<field name="BRAHMI"/>
-		<field name="BRAILLE"/>
-		<field name="BUGINESE"/>
-		<field name="BUHID"/>
-		<field name="CANADIAN_ABORIGINAL"/>
-		<field name="CARIAN"/>
-		<field name="CHAKMA" since="26"/>
-		<field name="CHAM"/>
-		<field name="CHEROKEE"/>
-		<field name="COMMON"/>
-		<field name="COPTIC"/>
-		<field name="CUNEIFORM"/>
-		<field name="CYPRIOT"/>
-		<field name="CYRILLIC"/>
-		<field name="DESERET"/>
-		<field name="DEVANAGARI"/>
-		<field name="EGYPTIAN_HIEROGLYPHS"/>
-		<field name="ETHIOPIC"/>
-		<field name="GEORGIAN"/>
-		<field name="GLAGOLITIC"/>
-		<field name="GOTHIC"/>
-		<field name="GREEK"/>
-		<field name="GUJARATI"/>
-		<field name="GURMUKHI"/>
-		<field name="HAN"/>
-		<field name="HANGUL"/>
-		<field name="HANUNOO"/>
-		<field name="HEBREW"/>
-		<field name="HIRAGANA"/>
-		<field name="IMPERIAL_ARAMAIC"/>
-		<field name="INHERITED"/>
-		<field name="INSCRIPTIONAL_PAHLAVI"/>
-		<field name="INSCRIPTIONAL_PARTHIAN"/>
-		<field name="JAVANESE"/>
-		<field name="KAITHI"/>
-		<field name="KANNADA"/>
-		<field name="KATAKANA"/>
-		<field name="KAYAH_LI"/>
-		<field name="KHAROSHTHI"/>
-		<field name="KHMER"/>
-		<field name="LAO"/>
-		<field name="LATIN"/>
-		<field name="LEPCHA"/>
-		<field name="LIMBU"/>
-		<field name="LINEAR_B"/>
-		<field name="LISU"/>
-		<field name="LYCIAN"/>
-		<field name="LYDIAN"/>
-		<field name="MALAYALAM"/>
-		<field name="MANDAIC"/>
-		<field name="MEETEI_MAYEK"/>
-		<field name="MEROITIC_CURSIVE" since="26"/>
-		<field name="MEROITIC_HIEROGLYPHS" since="26"/>
-		<field name="MIAO" since="26"/>
-		<field name="MONGOLIAN"/>
-		<field name="MYANMAR"/>
-		<field name="NEW_TAI_LUE"/>
-		<field name="NKO"/>
-		<field name="OGHAM"/>
-		<field name="OLD_ITALIC"/>
-		<field name="OLD_PERSIAN"/>
-		<field name="OLD_SOUTH_ARABIAN"/>
-		<field name="OLD_TURKIC"/>
-		<field name="OL_CHIKI"/>
-		<field name="ORIYA"/>
-		<field name="OSMANYA"/>
-		<field name="PHAGS_PA"/>
-		<field name="PHOENICIAN"/>
-		<field name="REJANG"/>
-		<field name="RUNIC"/>
-		<field name="SAMARITAN"/>
-		<field name="SAURASHTRA"/>
-		<field name="SHARADA" since="26"/>
-		<field name="SHAVIAN"/>
-		<field name="SINHALA"/>
-		<field name="SORA_SOMPENG" since="26"/>
-		<field name="SUNDANESE"/>
-		<field name="SYLOTI_NAGRI"/>
-		<field name="SYRIAC"/>
-		<field name="TAGALOG"/>
-		<field name="TAGBANWA"/>
-		<field name="TAI_LE"/>
-		<field name="TAI_THAM"/>
-		<field name="TAI_VIET"/>
-		<field name="TAKRI" since="26"/>
-		<field name="TAMIL"/>
-		<field name="TELUGU"/>
-		<field name="THAANA"/>
-		<field name="THAI"/>
-		<field name="TIBETAN"/>
-		<field name="TIFINAGH"/>
-		<field name="UGARITIC"/>
-		<field name="UNKNOWN"/>
-		<field name="VAI"/>
-		<field name="YI"/>
-	</class>
-	<class name="java/lang/Class" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/reflect/AnnotatedElement"/>
-		<implements name="java/lang/reflect/GenericDeclaration"/>
-		<implements name="java/lang/reflect/Type"/>
-		<method name="&lt;init>()V"/>
-		<method name="asSubclass(Ljava/lang/Class;)Ljava/lang/Class;"/>
-		<method name="cast(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="desiredAssertionStatus()Z"/>
-		<method name="forName(Ljava/lang/String;)Ljava/lang/Class;"/>
-		<method name="forName(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;"/>
-		<method name="getCanonicalName()Ljava/lang/String;"/>
-		<method name="getClassLoader()Ljava/lang/ClassLoader;"/>
-		<method name="getClasses()[Ljava/lang/Class;"/>
-		<method name="getComponentType()Ljava/lang/Class;"/>
-		<method name="getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"/>
-		<method name="getConstructors()[Ljava/lang/reflect/Constructor;"/>
-		<method name="getDeclaredClasses()[Ljava/lang/Class;"/>
-		<method name="getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"/>
-		<method name="getDeclaredConstructors()[Ljava/lang/reflect/Constructor;"/>
-		<method name="getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;"/>
-		<method name="getDeclaredFields()[Ljava/lang/reflect/Field;"/>
-		<method name="getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"/>
-		<method name="getDeclaredMethods()[Ljava/lang/reflect/Method;"/>
-		<method name="getDeclaringClass()Ljava/lang/Class;"/>
-		<method name="getEnclosingClass()Ljava/lang/Class;"/>
-		<method name="getEnclosingConstructor()Ljava/lang/reflect/Constructor;"/>
-		<method name="getEnclosingMethod()Ljava/lang/reflect/Method;"/>
-		<method name="getEnumConstants()[Ljava/lang/Object;"/>
-		<method name="getField(Ljava/lang/String;)Ljava/lang/reflect/Field;"/>
-		<method name="getFields()[Ljava/lang/reflect/Field;"/>
-		<method name="getGenericInterfaces()[Ljava/lang/reflect/Type;"/>
-		<method name="getGenericSuperclass()Ljava/lang/reflect/Type;"/>
-		<method name="getInterfaces()[Ljava/lang/Class;"/>
-		<method name="getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"/>
-		<method name="getMethods()[Ljava/lang/reflect/Method;"/>
-		<method name="getModifiers()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPackage()Ljava/lang/Package;"/>
-		<method name="getProtectionDomain()Ljava/security/ProtectionDomain;"/>
-		<method name="getResource(Ljava/lang/String;)Ljava/net/URL;"/>
-		<method name="getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
-		<method name="getSigners()[Ljava/lang/Object;"/>
-		<method name="getSimpleName()Ljava/lang/String;"/>
-		<method name="getSuperclass()Ljava/lang/Class;"/>
-		<method name="getTypeName()Ljava/lang/String;" since="26"/>
-		<method name="isAnnotation()Z"/>
-		<method name="isAnonymousClass()Z"/>
-		<method name="isArray()Z"/>
-		<method name="isAssignableFrom(Ljava/lang/Class;)Z"/>
-		<method name="isEnum()Z"/>
-		<method name="isInstance(Ljava/lang/Object;)Z"/>
-		<method name="isInterface()Z"/>
-		<method name="isLocalClass()Z"/>
-		<method name="isMemberClass()Z"/>
-		<method name="isPrimitive()Z"/>
-		<method name="isSynthetic()Z"/>
-		<method name="newInstance()Ljava/lang/Object;"/>
-		<method name="toGenericString()Ljava/lang/String;" since="26"/>
-	</class>
-	<class name="java/lang/ClassCastException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/ClassCircularityError" since="1">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/ClassFormatError" since="1">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/ClassLoader" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/ClassLoader;)V"/>
-		<method name="clearAssertionStatus()V"/>
-		<method name="defineClass(Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class;"/>
-		<method name="defineClass(Ljava/lang/String;[BII)Ljava/lang/Class;"/>
-		<method name="defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;"/>
-		<method name="defineClass([BII)Ljava/lang/Class;" deprecated="16"/>
-		<method name="definePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package;"/>
-		<method name="findClass(Ljava/lang/String;)Ljava/lang/Class;"/>
-		<method name="findLibrary(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="findLoadedClass(Ljava/lang/String;)Ljava/lang/Class;"/>
-		<method name="findResource(Ljava/lang/String;)Ljava/net/URL;"/>
-		<method name="findResources(Ljava/lang/String;)Ljava/util/Enumeration;"/>
-		<method name="findSystemClass(Ljava/lang/String;)Ljava/lang/Class;"/>
-		<method name="getPackage(Ljava/lang/String;)Ljava/lang/Package;"/>
-		<method name="getPackages()[Ljava/lang/Package;"/>
-		<method name="getParent()Ljava/lang/ClassLoader;"/>
-		<method name="getResource(Ljava/lang/String;)Ljava/net/URL;"/>
-		<method name="getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
-		<method name="getResources(Ljava/lang/String;)Ljava/util/Enumeration;"/>
-		<method name="getSystemClassLoader()Ljava/lang/ClassLoader;"/>
-		<method name="getSystemResource(Ljava/lang/String;)Ljava/net/URL;"/>
-		<method name="getSystemResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
-		<method name="getSystemResources(Ljava/lang/String;)Ljava/util/Enumeration;"/>
-		<method name="loadClass(Ljava/lang/String;)Ljava/lang/Class;"/>
-		<method name="loadClass(Ljava/lang/String;Z)Ljava/lang/Class;"/>
-		<method name="registerAsParallelCapable()Z" since="24"/>
-		<method name="resolveClass(Ljava/lang/Class;)V"/>
-		<method name="setClassAssertionStatus(Ljava/lang/String;Z)V"/>
-		<method name="setDefaultAssertionStatus(Z)V"/>
-		<method name="setPackageAssertionStatus(Ljava/lang/String;Z)V"/>
-		<method name="setSigners(Ljava/lang/Class;[Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/lang/ClassNotFoundException" since="1">
-		<extends name="java/lang/Exception" removed="19"/>
-		<extends name="java/lang/ReflectiveOperationException" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="getException()Ljava/lang/Throwable;"/>
-	</class>
-	<class name="java/lang/CloneNotSupportedException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/Cloneable" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/lang/Comparable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="compareTo(Ljava/lang/Object;)I"/>
-	</class>
-	<class name="java/lang/Compiler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="command(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="compileClass(Ljava/lang/Class;)Z"/>
-		<method name="compileClasses(Ljava/lang/String;)Z"/>
-		<method name="disable()V"/>
-		<method name="enable()V"/>
-	</class>
-	<class name="java/lang/Deprecated" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="java/lang/Double" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(D)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="compare(DD)I"/>
-		<method name="compareTo(Ljava/lang/Double;)I"/>
-		<method name="doubleToLongBits(D)J"/>
-		<method name="doubleToRawLongBits(D)J"/>
-		<method name="hashCode(D)I" since="24"/>
-		<method name="isFinite(D)Z" since="24"/>
-		<method name="isInfinite()Z"/>
-		<method name="isInfinite(D)Z"/>
-		<method name="isNaN()Z"/>
-		<method name="isNaN(D)Z"/>
-		<method name="longBitsToDouble(J)D"/>
-		<method name="max(DD)D" since="24"/>
-		<method name="min(DD)D" since="24"/>
-		<method name="parseDouble(Ljava/lang/String;)D"/>
-		<method name="sum(DD)D" since="24"/>
-		<method name="toHexString(D)Ljava/lang/String;"/>
-		<method name="toString(D)Ljava/lang/String;"/>
-		<method name="valueOf(D)Ljava/lang/Double;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Double;"/>
-		<field name="BYTES" since="24"/>
-		<field name="MAX_EXPONENT" since="9"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_EXPONENT" since="9"/>
-		<field name="MIN_NORMAL" since="9"/>
-		<field name="MIN_VALUE"/>
-		<field name="NEGATIVE_INFINITY"/>
-		<field name="NaN"/>
-		<field name="POSITIVE_INFINITY"/>
-		<field name="SIZE"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/Enum" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="compareTo(Ljava/lang/Enum;)I"/>
-		<method name="getDeclaringClass()Ljava/lang/Class;"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="ordinal()I"/>
-		<method name="valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;"/>
-	</class>
-	<class name="java/lang/EnumConstantNotPresentException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
-		<method name="constantName()Ljava/lang/String;"/>
-		<method name="enumType()Ljava/lang/Class;"/>
-	</class>
-	<class name="java/lang/Error" since="1">
-		<extends name="java/lang/Throwable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/Exception" since="1">
-		<extends name="java/lang/Throwable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/ExceptionInInitializerError" since="1">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="getException()Ljava/lang/Throwable;"/>
-	</class>
-	<class name="java/lang/Float" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(D)V"/>
-		<method name="&lt;init>(F)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="compare(FF)I"/>
-		<method name="compareTo(Ljava/lang/Float;)I"/>
-		<method name="floatToIntBits(F)I"/>
-		<method name="floatToRawIntBits(F)I"/>
-		<method name="hashCode(F)I" since="24"/>
-		<method name="intBitsToFloat(I)F"/>
-		<method name="isFinite(F)Z" since="24"/>
-		<method name="isInfinite()Z"/>
-		<method name="isInfinite(F)Z"/>
-		<method name="isNaN()Z"/>
-		<method name="isNaN(F)Z"/>
-		<method name="max(FF)F" since="24"/>
-		<method name="min(FF)F" since="24"/>
-		<method name="parseFloat(Ljava/lang/String;)F"/>
-		<method name="sum(FF)F" since="24"/>
-		<method name="toHexString(F)Ljava/lang/String;"/>
-		<method name="toString(F)Ljava/lang/String;"/>
-		<method name="valueOf(F)Ljava/lang/Float;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Float;"/>
-		<field name="BYTES" since="24"/>
-		<field name="MAX_EXPONENT" since="9"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_EXPONENT" since="9"/>
-		<field name="MIN_NORMAL" since="9"/>
-		<field name="MIN_VALUE"/>
-		<field name="NEGATIVE_INFINITY"/>
-		<field name="NaN"/>
-		<field name="POSITIVE_INFINITY"/>
-		<field name="SIZE"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/FunctionalInterface" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="java/lang/IllegalAccessError" since="1">
-		<extends name="java/lang/IncompatibleClassChangeError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/IllegalAccessException" since="1">
-		<extends name="java/lang/Exception" removed="19"/>
-		<extends name="java/lang/ReflectiveOperationException" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/IllegalArgumentException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/IllegalMonitorStateException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/IllegalStateException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/IllegalThreadStateException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/IncompatibleClassChangeError" since="1">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/IndexOutOfBoundsException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/InheritableThreadLocal" since="1">
-		<extends name="java/lang/ThreadLocal"/>
-		<method name="&lt;init>()V"/>
-		<method name="childValue(Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/lang/InstantiationError" since="1">
-		<extends name="java/lang/IncompatibleClassChangeError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/InstantiationException" since="1">
-		<extends name="java/lang/Exception" removed="19"/>
-		<extends name="java/lang/ReflectiveOperationException" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/Integer" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="bitCount(I)I"/>
-		<method name="compare(II)I" since="19"/>
-		<method name="compareTo(Ljava/lang/Integer;)I"/>
-		<method name="compareUnsigned(II)I" since="26"/>
-		<method name="decode(Ljava/lang/String;)Ljava/lang/Integer;"/>
-		<method name="divideUnsigned(II)I" since="26"/>
-		<method name="getInteger(Ljava/lang/String;)Ljava/lang/Integer;"/>
-		<method name="getInteger(Ljava/lang/String;I)Ljava/lang/Integer;"/>
-		<method name="getInteger(Ljava/lang/String;Ljava/lang/Integer;)Ljava/lang/Integer;"/>
-		<method name="hashCode(I)I" since="24"/>
-		<method name="highestOneBit(I)I"/>
-		<method name="lowestOneBit(I)I"/>
-		<method name="max(II)I" since="24"/>
-		<method name="min(II)I" since="24"/>
-		<method name="numberOfLeadingZeros(I)I"/>
-		<method name="numberOfTrailingZeros(I)I"/>
-		<method name="parseInt(Ljava/lang/String;)I"/>
-		<method name="parseInt(Ljava/lang/String;I)I"/>
-		<method name="parseUnsignedInt(Ljava/lang/String;)I" since="26"/>
-		<method name="parseUnsignedInt(Ljava/lang/String;I)I" since="26"/>
-		<method name="remainderUnsigned(II)I" since="26"/>
-		<method name="reverse(I)I"/>
-		<method name="reverseBytes(I)I"/>
-		<method name="rotateLeft(II)I"/>
-		<method name="rotateRight(II)I"/>
-		<method name="signum(I)I"/>
-		<method name="sum(II)I" since="24"/>
-		<method name="toBinaryString(I)Ljava/lang/String;"/>
-		<method name="toHexString(I)Ljava/lang/String;"/>
-		<method name="toOctalString(I)Ljava/lang/String;"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<method name="toString(II)Ljava/lang/String;"/>
-		<method name="toUnsignedLong(I)J" since="26"/>
-		<method name="toUnsignedString(I)Ljava/lang/String;" since="26"/>
-		<method name="toUnsignedString(II)Ljava/lang/String;" since="26"/>
-		<method name="valueOf(I)Ljava/lang/Integer;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Integer;"/>
-		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Integer;"/>
-		<field name="BYTES" since="24"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_VALUE"/>
-		<field name="SIZE"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/InternalError" since="1">
-		<extends name="java/lang/VirtualMachineError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="24"/>
-	</class>
-	<class name="java/lang/InterruptedException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/Iterable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="forEach(Ljava/util/function/Consumer;)V" since="24"/>
-		<method name="iterator()Ljava/util/Iterator;"/>
-		<method name="spliterator()Ljava/util/Spliterator;" since="24"/>
-	</class>
-	<class name="java/lang/LinkageError" since="1">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19"/>
-	</class>
-	<class name="java/lang/Long" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="bitCount(J)I"/>
-		<method name="compare(JJ)I" since="19"/>
-		<method name="compareTo(Ljava/lang/Long;)I"/>
-		<method name="compareUnsigned(JJ)I" since="26"/>
-		<method name="decode(Ljava/lang/String;)Ljava/lang/Long;"/>
-		<method name="divideUnsigned(JJ)J" since="26"/>
-		<method name="getLong(Ljava/lang/String;)Ljava/lang/Long;"/>
-		<method name="getLong(Ljava/lang/String;J)Ljava/lang/Long;"/>
-		<method name="getLong(Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long;"/>
-		<method name="hashCode(J)I" since="24"/>
-		<method name="highestOneBit(J)J"/>
-		<method name="lowestOneBit(J)J"/>
-		<method name="max(JJ)J" since="24"/>
-		<method name="min(JJ)J" since="24"/>
-		<method name="numberOfLeadingZeros(J)I"/>
-		<method name="numberOfTrailingZeros(J)I"/>
-		<method name="parseLong(Ljava/lang/String;)J"/>
-		<method name="parseLong(Ljava/lang/String;I)J"/>
-		<method name="parseUnsignedLong(Ljava/lang/String;)J" since="26"/>
-		<method name="parseUnsignedLong(Ljava/lang/String;I)J" since="26"/>
-		<method name="remainderUnsigned(JJ)J" since="26"/>
-		<method name="reverse(J)J"/>
-		<method name="reverseBytes(J)J"/>
-		<method name="rotateLeft(JI)J"/>
-		<method name="rotateRight(JI)J"/>
-		<method name="signum(J)I"/>
-		<method name="sum(JJ)J" since="24"/>
-		<method name="toBinaryString(J)Ljava/lang/String;"/>
-		<method name="toHexString(J)Ljava/lang/String;"/>
-		<method name="toOctalString(J)Ljava/lang/String;"/>
-		<method name="toString(J)Ljava/lang/String;"/>
-		<method name="toString(JI)Ljava/lang/String;"/>
-		<method name="toUnsignedString(J)Ljava/lang/String;" since="26"/>
-		<method name="toUnsignedString(JI)Ljava/lang/String;" since="26"/>
-		<method name="valueOf(J)Ljava/lang/Long;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Long;"/>
-		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Long;"/>
-		<field name="BYTES" since="24"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_VALUE"/>
-		<field name="SIZE"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/Math" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="IEEEremainder(DD)D"/>
-		<method name="abs(D)D"/>
-		<method name="abs(F)F"/>
-		<method name="abs(I)I"/>
-		<method name="abs(J)J"/>
-		<method name="acos(D)D"/>
-		<method name="addExact(II)I" since="24"/>
-		<method name="addExact(JJ)J" since="24"/>
-		<method name="asin(D)D"/>
-		<method name="atan(D)D"/>
-		<method name="atan2(DD)D"/>
-		<method name="cbrt(D)D"/>
-		<method name="ceil(D)D"/>
-		<method name="copySign(DD)D" since="9"/>
-		<method name="copySign(FF)F" since="9"/>
-		<method name="cos(D)D"/>
-		<method name="cosh(D)D"/>
-		<method name="decrementExact(I)I" since="24"/>
-		<method name="decrementExact(J)J" since="24"/>
-		<method name="exp(D)D"/>
-		<method name="expm1(D)D"/>
-		<method name="floor(D)D"/>
-		<method name="floorDiv(II)I" since="24"/>
-		<method name="floorDiv(JJ)J" since="24"/>
-		<method name="floorMod(II)I" since="24"/>
-		<method name="floorMod(JJ)J" since="24"/>
-		<method name="getExponent(D)I" since="9"/>
-		<method name="getExponent(F)I" since="9"/>
-		<method name="hypot(DD)D"/>
-		<method name="incrementExact(I)I" since="24"/>
-		<method name="incrementExact(J)J" since="24"/>
-		<method name="log(D)D"/>
-		<method name="log10(D)D"/>
-		<method name="log1p(D)D"/>
-		<method name="max(DD)D"/>
-		<method name="max(FF)F"/>
-		<method name="max(II)I"/>
-		<method name="max(JJ)J"/>
-		<method name="min(DD)D"/>
-		<method name="min(FF)F"/>
-		<method name="min(II)I"/>
-		<method name="min(JJ)J"/>
-		<method name="multiplyExact(II)I" since="24"/>
-		<method name="multiplyExact(JJ)J" since="24"/>
-		<method name="negateExact(I)I" since="24"/>
-		<method name="negateExact(J)J" since="24"/>
-		<method name="nextAfter(DD)D" since="9"/>
-		<method name="nextAfter(FD)F" since="9"/>
-		<method name="nextDown(D)D" since="24"/>
-		<method name="nextDown(F)F" since="24"/>
-		<method name="nextUp(D)D" since="9"/>
-		<method name="nextUp(F)F" since="9"/>
-		<method name="pow(DD)D"/>
-		<method name="random()D"/>
-		<method name="rint(D)D"/>
-		<method name="round(D)J"/>
-		<method name="round(F)I"/>
-		<method name="scalb(DI)D" since="9"/>
-		<method name="scalb(FI)F" since="9"/>
-		<method name="signum(D)D"/>
-		<method name="signum(F)F"/>
-		<method name="sin(D)D"/>
-		<method name="sinh(D)D"/>
-		<method name="sqrt(D)D"/>
-		<method name="subtractExact(II)I" since="24"/>
-		<method name="subtractExact(JJ)J" since="24"/>
-		<method name="tan(D)D"/>
-		<method name="tanh(D)D"/>
-		<method name="toDegrees(D)D"/>
-		<method name="toIntExact(J)I" since="24"/>
-		<method name="toRadians(D)D"/>
-		<method name="ulp(D)D"/>
-		<method name="ulp(F)F"/>
-		<field name="E"/>
-		<field name="PI"/>
-	</class>
-	<class name="java/lang/NegativeArraySizeException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/NoClassDefFoundError" since="1">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/NoSuchFieldError" since="1">
-		<extends name="java/lang/IncompatibleClassChangeError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/NoSuchFieldException" since="1">
-		<extends name="java/lang/Exception" removed="19"/>
-		<extends name="java/lang/ReflectiveOperationException" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/NoSuchMethodError" since="1">
-		<extends name="java/lang/IncompatibleClassChangeError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/NoSuchMethodException" since="1">
-		<extends name="java/lang/Exception" removed="19"/>
-		<extends name="java/lang/ReflectiveOperationException" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/NullPointerException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/Number" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="byteValue()B"/>
-		<method name="doubleValue()D"/>
-		<method name="floatValue()F"/>
-		<method name="intValue()I"/>
-		<method name="longValue()J"/>
-		<method name="shortValue()S"/>
-	</class>
-	<class name="java/lang/NumberFormatException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/Object" since="1">
-		<method name="&lt;init>()V"/>
-		<method name="clone()Ljava/lang/Object;"/>
-		<method name="equals(Ljava/lang/Object;)Z"/>
-		<method name="finalize()V"/>
-		<method name="getClass()Ljava/lang/Class;"/>
-		<method name="hashCode()I"/>
-		<method name="notify()V"/>
-		<method name="notifyAll()V"/>
-		<method name="toString()Ljava/lang/String;"/>
-		<method name="wait()V"/>
-		<method name="wait(J)V"/>
-		<method name="wait(JI)V"/>
-	</class>
-	<class name="java/lang/OutOfMemoryError" since="1">
-		<extends name="java/lang/VirtualMachineError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/Override" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="java/lang/Package" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/AnnotatedElement"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;Ljava/lang/ClassLoader;)V" since="29"/>
-		<method name="getImplementationTitle()Ljava/lang/String;"/>
-		<method name="getImplementationVendor()Ljava/lang/String;"/>
-		<method name="getImplementationVersion()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPackage(Ljava/lang/String;)Ljava/lang/Package;"/>
-		<method name="getPackages()[Ljava/lang/Package;"/>
-		<method name="getSpecificationTitle()Ljava/lang/String;"/>
-		<method name="getSpecificationVendor()Ljava/lang/String;"/>
-		<method name="getSpecificationVersion()Ljava/lang/String;"/>
-		<method name="isCompatibleWith(Ljava/lang/String;)Z"/>
-		<method name="isSealed()Z"/>
-		<method name="isSealed(Ljava/net/URL;)Z"/>
-	</class>
-	<class name="java/lang/Process" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="destroy()V"/>
-		<method name="destroyForcibly()Ljava/lang/Process;" since="26"/>
-		<method name="exitValue()I"/>
-		<method name="getErrorStream()Ljava/io/InputStream;"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="isAlive()Z" since="26"/>
-		<method name="waitFor()I"/>
-		<method name="waitFor(JLjava/util/concurrent/TimeUnit;)Z" since="26"/>
-	</class>
-	<class name="java/lang/ProcessBuilder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/util/List;)V"/>
-		<method name="&lt;init>([Ljava/lang/String;)V"/>
-		<method name="command()Ljava/util/List;"/>
-		<method name="command(Ljava/util/List;)Ljava/lang/ProcessBuilder;"/>
-		<method name="command([Ljava/lang/String;)Ljava/lang/ProcessBuilder;"/>
-		<method name="directory()Ljava/io/File;"/>
-		<method name="directory(Ljava/io/File;)Ljava/lang/ProcessBuilder;"/>
-		<method name="environment()Ljava/util/Map;"/>
-		<method name="inheritIO()Ljava/lang/ProcessBuilder;" since="26"/>
-		<method name="redirectError()Ljava/lang/ProcessBuilder$Redirect;" since="26"/>
-		<method name="redirectError(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26"/>
-		<method name="redirectError(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26"/>
-		<method name="redirectErrorStream()Z"/>
-		<method name="redirectErrorStream(Z)Ljava/lang/ProcessBuilder;"/>
-		<method name="redirectInput()Ljava/lang/ProcessBuilder$Redirect;" since="26"/>
-		<method name="redirectInput(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26"/>
-		<method name="redirectInput(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26"/>
-		<method name="redirectOutput()Ljava/lang/ProcessBuilder$Redirect;" since="26"/>
-		<method name="redirectOutput(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26"/>
-		<method name="redirectOutput(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26"/>
-		<method name="start()Ljava/lang/Process;"/>
-	</class>
-	<class name="java/lang/ProcessBuilder$Redirect" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="appendTo(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
-		<method name="file()Ljava/io/File;"/>
-		<method name="from(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
-		<method name="to(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
-		<method name="type()Ljava/lang/ProcessBuilder$Redirect$Type;"/>
-		<field name="INHERIT"/>
-		<field name="PIPE"/>
-	</class>
-	<class name="java/lang/ProcessBuilder$Redirect$Type" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/ProcessBuilder$Redirect$Type;"/>
-		<method name="values()[Ljava/lang/ProcessBuilder$Redirect$Type;"/>
-		<field name="APPEND"/>
-		<field name="INHERIT"/>
-		<field name="PIPE"/>
-		<field name="READ"/>
-		<field name="WRITE"/>
-	</class>
-	<class name="java/lang/Readable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="read(Ljava/nio/CharBuffer;)I"/>
-	</class>
-	<class name="java/lang/ReflectiveOperationException" since="19">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/Runnable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="run()V"/>
-	</class>
-	<class name="java/lang/Runtime" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addShutdownHook(Ljava/lang/Thread;)V"/>
-		<method name="availableProcessors()I"/>
-		<method name="exec(Ljava/lang/String;)Ljava/lang/Process;"/>
-		<method name="exec(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process;"/>
-		<method name="exec(Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;"/>
-		<method name="exec([Ljava/lang/String;)Ljava/lang/Process;"/>
-		<method name="exec([Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process;"/>
-		<method name="exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;"/>
-		<method name="exit(I)V"/>
-		<method name="freeMemory()J"/>
-		<method name="gc()V"/>
-		<method name="getLocalizedInputStream(Ljava/io/InputStream;)Ljava/io/InputStream;" deprecated="16"/>
-		<method name="getLocalizedOutputStream(Ljava/io/OutputStream;)Ljava/io/OutputStream;" deprecated="16"/>
-		<method name="getRuntime()Ljava/lang/Runtime;"/>
-		<method name="halt(I)V"/>
-		<method name="load(Ljava/lang/String;)V"/>
-		<method name="loadLibrary(Ljava/lang/String;)V"/>
-		<method name="maxMemory()J"/>
-		<method name="removeShutdownHook(Ljava/lang/Thread;)Z"/>
-		<method name="runFinalization()V"/>
-		<method name="runFinalizersOnExit(Z)V" deprecated="16"/>
-		<method name="totalMemory()J"/>
-		<method name="traceInstructions(Z)V"/>
-		<method name="traceMethodCalls(Z)V"/>
-	</class>
-	<class name="java/lang/RuntimeException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/RuntimePermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/SafeVarargs" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="java/lang/SecurityException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/SecurityManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkAccept(Ljava/lang/String;I)V"/>
-		<method name="checkAccess(Ljava/lang/Thread;)V"/>
-		<method name="checkAccess(Ljava/lang/ThreadGroup;)V"/>
-		<method name="checkAwtEventQueueAccess()V"/>
-		<method name="checkConnect(Ljava/lang/String;I)V"/>
-		<method name="checkConnect(Ljava/lang/String;ILjava/lang/Object;)V"/>
-		<method name="checkCreateClassLoader()V"/>
-		<method name="checkDelete(Ljava/lang/String;)V"/>
-		<method name="checkExec(Ljava/lang/String;)V"/>
-		<method name="checkExit(I)V"/>
-		<method name="checkLink(Ljava/lang/String;)V"/>
-		<method name="checkListen(I)V"/>
-		<method name="checkMemberAccess(Ljava/lang/Class;I)V"/>
-		<method name="checkMulticast(Ljava/net/InetAddress;)V"/>
-		<method name="checkMulticast(Ljava/net/InetAddress;B)V" deprecated="16"/>
-		<method name="checkPackageAccess(Ljava/lang/String;)V"/>
-		<method name="checkPackageDefinition(Ljava/lang/String;)V"/>
-		<method name="checkPermission(Ljava/security/Permission;)V"/>
-		<method name="checkPermission(Ljava/security/Permission;Ljava/lang/Object;)V"/>
-		<method name="checkPrintJobAccess()V"/>
-		<method name="checkPropertiesAccess()V"/>
-		<method name="checkPropertyAccess(Ljava/lang/String;)V"/>
-		<method name="checkRead(Ljava/io/FileDescriptor;)V"/>
-		<method name="checkRead(Ljava/lang/String;)V"/>
-		<method name="checkRead(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="checkSecurityAccess(Ljava/lang/String;)V"/>
-		<method name="checkSetFactory()V"/>
-		<method name="checkSystemClipboardAccess()V"/>
-		<method name="checkTopLevelWindow(Ljava/lang/Object;)Z"/>
-		<method name="checkWrite(Ljava/io/FileDescriptor;)V"/>
-		<method name="checkWrite(Ljava/lang/String;)V"/>
-		<method name="classDepth(Ljava/lang/String;)I" deprecated="16"/>
-		<method name="classLoaderDepth()I" deprecated="16"/>
-		<method name="currentClassLoader()Ljava/lang/ClassLoader;" deprecated="16"/>
-		<method name="currentLoadedClass()Ljava/lang/Class;" deprecated="16"/>
-		<method name="getClassContext()[Ljava/lang/Class;"/>
-		<method name="getInCheck()Z" deprecated="16"/>
-		<method name="getSecurityContext()Ljava/lang/Object;"/>
-		<method name="getThreadGroup()Ljava/lang/ThreadGroup;"/>
-		<method name="inClass(Ljava/lang/String;)Z" deprecated="16"/>
-		<method name="inClassLoader()Z" deprecated="16"/>
-		<field name="inCheck" deprecated="16"/>
-	</class>
-	<class name="java/lang/Short" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(S)V"/>
-		<method name="compare(SS)I" since="19"/>
-		<method name="compareTo(Ljava/lang/Short;)I"/>
-		<method name="decode(Ljava/lang/String;)Ljava/lang/Short;"/>
-		<method name="hashCode(S)I" since="24"/>
-		<method name="parseShort(Ljava/lang/String;)S"/>
-		<method name="parseShort(Ljava/lang/String;I)S"/>
-		<method name="reverseBytes(S)S"/>
-		<method name="toString(S)Ljava/lang/String;"/>
-		<method name="toUnsignedInt(S)I" since="26"/>
-		<method name="toUnsignedLong(S)J" since="26"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Short;"/>
-		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Short;"/>
-		<method name="valueOf(S)Ljava/lang/Short;"/>
-		<field name="BYTES" since="24"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_VALUE"/>
-		<field name="SIZE"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/StackOverflowError" since="1">
-		<extends name="java/lang/VirtualMachineError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/StackTraceElement" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="getClassName()Ljava/lang/String;"/>
-		<method name="getFileName()Ljava/lang/String;"/>
-		<method name="getLineNumber()I"/>
-		<method name="getMethodName()Ljava/lang/String;"/>
-		<method name="isNativeMethod()Z"/>
-	</class>
-	<class name="java/lang/StrictMath" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="IEEEremainder(DD)D"/>
-		<method name="abs(D)D"/>
-		<method name="abs(F)F"/>
-		<method name="abs(I)I"/>
-		<method name="abs(J)J"/>
-		<method name="acos(D)D"/>
-		<method name="addExact(II)I" since="24"/>
-		<method name="addExact(JJ)J" since="24"/>
-		<method name="asin(D)D"/>
-		<method name="atan(D)D"/>
-		<method name="atan2(DD)D"/>
-		<method name="cbrt(D)D"/>
-		<method name="ceil(D)D"/>
-		<method name="copySign(DD)D" since="9"/>
-		<method name="copySign(FF)F" since="9"/>
-		<method name="cos(D)D"/>
-		<method name="cosh(D)D"/>
-		<method name="exp(D)D"/>
-		<method name="expm1(D)D"/>
-		<method name="floor(D)D"/>
-		<method name="floorDiv(II)I" since="24"/>
-		<method name="floorDiv(JJ)J" since="24"/>
-		<method name="floorMod(II)I" since="24"/>
-		<method name="floorMod(JJ)J" since="24"/>
-		<method name="getExponent(D)I" since="9"/>
-		<method name="getExponent(F)I" since="9"/>
-		<method name="hypot(DD)D"/>
-		<method name="log(D)D"/>
-		<method name="log10(D)D"/>
-		<method name="log1p(D)D"/>
-		<method name="max(DD)D"/>
-		<method name="max(FF)F"/>
-		<method name="max(II)I"/>
-		<method name="max(JJ)J"/>
-		<method name="min(DD)D"/>
-		<method name="min(FF)F"/>
-		<method name="min(II)I"/>
-		<method name="min(JJ)J"/>
-		<method name="multiplyExact(II)I" since="24"/>
-		<method name="multiplyExact(JJ)J" since="24"/>
-		<method name="nextAfter(DD)D" since="9"/>
-		<method name="nextAfter(FD)F" since="9"/>
-		<method name="nextDown(D)D" since="24"/>
-		<method name="nextDown(F)F" since="24"/>
-		<method name="nextUp(D)D" since="9"/>
-		<method name="nextUp(F)F" since="9"/>
-		<method name="pow(DD)D"/>
-		<method name="random()D"/>
-		<method name="rint(D)D"/>
-		<method name="round(D)J"/>
-		<method name="round(F)I"/>
-		<method name="scalb(DI)D" since="9"/>
-		<method name="scalb(FI)F" since="9"/>
-		<method name="signum(D)D"/>
-		<method name="signum(F)F"/>
-		<method name="sin(D)D"/>
-		<method name="sinh(D)D"/>
-		<method name="sqrt(D)D"/>
-		<method name="subtractExact(II)I" since="24"/>
-		<method name="subtractExact(JJ)J" since="24"/>
-		<method name="tan(D)D"/>
-		<method name="tanh(D)D"/>
-		<method name="toDegrees(D)D"/>
-		<method name="toIntExact(J)I" since="24"/>
-		<method name="toRadians(D)D"/>
-		<method name="ulp(D)D"/>
-		<method name="ulp(F)F"/>
-		<field name="E"/>
-		<field name="PI"/>
-	</class>
-	<class name="java/lang/String" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/CharSequence"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/StringBuffer;)V"/>
-		<method name="&lt;init>(Ljava/lang/StringBuilder;)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="&lt;init>([BI)V" deprecated="16"/>
-		<method name="&lt;init>([BII)V"/>
-		<method name="&lt;init>([BIII)V" deprecated="16"/>
-		<method name="&lt;init>([BIILjava/lang/String;)V"/>
-		<method name="&lt;init>([BIILjava/nio/charset/Charset;)V" since="9"/>
-		<method name="&lt;init>([BLjava/lang/String;)V"/>
-		<method name="&lt;init>([BLjava/nio/charset/Charset;)V" since="9"/>
-		<method name="&lt;init>([C)V"/>
-		<method name="&lt;init>([CII)V"/>
-		<method name="&lt;init>([III)V"/>
-		<method name="codePointAt(I)I"/>
-		<method name="codePointBefore(I)I"/>
-		<method name="codePointCount(II)I"/>
-		<method name="compareTo(Ljava/lang/String;)I"/>
-		<method name="compareToIgnoreCase(Ljava/lang/String;)I"/>
-		<method name="concat(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="contains(Ljava/lang/CharSequence;)Z"/>
-		<method name="contentEquals(Ljava/lang/CharSequence;)Z"/>
-		<method name="contentEquals(Ljava/lang/StringBuffer;)Z"/>
-		<method name="copyValueOf([C)Ljava/lang/String;"/>
-		<method name="copyValueOf([CII)Ljava/lang/String;"/>
-		<method name="endsWith(Ljava/lang/String;)Z"/>
-		<method name="equalsIgnoreCase(Ljava/lang/String;)Z"/>
-		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="getBytes()[B"/>
-		<method name="getBytes(II[BI)V" deprecated="16"/>
-		<method name="getBytes(Ljava/lang/String;)[B"/>
-		<method name="getBytes(Ljava/nio/charset/Charset;)[B" since="9"/>
-		<method name="getChars(II[CI)V"/>
-		<method name="indexOf(I)I"/>
-		<method name="indexOf(II)I"/>
-		<method name="indexOf(Ljava/lang/String;)I"/>
-		<method name="indexOf(Ljava/lang/String;I)I"/>
-		<method name="intern()Ljava/lang/String;"/>
-		<method name="isEmpty()Z" since="9"/>
-		<method name="join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;" since="26"/>
-		<method name="join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;" since="26"/>
-		<method name="lastIndexOf(I)I"/>
-		<method name="lastIndexOf(II)I"/>
-		<method name="lastIndexOf(Ljava/lang/String;)I"/>
-		<method name="lastIndexOf(Ljava/lang/String;I)I"/>
-		<method name="matches(Ljava/lang/String;)Z"/>
-		<method name="offsetByCodePoints(II)I"/>
-		<method name="regionMatches(ILjava/lang/String;II)Z"/>
-		<method name="regionMatches(ZILjava/lang/String;II)Z"/>
-		<method name="replace(CC)Ljava/lang/String;"/>
-		<method name="replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
-		<method name="replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="split(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="split(Ljava/lang/String;I)[Ljava/lang/String;"/>
-		<method name="startsWith(Ljava/lang/String;)Z"/>
-		<method name="startsWith(Ljava/lang/String;I)Z"/>
-		<method name="substring(I)Ljava/lang/String;"/>
-		<method name="substring(II)Ljava/lang/String;"/>
-		<method name="toCharArray()[C"/>
-		<method name="toLowerCase()Ljava/lang/String;"/>
-		<method name="toLowerCase(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="toUpperCase()Ljava/lang/String;"/>
-		<method name="toUpperCase(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="trim()Ljava/lang/String;"/>
-		<method name="valueOf(C)Ljava/lang/String;"/>
-		<method name="valueOf(D)Ljava/lang/String;"/>
-		<method name="valueOf(F)Ljava/lang/String;"/>
-		<method name="valueOf(I)Ljava/lang/String;"/>
-		<method name="valueOf(J)Ljava/lang/String;"/>
-		<method name="valueOf(Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="valueOf(Z)Ljava/lang/String;"/>
-		<method name="valueOf([C)Ljava/lang/String;"/>
-		<method name="valueOf([CII)Ljava/lang/String;"/>
-		<field name="CASE_INSENSITIVE_ORDER"/>
-	</class>
-	<class name="java/lang/StringBuffer" since="1">
-		<extends name="java/lang/AbstractStringBuilder" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Appendable"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="append(C)Ljava/lang/StringBuffer;"/>
-		<method name="append(D)Ljava/lang/StringBuffer;"/>
-		<method name="append(F)Ljava/lang/StringBuffer;"/>
-		<method name="append(I)Ljava/lang/StringBuffer;"/>
-		<method name="append(J)Ljava/lang/StringBuffer;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer;"/>
-		<method name="append(Ljava/lang/Object;)Ljava/lang/StringBuffer;"/>
-		<method name="append(Ljava/lang/String;)Ljava/lang/StringBuffer;"/>
-		<method name="append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;"/>
-		<method name="append(Z)Ljava/lang/StringBuffer;"/>
-		<method name="append([C)Ljava/lang/StringBuffer;"/>
-		<method name="append([CII)Ljava/lang/StringBuffer;"/>
-		<method name="appendCodePoint(I)Ljava/lang/StringBuffer;"/>
-		<method name="delete(II)Ljava/lang/StringBuffer;"/>
-		<method name="deleteCharAt(I)Ljava/lang/StringBuffer;"/>
-		<method name="insert(IC)Ljava/lang/StringBuffer;"/>
-		<method name="insert(ID)Ljava/lang/StringBuffer;"/>
-		<method name="insert(IF)Ljava/lang/StringBuffer;"/>
-		<method name="insert(II)Ljava/lang/StringBuffer;"/>
-		<method name="insert(IJ)Ljava/lang/StringBuffer;"/>
-		<method name="insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuffer;"/>
-		<method name="insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuffer;"/>
-		<method name="insert(ILjava/lang/Object;)Ljava/lang/StringBuffer;"/>
-		<method name="insert(ILjava/lang/String;)Ljava/lang/StringBuffer;"/>
-		<method name="insert(IZ)Ljava/lang/StringBuffer;"/>
-		<method name="insert(I[C)Ljava/lang/StringBuffer;"/>
-		<method name="insert(I[CII)Ljava/lang/StringBuffer;"/>
-		<method name="replace(IILjava/lang/String;)Ljava/lang/StringBuffer;"/>
-		<method name="reverse()Ljava/lang/StringBuffer;"/>
-	</class>
-	<class name="java/lang/StringBuilder" since="1">
-		<extends name="java/lang/AbstractStringBuilder" removed="29"/>
-		<extends name="java/lang/Object" since="29"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Appendable"/>
-		<implements name="java/lang/CharSequence"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="append(C)Ljava/lang/StringBuilder;"/>
-		<method name="append(D)Ljava/lang/StringBuilder;"/>
-		<method name="append(F)Ljava/lang/StringBuilder;"/>
-		<method name="append(I)Ljava/lang/StringBuilder;"/>
-		<method name="append(J)Ljava/lang/StringBuilder;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;"/>
-		<method name="append(Ljava/lang/Object;)Ljava/lang/StringBuilder;"/>
-		<method name="append(Ljava/lang/String;)Ljava/lang/StringBuilder;"/>
-		<method name="append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;"/>
-		<method name="append(Z)Ljava/lang/StringBuilder;"/>
-		<method name="append([C)Ljava/lang/StringBuilder;"/>
-		<method name="append([CII)Ljava/lang/StringBuilder;"/>
-		<method name="appendCodePoint(I)Ljava/lang/StringBuilder;"/>
-		<method name="delete(II)Ljava/lang/StringBuilder;"/>
-		<method name="deleteCharAt(I)Ljava/lang/StringBuilder;"/>
-		<method name="insert(IC)Ljava/lang/StringBuilder;"/>
-		<method name="insert(ID)Ljava/lang/StringBuilder;"/>
-		<method name="insert(IF)Ljava/lang/StringBuilder;"/>
-		<method name="insert(II)Ljava/lang/StringBuilder;"/>
-		<method name="insert(IJ)Ljava/lang/StringBuilder;"/>
-		<method name="insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
-		<method name="insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuilder;"/>
-		<method name="insert(ILjava/lang/Object;)Ljava/lang/StringBuilder;"/>
-		<method name="insert(ILjava/lang/String;)Ljava/lang/StringBuilder;"/>
-		<method name="insert(IZ)Ljava/lang/StringBuilder;"/>
-		<method name="insert(I[C)Ljava/lang/StringBuilder;"/>
-		<method name="insert(I[CII)Ljava/lang/StringBuilder;"/>
-		<method name="replace(IILjava/lang/String;)Ljava/lang/StringBuilder;"/>
-		<method name="reverse()Ljava/lang/StringBuilder;"/>
-	</class>
-	<class name="java/lang/StringIndexOutOfBoundsException" since="1">
-		<extends name="java/lang/IndexOutOfBoundsException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/SuppressWarnings" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="value()[Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/System" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V"/>
-		<method name="clearProperty(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="console()Ljava/io/Console;" since="9"/>
-		<method name="currentTimeMillis()J"/>
-		<method name="exit(I)V"/>
-		<method name="gc()V"/>
-		<method name="getProperties()Ljava/util/Properties;"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getSecurityManager()Ljava/lang/SecurityManager;"/>
-		<method name="getenv()Ljava/util/Map;"/>
-		<method name="getenv(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="identityHashCode(Ljava/lang/Object;)I"/>
-		<method name="inheritedChannel()Ljava/nio/channels/Channel;"/>
-		<method name="lineSeparator()Ljava/lang/String;" since="19"/>
-		<method name="load(Ljava/lang/String;)V"/>
-		<method name="loadLibrary(Ljava/lang/String;)V"/>
-		<method name="mapLibraryName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="nanoTime()J"/>
-		<method name="runFinalization()V"/>
-		<method name="runFinalizersOnExit(Z)V" deprecated="16"/>
-		<method name="setErr(Ljava/io/PrintStream;)V"/>
-		<method name="setIn(Ljava/io/InputStream;)V"/>
-		<method name="setOut(Ljava/io/PrintStream;)V"/>
-		<method name="setProperties(Ljava/util/Properties;)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="setSecurityManager(Ljava/lang/SecurityManager;)V"/>
-		<field name="err"/>
-		<field name="in"/>
-		<field name="out"/>
-	</class>
-	<class name="java/lang/Thread" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Runnable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Runnable;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V"/>
-		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V"/>
-		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"/>
-		<method name="activeCount()I"/>
-		<method name="checkAccess()V"/>
-		<method name="countStackFrames()I" deprecated="16"/>
-		<method name="currentThread()Ljava/lang/Thread;"/>
-		<method name="destroy()V" deprecated="16"/>
-		<method name="dumpStack()V"/>
-		<method name="enumerate([Ljava/lang/Thread;)I"/>
-		<method name="getAllStackTraces()Ljava/util/Map;"/>
-		<method name="getContextClassLoader()Ljava/lang/ClassLoader;"/>
-		<method name="getDefaultUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;"/>
-		<method name="getId()J"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPriority()I"/>
-		<method name="getStackTrace()[Ljava/lang/StackTraceElement;"/>
-		<method name="getState()Ljava/lang/Thread$State;"/>
-		<method name="getThreadGroup()Ljava/lang/ThreadGroup;"/>
-		<method name="getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;"/>
-		<method name="holdsLock(Ljava/lang/Object;)Z"/>
-		<method name="interrupt()V"/>
-		<method name="interrupted()Z"/>
-		<method name="isAlive()Z"/>
-		<method name="isDaemon()Z"/>
-		<method name="isInterrupted()Z"/>
-		<method name="join()V"/>
-		<method name="join(J)V"/>
-		<method name="join(JI)V"/>
-		<method name="resume()V" deprecated="16"/>
-		<method name="setContextClassLoader(Ljava/lang/ClassLoader;)V"/>
-		<method name="setDaemon(Z)V"/>
-		<method name="setDefaultUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V"/>
-		<method name="setName(Ljava/lang/String;)V"/>
-		<method name="setPriority(I)V"/>
-		<method name="setUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V"/>
-		<method name="sleep(J)V"/>
-		<method name="sleep(JI)V"/>
-		<method name="start()V"/>
-		<method name="stop()V" deprecated="16"/>
-		<method name="stop(Ljava/lang/Throwable;)V" deprecated="16"/>
-		<method name="suspend()V" deprecated="16"/>
-		<method name="yield()V"/>
-		<field name="MAX_PRIORITY"/>
-		<field name="MIN_PRIORITY"/>
-		<field name="NORM_PRIORITY"/>
-	</class>
-	<class name="java/lang/Thread$State" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Thread$State;"/>
-		<method name="values()[Ljava/lang/Thread$State;"/>
-		<field name="BLOCKED"/>
-		<field name="NEW"/>
-		<field name="RUNNABLE"/>
-		<field name="TERMINATED"/>
-		<field name="TIMED_WAITING"/>
-		<field name="WAITING"/>
-	</class>
-	<class name="java/lang/Thread$UncaughtExceptionHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="uncaughtException(Ljava/lang/Thread;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/ThreadDeath" since="1">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/lang/ThreadGroup" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Thread$UncaughtExceptionHandler"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"/>
-		<method name="activeCount()I"/>
-		<method name="activeGroupCount()I"/>
-		<method name="allowThreadSuspension(Z)Z" deprecated="16"/>
-		<method name="checkAccess()V"/>
-		<method name="destroy()V"/>
-		<method name="enumerate([Ljava/lang/Thread;)I"/>
-		<method name="enumerate([Ljava/lang/Thread;Z)I"/>
-		<method name="enumerate([Ljava/lang/ThreadGroup;)I"/>
-		<method name="enumerate([Ljava/lang/ThreadGroup;Z)I"/>
-		<method name="getMaxPriority()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getParent()Ljava/lang/ThreadGroup;"/>
-		<method name="interrupt()V"/>
-		<method name="isDaemon()Z"/>
-		<method name="isDestroyed()Z"/>
-		<method name="list()V"/>
-		<method name="parentOf(Ljava/lang/ThreadGroup;)Z"/>
-		<method name="resume()V" deprecated="16"/>
-		<method name="setDaemon(Z)V"/>
-		<method name="setMaxPriority(I)V"/>
-		<method name="stop()V" deprecated="16"/>
-		<method name="suspend()V" deprecated="16"/>
-	</class>
-	<class name="java/lang/ThreadLocal" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get()Ljava/lang/Object;"/>
-		<method name="initialValue()Ljava/lang/Object;"/>
-		<method name="remove()V"/>
-		<method name="set(Ljava/lang/Object;)V"/>
-		<method name="withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal;" since="26"/>
-	</class>
-	<class name="java/lang/Throwable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="19"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="addSuppressed(Ljava/lang/Throwable;)V" since="19"/>
-		<method name="fillInStackTrace()Ljava/lang/Throwable;"/>
-		<method name="getCause()Ljava/lang/Throwable;"/>
-		<method name="getLocalizedMessage()Ljava/lang/String;"/>
-		<method name="getMessage()Ljava/lang/String;"/>
-		<method name="getStackTrace()[Ljava/lang/StackTraceElement;"/>
-		<method name="getSuppressed()[Ljava/lang/Throwable;" since="19"/>
-		<method name="initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;"/>
-		<method name="printStackTrace()V"/>
-		<method name="printStackTrace(Ljava/io/PrintStream;)V"/>
-		<method name="printStackTrace(Ljava/io/PrintWriter;)V"/>
-		<method name="setStackTrace([Ljava/lang/StackTraceElement;)V"/>
-	</class>
-	<class name="java/lang/TypeNotPresentException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="typeName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/UnknownError" since="1">
-		<extends name="java/lang/VirtualMachineError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/UnsatisfiedLinkError" since="1">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/UnsupportedClassVersionError" since="1">
-		<extends name="java/lang/ClassFormatError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/UnsupportedOperationException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/VerifyError" since="1">
-		<extends name="java/lang/LinkageError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/VirtualMachineError" since="1">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="24"/>
-	</class>
-	<class name="java/lang/Void" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="TYPE"/>
-	</class>
-	<class name="java/lang/annotation/Annotation" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="annotationType()Ljava/lang/Class;"/>
-	</class>
-	<class name="java/lang/annotation/AnnotationFormatError" since="1">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/annotation/AnnotationTypeMismatchException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/String;)V"/>
-		<method name="element()Ljava/lang/reflect/Method;"/>
-		<method name="foundType()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/annotation/Documented" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="java/lang/annotation/ElementType" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/annotation/ElementType;"/>
-		<method name="values()[Ljava/lang/annotation/ElementType;"/>
-		<field name="ANNOTATION_TYPE"/>
-		<field name="CONSTRUCTOR"/>
-		<field name="FIELD"/>
-		<field name="LOCAL_VARIABLE"/>
-		<field name="METHOD"/>
-		<field name="PACKAGE"/>
-		<field name="PARAMETER"/>
-		<field name="TYPE"/>
-		<field name="TYPE_PARAMETER" since="26"/>
-		<field name="TYPE_USE" since="26"/>
-	</class>
-	<class name="java/lang/annotation/IncompleteAnnotationException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
-		<method name="annotationType()Ljava/lang/Class;"/>
-		<method name="elementName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/annotation/Inherited" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="java/lang/annotation/Native" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-	</class>
-	<class name="java/lang/annotation/Repeatable" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="value()Ljava/lang/Class;"/>
-	</class>
-	<class name="java/lang/annotation/Retention" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="value()Ljava/lang/annotation/RetentionPolicy;"/>
-	</class>
-	<class name="java/lang/annotation/RetentionPolicy" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/lang/annotation/RetentionPolicy;"/>
-		<method name="values()[Ljava/lang/annotation/RetentionPolicy;"/>
-		<field name="CLASS"/>
-		<field name="RUNTIME"/>
-		<field name="SOURCE"/>
-	</class>
-	<class name="java/lang/annotation/Target" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/annotation/Annotation"/>
-		<method name="value()[Ljava/lang/annotation/ElementType;"/>
-	</class>
-	<class name="java/lang/invoke/CallSite" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/invoke/MethodType;)V" since="29"/>
-		<method name="dynamicInvoker()Ljava/lang/invoke/MethodHandle;"/>
-		<method name="getTarget()Ljava/lang/invoke/MethodHandle;"/>
-		<method name="setTarget(Ljava/lang/invoke/MethodHandle;)V"/>
-		<method name="type()Ljava/lang/invoke/MethodType;"/>
-	</class>
-	<class name="java/lang/invoke/ConstantCallSite" since="26">
-		<extends name="java/lang/invoke/CallSite"/>
-		<method name="&lt;init>(Ljava/lang/invoke/MethodHandle;)V"/>
-		<method name="&lt;init>(Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)V"/>
-	</class>
-	<class name="java/lang/invoke/LambdaConversionException" since="26">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/lang/invoke/MethodHandle" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JILjava/lang/invoke/MethodType;)V" since="29"/>
-		<method name="asCollector(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="asFixedArity()Ljava/lang/invoke/MethodHandle;"/>
-		<method name="asSpreader(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="asType(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="asVarargsCollector(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="bindTo(Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="invoke([Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="invokeExact([Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="invokeWithArguments(Ljava/util/List;)Ljava/lang/Object;"/>
-		<method name="invokeWithArguments([Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="isVarargsCollector()Z"/>
-		<method name="type()Ljava/lang/invoke/MethodType;"/>
-	</class>
-	<class name="java/lang/invoke/MethodHandleInfo" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="getDeclaringClass()Ljava/lang/Class;"/>
-		<method name="getMethodType()Ljava/lang/invoke/MethodType;"/>
-		<method name="getModifiers()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getReferenceKind()I"/>
-		<method name="isVarArgs()Z"/>
-		<method name="refKindIsField(I)Z"/>
-		<method name="refKindIsValid(I)Z"/>
-		<method name="refKindName(I)Ljava/lang/String;"/>
-		<method name="referenceKindToString(I)Ljava/lang/String;"/>
-		<method name="reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/reflect/Member;"/>
-		<method name="toString(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/String;"/>
-		<field name="REF_getField"/>
-		<field name="REF_getStatic"/>
-		<field name="REF_invokeInterface"/>
-		<field name="REF_invokeSpecial"/>
-		<field name="REF_invokeStatic"/>
-		<field name="REF_invokeVirtual"/>
-		<field name="REF_newInvokeSpecial"/>
-		<field name="REF_putField"/>
-		<field name="REF_putStatic"/>
-	</class>
-	<class name="java/lang/invoke/MethodHandles" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="arrayElementGetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="arrayElementSetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="catchException(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="collectArguments(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="constant(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="dropArguments(Ljava/lang/invoke/MethodHandle;ILjava/util/List;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="dropArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="exactInvoker(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="explicitCastArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="filterArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="filterReturnValue(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="foldArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="guardWithTest(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="identity(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="insertArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="invoker(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="lookup()Ljava/lang/invoke/MethodHandles$Lookup;"/>
-		<method name="permuteArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="publicLookup()Ljava/lang/invoke/MethodHandles$Lookup;"/>
-		<method name="reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/reflect/Member;"/>
-		<method name="spreadInvoker(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="throwException(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-	</class>
-	<class name="java/lang/invoke/MethodHandles$Lookup" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" since="29"/>
-		<method name="bind(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findConstructor(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findGetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findSetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findSpecial(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findStatic(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findStaticGetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findStaticSetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="findVirtual(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="in(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandles$Lookup;"/>
-		<method name="lookupClass()Ljava/lang/Class;"/>
-		<method name="lookupModes()I"/>
-		<method name="revealDirect(Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandleInfo;"/>
-		<method name="unreflect(Ljava/lang/reflect/Method;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="unreflectConstructor(Ljava/lang/reflect/Constructor;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="unreflectGetter(Ljava/lang/reflect/Field;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="unreflectSetter(Ljava/lang/reflect/Field;)Ljava/lang/invoke/MethodHandle;"/>
-		<method name="unreflectSpecial(Ljava/lang/reflect/Method;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
-		<field name="PACKAGE"/>
-		<field name="PRIVATE"/>
-		<field name="PROTECTED"/>
-		<field name="PUBLIC"/>
-	</class>
-	<class name="java/lang/invoke/MethodType" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="appendParameterTypes(Ljava/util/List;)Ljava/lang/invoke/MethodType;"/>
-		<method name="appendParameterTypes([Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="changeParameterType(ILjava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="changeReturnType(Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="dropParameterTypes(II)Ljava/lang/invoke/MethodType;"/>
-		<method name="erase()Ljava/lang/invoke/MethodType;"/>
-		<method name="fromMethodDescriptorString(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/invoke/MethodType;"/>
-		<method name="generic()Ljava/lang/invoke/MethodType;"/>
-		<method name="genericMethodType(I)Ljava/lang/invoke/MethodType;"/>
-		<method name="genericMethodType(IZ)Ljava/lang/invoke/MethodType;"/>
-		<method name="hasPrimitives()Z"/>
-		<method name="hasWrappers()Z"/>
-		<method name="insertParameterTypes(ILjava/util/List;)Ljava/lang/invoke/MethodType;"/>
-		<method name="insertParameterTypes(I[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="methodType(Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="methodType(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="methodType(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="methodType(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType;"/>
-		<method name="methodType(Ljava/lang/Class;Ljava/util/List;)Ljava/lang/invoke/MethodType;"/>
-		<method name="methodType(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
-		<method name="parameterArray()[Ljava/lang/Class;"/>
-		<method name="parameterCount()I"/>
-		<method name="parameterList()Ljava/util/List;"/>
-		<method name="parameterType(I)Ljava/lang/Class;"/>
-		<method name="returnType()Ljava/lang/Class;"/>
-		<method name="toMethodDescriptorString()Ljava/lang/String;"/>
-		<method name="unwrap()Ljava/lang/invoke/MethodType;"/>
-		<method name="wrap()Ljava/lang/invoke/MethodType;"/>
-	</class>
-	<class name="java/lang/invoke/MutableCallSite" since="26">
-		<extends name="java/lang/invoke/CallSite"/>
-		<method name="&lt;init>(Ljava/lang/invoke/MethodHandle;)V"/>
-		<method name="&lt;init>(Ljava/lang/invoke/MethodType;)V"/>
-	</class>
-	<class name="java/lang/invoke/VolatileCallSite" since="26">
-		<extends name="java/lang/invoke/CallSite"/>
-		<method name="&lt;init>(Ljava/lang/invoke/MethodHandle;)V"/>
-		<method name="&lt;init>(Ljava/lang/invoke/MethodType;)V"/>
-	</class>
-	<class name="java/lang/invoke/WrongMethodTypeException" since="26">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/ref/PhantomReference" since="1">
-		<extends name="java/lang/ref/Reference"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V"/>
-	</class>
-	<class name="java/lang/ref/Reference" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V" since="29"/>
-		<method name="clear()V"/>
-		<method name="enqueue()Z"/>
-		<method name="get()Ljava/lang/Object;"/>
-		<method name="isEnqueued()Z"/>
-		<method name="reachabilityFence(Ljava/lang/Object;)V" since="28"/>
-	</class>
-	<class name="java/lang/ref/ReferenceQueue" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="poll()Ljava/lang/ref/Reference;"/>
-		<method name="remove()Ljava/lang/ref/Reference;"/>
-		<method name="remove(J)Ljava/lang/ref/Reference;"/>
-	</class>
-	<class name="java/lang/ref/SoftReference" since="1">
-		<extends name="java/lang/ref/Reference"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V"/>
-	</class>
-	<class name="java/lang/ref/WeakReference" since="1">
-		<extends name="java/lang/ref/Reference"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V"/>
-	</class>
-	<class name="java/lang/reflect/AccessibleObject" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/AnnotatedElement"/>
-		<method name="&lt;init>()V"/>
-		<method name="isAccessible()Z"/>
-		<method name="setAccessible(Z)V"/>
-		<method name="setAccessible([Ljava/lang/reflect/AccessibleObject;Z)V"/>
-	</class>
-	<class name="java/lang/reflect/AnnotatedElement" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"/>
-		<method name="getAnnotations()[Ljava/lang/annotation/Annotation;"/>
-		<method name="getAnnotationsByType(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;" since="24"/>
-		<method name="getDeclaredAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" since="24"/>
-		<method name="getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;"/>
-		<method name="getDeclaredAnnotationsByType(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;" since="24"/>
-		<method name="isAnnotationPresent(Ljava/lang/Class;)Z"/>
-	</class>
-	<class name="java/lang/reflect/Array" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Ljava/lang/Object;I)Ljava/lang/Object;"/>
-		<method name="getBoolean(Ljava/lang/Object;I)Z"/>
-		<method name="getByte(Ljava/lang/Object;I)B"/>
-		<method name="getChar(Ljava/lang/Object;I)C"/>
-		<method name="getDouble(Ljava/lang/Object;I)D"/>
-		<method name="getFloat(Ljava/lang/Object;I)F"/>
-		<method name="getInt(Ljava/lang/Object;I)I"/>
-		<method name="getLength(Ljava/lang/Object;)I"/>
-		<method name="getLong(Ljava/lang/Object;I)J"/>
-		<method name="getShort(Ljava/lang/Object;I)S"/>
-		<method name="newInstance(Ljava/lang/Class;I)Ljava/lang/Object;"/>
-		<method name="newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;"/>
-		<method name="set(Ljava/lang/Object;ILjava/lang/Object;)V"/>
-		<method name="setBoolean(Ljava/lang/Object;IZ)V"/>
-		<method name="setByte(Ljava/lang/Object;IB)V"/>
-		<method name="setChar(Ljava/lang/Object;IC)V"/>
-		<method name="setDouble(Ljava/lang/Object;ID)V"/>
-		<method name="setFloat(Ljava/lang/Object;IF)V"/>
-		<method name="setInt(Ljava/lang/Object;II)V"/>
-		<method name="setLong(Ljava/lang/Object;IJ)V"/>
-		<method name="setShort(Ljava/lang/Object;IS)V"/>
-	</class>
-	<class name="java/lang/reflect/Constructor" since="1">
-		<extends name="java/lang/reflect/AccessibleObject" removed="26"/>
-		<extends name="java/lang/reflect/Executable" since="26"/>
-		<implements name="java/lang/reflect/GenericDeclaration" removed="26"/>
-		<implements name="java/lang/reflect/Member" removed="26"/>
-		<method name="&lt;init>()V"/>
-		<method name="getExceptionTypes()[Ljava/lang/Class;"/>
-		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
-		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
-		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;"/>
-		<method name="getParameterTypes()[Ljava/lang/Class;"/>
-		<method name="isVarArgs()Z"/>
-		<method name="newInstance([Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="toGenericString()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/reflect/Executable" since="26">
-		<extends name="java/lang/reflect/AccessibleObject"/>
-		<implements name="java/lang/reflect/GenericDeclaration"/>
-		<implements name="java/lang/reflect/Member"/>
-		<method name="&lt;init>()V"/>
-		<method name="getExceptionTypes()[Ljava/lang/Class;"/>
-		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
-		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
-		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;"/>
-		<method name="getParameterCount()I"/>
-		<method name="getParameterTypes()[Ljava/lang/Class;"/>
-		<method name="getParameters()[Ljava/lang/reflect/Parameter;"/>
-		<method name="isVarArgs()Z"/>
-		<method name="toGenericString()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/reflect/Field" since="1">
-		<extends name="java/lang/reflect/AccessibleObject"/>
-		<implements name="java/lang/reflect/Member"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getBoolean(Ljava/lang/Object;)Z"/>
-		<method name="getByte(Ljava/lang/Object;)B"/>
-		<method name="getChar(Ljava/lang/Object;)C"/>
-		<method name="getDouble(Ljava/lang/Object;)D"/>
-		<method name="getFloat(Ljava/lang/Object;)F"/>
-		<method name="getGenericType()Ljava/lang/reflect/Type;"/>
-		<method name="getInt(Ljava/lang/Object;)I"/>
-		<method name="getLong(Ljava/lang/Object;)J"/>
-		<method name="getShort(Ljava/lang/Object;)S"/>
-		<method name="getType()Ljava/lang/Class;"/>
-		<method name="isEnumConstant()Z"/>
-		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="setBoolean(Ljava/lang/Object;Z)V"/>
-		<method name="setByte(Ljava/lang/Object;B)V"/>
-		<method name="setChar(Ljava/lang/Object;C)V"/>
-		<method name="setDouble(Ljava/lang/Object;D)V"/>
-		<method name="setFloat(Ljava/lang/Object;F)V"/>
-		<method name="setInt(Ljava/lang/Object;I)V"/>
-		<method name="setLong(Ljava/lang/Object;J)V"/>
-		<method name="setShort(Ljava/lang/Object;S)V"/>
-		<method name="toGenericString()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/reflect/GenericArrayType" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/Type"/>
-		<method name="getGenericComponentType()Ljava/lang/reflect/Type;"/>
-	</class>
-	<class name="java/lang/reflect/GenericDeclaration" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/AnnotatedElement" since="26"/>
-		<method name="getTypeParameters()[Ljava/lang/reflect/TypeVariable;"/>
-	</class>
-	<class name="java/lang/reflect/GenericSignatureFormatError" since="1">
-		<extends name="java/lang/ClassFormatError"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="26"/>
-	</class>
-	<class name="java/lang/reflect/InvocationHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/lang/reflect/InvocationTargetException" since="1">
-		<extends name="java/lang/Exception" removed="19"/>
-		<extends name="java/lang/ReflectiveOperationException" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;Ljava/lang/String;)V"/>
-		<method name="getTargetException()Ljava/lang/Throwable;"/>
-	</class>
-	<class name="java/lang/reflect/MalformedParameterizedTypeException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/lang/reflect/MalformedParametersException" since="28">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/reflect/Member" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getDeclaringClass()Ljava/lang/Class;"/>
-		<method name="getModifiers()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="isSynthetic()Z"/>
-		<field name="DECLARED"/>
-		<field name="PUBLIC"/>
-	</class>
-	<class name="java/lang/reflect/Method" since="1">
-		<extends name="java/lang/reflect/AccessibleObject" removed="26"/>
-		<extends name="java/lang/reflect/Executable" since="26"/>
-		<implements name="java/lang/reflect/GenericDeclaration" removed="26"/>
-		<implements name="java/lang/reflect/Member" removed="26"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultValue()Ljava/lang/Object;"/>
-		<method name="getExceptionTypes()[Ljava/lang/Class;"/>
-		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
-		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
-		<method name="getGenericReturnType()Ljava/lang/reflect/Type;"/>
-		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;"/>
-		<method name="getParameterTypes()[Ljava/lang/Class;"/>
-		<method name="getReturnType()Ljava/lang/Class;"/>
-		<method name="invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="isBridge()Z"/>
-		<method name="isDefault()Z" since="24"/>
-		<method name="isVarArgs()Z"/>
-		<method name="toGenericString()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/reflect/Modifier" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="classModifiers()I" since="19"/>
-		<method name="constructorModifiers()I" since="19"/>
-		<method name="fieldModifiers()I" since="19"/>
-		<method name="interfaceModifiers()I" since="19"/>
-		<method name="isAbstract(I)Z"/>
-		<method name="isFinal(I)Z"/>
-		<method name="isInterface(I)Z"/>
-		<method name="isNative(I)Z"/>
-		<method name="isPrivate(I)Z"/>
-		<method name="isProtected(I)Z"/>
-		<method name="isPublic(I)Z"/>
-		<method name="isStatic(I)Z"/>
-		<method name="isStrict(I)Z"/>
-		<method name="isSynchronized(I)Z"/>
-		<method name="isTransient(I)Z"/>
-		<method name="isVolatile(I)Z"/>
-		<method name="methodModifiers()I" since="19"/>
-		<method name="parameterModifiers()I" since="26"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<field name="ABSTRACT"/>
-		<field name="FINAL"/>
-		<field name="INTERFACE"/>
-		<field name="NATIVE"/>
-		<field name="PRIVATE"/>
-		<field name="PROTECTED"/>
-		<field name="PUBLIC"/>
-		<field name="STATIC"/>
-		<field name="STRICT"/>
-		<field name="SYNCHRONIZED"/>
-		<field name="TRANSIENT"/>
-		<field name="VOLATILE"/>
-	</class>
-	<class name="java/lang/reflect/Parameter" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/AnnotatedElement"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/reflect/Executable;I)V" since="29"/>
-		<method name="getDeclaringExecutable()Ljava/lang/reflect/Executable;"/>
-		<method name="getModifiers()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getParameterizedType()Ljava/lang/reflect/Type;"/>
-		<method name="getType()Ljava/lang/Class;"/>
-		<method name="isImplicit()Z"/>
-		<method name="isNamePresent()Z"/>
-		<method name="isSynthetic()Z"/>
-		<method name="isVarArgs()Z"/>
-	</class>
-	<class name="java/lang/reflect/ParameterizedType" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/Type"/>
-		<method name="getActualTypeArguments()[Ljava/lang/reflect/Type;"/>
-		<method name="getOwnerType()Ljava/lang/reflect/Type;"/>
-		<method name="getRawType()Ljava/lang/reflect/Type;"/>
-	</class>
-	<class name="java/lang/reflect/Proxy" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/reflect/InvocationHandler;)V"/>
-		<method name="getInvocationHandler(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;"/>
-		<method name="getProxyClass(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;"/>
-		<method name="isProxyClass(Ljava/lang/Class;)Z"/>
-		<method name="newProxyInstance(Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;"/>
-		<field name="h"/>
-	</class>
-	<class name="java/lang/reflect/ReflectPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/lang/reflect/Type" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getTypeName()Ljava/lang/String;" since="28"/>
-	</class>
-	<class name="java/lang/reflect/TypeVariable" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/Type"/>
-		<method name="getBounds()[Ljava/lang/reflect/Type;"/>
-		<method name="getGenericDeclaration()Ljava/lang/reflect/GenericDeclaration;"/>
-		<method name="getName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/lang/reflect/UndeclaredThrowableException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;Ljava/lang/String;)V"/>
-		<method name="getUndeclaredThrowable()Ljava/lang/Throwable;"/>
-	</class>
-	<class name="java/lang/reflect/WildcardType" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/reflect/Type"/>
-		<method name="getLowerBounds()[Ljava/lang/reflect/Type;"/>
-		<method name="getUpperBounds()[Ljava/lang/reflect/Type;"/>
-	</class>
-	<class name="java/math/BigDecimal" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(D)V"/>
-		<method name="&lt;init>(DLjava/math/MathContext;)V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/math/MathContext;)V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="&lt;init>(JLjava/math/MathContext;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/math/MathContext;)V"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;)V"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;I)V"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;ILjava/math/MathContext;)V"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/MathContext;)V"/>
-		<method name="&lt;init>([C)V"/>
-		<method name="&lt;init>([CII)V"/>
-		<method name="&lt;init>([CIILjava/math/MathContext;)V"/>
-		<method name="&lt;init>([CLjava/math/MathContext;)V"/>
-		<method name="abs()Ljava/math/BigDecimal;"/>
-		<method name="abs(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="add(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="add(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="byteValueExact()B"/>
-		<method name="compareTo(Ljava/math/BigDecimal;)I"/>
-		<method name="divide(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="divide(Ljava/math/BigDecimal;I)Ljava/math/BigDecimal;"/>
-		<method name="divide(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;"/>
-		<method name="divide(Ljava/math/BigDecimal;ILjava/math/RoundingMode;)Ljava/math/BigDecimal;"/>
-		<method name="divide(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="divide(Ljava/math/BigDecimal;Ljava/math/RoundingMode;)Ljava/math/BigDecimal;"/>
-		<method name="divideAndRemainder(Ljava/math/BigDecimal;)[Ljava/math/BigDecimal;"/>
-		<method name="divideAndRemainder(Ljava/math/BigDecimal;Ljava/math/MathContext;)[Ljava/math/BigDecimal;"/>
-		<method name="divideToIntegralValue(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="divideToIntegralValue(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="intValueExact()I"/>
-		<method name="longValueExact()J"/>
-		<method name="max(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="min(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="movePointLeft(I)Ljava/math/BigDecimal;"/>
-		<method name="movePointRight(I)Ljava/math/BigDecimal;"/>
-		<method name="multiply(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="multiply(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="negate()Ljava/math/BigDecimal;"/>
-		<method name="negate(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="plus()Ljava/math/BigDecimal;"/>
-		<method name="plus(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="pow(I)Ljava/math/BigDecimal;"/>
-		<method name="pow(ILjava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="precision()I"/>
-		<method name="remainder(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="remainder(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="round(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="scale()I"/>
-		<method name="scaleByPowerOfTen(I)Ljava/math/BigDecimal;"/>
-		<method name="setScale(I)Ljava/math/BigDecimal;"/>
-		<method name="setScale(II)Ljava/math/BigDecimal;"/>
-		<method name="setScale(ILjava/math/RoundingMode;)Ljava/math/BigDecimal;"/>
-		<method name="shortValueExact()S"/>
-		<method name="signum()I"/>
-		<method name="stripTrailingZeros()Ljava/math/BigDecimal;"/>
-		<method name="subtract(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
-		<method name="subtract(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
-		<method name="toBigInteger()Ljava/math/BigInteger;"/>
-		<method name="toBigIntegerExact()Ljava/math/BigInteger;"/>
-		<method name="toEngineeringString()Ljava/lang/String;"/>
-		<method name="toPlainString()Ljava/lang/String;"/>
-		<method name="ulp()Ljava/math/BigDecimal;"/>
-		<method name="unscaledValue()Ljava/math/BigInteger;"/>
-		<method name="valueOf(D)Ljava/math/BigDecimal;"/>
-		<method name="valueOf(J)Ljava/math/BigDecimal;"/>
-		<method name="valueOf(JI)Ljava/math/BigDecimal;"/>
-		<field name="ONE"/>
-		<field name="ROUND_CEILING"/>
-		<field name="ROUND_DOWN"/>
-		<field name="ROUND_FLOOR"/>
-		<field name="ROUND_HALF_DOWN"/>
-		<field name="ROUND_HALF_EVEN"/>
-		<field name="ROUND_HALF_UP"/>
-		<field name="ROUND_UNNECESSARY"/>
-		<field name="ROUND_UP"/>
-		<field name="TEN"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="java/math/BigInteger" since="1">
-		<extends name="java/lang/Number"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(IILjava/util/Random;)V"/>
-		<method name="&lt;init>(ILjava/util/Random;)V"/>
-		<method name="&lt;init>(I[B)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="abs()Ljava/math/BigInteger;"/>
-		<method name="add(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="and(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="andNot(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="bitCount()I"/>
-		<method name="bitLength()I"/>
-		<method name="clearBit(I)Ljava/math/BigInteger;"/>
-		<method name="compareTo(Ljava/math/BigInteger;)I"/>
-		<method name="divide(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="divideAndRemainder(Ljava/math/BigInteger;)[Ljava/math/BigInteger;"/>
-		<method name="flipBit(I)Ljava/math/BigInteger;"/>
-		<method name="gcd(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="getLowestSetBit()I"/>
-		<method name="isProbablePrime(I)Z"/>
-		<method name="max(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="min(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="modInverse(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="modPow(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="multiply(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="negate()Ljava/math/BigInteger;"/>
-		<method name="nextProbablePrime()Ljava/math/BigInteger;"/>
-		<method name="not()Ljava/math/BigInteger;"/>
-		<method name="or(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="pow(I)Ljava/math/BigInteger;"/>
-		<method name="probablePrime(ILjava/util/Random;)Ljava/math/BigInteger;"/>
-		<method name="remainder(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="setBit(I)Ljava/math/BigInteger;"/>
-		<method name="shiftLeft(I)Ljava/math/BigInteger;"/>
-		<method name="shiftRight(I)Ljava/math/BigInteger;"/>
-		<method name="signum()I"/>
-		<method name="subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<method name="testBit(I)Z"/>
-		<method name="toByteArray()[B"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<method name="valueOf(J)Ljava/math/BigInteger;"/>
-		<method name="xor(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
-		<field name="ONE"/>
-		<field name="TEN"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="java/math/MathContext" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/math/RoundingMode;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getPrecision()I"/>
-		<method name="getRoundingMode()Ljava/math/RoundingMode;"/>
-		<field name="DECIMAL128"/>
-		<field name="DECIMAL32"/>
-		<field name="DECIMAL64"/>
-		<field name="UNLIMITED"/>
-	</class>
-	<class name="java/math/RoundingMode" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(I)Ljava/math/RoundingMode;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/math/RoundingMode;"/>
-		<method name="values()[Ljava/math/RoundingMode;"/>
-		<field name="CEILING"/>
-		<field name="DOWN"/>
-		<field name="FLOOR"/>
-		<field name="HALF_DOWN"/>
-		<field name="HALF_EVEN"/>
-		<field name="HALF_UP"/>
-		<field name="UNNECESSARY"/>
-		<field name="UP"/>
-	</class>
-	<class name="java/net/Authenticator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getPasswordAuthentication()Ljava/net/PasswordAuthentication;"/>
-		<method name="getRequestingHost()Ljava/lang/String;"/>
-		<method name="getRequestingPort()I"/>
-		<method name="getRequestingPrompt()Ljava/lang/String;"/>
-		<method name="getRequestingProtocol()Ljava/lang/String;"/>
-		<method name="getRequestingScheme()Ljava/lang/String;"/>
-		<method name="getRequestingSite()Ljava/net/InetAddress;"/>
-		<method name="getRequestingURL()Ljava/net/URL;"/>
-		<method name="getRequestorType()Ljava/net/Authenticator$RequestorType;"/>
-		<method name="requestPasswordAuthentication(Ljava/lang/String;Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/PasswordAuthentication;"/>
-		<method name="requestPasswordAuthentication(Ljava/lang/String;Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/net/Authenticator$RequestorType;)Ljava/net/PasswordAuthentication;"/>
-		<method name="requestPasswordAuthentication(Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/PasswordAuthentication;"/>
-		<method name="setDefault(Ljava/net/Authenticator;)V"/>
-	</class>
-	<class name="java/net/Authenticator$RequestorType" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/net/Authenticator$RequestorType;"/>
-		<method name="values()[Ljava/net/Authenticator$RequestorType;"/>
-		<field name="PROXY"/>
-		<field name="SERVER"/>
-	</class>
-	<class name="java/net/BindException" since="1">
-		<extends name="java/net/SocketException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/CacheRequest" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="abort()V"/>
-		<method name="getBody()Ljava/io/OutputStream;"/>
-	</class>
-	<class name="java/net/CacheResponse" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBody()Ljava/io/InputStream;"/>
-		<method name="getHeaders()Ljava/util/Map;"/>
-	</class>
-	<class name="java/net/ConnectException" since="1">
-		<extends name="java/net/SocketException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/ContentHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContent(Ljava/net/URLConnection;)Ljava/lang/Object;"/>
-		<method name="getContent(Ljava/net/URLConnection;[Ljava/lang/Class;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/net/ContentHandlerFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="createContentHandler(Ljava/lang/String;)Ljava/net/ContentHandler;"/>
-	</class>
-	<class name="java/net/CookieHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Ljava/net/URI;Ljava/util/Map;)Ljava/util/Map;"/>
-		<method name="getDefault()Ljava/net/CookieHandler;"/>
-		<method name="put(Ljava/net/URI;Ljava/util/Map;)V"/>
-		<method name="setDefault(Ljava/net/CookieHandler;)V"/>
-	</class>
-	<class name="java/net/CookieManager" since="9">
-		<extends name="java/net/CookieHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/net/CookieStore;Ljava/net/CookiePolicy;)V"/>
-		<method name="getCookieStore()Ljava/net/CookieStore;"/>
-		<method name="setCookiePolicy(Ljava/net/CookiePolicy;)V"/>
-	</class>
-	<class name="java/net/CookiePolicy" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="shouldAccept(Ljava/net/URI;Ljava/net/HttpCookie;)Z"/>
-		<field name="ACCEPT_ALL"/>
-		<field name="ACCEPT_NONE"/>
-		<field name="ACCEPT_ORIGINAL_SERVER"/>
-	</class>
-	<class name="java/net/CookieStore" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="add(Ljava/net/URI;Ljava/net/HttpCookie;)V"/>
-		<method name="get(Ljava/net/URI;)Ljava/util/List;"/>
-		<method name="getCookies()Ljava/util/List;"/>
-		<method name="getURIs()Ljava/util/List;"/>
-		<method name="remove(Ljava/net/URI;Ljava/net/HttpCookie;)Z"/>
-		<method name="removeAll()Z"/>
-	</class>
-	<class name="java/net/DatagramPacket" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>([BI)V"/>
-		<method name="&lt;init>([BII)V"/>
-		<method name="&lt;init>([BIILjava/net/InetAddress;I)V"/>
-		<method name="&lt;init>([BIILjava/net/SocketAddress;)V"/>
-		<method name="&lt;init>([BILjava/net/InetAddress;I)V"/>
-		<method name="&lt;init>([BILjava/net/SocketAddress;)V"/>
-		<method name="getAddress()Ljava/net/InetAddress;"/>
-		<method name="getData()[B"/>
-		<method name="getLength()I"/>
-		<method name="getOffset()I"/>
-		<method name="getPort()I"/>
-		<method name="getSocketAddress()Ljava/net/SocketAddress;"/>
-		<method name="setAddress(Ljava/net/InetAddress;)V"/>
-		<method name="setData([B)V"/>
-		<method name="setData([BII)V"/>
-		<method name="setLength(I)V"/>
-		<method name="setPort(I)V"/>
-		<method name="setSocketAddress(Ljava/net/SocketAddress;)V"/>
-	</class>
-	<class name="java/net/DatagramSocket" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/net/InetAddress;)V"/>
-		<method name="&lt;init>(Ljava/net/DatagramSocketImpl;)V"/>
-		<method name="&lt;init>(Ljava/net/SocketAddress;)V"/>
-		<method name="bind(Ljava/net/SocketAddress;)V"/>
-		<method name="close()V"/>
-		<method name="connect(Ljava/net/InetAddress;I)V"/>
-		<method name="connect(Ljava/net/SocketAddress;)V"/>
-		<method name="disconnect()V"/>
-		<method name="getBroadcast()Z"/>
-		<method name="getChannel()Ljava/nio/channels/DatagramChannel;"/>
-		<method name="getInetAddress()Ljava/net/InetAddress;"/>
-		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
-		<method name="getLocalPort()I"/>
-		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;"/>
-		<method name="getPort()I"/>
-		<method name="getReceiveBufferSize()I"/>
-		<method name="getRemoteSocketAddress()Ljava/net/SocketAddress;"/>
-		<method name="getReuseAddress()Z"/>
-		<method name="getSendBufferSize()I"/>
-		<method name="getSoTimeout()I"/>
-		<method name="getTrafficClass()I"/>
-		<method name="isBound()Z"/>
-		<method name="isClosed()Z"/>
-		<method name="isConnected()Z"/>
-		<method name="receive(Ljava/net/DatagramPacket;)V"/>
-		<method name="send(Ljava/net/DatagramPacket;)V"/>
-		<method name="setBroadcast(Z)V"/>
-		<method name="setDatagramSocketImplFactory(Ljava/net/DatagramSocketImplFactory;)V"/>
-		<method name="setReceiveBufferSize(I)V"/>
-		<method name="setReuseAddress(Z)V"/>
-		<method name="setSendBufferSize(I)V"/>
-		<method name="setSoTimeout(I)V"/>
-		<method name="setTrafficClass(I)V"/>
-	</class>
-	<class name="java/net/DatagramSocketImpl" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/net/SocketOptions"/>
-		<method name="&lt;init>()V"/>
-		<method name="bind(ILjava/net/InetAddress;)V"/>
-		<method name="close()V"/>
-		<method name="connect(Ljava/net/InetAddress;I)V"/>
-		<method name="create()V"/>
-		<method name="disconnect()V"/>
-		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
-		<method name="getLocalPort()I"/>
-		<method name="getTTL()B" deprecated="16"/>
-		<method name="getTimeToLive()I"/>
-		<method name="join(Ljava/net/InetAddress;)V"/>
-		<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
-		<method name="leave(Ljava/net/InetAddress;)V"/>
-		<method name="leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
-		<method name="peek(Ljava/net/InetAddress;)I"/>
-		<method name="peekData(Ljava/net/DatagramPacket;)I"/>
-		<method name="receive(Ljava/net/DatagramPacket;)V"/>
-		<method name="send(Ljava/net/DatagramPacket;)V"/>
-		<method name="setTTL(B)V" deprecated="16"/>
-		<method name="setTimeToLive(I)V"/>
-		<field name="fd"/>
-		<field name="localPort"/>
-	</class>
-	<class name="java/net/DatagramSocketImplFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="createDatagramSocketImpl()Ljava/net/DatagramSocketImpl;"/>
-	</class>
-	<class name="java/net/FileNameMap" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getContentTypeFor(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/net/HttpCookie" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="domainMatches(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="getComment()Ljava/lang/String;"/>
-		<method name="getCommentURL()Ljava/lang/String;"/>
-		<method name="getDiscard()Z"/>
-		<method name="getDomain()Ljava/lang/String;"/>
-		<method name="getMaxAge()J"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getPortlist()Ljava/lang/String;"/>
-		<method name="getSecure()Z"/>
-		<method name="getValue()Ljava/lang/String;"/>
-		<method name="getVersion()I"/>
-		<method name="hasExpired()Z"/>
-		<method name="isHttpOnly()Z" since="24"/>
-		<method name="parse(Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="setComment(Ljava/lang/String;)V"/>
-		<method name="setCommentURL(Ljava/lang/String;)V"/>
-		<method name="setDiscard(Z)V"/>
-		<method name="setDomain(Ljava/lang/String;)V"/>
-		<method name="setHttpOnly(Z)V" since="24"/>
-		<method name="setMaxAge(J)V"/>
-		<method name="setPath(Ljava/lang/String;)V"/>
-		<method name="setPortlist(Ljava/lang/String;)V"/>
-		<method name="setSecure(Z)V"/>
-		<method name="setValue(Ljava/lang/String;)V"/>
-		<method name="setVersion(I)V"/>
-	</class>
-	<class name="java/net/HttpRetryException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="getLocation()Ljava/lang/String;"/>
-		<method name="getReason()Ljava/lang/String;"/>
-		<method name="responseCode()I"/>
-	</class>
-	<class name="java/net/HttpURLConnection" since="1">
-		<extends name="java/net/URLConnection"/>
-		<method name="&lt;init>(Ljava/net/URL;)V"/>
-		<method name="disconnect()V"/>
-		<method name="getErrorStream()Ljava/io/InputStream;"/>
-		<method name="getFollowRedirects()Z"/>
-		<method name="getInstanceFollowRedirects()Z"/>
-		<method name="getRequestMethod()Ljava/lang/String;"/>
-		<method name="getResponseCode()I"/>
-		<method name="getResponseMessage()Ljava/lang/String;"/>
-		<method name="setChunkedStreamingMode(I)V"/>
-		<method name="setFixedLengthStreamingMode(I)V"/>
-		<method name="setFixedLengthStreamingMode(J)V" since="19"/>
-		<method name="setFollowRedirects(Z)V"/>
-		<method name="setInstanceFollowRedirects(Z)V"/>
-		<method name="setRequestMethod(Ljava/lang/String;)V"/>
-		<method name="usingProxy()Z"/>
-		<field name="HTTP_ACCEPTED"/>
-		<field name="HTTP_BAD_GATEWAY"/>
-		<field name="HTTP_BAD_METHOD"/>
-		<field name="HTTP_BAD_REQUEST"/>
-		<field name="HTTP_CLIENT_TIMEOUT"/>
-		<field name="HTTP_CONFLICT"/>
-		<field name="HTTP_CREATED"/>
-		<field name="HTTP_ENTITY_TOO_LARGE"/>
-		<field name="HTTP_FORBIDDEN"/>
-		<field name="HTTP_GATEWAY_TIMEOUT"/>
-		<field name="HTTP_GONE"/>
-		<field name="HTTP_INTERNAL_ERROR"/>
-		<field name="HTTP_LENGTH_REQUIRED"/>
-		<field name="HTTP_MOVED_PERM"/>
-		<field name="HTTP_MOVED_TEMP"/>
-		<field name="HTTP_MULT_CHOICE"/>
-		<field name="HTTP_NOT_ACCEPTABLE"/>
-		<field name="HTTP_NOT_AUTHORITATIVE"/>
-		<field name="HTTP_NOT_FOUND"/>
-		<field name="HTTP_NOT_IMPLEMENTED"/>
-		<field name="HTTP_NOT_MODIFIED"/>
-		<field name="HTTP_NO_CONTENT"/>
-		<field name="HTTP_OK"/>
-		<field name="HTTP_PARTIAL"/>
-		<field name="HTTP_PAYMENT_REQUIRED"/>
-		<field name="HTTP_PRECON_FAILED"/>
-		<field name="HTTP_PROXY_AUTH"/>
-		<field name="HTTP_REQ_TOO_LONG"/>
-		<field name="HTTP_RESET"/>
-		<field name="HTTP_SEE_OTHER"/>
-		<field name="HTTP_SERVER_ERROR" deprecated="16"/>
-		<field name="HTTP_UNAUTHORIZED"/>
-		<field name="HTTP_UNAVAILABLE"/>
-		<field name="HTTP_UNSUPPORTED_TYPE"/>
-		<field name="HTTP_USE_PROXY"/>
-		<field name="HTTP_VERSION"/>
-		<field name="chunkLength"/>
-		<field name="fixedContentLength"/>
-		<field name="fixedContentLengthLong" since="19"/>
-		<field name="instanceFollowRedirects"/>
-		<field name="method"/>
-		<field name="responseCode"/>
-		<field name="responseMessage"/>
-	</class>
-	<class name="java/net/IDN" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="toASCII(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toASCII(Ljava/lang/String;I)Ljava/lang/String;"/>
-		<method name="toUnicode(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="toUnicode(Ljava/lang/String;I)Ljava/lang/String;"/>
-		<field name="ALLOW_UNASSIGNED"/>
-		<field name="USE_STD3_ASCII_RULES"/>
-	</class>
-	<class name="java/net/Inet4Address" since="1">
-		<extends name="java/net/InetAddress"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/net/Inet6Address" since="1">
-		<extends name="java/net/InetAddress"/>
-		<method name="&lt;init>()V"/>
-		<method name="getByAddress(Ljava/lang/String;[BI)Ljava/net/Inet6Address;"/>
-		<method name="getByAddress(Ljava/lang/String;[BLjava/net/NetworkInterface;)Ljava/net/Inet6Address;"/>
-		<method name="getScopeId()I"/>
-		<method name="getScopedInterface()Ljava/net/NetworkInterface;"/>
-		<method name="isIPv4CompatibleAddress()Z"/>
-	</class>
-	<class name="java/net/InetAddress" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAddress()[B"/>
-		<method name="getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;"/>
-		<method name="getByAddress(Ljava/lang/String;[B)Ljava/net/InetAddress;"/>
-		<method name="getByAddress([B)Ljava/net/InetAddress;"/>
-		<method name="getByName(Ljava/lang/String;)Ljava/net/InetAddress;"/>
-		<method name="getCanonicalHostName()Ljava/lang/String;"/>
-		<method name="getHostAddress()Ljava/lang/String;"/>
-		<method name="getHostName()Ljava/lang/String;"/>
-		<method name="getLocalHost()Ljava/net/InetAddress;"/>
-		<method name="getLoopbackAddress()Ljava/net/InetAddress;" since="19"/>
-		<method name="isAnyLocalAddress()Z"/>
-		<method name="isLinkLocalAddress()Z"/>
-		<method name="isLoopbackAddress()Z"/>
-		<method name="isMCGlobal()Z"/>
-		<method name="isMCLinkLocal()Z"/>
-		<method name="isMCNodeLocal()Z"/>
-		<method name="isMCOrgLocal()Z"/>
-		<method name="isMCSiteLocal()Z"/>
-		<method name="isMulticastAddress()Z"/>
-		<method name="isReachable(I)Z"/>
-		<method name="isReachable(Ljava/net/NetworkInterface;II)Z"/>
-		<method name="isSiteLocalAddress()Z"/>
-	</class>
-	<class name="java/net/InetSocketAddress" since="1">
-		<extends name="java/net/SocketAddress"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
-		<method name="createUnresolved(Ljava/lang/String;I)Ljava/net/InetSocketAddress;"/>
-		<method name="getAddress()Ljava/net/InetAddress;"/>
-		<method name="getHostName()Ljava/lang/String;"/>
-		<method name="getHostString()Ljava/lang/String;" since="19"/>
-		<method name="getPort()I"/>
-		<method name="isUnresolved()Z"/>
-	</class>
-	<class name="java/net/InterfaceAddress" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAddress()Ljava/net/InetAddress;"/>
-		<method name="getBroadcast()Ljava/net/InetAddress;"/>
-		<method name="getNetworkPrefixLength()S"/>
-	</class>
-	<class name="java/net/JarURLConnection" since="1">
-		<extends name="java/net/URLConnection"/>
-		<method name="&lt;init>(Ljava/net/URL;)V"/>
-		<method name="getAttributes()Ljava/util/jar/Attributes;"/>
-		<method name="getCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getEntryName()Ljava/lang/String;"/>
-		<method name="getJarEntry()Ljava/util/jar/JarEntry;"/>
-		<method name="getJarFile()Ljava/util/jar/JarFile;"/>
-		<method name="getJarFileURL()Ljava/net/URL;"/>
-		<method name="getMainAttributes()Ljava/util/jar/Attributes;"/>
-		<method name="getManifest()Ljava/util/jar/Manifest;"/>
-		<field name="jarFileURLConnection"/>
-	</class>
-	<class name="java/net/MalformedURLException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/MulticastSocket" since="1">
-		<extends name="java/net/DatagramSocket"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/net/SocketAddress;)V"/>
-		<method name="getInterface()Ljava/net/InetAddress;"/>
-		<method name="getLoopbackMode()Z"/>
-		<method name="getNetworkInterface()Ljava/net/NetworkInterface;"/>
-		<method name="getTTL()B" deprecated="16"/>
-		<method name="getTimeToLive()I"/>
-		<method name="joinGroup(Ljava/net/InetAddress;)V"/>
-		<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
-		<method name="leaveGroup(Ljava/net/InetAddress;)V"/>
-		<method name="leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
-		<method name="send(Ljava/net/DatagramPacket;B)V" deprecated="16"/>
-		<method name="setInterface(Ljava/net/InetAddress;)V"/>
-		<method name="setLoopbackMode(Z)V"/>
-		<method name="setNetworkInterface(Ljava/net/NetworkInterface;)V"/>
-		<method name="setTTL(B)V" deprecated="16"/>
-		<method name="setTimeToLive(I)V"/>
-	</class>
-	<class name="java/net/NetPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/NetworkInterface" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getByIndex(I)Ljava/net/NetworkInterface;" since="19"/>
-		<method name="getByInetAddress(Ljava/net/InetAddress;)Ljava/net/NetworkInterface;"/>
-		<method name="getByName(Ljava/lang/String;)Ljava/net/NetworkInterface;"/>
-		<method name="getDisplayName()Ljava/lang/String;"/>
-		<method name="getHardwareAddress()[B" since="9"/>
-		<method name="getIndex()I" since="19"/>
-		<method name="getInetAddresses()Ljava/util/Enumeration;"/>
-		<method name="getInterfaceAddresses()Ljava/util/List;" since="9"/>
-		<method name="getMTU()I" since="9"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getNetworkInterfaces()Ljava/util/Enumeration;"/>
-		<method name="getParent()Ljava/net/NetworkInterface;" since="9"/>
-		<method name="getSubInterfaces()Ljava/util/Enumeration;" since="9"/>
-		<method name="isLoopback()Z" since="9"/>
-		<method name="isPointToPoint()Z" since="9"/>
-		<method name="isUp()Z" since="9"/>
-		<method name="isVirtual()Z" since="9"/>
-		<method name="supportsMulticast()Z" since="9"/>
-	</class>
-	<class name="java/net/NoRouteToHostException" since="1">
-		<extends name="java/net/SocketException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/PasswordAuthentication" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;[C)V"/>
-		<method name="getPassword()[C"/>
-		<method name="getUserName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/net/PortUnreachableException" since="1">
-		<extends name="java/net/SocketException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/ProtocolException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/ProtocolFamily" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="name()Ljava/lang/String;"/>
-	</class>
-	<class name="java/net/Proxy" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/net/Proxy$Type;Ljava/net/SocketAddress;)V"/>
-		<method name="address()Ljava/net/SocketAddress;"/>
-		<method name="type()Ljava/net/Proxy$Type;"/>
-		<field name="NO_PROXY"/>
-	</class>
-	<class name="java/net/Proxy$Type" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/net/Proxy$Type;"/>
-		<method name="values()[Ljava/net/Proxy$Type;"/>
-		<field name="DIRECT"/>
-		<field name="HTTP"/>
-		<field name="SOCKS"/>
-	</class>
-	<class name="java/net/ProxySelector" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="connectFailed(Ljava/net/URI;Ljava/net/SocketAddress;Ljava/io/IOException;)V"/>
-		<method name="getDefault()Ljava/net/ProxySelector;"/>
-		<method name="select(Ljava/net/URI;)Ljava/util/List;"/>
-		<method name="setDefault(Ljava/net/ProxySelector;)V"/>
-	</class>
-	<class name="java/net/ResponseCache" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Ljava/net/URI;Ljava/lang/String;Ljava/util/Map;)Ljava/net/CacheResponse;"/>
-		<method name="getDefault()Ljava/net/ResponseCache;"/>
-		<method name="put(Ljava/net/URI;Ljava/net/URLConnection;)Ljava/net/CacheRequest;"/>
-		<method name="setDefault(Ljava/net/ResponseCache;)V"/>
-	</class>
-	<class name="java/net/SecureCacheResponse" since="1">
-		<extends name="java/net/CacheResponse"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCipherSuite()Ljava/lang/String;"/>
-		<method name="getLocalCertificateChain()Ljava/util/List;"/>
-		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
-		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
-		<method name="getServerCertificateChain()Ljava/util/List;"/>
-	</class>
-	<class name="java/net/ServerSocket" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(IILjava/net/InetAddress;)V"/>
-		<method name="&lt;init>(Ljava/net/SocketImpl;)V" removed="2"/>
-		<method name="accept()Ljava/net/Socket;"/>
-		<method name="bind(Ljava/net/SocketAddress;)V"/>
-		<method name="bind(Ljava/net/SocketAddress;I)V"/>
-		<method name="close()V"/>
-		<method name="getChannel()Ljava/nio/channels/ServerSocketChannel;"/>
-		<method name="getInetAddress()Ljava/net/InetAddress;"/>
-		<method name="getLocalPort()I"/>
-		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;"/>
-		<method name="getReceiveBufferSize()I"/>
-		<method name="getReuseAddress()Z"/>
-		<method name="getSoTimeout()I"/>
-		<method name="implAccept(Ljava/net/Socket;)V"/>
-		<method name="isBound()Z"/>
-		<method name="isClosed()Z"/>
-		<method name="setPerformancePreferences(III)V"/>
-		<method name="setReceiveBufferSize(I)V"/>
-		<method name="setReuseAddress(Z)V"/>
-		<method name="setSoTimeout(I)V"/>
-		<method name="setSocketFactory(Ljava/net/SocketImplFactory;)V"/>
-	</class>
-	<class name="java/net/Socket" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/net/InetAddress;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;IZ)V" deprecated="16"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;IZ)V" deprecated="16"/>
-		<method name="&lt;init>(Ljava/net/Proxy;)V"/>
-		<method name="&lt;init>(Ljava/net/SocketImpl;)V"/>
-		<method name="bind(Ljava/net/SocketAddress;)V"/>
-		<method name="close()V"/>
-		<method name="connect(Ljava/net/SocketAddress;)V"/>
-		<method name="connect(Ljava/net/SocketAddress;I)V"/>
-		<method name="getChannel()Ljava/nio/channels/SocketChannel;"/>
-		<method name="getInetAddress()Ljava/net/InetAddress;"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getKeepAlive()Z"/>
-		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
-		<method name="getLocalPort()I"/>
-		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;"/>
-		<method name="getOOBInline()Z"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="getPort()I"/>
-		<method name="getReceiveBufferSize()I"/>
-		<method name="getRemoteSocketAddress()Ljava/net/SocketAddress;"/>
-		<method name="getReuseAddress()Z"/>
-		<method name="getSendBufferSize()I"/>
-		<method name="getSoLinger()I"/>
-		<method name="getSoTimeout()I"/>
-		<method name="getTcpNoDelay()Z"/>
-		<method name="getTrafficClass()I"/>
-		<method name="isBound()Z"/>
-		<method name="isClosed()Z"/>
-		<method name="isConnected()Z"/>
-		<method name="isInputShutdown()Z"/>
-		<method name="isOutputShutdown()Z"/>
-		<method name="sendUrgentData(I)V"/>
-		<method name="setKeepAlive(Z)V"/>
-		<method name="setOOBInline(Z)V"/>
-		<method name="setPerformancePreferences(III)V"/>
-		<method name="setReceiveBufferSize(I)V"/>
-		<method name="setReuseAddress(Z)V"/>
-		<method name="setSendBufferSize(I)V"/>
-		<method name="setSoLinger(ZI)V"/>
-		<method name="setSoTimeout(I)V"/>
-		<method name="setSocketImplFactory(Ljava/net/SocketImplFactory;)V"/>
-		<method name="setTcpNoDelay(Z)V"/>
-		<method name="setTrafficClass(I)V"/>
-		<method name="shutdownInput()V"/>
-		<method name="shutdownOutput()V"/>
-	</class>
-	<class name="java/net/SocketAddress" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/net/SocketException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/SocketImpl" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/net/SocketOptions"/>
-		<method name="&lt;init>()V"/>
-		<method name="accept(Ljava/net/SocketImpl;)V"/>
-		<method name="available()I"/>
-		<method name="bind(Ljava/net/InetAddress;I)V"/>
-		<method name="close()V"/>
-		<method name="connect(Ljava/lang/String;I)V"/>
-		<method name="connect(Ljava/net/InetAddress;I)V"/>
-		<method name="connect(Ljava/net/SocketAddress;I)V"/>
-		<method name="create(Z)V"/>
-		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
-		<method name="getInetAddress()Ljava/net/InetAddress;"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getLocalPort()I"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="getPort()I"/>
-		<method name="listen(I)V"/>
-		<method name="sendUrgentData(I)V"/>
-		<method name="setPerformancePreferences(III)V"/>
-		<method name="shutdownInput()V"/>
-		<method name="shutdownOutput()V"/>
-		<method name="supportsUrgentData()Z"/>
-		<field name="address"/>
-		<field name="fd"/>
-		<field name="localport"/>
-		<field name="port"/>
-	</class>
-	<class name="java/net/SocketImplFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="createSocketImpl()Ljava/net/SocketImpl;"/>
-	</class>
-	<class name="java/net/SocketOption" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="type()Ljava/lang/Class;"/>
-	</class>
-	<class name="java/net/SocketOptions" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getOption(I)Ljava/lang/Object;"/>
-		<method name="setOption(ILjava/lang/Object;)V"/>
-		<field name="IP_MULTICAST_IF"/>
-		<field name="IP_MULTICAST_IF2"/>
-		<field name="IP_MULTICAST_LOOP"/>
-		<field name="IP_TOS"/>
-		<field name="SO_BINDADDR"/>
-		<field name="SO_BROADCAST"/>
-		<field name="SO_KEEPALIVE"/>
-		<field name="SO_LINGER"/>
-		<field name="SO_OOBINLINE"/>
-		<field name="SO_RCVBUF"/>
-		<field name="SO_REUSEADDR"/>
-		<field name="SO_SNDBUF"/>
-		<field name="SO_TIMEOUT"/>
-		<field name="TCP_NODELAY"/>
-	</class>
-	<class name="java/net/SocketPermission" since="1">
-		<extends name="java/security/Permission"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/SocketTimeoutException" since="1">
-		<extends name="java/io/InterruptedIOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/StandardProtocolFamily" since="24">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/net/ProtocolFamily"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/net/StandardProtocolFamily;"/>
-		<method name="values()[Ljava/net/StandardProtocolFamily;"/>
-		<field name="INET"/>
-		<field name="INET6"/>
-	</class>
-	<class name="java/net/StandardSocketOptions" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="IP_MULTICAST_IF"/>
-		<field name="IP_MULTICAST_LOOP"/>
-		<field name="IP_MULTICAST_TTL"/>
-		<field name="IP_TOS"/>
-		<field name="SO_BROADCAST"/>
-		<field name="SO_KEEPALIVE"/>
-		<field name="SO_LINGER"/>
-		<field name="SO_RCVBUF"/>
-		<field name="SO_REUSEADDR"/>
-		<field name="SO_SNDBUF"/>
-		<field name="TCP_NODELAY"/>
-	</class>
-	<class name="java/net/URI" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="compareTo(Ljava/net/URI;)I"/>
-		<method name="create(Ljava/lang/String;)Ljava/net/URI;"/>
-		<method name="getAuthority()Ljava/lang/String;"/>
-		<method name="getFragment()Ljava/lang/String;"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="getQuery()Ljava/lang/String;"/>
-		<method name="getRawAuthority()Ljava/lang/String;"/>
-		<method name="getRawFragment()Ljava/lang/String;"/>
-		<method name="getRawPath()Ljava/lang/String;"/>
-		<method name="getRawQuery()Ljava/lang/String;"/>
-		<method name="getRawSchemeSpecificPart()Ljava/lang/String;"/>
-		<method name="getRawUserInfo()Ljava/lang/String;"/>
-		<method name="getScheme()Ljava/lang/String;"/>
-		<method name="getSchemeSpecificPart()Ljava/lang/String;"/>
-		<method name="getUserInfo()Ljava/lang/String;"/>
-		<method name="isAbsolute()Z"/>
-		<method name="isOpaque()Z"/>
-		<method name="normalize()Ljava/net/URI;"/>
-		<method name="parseServerAuthority()Ljava/net/URI;"/>
-		<method name="relativize(Ljava/net/URI;)Ljava/net/URI;"/>
-		<method name="resolve(Ljava/lang/String;)Ljava/net/URI;"/>
-		<method name="resolve(Ljava/net/URI;)Ljava/net/URI;"/>
-		<method name="toASCIIString()Ljava/lang/String;"/>
-		<method name="toURL()Ljava/net/URL;"/>
-	</class>
-	<class name="java/net/URISyntaxException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="getIndex()I"/>
-		<method name="getInput()Ljava/lang/String;"/>
-		<method name="getReason()Ljava/lang/String;"/>
-	</class>
-	<class name="java/net/URL" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/net/URLStreamHandler;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URL;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V"/>
-		<method name="getAuthority()Ljava/lang/String;"/>
-		<method name="getContent()Ljava/lang/Object;"/>
-		<method name="getContent([Ljava/lang/Class;)Ljava/lang/Object;"/>
-		<method name="getDefaultPort()I"/>
-		<method name="getFile()Ljava/lang/String;"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="getProtocol()Ljava/lang/String;"/>
-		<method name="getQuery()Ljava/lang/String;"/>
-		<method name="getRef()Ljava/lang/String;"/>
-		<method name="getUserInfo()Ljava/lang/String;"/>
-		<method name="openConnection()Ljava/net/URLConnection;"/>
-		<method name="openConnection(Ljava/net/Proxy;)Ljava/net/URLConnection;"/>
-		<method name="openStream()Ljava/io/InputStream;"/>
-		<method name="sameFile(Ljava/net/URL;)Z"/>
-		<method name="set(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" removed="26"/>
-		<method name="set(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" removed="26"/>
-		<method name="setURLStreamHandlerFactory(Ljava/net/URLStreamHandlerFactory;)V"/>
-		<method name="toExternalForm()Ljava/lang/String;"/>
-		<method name="toURI()Ljava/net/URI;"/>
-	</class>
-	<class name="java/net/URLClassLoader" since="1">
-		<extends name="java/security/SecureClassLoader"/>
-		<implements name="java/io/Closeable" since="24"/>
-		<method name="&lt;init>([Ljava/net/URL;)V"/>
-		<method name="&lt;init>([Ljava/net/URL;Ljava/lang/ClassLoader;)V"/>
-		<method name="&lt;init>([Ljava/net/URL;Ljava/lang/ClassLoader;Ljava/net/URLStreamHandlerFactory;)V"/>
-		<method name="addURL(Ljava/net/URL;)V"/>
-		<method name="definePackage(Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package;"/>
-		<method name="getURLs()[Ljava/net/URL;"/>
-		<method name="newInstance([Ljava/net/URL;)Ljava/net/URLClassLoader;"/>
-		<method name="newInstance([Ljava/net/URL;Ljava/lang/ClassLoader;)Ljava/net/URLClassLoader;"/>
-	</class>
-	<class name="java/net/URLConnection" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/net/URL;)V"/>
-		<method name="addRequestProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="connect()V"/>
-		<method name="getAllowUserInteraction()Z"/>
-		<method name="getConnectTimeout()I"/>
-		<method name="getContent()Ljava/lang/Object;"/>
-		<method name="getContent([Ljava/lang/Class;)Ljava/lang/Object;"/>
-		<method name="getContentEncoding()Ljava/lang/String;"/>
-		<method name="getContentLength()I"/>
-		<method name="getContentLengthLong()J" since="24"/>
-		<method name="getContentType()Ljava/lang/String;"/>
-		<method name="getDate()J"/>
-		<method name="getDefaultAllowUserInteraction()Z"/>
-		<method name="getDefaultRequestProperty(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="getDefaultUseCaches()Z"/>
-		<method name="getDoInput()Z"/>
-		<method name="getDoOutput()Z"/>
-		<method name="getExpiration()J"/>
-		<method name="getFileNameMap()Ljava/net/FileNameMap;"/>
-		<method name="getHeaderField(I)Ljava/lang/String;"/>
-		<method name="getHeaderField(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getHeaderFieldDate(Ljava/lang/String;J)J"/>
-		<method name="getHeaderFieldInt(Ljava/lang/String;I)I"/>
-		<method name="getHeaderFieldKey(I)Ljava/lang/String;"/>
-		<method name="getHeaderFieldLong(Ljava/lang/String;J)J" since="24"/>
-		<method name="getHeaderFields()Ljava/util/Map;"/>
-		<method name="getIfModifiedSince()J"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getLastModified()J"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="getPermission()Ljava/security/Permission;"/>
-		<method name="getReadTimeout()I"/>
-		<method name="getRequestProperties()Ljava/util/Map;"/>
-		<method name="getRequestProperty(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getURL()Ljava/net/URL;"/>
-		<method name="getUseCaches()Z"/>
-		<method name="guessContentTypeFromName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="guessContentTypeFromStream(Ljava/io/InputStream;)Ljava/lang/String;"/>
-		<method name="setAllowUserInteraction(Z)V"/>
-		<method name="setConnectTimeout(I)V"/>
-		<method name="setContentHandlerFactory(Ljava/net/ContentHandlerFactory;)V"/>
-		<method name="setDefaultAllowUserInteraction(Z)V"/>
-		<method name="setDefaultRequestProperty(Ljava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
-		<method name="setDefaultUseCaches(Z)V"/>
-		<method name="setDoInput(Z)V"/>
-		<method name="setDoOutput(Z)V"/>
-		<method name="setFileNameMap(Ljava/net/FileNameMap;)V"/>
-		<method name="setIfModifiedSince(J)V"/>
-		<method name="setReadTimeout(I)V"/>
-		<method name="setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setUseCaches(Z)V"/>
-		<field name="allowUserInteraction"/>
-		<field name="connected"/>
-		<field name="doInput"/>
-		<field name="doOutput"/>
-		<field name="ifModifiedSince"/>
-		<field name="url"/>
-		<field name="useCaches"/>
-	</class>
-	<class name="java/net/URLDecoder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="decode(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/net/URLEncoder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="encode(Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/net/URLStreamHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="equals(Ljava/net/URL;Ljava/net/URL;)Z"/>
-		<method name="getDefaultPort()I"/>
-		<method name="getHostAddress(Ljava/net/URL;)Ljava/net/InetAddress;"/>
-		<method name="hashCode(Ljava/net/URL;)I"/>
-		<method name="hostsEqual(Ljava/net/URL;Ljava/net/URL;)Z"/>
-		<method name="openConnection(Ljava/net/URL;)Ljava/net/URLConnection;"/>
-		<method name="openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;"/>
-		<method name="parseURL(Ljava/net/URL;Ljava/lang/String;II)V"/>
-		<method name="sameFile(Ljava/net/URL;Ljava/net/URL;)Z"/>
-		<method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" deprecated="16"/>
-		<method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="toExternalForm(Ljava/net/URL;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/net/URLStreamHandlerFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="createURLStreamHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;"/>
-	</class>
-	<class name="java/net/UnknownHostException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/net/UnknownServiceException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/Buffer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIIII)V" since="29"/>
-		<method name="array()Ljava/lang/Object;" since="9"/>
-		<method name="arrayOffset()I" since="9"/>
-		<method name="capacity()I"/>
-		<method name="clear()Ljava/nio/Buffer;"/>
-		<method name="flip()Ljava/nio/Buffer;"/>
-		<method name="hasArray()Z" since="9"/>
-		<method name="hasRemaining()Z"/>
-		<method name="isDirect()Z" since="9"/>
-		<method name="isReadOnly()Z"/>
-		<method name="limit()I"/>
-		<method name="limit(I)Ljava/nio/Buffer;"/>
-		<method name="mark()Ljava/nio/Buffer;"/>
-		<method name="position()I"/>
-		<method name="position(I)Ljava/nio/Buffer;"/>
-		<method name="remaining()I"/>
-		<method name="reset()Ljava/nio/Buffer;"/>
-		<method name="rewind()Ljava/nio/Buffer;"/>
-	</class>
-	<class name="java/nio/BufferOverflowException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/BufferUnderflowException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/ByteBuffer" since="1">
-		<extends name="java/nio/Buffer"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="allocate(I)Ljava/nio/ByteBuffer;"/>
-		<method name="allocateDirect(I)Ljava/nio/ByteBuffer;"/>
-		<method name="array()[B"/>
-		<method name="arrayOffset()I"/>
-		<method name="asCharBuffer()Ljava/nio/CharBuffer;"/>
-		<method name="asDoubleBuffer()Ljava/nio/DoubleBuffer;"/>
-		<method name="asFloatBuffer()Ljava/nio/FloatBuffer;"/>
-		<method name="asIntBuffer()Ljava/nio/IntBuffer;"/>
-		<method name="asLongBuffer()Ljava/nio/LongBuffer;"/>
-		<method name="asReadOnlyBuffer()Ljava/nio/ByteBuffer;"/>
-		<method name="asShortBuffer()Ljava/nio/ShortBuffer;"/>
-		<method name="compact()Ljava/nio/ByteBuffer;"/>
-		<method name="compareTo(Ljava/nio/ByteBuffer;)I"/>
-		<method name="duplicate()Ljava/nio/ByteBuffer;"/>
-		<method name="get()B"/>
-		<method name="get(I)B"/>
-		<method name="get([B)Ljava/nio/ByteBuffer;"/>
-		<method name="get([BII)Ljava/nio/ByteBuffer;"/>
-		<method name="getChar()C"/>
-		<method name="getChar(I)C"/>
-		<method name="getDouble()D"/>
-		<method name="getDouble(I)D"/>
-		<method name="getFloat()F"/>
-		<method name="getFloat(I)F"/>
-		<method name="getInt()I"/>
-		<method name="getInt(I)I"/>
-		<method name="getLong()J"/>
-		<method name="getLong(I)J"/>
-		<method name="getShort()S"/>
-		<method name="getShort(I)S"/>
-		<method name="hasArray()Z"/>
-		<method name="isDirect()Z"/>
-		<method name="order()Ljava/nio/ByteOrder;"/>
-		<method name="order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;"/>
-		<method name="put(B)Ljava/nio/ByteBuffer;"/>
-		<method name="put(IB)Ljava/nio/ByteBuffer;"/>
-		<method name="put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
-		<method name="put([B)Ljava/nio/ByteBuffer;"/>
-		<method name="put([BII)Ljava/nio/ByteBuffer;"/>
-		<method name="putChar(C)Ljava/nio/ByteBuffer;"/>
-		<method name="putChar(IC)Ljava/nio/ByteBuffer;"/>
-		<method name="putDouble(D)Ljava/nio/ByteBuffer;"/>
-		<method name="putDouble(ID)Ljava/nio/ByteBuffer;"/>
-		<method name="putFloat(F)Ljava/nio/ByteBuffer;"/>
-		<method name="putFloat(IF)Ljava/nio/ByteBuffer;"/>
-		<method name="putInt(I)Ljava/nio/ByteBuffer;"/>
-		<method name="putInt(II)Ljava/nio/ByteBuffer;"/>
-		<method name="putLong(IJ)Ljava/nio/ByteBuffer;"/>
-		<method name="putLong(J)Ljava/nio/ByteBuffer;"/>
-		<method name="putShort(IS)Ljava/nio/ByteBuffer;"/>
-		<method name="putShort(S)Ljava/nio/ByteBuffer;"/>
-		<method name="slice()Ljava/nio/ByteBuffer;"/>
-		<method name="wrap([B)Ljava/nio/ByteBuffer;"/>
-		<method name="wrap([BII)Ljava/nio/ByteBuffer;"/>
-	</class>
-	<class name="java/nio/ByteOrder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="nativeOrder()Ljava/nio/ByteOrder;"/>
-		<field name="BIG_ENDIAN"/>
-		<field name="LITTLE_ENDIAN"/>
-	</class>
-	<class name="java/nio/CharBuffer" since="1">
-		<extends name="java/nio/Buffer"/>
-		<implements name="java/lang/Appendable"/>
-		<implements name="java/lang/CharSequence"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/lang/Readable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="allocate(I)Ljava/nio/CharBuffer;"/>
-		<method name="append(C)Ljava/nio/CharBuffer;"/>
-		<method name="append(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;"/>
-		<method name="append(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;"/>
-		<method name="array()[C"/>
-		<method name="arrayOffset()I"/>
-		<method name="asReadOnlyBuffer()Ljava/nio/CharBuffer;"/>
-		<method name="compact()Ljava/nio/CharBuffer;"/>
-		<method name="compareTo(Ljava/nio/CharBuffer;)I"/>
-		<method name="duplicate()Ljava/nio/CharBuffer;"/>
-		<method name="get()C"/>
-		<method name="get(I)C"/>
-		<method name="get([C)Ljava/nio/CharBuffer;"/>
-		<method name="get([CII)Ljava/nio/CharBuffer;"/>
-		<method name="hasArray()Z"/>
-		<method name="isDirect()Z"/>
-		<method name="order()Ljava/nio/ByteOrder;"/>
-		<method name="put(C)Ljava/nio/CharBuffer;"/>
-		<method name="put(IC)Ljava/nio/CharBuffer;"/>
-		<method name="put(Ljava/lang/String;)Ljava/nio/CharBuffer;"/>
-		<method name="put(Ljava/lang/String;II)Ljava/nio/CharBuffer;"/>
-		<method name="put(Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer;"/>
-		<method name="put([C)Ljava/nio/CharBuffer;"/>
-		<method name="put([CII)Ljava/nio/CharBuffer;"/>
-		<method name="slice()Ljava/nio/CharBuffer;"/>
-		<method name="subSequence(II)Ljava/nio/CharBuffer;" since="19"/>
-		<method name="wrap(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;"/>
-		<method name="wrap(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;"/>
-		<method name="wrap([C)Ljava/nio/CharBuffer;"/>
-		<method name="wrap([CII)Ljava/nio/CharBuffer;"/>
-	</class>
-	<class name="java/nio/DoubleBuffer" since="1">
-		<extends name="java/nio/Buffer"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="allocate(I)Ljava/nio/DoubleBuffer;"/>
-		<method name="array()[D"/>
-		<method name="arrayOffset()I"/>
-		<method name="asReadOnlyBuffer()Ljava/nio/DoubleBuffer;"/>
-		<method name="compact()Ljava/nio/DoubleBuffer;"/>
-		<method name="compareTo(Ljava/nio/DoubleBuffer;)I"/>
-		<method name="duplicate()Ljava/nio/DoubleBuffer;"/>
-		<method name="get()D"/>
-		<method name="get(I)D"/>
-		<method name="get([D)Ljava/nio/DoubleBuffer;"/>
-		<method name="get([DII)Ljava/nio/DoubleBuffer;"/>
-		<method name="hasArray()Z"/>
-		<method name="isDirect()Z"/>
-		<method name="order()Ljava/nio/ByteOrder;"/>
-		<method name="put(D)Ljava/nio/DoubleBuffer;"/>
-		<method name="put(ID)Ljava/nio/DoubleBuffer;"/>
-		<method name="put(Ljava/nio/DoubleBuffer;)Ljava/nio/DoubleBuffer;"/>
-		<method name="put([D)Ljava/nio/DoubleBuffer;"/>
-		<method name="put([DII)Ljava/nio/DoubleBuffer;"/>
-		<method name="slice()Ljava/nio/DoubleBuffer;"/>
-		<method name="wrap([D)Ljava/nio/DoubleBuffer;"/>
-		<method name="wrap([DII)Ljava/nio/DoubleBuffer;"/>
-	</class>
-	<class name="java/nio/FloatBuffer" since="1">
-		<extends name="java/nio/Buffer"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="allocate(I)Ljava/nio/FloatBuffer;"/>
-		<method name="array()[F"/>
-		<method name="arrayOffset()I"/>
-		<method name="asReadOnlyBuffer()Ljava/nio/FloatBuffer;"/>
-		<method name="compact()Ljava/nio/FloatBuffer;"/>
-		<method name="compareTo(Ljava/nio/FloatBuffer;)I"/>
-		<method name="duplicate()Ljava/nio/FloatBuffer;"/>
-		<method name="get()F"/>
-		<method name="get(I)F"/>
-		<method name="get([F)Ljava/nio/FloatBuffer;"/>
-		<method name="get([FII)Ljava/nio/FloatBuffer;"/>
-		<method name="hasArray()Z"/>
-		<method name="isDirect()Z"/>
-		<method name="order()Ljava/nio/ByteOrder;"/>
-		<method name="put(F)Ljava/nio/FloatBuffer;"/>
-		<method name="put(IF)Ljava/nio/FloatBuffer;"/>
-		<method name="put(Ljava/nio/FloatBuffer;)Ljava/nio/FloatBuffer;"/>
-		<method name="put([F)Ljava/nio/FloatBuffer;"/>
-		<method name="put([FII)Ljava/nio/FloatBuffer;"/>
-		<method name="slice()Ljava/nio/FloatBuffer;"/>
-		<method name="wrap([F)Ljava/nio/FloatBuffer;"/>
-		<method name="wrap([FII)Ljava/nio/FloatBuffer;"/>
-	</class>
-	<class name="java/nio/IntBuffer" since="1">
-		<extends name="java/nio/Buffer"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="allocate(I)Ljava/nio/IntBuffer;"/>
-		<method name="array()[I"/>
-		<method name="arrayOffset()I"/>
-		<method name="asReadOnlyBuffer()Ljava/nio/IntBuffer;"/>
-		<method name="compact()Ljava/nio/IntBuffer;"/>
-		<method name="compareTo(Ljava/nio/IntBuffer;)I"/>
-		<method name="duplicate()Ljava/nio/IntBuffer;"/>
-		<method name="get()I"/>
-		<method name="get(I)I"/>
-		<method name="get([I)Ljava/nio/IntBuffer;"/>
-		<method name="get([III)Ljava/nio/IntBuffer;"/>
-		<method name="hasArray()Z"/>
-		<method name="isDirect()Z"/>
-		<method name="order()Ljava/nio/ByteOrder;"/>
-		<method name="put(I)Ljava/nio/IntBuffer;"/>
-		<method name="put(II)Ljava/nio/IntBuffer;"/>
-		<method name="put(Ljava/nio/IntBuffer;)Ljava/nio/IntBuffer;"/>
-		<method name="put([I)Ljava/nio/IntBuffer;"/>
-		<method name="put([III)Ljava/nio/IntBuffer;"/>
-		<method name="slice()Ljava/nio/IntBuffer;"/>
-		<method name="wrap([I)Ljava/nio/IntBuffer;"/>
-		<method name="wrap([III)Ljava/nio/IntBuffer;"/>
-	</class>
-	<class name="java/nio/InvalidMarkException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/LongBuffer" since="1">
-		<extends name="java/nio/Buffer"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="allocate(I)Ljava/nio/LongBuffer;"/>
-		<method name="array()[J"/>
-		<method name="arrayOffset()I"/>
-		<method name="asReadOnlyBuffer()Ljava/nio/LongBuffer;"/>
-		<method name="compact()Ljava/nio/LongBuffer;"/>
-		<method name="compareTo(Ljava/nio/LongBuffer;)I"/>
-		<method name="duplicate()Ljava/nio/LongBuffer;"/>
-		<method name="get()J"/>
-		<method name="get(I)J"/>
-		<method name="get([J)Ljava/nio/LongBuffer;"/>
-		<method name="get([JII)Ljava/nio/LongBuffer;"/>
-		<method name="hasArray()Z"/>
-		<method name="isDirect()Z"/>
-		<method name="order()Ljava/nio/ByteOrder;"/>
-		<method name="put(IJ)Ljava/nio/LongBuffer;"/>
-		<method name="put(J)Ljava/nio/LongBuffer;"/>
-		<method name="put(Ljava/nio/LongBuffer;)Ljava/nio/LongBuffer;"/>
-		<method name="put([J)Ljava/nio/LongBuffer;"/>
-		<method name="put([JII)Ljava/nio/LongBuffer;"/>
-		<method name="slice()Ljava/nio/LongBuffer;"/>
-		<method name="wrap([J)Ljava/nio/LongBuffer;"/>
-		<method name="wrap([JII)Ljava/nio/LongBuffer;"/>
-	</class>
-	<class name="java/nio/MappedByteBuffer" since="1">
-		<extends name="java/nio/ByteBuffer"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="force()Ljava/nio/MappedByteBuffer;"/>
-		<method name="isLoaded()Z"/>
-		<method name="load()Ljava/nio/MappedByteBuffer;"/>
-	</class>
-	<class name="java/nio/ReadOnlyBufferException" since="1">
-		<extends name="java/lang/UnsupportedOperationException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/ShortBuffer" since="1">
-		<extends name="java/nio/Buffer"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="allocate(I)Ljava/nio/ShortBuffer;"/>
-		<method name="array()[S"/>
-		<method name="arrayOffset()I"/>
-		<method name="asReadOnlyBuffer()Ljava/nio/ShortBuffer;"/>
-		<method name="compact()Ljava/nio/ShortBuffer;"/>
-		<method name="compareTo(Ljava/nio/ShortBuffer;)I"/>
-		<method name="duplicate()Ljava/nio/ShortBuffer;"/>
-		<method name="get()S"/>
-		<method name="get(I)S"/>
-		<method name="get([S)Ljava/nio/ShortBuffer;"/>
-		<method name="get([SII)Ljava/nio/ShortBuffer;"/>
-		<method name="hasArray()Z"/>
-		<method name="isDirect()Z"/>
-		<method name="order()Ljava/nio/ByteOrder;"/>
-		<method name="put(IS)Ljava/nio/ShortBuffer;"/>
-		<method name="put(Ljava/nio/ShortBuffer;)Ljava/nio/ShortBuffer;"/>
-		<method name="put(S)Ljava/nio/ShortBuffer;"/>
-		<method name="put([S)Ljava/nio/ShortBuffer;"/>
-		<method name="put([SII)Ljava/nio/ShortBuffer;"/>
-		<method name="slice()Ljava/nio/ShortBuffer;"/>
-		<method name="wrap([S)Ljava/nio/ShortBuffer;"/>
-		<method name="wrap([SII)Ljava/nio/ShortBuffer;"/>
-	</class>
-	<class name="java/nio/channels/AcceptPendingException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/AlreadyBoundException" since="24">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/AlreadyConnectedException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/AsynchronousByteChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/AsynchronousChannel"/>
-		<method name="read(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;"/>
-		<method name="read(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="write(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;"/>
-		<method name="write(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-	</class>
-	<class name="java/nio/channels/AsynchronousChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-	</class>
-	<class name="java/nio/channels/AsynchronousChannelGroup" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V"/>
-		<method name="awaitTermination(JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="isShutdown()Z"/>
-		<method name="isTerminated()Z"/>
-		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
-		<method name="shutdown()V"/>
-		<method name="shutdownNow()V"/>
-		<method name="withCachedThreadPool(Ljava/util/concurrent/ExecutorService;I)Ljava/nio/channels/AsynchronousChannelGroup;"/>
-		<method name="withFixedThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/nio/channels/AsynchronousChannelGroup;"/>
-		<method name="withThreadPool(Ljava/util/concurrent/ExecutorService;)Ljava/nio/channels/AsynchronousChannelGroup;"/>
-	</class>
-	<class name="java/nio/channels/AsynchronousCloseException" since="1">
-		<extends name="java/nio/channels/ClosedChannelException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/AsynchronousFileChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/AsynchronousChannel"/>
-		<method name="&lt;init>()V"/>
-		<method name="force(Z)V"/>
-		<method name="lock()Ljava/util/concurrent/Future;"/>
-		<method name="lock(JJZ)Ljava/util/concurrent/Future;"/>
-		<method name="lock(JJZLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="lock(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="open(Ljava/nio/file/Path;Ljava/util/Set;Ljava/util/concurrent/ExecutorService;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/AsynchronousFileChannel;"/>
-		<method name="open(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/AsynchronousFileChannel;"/>
-		<method name="read(Ljava/nio/ByteBuffer;J)Ljava/util/concurrent/Future;"/>
-		<method name="read(Ljava/nio/ByteBuffer;JLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="size()J"/>
-		<method name="truncate(J)Ljava/nio/channels/AsynchronousFileChannel;"/>
-		<method name="tryLock()Ljava/nio/channels/FileLock;"/>
-		<method name="tryLock(JJZ)Ljava/nio/channels/FileLock;"/>
-		<method name="write(Ljava/nio/ByteBuffer;J)Ljava/util/concurrent/Future;"/>
-		<method name="write(Ljava/nio/ByteBuffer;JLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-	</class>
-	<class name="java/nio/channels/AsynchronousServerSocketChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/AsynchronousChannel"/>
-		<implements name="java/nio/channels/NetworkChannel"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V"/>
-		<method name="accept()Ljava/util/concurrent/Future;"/>
-		<method name="accept(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
-		<method name="bind(Ljava/net/SocketAddress;I)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
-		<method name="open()Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
-		<method name="open(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
-		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
-		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
-	</class>
-	<class name="java/nio/channels/AsynchronousSocketChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/AsynchronousByteChannel"/>
-		<implements name="java/nio/channels/NetworkChannel"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V"/>
-		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
-		<method name="connect(Ljava/net/SocketAddress;)Ljava/util/concurrent/Future;"/>
-		<method name="connect(Ljava/net/SocketAddress;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="getRemoteAddress()Ljava/net/SocketAddress;"/>
-		<method name="open()Ljava/nio/channels/AsynchronousSocketChannel;"/>
-		<method name="open(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
-		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
-		<method name="read(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="read([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
-		<method name="shutdownInput()Ljava/nio/channels/AsynchronousSocketChannel;"/>
-		<method name="shutdownOutput()Ljava/nio/channels/AsynchronousSocketChannel;"/>
-		<method name="write(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-		<method name="write([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
-	</class>
-	<class name="java/nio/channels/ByteChannel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/ReadableByteChannel"/>
-		<implements name="java/nio/channels/WritableByteChannel"/>
-	</class>
-	<class name="java/nio/channels/CancelledKeyException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/Channel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="isOpen()Z"/>
-	</class>
-	<class name="java/nio/channels/Channels" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;"/>
-		<method name="newChannel(Ljava/io/OutputStream;)Ljava/nio/channels/WritableByteChannel;"/>
-		<method name="newInputStream(Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/InputStream;" since="26"/>
-		<method name="newInputStream(Ljava/nio/channels/ReadableByteChannel;)Ljava/io/InputStream;"/>
-		<method name="newOutputStream(Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/OutputStream;" since="26"/>
-		<method name="newOutputStream(Ljava/nio/channels/WritableByteChannel;)Ljava/io/OutputStream;"/>
-		<method name="newReader(Ljava/nio/channels/ReadableByteChannel;Ljava/lang/String;)Ljava/io/Reader;"/>
-		<method name="newReader(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)Ljava/io/Reader;"/>
-		<method name="newWriter(Ljava/nio/channels/WritableByteChannel;Ljava/lang/String;)Ljava/io/Writer;"/>
-		<method name="newWriter(Ljava/nio/channels/WritableByteChannel;Ljava/nio/charset/CharsetEncoder;I)Ljava/io/Writer;"/>
-	</class>
-	<class name="java/nio/channels/ClosedByInterruptException" since="1">
-		<extends name="java/nio/channels/AsynchronousCloseException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/ClosedChannelException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/ClosedSelectorException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/CompletionHandler" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="completed(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="failed(Ljava/lang/Throwable;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/nio/channels/ConnectionPendingException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/DatagramChannel" since="1">
-		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
-		<implements name="java/nio/channels/ByteChannel"/>
-		<implements name="java/nio/channels/GatheringByteChannel"/>
-		<implements name="java/nio/channels/MulticastChannel" since="26"/>
-		<implements name="java/nio/channels/NetworkChannel" since="24" removed="26"/>
-		<implements name="java/nio/channels/ScatteringByteChannel"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
-		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;" since="24"/>
-		<method name="connect(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;"/>
-		<method name="disconnect()Ljava/nio/channels/DatagramChannel;"/>
-		<method name="getRemoteAddress()Ljava/net/SocketAddress;" since="24"/>
-		<method name="isConnected()Z"/>
-		<method name="open()Ljava/nio/channels/DatagramChannel;"/>
-		<method name="open(Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;" since="24"/>
-		<method name="receive(Ljava/nio/ByteBuffer;)Ljava/net/SocketAddress;"/>
-		<method name="send(Ljava/nio/ByteBuffer;Ljava/net/SocketAddress;)I"/>
-		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/DatagramChannel;" since="24"/>
-		<method name="socket()Ljava/net/DatagramSocket;"/>
-	</class>
-	<class name="java/nio/channels/FileChannel" since="1">
-		<extends name="java/nio/channels/spi/AbstractInterruptibleChannel"/>
-		<implements name="java/nio/channels/ByteChannel" removed="24"/>
-		<implements name="java/nio/channels/GatheringByteChannel"/>
-		<implements name="java/nio/channels/ScatteringByteChannel"/>
-		<implements name="java/nio/channels/SeekableByteChannel" since="24"/>
-		<method name="&lt;init>()V"/>
-		<method name="force(Z)V"/>
-		<method name="lock()Ljava/nio/channels/FileLock;"/>
-		<method name="lock(JJZ)Ljava/nio/channels/FileLock;"/>
-		<method name="map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;"/>
-		<method name="open(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;" since="26"/>
-		<method name="open(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/FileChannel;" since="26"/>
-		<method name="position()J"/>
-		<method name="position(J)Ljava/nio/channels/FileChannel;"/>
-		<method name="read(Ljava/nio/ByteBuffer;J)I"/>
-		<method name="size()J"/>
-		<method name="transferFrom(Ljava/nio/channels/ReadableByteChannel;JJ)J"/>
-		<method name="transferTo(JJLjava/nio/channels/WritableByteChannel;)J"/>
-		<method name="truncate(J)Ljava/nio/channels/FileChannel;"/>
-		<method name="tryLock()Ljava/nio/channels/FileLock;"/>
-		<method name="tryLock(JJZ)Ljava/nio/channels/FileLock;"/>
-		<method name="write(Ljava/nio/ByteBuffer;J)I"/>
-	</class>
-	<class name="java/nio/channels/FileChannel$MapMode" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<field name="PRIVATE"/>
-		<field name="READ_ONLY"/>
-		<field name="READ_WRITE"/>
-	</class>
-	<class name="java/nio/channels/FileLock" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<method name="&lt;init>(Ljava/nio/channels/AsynchronousFileChannel;JJZ)V" since="26"/>
-		<method name="&lt;init>(Ljava/nio/channels/FileChannel;JJZ)V"/>
-		<method name="acquiredBy()Ljava/nio/channels/Channel;" since="24"/>
-		<method name="channel()Ljava/nio/channels/FileChannel;"/>
-		<method name="isShared()Z"/>
-		<method name="isValid()Z"/>
-		<method name="overlaps(JJ)Z"/>
-		<method name="position()J"/>
-		<method name="release()V"/>
-		<method name="size()J"/>
-	</class>
-	<class name="java/nio/channels/FileLockInterruptionException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/GatheringByteChannel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/WritableByteChannel"/>
-		<method name="write([Ljava/nio/ByteBuffer;)J"/>
-		<method name="write([Ljava/nio/ByteBuffer;II)J"/>
-	</class>
-	<class name="java/nio/channels/IllegalBlockingModeException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/IllegalChannelGroupException" since="26">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/IllegalSelectorException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/InterruptedByTimeoutException" since="26">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/InterruptibleChannel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-	</class>
-	<class name="java/nio/channels/MembershipKey" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="block(Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;"/>
-		<method name="channel()Ljava/nio/channels/MulticastChannel;"/>
-		<method name="drop()V"/>
-		<method name="group()Ljava/net/InetAddress;"/>
-		<method name="isValid()Z"/>
-		<method name="networkInterface()Ljava/net/NetworkInterface;"/>
-		<method name="sourceAddress()Ljava/net/InetAddress;"/>
-		<method name="unblock(Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;"/>
-	</class>
-	<class name="java/nio/channels/MulticastChannel" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/NetworkChannel"/>
-		<method name="join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)Ljava/nio/channels/MembershipKey;"/>
-		<method name="join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;"/>
-	</class>
-	<class name="java/nio/channels/NetworkChannel" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/NetworkChannel;"/>
-		<method name="getLocalAddress()Ljava/net/SocketAddress;"/>
-		<method name="getOption(Ljava/net/SocketOption;)Ljava/lang/Object;"/>
-		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/NetworkChannel;"/>
-		<method name="supportedOptions()Ljava/util/Set;"/>
-	</class>
-	<class name="java/nio/channels/NoConnectionPendingException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/NonReadableChannelException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/NonWritableChannelException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/NotYetBoundException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/NotYetConnectedException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/OverlappingFileLockException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/Pipe" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="open()Ljava/nio/channels/Pipe;"/>
-		<method name="sink()Ljava/nio/channels/Pipe$SinkChannel;"/>
-		<method name="source()Ljava/nio/channels/Pipe$SourceChannel;"/>
-	</class>
-	<class name="java/nio/channels/Pipe$SinkChannel" since="1">
-		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
-		<implements name="java/nio/channels/GatheringByteChannel"/>
-		<implements name="java/nio/channels/WritableByteChannel"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
-	</class>
-	<class name="java/nio/channels/Pipe$SourceChannel" since="1">
-		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
-		<implements name="java/nio/channels/ReadableByteChannel"/>
-		<implements name="java/nio/channels/ScatteringByteChannel"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
-	</class>
-	<class name="java/nio/channels/ReadPendingException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/ReadableByteChannel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-		<method name="read(Ljava/nio/ByteBuffer;)I"/>
-	</class>
-	<class name="java/nio/channels/ScatteringByteChannel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/ReadableByteChannel"/>
-		<method name="read([Ljava/nio/ByteBuffer;)J"/>
-		<method name="read([Ljava/nio/ByteBuffer;II)J"/>
-	</class>
-	<class name="java/nio/channels/SeekableByteChannel" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/ByteChannel"/>
-		<method name="position()J"/>
-		<method name="position(J)Ljava/nio/channels/SeekableByteChannel;"/>
-		<method name="size()J"/>
-		<method name="truncate(J)Ljava/nio/channels/SeekableByteChannel;"/>
-	</class>
-	<class name="java/nio/channels/SelectableChannel" since="1">
-		<extends name="java/nio/channels/spi/AbstractInterruptibleChannel"/>
-		<method name="&lt;init>()V"/>
-		<method name="blockingLock()Ljava/lang/Object;"/>
-		<method name="configureBlocking(Z)Ljava/nio/channels/SelectableChannel;"/>
-		<method name="isBlocking()Z"/>
-		<method name="isRegistered()Z"/>
-		<method name="keyFor(Ljava/nio/channels/Selector;)Ljava/nio/channels/SelectionKey;"/>
-		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;"/>
-		<method name="register(Ljava/nio/channels/Selector;I)Ljava/nio/channels/SelectionKey;"/>
-		<method name="register(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;"/>
-		<method name="validOps()I"/>
-	</class>
-	<class name="java/nio/channels/SelectionKey" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="attach(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="attachment()Ljava/lang/Object;"/>
-		<method name="cancel()V"/>
-		<method name="channel()Ljava/nio/channels/SelectableChannel;"/>
-		<method name="interestOps()I"/>
-		<method name="interestOps(I)Ljava/nio/channels/SelectionKey;"/>
-		<method name="isAcceptable()Z"/>
-		<method name="isConnectable()Z"/>
-		<method name="isReadable()Z"/>
-		<method name="isValid()Z"/>
-		<method name="isWritable()Z"/>
-		<method name="readyOps()I"/>
-		<method name="selector()Ljava/nio/channels/Selector;"/>
-		<field name="OP_ACCEPT"/>
-		<field name="OP_CONNECT"/>
-		<field name="OP_READ"/>
-		<field name="OP_WRITE"/>
-	</class>
-	<class name="java/nio/channels/Selector" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="19"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="isOpen()Z"/>
-		<method name="keys()Ljava/util/Set;"/>
-		<method name="open()Ljava/nio/channels/Selector;"/>
-		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;"/>
-		<method name="select()I"/>
-		<method name="select(J)I"/>
-		<method name="selectNow()I"/>
-		<method name="selectedKeys()Ljava/util/Set;"/>
-		<method name="wakeup()Ljava/nio/channels/Selector;"/>
-	</class>
-	<class name="java/nio/channels/ServerSocketChannel" since="1">
-		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
-		<implements name="java/nio/channels/NetworkChannel" since="24"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
-		<method name="accept()Ljava/nio/channels/SocketChannel;"/>
-		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/ServerSocketChannel;" since="24"/>
-		<method name="bind(Ljava/net/SocketAddress;I)Ljava/nio/channels/ServerSocketChannel;" since="24"/>
-		<method name="open()Ljava/nio/channels/ServerSocketChannel;"/>
-		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/ServerSocketChannel;" since="24"/>
-		<method name="socket()Ljava/net/ServerSocket;"/>
-	</class>
-	<class name="java/nio/channels/ShutdownChannelGroupException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/SocketChannel" since="1">
-		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
-		<implements name="java/nio/channels/ByteChannel"/>
-		<implements name="java/nio/channels/GatheringByteChannel"/>
-		<implements name="java/nio/channels/NetworkChannel" since="24"/>
-		<implements name="java/nio/channels/ScatteringByteChannel"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
-		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;" since="24"/>
-		<method name="connect(Ljava/net/SocketAddress;)Z"/>
-		<method name="finishConnect()Z"/>
-		<method name="getRemoteAddress()Ljava/net/SocketAddress;" since="24"/>
-		<method name="isConnected()Z"/>
-		<method name="isConnectionPending()Z"/>
-		<method name="open()Ljava/nio/channels/SocketChannel;"/>
-		<method name="open(Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;"/>
-		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/SocketChannel;" since="24"/>
-		<method name="shutdownInput()Ljava/nio/channels/SocketChannel;" since="24"/>
-		<method name="shutdownOutput()Ljava/nio/channels/SocketChannel;" since="24"/>
-		<method name="socket()Ljava/net/Socket;"/>
-	</class>
-	<class name="java/nio/channels/UnresolvedAddressException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/UnsupportedAddressTypeException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/WritableByteChannel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-		<method name="write(Ljava/nio/ByteBuffer;)I"/>
-	</class>
-	<class name="java/nio/channels/WritePendingException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/spi/AbstractInterruptibleChannel" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/channels/Channel"/>
-		<implements name="java/nio/channels/InterruptibleChannel"/>
-		<method name="&lt;init>()V"/>
-		<method name="begin()V"/>
-		<method name="end(Z)V"/>
-		<method name="implCloseChannel()V"/>
-	</class>
-	<class name="java/nio/channels/spi/AbstractSelectableChannel" since="1">
-		<extends name="java/nio/channels/SelectableChannel"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
-		<method name="implCloseSelectableChannel()V"/>
-		<method name="implConfigureBlocking(Z)V"/>
-	</class>
-	<class name="java/nio/channels/spi/AbstractSelectionKey" since="1">
-		<extends name="java/nio/channels/SelectionKey"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/channels/spi/AbstractSelector" since="1">
-		<extends name="java/nio/channels/Selector"/>
-		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
-		<method name="begin()V"/>
-		<method name="cancelledKeys()Ljava/util/Set;"/>
-		<method name="deregister(Ljava/nio/channels/spi/AbstractSelectionKey;)V"/>
-		<method name="end()V"/>
-		<method name="implCloseSelector()V"/>
-		<method name="register(Ljava/nio/channels/spi/AbstractSelectableChannel;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;"/>
-	</class>
-	<class name="java/nio/channels/spi/AsynchronousChannelProvider" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="openAsynchronousChannelGroup(ILjava/util/concurrent/ThreadFactory;)Ljava/nio/channels/AsynchronousChannelGroup;"/>
-		<method name="openAsynchronousChannelGroup(Ljava/util/concurrent/ExecutorService;I)Ljava/nio/channels/AsynchronousChannelGroup;"/>
-		<method name="openAsynchronousServerSocketChannel(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
-		<method name="openAsynchronousSocketChannel(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
-		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
-	</class>
-	<class name="java/nio/channels/spi/SelectorProvider" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="inheritedChannel()Ljava/nio/channels/Channel;"/>
-		<method name="openDatagramChannel()Ljava/nio/channels/DatagramChannel;"/>
-		<method name="openDatagramChannel(Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;" since="24"/>
-		<method name="openPipe()Ljava/nio/channels/Pipe;"/>
-		<method name="openSelector()Ljava/nio/channels/spi/AbstractSelector;"/>
-		<method name="openServerSocketChannel()Ljava/nio/channels/ServerSocketChannel;"/>
-		<method name="openSocketChannel()Ljava/nio/channels/SocketChannel;"/>
-		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;"/>
-	</class>
-	<class name="java/nio/charset/CharacterCodingException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/charset/Charset" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(Ljava/lang/String;[Ljava/lang/String;)V"/>
-		<method name="aliases()Ljava/util/Set;"/>
-		<method name="availableCharsets()Ljava/util/SortedMap;"/>
-		<method name="canEncode()Z"/>
-		<method name="compareTo(Ljava/nio/charset/Charset;)I"/>
-		<method name="contains(Ljava/nio/charset/Charset;)Z"/>
-		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;"/>
-		<method name="defaultCharset()Ljava/nio/charset/Charset;"/>
-		<method name="displayName()Ljava/lang/String;"/>
-		<method name="displayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="encode(Ljava/lang/String;)Ljava/nio/ByteBuffer;"/>
-		<method name="encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;"/>
-		<method name="forName(Ljava/lang/String;)Ljava/nio/charset/Charset;"/>
-		<method name="isRegistered()Z"/>
-		<method name="isSupported(Ljava/lang/String;)Z"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="newDecoder()Ljava/nio/charset/CharsetDecoder;"/>
-		<method name="newEncoder()Ljava/nio/charset/CharsetEncoder;"/>
-	</class>
-	<class name="java/nio/charset/CharsetDecoder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/nio/charset/Charset;FF)V"/>
-		<method name="averageCharsPerByte()F"/>
-		<method name="charset()Ljava/nio/charset/Charset;"/>
-		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;"/>
-		<method name="decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;"/>
-		<method name="decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;"/>
-		<method name="detectedCharset()Ljava/nio/charset/Charset;"/>
-		<method name="flush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;"/>
-		<method name="implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;"/>
-		<method name="implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V"/>
-		<method name="implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V"/>
-		<method name="implReplaceWith(Ljava/lang/String;)V"/>
-		<method name="implReset()V"/>
-		<method name="isAutoDetecting()Z"/>
-		<method name="isCharsetDetected()Z"/>
-		<method name="malformedInputAction()Ljava/nio/charset/CodingErrorAction;"/>
-		<method name="maxCharsPerByte()F"/>
-		<method name="onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;"/>
-		<method name="onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;"/>
-		<method name="replaceWith(Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder;"/>
-		<method name="replacement()Ljava/lang/String;"/>
-		<method name="reset()Ljava/nio/charset/CharsetDecoder;"/>
-		<method name="unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;"/>
-	</class>
-	<class name="java/nio/charset/CharsetEncoder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/nio/charset/Charset;FF)V"/>
-		<method name="&lt;init>(Ljava/nio/charset/Charset;FF[B)V"/>
-		<method name="averageBytesPerChar()F"/>
-		<method name="canEncode(C)Z"/>
-		<method name="canEncode(Ljava/lang/CharSequence;)Z"/>
-		<method name="charset()Ljava/nio/charset/Charset;"/>
-		<method name="encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;"/>
-		<method name="encode(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult;"/>
-		<method name="encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;"/>
-		<method name="flush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;"/>
-		<method name="implFlush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;"/>
-		<method name="implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V"/>
-		<method name="implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V"/>
-		<method name="implReplaceWith([B)V"/>
-		<method name="implReset()V"/>
-		<method name="isLegalReplacement([B)Z"/>
-		<method name="malformedInputAction()Ljava/nio/charset/CodingErrorAction;"/>
-		<method name="maxBytesPerChar()F"/>
-		<method name="onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;"/>
-		<method name="onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;"/>
-		<method name="replaceWith([B)Ljava/nio/charset/CharsetEncoder;"/>
-		<method name="replacement()[B"/>
-		<method name="reset()Ljava/nio/charset/CharsetEncoder;"/>
-		<method name="unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;"/>
-	</class>
-	<class name="java/nio/charset/CoderMalfunctionError" since="1">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-	</class>
-	<class name="java/nio/charset/CoderResult" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(II)V" since="29"/>
-		<method name="isError()Z"/>
-		<method name="isMalformed()Z"/>
-		<method name="isOverflow()Z"/>
-		<method name="isUnderflow()Z"/>
-		<method name="isUnmappable()Z"/>
-		<method name="length()I"/>
-		<method name="malformedForLength(I)Ljava/nio/charset/CoderResult;"/>
-		<method name="throwException()V"/>
-		<method name="unmappableForLength(I)Ljava/nio/charset/CoderResult;"/>
-		<field name="OVERFLOW"/>
-		<field name="UNDERFLOW"/>
-	</class>
-	<class name="java/nio/charset/CodingErrorAction" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<field name="IGNORE"/>
-		<field name="REPLACE"/>
-		<field name="REPORT"/>
-	</class>
-	<class name="java/nio/charset/IllegalCharsetNameException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getCharsetName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/charset/MalformedInputException" since="1">
-		<extends name="java/nio/charset/CharacterCodingException"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getInputLength()I"/>
-	</class>
-	<class name="java/nio/charset/StandardCharsets" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ISO_8859_1"/>
-		<field name="US_ASCII"/>
-		<field name="UTF_16"/>
-		<field name="UTF_16BE"/>
-		<field name="UTF_16LE"/>
-		<field name="UTF_8"/>
-	</class>
-	<class name="java/nio/charset/UnmappableCharacterException" since="1">
-		<extends name="java/nio/charset/CharacterCodingException"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getInputLength()I"/>
-	</class>
-	<class name="java/nio/charset/UnsupportedCharsetException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getCharsetName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/charset/spi/CharsetProvider" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="charsetForName(Ljava/lang/String;)Ljava/nio/charset/Charset;"/>
-		<method name="charsets()Ljava/util/Iterator;"/>
-	</class>
-	<class name="java/nio/file/AccessDeniedException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/AccessMode" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/AccessMode;"/>
-		<method name="values()[Ljava/nio/file/AccessMode;"/>
-		<field name="EXECUTE"/>
-		<field name="READ"/>
-		<field name="WRITE"/>
-	</class>
-	<class name="java/nio/file/AtomicMoveNotSupportedException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/ClosedDirectoryStreamException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/file/ClosedFileSystemException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/file/ClosedWatchServiceException" since="26">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/file/CopyOption" since="26">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/nio/file/DirectoryIteratorException" since="26">
-		<extends name="java/util/ConcurrentModificationException"/>
-		<method name="&lt;init>(Ljava/io/IOException;)V"/>
-		<method name="getCause()Ljava/io/IOException;"/>
-	</class>
-	<class name="java/nio/file/DirectoryNotEmptyException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/DirectoryStream" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<implements name="java/lang/Iterable"/>
-	</class>
-	<class name="java/nio/file/DirectoryStream$Filter" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/nio/file/FileAlreadyExistsException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/FileStore" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getFileStoreAttributeView(Ljava/lang/Class;)Ljava/nio/file/attribute/FileStoreAttributeView;"/>
-		<method name="getTotalSpace()J"/>
-		<method name="getUnallocatedSpace()J"/>
-		<method name="getUsableSpace()J"/>
-		<method name="isReadOnly()Z"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="supportsFileAttributeView(Ljava/lang/Class;)Z"/>
-		<method name="supportsFileAttributeView(Ljava/lang/String;)Z"/>
-		<method name="type()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/file/FileSystem" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFileStores()Ljava/lang/Iterable;"/>
-		<method name="getPath(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;"/>
-		<method name="getPathMatcher(Ljava/lang/String;)Ljava/nio/file/PathMatcher;"/>
-		<method name="getRootDirectories()Ljava/lang/Iterable;"/>
-		<method name="getSeparator()Ljava/lang/String;"/>
-		<method name="getUserPrincipalLookupService()Ljava/nio/file/attribute/UserPrincipalLookupService;"/>
-		<method name="isOpen()Z"/>
-		<method name="isReadOnly()Z"/>
-		<method name="newWatchService()Ljava/nio/file/WatchService;"/>
-		<method name="provider()Ljava/nio/file/spi/FileSystemProvider;"/>
-		<method name="supportedFileAttributeViews()Ljava/util/Set;"/>
-	</class>
-	<class name="java/nio/file/FileSystemAlreadyExistsException" since="26">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/FileSystemException" since="26">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getFile()Ljava/lang/String;"/>
-		<method name="getOtherFile()Ljava/lang/String;"/>
-		<method name="getReason()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/file/FileSystemLoopException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/FileSystemNotFoundException" since="26">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/FileSystems" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefault()Ljava/nio/file/FileSystem;"/>
-		<method name="getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;"/>
-		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;"/>
-		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem;"/>
-		<method name="newFileSystem(Ljava/nio/file/Path;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem;"/>
-	</class>
-	<class name="java/nio/file/FileVisitOption" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/FileVisitOption;"/>
-		<method name="values()[Ljava/nio/file/FileVisitOption;"/>
-		<field name="FOLLOW_LINKS"/>
-	</class>
-	<class name="java/nio/file/FileVisitResult" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/FileVisitResult;"/>
-		<method name="values()[Ljava/nio/file/FileVisitResult;"/>
-		<field name="CONTINUE"/>
-		<field name="SKIP_SIBLINGS"/>
-		<field name="SKIP_SUBTREE"/>
-		<field name="TERMINATE"/>
-	</class>
-	<class name="java/nio/file/FileVisitor" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="postVisitDirectory(Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult;"/>
-		<method name="preVisitDirectory(Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult;"/>
-		<method name="visitFile(Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult;"/>
-		<method name="visitFileFailed(Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult;"/>
-	</class>
-	<class name="java/nio/file/Files" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="copy(Ljava/io/InputStream;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)J"/>
-		<method name="copy(Ljava/nio/file/Path;Ljava/io/OutputStream;)J"/>
-		<method name="copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;"/>
-		<method name="createDirectories(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="createDirectory(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="createFile(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
-		<method name="createSymbolicLink(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="createTempDirectory(Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="createTempDirectory(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="createTempFile(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
-		<method name="delete(Ljava/nio/file/Path;)V"/>
-		<method name="deleteIfExists(Ljava/nio/file/Path;)Z"/>
-		<method name="exists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
-		<method name="find(Ljava/nio/file/Path;ILjava/util/function/BiPredicate;[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;"/>
-		<method name="getAttribute(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/lang/Object;"/>
-		<method name="getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;"/>
-		<method name="getFileStore(Ljava/nio/file/Path;)Ljava/nio/file/FileStore;"/>
-		<method name="getLastModifiedTime(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileTime;"/>
-		<method name="getOwner(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/UserPrincipal;"/>
-		<method name="getPosixFilePermissions(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/util/Set;"/>
-		<method name="isDirectory(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
-		<method name="isExecutable(Ljava/nio/file/Path;)Z"/>
-		<method name="isHidden(Ljava/nio/file/Path;)Z"/>
-		<method name="isReadable(Ljava/nio/file/Path;)Z"/>
-		<method name="isRegularFile(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
-		<method name="isSameFile(Ljava/nio/file/Path;Ljava/nio/file/Path;)Z"/>
-		<method name="isSymbolicLink(Ljava/nio/file/Path;)Z"/>
-		<method name="isWritable(Ljava/nio/file/Path;)Z"/>
-		<method name="lines(Ljava/nio/file/Path;)Ljava/util/stream/Stream;"/>
-		<method name="lines(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/stream/Stream;"/>
-		<method name="list(Ljava/nio/file/Path;)Ljava/util/stream/Stream;"/>
-		<method name="move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;"/>
-		<method name="newBufferedReader(Ljava/nio/file/Path;)Ljava/io/BufferedReader;"/>
-		<method name="newBufferedReader(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/io/BufferedReader;"/>
-		<method name="newBufferedWriter(Ljava/nio/file/Path;Ljava/nio/charset/Charset;[Ljava/nio/file/OpenOption;)Ljava/io/BufferedWriter;"/>
-		<method name="newBufferedWriter(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/BufferedWriter;"/>
-		<method name="newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;"/>
-		<method name="newByteChannel(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/SeekableByteChannel;"/>
-		<method name="newDirectoryStream(Ljava/nio/file/Path;)Ljava/nio/file/DirectoryStream;"/>
-		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/lang/String;)Ljava/nio/file/DirectoryStream;"/>
-		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;"/>
-		<method name="newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;"/>
-		<method name="newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;"/>
-		<method name="notExists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
-		<method name="probeContentType(Ljava/nio/file/Path;)Ljava/lang/String;"/>
-		<method name="readAllBytes(Ljava/nio/file/Path;)[B"/>
-		<method name="readAllLines(Ljava/nio/file/Path;)Ljava/util/List;"/>
-		<method name="readAllLines(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/List;"/>
-		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;"/>
-		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/util/Map;"/>
-		<method name="readSymbolicLink(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
-		<method name="setAttribute(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/Object;[Ljava/nio/file/LinkOption;)Ljava/nio/file/Path;"/>
-		<method name="setLastModifiedTime(Ljava/nio/file/Path;Ljava/nio/file/attribute/FileTime;)Ljava/nio/file/Path;"/>
-		<method name="setOwner(Ljava/nio/file/Path;Ljava/nio/file/attribute/UserPrincipal;)Ljava/nio/file/Path;"/>
-		<method name="setPosixFilePermissions(Ljava/nio/file/Path;Ljava/util/Set;)Ljava/nio/file/Path;"/>
-		<method name="size(Ljava/nio/file/Path;)J"/>
-		<method name="walk(Ljava/nio/file/Path;I[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;"/>
-		<method name="walk(Ljava/nio/file/Path;[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;"/>
-		<method name="walkFileTree(Ljava/nio/file/Path;Ljava/nio/file/FileVisitor;)Ljava/nio/file/Path;"/>
-		<method name="walkFileTree(Ljava/nio/file/Path;Ljava/util/Set;ILjava/nio/file/FileVisitor;)Ljava/nio/file/Path;"/>
-		<method name="write(Ljava/nio/file/Path;Ljava/lang/Iterable;Ljava/nio/charset/Charset;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;"/>
-		<method name="write(Ljava/nio/file/Path;Ljava/lang/Iterable;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;"/>
-		<method name="write(Ljava/nio/file/Path;[B[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;"/>
-	</class>
-	<class name="java/nio/file/InvalidPathException" since="26">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="getIndex()I"/>
-		<method name="getInput()Ljava/lang/String;"/>
-		<method name="getReason()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/file/LinkOption" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/nio/file/CopyOption"/>
-		<implements name="java/nio/file/OpenOption"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/LinkOption;"/>
-		<method name="values()[Ljava/nio/file/LinkOption;"/>
-		<field name="NOFOLLOW_LINKS"/>
-	</class>
-	<class name="java/nio/file/LinkPermission" since="26">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/NoSuchFileException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/NotDirectoryException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/NotLinkException" since="26">
-		<extends name="java/nio/file/FileSystemException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/OpenOption" since="26">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/nio/file/Path" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/lang/Iterable"/>
-		<implements name="java/nio/file/Watchable"/>
-		<method name="compareTo(Ljava/nio/file/Path;)I"/>
-		<method name="endsWith(Ljava/lang/String;)Z"/>
-		<method name="endsWith(Ljava/nio/file/Path;)Z"/>
-		<method name="getFileName()Ljava/nio/file/Path;"/>
-		<method name="getFileSystem()Ljava/nio/file/FileSystem;"/>
-		<method name="getName(I)Ljava/nio/file/Path;"/>
-		<method name="getNameCount()I"/>
-		<method name="getParent()Ljava/nio/file/Path;"/>
-		<method name="getRoot()Ljava/nio/file/Path;"/>
-		<method name="isAbsolute()Z"/>
-		<method name="normalize()Ljava/nio/file/Path;"/>
-		<method name="relativize(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
-		<method name="resolve(Ljava/lang/String;)Ljava/nio/file/Path;"/>
-		<method name="resolve(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
-		<method name="resolveSibling(Ljava/lang/String;)Ljava/nio/file/Path;"/>
-		<method name="resolveSibling(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
-		<method name="startsWith(Ljava/lang/String;)Z"/>
-		<method name="startsWith(Ljava/nio/file/Path;)Z"/>
-		<method name="subpath(II)Ljava/nio/file/Path;"/>
-		<method name="toAbsolutePath()Ljava/nio/file/Path;"/>
-		<method name="toFile()Ljava/io/File;"/>
-		<method name="toRealPath([Ljava/nio/file/LinkOption;)Ljava/nio/file/Path;"/>
-		<method name="toUri()Ljava/net/URI;"/>
-	</class>
-	<class name="java/nio/file/PathMatcher" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="matches(Ljava/nio/file/Path;)Z"/>
-	</class>
-	<class name="java/nio/file/Paths" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;"/>
-		<method name="get(Ljava/net/URI;)Ljava/nio/file/Path;"/>
-	</class>
-	<class name="java/nio/file/ProviderMismatchException" since="26">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/ProviderNotFoundException" since="26">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/nio/file/ReadOnlyFileSystemException" since="26">
-		<extends name="java/lang/UnsupportedOperationException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/file/SecureDirectoryStream" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/DirectoryStream"/>
-		<method name="deleteDirectory(Ljava/lang/Object;)V"/>
-		<method name="deleteFile(Ljava/lang/Object;)V"/>
-		<method name="getFileAttributeView(Ljava/lang/Class;)Ljava/nio/file/attribute/FileAttributeView;"/>
-		<method name="getFileAttributeView(Ljava/lang/Object;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;"/>
-		<method name="move(Ljava/lang/Object;Ljava/nio/file/SecureDirectoryStream;Ljava/lang/Object;)V"/>
-		<method name="newByteChannel(Ljava/lang/Object;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;"/>
-		<method name="newDirectoryStream(Ljava/lang/Object;[Ljava/nio/file/LinkOption;)Ljava/nio/file/SecureDirectoryStream;"/>
-	</class>
-	<class name="java/nio/file/SimpleFileVisitor" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/FileVisitor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/nio/file/StandardCopyOption" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/nio/file/CopyOption"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/StandardCopyOption;"/>
-		<method name="values()[Ljava/nio/file/StandardCopyOption;"/>
-		<field name="ATOMIC_MOVE"/>
-		<field name="COPY_ATTRIBUTES"/>
-		<field name="REPLACE_EXISTING"/>
-	</class>
-	<class name="java/nio/file/StandardOpenOption" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/nio/file/OpenOption"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/StandardOpenOption;"/>
-		<method name="values()[Ljava/nio/file/StandardOpenOption;"/>
-		<field name="APPEND"/>
-		<field name="CREATE"/>
-		<field name="CREATE_NEW"/>
-		<field name="DELETE_ON_CLOSE"/>
-		<field name="DSYNC"/>
-		<field name="READ"/>
-		<field name="SPARSE"/>
-		<field name="SYNC"/>
-		<field name="TRUNCATE_EXISTING"/>
-		<field name="WRITE"/>
-	</class>
-	<class name="java/nio/file/StandardWatchEventKinds" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ENTRY_CREATE"/>
-		<field name="ENTRY_DELETE"/>
-		<field name="ENTRY_MODIFY"/>
-		<field name="OVERFLOW"/>
-	</class>
-	<class name="java/nio/file/WatchEvent" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="context()Ljava/lang/Object;"/>
-		<method name="count()I"/>
-		<method name="kind()Ljava/nio/file/WatchEvent$Kind;"/>
-	</class>
-	<class name="java/nio/file/WatchEvent$Kind" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="type()Ljava/lang/Class;"/>
-	</class>
-	<class name="java/nio/file/WatchEvent$Modifier" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="name()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/file/WatchKey" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="cancel()V"/>
-		<method name="isValid()Z"/>
-		<method name="pollEvents()Ljava/util/List;"/>
-		<method name="reset()Z"/>
-		<method name="watchable()Ljava/nio/file/Watchable;"/>
-	</class>
-	<class name="java/nio/file/WatchService" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<method name="poll()Ljava/nio/file/WatchKey;"/>
-		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/WatchKey;"/>
-		<method name="take()Ljava/nio/file/WatchKey;"/>
-	</class>
-	<class name="java/nio/file/Watchable" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey;"/>
-		<method name="register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey;"/>
-	</class>
-	<class name="java/nio/file/attribute/AclEntry" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/nio/file/attribute/AclEntryType;Ljava/nio/file/attribute/UserPrincipal;Ljava/util/Set;Ljava/util/Set;)V" since="29"/>
-		<method name="flags()Ljava/util/Set;"/>
-		<method name="newBuilder()Ljava/nio/file/attribute/AclEntry$Builder;"/>
-		<method name="newBuilder(Ljava/nio/file/attribute/AclEntry;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
-		<method name="permissions()Ljava/util/Set;"/>
-		<method name="principal()Ljava/nio/file/attribute/UserPrincipal;"/>
-		<method name="type()Ljava/nio/file/attribute/AclEntryType;"/>
-	</class>
-	<class name="java/nio/file/attribute/AclEntry$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/nio/file/attribute/AclEntryType;Ljava/nio/file/attribute/UserPrincipal;Ljava/util/Set;Ljava/util/Set;)V" since="29"/>
-		<method name="build()Ljava/nio/file/attribute/AclEntry;"/>
-		<method name="setFlags(Ljava/util/Set;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
-		<method name="setFlags([Ljava/nio/file/attribute/AclEntryFlag;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
-		<method name="setPermissions(Ljava/util/Set;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
-		<method name="setPermissions([Ljava/nio/file/attribute/AclEntryPermission;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
-		<method name="setPrincipal(Ljava/nio/file/attribute/UserPrincipal;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
-		<method name="setType(Ljava/nio/file/attribute/AclEntryType;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
-	</class>
-	<class name="java/nio/file/attribute/AclEntryFlag" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryFlag;"/>
-		<method name="values()[Ljava/nio/file/attribute/AclEntryFlag;"/>
-		<field name="DIRECTORY_INHERIT"/>
-		<field name="FILE_INHERIT"/>
-		<field name="INHERIT_ONLY"/>
-		<field name="NO_PROPAGATE_INHERIT"/>
-	</class>
-	<class name="java/nio/file/attribute/AclEntryPermission" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryPermission;"/>
-		<method name="values()[Ljava/nio/file/attribute/AclEntryPermission;"/>
-		<field name="ADD_FILE"/>
-		<field name="ADD_SUBDIRECTORY"/>
-		<field name="APPEND_DATA"/>
-		<field name="DELETE"/>
-		<field name="DELETE_CHILD"/>
-		<field name="EXECUTE"/>
-		<field name="LIST_DIRECTORY"/>
-		<field name="READ_ACL"/>
-		<field name="READ_ATTRIBUTES"/>
-		<field name="READ_DATA"/>
-		<field name="READ_NAMED_ATTRS"/>
-		<field name="SYNCHRONIZE"/>
-		<field name="WRITE_ACL"/>
-		<field name="WRITE_ATTRIBUTES"/>
-		<field name="WRITE_DATA"/>
-		<field name="WRITE_NAMED_ATTRS"/>
-		<field name="WRITE_OWNER"/>
-	</class>
-	<class name="java/nio/file/attribute/AclEntryType" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryType;"/>
-		<method name="values()[Ljava/nio/file/attribute/AclEntryType;"/>
-		<field name="ALARM"/>
-		<field name="ALLOW"/>
-		<field name="AUDIT"/>
-		<field name="DENY"/>
-	</class>
-	<class name="java/nio/file/attribute/AclFileAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/FileOwnerAttributeView"/>
-		<method name="getAcl()Ljava/util/List;"/>
-		<method name="setAcl(Ljava/util/List;)V"/>
-	</class>
-	<class name="java/nio/file/attribute/AttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="name()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/file/attribute/BasicFileAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/FileAttributeView"/>
-		<method name="readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;"/>
-		<method name="setTimes(Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;)V"/>
-	</class>
-	<class name="java/nio/file/attribute/BasicFileAttributes" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="creationTime()Ljava/nio/file/attribute/FileTime;"/>
-		<method name="fileKey()Ljava/lang/Object;"/>
-		<method name="isDirectory()Z"/>
-		<method name="isOther()Z"/>
-		<method name="isRegularFile()Z"/>
-		<method name="isSymbolicLink()Z"/>
-		<method name="lastAccessTime()Ljava/nio/file/attribute/FileTime;"/>
-		<method name="lastModifiedTime()Ljava/nio/file/attribute/FileTime;"/>
-		<method name="size()J"/>
-	</class>
-	<class name="java/nio/file/attribute/DosFileAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/BasicFileAttributeView"/>
-		<method name="readAttributes()Ljava/nio/file/attribute/DosFileAttributes;"/>
-		<method name="setArchive(Z)V"/>
-		<method name="setHidden(Z)V"/>
-		<method name="setReadOnly(Z)V"/>
-		<method name="setSystem(Z)V"/>
-	</class>
-	<class name="java/nio/file/attribute/DosFileAttributes" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/BasicFileAttributes"/>
-		<method name="isArchive()Z"/>
-		<method name="isHidden()Z"/>
-		<method name="isReadOnly()Z"/>
-		<method name="isSystem()Z"/>
-	</class>
-	<class name="java/nio/file/attribute/FileAttribute" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="value()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/nio/file/attribute/FileAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/AttributeView"/>
-	</class>
-	<class name="java/nio/file/attribute/FileOwnerAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/FileAttributeView"/>
-		<method name="getOwner()Ljava/nio/file/attribute/UserPrincipal;"/>
-		<method name="setOwner(Ljava/nio/file/attribute/UserPrincipal;)V"/>
-	</class>
-	<class name="java/nio/file/attribute/FileStoreAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/AttributeView"/>
-	</class>
-	<class name="java/nio/file/attribute/FileTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JLjava/util/concurrent/TimeUnit;Ljava/time/Instant;)V" since="29"/>
-		<method name="compareTo(Ljava/nio/file/attribute/FileTime;)I"/>
-		<method name="from(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/attribute/FileTime;"/>
-		<method name="from(Ljava/time/Instant;)Ljava/nio/file/attribute/FileTime;"/>
-		<method name="fromMillis(J)Ljava/nio/file/attribute/FileTime;"/>
-		<method name="to(Ljava/util/concurrent/TimeUnit;)J"/>
-		<method name="toInstant()Ljava/time/Instant;"/>
-		<method name="toMillis()J"/>
-	</class>
-	<class name="java/nio/file/attribute/GroupPrincipal" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/UserPrincipal"/>
-	</class>
-	<class name="java/nio/file/attribute/PosixFileAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/BasicFileAttributeView"/>
-		<implements name="java/nio/file/attribute/FileOwnerAttributeView"/>
-		<method name="readAttributes()Ljava/nio/file/attribute/PosixFileAttributes;"/>
-		<method name="setGroup(Ljava/nio/file/attribute/GroupPrincipal;)V"/>
-		<method name="setPermissions(Ljava/util/Set;)V"/>
-	</class>
-	<class name="java/nio/file/attribute/PosixFileAttributes" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/BasicFileAttributes"/>
-		<method name="group()Ljava/nio/file/attribute/GroupPrincipal;"/>
-		<method name="owner()Ljava/nio/file/attribute/UserPrincipal;"/>
-		<method name="permissions()Ljava/util/Set;"/>
-	</class>
-	<class name="java/nio/file/attribute/PosixFilePermission" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/PosixFilePermission;"/>
-		<method name="values()[Ljava/nio/file/attribute/PosixFilePermission;"/>
-		<field name="GROUP_EXECUTE"/>
-		<field name="GROUP_READ"/>
-		<field name="GROUP_WRITE"/>
-		<field name="OTHERS_EXECUTE"/>
-		<field name="OTHERS_READ"/>
-		<field name="OTHERS_WRITE"/>
-		<field name="OWNER_EXECUTE"/>
-		<field name="OWNER_READ"/>
-		<field name="OWNER_WRITE"/>
-	</class>
-	<class name="java/nio/file/attribute/PosixFilePermissions" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="asFileAttribute(Ljava/util/Set;)Ljava/nio/file/attribute/FileAttribute;"/>
-		<method name="fromString(Ljava/lang/String;)Ljava/util/Set;"/>
-		<method name="toString(Ljava/util/Set;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/file/attribute/UserDefinedFileAttributeView" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/nio/file/attribute/FileAttributeView"/>
-		<method name="delete(Ljava/lang/String;)V"/>
-		<method name="list()Ljava/util/List;"/>
-		<method name="read(Ljava/lang/String;Ljava/nio/ByteBuffer;)I"/>
-		<method name="size(Ljava/lang/String;)I"/>
-		<method name="write(Ljava/lang/String;Ljava/nio/ByteBuffer;)I"/>
-	</class>
-	<class name="java/nio/file/attribute/UserPrincipal" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/Principal"/>
-	</class>
-	<class name="java/nio/file/attribute/UserPrincipalLookupService" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="lookupPrincipalByGroupName(Ljava/lang/String;)Ljava/nio/file/attribute/GroupPrincipal;"/>
-		<method name="lookupPrincipalByName(Ljava/lang/String;)Ljava/nio/file/attribute/UserPrincipal;"/>
-	</class>
-	<class name="java/nio/file/attribute/UserPrincipalNotFoundException" since="26">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/nio/file/spi/FileSystemProvider" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkAccess(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;)V"/>
-		<method name="copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V"/>
-		<method name="createDirectory(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)V"/>
-		<method name="createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)V"/>
-		<method name="createSymbolicLink(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)V"/>
-		<method name="delete(Ljava/nio/file/Path;)V"/>
-		<method name="deleteIfExists(Ljava/nio/file/Path;)Z"/>
-		<method name="getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;"/>
-		<method name="getFileStore(Ljava/nio/file/Path;)Ljava/nio/file/FileStore;"/>
-		<method name="getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;"/>
-		<method name="getPath(Ljava/net/URI;)Ljava/nio/file/Path;"/>
-		<method name="getScheme()Ljava/lang/String;"/>
-		<method name="installedProviders()Ljava/util/List;"/>
-		<method name="isHidden(Ljava/nio/file/Path;)Z"/>
-		<method name="isSameFile(Ljava/nio/file/Path;Ljava/nio/file/Path;)Z"/>
-		<method name="move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V"/>
-		<method name="newAsynchronousFileChannel(Ljava/nio/file/Path;Ljava/util/Set;Ljava/util/concurrent/ExecutorService;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/AsynchronousFileChannel;"/>
-		<method name="newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;"/>
-		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;"/>
-		<method name="newFileChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;"/>
-		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;"/>
-		<method name="newFileSystem(Ljava/nio/file/Path;Ljava/util/Map;)Ljava/nio/file/FileSystem;"/>
-		<method name="newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;"/>
-		<method name="newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;"/>
-		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;"/>
-		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/util/Map;"/>
-		<method name="readSymbolicLink(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
-		<method name="setAttribute(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/Object;[Ljava/nio/file/LinkOption;)V"/>
-	</class>
-	<class name="java/nio/file/spi/FileTypeDetector" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="probeContentType(Ljava/nio/file/Path;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/AccessControlContext" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/AccessControlContext;Ljava/security/DomainCombiner;)V"/>
-		<method name="&lt;init>([Ljava/security/ProtectionDomain;)V"/>
-		<method name="checkPermission(Ljava/security/Permission;)V"/>
-		<method name="getDomainCombiner()Ljava/security/DomainCombiner;"/>
-	</class>
-	<class name="java/security/AccessControlException" since="1">
-		<extends name="java/lang/SecurityException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/security/Permission;)V"/>
-		<method name="getPermission()Ljava/security/Permission;"/>
-	</class>
-	<class name="java/security/AccessController" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkPermission(Ljava/security/Permission;)V"/>
-		<method name="doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;"/>
-		<method name="doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
-		<method name="doPrivileged(Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;"/>
-		<method name="doPrivileged(Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
-		<method name="doPrivilegedWithCombiner(Ljava/security/PrivilegedAction;)Ljava/lang/Object;" since="9"/>
-		<method name="doPrivilegedWithCombiner(Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;" since="9"/>
-		<method name="getContext()Ljava/security/AccessControlContext;"/>
-	</class>
-	<class name="java/security/AlgorithmConstraints" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/AlgorithmParameters;)Z"/>
-		<method name="permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/Key;Ljava/security/AlgorithmParameters;)Z"/>
-		<method name="permits(Ljava/util/Set;Ljava/security/Key;)Z"/>
-	</class>
-	<class name="java/security/AlgorithmParameterGenerator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/AlgorithmParameterGeneratorSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="generateParameters()Ljava/security/AlgorithmParameters;"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameterGenerator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/AlgorithmParameterGenerator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameterGenerator;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(I)V"/>
-		<method name="init(ILjava/security/SecureRandom;)V"/>
-		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="java/security/AlgorithmParameterGeneratorSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGenerateParameters()Ljava/security/AlgorithmParameters;"/>
-		<method name="engineInit(ILjava/security/SecureRandom;)V"/>
-		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="java/security/AlgorithmParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/AlgorithmParametersSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getEncoded()[B"/>
-		<method name="getEncoded(Ljava/lang/String;)[B"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/AlgorithmParameters;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameters;"/>
-		<method name="getParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="init([B)V"/>
-		<method name="init([BLjava/lang/String;)V"/>
-	</class>
-	<class name="java/security/AlgorithmParametersSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGetEncoded()[B"/>
-		<method name="engineGetEncoded(Ljava/lang/String;)[B"/>
-		<method name="engineGetParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;"/>
-		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="engineInit([B)V"/>
-		<method name="engineInit([BLjava/lang/String;)V"/>
-		<method name="engineToString()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/AllPermission" since="1">
-		<extends name="java/security/Permission"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/AuthProvider" since="1">
-		<extends name="java/security/Provider"/>
-		<method name="&lt;init>(Ljava/lang/String;DLjava/lang/String;)V"/>
-		<method name="login(Ljavax/security/auth/Subject;Ljavax/security/auth/callback/CallbackHandler;)V"/>
-		<method name="logout()V"/>
-		<method name="setCallbackHandler(Ljavax/security/auth/callback/CallbackHandler;)V"/>
-	</class>
-	<class name="java/security/BasicPermission" since="1">
-		<extends name="java/security/Permission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/Certificate" since="1" deprecated="3">
-		<extends name="java/lang/Object"/>
-		<method name="decode(Ljava/io/InputStream;)V"/>
-		<method name="encode(Ljava/io/OutputStream;)V"/>
-		<method name="getFormat()Ljava/lang/String;"/>
-		<method name="getGuarantor()Ljava/security/Principal;"/>
-		<method name="getPrincipal()Ljava/security/Principal;"/>
-		<method name="getPublicKey()Ljava/security/PublicKey;"/>
-		<method name="toString(Z)Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/CodeSigner" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V"/>
-		<method name="getSignerCertPath()Ljava/security/cert/CertPath;"/>
-		<method name="getTimestamp()Ljava/security/Timestamp;"/>
-	</class>
-	<class name="java/security/CodeSource" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/net/URL;[Ljava/security/CodeSigner;)V"/>
-		<method name="&lt;init>(Ljava/net/URL;[Ljava/security/cert/Certificate;)V"/>
-		<method name="getCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getCodeSigners()[Ljava/security/CodeSigner;"/>
-		<method name="getLocation()Ljava/net/URL;"/>
-		<method name="implies(Ljava/security/CodeSource;)Z"/>
-	</class>
-	<class name="java/security/CryptoPrimitive" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/security/CryptoPrimitive;"/>
-		<method name="values()[Ljava/security/CryptoPrimitive;"/>
-		<field name="BLOCK_CIPHER"/>
-		<field name="KEY_AGREEMENT"/>
-		<field name="KEY_ENCAPSULATION"/>
-		<field name="KEY_WRAP"/>
-		<field name="MAC"/>
-		<field name="MESSAGE_DIGEST"/>
-		<field name="PUBLIC_KEY_ENCRYPTION"/>
-		<field name="SECURE_RANDOM"/>
-		<field name="SIGNATURE"/>
-		<field name="STREAM_CIPHER"/>
-	</class>
-	<class name="java/security/DigestException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/DigestInputStream" since="1">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/security/MessageDigest;)V"/>
-		<method name="getMessageDigest()Ljava/security/MessageDigest;"/>
-		<method name="on(Z)V"/>
-		<method name="setMessageDigest(Ljava/security/MessageDigest;)V"/>
-		<field name="digest"/>
-	</class>
-	<class name="java/security/DigestOutputStream" since="1">
-		<extends name="java/io/FilterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/security/MessageDigest;)V"/>
-		<method name="getMessageDigest()Ljava/security/MessageDigest;"/>
-		<method name="on(Z)V"/>
-		<method name="setMessageDigest(Ljava/security/MessageDigest;)V"/>
-		<field name="digest"/>
-	</class>
-	<class name="java/security/DomainCombiner" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="combine([Ljava/security/ProtectionDomain;[Ljava/security/ProtectionDomain;)[Ljava/security/ProtectionDomain;"/>
-	</class>
-	<class name="java/security/DomainLoadStoreParameter" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$LoadStoreParameter"/>
-		<method name="&lt;init>(Ljava/net/URI;Ljava/util/Map;)V"/>
-		<method name="getConfiguration()Ljava/net/URI;"/>
-		<method name="getProtectionParams()Ljava/util/Map;"/>
-	</class>
-	<class name="java/security/GeneralSecurityException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/Guard" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="checkGuard(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/security/GuardedObject" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/security/Guard;)V"/>
-		<method name="getObject()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/Identity" since="1" deprecated="3">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/security/Principal"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V"/>
-		<method name="addCertificate(Ljava/security/Certificate;)V"/>
-		<method name="certificates()[Ljava/security/Certificate;"/>
-		<method name="getInfo()Ljava/lang/String;"/>
-		<method name="getPublicKey()Ljava/security/PublicKey;"/>
-		<method name="getScope()Ljava/security/IdentityScope;"/>
-		<method name="identityEquals(Ljava/security/Identity;)Z"/>
-		<method name="removeCertificate(Ljava/security/Certificate;)V"/>
-		<method name="setInfo(Ljava/lang/String;)V"/>
-		<method name="setPublicKey(Ljava/security/PublicKey;)V"/>
-		<method name="toString(Z)Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/IdentityScope" since="1" deprecated="3">
-		<extends name="java/security/Identity"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V"/>
-		<method name="addIdentity(Ljava/security/Identity;)V"/>
-		<method name="getIdentity(Ljava/lang/String;)Ljava/security/Identity;"/>
-		<method name="getIdentity(Ljava/security/Principal;)Ljava/security/Identity;"/>
-		<method name="getIdentity(Ljava/security/PublicKey;)Ljava/security/Identity;"/>
-		<method name="getSystemScope()Ljava/security/IdentityScope;"/>
-		<method name="identities()Ljava/util/Enumeration;"/>
-		<method name="removeIdentity(Ljava/security/Identity;)V"/>
-		<method name="setSystemScope(Ljava/security/IdentityScope;)V"/>
-		<method name="size()I"/>
-	</class>
-	<class name="java/security/InvalidAlgorithmParameterException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/InvalidKeyException" since="1">
-		<extends name="java/security/KeyException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/InvalidParameterException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/Key" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getEncoded()[B"/>
-		<method name="getFormat()Ljava/lang/String;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/KeyException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/KeyFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/KeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;"/>
-		<method name="generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyFactory;"/>
-		<method name="getKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="translateKey(Ljava/security/Key;)Ljava/security/Key;"/>
-	</class>
-	<class name="java/security/KeyFactorySpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGeneratePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;"/>
-		<method name="engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;"/>
-		<method name="engineGetKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
-		<method name="engineTranslateKey(Ljava/security/Key;)Ljava/security/Key;"/>
-	</class>
-	<class name="java/security/KeyManagementException" since="1">
-		<extends name="java/security/KeyException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/KeyPair" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/security/PublicKey;Ljava/security/PrivateKey;)V"/>
-		<method name="getPrivate()Ljava/security/PrivateKey;"/>
-		<method name="getPublic()Ljava/security/PublicKey;"/>
-	</class>
-	<class name="java/security/KeyPairGenerator" since="1">
-		<extends name="java/security/KeyPairGeneratorSpi"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="genKeyPair()Ljava/security/KeyPair;"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyPairGenerator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyPairGenerator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyPairGenerator;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="initialize(I)V"/>
-		<method name="initialize(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-	</class>
-	<class name="java/security/KeyPairGeneratorSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="generateKeyPair()Ljava/security/KeyPair;"/>
-		<method name="initialize(ILjava/security/SecureRandom;)V"/>
-		<method name="initialize(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="java/security/KeyRep" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/security/KeyRep$Type;Ljava/lang/String;Ljava/lang/String;[B)V"/>
-		<method name="readResolve()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/KeyRep$Type" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/security/KeyRep$Type;"/>
-		<method name="values()[Ljava/security/KeyRep$Type;"/>
-		<field name="PRIVATE"/>
-		<field name="PUBLIC"/>
-		<field name="SECRET"/>
-	</class>
-	<class name="java/security/KeyStore" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/KeyStoreSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="aliases()Ljava/util/Enumeration;"/>
-		<method name="containsAlias(Ljava/lang/String;)Z"/>
-		<method name="deleteEntry(Ljava/lang/String;)V"/>
-		<method name="entryInstanceOf(Ljava/lang/String;Ljava/lang/Class;)Z"/>
-		<method name="getCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;"/>
-		<method name="getCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;"/>
-		<method name="getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;"/>
-		<method name="getCreationDate(Ljava/lang/String;)Ljava/util/Date;"/>
-		<method name="getDefaultType()Ljava/lang/String;"/>
-		<method name="getEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyStore;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyStore;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyStore;"/>
-		<method name="getKey(Ljava/lang/String;[C)Ljava/security/Key;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="isCertificateEntry(Ljava/lang/String;)Z"/>
-		<method name="isKeyEntry(Ljava/lang/String;)Z"/>
-		<method name="load(Ljava/io/InputStream;[C)V"/>
-		<method name="load(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
-		<method name="setCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V"/>
-		<method name="setEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V"/>
-		<method name="setKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V"/>
-		<method name="setKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V"/>
-		<method name="size()I"/>
-		<method name="store(Ljava/io/OutputStream;[C)V"/>
-		<method name="store(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
-	</class>
-	<class name="java/security/KeyStore$Builder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getKeyStore()Ljava/security/KeyStore;"/>
-		<method name="getProtectionParameter(Ljava/lang/String;)Ljava/security/KeyStore$ProtectionParameter;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/security/Provider;Ljava/io/File;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/security/Provider;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;"/>
-		<method name="newInstance(Ljava/security/KeyStore;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;"/>
-	</class>
-	<class name="java/security/KeyStore$CallbackHandlerProtection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$ProtectionParameter"/>
-		<method name="&lt;init>(Ljavax/security/auth/callback/CallbackHandler;)V"/>
-		<method name="getCallbackHandler()Ljavax/security/auth/callback/CallbackHandler;"/>
-	</class>
-	<class name="java/security/KeyStore$Entry" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getAttributes()Ljava/util/Set;" since="26"/>
-	</class>
-	<class name="java/security/KeyStore$Entry$Attribute" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getValue()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/KeyStore$LoadStoreParameter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getProtectionParameter()Ljava/security/KeyStore$ProtectionParameter;"/>
-	</class>
-	<class name="java/security/KeyStore$PasswordProtection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$ProtectionParameter"/>
-		<implements name="javax/security/auth/Destroyable"/>
-		<method name="&lt;init>([C)V"/>
-		<method name="&lt;init>([CLjava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)V" since="26"/>
-		<method name="getPassword()[C"/>
-		<method name="getProtectionAlgorithm()Ljava/lang/String;" since="26"/>
-		<method name="getProtectionParameters()Ljava/security/spec/AlgorithmParameterSpec;" since="26"/>
-	</class>
-	<class name="java/security/KeyStore$PrivateKeyEntry" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$Entry"/>
-		<method name="&lt;init>(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;)V"/>
-		<method name="&lt;init>(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/util/Set;)V" since="26"/>
-		<method name="getCertificate()Ljava/security/cert/Certificate;"/>
-		<method name="getCertificateChain()[Ljava/security/cert/Certificate;"/>
-		<method name="getPrivateKey()Ljava/security/PrivateKey;"/>
-	</class>
-	<class name="java/security/KeyStore$ProtectionParameter" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/security/KeyStore$SecretKeyEntry" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$Entry"/>
-		<method name="&lt;init>(Ljavax/crypto/SecretKey;)V"/>
-		<method name="&lt;init>(Ljavax/crypto/SecretKey;Ljava/util/Set;)V" since="26"/>
-		<method name="getSecretKey()Ljavax/crypto/SecretKey;"/>
-	</class>
-	<class name="java/security/KeyStore$TrustedCertificateEntry" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$Entry"/>
-		<method name="&lt;init>(Ljava/security/cert/Certificate;)V"/>
-		<method name="&lt;init>(Ljava/security/cert/Certificate;Ljava/util/Set;)V" since="26"/>
-		<method name="getTrustedCertificate()Ljava/security/cert/Certificate;"/>
-	</class>
-	<class name="java/security/KeyStoreException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/KeyStoreSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineAliases()Ljava/util/Enumeration;"/>
-		<method name="engineContainsAlias(Ljava/lang/String;)Z"/>
-		<method name="engineDeleteEntry(Ljava/lang/String;)V"/>
-		<method name="engineEntryInstanceOf(Ljava/lang/String;Ljava/lang/Class;)Z"/>
-		<method name="engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;"/>
-		<method name="engineGetCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;"/>
-		<method name="engineGetCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;"/>
-		<method name="engineGetCreationDate(Ljava/lang/String;)Ljava/util/Date;"/>
-		<method name="engineGetEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;"/>
-		<method name="engineGetKey(Ljava/lang/String;[C)Ljava/security/Key;"/>
-		<method name="engineIsCertificateEntry(Ljava/lang/String;)Z"/>
-		<method name="engineIsKeyEntry(Ljava/lang/String;)Z"/>
-		<method name="engineLoad(Ljava/io/InputStream;[C)V"/>
-		<method name="engineLoad(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
-		<method name="engineSetCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V"/>
-		<method name="engineSetEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V"/>
-		<method name="engineSetKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V"/>
-		<method name="engineSetKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V"/>
-		<method name="engineSize()I"/>
-		<method name="engineStore(Ljava/io/OutputStream;[C)V"/>
-		<method name="engineStore(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
-	</class>
-	<class name="java/security/MessageDigest" since="1">
-		<extends name="java/security/MessageDigestSpi"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="digest()[B"/>
-		<method name="digest([B)[B"/>
-		<method name="digest([BII)I"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getDigestLength()I"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/MessageDigest;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/MessageDigest;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="isEqual([B[B)Z"/>
-		<method name="reset()V"/>
-		<method name="update(B)V"/>
-		<method name="update(Ljava/nio/ByteBuffer;)V"/>
-		<method name="update([B)V"/>
-		<method name="update([BII)V"/>
-	</class>
-	<class name="java/security/MessageDigestSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineDigest()[B"/>
-		<method name="engineDigest([BII)I"/>
-		<method name="engineGetDigestLength()I"/>
-		<method name="engineReset()V"/>
-		<method name="engineUpdate(B)V"/>
-		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V"/>
-		<method name="engineUpdate([BII)V"/>
-	</class>
-	<class name="java/security/NoSuchAlgorithmException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/NoSuchProviderException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/PKCS12Attribute" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/KeyStore$Entry$Attribute"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="getEncoded()[B"/>
-	</class>
-	<class name="java/security/Permission" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/security/Guard"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getActions()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="implies(Ljava/security/Permission;)Z"/>
-		<method name="newPermissionCollection()Ljava/security/PermissionCollection;"/>
-	</class>
-	<class name="java/security/PermissionCollection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(Ljava/security/Permission;)V"/>
-		<method name="elements()Ljava/util/Enumeration;"/>
-		<method name="implies(Ljava/security/Permission;)Z"/>
-		<method name="isReadOnly()Z"/>
-		<method name="setReadOnly()V"/>
-	</class>
-	<class name="java/security/Permissions" since="1">
-		<extends name="java/security/PermissionCollection"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/security/Policy" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;)Ljava/security/Policy;" since="9"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;Ljava/lang/String;)Ljava/security/Policy;" since="9"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;Ljava/security/Provider;)Ljava/security/Policy;" since="9"/>
-		<method name="getParameters()Ljava/security/Policy$Parameters;" since="9"/>
-		<method name="getPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;"/>
-		<method name="getPermissions(Ljava/security/ProtectionDomain;)Ljava/security/PermissionCollection;"/>
-		<method name="getPolicy()Ljava/security/Policy;"/>
-		<method name="getProvider()Ljava/security/Provider;" since="9"/>
-		<method name="getType()Ljava/lang/String;" since="9"/>
-		<method name="implies(Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z"/>
-		<method name="refresh()V"/>
-		<method name="setPolicy(Ljava/security/Policy;)V"/>
-		<field name="UNSUPPORTED_EMPTY_COLLECTION" since="9"/>
-	</class>
-	<class name="java/security/Policy$Parameters" since="9">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/security/PolicySpi" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGetPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;"/>
-		<method name="engineGetPermissions(Ljava/security/ProtectionDomain;)Ljava/security/PermissionCollection;"/>
-		<method name="engineImplies(Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z"/>
-		<method name="engineRefresh()V"/>
-	</class>
-	<class name="java/security/Principal" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="implies(Ljavax/security/auth/Subject;)Z" since="26"/>
-	</class>
-	<class name="java/security/PrivateKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/Key"/>
-		<implements name="javax/security/auth/Destroyable" since="26"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/PrivilegedAction" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="run()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/PrivilegedActionException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="getException()Ljava/lang/Exception;"/>
-	</class>
-	<class name="java/security/PrivilegedExceptionAction" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="run()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/ProtectionDomain" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V"/>
-		<method name="&lt;init>(Ljava/security/CodeSource;Ljava/security/PermissionCollection;Ljava/lang/ClassLoader;[Ljava/security/Principal;)V"/>
-		<method name="getClassLoader()Ljava/lang/ClassLoader;"/>
-		<method name="getCodeSource()Ljava/security/CodeSource;"/>
-		<method name="getPermissions()Ljava/security/PermissionCollection;"/>
-		<method name="getPrincipals()[Ljava/security/Principal;"/>
-		<method name="implies(Ljava/security/Permission;)Z"/>
-	</class>
-	<class name="java/security/Provider" since="1">
-		<extends name="java/util/Properties"/>
-		<method name="&lt;init>(Ljava/lang/String;DLjava/lang/String;)V"/>
-		<method name="getInfo()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;"/>
-		<method name="getServices()Ljava/util/Set;"/>
-		<method name="getVersion()D"/>
-		<method name="putService(Ljava/security/Provider$Service;)V"/>
-		<method name="removeService(Ljava/security/Provider$Service;)V"/>
-	</class>
-	<class name="java/security/Provider$Service" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/Provider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getClassName()Ljava/lang/String;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="newInstance(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="supportsParameter(Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/security/ProviderException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/PublicKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/Key"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/SecureClassLoader" since="1">
-		<extends name="java/lang/ClassLoader"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/ClassLoader;)V"/>
-		<method name="defineClass(Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class;"/>
-		<method name="defineClass(Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class;"/>
-		<method name="getPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;"/>
-	</class>
-	<class name="java/security/SecureRandom" since="1">
-		<extends name="java/util/Random"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/security/SecureRandomSpi;Ljava/security/Provider;)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="generateSeed(I)[B"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/SecureRandom;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/SecureRandom;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/SecureRandom;"/>
-		<method name="getInstanceStrong()Ljava/security/SecureRandom;" since="26"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getSeed(I)[B"/>
-		<method name="setSeed([B)V"/>
-	</class>
-	<class name="java/security/SecureRandomSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGenerateSeed(I)[B"/>
-		<method name="engineNextBytes([B)V"/>
-		<method name="engineSetSeed([B)V"/>
-	</class>
-	<class name="java/security/Security" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addProvider(Ljava/security/Provider;)I"/>
-		<method name="getAlgorithmProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="16"/>
-		<method name="getAlgorithms(Ljava/lang/String;)Ljava/util/Set;"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getProvider(Ljava/lang/String;)Ljava/security/Provider;"/>
-		<method name="getProviders()[Ljava/security/Provider;"/>
-		<method name="getProviders(Ljava/lang/String;)[Ljava/security/Provider;"/>
-		<method name="getProviders(Ljava/util/Map;)[Ljava/security/Provider;"/>
-		<method name="insertProviderAt(Ljava/security/Provider;I)I"/>
-		<method name="removeProvider(Ljava/lang/String;)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/SecurityPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/Signature" since="1">
-		<extends name="java/security/SignatureSpi"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/Signature;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Signature;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/Signature;"/>
-		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="16"/>
-		<method name="getParameters()Ljava/security/AlgorithmParameters;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="initSign(Ljava/security/PrivateKey;)V"/>
-		<method name="initSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V"/>
-		<method name="initVerify(Ljava/security/PublicKey;)V"/>
-		<method name="initVerify(Ljava/security/cert/Certificate;)V"/>
-		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="16"/>
-		<method name="setParameter(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="sign()[B"/>
-		<method name="sign([BII)I"/>
-		<method name="update(B)V"/>
-		<method name="update(Ljava/nio/ByteBuffer;)V"/>
-		<method name="update([B)V"/>
-		<method name="update([BII)V"/>
-		<method name="verify([B)Z"/>
-		<method name="verify([BII)Z"/>
-		<field name="SIGN"/>
-		<field name="UNINITIALIZED"/>
-		<field name="VERIFY"/>
-		<field name="state"/>
-	</class>
-	<class name="java/security/SignatureException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/SignatureSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGetParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="16"/>
-		<method name="engineGetParameters()Ljava/security/AlgorithmParameters;"/>
-		<method name="engineInitSign(Ljava/security/PrivateKey;)V"/>
-		<method name="engineInitSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V"/>
-		<method name="engineInitVerify(Ljava/security/PublicKey;)V"/>
-		<method name="engineSetParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="16"/>
-		<method name="engineSetParameter(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="engineSign()[B"/>
-		<method name="engineSign([BII)I"/>
-		<method name="engineUpdate(B)V"/>
-		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V"/>
-		<method name="engineUpdate([BII)V"/>
-		<method name="engineVerify([B)Z"/>
-		<method name="engineVerify([BII)Z"/>
-		<field name="appRandom"/>
-	</class>
-	<class name="java/security/SignedObject" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/io/Serializable;Ljava/security/PrivateKey;Ljava/security/Signature;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getObject()Ljava/lang/Object;"/>
-		<method name="getSignature()[B"/>
-		<method name="verify(Ljava/security/PublicKey;Ljava/security/Signature;)Z"/>
-	</class>
-	<class name="java/security/Signer" since="1" deprecated="3">
-		<extends name="java/security/Identity"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V"/>
-		<method name="getPrivateKey()Ljava/security/PrivateKey;"/>
-		<method name="setKeyPair(Ljava/security/KeyPair;)V"/>
-	</class>
-	<class name="java/security/Timestamp" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/util/Date;Ljava/security/cert/CertPath;)V"/>
-		<method name="getSignerCertPath()Ljava/security/cert/CertPath;"/>
-		<method name="getTimestamp()Ljava/util/Date;"/>
-	</class>
-	<class name="java/security/UnrecoverableEntryException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/UnrecoverableKeyException" since="1">
-		<extends name="java/security/GeneralSecurityException" removed="9"/>
-		<extends name="java/security/UnrecoverableEntryException" since="9"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/UnresolvedPermission" since="1">
-		<extends name="java/security/Permission"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/security/cert/Certificate;)V"/>
-		<method name="getUnresolvedActions()Ljava/lang/String;"/>
-		<method name="getUnresolvedCerts()[Ljava/security/cert/Certificate;"/>
-		<method name="getUnresolvedName()Ljava/lang/String;"/>
-		<method name="getUnresolvedType()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/acl/Acl" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/acl/Owner"/>
-		<method name="addEntry(Ljava/security/Principal;Ljava/security/acl/AclEntry;)Z"/>
-		<method name="checkPermission(Ljava/security/Principal;Ljava/security/acl/Permission;)Z"/>
-		<method name="entries()Ljava/util/Enumeration;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPermissions(Ljava/security/Principal;)Ljava/util/Enumeration;"/>
-		<method name="removeEntry(Ljava/security/Principal;Ljava/security/acl/AclEntry;)Z"/>
-		<method name="setName(Ljava/security/Principal;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/acl/AclEntry" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="addPermission(Ljava/security/acl/Permission;)Z"/>
-		<method name="checkPermission(Ljava/security/acl/Permission;)Z"/>
-		<method name="getPrincipal()Ljava/security/Principal;"/>
-		<method name="isNegative()Z"/>
-		<method name="permissions()Ljava/util/Enumeration;"/>
-		<method name="removePermission(Ljava/security/acl/Permission;)Z"/>
-		<method name="setNegativePermissions()V"/>
-		<method name="setPrincipal(Ljava/security/Principal;)Z"/>
-	</class>
-	<class name="java/security/acl/AclNotFoundException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/security/acl/Group" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/Principal"/>
-		<method name="addMember(Ljava/security/Principal;)Z"/>
-		<method name="isMember(Ljava/security/Principal;)Z"/>
-		<method name="members()Ljava/util/Enumeration;"/>
-		<method name="removeMember(Ljava/security/Principal;)Z"/>
-	</class>
-	<class name="java/security/acl/LastOwnerException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/security/acl/NotOwnerException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/security/acl/Owner" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="addOwner(Ljava/security/Principal;Ljava/security/Principal;)Z"/>
-		<method name="deleteOwner(Ljava/security/Principal;Ljava/security/Principal;)Z"/>
-		<method name="isOwner(Ljava/security/Principal;)Z"/>
-	</class>
-	<class name="java/security/acl/Permission" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/security/cert/CRL" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="isRevoked(Ljava/security/cert/Certificate;)Z"/>
-	</class>
-	<class name="java/security/cert/CRLException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/cert/CRLReason" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/CRLReason;"/>
-		<method name="values()[Ljava/security/cert/CRLReason;"/>
-		<field name="AA_COMPROMISE"/>
-		<field name="AFFILIATION_CHANGED"/>
-		<field name="CA_COMPROMISE"/>
-		<field name="CERTIFICATE_HOLD"/>
-		<field name="CESSATION_OF_OPERATION"/>
-		<field name="KEY_COMPROMISE"/>
-		<field name="PRIVILEGE_WITHDRAWN"/>
-		<field name="REMOVE_FROM_CRL"/>
-		<field name="SUPERSEDED"/>
-		<field name="UNSPECIFIED"/>
-		<field name="UNUSED"/>
-	</class>
-	<class name="java/security/cert/CRLSelector" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="match(Ljava/security/cert/CRL;)Z"/>
-	</class>
-	<class name="java/security/cert/CertPath" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getCertificates()Ljava/util/List;"/>
-		<method name="getEncoded()[B"/>
-		<method name="getEncoded(Ljava/lang/String;)[B"/>
-		<method name="getEncodings()Ljava/util/Iterator;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="writeReplace()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/cert/CertPath$CertPathRep" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
-		<method name="readResolve()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/cert/CertPathBuilder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/cert/CertPathBuilderSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="build(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getDefaultType()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathBuilder;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathBuilder;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertPathBuilder;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
-	</class>
-	<class name="java/security/cert/CertPathBuilderException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/cert/CertPathBuilderResult" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="getCertPath()Ljava/security/cert/CertPath;"/>
-	</class>
-	<class name="java/security/cert/CertPathBuilderSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineBuild(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;"/>
-		<method name="engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
-	</class>
-	<class name="java/security/cert/CertPathChecker" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="check(Ljava/security/cert/Certificate;)V"/>
-		<method name="init(Z)V"/>
-		<method name="isForwardCheckingSupported()Z"/>
-	</class>
-	<class name="java/security/cert/CertPathParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-	</class>
-	<class name="java/security/cert/CertPathValidator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/cert/CertPathValidatorSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getDefaultType()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathValidator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathValidator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertPathValidator;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
-		<method name="validate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;"/>
-	</class>
-	<class name="java/security/cert/CertPathValidatorException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;ILjava/security/cert/CertPathValidatorException$Reason;)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="getCertPath()Ljava/security/cert/CertPath;"/>
-		<method name="getIndex()I"/>
-		<method name="getReason()Ljava/security/cert/CertPathValidatorException$Reason;" since="24"/>
-	</class>
-	<class name="java/security/cert/CertPathValidatorException$BasicReason" since="24">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/security/cert/CertPathValidatorException$Reason"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/CertPathValidatorException$BasicReason;"/>
-		<method name="values()[Ljava/security/cert/CertPathValidatorException$BasicReason;"/>
-		<field name="ALGORITHM_CONSTRAINED"/>
-		<field name="EXPIRED"/>
-		<field name="INVALID_SIGNATURE"/>
-		<field name="NOT_YET_VALID"/>
-		<field name="REVOKED"/>
-		<field name="UNDETERMINED_REVOCATION_STATUS"/>
-		<field name="UNSPECIFIED"/>
-	</class>
-	<class name="java/security/cert/CertPathValidatorException$Reason" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-	</class>
-	<class name="java/security/cert/CertPathValidatorResult" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-	</class>
-	<class name="java/security/cert/CertPathValidatorSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
-		<method name="engineValidate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;"/>
-	</class>
-	<class name="java/security/cert/CertSelector" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="match(Ljava/security/cert/Certificate;)Z"/>
-	</class>
-	<class name="java/security/cert/CertStore" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/cert/CertStoreSpi;Ljava/security/Provider;Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)V"/>
-		<method name="getCRLs(Ljava/security/cert/CRLSelector;)Ljava/util/Collection;"/>
-		<method name="getCertStoreParameters()Ljava/security/cert/CertStoreParameters;"/>
-		<method name="getCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;"/>
-		<method name="getDefaultType()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)Ljava/security/cert/CertStore;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;Ljava/lang/String;)Ljava/security/cert/CertStore;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;Ljava/security/Provider;)Ljava/security/cert/CertStore;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getType()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/cert/CertStoreException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/cert/CertStoreParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-	</class>
-	<class name="java/security/cert/CertStoreSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/cert/CertStoreParameters;)V"/>
-		<method name="engineGetCRLs(Ljava/security/cert/CRLSelector;)Ljava/util/Collection;"/>
-		<method name="engineGetCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;"/>
-	</class>
-	<class name="java/security/cert/Certificate" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getEncoded()[B"/>
-		<method name="getPublicKey()Ljava/security/PublicKey;"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<method name="verify(Ljava/security/PublicKey;)V"/>
-		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V"/>
-		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="26"/>
-		<method name="writeReplace()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/cert/Certificate$CertificateRep" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
-		<method name="readResolve()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/security/cert/CertificateEncodingException" since="1">
-		<extends name="java/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/cert/CertificateException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/cert/CertificateExpiredException" since="1">
-		<extends name="java/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/cert/CertificateFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/cert/CertificateFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="generateCRL(Ljava/io/InputStream;)Ljava/security/cert/CRL;"/>
-		<method name="generateCRLs(Ljava/io/InputStream;)Ljava/util/Collection;"/>
-		<method name="generateCertPath(Ljava/io/InputStream;)Ljava/security/cert/CertPath;"/>
-		<method name="generateCertPath(Ljava/io/InputStream;Ljava/lang/String;)Ljava/security/cert/CertPath;"/>
-		<method name="generateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;"/>
-		<method name="generateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;"/>
-		<method name="generateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;"/>
-		<method name="getCertPathEncodings()Ljava/util/Iterator;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertificateFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertificateFactory;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getType()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/cert/CertificateFactorySpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGenerateCRL(Ljava/io/InputStream;)Ljava/security/cert/CRL;"/>
-		<method name="engineGenerateCRLs(Ljava/io/InputStream;)Ljava/util/Collection;"/>
-		<method name="engineGenerateCertPath(Ljava/io/InputStream;)Ljava/security/cert/CertPath;"/>
-		<method name="engineGenerateCertPath(Ljava/io/InputStream;Ljava/lang/String;)Ljava/security/cert/CertPath;"/>
-		<method name="engineGenerateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;"/>
-		<method name="engineGenerateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;"/>
-		<method name="engineGenerateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;"/>
-		<method name="engineGetCertPathEncodings()Ljava/util/Iterator;"/>
-	</class>
-	<class name="java/security/cert/CertificateNotYetValidException" since="1">
-		<extends name="java/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/cert/CertificateParsingException" since="1">
-		<extends name="java/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/cert/CertificateRevokedException" since="24">
-		<extends name="java/security/cert/CertificateException"/>
-		<method name="&lt;init>(Ljava/util/Date;Ljava/security/cert/CRLReason;Ljavax/security/auth/x500/X500Principal;Ljava/util/Map;)V"/>
-		<method name="getAuthorityName()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getExtensions()Ljava/util/Map;"/>
-		<method name="getInvalidityDate()Ljava/util/Date;"/>
-		<method name="getRevocationDate()Ljava/util/Date;"/>
-		<method name="getRevocationReason()Ljava/security/cert/CRLReason;"/>
-	</class>
-	<class name="java/security/cert/CollectionCertStoreParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/cert/CertStoreParameters"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="getCollection()Ljava/util/Collection;"/>
-	</class>
-	<class name="java/security/cert/Extension" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="encode(Ljava/io/OutputStream;)V"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getValue()[B"/>
-		<method name="isCritical()Z"/>
-	</class>
-	<class name="java/security/cert/LDAPCertStoreParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/cert/CertStoreParameters"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getPort()I"/>
-		<method name="getServerName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/cert/PKIXBuilderParameters" since="1">
-		<extends name="java/security/cert/PKIXParameters"/>
-		<method name="&lt;init>(Ljava/security/KeyStore;Ljava/security/cert/CertSelector;)V"/>
-		<method name="&lt;init>(Ljava/util/Set;Ljava/security/cert/CertSelector;)V"/>
-		<method name="getMaxPathLength()I"/>
-		<method name="setMaxPathLength(I)V"/>
-	</class>
-	<class name="java/security/cert/PKIXCertPathBuilderResult" since="1">
-		<extends name="java/security/cert/PKIXCertPathValidatorResult"/>
-		<implements name="java/security/cert/CertPathBuilderResult"/>
-		<method name="&lt;init>(Ljava/security/cert/CertPath;Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V"/>
-	</class>
-	<class name="java/security/cert/PKIXCertPathChecker" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/security/cert/CertPathChecker" since="24"/>
-		<method name="&lt;init>()V"/>
-		<method name="check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V"/>
-		<method name="getSupportedExtensions()Ljava/util/Set;"/>
-		<method name="init(Z)V"/>
-		<method name="isForwardCheckingSupported()Z"/>
-	</class>
-	<class name="java/security/cert/PKIXCertPathValidatorResult" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/cert/CertPathValidatorResult"/>
-		<method name="&lt;init>(Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V"/>
-		<method name="getPolicyTree()Ljava/security/cert/PolicyNode;"/>
-		<method name="getPublicKey()Ljava/security/PublicKey;"/>
-		<method name="getTrustAnchor()Ljava/security/cert/TrustAnchor;"/>
-	</class>
-	<class name="java/security/cert/PKIXParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/cert/CertPathParameters"/>
-		<method name="&lt;init>(Ljava/security/KeyStore;)V"/>
-		<method name="&lt;init>(Ljava/util/Set;)V"/>
-		<method name="addCertPathChecker(Ljava/security/cert/PKIXCertPathChecker;)V"/>
-		<method name="addCertStore(Ljava/security/cert/CertStore;)V"/>
-		<method name="getCertPathCheckers()Ljava/util/List;"/>
-		<method name="getCertStores()Ljava/util/List;"/>
-		<method name="getDate()Ljava/util/Date;"/>
-		<method name="getInitialPolicies()Ljava/util/Set;"/>
-		<method name="getPolicyQualifiersRejected()Z"/>
-		<method name="getSigProvider()Ljava/lang/String;"/>
-		<method name="getTargetCertConstraints()Ljava/security/cert/CertSelector;"/>
-		<method name="getTrustAnchors()Ljava/util/Set;"/>
-		<method name="isAnyPolicyInhibited()Z"/>
-		<method name="isExplicitPolicyRequired()Z"/>
-		<method name="isPolicyMappingInhibited()Z"/>
-		<method name="isRevocationEnabled()Z"/>
-		<method name="setAnyPolicyInhibited(Z)V"/>
-		<method name="setCertPathCheckers(Ljava/util/List;)V"/>
-		<method name="setCertStores(Ljava/util/List;)V"/>
-		<method name="setDate(Ljava/util/Date;)V"/>
-		<method name="setExplicitPolicyRequired(Z)V"/>
-		<method name="setInitialPolicies(Ljava/util/Set;)V"/>
-		<method name="setPolicyMappingInhibited(Z)V"/>
-		<method name="setPolicyQualifiersRejected(Z)V"/>
-		<method name="setRevocationEnabled(Z)V"/>
-		<method name="setSigProvider(Ljava/lang/String;)V"/>
-		<method name="setTargetCertConstraints(Ljava/security/cert/CertSelector;)V"/>
-		<method name="setTrustAnchors(Ljava/util/Set;)V"/>
-	</class>
-	<class name="java/security/cert/PKIXReason" since="24">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/security/cert/CertPathValidatorException$Reason"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/PKIXReason;"/>
-		<method name="values()[Ljava/security/cert/PKIXReason;"/>
-		<field name="INVALID_KEY_USAGE"/>
-		<field name="INVALID_NAME"/>
-		<field name="INVALID_POLICY"/>
-		<field name="NAME_CHAINING"/>
-		<field name="NOT_CA_CERT"/>
-		<field name="NO_TRUST_ANCHOR"/>
-		<field name="PATH_TOO_LONG"/>
-		<field name="UNRECOGNIZED_CRIT_EXT"/>
-	</class>
-	<class name="java/security/cert/PKIXRevocationChecker" since="24">
-		<extends name="java/security/cert/PKIXCertPathChecker"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone()Ljava/security/cert/PKIXRevocationChecker;"/>
-		<method name="getOcspExtensions()Ljava/util/List;"/>
-		<method name="getOcspResponder()Ljava/net/URI;"/>
-		<method name="getOcspResponderCert()Ljava/security/cert/X509Certificate;"/>
-		<method name="getOcspResponses()Ljava/util/Map;"/>
-		<method name="getOptions()Ljava/util/Set;"/>
-		<method name="getSoftFailExceptions()Ljava/util/List;"/>
-		<method name="setOcspExtensions(Ljava/util/List;)V"/>
-		<method name="setOcspResponder(Ljava/net/URI;)V"/>
-		<method name="setOcspResponderCert(Ljava/security/cert/X509Certificate;)V"/>
-		<method name="setOcspResponses(Ljava/util/Map;)V"/>
-		<method name="setOptions(Ljava/util/Set;)V"/>
-	</class>
-	<class name="java/security/cert/PKIXRevocationChecker$Option" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/PKIXRevocationChecker$Option;"/>
-		<method name="values()[Ljava/security/cert/PKIXRevocationChecker$Option;"/>
-		<field name="NO_FALLBACK"/>
-		<field name="ONLY_END_ENTITY"/>
-		<field name="PREFER_CRLS"/>
-		<field name="SOFT_FAIL"/>
-	</class>
-	<class name="java/security/cert/PolicyNode" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getChildren()Ljava/util/Iterator;"/>
-		<method name="getDepth()I"/>
-		<method name="getExpectedPolicies()Ljava/util/Set;"/>
-		<method name="getParent()Ljava/security/cert/PolicyNode;"/>
-		<method name="getPolicyQualifiers()Ljava/util/Set;"/>
-		<method name="getValidPolicy()Ljava/lang/String;"/>
-		<method name="isCritical()Z"/>
-	</class>
-	<class name="java/security/cert/PolicyQualifierInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="getEncoded()[B"/>
-		<method name="getPolicyQualifier()[B"/>
-		<method name="getPolicyQualifierId()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/cert/TrustAnchor" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/security/PublicKey;[B)V"/>
-		<method name="&lt;init>(Ljava/security/cert/X509Certificate;[B)V"/>
-		<method name="&lt;init>(Ljavax/security/auth/x500/X500Principal;Ljava/security/PublicKey;[B)V"/>
-		<method name="getCA()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getCAName()Ljava/lang/String;"/>
-		<method name="getCAPublicKey()Ljava/security/PublicKey;"/>
-		<method name="getNameConstraints()[B"/>
-		<method name="getTrustedCert()Ljava/security/cert/X509Certificate;"/>
-	</class>
-	<class name="java/security/cert/X509CRL" since="1">
-		<extends name="java/security/cert/CRL"/>
-		<implements name="java/security/cert/X509Extension"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEncoded()[B"/>
-		<method name="getIssuerDN()Ljava/security/Principal;"/>
-		<method name="getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getNextUpdate()Ljava/util/Date;"/>
-		<method name="getRevokedCertificate(Ljava/math/BigInteger;)Ljava/security/cert/X509CRLEntry;"/>
-		<method name="getRevokedCertificate(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509CRLEntry;"/>
-		<method name="getRevokedCertificates()Ljava/util/Set;"/>
-		<method name="getSigAlgName()Ljava/lang/String;"/>
-		<method name="getSigAlgOID()Ljava/lang/String;"/>
-		<method name="getSigAlgParams()[B"/>
-		<method name="getSignature()[B"/>
-		<method name="getTBSCertList()[B"/>
-		<method name="getThisUpdate()Ljava/util/Date;"/>
-		<method name="getVersion()I"/>
-		<method name="verify(Ljava/security/PublicKey;)V"/>
-		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V"/>
-		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="26"/>
-	</class>
-	<class name="java/security/cert/X509CRLEntry" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/cert/X509Extension"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCertificateIssuer()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getEncoded()[B"/>
-		<method name="getRevocationDate()Ljava/util/Date;"/>
-		<method name="getRevocationReason()Ljava/security/cert/CRLReason;" since="24"/>
-		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
-		<method name="hasExtensions()Z"/>
-	</class>
-	<class name="java/security/cert/X509CRLSelector" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/cert/CRLSelector"/>
-		<method name="&lt;init>()V"/>
-		<method name="addIssuer(Ljavax/security/auth/x500/X500Principal;)V"/>
-		<method name="addIssuerName(Ljava/lang/String;)V"/>
-		<method name="addIssuerName([B)V"/>
-		<method name="getCertificateChecking()Ljava/security/cert/X509Certificate;"/>
-		<method name="getDateAndTime()Ljava/util/Date;"/>
-		<method name="getIssuerNames()Ljava/util/Collection;"/>
-		<method name="getIssuers()Ljava/util/Collection;"/>
-		<method name="getMaxCRL()Ljava/math/BigInteger;"/>
-		<method name="getMinCRL()Ljava/math/BigInteger;"/>
-		<method name="setCertificateChecking(Ljava/security/cert/X509Certificate;)V"/>
-		<method name="setDateAndTime(Ljava/util/Date;)V"/>
-		<method name="setIssuerNames(Ljava/util/Collection;)V"/>
-		<method name="setIssuers(Ljava/util/Collection;)V"/>
-		<method name="setMaxCRLNumber(Ljava/math/BigInteger;)V"/>
-		<method name="setMinCRLNumber(Ljava/math/BigInteger;)V"/>
-	</class>
-	<class name="java/security/cert/X509CertSelector" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/cert/CertSelector"/>
-		<method name="&lt;init>()V"/>
-		<method name="addPathToName(ILjava/lang/String;)V"/>
-		<method name="addPathToName(I[B)V"/>
-		<method name="addSubjectAlternativeName(ILjava/lang/String;)V"/>
-		<method name="addSubjectAlternativeName(I[B)V"/>
-		<method name="getAuthorityKeyIdentifier()[B"/>
-		<method name="getBasicConstraints()I"/>
-		<method name="getCertificate()Ljava/security/cert/X509Certificate;"/>
-		<method name="getCertificateValid()Ljava/util/Date;"/>
-		<method name="getExtendedKeyUsage()Ljava/util/Set;"/>
-		<method name="getIssuer()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getIssuerAsBytes()[B"/>
-		<method name="getIssuerAsString()Ljava/lang/String;"/>
-		<method name="getKeyUsage()[Z"/>
-		<method name="getMatchAllSubjectAltNames()Z"/>
-		<method name="getNameConstraints()[B"/>
-		<method name="getPathToNames()Ljava/util/Collection;"/>
-		<method name="getPolicy()Ljava/util/Set;"/>
-		<method name="getPrivateKeyValid()Ljava/util/Date;"/>
-		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
-		<method name="getSubject()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getSubjectAlternativeNames()Ljava/util/Collection;"/>
-		<method name="getSubjectAsBytes()[B"/>
-		<method name="getSubjectAsString()Ljava/lang/String;"/>
-		<method name="getSubjectKeyIdentifier()[B"/>
-		<method name="getSubjectPublicKey()Ljava/security/PublicKey;"/>
-		<method name="getSubjectPublicKeyAlgID()Ljava/lang/String;"/>
-		<method name="setAuthorityKeyIdentifier([B)V"/>
-		<method name="setBasicConstraints(I)V"/>
-		<method name="setCertificate(Ljava/security/cert/X509Certificate;)V"/>
-		<method name="setCertificateValid(Ljava/util/Date;)V"/>
-		<method name="setExtendedKeyUsage(Ljava/util/Set;)V"/>
-		<method name="setIssuer(Ljava/lang/String;)V"/>
-		<method name="setIssuer(Ljavax/security/auth/x500/X500Principal;)V"/>
-		<method name="setIssuer([B)V"/>
-		<method name="setKeyUsage([Z)V"/>
-		<method name="setMatchAllSubjectAltNames(Z)V"/>
-		<method name="setNameConstraints([B)V"/>
-		<method name="setPathToNames(Ljava/util/Collection;)V"/>
-		<method name="setPolicy(Ljava/util/Set;)V"/>
-		<method name="setPrivateKeyValid(Ljava/util/Date;)V"/>
-		<method name="setSerialNumber(Ljava/math/BigInteger;)V"/>
-		<method name="setSubject(Ljava/lang/String;)V"/>
-		<method name="setSubject(Ljavax/security/auth/x500/X500Principal;)V"/>
-		<method name="setSubject([B)V"/>
-		<method name="setSubjectAlternativeNames(Ljava/util/Collection;)V"/>
-		<method name="setSubjectKeyIdentifier([B)V"/>
-		<method name="setSubjectPublicKey(Ljava/security/PublicKey;)V"/>
-		<method name="setSubjectPublicKey([B)V"/>
-		<method name="setSubjectPublicKeyAlgID(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/cert/X509Certificate" since="1">
-		<extends name="java/security/cert/Certificate"/>
-		<implements name="java/security/cert/X509Extension"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkValidity()V"/>
-		<method name="checkValidity(Ljava/util/Date;)V"/>
-		<method name="getBasicConstraints()I"/>
-		<method name="getExtendedKeyUsage()Ljava/util/List;"/>
-		<method name="getIssuerAlternativeNames()Ljava/util/Collection;"/>
-		<method name="getIssuerDN()Ljava/security/Principal;"/>
-		<method name="getIssuerUniqueID()[Z"/>
-		<method name="getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getKeyUsage()[Z"/>
-		<method name="getNotAfter()Ljava/util/Date;"/>
-		<method name="getNotBefore()Ljava/util/Date;"/>
-		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
-		<method name="getSigAlgName()Ljava/lang/String;"/>
-		<method name="getSigAlgOID()Ljava/lang/String;"/>
-		<method name="getSigAlgParams()[B"/>
-		<method name="getSignature()[B"/>
-		<method name="getSubjectAlternativeNames()Ljava/util/Collection;"/>
-		<method name="getSubjectDN()Ljava/security/Principal;"/>
-		<method name="getSubjectUniqueID()[Z"/>
-		<method name="getSubjectX500Principal()Ljavax/security/auth/x500/X500Principal;"/>
-		<method name="getTBSCertificate()[B"/>
-		<method name="getVersion()I"/>
-		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="24"/>
-	</class>
-	<class name="java/security/cert/X509Extension" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getCriticalExtensionOIDs()Ljava/util/Set;"/>
-		<method name="getExtensionValue(Ljava/lang/String;)[B"/>
-		<method name="getNonCriticalExtensionOIDs()Ljava/util/Set;"/>
-		<method name="hasUnsupportedCriticalExtension()Z"/>
-	</class>
-	<class name="java/security/interfaces/DSAKey" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getParams()Ljava/security/interfaces/DSAParams;"/>
-	</class>
-	<class name="java/security/interfaces/DSAKeyPairGenerator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="initialize(IZLjava/security/SecureRandom;)V"/>
-		<method name="initialize(Ljava/security/interfaces/DSAParams;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="java/security/interfaces/DSAParams" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getG()Ljava/math/BigInteger;"/>
-		<method name="getP()Ljava/math/BigInteger;"/>
-		<method name="getQ()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/interfaces/DSAPrivateKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PrivateKey"/>
-		<implements name="java/security/interfaces/DSAKey"/>
-		<method name="getX()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/interfaces/DSAPublicKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PublicKey"/>
-		<implements name="java/security/interfaces/DSAKey"/>
-		<method name="getY()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/interfaces/ECKey" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getParams()Ljava/security/spec/ECParameterSpec;"/>
-	</class>
-	<class name="java/security/interfaces/ECPrivateKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PrivateKey"/>
-		<implements name="java/security/interfaces/ECKey"/>
-		<method name="getS()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/interfaces/ECPublicKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PublicKey"/>
-		<implements name="java/security/interfaces/ECKey"/>
-		<method name="getW()Ljava/security/spec/ECPoint;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/interfaces/RSAKey" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getModulus()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/interfaces/RSAMultiPrimePrivateCrtKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/interfaces/RSAPrivateKey"/>
-		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
-		<method name="getOtherPrimeInfo()[Ljava/security/spec/RSAOtherPrimeInfo;"/>
-		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
-		<method name="getPrimeP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
-		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/interfaces/RSAPrivateCrtKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/interfaces/RSAPrivateKey"/>
-		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
-		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
-		<method name="getPrimeP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
-		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/interfaces/RSAPrivateKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PrivateKey"/>
-		<implements name="java/security/interfaces/RSAKey"/>
-		<method name="getPrivateExponent()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/interfaces/RSAPublicKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PublicKey"/>
-		<implements name="java/security/interfaces/RSAKey"/>
-		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="java/security/spec/AlgorithmParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/security/spec/DSAParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/interfaces/DSAParams"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-	</class>
-	<class name="java/security/spec/DSAPrivateKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getG()Ljava/math/BigInteger;"/>
-		<method name="getP()Ljava/math/BigInteger;"/>
-		<method name="getQ()Ljava/math/BigInteger;"/>
-		<method name="getX()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/DSAPublicKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getG()Ljava/math/BigInteger;"/>
-		<method name="getP()Ljava/math/BigInteger;"/>
-		<method name="getQ()Ljava/math/BigInteger;"/>
-		<method name="getY()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/ECField" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getFieldSize()I"/>
-	</class>
-	<class name="java/security/spec/ECFieldF2m" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/ECField"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/math/BigInteger;)V"/>
-		<method name="&lt;init>(I[I)V"/>
-		<method name="getM()I"/>
-		<method name="getMidTermsOfReductionPolynomial()[I"/>
-		<method name="getReductionPolynomial()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/ECFieldFp" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/ECField"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;)V"/>
-		<method name="getP()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/ECGenParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/spec/ECParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(Ljava/security/spec/EllipticCurve;Ljava/security/spec/ECPoint;Ljava/math/BigInteger;I)V"/>
-		<method name="getCofactor()I"/>
-		<method name="getCurve()Ljava/security/spec/EllipticCurve;"/>
-		<method name="getGenerator()Ljava/security/spec/ECPoint;"/>
-		<method name="getOrder()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/ECPoint" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getAffineX()Ljava/math/BigInteger;"/>
-		<method name="getAffineY()Ljava/math/BigInteger;"/>
-		<field name="POINT_INFINITY"/>
-	</class>
-	<class name="java/security/spec/ECPrivateKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/security/spec/ECParameterSpec;)V"/>
-		<method name="getParams()Ljava/security/spec/ECParameterSpec;"/>
-		<method name="getS()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/ECPublicKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/security/spec/ECPoint;Ljava/security/spec/ECParameterSpec;)V"/>
-		<method name="getParams()Ljava/security/spec/ECParameterSpec;"/>
-		<method name="getW()Ljava/security/spec/ECPoint;"/>
-	</class>
-	<class name="java/security/spec/EllipticCurve" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="&lt;init>(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;[B)V"/>
-		<method name="getA()Ljava/math/BigInteger;"/>
-		<method name="getB()Ljava/math/BigInteger;"/>
-		<method name="getField()Ljava/security/spec/ECField;"/>
-		<method name="getSeed()[B"/>
-	</class>
-	<class name="java/security/spec/EncodedKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="getEncoded()[B"/>
-		<method name="getFormat()Ljava/lang/String;"/>
-	</class>
-	<class name="java/security/spec/InvalidKeySpecException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/security/spec/InvalidParameterSpecException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/security/spec/KeySpec" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/security/spec/MGF1ParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getDigestAlgorithm()Ljava/lang/String;"/>
-		<field name="SHA1"/>
-		<field name="SHA224" since="26"/>
-		<field name="SHA256"/>
-		<field name="SHA384"/>
-		<field name="SHA512"/>
-	</class>
-	<class name="java/security/spec/PKCS8EncodedKeySpec" since="1">
-		<extends name="java/security/spec/EncodedKeySpec"/>
-		<method name="&lt;init>([B)V"/>
-	</class>
-	<class name="java/security/spec/PSSParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;II)V"/>
-		<method name="getDigestAlgorithm()Ljava/lang/String;"/>
-		<method name="getMGFAlgorithm()Ljava/lang/String;"/>
-		<method name="getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;"/>
-		<method name="getSaltLength()I"/>
-		<method name="getTrailerField()I"/>
-		<field name="DEFAULT"/>
-	</class>
-	<class name="java/security/spec/RSAKeyGenParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(ILjava/math/BigInteger;)V"/>
-		<method name="getKeysize()I"/>
-		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
-		<field name="F0"/>
-		<field name="F4"/>
-	</class>
-	<class name="java/security/spec/RSAMultiPrimePrivateCrtKeySpec" since="1">
-		<extends name="java/security/spec/RSAPrivateKeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;)V"/>
-		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
-		<method name="getOtherPrimeInfo()[Ljava/security/spec/RSAOtherPrimeInfo;"/>
-		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
-		<method name="getPrimeP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
-		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/RSAOtherPrimeInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
-		<method name="getExponent()Ljava/math/BigInteger;"/>
-		<method name="getPrime()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/RSAPrivateCrtKeySpec" since="1">
-		<extends name="java/security/spec/RSAPrivateKeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
-		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
-		<method name="getPrimeP()Ljava/math/BigInteger;"/>
-		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
-		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/RSAPrivateKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getModulus()Ljava/math/BigInteger;"/>
-		<method name="getPrivateExponent()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/RSAPublicKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getModulus()Ljava/math/BigInteger;"/>
-		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="java/security/spec/X509EncodedKeySpec" since="1">
-		<extends name="java/security/spec/EncodedKeySpec"/>
-		<method name="&lt;init>([B)V"/>
-	</class>
-	<class name="java/sql/Array" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="free()V" since="9"/>
-		<method name="getArray()Ljava/lang/Object;"/>
-		<method name="getArray(JI)Ljava/lang/Object;"/>
-		<method name="getArray(JILjava/util/Map;)Ljava/lang/Object;"/>
-		<method name="getArray(Ljava/util/Map;)Ljava/lang/Object;"/>
-		<method name="getBaseType()I"/>
-		<method name="getBaseTypeName()Ljava/lang/String;"/>
-		<method name="getResultSet()Ljava/sql/ResultSet;"/>
-		<method name="getResultSet(JI)Ljava/sql/ResultSet;"/>
-		<method name="getResultSet(JILjava/util/Map;)Ljava/sql/ResultSet;"/>
-		<method name="getResultSet(Ljava/util/Map;)Ljava/sql/ResultSet;"/>
-	</class>
-	<class name="java/sql/BatchUpdateException" since="1">
-		<extends name="java/sql/SQLException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I[I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I[ILjava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;[I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;[ILjava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/String;[I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;[ILjava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>([I)V"/>
-		<method name="&lt;init>([ILjava/lang/Throwable;)V" since="9"/>
-		<method name="getUpdateCounts()[I"/>
-	</class>
-	<class name="java/sql/Blob" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="free()V" since="9"/>
-		<method name="getBinaryStream()Ljava/io/InputStream;"/>
-		<method name="getBinaryStream(JJ)Ljava/io/InputStream;" since="9"/>
-		<method name="getBytes(JI)[B"/>
-		<method name="length()J"/>
-		<method name="position(Ljava/sql/Blob;J)J"/>
-		<method name="position([BJ)J"/>
-		<method name="setBinaryStream(J)Ljava/io/OutputStream;"/>
-		<method name="setBytes(J[B)I"/>
-		<method name="setBytes(J[BII)I"/>
-		<method name="truncate(J)V"/>
-	</class>
-	<class name="java/sql/CallableStatement" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/PreparedStatement"/>
-		<method name="getArray(I)Ljava/sql/Array;"/>
-		<method name="getArray(Ljava/lang/String;)Ljava/sql/Array;"/>
-		<method name="getBigDecimal(I)Ljava/math/BigDecimal;"/>
-		<method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="16"/>
-		<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;"/>
-		<method name="getBlob(I)Ljava/sql/Blob;"/>
-		<method name="getBlob(Ljava/lang/String;)Ljava/sql/Blob;"/>
-		<method name="getBoolean(I)Z"/>
-		<method name="getBoolean(Ljava/lang/String;)Z"/>
-		<method name="getByte(I)B"/>
-		<method name="getByte(Ljava/lang/String;)B"/>
-		<method name="getBytes(I)[B"/>
-		<method name="getBytes(Ljava/lang/String;)[B"/>
-		<method name="getCharacterStream(I)Ljava/io/Reader;" since="9"/>
-		<method name="getCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9"/>
-		<method name="getClob(I)Ljava/sql/Clob;"/>
-		<method name="getClob(Ljava/lang/String;)Ljava/sql/Clob;"/>
-		<method name="getDate(I)Ljava/sql/Date;"/>
-		<method name="getDate(ILjava/util/Calendar;)Ljava/sql/Date;"/>
-		<method name="getDate(Ljava/lang/String;)Ljava/sql/Date;"/>
-		<method name="getDate(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Date;"/>
-		<method name="getDouble(I)D"/>
-		<method name="getDouble(Ljava/lang/String;)D"/>
-		<method name="getFloat(I)F"/>
-		<method name="getFloat(Ljava/lang/String;)F"/>
-		<method name="getInt(I)I"/>
-		<method name="getInt(Ljava/lang/String;)I"/>
-		<method name="getLong(I)J"/>
-		<method name="getLong(Ljava/lang/String;)J"/>
-		<method name="getNCharacterStream(I)Ljava/io/Reader;" since="9"/>
-		<method name="getNCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9"/>
-		<method name="getNClob(I)Ljava/sql/NClob;" since="9"/>
-		<method name="getNClob(Ljava/lang/String;)Ljava/sql/NClob;" since="9"/>
-		<method name="getNString(I)Ljava/lang/String;" since="9"/>
-		<method name="getNString(Ljava/lang/String;)Ljava/lang/String;" since="9"/>
-		<method name="getObject(I)Ljava/lang/Object;"/>
-		<method name="getObject(ILjava/util/Map;)Ljava/lang/Object;"/>
-		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getObject(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/Object;"/>
-		<method name="getRef(I)Ljava/sql/Ref;"/>
-		<method name="getRef(Ljava/lang/String;)Ljava/sql/Ref;"/>
-		<method name="getRowId(I)Ljava/sql/RowId;" since="9"/>
-		<method name="getRowId(Ljava/lang/String;)Ljava/sql/RowId;" since="9"/>
-		<method name="getSQLXML(I)Ljava/sql/SQLXML;" since="9"/>
-		<method name="getSQLXML(Ljava/lang/String;)Ljava/sql/SQLXML;" since="9"/>
-		<method name="getShort(I)S"/>
-		<method name="getShort(Ljava/lang/String;)S"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getTime(I)Ljava/sql/Time;"/>
-		<method name="getTime(ILjava/util/Calendar;)Ljava/sql/Time;"/>
-		<method name="getTime(Ljava/lang/String;)Ljava/sql/Time;"/>
-		<method name="getTime(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Time;"/>
-		<method name="getTimestamp(I)Ljava/sql/Timestamp;"/>
-		<method name="getTimestamp(ILjava/util/Calendar;)Ljava/sql/Timestamp;"/>
-		<method name="getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;"/>
-		<method name="getTimestamp(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Timestamp;"/>
-		<method name="getURL(I)Ljava/net/URL;"/>
-		<method name="getURL(Ljava/lang/String;)Ljava/net/URL;"/>
-		<method name="registerOutParameter(II)V"/>
-		<method name="registerOutParameter(III)V"/>
-		<method name="registerOutParameter(IILjava/lang/String;)V"/>
-		<method name="registerOutParameter(Ljava/lang/String;I)V"/>
-		<method name="registerOutParameter(Ljava/lang/String;II)V"/>
-		<method name="registerOutParameter(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
-		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
-		<method name="setBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V"/>
-		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
-		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
-		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
-		<method name="setBlob(Ljava/lang/String;Ljava/sql/Blob;)V" since="9"/>
-		<method name="setBoolean(Ljava/lang/String;Z)V"/>
-		<method name="setByte(Ljava/lang/String;B)V"/>
-		<method name="setBytes(Ljava/lang/String;[B)V"/>
-		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V"/>
-		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="setClob(Ljava/lang/String;Ljava/sql/Clob;)V" since="9"/>
-		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;)V"/>
-		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;Ljava/util/Calendar;)V"/>
-		<method name="setDouble(Ljava/lang/String;D)V"/>
-		<method name="setFloat(Ljava/lang/String;F)V"/>
-		<method name="setInt(Ljava/lang/String;I)V"/>
-		<method name="setLong(Ljava/lang/String;J)V"/>
-		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="setNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9"/>
-		<method name="setNString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
-		<method name="setNull(Ljava/lang/String;I)V"/>
-		<method name="setNull(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;I)V"/>
-		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;II)V"/>
-		<method name="setRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9"/>
-		<method name="setSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9"/>
-		<method name="setShort(Ljava/lang/String;S)V"/>
-		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;)V"/>
-		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;Ljava/util/Calendar;)V"/>
-		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V"/>
-		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;Ljava/util/Calendar;)V"/>
-		<method name="setURL(Ljava/lang/String;Ljava/net/URL;)V"/>
-		<method name="wasNull()Z"/>
-	</class>
-	<class name="java/sql/ClientInfoStatus" since="9">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/sql/ClientInfoStatus;"/>
-		<method name="values()[Ljava/sql/ClientInfoStatus;"/>
-		<field name="REASON_UNKNOWN"/>
-		<field name="REASON_UNKNOWN_PROPERTY"/>
-		<field name="REASON_VALUE_INVALID"/>
-		<field name="REASON_VALUE_TRUNCATED"/>
-	</class>
-	<class name="java/sql/Clob" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="free()V" since="9"/>
-		<method name="getAsciiStream()Ljava/io/InputStream;"/>
-		<method name="getCharacterStream()Ljava/io/Reader;"/>
-		<method name="getCharacterStream(JJ)Ljava/io/Reader;" since="9"/>
-		<method name="getSubString(JI)Ljava/lang/String;"/>
-		<method name="length()J"/>
-		<method name="position(Ljava/lang/String;J)J"/>
-		<method name="position(Ljava/sql/Clob;J)J"/>
-		<method name="setAsciiStream(J)Ljava/io/OutputStream;"/>
-		<method name="setCharacterStream(J)Ljava/io/Writer;"/>
-		<method name="setString(JLjava/lang/String;)I"/>
-		<method name="setString(JLjava/lang/String;II)I"/>
-		<method name="truncate(J)V"/>
-	</class>
-	<class name="java/sql/Connection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<implements name="java/sql/Wrapper" since="9"/>
-		<method name="clearWarnings()V"/>
-		<method name="close()V"/>
-		<method name="commit()V"/>
-		<method name="createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;" since="9"/>
-		<method name="createBlob()Ljava/sql/Blob;" since="9"/>
-		<method name="createClob()Ljava/sql/Clob;" since="9"/>
-		<method name="createNClob()Ljava/sql/NClob;" since="9"/>
-		<method name="createSQLXML()Ljava/sql/SQLXML;" since="9"/>
-		<method name="createStatement()Ljava/sql/Statement;"/>
-		<method name="createStatement(II)Ljava/sql/Statement;"/>
-		<method name="createStatement(III)Ljava/sql/Statement;"/>
-		<method name="createStruct(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Struct;" since="9"/>
-		<method name="getAutoCommit()Z"/>
-		<method name="getCatalog()Ljava/lang/String;"/>
-		<method name="getClientInfo()Ljava/util/Properties;" since="9"/>
-		<method name="getClientInfo(Ljava/lang/String;)Ljava/lang/String;" since="9"/>
-		<method name="getHoldability()I"/>
-		<method name="getMetaData()Ljava/sql/DatabaseMetaData;"/>
-		<method name="getTransactionIsolation()I"/>
-		<method name="getTypeMap()Ljava/util/Map;"/>
-		<method name="getWarnings()Ljava/sql/SQLWarning;"/>
-		<method name="isClosed()Z"/>
-		<method name="isReadOnly()Z"/>
-		<method name="isValid(I)Z" since="9"/>
-		<method name="nativeSQL(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="prepareCall(Ljava/lang/String;)Ljava/sql/CallableStatement;"/>
-		<method name="prepareCall(Ljava/lang/String;II)Ljava/sql/CallableStatement;"/>
-		<method name="prepareCall(Ljava/lang/String;III)Ljava/sql/CallableStatement;"/>
-		<method name="prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;"/>
-		<method name="prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;"/>
-		<method name="prepareStatement(Ljava/lang/String;II)Ljava/sql/PreparedStatement;"/>
-		<method name="prepareStatement(Ljava/lang/String;III)Ljava/sql/PreparedStatement;"/>
-		<method name="prepareStatement(Ljava/lang/String;[I)Ljava/sql/PreparedStatement;"/>
-		<method name="prepareStatement(Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/PreparedStatement;"/>
-		<method name="releaseSavepoint(Ljava/sql/Savepoint;)V"/>
-		<method name="rollback()V"/>
-		<method name="rollback(Ljava/sql/Savepoint;)V"/>
-		<method name="setAutoCommit(Z)V"/>
-		<method name="setCatalog(Ljava/lang/String;)V"/>
-		<method name="setClientInfo(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
-		<method name="setClientInfo(Ljava/util/Properties;)V" since="9"/>
-		<method name="setHoldability(I)V"/>
-		<method name="setReadOnly(Z)V"/>
-		<method name="setSavepoint()Ljava/sql/Savepoint;"/>
-		<method name="setSavepoint(Ljava/lang/String;)Ljava/sql/Savepoint;"/>
-		<method name="setTransactionIsolation(I)V"/>
-		<method name="setTypeMap(Ljava/util/Map;)V"/>
-		<field name="TRANSACTION_NONE"/>
-		<field name="TRANSACTION_READ_COMMITTED"/>
-		<field name="TRANSACTION_READ_UNCOMMITTED"/>
-		<field name="TRANSACTION_REPEATABLE_READ"/>
-		<field name="TRANSACTION_SERIALIZABLE"/>
-	</class>
-	<class name="java/sql/DataTruncation" since="1">
-		<extends name="java/sql/SQLWarning"/>
-		<method name="&lt;init>(IZZII)V"/>
-		<method name="&lt;init>(IZZIILjava/lang/Throwable;)V" since="9"/>
-		<method name="getDataSize()I"/>
-		<method name="getIndex()I"/>
-		<method name="getParameter()Z"/>
-		<method name="getRead()Z"/>
-		<method name="getTransferSize()I"/>
-	</class>
-	<class name="java/sql/DatabaseMetaData" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/Wrapper" since="9"/>
-		<method name="allProceduresAreCallable()Z"/>
-		<method name="allTablesAreSelectable()Z"/>
-		<method name="autoCommitFailureClosesAllResultSets()Z" since="9"/>
-		<method name="dataDefinitionCausesTransactionCommit()Z"/>
-		<method name="dataDefinitionIgnoredInTransactions()Z"/>
-		<method name="deletesAreDetected(I)Z"/>
-		<method name="doesMaxRowSizeIncludeBlobs()Z"/>
-		<method name="getAttributes(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getBestRowIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)Ljava/sql/ResultSet;"/>
-		<method name="getCatalogSeparator()Ljava/lang/String;"/>
-		<method name="getCatalogTerm()Ljava/lang/String;"/>
-		<method name="getCatalogs()Ljava/sql/ResultSet;"/>
-		<method name="getClientInfoProperties()Ljava/sql/ResultSet;" since="9"/>
-		<method name="getColumnPrivileges(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getConnection()Ljava/sql/Connection;"/>
-		<method name="getCrossReference(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getDatabaseMajorVersion()I"/>
-		<method name="getDatabaseMinorVersion()I"/>
-		<method name="getDatabaseProductName()Ljava/lang/String;"/>
-		<method name="getDatabaseProductVersion()Ljava/lang/String;"/>
-		<method name="getDefaultTransactionIsolation()I"/>
-		<method name="getDriverMajorVersion()I"/>
-		<method name="getDriverMinorVersion()I"/>
-		<method name="getDriverName()Ljava/lang/String;"/>
-		<method name="getDriverVersion()Ljava/lang/String;"/>
-		<method name="getExportedKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getExtraNameCharacters()Ljava/lang/String;"/>
-		<method name="getFunctionColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9"/>
-		<method name="getFunctions(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9"/>
-		<method name="getIdentifierQuoteString()Ljava/lang/String;"/>
-		<method name="getImportedKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getIndexInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/sql/ResultSet;"/>
-		<method name="getJDBCMajorVersion()I"/>
-		<method name="getJDBCMinorVersion()I"/>
-		<method name="getMaxBinaryLiteralLength()I"/>
-		<method name="getMaxCatalogNameLength()I"/>
-		<method name="getMaxCharLiteralLength()I"/>
-		<method name="getMaxColumnNameLength()I"/>
-		<method name="getMaxColumnsInGroupBy()I"/>
-		<method name="getMaxColumnsInIndex()I"/>
-		<method name="getMaxColumnsInOrderBy()I"/>
-		<method name="getMaxColumnsInSelect()I"/>
-		<method name="getMaxColumnsInTable()I"/>
-		<method name="getMaxConnections()I"/>
-		<method name="getMaxCursorNameLength()I"/>
-		<method name="getMaxIndexLength()I"/>
-		<method name="getMaxProcedureNameLength()I"/>
-		<method name="getMaxRowSize()I"/>
-		<method name="getMaxSchemaNameLength()I"/>
-		<method name="getMaxStatementLength()I"/>
-		<method name="getMaxStatements()I"/>
-		<method name="getMaxTableNameLength()I"/>
-		<method name="getMaxTablesInSelect()I"/>
-		<method name="getMaxUserNameLength()I"/>
-		<method name="getNumericFunctions()Ljava/lang/String;"/>
-		<method name="getPrimaryKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getProcedureColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getProcedureTerm()Ljava/lang/String;"/>
-		<method name="getProcedures(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getResultSetHoldability()I"/>
-		<method name="getRowIdLifetime()Ljava/sql/RowIdLifetime;" since="9"/>
-		<method name="getSQLKeywords()Ljava/lang/String;"/>
-		<method name="getSQLStateType()I"/>
-		<method name="getSchemaTerm()Ljava/lang/String;"/>
-		<method name="getSchemas()Ljava/sql/ResultSet;"/>
-		<method name="getSchemas(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9"/>
-		<method name="getSearchStringEscape()Ljava/lang/String;"/>
-		<method name="getStringFunctions()Ljava/lang/String;"/>
-		<method name="getSuperTables(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getSuperTypes(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getSystemFunctions()Ljava/lang/String;"/>
-		<method name="getTablePrivileges(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getTableTypes()Ljava/sql/ResultSet;"/>
-		<method name="getTables(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="getTimeDateFunctions()Ljava/lang/String;"/>
-		<method name="getTypeInfo()Ljava/sql/ResultSet;"/>
-		<method name="getUDTs(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[I)Ljava/sql/ResultSet;"/>
-		<method name="getURL()Ljava/lang/String;"/>
-		<method name="getUserName()Ljava/lang/String;"/>
-		<method name="getVersionColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="insertsAreDetected(I)Z"/>
-		<method name="isCatalogAtStart()Z"/>
-		<method name="isReadOnly()Z"/>
-		<method name="locatorsUpdateCopy()Z"/>
-		<method name="nullPlusNonNullIsNull()Z"/>
-		<method name="nullsAreSortedAtEnd()Z"/>
-		<method name="nullsAreSortedAtStart()Z"/>
-		<method name="nullsAreSortedHigh()Z"/>
-		<method name="nullsAreSortedLow()Z"/>
-		<method name="othersDeletesAreVisible(I)Z"/>
-		<method name="othersInsertsAreVisible(I)Z"/>
-		<method name="othersUpdatesAreVisible(I)Z"/>
-		<method name="ownDeletesAreVisible(I)Z"/>
-		<method name="ownInsertsAreVisible(I)Z"/>
-		<method name="ownUpdatesAreVisible(I)Z"/>
-		<method name="storesLowerCaseIdentifiers()Z"/>
-		<method name="storesLowerCaseQuotedIdentifiers()Z"/>
-		<method name="storesMixedCaseIdentifiers()Z"/>
-		<method name="storesMixedCaseQuotedIdentifiers()Z"/>
-		<method name="storesUpperCaseIdentifiers()Z"/>
-		<method name="storesUpperCaseQuotedIdentifiers()Z"/>
-		<method name="supportsANSI92EntryLevelSQL()Z"/>
-		<method name="supportsANSI92FullSQL()Z"/>
-		<method name="supportsANSI92IntermediateSQL()Z"/>
-		<method name="supportsAlterTableWithAddColumn()Z"/>
-		<method name="supportsAlterTableWithDropColumn()Z"/>
-		<method name="supportsBatchUpdates()Z"/>
-		<method name="supportsCatalogsInDataManipulation()Z"/>
-		<method name="supportsCatalogsInIndexDefinitions()Z"/>
-		<method name="supportsCatalogsInPrivilegeDefinitions()Z"/>
-		<method name="supportsCatalogsInProcedureCalls()Z"/>
-		<method name="supportsCatalogsInTableDefinitions()Z"/>
-		<method name="supportsColumnAliasing()Z"/>
-		<method name="supportsConvert()Z"/>
-		<method name="supportsConvert(II)Z"/>
-		<method name="supportsCoreSQLGrammar()Z"/>
-		<method name="supportsCorrelatedSubqueries()Z"/>
-		<method name="supportsDataDefinitionAndDataManipulationTransactions()Z"/>
-		<method name="supportsDataManipulationTransactionsOnly()Z"/>
-		<method name="supportsDifferentTableCorrelationNames()Z"/>
-		<method name="supportsExpressionsInOrderBy()Z"/>
-		<method name="supportsExtendedSQLGrammar()Z"/>
-		<method name="supportsFullOuterJoins()Z"/>
-		<method name="supportsGetGeneratedKeys()Z"/>
-		<method name="supportsGroupBy()Z"/>
-		<method name="supportsGroupByBeyondSelect()Z"/>
-		<method name="supportsGroupByUnrelated()Z"/>
-		<method name="supportsIntegrityEnhancementFacility()Z"/>
-		<method name="supportsLikeEscapeClause()Z"/>
-		<method name="supportsLimitedOuterJoins()Z"/>
-		<method name="supportsMinimumSQLGrammar()Z"/>
-		<method name="supportsMixedCaseIdentifiers()Z"/>
-		<method name="supportsMixedCaseQuotedIdentifiers()Z"/>
-		<method name="supportsMultipleOpenResults()Z"/>
-		<method name="supportsMultipleResultSets()Z"/>
-		<method name="supportsMultipleTransactions()Z"/>
-		<method name="supportsNamedParameters()Z"/>
-		<method name="supportsNonNullableColumns()Z"/>
-		<method name="supportsOpenCursorsAcrossCommit()Z"/>
-		<method name="supportsOpenCursorsAcrossRollback()Z"/>
-		<method name="supportsOpenStatementsAcrossCommit()Z"/>
-		<method name="supportsOpenStatementsAcrossRollback()Z"/>
-		<method name="supportsOrderByUnrelated()Z"/>
-		<method name="supportsOuterJoins()Z"/>
-		<method name="supportsPositionedDelete()Z"/>
-		<method name="supportsPositionedUpdate()Z"/>
-		<method name="supportsResultSetConcurrency(II)Z"/>
-		<method name="supportsResultSetHoldability(I)Z"/>
-		<method name="supportsResultSetType(I)Z"/>
-		<method name="supportsSavepoints()Z"/>
-		<method name="supportsSchemasInDataManipulation()Z"/>
-		<method name="supportsSchemasInIndexDefinitions()Z"/>
-		<method name="supportsSchemasInPrivilegeDefinitions()Z"/>
-		<method name="supportsSchemasInProcedureCalls()Z"/>
-		<method name="supportsSchemasInTableDefinitions()Z"/>
-		<method name="supportsSelectForUpdate()Z"/>
-		<method name="supportsStatementPooling()Z"/>
-		<method name="supportsStoredFunctionsUsingCallSyntax()Z" since="9"/>
-		<method name="supportsStoredProcedures()Z"/>
-		<method name="supportsSubqueriesInComparisons()Z"/>
-		<method name="supportsSubqueriesInExists()Z"/>
-		<method name="supportsSubqueriesInIns()Z"/>
-		<method name="supportsSubqueriesInQuantifieds()Z"/>
-		<method name="supportsTableCorrelationNames()Z"/>
-		<method name="supportsTransactionIsolationLevel(I)Z"/>
-		<method name="supportsTransactions()Z"/>
-		<method name="supportsUnion()Z"/>
-		<method name="supportsUnionAll()Z"/>
-		<method name="updatesAreDetected(I)Z"/>
-		<method name="usesLocalFilePerTable()Z"/>
-		<method name="usesLocalFiles()Z"/>
-		<field name="attributeNoNulls"/>
-		<field name="attributeNullable"/>
-		<field name="attributeNullableUnknown"/>
-		<field name="bestRowNotPseudo"/>
-		<field name="bestRowPseudo"/>
-		<field name="bestRowSession"/>
-		<field name="bestRowTemporary"/>
-		<field name="bestRowTransaction"/>
-		<field name="bestRowUnknown"/>
-		<field name="columnNoNulls"/>
-		<field name="columnNullable"/>
-		<field name="columnNullableUnknown"/>
-		<field name="functionColumnIn" since="9"/>
-		<field name="functionColumnInOut" since="9"/>
-		<field name="functionColumnOut" since="9"/>
-		<field name="functionColumnResult" since="9"/>
-		<field name="functionColumnUnknown" since="9"/>
-		<field name="functionNoNulls" since="9"/>
-		<field name="functionNoTable" since="9"/>
-		<field name="functionNullable" since="9"/>
-		<field name="functionNullableUnknown" since="9"/>
-		<field name="functionResultUnknown" since="9"/>
-		<field name="functionReturn" since="9"/>
-		<field name="functionReturnsTable" since="9"/>
-		<field name="importedKeyCascade"/>
-		<field name="importedKeyInitiallyDeferred"/>
-		<field name="importedKeyInitiallyImmediate"/>
-		<field name="importedKeyNoAction"/>
-		<field name="importedKeyNotDeferrable"/>
-		<field name="importedKeyRestrict"/>
-		<field name="importedKeySetDefault"/>
-		<field name="importedKeySetNull"/>
-		<field name="procedureColumnIn"/>
-		<field name="procedureColumnInOut"/>
-		<field name="procedureColumnOut"/>
-		<field name="procedureColumnResult"/>
-		<field name="procedureColumnReturn"/>
-		<field name="procedureColumnUnknown"/>
-		<field name="procedureNoNulls"/>
-		<field name="procedureNoResult"/>
-		<field name="procedureNullable"/>
-		<field name="procedureNullableUnknown"/>
-		<field name="procedureResultUnknown"/>
-		<field name="procedureReturnsResult"/>
-		<field name="sqlStateSQL" since="9"/>
-		<field name="sqlStateSQL99"/>
-		<field name="sqlStateXOpen"/>
-		<field name="tableIndexClustered"/>
-		<field name="tableIndexHashed"/>
-		<field name="tableIndexOther"/>
-		<field name="tableIndexStatistic"/>
-		<field name="typeNoNulls"/>
-		<field name="typeNullable"/>
-		<field name="typeNullableUnknown"/>
-		<field name="typePredBasic"/>
-		<field name="typePredChar"/>
-		<field name="typePredNone"/>
-		<field name="typeSearchable"/>
-		<field name="versionColumnNotPseudo"/>
-		<field name="versionColumnPseudo"/>
-		<field name="versionColumnUnknown"/>
-	</class>
-	<class name="java/sql/Date" since="1">
-		<extends name="java/util/Date"/>
-		<method name="&lt;init>(III)V" deprecated="16"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Date;"/>
-	</class>
-	<class name="java/sql/Driver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="acceptsURL(Ljava/lang/String;)Z"/>
-		<method name="connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;"/>
-		<method name="getMajorVersion()I"/>
-		<method name="getMinorVersion()I"/>
-		<method name="getPropertyInfo(Ljava/lang/String;Ljava/util/Properties;)[Ljava/sql/DriverPropertyInfo;"/>
-		<method name="jdbcCompliant()Z"/>
-	</class>
-	<class name="java/sql/DriverManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="deregisterDriver(Ljava/sql/Driver;)V"/>
-		<method name="getConnection(Ljava/lang/String;)Ljava/sql/Connection;"/>
-		<method name="getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;"/>
-		<method name="getConnection(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;"/>
-		<method name="getDriver(Ljava/lang/String;)Ljava/sql/Driver;"/>
-		<method name="getDrivers()Ljava/util/Enumeration;"/>
-		<method name="getLogStream()Ljava/io/PrintStream;" deprecated="16"/>
-		<method name="getLogWriter()Ljava/io/PrintWriter;"/>
-		<method name="getLoginTimeout()I"/>
-		<method name="println(Ljava/lang/String;)V"/>
-		<method name="registerDriver(Ljava/sql/Driver;)V"/>
-		<method name="setLogStream(Ljava/io/PrintStream;)V" deprecated="16"/>
-		<method name="setLogWriter(Ljava/io/PrintWriter;)V"/>
-		<method name="setLoginTimeout(I)V"/>
-	</class>
-	<class name="java/sql/DriverPropertyInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="choices"/>
-		<field name="description"/>
-		<field name="name"/>
-		<field name="required"/>
-		<field name="value"/>
-	</class>
-	<class name="java/sql/NClob" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/Clob"/>
-	</class>
-	<class name="java/sql/ParameterMetaData" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/Wrapper" since="9"/>
-		<method name="getParameterClassName(I)Ljava/lang/String;"/>
-		<method name="getParameterCount()I"/>
-		<method name="getParameterMode(I)I"/>
-		<method name="getParameterType(I)I"/>
-		<method name="getParameterTypeName(I)Ljava/lang/String;"/>
-		<method name="getPrecision(I)I"/>
-		<method name="getScale(I)I"/>
-		<method name="isNullable(I)I"/>
-		<method name="isSigned(I)Z"/>
-		<field name="parameterModeIn"/>
-		<field name="parameterModeInOut"/>
-		<field name="parameterModeOut"/>
-		<field name="parameterModeUnknown"/>
-		<field name="parameterNoNulls"/>
-		<field name="parameterNullable"/>
-		<field name="parameterNullableUnknown"/>
-	</class>
-	<class name="java/sql/PreparedStatement" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/Statement"/>
-		<method name="addBatch()V"/>
-		<method name="clearParameters()V"/>
-		<method name="execute()Z"/>
-		<method name="executeQuery()Ljava/sql/ResultSet;"/>
-		<method name="executeUpdate()I"/>
-		<method name="getMetaData()Ljava/sql/ResultSetMetaData;"/>
-		<method name="getParameterMetaData()Ljava/sql/ParameterMetaData;"/>
-		<method name="setArray(ILjava/sql/Array;)V"/>
-		<method name="setAsciiStream(ILjava/io/InputStream;)V" since="9"/>
-		<method name="setAsciiStream(ILjava/io/InputStream;I)V"/>
-		<method name="setAsciiStream(ILjava/io/InputStream;J)V" since="9"/>
-		<method name="setBigDecimal(ILjava/math/BigDecimal;)V"/>
-		<method name="setBinaryStream(ILjava/io/InputStream;)V" since="9"/>
-		<method name="setBinaryStream(ILjava/io/InputStream;I)V"/>
-		<method name="setBinaryStream(ILjava/io/InputStream;J)V" since="9"/>
-		<method name="setBlob(ILjava/io/InputStream;)V" since="9"/>
-		<method name="setBlob(ILjava/io/InputStream;J)V" since="9"/>
-		<method name="setBlob(ILjava/sql/Blob;)V"/>
-		<method name="setBoolean(IZ)V"/>
-		<method name="setByte(IB)V"/>
-		<method name="setBytes(I[B)V"/>
-		<method name="setCharacterStream(ILjava/io/Reader;)V" since="9"/>
-		<method name="setCharacterStream(ILjava/io/Reader;I)V"/>
-		<method name="setCharacterStream(ILjava/io/Reader;J)V" since="9"/>
-		<method name="setClob(ILjava/io/Reader;)V" since="9"/>
-		<method name="setClob(ILjava/io/Reader;J)V" since="9"/>
-		<method name="setClob(ILjava/sql/Clob;)V"/>
-		<method name="setDate(ILjava/sql/Date;)V"/>
-		<method name="setDate(ILjava/sql/Date;Ljava/util/Calendar;)V"/>
-		<method name="setDouble(ID)V"/>
-		<method name="setFloat(IF)V"/>
-		<method name="setInt(II)V"/>
-		<method name="setLong(IJ)V"/>
-		<method name="setNCharacterStream(ILjava/io/Reader;)V" since="9"/>
-		<method name="setNCharacterStream(ILjava/io/Reader;J)V" since="9"/>
-		<method name="setNClob(ILjava/io/Reader;)V" since="9"/>
-		<method name="setNClob(ILjava/io/Reader;J)V" since="9"/>
-		<method name="setNClob(ILjava/sql/NClob;)V" since="9"/>
-		<method name="setNString(ILjava/lang/String;)V" since="9"/>
-		<method name="setNull(II)V"/>
-		<method name="setNull(IILjava/lang/String;)V"/>
-		<method name="setObject(ILjava/lang/Object;)V"/>
-		<method name="setObject(ILjava/lang/Object;I)V"/>
-		<method name="setObject(ILjava/lang/Object;II)V"/>
-		<method name="setRef(ILjava/sql/Ref;)V"/>
-		<method name="setRowId(ILjava/sql/RowId;)V" since="9"/>
-		<method name="setSQLXML(ILjava/sql/SQLXML;)V" since="9"/>
-		<method name="setShort(IS)V"/>
-		<method name="setString(ILjava/lang/String;)V"/>
-		<method name="setTime(ILjava/sql/Time;)V"/>
-		<method name="setTime(ILjava/sql/Time;Ljava/util/Calendar;)V"/>
-		<method name="setTimestamp(ILjava/sql/Timestamp;)V"/>
-		<method name="setTimestamp(ILjava/sql/Timestamp;Ljava/util/Calendar;)V"/>
-		<method name="setURL(ILjava/net/URL;)V"/>
-		<method name="setUnicodeStream(ILjava/io/InputStream;I)V" deprecated="16"/>
-	</class>
-	<class name="java/sql/Ref" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getBaseTypeName()Ljava/lang/String;"/>
-		<method name="getObject()Ljava/lang/Object;"/>
-		<method name="getObject(Ljava/util/Map;)Ljava/lang/Object;"/>
-		<method name="setObject(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/sql/ResultSet" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<implements name="java/sql/Wrapper" since="9"/>
-		<method name="absolute(I)Z"/>
-		<method name="afterLast()V"/>
-		<method name="beforeFirst()V"/>
-		<method name="cancelRowUpdates()V"/>
-		<method name="clearWarnings()V"/>
-		<method name="close()V"/>
-		<method name="deleteRow()V"/>
-		<method name="findColumn(Ljava/lang/String;)I"/>
-		<method name="first()Z"/>
-		<method name="getArray(I)Ljava/sql/Array;"/>
-		<method name="getArray(Ljava/lang/String;)Ljava/sql/Array;"/>
-		<method name="getAsciiStream(I)Ljava/io/InputStream;"/>
-		<method name="getAsciiStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
-		<method name="getBigDecimal(I)Ljava/math/BigDecimal;"/>
-		<method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="16"/>
-		<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;"/>
-		<method name="getBigDecimal(Ljava/lang/String;I)Ljava/math/BigDecimal;" deprecated="16"/>
-		<method name="getBinaryStream(I)Ljava/io/InputStream;"/>
-		<method name="getBinaryStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
-		<method name="getBlob(I)Ljava/sql/Blob;"/>
-		<method name="getBlob(Ljava/lang/String;)Ljava/sql/Blob;"/>
-		<method name="getBoolean(I)Z"/>
-		<method name="getBoolean(Ljava/lang/String;)Z"/>
-		<method name="getByte(I)B"/>
-		<method name="getByte(Ljava/lang/String;)B"/>
-		<method name="getBytes(I)[B"/>
-		<method name="getBytes(Ljava/lang/String;)[B"/>
-		<method name="getCharacterStream(I)Ljava/io/Reader;"/>
-		<method name="getCharacterStream(Ljava/lang/String;)Ljava/io/Reader;"/>
-		<method name="getClob(I)Ljava/sql/Clob;"/>
-		<method name="getClob(Ljava/lang/String;)Ljava/sql/Clob;"/>
-		<method name="getConcurrency()I"/>
-		<method name="getCursorName()Ljava/lang/String;"/>
-		<method name="getDate(I)Ljava/sql/Date;"/>
-		<method name="getDate(ILjava/util/Calendar;)Ljava/sql/Date;"/>
-		<method name="getDate(Ljava/lang/String;)Ljava/sql/Date;"/>
-		<method name="getDate(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Date;"/>
-		<method name="getDouble(I)D"/>
-		<method name="getDouble(Ljava/lang/String;)D"/>
-		<method name="getFetchDirection()I"/>
-		<method name="getFetchSize()I"/>
-		<method name="getFloat(I)F"/>
-		<method name="getFloat(Ljava/lang/String;)F"/>
-		<method name="getHoldability()I" since="9"/>
-		<method name="getInt(I)I"/>
-		<method name="getInt(Ljava/lang/String;)I"/>
-		<method name="getLong(I)J"/>
-		<method name="getLong(Ljava/lang/String;)J"/>
-		<method name="getMetaData()Ljava/sql/ResultSetMetaData;"/>
-		<method name="getNCharacterStream(I)Ljava/io/Reader;" since="9"/>
-		<method name="getNCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9"/>
-		<method name="getNClob(I)Ljava/sql/NClob;" since="9"/>
-		<method name="getNClob(Ljava/lang/String;)Ljava/sql/NClob;" since="9"/>
-		<method name="getNString(I)Ljava/lang/String;" since="9"/>
-		<method name="getNString(Ljava/lang/String;)Ljava/lang/String;" since="9"/>
-		<method name="getObject(I)Ljava/lang/Object;"/>
-		<method name="getObject(ILjava/util/Map;)Ljava/lang/Object;"/>
-		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getObject(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/Object;"/>
-		<method name="getRef(I)Ljava/sql/Ref;"/>
-		<method name="getRef(Ljava/lang/String;)Ljava/sql/Ref;"/>
-		<method name="getRow()I"/>
-		<method name="getRowId(I)Ljava/sql/RowId;" since="9"/>
-		<method name="getRowId(Ljava/lang/String;)Ljava/sql/RowId;" since="9"/>
-		<method name="getSQLXML(I)Ljava/sql/SQLXML;" since="9"/>
-		<method name="getSQLXML(Ljava/lang/String;)Ljava/sql/SQLXML;" since="9"/>
-		<method name="getShort(I)S"/>
-		<method name="getShort(Ljava/lang/String;)S"/>
-		<method name="getStatement()Ljava/sql/Statement;"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getTime(I)Ljava/sql/Time;"/>
-		<method name="getTime(ILjava/util/Calendar;)Ljava/sql/Time;"/>
-		<method name="getTime(Ljava/lang/String;)Ljava/sql/Time;"/>
-		<method name="getTime(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Time;"/>
-		<method name="getTimestamp(I)Ljava/sql/Timestamp;"/>
-		<method name="getTimestamp(ILjava/util/Calendar;)Ljava/sql/Timestamp;"/>
-		<method name="getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;"/>
-		<method name="getTimestamp(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Timestamp;"/>
-		<method name="getType()I"/>
-		<method name="getURL(I)Ljava/net/URL;"/>
-		<method name="getURL(Ljava/lang/String;)Ljava/net/URL;"/>
-		<method name="getUnicodeStream(I)Ljava/io/InputStream;" deprecated="16"/>
-		<method name="getUnicodeStream(Ljava/lang/String;)Ljava/io/InputStream;" deprecated="16"/>
-		<method name="getWarnings()Ljava/sql/SQLWarning;"/>
-		<method name="insertRow()V"/>
-		<method name="isAfterLast()Z"/>
-		<method name="isBeforeFirst()Z"/>
-		<method name="isClosed()Z" since="9"/>
-		<method name="isFirst()Z"/>
-		<method name="isLast()Z"/>
-		<method name="last()Z"/>
-		<method name="moveToCurrentRow()V"/>
-		<method name="moveToInsertRow()V"/>
-		<method name="next()Z"/>
-		<method name="previous()Z"/>
-		<method name="refreshRow()V"/>
-		<method name="relative(I)Z"/>
-		<method name="rowDeleted()Z"/>
-		<method name="rowInserted()Z"/>
-		<method name="rowUpdated()Z"/>
-		<method name="setFetchDirection(I)V"/>
-		<method name="setFetchSize(I)V"/>
-		<method name="updateArray(ILjava/sql/Array;)V"/>
-		<method name="updateArray(Ljava/lang/String;Ljava/sql/Array;)V"/>
-		<method name="updateAsciiStream(ILjava/io/InputStream;)V" since="9"/>
-		<method name="updateAsciiStream(ILjava/io/InputStream;I)V"/>
-		<method name="updateAsciiStream(ILjava/io/InputStream;J)V" since="9"/>
-		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
-		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
-		<method name="updateBigDecimal(ILjava/math/BigDecimal;)V"/>
-		<method name="updateBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V"/>
-		<method name="updateBinaryStream(ILjava/io/InputStream;)V" since="9"/>
-		<method name="updateBinaryStream(ILjava/io/InputStream;I)V"/>
-		<method name="updateBinaryStream(ILjava/io/InputStream;J)V" since="9"/>
-		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
-		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
-		<method name="updateBlob(ILjava/io/InputStream;)V" since="9"/>
-		<method name="updateBlob(ILjava/io/InputStream;J)V" since="9"/>
-		<method name="updateBlob(ILjava/sql/Blob;)V"/>
-		<method name="updateBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="updateBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
-		<method name="updateBlob(Ljava/lang/String;Ljava/sql/Blob;)V"/>
-		<method name="updateBoolean(IZ)V"/>
-		<method name="updateBoolean(Ljava/lang/String;Z)V"/>
-		<method name="updateByte(IB)V"/>
-		<method name="updateByte(Ljava/lang/String;B)V"/>
-		<method name="updateBytes(I[B)V"/>
-		<method name="updateBytes(Ljava/lang/String;[B)V"/>
-		<method name="updateCharacterStream(ILjava/io/Reader;)V" since="9"/>
-		<method name="updateCharacterStream(ILjava/io/Reader;I)V"/>
-		<method name="updateCharacterStream(ILjava/io/Reader;J)V" since="9"/>
-		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V"/>
-		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="updateClob(ILjava/io/Reader;)V" since="9"/>
-		<method name="updateClob(ILjava/io/Reader;J)V" since="9"/>
-		<method name="updateClob(ILjava/sql/Clob;)V"/>
-		<method name="updateClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="updateClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="updateClob(Ljava/lang/String;Ljava/sql/Clob;)V"/>
-		<method name="updateDate(ILjava/sql/Date;)V"/>
-		<method name="updateDate(Ljava/lang/String;Ljava/sql/Date;)V"/>
-		<method name="updateDouble(ID)V"/>
-		<method name="updateDouble(Ljava/lang/String;D)V"/>
-		<method name="updateFloat(IF)V"/>
-		<method name="updateFloat(Ljava/lang/String;F)V"/>
-		<method name="updateInt(II)V"/>
-		<method name="updateInt(Ljava/lang/String;I)V"/>
-		<method name="updateLong(IJ)V"/>
-		<method name="updateLong(Ljava/lang/String;J)V"/>
-		<method name="updateNCharacterStream(ILjava/io/Reader;)V" since="9"/>
-		<method name="updateNCharacterStream(ILjava/io/Reader;J)V" since="9"/>
-		<method name="updateNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="updateNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="updateNClob(ILjava/io/Reader;)V" since="9"/>
-		<method name="updateNClob(ILjava/io/Reader;J)V" since="9"/>
-		<method name="updateNClob(ILjava/sql/NClob;)V" since="9"/>
-		<method name="updateNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="updateNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="updateNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9"/>
-		<method name="updateNString(ILjava/lang/String;)V" since="9"/>
-		<method name="updateNString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
-		<method name="updateNull(I)V"/>
-		<method name="updateNull(Ljava/lang/String;)V"/>
-		<method name="updateObject(ILjava/lang/Object;)V"/>
-		<method name="updateObject(ILjava/lang/Object;I)V"/>
-		<method name="updateObject(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="updateObject(Ljava/lang/String;Ljava/lang/Object;I)V"/>
-		<method name="updateRef(ILjava/sql/Ref;)V"/>
-		<method name="updateRef(Ljava/lang/String;Ljava/sql/Ref;)V"/>
-		<method name="updateRow()V"/>
-		<method name="updateRowId(ILjava/sql/RowId;)V" since="9"/>
-		<method name="updateRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9"/>
-		<method name="updateSQLXML(ILjava/sql/SQLXML;)V" since="9"/>
-		<method name="updateSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9"/>
-		<method name="updateShort(IS)V"/>
-		<method name="updateShort(Ljava/lang/String;S)V"/>
-		<method name="updateString(ILjava/lang/String;)V"/>
-		<method name="updateString(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="updateTime(ILjava/sql/Time;)V"/>
-		<method name="updateTime(Ljava/lang/String;Ljava/sql/Time;)V"/>
-		<method name="updateTimestamp(ILjava/sql/Timestamp;)V"/>
-		<method name="updateTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V"/>
-		<method name="wasNull()Z"/>
-		<field name="CLOSE_CURSORS_AT_COMMIT"/>
-		<field name="CONCUR_READ_ONLY"/>
-		<field name="CONCUR_UPDATABLE"/>
-		<field name="FETCH_FORWARD"/>
-		<field name="FETCH_REVERSE"/>
-		<field name="FETCH_UNKNOWN"/>
-		<field name="HOLD_CURSORS_OVER_COMMIT"/>
-		<field name="TYPE_FORWARD_ONLY"/>
-		<field name="TYPE_SCROLL_INSENSITIVE"/>
-		<field name="TYPE_SCROLL_SENSITIVE"/>
-	</class>
-	<class name="java/sql/ResultSetMetaData" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/Wrapper" since="9"/>
-		<method name="getCatalogName(I)Ljava/lang/String;"/>
-		<method name="getColumnClassName(I)Ljava/lang/String;"/>
-		<method name="getColumnCount()I"/>
-		<method name="getColumnDisplaySize(I)I"/>
-		<method name="getColumnLabel(I)Ljava/lang/String;"/>
-		<method name="getColumnName(I)Ljava/lang/String;"/>
-		<method name="getColumnType(I)I"/>
-		<method name="getColumnTypeName(I)Ljava/lang/String;"/>
-		<method name="getPrecision(I)I"/>
-		<method name="getScale(I)I"/>
-		<method name="getSchemaName(I)Ljava/lang/String;"/>
-		<method name="getTableName(I)Ljava/lang/String;"/>
-		<method name="isAutoIncrement(I)Z"/>
-		<method name="isCaseSensitive(I)Z"/>
-		<method name="isCurrency(I)Z"/>
-		<method name="isDefinitelyWritable(I)Z"/>
-		<method name="isNullable(I)I"/>
-		<method name="isReadOnly(I)Z"/>
-		<method name="isSearchable(I)Z"/>
-		<method name="isSigned(I)Z"/>
-		<method name="isWritable(I)Z"/>
-		<field name="columnNoNulls"/>
-		<field name="columnNullable"/>
-		<field name="columnNullableUnknown"/>
-	</class>
-	<class name="java/sql/RowId" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="getBytes()[B"/>
-	</class>
-	<class name="java/sql/RowIdLifetime" since="9">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/sql/RowIdLifetime;"/>
-		<method name="values()[Ljava/sql/RowIdLifetime;"/>
-		<field name="ROWID_UNSUPPORTED"/>
-		<field name="ROWID_VALID_FOREVER"/>
-		<field name="ROWID_VALID_OTHER"/>
-		<field name="ROWID_VALID_SESSION"/>
-		<field name="ROWID_VALID_TRANSACTION"/>
-	</class>
-	<class name="java/sql/SQLClientInfoException" since="9">
-		<extends name="java/sql/SQLException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="&lt;init>(Ljava/util/Map;Ljava/lang/Throwable;)V"/>
-		<method name="getFailedProperties()Ljava/util/Map;"/>
-	</class>
-	<class name="java/sql/SQLData" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getSQLTypeName()Ljava/lang/String;"/>
-		<method name="readSQL(Ljava/sql/SQLInput;Ljava/lang/String;)V"/>
-		<method name="writeSQL(Ljava/sql/SQLOutput;)V"/>
-	</class>
-	<class name="java/sql/SQLDataException" since="9">
-		<extends name="java/sql/SQLNonTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLException" since="1">
-		<extends name="java/lang/Exception"/>
-		<implements name="java/lang/Iterable" since="9"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
-		<method name="getErrorCode()I"/>
-		<method name="getNextException()Ljava/sql/SQLException;"/>
-		<method name="getSQLState()Ljava/lang/String;"/>
-		<method name="setNextException(Ljava/sql/SQLException;)V"/>
-	</class>
-	<class name="java/sql/SQLFeatureNotSupportedException" since="9">
-		<extends name="java/sql/SQLNonTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLInput" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="readArray()Ljava/sql/Array;"/>
-		<method name="readAsciiStream()Ljava/io/InputStream;"/>
-		<method name="readBigDecimal()Ljava/math/BigDecimal;"/>
-		<method name="readBinaryStream()Ljava/io/InputStream;"/>
-		<method name="readBlob()Ljava/sql/Blob;"/>
-		<method name="readBoolean()Z"/>
-		<method name="readByte()B"/>
-		<method name="readBytes()[B"/>
-		<method name="readCharacterStream()Ljava/io/Reader;"/>
-		<method name="readClob()Ljava/sql/Clob;"/>
-		<method name="readDate()Ljava/sql/Date;"/>
-		<method name="readDouble()D"/>
-		<method name="readFloat()F"/>
-		<method name="readInt()I"/>
-		<method name="readLong()J"/>
-		<method name="readNClob()Ljava/sql/NClob;" since="9"/>
-		<method name="readNString()Ljava/lang/String;" since="9"/>
-		<method name="readObject()Ljava/lang/Object;"/>
-		<method name="readRef()Ljava/sql/Ref;"/>
-		<method name="readRowId()Ljava/sql/RowId;" since="9"/>
-		<method name="readSQLXML()Ljava/sql/SQLXML;" since="9"/>
-		<method name="readShort()S"/>
-		<method name="readString()Ljava/lang/String;"/>
-		<method name="readTime()Ljava/sql/Time;"/>
-		<method name="readTimestamp()Ljava/sql/Timestamp;"/>
-		<method name="readURL()Ljava/net/URL;"/>
-		<method name="wasNull()Z"/>
-	</class>
-	<class name="java/sql/SQLIntegrityConstraintViolationException" since="9">
-		<extends name="java/sql/SQLNonTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLInvalidAuthorizationSpecException" since="9">
-		<extends name="java/sql/SQLNonTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLNonTransientConnectionException" since="9">
-		<extends name="java/sql/SQLNonTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLNonTransientException" since="9">
-		<extends name="java/sql/SQLException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLOutput" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="writeArray(Ljava/sql/Array;)V"/>
-		<method name="writeAsciiStream(Ljava/io/InputStream;)V"/>
-		<method name="writeBigDecimal(Ljava/math/BigDecimal;)V"/>
-		<method name="writeBinaryStream(Ljava/io/InputStream;)V"/>
-		<method name="writeBlob(Ljava/sql/Blob;)V"/>
-		<method name="writeBoolean(Z)V"/>
-		<method name="writeByte(B)V"/>
-		<method name="writeBytes([B)V"/>
-		<method name="writeCharacterStream(Ljava/io/Reader;)V"/>
-		<method name="writeClob(Ljava/sql/Clob;)V"/>
-		<method name="writeDate(Ljava/sql/Date;)V"/>
-		<method name="writeDouble(D)V"/>
-		<method name="writeFloat(F)V"/>
-		<method name="writeInt(I)V"/>
-		<method name="writeLong(J)V"/>
-		<method name="writeNClob(Ljava/sql/NClob;)V" since="9"/>
-		<method name="writeNString(Ljava/lang/String;)V" since="9"/>
-		<method name="writeObject(Ljava/sql/SQLData;)V"/>
-		<method name="writeRef(Ljava/sql/Ref;)V"/>
-		<method name="writeRowId(Ljava/sql/RowId;)V" since="9"/>
-		<method name="writeSQLXML(Ljava/sql/SQLXML;)V" since="9"/>
-		<method name="writeShort(S)V"/>
-		<method name="writeString(Ljava/lang/String;)V"/>
-		<method name="writeStruct(Ljava/sql/Struct;)V"/>
-		<method name="writeTime(Ljava/sql/Time;)V"/>
-		<method name="writeTimestamp(Ljava/sql/Timestamp;)V"/>
-		<method name="writeURL(Ljava/net/URL;)V"/>
-	</class>
-	<class name="java/sql/SQLPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/sql/SQLRecoverableException" since="9">
-		<extends name="java/sql/SQLException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLSyntaxErrorException" since="9">
-		<extends name="java/sql/SQLNonTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLTimeoutException" since="9">
-		<extends name="java/sql/SQLTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLTransactionRollbackException" since="9">
-		<extends name="java/sql/SQLTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLTransientConnectionException" since="9">
-		<extends name="java/sql/SQLTransientException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLTransientException" since="9">
-		<extends name="java/sql/SQLException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/sql/SQLWarning" since="1">
-		<extends name="java/sql/SQLException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
-		<method name="getNextWarning()Ljava/sql/SQLWarning;"/>
-		<method name="setNextWarning(Ljava/sql/SQLWarning;)V"/>
-	</class>
-	<class name="java/sql/SQLXML" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="free()V"/>
-		<method name="getBinaryStream()Ljava/io/InputStream;"/>
-		<method name="getCharacterStream()Ljava/io/Reader;"/>
-		<method name="getSource(Ljava/lang/Class;)Ljavax/xml/transform/Source;"/>
-		<method name="getString()Ljava/lang/String;"/>
-		<method name="setBinaryStream()Ljava/io/OutputStream;"/>
-		<method name="setCharacterStream()Ljava/io/Writer;"/>
-		<method name="setResult(Ljava/lang/Class;)Ljavax/xml/transform/Result;"/>
-		<method name="setString(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/sql/Savepoint" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getSavepointId()I"/>
-		<method name="getSavepointName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/sql/Statement" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable" since="19"/>
-		<implements name="java/sql/Wrapper" since="9"/>
-		<method name="addBatch(Ljava/lang/String;)V"/>
-		<method name="cancel()V"/>
-		<method name="clearBatch()V"/>
-		<method name="clearWarnings()V"/>
-		<method name="close()V"/>
-		<method name="execute(Ljava/lang/String;)Z"/>
-		<method name="execute(Ljava/lang/String;I)Z"/>
-		<method name="execute(Ljava/lang/String;[I)Z"/>
-		<method name="execute(Ljava/lang/String;[Ljava/lang/String;)Z"/>
-		<method name="executeBatch()[I"/>
-		<method name="executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;"/>
-		<method name="executeUpdate(Ljava/lang/String;)I"/>
-		<method name="executeUpdate(Ljava/lang/String;I)I"/>
-		<method name="executeUpdate(Ljava/lang/String;[I)I"/>
-		<method name="executeUpdate(Ljava/lang/String;[Ljava/lang/String;)I"/>
-		<method name="getConnection()Ljava/sql/Connection;"/>
-		<method name="getFetchDirection()I"/>
-		<method name="getFetchSize()I"/>
-		<method name="getGeneratedKeys()Ljava/sql/ResultSet;"/>
-		<method name="getMaxFieldSize()I"/>
-		<method name="getMaxRows()I"/>
-		<method name="getMoreResults()Z"/>
-		<method name="getMoreResults(I)Z"/>
-		<method name="getQueryTimeout()I"/>
-		<method name="getResultSet()Ljava/sql/ResultSet;"/>
-		<method name="getResultSetConcurrency()I"/>
-		<method name="getResultSetHoldability()I"/>
-		<method name="getResultSetType()I"/>
-		<method name="getUpdateCount()I"/>
-		<method name="getWarnings()Ljava/sql/SQLWarning;"/>
-		<method name="isClosed()Z" since="9"/>
-		<method name="isPoolable()Z" since="9"/>
-		<method name="setCursorName(Ljava/lang/String;)V"/>
-		<method name="setEscapeProcessing(Z)V"/>
-		<method name="setFetchDirection(I)V"/>
-		<method name="setFetchSize(I)V"/>
-		<method name="setMaxFieldSize(I)V"/>
-		<method name="setMaxRows(I)V"/>
-		<method name="setPoolable(Z)V" since="9"/>
-		<method name="setQueryTimeout(I)V"/>
-		<field name="CLOSE_ALL_RESULTS"/>
-		<field name="CLOSE_CURRENT_RESULT"/>
-		<field name="EXECUTE_FAILED"/>
-		<field name="KEEP_CURRENT_RESULT"/>
-		<field name="NO_GENERATED_KEYS"/>
-		<field name="RETURN_GENERATED_KEYS"/>
-		<field name="SUCCESS_NO_INFO"/>
-	</class>
-	<class name="java/sql/Struct" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getAttributes()[Ljava/lang/Object;"/>
-		<method name="getAttributes(Ljava/util/Map;)[Ljava/lang/Object;"/>
-		<method name="getSQLTypeName()Ljava/lang/String;"/>
-	</class>
-	<class name="java/sql/Time" since="1">
-		<extends name="java/util/Date"/>
-		<method name="&lt;init>(III)V" deprecated="16"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Time;"/>
-	</class>
-	<class name="java/sql/Timestamp" since="1">
-		<extends name="java/util/Date"/>
-		<method name="&lt;init>(IIIIIII)V" deprecated="16"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="after(Ljava/sql/Timestamp;)Z"/>
-		<method name="before(Ljava/sql/Timestamp;)Z"/>
-		<method name="compareTo(Ljava/sql/Timestamp;)I"/>
-		<method name="equals(Ljava/sql/Timestamp;)Z"/>
-		<method name="getNanos()I"/>
-		<method name="setNanos(I)V"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Timestamp;"/>
-	</class>
-	<class name="java/sql/Types" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ARRAY"/>
-		<field name="BIGINT"/>
-		<field name="BINARY"/>
-		<field name="BIT"/>
-		<field name="BLOB"/>
-		<field name="BOOLEAN"/>
-		<field name="CHAR"/>
-		<field name="CLOB"/>
-		<field name="DATALINK"/>
-		<field name="DATE"/>
-		<field name="DECIMAL"/>
-		<field name="DISTINCT"/>
-		<field name="DOUBLE"/>
-		<field name="FLOAT"/>
-		<field name="INTEGER"/>
-		<field name="JAVA_OBJECT"/>
-		<field name="LONGNVARCHAR" since="9"/>
-		<field name="LONGVARBINARY"/>
-		<field name="LONGVARCHAR"/>
-		<field name="NCHAR" since="9"/>
-		<field name="NCLOB" since="9"/>
-		<field name="NULL"/>
-		<field name="NUMERIC"/>
-		<field name="NVARCHAR" since="9"/>
-		<field name="OTHER"/>
-		<field name="REAL"/>
-		<field name="REF"/>
-		<field name="ROWID" since="9"/>
-		<field name="SMALLINT"/>
-		<field name="SQLXML" since="9"/>
-		<field name="STRUCT"/>
-		<field name="TIME"/>
-		<field name="TIMESTAMP"/>
-		<field name="TINYINT"/>
-		<field name="VARBINARY"/>
-		<field name="VARCHAR"/>
-	</class>
-	<class name="java/sql/Wrapper" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="isWrapperFor(Ljava/lang/Class;)Z"/>
-		<method name="unwrap(Ljava/lang/Class;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/text/Annotation" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="getValue()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/text/AttributedCharacterIterator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/text/CharacterIterator"/>
-		<method name="getAllAttributeKeys()Ljava/util/Set;"/>
-		<method name="getAttribute(Ljava/text/AttributedCharacterIterator$Attribute;)Ljava/lang/Object;"/>
-		<method name="getAttributes()Ljava/util/Map;"/>
-		<method name="getRunLimit()I"/>
-		<method name="getRunLimit(Ljava/text/AttributedCharacterIterator$Attribute;)I"/>
-		<method name="getRunLimit(Ljava/util/Set;)I"/>
-		<method name="getRunStart()I"/>
-		<method name="getRunStart(Ljava/text/AttributedCharacterIterator$Attribute;)I"/>
-		<method name="getRunStart(Ljava/util/Set;)I"/>
-	</class>
-	<class name="java/text/AttributedCharacterIterator$Attribute" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="readResolve()Ljava/lang/Object;"/>
-		<field name="INPUT_METHOD_SEGMENT"/>
-		<field name="LANGUAGE"/>
-		<field name="READING"/>
-	</class>
-	<class name="java/text/AttributedString" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;)V"/>
-		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;)V"/>
-		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;II)V"/>
-		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;II[Ljava/text/AttributedCharacterIterator$Attribute;)V"/>
-		<method name="addAttribute(Ljava/text/AttributedCharacterIterator$Attribute;Ljava/lang/Object;)V"/>
-		<method name="addAttribute(Ljava/text/AttributedCharacterIterator$Attribute;Ljava/lang/Object;II)V"/>
-		<method name="addAttributes(Ljava/util/Map;II)V"/>
-		<method name="getIterator()Ljava/text/AttributedCharacterIterator;"/>
-		<method name="getIterator([Ljava/text/AttributedCharacterIterator$Attribute;)Ljava/text/AttributedCharacterIterator;"/>
-		<method name="getIterator([Ljava/text/AttributedCharacterIterator$Attribute;II)Ljava/text/AttributedCharacterIterator;"/>
-	</class>
-	<class name="java/text/Bidi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;)V"/>
-		<method name="&lt;init>([CI[BIII)V"/>
-		<method name="baseIsLeftToRight()Z"/>
-		<method name="createLineBidi(II)Ljava/text/Bidi;"/>
-		<method name="getBaseLevel()I"/>
-		<method name="getLength()I"/>
-		<method name="getLevelAt(I)I"/>
-		<method name="getRunCount()I"/>
-		<method name="getRunLevel(I)I"/>
-		<method name="getRunLimit(I)I"/>
-		<method name="getRunStart(I)I"/>
-		<method name="isLeftToRight()Z"/>
-		<method name="isMixed()Z"/>
-		<method name="isRightToLeft()Z"/>
-		<method name="reorderVisually([BI[Ljava/lang/Object;II)V"/>
-		<method name="requiresBidi([CII)Z"/>
-		<field name="DIRECTION_DEFAULT_LEFT_TO_RIGHT"/>
-		<field name="DIRECTION_DEFAULT_RIGHT_TO_LEFT"/>
-		<field name="DIRECTION_LEFT_TO_RIGHT"/>
-		<field name="DIRECTION_RIGHT_TO_LEFT"/>
-	</class>
-	<class name="java/text/BreakIterator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="current()I"/>
-		<method name="first()I"/>
-		<method name="following(I)I"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCharacterInstance()Ljava/text/BreakIterator;"/>
-		<method name="getCharacterInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
-		<method name="getInt([BI)I" removed="9"/>
-		<method name="getLineInstance()Ljava/text/BreakIterator;"/>
-		<method name="getLineInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
-		<method name="getLong([BI)J" removed="9"/>
-		<method name="getSentenceInstance()Ljava/text/BreakIterator;"/>
-		<method name="getSentenceInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
-		<method name="getShort([BI)S" removed="9"/>
-		<method name="getText()Ljava/text/CharacterIterator;"/>
-		<method name="getWordInstance()Ljava/text/BreakIterator;"/>
-		<method name="getWordInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
-		<method name="isBoundary(I)Z"/>
-		<method name="last()I"/>
-		<method name="next()I"/>
-		<method name="next(I)I"/>
-		<method name="preceding(I)I"/>
-		<method name="previous()I"/>
-		<method name="setText(Ljava/lang/String;)V"/>
-		<method name="setText(Ljava/text/CharacterIterator;)V"/>
-		<field name="DONE"/>
-	</class>
-	<class name="java/text/CharacterIterator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="current()C"/>
-		<method name="first()C"/>
-		<method name="getBeginIndex()I"/>
-		<method name="getEndIndex()I"/>
-		<method name="getIndex()I"/>
-		<method name="last()C"/>
-		<method name="next()C"/>
-		<method name="previous()C"/>
-		<method name="setIndex(I)C"/>
-		<field name="DONE"/>
-	</class>
-	<class name="java/text/ChoiceFormat" since="1">
-		<extends name="java/text/NumberFormat"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>([D[Ljava/lang/String;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="getFormats()[Ljava/lang/Object;"/>
-		<method name="getLimits()[D"/>
-		<method name="nextDouble(D)D"/>
-		<method name="nextDouble(DZ)D"/>
-		<method name="previousDouble(D)D"/>
-		<method name="setChoices([D[Ljava/lang/String;)V"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-	</class>
-	<class name="java/text/CollationElementIterator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/icu/text/CollationElementIterator;)V" since="29"/>
-		<method name="getMaxExpansion(I)I"/>
-		<method name="getOffset()I"/>
-		<method name="next()I"/>
-		<method name="previous()I"/>
-		<method name="primaryOrder(I)I"/>
-		<method name="reset()V"/>
-		<method name="secondaryOrder(I)S"/>
-		<method name="setOffset(I)V"/>
-		<method name="setText(Ljava/lang/String;)V"/>
-		<method name="setText(Ljava/text/CharacterIterator;)V"/>
-		<method name="tertiaryOrder(I)S"/>
-		<field name="NULLORDER"/>
-	</class>
-	<class name="java/text/CollationKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="9"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="9"/>
-		<method name="compareTo(Ljava/text/CollationKey;)I"/>
-		<method name="getSourceString()Ljava/lang/String;"/>
-		<method name="toByteArray()[B"/>
-	</class>
-	<class name="java/text/Collator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/Comparator"/>
-		<method name="&lt;init>()V"/>
-		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="equals(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCollationKey(Ljava/lang/String;)Ljava/text/CollationKey;"/>
-		<method name="getDecomposition()I"/>
-		<method name="getInstance()Ljava/text/Collator;"/>
-		<method name="getInstance(Ljava/util/Locale;)Ljava/text/Collator;"/>
-		<method name="getStrength()I"/>
-		<method name="setDecomposition(I)V"/>
-		<method name="setStrength(I)V"/>
-		<field name="CANONICAL_DECOMPOSITION"/>
-		<field name="FULL_DECOMPOSITION"/>
-		<field name="IDENTICAL"/>
-		<field name="NO_DECOMPOSITION"/>
-		<field name="PRIMARY"/>
-		<field name="SECONDARY"/>
-		<field name="TERTIARY"/>
-	</class>
-	<class name="java/text/DateFormat" since="1">
-		<extends name="java/text/Format"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/util/Date;)Ljava/lang/String;"/>
-		<method name="format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCalendar()Ljava/util/Calendar;"/>
-		<method name="getDateInstance()Ljava/text/DateFormat;"/>
-		<method name="getDateInstance(I)Ljava/text/DateFormat;"/>
-		<method name="getDateInstance(ILjava/util/Locale;)Ljava/text/DateFormat;"/>
-		<method name="getDateTimeInstance()Ljava/text/DateFormat;"/>
-		<method name="getDateTimeInstance(II)Ljava/text/DateFormat;"/>
-		<method name="getDateTimeInstance(IILjava/util/Locale;)Ljava/text/DateFormat;"/>
-		<method name="getInstance()Ljava/text/DateFormat;"/>
-		<method name="getNumberFormat()Ljava/text/NumberFormat;"/>
-		<method name="getTimeInstance()Ljava/text/DateFormat;"/>
-		<method name="getTimeInstance(I)Ljava/text/DateFormat;"/>
-		<method name="getTimeInstance(ILjava/util/Locale;)Ljava/text/DateFormat;"/>
-		<method name="getTimeZone()Ljava/util/TimeZone;"/>
-		<method name="isLenient()Z"/>
-		<method name="parse(Ljava/lang/String;)Ljava/util/Date;"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;"/>
-		<method name="setCalendar(Ljava/util/Calendar;)V"/>
-		<method name="setLenient(Z)V"/>
-		<method name="setNumberFormat(Ljava/text/NumberFormat;)V"/>
-		<method name="setTimeZone(Ljava/util/TimeZone;)V"/>
-		<field name="AM_PM_FIELD"/>
-		<field name="DATE_FIELD"/>
-		<field name="DAY_OF_WEEK_FIELD"/>
-		<field name="DAY_OF_WEEK_IN_MONTH_FIELD"/>
-		<field name="DAY_OF_YEAR_FIELD"/>
-		<field name="DEFAULT"/>
-		<field name="ERA_FIELD"/>
-		<field name="FULL"/>
-		<field name="HOUR0_FIELD"/>
-		<field name="HOUR1_FIELD"/>
-		<field name="HOUR_OF_DAY0_FIELD"/>
-		<field name="HOUR_OF_DAY1_FIELD"/>
-		<field name="LONG"/>
-		<field name="MEDIUM"/>
-		<field name="MILLISECOND_FIELD"/>
-		<field name="MINUTE_FIELD"/>
-		<field name="MONTH_FIELD"/>
-		<field name="SECOND_FIELD"/>
-		<field name="SHORT"/>
-		<field name="TIMEZONE_FIELD"/>
-		<field name="WEEK_OF_MONTH_FIELD"/>
-		<field name="WEEK_OF_YEAR_FIELD"/>
-		<field name="YEAR_FIELD"/>
-		<field name="calendar"/>
-		<field name="numberFormat"/>
-	</class>
-	<class name="java/text/DateFormat$Field" since="1">
-		<extends name="java/text/Format$Field"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getCalendarField()I"/>
-		<method name="ofCalendarField(I)Ljava/text/DateFormat$Field;"/>
-		<field name="AM_PM"/>
-		<field name="DAY_OF_MONTH"/>
-		<field name="DAY_OF_WEEK"/>
-		<field name="DAY_OF_WEEK_IN_MONTH"/>
-		<field name="DAY_OF_YEAR"/>
-		<field name="ERA"/>
-		<field name="HOUR0"/>
-		<field name="HOUR1"/>
-		<field name="HOUR_OF_DAY0"/>
-		<field name="HOUR_OF_DAY1"/>
-		<field name="MILLISECOND"/>
-		<field name="MINUTE"/>
-		<field name="MONTH"/>
-		<field name="SECOND"/>
-		<field name="TIME_ZONE"/>
-		<field name="WEEK_OF_MONTH"/>
-		<field name="WEEK_OF_YEAR"/>
-		<field name="YEAR"/>
-	</class>
-	<class name="java/text/DateFormatSymbols" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="getAmPmStrings()[Ljava/lang/String;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;" since="9"/>
-		<method name="getEras()[Ljava/lang/String;"/>
-		<method name="getInstance()Ljava/text/DateFormatSymbols;" since="9"/>
-		<method name="getInstance(Ljava/util/Locale;)Ljava/text/DateFormatSymbols;" since="9"/>
-		<method name="getLocalPatternChars()Ljava/lang/String;"/>
-		<method name="getMonths()[Ljava/lang/String;"/>
-		<method name="getShortMonths()[Ljava/lang/String;"/>
-		<method name="getShortWeekdays()[Ljava/lang/String;"/>
-		<method name="getWeekdays()[Ljava/lang/String;"/>
-		<method name="getZoneStrings()[[Ljava/lang/String;"/>
-		<method name="setAmPmStrings([Ljava/lang/String;)V"/>
-		<method name="setEras([Ljava/lang/String;)V"/>
-		<method name="setLocalPatternChars(Ljava/lang/String;)V"/>
-		<method name="setMonths([Ljava/lang/String;)V"/>
-		<method name="setShortMonths([Ljava/lang/String;)V"/>
-		<method name="setShortWeekdays([Ljava/lang/String;)V"/>
-		<method name="setWeekdays([Ljava/lang/String;)V"/>
-		<method name="setZoneStrings([[Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/text/DecimalFormat" since="1">
-		<extends name="java/text/NumberFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/DecimalFormatSymbols;)V"/>
-		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="getDecimalFormatSymbols()Ljava/text/DecimalFormatSymbols;"/>
-		<method name="getGroupingSize()I"/>
-		<method name="getMultiplier()I"/>
-		<method name="getNegativePrefix()Ljava/lang/String;"/>
-		<method name="getNegativeSuffix()Ljava/lang/String;"/>
-		<method name="getPositivePrefix()Ljava/lang/String;"/>
-		<method name="getPositiveSuffix()Ljava/lang/String;"/>
-		<method name="isDecimalSeparatorAlwaysShown()Z"/>
-		<method name="isParseBigDecimal()Z"/>
-		<method name="setDecimalFormatSymbols(Ljava/text/DecimalFormatSymbols;)V"/>
-		<method name="setDecimalSeparatorAlwaysShown(Z)V"/>
-		<method name="setGroupingSize(I)V"/>
-		<method name="setMultiplier(I)V"/>
-		<method name="setNegativePrefix(Ljava/lang/String;)V"/>
-		<method name="setNegativeSuffix(Ljava/lang/String;)V"/>
-		<method name="setParseBigDecimal(Z)V"/>
-		<method name="setPositivePrefix(Ljava/lang/String;)V"/>
-		<method name="setPositiveSuffix(Ljava/lang/String;)V"/>
-		<method name="toLocalizedPattern()Ljava/lang/String;"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-	</class>
-	<class name="java/text/DecimalFormatSymbols" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;" since="9"/>
-		<method name="getCurrency()Ljava/util/Currency;"/>
-		<method name="getCurrencySymbol()Ljava/lang/String;"/>
-		<method name="getDecimalSeparator()C"/>
-		<method name="getDigit()C"/>
-		<method name="getExponentSeparator()Ljava/lang/String;" since="9"/>
-		<method name="getGroupingSeparator()C"/>
-		<method name="getInfinity()Ljava/lang/String;"/>
-		<method name="getInstance()Ljava/text/DecimalFormatSymbols;" since="9"/>
-		<method name="getInstance(Ljava/util/Locale;)Ljava/text/DecimalFormatSymbols;" since="9"/>
-		<method name="getInternationalCurrencySymbol()Ljava/lang/String;"/>
-		<method name="getMinusSign()C"/>
-		<method name="getMonetaryDecimalSeparator()C"/>
-		<method name="getNaN()Ljava/lang/String;"/>
-		<method name="getPatternSeparator()C"/>
-		<method name="getPerMill()C"/>
-		<method name="getPercent()C"/>
-		<method name="getZeroDigit()C"/>
-		<method name="setCurrency(Ljava/util/Currency;)V"/>
-		<method name="setCurrencySymbol(Ljava/lang/String;)V"/>
-		<method name="setDecimalSeparator(C)V"/>
-		<method name="setDigit(C)V"/>
-		<method name="setExponentSeparator(Ljava/lang/String;)V" since="9"/>
-		<method name="setGroupingSeparator(C)V"/>
-		<method name="setInfinity(Ljava/lang/String;)V"/>
-		<method name="setInternationalCurrencySymbol(Ljava/lang/String;)V"/>
-		<method name="setMinusSign(C)V"/>
-		<method name="setMonetaryDecimalSeparator(C)V"/>
-		<method name="setNaN(Ljava/lang/String;)V"/>
-		<method name="setPatternSeparator(C)V"/>
-		<method name="setPerMill(C)V"/>
-		<method name="setPercent(C)V"/>
-		<method name="setZeroDigit(C)V"/>
-	</class>
-	<class name="java/text/FieldPosition" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/text/Format$Field;)V"/>
-		<method name="&lt;init>(Ljava/text/Format$Field;I)V"/>
-		<method name="getBeginIndex()I"/>
-		<method name="getEndIndex()I"/>
-		<method name="getField()I"/>
-		<method name="getFieldAttribute()Ljava/text/Format$Field;"/>
-		<method name="setBeginIndex(I)V"/>
-		<method name="setEndIndex(I)V"/>
-	</class>
-	<class name="java/text/Format" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="formatToCharacterIterator(Ljava/lang/Object;)Ljava/text/AttributedCharacterIterator;"/>
-		<method name="parseObject(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/text/Format$Field" since="1">
-		<extends name="java/text/AttributedCharacterIterator$Attribute"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/text/MessageFormat" since="1">
-		<extends name="java/text/Format"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="format([Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="getFormats()[Ljava/text/Format;"/>
-		<method name="getFormatsByArgumentIndex()[Ljava/text/Format;"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="parse(Ljava/lang/String;)[Ljava/lang/Object;"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)[Ljava/lang/Object;"/>
-		<method name="setFormat(ILjava/text/Format;)V"/>
-		<method name="setFormatByArgumentIndex(ILjava/text/Format;)V"/>
-		<method name="setFormats([Ljava/text/Format;)V"/>
-		<method name="setFormatsByArgumentIndex([Ljava/text/Format;)V"/>
-		<method name="setLocale(Ljava/util/Locale;)V"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-	</class>
-	<class name="java/text/MessageFormat$Field" since="1">
-		<extends name="java/text/Format$Field"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="ARGUMENT"/>
-	</class>
-	<class name="java/text/Normalizer" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isNormalized(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Z"/>
-		<method name="normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/text/Normalizer$Form" since="9">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/text/Normalizer$Form;"/>
-		<method name="values()[Ljava/text/Normalizer$Form;"/>
-		<field name="NFC"/>
-		<field name="NFD"/>
-		<field name="NFKC"/>
-		<field name="NFKD"/>
-	</class>
-	<class name="java/text/NumberFormat" since="1">
-		<extends name="java/text/Format"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(D)Ljava/lang/String;"/>
-		<method name="format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="format(J)Ljava/lang/String;"/>
-		<method name="format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCurrency()Ljava/util/Currency;"/>
-		<method name="getCurrencyInstance()Ljava/text/NumberFormat;"/>
-		<method name="getCurrencyInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
-		<method name="getInstance()Ljava/text/NumberFormat;"/>
-		<method name="getInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
-		<method name="getIntegerInstance()Ljava/text/NumberFormat;"/>
-		<method name="getIntegerInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
-		<method name="getMaximumFractionDigits()I"/>
-		<method name="getMaximumIntegerDigits()I"/>
-		<method name="getMinimumFractionDigits()I"/>
-		<method name="getMinimumIntegerDigits()I"/>
-		<method name="getNumberInstance()Ljava/text/NumberFormat;"/>
-		<method name="getNumberInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
-		<method name="getPercentInstance()Ljava/text/NumberFormat;"/>
-		<method name="getPercentInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
-		<method name="getRoundingMode()Ljava/math/RoundingMode;" since="9"/>
-		<method name="isGroupingUsed()Z"/>
-		<method name="isParseIntegerOnly()Z"/>
-		<method name="parse(Ljava/lang/String;)Ljava/lang/Number;"/>
-		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;"/>
-		<method name="setCurrency(Ljava/util/Currency;)V"/>
-		<method name="setGroupingUsed(Z)V"/>
-		<method name="setMaximumFractionDigits(I)V"/>
-		<method name="setMaximumIntegerDigits(I)V"/>
-		<method name="setMinimumFractionDigits(I)V"/>
-		<method name="setMinimumIntegerDigits(I)V"/>
-		<method name="setParseIntegerOnly(Z)V"/>
-		<method name="setRoundingMode(Ljava/math/RoundingMode;)V" since="9"/>
-		<field name="FRACTION_FIELD"/>
-		<field name="INTEGER_FIELD"/>
-	</class>
-	<class name="java/text/NumberFormat$Field" since="1">
-		<extends name="java/text/Format$Field"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="CURRENCY"/>
-		<field name="DECIMAL_SEPARATOR"/>
-		<field name="EXPONENT"/>
-		<field name="EXPONENT_SIGN"/>
-		<field name="EXPONENT_SYMBOL"/>
-		<field name="FRACTION"/>
-		<field name="GROUPING_SEPARATOR"/>
-		<field name="INTEGER"/>
-		<field name="PERCENT"/>
-		<field name="PERMILLE"/>
-		<field name="SIGN"/>
-	</class>
-	<class name="java/text/ParseException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getErrorOffset()I"/>
-	</class>
-	<class name="java/text/ParsePosition" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getErrorIndex()I"/>
-		<method name="getIndex()I"/>
-		<method name="setErrorIndex(I)V"/>
-		<method name="setIndex(I)V"/>
-	</class>
-	<class name="java/text/RuleBasedCollator" since="1">
-		<extends name="java/text/Collator"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getCollationElementIterator(Ljava/lang/String;)Ljava/text/CollationElementIterator;"/>
-		<method name="getCollationElementIterator(Ljava/text/CharacterIterator;)Ljava/text/CollationElementIterator;"/>
-		<method name="getRules()Ljava/lang/String;"/>
-	</class>
-	<class name="java/text/SimpleDateFormat" since="1">
-		<extends name="java/text/DateFormat"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/text/DateFormatSymbols;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
-		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
-		<method name="applyPattern(Ljava/lang/String;)V"/>
-		<method name="get2DigitYearStart()Ljava/util/Date;"/>
-		<method name="getDateFormatSymbols()Ljava/text/DateFormatSymbols;"/>
-		<method name="set2DigitYearStart(Ljava/util/Date;)V"/>
-		<method name="setDateFormatSymbols(Ljava/text/DateFormatSymbols;)V"/>
-		<method name="toLocalizedPattern()Ljava/lang/String;"/>
-		<method name="toPattern()Ljava/lang/String;"/>
-	</class>
-	<class name="java/text/StringCharacterIterator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/text/CharacterIterator"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;III)V"/>
-		<method name="setText(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/time/Clock" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="fixed(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/Clock;"/>
-		<method name="getZone()Ljava/time/ZoneId;"/>
-		<method name="instant()Ljava/time/Instant;"/>
-		<method name="millis()J"/>
-		<method name="offset(Ljava/time/Clock;Ljava/time/Duration;)Ljava/time/Clock;"/>
-		<method name="system(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
-		<method name="systemDefaultZone()Ljava/time/Clock;"/>
-		<method name="systemUTC()Ljava/time/Clock;"/>
-		<method name="tick(Ljava/time/Clock;Ljava/time/Duration;)Ljava/time/Clock;"/>
-		<method name="tickMinutes(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
-		<method name="tickSeconds(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
-		<method name="withZone(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
-	</class>
-	<class name="java/time/DateTimeException" since="26">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/time/DayOfWeek" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/temporal/TemporalAccessor"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/DayOfWeek;"/>
-		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getValue()I"/>
-		<method name="minus(J)Ljava/time/DayOfWeek;"/>
-		<method name="of(I)Ljava/time/DayOfWeek;"/>
-		<method name="plus(J)Ljava/time/DayOfWeek;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/DayOfWeek;"/>
-		<method name="values()[Ljava/time/DayOfWeek;"/>
-		<field name="FRIDAY"/>
-		<field name="MONDAY"/>
-		<field name="SATURDAY"/>
-		<field name="SUNDAY"/>
-		<field name="THURSDAY"/>
-		<field name="TUESDAY"/>
-		<field name="WEDNESDAY"/>
-	</class>
-	<class name="java/time/Duration" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/TemporalAmount"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JI)V" since="29"/>
-		<method name="abs()Ljava/time/Duration;"/>
-		<method name="between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)Ljava/time/Duration;"/>
-		<method name="compareTo(Ljava/time/Duration;)I"/>
-		<method name="dividedBy(J)Ljava/time/Duration;"/>
-		<method name="from(Ljava/time/temporal/TemporalAmount;)Ljava/time/Duration;"/>
-		<method name="getNano()I"/>
-		<method name="getSeconds()J"/>
-		<method name="isNegative()Z"/>
-		<method name="isZero()Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;"/>
-		<method name="minus(Ljava/time/Duration;)Ljava/time/Duration;"/>
-		<method name="minusDays(J)Ljava/time/Duration;"/>
-		<method name="minusHours(J)Ljava/time/Duration;"/>
-		<method name="minusMillis(J)Ljava/time/Duration;"/>
-		<method name="minusMinutes(J)Ljava/time/Duration;"/>
-		<method name="minusNanos(J)Ljava/time/Duration;"/>
-		<method name="minusSeconds(J)Ljava/time/Duration;"/>
-		<method name="multipliedBy(J)Ljava/time/Duration;"/>
-		<method name="negated()Ljava/time/Duration;"/>
-		<method name="of(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;"/>
-		<method name="ofDays(J)Ljava/time/Duration;"/>
-		<method name="ofHours(J)Ljava/time/Duration;"/>
-		<method name="ofMillis(J)Ljava/time/Duration;"/>
-		<method name="ofMinutes(J)Ljava/time/Duration;"/>
-		<method name="ofNanos(J)Ljava/time/Duration;"/>
-		<method name="ofSeconds(J)Ljava/time/Duration;"/>
-		<method name="ofSeconds(JJ)Ljava/time/Duration;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Duration;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;"/>
-		<method name="plus(Ljava/time/Duration;)Ljava/time/Duration;"/>
-		<method name="plusDays(J)Ljava/time/Duration;"/>
-		<method name="plusHours(J)Ljava/time/Duration;"/>
-		<method name="plusMillis(J)Ljava/time/Duration;"/>
-		<method name="plusMinutes(J)Ljava/time/Duration;"/>
-		<method name="plusNanos(J)Ljava/time/Duration;"/>
-		<method name="plusSeconds(J)Ljava/time/Duration;"/>
-		<method name="toDays()J"/>
-		<method name="toHours()J"/>
-		<method name="toMillis()J"/>
-		<method name="toMinutes()J"/>
-		<method name="toNanos()J"/>
-		<method name="withNanos(I)Ljava/time/Duration;"/>
-		<method name="withSeconds(J)Ljava/time/Duration;"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="java/time/Instant" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JI)V" since="29"/>
-		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
-		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="compareTo(Ljava/time/Instant;)I"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Instant;"/>
-		<method name="getEpochSecond()J"/>
-		<method name="getNano()I"/>
-		<method name="isAfter(Ljava/time/Instant;)Z"/>
-		<method name="isBefore(Ljava/time/Instant;)Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"/>
-		<method name="minusMillis(J)Ljava/time/Instant;"/>
-		<method name="minusNanos(J)Ljava/time/Instant;"/>
-		<method name="minusSeconds(J)Ljava/time/Instant;"/>
-		<method name="now()Ljava/time/Instant;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/Instant;"/>
-		<method name="ofEpochMilli(J)Ljava/time/Instant;"/>
-		<method name="ofEpochSecond(J)Ljava/time/Instant;"/>
-		<method name="ofEpochSecond(JJ)Ljava/time/Instant;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Instant;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"/>
-		<method name="plusMillis(J)Ljava/time/Instant;"/>
-		<method name="plusNanos(J)Ljava/time/Instant;"/>
-		<method name="plusSeconds(J)Ljava/time/Instant;"/>
-		<method name="toEpochMilli()J"/>
-		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/Instant;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Instant;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/Instant;"/>
-		<field name="EPOCH"/>
-		<field name="MAX"/>
-		<field name="MIN"/>
-	</class>
-	<class name="java/time/LocalDate" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/time/chrono/ChronoLocalDate"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(III)V" since="29"/>
-		<method name="atStartOfDay()Ljava/time/LocalDateTime;"/>
-		<method name="atStartOfDay(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="atTime(II)Ljava/time/LocalDateTime;"/>
-		<method name="atTime(III)Ljava/time/LocalDateTime;"/>
-		<method name="atTime(IIII)Ljava/time/LocalDateTime;"/>
-		<method name="atTime(Ljava/time/LocalTime;)Ljava/time/LocalDateTime;"/>
-		<method name="atTime(Ljava/time/OffsetTime;)Ljava/time/OffsetDateTime;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;"/>
-		<method name="getChronology()Ljava/time/chrono/IsoChronology;"/>
-		<method name="getDayOfMonth()I"/>
-		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
-		<method name="getDayOfYear()I"/>
-		<method name="getMonth()Ljava/time/Month;"/>
-		<method name="getMonthValue()I"/>
-		<method name="getYear()I"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDate;"/>
-		<method name="minusDays(J)Ljava/time/LocalDate;"/>
-		<method name="minusMonths(J)Ljava/time/LocalDate;"/>
-		<method name="minusWeeks(J)Ljava/time/LocalDate;"/>
-		<method name="minusYears(J)Ljava/time/LocalDate;"/>
-		<method name="now()Ljava/time/LocalDate;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/LocalDate;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalDate;"/>
-		<method name="of(III)Ljava/time/LocalDate;"/>
-		<method name="of(ILjava/time/Month;I)Ljava/time/LocalDate;"/>
-		<method name="ofEpochDay(J)Ljava/time/LocalDate;"/>
-		<method name="ofYearDay(II)Ljava/time/LocalDate;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalDate;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDate;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDate;"/>
-		<method name="plusDays(J)Ljava/time/LocalDate;"/>
-		<method name="plusMonths(J)Ljava/time/LocalDate;"/>
-		<method name="plusWeeks(J)Ljava/time/LocalDate;"/>
-		<method name="plusYears(J)Ljava/time/LocalDate;"/>
-		<method name="until(Ljava/time/chrono/ChronoLocalDate;)Ljava/time/Period;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalDate;"/>
-		<method name="withDayOfMonth(I)Ljava/time/LocalDate;"/>
-		<method name="withDayOfYear(I)Ljava/time/LocalDate;"/>
-		<method name="withMonth(I)Ljava/time/LocalDate;"/>
-		<method name="withYear(I)Ljava/time/LocalDate;"/>
-		<field name="MAX"/>
-		<field name="MIN"/>
-	</class>
-	<class name="java/time/LocalDateTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/time/chrono/ChronoLocalDateTime"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalDate;Ljava/time/LocalTime;)V" since="29"/>
-		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
-		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;"/>
-		<method name="getDayOfMonth()I"/>
-		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
-		<method name="getDayOfYear()I"/>
-		<method name="getHour()I"/>
-		<method name="getMinute()I"/>
-		<method name="getMonth()Ljava/time/Month;"/>
-		<method name="getMonthValue()I"/>
-		<method name="getNano()I"/>
-		<method name="getSecond()I"/>
-		<method name="getYear()I"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDateTime;"/>
-		<method name="minusDays(J)Ljava/time/LocalDateTime;"/>
-		<method name="minusHours(J)Ljava/time/LocalDateTime;"/>
-		<method name="minusMinutes(J)Ljava/time/LocalDateTime;"/>
-		<method name="minusMonths(J)Ljava/time/LocalDateTime;"/>
-		<method name="minusNanos(J)Ljava/time/LocalDateTime;"/>
-		<method name="minusSeconds(J)Ljava/time/LocalDateTime;"/>
-		<method name="minusWeeks(J)Ljava/time/LocalDateTime;"/>
-		<method name="minusYears(J)Ljava/time/LocalDateTime;"/>
-		<method name="now()Ljava/time/LocalDateTime;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/LocalDateTime;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalDateTime;"/>
-		<method name="of(IIIII)Ljava/time/LocalDateTime;"/>
-		<method name="of(IIIIII)Ljava/time/LocalDateTime;"/>
-		<method name="of(IIIIIII)Ljava/time/LocalDateTime;"/>
-		<method name="of(ILjava/time/Month;III)Ljava/time/LocalDateTime;"/>
-		<method name="of(ILjava/time/Month;IIII)Ljava/time/LocalDateTime;"/>
-		<method name="of(ILjava/time/Month;IIIII)Ljava/time/LocalDateTime;"/>
-		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;"/>
-		<method name="ofEpochSecond(JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime;"/>
-		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalDateTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalDateTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDateTime;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDateTime;"/>
-		<method name="plusDays(J)Ljava/time/LocalDateTime;"/>
-		<method name="plusHours(J)Ljava/time/LocalDateTime;"/>
-		<method name="plusMinutes(J)Ljava/time/LocalDateTime;"/>
-		<method name="plusMonths(J)Ljava/time/LocalDateTime;"/>
-		<method name="plusNanos(J)Ljava/time/LocalDateTime;"/>
-		<method name="plusSeconds(J)Ljava/time/LocalDateTime;"/>
-		<method name="plusWeeks(J)Ljava/time/LocalDateTime;"/>
-		<method name="plusYears(J)Ljava/time/LocalDateTime;"/>
-		<method name="toLocalDate()Ljava/time/LocalDate;"/>
-		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalDateTime;"/>
-		<method name="withDayOfMonth(I)Ljava/time/LocalDateTime;"/>
-		<method name="withDayOfYear(I)Ljava/time/LocalDateTime;"/>
-		<method name="withHour(I)Ljava/time/LocalDateTime;"/>
-		<method name="withMinute(I)Ljava/time/LocalDateTime;"/>
-		<method name="withMonth(I)Ljava/time/LocalDateTime;"/>
-		<method name="withNano(I)Ljava/time/LocalDateTime;"/>
-		<method name="withSecond(I)Ljava/time/LocalDateTime;"/>
-		<method name="withYear(I)Ljava/time/LocalDateTime;"/>
-		<field name="MAX"/>
-		<field name="MIN"/>
-	</class>
-	<class name="java/time/LocalTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(IIII)V" since="29"/>
-		<method name="atDate(Ljava/time/LocalDate;)Ljava/time/LocalDateTime;"/>
-		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
-		<method name="compareTo(Ljava/time/LocalTime;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalTime;"/>
-		<method name="getHour()I"/>
-		<method name="getMinute()I"/>
-		<method name="getNano()I"/>
-		<method name="getSecond()I"/>
-		<method name="isAfter(Ljava/time/LocalTime;)Z"/>
-		<method name="isBefore(Ljava/time/LocalTime;)Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalTime;"/>
-		<method name="minusHours(J)Ljava/time/LocalTime;"/>
-		<method name="minusMinutes(J)Ljava/time/LocalTime;"/>
-		<method name="minusNanos(J)Ljava/time/LocalTime;"/>
-		<method name="minusSeconds(J)Ljava/time/LocalTime;"/>
-		<method name="now()Ljava/time/LocalTime;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/LocalTime;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalTime;"/>
-		<method name="of(II)Ljava/time/LocalTime;"/>
-		<method name="of(III)Ljava/time/LocalTime;"/>
-		<method name="of(IIII)Ljava/time/LocalTime;"/>
-		<method name="ofNanoOfDay(J)Ljava/time/LocalTime;"/>
-		<method name="ofSecondOfDay(J)Ljava/time/LocalTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalTime;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalTime;"/>
-		<method name="plusHours(J)Ljava/time/LocalTime;"/>
-		<method name="plusMinutes(J)Ljava/time/LocalTime;"/>
-		<method name="plusNanos(J)Ljava/time/LocalTime;"/>
-		<method name="plusSeconds(J)Ljava/time/LocalTime;"/>
-		<method name="toNanoOfDay()J"/>
-		<method name="toSecondOfDay()I"/>
-		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalTime;"/>
-		<method name="withHour(I)Ljava/time/LocalTime;"/>
-		<method name="withMinute(I)Ljava/time/LocalTime;"/>
-		<method name="withNano(I)Ljava/time/LocalTime;"/>
-		<method name="withSecond(I)Ljava/time/LocalTime;"/>
-		<field name="MAX"/>
-		<field name="MIDNIGHT"/>
-		<field name="MIN"/>
-		<field name="NOON"/>
-	</class>
-	<class name="java/time/Month" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/temporal/TemporalAccessor"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="firstDayOfYear(Z)I"/>
-		<method name="firstMonthOfQuarter()Ljava/time/Month;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Month;"/>
-		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getValue()I"/>
-		<method name="length(Z)I"/>
-		<method name="maxLength()I"/>
-		<method name="minLength()I"/>
-		<method name="minus(J)Ljava/time/Month;"/>
-		<method name="of(I)Ljava/time/Month;"/>
-		<method name="plus(J)Ljava/time/Month;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/Month;"/>
-		<method name="values()[Ljava/time/Month;"/>
-		<field name="APRIL"/>
-		<field name="AUGUST"/>
-		<field name="DECEMBER"/>
-		<field name="FEBRUARY"/>
-		<field name="JANUARY"/>
-		<field name="JULY"/>
-		<field name="JUNE"/>
-		<field name="MARCH"/>
-		<field name="MAY"/>
-		<field name="NOVEMBER"/>
-		<field name="OCTOBER"/>
-		<field name="SEPTEMBER"/>
-	</class>
-	<class name="java/time/MonthDay" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/TemporalAccessor"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(II)V" since="29"/>
-		<method name="atYear(I)Ljava/time/LocalDate;"/>
-		<method name="compareTo(Ljava/time/MonthDay;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/MonthDay;"/>
-		<method name="getDayOfMonth()I"/>
-		<method name="getMonth()Ljava/time/Month;"/>
-		<method name="getMonthValue()I"/>
-		<method name="isAfter(Ljava/time/MonthDay;)Z"/>
-		<method name="isBefore(Ljava/time/MonthDay;)Z"/>
-		<method name="isValidYear(I)Z"/>
-		<method name="now()Ljava/time/MonthDay;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/MonthDay;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/MonthDay;"/>
-		<method name="of(II)Ljava/time/MonthDay;"/>
-		<method name="of(Ljava/time/Month;I)Ljava/time/MonthDay;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/MonthDay;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/MonthDay;"/>
-		<method name="with(Ljava/time/Month;)Ljava/time/MonthDay;"/>
-		<method name="withDayOfMonth(I)Ljava/time/MonthDay;"/>
-		<method name="withMonth(I)Ljava/time/MonthDay;"/>
-	</class>
-	<class name="java/time/OffsetDateTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)V" since="29"/>
-		<method name="atZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="atZoneSimilarLocal(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="compareTo(Ljava/time/OffsetDateTime;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/OffsetDateTime;"/>
-		<method name="getDayOfMonth()I"/>
-		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
-		<method name="getDayOfYear()I"/>
-		<method name="getHour()I"/>
-		<method name="getMinute()I"/>
-		<method name="getMonth()Ljava/time/Month;"/>
-		<method name="getMonthValue()I"/>
-		<method name="getNano()I"/>
-		<method name="getOffset()Ljava/time/ZoneOffset;"/>
-		<method name="getSecond()I"/>
-		<method name="getYear()I"/>
-		<method name="isAfter(Ljava/time/OffsetDateTime;)Z"/>
-		<method name="isBefore(Ljava/time/OffsetDateTime;)Z"/>
-		<method name="isEqual(Ljava/time/OffsetDateTime;)Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetDateTime;"/>
-		<method name="minusDays(J)Ljava/time/OffsetDateTime;"/>
-		<method name="minusHours(J)Ljava/time/OffsetDateTime;"/>
-		<method name="minusMinutes(J)Ljava/time/OffsetDateTime;"/>
-		<method name="minusMonths(J)Ljava/time/OffsetDateTime;"/>
-		<method name="minusNanos(J)Ljava/time/OffsetDateTime;"/>
-		<method name="minusSeconds(J)Ljava/time/OffsetDateTime;"/>
-		<method name="minusWeeks(J)Ljava/time/OffsetDateTime;"/>
-		<method name="minusYears(J)Ljava/time/OffsetDateTime;"/>
-		<method name="now()Ljava/time/OffsetDateTime;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/OffsetDateTime;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/OffsetDateTime;"/>
-		<method name="of(IIIIIIILjava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
-		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
-		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
-		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/OffsetDateTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/OffsetDateTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/OffsetDateTime;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetDateTime;"/>
-		<method name="plusDays(J)Ljava/time/OffsetDateTime;"/>
-		<method name="plusHours(J)Ljava/time/OffsetDateTime;"/>
-		<method name="plusMinutes(J)Ljava/time/OffsetDateTime;"/>
-		<method name="plusMonths(J)Ljava/time/OffsetDateTime;"/>
-		<method name="plusNanos(J)Ljava/time/OffsetDateTime;"/>
-		<method name="plusSeconds(J)Ljava/time/OffsetDateTime;"/>
-		<method name="plusWeeks(J)Ljava/time/OffsetDateTime;"/>
-		<method name="plusYears(J)Ljava/time/OffsetDateTime;"/>
-		<method name="timeLineOrder()Ljava/util/Comparator;"/>
-		<method name="toEpochSecond()J"/>
-		<method name="toInstant()Ljava/time/Instant;"/>
-		<method name="toLocalDate()Ljava/time/LocalDate;"/>
-		<method name="toLocalDateTime()Ljava/time/LocalDateTime;"/>
-		<method name="toLocalTime()Ljava/time/LocalTime;"/>
-		<method name="toOffsetTime()Ljava/time/OffsetTime;"/>
-		<method name="toZonedDateTime()Ljava/time/ZonedDateTime;"/>
-		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/OffsetDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/OffsetDateTime;"/>
-		<method name="withDayOfMonth(I)Ljava/time/OffsetDateTime;"/>
-		<method name="withDayOfYear(I)Ljava/time/OffsetDateTime;"/>
-		<method name="withHour(I)Ljava/time/OffsetDateTime;"/>
-		<method name="withMinute(I)Ljava/time/OffsetDateTime;"/>
-		<method name="withMonth(I)Ljava/time/OffsetDateTime;"/>
-		<method name="withNano(I)Ljava/time/OffsetDateTime;"/>
-		<method name="withOffsetSameInstant(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
-		<method name="withOffsetSameLocal(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
-		<method name="withSecond(I)Ljava/time/OffsetDateTime;"/>
-		<method name="withYear(I)Ljava/time/OffsetDateTime;"/>
-		<field name="MAX"/>
-		<field name="MIN"/>
-	</class>
-	<class name="java/time/OffsetTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalTime;Ljava/time/ZoneOffset;)V" since="29"/>
-		<method name="atDate(Ljava/time/LocalDate;)Ljava/time/OffsetDateTime;"/>
-		<method name="compareTo(Ljava/time/OffsetTime;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/OffsetTime;"/>
-		<method name="getHour()I"/>
-		<method name="getMinute()I"/>
-		<method name="getNano()I"/>
-		<method name="getOffset()Ljava/time/ZoneOffset;"/>
-		<method name="getSecond()I"/>
-		<method name="isAfter(Ljava/time/OffsetTime;)Z"/>
-		<method name="isBefore(Ljava/time/OffsetTime;)Z"/>
-		<method name="isEqual(Ljava/time/OffsetTime;)Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetTime;"/>
-		<method name="minusHours(J)Ljava/time/OffsetTime;"/>
-		<method name="minusMinutes(J)Ljava/time/OffsetTime;"/>
-		<method name="minusNanos(J)Ljava/time/OffsetTime;"/>
-		<method name="minusSeconds(J)Ljava/time/OffsetTime;"/>
-		<method name="now()Ljava/time/OffsetTime;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/OffsetTime;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/OffsetTime;"/>
-		<method name="of(IIIILjava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
-		<method name="of(Ljava/time/LocalTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
-		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/OffsetTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/OffsetTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/OffsetTime;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetTime;"/>
-		<method name="plusHours(J)Ljava/time/OffsetTime;"/>
-		<method name="plusMinutes(J)Ljava/time/OffsetTime;"/>
-		<method name="plusNanos(J)Ljava/time/OffsetTime;"/>
-		<method name="plusSeconds(J)Ljava/time/OffsetTime;"/>
-		<method name="toLocalTime()Ljava/time/LocalTime;"/>
-		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/OffsetTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/OffsetTime;"/>
-		<method name="withHour(I)Ljava/time/OffsetTime;"/>
-		<method name="withMinute(I)Ljava/time/OffsetTime;"/>
-		<method name="withNano(I)Ljava/time/OffsetTime;"/>
-		<method name="withOffsetSameInstant(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
-		<method name="withOffsetSameLocal(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
-		<method name="withSecond(I)Ljava/time/OffsetTime;"/>
-		<field name="MAX"/>
-		<field name="MIN"/>
-	</class>
-	<class name="java/time/Period" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/time/chrono/ChronoPeriod"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(III)V" since="29"/>
-		<method name="between(Ljava/time/LocalDate;Ljava/time/LocalDate;)Ljava/time/Period;"/>
-		<method name="from(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;"/>
-		<method name="getChronology()Ljava/time/chrono/IsoChronology;"/>
-		<method name="getDays()I"/>
-		<method name="getMonths()I"/>
-		<method name="getYears()I"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;"/>
-		<method name="minusDays(J)Ljava/time/Period;"/>
-		<method name="minusMonths(J)Ljava/time/Period;"/>
-		<method name="minusYears(J)Ljava/time/Period;"/>
-		<method name="multipliedBy(I)Ljava/time/Period;"/>
-		<method name="negated()Ljava/time/Period;"/>
-		<method name="normalized()Ljava/time/Period;"/>
-		<method name="of(III)Ljava/time/Period;"/>
-		<method name="ofDays(I)Ljava/time/Period;"/>
-		<method name="ofMonths(I)Ljava/time/Period;"/>
-		<method name="ofWeeks(I)Ljava/time/Period;"/>
-		<method name="ofYears(I)Ljava/time/Period;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Period;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;"/>
-		<method name="plusDays(J)Ljava/time/Period;"/>
-		<method name="plusMonths(J)Ljava/time/Period;"/>
-		<method name="plusYears(J)Ljava/time/Period;"/>
-		<method name="toTotalMonths()J"/>
-		<method name="withDays(I)Ljava/time/Period;"/>
-		<method name="withMonths(I)Ljava/time/Period;"/>
-		<method name="withYears(I)Ljava/time/Period;"/>
-		<field name="ZERO"/>
-	</class>
-	<class name="java/time/Year" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="atDay(I)Ljava/time/LocalDate;"/>
-		<method name="atMonth(I)Ljava/time/YearMonth;"/>
-		<method name="atMonth(Ljava/time/Month;)Ljava/time/YearMonth;"/>
-		<method name="atMonthDay(Ljava/time/MonthDay;)Ljava/time/LocalDate;"/>
-		<method name="compareTo(Ljava/time/Year;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Year;"/>
-		<method name="getValue()I"/>
-		<method name="isAfter(Ljava/time/Year;)Z"/>
-		<method name="isBefore(Ljava/time/Year;)Z"/>
-		<method name="isLeap()Z"/>
-		<method name="isLeap(J)Z"/>
-		<method name="isValidMonthDay(Ljava/time/MonthDay;)Z"/>
-		<method name="length()I"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Year;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Year;"/>
-		<method name="minusYears(J)Ljava/time/Year;"/>
-		<method name="now()Ljava/time/Year;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/Year;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/Year;"/>
-		<method name="of(I)Ljava/time/Year;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Year;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/Year;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Year;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Year;"/>
-		<method name="plusYears(J)Ljava/time/Year;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Year;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/Year;"/>
-		<field name="MAX_VALUE"/>
-		<field name="MIN_VALUE"/>
-	</class>
-	<class name="java/time/YearMonth" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(II)V" since="29"/>
-		<method name="atDay(I)Ljava/time/LocalDate;"/>
-		<method name="atEndOfMonth()Ljava/time/LocalDate;"/>
-		<method name="compareTo(Ljava/time/YearMonth;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/YearMonth;"/>
-		<method name="getMonth()Ljava/time/Month;"/>
-		<method name="getMonthValue()I"/>
-		<method name="getYear()I"/>
-		<method name="isAfter(Ljava/time/YearMonth;)Z"/>
-		<method name="isBefore(Ljava/time/YearMonth;)Z"/>
-		<method name="isLeapYear()Z"/>
-		<method name="isValidDay(I)Z"/>
-		<method name="lengthOfMonth()I"/>
-		<method name="lengthOfYear()I"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/YearMonth;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/YearMonth;"/>
-		<method name="minusMonths(J)Ljava/time/YearMonth;"/>
-		<method name="minusYears(J)Ljava/time/YearMonth;"/>
-		<method name="now()Ljava/time/YearMonth;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/YearMonth;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/YearMonth;"/>
-		<method name="of(II)Ljava/time/YearMonth;"/>
-		<method name="of(ILjava/time/Month;)Ljava/time/YearMonth;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/YearMonth;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/YearMonth;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/YearMonth;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/YearMonth;"/>
-		<method name="plusMonths(J)Ljava/time/YearMonth;"/>
-		<method name="plusYears(J)Ljava/time/YearMonth;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/YearMonth;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/YearMonth;"/>
-		<method name="withMonth(I)Ljava/time/YearMonth;"/>
-		<method name="withYear(I)Ljava/time/YearMonth;"/>
-	</class>
-	<class name="java/time/ZoneId" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;"/>
-		<method name="getAvailableZoneIds()Ljava/util/Set;"/>
-		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="getRules()Ljava/time/zone/ZoneRules;"/>
-		<method name="normalized()Ljava/time/ZoneId;"/>
-		<method name="of(Ljava/lang/String;)Ljava/time/ZoneId;"/>
-		<method name="of(Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId;"/>
-		<method name="ofOffset(Ljava/lang/String;Ljava/time/ZoneOffset;)Ljava/time/ZoneId;"/>
-		<method name="systemDefault()Ljava/time/ZoneId;"/>
-		<field name="SHORT_IDS"/>
-	</class>
-	<class name="java/time/ZoneOffset" since="26">
-		<extends name="java/time/ZoneId"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/TemporalAccessor"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(I)V" since="29"/>
-		<method name="compareTo(Ljava/time/ZoneOffset;)I"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneOffset;"/>
-		<method name="getTotalSeconds()I"/>
-		<method name="of(Ljava/lang/String;)Ljava/time/ZoneOffset;"/>
-		<method name="ofHours(I)Ljava/time/ZoneOffset;"/>
-		<method name="ofHoursMinutes(II)Ljava/time/ZoneOffset;"/>
-		<method name="ofHoursMinutesSeconds(III)Ljava/time/ZoneOffset;"/>
-		<method name="ofTotalSeconds(I)Ljava/time/ZoneOffset;"/>
-		<field name="MAX"/>
-		<field name="MIN"/>
-		<field name="UTC"/>
-	</class>
-	<class name="java/time/ZonedDateTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/time/chrono/ChronoZonedDateTime"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)V" since="29"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;"/>
-		<method name="getDayOfMonth()I"/>
-		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
-		<method name="getDayOfYear()I"/>
-		<method name="getHour()I"/>
-		<method name="getMinute()I"/>
-		<method name="getMonth()Ljava/time/Month;"/>
-		<method name="getMonthValue()I"/>
-		<method name="getNano()I"/>
-		<method name="getSecond()I"/>
-		<method name="getYear()I"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/ZonedDateTime;"/>
-		<method name="minusDays(J)Ljava/time/ZonedDateTime;"/>
-		<method name="minusHours(J)Ljava/time/ZonedDateTime;"/>
-		<method name="minusMinutes(J)Ljava/time/ZonedDateTime;"/>
-		<method name="minusMonths(J)Ljava/time/ZonedDateTime;"/>
-		<method name="minusNanos(J)Ljava/time/ZonedDateTime;"/>
-		<method name="minusSeconds(J)Ljava/time/ZonedDateTime;"/>
-		<method name="minusWeeks(J)Ljava/time/ZonedDateTime;"/>
-		<method name="minusYears(J)Ljava/time/ZonedDateTime;"/>
-		<method name="now()Ljava/time/ZonedDateTime;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/ZonedDateTime;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="of(IIIIIIILjava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="ofInstant(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="ofLocal(Ljava/time/LocalDateTime;Ljava/time/ZoneId;Ljava/time/ZoneOffset;)Ljava/time/ZonedDateTime;"/>
-		<method name="ofStrict(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/ZonedDateTime;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/ZonedDateTime;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/ZonedDateTime;"/>
-		<method name="plusDays(J)Ljava/time/ZonedDateTime;"/>
-		<method name="plusHours(J)Ljava/time/ZonedDateTime;"/>
-		<method name="plusMinutes(J)Ljava/time/ZonedDateTime;"/>
-		<method name="plusMonths(J)Ljava/time/ZonedDateTime;"/>
-		<method name="plusNanos(J)Ljava/time/ZonedDateTime;"/>
-		<method name="plusSeconds(J)Ljava/time/ZonedDateTime;"/>
-		<method name="plusWeeks(J)Ljava/time/ZonedDateTime;"/>
-		<method name="plusYears(J)Ljava/time/ZonedDateTime;"/>
-		<method name="toLocalDate()Ljava/time/LocalDate;"/>
-		<method name="toLocalDateTime()Ljava/time/LocalDateTime;"/>
-		<method name="toOffsetDateTime()Ljava/time/OffsetDateTime;"/>
-		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/ZonedDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/ZonedDateTime;"/>
-		<method name="withDayOfMonth(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withDayOfYear(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withEarlierOffsetAtOverlap()Ljava/time/ZonedDateTime;"/>
-		<method name="withFixedOffsetZone()Ljava/time/ZonedDateTime;"/>
-		<method name="withHour(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withLaterOffsetAtOverlap()Ljava/time/ZonedDateTime;"/>
-		<method name="withMinute(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withMonth(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withNano(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withSecond(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withYear(I)Ljava/time/ZonedDateTime;"/>
-		<method name="withZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="withZoneSameLocal(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-	</class>
-	<class name="java/time/chrono/AbstractChronology" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/time/chrono/Chronology"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/time/chrono/ChronoLocalDate" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="atTime(Ljava/time/LocalTime;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="compareTo(Ljava/time/chrono/ChronoLocalDate;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
-		<method name="getEra()Ljava/time/chrono/Era;"/>
-		<method name="isAfter(Ljava/time/chrono/ChronoLocalDate;)Z"/>
-		<method name="isBefore(Ljava/time/chrono/ChronoLocalDate;)Z"/>
-		<method name="isEqual(Ljava/time/chrono/ChronoLocalDate;)Z"/>
-		<method name="isLeapYear()Z"/>
-		<method name="lengthOfMonth()I"/>
-		<method name="lengthOfYear()I"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="timeLineOrder()Ljava/util/Comparator;"/>
-		<method name="toEpochDay()J"/>
-		<method name="until(Ljava/time/chrono/ChronoLocalDate;)Ljava/time/chrono/ChronoPeriod;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDate;"/>
-	</class>
-	<class name="java/time/chrono/ChronoLocalDateImpl" since="26" removed="29">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/time/chrono/ChronoLocalDate"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/time/chrono/ChronoLocalDateTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="compareTo(Ljava/time/chrono/ChronoLocalDateTime;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
-		<method name="isAfter(Ljava/time/chrono/ChronoLocalDateTime;)Z"/>
-		<method name="isBefore(Ljava/time/chrono/ChronoLocalDateTime;)Z"/>
-		<method name="isEqual(Ljava/time/chrono/ChronoLocalDateTime;)Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="timeLineOrder()Ljava/util/Comparator;"/>
-		<method name="toEpochSecond(Ljava/time/ZoneOffset;)J"/>
-		<method name="toInstant(Ljava/time/ZoneOffset;)Ljava/time/Instant;"/>
-		<method name="toLocalDate()Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="toLocalTime()Ljava/time/LocalTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDateTime;"/>
-	</class>
-	<class name="java/time/chrono/ChronoPeriod" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/time/temporal/TemporalAmount"/>
-		<method name="between(Ljava/time/chrono/ChronoLocalDate;Ljava/time/chrono/ChronoLocalDate;)Ljava/time/chrono/ChronoPeriod;"/>
-		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
-		<method name="isNegative()Z"/>
-		<method name="isZero()Z"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoPeriod;"/>
-		<method name="multipliedBy(I)Ljava/time/chrono/ChronoPeriod;"/>
-		<method name="negated()Ljava/time/chrono/ChronoPeriod;"/>
-		<method name="normalized()Ljava/time/chrono/ChronoPeriod;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoPeriod;"/>
-	</class>
-	<class name="java/time/chrono/ChronoZonedDateTime" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<implements name="java/time/temporal/Temporal"/>
-		<method name="compareTo(Ljava/time/chrono/ChronoZonedDateTime;)I"/>
-		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
-		<method name="getOffset()Ljava/time/ZoneOffset;"/>
-		<method name="getZone()Ljava/time/ZoneId;"/>
-		<method name="isAfter(Ljava/time/chrono/ChronoZonedDateTime;)Z"/>
-		<method name="isBefore(Ljava/time/chrono/ChronoZonedDateTime;)Z"/>
-		<method name="isEqual(Ljava/time/chrono/ChronoZonedDateTime;)Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="timeLineOrder()Ljava/util/Comparator;"/>
-		<method name="toEpochSecond()J"/>
-		<method name="toInstant()Ljava/time/Instant;"/>
-		<method name="toLocalDate()Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="toLocalDateTime()Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="toLocalTime()Ljava/time/LocalTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="withEarlierOffsetAtOverlap()Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="withLaterOffsetAtOverlap()Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="withZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="withZoneSameLocal(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-	</class>
-	<class name="java/time/chrono/Chronology" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="compareTo(Ljava/time/chrono/Chronology;)I"/>
-		<method name="date(III)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="dateEpochDay(J)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="dateNow()Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="dateYearDay(II)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="eraOf(I)Ljava/time/chrono/Era;"/>
-		<method name="eras()Ljava/util/List;"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/Chronology;"/>
-		<method name="getAvailableChronologies()Ljava/util/Set;"/>
-		<method name="getCalendarType()Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getId()Ljava/lang/String;"/>
-		<method name="isLeapYear(J)Z"/>
-		<method name="localDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDateTime;"/>
-		<method name="of(Ljava/lang/String;)Ljava/time/chrono/Chronology;"/>
-		<method name="ofLocale(Ljava/util/Locale;)Ljava/time/chrono/Chronology;"/>
-		<method name="period(III)Ljava/time/chrono/ChronoPeriod;"/>
-		<method name="prolepticYear(Ljava/time/chrono/Era;I)I"/>
-		<method name="range(Ljava/time/temporal/ChronoField;)Ljava/time/temporal/ValueRange;"/>
-		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;"/>
-		<method name="zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-		<method name="zonedDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoZonedDateTime;"/>
-	</class>
-	<class name="java/time/chrono/Era" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/time/temporal/TemporalAccessor"/>
-		<implements name="java/time/temporal/TemporalAdjuster"/>
-		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getValue()I"/>
-	</class>
-	<class name="java/time/chrono/HijrahChronology" since="26">
-		<extends name="java/time/chrono/AbstractChronology"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
-		<method name="date(III)Ljava/time/chrono/HijrahDate;"/>
-		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/HijrahDate;"/>
-		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="dateEpochDay(J)Ljava/time/chrono/HijrahDate;"/>
-		<method name="dateNow()Ljava/time/chrono/HijrahDate;"/>
-		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="dateYearDay(II)Ljava/time/chrono/HijrahDate;"/>
-		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/HijrahDate;"/>
-		<method name="eraOf(I)Ljava/time/chrono/HijrahEra;"/>
-		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/HijrahDate;"/>
-		<field name="INSTANCE"/>
-	</class>
-	<class name="java/time/chrono/HijrahDate" since="26">
-		<extends name="java/lang/Object" since="29"/>
-		<extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/chrono/HijrahChronology;J)V" since="29"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="getChronology()Ljava/time/chrono/HijrahChronology;"/>
-		<method name="getEra()Ljava/time/chrono/HijrahEra;"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="now()Ljava/time/chrono/HijrahDate;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="of(III)Ljava/time/chrono/HijrahDate;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/HijrahDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/HijrahDate;"/>
-		<method name="withVariant(Ljava/time/chrono/HijrahChronology;)Ljava/time/chrono/HijrahDate;"/>
-	</class>
-	<class name="java/time/chrono/HijrahEra" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/chrono/Era"/>
-		<method name="of(I)Ljava/time/chrono/HijrahEra;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/HijrahEra;"/>
-		<method name="values()[Ljava/time/chrono/HijrahEra;"/>
-		<field name="AH"/>
-	</class>
-	<class name="java/time/chrono/IsoChronology" since="26">
-		<extends name="java/time/chrono/AbstractChronology"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="date(III)Ljava/time/LocalDate;"/>
-		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/LocalDate;"/>
-		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;"/>
-		<method name="dateEpochDay(J)Ljava/time/LocalDate;"/>
-		<method name="dateNow()Ljava/time/LocalDate;"/>
-		<method name="dateNow(Ljava/time/Clock;)Ljava/time/LocalDate;"/>
-		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/LocalDate;"/>
-		<method name="dateYearDay(II)Ljava/time/LocalDate;"/>
-		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/LocalDate;"/>
-		<method name="eraOf(I)Ljava/time/chrono/IsoEra;"/>
-		<method name="localDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;"/>
-		<method name="period(III)Ljava/time/Period;"/>
-		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/LocalDate;"/>
-		<method name="zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
-		<method name="zonedDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;"/>
-		<field name="INSTANCE"/>
-	</class>
-	<class name="java/time/chrono/IsoEra" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/chrono/Era"/>
-		<method name="of(I)Ljava/time/chrono/IsoEra;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/IsoEra;"/>
-		<method name="values()[Ljava/time/chrono/IsoEra;"/>
-		<field name="BCE"/>
-		<field name="CE"/>
-	</class>
-	<class name="java/time/chrono/JapaneseChronology" since="26">
-		<extends name="java/time/chrono/AbstractChronology"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="date(III)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="dateEpochDay(J)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="dateNow()Ljava/time/chrono/JapaneseDate;"/>
-		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="dateYearDay(II)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="eraOf(I)Ljava/time/chrono/JapaneseEra;"/>
-		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/JapaneseDate;"/>
-		<field name="INSTANCE"/>
-	</class>
-	<class name="java/time/chrono/JapaneseDate" since="26">
-		<extends name="java/lang/Object" since="29"/>
-		<extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalDate;)V" since="29"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="getChronology()Ljava/time/chrono/JapaneseChronology;"/>
-		<method name="getEra()Ljava/time/chrono/JapaneseEra;"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="now()Ljava/time/chrono/JapaneseDate;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="of(III)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="of(Ljava/time/chrono/JapaneseEra;III)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/JapaneseDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/JapaneseDate;"/>
-	</class>
-	<class name="java/time/chrono/JapaneseEra" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/time/chrono/Era"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ILjava/time/LocalDate;)V" since="29"/>
-		<method name="of(I)Ljava/time/chrono/JapaneseEra;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/JapaneseEra;"/>
-		<method name="values()[Ljava/time/chrono/JapaneseEra;"/>
-		<field name="HEISEI"/>
-		<field name="MEIJI"/>
-		<field name="SHOWA"/>
-		<field name="TAISHO"/>
-	</class>
-	<class name="java/time/chrono/MinguoChronology" since="26">
-		<extends name="java/time/chrono/AbstractChronology"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="date(III)Ljava/time/chrono/MinguoDate;"/>
-		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/MinguoDate;"/>
-		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="dateEpochDay(J)Ljava/time/chrono/MinguoDate;"/>
-		<method name="dateNow()Ljava/time/chrono/MinguoDate;"/>
-		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="dateYearDay(II)Ljava/time/chrono/MinguoDate;"/>
-		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/MinguoDate;"/>
-		<method name="eraOf(I)Ljava/time/chrono/MinguoEra;"/>
-		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/MinguoDate;"/>
-		<field name="INSTANCE"/>
-	</class>
-	<class name="java/time/chrono/MinguoDate" since="26">
-		<extends name="java/lang/Object" since="29"/>
-		<extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalDate;)V" since="29"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="getChronology()Ljava/time/chrono/MinguoChronology;"/>
-		<method name="getEra()Ljava/time/chrono/MinguoEra;"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="now()Ljava/time/chrono/MinguoDate;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="of(III)Ljava/time/chrono/MinguoDate;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/MinguoDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/MinguoDate;"/>
-	</class>
-	<class name="java/time/chrono/MinguoEra" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/chrono/Era"/>
-		<method name="of(I)Ljava/time/chrono/MinguoEra;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/MinguoEra;"/>
-		<method name="values()[Ljava/time/chrono/MinguoEra;"/>
-		<field name="BEFORE_ROC"/>
-		<field name="ROC"/>
-	</class>
-	<class name="java/time/chrono/ThaiBuddhistChronology" since="26">
-		<extends name="java/time/chrono/AbstractChronology"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="date(III)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="dateEpochDay(J)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="dateNow()Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="dateYearDay(II)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="eraOf(I)Ljava/time/chrono/ThaiBuddhistEra;"/>
-		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<field name="INSTANCE"/>
-	</class>
-	<class name="java/time/chrono/ThaiBuddhistDate" since="26">
-		<extends name="java/lang/Object" since="29"/>
-		<extends name="java/time/chrono/ChronoLocalDateImpl" removed="29"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalDate;)V" since="29"/>
-		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="getChronology()Ljava/time/chrono/ThaiBuddhistChronology;"/>
-		<method name="getEra()Ljava/time/chrono/ThaiBuddhistEra;"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="now()Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="of(III)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ThaiBuddhistDate;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ThaiBuddhistDate;"/>
-	</class>
-	<class name="java/time/chrono/ThaiBuddhistEra" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/chrono/Era"/>
-		<method name="of(I)Ljava/time/chrono/ThaiBuddhistEra;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/ThaiBuddhistEra;"/>
-		<method name="values()[Ljava/time/chrono/ThaiBuddhistEra;"/>
-		<field name="BE"/>
-		<field name="BEFORE_BE"/>
-	</class>
-	<class name="java/time/format/DateTimeFormatter" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/String;"/>
-		<method name="formatTo(Ljava/time/temporal/TemporalAccessor;Ljava/lang/Appendable;)V"/>
-		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
-		<method name="getDecimalStyle()Ljava/time/format/DecimalStyle;"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getResolverFields()Ljava/util/Set;"/>
-		<method name="getResolverStyle()Ljava/time/format/ResolverStyle;"/>
-		<method name="getZone()Ljava/time/ZoneId;"/>
-		<method name="ofLocalizedDate(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="ofLocalizedDateTime(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="ofLocalizedDateTime(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="ofLocalizedTime(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="ofPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="ofPattern(Ljava/lang/String;Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/temporal/TemporalAccessor;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/temporal/TemporalAccessor;"/>
-		<method name="parse(Ljava/lang/CharSequence;Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;"/>
-		<method name="parseBest(Ljava/lang/CharSequence;[Ljava/time/temporal/TemporalQuery;)Ljava/time/temporal/TemporalAccessor;"/>
-		<method name="parseUnresolved(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/temporal/TemporalAccessor;"/>
-		<method name="parsedExcessDays()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="parsedLeapSecond()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="toFormat()Ljava/text/Format;"/>
-		<method name="toFormat(Ljava/time/temporal/TemporalQuery;)Ljava/text/Format;"/>
-		<method name="withChronology(Ljava/time/chrono/Chronology;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="withDecimalStyle(Ljava/time/format/DecimalStyle;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="withLocale(Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="withResolverFields(Ljava/util/Set;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="withResolverFields([Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="withResolverStyle(Ljava/time/format/ResolverStyle;)Ljava/time/format/DateTimeFormatter;"/>
-		<method name="withZone(Ljava/time/ZoneId;)Ljava/time/format/DateTimeFormatter;"/>
-		<field name="BASIC_ISO_DATE"/>
-		<field name="ISO_DATE"/>
-		<field name="ISO_DATE_TIME"/>
-		<field name="ISO_INSTANT"/>
-		<field name="ISO_LOCAL_DATE"/>
-		<field name="ISO_LOCAL_DATE_TIME"/>
-		<field name="ISO_LOCAL_TIME"/>
-		<field name="ISO_OFFSET_DATE"/>
-		<field name="ISO_OFFSET_DATE_TIME"/>
-		<field name="ISO_OFFSET_TIME"/>
-		<field name="ISO_ORDINAL_DATE"/>
-		<field name="ISO_TIME"/>
-		<field name="ISO_WEEK_DATE"/>
-		<field name="ISO_ZONED_DATE_TIME"/>
-		<field name="RFC_1123_DATE_TIME"/>
-	</class>
-	<class name="java/time/format/DateTimeFormatterBuilder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="append(Ljava/time/format/DateTimeFormatter;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendChronologyId()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendChronologyText(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendFraction(Ljava/time/temporal/TemporalField;IIZ)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendInstant()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendInstant(I)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendLiteral(C)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendLiteral(Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendLocalized(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendLocalizedOffset(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendOffset(Ljava/lang/String;Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendOffsetId()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendOptional(Ljava/time/format/DateTimeFormatter;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendText(Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendText(Ljava/time/temporal/TemporalField;Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendText(Ljava/time/temporal/TemporalField;Ljava/util/Map;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendValue(Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendValue(Ljava/time/temporal/TemporalField;I)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendValue(Ljava/time/temporal/TemporalField;IILjava/time/format/SignStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendValueReduced(Ljava/time/temporal/TemporalField;III)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendValueReduced(Ljava/time/temporal/TemporalField;IILjava/time/chrono/ChronoLocalDate;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendZoneId()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendZoneOrOffsetId()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendZoneRegionId()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendZoneText(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="appendZoneText(Ljava/time/format/TextStyle;Ljava/util/Set;)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="getLocalizedDateTimePattern(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;Ljava/time/chrono/Chronology;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="optionalEnd()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="optionalStart()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="padNext(I)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="padNext(IC)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="parseCaseInsensitive()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="parseCaseSensitive()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="parseDefaulting(Ljava/time/temporal/TemporalField;J)Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="parseLenient()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="parseStrict()Ljava/time/format/DateTimeFormatterBuilder;"/>
-		<method name="toFormatter()Ljava/time/format/DateTimeFormatter;"/>
-		<method name="toFormatter(Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;"/>
-	</class>
-	<class name="java/time/format/DateTimeParseException" since="26">
-		<extends name="java/time/DateTimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;ILjava/lang/Throwable;)V"/>
-		<method name="getErrorIndex()I"/>
-		<method name="getParsedString()Ljava/lang/String;"/>
-	</class>
-	<class name="java/time/format/DecimalStyle" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(CCCC)V" since="29"/>
-		<method name="getAvailableLocales()Ljava/util/Set;"/>
-		<method name="getDecimalSeparator()C"/>
-		<method name="getNegativeSign()C"/>
-		<method name="getPositiveSign()C"/>
-		<method name="getZeroDigit()C"/>
-		<method name="of(Ljava/util/Locale;)Ljava/time/format/DecimalStyle;"/>
-		<method name="ofDefaultLocale()Ljava/time/format/DecimalStyle;"/>
-		<method name="withDecimalSeparator(C)Ljava/time/format/DecimalStyle;"/>
-		<method name="withNegativeSign(C)Ljava/time/format/DecimalStyle;"/>
-		<method name="withPositiveSign(C)Ljava/time/format/DecimalStyle;"/>
-		<method name="withZeroDigit(C)Ljava/time/format/DecimalStyle;"/>
-		<field name="STANDARD"/>
-	</class>
-	<class name="java/time/format/FormatStyle" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/FormatStyle;"/>
-		<method name="values()[Ljava/time/format/FormatStyle;"/>
-		<field name="FULL"/>
-		<field name="LONG"/>
-		<field name="MEDIUM"/>
-		<field name="SHORT"/>
-	</class>
-	<class name="java/time/format/ResolverStyle" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/ResolverStyle;"/>
-		<method name="values()[Ljava/time/format/ResolverStyle;"/>
-		<field name="LENIENT"/>
-		<field name="SMART"/>
-		<field name="STRICT"/>
-	</class>
-	<class name="java/time/format/SignStyle" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/SignStyle;"/>
-		<method name="values()[Ljava/time/format/SignStyle;"/>
-		<field name="ALWAYS"/>
-		<field name="EXCEEDS_PAD"/>
-		<field name="NEVER"/>
-		<field name="NORMAL"/>
-		<field name="NOT_NEGATIVE"/>
-	</class>
-	<class name="java/time/format/TextStyle" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="asNormal()Ljava/time/format/TextStyle;"/>
-		<method name="asStandalone()Ljava/time/format/TextStyle;"/>
-		<method name="isStandalone()Z"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/TextStyle;"/>
-		<method name="values()[Ljava/time/format/TextStyle;"/>
-		<field name="FULL"/>
-		<field name="FULL_STANDALONE"/>
-		<field name="NARROW"/>
-		<field name="NARROW_STANDALONE"/>
-		<field name="SHORT"/>
-		<field name="SHORT_STANDALONE"/>
-	</class>
-	<class name="java/time/temporal/ChronoField" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/temporal/TemporalField"/>
-		<method name="checkValidIntValue(J)I"/>
-		<method name="checkValidValue(J)J"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/temporal/ChronoField;"/>
-		<method name="values()[Ljava/time/temporal/ChronoField;"/>
-		<field name="ALIGNED_DAY_OF_WEEK_IN_MONTH"/>
-		<field name="ALIGNED_DAY_OF_WEEK_IN_YEAR"/>
-		<field name="ALIGNED_WEEK_OF_MONTH"/>
-		<field name="ALIGNED_WEEK_OF_YEAR"/>
-		<field name="AMPM_OF_DAY"/>
-		<field name="CLOCK_HOUR_OF_AMPM"/>
-		<field name="CLOCK_HOUR_OF_DAY"/>
-		<field name="DAY_OF_MONTH"/>
-		<field name="DAY_OF_WEEK"/>
-		<field name="DAY_OF_YEAR"/>
-		<field name="EPOCH_DAY"/>
-		<field name="ERA"/>
-		<field name="HOUR_OF_AMPM"/>
-		<field name="HOUR_OF_DAY"/>
-		<field name="INSTANT_SECONDS"/>
-		<field name="MICRO_OF_DAY"/>
-		<field name="MICRO_OF_SECOND"/>
-		<field name="MILLI_OF_DAY"/>
-		<field name="MILLI_OF_SECOND"/>
-		<field name="MINUTE_OF_DAY"/>
-		<field name="MINUTE_OF_HOUR"/>
-		<field name="MONTH_OF_YEAR"/>
-		<field name="NANO_OF_DAY"/>
-		<field name="NANO_OF_SECOND"/>
-		<field name="OFFSET_SECONDS"/>
-		<field name="PROLEPTIC_MONTH"/>
-		<field name="SECOND_OF_DAY"/>
-		<field name="SECOND_OF_MINUTE"/>
-		<field name="YEAR"/>
-		<field name="YEAR_OF_ERA"/>
-	</class>
-	<class name="java/time/temporal/ChronoUnit" since="26">
-		<extends name="java/lang/Enum"/>
-		<implements name="java/time/temporal/TemporalUnit"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/temporal/ChronoUnit;"/>
-		<method name="values()[Ljava/time/temporal/ChronoUnit;"/>
-		<field name="CENTURIES"/>
-		<field name="DAYS"/>
-		<field name="DECADES"/>
-		<field name="ERAS"/>
-		<field name="FOREVER"/>
-		<field name="HALF_DAYS"/>
-		<field name="HOURS"/>
-		<field name="MICROS"/>
-		<field name="MILLENNIA"/>
-		<field name="MILLIS"/>
-		<field name="MINUTES"/>
-		<field name="MONTHS"/>
-		<field name="NANOS"/>
-		<field name="SECONDS"/>
-		<field name="WEEKS"/>
-		<field name="YEARS"/>
-	</class>
-	<class name="java/time/temporal/IsoFields" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="DAY_OF_QUARTER"/>
-		<field name="QUARTER_OF_YEAR"/>
-		<field name="QUARTER_YEARS"/>
-		<field name="WEEK_BASED_YEAR"/>
-		<field name="WEEK_BASED_YEARS"/>
-		<field name="WEEK_OF_WEEK_BASED_YEAR"/>
-	</class>
-	<class name="java/time/temporal/JulianFields" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="JULIAN_DAY"/>
-		<field name="MODIFIED_JULIAN_DAY"/>
-		<field name="RATA_DIE"/>
-	</class>
-	<class name="java/time/temporal/Temporal" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/time/temporal/TemporalAccessor"/>
-		<method name="isSupported(Ljava/time/temporal/TemporalUnit;)Z"/>
-		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"/>
-		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"/>
-		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"/>
-		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"/>
-		<method name="until(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J"/>
-		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/temporal/Temporal;"/>
-		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/temporal/Temporal;"/>
-	</class>
-	<class name="java/time/temporal/TemporalAccessor" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="get(Ljava/time/temporal/TemporalField;)I"/>
-		<method name="getLong(Ljava/time/temporal/TemporalField;)J"/>
-		<method name="isSupported(Ljava/time/temporal/TemporalField;)Z"/>
-		<method name="query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;"/>
-		<method name="range(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;"/>
-	</class>
-	<class name="java/time/temporal/TemporalAdjuster" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="adjustInto(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"/>
-	</class>
-	<class name="java/time/temporal/TemporalAdjusters" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="dayOfWeekInMonth(ILjava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="firstDayOfMonth()Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="firstDayOfNextMonth()Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="firstDayOfNextYear()Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="firstDayOfYear()Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="firstInMonth(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="lastDayOfMonth()Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="lastDayOfYear()Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="lastInMonth(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="next(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="nextOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="ofDateAdjuster(Ljava/util/function/UnaryOperator;)Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="previous(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
-		<method name="previousOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
-	</class>
-	<class name="java/time/temporal/TemporalAmount" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="addTo(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"/>
-		<method name="get(Ljava/time/temporal/TemporalUnit;)J"/>
-		<method name="getUnits()Ljava/util/List;"/>
-		<method name="subtractFrom(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"/>
-	</class>
-	<class name="java/time/temporal/TemporalField" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="adjustInto(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;"/>
-		<method name="getBaseUnit()Ljava/time/temporal/TemporalUnit;"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getFrom(Ljava/time/temporal/TemporalAccessor;)J"/>
-		<method name="getRangeUnit()Ljava/time/temporal/TemporalUnit;"/>
-		<method name="isDateBased()Z"/>
-		<method name="isSupportedBy(Ljava/time/temporal/TemporalAccessor;)Z"/>
-		<method name="isTimeBased()Z"/>
-		<method name="range()Ljava/time/temporal/ValueRange;"/>
-		<method name="rangeRefinedBy(Ljava/time/temporal/TemporalAccessor;)Ljava/time/temporal/ValueRange;"/>
-		<method name="resolve(Ljava/util/Map;Ljava/time/temporal/TemporalAccessor;Ljava/time/format/ResolverStyle;)Ljava/time/temporal/TemporalAccessor;"/>
-	</class>
-	<class name="java/time/temporal/TemporalQueries" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="chronology()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="localDate()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="localTime()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="offset()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="precision()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="zone()Ljava/time/temporal/TemporalQuery;"/>
-		<method name="zoneId()Ljava/time/temporal/TemporalQuery;"/>
-	</class>
-	<class name="java/time/temporal/TemporalQuery" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="queryFrom(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/time/temporal/TemporalUnit" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="addTo(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;"/>
-		<method name="between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)J"/>
-		<method name="getDuration()Ljava/time/Duration;"/>
-		<method name="isDateBased()Z"/>
-		<method name="isDurationEstimated()Z"/>
-		<method name="isSupportedBy(Ljava/time/temporal/Temporal;)Z"/>
-		<method name="isTimeBased()Z"/>
-	</class>
-	<class name="java/time/temporal/UnsupportedTemporalTypeException" since="26">
-		<extends name="java/time/DateTimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/time/temporal/ValueRange" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(JJJJ)V" since="29"/>
-		<method name="checkValidIntValue(JLjava/time/temporal/TemporalField;)I"/>
-		<method name="checkValidValue(JLjava/time/temporal/TemporalField;)J"/>
-		<method name="getLargestMinimum()J"/>
-		<method name="getMaximum()J"/>
-		<method name="getMinimum()J"/>
-		<method name="getSmallestMaximum()J"/>
-		<method name="isFixed()Z"/>
-		<method name="isIntValue()Z"/>
-		<method name="isValidIntValue(J)Z"/>
-		<method name="isValidValue(J)Z"/>
-		<method name="of(JJ)Ljava/time/temporal/ValueRange;"/>
-		<method name="of(JJJ)Ljava/time/temporal/ValueRange;"/>
-		<method name="of(JJJJ)Ljava/time/temporal/ValueRange;"/>
-	</class>
-	<class name="java/time/temporal/WeekFields" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/DayOfWeek;I)V" since="29"/>
-		<method name="dayOfWeek()Ljava/time/temporal/TemporalField;"/>
-		<method name="getFirstDayOfWeek()Ljava/time/DayOfWeek;"/>
-		<method name="getMinimalDaysInFirstWeek()I"/>
-		<method name="of(Ljava/time/DayOfWeek;I)Ljava/time/temporal/WeekFields;"/>
-		<method name="of(Ljava/util/Locale;)Ljava/time/temporal/WeekFields;"/>
-		<method name="weekBasedYear()Ljava/time/temporal/TemporalField;"/>
-		<method name="weekOfMonth()Ljava/time/temporal/TemporalField;"/>
-		<method name="weekOfWeekBasedYear()Ljava/time/temporal/TemporalField;"/>
-		<method name="weekOfYear()Ljava/time/temporal/TemporalField;"/>
-		<field name="ISO"/>
-		<field name="SUNDAY_START"/>
-		<field name="WEEK_BASED_YEARS"/>
-	</class>
-	<class name="java/time/zone/ZoneOffsetTransition" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)V" since="29"/>
-		<method name="compareTo(Ljava/time/zone/ZoneOffsetTransition;)I"/>
-		<method name="getDateTimeAfter()Ljava/time/LocalDateTime;"/>
-		<method name="getDateTimeBefore()Ljava/time/LocalDateTime;"/>
-		<method name="getDuration()Ljava/time/Duration;"/>
-		<method name="getInstant()Ljava/time/Instant;"/>
-		<method name="getOffsetAfter()Ljava/time/ZoneOffset;"/>
-		<method name="getOffsetBefore()Ljava/time/ZoneOffset;"/>
-		<method name="isGap()Z"/>
-		<method name="isOverlap()Z"/>
-		<method name="isValidOffset(Ljava/time/ZoneOffset;)Z"/>
-		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneOffsetTransition;"/>
-		<method name="toEpochSecond()J"/>
-	</class>
-	<class name="java/time/zone/ZoneOffsetTransitionRule" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/Month;ILjava/time/DayOfWeek;Ljava/time/LocalTime;ZLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)V" since="29"/>
-		<method name="createTransition(I)Ljava/time/zone/ZoneOffsetTransition;"/>
-		<method name="getDayOfMonthIndicator()I"/>
-		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
-		<method name="getLocalTime()Ljava/time/LocalTime;"/>
-		<method name="getMonth()Ljava/time/Month;"/>
-		<method name="getOffsetAfter()Ljava/time/ZoneOffset;"/>
-		<method name="getOffsetBefore()Ljava/time/ZoneOffset;"/>
-		<method name="getStandardOffset()Ljava/time/ZoneOffset;"/>
-		<method name="getTimeDefinition()Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;"/>
-		<method name="isMidnightEndOfDay()Z"/>
-		<method name="of(Ljava/time/Month;ILjava/time/DayOfWeek;Ljava/time/LocalTime;ZLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneOffsetTransitionRule;"/>
-	</class>
-	<class name="java/time/zone/ZoneOffsetTransitionRule$TimeDefinition" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="createDateTime(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/LocalDateTime;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;"/>
-		<method name="values()[Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;"/>
-		<field name="STANDARD"/>
-		<field name="UTC"/>
-		<field name="WALL"/>
-	</class>
-	<class name="java/time/zone/ZoneRules" since="26">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/time/ZoneOffset;)V" since="29"/>
-		<method name="getDaylightSavings(Ljava/time/Instant;)Ljava/time/Duration;"/>
-		<method name="getOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;"/>
-		<method name="getOffset(Ljava/time/LocalDateTime;)Ljava/time/ZoneOffset;"/>
-		<method name="getStandardOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;"/>
-		<method name="getTransition(Ljava/time/LocalDateTime;)Ljava/time/zone/ZoneOffsetTransition;"/>
-		<method name="getTransitionRules()Ljava/util/List;"/>
-		<method name="getTransitions()Ljava/util/List;"/>
-		<method name="getValidOffsets(Ljava/time/LocalDateTime;)Ljava/util/List;"/>
-		<method name="isDaylightSavings(Ljava/time/Instant;)Z"/>
-		<method name="isFixedOffset()Z"/>
-		<method name="isValidOffset(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)Z"/>
-		<method name="nextTransition(Ljava/time/Instant;)Ljava/time/zone/ZoneOffsetTransition;"/>
-		<method name="of(Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneRules;"/>
-		<method name="of(Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/time/zone/ZoneRules;"/>
-		<method name="previousTransition(Ljava/time/Instant;)Ljava/time/zone/ZoneOffsetTransition;"/>
-	</class>
-	<class name="java/time/zone/ZoneRulesException" since="26">
-		<extends name="java/time/DateTimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/AbstractCollection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Collection"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/AbstractList" since="1">
-		<extends name="java/util/AbstractCollection"/>
-		<implements name="java/util/List"/>
-		<method name="&lt;init>()V"/>
-		<method name="removeRange(II)V"/>
-		<field name="modCount"/>
-	</class>
-	<class name="java/util/AbstractMap" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Map"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/AbstractMap$SimpleEntry" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/Map$Entry"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="&lt;init>(Ljava/util/Map$Entry;)V"/>
-	</class>
-	<class name="java/util/AbstractMap$SimpleImmutableEntry" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/Map$Entry"/>
-		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="&lt;init>(Ljava/util/Map$Entry;)V"/>
-	</class>
-	<class name="java/util/AbstractQueue" since="1">
-		<extends name="java/util/AbstractCollection"/>
-		<implements name="java/util/Queue"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/AbstractSequentialList" since="1">
-		<extends name="java/util/AbstractList"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/AbstractSet" since="1">
-		<extends name="java/util/AbstractCollection"/>
-		<implements name="java/util/Set"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/ArrayDeque" since="9">
-		<extends name="java/util/AbstractCollection"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/Deque"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="clone()Ljava/util/ArrayDeque;"/>
-	</class>
-	<class name="java/util/ArrayList" since="1">
-		<extends name="java/util/AbstractList"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/RandomAccess"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="ensureCapacity(I)V"/>
-		<method name="trimToSize()V"/>
-	</class>
-	<class name="java/util/Arrays" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="asList([Ljava/lang/Object;)Ljava/util/List;"/>
-		<method name="binarySearch([BB)I"/>
-		<method name="binarySearch([BIIB)I" since="9"/>
-		<method name="binarySearch([CC)I"/>
-		<method name="binarySearch([CIIC)I" since="9"/>
-		<method name="binarySearch([DD)I"/>
-		<method name="binarySearch([DIID)I" since="9"/>
-		<method name="binarySearch([FF)I"/>
-		<method name="binarySearch([FIIF)I" since="9"/>
-		<method name="binarySearch([II)I"/>
-		<method name="binarySearch([IIII)I" since="9"/>
-		<method name="binarySearch([JIIJ)I" since="9"/>
-		<method name="binarySearch([JJ)I"/>
-		<method name="binarySearch([Ljava/lang/Object;IILjava/lang/Object;)I" since="9"/>
-		<method name="binarySearch([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I" since="9"/>
-		<method name="binarySearch([Ljava/lang/Object;Ljava/lang/Object;)I"/>
-		<method name="binarySearch([Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I"/>
-		<method name="binarySearch([SIIS)I" since="9"/>
-		<method name="binarySearch([SS)I"/>
-		<method name="copyOf([BI)[B" since="9"/>
-		<method name="copyOf([CI)[C" since="9"/>
-		<method name="copyOf([DI)[D" since="9"/>
-		<method name="copyOf([FI)[F" since="9"/>
-		<method name="copyOf([II)[I" since="9"/>
-		<method name="copyOf([JI)[J" since="9"/>
-		<method name="copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;" since="9"/>
-		<method name="copyOf([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;" since="9"/>
-		<method name="copyOf([SI)[S" since="9"/>
-		<method name="copyOf([ZI)[Z" since="9"/>
-		<method name="copyOfRange([BII)[B" since="9"/>
-		<method name="copyOfRange([CII)[C" since="9"/>
-		<method name="copyOfRange([DII)[D" since="9"/>
-		<method name="copyOfRange([FII)[F" since="9"/>
-		<method name="copyOfRange([III)[I" since="9"/>
-		<method name="copyOfRange([JII)[J" since="9"/>
-		<method name="copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;" since="9"/>
-		<method name="copyOfRange([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;" since="9"/>
-		<method name="copyOfRange([SII)[S" since="9"/>
-		<method name="copyOfRange([ZII)[Z" since="9"/>
-		<method name="deepEquals([Ljava/lang/Object;[Ljava/lang/Object;)Z"/>
-		<method name="deepHashCode([Ljava/lang/Object;)I"/>
-		<method name="deepToString([Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="equals([B[B)Z"/>
-		<method name="equals([C[C)Z"/>
-		<method name="equals([D[D)Z"/>
-		<method name="equals([F[F)Z"/>
-		<method name="equals([I[I)Z"/>
-		<method name="equals([J[J)Z"/>
-		<method name="equals([Ljava/lang/Object;[Ljava/lang/Object;)Z"/>
-		<method name="equals([S[S)Z"/>
-		<method name="equals([Z[Z)Z"/>
-		<method name="fill([BB)V"/>
-		<method name="fill([BIIB)V"/>
-		<method name="fill([CC)V"/>
-		<method name="fill([CIIC)V"/>
-		<method name="fill([DD)V"/>
-		<method name="fill([DIID)V"/>
-		<method name="fill([FF)V"/>
-		<method name="fill([FIIF)V"/>
-		<method name="fill([II)V"/>
-		<method name="fill([IIII)V"/>
-		<method name="fill([JIIJ)V"/>
-		<method name="fill([JJ)V"/>
-		<method name="fill([Ljava/lang/Object;IILjava/lang/Object;)V"/>
-		<method name="fill([Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="fill([SIIS)V"/>
-		<method name="fill([SS)V"/>
-		<method name="fill([ZIIZ)V"/>
-		<method name="fill([ZZ)V"/>
-		<method name="hashCode([B)I"/>
-		<method name="hashCode([C)I"/>
-		<method name="hashCode([D)I"/>
-		<method name="hashCode([F)I"/>
-		<method name="hashCode([I)I"/>
-		<method name="hashCode([J)I"/>
-		<method name="hashCode([Ljava/lang/Object;)I"/>
-		<method name="hashCode([S)I"/>
-		<method name="hashCode([Z)I"/>
-		<method name="parallelPrefix([DIILjava/util/function/DoubleBinaryOperator;)V" since="24"/>
-		<method name="parallelPrefix([DLjava/util/function/DoubleBinaryOperator;)V" since="24"/>
-		<method name="parallelPrefix([IIILjava/util/function/IntBinaryOperator;)V" since="24"/>
-		<method name="parallelPrefix([ILjava/util/function/IntBinaryOperator;)V" since="24"/>
-		<method name="parallelPrefix([JIILjava/util/function/LongBinaryOperator;)V" since="24"/>
-		<method name="parallelPrefix([JLjava/util/function/LongBinaryOperator;)V" since="24"/>
-		<method name="parallelPrefix([Ljava/lang/Object;IILjava/util/function/BinaryOperator;)V" since="24"/>
-		<method name="parallelPrefix([Ljava/lang/Object;Ljava/util/function/BinaryOperator;)V" since="24"/>
-		<method name="parallelSetAll([DLjava/util/function/IntToDoubleFunction;)V" since="24"/>
-		<method name="parallelSetAll([ILjava/util/function/IntUnaryOperator;)V" since="24"/>
-		<method name="parallelSetAll([JLjava/util/function/IntToLongFunction;)V" since="24"/>
-		<method name="parallelSetAll([Ljava/lang/Object;Ljava/util/function/IntFunction;)V" since="24"/>
-		<method name="parallelSort([B)V" since="24"/>
-		<method name="parallelSort([BII)V" since="24"/>
-		<method name="parallelSort([C)V" since="24"/>
-		<method name="parallelSort([CII)V" since="24"/>
-		<method name="parallelSort([D)V" since="24"/>
-		<method name="parallelSort([DII)V" since="24"/>
-		<method name="parallelSort([F)V" since="24"/>
-		<method name="parallelSort([FII)V" since="24"/>
-		<method name="parallelSort([I)V" since="24"/>
-		<method name="parallelSort([III)V" since="24"/>
-		<method name="parallelSort([J)V" since="24"/>
-		<method name="parallelSort([JII)V" since="24"/>
-		<method name="parallelSort([Ljava/lang/Comparable;)V" since="24"/>
-		<method name="parallelSort([Ljava/lang/Comparable;II)V" since="24"/>
-		<method name="parallelSort([Ljava/lang/Object;IILjava/util/Comparator;)V" since="24"/>
-		<method name="parallelSort([Ljava/lang/Object;Ljava/util/Comparator;)V" since="24"/>
-		<method name="parallelSort([S)V" since="24"/>
-		<method name="parallelSort([SII)V" since="24"/>
-		<method name="setAll([DLjava/util/function/IntToDoubleFunction;)V" since="24"/>
-		<method name="setAll([ILjava/util/function/IntUnaryOperator;)V" since="24"/>
-		<method name="setAll([JLjava/util/function/IntToLongFunction;)V" since="24"/>
-		<method name="setAll([Ljava/lang/Object;Ljava/util/function/IntFunction;)V" since="24"/>
-		<method name="sort([B)V"/>
-		<method name="sort([BII)V"/>
-		<method name="sort([C)V"/>
-		<method name="sort([CII)V"/>
-		<method name="sort([D)V"/>
-		<method name="sort([DII)V"/>
-		<method name="sort([F)V"/>
-		<method name="sort([FII)V"/>
-		<method name="sort([I)V"/>
-		<method name="sort([III)V"/>
-		<method name="sort([J)V"/>
-		<method name="sort([JII)V"/>
-		<method name="sort([Ljava/lang/Object;)V"/>
-		<method name="sort([Ljava/lang/Object;II)V"/>
-		<method name="sort([Ljava/lang/Object;IILjava/util/Comparator;)V"/>
-		<method name="sort([Ljava/lang/Object;Ljava/util/Comparator;)V"/>
-		<method name="sort([S)V"/>
-		<method name="sort([SII)V"/>
-		<method name="spliterator([D)Ljava/util/Spliterator$OfDouble;" since="24"/>
-		<method name="spliterator([DII)Ljava/util/Spliterator$OfDouble;" since="24"/>
-		<method name="spliterator([I)Ljava/util/Spliterator$OfInt;" since="24"/>
-		<method name="spliterator([III)Ljava/util/Spliterator$OfInt;" since="24"/>
-		<method name="spliterator([J)Ljava/util/Spliterator$OfLong;" since="24"/>
-		<method name="spliterator([JII)Ljava/util/Spliterator$OfLong;" since="24"/>
-		<method name="spliterator([Ljava/lang/Object;)Ljava/util/Spliterator;" since="24"/>
-		<method name="spliterator([Ljava/lang/Object;II)Ljava/util/Spliterator;" since="24"/>
-		<method name="stream([D)Ljava/util/stream/DoubleStream;" since="24"/>
-		<method name="stream([DII)Ljava/util/stream/DoubleStream;" since="24"/>
-		<method name="stream([I)Ljava/util/stream/IntStream;" since="24"/>
-		<method name="stream([III)Ljava/util/stream/IntStream;" since="24"/>
-		<method name="stream([J)Ljava/util/stream/LongStream;" since="24"/>
-		<method name="stream([JII)Ljava/util/stream/LongStream;" since="24"/>
-		<method name="stream([Ljava/lang/Object;)Ljava/util/stream/Stream;" since="24"/>
-		<method name="stream([Ljava/lang/Object;II)Ljava/util/stream/Stream;" since="24"/>
-		<method name="toString([B)Ljava/lang/String;"/>
-		<method name="toString([C)Ljava/lang/String;"/>
-		<method name="toString([D)Ljava/lang/String;"/>
-		<method name="toString([F)Ljava/lang/String;"/>
-		<method name="toString([I)Ljava/lang/String;"/>
-		<method name="toString([J)Ljava/lang/String;"/>
-		<method name="toString([Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="toString([S)Ljava/lang/String;"/>
-		<method name="toString([Z)Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/Base64" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDecoder()Ljava/util/Base64$Decoder;"/>
-		<method name="getEncoder()Ljava/util/Base64$Encoder;"/>
-		<method name="getMimeDecoder()Ljava/util/Base64$Decoder;"/>
-		<method name="getMimeEncoder()Ljava/util/Base64$Encoder;"/>
-		<method name="getMimeEncoder(I[B)Ljava/util/Base64$Encoder;"/>
-		<method name="getUrlDecoder()Ljava/util/Base64$Decoder;"/>
-		<method name="getUrlEncoder()Ljava/util/Base64$Encoder;"/>
-	</class>
-	<class name="java/util/Base64$Decoder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(ZZ)V" since="29"/>
-		<method name="decode(Ljava/lang/String;)[B"/>
-		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
-		<method name="decode([B)[B"/>
-		<method name="decode([B[B)I"/>
-		<method name="wrap(Ljava/io/InputStream;)Ljava/io/InputStream;"/>
-	</class>
-	<class name="java/util/Base64$Encoder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Z[BIZ)V" since="29"/>
-		<method name="encode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
-		<method name="encode([B)[B"/>
-		<method name="encode([B[B)I"/>
-		<method name="encodeToString([B)Ljava/lang/String;"/>
-		<method name="withoutPadding()Ljava/util/Base64$Encoder;"/>
-		<method name="wrap(Ljava/io/OutputStream;)Ljava/io/OutputStream;"/>
-	</class>
-	<class name="java/util/BitSet" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="and(Ljava/util/BitSet;)V"/>
-		<method name="andNot(Ljava/util/BitSet;)V"/>
-		<method name="cardinality()I"/>
-		<method name="clear()V"/>
-		<method name="clear(I)V"/>
-		<method name="clear(II)V"/>
-		<method name="flip(I)V"/>
-		<method name="flip(II)V"/>
-		<method name="get(I)Z"/>
-		<method name="get(II)Ljava/util/BitSet;"/>
-		<method name="intersects(Ljava/util/BitSet;)Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="length()I"/>
-		<method name="nextClearBit(I)I"/>
-		<method name="nextSetBit(I)I"/>
-		<method name="or(Ljava/util/BitSet;)V"/>
-		<method name="previousClearBit(I)I" since="19"/>
-		<method name="previousSetBit(I)I" since="19"/>
-		<method name="set(I)V"/>
-		<method name="set(II)V"/>
-		<method name="set(IIZ)V"/>
-		<method name="set(IZ)V"/>
-		<method name="size()I"/>
-		<method name="stream()Ljava/util/stream/IntStream;" since="24"/>
-		<method name="toByteArray()[B" since="19"/>
-		<method name="toLongArray()[J" since="19"/>
-		<method name="valueOf(Ljava/nio/ByteBuffer;)Ljava/util/BitSet;" since="19"/>
-		<method name="valueOf(Ljava/nio/LongBuffer;)Ljava/util/BitSet;" since="19"/>
-		<method name="valueOf([B)Ljava/util/BitSet;" since="19"/>
-		<method name="valueOf([J)Ljava/util/BitSet;" since="19"/>
-		<method name="xor(Ljava/util/BitSet;)V"/>
-	</class>
-	<class name="java/util/Calendar" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="add(II)V"/>
-		<method name="after(Ljava/lang/Object;)Z"/>
-		<method name="before(Ljava/lang/Object;)Z"/>
-		<method name="clear()V"/>
-		<method name="clear(I)V"/>
-		<method name="compareTo(Ljava/util/Calendar;)I"/>
-		<method name="complete()V"/>
-		<method name="computeFields()V"/>
-		<method name="computeTime()V"/>
-		<method name="get(I)I"/>
-		<method name="getActualMaximum(I)I"/>
-		<method name="getActualMinimum(I)I"/>
-		<method name="getAvailableCalendarTypes()Ljava/util/Set;" since="26"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCalendarType()Ljava/lang/String;" since="26"/>
-		<method name="getDisplayName(IILjava/util/Locale;)Ljava/lang/String;" since="9"/>
-		<method name="getDisplayNames(IILjava/util/Locale;)Ljava/util/Map;" since="9"/>
-		<method name="getFirstDayOfWeek()I"/>
-		<method name="getGreatestMinimum(I)I"/>
-		<method name="getInstance()Ljava/util/Calendar;"/>
-		<method name="getInstance(Ljava/util/Locale;)Ljava/util/Calendar;"/>
-		<method name="getInstance(Ljava/util/TimeZone;)Ljava/util/Calendar;"/>
-		<method name="getInstance(Ljava/util/TimeZone;Ljava/util/Locale;)Ljava/util/Calendar;"/>
-		<method name="getLeastMaximum(I)I"/>
-		<method name="getMaximum(I)I"/>
-		<method name="getMinimalDaysInFirstWeek()I"/>
-		<method name="getMinimum(I)I"/>
-		<method name="getTime()Ljava/util/Date;"/>
-		<method name="getTimeInMillis()J"/>
-		<method name="getTimeZone()Ljava/util/TimeZone;"/>
-		<method name="getWeekYear()I" since="24"/>
-		<method name="getWeeksInWeekYear()I" since="24"/>
-		<method name="internalGet(I)I"/>
-		<method name="isLenient()Z"/>
-		<method name="isSet(I)Z"/>
-		<method name="isWeekDateSupported()Z" since="24"/>
-		<method name="roll(II)V"/>
-		<method name="roll(IZ)V"/>
-		<method name="set(II)V"/>
-		<method name="set(III)V"/>
-		<method name="set(IIIII)V"/>
-		<method name="set(IIIIII)V"/>
-		<method name="setFirstDayOfWeek(I)V"/>
-		<method name="setLenient(Z)V"/>
-		<method name="setMinimalDaysInFirstWeek(I)V"/>
-		<method name="setTime(Ljava/util/Date;)V"/>
-		<method name="setTimeInMillis(J)V"/>
-		<method name="setTimeZone(Ljava/util/TimeZone;)V"/>
-		<method name="setWeekDate(III)V" since="24"/>
-		<method name="toInstant()Ljava/time/Instant;" since="26"/>
-		<field name="ALL_STYLES" since="9"/>
-		<field name="AM"/>
-		<field name="AM_PM"/>
-		<field name="APRIL"/>
-		<field name="AUGUST"/>
-		<field name="DATE"/>
-		<field name="DAY_OF_MONTH"/>
-		<field name="DAY_OF_WEEK"/>
-		<field name="DAY_OF_WEEK_IN_MONTH"/>
-		<field name="DAY_OF_YEAR"/>
-		<field name="DECEMBER"/>
-		<field name="DST_OFFSET"/>
-		<field name="ERA"/>
-		<field name="FEBRUARY"/>
-		<field name="FIELD_COUNT"/>
-		<field name="FRIDAY"/>
-		<field name="HOUR"/>
-		<field name="HOUR_OF_DAY"/>
-		<field name="JANUARY"/>
-		<field name="JULY"/>
-		<field name="JUNE"/>
-		<field name="LONG" since="9"/>
-		<field name="LONG_FORMAT" since="26"/>
-		<field name="LONG_STANDALONE" since="26"/>
-		<field name="MARCH"/>
-		<field name="MAY"/>
-		<field name="MILLISECOND"/>
-		<field name="MINUTE"/>
-		<field name="MONDAY"/>
-		<field name="MONTH"/>
-		<field name="NARROW_FORMAT" since="26"/>
-		<field name="NARROW_STANDALONE" since="26"/>
-		<field name="NOVEMBER"/>
-		<field name="OCTOBER"/>
-		<field name="PM"/>
-		<field name="SATURDAY"/>
-		<field name="SECOND"/>
-		<field name="SEPTEMBER"/>
-		<field name="SHORT" since="9"/>
-		<field name="SHORT_FORMAT" since="26"/>
-		<field name="SHORT_STANDALONE" since="26"/>
-		<field name="SUNDAY"/>
-		<field name="THURSDAY"/>
-		<field name="TUESDAY"/>
-		<field name="UNDECIMBER"/>
-		<field name="WEDNESDAY"/>
-		<field name="WEEK_OF_MONTH"/>
-		<field name="WEEK_OF_YEAR"/>
-		<field name="YEAR"/>
-		<field name="ZONE_OFFSET"/>
-		<field name="areFieldsSet"/>
-		<field name="fields"/>
-		<field name="isSet"/>
-		<field name="isTimeSet"/>
-		<field name="time"/>
-	</class>
-	<class name="java/util/Calendar$Builder" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="build()Ljava/util/Calendar;"/>
-		<method name="set(II)Ljava/util/Calendar$Builder;"/>
-		<method name="setCalendarType(Ljava/lang/String;)Ljava/util/Calendar$Builder;"/>
-		<method name="setDate(III)Ljava/util/Calendar$Builder;"/>
-		<method name="setFields([I)Ljava/util/Calendar$Builder;"/>
-		<method name="setInstant(J)Ljava/util/Calendar$Builder;"/>
-		<method name="setInstant(Ljava/util/Date;)Ljava/util/Calendar$Builder;"/>
-		<method name="setLenient(Z)Ljava/util/Calendar$Builder;"/>
-		<method name="setLocale(Ljava/util/Locale;)Ljava/util/Calendar$Builder;"/>
-		<method name="setTimeOfDay(III)Ljava/util/Calendar$Builder;"/>
-		<method name="setTimeOfDay(IIII)Ljava/util/Calendar$Builder;"/>
-		<method name="setTimeZone(Ljava/util/TimeZone;)Ljava/util/Calendar$Builder;"/>
-		<method name="setWeekDate(III)Ljava/util/Calendar$Builder;"/>
-		<method name="setWeekDefinition(II)Ljava/util/Calendar$Builder;"/>
-	</class>
-	<class name="java/util/Collection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Iterable"/>
-		<method name="add(Ljava/lang/Object;)Z"/>
-		<method name="addAll(Ljava/util/Collection;)Z"/>
-		<method name="clear()V"/>
-		<method name="contains(Ljava/lang/Object;)Z"/>
-		<method name="containsAll(Ljava/util/Collection;)Z"/>
-		<method name="isEmpty()Z"/>
-		<method name="parallelStream()Ljava/util/stream/Stream;" since="24"/>
-		<method name="remove(Ljava/lang/Object;)Z"/>
-		<method name="removeAll(Ljava/util/Collection;)Z"/>
-		<method name="removeIf(Ljava/util/function/Predicate;)Z" since="24"/>
-		<method name="retainAll(Ljava/util/Collection;)Z"/>
-		<method name="size()I"/>
-		<method name="stream()Ljava/util/stream/Stream;" since="24"/>
-		<method name="toArray()[Ljava/lang/Object;"/>
-		<method name="toArray([Ljava/lang/Object;)[Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/Collections" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z"/>
-		<method name="asLifoQueue(Ljava/util/Deque;)Ljava/util/Queue;" since="9"/>
-		<method name="binarySearch(Ljava/util/List;Ljava/lang/Object;)I"/>
-		<method name="binarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I"/>
-		<method name="checkedCollection(Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection;"/>
-		<method name="checkedList(Ljava/util/List;Ljava/lang/Class;)Ljava/util/List;"/>
-		<method name="checkedMap(Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/Map;"/>
-		<method name="checkedNavigableMap(Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/NavigableMap;" since="26"/>
-		<method name="checkedNavigableSet(Ljava/util/NavigableSet;Ljava/lang/Class;)Ljava/util/NavigableSet;" since="26"/>
-		<method name="checkedQueue(Ljava/util/Queue;Ljava/lang/Class;)Ljava/util/Queue;" since="26"/>
-		<method name="checkedSet(Ljava/util/Set;Ljava/lang/Class;)Ljava/util/Set;"/>
-		<method name="checkedSortedMap(Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/SortedMap;"/>
-		<method name="checkedSortedSet(Ljava/util/SortedSet;Ljava/lang/Class;)Ljava/util/SortedSet;"/>
-		<method name="copy(Ljava/util/List;Ljava/util/List;)V"/>
-		<method name="disjoint(Ljava/util/Collection;Ljava/util/Collection;)Z"/>
-		<method name="emptyEnumeration()Ljava/util/Enumeration;" since="19"/>
-		<method name="emptyIterator()Ljava/util/Iterator;" since="19"/>
-		<method name="emptyList()Ljava/util/List;"/>
-		<method name="emptyListIterator()Ljava/util/ListIterator;" since="19"/>
-		<method name="emptyMap()Ljava/util/Map;"/>
-		<method name="emptyNavigableMap()Ljava/util/NavigableMap;" since="26"/>
-		<method name="emptyNavigableSet()Ljava/util/NavigableSet;" since="26"/>
-		<method name="emptySet()Ljava/util/Set;"/>
-		<method name="emptySortedMap()Ljava/util/SortedMap;" since="26"/>
-		<method name="emptySortedSet()Ljava/util/SortedSet;" since="26"/>
-		<method name="enumeration(Ljava/util/Collection;)Ljava/util/Enumeration;"/>
-		<method name="fill(Ljava/util/List;Ljava/lang/Object;)V"/>
-		<method name="frequency(Ljava/util/Collection;Ljava/lang/Object;)I"/>
-		<method name="indexOfSubList(Ljava/util/List;Ljava/util/List;)I"/>
-		<method name="lastIndexOfSubList(Ljava/util/List;Ljava/util/List;)I"/>
-		<method name="list(Ljava/util/Enumeration;)Ljava/util/ArrayList;"/>
-		<method name="max(Ljava/util/Collection;)Ljava/lang/Object;"/>
-		<method name="max(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;"/>
-		<method name="min(Ljava/util/Collection;)Ljava/lang/Object;"/>
-		<method name="min(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;"/>
-		<method name="nCopies(ILjava/lang/Object;)Ljava/util/List;"/>
-		<method name="newSetFromMap(Ljava/util/Map;)Ljava/util/Set;" since="9"/>
-		<method name="replaceAll(Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="reverse(Ljava/util/List;)V"/>
-		<method name="reverseOrder()Ljava/util/Comparator;"/>
-		<method name="reverseOrder(Ljava/util/Comparator;)Ljava/util/Comparator;"/>
-		<method name="rotate(Ljava/util/List;I)V"/>
-		<method name="shuffle(Ljava/util/List;)V"/>
-		<method name="shuffle(Ljava/util/List;Ljava/util/Random;)V"/>
-		<method name="singleton(Ljava/lang/Object;)Ljava/util/Set;"/>
-		<method name="singletonList(Ljava/lang/Object;)Ljava/util/List;"/>
-		<method name="singletonMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;"/>
-		<method name="sort(Ljava/util/List;)V"/>
-		<method name="sort(Ljava/util/List;Ljava/util/Comparator;)V"/>
-		<method name="swap(Ljava/util/List;II)V"/>
-		<method name="synchronizedCollection(Ljava/util/Collection;)Ljava/util/Collection;"/>
-		<method name="synchronizedList(Ljava/util/List;)Ljava/util/List;"/>
-		<method name="synchronizedMap(Ljava/util/Map;)Ljava/util/Map;"/>
-		<method name="synchronizedNavigableMap(Ljava/util/NavigableMap;)Ljava/util/NavigableMap;" since="26"/>
-		<method name="synchronizedNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;" since="26"/>
-		<method name="synchronizedSet(Ljava/util/Set;)Ljava/util/Set;"/>
-		<method name="synchronizedSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;"/>
-		<method name="synchronizedSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;"/>
-		<method name="unmodifiableCollection(Ljava/util/Collection;)Ljava/util/Collection;"/>
-		<method name="unmodifiableList(Ljava/util/List;)Ljava/util/List;"/>
-		<method name="unmodifiableMap(Ljava/util/Map;)Ljava/util/Map;"/>
-		<method name="unmodifiableNavigableMap(Ljava/util/NavigableMap;)Ljava/util/NavigableMap;" since="26"/>
-		<method name="unmodifiableNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;" since="26"/>
-		<method name="unmodifiableSet(Ljava/util/Set;)Ljava/util/Set;"/>
-		<method name="unmodifiableSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;"/>
-		<method name="unmodifiableSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;"/>
-		<field name="EMPTY_LIST"/>
-		<field name="EMPTY_MAP"/>
-		<field name="EMPTY_SET"/>
-	</class>
-	<class name="java/util/Comparator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="compare(Ljava/lang/Object;Ljava/lang/Object;)I"/>
-		<method name="comparing(Ljava/util/function/Function;)Ljava/util/Comparator;" since="24"/>
-		<method name="comparing(Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
-		<method name="comparingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator;" since="24"/>
-		<method name="comparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;" since="24"/>
-		<method name="comparingLong(Ljava/util/function/ToLongFunction;)Ljava/util/Comparator;" since="24"/>
-		<method name="naturalOrder()Ljava/util/Comparator;" since="24"/>
-		<method name="nullsFirst(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
-		<method name="nullsLast(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
-		<method name="reverseOrder()Ljava/util/Comparator;" since="24"/>
-		<method name="reversed()Ljava/util/Comparator;" since="24"/>
-		<method name="thenComparing(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
-		<method name="thenComparing(Ljava/util/function/Function;)Ljava/util/Comparator;" since="24"/>
-		<method name="thenComparing(Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
-		<method name="thenComparingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator;" since="24"/>
-		<method name="thenComparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;" since="24"/>
-		<method name="thenComparingLong(Ljava/util/function/ToLongFunction;)Ljava/util/Comparator;" since="24"/>
-	</class>
-	<class name="java/util/ConcurrentModificationException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="19"/>
-	</class>
-	<class name="java/util/Currency" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Landroid/icu/util/Currency;)V" since="29"/>
-		<method name="getAvailableCurrencies()Ljava/util/Set;" since="19"/>
-		<method name="getCurrencyCode()Ljava/lang/String;"/>
-		<method name="getDefaultFractionDigits()I"/>
-		<method name="getDisplayName()Ljava/lang/String;" since="19"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;" since="19"/>
-		<method name="getInstance(Ljava/lang/String;)Ljava/util/Currency;"/>
-		<method name="getInstance(Ljava/util/Locale;)Ljava/util/Currency;"/>
-		<method name="getNumericCode()I" since="24"/>
-		<method name="getSymbol()Ljava/lang/String;"/>
-		<method name="getSymbol(Ljava/util/Locale;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/Date" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V" deprecated="16"/>
-		<method name="&lt;init>(IIIII)V" deprecated="16"/>
-		<method name="&lt;init>(IIIIII)V" deprecated="16"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="16"/>
-		<method name="UTC(IIIIII)J" deprecated="16"/>
-		<method name="after(Ljava/util/Date;)Z"/>
-		<method name="before(Ljava/util/Date;)Z"/>
-		<method name="compareTo(Ljava/util/Date;)I"/>
-		<method name="from(Ljava/time/Instant;)Ljava/util/Date;" since="26"/>
-		<method name="getDate()I" deprecated="16"/>
-		<method name="getDay()I" deprecated="16"/>
-		<method name="getHours()I" deprecated="16"/>
-		<method name="getMinutes()I" deprecated="16"/>
-		<method name="getMonth()I" deprecated="16"/>
-		<method name="getSeconds()I" deprecated="16"/>
-		<method name="getTime()J"/>
-		<method name="getTimezoneOffset()I" deprecated="16"/>
-		<method name="getYear()I" deprecated="16"/>
-		<method name="parse(Ljava/lang/String;)J" deprecated="16"/>
-		<method name="setDate(I)V" deprecated="16"/>
-		<method name="setHours(I)V" deprecated="16"/>
-		<method name="setMinutes(I)V" deprecated="16"/>
-		<method name="setMonth(I)V" deprecated="16"/>
-		<method name="setSeconds(I)V" deprecated="16"/>
-		<method name="setTime(J)V"/>
-		<method name="setYear(I)V" deprecated="16"/>
-		<method name="toGMTString()Ljava/lang/String;" deprecated="16"/>
-		<method name="toInstant()Ljava/time/Instant;" since="26"/>
-		<method name="toLocaleString()Ljava/lang/String;" deprecated="16"/>
-	</class>
-	<class name="java/util/Deque" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Queue"/>
-		<method name="addFirst(Ljava/lang/Object;)V"/>
-		<method name="addLast(Ljava/lang/Object;)V"/>
-		<method name="descendingIterator()Ljava/util/Iterator;"/>
-		<method name="getFirst()Ljava/lang/Object;"/>
-		<method name="getLast()Ljava/lang/Object;"/>
-		<method name="offerFirst(Ljava/lang/Object;)Z"/>
-		<method name="offerLast(Ljava/lang/Object;)Z"/>
-		<method name="peekFirst()Ljava/lang/Object;"/>
-		<method name="peekLast()Ljava/lang/Object;"/>
-		<method name="pollFirst()Ljava/lang/Object;"/>
-		<method name="pollLast()Ljava/lang/Object;"/>
-		<method name="pop()Ljava/lang/Object;"/>
-		<method name="push(Ljava/lang/Object;)V"/>
-		<method name="removeFirst()Ljava/lang/Object;"/>
-		<method name="removeFirstOccurrence(Ljava/lang/Object;)Z"/>
-		<method name="removeLast()Ljava/lang/Object;"/>
-		<method name="removeLastOccurrence(Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/util/Dictionary" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="elements()Ljava/util/Enumeration;"/>
-		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="isEmpty()Z"/>
-		<method name="keys()Ljava/util/Enumeration;"/>
-		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="size()I"/>
-	</class>
-	<class name="java/util/DoubleSummaryStatistics" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/DoubleConsumer"/>
-		<method name="&lt;init>()V"/>
-		<method name="combine(Ljava/util/DoubleSummaryStatistics;)V"/>
-		<method name="getAverage()D"/>
-		<method name="getCount()J"/>
-		<method name="getMax()D"/>
-		<method name="getMin()D"/>
-		<method name="getSum()D"/>
-	</class>
-	<class name="java/util/DuplicateFormatFlagsException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getFlags()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/EmptyStackException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/EnumMap" since="1">
-		<extends name="java/util/AbstractMap"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Ljava/util/EnumMap;)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="clone()Ljava/util/EnumMap;"/>
-		<method name="put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/EnumSet" since="1">
-		<extends name="java/util/AbstractSet"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Class;[Ljava/lang/Enum;)V" since="29"/>
-		<method name="allOf(Ljava/lang/Class;)Ljava/util/EnumSet;"/>
-		<method name="clone()Ljava/util/EnumSet;"/>
-		<method name="complementOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;"/>
-		<method name="copyOf(Ljava/util/Collection;)Ljava/util/EnumSet;"/>
-		<method name="copyOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;"/>
-		<method name="noneOf(Ljava/lang/Class;)Ljava/util/EnumSet;"/>
-		<method name="of(Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
-		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
-		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
-		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
-		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
-		<method name="of(Ljava/lang/Enum;[Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
-		<method name="range(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
-	</class>
-	<class name="java/util/Enumeration" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="hasMoreElements()Z"/>
-		<method name="nextElement()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/EventListener" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/util/EventListenerProxy" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="&lt;init>(Ljava/util/EventListener;)V"/>
-		<method name="getListener()Ljava/util/EventListener;"/>
-	</class>
-	<class name="java/util/EventObject" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="getSource()Ljava/lang/Object;"/>
-		<field name="source"/>
-	</class>
-	<class name="java/util/FormatFlagsConversionMismatchException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(Ljava/lang/String;C)V"/>
-		<method name="getConversion()C"/>
-		<method name="getFlags()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/Formattable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="formatTo(Ljava/util/Formatter;III)V"/>
-	</class>
-	<class name="java/util/FormattableFlags" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="ALTERNATE"/>
-		<field name="LEFT_JUSTIFY"/>
-		<field name="UPPERCASE"/>
-	</class>
-	<class name="java/util/Formatter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable"/>
-		<implements name="java/io/Flushable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/lang/String;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/io/PrintStream;)V"/>
-		<method name="&lt;init>(Ljava/lang/Appendable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Appendable;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;"/>
-		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;"/>
-		<method name="ioException()Ljava/io/IOException;"/>
-		<method name="locale()Ljava/util/Locale;"/>
-		<method name="out()Ljava/lang/Appendable;"/>
-	</class>
-	<class name="java/util/Formatter$BigDecimalLayoutForm" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/util/Formatter$BigDecimalLayoutForm;"/>
-		<method name="values()[Ljava/util/Formatter$BigDecimalLayoutForm;"/>
-		<field name="DECIMAL_FLOAT"/>
-		<field name="SCIENTIFIC"/>
-	</class>
-	<class name="java/util/FormatterClosedException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/GregorianCalendar" since="1">
-		<extends name="java/util/Calendar"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(IIIII)V"/>
-		<method name="&lt;init>(IIIIII)V"/>
-		<method name="&lt;init>(Ljava/util/Locale;)V"/>
-		<method name="&lt;init>(Ljava/util/TimeZone;)V"/>
-		<method name="&lt;init>(Ljava/util/TimeZone;Ljava/util/Locale;)V"/>
-		<method name="from(Ljava/time/ZonedDateTime;)Ljava/util/GregorianCalendar;" since="26"/>
-		<method name="getGregorianChange()Ljava/util/Date;"/>
-		<method name="isLeapYear(I)Z"/>
-		<method name="setGregorianChange(Ljava/util/Date;)V"/>
-		<method name="toZonedDateTime()Ljava/time/ZonedDateTime;" since="26"/>
-		<field name="AD"/>
-		<field name="BC"/>
-	</class>
-	<class name="java/util/HashMap" since="1">
-		<extends name="java/util/AbstractMap"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IF)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-	</class>
-	<class name="java/util/HashSet" since="1">
-		<extends name="java/util/AbstractSet"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IF)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/Hashtable" since="1">
-		<extends name="java/util/Dictionary"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/Map"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IF)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="contains(Ljava/lang/Object;)Z"/>
-		<method name="rehash()V"/>
-	</class>
-	<class name="java/util/IdentityHashMap" since="1">
-		<extends name="java/util/AbstractMap"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-	</class>
-	<class name="java/util/IllegalFormatCodePointException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getCodePoint()I"/>
-	</class>
-	<class name="java/util/IllegalFormatConversionException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(CLjava/lang/Class;)V"/>
-		<method name="getArgumentClass()Ljava/lang/Class;"/>
-		<method name="getConversion()C"/>
-	</class>
-	<class name="java/util/IllegalFormatException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/IllegalFormatFlagsException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getFlags()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/IllegalFormatPrecisionException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getPrecision()I"/>
-	</class>
-	<class name="java/util/IllegalFormatWidthException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getWidth()I"/>
-	</class>
-	<class name="java/util/IllformedLocaleException" since="21">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="getErrorIndex()I"/>
-	</class>
-	<class name="java/util/InputMismatchException" since="1">
-		<extends name="java/util/NoSuchElementException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/IntSummaryStatistics" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/IntConsumer"/>
-		<method name="&lt;init>()V"/>
-		<method name="combine(Ljava/util/IntSummaryStatistics;)V"/>
-		<method name="getAverage()D"/>
-		<method name="getCount()J"/>
-		<method name="getMax()I"/>
-		<method name="getMin()I"/>
-		<method name="getSum()J"/>
-	</class>
-	<class name="java/util/InvalidPropertiesFormatException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/Iterator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="forEachRemaining(Ljava/util/function/Consumer;)V" since="24"/>
-		<method name="hasNext()Z"/>
-		<method name="next()Ljava/lang/Object;"/>
-		<method name="remove()V"/>
-	</class>
-	<class name="java/util/LinkedHashMap" since="1">
-		<extends name="java/util/HashMap"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IF)V"/>
-		<method name="&lt;init>(IFZ)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="removeEldestEntry(Ljava/util/Map$Entry;)Z"/>
-	</class>
-	<class name="java/util/LinkedHashSet" since="1">
-		<extends name="java/util/HashSet"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IF)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/LinkedList" since="1">
-		<extends name="java/util/AbstractSequentialList"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/Deque" since="9"/>
-		<implements name="java/util/Queue" removed="24"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="addFirst(Ljava/lang/Object;)V"/>
-		<method name="addLast(Ljava/lang/Object;)V"/>
-		<method name="getFirst()Ljava/lang/Object;"/>
-		<method name="getLast()Ljava/lang/Object;"/>
-		<method name="removeFirst()Ljava/lang/Object;"/>
-		<method name="removeLast()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/List" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Collection"/>
-		<method name="add(ILjava/lang/Object;)V"/>
-		<method name="addAll(ILjava/util/Collection;)Z"/>
-		<method name="get(I)Ljava/lang/Object;"/>
-		<method name="indexOf(Ljava/lang/Object;)I"/>
-		<method name="lastIndexOf(Ljava/lang/Object;)I"/>
-		<method name="listIterator()Ljava/util/ListIterator;"/>
-		<method name="listIterator(I)Ljava/util/ListIterator;"/>
-		<method name="remove(I)Ljava/lang/Object;"/>
-		<method name="replaceAll(Ljava/util/function/UnaryOperator;)V" since="24"/>
-		<method name="set(ILjava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="sort(Ljava/util/Comparator;)V" since="24"/>
-		<method name="subList(II)Ljava/util/List;"/>
-	</class>
-	<class name="java/util/ListIterator" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Iterator"/>
-		<method name="add(Ljava/lang/Object;)V"/>
-		<method name="hasPrevious()Z"/>
-		<method name="nextIndex()I"/>
-		<method name="previous()Ljava/lang/Object;"/>
-		<method name="previousIndex()I"/>
-		<method name="set(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/util/ListResourceBundle" since="1">
-		<extends name="java/util/ResourceBundle"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContents()[[Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/Locale" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="filter(Ljava/util/List;Ljava/util/Collection;)Ljava/util/List;" since="26"/>
-		<method name="filter(Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List;" since="26"/>
-		<method name="filterTags(Ljava/util/List;Ljava/util/Collection;)Ljava/util/List;" since="26"/>
-		<method name="filterTags(Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List;" since="26"/>
-		<method name="forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;" since="21"/>
-		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
-		<method name="getCountry()Ljava/lang/String;"/>
-		<method name="getDefault()Ljava/util/Locale;"/>
-		<method name="getDefault(Ljava/util/Locale$Category;)Ljava/util/Locale;" since="24"/>
-		<method name="getDisplayCountry()Ljava/lang/String;"/>
-		<method name="getDisplayCountry(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getDisplayLanguage()Ljava/lang/String;"/>
-		<method name="getDisplayLanguage(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getDisplayName()Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getDisplayScript()Ljava/lang/String;" since="21"/>
-		<method name="getDisplayScript(Ljava/util/Locale;)Ljava/lang/String;" since="21"/>
-		<method name="getDisplayVariant()Ljava/lang/String;"/>
-		<method name="getDisplayVariant(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getExtension(C)Ljava/lang/String;" since="21"/>
-		<method name="getExtensionKeys()Ljava/util/Set;" since="21"/>
-		<method name="getISO3Country()Ljava/lang/String;"/>
-		<method name="getISO3Language()Ljava/lang/String;"/>
-		<method name="getISOCountries()[Ljava/lang/String;"/>
-		<method name="getISOLanguages()[Ljava/lang/String;"/>
-		<method name="getLanguage()Ljava/lang/String;"/>
-		<method name="getScript()Ljava/lang/String;" since="21"/>
-		<method name="getUnicodeLocaleAttributes()Ljava/util/Set;" since="21"/>
-		<method name="getUnicodeLocaleKeys()Ljava/util/Set;" since="21"/>
-		<method name="getUnicodeLocaleType(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
-		<method name="getVariant()Ljava/lang/String;"/>
-		<method name="hasExtensions()Z" since="26"/>
-		<method name="lookup(Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale;" since="26"/>
-		<method name="lookupTag(Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String;" since="26"/>
-		<method name="setDefault(Ljava/util/Locale$Category;Ljava/util/Locale;)V" since="24"/>
-		<method name="setDefault(Ljava/util/Locale;)V"/>
-		<method name="stripExtensions()Ljava/util/Locale;" since="26"/>
-		<method name="toLanguageTag()Ljava/lang/String;" since="21"/>
-		<field name="CANADA"/>
-		<field name="CANADA_FRENCH"/>
-		<field name="CHINA"/>
-		<field name="CHINESE"/>
-		<field name="ENGLISH"/>
-		<field name="FRANCE"/>
-		<field name="FRENCH"/>
-		<field name="GERMAN"/>
-		<field name="GERMANY"/>
-		<field name="ITALIAN"/>
-		<field name="ITALY"/>
-		<field name="JAPAN"/>
-		<field name="JAPANESE"/>
-		<field name="KOREA"/>
-		<field name="KOREAN"/>
-		<field name="PRC"/>
-		<field name="PRIVATE_USE_EXTENSION" since="21"/>
-		<field name="ROOT" since="9"/>
-		<field name="SIMPLIFIED_CHINESE"/>
-		<field name="TAIWAN"/>
-		<field name="TRADITIONAL_CHINESE"/>
-		<field name="UK"/>
-		<field name="UNICODE_LOCALE_EXTENSION" since="21"/>
-		<field name="US"/>
-	</class>
-	<class name="java/util/Locale$Builder" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addUnicodeLocaleAttribute(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="build()Ljava/util/Locale;"/>
-		<method name="clear()Ljava/util/Locale$Builder;"/>
-		<method name="clearExtensions()Ljava/util/Locale$Builder;"/>
-		<method name="removeUnicodeLocaleAttribute(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="setExtension(CLjava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="setLanguage(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="setLanguageTag(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="setLocale(Ljava/util/Locale;)Ljava/util/Locale$Builder;"/>
-		<method name="setRegion(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="setScript(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="setUnicodeLocaleKeyword(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-		<method name="setVariant(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
-	</class>
-	<class name="java/util/Locale$Category" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/util/Locale$Category;"/>
-		<method name="values()[Ljava/util/Locale$Category;"/>
-		<field name="DISPLAY"/>
-		<field name="FORMAT"/>
-	</class>
-	<class name="java/util/Locale$FilteringMode" since="26">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/util/Locale$FilteringMode;"/>
-		<method name="values()[Ljava/util/Locale$FilteringMode;"/>
-		<field name="AUTOSELECT_FILTERING"/>
-		<field name="EXTENDED_FILTERING"/>
-		<field name="IGNORE_EXTENDED_RANGES"/>
-		<field name="MAP_EXTENDED_RANGES"/>
-		<field name="REJECT_EXTENDED_RANGES"/>
-	</class>
-	<class name="java/util/Locale$LanguageRange" since="26">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;D)V"/>
-		<method name="getRange()Ljava/lang/String;"/>
-		<method name="getWeight()D"/>
-		<method name="mapEquivalents(Ljava/util/List;Ljava/util/Map;)Ljava/util/List;"/>
-		<method name="parse(Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="parse(Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;"/>
-		<field name="MAX_WEIGHT"/>
-		<field name="MIN_WEIGHT"/>
-	</class>
-	<class name="java/util/LongSummaryStatistics" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/IntConsumer"/>
-		<implements name="java/util/function/LongConsumer"/>
-		<method name="&lt;init>()V"/>
-		<method name="combine(Ljava/util/LongSummaryStatistics;)V"/>
-		<method name="getAverage()D"/>
-		<method name="getCount()J"/>
-		<method name="getMax()J"/>
-		<method name="getMin()J"/>
-		<method name="getSum()J"/>
-	</class>
-	<class name="java/util/Map" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="clear()V"/>
-		<method name="compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;" since="24"/>
-		<method name="computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="containsKey(Ljava/lang/Object;)Z"/>
-		<method name="containsValue(Ljava/lang/Object;)Z"/>
-		<method name="entrySet()Ljava/util/Set;"/>
-		<method name="forEach(Ljava/util/function/BiConsumer;)V" since="24"/>
-		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24"/>
-		<method name="isEmpty()Z"/>
-		<method name="keySet()Ljava/util/Set;"/>
-		<method name="merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="putAll(Ljava/util/Map;)V"/>
-		<method name="putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24"/>
-		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="remove(Ljava/lang/Object;Ljava/lang/Object;)Z" since="24"/>
-		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24"/>
-		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" since="24"/>
-		<method name="replaceAll(Ljava/util/function/BiFunction;)V" since="24"/>
-		<method name="size()I"/>
-		<method name="values()Ljava/util/Collection;"/>
-	</class>
-	<class name="java/util/Map$Entry" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="comparingByKey()Ljava/util/Comparator;" since="24"/>
-		<method name="comparingByKey(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
-		<method name="comparingByValue()Ljava/util/Comparator;" since="24"/>
-		<method name="comparingByValue(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
-		<method name="getKey()Ljava/lang/Object;"/>
-		<method name="getValue()Ljava/lang/Object;"/>
-		<method name="setValue(Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/MissingFormatArgumentException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getFormatSpecifier()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/MissingFormatWidthException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getFormatSpecifier()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/MissingResourceException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getClassName()Ljava/lang/String;"/>
-		<method name="getKey()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/NavigableMap" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/SortedMap"/>
-		<method name="ceilingEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
-		<method name="ceilingKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="descendingKeySet()Ljava/util/NavigableSet;"/>
-		<method name="descendingMap()Ljava/util/NavigableMap;"/>
-		<method name="firstEntry()Ljava/util/Map$Entry;"/>
-		<method name="floorEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
-		<method name="floorKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="headMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;"/>
-		<method name="higherEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
-		<method name="higherKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="lastEntry()Ljava/util/Map$Entry;"/>
-		<method name="lowerEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
-		<method name="lowerKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="navigableKeySet()Ljava/util/NavigableSet;"/>
-		<method name="pollFirstEntry()Ljava/util/Map$Entry;"/>
-		<method name="pollLastEntry()Ljava/util/Map$Entry;"/>
-		<method name="subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableMap;"/>
-		<method name="tailMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;"/>
-	</class>
-	<class name="java/util/NavigableSet" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/SortedSet"/>
-		<method name="ceiling(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="descendingIterator()Ljava/util/Iterator;"/>
-		<method name="descendingSet()Ljava/util/NavigableSet;"/>
-		<method name="floor(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="headSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;"/>
-		<method name="higher(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="lower(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="pollFirst()Ljava/lang/Object;"/>
-		<method name="pollLast()Ljava/lang/Object;"/>
-		<method name="subSet(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableSet;"/>
-		<method name="tailSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;"/>
-	</class>
-	<class name="java/util/NoSuchElementException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/Objects" since="19">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="compare(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I"/>
-		<method name="deepEquals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="hash([Ljava/lang/Object;)I"/>
-		<method name="hashCode(Ljava/lang/Object;)I"/>
-		<method name="isNull(Ljava/lang/Object;)Z" since="24"/>
-		<method name="nonNull(Ljava/lang/Object;)Z" since="24"/>
-		<method name="requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="requireNonNull(Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object;" since="24"/>
-		<method name="toString(Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="toString(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/Observable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addObserver(Ljava/util/Observer;)V"/>
-		<method name="clearChanged()V"/>
-		<method name="countObservers()I"/>
-		<method name="deleteObserver(Ljava/util/Observer;)V"/>
-		<method name="deleteObservers()V"/>
-		<method name="hasChanged()Z"/>
-		<method name="notifyObservers()V"/>
-		<method name="notifyObservers(Ljava/lang/Object;)V"/>
-		<method name="setChanged()V"/>
-	</class>
-	<class name="java/util/Observer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="update(Ljava/util/Observable;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/util/Optional" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="empty()Ljava/util/Optional;"/>
-		<method name="filter(Ljava/util/function/Predicate;)Ljava/util/Optional;"/>
-		<method name="flatMap(Ljava/util/function/Function;)Ljava/util/Optional;"/>
-		<method name="get()Ljava/lang/Object;"/>
-		<method name="ifPresent(Ljava/util/function/Consumer;)V"/>
-		<method name="isPresent()Z"/>
-		<method name="map(Ljava/util/function/Function;)Ljava/util/Optional;"/>
-		<method name="of(Ljava/lang/Object;)Ljava/util/Optional;"/>
-		<method name="ofNullable(Ljava/lang/Object;)Ljava/util/Optional;"/>
-		<method name="orElse(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="orElseGet(Ljava/util/function/Supplier;)Ljava/lang/Object;"/>
-		<method name="orElseThrow(Ljava/util/function/Supplier;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/OptionalDouble" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="empty()Ljava/util/OptionalDouble;"/>
-		<method name="getAsDouble()D"/>
-		<method name="ifPresent(Ljava/util/function/DoubleConsumer;)V"/>
-		<method name="isPresent()Z"/>
-		<method name="of(D)Ljava/util/OptionalDouble;"/>
-		<method name="orElse(D)D"/>
-		<method name="orElseGet(Ljava/util/function/DoubleSupplier;)D"/>
-		<method name="orElseThrow(Ljava/util/function/Supplier;)D"/>
-	</class>
-	<class name="java/util/OptionalInt" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="empty()Ljava/util/OptionalInt;"/>
-		<method name="getAsInt()I"/>
-		<method name="ifPresent(Ljava/util/function/IntConsumer;)V"/>
-		<method name="isPresent()Z"/>
-		<method name="of(I)Ljava/util/OptionalInt;"/>
-		<method name="orElse(I)I"/>
-		<method name="orElseGet(Ljava/util/function/IntSupplier;)I"/>
-		<method name="orElseThrow(Ljava/util/function/Supplier;)I"/>
-	</class>
-	<class name="java/util/OptionalLong" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="empty()Ljava/util/OptionalLong;"/>
-		<method name="getAsLong()J"/>
-		<method name="ifPresent(Ljava/util/function/LongConsumer;)V"/>
-		<method name="isPresent()Z"/>
-		<method name="of(J)Ljava/util/OptionalLong;"/>
-		<method name="orElse(J)J"/>
-		<method name="orElseGet(Ljava/util/function/LongSupplier;)J"/>
-		<method name="orElseThrow(Ljava/util/function/Supplier;)J"/>
-	</class>
-	<class name="java/util/PrimitiveIterator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Iterator"/>
-		<method name="forEachRemaining(Ljava/lang/Object;)V"/>
-	</class>
-	<class name="java/util/PrimitiveIterator$OfDouble" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/PrimitiveIterator"/>
-		<method name="forEachRemaining(Ljava/util/function/DoubleConsumer;)V"/>
-		<method name="next()Ljava/lang/Double;"/>
-		<method name="nextDouble()D"/>
-	</class>
-	<class name="java/util/PrimitiveIterator$OfInt" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/PrimitiveIterator"/>
-		<method name="forEachRemaining(Ljava/util/function/IntConsumer;)V"/>
-		<method name="next()Ljava/lang/Integer;"/>
-		<method name="nextInt()I"/>
-	</class>
-	<class name="java/util/PrimitiveIterator$OfLong" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/PrimitiveIterator"/>
-		<method name="forEachRemaining(Ljava/util/function/LongConsumer;)V"/>
-		<method name="next()Ljava/lang/Long;"/>
-		<method name="nextLong()J"/>
-	</class>
-	<class name="java/util/PriorityQueue" since="1">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/util/Comparator;)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="&lt;init>(Ljava/util/Comparator;)V" since="24"/>
-		<method name="&lt;init>(Ljava/util/PriorityQueue;)V"/>
-		<method name="&lt;init>(Ljava/util/SortedSet;)V"/>
-		<method name="comparator()Ljava/util/Comparator;"/>
-	</class>
-	<class name="java/util/Properties" since="1">
-		<extends name="java/util/Hashtable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Properties;)V"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="list(Ljava/io/PrintStream;)V"/>
-		<method name="list(Ljava/io/PrintWriter;)V"/>
-		<method name="load(Ljava/io/InputStream;)V"/>
-		<method name="load(Ljava/io/Reader;)V" since="9"/>
-		<method name="loadFromXML(Ljava/io/InputStream;)V"/>
-		<method name="propertyNames()Ljava/util/Enumeration;"/>
-		<method name="save(Ljava/io/OutputStream;Ljava/lang/String;)V" deprecated="16"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="store(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
-		<method name="store(Ljava/io/Writer;Ljava/lang/String;)V" since="9"/>
-		<method name="storeToXML(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
-		<method name="storeToXML(Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="stringPropertyNames()Ljava/util/Set;" since="9"/>
-		<field name="defaults"/>
-	</class>
-	<class name="java/util/PropertyPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/PropertyResourceBundle" since="1">
-		<extends name="java/util/ResourceBundle"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V" since="9"/>
-	</class>
-	<class name="java/util/Queue" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Collection"/>
-		<method name="element()Ljava/lang/Object;"/>
-		<method name="offer(Ljava/lang/Object;)Z"/>
-		<method name="peek()Ljava/lang/Object;"/>
-		<method name="poll()Ljava/lang/Object;"/>
-		<method name="remove()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/Random" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="doubles()Ljava/util/stream/DoubleStream;" since="24"/>
-		<method name="doubles(DD)Ljava/util/stream/DoubleStream;" since="24"/>
-		<method name="doubles(J)Ljava/util/stream/DoubleStream;" since="24"/>
-		<method name="doubles(JDD)Ljava/util/stream/DoubleStream;" since="24"/>
-		<method name="ints()Ljava/util/stream/IntStream;" since="24"/>
-		<method name="ints(II)Ljava/util/stream/IntStream;" since="24"/>
-		<method name="ints(J)Ljava/util/stream/IntStream;" since="24"/>
-		<method name="ints(JII)Ljava/util/stream/IntStream;" since="24"/>
-		<method name="longs()Ljava/util/stream/LongStream;" since="24"/>
-		<method name="longs(J)Ljava/util/stream/LongStream;" since="24"/>
-		<method name="longs(JJ)Ljava/util/stream/LongStream;" since="24"/>
-		<method name="longs(JJJ)Ljava/util/stream/LongStream;" since="24"/>
-		<method name="next(I)I"/>
-		<method name="nextBoolean()Z"/>
-		<method name="nextBytes([B)V"/>
-		<method name="nextDouble()D"/>
-		<method name="nextFloat()F"/>
-		<method name="nextGaussian()D"/>
-		<method name="nextInt()I"/>
-		<method name="nextInt(I)I"/>
-		<method name="nextLong()J"/>
-		<method name="setSeed(J)V"/>
-	</class>
-	<class name="java/util/RandomAccess" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/util/ResourceBundle" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clearCache()V" since="9"/>
-		<method name="clearCache(Ljava/lang/ClassLoader;)V" since="9"/>
-		<method name="containsKey(Ljava/lang/String;)Z" since="9"/>
-		<method name="getBaseBundleName()Ljava/lang/String;" since="26"/>
-		<method name="getBundle(Ljava/lang/String;)Ljava/util/ResourceBundle;"/>
-		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/ResourceBundle;"/>
-		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;)Ljava/util/ResourceBundle;"/>
-		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9"/>
-		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9"/>
-		<method name="getBundle(Ljava/lang/String;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9"/>
-		<method name="getKeys()Ljava/util/Enumeration;"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;"/>
-		<method name="handleGetObject(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="handleKeySet()Ljava/util/Set;" since="9"/>
-		<method name="keySet()Ljava/util/Set;" since="9"/>
-		<method name="setParent(Ljava/util/ResourceBundle;)V"/>
-		<field name="parent"/>
-	</class>
-	<class name="java/util/ResourceBundle$Control" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCandidateLocales(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/List;"/>
-		<method name="getControl(Ljava/util/List;)Ljava/util/ResourceBundle$Control;"/>
-		<method name="getFallbackLocale(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/Locale;"/>
-		<method name="getFormats(Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="getNoFallbackControl(Ljava/util/List;)Ljava/util/ResourceBundle$Control;"/>
-		<method name="getTimeToLive(Ljava/lang/String;Ljava/util/Locale;)J"/>
-		<method name="needsReload(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle;J)Z"/>
-		<method name="newBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/util/ResourceBundle;"/>
-		<method name="toBundleName(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="toResourceName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="FORMAT_CLASS"/>
-		<field name="FORMAT_DEFAULT"/>
-		<field name="FORMAT_PROPERTIES"/>
-		<field name="TTL_DONT_CACHE"/>
-		<field name="TTL_NO_EXPIRATION_CONTROL"/>
-	</class>
-	<class name="java/util/Scanner" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="19"/>
-		<implements name="java/util/Iterator"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Readable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/nio/channels/ReadableByteChannel;)V"/>
-		<method name="&lt;init>(Ljava/nio/channels/ReadableByteChannel;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/nio/file/Path;)V" since="26"/>
-		<method name="&lt;init>(Ljava/nio/file/Path;Ljava/lang/String;)V" since="26"/>
-		<method name="close()V"/>
-		<method name="delimiter()Ljava/util/regex/Pattern;"/>
-		<method name="findInLine(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="findInLine(Ljava/util/regex/Pattern;)Ljava/lang/String;"/>
-		<method name="findWithinHorizon(Ljava/lang/String;I)Ljava/lang/String;"/>
-		<method name="findWithinHorizon(Ljava/util/regex/Pattern;I)Ljava/lang/String;"/>
-		<method name="hasNext(Ljava/lang/String;)Z"/>
-		<method name="hasNext(Ljava/util/regex/Pattern;)Z"/>
-		<method name="hasNextBigDecimal()Z"/>
-		<method name="hasNextBigInteger()Z"/>
-		<method name="hasNextBigInteger(I)Z"/>
-		<method name="hasNextBoolean()Z"/>
-		<method name="hasNextByte()Z"/>
-		<method name="hasNextByte(I)Z"/>
-		<method name="hasNextDouble()Z"/>
-		<method name="hasNextFloat()Z"/>
-		<method name="hasNextInt()Z"/>
-		<method name="hasNextInt(I)Z"/>
-		<method name="hasNextLine()Z"/>
-		<method name="hasNextLong()Z"/>
-		<method name="hasNextLong(I)Z"/>
-		<method name="hasNextShort()Z"/>
-		<method name="hasNextShort(I)Z"/>
-		<method name="ioException()Ljava/io/IOException;"/>
-		<method name="locale()Ljava/util/Locale;"/>
-		<method name="match()Ljava/util/regex/MatchResult;"/>
-		<method name="next()Ljava/lang/String;"/>
-		<method name="next(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="next(Ljava/util/regex/Pattern;)Ljava/lang/String;"/>
-		<method name="nextBigDecimal()Ljava/math/BigDecimal;"/>
-		<method name="nextBigInteger()Ljava/math/BigInteger;"/>
-		<method name="nextBigInteger(I)Ljava/math/BigInteger;"/>
-		<method name="nextBoolean()Z"/>
-		<method name="nextByte()B"/>
-		<method name="nextByte(I)B"/>
-		<method name="nextDouble()D"/>
-		<method name="nextFloat()F"/>
-		<method name="nextInt()I"/>
-		<method name="nextInt(I)I"/>
-		<method name="nextLine()Ljava/lang/String;"/>
-		<method name="nextLong()J"/>
-		<method name="nextLong(I)J"/>
-		<method name="nextShort()S"/>
-		<method name="nextShort(I)S"/>
-		<method name="radix()I"/>
-		<method name="reset()Ljava/util/Scanner;" since="9"/>
-		<method name="skip(Ljava/lang/String;)Ljava/util/Scanner;"/>
-		<method name="skip(Ljava/util/regex/Pattern;)Ljava/util/Scanner;"/>
-		<method name="useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;"/>
-		<method name="useDelimiter(Ljava/util/regex/Pattern;)Ljava/util/Scanner;"/>
-		<method name="useLocale(Ljava/util/Locale;)Ljava/util/Scanner;"/>
-		<method name="useRadix(I)Ljava/util/Scanner;"/>
-	</class>
-	<class name="java/util/ServiceConfigurationError" since="9">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/ServiceLoader" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Iterable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/ClassLoader;)V" since="29"/>
-		<method name="load(Ljava/lang/Class;)Ljava/util/ServiceLoader;"/>
-		<method name="load(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;"/>
-		<method name="loadInstalled(Ljava/lang/Class;)Ljava/util/ServiceLoader;"/>
-		<method name="reload()V"/>
-	</class>
-	<class name="java/util/Set" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Collection"/>
-	</class>
-	<class name="java/util/SimpleTimeZone" since="1">
-		<extends name="java/util/TimeZone"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-		<method name="&lt;init>(ILjava/lang/String;IIIIIIII)V"/>
-		<method name="&lt;init>(ILjava/lang/String;IIIIIIIII)V"/>
-		<method name="&lt;init>(ILjava/lang/String;IIIIIIIIIII)V"/>
-		<method name="setDSTSavings(I)V"/>
-		<method name="setEndRule(III)V"/>
-		<method name="setEndRule(IIII)V"/>
-		<method name="setEndRule(IIIIZ)V"/>
-		<method name="setStartRule(III)V"/>
-		<method name="setStartRule(IIII)V"/>
-		<method name="setStartRule(IIIIZ)V"/>
-		<method name="setStartYear(I)V"/>
-		<field name="STANDARD_TIME"/>
-		<field name="UTC_TIME"/>
-		<field name="WALL_TIME"/>
-	</class>
-	<class name="java/util/SortedMap" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Map"/>
-		<method name="comparator()Ljava/util/Comparator;"/>
-		<method name="firstKey()Ljava/lang/Object;"/>
-		<method name="headMap(Ljava/lang/Object;)Ljava/util/SortedMap;"/>
-		<method name="lastKey()Ljava/lang/Object;"/>
-		<method name="subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedMap;"/>
-		<method name="tailMap(Ljava/lang/Object;)Ljava/util/SortedMap;"/>
-	</class>
-	<class name="java/util/SortedSet" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Set"/>
-		<method name="comparator()Ljava/util/Comparator;"/>
-		<method name="first()Ljava/lang/Object;"/>
-		<method name="headSet(Ljava/lang/Object;)Ljava/util/SortedSet;"/>
-		<method name="last()Ljava/lang/Object;"/>
-		<method name="subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedSet;"/>
-		<method name="tailSet(Ljava/lang/Object;)Ljava/util/SortedSet;"/>
-	</class>
-	<class name="java/util/Spliterator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="characteristics()I"/>
-		<method name="estimateSize()J"/>
-		<method name="forEachRemaining(Ljava/util/function/Consumer;)V"/>
-		<method name="getComparator()Ljava/util/Comparator;"/>
-		<method name="getExactSizeIfKnown()J"/>
-		<method name="hasCharacteristics(I)Z"/>
-		<method name="tryAdvance(Ljava/util/function/Consumer;)Z"/>
-		<method name="trySplit()Ljava/util/Spliterator;"/>
-		<field name="CONCURRENT"/>
-		<field name="DISTINCT"/>
-		<field name="IMMUTABLE"/>
-		<field name="NONNULL"/>
-		<field name="ORDERED"/>
-		<field name="SIZED"/>
-		<field name="SORTED"/>
-		<field name="SUBSIZED"/>
-	</class>
-	<class name="java/util/Spliterator$OfDouble" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator$OfPrimitive"/>
-		<method name="forEachRemaining(Ljava/util/function/DoubleConsumer;)V"/>
-		<method name="tryAdvance(Ljava/util/function/DoubleConsumer;)Z"/>
-		<method name="trySplit()Ljava/util/Spliterator$OfDouble;"/>
-	</class>
-	<class name="java/util/Spliterator$OfInt" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator$OfPrimitive"/>
-		<method name="forEachRemaining(Ljava/util/function/IntConsumer;)V"/>
-		<method name="tryAdvance(Ljava/util/function/IntConsumer;)Z"/>
-		<method name="trySplit()Ljava/util/Spliterator$OfInt;"/>
-	</class>
-	<class name="java/util/Spliterator$OfLong" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator$OfPrimitive"/>
-		<method name="forEachRemaining(Ljava/util/function/LongConsumer;)V"/>
-		<method name="tryAdvance(Ljava/util/function/LongConsumer;)Z"/>
-		<method name="trySplit()Ljava/util/Spliterator$OfLong;"/>
-	</class>
-	<class name="java/util/Spliterator$OfPrimitive" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator"/>
-		<method name="forEachRemaining(Ljava/lang/Object;)V"/>
-		<method name="tryAdvance(Ljava/lang/Object;)Z"/>
-		<method name="trySplit()Ljava/util/Spliterator$OfPrimitive;"/>
-	</class>
-	<class name="java/util/Spliterators" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="emptyDoubleSpliterator()Ljava/util/Spliterator$OfDouble;"/>
-		<method name="emptyIntSpliterator()Ljava/util/Spliterator$OfInt;"/>
-		<method name="emptyLongSpliterator()Ljava/util/Spliterator$OfLong;"/>
-		<method name="emptySpliterator()Ljava/util/Spliterator;"/>
-		<method name="iterator(Ljava/util/Spliterator$OfDouble;)Ljava/util/PrimitiveIterator$OfDouble;"/>
-		<method name="iterator(Ljava/util/Spliterator$OfInt;)Ljava/util/PrimitiveIterator$OfInt;"/>
-		<method name="iterator(Ljava/util/Spliterator$OfLong;)Ljava/util/PrimitiveIterator$OfLong;"/>
-		<method name="iterator(Ljava/util/Spliterator;)Ljava/util/Iterator;"/>
-		<method name="spliterator(Ljava/util/Collection;I)Ljava/util/Spliterator;"/>
-		<method name="spliterator(Ljava/util/Iterator;JI)Ljava/util/Spliterator;"/>
-		<method name="spliterator(Ljava/util/PrimitiveIterator$OfDouble;JI)Ljava/util/Spliterator$OfDouble;"/>
-		<method name="spliterator(Ljava/util/PrimitiveIterator$OfInt;JI)Ljava/util/Spliterator$OfInt;"/>
-		<method name="spliterator(Ljava/util/PrimitiveIterator$OfLong;JI)Ljava/util/Spliterator$OfLong;"/>
-		<method name="spliterator([DI)Ljava/util/Spliterator$OfDouble;"/>
-		<method name="spliterator([DIII)Ljava/util/Spliterator$OfDouble;"/>
-		<method name="spliterator([II)Ljava/util/Spliterator$OfInt;"/>
-		<method name="spliterator([IIII)Ljava/util/Spliterator$OfInt;"/>
-		<method name="spliterator([JI)Ljava/util/Spliterator$OfLong;"/>
-		<method name="spliterator([JIII)Ljava/util/Spliterator$OfLong;"/>
-		<method name="spliterator([Ljava/lang/Object;I)Ljava/util/Spliterator;"/>
-		<method name="spliterator([Ljava/lang/Object;III)Ljava/util/Spliterator;"/>
-		<method name="spliteratorUnknownSize(Ljava/util/Iterator;I)Ljava/util/Spliterator;"/>
-		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfDouble;I)Ljava/util/Spliterator$OfDouble;"/>
-		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfInt;I)Ljava/util/Spliterator$OfInt;"/>
-		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfLong;I)Ljava/util/Spliterator$OfLong;"/>
-	</class>
-	<class name="java/util/Spliterators$AbstractDoubleSpliterator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator$OfDouble"/>
-		<method name="&lt;init>(JI)V"/>
-	</class>
-	<class name="java/util/Spliterators$AbstractIntSpliterator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator$OfInt"/>
-		<method name="&lt;init>(JI)V"/>
-	</class>
-	<class name="java/util/Spliterators$AbstractLongSpliterator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator$OfLong"/>
-		<method name="&lt;init>(JI)V"/>
-	</class>
-	<class name="java/util/Spliterators$AbstractSpliterator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Spliterator"/>
-		<method name="&lt;init>(JI)V"/>
-	</class>
-	<class name="java/util/SplittableRandom" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="doubles()Ljava/util/stream/DoubleStream;"/>
-		<method name="doubles(DD)Ljava/util/stream/DoubleStream;"/>
-		<method name="doubles(J)Ljava/util/stream/DoubleStream;"/>
-		<method name="doubles(JDD)Ljava/util/stream/DoubleStream;"/>
-		<method name="ints()Ljava/util/stream/IntStream;"/>
-		<method name="ints(II)Ljava/util/stream/IntStream;"/>
-		<method name="ints(J)Ljava/util/stream/IntStream;"/>
-		<method name="ints(JII)Ljava/util/stream/IntStream;"/>
-		<method name="longs()Ljava/util/stream/LongStream;"/>
-		<method name="longs(J)Ljava/util/stream/LongStream;"/>
-		<method name="longs(JJ)Ljava/util/stream/LongStream;"/>
-		<method name="longs(JJJ)Ljava/util/stream/LongStream;"/>
-		<method name="nextBoolean()Z"/>
-		<method name="nextDouble()D"/>
-		<method name="nextDouble(D)D"/>
-		<method name="nextDouble(DD)D"/>
-		<method name="nextInt()I"/>
-		<method name="nextInt(I)I"/>
-		<method name="nextInt(II)I"/>
-		<method name="nextLong()J"/>
-		<method name="nextLong(J)J"/>
-		<method name="nextLong(JJ)J"/>
-		<method name="split()Ljava/util/SplittableRandom;"/>
-	</class>
-	<class name="java/util/Stack" since="1">
-		<extends name="java/util/Vector"/>
-		<method name="&lt;init>()V"/>
-		<method name="empty()Z"/>
-		<method name="peek()Ljava/lang/Object;"/>
-		<method name="pop()Ljava/lang/Object;"/>
-		<method name="push(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="search(Ljava/lang/Object;)I"/>
-	</class>
-	<class name="java/util/StringJoiner" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
-		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
-		<method name="add(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;"/>
-		<method name="length()I"/>
-		<method name="merge(Ljava/util/StringJoiner;)Ljava/util/StringJoiner;"/>
-		<method name="setEmptyValue(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;"/>
-	</class>
-	<class name="java/util/StringTokenizer" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Enumeration"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Z)V"/>
-		<method name="countTokens()I"/>
-		<method name="hasMoreTokens()Z"/>
-		<method name="nextToken()Ljava/lang/String;"/>
-		<method name="nextToken(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/TimeZone" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAvailableIDs()[Ljava/lang/String;"/>
-		<method name="getAvailableIDs(I)[Ljava/lang/String;"/>
-		<method name="getDSTSavings()I"/>
-		<method name="getDefault()Ljava/util/TimeZone;"/>
-		<method name="getDisplayName()Ljava/lang/String;"/>
-		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getDisplayName(ZI)Ljava/lang/String;"/>
-		<method name="getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;"/>
-		<method name="getID()Ljava/lang/String;"/>
-		<method name="getOffset(IIIIII)I"/>
-		<method name="getOffset(J)I"/>
-		<method name="getRawOffset()I"/>
-		<method name="getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;"/>
-		<method name="getTimeZone(Ljava/time/ZoneId;)Ljava/util/TimeZone;" since="26"/>
-		<method name="hasSameRules(Ljava/util/TimeZone;)Z"/>
-		<method name="inDaylightTime(Ljava/util/Date;)Z"/>
-		<method name="observesDaylightTime()Z" since="24"/>
-		<method name="setDefault(Ljava/util/TimeZone;)V"/>
-		<method name="setID(Ljava/lang/String;)V"/>
-		<method name="setRawOffset(I)V"/>
-		<method name="toZoneId()Ljava/time/ZoneId;" since="26"/>
-		<method name="useDaylightTime()Z"/>
-		<field name="LONG"/>
-		<field name="SHORT"/>
-	</class>
-	<class name="java/util/Timer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="cancel()V"/>
-		<method name="purge()I"/>
-		<method name="schedule(Ljava/util/TimerTask;J)V"/>
-		<method name="schedule(Ljava/util/TimerTask;JJ)V"/>
-		<method name="schedule(Ljava/util/TimerTask;Ljava/util/Date;)V"/>
-		<method name="schedule(Ljava/util/TimerTask;Ljava/util/Date;J)V"/>
-		<method name="scheduleAtFixedRate(Ljava/util/TimerTask;JJ)V"/>
-		<method name="scheduleAtFixedRate(Ljava/util/TimerTask;Ljava/util/Date;J)V"/>
-	</class>
-	<class name="java/util/TimerTask" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable"/>
-		<method name="&lt;init>()V"/>
-		<method name="cancel()Z"/>
-		<method name="scheduledExecutionTime()J"/>
-	</class>
-	<class name="java/util/TooManyListenersException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/TreeMap" since="1">
-		<extends name="java/util/AbstractMap"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/NavigableMap" since="9"/>
-		<implements name="java/util/SortedMap" removed="24"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="&lt;init>(Ljava/util/SortedMap;)V"/>
-	</class>
-	<class name="java/util/TreeSet" since="1">
-		<extends name="java/util/AbstractSet"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/NavigableSet" since="9"/>
-		<implements name="java/util/SortedSet" removed="9"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
-		<method name="&lt;init>(Ljava/util/SortedSet;)V"/>
-	</class>
-	<class name="java/util/UUID" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="&lt;init>(JJ)V"/>
-		<method name="clockSequence()I"/>
-		<method name="compareTo(Ljava/util/UUID;)I"/>
-		<method name="fromString(Ljava/lang/String;)Ljava/util/UUID;"/>
-		<method name="getLeastSignificantBits()J"/>
-		<method name="getMostSignificantBits()J"/>
-		<method name="nameUUIDFromBytes([B)Ljava/util/UUID;"/>
-		<method name="node()J"/>
-		<method name="randomUUID()Ljava/util/UUID;"/>
-		<method name="timestamp()J"/>
-		<method name="variant()I"/>
-		<method name="version()I"/>
-	</class>
-	<class name="java/util/UnknownFormatConversionException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getConversion()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/UnknownFormatFlagsException" since="1">
-		<extends name="java/util/IllegalFormatException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getFlags()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/Vector" since="1">
-		<extends name="java/util/AbstractList"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/RandomAccess"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="addElement(Ljava/lang/Object;)V"/>
-		<method name="capacity()I"/>
-		<method name="copyInto([Ljava/lang/Object;)V"/>
-		<method name="elementAt(I)Ljava/lang/Object;"/>
-		<method name="elements()Ljava/util/Enumeration;"/>
-		<method name="ensureCapacity(I)V"/>
-		<method name="firstElement()Ljava/lang/Object;"/>
-		<method name="indexOf(Ljava/lang/Object;I)I"/>
-		<method name="insertElementAt(Ljava/lang/Object;I)V"/>
-		<method name="lastElement()Ljava/lang/Object;"/>
-		<method name="lastIndexOf(Ljava/lang/Object;I)I"/>
-		<method name="removeAllElements()V"/>
-		<method name="removeElement(Ljava/lang/Object;)Z"/>
-		<method name="removeElementAt(I)V"/>
-		<method name="setElementAt(Ljava/lang/Object;I)V"/>
-		<method name="setSize(I)V"/>
-		<method name="trimToSize()V"/>
-		<field name="capacityIncrement"/>
-		<field name="elementCount"/>
-		<field name="elementData"/>
-	</class>
-	<class name="java/util/WeakHashMap" since="1">
-		<extends name="java/util/AbstractMap"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IF)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-	</class>
-	<class name="java/util/concurrent/AbstractExecutorService" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/ExecutorService"/>
-		<method name="&lt;init>()V"/>
-		<method name="newTaskFor(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/RunnableFuture;" since="9"/>
-		<method name="newTaskFor(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/RunnableFuture;" since="9"/>
-	</class>
-	<class name="java/util/concurrent/ArrayBlockingQueue" since="1">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/BlockingQueue"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IZ)V"/>
-		<method name="&lt;init>(IZLjava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/concurrent/BlockingDeque" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Deque"/>
-		<implements name="java/util/concurrent/BlockingQueue"/>
-		<method name="offerFirst(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="offerLast(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="pollFirst(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-		<method name="pollLast(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-		<method name="putFirst(Ljava/lang/Object;)V"/>
-		<method name="putLast(Ljava/lang/Object;)V"/>
-		<method name="takeFirst()Ljava/lang/Object;"/>
-		<method name="takeLast()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/concurrent/BlockingQueue" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Queue"/>
-		<method name="drainTo(Ljava/util/Collection;)I"/>
-		<method name="drainTo(Ljava/util/Collection;I)I"/>
-		<method name="offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-		<method name="put(Ljava/lang/Object;)V"/>
-		<method name="remainingCapacity()I"/>
-		<method name="take()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/concurrent/BrokenBarrierException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/concurrent/Callable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="call()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/concurrent/CancellationException" since="1">
-		<extends name="java/lang/IllegalStateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/concurrent/CompletableFuture" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/CompletionStage"/>
-		<implements name="java/util/concurrent/Future"/>
-		<method name="&lt;init>()V"/>
-		<method name="acceptEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="allOf([Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="anyOf([Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="applyToEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="complete(Ljava/lang/Object;)Z"/>
-		<method name="completeExceptionally(Ljava/lang/Throwable;)Z"/>
-		<method name="completedFuture(Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="exceptionally(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="getNow(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getNumberOfDependents()I"/>
-		<method name="handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="handleAsync(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="handleAsync(Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="isCompletedExceptionally()Z"/>
-		<method name="join()Ljava/lang/Object;"/>
-		<method name="obtrudeException(Ljava/lang/Throwable;)V"/>
-		<method name="obtrudeValue(Ljava/lang/Object;)V"/>
-		<method name="runAfterBoth(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="runAfterEither(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="runAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="runAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="supplyAsync(Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenAccept(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenAcceptAsync(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenAcceptBoth(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenApplyAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenCombine(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenComposeAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenRun(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenRunAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="thenRunAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
-	</class>
-	<class name="java/util/concurrent/CompletableFuture$AsynchronousCompletionTask" since="24">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="java/util/concurrent/CompletionException" since="24">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/concurrent/CompletionService" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="poll()Ljava/util/concurrent/Future;"/>
-		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Future;"/>
-		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;"/>
-		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;"/>
-		<method name="take()Ljava/util/concurrent/Future;"/>
-	</class>
-	<class name="java/util/concurrent/CompletionStage" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="acceptEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="applyToEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="exceptionally(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="handleAsync(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="handleAsync(Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="runAfterBoth(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="runAfterEither(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenAccept(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenAcceptAsync(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenAcceptBoth(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenApplyAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenCombine(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenComposeAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenRun(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenRunAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="thenRunAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="toCompletableFuture()Ljava/util/concurrent/CompletableFuture;"/>
-		<method name="whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
-		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentHashMap" since="1">
-		<extends name="java/util/AbstractMap"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/ConcurrentMap"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IF)V" since="9"/>
-		<method name="&lt;init>(IFI)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="contains(Ljava/lang/Object;)Z"/>
-		<method name="elements()Ljava/util/Enumeration;"/>
-		<method name="forEach(JLjava/util/function/BiConsumer;)V" since="24"/>
-		<method name="forEach(JLjava/util/function/BiFunction;Ljava/util/function/Consumer;)V" since="24"/>
-		<method name="forEachEntry(JLjava/util/function/Consumer;)V" since="24"/>
-		<method name="forEachEntry(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24"/>
-		<method name="forEachKey(JLjava/util/function/Consumer;)V" since="24"/>
-		<method name="forEachKey(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24"/>
-		<method name="forEachValue(JLjava/util/function/Consumer;)V" since="24"/>
-		<method name="forEachValue(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24"/>
-		<method name="keySet(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24"/>
-		<method name="keys()Ljava/util/Enumeration;"/>
-		<method name="mappingCount()J" since="24"/>
-		<method name="newKeySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24"/>
-		<method name="newKeySet(I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24"/>
-		<method name="reduce(JLjava/util/function/BiFunction;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="reduceEntries(JLjava/util/function/BiFunction;)Ljava/util/Map$Entry;" since="24"/>
-		<method name="reduceEntries(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="reduceEntriesToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
-		<method name="reduceEntriesToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="reduceEntriesToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="reduceKeys(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="reduceKeys(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="reduceKeysToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
-		<method name="reduceKeysToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="reduceKeysToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="reduceToDouble(JLjava/util/function/ToDoubleBiFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
-		<method name="reduceToInt(JLjava/util/function/ToIntBiFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="reduceToLong(JLjava/util/function/ToLongBiFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="reduceValues(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="reduceValues(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="reduceValuesToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
-		<method name="reduceValuesToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="reduceValuesToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="search(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
-		<method name="searchEntries(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
-		<method name="searchKeys(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
-		<method name="searchValues(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentHashMap$CollectionView" since="24" removed="29">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/Collection"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMap()Ljava/util/concurrent/ConcurrentHashMap;"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentHashMap$KeySetView" since="24">
-		<extends name="java/lang/Object" since="29"/>
-		<extends name="java/util/concurrent/ConcurrentHashMap$CollectionView" removed="29"/>
-		<implements name="java/util/Set"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/concurrent/ConcurrentHashMap;Ljava/lang/Object;)V" since="29"/>
-		<method name="getMappedValue()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentLinkedDeque" since="21">
-		<extends name="java/util/AbstractCollection"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/Deque"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentLinkedQueue" since="1">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentMap" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Map"/>
-		<method name="putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="remove(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentNavigableMap" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/NavigableMap"/>
-		<implements name="java/util/concurrent/ConcurrentMap"/>
-		<method name="descendingMap()Ljava/util/concurrent/ConcurrentNavigableMap;"/>
-		<method name="headMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
-		<method name="headMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
-		<method name="keySet()Ljava/util/NavigableSet;"/>
-		<method name="subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
-		<method name="subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
-		<method name="tailMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
-		<method name="tailMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentSkipListMap" since="9">
-		<extends name="java/util/AbstractMap"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/concurrent/ConcurrentNavigableMap"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="&lt;init>(Ljava/util/SortedMap;)V"/>
-		<method name="clone()Ljava/util/concurrent/ConcurrentSkipListMap;"/>
-	</class>
-	<class name="java/util/concurrent/ConcurrentSkipListSet" since="9">
-		<extends name="java/util/AbstractSet"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/NavigableSet"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
-		<method name="&lt;init>(Ljava/util/SortedSet;)V"/>
-		<method name="clone()Ljava/util/concurrent/ConcurrentSkipListSet;"/>
-		<method name="headSet(Ljava/lang/Object;)Ljava/util/NavigableSet;"/>
-		<method name="subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/NavigableSet;"/>
-		<method name="tailSet(Ljava/lang/Object;)Ljava/util/NavigableSet;"/>
-	</class>
-	<class name="java/util/concurrent/CopyOnWriteArrayList" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/List"/>
-		<implements name="java/util/RandomAccess"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="&lt;init>([Ljava/lang/Object;)V"/>
-		<method name="addAllAbsent(Ljava/util/Collection;)I"/>
-		<method name="addIfAbsent(Ljava/lang/Object;)Z"/>
-		<method name="indexOf(Ljava/lang/Object;I)I"/>
-		<method name="lastIndexOf(Ljava/lang/Object;I)I"/>
-	</class>
-	<class name="java/util/concurrent/CopyOnWriteArraySet" since="1">
-		<extends name="java/util/AbstractSet"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/concurrent/CountDownLatch" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="await()V"/>
-		<method name="await(JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="countDown()V"/>
-		<method name="getCount()J"/>
-	</class>
-	<class name="java/util/concurrent/CountedCompleter" since="24">
-		<extends name="java/util/concurrent/ForkJoinTask"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/concurrent/CountedCompleter;)V"/>
-		<method name="&lt;init>(Ljava/util/concurrent/CountedCompleter;I)V"/>
-		<method name="addToPendingCount(I)V"/>
-		<method name="compareAndSetPendingCount(II)Z"/>
-		<method name="compute()V"/>
-		<method name="decrementPendingCountUnlessZero()I"/>
-		<method name="firstComplete()Ljava/util/concurrent/CountedCompleter;"/>
-		<method name="getCompleter()Ljava/util/concurrent/CountedCompleter;"/>
-		<method name="getPendingCount()I"/>
-		<method name="getRoot()Ljava/util/concurrent/CountedCompleter;"/>
-		<method name="helpComplete(I)V"/>
-		<method name="nextComplete()Ljava/util/concurrent/CountedCompleter;"/>
-		<method name="onCompletion(Ljava/util/concurrent/CountedCompleter;)V"/>
-		<method name="onExceptionalCompletion(Ljava/lang/Throwable;Ljava/util/concurrent/CountedCompleter;)Z"/>
-		<method name="propagateCompletion()V"/>
-		<method name="quietlyCompleteRoot()V"/>
-		<method name="setPendingCount(I)V"/>
-		<method name="tryComplete()V"/>
-	</class>
-	<class name="java/util/concurrent/CyclicBarrier" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/lang/Runnable;)V"/>
-		<method name="await()I"/>
-		<method name="await(JLjava/util/concurrent/TimeUnit;)I"/>
-		<method name="getNumberWaiting()I"/>
-		<method name="getParties()I"/>
-		<method name="isBroken()Z"/>
-		<method name="reset()V"/>
-	</class>
-	<class name="java/util/concurrent/DelayQueue" since="1">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/util/concurrent/BlockingQueue"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="add(Ljava/util/concurrent/Delayed;)Z"/>
-		<method name="offer(Ljava/util/concurrent/Delayed;)Z"/>
-		<method name="offer(Ljava/util/concurrent/Delayed;JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="peek()Ljava/util/concurrent/Delayed;"/>
-		<method name="poll()Ljava/util/concurrent/Delayed;"/>
-		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Delayed;"/>
-		<method name="put(Ljava/util/concurrent/Delayed;)V"/>
-		<method name="take()Ljava/util/concurrent/Delayed;"/>
-	</class>
-	<class name="java/util/concurrent/Delayed" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Comparable"/>
-		<method name="getDelay(Ljava/util/concurrent/TimeUnit;)J"/>
-	</class>
-	<class name="java/util/concurrent/Exchanger" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="exchange(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="exchange(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/concurrent/ExecutionException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/concurrent/Executor" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="execute(Ljava/lang/Runnable;)V"/>
-	</class>
-	<class name="java/util/concurrent/ExecutorCompletionService" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/CompletionService"/>
-		<method name="&lt;init>(Ljava/util/concurrent/Executor;)V"/>
-		<method name="&lt;init>(Ljava/util/concurrent/Executor;Ljava/util/concurrent/BlockingQueue;)V"/>
-	</class>
-	<class name="java/util/concurrent/ExecutorService" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/Executor"/>
-		<method name="awaitTermination(JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="invokeAll(Ljava/util/Collection;)Ljava/util/List;"/>
-		<method name="invokeAll(Ljava/util/Collection;JLjava/util/concurrent/TimeUnit;)Ljava/util/List;"/>
-		<method name="invokeAny(Ljava/util/Collection;)Ljava/lang/Object;"/>
-		<method name="invokeAny(Ljava/util/Collection;JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-		<method name="isShutdown()Z"/>
-		<method name="isTerminated()Z"/>
-		<method name="shutdown()V"/>
-		<method name="shutdownNow()Ljava/util/List;"/>
-		<method name="submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;"/>
-		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;"/>
-		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;"/>
-	</class>
-	<class name="java/util/concurrent/Executors" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="callable(Ljava/lang/Runnable;)Ljava/util/concurrent/Callable;"/>
-		<method name="callable(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Callable;"/>
-		<method name="callable(Ljava/security/PrivilegedAction;)Ljava/util/concurrent/Callable;"/>
-		<method name="callable(Ljava/security/PrivilegedExceptionAction;)Ljava/util/concurrent/Callable;"/>
-		<method name="defaultThreadFactory()Ljava/util/concurrent/ThreadFactory;"/>
-		<method name="newCachedThreadPool()Ljava/util/concurrent/ExecutorService;"/>
-		<method name="newCachedThreadPool(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;"/>
-		<method name="newFixedThreadPool(I)Ljava/util/concurrent/ExecutorService;"/>
-		<method name="newFixedThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;"/>
-		<method name="newScheduledThreadPool(I)Ljava/util/concurrent/ScheduledExecutorService;"/>
-		<method name="newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;"/>
-		<method name="newSingleThreadExecutor()Ljava/util/concurrent/ExecutorService;"/>
-		<method name="newSingleThreadExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;"/>
-		<method name="newSingleThreadScheduledExecutor()Ljava/util/concurrent/ScheduledExecutorService;"/>
-		<method name="newSingleThreadScheduledExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;"/>
-		<method name="newWorkStealingPool()Ljava/util/concurrent/ExecutorService;" since="24"/>
-		<method name="newWorkStealingPool(I)Ljava/util/concurrent/ExecutorService;" since="24"/>
-		<method name="privilegedCallable(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Callable;"/>
-		<method name="privilegedCallableUsingCurrentClassLoader(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Callable;"/>
-		<method name="privilegedThreadFactory()Ljava/util/concurrent/ThreadFactory;"/>
-		<method name="unconfigurableExecutorService(Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/ExecutorService;"/>
-		<method name="unconfigurableScheduledExecutorService(Ljava/util/concurrent/ScheduledExecutorService;)Ljava/util/concurrent/ScheduledExecutorService;"/>
-	</class>
-	<class name="java/util/concurrent/ForkJoinPool" since="21">
-		<extends name="java/util/concurrent/AbstractExecutorService"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;Ljava/lang/Thread$UncaughtExceptionHandler;Z)V"/>
-		<method name="awaitQuiescence(JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="commonPool()Ljava/util/concurrent/ForkJoinPool;" since="24"/>
-		<method name="drainTasksTo(Ljava/util/Collection;)I"/>
-		<method name="execute(Ljava/util/concurrent/ForkJoinTask;)V"/>
-		<method name="getActiveThreadCount()I"/>
-		<method name="getAsyncMode()Z"/>
-		<method name="getCommonPoolParallelism()I" since="24"/>
-		<method name="getFactory()Ljava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;"/>
-		<method name="getParallelism()I"/>
-		<method name="getPoolSize()I"/>
-		<method name="getQueuedSubmissionCount()I"/>
-		<method name="getQueuedTaskCount()J"/>
-		<method name="getRunningThreadCount()I"/>
-		<method name="getStealCount()J"/>
-		<method name="getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;"/>
-		<method name="hasQueuedSubmissions()Z"/>
-		<method name="invoke(Ljava/util/concurrent/ForkJoinTask;)Ljava/lang/Object;"/>
-		<method name="isQuiescent()Z"/>
-		<method name="isTerminating()Z"/>
-		<method name="managedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V"/>
-		<method name="pollSubmission()Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="submit(Ljava/lang/Runnable;)Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="submit(Ljava/util/concurrent/ForkJoinTask;)Ljava/util/concurrent/ForkJoinTask;"/>
-		<field name="defaultForkJoinWorkerThreadFactory"/>
-	</class>
-	<class name="java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="newThread(Ljava/util/concurrent/ForkJoinPool;)Ljava/util/concurrent/ForkJoinWorkerThread;"/>
-	</class>
-	<class name="java/util/concurrent/ForkJoinPool$ManagedBlocker" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="block()Z"/>
-		<method name="isReleasable()Z"/>
-	</class>
-	<class name="java/util/concurrent/ForkJoinTask" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/Future"/>
-		<method name="&lt;init>()V"/>
-		<method name="adapt(Ljava/lang/Runnable;)Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="adapt(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="adapt(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="compareAndSetForkJoinTaskTag(SS)Z" since="24"/>
-		<method name="complete(Ljava/lang/Object;)V"/>
-		<method name="completeExceptionally(Ljava/lang/Throwable;)V"/>
-		<method name="exec()Z"/>
-		<method name="fork()Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="getException()Ljava/lang/Throwable;"/>
-		<method name="getForkJoinTaskTag()S" since="24"/>
-		<method name="getPool()Ljava/util/concurrent/ForkJoinPool;"/>
-		<method name="getQueuedTaskCount()I"/>
-		<method name="getRawResult()Ljava/lang/Object;"/>
-		<method name="getSurplusQueuedTaskCount()I"/>
-		<method name="helpQuiesce()V"/>
-		<method name="inForkJoinPool()Z"/>
-		<method name="invoke()Ljava/lang/Object;"/>
-		<method name="invokeAll(Ljava/util/Collection;)Ljava/util/Collection;"/>
-		<method name="invokeAll(Ljava/util/concurrent/ForkJoinTask;Ljava/util/concurrent/ForkJoinTask;)V"/>
-		<method name="invokeAll([Ljava/util/concurrent/ForkJoinTask;)V"/>
-		<method name="isCompletedAbnormally()Z"/>
-		<method name="isCompletedNormally()Z"/>
-		<method name="join()Ljava/lang/Object;"/>
-		<method name="peekNextLocalTask()Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="pollNextLocalTask()Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="pollTask()Ljava/util/concurrent/ForkJoinTask;"/>
-		<method name="quietlyComplete()V" since="24"/>
-		<method name="quietlyInvoke()V"/>
-		<method name="quietlyJoin()V"/>
-		<method name="reinitialize()V"/>
-		<method name="setForkJoinTaskTag(S)S" since="24"/>
-		<method name="setRawResult(Ljava/lang/Object;)V"/>
-		<method name="tryUnfork()Z"/>
-	</class>
-	<class name="java/util/concurrent/ForkJoinWorkerThread" since="21">
-		<extends name="java/lang/Thread"/>
-		<method name="&lt;init>(Ljava/util/concurrent/ForkJoinPool;)V"/>
-		<method name="getPool()Ljava/util/concurrent/ForkJoinPool;"/>
-		<method name="getPoolIndex()I"/>
-		<method name="onStart()V"/>
-		<method name="onTermination(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/concurrent/Future" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="cancel(Z)Z"/>
-		<method name="get()Ljava/lang/Object;"/>
-		<method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
-		<method name="isCancelled()Z"/>
-		<method name="isDone()Z"/>
-	</class>
-	<class name="java/util/concurrent/FutureTask" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable" removed="9"/>
-		<implements name="java/util/concurrent/Future" removed="9"/>
-		<implements name="java/util/concurrent/RunnableFuture" since="9"/>
-		<method name="&lt;init>(Ljava/lang/Runnable;Ljava/lang/Object;)V"/>
-		<method name="&lt;init>(Ljava/util/concurrent/Callable;)V"/>
-		<method name="done()V"/>
-		<method name="runAndReset()Z"/>
-		<method name="set(Ljava/lang/Object;)V"/>
-		<method name="setException(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/concurrent/LinkedBlockingDeque" since="9">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/BlockingDeque"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/concurrent/LinkedBlockingQueue" since="1">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/BlockingQueue"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/concurrent/LinkedTransferQueue" since="21">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/TransferQueue"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-	</class>
-	<class name="java/util/concurrent/Phaser" since="21">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/util/concurrent/Phaser;)V"/>
-		<method name="&lt;init>(Ljava/util/concurrent/Phaser;I)V"/>
-		<method name="arrive()I"/>
-		<method name="arriveAndAwaitAdvance()I"/>
-		<method name="arriveAndDeregister()I"/>
-		<method name="awaitAdvance(I)I"/>
-		<method name="awaitAdvanceInterruptibly(I)I"/>
-		<method name="awaitAdvanceInterruptibly(IJLjava/util/concurrent/TimeUnit;)I"/>
-		<method name="bulkRegister(I)I"/>
-		<method name="forceTermination()V"/>
-		<method name="getArrivedParties()I"/>
-		<method name="getParent()Ljava/util/concurrent/Phaser;"/>
-		<method name="getPhase()I"/>
-		<method name="getRegisteredParties()I"/>
-		<method name="getRoot()Ljava/util/concurrent/Phaser;"/>
-		<method name="getUnarrivedParties()I"/>
-		<method name="isTerminated()Z"/>
-		<method name="onAdvance(II)Z"/>
-		<method name="register()I"/>
-	</class>
-	<class name="java/util/concurrent/PriorityBlockingQueue" since="1">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/BlockingQueue"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/util/Comparator;)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="comparator()Ljava/util/Comparator;"/>
-	</class>
-	<class name="java/util/concurrent/RecursiveAction" since="21">
-		<extends name="java/util/concurrent/ForkJoinTask"/>
-		<method name="&lt;init>()V"/>
-		<method name="compute()V"/>
-		<method name="getRawResult()Ljava/lang/Void;"/>
-		<method name="setRawResult(Ljava/lang/Void;)V"/>
-	</class>
-	<class name="java/util/concurrent/RecursiveTask" since="21">
-		<extends name="java/util/concurrent/ForkJoinTask"/>
-		<method name="&lt;init>()V"/>
-		<method name="compute()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/concurrent/RejectedExecutionException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/concurrent/RejectedExecutionHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V"/>
-	</class>
-	<class name="java/util/concurrent/RunnableFuture" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable"/>
-		<implements name="java/util/concurrent/Future"/>
-	</class>
-	<class name="java/util/concurrent/RunnableScheduledFuture" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/RunnableFuture"/>
-		<implements name="java/util/concurrent/ScheduledFuture"/>
-		<method name="isPeriodic()Z"/>
-	</class>
-	<class name="java/util/concurrent/ScheduledExecutorService" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/ExecutorService"/>
-		<method name="schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
-		<method name="schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
-		<method name="scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
-		<method name="scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
-	</class>
-	<class name="java/util/concurrent/ScheduledFuture" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/Delayed"/>
-		<implements name="java/util/concurrent/Future"/>
-	</class>
-	<class name="java/util/concurrent/ScheduledThreadPoolExecutor" since="1">
-		<extends name="java/util/concurrent/ThreadPoolExecutor"/>
-		<implements name="java/util/concurrent/ScheduledExecutorService"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(ILjava/util/concurrent/RejectedExecutionHandler;)V"/>
-		<method name="&lt;init>(ILjava/util/concurrent/ThreadFactory;)V"/>
-		<method name="&lt;init>(ILjava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
-		<method name="decorateTask(Ljava/lang/Runnable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;" since="9"/>
-		<method name="decorateTask(Ljava/util/concurrent/Callable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;" since="9"/>
-		<method name="getContinueExistingPeriodicTasksAfterShutdownPolicy()Z"/>
-		<method name="getExecuteExistingDelayedTasksAfterShutdownPolicy()Z"/>
-		<method name="getRemoveOnCancelPolicy()Z" since="21"/>
-		<method name="setContinueExistingPeriodicTasksAfterShutdownPolicy(Z)V"/>
-		<method name="setExecuteExistingDelayedTasksAfterShutdownPolicy(Z)V"/>
-		<method name="setRemoveOnCancelPolicy(Z)V" since="21"/>
-	</class>
-	<class name="java/util/concurrent/Semaphore" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IZ)V"/>
-		<method name="acquire()V"/>
-		<method name="acquire(I)V"/>
-		<method name="acquireUninterruptibly()V"/>
-		<method name="acquireUninterruptibly(I)V"/>
-		<method name="availablePermits()I"/>
-		<method name="drainPermits()I"/>
-		<method name="getQueueLength()I"/>
-		<method name="getQueuedThreads()Ljava/util/Collection;"/>
-		<method name="hasQueuedThreads()Z"/>
-		<method name="isFair()Z"/>
-		<method name="reducePermits(I)V"/>
-		<method name="release()V"/>
-		<method name="release(I)V"/>
-		<method name="tryAcquire()Z"/>
-		<method name="tryAcquire(I)Z"/>
-		<method name="tryAcquire(IJLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="tryAcquire(JLjava/util/concurrent/TimeUnit;)Z"/>
-	</class>
-	<class name="java/util/concurrent/SynchronousQueue" since="1">
-		<extends name="java/util/AbstractQueue"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/BlockingQueue"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-	</class>
-	<class name="java/util/concurrent/ThreadFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;"/>
-	</class>
-	<class name="java/util/concurrent/ThreadLocalRandom" since="21">
-		<extends name="java/util/Random"/>
-		<method name="&lt;init>()V"/>
-		<method name="current()Ljava/util/concurrent/ThreadLocalRandom;"/>
-		<method name="nextDouble(D)D"/>
-		<method name="nextDouble(DD)D"/>
-		<method name="nextInt(II)I"/>
-		<method name="nextLong(J)J"/>
-		<method name="nextLong(JJ)J"/>
-	</class>
-	<class name="java/util/concurrent/ThreadPoolExecutor" since="1">
-		<extends name="java/util/concurrent/AbstractExecutorService"/>
-		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;)V"/>
-		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
-		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V"/>
-		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
-		<method name="afterExecute(Ljava/lang/Runnable;Ljava/lang/Throwable;)V"/>
-		<method name="allowCoreThreadTimeOut(Z)V" since="9"/>
-		<method name="allowsCoreThreadTimeOut()Z" since="9"/>
-		<method name="beforeExecute(Ljava/lang/Thread;Ljava/lang/Runnable;)V"/>
-		<method name="getActiveCount()I"/>
-		<method name="getCompletedTaskCount()J"/>
-		<method name="getCorePoolSize()I"/>
-		<method name="getKeepAliveTime(Ljava/util/concurrent/TimeUnit;)J"/>
-		<method name="getLargestPoolSize()I"/>
-		<method name="getMaximumPoolSize()I"/>
-		<method name="getPoolSize()I"/>
-		<method name="getQueue()Ljava/util/concurrent/BlockingQueue;"/>
-		<method name="getRejectedExecutionHandler()Ljava/util/concurrent/RejectedExecutionHandler;"/>
-		<method name="getTaskCount()J"/>
-		<method name="getThreadFactory()Ljava/util/concurrent/ThreadFactory;"/>
-		<method name="isTerminating()Z"/>
-		<method name="prestartAllCoreThreads()I"/>
-		<method name="prestartCoreThread()Z"/>
-		<method name="purge()V"/>
-		<method name="remove(Ljava/lang/Runnable;)Z"/>
-		<method name="setCorePoolSize(I)V"/>
-		<method name="setKeepAliveTime(JLjava/util/concurrent/TimeUnit;)V"/>
-		<method name="setMaximumPoolSize(I)V"/>
-		<method name="setRejectedExecutionHandler(Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
-		<method name="setThreadFactory(Ljava/util/concurrent/ThreadFactory;)V"/>
-		<method name="terminated()V"/>
-	</class>
-	<class name="java/util/concurrent/ThreadPoolExecutor$AbortPolicy" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/concurrent/ThreadPoolExecutor$CallerRunsPolicy" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/concurrent/ThreadPoolExecutor$DiscardOldestPolicy" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/concurrent/ThreadPoolExecutor$DiscardPolicy" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/concurrent/TimeUnit" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="convert(JLjava/util/concurrent/TimeUnit;)J"/>
-		<method name="sleep(J)V"/>
-		<method name="timedJoin(Ljava/lang/Thread;J)V"/>
-		<method name="timedWait(Ljava/lang/Object;J)V"/>
-		<method name="toDays(J)J" since="9"/>
-		<method name="toHours(J)J" since="9"/>
-		<method name="toMicros(J)J"/>
-		<method name="toMillis(J)J"/>
-		<method name="toMinutes(J)J" since="9"/>
-		<method name="toNanos(J)J"/>
-		<method name="toSeconds(J)J"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/util/concurrent/TimeUnit;"/>
-		<method name="values()[Ljava/util/concurrent/TimeUnit;"/>
-		<field name="DAYS" since="9"/>
-		<field name="HOURS" since="9"/>
-		<field name="MICROSECONDS"/>
-		<field name="MILLISECONDS"/>
-		<field name="MINUTES" since="9"/>
-		<field name="NANOSECONDS"/>
-		<field name="SECONDS"/>
-	</class>
-	<class name="java/util/concurrent/TimeoutException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/concurrent/TransferQueue" since="21">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/concurrent/BlockingQueue"/>
-		<method name="getWaitingConsumerCount()I"/>
-		<method name="hasWaitingConsumer()Z"/>
-		<method name="transfer(Ljava/lang/Object;)V"/>
-		<method name="tryTransfer(Ljava/lang/Object;)Z"/>
-		<method name="tryTransfer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicBoolean" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="compareAndSet(ZZ)Z"/>
-		<method name="get()Z"/>
-		<method name="getAndSet(Z)Z"/>
-		<method name="lazySet(Z)V" since="9"/>
-		<method name="set(Z)V"/>
-		<method name="weakCompareAndSet(ZZ)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicInteger" since="1">
-		<extends name="java/lang/Number"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="accumulateAndGet(ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="addAndGet(I)I"/>
-		<method name="compareAndSet(II)Z"/>
-		<method name="decrementAndGet()I"/>
-		<method name="get()I"/>
-		<method name="getAndAccumulate(ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="getAndAdd(I)I"/>
-		<method name="getAndDecrement()I"/>
-		<method name="getAndIncrement()I"/>
-		<method name="getAndSet(I)I"/>
-		<method name="getAndUpdate(Ljava/util/function/IntUnaryOperator;)I" since="24"/>
-		<method name="incrementAndGet()I"/>
-		<method name="lazySet(I)V" since="9"/>
-		<method name="set(I)V"/>
-		<method name="updateAndGet(Ljava/util/function/IntUnaryOperator;)I" since="24"/>
-		<method name="weakCompareAndSet(II)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicIntegerArray" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>([I)V"/>
-		<method name="accumulateAndGet(IILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="addAndGet(II)I"/>
-		<method name="compareAndSet(III)Z"/>
-		<method name="decrementAndGet(I)I"/>
-		<method name="get(I)I"/>
-		<method name="getAndAccumulate(IILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="getAndAdd(II)I"/>
-		<method name="getAndDecrement(I)I"/>
-		<method name="getAndIncrement(I)I"/>
-		<method name="getAndSet(II)I"/>
-		<method name="getAndUpdate(ILjava/util/function/IntUnaryOperator;)I" since="24"/>
-		<method name="incrementAndGet(I)I"/>
-		<method name="lazySet(II)V" since="9"/>
-		<method name="length()I"/>
-		<method name="set(II)V"/>
-		<method name="updateAndGet(ILjava/util/function/IntUnaryOperator;)I" since="24"/>
-		<method name="weakCompareAndSet(III)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicIntegerFieldUpdater" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="accumulateAndGet(Ljava/lang/Object;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="addAndGet(Ljava/lang/Object;I)I"/>
-		<method name="compareAndSet(Ljava/lang/Object;II)Z"/>
-		<method name="decrementAndGet(Ljava/lang/Object;)I"/>
-		<method name="get(Ljava/lang/Object;)I"/>
-		<method name="getAndAccumulate(Ljava/lang/Object;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
-		<method name="getAndAdd(Ljava/lang/Object;I)I"/>
-		<method name="getAndDecrement(Ljava/lang/Object;)I"/>
-		<method name="getAndIncrement(Ljava/lang/Object;)I"/>
-		<method name="getAndSet(Ljava/lang/Object;I)I"/>
-		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/IntUnaryOperator;)I" since="24"/>
-		<method name="incrementAndGet(Ljava/lang/Object;)I"/>
-		<method name="lazySet(Ljava/lang/Object;I)V" since="9"/>
-		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;"/>
-		<method name="set(Ljava/lang/Object;I)V"/>
-		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/IntUnaryOperator;)I" since="24"/>
-		<method name="weakCompareAndSet(Ljava/lang/Object;II)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicLong" since="1">
-		<extends name="java/lang/Number"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(J)V"/>
-		<method name="accumulateAndGet(JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="addAndGet(J)J"/>
-		<method name="compareAndSet(JJ)Z"/>
-		<method name="decrementAndGet()J"/>
-		<method name="get()J"/>
-		<method name="getAndAccumulate(JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="getAndAdd(J)J"/>
-		<method name="getAndDecrement()J"/>
-		<method name="getAndIncrement()J"/>
-		<method name="getAndSet(J)J"/>
-		<method name="getAndUpdate(Ljava/util/function/LongUnaryOperator;)J" since="24"/>
-		<method name="incrementAndGet()J"/>
-		<method name="lazySet(J)V" since="9"/>
-		<method name="set(J)V"/>
-		<method name="updateAndGet(Ljava/util/function/LongUnaryOperator;)J" since="24"/>
-		<method name="weakCompareAndSet(JJ)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicLongArray" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>([J)V"/>
-		<method name="accumulateAndGet(IJLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="addAndGet(IJ)J"/>
-		<method name="compareAndSet(IJJ)Z"/>
-		<method name="decrementAndGet(I)J"/>
-		<method name="get(I)J"/>
-		<method name="getAndAccumulate(IJLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="getAndAdd(IJ)J"/>
-		<method name="getAndDecrement(I)J"/>
-		<method name="getAndIncrement(I)J"/>
-		<method name="getAndSet(IJ)J"/>
-		<method name="getAndUpdate(ILjava/util/function/LongUnaryOperator;)J" since="24"/>
-		<method name="incrementAndGet(I)J"/>
-		<method name="lazySet(IJ)V" since="9"/>
-		<method name="length()I"/>
-		<method name="set(IJ)V"/>
-		<method name="updateAndGet(ILjava/util/function/LongUnaryOperator;)J" since="24"/>
-		<method name="weakCompareAndSet(IJJ)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicLongFieldUpdater" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="accumulateAndGet(Ljava/lang/Object;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="addAndGet(Ljava/lang/Object;J)J"/>
-		<method name="compareAndSet(Ljava/lang/Object;JJ)Z"/>
-		<method name="decrementAndGet(Ljava/lang/Object;)J"/>
-		<method name="get(Ljava/lang/Object;)J"/>
-		<method name="getAndAccumulate(Ljava/lang/Object;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
-		<method name="getAndAdd(Ljava/lang/Object;J)J"/>
-		<method name="getAndDecrement(Ljava/lang/Object;)J"/>
-		<method name="getAndIncrement(Ljava/lang/Object;)J"/>
-		<method name="getAndSet(Ljava/lang/Object;J)J"/>
-		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/LongUnaryOperator;)J" since="24"/>
-		<method name="incrementAndGet(Ljava/lang/Object;)J"/>
-		<method name="lazySet(Ljava/lang/Object;J)V" since="9"/>
-		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;"/>
-		<method name="set(Ljava/lang/Object;J)V"/>
-		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/LongUnaryOperator;)J" since="24"/>
-		<method name="weakCompareAndSet(Ljava/lang/Object;JJ)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicMarkableReference" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Object;Z)V"/>
-		<method name="attemptMark(Ljava/lang/Object;Z)Z"/>
-		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;ZZ)Z"/>
-		<method name="get([Z)Ljava/lang/Object;"/>
-		<method name="getReference()Ljava/lang/Object;"/>
-		<method name="isMarked()Z"/>
-		<method name="set(Ljava/lang/Object;Z)V"/>
-		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;ZZ)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicReference" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V"/>
-		<method name="accumulateAndGet(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="get()Ljava/lang/Object;"/>
-		<method name="getAndAccumulate(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="getAndSet(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getAndUpdate(Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="lazySet(Ljava/lang/Object;)V" since="9"/>
-		<method name="set(Ljava/lang/Object;)V"/>
-		<method name="updateAndGet(Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicReferenceArray" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>([Ljava/lang/Object;)V"/>
-		<method name="accumulateAndGet(ILjava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="get(I)Ljava/lang/Object;"/>
-		<method name="getAndAccumulate(ILjava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="getAndSet(ILjava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getAndUpdate(ILjava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="lazySet(ILjava/lang/Object;)V" since="9"/>
-		<method name="length()I"/>
-		<method name="set(ILjava/lang/Object;)V"/>
-		<method name="updateAndGet(ILjava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="weakCompareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicReferenceFieldUpdater" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="accumulateAndGet(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getAndAccumulate(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="getAndSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="lazySet(Ljava/lang/Object;Ljava/lang/Object;)V" since="9"/>
-		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;"/>
-		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
-		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/AtomicStampedReference" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Object;I)V"/>
-		<method name="attemptStamp(Ljava/lang/Object;I)Z"/>
-		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;II)Z"/>
-		<method name="get([I)Ljava/lang/Object;"/>
-		<method name="getReference()Ljava/lang/Object;"/>
-		<method name="getStamp()I"/>
-		<method name="set(Ljava/lang/Object;I)V"/>
-		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;II)Z"/>
-	</class>
-	<class name="java/util/concurrent/atomic/DoubleAccumulator" since="24">
-		<extends name="java/lang/Number" since="29"/>
-		<extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
-		<method name="&lt;init>(Ljava/util/function/DoubleBinaryOperator;D)V"/>
-		<method name="accumulate(D)V"/>
-		<method name="get()D"/>
-		<method name="getThenReset()D"/>
-		<method name="reset()V"/>
-	</class>
-	<class name="java/util/concurrent/atomic/DoubleAdder" since="24">
-		<extends name="java/lang/Number" since="29"/>
-		<extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(D)V"/>
-		<method name="reset()V"/>
-		<method name="sum()D"/>
-		<method name="sumThenReset()D"/>
-	</class>
-	<class name="java/util/concurrent/atomic/LongAccumulator" since="24">
-		<extends name="java/lang/Number" since="29"/>
-		<extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
-		<method name="&lt;init>(Ljava/util/function/LongBinaryOperator;J)V"/>
-		<method name="accumulate(J)V"/>
-		<method name="get()J"/>
-		<method name="getThenReset()J"/>
-		<method name="reset()V"/>
-	</class>
-	<class name="java/util/concurrent/atomic/LongAdder" since="24">
-		<extends name="java/lang/Number" since="29"/>
-		<extends name="java/util/concurrent/atomic/Striped64" removed="29"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(J)V"/>
-		<method name="decrement()V"/>
-		<method name="increment()V"/>
-		<method name="reset()V"/>
-		<method name="sum()J"/>
-		<method name="sumThenReset()J"/>
-	</class>
-	<class name="java/util/concurrent/atomic/Striped64" since="24" removed="29">
-		<extends name="java/lang/Number"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/concurrent/locks/AbstractOwnableSynchronizer" since="5">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="getExclusiveOwnerThread()Ljava/lang/Thread;"/>
-		<method name="setExclusiveOwnerThread(Ljava/lang/Thread;)V"/>
-	</class>
-	<class name="java/util/concurrent/locks/AbstractQueuedLongSynchronizer" since="9">
-		<extends name="java/util/concurrent/locks/AbstractOwnableSynchronizer"/>
-		<method name="&lt;init>()V"/>
-		<method name="acquire(J)V"/>
-		<method name="acquireInterruptibly(J)V"/>
-		<method name="acquireShared(J)V"/>
-		<method name="acquireSharedInterruptibly(J)V"/>
-		<method name="compareAndSetState(JJ)Z"/>
-		<method name="getExclusiveQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getFirstQueuedThread()Ljava/lang/Thread;"/>
-		<method name="getQueueLength()I"/>
-		<method name="getQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getSharedQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getState()J"/>
-		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)I"/>
-		<method name="getWaitingThreads(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Ljava/util/Collection;"/>
-		<method name="hasContended()Z"/>
-		<method name="hasQueuedPredecessors()Z" since="21"/>
-		<method name="hasQueuedThreads()Z"/>
-		<method name="hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Z"/>
-		<method name="isHeldExclusively()Z"/>
-		<method name="isQueued(Ljava/lang/Thread;)Z"/>
-		<method name="owns(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Z"/>
-		<method name="release(J)Z"/>
-		<method name="releaseShared(J)Z"/>
-		<method name="setState(J)V"/>
-		<method name="tryAcquire(J)Z"/>
-		<method name="tryAcquireNanos(JJ)Z"/>
-		<method name="tryAcquireShared(J)J"/>
-		<method name="tryAcquireSharedNanos(JJ)Z"/>
-		<method name="tryRelease(J)Z"/>
-		<method name="tryReleaseShared(J)Z"/>
-	</class>
-	<class name="java/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/locks/Condition"/>
-		<method name="&lt;init>(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer;)V"/>
-		<method name="getWaitQueueLength()I"/>
-		<method name="getWaitingThreads()Ljava/util/Collection;"/>
-		<method name="hasWaiters()Z"/>
-	</class>
-	<class name="java/util/concurrent/locks/AbstractQueuedSynchronizer" since="1">
-		<extends name="java/lang/Object" removed="5"/>
-		<extends name="java/util/concurrent/locks/AbstractOwnableSynchronizer" since="5"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="acquire(I)V"/>
-		<method name="acquireInterruptibly(I)V"/>
-		<method name="acquireShared(I)V"/>
-		<method name="acquireSharedInterruptibly(I)V"/>
-		<method name="compareAndSetState(II)Z"/>
-		<method name="getExclusiveQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getFirstQueuedThread()Ljava/lang/Thread;"/>
-		<method name="getQueueLength()I"/>
-		<method name="getQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getSharedQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getState()I"/>
-		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)I"/>
-		<method name="getWaitingThreads(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Ljava/util/Collection;"/>
-		<method name="hasContended()Z"/>
-		<method name="hasQueuedPredecessors()Z" since="21"/>
-		<method name="hasQueuedThreads()Z"/>
-		<method name="hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z"/>
-		<method name="isHeldExclusively()Z"/>
-		<method name="isQueued(Ljava/lang/Thread;)Z"/>
-		<method name="owns(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z"/>
-		<method name="release(I)Z"/>
-		<method name="releaseShared(I)Z"/>
-		<method name="setState(I)V"/>
-		<method name="tryAcquire(I)Z"/>
-		<method name="tryAcquireNanos(IJ)Z"/>
-		<method name="tryAcquireShared(I)I"/>
-		<method name="tryAcquireSharedNanos(IJ)Z"/>
-		<method name="tryRelease(I)Z"/>
-		<method name="tryReleaseShared(I)Z"/>
-	</class>
-	<class name="java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/locks/Condition"/>
-		<method name="&lt;init>(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)V"/>
-		<method name="getWaitQueueLength()I"/>
-		<method name="getWaitingThreads()Ljava/util/Collection;"/>
-		<method name="hasWaiters()Z"/>
-	</class>
-	<class name="java/util/concurrent/locks/Condition" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="await()V"/>
-		<method name="await(JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="awaitNanos(J)J"/>
-		<method name="awaitUninterruptibly()V"/>
-		<method name="awaitUntil(Ljava/util/Date;)Z"/>
-		<method name="signal()V"/>
-		<method name="signalAll()V"/>
-	</class>
-	<class name="java/util/concurrent/locks/Lock" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="lock()V"/>
-		<method name="lockInterruptibly()V"/>
-		<method name="newCondition()Ljava/util/concurrent/locks/Condition;"/>
-		<method name="tryLock()Z"/>
-		<method name="tryLock(JLjava/util/concurrent/TimeUnit;)Z"/>
-		<method name="unlock()V"/>
-	</class>
-	<class name="java/util/concurrent/locks/LockSupport" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getBlocker(Ljava/lang/Thread;)Ljava/lang/Object;" since="9"/>
-		<method name="park()V"/>
-		<method name="park(Ljava/lang/Object;)V" since="9"/>
-		<method name="parkNanos(J)V"/>
-		<method name="parkNanos(Ljava/lang/Object;J)V" since="9"/>
-		<method name="parkUntil(J)V"/>
-		<method name="parkUntil(Ljava/lang/Object;J)V" since="9"/>
-		<method name="unpark(Ljava/lang/Thread;)V"/>
-	</class>
-	<class name="java/util/concurrent/locks/ReadWriteLock" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="readLock()Ljava/util/concurrent/locks/Lock;"/>
-		<method name="writeLock()Ljava/util/concurrent/locks/Lock;"/>
-	</class>
-	<class name="java/util/concurrent/locks/ReentrantLock" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/locks/Lock"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="getHoldCount()I"/>
-		<method name="getOwner()Ljava/lang/Thread;"/>
-		<method name="getQueueLength()I"/>
-		<method name="getQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/Condition;)I"/>
-		<method name="getWaitingThreads(Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection;"/>
-		<method name="hasQueuedThread(Ljava/lang/Thread;)Z"/>
-		<method name="hasQueuedThreads()Z"/>
-		<method name="hasWaiters(Ljava/util/concurrent/locks/Condition;)Z"/>
-		<method name="isFair()Z"/>
-		<method name="isHeldByCurrentThread()Z"/>
-		<method name="isLocked()Z"/>
-	</class>
-	<class name="java/util/concurrent/locks/ReentrantReadWriteLock" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/locks/ReadWriteLock"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="getOwner()Ljava/lang/Thread;"/>
-		<method name="getQueueLength()I"/>
-		<method name="getQueuedReaderThreads()Ljava/util/Collection;"/>
-		<method name="getQueuedThreads()Ljava/util/Collection;"/>
-		<method name="getQueuedWriterThreads()Ljava/util/Collection;"/>
-		<method name="getReadHoldCount()I" since="9"/>
-		<method name="getReadLockCount()I"/>
-		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/Condition;)I"/>
-		<method name="getWaitingThreads(Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection;"/>
-		<method name="getWriteHoldCount()I"/>
-		<method name="hasQueuedThread(Ljava/lang/Thread;)Z"/>
-		<method name="hasQueuedThreads()Z"/>
-		<method name="hasWaiters(Ljava/util/concurrent/locks/Condition;)Z"/>
-		<method name="isFair()Z"/>
-		<method name="isWriteLocked()Z"/>
-		<method name="isWriteLockedByCurrentThread()Z"/>
-		<method name="readLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;"/>
-		<method name="writeLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;"/>
-	</class>
-	<class name="java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/locks/Lock"/>
-		<method name="&lt;init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V"/>
-	</class>
-	<class name="java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/concurrent/locks/Lock"/>
-		<method name="&lt;init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V"/>
-		<method name="getHoldCount()I" since="9"/>
-		<method name="isHeldByCurrentThread()Z" since="9"/>
-	</class>
-	<class name="java/util/concurrent/locks/StampedLock" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="asReadLock()Ljava/util/concurrent/locks/Lock;"/>
-		<method name="asReadWriteLock()Ljava/util/concurrent/locks/ReadWriteLock;"/>
-		<method name="asWriteLock()Ljava/util/concurrent/locks/Lock;"/>
-		<method name="getReadLockCount()I"/>
-		<method name="isReadLocked()Z"/>
-		<method name="isWriteLocked()Z"/>
-		<method name="readLock()J"/>
-		<method name="readLockInterruptibly()J"/>
-		<method name="tryConvertToOptimisticRead(J)J"/>
-		<method name="tryConvertToReadLock(J)J"/>
-		<method name="tryConvertToWriteLock(J)J"/>
-		<method name="tryOptimisticRead()J"/>
-		<method name="tryReadLock()J"/>
-		<method name="tryReadLock(JLjava/util/concurrent/TimeUnit;)J"/>
-		<method name="tryUnlockRead()Z"/>
-		<method name="tryUnlockWrite()Z"/>
-		<method name="tryWriteLock()J"/>
-		<method name="tryWriteLock(JLjava/util/concurrent/TimeUnit;)J"/>
-		<method name="unlock(J)V"/>
-		<method name="unlockRead(J)V"/>
-		<method name="unlockWrite(J)V"/>
-		<method name="validate(J)Z"/>
-		<method name="writeLock()J"/>
-		<method name="writeLockInterruptibly()J"/>
-	</class>
-	<class name="java/util/function/BiConsumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="andThen(Ljava/util/function/BiConsumer;)Ljava/util/function/BiConsumer;"/>
-	</class>
-	<class name="java/util/function/BiFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="andThen(Ljava/util/function/Function;)Ljava/util/function/BiFunction;"/>
-		<method name="apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/function/BiPredicate" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="and(Ljava/util/function/BiPredicate;)Ljava/util/function/BiPredicate;"/>
-		<method name="negate()Ljava/util/function/BiPredicate;"/>
-		<method name="or(Ljava/util/function/BiPredicate;)Ljava/util/function/BiPredicate;"/>
-		<method name="test(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/util/function/BinaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/BiFunction"/>
-		<method name="maxBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;"/>
-		<method name="minBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;"/>
-	</class>
-	<class name="java/util/function/BooleanSupplier" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="getAsBoolean()Z"/>
-	</class>
-	<class name="java/util/function/Consumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/lang/Object;)V"/>
-		<method name="andThen(Ljava/util/function/Consumer;)Ljava/util/function/Consumer;"/>
-	</class>
-	<class name="java/util/function/DoubleBinaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsDouble(DD)D"/>
-	</class>
-	<class name="java/util/function/DoubleConsumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(D)V"/>
-		<method name="andThen(Ljava/util/function/DoubleConsumer;)Ljava/util/function/DoubleConsumer;"/>
-	</class>
-	<class name="java/util/function/DoubleFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="apply(D)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/function/DoublePredicate" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="and(Ljava/util/function/DoublePredicate;)Ljava/util/function/DoublePredicate;"/>
-		<method name="negate()Ljava/util/function/DoublePredicate;"/>
-		<method name="or(Ljava/util/function/DoublePredicate;)Ljava/util/function/DoublePredicate;"/>
-		<method name="test(D)Z"/>
-	</class>
-	<class name="java/util/function/DoubleSupplier" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="getAsDouble()D"/>
-	</class>
-	<class name="java/util/function/DoubleToIntFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsInt(D)I"/>
-	</class>
-	<class name="java/util/function/DoubleToLongFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsLong(D)J"/>
-	</class>
-	<class name="java/util/function/DoubleUnaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="andThen(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;"/>
-		<method name="applyAsDouble(D)D"/>
-		<method name="compose(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;"/>
-		<method name="identity()Ljava/util/function/DoubleUnaryOperator;"/>
-	</class>
-	<class name="java/util/function/Function" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="andThen(Ljava/util/function/Function;)Ljava/util/function/Function;"/>
-		<method name="apply(Ljava/lang/Object;)Ljava/lang/Object;"/>
-		<method name="compose(Ljava/util/function/Function;)Ljava/util/function/Function;"/>
-		<method name="identity()Ljava/util/function/Function;"/>
-	</class>
-	<class name="java/util/function/IntBinaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsInt(II)I"/>
-	</class>
-	<class name="java/util/function/IntConsumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(I)V"/>
-		<method name="andThen(Ljava/util/function/IntConsumer;)Ljava/util/function/IntConsumer;"/>
-	</class>
-	<class name="java/util/function/IntFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="apply(I)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/function/IntPredicate" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="and(Ljava/util/function/IntPredicate;)Ljava/util/function/IntPredicate;"/>
-		<method name="negate()Ljava/util/function/IntPredicate;"/>
-		<method name="or(Ljava/util/function/IntPredicate;)Ljava/util/function/IntPredicate;"/>
-		<method name="test(I)Z"/>
-	</class>
-	<class name="java/util/function/IntSupplier" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="getAsInt()I"/>
-	</class>
-	<class name="java/util/function/IntToDoubleFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsDouble(I)D"/>
-	</class>
-	<class name="java/util/function/IntToLongFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsLong(I)J"/>
-	</class>
-	<class name="java/util/function/IntUnaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="andThen(Ljava/util/function/IntUnaryOperator;)Ljava/util/function/IntUnaryOperator;"/>
-		<method name="applyAsInt(I)I"/>
-		<method name="compose(Ljava/util/function/IntUnaryOperator;)Ljava/util/function/IntUnaryOperator;"/>
-		<method name="identity()Ljava/util/function/IntUnaryOperator;"/>
-	</class>
-	<class name="java/util/function/LongBinaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsLong(JJ)J"/>
-	</class>
-	<class name="java/util/function/LongConsumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(J)V"/>
-		<method name="andThen(Ljava/util/function/LongConsumer;)Ljava/util/function/LongConsumer;"/>
-	</class>
-	<class name="java/util/function/LongFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="apply(J)Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/function/LongPredicate" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="and(Ljava/util/function/LongPredicate;)Ljava/util/function/LongPredicate;"/>
-		<method name="negate()Ljava/util/function/LongPredicate;"/>
-		<method name="or(Ljava/util/function/LongPredicate;)Ljava/util/function/LongPredicate;"/>
-		<method name="test(J)Z"/>
-	</class>
-	<class name="java/util/function/LongSupplier" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="getAsLong()J"/>
-	</class>
-	<class name="java/util/function/LongToDoubleFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsDouble(J)D"/>
-	</class>
-	<class name="java/util/function/LongToIntFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsInt(J)I"/>
-	</class>
-	<class name="java/util/function/LongUnaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="andThen(Ljava/util/function/LongUnaryOperator;)Ljava/util/function/LongUnaryOperator;"/>
-		<method name="applyAsLong(J)J"/>
-		<method name="compose(Ljava/util/function/LongUnaryOperator;)Ljava/util/function/LongUnaryOperator;"/>
-		<method name="identity()Ljava/util/function/LongUnaryOperator;"/>
-	</class>
-	<class name="java/util/function/ObjDoubleConsumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/lang/Object;D)V"/>
-	</class>
-	<class name="java/util/function/ObjIntConsumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/lang/Object;I)V"/>
-	</class>
-	<class name="java/util/function/ObjLongConsumer" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accept(Ljava/lang/Object;J)V"/>
-	</class>
-	<class name="java/util/function/Predicate" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="and(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;"/>
-		<method name="isEqual(Ljava/lang/Object;)Ljava/util/function/Predicate;"/>
-		<method name="negate()Ljava/util/function/Predicate;"/>
-		<method name="or(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;"/>
-		<method name="test(Ljava/lang/Object;)Z"/>
-	</class>
-	<class name="java/util/function/Supplier" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="get()Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/function/ToDoubleBiFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsDouble(Ljava/lang/Object;Ljava/lang/Object;)D"/>
-	</class>
-	<class name="java/util/function/ToDoubleFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsDouble(Ljava/lang/Object;)D"/>
-	</class>
-	<class name="java/util/function/ToIntBiFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsInt(Ljava/lang/Object;Ljava/lang/Object;)I"/>
-	</class>
-	<class name="java/util/function/ToIntFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsInt(Ljava/lang/Object;)I"/>
-	</class>
-	<class name="java/util/function/ToLongBiFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsLong(Ljava/lang/Object;Ljava/lang/Object;)J"/>
-	</class>
-	<class name="java/util/function/ToLongFunction" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="applyAsLong(Ljava/lang/Object;)J"/>
-	</class>
-	<class name="java/util/function/UnaryOperator" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/Function"/>
-		<method name="identity()Ljava/util/function/UnaryOperator;"/>
-	</class>
-	<class name="java/util/jar/Attributes" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="java/util/Map"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(Ljava/util/jar/Attributes;)V"/>
-		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getValue(Ljava/util/jar/Attributes$Name;)Ljava/lang/String;"/>
-		<method name="putValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="map"/>
-	</class>
-	<class name="java/util/jar/Attributes$Name" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<field name="CLASS_PATH"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="EXTENSION_INSTALLATION" deprecated="26"/>
-		<field name="EXTENSION_LIST"/>
-		<field name="EXTENSION_NAME"/>
-		<field name="IMPLEMENTATION_TITLE"/>
-		<field name="IMPLEMENTATION_URL" deprecated="26"/>
-		<field name="IMPLEMENTATION_VENDOR"/>
-		<field name="IMPLEMENTATION_VENDOR_ID" deprecated="26"/>
-		<field name="IMPLEMENTATION_VERSION"/>
-		<field name="MAIN_CLASS"/>
-		<field name="MANIFEST_VERSION"/>
-		<field name="SEALED"/>
-		<field name="SIGNATURE_VERSION"/>
-		<field name="SPECIFICATION_TITLE"/>
-		<field name="SPECIFICATION_VENDOR"/>
-		<field name="SPECIFICATION_VERSION"/>
-	</class>
-	<class name="java/util/jar/JarEntry" since="1">
-		<extends name="java/util/zip/ZipEntry"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/util/jar/JarEntry;)V"/>
-		<method name="&lt;init>(Ljava/util/zip/ZipEntry;)V"/>
-		<method name="getAttributes()Ljava/util/jar/Attributes;"/>
-		<method name="getCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getCodeSigners()[Ljava/security/CodeSigner;"/>
-		<field name="CENATT" since="29"/>
-		<field name="CENATX" since="29"/>
-		<field name="CENCOM" since="29"/>
-		<field name="CENCRC" since="29"/>
-		<field name="CENDSK" since="29"/>
-		<field name="CENEXT" since="29"/>
-		<field name="CENFLG" since="29"/>
-		<field name="CENHDR" since="29"/>
-		<field name="CENHOW" since="29"/>
-		<field name="CENLEN" since="29"/>
-		<field name="CENNAM" since="29"/>
-		<field name="CENOFF" since="29"/>
-		<field name="CENSIG" since="29"/>
-		<field name="CENSIZ" since="29"/>
-		<field name="CENTIM" since="29"/>
-		<field name="CENVEM" since="29"/>
-		<field name="CENVER" since="29"/>
-		<field name="ENDCOM" since="29"/>
-		<field name="ENDHDR" since="29"/>
-		<field name="ENDOFF" since="29"/>
-		<field name="ENDSIG" since="29"/>
-		<field name="ENDSIZ" since="29"/>
-		<field name="ENDSUB" since="29"/>
-		<field name="ENDTOT" since="29"/>
-		<field name="EXTCRC" since="29"/>
-		<field name="EXTHDR" since="29"/>
-		<field name="EXTLEN" since="29"/>
-		<field name="EXTSIG" since="29"/>
-		<field name="EXTSIZ" since="29"/>
-		<field name="LOCCRC" since="29"/>
-		<field name="LOCEXT" since="29"/>
-		<field name="LOCFLG" since="29"/>
-		<field name="LOCHDR" since="29"/>
-		<field name="LOCHOW" since="29"/>
-		<field name="LOCLEN" since="29"/>
-		<field name="LOCNAM" since="29"/>
-		<field name="LOCSIG" since="29"/>
-		<field name="LOCSIZ" since="29"/>
-		<field name="LOCTIM" since="29"/>
-		<field name="LOCVER" since="29"/>
-	</class>
-	<class name="java/util/jar/JarException" since="1">
-		<extends name="java/util/zip/ZipException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/jar/JarFile" since="1">
-		<extends name="java/util/zip/ZipFile"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;Z)V"/>
-		<method name="&lt;init>(Ljava/io/File;ZI)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-		<method name="getJarEntry(Ljava/lang/String;)Ljava/util/jar/JarEntry;"/>
-		<method name="getManifest()Ljava/util/jar/Manifest;"/>
-		<field name="CENATT" since="29"/>
-		<field name="CENATX" since="29"/>
-		<field name="CENCOM" since="29"/>
-		<field name="CENCRC" since="29"/>
-		<field name="CENDSK" since="29"/>
-		<field name="CENEXT" since="29"/>
-		<field name="CENFLG" since="29"/>
-		<field name="CENHDR" since="29"/>
-		<field name="CENHOW" since="29"/>
-		<field name="CENLEN" since="29"/>
-		<field name="CENNAM" since="29"/>
-		<field name="CENOFF" since="29"/>
-		<field name="CENSIG" since="29"/>
-		<field name="CENSIZ" since="29"/>
-		<field name="CENTIM" since="29"/>
-		<field name="CENVEM" since="29"/>
-		<field name="CENVER" since="29"/>
-		<field name="ENDCOM" since="29"/>
-		<field name="ENDHDR" since="29"/>
-		<field name="ENDOFF" since="29"/>
-		<field name="ENDSIG" since="29"/>
-		<field name="ENDSIZ" since="29"/>
-		<field name="ENDSUB" since="29"/>
-		<field name="ENDTOT" since="29"/>
-		<field name="EXTCRC" since="29"/>
-		<field name="EXTHDR" since="29"/>
-		<field name="EXTLEN" since="29"/>
-		<field name="EXTSIG" since="29"/>
-		<field name="EXTSIZ" since="29"/>
-		<field name="LOCCRC" since="29"/>
-		<field name="LOCEXT" since="29"/>
-		<field name="LOCFLG" since="29"/>
-		<field name="LOCHDR" since="29"/>
-		<field name="LOCHOW" since="29"/>
-		<field name="LOCLEN" since="29"/>
-		<field name="LOCNAM" since="29"/>
-		<field name="LOCSIG" since="29"/>
-		<field name="LOCSIZ" since="29"/>
-		<field name="LOCTIM" since="29"/>
-		<field name="LOCVER" since="29"/>
-		<field name="MANIFEST_NAME"/>
-	</class>
-	<class name="java/util/jar/JarInputStream" since="1">
-		<extends name="java/util/zip/ZipInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Z)V"/>
-		<method name="getManifest()Ljava/util/jar/Manifest;"/>
-		<method name="getNextJarEntry()Ljava/util/jar/JarEntry;"/>
-		<field name="CENATT" since="29"/>
-		<field name="CENATX" since="29"/>
-		<field name="CENCOM" since="29"/>
-		<field name="CENCRC" since="29"/>
-		<field name="CENDSK" since="29"/>
-		<field name="CENEXT" since="29"/>
-		<field name="CENFLG" since="29"/>
-		<field name="CENHDR" since="29"/>
-		<field name="CENHOW" since="29"/>
-		<field name="CENLEN" since="29"/>
-		<field name="CENNAM" since="29"/>
-		<field name="CENOFF" since="29"/>
-		<field name="CENSIG" since="29"/>
-		<field name="CENSIZ" since="29"/>
-		<field name="CENTIM" since="29"/>
-		<field name="CENVEM" since="29"/>
-		<field name="CENVER" since="29"/>
-		<field name="ENDCOM" since="29"/>
-		<field name="ENDHDR" since="29"/>
-		<field name="ENDOFF" since="29"/>
-		<field name="ENDSIG" since="29"/>
-		<field name="ENDSIZ" since="29"/>
-		<field name="ENDSUB" since="29"/>
-		<field name="ENDTOT" since="29"/>
-		<field name="EXTCRC" since="29"/>
-		<field name="EXTHDR" since="29"/>
-		<field name="EXTLEN" since="29"/>
-		<field name="EXTSIG" since="29"/>
-		<field name="EXTSIZ" since="29"/>
-		<field name="LOCCRC" since="29"/>
-		<field name="LOCEXT" since="29"/>
-		<field name="LOCFLG" since="29"/>
-		<field name="LOCHDR" since="29"/>
-		<field name="LOCHOW" since="29"/>
-		<field name="LOCLEN" since="29"/>
-		<field name="LOCNAM" since="29"/>
-		<field name="LOCSIG" since="29"/>
-		<field name="LOCSIZ" since="29"/>
-		<field name="LOCTIM" since="29"/>
-		<field name="LOCVER" since="29"/>
-	</class>
-	<class name="java/util/jar/JarOutputStream" since="1">
-		<extends name="java/util/zip/ZipOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/jar/Manifest;)V"/>
-		<field name="CENATT" since="29"/>
-		<field name="CENATX" since="29"/>
-		<field name="CENCOM" since="29"/>
-		<field name="CENCRC" since="29"/>
-		<field name="CENDSK" since="29"/>
-		<field name="CENEXT" since="29"/>
-		<field name="CENFLG" since="29"/>
-		<field name="CENHDR" since="29"/>
-		<field name="CENHOW" since="29"/>
-		<field name="CENLEN" since="29"/>
-		<field name="CENNAM" since="29"/>
-		<field name="CENOFF" since="29"/>
-		<field name="CENSIG" since="29"/>
-		<field name="CENSIZ" since="29"/>
-		<field name="CENTIM" since="29"/>
-		<field name="CENVEM" since="29"/>
-		<field name="CENVER" since="29"/>
-		<field name="ENDCOM" since="29"/>
-		<field name="ENDHDR" since="29"/>
-		<field name="ENDOFF" since="29"/>
-		<field name="ENDSIG" since="29"/>
-		<field name="ENDSIZ" since="29"/>
-		<field name="ENDSUB" since="29"/>
-		<field name="ENDTOT" since="29"/>
-		<field name="EXTCRC" since="29"/>
-		<field name="EXTHDR" since="29"/>
-		<field name="EXTLEN" since="29"/>
-		<field name="EXTSIG" since="29"/>
-		<field name="EXTSIZ" since="29"/>
-		<field name="LOCCRC" since="29"/>
-		<field name="LOCEXT" since="29"/>
-		<field name="LOCFLG" since="29"/>
-		<field name="LOCHDR" since="29"/>
-		<field name="LOCHOW" since="29"/>
-		<field name="LOCLEN" since="29"/>
-		<field name="LOCNAM" since="29"/>
-		<field name="LOCSIG" since="29"/>
-		<field name="LOCSIZ" since="29"/>
-		<field name="LOCTIM" since="29"/>
-		<field name="LOCVER" since="29"/>
-	</class>
-	<class name="java/util/jar/Manifest" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/util/jar/Manifest;)V"/>
-		<method name="clear()V"/>
-		<method name="getAttributes(Ljava/lang/String;)Ljava/util/jar/Attributes;"/>
-		<method name="getEntries()Ljava/util/Map;"/>
-		<method name="getMainAttributes()Ljava/util/jar/Attributes;"/>
-		<method name="read(Ljava/io/InputStream;)V"/>
-		<method name="write(Ljava/io/OutputStream;)V"/>
-	</class>
-	<class name="java/util/jar/Pack200" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="newPacker()Ljava/util/jar/Pack200$Packer;"/>
-		<method name="newUnpacker()Ljava/util/jar/Pack200$Unpacker;"/>
-	</class>
-	<class name="java/util/jar/Pack200$Packer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
-		<method name="pack(Ljava/util/jar/JarFile;Ljava/io/OutputStream;)V"/>
-		<method name="pack(Ljava/util/jar/JarInputStream;Ljava/io/OutputStream;)V"/>
-		<method name="properties()Ljava/util/SortedMap;"/>
-		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
-		<field name="CLASS_ATTRIBUTE_PFX"/>
-		<field name="CODE_ATTRIBUTE_PFX"/>
-		<field name="DEFLATE_HINT"/>
-		<field name="EFFORT"/>
-		<field name="ERROR"/>
-		<field name="FALSE"/>
-		<field name="FIELD_ATTRIBUTE_PFX"/>
-		<field name="KEEP"/>
-		<field name="KEEP_FILE_ORDER"/>
-		<field name="LATEST"/>
-		<field name="METHOD_ATTRIBUTE_PFX"/>
-		<field name="MODIFICATION_TIME"/>
-		<field name="PASS"/>
-		<field name="PASS_FILE_PFX"/>
-		<field name="PROGRESS"/>
-		<field name="SEGMENT_LIMIT"/>
-		<field name="STRIP"/>
-		<field name="TRUE"/>
-		<field name="UNKNOWN_ATTRIBUTE"/>
-	</class>
-	<class name="java/util/jar/Pack200$Unpacker" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
-		<method name="properties()Ljava/util/SortedMap;"/>
-		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
-		<method name="unpack(Ljava/io/File;Ljava/util/jar/JarOutputStream;)V"/>
-		<method name="unpack(Ljava/io/InputStream;Ljava/util/jar/JarOutputStream;)V"/>
-		<field name="DEFLATE_HINT"/>
-		<field name="FALSE"/>
-		<field name="KEEP"/>
-		<field name="PROGRESS"/>
-		<field name="TRUE"/>
-	</class>
-	<class name="java/util/logging/ConsoleHandler" since="1">
-		<extends name="java/util/logging/StreamHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/logging/ErrorManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="error(Ljava/lang/String;Ljava/lang/Exception;I)V"/>
-		<field name="CLOSE_FAILURE"/>
-		<field name="FLUSH_FAILURE"/>
-		<field name="FORMAT_FAILURE"/>
-		<field name="GENERIC_FAILURE"/>
-		<field name="OPEN_FAILURE"/>
-		<field name="WRITE_FAILURE"/>
-	</class>
-	<class name="java/util/logging/FileHandler" since="1">
-		<extends name="java/util/logging/StreamHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;II)V"/>
-		<method name="&lt;init>(Ljava/lang/String;IIZ)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-	</class>
-	<class name="java/util/logging/Filter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="isLoggable(Ljava/util/logging/LogRecord;)Z"/>
-	</class>
-	<class name="java/util/logging/Formatter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/util/logging/LogRecord;)Ljava/lang/String;"/>
-		<method name="formatMessage(Ljava/util/logging/LogRecord;)Ljava/lang/String;"/>
-		<method name="getHead(Ljava/util/logging/Handler;)Ljava/lang/String;"/>
-		<method name="getTail(Ljava/util/logging/Handler;)Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/logging/Handler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="close()V"/>
-		<method name="flush()V"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-		<method name="getErrorManager()Ljava/util/logging/ErrorManager;"/>
-		<method name="getFilter()Ljava/util/logging/Filter;"/>
-		<method name="getFormatter()Ljava/util/logging/Formatter;"/>
-		<method name="getLevel()Ljava/util/logging/Level;"/>
-		<method name="isLoggable(Ljava/util/logging/LogRecord;)Z"/>
-		<method name="publish(Ljava/util/logging/LogRecord;)V"/>
-		<method name="reportError(Ljava/lang/String;Ljava/lang/Exception;I)V"/>
-		<method name="setEncoding(Ljava/lang/String;)V"/>
-		<method name="setErrorManager(Ljava/util/logging/ErrorManager;)V"/>
-		<method name="setFilter(Ljava/util/logging/Filter;)V"/>
-		<method name="setFormatter(Ljava/util/logging/Formatter;)V"/>
-		<method name="setLevel(Ljava/util/logging/Level;)V"/>
-	</class>
-	<class name="java/util/logging/Level" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="getLocalizedName()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getResourceBundleName()Ljava/lang/String;"/>
-		<method name="intValue()I"/>
-		<method name="parse(Ljava/lang/String;)Ljava/util/logging/Level;"/>
-		<field name="ALL"/>
-		<field name="CONFIG"/>
-		<field name="FINE"/>
-		<field name="FINER"/>
-		<field name="FINEST"/>
-		<field name="INFO"/>
-		<field name="OFF"/>
-		<field name="SEVERE"/>
-		<field name="WARNING"/>
-	</class>
-	<class name="java/util/logging/LogManager" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addLogger(Ljava/util/logging/Logger;)Z"/>
-		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
-		<method name="checkAccess()V"/>
-		<method name="getLogManager()Ljava/util/logging/LogManager;"/>
-		<method name="getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;"/>
-		<method name="getLoggerNames()Ljava/util/Enumeration;"/>
-		<method name="getLoggingMXBean()Ljava/util/logging/LoggingMXBean;" since="3"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="readConfiguration()V"/>
-		<method name="readConfiguration(Ljava/io/InputStream;)V"/>
-		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
-		<method name="reset()V"/>
-		<field name="LOGGING_MXBEAN_NAME"/>
-	</class>
-	<class name="java/util/logging/LogRecord" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/util/logging/Level;Ljava/lang/String;)V"/>
-		<method name="getLevel()Ljava/util/logging/Level;"/>
-		<method name="getLoggerName()Ljava/lang/String;"/>
-		<method name="getMessage()Ljava/lang/String;"/>
-		<method name="getMillis()J"/>
-		<method name="getParameters()[Ljava/lang/Object;"/>
-		<method name="getResourceBundle()Ljava/util/ResourceBundle;"/>
-		<method name="getResourceBundleName()Ljava/lang/String;"/>
-		<method name="getSequenceNumber()J"/>
-		<method name="getSourceClassName()Ljava/lang/String;"/>
-		<method name="getSourceMethodName()Ljava/lang/String;"/>
-		<method name="getThreadID()I"/>
-		<method name="getThrown()Ljava/lang/Throwable;"/>
-		<method name="setLevel(Ljava/util/logging/Level;)V"/>
-		<method name="setLoggerName(Ljava/lang/String;)V"/>
-		<method name="setMessage(Ljava/lang/String;)V"/>
-		<method name="setMillis(J)V"/>
-		<method name="setParameters([Ljava/lang/Object;)V"/>
-		<method name="setResourceBundle(Ljava/util/ResourceBundle;)V"/>
-		<method name="setResourceBundleName(Ljava/lang/String;)V"/>
-		<method name="setSequenceNumber(J)V"/>
-		<method name="setSourceClassName(Ljava/lang/String;)V"/>
-		<method name="setSourceMethodName(Ljava/lang/String;)V"/>
-		<method name="setThreadID(I)V"/>
-		<method name="setThrown(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/logging/Logger" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="addHandler(Ljava/util/logging/Handler;)V"/>
-		<method name="config(Ljava/lang/String;)V"/>
-		<method name="config(Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="entering(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="entering(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="entering(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V"/>
-		<method name="exiting(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="exiting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="fine(Ljava/lang/String;)V"/>
-		<method name="fine(Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="finer(Ljava/lang/String;)V"/>
-		<method name="finer(Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="finest(Ljava/lang/String;)V"/>
-		<method name="finest(Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="getAnonymousLogger()Ljava/util/logging/Logger;"/>
-		<method name="getAnonymousLogger(Ljava/lang/String;)Ljava/util/logging/Logger;"/>
-		<method name="getFilter()Ljava/util/logging/Filter;"/>
-		<method name="getGlobal()Ljava/util/logging/Logger;" since="19"/>
-		<method name="getHandlers()[Ljava/util/logging/Handler;"/>
-		<method name="getLevel()Ljava/util/logging/Level;"/>
-		<method name="getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;"/>
-		<method name="getLogger(Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getParent()Ljava/util/logging/Logger;"/>
-		<method name="getResourceBundle()Ljava/util/ResourceBundle;"/>
-		<method name="getResourceBundleName()Ljava/lang/String;"/>
-		<method name="getUseParentHandlers()Z"/>
-		<method name="info(Ljava/lang/String;)V"/>
-		<method name="info(Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="isLoggable(Ljava/util/logging/Level;)Z"/>
-		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;)V"/>
-		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V"/>
-		<method name="log(Ljava/util/logging/Level;Ljava/lang/Throwable;Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="log(Ljava/util/logging/Level;Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="log(Ljava/util/logging/LogRecord;)V"/>
-		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V"/>
-		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="26"/>
-		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V" deprecated="26"/>
-		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" deprecated="26"/>
-		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V" deprecated="26"/>
-		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/ResourceBundle;Ljava/lang/String;Ljava/lang/Throwable;)V" since="26"/>
-		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/ResourceBundle;Ljava/lang/String;[Ljava/lang/Object;)V" since="26"/>
-		<method name="removeHandler(Ljava/util/logging/Handler;)V"/>
-		<method name="setFilter(Ljava/util/logging/Filter;)V"/>
-		<method name="setLevel(Ljava/util/logging/Level;)V"/>
-		<method name="setParent(Ljava/util/logging/Logger;)V"/>
-		<method name="setResourceBundle(Ljava/util/ResourceBundle;)V" since="26"/>
-		<method name="setUseParentHandlers(Z)V"/>
-		<method name="severe(Ljava/lang/String;)V"/>
-		<method name="severe(Ljava/util/function/Supplier;)V" since="26"/>
-		<method name="throwing(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="warning(Ljava/lang/String;)V"/>
-		<method name="warning(Ljava/util/function/Supplier;)V" since="26"/>
-		<field name="GLOBAL_LOGGER_NAME" since="9"/>
-		<field name="global" deprecated="16"/>
-	</class>
-	<class name="java/util/logging/LoggingMXBean" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getLoggerLevel(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getLoggerNames()Ljava/util/List;"/>
-		<method name="getParentLoggerName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="setLoggerLevel(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/logging/LoggingPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/logging/MemoryHandler" since="1">
-		<extends name="java/util/logging/Handler"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/util/logging/Handler;ILjava/util/logging/Level;)V"/>
-		<method name="getPushLevel()Ljava/util/logging/Level;"/>
-		<method name="push()V"/>
-		<method name="setPushLevel(Ljava/util/logging/Level;)V"/>
-	</class>
-	<class name="java/util/logging/SimpleFormatter" since="1">
-		<extends name="java/util/logging/Formatter"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/logging/SocketHandler" since="1">
-		<extends name="java/util/logging/StreamHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-	</class>
-	<class name="java/util/logging/StreamHandler" since="1">
-		<extends name="java/util/logging/Handler"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/logging/Formatter;)V"/>
-		<method name="setOutputStream(Ljava/io/OutputStream;)V"/>
-	</class>
-	<class name="java/util/logging/XMLFormatter" since="1">
-		<extends name="java/util/logging/Formatter"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="java/util/prefs/AbstractPreferences" since="1">
-		<extends name="java/util/prefs/Preferences"/>
-		<method name="&lt;init>(Ljava/util/prefs/AbstractPreferences;Ljava/lang/String;)V"/>
-		<method name="cachedChildren()[Ljava/util/prefs/AbstractPreferences;"/>
-		<method name="childSpi(Ljava/lang/String;)Ljava/util/prefs/AbstractPreferences;"/>
-		<method name="childrenNamesSpi()[Ljava/lang/String;"/>
-		<method name="flushSpi()V"/>
-		<method name="getChild(Ljava/lang/String;)Ljava/util/prefs/AbstractPreferences;"/>
-		<method name="getSpi(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="isRemoved()Z"/>
-		<method name="keysSpi()[Ljava/lang/String;"/>
-		<method name="putSpi(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="removeNodeSpi()V"/>
-		<method name="removeSpi(Ljava/lang/String;)V"/>
-		<method name="syncSpi()V"/>
-		<field name="lock"/>
-		<field name="newNode"/>
-	</class>
-	<class name="java/util/prefs/BackingStoreException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/prefs/InvalidPreferencesFormatException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="java/util/prefs/NodeChangeEvent" since="1">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljava/util/prefs/Preferences;Ljava/util/prefs/Preferences;)V"/>
-		<method name="getChild()Ljava/util/prefs/Preferences;"/>
-		<method name="getParent()Ljava/util/prefs/Preferences;"/>
-	</class>
-	<class name="java/util/prefs/NodeChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="childAdded(Ljava/util/prefs/NodeChangeEvent;)V"/>
-		<method name="childRemoved(Ljava/util/prefs/NodeChangeEvent;)V"/>
-	</class>
-	<class name="java/util/prefs/PreferenceChangeEvent" since="1">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljava/util/prefs/Preferences;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getKey()Ljava/lang/String;"/>
-		<method name="getNewValue()Ljava/lang/String;"/>
-		<method name="getNode()Ljava/util/prefs/Preferences;"/>
-	</class>
-	<class name="java/util/prefs/PreferenceChangeListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="preferenceChange(Ljava/util/prefs/PreferenceChangeEvent;)V"/>
-	</class>
-	<class name="java/util/prefs/Preferences" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="absolutePath()Ljava/lang/String;"/>
-		<method name="addNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V"/>
-		<method name="addPreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V"/>
-		<method name="childrenNames()[Ljava/lang/String;"/>
-		<method name="clear()V"/>
-		<method name="exportNode(Ljava/io/OutputStream;)V"/>
-		<method name="exportSubtree(Ljava/io/OutputStream;)V"/>
-		<method name="flush()V"/>
-		<method name="get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getBoolean(Ljava/lang/String;Z)Z"/>
-		<method name="getByteArray(Ljava/lang/String;[B)[B"/>
-		<method name="getDouble(Ljava/lang/String;D)D"/>
-		<method name="getFloat(Ljava/lang/String;F)F"/>
-		<method name="getInt(Ljava/lang/String;I)I"/>
-		<method name="getLong(Ljava/lang/String;J)J"/>
-		<method name="importPreferences(Ljava/io/InputStream;)V"/>
-		<method name="isUserNode()Z"/>
-		<method name="keys()[Ljava/lang/String;"/>
-		<method name="name()Ljava/lang/String;"/>
-		<method name="node(Ljava/lang/String;)Ljava/util/prefs/Preferences;"/>
-		<method name="nodeExists(Ljava/lang/String;)Z"/>
-		<method name="parent()Ljava/util/prefs/Preferences;"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="putBoolean(Ljava/lang/String;Z)V"/>
-		<method name="putByteArray(Ljava/lang/String;[B)V"/>
-		<method name="putDouble(Ljava/lang/String;D)V"/>
-		<method name="putFloat(Ljava/lang/String;F)V"/>
-		<method name="putInt(Ljava/lang/String;I)V"/>
-		<method name="putLong(Ljava/lang/String;J)V"/>
-		<method name="remove(Ljava/lang/String;)V"/>
-		<method name="removeNode()V"/>
-		<method name="removeNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V"/>
-		<method name="removePreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V"/>
-		<method name="sync()V"/>
-		<method name="systemNodeForPackage(Ljava/lang/Class;)Ljava/util/prefs/Preferences;"/>
-		<method name="systemRoot()Ljava/util/prefs/Preferences;"/>
-		<method name="userNodeForPackage(Ljava/lang/Class;)Ljava/util/prefs/Preferences;"/>
-		<method name="userRoot()Ljava/util/prefs/Preferences;"/>
-		<field name="MAX_KEY_LENGTH"/>
-		<field name="MAX_NAME_LENGTH"/>
-		<field name="MAX_VALUE_LENGTH"/>
-	</class>
-	<class name="java/util/prefs/PreferencesFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="systemRoot()Ljava/util/prefs/Preferences;"/>
-		<method name="userRoot()Ljava/util/prefs/Preferences;"/>
-	</class>
-	<class name="java/util/regex/MatchResult" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="end()I"/>
-		<method name="end(I)I"/>
-		<method name="group()Ljava/lang/String;"/>
-		<method name="group(I)Ljava/lang/String;"/>
-		<method name="groupCount()I"/>
-		<method name="start()I"/>
-		<method name="start(I)I"/>
-	</class>
-	<class name="java/util/regex/Matcher" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/regex/MatchResult"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/util/regex/Pattern;Ljava/lang/CharSequence;)V" since="29"/>
-		<method name="appendReplacement(Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher;"/>
-		<method name="appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;"/>
-		<method name="end(Ljava/lang/String;)I" since="26"/>
-		<method name="find()Z"/>
-		<method name="find(I)Z"/>
-		<method name="group(Ljava/lang/String;)Ljava/lang/String;" since="26"/>
-		<method name="hasAnchoringBounds()Z"/>
-		<method name="hasTransparentBounds()Z"/>
-		<method name="hitEnd()Z"/>
-		<method name="lookingAt()Z"/>
-		<method name="matches()Z"/>
-		<method name="pattern()Ljava/util/regex/Pattern;"/>
-		<method name="quoteReplacement(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="region(II)Ljava/util/regex/Matcher;"/>
-		<method name="regionEnd()I"/>
-		<method name="regionStart()I"/>
-		<method name="replaceAll(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="replaceFirst(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="requireEnd()Z"/>
-		<method name="reset()Ljava/util/regex/Matcher;"/>
-		<method name="reset(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;"/>
-		<method name="start(Ljava/lang/String;)I" since="26"/>
-		<method name="toMatchResult()Ljava/util/regex/MatchResult;"/>
-		<method name="useAnchoringBounds(Z)Ljava/util/regex/Matcher;"/>
-		<method name="usePattern(Ljava/util/regex/Pattern;)Ljava/util/regex/Matcher;"/>
-		<method name="useTransparentBounds(Z)Ljava/util/regex/Matcher;"/>
-	</class>
-	<class name="java/util/regex/Pattern" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
-		<method name="asPredicate()Ljava/util/function/Predicate;" since="24"/>
-		<method name="compile(Ljava/lang/String;)Ljava/util/regex/Pattern;"/>
-		<method name="compile(Ljava/lang/String;I)Ljava/util/regex/Pattern;"/>
-		<method name="flags()I"/>
-		<method name="matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;"/>
-		<method name="matches(Ljava/lang/String;Ljava/lang/CharSequence;)Z"/>
-		<method name="pattern()Ljava/lang/String;"/>
-		<method name="quote(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="split(Ljava/lang/CharSequence;)[Ljava/lang/String;"/>
-		<method name="split(Ljava/lang/CharSequence;I)[Ljava/lang/String;"/>
-		<method name="splitAsStream(Ljava/lang/CharSequence;)Ljava/util/stream/Stream;" since="24"/>
-		<field name="CANON_EQ"/>
-		<field name="CASE_INSENSITIVE"/>
-		<field name="COMMENTS"/>
-		<field name="DOTALL"/>
-		<field name="LITERAL"/>
-		<field name="MULTILINE"/>
-		<field name="UNICODE_CASE"/>
-		<field name="UNICODE_CHARACTER_CLASS" since="24"/>
-		<field name="UNIX_LINES"/>
-	</class>
-	<class name="java/util/regex/PatternSyntaxException" since="1">
-		<extends name="java/lang/IllegalArgumentException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
-		<method name="getDescription()Ljava/lang/String;"/>
-		<method name="getIndex()I"/>
-		<method name="getPattern()Ljava/lang/String;"/>
-	</class>
-	<class name="java/util/stream/BaseStream" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/AutoCloseable"/>
-		<method name="isParallel()Z"/>
-		<method name="iterator()Ljava/util/Iterator;"/>
-		<method name="onClose(Ljava/lang/Runnable;)Ljava/util/stream/BaseStream;"/>
-		<method name="parallel()Ljava/util/stream/BaseStream;"/>
-		<method name="sequential()Ljava/util/stream/BaseStream;"/>
-		<method name="spliterator()Ljava/util/Spliterator;"/>
-		<method name="unordered()Ljava/util/stream/BaseStream;"/>
-	</class>
-	<class name="java/util/stream/Collector" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="accumulator()Ljava/util/function/BiConsumer;"/>
-		<method name="characteristics()Ljava/util/Set;"/>
-		<method name="combiner()Ljava/util/function/BinaryOperator;"/>
-		<method name="finisher()Ljava/util/function/Function;"/>
-		<method name="of(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;Ljava/util/function/Function;[Ljava/util/stream/Collector$Characteristics;)Ljava/util/stream/Collector;"/>
-		<method name="of(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;[Ljava/util/stream/Collector$Characteristics;)Ljava/util/stream/Collector;"/>
-		<method name="supplier()Ljava/util/function/Supplier;"/>
-	</class>
-	<class name="java/util/stream/Collector$Characteristics" since="24">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljava/util/stream/Collector$Characteristics;"/>
-		<method name="values()[Ljava/util/stream/Collector$Characteristics;"/>
-		<field name="CONCURRENT"/>
-		<field name="IDENTITY_FINISH"/>
-		<field name="UNORDERED"/>
-	</class>
-	<class name="java/util/stream/Collectors" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="averagingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;"/>
-		<method name="averagingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;"/>
-		<method name="averagingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;"/>
-		<method name="collectingAndThen(Ljava/util/stream/Collector;Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
-		<method name="counting()Ljava/util/stream/Collector;"/>
-		<method name="groupingBy(Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
-		<method name="groupingBy(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
-		<method name="groupingBy(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
-		<method name="groupingByConcurrent(Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
-		<method name="groupingByConcurrent(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
-		<method name="groupingByConcurrent(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
-		<method name="joining()Ljava/util/stream/Collector;"/>
-		<method name="joining(Ljava/lang/CharSequence;)Ljava/util/stream/Collector;"/>
-		<method name="joining(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/stream/Collector;"/>
-		<method name="mapping(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
-		<method name="maxBy(Ljava/util/Comparator;)Ljava/util/stream/Collector;"/>
-		<method name="minBy(Ljava/util/Comparator;)Ljava/util/stream/Collector;"/>
-		<method name="partitioningBy(Ljava/util/function/Predicate;)Ljava/util/stream/Collector;"/>
-		<method name="partitioningBy(Ljava/util/function/Predicate;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
-		<method name="reducing(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
-		<method name="reducing(Ljava/lang/Object;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
-		<method name="reducing(Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
-		<method name="summarizingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;"/>
-		<method name="summarizingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;"/>
-		<method name="summarizingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;"/>
-		<method name="summingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;"/>
-		<method name="summingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;"/>
-		<method name="summingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;"/>
-		<method name="toCollection(Ljava/util/function/Supplier;)Ljava/util/stream/Collector;"/>
-		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
-		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
-		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;"/>
-		<method name="toList()Ljava/util/stream/Collector;"/>
-		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
-		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
-		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;"/>
-		<method name="toSet()Ljava/util/stream/Collector;"/>
-	</class>
-	<class name="java/util/stream/DoubleStream" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/stream/BaseStream"/>
-		<method name="allMatch(Ljava/util/function/DoublePredicate;)Z"/>
-		<method name="anyMatch(Ljava/util/function/DoublePredicate;)Z"/>
-		<method name="average()Ljava/util/OptionalDouble;"/>
-		<method name="boxed()Ljava/util/stream/Stream;"/>
-		<method name="builder()Ljava/util/stream/DoubleStream$Builder;"/>
-		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjDoubleConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
-		<method name="concat(Ljava/util/stream/DoubleStream;Ljava/util/stream/DoubleStream;)Ljava/util/stream/DoubleStream;"/>
-		<method name="count()J"/>
-		<method name="distinct()Ljava/util/stream/DoubleStream;"/>
-		<method name="empty()Ljava/util/stream/DoubleStream;"/>
-		<method name="filter(Ljava/util/function/DoublePredicate;)Ljava/util/stream/DoubleStream;"/>
-		<method name="findAny()Ljava/util/OptionalDouble;"/>
-		<method name="findFirst()Ljava/util/OptionalDouble;"/>
-		<method name="flatMap(Ljava/util/function/DoubleFunction;)Ljava/util/stream/DoubleStream;"/>
-		<method name="forEach(Ljava/util/function/DoubleConsumer;)V"/>
-		<method name="forEachOrdered(Ljava/util/function/DoubleConsumer;)V"/>
-		<method name="generate(Ljava/util/function/DoubleSupplier;)Ljava/util/stream/DoubleStream;"/>
-		<method name="iterate(DLjava/util/function/DoubleUnaryOperator;)Ljava/util/stream/DoubleStream;"/>
-		<method name="iterator()Ljava/util/PrimitiveIterator$OfDouble;"/>
-		<method name="limit(J)Ljava/util/stream/DoubleStream;"/>
-		<method name="map(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/stream/DoubleStream;"/>
-		<method name="mapToInt(Ljava/util/function/DoubleToIntFunction;)Ljava/util/stream/IntStream;"/>
-		<method name="mapToLong(Ljava/util/function/DoubleToLongFunction;)Ljava/util/stream/LongStream;"/>
-		<method name="mapToObj(Ljava/util/function/DoubleFunction;)Ljava/util/stream/Stream;"/>
-		<method name="max()Ljava/util/OptionalDouble;"/>
-		<method name="min()Ljava/util/OptionalDouble;"/>
-		<method name="noneMatch(Ljava/util/function/DoublePredicate;)Z"/>
-		<method name="of(D)Ljava/util/stream/DoubleStream;"/>
-		<method name="of([D)Ljava/util/stream/DoubleStream;"/>
-		<method name="parallel()Ljava/util/stream/DoubleStream;"/>
-		<method name="peek(Ljava/util/function/DoubleConsumer;)Ljava/util/stream/DoubleStream;"/>
-		<method name="reduce(DLjava/util/function/DoubleBinaryOperator;)D"/>
-		<method name="reduce(Ljava/util/function/DoubleBinaryOperator;)Ljava/util/OptionalDouble;"/>
-		<method name="sequential()Ljava/util/stream/DoubleStream;"/>
-		<method name="skip(J)Ljava/util/stream/DoubleStream;"/>
-		<method name="sorted()Ljava/util/stream/DoubleStream;"/>
-		<method name="spliterator()Ljava/util/Spliterator$OfDouble;"/>
-		<method name="sum()D"/>
-		<method name="summaryStatistics()Ljava/util/DoubleSummaryStatistics;"/>
-		<method name="toArray()[D"/>
-	</class>
-	<class name="java/util/stream/DoubleStream$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/DoubleConsumer"/>
-		<method name="add(D)Ljava/util/stream/DoubleStream$Builder;"/>
-		<method name="build()Ljava/util/stream/DoubleStream;"/>
-	</class>
-	<class name="java/util/stream/IntStream" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/stream/BaseStream"/>
-		<method name="allMatch(Ljava/util/function/IntPredicate;)Z"/>
-		<method name="anyMatch(Ljava/util/function/IntPredicate;)Z"/>
-		<method name="asDoubleStream()Ljava/util/stream/DoubleStream;"/>
-		<method name="asLongStream()Ljava/util/stream/LongStream;"/>
-		<method name="average()Ljava/util/OptionalDouble;"/>
-		<method name="boxed()Ljava/util/stream/Stream;"/>
-		<method name="builder()Ljava/util/stream/IntStream$Builder;"/>
-		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjIntConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
-		<method name="concat(Ljava/util/stream/IntStream;Ljava/util/stream/IntStream;)Ljava/util/stream/IntStream;"/>
-		<method name="count()J"/>
-		<method name="distinct()Ljava/util/stream/IntStream;"/>
-		<method name="empty()Ljava/util/stream/IntStream;"/>
-		<method name="filter(Ljava/util/function/IntPredicate;)Ljava/util/stream/IntStream;"/>
-		<method name="findAny()Ljava/util/OptionalInt;"/>
-		<method name="findFirst()Ljava/util/OptionalInt;"/>
-		<method name="flatMap(Ljava/util/function/IntFunction;)Ljava/util/stream/IntStream;"/>
-		<method name="forEach(Ljava/util/function/IntConsumer;)V"/>
-		<method name="forEachOrdered(Ljava/util/function/IntConsumer;)V"/>
-		<method name="generate(Ljava/util/function/IntSupplier;)Ljava/util/stream/IntStream;"/>
-		<method name="iterate(ILjava/util/function/IntUnaryOperator;)Ljava/util/stream/IntStream;"/>
-		<method name="iterator()Ljava/util/PrimitiveIterator$OfInt;"/>
-		<method name="limit(J)Ljava/util/stream/IntStream;"/>
-		<method name="map(Ljava/util/function/IntUnaryOperator;)Ljava/util/stream/IntStream;"/>
-		<method name="mapToDouble(Ljava/util/function/IntToDoubleFunction;)Ljava/util/stream/DoubleStream;"/>
-		<method name="mapToLong(Ljava/util/function/IntToLongFunction;)Ljava/util/stream/LongStream;"/>
-		<method name="mapToObj(Ljava/util/function/IntFunction;)Ljava/util/stream/Stream;"/>
-		<method name="max()Ljava/util/OptionalInt;"/>
-		<method name="min()Ljava/util/OptionalInt;"/>
-		<method name="noneMatch(Ljava/util/function/IntPredicate;)Z"/>
-		<method name="of(I)Ljava/util/stream/IntStream;"/>
-		<method name="of([I)Ljava/util/stream/IntStream;"/>
-		<method name="parallel()Ljava/util/stream/IntStream;"/>
-		<method name="peek(Ljava/util/function/IntConsumer;)Ljava/util/stream/IntStream;"/>
-		<method name="range(II)Ljava/util/stream/IntStream;"/>
-		<method name="rangeClosed(II)Ljava/util/stream/IntStream;"/>
-		<method name="reduce(ILjava/util/function/IntBinaryOperator;)I"/>
-		<method name="reduce(Ljava/util/function/IntBinaryOperator;)Ljava/util/OptionalInt;"/>
-		<method name="sequential()Ljava/util/stream/IntStream;"/>
-		<method name="skip(J)Ljava/util/stream/IntStream;"/>
-		<method name="sorted()Ljava/util/stream/IntStream;"/>
-		<method name="spliterator()Ljava/util/Spliterator$OfInt;"/>
-		<method name="sum()I"/>
-		<method name="summaryStatistics()Ljava/util/IntSummaryStatistics;"/>
-		<method name="toArray()[I"/>
-	</class>
-	<class name="java/util/stream/IntStream$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/IntConsumer"/>
-		<method name="add(I)Ljava/util/stream/IntStream$Builder;"/>
-		<method name="build()Ljava/util/stream/IntStream;"/>
-	</class>
-	<class name="java/util/stream/LongStream" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/stream/BaseStream"/>
-		<method name="allMatch(Ljava/util/function/LongPredicate;)Z"/>
-		<method name="anyMatch(Ljava/util/function/LongPredicate;)Z"/>
-		<method name="asDoubleStream()Ljava/util/stream/DoubleStream;"/>
-		<method name="average()Ljava/util/OptionalDouble;"/>
-		<method name="boxed()Ljava/util/stream/Stream;"/>
-		<method name="builder()Ljava/util/stream/LongStream$Builder;"/>
-		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjLongConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
-		<method name="concat(Ljava/util/stream/LongStream;Ljava/util/stream/LongStream;)Ljava/util/stream/LongStream;"/>
-		<method name="count()J"/>
-		<method name="distinct()Ljava/util/stream/LongStream;"/>
-		<method name="empty()Ljava/util/stream/LongStream;"/>
-		<method name="filter(Ljava/util/function/LongPredicate;)Ljava/util/stream/LongStream;"/>
-		<method name="findAny()Ljava/util/OptionalLong;"/>
-		<method name="findFirst()Ljava/util/OptionalLong;"/>
-		<method name="flatMap(Ljava/util/function/LongFunction;)Ljava/util/stream/LongStream;"/>
-		<method name="forEach(Ljava/util/function/LongConsumer;)V"/>
-		<method name="forEachOrdered(Ljava/util/function/LongConsumer;)V"/>
-		<method name="generate(Ljava/util/function/LongSupplier;)Ljava/util/stream/LongStream;"/>
-		<method name="iterate(JLjava/util/function/LongUnaryOperator;)Ljava/util/stream/LongStream;"/>
-		<method name="iterator()Ljava/util/PrimitiveIterator$OfLong;"/>
-		<method name="limit(J)Ljava/util/stream/LongStream;"/>
-		<method name="map(Ljava/util/function/LongUnaryOperator;)Ljava/util/stream/LongStream;"/>
-		<method name="mapToDouble(Ljava/util/function/LongToDoubleFunction;)Ljava/util/stream/DoubleStream;"/>
-		<method name="mapToInt(Ljava/util/function/LongToIntFunction;)Ljava/util/stream/IntStream;"/>
-		<method name="mapToObj(Ljava/util/function/LongFunction;)Ljava/util/stream/Stream;"/>
-		<method name="max()Ljava/util/OptionalLong;"/>
-		<method name="min()Ljava/util/OptionalLong;"/>
-		<method name="noneMatch(Ljava/util/function/LongPredicate;)Z"/>
-		<method name="of(J)Ljava/util/stream/LongStream;"/>
-		<method name="of([J)Ljava/util/stream/LongStream;"/>
-		<method name="parallel()Ljava/util/stream/LongStream;"/>
-		<method name="peek(Ljava/util/function/LongConsumer;)Ljava/util/stream/LongStream;"/>
-		<method name="range(JJ)Ljava/util/stream/LongStream;"/>
-		<method name="rangeClosed(JJ)Ljava/util/stream/LongStream;"/>
-		<method name="reduce(JLjava/util/function/LongBinaryOperator;)J"/>
-		<method name="reduce(Ljava/util/function/LongBinaryOperator;)Ljava/util/OptionalLong;"/>
-		<method name="sequential()Ljava/util/stream/LongStream;"/>
-		<method name="skip(J)Ljava/util/stream/LongStream;"/>
-		<method name="sorted()Ljava/util/stream/LongStream;"/>
-		<method name="spliterator()Ljava/util/Spliterator$OfLong;"/>
-		<method name="sum()J"/>
-		<method name="summaryStatistics()Ljava/util/LongSummaryStatistics;"/>
-		<method name="toArray()[J"/>
-	</class>
-	<class name="java/util/stream/LongStream$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/LongConsumer"/>
-		<method name="add(J)Ljava/util/stream/LongStream$Builder;"/>
-		<method name="build()Ljava/util/stream/LongStream;"/>
-	</class>
-	<class name="java/util/stream/Stream" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/stream/BaseStream"/>
-		<method name="allMatch(Ljava/util/function/Predicate;)Z"/>
-		<method name="anyMatch(Ljava/util/function/Predicate;)Z"/>
-		<method name="builder()Ljava/util/stream/Stream$Builder;"/>
-		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
-		<method name="collect(Ljava/util/stream/Collector;)Ljava/lang/Object;"/>
-		<method name="concat(Ljava/util/stream/Stream;Ljava/util/stream/Stream;)Ljava/util/stream/Stream;"/>
-		<method name="count()J"/>
-		<method name="distinct()Ljava/util/stream/Stream;"/>
-		<method name="empty()Ljava/util/stream/Stream;"/>
-		<method name="filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;"/>
-		<method name="findAny()Ljava/util/Optional;"/>
-		<method name="findFirst()Ljava/util/Optional;"/>
-		<method name="flatMap(Ljava/util/function/Function;)Ljava/util/stream/Stream;"/>
-		<method name="flatMapToDouble(Ljava/util/function/Function;)Ljava/util/stream/DoubleStream;"/>
-		<method name="flatMapToInt(Ljava/util/function/Function;)Ljava/util/stream/IntStream;"/>
-		<method name="flatMapToLong(Ljava/util/function/Function;)Ljava/util/stream/LongStream;"/>
-		<method name="forEach(Ljava/util/function/Consumer;)V"/>
-		<method name="forEachOrdered(Ljava/util/function/Consumer;)V"/>
-		<method name="generate(Ljava/util/function/Supplier;)Ljava/util/stream/Stream;"/>
-		<method name="iterate(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/util/stream/Stream;"/>
-		<method name="limit(J)Ljava/util/stream/Stream;"/>
-		<method name="map(Ljava/util/function/Function;)Ljava/util/stream/Stream;"/>
-		<method name="mapToDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/DoubleStream;"/>
-		<method name="mapToInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/IntStream;"/>
-		<method name="mapToLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/LongStream;"/>
-		<method name="max(Ljava/util/Comparator;)Ljava/util/Optional;"/>
-		<method name="min(Ljava/util/Comparator;)Ljava/util/Optional;"/>
-		<method name="noneMatch(Ljava/util/function/Predicate;)Z"/>
-		<method name="of(Ljava/lang/Object;)Ljava/util/stream/Stream;"/>
-		<method name="of([Ljava/lang/Object;)Ljava/util/stream/Stream;"/>
-		<method name="peek(Ljava/util/function/Consumer;)Ljava/util/stream/Stream;"/>
-		<method name="reduce(Ljava/lang/Object;Ljava/util/function/BiFunction;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;"/>
-		<method name="reduce(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;"/>
-		<method name="reduce(Ljava/util/function/BinaryOperator;)Ljava/util/Optional;"/>
-		<method name="skip(J)Ljava/util/stream/Stream;"/>
-		<method name="sorted()Ljava/util/stream/Stream;"/>
-		<method name="sorted(Ljava/util/Comparator;)Ljava/util/stream/Stream;"/>
-		<method name="toArray()[Ljava/lang/Object;"/>
-		<method name="toArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;"/>
-	</class>
-	<class name="java/util/stream/Stream$Builder" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/function/Consumer"/>
-		<method name="add(Ljava/lang/Object;)Ljava/util/stream/Stream$Builder;"/>
-		<method name="build()Ljava/util/stream/Stream;"/>
-	</class>
-	<class name="java/util/stream/StreamSupport" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="doubleStream(Ljava/util/Spliterator$OfDouble;Z)Ljava/util/stream/DoubleStream;"/>
-		<method name="doubleStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/DoubleStream;"/>
-		<method name="intStream(Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream;"/>
-		<method name="intStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/IntStream;"/>
-		<method name="longStream(Ljava/util/Spliterator$OfLong;Z)Ljava/util/stream/LongStream;"/>
-		<method name="longStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/LongStream;"/>
-		<method name="stream(Ljava/util/Spliterator;Z)Ljava/util/stream/Stream;"/>
-		<method name="stream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/Stream;"/>
-	</class>
-	<class name="java/util/zip/Adler32" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/zip/Checksum"/>
-		<method name="&lt;init>()V"/>
-		<method name="update(Ljava/nio/ByteBuffer;)V" since="26"/>
-		<method name="update([B)V"/>
-	</class>
-	<class name="java/util/zip/CRC32" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/zip/Checksum"/>
-		<method name="&lt;init>()V"/>
-		<method name="update(Ljava/nio/ByteBuffer;)V" since="26"/>
-		<method name="update([B)V"/>
-	</class>
-	<class name="java/util/zip/CheckedInputStream" since="1">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Checksum;)V"/>
-		<method name="getChecksum()Ljava/util/zip/Checksum;"/>
-	</class>
-	<class name="java/util/zip/CheckedOutputStream" since="1">
-		<extends name="java/io/FilterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Checksum;)V"/>
-		<method name="getChecksum()Ljava/util/zip/Checksum;"/>
-	</class>
-	<class name="java/util/zip/Checksum" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getValue()J"/>
-		<method name="reset()V"/>
-		<method name="update(I)V"/>
-		<method name="update([BII)V"/>
-	</class>
-	<class name="java/util/zip/DataFormatException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/zip/Deflater" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(IZ)V"/>
-		<method name="deflate([B)I"/>
-		<method name="deflate([BII)I"/>
-		<method name="deflate([BIII)I" since="19"/>
-		<method name="end()V"/>
-		<method name="finish()V"/>
-		<method name="finished()Z"/>
-		<method name="getAdler()I"/>
-		<method name="getBytesRead()J"/>
-		<method name="getBytesWritten()J"/>
-		<method name="getTotalIn()I"/>
-		<method name="getTotalOut()I"/>
-		<method name="needsInput()Z"/>
-		<method name="reset()V"/>
-		<method name="setDictionary([B)V"/>
-		<method name="setDictionary([BII)V"/>
-		<method name="setInput([B)V"/>
-		<method name="setInput([BII)V"/>
-		<method name="setLevel(I)V"/>
-		<method name="setStrategy(I)V"/>
-		<field name="BEST_COMPRESSION"/>
-		<field name="BEST_SPEED"/>
-		<field name="DEFAULT_COMPRESSION"/>
-		<field name="DEFAULT_STRATEGY"/>
-		<field name="DEFLATED"/>
-		<field name="FILTERED"/>
-		<field name="FULL_FLUSH" since="19"/>
-		<field name="HUFFMAN_ONLY"/>
-		<field name="NO_COMPRESSION"/>
-		<field name="NO_FLUSH" since="19"/>
-		<field name="SYNC_FLUSH" since="19"/>
-	</class>
-	<class name="java/util/zip/DeflaterInputStream" since="9">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Deflater;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Deflater;I)V"/>
-		<field name="buf"/>
-		<field name="def"/>
-	</class>
-	<class name="java/util/zip/DeflaterOutputStream" since="1">
-		<extends name="java/io/FilterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;I)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;IZ)V" since="19"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;Z)V" since="19"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Z)V" since="19"/>
-		<method name="deflate()V"/>
-		<method name="finish()V"/>
-		<field name="buf"/>
-		<field name="def"/>
-	</class>
-	<class name="java/util/zip/GZIPInputStream" since="1">
-		<extends name="java/util/zip/InflaterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
-		<field name="GZIP_MAGIC"/>
-		<field name="crc"/>
-		<field name="eos"/>
-	</class>
-	<class name="java/util/zip/GZIPOutputStream" since="1">
-		<extends name="java/util/zip/DeflaterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;I)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;IZ)V" since="19"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Z)V" since="19"/>
-		<field name="crc"/>
-	</class>
-	<class name="java/util/zip/Inflater" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Z)V"/>
-		<method name="end()V"/>
-		<method name="finished()Z"/>
-		<method name="getAdler()I"/>
-		<method name="getBytesRead()J"/>
-		<method name="getBytesWritten()J"/>
-		<method name="getRemaining()I"/>
-		<method name="getTotalIn()I"/>
-		<method name="getTotalOut()I"/>
-		<method name="inflate([B)I"/>
-		<method name="inflate([BII)I"/>
-		<method name="needsDictionary()Z"/>
-		<method name="needsInput()Z"/>
-		<method name="reset()V"/>
-		<method name="setDictionary([B)V"/>
-		<method name="setDictionary([BII)V"/>
-		<method name="setInput([B)V"/>
-		<method name="setInput([BII)V"/>
-	</class>
-	<class name="java/util/zip/InflaterInputStream" since="1">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V"/>
-		<method name="fill()V"/>
-		<field name="buf"/>
-		<field name="closed" since="24" deprecated="29"/>
-		<field name="inf"/>
-		<field name="len"/>
-	</class>
-	<class name="java/util/zip/InflaterOutputStream" since="9">
-		<extends name="java/io/FilterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Inflater;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Inflater;I)V"/>
-		<method name="finish()V"/>
-		<field name="buf"/>
-		<field name="inf"/>
-	</class>
-	<class name="java/util/zip/ZipEntry" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/util/zip/ZipEntry;)V"/>
-		<method name="getComment()Ljava/lang/String;"/>
-		<method name="getCompressedSize()J"/>
-		<method name="getCrc()J"/>
-		<method name="getCreationTime()Ljava/nio/file/attribute/FileTime;" since="26"/>
-		<method name="getExtra()[B"/>
-		<method name="getLastAccessTime()Ljava/nio/file/attribute/FileTime;" since="26"/>
-		<method name="getLastModifiedTime()Ljava/nio/file/attribute/FileTime;" since="26"/>
-		<method name="getMethod()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getSize()J"/>
-		<method name="getTime()J"/>
-		<method name="isDirectory()Z"/>
-		<method name="setComment(Ljava/lang/String;)V"/>
-		<method name="setCompressedSize(J)V"/>
-		<method name="setCrc(J)V"/>
-		<method name="setCreationTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26"/>
-		<method name="setExtra([B)V"/>
-		<method name="setLastAccessTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26"/>
-		<method name="setLastModifiedTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26"/>
-		<method name="setMethod(I)V"/>
-		<method name="setSize(J)V"/>
-		<method name="setTime(J)V"/>
-		<field name="CENATT" since="21"/>
-		<field name="CENATX" since="21"/>
-		<field name="CENCOM" since="21"/>
-		<field name="CENCRC" since="21"/>
-		<field name="CENDSK" since="21"/>
-		<field name="CENEXT" since="21"/>
-		<field name="CENFLG" since="21"/>
-		<field name="CENHDR" since="21"/>
-		<field name="CENHOW" since="21"/>
-		<field name="CENLEN" since="21"/>
-		<field name="CENNAM" since="21"/>
-		<field name="CENOFF" since="21"/>
-		<field name="CENSIG" since="21"/>
-		<field name="CENSIZ" since="21"/>
-		<field name="CENTIM" since="21"/>
-		<field name="CENVEM" since="21"/>
-		<field name="CENVER" since="21"/>
-		<field name="DEFLATED"/>
-		<field name="ENDCOM" since="21"/>
-		<field name="ENDHDR" since="21"/>
-		<field name="ENDOFF" since="21"/>
-		<field name="ENDSIG" since="21"/>
-		<field name="ENDSIZ" since="21"/>
-		<field name="ENDSUB" since="21"/>
-		<field name="ENDTOT" since="21"/>
-		<field name="EXTCRC" since="21"/>
-		<field name="EXTHDR" since="21"/>
-		<field name="EXTLEN" since="21"/>
-		<field name="EXTSIG" since="21"/>
-		<field name="EXTSIZ" since="21"/>
-		<field name="LOCCRC" since="21"/>
-		<field name="LOCEXT" since="21"/>
-		<field name="LOCFLG" since="21"/>
-		<field name="LOCHDR" since="21"/>
-		<field name="LOCHOW" since="21"/>
-		<field name="LOCLEN" since="21"/>
-		<field name="LOCNAM" since="21"/>
-		<field name="LOCSIG" since="21"/>
-		<field name="LOCSIZ" since="21"/>
-		<field name="LOCTIM" since="21"/>
-		<field name="LOCVER" since="21"/>
-		<field name="STORED"/>
-	</class>
-	<class name="java/util/zip/ZipError" since="9">
-		<extends name="java/lang/InternalError"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/zip/ZipException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="java/util/zip/ZipFile" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Closeable" since="19"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/File;I)V"/>
-		<method name="&lt;init>(Ljava/io/File;ILjava/nio/charset/Charset;)V" since="24"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/nio/charset/Charset;)V" since="24"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/nio/charset/Charset;)V" since="24"/>
-		<method name="close()V"/>
-		<method name="entries()Ljava/util/Enumeration;"/>
-		<method name="getComment()Ljava/lang/String;" since="19"/>
-		<method name="getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;"/>
-		<method name="getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="size()I"/>
-		<method name="stream()Ljava/util/stream/Stream;" since="26"/>
-		<field name="CENATT" since="21"/>
-		<field name="CENATX" since="21"/>
-		<field name="CENCOM" since="21"/>
-		<field name="CENCRC" since="21"/>
-		<field name="CENDSK" since="21"/>
-		<field name="CENEXT" since="21"/>
-		<field name="CENFLG" since="21"/>
-		<field name="CENHDR" since="21"/>
-		<field name="CENHOW" since="21"/>
-		<field name="CENLEN" since="21"/>
-		<field name="CENNAM" since="21"/>
-		<field name="CENOFF" since="21"/>
-		<field name="CENSIG" since="21"/>
-		<field name="CENSIZ" since="21"/>
-		<field name="CENTIM" since="21"/>
-		<field name="CENVEM" since="21"/>
-		<field name="CENVER" since="21"/>
-		<field name="ENDCOM" since="21"/>
-		<field name="ENDHDR" since="21"/>
-		<field name="ENDOFF" since="21"/>
-		<field name="ENDSIG" since="21"/>
-		<field name="ENDSIZ" since="21"/>
-		<field name="ENDSUB" since="21"/>
-		<field name="ENDTOT" since="21"/>
-		<field name="EXTCRC" since="21"/>
-		<field name="EXTHDR" since="21"/>
-		<field name="EXTLEN" since="21"/>
-		<field name="EXTSIG" since="21"/>
-		<field name="EXTSIZ" since="21"/>
-		<field name="LOCCRC" since="21"/>
-		<field name="LOCEXT" since="21"/>
-		<field name="LOCFLG" since="21"/>
-		<field name="LOCHDR" since="21"/>
-		<field name="LOCHOW" since="21"/>
-		<field name="LOCLEN" since="21"/>
-		<field name="LOCNAM" since="21"/>
-		<field name="LOCSIG" since="21"/>
-		<field name="LOCSIZ" since="21"/>
-		<field name="LOCTIM" since="21"/>
-		<field name="LOCVER" since="21"/>
-		<field name="OPEN_DELETE"/>
-		<field name="OPEN_READ"/>
-	</class>
-	<class name="java/util/zip/ZipInputStream" since="1">
-		<extends name="java/util/zip/InflaterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V" since="24"/>
-		<method name="closeEntry()V"/>
-		<method name="createZipEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;"/>
-		<method name="getNextEntry()Ljava/util/zip/ZipEntry;"/>
-		<field name="CENATT" since="21"/>
-		<field name="CENATX" since="21"/>
-		<field name="CENCOM" since="21"/>
-		<field name="CENCRC" since="21"/>
-		<field name="CENDSK" since="21"/>
-		<field name="CENEXT" since="21"/>
-		<field name="CENFLG" since="21"/>
-		<field name="CENHDR" since="21"/>
-		<field name="CENHOW" since="21"/>
-		<field name="CENLEN" since="21"/>
-		<field name="CENNAM" since="21"/>
-		<field name="CENOFF" since="21"/>
-		<field name="CENSIG" since="21"/>
-		<field name="CENSIZ" since="21"/>
-		<field name="CENTIM" since="21"/>
-		<field name="CENVEM" since="21"/>
-		<field name="CENVER" since="21"/>
-		<field name="ENDCOM" since="21"/>
-		<field name="ENDHDR" since="21"/>
-		<field name="ENDOFF" since="21"/>
-		<field name="ENDSIG" since="21"/>
-		<field name="ENDSIZ" since="21"/>
-		<field name="ENDSUB" since="21"/>
-		<field name="ENDTOT" since="21"/>
-		<field name="EXTCRC" since="21"/>
-		<field name="EXTHDR" since="21"/>
-		<field name="EXTLEN" since="21"/>
-		<field name="EXTSIG" since="21"/>
-		<field name="EXTSIZ" since="21"/>
-		<field name="LOCCRC" since="21"/>
-		<field name="LOCEXT" since="21"/>
-		<field name="LOCFLG" since="21"/>
-		<field name="LOCHDR" since="21"/>
-		<field name="LOCHOW" since="21"/>
-		<field name="LOCLEN" since="21"/>
-		<field name="LOCNAM" since="21"/>
-		<field name="LOCSIG" since="21"/>
-		<field name="LOCSIZ" since="21"/>
-		<field name="LOCTIM" since="21"/>
-		<field name="LOCVER" since="21"/>
-	</class>
-	<class name="java/util/zip/ZipOutputStream" since="1">
-		<extends name="java/util/zip/DeflaterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V" since="24"/>
-		<method name="closeEntry()V"/>
-		<method name="putNextEntry(Ljava/util/zip/ZipEntry;)V"/>
-		<method name="setComment(Ljava/lang/String;)V"/>
-		<method name="setLevel(I)V"/>
-		<method name="setMethod(I)V"/>
-		<field name="CENATT" since="21"/>
-		<field name="CENATX" since="21"/>
-		<field name="CENCOM" since="21"/>
-		<field name="CENCRC" since="21"/>
-		<field name="CENDSK" since="21"/>
-		<field name="CENEXT" since="21"/>
-		<field name="CENFLG" since="21"/>
-		<field name="CENHDR" since="21"/>
-		<field name="CENHOW" since="21"/>
-		<field name="CENLEN" since="21"/>
-		<field name="CENNAM" since="21"/>
-		<field name="CENOFF" since="21"/>
-		<field name="CENSIG" since="21"/>
-		<field name="CENSIZ" since="21"/>
-		<field name="CENTIM" since="21"/>
-		<field name="CENVEM" since="21"/>
-		<field name="CENVER" since="21"/>
-		<field name="DEFLATED"/>
-		<field name="ENDCOM" since="21"/>
-		<field name="ENDHDR" since="21"/>
-		<field name="ENDOFF" since="21"/>
-		<field name="ENDSIG" since="21"/>
-		<field name="ENDSIZ" since="21"/>
-		<field name="ENDSUB" since="21"/>
-		<field name="ENDTOT" since="21"/>
-		<field name="EXTCRC" since="21"/>
-		<field name="EXTHDR" since="21"/>
-		<field name="EXTLEN" since="21"/>
-		<field name="EXTSIG" since="21"/>
-		<field name="EXTSIZ" since="21"/>
-		<field name="LOCCRC" since="21"/>
-		<field name="LOCEXT" since="21"/>
-		<field name="LOCFLG" since="21"/>
-		<field name="LOCHDR" since="21"/>
-		<field name="LOCHOW" since="21"/>
-		<field name="LOCLEN" since="21"/>
-		<field name="LOCNAM" since="21"/>
-		<field name="LOCSIG" since="21"/>
-		<field name="LOCSIZ" since="21"/>
-		<field name="LOCTIM" since="21"/>
-		<field name="LOCVER" since="21"/>
-		<field name="STORED"/>
-	</class>
-	<class name="javax/crypto/AEADBadTagException" since="19">
-		<extends name="javax/crypto/BadPaddingException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/crypto/BadPaddingException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/crypto/Cipher" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/crypto/CipherSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="doFinal()[B"/>
-		<method name="doFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
-		<method name="doFinal([B)[B"/>
-		<method name="doFinal([BI)I"/>
-		<method name="doFinal([BII)[B"/>
-		<method name="doFinal([BII[B)I"/>
-		<method name="doFinal([BII[BI)I"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getBlockSize()I"/>
-		<method name="getExemptionMechanism()Ljavax/crypto/ExemptionMechanism;"/>
-		<method name="getIV()[B"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Cipher;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher;"/>
-		<method name="getMaxAllowedKeyLength(Ljava/lang/String;)I"/>
-		<method name="getMaxAllowedParameterSpec(Ljava/lang/String;)Ljava/security/spec/AlgorithmParameterSpec;"/>
-		<method name="getOutputSize(I)I"/>
-		<method name="getParameters()Ljava/security/AlgorithmParameters;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(ILjava/security/Key;)V"/>
-		<method name="init(ILjava/security/Key;Ljava/security/AlgorithmParameters;)V"/>
-		<method name="init(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V"/>
-		<method name="init(ILjava/security/Key;Ljava/security/SecureRandom;)V"/>
-		<method name="init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-		<method name="init(ILjava/security/cert/Certificate;)V"/>
-		<method name="init(ILjava/security/cert/Certificate;Ljava/security/SecureRandom;)V"/>
-		<method name="unwrap([BLjava/lang/String;I)Ljava/security/Key;"/>
-		<method name="update(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
-		<method name="update([B)[B"/>
-		<method name="update([BII)[B"/>
-		<method name="update([BII[B)I"/>
-		<method name="update([BII[BI)I"/>
-		<method name="updateAAD(Ljava/nio/ByteBuffer;)V" since="19"/>
-		<method name="updateAAD([B)V" since="19"/>
-		<method name="updateAAD([BII)V" since="19"/>
-		<method name="wrap(Ljava/security/Key;)[B"/>
-		<field name="DECRYPT_MODE"/>
-		<field name="ENCRYPT_MODE"/>
-		<field name="PRIVATE_KEY"/>
-		<field name="PUBLIC_KEY"/>
-		<field name="SECRET_KEY"/>
-		<field name="UNWRAP_MODE"/>
-		<field name="WRAP_MODE"/>
-	</class>
-	<class name="javax/crypto/CipherInputStream" since="1">
-		<extends name="java/io/FilterInputStream"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljavax/crypto/Cipher;)V"/>
-	</class>
-	<class name="javax/crypto/CipherOutputStream" since="1">
-		<extends name="java/io/FilterOutputStream"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V"/>
-	</class>
-	<class name="javax/crypto/CipherSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineDoFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
-		<method name="engineDoFinal([BII)[B"/>
-		<method name="engineDoFinal([BII[BI)I"/>
-		<method name="engineGetBlockSize()I"/>
-		<method name="engineGetIV()[B"/>
-		<method name="engineGetKeySize(Ljava/security/Key;)I"/>
-		<method name="engineGetOutputSize(I)I"/>
-		<method name="engineGetParameters()Ljava/security/AlgorithmParameters;"/>
-		<method name="engineInit(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V"/>
-		<method name="engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V"/>
-		<method name="engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-		<method name="engineSetMode(Ljava/lang/String;)V"/>
-		<method name="engineSetPadding(Ljava/lang/String;)V"/>
-		<method name="engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;"/>
-		<method name="engineUpdate(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
-		<method name="engineUpdate([BII)[B"/>
-		<method name="engineUpdate([BII[BI)I"/>
-		<method name="engineUpdateAAD(Ljava/nio/ByteBuffer;)V" since="19"/>
-		<method name="engineUpdateAAD([BII)V" since="19"/>
-		<method name="engineWrap(Ljava/security/Key;)[B"/>
-	</class>
-	<class name="javax/crypto/EncryptedPrivateKeyInfo" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
-		<method name="&lt;init>(Ljava/security/AlgorithmParameters;[B)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="getAlgName()Ljava/lang/String;"/>
-		<method name="getAlgParameters()Ljava/security/AlgorithmParameters;"/>
-		<method name="getEncoded()[B"/>
-		<method name="getEncryptedData()[B"/>
-		<method name="getKeySpec(Ljava/security/Key;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
-		<method name="getKeySpec(Ljava/security/Key;Ljava/lang/String;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
-		<method name="getKeySpec(Ljava/security/Key;Ljava/security/Provider;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
-		<method name="getKeySpec(Ljavax/crypto/Cipher;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
-	</class>
-	<class name="javax/crypto/ExemptionMechanism" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/crypto/ExemptionMechanismSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="genExemptionBlob()[B"/>
-		<method name="genExemptionBlob([B)I"/>
-		<method name="genExemptionBlob([BI)I"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/ExemptionMechanism;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/ExemptionMechanism;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/ExemptionMechanism;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getOutputSize(I)I"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(Ljava/security/Key;)V"/>
-		<method name="init(Ljava/security/Key;Ljava/security/AlgorithmParameters;)V"/>
-		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="isCryptoAllowed(Ljava/security/Key;)Z"/>
-	</class>
-	<class name="javax/crypto/ExemptionMechanismException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/crypto/ExemptionMechanismSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGenExemptionBlob()[B"/>
-		<method name="engineGenExemptionBlob([BI)I"/>
-		<method name="engineGetOutputSize(I)I"/>
-		<method name="engineInit(Ljava/security/Key;)V"/>
-		<method name="engineInit(Ljava/security/Key;Ljava/security/AlgorithmParameters;)V"/>
-		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-	</class>
-	<class name="javax/crypto/IllegalBlockSizeException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/crypto/KeyAgreement" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/crypto/KeyAgreementSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="doPhase(Ljava/security/Key;Z)Ljava/security/Key;"/>
-		<method name="generateSecret()[B"/>
-		<method name="generateSecret(Ljava/lang/String;)Ljavax/crypto/SecretKey;"/>
-		<method name="generateSecret([BI)I"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/KeyAgreement;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/KeyAgreement;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(Ljava/security/Key;)V"/>
-		<method name="init(Ljava/security/Key;Ljava/security/SecureRandom;)V"/>
-		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="javax/crypto/KeyAgreementSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineDoPhase(Ljava/security/Key;Z)Ljava/security/Key;"/>
-		<method name="engineGenerateSecret()[B"/>
-		<method name="engineGenerateSecret(Ljava/lang/String;)Ljavax/crypto/SecretKey;"/>
-		<method name="engineGenerateSecret([BI)I"/>
-		<method name="engineInit(Ljava/security/Key;Ljava/security/SecureRandom;)V"/>
-		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="javax/crypto/KeyGenerator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/crypto/KeyGeneratorSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="generateKey()Ljavax/crypto/SecretKey;"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/KeyGenerator;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/KeyGenerator;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(I)V"/>
-		<method name="init(ILjava/security/SecureRandom;)V"/>
-		<method name="init(Ljava/security/SecureRandom;)V"/>
-		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="javax/crypto/KeyGeneratorSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGenerateKey()Ljavax/crypto/SecretKey;"/>
-		<method name="engineInit(ILjava/security/SecureRandom;)V"/>
-		<method name="engineInit(Ljava/security/SecureRandom;)V"/>
-		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="javax/crypto/Mac" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljavax/crypto/MacSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="doFinal()[B"/>
-		<method name="doFinal([B)[B"/>
-		<method name="doFinal([BI)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Mac;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Mac;"/>
-		<method name="getMacLength()I"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(Ljava/security/Key;)V"/>
-		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="reset()V"/>
-		<method name="update(B)V"/>
-		<method name="update(Ljava/nio/ByteBuffer;)V"/>
-		<method name="update([B)V"/>
-		<method name="update([BII)V"/>
-	</class>
-	<class name="javax/crypto/MacSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineDoFinal()[B"/>
-		<method name="engineGetMacLength()I"/>
-		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
-		<method name="engineReset()V"/>
-		<method name="engineUpdate(B)V"/>
-		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V"/>
-		<method name="engineUpdate([BII)V"/>
-	</class>
-	<class name="javax/crypto/NoSuchPaddingException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/crypto/NullCipher" since="1">
-		<extends name="javax/crypto/Cipher"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="javax/crypto/SealedObject" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/io/Serializable;Ljavax/crypto/Cipher;)V"/>
-		<method name="&lt;init>(Ljavax/crypto/SealedObject;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getObject(Ljava/security/Key;)Ljava/lang/Object;"/>
-		<method name="getObject(Ljava/security/Key;Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getObject(Ljavax/crypto/Cipher;)Ljava/lang/Object;"/>
-		<field name="encodedParams"/>
-	</class>
-	<class name="javax/crypto/SecretKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/Key"/>
-		<implements name="javax/security/auth/Destroyable" since="26"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="javax/crypto/SecretKeyFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/crypto/SecretKeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="generateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/SecretKeyFactory;"/>
-		<method name="getKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="translateKey(Ljavax/crypto/SecretKey;)Ljavax/crypto/SecretKey;"/>
-	</class>
-	<class name="javax/crypto/SecretKeyFactorySpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGenerateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;"/>
-		<method name="engineGetKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
-		<method name="engineTranslateKey(Ljavax/crypto/SecretKey;)Ljavax/crypto/SecretKey;"/>
-	</class>
-	<class name="javax/crypto/ShortBufferException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/crypto/interfaces/DHKey" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getParams()Ljavax/crypto/spec/DHParameterSpec;"/>
-	</class>
-	<class name="javax/crypto/interfaces/DHPrivateKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PrivateKey"/>
-		<implements name="javax/crypto/interfaces/DHKey"/>
-		<method name="getX()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="javax/crypto/interfaces/DHPublicKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/PublicKey"/>
-		<implements name="javax/crypto/interfaces/DHKey"/>
-		<method name="getY()Ljava/math/BigInteger;"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="javax/crypto/interfaces/PBEKey" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/crypto/SecretKey"/>
-		<method name="getIterationCount()I"/>
-		<method name="getPassword()[C"/>
-		<method name="getSalt()[B"/>
-		<field name="serialVersionUID"/>
-	</class>
-	<class name="javax/crypto/spec/DESKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="&lt;init>([BI)V"/>
-		<method name="getKey()[B"/>
-		<method name="isParityAdjusted([BI)Z"/>
-		<method name="isWeak([BI)Z"/>
-		<field name="DES_KEY_LEN"/>
-	</class>
-	<class name="javax/crypto/spec/DESedeKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="&lt;init>([BI)V"/>
-		<method name="getKey()[B"/>
-		<method name="isParityAdjusted([BI)Z"/>
-		<field name="DES_EDE_KEY_LEN"/>
-	</class>
-	<class name="javax/crypto/spec/DHGenParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="getExponentSize()I"/>
-		<method name="getPrimeSize()I"/>
-	</class>
-	<class name="javax/crypto/spec/DHParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;I)V"/>
-		<method name="getG()Ljava/math/BigInteger;"/>
-		<method name="getL()I"/>
-		<method name="getP()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="javax/crypto/spec/DHPrivateKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getG()Ljava/math/BigInteger;"/>
-		<method name="getP()Ljava/math/BigInteger;"/>
-		<method name="getX()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="javax/crypto/spec/DHPublicKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
-		<method name="getG()Ljava/math/BigInteger;"/>
-		<method name="getP()Ljava/math/BigInteger;"/>
-		<method name="getY()Ljava/math/BigInteger;"/>
-	</class>
-	<class name="javax/crypto/spec/GCMParameterSpec" since="19">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(I[B)V"/>
-		<method name="&lt;init>(I[BII)V"/>
-		<method name="getIV()[B"/>
-		<method name="getTLen()I"/>
-	</class>
-	<class name="javax/crypto/spec/IvParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="&lt;init>([BII)V"/>
-		<method name="getIV()[B"/>
-	</class>
-	<class name="javax/crypto/spec/OAEPParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V"/>
-		<method name="getDigestAlgorithm()Ljava/lang/String;"/>
-		<method name="getMGFAlgorithm()Ljava/lang/String;"/>
-		<method name="getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;"/>
-		<method name="getPSource()Ljavax/crypto/spec/PSource;"/>
-		<field name="DEFAULT"/>
-	</class>
-	<class name="javax/crypto/spec/PBEKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<method name="&lt;init>([C)V"/>
-		<method name="&lt;init>([C[BI)V"/>
-		<method name="&lt;init>([C[BII)V"/>
-		<method name="clearPassword()V"/>
-		<method name="getIterationCount()I"/>
-		<method name="getKeyLength()I"/>
-		<method name="getPassword()[C"/>
-		<method name="getSalt()[B"/>
-	</class>
-	<class name="javax/crypto/spec/PBEParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>([BI)V"/>
-		<method name="&lt;init>([BILjava/security/spec/AlgorithmParameterSpec;)V" since="26"/>
-		<method name="getIterationCount()I"/>
-		<method name="getParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="26"/>
-		<method name="getSalt()[B"/>
-	</class>
-	<class name="javax/crypto/spec/PSource" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-	</class>
-	<class name="javax/crypto/spec/PSource$PSpecified" since="1">
-		<extends name="javax/crypto/spec/PSource"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="getValue()[B"/>
-		<field name="DEFAULT"/>
-	</class>
-	<class name="javax/crypto/spec/RC2ParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(I[B)V"/>
-		<method name="&lt;init>(I[BI)V"/>
-		<method name="getEffectiveKeyBits()I"/>
-		<method name="getIV()[B"/>
-	</class>
-	<class name="javax/crypto/spec/RC5ParameterSpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/spec/AlgorithmParameterSpec"/>
-		<method name="&lt;init>(III)V"/>
-		<method name="&lt;init>(III[B)V"/>
-		<method name="&lt;init>(III[BI)V"/>
-		<method name="getIV()[B"/>
-		<method name="getRounds()I"/>
-		<method name="getVersion()I"/>
-		<method name="getWordSize()I"/>
-	</class>
-	<class name="javax/crypto/spec/SecretKeySpec" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable" removed="24"/>
-		<implements name="java/security/spec/KeySpec"/>
-		<implements name="javax/crypto/SecretKey"/>
-		<method name="&lt;init>([BIILjava/lang/String;)V"/>
-		<method name="&lt;init>([BLjava/lang/String;)V"/>
-	</class>
-	<class name="javax/microedition/khronos/egl/EGL" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="javax/microedition/khronos/egl/EGL10" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/microedition/khronos/egl/EGL"/>
-		<method name="eglChooseConfig(Ljavax/microedition/khronos/egl/EGLDisplay;[I[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z"/>
-		<method name="eglCopyBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljava/lang/Object;)Z"/>
-		<method name="eglCreateContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljavax/microedition/khronos/egl/EGLContext;[I)Ljavax/microedition/khronos/egl/EGLContext;"/>
-		<method name="eglCreatePbufferSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;[I)Ljavax/microedition/khronos/egl/EGLSurface;"/>
-		<method name="eglCreatePixmapSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;" deprecated="26"/>
-		<method name="eglCreateWindowSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;"/>
-		<method name="eglDestroyContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)Z"/>
-		<method name="eglDestroySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z"/>
-		<method name="eglGetConfigAttrib(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z"/>
-		<method name="eglGetConfigs(Ljavax/microedition/khronos/egl/EGLDisplay;[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z"/>
-		<method name="eglGetCurrentContext()Ljavax/microedition/khronos/egl/EGLContext;"/>
-		<method name="eglGetCurrentDisplay()Ljavax/microedition/khronos/egl/EGLDisplay;"/>
-		<method name="eglGetCurrentSurface(I)Ljavax/microedition/khronos/egl/EGLSurface;"/>
-		<method name="eglGetDisplay(Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLDisplay;"/>
-		<method name="eglGetError()I"/>
-		<method name="eglInitialize(Ljavax/microedition/khronos/egl/EGLDisplay;[I)Z"/>
-		<method name="eglMakeCurrent(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLContext;)Z"/>
-		<method name="eglQueryContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;I[I)Z"/>
-		<method name="eglQueryString(Ljavax/microedition/khronos/egl/EGLDisplay;I)Ljava/lang/String;"/>
-		<method name="eglQuerySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;I[I)Z"/>
-		<method name="eglSwapBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z"/>
-		<method name="eglTerminate(Ljavax/microedition/khronos/egl/EGLDisplay;)Z"/>
-		<method name="eglWaitGL()Z"/>
-		<method name="eglWaitNative(ILjava/lang/Object;)Z"/>
-		<field name="EGL_ALPHA_FORMAT"/>
-		<field name="EGL_ALPHA_MASK_SIZE"/>
-		<field name="EGL_ALPHA_SIZE"/>
-		<field name="EGL_BAD_ACCESS"/>
-		<field name="EGL_BAD_ALLOC"/>
-		<field name="EGL_BAD_ATTRIBUTE"/>
-		<field name="EGL_BAD_CONFIG"/>
-		<field name="EGL_BAD_CONTEXT"/>
-		<field name="EGL_BAD_CURRENT_SURFACE"/>
-		<field name="EGL_BAD_DISPLAY"/>
-		<field name="EGL_BAD_MATCH"/>
-		<field name="EGL_BAD_NATIVE_PIXMAP"/>
-		<field name="EGL_BAD_NATIVE_WINDOW"/>
-		<field name="EGL_BAD_PARAMETER"/>
-		<field name="EGL_BAD_SURFACE"/>
-		<field name="EGL_BLUE_SIZE"/>
-		<field name="EGL_BUFFER_SIZE"/>
-		<field name="EGL_COLORSPACE"/>
-		<field name="EGL_COLOR_BUFFER_TYPE"/>
-		<field name="EGL_CONFIG_CAVEAT"/>
-		<field name="EGL_CONFIG_ID"/>
-		<field name="EGL_CORE_NATIVE_ENGINE"/>
-		<field name="EGL_DEFAULT_DISPLAY"/>
-		<field name="EGL_DEPTH_SIZE"/>
-		<field name="EGL_DONT_CARE"/>
-		<field name="EGL_DRAW"/>
-		<field name="EGL_EXTENSIONS"/>
-		<field name="EGL_GREEN_SIZE"/>
-		<field name="EGL_HEIGHT"/>
-		<field name="EGL_HORIZONTAL_RESOLUTION"/>
-		<field name="EGL_LARGEST_PBUFFER"/>
-		<field name="EGL_LEVEL"/>
-		<field name="EGL_LUMINANCE_BUFFER"/>
-		<field name="EGL_LUMINANCE_SIZE"/>
-		<field name="EGL_MAX_PBUFFER_HEIGHT"/>
-		<field name="EGL_MAX_PBUFFER_PIXELS"/>
-		<field name="EGL_MAX_PBUFFER_WIDTH"/>
-		<field name="EGL_NATIVE_RENDERABLE"/>
-		<field name="EGL_NATIVE_VISUAL_ID"/>
-		<field name="EGL_NATIVE_VISUAL_TYPE"/>
-		<field name="EGL_NONE"/>
-		<field name="EGL_NON_CONFORMANT_CONFIG"/>
-		<field name="EGL_NOT_INITIALIZED"/>
-		<field name="EGL_NO_CONTEXT"/>
-		<field name="EGL_NO_DISPLAY"/>
-		<field name="EGL_NO_SURFACE"/>
-		<field name="EGL_PBUFFER_BIT"/>
-		<field name="EGL_PIXEL_ASPECT_RATIO"/>
-		<field name="EGL_PIXMAP_BIT"/>
-		<field name="EGL_READ"/>
-		<field name="EGL_RED_SIZE"/>
-		<field name="EGL_RENDERABLE_TYPE"/>
-		<field name="EGL_RENDER_BUFFER"/>
-		<field name="EGL_RGB_BUFFER"/>
-		<field name="EGL_SAMPLES"/>
-		<field name="EGL_SAMPLE_BUFFERS"/>
-		<field name="EGL_SINGLE_BUFFER"/>
-		<field name="EGL_SLOW_CONFIG"/>
-		<field name="EGL_STENCIL_SIZE"/>
-		<field name="EGL_SUCCESS"/>
-		<field name="EGL_SURFACE_TYPE"/>
-		<field name="EGL_TRANSPARENT_BLUE_VALUE"/>
-		<field name="EGL_TRANSPARENT_GREEN_VALUE"/>
-		<field name="EGL_TRANSPARENT_RED_VALUE"/>
-		<field name="EGL_TRANSPARENT_RGB"/>
-		<field name="EGL_TRANSPARENT_TYPE"/>
-		<field name="EGL_VENDOR"/>
-		<field name="EGL_VERSION"/>
-		<field name="EGL_VERTICAL_RESOLUTION"/>
-		<field name="EGL_WIDTH"/>
-		<field name="EGL_WINDOW_BIT"/>
-	</class>
-	<class name="javax/microedition/khronos/egl/EGL11" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/microedition/khronos/egl/EGL10"/>
-		<field name="EGL_CONTEXT_LOST"/>
-	</class>
-	<class name="javax/microedition/khronos/egl/EGLConfig" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="javax/microedition/khronos/egl/EGLContext" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEGL()Ljavax/microedition/khronos/egl/EGL;"/>
-		<method name="getGL()Ljavax/microedition/khronos/opengles/GL;"/>
-	</class>
-	<class name="javax/microedition/khronos/egl/EGLDisplay" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="javax/microedition/khronos/egl/EGLSurface" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="javax/microedition/khronos/opengles/GL" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="javax/microedition/khronos/opengles/GL10" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/microedition/khronos/opengles/GL"/>
-		<method name="glActiveTexture(I)V"/>
-		<method name="glAlphaFunc(IF)V"/>
-		<method name="glAlphaFuncx(II)V"/>
-		<method name="glBindTexture(II)V"/>
-		<method name="glBlendFunc(II)V"/>
-		<method name="glClear(I)V"/>
-		<method name="glClearColor(FFFF)V"/>
-		<method name="glClearColorx(IIII)V"/>
-		<method name="glClearDepthf(F)V"/>
-		<method name="glClearDepthx(I)V"/>
-		<method name="glClearStencil(I)V"/>
-		<method name="glClientActiveTexture(I)V"/>
-		<method name="glColor4f(FFFF)V"/>
-		<method name="glColor4x(IIII)V"/>
-		<method name="glColorMask(ZZZZ)V"/>
-		<method name="glColorPointer(IIILjava/nio/Buffer;)V"/>
-		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCopyTexImage2D(IIIIIIII)V"/>
-		<method name="glCopyTexSubImage2D(IIIIIIII)V"/>
-		<method name="glCullFace(I)V"/>
-		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteTextures(I[II)V"/>
-		<method name="glDepthFunc(I)V"/>
-		<method name="glDepthMask(Z)V"/>
-		<method name="glDepthRangef(FF)V"/>
-		<method name="glDepthRangex(II)V"/>
-		<method name="glDisable(I)V"/>
-		<method name="glDisableClientState(I)V"/>
-		<method name="glDrawArrays(III)V"/>
-		<method name="glDrawElements(IIILjava/nio/Buffer;)V"/>
-		<method name="glEnable(I)V"/>
-		<method name="glEnableClientState(I)V"/>
-		<method name="glFinish()V"/>
-		<method name="glFlush()V"/>
-		<method name="glFogf(IF)V"/>
-		<method name="glFogfv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glFogfv(I[FI)V"/>
-		<method name="glFogx(II)V"/>
-		<method name="glFogxv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glFogxv(I[II)V"/>
-		<method name="glFrontFace(I)V"/>
-		<method name="glFrustumf(FFFFFF)V"/>
-		<method name="glFrustumx(IIIIII)V"/>
-		<method name="glGenTextures(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenTextures(I[II)V"/>
-		<method name="glGetError()I"/>
-		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetIntegerv(I[II)V"/>
-		<method name="glGetString(I)Ljava/lang/String;"/>
-		<method name="glHint(II)V"/>
-		<method name="glLightModelf(IF)V"/>
-		<method name="glLightModelfv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glLightModelfv(I[FI)V"/>
-		<method name="glLightModelx(II)V"/>
-		<method name="glLightModelxv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glLightModelxv(I[II)V"/>
-		<method name="glLightf(IIF)V"/>
-		<method name="glLightfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glLightfv(II[FI)V"/>
-		<method name="glLightx(III)V"/>
-		<method name="glLightxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glLightxv(II[II)V"/>
-		<method name="glLineWidth(F)V"/>
-		<method name="glLineWidthx(I)V"/>
-		<method name="glLoadIdentity()V"/>
-		<method name="glLoadMatrixf(Ljava/nio/FloatBuffer;)V"/>
-		<method name="glLoadMatrixf([FI)V"/>
-		<method name="glLoadMatrixx(Ljava/nio/IntBuffer;)V"/>
-		<method name="glLoadMatrixx([II)V"/>
-		<method name="glLogicOp(I)V"/>
-		<method name="glMaterialf(IIF)V"/>
-		<method name="glMaterialfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glMaterialfv(II[FI)V"/>
-		<method name="glMaterialx(III)V"/>
-		<method name="glMaterialxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glMaterialxv(II[II)V"/>
-		<method name="glMatrixMode(I)V"/>
-		<method name="glMultMatrixf(Ljava/nio/FloatBuffer;)V"/>
-		<method name="glMultMatrixf([FI)V"/>
-		<method name="glMultMatrixx(Ljava/nio/IntBuffer;)V"/>
-		<method name="glMultMatrixx([II)V"/>
-		<method name="glMultiTexCoord4f(IFFFF)V"/>
-		<method name="glMultiTexCoord4x(IIIII)V"/>
-		<method name="glNormal3f(FFF)V"/>
-		<method name="glNormal3x(III)V"/>
-		<method name="glNormalPointer(IILjava/nio/Buffer;)V"/>
-		<method name="glOrthof(FFFFFF)V"/>
-		<method name="glOrthox(IIIIII)V"/>
-		<method name="glPixelStorei(II)V"/>
-		<method name="glPointSize(F)V"/>
-		<method name="glPointSizex(I)V"/>
-		<method name="glPolygonOffset(FF)V"/>
-		<method name="glPolygonOffsetx(II)V"/>
-		<method name="glPopMatrix()V"/>
-		<method name="glPushMatrix()V"/>
-		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V"/>
-		<method name="glRotatef(FFFF)V"/>
-		<method name="glRotatex(IIII)V"/>
-		<method name="glSampleCoverage(FZ)V"/>
-		<method name="glSampleCoveragex(IZ)V"/>
-		<method name="glScalef(FFF)V"/>
-		<method name="glScalex(III)V"/>
-		<method name="glScissor(IIII)V"/>
-		<method name="glShadeModel(I)V"/>
-		<method name="glStencilFunc(III)V"/>
-		<method name="glStencilMask(I)V"/>
-		<method name="glStencilOp(III)V"/>
-		<method name="glTexCoordPointer(IIILjava/nio/Buffer;)V"/>
-		<method name="glTexEnvf(IIF)V"/>
-		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexEnvfv(II[FI)V"/>
-		<method name="glTexEnvx(III)V"/>
-		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexEnvxv(II[II)V"/>
-		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glTexParameterf(IIF)V"/>
-		<method name="glTexParameterx(III)V"/>
-		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glTranslatef(FFF)V"/>
-		<method name="glTranslatex(III)V"/>
-		<method name="glVertexPointer(IIILjava/nio/Buffer;)V"/>
-		<method name="glViewport(IIII)V"/>
-		<field name="GL_ADD"/>
-		<field name="GL_ALIASED_LINE_WIDTH_RANGE"/>
-		<field name="GL_ALIASED_POINT_SIZE_RANGE"/>
-		<field name="GL_ALPHA"/>
-		<field name="GL_ALPHA_BITS"/>
-		<field name="GL_ALPHA_TEST"/>
-		<field name="GL_ALWAYS"/>
-		<field name="GL_AMBIENT"/>
-		<field name="GL_AMBIENT_AND_DIFFUSE"/>
-		<field name="GL_AND"/>
-		<field name="GL_AND_INVERTED"/>
-		<field name="GL_AND_REVERSE"/>
-		<field name="GL_BACK"/>
-		<field name="GL_BLEND"/>
-		<field name="GL_BLUE_BITS"/>
-		<field name="GL_BYTE"/>
-		<field name="GL_CCW"/>
-		<field name="GL_CLAMP_TO_EDGE"/>
-		<field name="GL_CLEAR"/>
-		<field name="GL_COLOR_ARRAY"/>
-		<field name="GL_COLOR_BUFFER_BIT"/>
-		<field name="GL_COLOR_LOGIC_OP"/>
-		<field name="GL_COLOR_MATERIAL"/>
-		<field name="GL_COMPRESSED_TEXTURE_FORMATS"/>
-		<field name="GL_CONSTANT_ATTENUATION"/>
-		<field name="GL_COPY"/>
-		<field name="GL_COPY_INVERTED"/>
-		<field name="GL_CULL_FACE"/>
-		<field name="GL_CW"/>
-		<field name="GL_DECAL"/>
-		<field name="GL_DECR"/>
-		<field name="GL_DEPTH_BITS"/>
-		<field name="GL_DEPTH_BUFFER_BIT"/>
-		<field name="GL_DEPTH_TEST"/>
-		<field name="GL_DIFFUSE"/>
-		<field name="GL_DITHER"/>
-		<field name="GL_DONT_CARE"/>
-		<field name="GL_DST_ALPHA"/>
-		<field name="GL_DST_COLOR"/>
-		<field name="GL_EMISSION"/>
-		<field name="GL_EQUAL"/>
-		<field name="GL_EQUIV"/>
-		<field name="GL_EXP"/>
-		<field name="GL_EXP2"/>
-		<field name="GL_EXTENSIONS"/>
-		<field name="GL_FALSE"/>
-		<field name="GL_FASTEST"/>
-		<field name="GL_FIXED"/>
-		<field name="GL_FLAT"/>
-		<field name="GL_FLOAT"/>
-		<field name="GL_FOG"/>
-		<field name="GL_FOG_COLOR"/>
-		<field name="GL_FOG_DENSITY"/>
-		<field name="GL_FOG_END"/>
-		<field name="GL_FOG_HINT"/>
-		<field name="GL_FOG_MODE"/>
-		<field name="GL_FOG_START"/>
-		<field name="GL_FRONT"/>
-		<field name="GL_FRONT_AND_BACK"/>
-		<field name="GL_GEQUAL"/>
-		<field name="GL_GREATER"/>
-		<field name="GL_GREEN_BITS"/>
-		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES"/>
-		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE_OES"/>
-		<field name="GL_INCR"/>
-		<field name="GL_INVALID_ENUM"/>
-		<field name="GL_INVALID_OPERATION"/>
-		<field name="GL_INVALID_VALUE"/>
-		<field name="GL_INVERT"/>
-		<field name="GL_KEEP"/>
-		<field name="GL_LEQUAL"/>
-		<field name="GL_LESS"/>
-		<field name="GL_LIGHT0"/>
-		<field name="GL_LIGHT1"/>
-		<field name="GL_LIGHT2"/>
-		<field name="GL_LIGHT3"/>
-		<field name="GL_LIGHT4"/>
-		<field name="GL_LIGHT5"/>
-		<field name="GL_LIGHT6"/>
-		<field name="GL_LIGHT7"/>
-		<field name="GL_LIGHTING"/>
-		<field name="GL_LIGHT_MODEL_AMBIENT"/>
-		<field name="GL_LIGHT_MODEL_TWO_SIDE"/>
-		<field name="GL_LINEAR"/>
-		<field name="GL_LINEAR_ATTENUATION"/>
-		<field name="GL_LINEAR_MIPMAP_LINEAR"/>
-		<field name="GL_LINEAR_MIPMAP_NEAREST"/>
-		<field name="GL_LINES"/>
-		<field name="GL_LINE_LOOP"/>
-		<field name="GL_LINE_SMOOTH"/>
-		<field name="GL_LINE_SMOOTH_HINT"/>
-		<field name="GL_LINE_STRIP"/>
-		<field name="GL_LUMINANCE"/>
-		<field name="GL_LUMINANCE_ALPHA"/>
-		<field name="GL_MAX_ELEMENTS_INDICES"/>
-		<field name="GL_MAX_ELEMENTS_VERTICES"/>
-		<field name="GL_MAX_LIGHTS"/>
-		<field name="GL_MAX_MODELVIEW_STACK_DEPTH"/>
-		<field name="GL_MAX_PROJECTION_STACK_DEPTH"/>
-		<field name="GL_MAX_TEXTURE_SIZE"/>
-		<field name="GL_MAX_TEXTURE_STACK_DEPTH"/>
-		<field name="GL_MAX_TEXTURE_UNITS"/>
-		<field name="GL_MAX_VIEWPORT_DIMS"/>
-		<field name="GL_MODELVIEW"/>
-		<field name="GL_MODULATE"/>
-		<field name="GL_MULTISAMPLE"/>
-		<field name="GL_NAND"/>
-		<field name="GL_NEAREST"/>
-		<field name="GL_NEAREST_MIPMAP_LINEAR"/>
-		<field name="GL_NEAREST_MIPMAP_NEAREST"/>
-		<field name="GL_NEVER"/>
-		<field name="GL_NICEST"/>
-		<field name="GL_NOOP"/>
-		<field name="GL_NOR"/>
-		<field name="GL_NORMALIZE"/>
-		<field name="GL_NORMAL_ARRAY"/>
-		<field name="GL_NOTEQUAL"/>
-		<field name="GL_NO_ERROR"/>
-		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"/>
-		<field name="GL_ONE"/>
-		<field name="GL_ONE_MINUS_DST_ALPHA"/>
-		<field name="GL_ONE_MINUS_DST_COLOR"/>
-		<field name="GL_ONE_MINUS_SRC_ALPHA"/>
-		<field name="GL_ONE_MINUS_SRC_COLOR"/>
-		<field name="GL_OR"/>
-		<field name="GL_OR_INVERTED"/>
-		<field name="GL_OR_REVERSE"/>
-		<field name="GL_OUT_OF_MEMORY"/>
-		<field name="GL_PACK_ALIGNMENT"/>
-		<field name="GL_PALETTE4_R5_G6_B5_OES"/>
-		<field name="GL_PALETTE4_RGB5_A1_OES"/>
-		<field name="GL_PALETTE4_RGB8_OES"/>
-		<field name="GL_PALETTE4_RGBA4_OES"/>
-		<field name="GL_PALETTE4_RGBA8_OES"/>
-		<field name="GL_PALETTE8_R5_G6_B5_OES"/>
-		<field name="GL_PALETTE8_RGB5_A1_OES"/>
-		<field name="GL_PALETTE8_RGB8_OES"/>
-		<field name="GL_PALETTE8_RGBA4_OES"/>
-		<field name="GL_PALETTE8_RGBA8_OES"/>
-		<field name="GL_PERSPECTIVE_CORRECTION_HINT"/>
-		<field name="GL_POINTS"/>
-		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
-		<field name="GL_POINT_SIZE"/>
-		<field name="GL_POINT_SMOOTH"/>
-		<field name="GL_POINT_SMOOTH_HINT"/>
-		<field name="GL_POLYGON_OFFSET_FILL"/>
-		<field name="GL_POLYGON_SMOOTH_HINT"/>
-		<field name="GL_POSITION"/>
-		<field name="GL_PROJECTION"/>
-		<field name="GL_QUADRATIC_ATTENUATION"/>
-		<field name="GL_RED_BITS"/>
-		<field name="GL_RENDERER"/>
-		<field name="GL_REPEAT"/>
-		<field name="GL_REPLACE"/>
-		<field name="GL_RESCALE_NORMAL"/>
-		<field name="GL_RGB"/>
-		<field name="GL_RGBA"/>
-		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"/>
-		<field name="GL_SAMPLE_ALPHA_TO_ONE"/>
-		<field name="GL_SAMPLE_COVERAGE"/>
-		<field name="GL_SCISSOR_TEST"/>
-		<field name="GL_SET"/>
-		<field name="GL_SHININESS"/>
-		<field name="GL_SHORT"/>
-		<field name="GL_SMOOTH"/>
-		<field name="GL_SMOOTH_LINE_WIDTH_RANGE"/>
-		<field name="GL_SMOOTH_POINT_SIZE_RANGE"/>
-		<field name="GL_SPECULAR"/>
-		<field name="GL_SPOT_CUTOFF"/>
-		<field name="GL_SPOT_DIRECTION"/>
-		<field name="GL_SPOT_EXPONENT"/>
-		<field name="GL_SRC_ALPHA"/>
-		<field name="GL_SRC_ALPHA_SATURATE"/>
-		<field name="GL_SRC_COLOR"/>
-		<field name="GL_STACK_OVERFLOW"/>
-		<field name="GL_STACK_UNDERFLOW"/>
-		<field name="GL_STENCIL_BITS"/>
-		<field name="GL_STENCIL_BUFFER_BIT"/>
-		<field name="GL_STENCIL_TEST"/>
-		<field name="GL_SUBPIXEL_BITS"/>
-		<field name="GL_TEXTURE"/>
-		<field name="GL_TEXTURE0"/>
-		<field name="GL_TEXTURE1"/>
-		<field name="GL_TEXTURE10"/>
-		<field name="GL_TEXTURE11"/>
-		<field name="GL_TEXTURE12"/>
-		<field name="GL_TEXTURE13"/>
-		<field name="GL_TEXTURE14"/>
-		<field name="GL_TEXTURE15"/>
-		<field name="GL_TEXTURE16"/>
-		<field name="GL_TEXTURE17"/>
-		<field name="GL_TEXTURE18"/>
-		<field name="GL_TEXTURE19"/>
-		<field name="GL_TEXTURE2"/>
-		<field name="GL_TEXTURE20"/>
-		<field name="GL_TEXTURE21"/>
-		<field name="GL_TEXTURE22"/>
-		<field name="GL_TEXTURE23"/>
-		<field name="GL_TEXTURE24"/>
-		<field name="GL_TEXTURE25"/>
-		<field name="GL_TEXTURE26"/>
-		<field name="GL_TEXTURE27"/>
-		<field name="GL_TEXTURE28"/>
-		<field name="GL_TEXTURE29"/>
-		<field name="GL_TEXTURE3"/>
-		<field name="GL_TEXTURE30"/>
-		<field name="GL_TEXTURE31"/>
-		<field name="GL_TEXTURE4"/>
-		<field name="GL_TEXTURE5"/>
-		<field name="GL_TEXTURE6"/>
-		<field name="GL_TEXTURE7"/>
-		<field name="GL_TEXTURE8"/>
-		<field name="GL_TEXTURE9"/>
-		<field name="GL_TEXTURE_2D"/>
-		<field name="GL_TEXTURE_COORD_ARRAY"/>
-		<field name="GL_TEXTURE_ENV"/>
-		<field name="GL_TEXTURE_ENV_COLOR"/>
-		<field name="GL_TEXTURE_ENV_MODE"/>
-		<field name="GL_TEXTURE_MAG_FILTER"/>
-		<field name="GL_TEXTURE_MIN_FILTER"/>
-		<field name="GL_TEXTURE_WRAP_S"/>
-		<field name="GL_TEXTURE_WRAP_T"/>
-		<field name="GL_TRIANGLES"/>
-		<field name="GL_TRIANGLE_FAN"/>
-		<field name="GL_TRIANGLE_STRIP"/>
-		<field name="GL_TRUE"/>
-		<field name="GL_UNPACK_ALIGNMENT"/>
-		<field name="GL_UNSIGNED_BYTE"/>
-		<field name="GL_UNSIGNED_SHORT"/>
-		<field name="GL_UNSIGNED_SHORT_4_4_4_4"/>
-		<field name="GL_UNSIGNED_SHORT_5_5_5_1"/>
-		<field name="GL_UNSIGNED_SHORT_5_6_5"/>
-		<field name="GL_VENDOR"/>
-		<field name="GL_VERSION"/>
-		<field name="GL_VERTEX_ARRAY"/>
-		<field name="GL_XOR"/>
-		<field name="GL_ZERO"/>
-	</class>
-	<class name="javax/microedition/khronos/opengles/GL10Ext" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/microedition/khronos/opengles/GL"/>
-		<method name="glQueryMatrixxOES(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I"/>
-		<method name="glQueryMatrixxOES([II[II)I"/>
-	</class>
-	<class name="javax/microedition/khronos/opengles/GL11" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/microedition/khronos/opengles/GL10"/>
-		<method name="glBindBuffer(II)V"/>
-		<method name="glBufferData(IILjava/nio/Buffer;I)V"/>
-		<method name="glBufferSubData(IIILjava/nio/Buffer;)V"/>
-		<method name="glClipPlanef(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glClipPlanef(I[FI)V"/>
-		<method name="glClipPlanex(ILjava/nio/IntBuffer;)V"/>
-		<method name="glClipPlanex(I[II)V"/>
-		<method name="glColor4ub(BBBB)V"/>
-		<method name="glColorPointer(IIII)V"/>
-		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteBuffers(I[II)V"/>
-		<method name="glDrawElements(IIII)V"/>
-		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenBuffers(I[II)V"/>
-		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetBooleanv(I[ZI)V"/>
-		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetBufferParameteriv(II[II)V"/>
-		<method name="glGetClipPlanef(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetClipPlanef(I[FI)V"/>
-		<method name="glGetClipPlanex(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetClipPlanex(I[II)V"/>
-		<method name="glGetFixedv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetFixedv(I[II)V"/>
-		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetFloatv(I[FI)V"/>
-		<method name="glGetLightfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetLightfv(II[FI)V"/>
-		<method name="glGetLightxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetLightxv(II[II)V"/>
-		<method name="glGetMaterialfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetMaterialfv(II[FI)V"/>
-		<method name="glGetMaterialxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetMaterialxv(II[II)V"/>
-		<method name="glGetPointerv(I[Ljava/nio/Buffer;)V"/>
-		<method name="glGetTexEnviv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexEnviv(II[II)V"/>
-		<method name="glGetTexEnvxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexEnvxv(II[II)V"/>
-		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetTexParameterfv(II[FI)V"/>
-		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameteriv(II[II)V"/>
-		<method name="glGetTexParameterxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexParameterxv(II[II)V"/>
-		<method name="glIsBuffer(I)Z"/>
-		<method name="glIsEnabled(I)Z"/>
-		<method name="glIsTexture(I)Z"/>
-		<method name="glNormalPointer(III)V"/>
-		<method name="glPointParameterf(IF)V"/>
-		<method name="glPointParameterfv(ILjava/nio/FloatBuffer;)V"/>
-		<method name="glPointParameterfv(I[FI)V"/>
-		<method name="glPointParameterx(II)V"/>
-		<method name="glPointParameterxv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glPointParameterxv(I[II)V"/>
-		<method name="glPointSizePointerOES(IILjava/nio/Buffer;)V"/>
-		<method name="glTexCoordPointer(IIII)V"/>
-		<method name="glTexEnvi(III)V"/>
-		<method name="glTexEnviv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexEnviv(II[II)V"/>
-		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexParameterfv(II[FI)V"/>
-		<method name="glTexParameteri(III)V"/>
-		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameteriv(II[II)V"/>
-		<method name="glTexParameterxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexParameterxv(II[II)V"/>
-		<method name="glVertexPointer(IIII)V"/>
-		<field name="GL_ACTIVE_TEXTURE"/>
-		<field name="GL_ADD_SIGNED"/>
-		<field name="GL_ALPHA_SCALE"/>
-		<field name="GL_ALPHA_TEST_FUNC"/>
-		<field name="GL_ALPHA_TEST_REF"/>
-		<field name="GL_ARRAY_BUFFER"/>
-		<field name="GL_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_BLEND_DST"/>
-		<field name="GL_BLEND_SRC"/>
-		<field name="GL_BUFFER_ACCESS"/>
-		<field name="GL_BUFFER_SIZE"/>
-		<field name="GL_BUFFER_USAGE"/>
-		<field name="GL_CLIENT_ACTIVE_TEXTURE"/>
-		<field name="GL_CLIP_PLANE0"/>
-		<field name="GL_CLIP_PLANE1"/>
-		<field name="GL_CLIP_PLANE2"/>
-		<field name="GL_CLIP_PLANE3"/>
-		<field name="GL_CLIP_PLANE4"/>
-		<field name="GL_CLIP_PLANE5"/>
-		<field name="GL_COLOR_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_COLOR_ARRAY_POINTER"/>
-		<field name="GL_COLOR_ARRAY_SIZE"/>
-		<field name="GL_COLOR_ARRAY_STRIDE"/>
-		<field name="GL_COLOR_ARRAY_TYPE"/>
-		<field name="GL_COLOR_CLEAR_VALUE"/>
-		<field name="GL_COLOR_WRITEMASK"/>
-		<field name="GL_COMBINE"/>
-		<field name="GL_COMBINE_ALPHA"/>
-		<field name="GL_COMBINE_RGB"/>
-		<field name="GL_CONSTANT"/>
-		<field name="GL_COORD_REPLACE_OES"/>
-		<field name="GL_CULL_FACE_MODE"/>
-		<field name="GL_CURRENT_COLOR"/>
-		<field name="GL_CURRENT_NORMAL"/>
-		<field name="GL_CURRENT_TEXTURE_COORDS"/>
-		<field name="GL_DEPTH_CLEAR_VALUE"/>
-		<field name="GL_DEPTH_FUNC"/>
-		<field name="GL_DEPTH_RANGE"/>
-		<field name="GL_DEPTH_WRITEMASK"/>
-		<field name="GL_DOT3_RGB"/>
-		<field name="GL_DOT3_RGBA"/>
-		<field name="GL_DYNAMIC_DRAW"/>
-		<field name="GL_ELEMENT_ARRAY_BUFFER"/>
-		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_FRONT_FACE"/>
-		<field name="GL_GENERATE_MIPMAP"/>
-		<field name="GL_GENERATE_MIPMAP_HINT"/>
-		<field name="GL_INTERPOLATE"/>
-		<field name="GL_LINE_WIDTH"/>
-		<field name="GL_LOGIC_OP_MODE"/>
-		<field name="GL_MATRIX_MODE"/>
-		<field name="GL_MAX_CLIP_PLANES"/>
-		<field name="GL_MODELVIEW_MATRIX"/>
-		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_MODELVIEW_STACK_DEPTH"/>
-		<field name="GL_NORMAL_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_NORMAL_ARRAY_POINTER"/>
-		<field name="GL_NORMAL_ARRAY_STRIDE"/>
-		<field name="GL_NORMAL_ARRAY_TYPE"/>
-		<field name="GL_OPERAND0_ALPHA"/>
-		<field name="GL_OPERAND0_RGB"/>
-		<field name="GL_OPERAND1_ALPHA"/>
-		<field name="GL_OPERAND1_RGB"/>
-		<field name="GL_OPERAND2_ALPHA"/>
-		<field name="GL_OPERAND2_RGB"/>
-		<field name="GL_POINT_DISTANCE_ATTENUATION"/>
-		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
-		<field name="GL_POINT_SIZE"/>
-		<field name="GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_POINTER_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_STRIDE_OES"/>
-		<field name="GL_POINT_SIZE_ARRAY_TYPE_OES"/>
-		<field name="GL_POINT_SIZE_MAX"/>
-		<field name="GL_POINT_SIZE_MIN"/>
-		<field name="GL_POINT_SPRITE_OES"/>
-		<field name="GL_POLYGON_OFFSET_FACTOR"/>
-		<field name="GL_POLYGON_OFFSET_UNITS"/>
-		<field name="GL_PREVIOUS"/>
-		<field name="GL_PRIMARY_COLOR"/>
-		<field name="GL_PROJECTION_MATRIX"/>
-		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_PROJECTION_STACK_DEPTH"/>
-		<field name="GL_RGB_SCALE"/>
-		<field name="GL_SAMPLES"/>
-		<field name="GL_SAMPLE_BUFFERS"/>
-		<field name="GL_SAMPLE_COVERAGE_INVERT"/>
-		<field name="GL_SAMPLE_COVERAGE_VALUE"/>
-		<field name="GL_SCISSOR_BOX"/>
-		<field name="GL_SHADE_MODEL"/>
-		<field name="GL_SRC0_ALPHA"/>
-		<field name="GL_SRC0_RGB"/>
-		<field name="GL_SRC1_ALPHA"/>
-		<field name="GL_SRC1_RGB"/>
-		<field name="GL_SRC2_ALPHA"/>
-		<field name="GL_SRC2_RGB"/>
-		<field name="GL_STATIC_DRAW"/>
-		<field name="GL_STENCIL_CLEAR_VALUE"/>
-		<field name="GL_STENCIL_FAIL"/>
-		<field name="GL_STENCIL_FUNC"/>
-		<field name="GL_STENCIL_PASS_DEPTH_FAIL"/>
-		<field name="GL_STENCIL_PASS_DEPTH_PASS"/>
-		<field name="GL_STENCIL_REF"/>
-		<field name="GL_STENCIL_VALUE_MASK"/>
-		<field name="GL_STENCIL_WRITEMASK"/>
-		<field name="GL_SUBTRACT"/>
-		<field name="GL_TEXTURE_BINDING_2D"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_POINTER"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_SIZE"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_STRIDE"/>
-		<field name="GL_TEXTURE_COORD_ARRAY_TYPE"/>
-		<field name="GL_TEXTURE_MATRIX"/>
-		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"/>
-		<field name="GL_TEXTURE_STACK_DEPTH"/>
-		<field name="GL_VERTEX_ARRAY_BUFFER_BINDING"/>
-		<field name="GL_VERTEX_ARRAY_POINTER"/>
-		<field name="GL_VERTEX_ARRAY_SIZE"/>
-		<field name="GL_VERTEX_ARRAY_STRIDE"/>
-		<field name="GL_VERTEX_ARRAY_TYPE"/>
-		<field name="GL_VIEWPORT"/>
-		<field name="GL_WRITE_ONLY"/>
-	</class>
-	<class name="javax/microedition/khronos/opengles/GL11Ext" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/microedition/khronos/opengles/GL"/>
-		<method name="glCurrentPaletteMatrixOES(I)V"/>
-		<method name="glDrawTexfOES(FFFFF)V"/>
-		<method name="glDrawTexfvOES(Ljava/nio/FloatBuffer;)V"/>
-		<method name="glDrawTexfvOES([FI)V"/>
-		<method name="glDrawTexiOES(IIIII)V"/>
-		<method name="glDrawTexivOES(Ljava/nio/IntBuffer;)V"/>
-		<method name="glDrawTexivOES([II)V"/>
-		<method name="glDrawTexsOES(SSSSS)V"/>
-		<method name="glDrawTexsvOES(Ljava/nio/ShortBuffer;)V"/>
-		<method name="glDrawTexsvOES([SI)V"/>
-		<method name="glDrawTexxOES(IIIII)V"/>
-		<method name="glDrawTexxvOES(Ljava/nio/IntBuffer;)V"/>
-		<method name="glDrawTexxvOES([II)V"/>
-		<method name="glEnable(I)V"/>
-		<method name="glEnableClientState(I)V"/>
-		<method name="glLoadPaletteFromModelViewMatrixOES()V"/>
-		<method name="glMatrixIndexPointerOES(IIII)V"/>
-		<method name="glMatrixIndexPointerOES(IIILjava/nio/Buffer;)V"/>
-		<method name="glTexParameterfv(II[FI)V"/>
-		<method name="glWeightPointerOES(IIII)V"/>
-		<method name="glWeightPointerOES(IIILjava/nio/Buffer;)V"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_POINTER_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_SIZE_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_STRIDE_OES"/>
-		<field name="GL_MATRIX_INDEX_ARRAY_TYPE_OES"/>
-		<field name="GL_MATRIX_PALETTE_OES"/>
-		<field name="GL_MAX_PALETTE_MATRICES_OES"/>
-		<field name="GL_MAX_VERTEX_UNITS_OES"/>
-		<field name="GL_TEXTURE_CROP_RECT_OES"/>
-		<field name="GL_WEIGHT_ARRAY_BUFFER_BINDING_OES"/>
-		<field name="GL_WEIGHT_ARRAY_OES"/>
-		<field name="GL_WEIGHT_ARRAY_POINTER_OES"/>
-		<field name="GL_WEIGHT_ARRAY_SIZE_OES"/>
-		<field name="GL_WEIGHT_ARRAY_STRIDE_OES"/>
-		<field name="GL_WEIGHT_ARRAY_TYPE_OES"/>
-	</class>
-	<class name="javax/microedition/khronos/opengles/GL11ExtensionPack" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/microedition/khronos/opengles/GL"/>
-		<method name="glBindFramebufferOES(II)V"/>
-		<method name="glBindRenderbufferOES(II)V"/>
-		<method name="glBindTexture(II)V"/>
-		<method name="glBlendEquation(I)V"/>
-		<method name="glBlendEquationSeparate(II)V"/>
-		<method name="glBlendFuncSeparate(IIII)V"/>
-		<method name="glCheckFramebufferStatusOES(I)I"/>
-		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
-		<method name="glCopyTexImage2D(IIIIIIII)V"/>
-		<method name="glDeleteFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteFramebuffersOES(I[II)V"/>
-		<method name="glDeleteRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glDeleteRenderbuffersOES(I[II)V"/>
-		<method name="glEnable(I)V"/>
-		<method name="glFramebufferRenderbufferOES(IIII)V"/>
-		<method name="glFramebufferTexture2DOES(IIIII)V"/>
-		<method name="glGenFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenFramebuffersOES(I[II)V"/>
-		<method name="glGenRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGenRenderbuffersOES(I[II)V"/>
-		<method name="glGenerateMipmapOES(I)V"/>
-		<method name="glGetFramebufferAttachmentParameterivOES(IIILjava/nio/IntBuffer;)V"/>
-		<method name="glGetFramebufferAttachmentParameterivOES(III[II)V"/>
-		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
-		<method name="glGetIntegerv(I[II)V"/>
-		<method name="glGetRenderbufferParameterivOES(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetRenderbufferParameterivOES(II[II)V"/>
-		<method name="glGetTexGenfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glGetTexGenfv(II[FI)V"/>
-		<method name="glGetTexGeniv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexGeniv(II[II)V"/>
-		<method name="glGetTexGenxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glGetTexGenxv(II[II)V"/>
-		<method name="glIsFramebufferOES(I)Z"/>
-		<method name="glIsRenderbufferOES(I)Z"/>
-		<method name="glRenderbufferStorageOES(IIII)V"/>
-		<method name="glStencilOp(III)V"/>
-		<method name="glTexEnvf(IIF)V"/>
-		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexEnvfv(II[FI)V"/>
-		<method name="glTexEnvx(III)V"/>
-		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexEnvxv(II[II)V"/>
-		<method name="glTexGenf(IIF)V"/>
-		<method name="glTexGenfv(IILjava/nio/FloatBuffer;)V"/>
-		<method name="glTexGenfv(II[FI)V"/>
-		<method name="glTexGeni(III)V"/>
-		<method name="glTexGeniv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexGeniv(II[II)V"/>
-		<method name="glTexGenx(III)V"/>
-		<method name="glTexGenxv(IILjava/nio/IntBuffer;)V"/>
-		<method name="glTexGenxv(II[II)V"/>
-		<method name="glTexParameterf(IIF)V"/>
-		<field name="GL_BLEND_DST_ALPHA"/>
-		<field name="GL_BLEND_DST_RGB"/>
-		<field name="GL_BLEND_EQUATION"/>
-		<field name="GL_BLEND_EQUATION_ALPHA"/>
-		<field name="GL_BLEND_EQUATION_RGB"/>
-		<field name="GL_BLEND_SRC_ALPHA"/>
-		<field name="GL_BLEND_SRC_RGB"/>
-		<field name="GL_COLOR_ATTACHMENT0_OES"/>
-		<field name="GL_COLOR_ATTACHMENT10_OES"/>
-		<field name="GL_COLOR_ATTACHMENT11_OES"/>
-		<field name="GL_COLOR_ATTACHMENT12_OES"/>
-		<field name="GL_COLOR_ATTACHMENT13_OES"/>
-		<field name="GL_COLOR_ATTACHMENT14_OES"/>
-		<field name="GL_COLOR_ATTACHMENT15_OES"/>
-		<field name="GL_COLOR_ATTACHMENT1_OES"/>
-		<field name="GL_COLOR_ATTACHMENT2_OES"/>
-		<field name="GL_COLOR_ATTACHMENT3_OES"/>
-		<field name="GL_COLOR_ATTACHMENT4_OES"/>
-		<field name="GL_COLOR_ATTACHMENT5_OES"/>
-		<field name="GL_COLOR_ATTACHMENT6_OES"/>
-		<field name="GL_COLOR_ATTACHMENT7_OES"/>
-		<field name="GL_COLOR_ATTACHMENT8_OES"/>
-		<field name="GL_COLOR_ATTACHMENT9_OES"/>
-		<field name="GL_DECR_WRAP"/>
-		<field name="GL_DEPTH_ATTACHMENT_OES"/>
-		<field name="GL_DEPTH_COMPONENT"/>
-		<field name="GL_DEPTH_COMPONENT16"/>
-		<field name="GL_DEPTH_COMPONENT24"/>
-		<field name="GL_DEPTH_COMPONENT32"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES"/>
-		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES"/>
-		<field name="GL_FRAMEBUFFER_BINDING_OES"/>
-		<field name="GL_FRAMEBUFFER_COMPLETE_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES"/>
-		<field name="GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES"/>
-		<field name="GL_FRAMEBUFFER_OES"/>
-		<field name="GL_FRAMEBUFFER_UNSUPPORTED_OES"/>
-		<field name="GL_FUNC_ADD"/>
-		<field name="GL_FUNC_REVERSE_SUBTRACT"/>
-		<field name="GL_FUNC_SUBTRACT"/>
-		<field name="GL_INCR_WRAP"/>
-		<field name="GL_INVALID_FRAMEBUFFER_OPERATION_OES"/>
-		<field name="GL_MAX_COLOR_ATTACHMENTS_OES"/>
-		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE"/>
-		<field name="GL_MAX_RENDERBUFFER_SIZE_OES"/>
-		<field name="GL_MIRRORED_REPEAT"/>
-		<field name="GL_NORMAL_MAP"/>
-		<field name="GL_REFLECTION_MAP"/>
-		<field name="GL_RENDERBUFFER_ALPHA_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_BINDING_OES"/>
-		<field name="GL_RENDERBUFFER_BLUE_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_DEPTH_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_GREEN_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_HEIGHT_OES"/>
-		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES"/>
-		<field name="GL_RENDERBUFFER_OES"/>
-		<field name="GL_RENDERBUFFER_RED_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_STENCIL_SIZE_OES"/>
-		<field name="GL_RENDERBUFFER_WIDTH_OES"/>
-		<field name="GL_RGB565_OES"/>
-		<field name="GL_RGB5_A1"/>
-		<field name="GL_RGB8"/>
-		<field name="GL_RGBA4"/>
-		<field name="GL_RGBA8"/>
-		<field name="GL_STENCIL_ATTACHMENT_OES"/>
-		<field name="GL_STENCIL_INDEX"/>
-		<field name="GL_STENCIL_INDEX1_OES"/>
-		<field name="GL_STENCIL_INDEX4_OES"/>
-		<field name="GL_STENCIL_INDEX8_OES"/>
-		<field name="GL_STR"/>
-		<field name="GL_TEXTURE_BINDING_CUBE_MAP"/>
-		<field name="GL_TEXTURE_CUBE_MAP"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
-		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/>
-		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/>
-		<field name="GL_TEXTURE_GEN_MODE"/>
-		<field name="GL_TEXTURE_GEN_STR"/>
-	</class>
-	<class name="javax/net/ServerSocketFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createServerSocket()Ljava/net/ServerSocket;"/>
-		<method name="createServerSocket(I)Ljava/net/ServerSocket;"/>
-		<method name="createServerSocket(II)Ljava/net/ServerSocket;"/>
-		<method name="createServerSocket(IILjava/net/InetAddress;)Ljava/net/ServerSocket;"/>
-		<method name="getDefault()Ljavax/net/ServerSocketFactory;"/>
-	</class>
-	<class name="javax/net/SocketFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createSocket()Ljava/net/Socket;"/>
-		<method name="createSocket(Ljava/lang/String;I)Ljava/net/Socket;"/>
-		<method name="createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;"/>
-		<method name="createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;"/>
-		<method name="createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;"/>
-		<method name="getDefault()Ljavax/net/SocketFactory;"/>
-	</class>
-	<class name="javax/net/ssl/CertPathTrustManagerParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/ManagerFactoryParameters"/>
-		<method name="&lt;init>(Ljava/security/cert/CertPathParameters;)V"/>
-		<method name="getParameters()Ljava/security/cert/CertPathParameters;"/>
-	</class>
-	<class name="javax/net/ssl/ExtendedSSLSession" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/SSLSession"/>
-		<method name="&lt;init>()V"/>
-		<method name="getLocalSupportedSignatureAlgorithms()[Ljava/lang/String;"/>
-		<method name="getPeerSupportedSignatureAlgorithms()[Ljava/lang/String;"/>
-		<method name="getRequestedServerNames()Ljava/util/List;"/>
-	</class>
-	<class name="javax/net/ssl/HandshakeCompletedEvent" since="1">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljavax/net/ssl/SSLSocket;Ljavax/net/ssl/SSLSession;)V"/>
-		<method name="getCipherSuite()Ljava/lang/String;"/>
-		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
-		<method name="getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;"/>
-		<method name="getPeerCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
-		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
-		<method name="getSocket()Ljavax/net/ssl/SSLSocket;"/>
-	</class>
-	<class name="javax/net/ssl/HandshakeCompletedListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="handshakeCompleted(Ljavax/net/ssl/HandshakeCompletedEvent;)V"/>
-	</class>
-	<class name="javax/net/ssl/HostnameVerifier" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z"/>
-	</class>
-	<class name="javax/net/ssl/HttpsURLConnection" since="1">
-		<extends name="java/net/HttpURLConnection"/>
-		<method name="&lt;init>(Ljava/net/URL;)V"/>
-		<method name="getCipherSuite()Ljava/lang/String;"/>
-		<method name="getDefaultHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;"/>
-		<method name="getDefaultSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
-		<method name="getHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;"/>
-		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
-		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
-		<method name="getSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
-		<method name="getServerCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="setDefaultHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V"/>
-		<method name="setDefaultSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V"/>
-		<method name="setHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V"/>
-		<method name="setSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V"/>
-		<field name="hostnameVerifier"/>
-	</class>
-	<class name="javax/net/ssl/KeyManager" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="javax/net/ssl/KeyManagerFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/net/ssl/KeyManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getDefaultAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/KeyManagerFactory;"/>
-		<method name="getKeyManagers()[Ljavax/net/ssl/KeyManager;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="init(Ljava/security/KeyStore;[C)V"/>
-		<method name="init(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
-	</class>
-	<class name="javax/net/ssl/KeyManagerFactorySpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGetKeyManagers()[Ljavax/net/ssl/KeyManager;"/>
-		<method name="engineInit(Ljava/security/KeyStore;[C)V"/>
-		<method name="engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
-	</class>
-	<class name="javax/net/ssl/KeyStoreBuilderParameters" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/ManagerFactoryParameters"/>
-		<method name="&lt;init>(Ljava/security/KeyStore$Builder;)V"/>
-		<method name="&lt;init>(Ljava/util/List;)V"/>
-		<method name="getParameters()Ljava/util/List;"/>
-	</class>
-	<class name="javax/net/ssl/ManagerFactoryParameters" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="javax/net/ssl/SNIHostName" since="24">
-		<extends name="javax/net/ssl/SNIServerName"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="createSNIMatcher(Ljava/lang/String;)Ljavax/net/ssl/SNIMatcher;"/>
-		<method name="getAsciiName()Ljava/lang/String;"/>
-	</class>
-	<class name="javax/net/ssl/SNIMatcher" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getType()I"/>
-		<method name="matches(Ljavax/net/ssl/SNIServerName;)Z"/>
-	</class>
-	<class name="javax/net/ssl/SNIServerName" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I[B)V"/>
-		<method name="getEncoded()[B"/>
-		<method name="getType()I"/>
-	</class>
-	<class name="javax/net/ssl/SSLContext" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/net/ssl/SSLContextSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="createSSLEngine()Ljavax/net/ssl/SSLEngine;"/>
-		<method name="createSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;"/>
-		<method name="getClientSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
-		<method name="getDefault()Ljavax/net/ssl/SSLContext;" since="9"/>
-		<method name="getDefaultSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/SSLContext;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/SSLContext;"/>
-		<method name="getProtocol()Ljava/lang/String;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getServerSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
-		<method name="getServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;"/>
-		<method name="getSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
-		<method name="getSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
-		<method name="init([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V"/>
-		<method name="setDefault(Ljavax/net/ssl/SSLContext;)V" since="9"/>
-	</class>
-	<class name="javax/net/ssl/SSLContextSpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineCreateSSLEngine()Ljavax/net/ssl/SSLEngine;"/>
-		<method name="engineCreateSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;"/>
-		<method name="engineGetClientSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
-		<method name="engineGetDefaultSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
-		<method name="engineGetServerSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
-		<method name="engineGetServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;"/>
-		<method name="engineGetSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
-		<method name="engineGetSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
-		<method name="engineInit([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLEngine" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="beginHandshake()V"/>
-		<method name="closeInbound()V"/>
-		<method name="closeOutbound()V"/>
-		<method name="getDelegatedTask()Ljava/lang/Runnable;"/>
-		<method name="getEnableSessionCreation()Z"/>
-		<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
-		<method name="getEnabledProtocols()[Ljava/lang/String;"/>
-		<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24"/>
-		<method name="getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
-		<method name="getNeedClientAuth()Z"/>
-		<method name="getPeerHost()Ljava/lang/String;"/>
-		<method name="getPeerPort()I"/>
-		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
-		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
-		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
-		<method name="getSupportedProtocols()[Ljava/lang/String;"/>
-		<method name="getUseClientMode()Z"/>
-		<method name="getWantClientAuth()Z"/>
-		<method name="isInboundDone()Z"/>
-		<method name="isOutboundDone()Z"/>
-		<method name="setEnableSessionCreation(Z)V"/>
-		<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
-		<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
-		<method name="setNeedClientAuth(Z)V"/>
-		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9"/>
-		<method name="setUseClientMode(Z)V"/>
-		<method name="setWantClientAuth(Z)V"/>
-		<method name="unwrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
-		<method name="unwrap(Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
-		<method name="unwrap(Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;II)Ljavax/net/ssl/SSLEngineResult;"/>
-		<method name="wrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
-		<method name="wrap([Ljava/nio/ByteBuffer;IILjava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
-		<method name="wrap([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
-	</class>
-	<class name="javax/net/ssl/SSLEngineResult" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/net/ssl/SSLEngineResult$Status;Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;II)V"/>
-		<method name="bytesConsumed()I"/>
-		<method name="bytesProduced()I"/>
-		<method name="getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
-		<method name="getStatus()Ljavax/net/ssl/SSLEngineResult$Status;"/>
-	</class>
-	<class name="javax/net/ssl/SSLEngineResult$HandshakeStatus" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
-		<method name="values()[Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
-		<field name="FINISHED"/>
-		<field name="NEED_TASK"/>
-		<field name="NEED_UNWRAP"/>
-		<field name="NEED_WRAP"/>
-		<field name="NOT_HANDSHAKING"/>
-	</class>
-	<class name="javax/net/ssl/SSLEngineResult$Status" since="1">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Ljavax/net/ssl/SSLEngineResult$Status;"/>
-		<method name="values()[Ljavax/net/ssl/SSLEngineResult$Status;"/>
-		<field name="BUFFER_OVERFLOW"/>
-		<field name="BUFFER_UNDERFLOW"/>
-		<field name="CLOSED"/>
-		<field name="OK"/>
-	</class>
-	<class name="javax/net/ssl/SSLException" since="1">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLHandshakeException" since="1">
-		<extends name="javax/net/ssl/SSLException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLKeyException" since="1">
-		<extends name="javax/net/ssl/SSLException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLParameters" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([Ljava/lang/String;)V"/>
-		<method name="&lt;init>([Ljava/lang/String;[Ljava/lang/String;)V"/>
-		<method name="getAlgorithmConstraints()Ljava/security/AlgorithmConstraints;" since="24"/>
-		<method name="getCipherSuites()[Ljava/lang/String;"/>
-		<method name="getEndpointIdentificationAlgorithm()Ljava/lang/String;" since="24"/>
-		<method name="getNeedClientAuth()Z"/>
-		<method name="getProtocols()[Ljava/lang/String;"/>
-		<method name="getSNIMatchers()Ljava/util/Collection;" since="24"/>
-		<method name="getServerNames()Ljava/util/List;" since="24"/>
-		<method name="getUseCipherSuitesOrder()Z" since="24"/>
-		<method name="getWantClientAuth()Z"/>
-		<method name="setAlgorithmConstraints(Ljava/security/AlgorithmConstraints;)V" since="24"/>
-		<method name="setCipherSuites([Ljava/lang/String;)V"/>
-		<method name="setEndpointIdentificationAlgorithm(Ljava/lang/String;)V" since="24"/>
-		<method name="setNeedClientAuth(Z)V"/>
-		<method name="setProtocols([Ljava/lang/String;)V"/>
-		<method name="setSNIMatchers(Ljava/util/Collection;)V" since="24"/>
-		<method name="setServerNames(Ljava/util/List;)V" since="24"/>
-		<method name="setUseCipherSuitesOrder(Z)V" since="24"/>
-		<method name="setWantClientAuth(Z)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLPeerUnverifiedException" since="1">
-		<extends name="javax/net/ssl/SSLException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLProtocolException" since="1">
-		<extends name="javax/net/ssl/SSLException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLServerSocket" since="1">
-		<extends name="java/net/ServerSocket"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="&lt;init>(IILjava/net/InetAddress;)V"/>
-		<method name="getEnableSessionCreation()Z"/>
-		<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
-		<method name="getEnabledProtocols()[Ljava/lang/String;"/>
-		<method name="getNeedClientAuth()Z"/>
-		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="24"/>
-		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
-		<method name="getSupportedProtocols()[Ljava/lang/String;"/>
-		<method name="getUseClientMode()Z"/>
-		<method name="getWantClientAuth()Z"/>
-		<method name="setEnableSessionCreation(Z)V"/>
-		<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
-		<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
-		<method name="setNeedClientAuth(Z)V"/>
-		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="24"/>
-		<method name="setUseClientMode(Z)V"/>
-		<method name="setWantClientAuth(Z)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLServerSocketFactory" since="1">
-		<extends name="javax/net/ServerSocketFactory"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultCipherSuites()[Ljava/lang/String;"/>
-		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
-	</class>
-	<class name="javax/net/ssl/SSLSession" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getApplicationBufferSize()I"/>
-		<method name="getCipherSuite()Ljava/lang/String;"/>
-		<method name="getCreationTime()J"/>
-		<method name="getId()[B"/>
-		<method name="getLastAccessedTime()J"/>
-		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
-		<method name="getPacketBufferSize()I"/>
-		<method name="getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;"/>
-		<method name="getPeerCertificates()[Ljava/security/cert/Certificate;"/>
-		<method name="getPeerHost()Ljava/lang/String;"/>
-		<method name="getPeerPort()I"/>
-		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
-		<method name="getProtocol()Ljava/lang/String;"/>
-		<method name="getSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
-		<method name="getValue(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getValueNames()[Ljava/lang/String;"/>
-		<method name="invalidate()V"/>
-		<method name="isValid()Z"/>
-		<method name="putValue(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="removeValue(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLSessionBindingEvent" since="1">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljavax/net/ssl/SSLSession;Ljava/lang/String;)V"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
-	</class>
-	<class name="javax/net/ssl/SSLSessionBindingListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="valueBound(Ljavax/net/ssl/SSLSessionBindingEvent;)V"/>
-		<method name="valueUnbound(Ljavax/net/ssl/SSLSessionBindingEvent;)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLSessionContext" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getIds()Ljava/util/Enumeration;"/>
-		<method name="getSession([B)Ljavax/net/ssl/SSLSession;"/>
-		<method name="getSessionCacheSize()I"/>
-		<method name="getSessionTimeout()I"/>
-		<method name="setSessionCacheSize(I)V"/>
-		<method name="setSessionTimeout(I)V"/>
-	</class>
-	<class name="javax/net/ssl/SSLSocket" since="1">
-		<extends name="java/net/Socket"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/net/InetAddress;I)V"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
-		<method name="&lt;init>(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V"/>
-		<method name="addHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V"/>
-		<method name="getEnableSessionCreation()Z"/>
-		<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
-		<method name="getEnabledProtocols()[Ljava/lang/String;"/>
-		<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24"/>
-		<method name="getNeedClientAuth()Z"/>
-		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
-		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
-		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
-		<method name="getSupportedProtocols()[Ljava/lang/String;"/>
-		<method name="getUseClientMode()Z"/>
-		<method name="getWantClientAuth()Z"/>
-		<method name="removeHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V"/>
-		<method name="setEnableSessionCreation(Z)V"/>
-		<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
-		<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
-		<method name="setNeedClientAuth(Z)V"/>
-		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9"/>
-		<method name="setUseClientMode(Z)V"/>
-		<method name="setWantClientAuth(Z)V"/>
-		<method name="startHandshake()V"/>
-	</class>
-	<class name="javax/net/ssl/SSLSocketFactory" since="1">
-		<extends name="javax/net/SocketFactory"/>
-		<method name="&lt;init>()V"/>
-		<method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;"/>
-		<method name="getDefaultCipherSuites()[Ljava/lang/String;"/>
-		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
-	</class>
-	<class name="javax/net/ssl/StandardConstants" since="24">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="SNI_HOST_NAME"/>
-	</class>
-	<class name="javax/net/ssl/TrustManager" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="javax/net/ssl/TrustManagerFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljavax/net/ssl/TrustManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
-		<method name="getAlgorithm()Ljava/lang/String;"/>
-		<method name="getDefaultAlgorithm()Ljava/lang/String;"/>
-		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;"/>
-		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/TrustManagerFactory;"/>
-		<method name="getProvider()Ljava/security/Provider;"/>
-		<method name="getTrustManagers()[Ljavax/net/ssl/TrustManager;"/>
-		<method name="init(Ljava/security/KeyStore;)V"/>
-		<method name="init(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
-	</class>
-	<class name="javax/net/ssl/TrustManagerFactorySpi" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="engineGetTrustManagers()[Ljavax/net/ssl/TrustManager;"/>
-		<method name="engineInit(Ljava/security/KeyStore;)V"/>
-		<method name="engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
-	</class>
-	<class name="javax/net/ssl/X509ExtendedKeyManager" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/X509KeyManager"/>
-		<method name="&lt;init>()V"/>
-		<method name="chooseEngineClientAlias([Ljava/lang/String;[Ljava/security/Principal;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
-		<method name="chooseEngineServerAlias(Ljava/lang/String;[Ljava/security/Principal;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
-	</class>
-	<class name="javax/net/ssl/X509ExtendedTrustManager" since="24">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/X509TrustManager"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V"/>
-		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V"/>
-		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V"/>
-		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V"/>
-	</class>
-	<class name="javax/net/ssl/X509KeyManager" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/KeyManager"/>
-		<method name="chooseClientAlias([Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;"/>
-		<method name="chooseServerAlias(Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;"/>
-		<method name="getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/X509Certificate;"/>
-		<method name="getClientAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;"/>
-		<method name="getPrivateKey(Ljava/lang/String;)Ljava/security/PrivateKey;"/>
-		<method name="getServerAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;"/>
-	</class>
-	<class name="javax/net/ssl/X509TrustManager" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/TrustManager"/>
-		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V"/>
-		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V"/>
-		<method name="getAcceptedIssuers()[Ljava/security/cert/X509Certificate;"/>
-	</class>
-	<class name="javax/security/auth/AuthPermission" since="1">
-		<extends name="java/security/BasicPermission"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/auth/DestroyFailedException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/auth/Destroyable" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="destroy()V"/>
-		<method name="isDestroyed()Z"/>
-	</class>
-	<class name="javax/security/auth/PrivateCredentialPermission" since="1">
-		<extends name="java/security/Permission"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getCredentialClass()Ljava/lang/String;"/>
-		<method name="getPrincipals()[[Ljava/lang/String;"/>
-	</class>
-	<class name="javax/security/auth/Subject" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(ZLjava/util/Set;Ljava/util/Set;Ljava/util/Set;)V"/>
-		<method name="doAs(Ljavax/security/auth/Subject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;"/>
-		<method name="doAs(Ljavax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;"/>
-		<method name="doAsPrivileged(Ljavax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
-		<method name="doAsPrivileged(Ljavax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
-		<method name="getPrincipals()Ljava/util/Set;"/>
-		<method name="getPrincipals(Ljava/lang/Class;)Ljava/util/Set;"/>
-		<method name="getPrivateCredentials()Ljava/util/Set;"/>
-		<method name="getPrivateCredentials(Ljava/lang/Class;)Ljava/util/Set;"/>
-		<method name="getPublicCredentials()Ljava/util/Set;"/>
-		<method name="getPublicCredentials(Ljava/lang/Class;)Ljava/util/Set;"/>
-		<method name="getSubject(Ljava/security/AccessControlContext;)Ljavax/security/auth/Subject;"/>
-		<method name="isReadOnly()Z"/>
-		<method name="setReadOnly()V"/>
-	</class>
-	<class name="javax/security/auth/SubjectDomainCombiner" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/DomainCombiner"/>
-		<method name="&lt;init>(Ljavax/security/auth/Subject;)V"/>
-		<method name="getSubject()Ljavax/security/auth/Subject;"/>
-	</class>
-	<class name="javax/security/auth/callback/Callback" since="1">
-		<extends name="java/lang/Object"/>
-	</class>
-	<class name="javax/security/auth/callback/CallbackHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="handle([Ljavax/security/auth/callback/Callback;)V"/>
-	</class>
-	<class name="javax/security/auth/callback/PasswordCallback" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="javax/security/auth/callback/Callback"/>
-		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
-		<method name="clearPassword()V"/>
-		<method name="getPassword()[C"/>
-		<method name="getPrompt()Ljava/lang/String;"/>
-		<method name="isEchoOn()Z"/>
-		<method name="setPassword([C)V"/>
-	</class>
-	<class name="javax/security/auth/callback/UnsupportedCallbackException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljavax/security/auth/callback/Callback;)V"/>
-		<method name="&lt;init>(Ljavax/security/auth/callback/Callback;Ljava/lang/String;)V"/>
-		<method name="getCallback()Ljavax/security/auth/callback/Callback;"/>
-	</class>
-	<class name="javax/security/auth/login/LoginException" since="1">
-		<extends name="java/security/GeneralSecurityException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/auth/x500/X500Principal" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/security/Principal"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;)V" since="9"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="getEncoded()[B"/>
-		<method name="getName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getName(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/String;" since="9"/>
-		<field name="CANONICAL"/>
-		<field name="RFC1779"/>
-		<field name="RFC2253"/>
-	</class>
-	<class name="javax/security/cert/Certificate" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getEncoded()[B"/>
-		<method name="getPublicKey()Ljava/security/PublicKey;"/>
-		<method name="verify(Ljava/security/PublicKey;)V"/>
-		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/cert/CertificateEncodingException" since="1">
-		<extends name="javax/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/cert/CertificateException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/cert/CertificateExpiredException" since="1">
-		<extends name="javax/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/cert/CertificateNotYetValidException" since="1">
-		<extends name="javax/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/cert/CertificateParsingException" since="1">
-		<extends name="javax/security/cert/CertificateException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/security/cert/X509Certificate" since="1">
-		<extends name="javax/security/cert/Certificate"/>
-		<method name="&lt;init>()V"/>
-		<method name="checkValidity()V"/>
-		<method name="checkValidity(Ljava/util/Date;)V"/>
-		<method name="getInstance(Ljava/io/InputStream;)Ljavax/security/cert/X509Certificate;"/>
-		<method name="getInstance([B)Ljavax/security/cert/X509Certificate;"/>
-		<method name="getIssuerDN()Ljava/security/Principal;"/>
-		<method name="getNotAfter()Ljava/util/Date;"/>
-		<method name="getNotBefore()Ljava/util/Date;"/>
-		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
-		<method name="getSigAlgName()Ljava/lang/String;"/>
-		<method name="getSigAlgOID()Ljava/lang/String;"/>
-		<method name="getSigAlgParams()[B"/>
-		<method name="getSubjectDN()Ljava/security/Principal;"/>
-		<method name="getVersion()I"/>
-	</class>
-	<class name="javax/sql/CommonDataSource" since="9">
-		<extends name="java/lang/Object"/>
-		<method name="getLogWriter()Ljava/io/PrintWriter;"/>
-		<method name="getLoginTimeout()I"/>
-		<method name="getParentLogger()Ljava/util/logging/Logger;" since="24"/>
-		<method name="setLogWriter(Ljava/io/PrintWriter;)V"/>
-		<method name="setLoginTimeout(I)V"/>
-	</class>
-	<class name="javax/sql/ConnectionEvent" since="1">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljavax/sql/PooledConnection;)V"/>
-		<method name="&lt;init>(Ljavax/sql/PooledConnection;Ljava/sql/SQLException;)V"/>
-		<method name="getSQLException()Ljava/sql/SQLException;"/>
-	</class>
-	<class name="javax/sql/ConnectionEventListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="connectionClosed(Ljavax/sql/ConnectionEvent;)V"/>
-		<method name="connectionErrorOccurred(Ljavax/sql/ConnectionEvent;)V"/>
-	</class>
-	<class name="javax/sql/ConnectionPoolDataSource" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/sql/CommonDataSource" since="9"/>
-		<method name="getLogWriter()Ljava/io/PrintWriter;" removed="9"/>
-		<method name="getLoginTimeout()I" removed="9"/>
-		<method name="getPooledConnection()Ljavax/sql/PooledConnection;"/>
-		<method name="getPooledConnection(Ljava/lang/String;Ljava/lang/String;)Ljavax/sql/PooledConnection;"/>
-		<method name="setLogWriter(Ljava/io/PrintWriter;)V" removed="9"/>
-		<method name="setLoginTimeout(I)V" removed="9"/>
-	</class>
-	<class name="javax/sql/DataSource" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/Wrapper" since="9"/>
-		<implements name="javax/sql/CommonDataSource" since="9"/>
-		<method name="getConnection()Ljava/sql/Connection;"/>
-		<method name="getConnection(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;"/>
-		<method name="getLogWriter()Ljava/io/PrintWriter;" removed="9"/>
-		<method name="getLoginTimeout()I" removed="9"/>
-		<method name="setLogWriter(Ljava/io/PrintWriter;)V" removed="9"/>
-		<method name="setLoginTimeout(I)V" removed="9"/>
-	</class>
-	<class name="javax/sql/PooledConnection" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="addConnectionEventListener(Ljavax/sql/ConnectionEventListener;)V"/>
-		<method name="addStatementEventListener(Ljavax/sql/StatementEventListener;)V" since="9"/>
-		<method name="close()V"/>
-		<method name="getConnection()Ljava/sql/Connection;"/>
-		<method name="removeConnectionEventListener(Ljavax/sql/ConnectionEventListener;)V"/>
-		<method name="removeStatementEventListener(Ljavax/sql/StatementEventListener;)V" since="9"/>
-	</class>
-	<class name="javax/sql/RowSet" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/ResultSet"/>
-		<method name="addRowSetListener(Ljavax/sql/RowSetListener;)V"/>
-		<method name="clearParameters()V"/>
-		<method name="execute()V"/>
-		<method name="getCommand()Ljava/lang/String;"/>
-		<method name="getDataSourceName()Ljava/lang/String;"/>
-		<method name="getEscapeProcessing()Z"/>
-		<method name="getMaxFieldSize()I"/>
-		<method name="getMaxRows()I"/>
-		<method name="getPassword()Ljava/lang/String;"/>
-		<method name="getQueryTimeout()I"/>
-		<method name="getTransactionIsolation()I"/>
-		<method name="getTypeMap()Ljava/util/Map;"/>
-		<method name="getUrl()Ljava/lang/String;"/>
-		<method name="getUsername()Ljava/lang/String;"/>
-		<method name="isReadOnly()Z"/>
-		<method name="removeRowSetListener(Ljavax/sql/RowSetListener;)V"/>
-		<method name="setArray(ILjava/sql/Array;)V"/>
-		<method name="setAsciiStream(ILjava/io/InputStream;)V" since="9"/>
-		<method name="setAsciiStream(ILjava/io/InputStream;I)V"/>
-		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V" since="9"/>
-		<method name="setBigDecimal(ILjava/math/BigDecimal;)V"/>
-		<method name="setBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V" since="9"/>
-		<method name="setBinaryStream(ILjava/io/InputStream;)V" since="9"/>
-		<method name="setBinaryStream(ILjava/io/InputStream;I)V"/>
-		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V" since="9"/>
-		<method name="setBlob(ILjava/io/InputStream;)V" since="9"/>
-		<method name="setBlob(ILjava/io/InputStream;J)V" since="9"/>
-		<method name="setBlob(ILjava/sql/Blob;)V"/>
-		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
-		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
-		<method name="setBlob(Ljava/lang/String;Ljava/sql/Blob;)V" since="9"/>
-		<method name="setBoolean(IZ)V"/>
-		<method name="setBoolean(Ljava/lang/String;Z)V" since="9"/>
-		<method name="setByte(IB)V"/>
-		<method name="setByte(Ljava/lang/String;B)V" since="9"/>
-		<method name="setBytes(I[B)V"/>
-		<method name="setBytes(Ljava/lang/String;[B)V" since="9"/>
-		<method name="setCharacterStream(ILjava/io/Reader;)V" since="9"/>
-		<method name="setCharacterStream(ILjava/io/Reader;I)V"/>
-		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V" since="9"/>
-		<method name="setClob(ILjava/io/Reader;)V" since="9"/>
-		<method name="setClob(ILjava/io/Reader;J)V" since="9"/>
-		<method name="setClob(ILjava/sql/Clob;)V"/>
-		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="setClob(Ljava/lang/String;Ljava/sql/Clob;)V" since="9"/>
-		<method name="setCommand(Ljava/lang/String;)V"/>
-		<method name="setConcurrency(I)V"/>
-		<method name="setDataSourceName(Ljava/lang/String;)V"/>
-		<method name="setDate(ILjava/sql/Date;)V"/>
-		<method name="setDate(ILjava/sql/Date;Ljava/util/Calendar;)V"/>
-		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;)V" since="9"/>
-		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;Ljava/util/Calendar;)V" since="9"/>
-		<method name="setDouble(ID)V"/>
-		<method name="setDouble(Ljava/lang/String;D)V" since="9"/>
-		<method name="setEscapeProcessing(Z)V"/>
-		<method name="setFloat(IF)V"/>
-		<method name="setFloat(Ljava/lang/String;F)V" since="9"/>
-		<method name="setInt(II)V"/>
-		<method name="setInt(Ljava/lang/String;I)V" since="9"/>
-		<method name="setLong(IJ)V"/>
-		<method name="setLong(Ljava/lang/String;J)V" since="9"/>
-		<method name="setMaxFieldSize(I)V"/>
-		<method name="setMaxRows(I)V"/>
-		<method name="setNCharacterStream(ILjava/io/Reader;)V" since="9"/>
-		<method name="setNCharacterStream(ILjava/io/Reader;J)V" since="9"/>
-		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="setNClob(ILjava/io/Reader;)V" since="9"/>
-		<method name="setNClob(ILjava/io/Reader;J)V" since="9"/>
-		<method name="setNClob(ILjava/sql/NClob;)V" since="9"/>
-		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
-		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
-		<method name="setNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9"/>
-		<method name="setNString(ILjava/lang/String;)V" since="9"/>
-		<method name="setNString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
-		<method name="setNull(II)V"/>
-		<method name="setNull(IILjava/lang/String;)V"/>
-		<method name="setNull(Ljava/lang/String;I)V" since="9"/>
-		<method name="setNull(Ljava/lang/String;ILjava/lang/String;)V" since="9"/>
-		<method name="setObject(ILjava/lang/Object;)V"/>
-		<method name="setObject(ILjava/lang/Object;I)V"/>
-		<method name="setObject(ILjava/lang/Object;II)V"/>
-		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;)V" since="9"/>
-		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;I)V" since="9"/>
-		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;II)V" since="9"/>
-		<method name="setPassword(Ljava/lang/String;)V"/>
-		<method name="setQueryTimeout(I)V"/>
-		<method name="setReadOnly(Z)V"/>
-		<method name="setRef(ILjava/sql/Ref;)V"/>
-		<method name="setRowId(ILjava/sql/RowId;)V" since="9"/>
-		<method name="setRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9"/>
-		<method name="setSQLXML(ILjava/sql/SQLXML;)V" since="9"/>
-		<method name="setSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9"/>
-		<method name="setShort(IS)V"/>
-		<method name="setShort(Ljava/lang/String;S)V" since="9"/>
-		<method name="setString(ILjava/lang/String;)V"/>
-		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
-		<method name="setTime(ILjava/sql/Time;)V"/>
-		<method name="setTime(ILjava/sql/Time;Ljava/util/Calendar;)V"/>
-		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;)V" since="9"/>
-		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;Ljava/util/Calendar;)V" since="9"/>
-		<method name="setTimestamp(ILjava/sql/Timestamp;)V"/>
-		<method name="setTimestamp(ILjava/sql/Timestamp;Ljava/util/Calendar;)V"/>
-		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V" since="9"/>
-		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;Ljava/util/Calendar;)V" since="9"/>
-		<method name="setTransactionIsolation(I)V"/>
-		<method name="setType(I)V"/>
-		<method name="setTypeMap(Ljava/util/Map;)V"/>
-		<method name="setURL(ILjava/net/URL;)V" since="9"/>
-		<method name="setUrl(Ljava/lang/String;)V"/>
-		<method name="setUsername(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/sql/RowSetEvent" since="1">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljavax/sql/RowSet;)V"/>
-	</class>
-	<class name="javax/sql/RowSetInternal" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getConnection()Ljava/sql/Connection;"/>
-		<method name="getOriginal()Ljava/sql/ResultSet;"/>
-		<method name="getOriginalRow()Ljava/sql/ResultSet;"/>
-		<method name="getParams()[Ljava/lang/Object;"/>
-		<method name="setMetaData(Ljavax/sql/RowSetMetaData;)V"/>
-	</class>
-	<class name="javax/sql/RowSetListener" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="cursorMoved(Ljavax/sql/RowSetEvent;)V"/>
-		<method name="rowChanged(Ljavax/sql/RowSetEvent;)V"/>
-		<method name="rowSetChanged(Ljavax/sql/RowSetEvent;)V"/>
-	</class>
-	<class name="javax/sql/RowSetMetaData" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="java/sql/ResultSetMetaData"/>
-		<method name="setAutoIncrement(IZ)V"/>
-		<method name="setCaseSensitive(IZ)V"/>
-		<method name="setCatalogName(ILjava/lang/String;)V"/>
-		<method name="setColumnCount(I)V"/>
-		<method name="setColumnDisplaySize(II)V"/>
-		<method name="setColumnLabel(ILjava/lang/String;)V"/>
-		<method name="setColumnName(ILjava/lang/String;)V"/>
-		<method name="setColumnType(II)V"/>
-		<method name="setColumnTypeName(ILjava/lang/String;)V"/>
-		<method name="setCurrency(IZ)V"/>
-		<method name="setNullable(II)V"/>
-		<method name="setPrecision(II)V"/>
-		<method name="setScale(II)V"/>
-		<method name="setSchemaName(ILjava/lang/String;)V"/>
-		<method name="setSearchable(IZ)V"/>
-		<method name="setSigned(IZ)V"/>
-		<method name="setTableName(ILjava/lang/String;)V"/>
-	</class>
-	<class name="javax/sql/RowSetReader" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="readData(Ljavax/sql/RowSetInternal;)V"/>
-	</class>
-	<class name="javax/sql/RowSetWriter" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="writeData(Ljavax/sql/RowSetInternal;)Z"/>
-	</class>
-	<class name="javax/sql/StatementEvent" since="9">
-		<extends name="java/util/EventObject"/>
-		<method name="&lt;init>(Ljavax/sql/PooledConnection;Ljava/sql/PreparedStatement;)V"/>
-		<method name="&lt;init>(Ljavax/sql/PooledConnection;Ljava/sql/PreparedStatement;Ljava/sql/SQLException;)V"/>
-		<method name="getSQLException()Ljava/sql/SQLException;"/>
-		<method name="getStatement()Ljava/sql/PreparedStatement;"/>
-	</class>
-	<class name="javax/sql/StatementEventListener" since="9">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/EventListener"/>
-		<method name="statementClosed(Ljavax/sql/StatementEvent;)V"/>
-		<method name="statementErrorOccurred(Ljavax/sql/StatementEvent;)V"/>
-	</class>
-	<class name="javax/xml/XMLConstants" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="DEFAULT_NS_PREFIX"/>
-		<field name="FEATURE_SECURE_PROCESSING"/>
-		<field name="NULL_NS_URI"/>
-		<field name="RELAXNG_NS_URI"/>
-		<field name="W3C_XML_SCHEMA_INSTANCE_NS_URI"/>
-		<field name="W3C_XML_SCHEMA_NS_URI"/>
-		<field name="W3C_XPATH_DATATYPE_NS_URI"/>
-		<field name="XMLNS_ATTRIBUTE"/>
-		<field name="XMLNS_ATTRIBUTE_NS_URI"/>
-		<field name="XML_DTD_NS_URI"/>
-		<field name="XML_NS_PREFIX"/>
-		<field name="XML_NS_URI"/>
-	</class>
-	<class name="javax/xml/datatype/DatatypeConfigurationException" since="8">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="javax/xml/datatype/DatatypeConstants" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="APRIL"/>
-		<field name="AUGUST"/>
-		<field name="DATE"/>
-		<field name="DATETIME"/>
-		<field name="DAYS"/>
-		<field name="DECEMBER"/>
-		<field name="DURATION"/>
-		<field name="DURATION_DAYTIME"/>
-		<field name="DURATION_YEARMONTH"/>
-		<field name="EQUAL"/>
-		<field name="FEBRUARY"/>
-		<field name="FIELD_UNDEFINED"/>
-		<field name="GDAY"/>
-		<field name="GMONTH"/>
-		<field name="GMONTHDAY"/>
-		<field name="GREATER"/>
-		<field name="GYEAR"/>
-		<field name="GYEARMONTH"/>
-		<field name="HOURS"/>
-		<field name="INDETERMINATE"/>
-		<field name="JANUARY"/>
-		<field name="JULY"/>
-		<field name="JUNE"/>
-		<field name="LESSER"/>
-		<field name="MARCH"/>
-		<field name="MAX_TIMEZONE_OFFSET"/>
-		<field name="MAY"/>
-		<field name="MINUTES"/>
-		<field name="MIN_TIMEZONE_OFFSET"/>
-		<field name="MONTHS"/>
-		<field name="NOVEMBER"/>
-		<field name="OCTOBER"/>
-		<field name="SECONDS"/>
-		<field name="SEPTEMBER"/>
-		<field name="TIME"/>
-		<field name="YEARS"/>
-	</class>
-	<class name="javax/xml/datatype/DatatypeConstants$Field" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" removed="29"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V" since="29"/>
-		<method name="getId()I"/>
-	</class>
-	<class name="javax/xml/datatype/DatatypeFactory" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="newDuration(J)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDuration(Ljava/lang/String;)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDuration(ZIIIIII)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDuration(ZLjava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigDecimal;)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationDayTime(J)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationDayTime(Ljava/lang/String;)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationDayTime(ZIIII)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationDayTime(ZLjava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationYearMonth(J)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationYearMonth(Ljava/lang/String;)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationYearMonth(ZII)Ljavax/xml/datatype/Duration;"/>
-		<method name="newDurationYearMonth(ZLjava/math/BigInteger;Ljava/math/BigInteger;)Ljavax/xml/datatype/Duration;"/>
-		<method name="newInstance()Ljavax/xml/datatype/DatatypeFactory;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/datatype/DatatypeFactory;" since="9"/>
-		<method name="newXMLGregorianCalendar()Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendar(IIIIIIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendar(Ljava/lang/String;)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendar(Ljava/math/BigInteger;IIIIILjava/math/BigDecimal;I)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendar(Ljava/util/GregorianCalendar;)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendarDate(IIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendarTime(IIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendarTime(IIIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="newXMLGregorianCalendarTime(IIILjava/math/BigDecimal;I)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<field name="DATATYPEFACTORY_IMPLEMENTATION_CLASS"/>
-		<field name="DATATYPEFACTORY_PROPERTY"/>
-	</class>
-	<class name="javax/xml/datatype/Duration" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(Ljavax/xml/datatype/Duration;)Ljavax/xml/datatype/Duration;"/>
-		<method name="addTo(Ljava/util/Calendar;)V"/>
-		<method name="addTo(Ljava/util/Date;)V"/>
-		<method name="compare(Ljavax/xml/datatype/Duration;)I"/>
-		<method name="getDays()I"/>
-		<method name="getField(Ljavax/xml/datatype/DatatypeConstants$Field;)Ljava/lang/Number;"/>
-		<method name="getHours()I"/>
-		<method name="getMinutes()I"/>
-		<method name="getMonths()I"/>
-		<method name="getSeconds()I"/>
-		<method name="getSign()I"/>
-		<method name="getTimeInMillis(Ljava/util/Calendar;)J"/>
-		<method name="getTimeInMillis(Ljava/util/Date;)J"/>
-		<method name="getXMLSchemaType()Ljavax/xml/namespace/QName;"/>
-		<method name="getYears()I"/>
-		<method name="isLongerThan(Ljavax/xml/datatype/Duration;)Z"/>
-		<method name="isSet(Ljavax/xml/datatype/DatatypeConstants$Field;)Z"/>
-		<method name="isShorterThan(Ljavax/xml/datatype/Duration;)Z"/>
-		<method name="multiply(I)Ljavax/xml/datatype/Duration;"/>
-		<method name="multiply(Ljava/math/BigDecimal;)Ljavax/xml/datatype/Duration;"/>
-		<method name="negate()Ljavax/xml/datatype/Duration;"/>
-		<method name="normalizeWith(Ljava/util/Calendar;)Ljavax/xml/datatype/Duration;"/>
-		<method name="subtract(Ljavax/xml/datatype/Duration;)Ljavax/xml/datatype/Duration;"/>
-	</class>
-	<class name="javax/xml/datatype/XMLGregorianCalendar" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(Ljavax/xml/datatype/Duration;)V"/>
-		<method name="clear()V"/>
-		<method name="compare(Ljavax/xml/datatype/XMLGregorianCalendar;)I"/>
-		<method name="getDay()I"/>
-		<method name="getEon()Ljava/math/BigInteger;"/>
-		<method name="getEonAndYear()Ljava/math/BigInteger;"/>
-		<method name="getFractionalSecond()Ljava/math/BigDecimal;"/>
-		<method name="getHour()I"/>
-		<method name="getMillisecond()I"/>
-		<method name="getMinute()I"/>
-		<method name="getMonth()I"/>
-		<method name="getSecond()I"/>
-		<method name="getTimeZone(I)Ljava/util/TimeZone;"/>
-		<method name="getTimezone()I"/>
-		<method name="getXMLSchemaType()Ljavax/xml/namespace/QName;"/>
-		<method name="getYear()I"/>
-		<method name="isValid()Z"/>
-		<method name="normalize()Ljavax/xml/datatype/XMLGregorianCalendar;"/>
-		<method name="reset()V"/>
-		<method name="setDay(I)V"/>
-		<method name="setFractionalSecond(Ljava/math/BigDecimal;)V"/>
-		<method name="setHour(I)V"/>
-		<method name="setMillisecond(I)V"/>
-		<method name="setMinute(I)V"/>
-		<method name="setMonth(I)V"/>
-		<method name="setSecond(I)V"/>
-		<method name="setTime(III)V"/>
-		<method name="setTime(IIII)V"/>
-		<method name="setTime(IIILjava/math/BigDecimal;)V"/>
-		<method name="setTimezone(I)V"/>
-		<method name="setYear(I)V"/>
-		<method name="setYear(Ljava/math/BigInteger;)V"/>
-		<method name="toGregorianCalendar()Ljava/util/GregorianCalendar;"/>
-		<method name="toGregorianCalendar(Ljava/util/TimeZone;Ljava/util/Locale;Ljavax/xml/datatype/XMLGregorianCalendar;)Ljava/util/GregorianCalendar;"/>
-		<method name="toXMLFormat()Ljava/lang/String;"/>
-	</class>
-	<class name="javax/xml/namespace/NamespaceContext" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getNamespaceURI(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getPrefix(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getPrefixes(Ljava/lang/String;)Ljava/util/Iterator;"/>
-	</class>
-	<class name="javax/xml/namespace/QName" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getLocalPart()Ljava/lang/String;"/>
-		<method name="getNamespaceURI()Ljava/lang/String;"/>
-		<method name="getPrefix()Ljava/lang/String;"/>
-		<method name="valueOf(Ljava/lang/String;)Ljavax/xml/namespace/QName;"/>
-	</class>
-	<class name="javax/xml/parsers/DocumentBuilder" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDOMImplementation()Lorg/w3c/dom/DOMImplementation;"/>
-		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
-		<method name="isNamespaceAware()Z"/>
-		<method name="isValidating()Z"/>
-		<method name="isXIncludeAware()Z"/>
-		<method name="newDocument()Lorg/w3c/dom/Document;"/>
-		<method name="parse(Ljava/io/File;)Lorg/w3c/dom/Document;"/>
-		<method name="parse(Ljava/io/InputStream;)Lorg/w3c/dom/Document;"/>
-		<method name="parse(Ljava/io/InputStream;Ljava/lang/String;)Lorg/w3c/dom/Document;"/>
-		<method name="parse(Ljava/lang/String;)Lorg/w3c/dom/Document;"/>
-		<method name="parse(Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;"/>
-		<method name="reset()V"/>
-		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V"/>
-		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
-	</class>
-	<class name="javax/xml/parsers/DocumentBuilderFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
-		<method name="isCoalescing()Z"/>
-		<method name="isExpandEntityReferences()Z"/>
-		<method name="isIgnoringComments()Z"/>
-		<method name="isIgnoringElementContentWhitespace()Z"/>
-		<method name="isNamespaceAware()Z"/>
-		<method name="isValidating()Z"/>
-		<method name="isXIncludeAware()Z"/>
-		<method name="newDocumentBuilder()Ljavax/xml/parsers/DocumentBuilder;"/>
-		<method name="newInstance()Ljavax/xml/parsers/DocumentBuilderFactory;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/DocumentBuilderFactory;" since="9"/>
-		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setCoalescing(Z)V"/>
-		<method name="setExpandEntityReferences(Z)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setIgnoringComments(Z)V"/>
-		<method name="setIgnoringElementContentWhitespace(Z)V"/>
-		<method name="setNamespaceAware(Z)V"/>
-		<method name="setSchema(Ljavax/xml/validation/Schema;)V" since="8"/>
-		<method name="setValidating(Z)V"/>
-		<method name="setXIncludeAware(Z)V"/>
-	</class>
-	<class name="javax/xml/parsers/FactoryConfigurationError" since="1">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getException()Ljava/lang/Exception;"/>
-	</class>
-	<class name="javax/xml/parsers/ParserConfigurationException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/xml/parsers/SAXParser" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getParser()Lorg/xml/sax/Parser;"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
-		<method name="getXMLReader()Lorg/xml/sax/XMLReader;"/>
-		<method name="isNamespaceAware()Z"/>
-		<method name="isValidating()Z"/>
-		<method name="isXIncludeAware()Z"/>
-		<method name="parse(Ljava/io/File;Lorg/xml/sax/HandlerBase;)V"/>
-		<method name="parse(Ljava/io/File;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
-		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/HandlerBase;)V"/>
-		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/HandlerBase;Ljava/lang/String;)V"/>
-		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
-		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/helpers/DefaultHandler;Ljava/lang/String;)V"/>
-		<method name="parse(Ljava/lang/String;Lorg/xml/sax/HandlerBase;)V"/>
-		<method name="parse(Ljava/lang/String;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
-		<method name="parse(Lorg/xml/sax/InputSource;Lorg/xml/sax/HandlerBase;)V"/>
-		<method name="parse(Lorg/xml/sax/InputSource;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
-		<method name="reset()V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="javax/xml/parsers/SAXParserFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
-		<method name="isNamespaceAware()Z"/>
-		<method name="isValidating()Z"/>
-		<method name="isXIncludeAware()Z"/>
-		<method name="newInstance()Ljavax/xml/parsers/SAXParserFactory;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/SAXParserFactory;" since="9"/>
-		<method name="newSAXParser()Ljavax/xml/parsers/SAXParser;"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setNamespaceAware(Z)V"/>
-		<method name="setSchema(Ljavax/xml/validation/Schema;)V" since="8"/>
-		<method name="setValidating(Z)V"/>
-		<method name="setXIncludeAware(Z)V"/>
-	</class>
-	<class name="javax/xml/transform/ErrorListener" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="error(Ljavax/xml/transform/TransformerException;)V"/>
-		<method name="fatalError(Ljavax/xml/transform/TransformerException;)V"/>
-		<method name="warning(Ljavax/xml/transform/TransformerException;)V"/>
-	</class>
-	<class name="javax/xml/transform/OutputKeys" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="CDATA_SECTION_ELEMENTS"/>
-		<field name="DOCTYPE_PUBLIC"/>
-		<field name="DOCTYPE_SYSTEM"/>
-		<field name="ENCODING"/>
-		<field name="INDENT"/>
-		<field name="MEDIA_TYPE"/>
-		<field name="METHOD"/>
-		<field name="OMIT_XML_DECLARATION"/>
-		<field name="STANDALONE"/>
-		<field name="VERSION"/>
-	</class>
-	<class name="javax/xml/transform/Result" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-		<field name="PI_DISABLE_OUTPUT_ESCAPING"/>
-		<field name="PI_ENABLE_OUTPUT_ESCAPING"/>
-	</class>
-	<class name="javax/xml/transform/Source" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/xml/transform/SourceLocator" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getColumnNumber()I"/>
-		<method name="getLineNumber()I"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-	</class>
-	<class name="javax/xml/transform/Templates" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getOutputProperties()Ljava/util/Properties;"/>
-		<method name="newTransformer()Ljavax/xml/transform/Transformer;"/>
-	</class>
-	<class name="javax/xml/transform/Transformer" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clearParameters()V"/>
-		<method name="getErrorListener()Ljavax/xml/transform/ErrorListener;"/>
-		<method name="getOutputProperties()Ljava/util/Properties;"/>
-		<method name="getOutputProperty(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getURIResolver()Ljavax/xml/transform/URIResolver;"/>
-		<method name="reset()V"/>
-		<method name="setErrorListener(Ljavax/xml/transform/ErrorListener;)V"/>
-		<method name="setOutputProperties(Ljava/util/Properties;)V"/>
-		<method name="setOutputProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setURIResolver(Ljavax/xml/transform/URIResolver;)V"/>
-		<method name="transform(Ljavax/xml/transform/Source;Ljavax/xml/transform/Result;)V"/>
-	</class>
-	<class name="javax/xml/transform/TransformerConfigurationException" since="8">
-		<extends name="javax/xml/transform/TransformerException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="javax/xml/transform/TransformerException" since="8">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-		<method name="getException()Ljava/lang/Throwable;"/>
-		<method name="getLocationAsString()Ljava/lang/String;"/>
-		<method name="getLocator()Ljavax/xml/transform/SourceLocator;"/>
-		<method name="getMessageAndLocation()Ljava/lang/String;"/>
-		<method name="setLocator(Ljavax/xml/transform/SourceLocator;)V"/>
-	</class>
-	<class name="javax/xml/transform/TransformerFactory" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAssociatedStylesheet(Ljavax/xml/transform/Source;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljavax/xml/transform/Source;"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getErrorListener()Ljavax/xml/transform/ErrorListener;"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getURIResolver()Ljavax/xml/transform/URIResolver;"/>
-		<method name="newInstance()Ljavax/xml/transform/TransformerFactory;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/transform/TransformerFactory;" since="9"/>
-		<method name="newTemplates(Ljavax/xml/transform/Source;)Ljavax/xml/transform/Templates;"/>
-		<method name="newTransformer()Ljavax/xml/transform/Transformer;"/>
-		<method name="newTransformer(Ljavax/xml/transform/Source;)Ljavax/xml/transform/Transformer;"/>
-		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setErrorListener(Ljavax/xml/transform/ErrorListener;)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setURIResolver(Ljavax/xml/transform/URIResolver;)V"/>
-	</class>
-	<class name="javax/xml/transform/TransformerFactoryConfigurationError" since="8">
-		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getException()Ljava/lang/Exception;"/>
-	</class>
-	<class name="javax/xml/transform/URIResolver" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="resolve(Ljava/lang/String;Ljava/lang/String;)Ljavax/xml/transform/Source;"/>
-	</class>
-	<class name="javax/xml/transform/dom/DOMLocator" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/xml/transform/SourceLocator"/>
-		<method name="getOriginatingNode()Lorg/w3c/dom/Node;"/>
-	</class>
-	<class name="javax/xml/transform/dom/DOMResult" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/xml/transform/Result"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/w3c/dom/Node;)V"/>
-		<method name="&lt;init>(Lorg/w3c/dom/Node;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V"/>
-		<method name="&lt;init>(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;Ljava/lang/String;)V"/>
-		<method name="getNextSibling()Lorg/w3c/dom/Node;"/>
-		<method name="getNode()Lorg/w3c/dom/Node;"/>
-		<method name="setNextSibling(Lorg/w3c/dom/Node;)V"/>
-		<method name="setNode(Lorg/w3c/dom/Node;)V"/>
-		<field name="FEATURE"/>
-	</class>
-	<class name="javax/xml/transform/dom/DOMSource" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/xml/transform/Source"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/w3c/dom/Node;)V"/>
-		<method name="&lt;init>(Lorg/w3c/dom/Node;Ljava/lang/String;)V"/>
-		<method name="getNode()Lorg/w3c/dom/Node;"/>
-		<method name="setNode(Lorg/w3c/dom/Node;)V"/>
-		<field name="FEATURE"/>
-	</class>
-	<class name="javax/xml/transform/sax/SAXResult" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/xml/transform/Result"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/ContentHandler;)V"/>
-		<method name="getHandler()Lorg/xml/sax/ContentHandler;"/>
-		<method name="getLexicalHandler()Lorg/xml/sax/ext/LexicalHandler;"/>
-		<method name="setHandler(Lorg/xml/sax/ContentHandler;)V"/>
-		<method name="setLexicalHandler(Lorg/xml/sax/ext/LexicalHandler;)V"/>
-		<field name="FEATURE"/>
-	</class>
-	<class name="javax/xml/transform/sax/SAXSource" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/xml/transform/Source"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/InputSource;)V"/>
-		<method name="&lt;init>(Lorg/xml/sax/XMLReader;Lorg/xml/sax/InputSource;)V"/>
-		<method name="getInputSource()Lorg/xml/sax/InputSource;"/>
-		<method name="getXMLReader()Lorg/xml/sax/XMLReader;"/>
-		<method name="setInputSource(Lorg/xml/sax/InputSource;)V"/>
-		<method name="setXMLReader(Lorg/xml/sax/XMLReader;)V"/>
-		<method name="sourceToInputSource(Ljavax/xml/transform/Source;)Lorg/xml/sax/InputSource;"/>
-		<field name="FEATURE"/>
-	</class>
-	<class name="javax/xml/transform/sax/SAXTransformerFactory" since="8">
-		<extends name="javax/xml/transform/TransformerFactory"/>
-		<method name="&lt;init>()V"/>
-		<method name="newTemplatesHandler()Ljavax/xml/transform/sax/TemplatesHandler;"/>
-		<method name="newTransformerHandler()Ljavax/xml/transform/sax/TransformerHandler;"/>
-		<method name="newTransformerHandler(Ljavax/xml/transform/Source;)Ljavax/xml/transform/sax/TransformerHandler;"/>
-		<method name="newTransformerHandler(Ljavax/xml/transform/Templates;)Ljavax/xml/transform/sax/TransformerHandler;"/>
-		<method name="newXMLFilter(Ljavax/xml/transform/Source;)Lorg/xml/sax/XMLFilter;"/>
-		<method name="newXMLFilter(Ljavax/xml/transform/Templates;)Lorg/xml/sax/XMLFilter;"/>
-		<field name="FEATURE"/>
-		<field name="FEATURE_XMLFILTER"/>
-	</class>
-	<class name="javax/xml/transform/sax/TemplatesHandler" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/ContentHandler"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="getTemplates()Ljavax/xml/transform/Templates;"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/xml/transform/sax/TransformerHandler" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/ContentHandler"/>
-		<implements name="org/xml/sax/DTDHandler"/>
-		<implements name="org/xml/sax/ext/LexicalHandler"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="getTransformer()Ljavax/xml/transform/Transformer;"/>
-		<method name="setResult(Ljavax/xml/transform/Result;)V"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-	</class>
-	<class name="javax/xml/transform/stream/StreamResult" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/xml/transform/Result"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/Writer;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getOutputStream()Ljava/io/OutputStream;"/>
-		<method name="getWriter()Ljava/io/Writer;"/>
-		<method name="setOutputStream(Ljava/io/OutputStream;)V"/>
-		<method name="setSystemId(Ljava/io/File;)V"/>
-		<method name="setWriter(Ljava/io/Writer;)V"/>
-		<field name="FEATURE"/>
-	</class>
-	<class name="javax/xml/transform/stream/StreamSource" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/xml/transform/Source"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/File;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<method name="&lt;init>(Ljava/io/Reader;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getInputStream()Ljava/io/InputStream;"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getReader()Ljava/io/Reader;"/>
-		<method name="setInputStream(Ljava/io/InputStream;)V"/>
-		<method name="setPublicId(Ljava/lang/String;)V"/>
-		<method name="setReader(Ljava/io/Reader;)V"/>
-		<method name="setSystemId(Ljava/io/File;)V"/>
-		<field name="FEATURE"/>
-	</class>
-	<class name="javax/xml/validation/Schema" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="newValidator()Ljavax/xml/validation/Validator;"/>
-		<method name="newValidatorHandler()Ljavax/xml/validation/ValidatorHandler;"/>
-	</class>
-	<class name="javax/xml/validation/SchemaFactory" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;"/>
-		<method name="isSchemaLanguageSupported(Ljava/lang/String;)Z"/>
-		<method name="newInstance(Ljava/lang/String;)Ljavax/xml/validation/SchemaFactory;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/validation/SchemaFactory;" since="9"/>
-		<method name="newSchema()Ljavax/xml/validation/Schema;"/>
-		<method name="newSchema(Ljava/io/File;)Ljavax/xml/validation/Schema;"/>
-		<method name="newSchema(Ljava/net/URL;)Ljavax/xml/validation/Schema;"/>
-		<method name="newSchema(Ljavax/xml/transform/Source;)Ljavax/xml/validation/Schema;"/>
-		<method name="newSchema([Ljavax/xml/transform/Source;)Ljavax/xml/validation/Schema;"/>
-		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V"/>
-	</class>
-	<class name="javax/xml/validation/SchemaFactoryLoader" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="newFactory(Ljava/lang/String;)Ljavax/xml/validation/SchemaFactory;"/>
-	</class>
-	<class name="javax/xml/validation/TypeInfoProvider" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAttributeTypeInfo(I)Lorg/w3c/dom/TypeInfo;"/>
-		<method name="getElementTypeInfo()Lorg/w3c/dom/TypeInfo;"/>
-		<method name="isIdAttribute(I)Z"/>
-		<method name="isSpecified(I)Z"/>
-	</class>
-	<class name="javax/xml/validation/Validator" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;"/>
-		<method name="reset()V"/>
-		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V"/>
-		<method name="validate(Ljavax/xml/transform/Source;)V"/>
-		<method name="validate(Ljavax/xml/transform/Source;Ljavax/xml/transform/Result;)V"/>
-	</class>
-	<class name="javax/xml/validation/ValidatorHandler" since="8">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/ContentHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;"/>
-		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;"/>
-		<method name="getTypeInfoProvider()Ljavax/xml/validation/TypeInfoProvider;"/>
-		<method name="setContentHandler(Lorg/xml/sax/ContentHandler;)V"/>
-		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V"/>
-	</class>
-	<class name="javax/xml/xpath/XPath" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="compile(Ljava/lang/String;)Ljavax/xml/xpath/XPathExpression;"/>
-		<method name="evaluate(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="evaluate(Ljava/lang/String;Ljava/lang/Object;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
-		<method name="evaluate(Ljava/lang/String;Lorg/xml/sax/InputSource;)Ljava/lang/String;"/>
-		<method name="evaluate(Ljava/lang/String;Lorg/xml/sax/InputSource;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
-		<method name="getNamespaceContext()Ljavax/xml/namespace/NamespaceContext;"/>
-		<method name="getXPathFunctionResolver()Ljavax/xml/xpath/XPathFunctionResolver;"/>
-		<method name="getXPathVariableResolver()Ljavax/xml/xpath/XPathVariableResolver;"/>
-		<method name="reset()V"/>
-		<method name="setNamespaceContext(Ljavax/xml/namespace/NamespaceContext;)V"/>
-		<method name="setXPathFunctionResolver(Ljavax/xml/xpath/XPathFunctionResolver;)V"/>
-		<method name="setXPathVariableResolver(Ljavax/xml/xpath/XPathVariableResolver;)V"/>
-	</class>
-	<class name="javax/xml/xpath/XPathConstants" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BOOLEAN"/>
-		<field name="DOM_OBJECT_MODEL"/>
-		<field name="NODE"/>
-		<field name="NODESET"/>
-		<field name="NUMBER"/>
-		<field name="STRING"/>
-	</class>
-	<class name="javax/xml/xpath/XPathException" since="8">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="javax/xml/xpath/XPathExpression" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="evaluate(Ljava/lang/Object;)Ljava/lang/String;"/>
-		<method name="evaluate(Ljava/lang/Object;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
-		<method name="evaluate(Lorg/xml/sax/InputSource;)Ljava/lang/String;"/>
-		<method name="evaluate(Lorg/xml/sax/InputSource;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
-	</class>
-	<class name="javax/xml/xpath/XPathExpressionException" since="8">
-		<extends name="javax/xml/xpath/XPathException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="javax/xml/xpath/XPathFactory" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="isObjectModelSupported(Ljava/lang/String;)Z"/>
-		<method name="newInstance()Ljavax/xml/xpath/XPathFactory;"/>
-		<method name="newInstance(Ljava/lang/String;)Ljavax/xml/xpath/XPathFactory;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/xpath/XPathFactory;"/>
-		<method name="newXPath()Ljavax/xml/xpath/XPath;"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setXPathFunctionResolver(Ljavax/xml/xpath/XPathFunctionResolver;)V"/>
-		<method name="setXPathVariableResolver(Ljavax/xml/xpath/XPathVariableResolver;)V"/>
-		<field name="DEFAULT_OBJECT_MODEL_URI"/>
-		<field name="DEFAULT_PROPERTY_NAME"/>
-	</class>
-	<class name="javax/xml/xpath/XPathFactoryConfigurationException" since="8">
-		<extends name="javax/xml/xpath/XPathException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="javax/xml/xpath/XPathFunction" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="evaluate(Ljava/util/List;)Ljava/lang/Object;"/>
-	</class>
-	<class name="javax/xml/xpath/XPathFunctionException" since="8">
-		<extends name="javax/xml/xpath/XPathExpressionException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="javax/xml/xpath/XPathFunctionResolver" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="resolveFunction(Ljavax/xml/namespace/QName;I)Ljavax/xml/xpath/XPathFunction;"/>
-	</class>
-	<class name="javax/xml/xpath/XPathVariableResolver" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="resolveVariable(Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
-	</class>
-	<class name="junit/framework/Assert" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertEquals(BB)V"/>
-		<method name="assertEquals(CC)V"/>
-		<method name="assertEquals(DDD)V"/>
-		<method name="assertEquals(FFF)V"/>
-		<method name="assertEquals(II)V"/>
-		<method name="assertEquals(JJ)V"/>
-		<method name="assertEquals(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertEquals(Ljava/lang/String;BB)V"/>
-		<method name="assertEquals(Ljava/lang/String;CC)V"/>
-		<method name="assertEquals(Ljava/lang/String;DDD)V"/>
-		<method name="assertEquals(Ljava/lang/String;FFF)V"/>
-		<method name="assertEquals(Ljava/lang/String;II)V"/>
-		<method name="assertEquals(Ljava/lang/String;JJ)V"/>
-		<method name="assertEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertEquals(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="assertEquals(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="assertEquals(Ljava/lang/String;SS)V"/>
-		<method name="assertEquals(Ljava/lang/String;ZZ)V"/>
-		<method name="assertEquals(SS)V"/>
-		<method name="assertEquals(ZZ)V"/>
-		<method name="assertFalse(Ljava/lang/String;Z)V"/>
-		<method name="assertFalse(Z)V"/>
-		<method name="assertNotNull(Ljava/lang/Object;)V"/>
-		<method name="assertNotNull(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="assertNotSame(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertNull(Ljava/lang/Object;)V"/>
-		<method name="assertNull(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="assertSame(Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
-		<method name="assertTrue(Ljava/lang/String;Z)V"/>
-		<method name="assertTrue(Z)V"/>
-		<method name="fail()V"/>
-		<method name="fail(Ljava/lang/String;)V"/>
-		<method name="failNotEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" since="16"/>
-		<method name="failNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" since="16"/>
-		<method name="failSame(Ljava/lang/String;)V" since="16"/>
-		<method name="format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String;" since="16"/>
-	</class>
-	<class name="junit/framework/AssertionFailedError" since="1" removed="28">
-		<extends name="java/lang/AssertionError" since="16"/>
-		<extends name="java/lang/Error" removed="16"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="junit/framework/ComparisonFailure" since="1" removed="28">
-		<extends name="junit/framework/AssertionFailedError"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getActual()Ljava/lang/String;" since="16"/>
-		<method name="getExpected()Ljava/lang/String;" since="16"/>
-	</class>
-	<class name="junit/framework/Protectable" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="protect()V"/>
-	</class>
-	<class name="junit/framework/Test" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="countTestCases()I"/>
-		<method name="run(Ljunit/framework/TestResult;)V"/>
-	</class>
-	<class name="junit/framework/TestCase" since="1" removed="28">
-		<extends name="junit/framework/Assert"/>
-		<implements name="junit/framework/Test"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="createResult()Ljunit/framework/TestResult;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="run()Ljunit/framework/TestResult;"/>
-		<method name="runBare()V"/>
-		<method name="runTest()V"/>
-		<method name="setName(Ljava/lang/String;)V"/>
-		<method name="setUp()V"/>
-		<method name="tearDown()V"/>
-	</class>
-	<class name="junit/framework/TestFailure" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
-		<method name="exceptionMessage()Ljava/lang/String;"/>
-		<method name="failedTest()Ljunit/framework/Test;"/>
-		<method name="isFailure()Z"/>
-		<method name="thrownException()Ljava/lang/Throwable;"/>
-		<method name="trace()Ljava/lang/String;"/>
-		<field name="fFailedTest"/>
-		<field name="fThrownException"/>
-	</class>
-	<class name="junit/framework/TestListener" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
-		<method name="addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V"/>
-		<method name="endTest(Ljunit/framework/Test;)V"/>
-		<method name="startTest(Ljunit/framework/Test;)V"/>
-	</class>
-	<class name="junit/framework/TestResult" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
-		<method name="addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V"/>
-		<method name="addListener(Ljunit/framework/TestListener;)V"/>
-		<method name="endTest(Ljunit/framework/Test;)V"/>
-		<method name="errorCount()I"/>
-		<method name="errors()Ljava/util/Enumeration;"/>
-		<method name="failureCount()I"/>
-		<method name="failures()Ljava/util/Enumeration;"/>
-		<method name="removeListener(Ljunit/framework/TestListener;)V"/>
-		<method name="run(Ljunit/framework/TestCase;)V"/>
-		<method name="runCount()I"/>
-		<method name="runProtected(Ljunit/framework/Test;Ljunit/framework/Protectable;)V"/>
-		<method name="shouldStop()Z"/>
-		<method name="startTest(Ljunit/framework/Test;)V"/>
-		<method name="stop()V"/>
-		<method name="wasSuccessful()Z"/>
-		<field name="fErrors"/>
-		<field name="fFailures"/>
-		<field name="fListeners"/>
-		<field name="fRunTests"/>
-	</class>
-	<class name="junit/framework/TestSuite" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="junit/framework/Test"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>([Ljava/lang/Class;)V" since="16"/>
-		<method name="&lt;init>([Ljava/lang/Class;Ljava/lang/String;)V" since="16"/>
-		<method name="addTest(Ljunit/framework/Test;)V"/>
-		<method name="addTestSuite(Ljava/lang/Class;)V"/>
-		<method name="createTest(Ljava/lang/Class;Ljava/lang/String;)Ljunit/framework/Test;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getTestConstructor(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"/>
-		<method name="runTest(Ljunit/framework/Test;Ljunit/framework/TestResult;)V"/>
-		<method name="setName(Ljava/lang/String;)V"/>
-		<method name="testAt(I)Ljunit/framework/Test;"/>
-		<method name="testCount()I"/>
-		<method name="tests()Ljava/util/Enumeration;"/>
-		<method name="warning(Ljava/lang/String;)Ljunit/framework/Test;" since="16"/>
-	</class>
-	<class name="junit/runner/BaseTestRunner" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<implements name="junit/framework/TestListener"/>
-		<method name="&lt;init>()V"/>
-		<method name="clearStatus()V"/>
-		<method name="elapsedTimeAsString(J)Ljava/lang/String;"/>
-		<method name="extractClassName(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getFilteredTrace(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getFilteredTrace(Ljava/lang/Throwable;)Ljava/lang/String;"/>
-		<method name="getLoader()Ljunit/runner/TestSuiteLoader;" deprecated="16"/>
-		<method name="getPreference(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getPreference(Ljava/lang/String;I)I"/>
-		<method name="getPreferences()Ljava/util/Properties;"/>
-		<method name="getTest(Ljava/lang/String;)Ljunit/framework/Test;"/>
-		<method name="inVAJava()Z" deprecated="16"/>
-		<method name="loadSuiteClass(Ljava/lang/String;)Ljava/lang/Class;"/>
-		<method name="processArguments([Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="runFailed(Ljava/lang/String;)V"/>
-		<method name="savePreferences()V"/>
-		<method name="setLoading(Z)V"/>
-		<method name="setPreference(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setPreferences(Ljava/util/Properties;)V"/>
-		<method name="showStackRaw()Z"/>
-		<method name="testEnded(Ljava/lang/String;)V"/>
-		<method name="testFailed(ILjunit/framework/Test;Ljava/lang/Throwable;)V"/>
-		<method name="testStarted(Ljava/lang/String;)V"/>
-		<method name="truncate(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="useReloadingTestSuiteLoader()Z"/>
-		<field name="SUITE_METHODNAME"/>
-	</class>
-	<class name="junit/runner/TestSuiteLoader" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="load(Ljava/lang/String;)Ljava/lang/Class;"/>
-		<method name="reload(Ljava/lang/Class;)Ljava/lang/Class;"/>
-	</class>
-	<class name="junit/runner/Version" since="1" removed="28">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="id()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/commons/logging/Log" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="debug(Ljava/lang/Object;)V"/>
-		<method name="debug(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
-		<method name="error(Ljava/lang/Object;)V"/>
-		<method name="error(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
-		<method name="fatal(Ljava/lang/Object;)V"/>
-		<method name="fatal(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
-		<method name="info(Ljava/lang/Object;)V"/>
-		<method name="info(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
-		<method name="isDebugEnabled()Z"/>
-		<method name="isErrorEnabled()Z"/>
-		<method name="isFatalEnabled()Z"/>
-		<method name="isInfoEnabled()Z"/>
-		<method name="isTraceEnabled()Z"/>
-		<method name="isWarnEnabled()Z"/>
-		<method name="trace(Ljava/lang/Object;)V"/>
-		<method name="trace(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
-		<method name="warn(Ljava/lang/Object;)V"/>
-		<method name="warn(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/ConnectionClosedException" since="1" deprecated="22" removed="23">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/ConnectionReuseStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="keepAlive(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z"/>
-	</class>
-	<class name="org/apache/http/FormattedHeader" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/Header"/>
-		<method name="getBuffer()Lorg/apache/http/util/CharArrayBuffer;"/>
-		<method name="getValuePos()I"/>
-	</class>
-	<class name="org/apache/http/Header" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getElements()[Lorg/apache/http/HeaderElement;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getValue()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/HeaderElement" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getParameter(I)Lorg/apache/http/NameValuePair;"/>
-		<method name="getParameterByName(Ljava/lang/String;)Lorg/apache/http/NameValuePair;"/>
-		<method name="getParameterCount()I"/>
-		<method name="getParameters()[Lorg/apache/http/NameValuePair;"/>
-		<method name="getValue()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/HeaderElementIterator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Iterator"/>
-		<method name="nextElement()Lorg/apache/http/HeaderElement;"/>
-	</class>
-	<class name="org/apache/http/HeaderIterator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Iterator"/>
-		<method name="nextHeader()Lorg/apache/http/Header;"/>
-	</class>
-	<class name="org/apache/http/HttpClientConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpConnection"/>
-		<method name="flush()V"/>
-		<method name="isResponseAvailable(I)Z"/>
-		<method name="receiveResponseEntity(Lorg/apache/http/HttpResponse;)V"/>
-		<method name="receiveResponseHeader()Lorg/apache/http/HttpResponse;"/>
-		<method name="sendRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V"/>
-		<method name="sendRequestHeader(Lorg/apache/http/HttpRequest;)V"/>
-	</class>
-	<class name="org/apache/http/HttpConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="close()V"/>
-		<method name="getMetrics()Lorg/apache/http/HttpConnectionMetrics;"/>
-		<method name="getSocketTimeout()I"/>
-		<method name="isOpen()Z"/>
-		<method name="isStale()Z"/>
-		<method name="setSocketTimeout(I)V"/>
-		<method name="shutdown()V"/>
-	</class>
-	<class name="org/apache/http/HttpConnectionMetrics" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getMetric(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getReceivedBytesCount()J"/>
-		<method name="getRequestCount()J"/>
-		<method name="getResponseCount()J"/>
-		<method name="getSentBytesCount()J"/>
-		<method name="reset()V"/>
-	</class>
-	<class name="org/apache/http/HttpEntity" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="consumeContent()V"/>
-		<method name="getContent()Ljava/io/InputStream;"/>
-		<method name="getContentEncoding()Lorg/apache/http/Header;"/>
-		<method name="getContentLength()J"/>
-		<method name="getContentType()Lorg/apache/http/Header;"/>
-		<method name="isChunked()Z"/>
-		<method name="isRepeatable()Z"/>
-		<method name="isStreaming()Z"/>
-		<method name="writeTo(Ljava/io/OutputStream;)V"/>
-	</class>
-	<class name="org/apache/http/HttpEntityEnclosingRequest" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequest"/>
-		<method name="expectContinue()Z"/>
-		<method name="getEntity()Lorg/apache/http/HttpEntity;"/>
-		<method name="setEntity(Lorg/apache/http/HttpEntity;)V"/>
-	</class>
-	<class name="org/apache/http/HttpException" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/HttpHost" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;)V"/>
-		<method name="getHostName()Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="getSchemeName()Ljava/lang/String;"/>
-		<method name="toHostString()Ljava/lang/String;"/>
-		<method name="toURI()Ljava/lang/String;"/>
-		<field name="DEFAULT_SCHEME_NAME"/>
-		<field name="hostname"/>
-		<field name="lcHostname"/>
-		<field name="port"/>
-		<field name="schemeName"/>
-	</class>
-	<class name="org/apache/http/HttpInetConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpConnection"/>
-		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
-		<method name="getLocalPort()I"/>
-		<method name="getRemoteAddress()Ljava/net/InetAddress;"/>
-		<method name="getRemotePort()I"/>
-	</class>
-	<class name="org/apache/http/HttpMessage" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="addHeader(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="addHeader(Lorg/apache/http/Header;)V"/>
-		<method name="containsHeader(Ljava/lang/String;)Z"/>
-		<method name="getAllHeaders()[Lorg/apache/http/Header;"/>
-		<method name="getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
-		<method name="getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;"/>
-		<method name="getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
-		<method name="getParams()Lorg/apache/http/params/HttpParams;"/>
-		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;"/>
-		<method name="headerIterator()Lorg/apache/http/HeaderIterator;"/>
-		<method name="headerIterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;"/>
-		<method name="removeHeader(Lorg/apache/http/Header;)V"/>
-		<method name="removeHeaders(Ljava/lang/String;)V"/>
-		<method name="setHeader(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setHeader(Lorg/apache/http/Header;)V"/>
-		<method name="setHeaders([Lorg/apache/http/Header;)V"/>
-		<method name="setParams(Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/HttpRequest" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpMessage"/>
-		<method name="getRequestLine()Lorg/apache/http/RequestLine;"/>
-	</class>
-	<class name="org/apache/http/HttpRequestFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="newHttpRequest(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/HttpRequest;"/>
-		<method name="newHttpRequest(Lorg/apache/http/RequestLine;)Lorg/apache/http/HttpRequest;"/>
-	</class>
-	<class name="org/apache/http/HttpRequestInterceptor" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V"/>
-	</class>
-	<class name="org/apache/http/HttpResponse" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpMessage"/>
-		<method name="getEntity()Lorg/apache/http/HttpEntity;"/>
-		<method name="getLocale()Ljava/util/Locale;"/>
-		<method name="getStatusLine()Lorg/apache/http/StatusLine;"/>
-		<method name="setEntity(Lorg/apache/http/HttpEntity;)V"/>
-		<method name="setLocale(Ljava/util/Locale;)V"/>
-		<method name="setReasonPhrase(Ljava/lang/String;)V"/>
-		<method name="setStatusCode(I)V"/>
-		<method name="setStatusLine(Lorg/apache/http/ProtocolVersion;I)V"/>
-		<method name="setStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V"/>
-		<method name="setStatusLine(Lorg/apache/http/StatusLine;)V"/>
-	</class>
-	<class name="org/apache/http/HttpResponseFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="newHttpResponse(Lorg/apache/http/ProtocolVersion;ILorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-		<method name="newHttpResponse(Lorg/apache/http/StatusLine;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-	</class>
-	<class name="org/apache/http/HttpResponseInterceptor" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="process(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
-	</class>
-	<class name="org/apache/http/HttpServerConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpConnection"/>
-		<method name="flush()V"/>
-		<method name="receiveRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V"/>
-		<method name="receiveRequestHeader()Lorg/apache/http/HttpRequest;"/>
-		<method name="sendResponseEntity(Lorg/apache/http/HttpResponse;)V"/>
-		<method name="sendResponseHeader(Lorg/apache/http/HttpResponse;)V"/>
-	</class>
-	<class name="org/apache/http/HttpStatus" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="SC_ACCEPTED"/>
-		<field name="SC_BAD_GATEWAY"/>
-		<field name="SC_BAD_REQUEST"/>
-		<field name="SC_CONFLICT"/>
-		<field name="SC_CONTINUE"/>
-		<field name="SC_CREATED"/>
-		<field name="SC_EXPECTATION_FAILED"/>
-		<field name="SC_FAILED_DEPENDENCY"/>
-		<field name="SC_FORBIDDEN"/>
-		<field name="SC_GATEWAY_TIMEOUT"/>
-		<field name="SC_GONE"/>
-		<field name="SC_HTTP_VERSION_NOT_SUPPORTED"/>
-		<field name="SC_INSUFFICIENT_SPACE_ON_RESOURCE"/>
-		<field name="SC_INSUFFICIENT_STORAGE"/>
-		<field name="SC_INTERNAL_SERVER_ERROR"/>
-		<field name="SC_LENGTH_REQUIRED"/>
-		<field name="SC_LOCKED"/>
-		<field name="SC_METHOD_FAILURE"/>
-		<field name="SC_METHOD_NOT_ALLOWED"/>
-		<field name="SC_MOVED_PERMANENTLY"/>
-		<field name="SC_MOVED_TEMPORARILY"/>
-		<field name="SC_MULTIPLE_CHOICES"/>
-		<field name="SC_MULTI_STATUS"/>
-		<field name="SC_NON_AUTHORITATIVE_INFORMATION"/>
-		<field name="SC_NOT_ACCEPTABLE"/>
-		<field name="SC_NOT_FOUND"/>
-		<field name="SC_NOT_IMPLEMENTED"/>
-		<field name="SC_NOT_MODIFIED"/>
-		<field name="SC_NO_CONTENT"/>
-		<field name="SC_OK"/>
-		<field name="SC_PARTIAL_CONTENT"/>
-		<field name="SC_PAYMENT_REQUIRED"/>
-		<field name="SC_PRECONDITION_FAILED"/>
-		<field name="SC_PROCESSING"/>
-		<field name="SC_PROXY_AUTHENTICATION_REQUIRED"/>
-		<field name="SC_REQUESTED_RANGE_NOT_SATISFIABLE"/>
-		<field name="SC_REQUEST_TIMEOUT"/>
-		<field name="SC_REQUEST_TOO_LONG"/>
-		<field name="SC_REQUEST_URI_TOO_LONG"/>
-		<field name="SC_RESET_CONTENT"/>
-		<field name="SC_SEE_OTHER"/>
-		<field name="SC_SERVICE_UNAVAILABLE"/>
-		<field name="SC_SWITCHING_PROTOCOLS"/>
-		<field name="SC_TEMPORARY_REDIRECT"/>
-		<field name="SC_UNAUTHORIZED"/>
-		<field name="SC_UNPROCESSABLE_ENTITY"/>
-		<field name="SC_UNSUPPORTED_MEDIA_TYPE"/>
-		<field name="SC_USE_PROXY"/>
-	</class>
-	<class name="org/apache/http/HttpVersion" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/ProtocolVersion"/>
-		<method name="&lt;init>(II)V"/>
-		<field name="HTTP"/>
-		<field name="HTTP_0_9"/>
-		<field name="HTTP_1_0"/>
-		<field name="HTTP_1_1"/>
-	</class>
-	<class name="org/apache/http/MalformedChunkCodingException" since="1" deprecated="22" removed="23">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/MethodNotSupportedException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/HttpException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/NameValuePair" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getValue()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/NoHttpResponseException" since="1" deprecated="22" removed="23">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/ParseException" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/ProtocolException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/HttpException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/ProtocolVersion" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/String;II)V"/>
-		<method name="compareToVersion(Lorg/apache/http/ProtocolVersion;)I"/>
-		<method name="forVersion(II)Lorg/apache/http/ProtocolVersion;"/>
-		<method name="getMajor()I"/>
-		<method name="getMinor()I"/>
-		<method name="getProtocol()Ljava/lang/String;"/>
-		<method name="greaterEquals(Lorg/apache/http/ProtocolVersion;)Z"/>
-		<method name="isComparable(Lorg/apache/http/ProtocolVersion;)Z"/>
-		<method name="lessEquals(Lorg/apache/http/ProtocolVersion;)Z"/>
-		<field name="major"/>
-		<field name="minor"/>
-		<field name="protocol"/>
-	</class>
-	<class name="org/apache/http/ReasonPhraseCatalog" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getReason(ILjava/util/Locale;)Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/RequestLine" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getMethod()Ljava/lang/String;"/>
-		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;"/>
-		<method name="getUri()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/StatusLine" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;"/>
-		<method name="getReasonPhrase()Ljava/lang/String;"/>
-		<method name="getStatusCode()I"/>
-	</class>
-	<class name="org/apache/http/TokenIterator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/util/Iterator"/>
-		<method name="nextToken()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/UnsupportedHttpVersionException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/ProtocolException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/auth/AUTH" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="PROXY_AUTH"/>
-		<field name="PROXY_AUTH_RESP"/>
-		<field name="WWW_AUTH"/>
-		<field name="WWW_AUTH_RESP"/>
-	</class>
-	<class name="org/apache/http/auth/AuthScheme" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="authenticate(Lorg/apache/http/auth/Credentials;Lorg/apache/http/HttpRequest;)Lorg/apache/http/Header;"/>
-		<method name="getParameter(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getRealm()Ljava/lang/String;"/>
-		<method name="getSchemeName()Ljava/lang/String;"/>
-		<method name="isComplete()Z"/>
-		<method name="isConnectionBased()Z"/>
-		<method name="processChallenge(Lorg/apache/http/Header;)V"/>
-	</class>
-	<class name="org/apache/http/auth/AuthSchemeFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="newInstance(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/auth/AuthScheme;"/>
-	</class>
-	<class name="org/apache/http/auth/AuthSchemeRegistry" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAuthScheme(Ljava/lang/String;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/auth/AuthScheme;"/>
-		<method name="getSchemeNames()Ljava/util/List;"/>
-		<method name="register(Ljava/lang/String;Lorg/apache/http/auth/AuthSchemeFactory;)V"/>
-		<method name="setItems(Ljava/util/Map;)V"/>
-		<method name="unregister(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/auth/AuthScope" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;I)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/auth/AuthScope;)V"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="getRealm()Ljava/lang/String;"/>
-		<method name="getScheme()Ljava/lang/String;"/>
-		<method name="match(Lorg/apache/http/auth/AuthScope;)I"/>
-		<field name="ANY"/>
-		<field name="ANY_HOST"/>
-		<field name="ANY_PORT"/>
-		<field name="ANY_REALM"/>
-		<field name="ANY_SCHEME"/>
-	</class>
-	<class name="org/apache/http/auth/AuthState" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAuthScheme()Lorg/apache/http/auth/AuthScheme;"/>
-		<method name="getAuthScope()Lorg/apache/http/auth/AuthScope;"/>
-		<method name="getCredentials()Lorg/apache/http/auth/Credentials;"/>
-		<method name="invalidate()V"/>
-		<method name="isValid()Z"/>
-		<method name="setAuthScheme(Lorg/apache/http/auth/AuthScheme;)V"/>
-		<method name="setAuthScope(Lorg/apache/http/auth/AuthScope;)V"/>
-		<method name="setCredentials(Lorg/apache/http/auth/Credentials;)V"/>
-	</class>
-	<class name="org/apache/http/auth/AuthenticationException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/ProtocolException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/auth/BasicUserPrincipal" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/Principal"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/auth/Credentials" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getPassword()Ljava/lang/String;"/>
-		<method name="getUserPrincipal()Ljava/security/Principal;"/>
-	</class>
-	<class name="org/apache/http/auth/InvalidCredentialsException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/auth/AuthenticationException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/auth/MalformedChallengeException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/ProtocolException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/auth/NTCredentials" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/auth/Credentials"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getDomain()Ljava/lang/String;"/>
-		<method name="getUserName()Ljava/lang/String;"/>
-		<method name="getWorkstation()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/auth/NTUserPrincipal" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/security/Principal"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getDomain()Ljava/lang/String;"/>
-		<method name="getUsername()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/auth/UsernamePasswordCredentials" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/auth/Credentials"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getUserName()Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/auth/params/AuthPNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="CREDENTIAL_CHARSET"/>
-	</class>
-	<class name="org/apache/http/auth/params/AuthParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setCredentialCharset(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/auth/params/AuthParams" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCredentialCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
-		<method name="setCredentialCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/client/AuthenticationHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getChallenges(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/util/Map;"/>
-		<method name="isAuthenticationRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z"/>
-		<method name="selectScheme(Ljava/util/Map;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/auth/AuthScheme;"/>
-	</class>
-	<class name="org/apache/http/client/CircularRedirectException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/RedirectException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/client/ClientProtocolException" since="1" deprecated="22" removed="23">
-		<extends name="java/io/IOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/client/CookieStore" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="addCookie(Lorg/apache/http/cookie/Cookie;)V"/>
-		<method name="clear()V"/>
-		<method name="clearExpired(Ljava/util/Date;)Z"/>
-		<method name="getCookies()Ljava/util/List;"/>
-	</class>
-	<class name="org/apache/http/client/CredentialsProvider" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="clear()V"/>
-		<method name="getCredentials(Lorg/apache/http/auth/AuthScope;)Lorg/apache/http/auth/Credentials;"/>
-		<method name="setCredentials(Lorg/apache/http/auth/AuthScope;Lorg/apache/http/auth/Credentials;)V"/>
-	</class>
-	<class name="org/apache/http/client/HttpClient" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;)Lorg/apache/http/HttpResponse;"/>
-		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;"/>
-		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;"/>
-		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpResponse;"/>
-		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;"/>
-		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;"/>
-		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-		<method name="getConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;"/>
-		<method name="getParams()Lorg/apache/http/params/HttpParams;"/>
-	</class>
-	<class name="org/apache/http/client/HttpRequestRetryHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="retryRequest(Ljava/io/IOException;ILorg/apache/http/protocol/HttpContext;)Z"/>
-	</class>
-	<class name="org/apache/http/client/HttpResponseException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/ClientProtocolException"/>
-		<method name="&lt;init>(ILjava/lang/String;)V"/>
-		<method name="getStatusCode()I"/>
-	</class>
-	<class name="org/apache/http/client/NonRepeatableRequestException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/ProtocolException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/client/RedirectException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/ProtocolException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/client/RedirectHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getLocationURI(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/net/URI;"/>
-		<method name="isRedirectRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z"/>
-	</class>
-	<class name="org/apache/http/client/RequestDirector" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-	</class>
-	<class name="org/apache/http/client/ResponseHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="handleResponse(Lorg/apache/http/HttpResponse;)Ljava/lang/Object;"/>
-	</class>
-	<class name="org/apache/http/client/UserTokenHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getUserToken(Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;"/>
-	</class>
-	<class name="org/apache/http/client/entity/UrlEncodedFormEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/StringEntity"/>
-		<method name="&lt;init>(Ljava/util/List;)V"/>
-		<method name="&lt;init>(Ljava/util/List;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/client/methods/AbortableHttpRequest" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="abort()V"/>
-		<method name="setConnectionRequest(Lorg/apache/http/conn/ClientConnectionRequest;)V"/>
-		<method name="setReleaseTrigger(Lorg/apache/http/conn/ConnectionReleaseTrigger;)V"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpDelete" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<field name="METHOD_NAME"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
-		<implements name="org/apache/http/HttpEntityEnclosingRequest"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpGet" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<field name="METHOD_NAME"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpHead" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<field name="METHOD_NAME"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpOptions" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<method name="getAllowedMethods(Lorg/apache/http/HttpResponse;)Ljava/util/Set;"/>
-		<field name="METHOD_NAME"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpPost" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<field name="METHOD_NAME"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpPut" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<field name="METHOD_NAME"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpRequestBase" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/message/AbstractHttpMessage"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/client/methods/AbortableHttpRequest"/>
-		<implements name="org/apache/http/client/methods/HttpUriRequest"/>
-		<method name="&lt;init>()V"/>
-		<method name="setURI(Ljava/net/URI;)V"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpTrace" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/net/URI;)V"/>
-		<field name="METHOD_NAME"/>
-	</class>
-	<class name="org/apache/http/client/methods/HttpUriRequest" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequest"/>
-		<method name="abort()V"/>
-		<method name="getMethod()Ljava/lang/String;"/>
-		<method name="getURI()Ljava/net/URI;"/>
-		<method name="isAborted()Z"/>
-	</class>
-	<class name="org/apache/http/client/params/AllClientPNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/auth/params/AuthPNames"/>
-		<implements name="org/apache/http/client/params/ClientPNames"/>
-		<implements name="org/apache/http/conn/params/ConnConnectionPNames"/>
-		<implements name="org/apache/http/conn/params/ConnManagerPNames"/>
-		<implements name="org/apache/http/conn/params/ConnRoutePNames"/>
-		<implements name="org/apache/http/cookie/params/CookieSpecPNames"/>
-		<implements name="org/apache/http/params/CoreConnectionPNames"/>
-		<implements name="org/apache/http/params/CoreProtocolPNames"/>
-	</class>
-	<class name="org/apache/http/client/params/AuthPolicy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BASIC"/>
-		<field name="DIGEST"/>
-		<field name="NTLM"/>
-	</class>
-	<class name="org/apache/http/client/params/ClientPNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="ALLOW_CIRCULAR_REDIRECTS"/>
-		<field name="CONNECTION_MANAGER_FACTORY"/>
-		<field name="CONNECTION_MANAGER_FACTORY_CLASS_NAME"/>
-		<field name="COOKIE_POLICY"/>
-		<field name="DEFAULT_HEADERS"/>
-		<field name="DEFAULT_HOST"/>
-		<field name="HANDLE_AUTHENTICATION"/>
-		<field name="HANDLE_REDIRECTS"/>
-		<field name="MAX_REDIRECTS"/>
-		<field name="REJECT_RELATIVE_REDIRECT"/>
-		<field name="VIRTUAL_HOST"/>
-	</class>
-	<class name="org/apache/http/client/params/ClientParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setAllowCircularRedirects(Z)V"/>
-		<method name="setConnectionManagerFactory(Lorg/apache/http/conn/ClientConnectionManagerFactory;)V"/>
-		<method name="setConnectionManagerFactoryClassName(Ljava/lang/String;)V"/>
-		<method name="setCookiePolicy(Ljava/lang/String;)V"/>
-		<method name="setDefaultHeaders(Ljava/util/Collection;)V"/>
-		<method name="setDefaultHost(Lorg/apache/http/HttpHost;)V"/>
-		<method name="setHandleAuthentication(Z)V"/>
-		<method name="setHandleRedirects(Z)V"/>
-		<method name="setMaxRedirects(I)V"/>
-		<method name="setRejectRelativeRedirect(Z)V"/>
-		<method name="setVirtualHost(Lorg/apache/http/HttpHost;)V"/>
-	</class>
-	<class name="org/apache/http/client/params/CookiePolicy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<field name="BEST_MATCH"/>
-		<field name="BROWSER_COMPATIBILITY"/>
-		<field name="NETSCAPE"/>
-		<field name="RFC_2109"/>
-		<field name="RFC_2965"/>
-	</class>
-	<class name="org/apache/http/client/params/HttpClientParams" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCookiePolicy(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
-		<method name="isAuthenticating(Lorg/apache/http/params/HttpParams;)Z"/>
-		<method name="isRedirecting(Lorg/apache/http/params/HttpParams;)Z"/>
-		<method name="setAuthenticating(Lorg/apache/http/params/HttpParams;Z)V"/>
-		<method name="setCookiePolicy(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
-		<method name="setRedirecting(Lorg/apache/http/params/HttpParams;Z)V"/>
-	</class>
-	<class name="org/apache/http/client/protocol/ClientContext" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="AUTHSCHEME_REGISTRY"/>
-		<field name="AUTH_SCHEME_PREF"/>
-		<field name="COOKIESPEC_REGISTRY"/>
-		<field name="COOKIE_ORIGIN"/>
-		<field name="COOKIE_SPEC"/>
-		<field name="COOKIE_STORE"/>
-		<field name="CREDS_PROVIDER"/>
-		<field name="PROXY_AUTH_STATE"/>
-		<field name="TARGET_AUTH_STATE"/>
-		<field name="USER_TOKEN"/>
-	</class>
-	<class name="org/apache/http/client/protocol/ClientContextConfigurer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/protocol/ClientContext"/>
-		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;)V"/>
-		<method name="setAuthSchemePref(Ljava/util/List;)V"/>
-		<method name="setAuthSchemeRegistry(Lorg/apache/http/auth/AuthSchemeRegistry;)V"/>
-		<method name="setCookieSpecRegistry(Lorg/apache/http/cookie/CookieSpecRegistry;)V"/>
-		<method name="setCookieStore(Lorg/apache/http/client/CookieStore;)V"/>
-		<method name="setCredentialsProvider(Lorg/apache/http/client/CredentialsProvider;)V"/>
-	</class>
-	<class name="org/apache/http/client/protocol/RequestAddCookies" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/client/protocol/RequestDefaultHeaders" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/client/protocol/RequestProxyAuthentication" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/client/protocol/RequestTargetAuthentication" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/client/protocol/ResponseProcessCookies" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpResponseInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/client/utils/CloneUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="clone(Ljava/lang/Object;)Ljava/lang/Object;"/>
-	</class>
-	<class name="org/apache/http/client/utils/URIUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createURI(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI;"/>
-		<method name="resolve(Ljava/net/URI;Ljava/lang/String;)Ljava/net/URI;"/>
-		<method name="resolve(Ljava/net/URI;Ljava/net/URI;)Ljava/net/URI;"/>
-		<method name="rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;)Ljava/net/URI;"/>
-		<method name="rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;Z)Ljava/net/URI;"/>
-	</class>
-	<class name="org/apache/http/client/utils/URLEncodedUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="format(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="isEncoded(Lorg/apache/http/HttpEntity;)Z"/>
-		<method name="parse(Ljava/net/URI;Ljava/lang/String;)Ljava/util/List;"/>
-		<method name="parse(Ljava/util/List;Ljava/util/Scanner;Ljava/lang/String;)V"/>
-		<method name="parse(Lorg/apache/http/HttpEntity;)Ljava/util/List;"/>
-		<field name="CONTENT_TYPE"/>
-	</class>
-	<class name="org/apache/http/conn/BasicEofSensorWatcher" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/EofSensorWatcher"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ManagedClientConnection;Z)V"/>
-		<field name="attemptReuse"/>
-		<field name="managedConn"/>
-	</class>
-	<class name="org/apache/http/conn/BasicManagedEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/HttpEntityWrapper"/>
-		<implements name="org/apache/http/conn/ConnectionReleaseTrigger"/>
-		<implements name="org/apache/http/conn/EofSensorWatcher"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpEntity;Lorg/apache/http/conn/ManagedClientConnection;Z)V"/>
-		<method name="releaseManagedConnection()V"/>
-		<field name="attemptReuse"/>
-		<field name="managedConn"/>
-	</class>
-	<class name="org/apache/http/conn/ClientConnectionManager" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="closeExpiredConnections()V"/>
-		<method name="closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V"/>
-		<method name="getSchemeRegistry()Lorg/apache/http/conn/scheme/SchemeRegistry;"/>
-		<method name="releaseConnection(Lorg/apache/http/conn/ManagedClientConnection;JLjava/util/concurrent/TimeUnit;)V"/>
-		<method name="requestConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ClientConnectionRequest;"/>
-		<method name="shutdown()V"/>
-	</class>
-	<class name="org/apache/http/conn/ClientConnectionManagerFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="newInstance(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionManager;"/>
-	</class>
-	<class name="org/apache/http/conn/ClientConnectionOperator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="createConnection()Lorg/apache/http/conn/OperatedClientConnection;"/>
-		<method name="openConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="updateSecureConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/conn/ClientConnectionRequest" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="abortRequest()V"/>
-		<method name="getConnection(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/conn/ManagedClientConnection;"/>
-	</class>
-	<class name="org/apache/http/conn/ConnectTimeoutException" since="1" deprecated="22">
-		<extends name="java/io/InterruptedIOException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/conn/ConnectionKeepAliveStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getKeepAliveDuration(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)J"/>
-	</class>
-	<class name="org/apache/http/conn/ConnectionPoolTimeoutException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/conn/ConnectTimeoutException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/conn/ConnectionReleaseTrigger" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="abortConnection()V"/>
-		<method name="releaseConnection()V"/>
-	</class>
-	<class name="org/apache/http/conn/EofSensorInputStream" since="1" deprecated="22" removed="23">
-		<extends name="java/io/InputStream"/>
-		<implements name="org/apache/http/conn/ConnectionReleaseTrigger"/>
-		<method name="&lt;init>(Ljava/io/InputStream;Lorg/apache/http/conn/EofSensorWatcher;)V"/>
-		<method name="checkAbort()V"/>
-		<method name="checkClose()V"/>
-		<method name="checkEOF(I)V"/>
-		<method name="isReadAllowed()Z"/>
-		<field name="wrappedStream"/>
-	</class>
-	<class name="org/apache/http/conn/EofSensorWatcher" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="eofDetected(Ljava/io/InputStream;)Z"/>
-		<method name="streamAbort(Ljava/io/InputStream;)Z"/>
-		<method name="streamClosed(Ljava/io/InputStream;)Z"/>
-	</class>
-	<class name="org/apache/http/conn/HttpHostConnectException" since="1" deprecated="22" removed="23">
-		<extends name="java/net/ConnectException"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/ConnectException;)V"/>
-		<method name="getHost()Lorg/apache/http/HttpHost;"/>
-	</class>
-	<class name="org/apache/http/conn/ManagedClientConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpClientConnection"/>
-		<implements name="org/apache/http/HttpInetConnection"/>
-		<implements name="org/apache/http/conn/ConnectionReleaseTrigger"/>
-		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
-		<method name="getSSLSession()Ljavax/net/ssl/SSLSession;"/>
-		<method name="getState()Ljava/lang/Object;"/>
-		<method name="isMarkedReusable()Z"/>
-		<method name="isSecure()Z"/>
-		<method name="layerProtocol(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="markReusable()V"/>
-		<method name="open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setIdleDuration(JLjava/util/concurrent/TimeUnit;)V"/>
-		<method name="setState(Ljava/lang/Object;)V"/>
-		<method name="tunnelProxy(Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V"/>
-		<method name="tunnelTarget(ZLorg/apache/http/params/HttpParams;)V"/>
-		<method name="unmarkReusable()V"/>
-	</class>
-	<class name="org/apache/http/conn/MultihomePlainSocketFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/scheme/SocketFactory"/>
-		<method name="&lt;init>()V"/>
-		<method name="getSocketFactory()Lorg/apache/http/conn/MultihomePlainSocketFactory;"/>
-	</class>
-	<class name="org/apache/http/conn/OperatedClientConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpClientConnection"/>
-		<implements name="org/apache/http/HttpInetConnection"/>
-		<method name="getSocket()Ljava/net/Socket;"/>
-		<method name="getTargetHost()Lorg/apache/http/HttpHost;"/>
-		<method name="isSecure()Z"/>
-		<method name="openCompleted(ZLorg/apache/http/params/HttpParams;)V"/>
-		<method name="opening(Ljava/net/Socket;Lorg/apache/http/HttpHost;)V"/>
-		<method name="update(Ljava/net/Socket;Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnConnectionPNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="MAX_STATUS_LINE_GARBAGE"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnConnectionParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setMaxStatusLineGarbage(I)V"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnManagerPNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="MAX_CONNECTIONS_PER_ROUTE"/>
-		<field name="MAX_TOTAL_CONNECTIONS"/>
-		<field name="TIMEOUT"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnManagerParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setConnectionsPerRoute(Lorg/apache/http/conn/params/ConnPerRouteBean;)V"/>
-		<method name="setMaxTotalConnections(I)V"/>
-		<method name="setTimeout(J)V"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnManagerParams" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/params/ConnManagerPNames"/>
-		<method name="&lt;init>()V"/>
-		<method name="getMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/params/ConnPerRoute;"/>
-		<method name="getMaxTotalConnections(Lorg/apache/http/params/HttpParams;)I"/>
-		<method name="getTimeout(Lorg/apache/http/params/HttpParams;)J"/>
-		<method name="setMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/params/ConnPerRoute;)V"/>
-		<method name="setMaxTotalConnections(Lorg/apache/http/params/HttpParams;I)V"/>
-		<method name="setTimeout(Lorg/apache/http/params/HttpParams;J)V"/>
-		<field name="DEFAULT_MAX_TOTAL_CONNECTIONS"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnPerRoute" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;)I"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnPerRouteBean" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/params/ConnPerRoute"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="getDefaultMax()I"/>
-		<method name="setDefaultMaxPerRoute(I)V"/>
-		<method name="setMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;I)V"/>
-		<method name="setMaxForRoutes(Ljava/util/Map;)V"/>
-		<field name="DEFAULT_MAX_CONNECTIONS_PER_ROUTE"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnRoutePNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="DEFAULT_PROXY"/>
-		<field name="FORCED_ROUTE"/>
-		<field name="LOCAL_ADDRESS"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnRouteParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setDefaultProxy(Lorg/apache/http/HttpHost;)V"/>
-		<method name="setForcedRoute(Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-		<method name="setLocalAddress(Ljava/net/InetAddress;)V"/>
-	</class>
-	<class name="org/apache/http/conn/params/ConnRouteParams" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/params/ConnRoutePNames"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultProxy(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/HttpHost;"/>
-		<method name="getForcedRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/routing/HttpRoute;"/>
-		<method name="getLocalAddress(Lorg/apache/http/params/HttpParams;)Ljava/net/InetAddress;"/>
-		<method name="setDefaultProxy(Lorg/apache/http/params/HttpParams;Lorg/apache/http/HttpHost;)V"/>
-		<method name="setForcedRoute(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-		<method name="setLocalAddress(Lorg/apache/http/params/HttpParams;Ljava/net/InetAddress;)V"/>
-		<field name="NO_HOST"/>
-		<field name="NO_ROUTE"/>
-	</class>
-	<class name="org/apache/http/conn/routing/BasicRouteDirector" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/routing/HttpRouteDirector"/>
-		<method name="&lt;init>()V"/>
-		<method name="directStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I"/>
-		<method name="firstStep(Lorg/apache/http/conn/routing/RouteInfo;)I"/>
-		<method name="proxiedStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I"/>
-	</class>
-	<class name="org/apache/http/conn/routing/HttpRoute" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/conn/routing/RouteInfo"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/HttpHost;Z)V"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Z)V"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;[Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V"/>
-	</class>
-	<class name="org/apache/http/conn/routing/HttpRouteDirector" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="nextStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I"/>
-		<field name="COMPLETE"/>
-		<field name="CONNECT_PROXY"/>
-		<field name="CONNECT_TARGET"/>
-		<field name="LAYER_PROTOCOL"/>
-		<field name="TUNNEL_PROXY"/>
-		<field name="TUNNEL_TARGET"/>
-		<field name="UNREACHABLE"/>
-	</class>
-	<class name="org/apache/http/conn/routing/HttpRoutePlanner" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;"/>
-	</class>
-	<class name="org/apache/http/conn/routing/RouteInfo" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getHopCount()I"/>
-		<method name="getHopTarget(I)Lorg/apache/http/HttpHost;"/>
-		<method name="getLayerType()Lorg/apache/http/conn/routing/RouteInfo$LayerType;"/>
-		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
-		<method name="getProxyHost()Lorg/apache/http/HttpHost;"/>
-		<method name="getTargetHost()Lorg/apache/http/HttpHost;"/>
-		<method name="getTunnelType()Lorg/apache/http/conn/routing/RouteInfo$TunnelType;"/>
-		<method name="isLayered()Z"/>
-		<method name="isSecure()Z"/>
-		<method name="isTunnelled()Z"/>
-	</class>
-	<class name="org/apache/http/conn/routing/RouteInfo$LayerType" since="1" removed="23">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Lorg/apache/http/conn/routing/RouteInfo$LayerType;"/>
-		<method name="values()[Lorg/apache/http/conn/routing/RouteInfo$LayerType;"/>
-		<field name="LAYERED"/>
-		<field name="PLAIN"/>
-	</class>
-	<class name="org/apache/http/conn/routing/RouteInfo$TunnelType" since="1" removed="23">
-		<extends name="java/lang/Enum"/>
-		<method name="valueOf(Ljava/lang/String;)Lorg/apache/http/conn/routing/RouteInfo$TunnelType;"/>
-		<method name="values()[Lorg/apache/http/conn/routing/RouteInfo$TunnelType;"/>
-		<field name="PLAIN"/>
-		<field name="TUNNELLED"/>
-	</class>
-	<class name="org/apache/http/conn/routing/RouteTracker" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/conn/routing/RouteInfo"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-		<method name="connectProxy(Lorg/apache/http/HttpHost;Z)V"/>
-		<method name="connectTarget(Z)V"/>
-		<method name="isConnected()Z"/>
-		<method name="layerProtocol(Z)V"/>
-		<method name="toRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
-		<method name="tunnelProxy(Lorg/apache/http/HttpHost;Z)V"/>
-		<method name="tunnelTarget(Z)V"/>
-	</class>
-	<class name="org/apache/http/conn/scheme/HostNameResolver" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<method name="resolve(Ljava/lang/String;)Ljava/net/InetAddress;"/>
-	</class>
-	<class name="org/apache/http/conn/scheme/LayeredSocketFactory" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/scheme/SocketFactory"/>
-		<method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;"/>
-	</class>
-	<class name="org/apache/http/conn/scheme/PlainSocketFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/scheme/SocketFactory"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/scheme/HostNameResolver;)V"/>
-		<method name="getSocketFactory()Lorg/apache/http/conn/scheme/PlainSocketFactory;"/>
-	</class>
-	<class name="org/apache/http/conn/scheme/Scheme" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Lorg/apache/http/conn/scheme/SocketFactory;I)V"/>
-		<method name="getDefaultPort()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getSocketFactory()Lorg/apache/http/conn/scheme/SocketFactory;"/>
-		<method name="isLayered()Z"/>
-		<method name="resolvePort(I)I"/>
-	</class>
-	<class name="org/apache/http/conn/scheme/SchemeRegistry" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="get(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;"/>
-		<method name="getScheme(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;"/>
-		<method name="getScheme(Lorg/apache/http/HttpHost;)Lorg/apache/http/conn/scheme/Scheme;"/>
-		<method name="getSchemeNames()Ljava/util/List;"/>
-		<method name="register(Lorg/apache/http/conn/scheme/Scheme;)Lorg/apache/http/conn/scheme/Scheme;"/>
-		<method name="setItems(Ljava/util/Map;)V"/>
-		<method name="unregister(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;"/>
-	</class>
-	<class name="org/apache/http/conn/scheme/SocketFactory" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<method name="connectSocket(Ljava/net/Socket;Ljava/lang/String;ILjava/net/InetAddress;ILorg/apache/http/params/HttpParams;)Ljava/net/Socket;"/>
-		<method name="createSocket()Ljava/net/Socket;"/>
-		<method name="isSecure(Ljava/net/Socket;)Z"/>
-	</class>
-	<class name="org/apache/http/conn/ssl/AbstractVerifier" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/ssl/X509HostnameVerifier"/>
-		<method name="&lt;init>()V"/>
-		<method name="acceptableCountryWildcard(Ljava/lang/String;)Z"/>
-		<method name="countDots(Ljava/lang/String;)I"/>
-		<method name="getCNs(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;"/>
-		<method name="getDNSSubjectAlts(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;"/>
-		<method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)V"/>
-	</class>
-	<class name="org/apache/http/conn/ssl/AllowAllHostnameVerifier" since="1" deprecated="22">
-		<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/conn/ssl/BrowserCompatHostnameVerifier" since="1" deprecated="22">
-		<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/conn/ssl/SSLSocketFactory" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/scheme/LayeredSocketFactory"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;Ljava/security/SecureRandom;Lorg/apache/http/conn/scheme/HostNameResolver;)V"/>
-		<method name="&lt;init>(Ljava/security/KeyStore;)V"/>
-		<method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;)V"/>
-		<method name="getHostnameVerifier()Lorg/apache/http/conn/ssl/X509HostnameVerifier;"/>
-		<method name="getSocketFactory()Lorg/apache/http/conn/ssl/SSLSocketFactory;"/>
-		<method name="setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V"/>
-		<field name="ALLOW_ALL_HOSTNAME_VERIFIER"/>
-		<field name="BROWSER_COMPATIBLE_HOSTNAME_VERIFIER"/>
-		<field name="SSL"/>
-		<field name="SSLV2"/>
-		<field name="STRICT_HOSTNAME_VERIFIER"/>
-		<field name="TLS"/>
-	</class>
-	<class name="org/apache/http/conn/ssl/StrictHostnameVerifier" since="1" deprecated="22">
-		<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/conn/ssl/X509HostnameVerifier" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<implements name="javax/net/ssl/HostnameVerifier"/>
-		<method name="verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V"/>
-		<method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V"/>
-		<method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/conn/util/InetAddressUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isIPv4Address(Ljava/lang/String;)Z"/>
-		<method name="isIPv6Address(Ljava/lang/String;)Z"/>
-		<method name="isIPv6HexCompressedAddress(Ljava/lang/String;)Z"/>
-		<method name="isIPv6StdAddress(Ljava/lang/String;)Z"/>
-	</class>
-	<class name="org/apache/http/cookie/ClientCookie" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/Cookie"/>
-		<method name="containsAttribute(Ljava/lang/String;)Z"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
-		<field name="COMMENTURL_ATTR"/>
-		<field name="COMMENT_ATTR"/>
-		<field name="DISCARD_ATTR"/>
-		<field name="DOMAIN_ATTR"/>
-		<field name="EXPIRES_ATTR"/>
-		<field name="MAX_AGE_ATTR"/>
-		<field name="PATH_ATTR"/>
-		<field name="PORT_ATTR"/>
-		<field name="SECURE_ATTR"/>
-		<field name="VERSION_ATTR"/>
-	</class>
-	<class name="org/apache/http/cookie/Cookie" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getComment()Ljava/lang/String;"/>
-		<method name="getCommentURL()Ljava/lang/String;"/>
-		<method name="getDomain()Ljava/lang/String;"/>
-		<method name="getExpiryDate()Ljava/util/Date;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getPorts()[I"/>
-		<method name="getValue()Ljava/lang/String;"/>
-		<method name="getVersion()I"/>
-		<method name="isExpired(Ljava/util/Date;)Z"/>
-		<method name="isPersistent()Z"/>
-		<method name="isSecure()Z"/>
-	</class>
-	<class name="org/apache/http/cookie/CookieAttributeHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z"/>
-		<method name="parse(Lorg/apache/http/cookie/SetCookie;Ljava/lang/String;)V"/>
-		<method name="validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V"/>
-	</class>
-	<class name="org/apache/http/cookie/CookieIdentityComparator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/Comparator"/>
-		<method name="&lt;init>()V"/>
-		<method name="compare(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/Cookie;)I"/>
-	</class>
-	<class name="org/apache/http/cookie/CookieOrigin" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;Z)V"/>
-		<method name="getHost()Ljava/lang/String;"/>
-		<method name="getPath()Ljava/lang/String;"/>
-		<method name="getPort()I"/>
-		<method name="isSecure()Z"/>
-	</class>
-	<class name="org/apache/http/cookie/CookiePathComparator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/util/Comparator"/>
-		<method name="&lt;init>()V"/>
-		<method name="compare(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/Cookie;)I"/>
-	</class>
-	<class name="org/apache/http/cookie/CookieSpec" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="formatCookies(Ljava/util/List;)Ljava/util/List;"/>
-		<method name="getVersion()I"/>
-		<method name="getVersionHeader()Lorg/apache/http/Header;"/>
-		<method name="match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z"/>
-		<method name="parse(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;"/>
-		<method name="validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V"/>
-	</class>
-	<class name="org/apache/http/cookie/CookieSpecFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="newInstance(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;"/>
-	</class>
-	<class name="org/apache/http/cookie/CookieSpecRegistry" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCookieSpec(Ljava/lang/String;)Lorg/apache/http/cookie/CookieSpec;"/>
-		<method name="getCookieSpec(Ljava/lang/String;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;"/>
-		<method name="getSpecNames()Ljava/util/List;"/>
-		<method name="register(Ljava/lang/String;Lorg/apache/http/cookie/CookieSpecFactory;)V"/>
-		<method name="setItems(Ljava/util/Map;)V"/>
-		<method name="unregister(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/cookie/MalformedCookieException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/ProtocolException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/cookie/SM" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="COOKIE"/>
-		<field name="COOKIE2"/>
-		<field name="SET_COOKIE"/>
-		<field name="SET_COOKIE2"/>
-	</class>
-	<class name="org/apache/http/cookie/SetCookie" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/Cookie"/>
-		<method name="setComment(Ljava/lang/String;)V"/>
-		<method name="setDomain(Ljava/lang/String;)V"/>
-		<method name="setExpiryDate(Ljava/util/Date;)V"/>
-		<method name="setPath(Ljava/lang/String;)V"/>
-		<method name="setSecure(Z)V"/>
-		<method name="setValue(Ljava/lang/String;)V"/>
-		<method name="setVersion(I)V"/>
-	</class>
-	<class name="org/apache/http/cookie/SetCookie2" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/SetCookie"/>
-		<method name="setCommentURL(Ljava/lang/String;)V"/>
-		<method name="setDiscard(Z)V"/>
-		<method name="setPorts([I)V"/>
-	</class>
-	<class name="org/apache/http/cookie/params/CookieSpecPNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="DATE_PATTERNS"/>
-		<field name="SINGLE_COOKIE_HEADER"/>
-	</class>
-	<class name="org/apache/http/cookie/params/CookieSpecParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setDatePatterns(Ljava/util/Collection;)V"/>
-		<method name="setSingleHeader(Z)V"/>
-	</class>
-	<class name="org/apache/http/entity/AbstractHttpEntity" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpEntity"/>
-		<method name="&lt;init>()V"/>
-		<method name="setChunked(Z)V"/>
-		<method name="setContentEncoding(Ljava/lang/String;)V"/>
-		<method name="setContentEncoding(Lorg/apache/http/Header;)V"/>
-		<method name="setContentType(Ljava/lang/String;)V"/>
-		<method name="setContentType(Lorg/apache/http/Header;)V"/>
-		<field name="chunked"/>
-		<field name="contentEncoding"/>
-		<field name="contentType"/>
-	</class>
-	<class name="org/apache/http/entity/BasicHttpEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
-		<method name="&lt;init>()V"/>
-		<method name="setContent(Ljava/io/InputStream;)V"/>
-		<method name="setContentLength(J)V"/>
-	</class>
-	<class name="org/apache/http/entity/BufferedHttpEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/HttpEntityWrapper"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpEntity;)V"/>
-	</class>
-	<class name="org/apache/http/entity/ByteArrayEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>([B)V"/>
-		<field name="content"/>
-	</class>
-	<class name="org/apache/http/entity/ContentLengthStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="determineLength(Lorg/apache/http/HttpMessage;)J"/>
-		<field name="CHUNKED"/>
-		<field name="IDENTITY"/>
-	</class>
-	<class name="org/apache/http/entity/ContentProducer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="writeTo(Ljava/io/OutputStream;)V"/>
-	</class>
-	<class name="org/apache/http/entity/EntityTemplate" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
-		<method name="&lt;init>(Lorg/apache/http/entity/ContentProducer;)V"/>
-	</class>
-	<class name="org/apache/http/entity/FileEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
-		<field name="file"/>
-	</class>
-	<class name="org/apache/http/entity/HttpEntityWrapper" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpEntity"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpEntity;)V"/>
-		<field name="wrappedEntity"/>
-	</class>
-	<class name="org/apache/http/entity/InputStreamEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
-		<method name="&lt;init>(Ljava/io/InputStream;J)V"/>
-	</class>
-	<class name="org/apache/http/entity/SerializableEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
-		<method name="&lt;init>(Ljava/io/Serializable;Z)V"/>
-	</class>
-	<class name="org/apache/http/entity/StringEntity" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="content"/>
-	</class>
-	<class name="org/apache/http/impl/AbstractHttpClientConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpClientConnection"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertOpen()V"/>
-		<method name="createEntityDeserializer()Lorg/apache/http/impl/entity/EntityDeserializer;"/>
-		<method name="createEntitySerializer()Lorg/apache/http/impl/entity/EntitySerializer;"/>
-		<method name="createHttpResponseFactory()Lorg/apache/http/HttpResponseFactory;"/>
-		<method name="createRequestWriter(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageWriter;"/>
-		<method name="createResponseParser(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageParser;"/>
-		<method name="doFlush()V"/>
-		<method name="init(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/AbstractHttpServerConnection" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpServerConnection"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertOpen()V"/>
-		<method name="createEntityDeserializer()Lorg/apache/http/impl/entity/EntityDeserializer;"/>
-		<method name="createEntitySerializer()Lorg/apache/http/impl/entity/EntitySerializer;"/>
-		<method name="createHttpRequestFactory()Lorg/apache/http/HttpRequestFactory;"/>
-		<method name="createRequestParser(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpRequestFactory;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageParser;"/>
-		<method name="createResponseWriter(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageWriter;"/>
-		<method name="doFlush()V"/>
-		<method name="init(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/DefaultConnectionReuseStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/ConnectionReuseStrategy"/>
-		<method name="&lt;init>()V"/>
-		<method name="createTokenIterator(Lorg/apache/http/HeaderIterator;)Lorg/apache/http/TokenIterator;"/>
-	</class>
-	<class name="org/apache/http/impl/DefaultHttpClientConnection" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/SocketHttpClientConnection"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/DefaultHttpRequestFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/DefaultHttpResponseFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpResponseFactory"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/apache/http/ReasonPhraseCatalog;)V"/>
-		<method name="determineLocale(Lorg/apache/http/protocol/HttpContext;)Ljava/util/Locale;"/>
-		<field name="reasonCatalog"/>
-	</class>
-	<class name="org/apache/http/impl/DefaultHttpServerConnection" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/SocketHttpServerConnection"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/EnglishReasonPhraseCatalog" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/ReasonPhraseCatalog"/>
-		<method name="&lt;init>()V"/>
-		<field name="INSTANCE"/>
-	</class>
-	<class name="org/apache/http/impl/HttpConnectionMetricsImpl" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpConnectionMetrics"/>
-		<method name="&lt;init>(Lorg/apache/http/io/HttpTransportMetrics;Lorg/apache/http/io/HttpTransportMetrics;)V"/>
-		<method name="incrementRequestCount()V"/>
-		<method name="incrementResponseCount()V"/>
-		<method name="setMetric(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<field name="RECEIVED_BYTES_COUNT"/>
-		<field name="REQUEST_COUNT"/>
-		<field name="RESPONSE_COUNT"/>
-		<field name="SENT_BYTES_COUNT"/>
-	</class>
-	<class name="org/apache/http/impl/NoConnectionReuseStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/ConnectionReuseStrategy"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/SocketHttpClientConnection" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/AbstractHttpClientConnection"/>
-		<implements name="org/apache/http/HttpInetConnection"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertNotOpen()V"/>
-		<method name="bind(Ljava/net/Socket;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="createSessionInputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;"/>
-		<method name="createSessionOutputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;"/>
-		<method name="getSocket()Ljava/net/Socket;"/>
-	</class>
-	<class name="org/apache/http/impl/SocketHttpServerConnection" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/AbstractHttpServerConnection"/>
-		<implements name="org/apache/http/HttpInetConnection"/>
-		<method name="&lt;init>()V"/>
-		<method name="assertNotOpen()V"/>
-		<method name="bind(Ljava/net/Socket;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="createHttpDataReceiver(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;"/>
-		<method name="createHttpDataTransmitter(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;"/>
-		<method name="getSocket()Ljava/net/Socket;"/>
-	</class>
-	<class name="org/apache/http/impl/auth/AuthSchemeBase" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/auth/AuthScheme"/>
-		<method name="&lt;init>()V"/>
-		<method name="isProxy()Z"/>
-		<method name="parseChallenge(Lorg/apache/http/util/CharArrayBuffer;II)V"/>
-	</class>
-	<class name="org/apache/http/impl/auth/BasicScheme" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/auth/RFC2617Scheme"/>
-		<method name="&lt;init>()V"/>
-		<method name="authenticate(Lorg/apache/http/auth/Credentials;Ljava/lang/String;Z)Lorg/apache/http/Header;"/>
-	</class>
-	<class name="org/apache/http/impl/auth/BasicSchemeFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/auth/AuthSchemeFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/auth/DigestScheme" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/auth/RFC2617Scheme"/>
-		<method name="&lt;init>()V"/>
-		<method name="createCnonce()Ljava/lang/String;"/>
-		<method name="overrideParamter(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/impl/auth/DigestSchemeFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/auth/AuthSchemeFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/auth/NTLMEngine" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="generateType1Msg(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="generateType3Msg(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/impl/auth/NTLMEngineException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/auth/AuthenticationException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/impl/auth/NTLMScheme" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/auth/AuthSchemeBase"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/auth/NTLMEngine;)V"/>
-	</class>
-	<class name="org/apache/http/impl/auth/RFC2617Scheme" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/auth/AuthSchemeBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="getParameters()Ljava/util/Map;"/>
-	</class>
-	<class name="org/apache/http/impl/auth/UnsupportedDigestAlgorithmException" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/impl/client/AbstractAuthenticationHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/AuthenticationHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAuthPreferences()Ljava/util/List;"/>
-		<method name="parseChallenges([Lorg/apache/http/Header;)Ljava/util/Map;"/>
-	</class>
-	<class name="org/apache/http/impl/client/AbstractHttpClient" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/HttpClient"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V"/>
-		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V"/>
-		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V"/>
-		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V"/>
-		<method name="clearRequestInterceptors()V"/>
-		<method name="clearResponseInterceptors()V"/>
-		<method name="createAuthSchemeRegistry()Lorg/apache/http/auth/AuthSchemeRegistry;"/>
-		<method name="createClientConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;"/>
-		<method name="createClientRequestDirector(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/client/RequestDirector;"/>
-		<method name="createConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;"/>
-		<method name="createConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;"/>
-		<method name="createCookieSpecRegistry()Lorg/apache/http/cookie/CookieSpecRegistry;"/>
-		<method name="createCookieStore()Lorg/apache/http/client/CookieStore;"/>
-		<method name="createCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;"/>
-		<method name="createHttpContext()Lorg/apache/http/protocol/HttpContext;"/>
-		<method name="createHttpParams()Lorg/apache/http/params/HttpParams;"/>
-		<method name="createHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;"/>
-		<method name="createHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;"/>
-		<method name="createHttpRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;"/>
-		<method name="createProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
-		<method name="createRedirectHandler()Lorg/apache/http/client/RedirectHandler;"/>
-		<method name="createRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;"/>
-		<method name="createTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
-		<method name="createUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;"/>
-		<method name="determineParams(Lorg/apache/http/HttpRequest;)Lorg/apache/http/params/HttpParams;"/>
-		<method name="getAuthSchemes()Lorg/apache/http/auth/AuthSchemeRegistry;"/>
-		<method name="getConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;"/>
-		<method name="getConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;"/>
-		<method name="getCookieSpecs()Lorg/apache/http/cookie/CookieSpecRegistry;"/>
-		<method name="getCookieStore()Lorg/apache/http/client/CookieStore;"/>
-		<method name="getCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;"/>
-		<method name="getHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;"/>
-		<method name="getHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;"/>
-		<method name="getProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
-		<method name="getRedirectHandler()Lorg/apache/http/client/RedirectHandler;"/>
-		<method name="getRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;"/>
-		<method name="getRequestInterceptor(I)Lorg/apache/http/HttpRequestInterceptor;"/>
-		<method name="getRequestInterceptorCount()I"/>
-		<method name="getResponseInterceptor(I)Lorg/apache/http/HttpResponseInterceptor;"/>
-		<method name="getResponseInterceptorCount()I"/>
-		<method name="getRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;"/>
-		<method name="getTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
-		<method name="getUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;"/>
-		<method name="removeRequestInterceptorByClass(Ljava/lang/Class;)V"/>
-		<method name="removeResponseInterceptorByClass(Ljava/lang/Class;)V"/>
-		<method name="setAuthSchemes(Lorg/apache/http/auth/AuthSchemeRegistry;)V"/>
-		<method name="setCookieSpecs(Lorg/apache/http/cookie/CookieSpecRegistry;)V"/>
-		<method name="setCookieStore(Lorg/apache/http/client/CookieStore;)V"/>
-		<method name="setCredentialsProvider(Lorg/apache/http/client/CredentialsProvider;)V"/>
-		<method name="setHttpRequestRetryHandler(Lorg/apache/http/client/HttpRequestRetryHandler;)V"/>
-		<method name="setKeepAliveStrategy(Lorg/apache/http/conn/ConnectionKeepAliveStrategy;)V"/>
-		<method name="setParams(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setProxyAuthenticationHandler(Lorg/apache/http/client/AuthenticationHandler;)V"/>
-		<method name="setRedirectHandler(Lorg/apache/http/client/RedirectHandler;)V"/>
-		<method name="setReuseStrategy(Lorg/apache/http/ConnectionReuseStrategy;)V"/>
-		<method name="setRoutePlanner(Lorg/apache/http/conn/routing/HttpRoutePlanner;)V"/>
-		<method name="setTargetAuthenticationHandler(Lorg/apache/http/client/AuthenticationHandler;)V"/>
-		<method name="setUserTokenHandler(Lorg/apache/http/client/UserTokenHandler;)V"/>
-	</class>
-	<class name="org/apache/http/impl/client/BasicCookieStore" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/CookieStore"/>
-		<method name="&lt;init>()V"/>
-		<method name="addCookies([Lorg/apache/http/cookie/Cookie;)V"/>
-	</class>
-	<class name="org/apache/http/impl/client/BasicCredentialsProvider" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/CredentialsProvider"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/client/BasicResponseHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/ResponseHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="handleResponse(Lorg/apache/http/HttpResponse;)Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/impl/client/ClientParamsStack" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/AbstractHttpParams"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/client/ClientParamsStack;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/client/ClientParamsStack;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="getApplicationParams()Lorg/apache/http/params/HttpParams;"/>
-		<method name="getClientParams()Lorg/apache/http/params/HttpParams;"/>
-		<method name="getOverrideParams()Lorg/apache/http/params/HttpParams;"/>
-		<method name="getRequestParams()Lorg/apache/http/params/HttpParams;"/>
-		<field name="applicationParams"/>
-		<field name="clientParams"/>
-		<field name="overrideParams"/>
-		<field name="requestParams"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/ConnectionKeepAliveStrategy"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultHttpClient" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/client/AbstractHttpClient"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultHttpRequestRetryHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/HttpRequestRetryHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(IZ)V"/>
-		<method name="getRetryCount()I"/>
-		<method name="isRequestSentRetryEnabled()Z"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultProxyAuthenticationHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/client/AbstractAuthenticationHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultRedirectHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/RedirectHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultRequestDirector" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/RequestDirector"/>
-		<method name="&lt;init>(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="createConnectRequest(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpRequest;"/>
-		<method name="createTunnelToProxy(Lorg/apache/http/conn/routing/HttpRoute;ILorg/apache/http/protocol/HttpContext;)Z"/>
-		<method name="createTunnelToTarget(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)Z"/>
-		<method name="determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;"/>
-		<method name="establishRoute(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)V"/>
-		<method name="handleResponse(Lorg/apache/http/impl/client/RoutedRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/impl/client/RoutedRequest;"/>
-		<method name="releaseConnection()V"/>
-		<method name="rewriteRequestURI(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-		<field name="connManager"/>
-		<field name="httpProcessor"/>
-		<field name="keepAliveStrategy"/>
-		<field name="managedConn"/>
-		<field name="params"/>
-		<field name="redirectHandler"/>
-		<field name="requestExec"/>
-		<field name="retryHandler"/>
-		<field name="reuseStrategy"/>
-		<field name="routePlanner"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultTargetAuthenticationHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/client/AbstractAuthenticationHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/client/DefaultUserTokenHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/client/UserTokenHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/client/EntityEnclosingRequestWrapper" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/client/RequestWrapper"/>
-		<implements name="org/apache/http/HttpEntityEnclosingRequest"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpEntityEnclosingRequest;)V"/>
-	</class>
-	<class name="org/apache/http/impl/client/RedirectLocations" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(Ljava/net/URI;)V"/>
-		<method name="contains(Ljava/net/URI;)Z"/>
-		<method name="remove(Ljava/net/URI;)Z"/>
-	</class>
-	<class name="org/apache/http/impl/client/RequestWrapper" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/message/AbstractHttpMessage"/>
-		<implements name="org/apache/http/client/methods/HttpUriRequest"/>
-		<method name="&lt;init>(Lorg/apache/http/HttpRequest;)V"/>
-		<method name="getExecCount()I"/>
-		<method name="getOriginal()Lorg/apache/http/HttpRequest;"/>
-		<method name="incrementExecCount()V"/>
-		<method name="isRepeatable()Z"/>
-		<method name="resetHeaders()V"/>
-		<method name="setMethod(Ljava/lang/String;)V"/>
-		<method name="setProtocolVersion(Lorg/apache/http/ProtocolVersion;)V"/>
-		<method name="setURI(Ljava/net/URI;)V"/>
-	</class>
-	<class name="org/apache/http/impl/client/RoutedRequest" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-		<method name="getRequest()Lorg/apache/http/impl/client/RequestWrapper;"/>
-		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
-		<field name="request"/>
-		<field name="route"/>
-	</class>
-	<class name="org/apache/http/impl/client/TunnelRefusedException" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/HttpException"/>
-		<method name="&lt;init>(Ljava/lang/String;Lorg/apache/http/HttpResponse;)V"/>
-		<method name="getResponse()Lorg/apache/http/HttpResponse;"/>
-	</class>
-	<class name="org/apache/http/impl/conn/AbstractClientConnAdapter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/ManagedClientConnection"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/conn/OperatedClientConnection;)V"/>
-		<method name="assertNotAborted()V"/>
-		<method name="assertValid(Lorg/apache/http/conn/OperatedClientConnection;)V"/>
-		<method name="detach()V"/>
-		<method name="getManager()Lorg/apache/http/conn/ClientConnectionManager;"/>
-		<method name="getWrappedConnection()Lorg/apache/http/conn/OperatedClientConnection;"/>
-	</class>
-	<class name="org/apache/http/impl/conn/AbstractPoolEntry" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-		<method name="getState()Ljava/lang/Object;"/>
-		<method name="layerProtocol(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setState(Ljava/lang/Object;)V"/>
-		<method name="shutdownEntry()V"/>
-		<method name="tunnelProxy(Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V"/>
-		<method name="tunnelTarget(ZLorg/apache/http/params/HttpParams;)V"/>
-		<field name="connOperator"/>
-		<field name="connection"/>
-		<field name="route"/>
-		<field name="state"/>
-		<field name="tracker"/>
-	</class>
-	<class name="org/apache/http/impl/conn/AbstractPooledConnAdapter" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/conn/AbstractClientConnAdapter"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V"/>
-		<method name="assertAttached()V"/>
-		<field name="poolEntry"/>
-	</class>
-	<class name="org/apache/http/impl/conn/DefaultClientConnection" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/SocketHttpClientConnection"/>
-		<implements name="org/apache/http/conn/OperatedClientConnection"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/DefaultClientConnectionOperator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/ClientConnectionOperator"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
-		<method name="prepareSocket(Ljava/net/Socket;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
-		<field name="schemeRegistry"/>
-	</class>
-	<class name="org/apache/http/impl/conn/DefaultHttpRoutePlanner" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/routing/HttpRoutePlanner"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
-		<field name="schemeRegistry"/>
-	</class>
-	<class name="org/apache/http/impl/conn/DefaultResponseParser" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/io/AbstractMessageParser"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/IdleConnectionHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="add(Lorg/apache/http/HttpConnection;JLjava/util/concurrent/TimeUnit;)V"/>
-		<method name="closeExpiredConnections()V"/>
-		<method name="closeIdleConnections(J)V"/>
-		<method name="remove(Lorg/apache/http/HttpConnection;)Z"/>
-		<method name="removeAll()V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/LoggingSessionInputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/io/SessionInputBuffer"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/impl/conn/Wire;)V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/LoggingSessionOutputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/io/SessionOutputBuffer"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/impl/conn/Wire;)V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/ProxySelectorRoutePlanner" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/routing/HttpRoutePlanner"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/scheme/SchemeRegistry;Ljava/net/ProxySelector;)V"/>
-		<method name="chooseProxy(Ljava/util/List;Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Ljava/net/Proxy;"/>
-		<method name="determineProxy(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpHost;"/>
-		<method name="getHost(Ljava/net/InetSocketAddress;)Ljava/lang/String;"/>
-		<method name="getProxySelector()Ljava/net/ProxySelector;"/>
-		<method name="setProxySelector(Ljava/net/ProxySelector;)V"/>
-		<field name="proxySelector"/>
-		<field name="schemeRegistry"/>
-	</class>
-	<class name="org/apache/http/impl/conn/SingleClientConnManager" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/ClientConnectionManager"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
-		<method name="assertStillUp()V"/>
-		<method name="createConnectionOperator(Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionOperator;"/>
-		<method name="getConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ManagedClientConnection;"/>
-		<method name="revokeConnection()V"/>
-		<field name="MISUSE_MESSAGE"/>
-		<field name="alwaysShutDown"/>
-		<field name="connOperator"/>
-		<field name="connectionExpiresTime"/>
-		<field name="isShutDown"/>
-		<field name="lastReleaseTime"/>
-		<field name="managedConn"/>
-		<field name="schemeRegistry"/>
-		<field name="uniquePoolEntry"/>
-	</class>
-	<class name="org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter" since="1" removed="23">
-		<extends name="org/apache/http/impl/conn/AbstractPooledConnAdapter"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/conn/SingleClientConnManager;Lorg/apache/http/impl/conn/SingleClientConnManager$PoolEntry;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/SingleClientConnManager$PoolEntry" since="1" removed="23">
-		<extends name="org/apache/http/impl/conn/AbstractPoolEntry"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/conn/SingleClientConnManager;)V"/>
-		<method name="close()V"/>
-		<method name="shutdown()V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/Wire" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/commons/logging/Log;)V"/>
-		<method name="enabled()Z"/>
-		<method name="input(I)V"/>
-		<method name="input(Ljava/io/InputStream;)V"/>
-		<method name="input(Ljava/lang/String;)V"/>
-		<method name="input([B)V"/>
-		<method name="input([BII)V"/>
-		<method name="output(I)V"/>
-		<method name="output(Ljava/io/InputStream;)V"/>
-		<method name="output(Ljava/lang/String;)V"/>
-		<method name="output([B)V"/>
-		<method name="output([BII)V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/AbstractConnPool" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/impl/conn/tsccm/RefQueueHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="closeConnection(Lorg/apache/http/conn/OperatedClientConnection;)V"/>
-		<method name="closeExpiredConnections()V"/>
-		<method name="closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V"/>
-		<method name="deleteClosedConnections()V"/>
-		<method name="enableConnectionGC()V"/>
-		<method name="freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;ZJLjava/util/concurrent/TimeUnit;)V"/>
-		<method name="getEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
-		<method name="handleLostEntry(Lorg/apache/http/conn/routing/HttpRoute;)V"/>
-		<method name="requestPoolEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/PoolEntryRequest;"/>
-		<method name="shutdown()V"/>
-		<field name="idleConnHandler"/>
-		<field name="isShutDown"/>
-		<field name="issuedConnections"/>
-		<field name="numConnections"/>
-		<field name="poolLock"/>
-		<field name="refQueue"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/BasicPoolEntry" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/conn/AbstractPoolEntry"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/ref/ReferenceQueue;)V"/>
-		<method name="getConnection()Lorg/apache/http/conn/OperatedClientConnection;"/>
-		<method name="getPlannedRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
-		<method name="getWeakRef()Lorg/apache/http/impl/conn/tsccm/BasicPoolEntryRef;"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/BasicPoolEntryRef" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/ref/WeakReference"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;Ljava/lang/ref/ReferenceQueue;)V"/>
-		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/conn/AbstractPooledConnAdapter"/>
-		<method name="&lt;init>(Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V"/>
-		<method name="getPoolEntry()Lorg/apache/http/impl/conn/AbstractPoolEntry;"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/ConnPoolByRoute" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/conn/tsccm/AbstractConnPool"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="createEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Lorg/apache/http/conn/ClientConnectionOperator;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
-		<method name="createFreeConnQueue()Ljava/util/Queue;"/>
-		<method name="createRouteToPoolMap()Ljava/util/Map;"/>
-		<method name="createWaitingThreadQueue()Ljava/util/Queue;"/>
-		<method name="deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V"/>
-		<method name="deleteLeastUsedEntry()V"/>
-		<method name="getConnectionsInPool(Lorg/apache/http/conn/routing/HttpRoute;)I"/>
-		<method name="getEntryBlocking(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
-		<method name="getFreeEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
-		<method name="getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;"/>
-		<method name="newRouteSpecificPool(Lorg/apache/http/conn/routing/HttpRoute;)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;"/>
-		<method name="newWaitingThread(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)Lorg/apache/http/impl/conn/tsccm/WaitingThread;"/>
-		<method name="notifyWaitingThread(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V"/>
-		<field name="freeConnections"/>
-		<field name="maxTotalConnections"/>
-		<field name="operator"/>
-		<field name="routeToPool"/>
-		<field name="waitingThreads"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/PoolEntryRequest" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="abortRequest()V"/>
-		<method name="getPoolEntry(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/RefQueueHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="handleReference(Ljava/lang/ref/Reference;)V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/RefQueueWorker" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Runnable"/>
-		<method name="&lt;init>(Ljava/lang/ref/ReferenceQueue;Lorg/apache/http/impl/conn/tsccm/RefQueueHandler;)V"/>
-		<method name="shutdown()V"/>
-		<field name="refHandler"/>
-		<field name="refQueue"/>
-		<field name="workerThread"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/RouteSpecificPool" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/http/conn/routing/HttpRoute;I)V"/>
-		<method name="allocEntry(Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
-		<method name="createdEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V"/>
-		<method name="deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)Z"/>
-		<method name="dropEntry()V"/>
-		<method name="freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V"/>
-		<method name="getCapacity()I"/>
-		<method name="getEntryCount()I"/>
-		<method name="getMaxEntries()I"/>
-		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
-		<method name="hasThread()Z"/>
-		<method name="isUnused()Z"/>
-		<method name="nextThread()Lorg/apache/http/impl/conn/tsccm/WaitingThread;"/>
-		<method name="queueThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V"/>
-		<method name="removeThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V"/>
-		<field name="freeEntries"/>
-		<field name="maxEntries"/>
-		<field name="numEntries"/>
-		<field name="route"/>
-		<field name="waitingThreads"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/conn/ClientConnectionManager"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
-		<method name="createConnectionOperator(Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionOperator;"/>
-		<method name="createConnectionPool(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;"/>
-		<method name="getConnectionsInPool()I"/>
-		<method name="getConnectionsInPool(Lorg/apache/http/conn/routing/HttpRoute;)I"/>
-		<field name="connOperator"/>
-		<field name="connectionPool"/>
-		<field name="schemeRegistry"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/WaitingThread" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V"/>
-		<method name="await(Ljava/util/Date;)Z"/>
-		<method name="getCondition()Ljava/util/concurrent/locks/Condition;"/>
-		<method name="getPool()Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;"/>
-		<method name="getThread()Ljava/lang/Thread;"/>
-		<method name="interrupt()V"/>
-		<method name="wakeup()V"/>
-	</class>
-	<class name="org/apache/http/impl/conn/tsccm/WaitingThreadAborter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="abort()V"/>
-		<method name="setWaitingThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/AbstractCookieSpec" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieSpec"/>
-		<method name="&lt;init>()V"/>
-		<method name="findAttribHandler(Ljava/lang/String;)Lorg/apache/http/cookie/CookieAttributeHandler;"/>
-		<method name="getAttribHandler(Ljava/lang/String;)Lorg/apache/http/cookie/CookieAttributeHandler;"/>
-		<method name="getAttribHandlers()Ljava/util/Collection;"/>
-		<method name="registerAttribHandler(Ljava/lang/String;Lorg/apache/http/cookie/CookieAttributeHandler;)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicClientCookie" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/cookie/ClientCookie"/>
-		<implements name="org/apache/http/cookie/SetCookie"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicClientCookie2" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/BasicClientCookie"/>
-		<implements name="org/apache/http/cookie/SetCookie2"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicCommentHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicDomainHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicExpiresHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
-		<method name="&lt;init>([Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicMaxAgeHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicPathHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BasicSecureHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BestMatchSpec" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieSpec"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([Ljava/lang/String;Z)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BestMatchSpecFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BrowserCompatSpec" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/CookieSpecBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([Ljava/lang/String;)V"/>
-		<field name="DATE_PATTERNS"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/BrowserCompatSpecFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/CookieSpecBase" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/AbstractCookieSpec"/>
-		<method name="&lt;init>()V"/>
-		<method name="getDefaultDomain(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;"/>
-		<method name="getDefaultPath(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;"/>
-		<method name="parse([Lorg/apache/http/HeaderElement;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/DateParseException" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/DateUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="formatDate(Ljava/util/Date;)Ljava/lang/String;"/>
-		<method name="formatDate(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="parseDate(Ljava/lang/String;)Ljava/util/Date;"/>
-		<method name="parseDate(Ljava/lang/String;[Ljava/lang/String;)Ljava/util/Date;"/>
-		<method name="parseDate(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date;"/>
-		<field name="GMT"/>
-		<field name="PATTERN_ASCTIME"/>
-		<field name="PATTERN_RFC1036"/>
-		<field name="PATTERN_RFC1123"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/NetscapeDomainHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/BasicDomainHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/NetscapeDraftHeaderParser" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="parseHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;"/>
-		<field name="DEFAULT"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/NetscapeDraftSpec" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/CookieSpecBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([Ljava/lang/String;)V"/>
-		<field name="EXPIRES_PATTERN"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/NetscapeDraftSpecFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2109DomainHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2109Spec" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/CookieSpecBase"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([Ljava/lang/String;Z)V"/>
-		<method name="formatCookieAsVer(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/cookie/Cookie;I)V"/>
-		<method name="formatParamAsVer(Lorg/apache/http/util/CharArrayBuffer;Ljava/lang/String;Ljava/lang/String;I)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2109SpecFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2109VersionHandler" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2965DomainAttributeHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-		<method name="domainMatch(Ljava/lang/String;Ljava/lang/String;)Z"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2965PortAttributeHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2965Spec" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/cookie/RFC2109Spec"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>([Ljava/lang/String;Z)V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2965SpecFactory" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/cookie/RFC2965VersionAttributeHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/entity/EntityDeserializer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/http/entity/ContentLengthStrategy;)V"/>
-		<method name="deserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/HttpEntity;"/>
-		<method name="doDeserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/entity/BasicHttpEntity;"/>
-	</class>
-	<class name="org/apache/http/impl/entity/EntitySerializer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/http/entity/ContentLengthStrategy;)V"/>
-		<method name="doSerialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;)Ljava/io/OutputStream;"/>
-		<method name="serialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;Lorg/apache/http/HttpEntity;)V"/>
-	</class>
-	<class name="org/apache/http/impl/entity/LaxContentLengthStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/entity/ContentLengthStrategy"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/entity/StrictContentLengthStrategy" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/entity/ContentLengthStrategy"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/impl/io/AbstractMessageParser" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/io/HttpMessageParser"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="parseHead(Lorg/apache/http/io/SessionInputBuffer;)Lorg/apache/http/HttpMessage;"/>
-		<method name="parseHeaders(Lorg/apache/http/io/SessionInputBuffer;IILorg/apache/http/message/LineParser;)[Lorg/apache/http/Header;"/>
-		<field name="lineParser"/>
-	</class>
-	<class name="org/apache/http/impl/io/AbstractMessageWriter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/io/HttpMessageWriter"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="writeHeadLine(Lorg/apache/http/HttpMessage;)V"/>
-		<field name="lineBuf"/>
-		<field name="lineFormatter"/>
-		<field name="sessionBuffer"/>
-	</class>
-	<class name="org/apache/http/impl/io/AbstractSessionInputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/io/SessionInputBuffer"/>
-		<method name="&lt;init>()V"/>
-		<method name="fillBuffer()I"/>
-		<method name="hasBufferedData()Z"/>
-		<method name="init(Ljava/io/InputStream;ILorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/AbstractSessionOutputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/io/SessionOutputBuffer"/>
-		<method name="&lt;init>()V"/>
-		<method name="flushBuffer()V"/>
-		<method name="init(Ljava/io/OutputStream;ILorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/ChunkedInputStream" since="1" deprecated="22" removed="23">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;)V"/>
-		<method name="getFooters()[Lorg/apache/http/Header;"/>
-	</class>
-	<class name="org/apache/http/impl/io/ChunkedOutputStream" since="1" deprecated="22" removed="23">
-		<extends name="java/io/OutputStream"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;I)V"/>
-		<method name="finish()V"/>
-		<method name="flushCache()V"/>
-		<method name="flushCacheWithAppend([BII)V"/>
-		<method name="writeClosingChunk()V"/>
-	</class>
-	<class name="org/apache/http/impl/io/ContentLengthInputStream" since="1" deprecated="22" removed="23">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;J)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/ContentLengthOutputStream" since="1" deprecated="22" removed="23">
-		<extends name="java/io/OutputStream"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;J)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/HttpRequestParser" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/io/AbstractMessageParser"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpRequestFactory;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/HttpRequestWriter" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/io/AbstractMessageWriter"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/HttpResponseParser" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/io/AbstractMessageParser"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/HttpResponseWriter" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/io/AbstractMessageWriter"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/HttpTransportMetricsImpl" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/io/HttpTransportMetrics"/>
-		<method name="&lt;init>()V"/>
-		<method name="incrementBytesTransferred(J)V"/>
-		<method name="setBytesTransferred(J)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/IdentityInputStream" since="1" deprecated="22" removed="23">
-		<extends name="java/io/InputStream"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/IdentityOutputStream" since="1" deprecated="22" removed="23">
-		<extends name="java/io/OutputStream"/>
-		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/SocketInputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/io/AbstractSessionInputBuffer"/>
-		<method name="&lt;init>(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/impl/io/SocketOutputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/impl/io/AbstractSessionOutputBuffer"/>
-		<method name="&lt;init>(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V"/>
-	</class>
-	<class name="org/apache/http/io/HttpMessageParser" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="parse()Lorg/apache/http/HttpMessage;"/>
-	</class>
-	<class name="org/apache/http/io/HttpMessageWriter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="write(Lorg/apache/http/HttpMessage;)V"/>
-	</class>
-	<class name="org/apache/http/io/HttpTransportMetrics" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getBytesTransferred()J"/>
-		<method name="reset()V"/>
-	</class>
-	<class name="org/apache/http/io/SessionInputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getMetrics()Lorg/apache/http/io/HttpTransportMetrics;"/>
-		<method name="isDataAvailable(I)Z"/>
-		<method name="read()I"/>
-		<method name="read([B)I"/>
-		<method name="read([BII)I"/>
-		<method name="readLine()Ljava/lang/String;"/>
-		<method name="readLine(Lorg/apache/http/util/CharArrayBuffer;)I"/>
-	</class>
-	<class name="org/apache/http/io/SessionOutputBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="flush()V"/>
-		<method name="getMetrics()Lorg/apache/http/io/HttpTransportMetrics;"/>
-		<method name="write(I)V"/>
-		<method name="write([B)V"/>
-		<method name="write([BII)V"/>
-		<method name="writeLine(Ljava/lang/String;)V"/>
-		<method name="writeLine(Lorg/apache/http/util/CharArrayBuffer;)V"/>
-	</class>
-	<class name="org/apache/http/message/AbstractHttpMessage" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpMessage"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<field name="headergroup"/>
-		<field name="params"/>
-	</class>
-	<class name="org/apache/http/message/BasicHeader" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/Header"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicHeaderElement" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/HeaderElement"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicHeaderElementIterator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HeaderElementIterator"/>
-		<method name="&lt;init>(Lorg/apache/http/HeaderIterator;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/HeaderIterator;Lorg/apache/http/message/HeaderValueParser;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicHeaderIterator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HeaderIterator"/>
-		<method name="&lt;init>([Lorg/apache/http/Header;Ljava/lang/String;)V"/>
-		<method name="filterHeader(I)Z"/>
-		<method name="findNext(I)I"/>
-		<field name="allHeaders"/>
-		<field name="currentIndex"/>
-		<field name="headerName"/>
-	</class>
-	<class name="org/apache/http/message/BasicHeaderValueFormatter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/message/HeaderValueFormatter"/>
-		<method name="&lt;init>()V"/>
-		<method name="doFormatValue(Lorg/apache/http/util/CharArrayBuffer;Ljava/lang/String;Z)V"/>
-		<method name="estimateElementsLen([Lorg/apache/http/HeaderElement;)I"/>
-		<method name="estimateHeaderElementLen(Lorg/apache/http/HeaderElement;)I"/>
-		<method name="estimateNameValuePairLen(Lorg/apache/http/NameValuePair;)I"/>
-		<method name="estimateParametersLen([Lorg/apache/http/NameValuePair;)I"/>
-		<method name="formatElements([Lorg/apache/http/HeaderElement;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
-		<method name="formatHeaderElement(Lorg/apache/http/HeaderElement;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
-		<method name="formatNameValuePair(Lorg/apache/http/NameValuePair;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
-		<method name="formatParameters([Lorg/apache/http/NameValuePair;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
-		<method name="isSeparator(C)Z"/>
-		<method name="isUnsafe(C)Z"/>
-		<field name="DEFAULT"/>
-		<field name="SEPARATORS"/>
-		<field name="UNSAFE_CHARS"/>
-	</class>
-	<class name="org/apache/http/message/BasicHeaderValueParser" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/message/HeaderValueParser"/>
-		<method name="&lt;init>()V"/>
-		<method name="createHeaderElement(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)Lorg/apache/http/HeaderElement;"/>
-		<method name="createNameValuePair(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/NameValuePair;"/>
-		<method name="parseElements(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)[Lorg/apache/http/HeaderElement;"/>
-		<method name="parseHeaderElement(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)Lorg/apache/http/HeaderElement;"/>
-		<method name="parseNameValuePair(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)Lorg/apache/http/NameValuePair;"/>
-		<method name="parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;[C)Lorg/apache/http/NameValuePair;"/>
-		<method name="parseParameters(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)[Lorg/apache/http/NameValuePair;"/>
-		<field name="DEFAULT"/>
-	</class>
-	<class name="org/apache/http/message/BasicHttpEntityEnclosingRequest" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/message/BasicHttpRequest"/>
-		<implements name="org/apache/http/HttpEntityEnclosingRequest"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/RequestLine;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicHttpRequest" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/message/AbstractHttpMessage"/>
-		<implements name="org/apache/http/HttpRequest"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/RequestLine;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicHttpResponse" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/message/AbstractHttpMessage"/>
-		<implements name="org/apache/http/HttpResponse"/>
-		<method name="&lt;init>(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/StatusLine;)V"/>
-		<method name="&lt;init>(Lorg/apache/http/StatusLine;Lorg/apache/http/ReasonPhraseCatalog;Ljava/util/Locale;)V"/>
-		<method name="getReason(I)Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/message/BasicLineFormatter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/message/LineFormatter"/>
-		<method name="&lt;init>()V"/>
-		<method name="doFormatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)V"/>
-		<method name="doFormatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)V"/>
-		<method name="doFormatStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/StatusLine;)V"/>
-		<method name="estimateProtocolVersionLen(Lorg/apache/http/ProtocolVersion;)I"/>
-		<method name="formatHeader(Lorg/apache/http/Header;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
-		<method name="formatProtocolVersion(Lorg/apache/http/ProtocolVersion;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
-		<method name="formatRequestLine(Lorg/apache/http/RequestLine;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
-		<method name="formatStatusLine(Lorg/apache/http/StatusLine;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
-		<method name="initBuffer(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/util/CharArrayBuffer;"/>
-		<field name="DEFAULT"/>
-	</class>
-	<class name="org/apache/http/message/BasicLineParser" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/message/LineParser"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/apache/http/ProtocolVersion;)V"/>
-		<method name="createProtocolVersion(II)Lorg/apache/http/ProtocolVersion;"/>
-		<method name="createRequestLine(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/RequestLine;"/>
-		<method name="createStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)Lorg/apache/http/StatusLine;"/>
-		<method name="parseHeader(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/Header;"/>
-		<method name="parseProtocolVersion(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/ProtocolVersion;"/>
-		<method name="parseRequestLine(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/RequestLine;"/>
-		<method name="parseStatusLine(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/StatusLine;"/>
-		<method name="skipWhitespace(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)V"/>
-		<field name="DEFAULT"/>
-		<field name="protocol"/>
-	</class>
-	<class name="org/apache/http/message/BasicListHeaderIterator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HeaderIterator"/>
-		<method name="&lt;init>(Ljava/util/List;Ljava/lang/String;)V"/>
-		<method name="filterHeader(I)Z"/>
-		<method name="findNext(I)I"/>
-		<field name="allHeaders"/>
-		<field name="currentIndex"/>
-		<field name="headerName"/>
-		<field name="lastIndex"/>
-	</class>
-	<class name="org/apache/http/message/BasicNameValuePair" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/NameValuePair"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicRequestLine" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/RequestLine"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicStatusLine" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/StatusLine"/>
-		<method name="&lt;init>(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/message/BasicTokenIterator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/TokenIterator"/>
-		<method name="&lt;init>(Lorg/apache/http/HeaderIterator;)V"/>
-		<method name="createToken(Ljava/lang/String;II)Ljava/lang/String;"/>
-		<method name="findNext(I)I"/>
-		<method name="findTokenEnd(I)I"/>
-		<method name="findTokenSeparator(I)I"/>
-		<method name="findTokenStart(I)I"/>
-		<method name="isHttpSeparator(C)Z"/>
-		<method name="isTokenChar(C)Z"/>
-		<method name="isTokenSeparator(C)Z"/>
-		<method name="isWhitespace(C)Z"/>
-		<field name="HTTP_SEPARATORS"/>
-		<field name="currentHeader"/>
-		<field name="currentToken"/>
-		<field name="headerIt"/>
-		<field name="searchPos"/>
-	</class>
-	<class name="org/apache/http/message/BufferedHeader" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/FormattedHeader"/>
-		<method name="&lt;init>(Lorg/apache/http/util/CharArrayBuffer;)V"/>
-	</class>
-	<class name="org/apache/http/message/HeaderGroup" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="addHeader(Lorg/apache/http/Header;)V"/>
-		<method name="clear()V"/>
-		<method name="containsHeader(Ljava/lang/String;)Z"/>
-		<method name="copy()Lorg/apache/http/message/HeaderGroup;"/>
-		<method name="getAllHeaders()[Lorg/apache/http/Header;"/>
-		<method name="getCondensedHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
-		<method name="getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
-		<method name="getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;"/>
-		<method name="getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
-		<method name="iterator()Lorg/apache/http/HeaderIterator;"/>
-		<method name="iterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;"/>
-		<method name="removeHeader(Lorg/apache/http/Header;)V"/>
-		<method name="setHeaders([Lorg/apache/http/Header;)V"/>
-		<method name="updateHeader(Lorg/apache/http/Header;)V"/>
-	</class>
-	<class name="org/apache/http/message/HeaderValueFormatter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="formatElements(Lorg/apache/http/util/CharArrayBuffer;[Lorg/apache/http/HeaderElement;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
-		<method name="formatHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/HeaderElement;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
-		<method name="formatNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/NameValuePair;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
-		<method name="formatParameters(Lorg/apache/http/util/CharArrayBuffer;[Lorg/apache/http/NameValuePair;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
-	</class>
-	<class name="org/apache/http/message/HeaderValueParser" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="parseElements(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/HeaderElement;"/>
-		<method name="parseHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;"/>
-		<method name="parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/NameValuePair;"/>
-		<method name="parseParameters(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/NameValuePair;"/>
-	</class>
-	<class name="org/apache/http/message/LineFormatter" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="appendProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/util/CharArrayBuffer;"/>
-		<method name="formatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)Lorg/apache/http/util/CharArrayBuffer;"/>
-		<method name="formatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)Lorg/apache/http/util/CharArrayBuffer;"/>
-		<method name="formatStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/StatusLine;)Lorg/apache/http/util/CharArrayBuffer;"/>
-	</class>
-	<class name="org/apache/http/message/LineParser" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="hasProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Z"/>
-		<method name="parseHeader(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/Header;"/>
-		<method name="parseProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/ProtocolVersion;"/>
-		<method name="parseRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/RequestLine;"/>
-		<method name="parseStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/StatusLine;"/>
-	</class>
-	<class name="org/apache/http/message/ParserCursor" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(II)V"/>
-		<method name="atEnd()Z"/>
-		<method name="getLowerBound()I"/>
-		<method name="getPos()I"/>
-		<method name="getUpperBound()I"/>
-		<method name="updatePos(I)V"/>
-	</class>
-	<class name="org/apache/http/params/AbstractHttpParams" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/params/HttpParams"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/params/BasicHttpParams" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/AbstractHttpParams"/>
-		<implements name="java/io/Serializable"/>
-		<implements name="java/lang/Cloneable"/>
-		<method name="&lt;init>()V"/>
-		<method name="clear()V"/>
-		<method name="copyParams(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="isParameterSet(Ljava/lang/String;)Z"/>
-		<method name="isParameterSetLocally(Ljava/lang/String;)Z"/>
-		<method name="setParameters([Ljava/lang/String;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="org/apache/http/params/CoreConnectionPNames" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<field name="CONNECTION_TIMEOUT"/>
-		<field name="MAX_HEADER_COUNT"/>
-		<field name="MAX_LINE_LENGTH"/>
-		<field name="SOCKET_BUFFER_SIZE"/>
-		<field name="SO_LINGER"/>
-		<field name="SO_TIMEOUT"/>
-		<field name="STALE_CONNECTION_CHECK"/>
-		<field name="TCP_NODELAY"/>
-	</class>
-	<class name="org/apache/http/params/CoreProtocolPNames" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="HTTP_CONTENT_CHARSET"/>
-		<field name="HTTP_ELEMENT_CHARSET"/>
-		<field name="ORIGIN_SERVER"/>
-		<field name="PROTOCOL_VERSION"/>
-		<field name="STRICT_TRANSFER_ENCODING"/>
-		<field name="USER_AGENT"/>
-		<field name="USE_EXPECT_CONTINUE"/>
-		<field name="WAIT_FOR_CONTINUE"/>
-	</class>
-	<class name="org/apache/http/params/DefaultedHttpParams" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/AbstractHttpParams"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="getDefaults()Lorg/apache/http/params/HttpParams;"/>
-	</class>
-	<class name="org/apache/http/params/HttpAbstractParamBean" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<field name="params"/>
-	</class>
-	<class name="org/apache/http/params/HttpConnectionParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setConnectionTimeout(I)V"/>
-		<method name="setLinger(I)V"/>
-		<method name="setSoTimeout(I)V"/>
-		<method name="setSocketBufferSize(I)V"/>
-		<method name="setStaleCheckingEnabled(Z)V"/>
-		<method name="setTcpNoDelay(Z)V"/>
-	</class>
-	<class name="org/apache/http/params/HttpConnectionParams" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/params/CoreConnectionPNames"/>
-		<method name="&lt;init>()V"/>
-		<method name="getConnectionTimeout(Lorg/apache/http/params/HttpParams;)I"/>
-		<method name="getLinger(Lorg/apache/http/params/HttpParams;)I"/>
-		<method name="getSoTimeout(Lorg/apache/http/params/HttpParams;)I"/>
-		<method name="getSocketBufferSize(Lorg/apache/http/params/HttpParams;)I"/>
-		<method name="getTcpNoDelay(Lorg/apache/http/params/HttpParams;)Z"/>
-		<method name="isStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;)Z"/>
-		<method name="setConnectionTimeout(Lorg/apache/http/params/HttpParams;I)V"/>
-		<method name="setLinger(Lorg/apache/http/params/HttpParams;I)V"/>
-		<method name="setSoTimeout(Lorg/apache/http/params/HttpParams;I)V"/>
-		<method name="setSocketBufferSize(Lorg/apache/http/params/HttpParams;I)V"/>
-		<method name="setStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;Z)V"/>
-		<method name="setTcpNoDelay(Lorg/apache/http/params/HttpParams;Z)V"/>
-	</class>
-	<class name="org/apache/http/params/HttpParams" since="1" deprecated="22">
-		<extends name="java/lang/Object"/>
-		<method name="copy()Lorg/apache/http/params/HttpParams;"/>
-		<method name="getBooleanParameter(Ljava/lang/String;Z)Z"/>
-		<method name="getDoubleParameter(Ljava/lang/String;D)D"/>
-		<method name="getIntParameter(Ljava/lang/String;I)I"/>
-		<method name="getLongParameter(Ljava/lang/String;J)J"/>
-		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="isParameterFalse(Ljava/lang/String;)Z"/>
-		<method name="isParameterTrue(Ljava/lang/String;)Z"/>
-		<method name="removeParameter(Ljava/lang/String;)Z"/>
-		<method name="setBooleanParameter(Ljava/lang/String;Z)Lorg/apache/http/params/HttpParams;"/>
-		<method name="setDoubleParameter(Ljava/lang/String;D)Lorg/apache/http/params/HttpParams;"/>
-		<method name="setIntParameter(Ljava/lang/String;I)Lorg/apache/http/params/HttpParams;"/>
-		<method name="setLongParameter(Ljava/lang/String;J)Lorg/apache/http/params/HttpParams;"/>
-		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/http/params/HttpParams;"/>
-	</class>
-	<class name="org/apache/http/params/HttpProtocolParamBean" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
-		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setContentCharset(Ljava/lang/String;)V"/>
-		<method name="setHttpElementCharset(Ljava/lang/String;)V"/>
-		<method name="setUseExpectContinue(Z)V"/>
-		<method name="setUserAgent(Ljava/lang/String;)V"/>
-		<method name="setVersion(Lorg/apache/http/HttpVersion;)V"/>
-	</class>
-	<class name="org/apache/http/params/HttpProtocolParams" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/params/CoreProtocolPNames"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
-		<method name="getHttpElementCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
-		<method name="getUserAgent(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
-		<method name="getVersion(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/ProtocolVersion;"/>
-		<method name="setContentCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
-		<method name="setHttpElementCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
-		<method name="setUseExpectContinue(Lorg/apache/http/params/HttpParams;Z)V"/>
-		<method name="setUserAgent(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
-		<method name="setVersion(Lorg/apache/http/params/HttpParams;Lorg/apache/http/ProtocolVersion;)V"/>
-		<method name="useExpectContinue(Lorg/apache/http/params/HttpParams;)Z"/>
-	</class>
-	<class name="org/apache/http/protocol/BasicHttpContext" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/protocol/HttpContext"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/BasicHttpProcessor" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="java/lang/Cloneable"/>
-		<implements name="org/apache/http/protocol/HttpProcessor"/>
-		<implements name="org/apache/http/protocol/HttpRequestInterceptorList"/>
-		<implements name="org/apache/http/protocol/HttpResponseInterceptorList"/>
-		<method name="&lt;init>()V"/>
-		<method name="addInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V"/>
-		<method name="addInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V"/>
-		<method name="addInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V"/>
-		<method name="addInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V"/>
-		<method name="clearInterceptors()V"/>
-		<method name="copy()Lorg/apache/http/protocol/BasicHttpProcessor;"/>
-		<method name="copyInterceptors(Lorg/apache/http/protocol/BasicHttpProcessor;)V"/>
-		<field name="requestInterceptors"/>
-		<field name="responseInterceptors"/>
-	</class>
-	<class name="org/apache/http/protocol/DefaultedHttpContext" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/protocol/HttpContext"/>
-		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/protocol/HttpContext;)V"/>
-		<method name="getDefaults()Lorg/apache/http/protocol/HttpContext;"/>
-	</class>
-	<class name="org/apache/http/protocol/ExecutionContext" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<field name="HTTP_CONNECTION"/>
-		<field name="HTTP_PROXY_HOST"/>
-		<field name="HTTP_REQUEST"/>
-		<field name="HTTP_REQ_SENT"/>
-		<field name="HTTP_RESPONSE"/>
-		<field name="HTTP_TARGET_HOST"/>
-	</class>
-	<class name="org/apache/http/protocol/HTTP" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="isWhitespace(C)Z"/>
-		<field name="ASCII"/>
-		<field name="CHARSET_PARAM"/>
-		<field name="CHUNK_CODING"/>
-		<field name="CONN_CLOSE"/>
-		<field name="CONN_DIRECTIVE"/>
-		<field name="CONN_KEEP_ALIVE"/>
-		<field name="CONTENT_ENCODING"/>
-		<field name="CONTENT_LEN"/>
-		<field name="CONTENT_TYPE"/>
-		<field name="CR"/>
-		<field name="DATE_HEADER"/>
-		<field name="DEFAULT_CONTENT_CHARSET"/>
-		<field name="DEFAULT_CONTENT_TYPE"/>
-		<field name="DEFAULT_PROTOCOL_CHARSET"/>
-		<field name="EXPECT_CONTINUE"/>
-		<field name="EXPECT_DIRECTIVE"/>
-		<field name="HT"/>
-		<field name="IDENTITY_CODING"/>
-		<field name="ISO_8859_1"/>
-		<field name="LF"/>
-		<field name="OCTET_STREAM_TYPE"/>
-		<field name="PLAIN_TEXT_TYPE"/>
-		<field name="SERVER_HEADER"/>
-		<field name="SP"/>
-		<field name="TARGET_HOST"/>
-		<field name="TRANSFER_ENCODING"/>
-		<field name="USER_AGENT"/>
-		<field name="US_ASCII"/>
-		<field name="UTF_16"/>
-		<field name="UTF_8"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpContext" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="removeAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<field name="RESERVED_PREFIX"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpDateGenerator" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getCurrentDate()Ljava/lang/String;"/>
-		<field name="GMT"/>
-		<field name="PATTERN_RFC1123"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpExpectationVerifier" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="verify(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpProcessor" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<implements name="org/apache/http/HttpResponseInterceptor"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpRequestExecutor" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="canResponseHaveBody(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;)Z"/>
-		<method name="doReceiveResponse(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-		<method name="doSendRequest(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-		<method name="execute(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
-		<method name="postProcess(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V"/>
-		<method name="preProcess(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpRequestHandler" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="handle(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpRequestHandlerRegistry" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/protocol/HttpRequestHandlerResolver"/>
-		<method name="&lt;init>()V"/>
-		<method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="16"/>
-		<method name="register(Ljava/lang/String;Lorg/apache/http/protocol/HttpRequestHandler;)V"/>
-		<method name="setHandlers(Ljava/util/Map;)V"/>
-		<method name="unregister(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpRequestHandlerResolver" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="lookup(Ljava/lang/String;)Lorg/apache/http/protocol/HttpRequestHandler;"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpRequestInterceptorList" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V"/>
-		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V"/>
-		<method name="clearRequestInterceptors()V"/>
-		<method name="getRequestInterceptor(I)Lorg/apache/http/HttpRequestInterceptor;"/>
-		<method name="getRequestInterceptorCount()I"/>
-		<method name="removeRequestInterceptorByClass(Ljava/lang/Class;)V"/>
-		<method name="setInterceptors(Ljava/util/List;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpResponseInterceptorList" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V"/>
-		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V"/>
-		<method name="clearResponseInterceptors()V"/>
-		<method name="getResponseInterceptor(I)Lorg/apache/http/HttpResponseInterceptor;"/>
-		<method name="getResponseInterceptorCount()I"/>
-		<method name="removeResponseInterceptorByClass(Ljava/lang/Class;)V"/>
-		<method name="setInterceptors(Ljava/util/List;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/HttpService" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/HttpResponseFactory;)V"/>
-		<method name="doService(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
-		<method name="getParams()Lorg/apache/http/params/HttpParams;"/>
-		<method name="handleException(Lorg/apache/http/HttpException;Lorg/apache/http/HttpResponse;)V"/>
-		<method name="handleRequest(Lorg/apache/http/HttpServerConnection;Lorg/apache/http/protocol/HttpContext;)V"/>
-		<method name="setConnReuseStrategy(Lorg/apache/http/ConnectionReuseStrategy;)V"/>
-		<method name="setExpectationVerifier(Lorg/apache/http/protocol/HttpExpectationVerifier;)V"/>
-		<method name="setHandlerResolver(Lorg/apache/http/protocol/HttpRequestHandlerResolver;)V"/>
-		<method name="setHttpProcessor(Lorg/apache/http/protocol/HttpProcessor;)V"/>
-		<method name="setParams(Lorg/apache/http/params/HttpParams;)V"/>
-		<method name="setResponseFactory(Lorg/apache/http/HttpResponseFactory;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/RequestConnControl" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/RequestContent" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/RequestDate" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/RequestExpectContinue" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/RequestTargetHost" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/RequestUserAgent" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpRequestInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/ResponseConnControl" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpResponseInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/ResponseContent" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpResponseInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/ResponseDate" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpResponseInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/ResponseServer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<implements name="org/apache/http/HttpResponseInterceptor"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/apache/http/protocol/SyncBasicHttpContext" since="1" deprecated="22" removed="23">
-		<extends name="org/apache/http/protocol/BasicHttpContext"/>
-		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;)V"/>
-	</class>
-	<class name="org/apache/http/protocol/UriPatternMatcher" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="lookup(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="register(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="setHandlers(Ljava/util/Map;)V"/>
-		<method name="unregister(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/apache/http/util/ByteArrayBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(I)V"/>
-		<method name="append(Lorg/apache/http/util/CharArrayBuffer;II)V"/>
-		<method name="append([BII)V"/>
-		<method name="append([CII)V"/>
-		<method name="buffer()[B"/>
-		<method name="byteAt(I)I"/>
-		<method name="capacity()I"/>
-		<method name="clear()V"/>
-		<method name="isEmpty()Z"/>
-		<method name="isFull()Z"/>
-		<method name="length()I"/>
-		<method name="setLength(I)V"/>
-		<method name="toByteArray()[B"/>
-	</class>
-	<class name="org/apache/http/util/CharArrayBuffer" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="append(C)V"/>
-		<method name="append(Ljava/lang/Object;)V"/>
-		<method name="append(Ljava/lang/String;)V"/>
-		<method name="append(Lorg/apache/http/util/ByteArrayBuffer;II)V"/>
-		<method name="append(Lorg/apache/http/util/CharArrayBuffer;)V"/>
-		<method name="append(Lorg/apache/http/util/CharArrayBuffer;II)V"/>
-		<method name="append([BII)V"/>
-		<method name="append([CII)V"/>
-		<method name="buffer()[C"/>
-		<method name="capacity()I"/>
-		<method name="charAt(I)C"/>
-		<method name="clear()V"/>
-		<method name="ensureCapacity(I)V"/>
-		<method name="indexOf(I)I"/>
-		<method name="indexOf(III)I"/>
-		<method name="isEmpty()Z"/>
-		<method name="isFull()Z"/>
-		<method name="length()I"/>
-		<method name="setLength(I)V"/>
-		<method name="substring(II)Ljava/lang/String;"/>
-		<method name="substringTrimmed(II)Ljava/lang/String;"/>
-		<method name="toCharArray()[C"/>
-	</class>
-	<class name="org/apache/http/util/EncodingUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getAsciiBytes(Ljava/lang/String;)[B"/>
-		<method name="getAsciiString([B)Ljava/lang/String;"/>
-		<method name="getAsciiString([BII)Ljava/lang/String;"/>
-		<method name="getBytes(Ljava/lang/String;Ljava/lang/String;)[B"/>
-		<method name="getString([BIILjava/lang/String;)Ljava/lang/String;"/>
-		<method name="getString([BLjava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/util/EntityUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getContentCharSet(Lorg/apache/http/HttpEntity;)Ljava/lang/String;"/>
-		<method name="toByteArray(Lorg/apache/http/HttpEntity;)[B"/>
-		<method name="toString(Lorg/apache/http/HttpEntity;)Ljava/lang/String;"/>
-		<method name="toString(Lorg/apache/http/HttpEntity;Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="org/apache/http/util/ExceptionUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="initCause(Ljava/lang/Throwable;Ljava/lang/Throwable;)V"/>
-	</class>
-	<class name="org/apache/http/util/LangUtils" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
-		<method name="equals([Ljava/lang/Object;[Ljava/lang/Object;)Z"/>
-		<method name="hashCode(II)I"/>
-		<method name="hashCode(ILjava/lang/Object;)I"/>
-		<method name="hashCode(IZ)I"/>
-		<field name="HASH_OFFSET"/>
-		<field name="HASH_SEED"/>
-	</class>
-	<class name="org/apache/http/util/VersionInfo" since="1" deprecated="22" removed="23">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="fromMap(Ljava/lang/String;Ljava/util/Map;Ljava/lang/ClassLoader;)Lorg/apache/http/util/VersionInfo;"/>
-		<method name="getClassloader()Ljava/lang/String;"/>
-		<method name="getModule()Ljava/lang/String;"/>
-		<method name="getPackage()Ljava/lang/String;"/>
-		<method name="getRelease()Ljava/lang/String;"/>
-		<method name="getTimestamp()Ljava/lang/String;"/>
-		<method name="loadVersionInfo(Ljava/lang/String;Ljava/lang/ClassLoader;)Lorg/apache/http/util/VersionInfo;"/>
-		<method name="loadVersionInfo([Ljava/lang/String;Ljava/lang/ClassLoader;)[Lorg/apache/http/util/VersionInfo;"/>
-		<field name="PROPERTY_MODULE"/>
-		<field name="PROPERTY_RELEASE"/>
-		<field name="PROPERTY_TIMESTAMP"/>
-		<field name="UNAVAILABLE"/>
-		<field name="VERSION_PROPERTY_FILE"/>
-	</class>
-	<class name="org/json/JSONArray" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Object;)V" since="19"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/util/Collection;)V"/>
-		<method name="&lt;init>(Lorg/json/JSONTokener;)V"/>
-		<method name="get(I)Ljava/lang/Object;"/>
-		<method name="getBoolean(I)Z"/>
-		<method name="getDouble(I)D"/>
-		<method name="getInt(I)I"/>
-		<method name="getJSONArray(I)Lorg/json/JSONArray;"/>
-		<method name="getJSONObject(I)Lorg/json/JSONObject;"/>
-		<method name="getLong(I)J"/>
-		<method name="getString(I)Ljava/lang/String;"/>
-		<method name="isNull(I)Z"/>
-		<method name="join(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="length()I"/>
-		<method name="opt(I)Ljava/lang/Object;"/>
-		<method name="optBoolean(I)Z"/>
-		<method name="optBoolean(IZ)Z"/>
-		<method name="optDouble(I)D"/>
-		<method name="optDouble(ID)D"/>
-		<method name="optInt(I)I"/>
-		<method name="optInt(II)I"/>
-		<method name="optJSONArray(I)Lorg/json/JSONArray;"/>
-		<method name="optJSONObject(I)Lorg/json/JSONObject;"/>
-		<method name="optLong(I)J"/>
-		<method name="optLong(IJ)J"/>
-		<method name="optString(I)Ljava/lang/String;"/>
-		<method name="optString(ILjava/lang/String;)Ljava/lang/String;"/>
-		<method name="put(D)Lorg/json/JSONArray;"/>
-		<method name="put(I)Lorg/json/JSONArray;"/>
-		<method name="put(ID)Lorg/json/JSONArray;"/>
-		<method name="put(II)Lorg/json/JSONArray;"/>
-		<method name="put(IJ)Lorg/json/JSONArray;"/>
-		<method name="put(ILjava/lang/Object;)Lorg/json/JSONArray;"/>
-		<method name="put(IZ)Lorg/json/JSONArray;"/>
-		<method name="put(J)Lorg/json/JSONArray;"/>
-		<method name="put(Ljava/lang/Object;)Lorg/json/JSONArray;"/>
-		<method name="put(Z)Lorg/json/JSONArray;"/>
-		<method name="remove(I)Ljava/lang/Object;" since="19"/>
-		<method name="toJSONObject(Lorg/json/JSONArray;)Lorg/json/JSONObject;"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-	</class>
-	<class name="org/json/JSONException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="27"/>
-		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="27"/>
-	</class>
-	<class name="org/json/JSONObject" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/util/Map;)V"/>
-		<method name="&lt;init>(Lorg/json/JSONObject;[Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Lorg/json/JSONTokener;)V"/>
-		<method name="accumulate(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;"/>
-		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getBoolean(Ljava/lang/String;)Z"/>
-		<method name="getDouble(Ljava/lang/String;)D"/>
-		<method name="getInt(Ljava/lang/String;)I"/>
-		<method name="getJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;"/>
-		<method name="getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;"/>
-		<method name="getLong(Ljava/lang/String;)J"/>
-		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="has(Ljava/lang/String;)Z"/>
-		<method name="isNull(Ljava/lang/String;)Z"/>
-		<method name="keys()Ljava/util/Iterator;"/>
-		<method name="length()I"/>
-		<method name="names()Lorg/json/JSONArray;"/>
-		<method name="numberToString(Ljava/lang/Number;)Ljava/lang/String;"/>
-		<method name="opt(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="optBoolean(Ljava/lang/String;)Z"/>
-		<method name="optBoolean(Ljava/lang/String;Z)Z"/>
-		<method name="optDouble(Ljava/lang/String;)D"/>
-		<method name="optDouble(Ljava/lang/String;D)D"/>
-		<method name="optInt(Ljava/lang/String;)I"/>
-		<method name="optInt(Ljava/lang/String;I)I"/>
-		<method name="optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;"/>
-		<method name="optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;"/>
-		<method name="optLong(Ljava/lang/String;)J"/>
-		<method name="optLong(Ljava/lang/String;J)J"/>
-		<method name="optString(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="put(Ljava/lang/String;D)Lorg/json/JSONObject;"/>
-		<method name="put(Ljava/lang/String;I)Lorg/json/JSONObject;"/>
-		<method name="put(Ljava/lang/String;J)Lorg/json/JSONObject;"/>
-		<method name="put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;"/>
-		<method name="put(Ljava/lang/String;Z)Lorg/json/JSONObject;"/>
-		<method name="putOpt(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;"/>
-		<method name="quote(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="remove(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="toJSONArray(Lorg/json/JSONArray;)Lorg/json/JSONArray;"/>
-		<method name="toString(I)Ljava/lang/String;"/>
-		<method name="wrap(Ljava/lang/Object;)Ljava/lang/Object;" since="19"/>
-		<field name="NULL"/>
-	</class>
-	<class name="org/json/JSONStringer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="array()Lorg/json/JSONStringer;"/>
-		<method name="endArray()Lorg/json/JSONStringer;"/>
-		<method name="endObject()Lorg/json/JSONStringer;"/>
-		<method name="key(Ljava/lang/String;)Lorg/json/JSONStringer;"/>
-		<method name="object()Lorg/json/JSONStringer;"/>
-		<method name="value(D)Lorg/json/JSONStringer;"/>
-		<method name="value(J)Lorg/json/JSONStringer;"/>
-		<method name="value(Ljava/lang/Object;)Lorg/json/JSONStringer;"/>
-		<method name="value(Z)Lorg/json/JSONStringer;"/>
-	</class>
-	<class name="org/json/JSONTokener" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="back()V"/>
-		<method name="dehexchar(C)I"/>
-		<method name="more()Z"/>
-		<method name="next()C"/>
-		<method name="next(C)C"/>
-		<method name="next(I)Ljava/lang/String;"/>
-		<method name="nextClean()C"/>
-		<method name="nextString(C)Ljava/lang/String;"/>
-		<method name="nextTo(C)Ljava/lang/String;"/>
-		<method name="nextTo(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="nextValue()Ljava/lang/Object;"/>
-		<method name="skipPast(Ljava/lang/String;)V"/>
-		<method name="skipTo(C)C"/>
-		<method name="syntaxError(Ljava/lang/String;)Lorg/json/JSONException;"/>
-	</class>
-	<class name="org/w3c/dom/Attr" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getOwnerElement()Lorg/w3c/dom/Element;"/>
-		<method name="getSchemaTypeInfo()Lorg/w3c/dom/TypeInfo;" since="8"/>
-		<method name="getSpecified()Z"/>
-		<method name="getValue()Ljava/lang/String;"/>
-		<method name="isId()Z" since="8"/>
-		<method name="setValue(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/w3c/dom/CDATASection" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Text"/>
-	</class>
-	<class name="org/w3c/dom/CharacterData" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="appendData(Ljava/lang/String;)V"/>
-		<method name="deleteData(II)V"/>
-		<method name="getData()Ljava/lang/String;"/>
-		<method name="getLength()I"/>
-		<method name="insertData(ILjava/lang/String;)V"/>
-		<method name="replaceData(IILjava/lang/String;)V"/>
-		<method name="setData(Ljava/lang/String;)V"/>
-		<method name="substringData(II)Ljava/lang/String;"/>
-	</class>
-	<class name="org/w3c/dom/Comment" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/CharacterData"/>
-	</class>
-	<class name="org/w3c/dom/DOMConfiguration" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="canSetParameter(Ljava/lang/String;Ljava/lang/Object;)Z"/>
-		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getParameterNames()Lorg/w3c/dom/DOMStringList;"/>
-		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="org/w3c/dom/DOMError" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getLocation()Lorg/w3c/dom/DOMLocator;"/>
-		<method name="getMessage()Ljava/lang/String;"/>
-		<method name="getRelatedData()Ljava/lang/Object;"/>
-		<method name="getRelatedException()Ljava/lang/Object;"/>
-		<method name="getSeverity()S"/>
-		<method name="getType()Ljava/lang/String;"/>
-		<field name="SEVERITY_ERROR"/>
-		<field name="SEVERITY_FATAL_ERROR"/>
-		<field name="SEVERITY_WARNING"/>
-	</class>
-	<class name="org/w3c/dom/DOMErrorHandler" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="handleError(Lorg/w3c/dom/DOMError;)Z"/>
-	</class>
-	<class name="org/w3c/dom/DOMException" since="1">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(SLjava/lang/String;)V"/>
-		<field name="DOMSTRING_SIZE_ERR"/>
-		<field name="HIERARCHY_REQUEST_ERR"/>
-		<field name="INDEX_SIZE_ERR"/>
-		<field name="INUSE_ATTRIBUTE_ERR"/>
-		<field name="INVALID_ACCESS_ERR"/>
-		<field name="INVALID_CHARACTER_ERR"/>
-		<field name="INVALID_MODIFICATION_ERR"/>
-		<field name="INVALID_STATE_ERR"/>
-		<field name="NAMESPACE_ERR"/>
-		<field name="NOT_FOUND_ERR"/>
-		<field name="NOT_SUPPORTED_ERR"/>
-		<field name="NO_DATA_ALLOWED_ERR"/>
-		<field name="NO_MODIFICATION_ALLOWED_ERR"/>
-		<field name="SYNTAX_ERR"/>
-		<field name="TYPE_MISMATCH_ERR" since="8"/>
-		<field name="VALIDATION_ERR" since="8"/>
-		<field name="WRONG_DOCUMENT_ERR"/>
-		<field name="code"/>
-	</class>
-	<class name="org/w3c/dom/DOMImplementation" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="createDocument(Ljava/lang/String;Ljava/lang/String;Lorg/w3c/dom/DocumentType;)Lorg/w3c/dom/Document;"/>
-		<method name="createDocumentType(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/DocumentType;"/>
-		<method name="getFeature(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;" since="8"/>
-		<method name="hasFeature(Ljava/lang/String;Ljava/lang/String;)Z"/>
-	</class>
-	<class name="org/w3c/dom/DOMImplementationList" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getLength()I"/>
-		<method name="item(I)Lorg/w3c/dom/DOMImplementation;"/>
-	</class>
-	<class name="org/w3c/dom/DOMImplementationSource" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getDOMImplementation(Ljava/lang/String;)Lorg/w3c/dom/DOMImplementation;"/>
-		<method name="getDOMImplementationList(Ljava/lang/String;)Lorg/w3c/dom/DOMImplementationList;"/>
-	</class>
-	<class name="org/w3c/dom/DOMLocator" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getByteOffset()I"/>
-		<method name="getColumnNumber()I"/>
-		<method name="getLineNumber()I"/>
-		<method name="getRelatedNode()Lorg/w3c/dom/Node;"/>
-		<method name="getUri()Ljava/lang/String;"/>
-		<method name="getUtf16Offset()I"/>
-	</class>
-	<class name="org/w3c/dom/DOMStringList" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="contains(Ljava/lang/String;)Z"/>
-		<method name="getLength()I"/>
-		<method name="item(I)Ljava/lang/String;"/>
-	</class>
-	<class name="org/w3c/dom/Document" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="adoptNode(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" since="8"/>
-		<method name="createAttribute(Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
-		<method name="createAttributeNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
-		<method name="createCDATASection(Ljava/lang/String;)Lorg/w3c/dom/CDATASection;"/>
-		<method name="createComment(Ljava/lang/String;)Lorg/w3c/dom/Comment;"/>
-		<method name="createDocumentFragment()Lorg/w3c/dom/DocumentFragment;"/>
-		<method name="createElement(Ljava/lang/String;)Lorg/w3c/dom/Element;"/>
-		<method name="createElementNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;"/>
-		<method name="createEntityReference(Ljava/lang/String;)Lorg/w3c/dom/EntityReference;"/>
-		<method name="createProcessingInstruction(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/ProcessingInstruction;"/>
-		<method name="createTextNode(Ljava/lang/String;)Lorg/w3c/dom/Text;"/>
-		<method name="getDoctype()Lorg/w3c/dom/DocumentType;"/>
-		<method name="getDocumentElement()Lorg/w3c/dom/Element;"/>
-		<method name="getDocumentURI()Ljava/lang/String;" since="8"/>
-		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;" since="8"/>
-		<method name="getElementById(Ljava/lang/String;)Lorg/w3c/dom/Element;"/>
-		<method name="getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
-		<method name="getElementsByTagNameNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
-		<method name="getImplementation()Lorg/w3c/dom/DOMImplementation;"/>
-		<method name="getInputEncoding()Ljava/lang/String;" since="8"/>
-		<method name="getStrictErrorChecking()Z" since="8"/>
-		<method name="getXmlEncoding()Ljava/lang/String;" since="8"/>
-		<method name="getXmlStandalone()Z" since="8"/>
-		<method name="getXmlVersion()Ljava/lang/String;" since="8"/>
-		<method name="importNode(Lorg/w3c/dom/Node;Z)Lorg/w3c/dom/Node;"/>
-		<method name="normalizeDocument()V" since="8"/>
-		<method name="renameNode(Lorg/w3c/dom/Node;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;" since="8"/>
-		<method name="setDocumentURI(Ljava/lang/String;)V" since="8"/>
-		<method name="setStrictErrorChecking(Z)V" since="8"/>
-		<method name="setXmlStandalone(Z)V" since="8"/>
-		<method name="setXmlVersion(Ljava/lang/String;)V" since="8"/>
-	</class>
-	<class name="org/w3c/dom/DocumentFragment" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-	</class>
-	<class name="org/w3c/dom/DocumentType" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="getEntities()Lorg/w3c/dom/NamedNodeMap;"/>
-		<method name="getInternalSubset()Ljava/lang/String;"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getNotations()Lorg/w3c/dom/NamedNodeMap;"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-	</class>
-	<class name="org/w3c/dom/Element" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getAttributeNS(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getAttributeNode(Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
-		<method name="getAttributeNodeNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
-		<method name="getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
-		<method name="getElementsByTagNameNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
-		<method name="getSchemaTypeInfo()Lorg/w3c/dom/TypeInfo;" since="8"/>
-		<method name="getTagName()Ljava/lang/String;"/>
-		<method name="hasAttribute(Ljava/lang/String;)Z"/>
-		<method name="hasAttributeNS(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="removeAttribute(Ljava/lang/String;)V"/>
-		<method name="removeAttributeNS(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="removeAttributeNode(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;"/>
-		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setAttributeNS(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setAttributeNode(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;"/>
-		<method name="setAttributeNodeNS(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;"/>
-		<method name="setIdAttribute(Ljava/lang/String;Z)V" since="8"/>
-		<method name="setIdAttributeNS(Ljava/lang/String;Ljava/lang/String;Z)V" since="8"/>
-		<method name="setIdAttributeNode(Lorg/w3c/dom/Attr;Z)V" since="8"/>
-	</class>
-	<class name="org/w3c/dom/Entity" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="getInputEncoding()Ljava/lang/String;" since="8"/>
-		<method name="getNotationName()Ljava/lang/String;"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="getXmlEncoding()Ljava/lang/String;" since="8"/>
-		<method name="getXmlVersion()Ljava/lang/String;" since="8"/>
-	</class>
-	<class name="org/w3c/dom/EntityReference" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-	</class>
-	<class name="org/w3c/dom/NameList" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="contains(Ljava/lang/String;)Z"/>
-		<method name="containsNS(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="getLength()I"/>
-		<method name="getName(I)Ljava/lang/String;"/>
-		<method name="getNamespaceURI(I)Ljava/lang/String;"/>
-	</class>
-	<class name="org/w3c/dom/NamedNodeMap" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getLength()I"/>
-		<method name="getNamedItem(Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
-		<method name="getNamedItemNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
-		<method name="item(I)Lorg/w3c/dom/Node;"/>
-		<method name="removeNamedItem(Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
-		<method name="removeNamedItemNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
-		<method name="setNamedItem(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
-		<method name="setNamedItemNS(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
-	</class>
-	<class name="org/w3c/dom/Node" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="appendChild(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
-		<method name="cloneNode(Z)Lorg/w3c/dom/Node;"/>
-		<method name="compareDocumentPosition(Lorg/w3c/dom/Node;)S" since="8"/>
-		<method name="getAttributes()Lorg/w3c/dom/NamedNodeMap;"/>
-		<method name="getBaseURI()Ljava/lang/String;" since="8"/>
-		<method name="getChildNodes()Lorg/w3c/dom/NodeList;"/>
-		<method name="getFeature(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;" since="8"/>
-		<method name="getFirstChild()Lorg/w3c/dom/Node;"/>
-		<method name="getLastChild()Lorg/w3c/dom/Node;"/>
-		<method name="getLocalName()Ljava/lang/String;"/>
-		<method name="getNamespaceURI()Ljava/lang/String;"/>
-		<method name="getNextSibling()Lorg/w3c/dom/Node;"/>
-		<method name="getNodeName()Ljava/lang/String;"/>
-		<method name="getNodeType()S"/>
-		<method name="getNodeValue()Ljava/lang/String;"/>
-		<method name="getOwnerDocument()Lorg/w3c/dom/Document;"/>
-		<method name="getParentNode()Lorg/w3c/dom/Node;"/>
-		<method name="getPrefix()Ljava/lang/String;"/>
-		<method name="getPreviousSibling()Lorg/w3c/dom/Node;"/>
-		<method name="getTextContent()Ljava/lang/String;" since="8"/>
-		<method name="getUserData(Ljava/lang/String;)Ljava/lang/Object;" since="8"/>
-		<method name="hasAttributes()Z"/>
-		<method name="hasChildNodes()Z"/>
-		<method name="insertBefore(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
-		<method name="isDefaultNamespace(Ljava/lang/String;)Z" since="8"/>
-		<method name="isEqualNode(Lorg/w3c/dom/Node;)Z" since="8"/>
-		<method name="isSameNode(Lorg/w3c/dom/Node;)Z" since="8"/>
-		<method name="isSupported(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="lookupNamespaceURI(Ljava/lang/String;)Ljava/lang/String;" since="8"/>
-		<method name="lookupPrefix(Ljava/lang/String;)Ljava/lang/String;" since="8"/>
-		<method name="normalize()V"/>
-		<method name="removeChild(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
-		<method name="replaceChild(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
-		<method name="setNodeValue(Ljava/lang/String;)V"/>
-		<method name="setPrefix(Ljava/lang/String;)V"/>
-		<method name="setTextContent(Ljava/lang/String;)V" since="8"/>
-		<method name="setUserData(Ljava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/UserDataHandler;)Ljava/lang/Object;" since="8"/>
-		<field name="ATTRIBUTE_NODE"/>
-		<field name="CDATA_SECTION_NODE"/>
-		<field name="COMMENT_NODE"/>
-		<field name="DOCUMENT_FRAGMENT_NODE"/>
-		<field name="DOCUMENT_NODE"/>
-		<field name="DOCUMENT_POSITION_CONTAINED_BY" since="8"/>
-		<field name="DOCUMENT_POSITION_CONTAINS" since="8"/>
-		<field name="DOCUMENT_POSITION_DISCONNECTED" since="8"/>
-		<field name="DOCUMENT_POSITION_FOLLOWING" since="8"/>
-		<field name="DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" since="8"/>
-		<field name="DOCUMENT_POSITION_PRECEDING" since="8"/>
-		<field name="DOCUMENT_TYPE_NODE"/>
-		<field name="ELEMENT_NODE"/>
-		<field name="ENTITY_NODE"/>
-		<field name="ENTITY_REFERENCE_NODE"/>
-		<field name="NOTATION_NODE"/>
-		<field name="PROCESSING_INSTRUCTION_NODE"/>
-		<field name="TEXT_NODE"/>
-	</class>
-	<class name="org/w3c/dom/NodeList" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getLength()I"/>
-		<method name="item(I)Lorg/w3c/dom/Node;"/>
-	</class>
-	<class name="org/w3c/dom/Notation" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-	</class>
-	<class name="org/w3c/dom/ProcessingInstruction" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/Node"/>
-		<method name="getData()Ljava/lang/String;"/>
-		<method name="getTarget()Ljava/lang/String;"/>
-		<method name="setData(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/w3c/dom/Text" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/w3c/dom/CharacterData"/>
-		<method name="getWholeText()Ljava/lang/String;" since="8"/>
-		<method name="isElementContentWhitespace()Z" since="8"/>
-		<method name="replaceWholeText(Ljava/lang/String;)Lorg/w3c/dom/Text;" since="8"/>
-		<method name="splitText(I)Lorg/w3c/dom/Text;"/>
-	</class>
-	<class name="org/w3c/dom/TypeInfo" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getTypeName()Ljava/lang/String;"/>
-		<method name="getTypeNamespace()Ljava/lang/String;"/>
-		<method name="isDerivedFrom(Ljava/lang/String;Ljava/lang/String;I)Z"/>
-		<field name="DERIVATION_EXTENSION"/>
-		<field name="DERIVATION_LIST"/>
-		<field name="DERIVATION_RESTRICTION"/>
-		<field name="DERIVATION_UNION"/>
-	</class>
-	<class name="org/w3c/dom/UserDataHandler" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="handle(SLjava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V"/>
-		<field name="NODE_ADOPTED"/>
-		<field name="NODE_CLONED"/>
-		<field name="NODE_DELETED"/>
-		<field name="NODE_IMPORTED"/>
-		<field name="NODE_RENAMED"/>
-	</class>
-	<class name="org/w3c/dom/ls/DOMImplementationLS" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="createLSInput()Lorg/w3c/dom/ls/LSInput;"/>
-		<method name="createLSOutput()Lorg/w3c/dom/ls/LSOutput;"/>
-		<method name="createLSParser(SLjava/lang/String;)Lorg/w3c/dom/ls/LSParser;"/>
-		<method name="createLSSerializer()Lorg/w3c/dom/ls/LSSerializer;"/>
-		<field name="MODE_ASYNCHRONOUS"/>
-		<field name="MODE_SYNCHRONOUS"/>
-	</class>
-	<class name="org/w3c/dom/ls/LSException" since="8">
-		<extends name="java/lang/RuntimeException"/>
-		<method name="&lt;init>(SLjava/lang/String;)V"/>
-		<field name="PARSE_ERR"/>
-		<field name="SERIALIZE_ERR"/>
-		<field name="code"/>
-	</class>
-	<class name="org/w3c/dom/ls/LSInput" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getBaseURI()Ljava/lang/String;"/>
-		<method name="getByteStream()Ljava/io/InputStream;"/>
-		<method name="getCertifiedText()Z"/>
-		<method name="getCharacterStream()Ljava/io/Reader;"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getStringData()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="setBaseURI(Ljava/lang/String;)V"/>
-		<method name="setByteStream(Ljava/io/InputStream;)V"/>
-		<method name="setCertifiedText(Z)V"/>
-		<method name="setCharacterStream(Ljava/io/Reader;)V"/>
-		<method name="setEncoding(Ljava/lang/String;)V"/>
-		<method name="setPublicId(Ljava/lang/String;)V"/>
-		<method name="setStringData(Ljava/lang/String;)V"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/w3c/dom/ls/LSOutput" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getByteStream()Ljava/io/OutputStream;"/>
-		<method name="getCharacterStream()Ljava/io/Writer;"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="setByteStream(Ljava/io/OutputStream;)V"/>
-		<method name="setCharacterStream(Ljava/io/Writer;)V"/>
-		<method name="setEncoding(Ljava/lang/String;)V"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/w3c/dom/ls/LSParser" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="abort()V"/>
-		<method name="getAsync()Z"/>
-		<method name="getBusy()Z"/>
-		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;"/>
-		<method name="getFilter()Lorg/w3c/dom/ls/LSParserFilter;"/>
-		<method name="parse(Lorg/w3c/dom/ls/LSInput;)Lorg/w3c/dom/Document;"/>
-		<method name="parseURI(Ljava/lang/String;)Lorg/w3c/dom/Document;"/>
-		<method name="parseWithContext(Lorg/w3c/dom/ls/LSInput;Lorg/w3c/dom/Node;S)Lorg/w3c/dom/Node;"/>
-		<method name="setFilter(Lorg/w3c/dom/ls/LSParserFilter;)V"/>
-		<field name="ACTION_APPEND_AS_CHILDREN"/>
-		<field name="ACTION_INSERT_AFTER"/>
-		<field name="ACTION_INSERT_BEFORE"/>
-		<field name="ACTION_REPLACE"/>
-		<field name="ACTION_REPLACE_CHILDREN"/>
-	</class>
-	<class name="org/w3c/dom/ls/LSParserFilter" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="acceptNode(Lorg/w3c/dom/Node;)S"/>
-		<method name="getWhatToShow()I"/>
-		<method name="startElement(Lorg/w3c/dom/Element;)S"/>
-		<field name="FILTER_ACCEPT"/>
-		<field name="FILTER_INTERRUPT"/>
-		<field name="FILTER_REJECT"/>
-		<field name="FILTER_SKIP"/>
-	</class>
-	<class name="org/w3c/dom/ls/LSResourceResolver" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="resolveResource(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/ls/LSInput;"/>
-	</class>
-	<class name="org/w3c/dom/ls/LSSerializer" since="8">
-		<extends name="java/lang/Object"/>
-		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;"/>
-		<method name="getNewLine()Ljava/lang/String;"/>
-		<method name="setNewLine(Ljava/lang/String;)V"/>
-		<method name="write(Lorg/w3c/dom/Node;Lorg/w3c/dom/ls/LSOutput;)Z"/>
-		<method name="writeToString(Lorg/w3c/dom/Node;)Ljava/lang/String;"/>
-		<method name="writeToURI(Lorg/w3c/dom/Node;Ljava/lang/String;)Z"/>
-	</class>
-	<class name="org/xml/sax/AttributeList" since="1" deprecated="9">
-		<extends name="java/lang/Object"/>
-		<method name="getLength()I"/>
-		<method name="getName(I)Ljava/lang/String;"/>
-		<method name="getType(I)Ljava/lang/String;"/>
-		<method name="getType(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getValue(I)Ljava/lang/String;"/>
-		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="org/xml/sax/Attributes" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getIndex(Ljava/lang/String;)I"/>
-		<method name="getIndex(Ljava/lang/String;Ljava/lang/String;)I"/>
-		<method name="getLength()I"/>
-		<method name="getLocalName(I)Ljava/lang/String;"/>
-		<method name="getQName(I)Ljava/lang/String;"/>
-		<method name="getType(I)Ljava/lang/String;"/>
-		<method name="getType(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getURI(I)Ljava/lang/String;"/>
-		<method name="getValue(I)Ljava/lang/String;"/>
-		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-	</class>
-	<class name="org/xml/sax/ContentHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="characters([CII)V"/>
-		<method name="endDocument()V"/>
-		<method name="endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="endPrefixMapping(Ljava/lang/String;)V"/>
-		<method name="ignorableWhitespace([CII)V"/>
-		<method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setDocumentLocator(Lorg/xml/sax/Locator;)V"/>
-		<method name="skippedEntity(Ljava/lang/String;)V"/>
-		<method name="startDocument()V"/>
-		<method name="startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V"/>
-		<method name="startPrefixMapping(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/DTDHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="notationDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="unparsedEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/DocumentHandler" since="1" deprecated="9">
-		<extends name="java/lang/Object"/>
-		<method name="characters([CII)V"/>
-		<method name="endDocument()V"/>
-		<method name="endElement(Ljava/lang/String;)V"/>
-		<method name="ignorableWhitespace([CII)V"/>
-		<method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setDocumentLocator(Lorg/xml/sax/Locator;)V"/>
-		<method name="startDocument()V"/>
-		<method name="startElement(Ljava/lang/String;Lorg/xml/sax/AttributeList;)V"/>
-	</class>
-	<class name="org/xml/sax/EntityResolver" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="resolveEntity(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;"/>
-	</class>
-	<class name="org/xml/sax/ErrorHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="error(Lorg/xml/sax/SAXParseException;)V"/>
-		<method name="fatalError(Lorg/xml/sax/SAXParseException;)V"/>
-		<method name="warning(Lorg/xml/sax/SAXParseException;)V"/>
-	</class>
-	<class name="org/xml/sax/HandlerBase" since="1" deprecated="9">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/DTDHandler"/>
-		<implements name="org/xml/sax/DocumentHandler"/>
-		<implements name="org/xml/sax/EntityResolver"/>
-		<implements name="org/xml/sax/ErrorHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/xml/sax/InputSource" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
-		<method name="&lt;init>(Ljava/io/Reader;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="getByteStream()Ljava/io/InputStream;"/>
-		<method name="getCharacterStream()Ljava/io/Reader;"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-		<method name="setByteStream(Ljava/io/InputStream;)V"/>
-		<method name="setCharacterStream(Ljava/io/Reader;)V"/>
-		<method name="setEncoding(Ljava/lang/String;)V"/>
-		<method name="setPublicId(Ljava/lang/String;)V"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/Locator" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getColumnNumber()I"/>
-		<method name="getLineNumber()I"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-	</class>
-	<class name="org/xml/sax/Parser" since="1" deprecated="9">
-		<extends name="java/lang/Object"/>
-		<method name="parse(Ljava/lang/String;)V"/>
-		<method name="parse(Lorg/xml/sax/InputSource;)V"/>
-		<method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V"/>
-		<method name="setDocumentHandler(Lorg/xml/sax/DocumentHandler;)V"/>
-		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V"/>
-		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
-		<method name="setLocale(Ljava/util/Locale;)V"/>
-	</class>
-	<class name="org/xml/sax/SAXException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V"/>
-		<method name="getException()Ljava/lang/Exception;"/>
-	</class>
-	<class name="org/xml/sax/SAXNotRecognizedException" since="1">
-		<extends name="org/xml/sax/SAXException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/SAXNotSupportedException" since="1">
-		<extends name="org/xml/sax/SAXException"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/SAXParseException" since="1">
-		<extends name="org/xml/sax/SAXException"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/Exception;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Lorg/xml/sax/Locator;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Lorg/xml/sax/Locator;Ljava/lang/Exception;)V"/>
-		<method name="getColumnNumber()I"/>
-		<method name="getLineNumber()I"/>
-		<method name="getPublicId()Ljava/lang/String;"/>
-		<method name="getSystemId()Ljava/lang/String;"/>
-	</class>
-	<class name="org/xml/sax/XMLFilter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/XMLReader"/>
-		<method name="getParent()Lorg/xml/sax/XMLReader;"/>
-		<method name="setParent(Lorg/xml/sax/XMLReader;)V"/>
-	</class>
-	<class name="org/xml/sax/XMLReader" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;"/>
-		<method name="getDTDHandler()Lorg/xml/sax/DTDHandler;"/>
-		<method name="getEntityResolver()Lorg/xml/sax/EntityResolver;"/>
-		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="parse(Ljava/lang/String;)V"/>
-		<method name="parse(Lorg/xml/sax/InputSource;)V"/>
-		<method name="setContentHandler(Lorg/xml/sax/ContentHandler;)V"/>
-		<method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V"/>
-		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V"/>
-		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
-	</class>
-	<class name="org/xml/sax/ext/Attributes2" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/Attributes"/>
-		<method name="isDeclared(I)Z"/>
-		<method name="isDeclared(Ljava/lang/String;)Z"/>
-		<method name="isDeclared(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="isSpecified(I)Z"/>
-		<method name="isSpecified(Ljava/lang/String;)Z"/>
-		<method name="isSpecified(Ljava/lang/String;Ljava/lang/String;)Z"/>
-	</class>
-	<class name="org/xml/sax/ext/Attributes2Impl" since="1">
-		<extends name="org/xml/sax/helpers/AttributesImpl"/>
-		<implements name="org/xml/sax/ext/Attributes2"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/Attributes;)V"/>
-		<method name="setDeclared(IZ)V"/>
-		<method name="setSpecified(IZ)V"/>
-	</class>
-	<class name="org/xml/sax/ext/DeclHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="attributeDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="elementDecl(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="externalEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="internalEntityDecl(Ljava/lang/String;Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/ext/DefaultHandler2" since="1">
-		<extends name="org/xml/sax/helpers/DefaultHandler"/>
-		<implements name="org/xml/sax/ext/DeclHandler"/>
-		<implements name="org/xml/sax/ext/EntityResolver2"/>
-		<implements name="org/xml/sax/ext/LexicalHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/xml/sax/ext/EntityResolver2" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/EntityResolver"/>
-		<method name="getExternalSubset(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;"/>
-		<method name="resolveEntity(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;"/>
-	</class>
-	<class name="org/xml/sax/ext/LexicalHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="comment([CII)V"/>
-		<method name="endCDATA()V"/>
-		<method name="endDTD()V"/>
-		<method name="endEntity(Ljava/lang/String;)V"/>
-		<method name="startCDATA()V"/>
-		<method name="startDTD(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="startEntity(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/ext/Locator2" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/Locator"/>
-		<method name="getEncoding()Ljava/lang/String;"/>
-		<method name="getXMLVersion()Ljava/lang/String;"/>
-	</class>
-	<class name="org/xml/sax/ext/Locator2Impl" since="1">
-		<extends name="org/xml/sax/helpers/LocatorImpl"/>
-		<implements name="org/xml/sax/ext/Locator2"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/Locator;)V"/>
-		<method name="setEncoding(Ljava/lang/String;)V"/>
-		<method name="setXMLVersion(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/helpers/AttributeListImpl" since="1" deprecated="9">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/AttributeList"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/AttributeList;)V"/>
-		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="clear()V"/>
-		<method name="removeAttribute(Ljava/lang/String;)V"/>
-		<method name="setAttributeList(Lorg/xml/sax/AttributeList;)V"/>
-	</class>
-	<class name="org/xml/sax/helpers/AttributesImpl" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/Attributes"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/Attributes;)V"/>
-		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="clear()V"/>
-		<method name="removeAttribute(I)V"/>
-		<method name="setAttribute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setAttributes(Lorg/xml/sax/Attributes;)V"/>
-		<method name="setLocalName(ILjava/lang/String;)V"/>
-		<method name="setQName(ILjava/lang/String;)V"/>
-		<method name="setType(ILjava/lang/String;)V"/>
-		<method name="setURI(ILjava/lang/String;)V"/>
-		<method name="setValue(ILjava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/helpers/DefaultHandler" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/ContentHandler"/>
-		<implements name="org/xml/sax/DTDHandler"/>
-		<implements name="org/xml/sax/EntityResolver"/>
-		<implements name="org/xml/sax/ErrorHandler"/>
-		<method name="&lt;init>()V"/>
-	</class>
-	<class name="org/xml/sax/helpers/LocatorImpl" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/Locator"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/Locator;)V"/>
-		<method name="setColumnNumber(I)V"/>
-		<method name="setLineNumber(I)V"/>
-		<method name="setPublicId(Ljava/lang/String;)V"/>
-		<method name="setSystemId(Ljava/lang/String;)V"/>
-	</class>
-	<class name="org/xml/sax/helpers/NamespaceSupport" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="declarePrefix(Ljava/lang/String;Ljava/lang/String;)Z"/>
-		<method name="getDeclaredPrefixes()Ljava/util/Enumeration;"/>
-		<method name="getPrefix(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getPrefixes()Ljava/util/Enumeration;"/>
-		<method name="getPrefixes(Ljava/lang/String;)Ljava/util/Enumeration;"/>
-		<method name="getURI(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="isNamespaceDeclUris()Z"/>
-		<method name="popContext()V"/>
-		<method name="processName(Ljava/lang/String;[Ljava/lang/String;Z)[Ljava/lang/String;"/>
-		<method name="pushContext()V"/>
-		<method name="reset()V"/>
-		<method name="setNamespaceDeclUris(Z)V"/>
-		<field name="NSDECL"/>
-		<field name="XMLNS"/>
-	</class>
-	<class name="org/xml/sax/helpers/ParserAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/DocumentHandler"/>
-		<implements name="org/xml/sax/XMLReader"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/Parser;)V"/>
-	</class>
-	<class name="org/xml/sax/helpers/ParserFactory" since="1" deprecated="9">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="makeParser()Lorg/xml/sax/Parser;"/>
-		<method name="makeParser(Ljava/lang/String;)Lorg/xml/sax/Parser;"/>
-	</class>
-	<class name="org/xml/sax/helpers/XMLFilterImpl" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/ContentHandler"/>
-		<implements name="org/xml/sax/DTDHandler"/>
-		<implements name="org/xml/sax/EntityResolver"/>
-		<implements name="org/xml/sax/ErrorHandler"/>
-		<implements name="org/xml/sax/XMLFilter"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/XMLReader;)V"/>
-	</class>
-	<class name="org/xml/sax/helpers/XMLReaderAdapter" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/ContentHandler"/>
-		<implements name="org/xml/sax/Parser"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xml/sax/XMLReader;)V"/>
-	</class>
-	<class name="org/xml/sax/helpers/XMLReaderFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="createXMLReader()Lorg/xml/sax/XMLReader;"/>
-		<method name="createXMLReader(Ljava/lang/String;)Lorg/xml/sax/XMLReader;"/>
-	</class>
-	<class name="org/xmlpull/v1/XmlPullParser" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="defineEntityReplacementText(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="getAttributeCount()I"/>
-		<method name="getAttributeName(I)Ljava/lang/String;"/>
-		<method name="getAttributeNamespace(I)Ljava/lang/String;"/>
-		<method name="getAttributePrefix(I)Ljava/lang/String;"/>
-		<method name="getAttributeType(I)Ljava/lang/String;"/>
-		<method name="getAttributeValue(I)Ljava/lang/String;"/>
-		<method name="getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getColumnNumber()I"/>
-		<method name="getDepth()I"/>
-		<method name="getEventType()I"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getInputEncoding()Ljava/lang/String;"/>
-		<method name="getLineNumber()I"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getNamespace()Ljava/lang/String;"/>
-		<method name="getNamespace(Ljava/lang/String;)Ljava/lang/String;"/>
-		<method name="getNamespaceCount(I)I"/>
-		<method name="getNamespacePrefix(I)Ljava/lang/String;"/>
-		<method name="getNamespaceUri(I)Ljava/lang/String;"/>
-		<method name="getPositionDescription()Ljava/lang/String;"/>
-		<method name="getPrefix()Ljava/lang/String;"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="getText()Ljava/lang/String;"/>
-		<method name="getTextCharacters([I)[C"/>
-		<method name="isAttributeDefault(I)Z"/>
-		<method name="isEmptyElementTag()Z"/>
-		<method name="isWhitespace()Z"/>
-		<method name="next()I"/>
-		<method name="nextTag()I"/>
-		<method name="nextText()Ljava/lang/String;"/>
-		<method name="nextToken()I"/>
-		<method name="require(ILjava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setInput(Ljava/io/InputStream;Ljava/lang/String;)V"/>
-		<method name="setInput(Ljava/io/Reader;)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<field name="CDSECT"/>
-		<field name="COMMENT"/>
-		<field name="DOCDECL"/>
-		<field name="END_DOCUMENT"/>
-		<field name="END_TAG"/>
-		<field name="ENTITY_REF"/>
-		<field name="FEATURE_PROCESS_DOCDECL"/>
-		<field name="FEATURE_PROCESS_NAMESPACES"/>
-		<field name="FEATURE_REPORT_NAMESPACE_ATTRIBUTES"/>
-		<field name="FEATURE_VALIDATION"/>
-		<field name="IGNORABLE_WHITESPACE"/>
-		<field name="NO_NAMESPACE"/>
-		<field name="PROCESSING_INSTRUCTION"/>
-		<field name="START_DOCUMENT"/>
-		<field name="START_TAG"/>
-		<field name="TEXT"/>
-		<field name="TYPES"/>
-	</class>
-	<class name="org/xmlpull/v1/XmlPullParserException" since="1">
-		<extends name="java/lang/Exception"/>
-		<method name="&lt;init>(Ljava/lang/String;)V"/>
-		<method name="&lt;init>(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/Throwable;)V"/>
-		<method name="getColumnNumber()I"/>
-		<method name="getDetail()Ljava/lang/Throwable;"/>
-		<method name="getLineNumber()I"/>
-		<field name="column"/>
-		<field name="detail"/>
-		<field name="row"/>
-	</class>
-	<class name="org/xmlpull/v1/XmlPullParserFactory" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="isNamespaceAware()Z"/>
-		<method name="isValidating()Z"/>
-		<method name="newInstance()Lorg/xmlpull/v1/XmlPullParserFactory;"/>
-		<method name="newInstance(Ljava/lang/String;Ljava/lang/Class;)Lorg/xmlpull/v1/XmlPullParserFactory;"/>
-		<method name="newPullParser()Lorg/xmlpull/v1/XmlPullParser;"/>
-		<method name="newSerializer()Lorg/xmlpull/v1/XmlSerializer;"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setNamespaceAware(Z)V"/>
-		<method name="setValidating(Z)V"/>
-		<field name="PROPERTY_NAME"/>
-		<field name="classNamesLocation"/>
-		<field name="features"/>
-		<field name="parserClasses"/>
-		<field name="serializerClasses"/>
-	</class>
-	<class name="org/xmlpull/v1/XmlSerializer" since="1">
-		<extends name="java/lang/Object"/>
-		<method name="attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
-		<method name="cdsect(Ljava/lang/String;)V"/>
-		<method name="comment(Ljava/lang/String;)V"/>
-		<method name="docdecl(Ljava/lang/String;)V"/>
-		<method name="endDocument()V"/>
-		<method name="endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
-		<method name="entityRef(Ljava/lang/String;)V"/>
-		<method name="flush()V"/>
-		<method name="getDepth()I"/>
-		<method name="getFeature(Ljava/lang/String;)Z"/>
-		<method name="getName()Ljava/lang/String;"/>
-		<method name="getNamespace()Ljava/lang/String;"/>
-		<method name="getPrefix(Ljava/lang/String;Z)Ljava/lang/String;"/>
-		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
-		<method name="ignorableWhitespace(Ljava/lang/String;)V"/>
-		<method name="processingInstruction(Ljava/lang/String;)V"/>
-		<method name="setFeature(Ljava/lang/String;Z)V"/>
-		<method name="setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
-		<method name="setOutput(Ljava/io/Writer;)V"/>
-		<method name="setPrefix(Ljava/lang/String;Ljava/lang/String;)V"/>
-		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
-		<method name="startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V"/>
-		<method name="startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
-		<method name="text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
-		<method name="text([CII)Lorg/xmlpull/v1/XmlSerializer;"/>
-	</class>
-	<class name="org/xmlpull/v1/sax2/Driver" since="1">
-		<extends name="java/lang/Object"/>
-		<implements name="org/xml/sax/Attributes"/>
-		<implements name="org/xml/sax/Locator"/>
-		<implements name="org/xml/sax/XMLReader"/>
-		<method name="&lt;init>()V"/>
-		<method name="&lt;init>(Lorg/xmlpull/v1/XmlPullParser;)V"/>
-		<method name="parseSubTree(Lorg/xmlpull/v1/XmlPullParser;)V"/>
-		<method name="startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
-		<field name="APACHE_DYNAMIC_VALIDATION_FEATURE"/>
-		<field name="APACHE_SCHEMA_VALIDATION_FEATURE"/>
-		<field name="DECLARATION_HANDLER_PROPERTY"/>
-		<field name="LEXICAL_HANDLER_PROPERTY"/>
-		<field name="NAMESPACES_FEATURE"/>
-		<field name="NAMESPACE_PREFIXES_FEATURE"/>
-		<field name="VALIDATION_FEATURE"/>
-		<field name="contentHandler"/>
-		<field name="errorHandler"/>
-		<field name="pp"/>
-		<field name="systemId"/>
-	</class>
-</api>
diff --git a/dmtracedump b/dmtracedump
index 1300c6e..9344e8d 100755
--- a/dmtracedump
+++ b/dmtracedump
Binary files differ
diff --git a/e2fsdroid b/e2fsdroid
deleted file mode 100755
index 63fe59a..0000000
--- a/e2fsdroid
+++ /dev/null
Binary files differ
diff --git a/etc1tool b/etc1tool
index 1b8bed5..5e9a1f3 100755
--- a/etc1tool
+++ b/etc1tool
Binary files differ
diff --git a/fastboot b/fastboot
index 7dbb441..e6f2d66 100755
--- a/fastboot
+++ b/fastboot
Binary files differ
diff --git a/hprof-conv b/hprof-conv
index cbfe78b..491c4a5 100755
--- a/hprof-conv
+++ b/hprof-conv
Binary files differ
diff --git a/lib64/libc++.so b/lib64/libc++.so
index f6f2493..d585c9c 100755
--- a/lib64/libc++.so
+++ b/lib64/libc++.so
Binary files differ
diff --git a/make_f2fs b/make_f2fs
index d60b4c6..2d0e636 100755
--- a/make_f2fs
+++ b/make_f2fs
Binary files differ
diff --git a/make_f2fs_casefold b/make_f2fs_casefold
new file mode 100755
index 0000000..2607eb0
--- /dev/null
+++ b/make_f2fs_casefold
Binary files differ
diff --git a/mke2fs b/mke2fs
index 047b225..1181aef 100755
--- a/mke2fs
+++ b/mke2fs
Binary files differ
diff --git a/mke2fs.conf b/mke2fs.conf
old mode 100755
new mode 100644
index abf0dae..8ea960d
--- a/mke2fs.conf
+++ b/mke2fs.conf
@@ -1,5 +1,5 @@
 [defaults]
-    base_features = sparse_super,large_file,filetype,resize_inode,dir_index,ext_attr
+    base_features = sparse_super,large_file,filetype,dir_index,ext_attr
     default_mntopts = acl,user_xattr
     enable_periodic_fsck = 0
     blocksize = 4096
diff --git a/package.xml b/package.xml
index a556075..3301919 100644
--- a/package.xml
+++ b/package.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:repository xmlns:ns2="http://schemas.android.com/repository/android/common/01" xmlns:ns3="http://schemas.android.com/sdk/android/repo/addon2/01" xmlns:ns4="http://schemas.android.com/sdk/android/repo/sys-img2/01" xmlns:ns5="http://schemas.android.com/repository/android/generic/01" xmlns:ns6="http://schemas.android.com/sdk/android/repo/repository2/01"><license id="android-sdk-license" type="text">Terms and Conditions
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:repository xmlns:ns2="http://schemas.android.com/repository/android/common/02" xmlns:ns3="http://schemas.android.com/repository/android/common/01" xmlns:ns4="http://schemas.android.com/repository/android/generic/01" xmlns:ns5="http://schemas.android.com/repository/android/generic/02" xmlns:ns6="http://schemas.android.com/sdk/android/repo/addon2/01" xmlns:ns7="http://schemas.android.com/sdk/android/repo/addon2/02" xmlns:ns8="http://schemas.android.com/sdk/android/repo/addon2/03" xmlns:ns9="http://schemas.android.com/sdk/android/repo/repository2/01" xmlns:ns10="http://schemas.android.com/sdk/android/repo/repository2/02" xmlns:ns11="http://schemas.android.com/sdk/android/repo/repository2/03" xmlns:ns12="http://schemas.android.com/sdk/android/repo/sys-img2/04" xmlns:ns13="http://schemas.android.com/sdk/android/repo/sys-img2/03" xmlns:ns14="http://schemas.android.com/sdk/android/repo/sys-img2/02" xmlns:ns15="http://schemas.android.com/sdk/android/repo/sys-img2/01"><license id="android-sdk-license" type="text">Terms and Conditions
 
 This is the Android Software Development Kit License Agreement
 
@@ -32,7 +32,7 @@
 
 3.3 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
 
-3.4 You may not use the SDK for any purpose not expressly permitted by the License Agreement. Except to the extent required by applicable third party licenses, you may not: (a) copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK; or (b) load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK.
+3.4 You may not use the SDK for any purpose not expressly permitted by the License Agreement. Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK.
 
 3.5 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not the License Agreement.
 
@@ -83,7 +83,7 @@
 
 8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
 
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
+8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so. If you use the Android Recognition Service API, documented at the following URL: https://developer.android.com/reference/android/speech/RecognitionService, as updated from time to time, you acknowledge that the use of the API is subject to the Data Processing Addendum for Products where Google is a Data Processor, which is located at the following URL: https://privacy.google.com/businesses/gdprprocessorterms/, as updated from time to time. By clicking to accept, you hereby agree to the terms of the Data Processing Addendum for Products where Google is a Data Processor.
 
 
 9. Terminating the License Agreement
@@ -138,4 +138,4 @@
 14.7 The License Agreement, and your relationship with Google under the License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from the License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
 
 
-November 20, 2015</license><localPackage path="platform-tools" obsolete="false"><type-details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns5:genericDetailsType"/><revision><major>28</major><minor>0</minor><micro>0</micro></revision><display-name>Android SDK Platform-Tools 28</display-name><uses-license ref="android-sdk-license"/></localPackage></ns2:repository>
+January 16, 2019</license><localPackage path="platform-tools" obsolete="false"><type-details xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns5:genericDetailsType"/><revision><major>35</major><minor>0</minor><micro>0</micro></revision><display-name>Android SDK Platform-Tools</display-name><uses-license ref="android-sdk-license"/></localPackage></ns2:repository>
\ No newline at end of file
diff --git a/sload_f2fs b/sload_f2fs
deleted file mode 100755
index d21cb9b..0000000
--- a/sload_f2fs
+++ /dev/null
Binary files differ
diff --git a/source.properties b/source.properties
index 2f6b7b0..3c43ef2 100644
--- a/source.properties
+++ b/source.properties
@@ -1,2 +1,2 @@
 Pkg.UserSrc=false
-Pkg.Revision=28.0.1
+Pkg.Revision=35.0.0
diff --git a/sqlite3 b/sqlite3
index c5a4e5e..dcaacd7 100755
--- a/sqlite3
+++ b/sqlite3
Binary files differ
diff --git a/systrace/NOTICE b/systrace/NOTICE
deleted file mode 100644
index 624b6da..0000000
--- a/systrace/NOTICE
+++ /dev/null
@@ -1,205 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
diff --git a/systrace/UPSTREAM_REVISION b/systrace/UPSTREAM_REVISION
deleted file mode 100644
index 872cc65..0000000
--- a/systrace/UPSTREAM_REVISION
+++ /dev/null
@@ -1 +0,0 @@
-3fe65c60e0314212730f3e5363a58dfda949d761
diff --git a/systrace/catapult/common/battor/battor/__init__.py b/systrace/catapult/common/battor/battor/__init__.py
deleted file mode 100644
index f18f330..0000000
--- a/systrace/catapult/common/battor/battor/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-import sys
-
-def _JoinPath(*path_parts):
-  return os.path.abspath(os.path.join(*path_parts))
-
-
-def _AddDirToPythonPath(*path_parts):
-  path = _JoinPath(*path_parts)
-  if os.path.isdir(path) and path not in sys.path:
-    # Some call sites that use Telemetry assume that sys.path[0] is the
-    # directory containing the script, so we add these extra paths to right
-    # after sys.path[0].
-    sys.path.insert(1, path)
-
-_CATAPULT_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)),
-                    os.path.pardir, os.path.pardir, os.path.pardir)
-
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'battor')
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_utils')
-_AddDirToPythonPath(_CATAPULT_DIR, 'dependency_manager')
-_AddDirToPythonPath(_CATAPULT_DIR, 'devil')
-_AddDirToPythonPath(_CATAPULT_DIR, 'third_party', 'pyserial')
diff --git a/systrace/catapult/common/battor/battor/battor_binary_dependencies.json b/systrace/catapult/common/battor/battor/battor_binary_dependencies.json
deleted file mode 100644
index 23be1a3..0000000
--- a/systrace/catapult/common/battor/battor/battor_binary_dependencies.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
-  "config_type": "BaseConfig",
-  "dependencies": {
-    "avrdude_binary": {
-      "cloud_storage_base_folder": "binary_dependencies/battor",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "mac_x86_64": {
-          "cloud_storage_hash": "6de6324c279ea75c79c68cab4c2ddcc68da1b286",
-          "download_path": "../bin/darwin/x86_64/avrdude",
-          "local_paths": [
-            "../bin/override/avrdude"
-          ]
-        },
-        "linux_x86_64": {
-          "cloud_storage_hash": "db29526605f6f95a75ab33f4060b8c330152de69",
-          "download_path": "../bin/linux/x86_64/avrdude",
-          "local_paths": [
-            "../bin/override/avrdude"
-          ]
-        },
-        "win_AMD64": {
-          "cloud_storage_hash": "517aa73b093e254007076cf5ac7afb94151df2ed",
-          "download_path": "../bin/win/x86_64/avrdude.exe",
-          "local_paths": [
-            "../bin/override/avrdude.exe"
-          ]
-        },
-        "win_x86": {
-          "cloud_storage_hash": "517aa73b093e254007076cf5ac7afb94151df2ed",
-          "download_path": "../bin/win/x86_64/avrdude.exe",
-          "local_paths": [
-            "../bin/override/avrdude.exe"
-          ]
-        }
-      }
-    },
-    "avrdude_config": {
-      "cloud_storage_base_folder": "binary_dependencies/battor",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "default": {
-          "cloud_storage_hash": "ccdfa12743429b8b92b61a20163d6311ab55a4fa",
-          "download_path": "../bin/battor/avrdude.conf",
-          "local_paths": [
-            "../bin/override/avrdude.conf"
-          ]
-        }
-      }
-    },
-    "battor_agent_binary": {
-      "cloud_storage_base_folder": "binary_dependencies/battor",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "mac_x86_64": {
-          "cloud_storage_hash": "154613804a1855a4871422bf99aa8e0dd0d7f62e",
-          "download_path": "../bin/darwin/x86_64/battor_agent",
-          "local_paths": [
-            "../bin/override/battor_agent"
-          ]
-        },
-        "linux_x86_64": {
-          "cloud_storage_hash": "f53e15b97301e9dab00e893800ec67a98e9f13ea",
-          "download_path": "../bin/linux/x86_64/battor_agent",
-          "local_paths": [
-            "../bin/override/battor_agent"
-          ]
-        },
-        "win_AMD64": {
-          "cloud_storage_hash": "4095a9159dd189ec591679e43b14d34ae30335eb",
-          "download_path": "../bin/win/x86_64/battor_agent.exe",
-          "local_paths": [
-            "../bin/override/battor_agent.exe"
-          ]
-        },
-        "win_x86": {
-          "cloud_storage_hash": "4095a9159dd189ec591679e43b14d34ae30335eb",
-          "download_path": "../bin/win/x86_64/battor_agent.exe",
-          "local_paths": [
-            "../bin/override/battor_agent.exe"
-          ]
-        }
-      }
-    },
-    "battor_firmware": {
-      "cloud_storage_base_folder": "binary_dependencies/battor",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "default": {
-          "cloud_storage_hash": "0649655f78698368a16a4e9ec37967b80528fdbf",
-          "download_path": "../bin/battor/battor_firmware.hex",
-          "local_paths": [
-            "../bin/override/battor_firmware.hex"
-          ],
-          "version_in_cs": "de05458"
-        }
-      }
-    }
-  }
-}
diff --git a/systrace/catapult/common/battor/battor/battor_error.py b/systrace/catapult/common/battor/battor/battor_error.py
deleted file mode 100644
index 3ea6efc..0000000
--- a/systrace/catapult/common/battor/battor/battor_error.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from devil import base_error
-
-class BattOrError(base_error.BaseError):
-  pass
diff --git a/systrace/catapult/common/battor/battor/battor_wrapper.py b/systrace/catapult/common/battor/battor/battor_wrapper.py
deleted file mode 100644
index 93aed8b..0000000
--- a/systrace/catapult/common/battor/battor/battor_wrapper.py
+++ /dev/null
@@ -1,436 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import datetime
-import os
-import logging
-import platform
-import random
-import subprocess
-import sys
-import tempfile
-import time
-
-from battor import battor_error
-import py_utils
-from py_utils import atexit_with_log
-from py_utils import cloud_storage
-import dependency_manager
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-
-import serial
-from serial.tools import list_ports
-
-
-DEFAULT_SHELL_CLOSE_TIMEOUT_S = 60
-
-
-def IsBattOrConnected(*args, **kwargs):
-  """Returns True if BattOr is detected.
-
-  See _IsBattOrConnected below for arguments.
-  """
-  is_connected = _IsBattOrConnected(*args, **kwargs)
-  if is_connected:
-    logging.info('BattOr power monitor is connected.')
-  else:
-    logging.info('BattOr power monitor is not connected.')
-  return is_connected
-
-
-def _IsBattOrConnected(test_platform, android_device=None,
-                      android_device_map=None, android_device_file=None):
-  """Returns True if BattOr is detected."""
-  if test_platform == 'android':
-    if not android_device:
-      raise ValueError('Must pass android device serial when determining '
-                       'support on android platform')
-
-    if not android_device_map:
-      device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap()
-      if device_tree:
-        for _, node in sorted(device_tree.iteritems()):
-          node.Display()
-      if len(battor_device_mapping.GetBattOrList(device_tree)) == 1:
-        return True
-      if android_device_file:
-        android_device_map = battor_device_mapping.ReadSerialMapFile(
-            android_device_file)
-      else:
-        try:
-          android_device_map = battor_device_mapping.GenerateSerialMap()
-        except battor_error.BattOrError:
-          return False
-
-    # If neither if statement above is triggered, it means that an
-    # android_device_map was passed in and will be used.
-    return str(android_device) in android_device_map
-
-  elif test_platform == 'win':
-    for (_1, desc, _2) in serial.tools.list_ports.comports():
-      if 'USB Serial Port' in desc:
-        return True
-    logging.info('No usb serial port discovered. Available ones are: %s' %
-                 list(serial.tools.list_ports.comports()))
-    return False
-
-  elif test_platform == 'mac':
-    for (_1, desc, _2) in serial.tools.list_ports.comports():
-      if 'BattOr' in desc:
-        return True
-    return False
-
-  elif test_platform == 'linux':
-    device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=True)
-    return bool(battor_device_mapping.GetBattOrList(device_tree))
-
-  return False
-
-
-class BattOrWrapper(object):
-  """A class for communicating with a BattOr in python."""
-  _EXIT_CMD = 'Exit'
-  _GET_FIRMWARE_GIT_HASH_CMD = 'GetFirmwareGitHash'
-  _START_TRACING_CMD = 'StartTracing'
-  _STOP_TRACING_CMD = 'StopTracing'
-  _SUPPORTS_CLOCKSYNC_CMD = 'SupportsExplicitClockSync'
-  _RECORD_CLOCKSYNC_CMD = 'RecordClockSyncMarker'
-  _SUPPORTED_PLATFORMS = ['android', 'chromeos', 'linux', 'mac', 'win']
-
-  _BATTOR_PARTNO = 'x192a3u'
-  _BATTOR_PROGRAMMER = 'avr109'
-  _BATTOR_BAUDRATE = '115200'
-
-  def __init__(self, target_platform, android_device=None, battor_path=None,
-               battor_map_file=None, battor_map=None, serial_log_bucket=None,
-               autoflash=True):
-    """Constructor.
-
-    Args:
-      target_platform: Platform BattOr is attached to.
-      android_device: Serial number of Android device.
-      battor_path: Path to BattOr device.
-      battor_map_file: File giving map of [device serial: BattOr path]
-      battor_map: Map of [device serial: BattOr path]
-      serial_log_bucket: The cloud storage bucket to which BattOr agent serial
-        logs are uploaded on failure.
-
-    Attributes:
-      _battor_path: Path to BattOr. Typically similar to /tty/USB0.
-      _battor_agent_binary: Path to the BattOr agent binary used to communicate
-        with the BattOr.
-      _tracing: A bool saying if tracing has been started.
-      _battor_shell: A subprocess running the battor_agent_binary
-      _trace_results_path: Path to BattOr trace results file.
-      _serial_log_bucket: Cloud storage bucket to which BattOr agent serial logs
-        are uploaded on failure.
-      _serial_log_file: Temp file for the BattOr agent serial log.
-    """
-    self._battor_path = self._GetBattOrPath(target_platform, android_device,
-        battor_path, battor_map_file, battor_map)
-    config = os.path.join(
-        os.path.dirname(os.path.abspath(__file__)),
-        'battor_binary_dependencies.json')
-
-    self._dm = dependency_manager.DependencyManager(
-        [dependency_manager.BaseConfig(config)])
-    self._battor_agent_binary = self._dm.FetchPath(
-        'battor_agent_binary',
-        '%s_%s' % (py_utils.GetHostOsName(), py_utils.GetHostArchName()))
-
-    self._autoflash = autoflash
-    self._serial_log_bucket = serial_log_bucket
-    self._tracing = False
-    self._battor_shell = None
-    self._trace_results_path = None
-    self._start_tracing_time = None
-    self._stop_tracing_time = None
-    self._trace_results = None
-    self._serial_log_file = None
-    self._target_platform = target_platform
-    self._git_hash = None
-
-    atexit_with_log.Register(self.KillBattOrShell)
-
-  def _FlashBattOr(self):
-    assert self._battor_shell, (
-        'Must start shell before attempting to flash BattOr')
-
-    try:
-      device_git_hash = self.GetFirmwareGitHash()
-      battor_firmware, cs_git_hash = self._dm.FetchPathWithVersion(
-          'battor_firmware', 'default')
-      if cs_git_hash != device_git_hash:
-        logging.info(
-            'Flashing BattOr with old firmware version <%s> with new '
-            'version <%s>.', device_git_hash, cs_git_hash)
-        avrdude_config = self._dm.FetchPath('avrdude_config', 'default')
-        self.StopShell()
-        return self.FlashFirmware(battor_firmware, avrdude_config)
-      return False
-    except ValueError:
-      logging.exception('Git hash returned from BattOr was not as expected: %s'
-                        % self._git_hash)
-      self.StopShell()
-
-    finally:
-      if not self._battor_shell:
-        # TODO(charliea): Once we understand why BattOrs are crashing, remove
-        # this log.
-        # http://crbug.com/699581
-        logging.info('_FlashBattOr serial log:')
-        self._UploadSerialLogToCloudStorage()
-        self._serial_log_file = None
-
-        self.StartShell()
-
-  def KillBattOrShell(self):
-    if self._battor_shell:
-      logging.critical('BattOr shell was not properly closed. Killing now.')
-      self._battor_shell.kill()
-
-  def GetShellReturnCode(self):
-    """Gets the return code of the BattOr agent shell."""
-    rc = self._battor_shell.poll()
-    return rc
-
-  def StartShell(self):
-    """Start BattOr binary shell."""
-    assert not self._battor_shell, 'Attempting to start running BattOr shell.'
-
-    battor_cmd = [self._battor_agent_binary]
-    if self._serial_log_bucket:
-      # Create and immediately close a temp file in order to get a filename
-      # for the serial log.
-      self._serial_log_file = tempfile.NamedTemporaryFile(delete=False)
-      self._serial_log_file.close()
-      battor_cmd.append('--battor-serial-log=%s' % self._serial_log_file.name)
-    if self._battor_path:
-      battor_cmd.append('--battor-path=%s' % self._battor_path)
-    self._battor_shell = self._StartShellImpl(battor_cmd)
-    assert self.GetShellReturnCode() is None, 'Shell failed to start.'
-
-  def StopShell(self, timeout=None):
-    """Stop BattOr binary shell."""
-    assert self._battor_shell, 'Attempting to stop a non-running BattOr shell.'
-    assert not self._tracing, 'Attempting to stop a BattOr shell while tracing.'
-    timeout = timeout if timeout else DEFAULT_SHELL_CLOSE_TIMEOUT_S
-
-    try:
-      self._SendBattOrCommand(self._EXIT_CMD, check_return=False)
-      py_utils.WaitFor(lambda: self.GetShellReturnCode() != None, timeout)
-    except:
-      # If graceful shutdown failed, resort to a simple kill command.
-      self.KillBattOrShell()
-    finally:
-      self._battor_shell = None
-
-  def StartTracing(self):
-    """Start tracing on the BattOr."""
-    assert self._battor_shell, 'Must start shell before tracing'
-    assert not self._tracing, 'Tracing already started.'
-    self._FlashBattOr()
-    self._SendBattOrCommand(self._START_TRACING_CMD)
-    self._tracing = True
-    self._start_tracing_time = int(time.time())
-
-  def StopTracing(self):
-    """Stop tracing on the BattOr."""
-    assert self._tracing, 'Must run StartTracing before StopTracing'
-    # Create temp file to reserve location for saving results.
-    temp_file = tempfile.NamedTemporaryFile(delete=False)
-    self._trace_results_path = temp_file.name
-    temp_file.close()
-    self._SendBattOrCommand(
-        '%s %s' % (self._STOP_TRACING_CMD, self._trace_results_path))
-    self._tracing = False
-    self._stop_tracing_time = int(time.time())
-
-  def CollectTraceData(self, timeout=None):
-    """Collect trace data from battor.
-    Args:
-      timeout: timeout for waiting on the BattOr process to terminate in
-        seconds.
-    Returns: Trace data in form of a list.
-    """
-    if not self._stop_tracing_time or not self._start_tracing_time:
-      raise battor_error.BattOrError(
-          'No start or stop time detected when collecting BattOr trace.\n'
-          'Start: %s \n Stop: %s' % (self._start_tracing_time,
-                                     self._stop_tracing_time))
-
-    # The BattOr shell terminates after returning the results.
-    if timeout is None:
-      timeout = self._stop_tracing_time - self._start_tracing_time
-    py_utils.WaitFor(lambda: self.GetShellReturnCode() != None, timeout)
-
-    # TODO(charliea): Once we understand why BattOrs are crashing, only do
-    # this on failure.
-    # http://crbug.com/699581
-    logging.info('CollectTraceData serial log:')
-    self._UploadSerialLogToCloudStorage()
-
-    with open(self._trace_results_path) as results:
-      self._trace_results = results.read()
-    self._battor_shell = None
-    self._serial_log_file = None
-    return self._trace_results
-
-  def SupportsExplicitClockSync(self):
-    """Returns if BattOr supports Clock Sync events."""
-    return bool(int(self._SendBattOrCommand(self._SUPPORTS_CLOCKSYNC_CMD,
-                                            check_return=False)))
-
-  def RecordClockSyncMarker(self, sync_id):
-    """Record clock sync event on BattOr."""
-    if not isinstance(sync_id, basestring):
-      raise TypeError('sync_id must be a string.')
-    self._SendBattOrCommand('%s %s' % (self._RECORD_CLOCKSYNC_CMD, sync_id))
-
-  def _GetBattOrPath(self, target_platform, android_device=None,
-                     battor_path=None, battor_map_file=None, battor_map=None):
-    """Determines most likely path to the correct BattOr."""
-    if target_platform not in self._SUPPORTED_PLATFORMS:
-      raise battor_error.BattOrError(
-          '%s is an unsupported platform.' % target_platform)
-    if target_platform in ['win']:
-      # Right now, the BattOr agent binary isn't able to automatically detect
-      # the BattOr port on Windows. To get around this, we know that the BattOr
-      # shows up with a name of 'USB Serial Port', so use the COM port that
-      # corresponds to a device with that name.
-      for (port, desc, _) in serial.tools.list_ports.comports():
-        if 'USB Serial Port' in desc:
-          return port
-      raise battor_error.BattOrError(
-          'Could not find BattOr attached to machine.')
-    if target_platform in ['mac']:
-      for (port, desc, _) in serial.tools.list_ports.comports():
-        if 'BattOr' in desc:
-          return port
-
-    if target_platform in ['android', 'linux']:
-      if battor_path:
-        if not isinstance(battor_path, basestring):
-          raise battor_error.BattOrError(
-              'An invalid BattOr path was specified.')
-        return battor_path
-
-      if target_platform == 'android':
-        if not android_device:
-          raise battor_error.BattOrError(
-              'Must specify device for Android platform.')
-        if not battor_map_file and not battor_map:
-          # No map was passed, so must create one.
-          battor_map = battor_device_mapping.GenerateSerialMap()
-
-        return battor_device_mapping.GetBattOrPathFromPhoneSerial(
-            str(android_device), serial_map_file=battor_map_file,
-            serial_map=battor_map)
-
-      # Not Android and no explicitly passed BattOr.
-      device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=True)
-      battors = battor_device_mapping.GetBattOrList(device_tree)
-      if len(battors) != 1:
-        raise battor_error.BattOrError(
-            'For non-Android platforms, exactly one BattOr must be '
-            'attached unless address is explicitly given.')
-      return '/dev/%s' % battors.pop()
-
-    raise NotImplementedError(
-        'BattOr Wrapper not implemented for given platform')
-
-  def _SendBattOrCommandImpl(self, cmd):
-    """Sends command to the BattOr."""
-    self._battor_shell.stdin.write('%s\n' % cmd)
-    self._battor_shell.stdin.flush()
-    return self._battor_shell.stdout.readline()
-
-  def _SendBattOrCommand(self, cmd, check_return=True):
-    status = self._SendBattOrCommandImpl(cmd)
-
-    if check_return and not 'Done.' in status:
-      self.KillBattOrShell()
-      self._UploadSerialLogToCloudStorage()
-      self._serial_log_file = None
-      raise battor_error.BattOrError(
-          'BattOr did not complete command \'%s\' correctly.\n'
-          'Outputted: %s' % (cmd, status))
-    return status
-
-  def _StartShellImpl(self, battor_cmd):
-    return subprocess.Popen(
-        battor_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-        stderr=subprocess.STDOUT, shell=False)
-
-  def _UploadSerialLogToCloudStorage(self):
-    """Uploads the BattOr serial log to cloud storage."""
-    if not self._serial_log_file or not cloud_storage.IsNetworkIOEnabled():
-      return
-
-    remote_path = ('battor-serial-log-%s-%d.txt' % (
-        datetime.datetime.now().strftime('%Y-%m-%d_%H-%M.txt'),
-        random.randint(1, 100000)))
-
-    try:
-      cloud_url = cloud_storage.Insert(
-          self._serial_log_bucket, remote_path, self._serial_log_file.name)
-      sys.stderr.write('View BattOr serial log at %s\n' % cloud_url)
-    except cloud_storage.PermissionError as e:
-      logging.error('Cannot upload BattOr serial log file to cloud storage due '
-                    'to permission error: %s' % e.message)
-
-  def GetFirmwareGitHash(self):
-    """Gets the git hash for the BattOr firmware.
-
-    Returns: Git hash for firmware currently on the BattOr.
-        Also sets self._git_hash to this value.
-
-    Raises: ValueException if the git hash is not in hex.
-    """
-    assert self._battor_shell, ('Must start shell before getting firmware git '
-                                'hash')
-    self._git_hash = self._SendBattOrCommand(self._GET_FIRMWARE_GIT_HASH_CMD,
-                                       check_return=False).strip()
-    # We expect the git hash to be a valid 6 character hexstring. This will
-    # throw a ValueError exception otherwise.
-    int(self._git_hash, 16)
-    return self._git_hash
-
-  def FlashFirmware(self, hex_path, avrdude_config_path):
-    """Flashes the BattOr using an avrdude config at config_path with the new
-       firmware at hex_path.
-    """
-    assert not self._battor_shell, 'Cannot flash BattOr with open shell'
-
-    avrdude_binary = self._dm.FetchPath(
-        'avrdude_binary', '%s_%s' % (sys.platform, platform.machine()))
-    # Sanitize hex file path for windows. It contains <drive>:/ which avrdude
-    # is not capable of handling.
-    _, hex_path = os.path.splitdrive(hex_path)
-    avr_cmd = [
-        avrdude_binary,
-        '-e',  # Specify to erase data on chip.
-        '-p', self._BATTOR_PARTNO,  # Specify AVR device.
-        # Specify which microcontroller programmer to use.
-        '-c', self._BATTOR_PROGRAMMER,
-        '-b', self._BATTOR_BAUDRATE,  # Specify the baud rate to communicate at.
-        '-P', self._battor_path,  # Serial path to the battor.
-        # Command to execute with hex file and path to hex file.
-        '-U', 'flash:w:%s' % hex_path,
-        '-C', avrdude_config_path, # AVRdude config file path.
-        '2>&1'  # All output goes to stderr for some reason.
-    ]
-    try:
-      subprocess.check_output(avr_cmd)
-    except subprocess.CalledProcessError as e:
-      raise BattOrFlashError('BattOr flash failed with return code %s.'
-                             % e.returncode)
-
-    self._git_hash = None
-    return True
-
-
-class BattOrFlashError(Exception):
-  pass
diff --git a/systrace/catapult/common/battor/battor/battor_wrapper_devicetest.py b/systrace/catapult/common/battor/battor/battor_wrapper_devicetest.py
deleted file mode 100644
index 29c36e7..0000000
--- a/systrace/catapult/common/battor/battor/battor_wrapper_devicetest.py
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import platform
-import os
-import sys
-import time
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.join(os.path.dirname(__file__), '..'))
-
-from battor import battor_wrapper
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-import py_utils
-from py_utils import cloud_storage
-
-
-_SUPPORTED_CQ_PLATFORMS = ['win', 'linux', 'mac']
-
-class BattOrWrapperDeviceTest(unittest.TestCase):
-  def setUp(self):
-    self._platform = py_utils.GetHostOsName()
-    self._battor_list = None
-
-    if self._platform == 'linux':
-      device_tree  = find_usb_devices.GetBusNumberToDeviceTreeMap()
-      self._battor_list = battor_device_mapping.GetBattOrList(device_tree)
-
-    if not battor_wrapper.IsBattOrConnected(self._platform):
-      self._battor_list = []
-
-  def testFullRun(self):
-    # If battor_list is an empty list, a BattOr was expected but not found.
-    if self._battor_list is not None and not self._battor_list:
-      logging.critical('No BattOrs attached. Cannot run tests.')
-      return
-
-    if self._platform not in _SUPPORTED_CQ_PLATFORMS:
-      logging.critical('Platform %s is not supported on CQ.' % self._platform)
-      return
-
-
-    battor_path = (None if not self._battor_list
-                   else '/dev/%s' % self._battor_list[0])
-    battor = battor_wrapper.BattOrWrapper(
-        self._platform, battor_path=battor_path,
-        serial_log_bucket=cloud_storage.TELEMETRY_OUTPUT)
-    try:
-      battor.StartShell()
-      self.assertTrue(isinstance(battor.GetFirmwareGitHash(), basestring))
-      # We expect the git hash to be a valid 6 character hexstring. This will
-      # throw a ValueError exception otherwise.
-      int(battor.GetFirmwareGitHash(), 16)
-      self.assertTrue(len(battor.GetFirmwareGitHash()) == 7)
-      battor.StopShell()
-
-      battor.StartShell()
-      battor.StartTracing()
-      # TODO(rnephew): This sleep is required for now because crbug.com/602266
-      # causes the BattOr to crash when the trace time is too short. Once that
-      # bug is fixed, we should remove this delay.
-      time.sleep(1)
-      battor.RecordClockSyncMarker('abc')
-      # Sleep here because clock sync marker will be flaky if not.
-      time.sleep(1)
-      battor.StopTracing()
-
-      # Below is a work around for crbug.com/603309. On this short of a trace, 5
-      # seconds is enough to ensure that the trace will finish flushing to the
-      # file. The process is then killed so that BattOrWrapper knows that the
-      # process has been closed after tracing stops.
-      if self._platform == 'win':
-        time.sleep(5)
-        battor._battor_shell.kill()
-      results = battor.CollectTraceData().splitlines()
-    except:
-      if battor._battor_shell is not None:
-        battor._battor_shell.kill()
-        battor._battor_shell = None
-      raise
-
-    self.assertTrue('# BattOr' in results[0])
-    self.assertTrue('# voltage_range' in results[1])
-    self.assertTrue('# current_range' in results[2])
-    self.assertTrue('# sample_rate' in results[3])
-    # First line with results. Should be 3 'words'.
-    self.assertTrue(len(results[4].split()) == 3)
-    clock_sync_found = False
-    for entry in results:
-      if '<abc>' in entry:
-        clock_sync_found = True
-        break
-    self.assertTrue(clock_sync_found, 'BattOr Data:%s\n' % repr(results))
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/battor/battor/battor_wrapper_unittest.py b/systrace/catapult/common/battor/battor/battor_wrapper_unittest.py
deleted file mode 100644
index 7e14c34..0000000
--- a/systrace/catapult/common/battor/battor/battor_wrapper_unittest.py
+++ /dev/null
@@ -1,387 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import dependency_manager
-import logging
-import mock
-import subprocess
-import unittest
-
-from battor import battor_error
-from battor import battor_wrapper
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-
-import serial
-from serial.tools import list_ports
-
-
-class DependencyManagerMock(object):
-  def __init__(self, _):
-    self._fetch_return = 'path'
-    self._version_return = 'cbaa843'
-
-  def FetchPath(self, _, *unused):
-    del unused
-    return self._fetch_return
-
-  def FetchPathWithVersion(self, _, *unused):
-    del unused
-    return self._fetch_return, self._version_return
-
-class PopenMock(object):
-  def __init__(self, *unused):
-    pass
-
-  def poll(self):
-    pass
-
-  def kill(self):
-    pass
-
-
-class IsBattOrConnectedTest(unittest.TestCase):
-  def setUp(self):
-    # Windows monkey patches.
-    self._serial_tools_return = []
-    self._comports = serial.tools.list_ports.comports
-    serial.tools.list_ports.comports = lambda: self._serial_tools_return
-
-    # Linux/Android monkey patches.
-    self._generate_serial_map_return = {}
-    self._generate_serial_map = battor_device_mapping.GenerateSerialMap
-    battor_device_mapping.GenerateSerialMap = (
-        lambda: self._generate_serial_map_return)
-
-    self._read_serial_map_file_return = {}
-    self._read_serial_map_file = battor_device_mapping.ReadSerialMapFile
-    battor_device_mapping.ReadSerialMapFile = (
-        lambda f: self._read_serial_map_file_return)
-
-    self._get_bus_number_to_device_tree_map = (
-        find_usb_devices.GetBusNumberToDeviceTreeMap)
-    find_usb_devices.GetBusNumberToDeviceTreeMap = lambda fast=None: {}
-
-    self._get_battor_list_return = []
-    self._get_battor_list = battor_device_mapping.GetBattOrList
-    battor_device_mapping.GetBattOrList = lambda x: self._get_battor_list_return
-
-  def tearDown(self):
-    serial.tools.list_ports.comports = self._comports
-    battor_device_mapping.GenerateSerialMap = self._generate_serial_map
-    battor_device_mapping.ReadSerialMapFile = self._read_serial_map_file
-    find_usb_devices.GetBusNumberToDeviceTreeMap = (
-        self._get_bus_number_to_device_tree_map)
-    battor_device_mapping.GetBattOrList = self._get_battor_list
-
-  def forceException(self):
-    raise NotImplementedError
-
-  def testAndroidWithBattOr(self):
-    self._generate_serial_map_return = {'abc': '123'}
-    self.assertTrue(battor_wrapper.IsBattOrConnected('android', 'abc'))
-
-  def testAndroidWithoutMatchingBattOr(self):
-    self._generate_serial_map_return = {'notabc': 'not123'}
-    self.assertFalse(battor_wrapper.IsBattOrConnected('android', 'abc'))
-
-  def testAndroidNoDevicePassed(self):
-    with self.assertRaises(ValueError):
-      battor_wrapper.IsBattOrConnected('android')
-
-  def testAndroidWithMapAndFile(self):
-    device_map = {'abc': '123'}
-    battor_device_mapping.ReadSerialMapFile = self.forceException
-    self.assertTrue(
-        battor_wrapper.IsBattOrConnected('android', android_device='abc',
-                                        android_device_map=device_map,
-                                        android_device_file='file'))
-
-  def testAndroidWithMap(self):
-    self.assertTrue(
-        battor_wrapper.IsBattOrConnected('android', android_device='abc',
-                                        android_device_map={'abc', '123'}))
-
-  def testAndroidWithFile(self):
-    self._read_serial_map_file_return = {'abc': '123'}
-    self.assertTrue(
-      battor_wrapper.IsBattOrConnected('android', android_device='abc',
-                                      android_device_file='file'))
-
-  def testLinuxWithBattOr(self):
-    self._get_battor_list_return = ['battor']
-    self.assertTrue(battor_wrapper.IsBattOrConnected('linux'))
-
-  def testLinuxWithoutBattOr(self):
-    self._get_battor_list_return = []
-    self.assertFalse(battor_wrapper.IsBattOrConnected('linux'))
-
-  def testMacWithBattOr(self):
-    self._serial_tools_return = [('/dev/tty.usbserial-MAA', 'BattOr v3.3', '')]
-    self.assertTrue(battor_wrapper.IsBattOrConnected('mac'))
-
-  def testMacWithoutBattOr(self):
-    self._serial_tools_return = [('/dev/tty.usbserial-MAA', 'not_one', '')]
-    self.assertFalse(battor_wrapper.IsBattOrConnected('mac'))
-
-  def testWinWithBattOr(self):
-    self._serial_tools_return = [('COM4', 'USB Serial Port', '')]
-    self.assertTrue(battor_wrapper.IsBattOrConnected('win'))
-
-  def testWinWithoutBattOr(self):
-    self._get_battor_list_return = []
-    self.assertFalse(battor_wrapper.IsBattOrConnected('win'))
-
-
-class BattOrWrapperTest(unittest.TestCase):
-  def setUp(self):
-    self._battor = None
-    self._is_battor = True
-    self._battor_list = ['battor1']
-    self._should_pass = True
-    self._fake_map = {'battor1': 'device1'}
-    self._fake_return_code = None
-    self._fake_battor_return = 'Done.\n'
-
-    self._get_battor_path_from_phone_serial = (
-        battor_device_mapping.GetBattOrPathFromPhoneSerial)
-    self._get_bus_number_to_device_tree_map = (
-        find_usb_devices.GetBusNumberToDeviceTreeMap)
-    self._dependency_manager = dependency_manager.DependencyManager
-    self._get_battor_list = battor_device_mapping.GetBattOrList
-    self._is_battor = battor_device_mapping.IsBattOr
-    self._generate_serial_map = battor_device_mapping.GenerateSerialMap
-    self._serial_tools = serial.tools.list_ports.comports
-
-    battor_device_mapping.GetBattOrPathFromPhoneSerial = (
-        lambda x, serial_map_file=None, serial_map=None: x + '_battor')
-    find_usb_devices.GetBusNumberToDeviceTreeMap = lambda fast=False: True
-    dependency_manager.DependencyManager = DependencyManagerMock
-    battor_device_mapping.GetBattOrList = lambda x: self._battor_list
-    battor_device_mapping.IsBattOr = lambda x, y: self._is_battor
-    battor_device_mapping.GenerateSerialMap = lambda: self._fake_map
-    serial.tools.list_ports.comports = lambda: [('COM4', 'USB Serial Port', '')]
-
-    self._subprocess_check_output_code = 0
-    def subprocess_check_output_mock(*unused):
-      if self._subprocess_check_output_code != 0:
-        raise subprocess.CalledProcessError(None, None)
-      return 0
-    self._subprocess_check_output = subprocess.check_output
-    subprocess.check_output = subprocess_check_output_mock
-
-  def tearDown(self):
-    battor_device_mapping.GetBattOrPathFromPhoneSerial = (
-        self._get_battor_path_from_phone_serial)
-    find_usb_devices.GetBusNumberToDeviceTreeMap = (
-        self._get_bus_number_to_device_tree_map)
-    dependency_manager.DependencyManager = self._dependency_manager
-    battor_device_mapping.GetBattOrList = self._get_battor_list
-    battor_device_mapping.IsBattOr = self._is_battor
-    battor_device_mapping.GenerateSerialMap = self._generate_serial_map
-    serial.tools.list_ports.comports = self._serial_tools
-    subprocess.check_output = self._subprocess_check_output
-
-  def _DefaultBattOrReplacements(self):
-    battor_wrapper.DEFAULT_SHELL_CLOSE_TIMEOUT_S = .1
-    self._battor._StartShellImpl = lambda *unused: PopenMock()
-    self._battor.GetShellReturnCode = lambda *unused: self._fake_return_code
-    self._battor._SendBattOrCommandImpl = lambda x: self._fake_battor_return
-    self._battor._StopTracingImpl = lambda *unused: (self._fake_battor_return,
-                                                     None)
-
-  def testBadPlatform(self):
-    with self.assertRaises(battor_error.BattOrError):
-      self._battor = battor_wrapper.BattOrWrapper('unknown')
-
-  def testInitAndroidWithBattOr(self):
-    self._battor = battor_wrapper.BattOrWrapper('android', android_device='abc')
-    self.assertEquals(self._battor._battor_path, 'abc_battor')
-
-  def testInitAndroidWithoutBattOr(self):
-    self._battor_list = []
-    self._fake_map = {}
-    battor_device_mapping.GetBattOrPathFromPhoneSerial = (
-        self._get_battor_path_from_phone_serial)
-    with self.assertRaises(battor_error.BattOrError):
-      self._battor = battor_wrapper.BattOrWrapper('android',
-                                                  android_device='abc')
-
-  def testInitBattOrPathIsBattOr(self):
-    battor_path = 'battor/path/here'
-    self._battor = battor_wrapper.BattOrWrapper(
-        'android', android_device='abc', battor_path=battor_path)
-    self.assertEquals(self._battor._battor_path, battor_path)
-
-  def testInitNonAndroidWithBattOr(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self.assertEquals(self._battor._battor_path, 'COM4')
-
-  def testInitNonAndroidWithMultipleBattOr(self):
-    self._battor_list.append('battor2')
-    with self.assertRaises(battor_error.BattOrError):
-      self._battor = battor_wrapper.BattOrWrapper('linux')
-
-  def testInitNonAndroidWithoutBattOr(self):
-    self._battor_list = []
-    serial.tools.list_ports.comports = lambda: [('COM4', 'None', '')]
-    with self.assertRaises(battor_error.BattOrError):
-      self._battor = battor_wrapper.BattOrWrapper('win')
-
-  def testStartShellPass(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self.assertIsNotNone(self._battor._battor_shell)
-
-  def testStartShellDoubleStart(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    with self.assertRaises(AssertionError):
-      self._battor.StartShell()
-
-  def testStartShellFail(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.GetShellReturnCode = lambda *unused: 1
-    with self.assertRaises(AssertionError):
-      self._battor.StartShell()
-
-  def testStartTracingPass(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.StartTracing()
-    self.assertTrue(self._battor._tracing)
-
-  def testStartTracingDoubleStart(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.StartTracing()
-    with self.assertRaises(AssertionError):
-      self._battor.StartTracing()
-
-  def testStartTracingCommandFails(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor._SendBattOrCommandImpl = lambda *unused: 'Fail.\n'
-    self._battor.StartShell()
-    with self.assertRaises(battor_error.BattOrError):
-      self._battor.StartTracing()
-
-  def testStopTracingPass(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.StartTracing()
-    self._battor.GetShellReturnCode = lambda *unused: 0
-    self._battor.StopTracing()
-    self.assertFalse(self._battor._tracing)
-
-  def testStopTracingNotRunning(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    with self.assertRaises(AssertionError):
-      self._battor.StopTracing()
-
-  def testFlashFirmwarePass(self):
-    self._battor = battor_wrapper.BattOrWrapper('linux')
-    self._DefaultBattOrReplacements()
-    self.assertTrue(self._battor.FlashFirmware('hex_path', 'config_path'))
-
-  def testFlashFirmwareFail(self):
-    self._battor = battor_wrapper.BattOrWrapper('linux')
-    self._DefaultBattOrReplacements()
-    self._subprocess_check_output_code = 1
-    with self.assertRaises(battor_wrapper.BattOrFlashError):
-      self._battor.FlashFirmware('hex_path', 'config_path')
-
-  def testFlashFirmwareShellRunning(self):
-    self._battor = battor_wrapper.BattOrWrapper('linux')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    with self.assertRaises(AssertionError):
-      self._battor.FlashFirmware('hex_path', 'config_path')
-
-  def testGetFirmwareGitHashNotRunning(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    with self.assertRaises(AssertionError):
-      self._battor.GetFirmwareGitHash()
-
-  def testGetFirmwareGitHashPass(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.GetFirmwareGitHash = lambda: 'cbaa843'
-    self.assertTrue(isinstance(self._battor.GetFirmwareGitHash(), basestring))
-
-  def testStopShellPass(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._fake_return_code = 0
-    self._battor.StopShell()
-    self.assertIsNone(self._battor._battor_shell)
-
-  @mock.patch('time.sleep', mock.Mock)
-  def testStopShellTimeOutAndKill(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.StopShell()
-    self.assertIsNone(self._battor._battor_shell)
-
-  def testStopShellNotStarted(self):
-    self._battor = battor_wrapper.BattOrWrapper('win')
-    self._DefaultBattOrReplacements()
-    with self.assertRaises(AssertionError):
-      self._battor.StopShell()
-
-  @mock.patch('time.sleep', mock.Mock)
-  def testFlashBattOrSameGitHash(self):
-    self._battor = battor_wrapper.BattOrWrapper('linux')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.GetFirmwareGitHash = lambda: 'cbaa843'
-    dependency_manager.DependencyManager._version_return = 'cbaa843'
-    self.assertFalse(self._battor._FlashBattOr())
-
-  @mock.patch('time.sleep', mock.Mock)
-  def testFlashBattOrDifferentGitHash(self):
-    self._battor = battor_wrapper.BattOrWrapper('linux')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.GetFirmwareGitHash = lambda: 'bazz732'
-    dependency_manager.DependencyManager._version_return = 'cbaa843'
-    self.assertTrue(self._battor._FlashBattOr())
-
-  def testCollectTraceDataNoStartTime(self):
-    self._battor = battor_wrapper.BattOrWrapper('linux')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.StartTracing()
-    self._battor.GetShellReturnCode = lambda *unused: 0
-    self._battor.StopTracing()
-    self._battor._start_tracing_time = None
-    with self.assertRaises(battor_error.BattOrError):
-      self._battor.CollectTraceData()
-
-  def testCollectTraceDataNoStopTime(self):
-    self._battor = battor_wrapper.BattOrWrapper('linux')
-    self._DefaultBattOrReplacements()
-    self._battor.StartShell()
-    self._battor.StartTracing()
-    self._battor.GetShellReturnCode = lambda *unused: 0
-    self._battor.StopTracing()
-    self._battor._stop_tracing_time = None
-    with self.assertRaises(battor_error.BattOrError):
-      self._battor.CollectTraceData()
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/battor/bin/run_py_tests b/systrace/catapult/common/battor/bin/run_py_tests
deleted file mode 100755
index 61103bd..0000000
--- a/systrace/catapult/common/battor/bin/run_py_tests
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_CATAPULT_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..', '..', '..'))
-_BATTOR_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..'))
-
-sys.path.append(_CATAPULT_PATH)
-from catapult_build import run_with_typ
-
-
-def main():
-  return run_with_typ.Run(top_level_dir=_BATTOR_PATH)
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/common/battor/bin/upload_battor_binaries.py b/systrace/catapult/common/battor/bin/upload_battor_binaries.py
deleted file mode 100755
index 8901cfc..0000000
--- a/systrace/catapult/common/battor/bin/upload_battor_binaries.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import os
-import sys
-
-sys.path.append(
-    os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                 '..', '..', '..', 'dependency_manager')))
-from dependency_manager import base_config # pylint: disable=import-error
-
-
-_SUPPORTED_ARCHS = [
-    'linux2_x86_64', 'darwin_x86_64', 'win_AMD64', 'win32_AMD64', 'win32_x86',
-    'default'
-]
-_DEFAULT_DEP = 'battor_agent_binary'
-_DEFAULT_CONFIG = os.path.join(os.path.dirname(__file__), '..', 'battor',
-                               'battor_binary_dependencies.json')
-
-
-def UploadBinary(arch, path, config, dep):
-  print 'Uploading binary:'
-  print '  arch: %s' % arch
-  print '  path: %s' % path
-  print '  config: %s' % config
-  print '  dep: %s' % dep
-  c = base_config.BaseConfig(config, writable=True)
-  c.AddCloudStorageDependencyUpdateJob(
-      dep, arch, path, version=None, execute_job=True)
-  print 'Upload complete.'
-
-
-def main():
-  parser = argparse.ArgumentParser()
-  parser.add_argument('--arch', '--architecture', required=True,
-                      help='Architecture binary is built for.')
-  parser.add_argument('--path', required=True, help='Path to binary.')
-  parser.add_argument('--config', default=_DEFAULT_CONFIG,
-                      help='Path to dependency manager config')
-  parser.add_argument('--dep', default=_DEFAULT_DEP,
-                      help='Name of dependency to update.')
-  args = parser.parse_args()
-  if args.arch not in _SUPPORTED_ARCHS:
-    print 'Arch must be one of: %s' % _SUPPORTED_ARCHS
-    return 1
-  UploadBinary(args.arch, args.path, args.config, args.dep)
-  return 0
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/common/bin/run_tests b/systrace/catapult/common/bin/run_tests
deleted file mode 100755
index 3021755..0000000
--- a/systrace/catapult/common/bin/run_tests
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_CATAPULT_PATH = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), '..', '..'))
-
-_PY_UTILS_PATH = os.path.abspath(
-    os.path.join(_CATAPULT_PATH, 'common', 'py_utils'))
-
-
-def _RunTestsOrDie(top_level_dir):
-  exit_code = run_with_typ.Run(top_level_dir, path=[_PY_UTILS_PATH])
-  if exit_code:
-    sys.exit(exit_code)
-
-
-def _AddToPathIfNeeded(path):
-  if path not in sys.path:
-    sys.path.insert(0, path)
-
-
-if __name__ == '__main__':
-  _AddToPathIfNeeded(_CATAPULT_PATH)
-
-  from hooks import install
-  if '--no-install-hooks' in sys.argv:
-    sys.argv.remove('--no-install-hooks')
-  else:
-    install.InstallHooks()
-
-  from catapult_build import run_with_typ
-  _RunTestsOrDie(_PY_UTILS_PATH)
-  sys.exit(0)
diff --git a/systrace/catapult/common/bin/update_chrome_reference_binaries b/systrace/catapult/common/bin/update_chrome_reference_binaries
deleted file mode 100755
index 641fdc4..0000000
--- a/systrace/catapult/common/bin/update_chrome_reference_binaries
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Updates the Chrome reference builds.
-
-Usage:
-  $ /path/to/update_reference_build.py
-  $ git commit -a
-  $ git cl upload
-"""
-
-import collections
-import logging
-import os
-import shutil
-import subprocess
-import sys
-import urllib2
-import zipfile
-
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'py_utils'))
-
-from py_utils import cloud_storage
-from dependency_manager import base_config
-
-
-def BuildNotFoundError(error_string):
-  raise ValueError(error_string)
-
-
-_CHROME_BINARIES_CONFIG = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), '..', '..', 'common',
-    'py_utils', 'py_utils', 'chrome_binaries.json')
-
-CHROME_GS_BUCKET = 'chrome-unsigned'
-
-
-# Remove a platform name from this list to disable updating it.
-# Add one to enable updating it. (Must also update _PLATFORM_MAP.)
-_PLATFORMS_TO_UPDATE = ['mac_x86_64', 'win_x86', 'win_AMD64', 'linux_x86_64',
-                        'android_k_armeabi-v7a', 'android_l_arm64-v8a',
-                        'android_l_armeabi-v7a']
-
-# Remove a channal name from this list to disable updating it.
-# Add one to enable updating it.
-_CHANNELS_TO_UPDATE = ['stable'] # 'canary', 'dev'
-
-
-# Omaha is Chrome's autoupdate server. It reports the current versions used
-# by each platform on each channel.
-_OMAHA_PLATFORMS = { 'stable':  ['mac', 'linux', 'win', 'android'],
-                    'dev':  ['linux'], 'canary': ['mac', 'win']}
-
-
-# All of the information we need to update each platform.
-#   omaha: name omaha uses for the plaftorms.
-#   zip_name: name of the zip file to be retrieved from cloud storage.
-#   gs_build: name of the Chrome build platform used in cloud storage.
-#   destination: Name of the folder to download the reference build to.
-UpdateInfo = collections.namedtuple('UpdateInfo',
-    'omaha, gs_folder, gs_build, zip_name')
-_PLATFORM_MAP = { 'mac_x86_64': UpdateInfo(omaha='mac',
-                                           gs_folder='desktop-*',
-                                           gs_build='mac64',
-                                           zip_name='chrome-mac.zip'),
-                  'win_x86': UpdateInfo(omaha='win',
-                                        gs_folder='desktop-*',
-                                        gs_build='win',
-                                        zip_name='chrome-win.zip'),
-                  'win_AMD64': UpdateInfo(omaha='win',
-                                          gs_folder='desktop-*',
-                                          gs_build='win64',
-                                          zip_name='chrome-win64.zip'),
-                  'linux_x86_64': UpdateInfo(omaha='linux',
-                                             gs_folder='desktop-*',
-                                             gs_build='linux64',
-                                             zip_name='chrome-linux64.zip'),
-                  'android_k_armeabi-v7a': UpdateInfo(omaha='android',
-                                                      gs_folder='android-*',
-                                                      gs_build='arm',
-                                                      zip_name='Chrome.apk'),
-                  'android_l_arm64-v8a': UpdateInfo(omaha='android',
-                                                    gs_folder='android-*',
-                                                    gs_build='arm_64',
-                                                    zip_name='ChromeModern.apk'),
-                  'android_l_armeabi-v7a': UpdateInfo(omaha='android',
-                                                      gs_folder='android-*',
-                                                      gs_build='arm',
-                                                      zip_name='Chrome.apk'),
-}
-
-
-def _ChannelVersionsMap(channel):
-  rows = _OmahaReportVersionInfo(channel)
-  omaha_versions_map = _OmahaVersionsMap(rows, channel)
-  channel_versions_map = {}
-  for platform in _PLATFORMS_TO_UPDATE:
-    omaha_platform = _PLATFORM_MAP[platform].omaha
-    if omaha_platform in omaha_versions_map:
-      channel_versions_map[platform] = omaha_versions_map[omaha_platform]
-  return channel_versions_map
-
-
-def _OmahaReportVersionInfo(channel):
-  url ='https://omahaproxy.appspot.com/all?channel=%s' % channel
-  lines = urllib2.urlopen(url).readlines()
-  return [l.split(',') for l in lines]
-
-
-def _OmahaVersionsMap(rows, channel):
-  platforms = _OMAHA_PLATFORMS.get(channel, [])
-  if (len(rows) < 1 or
-      not rows[0][0:3] == ['os', 'channel', 'current_version']):
-    raise ValueError(
-        'Omaha report is not in the expected form: %s.' % rows)
-  versions_map = {}
-  for row in rows[1:]:
-    if row[1] != channel:
-      raise ValueError(
-          'Omaha report contains a line with the channel %s' % row[1])
-    if row[0] in platforms:
-      versions_map[row[0]] = row[2]
-  logging.warn('versions map: %s' % versions_map)
-  if not all(platform in versions_map for platform in platforms):
-    raise ValueError(
-        'Omaha report did not contain all desired platforms for channel %s' % channel)
-  return versions_map
-
-
-def _QueuePlatformUpdate(platform, version, config, channel):
-  """ platform: the name of the platform for the browser to
-      be downloaded & updated from cloud storage. """
-  platform_info = _PLATFORM_MAP[platform]
-  filename = platform_info.zip_name
-  # remote_path example: desktop-*/30.0.1595.0/precise32/chrome-precise32.zip
-  remote_path = '%s/%s/%s/%s' % (
-      platform_info.gs_folder, version, platform_info.gs_build, filename)
-  if not cloud_storage.Exists(CHROME_GS_BUCKET, remote_path):
-    raise BuildNotFoundError(
-        'Failed to find %s build for version %s at path %s.' % (platform, version, remote_path))
-  reference_builds_folder = os.path.join(
-      os.path.dirname(os.path.abspath(__file__)), 'chrome_telemetry_build',
-      'reference_builds', channel)
-  if not os.path.exists(reference_builds_folder):
-    os.makedirs(reference_builds_folder)
-  local_dest_path = os.path.join(reference_builds_folder, filename)
-  cloud_storage.Get(CHROME_GS_BUCKET, remote_path, local_dest_path)
-  config.AddCloudStorageDependencyUpdateJob(
-      'chrome_%s' % channel, platform, local_dest_path, version=version,
-      execute_job=False)
-
-
-def UpdateBuilds():
-  config = base_config.BaseConfig(_CHROME_BINARIES_CONFIG, writable=True)
-  for channel in _CHANNELS_TO_UPDATE:
-    channel_versions_map = _ChannelVersionsMap(channel)
-    for platform in channel_versions_map:
-      print 'Downloading Chrome (%s channel) on %s' % (channel, platform)
-      current_version = config.GetVersion('chrome_%s' % channel, platform)
-      channel_version =  channel_versions_map.get(platform)
-      print 'current: %s, channel: %s' % (current_version, channel_version)
-      if current_version and current_version == channel_version:
-        continue
-      _QueuePlatformUpdate(platform, channel_version, config, channel)
-    # TODO: move execute update jobs here, and add committing/uploading the cl.
-
-  print 'Updating chrome builds with downloaded binaries'
-  config.ExecuteUpdateJobs(force=True)
-
-
-def main():
-  logging.getLogger().setLevel(logging.DEBUG)
-  #TODO(aiolos): alert sheriffs via email when an error is seen.
-  #This should be added when alerts are added when updating the build.
-  UpdateBuilds()
-  # TODO(aiolos): Add --commit flag. crbug.com/547229
-
-if __name__ == '__main__':
-  main()
diff --git a/systrace/catapult/common/eslint/LICENSE b/systrace/catapult/common/eslint/LICENSE
deleted file mode 100644
index f943447..0000000
--- a/systrace/catapult/common/eslint/LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-ESLint
-Copyright jQuery Foundation and other contributors, https://jquery.org/
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file
diff --git a/systrace/catapult/common/eslint/README.md b/systrace/catapult/common/eslint/README.md
deleted file mode 100644
index 8ba5b63..0000000
--- a/systrace/catapult/common/eslint/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory contains the Catapult eslint config, custom Catapult eslint rules,
-and tests for those rules.
-
-Some of our custom rules are modified versions of those included with eslint, as
-suggested in https://goo.gl/uAxFHq.
diff --git a/systrace/catapult/common/eslint/bin/run_eslint b/systrace/catapult/common/eslint/bin/run_eslint
deleted file mode 100755
index 933415b..0000000
--- a/systrace/catapult/common/eslint/bin/run_eslint
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import os
-import sys
-
-
-_CATAPULT_PATH = os.path.abspath(
-    os.path.join(os.path.dirname(__file__),
-                 os.path.pardir, os.path.pardir, os.path.pardir))
-
-
-_ESLINT_PATH = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.path.pardir))
-
-
-DIRECTORIES_TO_LINT = [
-  os.path.join(_CATAPULT_PATH, 'dashboard', 'dashboard'),
-  os.path.join(_CATAPULT_PATH, 'tracing', 'tracing')
-]
-
-
-def _AddToPathIfNeeded(path):
-  if path not in sys.path:
-    sys.path.insert(0, path)
-
-
-if __name__ == '__main__':
-  _AddToPathIfNeeded(_ESLINT_PATH)
-  import eslint
-
-  parser = argparse.ArgumentParser(
-      description='Wrapper script to run eslint on Catapult code')
-  parser.add_argument('--paths', '-p', default=None, nargs='+', metavar='PATH',
-                      help='List of paths to lint')
-  parser.add_argument('--all', default=None, action='store_true',
-                      help='Runs eslint on all applicable Catapult code')
-  parser.add_argument('--extra-args', default=None, type=str,
-                      help='A string of extra arguments to pass to eslint')
-
-  args = parser.parse_args(sys.argv[1:])
-  if ((args.paths is not None and args.all is not None) or
-      (args.paths is None and args.all is None)):
-    print 'Either --paths or --all must be used, but not both.\n'
-    parser.print_help()
-    sys.exit(1)
-
-  paths = DIRECTORIES_TO_LINT if args.all else args.paths
-  success, output = eslint.RunEslint(paths, extra_args=args.extra_args)
-  print output
-  sys.exit(not success)
diff --git a/systrace/catapult/common/eslint/bin/run_tests b/systrace/catapult/common/eslint/bin/run_tests
deleted file mode 100755
index db10679..0000000
--- a/systrace/catapult/common/eslint/bin/run_tests
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-
-_CATAPULT_PATH = os.path.abspath(
-    os.path.join(os.path.dirname(__file__),
-    os.path.pardir, os.path.pardir, os.path.pardir))
-
-
-_ESLINT_PATH = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.path.pardir))
-
-
-def _RunTestsOrDie(top_level_dir):
-  exit_code = run_with_typ.Run(top_level_dir, path=[_ESLINT_PATH])
-  if exit_code:
-    sys.exit(exit_code)
-
-
-def _AddToPathIfNeeded(path):
-  if path not in sys.path:
-    sys.path.insert(0, path)
-
-
-if __name__ == '__main__':
-  _AddToPathIfNeeded(_CATAPULT_PATH)
-
-  from catapult_build import run_with_typ
-
-  _RunTestsOrDie(os.path.join(_ESLINT_PATH, 'eslint'))
diff --git a/systrace/catapult/common/eslint/eslint/__init__.py b/systrace/catapult/common/eslint/eslint/__init__.py
deleted file mode 100644
index 082178a..0000000
--- a/systrace/catapult/common/eslint/eslint/__init__.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import subprocess
-import sys
-
-
-_CATAPULT_PATH = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)),
-    os.path.pardir, os.path.pardir, os.path.pardir)
-
-
-def _AddToPathIfNeeded(path):
-  if path not in sys.path:
-    sys.path.insert(0, path)
-
-
-def _UpdateSysPathIfNeeded():
-  _AddToPathIfNeeded(os.path.join(_CATAPULT_PATH, 'common', 'node_runner'))
-  _AddToPathIfNeeded(os.path.join(_CATAPULT_PATH, 'common', 'py_utils'))
-
-
-_UpdateSysPathIfNeeded()
-
-
-import py_utils
-from node_runner import node_util
-
-
-BASE_ESLINT_CMD = [
-  node_util.GetNodePath(),
-  os.path.join(node_util.GetNodeModulesPath(), 'eslint', 'bin', 'eslint.js'),
-  '--color'
-]
-
-
-DEFAULT_ESLINT_RULES_DIR = os.path.join(
-    py_utils.GetCatapultDir(), 'common', 'eslint', 'rules')
-
-
-def _CreateEslintCommand(rulesdir, extra_args):
-  eslint_cmd = BASE_ESLINT_CMD + [
-      '--rulesdir', rulesdir, '--ext', '.js,.html'
-  ]
-  if extra_args:
-    eslint_cmd.extend(extra_args.strip().split(' '))
-  return eslint_cmd
-
-
-def RunEslint(paths, rules_dir=DEFAULT_ESLINT_RULES_DIR, extra_args=None):
-  """Runs eslint on a list of paths.
-
-  Args:
-    paths: A list of paths to run eslint on.
-    rules_dir: A directory of custom eslint rules.
-    extra_args: A string to append to the end of the eslint command.
-  """
-  if type(paths) is not list or len(paths) == 0:
-    raise ValueError('Must specify a non-empty list of paths to lint.')
-
-  try:
-    eslint_cmd = _CreateEslintCommand(rules_dir, extra_args)
-    return True, subprocess.check_output(eslint_cmd + paths,
-                                         stderr=subprocess.STDOUT).rstrip()
-  except subprocess.CalledProcessError as e:
-    return False, e.output.rstrip()
diff --git a/systrace/catapult/common/eslint/eslint/smoke_test.py b/systrace/catapult/common/eslint/eslint/smoke_test.py
deleted file mode 100644
index 9a0f442..0000000
--- a/systrace/catapult/common/eslint/eslint/smoke_test.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import eslint
-import os
-import tempfile
-import unittest
-
-
-_TEMP_FILE_CONTENTS = '''<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-<script>
-// This should cause a linter error because we require camelCase.
-var non_camel_case = 0;
-</script>
-'''
-
-
-class SmokeTest(unittest.TestCase):
-  def testEslintFindsError(self):
-    try:
-      tmp_file =  tempfile.NamedTemporaryFile(
-          delete=False, dir=os.path.dirname(__file__), suffix=".html")
-      tmp_file.write(_TEMP_FILE_CONTENTS)
-      tmp_file.close()
-
-      success, output = eslint.RunEslint([tmp_file.name])
-      self.assertFalse(success)
-      self.assertTrue('is not in camel case' in output)
-    finally:
-      os.remove(tmp_file.name)
diff --git a/systrace/catapult/common/eslint/rules/catapult-camelcase.js b/systrace/catapult/common/eslint/rules/catapult-camelcase.js
deleted file mode 100644
index bf31052..0000000
--- a/systrace/catapult/common/eslint/rules/catapult-camelcase.js
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-/* eslint-disable */
-
-/**
- * @fileoverview Rule to flag non-camelcased identifiers
- * @author Nicholas C. Zakas
- */
-
-'use strict';
-
-//------------------------------------------------------------------------------
-// Rule Definition
-//------------------------------------------------------------------------------
-
-module.exports = {
-    meta: {
-        docs: {
-            description: "enforce Catapult camelcase naming convention",
-            category: "Stylistic Issues",
-            recommended: false
-        },
-
-        schema: [
-            {
-                type: "object",
-                properties: {
-                    properties: {
-                        enum: ["always", "never"]
-                    }
-                },
-                additionalProperties: false
-            }
-        ]
-    },
-
-    create(context) {
-
-        //--------------------------------------------------------------------------
-        // Helpers
-        //--------------------------------------------------------------------------
-
-        // contains reported nodes to avoid reporting twice on destructuring with shorthand notation
-        var reported = [];
-
-        /**
-         * Checks if a string contains an underscore and isn't all upper-case
-         * @param {string} name The string to check.
-         * @returns {boolean} if the string is underscored
-         * @private
-         */
-        function isUnderscored(name) {
-
-            // if there's an underscore, it might be A_VARANT, which is okay
-            return name.indexOf("_") > -1 && name !== name.toUpperCase();
-        }
-
-        /**
-         * Reports an AST node as a rule violation.
-         * @param {ASTNode} node The node to report.
-         * @returns {void}
-         * @private
-         */
-        function report(node) {
-            if (reported.indexOf(node) < 0) {
-                reported.push(node);
-                context.report(node, "Identifier '{{name}}' is not in camel case.", { name: node.name });
-            }
-        }
-
-        var options = context.options[0] || {};
-        let properties = options.properties || "";
-
-        if (properties !== "always" && properties !== "never") {
-            properties = "always";
-        }
-
-        return {
-
-            Identifier(node) {
-
-                /*
-                 * Leading and trailing underscores are commonly used to flag
-                 * private/protected identifiers, strip them.
-                 *
-                 * NOTE: This has four Catapult-specific style exceptions:
-                 *
-                 *   - The prefix opt_
-                 *   - The prefix g_
-                 *   - The suffix _smallerIsBetter
-                 *   - The suffix _biggerIsBetter
-                 */
-                var name = node.name.replace(/(?:^opt_)|^(?:^g_)|^_+|_+$|(?:_smallerIsBetter)$|(?:_biggerIsBetter)$/g, ""),
-                    effectiveParent = (node.parent.type === "MemberExpression") ? node.parent.parent : node.parent;
-
-                // MemberExpressions get special rules
-                if (node.parent.type === "MemberExpression") {
-
-                    // "never" check properties
-                    if (properties === "never") {
-                        return;
-                    }
-
-                    // Always report underscored object names
-                    if (node.parent.object.type === "Identifier" &&
-                            node.parent.object.name === node.name &&
-                            isUnderscored(name)) {
-                        report(node);
-
-                    // Report AssignmentExpressions only if they are the left side of the assignment
-                    } else if (effectiveParent.type === "AssignmentExpression" &&
-                            isUnderscored(name) &&
-                            (effectiveParent.right.type !== "MemberExpression" ||
-                            effectiveParent.left.type === "MemberExpression" &&
-                            effectiveParent.left.property.name === node.name)) {
-                        report(node);
-                    }
-
-                // Properties have their own rules
-                } else if (node.parent.type === "Property") {
-
-                    // "never" check properties
-                    if (properties === "never") {
-                        return;
-                    }
-
-                    if (node.parent.parent && node.parent.parent.type === "ObjectPattern" &&
-                            node.parent.key === node && node.parent.value !== node) {
-                        return;
-                    }
-
-                    if (isUnderscored(name) && effectiveParent.type !== "CallExpression") {
-                        report(node);
-                    }
-
-                // Check if it's an import specifier
-                } else if (["ImportSpecifier", "ImportNamespaceSpecifier", "ImportDefaultSpecifier"].indexOf(node.parent.type) >= 0) {
-
-                    // Report only if the local imported identifier is underscored
-                    if (node.parent.local && node.parent.local.name === node.name && isUnderscored(name)) {
-                        report(node);
-                    }
-
-                // Report anything that is underscored that isn't a CallExpression
-                } else if (isUnderscored(name) && effectiveParent.type !== "CallExpression") {
-                    report(node);
-                }
-            }
-
-        };
-
-    }
-};
diff --git a/systrace/catapult/common/eslint/tests/catapult-camelcase.js b/systrace/catapult/common/eslint/tests/catapult-camelcase.js
deleted file mode 100644
index f0bdb37..0000000
--- a/systrace/catapult/common/eslint/tests/catapult-camelcase.js
+++ /dev/null
@@ -1,324 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-/* eslint-disable */
-
-/**
- * @fileoverview Tests for camelcase rule.
- * @author Nicholas C. Zakas
- */
-
-'use strict';
-
-//------------------------------------------------------------------------------
-// Requirements
-//------------------------------------------------------------------------------
-
-var rule = require("../rules/catapult-camelcase"),
-    RuleTester = require("../../node_runner/node_runner/node_modules/eslint/lib/testers/rule-tester");
-
-//------------------------------------------------------------------------------
-// Tests
-//------------------------------------------------------------------------------
-
-var ruleTester = new RuleTester();
-
-ruleTester.run("camelcase", rule, {
-    valid: [
-        "firstName = \"Nicholas\"",
-        "FIRST_NAME = \"Nicholas\"",
-        "__myPrivateVariable = \"Patrick\"",
-        "myPrivateVariable_ = \"Patrick\"",
-        "function doSomething(){}",
-        "do_something()",
-        "foo.do_something()",
-        "var foo = bar.baz_boom;",
-        "var foo = bar.baz_boom.something;",
-        "foo.boom_pow.qux = bar.baz_boom.something;",
-        "if (bar.baz_boom) {}",
-        "var obj = { key: foo.bar_baz };",
-        "var arr = [foo.bar_baz];",
-        "[foo.bar_baz]",
-        "var arr = [foo.bar_baz.qux];",
-        "[foo.bar_baz.nesting]",
-        "if (foo.bar_baz === boom.bam_pow) { [foo.baz_boom] }",
-        // These tests are for Catapult-specific exceptions.
-        "opt_firstName = \"Nicholas\"",
-        "g_firstName = \"Nicholas\"",
-        "sizeInBytes_smallerIsBetter = \"Nicholas\"",
-        "sizeInBytes_biggerIsBetter = \"Nicholas\"",
-        {
-            code: "var o = {key: 1}",
-            options: [{properties: "always"}]
-        },
-        {
-            code: "var o = {bar_baz: 1}",
-            options: [{properties: "never"}]
-        },
-        {
-            code: "obj.a_b = 2;",
-            options: [{properties: "never"}]
-        },
-        {
-            code: "var obj = {\n a_a: 1 \n};\n obj.a_b = 2;",
-            options: [{properties: "never"}]
-        },
-        {
-            code: "obj.foo_bar = function(){};",
-            options: [{properties: "never"}]
-        },
-        {
-            code: "var { category_id: category } = query;",
-            parserOptions: { ecmaVersion: 6 }
-        },
-        {
-            code: "var { category_id: category } = query;",
-            parserOptions: { ecmaVersion: 6 },
-            options: [{properties: "never"}]
-        },
-        {
-            code: "import { camelCased } from \"external module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" }
-        },
-        {
-            code: "import { no_camelcased as camelCased } from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" }
-        },
-        {
-            code: "import { no_camelcased as camelCased, anoterCamelCased } from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" }
-        }
-    ],
-    invalid: [
-        {
-            code: "first_name = \"Nicholas\"",
-            errors: [
-                {
-                    message: "Identifier 'first_name' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "__private_first_name = \"Patrick\"",
-            errors: [
-                {
-                    message: "Identifier '__private_first_name' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "function foo_bar(){}",
-            errors: [
-                {
-                    message: "Identifier 'foo_bar' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "obj.foo_bar = function(){};",
-            errors: [
-                {
-                    message: "Identifier 'foo_bar' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "bar_baz.foo = function(){};",
-            errors: [
-                {
-                    message: "Identifier 'bar_baz' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "[foo_bar.baz]",
-            errors: [
-                {
-                    message: "Identifier 'foo_bar' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "if (foo.bar_baz === boom.bam_pow) { [foo_bar.baz] }",
-            errors: [
-                {
-                    message: "Identifier 'foo_bar' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "foo.bar_baz = boom.bam_pow",
-            errors: [
-                {
-                    message: "Identifier 'bar_baz' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "var foo = { bar_baz: boom.bam_pow }",
-            errors: [
-                {
-                    message: "Identifier 'bar_baz' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "foo.qux.boom_pow = { bar: boom.bam_pow }",
-            errors: [
-                {
-                    message: "Identifier 'boom_pow' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "var o = {bar_baz: 1}",
-            options: [{properties: "always"}],
-            errors: [
-                {
-                    message: "Identifier 'bar_baz' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "obj.a_b = 2;",
-            options: [{properties: "always"}],
-            errors: [
-                {
-                    message: "Identifier 'a_b' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "obj.a_b = 2;",
-            options: [{properties: "always"}],
-            errors: [
-                {
-                    message: "Identifier 'a_b' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "var { category_id: category_id } = query;",
-            parserOptions: { ecmaVersion: 6 },
-            errors: [
-                {
-                    message: "Identifier 'category_id' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "var { category_id } = query;",
-            parserOptions: { ecmaVersion: 6 },
-            errors: [
-                {
-                    message: "Identifier 'category_id' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import no_camelcased from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camelcased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import * as no_camelcased from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camelcased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import { no_camelcased } from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camelcased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import { no_camelcased as no_camel_cased } from \"external module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camel_cased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import { camelCased as no_camel_cased } from \"external module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camel_cased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import { camelCased, no_camelcased } from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camelcased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import { no_camelcased as camelCased, another_no_camelcased } from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'another_no_camelcased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import camelCased, { no_camelcased } from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camelcased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        },
-        {
-            code: "import no_camelcased, { another_no_camelcased as camelCased } from \"external-module\";",
-            parserOptions: { ecmaVersion: 6, sourceType: "module" },
-            errors: [
-                {
-                    message: "Identifier 'no_camelcased' is not in camel case.",
-                    type: "Identifier"
-                }
-            ]
-        }
-    ]
-});
diff --git a/systrace/catapult/common/lab/commits.py b/systrace/catapult/common/lab/commits.py
deleted file mode 100755
index ce02ee3..0000000
--- a/systrace/catapult/common/lab/commits.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Print statistics about the rate of commits to a repository."""
-
-import datetime
-import itertools
-import json
-import math
-import urllib
-import urllib2
-
-
-_BASE_URL = 'https://chromium.googlesource.com'
-# Can be up to 10,000.
-_REVISION_COUNT = 1000
-
-_REPOSITORIES = [
-    'chromium/src',
-    'angle/angle',
-    'skia',
-    'v8/v8',
-]
-
-
-def Pairwise(iterable):
-  """s -> (s0,s1), (s1,s2), (s2, s3), ..."""
-  a, b = itertools.tee(iterable)
-  next(b, None)
-  return itertools.izip(a, b)
-
-
-def Percentile(data, percentile):
-  """Find a percentile of a list of values.
-
-  Parameters:
-    data: A sorted list of values.
-    percentile: The percentile to look up, from 0.0 to 1.0.
-
-  Returns:
-    The percentile.
-
-  Raises:
-    ValueError: If data is empty.
-  """
-  if not data:
-    raise ValueError()
-
-  k = (len(data) - 1) * percentile
-  f = math.floor(k)
-  c = math.ceil(k)
-
-  if f == c:
-    return data[int(k)]
-  return data[int(f)] * (c - k) + data[int(c)] * (k - f)
-
-
-def CommitTimes(repository, revision_count):
-  parameters = urllib.urlencode((('n', revision_count), ('format', 'JSON')))
-  url = '%s/%s/+log?%s' % (_BASE_URL, urllib.quote(repository), parameters)
-  data = json.loads(''.join(urllib2.urlopen(url).read().splitlines()[1:]))
-
-  commit_times = []
-  for revision in data['log']:
-    commit_time_string = revision['committer']['time']
-    commit_time = datetime.datetime.strptime(
-        commit_time_string, '%a %b %d %H:%M:%S %Y')
-    commit_times.append(commit_time)
-
-  return commit_times
-
-
-def main():
-  for repository in _REPOSITORIES:
-    commit_times = CommitTimes(repository, _REVISION_COUNT)
-
-    commit_durations = []
-    for time1, time2 in Pairwise(commit_times):
-      commit_durations.append((time1 - time2).total_seconds())
-    commit_durations.sort()
-
-    print 'REPOSITORY:', repository
-    print 'Start Date:', min(commit_times)
-    print '  End Date:', max(commit_times)
-    print '  Duration:', max(commit_times) - min(commit_times)
-    print '         n:', len(commit_times)
-
-    for p in (0.00, 0.05, 0.25, 0.50, 0.75, 0.95, 1.00):
-      percentile = Percentile(commit_durations, p)
-      print '%3d%% commit duration:' % (p * 100), '%6ds' % percentile
-    mean = math.fsum(commit_durations) / len(commit_durations)
-    print ' Min commit duration:', '%6ds' % min(commit_durations)
-    print 'Mean commit duration:', '%6ds' % mean
-    print ' Max commit duration:', '%6ds' % max(commit_durations)
-    print
-
-
-if __name__ == '__main__':
-  main()
diff --git a/systrace/catapult/common/lab/hardware.py b/systrace/catapult/common/lab/hardware.py
deleted file mode 100755
index 5e49c5c..0000000
--- a/systrace/catapult/common/lab/hardware.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Query build slave hardware info, and print it to stdout as csv."""
-
-import csv
-import json
-import logging
-import sys
-import urllib2
-
-
-_MASTERS = [
-    'chromium.perf',
-    'chromium.perf.fyi',
-    'client.catapult',
-    'tryserver.chromium.perf',
-    'tryserver.client.catapult',
-]
-
-
-_KEYS = [
-    'master', 'builder', 'hostname',
-
-    'os family', 'os version', 'bitness (userland)',
-
-    'product name', 'architecture', 'processor count', 'processor type',
-    'memory total',
-
-    'facter version', 'git version', 'puppet version', 'python version',
-    'ruby version',
-
-    'android device 1', 'android device 2', 'android device 3',
-    'android device 4', 'android device 5', 'android device 6',
-    'android device 7', 'android device 8',
-]
-_EXCLUDED_KEYS = frozenset([
-    'architecture (userland)',
-    'b directory',
-    'last puppet run',
-    'uptime',
-    'windows version',
-])
-
-
-def main():
-  writer = csv.DictWriter(sys.stdout, _KEYS)
-  writer.writeheader()
-
-  for master_name in _MASTERS:
-    master_data = json.load(urllib2.urlopen(
-        'http://build.chromium.org/p/%s/json/slaves' % master_name))
-
-    slaves = sorted(master_data.iteritems(),
-                    key=lambda x: (x[1]['builders'].keys(), x[0]))
-    for slave_name, slave_data in slaves:
-      for builder_name in slave_data['builders']:
-        row = {
-            'master': master_name,
-            'builder': builder_name,
-            'hostname': slave_name,
-        }
-
-        host_data = slave_data['host']
-        if host_data:
-          host_data = host_data.splitlines()
-          if len(host_data) > 1:
-            for line in host_data:
-              if not line:
-                continue
-              key, value = line.split(': ')
-              if key in _EXCLUDED_KEYS:
-                continue
-              row[key] = value
-
-        # Munge keys.
-        row = {key.replace('_', ' '): value for key, value in row.iteritems()}
-        if 'osfamily' in row:
-          row['os family'] = row.pop('osfamily')
-        if 'product name' not in row and slave_name.startswith('slave'):
-          row['product name'] = 'Google Compute Engine'
-
-        try:
-          writer.writerow(row)
-        except ValueError:
-          logging.error(row)
-          raise
-
-
-if __name__ == '__main__':
-  main()
diff --git a/systrace/catapult/common/lab/keychain_unlock.sh b/systrace/catapult/common/lab/keychain_unlock.sh
deleted file mode 100755
index e550f8d..0000000
--- a/systrace/catapult/common/lab/keychain_unlock.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Script to SSH into a list of bots and set up their keychains for Telemetry.
-# https://www.chromium.org/developers/telemetry/telemetry-mac-keychain-setup
-
-for hostname in "$@"
-do
-  ssh -t "$hostname" 'security unlock-keychain login.keychain
-security delete-generic-password -s "Chrome Safe Storage" login.keychain
-security add-generic-password -a Chrome -w "+NTclOvR4wLMgRlLIL9bHQ==" \
-  -s "Chrome Safe Storage" -A login.keychain'
-done
diff --git a/systrace/catapult/common/node_runner/node_runner/__init__.py b/systrace/catapult/common/node_runner/node_runner/__init__.py
deleted file mode 100644
index ce33e05..0000000
--- a/systrace/catapult/common/node_runner/node_runner/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
diff --git a/systrace/catapult/common/node_runner/node_runner/node_binaries.json b/systrace/catapult/common/node_runner/node_runner/node_binaries.json
deleted file mode 100644
index 4245249..0000000
--- a/systrace/catapult/common/node_runner/node_runner/node_binaries.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-  "config_type": "BaseConfig",
-  "dependencies": {
-    "node": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux_x86_64": {
-          "cloud_storage_hash": "5750e968975e7f5ab8cb694f5e92a34a890e129d",
-          "download_path": "bin/node/node-linux64.zip",
-          "path_within_archive": "node-v6.7.0-linux-x64/bin/node",
-          "version_in_cs": "6.7.0"
-        },
-        "mac_x86_64": {
-          "cloud_storage_hash": "1af7c221e530165af8a6ab8ff7ccb1f2dd54036d",
-          "download_path": "bin/node/node-mac64.zip",
-          "path_within_archive": "node-v6.7.0-darwin-x64/bin/node",
-          "version_in_cs": "6.7.0"
-        },
-        "win_AMD64": {
-          "cloud_storage_hash": "23f21bfb2edf874a8b6bdb6c1acb408bc7edeced",
-          "download_path": "bin/node/node-win64.zip",
-          "path_within_archive": "node-v6.7.0-win-x64/node.exe",
-          "version_in_cs": "6.7.0"
-        }
-      }
-    },
-    "npm": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux_x86_64": {
-          "cloud_storage_hash": "5750e968975e7f5ab8cb694f5e92a34a890e129d",
-          "download_path": "bin/node/node-linux64.zip",
-          "path_within_archive": "node-v6.7.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js",
-          "version_in_cs": "6.7.0"
-        },
-        "mac_x86_64": {
-          "cloud_storage_hash": "1af7c221e530165af8a6ab8ff7ccb1f2dd54036d",
-          "download_path": "bin/node/node-mac64.zip",
-          "path_within_archive": "node-v6.7.0-darwin-x64/lib/node_modules/npm/bin/npm-cli.js",
-          "version_in_cs": "6.7.0"
-        },
-        "win_AMD64": {
-          "cloud_storage_hash": "23f21bfb2edf874a8b6bdb6c1acb408bc7edeced",
-          "download_path": "bin/node/node-win64.zip",
-          "path_within_archive": "node-v6.7.0-win-x64\\node_modules\\npm\\bin\\npm-cli.js",
-          "version_in_cs": "6.7.0"
-        }
-      }
-    }
-  }
-}
diff --git a/systrace/catapult/common/node_runner/node_runner/node_util.py b/systrace/catapult/common/node_runner/node_runner/node_util.py
deleted file mode 100644
index 05d0084..0000000
--- a/systrace/catapult/common/node_runner/node_runner/node_util.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import subprocess
-import sys
-
-import py_utils
-from py_utils import binary_manager
-from py_utils import dependency_util
-
-
-def _NodeBinariesConfigPath():
-  return os.path.realpath(os.path.join(
-      os.path.dirname(os.path.abspath(__file__)), 'node_binaries.json'))
-
-
-class _NodeManager(object):
-  def __init__(self):
-    self.bm = binary_manager.BinaryManager(
-        [_NodeBinariesConfigPath()])
-    self.os_name = dependency_util.GetOSNameForCurrentDesktopPlatform()
-    self.arch_name = dependency_util.GetArchForCurrentDesktopPlatform(
-        self.os_name)
-    self.node_path = self.bm.FetchPath('node', self.os_name, self.arch_name)
-    self.npm_path = self.bm.FetchPath('npm', self.os_name, self.arch_name)
-
-    self.node_initialized = False
-
-  def InitNode(self):
-    if self.node_initialized:
-      return  # So we only init once per run
-    self.node_initialized = True
-    old_dir = os.path.abspath(os.curdir)
-    os.chdir(os.path.join(os.path.abspath(
-        py_utils.GetCatapultDir()), 'common', 'node_runner', 'node_runner'))
-    subprocess.call([self.node_path, self.npm_path, 'install'])
-    os.chdir(old_dir)
-
-
-_NODE_MANAGER = _NodeManager()
-
-
-def InitNode():
-  _NODE_MANAGER.InitNode()
-
-
-def GetNodePath():
-  return _NODE_MANAGER.node_path
-
-
-def GetNodeModulesPath():
-  _NODE_MANAGER.InitNode()
-  path = os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                      'node_modules'))
-  if sys.platform.startswith('win'):
-    # Escape path on Windows because it's very long and must be passed to NTFS.
-    path = u'\\\\?\\' + path
-  return path
diff --git a/systrace/catapult/common/node_runner/node_runner/package.json b/systrace/catapult/common/node_runner/node_runner/package.json
deleted file mode 100644
index 27d0325..0000000
--- a/systrace/catapult/common/node_runner/node_runner/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "name": "catapult_base",
-  "version": "1.0.0",
-  "description": "Catapult project base",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/catapult-project/catapult/tree/master/catapult_base"
-  },
-  "main": "index.js",
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
-  },
-  "author": "The Chromium Authors",
-  "license": "BSD-2-Clause",
-  "gypfile": false,
-  "private": true,
-  "dependencies": {
-    "eslint": "^3.14.1",
-    "eslint-config-google": "^0.6.0",
-    "eslint-plugin-html": "^2.0.0"
-  }
-}
diff --git a/systrace/catapult/common/py_trace_event/README.txt b/systrace/catapult/common/py_trace_event/README.txt
deleted file mode 100644
index 2f0d33d..0000000
--- a/systrace/catapult/common/py_trace_event/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-py_trace_event allows low-overhead instrumentation of a multi-threaded,
-multi-process application in order to study its global performance
-characteristics. It uses the trace event format used in Chromium/Chrome's
-about:tracing system.
-
-Trace files generated by py_trace_event can be viewed and manipulated by
-trace_event_viewer.
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/__init__.py b/systrace/catapult/common/py_trace_event/py_trace_event/__init__.py
deleted file mode 100644
index b8b6630..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-import sys
-
-SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__))
-PY_UTILS = os.path.abspath(os.path.join(SCRIPT_DIR, '..', '..', 'py_utils'))
-sys.path.append(PY_UTILS)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/run_tests b/systrace/catapult/common/py_trace_event/py_trace_event/run_tests
deleted file mode 100755
index 7f9673d..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/run_tests
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import logging
-import optparse
-import os
-import platform
-import re
-import sys
-import types
-import traceback
-import unittest
-
-
-def discover(dir, filters):
-  if hasattr(unittest.TestLoader, 'discover'):
-    return unittest.TestLoader().discover(dir, '*')
-
-  # poor mans unittest.discover
-  loader = unittest.TestLoader()
-  subsuites = []
-
-  for (dirpath, dirnames, filenames) in os.walk(dir):
-    for filename in [x for x in filenames if re.match('.*_test\.py$', x)]:
-      if filename.startswith('.') or filename.startswith('_'):
-        continue
-      fqn = dirpath.replace(
-          '/', '.') + '.' + re.match('(.+)\.py$', filename).group(1)
-
-      # load the test
-      try:
-        module = __import__(fqn,fromlist=[True])
-      except:
-        print "While importing [%s]\n" % fqn
-        traceback.print_exc()
-        continue
-
-      def test_is_selected(name):
-        for f in filters:
-          if re.search(f,name):
-            return True
-        return False
-
-      if hasattr(module, 'suite'):
-        base_suite = module.suite()
-      else:
-        base_suite = loader.loadTestsFromModule(module)
-      new_suite = unittest.TestSuite()
-      for t in base_suite:
-        if isinstance(t, unittest.TestSuite):
-          for i in t:
-            if test_is_selected(i.id()):
-              new_suite.addTest(i)
-        elif isinstance(t, unittest.TestCase):
-          if test_is_selected(t.id()):
-            new_suite.addTest(t)
-        else:
-          raise Exception("Wtf, expected TestSuite or TestCase, got %s" % t)
-
-      if new_suite.countTestCases():
-        subsuites.append(new_suite)
-
-  return unittest.TestSuite(subsuites)
-
-
-def main():
-  parser = optparse.OptionParser()
-  parser.add_option(
-      '-v', '--verbose', action='count', default=0,
-      help='Increase verbosity level (repeat as needed)')
-  parser.add_option('--debug', dest='debug', action='store_true', default=False,
-                    help='Break into pdb when an assertion fails')
-  parser.add_option('--incremental', dest='incremental', action='store_true',
-                    default=False, help='Run tests one at a time.')
-  parser.add_option('--stop', dest='stop_on_error', action='store_true',
-                    default=False, help='Stop running tests on error.')
-  (options, args) = parser.parse_args()
-
-  if options.verbose >= 2:
-    logging.basicConfig(level=logging.DEBUG)
-  elif options.verbose:
-    logging.basicConfig(level=logging.INFO)
-  else:
-    logging.basicConfig(level=logging.WARNING)
-
-  # install hook on set_trace if --debug
-  if options.debug:
-    import exceptions
-    class DebuggingAssertionError(exceptions.AssertionError):
-      def __init__(self, *args):
-        exceptions.AssertionError.__init__(self, *args)
-        print "Assertion failed, entering PDB..."
-        import pdb
-        if hasattr(sys, '_getframe'):
-          pdb.Pdb().set_trace(sys._getframe().f_back.f_back)
-        else:
-          pdb.set_trace()
-    unittest.TestCase.failureException = DebuggingAssertionError
-
-    def hook(*args):
-      import traceback, pdb
-      traceback.print_exception(*args)
-      pdb.pm()
-    sys.excepthook = hook
-
-    import browser
-    browser.debug_mode = True
-
-  else:
-    def hook(exc, value, tb):
-      import traceback
-      if not str(value).startswith("_noprint"):
-        traceback.print_exception(exc, value, tb)
-      import src.message_loop
-      if src.message_loop.is_main_loop_running():
-        if not str(value).startswith("_noprint"):
-          print "Untrapped exception! Exiting message loop with exception."
-        src.message_loop.quit_main_loop(quit_with_exception=True)
-
-    sys.excepthook = hook
-
-  # make sure cwd is the base directory!
-  os.chdir(os.path.dirname(__file__))
-
-  if len(args) > 0:
-    suites = discover('trace_event_impl', args)
-  else:
-    suites = discover('trace_event_impl', ['.*'])
-
-  r = unittest.TextTestRunner()
-  if not options.incremental:
-    res = r.run(suites)
-    if res.wasSuccessful():
-      return 0
-    return 255
-  else:
-    ok = True
-    for s in suites:
-      if isinstance(s, unittest.TestSuite):
-        for t in s:
-          print '--------------------------------------------------------------'
-          print 'Running %s' % str(t)
-          res = r.run(t)
-          if not res.wasSuccessful():
-            ok = False
-            if options.stop_on_error:
-              break
-        if ok == False and options.stop_on_error:
-          break
-      else:
-        res = r.run(s)
-        if not res.wasSuccessful():
-          ok = False
-          if options.stop_on_error:
-            break
-    if ok:
-      return 0
-    return 255
-
-
-if __name__ == "__main__":
-  sys.exit(main())
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/setup.py b/systrace/catapult/common/py_trace_event/py_trace_event/setup.py
deleted file mode 100644
index 0b0070a..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/setup.py
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2011 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-from distutils.core import setup
-setup(
-    name='py_trace_event',
-    packages=['trace_event_impl'],
-    version='0.1.0',
-    description='Performance tracing for python',
-    author='Nat Duca'
-)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py
deleted file mode 100644
index 7745963..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event.py
+++ /dev/null
@@ -1,282 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-from py_trace_event import trace_time
-
-
-r"""Instrumentation-based profiling for Python.
-
-trace_event allows you to hand-instrument your code with areas of interest.
-When enabled, trace_event logs the start and stop times of these events to a
-logfile. These resulting logfiles can be viewed with either Chrome's
-about:tracing UI or with the standalone trace_event_viewer available at
-  http://www.github.com/natduca/trace_event_viewer/
-
-To use trace event, call trace_event_enable and start instrumenting your code:
-   from trace_event import *
-
-   if "--trace" in sys.argv:
-     trace_enable("myfile.trace")
-
-   @traced
-   def foo():
-     ...
-
-   class MyFoo(object):
-     @traced
-     def bar(self):
-       ...
-
-trace_event records trace events to an in-memory buffer. If your application is
-long running and you want to see the results of a trace before it exits, you can
-call trace_flush to write any in-memory events to disk.
-
-To help intregrating trace_event into existing codebases that dont want to add
-trace_event as a dependancy, trace_event is split into an import shim
-(trace_event.py) and an implementaiton (trace_event_impl/*). You can copy the
-shim, trace_event.py, directly into your including codebase. If the
-trace_event_impl is not found, the shim will simply noop.
-
-trace_event is safe with regard to Python threads. Simply trace as you normally
-would and each thread's timing will show up in the trace file.
-
-Multiple processes can safely output into a single trace_event logfile. If you
-fork after enabling tracing, the child process will continue outputting to the
-logfile. Use of the multiprocessing module will work as well. In both cases,
-however, note that disabling tracing in the parent process will not stop tracing
-in the child processes.
-"""
-
-try:
-  import trace_event_impl
-except ImportError:
-  trace_event_impl = None
-
-
-def trace_can_enable():
-  """
-  Returns True if a trace_event_impl was found. If false,
-  trace_enable will fail. Regular tracing methods, including
-  trace_begin and trace_end, will simply be no-ops.
-  """
-  return trace_event_impl != None
-
-# Default TracedMetaClass to type incase trace_event_impl is not defined.
-# This is to avoid exception during import time since TracedMetaClass typically
-# used in class definition scope.
-TracedMetaClass = type
-
-if trace_event_impl:
-  import time
-
-
-  def trace_is_enabled():
-    return trace_event_impl.trace_is_enabled()
-
-  def trace_enable(logfile):
-    return trace_event_impl.trace_enable(logfile)
-
-  def trace_disable():
-    return trace_event_impl.trace_disable()
-
-  def trace_flush():
-    trace_event_impl.trace_flush()
-
-  def trace_begin(name, **kwargs):
-    args_to_log = {key: repr(value) for key, value in kwargs.iteritems()}
-    trace_event_impl.add_trace_event("B", trace_time.Now(), "python", name,
-                                     args_to_log)
-
-  def trace_end(name):
-    trace_event_impl.add_trace_event("E", trace_time.Now(), "python", name)
-
-  def trace_set_thread_name(thread_name):
-    trace_event_impl.add_trace_event("M", trace_time.Now(), "__metadata",
-                                     "thread_name", {"name": thread_name})
-
-  def trace(name, **kwargs):
-    return trace_event_impl.trace(name, **kwargs)
-
-  TracedMetaClass = trace_event_impl.TracedMetaClass
-
-  def traced(fn):
-    return trace_event_impl.traced(fn)
-
-  def clock_sync(sync_id, issue_ts=None):
-    '''
-    Add a clock sync event to the trace log.
-
-    Args:
-      sync_id: ID of clock sync event.
-      issue_ts: Time at which clock sync was issued, in microseconds.
-    '''
-    time_stamp = trace_time.Now()
-    args_to_log = {'sync_id': sync_id}
-    if issue_ts: # Issuer if issue_ts is set, else reciever.
-      assert issue_ts <= time_stamp
-      args_to_log['issue_ts'] = issue_ts
-    trace_event_impl.add_trace_event(
-        "c", time_stamp, "python", "clock_sync", args_to_log)
-
-  def is_tracing_controllable():
-    return trace_event_impl.is_tracing_controllable()
-
-else:
-  import contextlib
-
-  def trace_enable():
-    raise TraceException(
-        "Cannot enable trace_event. No trace_event_impl module found.")
-
-  def trace_disable():
-    pass
-
-  def trace_is_enabled():
-    return False
-
-  def trace_flush():
-    pass
-
-  def trace_begin(name, **kwargs):
-    del name # unused.
-    del kwargs # unused.
-    pass
-
-  def trace_end(name):
-    del name # unused.
-    pass
-
-  def trace_set_thread_name(thread_name):
-    del thread_name # unused.
-    pass
-
-  @contextlib.contextmanager
-  def trace(name, **kwargs):
-    del name # unused
-    del kwargs # unused
-    yield
-
-  def traced(fn):
-    return fn
-
-  def clock_sync(sync_id, issue_ts=None):
-    del sync_id # unused.
-    pass
-
-  def is_tracing_controllable():
-    return False
-
-trace_enable.__doc__ = """Enables tracing.
-
-  Once enabled, the enabled bit propagates to forked processes and
-  multiprocessing subprocesses. Regular child processes, e.g. those created via
-  os.system/popen, or subprocess.Popen instances, will not get traced. You can,
-  however, enable tracing on those subprocess manually.
-
-  Trace files are multiprocess safe, so you can have multiple processes
-  outputting to the same tracelog at once.
-
-  log_file can be one of three things:
-
-    None: a logfile is opened based on sys[argv], namely
-          "./" + sys.argv[0] + ".json"
-
-    string: a logfile of the given name is opened.
-
-    file-like object: the fileno() is is used. The underlying file descriptor
-                      must support fcntl.lockf() operations.
-  """
-
-trace_disable.__doc__ = """Disables tracing, if enabled.
-
-  Will not disable tracing on any existing child proceses that were forked
-  from this process. You must disable them yourself.
-  """
-
-trace_flush.__doc__ = """Flushes any currently-recorded trace data to disk.
-
-  trace_event records traces into an in-memory buffer for efficiency. Flushing
-  is only done at process exit or when this method is called.
-  """
-
-trace_is_enabled.__doc__ = """Returns whether tracing is enabled.
-  """
-
-trace_begin.__doc__ = """Records the beginning of an event of the given name.
-
-  The building block for performance tracing. A typical example is:
-     from trace_event import *
-     def something_heavy():
-        trace_begin("something_heavy")
-
-        trace_begin("read")
-        try:
-          lines = open().readlines()
-        finally:
-          trace_end("read")
-
-        trace_begin("parse")
-        try:
-          parse(lines)
-        finally:
-          trace_end("parse")
-
-        trace_end("something_heavy")
-
-  Note that a trace_end call must be issued for every trace_begin call. When
-  tracing around blocks that might throw exceptions, you should use the trace
-  function, or a try-finally pattern to ensure that the trace_end method is
-  called.
-
-  See the documentation for the @traced decorator for a simpler way to
-  instrument functions and methods.
-  """
-
-trace_end.__doc__ = """Records the end of an event of the given name.
-
-  See the documentation for trace_begin for more information.
-
-  Make sure to issue a trace_end for every trace_begin issued. Failure to pair
-  these calls will lead to bizarrely tall looking traces in the
-  trace_event_viewer UI.
-  """
-
-trace_set_thread_name.__doc__ = """Sets the trace's name for the current thread.
-  """
-
-trace.__doc__ = """Traces a block of code using a with statement.
-
-  Example usage:
-    from trace_event import *
-    def something_heavy(lines):
-      with trace("parse_lines", lines=lines):
-        parse(lines)
-
-  If tracing an entire function call, prefer the @traced decorator.
-  """
-
-traced.__doc__ = """
-  Traces the provided function, using the function name for the actual generated
-  event.
-
-  Prefer this decorator over the explicit trace_begin and trace_end functions
-  whenever you are tracing the start and stop of a function. It automatically
-  issues trace_begin/end events, even when the wrapped function throws.
-
-  You can also pass the function's argument names to traced, and the argument
-  values will be added to the trace. Example usage:
-    from trace_event import *
-    @traced("url")
-    def send_request(url):
-      urllib2.urlopen(url).read()
-  """
-
-clock_sync.__doc__ = """
-  Issues a clock sync marker event.
-
-  Clock sync markers are used to synchronize the clock domains of different
-  traces so that they can be used together. It takes a sync_id, and if it is
-  the issuer of a clock sync event it will also require an issue_ts. The
-  issue_ts is a timestamp from when the clocksync was first issued. This is used
-  to calculate the time difference between clock domains.
-  """
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/__init__.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/__init__.py
deleted file mode 100644
index d250e03..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-from log import *
-from decorators import *
-from meta_class import *
-import multiprocessing_shim
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators.py
deleted file mode 100644
index dc753f1..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators.py
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import contextlib
-import inspect
-import time
-import functools
-
-import log
-from py_trace_event import trace_time
-
-
-@contextlib.contextmanager
-def trace(name, **kwargs):
-  category = "python"
-  start = trace_time.Now()
-  args_to_log = {key: repr(value) for key, value in kwargs.iteritems()}
-  log.add_trace_event("B", start, category, name, args_to_log)
-  try:
-    yield
-  finally:
-    end = trace_time.Now()
-    log.add_trace_event("E", end, category, name)
-
-def traced(*args):
-  def get_wrapper(func):
-    if inspect.isgeneratorfunction(func):
-      raise Exception("Can not trace generators.")
-
-    category = "python"
-
-    arg_spec = inspect.getargspec(func)
-    is_method = arg_spec.args and arg_spec.args[0] == "self"
-
-    def arg_spec_tuple(name):
-      arg_index = arg_spec.args.index(name)
-      defaults_length = len(arg_spec.defaults) if arg_spec.defaults else 0
-      default_index = arg_index + defaults_length - len(arg_spec.args)
-      if default_index >= 0:
-        default = arg_spec.defaults[default_index]
-      else:
-        default = None
-      return (name, arg_index, default)
-
-    args_to_log = map(arg_spec_tuple, arg_names)
-
-    @functools.wraps(func)
-    def traced_function(*args, **kwargs):
-      # Everything outside traced_function is done at decoration-time.
-      # Everything inside traced_function is done at run-time and must be fast.
-      if not log._enabled:  # This check must be at run-time.
-        return func(*args, **kwargs)
-
-      def get_arg_value(name, index, default):
-        if name in kwargs:
-          return kwargs[name]
-        elif index < len(args):
-          return args[index]
-        else:
-          return default
-
-      if is_method:
-        name = "%s.%s" % (args[0].__class__.__name__, func.__name__)
-      else:
-        name = "%s.%s" % (func.__module__, func.__name__)
-
-      # Be sure to repr before calling func. Argument values may change.
-      arg_values = {
-          name: repr(get_arg_value(name, index, default))
-          for name, index, default in args_to_log}
-
-      start = trace_time.Now()
-      log.add_trace_event("B", start, category, name, arg_values)
-      try:
-        return func(*args, **kwargs)
-      finally:
-        end = trace_time.Now()
-        log.add_trace_event("E", end, category, name)
-    return traced_function
-
-  no_decorator_arguments = len(args) == 1 and callable(args[0])
-  if no_decorator_arguments:
-    arg_names = ()
-    return get_wrapper(args[0])
-  else:
-    arg_names = args
-    return get_wrapper
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py
deleted file mode 100644
index 5bb13ad..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/decorators_test.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import decorators
-import logging
-import unittest
-
-from trace_test import TraceTest
-#from .trace_test import TraceTest
-
-def generator():
-  yield 1
-  yield 2
-
-class DecoratorTests(unittest.TestCase):
-  def test_tracing_object_fails(self):
-    self.assertRaises(Exception, lambda: decorators.trace(1))
-    self.assertRaises(Exception, lambda: decorators.trace(""))
-    self.assertRaises(Exception, lambda: decorators.trace([]))
-
-  def test_tracing_generators_fail(self):
-    self.assertRaises(Exception, lambda: decorators.trace(generator))
-
-class ClassToTest(object):
-  @decorators.traced
-  def method1(self):
-    return 1
-
-  @decorators.traced
-  def method2(self):
-    return 1
-
-@decorators.traced
-def traced_func():
-  return 1
-
-class DecoratorTests(TraceTest):
-  def _get_decorated_method_name(self, f):
-    res = self.go(f)
-    events = res.findEventsOnThread(res.findThreadIds()[0])
-
-    # Sanity checks.
-    self.assertEquals(2, len(events))
-    self.assertEquals(events[0]["name"], events[1]["name"])
-    return events[1]["name"]
-
-
-  def test_func_names_work(self):
-    self.assertEquals('__main__.traced_func',
-                      self._get_decorated_method_name(traced_func))
-
-  def test_method_names_work(self):
-    ctt = ClassToTest()
-    self.assertEquals('ClassToTest.method1',
-                      self._get_decorated_method_name(ctt.method1))
-    self.assertEquals('ClassToTest.method2',
-                      self._get_decorated_method_name(ctt.method2))
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py
deleted file mode 100644
index 2d69f08..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py
+++ /dev/null
@@ -1,183 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import atexit
-import json
-import os
-import sys
-import time
-import threading
-
-from py_trace_event import trace_time
-
-from py_utils import lock
-
-
-_lock = threading.Lock()
-
-_enabled = False
-_log_file = None
-
-_cur_events = [] # events that have yet to be buffered
-
-_tls = threading.local() # tls used to detect forking/etc
-_atexit_regsitered_for_pid = None
-
-_control_allowed = True
-
-
-class TraceException(Exception):
-  pass
-
-def _note(msg, *args):
-  pass
-#  print "%i: %s" % (os.getpid(), msg)
-
-
-def _locked(fn):
-  def locked_fn(*args,**kwargs):
-    _lock.acquire()
-    try:
-      ret = fn(*args,**kwargs)
-    finally:
-      _lock.release()
-    return ret
-  return locked_fn
-
-def _disallow_tracing_control():
-  global _control_allowed
-  _control_allowed = False
-
-def trace_enable(log_file=None):
-  _trace_enable(log_file)
-
-@_locked
-def _trace_enable(log_file=None):
-  global _enabled
-  if _enabled:
-    raise TraceException("Already enabled")
-  if not _control_allowed:
-    raise TraceException("Tracing control not allowed in child processes.")
-  _enabled = True
-  global _log_file
-  if log_file == None:
-    if sys.argv[0] == '':
-      n = 'trace_event'
-    else:
-      n = sys.argv[0]
-    log_file = open("%s.json" % n, "ab", False)
-    _note("trace_event: tracelog name is %s.json" % n)
-  elif isinstance(log_file, basestring):
-    _note("trace_event: tracelog name is %s" % log_file)
-    log_file = open("%s" % log_file, "ab", False)
-  elif not hasattr(log_file, 'fileno'):
-    raise TraceException(
-        "Log file must be None, a string, or file-like object with a fileno()")
-
-  _log_file = log_file
-  with lock.FileLock(_log_file, lock.LOCK_EX):
-    _log_file.seek(0, os.SEEK_END)
-
-    lastpos = _log_file.tell()
-    creator = lastpos == 0
-    if creator:
-      _note("trace_event: Opened new tracelog, lastpos=%i", lastpos)
-      _log_file.write('[')
-
-      tid = threading.current_thread().ident
-      if not tid:
-        tid = os.getpid()
-      x = {"ph": "M", "category": "process_argv",
-           "pid": os.getpid(), "tid": threading.current_thread().ident,
-           "ts": trace_time.Now(),
-           "name": "process_argv", "args": {"argv": sys.argv}}
-      _log_file.write("%s\n" % json.dumps(x))
-    else:
-      _note("trace_event: Opened existing tracelog")
-    _log_file.flush()
-
-@_locked
-def trace_flush():
-  if _enabled:
-    _flush()
-
-@_locked
-def trace_disable():
-  global _enabled
-  if not _control_allowed:
-    raise TraceException("Tracing control not allowed in child processes.")
-  if not _enabled:
-    return
-  _enabled = False
-  _flush(close=True)
-
-def _flush(close=False):
-  global _log_file
-  with lock.FileLock(_log_file, lock.LOCK_EX):
-    _log_file.seek(0, os.SEEK_END)
-    if len(_cur_events):
-      _log_file.write(",\n")
-      _log_file.write(",\n".join([json.dumps(e) for e in _cur_events]))
-      del _cur_events[:]
-
-    if close:
-      # We might not be the only process writing to this logfile. So,
-      # we will simply close the file rather than writign the trailing ] that
-      # it technically requires. The trace viewer understands that this may
-      # happen and will insert a trailing ] during loading.
-      pass
-    _log_file.flush()
-
-  if close:
-    _note("trace_event: Closed")
-    _log_file.close()
-    _log_file = None
-  else:
-    _note("trace_event: Flushed")
-
-@_locked
-def trace_is_enabled():
-  return _enabled
-
-@_locked
-def add_trace_event(ph, ts, category, name, args=None):
-  global _enabled
-  if not _enabled:
-    return
-  if not hasattr(_tls, 'pid') or _tls.pid != os.getpid():
-    _tls.pid = os.getpid()
-    global _atexit_regsitered_for_pid
-    if _tls.pid != _atexit_regsitered_for_pid:
-      _atexit_regsitered_for_pid = _tls.pid
-      atexit.register(_trace_disable_atexit)
-      _tls.pid = os.getpid()
-      del _cur_events[:] # we forked, clear the event buffer!
-    tid = threading.current_thread().ident
-    if not tid:
-      tid = os.getpid()
-    _tls.tid = tid
-
-  _cur_events.append({"ph": ph,
-                      "category": category,
-                      "pid": _tls.pid,
-                      "tid": _tls.tid,
-                      "ts": ts,
-                      "name": name,
-                      "args": args or {}});
-
-def trace_begin(name, args=None):
-  add_trace_event("B", trace_time.Now(), "python", name, args)
-
-def trace_end(name, args=None):
-  add_trace_event("E", trace_time.Now(), "python", name, args)
-
-def trace_set_thread_name(thread_name):
-  add_trace_event("M", trace_time.Now(), "__metadata", "thread_name",
-                  {"name": thread_name})
-
-def _trace_disable_atexit():
-  trace_disable()
-
-def is_tracing_controllable():
-  global _control_allowed
-  return _control_allowed
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py
deleted file mode 100644
index 99a0621..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log_io_test.py
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import logging
-import os
-import sys
-import tempfile
-import unittest
-
-from log import *
-from parsed_trace_events import *
-
-
-class LogIOTest(unittest.TestCase):
-  def test_enable_with_file(self):
-    file = tempfile.NamedTemporaryFile()
-    trace_enable(open(file.name, 'w+'))
-    trace_disable()
-    e = ParsedTraceEvents(trace_filename = file.name)
-    file.close()
-    self.assertTrue(len(e) > 0)
-
-  def test_enable_with_filename(self):
-    file = tempfile.NamedTemporaryFile()
-    trace_enable(file.name)
-    trace_disable()
-    e = ParsedTraceEvents(trace_filename = file.name)
-    file.close()
-    self.assertTrue(len(e) > 0)
-
-  def test_enable_with_implicit_filename(self):
-    expected_filename = "%s.json" % sys.argv[0]
-    def do_work():
-      file = tempfile.NamedTemporaryFile()
-      trace_enable()
-      trace_disable()
-      e = ParsedTraceEvents(trace_filename = expected_filename)
-      file.close()
-      self.assertTrue(len(e) > 0)
-    try:
-      do_work()
-    finally:
-      if os.path.exists(expected_filename):
-        os.unlink(expected_filename)
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
-
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py
deleted file mode 100644
index 4ede79b..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/meta_class.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import types
-
-from py_trace_event.trace_event_impl import decorators
-
-
-class TracedMetaClass(type):
-  def __new__(cls, name, bases, attrs):
-    for attr_name, attr_value in attrs.iteritems():
-      if isinstance(attr_value, types.FunctionType):
-        attrs[attr_name] = decorators.traced(attr_value)
-
-    return super(TracedMetaClass, cls).__new__(cls, name, bases, attrs)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py
deleted file mode 100644
index 9796bdf..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/multiprocessing_shim.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import multiprocessing
-import log
-import time
-
-
-_RealProcess = multiprocessing.Process
-__all__ = []
-
-
-class ProcessSubclass(_RealProcess):
-  def __init__(self, shim, *args, **kwards):
-    _RealProcess.__init__(self, *args, **kwards)
-    self._shim = shim
-
-  def run(self,*args,**kwargs):
-    log._disallow_tracing_control()
-    try:
-      r = _RealProcess.run(self, *args, **kwargs)
-    finally:
-      if log.trace_is_enabled():
-        log.trace_flush() # todo, reduce need for this...
-    return r
-
-class ProcessShim():
-  def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
-    self._proc = ProcessSubclass(self, group, target, name, args, kwargs)
-    # hint to testing code that the shimming worked
-    self._shimmed_by_trace_event = True
-
-  def run(self):
-    self._proc.run()
-
-  def start(self):
-    self._proc.start()
-
-  def terminate(self):
-    if log.trace_is_enabled():
-      # give the flush a chance to finish --> TODO: find some other way.
-      time.sleep(0.25)
-    self._proc.terminate()
-
-  def join(self, timeout=None):
-    self._proc.join( timeout)
-
-  def is_alive(self):
-    return self._proc.is_alive()
-
-  @property
-  def name(self):
-    return self._proc.name
-
-  @name.setter
-  def name(self, name):
-    self._proc.name = name
-
-  @property
-  def daemon(self):
-    return self._proc.daemon
-
-  @daemon.setter
-  def daemon(self, daemonic):
-    self._proc.daemon = daemonic
-
-  @property
-  def authkey(self):
-    return self._proc._authkey
-
-  @authkey.setter
-  def authkey(self, authkey):
-    self._proc.authkey = AuthenticationString(authkey)
-
-  @property
-  def exitcode(self):
-    return self._proc.exitcode
-
-  @property
-  def ident(self):
-    return self._proc.ident
-
-  @property
-  def pid(self):
-    return self._proc.pid
-
-  def __repr__(self):
-    return self._proc.__repr__()
-
-# Monkeypatch in our process replacement.
-if multiprocessing.Process != ProcessShim:
-  multiprocessing.Process = ProcessShim
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/parsed_trace_events.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/parsed_trace_events.py
deleted file mode 100644
index fdc7514..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/parsed_trace_events.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import math
-import json
-
-
-class ParsedTraceEvents(object):
-  def __init__(self, events = None, trace_filename = None):
-    """
-    Utility class for filtering and manipulating trace data.
-
-    events -- An iterable object containing trace events
-    trace_filename -- A file object that contains a complete trace.
-
-    """
-    if trace_filename and events:
-      raise Exception("Provide either a trace file or event list")
-    if not trace_filename and events == None:
-      raise Exception("Provide either a trace file or event list")
-
-    if trace_filename:
-      f = open(trace_filename, 'r')
-      t = f.read()
-      f.close()
-
-      # If the event data begins with a [, then we know it should end with a ].
-      # The reason we check for this is because some tracing implementations
-      # cannot guarantee that a ']' gets written to the trace file. So, we are
-      # forgiving and if this is obviously the case, we fix it up before
-      # throwing the string at JSON.parse.
-      if t[0] == '[':
-        n = len(t);
-        if t[n - 1] != ']' and t[n - 1] != '\n':
-          t = t + ']'
-        elif t[n - 2] != ']' and t[n - 1] == '\n':
-          t = t + ']'
-        elif t[n - 3] != ']' and t[n - 2] == '\r' and t[n - 1] == '\n':
-          t = t + ']'
-
-      try:
-        events = json.loads(t)
-      except ValueError:
-        raise Exception("Corrupt trace, did not parse. Value: %s" % t)
-
-      if 'traceEvents' in events:
-        events = events['traceEvents']
-
-    if not hasattr(events, '__iter__'):
-      raise Exception, 'events must be iteraable.'
-    self.events = events
-    self.pids = None
-    self.tids = None
-
-  def __len__(self):
-    return len(self.events)
-
-  def __getitem__(self, i):
-    return self.events[i]
-
-  def __setitem__(self, i, v):
-    self.events[i] = v
-
-  def __repr__(self):
-    return "[%s]" % ",\n ".join([repr(e) for e in self.events])
-
-  def findProcessIds(self):
-    if self.pids:
-      return self.pids
-    pids = set()
-    for e in self.events:
-      if "pid" in e and e["pid"]:
-        pids.add(e["pid"])
-    self.pids = list(pids)
-    return self.pids
-
-  def findThreadIds(self):
-    if self.tids:
-      return self.tids
-    tids = set()
-    for e in self.events:
-      if "tid" in e and e["tid"]:
-        tids.add(e["tid"])
-    self.tids = list(tids)
-    return self.tids
-
-  def findEventsOnProcess(self, pid):
-    return ParsedTraceEvents([e for e in self.events if e["pid"] == pid])
-
-  def findEventsOnThread(self, tid):
-    return ParsedTraceEvents(
-        [e for e in self.events if e["ph"] != "M" and e["tid"] == tid])
-
-  def findByPhase(self, ph):
-    return ParsedTraceEvents([e for e in self.events if e["ph"] == ph])
-
-  def findByName(self, n):
-    return ParsedTraceEvents([e for e in self.events if e["name"] == n])
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py
deleted file mode 100644
index 7047e0e..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_impl/trace_test.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import tempfile
-import unittest
-
-#from .log import *
-#from .parsed_trace_events import *
-
-from log import *
-from parsed_trace_events import *
-
-class TraceTest(unittest.TestCase):
-  def __init__(self, *args):
-    """
-    Infrastructure for running tests of the tracing system.
-
-    Does not actually run any tests. Look at subclasses for those.
-    """
-    unittest.TestCase.__init__(self, *args)
-    self._file = None
-
-  def go(self, cb):
-    """
-    Enables tracing, runs the provided callback, and if successful, returns a
-    TraceEvents object with the results.
-    """
-    self._file = tempfile.NamedTemporaryFile()
-    trace_enable(open(self._file.name, 'a+'))
-
-    try:
-      cb()
-    finally:
-      trace_disable()
-    e = ParsedTraceEvents(trace_filename = self._file.name)
-    self._file.close()
-    self._file = None
-    return e
-
-  @property
-  def trace_filename(self):
-    return self._file.name
-
-  def tearDown(self):
-    if trace_is_enabled():
-      trace_disable()
-    if self._file:
-      self._file.close()
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py
deleted file mode 100644
index f88ef95..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_event_unittest.py
+++ /dev/null
@@ -1,423 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import contextlib
-import json
-import logging
-import math
-import multiprocessing
-import os
-import tempfile
-import time
-import unittest
-
-from py_trace_event import trace_event
-from py_trace_event import trace_time
-from py_trace_event.trace_event_impl import log
-
-
-class TraceEventTests(unittest.TestCase):
-
-  def setUp(self):
-    tf = tempfile.NamedTemporaryFile(delete=False)
-    self._log_path = tf.name
-    tf.close()
-
-  def tearDown(self):
-    if os.path.exists(self._log_path):
-      os.remove(self._log_path)
-
-  @contextlib.contextmanager
-  def _test_trace(self, disable=True):
-    try:
-      trace_event.trace_enable(self._log_path)
-      yield
-    finally:
-      if disable:
-        trace_event.trace_disable()
-
-  def testNoImpl(self):
-    orig_impl = trace_event.trace_event_impl
-    try:
-      trace_event.trace_event_impl = None
-      self.assertFalse(trace_event.trace_can_enable())
-    finally:
-      trace_event.trace_event_impl = orig_impl
-
-  def testImpl(self):
-    self.assertTrue(trace_event.trace_can_enable())
-
-  def testIsEnabledFalse(self):
-    self.assertFalse(trace_event.trace_is_enabled())
-
-  def testIsEnabledTrue(self):
-    with self._test_trace():
-      self.assertTrue(trace_event.trace_is_enabled())
-
-  def testEnable(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 1)
-        self.assertTrue(trace_event.trace_is_enabled())
-        log_output = log_output.pop()
-        self.assertEquals(log_output['category'], 'process_argv')
-        self.assertEquals(log_output['name'], 'process_argv')
-        self.assertTrue(log_output['args']['argv'])
-        self.assertEquals(log_output['ph'], 'M')
-
-  def testDoubleEnable(self):
-    try:
-      with self._test_trace():
-        with self._test_trace():
-          pass
-    except log.TraceException:
-      return
-    assert False
-
-  def testDisable(self):
-    with self._test_trace(disable=False):
-      with open(self._log_path, 'r') as f:
-        self.assertTrue(trace_event.trace_is_enabled())
-        trace_event.trace_disable()
-        self.assertEquals(len(json.loads(f.read() + ']')), 1)
-        self.assertFalse(trace_event.trace_is_enabled())
-
-  def testDoubleDisable(self):
-    with self._test_trace():
-      pass
-    trace_event.trace_disable()
-
-  def testFlushChanges(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        trace_event.clock_sync('1')
-        self.assertEquals(len(json.loads(f.read() + ']')), 1)
-        f.seek(0)
-        trace_event.trace_flush()
-        self.assertEquals(len(json.loads(f.read() + ']')), 2)
-
-  def testFlushNoChanges(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        self.assertEquals(len(json.loads(f.read() + ']')),1)
-        f.seek(0)
-        trace_event.trace_flush()
-        self.assertEquals(len(json.loads(f.read() + ']')), 1)
-
-  def testDoubleFlush(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        trace_event.clock_sync('1')
-        self.assertEquals(len(json.loads(f.read() + ']')), 1)
-        f.seek(0)
-        trace_event.trace_flush()
-        trace_event.trace_flush()
-        self.assertEquals(len(json.loads(f.read() + ']')), 2)
-
-  def testTraceBegin(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        trace_event.trace_begin('test_event', this='that')
-        trace_event.trace_flush()
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 2)
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'process_argv')
-        self.assertEquals(current_entry['name'], 'process_argv')
-        self.assertTrue( current_entry['args']['argv'])
-        self.assertEquals( current_entry['ph'], 'M')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], 'test_event')
-        self.assertEquals(current_entry['args']['this'], '\'that\'')
-        self.assertEquals(current_entry['ph'], 'B')
-
-  def testTraceEnd(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        trace_event.trace_end('test_event')
-        trace_event.trace_flush()
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 2)
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'process_argv')
-        self.assertEquals(current_entry['name'], 'process_argv')
-        self.assertTrue(current_entry['args']['argv'])
-        self.assertEquals(current_entry['ph'], 'M')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], 'test_event')
-        self.assertEquals(current_entry['args'], {})
-        self.assertEquals(current_entry['ph'], 'E')
-
-  def testTrace(self):
-   with self._test_trace():
-      with trace_event.trace('test_event', this='that'):
-        pass
-      trace_event.trace_flush()
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 3)
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'process_argv')
-        self.assertEquals(current_entry['name'], 'process_argv')
-        self.assertTrue(current_entry['args']['argv'])
-        self.assertEquals(current_entry['ph'], 'M')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], 'test_event')
-        self.assertEquals(current_entry['args']['this'], '\'that\'')
-        self.assertEquals(current_entry['ph'], 'B')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], 'test_event')
-        self.assertEquals(current_entry['args'], {})
-        self.assertEquals(current_entry['ph'], 'E')
-
-  def testTracedDecorator(self):
-    @trace_event.traced("this")
-    def test_decorator(this="that"):
-      pass
-
-    with self._test_trace():
-      test_decorator()
-      trace_event.trace_flush()
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 3)
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'process_argv')
-        self.assertEquals(current_entry['name'], 'process_argv')
-        self.assertTrue(current_entry['args']['argv'])
-        self.assertEquals(current_entry['ph'], 'M')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], '__main__.test_decorator')
-        self.assertEquals(current_entry['args']['this'], '\'that\'')
-        self.assertEquals(current_entry['ph'], 'B')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], '__main__.test_decorator')
-        self.assertEquals(current_entry['args'], {})
-        self.assertEquals(current_entry['ph'], 'E')
-
-  def testClockSyncWithTs(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        trace_event.clock_sync('id', issue_ts=trace_time.Now())
-        trace_event.trace_flush()
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 2)
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'process_argv')
-        self.assertEquals(current_entry['name'], 'process_argv')
-        self.assertTrue(current_entry['args']['argv'])
-        self.assertEquals(current_entry['ph'], 'M')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], 'clock_sync')
-        self.assertTrue(current_entry['args']['issue_ts'])
-        self.assertEquals(current_entry['ph'], 'c')
-
-  def testClockSyncWithoutTs(self):
-    with self._test_trace():
-      with open(self._log_path, 'r') as f:
-        trace_event.clock_sync('id')
-        trace_event.trace_flush()
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 2)
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'process_argv')
-        self.assertEquals(current_entry['name'], 'process_argv')
-        self.assertTrue(current_entry['args']['argv'])
-        self.assertEquals(current_entry['ph'], 'M')
-        current_entry = log_output.pop(0)
-        self.assertEquals(current_entry['category'], 'python')
-        self.assertEquals(current_entry['name'], 'clock_sync')
-        self.assertFalse(current_entry['args'].get('issue_ts'))
-        self.assertEquals(current_entry['ph'], 'c')
-
-  def testTime(self):
-    actual_diff = []
-    def func1():
-      trace_begin("func1")
-      start = time.time()
-      time.sleep(0.25)
-      end = time.time()
-      actual_diff.append(end-start) # Pass via array because of Python scoping
-      trace_end("func1")
-
-    with self._test_trace():
-      start_ts = time.time()
-      trace_event.trace_begin('test')
-      end_ts = time.time()
-      trace_event.trace_end('test')
-      trace_event.trace_flush()
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 3)
-        meta_data = log_output[0]
-        open_data = log_output[1]
-        close_data = log_output[2]
-        self.assertEquals(meta_data['category'], 'process_argv')
-        self.assertEquals(meta_data['name'], 'process_argv')
-        self.assertTrue(meta_data['args']['argv'])
-        self.assertEquals(meta_data['ph'], 'M')
-        self.assertEquals(open_data['category'], 'python')
-        self.assertEquals(open_data['name'], 'test')
-        self.assertEquals(open_data['ph'], 'B')
-        self.assertEquals(close_data['category'], 'python')
-        self.assertEquals(close_data['name'], 'test')
-        self.assertEquals(close_data['ph'], 'E')
-        event_time_diff = close_data['ts'] - open_data['ts']
-        recorded_time_diff = (end_ts - start_ts) * 1000000
-        self.assertLess(math.fabs(event_time_diff - recorded_time_diff), 1000)
-
-  def testNestedCalls(self):
-    with self._test_trace():
-      trace_event.trace_begin('one')
-      trace_event.trace_begin('two')
-      trace_event.trace_end('two')
-      trace_event.trace_end('one')
-      trace_event.trace_flush()
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 5)
-        meta_data = log_output[0]
-        one_open = log_output[1]
-        two_open = log_output[2]
-        two_close = log_output[3]
-        one_close = log_output[4]
-        self.assertEquals(meta_data['category'], 'process_argv')
-        self.assertEquals(meta_data['name'], 'process_argv')
-        self.assertTrue(meta_data['args']['argv'])
-        self.assertEquals(meta_data['ph'], 'M')
-
-        self.assertEquals(one_open['category'], 'python')
-        self.assertEquals(one_open['name'], 'one')
-        self.assertEquals(one_open['ph'], 'B')
-        self.assertEquals(one_close['category'], 'python')
-        self.assertEquals(one_close['name'], 'one')
-        self.assertEquals(one_close['ph'], 'E')
-
-        self.assertEquals(two_open['category'], 'python')
-        self.assertEquals(two_open['name'], 'two')
-        self.assertEquals(two_open['ph'], 'B')
-        self.assertEquals(two_close['category'], 'python')
-        self.assertEquals(two_close['name'], 'two')
-        self.assertEquals(two_close['ph'], 'E')
-
-        self.assertLessEqual(one_open['ts'], two_open['ts'])
-        self.assertGreaterEqual(one_close['ts'], two_close['ts'])
-
-  def testInterleavedCalls(self):
-    with self._test_trace():
-      trace_event.trace_begin('one')
-      trace_event.trace_begin('two')
-      trace_event.trace_end('one')
-      trace_event.trace_end('two')
-      trace_event.trace_flush()
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 5)
-        meta_data = log_output[0]
-        one_open = log_output[1]
-        two_open = log_output[2]
-        two_close = log_output[4]
-        one_close = log_output[3]
-        self.assertEquals(meta_data['category'], 'process_argv')
-        self.assertEquals(meta_data['name'], 'process_argv')
-        self.assertTrue(meta_data['args']['argv'])
-        self.assertEquals(meta_data['ph'], 'M')
-
-        self.assertEquals(one_open['category'], 'python')
-        self.assertEquals(one_open['name'], 'one')
-        self.assertEquals(one_open['ph'], 'B')
-        self.assertEquals(one_close['category'], 'python')
-        self.assertEquals(one_close['name'], 'one')
-        self.assertEquals(one_close['ph'], 'E')
-
-        self.assertEquals(two_open['category'], 'python')
-        self.assertEquals(two_open['name'], 'two')
-        self.assertEquals(two_open['ph'], 'B')
-        self.assertEquals(two_close['category'], 'python')
-        self.assertEquals(two_close['name'], 'two')
-        self.assertEquals(two_close['ph'], 'E')
-
-        self.assertLessEqual(one_open['ts'], two_open['ts'])
-        self.assertLessEqual(one_close['ts'], two_close['ts'])
-
-  def testMultiprocess(self):
-    def child_function():
-      with trace_event.trace('child_event'):
-        pass
-
-    with self._test_trace():
-      trace_event.trace_begin('parent_event')
-      trace_event.trace_flush()
-      p = multiprocessing.Process(target=child_function)
-      p.start()
-      self.assertTrue(hasattr(p, "_shimmed_by_trace_event"))
-      p.join()
-      trace_event.trace_end('parent_event')
-      trace_event.trace_flush()
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 5)
-        meta_data = log_output[0]
-        parent_open = log_output[1]
-        child_open = log_output[2]
-        child_close = log_output[3]
-        parent_close = log_output[4]
-        self.assertEquals(meta_data['category'], 'process_argv')
-        self.assertEquals(meta_data['name'], 'process_argv')
-        self.assertTrue(meta_data['args']['argv'])
-        self.assertEquals(meta_data['ph'], 'M')
-
-        self.assertEquals(parent_open['category'], 'python')
-        self.assertEquals(parent_open['name'], 'parent_event')
-        self.assertEquals(parent_open['ph'], 'B')
-
-        self.assertEquals(child_open['category'], 'python')
-        self.assertEquals(child_open['name'], 'child_event')
-        self.assertEquals(child_open['ph'], 'B')
-
-        self.assertEquals(child_close['category'], 'python')
-        self.assertEquals(child_close['name'], 'child_event')
-        self.assertEquals(child_close['ph'], 'E')
-
-        self.assertEquals(parent_close['category'], 'python')
-        self.assertEquals(parent_close['name'], 'parent_event')
-        self.assertEquals(parent_close['ph'], 'E')
-
-  def testMultiprocessExceptionInChild(self):
-    def bad_child():
-      trace_event.trace_disable()
-
-    with self._test_trace():
-      p = multiprocessing.Pool(1)
-      trace_event.trace_begin('parent')
-      self.assertRaises(Exception, lambda: p.apply(bad_child, ()))
-      p.close()
-      p.terminate()
-      p.join()
-      trace_event.trace_end('parent')
-      trace_event.trace_flush()
-      with open(self._log_path, 'r') as f:
-        log_output = json.loads(f.read() + ']')
-        self.assertEquals(len(log_output), 3)
-        meta_data = log_output[0]
-        parent_open = log_output[1]
-        parent_close = log_output[2]
-        self.assertEquals(parent_open['category'], 'python')
-        self.assertEquals(parent_open['name'], 'parent')
-        self.assertEquals(parent_open['ph'], 'B')
-        self.assertEquals(parent_close['category'], 'python')
-        self.assertEquals(parent_close['name'], 'parent')
-        self.assertEquals(parent_close['ph'], 'E')
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_time.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_time.py
deleted file mode 100644
index c5e3fe1..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_time.py
+++ /dev/null
@@ -1,234 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import ctypes
-import ctypes.util
-import logging
-import os
-import platform
-import sys
-import time
-import threading
-
-
-GET_TICK_COUNT_LAST_NOW = 0
-# If GET_TICK_COUNTER_LAST_NOW is less than the current time, the clock has
-# rolled over, and this needs to be accounted for.
-GET_TICK_COUNT_WRAPAROUNDS = 0
-# The current detected platform
-_CLOCK = None
-_NOW_FUNCTION = None
-# Mapping of supported platforms and what is returned by sys.platform.
-_PLATFORMS = {
-    'mac': 'darwin',
-    'linux': 'linux',
-    'windows': 'win32',
-    'cygwin': 'cygwin',
-    'freebsd': 'freebsd',
-    'sunos': 'sunos5',
-    'bsd': 'bsd'
-}
-# Mapping of what to pass get_clocktime based on platform.
-_CLOCK_MONOTONIC = {
-    'linux': 1,
-    'freebsd': 4,
-    'bsd': 3,
-    'sunos5': 4
-}
-
-_LINUX_CLOCK = 'LINUX_CLOCK_MONOTONIC'
-_MAC_CLOCK = 'MAC_MACH_ABSOLUTE_TIME'
-_WIN_HIRES = 'WIN_QPC'
-_WIN_LORES = 'WIN_ROLLOVER_PROTECTED_TIME_GET_TIME'
-
-def InitializeMacNowFunction(plat):
-  """Sets a monotonic clock for the Mac platform.
-
-    Args:
-      plat: Platform that is being run on. Unused in GetMacNowFunction. Passed
-        for consistency between initilaizers.
-  """
-  del plat  # Unused
-  global _CLOCK  # pylint: disable=global-statement
-  global _NOW_FUNCTION  # pylint: disable=global-statement
-  _CLOCK = _MAC_CLOCK
-  libc = ctypes.CDLL('/usr/lib/libc.dylib', use_errno=True)
-  class MachTimebaseInfoData(ctypes.Structure):
-    """System timebase info. Defined in <mach/mach_time.h>."""
-    _fields_ = (('numer', ctypes.c_uint32),
-                ('denom', ctypes.c_uint32))
-
-  mach_absolute_time = libc.mach_absolute_time
-  mach_absolute_time.restype = ctypes.c_uint64
-
-  timebase = MachTimebaseInfoData()
-  libc.mach_timebase_info(ctypes.byref(timebase))
-  ticks_per_second = timebase.numer / timebase.denom * 1.0e9
-
-  def MacNowFunctionImpl():
-    return mach_absolute_time() / ticks_per_second
-  _NOW_FUNCTION = MacNowFunctionImpl
-
-
-def GetClockGetTimeClockNumber(plat):
-  for key in _CLOCK_MONOTONIC:
-    if plat.startswith(key):
-      return _CLOCK_MONOTONIC[key]
-  raise LookupError('Platform not in clock dicitonary')
-
-def InitializeLinuxNowFunction(plat):
-  """Sets a monotonic clock for linux platforms.
-
-    Args:
-      plat: Platform that is being run on.
-  """
-  global _CLOCK  # pylint: disable=global-statement
-  global _NOW_FUNCTION  # pylint: disable=global-statement
-  _CLOCK = _LINUX_CLOCK
-  clock_monotonic = GetClockGetTimeClockNumber(plat)
-  try:
-    # Attempt to find clock_gettime in the C library.
-    clock_gettime = ctypes.CDLL(ctypes.util.find_library('c'),
-                                use_errno=True).clock_gettime
-  except AttributeError:
-    # If not able to find int in the C library, look in rt library.
-    clock_gettime = ctypes.CDLL(ctypes.util.find_library('rt'),
-                                use_errno=True).clock_gettime
-
-  class Timespec(ctypes.Structure):
-    """Time specification, as described in clock_gettime(3)."""
-    _fields_ = (('tv_sec', ctypes.c_long),
-                ('tv_nsec', ctypes.c_long))
-
-  def LinuxNowFunctionImpl():
-    ts = Timespec()
-    if clock_gettime(clock_monotonic, ctypes.pointer(ts)):
-      errno = ctypes.get_errno()
-      raise OSError(errno, os.strerror(errno))
-    return ts.tv_sec + ts.tv_nsec / 1.0e9
-
-  _NOW_FUNCTION = LinuxNowFunctionImpl
-
-
-def IsQPCUsable():
-  """Determines if system can query the performance counter.
-    The performance counter is a high resolution timer on windows systems.
-    Some chipsets have unreliable performance counters, so this checks that one
-    of those chipsets is not present.
-
-    Returns:
-      True if QPC is useable, false otherwise.
-  """
-
-  # Sample output: 'Intel64 Family 6 Model 23 Stepping 6, GenuineIntel'
-  info = platform.processor()
-  if 'AuthenticAMD' in info and 'Family 15' in info:
-    return False
-  if not hasattr(ctypes, 'windll'):
-    return False
-  try:  # If anything goes wrong during this, assume QPC isn't available.
-    frequency = ctypes.c_int64()
-    ctypes.windll.Kernel32.QueryPerformanceFrequency(
-        ctypes.byref(frequency))
-    if float(frequency.value) <= 0:
-      return False
-  except Exception:  # pylint: disable=broad-except
-    logging.exception('Error when determining if QPC is usable.')
-    return False
-  return True
-
-
-def InitializeWinNowFunction(plat):
-  """Sets a monotonic clock for windows platforms.
-
-    Args:
-      plat: Platform that is being run on.
-  """
-  global _CLOCK  # pylint: disable=global-statement
-  global _NOW_FUNCTION  # pylint: disable=global-statement
-
-  if IsQPCUsable():
-    _CLOCK = _WIN_HIRES
-    qpc_return = ctypes.c_int64()
-    qpc_frequency = ctypes.c_int64()
-    ctypes.windll.Kernel32.QueryPerformanceFrequency(
-        ctypes.byref(qpc_frequency))
-    qpc_frequency = float(qpc_frequency.value)
-    qpc = ctypes.windll.Kernel32.QueryPerformanceCounter
-
-    def WinNowFunctionImpl():
-      qpc(ctypes.byref(qpc_return))
-      return qpc_return.value / qpc_frequency
-
-  else:
-    _CLOCK = _WIN_LORES
-    kernel32 = (ctypes.cdll.kernel32
-                if plat.startswith(_PLATFORMS['cygwin'])
-                else ctypes.windll.kernel32)
-    get_tick_count_64 = getattr(kernel32, 'GetTickCount64', None)
-
-    # Windows Vista or newer
-    if get_tick_count_64:
-      get_tick_count_64.restype = ctypes.c_ulonglong
-
-      def WinNowFunctionImpl():
-        return get_tick_count_64() / 1000.0
-
-    else:  # Pre Vista.
-      get_tick_count = kernel32.GetTickCount
-      get_tick_count.restype = ctypes.c_uint32
-      get_tick_count_lock = threading.Lock()
-
-      def WinNowFunctionImpl():
-        global GET_TICK_COUNT_LAST_NOW  # pylint: disable=global-statement
-        global GET_TICK_COUNT_WRAPAROUNDS  # pylint: disable=global-statement
-        with get_tick_count_lock:
-          current_sample = get_tick_count()
-          if current_sample < GET_TICK_COUNT_LAST_NOW:
-            GET_TICK_COUNT_WRAPAROUNDS += 1
-          GET_TICK_COUNT_LAST_NOW = current_sample
-          final_ms = GET_TICK_COUNT_WRAPAROUNDS << 32
-          final_ms += GET_TICK_COUNT_LAST_NOW
-          return final_ms / 1000.0
-
-  _NOW_FUNCTION = WinNowFunctionImpl
-
-
-def InitializeNowFunction(plat):
-  """Sets a monotonic clock for the current platform.
-
-    Args:
-      plat: Platform that is being run on.
-  """
-  if plat.startswith(_PLATFORMS['mac']):
-    InitializeMacNowFunction(plat)
-
-  elif (plat.startswith(_PLATFORMS['linux'])
-        or plat.startswith(_PLATFORMS['freebsd'])
-        or plat.startswith(_PLATFORMS['bsd'])
-        or plat.startswith(_PLATFORMS['sunos'])):
-    InitializeLinuxNowFunction(plat)
-
-  elif (plat.startswith(_PLATFORMS['windows'])
-        or plat.startswith(_PLATFORMS['cygwin'])):
-    InitializeWinNowFunction(plat)
-
-  else:
-    raise RuntimeError('%s is not a supported platform.' % plat)
-
-  global _NOW_FUNCTION
-  global _CLOCK
-  assert _NOW_FUNCTION, 'Now function not properly set during initialization.'
-  assert _CLOCK, 'Clock not properly set during initialization.'
-
-
-def Now():
-  return _NOW_FUNCTION() * 1e6  # convert from seconds to microseconds
-
-
-def GetClock():
-  return _CLOCK
-
-
-InitializeNowFunction(sys.platform)
diff --git a/systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py b/systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py
deleted file mode 100644
index ab54bd6..0000000
--- a/systrace/catapult/common/py_trace_event/py_trace_event/trace_time_unittest.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import logging
-import platform
-import sys
-import unittest
-
-from py_trace_event import trace_time
-
-
-class TimerTest(unittest.TestCase):
-  # Helper methods.
-  @contextlib.contextmanager
-  def ReplacePlatformProcessorCall(self, f):
-    try:
-      old_proc = platform.processor
-      platform.processor = f
-      yield
-    finally:
-      platform.processor = old_proc
-
-  @contextlib.contextmanager
-  def ReplaceQPCCheck(self, f):
-    try:
-      old_qpc = trace_time.IsQPCUsable
-      trace_time.IsQPCUsable = f
-      yield
-    finally:
-      trace_time.IsQPCUsable = old_qpc
-
-  # Platform detection tests.
-  def testInitializeNowFunction_platformNotSupported(self):
-    with self.assertRaises(RuntimeError):
-      trace_time.InitializeNowFunction('invalid_platform')
-
-  def testInitializeNowFunction_windows(self):
-    if not (sys.platform.startswith(trace_time._PLATFORMS['windows'])
-            or sys.platform.startswith(trace_time._PLATFORMS['cygwin'])):
-      return True
-    trace_time.InitializeNowFunction(sys.platform)
-    self.assertTrue(trace_time.GetClock() == trace_time._WIN_HIRES
-                    or trace_time.GetClock() == trace_time._WIN_LORES)
-
-  def testInitializeNowFunction_linux(self):
-    if not sys.platform.startswith(trace_time._PLATFORMS['linux']):
-      return True
-    trace_time.InitializeNowFunction(sys.platform)
-    self.assertEqual(trace_time.GetClock(), trace_time._LINUX_CLOCK)
-
-  def testInitializeNowFunction_mac(self):
-    if not sys.platform.startswith(trace_time._PLATFORMS['mac']):
-      return True
-    trace_time.InitializeNowFunction(sys.platform)
-    self.assertEqual(trace_time.GetClock(), trace_time._MAC_CLOCK)
-
-  # Windows Tests
-  def testIsQPCUsable_buggyAthlonProcReturnsFalse(self):
-    if not (sys.platform.startswith(trace_time._PLATFORMS['windows'])
-            or sys.platform.startswith(trace_time._PLATFORMS['cygwin'])):
-      return True
-
-    def BuggyAthlonProc():
-      return 'AMD64 Family 15 Model 23 Stepping 6, AuthenticAMD'
-
-    with self.ReplacePlatformProcessorCall(BuggyAthlonProc):
-      self.assertFalse(trace_time.IsQPCUsable())
-
-  def testIsQPCUsable_returnsTrueOnWindows(self):
-    if not (sys.platform.startswith(trace_time._PLATFORMS['windows'])
-            or sys.platform.startswith(trace_time._PLATFORMS['cygwin'])):
-      return True
-
-    def Proc():
-      return 'Intel64 Family 15 Model 23 Stepping 6, GenuineIntel'
-
-    with self.ReplacePlatformProcessorCall(Proc):
-      self.assertTrue(trace_time.IsQPCUsable())
-
-  def testGetWinNowFunction_QPC(self):
-    if not (sys.platform.startswith(trace_time._PLATFORMS['windows'])
-            or sys.platform.startswith(trace_time._PLATFORMS['cygwin'])):
-      return True
-    # Test requires QPC to be available on platform.
-    if not trace_time.IsQPCUsable():
-      return True
-    self.assertGreater(trace_time.monotonic(), 0)
-
-  # Works even if QPC would work.
-  def testGetWinNowFunction_GetTickCount(self):
-    if not (sys.platform.startswith(trace_time._PLATFORMS['windows'])
-            or sys.platform.startswith(trace_time._PLATFORMS['cygwin'])):
-      return True
-    with self.ReplaceQPCCheck(lambda: False):
-      self.assertGreater(trace_time.monotonic(), 0)
-
-  # Linux tests.
-  def testGetClockGetTimeClockNumber_linux(self):
-    self.assertEquals(trace_time.GetClockGetTimeClockNumber('linux'), 1)
-
-  def testGetClockGetTimeClockNumber_freebsd(self):
-    self.assertEquals(trace_time.GetClockGetTimeClockNumber('freebsd'), 4)
-
-  def testGetClockGetTimeClockNumber_bsd(self):
-    self.assertEquals(trace_time.GetClockGetTimeClockNumber('bsd'), 3)
-
-  def testGetClockGetTimeClockNumber_sunos(self):
-    self.assertEquals(trace_time.GetClockGetTimeClockNumber('sunos5'), 4)
-
-  # Smoke Test.
-  def testMonotonic(self):
-    time_one = trace_time.Now()
-    for _ in xrange(1000):
-      time_two = trace_time.Now()
-      self.assertLessEqual(time_one, time_two)
-      time_one = time_two
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/common/py_utils/PRESUBMIT.py b/systrace/catapult/common/py_utils/PRESUBMIT.py
deleted file mode 100644
index c1d92fe..0000000
--- a/systrace/catapult/common/py_utils/PRESUBMIT.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-def CheckChangeOnUpload(input_api, output_api):
-  return _CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
-  return _CommonChecks(input_api, output_api)
-
-
-def _CommonChecks(input_api, output_api):
-  results = []
-  results += input_api.RunTests(input_api.canned_checks.GetPylint(
-      input_api, output_api, extra_paths_list=_GetPathsToPrepend(input_api),
-      pylintrc='../../pylintrc'))
-  return results
-
-
-def _GetPathsToPrepend(input_api):
-  project_dir = input_api.PresubmitLocalPath()
-  catapult_dir = input_api.os_path.join(project_dir, '..', '..')
-  return [
-      project_dir,
-      input_api.os_path.join(catapult_dir, 'dependency_manager'),
-      input_api.os_path.join(catapult_dir, 'devil'),
-      input_api.os_path.join(catapult_dir, 'third_party', 'mock'),
-      input_api.os_path.join(catapult_dir, 'third_party', 'pyfakefs'),
-  ]
diff --git a/systrace/catapult/common/py_utils/py_utils/__init__.py b/systrace/catapult/common/py_utils/py_utils/__init__.py
deleted file mode 100644
index fba0897..0000000
--- a/systrace/catapult/common/py_utils/py_utils/__init__.py
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import functools
-import inspect
-import os
-import sys
-import time
-import platform
-
-
-def GetCatapultDir():
-  return os.path.normpath(
-      os.path.join(os.path.dirname(__file__), '..', '..', '..'))
-
-
-def IsRunningOnCrosDevice():
-  """Returns True if we're on a ChromeOS device."""
-  lsb_release = '/etc/lsb-release'
-  if sys.platform.startswith('linux') and os.path.exists(lsb_release):
-    with open(lsb_release, 'r') as f:
-      res = f.read()
-      if res.count('CHROMEOS_RELEASE_NAME'):
-        return True
-  return False
-
-
-def GetHostOsName():
-  if IsRunningOnCrosDevice():
-    return 'chromeos'
-  elif sys.platform.startswith('linux'):
-    return 'linux'
-  elif sys.platform == 'darwin':
-    return 'mac'
-  elif sys.platform == 'win32':
-    return 'win'
-
-
-def GetHostArchName():
-  return platform.machine()
-
-
-def _ExecutableExtensions():
-  # pathext is, e.g. '.com;.exe;.bat;.cmd'
-  exts = os.getenv('PATHEXT').split(';') #e.g. ['.com','.exe','.bat','.cmd']
-  return [x[1:].upper() for x in exts] #e.g. ['COM','EXE','BAT','CMD']
-
-
-def IsExecutable(path):
-  if os.path.isfile(path):
-    if hasattr(os, 'name') and os.name == 'nt':
-      return path.split('.')[-1].upper() in _ExecutableExtensions()
-    else:
-      return os.access(path, os.X_OK)
-  else:
-    return False
-
-
-def _AddDirToPythonPath(*path_parts):
-  path = os.path.abspath(os.path.join(*path_parts))
-  if os.path.isdir(path) and path not in sys.path:
-    # Some callsite that use telemetry assumes that sys.path[0] is the directory
-    # containing the script, so we add these extra paths to right after it.
-    sys.path.insert(1, path)
-
-_AddDirToPythonPath(os.path.join(GetCatapultDir(), 'devil'))
-_AddDirToPythonPath(os.path.join(GetCatapultDir(), 'dependency_manager'))
-_AddDirToPythonPath(os.path.join(GetCatapultDir(), 'third_party', 'mock'))
-# mox3 is needed for pyfakefs usage, but not for pylint.
-_AddDirToPythonPath(os.path.join(GetCatapultDir(), 'third_party', 'mox3'))
-_AddDirToPythonPath(
-    os.path.join(GetCatapultDir(), 'third_party', 'pyfakefs'))
-
-from devil.utils import timeout_retry
-from devil.utils import reraiser_thread
-
-
-# Decorator that adds timeout functionality to a function.
-def Timeout(default_timeout):
-  return lambda func: TimeoutDeco(func, default_timeout)
-
-# Note: Even though the "timeout" keyword argument is the only
-# keyword argument that will need to be given to the decorated function,
-# we still have to use the **kwargs syntax, because we have to use
-# the *args syntax here before (since the decorator decorates functions
-# with different numbers of positional arguments) and Python doesn't allow
-# a single named keyword argument after *args.
-# (e.g., 'def foo(*args, bar=42):' is a syntax error)
-
-def TimeoutDeco(func, default_timeout):
-  @functools.wraps(func)
-  def RunWithTimeout(*args, **kwargs):
-    if 'timeout' in kwargs:
-      timeout = kwargs['timeout']
-    else:
-      timeout = default_timeout
-    try:
-      return timeout_retry.Run(func, timeout, 0, args=args)
-    except reraiser_thread.TimeoutError:
-      print '%s timed out.' % func.__name__
-      return False
-  return RunWithTimeout
-
-
-MIN_POLL_INTERVAL_IN_SECONDS = 0.1
-MAX_POLL_INTERVAL_IN_SECONDS = 5
-OUTPUT_INTERVAL_IN_SECONDS = 300
-
-def WaitFor(condition, timeout):
-  """Waits for up to |timeout| secs for the function |condition| to return True.
-
-  Polling frequency is (elapsed_time / 10), with a min of .1s and max of 5s.
-
-  Returns:
-    Result of |condition| function (if present).
-  """
-  def GetConditionString():
-    if condition.__name__ == '<lambda>':
-      try:
-        return inspect.getsource(condition).strip()
-      except IOError:
-        pass
-    return condition.__name__
-
-  # Do an initial check to see if its true.
-  res = condition()
-  if res:
-    return res
-  start_time = time.time()
-  last_output_time = start_time
-  elapsed_time = time.time() - start_time
-  while elapsed_time < timeout:
-    res = condition()
-    if res:
-      return res
-    now = time.time()
-    elapsed_time = now - start_time
-    last_output_elapsed_time = now - last_output_time
-    if last_output_elapsed_time > OUTPUT_INTERVAL_IN_SECONDS:
-      last_output_time = time.time()
-    poll_interval = min(max(elapsed_time / 10., MIN_POLL_INTERVAL_IN_SECONDS),
-                        MAX_POLL_INTERVAL_IN_SECONDS)
-    time.sleep(poll_interval)
-  raise TimeoutException('Timed out while waiting %ds for %s.' %
-                         (timeout, GetConditionString()))
-
-class TimeoutException(Exception):
-  """The operation failed to complete because of a timeout.
-
-  It is possible that waiting for a longer period of time would result in a
-  successful operation.
-  """
-  pass
diff --git a/systrace/catapult/common/py_utils/py_utils/atexit_with_log.py b/systrace/catapult/common/py_utils/py_utils/atexit_with_log.py
deleted file mode 100644
index f217c09..0000000
--- a/systrace/catapult/common/py_utils/py_utils/atexit_with_log.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import atexit
-import logging
-
-
-def _WrapFunction(function):
-  def _WrappedFn(*args, **kwargs):
-    logging.debug('Try running %s', repr(function))
-    try:
-      function(*args, **kwargs)
-      logging.debug('Did run %s', repr(function))
-    except Exception:  # pylint: disable=broad-except
-      logging.exception('Exception running %s', repr(function))
-  return _WrappedFn
-
-
-def Register(function, *args, **kwargs):
-  atexit.register(_WrapFunction(function), *args, **kwargs)
diff --git a/systrace/catapult/common/py_utils/py_utils/binary_manager.py b/systrace/catapult/common/py_utils/py_utils/binary_manager.py
deleted file mode 100644
index 8af08cf..0000000
--- a/systrace/catapult/common/py_utils/py_utils/binary_manager.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-
-import dependency_manager
-
-
-class BinaryManager(object):
-  """ This class is effectively a subclass of dependency_manager, but uses a
-      different number of arguments for FetchPath and LocalPath.
-  """
-
-  def __init__(self, config_files):
-    if not config_files or type(config_files) != list:
-      raise ValueError(
-          'Must supply a list of config files to the BinaryManager')
-    configs = [dependency_manager.BaseConfig(config) for config in config_files]
-    self._dependency_manager = dependency_manager.DependencyManager(configs)
-
-  def FetchPathWithVersion(self, binary_name, os_name, arch, os_version=None):
-    """ Return a path to the executable for <binary_name>, or None if not found.
-
-    Will attempt to download from cloud storage if needed.
-    """
-    return self._WrapDependencyManagerFunction(
-        self._dependency_manager.FetchPathWithVersion, binary_name, os_name,
-        arch, os_version)
-
-  def FetchPath(self, binary_name, os_name, arch, os_version=None):
-    """ Return a path to the executable for <binary_name>, or None if not found.
-
-    Will attempt to download from cloud storage if needed.
-    """
-    return self._WrapDependencyManagerFunction(
-        self._dependency_manager.FetchPath, binary_name, os_name, arch,
-        os_version)
-
-  def LocalPath(self, binary_name, os_name, arch, os_version=None):
-    """ Return a local path to the given binary name, or None if not found.
-
-    Will not download from cloud_storage.
-    """
-    return self._WrapDependencyManagerFunction(
-        self._dependency_manager.LocalPath, binary_name, os_name, arch,
-        os_version)
-
-  def _WrapDependencyManagerFunction(
-      self, function, binary_name, os_name, arch, os_version):
-    platform = '%s_%s' % (os_name, arch)
-    if os_version:
-      try:
-        versioned_platform = '%s_%s_%s' % (os_name, os_version, arch)
-        return function(binary_name, versioned_platform)
-      except dependency_manager.NoPathFoundError:
-        logging.warning(
-            'Cannot find path for %s on platform %s. Falling back to %s.',
-            binary_name, versioned_platform, platform)
-    return function(binary_name, platform)
-
diff --git a/systrace/catapult/common/py_utils/py_utils/binary_manager_unittest.py b/systrace/catapult/common/py_utils/py_utils/binary_manager_unittest.py
deleted file mode 100644
index ccf21ad..0000000
--- a/systrace/catapult/common/py_utils/py_utils/binary_manager_unittest.py
+++ /dev/null
@@ -1,214 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import json
-import os
-
-from pyfakefs import fake_filesystem_unittest
-from dependency_manager import exceptions
-
-from py_utils import binary_manager
-
-class BinaryManagerTest(fake_filesystem_unittest.TestCase):
-  # TODO(aiolos): disable cloud storage use during this test.
-
-  def setUp(self):
-    self.setUpPyfakefs()
-    # pylint: disable=bad-continuation
-    self.expected_dependencies = {
-        'dep_1': {
-          'cloud_storage_base_folder': 'dependencies/fake_config',
-          'cloud_storage_bucket': 'chrome-tel',
-          'file_info': {
-            'linux_x86_64': {
-              'cloud_storage_hash': '661ce936b3276f7ec3d687ab62be05b96d796f21',
-              'download_path': 'bin/linux/x86_64/dep_1'
-            },
-            'mac_x86_64': {
-              'cloud_storage_hash': 'c7b1bfc6399dc683058e88dac1ef0f877edea74b',
-              'download_path': 'bin/mac/x86_64/dep_1'
-            },
-            'win_AMD64': {
-              'cloud_storage_hash': 'ac4fee89a51662b9d920bce443c19b9b2929b198',
-              'download_path': 'bin/win/AMD64/dep_1.exe'
-            },
-            'win_x86': {
-              'cloud_storage_hash': 'e246e183553ea26967d7b323ea269e3357b9c837',
-              'download_path': 'bin/win/x86/dep_1.exe'
-            }
-          }
-        },
-        'dep_2': {
-          'cloud_storage_base_folder': 'dependencies/fake_config',
-          'cloud_storage_bucket': 'chrome-tel',
-          'file_info': {
-            'linux_x86_64': {
-              'cloud_storage_hash': '13a57efae9a680ac0f160b3567e02e81f4ac493c',
-              'download_path': 'bin/linux/x86_64/dep_2',
-              'local_paths': [
-                  '../../example/location/linux/dep_2',
-                  '../../example/location2/linux/dep_2'
-              ]
-            },
-            'mac_x86_64': {
-              'cloud_storage_hash': 'd10c0ddaa8586b20449e951216bee852fa0f8850',
-              'download_path': 'bin/mac/x86_64/dep_2',
-              'local_paths': [
-                  '../../example/location/mac/dep_2',
-                  '../../example/location2/mac/dep_2'
-              ]
-            },
-            'win_AMD64': {
-              'cloud_storage_hash': 'fd5b417f78c7f7d9192a98967058709ded1d399d',
-              'download_path': 'bin/win/AMD64/dep_2.exe',
-              'local_paths': [
-                  '../../example/location/win64/dep_2',
-                  '../../example/location2/win64/dep_2'
-              ]
-            },
-            'win_x86': {
-              'cloud_storage_hash': 'cf5c8fe920378ce30d057e76591d57f63fd31c1a',
-              'download_path': 'bin/win/x86/dep_2.exe',
-              'local_paths': [
-                  '../../example/location/win32/dep_2',
-                  '../../example/location2/win32/dep_2'
-              ]
-            },
-            'android_k_x64': {
-              'cloud_storage_hash': '09177be2fed00b44df0e777932828425440b23b3',
-              'download_path': 'bin/android/x64/k/dep_2.apk',
-              'local_paths': [
-                  '../../example/location/android_x64/k/dep_2',
-                  '../../example/location2/android_x64/k/dep_2'
-              ]
-            },
-            'android_l_x64': {
-              'cloud_storage_hash': '09177be2fed00b44df0e777932828425440b23b3',
-              'download_path': 'bin/android/x64/l/dep_2.apk',
-              'local_paths': [
-                  '../../example/location/android_x64/l/dep_2',
-                  '../../example/location2/android_x64/l/dep_2'
-              ]
-            },
-            'android_k_x86': {
-              'cloud_storage_hash': 'bcf02af039713a48b69b89bd7f0f9c81ed8183a4',
-              'download_path': 'bin/android/x86/k/dep_2.apk',
-              'local_paths': [
-                  '../../example/location/android_x86/k/dep_2',
-                  '../../example/location2/android_x86/k/dep_2'
-              ]
-            },
-            'android_l_x86': {
-              'cloud_storage_hash': '12a74cec071017ba11655b5740b8a58e2f52a219',
-              'download_path': 'bin/android/x86/l/dep_2.apk',
-              'local_paths': [
-                  '../../example/location/android_x86/l/dep_2',
-                  '../../example/location2/android_x86/l/dep_2'
-              ]
-            }
-          }
-        },
-        'dep_3': {
-          'file_info': {
-            'linux_x86_64': {
-              'local_paths': [
-                  '../../example/location/linux/dep_3',
-                  '../../example/location2/linux/dep_3'
-              ]
-            },
-            'mac_x86_64': {
-              'local_paths': [
-                  '../../example/location/mac/dep_3',
-                  '../../example/location2/mac/dep_3'
-              ]
-            },
-            'win_AMD64': {
-              'local_paths': [
-                  '../../example/location/win64/dep_3',
-                  '../../example/location2/win64/dep_3'
-              ]
-            },
-            'win_x86': {
-              'local_paths': [
-                  '../../example/location/win32/dep_3',
-                  '../../example/location2/win32/dep_3'
-              ]
-            }
-          }
-        }
-    }
-    # pylint: enable=bad-continuation
-    fake_config = {
-        'config_type': 'BaseConfig',
-        'dependencies': self.expected_dependencies
-    }
-
-    self.base_config = os.path.join(os.path.dirname(__file__),
-                                    'example_config.json')
-    self.fs.CreateFile(self.base_config, contents=json.dumps(fake_config))
-    linux_file = os.path.join(
-        os.path.dirname(self.base_config),
-        os.path.join('..', '..', 'example', 'location2', 'linux', 'dep_2'))
-    android_file = os.path.join(
-        os.path.dirname(self.base_config),
-        '..', '..', 'example', 'location', 'android_x86', 'l', 'dep_2')
-    self.expected_dep2_linux_file = os.path.abspath(linux_file)
-    self.expected_dep2_android_file = os.path.abspath(android_file)
-    self.fs.CreateFile(self.expected_dep2_linux_file)
-    self.fs.CreateFile(self.expected_dep2_android_file)
-
-  def tearDown(self):
-    self.tearDownPyfakefs()
-
-  def testInitializationNoConfig(self):
-    with self.assertRaises(ValueError):
-      binary_manager.BinaryManager(None)
-
-  def testInitializationMissingConfig(self):
-    with self.assertRaises(ValueError):
-      binary_manager.BinaryManager(os.path.join('missing', 'path'))
-
-  def testInitializationWithConfig(self):
-    with self.assertRaises(ValueError):
-      manager = binary_manager.BinaryManager(self.base_config)
-    manager = binary_manager.BinaryManager([self.base_config])
-    self.assertItemsEqual(self.expected_dependencies,
-                          manager._dependency_manager._lookup_dict)
-
-  def testSuccessfulFetchPathNoOsVersion(self):
-    manager = binary_manager.BinaryManager([self.base_config])
-    found_path = manager.FetchPath('dep_2', 'linux', 'x86_64')
-    self.assertEqual(self.expected_dep2_linux_file, found_path)
-
-  def testSuccessfulFetchPathOsVersion(self):
-    manager = binary_manager.BinaryManager([self.base_config])
-    found_path = manager.FetchPath('dep_2', 'android', 'x86', 'l')
-    self.assertEqual(self.expected_dep2_android_file, found_path)
-
-  def testSuccessfulFetchPathFallbackToNoOsVersion(self):
-    manager = binary_manager.BinaryManager([self.base_config])
-    found_path = manager.FetchPath('dep_2', 'linux', 'x86_64', 'fake_version')
-    self.assertEqual(self.expected_dep2_linux_file, found_path)
-
-  def testFailedFetchPathMissingDep(self):
-    manager = binary_manager.BinaryManager([self.base_config])
-    with self.assertRaises(exceptions.NoPathFoundError):
-      manager.FetchPath('missing_dep', 'linux', 'x86_64')
-    with self.assertRaises(exceptions.NoPathFoundError):
-      manager.FetchPath('missing_dep', 'android', 'x86', 'l')
-    with self.assertRaises(exceptions.NoPathFoundError):
-      manager.FetchPath('dep_1', 'linux', 'bad_arch')
-    with self.assertRaises(exceptions.NoPathFoundError):
-      manager.FetchPath('dep_1', 'bad_os', 'x86')
-
-  def testSuccessfulLocalPathNoOsVersion(self):
-    manager = binary_manager.BinaryManager([self.base_config])
-    found_path = manager.LocalPath('dep_2', 'linux', 'x86_64')
-    self.assertEqual(self.expected_dep2_linux_file, found_path)
-
-  def testSuccessfulLocalPathOsVersion(self):
-    manager = binary_manager.BinaryManager([self.base_config])
-    found_path = manager.LocalPath('dep_2', 'android', 'x86', 'l')
-    self.assertEqual(self.expected_dep2_android_file, found_path)
-
diff --git a/systrace/catapult/common/py_utils/py_utils/camel_case.py b/systrace/catapult/common/py_utils/py_utils/camel_case.py
deleted file mode 100644
index 9a76890..0000000
--- a/systrace/catapult/common/py_utils/py_utils/camel_case.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import re
-
-
-def ToUnderscore(obj):
-  """Converts a string, list, or dict from camelCase to lower_with_underscores.
-
-  Descends recursively into lists and dicts, converting all dict keys.
-  Returns a newly allocated object of the same structure as the input.
-  """
-  if isinstance(obj, basestring):
-    return re.sub('(?!^)([A-Z]+)', r'_\1', obj).lower()
-
-  elif isinstance(obj, list):
-    return [ToUnderscore(item) for item in obj]
-
-  elif isinstance(obj, dict):
-    output = {}
-    for k, v in obj.iteritems():
-      if isinstance(v, list) or isinstance(v, dict):
-        output[ToUnderscore(k)] = ToUnderscore(v)
-      else:
-        output[ToUnderscore(k)] = v
-    return output
-
-  else:
-    return obj
diff --git a/systrace/catapult/common/py_utils/py_utils/camel_case_unittest.py b/systrace/catapult/common/py_utils/py_utils/camel_case_unittest.py
deleted file mode 100644
index c748ba2..0000000
--- a/systrace/catapult/common/py_utils/py_utils/camel_case_unittest.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from py_utils import camel_case
-
-
-class CamelCaseTest(unittest.TestCase):
-
-  def testString(self):
-    self.assertEqual(camel_case.ToUnderscore('camelCase'), 'camel_case')
-    self.assertEqual(camel_case.ToUnderscore('CamelCase'), 'camel_case')
-    self.assertEqual(camel_case.ToUnderscore('Camel2Case'), 'camel2_case')
-    self.assertEqual(camel_case.ToUnderscore('Camel2Case2'), 'camel2_case2')
-    self.assertEqual(camel_case.ToUnderscore('2012Q3'), '2012_q3')
-
-  def testList(self):
-    camel_case_list = ['CamelCase', ['NestedList']]
-    underscore_list = ['camel_case', ['nested_list']]
-    self.assertEqual(camel_case.ToUnderscore(camel_case_list), underscore_list)
-
-  def testDict(self):
-    camel_case_dict = {
-        'gpu': {
-            'vendorId': 1000,
-            'deviceId': 2000,
-            'vendorString': 'aString',
-            'deviceString': 'bString'},
-        'secondaryGpus': [
-            {'vendorId': 3000, 'deviceId': 4000,
-             'vendorString': 'k', 'deviceString': 'l'}
-        ]
-    }
-    underscore_dict = {
-        'gpu': {
-            'vendor_id': 1000,
-            'device_id': 2000,
-            'vendor_string': 'aString',
-            'device_string': 'bString'},
-        'secondary_gpus': [
-            {'vendor_id': 3000, 'device_id': 4000,
-             'vendor_string': 'k', 'device_string': 'l'}
-        ]
-    }
-    self.assertEqual(camel_case.ToUnderscore(camel_case_dict), underscore_dict)
-
-  def testOther(self):
-    self.assertEqual(camel_case.ToUnderscore(self), self)
diff --git a/systrace/catapult/common/py_utils/py_utils/chrome_binaries.json b/systrace/catapult/common/py_utils/py_utils/chrome_binaries.json
deleted file mode 100644
index ce357c7..0000000
--- a/systrace/catapult/common/py_utils/py_utils/chrome_binaries.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "config_type": "BaseConfig",
-  "dependencies": {
-    "chrome_canary": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chrome-telemetry",
-      "file_info": {
-        "mac_x86_64": {
-          "cloud_storage_hash": "b321a01b2c98fe62b1876655b10436c2226b1b76",
-          "download_path": "bin/reference_builds/chrome-mac64.zip",
-          "path_within_archive": "chrome-mac/Google Chrome.app/Contents/MacOS/Google Chrome",
-          "version_in_cs": "62.0.3194.0"
-        },
-        "win_AMD64": {
-          "cloud_storage_hash": "2da1c7861745ab0e8f666f119eeb58c1410710cc",
-          "download_path": "bin\\reference_build\\chrome-win64-pgo.zip",
-          "path_within_archive": "chrome-win64-pgo\\chrome.exe",
-          "version_in_cs": "62.0.3194.0"
-        },
-        "win_x86": {
-          "cloud_storage_hash": "270abd11621386be612af02b707844cba06c0dbd",
-          "download_path": "bin\\reference_build\\chrome-win32-pgo.zip",
-          "path_within_archive": "chrome-win32-pgo\\chrome.exe",
-          "version_in_cs": "62.0.3194.0"
-        }
-      }
-    },
-    "chrome_dev": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chrome-telemetry",
-      "file_info": {
-        "linux_x86_64": {
-          "cloud_storage_hash": "2592ec6f8dd56227c3c281e3cccecd6c9ba72cad",
-          "download_path": "bin/reference_build/chrome-linux64.zip",
-          "path_within_archive": "chrome-linux64/chrome",
-          "version_in_cs": "62.0.3192.0"
-        }
-      }
-    },
-    "chrome_stable": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chrome-telemetry",
-      "file_info": {
-        "android_k_armeabi-v7a": {
-          "cloud_storage_hash": "948c776335d3a38d6e8de0dba576e109c6b5724c",
-          "download_path": "bin/reference_build/android_k_armeabi-v7a/ChromeStable.apk",
-          "version_in_cs": "63.0.3239.111"
-        },
-        "android_l_arm64-v8a": {
-          "cloud_storage_hash": "a25663aad7397002f6dfe44fb97087fdd77df119",
-          "download_path": "bin/reference_build/android_l_arm64-v8a/ChromeStable.apk",
-          "version_in_cs": "63.0.3239.111"
-        },
-        "android_l_armeabi-v7a": {
-          "cloud_storage_hash": "948c776335d3a38d6e8de0dba576e109c6b5724c",
-          "download_path": "bin/reference_build/android_l_armeabi-v7a/ChromeStable.apk",
-          "version_in_cs": "63.0.3239.111"
-        },
-        "linux_x86_64": {
-          "cloud_storage_hash": "b0506e43d268eadb887ccc847695674f9d2e51a5",
-          "download_path": "bin/reference_build/chrome-linux64.zip",
-          "path_within_archive": "chrome-linux64/chrome",
-          "version_in_cs": "63.0.3239.108"
-        },
-        "mac_x86_64": {
-          "cloud_storage_hash": "56a3de45b37b7eb563006c30a548a48928cffb39",
-          "download_path": "bin/reference_builds/chrome-mac64.zip",
-          "path_within_archive": "chrome-mac/Google Chrome.app/Contents/MacOS/Google Chrome",
-          "version_in_cs": "63.0.3239.108"
-        },
-        "win_AMD64": {
-          "cloud_storage_hash": "d1511334055c88fd9fa5e6e63fee666d9be8c433",
-          "download_path": "bin\\reference_build\\chrome-win64.zip",
-          "path_within_archive": "chrome-win64\\chrome.exe",
-          "version_in_cs": "63.0.3239.108"
-        },
-        "win_x86": {
-          "cloud_storage_hash": "9e869b3b25ee7b682712cde6eaddc2d7fa84cc90",
-          "download_path": "bin\\reference_build\\chrome-win32.zip",
-          "path_within_archive": "chrome-win32\\chrome.exe",
-          "version_in_cs": "63.0.3239.108"
-        }
-      }
-    }
-  }
-}
diff --git a/systrace/catapult/common/py_utils/py_utils/class_util.py b/systrace/catapult/common/py_utils/py_utils/class_util.py
deleted file mode 100644
index 4cec430..0000000
--- a/systrace/catapult/common/py_utils/py_utils/class_util.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import inspect
-
-def IsMethodOverridden(parent_cls, child_cls, method_name):
-  assert inspect.isclass(parent_cls), '%s should be a class' % parent_cls
-  assert inspect.isclass(child_cls), '%s should be a class' % child_cls
-  assert parent_cls.__dict__.get(method_name), '%s has no method %s' % (
-      parent_cls, method_name)
-
-  if child_cls.__dict__.get(method_name):
-    # It's overridden
-    return True
-
-  if parent_cls in child_cls.__bases__:
-    # The parent is the base class of the child, we did not find the
-    # overridden method.
-    return False
-
-  # For all the base classes of this class that are not object, check if
-  # they override the method.
-  base_cls = [cls for cls in child_cls.__bases__ if cls and cls != object]
-  return any(
-      IsMethodOverridden(parent_cls, base, method_name) for base in base_cls)
diff --git a/systrace/catapult/common/py_utils/py_utils/class_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/class_util_unittest.py
deleted file mode 100644
index 938bcdc..0000000
--- a/systrace/catapult/common/py_utils/py_utils/class_util_unittest.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from py_utils import class_util
-
-
-class ClassUtilTest(unittest.TestCase):
-
-  def testClassOverridden(self):
-    class Parent(object):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    class Child(Parent):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    self.assertTrue(class_util.IsMethodOverridden(
-        Parent, Child, 'MethodShouldBeOverridden'))
-
-  def testGrandchildOverridden(self):
-    class Parent(object):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    class Child(Parent):
-      pass
-
-    class Grandchild(Child):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    self.assertTrue(class_util.IsMethodOverridden(
-        Parent, Grandchild, 'MethodShouldBeOverridden'))
-
-  def testClassNotOverridden(self):
-    class Parent(object):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    class Child(Parent):
-      def SomeOtherMethod(self):
-        pass
-
-    self.assertFalse(class_util.IsMethodOverridden(
-        Parent, Child, 'MethodShouldBeOverridden'))
-
-  def testGrandchildNotOverridden(self):
-    class Parent(object):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    class Child(Parent):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    class Grandchild(Child):
-      def SomeOtherMethod(self):
-        pass
-
-    self.assertTrue(class_util.IsMethodOverridden(
-        Parent, Grandchild, 'MethodShouldBeOverridden'))
-
-  def testClassNotPresentInParent(self):
-    class Parent(object):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    class Child(Parent):
-      def MethodShouldBeOverridden(self):
-        pass
-
-    self.assertRaises(
-        AssertionError, class_util.IsMethodOverridden,
-        Parent, Child, 'WrongMethod')
-
-  def testInvalidClass(self):
-    class Foo(object):
-      def Bar(self):
-        pass
-
-    self.assertRaises(
-        AssertionError, class_util.IsMethodOverridden, 'invalid', Foo, 'Bar')
-
-    self.assertRaises(
-        AssertionError, class_util.IsMethodOverridden, Foo, 'invalid', 'Bar')
-
-  def testMultipleInheritance(self):
-    class Aaa(object):
-      def One(self):
-        pass
-
-    class Bbb(object):
-      def Two(self):
-        pass
-
-    class Ccc(Aaa, Bbb):
-      pass
-
-    class Ddd(object):
-      def Three(self):
-        pass
-
-    class Eee(Ddd):
-      def Three(self):
-        pass
-
-    class Fff(Ccc, Eee):
-      def One(self):
-        pass
-
-    class Ggg(object):
-      def Four(self):
-        pass
-
-    class Hhh(Fff, Ggg):
-      def Two(self):
-        pass
-
-    class Iii(Hhh):
-      pass
-
-    class Jjj(Iii):
-      pass
-
-    self.assertFalse(class_util.IsMethodOverridden(Aaa, Ccc, 'One'))
-    self.assertTrue(class_util.IsMethodOverridden(Aaa, Fff, 'One'))
-    self.assertTrue(class_util.IsMethodOverridden(Aaa, Hhh, 'One'))
-    self.assertTrue(class_util.IsMethodOverridden(Aaa, Jjj, 'One'))
-    self.assertFalse(class_util.IsMethodOverridden(Bbb, Ccc, 'Two'))
-    self.assertTrue(class_util.IsMethodOverridden(Bbb, Hhh, 'Two'))
-    self.assertTrue(class_util.IsMethodOverridden(Bbb, Jjj, 'Two'))
-    self.assertFalse(class_util.IsMethodOverridden(Eee, Fff, 'Three'))
-
-
diff --git a/systrace/catapult/common/py_utils/py_utils/cloud_storage.py b/systrace/catapult/common/py_utils/py_utils/cloud_storage.py
deleted file mode 100644
index f601380..0000000
--- a/systrace/catapult/common/py_utils/py_utils/cloud_storage.py
+++ /dev/null
@@ -1,497 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Wrappers for gsutil, for basic interaction with Google Cloud Storage."""
-
-import collections
-import contextlib
-import hashlib
-import logging
-import os
-import shutil
-import stat
-import subprocess
-import re
-import sys
-import tempfile
-import time
-
-import py_utils
-from py_utils import lock
-
-# Do a no-op import here so that cloud_storage_global_lock dep is picked up
-# by https://cs.chromium.org/chromium/src/build/android/test_runner.pydeps.
-# TODO(nedn, jbudorick): figure out a way to get rid of this ugly hack.
-from py_utils import cloud_storage_global_lock  # pylint: disable=unused-import
-
-logger = logging.getLogger(__name__)  # pylint: disable=invalid-name
-
-
-PUBLIC_BUCKET = 'chromium-telemetry'
-PARTNER_BUCKET = 'chrome-partner-telemetry'
-INTERNAL_BUCKET = 'chrome-telemetry'
-TELEMETRY_OUTPUT = 'chrome-telemetry-output'
-
-# Uses ordered dict to make sure that bucket's key-value items are ordered from
-# the most open to the most restrictive.
-BUCKET_ALIASES = collections.OrderedDict((
-    ('public', PUBLIC_BUCKET),
-    ('partner', PARTNER_BUCKET),
-    ('internal', INTERNAL_BUCKET),
-    ('output', TELEMETRY_OUTPUT),
-))
-
-BUCKET_ALIAS_NAMES = BUCKET_ALIASES.keys()
-
-
-_GSUTIL_PATH = os.path.join(py_utils.GetCatapultDir(), 'third_party', 'gsutil',
-                            'gsutil')
-
-# TODO(tbarzic): A workaround for http://crbug.com/386416 and
-#     http://crbug.com/359293. See |_RunCommand|.
-_CROS_GSUTIL_HOME_WAR = '/home/chromeos-test/'
-
-
-# If Environment variables has DISABLE_CLOUD_STORAGE_IO set to '1', any method
-# calls that invoke cloud storage network io will throw exceptions.
-DISABLE_CLOUD_STORAGE_IO = 'DISABLE_CLOUD_STORAGE_IO'
-
-# The maximum number of seconds to wait to acquire the pseudo lock for a cloud
-# storage file before raising an exception.
-LOCK_ACQUISITION_TIMEOUT = 10
-
-
-class CloudStorageError(Exception):
-
-  @staticmethod
-  def _GetConfigInstructions():
-    command = _GSUTIL_PATH
-    if py_utils.IsRunningOnCrosDevice():
-      command = 'HOME=%s %s' % (_CROS_GSUTIL_HOME_WAR, _GSUTIL_PATH)
-    return ('To configure your credentials:\n'
-            '  1. Run "%s config" and follow its instructions.\n'
-            '  2. If you have a @google.com account, use that account.\n'
-            '  3. For the project-id, just enter 0.' % command)
-
-
-class PermissionError(CloudStorageError):
-
-  def __init__(self):
-    super(PermissionError, self).__init__(
-        'Attempted to access a file from Cloud Storage but you don\'t '
-        'have permission. ' + self._GetConfigInstructions())
-
-
-class CredentialsError(CloudStorageError):
-
-  def __init__(self):
-    super(CredentialsError, self).__init__(
-        'Attempted to access a file from Cloud Storage but you have no '
-        'configured credentials. ' + self._GetConfigInstructions())
-
-
-class CloudStorageIODisabled(CloudStorageError):
-  pass
-
-
-class NotFoundError(CloudStorageError):
-  pass
-
-
-class ServerError(CloudStorageError):
-  pass
-
-
-# TODO(tonyg/dtu): Can this be replaced with distutils.spawn.find_executable()?
-def _FindExecutableInPath(relative_executable_path, *extra_search_paths):
-  search_paths = list(extra_search_paths) + os.environ['PATH'].split(os.pathsep)
-  for search_path in search_paths:
-    executable_path = os.path.join(search_path, relative_executable_path)
-    if py_utils.IsExecutable(executable_path):
-      return executable_path
-  return None
-
-
-def _EnsureExecutable(gsutil):
-  """chmod +x if gsutil is not executable."""
-  st = os.stat(gsutil)
-  if not st.st_mode & stat.S_IEXEC:
-    os.chmod(gsutil, st.st_mode | stat.S_IEXEC)
-
-
-def _RunCommand(args):
-  # On cros device, as telemetry is running as root, home will be set to /root/,
-  # which is not writable. gsutil will attempt to create a download tracker dir
-  # in home dir and fail. To avoid this, override HOME dir to something writable
-  # when running on cros device.
-  #
-  # TODO(tbarzic): Figure out a better way to handle gsutil on cros.
-  #     http://crbug.com/386416, http://crbug.com/359293.
-  gsutil_env = None
-  if py_utils.IsRunningOnCrosDevice():
-    gsutil_env = os.environ.copy()
-    gsutil_env['HOME'] = _CROS_GSUTIL_HOME_WAR
-
-  if os.name == 'nt':
-    # If Windows, prepend python. Python scripts aren't directly executable.
-    args = [sys.executable, _GSUTIL_PATH] + args
-  else:
-    # Don't do it on POSIX, in case someone is using a shell script to redirect.
-    args = [_GSUTIL_PATH] + args
-    _EnsureExecutable(_GSUTIL_PATH)
-
-  if args[0] not in ('help', 'hash', 'version') and not IsNetworkIOEnabled():
-    raise CloudStorageIODisabled(
-        "Environment variable DISABLE_CLOUD_STORAGE_IO is set to 1. "
-        'Command %s is not allowed to run' % args)
-
-  gsutil = subprocess.Popen(args, stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE, env=gsutil_env)
-  stdout, stderr = gsutil.communicate()
-
-  if gsutil.returncode:
-    raise GetErrorObjectForCloudStorageStderr(stderr)
-
-  return stdout
-
-
-def GetErrorObjectForCloudStorageStderr(stderr):
-  if (stderr.startswith((
-      'You are attempting to access protected data with no configured',
-      'Failure: No handler was ready to authenticate.')) or
-      re.match('.*401.*does not have .* access to .*', stderr)):
-    return CredentialsError()
-  if ('status=403' in stderr or 'status 403' in stderr or
-      '403 Forbidden' in stderr or
-      re.match('.*403.*does not have .* access to .*', stderr)):
-    return PermissionError()
-  if (stderr.startswith('InvalidUriError') or 'No such object' in stderr or
-      'No URLs matched' in stderr or 'One or more URLs matched no' in stderr):
-    return NotFoundError(stderr)
-  if '500 Internal Server Error' in stderr:
-    return ServerError(stderr)
-  return CloudStorageError(stderr)
-
-
-def IsNetworkIOEnabled():
-  """Returns true if cloud storage is enabled."""
-  disable_cloud_storage_env_val = os.getenv(DISABLE_CLOUD_STORAGE_IO)
-
-  if disable_cloud_storage_env_val and disable_cloud_storage_env_val != '1':
-    logger.error(
-        'Unsupported value of environment variable '
-        'DISABLE_CLOUD_STORAGE_IO. Expected None or \'1\' but got %s.',
-        disable_cloud_storage_env_val)
-
-  return disable_cloud_storage_env_val != '1'
-
-
-def List(bucket):
-  query = 'gs://%s/' % bucket
-  stdout = _RunCommand(['ls', query])
-  return [url[len(query):] for url in stdout.splitlines()]
-
-
-def Exists(bucket, remote_path):
-  try:
-    _RunCommand(['ls', 'gs://%s/%s' % (bucket, remote_path)])
-    return True
-  except NotFoundError:
-    return False
-
-
-def Move(bucket1, bucket2, remote_path):
-  url1 = 'gs://%s/%s' % (bucket1, remote_path)
-  url2 = 'gs://%s/%s' % (bucket2, remote_path)
-  logger.info('Moving %s to %s', url1, url2)
-  _RunCommand(['mv', url1, url2])
-
-
-def Copy(bucket_from, bucket_to, remote_path_from, remote_path_to):
-  """Copy a file from one location in CloudStorage to another.
-
-  Args:
-      bucket_from: The cloud storage bucket where the file is currently located.
-      bucket_to: The cloud storage bucket it is being copied to.
-      remote_path_from: The file path where the file is located in bucket_from.
-      remote_path_to: The file path it is being copied to in bucket_to.
-
-  It should: cause no changes locally or to the starting file, and will
-  overwrite any existing files in the destination location.
-  """
-  url1 = 'gs://%s/%s' % (bucket_from, remote_path_from)
-  url2 = 'gs://%s/%s' % (bucket_to, remote_path_to)
-  logger.info('Copying %s to %s', url1, url2)
-  _RunCommand(['cp', url1, url2])
-
-
-def Delete(bucket, remote_path):
-  url = 'gs://%s/%s' % (bucket, remote_path)
-  logger.info('Deleting %s', url)
-  _RunCommand(['rm', url])
-
-
-def Get(bucket, remote_path, local_path):
-  with _FileLock(local_path):
-    _GetLocked(bucket, remote_path, local_path)
-
-
-_CLOUD_STORAGE_GLOBAL_LOCK = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), 'cloud_storage_global_lock.py')
-
-
-@contextlib.contextmanager
-def _FileLock(base_path):
-  pseudo_lock_path = '%s.pseudo_lock' % base_path
-  _CreateDirectoryIfNecessary(os.path.dirname(pseudo_lock_path))
-
-  # Make sure that we guard the creation, acquisition, release, and removal of
-  # the pseudo lock all with the same guard (_CLOUD_STORAGE_GLOBAL_LOCK).
-  # Otherwise, we can get nasty interleavings that result in multiple processes
-  # thinking they have an exclusive lock, like:
-  #
-  # (Process 1) Create and acquire the pseudo lock
-  # (Process 1) Release the pseudo lock
-  # (Process 1) Release the file lock
-  # (Process 2) Open and acquire the existing pseudo lock
-  # (Process 1) Delete the (existing) pseudo lock
-  # (Process 3) Create and acquire a new pseudo lock
-  #
-  # Using the same guard for creation and removal of the pseudo lock guarantees
-  # that all processes are referring to the same lock.
-  pseudo_lock_fd = None
-  pseudo_lock_fd_return = []
-  py_utils.WaitFor(lambda: _AttemptPseudoLockAcquisition(pseudo_lock_path,
-                                                         pseudo_lock_fd_return),
-                   LOCK_ACQUISITION_TIMEOUT)
-  pseudo_lock_fd = pseudo_lock_fd_return[0]
-
-  try:
-    yield
-  finally:
-    py_utils.WaitFor(lambda: _AttemptPseudoLockRelease(pseudo_lock_fd),
-                     LOCK_ACQUISITION_TIMEOUT)
-
-def _AttemptPseudoLockAcquisition(pseudo_lock_path, pseudo_lock_fd_return):
-  """Try to acquire the lock and return a boolean indicating whether the attempt
-  was successful. If the attempt was successful, pseudo_lock_fd_return, which
-  should be an empty array, will be modified to contain a single entry: the file
-  descriptor of the (now acquired) lock file.
-
-  This whole operation is guarded with the global cloud storage lock, which
-  prevents race conditions that might otherwise cause multiple processes to
-  believe they hold the same pseudo lock (see _FileLock for more details).
-  """
-  pseudo_lock_fd = None
-  try:
-    with open(_CLOUD_STORAGE_GLOBAL_LOCK) as global_file:
-      with lock.FileLock(global_file, lock.LOCK_EX | lock.LOCK_NB):
-        # Attempt to acquire the lock in a non-blocking manner. If we block,
-        # then we'll cause deadlock because another process will be unable to
-        # acquire the cloud storage global lock in order to release the pseudo
-        # lock.
-        pseudo_lock_fd = open(pseudo_lock_path, 'w')
-        lock.AcquireFileLock(pseudo_lock_fd, lock.LOCK_EX | lock.LOCK_NB)
-        pseudo_lock_fd_return.append(pseudo_lock_fd)
-        return True
-  except (lock.LockException, IOError):
-    # We failed to acquire either the global cloud storage lock or the pseudo
-    # lock.
-    if pseudo_lock_fd:
-      pseudo_lock_fd.close()
-    return False
-
-
-def _AttemptPseudoLockRelease(pseudo_lock_fd):
-  """Try to release the pseudo lock and return a boolean indicating whether
-  the release was succesful.
-
-  This whole operation is guarded with the global cloud storage lock, which
-  prevents race conditions that might otherwise cause multiple processes to
-  believe they hold the same pseudo lock (see _FileLock for more details).
-  """
-  pseudo_lock_path = pseudo_lock_fd.name
-  try:
-    with open(_CLOUD_STORAGE_GLOBAL_LOCK) as global_file:
-      with lock.FileLock(global_file, lock.LOCK_EX | lock.LOCK_NB):
-        lock.ReleaseFileLock(pseudo_lock_fd)
-        pseudo_lock_fd.close()
-        try:
-          os.remove(pseudo_lock_path)
-        except OSError:
-          # We don't care if the pseudo lock gets removed elsewhere before
-          # we have a chance to do so.
-          pass
-        return True
-  except (lock.LockException, IOError):
-    # We failed to acquire the global cloud storage lock and are thus unable to
-    # release the pseudo lock.
-    return False
-
-
-def _CreateDirectoryIfNecessary(directory):
-  if not os.path.exists(directory):
-    os.makedirs(directory)
-
-
-def _GetLocked(bucket, remote_path, local_path):
-  url = 'gs://%s/%s' % (bucket, remote_path)
-  logger.info('Downloading %s to %s', url, local_path)
-  _CreateDirectoryIfNecessary(os.path.dirname(local_path))
-  with tempfile.NamedTemporaryFile(
-      dir=os.path.dirname(local_path),
-      delete=False) as partial_download_path:
-    try:
-      # Windows won't download to an open file.
-      partial_download_path.close()
-      try:
-        _RunCommand(['cp', url, partial_download_path.name])
-      except ServerError:
-        logger.info('Cloud Storage server error, retrying download')
-        _RunCommand(['cp', url, partial_download_path.name])
-      shutil.move(partial_download_path.name, local_path)
-    finally:
-      if os.path.exists(partial_download_path.name):
-        os.remove(partial_download_path.name)
-
-
-def Insert(bucket, remote_path, local_path, publicly_readable=False):
-  """ Upload file in |local_path| to cloud storage.
-  Args:
-    bucket: the google cloud storage bucket name.
-    remote_path: the remote file path in |bucket|.
-    local_path: path of the local file to be uploaded.
-    publicly_readable: whether the uploaded file has publicly readable
-    permission.
-
-  Returns:
-    The url where the file is uploaded to.
-  """
-  url = 'gs://%s/%s' % (bucket, remote_path)
-  command_and_args = ['cp']
-  extra_info = ''
-  if publicly_readable:
-    command_and_args += ['-a', 'public-read']
-    extra_info = ' (publicly readable)'
-  command_and_args += [local_path, url]
-  logger.info('Uploading %s to %s%s', local_path, url, extra_info)
-  _RunCommand(command_and_args)
-  return 'https://console.developers.google.com/m/cloudstorage/b/%s/o/%s' % (
-      bucket, remote_path)
-
-
-def GetIfHashChanged(cs_path, download_path, bucket, file_hash):
-  """Downloads |download_path| to |file_path| if |file_path| doesn't exist or
-     it's hash doesn't match |file_hash|.
-
-  Returns:
-    True if the binary was changed.
-  Raises:
-    CredentialsError if the user has no configured credentials.
-    PermissionError if the user does not have permission to access the bucket.
-    NotFoundError if the file is not in the given bucket in cloud_storage.
-  """
-  with _FileLock(download_path):
-    if (os.path.exists(download_path) and
-        CalculateHash(download_path) == file_hash):
-      return False
-    _GetLocked(bucket, cs_path, download_path)
-    return True
-
-
-def GetIfChanged(file_path, bucket):
-  """Gets the file at file_path if it has a hash file that doesn't match or
-  if there is no local copy of file_path, but there is a hash file for it.
-
-  Returns:
-    True if the binary was changed.
-  Raises:
-    CredentialsError if the user has no configured credentials.
-    PermissionError if the user does not have permission to access the bucket.
-    NotFoundError if the file is not in the given bucket in cloud_storage.
-  """
-  with _FileLock(file_path):
-    hash_path = file_path + '.sha1'
-    fetch_ts_path = file_path + '.fetchts'
-    if not os.path.exists(hash_path):
-      logger.warning('Hash file not found: %s', hash_path)
-      return False
-
-    expected_hash = ReadHash(hash_path)
-
-    # To save the time required computing binary hash (which is an expensive
-    # operation, see crbug.com/793609#c2 for details), any time we fetch a new
-    # binary, we save not only that binary but the time of the fetch in
-    # |fetch_ts_path|. Anytime the file needs updated (its
-    # hash in |hash_path| change), we can just need to compare the timestamp of
-    # |hash_path| with the timestamp in |fetch_ts_path| to figure out
-    # if the update operation has been done.
-    #
-    # Notes: for this to work, we make the assumption that only
-    # cloud_storage.GetIfChanged modifies the local |file_path| binary.
-
-    if os.path.exists(fetch_ts_path) and os.path.exists(file_path):
-      with open(fetch_ts_path) as f:
-        data = f.read().strip()
-        last_binary_fetch_ts = float(data)
-
-      if last_binary_fetch_ts > os.path.getmtime(hash_path):
-        return False
-
-    # Whether the binary stored in local already has hash matched
-    # expected_hash or we need to fetch new binary from cloud, update the
-    # timestamp in |fetch_ts_path| with current time anyway since it is
-    # outdated compared with sha1's last modified time.
-    with open(fetch_ts_path, 'w') as f:
-      f.write(str(time.time()))
-
-    if os.path.exists(file_path) and CalculateHash(file_path) == expected_hash:
-      return False
-    _GetLocked(bucket, expected_hash, file_path)
-    if CalculateHash(file_path) != expected_hash:
-      os.remove(fetch_ts_path)
-      raise RuntimeError(
-          'Binary stored in cloud storage does not have hash matching .sha1 '
-          'file. Please make sure that the binary file is uploaded using '
-          'depot_tools/upload_to_google_storage.py script or through automatic '
-          'framework.')
-    return True
-
-
-def GetFilesInDirectoryIfChanged(directory, bucket):
-  """ Scan the directory for .sha1 files, and download them from the given
-  bucket in cloud storage if the local and remote hash don't match or
-  there is no local copy.
-  """
-  if not os.path.isdir(directory):
-    raise ValueError(
-        '%s does not exist. Must provide a valid directory path.' % directory)
-  # Don't allow the root directory to be a serving_dir.
-  if directory == os.path.abspath(os.sep):
-    raise ValueError('Trying to serve root directory from HTTP server.')
-  for dirpath, _, filenames in os.walk(directory):
-    for filename in filenames:
-      path_name, extension = os.path.splitext(
-          os.path.join(dirpath, filename))
-      if extension != '.sha1':
-        continue
-      GetIfChanged(path_name, bucket)
-
-
-def CalculateHash(file_path):
-  """Calculates and returns the hash of the file at file_path."""
-  sha1 = hashlib.sha1()
-  with open(file_path, 'rb') as f:
-    while True:
-      # Read in 1mb chunks, so it doesn't all have to be loaded into memory.
-      chunk = f.read(1024 * 1024)
-      if not chunk:
-        break
-      sha1.update(chunk)
-  return sha1.hexdigest()
-
-
-def ReadHash(hash_path):
-  with open(hash_path, 'rb') as f:
-    return f.read(1024).rstrip()
diff --git a/systrace/catapult/common/py_utils/py_utils/cloud_storage_global_lock.py b/systrace/catapult/common/py_utils/py_utils/cloud_storage_global_lock.py
deleted file mode 100644
index 5718e10..0000000
--- a/systrace/catapult/common/py_utils/py_utils/cloud_storage_global_lock.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This file is used by cloud_storage._FileLock implementation, don't delete it!
diff --git a/systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py b/systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py
deleted file mode 100644
index ae2f748..0000000
--- a/systrace/catapult/common/py_utils/py_utils/cloud_storage_unittest.py
+++ /dev/null
@@ -1,374 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import shutil
-import sys
-import tempfile
-import unittest
-
-import mock
-from pyfakefs import fake_filesystem_unittest
-
-import py_utils
-from py_utils import cloud_storage
-from py_utils import lock
-
-_CLOUD_STORAGE_GLOBAL_LOCK_PATH = os.path.join(
-    os.path.dirname(__file__), 'cloud_storage_global_lock.py')
-
-def _FakeReadHash(_):
-  return 'hashthis!'
-
-
-def _FakeCalulateHashMatchesRead(_):
-  return 'hashthis!'
-
-
-def _FakeCalulateHashNewHash(_):
-  return 'omgnewhash'
-
-
-class BaseFakeFsUnitTest(fake_filesystem_unittest.TestCase):
-
-  def setUp(self):
-    self.original_environ = os.environ.copy()
-    os.environ['DISABLE_CLOUD_STORAGE_IO'] = ''
-    self.setUpPyfakefs()
-    self.fs.CreateFile(
-        os.path.join(py_utils.GetCatapultDir(),
-                     'third_party', 'gsutil', 'gsutil'))
-
-  def CreateFiles(self, file_paths):
-    for f in file_paths:
-      self.fs.CreateFile(f)
-
-  def tearDown(self):
-    self.tearDownPyfakefs()
-    os.environ = self.original_environ
-
-  def _FakeRunCommand(self, cmd):
-    pass
-
-  def _FakeGet(self, bucket, remote_path, local_path):
-    pass
-
-
-class CloudStorageFakeFsUnitTest(BaseFakeFsUnitTest):
-
-  def _AssertRunCommandRaisesError(self, communicate_strs, error):
-    with mock.patch('py_utils.cloud_storage.subprocess.Popen') as popen:
-      p_mock = mock.Mock()
-      popen.return_value = p_mock
-      p_mock.returncode = 1
-      for stderr in communicate_strs:
-        p_mock.communicate.return_value = ('', stderr)
-        self.assertRaises(error, cloud_storage._RunCommand, [])
-
-  def testRunCommandCredentialsError(self):
-    strs = ['You are attempting to access protected data with no configured',
-            'Failure: No handler was ready to authenticate.']
-    self._AssertRunCommandRaisesError(strs, cloud_storage.CredentialsError)
-
-  def testRunCommandPermissionError(self):
-    strs = ['status=403', 'status 403', '403 Forbidden']
-    self._AssertRunCommandRaisesError(strs, cloud_storage.PermissionError)
-
-  def testRunCommandNotFoundError(self):
-    strs = ['InvalidUriError', 'No such object', 'No URLs matched',
-            'One or more URLs matched no', 'InvalidUriError']
-    self._AssertRunCommandRaisesError(strs, cloud_storage.NotFoundError)
-
-  def testRunCommandServerError(self):
-    strs = ['500 Internal Server Error']
-    self._AssertRunCommandRaisesError(strs, cloud_storage.ServerError)
-
-  def testRunCommandGenericError(self):
-    strs = ['Random string']
-    self._AssertRunCommandRaisesError(strs, cloud_storage.CloudStorageError)
-
-  def testInsertCreatesValidCloudUrl(self):
-    orig_run_command = cloud_storage._RunCommand
-    try:
-      cloud_storage._RunCommand = self._FakeRunCommand
-      remote_path = 'test-remote-path.html'
-      local_path = 'test-local-path.html'
-      cloud_url = cloud_storage.Insert(cloud_storage.PUBLIC_BUCKET,
-                                       remote_path, local_path)
-      self.assertEqual('https://console.developers.google.com/m/cloudstorage'
-                       '/b/chromium-telemetry/o/test-remote-path.html',
-                       cloud_url)
-    finally:
-      cloud_storage._RunCommand = orig_run_command
-
-  @mock.patch('py_utils.cloud_storage.subprocess')
-  def testExistsReturnsFalse(self, subprocess_mock):
-    p_mock = mock.Mock()
-    subprocess_mock.Popen.return_value = p_mock
-    p_mock.communicate.return_value = (
-        '',
-        'CommandException: One or more URLs matched no objects.\n')
-    p_mock.returncode_result = 1
-    self.assertFalse(cloud_storage.Exists('fake bucket',
-                                          'fake remote path'))
-
-  @unittest.skipIf(sys.platform.startswith('win'),
-                   'https://github.com/catapult-project/catapult/issues/1861')
-  def testGetFilesInDirectoryIfChanged(self):
-    self.CreateFiles([
-        'real_dir_path/dir1/1file1.sha1',
-        'real_dir_path/dir1/1file2.txt',
-        'real_dir_path/dir1/1file3.sha1',
-        'real_dir_path/dir2/2file.txt',
-        'real_dir_path/dir3/3file1.sha1'])
-
-    def IncrementFilesUpdated(*_):
-      IncrementFilesUpdated.files_updated += 1
-    IncrementFilesUpdated.files_updated = 0
-    orig_get_if_changed = cloud_storage.GetIfChanged
-    cloud_storage.GetIfChanged = IncrementFilesUpdated
-    try:
-      self.assertRaises(ValueError, cloud_storage.GetFilesInDirectoryIfChanged,
-                        os.path.abspath(os.sep), cloud_storage.PUBLIC_BUCKET)
-      self.assertEqual(0, IncrementFilesUpdated.files_updated)
-      self.assertRaises(ValueError, cloud_storage.GetFilesInDirectoryIfChanged,
-                        'fake_dir_path', cloud_storage.PUBLIC_BUCKET)
-      self.assertEqual(0, IncrementFilesUpdated.files_updated)
-      cloud_storage.GetFilesInDirectoryIfChanged('real_dir_path',
-                                                 cloud_storage.PUBLIC_BUCKET)
-      self.assertEqual(3, IncrementFilesUpdated.files_updated)
-    finally:
-      cloud_storage.GetIfChanged = orig_get_if_changed
-
-  def testCopy(self):
-    orig_run_command = cloud_storage._RunCommand
-
-    def AssertCorrectRunCommandArgs(args):
-      self.assertEqual(expected_args, args)
-    cloud_storage._RunCommand = AssertCorrectRunCommandArgs
-    expected_args = ['cp', 'gs://bucket1/remote_path1',
-                     'gs://bucket2/remote_path2']
-    try:
-      cloud_storage.Copy('bucket1', 'bucket2', 'remote_path1', 'remote_path2')
-    finally:
-      cloud_storage._RunCommand = orig_run_command
-
-  @mock.patch('py_utils.cloud_storage._FileLock')
-  def testDisableCloudStorageIo(self, unused_lock_mock):
-    os.environ['DISABLE_CLOUD_STORAGE_IO'] = '1'
-    dir_path = 'real_dir_path'
-    self.fs.CreateDirectory(dir_path)
-    file_path = os.path.join(dir_path, 'file1')
-    file_path_sha = file_path + '.sha1'
-
-    def CleanTimeStampFile():
-      os.remove(file_path + '.fetchts')
-
-    self.CreateFiles([file_path, file_path_sha])
-    with open(file_path_sha, 'w') as f:
-      f.write('hash1234')
-    with self.assertRaises(cloud_storage.CloudStorageIODisabled):
-      cloud_storage.Copy('bucket1', 'bucket2', 'remote_path1', 'remote_path2')
-    with self.assertRaises(cloud_storage.CloudStorageIODisabled):
-      cloud_storage.Get('bucket', 'foo', file_path)
-    with self.assertRaises(cloud_storage.CloudStorageIODisabled):
-      cloud_storage.GetIfChanged(file_path, 'foo')
-    with self.assertRaises(cloud_storage.CloudStorageIODisabled):
-      cloud_storage.GetIfHashChanged('bar', file_path, 'bucket', 'hash1234')
-    with self.assertRaises(cloud_storage.CloudStorageIODisabled):
-      cloud_storage.Insert('bucket', 'foo', file_path)
-
-    CleanTimeStampFile()
-    with self.assertRaises(cloud_storage.CloudStorageIODisabled):
-      cloud_storage.GetFilesInDirectoryIfChanged(dir_path, 'bucket')
-
-
-class GetIfChangedTests(BaseFakeFsUnitTest):
-
-  def setUp(self):
-    super(GetIfChangedTests, self).setUp()
-    self._orig_read_hash = cloud_storage.ReadHash
-    self._orig_calculate_hash = cloud_storage.CalculateHash
-
-  def tearDown(self):
-    super(GetIfChangedTests, self).tearDown()
-    cloud_storage.CalculateHash = self._orig_calculate_hash
-    cloud_storage.ReadHash = self._orig_read_hash
-
-  @mock.patch('py_utils.cloud_storage._FileLock')
-  @mock.patch('py_utils.cloud_storage._GetLocked')
-  def testHashPathDoesNotExists(self, unused_get_locked, unused_lock_mock):
-    cloud_storage.ReadHash = _FakeReadHash
-    cloud_storage.CalculateHash = _FakeCalulateHashMatchesRead
-    file_path = 'test-file-path.wpr'
-
-    cloud_storage._GetLocked = self._FakeGet
-    # hash_path doesn't exist.
-    self.assertFalse(cloud_storage.GetIfChanged(file_path,
-                                                cloud_storage.PUBLIC_BUCKET))
-
-  @mock.patch('py_utils.cloud_storage._FileLock')
-  @mock.patch('py_utils.cloud_storage._GetLocked')
-  def testHashPathExistsButFilePathDoesNot(
-      self, unused_get_locked, unused_lock_mock):
-    cloud_storage.ReadHash = _FakeReadHash
-    cloud_storage.CalculateHash = _FakeCalulateHashMatchesRead
-    file_path = 'test-file-path.wpr'
-    hash_path = file_path + '.sha1'
-
-    # hash_path exists, but file_path doesn't.
-    self.CreateFiles([hash_path])
-    self.assertTrue(cloud_storage.GetIfChanged(file_path,
-                                               cloud_storage.PUBLIC_BUCKET))
-
-  @mock.patch('py_utils.cloud_storage._FileLock')
-  @mock.patch('py_utils.cloud_storage._GetLocked')
-  def testHashPathAndFileHashExistWithSameHash(
-      self, unused_get_locked, unused_lock_mock):
-    cloud_storage.ReadHash = _FakeReadHash
-    cloud_storage.CalculateHash = _FakeCalulateHashMatchesRead
-    file_path = 'test-file-path.wpr'
-
-    # hash_path and file_path exist, and have same hash.
-    self.CreateFiles([file_path])
-    self.assertFalse(cloud_storage.GetIfChanged(file_path,
-                                                cloud_storage.PUBLIC_BUCKET))
-
-  @mock.patch('py_utils.cloud_storage._FileLock')
-  @mock.patch('py_utils.cloud_storage._GetLocked')
-  def testHashPathAndFileHashExistWithDifferentHash(
-      self, mock_get_locked, unused_get_locked):
-    cloud_storage.ReadHash = _FakeReadHash
-    cloud_storage.CalculateHash = _FakeCalulateHashNewHash
-    file_path = 'test-file-path.wpr'
-    hash_path = file_path + '.sha1'
-
-    def _FakeGetLocked(bucket, expected_hash, file_path):
-      del bucket, expected_hash, file_path  # unused
-      cloud_storage.CalculateHash = _FakeCalulateHashMatchesRead
-
-    mock_get_locked.side_effect = _FakeGetLocked
-
-    self.CreateFiles([file_path, hash_path])
-    # hash_path and file_path exist, and have different hashes.
-    self.assertTrue(cloud_storage.GetIfChanged(file_path,
-                                               cloud_storage.PUBLIC_BUCKET))
-
-  @mock.patch('py_utils.cloud_storage._FileLock')
-  @mock.patch('py_utils.cloud_storage.CalculateHash')
-  @mock.patch('py_utils.cloud_storage._GetLocked')
-  def testNoHashComputationNeededUponSecondCall(
-      self, mock_get_locked, mock_calculate_hash, unused_get_locked):
-    mock_calculate_hash.side_effect = _FakeCalulateHashNewHash
-    cloud_storage.ReadHash = _FakeReadHash
-    file_path = 'test-file-path.wpr'
-    hash_path = file_path + '.sha1'
-
-    def _FakeGetLocked(bucket, expected_hash, file_path):
-      del bucket, expected_hash, file_path  # unused
-      cloud_storage.CalculateHash = _FakeCalulateHashMatchesRead
-
-    mock_get_locked.side_effect = _FakeGetLocked
-
-    self.CreateFiles([file_path, hash_path])
-    # hash_path and file_path exist, and have different hashes. This first call
-    # will invoke a fetch.
-    self.assertTrue(cloud_storage.GetIfChanged(file_path,
-                                               cloud_storage.PUBLIC_BUCKET))
-
-    # The fetch left a .fetchts file on machine.
-    self.assertTrue(os.path.exists(file_path + '.fetchts'))
-
-    # Subsequent invocations of GetIfChanged should not invoke CalculateHash.
-    mock_calculate_hash.assert_not_called()
-    self.assertFalse(cloud_storage.GetIfChanged(file_path,
-                                                cloud_storage.PUBLIC_BUCKET))
-    self.assertFalse(cloud_storage.GetIfChanged(file_path,
-                                                cloud_storage.PUBLIC_BUCKET))
-
-  @mock.patch('py_utils.cloud_storage._FileLock')
-  @mock.patch('py_utils.cloud_storage.CalculateHash')
-  @mock.patch('py_utils.cloud_storage._GetLocked')
-  def testRefetchingFileUponHashFileChange(
-      self, mock_get_locked, mock_calculate_hash, unused_get_locked):
-    mock_calculate_hash.side_effect = _FakeCalulateHashNewHash
-    cloud_storage.ReadHash = _FakeReadHash
-    file_path = 'test-file-path.wpr'
-    hash_path = file_path + '.sha1'
-
-    def _FakeGetLocked(bucket, expected_hash, file_path):
-      del bucket, expected_hash, file_path  # unused
-      cloud_storage.CalculateHash = _FakeCalulateHashMatchesRead
-
-    mock_get_locked.side_effect = _FakeGetLocked
-
-    self.CreateFiles([file_path, hash_path])
-    # hash_path and file_path exist, and have different hashes. This first call
-    # will invoke a fetch.
-    self.assertTrue(cloud_storage.GetIfChanged(file_path,
-                                               cloud_storage.PUBLIC_BUCKET))
-
-    # The fetch left a .fetchts file on machine.
-    self.assertTrue(os.path.exists(file_path + '.fetchts'))
-
-    with open(file_path + '.fetchts') as f:
-      fetchts = float(f.read())
-
-    # Updating the .sha1 hash_path file with the new hash after .fetchts
-    # is created.
-    file_obj = self.fs.GetObject(hash_path)
-    file_obj.SetMTime(fetchts + 100)
-
-    cloud_storage.ReadHash = lambda _: 'hashNeW'
-    def _FakeGetLockedNewHash(bucket, expected_hash, file_path):
-      del bucket, expected_hash, file_path  # unused
-      cloud_storage.CalculateHash = lambda _: 'hashNeW'
-
-    mock_get_locked.side_effect = _FakeGetLockedNewHash
-
-    # hash_path and file_path exist, and have different hashes. This first call
-    # will invoke a fetch.
-    self.assertTrue(cloud_storage.GetIfChanged(file_path,
-                                               cloud_storage.PUBLIC_BUCKET))
-
-
-class CloudStorageRealFsUnitTest(unittest.TestCase):
-
-  def setUp(self):
-    self.original_environ = os.environ.copy()
-    os.environ['DISABLE_CLOUD_STORAGE_IO'] = ''
-
-  def tearDown(self):
-    os.environ = self.original_environ
-
-  @mock.patch('py_utils.cloud_storage.LOCK_ACQUISITION_TIMEOUT', .005)
-  def testGetPseudoLockUnavailableCausesTimeout(self):
-    with tempfile.NamedTemporaryFile(suffix='.pseudo_lock') as pseudo_lock_fd:
-      with lock.FileLock(pseudo_lock_fd, lock.LOCK_EX | lock.LOCK_NB):
-        with self.assertRaises(py_utils.TimeoutException):
-          file_path = pseudo_lock_fd.name.replace('.pseudo_lock', '')
-          cloud_storage.GetIfChanged(file_path, cloud_storage.PUBLIC_BUCKET)
-
-  @mock.patch('py_utils.cloud_storage.LOCK_ACQUISITION_TIMEOUT', .005)
-  def testGetGlobalLockUnavailableCausesTimeout(self):
-    with open(_CLOUD_STORAGE_GLOBAL_LOCK_PATH) as global_lock_fd:
-      with lock.FileLock(global_lock_fd, lock.LOCK_EX | lock.LOCK_NB):
-        tmp_dir = tempfile.mkdtemp()
-        try:
-          file_path = os.path.join(tmp_dir, 'foo')
-          with self.assertRaises(py_utils.TimeoutException):
-            cloud_storage.GetIfChanged(file_path, cloud_storage.PUBLIC_BUCKET)
-        finally:
-          shutil.rmtree(tmp_dir)
-
-
-class CloudStorageErrorHandlingTest(unittest.TestCase):
-  def runTest(self):
-    self.assertIsInstance(cloud_storage.GetErrorObjectForCloudStorageStderr(
-        'ServiceException: 401 Anonymous users does not have '
-        'storage.objects.get access to object chrome-partner-telemetry'),
-                          cloud_storage.CredentialsError)
-    self.assertIsInstance(cloud_storage.GetErrorObjectForCloudStorageStderr(
-        '403 Caller does not have storage.objects.list access to bucket '
-        'chrome-telemetry'), cloud_storage.PermissionError)
diff --git a/systrace/catapult/common/py_utils/py_utils/contextlib_ext.py b/systrace/catapult/common/py_utils/py_utils/contextlib_ext.py
deleted file mode 100644
index 922d27d..0000000
--- a/systrace/catapult/common/py_utils/py_utils/contextlib_ext.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-class _OptionalContextManager(object):
-
-  def __init__(self, manager, condition):
-    self._manager = manager
-    self._condition = condition
-
-  def __enter__(self):
-    if self._condition:
-      return self._manager.__enter__()
-    return None
-
-  def __exit__(self, exc_type, exc_val, exc_tb):
-    if self._condition:
-      return self._manager.__exit__(exc_type, exc_val, exc_tb)
-    return None
-
-
-def Optional(manager, condition):
-  """Wraps the provided context manager and runs it if condition is True.
-
-  Args:
-    manager: A context manager to conditionally run.
-    condition: If true, runs the given context manager.
-  Returns:
-    A context manager that conditionally executes the given manager.
-  """
-  return _OptionalContextManager(manager, condition)
-
diff --git a/systrace/catapult/common/py_utils/py_utils/contextlib_ext_unittest.py b/systrace/catapult/common/py_utils/py_utils/contextlib_ext_unittest.py
deleted file mode 100644
index b83e7e5..0000000
--- a/systrace/catapult/common/py_utils/py_utils/contextlib_ext_unittest.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from py_utils import contextlib_ext
-
-
-class OptionalUnittest(unittest.TestCase):
-
-  class SampleContextMgr(object):
-
-    def __init__(self):
-      self.entered = False
-      self.exited = False
-
-    def __enter__(self):
-      self.entered = True
-
-    def __exit__(self, exc_type, exc_val, exc_tb):
-      self.exited = True
-
-  def testConditionTrue(self):
-    c = self.SampleContextMgr()
-    with contextlib_ext.Optional(c, True):
-      self.assertTrue(c.entered)
-    self.assertTrue(c.exited)
-
-  def testConditionFalse(self):
-    c = self.SampleContextMgr()
-    with contextlib_ext.Optional(c, False):
-      self.assertFalse(c.entered)
-    self.assertFalse(c.exited)
diff --git a/systrace/catapult/common/py_utils/py_utils/dependency_util.py b/systrace/catapult/common/py_utils/py_utils/dependency_util.py
deleted file mode 100644
index d3cfe89..0000000
--- a/systrace/catapult/common/py_utils/py_utils/dependency_util.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import platform
-import sys
-
-import py_utils
-
-def GetOSAndArchForCurrentDesktopPlatform():
-  os_name = GetOSNameForCurrentDesktopPlatform()
-  return os_name, GetArchForCurrentDesktopPlatform(os_name)
-
-
-def GetOSNameForCurrentDesktopPlatform():
-  if py_utils.IsRunningOnCrosDevice():
-    return 'chromeos'
-  if sys.platform.startswith('linux'):
-    return 'linux'
-  if sys.platform == 'darwin':
-    return 'mac'
-  if sys.platform == 'win32':
-    return 'win'
-  return sys.platform
-
-
-def GetArchForCurrentDesktopPlatform(os_name):
-  if os_name == 'chromeos':
-    # Current tests outside of telemetry don't run on chromeos, and
-    # platform.machine is not the way telemetry gets the arch name on chromeos.
-    raise NotImplementedError()
-  return platform.machine()
-
-
-def GetChromeApkOsVersion(version_name):
-  version = version_name[0]
-  assert version.isupper(), (
-      'First character of versions name %s was not an uppercase letter.')
-  if version < 'L':
-    return 'k'
-  elif version > 'M':
-    return 'n'
-  return 'l'
-
-
-def ChromeBinariesConfigPath():
-  return os.path.realpath(os.path.join(
-      os.path.dirname(os.path.abspath(__file__)), 'chrome_binaries.json'))
diff --git a/systrace/catapult/common/py_utils/py_utils/discover.py b/systrace/catapult/common/py_utils/py_utils/discover.py
deleted file mode 100644
index 09d5c5e..0000000
--- a/systrace/catapult/common/py_utils/py_utils/discover.py
+++ /dev/null
@@ -1,191 +0,0 @@
-# Copyright 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import fnmatch
-import importlib
-import inspect
-import os
-import re
-import sys
-
-from py_utils import camel_case
-
-
-def DiscoverModules(start_dir, top_level_dir, pattern='*'):
-  """Discover all modules in |start_dir| which match |pattern|.
-
-  Args:
-    start_dir: The directory to recursively search.
-    top_level_dir: The top level of the package, for importing.
-    pattern: Unix shell-style pattern for filtering the filenames to import.
-
-  Returns:
-    list of modules.
-  """
-  # start_dir and top_level_dir must be consistent with each other.
-  start_dir = os.path.realpath(start_dir)
-  top_level_dir = os.path.realpath(top_level_dir)
-
-  modules = []
-  sub_paths = list(os.walk(start_dir))
-  # We sort the directories & file paths to ensure a deterministic ordering when
-  # traversing |top_level_dir|.
-  sub_paths.sort(key=lambda paths_tuple: paths_tuple[0])
-  for dir_path, _, filenames in sub_paths:
-    # Sort the directories to walk recursively by the directory path.
-    filenames.sort()
-    for filename in filenames:
-      # Filter out unwanted filenames.
-      if filename.startswith('.') or filename.startswith('_'):
-        continue
-      if os.path.splitext(filename)[1] != '.py':
-        continue
-      if not fnmatch.fnmatch(filename, pattern):
-        continue
-
-      # Find the module.
-      module_rel_path = os.path.relpath(
-          os.path.join(dir_path, filename), top_level_dir)
-      module_name = re.sub(r'[/\\]', '.', os.path.splitext(module_rel_path)[0])
-
-      # Import the module.
-      try:
-        # Make sure that top_level_dir is the first path in the sys.path in case
-        # there are naming conflict in module parts.
-        original_sys_path = sys.path[:]
-        sys.path.insert(0, top_level_dir)
-        module = importlib.import_module(module_name)
-        modules.append(module)
-      finally:
-        sys.path = original_sys_path
-  return modules
-
-
-def AssertNoKeyConflicts(classes_by_key_1, classes_by_key_2):
-  for k in classes_by_key_1:
-    if k in classes_by_key_2:
-      assert classes_by_key_1[k] is classes_by_key_2[k], (
-          'Found conflicting classes for the same key: '
-          'key=%s, class_1=%s, class_2=%s' % (
-              k, classes_by_key_1[k], classes_by_key_2[k]))
-
-
-# TODO(dtu): Normalize all discoverable classes to have corresponding module
-# and class names, then always index by class name.
-def DiscoverClasses(start_dir,
-                    top_level_dir,
-                    base_class,
-                    pattern='*',
-                    index_by_class_name=True,
-                    directly_constructable=False):
-  """Discover all classes in |start_dir| which subclass |base_class|.
-
-  Base classes that contain subclasses are ignored by default.
-
-  Args:
-    start_dir: The directory to recursively search.
-    top_level_dir: The top level of the package, for importing.
-    base_class: The base class to search for.
-    pattern: Unix shell-style pattern for filtering the filenames to import.
-    index_by_class_name: If True, use class name converted to
-        lowercase_with_underscores instead of module name in return dict keys.
-    directly_constructable: If True, will only return classes that can be
-        constructed without arguments
-
-  Returns:
-    dict of {module_name: class} or {underscored_class_name: class}
-  """
-  modules = DiscoverModules(start_dir, top_level_dir, pattern)
-  classes = {}
-  for module in modules:
-    new_classes = DiscoverClassesInModule(
-        module, base_class, index_by_class_name, directly_constructable)
-    # TODO(nednguyen): we should remove index_by_class_name once
-    # benchmark_smoke_unittest in chromium/src/tools/perf no longer relied
-    # naming collisions to reduce the number of smoked benchmark tests.
-    # crbug.com/548652
-    if index_by_class_name:
-      AssertNoKeyConflicts(classes, new_classes)
-    classes = dict(classes.items() + new_classes.items())
-  return classes
-
-
-# TODO(nednguyen): we should remove index_by_class_name once
-# benchmark_smoke_unittest in chromium/src/tools/perf no longer relied
-# naming collisions to reduce the number of smoked benchmark tests.
-# crbug.com/548652
-def DiscoverClassesInModule(module,
-                            base_class,
-                            index_by_class_name=False,
-                            directly_constructable=False):
-  """Discover all classes in |module| which subclass |base_class|.
-
-  Base classes that contain subclasses are ignored by default.
-
-  Args:
-    module: The module to search.
-    base_class: The base class to search for.
-    index_by_class_name: If True, use class name converted to
-        lowercase_with_underscores instead of module name in return dict keys.
-
-  Returns:
-    dict of {module_name: class} or {underscored_class_name: class}
-  """
-  classes = {}
-  for _, obj in inspect.getmembers(module):
-    # Ensure object is a class.
-    if not inspect.isclass(obj):
-      continue
-    # Include only subclasses of base_class.
-    if not issubclass(obj, base_class):
-      continue
-    # Exclude the base_class itself.
-    if obj is base_class:
-      continue
-    # Exclude protected or private classes.
-    if obj.__name__.startswith('_'):
-      continue
-    # Include only the module in which the class is defined.
-    # If a class is imported by another module, exclude those duplicates.
-    if obj.__module__ != module.__name__:
-      continue
-
-    if index_by_class_name:
-      key_name = camel_case.ToUnderscore(obj.__name__)
-    else:
-      key_name = module.__name__.split('.')[-1]
-    if not directly_constructable or IsDirectlyConstructable(obj):
-      if key_name in classes and index_by_class_name:
-        assert classes[key_name] is obj, (
-            'Duplicate key_name with different objs detected: '
-            'key=%s, obj1=%s, obj2=%s' % (key_name, classes[key_name], obj))
-      else:
-        classes[key_name] = obj
-
-  return classes
-
-
-def IsDirectlyConstructable(cls):
-  """Returns True if instance of |cls| can be construct without arguments."""
-  assert inspect.isclass(cls)
-  if not hasattr(cls, '__init__'):
-    # Case |class A: pass|.
-    return True
-  if cls.__init__ is object.__init__:
-    # Case |class A(object): pass|.
-    return True
-  # Case |class (object):| with |__init__| other than |object.__init__|.
-  args, _, _, defaults = inspect.getargspec(cls.__init__)
-  if defaults is None:
-    defaults = ()
-  # Return true if |self| is only arg without a default.
-  return len(args) == len(defaults) + 1
-
-
-_COUNTER = [0]
-
-
-def _GetUniqueModuleName():
-  _COUNTER[0] += 1
-  return "module_" + str(_COUNTER[0])
diff --git a/systrace/catapult/common/py_utils/py_utils/discover_unittest.py b/systrace/catapult/common/py_utils/py_utils/discover_unittest.py
deleted file mode 100644
index 137d85f..0000000
--- a/systrace/catapult/common/py_utils/py_utils/discover_unittest.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-import unittest
-
-from py_utils import discover
-
-
-class DiscoverTest(unittest.TestCase):
-
-  def setUp(self):
-    self._base_dir = os.path.join(os.path.dirname(__file__), 'test_data')
-    self._start_dir = os.path.join(self._base_dir, 'discoverable_classes')
-    self._base_class = Exception
-
-  def testDiscoverClassesWithIndexByModuleName(self):
-    classes = discover.DiscoverClasses(self._start_dir,
-                                       self._base_dir,
-                                       self._base_class,
-                                       index_by_class_name=False)
-
-    actual_classes = dict((name, cls.__name__)
-                          for name, cls in classes.iteritems())
-    expected_classes = {
-        'another_discover_dummyclass': 'DummyExceptionWithParameterImpl1',
-        'discover_dummyclass': 'DummyException',
-        'parameter_discover_dummyclass': 'DummyExceptionWithParameterImpl2'
-    }
-    self.assertEqual(actual_classes, expected_classes)
-
-  def testDiscoverDirectlyConstructableClassesWithIndexByClassName(self):
-    classes = discover.DiscoverClasses(self._start_dir,
-                                       self._base_dir,
-                                       self._base_class,
-                                       directly_constructable=True)
-
-    actual_classes = dict((name, cls.__name__)
-                          for name, cls in classes.iteritems())
-    expected_classes = {
-        'dummy_exception': 'DummyException',
-        'dummy_exception_impl1': 'DummyExceptionImpl1',
-        'dummy_exception_impl2': 'DummyExceptionImpl2',
-    }
-    self.assertEqual(actual_classes, expected_classes)
-
-  def testDiscoverClassesWithIndexByClassName(self):
-    classes = discover.DiscoverClasses(self._start_dir, self._base_dir,
-                                       self._base_class)
-
-    actual_classes = dict((name, cls.__name__)
-                          for name, cls in classes.iteritems())
-    expected_classes = {
-        'dummy_exception': 'DummyException',
-        'dummy_exception_impl1': 'DummyExceptionImpl1',
-        'dummy_exception_impl2': 'DummyExceptionImpl2',
-        'dummy_exception_with_parameter_impl1':
-            'DummyExceptionWithParameterImpl1',
-        'dummy_exception_with_parameter_impl2':
-            'DummyExceptionWithParameterImpl2'
-    }
-    self.assertEqual(actual_classes, expected_classes)
-
-  def testDiscoverClassesWithPatternAndIndexByModule(self):
-    classes = discover.DiscoverClasses(self._start_dir,
-                                       self._base_dir,
-                                       self._base_class,
-                                       pattern='another*',
-                                       index_by_class_name=False)
-
-    actual_classes = dict((name, cls.__name__)
-                          for name, cls in classes.iteritems())
-    expected_classes = {
-        'another_discover_dummyclass': 'DummyExceptionWithParameterImpl1'
-    }
-    self.assertEqual(actual_classes, expected_classes)
-
-  def testDiscoverDirectlyConstructableClassesWithPatternAndIndexByClassName(
-      self):
-    classes = discover.DiscoverClasses(self._start_dir,
-                                       self._base_dir,
-                                       self._base_class,
-                                       pattern='another*',
-                                       directly_constructable=True)
-
-    actual_classes = dict((name, cls.__name__)
-                          for name, cls in classes.iteritems())
-    expected_classes = {
-        'dummy_exception_impl1': 'DummyExceptionImpl1',
-        'dummy_exception_impl2': 'DummyExceptionImpl2',
-    }
-    self.assertEqual(actual_classes, expected_classes)
-
-  def testDiscoverClassesWithPatternAndIndexByClassName(self):
-    classes = discover.DiscoverClasses(self._start_dir,
-                                       self._base_dir,
-                                       self._base_class,
-                                       pattern='another*')
-
-    actual_classes = dict((name, cls.__name__)
-                          for name, cls in classes.iteritems())
-    expected_classes = {
-        'dummy_exception_impl1': 'DummyExceptionImpl1',
-        'dummy_exception_impl2': 'DummyExceptionImpl2',
-        'dummy_exception_with_parameter_impl1':
-            'DummyExceptionWithParameterImpl1',
-    }
-    self.assertEqual(actual_classes, expected_classes)
-
-
-class ClassWithoutInitDefOne:  # pylint: disable=old-style-class, no-init
-  pass
-
-
-class ClassWithoutInitDefTwo(object):
-  pass
-
-
-class ClassWhoseInitOnlyHasSelf(object):
-  def __init__(self):
-    pass
-
-
-class ClassWhoseInitWithDefaultArguments(object):
-  def __init__(self, dog=1, cat=None, cow=None, fud='a'):
-    pass
-
-
-class ClassWhoseInitWithDefaultArgumentsAndNonDefaultArguments(object):
-  def __init__(self, x, dog=1, cat=None, fish=None, fud='a'):
-    pass
-
-
-class IsDirectlyConstructableTest(unittest.TestCase):
-
-  def testIsDirectlyConstructableReturnsTrue(self):
-    self.assertTrue(discover.IsDirectlyConstructable(ClassWithoutInitDefOne))
-    self.assertTrue(discover.IsDirectlyConstructable(ClassWithoutInitDefTwo))
-    self.assertTrue(discover.IsDirectlyConstructable(ClassWhoseInitOnlyHasSelf))
-    self.assertTrue(
-        discover.IsDirectlyConstructable(ClassWhoseInitWithDefaultArguments))
-
-  def testIsDirectlyConstructableReturnsFalse(self):
-    self.assertFalse(
-        discover.IsDirectlyConstructable(
-            ClassWhoseInitWithDefaultArgumentsAndNonDefaultArguments))
diff --git a/systrace/catapult/common/py_utils/py_utils/expectations_parser.py b/systrace/catapult/common/py_utils/py_utils/expectations_parser.py
deleted file mode 100644
index 6fa9407..0000000
--- a/systrace/catapult/common/py_utils/py_utils/expectations_parser.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import re
-
-
-class ParseError(Exception):
-  pass
-
-
-class Expectation(object):
-  def __init__(self, reason, test, conditions, results):
-    """Constructor for expectations.
-
-    Args:
-      reason: String that indicates the reason for disabling.
-      test: String indicating which test is being disabled.
-      conditions: List of tags indicating which conditions to disable for.
-          Conditions are combined using logical and. Example: ['Mac', 'Debug']
-      results: List of outcomes for test. Example: ['Skip', 'Pass']
-    """
-    assert isinstance(reason, basestring) or reason is None
-    self._reason = reason
-    assert isinstance(test, basestring)
-    self._test = test
-    assert isinstance(conditions, list)
-    self._conditions = conditions
-    assert isinstance(results, list)
-    self._results = results
-
-  def __eq__(self, other):
-    return (self.reason == other.reason and
-            self.test == other.test and
-            self.conditions == other.conditions and
-            self.results == other.results)
-
-  @property
-  def reason(self):
-    return self._reason
-
-  @property
-  def test(self):
-    return self._test
-
-  @property
-  def conditions(self):
-    return self._conditions
-
-  @property
-  def results(self):
-    return self._results
-
-
-class TestExpectationParser(object):
-  """Parse expectations data in TA/DA format.
-
-  This parser covers the 'tagged' test lists format in:
-      bit.ly/chromium-test-list-format
-
-  Takes raw expectations data as a string read from the TA/DA expectation file
-  in the format:
-
-    # This is an example expectation file.
-    #
-    # tags: Mac Mac10.10 Mac10.11
-    # tags: Win Win8
-
-    crbug.com/123 [ Win ] benchmark/story [ Skip ]
-    ...
-  """
-
-  TAG_TOKEN = '# tags:'
-  _MATCH_STRING = r'^(?:(crbug.com/\d+) )?'  # The bug field (optional).
-  _MATCH_STRING += r'(?:\[ (.+) \] )?' # The label field (optional).
-  _MATCH_STRING += r'(\S+) ' # The test path field.
-  _MATCH_STRING += r'\[ ([^\[.]+) \]'  # The expectation field.
-  _MATCH_STRING += r'(\s+#.*)?$' # End comment (optional).
-  MATCHER = re.compile(_MATCH_STRING)
-
-  def __init__(self, raw_data):
-    self._tags = []
-    self._expectations = []
-    self._ParseRawExpectationData(raw_data)
-
-  def _ParseRawExpectationData(self, raw_data):
-    for count, line in list(enumerate(raw_data.splitlines(), start=1)):
-      # Handle metadata and comments.
-      if line.startswith(self.TAG_TOKEN):
-        for word in line[len(self.TAG_TOKEN):].split():
-          # Expectations must be after all tags are declared.
-          if self._expectations:
-            raise ParseError('Tag found after first expectation.')
-          self._tags.append(word)
-      elif line.startswith('#') or not line:
-        continue  # Ignore, it is just a comment or empty.
-      else:
-        self._expectations.append(
-            self._ParseExpectationLine(count, line, self._tags))
-
-  def _ParseExpectationLine(self, line_number, line, tags):
-    match = self.MATCHER.match(line)
-    if not match:
-      raise ParseError(
-          'Expectation has invalid syntax on line %d: %s'
-          % (line_number, line))
-    # Unused group is optional trailing comment.
-    reason, raw_conditions, test, results, _ = match.groups()
-    conditions = [c for c in raw_conditions.split()] if raw_conditions else []
-
-    for c in conditions:
-      if c not in tags:
-        raise ParseError(
-            'Condition %s not found in expectations tag data. Line %d'
-            % (c, line_number))
-    return Expectation(reason, test, conditions, [r for r in results.split()])
-
-  @property
-  def expectations(self):
-    return self._expectations
-
-  @property
-  def tags(self):
-    return self._tags
diff --git a/systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py b/systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py
deleted file mode 100644
index a842c4c..0000000
--- a/systrace/catapult/common/py_utils/py_utils/expectations_parser_unittest.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-import unittest
-
-from py_utils import expectations_parser
-
-
-class TestExpectationParserTest(unittest.TestCase):
-
-  def testInitWithGoodData(self):
-    good_data = """
-# This is a test expectation file.
-#
-# tags: tag1 tag2 tag3
-# tags: tag4 Mac Win Debug
-
-crbug.com/12345 [ Mac ] b1/s1 [ Skip ]
-crbug.com/23456 [ Mac Debug ] b1/s2 [ Skip ]
-"""
-    parser = expectations_parser.TestExpectationParser(good_data)
-    tags = ['tag1', 'tag2', 'tag3', 'tag4', 'Mac', 'Win', 'Debug']
-    self.assertEqual(parser.tags, tags)
-    expected_outcome = [
-        expectations_parser.Expectation(
-            'crbug.com/12345', 'b1/s1', ['Mac'], ['Skip']),
-        expectations_parser.Expectation(
-            'crbug.com/23456', 'b1/s2', ['Mac', 'Debug'], ['Skip'])
-    ]
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcome[i])
-
-  def testInitWithBadData(self):
-    bad_data = """
-# This is a test expectation file.
-#
-# tags: tag1 tag2 tag3
-# tags: tag4
-
-crbug.com/12345 [ Mac b1/s1 [ Skip ]
-"""
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(bad_data)
-
-  def testTagAfterExpectationsStart(self):
-    bad_data = """
-# This is a test expectation file.
-#
-# tags: tag1 tag2 tag3
-
-crbug.com/12345 [ tag1 ] b1/s1 [ Skip ]
-
-# tags: tag4
-"""
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(bad_data)
-
-  def testParseExpectationLineEverythingThere(self):
-    raw_data = '# tags: Mac\ncrbug.com/23456 [ Mac ] b1/s2 [ Skip ]'
-    parser = expectations_parser.TestExpectationParser(raw_data)
-    expected_outcome = [
-        expectations_parser.Expectation(
-            'crbug.com/23456', 'b1/s2', ['Mac'], ['Skip'])
-    ]
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcome[i])
-
-  def testParseExpectationLineBadTag(self):
-    raw_data = '# tags: None\ncrbug.com/23456 [ Mac ] b1/s2 [ Skip ]'
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(raw_data)
-
-  def testParseExpectationLineNoConditions(self):
-    raw_data = '# tags: All\ncrbug.com/12345 b1/s1 [ Skip ]'
-    parser = expectations_parser.TestExpectationParser(raw_data)
-    expected_outcome = [
-        expectations_parser.Expectation(
-            'crbug.com/12345', 'b1/s1', [], ['Skip']),
-    ]
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcome[i])
-
-  def testParseExpectationLineNoBug(self):
-    raw_data = '# tags: All\n[ All ] b1/s1 [ Skip ]'
-    parser = expectations_parser.TestExpectationParser(raw_data)
-    expected_outcome = [
-        expectations_parser.Expectation(
-            None, 'b1/s1', ['All'], ['Skip']),
-    ]
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcome[i])
-
-  def testParseExpectationLineNoBugNoConditions(self):
-    raw_data = '# tags: All\nb1/s1 [ Skip ]'
-    parser = expectations_parser.TestExpectationParser(raw_data)
-    expected_outcome = [
-        expectations_parser.Expectation(
-            None, 'b1/s1', [], ['Skip']),
-    ]
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcome[i])
-
-  def testParseExpectationLineMultipleConditions(self):
-    raw_data = ('# tags:All None Batman\n'
-                'crbug.com/123 [ All None Batman ] b1/s1 [ Skip ]')
-    parser = expectations_parser.TestExpectationParser(raw_data)
-    expected_outcome = [
-        expectations_parser.Expectation(
-            'crbug.com/123', 'b1/s1', ['All', 'None', 'Batman'], ['Skip']),
-    ]
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcome[i])
-
-  def testParseExpectationLineBadConditionBracket(self):
-    raw_data = '# tags: Mac\ncrbug.com/23456 ] Mac ] b1/s2 [ Skip ]'
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(raw_data)
-
-  def testParseExpectationLineBadResultBracket(self):
-    raw_data = '# tags: Mac\ncrbug.com/23456 ] Mac ] b1/s2 ] Skip ]'
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(raw_data)
-
-  def testParseExpectationLineBadConditionBracketSpacing(self):
-    raw_data = '# tags: Mac\ncrbug.com/2345 [Mac] b1/s1 [ Skip ]'
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(raw_data)
-
-  def testParseExpectationLineBadResultBracketSpacing(self):
-    raw_data = '# tags: Mac\ncrbug.com/2345 [ Mac ] b1/s1 [Skip]'
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(raw_data)
-
-  def testParseExpectationLineNoClosingConditionBracket(self):
-    raw_data = '# tags: Mac\ncrbug.com/2345 [ Mac b1/s1 [ Skip ]'
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(raw_data)
-
-  def testParseExpectationLineNoClosingResultBracket(self):
-    raw_data = '# tags: Mac\ncrbug.com/2345 [ Mac ] b1/s1 [ Skip'
-    with self.assertRaises(expectations_parser.ParseError):
-      expectations_parser.TestExpectationParser(raw_data)
-
-  def testParseExpectationLineUrlInTestName(self):
-    raw_data = (
-        '# tags: Mac\ncrbug.com/123 [ Mac ] b.1/http://google.com [ Skip ]')
-    expected_outcomes = [
-        expectations_parser.Expectation(
-            'crbug.com/123', 'b.1/http://google.com', ['Mac'], ['Skip'])
-    ]
-    parser = expectations_parser.TestExpectationParser(raw_data)
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcomes[i])
-
-  def testParseExpectationLineEndingComment(self):
-    raw_data = '# tags: Mac\ncrbug.com/23456 [ Mac ] b1/s2 [ Skip ] # abc 123'
-    parser = expectations_parser.TestExpectationParser(raw_data)
-    expected_outcome = [
-        expectations_parser.Expectation(
-            'crbug.com/23456', 'b1/s2', ['Mac'], ['Skip'])
-    ]
-    for i in range(len(parser.expectations)):
-      self.assertEqual(parser.expectations[i], expected_outcome[i])
diff --git a/systrace/catapult/common/py_utils/py_utils/lock.py b/systrace/catapult/common/py_utils/py_utils/lock.py
deleted file mode 100644
index aa9a095..0000000
--- a/systrace/catapult/common/py_utils/py_utils/lock.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import os
-
-LOCK_EX = None  # Exclusive lock
-LOCK_SH = None  # Shared lock
-LOCK_NB = None  # Non-blocking (LockException is raised if resource is locked)
-
-
-class LockException(Exception):
-  pass
-
-
-if os.name == 'nt':
-  import win32con    # pylint: disable=import-error
-  import win32file   # pylint: disable=import-error
-  import pywintypes  # pylint: disable=import-error
-  LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK
-  LOCK_SH = 0  # the default
-  LOCK_NB = win32con.LOCKFILE_FAIL_IMMEDIATELY
-  _OVERLAPPED = pywintypes.OVERLAPPED()
-elif os.name == 'posix':
-  import fcntl       # pylint: disable=import-error
-  LOCK_EX = fcntl.LOCK_EX
-  LOCK_SH = fcntl.LOCK_SH
-  LOCK_NB = fcntl.LOCK_NB
-
-
-@contextlib.contextmanager
-def FileLock(target_file, flags):
-  """ Lock the target file. Similar to AcquireFileLock but allow user to write:
-        with FileLock(f, LOCK_EX):
-           ...do stuff on file f without worrying about race condition
-    Args: see AcquireFileLock's documentation.
-  """
-  AcquireFileLock(target_file, flags)
-  try:
-    yield
-  finally:
-    ReleaseFileLock(target_file)
-
-
-def AcquireFileLock(target_file, flags):
-  """ Lock the target file. Note that if |target_file| is closed, the lock is
-    automatically released.
-  Args:
-    target_file: file handle of the file to acquire lock.
-    flags: can be any of the type LOCK_EX, LOCK_SH, LOCK_NB, or a bitwise
-      OR combination of flags.
-  """
-  assert flags in (
-      LOCK_EX, LOCK_SH, LOCK_NB, LOCK_EX | LOCK_NB, LOCK_SH | LOCK_NB)
-  if os.name == 'nt':
-    _LockImplWin(target_file, flags)
-  elif os.name == 'posix':
-    _LockImplPosix(target_file, flags)
-  else:
-    raise NotImplementedError('%s is not supported' % os.name)
-
-
-def ReleaseFileLock(target_file):
-  """ Unlock the target file.
-  Args:
-    target_file: file handle of the file to release the lock.
-  """
-  if os.name == 'nt':
-    _UnlockImplWin(target_file)
-  elif os.name == 'posix':
-    _UnlockImplPosix(target_file)
-  else:
-    raise NotImplementedError('%s is not supported' % os.name)
-
-# These implementations are based on
-# http://code.activestate.com/recipes/65203/
-
-def _LockImplWin(target_file, flags):
-  hfile = win32file._get_osfhandle(target_file.fileno())
-  try:
-    win32file.LockFileEx(hfile, flags, 0, -0x10000, _OVERLAPPED)
-  except pywintypes.error, exc_value:
-    if exc_value[0] == 33:
-      raise LockException('Error trying acquiring lock of %s: %s' %
-                          (target_file.name, exc_value[2]))
-    else:
-      raise
-
-
-def _UnlockImplWin(target_file):
-  hfile = win32file._get_osfhandle(target_file.fileno())
-  try:
-    win32file.UnlockFileEx(hfile, 0, -0x10000, _OVERLAPPED)
-  except pywintypes.error, exc_value:
-    if exc_value[0] == 158:
-      # error: (158, 'UnlockFileEx', 'The segment is already unlocked.')
-      # To match the 'posix' implementation, silently ignore this error
-      pass
-    else:
-      # Q:  Are there exceptions/codes we should be dealing with here?
-      raise
-
-
-def _LockImplPosix(target_file, flags):
-  try:
-    fcntl.flock(target_file.fileno(), flags)
-  except IOError, exc_value:
-    if exc_value[0] == 11 or exc_value[0] == 35:
-      raise LockException('Error trying acquiring lock of %s: %s' %
-                          (target_file.name, exc_value[1]))
-    else:
-      raise
-
-
-def _UnlockImplPosix(target_file):
-  fcntl.flock(target_file.fileno(), fcntl.LOCK_UN)
diff --git a/systrace/catapult/common/py_utils/py_utils/lock_unittest.py b/systrace/catapult/common/py_utils/py_utils/lock_unittest.py
deleted file mode 100644
index a260621..0000000
--- a/systrace/catapult/common/py_utils/py_utils/lock_unittest.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import multiprocessing
-import os
-import time
-import unittest
-import tempfile
-
-
-from py_utils import lock
-
-
-def _AppendTextToFile(file_name):
-  with open(file_name, 'a') as f:
-    lock.AcquireFileLock(f, lock.LOCK_EX)
-    # Sleep 100 ms to increase the chance of another process trying to acquire
-    # the lock of file as the same time.
-    time.sleep(0.1)
-    f.write('Start')
-    for _ in range(10000):
-      f.write('*')
-    f.write('End')
-
-
-def _ReadFileWithSharedLockBlockingThenWrite(read_file, write_file):
-  with open(read_file, 'r') as f:
-    lock.AcquireFileLock(f, lock.LOCK_SH)
-    content = f.read()
-    with open(write_file, 'a') as f2:
-      lock.AcquireFileLock(f2, lock.LOCK_EX)
-      f2.write(content)
-
-
-def _ReadFileWithExclusiveLockNonBlocking(target_file, status_file):
-  with open(target_file, 'r') as f:
-    try:
-      lock.AcquireFileLock(f, lock.LOCK_EX | lock.LOCK_NB)
-      with open(status_file, 'w') as f2:
-        f2.write('LockException was not raised')
-    except lock.LockException:
-      with open(status_file, 'w') as f2:
-        f2.write('LockException raised')
-
-
-class FileLockTest(unittest.TestCase):
-  def setUp(self):
-    tf = tempfile.NamedTemporaryFile(delete=False)
-    tf.close()
-    self.temp_file_path = tf.name
-
-  def tearDown(self):
-    os.remove(self.temp_file_path)
-
-  def testExclusiveLock(self):
-    processess = []
-    for _ in range(10):
-      p = multiprocessing.Process(
-          target=_AppendTextToFile, args=(self.temp_file_path,))
-      p.start()
-      processess.append(p)
-    for p in processess:
-      p.join()
-
-    # If the file lock works as expected, there should be 10 atomic writes of
-    # 'Start***...***End' to the file in some order, which lead to the final
-    # file content as below.
-    expected_file_content = ''.join((['Start'] + ['*']*10000 + ['End']) * 10)
-    with open(self.temp_file_path, 'r') as f:
-      # Use assertTrue instead of assertEquals since the strings are big, hence
-      # assertEquals's assertion failure will contain huge strings.
-      self.assertTrue(expected_file_content == f.read())
-
-  def testSharedLock(self):
-    tf = tempfile.NamedTemporaryFile(delete=False)
-    tf.close()
-    temp_write_file = tf.name
-    try:
-      with open(self.temp_file_path, 'w') as f:
-        f.write('0123456789')
-      with open(self.temp_file_path, 'r') as f:
-        # First, acquire a shared lock on temp_file_path
-        lock.AcquireFileLock(f, lock.LOCK_SH)
-
-        processess = []
-        # Create 10 processes that also try to acquire shared lock from
-        # temp_file_path then append temp_file_path's content to temp_write_file
-        for _ in range(10):
-          p = multiprocessing.Process(
-              target=_ReadFileWithSharedLockBlockingThenWrite,
-              args=(self.temp_file_path, temp_write_file))
-          p.start()
-          processess.append(p)
-        for p in processess:
-          p.join()
-
-      # temp_write_file should contains 10 copy of temp_file_path's content.
-      with open(temp_write_file, 'r') as f:
-        self.assertEquals('0123456789'*10, f.read())
-    finally:
-      os.remove(temp_write_file)
-
-  def testNonBlockingLockAcquiring(self):
-    tf = tempfile.NamedTemporaryFile(delete=False)
-    tf.close()
-    temp_status_file = tf.name
-    try:
-      with open(self.temp_file_path, 'w') as f:
-        lock.AcquireFileLock(f, lock.LOCK_EX)
-        p = multiprocessing.Process(
-            target=_ReadFileWithExclusiveLockNonBlocking,
-            args=(self.temp_file_path, temp_status_file))
-        p.start()
-        p.join()
-      with open(temp_status_file, 'r') as f:
-        self.assertEquals('LockException raised', f.read())
-    finally:
-      os.remove(temp_status_file)
-
-  def testUnlockBeforeClosingFile(self):
-    tf = tempfile.NamedTemporaryFile(delete=False)
-    tf.close()
-    temp_status_file = tf.name
-    try:
-      with open(self.temp_file_path, 'r') as f:
-        lock.AcquireFileLock(f, lock.LOCK_SH)
-        lock.ReleaseFileLock(f)
-        p = multiprocessing.Process(
-            target=_ReadFileWithExclusiveLockNonBlocking,
-            args=(self.temp_file_path, temp_status_file))
-        p.start()
-        p.join()
-      with open(temp_status_file, 'r') as f:
-        self.assertEquals('LockException was not raised', f.read())
-    finally:
-      os.remove(temp_status_file)
-
-  def testContextualLock(self):
-    tf = tempfile.NamedTemporaryFile(delete=False)
-    tf.close()
-    temp_status_file = tf.name
-    try:
-      with open(self.temp_file_path, 'r') as f:
-        with lock.FileLock(f, lock.LOCK_EX):
-          # Within this block, accessing self.temp_file_path from another
-          # process should raise exception.
-          p = multiprocessing.Process(
-              target=_ReadFileWithExclusiveLockNonBlocking,
-              args=(self.temp_file_path, temp_status_file))
-          p.start()
-          p.join()
-          with open(temp_status_file, 'r') as f:
-            self.assertEquals('LockException raised', f.read())
-
-        # Accessing self.temp_file_path here should not raise exception.
-        p = multiprocessing.Process(
-            target=_ReadFileWithExclusiveLockNonBlocking,
-            args=(self.temp_file_path, temp_status_file))
-        p.start()
-        p.join()
-      with open(temp_status_file, 'r') as f:
-        self.assertEquals('LockException was not raised', f.read())
-    finally:
-      os.remove(temp_status_file)
diff --git a/systrace/catapult/common/py_utils/py_utils/logging_util.py b/systrace/catapult/common/py_utils/py_utils/logging_util.py
deleted file mode 100644
index 4357851..0000000
--- a/systrace/catapult/common/py_utils/py_utils/logging_util.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""Logging util functions.
-
-It would be named logging, but other modules in this directory use the default
-logging module, so that would break them.
-"""
-
-import contextlib
-import logging
-
-@contextlib.contextmanager
-def CaptureLogs(file_stream):
-  if not file_stream:
-    # No file stream given, just don't capture logs.
-    yield
-    return
-
-  fh = logging.StreamHandler(file_stream)
-
-  logger = logging.getLogger()
-  # Try to copy the current log format, if one is set.
-  if logger.handlers and hasattr(logger.handlers[0], 'formatter'):
-    fh.formatter = logger.handlers[0].formatter
-  else:
-    fh.setFormatter(logging.Formatter(
-        '(%(levelname)s) %(asctime)s %(message)s'))
-  logger.addHandler(fh)
-
-  try:
-    yield
-  finally:
-    logger = logging.getLogger()
-    logger.removeHandler(fh)
diff --git a/systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py
deleted file mode 100644
index a957705..0000000
--- a/systrace/catapult/common/py_utils/py_utils/logging_util_unittest.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import logging
-import StringIO
-import unittest
-
-from py_utils import logging_util
-
-
-class LoggingUtilTest(unittest.TestCase):
-  def testCapture(self):
-    s = StringIO.StringIO()
-    with logging_util.CaptureLogs(s):
-      logging.fatal('test')
-
-    # Only assert ends with, since the logging message by default has the date
-    # in it.
-    self.assertTrue(s.getvalue().endswith('test\n'))
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/common/py_utils/py_utils/memory_debug.py b/systrace/catapult/common/py_utils/py_utils/memory_debug.py
deleted file mode 100755
index 864725d..0000000
--- a/systrace/catapult/common/py_utils/py_utils/memory_debug.py
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import heapq
-import logging
-import os
-import psutil
-import sys
-
-
-BYTE_UNITS = ['B', 'KiB', 'MiB', 'GiB']
-
-
-def FormatBytes(value):
-  def GetValueAndUnit(value):
-    for unit in BYTE_UNITS[:-1]:
-      if abs(value) < 1024.0:
-        return value, unit
-      value /= 1024.0
-    return value, BYTE_UNITS[-1]
-
-  if value is not None:
-    return '%.1f %s' % GetValueAndUnit(value)
-  else:
-    return 'N/A'
-
-
-def _GetProcessInfo(p):
-  pinfo = p.as_dict(attrs=['pid', 'name', 'memory_info'])
-  pinfo['mem_rss'] = getattr(pinfo['memory_info'], 'rss', 0)
-  return pinfo
-
-
-def _LogProcessInfo(pinfo, level):
-  pinfo['mem_rss_fmt'] = FormatBytes(pinfo['mem_rss'])
-  logging.log(level, '%(mem_rss_fmt)s (pid=%(pid)s)', pinfo)
-
-
-def LogHostMemoryUsage(top_n=10, level=logging.INFO):
-  if psutil.version_info < (2, 0):
-    logging.warning('psutil %s too old, upgrade to version 2.0 or higher'
-                    ' for memory usage information.', psutil.__version__)
-    return
-
-  # TODO(crbug.com/777865): Remove the following pylint disable. Even if we
-  # check for a recent enough psutil version above, the catapult presubmit
-  # builder (still running some old psutil) fails pylint checks due to API
-  # changes in psutil.
-  # pylint: disable=no-member
-  mem = psutil.virtual_memory()
-  logging.log(level, 'Used %s out of %s memory available.',
-              FormatBytes(mem.used), FormatBytes(mem.total))
-  logging.log(level, 'Memory usage of top %i processes groups', top_n)
-  pinfos_by_names = {}
-  for p in psutil.process_iter():
-    pinfo = _GetProcessInfo(p)
-    pname = pinfo['name']
-    if pname not in pinfos_by_names:
-      pinfos_by_names[pname] = {'name': pname, 'total_mem_rss': 0, 'pids': []}
-    pinfos_by_names[pname]['total_mem_rss'] += pinfo['mem_rss']
-    pinfos_by_names[pname]['pids'].append(str(pinfo['pid']))
-
-  sorted_pinfo_groups = heapq.nlargest(
-      top_n, pinfos_by_names.values(), key=lambda item: item['total_mem_rss'])
-  for group in sorted_pinfo_groups:
-    group['total_mem_rss_fmt'] = FormatBytes(group['total_mem_rss'])
-    group['pids_fmt'] = ', '.join(group['pids'])
-    logging.log(
-        level, '- %(name)s - %(total_mem_rss_fmt)s - pids: %(pids)s', group)
-  logging.log(level, 'Current process:')
-  pinfo = _GetProcessInfo(psutil.Process(os.getpid()))
-  _LogProcessInfo(pinfo, level)
-
-
-def main():
-  logging.basicConfig(level=logging.INFO)
-  LogHostMemoryUsage()
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/common/py_utils/py_utils/py_utils_unittest.py b/systrace/catapult/common/py_utils/py_utils/py_utils_unittest.py
deleted file mode 100644
index 588a5d5..0000000
--- a/systrace/catapult/common/py_utils/py_utils/py_utils_unittest.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-import sys
-import unittest
-
-import py_utils
-
-
-class PathTest(unittest.TestCase):
-
-  def testIsExecutable(self):
-    self.assertFalse(py_utils.IsExecutable('nonexistent_file'))
-    # We use actual files on disk instead of pyfakefs because the executable is
-    # set different on win that posix platforms and pyfakefs doesn't support
-    # win platform well.
-    self.assertFalse(py_utils.IsExecutable(_GetFileInTestDir('foo.txt')))
-    self.assertTrue(py_utils.IsExecutable(sys.executable))
-
-
-def _GetFileInTestDir(file_name):
-  return os.path.join(os.path.dirname(__file__), 'test_data', file_name)
-
-
-class WaitForTest(unittest.TestCase):
-
-  def testWaitForTrue(self):
-    def ReturnTrue():
-      return True
-    self.assertTrue(py_utils.WaitFor(ReturnTrue, .1))
-
-  def testWaitForFalse(self):
-    def ReturnFalse():
-      return False
-
-    with self.assertRaises(py_utils.TimeoutException):
-      py_utils.WaitFor(ReturnFalse, .1)
-
-  def testWaitForEventuallyTrue(self):
-    # Use list to pass to inner function in order to allow modifying the
-    # variable from the outer scope.
-    c = [0]
-    def ReturnCounterBasedValue():
-      c[0] += 1
-      return c[0] > 2
-
-    self.assertTrue(py_utils.WaitFor(ReturnCounterBasedValue, .5))
-
-  def testWaitForTrueLambda(self):
-    self.assertTrue(py_utils.WaitFor(lambda: True, .1))
-
-  def testWaitForFalseLambda(self):
-    with self.assertRaises(py_utils.TimeoutException):
-      py_utils.WaitFor(lambda: False, .1)
-
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/__init__.py b/systrace/catapult/common/py_utils/py_utils/refactor/__init__.py
deleted file mode 100644
index e3fbb5f..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/__init__.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Style-preserving Python code transforms.
-
-This module provides components for modifying and querying Python code. They can
-be used to build custom refactorings and linters.
-"""
-
-import functools
-import multiprocessing
-
-# pylint: disable=wildcard-import
-from py_utils.refactor.annotated_symbol import *
-from py_utils.refactor.module import Module
-
-
-def _TransformFile(transform, file_path):
-  module = Module(file_path)
-  result = transform(module)
-  module.Write()
-  return result
-
-
-def Transform(transform, file_paths):
-  transform = functools.partial(_TransformFile, transform)
-  return multiprocessing.Pool().map(transform, file_paths)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py
deleted file mode 100644
index 610bc15..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/__init__.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=wildcard-import
-from py_utils.refactor.annotated_symbol.class_definition import *
-from py_utils.refactor.annotated_symbol.function_definition import *
-from py_utils.refactor.annotated_symbol.import_statement import *
-from py_utils.refactor.annotated_symbol.reference import *
-from py_utils.refactor import snippet
-
-
-__all__ = [
-    'Annotate',
-
-    'Class',
-    'Function',
-    'Import',
-    'Reference',
-]
-
-
-# Specific symbol types with extra methods for manipulating them.
-# Python's full grammar is here:
-# https://docs.python.org/2/reference/grammar.html
-
-# Annotated Symbols have an Annotate classmethod that takes a symbol type and
-# list of children, and returns an instance of that annotated Symbol.
-
-ANNOTATED_SYMBOLS = (
-    AsName,
-    Class,
-    DottedName,
-    ImportFrom,
-    ImportName,
-    Function,
-)
-
-
-# Unfortunately, some logical groupings are not represented by a node in the
-# parse tree. To work around this, some annotated Symbols have an Annotate
-# classmethod that takes and returns a list of Snippets instead.
-
-ANNOTATED_GROUPINGS = (
-    Reference,
-)
-
-
-def Annotate(f):
-  """Return the syntax tree of the given file."""
-  return _AnnotateNode(snippet.Snippetize(f))
-
-
-def _AnnotateNode(node):
-  if not isinstance(node, snippet.Symbol):
-    return node
-
-  children = map(_AnnotateNode, node.children)
-
-  for symbol_type in ANNOTATED_GROUPINGS:
-    annotated_grouping = symbol_type.Annotate(children)
-    if annotated_grouping:
-      children = annotated_grouping
-      break
-
-  for symbol_type in ANNOTATED_SYMBOLS:
-    annotated_symbol = symbol_type.Annotate(node.type, children)
-    if annotated_symbol:
-      return annotated_symbol
-
-  return snippet.Symbol(node.type, children)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py
deleted file mode 100644
index 2e28e89..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/base_symbol.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from py_utils.refactor import snippet
-
-
-class AnnotatedSymbol(snippet.Symbol):
-  def __init__(self, symbol_type, children):
-    super(AnnotatedSymbol, self).__init__(symbol_type, children)
-    self._modified = False
-
-  @property
-  def modified(self):
-    if self._modified:
-      return True
-    return super(AnnotatedSymbol, self).modified
-
-  def __setattr__(self, name, value):
-    if (hasattr(self.__class__, name) and
-        isinstance(getattr(self.__class__, name), property)):
-      self._modified = True
-    return super(AnnotatedSymbol, self).__setattr__(name, value)
-
-  def Cut(self, child):
-    for i in xrange(len(self._children)):
-      if self._children[i] == child:
-        self._modified = True
-        del self._children[i]
-        break
-    else:
-      raise ValueError('%s is not in %s.' % (child, self))
-
-  def Paste(self, child):
-    self._modified = True
-    self._children.append(child)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py
deleted file mode 100644
index 814958f..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/class_definition.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import symbol
-
-from py_utils.refactor.annotated_symbol import base_symbol
-
-
-__all__ = [
-    'Class',
-]
-
-
-class Class(base_symbol.AnnotatedSymbol):
-  # pylint: disable=abstract-class-not-used
-
-  @classmethod
-  def Annotate(cls, symbol_type, children):
-    if symbol_type != symbol.stmt:
-      return None
-
-    compound_statement = children[0]
-    if compound_statement.type != symbol.compound_stmt:
-      return None
-
-    statement = compound_statement.children[0]
-    if statement.type == symbol.classdef:
-      return cls(statement.type, statement.children)
-    elif (statement.type == symbol.decorated and
-          statement.children[-1].type == symbol.classdef):
-      return cls(statement.type, statement.children)
-    else:
-      return None
-
-  @property
-  def suite(self):
-    # TODO: Complete.
-    raise NotImplementedError()
-
-  def FindChild(self, snippet_type, **kwargs):
-    return self.suite.FindChild(snippet_type, **kwargs)
-
-  def FindChildren(self, snippet_type):
-    return self.suite.FindChildren(snippet_type)
-
-  def Cut(self, child):
-    self.suite.Cut(child)
-
-  def Paste(self, child):
-    self.suite.Paste(child)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py
deleted file mode 100644
index 50a1672..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/function_definition.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import symbol
-
-from py_utils.refactor.annotated_symbol import base_symbol
-
-
-__all__ = [
-    'Function',
-]
-
-
-class Function(base_symbol.AnnotatedSymbol):
-  # pylint: disable=abstract-class-not-used
-
-  @classmethod
-  def Annotate(cls, symbol_type, children):
-    if symbol_type != symbol.stmt:
-      return None
-
-    compound_statement = children[0]
-    if compound_statement.type != symbol.compound_stmt:
-      return None
-
-    statement = compound_statement.children[0]
-    if statement.type == symbol.funcdef:
-      return cls(statement.type, statement.children)
-    elif (statement.type == symbol.decorated and
-          statement.children[-1].type == symbol.funcdef):
-      return cls(statement.type, statement.children)
-    else:
-      return None
-
-  @property
-  def suite(self):
-    # TODO: Complete.
-    raise NotImplementedError()
-
-  def FindChild(self, snippet_type, **kwargs):
-    return self.suite.FindChild(snippet_type, **kwargs)
-
-  def FindChildren(self, snippet_type):
-    return self.suite.FindChildren(snippet_type)
-
-  def Cut(self, child):
-    self.suite.Cut(child)
-
-  def Paste(self, child):
-    self.suite.Paste(child)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py
deleted file mode 100644
index 5c38c10..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/import_statement.py
+++ /dev/null
@@ -1,322 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import itertools
-import keyword
-import symbol
-import token
-
-from py_utils.refactor.annotated_symbol import base_symbol
-from py_utils.refactor import snippet
-
-
-__all__ = [
-    'AsName',
-    'DottedName',
-    'Import',
-    'ImportFrom',
-    'ImportName',
-]
-
-
-class DottedName(base_symbol.AnnotatedSymbol):
-  @classmethod
-  def Annotate(cls, symbol_type, children):
-    if symbol_type != symbol.dotted_name:
-      return None
-    return cls(symbol_type, children)
-
-  @property
-  def value(self):
-    return ''.join(token_snippet.value for token_snippet in self._children)
-
-  @value.setter
-  def value(self, value):
-    value_parts = value.split('.')
-    for value_part in value_parts:
-      if keyword.iskeyword(value_part):
-        raise ValueError('%s is a reserved keyword.' % value_part)
-
-    # If we have too many children, cut the list down to size.
-    self._children = self._children[:len(value_parts)*2-1]
-
-    # Update child nodes.
-    for child, value_part in itertools.izip_longest(
-        self._children[::2], value_parts):
-      if child:
-        # Modify existing children. This helps preserve comments and spaces.
-        child.value = value_part
-      else:
-        # Add children as needed.
-        self._children.append(snippet.TokenSnippet.Create(token.DOT, '.'))
-        self._children.append(
-            snippet.TokenSnippet.Create(token.NAME, value_part))
-
-
-class AsName(base_symbol.AnnotatedSymbol):
-  @classmethod
-  def Annotate(cls, symbol_type, children):
-    if (symbol_type != symbol.dotted_as_name and
-        symbol_type != symbol.import_as_name):
-      return None
-    return cls(symbol_type, children)
-
-  @property
-  def name(self):
-    return self.children[0].value
-
-  @name.setter
-  def name(self, value):
-    self.children[0].value = value
-
-  @property
-  def alias(self):
-    if len(self.children) < 3:
-      return None
-    return self.children[2].value
-
-  @alias.setter
-  def alias(self, value):
-    if keyword.iskeyword(value):
-      raise ValueError('%s is a reserved keyword.' % value)
-
-    if value:
-      if len(self.children) < 3:
-        # If we currently have no alias, add one.
-        self.children.append(
-            snippet.TokenSnippet.Create(token.NAME, 'as', (0, 1)))
-        self.children.append(
-            snippet.TokenSnippet.Create(token.NAME, value, (0, 1)))
-      else:
-        # We already have an alias. Just update the value.
-        self.children[2].value = value
-    else:
-      # Removing the alias. Strip the "as foo".
-      self.children = [self.children[0]]
-
-
-class Import(base_symbol.AnnotatedSymbol):
-  """An import statement.
-
-  Example:
-    import a.b.c as d
-    from a.b import c as d
-
-  In these examples,
-    path == 'a.b.c'
-    alias == 'd'
-    root == 'a.b' (only for "from" imports)
-    module == 'c' (only for "from" imports)
-    name (read-only) == the name used by references to the module, which is the
-    alias if there is one, the full module path in "full" imports, and the
-    module name in "from" imports.
-  """
-  @property
-  def has_from(self):
-    """Returns True iff the import statment is of the form "from x import y"."""
-    raise NotImplementedError()
-
-  @property
-  def values(self):
-    raise NotImplementedError()
-
-  @property
-  def paths(self):
-    raise NotImplementedError()
-
-  @property
-  def aliases(self):
-    raise NotImplementedError()
-
-  @property
-  def path(self):
-    """The full dotted path of the module."""
-    raise NotImplementedError()
-
-  @path.setter
-  def path(self, value):
-    raise NotImplementedError()
-
-  @property
-  def alias(self):
-    """The alias, if the module is renamed with "as". None otherwise."""
-    raise NotImplementedError()
-
-  @alias.setter
-  def alias(self, value):
-    raise NotImplementedError()
-
-  @property
-  def name(self):
-    """The name used to reference this import's module."""
-    raise NotImplementedError()
-
-
-class ImportName(Import):
-  @classmethod
-  def Annotate(cls, symbol_type, children):
-    if symbol_type != symbol.import_stmt:
-      return None
-    if children[0].type != symbol.import_name:
-      return None
-    assert len(children) == 1
-    return cls(symbol_type, children[0].children)
-
-  @property
-  def has_from(self):
-    return False
-
-  @property
-  def values(self):
-    dotted_as_names = self.children[1]
-    return tuple((dotted_as_name.name, dotted_as_name.alias)
-                 for dotted_as_name in dotted_as_names.children[::2])
-
-  @property
-  def paths(self):
-    return tuple(path for path, _ in self.values)
-
-  @property
-  def aliases(self):
-    return tuple(alias for _, alias in self.values)
-
-  @property
-  def _dotted_as_name(self):
-    dotted_as_names = self.children[1]
-    if len(dotted_as_names.children) != 1:
-      raise NotImplementedError(
-          'This method only works if the statement has one import.')
-    return dotted_as_names.children[0]
-
-  @property
-  def path(self):
-    return self._dotted_as_name.name
-
-  @path.setter
-  def path(self, value):  # pylint: disable=arguments-differ
-    self._dotted_as_name.name = value
-
-  @property
-  def alias(self):
-    return self._dotted_as_name.alias
-
-  @alias.setter
-  def alias(self, value):  # pylint: disable=arguments-differ
-    self._dotted_as_name.alias = value
-
-  @property
-  def name(self):
-    if self.alias:
-      return self.alias
-    else:
-      return self.path
-
-
-class ImportFrom(Import):
-  @classmethod
-  def Annotate(cls, symbol_type, children):
-    if symbol_type != symbol.import_stmt:
-      return None
-    if children[0].type != symbol.import_from:
-      return None
-    assert len(children) == 1
-    return cls(symbol_type, children[0].children)
-
-  @property
-  def has_from(self):
-    return True
-
-  @property
-  def values(self):
-    try:
-      import_as_names = self.FindChild(symbol.import_as_names)
-    except ValueError:
-      return (('*', None),)
-
-    return tuple((import_as_name.name, import_as_name.alias)
-                 for import_as_name in import_as_names.children[::2])
-
-  @property
-  def paths(self):
-    module = self.module
-    return tuple('.'.join((module, name)) for name, _ in self.values)
-
-  @property
-  def aliases(self):
-    return tuple(alias for _, alias in self.values)
-
-  @property
-  def root(self):
-    return self.FindChild(symbol.dotted_name).value
-
-  @root.setter
-  def root(self, value):
-    self.FindChild(symbol.dotted_name).value = value
-
-  @property
-  def _import_as_name(self):
-    try:
-      import_as_names = self.FindChild(symbol.import_as_names)
-    except ValueError:
-      return None
-
-    if len(import_as_names.children) != 1:
-      raise NotImplementedError(
-          'This method only works if the statement has one import.')
-
-    return import_as_names.children[0]
-
-  @property
-  def module(self):
-    import_as_name = self._import_as_name
-    if import_as_name:
-      return import_as_name.name
-    else:
-      return '*'
-
-  @module.setter
-  def module(self, value):
-    if keyword.iskeyword(value):
-      raise ValueError('%s is a reserved keyword.' % value)
-
-    import_as_name = self._import_as_name
-    if value == '*':
-      # TODO: Implement this.
-      raise NotImplementedError()
-    else:
-      if import_as_name:
-        import_as_name.name = value
-      else:
-        # TODO: Implement this.
-        raise NotImplementedError()
-
-  @property
-  def path(self):
-    return '.'.join((self.root, self.module))
-
-  @path.setter
-  def path(self, value):  # pylint: disable=arguments-differ
-    self.root, _, self.module = value.rpartition('.')
-
-  @property
-  def alias(self):
-    import_as_name = self._import_as_name
-    if import_as_name:
-      return import_as_name.alias
-    else:
-      return None
-
-  @alias.setter
-  def alias(self, value):  # pylint: disable=arguments-differ
-    import_as_name = self._import_as_name
-    if not import_as_name:
-      raise NotImplementedError('Cannot change alias for "import *".')
-    import_as_name.alias = value
-
-  @property
-  def name(self):
-    if self.alias:
-      return self.alias
-    else:
-      return self.module
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py b/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py
deleted file mode 100644
index 757c57f..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/annotated_symbol/reference.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import itertools
-import symbol
-import token
-
-from py_utils.refactor.annotated_symbol import base_symbol
-from py_utils.refactor import snippet
-
-
-__all__ = [
-    'Reference',
-]
-
-
-class Reference(base_symbol.AnnotatedSymbol):
-  @classmethod
-  def Annotate(cls, nodes):
-    if not nodes:
-      return None
-    if nodes[0].type != symbol.atom:
-      return None
-    if not nodes[0].children or nodes[0].children[0].type != token.NAME:
-      return None
-
-    for i in xrange(1, len(nodes)):
-      if not nodes:
-        break
-      if nodes[i].type != symbol.trailer:
-        break
-      if len(nodes[i].children) != 2:
-        break
-      if (nodes[i].children[0].type != token.DOT or
-          nodes[i].children[1].type != token.NAME):
-        break
-    else:
-      i = len(nodes)
-
-    return [cls(nodes[:i])] + nodes[i:]
-
-  def __init__(self, children):
-    super(Reference, self).__init__(-1, children)
-
-  @property
-  def type_name(self):
-    return 'attribute_reference'
-
-  @property
-  def value(self):
-    return ''.join(token_snippet.value
-                   for child in self.children
-                   for token_snippet in child.children)
-
-  @value.setter
-  def value(self, value):
-    value_parts = value.split('.')
-
-    # If we have too many children, cut the list down to size.
-    self._children = self._children[:len(value_parts)]
-
-    # Update child nodes.
-    for child, value_part in itertools.izip_longest(
-        self._children, value_parts):
-      if child:
-        # Modify existing children. This helps preserve comments and spaces.
-        child.children[-1].value = value_part
-      else:
-        # Add children as needed.
-        token_snippets = [
-            snippet.TokenSnippet.Create(token.DOT, '.'),
-            snippet.TokenSnippet.Create(token.NAME, value_part),
-        ]
-        self._children.append(snippet.Symbol(symbol.trailer, token_snippets))
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/module.py b/systrace/catapult/common/py_utils/py_utils/refactor/module.py
deleted file mode 100644
index d6eae00..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/module.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from py_utils.refactor import annotated_symbol
-
-
-class Module(object):
-
-  def __init__(self, file_path):
-    self._file_path = file_path
-
-    with open(self._file_path, 'r') as f:
-      self._snippet = annotated_symbol.Annotate(f)
-
-  @property
-  def file_path(self):
-    return self._file_path
-
-  @property
-  def modified(self):
-    return self._snippet.modified
-
-  def FindAll(self, snippet_type):
-    return self._snippet.FindAll(snippet_type)
-
-  def FindChildren(self, snippet_type):
-    return self._snippet.FindChildren(snippet_type)
-
-  def Write(self):
-    """Write modifications to the file."""
-    if not self.modified:
-      return
-
-    # Stringify before opening the file for writing.
-    # If we fail, we won't truncate the file.
-    string = str(self._snippet)
-    with open(self._file_path, 'w') as f:
-      f.write(string)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py b/systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py
deleted file mode 100644
index 5fa953e..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/offset_token.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import collections
-import itertools
-import token
-import tokenize
-
-
-def _Pairwise(iterable):
-  """s -> (None, s0), (s0, s1), (s1, s2), (s2, s3), ..."""
-  a, b = itertools.tee(iterable)
-  a = itertools.chain((None,), a)
-  return itertools.izip(a, b)
-
-
-class OffsetToken(object):
-  """A Python token with a relative position.
-
-  A token is represented by a type defined in Python's token module, a string
-  representing the content, and an offset. Using relative positions makes it
-  easy to insert and remove tokens.
-  """
-
-  def __init__(self, token_type, string, offset):
-    self._type = token_type
-    self._string = string
-    self._offset = offset
-
-  @property
-  def type(self):
-    return self._type
-
-  @property
-  def type_name(self):
-    return token.tok_name[self._type]
-
-  @property
-  def string(self):
-    return self._string
-
-  @string.setter
-  def string(self, value):
-    self._string = value
-
-  @property
-  def offset(self):
-    return self._offset
-
-  def __str__(self):
-    return str((self.type_name, self.string, self.offset))
-
-
-def Tokenize(f):
-  """Read tokens from a file-like object.
-
-  Args:
-    f: Any object that has a readline method.
-
-  Returns:
-    A collections.deque containing OffsetTokens. Deques are cheaper and easier
-    to manipulate sequentially than lists.
-  """
-  f.seek(0)
-  tokenize_tokens = tokenize.generate_tokens(f.readline)
-
-  offset_tokens = collections.deque()
-  for prev_token, next_token in _Pairwise(tokenize_tokens):
-    token_type, string, (srow, scol), _, _ = next_token
-    if not prev_token:
-      offset_tokens.append(OffsetToken(token_type, string, (0, 0)))
-    else:
-      erow, ecol = prev_token[3]
-      if erow == srow:
-        offset_tokens.append(OffsetToken(token_type, string, (0, scol - ecol)))
-      else:
-        offset_tokens.append(OffsetToken(
-            token_type, string, (srow - erow, scol)))
-
-  return offset_tokens
-
-
-def Untokenize(offset_tokens):
-  """Return the string representation of an iterable of OffsetTokens."""
-  # Make a copy. Don't modify the original.
-  offset_tokens = collections.deque(offset_tokens)
-
-  # Strip leading NL tokens.
-  while offset_tokens[0].type == tokenize.NL:
-    offset_tokens.popleft()
-
-  # Strip leading vertical whitespace.
-  first_token = offset_tokens.popleft()
-  # Take care not to modify the existing token. Create a new one in its place.
-  first_token = OffsetToken(first_token.type, first_token.string,
-                            (0, first_token.offset[1]))
-  offset_tokens.appendleft(first_token)
-
-  # Convert OffsetTokens to tokenize tokens.
-  tokenize_tokens = []
-  row = 1
-  col = 0
-  for t in offset_tokens:
-    offset_row, offset_col = t.offset
-    if offset_row == 0:
-      col += offset_col
-    else:
-      row += offset_row
-      col = offset_col
-    tokenize_tokens.append((t.type, t.string, (row, col), (row, col), None))
-
-  # tokenize can't handle whitespace before line continuations.
-  # So add a space.
-  return tokenize.untokenize(tokenize_tokens).replace('\\\n', ' \\\n')
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor/snippet.py b/systrace/catapult/common/py_utils/py_utils/refactor/snippet.py
deleted file mode 100644
index b98561a..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor/snippet.py
+++ /dev/null
@@ -1,244 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import parser
-import symbol
-import sys
-import token
-import tokenize
-
-from py_utils.refactor import offset_token
-
-
-class Snippet(object):
-  """A node in the Python parse tree.
-
-  The Python grammar is defined at:
-  https://docs.python.org/2/reference/grammar.html
-
-  There are two types of Snippets:
-    TokenSnippets are leaf nodes containing actual text.
-    Symbols are internal nodes representing higher-level groupings, and are
-        defined by the left-hand sides of the BNFs in the above link.
-  """
-  @property
-  def type(self):
-    raise NotImplementedError()
-
-  @property
-  def type_name(self):
-    raise NotImplementedError()
-
-  @property
-  def children(self):
-    """Return a list of this node's children."""
-    raise NotImplementedError()
-
-  @property
-  def tokens(self):
-    """Return a tuple of the tokens this Snippet contains."""
-    raise NotImplementedError()
-
-  def PrintTree(self, indent=0, stream=sys.stdout):
-    """Spew a pretty-printed parse tree. Mostly useful for debugging."""
-    raise NotImplementedError()
-
-  def __str__(self):
-    return offset_token.Untokenize(self.tokens)
-
-  def FindAll(self, snippet_type):
-    if isinstance(snippet_type, int):
-      if self.type == snippet_type:
-        yield self
-    else:
-      if isinstance(self, snippet_type):
-        yield self
-
-    for child in self.children:
-      for snippet in child.FindAll(snippet_type):
-        yield snippet
-
-  def FindChild(self, snippet_type, **kwargs):
-    for child in self.children:
-      if isinstance(snippet_type, int):
-        if child.type != snippet_type:
-          continue
-      else:
-        if not isinstance(child, snippet_type):
-          continue
-
-      for attribute, value in kwargs:
-        if getattr(child, attribute) != value:
-          break
-      else:
-        return child
-    raise ValueError('%s is not in %s. Children are: %s' %
-                     (snippet_type, self, self.children))
-
-  def FindChildren(self, snippet_type):
-    if isinstance(snippet_type, int):
-      for child in self.children:
-        if child.type == snippet_type:
-          yield child
-    else:
-      for child in self.children:
-        if isinstance(child, snippet_type):
-          yield child
-
-
-class TokenSnippet(Snippet):
-  """A Snippet containing a list of tokens.
-
-  A list of tokens may start with any number of comments and non-terminating
-  newlines, but must end with a syntactically meaningful token.
-  """
-
-  def __init__(self, token_type, tokens):
-    # For operators and delimiters, the TokenSnippet's type may be more specific
-    # than the type of the constituent token. E.g. the TokenSnippet type is
-    # token.DOT, but the token type is token.OP. This is because the parser
-    # has more context than the tokenizer.
-    self._type = token_type
-    self._tokens = tokens
-    self._modified = False
-
-  @classmethod
-  def Create(cls, token_type, string, offset=(0, 0)):
-    return cls(token_type,
-               [offset_token.OffsetToken(token_type, string, offset)])
-
-  @property
-  def type(self):
-    return self._type
-
-  @property
-  def type_name(self):
-    return token.tok_name[self.type]
-
-  @property
-  def value(self):
-    return self._tokens[-1].string
-
-  @value.setter
-  def value(self, value):
-    self._tokens[-1].string = value
-    self._modified = True
-
-  @property
-  def children(self):
-    return []
-
-  @property
-  def tokens(self):
-    return tuple(self._tokens)
-
-  @property
-  def modified(self):
-    return self._modified
-
-  def PrintTree(self, indent=0, stream=sys.stdout):
-    stream.write(' ' * indent)
-    if not self.tokens:
-      print >> stream, self.type_name
-      return
-
-    print >> stream, '%-4s' % self.type_name, repr(self.tokens[0].string)
-    for tok in self.tokens[1:]:
-      stream.write(' ' * indent)
-      print >> stream, ' ' * max(len(self.type_name), 4), repr(tok.string)
-
-
-class Symbol(Snippet):
-  """A Snippet containing sub-Snippets.
-
-  The possible types and type_names are defined in Python's symbol module."""
-
-  def __init__(self, symbol_type, children):
-    self._type = symbol_type
-    self._children = children
-
-  @property
-  def type(self):
-    return self._type
-
-  @property
-  def type_name(self):
-    return symbol.sym_name[self.type]
-
-  @property
-  def children(self):
-    return self._children
-
-  @children.setter
-  def children(self, value):  # pylint: disable=arguments-differ
-    self._children = value
-
-  @property
-  def tokens(self):
-    tokens = []
-    for child in self.children:
-      tokens += child.tokens
-    return tuple(tokens)
-
-  @property
-  def modified(self):
-    return any(child.modified for child in self.children)
-
-  def PrintTree(self, indent=0, stream=sys.stdout):
-    stream.write(' ' * indent)
-
-    # If there's only one child, collapse it onto the same line.
-    node = self
-    while len(node.children) == 1 and len(node.children[0].children) == 1:
-      print >> stream, node.type_name,
-      node = node.children[0]
-
-    print >> stream, node.type_name
-    for child in node.children:
-      child.PrintTree(indent + 2, stream)
-
-
-def Snippetize(f):
-  """Return the syntax tree of the given file."""
-  f.seek(0)
-  syntax_tree = parser.st2list(parser.suite(f.read()))
-  tokens = offset_token.Tokenize(f)
-
-  snippet = _SnippetizeNode(syntax_tree, tokens)
-  assert not tokens
-  return snippet
-
-
-def _SnippetizeNode(node, tokens):
-  # The parser module gives a syntax tree that discards comments,
-  # non-terminating newlines, and whitespace information. Use the tokens given
-  # by the tokenize module to annotate the syntax tree with the information
-  # needed to exactly reproduce the original source code.
-  node_type = node[0]
-
-  if node_type >= token.NT_OFFSET:
-    # Symbol.
-    children = tuple(_SnippetizeNode(child, tokens) for child in node[1:])
-    return Symbol(node_type, children)
-  else:
-    # Token.
-    grabbed_tokens = []
-    while tokens and (
-        tokens[0].type == tokenize.COMMENT or tokens[0].type == tokenize.NL):
-      grabbed_tokens.append(tokens.popleft())
-
-    # parser has 2 NEWLINEs right before the end.
-    # tokenize has 0 or 1 depending on if the file has one.
-    # Create extra nodes without consuming tokens to account for this.
-    if node_type == token.NEWLINE:
-      for tok in tokens:
-        if tok.type == token.ENDMARKER:
-          return TokenSnippet(node_type, grabbed_tokens)
-        if tok.type != token.DEDENT:
-          break
-
-    assert tokens[0].type == token.OP or node_type == tokens[0].type
-
-    grabbed_tokens.append(tokens.popleft())
-    return TokenSnippet(node_type, grabbed_tokens)
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor_util/__init__.py b/systrace/catapult/common/py_utils/py_utils/refactor_util/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor_util/__init__.py
+++ /dev/null
diff --git a/systrace/catapult/common/py_utils/py_utils/refactor_util/move.py b/systrace/catapult/common/py_utils/py_utils/refactor_util/move.py
deleted file mode 100644
index d68f93b..0000000
--- a/systrace/catapult/common/py_utils/py_utils/refactor_util/move.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import functools
-import os
-import sys
-
-from py_utils import refactor
-
-
-def Run(sources, target, files_to_update):
-  """Move modules and update imports.
-
-  Args:
-    sources: List of source module or package paths.
-    target: Destination module or package path.
-    files_to_update: Modules whose imports we should check for changes.
-  """
-  # TODO(dtu): Support moving classes and functions.
-  moves = tuple(_Move(source, target) for source in sources)
-
-  # Update imports and references.
-  refactor.Transform(functools.partial(_Update, moves), files_to_update)
-
-  # Move files.
-  for move in moves:
-    os.rename(move.source_path, move.target_path)
-
-
-def _Update(moves, module):
-  for import_statement in module.FindAll(refactor.Import):
-    for move in moves:
-      try:
-        if move.UpdateImportAndReferences(module, import_statement):
-          break
-      except NotImplementedError as e:
-        print >> sys.stderr, 'Error updating %s: %s' % (module.file_path, e)
-
-
-class _Move(object):
-
-  def __init__(self, source, target):
-    self._source_path = os.path.realpath(source)
-    self._target_path = os.path.realpath(target)
-
-    if os.path.isdir(self._target_path):
-      self._target_path = os.path.join(
-          self._target_path, os.path.basename(self._source_path))
-
-  @property
-  def source_path(self):
-    return self._source_path
-
-  @property
-  def target_path(self):
-    return self._target_path
-
-  @property
-  def source_module_path(self):
-    return _ModulePath(self._source_path)
-
-  @property
-  def target_module_path(self):
-    return _ModulePath(self._target_path)
-
-  def UpdateImportAndReferences(self, module, import_statement):
-    """Update an import statement in a module and all its references..
-
-    Args:
-      module: The refactor.Module to update.
-      import_statement:  The refactor.Import to update.
-
-    Returns:
-      True if the import statement was updated, or False if the import statement
-      needed no updating.
-    """
-    statement_path_parts = import_statement.path.split('.')
-    source_path_parts = self.source_module_path.split('.')
-    if source_path_parts != statement_path_parts[:len(source_path_parts)]:
-      return False
-
-    # Update import statement.
-    old_name_parts = import_statement.name.split('.')
-    new_name_parts = ([self.target_module_path] +
-                      statement_path_parts[len(source_path_parts):])
-    import_statement.path = '.'.join(new_name_parts)
-    new_name = import_statement.name
-
-    # Update references.
-    for reference in module.FindAll(refactor.Reference):
-      reference_parts = reference.value.split('.')
-      if old_name_parts != reference_parts[:len(old_name_parts)]:
-        continue
-
-      new_reference_parts = [new_name] + reference_parts[len(old_name_parts):]
-      reference.value = '.'.join(new_reference_parts)
-
-    return True
-
-
-def _BaseDir(module_path):
-  if not os.path.isdir(module_path):
-    module_path = os.path.dirname(module_path)
-
-  while '__init__.py' in os.listdir(module_path):
-    module_path = os.path.dirname(module_path)
-
-  return module_path
-
-
-def _ModulePath(module_path):
-  if os.path.split(module_path)[1] == '__init__.py':
-    module_path = os.path.dirname(module_path)
-  rel_path = os.path.relpath(module_path, _BaseDir(module_path))
-  return os.path.splitext(rel_path)[0].replace(os.sep, '.')
diff --git a/systrace/catapult/common/py_utils/py_utils/retry_util.py b/systrace/catapult/common/py_utils/py_utils/retry_util.py
deleted file mode 100644
index e5826ca..0000000
--- a/systrace/catapult/common/py_utils/py_utils/retry_util.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2018 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import functools
-import logging
-import time
-
-
-def RetryOnException(exc_type, retries):
-  """Decorator to retry running a function if an exception is raised.
-
-  Implements exponential backoff to wait between each retry attempt, starting
-  with 1 second.
-
-  Note: the default number of retries is defined on the decorator, the decorated
-  function *must* also receive a "retries" argument (although its assigned
-  default value is ignored), and clients of the funtion may override the actual
-  number of retries at the call site.
-
-  The "unused" retries argument on the decorated function must be given to
-  keep pylint happy and to avoid breaking the Principle of Least Astonishment
-  if the decorator were to change the signature of the function.
-
-  For example:
-
-    @retry_util.RetryOnException(OSError, retries=3)  # default no. of retries
-    def ProcessSomething(thing, retries=None):  # this default value is ignored
-      del retries  # Unused. Handled by the decorator.
-      # Do your thing processing here, maybe sometimes raising exeptions.
-
-    ProcessSomething(a_thing)  # retries 3 times.
-    ProcessSomething(b_thing, retries=5)  # retries 5 times.
-
-  Args:
-    exc_type: An exception type (or a tuple of them), on which to retry.
-    retries: Default number of extra attempts to try, the caller may also
-      override this number. If an exception is raised during the last try,
-      then the exception is not caught and passed back to the caller.
-  """
-  def Decorator(f):
-    @functools.wraps(f)
-    def Wrapper(*args, **kwargs):
-      wait = 1
-      kwargs.setdefault('retries', retries)
-      for _ in xrange(kwargs['retries']):
-        try:
-          return f(*args, **kwargs)
-        except exc_type as exc:
-          logging.warning(
-              '%s raised %s, will retry in %d second%s ...',
-              f.__name__, type(exc).__name__, wait, '' if wait == 1 else 's')
-          time.sleep(wait)
-          wait *= 2
-      # Last try with no exception catching.
-      return f(*args, **kwargs)
-    return Wrapper
-  return Decorator
diff --git a/systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py b/systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py
deleted file mode 100644
index 151f88e..0000000
--- a/systrace/catapult/common/py_utils/py_utils/retry_util_unittest.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import mock
-import unittest
-
-from py_utils import retry_util
-
-
-class RetryOnExceptionTest(unittest.TestCase):
-  def setUp(self):
-    self.num_calls = 0
-    # Patch time.sleep to make tests run faster (skip waits) and also check
-    # that exponential backoff is implemented correctly.
-    patcher = mock.patch('time.sleep')
-    self.time_sleep = patcher.start()
-    self.addCleanup(patcher.stop)
-
-  def testNoExceptionsReturnImmediately(self):
-    @retry_util.RetryOnException(Exception, retries=3)
-    def Test(retries=None):
-      del retries
-      self.num_calls += 1
-      return 'OK!'
-
-    # The function is called once and returns the expected value.
-    self.assertEqual(Test(), 'OK!')
-    self.assertEqual(self.num_calls, 1)
-
-  def testRaisesExceptionIfAlwaysFailing(self):
-    @retry_util.RetryOnException(KeyError, retries=5)
-    def Test(retries=None):
-      del retries
-      self.num_calls += 1
-      raise KeyError('oops!')
-
-    # The exception is eventually raised.
-    with self.assertRaises(KeyError):
-      Test()
-    # The function is called the expected number of times.
-    self.assertEqual(self.num_calls, 6)
-    # Waits between retries do follow exponential backoff.
-    self.assertEqual(
-        self.time_sleep.call_args_list,
-        [mock.call(i) for i in (1, 2, 4, 8, 16)])
-
-  def testOtherExceptionsAreNotCaught(self):
-    @retry_util.RetryOnException(KeyError, retries=3)
-    def Test(retries=None):
-      del retries
-      self.num_calls += 1
-      raise ValueError('oops!')
-
-    # The exception is raised immediately on the first try.
-    with self.assertRaises(ValueError):
-      Test()
-    self.assertEqual(self.num_calls, 1)
-
-  def testCallerMayOverrideRetries(self):
-    @retry_util.RetryOnException(KeyError, retries=3)
-    def Test(retries=None):
-      del retries
-      self.num_calls += 1
-      raise KeyError('oops!')
-
-    with self.assertRaises(KeyError):
-      Test(retries=10)
-    # The value on the caller overrides the default on the decorator.
-    self.assertEqual(self.num_calls, 11)
-
-  def testCanEventuallySucceed(self):
-    @retry_util.RetryOnException(KeyError, retries=5)
-    def Test(retries=None):
-      del retries
-      self.num_calls += 1
-      if self.num_calls < 3:
-        raise KeyError('oops!')
-      else:
-        return 'OK!'
-
-    # The value is returned after the expected number of calls.
-    self.assertEqual(Test(), 'OK!')
-    self.assertEqual(self.num_calls, 3)
-
-  def testRetriesCanBeSwitchedOff(self):
-    @retry_util.RetryOnException(KeyError, retries=5)
-    def Test(retries=None):
-      del retries
-      self.num_calls += 1
-      if self.num_calls < 3:
-        raise KeyError('oops!')
-      else:
-        return 'OK!'
-
-    # We fail immediately on the first try.
-    with self.assertRaises(KeyError):
-      Test(retries=0)
-    self.assertEqual(self.num_calls, 1)
-
-  def testCanRetryOnMultipleExceptions(self):
-    @retry_util.RetryOnException((KeyError, ValueError), retries=3)
-    def Test(retries=None):
-      del retries
-      self.num_calls += 1
-      if self.num_calls == 1:
-        raise KeyError('oops!')
-      elif self.num_calls == 2:
-        raise ValueError('uh oh!')
-      else:
-        return 'OK!'
-
-    # Call eventually succeeds after enough tries.
-    self.assertEqual(Test(retries=5), 'OK!')
-    self.assertEqual(self.num_calls, 3)
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/common/py_utils/py_utils/shell_util.py b/systrace/catapult/common/py_utils/py_utils/shell_util.py
deleted file mode 100644
index 2a529c8..0000000
--- a/systrace/catapult/common/py_utils/py_utils/shell_util.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Shell scripting helpers (created for Telemetry dependency roll scripts).
-
-import os as _os
-import shutil as _shutil
-import subprocess as _subprocess
-import tempfile as _tempfile
-from contextlib import contextmanager as _contextmanager
-
-@_contextmanager
-def ScopedChangeDir(new_path):
-  old_path = _os.getcwd()
-  _os.chdir(new_path)
-  print '> cd', _os.getcwd()
-  try:
-    yield
-  finally:
-    _os.chdir(old_path)
-    print '> cd', old_path
-
-@_contextmanager
-def ScopedTempDir():
-  temp_dir = _tempfile.mkdtemp()
-  try:
-    with ScopedChangeDir(temp_dir):
-      yield
-  finally:
-    _shutil.rmtree(temp_dir)
-
-def CallProgram(path_parts, *args, **kwargs):
-  '''Call an executable os.path.join(*path_parts) with the arguments specified
-  by *args. Any keyword arguments are passed as environment variables.'''
-  args = [_os.path.join(*path_parts)] + list(args)
-  env = dict(_os.environ)
-  env.update(kwargs)
-  print '>', ' '.join(args)
-  _subprocess.check_call(args, env=env)
diff --git a/systrace/catapult/common/py_utils/py_utils/slots_metaclass.py b/systrace/catapult/common/py_utils/py_utils/slots_metaclass.py
deleted file mode 100644
index ae36c67..0000000
--- a/systrace/catapult/common/py_utils/py_utils/slots_metaclass.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-class SlotsMetaclass(type):
-  """This metaclass requires all subclasses to define __slots__.
-
-  Usage:
-    class Foo(object):
-      __metaclass__ = slots_metaclass.SlotsMetaclass
-      __slots__ = '_property0', '_property1',
-
-  __slots__ must be a tuple containing string names of all properties that the
-  class contains.
-  Defining __slots__ reduces memory usage, accelerates property access, and
-  prevents dynamically adding unlisted properties.
-  If you need to dynamically add unlisted properties to a class with this
-  metaclass, then take a step back and rethink your goals. If you really really
-  need to dynamically add unlisted properties to a class with this metaclass,
-  add '__dict__' to its __slots__.
-  """
-
-  def __new__(mcs, name, bases, attrs):
-    assert '__slots__' in attrs, 'Class "%s" must define __slots__' % name
-    assert isinstance(attrs['__slots__'], tuple), '__slots__ must be a tuple'
-
-    return super(SlotsMetaclass, mcs).__new__(mcs, name, bases, attrs)
diff --git a/systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py b/systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py
deleted file mode 100644
index 79bb343..0000000
--- a/systrace/catapult/common/py_utils/py_utils/slots_metaclass_unittest.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from py_utils import slots_metaclass
-
-class SlotsMetaclassUnittest(unittest.TestCase):
-
-  def testSlotsMetaclass(self):
-    class NiceClass(object):
-      __metaclass__ = slots_metaclass.SlotsMetaclass
-      __slots__ = '_nice',
-
-      def __init__(self, nice):
-        self._nice = nice
-
-    NiceClass(42)
-
-    with self.assertRaises(AssertionError):
-      class NaughtyClass(NiceClass):
-        def __init__(self, naughty):
-          super(NaughtyClass, self).__init__(42)
-          self._naughty = naughty
-
-      # Metaclasses are called when the class is defined, so no need to
-      # instantiate it.
-
-    with self.assertRaises(AttributeError):
-      class NaughtyClass2(NiceClass):
-        __slots__ = ()
-
-        def __init__(self, naughty):
-          super(NaughtyClass2, self).__init__(42)
-          self._naughty = naughty  # pylint: disable=assigning-non-slot
-
-      # SlotsMetaclass is happy that __slots__ is defined, but python won't be
-      # happy about assigning _naughty when the class is instantiated because it
-      # isn't listed in __slots__, even if you disable the pylint error.
-      NaughtyClass2(666)
diff --git a/systrace/catapult/common/py_utils/py_utils/tempfile_ext.py b/systrace/catapult/common/py_utils/py_utils/tempfile_ext.py
deleted file mode 100644
index 394ad5b..0000000
--- a/systrace/catapult/common/py_utils/py_utils/tempfile_ext.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-import contextlib
-import shutil
-import tempfile
-
-
-@contextlib.contextmanager
-def NamedTemporaryDirectory(suffix='', prefix='tmp', dir=None):
-  """A context manager that manages a temporary directory.
-
-  This is a context manager version of tempfile.mkdtemp. The arguments to this
-  function are the same as the arguments for that one.
-
-  This can be used to automatically manage the lifetime of a temporary file
-  without maintaining an open file handle on it. Doing so can be useful in
-  scenarios where a parent process calls a child process to create a temporary
-  file and then does something with the resulting file.
-  """
-  # This uses |dir| as a parameter name for consistency with mkdtemp.
-  # pylint: disable=redefined-builtin
-
-  d = tempfile.mkdtemp(suffix=suffix, prefix=prefix, dir=dir)
-  try:
-    yield d
-  finally:
-    shutil.rmtree(d)
diff --git a/systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py b/systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py
deleted file mode 100644
index 6844623..0000000
--- a/systrace/catapult/common/py_utils/py_utils/tempfile_ext_unittest.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-from py_utils import tempfile_ext
-from pyfakefs import fake_filesystem_unittest
-
-
-class NamedTemporaryDirectoryTest(fake_filesystem_unittest.TestCase):
-
-  def setUp(self):
-    self.setUpPyfakefs()
-
-  def tearDown(self):
-    self.tearDownPyfakefs()
-
-  def testBasic(self):
-    with tempfile_ext.NamedTemporaryDirectory() as d:
-      self.assertTrue(os.path.exists(d))
-      self.assertTrue(os.path.isdir(d))
-    self.assertFalse(os.path.exists(d))
-
-  def testSuffix(self):
-    test_suffix = 'foo'
-    with tempfile_ext.NamedTemporaryDirectory(suffix=test_suffix) as d:
-      self.assertTrue(os.path.basename(d).endswith(test_suffix))
-
-  def testPrefix(self):
-    test_prefix = 'bar'
-    with tempfile_ext.NamedTemporaryDirectory(prefix=test_prefix) as d:
-      self.assertTrue(os.path.basename(d).startswith(test_prefix))
-
-  def testDir(self):
-    test_dir = '/baz'
-    self.fs.CreateDirectory(test_dir)
-    with tempfile_ext.NamedTemporaryDirectory(dir=test_dir) as d:
-      self.assertEquals(test_dir, os.path.dirname(d))
diff --git a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/__init__.py b/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/__init__.py
deleted file mode 100644
index 9228df8..0000000
--- a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
diff --git a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/another_discover_dummyclass.py b/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/another_discover_dummyclass.py
deleted file mode 100644
index 0459ccf..0000000
--- a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/another_discover_dummyclass.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""More dummy exception subclasses used by core/discover.py's unit tests."""
-
-# Import class instead of module explicitly so that inspect.getmembers() returns
-# two Exception subclasses in this current file.
-# Suppress complaints about unable to import class.  The directory path is
-# added at runtime by telemetry test runner.
-#pylint: disable=import-error
-from discoverable_classes import discover_dummyclass
-
-
-class _PrivateDummyException(discover_dummyclass.DummyException):
-  def __init__(self):
-    super(_PrivateDummyException, self).__init__()
-
-
-class DummyExceptionImpl1(_PrivateDummyException):
-  def __init__(self):
-    super(DummyExceptionImpl1, self).__init__()
-
-
-class DummyExceptionImpl2(_PrivateDummyException):
-  def __init__(self):
-    super(DummyExceptionImpl2, self).__init__()
-
-
-class DummyExceptionWithParameterImpl1(_PrivateDummyException):
-  def __init__(self, parameter):
-    super(DummyExceptionWithParameterImpl1, self).__init__()
-    del parameter
diff --git a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/discover_dummyclass.py b/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/discover_dummyclass.py
deleted file mode 100644
index 15dcb35..0000000
--- a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/discover_dummyclass.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A dummy exception subclass used by core/discover.py's unit tests."""
-
-class DummyException(Exception):
-  def __init__(self):
-    super(DummyException, self).__init__()
diff --git a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/parameter_discover_dummyclass.py b/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/parameter_discover_dummyclass.py
deleted file mode 100644
index c37f4a9..0000000
--- a/systrace/catapult/common/py_utils/py_utils/test_data/discoverable_classes/parameter_discover_dummyclass.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A dummy exception subclass used by core/discover.py's unit tests."""
-from discoverable_classes import discover_dummyclass
-
-class DummyExceptionWithParameterImpl2(discover_dummyclass.DummyException):
-  def __init__(self, parameter1, parameter2):
-    super(DummyExceptionWithParameterImpl2, self).__init__()
-    del parameter1, parameter2
diff --git a/systrace/catapult/common/py_utils/py_utils/test_data/foo.txt b/systrace/catapult/common/py_utils/py_utils/test_data/foo.txt
deleted file mode 100644
index a9cac3e..0000000
--- a/systrace/catapult/common/py_utils/py_utils/test_data/foo.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is not executable.
diff --git a/systrace/catapult/common/py_utils/py_utils/xvfb.py b/systrace/catapult/common/py_utils/py_utils/xvfb.py
deleted file mode 100644
index c09f3e3..0000000
--- a/systrace/catapult/common/py_utils/py_utils/xvfb.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-import logging
-import subprocess
-import platform
-import time
-
-
-def ShouldStartXvfb():
-  return platform.system() == 'Linux'
-
-
-def StartXvfb():
-  display = ':99'
-  xvfb_command = ['Xvfb', display, '-screen', '0', '1024x769x24', '-ac']
-  xvfb_process = subprocess.Popen(
-      xvfb_command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-  time.sleep(0.2)
-  returncode = xvfb_process.poll()
-  if returncode is None:
-    os.environ['DISPLAY'] = display
-  else:
-    logging.error('Xvfb did not start, returncode: %s, stdout:\n%s',
-                  returncode, xvfb_process.stdout.read())
-    xvfb_process = None
-  return xvfb_process
diff --git a/systrace/catapult/common/py_vulcanize/README.chromium b/systrace/catapult/common/py_vulcanize/README.chromium
deleted file mode 100644
index 0b32761..0000000
--- a/systrace/catapult/common/py_vulcanize/README.chromium
+++ /dev/null
@@ -1,8 +0,0 @@
-Name: py_vulcanize
-URL: N/A
-Version: N/A
-
-Description:
-Py-vulcanize, formerly known as TVCM (trace-viewer component model).
-This code doesn't actually live anywhere else currently, but it may
-be split out into a separate repository in the future.
diff --git a/systrace/catapult/common/py_vulcanize/bin/run_py_tests b/systrace/catapult/common/py_vulcanize/bin/run_py_tests
deleted file mode 100755
index 904c213..0000000
--- a/systrace/catapult/common/py_vulcanize/bin/run_py_tests
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_CATAPULT = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), os.path.pardir, os.path.pardir, os.path.pardir))
-
-
-def _AddToPathIfNeeded(path):
-  if path not in sys.path:
-    sys.path.insert(0, path)
-
-
-if __name__ == '__main__':
-  _AddToPathIfNeeded(_CATAPULT)
-
-  from hooks import install
-  if '--no-install-hooks' in sys.argv:
-    sys.argv.remove('--no-install-hooks')
-  else:
-    install.InstallHooks()
-
-  from catapult_build import run_with_typ
-  sys.exit(run_with_typ.Run(
-      os.path.join(_CATAPULT, 'common', 'py_vulcanize')))
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/__init__.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/__init__.py
deleted file mode 100644
index f3a4bd1..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/__init__.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Trace-viewer component model.
-
-This module implements trace-viewer's component model.
-"""
-
-from py_vulcanize.generate import *  # pylint: disable=wildcard-import
-from py_vulcanize.project import Project
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py
deleted file mode 100644
index dfcb5e6..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import codecs
-import os
-import sys
-import collections
-import StringIO
-
-
-class WithableStringIO(StringIO.StringIO):
-
-  def __enter__(self, *args):
-    return self
-
-  def __exit__(self, *args):
-    pass
-
-
-class FakeFS(object):
-
-  def __init__(self, initial_filenames_and_contents=None):
-    self._file_contents = {}
-    if initial_filenames_and_contents:
-      for k, v in initial_filenames_and_contents.iteritems():
-        self._file_contents[k] = v
-
-    self._bound = False
-    self._real_codecs_open = codecs.open
-    self._real_open = sys.modules['__builtin__'].open
-    self._real_abspath = os.path.abspath
-    self._real_exists = os.path.exists
-    self._real_walk = os.walk
-    self._real_listdir = os.listdir
-
-  def __enter__(self):
-    self.Bind()
-    return self
-
-  def __exit__(self, *args):
-    self.Unbind()
-
-  def Bind(self):
-    assert not self._bound
-    codecs.open = self._FakeCodecsOpen
-    sys.modules['__builtin__'].open = self._FakeOpen
-    os.path.abspath = self._FakeAbspath
-    os.path.exists = self._FakeExists
-    os.walk = self._FakeWalk
-    os.listdir = self._FakeListDir
-    self._bound = True
-
-  def Unbind(self):
-    assert self._bound
-    codecs.open = self._real_codecs_open
-    sys.modules['__builtin__'].open = self._real_open
-    os.path.abspath = self._real_abspath
-    os.path.exists = self._real_exists
-    os.walk = self._real_walk
-    os.listdir = self._real_listdir
-    self._bound = False
-
-  def AddFile(self, path, contents):
-    assert path not in self._file_contents
-    path = os.path.normpath(path)
-    self._file_contents[path] = contents
-
-  def _FakeOpen(self, path, mode=None):
-    if mode is None:
-      mode = 'r'
-    if mode == 'r' or mode == 'rU' or mode == 'rb':
-      if path not in self._file_contents:
-        return self._real_open(path, mode)
-      return WithableStringIO(self._file_contents[path])
-
-    raise NotImplementedError()
-
-  def _FakeCodecsOpen(self, path, mode=None,
-                      encoding=None):  # pylint: disable=unused-argument
-    if mode is None:
-      mode = 'r'
-    if mode == 'r' or mode == 'rU' or mode == 'rb':
-      if path not in self._file_contents:
-        return self._real_open(path, mode)
-      return WithableStringIO(self._file_contents[path])
-
-    raise NotImplementedError()
-
-  def _FakeAbspath(self, path):
-    """Normalize the path and ensure it starts with os.path.sep.
-
-    The tests all assume paths start with things like '/my/project',
-    and this abspath implementaion makes that assumption work correctly
-    on Windows.
-    """
-    normpath = os.path.normpath(path)
-    if not normpath.startswith(os.path.sep):
-      normpath = os.path.sep + normpath
-    return normpath
-
-  def _FakeExists(self, path):
-    if path in self._file_contents:
-      return True
-    return self._real_exists(path)
-
-  def _FakeWalk(self, top):
-    assert os.path.isabs(top)
-    all_filenames = self._file_contents.keys()
-    pending_prefixes = collections.deque()
-    pending_prefixes.append(top)
-    visited_prefixes = set()
-    while len(pending_prefixes):
-      prefix = pending_prefixes.popleft()
-      if prefix in visited_prefixes:
-        continue
-      visited_prefixes.add(prefix)
-      if prefix.endswith(os.path.sep):
-        prefix_with_trailing_sep = prefix
-      else:
-        prefix_with_trailing_sep = prefix + os.path.sep
-
-      dirs = set()
-      files = []
-      for filename in all_filenames:
-        if not filename.startswith(prefix_with_trailing_sep):
-          continue
-        relative_to_prefix = os.path.relpath(filename, prefix)
-
-        dirpart = os.path.dirname(relative_to_prefix)
-        if len(dirpart) == 0:
-          files.append(relative_to_prefix)
-          continue
-        parts = dirpart.split(os.sep)
-        if len(parts) == 0:
-          dirs.add(dirpart)
-        else:
-          pending = os.path.join(prefix, parts[0])
-          dirs.add(parts[0])
-          pending_prefixes.appendleft(pending)
-
-      dirs = sorted(dirs)
-      yield prefix, dirs, files
-
-  def _FakeListDir(self, dirname):
-    raise NotImplementedError()
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py
deleted file mode 100644
index 0825013..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/fake_fs_unittest.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-
-from py_vulcanize import fake_fs
-
-
-class FakeFSUnittest(unittest.TestCase):
-
-  def testBasic(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/blah/x', 'foobar')
-    with fs:
-      assert os.path.exists(os.path.normpath('/blah/x'))
-      self.assertEquals(
-          'foobar',
-          open(os.path.normpath('/blah/x'), 'r').read())
-
-  def testWithableOpen(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/blah/x', 'foobar')
-    with fs:
-      with open(os.path.normpath('/blah/x'), 'r') as f:
-        self.assertEquals('foobar', f.read())
-
-  def testWalk(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/x/w2/w3/z3.txt', '')
-    fs.AddFile('/x/w/z.txt', '')
-    fs.AddFile('/x/y.txt', '')
-    fs.AddFile('/a.txt', 'foobar')
-    with fs:
-      gen = os.walk(os.path.normpath('/'))
-      r = gen.next()
-      self.assertEquals((os.path.normpath('/'), ['x'], ['a.txt']), r)
-
-      r = gen.next()
-      self.assertEquals((os.path.normpath('/x'), ['w', 'w2'], ['y.txt']), r)
-
-      r = gen.next()
-      self.assertEquals((os.path.normpath('/x/w'), [], ['z.txt']), r)
-
-      r = gen.next()
-      self.assertEquals((os.path.normpath('/x/w2'), ['w3'], []), r)
-
-      r = gen.next()
-      self.assertEquals((os.path.normpath('/x/w2/w3'), [], ['z3.txt']), r)
-
-      self.assertRaises(StopIteration, gen.next)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py
deleted file mode 100644
index 6368380..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/generate.py
+++ /dev/null
@@ -1,269 +0,0 @@
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-import subprocess
-import tempfile
-import StringIO
-
-from py_vulcanize import html_generation_controller
-
-
-html_warning_message = """
-
-
-<!--
-WARNING: This file is auto generated.
-
-         Do not edit directly.
--->
-"""
-
-js_warning_message = """
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/* WARNING: This file is auto generated.
- *
- * Do not edit directly.
- */
-"""
-
-css_warning_message = """
-/* Copyright 2015 The Chromium Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-/* WARNING: This file is auto-generated.
- *
- * Do not edit directly.
- */
-"""
-
-
-def _AssertIsUTF8(f):
-  if isinstance(f, StringIO.StringIO):
-    return
-  assert f.encoding == 'utf-8'
-
-
-def _MinifyJS(input_js):
-  py_vulcanize_path = os.path.abspath(os.path.join(
-      os.path.dirname(__file__), '..'))
-  rjsmin_path = os.path.abspath(
-      os.path.join(py_vulcanize_path, 'third_party', 'rjsmin', 'rjsmin.py'))
-
-  with tempfile.NamedTemporaryFile() as _:
-    args = [
-        'python',
-        rjsmin_path
-    ]
-    p = subprocess.Popen(args,
-                         stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE,
-                         stderr=subprocess.PIPE)
-    res = p.communicate(input=input_js)
-    errorcode = p.wait()
-    if errorcode != 0:
-      sys.stderr.write('rJSmin exited with error code %d' % errorcode)
-      sys.stderr.write(res[1])
-      raise Exception('Failed to minify, omgah')
-    return res[0]
-
-
-def GenerateJS(load_sequence,
-               use_include_tags_for_scripts=False,
-               dir_for_include_tag_root=None,
-               minify=False,
-               report_sizes=False):
-  f = StringIO.StringIO()
-  GenerateJSToFile(f,
-                   load_sequence,
-                   use_include_tags_for_scripts,
-                   dir_for_include_tag_root,
-                   minify=minify,
-                   report_sizes=report_sizes)
-
-  return f.getvalue()
-
-
-def GenerateJSToFile(f,
-                     load_sequence,
-                     use_include_tags_for_scripts=False,
-                     dir_for_include_tag_root=None,
-                     minify=False,
-                     report_sizes=False):
-  _AssertIsUTF8(f)
-  if use_include_tags_for_scripts and dir_for_include_tag_root is None:
-    raise Exception('Must provide dir_for_include_tag_root')
-
-  f.write(js_warning_message)
-  f.write('\n')
-
-  if not minify:
-    flatten_to_file = f
-  else:
-    flatten_to_file = StringIO.StringIO()
-
-  for module in load_sequence:
-    module.AppendJSContentsToFile(flatten_to_file,
-                                  use_include_tags_for_scripts,
-                                  dir_for_include_tag_root)
-  if minify:
-    js = flatten_to_file.getvalue()
-    minified_js = _MinifyJS(js)
-    f.write(minified_js)
-    f.write('\n')
-
-  if report_sizes:
-    for module in load_sequence:
-      s = StringIO.StringIO()
-      module.AppendJSContentsToFile(s,
-                                    use_include_tags_for_scripts,
-                                    dir_for_include_tag_root)
-
-      # Add minified size info.
-      js = s.getvalue()
-      min_js_size = str(len(_MinifyJS(js)))
-
-      # Print names for this module. Some domain-specific simplifications
-      # are included to make pivoting more obvious.
-      parts = module.name.split('.')
-      if parts[:2] == ['base', 'ui']:
-        parts = ['base_ui'] + parts[2:]
-      if parts[:2] == ['tracing', 'importer']:
-        parts = ['importer'] + parts[2:]
-      tln = parts[0]
-      sln = '.'.join(parts[:2])
-
-      # Output
-      print '%i\t%s\t%s\t%s\t%s' % (len(js), min_js_size, module.name, tln, sln)
-      sys.stdout.flush()
-
-
-class ExtraScript(object):
-
-  def __init__(self, script_id=None, text_content=None, content_type=None):
-    if script_id is not None:
-      assert script_id[0] != '#'
-    self.script_id = script_id
-    self.text_content = text_content
-    self.content_type = content_type
-
-  def WriteToFile(self, output_file):
-    _AssertIsUTF8(output_file)
-    attrs = []
-    if self.script_id:
-      attrs.append('id="%s"' % self.script_id)
-    if self.content_type:
-      attrs.append('content-type="%s"' % self.content_type)
-
-    if len(attrs) > 0:
-      output_file.write('<script %s>\n' % ' '.join(attrs))
-    else:
-      output_file.write('<script>\n')
-    if self.text_content:
-      output_file.write(self.text_content)
-    output_file.write('</script>\n')
-
-
-def _MinifyCSS(css_text):
-  py_vulcanize_path = os.path.abspath(os.path.join(
-      os.path.dirname(__file__), '..'))
-  rcssmin_path = os.path.abspath(
-      os.path.join(py_vulcanize_path, 'third_party', 'rcssmin', 'rcssmin.py'))
-
-  with tempfile.NamedTemporaryFile() as _:
-    rcssmin_args = ['python', rcssmin_path]
-    p = subprocess.Popen(rcssmin_args,
-                         stdin=subprocess.PIPE,
-                         stdout=subprocess.PIPE,
-                         stderr=subprocess.PIPE)
-    res = p.communicate(input=css_text)
-    errorcode = p.wait()
-    if errorcode != 0:
-      sys.stderr.write('rCSSmin exited with error code %d' % errorcode)
-      sys.stderr.write(res[1])
-      raise Exception('Failed to generate css for %s.' % css_text)
-    return res[0]
-
-
-def GenerateStandaloneHTMLAsString(*args, **kwargs):
-  f = StringIO.StringIO()
-  GenerateStandaloneHTMLToFile(f, *args, **kwargs)
-  return f.getvalue()
-
-
-def GenerateStandaloneHTMLToFile(output_file,
-                                 load_sequence,
-                                 title=None,
-                                 flattened_js_url=None,
-                                 extra_scripts=None,
-                                 minify=False,
-                                 report_sizes=False,
-                                 output_html_head_and_body=True):
-  """Writes a HTML file with the content of all modules in a load sequence.
-
-  The load_sequence is a list of (HTML or JS) Module objects; the order that
-  they're inserted into the file depends on their type and position in the load
-  sequence.
-  """
-  _AssertIsUTF8(output_file)
-  extra_scripts = extra_scripts or []
-
-  if output_html_head_and_body:
-    output_file.write(
-        '<!DOCTYPE html>\n'
-        '<html>\n'
-        '  <head i18n-values="dir:textdirection;">\n'
-        '  <meta http-equiv="Content-Type" content="text/html;'
-        'charset=utf-8">\n')
-    if title:
-      output_file.write('  <title>%s</title>\n  ' % title)
-  else:
-    assert title is None
-
-  loader = load_sequence[0].loader
-
-  written_style_sheets = set()
-
-  class HTMLGenerationController(
-      html_generation_controller.HTMLGenerationController):
-
-    def __init__(self, module):
-      self.module = module
-
-    def GetHTMLForStylesheetHRef(self, href):
-      resource = self.module.HRefToResource(
-          href, '<link rel="stylesheet" href="%s">' % href)
-      style_sheet = loader.LoadStyleSheet(resource.name)
-
-      if style_sheet in written_style_sheets:
-        return None
-      written_style_sheets.add(style_sheet)
-
-      text = style_sheet.contents_with_inlined_images
-      if minify:
-        text = _MinifyCSS(text)
-      return '<style>\n%s\n</style>' % text
-
-  for module in load_sequence:
-    controller = HTMLGenerationController(module)
-    module.AppendHTMLContentsToFile(output_file, controller, minify=minify)
-
-  if flattened_js_url:
-    output_file.write('<script src="%s"></script>\n' % flattened_js_url)
-  else:
-    output_file.write('<script>\n')
-    js = GenerateJS(load_sequence, minify=minify, report_sizes=report_sizes)
-    output_file.write(js)
-    output_file.write('</script>\n')
-
-  for extra_script in extra_scripts:
-    extra_script.WriteToFile(output_file)
-
-  if output_html_head_and_body:
-    output_file.write('</head>\n  <body>\n  </body>\n</html>\n')
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py
deleted file mode 100644
index 1e83cb4..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-
-from py_vulcanize import generate
-from py_vulcanize import fake_fs
-from py_vulcanize import project as project_module
-
-
-class GenerateTests(unittest.TestCase):
-
-  def setUp(self):
-    self.fs = fake_fs.FakeFS()
-    self.fs.AddFile(
-        '/x/foo/my_module.html',
-        ('<!DOCTYPE html>\n'
-         '<link rel="import" href="/foo/other_module.html">\n'))
-    self.fs.AddFile(
-        '/x/foo/other_module.html',
-        ('<!DOCTYPE html>\n'
-         '<script src="/foo/raw/raw_script.js"></script>\n'
-         '<script>\n'
-         '  \'use strict\';\n'
-         '  HelloWorld();\n'
-         '</script>\n'))
-    self.fs.AddFile('/x/foo/raw/raw_script.js', '\n/* raw script */\n')
-    self.fs.AddFile('/x/components/polymer/polymer.min.js', '\n')
-
-    self.fs.AddFile('/x/foo/external_script.js', 'External()')
-    self.fs.AddFile('/x/foo/inline_and_external_module.html',
-                    ('<!DOCTYPE html>\n'
-                    '<script>Script1()</script>'
-                    '<script src=/foo/external_script.js></script>'
-                    '<script>Script2()</script>'))
-
-    self.project = project_module.Project([os.path.normpath('/x')])
-
-  def testJSGeneration(self):
-    with self.fs:
-      load_sequence = self.project.CalcLoadSequenceForModuleNames(
-          [os.path.normpath('foo.my_module')])
-      generate.GenerateJS(load_sequence)
-
-  def testHTMLGeneration(self):
-    with self.fs:
-      load_sequence = self.project.CalcLoadSequenceForModuleNames(
-          [os.path.normpath('foo.my_module')])
-      result = generate.GenerateStandaloneHTMLAsString(load_sequence)
-      self.assertIn('HelloWorld();', result)
-
-  def testExtraScriptWithWriteContentsFunc(self):
-    with self.fs:
-      load_sequence = self.project.CalcLoadSequenceForModuleNames(
-          [os.path.normpath('foo.my_module')])
-
-      class ExtraScript(generate.ExtraScript):
-
-        def WriteToFile(self, f):
-          f.write('<script>ExtraScript!</script>')
-
-      result = generate.GenerateStandaloneHTMLAsString(
-          load_sequence, title='Title', extra_scripts=[ExtraScript()])
-      self.assertIn('ExtraScript', result)
-
-  def testScriptOrdering(self):
-    with self.fs:
-      load_sequence = self.project.CalcLoadSequenceForModuleNames(
-          [os.path.normpath('foo.inline_and_external_module')])
-      result = generate.GenerateStandaloneHTMLAsString(load_sequence)
-      script1_pos = result.index('Script1()')
-      script2_pos = result.index('Script2()')
-      external_pos = result.index('External()')
-      self.assertTrue(script1_pos < external_pos < script2_pos)
-
-  def testScriptOrderingWithIncludeTag(self):
-    with self.fs:
-      load_sequence = self.project.CalcLoadSequenceForModuleNames(
-          [os.path.normpath('foo.inline_and_external_module')])
-      result = generate.GenerateJS(load_sequence,
-                                   use_include_tags_for_scripts = True,
-      dir_for_include_tag_root='/x/')
-      script1_pos = result.index('Script1()')
-      script2_pos = result.index('Script2()')
-      external_path = os.path.join('foo', 'external_script.js')
-      external_pos = result.index('<include src="{0}">'.format(external_path))
-      self.assertTrue(script1_pos < external_pos < script2_pos)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py
deleted file mode 100644
index c804fe8..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import re
-from py_vulcanize import style_sheet
-
-
-class HTMLGenerationController(object):
-
-  def __init__(self):
-    self.current_module = None
-
-  def GetHTMLForStylesheetHRef(self, href):  # pylint: disable=unused-argument
-    return None
-
-  def GetHTMLForInlineStylesheet(self, contents):
-    if self.current_module is None:
-      if re.search('url\(.+\)', contents):
-        raise Exception(
-            'Default HTMLGenerationController cannot handle inline style urls')
-      return contents
-
-    module_dirname = os.path.dirname(self.current_module.resource.absolute_path)
-    ss = style_sheet.ParsedStyleSheet(
-        self.current_module.loader, module_dirname, contents)
-    return ss.contents_with_inlined_images
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module.py
deleted file mode 100644
index 5e1c754..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import re
-
-from py_vulcanize import js_utils
-from py_vulcanize import module
-from py_vulcanize import parse_html_deps
-from py_vulcanize import style_sheet
-
-
-def IsHTMLResourceTheModuleGivenConflictingResourceNames(
-    js_resource, html_resource):  # pylint: disable=unused-argument
-  return 'polymer-element' in html_resource.contents
-
-
-class HTMLModule(module.Module):
-
-  @property
-  def _module_dir_name(self):
-    return os.path.dirname(self.resource.absolute_path)
-
-  def Parse(self, excluded_scripts):
-    try:
-      parser_results = parse_html_deps.HTMLModuleParser().Parse(self.contents)
-    except Exception as ex:
-      raise Exception('While parsing %s: %s' % (self.name, str(ex)))
-
-    self.dependency_metadata = Parse(self.loader,
-                                     self.name,
-                                     self._module_dir_name,
-                                     self.IsThirdPartyComponent(),
-                                     parser_results,
-                                     excluded_scripts)
-    self._parser_results = parser_results
-    self.scripts = parser_results.scripts
-
-  def Load(self, excluded_scripts):
-    super(HTMLModule, self).Load(excluded_scripts=excluded_scripts)
-
-    reachable_names = set([m.name
-                           for m in self.all_dependent_modules_recursive])
-    if 'tr.exportTo' in self.contents:
-      if 'tracing.base.base' not in reachable_names:
-        raise Exception('%s: Does not have a dependency on base' %
-                        os.path.relpath(self.resource.absolute_path))
-
-    for script in self.scripts:
-      if script.is_external:
-        if excluded_scripts and any(re.match(pattern, script.src) for
-            pattern in excluded_scripts):
-          continue
-
-        resource = _HRefToResource(self.loader, self.name, self._module_dir_name,
-                                   script.src,
-                                   tag_for_err_msg='<script src="%s">' % script.src)
-        path = resource.unix_style_relative_path
-        raw_script = self.loader.LoadRawScript(path)
-        self.dependent_raw_scripts.append(raw_script)
-        script.loaded_raw_script = raw_script
-
-  def GetTVCMDepsModuleType(self):
-    return 'py_vulcanize.HTML_MODULE_TYPE'
-
-  def AppendHTMLContentsToFile(self, f, ctl, minify=False):
-    super(HTMLModule, self).AppendHTMLContentsToFile(f, ctl)
-
-    ctl.current_module = self
-    try:
-      for piece in self._parser_results.YieldHTMLInPieces(ctl, minify=minify):
-        f.write(piece)
-    finally:
-      ctl.current_module = None
-
-  def HRefToResource(self, href, tag_for_err_msg):
-    return _HRefToResource(self.loader, self.name, self._module_dir_name,
-                           href, tag_for_err_msg)
-
-  def AppendDirectlyDependentFilenamesTo(
-      self, dependent_filenames, include_raw_scripts=True):
-    super(HTMLModule, self).AppendDirectlyDependentFilenamesTo(
-        dependent_filenames, include_raw_scripts)
-    for contents in self._parser_results.inline_stylesheets:
-      module_dirname = os.path.dirname(self.resource.absolute_path)
-      ss = style_sheet.ParsedStyleSheet(
-          self.loader, module_dirname, contents)
-      ss.AppendDirectlyDependentFilenamesTo(dependent_filenames)
-
-def _HRefToResource(
-    loader, module_name, module_dir_name, href, tag_for_err_msg):
-  if href[0] == '/':
-    resource = loader.FindResourceGivenRelativePath(
-        os.path.normpath(href[1:]))
-  else:
-    abspath = os.path.normpath(os.path.join(module_dir_name,
-                                            os.path.normpath(href)))
-    resource = loader.FindResourceGivenAbsolutePath(abspath)
-
-  if not resource:
-    raise module.DepsException(
-        'In %s, the %s cannot be loaded because '
-        'it is not in the search path' % (module_name, tag_for_err_msg))
-  try:
-    resource.contents
-  except:
-    raise module.DepsException('In %s, %s points at a nonexistent file ' % (
-        module_name, tag_for_err_msg))
-  return resource
-
-
-def Parse(loader, module_name, module_dir_name, is_component, parser_results,
-          exclude_scripts=None):
-  res = module.ModuleDependencyMetadata()
-  if is_component:
-    return res
-
-  # External script references.
-  for href in parser_results.scripts_external:
-    if exclude_scripts and any(re.match(pattern, href) for
-        pattern in exclude_scripts):
-      continue
-
-    resource = _HRefToResource(loader, module_name, module_dir_name,
-                               href,
-                               tag_for_err_msg='<script src="%s">' % href)
-    res.dependent_raw_script_relative_paths.append(
-        resource.unix_style_relative_path)
-
-  # External imports. Mostly the same as <script>, but we know its a module.
-  for href in parser_results.imports:
-    if exclude_scripts and any(re.match(pattern, href) for
-        pattern in exclude_scripts):
-      continue
-
-    if not href.endswith('.html'):
-      raise Exception(
-          'In %s, the <link rel="import" href="%s"> must point at a '
-          'file with an html suffix' % (module_name, href))
-
-    resource = _HRefToResource(
-        loader, module_name, module_dir_name, href,
-        tag_for_err_msg='<link rel="import" href="%s">' % href)
-    res.dependent_module_names.append(resource.name)
-
-  # Style sheets.
-  for href in parser_results.stylesheets:
-    resource = _HRefToResource(
-        loader, module_name, module_dir_name, href,
-        tag_for_err_msg='<link rel="stylesheet" href="%s">' % href)
-    res.style_sheet_names.append(resource.name)
-
-  return res
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py
deleted file mode 100644
index fb4af16..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/html_module_unittest.py
+++ /dev/null
@@ -1,321 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-import StringIO
-
-from py_vulcanize import fake_fs
-from py_vulcanize import generate
-from py_vulcanize import html_generation_controller
-from py_vulcanize import html_module
-from py_vulcanize import parse_html_deps
-from py_vulcanize import project as project_module
-from py_vulcanize import resource
-from py_vulcanize import resource_loader as resource_loader
-
-
-class ResourceWithFakeContents(resource.Resource):
-
-  def __init__(self, toplevel_dir, absolute_path, fake_contents):
-    """A resource with explicitly provided contents.
-
-    If the resource does not exist, then pass fake_contents=None. This will
-    cause accessing the resource contents to raise an exception mimicking the
-    behavior of regular resources."""
-    super(ResourceWithFakeContents, self).__init__(toplevel_dir, absolute_path)
-    self._fake_contents = fake_contents
-
-  @property
-  def contents(self):
-    if self._fake_contents is None:
-      raise Exception('File not found')
-    return self._fake_contents
-
-
-class FakeLoader(object):
-
-  def __init__(self, source_paths, initial_filenames_and_contents=None):
-    self._source_paths = source_paths
-    self._file_contents = {}
-    if initial_filenames_and_contents:
-      for k, v in initial_filenames_and_contents.iteritems():
-        self._file_contents[k] = v
-
-  def FindResourceGivenAbsolutePath(self, absolute_path):
-    candidate_paths = []
-    for source_path in self._source_paths:
-      if absolute_path.startswith(source_path):
-        candidate_paths.append(source_path)
-    if len(candidate_paths) == 0:
-      return None
-
-    # Sort by length. Longest match wins.
-    candidate_paths.sort(lambda x, y: len(x) - len(y))
-    longest_candidate = candidate_paths[-1]
-
-    return ResourceWithFakeContents(
-        longest_candidate, absolute_path,
-        self._file_contents.get(absolute_path, None))
-
-  def FindResourceGivenRelativePath(self, relative_path):
-    absolute_path = None
-    for script_path in self._source_paths:
-      absolute_path = os.path.join(script_path, relative_path)
-      if absolute_path in self._file_contents:
-        return ResourceWithFakeContents(script_path, absolute_path,
-                                        self._file_contents[absolute_path])
-    return None
-
-
-class ParseTests(unittest.TestCase):
-
-  def testValidExternalScriptReferenceToRawScript(self):
-    parse_results = parse_html_deps.HTMLModuleParserResults("""<!DOCTYPE html>
-      <script src="../foo.js">
-      """)
-
-    file_contents = {}
-    file_contents[os.path.normpath('/tmp/a/foo.js')] = """
-'i am just some raw script';
-"""
-
-    metadata = html_module.Parse(
-        FakeLoader([os.path.normpath('/tmp')], file_contents),
-        'a.b.start',
-        '/tmp/a/b/',
-        is_component=False,
-        parser_results=parse_results)
-    self.assertEquals([], metadata.dependent_module_names)
-    self.assertEquals(
-        ['a/foo.js'], metadata.dependent_raw_script_relative_paths)
-
-  def testExternalScriptReferenceToModuleOutsideScriptPath(self):
-    parse_results = parse_html_deps.HTMLModuleParserResults("""<!DOCTYPE html>
-      <script src="/foo.js">
-      """)
-
-    file_contents = {}
-    file_contents[os.path.normpath('/foo.js')] = ''
-
-    def DoIt():
-      html_module.Parse(FakeLoader([os.path.normpath('/tmp')], file_contents),
-                        'a.b.start',
-                        '/tmp/a/b/',
-                        is_component=False,
-                        parser_results=parse_results)
-    self.assertRaises(Exception, DoIt)
-
-  def testExternalScriptReferenceToFileThatDoesntExist(self):
-    parse_results = parse_html_deps.HTMLModuleParserResults("""<!DOCTYPE html>
-      <script src="/foo.js">
-      """)
-
-    file_contents = {}
-
-    def DoIt():
-      html_module.Parse(FakeLoader([os.path.normpath('/tmp')], file_contents),
-                        'a.b.start',
-                        '/tmp/a/b/',
-                        is_component=False,
-                        parser_results=parse_results)
-    self.assertRaises(Exception, DoIt)
-
-  def testValidImportOfModule(self):
-    parse_results = parse_html_deps.HTMLModuleParserResults("""<!DOCTYPE html>
-      <link rel="import" href="../foo.html">
-      """)
-
-    file_contents = {}
-    file_contents[os.path.normpath('/tmp/a/foo.html')] = """
-"""
-
-    metadata = html_module.Parse(
-        FakeLoader([os.path.normpath('/tmp')], file_contents),
-        'a.b.start',
-        '/tmp/a/b/',
-        is_component=False,
-        parser_results=parse_results)
-    self.assertEquals(['a.foo'], metadata.dependent_module_names)
-
-  def testStyleSheetImport(self):
-    parse_results = parse_html_deps.HTMLModuleParserResults("""<!DOCTYPE html>
-      <link rel="stylesheet" href="../foo.css">
-      """)
-
-    file_contents = {}
-    file_contents[os.path.normpath('/tmp/a/foo.css')] = """
-"""
-    metadata = html_module.Parse(
-        FakeLoader([os.path.normpath('/tmp')], file_contents),
-        'a.b.start',
-        '/tmp/a/b/',
-        is_component=False,
-        parser_results=parse_results)
-    self.assertEquals([], metadata.dependent_module_names)
-    self.assertEquals(['a.foo'], metadata.style_sheet_names)
-
-  def testUsingAbsoluteHref(self):
-    parse_results = parse_html_deps.HTMLModuleParserResults("""<!DOCTYPE html>
-      <script src="/foo.js">
-      """)
-
-    file_contents = {}
-    file_contents[os.path.normpath('/src/foo.js')] = ''
-
-    metadata = html_module.Parse(
-        FakeLoader([os.path.normpath("/tmp"), os.path.normpath("/src")],
-                   file_contents),
-        "a.b.start",
-        "/tmp/a/b/",
-        is_component=False,
-        parser_results=parse_results)
-    self.assertEquals(['foo.js'], metadata.dependent_raw_script_relative_paths)
-
-
-class HTMLModuleTests(unittest.TestCase):
-
-  def testBasicModuleGeneration(self):
-    file_contents = {}
-    file_contents[os.path.normpath('/tmp/a/b/start.html')] = """
-<!DOCTYPE html>
-<link rel="import" href="/widget.html">
-<link rel="stylesheet" href="../common.css">
-<script src="/raw_script.js"></script>
-<script src="/excluded_script.js"></script>
-<dom-module id="start">
-  <template>
-  </template>
-  <script>
-    'use strict';
-    console.log('inline script for start.html got written');
-  </script>
-</dom-module>
-"""
-    file_contents[os.path.normpath('/py_vulcanize/py_vulcanize.html')] = """<!DOCTYPE html>
-"""
-    file_contents[os.path.normpath('/components/widget.html')] = """
-<!DOCTYPE html>
-<link rel="import" href="/py_vulcanize.html">
-<widget name="widget.html"></widget>
-<script>
-'use strict';
-console.log('inline script for widget.html');
-</script>
-"""
-    file_contents[os.path.normpath('/tmp/a/common.css')] = """
-/* /tmp/a/common.css was written */
-"""
-    file_contents[os.path.normpath('/raw/raw_script.js')] = """
-console.log('/raw/raw_script.js was written');
-"""
-    file_contents[os.path.normpath(
-        '/raw/components/polymer/polymer.min.js')] = """
-"""
-
-    with fake_fs.FakeFS(file_contents):
-      project = project_module.Project(
-          [os.path.normpath('/py_vulcanize/'),
-           os.path.normpath('/tmp/'),
-           os.path.normpath('/components/'),
-           os.path.normpath('/raw/')])
-      loader = resource_loader.ResourceLoader(project)
-      a_b_start_module = loader.LoadModule(
-          module_name='a.b.start', excluded_scripts=['\/excluded_script.js'])
-      load_sequence = project.CalcLoadSequenceForModules([a_b_start_module])
-
-      # Check load sequence names.
-      load_sequence_names = [x.name for x in load_sequence]
-      self.assertEquals(['py_vulcanize',
-                         'widget',
-                         'a.b.start'], load_sequence_names)
-
-      # Check module_deps on a_b_start_module
-      def HasDependentModule(module, name):
-        return [x for x in module.dependent_modules
-                if x.name == name]
-      assert HasDependentModule(a_b_start_module, 'widget')
-
-      # Check JS generation.
-      js = generate.GenerateJS(load_sequence)
-      assert 'inline script for start.html' in js
-      assert 'inline script for widget.html' in js
-      assert '/raw/raw_script.js' in js
-      assert 'excluded_script.js' not in js
-
-      # Check HTML generation.
-      html = generate.GenerateStandaloneHTMLAsString(
-          load_sequence, title='', flattened_js_url='/blah.js')
-      assert '<dom-module id="start">' in html
-      assert 'inline script for widget.html' not in html
-      assert 'common.css' in html
-
-  def testPolymerConversion(self):
-    file_contents = {}
-    file_contents[os.path.normpath('/tmp/a/b/my_component.html')] = """
-<!DOCTYPE html>
-<dom-module id="my-component">
-  <template>
-  </template>
-  <script>
-    'use strict';
-    Polymer ( {
-      is: "my-component"
-    });
-  </script>
-</dom-module>
-"""
-    with fake_fs.FakeFS(file_contents):
-      project = project_module.Project([
-          os.path.normpath('/py_vulcanize/'), os.path.normpath('/tmp/')])
-      loader = resource_loader.ResourceLoader(project)
-      my_component = loader.LoadModule(module_name='a.b.my_component')
-
-      f = StringIO.StringIO()
-      my_component.AppendJSContentsToFile(
-          f,
-          use_include_tags_for_scripts=False,
-          dir_for_include_tag_root=None)
-      js = f.getvalue().rstrip()
-      expected_js = """
-    'use strict';
-    Polymer ( {
-      is: "my-component"
-    });
-""".rstrip()
-      self.assertEquals(expected_js, js)
-
-  def testInlineStylesheetURLs(self):
-    file_contents = {}
-    file_contents[os.path.normpath('/tmp/a/b/my_component.html')] = """
-<!DOCTYPE html>
-<style>
-.some-rule {
-    background-image: url('../something.jpg');
-}
-</style>
-"""
-    file_contents[os.path.normpath('/tmp/a/something.jpg')] = 'jpgdata'
-    with fake_fs.FakeFS(file_contents):
-      project = project_module.Project([
-          os.path.normpath('/py_vulcanize/'), os.path.normpath('/tmp/')])
-      loader = resource_loader.ResourceLoader(project)
-      my_component = loader.LoadModule(module_name='a.b.my_component')
-
-      computed_deps = []
-      my_component.AppendDirectlyDependentFilenamesTo(computed_deps)
-      self.assertEquals(set(computed_deps),
-                        set([os.path.normpath('/tmp/a/b/my_component.html'),
-                             os.path.normpath('/tmp/a/something.jpg')]))
-
-      f = StringIO.StringIO()
-      ctl = html_generation_controller.HTMLGenerationController()
-      my_component.AppendHTMLContentsToFile(f, ctl)
-      html = f.getvalue().rstrip()
-      # FIXME: This is apparently not used.
-      expected_html = """
-.some-rule {
-    background-image: url(data:image/jpg;base64,anBnZGF0YQ==);
-}
-""".rstrip()
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/js_utils.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/js_utils.py
deleted file mode 100644
index 6e6ca9d..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/js_utils.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-def EscapeJSIfNeeded(js):
-  return js.replace('</script>', '<\/script>')
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/js_utils_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/js_utils_unittest.py
deleted file mode 100644
index cb8025c..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/js_utils_unittest.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from py_vulcanize import js_utils
-
-
-class ValidateStrictModeTests(unittest.TestCase):
-
-  def testEscapeJSIfNeeded(self):
-    self.assertEqual(
-        '<script>var foo;<\/script>',
-        js_utils.EscapeJSIfNeeded('<script>var foo;</script>'))
-    self.assertEqual(
-        '<script>var foo;<\/script>',
-        js_utils.EscapeJSIfNeeded('<script>var foo;<\/script>'))
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/module.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/module.py
deleted file mode 100644
index bd6a68f..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/module.py
+++ /dev/null
@@ -1,262 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""This module contains the Module class and other classes for resources.
-
-The Module class represents a module in the trace viewer system. A module has
-a name, and may require a variety of other resources, such as stylesheets,
-template objects, raw JavaScript, or other modules.
-
-Other resources include HTML templates, raw JavaScript files, and stylesheets.
-"""
-
-import os
-import inspect
-import codecs
-
-from py_vulcanize import js_utils
-
-
-class DepsException(Exception):
-  """Exceptions related to module dependency resolution."""
-
-  def __init__(self, fmt, *args):
-    from py_vulcanize import style_sheet as style_sheet_module
-    context = []
-    frame = inspect.currentframe()
-    while frame:
-      frame_locals = frame.f_locals
-
-      module_name = None
-      if 'self' in frame_locals:
-        s = frame_locals['self']
-        if isinstance(s, Module):
-          module_name = s.name
-        if isinstance(s, style_sheet_module.StyleSheet):
-          module_name = s.name + '.css'
-      if not module_name:
-        if 'module' in frame_locals:
-          module = frame_locals['module']
-          if isinstance(s, Module):
-            module_name = module.name
-        elif 'm' in frame_locals:
-          module = frame_locals['m']
-          if isinstance(s, Module):
-            module_name = module.name
-
-      if module_name:
-        if len(context):
-          if context[-1] != module_name:
-            context.append(module_name)
-        else:
-          context.append(module_name)
-
-      frame = frame.f_back
-
-    context.reverse()
-    self.context = context
-    context_str = '\n'.join('  %s' % x for x in context)
-    Exception.__init__(
-        self, 'While loading:\n%s\nGot: %s' % (context_str, (fmt % args)))
-
-
-class ModuleDependencyMetadata(object):
-
-  def __init__(self):
-    self.dependent_module_names = []
-    self.dependent_raw_script_relative_paths = []
-    self.style_sheet_names = []
-
-  def AppendMetdata(self, other):
-    self.dependent_module_names += other.dependent_module_names
-    self.dependent_raw_script_relative_paths += \
-        other.dependent_raw_script_relative_paths
-    self.style_sheet_names += other.style_sheet_names
-
-
-_next_module_id = 1
-
-
-class Module(object):
-  """Represents a JavaScript module.
-
-  Interesting properties include:
-    name: Module name, may include a namespace, e.g. 'py_vulcanize.foo'.
-    filename: The filename of the actual module.
-    contents: The text contents of the module.
-    dependent_modules: Other modules that this module depends on.
-
-  In addition to these properties, a Module also contains lists of other
-  resources that it depends on.
-  """
-
-  def __init__(self, loader, name, resource, load_resource=True):
-    assert isinstance(name, basestring), 'Got %s instead' % repr(name)
-
-    global _next_module_id
-    self._id = _next_module_id
-    _next_module_id += 1
-
-    self.loader = loader
-    self.name = name
-    self.resource = resource
-
-    if load_resource:
-      f = codecs.open(self.filename, mode='r', encoding='utf-8')
-      self.contents = f.read()
-      f.close()
-    else:
-      self.contents = None
-
-    # Dependency metadata, set up during Parse().
-    self.dependency_metadata = None
-
-    # Actual dependencies, set up during load().
-    self.dependent_modules = []
-    self.dependent_raw_scripts = []
-    self.scripts = []
-    self.style_sheets = []
-
-    # Caches.
-    self._all_dependent_modules_recursive = None
-
-  def __repr__(self):
-    return '%s(%s)' % (self.__class__.__name__, self.name)
-
-  @property
-  def id(self):
-    return self._id
-
-  @property
-  def filename(self):
-    return self.resource.absolute_path
-
-  def IsThirdPartyComponent(self):
-    """Checks whether this module is a third-party Polymer component."""
-    if os.path.join('third_party', 'components') in self.filename:
-      return True
-    if os.path.join('third_party', 'polymer', 'components') in self.filename:
-      return True
-    return False
-
-  def Parse(self, excluded_scripts):
-    """Parses self.contents and fills in the module's dependency metadata."""
-    raise NotImplementedError()
-
-  def GetTVCMDepsModuleType(self):
-    """Returns the py_vulcanize.setModuleInfo type for this module"""
-    raise NotImplementedError()
-
-  def AppendJSContentsToFile(self,
-                             f,
-                             use_include_tags_for_scripts,
-                             dir_for_include_tag_root):
-    """Appends the js for this module to the provided file."""
-    for script in self.scripts:
-      script.AppendJSContentsToFile(f, use_include_tags_for_scripts,
-                                    dir_for_include_tag_root)
-
-  def AppendHTMLContentsToFile(self, f, ctl, minify=False):
-    """Appends the HTML for this module [without links] to the provided file."""
-    pass
-
-  def Load(self, excluded_scripts=None):
-    """Loads the sub-resources that this module depends on from its dependency
-    metadata.
-
-    Raises:
-      DepsException: There was a problem finding one of the dependencies.
-      Exception: There was a problem parsing a module that this one depends on.
-    """
-    assert self.name, 'Module name must be set before dep resolution.'
-    assert self.filename, 'Module filename must be set before dep resolution.'
-    assert self.name in self.loader.loaded_modules, (
-        'Module must be registered in resource loader before loading.')
-
-    metadata = self.dependency_metadata
-    for name in metadata.dependent_module_names:
-      module = self.loader.LoadModule(module_name=name,
-                                      excluded_scripts=excluded_scripts)
-      self.dependent_modules.append(module)
-
-    for name in metadata.style_sheet_names:
-      style_sheet = self.loader.LoadStyleSheet(name)
-      self.style_sheets.append(style_sheet)
-
-  @property
-  def all_dependent_modules_recursive(self):
-    if self._all_dependent_modules_recursive:
-      return self._all_dependent_modules_recursive
-
-    self._all_dependent_modules_recursive = set(self.dependent_modules)
-    for dependent_module in self.dependent_modules:
-      self._all_dependent_modules_recursive.update(
-          dependent_module.all_dependent_modules_recursive)
-    return self._all_dependent_modules_recursive
-
-  def ComputeLoadSequenceRecursive(self, load_sequence, already_loaded_set,
-                                   depth=0):
-    """Recursively builds up a load sequence list.
-
-    Args:
-      load_sequence: A list which will be incrementally built up.
-      already_loaded_set: A set of modules that has already been added to the
-          load sequence list.
-      depth: The depth of recursion. If it too deep, that indicates a loop.
-    """
-    if depth > 32:
-      raise Exception('Include loop detected on %s', self.name)
-    for dependent_module in self.dependent_modules:
-      if dependent_module.name in already_loaded_set:
-        continue
-      dependent_module.ComputeLoadSequenceRecursive(
-          load_sequence, already_loaded_set, depth + 1)
-    if self.name not in already_loaded_set:
-      already_loaded_set.add(self.name)
-      load_sequence.append(self)
-
-  def GetAllDependentFilenamesRecursive(self, include_raw_scripts=True):
-    dependent_filenames = []
-
-    visited_modules = set()
-
-    def Get(module):
-      module.AppendDirectlyDependentFilenamesTo(
-          dependent_filenames, include_raw_scripts)
-      visited_modules.add(module)
-      for m in module.dependent_modules:
-        if m in visited_modules:
-          continue
-        Get(m)
-
-    Get(self)
-    return dependent_filenames
-
-  def AppendDirectlyDependentFilenamesTo(
-      self, dependent_filenames, include_raw_scripts=True):
-    dependent_filenames.append(self.resource.absolute_path)
-    if include_raw_scripts:
-      for raw_script in self.dependent_raw_scripts:
-        dependent_filenames.append(raw_script.resource.absolute_path)
-    for style_sheet in self.style_sheets:
-      style_sheet.AppendDirectlyDependentFilenamesTo(dependent_filenames)
-
-
-class RawScript(object):
-  """Represents a raw script resource referenced by a module via the
-  py_vulcanize.requireRawScript(xxx) directive."""
-
-  def __init__(self, resource):
-    self.resource = resource
-
-  @property
-  def filename(self):
-    return self.resource.absolute_path
-
-  @property
-  def contents(self):
-    return self.resource.contents
-
-  def __repr__(self):
-    return 'RawScript(%s)' % self.filename
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/module_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/module_unittest.py
deleted file mode 100644
index ed92db3..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/module_unittest.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tests for the module module, which contains Module and related classes."""
-
-import os
-import unittest
-
-from py_vulcanize import fake_fs
-from py_vulcanize import module
-from py_vulcanize import resource_loader
-from py_vulcanize import project as project_module
-
-
-class ModuleIntegrationTests(unittest.TestCase):
-
-  def test_module(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/src/x.html', """
-<!DOCTYPE html>
-<link rel="import" href="/y.html">
-<link rel="import" href="/z.html">
-<script>
-'use strict';
-</script>
-""")
-    fs.AddFile('/src/y.html', """
-<!DOCTYPE html>
-<link rel="import" href="/z.html">
-""")
-    fs.AddFile('/src/z.html', """
-<!DOCTYPE html>
-""")
-    fs.AddFile('/src/py_vulcanize.html', '<!DOCTYPE html>')
-    with fs:
-      project = project_module.Project([os.path.normpath('/src/')])
-      loader = resource_loader.ResourceLoader(project)
-      x_module = loader.LoadModule('x')
-
-      self.assertEquals([loader.loaded_modules['y'],
-                         loader.loaded_modules['z']],
-                        x_module.dependent_modules)
-
-      already_loaded_set = set()
-      load_sequence = []
-      x_module.ComputeLoadSequenceRecursive(load_sequence, already_loaded_set)
-
-      self.assertEquals([loader.loaded_modules['z'],
-                         loader.loaded_modules['y'],
-                         x_module],
-                        load_sequence)
-
-  def testBasic(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/x/src/my_module.html', """
-<!DOCTYPE html>
-<link rel="import" href="/py_vulcanize/foo.html">
-});
-""")
-    fs.AddFile('/x/py_vulcanize/foo.html', """
-<!DOCTYPE html>
-});
-""")
-    project = project_module.Project([os.path.normpath('/x')])
-    loader = resource_loader.ResourceLoader(project)
-    with fs:
-      my_module = loader.LoadModule(module_name='src.my_module')
-      dep_names = [x.name for x in my_module.dependent_modules]
-      self.assertEquals(['py_vulcanize.foo'], dep_names)
-
-  def testDepsExceptionContext(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/x/src/my_module.html', """
-<!DOCTYPE html>
-<link rel="import" href="/py_vulcanize/foo.html">
-""")
-    fs.AddFile('/x/py_vulcanize/foo.html', """
-<!DOCTYPE html>
-<link rel="import" href="missing.html">
-""")
-    project = project_module.Project([os.path.normpath('/x')])
-    loader = resource_loader.ResourceLoader(project)
-    with fs:
-      exc = None
-      try:
-        loader.LoadModule(module_name='src.my_module')
-        assert False, 'Expected an exception'
-      except module.DepsException as e:
-        exc = e
-      self.assertEquals(
-          ['src.my_module', 'py_vulcanize.foo'],
-          exc.context)
-
-  def testGetAllDependentFilenamesRecursive(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/x/y/z/foo.html', """
-<!DOCTYPE html>
-<link rel="import" href="/z/foo2.html">
-<link rel="stylesheet" href="/z/foo.css">
-<script src="/bar.js"></script>
-""")
-    fs.AddFile('/x/y/z/foo.css', """
-.x .y {
-    background-image: url(foo.jpeg);
-}
-""")
-    fs.AddFile('/x/y/z/foo.jpeg', '')
-    fs.AddFile('/x/y/z/foo2.html', """
-<!DOCTYPE html>
-""")
-    fs.AddFile('/x/raw/bar.js', 'hello')
-    project = project_module.Project([
-        os.path.normpath('/x/y'), os.path.normpath('/x/raw/')])
-    loader = resource_loader.ResourceLoader(project)
-    with fs:
-      my_module = loader.LoadModule(module_name='z.foo')
-      self.assertEquals(1, len(my_module.dependent_raw_scripts))
-
-      dependent_filenames = my_module.GetAllDependentFilenamesRecursive()
-      self.assertEquals(
-          [
-              os.path.normpath('/x/y/z/foo.html'),
-              os.path.normpath('/x/raw/bar.js'),
-              os.path.normpath('/x/y/z/foo.css'),
-              os.path.normpath('/x/y/z/foo.jpeg'),
-              os.path.normpath('/x/y/z/foo2.html'),
-          ],
-          dependent_filenames)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
deleted file mode 100644
index 4a0888c..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
+++ /dev/null
@@ -1,283 +0,0 @@
-# Copyright (c) 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-from py_vulcanize import js_utils
-from py_vulcanize import module
-from py_vulcanize import strip_js_comments
-from py_vulcanize import html_generation_controller
-
-
-def _AddToPathIfNeeded(path):
-  if path not in sys.path:
-    sys.path.insert(0, path)
-
-
-def _InitBeautifulSoup():
-  catapult_path = os.path.abspath(
-      os.path.join(os.path.dirname(__file__),
-                   os.path.pardir, os.path.pardir, os.path.pardir))
-  bs_path = os.path.join(catapult_path, 'third_party', 'beautifulsoup4')
-  _AddToPathIfNeeded(bs_path)
-
-  html5lib_path = os.path.join(catapult_path, 'third_party', 'html5lib-python')
-  _AddToPathIfNeeded(html5lib_path)
-
-  six_path = os.path.join(catapult_path, 'third_party', 'six')
-  _AddToPathIfNeeded(six_path)
-
-
-_InitBeautifulSoup()
-import bs4
-
-class Script(object):
-
-  def __init__(self, soup):
-    if not soup:
-      raise module.DepsException('Script object created without soup')
-    self._soup = soup
-
-  def AppendJSContentsToFile(self, f, *args, **kwargs):
-    raise NotImplementedError()
-
-class InlineScript(Script):
-
-  def __init__(self, soup):
-    super(InlineScript, self).__init__(soup)
-    self._stripped_contents = None
-    self._open_tags = None
-    self.is_external = False
-
-  @property
-  def contents(self):
-    return unicode(self._soup.string)
-
-  @property
-  def stripped_contents(self):
-    if not self._stripped_contents:
-      self._stripped_contents = strip_js_comments.StripJSComments(
-          self.contents)
-    return self._stripped_contents
-
-  @property
-  def open_tags(self):
-    if self._open_tags:
-      return self._open_tags
-    open_tags = []
-    cur = self._soup.parent
-    while cur:
-      if isinstance(cur, bs4.BeautifulSoup):
-        break
-
-      open_tags.append(_Tag(cur.name, cur.attrs))
-      cur = cur.parent
-
-    open_tags.reverse()
-    assert open_tags[-1].tag == 'script'
-    del open_tags[-1]
-
-    self._open_tags = open_tags
-    return self._open_tags
-
-  def AppendJSContentsToFile(self, f, *args, **kwargs):
-    js = self.contents
-    escaped_js = js_utils.EscapeJSIfNeeded(js)
-    f.write(escaped_js)
-    f.write('\n')
-
-class ExternalScript(Script):
-
-  def __init__(self, soup):
-    super(ExternalScript, self).__init__(soup)
-    if 'src' not in soup.attrs:
-      raise Exception("{0} is not an external script.".format(soup))
-    self.is_external = True
-    self._loaded_raw_script = None
-
-  @property
-  def loaded_raw_script(self):
-    if self._loaded_raw_script:
-      return self._loaded_raw_script
-
-    return None
-
-  @loaded_raw_script.setter
-  def loaded_raw_script(self, value):
-    self._loaded_raw_script = value
-
-  @property
-  def src(self):
-    return self._soup.attrs['src']
-
-  def AppendJSContentsToFile(self,
-                             f,
-                             use_include_tags_for_scripts,
-                             dir_for_include_tag_root):
-    raw_script = self.loaded_raw_script
-    if not raw_script:
-      return
-
-    if use_include_tags_for_scripts:
-      rel_filename = os.path.relpath(raw_script.filename,
-                                    dir_for_include_tag_root)
-      f.write("""<include src="%s">\n""" % rel_filename)
-    else:
-      f.write(js_utils.EscapeJSIfNeeded(raw_script.contents))
-      f.write('\n')
-
-def _CreateSoupWithoutHeadOrBody(html):
-  soupCopy = bs4.BeautifulSoup(html, 'html5lib')
-  soup = bs4.BeautifulSoup()
-  soup.reset()
-  if soupCopy.head:
-    for n in soupCopy.head.contents:
-      n.extract()
-      soup.append(n)
-  if soupCopy.body:
-    for n in soupCopy.body.contents:
-      n.extract()
-      soup.append(n)
-  return soup
-
-
-class HTMLModuleParserResults(object):
-
-  def __init__(self, html):
-    self._soup = bs4.BeautifulSoup(html, 'html5lib')
-    self._inline_scripts = None
-    self._scripts = None
-
-  @property
-  def scripts_external(self):
-    tags = self._soup.findAll('script', src=True)
-    return [t['src'] for t in tags]
-
-  @property
-  def inline_scripts(self):
-    if not self._inline_scripts:
-      tags = self._soup.findAll('script', src=None)
-      self._inline_scripts = [InlineScript(t.string) for t in tags]
-    return self._inline_scripts
-
-  @property
-  def scripts(self):
-    if not self._scripts:
-      self._scripts = []
-      script_elements = self._soup.findAll('script')
-      for element in script_elements:
-        if 'src' in element.attrs:
-          self._scripts.append(ExternalScript(element))
-        else:
-          self._scripts.append(InlineScript(element))
-    return self._scripts
-
-  @property
-  def imports(self):
-    tags = self._soup.findAll('link', rel='import')
-    return [t['href'] for t in tags]
-
-  @property
-  def stylesheets(self):
-    tags = self._soup.findAll('link', rel='stylesheet')
-    return [t['href'] for t in tags]
-
-  @property
-  def inline_stylesheets(self):
-    tags = self._soup.findAll('style')
-    return [unicode(t.string) for t in tags]
-
-  def YieldHTMLInPieces(self, controller, minify=False):
-    yield self.GenerateHTML(controller, minify)
-
-  def GenerateHTML(self, controller, minify=False, prettify=False):
-    soup = _CreateSoupWithoutHeadOrBody(unicode(self._soup))
-
-    # Remove declaration.
-    for x in soup.contents:
-      if isinstance(x, bs4.Doctype):
-        x.extract()
-
-    # Remove declaration.
-    for x in soup.contents:
-      if isinstance(x, bs4.Declaration):
-        x.extract()
-
-    # Remove all imports.
-    imports = soup.findAll('link', rel='import')
-    for imp in imports:
-      imp.extract()
-
-    # Remove all script links.
-    scripts_external = soup.findAll('script', src=True)
-    for script in scripts_external:
-      script.extract()
-
-    # Remove all in-line scripts.
-    scripts_external = soup.findAll('script', src=None)
-    for script in scripts_external:
-      script.extract()
-
-    # Process all in-line styles.
-    inline_styles = soup.findAll('style')
-    for style in inline_styles:
-      html = controller.GetHTMLForInlineStylesheet(unicode(style.string))
-      if html:
-        ns = soup.new_tag('style')
-        ns.append(bs4.NavigableString(html))
-        style.replaceWith(ns)
-      else:
-        style.extract()
-
-    # Rewrite all external stylesheet hrefs or remove, as needed.
-    stylesheet_links = soup.findAll('link', rel='stylesheet')
-    for stylesheet_link in stylesheet_links:
-      html = controller.GetHTMLForStylesheetHRef(stylesheet_link['href'])
-      if html:
-        tmp = bs4.BeautifulSoup(html, 'html5lib').findAll('style')
-        assert len(tmp) == 1
-        stylesheet_link.replaceWith(tmp[0])
-      else:
-        stylesheet_link.extract()
-
-    # Remove comments if minifying.
-    if minify:
-      comments = soup.findAll(
-          text=lambda text: isinstance(text, bs4.Comment))
-      for comment in comments:
-        comment.extract()
-    if prettify:
-      return soup.prettify('utf-8').strip()
-
-    # We are done.
-    return unicode(soup).strip()
-
-  @property
-  def html_contents_without_links_and_script(self):
-    return self.GenerateHTML(
-        html_generation_controller.HTMLGenerationController())
-
-
-class _Tag(object):
-
-  def __init__(self, tag, attrs):
-    self.tag = tag
-    self.attrs = attrs
-
-  def __repr__(self):
-    attr_string = ' '.join('%s="%s"' % (x[0], x[1]) for x in self.attrs)
-    return '<%s %s>' % (self.tag, attr_string)
-
-
-class HTMLModuleParser():
-
-  def Parse(self, html):
-    if html is None:
-      html = ''
-    else:
-      if html.find('< /script>') != -1:
-        raise Exception('Escape script tags with <\/script>')
-
-    return HTMLModuleParserResults(html)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps_unittest.py
deleted file mode 100755
index 2a30a29..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps_unittest.py
+++ /dev/null
@@ -1,292 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import re
-import unittest
-
-from py_vulcanize import parse_html_deps
-from py_vulcanize import html_generation_controller
-
-
-class ParseTests(unittest.TestCase):
-
-  def test_parse_empty(self):
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse('')
-    self.assertEquals([], module.scripts_external)
-    self.assertEquals([], module.inline_scripts)
-    self.assertEquals([], module.stylesheets)
-    self.assertEquals([], module.imports)
-
-  def test_parse_none(self):
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(None)
-    self.assertEquals([], module.scripts_external)
-    self.assertEquals([], module.inline_scripts)
-    self.assertEquals([], module.stylesheets)
-    self.assertEquals([], module.imports)
-
-  def test_parse_script_src_basic(self):
-    html = """<!DOCTYPE html>
-              <html>
-                <head>
-                  <script src="polymer.min.js"></script>
-                  <script src="foo.js"></script>
-                </head>
-                <body>
-                </body>
-              </html>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals(['polymer.min.js', 'foo.js'], module.scripts_external)
-    self.assertEquals([], module.inline_scripts)
-    self.assertEquals([], module.stylesheets)
-    self.assertEquals([], module.imports)
-    self.assertNotIn(
-        'DOCTYPE html',
-        module.html_contents_without_links_and_script)
-
-  def test_parse_link_rel_import(self):
-    html = """<!DOCTYPE html>
-              <html>
-                <head>
-                  <link rel="import" href="x-foo.html">
-                </head>
-                <body>
-                </body>
-              </html>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals([], module.scripts_external)
-    self.assertEquals([], module.inline_scripts)
-    self.assertEquals([], module.stylesheets)
-    self.assertEquals(['x-foo.html'], module.imports)
-
-  def test_parse_script_inline(self):
-    html = """<polymer-element name="tk-element-proto">
-                <template>
-                </template>
-                <script>
-                  py_vulcanize.require("foo");
-                  py_vulcanize.require('bar');
-                </script>
-              </polymer-element>"""
-
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals([], module.scripts_external)
-    self.assertEquals(1, len(module.inline_scripts))
-    self.assertEquals([], module.stylesheets)
-    self.assertEquals([], module.imports)
-
-    script0 = module.inline_scripts[0]
-    val = re.sub(r'\s+', '', script0.contents)
-    inner_script = """py_vulcanize.require("foo");py_vulcanize.require('bar');"""
-    self.assertEquals(inner_script, val)
-
-    self.assertEquals(3, len(script0.open_tags))
-    self.assertEquals('polymer-element', script0.open_tags[2].tag)
-
-    self.assertNotIn(
-        'py_vulcanize.require("foo");',
-        module.html_contents_without_links_and_script)
-
-  def test_parse_script_inline_and_external(self):
-    html = """<polymer-element name="tk-element-proto">
-                <template>
-                </template>
-                <script>window = {}</script>
-                <script src="foo.js"></script>
-                <script>window = undefined</script>
-              </polymer-element>"""
-
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals(3, len(module.scripts))
-    self.assertEquals('window = {}', module.scripts[0].contents)
-    self.assertEquals("foo.js",module.scripts[1].src)
-    self.assertTrue(module.scripts[1].is_external)
-    self.assertEquals('window = undefined', module.scripts[2].contents)
-    self.assertEquals([], module.imports)
-
-  def test_parse_script_src_sripping(self):
-    html = """
-<script src="blah.js"></script>
-"""
-    module = parse_html_deps.HTMLModuleParser().Parse(html)
-    self.assertEquals('',
-                      module.html_contents_without_links_and_script)
-
-  def test_parse_link_rel_stylesheet(self):
-    html = """<polymer-element name="hi">
-                <template>
-                  <link rel="stylesheet" href="frameworkstyles.css">
-                </template>
-              </polymer-element>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals([], module.scripts_external)
-    self.assertEquals([], module.inline_scripts)
-    self.assertEquals(['frameworkstyles.css'], module.stylesheets)
-    self.assertEquals([], module.imports)
-
-    class Ctl(html_generation_controller.HTMLGenerationController):
-
-      def GetHTMLForStylesheetHRef(self, href):
-        if href == 'frameworkstyles.css':
-          return '<style>FRAMEWORK</style>'
-        return None
-
-    gen_html = module.GenerateHTML(Ctl())
-    ghtm = """<polymer-element name="hi">
-                <template>
-                  <style>FRAMEWORK</style>
-                </template>
-              </polymer-element>"""
-    self.assertEquals(ghtm, gen_html)
-
-  def test_parse_inline_style(self):
-    html = """<style>
-  hello
-</style>"""
-    module = parse_html_deps.HTMLModuleParser().Parse(html)
-    self.assertEquals(html, module.html_contents_without_links_and_script)
-
-    class Ctl(html_generation_controller.HTMLGenerationController):
-
-      def GetHTMLForInlineStylesheet(self, contents):
-        if contents == '\n  hello\n':
-          return '\n  HELLO\n'
-        return None
-
-    gen_html = module.GenerateHTML(Ctl())
-    ghtm = """<style>
-  HELLO
-</style>"""
-    self.assertEquals(ghtm, gen_html)
-
-  def test_parse_style_import(self):
-    html = """<polymer-element name="x-blink">
-                <template>
-                  <style>
-                    @import url(awesome.css);
-                  </style>
-                </template>
-              </polymer-element>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    self.assertRaises(lambda: parser.Parse(html))
-
-  def test_nested_templates(self):
-    orig_html = """<template>
-                  <template>
-                    <div id="foo"></div>
-                  </template>
-                </template>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    res = parser.Parse(orig_html)
-    html = res.html_contents_without_links_and_script
-    self.assertEquals(html, orig_html)
-
-  def test_html_contents_basic(self):
-    html = """<a b="c">d</a>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals(html, module.html_contents_without_links_and_script)
-
-  def test_html_contents_with_entity(self):
-    html = """<a>&rarr;</a>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals(u'<a>\u2192</a>',
-                      module.html_contents_without_links_and_script)
-
-  def test_html_content_with_charref(self):
-    html = """<a>&#62;</a>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals('<a>&gt;</a>',
-                      module.html_contents_without_links_and_script)
-
-  def test_html_content_start_end_br(self):
-    html = """<a><br /></a>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals('<a><br/></a>',
-                      module.html_contents_without_links_and_script)
-
-  def test_html_content_start_end_img(self):
-    html = """<a><img src="foo.png" id="bar" /></a>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals('<a><img id="bar" src="foo.png"/></a>',
-                      module.html_contents_without_links_and_script)
-
-  def test_html_contents_with_link_stripping(self):
-    html = """<a b="c">d</a>
-              <link rel="import" href="x-foo.html">"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals("""<a b="c">d</a>""",
-                      module.html_contents_without_links_and_script.strip())
-
-  def test_html_contents_with_style_link_stripping(self):
-    html = """<a b="c">d</a>
-              <link rel="stylesheet" href="frameworkstyles.css">"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals("""<a b="c">d</a>""",
-                      module.html_contents_without_links_and_script.strip())
-
-  def test_br_does_not_raise(self):
-    html = """<div><br/></div>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    parser.Parse(html)
-
-  def test_p_does_not_raises(self):
-    html = """<div></p></div>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    parser.Parse(html)
-
-  def test_link_endlink_does_not_raise(self):
-    html = """<link rel="stylesheet" href="foo.css"></link>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    parser.Parse(html)
-
-  def test_link_script_does_not_raise(self):
-    html = """<link rel="stylesheet" href="foo.css">
-              <script>
-              </script>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    parser.Parse(html)
-
-  def test_script_with_script_inside_as_js(self):
-    html = """<script>
-              var html_lines = [
-                '<script>',
-                '<\/script>',
-              ];
-              </script>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    parser.Parse(html)
-
-  def test_invalid_script_escaping_raises(self):
-    html = """<script>
-              var html_lines = [
-                '<script>',
-                '< /script>',
-              ];
-              </script>"""
-    parser = parse_html_deps.HTMLModuleParser()
-
-    def DoIt():
-      parser.Parse(html)
-    self.assertRaises(Exception, DoIt)
-
-  def test_script_with_cdata(self):
-    html = """<script></h2></script>"""
-    parser = parse_html_deps.HTMLModuleParser()
-    module = parser.Parse(html)
-    self.assertEquals(1, len(module.inline_scripts))
-    self.assertEquals('</h2>', module.inline_scripts[0].contents)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/project.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/project.py
deleted file mode 100644
index d8f9ca4..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/project.py
+++ /dev/null
@@ -1,231 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import collections
-import os
-import cStringIO
-
-from py_vulcanize import resource_loader
-
-
-def _FindAllFilesRecursive(source_paths):
-  all_filenames = set()
-  for source_path in source_paths:
-    for dirpath, _, filenames in os.walk(source_path):
-      for f in filenames:
-        if f.startswith('.'):
-          continue
-        x = os.path.abspath(os.path.join(dirpath, f))
-        all_filenames.add(x)
-  return all_filenames
-
-
-class AbsFilenameList(object):
-
-  def __init__(self, willDirtyCallback):
-    self._willDirtyCallback = willDirtyCallback
-    self._filenames = []
-    self._filenames_set = set()
-
-  def _WillBecomeDirty(self):
-    if self._willDirtyCallback:
-      self._willDirtyCallback()
-
-  def append(self, filename):
-    assert os.path.isabs(filename)
-    self._WillBecomeDirty()
-    self._filenames.append(filename)
-    self._filenames_set.add(filename)
-
-  def extend(self, iterable):
-    self._WillBecomeDirty()
-    for filename in iterable:
-      assert os.path.isabs(filename)
-      self._filenames.append(filename)
-      self._filenames_set.add(filename)
-
-  def appendRel(self, basedir, filename):
-    assert os.path.isabs(basedir)
-    self._WillBecomeDirty()
-    n = os.path.abspath(os.path.join(basedir, filename))
-    self._filenames.append(n)
-    self._filenames_set.add(n)
-
-  def extendRel(self, basedir, iterable):
-    self._WillBecomeDirty()
-    assert os.path.isabs(basedir)
-    for filename in iterable:
-      n = os.path.abspath(os.path.join(basedir, filename))
-      self._filenames.append(n)
-      self._filenames_set.add(n)
-
-  def __contains__(self, x):
-    return x in self._filenames_set
-
-  def __len__(self):
-    return self._filenames.__len__()
-
-  def __iter__(self):
-    return iter(self._filenames)
-
-  def __repr__(self):
-    return repr(self._filenames)
-
-  def __str__(self):
-    return str(self._filenames)
-
-
-class Project(object):
-
-  py_vulcanize_path = os.path.abspath(os.path.join(
-      os.path.dirname(__file__), '..'))
-
-  def __init__(self, source_paths=None):
-    """
-    source_paths: A list of top-level directories in which modules and raw
-        scripts can be found. Module paths are relative to these directories.
-    """
-    self._loader = None
-    self._frozen = False
-    self.source_paths = AbsFilenameList(self._WillPartOfPathChange)
-
-    if source_paths is not None:
-      self.source_paths.extend(source_paths)
-
-  def Freeze(self):
-    self._frozen = True
-
-  def _WillPartOfPathChange(self):
-    if self._frozen:
-      raise Exception('The project is frozen. You cannot edit it now')
-    self._loader = None
-
-  @staticmethod
-  def FromDict(d):
-    return Project(d['source_paths'])
-
-  def AsDict(self):
-    return {
-        'source_paths': list(self.source_paths)
-    }
-
-  def __repr__(self):
-    return "Project(%s)" % repr(self.source_paths)
-
-  def AddSourcePath(self, path):
-    self.source_paths.append(path)
-
-  @property
-  def loader(self):
-    if self._loader is None:
-      self._loader = resource_loader.ResourceLoader(self)
-    return self._loader
-
-  def ResetLoader(self):
-    self._loader = None
-
-  def _Load(self, filenames):
-    return [self.loader.LoadModule(module_filename=filename) for
-            filename in filenames]
-
-  def LoadModule(self, module_name=None, module_filename=None):
-    return self.loader.LoadModule(module_name=module_name,
-                                  module_filename=module_filename)
-
-  def CalcLoadSequenceForModuleNames(self, module_names,
-                                     excluded_scripts=None):
-    modules = [self.loader.LoadModule(module_name=name,
-                                      excluded_scripts=excluded_scripts) for
-               name in module_names]
-    return self.CalcLoadSequenceForModules(modules)
-
-  def CalcLoadSequenceForModules(self, modules):
-    already_loaded_set = set()
-    load_sequence = []
-    for m in modules:
-      m.ComputeLoadSequenceRecursive(load_sequence, already_loaded_set)
-    return load_sequence
-
-  def GetDepsGraphFromModuleNames(self, module_names):
-    modules = [self.loader.LoadModule(module_name=name) for
-               name in module_names]
-    return self.GetDepsGraphFromModules(modules)
-
-  def GetDepsGraphFromModules(self, modules):
-    load_sequence = self.CalcLoadSequenceForModules(modules)
-    g = _Graph()
-    for m in load_sequence:
-      g.AddModule(m)
-
-      for dep in m.dependent_modules:
-        g.AddEdge(m, dep.id)
-
-    # FIXME: _GetGraph is not defined. Maybe `return g` is intended?
-    return _GetGraph(load_sequence)
-
-  def GetDominatorGraphForModulesNamed(self, module_names, load_sequence):
-    modules = [self.loader.LoadModule(module_name=name)
-               for name in module_names]
-    return self.GetDominatorGraphForModules(modules, load_sequence)
-
-  def GetDominatorGraphForModules(self, start_modules, load_sequence):
-    modules_by_id = {}
-    for m in load_sequence:
-      modules_by_id[m.id] = m
-
-    module_referrers = collections.defaultdict(list)
-    for m in load_sequence:
-      for dep in m.dependent_modules:
-        module_referrers[dep].append(m)
-
-    # Now start at the top module and reverse.
-    visited = set()
-    g = _Graph()
-
-    pending = collections.deque()
-    pending.extend(start_modules)
-    while len(pending):
-      cur = pending.pop()
-
-      g.AddModule(cur)
-      visited.add(cur)
-
-      for out_dep in module_referrers[cur]:
-        if out_dep in visited:
-          continue
-        g.AddEdge(out_dep, cur)
-        visited.add(out_dep)
-        pending.append(out_dep)
-
-    # Visited -> Dot
-    return g.GetDot()
-
-
-class _Graph(object):
-
-  def __init__(self):
-    self.nodes = []
-    self.edges = []
-
-  def AddModule(self, m):
-    f = cStringIO.StringIO()
-    m.AppendJSContentsToFile(f, False, None)
-
-    attrs = {
-        'label': '%s (%i)' % (m.name, f.tell())
-    }
-
-    f.close()
-
-    attr_items = ['%s="%s"' % (x, y) for x, y in attrs.iteritems()]
-    node = 'M%i [%s];' % (m.id, ','.join(attr_items))
-    self.nodes.append(node)
-
-  def AddEdge(self, mFrom, mTo):
-    edge = 'M%i -> M%i;' % (mFrom.id, mTo.id)
-    self.edges.append(edge)
-
-  def GetDot(self):
-    return 'digraph deps {\n\n%s\n\n%s\n}\n' % (
-        '\n'.join(self.nodes), '\n'.join(self.edges))
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/resource.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/resource.py
deleted file mode 100644
index 853dff9..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/resource.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A Resource is a file and its various associated canonical names."""
-
-import codecs
-import os
-
-
-class Resource(object):
-  """Represents a file found via a path search."""
-
-  def __init__(self, toplevel_dir, absolute_path, binary=False):
-    self.toplevel_dir = toplevel_dir
-    self.absolute_path = absolute_path
-    self._contents = None
-    self._binary = binary
-
-  @property
-  def relative_path(self):
-    """The path to the file from the top-level directory"""
-    return os.path.relpath(self.absolute_path, self.toplevel_dir)
-
-  @property
-  def unix_style_relative_path(self):
-    return self.relative_path.replace(os.sep, '/')
-
-  @property
-  def name(self):
-    """The dotted name for this resource based on its relative path."""
-    return self.name_from_relative_path(self.relative_path)
-
-  @staticmethod
-  def name_from_relative_path(relative_path):
-    dirname = os.path.dirname(relative_path)
-    basename = os.path.basename(relative_path)
-    modname = os.path.splitext(basename)[0]
-    if len(dirname):
-      name = dirname.replace(os.path.sep, '.') + '.' + modname
-    else:
-      name = modname
-    return name
-
-  @property
-  def contents(self):
-    if self._contents:
-      return self._contents
-    if not os.path.exists(self.absolute_path):
-      raise Exception('%s not found.' % self.absolute_path)
-    if self._binary:
-      f = open(self.absolute_path, mode='rb')
-    else:
-      f = codecs.open(self.absolute_path, mode='r', encoding='utf-8')
-    self._contents = f.read()
-    f.close()
-    return self._contents
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/resource_loader.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/resource_loader.py
deleted file mode 100644
index 015adaa..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/resource_loader.py
+++ /dev/null
@@ -1,228 +0,0 @@
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""ResourceFinder is a helper class for finding resources given their name."""
-
-import codecs
-import os
-
-from py_vulcanize import module
-from py_vulcanize import style_sheet as style_sheet_module
-from py_vulcanize import resource as resource_module
-from py_vulcanize import html_module
-from py_vulcanize import strip_js_comments
-
-
-class ResourceLoader(object):
-  """Manges loading modules and their dependencies from files.
-
-  Modules handle parsing and the construction of their individual dependency
-  pointers. The loader deals with bookkeeping of what has been loaded, and
-  mapping names to file resources.
-  """
-
-  def __init__(self, project):
-    self.project = project
-    self.stripped_js_by_filename = {}
-    self.loaded_modules = {}
-    self.loaded_raw_scripts = {}
-    self.loaded_style_sheets = {}
-    self.loaded_images = {}
-
-  @property
-  def source_paths(self):
-    """A list of base directories to search for modules under."""
-    return self.project.source_paths
-
-  def FindResource(self, some_path, binary=False):
-    """Finds a Resource for the given path.
-
-    Args:
-      some_path: A relative or absolute path to a file.
-
-    Returns:
-      A Resource or None.
-    """
-    if os.path.isabs(some_path):
-      return self.FindResourceGivenAbsolutePath(some_path, binary)
-    else:
-      return self.FindResourceGivenRelativePath(some_path, binary)
-
-  def FindResourceGivenAbsolutePath(self, absolute_path, binary=False):
-    """Returns a Resource for the given absolute path."""
-    candidate_paths = []
-    for source_path in self.source_paths:
-      if absolute_path.startswith(source_path):
-        candidate_paths.append(source_path)
-    if len(candidate_paths) == 0:
-      return None
-
-    # Sort by length. Longest match wins.
-    candidate_paths.sort(lambda x, y: len(x) - len(y))
-    longest_candidate = candidate_paths[-1]
-    return resource_module.Resource(longest_candidate, absolute_path, binary)
-
-  def FindResourceGivenRelativePath(self, relative_path, binary=False):
-    """Returns a Resource for the given relative path."""
-    absolute_path = None
-    for script_path in self.source_paths:
-      absolute_path = os.path.join(script_path, relative_path)
-      if os.path.exists(absolute_path):
-        return resource_module.Resource(script_path, absolute_path, binary)
-    return None
-
-  def _FindResourceGivenNameAndSuffix(
-        self, requested_name, extension, return_resource=False):
-    """Searches for a file and reads its contents.
-
-    Args:
-      requested_name: The name of the resource that was requested.
-      extension: The extension for this requested resource.
-
-    Returns:
-      A (path, contents) pair.
-    """
-    pathy_name = requested_name.replace('.', os.sep)
-    filename = pathy_name + extension
-
-    resource = self.FindResourceGivenRelativePath(filename)
-    if return_resource:
-      return resource
-    if not resource:
-      return None, None
-    return _read_file(resource.absolute_path)
-
-  def FindModuleResource(self, requested_module_name):
-    """Finds a module javascript file and returns a Resource, or none."""
-    js_resource = self._FindResourceGivenNameAndSuffix(
-        requested_module_name, '.js', return_resource=True)
-    html_resource = self._FindResourceGivenNameAndSuffix(
-        requested_module_name, '.html', return_resource=True)
-    if js_resource and html_resource:
-      if html_module.IsHTMLResourceTheModuleGivenConflictingResourceNames(
-          js_resource, html_resource):
-        return html_resource
-      return js_resource
-    elif js_resource:
-      return js_resource
-    return html_resource
-
-  def LoadModule(self, module_name=None, module_filename=None,
-                 excluded_scripts=None):
-    assert bool(module_name) ^ bool(module_filename), (
-        'Must provide either module_name or module_filename.')
-    if module_filename:
-      resource = self.FindResource(module_filename)
-      if not resource:
-        raise Exception('Could not find %s in %s' % (
-            module_filename, repr(self.source_paths)))
-      module_name = resource.name
-    else:
-      resource = None  # Will be set if we end up needing to load.
-
-    if module_name in self.loaded_modules:
-      assert self.loaded_modules[module_name].contents
-      return self.loaded_modules[module_name]
-
-    if not resource:  # happens when module_name was given
-      resource = self.FindModuleResource(module_name)
-      if not resource:
-        raise module.DepsException('No resource for module "%s"' % module_name)
-
-    m = html_module.HTMLModule(self, module_name, resource)
-    self.loaded_modules[module_name] = m
-
-    # Fake it, this is probably either polymer.min.js or platform.js which are
-    # actually .js files....
-    if resource.absolute_path.endswith('.js'):
-      return m
-
-    m.Parse(excluded_scripts)
-    m.Load(excluded_scripts)
-    return m
-
-  def LoadRawScript(self, relative_raw_script_path):
-    resource = None
-    for source_path in self.source_paths:
-      possible_absolute_path = os.path.join(
-          source_path, os.path.normpath(relative_raw_script_path))
-      if os.path.exists(possible_absolute_path):
-        resource = resource_module.Resource(
-            source_path, possible_absolute_path)
-        break
-    if not resource:
-      raise module.DepsException(
-          'Could not find a file for raw script %s in %s' %
-          (relative_raw_script_path, self.source_paths))
-    assert relative_raw_script_path == resource.unix_style_relative_path, (
-        'Expected %s == %s' % (relative_raw_script_path,
-                               resource.unix_style_relative_path))
-
-    if resource.absolute_path in self.loaded_raw_scripts:
-      return self.loaded_raw_scripts[resource.absolute_path]
-
-    raw_script = module.RawScript(resource)
-    self.loaded_raw_scripts[resource.absolute_path] = raw_script
-    return raw_script
-
-  def LoadStyleSheet(self, name):
-    if name in self.loaded_style_sheets:
-      return self.loaded_style_sheets[name]
-
-    resource = self._FindResourceGivenNameAndSuffix(
-        name, '.css', return_resource=True)
-    if not resource:
-      raise module.DepsException(
-          'Could not find a file for stylesheet %s' % name)
-
-    style_sheet = style_sheet_module.StyleSheet(self, name, resource)
-    style_sheet.load()
-    self.loaded_style_sheets[name] = style_sheet
-    return style_sheet
-
-  def LoadImage(self, abs_path):
-    if abs_path in self.loaded_images:
-      return self.loaded_images[abs_path]
-
-    if not os.path.exists(abs_path):
-      raise module.DepsException("url('%s') did not exist" % abs_path)
-
-    res = self.FindResourceGivenAbsolutePath(abs_path, binary=True)
-    if res is None:
-      raise module.DepsException("url('%s') was not in search path" % abs_path)
-
-    image = style_sheet_module.Image(res)
-    self.loaded_images[abs_path] = image
-    return image
-
-  def GetStrippedJSForFilename(self, filename, early_out_if_no_py_vulcanize):
-    if filename in self.stripped_js_by_filename:
-      return self.stripped_js_by_filename[filename]
-
-    with open(filename, 'r') as f:
-      contents = f.read(4096)
-    if early_out_if_no_py_vulcanize and ('py_vulcanize' not in contents):
-      return None
-
-    s = strip_js_comments.StripJSComments(contents)
-    self.stripped_js_by_filename[filename] = s
-    return s
-
-
-def _read_file(absolute_path):
-  """Reads a file and returns a (path, contents) pair.
-
-  Args:
-    absolute_path: Absolute path to a file.
-
-  Raises:
-    Exception: The given file doesn't exist.
-    IOError: There was a problem opening or reading the file.
-  """
-  if not os.path.exists(absolute_path):
-    raise Exception('%s not found.' % absolute_path)
-  f = codecs.open(absolute_path, mode='r', encoding='utf-8')
-  contents = f.read()
-  f.close()
-  return absolute_path, contents
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/resource_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/resource_unittest.py
deleted file mode 100644
index 4da2355..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/resource_unittest.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-
-from py_vulcanize import resource
-
-
-class ResourceUnittest(unittest.TestCase):
-
-  def testBasic(self):
-    r = resource.Resource('/a', '/a/b/c.js')
-    self.assertEquals('b.c', r.name)
-    self.assertEquals(os.path.join('b', 'c.js'), r.relative_path)
-    self.assertEquals('b/c.js', r.unix_style_relative_path)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py
deleted file mode 100644
index d63c667..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Utility function for stripping comments out of JavaScript source code."""
-
-import re
-
-
-def _TokenizeJS(text):
-  """Splits source code text into segments in preparation for comment stripping.
-
-  Note that this doesn't tokenize for parsing. There is no notion of statements,
-  variables, etc. The only tokens of interest are comment-related tokens.
-
-  Args:
-    text: The contents of a JavaScript file.
-
-  Yields:
-    A succession of strings in the file, including all comment-related symbols.
-  """
-  rest = text
-  tokens = ['//', '/*', '*/', '\n']
-  next_tok = re.compile('|'.join(re.escape(x) for x in tokens))
-  while len(rest):
-    m = next_tok.search(rest)
-    if not m:
-      # end of string
-      yield rest
-      return
-    min_index = m.start()
-    end_index = m.end()
-
-    if min_index > 0:
-      yield rest[:min_index]
-
-    yield rest[min_index:end_index]
-    rest = rest[end_index:]
-
-
-def StripJSComments(text):
-  """Strips comments out of JavaScript source code.
-
-  Args:
-    text: JavaScript source text.
-
-  Returns:
-    JavaScript source text with comments stripped out.
-  """
-  result_tokens = []
-  token_stream = _TokenizeJS(text).__iter__()
-  while True:
-    try:
-      t = token_stream.next()
-    except StopIteration:
-      break
-
-    if t == '//':
-      while True:
-        try:
-          t2 = token_stream.next()
-          if t2 == '\n':
-            break
-        except StopIteration:
-          break
-    elif t == '/*':
-      nesting = 1
-      while True:
-        try:
-          t2 = token_stream.next()
-          if t2 == '/*':
-            nesting += 1
-          elif t2 == '*/':
-            nesting -= 1
-            if nesting == 0:
-              break
-        except StopIteration:
-          break
-    else:
-      result_tokens.append(t)
-  return ''.join(result_tokens)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments_unittest.py
deleted file mode 100644
index 685cb82..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/strip_js_comments_unittest.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tests for strip_js_comments module."""
-
-import unittest
-
-from py_vulcanize import strip_js_comments
-
-
-# This test case tests a protected method.
-# pylint: disable=W0212
-class JavaScriptStripCommentTests(unittest.TestCase):
-  """Test case for _strip_js_comments and _TokenizeJS."""
-
-  def test_strip_comments(self):
-    self.assertEquals(
-        'A ', strip_js_comments.StripJSComments('A // foo'))
-    self.assertEquals(
-        'A bar', strip_js_comments.StripJSComments('A // foo\nbar'))
-    self.assertEquals(
-        'A  b', strip_js_comments.StripJSComments('A /* foo */ b'))
-    self.assertEquals(
-        'A  b', strip_js_comments.StripJSComments('A /* foo\n */ b'))
-
-  def test_tokenize_empty(self):
-    tokens = list(strip_js_comments._TokenizeJS(''))
-    self.assertEquals([], tokens)
-
-  def test_tokenize_nl(self):
-    tokens = list(strip_js_comments._TokenizeJS('\n'))
-    self.assertEquals(['\n'], tokens)
-
-  def test_tokenize_slashslash_comment(self):
-    tokens = list(strip_js_comments._TokenizeJS('A // foo'))
-    self.assertEquals(['A ', '//', ' foo'], tokens)
-
-  def test_tokenize_slashslash_comment_then_newline(self):
-    tokens = list(strip_js_comments._TokenizeJS('A // foo\nbar'))
-    self.assertEquals(['A ', '//', ' foo', '\n', 'bar'], tokens)
-
-  def test_tokenize_cstyle_comment_one_line(self):
-    tokens = list(strip_js_comments._TokenizeJS('A /* foo */'))
-    self.assertEquals(['A ', '/*', ' foo ', '*/'], tokens)
-
-  def test_tokenize_cstyle_comment_multi_line(self):
-    tokens = list(strip_js_comments._TokenizeJS('A /* foo\n*bar\n*/'))
-    self.assertEquals(['A ', '/*', ' foo', '\n', '*bar', '\n', '*/'], tokens)
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py
deleted file mode 100644
index 5338762..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import base64
-import os
-import re
-
-
-class Image(object):
-
-  def __init__(self, resource):
-    self.resource = resource
-    self.aliases = []
-
-  @property
-  def relative_path(self):
-    return self.resource.relative_path
-
-  @property
-  def absolute_path(self):
-    return self.resource.absolute_path
-
-  @property
-  def contents(self):
-    return self.resource.contents
-
-
-class ParsedStyleSheet(object):
-
-  def __init__(self, loader, containing_dirname, contents):
-    self.loader = loader
-    self.contents = contents
-    self._images = None
-    self._Load(containing_dirname)
-
-  @property
-  def images(self):
-    return self._images
-
-  def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-    for i in self.images:
-      dependent_filenames.append(i.resource.absolute_path)
-
-  @property
-  def contents_with_inlined_images(self):
-    images_by_url = {}
-    for i in self.images:
-      for a in i.aliases:
-        images_by_url[a] = i
-
-    def InlineUrl(m):
-      url = m.group('url')
-      image = images_by_url[url]
-
-      ext = os.path.splitext(image.absolute_path)[1]
-      data = base64.standard_b64encode(image.contents)
-
-      return 'url(data:image/%s;base64,%s)' % (ext[1:], data)
-
-    # I'm assuming we only have url()'s associated with images
-    return re.sub('url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-                  InlineUrl, self.contents)
-
-  def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-    for i in self.images:
-      dependent_filenames.append(i.resource.absolute_path)
-
-  def _Load(self, containing_dirname):
-    if self.contents.find('@import') != -1:
-      raise Exception('@imports are not supported')
-
-    matches = re.findall(
-        'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-        self.contents)
-
-    def resolve_url(url):
-      if os.path.isabs(url):
-        # FIXME: module is used here, but py_vulcanize.module is never imported.
-        # However, py_vulcanize.module cannot be imported since py_vulcanize.module may import
-        # style_sheet, leading to an import loop.
-        raise module.DepsException('URL references must be relative')
-      # URLS are relative to this module's directory
-      abs_path = os.path.abspath(os.path.join(containing_dirname, url))
-      image = self.loader.LoadImage(abs_path)
-      image.aliases.append(url)
-      return image
-
-    self._images = [resolve_url(x) for x in matches]
-
-
-class StyleSheet(object):
-  """Represents a stylesheet resource referenced by a module via the
-  base.requireStylesheet(xxx) directive."""
-
-  def __init__(self, loader, name, resource):
-    self.loader = loader
-    self.name = name
-    self.resource = resource
-    self._parsed_style_sheet = None
-
-  @property
-  def filename(self):
-    return self.resource.absolute_path
-
-  @property
-  def contents(self):
-    return self.resource.contents
-
-  def __repr__(self):
-    return 'StyleSheet(%s)' % self.name
-
-  @property
-  def images(self):
-    self._InitParsedStyleSheetIfNeeded()
-    return self._parsed_style_sheet.images
-
-  def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-    self._InitParsedStyleSheetIfNeeded()
-
-    dependent_filenames.append(self.resource.absolute_path)
-    self._parsed_style_sheet.AppendDirectlyDependentFilenamesTo(
-        dependent_filenames)
-
-  @property
-  def contents_with_inlined_images(self):
-    self._InitParsedStyleSheetIfNeeded()
-    return self._parsed_style_sheet.contents_with_inlined_images
-
-  def load(self):
-    self._InitParsedStyleSheetIfNeeded()
-
-  def _InitParsedStyleSheetIfNeeded(self):
-    if self._parsed_style_sheet:
-      return
-    module_dirname = os.path.dirname(self.resource.absolute_path)
-    self._parsed_style_sheet = ParsedStyleSheet(
-        self.loader, module_dirname, self.contents)
diff --git a/systrace/catapult/common/py_vulcanize/py_vulcanize/style_sheet_unittest.py b/systrace/catapult/common/py_vulcanize/py_vulcanize/style_sheet_unittest.py
deleted file mode 100644
index 4ebc71d..0000000
--- a/systrace/catapult/common/py_vulcanize/py_vulcanize/style_sheet_unittest.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import base64
-import os
-import unittest
-
-from py_vulcanize import project as project_module
-from py_vulcanize import resource_loader
-from py_vulcanize import fake_fs
-from py_vulcanize import module
-
-
-class StyleSheetUnittest(unittest.TestCase):
-
-  def testImages(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/src/foo/x.css', """
-.x .y {
-    background-image: url(../images/bar.jpeg);
-}
-""")
-    fs.AddFile('/src/images/bar.jpeg', 'hello world')
-    with fs:
-      project = project_module.Project([os.path.normpath('/src/')])
-      loader = resource_loader.ResourceLoader(project)
-
-      foo_x = loader.LoadStyleSheet('foo.x')
-      self.assertEquals(1, len(foo_x.images))
-
-      r0 = foo_x.images[0]
-      self.assertEquals(os.path.normpath('/src/images/bar.jpeg'),
-                        r0.absolute_path)
-
-      inlined = foo_x.contents_with_inlined_images
-      self.assertEquals("""
-.x .y {
-    background-image: url(data:image/jpeg;base64,%s);
-}
-""" % base64.standard_b64encode('hello world'), inlined)
-
-  def testURLResolveFails(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/src/foo/x.css', """
-.x .y {
-    background-image: url(../images/missing.jpeg);
-}
-""")
-    with fs:
-      project = project_module.Project([os.path.normpath('/src')])
-      loader = resource_loader.ResourceLoader(project)
-
-      self.assertRaises(module.DepsException,
-                        lambda: loader.LoadStyleSheet('foo.x'))
-
-  def testImportsCauseFailure(self):
-    fs = fake_fs.FakeFS()
-    fs.AddFile('/src/foo/x.css', """
-@import url(awesome.css);
-""")
-    with fs:
-      project = project_module.Project([os.path.normpath('/src')])
-      loader = resource_loader.ResourceLoader(project)
-
-      self.assertRaises(Exception,
-                        lambda: loader.LoadStyleSheet('foo.x'))
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/LICENSE b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/MANIFEST b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/MANIFEST
deleted file mode 100644
index a0384d9..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/MANIFEST
+++ /dev/null
@@ -1,354 +0,0 @@
-LICENSE
-MANIFEST
-PKG-INFO
-README.rst
-_setup/__init__.py
-_setup/include/cext.h
-_setup/py2/__init__.py
-_setup/py2/commands.py
-_setup/py2/data.py
-_setup/py2/dist.py
-_setup/py2/ext.py
-_setup/py2/setup.py
-_setup/py2/shell.py
-_setup/py2/term/__init__.py
-_setup/py2/term/_term.py
-_setup/py2/util.py
-_setup/py3/__init__.py
-_setup/py3/commands.py
-_setup/py3/data.py
-_setup/py3/dist.py
-_setup/py3/ext.py
-_setup/py3/setup.py
-_setup/py3/shell.py
-_setup/py3/term/__init__.py
-_setup/py3/term/_term.py
-_setup/py3/util.py
-bench
-bench.sh
-bench/LICENSE.cssmin
-bench/__init__.py
-bench/cssmin.py
-bench/main.py
-bench/wikipedia.css
-bench/wikipedia.min.css
-bench/write.py
-docs/BENCHMARKS
-docs/CHANGES
-docs/CLASSIFIERS
-docs/DESCRIPTION
-docs/PROVIDES
-docs/SUMMARY
-docs/apidoc/api-objects.txt
-docs/apidoc/crarr.png
-docs/apidoc/epydoc.css
-docs/apidoc/epydoc.js
-docs/apidoc/help.html
-docs/apidoc/identifier-index.html
-docs/apidoc/index.html
-docs/apidoc/module-tree.html
-docs/apidoc/rcssmin-module.html
-docs/apidoc/rcssmin-pysrc.html
-docs/apidoc/redirect.html
-package.cfg
-rcssmin.c
-rcssmin.py
-run_tests.py
-setup.py
-tests
-tests/main/atgroup_00.css
-tests/main/atgroup_01.css
-tests/main/atgroup_02.css
-tests/main/atgroup_03.css
-tests/main/atgroup_04.css
-tests/main/atgroup_05.css
-tests/main/atgroup_06.css
-tests/main/atgroup_07.css
-tests/main/atgroup_08.css
-tests/main/atgroup_09.css
-tests/main/atgroup_10.css
-tests/main/atgroup_11.css
-tests/main/comment_00.css
-tests/main/comment_01.css
-tests/main/comment_02.css
-tests/main/comment_03.css
-tests/main/comment_04.css
-tests/main/escape_00.css
-tests/main/escape_01.css
-tests/main/escape_02.css
-tests/main/escape_03.css
-tests/main/escape_04.css
-tests/main/escape_05.css
-tests/main/escape_06.css
-tests/main/first_00.css
-tests/main/first_01.css
-tests/main/first_02.css
-tests/main/out/atgroup_00.out
-tests/main/out/atgroup_00.out.b
-tests/main/out/atgroup_01.out
-tests/main/out/atgroup_01.out.b
-tests/main/out/atgroup_02.out
-tests/main/out/atgroup_02.out.b
-tests/main/out/atgroup_03.out
-tests/main/out/atgroup_03.out.b
-tests/main/out/atgroup_04.out
-tests/main/out/atgroup_04.out.b
-tests/main/out/atgroup_05.out
-tests/main/out/atgroup_05.out.b
-tests/main/out/atgroup_06.out
-tests/main/out/atgroup_06.out.b
-tests/main/out/atgroup_07.out
-tests/main/out/atgroup_07.out.b
-tests/main/out/atgroup_08.out
-tests/main/out/atgroup_08.out.b
-tests/main/out/atgroup_09.out
-tests/main/out/atgroup_09.out.b
-tests/main/out/atgroup_10.out
-tests/main/out/atgroup_10.out.b
-tests/main/out/atgroup_11.out
-tests/main/out/atgroup_11.out.b
-tests/main/out/comment_00.out
-tests/main/out/comment_00.out.b
-tests/main/out/comment_01.out
-tests/main/out/comment_01.out.b
-tests/main/out/comment_02.out
-tests/main/out/comment_02.out.b
-tests/main/out/comment_03.out
-tests/main/out/comment_03.out.b
-tests/main/out/comment_04.out
-tests/main/out/comment_04.out.b
-tests/main/out/escape_00.out
-tests/main/out/escape_00.out.b
-tests/main/out/escape_01.out
-tests/main/out/escape_01.out.b
-tests/main/out/escape_02.out
-tests/main/out/escape_02.out.b
-tests/main/out/escape_03.out
-tests/main/out/escape_03.out.b
-tests/main/out/escape_04.out
-tests/main/out/escape_04.out.b
-tests/main/out/escape_05.out
-tests/main/out/escape_05.out.b
-tests/main/out/escape_06.out
-tests/main/out/escape_06.out.b
-tests/main/out/first_00.out
-tests/main/out/first_00.out.b
-tests/main/out/first_01.out
-tests/main/out/first_01.out.b
-tests/main/out/first_02.out
-tests/main/out/first_02.out.b
-tests/main/out/url_00.out
-tests/main/out/url_00.out.b
-tests/main/out/url_01.out
-tests/main/out/url_01.out.b
-tests/main/out/url_02.out
-tests/main/out/url_02.out.b
-tests/main/out/url_03.out
-tests/main/out/url_03.out.b
-tests/main/out/url_04.out
-tests/main/out/url_04.out.b
-tests/main/out/url_05.out
-tests/main/out/url_05.out.b
-tests/main/out/url_06.out
-tests/main/out/url_06.out.b
-tests/main/out/url_07.out
-tests/main/out/url_07.out.b
-tests/main/out/url_08.out
-tests/main/out/url_08.out.b
-tests/main/out/url_09.out
-tests/main/out/url_09.out.b
-tests/main/url_00.css
-tests/main/url_01.css
-tests/main/url_02.css
-tests/main/url_03.css
-tests/main/url_04.css
-tests/main/url_05.css
-tests/main/url_06.css
-tests/main/url_07.css
-tests/main/url_08.css
-tests/main/url_09.css
-tests/yui/README
-tests/yui/background-position.css
-tests/yui/background-position.css.min
-tests/yui/border-none.css
-tests/yui/border-none.css.min
-tests/yui/box-model-hack.css
-tests/yui/box-model-hack.css.min
-tests/yui/bug2527974.css
-tests/yui/bug2527974.css.min
-tests/yui/bug2527991.css
-tests/yui/bug2527991.css.min
-tests/yui/bug2527998.css
-tests/yui/bug2527998.css.min
-tests/yui/bug2528034.css
-tests/yui/bug2528034.css.min
-tests/yui/charset-media.css
-tests/yui/charset-media.css.min
-tests/yui/color-simple.css
-tests/yui/color-simple.css.min
-tests/yui/color.css
-tests/yui/color.css.min
-tests/yui/comment.css
-tests/yui/comment.css.min
-tests/yui/concat-charset.css
-tests/yui/concat-charset.css.min
-tests/yui/dataurl-base64-doublequotes.css
-tests/yui/dataurl-base64-doublequotes.css.min
-tests/yui/dataurl-base64-eof.css
-tests/yui/dataurl-base64-eof.css.min
-tests/yui/dataurl-base64-linebreakindata.css
-tests/yui/dataurl-base64-linebreakindata.css.min
-tests/yui/dataurl-base64-noquotes.css
-tests/yui/dataurl-base64-noquotes.css.min
-tests/yui/dataurl-base64-singlequotes.css
-tests/yui/dataurl-base64-singlequotes.css.min
-tests/yui/dataurl-base64-twourls.css
-tests/yui/dataurl-base64-twourls.css.min
-tests/yui/dataurl-dbquote-font.css
-tests/yui/dataurl-dbquote-font.css.min
-tests/yui/dataurl-nonbase64-doublequotes.css
-tests/yui/dataurl-nonbase64-doublequotes.css.min
-tests/yui/dataurl-nonbase64-noquotes.css
-tests/yui/dataurl-nonbase64-noquotes.css.min
-tests/yui/dataurl-nonbase64-singlequotes.css
-tests/yui/dataurl-nonbase64-singlequotes.css.min
-tests/yui/dataurl-noquote-multiline-font.css
-tests/yui/dataurl-noquote-multiline-font.css.min
-tests/yui/dataurl-realdata-doublequotes.css
-tests/yui/dataurl-realdata-doublequotes.css.min
-tests/yui/dataurl-realdata-noquotes.css
-tests/yui/dataurl-realdata-noquotes.css.min
-tests/yui/dataurl-realdata-singlequotes.css
-tests/yui/dataurl-realdata-singlequotes.css.min
-tests/yui/dataurl-realdata-yuiapp.css
-tests/yui/dataurl-realdata-yuiapp.css.min
-tests/yui/dataurl-singlequote-font.css
-tests/yui/dataurl-singlequote-font.css.min
-tests/yui/decimals.css
-tests/yui/decimals.css.min
-tests/yui/dollar-header.css
-tests/yui/dollar-header.css.min
-tests/yui/font-face.css
-tests/yui/font-face.css.min
-tests/yui/ie5mac.css
-tests/yui/ie5mac.css.min
-tests/yui/media-empty-class.css
-tests/yui/media-empty-class.css.min
-tests/yui/media-multi.css
-tests/yui/media-multi.css.min
-tests/yui/media-test.css
-tests/yui/media-test.css.min
-tests/yui/opacity-filter.css
-tests/yui/opacity-filter.css.min
-tests/yui/out/background-position.out
-tests/yui/out/background-position.out.b
-tests/yui/out/border-none.out
-tests/yui/out/border-none.out.b
-tests/yui/out/box-model-hack.out
-tests/yui/out/box-model-hack.out.b
-tests/yui/out/bug2527974.out
-tests/yui/out/bug2527974.out.b
-tests/yui/out/bug2527991.out
-tests/yui/out/bug2527991.out.b
-tests/yui/out/bug2527998.out
-tests/yui/out/bug2527998.out.b
-tests/yui/out/bug2528034.out
-tests/yui/out/bug2528034.out.b
-tests/yui/out/charset-media.out
-tests/yui/out/charset-media.out.b
-tests/yui/out/color-simple.out
-tests/yui/out/color-simple.out.b
-tests/yui/out/color.out
-tests/yui/out/color.out.b
-tests/yui/out/comment.out
-tests/yui/out/comment.out.b
-tests/yui/out/concat-charset.out
-tests/yui/out/concat-charset.out.b
-tests/yui/out/dataurl-base64-doublequotes.out
-tests/yui/out/dataurl-base64-doublequotes.out.b
-tests/yui/out/dataurl-base64-eof.out
-tests/yui/out/dataurl-base64-eof.out.b
-tests/yui/out/dataurl-base64-linebreakindata.out
-tests/yui/out/dataurl-base64-linebreakindata.out.b
-tests/yui/out/dataurl-base64-noquotes.out
-tests/yui/out/dataurl-base64-noquotes.out.b
-tests/yui/out/dataurl-base64-singlequotes.out
-tests/yui/out/dataurl-base64-singlequotes.out.b
-tests/yui/out/dataurl-base64-twourls.out
-tests/yui/out/dataurl-base64-twourls.out.b
-tests/yui/out/dataurl-dbquote-font.out
-tests/yui/out/dataurl-dbquote-font.out.b
-tests/yui/out/dataurl-nonbase64-doublequotes.out
-tests/yui/out/dataurl-nonbase64-doublequotes.out.b
-tests/yui/out/dataurl-nonbase64-noquotes.out
-tests/yui/out/dataurl-nonbase64-noquotes.out.b
-tests/yui/out/dataurl-nonbase64-singlequotes.out
-tests/yui/out/dataurl-nonbase64-singlequotes.out.b
-tests/yui/out/dataurl-noquote-multiline-font.out
-tests/yui/out/dataurl-noquote-multiline-font.out.b
-tests/yui/out/dataurl-realdata-doublequotes.out
-tests/yui/out/dataurl-realdata-doublequotes.out.b
-tests/yui/out/dataurl-realdata-noquotes.out
-tests/yui/out/dataurl-realdata-noquotes.out.b
-tests/yui/out/dataurl-realdata-singlequotes.out
-tests/yui/out/dataurl-realdata-singlequotes.out.b
-tests/yui/out/dataurl-realdata-yuiapp.out
-tests/yui/out/dataurl-realdata-yuiapp.out.b
-tests/yui/out/dataurl-singlequote-font.out
-tests/yui/out/dataurl-singlequote-font.out.b
-tests/yui/out/decimals.out
-tests/yui/out/decimals.out.b
-tests/yui/out/dollar-header.out
-tests/yui/out/dollar-header.out.b
-tests/yui/out/font-face.out
-tests/yui/out/font-face.out.b
-tests/yui/out/ie5mac.out
-tests/yui/out/ie5mac.out.b
-tests/yui/out/media-empty-class.out
-tests/yui/out/media-empty-class.out.b
-tests/yui/out/media-multi.out
-tests/yui/out/media-multi.out.b
-tests/yui/out/media-test.out
-tests/yui/out/media-test.out.b
-tests/yui/out/opacity-filter.out
-tests/yui/out/opacity-filter.out.b
-tests/yui/out/preserve-case.out
-tests/yui/out/preserve-case.out.b
-tests/yui/out/preserve-new-line.out
-tests/yui/out/preserve-new-line.out.b
-tests/yui/out/preserve-strings.out
-tests/yui/out/preserve-strings.out.b
-tests/yui/out/pseudo-first.out
-tests/yui/out/pseudo-first.out.b
-tests/yui/out/pseudo.out
-tests/yui/out/pseudo.out.b
-tests/yui/out/special-comments.out
-tests/yui/out/special-comments.out.b
-tests/yui/out/star-underscore-hacks.out
-tests/yui/out/star-underscore-hacks.out.b
-tests/yui/out/string-in-comment.out
-tests/yui/out/string-in-comment.out.b
-tests/yui/out/webkit-transform.out
-tests/yui/out/webkit-transform.out.b
-tests/yui/out/zeros.out
-tests/yui/out/zeros.out.b
-tests/yui/preserve-case.css
-tests/yui/preserve-case.css.min
-tests/yui/preserve-new-line.css
-tests/yui/preserve-new-line.css.min
-tests/yui/preserve-strings.css
-tests/yui/preserve-strings.css.min
-tests/yui/pseudo-first.css
-tests/yui/pseudo-first.css.min
-tests/yui/pseudo.css
-tests/yui/pseudo.css.min
-tests/yui/special-comments.css
-tests/yui/special-comments.css.min
-tests/yui/star-underscore-hacks.css
-tests/yui/star-underscore-hacks.css.min
-tests/yui/string-in-comment.css
-tests/yui/string-in-comment.css.min
-tests/yui/webkit-transform.css
-tests/yui/webkit-transform.css.min
-tests/yui/zeros.css
-tests/yui/zeros.css.min
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/PKG-INFO b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/PKG-INFO
deleted file mode 100644
index d4ee866..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/PKG-INFO
+++ /dev/null
@@ -1,316 +0,0 @@
-Metadata-Version: 1.1
-Name: rcssmin
-Version: 1.0.5
-Summary: CSS Minifier
-Home-page: http://opensource.perlig.de/rcssmin/
-Author: André Malo
-Author-email: nd@perlig.de
-License:                                  Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-Download-URL: http://storage.perlig.de/rcssmin/
-Description: ==============
-         CSS Minifier
-        ==============
-        
-        RCSSmin is a CSS minifier.
-        
-        The minifier is based on the semantics of the `YUI compressor`_\, which itself
-        is based on `the rule list by Isaac Schlueter`_\.
-        
-        This module is a re-implementation aiming for speed instead of maximum
-        compression, so it can be used at runtime (rather than during a preprocessing
-        step). RCSSmin does syntactical compression only (removing spaces, comments
-        and possibly semicolons). It does not provide semantic compression (like
-        removing empty blocks, collapsing redundant properties etc). It does, however,
-        support various CSS hacks (by keeping them working as intended).
-        
-        Here's a feature list:
-        
-        - Strings are kept, except that escaped newlines are stripped
-        - Space/Comments before the very end or before various characters are
-          stripped: ``:{});=>+],!`` (The colon (``:``) is a special case, a single
-          space is kept if it's outside a ruleset.)
-        - Space/Comments at the very beginning or after various characters are
-          stripped: ``{}(=:>+[,!``
-        - Optional space after unicode escapes is kept, resp. replaced by a simple
-          space
-        - whitespaces inside ``url()`` definitions are stripped
-        - Comments starting with an exclamation mark (``!``) can be kept optionally.
-        - All other comments and/or whitespace characters are replaced by a single
-          space.
-        - Multiple consecutive semicolons are reduced to one
-        - The last semicolon within a ruleset is stripped
-        - CSS Hacks supported:
-        
-          - IE7 hack (``>/**/``)
-          - Mac-IE5 hack (``/*\*/.../**/``)
-          - The boxmodelhack is supported naturally because it relies on valid CSS2
-            strings
-          - Between ``:first-line`` and the following comma or curly brace a space is
-            inserted. (apparently it's needed for IE6)
-          - Same for ``:first-letter``
-        
-        rcssmin.c is a reimplementation of rcssmin.py in C and improves runtime up to
-        factor 100 or so (depending on the input). docs/BENCHMARKS in the source
-        distribution contains the details.
-        
-        Both python 2 (>= 2.4) and python 3 are supported.
-        
-        .. _YUI compressor: https://github.com/yui/yuicompressor/
-        
-        .. _the rule list by Isaac Schlueter: https://github.com/isaacs/cssmin/
-        
-        
-        Copyright and License
-        ~~~~~~~~~~~~~~~~~~~~~
-        
-        Copyright 2011 - 2014
-        André Malo or his licensors, as applicable.
-        
-        The whole package (except for the files in the bench/ directory) is
-        distributed under the Apache License Version 2.0. You'll find a copy in the
-        root directory of the distribution or online at:
-        <http://www.apache.org/licenses/LICENSE-2.0>.
-        
-        
-        Bugs
-        ~~~~
-        
-        No bugs, of course. ;-)
-        But if you've found one or have an idea how to improve rcssmin, feel free
-        to send a pull request on `github <https://github.com/ndparker/rcssmin>`_
-        or send a mail to <rcssmin-bugs@perlig.de>.
-        
-        
-        Author Information
-        ~~~~~~~~~~~~~~~~~~
-        
-        André "nd" Malo <nd perlig.de>
-        GPG: 0x8103A37E
-        
-        
-            If God intended people to be naked, they would be born that way.
-            -- Oscar Wilde
-        
-        .. vim:tw=72 syntax=rest
-Keywords: CSS,Minimization
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Web Environment
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved
-Classifier: License :: OSI Approved :: Apache License, Version 2.0
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: C
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: Jython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
-Classifier: Topic :: Software Development :: Libraries
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Text Processing
-Classifier: Topic :: Text Processing :: Filters
-Classifier: Topic :: Utilities
-Provides: rcssmin (1.0)
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/README.chromium b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/README.chromium
deleted file mode 100644
index b1350fc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/README.chromium
+++ /dev/null
@@ -1,16 +0,0 @@
-Name: rCSSmin
-Short Name: rcssmin
-URL: http://opensource.perlig.de/rcssmin/
-Version: 1.0.5
-License: Apache 2.0
-License File: NOT_SHIPPED
-Security Critical: no
-
-Description:
-rCSSmin is a CSS minifier written in python.
-The minifier is based on the semantics of the YUI compressor, which itself is
-based on the rule list by Isaac Schlueter.
-
-Modifications made:
- - Removed the bench.sh since the file doesn't have the licensing info and
-   caused license checker to fail.
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/README.rst b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/README.rst
deleted file mode 100644
index 95fb308..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/README.rst
+++ /dev/null
@@ -1,153 +0,0 @@
-.. -*- coding: utf-8 -*-
-
-=====================================
- rCSSmin - A CSS Minifier For Python
-=====================================
-
-TABLE OF CONTENTS
------------------
-
-1. Introduction
-2. Copyright and License
-3. System Requirements
-4. Installation
-5. Documentation
-6. Bugs
-7. Author Information
-
-
-INTRODUCTION
-------------
-
-RCSSmin is a CSS minifier written in python.
-
-The minifier is based on the semantics of the `YUI compressor`_\, which itself
-is based on `the rule list by Isaac Schlueter`_\.
-
-This module is a re-implementation aiming for speed instead of maximum
-compression, so it can be used at runtime (rather than during a preprocessing
-step). RCSSmin does syntactical compression only (removing spaces, comments
-and possibly semicolons). It does not provide semantic compression (like
-removing empty blocks, collapsing redundant properties etc). It does, however,
-support various CSS hacks (by keeping them working as intended).
-
-Here's a feature list:
-
-- Strings are kept, except that escaped newlines are stripped
-- Space/Comments before the very end or before various characters are
-  stripped: ``:{});=>+],!`` (The colon (``:``) is a special case, a single
-  space is kept if it's outside a ruleset.)
-- Space/Comments at the very beginning or after various characters are
-  stripped: ``{}(=:>+[,!``
-- Optional space after unicode escapes is kept, resp. replaced by a simple
-  space
-- whitespaces inside ``url()`` definitions are stripped
-- Comments starting with an exclamation mark (``!``) can be kept optionally.
-- All other comments and/or whitespace characters are replaced by a single
-  space.
-- Multiple consecutive semicolons are reduced to one
-- The last semicolon within a ruleset is stripped
-- CSS Hacks supported:
-
-  - IE7 hack (``>/**/``)
-  - Mac-IE5 hack (``/*\*/.../**/``)
-  - The boxmodelhack is supported naturally because it relies on valid CSS2
-    strings
-  - Between ``:first-line`` and the following comma or curly brace a space is
-    inserted. (apparently it's needed for IE6)
-  - Same for ``:first-letter``
-
-rcssmin.c is a reimplementation of rcssmin.py in C and improves runtime up to
-factor 100 or so (depending on the input). docs/BENCHMARKS in the source
-distribution contains the details.
-
-.. _YUI compressor: https://github.com/yui/yuicompressor/
-
-.. _the rule list by Isaac Schlueter: https://github.com/isaacs/cssmin/
-
-
-COPYRIGHT AND LICENSE
----------------------
-
-Copyright 2011 - 2014
-André Malo or his licensors, as applicable.
-
-The whole package (except for the files in the bench/ directory)
-is distributed under the Apache License Version 2.0. You'll find a copy in the
-root directory of the distribution or online at:
-<http://www.apache.org/licenses/LICENSE-2.0>.
-
-
-SYSTEM REQUIREMENTS
--------------------
-
-Both python 2 (>=2.4) and python 3 are supported.
-
-
-INSTALLATION
-------------
-
-Using pip
-~~~~~~~~~
- 
-$ pip install rcssmin
- 
-
-Using distutils
-~~~~~~~~~~~~~~~
- 
-$ python setup.py install
- 
-The following extra options to the install command may be of interest:
- 
-   --without-c-extensions  Don't install C extensions
-   --without-docs          Do not install documentation files
- 
-
-Drop-in
-~~~~~~~
- 
-rCSSmin effectively consists of two files: rcssmin.py and rcssmin.c, the
-latter being entirely optional. So, for simple integration you can just
-copy rcssmin.py into your project and use it.
-
-
-DOCUMENTATION
--------------
-
-A generated API documentation is available in the docs/apidoc/ directory.
-But you can just look into the module. It provides a simple function,
-called cssmin which takes the CSS as a string and returns the minified
-CSS as a string.
-
-The module additionally provides a "streamy" interface:
-
-$ python -mrcssmin <css >minified
-
-It takes two options:
-
-  -b  Keep bang-comments (Comments starting with an exclamation mark)
-  -p  Force using the python implementation (not the C implementation)
-
-The latest documentation is also available online at
-<http://opensource.perlig.de/rcssmin/>.
-
-
-BUGS
-----
-
-No bugs, of course. ;-)
-But if you've found one or have an idea how to improve rcssmin, feel free to
-send a pull request on `github <https://github.com/ndparker/rcssmin>`_ or
-send a mail to <rcssmin-bugs@perlig.de>.
-
-
-AUTHOR INFORMATION
-------------------
-
-André "nd" Malo <nd@perlig.de>
-GPG: 0x8103A37E
-
-
-  If God intended people to be naked, they would be born that way.
-                                                   -- Oscar Wilde
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/LICENSE.cssmin b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/LICENSE.cssmin
deleted file mode 100644
index c10ccb0..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/LICENSE.cssmin
+++ /dev/null
@@ -1,64 +0,0 @@
-`cssmin.py` - A Python port of the YUI CSS compressor.
-
-Copyright (c) 2010 Zachary Voase
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
--------------------------------------------------------------------------------
-
-This software contains portions of the YUI CSS Compressor, notably some regular
-expressions for reducing the size of CSS. The YUI Compressor source code can be
-found at <http://github.com/yui/yuicompressor>, and is licensed as follows:
-
-> YUI Compressor Copyright License Agreement (BSD License)
-> 
-> Copyright (c) 2009, Yahoo! Inc.
-> All rights reserved.
-> 
-> Redistribution and use of this software in source and binary forms,
-> with or without modification, are permitted provided that the following
-> conditions are met:
-> 
-> * Redistributions of source code must retain the above
->   copyright notice, this list of conditions and the
->   following disclaimer.
-> 
-> * Redistributions in binary form must reproduce the above
->   copyright notice, this list of conditions and the
->   following disclaimer in the documentation and/or other
->   materials provided with the distribution.
-> 
-> * Neither the name of Yahoo! Inc. nor the names of its
->   contributors may be used to endorse or promote products
->   derived from this software without specific prior
->   written permission of Yahoo! Inc.
-> 
-> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/__init__.py b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/__init__.py
deleted file mode 100644
index 705dd0c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: ascii -*-
-r"""
-=================================
- Benchmark cssmin implementations
-=================================
-
-Benchmark cssmin implementations.
-
-:Copyright:
-
- Copyright 2011 - 2014
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-if __doc__:
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/cssmin.py b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/cssmin.py
deleted file mode 100644
index cbfbf8d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/cssmin.py
+++ /dev/null
@@ -1,246 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""`cssmin` - A Python port of the YUI CSS compressor.
-
-:Copyright:
-
- Copyright 2011 - 2014
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-
-try:
-    from StringIO import StringIO # The pure-Python StringIO supports unicode.
-except ImportError:
-    from io import StringIO
-import re
-
-
-__version__ = '0.2.0'
-
-
-def remove_comments(css):
-    """Remove all CSS comment blocks."""
-
-    iemac = False
-    preserve = False
-    comment_start = css.find("/*")
-    while comment_start >= 0:
-        # Preserve comments that look like `/*!...*/`.
-        # Slicing is used to make sure we don"t get an IndexError.
-        preserve = css[comment_start + 2:comment_start + 3] == "!"
-
-        comment_end = css.find("*/", comment_start + 2)
-        if comment_end < 0:
-            if not preserve:
-                css = css[:comment_start]
-                break
-        elif comment_end >= (comment_start + 2):
-            if css[comment_end - 1] == "\\":
-                # This is an IE Mac-specific comment; leave this one and the
-                # following one alone.
-                comment_start = comment_end + 2
-                iemac = True
-            elif iemac:
-                comment_start = comment_end + 2
-                iemac = False
-            elif not preserve:
-                css = css[:comment_start] + css[comment_end + 2:]
-            else:
-                comment_start = comment_end + 2
-        comment_start = css.find("/*", comment_start)
-
-    return css
-
-
-def remove_unnecessary_whitespace(css):
-    """Remove unnecessary whitespace characters."""
-
-    def pseudoclasscolon(css):
-
-        """
-        Prevents 'p :link' from becoming 'p:link'.
-
-        Translates 'p :link' into 'p ___PSEUDOCLASSCOLON___link'; this is
-        translated back again later.
-        """
-
-        regex = re.compile(r"(^|\})(([^\{\:])+\:)+([^\{]*\{)")
-        match = regex.search(css)
-        while match:
-            css = ''.join([
-                css[:match.start()],
-                match.group().replace(":", "___PSEUDOCLASSCOLON___"),
-                css[match.end():]])
-            match = regex.search(css)
-        return css
-
-    css = pseudoclasscolon(css)
-    # Remove spaces from before things.
-    css = re.sub(r"\s+([!{};:>+\(\)\],])", r"\1", css)
-
-    # If there is a `@charset`, then only allow one, and move to the beginning.
-    css = re.sub(r"^(.*)(@charset \"[^\"]*\";)", r"\2\1", css)
-    css = re.sub(r"^(\s*@charset [^;]+;\s*)+", r"\1", css)
-
-    # Put the space back in for a few cases, such as `@media screen` and
-    # `(-webkit-min-device-pixel-ratio:0)`.
-    css = re.sub(r"\band\(", "and (", css)
-
-    # Put the colons back.
-    css = css.replace('___PSEUDOCLASSCOLON___', ':')
-
-    # Remove spaces from after things.
-    css = re.sub(r"([!{}:;>+\(\[,])\s+", r"\1", css)
-
-    return css
-
-
-def remove_unnecessary_semicolons(css):
-    """Remove unnecessary semicolons."""
-
-    return re.sub(r";+\}", "}", css)
-
-
-def remove_empty_rules(css):
-    """Remove empty rules."""
-
-    return re.sub(r"[^\}\{]+\{\}", "", css)
-
-
-def normalize_rgb_colors_to_hex(css):
-    """Convert `rgb(51,102,153)` to `#336699`."""
-
-    regex = re.compile(r"rgb\s*\(\s*([0-9,\s]+)\s*\)")
-    match = regex.search(css)
-    while match:
-        colors = map(lambda s: s.strip(), match.group(1).split(","))
-        hexcolor = '#%.2x%.2x%.2x' % tuple(map(int, colors))
-        css = css.replace(match.group(), hexcolor)
-        match = regex.search(css)
-    return css
-
-
-def condense_zero_units(css):
-    """Replace `0(px, em, %, etc)` with `0`."""
-
-    return re.sub(r"([\s:])(0)(px|em|%|in|cm|mm|pc|pt|ex)", r"\1\2", css)
-
-
-def condense_multidimensional_zeros(css):
-    """Replace `:0 0 0 0;`, `:0 0 0;` etc. with `:0;`."""
-
-    css = css.replace(":0 0 0 0;", ":0;")
-    css = css.replace(":0 0 0;", ":0;")
-    css = css.replace(":0 0;", ":0;")
-
-    # Revert `background-position:0;` to the valid `background-position:0 0;`.
-    css = css.replace("background-position:0;", "background-position:0 0;")
-
-    return css
-
-
-def condense_floating_points(css):
-    """Replace `0.6` with `.6` where possible."""
-
-    return re.sub(r"(:|\s)0+\.(\d+)", r"\1.\2", css)
-
-
-def condense_hex_colors(css):
-    """Shorten colors from #AABBCC to #ABC where possible."""
-
-    regex = re.compile(r"([^\"'=\s])(\s*)#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])")
-    match = regex.search(css)
-    while match:
-        first = match.group(3) + match.group(5) + match.group(7)
-        second = match.group(4) + match.group(6) + match.group(8)
-        if first.lower() == second.lower():
-            css = css.replace(match.group(), match.group(1) + match.group(2) + '#' + first)
-            match = regex.search(css, match.end() - 3)
-        else:
-            match = regex.search(css, match.end())
-    return css
-
-
-def condense_whitespace(css):
-    """Condense multiple adjacent whitespace characters into one."""
-
-    return re.sub(r"\s+", " ", css)
-
-
-def condense_semicolons(css):
-    """Condense multiple adjacent semicolon characters into one."""
-
-    return re.sub(r";;+", ";", css)
-
-
-def wrap_css_lines(css, line_length):
-    """Wrap the lines of the given CSS to an approximate length."""
-
-    lines = []
-    line_start = 0
-    for i, char in enumerate(css):
-        # It's safe to break after `}` characters.
-        if char == '}' and (i - line_start >= line_length):
-            lines.append(css[line_start:i + 1])
-            line_start = i + 1
-
-    if line_start < len(css):
-        lines.append(css[line_start:])
-    return '\n'.join(lines)
-
-
-def cssmin(css, wrap=None):
-    css = remove_comments(css)
-    css = condense_whitespace(css)
-    # A pseudo class for the Box Model Hack
-    # (see http://tantek.com/CSS/Examples/boxmodelhack.html)
-    css = css.replace('"\\"}\\""', "___PSEUDOCLASSBMH___")
-    css = remove_unnecessary_whitespace(css)
-    css = remove_unnecessary_semicolons(css)
-    css = condense_zero_units(css)
-    css = condense_multidimensional_zeros(css)
-    css = condense_floating_points(css)
-    css = normalize_rgb_colors_to_hex(css)
-    css = condense_hex_colors(css)
-    if wrap is not None:
-        css = wrap_css_lines(css, wrap)
-    css = css.replace("___PSEUDOCLASSBMH___", '"\\"}\\""')
-    css = condense_semicolons(css)
-    return css.strip()
-
-
-def main():
-    import optparse
-    import sys
-
-    p = optparse.OptionParser(
-        prog="cssmin", version=__version__,
-        usage="%prog [--wrap N]",
-        description="""Reads raw CSS from stdin, and writes compressed CSS to stdout.""")
-
-    p.add_option(
-        '-w', '--wrap', type='int', default=None, metavar='N',
-        help="Wrap output to approximately N chars per line.")
-
-    options, args = p.parse_args()
-    sys.stdout.write(cssmin(sys.stdin.read(), wrap=options.wrap))
-
-
-if __name__ == '__main__':
-    main()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/main.py b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/main.py
deleted file mode 100644
index 0781506..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/main.py
+++ /dev/null
@@ -1,236 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-r"""
-==================================
- Benchmark cssmin implementations
-==================================
-
-Benchmark cssmin implementations.
-
-:Copyright:
-
- Copyright 2011 - 2014
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-Usage::
-
-    python -mbench.main [-c COUNT] [-p file] cssfile ...
-
-    -c COUNT  number of runs per cssfile and minifier. Defaults to 10.
-    -p file   File to write the benchmark results in (pickled)
-
-"""
-if __doc__:
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape')
-__docformat__ = "restructuredtext en"
-__license__ = "Apache License, Version 2.0"
-__version__ = "1.0.0"
-
-import sys as _sys
-import time as _time
-
-import_notes = []
-class _p_02__rcssmin(object):
-    def __init__(self):
-        import rcssmin
-        cssmin = rcssmin._make_cssmin(python_only=True)
-        self.cssmin = lambda x: cssmin(x, keep_bang_comments=True)
-
-class _p_03__rcssmin(object):
-    def __init__(self):
-        import _rcssmin
-        cssmin = _rcssmin.cssmin
-        self.cssmin = lambda x: cssmin(x, keep_bang_comments=True)
-
-class cssmins(object):
-    from bench import cssmin as p_01_cssmin
-    p_02_rcssmin = _p_02__rcssmin()
-    try:
-        p_03__rcssmin = _p_03__rcssmin()
-    except ImportError:
-        import_notes.append("_rcssmin (C-Port) not available")
-        print(import_notes[-1])
-
-print("Python Release: %s" % ".".join(map(str, _sys.version_info[:3])))
-print("")
-
-
-def slurp(filename):
-    """ Load a file """
-    fp = open(filename)
-    try:
-        return fp.read()
-    finally:
-        fp.close()
-
-
-def print_(*value, **kwargs):
-    """ Print stuff """
-    (kwargs.get('file') or _sys.stdout).write(
-        ''.join(value) + kwargs.get('end', '\n')
-    )
-
-
-def bench(filenames, count):
-    """
-    Benchmark the minifiers with given css samples
-
-    :Parameters:
-      `filenames` : sequence
-        List of filenames
-
-      `count` : ``int``
-        Number of runs per css file and minifier
-
-    :Exceptions:
-      - `RuntimeError` : empty filenames sequence
-    """
-    if not filenames:
-        raise RuntimeError("Missing files to benchmark")
-    try:
-        xrange
-    except NameError:
-        xrange = range
-    try:
-        cmp
-    except NameError:
-        cmp = lambda a, b: (a > b) - (a < b)
-
-    ports = [item for item in dir(cssmins) if item.startswith('p_')]
-    ports.sort()
-    space = max(map(len, ports)) - 4
-    ports = [(item[5:], getattr(cssmins, item).cssmin) for item in ports]
-    flush = _sys.stdout.flush
-
-    struct = []
-    inputs = [(filename, slurp(filename)) for filename in filenames]
-    for filename, style in inputs:
-        print_("Benchmarking %r..." % filename, end=" ")
-        flush()
-        outputs = []
-        for _, cssmin in ports:
-            try:
-                outputs.append(cssmin(style))
-            except (SystemExit, KeyboardInterrupt):
-                raise
-            except:
-                outputs.append(None)
-        struct.append(dict(
-            filename=filename,
-            sizes=[
-                (item is not None and len(item) or None) for item in outputs
-            ],
-            size=len(style),
-            messages=[],
-            times=[],
-        ))
-        print_("(%.1f KiB)" % (struct[-1]['size'] / 1024.0,))
-        flush()
-        times = []
-        for idx, (name, cssmin) in enumerate(ports):
-            if outputs[idx] is None:
-                print_("  FAILED %s" % (name,))
-                struct[-1]['times'].append((name, None))
-            else:
-                print_("  Timing %s%s... (%5.1f KiB %s)" % (
-                    name,
-                    " " * (space - len(name)),
-                    len(outputs[idx]) / 1024.0,
-                    idx == 0 and '*' or ['=', '>', '<'][
-                        cmp(len(outputs[idx]), len(outputs[0]))
-                    ],
-                ), end=" ")
-                flush()
-
-                xcount = count
-                while True:
-                    counted = [None for _ in xrange(xcount)]
-                    start = _time.time()
-                    for _ in counted:
-                        cssmin(style)
-                    end = _time.time()
-                    result = (end - start) * 1000
-                    if result < 10: # avoid measuring within the error range
-                        xcount *= 10
-                        continue
-                    times.append(result / xcount)
-                    break
-
-                print_("%8.2f ms" % times[-1], end=" ")
-                flush()
-                if len(times) <= 1:
-                    print_()
-                else:
-                    print_("(factor: %s)" % (', '.join([
-                        '%.2f' % (timed / times[-1]) for timed in times[:-1]
-                    ])))
-                struct[-1]['times'].append((name, times[-1]))
-
-            flush()
-        print_()
-
-    return struct
-
-
-def main(argv=None):
-    """ Main """
-    import getopt as _getopt
-    import os as _os
-    import pickle as _pickle
-
-    if argv is None:
-        argv = _sys.argv[1:]
-    try:
-        opts, args = _getopt.getopt(argv, "hc:p:", ["help"])
-    except getopt.GetoptError:
-        e = _sys.exc_info()[0](_sys.exc_info()[1])
-        print >> _sys.stderr, "%s\nTry %s -mbench.main --help" % (
-            e,
-            _os.path.basename(_sys.executable),
-        )
-        _sys.exit(2)
-
-    count, pickle = 10, None
-    for key, value in opts:
-        if key in ("-h", "--help"):
-            print >> _sys.stderr, (
-                "%s -mbench.main [-c count] [-p file] cssfile ..." % (
-                    _os.path.basename(_sys.executable),
-                )
-            )
-            _sys.exit(0)
-        elif key == '-c':
-            count = int(value)
-        elif key == '-p':
-            pickle = str(value)
-
-    struct = bench(args, count)
-    if pickle:
-        fp = open(pickle, 'wb')
-        try:
-            fp.write(_pickle.dumps((
-                ".".join(map(str, _sys.version_info[:3])),
-                import_notes,
-                struct,
-            ), 0))
-        finally:
-            fp.close()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/wikipedia.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/wikipedia.css
deleted file mode 100644
index 03079e3..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/wikipedia.css
+++ /dev/null
@@ -1,3861 +0,0 @@
-/*
- * This CSS is taken from wikipedia / mediawiki, it's the combined files of
- * the vector skin described at:
- *
- * http://en.wikipedia.org/wiki/Wikipedia:Catalogue_of_CSS_classes
- */
-
-/*
- * Any rules which should not be flipped automatically in right-to-left situations should be
- * prepended with @noflip in a comment block. Images that should be embedded as base64 data-URLs
- * should be prepended with @embed in a comment block.
- *
- * This style-sheet employs a few CSS trick to accomplish compatibility with a wide range of web
- * browsers. The most common trick is to use some styles in IE6 only. This is accomplished by using
- * a rule that makes things work in IE6, and then following it with a rule that begins with
- * "html > body" or use a child selector ">", which is ignored by IE6 because it does not support
- * the child selector. You can spot this by looking for the "OVERRIDDEN BY COMPLIANT BROWSERS" and
- * "IGNORED BY IE6" comments.
- */
-
-/* Framework */
-html,
-body {
-	height: 100%;
-	margin: 0;
-	padding: 0;
-	font-family: sans-serif;
-	font-size: 1em;
-}
-body {
-	background-color: #f3f3f3;
-	/* @embed */
-	background-image: url(images/page-base.png);
-}
-/* Content */
-div#content {
-	margin-left: 10em;
-	padding: 1em;
-	/* @embed */
-	background-image: url(images/border.png);
-	background-position: top left;
-	background-repeat: repeat-y;
-	background-color: white;
-	color: black;
-	direction: ltr;
-}
-/* Head */
-#mw-page-base {
-	height: 5em;
-	background-color: white;
-	/* @embed */
-	background-image: url(images/page-fade.png);
-	background-position: bottom left;
-	background-repeat: repeat-x;
-}
-#mw-head-base {
-	margin-top: -5em;
-	margin-left: 10em;
-	height: 5em;
-	/* @embed */
-	background-image: url(images/border.png);
-	background-position: bottom left;
-	background-repeat: repeat-x;
-}
-div#mw-head {
-	position: absolute;
-	top: 0;
-	right: 0;
-	width: 100%;
-}
-div#mw-head h5 {
-	margin: 0;
-	padding: 0;
-}
-/* Hide empty portlets */
-div.emptyPortlet {
-		display: none;
-}
-/* Personal */
-#p-personal {
-	position: absolute;
-	top: 0;
-	right: 0.75em;
-}
-#p-personal h5 {
-	display: none;
-}
-#p-personal ul {
-	list-style: none;
-	margin: 0;
-	padding-left: 10em; /* Keep from overlapping logo */
-}
-/* @noflip */
-#p-personal li {
-	line-height: 1.125em;
-	float: left;
-}
-/* This one flips! */
-#p-personal li {
-	margin-left: 0.75em;
-	margin-top: 0.5em;
-	font-size: 0.75em;
-	white-space: nowrap;
-}
-/* Navigation Containers */
-#left-navigation {
-	position: absolute;
-	left: 10em;
-	top: 2.5em;
-}
-#right-navigation {
-	float: right;
-	margin-top: 2.5em;
-}
-/* Navigation Labels */
-div.vectorTabs h5,
-div.vectorMenu h5 span {
-	display: none;
-}
-/* Namespaces and Views */
-/* @noflip */
-div.vectorTabs {
-	float: left;
-	height: 2.5em;
-}
-div.vectorTabs {
-	/* @embed */
-	background-image: url(images/tab-break.png);
-	background-position: bottom left;
-	background-repeat: no-repeat;
-	padding-left: 1px;
-}
-/* @noflip */
-div.vectorTabs ul {
-	float: left;
-}
-div.vectorTabs ul {
-	height: 100%;
-	list-style: none;
-	margin: 0;
-	padding: 0;
-}
-/* @noflip */
-div.vectorTabs ul li {
-	float: left;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs ul li {
-	line-height: 1.125em;
-	display: inline-block;
-	height: 100%;
-	margin: 0;
-	padding: 0;
-	background-color: #f3f3f3;
-	/* @embed */
-	background-image: url(images/tab-normal-fade.png);
-	background-position: bottom left;
-	background-repeat: repeat-x;
-	white-space:nowrap;
-}
-/* IGNORED BY IE6 */
-div.vectorTabs ul > li {
-	display: block;
-}
-div.vectorTabs li.selected {
-	/* @embed */
-	background-image: url(images/tab-current-fade.png);
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs li a {
-	display: inline-block;
-	height: 1.9em;
-	padding-left: 0.5em;
-	padding-right: 0.5em;
-	color: #0645ad;
-	cursor: pointer;
-	font-size: 0.8em;
-}
-/* IGNORED BY IE6 */
-div.vectorTabs li > a {
-	display: block;
-}
-div.vectorTabs li.icon a {
-	background-position: bottom right;
-	background-repeat: no-repeat;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorTabs span a  {
-	display: inline-block;
-	padding-top: 1.25em;
-}
-/* IGNORED BY IE6 */
-/* @noflip */
-div.vectorTabs span > a {
-	float: left;
-	display: block;
-}
-div.vectorTabs span {
-	display: inline-block;
-	/* @embed */
-	background-image: url(images/tab-break.png);
-	background-position: bottom right;
-	background-repeat: no-repeat;
-}
-div.vectorTabs li.selected a,
-div.vectorTabs li.selected a:visited{
-	color: #333333;
-	text-decoration: none;
-}
-div.vectorTabs li.new a,
-div.vectorTabs li.new a:visited{
-	color: #a55858;
-}
-/* Variants and Actions */
-/* @noflip */
-div.vectorMenu {
-	direction: ltr;
-	float: left;
-	/* @embed */
-	background-image: url(images/arrow-down-icon.png);
-	background-position: 100% 60%;
-	background-repeat: no-repeat;
-	cursor: pointer;
-}
-div.vectorMenuFocus {
-	/* @embed */
-	background-image: url(images/arrow-down-focus-icon.png);
-	background-position: 100% 60%;
-}
-/* @noflip */
-body.rtl div.vectorMenu {
-	direction: rtl;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-/* @noflip */
-div#mw-head div.vectorMenu h5 {
-	float: left;
-	/* @embed */
-	background-image: url(images/tab-break.png);
-	background-repeat: no-repeat;
-}
-/* This will be flipped - unlike the one above it */
-div#mw-head div.vectorMenu h5 {
-	background-position: bottom left;
-	margin-left: -1px;
-}
-/* IGNORED BY IE6 */
-div#mw-head div.vectorMenu > h5 {
-	background-image: none;
-}
-div#mw-head div.vectorMenu h4 {
-	display: inline-block;
-	float: left;
-	font-size: 0.8em;
-	padding-left: 0.5em;
-	padding-top: 1.375em;
-	font-weight: normal;
-	border: none;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-/* @noflip */
-div.vectorMenu h5 a {
-	display: inline-block;
-	width: 24px;
-	height: 2.5em;
-	text-decoration: none;
-	/* @embed */
-	background-image: url(images/tab-break.png);
-	background-repeat: no-repeat;
-}
-/* This will be flipped - unlike the one above it */
-div.vectorMenu h5 a {
-	background-position: bottom right;
-}
-/* IGNORED BY IE6 */
-div.vectorMenu h5 > a {
-	display: block;
-}
-div.vectorMenu div.menu {
-	position: relative;
-	display: none;
-	clear: both;
-	text-align: left;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-/* @noflip */
-body.rtl div.vectorMenu div.menu {
-	margin-left: 24px;
-}
-/* IGNORED BY IE6 */
-/* @noflip */
-body.rtl div.vectorMenu > div.menu {
-	margin-left: auto;
-}
-/* IGNORED BY IE6 */
-/* Also fixes old versions of FireFox */
-/* @noflip */
-body.rtl div.vectorMenu > div.menu,
-x:-moz-any-link {
-	margin-left: 23px;
-}
-/* Enable forcing showing of the menu for accessibility */
-div.vectorMenu:hover div.menu,
-div.vectorMenu div.menuForceShow {
-	display: block;
-}
-div.vectorMenu ul {
-	position: absolute;
-	background-color: white;
-	border: solid 1px silver;
-	border-top-width: 0;
-	list-style: none;
-	list-style-image: none;
-	list-style-type: none;
-	padding: 0;
-	margin: 0;
-	margin-left: -1px;
-	text-align: left;
-}
-/* Fixes old versions of FireFox */
-div.vectorMenu ul,
-x:-moz-any-link {
-	min-width: 5em;
-}
-/* Returns things back to normal in modern versions of FireFox */
-div.vectorMenu ul,
-x:-moz-any-link,
-x:default {
-	min-width: 0;
-}
-div.vectorMenu li {
-	padding: 0;
-	margin: 0;
-	text-align: left;
-	line-height: 1em;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div.vectorMenu li a {
-	display: inline-block;
-	padding: 0.5em;
-	white-space: nowrap;
-	color: #0645ad;
-	cursor: pointer;
-	font-size: 0.8em;
-}
-/* IGNORED BY IE6 */
-div.vectorMenu li > a {
-	display: block;
-}
-div.vectorMenu li.selected a,
-div.vectorMenu li.selected a:visited {
-	color: #333333;
-	text-decoration: none;
-}
-/* Search */
-#p-search h5 {
-	display: none;
-}
-/* @noflip */
-#p-search {
-	float: left;
-}
-#p-search {
-	margin-right: 0.5em;
-	margin-left: 0.5em;
-}
-#p-search form,
-#p-search input {
-	margin: 0;
-	margin-top: 0.4em;
-}
-div#simpleSearch {
-	display: block;
-	width: 14em;
-	height: 1.4em;
-	margin-top: 0.65em;
-	position: relative;
-	min-height: 1px; /* Gotta trigger hasLayout for IE7 */
-	border: solid 1px #AAAAAA;
-	color: black;
-	background-color: white;
-	/* @embed */
-	background-image: url(images/search-fade.png);
-	background-position: top left;
-	background-repeat: repeat-x;
-}
-div#simpleSearch label {
-	/*
-	 * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent
-	 * this from ever being shown anyways.
-	*/
-	font-size: 13px;
-	top: 0.25em;
-	direction: ltr;
-}
-div#simpleSearch input {
-	color: black;
-	direction: ltr;
-}
-div#simpleSearch input:focus {
-	outline: none;
-}
-div#simpleSearch input.placeholder {
-	color: #999999;
-}
-div#simpleSearch input::-webkit-input-placeholder {
-	color: #999999;
-}
-div#simpleSearch input#searchInput {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 90%;
-	margin: 0;
-	padding: 0;
-	padding-left: 0.2em;
-	padding-top: 0.2em;
-	padding-bottom: 0.2em;
-	outline: none;
-	border: none;
-	/*
-	 * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent
-	 * this from ever being shown anyways.
-	*/
-	font-size: 13px;
-	background-color: transparent;
-	direction: ltr;
-}
-div#simpleSearch button#searchButton {
-	position: absolute;
-	width: 10%;
-	right: 0;
-	top: 0;
-	padding: 0;
-	padding-top: 0.3em;
-	padding-bottom: 0.2em;
-	padding-right: 0.4em;
-	margin: 0;
-	border: none;
-	cursor: pointer;
-	background-color: transparent;
-	background-image: none;
-}
-/* OVERRIDDEN BY COMPLIANT BROWSERS */
-div#simpleSearch button#searchButton img {
-	border: none;
-	margin: 0;
-	margin-top: -3px;
-	padding: 0;
-}
-/* IGNORED BY IE6 */
-div#simpleSearch button#searchButton > img {
-	margin: 0;
-}
-/* Panel */
-div#mw-panel {
-	position: absolute;
-	top: 160px;
-	padding-top: 1em;
-	width: 10em;
-	left: 0;
-}
-div#mw-panel div.portal {
-	padding-bottom: 1.5em;
-	direction: ltr;
-}
-div#mw-panel div.portal h5 {
-	font-weight: normal;
-	color: #444444;
-	padding: 0.25em;
-	padding-top: 0;
-	padding-left: 1.75em;
-	cursor: default;
-	border: none;
-	font-size: 0.75em;
-}
-div#mw-panel div.portal div.body {
-	margin: 0;
-	padding-top: 0.5em;
-	margin-left: 1.25em;
-	/* @embed */
-	background-image: url(images/portal-break.png);
-	background-repeat: no-repeat;
-	background-position: top left;
-}
-div#mw-panel div.portal div.body ul {
-	list-style: none;
-	list-style-image: none;
-	list-style-type: none;
-	padding: 0;
-	margin: 0;
-}
-div#mw-panel div.portal div.body ul li {
-	line-height: 1.125em;
-	padding: 0;
-	padding-bottom: 0.5em;
-	margin: 0;
-	overflow: hidden;
-	font-size: 0.75em;
-}
-div#mw-panel div.portal div.body ul li a {
-	color: #0645ad;
-}
-div#mw-panel div.portal div.body ul li a:visited {
-	color: #0b0080;
-}
-/* Footer */
-div#footer {
-	margin-left: 10em;
-	margin-top: 0;
-	padding: 0.75em;
-	/* @embed */
-	background-image: url(images/border.png);
-	background-position: top left;
-	background-repeat: repeat-x;
-	direction: ltr;
-}
-div#footer ul {
-	list-style: none;
-	list-style-image: none;
-	list-style-type: none;
-	margin: 0;
-	padding: 0;
-}
-div#footer ul li {
-	margin: 0;
-	padding: 0;
-	padding-top: 0.5em;
-	padding-bottom: 0.5em;
-	color: #333333;
-	font-size: 0.7em;
-}
-div#footer #footer-icons {
-	float: right;
-}
-/* @noflip */
-body.ltr div#footer #footer-places {
-	float: left;
-}
-div#footer #footer-info li {
-	line-height: 1.4em;
-}
-div#footer #footer-icons li {
-	float: left;
-	margin-left: 0.5em;
-	line-height: 2em;
-	text-align: right;
-}
-div#footer #footer-places li {
-	float: left;
-	margin-right: 1em;
-	line-height: 2em;
-}
-/* Logo */
-#p-logo {
-	position: absolute;
-	top: -160px;
-	left: 0;
-	width: 10em;
-	height: 160px;
-}
-#p-logo a {
-	display: block;
-	width: 10em;
-	height: 160px;
-	background-repeat: no-repeat;
-	background-position: center center;
-	text-decoration: none;
-}
-
-/*
- *
- * The following code is highly modified from monobook. It would be nice if the
- * preftoc id was more human readable like preferences-toc for instance,
- * howerver this would require backporting the other skins.
- */
-
-/* Preferences */
-#preftoc {
-	/* Tabs */
-	width: 100%;
-	float: left;
-	clear: both;
-	margin: 0 !important;
-	padding: 0 !important;
-	/* @embed */
-	background-image: url(images/preferences-break.png);
-	background-position: bottom left;
-	background-repeat: no-repeat;
-}
-	#preftoc li {
-		/* Tab */
-		float: left;
-		margin: 0;
-		padding: 0;
-		padding-right: 1px;
-		height: 2.25em;
-		white-space: nowrap;
-		list-style-type: none;
-		list-style-image: none;
-		/* @embed */
-		background-image: url(images/preferences-break.png);
-		background-position: bottom right;
-		background-repeat: no-repeat;
-	}
-	/* Sadly, IE6 won't understand this */
-	#preftoc li:first-child {
-		margin-left: 1px;
-	}
-	#preftoc a,
-	#preftoc a:active {
-		display: inline-block;
-		position: relative;
-		color: #0645ad;
-		padding: 0.5em;
-		text-decoration: none;
-		background-image: none;
-		font-size: 0.9em;
-	}
-	#preftoc a:hover,
-	#preftoc a:focus {
-		text-decoration: underline;
-	}
-	#preftoc li.selected a {
-		/* @embed */
-		background-image: url(images/preferences-fade.png);
-		background-position: bottom;
-		background-repeat: repeat-x;
-		color: #333333;
-		text-decoration: none;
-	}
-#preferences {
-	float: left;
-	width: 100%;
-	margin: 0;
-	margin-top: -2px;
-	clear: both;
-	border: solid 1px #cccccc;
-	background-color: #f9f9f9;
-	/* @embed */
-	background-image: url(images/preferences-base.png);
-}
-#preferences fieldset {
-	border: none;
-	border-top: solid 1px #cccccc;
-}
-#preferences fieldset.prefsection {
-	border: none;
-	padding: 0;
-	margin: 1em;
-}
-#preferences legend {
-	color: #666666;
-}
-#preferences fieldset.prefsection legend.mainLegend {
-	display: none;
-}
-#preferences td {
-	padding-left: 0.5em;
-	padding-right: 0.5em;
-}
-#preferences td.htmlform-tip {
-	font-size: x-small;
-	padding: .2em 2em;
-	color: #666666;
-}
-#preferences div.mw-prefs-buttons {
-	padding: 1em;
-}
-#preferences div.mw-prefs-buttons input {
-	margin-right: 0.25em;
-}
-
-/**
- * The following code is slightly modified from monobook
- */
-div#content {
-	line-height: 1.5em;
-}
-#bodyContent {
-	font-size: 0.8em;
-}
-
-.editsection {
-	float: right;
-}
-
-ul {
-	/* @embed */
-	list-style-image: url(images/bullet-icon.png);
-}
-
-pre {
-	line-height: 1.3em;
-}
-
-/* Site Notice (includes notices from CentralNotice extension) */
-#siteNotice {
-	font-size: 0.8em;
-}
-#firstHeading {
-	padding-top: 0;
-	margin-top: 0;
-	padding-top: 0;
-	font-size: 1.6em;
-}
-div#content a.external,
-div#content a.external[href ^="gopher://"] {
-	/* @embed */
-	background: url(images/external-link-ltr-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href ^="https://"],
-.link-https {
-	/* @embed */
-	background: url(images/lock-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href ^="mailto:"],
-.link-mailto {
-	/* @embed */
-	background: url(images/mail-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href ^="news:"] {
-	/* @embed */
-	background: url(images/news-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href ^="ftp://"],
-.link-ftp {
-	/* @embed */
-	background: url(images/file-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href ^="irc://"],
-div#content a.external[href ^="ircs://"],
-.link-irc {
-	/* @embed */
-	background: url(images/talk-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href $=".ogg"], div#content a.external[href $=".OGG"],
-div#content a.external[href $=".mid"], div#content a.external[href $=".MID"],
-div#content a.external[href $=".midi"], div#content a.external[href $=".MIDI"],
-div#content a.external[href $=".mp3"], div#content a.external[href $=".MP3"],
-div#content a.external[href $=".wav"], div#content a.external[href $=".WAV"],
-div#content a.external[href $=".wma"], div#content a.external[href $=".WMA"],
-.link-audio {
-	/* @embed */
-	background: url(images/audio-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href $=".ogm"], div#content a.external[href $=".OGM"],
-div#content a.external[href $=".avi"], div#content a.external[href $=".AVI"],
-div#content a.external[href $=".mpeg"], div#content a.external[href $=".MPEG"],
-div#content a.external[href $=".mpg"], div#content a.external[href $=".MPG"],
-.link-video {
-	/* @embed */
-	background: url(images/video-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-div#content a.external[href $=".pdf"], div#content a.external[href $=".PDF"],
-div#content a.external[href *=".pdf#"], div#content a.external[href *=".PDF#"],
-div#content a.external[href *=".pdf?"], div#content a.external[href *=".PDF?"],
-.link-document {
-	/* @embed */
-	background: url(images/document-icon.png) center right no-repeat;
-	padding-right: 13px;
-}
-
-/* Icon for Usernames */
-#pt-userpage,
-#pt-anonuserpage,
-#pt-login {
-	/* @embed */
-	background: url(images/user-icon.png) left top no-repeat;
-	padding-left: 15px !important;
-	text-transform: none;
-}
-
-.redirectText {
-	font-size: 140%;
-}
-
-.redirectMsg img {
-	vertical-align: text-bottom;
-}
-
-#bodyContent {
-	position: relative;
-	width: 100%;
-}
-#mw-js-message {
-	font-size: 0.8em;
-}
-div#bodyContent {
-	line-height: 1.5em;
-}
-
-/* Watch/Unwatch Icon Styling */
-#ca-unwatch.icon a,
-#ca-watch.icon a {
-	margin: 0;
-	padding: 0;
-	outline: none;
-	display: block;
-	width: 26px;
-	/* This hides the text but shows the background image */
-	padding-top: 3.1em;
-	margin-top: 0;
-	/* Only applied in IE6 */
-	margin-top: -0.8em !ie;
-	height: 0;
-	overflow: hidden;
-	/* @embed */
-	background-image: url(images/watch-icons.png);
-}
-#ca-unwatch.icon a {
-	background-position: -43px 60%;
-}
-#ca-watch.icon a {
-	background-position: 5px 60%;
-}
-#ca-unwatch.icon a:hover,
-#ca-unwatch.icon a:focus {
-	background-position: -67px 60%;
-}
-#ca-watch.icon a:hover,
-#ca-watch.icon a:focus {
-	background-position: -19px 60%;
-}
-#ca-unwatch.icon a.loading,
-#ca-watch.icon a.loading {
-	/* @embed */
-	background-image: url(images/watch-icon-loading.gif);
-	background-position: 5px 60%;
-}
-#ca-unwatch.icon a span,
-#ca-watch.icon a span {
-	display: none;
-}
-div.vectorTabs ul {
-	/* @embed */
-	background-image:url(images/tab-break.png);
-	background-position:right bottom;
-	background-repeat:no-repeat;
-}
-
-/* Tooltips are outside of the normal body code, so this helps make the size of the text sensible */
-.tipsy {
-	font-size: 0.8em;
-}
-/**
- * CSS in this file is used by *all* skins (that have any CSS at all). Be
- * careful what you put in here, since what looks good in one skin may not in
- * another, but don't ignore the poor pre-Monobook users either.
- */
-
-/* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
-
-/**
- * These classes should be used for text depending on the content direction.
- * Content stuff like editsection, ul/ol and TOC depend on this.
- */
-.mw-content-ltr {
-	/* @noflip */
-	direction: ltr;
-}
-.mw-content-rtl {
-	/* @noflip */
-	direction: rtl;
-}
-
-/* Most input fields should be in site direction */
-.sitedir-ltr textarea,
-.sitedir-ltr input {
-	/* @noflip */
-	direction: ltr;
-}
-.sitedir-rtl textarea,
-.sitedir-rtl input {
-	/* @noflip */
-	direction: rtl;
-}
-
-/* Input types that should follow user direction, like buttons */
-/* TODO: What about buttons in wikipage content ? */
-input[type="submit"],
-input[type="button"],
-input[type="reset"],
-input[type="file"] {
-	direction: ltr;
-}
-
-/* Override default values */
-textarea[dir="ltr"],
-input[dir="ltr"] {
-	/* @noflip */
-	direction: ltr;
-}
-textarea[dir="rtl"],
-input[dir="rtl"] {
-	/* @noflip */
-	direction: rtl;
-}
-
-/* Default style for semantic tags */
-abbr,
-acronym,
-.explain {
-	border-bottom: 1px dotted;
-	cursor: help;
-}
-
-/* Colored watchlist and recent changes numbers */
-.mw-plusminus-pos {
-	color: #006400; /* dark green */
-}
-.mw-plusminus-neg {
-	color: #8b0000; /* dark red */
-}
-.mw-plusminus-null {
-	color: #aaa; /* gray */
-}
-
-/**
- * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
- * [[Special:Watchlist/edit]] and in category listings.
- */
-.allpagesredirect,
-.redirect-in-category,
-.watchlistredir {
-	font-style: italic;
-}
-
-/* Comment and username portions of RC entries */
-span.comment {
-	font-style: italic;
-}
-
-span.changedby {
-	font-size: 95%;
-}
-
-/* Math */
-.texvc {
-	direction: ltr;
-	unicode-bidi: embed;
-}
-img.tex {
-	vertical-align: middle;
-}
-span.texhtml {
-	font-family: serif;
-}
-
-/**
- * Add a bit of margin space between the preview and the toolbar.
- * This replaces the ugly <p><br /></p> we used to insert into the page source
- */
-#wikiPreview.ontop {
-	margin-bottom: 1em;
-}
-
-/* Stop floats from intruding into edit area in previews */
-#editform,
-#toolbar,
-#wpTextbox1 {
-	clear: both;
-}
-#toolbar img {
-	cursor: pointer;
-}
-div#mw-js-message {
-	margin: 1em 5%;
-	padding: 0.5em 2.5%;
-	border: solid 1px #ddd;
-	background-color: #fcfcfc;
-}
-
-/* Edit section links */
-.editsection {
-	float: right;
-	margin-left: 5px;
-}
-/* Correct directionality when page dir is different from site/user dir */
-.mw-content-ltr .editsection,
-.mw-content-rtl .mw-content-ltr .editsection {
-	/* @noflip */
-	float: right;
-}
-.mw-content-rtl .editsection,
-.mw-content-ltr .mw-content-rtl .editsection {
-	/* @noflip */
-	float: left;
-}
-
-/**
- * File description page
- */
-
-div.mw-filepage-resolutioninfo {
-	font-size: smaller;
-}
-
-/**
- * File histories
- */
-h2#filehistory {
-	clear: both;
-}
-
-table.filehistory th,
-table.filehistory td {
-	vertical-align: top;
-}
-table.filehistory th {
-	text-align: left;
-}
-table.filehistory td.mw-imagepage-filesize,
-table.filehistory th.mw-imagepage-filesize {
-	white-space: nowrap;
-}
-
-table.filehistory td.filehistory-selected {
-	font-weight: bold;
-}
-
-/**
- * Add a checkered background image on hover for file
- * description pages. (bug 26470)
- */
-.filehistory a img,
-#file img:hover {
-	/* @embed */
-	background: white url(images/Checker-16x16.png) repeat;
-}
-
-/**
- * rev_deleted stuff
- */
-li span.deleted,
-span.history-deleted {
-	text-decoration: line-through;
-	color: #888;
-	font-style: italic;
-}
-
-/**
- * Patrol stuff
- */
-.not-patrolled {
-	background-color: #ffa;
-}
-
-.unpatrolled {
-	font-weight: bold;
-	color: red;
-}
-
-div.patrollink {
-	font-size: 75%;
-	text-align: right;
-}
-
-/**
- * Forms
- */
-td.mw-label {
-	text-align: right;
-}
-td.mw-input {
-	text-align: left;
-}
-td.mw-submit {
-	text-align: left;
-}
-
-td.mw-label {
-	vertical-align: top;
-}
-.prefsection td.mw-label {
-	width: 20%;
-}
-.prefsection table {
-	width: 100%;
-}
-td.mw-submit {
-	white-space: nowrap;
-}
-
-table.mw-htmlform-nolabel td.mw-label {
-	width: 1px;
-}
-
-tr.mw-htmlform-vertical-label td.mw-label {
-	text-align: left !important;
-}
-
-.mw-htmlform-invalid-input td.mw-input input {
-	border-color: red;
-}
-
-.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
-	display: inline;
-	margin-right: 1em;
-	white-space: nowrap;
-}
-
-input#wpSummary {
-	width: 80%;
-}
-
-/**
- * Image captions
- */
-.thumbcaption {
-	text-align: left;
-}
-.magnify {
-	float: right;
-}
-
-/**
- * Categories
- */
-#catlinks {
-	/**
-	 * Overrides text justification (user preference)
-	 * See bug 31990
-	 */
-	text-align: left;
-}
-.catlinks ul {
-	display: inline;
-	margin: 0;
-	padding: 0;
-	list-style: none;
-	list-style-type: none;
-	list-style-image: none;
-	vertical-align: middle !ie;
-}
-
-.catlinks li {
-	display: inline-block;
-	line-height: 1.25em;
-	border-left: 1px solid #AAA;
-	margin: 0.125em 0;
-	padding: 0 0.5em;
-	zoom: 1;
-	display: inline !ie;
-}
-
-.catlinks li:first-child {
-	padding-left: 0.25em;
-	border-left: none;
-}
-/**
- * Hidden categories
- */
-.mw-hidden-cats-hidden {
-	display: none;
-}
-.catlinks-allhidden {
-	display: none;
-}
-
-/* Convenience links to edit block, delete and protect reasons */
-p.mw-ipb-conveniencelinks,
-p.mw-protect-editreasons,
-p.mw-filedelete-editreasons,
-p.mw-delete-editreasons,
-p.mw-revdel-editreasons {
-	font-size: 90%;
-	text-align: right;
-}
-
-/**
- * OpenSearch ajax suggestions
- */
-.os-suggest {
-	overflow: auto;
-	overflow-x: hidden;
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 0;
-	background-color: white;
-	border-style: solid;
-	border-color: #AAAAAA;
-	border-width: 1px;
-	z-index:99;
-	font-size:95%;
-}
-
-table.os-suggest-results {
-	font-size: 95%;
-	cursor: pointer;
-	border: 0;
-	border-collapse: collapse;
-	width: 100%;
-}
-
-.os-suggest-result,
-.os-suggest-result-hl {
-	white-space: nowrap;
-	background-color: white;
-	color: black;
-	padding: 2px;
-}
-.os-suggest-result-hl,
-.os-suggest-result-hl-webkit {
-	background-color: #4C59A6;
-	color: white;
-}
-
-.os-suggest-toggle {
-	position: relative;
-	left: 1ex;
-	font-size: 65%;
-}
-.os-suggest-toggle-def {
-	position: absolute;
-	top: 0;
-	left: 0;
-	font-size: 65%;
-	visibility: hidden;
-}
-
-/* Page history styling */
-
-/* The auto-generated edit comments */
-.autocomment {
-	color: gray;
-}
-#pagehistory .history-user {
-	margin-left: 0.4em;
-	margin-right: 0.2em;
-}
-#pagehistory span.minor {
-	font-weight: bold;
-}
-#pagehistory li {
-	border: 1px solid white;
-}
-#pagehistory li.selected {
-	background-color: #f9f9f9;
-	border: 1px dashed #aaa;
-}
-
-.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
-	float: right;
-}
-
-/** Generic minor/bot/newpage styling (recent changes) */
-.newpage,
-.minoredit,
-.botedit {
-	font-weight: bold;
-}
-
-#shared-image-dup,
-#shared-image-conflict {
-	font-style: italic;
-}
-
-/**
- * Recreating deleted page warning
- * Reupload file warning
- * Page protection warning
- * incl. log entries for these warnings
- */
-div.mw-warning-with-logexcerpt {
-	padding: 3px;
-	margin-bottom: 3px;
-	border: 2px solid #2F6FAB;
-	clear: both;
-}
-div.mw-warning-with-logexcerpt ul li {
-	font-size: 90%;
-}
-
-/* (show/hide) revision deletion links */
-span.mw-revdelundel-link,
-strong.mw-revdelundel-link {
-	font-size: 90%;
-}
-span.mw-revdelundel-hidden,
-input.mw-revdelundel-hidden {
-	visibility: hidden;
-}
-
-td.mw-revdel-checkbox,
-th.mw-revdel-checkbox {
-	padding-right: 10px;
-	text-align: center;
-}
-
-/* feed links */
-a.feedlink {
-	/* @embed */
-	background: url(images/feed-icon.png) center left no-repeat;
-	padding-left: 16px;
-}
-
-/* Plainlinks - this can be used to switch
- * off special external link styling */
-.plainlinks a {
-	background: none !important;
-	padding: 0 !important;
-}
-/* External URLs should always be treated as LTR (bug 4330) */
-/* @noflip */ .rtl a.external.free,
-.rtl a.external.autonumber {
-	direction: ltr;
-	unicode-bidi: embed;
-}
-
-/**
- * wikitable class for skinning normal tables
- * keep in sync with commonPrint.css
- */
-table.wikitable {
-	margin: 1em 1em 1em 0;
-	background-color: #f9f9f9;
-	border: 1px #aaa solid;
-	border-collapse: collapse;
-	color: black;
-}
-table.wikitable > tr > th,
-table.wikitable > tr > td,
-table.wikitable > * > tr > th,
-table.wikitable > * > tr > td {
-	border: 1px #aaa solid;
-	padding: 0.2em;
-}
-table.wikitable > tr > th,
-table.wikitable > * > tr > th {
-	background-color: #f2f2f2;
-	text-align: center;
-}
-table.wikitable > caption {
-	font-weight: bold;
-}
-
-/* hide initially collapsed collapsable tables */
-table.collapsed tr.collapsable {
-	display: none;
-}
-
-/* success and error messages */
-.success {
-	color: green;
-	font-size: larger;
-}
-.warning {
-	color: #FFA500; /* orange */
-	font-size: larger;
-}
-.error {
-	color: red;
-	font-size: larger;
-}
-.errorbox,
-.warningbox,
-.successbox {
-	font-size: larger;
-	border: 2px solid;
-	padding: .5em 1em;
-	float: left;
-	margin-bottom: 2em;
-	color: #000;
-}
-.errorbox {
-	border-color: red;
-	background-color: #fff2f2;
-}
-.warningbox {
-	border-color: #FF8C00; /* darkorange */
-	background-color: #FFFFC0;
-}
-.successbox {
-	border-color: green;
-	background-color: #dfd;
-}
-.errorbox h2,
-.warningbox h2,
-.successbox h2 {
-	font-size: 1em;
-	font-weight: bold;
-	display: inline;
-	margin: 0 .5em 0 0;
-	border: none;
-}
-
-/* general info/warning box for SP */
-.mw-infobox {
-	border: 2px solid #ff7f00;
-	margin: 0.5em;
-	clear: left;
-	overflow: hidden;
-}
-
-.mw-infobox-left {
-	margin: 7px;
-	float: left;
-	width: 35px;
-}
-
-.mw-infobox-right {
-	margin: 0.5em 0.5em 0.5em 49px;
-}
-
-/* Note on preview page */
-.previewnote {
-	color: #c00;
-	margin-bottom: 1em;
-}
-
-.previewnote p {
-	text-indent: 3em;
-	margin: 0.8em 0;
-}
-
-.visualClear {
-	clear: both;
-}
-
-#mw_trackbacks {
-	border: solid 1px #bbbbff;
-	background-color: #eeeeff;
-	padding: 0.2em;
-}
-
-/**
- * Data table style
- *
- * Transparent table with suddle borders
- * and blue row-highlighting.
- */
-.mw-datatable {
-	border-collapse: collapse;
-}
-.mw-datatable,
-.mw-datatable td,
-.mw-datatable th {
-	border: 1px solid #aaaaaa;
-	padding: 0 0.15em 0 0.15em;
-}
-.mw-datatable th {
-	background-color: #ddddff;
-}
-.mw-datatable td {
-	background-color: #ffffff;
-}
-.mw-datatable tr:hover td {
-	background-color: #eeeeff;
-}
-
-
-/**
- * TablePager tables generated by the TablePager PHP class
- * in MediaWiki (e.g. Special:ListFiles).
- */
-.TablePager {
-	min-width: 80%;
-}
-.TablePager_nav {
-	margin: 0 auto;
-}
-.TablePager_nav td {
-	padding: 3px;
-	text-align: center;
-}
-.TablePager_nav a {
-	text-decoration: none;
-}
-
-.imagelist td,
-.imagelist th {
-	white-space: nowrap;
-}
-.imagelist .TablePager_col_links {
-	background-color: #eeeeff;
-}
-.imagelist .TablePager_col_img_description {
-	white-space: normal;
-}
-.imagelist th.TablePager_sort {
-	background-color: #ccccff;
-}
-
-/* filetoc */
-ul#filetoc {
-	text-align: center;
-	border: 1px solid #aaaaaa;
-	background-color: #f9f9f9;
-	padding: 5px;
-	font-size: 95%;
-	margin-bottom: 0.5em;
-	margin-left: 0;
-	margin-right: 0;
-}
-
-#filetoc li {
-	display: inline;
-	list-style-type: none;
-	padding-right: 2em;
-}
-
-/* Classes for EXIF data display */
-table.mw_metadata {
-	font-size: 0.8em;
-	margin-left: 0.5em;
-	margin-bottom: 0.5em;
-	width: 400px;
-}
-
-table.mw_metadata caption {
-	font-weight: bold;
-}
-
-table.mw_metadata th {
-	font-weight: normal;
-}
-
-table.mw_metadata td {
-	padding: 0.1em;
-}
-
-table.mw_metadata {
-	border: none;
-	border-collapse: collapse;
-}
-
-table.mw_metadata td,
-table.mw_metadata th {
-	text-align: center;
-	border: 1px solid #aaaaaa;
-	padding-left: 5px;
-	padding-right: 5px;
-}
-
-table.mw_metadata th {
-	background-color: #f9f9f9;
-}
-
-table.mw_metadata td {
-	background-color: #fcfcfc;
-}
-
-table.mw_metadata ul.metadata-langlist {
-	list-style-type: none;
-	list-style-image: none;
-	padding-right: 5px;
-	padding-left: 5px;
-	margin: 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-.mw-content-ltr ul,
-.mw-content-rtl .mw-content-ltr ul {
-	/* @noflip */
-	margin: 0.3em 0 0 1.6em;
-	padding: 0;
-}
-.mw-content-rtl ul,
-.mw-content-ltr .mw-content-rtl ul {
-	/* @noflip */
-	margin: 0.3em 1.6em 0 0;
-	padding: 0;
-}
-.mw-content-ltr ol,
-.mw-content-rtl .mw-content-ltr ol {
-	/* @noflip */
-	margin: 0.3em 0 0 3.2em;
-	padding: 0;
-}
-.mw-content-rtl ol,
-.mw-content-ltr .mw-content-rtl ol {
-	/* @noflip */
-	margin: 0.3em 3.2em 0 0;
-	padding: 0;
-}
-/* @noflip */
-.mw-content-ltr dd,
-.mw-content-rtl .mw-content-ltr dd {
-	margin-left: 1.6em;
-	margin-right: 0;
-}
-/* @noflip */
-.mw-content-rtl dd,
-.mw-content-ltr .mw-content-rtl dd {
-	margin-right: 1.6em;
-	margin-left: 0;
-}
-
-/* Galleries */
-/* These display attributes look nonsensical, but are needed to support IE and FF2 */
-/* Don't forget to update commonPrint.css */
-li.gallerybox {
-	vertical-align: top;
-	border: solid 2px white;
-	display: -moz-inline-box;
-	display: inline-block;
-}
-
-ul.gallery,
-li.gallerybox {
-	zoom: 1;
-	*display: inline;
-}
-
-ul.gallery {
-	margin: 2px;
-	padding: 2px;
-	display: block;
-}
-
-li.gallerycaption {
-	font-weight: bold;
-	text-align: center;
-	display: block;
-	word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-	text-align: center;
-	border: 1px solid #ccc;
-	background-color: #f9f9f9;
-	margin: 2px;
-}
-
-li.gallerybox div.thumb img {
-	display: block;
-	margin: 0 auto;
-}
-
-div.gallerytext {
-	overflow: hidden;
-	font-size: 94%;
-	padding: 2px 4px;
-	word-wrap: break-word;
-}
-
-.mw-ajax-loader {
-	/* @embed */
-	background-image: url(images/ajax-loader.gif);
-	background-position: center center;
-	background-repeat: no-repeat;
-	padding: 16px;
-	position: relative;
-	top: -16px;
-}
-
-.mw-small-spinner {
-	padding: 10px !important;
-	margin-right: 0.6em;
-	/* @embed */
-	background-image: url(images/spinner.gif);
-	background-position: center center;
-	background-repeat: no-repeat;
-}
-
-/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
-/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
-h1:lang(as),
-h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
-h1:lang(bho),
-h1:lang(bn),
-h1:lang(gu),
-h1:lang(hi),
-h1:lang(kn),
-h1:lang(ml),
-h1:lang(mr),
-h1:lang(or),
-h1:lang(pa),
-h1:lang(sa),
-h1:lang(ta),
-h1:lang(te) {
-	line-height: 1.5em !important;
-}
-h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
-h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
-h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
-h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
-h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
-h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
-h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
-h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
-h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
-h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
-h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
-h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
-h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
-h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
-	line-height: 1.2em;
-}
-
-/* Localised ordered list numbering for some languages */
-ol:lang(bcc) li,
-ol:lang(bqi) li,
-ol:lang(fa) li,
-ol:lang(glk) li,
-ol:lang(kk-arab) li,
-ol:lang(mzn) li {
-	list-style-type: -moz-persian;
-	list-style-type: persian;
-}
-
-ol:lang(ckb) li {
-	list-style-type: -moz-arabic-indic;
-	list-style-type: arabic-indic;
-}
-
-ol:lang(hi) li,
-ol:lang(mr) li {
-	list-style-type: -moz-devanagari;
-	list-style-type: devanagari;
-}
-
-ol:lang(as) li,
-ol:lang(bn) li {
-	list-style-type: -moz-bengali;
-	list-style-type: bengali;
-}
-
-ol:lang(or) li {
-	list-style-type: -moz-oriya;
-	list-style-type: oriya;
-}
-
-#toc ul, .toc ul {
-	margin: .3em 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-/* @noflip */ .mw-content-ltr .toc ul,
-.mw-content-ltr #toc ul,
-.mw-content-rtl .mw-content-ltr .toc ul,
-.mw-content-rtl .mw-content-ltr #toc ul {
-	text-align: left;
-}
-/* @noflip */ .mw-content-rtl .toc ul,
-.mw-content-rtl #toc ul,
-.mw-content-ltr .mw-content-rtl .toc ul,
-.mw-content-ltr .mw-content-rtl #toc ul {
-	text-align: right;
-}
-/* @noflip */ .mw-content-ltr .toc ul ul,
-.mw-content-ltr #toc ul ul,
-.mw-content-rtl .mw-content-ltr .toc ul ul,
-.mw-content-rtl .mw-content-ltr #toc ul ul {
-	margin: 0 0 0 2em;
-}
-/* @noflip */ .mw-content-rtl .toc ul ul,
-.mw-content-rtl #toc ul ul,
-.mw-content-ltr .mw-content-rtl .toc ul ul,
-.mw-content-ltr .mw-content-rtl #toc ul ul {
-	margin: 0 2em 0 0;
-}
-
-#toc #toctitle,
-.toc #toctitle,
-#toc .toctitle,
-.toc .toctitle {
-	direction: ltr;
-}
-
-/* tooltip styles */
-.mw-help-field-hint {
-	display: none;
-	margin-left: 2px;
-	margin-bottom: -8px;
-	padding: 0 0 0 15px;
-	/* @embed */
-	background-image: url('images/help-question.gif');
-	background-position: left center;
-	background-repeat: no-repeat;
-	cursor: pointer;
-	font-size: .8em;
-	text-decoration: underline;
-	color: #0645ad;
-}
-.mw-help-field-hint:hover {
-	/* @embed */
-	background-image: url('images/help-question-hover.gif');
-}
-.mw-help-field-data {
-	display: block;
-	background-color: #d6f3ff;
-	padding:5px 8px 4px 8px;
-	border: 1px solid #5dc9f4;
-	margin-left: 20px;
-}
-.tipsy {
-	padding: 5px 5px 10px;
-	font-size: 12px;
-	position: absolute;
-	z-index: 100000;
-	overflow: visible;
-}
-.tipsy-inner {
-	padding: 5px 8px 4px 8px;
-	background-color: #d6f3ff;
-	color: black;
-	border: 1px solid #5dc9f4;
-	max-width: 300px;
-	text-align: left;
-}
-.tipsy-arrow {
-	position: absolute;
-	/* @embed */
-	background: url(images/tipsy-arrow.gif) no-repeat top left;
-	width: 13px;
-	height: 13px;
-}
-.tipsy-se .tipsy-arrow {
-	bottom: -2px;
-	right: 10px;
-	background-position: 0% 100%;
-}
-
-#mw-clearyourcache,
-#mw-sitecsspreview,
-#mw-sitejspreview,
-#mw-usercsspreview,
-#mw-userjspreview {
-	direction: ltr;
-	unicode-bidi: embed;
-}
-
-/* Correct user & content directionality when viewing a diff */
-.diff-currentversion-title,
-.diff {
-	direction: ltr;
-	unicode-bidi: embed;
-}
-/* @noflip */ .diff-contentalign-right td {
-	direction: rtl;
-	unicode-bidi: embed;
-}
-/* @noflip */ .diff-contentalign-left td {
-	direction: ltr;
-	unicode-bidi: embed;
-}
-.diff-otitle,
-.diff-ntitle,
-.diff-lineno {
-	direction: ltr !important;
-	unicode-bidi: embed;
-}
-
-#mw-revision-info,
-#mw-revision-info-current,
-#mw-revision-nav {
-	direction: ltr;
-	display: inline;
-}
-
-/* Images */
-
-/* @noflip */ div.tright,
-div.floatright,
-table.floatright {
-	clear: right;
-	float: right;
-}
-/* @noflip */ div.tleft,
-div.floatleft,
-table.floatleft {
-	float: left;
-	clear: left;
-}
-div.floatright,
-table.floatright,
-div.floatleft,
-table.floatleft {
-	position: relative;
-}
-
-/* bug 12205 */
-#mw-credits a {
-	unicode-bidi: embed;
-}
-
-/* Accessibility */
-.mw-jump,
-#jump-to-nav {
-	overflow: hidden;
-	height: 0;
-	zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
-}
-
-/* Print footer should be hidden by default in screen. */
-.printfooter {
-	display: none;
-}
-
-/* For developpers */
-.xdebug-error {
-	position: absolute;
-	z-index: 99;
-}
-
-.editsection, .toctoggle {
-    -moz-user-select: none;
-    -webkit-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-}
-/**
- * MediaWiki Print style sheet for CSS2-capable browsers.
- * Copyright Gabriel Wicke, http://www.aulinx.de/
- *
- * Derived from the plone (http://plone.org/) styles
- * Copyright Alexander Limi
- */
-
-/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-a.stub,
-a.new {
-	color: #ba0000;
-	text-decoration: none;
-}
-
-#toc {
-	border: 1px solid #aaaaaa;
-	background-color: #f9f9f9;
-	padding: 5px;
-}
-
-/* images */
-div.floatright {
-	float: right;
-	clear: right;
-	position: relative;
-	margin: 0.5em 0 0.8em 1.4em;
-}
-div.floatright p {
-	font-style: italic;
-}
-div.floatleft {
-	float: left;
-	clear: left;
-	position: relative;
-	margin: 0.5em 1.4em 0.8em 0;
-}
-div.floatleft p {
-	font-style: italic;
-}
-div.center {
-	text-align: center;
-}
-
-/* thumbnails */
-div.thumb {
-	border: none;
-	width: auto;
-	margin-top: 0.5em;
-	margin-bottom: 0.8em;
-	background-color: transparent;
-}
-div.thumbinner {
-	border:1px solid #cccccc;
-	padding: 3px !important;
-	background-color: White;
-	font-size: 94%;
-	text-align: center;
-	overflow: hidden;
-}
-html .thumbimage {
-	border: 1px solid #cccccc;
-}
-html .thumbcaption {
-	border: none;
-	text-align: left;
-	line-height: 1.4em;
-	padding: 3px !important;
-	font-size: 94%;
-}
-
-div.magnify {
-	display: none;
-}
-/* @noflip */
-div.tright {
-	float: right;
-	clear: right;
-	margin: 0.5em 0 0.8em 1.4em;
-}
-/* @noflip */
-div.tleft {
-	float: left;
-	clear: left;
-	margin: 0.5em 1.4em 0.8em 0;
-}
-img.thumbborder {
-	border: 1px solid #dddddd;
-}
-
-/* table standards */
-table.rimage {
-	float: right;
-	width: 1pt;
-	position: relative;
-	margin-left: 1em;
-	margin-bottom: 1em;
-	text-align: center;
-}
-
-body {
-	background: white;
-	color: black;
-	margin: 0;
-	padding: 0;
-}
-
-.noprint,
-div#jump-to-nav,
-.mw-jump,
-div.top,
-div#column-one,
-#colophon,
-.editsection,
-.toctoggle,
-.tochidden,
-div#f-poweredbyico,
-div#f-copyrightico,
-li#viewcount,
-li#about,
-li#disclaimer,
-li#mobileview,
-li#privacy,
-#footer-places,
-.mw-hidden-catlinks,
-tr.mw-metadata-show-hide-extended,
-span.mw-filepage-other-resolutions,
-#filetoc {
-	/* Hides all the elements irrelevant for printing */
-	display: none;
-}
-
-ul {
-	list-style-type: square;
-}
-
-#content {
-	background: none;
-	border: none !important;
-	padding: 0 !important;
-	margin: 0 !important;
-	direction: ltr;
-}
-#footer {
-	background : white;
-	color : black;
-	margin-top: 1em;
-	border-top: 1px solid #AAA;
-	direction: ltr;
-}
-
-h1, h2, h3, h4, h5, h6 {
-	font-weight: bold;
-}
-
-p {
-	margin: 1em 0;
-	line-height: 1.2em;
-}
-
-pre {
-	border: 1pt dashed black;
-	white-space: pre;
-	font-size: 8pt;
-	overflow: auto;
-	padding: 1em 0;
-	background: white;
-	color: black;
-}
-
-table.listing,
-table.listing td {
-	border: 1pt solid black;
-	border-collapse: collapse;
-}
-
-a {
-	color: black !important;
-	background: none !important;
-	padding: 0 !important;
-}
-
-a:link, a:visited {
-	color: #520;
-	background: transparent;
-	text-decoration: underline;
-}
-
-#content a.external.text:after,
-#content a.external.autonumber:after {
-	/* Expand URLs for printing */
-	content: " (" attr(href) ") ";
-}
-
-#globalWrapper {
-	width: 100% !important;
-	min-width: 0 !important;
-}
-
-#content {
-	background: white;
-	color: black;
-}
-
-#column-content {
-	margin: 0 !important;
-}
-
-#column-content #content {
-	padding: 1em;
-	margin: 0 !important;
-}
-
-/* MSIE/Win doesn't understand 'inherit' */
-a,
-a.external,
-a.new,
-a.stub {
-	color: black !important;
-	text-decoration: none !important;
-}
-
-/* Continue ... */
-a,
-a.external,
-a.new,
-a.stub {
-	color: inherit !important;
-	text-decoration: inherit !important;
-}
-
-img {
-	border: none;
-	vertical-align: middle;
-}
-
-/* math */
-span.texhtml {
-	font-family: serif;
-}
-
-#siteNotice {
-	display: none;
-}
-
-/* Galleries (see shared.css for more info) */
-li.gallerybox {
-	vertical-align: top;
-	border: solid 2px white;
-	display: -moz-inline-box;
-	display: inline-block;
-}
-
-ul.gallery, li.gallerybox {
-	zoom: 1;
-	*display: inline;
-}
-
-ul.gallery {
-	margin: 2px;
-	padding: 2px;
-	display: block;
-}
-
-li.gallerycaption {
-	font-weight: bold;
-	text-align: center;
-	display: block;
-	word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-	text-align: center;
-	border: 1px solid #ccc;
-	margin: 2px;
-}
-
-div.gallerytext {
-	overflow: hidden;
-	font-size: 94%;
-	padding: 2px 4px;
-	word-wrap: break-word;
-}
-
-/**
- * Diff rendering
- */
-table.diff {
-	background: white;
-}
-td.diff-otitle {
-	background: #ffffff;
-}
-td.diff-ntitle {
-	background: #ffffff;
-}
-td.diff-addedline {
-	background: #ccffcc;
-	font-size: smaller;
-	border: solid 2px black;
-}
-td.diff-deletedline {
-	background: #ffffaa;
-	font-size: smaller;
-	border: dotted 2px black;
-}
-td.diff-context {
-	background: #eeeeee;
-	font-size: smaller;
-}
-.diffchange {
-	color: silver;
-	font-weight: bold;
-	text-decoration: underline;
-}
-
-/**
- * Table rendering
- * As on shared.css but with white background.
- */
-table.wikitable,
-table.mw_metadata {
-	margin: 1em 1em 1em 0;
-	border: 1px #aaa solid;
-	background: white;
-	border-collapse: collapse;
-}
-table.wikitable > tr > th, table.wikitable > tr > td,
-table.wikitable > * > tr > th, table.wikitable > * > tr > td,
-.mw_metadata th, .mw_metadata td {
-	border: 1px #aaa solid;
-	padding: 0.2em;
-}
-table.wikitable > tr > th,
-table.wikitable > * > tr > th,
-.mw_metadata th {
-	text-align: center;
-	background: white;
-	font-weight: bold;
-}
-table.wikitable > caption,
-.mw_metadata caption {
-	font-weight: bold;
-}
-
-a.sortheader {
-	margin: 0 0.3em;
-}
-
-/* Some pagination options */
-.wikitable, .thumb, img {
-	page-break-inside: avoid;
-}
-h2, h3, h4, h5, h6, h7 {
-	page-break-after: avoid;
-}
-p {
-	widows: 3;
-	orphans: 3;
-}
-
-/**
- * Categories
- */
-.catlinks ul {
-	display: inline;
-	margin: 0;
-	padding: 0;
-	list-style: none;
-	list-style-type: none;
-	list-style-image: none;
-	vertical-align: middle !ie;
-}
-
-.catlinks li {
-	display: inline-block;
-	line-height: 1.15em;
-	padding: 0 .4em;
-	border-left: 1px solid #AAA;
-	margin: 0.1em 0;
-	zoom: 1;
-	display: inline !ie;
-}
-
-.catlinks li:first-child {
-	padding-left: .2em;
-	border-left: none;
-}
-/* Default styling for HTML elements */
-dfn {
-    font-style: inherit;  /* Reset default styling for <dfn> */
-}
-sup, sub {
-    line-height: 1em;     /* Reduce line-height for <sup> and <sub> */
-}
- 
-/* Main page fixes */
-#interwiki-completelist {
-    font-weight: bold;
-}
-body.page-Main_Page #ca-delete {
-    display: none !important;
-}
-body.page-Main_Page #mp-topbanner {
-    clear: both;
-}
- 
-/* Edit window toolbar */
-#toolbar {
-    height: 22px;
-    margin-bottom: 6px;
-}
- 
-/* Highlight data points in the info action if specified in the URL */
-body.action-info :target {
-    background: #DEF;
-}
- 
-/* Make the list of references smaller */
-ol.references,
-div.reflist,
-div.refbegin {
-    font-size: 90%;            /* Default font-size */
-    margin-bottom: 0.5em;
-}
-div.refbegin-100 {
-    font-size: 100%;           /* Option for normal fontsize in {{refbegin}} */
-}
-div.reflist ol.references {
-    font-size: 100%;           /* Reset font-size when nested in div.reflist */
-    list-style-type: inherit;  /* Enable custom list style types */
-}
- 
-/* Reset top margin for lists embedded in columns */
-div.columns {
-    margin-top: 0.3em;
-}
-div.columns dl,
-div.columns ol,
-div.columns ul {
-    margin-top: 0;
-}
- 
-/* Avoid list items from breaking between columns */
-div.columns li,
-div.columns dd dd {
-    -webkit-column-break-inside: avoid;
-    page-break-inside: avoid;
-    break-inside: avoid-column;
-}
- 
-/* Highlight clicked reference in blue to help navigation */
-ol.references li:target,
-sup.reference:target,
-span.citation:target {
-    background-color: #DEF;
-}
- 
-/* Ensure refs in table headers and the like aren't bold or italic */
-sup.reference {
-    font-weight: normal;
-    font-style: normal;
-}
- 
-/* Allow hidden ref errors to be shown by user CSS */
-span.brokenref {
-    display: none;
-}
- 
-/* Styling for citations (CSS3). Breaks long urls, etc., rather than overflowing box */
-.citation {
-    word-wrap: break-word;
-}
- 
-/* For linked citation numbers and document IDs, where
-   the number need not be shown on a screen or a handheld,
-   but should be included in the printed version */
-@media screen, handheld {
-    .citation *.printonly {
-        display: none;
-    }
-}
- 
-/* Style for [[Template:Flowlist]] that Lets lists flow around floating objecs */
-.flowlist ul {
-    overflow-x: hidden;
-    margin-left: 0em;
-    padding-left: 1.6em;
-}
-.flowlist ol {
-    overflow-x: hidden;
-    margin-left: 0em;
-    padding-left: 3.2em;
-}
-.flowlist dl {
-    overflow-x: hidden;
-}
- 
-/* Style for horizontal lists (separator following item).
-   IE8-specific classes are assigned in [[MediaWiki:Common.js/IEFixes.js]].
-   @source mediawiki.org/wiki/Snippets/Horizontal_lists
-   @revision 4.3 (2014-01-06)
-   @author [[User:Edokter]]
- */
-.hlist dl,
-.hlist ol,
-.hlist ul {
-    margin: 0;
-    padding: 0;
-}
-/* Display list items inline */
-.hlist dd,
-.hlist dt,
-.hlist li {
-    margin: 0;
-    display: inline;
-}
-/* Display nested lists inline */
-.hlist dl dl, .hlist dl ol, .hlist dl ul,
-.hlist ol dl, .hlist ol ol, .hlist ol ul,
-.hlist ul dl, .hlist ul ol, .hlist ul ul {
-    display: inline;
-}
-/* Generate interpuncts */
-.hlist dt:after {
-    content: ": ";
-}
-.hlist dd:after,
-.hlist li:after {
-    content: " · ";
-    font-weight: bold;
-}
-.hlist dd:last-child:after,
-.hlist dt:last-child:after,
-.hlist li:last-child:after {
-    content: none;
-}
-/* For IE8 */
-.hlist dd.hlist-last-child:after,
-.hlist dt.hlist-last-child:after,
-.hlist li.hlist-last-child:after {
-    content: none;
-}
-/* Add parentheses around nested lists */
-.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
-.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
-.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
-    content: " (";
-    font-weight: normal;
-}
-.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
-.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
-.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
-    content: ") ";
-    font-weight: normal;
-}
-/* For IE8 */
-.hlist dd dd.hlist-last-child:after, .hlist dd dt.hlist-last-child:after, .hlist dd li.hlist-last-child:after,
-.hlist dt dd.hlist-last-child:after, .hlist dt dt.hlist-last-child:after, .hlist dt li.hlist-last-child:after,
-.hlist li dd.hlist-last-child:after, .hlist li dt.hlist-last-child:after, .hlist li li.hlist-last-child:after {
-    content: ") ";
-    font-weight: normal;
-}
-/* Put ordinals in front of ordered list items */
-.hlist ol {
-    counter-reset: listitem;
-}
-.hlist ol > li {
-    counter-increment: listitem;
-}
-.hlist ol > li:before {
-    content: " " counter(listitem) " ";
-}
-.hlist dd ol > li:first-child:before,
-.hlist dt ol > li:first-child:before,
-.hlist li ol > li:first-child:before {
-    content: " (" counter(listitem) " ";
-}
- 
-/* Unbulleted lists */
-.plainlist ul {
-    line-height: inherit;
-    list-style: none none;
-    margin: 0;
-}
-.plainlist ul li {
-    margin-bottom: 0;
-}
- 
-/* Default style for navigation boxes */
-.navbox {                     /* Navbox container style */
-    border: 1px solid #aaa;
-    width: 100%;
-    margin: auto;
-    clear: both;
-    font-size: 88%;
-    text-align: center;
-    padding: 1px;
-}
-.navbox-inner,
-.navbox-subgroup {
-    width: 100%;
-}
-.navbox-group,
-.navbox-title,
-.navbox-abovebelow {
-    padding: 0.25em 1em;      /* Title, group and above/below styles */
-    line-height: 1.5em;
-    text-align: center;
-}
-th.navbox-group {             /* Group style */
-    white-space: nowrap;
-    /* @noflip */
-    text-align: right;
-}
-.navbox,
-.navbox-subgroup {
-    background: #fdfdfd;      /* Background color */
-}
-.navbox-list {
-    line-height: 1.8em;
-    border-color: #fdfdfd;    /* Must match background color */
-}
-.navbox th,
-.navbox-title {
-    background: #ccccff;      /* Level 1 color */
-}
-.navbox-abovebelow,
-th.navbox-group,
-.navbox-subgroup .navbox-title {
-    background: #ddddff;      /* Level 2 color */
-}
-.navbox-subgroup .navbox-group,
-.navbox-subgroup .navbox-abovebelow {
-    background: #e6e6ff;      /* Level 3 color */
-}
-.navbox-even {
-    background: #f7f7f7;      /* Even row striping */
-}
-.navbox-odd {
-    background: transparent;  /* Odd row striping */
-}
-table.navbox + table.navbox {  /* Single pixel border between adjacent navboxes */
-    margin-top: -1px;          /* (doesn't work for IE6, but that's okay)       */
-}
-.navbox .hlist td dl,
-.navbox .hlist td ol,
-.navbox .hlist td ul,
-.navbox td.hlist dl,
-.navbox td.hlist ol,
-.navbox td.hlist ul {
-    padding: 0.125em 0;       /* Adjust hlist padding in navboxes */
-}
-ol + table.navbox,
-ul + table.navbox {
-    margin-top: 0.5em;        /* Prevent lists from clinging to navboxes */
-}
- 
-/* Default styling for Navbar template */
-.navbar {
-    display: inline;
-    font-size: 88%;
-    font-weight: normal;
-}
-.navbar ul {
-    display: inline;
-    white-space: nowrap;
-}
-.navbar li {
-    word-spacing: -0.125em;
-}
-.navbar.mini li span {
-  font-variant: small-caps;
-}
-/* Navbar styling when nested in infobox and navbox */
-.infobox .navbar {
-    font-size: 100%;
-}
-.navbox .navbar {
-    display: block;
-    font-size: 100%;
-}
-.navbox-title .navbar {
-    /* @noflip */
-    float: left;
-    /* @noflip */
-    text-align: left;
-    /* @noflip */
-    margin-right: 0.5em;
-    width: 6em;
-}
- 
-/* 'show'/'hide' buttons created dynamically by the CollapsibleTables javascript
-   in [[MediaWiki:Common.js]] are styled here so they can be customised. */
-.collapseButton {
-    /* @noflip */
-    float: right;
-    font-weight: normal;
-    /* @noflip */
-    margin-left: 0.5em;
-    /* @noflip */
-    text-align: right;
-    width: auto;
-}
-/* In navboxes, the show/hide button balances the v·d·e links
-   from [[Template:Navbar]], so they need to be the same width. */
-.navbox .collapseButton {
-    width: 6em;
-}
- 
-/* Styling for JQuery makeCollapsible, matching that of collapseButton */
-.mw-collapsible-toggle {
-    font-weight: normal;
-    /* @noflip */
-    text-align: right;
-}
-.navbox .mw-collapsible-toggle {
-    width: 6em;
-}
- 
-/* Infobox template style */
-.infobox {
-    border: 1px solid #aaa;
-    background-color: #f9f9f9;
-    color: black;
-    /* @noflip */
-    margin: 0.5em 0 0.5em 1em;
-    padding: 0.2em;
-    /* @noflip */
-    float: right;
-    /* @noflip */
-    clear: right;
-    /* @noflip */
-    text-align: left;
-    font-size: 88%;
-    line-height: 1.5em;
-}
-.infobox caption {
-    font-size: 125%;
-    font-weight: bold;
-}
-.infobox td,
-.infobox th {
-    vertical-align: top;
-}
-.infobox.bordered {
-    border-collapse: collapse;
-}
-.infobox.bordered td,
-.infobox.bordered th {
-    border: 1px solid #aaa;
-}
-.infobox.bordered .borderless td,
-.infobox.bordered .borderless th {
-    border: 0;
-}
- 
-.infobox.sisterproject {
-    width: 20em;
-    font-size: 90%;
-}
- 
-.infobox.standard-talk {
-    border: 1px solid #c0c090;
-    background-color: #f8eaba;
-}
-.infobox.standard-talk.bordered td,
-.infobox.standard-talk.bordered th {
-    border: 1px solid #c0c090;
-}
- 
-/* styles for bordered infobox with merged rows */
-.infobox.bordered .mergedtoprow td,
-.infobox.bordered .mergedtoprow th {
-    border: 0;
-    border-top: 1px solid #aaa;
-    /* @noflip */
-    border-right: 1px solid #aaa;
-}
- 
-.infobox.bordered .mergedrow td,
-.infobox.bordered .mergedrow th {
-    border: 0;
-    /* @noflip */
-    border-right: 1px solid #aaa;
-}
- 
-/* Styles for geography infoboxes, eg countries,
-   country subdivisions, cities, etc.            */
-.infobox.geography {
-    border-collapse: collapse;
-    line-height: 1.2em;
-    font-size: 90%;
-}
- 
-.infobox.geography  td,
-.infobox.geography  th {
-    border-top: 1px solid #aaa;
-    padding: 0.4em 0.6em 0.4em 0.6em;
-}
-.infobox.geography .mergedtoprow td,
-.infobox.geography .mergedtoprow th {
-    border-top: 1px solid #aaa;
-    padding: 0.4em 0.6em 0.2em 0.6em;
-}
- 
-.infobox.geography .mergedrow td,
-.infobox.geography .mergedrow th {
-    border: 0;
-    padding: 0 0.6em 0.2em 0.6em;
-}
- 
-.infobox.geography .mergedbottomrow td,
-.infobox.geography .mergedbottomrow th {
-    border-top: 0;
-    border-bottom: 1px solid #aaa;
-    padding: 0 0.6em 0.4em 0.6em;
-}
- 
-.infobox.geography .maptable td,
-.infobox.geography .maptable th {
-    border: 0;
-    padding: 0;
-}
- 
-/* Normal font styling for table row headers with scope="row" tag */
-.wikitable.plainrowheaders th[scope=row] {
-    font-weight: normal;
-    /* @noflip */
-    text-align: left;
-}
- 
-/* Lists in data cells are always left-aligned */
-.wikitable td ul,
-.wikitable td ol,
-.wikitable td dl {
-    /* @noflip */
-    text-align: left;
-}
-/* ...unless they also use the hlist class */
-.wikitable.hlist td ul,
-.wikitable.hlist td ol,
-.wikitable.hlist td dl {
-    text-align: inherit;
-}
- 
-/* Icons for medialist templates [[Template:Listen]],
-   [[Template:Multi-listen_start]], [[Template:Video]],
-   [[Template:Multi-video_start]] */
-div.listenlist {
-    background: url("//upload.wikimedia.org/wikipedia/commons/4/47/Sound-icon.svg") no-repeat scroll 0% 0% transparent;
-    background-size: 30px;
-    padding-left: 40px;
-}
- 
-/* Fix for hieroglyphs specificality issue in infoboxes ([[Bugzilla:41869]]) */
-table.mw-hiero-table td {
-    vertical-align: middle;
-}
- 
-/* Style rules for media list templates */
-div.medialist {
-    min-height: 50px;
-    margin: 1em;
-    /* @noflip */
-    background-position: top left;
-    background-repeat: no-repeat;
-}
-div.medialist ul {
-    list-style-type: none;
-    list-style-image: none;
-    margin: 0;
-}
-div.medialist ul li {
-    padding-bottom: 0.5em;
-}
-div.medialist ul li li {
-    font-size: 91%;
-    padding-bottom: 0;
-}
- 
-/* Change the external link icon to an Adobe icon for all PDF files
-   in browsers that support these CSS selectors, like Mozilla and Opera */
-div#content a[href$=".pdf"].external,
-div#content a[href*=".pdf?"].external,
-div#content a[href*=".pdf#"].external,
-div#content a[href$=".PDF"].external,
-div#content a[href*=".PDF?"].external,
-div#content a[href*=".PDF#"].external,
-div#mw_content a[href$=".pdf"].external,
-div#mw_content a[href*=".pdf?"].external,
-div#mw_content a[href*=".pdf#"].external,
-div#mw_content a[href$=".PDF"].external,
-div#mw_content a[href*=".PDF?"].external,
-div#mw_content a[href*=".PDF#"].external {
-    background: url("//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif") no-repeat right;
-    /* @noflip */
-    padding-right: 18px;
-}
- 
-/* Change the external link icon to an Adobe icon anywhere the PDFlink class
-   is used (notably Template:PDFlink). This works in IE, unlike the above. */
-div#content span.PDFlink a,
-div#mw_content span.PDFlink a {
-    background: url("//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif") no-repeat right;
-    /* @noflip */
-    padding-right: 18px;
-}
- 
-/* Content in columns with CSS instead of tables ([[Template:Columns]]) */
-div.columns-2 div.column {
-    /* @noflip */
-    float: left;
-    width: 50%;
-    min-width: 300px;
-}
-div.columns-3 div.column {
-    /* @noflip */
-    float: left;
-    width: 33.3%;
-    min-width: 200px;
-}
-div.columns-4 div.column {
-    /* @noflip */
-    float: left;
-    width: 25%;
-    min-width: 150px;
-}
-div.columns-5 div.column {
-    /* @noflip */
-    float: left;
-    width: 20%;
-    min-width: 120px;
-}
- 
-/* Messagebox templates */
-.messagebox {
-    border: 1px solid #aaa;
-    background-color: #f9f9f9;
-    width: 80%;
-    margin: 0 auto 1em auto;
-    padding: .2em;
-}
-.messagebox.merge {
-    border: 1px solid #c0b8cc;
-    background-color: #f0e5ff;
-    text-align: center;
-}
-.messagebox.cleanup {
-    border: 1px solid #9f9fff;
-    background-color: #efefff;
-    text-align: center;
-}
-.messagebox.standard-talk {
-    border: 1px solid #c0c090;
-    background-color: #f8eaba;
-    margin: 4px auto;
-}
-/* For old WikiProject banners inside banner shells. */
-.mbox-inside .standard-talk,
-.messagebox.nested-talk {
-    border: 1px solid #c0c090;
-    background-color: #f8eaba;
-    width: 100%;
-    margin: 2px 0;
-    padding: 2px;
-}
-.messagebox.small {
-    width: 238px;
-    font-size: 85%;
-    /* @noflip */
-    float: right;
-    clear: both;
-    /* @noflip */
-    margin: 0 0 1em 1em;
-    line-height: 1.25em;
-}
-.messagebox.small-talk {
-    width: 238px;
-    font-size: 85%;
-    /* @noflip */
-    float: right;
-    clear: both;
-    /* @noflip */
-    margin: 0 0 1em 1em;
-    line-height: 1.25em;
-    background: #F8EABA;
-}
- 
-/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
-th.mbox-text, td.mbox-text {   /* The message body cell(s) */
-    border: none;
-    /* @noflip */
-    padding: 0.25em 0.9em;     /* 0.9em left/right */
-    width: 100%;               /* Make all mboxes the same width regardless of text length */
-}
-td.mbox-image {                /* The left image cell */
-    border: none;
-    /* @noflip */
-    padding: 2px 0 2px 0.9em;  /* 0.9em left, 0px right */
-    text-align: center;
-}
-td.mbox-imageright {           /* The right image cell */
-    border: none;
-    /* @noflip */
-    padding: 2px 0.9em 2px 0;  /* 0px left, 0.9em right */
-    text-align: center;
-}
-td.mbox-empty-cell {           /* An empty narrow cell */
-    border: none;
-    padding: 0px;
-    width: 1px;
-}
- 
-/* Article message box styles */
-table.ambox {
-    margin: 0px 10%;                  /* 10% = Will not overlap with other elements */
-    border: 1px solid #aaa;
-    /* @noflip */
-    border-left: 10px solid #1e90ff;  /* Default "notice" blue */
-    background: #fbfbfb;
-}
-table.ambox + table.ambox {      /* Single border between stacked boxes. */
-    margin-top: -1px;
-}
-.ambox th.mbox-text,
-.ambox td.mbox-text {            /* The message body cell(s) */
-    padding: 0.25em 0.5em;       /* 0.5em left/right */
-}
-.ambox td.mbox-image {           /* The left image cell */
-    /* @noflip */
-    padding: 2px 0 2px 0.5em;    /* 0.5em left, 0px right */
-}
-.ambox td.mbox-imageright {      /* The right image cell */
-    /* @noflip */
-    padding: 2px 0.5em 2px 0;    /* 0px left, 0.5em right */
-}
- 
-table.ambox-notice {
-    /* @noflip */
-    border-left: 10px solid #1e90ff;    /* Blue */
-}
-table.ambox-speedy {
-    /* @noflip */
-    border-left: 10px solid #b22222;    /* Red */
-    background: #fee;                   /* Pink */
-}
-table.ambox-delete {
-    /* @noflip */
-    border-left: 10px solid #b22222;    /* Red */
-}
-table.ambox-content {
-    /* @noflip */
-    border-left: 10px solid #f28500;    /* Orange */
-}
-table.ambox-style {
-    /* @noflip */
-    border-left: 10px solid #f4c430;    /* Yellow */
-}
-table.ambox-move {
-    /* @noflip */
-    border-left: 10px solid #9932cc;    /* Purple */
-}
-table.ambox-protection {
-    /* @noflip */
-    border-left: 10px solid #bba;       /* Gray-gold */
-}
- 
-/* Image message box styles */
-table.imbox {
-    margin: 4px 10%;
-    border-collapse: collapse;
-    border: 3px solid #1e90ff;    /* Default "notice" blue */
-    background: #fbfbfb;
-}
-.imbox .mbox-text .imbox {  /* For imboxes inside imbox-text cells. */
-    margin: 0 -0.5em;       /* 0.9 - 0.5 = 0.4em left/right.        */
-    display: block;         /* Fix for webkit to force 100% width.  */
-}
-.mbox-inside .imbox {       /* For imboxes inside other templates.  */
-    margin: 4px;
-}
- 
-table.imbox-notice {
-    border: 3px solid #1e90ff;    /* Blue */
-}
-table.imbox-speedy {
-    border: 3px solid #b22222;    /* Red */
-    background: #fee;             /* Pink */
-}
-table.imbox-delete {
-    border: 3px solid #b22222;    /* Red */
-}
-table.imbox-content {
-    border: 3px solid #f28500;    /* Orange */
-}
-table.imbox-style {
-    border: 3px solid #f4c430;    /* Yellow */
-}
-table.imbox-move {
-    border: 3px solid #9932cc;    /* Purple */
-}
-table.imbox-protection {
-    border: 3px solid #bba;       /* Gray-gold */
-}
-table.imbox-license {
-    border: 3px solid #88a;       /* Dark gray */
-    background: #f7f8ff;          /* Light gray */
-}
-table.imbox-featured {
-    border: 3px solid #cba135;    /* Brown-gold */
-}
- 
-/* Category message box styles */
-table.cmbox {
-    margin: 3px 10%;
-    border-collapse: collapse;
-    border: 1px solid #aaa;
-    background: #DFE8FF;    /* Default "notice" blue */
-}
- 
-table.cmbox-notice {
-    background: #D8E8FF;    /* Blue */
-}
-table.cmbox-speedy {
-    margin-top: 4px;
-    margin-bottom: 4px;
-    border: 4px solid #b22222;    /* Red */
-    background: #FFDBDB;          /* Pink */
-}
-table.cmbox-delete {
-    background: #FFDBDB;    /* Red */
-}
-table.cmbox-content {
-    background: #FFE7CE;    /* Orange */
-}
-table.cmbox-style {
-    background: #FFF9DB;    /* Yellow */
-}
-table.cmbox-move {
-    background: #E4D8FF;    /* Purple */
-}
-table.cmbox-protection {
-    background: #EFEFE1;    /* Gray-gold */
-}
- 
-/* Other pages message box styles */
-table.ombox {
-    margin: 4px 10%;
-    border-collapse: collapse;
-    border: 1px solid #aaa;       /* Default "notice" gray */
-    background: #f9f9f9;
-}
- 
-table.ombox-notice {
-    border: 1px solid #aaa;       /* Gray */
-}
-table.ombox-speedy {
-    border: 2px solid #b22222;    /* Red */
-    background: #fee;             /* Pink */
-}
-table.ombox-delete {
-    border: 2px solid #b22222;    /* Red */
-}
-table.ombox-content {
-    border: 1px solid #f28500;    /* Orange */
-}
-table.ombox-style {
-    border: 1px solid #f4c430;    /* Yellow */
-}
-table.ombox-move {
-    border: 1px solid #9932cc;    /* Purple */
-}
-table.ombox-protection {
-    border: 2px solid #bba;       /* Gray-gold */
-}
- 
-/* Talk page message box styles */
-table.tmbox {
-    margin: 4px 10%;
-    border-collapse: collapse;
-    border: 1px solid #c0c090;    /* Default "notice" gray-brown */
-    background: #f8eaba;
-}
-.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
-    margin: 2px 0;               /* this declaration overrides other styles (including mbox-small above)   */
-    width: 100%;                 /* For Safari and Opera */
-}
-.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when  */
-    line-height: 1.5em;          /* also "nested", so reset styles that are   */
-    font-size: 100%;             /* set in "mbox-small" above.                */
-}
- 
-table.tmbox-speedy {
-    border: 2px solid #b22222;    /* Red */
-    background: #fee;             /* Pink */
-}
-table.tmbox-delete {
-    border: 2px solid #b22222;    /* Red */
-}
-table.tmbox-content {
-    border: 2px solid #f28500;    /* Orange */
-}
-table.tmbox-style {
-    border: 2px solid #f4c430;    /* Yellow */
-}
-table.tmbox-move {
-    border: 2px solid #9932cc;    /* Purple */
-}
-table.tmbox-protection,
-table.tmbox-notice {
-    border: 1px solid #c0c090;    /* Gray-brown */
-}
- 
-/* Disambig and set index box styles */
-table.dmbox {
-    clear: both;
-    margin: 0.9em 1em;
-    border-top: 1px solid #ccc;
-    border-bottom: 1px solid #ccc;
-    background: transparent;
-}
- 
-/* Footer and header message box styles */
-table.fmbox {
-    clear: both;
-    margin: 0.2em 0;
-    width: 100%;
-    border: 1px solid #aaa;
-    background: #f9f9f9;     /* Default "system" gray */
-}
-table.fmbox-system {
-    background: #f9f9f9;
-}
-table.fmbox-warning {
-    border: 1px solid #bb7070;  /* Dark pink */
-    background: #ffdbdb;        /* Pink */
-}
-table.fmbox-editnotice {
-    background: transparent;
-}
-/* Div based "warning" style fmbox messages. */
-div.mw-warning-with-logexcerpt,
-div.mw-lag-warn-high,
-div.mw-cascadeprotectedwarning,
-div#mw-protect-cascadeon {
-    clear: both;
-    margin: 0.2em 0;
-    border: 1px solid #bb7070;
-    background: #ffdbdb;
-    padding: 0.25em 0.9em;
-}
-/* Div based "system" style fmbox messages.
-   Used in [[MediaWiki:Readonly lag]]. */
-div.mw-lag-warn-normal,
-div.fmbox-system {
-    clear: both;
-    margin: 0.2em 0;
-    border: 1px solid #aaa;
-    background: #f9f9f9;
-    padding: 0.25em 0.9em;
-}
- 
-/* These mbox-small classes must be placed after all other
-   ambox/tmbox/ombox etc classes. "body.mediawiki" is so
-   they override "table.ambox + table.ambox" above. */
-body.mediawiki table.mbox-small {   /* For the "small=yes" option. */
-    /* @noflip */
-    clear: right;
-    /* @noflip */
-    float: right;
-    /* @noflip */
-    margin: 4px 0 4px 1em;
-    width: 238px;
-    font-size: 88%;
-    line-height: 1.25em;
-}
-body.mediawiki table.mbox-small-left {   /* For the "small=left" option. */
-    /* @noflip */
-    margin: 4px 1em 4px 0;
-    width: 238px;
-    border-collapse: collapse;
-    font-size: 88%;
-    line-height: 1.25em;
-}
- 
-/* Style for compact ambox */
-/* Hide the images */
-.compact-ambox table .mbox-image,
-.compact-ambox table .mbox-imageright,
-.compact-ambox table .mbox-empty-cell {
-    display: none;
-}
-/* Remove borders, backgrounds, padding, etc. */
-.compact-ambox table.ambox {
-    border: none;
-    border-collapse: collapse;
-    background: transparent;
-    margin: 0 0 0 1.6em !important;
-    padding: 0 !important;
-    width: auto;
-    display: block;
-}
-body.mediawiki .compact-ambox table.mbox-small-left {
-    font-size: 100%;
-    width: auto;
-    margin: 0;
-}
-/* Style the text cell as a list item and remove its padding */
-.compact-ambox table .mbox-text {
-    padding: 0 !important;
-    margin: 0 !important;
-}
-.compact-ambox table .mbox-text-span {
-    display: list-item;
-    line-height: 1.5em;
-    list-style-type: square;
-    list-style-image: url(//bits.wikimedia.org/skins/common/images/bullet.gif);
-}
-.skin-vector .compact-ambox table .mbox-text-span {
-    list-style-type: circle;
-    list-style-image: url(//bits.wikimedia.org/skins/vector/images/bullet-icon.png)
-}
-/* Allow for hiding text in compact form */
-.compact-ambox .hide-when-compact {
-    display: none;
-}
- 
-/* Remove default styles for [[MediaWiki:Noarticletext]]. */
-div.noarticletext {
-    border: none;
-    background: transparent;
-    padding: 0;
-}
- 
-/* Hide (formatting) elements from screen, but not from screenreaders */
-.visualhide {
-    position: absolute;
-    left: -10000px;
-    top: auto;
-    width: 1px;
-    height: 1px;
-    overflow: hidden;
-}
- 
-/* Bold save button */
-#wpSave {
-    font-weight: bold;
-}
- 
-/* class hiddenStructure is defunct. See [[Wikipedia:hiddenStructure]] */
-.hiddenStructure {
-    display: inline !important;
-    color: #f00;
-    background-color: #0f0;
-}
- 
-/* suppress missing interwiki image links where #ifexist cannot
-   be used due to high number of requests see .hidden-redlink on
-   [[m:MediaWiki:Common.css]] */
-.check-icon a.new {
-    display: none;
-    speak: none;
-}
- 
-/* Removes underlines from certain links */
-.nounderlines a,
-.IPA a:link, .IPA a:visited {
-    text-decoration: none !important;
-}
- 
-/* Standard Navigationsleisten, aka box hiding thingy
-   from .de.  Documentation at [[Wikipedia:NavFrame]]. */
-div.NavFrame {
-    margin: 0;
-    padding: 4px;
-    border: 1px solid #aaa;
-    text-align: center;
-    border-collapse: collapse;
-    font-size: 95%;
-}
-div.NavFrame + div.NavFrame {
-    border-top-style: none;
-    border-top-style: hidden;
-}
-div.NavPic {
-    background-color: #fff;
-    margin: 0;
-    padding: 2px;
-    /* @noflip */
-    float: left;
-}
-div.NavFrame div.NavHead {
-    height: 1.6em;
-    font-weight: bold;
-    background-color: #ccf;
-    position: relative;
-}
-div.NavFrame p,
-div.NavFrame div.NavContent,
-div.NavFrame div.NavContent p {
-    font-size: 100%;
-}
-div.NavEnd {
-    margin: 0;
-    padding: 0;
-    line-height: 1px;
-    clear: both;
-}
-a.NavToggle {
-    position: absolute;
-    top: 0;
-    /* @noflip */
-    right: 3px;
-    font-weight: normal;
-    font-size: 90%;
-}
- 
-/* Hatnotes and disambiguation notices */
-.rellink,
-.dablink {
-    font-style: italic;
-    /* @noflip */
-    padding-left: 1.6em;
-    margin-bottom: 0.5em;
-}
-.rellink i,
-.dablink i {
-    font-style: normal;
-}
- 
-/* Allow transcluded pages to display in lists rather than a table.
-   Compatible in Firefox; incompatible in IE6. */
-.listify td    { display: list-item; }
-.listify tr    { display: block; }
-.listify table { display: block; }
- 
-/* Geographical coordinates defaults. See [[Template:Coord/link]]
-   for how these are used. The classes "geo", "longitude", and
-   "latitude" are used by the [[Geo microformat]]. */
-.geo-default, .geo-dms, .geo-dec  { display: inline; }
-.geo-nondefault, .geo-multi-punct { display: none; }
-.longitude, .latitude             { white-space: nowrap; }
- 
-/* When <div class="nonumtoc"> is used on the table of contents,
-   the ToC will display without numbers */
-.nonumtoc .tocnumber { display: none; }
-.nonumtoc #toc ul,
-.nonumtoc .toc ul {
-    line-height: 1.5em;
-    list-style: none none;
-    margin: .3em 0 0;
-    padding: 0;
-}
-.nonumtoc #toc ul ul,
-.nonumtoc .toc ul ul {
-    /* @noflip */
-    margin: 0 0 0 2em;
-}
- 
-/* Allow limiting of which header levels are shown in a TOC;
-   <div class="toclimit-3">, for instance, will limit to
-   showing ==headings== and ===headings=== but no further
-   (as long as there are no =headings= on the page, which
-   there shouldn't be according to the MoS). */
-.toclimit-2 .toclevel-1 ul,
-.toclimit-3 .toclevel-2 ul,
-.toclimit-4 .toclevel-3 ul,
-.toclimit-5 .toclevel-4 ul,
-.toclimit-6 .toclevel-5 ul,
-.toclimit-7 .toclevel-6 ul {
-    display: none;
-}
- 
-/* Styling for Template:Quote */
-blockquote.templatequote {
-     margin-top: 0;
-}
-blockquote.templatequote div.templatequotecite {
-    line-height: 1em;
-    /* @noflip */
-    text-align: left;
-    /* @noflip */
-    padding-left: 2em;
-    margin-top: 0;
-}
-blockquote.templatequote div.templatequotecite cite {
-    font-size: 85%;
-}
- 
-/* User block messages */
-div.user-block {
-    padding: 5px;
-    margin-bottom: 0.5em;
-    border: 1px solid #A9A9A9;
-    background-color: #FFEFD5;
-}
- 
-/* Prevent line breaks in silly places:
-   1) Where desired
-   2) Links when we don't want them to
-   3) Bold "links" to the page itself
-   4) Ref tags with group names <ref group="Note"> --> "[Note 1]" */
-.nowrap,
-.nowraplinks a,
-.nowraplinks .selflink,
-sup.reference a {
-    white-space: nowrap;
-}
-/* But allow wrapping where desired: */
-.wrap,
-.wraplinks a {
-    white-space: normal;
-}
- 
-/* For template documentation */
-.template-documentation {
-    clear: both;
-    margin: 1em 0 0 0;
-    border: 1px solid #aaa;
-    background-color: #ecfcf4;
-    padding: 1em;
-}
- 
-/* Inline divs in ImageMaps (code borrowed from de.wiki) */
-.imagemap-inline div {
-    display: inline;
-}
- 
-/* Increase the height of the image upload box */
-#wpUploadDescription {
-    height: 13em;
-}
- 
-/* Minimum thumb width */
-.thumbinner {
-    min-width: 100px;
-}
- 
-/* Makes the background of a framed image white instead of gray.
-   Only visible with transparent images. */
-div.thumb .thumbimage {
-    background-color: #fff;
-}
- 
-/* The backgrounds for galleries. */
-div#content .gallerybox div.thumb {
-    /* Light gray padding */
-    background-color: #F9F9F9;
-}
-/* Put a chequered background behind images, only visible if they have transparency.
-   '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
-.gallerybox .thumb img {
-    background: #fff url(//bits.wikimedia.org/skins/common/images/Checker-16x16.png) repeat;
-}
-/* But not on articles, user pages, portals or with opt-out. */
-.ns-0 .gallerybox .thumb img,
-.ns-2 .gallerybox .thumb img,
-.ns-100 .gallerybox .thumb img,
-.nochecker .gallerybox .thumb img {
-    background: #fff;
-}
- 
-/* Prevent floating boxes from overlapping any category listings,
-   file histories, edit previews, and edit [Show changes] views. */
-#mw-subcategories, #mw-pages, #mw-category-media,
-#filehistory, #wikiPreview, #wikiDiff {
-    clear: both;
-}
- 
-body.rtl #mw-articlefeedbackv5, body.rtl #mw-articlefeedback {
-    display: block;   /* Override inline block mode */
-    margin-bottom: 1em;
-    /* @noflip */
-    clear: right;     /* Clear any info boxes that stick out */
-    /* @noflip */
-    float: right;     /* Prevents margin collapsing */
-}
- 
-/* Selectively hide headers in WikiProject banners */
-.wpb .wpb-header             { display: none; }
-.wpbs-inner .wpb .wpb-header { display: block; }     /* for IE */
-.wpbs-inner .wpb .wpb-header { display: table-row; } /* for real browsers */
-.wpbs-inner .wpb-outside     { display: none; }      /* hide things that should only display outside shells */
- 
-/* Styling for Abuse Filter tags */
-.mw-tag-markers {
-    font-family:sans-serif;
-    font-style:italic;
-    font-size:90%;
-}
- 
-/* Hide stuff meant for accounts with special permissions. Made visible again in
-   [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-accountcreator.css]],
-   [[MediaWiki:Group-templateeditor.css]] and [[Mediawiki:Group-autoconfirmed.css]]. */
-.sysop-show,
-.accountcreator-show,
-.templateeditor-show,
-.autoconfirmed-show {
-    display: none;
-}
- 
-/**
- * Hide the redlink generated by {{Editnotice}},
- * this overrides the ".sysop-show { display: none; }" above that applies
- * to the same link as well.
- */
-.ve-init-mw-viewPageTarget-toolbar-editNotices-notice .editnotice-redlink {
-    display: none !important;
-}
- 
-/* Remove bullets when there are multiple edit page warnings */
-ul.permissions-errors > li {
-    list-style: none none;
-}
-ul.permissions-errors {
-    margin: 0;
-}
- 
-/* No linewrap on the labels of the login/signup page */
-body.page-Special_UserLogin .mw-label label,
-body.page-Special_UserLogin_signup .mw-label label {
-    white-space: nowrap;
-}
- 
-/* Pie chart test: Transparent borders */
-.transborder {
-    border: solid transparent;
-}
-* html .transborder {  /* IE6 */
-    border: solid #000001;
-    filter: chroma(color=#000001);
-}
- 
-/* Styling for updated markers on watchlist, history and recent/related changes.
-   Bullets are handled in skin-specific stylesheets. */
-.updatedmarker {
-    background-color: transparent;
-    color: #006400;
-}
-li.mw-changeslist-line-watched .mw-title,
-table.mw-changeslist-line-watched .mw-title,
-table.mw-enhanced-watch .mw-enhanced-rctime {
-    font-weight: normal;
-}
- 
-/* Adjust font for inline HTML generated formulae */
-span.texhtml {
-    font-family: "Times New Roman", "Nimbus Roman No9 L", Times, serif;
-    font-size: 118%;
-    white-space: nowrap;
-}
-span.texhtml span.texhtml {
-    font-size: 100%;
-}
- 
-/* Fix so <syntaxhighlight> tags and .css and .js pages get normal text size.
-   [[Bugzilla:26204]]. See also [[Wikipedia:Typography#The monospace 'bug']] */
-div.mw-geshi div,
-div.mw-geshi div pre,
-span.mw-geshi,
-pre.source-css,
-pre.source-javascript,
-pre.source-lua {
-    font-family: monospace, Courier !important;
-}
- 
-/* Fix styling of transcluded prefindex tables */
-table#mw-prefixindex-list-table,
-table#mw-prefixindex-nav-table {
-    width: 98%;
-}
- 
-/* For portals, added 2011-12-07 -bv
-   On wide screens, show these as two columns
-   On narrow and mobile screens, let them collapse into a single column */
-.portal-column-left {
-    float: left;
-    width: 50%;
-}
-.portal-column-right {
-    float: right;
-    width: 49%;
-}
-.portal-column-left-wide {
-    float: left;
-    width: 60%;
-}
-.portal-column-right-narrow {
-    float: right;
-    width: 39%;
-}
-.portal-column-left-extra-wide {
-    float: left;
-    width: 70%;
-}
-.portal-column-right-extra-narrow {
-    float: right;
-    width: 29%;
-}
-@media only screen and (max-width: 800px) {
-    /* Decouple the columns on narrow screens */
-    .portal-column-left,
-    .portal-column-right,
-    .portal-column-left-wide,
-    .portal-column-right-narrow,
-    .portal-column-left-extra-wide,
-    .portal-column-right-extra-narrow {
-        float: inherit;
-        width: inherit;
-    }
-}
- 
-/* For announcements */
-#bodyContent .letterhead {
-    background-image:url('//upload.wikimedia.org/wikipedia/commons/e/e0/Tan-page-corner.png');
-    background-repeat:no-repeat;
-    padding: 2em;
-    background-color: #faf9f2;
-}
- 
-/* Tree style lists */
-.treeview ul {
-    padding: 0;
-    margin: 0;
-}
-.treeview li {
-    padding: 0;
-    margin: 0;
-    list-style-type: none;
-    list-style-image: none;
-    zoom: 1; /* BE KIND TO IE6 */;
-}
-.treeview li li {
-    background: url("//upload.wikimedia.org/wikipedia/commons/f/f2/Treeview-grey-line.png") no-repeat 0 -2981px;
-    /* @noflip */
-    padding-left: 20px;
-    text-indent: 0.3em;
-}
-.treeview li li.lastline {
-    background-position: 0 -5971px
-}
-.treeview li.emptyline > ul {
-    /* @noflip */
-    margin-left: -1px;
-}
-.treeview li.emptyline > ul > li:first-child {
-    background-position: 0 9px
-}
- 
-/* hidden sortkey for tablesorter */
-td .sortkey,
-th .sortkey {
-    display: none;
-    speak: none;
-}
- 
-/* Make it possible to hide checkboxes in <inputbox> */
-.inputbox-hidecheckboxes form .inputbox-element {
-    display: none !important;
-}
- 
-/* Hide charinsert base for those not using the gadget */
-#editpage-specialchars {
-    display: none;
-}
- 
-/* work-around for [[bugzilla:23965]] (Kaltura advertisement) */
-.k-player .k-attribution {
-    visibility: hidden;
-}
- 
-/* [[MediaZilla:35337]] */
-@media (-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (min-resolution: 1.5dppx), (min-resolution: 144dpi) {
-        #p-logo a {
-                background-image: url("//upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Wikipedia-logo-v2-en.svg/204px-Wikipedia-logo-v2-en.svg.png") !important;
-                background-size: 136px auto;
-        }
-}
-@media (-webkit-min-device-pixel-ratio: 2), (min--moz-device-pixel-ratio: 2), (min-resolution: 2dppx), (min-resolution: 192dpi) {
-        #p-logo a {
-                background-image: url("//upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Wikipedia-logo-v2-en.svg/270px-Wikipedia-logo-v2-en.svg.png") !important;
-                background-size: 135px auto;
-        }
-}
-/* Do not print:
-   1: When in mainspace: Article message boxes,
-      navboxes, sister project boxes, disambig links,
-      and items marked as metadata.
-   2: section edit links.
-   3: navbar links.
-   4: Show/hide toggles for collapsible items.
-*/
-.ns-0 .ambox, 
-.ns-0 .navbox, 
-.ns-0 .vertical-navbox, 
-.ns-0 .infobox.sisterproject, 
-.ns-0 .dablink, 
-.ns-0 .metadata,
-.editlink,
-.navbar,
-a.NavToggle, span.collapseButton, span.mw-collapsible-toggle,
-th .sortkey, td .sortkey {
-    display: none !important;
-}
- 
-/* Add formatting to make sure that "external references" from templates
-   like [[Template:Ref]] do not get URL expansion, not even when printed.
-   The anchor itself has class "external autonumber" and the url expansion
-   is inserted when printing (see the common printing style sheet at
-   http://en.wikipedia.org/skins-1.5/common/commonPrint.css) using the
-   ":after" pseudo-element of CSS. Also hide in <cite> elements.
-*/
-#content cite a.external.text:after,
-.nourlexpansion a.external.text:after,
-.nourlexpansion a.external.autonumber:after {
-    display: none !important;
-}
- 
-/* Uncollapse collapsible tables/divs.
-   The proper way to do this for tables is to use display:table-row,
-   but this is not supported by all browsers, so use display:block as fallback.
-*/
-table.collapsible tr, div.NavPic, div.NavContent {
-    display: block !important;
-}
-table.collapsible tr {
-    display: table-row !important;
-}
- 
-/* On websites with siteSub visible, the margin on the firstHeading is not needed. */
-#firstHeading {
-    margin: 0px;
-}
- 
-/* We don't want very long URLs (that are added to the content in print) to widen the canvas */
-#content a.external.text:after,
-#content a.external.autonumber:after {
-	word-wrap: break-word;
-}
-/* Don't display some stuff on the main page */
-body.page-Main_Page #deleteconfirm,
-body.page-Main_Page #t-cite,
-body.page-Main_Page #footer-info-lastmod,
-body.action-view.page-Main_Page #siteSub,
-body.action-view.page-Main_Page #contentSub,
-body.action-view.page-Main_Page h1.firstHeading {
-    display: none !important;
-}
- 
-/* Position Main Page top banner */
-body.page-Main_Page #mp-topbanner {
-  margin-top: 0 !important;
-}
- 
-/* Position coordinates */
-#coordinates {
-    position: absolute;
-    top: 0em;
-    right: 0em;
-    float: right;
-    margin: 0em;
-    padding: 0em;
-    line-height: 1.5em;
-    text-align: right;
-    text-indent: 0;
-    font-size: 85%;
-    text-transform: none;
-    white-space: nowrap;
-}
- 
-/* For positioning icons at top-right, used in Templates
-   "Spoken Article" and "Featured Article" */
-div.topicon {
-    position: absolute;
-    top: -2em;
-    margin-right: -10px;
-    display: block !important;
-}
- 
-/* FR topicon position */
-div.flaggedrevs_short {
-    position: absolute;
-    top: -3em;
-    right: 80px;
-    z-index: 1;
-    margin-left: 0;
-    /* Because this is not yet a topicon, we emulate it's behavior,
-       this ensure compatibility with edit lead section gadget. */
-    margin-right: -10px;
-}
- 
-/* On rtl interfaces, we need to override the defaults.
-   It is content included (so ltr), but positioned in part of the rtl interface. */
-body.rtl #protected-icon {
-    /* @noflip */
-    left: 55px;
-}
-body.rtl #spoken-icon,
-body.rtl #commons-icon {
-    /* @noflip */
-    left: 30px;
-}
-body.rtl #featured-star {
-    /* @noflip */
-    left: 10px;
-}
- 
-/* Menu over FR box */
-div.vectorMenu div {
-    z-index: 2;
-}
- 
-/* Display "From Wikipedia, the free encyclopedia" */
-#siteSub {
-    display: inline;
-    font-size: 92%;
-}
- 
-/* Bullets for Good and Featured interwiki links */
-li.GA {
-    list-style-image: url(//upload.wikimedia.org/wikipedia/commons/4/42/Monobook-bullet-ga.png);
-}
-li.FA {
-    list-style-image: url(//upload.wikimedia.org/wikipedia/commons/d/d4/Monobook-bullet-star.png);
-}
- 
-/* Styling for updated markers on watchlist, history and recent/related changes */
-li.mw-changeslist-line-watched,
-li.mw-history-line-updated {
-    list-style-image: url(//upload.wikimedia.org/wikipedia/commons/c/c2/ChangedBulletVector.png);
-}
- 
-/* Blue instead of yellow padlock for secure links. */
-#bodyContent a.external[href ^="https://"],
-.link-https {
-    background: url(//upload.wikimedia.org/wikipedia/en/0/00/Lock_icon_blue.gif) center right no-repeat;
-    /* @noflip */
-    padding-right: 16px;
-}
- 
-/* (Soft) redirect styling (bug:26544) */
-div.redirectMsg img {
-    vertical-align: text-bottom;
-}
-.redirectText {
-    font-size: 150%;
-    margin: 5px;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/wikipedia.min.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/wikipedia.min.css
deleted file mode 100644
index eecfc91..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/wikipedia.min.css
+++ /dev/null
@@ -1 +0,0 @@
-html,body{height:100%;margin:0;padding:0;font-family:sans-serif;font-size:1em}body{background-color:#f3f3f3;background-image:url(images/page-base.png)}div#content{margin-left:10em;padding:1em;background-image:url(images/border.png);background-position:top left;background-repeat:repeat-y;background-color:white;color:black;direction:ltr}#mw-page-base{height:5em;background-color:white;background-image:url(images/page-fade.png);background-position:bottom left;background-repeat:repeat-x}#mw-head-base{margin-top:-5em;margin-left:10em;height:5em;background-image:url(images/border.png);background-position:bottom left;background-repeat:repeat-x}div#mw-head{position:absolute;top:0;right:0;width:100%}div#mw-head h5{margin:0;padding:0}div.emptyPortlet{display:none}#p-personal{position:absolute;top:0;right:.75em}#p-personal h5{display:none}#p-personal ul{list-style:none;margin:0;padding-left:10em}#p-personal li{line-height:1.125em;float:left}#p-personal li{margin-left:.75em;margin-top:.5em;font-size:.75em;white-space:nowrap}#left-navigation{position:absolute;left:10em;top:2.5em}#right-navigation{float:right;margin-top:2.5em}div.vectorTabs h5,div.vectorMenu h5 span{display:none}div.vectorTabs{float:left;height:2.5em}div.vectorTabs{background-image:url(images/tab-break.png);background-position:bottom left;background-repeat:no-repeat;padding-left:1px}div.vectorTabs ul{float:left}div.vectorTabs ul{height:100%;list-style:none;margin:0;padding:0}div.vectorTabs ul li{float:left}div.vectorTabs ul li{line-height:1.125em;display:inline-block;height:100%;margin:0;padding:0;background-color:#f3f3f3;background-image:url(images/tab-normal-fade.png);background-position:bottom left;background-repeat:repeat-x;white-space:nowrap}div.vectorTabs ul>li{display:block}div.vectorTabs li.selected{background-image:url(images/tab-current-fade.png)}div.vectorTabs li a{display:inline-block;height:1.9em;padding-left:.5em;padding-right:.5em;color:#0645ad;cursor:pointer;font-size:.8em}div.vectorTabs li>a{display:block}div.vectorTabs li.icon a{background-position:bottom right;background-repeat:no-repeat}div.vectorTabs span a{display:inline-block;padding-top:1.25em}div.vectorTabs span>a{float:left;display:block}div.vectorTabs span{display:inline-block;background-image:url(images/tab-break.png);background-position:bottom right;background-repeat:no-repeat}div.vectorTabs li.selected a,div.vectorTabs li.selected a:visited{color:#333;text-decoration:none}div.vectorTabs li.new a,div.vectorTabs li.new a:visited{color:#a55858}div.vectorMenu{direction:ltr;float:left;background-image:url(images/arrow-down-icon.png);background-position:100% 60%;background-repeat:no-repeat;cursor:pointer}div.vectorMenuFocus{background-image:url(images/arrow-down-focus-icon.png);background-position:100% 60%}body.rtl div.vectorMenu{direction:rtl}div#mw-head div.vectorMenu h5{float:left;background-image:url(images/tab-break.png);background-repeat:no-repeat}div#mw-head div.vectorMenu h5{background-position:bottom left;margin-left:-1px}div#mw-head div.vectorMenu>h5{background-image:none}div#mw-head div.vectorMenu h4{display:inline-block;float:left;font-size:.8em;padding-left:.5em;padding-top:1.375em;font-weight:normal;border:none}div.vectorMenu h5 a{display:inline-block;width:24px;height:2.5em;text-decoration:none;background-image:url(images/tab-break.png);background-repeat:no-repeat}div.vectorMenu h5 a{background-position:bottom right}div.vectorMenu h5>a{display:block}div.vectorMenu div.menu{position:relative;display:none;clear:both;text-align:left}body.rtl div.vectorMenu div.menu{margin-left:24px}body.rtl div.vectorMenu>div.menu{margin-left:auto}body.rtl div.vectorMenu>div.menu,x:-moz-any-link{margin-left:23px}div.vectorMenu:hover div.menu,div.vectorMenu div.menuForceShow{display:block}div.vectorMenu ul{position:absolute;background-color:white;border:solid 1px silver;border-top-width:0;list-style:none;list-style-image:none;list-style-type:none;padding:0;margin:0;margin-left:-1px;text-align:left}div.vectorMenu ul,x:-moz-any-link{min-width:5em}div.vectorMenu ul,x:-moz-any-link,x:default{min-width:0}div.vectorMenu li{padding:0;margin:0;text-align:left;line-height:1em}div.vectorMenu li a{display:inline-block;padding:.5em;white-space:nowrap;color:#0645ad;cursor:pointer;font-size:.8em}div.vectorMenu li>a{display:block}div.vectorMenu li.selected a,div.vectorMenu li.selected a:visited{color:#333;text-decoration:none}#p-search h5{display:none}#p-search{float:left}#p-search{margin-right:.5em;margin-left:.5em}#p-search form,#p-search input{margin:0;margin-top:.4em}div#simpleSearch{display:block;width:14em;height:1.4em;margin-top:.65em;position:relative;min-height:1px;border:solid 1px #AAA;color:black;background-color:white;background-image:url(images/search-fade.png);background-position:top left;background-repeat:repeat-x}div#simpleSearch label{font-size:13px;top:.25em;direction:ltr}div#simpleSearch input{color:black;direction:ltr}div#simpleSearch input:focus{outline:none}div#simpleSearch input.placeholder{color:#999}div#simpleSearch input::-webkit-input-placeholder{color:#999}div#simpleSearch input#searchInput{position:absolute;top:0;left:0;width:90%;margin:0;padding:0;padding-left:.2em;padding-top:.2em;padding-bottom:.2em;outline:none;border:none;font-size:13px;background-color:transparent;direction:ltr}div#simpleSearch button#searchButton{position:absolute;width:10%;right:0;top:0;padding:0;padding-top:.3em;padding-bottom:.2em;padding-right:.4em;margin:0;border:none;cursor:pointer;background-color:transparent;background-image:none}div#simpleSearch button#searchButton img{border:none;margin:0;margin-top:-3px;padding:0}div#simpleSearch button#searchButton>img{margin:0}div#mw-panel{position:absolute;top:160px;padding-top:1em;width:10em;left:0}div#mw-panel div.portal{padding-bottom:1.5em;direction:ltr}div#mw-panel div.portal h5{font-weight:normal;color:#444;padding:.25em;padding-top:0;padding-left:1.75em;cursor:default;border:none;font-size:.75em}div#mw-panel div.portal div.body{margin:0;padding-top:.5em;margin-left:1.25em;background-image:url(images/portal-break.png);background-repeat:no-repeat;background-position:top left}div#mw-panel div.portal div.body ul{list-style:none;list-style-image:none;list-style-type:none;padding:0;margin:0}div#mw-panel div.portal div.body ul li{line-height:1.125em;padding:0;padding-bottom:.5em;margin:0;overflow:hidden;font-size:.75em}div#mw-panel div.portal div.body ul li a{color:#0645ad}div#mw-panel div.portal div.body ul li a:visited{color:#0b0080}div#footer{margin-left:10em;margin-top:0;padding:.75em;background-image:url(images/border.png);background-position:top left;background-repeat:repeat-x;direction:ltr}div#footer ul{list-style:none;list-style-image:none;list-style-type:none;margin:0;padding:0}div#footer ul li{margin:0;padding:0;padding-top:.5em;padding-bottom:.5em;color:#333;font-size:.7em}div#footer #footer-icons{float:right}body.ltr div#footer #footer-places{float:left}div#footer #footer-info li{line-height:1.4em}div#footer #footer-icons li{float:left;margin-left:.5em;line-height:2em;text-align:right}div#footer #footer-places li{float:left;margin-right:1em;line-height:2em}#p-logo{position:absolute;top:-160px;left:0;width:10em;height:160px}#p-logo a{display:block;width:10em;height:160px;background-repeat:no-repeat;background-position:center center;text-decoration:none}#preftoc{width:100%;float:left;clear:both;margin:0!important;padding:0!important;background-image:url(images/preferences-break.png);background-position:bottom left;background-repeat:no-repeat}#preftoc li{float:left;margin:0;padding:0;padding-right:1px;height:2.25em;white-space:nowrap;list-style-type:none;list-style-image:none;background-image:url(images/preferences-break.png);background-position:bottom right;background-repeat:no-repeat}#preftoc li:first-child{margin-left:1px}#preftoc a,#preftoc a:active{display:inline-block;position:relative;color:#0645ad;padding:.5em;text-decoration:none;background-image:none;font-size:.9em}#preftoc a:hover,#preftoc a:focus{text-decoration:underline}#preftoc li.selected a{background-image:url(images/preferences-fade.png);background-position:bottom;background-repeat:repeat-x;color:#333;text-decoration:none}#preferences{float:left;width:100%;margin:0;margin-top:-2px;clear:both;border:solid 1px #ccc;background-color:#f9f9f9;background-image:url(images/preferences-base.png)}#preferences fieldset{border:none;border-top:solid 1px #ccc}#preferences fieldset.prefsection{border:none;padding:0;margin:1em}#preferences legend{color:#666}#preferences fieldset.prefsection legend.mainLegend{display:none}#preferences td{padding-left:.5em;padding-right:.5em}#preferences td.htmlform-tip{font-size:x-small;padding:.2em 2em;color:#666}#preferences div.mw-prefs-buttons{padding:1em}#preferences div.mw-prefs-buttons input{margin-right:.25em}div#content{line-height:1.5em}#bodyContent{font-size:.8em}.editsection{float:right}ul{list-style-image:url(images/bullet-icon.png)}pre{line-height:1.3em}#siteNotice{font-size:.8em}#firstHeading{padding-top:0;margin-top:0;padding-top:0;font-size:1.6em}div#content a.external,div#content a.external[href ^="gopher://"]{background:url(images/external-link-ltr-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href ^="https://"],.link-https{background:url(images/lock-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href ^="mailto:"],.link-mailto{background:url(images/mail-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href ^="news:"]{background:url(images/news-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href ^="ftp://"],.link-ftp{background:url(images/file-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href ^="irc://"],div#content a.external[href ^="ircs://"],.link-irc{background:url(images/talk-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href $=".ogg"],div#content a.external[href $=".OGG"],div#content a.external[href $=".mid"],div#content a.external[href $=".MID"],div#content a.external[href $=".midi"],div#content a.external[href $=".MIDI"],div#content a.external[href $=".mp3"],div#content a.external[href $=".MP3"],div#content a.external[href $=".wav"],div#content a.external[href $=".WAV"],div#content a.external[href $=".wma"],div#content a.external[href $=".WMA"],.link-audio{background:url(images/audio-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href $=".ogm"],div#content a.external[href $=".OGM"],div#content a.external[href $=".avi"],div#content a.external[href $=".AVI"],div#content a.external[href $=".mpeg"],div#content a.external[href $=".MPEG"],div#content a.external[href $=".mpg"],div#content a.external[href $=".MPG"],.link-video{background:url(images/video-icon.png) center right no-repeat;padding-right:13px}div#content a.external[href $=".pdf"],div#content a.external[href $=".PDF"],div#content a.external[href *=".pdf#"],div#content a.external[href *=".PDF#"],div#content a.external[href *=".pdf?"],div#content a.external[href *=".PDF?"],.link-document{background:url(images/document-icon.png) center right no-repeat;padding-right:13px}#pt-userpage,#pt-anonuserpage,#pt-login{background:url(images/user-icon.png) left top no-repeat;padding-left:15px!important;text-transform:none}.redirectText{font-size:140%}.redirectMsg img{vertical-align:text-bottom}#bodyContent{position:relative;width:100%}#mw-js-message{font-size:.8em}div#bodyContent{line-height:1.5em}#ca-unwatch.icon a,#ca-watch.icon a{margin:0;padding:0;outline:none;display:block;width:26px;padding-top:3.1em;margin-top:0;margin-top:-0.8em!ie;height:0;overflow:hidden;background-image:url(images/watch-icons.png)}#ca-unwatch.icon a{background-position:-43px 60%}#ca-watch.icon a{background-position:5px 60%}#ca-unwatch.icon a:hover,#ca-unwatch.icon a:focus{background-position:-67px 60%}#ca-watch.icon a:hover,#ca-watch.icon a:focus{background-position:-19px 60%}#ca-unwatch.icon a.loading,#ca-watch.icon a.loading{background-image:url(images/watch-icon-loading.gif);background-position:5px 60%}#ca-unwatch.icon a span,#ca-watch.icon a span{display:none}div.vectorTabs ul{background-image:url(images/tab-break.png);background-position:right bottom;background-repeat:no-repeat}.tipsy{font-size:.8em}.mw-content-ltr{direction:ltr}.mw-content-rtl{direction:rtl}.sitedir-ltr textarea,.sitedir-ltr input{direction:ltr}.sitedir-rtl textarea,.sitedir-rtl input{direction:rtl}input[type="submit"],input[type="button"],input[type="reset"],input[type="file"]{direction:ltr}textarea[dir="ltr"],input[dir="ltr"]{direction:ltr}textarea[dir="rtl"],input[dir="rtl"]{direction:rtl}abbr,acronym,.explain{border-bottom:1px dotted;cursor:help}.mw-plusminus-pos{color:#006400}.mw-plusminus-neg{color:#8b0000}.mw-plusminus-null{color:#aaa}.allpagesredirect,.redirect-in-category,.watchlistredir{font-style:italic}span.comment{font-style:italic}span.changedby{font-size:95%}.texvc{direction:ltr;unicode-bidi:embed}img.tex{vertical-align:middle}span.texhtml{font-family:serif}#wikiPreview.ontop{margin-bottom:1em}#editform,#toolbar,#wpTextbox1{clear:both}#toolbar img{cursor:pointer}div#mw-js-message{margin:1em 5%;padding:.5em 2.5%;border:solid 1px #ddd;background-color:#fcfcfc}.editsection{float:right;margin-left:5px}.mw-content-ltr .editsection,.mw-content-rtl .mw-content-ltr .editsection{float:right}.mw-content-rtl .editsection,.mw-content-ltr .mw-content-rtl .editsection{float:left}div.mw-filepage-resolutioninfo{font-size:smaller}h2#filehistory{clear:both}table.filehistory th,table.filehistory td{vertical-align:top}table.filehistory th{text-align:left}table.filehistory td.mw-imagepage-filesize,table.filehistory th.mw-imagepage-filesize{white-space:nowrap}table.filehistory td.filehistory-selected{font-weight:bold}.filehistory a img,#file img:hover{background:white url(images/Checker-16x16.png) repeat}li span.deleted,span.history-deleted{text-decoration:line-through;color:#888;font-style:italic}.not-patrolled{background-color:#ffa}.unpatrolled{font-weight:bold;color:red}div.patrollink{font-size:75%;text-align:right}td.mw-label{text-align:right}td.mw-input{text-align:left}td.mw-submit{text-align:left}td.mw-label{vertical-align:top}.prefsection td.mw-label{width:20%}.prefsection table{width:100%}td.mw-submit{white-space:nowrap}table.mw-htmlform-nolabel td.mw-label{width:1px}tr.mw-htmlform-vertical-label td.mw-label{text-align:left!important}.mw-htmlform-invalid-input td.mw-input input{border-color:red}.mw-htmlform-flatlist div.mw-htmlform-flatlist-item{display:inline;margin-right:1em;white-space:nowrap}input#wpSummary{width:80%}.thumbcaption{text-align:left}.magnify{float:right}#catlinks{text-align:left}.catlinks ul{display:inline;margin:0;padding:0;list-style:none;list-style-type:none;list-style-image:none;vertical-align:middle!ie}.catlinks li{display:inline-block;line-height:1.25em;border-left:1px solid #AAA;margin:.125em 0;padding:0 .5em;zoom:1;display:inline!ie}.catlinks li:first-child{padding-left:.25em;border-left:none}.mw-hidden-cats-hidden{display:none}.catlinks-allhidden{display:none}p.mw-ipb-conveniencelinks,p.mw-protect-editreasons,p.mw-filedelete-editreasons,p.mw-delete-editreasons,p.mw-revdel-editreasons{font-size:90%;text-align:right}.os-suggest{overflow:auto;overflow-x:hidden;position:absolute;top:0;left:0;width:0;background-color:white;border-style:solid;border-color:#AAA;border-width:1px;z-index:99;font-size:95%}table.os-suggest-results{font-size:95%;cursor:pointer;border:0;border-collapse:collapse;width:100%}.os-suggest-result,.os-suggest-result-hl{white-space:nowrap;background-color:white;color:black;padding:2px}.os-suggest-result-hl,.os-suggest-result-hl-webkit{background-color:#4C59A6;color:white}.os-suggest-toggle{position:relative;left:1ex;font-size:65%}.os-suggest-toggle-def{position:absolute;top:0;left:0;font-size:65%;visibility:hidden}.autocomment{color:gray}#pagehistory .history-user{margin-left:.4em;margin-right:.2em}#pagehistory span.minor{font-weight:bold}#pagehistory li{border:1px solid white}#pagehistory li.selected{background-color:#f9f9f9;border:1px dashed #aaa}.mw-history-revisiondelete-button,#mw-fileduplicatesearch-icon{float:right}.newpage,.minoredit,.botedit{font-weight:bold}#shared-image-dup,#shared-image-conflict{font-style:italic}div.mw-warning-with-logexcerpt{padding:3px;margin-bottom:3px;border:2px solid #2F6FAB;clear:both}div.mw-warning-with-logexcerpt ul li{font-size:90%}span.mw-revdelundel-link,strong.mw-revdelundel-link{font-size:90%}span.mw-revdelundel-hidden,input.mw-revdelundel-hidden{visibility:hidden}td.mw-revdel-checkbox,th.mw-revdel-checkbox{padding-right:10px;text-align:center}a.feedlink{background:url(images/feed-icon.png) center left no-repeat;padding-left:16px}.plainlinks a{background:none!important;padding:0!important}.rtl a.external.free,.rtl a.external.autonumber{direction:ltr;unicode-bidi:embed}table.wikitable{margin:1em 1em 1em 0;background-color:#f9f9f9;border:1px #aaa solid;border-collapse:collapse;color:black}table.wikitable>tr>th,table.wikitable>tr>td,table.wikitable>*>tr>th,table.wikitable>*>tr>td{border:1px #aaa solid;padding:.2em}table.wikitable>tr>th,table.wikitable>*>tr>th{background-color:#f2f2f2;text-align:center}table.wikitable>caption{font-weight:bold}table.collapsed tr.collapsable{display:none}.success{color:green;font-size:larger}.warning{color:#FFA500;font-size:larger}.error{color:red;font-size:larger}.errorbox,.warningbox,.successbox{font-size:larger;border:2px solid;padding:.5em 1em;float:left;margin-bottom:2em;color:#000}.errorbox{border-color:red;background-color:#fff2f2}.warningbox{border-color:#FF8C00;background-color:#FFFFC0}.successbox{border-color:green;background-color:#dfd}.errorbox h2,.warningbox h2,.successbox h2{font-size:1em;font-weight:bold;display:inline;margin:0 .5em 0 0;border:none}.mw-infobox{border:2px solid #ff7f00;margin:.5em;clear:left;overflow:hidden}.mw-infobox-left{margin:7px;float:left;width:35px}.mw-infobox-right{margin:.5em .5em .5em 49px}.previewnote{color:#c00;margin-bottom:1em}.previewnote p{text-indent:3em;margin:.8em 0}.visualClear{clear:both}#mw_trackbacks{border:solid 1px #bbf;background-color:#eef;padding:.2em}.mw-datatable{border-collapse:collapse}.mw-datatable,.mw-datatable td,.mw-datatable th{border:1px solid #aaa;padding:0 .15em 0 .15em}.mw-datatable th{background-color:#ddf}.mw-datatable td{background-color:#fff}.mw-datatable tr:hover td{background-color:#eef}.TablePager{min-width:80%}.TablePager_nav{margin:0 auto}.TablePager_nav td{padding:3px;text-align:center}.TablePager_nav a{text-decoration:none}.imagelist td,.imagelist th{white-space:nowrap}.imagelist .TablePager_col_links{background-color:#eef}.imagelist .TablePager_col_img_description{white-space:normal}.imagelist th.TablePager_sort{background-color:#ccf}ul#filetoc{text-align:center;border:1px solid #aaa;background-color:#f9f9f9;padding:5px;font-size:95%;margin-bottom:.5em;margin-left:0;margin-right:0}#filetoc li{display:inline;list-style-type:none;padding-right:2em}table.mw_metadata{font-size:.8em;margin-left:.5em;margin-bottom:.5em;width:400px}table.mw_metadata caption{font-weight:bold}table.mw_metadata th{font-weight:normal}table.mw_metadata td{padding:.1em}table.mw_metadata{border:none;border-collapse:collapse}table.mw_metadata td,table.mw_metadata th{text-align:center;border:1px solid #aaa;padding-left:5px;padding-right:5px}table.mw_metadata th{background-color:#f9f9f9}table.mw_metadata td{background-color:#fcfcfc}table.mw_metadata ul.metadata-langlist{list-style-type:none;list-style-image:none;padding-right:5px;padding-left:5px;margin:0}.mw-content-ltr ul,.mw-content-rtl .mw-content-ltr ul{margin:.3em 0 0 1.6em;padding:0}.mw-content-rtl ul,.mw-content-ltr .mw-content-rtl ul{margin:.3em 1.6em 0 0;padding:0}.mw-content-ltr ol,.mw-content-rtl .mw-content-ltr ol{margin:.3em 0 0 3.2em;padding:0}.mw-content-rtl ol,.mw-content-ltr .mw-content-rtl ol{margin:.3em 3.2em 0 0;padding:0}.mw-content-ltr dd,.mw-content-rtl .mw-content-ltr dd{margin-left:1.6em;margin-right:0}.mw-content-rtl dd,.mw-content-ltr .mw-content-rtl dd{margin-right:1.6em;margin-left:0}li.gallerybox{vertical-align:top;border:solid 2px white;display:-moz-inline-box;display:inline-block}ul.gallery,li.gallerybox{zoom:1;*display:inline}ul.gallery{margin:2px;padding:2px;display:block}li.gallerycaption{font-weight:bold;text-align:center;display:block;word-wrap:break-word}li.gallerybox div.thumb{text-align:center;border:1px solid #ccc;background-color:#f9f9f9;margin:2px}li.gallerybox div.thumb img{display:block;margin:0 auto}div.gallerytext{overflow:hidden;font-size:94%;padding:2px 4px;word-wrap:break-word}.mw-ajax-loader{background-image:url(images/ajax-loader.gif);background-position:center center;background-repeat:no-repeat;padding:16px;position:relative;top:-16px}.mw-small-spinner{padding:10px!important;margin-right:.6em;background-image:url(images/spinner.gif);background-position:center center;background-repeat:no-repeat}h1:lang(as),h1:lang(bh),h1:lang(bho),h1:lang(bn),h1:lang(gu),h1:lang(hi),h1:lang(kn),h1:lang(ml),h1:lang(mr),h1:lang(or),h1:lang(pa),h1:lang(sa),h1:lang(ta),h1:lang(te){line-height:1.5em!important}h2:lang(as),h3:lang(as),h4:lang(as),h5:lang(as),h6:lang(as),h2:lang(bho),h3:lang(bho),h4:lang(bho),h5:lang(bho),h6:lang(bho),h2:lang(bh),h3:lang(bh),h4:lang(bh),h5:lang(bh),h6:lang(bh),h2:lang(bn),h3:lang(bn),h4:lang(bn),h5:lang(bn),h6:lang(bn),h2:lang(gu),h3:lang(gu),h4:lang(gu),h5:lang(gu),h6:lang(gu),h2:lang(hi),h3:lang(hi),h4:lang(hi),h5:lang(hi),h6:lang(hi),h2:lang(kn),h3:lang(kn),h4:lang(kn),h5:lang(kn),h6:lang(kn),h2:lang(ml),h3:lang(ml),h4:lang(ml),h5:lang(ml),h6:lang(ml),h2:lang(mr),h3:lang(mr),h4:lang(mr),h5:lang(mr),h6:lang(mr),h2:lang(or),h3:lang(or),h4:lang(or),h5:lang(or),h6:lang(or),h2:lang(pa),h3:lang(pa),h4:lang(pa),h5:lang(pa),h6:lang(pa),h2:lang(sa),h3:lang(sa),h4:lang(sa),h5:lang(sa),h6:lang(sa),h2:lang(ta),h3:lang(ta),h4:lang(ta),h5:lang(ta),h6:lang(ta),h2:lang(te),h3:lang(te),h4:lang(te),h5:lang(te),h6:lang(te){line-height:1.2em}ol:lang(bcc) li,ol:lang(bqi) li,ol:lang(fa) li,ol:lang(glk) li,ol:lang(kk-arab) li,ol:lang(mzn) li{list-style-type:-moz-persian;list-style-type:persian}ol:lang(ckb) li{list-style-type:-moz-arabic-indic;list-style-type:arabic-indic}ol:lang(hi) li,ol:lang(mr) li{list-style-type:-moz-devanagari;list-style-type:devanagari}ol:lang(as) li,ol:lang(bn) li{list-style-type:-moz-bengali;list-style-type:bengali}ol:lang(or) li{list-style-type:-moz-oriya;list-style-type:oriya}#toc ul,.toc ul{margin:.3em 0}.mw-content-ltr .toc ul,.mw-content-ltr #toc ul,.mw-content-rtl .mw-content-ltr .toc ul,.mw-content-rtl .mw-content-ltr #toc ul{text-align:left}.mw-content-rtl .toc ul,.mw-content-rtl #toc ul,.mw-content-ltr .mw-content-rtl .toc ul,.mw-content-ltr .mw-content-rtl #toc ul{text-align:right}.mw-content-ltr .toc ul ul,.mw-content-ltr #toc ul ul,.mw-content-rtl .mw-content-ltr .toc ul ul,.mw-content-rtl .mw-content-ltr #toc ul ul{margin:0 0 0 2em}.mw-content-rtl .toc ul ul,.mw-content-rtl #toc ul ul,.mw-content-ltr .mw-content-rtl .toc ul ul,.mw-content-ltr .mw-content-rtl #toc ul ul{margin:0 2em 0 0}#toc #toctitle,.toc #toctitle,#toc .toctitle,.toc .toctitle{direction:ltr}.mw-help-field-hint{display:none;margin-left:2px;margin-bottom:-8px;padding:0 0 0 15px;background-image:url('images/help-question.gif');background-position:left center;background-repeat:no-repeat;cursor:pointer;font-size:.8em;text-decoration:underline;color:#0645ad}.mw-help-field-hint:hover{background-image:url('images/help-question-hover.gif')}.mw-help-field-data{display:block;background-color:#d6f3ff;padding:5px 8px 4px 8px;border:1px solid #5dc9f4;margin-left:20px}.tipsy{padding:5px 5px 10px;font-size:12px;position:absolute;z-index:100000;overflow:visible}.tipsy-inner{padding:5px 8px 4px 8px;background-color:#d6f3ff;color:black;border:1px solid #5dc9f4;max-width:300px;text-align:left}.tipsy-arrow{position:absolute;background:url(images/tipsy-arrow.gif) no-repeat top left;width:13px;height:13px}.tipsy-se .tipsy-arrow{bottom:-2px;right:10px;background-position:0 100%}#mw-clearyourcache,#mw-sitecsspreview,#mw-sitejspreview,#mw-usercsspreview,#mw-userjspreview{direction:ltr;unicode-bidi:embed}.diff-currentversion-title,.diff{direction:ltr;unicode-bidi:embed}.diff-contentalign-right td{direction:rtl;unicode-bidi:embed}.diff-contentalign-left td{direction:ltr;unicode-bidi:embed}.diff-otitle,.diff-ntitle,.diff-lineno{direction:ltr!important;unicode-bidi:embed}#mw-revision-info,#mw-revision-info-current,#mw-revision-nav{direction:ltr;display:inline}div.tright,div.floatright,table.floatright{clear:right;float:right}div.tleft,div.floatleft,table.floatleft{float:left;clear:left}div.floatright,table.floatright,div.floatleft,table.floatleft{position:relative}#mw-credits a{unicode-bidi:embed}.mw-jump,#jump-to-nav{overflow:hidden;height:0;zoom:1}.printfooter{display:none}.xdebug-error{position:absolute;z-index:99}.editsection,.toctoggle{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}a.stub,a.new{color:#ba0000;text-decoration:none}#toc{border:1px solid #aaa;background-color:#f9f9f9;padding:5px}div.floatright{float:right;clear:right;position:relative;margin:.5em 0 .8em 1.4em}div.floatright p{font-style:italic}div.floatleft{float:left;clear:left;position:relative;margin:.5em 1.4em .8em 0}div.floatleft p{font-style:italic}div.center{text-align:center}div.thumb{border:none;width:auto;margin-top:.5em;margin-bottom:.8em;background-color:transparent}div.thumbinner{border:1px solid #ccc;padding:3px!important;background-color:White;font-size:94%;text-align:center;overflow:hidden}html .thumbimage{border:1px solid #ccc}html .thumbcaption{border:none;text-align:left;line-height:1.4em;padding:3px!important;font-size:94%}div.magnify{display:none}div.tright{float:right;clear:right;margin:.5em 0 .8em 1.4em}div.tleft{float:left;clear:left;margin:.5em 1.4em .8em 0}img.thumbborder{border:1px solid #ddd}table.rimage{float:right;width:1pt;position:relative;margin-left:1em;margin-bottom:1em;text-align:center}body{background:white;color:black;margin:0;padding:0}.noprint,div#jump-to-nav,.mw-jump,div.top,div#column-one,#colophon,.editsection,.toctoggle,.tochidden,div#f-poweredbyico,div#f-copyrightico,li#viewcount,li#about,li#disclaimer,li#mobileview,li#privacy,#footer-places,.mw-hidden-catlinks,tr.mw-metadata-show-hide-extended,span.mw-filepage-other-resolutions,#filetoc{display:none}ul{list-style-type:square}#content{background:none;border:none!important;padding:0!important;margin:0!important;direction:ltr}#footer{background:white;color:black;margin-top:1em;border-top:1px solid #AAA;direction:ltr}h1,h2,h3,h4,h5,h6{font-weight:bold}p{margin:1em 0;line-height:1.2em}pre{border:1pt dashed black;white-space:pre;font-size:8pt;overflow:auto;padding:1em 0;background:white;color:black}table.listing,table.listing td{border:1pt solid black;border-collapse:collapse}a{color:black!important;background:none!important;padding:0!important}a:link,a:visited{color:#520;background:transparent;text-decoration:underline}#content a.external.text:after,#content a.external.autonumber:after{content:"(" attr(href) ") "}#globalWrapper{width:100%!important;min-width:0!important}#content{background:white;color:black}#column-content{margin:0!important}#column-content #content{padding:1em;margin:0!important}a,a.external,a.new,a.stub{color:black!important;text-decoration:none!important}a,a.external,a.new,a.stub{color:inherit!important;text-decoration:inherit!important}img{border:none;vertical-align:middle}span.texhtml{font-family:serif}#siteNotice{display:none}li.gallerybox{vertical-align:top;border:solid 2px white;display:-moz-inline-box;display:inline-block}ul.gallery,li.gallerybox{zoom:1;*display:inline}ul.gallery{margin:2px;padding:2px;display:block}li.gallerycaption{font-weight:bold;text-align:center;display:block;word-wrap:break-word}li.gallerybox div.thumb{text-align:center;border:1px solid #ccc;margin:2px}div.gallerytext{overflow:hidden;font-size:94%;padding:2px 4px;word-wrap:break-word}table.diff{background:white}td.diff-otitle{background:#fff}td.diff-ntitle{background:#fff}td.diff-addedline{background:#cfc;font-size:smaller;border:solid 2px black}td.diff-deletedline{background:#ffa;font-size:smaller;border:dotted 2px black}td.diff-context{background:#eee;font-size:smaller}.diffchange{color:silver;font-weight:bold;text-decoration:underline}table.wikitable,table.mw_metadata{margin:1em 1em 1em 0;border:1px #aaa solid;background:white;border-collapse:collapse}table.wikitable>tr>th,table.wikitable>tr>td,table.wikitable>*>tr>th,table.wikitable>*>tr>td,.mw_metadata th,.mw_metadata td{border:1px #aaa solid;padding:.2em}table.wikitable>tr>th,table.wikitable>*>tr>th,.mw_metadata th{text-align:center;background:white;font-weight:bold}table.wikitable>caption,.mw_metadata caption{font-weight:bold}a.sortheader{margin:0 .3em}.wikitable,.thumb,img{page-break-inside:avoid}h2,h3,h4,h5,h6,h7{page-break-after:avoid}p{widows:3;orphans:3}.catlinks ul{display:inline;margin:0;padding:0;list-style:none;list-style-type:none;list-style-image:none;vertical-align:middle!ie}.catlinks li{display:inline-block;line-height:1.15em;padding:0 .4em;border-left:1px solid #AAA;margin:.1em 0;zoom:1;display:inline!ie}.catlinks li:first-child{padding-left:.2em;border-left:none}dfn{font-style:inherit}sup,sub{line-height:1em}#interwiki-completelist{font-weight:bold}body.page-Main_Page #ca-delete{display:none!important}body.page-Main_Page #mp-topbanner{clear:both}#toolbar{height:22px;margin-bottom:6px}body.action-info :target{background:#DEF}ol.references,div.reflist,div.refbegin{font-size:90%;margin-bottom:.5em}div.refbegin-100{font-size:100%}div.reflist ol.references{font-size:100%;list-style-type:inherit}div.columns{margin-top:.3em}div.columns dl,div.columns ol,div.columns ul{margin-top:0}div.columns li,div.columns dd dd{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column}ol.references li:target,sup.reference:target,span.citation:target{background-color:#DEF}sup.reference{font-weight:normal;font-style:normal}span.brokenref{display:none}.citation{word-wrap:break-word}@media screen,handheld{.citation *.printonly{display:none}}.flowlist ul{overflow-x:hidden;margin-left:0;padding-left:1.6em}.flowlist ol{overflow-x:hidden;margin-left:0;padding-left:3.2em}.flowlist dl{overflow-x:hidden}.hlist dl,.hlist ol,.hlist ul{margin:0;padding:0}.hlist dd,.hlist dt,.hlist li{margin:0;display:inline}.hlist dl dl,.hlist dl ol,.hlist dl ul,.hlist ol dl,.hlist ol ol,.hlist ol ul,.hlist ul dl,.hlist ul ol,.hlist ul ul{display:inline}.hlist dt:after{content:":"}.hlist dd:after,.hlist li:after{content:" · ";font-weight:bold}.hlist dd:last-child:after,.hlist dt:last-child:after,.hlist li:last-child:after{content:none}.hlist dd.hlist-last-child:after,.hlist dt.hlist-last-child:after,.hlist li.hlist-last-child:after{content:none}.hlist dd dd:first-child:before,.hlist dd dt:first-child:before,.hlist dd li:first-child:before,.hlist dt dd:first-child:before,.hlist dt dt:first-child:before,.hlist dt li:first-child:before,.hlist li dd:first-child:before,.hlist li dt:first-child:before,.hlist li li:first-child:before{content:"(";font-weight:normal}.hlist dd dd:last-child:after,.hlist dd dt:last-child:after,.hlist dd li:last-child:after,.hlist dt dd:last-child:after,.hlist dt dt:last-child:after,.hlist dt li:last-child:after,.hlist li dd:last-child:after,.hlist li dt:last-child:after,.hlist li li:last-child:after{content:") ";font-weight:normal}.hlist dd dd.hlist-last-child:after,.hlist dd dt.hlist-last-child:after,.hlist dd li.hlist-last-child:after,.hlist dt dd.hlist-last-child:after,.hlist dt dt.hlist-last-child:after,.hlist dt li.hlist-last-child:after,.hlist li dd.hlist-last-child:after,.hlist li dt.hlist-last-child:after,.hlist li li.hlist-last-child:after{content:") ";font-weight:normal}.hlist ol{counter-reset:listitem}.hlist ol>li{counter-increment:listitem}.hlist ol>li:before{content:" " counter(listitem) " "}.hlist dd ol>li:first-child:before,.hlist dt ol>li:first-child:before,.hlist li ol>li:first-child:before{content:"(" counter(listitem) " "}.plainlist ul{line-height:inherit;list-style:none none;margin:0}.plainlist ul li{margin-bottom:0}.navbox{border:1px solid #aaa;width:100%;margin:auto;clear:both;font-size:88%;text-align:center;padding:1px}.navbox-inner,.navbox-subgroup{width:100%}.navbox-group,.navbox-title,.navbox-abovebelow{padding:.25em 1em;line-height:1.5em;text-align:center}th.navbox-group{white-space:nowrap;text-align:right}.navbox,.navbox-subgroup{background:#fdfdfd}.navbox-list{line-height:1.8em;border-color:#fdfdfd}.navbox th,.navbox-title{background:#ccf}.navbox-abovebelow,th.navbox-group,.navbox-subgroup .navbox-title{background:#ddf}.navbox-subgroup .navbox-group,.navbox-subgroup .navbox-abovebelow{background:#e6e6ff}.navbox-even{background:#f7f7f7}.navbox-odd{background:transparent}table.navbox+table.navbox{margin-top:-1px}.navbox .hlist td dl,.navbox .hlist td ol,.navbox .hlist td ul,.navbox td.hlist dl,.navbox td.hlist ol,.navbox td.hlist ul{padding:.125em 0}ol+table.navbox,ul+table.navbox{margin-top:.5em}.navbar{display:inline;font-size:88%;font-weight:normal}.navbar ul{display:inline;white-space:nowrap}.navbar li{word-spacing:-0.125em}.navbar.mini li span{font-variant:small-caps}.infobox .navbar{font-size:100%}.navbox .navbar{display:block;font-size:100%}.navbox-title .navbar{float:left;text-align:left;margin-right:.5em;width:6em}.collapseButton{float:right;font-weight:normal;margin-left:.5em;text-align:right;width:auto}.navbox .collapseButton{width:6em}.mw-collapsible-toggle{font-weight:normal;text-align:right}.navbox .mw-collapsible-toggle{width:6em}.infobox{border:1px solid #aaa;background-color:#f9f9f9;color:black;margin:.5em 0 .5em 1em;padding:.2em;float:right;clear:right;text-align:left;font-size:88%;line-height:1.5em}.infobox caption{font-size:125%;font-weight:bold}.infobox td,.infobox th{vertical-align:top}.infobox.bordered{border-collapse:collapse}.infobox.bordered td,.infobox.bordered th{border:1px solid #aaa}.infobox.bordered .borderless td,.infobox.bordered .borderless th{border:0}.infobox.sisterproject{width:20em;font-size:90%}.infobox.standard-talk{border:1px solid #c0c090;background-color:#f8eaba}.infobox.standard-talk.bordered td,.infobox.standard-talk.bordered th{border:1px solid #c0c090}.infobox.bordered .mergedtoprow td,.infobox.bordered .mergedtoprow th{border:0;border-top:1px solid #aaa;border-right:1px solid #aaa}.infobox.bordered .mergedrow td,.infobox.bordered .mergedrow th{border:0;border-right:1px solid #aaa}.infobox.geography{border-collapse:collapse;line-height:1.2em;font-size:90%}.infobox.geography td,.infobox.geography th{border-top:1px solid #aaa;padding:.4em .6em .4em .6em}.infobox.geography .mergedtoprow td,.infobox.geography .mergedtoprow th{border-top:1px solid #aaa;padding:.4em .6em .2em .6em}.infobox.geography .mergedrow td,.infobox.geography .mergedrow th{border:0;padding:0 .6em .2em .6em}.infobox.geography .mergedbottomrow td,.infobox.geography .mergedbottomrow th{border-top:0;border-bottom:1px solid #aaa;padding:0 .6em .4em .6em}.infobox.geography .maptable td,.infobox.geography .maptable th{border:0;padding:0}.wikitable.plainrowheaders th[scope=row]{font-weight:normal;text-align:left}.wikitable td ul,.wikitable td ol,.wikitable td dl{text-align:left}.wikitable.hlist td ul,.wikitable.hlist td ol,.wikitable.hlist td dl{text-align:inherit}div.listenlist{background:url("//upload.wikimedia.org/wikipedia/commons/4/47/Sound-icon.svg") no-repeat scroll 0 0 transparent;background-size:30px;padding-left:40px}table.mw-hiero-table td{vertical-align:middle}div.medialist{min-height:50px;margin:1em;background-position:top left;background-repeat:no-repeat}div.medialist ul{list-style-type:none;list-style-image:none;margin:0}div.medialist ul li{padding-bottom:.5em}div.medialist ul li li{font-size:91%;padding-bottom:0}div#content a[href$=".pdf"].external,div#content a[href*=".pdf?"].external,div#content a[href*=".pdf#"].external,div#content a[href$=".PDF"].external,div#content a[href*=".PDF?"].external,div#content a[href*=".PDF#"].external,div#mw_content a[href$=".pdf"].external,div#mw_content a[href*=".pdf?"].external,div#mw_content a[href*=".pdf#"].external,div#mw_content a[href$=".PDF"].external,div#mw_content a[href*=".PDF?"].external,div#mw_content a[href*=".PDF#"].external{background:url("//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif") no-repeat right;padding-right:18px}div#content span.PDFlink a,div#mw_content span.PDFlink a{background:url("//upload.wikimedia.org/wikipedia/commons/2/23/Icons-mini-file_acrobat.gif") no-repeat right;padding-right:18px}div.columns-2 div.column{float:left;width:50%;min-width:300px}div.columns-3 div.column{float:left;width:33.3%;min-width:200px}div.columns-4 div.column{float:left;width:25%;min-width:150px}div.columns-5 div.column{float:left;width:20%;min-width:120px}.messagebox{border:1px solid #aaa;background-color:#f9f9f9;width:80%;margin:0 auto 1em auto;padding:.2em}.messagebox.merge{border:1px solid #c0b8cc;background-color:#f0e5ff;text-align:center}.messagebox.cleanup{border:1px solid #9f9fff;background-color:#efefff;text-align:center}.messagebox.standard-talk{border:1px solid #c0c090;background-color:#f8eaba;margin:4px auto}.mbox-inside .standard-talk,.messagebox.nested-talk{border:1px solid #c0c090;background-color:#f8eaba;width:100%;margin:2px 0;padding:2px}.messagebox.small{width:238px;font-size:85%;float:right;clear:both;margin:0 0 1em 1em;line-height:1.25em}.messagebox.small-talk{width:238px;font-size:85%;float:right;clear:both;margin:0 0 1em 1em;line-height:1.25em;background:#F8EABA}th.mbox-text,td.mbox-text{border:none;padding:.25em .9em;width:100%}td.mbox-image{border:none;padding:2px 0 2px .9em;text-align:center}td.mbox-imageright{border:none;padding:2px .9em 2px 0;text-align:center}td.mbox-empty-cell{border:none;padding:0;width:1px}table.ambox{margin:0 10%;border:1px solid #aaa;border-left:10px solid #1e90ff;background:#fbfbfb}table.ambox+table.ambox{margin-top:-1px}.ambox th.mbox-text,.ambox td.mbox-text{padding:.25em .5em}.ambox td.mbox-image{padding:2px 0 2px .5em}.ambox td.mbox-imageright{padding:2px .5em 2px 0}table.ambox-notice{border-left:10px solid #1e90ff}table.ambox-speedy{border-left:10px solid #b22222;background:#fee}table.ambox-delete{border-left:10px solid #b22222}table.ambox-content{border-left:10px solid #f28500}table.ambox-style{border-left:10px solid #f4c430}table.ambox-move{border-left:10px solid #9932cc}table.ambox-protection{border-left:10px solid #bba}table.imbox{margin:4px 10%;border-collapse:collapse;border:3px solid #1e90ff;background:#fbfbfb}.imbox .mbox-text .imbox{margin:0 -0.5em;display:block}.mbox-inside .imbox{margin:4px}table.imbox-notice{border:3px solid #1e90ff}table.imbox-speedy{border:3px solid #b22222;background:#fee}table.imbox-delete{border:3px solid #b22222}table.imbox-content{border:3px solid #f28500}table.imbox-style{border:3px solid #f4c430}table.imbox-move{border:3px solid #9932cc}table.imbox-protection{border:3px solid #bba}table.imbox-license{border:3px solid #88a;background:#f7f8ff}table.imbox-featured{border:3px solid #cba135}table.cmbox{margin:3px 10%;border-collapse:collapse;border:1px solid #aaa;background:#DFE8FF}table.cmbox-notice{background:#D8E8FF}table.cmbox-speedy{margin-top:4px;margin-bottom:4px;border:4px solid #b22222;background:#FFDBDB}table.cmbox-delete{background:#FFDBDB}table.cmbox-content{background:#FFE7CE}table.cmbox-style{background:#FFF9DB}table.cmbox-move{background:#E4D8FF}table.cmbox-protection{background:#EFEFE1}table.ombox{margin:4px 10%;border-collapse:collapse;border:1px solid #aaa;background:#f9f9f9}table.ombox-notice{border:1px solid #aaa}table.ombox-speedy{border:2px solid #b22222;background:#fee}table.ombox-delete{border:2px solid #b22222}table.ombox-content{border:1px solid #f28500}table.ombox-style{border:1px solid #f4c430}table.ombox-move{border:1px solid #9932cc}table.ombox-protection{border:2px solid #bba}table.tmbox{margin:4px 10%;border-collapse:collapse;border:1px solid #c0c090;background:#f8eaba}.mediawiki .mbox-inside .tmbox{margin:2px 0;width:100%}.mbox-inside .tmbox.mbox-small{line-height:1.5em;font-size:100%}table.tmbox-speedy{border:2px solid #b22222;background:#fee}table.tmbox-delete{border:2px solid #b22222}table.tmbox-content{border:2px solid #f28500}table.tmbox-style{border:2px solid #f4c430}table.tmbox-move{border:2px solid #9932cc}table.tmbox-protection,table.tmbox-notice{border:1px solid #c0c090}table.dmbox{clear:both;margin:.9em 1em;border-top:1px solid #ccc;border-bottom:1px solid #ccc;background:transparent}table.fmbox{clear:both;margin:.2em 0;width:100%;border:1px solid #aaa;background:#f9f9f9}table.fmbox-system{background:#f9f9f9}table.fmbox-warning{border:1px solid #bb7070;background:#ffdbdb}table.fmbox-editnotice{background:transparent}div.mw-warning-with-logexcerpt,div.mw-lag-warn-high,div.mw-cascadeprotectedwarning,div#mw-protect-cascadeon{clear:both;margin:.2em 0;border:1px solid #bb7070;background:#ffdbdb;padding:.25em .9em}div.mw-lag-warn-normal,div.fmbox-system{clear:both;margin:.2em 0;border:1px solid #aaa;background:#f9f9f9;padding:.25em .9em}body.mediawiki table.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;width:238px;font-size:88%;line-height:1.25em}body.mediawiki table.mbox-small-left{margin:4px 1em 4px 0;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.compact-ambox table .mbox-image,.compact-ambox table .mbox-imageright,.compact-ambox table .mbox-empty-cell{display:none}.compact-ambox table.ambox{border:none;border-collapse:collapse;background:transparent;margin:0 0 0 1.6em!important;padding:0!important;width:auto;display:block}body.mediawiki .compact-ambox table.mbox-small-left{font-size:100%;width:auto;margin:0}.compact-ambox table .mbox-text{padding:0!important;margin:0!important}.compact-ambox table .mbox-text-span{display:list-item;line-height:1.5em;list-style-type:square;list-style-image:url(//bits.wikimedia.org/skins/common/images/bullet.gif)}.skin-vector .compact-ambox table .mbox-text-span{list-style-type:circle;list-style-image:url(//bits.wikimedia.org/skins/vector/images/bullet-icon.png)}.compact-ambox .hide-when-compact{display:none}div.noarticletext{border:none;background:transparent;padding:0}.visualhide{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}#wpSave{font-weight:bold}.hiddenStructure{display:inline!important;color:#f00;background-color:#0f0}.check-icon a.new{display:none;speak:none}.nounderlines a,.IPA a:link,.IPA a:visited{text-decoration:none!important}div.NavFrame{margin:0;padding:4px;border:1px solid #aaa;text-align:center;border-collapse:collapse;font-size:95%}div.NavFrame+div.NavFrame{border-top-style:none;border-top-style:hidden}div.NavPic{background-color:#fff;margin:0;padding:2px;float:left}div.NavFrame div.NavHead{height:1.6em;font-weight:bold;background-color:#ccf;position:relative}div.NavFrame p,div.NavFrame div.NavContent,div.NavFrame div.NavContent p{font-size:100%}div.NavEnd{margin:0;padding:0;line-height:1px;clear:both}a.NavToggle{position:absolute;top:0;right:3px;font-weight:normal;font-size:90%}.rellink,.dablink{font-style:italic;padding-left:1.6em;margin-bottom:.5em}.rellink i,.dablink i{font-style:normal}.listify td{display:list-item}.listify tr{display:block}.listify table{display:block}.geo-default,.geo-dms,.geo-dec{display:inline}.geo-nondefault,.geo-multi-punct{display:none}.longitude,.latitude{white-space:nowrap}.nonumtoc .tocnumber{display:none}.nonumtoc #toc ul,.nonumtoc .toc ul{line-height:1.5em;list-style:none none;margin:.3em 0 0;padding:0}.nonumtoc #toc ul ul,.nonumtoc .toc ul ul{margin:0 0 0 2em}.toclimit-2 .toclevel-1 ul,.toclimit-3 .toclevel-2 ul,.toclimit-4 .toclevel-3 ul,.toclimit-5 .toclevel-4 ul,.toclimit-6 .toclevel-5 ul,.toclimit-7 .toclevel-6 ul{display:none}blockquote.templatequote{margin-top:0}blockquote.templatequote div.templatequotecite{line-height:1em;text-align:left;padding-left:2em;margin-top:0}blockquote.templatequote div.templatequotecite cite{font-size:85%}div.user-block{padding:5px;margin-bottom:.5em;border:1px solid #A9A9A9;background-color:#FFEFD5}.nowrap,.nowraplinks a,.nowraplinks .selflink,sup.reference a{white-space:nowrap}.wrap,.wraplinks a{white-space:normal}.template-documentation{clear:both;margin:1em 0 0 0;border:1px solid #aaa;background-color:#ecfcf4;padding:1em}.imagemap-inline div{display:inline}#wpUploadDescription{height:13em}.thumbinner{min-width:100px}div.thumb .thumbimage{background-color:#fff}div#content .gallerybox div.thumb{background-color:#F9F9F9}.gallerybox .thumb img{background:#fff url(//bits.wikimedia.org/skins/common/images/Checker-16x16.png) repeat}.ns-0 .gallerybox .thumb img,.ns-2 .gallerybox .thumb img,.ns-100 .gallerybox .thumb img,.nochecker .gallerybox .thumb img{background:#fff}#mw-subcategories,#mw-pages,#mw-category-media,#filehistory,#wikiPreview,#wikiDiff{clear:both}body.rtl #mw-articlefeedbackv5,body.rtl #mw-articlefeedback{display:block;margin-bottom:1em;clear:right;float:right}.wpb .wpb-header{display:none}.wpbs-inner .wpb .wpb-header{display:block}.wpbs-inner .wpb .wpb-header{display:table-row}.wpbs-inner .wpb-outside{display:none}.mw-tag-markers{font-family:sans-serif;font-style:italic;font-size:90%}.sysop-show,.accountcreator-show,.templateeditor-show,.autoconfirmed-show{display:none}.ve-init-mw-viewPageTarget-toolbar-editNotices-notice .editnotice-redlink{display:none!important}ul.permissions-errors>li{list-style:none none}ul.permissions-errors{margin:0}body.page-Special_UserLogin .mw-label label,body.page-Special_UserLogin_signup .mw-label label{white-space:nowrap}.transborder{border:solid transparent}* html .transborder{border:solid #000001;filter:chroma(color=#000001)}.updatedmarker{background-color:transparent;color:#006400}li.mw-changeslist-line-watched .mw-title,table.mw-changeslist-line-watched .mw-title,table.mw-enhanced-watch .mw-enhanced-rctime{font-weight:normal}span.texhtml{font-family:"Times New Roman","Nimbus Roman No9 L",Times,serif;font-size:118%;white-space:nowrap}span.texhtml span.texhtml{font-size:100%}div.mw-geshi div,div.mw-geshi div pre,span.mw-geshi,pre.source-css,pre.source-javascript,pre.source-lua{font-family:monospace,Courier!important}table#mw-prefixindex-list-table,table#mw-prefixindex-nav-table{width:98%}.portal-column-left{float:left;width:50%}.portal-column-right{float:right;width:49%}.portal-column-left-wide{float:left;width:60%}.portal-column-right-narrow{float:right;width:39%}.portal-column-left-extra-wide{float:left;width:70%}.portal-column-right-extra-narrow{float:right;width:29%}@media only screen and (max-width:800px){.portal-column-left,.portal-column-right,.portal-column-left-wide,.portal-column-right-narrow,.portal-column-left-extra-wide,.portal-column-right-extra-narrow{float:inherit;width:inherit}}#bodyContent .letterhead{background-image:url('//upload.wikimedia.org/wikipedia/commons/e/e0/Tan-page-corner.png');background-repeat:no-repeat;padding:2em;background-color:#faf9f2}.treeview ul{padding:0;margin:0}.treeview li{padding:0;margin:0;list-style-type:none;list-style-image:none;zoom:1}.treeview li li{background:url("//upload.wikimedia.org/wikipedia/commons/f/f2/Treeview-grey-line.png") no-repeat 0 -2981px;padding-left:20px;text-indent:.3em}.treeview li li.lastline{background-position:0 -5971px}.treeview li.emptyline>ul{margin-left:-1px}.treeview li.emptyline>ul>li:first-child{background-position:0 9px}td .sortkey,th .sortkey{display:none;speak:none}.inputbox-hidecheckboxes form .inputbox-element{display:none!important}#editpage-specialchars{display:none}.k-player .k-attribution{visibility:hidden}@media(-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(min-resolution:1.5dppx),(min-resolution:144dpi){#p-logo a{background-image:url("//upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Wikipedia-logo-v2-en.svg/204px-Wikipedia-logo-v2-en.svg.png")!important;background-size:136px auto}}@media(-webkit-min-device-pixel-ratio:2),(min--moz-device-pixel-ratio:2),(min-resolution:2dppx),(min-resolution:192dpi){#p-logo a{background-image:url("//upload.wikimedia.org/wikipedia/commons/thumb/b/b3/Wikipedia-logo-v2-en.svg/270px-Wikipedia-logo-v2-en.svg.png")!important;background-size:135px auto}}.ns-0 .ambox,.ns-0 .navbox,.ns-0 .vertical-navbox,.ns-0 .infobox.sisterproject,.ns-0 .dablink,.ns-0 .metadata,.editlink,.navbar,a.NavToggle,span.collapseButton,span.mw-collapsible-toggle,th .sortkey,td .sortkey{display:none!important}#content cite a.external.text:after,.nourlexpansion a.external.text:after,.nourlexpansion a.external.autonumber:after{display:none!important}table.collapsible tr,div.NavPic,div.NavContent{display:block!important}table.collapsible tr{display:table-row!important}#firstHeading{margin:0}#content a.external.text:after,#content a.external.autonumber:after{word-wrap:break-word}body.page-Main_Page #deleteconfirm,body.page-Main_Page #t-cite,body.page-Main_Page #footer-info-lastmod,body.action-view.page-Main_Page #siteSub,body.action-view.page-Main_Page #contentSub,body.action-view.page-Main_Page h1.firstHeading{display:none!important}body.page-Main_Page #mp-topbanner{margin-top:0!important}#coordinates{position:absolute;top:0;right:0;float:right;margin:0;padding:0;line-height:1.5em;text-align:right;text-indent:0;font-size:85%;text-transform:none;white-space:nowrap}div.topicon{position:absolute;top:-2em;margin-right:-10px;display:block!important}div.flaggedrevs_short{position:absolute;top:-3em;right:80px;z-index:1;margin-left:0;margin-right:-10px}body.rtl #protected-icon{left:55px}body.rtl #spoken-icon,body.rtl #commons-icon{left:30px}body.rtl #featured-star{left:10px}div.vectorMenu div{z-index:2}#siteSub{display:inline;font-size:92%}li.GA{list-style-image:url(//upload.wikimedia.org/wikipedia/commons/4/42/Monobook-bullet-ga.png)}li.FA{list-style-image:url(//upload.wikimedia.org/wikipedia/commons/d/d4/Monobook-bullet-star.png)}li.mw-changeslist-line-watched,li.mw-history-line-updated{list-style-image:url(//upload.wikimedia.org/wikipedia/commons/c/c2/ChangedBulletVector.png)}#bodyContent a.external[href ^="https://"],.link-https{background:url(//upload.wikimedia.org/wikipedia/en/0/00/Lock_icon_blue.gif) center right no-repeat;padding-right:16px}div.redirectMsg img{vertical-align:text-bottom}.redirectText{font-size:150%;margin:5px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/write.py b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/write.py
deleted file mode 100644
index 939e11d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/bench/write.py
+++ /dev/null
@@ -1,344 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-r"""
-=========================
- Write benchmark results
-=========================
-
-Write benchmark results.
-
-:Copyright:
-
- Copyright 2014
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-Usage::
-
-    python -mbench.write [-p plain] [-t table] <pickled
-
-    -p plain  Plain file to write to (like docs/BENCHMARKS).
-    -t table  Table file to write to (like docs/_userdoc/benchmark.txt).
-
-"""
-if __doc__:
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape')
-__docformat__ = "restructuredtext en"
-__license__ = "Apache License, Version 2.0"
-__version__ = "1.0.0"
-
-import os as _os
-import re as _re
-import sys as _sys
-
-
-try:
-    unicode
-except NameError:
-    def uni(v):
-        if hasattr(v, 'decode'):
-            return v.decode('latin-1')
-        return str(v)
-else:
-    def uni(v):
-        if isinstance(v, unicode):
-            return v.encode('utf-8')
-        return str(v)
-
-
-def write_table(filename, results):
-    """
-    Output tabled benchmark results
-
-    :Parameters:
-      `filename` : ``str``
-        Filename to write to
-
-      `results` : ``list``
-        Results
-    """
-    try:
-        next
-    except NameError:
-        next = lambda i: (getattr(i, 'next', None) or i.__next__)()
-    try:
-        cmp
-    except NameError:
-        cmp = lambda a, b: (a > b) - (a < b)
-
-    names = [
-        ('cssmin', 'YUI Port'),
-        ('rcssmin', '|rcssmin|'),
-        ('_rcssmin', r'_\ |rcssmin|'),
-    ]
-    benched_per_table = 2
-
-    results = sorted(results, reverse=True)
-
-    # First we transform our data into a table (list of lists)
-    pythons, widths = [], [0] * (benched_per_table + 1)
-    last_version = None
-    for version, _, result in results:
-        version = uni(version)
-        if not(last_version is None or version.startswith('2.')):
-            continue
-        last_version = version
-
-        namesub = _re.compile(r'(?:-\d+(?:\.\d+)*)?\.css$').sub
-        result = iter(result)
-        tables = []
-
-        # given our data it's easier to create the table transposed...
-        for benched in result:
-            rows = [['Name'] + [desc for _, desc in names]]
-            for _ in range(benched_per_table):
-                if _:
-                    try:
-                        benched = next(result)
-                    except StopIteration:
-                        rows.append([''] + ['' for _ in names])
-                        continue
-
-                times = dict((
-                    uni(port), (time, benched['sizes'][idx])
-                ) for idx, (port, time) in enumerate(benched['times']))
-                columns = ['%s (%.1f)' % (
-                    namesub('', _os.path.basename(uni(benched['filename']))),
-                    benched['size'] / 1024.0,
-                )]
-                for idx, (port, _) in enumerate(names):
-                    if port not in times:
-                        columns.append('n/a')
-                        continue
-                    time, size = times[port]
-                    if time is None:
-                        columns.append('(failed)')
-                        continue
-                    columns.append('%s%.2f ms (%.1f %s)' % (
-                        idx == 0 and ' ' or '',
-                        time,
-                        size / 1024.0,
-                        idx == 0 and '\\*' or ['=', '>', '<'][
-                            cmp(size, benched['sizes'][0])
-                        ],
-                    ))
-                rows.append(columns)
-
-            # calculate column widths (global for all tables)
-            for idx, row in enumerate(rows):
-                widths[idx] = max(widths[idx], max(map(len, row)))
-
-            # ... and transpose it back.
-            tables.append(zip(*rows))
-        pythons.append((version, tables))
-
-        if last_version.startswith('2.'):
-            break
-
-    # Second we create a rest table from it
-    lines = []
-    separator = lambda c='-': '+'.join([''] + [
-        c * (width + 2) for width in widths
-    ] + [''])
-
-    for idx, (version, tables) in enumerate(pythons):
-        if idx:
-            lines.append('')
-            lines.append('')
-
-        line = 'Python %s' % (version,)
-        lines.append(line)
-        lines.append('~' * len(line))
-
-        for table in tables:
-            lines.append('')
-            lines.append('.. rst-class:: benchmark')
-            lines.append('')
-
-            for idx, row in enumerate(table):
-                if idx == 0:
-                    # header
-                    lines.append(separator())
-                    lines.append('|'.join([''] + [
-                        ' %s%*s ' % (col, len(col) - width, '')
-                        for width, col in zip(widths, row)
-                    ] + ['']))
-                    lines.append(separator('='))
-                else: # data
-                    lines.append('|'.join([''] + [
-                        j == 0 and (
-                            ' %s%*s ' % (col, len(col) - widths[j], '')
-                        ) or (
-                            ['%*s  ', ' %*s '][idx == 1] % (widths[j], col)
-                        )
-                        for j, col in enumerate(row)
-                    ] + ['']))
-                    lines.append(separator())
-
-    fplines = []
-    fp = open(filename)
-    try:
-        fpiter = iter(fp)
-        for line in fpiter:
-            line = line.rstrip()
-            if line == '.. begin tables':
-                buf = []
-                for line in fpiter:
-                    line = line.rstrip()
-                    if line == '.. end tables':
-                        fplines.append('.. begin tables')
-                        fplines.append('')
-                        fplines.extend(lines)
-                        fplines.append('')
-                        fplines.append('.. end tables')
-                        buf = []
-                        break
-                    else:
-                        buf.append(line)
-                else:
-                    fplines.extend(buf)
-                    _sys.stderr.write("Placeholder container not found!\n")
-            else:
-                fplines.append(line)
-    finally:
-        fp.close()
-
-    fp = open(filename, 'w')
-    try:
-        fp.write('\n'.join(fplines) + '\n')
-    finally:
-        fp.close()
-
-
-def write_plain(filename, results):
-    """
-    Output plain benchmark results
-
-    :Parameters:
-      `filename` : ``str``
-        Filename to write to
-
-      `results` : ``list``
-        Results
-    """
-    lines = []
-    results = sorted(results, reverse=True)
-    for idx, (version, import_notes, result) in enumerate(results):
-        if idx:
-            lines.append('')
-            lines.append('')
-
-        lines.append('$ python%s -OO bench/main.py bench/*.css' % (
-            '.'.join(version.split('.')[:2])
-        ))
-        lines.append('~' * 72)
-        for note in import_notes:
-            lines.append(uni(note))
-        lines.append('Python Release: %s' % (version,))
-
-        for single in result:
-            lines.append('')
-            lines.append('Benchmarking %r... (%.1f KiB)' % (
-                uni(single['filename']), single['size'] / 1024.0
-            ))
-            for msg in single['messages']:
-                lines.append(msg)
-            times = []
-            space = max([len(uni(port)) for port, _ in single['times']])
-            for idx, (port, time) in enumerate(single['times']):
-                port = uni(port)
-                if time is None:
-                    lines.append("  FAILED %s" % (port,))
-                else:
-                    times.append(time)
-                    lines.append(
-                        "  Timing %s%s ... (%5.1f KiB %s) %8.2f ms" % (
-                            port,
-                            " " * (space - len(port)),
-                            single['sizes'][idx] / 1024.0,
-                            idx == 0 and '*' or ['=', '>', '<'][
-                                cmp(single['sizes'][idx], single['sizes'][0])
-                            ],
-                            time
-                        )
-                    )
-                    if len(times) > 1:
-                        lines[-1] += " (factor: %s)" % (', '.join([
-                            '%.2f' % (timed / time) for timed in times[:-1]
-                        ]))
-
-    lines.append('')
-    lines.append('')
-    lines.append('# vim: nowrap')
-    fp = open(filename, 'w')
-    try:
-        fp.write('\n'.join(lines) + '\n')
-    finally:
-        fp.close()
-
-
-def main(argv=None):
-    """ Main """
-    import getopt as _getopt
-    import pickle as _pickle
-
-    if argv is None:
-        argv = _sys.argv[1:]
-    try:
-        opts, args = _getopt.getopt(argv, "hp:t:", ["help"])
-    except getopt.GetoptError:
-        e = _sys.exc_info()[0](_sys.exc_info()[1])
-        print >> _sys.stderr, "%s\nTry %s -mbench.write --help" % (
-            e,
-            _os.path.basename(_sys.executable),
-        )
-        _sys.exit(2)
-
-    plain, table = None, None
-    for key, value in opts:
-        if key in ("-h", "--help"):
-            print >> _sys.stderr, (
-                "%s -mbench.write [-p plain] [-t table] <pickled" % (
-                    _os.path.basename(_sys.executable),
-                )
-            )
-            _sys.exit(0)
-        elif key == '-p':
-            plain = str(value)
-        elif key == '-t':
-            table = str(value)
-
-    struct = []
-    _sys.stdin = getattr(_sys.stdin, 'detach', lambda: _sys.stdin)()
-    try:
-        while True:
-            version, import_notes, result = _pickle.load(_sys.stdin)
-            if hasattr(version, 'decode'):
-                version = version.decode('latin-1')
-            struct.append((version, import_notes, result))
-    except EOFError:
-        pass
-
-    if plain:
-        write_plain(plain, struct)
-
-    if table:
-        write_table(table, struct)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/BENCHMARKS b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/BENCHMARKS
deleted file mode 100644
index 9a49e9b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/BENCHMARKS
+++ /dev/null
@@ -1,61 +0,0 @@
-$ python3.4 -OO bench/main.py bench/*.css
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 3.4.2
-
-Benchmarking 'bench/wikipedia.css'... (81.0 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   163.11 ms
-  Timing rcssmin  ... ( 49.6 KiB >)    45.48 ms (factor: 3.59)
-  Timing _rcssmin ... ( 49.6 KiB >)     0.43 ms (factor: 378.93, 105.66)
-
-Benchmarking 'bench/wikipedia.min.css'... (49.4 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   119.00 ms
-  Timing rcssmin  ... ( 49.4 KiB =)    20.94 ms (factor: 5.68)
-  Timing _rcssmin ... ( 49.4 KiB =)     0.26 ms (factor: 454.45, 79.98)
-
-
-$ python3.3 -OO bench/main.py bench/*.css
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 3.3.5
-
-Benchmarking 'bench/wikipedia.css'... (81.0 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   185.01 ms
-  Timing rcssmin  ... ( 49.6 KiB >)    59.30 ms (factor: 3.12)
-  Timing _rcssmin ... ( 49.6 KiB >)     0.52 ms (factor: 356.38, 114.23)
-
-Benchmarking 'bench/wikipedia.min.css'... (49.4 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   136.26 ms
-  Timing rcssmin  ... ( 49.4 KiB =)    25.51 ms (factor: 5.34)
-  Timing _rcssmin ... ( 49.4 KiB =)     0.26 ms (factor: 515.24, 96.47)
-
-
-$ python3.2 -OO bench/main.py bench/*.css
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 3.2.5
-
-Benchmarking 'bench/wikipedia.css'... (81.0 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   225.32 ms
-  Timing rcssmin  ... ( 49.6 KiB >)    57.51 ms (factor: 3.92)
-  Timing _rcssmin ... ( 49.6 KiB >)     0.43 ms (factor: 527.98, 134.77)
-
-Benchmarking 'bench/wikipedia.min.css'... (49.4 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   129.43 ms
-  Timing rcssmin  ... ( 49.4 KiB =)    24.45 ms (factor: 5.29)
-  Timing _rcssmin ... ( 49.4 KiB =)     0.25 ms (factor: 526.94, 99.55)
-
-
-$ python2.7 -OO bench/main.py bench/*.css
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 2.7.7
-
-Benchmarking 'bench/wikipedia.css'... (81.0 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   175.98 ms
-  Timing rcssmin  ... ( 49.6 KiB >)    46.22 ms (factor: 3.81)
-  Timing _rcssmin ... ( 49.6 KiB >)     0.45 ms (factor: 390.95, 102.68)
-
-Benchmarking 'bench/wikipedia.min.css'... (49.4 KiB)
-  Timing cssmin   ... ( 49.4 KiB *)   126.19 ms
-  Timing rcssmin  ... ( 49.4 KiB =)    19.92 ms (factor: 6.33)
-  Timing _rcssmin ... ( 49.4 KiB =)     0.27 ms (factor: 469.78, 74.17)
-
-
-# vim: nowrap
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/CHANGES b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/CHANGES
deleted file mode 100644
index e179dce..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/CHANGES
+++ /dev/null
@@ -1,42 +0,0 @@
-Changes with version 1.0.5
-
- *) Added support for pypy 2.2
-
- *) Updated benchmarks
-
- *) Relint with newer pylint
-
- *) Fix locale problem with the setup script on python3.
-    Submitted by https://github.com/svenstaro
-
-
-Changes with version 1.0.4
-
- *) Documentation and benchmark updates
-
-
-Changes with version 1.0.3
-
- *) Added support for the following grouping @-rules:
-    @supports, @document, @keyframes
-
- *) Added support for Python 3.4 and Jython 2.7
-
-
-Changes with version 1.0.2
-
- *) Added compat option to setup.py supporting the pip installer
-
- *) Added support for pypy (1.9, 2.0)
-
- *) Added support for jython (2.5)
-
-
-Changes with version 1.0.1
-
- *) Added support for Python 3.3
-
-
-Changes with version 1.0.0
-
- *) First stable release.
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/CLASSIFIERS b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/CLASSIFIERS
deleted file mode 100644
index 10d5965..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/CLASSIFIERS
+++ /dev/null
@@ -1,19 +0,0 @@
-Development Status :: 5 - Production/Stable
-Environment :: Web Environment
-Intended Audience :: Developers
-License :: OSI Approved
-License :: OSI Approved :: Apache License, Version 2.0
-Operating System :: OS Independent
-Programming Language :: C
-Programming Language :: Python
-Programming Language :: Python :: 2
-Programming Language :: Python :: 3
-Programming Language :: Python :: Implementation :: CPython
-Programming Language :: Python :: Implementation :: Jython
-Programming Language :: Python :: Implementation :: PyPy
-Topic :: Internet :: WWW/HTTP :: Dynamic Content
-Topic :: Software Development :: Libraries
-Topic :: Software Development :: Libraries :: Python Modules
-Topic :: Text Processing
-Topic :: Text Processing :: Filters
-Topic :: Utilities
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/DESCRIPTION b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/DESCRIPTION
deleted file mode 100644
index b51a7fd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/DESCRIPTION
+++ /dev/null
@@ -1,85 +0,0 @@
-==============
- CSS Minifier
-==============
-
-RCSSmin is a CSS minifier.
-
-The minifier is based on the semantics of the `YUI compressor`_\, which itself
-is based on `the rule list by Isaac Schlueter`_\.
-
-This module is a re-implementation aiming for speed instead of maximum
-compression, so it can be used at runtime (rather than during a preprocessing
-step). RCSSmin does syntactical compression only (removing spaces, comments
-and possibly semicolons). It does not provide semantic compression (like
-removing empty blocks, collapsing redundant properties etc). It does, however,
-support various CSS hacks (by keeping them working as intended).
-
-Here's a feature list:
-
-- Strings are kept, except that escaped newlines are stripped
-- Space/Comments before the very end or before various characters are
-  stripped: ``:{});=>+],!`` (The colon (``:``) is a special case, a single
-  space is kept if it's outside a ruleset.)
-- Space/Comments at the very beginning or after various characters are
-  stripped: ``{}(=:>+[,!``
-- Optional space after unicode escapes is kept, resp. replaced by a simple
-  space
-- whitespaces inside ``url()`` definitions are stripped
-- Comments starting with an exclamation mark (``!``) can be kept optionally.
-- All other comments and/or whitespace characters are replaced by a single
-  space.
-- Multiple consecutive semicolons are reduced to one
-- The last semicolon within a ruleset is stripped
-- CSS Hacks supported:
-
-  - IE7 hack (``>/**/``)
-  - Mac-IE5 hack (``/*\*/.../**/``)
-  - The boxmodelhack is supported naturally because it relies on valid CSS2
-    strings
-  - Between ``:first-line`` and the following comma or curly brace a space is
-    inserted. (apparently it's needed for IE6)
-  - Same for ``:first-letter``
-
-rcssmin.c is a reimplementation of rcssmin.py in C and improves runtime up to
-factor 100 or so (depending on the input). docs/BENCHMARKS in the source
-distribution contains the details.
-
-Both python 2 (>= 2.4) and python 3 are supported.
-
-.. _YUI compressor: https://github.com/yui/yuicompressor/
-
-.. _the rule list by Isaac Schlueter: https://github.com/isaacs/cssmin/
-
-
-Copyright and License
-~~~~~~~~~~~~~~~~~~~~~
-
-Copyright 2011 - 2014
-André Malo or his licensors, as applicable.
-
-The whole package (except for the files in the bench/ directory) is
-distributed under the Apache License Version 2.0. You'll find a copy in the
-root directory of the distribution or online at:
-<http://www.apache.org/licenses/LICENSE-2.0>.
-
-
-Bugs
-~~~~
-
-No bugs, of course. ;-)
-But if you've found one or have an idea how to improve rcssmin, feel free
-to send a pull request on `github <https://github.com/ndparker/rcssmin>`_
-or send a mail to <rcssmin-bugs@perlig.de>.
-
-
-Author Information
-~~~~~~~~~~~~~~~~~~
-
-André "nd" Malo <nd perlig.de>
-GPG: 0x8103A37E
-
-
-    If God intended people to be naked, they would be born that way.
-    -- Oscar Wilde
-
-.. vim:tw=72 syntax=rest
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/PROVIDES b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/PROVIDES
deleted file mode 100644
index d6d4e9e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/PROVIDES
+++ /dev/null
@@ -1 +0,0 @@
-rcssmin (1.0)
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/SUMMARY b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/SUMMARY
deleted file mode 100644
index 490e537..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/SUMMARY
+++ /dev/null
@@ -1 +0,0 @@
-CSS Minifier
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/api-objects.txt b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/api-objects.txt
deleted file mode 100644
index f4ed223..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/api-objects.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-rcssmin	rcssmin-module.html
-rcssmin.__license__	rcssmin-module.html#__license__
-rcssmin._make_cssmin	rcssmin-module.html#_make_cssmin
-rcssmin.__doc__	rcssmin-module.html#__doc__
-rcssmin.__package__	rcssmin-module.html#__package__
-rcssmin.cssmin	rcssmin-module.html#cssmin
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/crarr.png b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/crarr.png
deleted file mode 100644
index 26b43c5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/crarr.png
+++ /dev/null
Binary files differ
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/epydoc.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/epydoc.css
deleted file mode 100644
index 86d4170..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/epydoc.css
+++ /dev/null
@@ -1,322 +0,0 @@
-
-
-/* Epydoc CSS Stylesheet
- *
- * This stylesheet can be used to customize the appearance of epydoc's
- * HTML output.
- *
- */
-
-/* Default Colors & Styles
- *   - Set the default foreground & background color with 'body'; and 
- *     link colors with 'a:link' and 'a:visited'.
- *   - Use bold for decision list terms.
- *   - The heading styles defined here are used for headings *within*
- *     docstring descriptions.  All headings used by epydoc itself use
- *     either class='epydoc' or class='toc' (CSS styles for both
- *     defined below).
- */
-body                        { background: #ffffff; color: #000000; }
-p                           { margin-top: 0.5em; margin-bottom: 0.5em; }
-a:link                      { color: #0000ff; }
-a:visited                   { color: #204080; }
-dt                          { font-weight: bold; }
-h1                          { font-size: +140%; font-style: italic;
-                              font-weight: bold; }
-h2                          { font-size: +125%; font-style: italic;
-                              font-weight: bold; }
-h3                          { font-size: +110%; font-style: italic;
-                              font-weight: normal; }
-code                        { font-size: 100%; }
-/* N.B.: class, not pseudoclass */
-a.link                      { font-family: monospace; }
- 
-/* Page Header & Footer
- *   - The standard page header consists of a navigation bar (with
- *     pointers to standard pages such as 'home' and 'trees'); a
- *     breadcrumbs list, which can be used to navigate to containing
- *     classes or modules; options links, to show/hide private
- *     variables and to show/hide frames; and a page title (using
- *     <h1>).  The page title may be followed by a link to the
- *     corresponding source code (using 'span.codelink').
- *   - The footer consists of a navigation bar, a timestamp, and a
- *     pointer to epydoc's homepage.
- */ 
-h1.epydoc                   { margin: 0; font-size: +140%; font-weight: bold; }
-h2.epydoc                   { font-size: +130%; font-weight: bold; }
-h3.epydoc                   { font-size: +115%; font-weight: bold;
-                              margin-top: 0.2em; }
-td h3.epydoc                { font-size: +115%; font-weight: bold;
-                              margin-bottom: 0; }
-table.navbar                { background: #a0c0ff; color: #000000;
-                              border: 2px groove #c0d0d0; }
-table.navbar table          { color: #000000; }
-th.navbar-select            { background: #70b0ff;
-                              color: #000000; } 
-table.navbar a              { text-decoration: none; }  
-table.navbar a:link         { color: #0000ff; }
-table.navbar a:visited      { color: #204080; }
-span.breadcrumbs            { font-size: 85%; font-weight: bold; }
-span.options                { font-size: 70%; }
-span.codelink               { font-size: 85%; }
-td.footer                   { font-size: 85%; }
-
-/* Table Headers
- *   - Each summary table and details section begins with a 'header'
- *     row.  This row contains a section title (marked by
- *     'span.table-header') as well as a show/hide private link
- *     (marked by 'span.options', defined above).
- *   - Summary tables that contain user-defined groups mark those
- *     groups using 'group header' rows.
- */
-td.table-header             { background: #70b0ff; color: #000000;
-                              border: 1px solid #608090; }
-td.table-header table       { color: #000000; }
-td.table-header table a:link      { color: #0000ff; }
-td.table-header table a:visited   { color: #204080; }
-span.table-header           { font-size: 120%; font-weight: bold; }
-th.group-header             { background: #c0e0f8; color: #000000;
-                              text-align: left; font-style: italic; 
-                              font-size: 115%; 
-                              border: 1px solid #608090; }
-
-/* Summary Tables (functions, variables, etc)
- *   - Each object is described by a single row of the table with
- *     two cells.  The left cell gives the object's type, and is
- *     marked with 'code.summary-type'.  The right cell gives the
- *     object's name and a summary description.
- *   - CSS styles for the table's header and group headers are
- *     defined above, under 'Table Headers'
- */
-table.summary               { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090;
-                              margin-bottom: 0.5em; }
-td.summary                  { border: 1px solid #608090; }
-code.summary-type           { font-size: 85%; }
-table.summary a:link        { color: #0000ff; }
-table.summary a:visited     { color: #204080; }
-
-
-/* Details Tables (functions, variables, etc)
- *   - Each object is described in its own div.
- *   - A single-row summary table w/ table-header is used as
- *     a header for each details section (CSS style for table-header
- *     is defined above, under 'Table Headers').
- */
-table.details               { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090;
-                              margin: .2em 0 0 0; }
-table.details table         { color: #000000; }
-table.details a:link        { color: #0000ff; }
-table.details a:visited     { color: #204080; }
-
-/* Fields */
-dl.fields                   { margin-left: 2em; margin-top: 1em;
-                              margin-bottom: 1em; }
-dl.fields dd ul             { margin-left: 0em; padding-left: 0em; }
-dl.fields dd ul li ul       { margin-left: 2em; padding-left: 0em; }
-div.fields                  { margin-left: 2em; }
-div.fields p                { margin-bottom: 0.5em; }
-
-/* Index tables (identifier index, term index, etc)
- *   - link-index is used for indices containing lists of links
- *     (namely, the identifier index & term index).
- *   - index-where is used in link indices for the text indicating
- *     the container/source for each link.
- *   - metadata-index is used for indices containing metadata
- *     extracted from fields (namely, the bug index & todo index).
- */
-table.link-index            { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090; }
-td.link-index               { border-width: 0px; }
-table.link-index a:link     { color: #0000ff; }
-table.link-index a:visited  { color: #204080; }
-span.index-where            { font-size: 70%; }
-table.metadata-index        { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090; 
-                              margin: .2em 0 0 0; }
-td.metadata-index           { border-width: 1px; border-style: solid; }
-table.metadata-index a:link { color: #0000ff; }
-table.metadata-index a:visited  { color: #204080; }
-
-/* Function signatures
- *   - sig* is used for the signature in the details section.
- *   - .summary-sig* is used for the signature in the summary 
- *     table, and when listing property accessor functions.
- * */
-.sig-name                   { color: #006080; }
-.sig-arg                    { color: #008060; }
-.sig-default                { color: #602000; }
-.summary-sig                { font-family: monospace; }
-.summary-sig-name           { color: #006080; font-weight: bold; }
-table.summary a.summary-sig-name:link
-                            { color: #006080; font-weight: bold; }
-table.summary a.summary-sig-name:visited
-                            { color: #006080; font-weight: bold; }
-.summary-sig-arg            { color: #006040; }
-.summary-sig-default        { color: #501800; }
-
-/* Subclass list
- */
-ul.subclass-list { display: inline; }
-ul.subclass-list li { display: inline; }
-
-/* To render variables, classes etc. like functions */
-table.summary .summary-name { color: #006080; font-weight: bold;
-                              font-family: monospace; }
-table.summary
-     a.summary-name:link    { color: #006080; font-weight: bold;
-                              font-family: monospace; }
-table.summary
-    a.summary-name:visited  { color: #006080; font-weight: bold;
-                              font-family: monospace; }
-
-/* Variable values
- *   - In the 'variable details' sections, each varaible's value is
- *     listed in a 'pre.variable' box.  The width of this box is
- *     restricted to 80 chars; if the value's repr is longer than
- *     this it will be wrapped, using a backslash marked with
- *     class 'variable-linewrap'.  If the value's repr is longer
- *     than 3 lines, the rest will be ellided; and an ellipsis
- *     marker ('...' marked with 'variable-ellipsis') will be used.
- *   - If the value is a string, its quote marks will be marked
- *     with 'variable-quote'.
- *   - If the variable is a regexp, it is syntax-highlighted using
- *     the re* CSS classes.
- */
-pre.variable                { padding: .5em; margin: 0;
-                              background: #dce4ec; color: #000000;
-                              border: 1px solid #708890; }
-.variable-linewrap          { color: #604000; font-weight: bold; }
-.variable-ellipsis          { color: #604000; font-weight: bold; }
-.variable-quote             { color: #604000; font-weight: bold; }
-.variable-group             { color: #008000; font-weight: bold; }
-.variable-op                { color: #604000; font-weight: bold; }
-.variable-string            { color: #006030; }
-.variable-unknown           { color: #a00000; font-weight: bold; }
-.re                         { color: #000000; }
-.re-char                    { color: #006030; }
-.re-op                      { color: #600000; }
-.re-group                   { color: #003060; }
-.re-ref                     { color: #404040; }
-
-/* Base tree
- *   - Used by class pages to display the base class hierarchy.
- */
-pre.base-tree               { font-size: 80%; margin: 0; }
-
-/* Frames-based table of contents headers
- *   - Consists of two frames: one for selecting modules; and
- *     the other listing the contents of the selected module.
- *   - h1.toc is used for each frame's heading
- *   - h2.toc is used for subheadings within each frame.
- */
-h1.toc                      { text-align: center; font-size: 105%;
-                              margin: 0; font-weight: bold;
-                              padding: 0; }
-h2.toc                      { font-size: 100%; font-weight: bold; 
-                              margin: 0.5em 0 0 -0.3em; }
-
-/* Syntax Highlighting for Source Code
- *   - doctest examples are displayed in a 'pre.py-doctest' block.
- *     If the example is in a details table entry, then it will use
- *     the colors specified by the 'table pre.py-doctest' line.
- *   - Source code listings are displayed in a 'pre.py-src' block.
- *     Each line is marked with 'span.py-line' (used to draw a line
- *     down the left margin, separating the code from the line
- *     numbers).  Line numbers are displayed with 'span.py-lineno'.
- *     The expand/collapse block toggle button is displayed with
- *     'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
- *     modify the font size of the text.)
- *   - If a source code page is opened with an anchor, then the
- *     corresponding code block will be highlighted.  The code
- *     block's header is highlighted with 'py-highlight-hdr'; and
- *     the code block's body is highlighted with 'py-highlight'.
- *   - The remaining py-* classes are used to perform syntax
- *     highlighting (py-string for string literals, py-name for names,
- *     etc.)
- */
-pre.py-doctest              { padding: .5em; margin: 1em;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #708890; }
-table pre.py-doctest        { background: #dce4ec;
-                              color: #000000; }
-pre.py-src                  { border: 2px solid #000000; 
-                              background: #f0f0f0; color: #000000; }
-.py-line                    { border-left: 2px solid #000000; 
-                              margin-left: .2em; padding-left: .4em; }
-.py-lineno                  { font-style: italic; font-size: 90%;
-                              padding-left: .5em; }
-a.py-toggle                 { text-decoration: none; }
-div.py-highlight-hdr        { border-top: 2px solid #000000;
-                              border-bottom: 2px solid #000000;
-                              background: #d8e8e8; }
-div.py-highlight            { border-bottom: 2px solid #000000;
-                              background: #d0e0e0; }
-.py-prompt                  { color: #005050; font-weight: bold;}
-.py-more                    { color: #005050; font-weight: bold;}
-.py-string                  { color: #006030; }
-.py-comment                 { color: #003060; }
-.py-keyword                 { color: #600000; }
-.py-output                  { color: #404040; }
-.py-name                    { color: #000050; }
-.py-name:link               { color: #000050 !important; }
-.py-name:visited            { color: #000050 !important; }
-.py-number                  { color: #005000; }
-.py-defname                 { color: #000060; font-weight: bold; }
-.py-def-name                { color: #000060; font-weight: bold; }
-.py-base-class              { color: #000060; }
-.py-param                   { color: #000060; }
-.py-docstring               { color: #006030; }
-.py-decorator               { color: #804020; }
-/* Use this if you don't want links to names underlined: */
-/*a.py-name                   { text-decoration: none; }*/
-
-/* Graphs & Diagrams
- *   - These CSS styles are used for graphs & diagrams generated using
- *     Graphviz dot.  'img.graph-without-title' is used for bare
- *     diagrams (to remove the border created by making the image
- *     clickable).
- */
-img.graph-without-title     { border: none; }
-img.graph-with-title        { border: 1px solid #000000; }
-span.graph-title            { font-weight: bold; }
-span.graph-caption          { }
-
-/* General-purpose classes
- *   - 'p.indent-wrapped-lines' defines a paragraph whose first line
- *     is not indented, but whose subsequent lines are.
- *   - The 'nomargin-top' class is used to remove the top margin (e.g.
- *     from lists).  The 'nomargin' class is used to remove both the
- *     top and bottom margin (but not the left or right margin --
- *     for lists, that would cause the bullets to disappear.)
- */
-p.indent-wrapped-lines      { padding: 0 0 0 7em; text-indent: -7em; 
-                              margin: 0; }
-.nomargin-top               { margin-top: 0; }
-.nomargin                   { margin-top: 0; margin-bottom: 0; }
-
-/* HTML Log */
-div.log-block               { padding: 0; margin: .5em 0 .5em 0;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #000000; }
-div.log-error               { padding: .1em .3em .1em .3em; margin: 4px;
-                              background: #ffb0b0; color: #000000;
-                              border: 1px solid #000000; }
-div.log-warning             { padding: .1em .3em .1em .3em; margin: 4px;
-                              background: #ffffb0; color: #000000;
-                              border: 1px solid #000000; }
-div.log-info               { padding: .1em .3em .1em .3em; margin: 4px;
-                              background: #b0ffb0; color: #000000;
-                              border: 1px solid #000000; }
-h2.log-hdr                  { background: #70b0ff; color: #000000;
-                              margin: 0; padding: 0em 0.5em 0em 0.5em;
-                              border-bottom: 1px solid #000000; font-size: 110%; }
-p.log                       { font-weight: bold; margin: .5em 0 .5em 0; }
-tr.opt-changed              { color: #000000; font-weight: bold; }
-tr.opt-default              { color: #606060; }
-pre.log                     { margin: 0; padding: 0; padding-left: 1em; }
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/epydoc.js b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/epydoc.js
deleted file mode 100644
index e787dbc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/epydoc.js
+++ /dev/null
@@ -1,293 +0,0 @@
-function toggle_private() {
-        // Search for any private/public links on this page.  Store
-        // their old text in "cmd," so we will know what action to
-        // take; and change their text to the opposite action.
-        var cmd = "?";
-        var elts = document.getElementsByTagName("a");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "privatelink") {
-            cmd = elts[i].innerHTML;
-            elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
-                                    "hide&nbsp;private":"show&nbsp;private");
-          }
-        }
-        // Update all DIVs containing private objects.
-        var elts = document.getElementsByTagName("div");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
-          }
-          else if (elts[i].className == "public") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
-          }
-        }
-        // Update all table rows containing private objects.  Note, we
-        // use "" instead of "block" becaue IE & firefox disagree on what
-        // this should be (block vs table-row), and "" just gives the
-        // default for both browsers.
-        var elts = document.getElementsByTagName("tr");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
-          }
-        }
-        // Update all list items containing private objects.
-        var elts = document.getElementsByTagName("li");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
-                                        "none":"");
-          }
-        }
-        // Update all list items containing private objects.
-        var elts = document.getElementsByTagName("ul");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
-          }
-        }
-        // Set a cookie to remember the current option.
-        document.cookie = "EpydocPrivate="+cmd;
-      }
-function show_private() {
-        var elts = document.getElementsByTagName("a");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "privatelink") {
-            cmd = elts[i].innerHTML;
-            if (cmd && cmd.substr(0,4)=="show")
-                toggle_private();
-          }
-        }
-      }
-function getCookie(name) {
-        var dc = document.cookie;
-        var prefix = name + "=";
-        var begin = dc.indexOf("; " + prefix);
-        if (begin == -1) {
-          begin = dc.indexOf(prefix);
-          if (begin != 0) return null;
-        } else
-        { begin += 2; }
-        var end = document.cookie.indexOf(";", begin);
-        if (end == -1)
-        { end = dc.length; }
-        return unescape(dc.substring(begin + prefix.length, end));
-      }
-function setFrame(url1, url2) {
-          parent.frames[1].location.href = url1;
-          parent.frames[2].location.href = url2;
-      }
-function checkCookie() {
-        var cmd=getCookie("EpydocPrivate");
-        if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
-            toggle_private();
-      }
-function toggleCallGraph(id) {
-        var elt = document.getElementById(id);
-        if (elt.style.display == "none")
-            elt.style.display = "block";
-        else
-            elt.style.display = "none";
-      }
-function expand(id) {
-  var elt = document.getElementById(id+"-expanded");
-  if (elt) elt.style.display = "block";
-  var elt = document.getElementById(id+"-expanded-linenums");
-  if (elt) elt.style.display = "block";
-  var elt = document.getElementById(id+"-collapsed");
-  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
-  var elt = document.getElementById(id+"-collapsed-linenums");
-  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
-  var elt = document.getElementById(id+"-toggle");
-  if (elt) { elt.innerHTML = "-"; }
-}
-
-function collapse(id) {
-  var elt = document.getElementById(id+"-expanded");
-  if (elt) elt.style.display = "none";
-  var elt = document.getElementById(id+"-expanded-linenums");
-  if (elt) elt.style.display = "none";
-  var elt = document.getElementById(id+"-collapsed-linenums");
-  if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
-  var elt = document.getElementById(id+"-toggle");
-  if (elt) { elt.innerHTML = "+"; }
-  var elt = document.getElementById(id+"-collapsed");
-  if (elt) {
-    elt.style.display = "block";
-    
-    var indent = elt.getAttribute("indent");
-    var pad = elt.getAttribute("pad");
-    var s = "<tt class='py-lineno'>";
-    for (var i=0; i<pad.length; i++) { s += "&nbsp;" }
-    s += "</tt>";
-    s += "&nbsp;&nbsp;<tt class='py-line'>";
-    for (var i=0; i<indent.length; i++) { s += "&nbsp;" }
-    s += "<a href='#' onclick='expand(\"" + id;
-    s += "\");return false'>...</a></tt><br />";
-    elt.innerHTML = s;
-  }
-}
-
-function toggle(id) {
-  elt = document.getElementById(id+"-toggle");
-  if (elt.innerHTML == "-")
-      collapse(id); 
-  else
-      expand(id);
-  return false;
-}
-
-function highlight(id) {
-  var elt = document.getElementById(id+"-def");
-  if (elt) elt.className = "py-highlight-hdr";
-  var elt = document.getElementById(id+"-expanded");
-  if (elt) elt.className = "py-highlight";
-  var elt = document.getElementById(id+"-collapsed");
-  if (elt) elt.className = "py-highlight";
-}
-
-function num_lines(s) {
-  var n = 1;
-  var pos = s.indexOf("\n");
-  while ( pos > 0) {
-    n += 1;
-    pos = s.indexOf("\n", pos+1);
-  }
-  return n;
-}
-
-// Collapse all blocks that mave more than `min_lines` lines.
-function collapse_all(min_lines) {
-  var elts = document.getElementsByTagName("div");
-  for (var i=0; i<elts.length; i++) {
-    var elt = elts[i];
-    var split = elt.id.indexOf("-");
-    if (split > 0)
-      if (elt.id.substring(split, elt.id.length) == "-expanded")
-        if (num_lines(elt.innerHTML) > min_lines)
-          collapse(elt.id.substring(0, split));
-  }
-}
-
-function expandto(href) {
-  var start = href.indexOf("#")+1;
-  if (start != 0 && start != href.length) {
-    if (href.substring(start, href.length) != "-") {
-      collapse_all(4);
-      pos = href.indexOf(".", start);
-      while (pos != -1) {
-        var id = href.substring(start, pos);
-        expand(id);
-        pos = href.indexOf(".", pos+1);
-      }
-      var id = href.substring(start, href.length);
-      expand(id);
-      highlight(id);
-    }
-  }
-}
-
-function kill_doclink(id) {
-  var parent = document.getElementById(id);
-  parent.removeChild(parent.childNodes.item(0));
-}
-function auto_kill_doclink(ev) {
-  if (!ev) var ev = window.event;
-  if (!this.contains(ev.toElement)) {
-    var parent = document.getElementById(this.parentID);
-    parent.removeChild(parent.childNodes.item(0));
-  }
-}
-
-function doclink(id, name, targets_id) {
-  var elt = document.getElementById(id);
-
-  // If we already opened the box, then destroy it.
-  // (This case should never occur, but leave it in just in case.)
-  if (elt.childNodes.length > 1) {
-    elt.removeChild(elt.childNodes.item(0));
-  }
-  else {
-    // The outer box: relative + inline positioning.
-    var box1 = document.createElement("div");
-    box1.style.position = "relative";
-    box1.style.display = "inline";
-    box1.style.top = 0;
-    box1.style.left = 0;
-  
-    // A shadow for fun
-    var shadow = document.createElement("div");
-    shadow.style.position = "absolute";
-    shadow.style.left = "-1.3em";
-    shadow.style.top = "-1.3em";
-    shadow.style.background = "#404040";
-    
-    // The inner box: absolute positioning.
-    var box2 = document.createElement("div");
-    box2.style.position = "relative";
-    box2.style.border = "1px solid #a0a0a0";
-    box2.style.left = "-.2em";
-    box2.style.top = "-.2em";
-    box2.style.background = "white";
-    box2.style.padding = ".3em .4em .3em .4em";
-    box2.style.fontStyle = "normal";
-    box2.onmouseout=auto_kill_doclink;
-    box2.parentID = id;
-
-    // Get the targets
-    var targets_elt = document.getElementById(targets_id);
-    var targets = targets_elt.getAttribute("targets");
-    var links = "";
-    target_list = targets.split(",");
-    for (var i=0; i<target_list.length; i++) {
-        var target = target_list[i].split("=");
-        links += "<li><a href='" + target[1] + 
-               "' style='text-decoration:none'>" +
-               target[0] + "</a></li>";
-    }
-  
-    // Put it all together.
-    elt.insertBefore(box1, elt.childNodes.item(0));
-    //box1.appendChild(box2);
-    box1.appendChild(shadow);
-    shadow.appendChild(box2);
-    box2.innerHTML =
-        "Which <b>"+name+"</b> do you want to see documentation for?" +
-        "<ul style='margin-bottom: 0;'>" +
-        links + 
-        "<li><a href='#' style='text-decoration:none' " +
-        "onclick='kill_doclink(\""+id+"\");return false;'>"+
-        "<i>None of the above</i></a></li></ul>";
-  }
-  return false;
-}
-
-function get_anchor() {
-          var href = location.href;
-          var start = href.indexOf("#")+1;
-          if ((start != 0) && (start != href.length))
-              return href.substring(start, href.length);
-      }
-function redirect_url(dottedName) {
-          // Scan through each element of the "pages" list, and check
-          // if "name" matches with any of them.
-          for (var i=0; i<pages.length; i++) {
-
-              // Each page has the form "<pagename>-m" or "<pagename>-c";
-              // extract the <pagename> portion & compare it to dottedName.
-              var pagename = pages[i].substring(0, pages[i].length-2);
-              if (pagename == dottedName.substring(0,pagename.length)) {
-
-                  // We've found a page that matches `dottedName`;
-                  // construct its URL, using leftover `dottedName`
-                  // content to form an anchor.
-                  var pagetype = pages[i].charAt(pages[i].length-1);
-                  var url = pagename + ((pagetype=="m")?"-module.html":
-                                                        "-class.html");
-                  if (dottedName.length > pagename.length)
-                      url += "#" + dottedName.substring(pagename.length+1,
-                                                        dottedName.length);
-                  return url;
-              }
-          }
-      }
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/help.html b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/help.html
deleted file mode 100644
index d1bf1c8..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/help.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Help</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rcssmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">&nbsp;</td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-
-<h1 class="epydoc"> API Documentation </h1>
-
-<p> This document contains the API (Application Programming Interface)
-documentation for this project.  Documentation for the Python
-objects defined by the project is divided into separate pages for each
-package, module, and class.  The API documentation also includes two
-pages containing information about the project as a whole: a trees
-page, and an index page.  </p>
-
-<h2> Object Documentation </h2>
-
-  <p>Each <strong>Package Documentation</strong> page contains: </p>
-  <ul>
-    <li> A description of the package. </li>
-    <li> A list of the modules and sub-packages contained by the
-    package.  </li>
-    <li> A summary of the classes defined by the package. </li>
-    <li> A summary of the functions defined by the package. </li>
-    <li> A summary of the variables defined by the package. </li>
-    <li> A detailed description of each function defined by the
-    package. </li>
-    <li> A detailed description of each variable defined by the
-    package. </li>
-  </ul>
-  
-  <p>Each <strong>Module Documentation</strong> page contains:</p>
-  <ul>
-    <li> A description of the module. </li>
-    <li> A summary of the classes defined by the module. </li>
-    <li> A summary of the functions defined by the module. </li>
-    <li> A summary of the variables defined by the module. </li>
-    <li> A detailed description of each function defined by the
-    module. </li>
-    <li> A detailed description of each variable defined by the
-    module. </li>
-  </ul>
-  
-  <p>Each <strong>Class Documentation</strong> page contains: </p>
-  <ul>
-    <li> A class inheritance diagram. </li>
-    <li> A list of known subclasses. </li>
-    <li> A description of the class. </li>
-    <li> A summary of the methods defined by the class. </li>
-    <li> A summary of the instance variables defined by the class. </li>
-    <li> A summary of the class (static) variables defined by the
-    class. </li> 
-    <li> A detailed description of each method defined by the
-    class. </li>
-    <li> A detailed description of each instance variable defined by the
-    class. </li> 
-    <li> A detailed description of each class (static) variable defined
-    by the class. </li> 
-  </ul>
-
-<h2> Project Documentation </h2>
-
-  <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
-  <ul>
-    <li> The <em>module hierarchy</em> lists every package and module, with
-    modules grouped into packages.  At the top level, and within each
-    package, modules and sub-packages are listed alphabetically. </li>
-    <li> The <em>class hierarchy</em> lists every class, grouped by base
-    class.  If a class has more than one base class, then it will be
-    listed under each base class.  At the top level, and under each base
-    class, classes are listed alphabetically. </li>
-  </ul>
-  
-  <p> The <strong>Index</strong> page contains indices of terms and
-  identifiers: </p>
-  <ul>
-    <li> The <em>term index</em> lists every term indexed by any object's
-    documentation.  For each term, the index provides links to each
-    place where the term is indexed. </li>
-    <li> The <em>identifier index</em> lists the (short) name of every package,
-    module, class, method, function, variable, and parameter.  For each
-    identifier, the index provides a short description, and a link to
-    its documentation. </li>
-  </ul>
-
-<h2> The Table of Contents </h2>
-
-<p> The table of contents occupies the two frames on the left side of
-the window.  The upper-left frame displays the <em>project
-contents</em>, and the lower-left frame displays the <em>module
-contents</em>: </p>
-
-<table class="help summary" border="1" cellspacing="0" cellpadding="3">
-  <tr style="height: 30%">
-    <td align="center" style="font-size: small">
-       Project<br />Contents<hr />...</td>
-    <td align="center" style="font-size: small" rowspan="2" width="70%">
-      API<br />Documentation<br />Frame<br /><br /><br />
-    </td>
-  </tr>
-  <tr>
-    <td align="center" style="font-size: small">
-      Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;
-    </td>
-  </tr>
-</table><br />
-
-<p> The <strong>project contents frame</strong> contains a list of all packages
-and modules that are defined by the project.  Clicking on an entry
-will display its contents in the module contents frame.  Clicking on a
-special entry, labeled "Everything," will display the contents of
-the entire project. </p>
-
-<p> The <strong>module contents frame</strong> contains a list of every
-submodule, class, type, exception, function, and variable defined by a
-module or package.  Clicking on an entry will display its
-documentation in the API documentation frame.  Clicking on the name of
-the module, at the top of the frame, will display the documentation
-for the module itself. </p>
-
-<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
-navigation bar can be used to control whether the table of contents is
-displayed or not. </p>
-
-<h2> The Navigation Bar </h2>
-
-<p> A navigation bar is located at the top and bottom of every page.
-It indicates what type of page you are currently viewing, and allows
-you to go to related pages.  The following table describes the labels
-on the navigation bar.  Note that not some labels (such as
-[Parent]) are not displayed on all pages. </p>
-
-<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
-<tr class="summary">
-  <th>Label</th>
-  <th>Highlighted when...</th>
-  <th>Links to...</th>
-</tr>
-  <tr><td valign="top"><strong>[Parent]</strong></td>
-      <td valign="top"><em>(never highlighted)</em></td>
-      <td valign="top"> the parent of the current package </td></tr>
-  <tr><td valign="top"><strong>[Package]</strong></td>
-      <td valign="top">viewing a package</td>
-      <td valign="top">the package containing the current object
-      </td></tr>
-  <tr><td valign="top"><strong>[Module]</strong></td>
-      <td valign="top">viewing a module</td>
-      <td valign="top">the module containing the current object
-      </td></tr> 
-  <tr><td valign="top"><strong>[Class]</strong></td>
-      <td valign="top">viewing a class </td>
-      <td valign="top">the class containing the current object</td></tr>
-  <tr><td valign="top"><strong>[Trees]</strong></td>
-      <td valign="top">viewing the trees page</td>
-      <td valign="top"> the trees page </td></tr>
-  <tr><td valign="top"><strong>[Index]</strong></td>
-      <td valign="top">viewing the index page</td>
-      <td valign="top"> the index page </td></tr>
-  <tr><td valign="top"><strong>[Help]</strong></td>
-      <td valign="top">viewing the help page</td>
-      <td valign="top"> the help page </td></tr>
-</table>
-
-<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
-the top navigation bar can be used to control whether documentation
-for private objects is displayed.  Private objects are usually defined
-as objects whose (short) names begin with a single underscore, but do
-not end with an underscore.  For example, "<code>_x</code>",
-"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
-are private objects; but "<code>re.sub</code>",
-"<code>__init__</code>", and "<code>type_</code>" are not.  However,
-if a module defines the "<code>__all__</code>" variable, then its
-contents are used to decide which objects are private. </p>
-
-<p> A timestamp below the bottom navigation bar indicates when each
-page was last updated. </p>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rcssmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/identifier-index.html b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/identifier-index.html
deleted file mode 100644
index 82acafd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/identifier-index.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Identifier Index</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rcssmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">&nbsp;</td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<table border="0" width="100%">
-<tr valign="bottom"><td>
-<h1 class="epydoc">Identifier Index</h1>
-</td><td>
-[
-  A
-  B
- <a href="#C">C</a>
-  D
-  E
-  F
-  G
-  H
-  I
-  J
-  K
-  L
-  M
-  N
-  O
-  P
-  Q
- <a href="#R">R</a>
-  S
-  T
-  U
-  V
-  W
-  X
-  Y
-  Z
- <a href="#_">_</a>
-]
-</td></table>
-<table border="0" width="100%">
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="rcssmin-module.html#cssmin">cssmin()</a><br />
-<span class="index-where">(in&nbsp;<a href="rcssmin-module.html">rcssmin</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="R">R</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="rcssmin-module.html">rcssmin</a></td>
-<td width="33%" class="link-index">&nbsp;</td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="rcssmin-module.html#__doc__">__doc__</a><br />
-<span class="index-where">(in&nbsp;<a href="rcssmin-module.html">rcssmin</a>)</span></td>
-<td width="33%" class="link-index"><a href="rcssmin-module.html#__license__">__license__</a><br />
-<span class="index-where">(in&nbsp;<a href="rcssmin-module.html">rcssmin</a>)</span></td>
-<td width="33%" class="link-index"><a href="rcssmin-module.html#__package__">__package__</a><br />
-<span class="index-where">(in&nbsp;<a href="rcssmin-module.html">rcssmin</a>)</span></td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-</table>
-<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rcssmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/index.html b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/index.html
deleted file mode 100644
index 84ffddd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/index.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>rcssmin</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">
-      <span class="breadcrumbs">
-        Module&nbsp;rcssmin
-      </span>
-    </td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module rcssmin</h1><p class="nomargin-top"><span class="codelink"><a href="rcssmin-pysrc.html">source&nbsp;code</a></span></p>
-<p>CSS Minifier.</p>
-<p>The minifier is based on the semantics of the <a class="rst-reference external" href="https://github.com/yui/yuicompressor/" target="_top">YUI compressor</a>, which
-itself is based on <a class="rst-reference external" href="https://github.com/isaacs/cssmin/" target="_top">the rule list by Isaac Schlueter</a>.</p>
-<p>This module is a re-implementation aiming for speed instead of maximum
-compression, so it can be used at runtime (rather than during a preprocessing
-step). RCSSmin does syntactical compression only (removing spaces, comments
-and possibly semicolons). It does not provide semantic compression (like
-removing empty blocks, collapsing redundant properties etc). It does, however,
-support various CSS hacks (by keeping them working as intended).</p>
-<p>Here's a feature list:</p>
-<ul class="rst-simple">
-<li>Strings are kept, except that escaped newlines are stripped</li>
-<li>Space/Comments before the very end or before various characters are
-stripped: <tt class="rst-docutils literal"><span class="pre">:{});=&gt;+],!</span></tt> (The colon (<tt class="rst-docutils literal">:</tt>) is a special case, a single
-space is kept if it's outside a ruleset.)</li>
-<li>Space/Comments at the very beginning or after various characters are
-stripped: <tt class="rst-docutils literal"><span class="pre">{}(=:&gt;+[,!</span></tt></li>
-<li>Optional space after unicode escapes is kept, resp. replaced by a simple
-space</li>
-<li>whitespaces inside <tt class="rst-docutils literal">url()</tt> definitions are stripped</li>
-<li>Comments starting with an exclamation mark (<tt class="rst-docutils literal">!</tt>) can be kept optionally.</li>
-<li>All other comments and/or whitespace characters are replaced by a single
-space.</li>
-<li>Multiple consecutive semicolons are reduced to one</li>
-<li>The last semicolon within a ruleset is stripped</li>
-<li>CSS Hacks supported:<ul>
-<li>IE7 hack (<tt class="rst-docutils literal"><span class="pre">&gt;/**/</span></tt>)</li>
-<li>Mac-IE5 hack (<tt class="rst-docutils literal"><span class="pre">/*\*/.../**/</span></tt>)</li>
-<li>The boxmodelhack is supported naturally because it relies on valid CSS2
-strings</li>
-<li>Between <tt class="rst-docutils literal"><span class="pre">:first-line</span></tt> and the following comma or curly brace a space is
-inserted. (apparently it's needed for IE6)</li>
-<li>Same for <tt class="rst-docutils literal"><span class="pre">:first-letter</span></tt></li>
-</ul>
-</li>
-</ul>
-<p>rcssmin.c is a reimplementation of rcssmin.py in C and improves runtime up to
-factor 100 or so (depending on the input). docs/BENCHMARKS in the source
-distribution contains the details.</p>
-<p>Both python 2 (&gt;= 2.4) and python 3 are supported.</p>
-
-<hr />
-<div class="fields">      <p><strong>Copyright:</strong>
-        Copyright 2011 - 2014
-Andr&#233; Malo or his licensors, as applicable
-      </p>
-      <p><strong>License:</strong>
-        <p>Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at</p>
-<blockquote>
-<a class="rst-reference external" href="http://www.apache.org/licenses/LICENSE-2.0" target="_top">http://www.apache.org/licenses/LICENSE-2.0</a></blockquote>
-<p>Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.</p>
-      </p>
-      <p><strong>Version:</strong>
-        1.0.5
-      </p>
-      <p><strong>Author:</strong>
-        Andr&#233; Malo
-      </p>
-</div><!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Functions</span></td>
-</tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"><tt class="rst-docutils literal">str</tt></span>
-    </td><td class="summary">
-      <table width="100%" cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td><span class="summary-sig"><a href="rcssmin-module.html#cssmin" class="summary-sig-name">cssmin</a>(<span class="summary-sig-arg">style</span>,
-        <span class="summary-sig-arg">keep_bang_comments</span>=<span class="summary-sig-default">False</span>)</span><br />
-      Minify CSS.</td>
-          <td align="right" valign="top">
-            <span class="codelink"><a href="rcssmin-pysrc.html#cssmin">source&nbsp;code</a></span>
-            
-          </td>
-        </tr>
-      </table>
-      
-    </td>
-  </tr>
-</table>
-<!-- ==================== FUNCTION DETAILS ==================== -->
-<a name="section-FunctionDetails"></a>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Function Details</span></td>
-</tr>
-</table>
-<a name="cssmin"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
-  <table width="100%" cellpadding="0" cellspacing="0" border="0">
-  <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">cssmin</span>(<span class="sig-arg">style</span>,
-        <span class="sig-arg">keep_bang_comments</span>=<span class="sig-default">False</span>)</span>
-  </h3>
-  </td><td align="right" valign="top"
-    ><span class="codelink"><a href="rcssmin-pysrc.html#cssmin">source&nbsp;code</a></span>&nbsp;
-    </td>
-  </tr></table>
-  
-  Minify CSS.
-  <dl class="fields">
-    <dt>Parameters:</dt>
-    <dd><ul class="nomargin-top">
-        <li><strong class="pname"><code>style</code></strong> (<tt class="rst-docutils literal">str</tt>) - CSS to minify</li>
-        <li><strong class="pname"><code>keep_bang_comments</code></strong> (<tt class="rst-docutils literal">bool</tt>) - Keep comments starting with an exclamation mark? (<tt class="rst-docutils literal"><span class="pre">/*!...*/</span></tt>)</li>
-    </ul></dd>
-    <dt>Returns: <tt class="rst-docutils literal">str</tt></dt>
-        <dd>Minified style</dd>
-  </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/module-tree.html b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/module-tree.html
deleted file mode 100644
index e522dd1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/module-tree.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module Hierarchy</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rcssmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">&nbsp;</td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<h1 class="epydoc">Module Hierarchy</h1>
-<ul class="nomargin-top">
-    <li> <strong class="uidlink"><a href="rcssmin-module.html">rcssmin</a></strong>: <em class="summary">CSS Minifier.</em>    </li>
-</ul>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rcssmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/rcssmin-module.html b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/rcssmin-module.html
deleted file mode 100644
index 84ffddd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/rcssmin-module.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>rcssmin</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">
-      <span class="breadcrumbs">
-        Module&nbsp;rcssmin
-      </span>
-    </td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module rcssmin</h1><p class="nomargin-top"><span class="codelink"><a href="rcssmin-pysrc.html">source&nbsp;code</a></span></p>
-<p>CSS Minifier.</p>
-<p>The minifier is based on the semantics of the <a class="rst-reference external" href="https://github.com/yui/yuicompressor/" target="_top">YUI compressor</a>, which
-itself is based on <a class="rst-reference external" href="https://github.com/isaacs/cssmin/" target="_top">the rule list by Isaac Schlueter</a>.</p>
-<p>This module is a re-implementation aiming for speed instead of maximum
-compression, so it can be used at runtime (rather than during a preprocessing
-step). RCSSmin does syntactical compression only (removing spaces, comments
-and possibly semicolons). It does not provide semantic compression (like
-removing empty blocks, collapsing redundant properties etc). It does, however,
-support various CSS hacks (by keeping them working as intended).</p>
-<p>Here's a feature list:</p>
-<ul class="rst-simple">
-<li>Strings are kept, except that escaped newlines are stripped</li>
-<li>Space/Comments before the very end or before various characters are
-stripped: <tt class="rst-docutils literal"><span class="pre">:{});=&gt;+],!</span></tt> (The colon (<tt class="rst-docutils literal">:</tt>) is a special case, a single
-space is kept if it's outside a ruleset.)</li>
-<li>Space/Comments at the very beginning or after various characters are
-stripped: <tt class="rst-docutils literal"><span class="pre">{}(=:&gt;+[,!</span></tt></li>
-<li>Optional space after unicode escapes is kept, resp. replaced by a simple
-space</li>
-<li>whitespaces inside <tt class="rst-docutils literal">url()</tt> definitions are stripped</li>
-<li>Comments starting with an exclamation mark (<tt class="rst-docutils literal">!</tt>) can be kept optionally.</li>
-<li>All other comments and/or whitespace characters are replaced by a single
-space.</li>
-<li>Multiple consecutive semicolons are reduced to one</li>
-<li>The last semicolon within a ruleset is stripped</li>
-<li>CSS Hacks supported:<ul>
-<li>IE7 hack (<tt class="rst-docutils literal"><span class="pre">&gt;/**/</span></tt>)</li>
-<li>Mac-IE5 hack (<tt class="rst-docutils literal"><span class="pre">/*\*/.../**/</span></tt>)</li>
-<li>The boxmodelhack is supported naturally because it relies on valid CSS2
-strings</li>
-<li>Between <tt class="rst-docutils literal"><span class="pre">:first-line</span></tt> and the following comma or curly brace a space is
-inserted. (apparently it's needed for IE6)</li>
-<li>Same for <tt class="rst-docutils literal"><span class="pre">:first-letter</span></tt></li>
-</ul>
-</li>
-</ul>
-<p>rcssmin.c is a reimplementation of rcssmin.py in C and improves runtime up to
-factor 100 or so (depending on the input). docs/BENCHMARKS in the source
-distribution contains the details.</p>
-<p>Both python 2 (&gt;= 2.4) and python 3 are supported.</p>
-
-<hr />
-<div class="fields">      <p><strong>Copyright:</strong>
-        Copyright 2011 - 2014
-Andr&#233; Malo or his licensors, as applicable
-      </p>
-      <p><strong>License:</strong>
-        <p>Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at</p>
-<blockquote>
-<a class="rst-reference external" href="http://www.apache.org/licenses/LICENSE-2.0" target="_top">http://www.apache.org/licenses/LICENSE-2.0</a></blockquote>
-<p>Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.</p>
-      </p>
-      <p><strong>Version:</strong>
-        1.0.5
-      </p>
-      <p><strong>Author:</strong>
-        Andr&#233; Malo
-      </p>
-</div><!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Functions</span></td>
-</tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"><tt class="rst-docutils literal">str</tt></span>
-    </td><td class="summary">
-      <table width="100%" cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td><span class="summary-sig"><a href="rcssmin-module.html#cssmin" class="summary-sig-name">cssmin</a>(<span class="summary-sig-arg">style</span>,
-        <span class="summary-sig-arg">keep_bang_comments</span>=<span class="summary-sig-default">False</span>)</span><br />
-      Minify CSS.</td>
-          <td align="right" valign="top">
-            <span class="codelink"><a href="rcssmin-pysrc.html#cssmin">source&nbsp;code</a></span>
-            
-          </td>
-        </tr>
-      </table>
-      
-    </td>
-  </tr>
-</table>
-<!-- ==================== FUNCTION DETAILS ==================== -->
-<a name="section-FunctionDetails"></a>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Function Details</span></td>
-</tr>
-</table>
-<a name="cssmin"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
-  <table width="100%" cellpadding="0" cellspacing="0" border="0">
-  <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">cssmin</span>(<span class="sig-arg">style</span>,
-        <span class="sig-arg">keep_bang_comments</span>=<span class="sig-default">False</span>)</span>
-  </h3>
-  </td><td align="right" valign="top"
-    ><span class="codelink"><a href="rcssmin-pysrc.html#cssmin">source&nbsp;code</a></span>&nbsp;
-    </td>
-  </tr></table>
-  
-  Minify CSS.
-  <dl class="fields">
-    <dt>Parameters:</dt>
-    <dd><ul class="nomargin-top">
-        <li><strong class="pname"><code>style</code></strong> (<tt class="rst-docutils literal">str</tt>) - CSS to minify</li>
-        <li><strong class="pname"><code>keep_bang_comments</code></strong> (<tt class="rst-docutils literal">bool</tt>) - Keep comments starting with an exclamation mark? (<tt class="rst-docutils literal"><span class="pre">/*!...*/</span></tt>)</li>
-    </ul></dd>
-    <dt>Returns: <tt class="rst-docutils literal">str</tt></dt>
-        <dd>Minified style</dd>
-  </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/rcssmin-pysrc.html b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/rcssmin-pysrc.html
deleted file mode 100644
index 6856bac..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/rcssmin-pysrc.html
+++ /dev/null
@@ -1,477 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>rcssmin</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">
-      <span class="breadcrumbs">
-        Module&nbsp;rcssmin
-      </span>
-    </td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="rcssmin-module.html">Module rcssmin</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno">  1</tt>  <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
-<a name="L2"></a><tt class="py-lineno">  2</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: ascii -*-</tt> </tt>
-<a name="L3"></a><tt class="py-lineno">  3</tt>  <tt class="py-line"><tt class="py-docstring">r"""</tt> </tt>
-<a name="L4"></a><tt class="py-lineno">  4</tt>  <tt class="py-line"><tt class="py-docstring">==============</tt> </tt>
-<a name="L5"></a><tt class="py-lineno">  5</tt>  <tt class="py-line"><tt class="py-docstring"> CSS Minifier</tt> </tt>
-<a name="L6"></a><tt class="py-lineno">  6</tt>  <tt class="py-line"><tt class="py-docstring">==============</tt> </tt>
-<a name="L7"></a><tt class="py-lineno">  7</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L8"></a><tt class="py-lineno">  8</tt>  <tt class="py-line"><tt class="py-docstring">CSS Minifier.</tt> </tt>
-<a name="L9"></a><tt class="py-lineno">  9</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L10"></a><tt class="py-lineno"> 10</tt>  <tt class="py-line"><tt class="py-docstring">The minifier is based on the semantics of the `YUI compressor`_\\, which</tt> </tt>
-<a name="L11"></a><tt class="py-lineno"> 11</tt>  <tt class="py-line"><tt class="py-docstring">itself is based on `the rule list by Isaac Schlueter`_\\.</tt> </tt>
-<a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"><tt class="py-docstring">:Copyright:</tt> </tt>
-<a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-docstring"> Copyright 2011 - 2014</tt> </tt>
-<a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-docstring"> Andr\xe9 Malo or his licensors, as applicable</tt> </tt>
-<a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-docstring">:License:</tt> </tt>
-<a name="L19"></a><tt class="py-lineno"> 19</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"><tt class="py-docstring"> Licensed under the Apache License, Version 2.0 (the "License");</tt> </tt>
-<a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"><tt class="py-docstring"> you may not use this file except in compliance with the License.</tt> </tt>
-<a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line"><tt class="py-docstring"> You may obtain a copy of the License at</tt> </tt>
-<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line"><tt class="py-docstring">     http://www.apache.org/licenses/LICENSE-2.0</tt> </tt>
-<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line"><tt class="py-docstring"> Unless required by applicable law or agreed to in writing, software</tt> </tt>
-<a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line"><tt class="py-docstring"> distributed under the License is distributed on an "AS IS" BASIS,</tt> </tt>
-<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-docstring"> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</tt> </tt>
-<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-docstring"> See the License for the specific language governing permissions and</tt> </tt>
-<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-docstring"> limitations under the License.</tt> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-docstring">This module is a re-implementation aiming for speed instead of maximum</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-docstring">compression, so it can be used at runtime (rather than during a preprocessing</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-docstring">step). RCSSmin does syntactical compression only (removing spaces, comments</tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-docstring">and possibly semicolons). It does not provide semantic compression (like</tt> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-docstring">removing empty blocks, collapsing redundant properties etc). It does, however,</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-docstring">support various CSS hacks (by keeping them working as intended).</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-docstring">Here's a feature list:</tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-docstring">- Strings are kept, except that escaped newlines are stripped</tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt class="py-docstring">- Space/Comments before the very end or before various characters are</tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-docstring">  stripped: ``:{});=&gt;+],!`` (The colon (``:``) is a special case, a single</tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-docstring">  space is kept if it's outside a ruleset.)</tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-docstring">- Space/Comments at the very beginning or after various characters are</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-docstring">  stripped: ``{}(=:&gt;+[,!``</tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-docstring">- Optional space after unicode escapes is kept, resp. replaced by a simple</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-docstring">  space</tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-docstring">- whitespaces inside ``url()`` definitions are stripped</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-docstring">- Comments starting with an exclamation mark (``!``) can be kept optionally.</tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-docstring">- All other comments and/or whitespace characters are replaced by a single</tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-docstring">  space.</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-docstring">- Multiple consecutive semicolons are reduced to one</tt> </tt>
-<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-docstring">- The last semicolon within a ruleset is stripped</tt> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-docstring">- CSS Hacks supported:</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-docstring">  - IE7 hack (``&gt;/**/``)</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-docstring">  - Mac-IE5 hack (``/*\\*/.../**/``)</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">  - The boxmodelhack is supported naturally because it relies on valid CSS2</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring">    strings</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-docstring">  - Between ``:first-line`` and the following comma or curly brace a space is</tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring">    inserted. (apparently it's needed for IE6)</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">  - Same for ``:first-letter``</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-docstring">rcssmin.c is a reimplementation of rcssmin.py in C and improves runtime up to</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-docstring">factor 100 or so (depending on the input). docs/BENCHMARKS in the source</tt> </tt>
-<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-docstring">distribution contains the details.</tt> </tt>
-<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt class="py-docstring">Both python 2 (&gt;= 2.4) and python 3 are supported.</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-docstring">.. _YUI compressor: https://github.com/yui/yuicompressor/</tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-docstring">.. _the rule list by Isaac Schlueter: https://github.com/isaacs/cssmin/</tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-0" class="py-name" targets="Variable rcssmin.__doc__=rcssmin-module.html#__doc__"><a title="rcssmin.__doc__" class="py-name" href="#" onclick="return doclink('link-0', '__doc__', 'link-0');">__doc__</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line">    <tt class="py-comment"># pylint: disable = W0622</tt> </tt>
-<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">    <tt id="link-1" class="py-name"><a title="rcssmin.__doc__" class="py-name" href="#" onclick="return doclink('link-1', '__doc__', 'link-0');">__doc__</a></tt> <tt class="py-op">=</tt> <tt id="link-2" class="py-name"><a title="rcssmin.__doc__" class="py-name" href="#" onclick="return doclink('link-2', '__doc__', 'link-0');">__doc__</a></tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'ascii'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'unicode_escape'</tt><tt class="py-op">)</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-name">__author__</tt> <tt class="py-op">=</tt> <tt class="py-string">r"Andr\xe9 Malo"</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'ascii'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'unicode_escape'</tt><tt class="py-op">)</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-name">__docformat__</tt> <tt class="py-op">=</tt> <tt class="py-string">"restructuredtext en"</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable rcssmin.__license__=rcssmin-module.html#__license__"><a title="rcssmin.__license__" class="py-name" href="#" onclick="return doclink('link-3', '__license__', 'link-3');">__license__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"Apache License, Version 2.0"</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-string">'1.0.5'</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-name">__all__</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'cssmin'</tt><tt class="py-op">]</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_re</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"> </tt>
-<a name="_make_cssmin"></a><div id="_make_cssmin-def"><a name="L87"></a><tt class="py-lineno"> 87</tt> <a class="py-toggle" href="#" id="_make_cssmin-toggle" onclick="return toggle('_make_cssmin');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="rcssmin-module.html#_make_cssmin">_make_cssmin</a><tt class="py-op">(</tt><tt class="py-param">python_only</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_make_cssmin-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_make_cssmin-expanded"><a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">    Generate CSS minifier.</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring">    :Parameters:</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-docstring">      `python_only` : ``bool``</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"><tt class="py-docstring">        Use only the python variant. If true, the c extension is not even</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-docstring">        tried to be loaded.</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt class="py-docstring">    :Return: Minifier</tt> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-docstring">    :Rtype: ``callable``</tt> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">    <tt class="py-comment"># pylint: disable = R0912, R0914, W0612</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">python_only</tt><tt class="py-op">:</tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">            <tt class="py-keyword">import</tt> <tt class="py-name">_rcssmin</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">_rcssmin</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Function rcssmin.cssmin()=rcssmin-module.html#cssmin"><a title="rcssmin.cssmin" class="py-name" href="#" onclick="return doclink('link-4', 'cssmin', 'link-4');">cssmin</a></tt> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line"> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">    <tt class="py-name">nl</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:[\n\f]|\r\n?)'</tt>  <tt class="py-comment"># pylint: disable = C0103</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">    <tt class="py-name">spacechar</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[\r\n\f\040\t]'</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line"> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">    <tt class="py-name">unicoded</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[0-9a-fA-F]{1,6}(?:[\040\n\t\f]|\r\n?)?'</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">    <tt class="py-name">escaped</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[^\n\r\f0-9a-fA-F]'</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">    <tt class="py-name">escape</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:\\(?:%(unicoded)s|%(escaped)s))'</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line"> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">    <tt class="py-name">nmchar</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[^\000-\054\056\057\072-\100\133-\136\140\173-\177]'</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">    <tt class="py-comment">#nmstart = r'[^\000-\100\133-\136\140\173-\177]'</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">    <tt class="py-comment">#ident = (r'(?:'</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">    <tt class="py-comment">#    r'-?(?:%(nmstart)s|%(escape)s)%(nmchar)s*(?:%(escape)s%(nmchar)s*)*'</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">    <tt class="py-comment">#r')') % locals()</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line"> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">    <tt class="py-name">comment</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)'</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">    <tt class="py-comment"># only for specific purposes. The bang is grouped:</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">    <tt class="py-name">_bang_comment</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:/\*(!?)[^*]*\*+(?:[^/*][^*]*\*+)*/)'</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">    <tt class="py-name">string1</tt> <tt class="py-op">=</tt> \ </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">        <tt class="py-string">r'(?:\047[^\047\\\r\n\f]*(?:\\[^\r\n\f][^\047\\\r\n\f]*)*\047)'</tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">    <tt class="py-name">string2</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:"[^"\\\r\n\f]*(?:\\[^\r\n\f][^"\\\r\n\f]*)*")'</tt> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line">    <tt class="py-name">strings</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:%s|%s)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">string1</tt><tt class="py-op">,</tt> <tt class="py-name">string2</tt><tt class="py-op">)</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">    <tt class="py-name">nl_string1</tt> <tt class="py-op">=</tt> \ </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">        <tt class="py-string">r'(?:\047[^\047\\\r\n\f]*(?:\\(?:[^\r]|\r\n?)[^\047\\\r\n\f]*)*\047)'</tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line">    <tt class="py-name">nl_string2</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:"[^"\\\r\n\f]*(?:\\(?:[^\r]|\r\n?)[^"\\\r\n\f]*)*")'</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line">    <tt class="py-name">nl_strings</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:%s|%s)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">nl_string1</tt><tt class="py-op">,</tt> <tt class="py-name">nl_string2</tt><tt class="py-op">)</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line">    <tt class="py-name">uri_nl_string1</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:\047[^\047\\]*(?:\\(?:[^\r]|\r\n?)[^\047\\]*)*\047)'</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">    <tt class="py-name">uri_nl_string2</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:"[^"\\]*(?:\\(?:[^\r]|\r\n?)[^"\\]*)*")'</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">    <tt class="py-name">uri_nl_strings</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:%s|%s)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">uri_nl_string1</tt><tt class="py-op">,</tt> <tt class="py-name">uri_nl_string2</tt><tt class="py-op">)</tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line"> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">    <tt class="py-name">nl_escaped</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:\\%(nl)s)'</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line"> </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line">    <tt class="py-name">space</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:%(spacechar)s|%(comment)s)'</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line"> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">    <tt class="py-name">ie7hack</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:&gt;/\*\*/)'</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">    <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">r'(?:'</tt> </tt>
-<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">        <tt class="py-comment"># noqa pylint: disable = C0330</tt> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">        <tt class="py-string">r'(?:[^\000-\040"\047()\\\177]*'</tt> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">            <tt class="py-string">r'(?:%(escape)s[^\000-\040"\047()\\\177]*)*)'</tt> </tt>
-<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">        <tt class="py-string">r'(?:'</tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">            <tt class="py-string">r'(?:%(spacechar)s+|%(nl_escaped)s+)'</tt> </tt>
-<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">            <tt class="py-string">r'(?:'</tt> </tt>
-<a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line">                <tt class="py-string">r'(?:[^\000-\040"\047()\\\177]|%(escape)s|%(nl_escaped)s)'</tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line">                <tt class="py-string">r'[^\000-\040"\047()\\\177]*'</tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line">                <tt class="py-string">r'(?:%(escape)s[^\000-\040"\047()\\\177]*)*'</tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line">            <tt class="py-string">r')+'</tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line">        <tt class="py-string">r')*'</tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line">    <tt class="py-string">r')'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line">    <tt class="py-name">nl_unesc_sub</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-name">nl_escaped</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"> </tt>
-<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line">    <tt class="py-name">uri_space_sub</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">        <tt class="py-string">r'(%(escape)s+)|%(spacechar)s+|%(nl_escaped)s+'</tt> </tt>
-<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">    <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">    <tt class="py-name">uri_space_subber</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt> </tt>
-<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line"> </tt>
-<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">    <tt class="py-name">space_sub_simple</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">        <tt class="py-string">r'[\r\n\f\040\t;]+|(%(comment)s+)'</tt> </tt>
-<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">    <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">    <tt class="py-name">space_sub_banged</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line">        <tt class="py-string">r'[\r\n\f\040\t;]+|(%(_bang_comment)s+)'</tt> </tt>
-<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">    <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line"> </tt>
-<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line">    <tt class="py-name">post_esc_sub</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">r'[\r\n\f\t]+'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line"> </tt>
-<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">    <tt class="py-name">main_sub</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line">        <tt class="py-comment"># noqa pylint: disable = C0330</tt> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">        <tt class="py-string">r'([^\\"\047u&gt;@\r\n\f\040\t/;:{}]+)'</tt> </tt>
-<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=[{}(=:&gt;+[,!])(%(space)s+)'</tt> </tt>
-<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">        <tt class="py-string">r'|^(%(space)s+)'</tt> </tt>
-<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(space)s+)(?=(([:{});=&gt;+\],!])|$)?)'</tt> </tt>
-<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">        <tt class="py-string">r'|;(%(space)s*(?:;%(space)s*)*)(?=(\})?)'</tt> </tt>
-<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">        <tt class="py-string">r'|(\{)'</tt> </tt>
-<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">        <tt class="py-string">r'|(\})'</tt> </tt>
-<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(strings)s)'</tt> </tt>
-<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;!%(nmchar)s)url\(%(spacechar)s*('</tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">                <tt class="py-string">r'%(uri_nl_strings)s'</tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">                <tt class="py-string">r'|%(uri)s'</tt> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">            <tt class="py-string">r')%(spacechar)s*\)'</tt> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line">        <tt class="py-string">r'|(@(?:'</tt> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">              <tt class="py-string">r'[mM][eE][dD][iI][aA]'</tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line">              <tt class="py-string">r'|[sS][uU][pP][pP][oO][rR][tT][sS]'</tt> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line">              <tt class="py-string">r'|[dD][oO][cC][uU][mM][eE][nN][tT]'</tt> </tt>
-<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">              <tt class="py-string">r'|(?:-(?:'</tt> </tt>
-<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line">                  <tt class="py-string">r'[wW][eE][bB][kK][iI][tT]|[mM][oO][zZ]|[oO]|[mM][sS]'</tt> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line">                <tt class="py-string">r')-)?'</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">                <tt class="py-string">r'[kK][eE][yY][fF][rR][aA][mM][eE][sS]'</tt> </tt>
-<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line">            <tt class="py-string">r'))(?!%(nmchar)s)'</tt> </tt>
-<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(ie7hack)s)(%(space)s*)'</tt> </tt>
-<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">        <tt class="py-string">r'|(:[fF][iI][rR][sS][tT]-[lL]'</tt> </tt>
-<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">            <tt class="py-string">r'(?:[iI][nN][eE]|[eE][tT][tT][eE][rR]))'</tt> </tt>
-<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*)(?=[{,])'</tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(nl_strings)s)'</tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(escape)s[^\\"\047u&gt;@\r\n\f\040\t/;:{}]*)'</tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">    <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line"> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line">    <tt class="py-comment">#print main_sub.__self__.pattern</tt> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line"> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">main_subber</tt><tt class="py-op">(</tt><tt class="py-param">keep_bang_comments</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">        <tt class="py-docstring">""" Make main subber """</tt> </tt>
-<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">        <tt class="py-name">in_macie5</tt><tt class="py-op">,</tt> <tt class="py-name">in_rule</tt><tt class="py-op">,</tt> <tt class="py-name">at_group</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line"> </tt>
-<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">keep_bang_comments</tt><tt class="py-op">:</tt> </tt>
-<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">            <tt class="py-name">space_sub</tt> <tt class="py-op">=</tt> <tt class="py-name">space_sub_banged</tt> </tt>
-<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"> </tt>
-<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">space_subber</tt><tt class="py-op">(</tt><tt class="py-param">match</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">                <tt class="py-docstring">""" Space|Comment subber """</tt> </tt>
-<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">lastindex</tt><tt class="py-op">:</tt> </tt>
-<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line">                    <tt class="py-name">group1</tt><tt class="py-op">,</tt> <tt class="py-name">group2</tt> <tt class="py-op">=</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">group2</tt><tt class="py-op">:</tt> </tt>
-<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">group1</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">r'\*/'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">                            <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line">                        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line">                            <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-name">group1</tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line">                    <tt class="py-keyword">elif</tt> <tt class="py-name">group1</tt><tt class="py-op">:</tt> </tt>
-<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">group1</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">r'\*/'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line">                            <tt class="py-keyword">if</tt> <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line">                                <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line">                            <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line">                            <tt class="py-keyword">return</tt> <tt class="py-string">r'/*\*/'</tt> </tt>
-<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line">                        <tt class="py-keyword">elif</tt> <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line">                            <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line">                            <tt class="py-keyword">return</tt> <tt class="py-string">'/**/'</tt> </tt>
-<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-</div><a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line">            <tt class="py-name">space_sub</tt> <tt class="py-op">=</tt> <tt class="py-name">space_sub_simple</tt> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line"> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">space_subber</tt><tt class="py-op">(</tt><tt class="py-param">match</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line">                <tt class="py-docstring">""" Space|Comment subber """</tt> </tt>
-<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">lastindex</tt><tt class="py-op">:</tt> </tt>
-<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line">                    <tt class="py-keyword">if</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">r'\*/'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">                        <tt class="py-keyword">if</tt> <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line">                            <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line">                        <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-string">r'/*\*/'</tt> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">                    <tt class="py-keyword">elif</tt> <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">                        <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">                        <tt class="py-keyword">return</tt> <tt class="py-string">'/**/'</tt> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-</div><a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line"> </tt>
-<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">fn_space_post</tt><tt class="py-op">(</tt><tt class="py-param">group</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">            <tt class="py-docstring">""" space with token after """</tt> </tt>
-<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">5</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-op">(</tt> </tt>
-<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">                    <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">6</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">':'</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">in_rule</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">at_group</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line"> </tt>
-<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">fn_semicolon</tt><tt class="py-op">(</tt><tt class="py-param">group</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">            <tt class="py-docstring">""" ; handler """</tt> </tt>
-<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">';'</tt> <tt class="py-op">+</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">7</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line"> </tt>
-<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">fn_semicolon2</tt><tt class="py-op">(</tt><tt class="py-param">group</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line">            <tt class="py-docstring">""" ; handler """</tt> </tt>
-<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">in_rule</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">7</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">';'</tt> <tt class="py-op">+</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">7</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line"> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">fn_open</tt><tt class="py-op">(</tt><tt class="py-param">_</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">            <tt class="py-docstring">""" { handler """</tt> </tt>
-<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">at_group</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">                <tt class="py-name">at_group</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line">                <tt class="py-name">in_rule</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">'{'</tt> </tt>
-</div><a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line"> </tt>
-<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">fn_close</tt><tt class="py-op">(</tt><tt class="py-param">_</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">            <tt class="py-docstring">""" } handler """</tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">            <tt class="py-name">in_rule</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">'}'</tt> </tt>
-</div><a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line"> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">fn_at_group</tt><tt class="py-op">(</tt><tt class="py-param">group</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">            <tt class="py-docstring">""" @xxx group handler """</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">            <tt class="py-name">at_group</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">13</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line"> </tt>
-<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">fn_ie7hack</tt><tt class="py-op">(</tt><tt class="py-param">group</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">            <tt class="py-docstring">""" IE7 Hack handler """</tt> </tt>
-<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">in_rule</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-keyword">not</tt> <tt class="py-name">at_group</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">                <tt class="py-name">in_macie5</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">14</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">15</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">'&gt;'</tt> <tt class="py-op">+</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">15</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line"> </tt>
-<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">        <tt class="py-name">table</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line">            <tt class="py-comment"># noqa pylint: disable = C0330</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line">            <tt class="py-name">fn_space_post</tt><tt class="py-op">,</tt>                       <tt class="py-comment"># space with token after</tt> </tt>
-<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line">            <tt class="py-name">fn_space_post</tt><tt class="py-op">,</tt>                       <tt class="py-comment"># space with token after</tt> </tt>
-<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">            <tt class="py-name">fn_space_post</tt><tt class="py-op">,</tt>                       <tt class="py-comment"># space with token after</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line">            <tt class="py-name">fn_semicolon</tt><tt class="py-op">,</tt>                        <tt class="py-comment"># semicolon</tt> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line">            <tt class="py-name">fn_semicolon2</tt><tt class="py-op">,</tt>                       <tt class="py-comment"># semicolon</tt> </tt>
-<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line">            <tt class="py-name">fn_open</tt><tt class="py-op">,</tt>                             <tt class="py-comment"># {</tt> </tt>
-<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line">            <tt class="py-name">fn_close</tt><tt class="py-op">,</tt>                            <tt class="py-comment"># }</tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">            <tt class="py-keyword">lambda</tt> <tt class="py-name">g</tt><tt class="py-op">:</tt> <tt class="py-name">g</tt><tt class="py-op">(</tt><tt class="py-number">11</tt><tt class="py-op">)</tt><tt class="py-op">,</tt>                     <tt class="py-comment"># string</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line">            <tt class="py-keyword">lambda</tt> <tt class="py-name">g</tt><tt class="py-op">:</tt> <tt class="py-string">'url(%s)'</tt> <tt class="py-op">%</tt> <tt class="py-name">uri_space_sub</tt><tt class="py-op">(</tt><tt class="py-name">uri_space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">g</tt><tt class="py-op">(</tt><tt class="py-number">12</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line">                                                 <tt class="py-comment"># url(...)</tt> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">            <tt class="py-name">fn_at_group</tt><tt class="py-op">,</tt>                         <tt class="py-comment"># @xxx expecting {...}</tt> </tt>
-<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line">            <tt class="py-name">fn_ie7hack</tt><tt class="py-op">,</tt>                          <tt class="py-comment"># ie7hack</tt> </tt>
-<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line">            <tt class="py-keyword">lambda</tt> <tt class="py-name">g</tt><tt class="py-op">:</tt> <tt class="py-name">g</tt><tt class="py-op">(</tt><tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">g</tt><tt class="py-op">(</tt><tt class="py-number">17</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line">                                                 <tt class="py-comment"># :first-line|letter followed</tt> </tt>
-<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line">                                                 <tt class="py-comment"># by [{,] (apparently space</tt> </tt>
-<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line">                                                 <tt class="py-comment"># needed for IE6)</tt> </tt>
-<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line">            <tt class="py-keyword">lambda</tt> <tt class="py-name">g</tt><tt class="py-op">:</tt> <tt class="py-name">nl_unesc_sub</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">g</tt><tt class="py-op">(</tt><tt class="py-number">18</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt>   <tt class="py-comment"># nl_string</tt> </tt>
-<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line">            <tt class="py-keyword">lambda</tt> <tt class="py-name">g</tt><tt class="py-op">:</tt> <tt class="py-name">post_esc_sub</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-name">g</tt><tt class="py-op">(</tt><tt class="py-number">19</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt>  <tt class="py-comment"># escape</tt> </tt>
-<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line"> </tt>
-<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">func</tt><tt class="py-op">(</tt><tt class="py-param">match</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line">            <tt class="py-docstring">""" Main subber """</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line">            <tt class="py-name">idx</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt> <tt class="py-op">=</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">lastindex</tt><tt class="py-op">,</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">group</tt> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">idx</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">3</tt><tt class="py-op">:</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">table</tt><tt class="py-op">[</tt><tt class="py-name">idx</tt><tt class="py-op">]</tt><tt class="py-op">(</tt><tt class="py-name">group</tt><tt class="py-op">)</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"> </tt>
-<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line">            <tt class="py-comment"># shortcuts for frequent operations below:</tt> </tt>
-<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line">            <tt class="py-keyword">elif</tt> <tt class="py-name">idx</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt>     <tt class="py-comment"># not interesting</tt> </tt>
-<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line">            <tt class="py-comment">#else: # space with token before or at the beginning</tt> </tt>
-<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">space_sub</tt><tt class="py-op">(</tt><tt class="py-name">space_subber</tt><tt class="py-op">,</tt> <tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-name">idx</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"> </tt>
-<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">func</tt> </tt>
-</div><a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line"> </tt>
-<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">cssmin</tt><tt class="py-op">(</tt><tt class="py-param">style</tt><tt class="py-op">,</tt> <tt class="py-param">keep_bang_comments</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt>  <tt class="py-comment"># pylint: disable = W0621</tt> </tt>
-<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">        <tt class="py-docstring">"""</tt> </tt>
-<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line"><tt class="py-docstring">        Minify CSS.</tt> </tt>
-<a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line"><tt class="py-docstring">        :Parameters:</tt> </tt>
-<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line"><tt class="py-docstring">          `style` : ``str``</tt> </tt>
-<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line"><tt class="py-docstring">            CSS to minify</tt> </tt>
-<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line"><tt class="py-docstring">          `keep_bang_comments` : ``bool``</tt> </tt>
-<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line"><tt class="py-docstring">            Keep comments starting with an exclamation mark? (``/*!...*/``)</tt> </tt>
-<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line"><tt class="py-docstring">        :Return: Minified style</tt> </tt>
-<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line"><tt class="py-docstring">        :Rtype: ``str``</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
-<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">main_sub</tt><tt class="py-op">(</tt><tt class="py-name">main_subber</tt><tt class="py-op">(</tt><tt class="py-name">keep_bang_comments</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">style</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-5" class="py-name"><a title="rcssmin.cssmin" class="py-name" href="#" onclick="return doclink('link-5', 'cssmin', 'link-4');">cssmin</a></tt> </tt>
-</div><a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt id="link-6" class="py-name"><a title="rcssmin.cssmin" class="py-name" href="#" onclick="return doclink('link-6', 'cssmin', 'link-4');">cssmin</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_make_cssmin</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
-<a name="main"></a><div id="main-def"><a name="L359"></a><tt class="py-lineno">359</tt> <a class="py-toggle" href="#" id="main-toggle" onclick="return toggle('main');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="rcssmin-module.html#main">main</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="main-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="main-expanded"><a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line">        <tt class="py-docstring">""" Main """</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line">        <tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_sys</tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">        <tt class="py-name">keep_bang_comments</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line">            <tt class="py-string">'-b'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line">            <tt class="py-keyword">or</tt> <tt class="py-string">'-bp'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line">            <tt class="py-keyword">or</tt> <tt class="py-string">'-pb'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'-p'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'-bp'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> \ </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line">                <tt class="py-keyword">or</tt> <tt class="py-string">'-pb'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">            <tt class="py-keyword">global</tt> <tt id="link-7" class="py-name"><a title="rcssmin.cssmin" class="py-name" href="#" onclick="return doclink('link-7', 'cssmin', 'link-4');">cssmin</a></tt>  <tt class="py-comment"># pylint: disable = W0603</tt> </tt>
-<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">            <tt id="link-8" class="py-name"><a title="rcssmin.cssmin" class="py-name" href="#" onclick="return doclink('link-8', 'cssmin', 'link-4');">cssmin</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_make_cssmin</tt><tt class="py-op">(</tt><tt class="py-name">python_only</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">        <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt id="link-9" class="py-name"><a title="rcssmin.cssmin" class="py-name" href="#" onclick="return doclink('link-9', 'cssmin', 'link-4');">cssmin</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">            <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">keep_bang_comments</tt><tt class="py-op">=</tt><tt class="py-name">keep_bang_comments</tt> </tt>
-<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">        <tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">    <tt class="py-name">main</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rcssmin/" target="_top">Visit rcssmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/redirect.html b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/redirect.html
deleted file mode 100644
index 95728fd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/docs/apidoc/redirect.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<html><head><title>Epydoc Redirect Page</title>
-<meta http-equiv="cache-control" content="no-cache" />
-<meta http-equiv="expires" content="0" />
-<meta http-equiv="pragma" content="no-cache" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-<body>
-<script type="text/javascript">
-<!--
-var pages = ["rcssmin-m"];
-var dottedName = get_anchor();
-if (dottedName) {
-    var target = redirect_url(dottedName);
-    if (target) window.location.replace(target);
-}
-// -->
-</script>
-
-<h3>Epydoc Auto-redirect page</h3>
-
-<p>When javascript is enabled, this page will redirect URLs of
-the form <tt>redirect.html#<i>dotted.name</i></tt> to the
-documentation for the object with the given fully-qualified
-dotted name.</p>
-<p><a id="message"> &nbsp; </a></p>
-
-<script type="text/javascript">
-<!--
-if (dottedName) {
-    var msg = document.getElementById("message");
-    msg.innerHTML = "No documentation found for <tt>"+
-                    dottedName+"</tt>";
-}
-// -->
-</script>
-
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/package.cfg b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/package.cfg
deleted file mode 100644
index c09bbd0..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/package.cfg
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright 2009 - 2014
-# André Malo or his licensors, as applicable
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-[package]
-name = rcssmin
-
-python.min = 2.3
-python.max = 3.4
-pypy.min = 1.9
-pypy.max = 2.2
-jython.min = 2.5
-jython.max = 2.7
-
-version.number = 1.0.5
-
-author.name = André Malo
-author.email = nd@perlig.de
-#maintainer.name =
-#maintainer.email = 
-url.homepage = http://opensource.perlig.de/rcssmin/
-url.download = http://storage.perlig.de/rcssmin/
-
-
-[docs]
-meta.classifiers = docs/CLASSIFIERS
-meta.description = docs/DESCRIPTION
-meta.summary = docs/SUMMARY
-meta.provides = docs/PROVIDES
-meta.license = LICENSE
-meta.keywords =
-    CSS
-    Minimization
-
-apidoc.dir = docs/apidoc
-apidoc.strip = 1
-#apidoc.ignore =
-
-#userdoc.dir = docs/userdoc
-#userdoc.strip = 1
-#userdoc.ignore =
-#    .buildinfo
-
-#examples.dir = docs/examples
-#examples.strip = 1
-#examples.ignore =
-
-#man =
-
-extra =
-    README.rst
-    docs/CHANGES
-    docs/BENCHMARKS
-
-
-[manifest]
-#packages.lib = .
-#packages.collect =
-modules = rcssmin
-
-packages.extra =
-    _setup.py2.term
-    _setup.py3.term
-
-#scripts =
-
-dist =
-    tests
-    run_tests.py
-    bench
-    bench.sh
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.c b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.c
deleted file mode 100644
index a722fc2..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.c
+++ /dev/null
@@ -1,1163 +0,0 @@
-/*
- * Copyright 2011 - 2014
- * Andr\xe9 Malo or his licensors, as applicable
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "cext.h"
-EXT_INIT_FUNC;
-
-#ifdef EXT3
-typedef Py_UNICODE rchar;
-#else
-typedef unsigned char rchar;
-#endif
-#define U(c) ((rchar)(c))
-
-typedef struct {
-    const rchar *start;
-    const rchar *sentinel;
-    const rchar *tsentinel;
-    Py_ssize_t at_group;
-    int in_macie5;
-    int in_rule;
-    int keep_bang_comments;
-} rcssmin_ctx_t;
-
-typedef enum {
-    NEED_SPACE_MAYBE = 0,
-    NEED_SPACE_NEVER
-} need_space_flag;
-
-
-#define RCSSMIN_DULL_BIT         (1 << 0)
-#define RCSSMIN_HEX_BIT          (1 << 1)
-#define RCSSMIN_ESC_BIT          (1 << 2)
-#define RCSSMIN_SPACE_BIT        (1 << 3)
-#define RCSSMIN_STRING_DULL_BIT  (1 << 4)
-#define RCSSMIN_NMCHAR_BIT       (1 << 5)
-#define RCSSMIN_URI_DULL_BIT     (1 << 6)
-#define RCSSMIN_PRE_CHAR_BIT     (1 << 7)
-#define RCSSMIN_POST_CHAR_BIT    (1 << 8)
-
-static const unsigned short rcssmin_charmask[128] = {
-     21,  21,  21,  21,  21,  21,  21,  21,
-     21,  28,   8,  21,   8,   8,  21,  21,
-     21,  21,  21,  21,  21,  21,  21,  21,
-     21,  21,  21,  21,  21,  21,  21,  21,
-     28, 469,   4,  85,  85,  85,  85,   4,
-    149, 277,  85, 469, 469, 117,  85,  84,
-    115, 115, 115, 115, 115, 115, 115, 115,
-    115, 115, 468, 340,  85, 469, 468,  85,
-     84, 115, 115, 115, 115, 115, 115, 117,
-    117, 117, 117, 117, 117, 117, 117, 117,
-    117, 117, 117, 117, 117, 117, 117, 117,
-    117, 117, 117, 213,   4, 341,  85, 117,
-     85, 115, 115, 115, 115, 115, 115, 117,
-    117, 117, 117, 117, 117, 117, 117, 117,
-    117, 117, 117, 117, 117, 116, 117, 117,
-    117, 117, 117, 468,  85, 468,  85,  21
-};
-
-#define RCSSMIN_IS_DULL(c) ((U(c) > 127) || \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_DULL_BIT))
-
-#define RCSSMIN_IS_HEX(c) ((U(c) <= 127) && \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_HEX_BIT))
-
-#define RCSSMIN_IS_ESC(c) ((U(c) > 127) || \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_ESC_BIT))
-
-#define RCSSMIN_IS_SPACE(c) ((U(c) <= 127) && \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_SPACE_BIT))
-
-#define RCSSMIN_IS_STRING_DULL(c) ((U(c) > 127) || \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_STRING_DULL_BIT))
-
-#define RCSSMIN_IS_NMCHAR(c) ((U(c) > 127) || \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_NMCHAR_BIT))
-
-#define RCSSMIN_IS_URI_DULL(c) ((U(c) > 127) || \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_URI_DULL_BIT))
-
-#define RCSSMIN_IS_PRE_CHAR(c) ((U(c) <= 127) && \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_PRE_CHAR_BIT))
-
-#define RCSSMIN_IS_POST_CHAR(c) ((U(c) <= 127) && \
-    (rcssmin_charmask[U(c) & 0x7F] & RCSSMIN_POST_CHAR_BIT))
-
-
-static const rchar pattern_url[] = {
-    /*U('u'),*/ U('r'), U('l'), U('(')
-};
-
-static const rchar pattern_ie7[] = {
-    /*U('>'),*/ U('/'), U('*'), U('*'), U('/')
-};
-
-static const rchar pattern_media[] = {
-    U('m'), U('e'), U('d'), U('i'), U('a'),
-    U('M'), U('E'), U('D'), U('I'), U('A')
-};
-
-static const rchar pattern_document[] = {
-    U('d'), U('o'), U('c'), U('u'), U('m'), U('e'), U('n'), U('t'),
-    U('D'), U('O'), U('C'), U('U'), U('M'), U('E'), U('N'), U('T')
-};
-
-static const rchar pattern_supports[] = {
-    U('s'), U('u'), U('p'), U('p'), U('o'), U('r'), U('t'), U('s'),
-    U('S'), U('U'), U('P'), U('P'), U('O'), U('R'), U('T'), U('S')
-};
-
-static const rchar pattern_keyframes[] = {
-    U('k'), U('e'), U('y'), U('f'), U('r'), U('a'), U('m'), U('e'), U('s'),
-    U('K'), U('E'), U('Y'), U('F'), U('R'), U('A'), U('M'), U('E'), U('S')
-};
-
-static const rchar pattern_vendor_o[] = {
-    U('-'), U('o'), U('-'),
-    U('-'), U('O'), U('-')
-};
-
-static const rchar pattern_vendor_moz[] = {
-    U('-'), U('m'), U('o'), U('z'), U('-'),
-    U('-'), U('M'), U('O'), U('Z'), U('-')
-};
-
-static const rchar pattern_vendor_webkit[] = {
-    U('-'), U('w'), U('e'), U('b'), U('k'), U('i'), U('t'), U('-'),
-    U('-'), U('W'), U('E'), U('B'), U('K'), U('I'), U('T'), U('-')
-};
-
-static const rchar pattern_vendor_ms[] = {
-    U('-'), U('m'), U('s'), U('-'),
-    U('-'), U('M'), U('S'), U('-')
-};
-
-static const rchar pattern_first[] = {
-    U('f'), U('i'), U('r'), U('s'), U('t'), U('-'), U('l'),
-    U('F'), U('I'), U('R'), U('S'), U('T'), U('-'), U('L')
-};
-
-static const rchar pattern_line[] = {
-    U('i'), U('n'), U('e'),
-    U('I'), U('N'), U('E'),
-};
-
-static const rchar pattern_letter[] = {
-    U('e'), U('t'), U('t'), U('e'), U('r'),
-    U('E'), U('T'), U('T'), U('E'), U('R')
-};
-
-static const rchar pattern_macie5_init[] = {
-    U('/'), U('*'), U('\\'), U('*'), U('/')
-};
-
-static const rchar pattern_macie5_exit[] = {
-    U('/'), U('*'), U('*'), U('/')
-};
-
-/*
- * Match a pattern (and copy immediately to target)
- */
-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wstrict-overflow"
-#endif
-static int
-copy_match(const rchar *pattern, const rchar *psentinel,
-           const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-    rchar c;
-
-    while (pattern < psentinel
-           && source < ctx->sentinel && target < ctx->tsentinel
-           && ((c = *source++) == *pattern++))
-        *target++ = c;
-
-    *source_ = source;
-    *target_ = target;
-
-    return (pattern == psentinel);
-}
-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
-#pragma GCC diagnostic pop
-#endif
-
-#define MATCH(PAT, source, target, ctx) (                              \
-    copy_match(pattern_##PAT,                                          \
-               pattern_##PAT + sizeof(pattern_##PAT) / sizeof(rchar),  \
-               source, target, ctx)                                    \
-)
-
-
-/*
- * Match a pattern (and copy immediately to target) - CI version
- */
-static int
-copy_imatch(const rchar *pattern, const rchar *psentinel,
-            const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_, *pstart = pattern;
-    rchar *target = *target_;
-    rchar c;
-
-    while (pattern < psentinel
-           && source < ctx->sentinel && target < ctx->tsentinel
-           && ((c = *source++) == *pattern
-               || c == pstart[(pattern - pstart) + (psentinel - pstart)])) {
-        ++pattern;
-        *target++ = c;
-    }
-
-    *source_ = source;
-    *target_ = target;
-
-    return (pattern == psentinel);
-}
-
-#define IMATCH(PAT, source, target, ctx) (                                  \
-    copy_imatch(pattern_##PAT,                                              \
-                pattern_##PAT + sizeof(pattern_##PAT) / sizeof(rchar) / 2,  \
-                source, target, ctx)                                        \
-)
-
-
-/*
- * Copy characters
- */
-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wstrict-overflow"
-#endif
-static int
-copy(const rchar *source, const rchar *sentinel, rchar **target_,
-     rcssmin_ctx_t *ctx)
-{
-    rchar *target = *target_;
-
-    while (source < sentinel && target < ctx->tsentinel)
-        *target++ = *source++;
-
-    *target_ = target;
-
-    return (source == sentinel);
-}
-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
-#pragma GCC diagnostic pop
-#endif
-
-#define COPY_PAT(PAT, target, ctx) (                             \
-    copy(pattern_##PAT,                                          \
-         pattern_##PAT + sizeof(pattern_##PAT) / sizeof(rchar),  \
-         target, ctx)                                            \
-)
-
-
-/*
- * The ABORT macros work with known local variables!
- */
-#define ABORT_(RET) do {                                         \
-    if (source < ctx->sentinel && !(target < ctx->tsentinel)) {  \
-        *source_ = source;                                       \
-        *target_ = target;                                       \
-    }                                                            \
-    return RET;                                                  \
-} while(0)
-
-
-#define CRAPPY_C90_COMPATIBLE_EMPTY
-#define ABORT ABORT_(CRAPPY_C90_COMPATIBLE_EMPTY)
-#define RABORT(RET) ABORT_((RET))
-
-
-/*
- * Copy escape
- */
-static void
-copy_escape(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_, *hsentinel;
-    rchar *target = *target_;
-    rchar c;
-
-    *target++ = U('\\');
-    *target_ = target;
-
-    if (source < ctx->sentinel && target < ctx->tsentinel) {
-        c = *source++;
-        if (RCSSMIN_IS_ESC(c)) {
-            *target++ = c;
-        }
-        else if (RCSSMIN_IS_HEX(c)) {
-            *target++ = c;
-
-            /* 6 hex chars max, one we got already */
-            if (ctx->sentinel - source > 5)
-                hsentinel = source + 5;
-            else
-                hsentinel = ctx->sentinel;
-
-            while (source < hsentinel && target < ctx->tsentinel
-                   && (c = *source, RCSSMIN_IS_HEX(c))) {
-                ++source;
-                *target++ = c;
-            }
-
-            /* One optional space after */
-            if (source < ctx->sentinel && target < ctx->tsentinel) {
-                if (source == hsentinel)
-                    c = *source;
-                if (RCSSMIN_IS_SPACE(c)) {
-                    ++source;
-                    *target++ = U(' ');
-                    if (c == U('\r') && source < ctx->sentinel
-                        && *source == U('\n'))
-                        ++source;
-                }
-            }
-        }
-    }
-
-    *target_ = target;
-    *source_ = source;
-}
-
-
-/*
- * Copy string
- */
-static void
-copy_string(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-    rchar c, quote = source[-1];
-
-    *target++ = quote;
-    *target_ = target;
-
-    while (source < ctx->sentinel && target < ctx->tsentinel) {
-        c = *target++ = *source++;
-        if (RCSSMIN_IS_STRING_DULL(c))
-            continue;
-
-        switch (c) {
-        case U('\''): case U('"'):
-            if (c == quote) {
-                *target_ = target;
-                *source_ = source;
-                return;
-            }
-            continue;
-
-        case U('\\'):
-            if (source < ctx->sentinel && target < ctx->tsentinel) {
-                c = *source++;
-                switch (c) {
-                case U('\r'):
-                    if (source < ctx->sentinel && *source == U('\n'))
-                        ++source;
-                    /* fall through */
-
-                case U('\n'): case U('\f'):
-                    --target;
-                    break;
-
-                default:
-                    *target++ = c;
-                }
-            }
-            continue;
-        }
-        break; /* forbidden characters */
-    }
-
-    ABORT;
-}
-
-
-/*
- * Copy URI string
- */
-static int
-copy_uri_string(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-    rchar c, quote = source[-1];
-
-    *target++ = quote;
-    *target_ = target;
-
-    while (source < ctx->sentinel && target < ctx->tsentinel) {
-        c = *source++;
-        if (RCSSMIN_IS_SPACE(c))
-            continue;
-        *target++ = c;
-        if (RCSSMIN_IS_STRING_DULL(c))
-            continue;
-
-        switch (c) {
-        case U('\''): case U('"'):
-            if (c == quote) {
-                *target_ = target;
-                *source_ = source;
-                return 0;
-            }
-            continue;
-
-        case U('\\'):
-            if (source < ctx->sentinel && target < ctx->tsentinel) {
-                c = *source;
-                switch (c) {
-                case U('\r'):
-                    if ((source + 1) < ctx->sentinel && source[1] == U('\n'))
-                        ++source;
-                    /* fall through */
-
-                case U('\n'): case U('\f'):
-                    --target;
-                    ++source;
-                    break;
-
-                default:
-                    --target;
-                    copy_escape(&source, &target, ctx);
-                }
-            }
-            continue;
-        }
-
-        break; /* forbidden characters */
-    }
-
-    RABORT(-1);
-}
-
-
-/*
- * Copy URI (unquoted)
- */
-static int
-copy_uri_unquoted(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-    rchar c;
-
-    *target++ = source[-1];
-    *target_ = target;
-
-    while (source < ctx->sentinel && target < ctx->tsentinel) {
-        c = *source++;
-        if (RCSSMIN_IS_SPACE(c))
-            continue;
-        *target++ = c;
-        if (RCSSMIN_IS_URI_DULL(c))
-            continue;
-
-        switch (c) {
-
-        case U(')'):
-            *target_ = target - 1;
-            *source_ = source - 1;
-            return 0;
-
-        case U('\\'):
-            if (source < ctx->sentinel && target < ctx->tsentinel) {
-                c = *source;
-                switch (c) {
-                case U('\r'):
-                    if ((source + 1) < ctx->sentinel && source[1] == U('\n'))
-                        ++source;
-                    /* fall through */
-
-                case U('\n'): case U('\f'):
-                    --target;
-                    ++source;
-                    break;
-
-                default:
-                    --target;
-                    copy_escape(&source, &target, ctx);
-                }
-            }
-            continue;
-        }
-
-        break; /* forbidden characters */
-    }
-
-    RABORT(-1);
-}
-
-
-/*
- * Copy url
- */
-static void
-copy_url(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-    rchar c;
-
-    *target++ = U('u');
-    *target_ = target;
-
-    /* Must not be inside an identifier */
-    if ((source != ctx->start + 1) && RCSSMIN_IS_NMCHAR(source[-2]))
-        return;
-
-    if (!MATCH(url, &source, &target, ctx)
-        || !(source < ctx->sentinel && target < ctx->tsentinel))
-        ABORT;
-
-    while (source < ctx->sentinel && RCSSMIN_IS_SPACE(*source))
-        ++source;
-
-    if (!(source < ctx->sentinel))
-        ABORT;
-
-    c = *source++;
-    switch (c) {
-    case U('"'): case U('\''):
-        if (copy_uri_string(&source, &target, ctx) == -1)
-            ABORT;
-
-        while (source < ctx->sentinel && RCSSMIN_IS_SPACE(*source))
-            ++source;
-        break;
-
-    default:
-        if (copy_uri_unquoted(&source, &target, ctx) == -1)
-            ABORT;
-    }
-
-    if (!(source < ctx->sentinel && target < ctx->tsentinel))
-        ABORT;
-
-    if ((*target++ = *source++) != U(')'))
-        ABORT;
-
-    *target_ = target;
-    *source_ = source;
-}
-
-
-/*
- * Copy @-group
- */
-static void
-copy_at_group(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-
-    *target++ = U('@');
-    *target_ = target;
-
-#define REMATCH(what) ( \
-    source = *source_, \
-    target = *target_, \
-    IMATCH(what, &source, &target, ctx) \
-)
-#define CMATCH(what) IMATCH(what, &source, &target, ctx)
-
-    if ((  !CMATCH(media)
-        && !REMATCH(supports)
-        && !REMATCH(document)
-        && !REMATCH(keyframes)
-        && !(REMATCH(vendor_webkit) && CMATCH(keyframes))
-        && !(REMATCH(vendor_moz) && CMATCH(keyframes))
-        && !(REMATCH(vendor_o) && CMATCH(keyframes))
-        && !(REMATCH(vendor_ms) && CMATCH(keyframes)))
-        || !(source < ctx->sentinel && target < ctx->tsentinel)
-        || RCSSMIN_IS_NMCHAR(*source))
-        ABORT;
-
-#undef CMATCH
-#undef REMATCH
-
-    ++ctx->at_group;
-
-    *target_ = target;
-    *source_ = source;
-}
-
-
-/*
- * Skip space
- */
-static const rchar *
-skip_space(const rchar *source, rcssmin_ctx_t *ctx)
-{
-    const rchar *begin = source;
-    int res;
-    rchar c;
-
-    while (source < ctx->sentinel) {
-        c = *source;
-        if (RCSSMIN_IS_SPACE(c)) {
-            ++source;
-            continue;
-        }
-        else if (c == U('/')) {
-            ++source;
-            if (!(source < ctx->sentinel && *source == U('*'))) {
-                --source;
-                break;
-            }
-            ++source;
-            res = 0;
-            while (source < ctx->sentinel) {
-                c = *source++;
-                if (c != U('*'))
-                    continue;
-                if (!(source < ctx->sentinel))
-                    return begin;
-                if (*source != U('/'))
-                    continue;
-
-                /* Comment complete */
-                ++source;
-                res = 1;
-                break;
-            }
-            if (!res)
-                return begin;
-
-            continue;
-        }
-
-        break;
-    }
-
-    return source;
-}
-
-
-/*
- * Copy space
- */
-static void
-copy_space(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx,
-           need_space_flag need_space)
-{
-    const rchar *source = *source_, *end, *comment;
-    rchar *target = *target_;
-    int res;
-    rchar c;
-
-    --source;
-    if (need_space == NEED_SPACE_MAYBE
-        && source > ctx->start
-        && !RCSSMIN_IS_PRE_CHAR(source[-1])
-        && (end = skip_space(source, ctx)) < ctx->sentinel
-        && (!RCSSMIN_IS_POST_CHAR(*end)
-            || (*end == U(':') && !ctx->in_rule && !ctx->at_group))) {
-
-        if (!(target < ctx->tsentinel))
-            ABORT;
-        *target++ = U(' ');
-    }
-
-    while (source < ctx->sentinel) {
-        switch (c = *source) {
-
-        /* comment */
-        case U('/'):
-            comment = source++;
-            if (!((source < ctx->sentinel && *source == U('*')))) {
-                --source;
-                break;
-            }
-            ++source;
-            res = 0;
-            while (source < ctx->sentinel) {
-                c = *source++;
-                if (c != U('*'))
-                    continue;
-                if (!(source < ctx->sentinel))
-                    ABORT;
-                if (*source != U('/'))
-                    continue;
-
-                /* Comment complete */
-                ++source;
-                res = 1;
-
-                if (ctx->keep_bang_comments && comment[2] == U('!')) {
-                    ctx->in_macie5 = (source[-3] == U('\\'));
-                    if (!copy(comment, source, &target, ctx))
-                        ABORT;
-                }
-                else if (source[-3] == U('\\')) {
-                    if (!ctx->in_macie5) {
-                        if (!COPY_PAT(macie5_init, &target, ctx))
-                            ABORT;
-                    }
-                    ctx->in_macie5 = 1;
-                }
-                else if (ctx->in_macie5) {
-                    if (!COPY_PAT(macie5_exit, &target, ctx))
-                        ABORT;
-                    ctx->in_macie5 = 0;
-                }
-                /* else don't copy anything */
-                break;
-            }
-            if (!res)
-                ABORT;
-            continue;
-
-        /* space */
-        case U(' '): case U('\t'): case U('\r'): case U('\n'): case U('\f'):
-            ++source;
-            continue;
-        }
-
-        break;
-    }
-
-    *source_ = source;
-    *target_ = target;
-}
-
-
-/*
- * Copy space if comment
- */
-static int
-copy_space_comment(const rchar **source_, rchar **target_,
-                   rcssmin_ctx_t *ctx, need_space_flag need_space)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-
-    if (source < ctx->sentinel && *source == U('*')) {
-        copy_space(source_, target_, ctx, need_space);
-        if (*source_ > source)
-            return 0;
-    }
-    if (!(target < ctx->tsentinel))
-        RABORT(-1);
-
-    *target++ = source[-1];
-
-    /* *source_ = source; <-- unchanged */
-    *target_ = target;
-
-    return -1;
-}
-
-
-/*
- * Copy space if exists
- */
-static int
-copy_space_optional(const rchar **source_, rchar **target_,
-                    rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-
-    if (!(source < ctx->sentinel))
-        return -1;
-
-    if (*source == U('/')) {
-        *source_ = source + 1;
-        return copy_space_comment(source_, target_, ctx, NEED_SPACE_NEVER);
-    }
-    else if (RCSSMIN_IS_SPACE(*source)) {
-        *source_ = source + 1;
-        copy_space(source_, target_, ctx, NEED_SPACE_NEVER);
-        return 0;
-    }
-
-    return -1;
-}
-
-
-/*
- * Copy :first-line|letter
- */
-static void
-copy_first(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_, *next, *source_fork;
-    rchar *target = *target_, *target_fork;
-
-    *target++ = U(':');
-    *target_ = target;
-
-    if (!IMATCH(first, &source, &target, ctx)
-        || !(source < ctx->sentinel && target < ctx->tsentinel))
-        ABORT;
-
-    source_fork = source;
-    target_fork = target;
-
-    if (!IMATCH(line, &source, &target, ctx)) {
-        source = source_fork;
-        target = target_fork;
-
-        if (!IMATCH(letter, &source, &target, ctx)
-            || !(source < ctx->sentinel && target < ctx->tsentinel))
-            ABORT;
-    }
-
-    next = skip_space(source, ctx);
-    if (!(next < ctx->sentinel && target < ctx->tsentinel
-        && (*next == U('{') || *next == U(','))))
-        ABORT;
-
-    *target++ = U(' ');
-    *target_ = target;
-    *source_ = source;
-    (void)copy_space_optional(source_, target_, ctx);
-}
-
-
-/*
- * Copy IE7 hack
- */
-static void
-copy_ie7hack(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_;
-    rchar *target = *target_;
-
-    *target++ = U('>');
-    *target_ = target;
-
-    if (ctx->in_rule || ctx->at_group)
-        return; /* abort */
-
-    if (!MATCH(ie7, &source, &target, ctx))
-        ABORT;
-
-    ctx->in_macie5 = 0;
-
-    *target_ = target;
-    *source_ = source;
-
-    (void)copy_space_optional(source_, target_, ctx);
-}
-
-
-/*
- * Copy semicolon; miss out duplicates or even this one (before '}')
- */
-static void
-copy_semicolon(const rchar **source_, rchar **target_, rcssmin_ctx_t *ctx)
-{
-    const rchar *source = *source_, *begin, *end;
-    rchar *target = *target_;
-
-    begin = source;
-    while (source < ctx->sentinel) {
-        end = skip_space(source, ctx);
-        if (!(end < ctx->sentinel)) {
-            if (!(target < ctx->tsentinel))
-                ABORT;
-            *target++ = U(';');
-            break;
-        }
-        switch (*end) {
-        case U(';'):
-            source = end + 1;
-            continue;
-
-        case U('}'):
-            if (ctx->in_rule)
-                break;
-
-            /* fall through */
-        default:
-            if (!(target < ctx->tsentinel))
-                ABORT;
-            *target++ = U(';');
-            break;
-        }
-
-        break;
-    }
-
-    source = begin;
-    *target_ = target;
-    while (source < ctx->sentinel) {
-        if (*source == U(';')) {
-            ++source;
-            continue;
-        }
-
-        if (copy_space_optional(&source, target_, ctx) == 0)
-            continue;
-
-        break;
-    }
-
-    *source_ = source;
-}
-
-
-/*
- * Main function
- *
- * The return value determines the result length (kept in the target buffer).
- * However, if the target buffer is too small, the return value is greater
- * than tlength. The difference to tlength is the number of unconsumed source
- * characters at the time the buffer was full. In this case you should resize
- * the target buffer to the return value and call rcssmin again. Repeat as
- * often as needed.
- */
-static Py_ssize_t
-rcssmin(const rchar *source, rchar *target, Py_ssize_t slength,
-        Py_ssize_t tlength, int keep_bang_comments)
-{
-    rcssmin_ctx_t ctx_, *ctx = &ctx_;
-    const rchar *tstart = target;
-    rchar c;
-
-    ctx->start = source;
-    ctx->sentinel = source + slength;
-    ctx->tsentinel = target + tlength;
-    ctx->at_group = 0;
-    ctx->in_macie5 = 0;
-    ctx->in_rule = 0;
-    ctx->keep_bang_comments = keep_bang_comments;
-
-    while (source < ctx->sentinel && target < ctx->tsentinel) {
-        c = *source++;
-        if (RCSSMIN_IS_DULL(c)) {
-            *target++ = c;
-            continue;
-        }
-        else if (RCSSMIN_IS_SPACE(c)) {
-            copy_space(&source, &target, ctx, NEED_SPACE_MAYBE);
-            continue;
-        }
-
-        switch (c) {
-
-        /* Escape */
-        case U('\\'):
-            copy_escape(&source, &target, ctx);
-            continue;
-
-        /* String */
-        case U('"'): case U('\''):
-            copy_string(&source, &target, ctx);
-            continue;
-
-        /* URL */
-        case U('u'):
-            copy_url(&source, &target, ctx);
-            continue;
-
-        /* IE7hack */
-        case U('>'):
-            copy_ie7hack(&source, &target, ctx);
-            continue;
-
-        /* @-group */
-        case U('@'):
-            copy_at_group(&source, &target, ctx);
-            continue;
-
-        /* ; */
-        case U(';'):
-            copy_semicolon(&source, &target, ctx);
-            continue;
-
-        /* :first-line|letter followed by [{,] */
-        /* (apparently needed for IE6) */
-        case U(':'):
-            copy_first(&source, &target, ctx);
-            continue;
-
-        /* { */
-        case U('{'):
-            if (ctx->at_group)
-                --ctx->at_group;
-            else
-                ++ctx->in_rule;
-            *target++ = c;
-            continue;
-
-        /* } */
-        case U('}'):
-            if (ctx->in_rule)
-                --ctx->in_rule;
-            *target++ = c;
-            continue;
-
-        /* space starting with comment */
-        case U('/'):
-            (void)copy_space_comment(&source, &target, ctx, NEED_SPACE_MAYBE);
-            continue;
-
-        /* Fallback: copy character. Better safe than sorry. Should not be
-         * reached, though */
-        default:
-            *target++ = c;
-            continue;
-        }
-    }
-
-    return
-        (Py_ssize_t)(target - tstart) + (Py_ssize_t)(ctx->sentinel - source);
-}
-
-
-PyDoc_STRVAR(rcssmin_cssmin__doc__,
-"cssmin(style, keep_bang_comments=False)\n\
-\n\
-Minify CSS.\n\
-\n\
-:Note: This is a hand crafted C implementation built on the regex\n\
-       semantics.\n\
-\n\
-:Parameters:\n\
-  `style` : ``str``\n\
-    CSS to minify\n\
-\n\
-:Return: Minified style\n\
-:Rtype: ``str``");
-
-static PyObject *
-rcssmin_cssmin(PyObject *self, PyObject *args, PyObject *kwds)
-{
-    PyObject *style, *keep_bang_comments_ = NULL, *result;
-    static char *kwlist[] = {"style", "keep_bang_comments", NULL};
-    Py_ssize_t rlength, slength, length;
-    int keep_bang_comments;
-#ifdef EXT2
-    int uni;
-#define UOBJ "O"
-#endif
-#ifdef EXT3
-#define UOBJ "U"
-#endif
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, UOBJ "|O", kwlist,
-                                     &style, &keep_bang_comments_))
-        return NULL;
-
-    if (!keep_bang_comments_)
-        keep_bang_comments = 0;
-    else {
-        keep_bang_comments = PyObject_IsTrue(keep_bang_comments_);
-        if (keep_bang_comments == -1)
-            return NULL;
-    }
-
-#ifdef EXT2
-    if (PyUnicode_Check(style)) {
-        if (!(style = PyUnicode_AsUTF8String(style)))
-            return NULL;
-        uni = 1;
-    }
-    else {
-        if (!(style = PyObject_Str(style)))
-            return NULL;
-        uni = 0;
-    }
-#endif
-
-#ifdef EXT3
-    Py_INCREF(style);
-#define PyString_GET_SIZE PyUnicode_GET_SIZE
-#define PyString_AS_STRING PyUnicode_AS_UNICODE
-#define _PyString_Resize PyUnicode_Resize
-#define PyString_FromStringAndSize PyUnicode_FromUnicode
-#endif
-
-    rlength = slength = PyString_GET_SIZE(style);
-
-again:
-    if (!(result = PyString_FromStringAndSize(NULL, rlength))) {
-        Py_DECREF(style);
-        return NULL;
-    }
-    Py_BEGIN_ALLOW_THREADS
-    length = rcssmin((rchar *)PyString_AS_STRING(style),
-                     (rchar *)PyString_AS_STRING(result),
-                     slength, rlength, keep_bang_comments);
-    Py_END_ALLOW_THREADS
-
-    if (length > rlength) {
-        Py_DECREF(result);
-        rlength = length;
-        goto again;
-    }
-
-    Py_DECREF(style);
-    if (length < 0) {
-        Py_DECREF(result);
-        return NULL;
-    }
-    if (length != rlength && _PyString_Resize(&result, length) == -1)
-        return NULL;
-
-#ifdef EXT2
-    if (uni) {
-        style = PyUnicode_DecodeUTF8(PyString_AS_STRING(result),
-                                     PyString_GET_SIZE(result), "strict");
-        Py_DECREF(result);
-        if (!style)
-            return NULL;
-        result = style;
-    }
-#endif
-    return result;
-}
-
-/* ------------------------ BEGIN MODULE DEFINITION ------------------------ */
-
-EXT_METHODS = {
-    {"cssmin",
-        (PyCFunction)rcssmin_cssmin, METH_VARARGS | METH_KEYWORDS,
-        rcssmin_cssmin__doc__},
-
-    {NULL}  /* Sentinel */
-};
-
-PyDoc_STRVAR(EXT_DOCS_VAR,
-"C implementation of rcssmin\n\
-===========================\n\
-\n\
-C implementation of rcssmin.");
-
-
-EXT_DEFINE(EXT_MODULE_NAME, EXT_METHODS_VAR, EXT_DOCS_VAR);
-
-EXT_INIT_FUNC {
-    PyObject *m;
-
-    /* Create the module and populate stuff */
-    if (!(m = EXT_CREATE(&EXT_DEFINE_VAR)))
-        EXT_INIT_ERROR(NULL);
-
-    EXT_ADD_UNICODE(m, "__author__", "Andr\xe9 Malo", "latin-1");
-    EXT_ADD_STRING(m, "__docformat__", "restructuredtext en");
-
-    EXT_INIT_RETURN(m);
-}
-
-/* ------------------------- END MODULE DEFINITION ------------------------- */
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.py b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.py
deleted file mode 100644
index ae1cefc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.py
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-r"""
-==============
- CSS Minifier
-==============
-
-CSS Minifier.
-
-The minifier is based on the semantics of the `YUI compressor`_\\, which
-itself is based on `the rule list by Isaac Schlueter`_\\.
-
-:Copyright:
-
- Copyright 2011 - 2014
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-This module is a re-implementation aiming for speed instead of maximum
-compression, so it can be used at runtime (rather than during a preprocessing
-step). RCSSmin does syntactical compression only (removing spaces, comments
-and possibly semicolons). It does not provide semantic compression (like
-removing empty blocks, collapsing redundant properties etc). It does, however,
-support various CSS hacks (by keeping them working as intended).
-
-Here's a feature list:
-
-- Strings are kept, except that escaped newlines are stripped
-- Space/Comments before the very end or before various characters are
-  stripped: ``:{});=>+],!`` (The colon (``:``) is a special case, a single
-  space is kept if it's outside a ruleset.)
-- Space/Comments at the very beginning or after various characters are
-  stripped: ``{}(=:>+[,!``
-- Optional space after unicode escapes is kept, resp. replaced by a simple
-  space
-- whitespaces inside ``url()`` definitions are stripped
-- Comments starting with an exclamation mark (``!``) can be kept optionally.
-- All other comments and/or whitespace characters are replaced by a single
-  space.
-- Multiple consecutive semicolons are reduced to one
-- The last semicolon within a ruleset is stripped
-- CSS Hacks supported:
-
-  - IE7 hack (``>/**/``)
-  - Mac-IE5 hack (``/*\\*/.../**/``)
-  - The boxmodelhack is supported naturally because it relies on valid CSS2
-    strings
-  - Between ``:first-line`` and the following comma or curly brace a space is
-    inserted. (apparently it's needed for IE6)
-  - Same for ``:first-letter``
-
-rcssmin.c is a reimplementation of rcssmin.py in C and improves runtime up to
-factor 100 or so (depending on the input). docs/BENCHMARKS in the source
-distribution contains the details.
-
-Both python 2 (>= 2.4) and python 3 are supported.
-
-.. _YUI compressor: https://github.com/yui/yuicompressor/
-
-.. _the rule list by Isaac Schlueter: https://github.com/isaacs/cssmin/
-"""
-if __doc__:
-    # pylint: disable = W0622
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape')
-__docformat__ = "restructuredtext en"
-__license__ = "Apache License, Version 2.0"
-__version__ = '1.0.5'
-__all__ = ['cssmin']
-
-import re as _re
-
-
-def _make_cssmin(python_only=False):
-    """
-    Generate CSS minifier.
-
-    :Parameters:
-      `python_only` : ``bool``
-        Use only the python variant. If true, the c extension is not even
-        tried to be loaded.
-
-    :Return: Minifier
-    :Rtype: ``callable``
-    """
-    # pylint: disable = R0912, R0914, W0612
-
-    if not python_only:
-        try:
-            import _rcssmin
-        except ImportError:
-            pass
-        else:
-            return _rcssmin.cssmin
-
-    nl = r'(?:[\n\f]|\r\n?)'  # pylint: disable = C0103
-    spacechar = r'[\r\n\f\040\t]'
-
-    unicoded = r'[0-9a-fA-F]{1,6}(?:[\040\n\t\f]|\r\n?)?'
-    escaped = r'[^\n\r\f0-9a-fA-F]'
-    escape = r'(?:\\(?:%(unicoded)s|%(escaped)s))' % locals()
-
-    nmchar = r'[^\000-\054\056\057\072-\100\133-\136\140\173-\177]'
-    #nmstart = r'[^\000-\100\133-\136\140\173-\177]'
-    #ident = (r'(?:'
-    #    r'-?(?:%(nmstart)s|%(escape)s)%(nmchar)s*(?:%(escape)s%(nmchar)s*)*'
-    #r')') % locals()
-
-    comment = r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)'
-
-    # only for specific purposes. The bang is grouped:
-    _bang_comment = r'(?:/\*(!?)[^*]*\*+(?:[^/*][^*]*\*+)*/)'
-
-    string1 = \
-        r'(?:\047[^\047\\\r\n\f]*(?:\\[^\r\n\f][^\047\\\r\n\f]*)*\047)'
-    string2 = r'(?:"[^"\\\r\n\f]*(?:\\[^\r\n\f][^"\\\r\n\f]*)*")'
-    strings = r'(?:%s|%s)' % (string1, string2)
-
-    nl_string1 = \
-        r'(?:\047[^\047\\\r\n\f]*(?:\\(?:[^\r]|\r\n?)[^\047\\\r\n\f]*)*\047)'
-    nl_string2 = r'(?:"[^"\\\r\n\f]*(?:\\(?:[^\r]|\r\n?)[^"\\\r\n\f]*)*")'
-    nl_strings = r'(?:%s|%s)' % (nl_string1, nl_string2)
-
-    uri_nl_string1 = r'(?:\047[^\047\\]*(?:\\(?:[^\r]|\r\n?)[^\047\\]*)*\047)'
-    uri_nl_string2 = r'(?:"[^"\\]*(?:\\(?:[^\r]|\r\n?)[^"\\]*)*")'
-    uri_nl_strings = r'(?:%s|%s)' % (uri_nl_string1, uri_nl_string2)
-
-    nl_escaped = r'(?:\\%(nl)s)' % locals()
-
-    space = r'(?:%(spacechar)s|%(comment)s)' % locals()
-
-    ie7hack = r'(?:>/\*\*/)'
-
-    uri = (r'(?:'
-        # noqa pylint: disable = C0330
-        r'(?:[^\000-\040"\047()\\\177]*'
-            r'(?:%(escape)s[^\000-\040"\047()\\\177]*)*)'
-        r'(?:'
-            r'(?:%(spacechar)s+|%(nl_escaped)s+)'
-            r'(?:'
-                r'(?:[^\000-\040"\047()\\\177]|%(escape)s|%(nl_escaped)s)'
-                r'[^\000-\040"\047()\\\177]*'
-                r'(?:%(escape)s[^\000-\040"\047()\\\177]*)*'
-            r')+'
-        r')*'
-    r')') % locals()
-
-    nl_unesc_sub = _re.compile(nl_escaped).sub
-
-    uri_space_sub = _re.compile((
-        r'(%(escape)s+)|%(spacechar)s+|%(nl_escaped)s+'
-    ) % locals()).sub
-    uri_space_subber = lambda m: m.groups()[0] or ''
-
-    space_sub_simple = _re.compile((
-        r'[\r\n\f\040\t;]+|(%(comment)s+)'
-    ) % locals()).sub
-    space_sub_banged = _re.compile((
-        r'[\r\n\f\040\t;]+|(%(_bang_comment)s+)'
-    ) % locals()).sub
-
-    post_esc_sub = _re.compile(r'[\r\n\f\t]+').sub
-
-    main_sub = _re.compile((
-        # noqa pylint: disable = C0330
-        r'([^\\"\047u>@\r\n\f\040\t/;:{}]+)'
-        r'|(?<=[{}(=:>+[,!])(%(space)s+)'
-        r'|^(%(space)s+)'
-        r'|(%(space)s+)(?=(([:{});=>+\],!])|$)?)'
-        r'|;(%(space)s*(?:;%(space)s*)*)(?=(\})?)'
-        r'|(\{)'
-        r'|(\})'
-        r'|(%(strings)s)'
-        r'|(?<!%(nmchar)s)url\(%(spacechar)s*('
-                r'%(uri_nl_strings)s'
-                r'|%(uri)s'
-            r')%(spacechar)s*\)'
-        r'|(@(?:'
-              r'[mM][eE][dD][iI][aA]'
-              r'|[sS][uU][pP][pP][oO][rR][tT][sS]'
-              r'|[dD][oO][cC][uU][mM][eE][nN][tT]'
-              r'|(?:-(?:'
-                  r'[wW][eE][bB][kK][iI][tT]|[mM][oO][zZ]|[oO]|[mM][sS]'
-                r')-)?'
-                r'[kK][eE][yY][fF][rR][aA][mM][eE][sS]'
-            r'))(?!%(nmchar)s)'
-        r'|(%(ie7hack)s)(%(space)s*)'
-        r'|(:[fF][iI][rR][sS][tT]-[lL]'
-            r'(?:[iI][nN][eE]|[eE][tT][tT][eE][rR]))'
-            r'(%(space)s*)(?=[{,])'
-        r'|(%(nl_strings)s)'
-        r'|(%(escape)s[^\\"\047u>@\r\n\f\040\t/;:{}]*)'
-    ) % locals()).sub
-
-    #print main_sub.__self__.pattern
-
-    def main_subber(keep_bang_comments):
-        """ Make main subber """
-        in_macie5, in_rule, at_group = [0], [0], [0]
-
-        if keep_bang_comments:
-            space_sub = space_sub_banged
-
-            def space_subber(match):
-                """ Space|Comment subber """
-                if match.lastindex:
-                    group1, group2 = match.group(1, 2)
-                    if group2:
-                        if group1.endswith(r'\*/'):
-                            in_macie5[0] = 1
-                        else:
-                            in_macie5[0] = 0
-                        return group1
-                    elif group1:
-                        if group1.endswith(r'\*/'):
-                            if in_macie5[0]:
-                                return ''
-                            in_macie5[0] = 1
-                            return r'/*\*/'
-                        elif in_macie5[0]:
-                            in_macie5[0] = 0
-                            return '/**/'
-                return ''
-        else:
-            space_sub = space_sub_simple
-
-            def space_subber(match):
-                """ Space|Comment subber """
-                if match.lastindex:
-                    if match.group(1).endswith(r'\*/'):
-                        if in_macie5[0]:
-                            return ''
-                        in_macie5[0] = 1
-                        return r'/*\*/'
-                    elif in_macie5[0]:
-                        in_macie5[0] = 0
-                        return '/**/'
-                return ''
-
-        def fn_space_post(group):
-            """ space with token after """
-            if group(5) is None or (
-                    group(6) == ':' and not in_rule[0] and not at_group[0]):
-                return ' ' + space_sub(space_subber, group(4))
-            return space_sub(space_subber, group(4))
-
-        def fn_semicolon(group):
-            """ ; handler """
-            return ';' + space_sub(space_subber, group(7))
-
-        def fn_semicolon2(group):
-            """ ; handler """
-            if in_rule[0]:
-                return space_sub(space_subber, group(7))
-            return ';' + space_sub(space_subber, group(7))
-
-        def fn_open(_):
-            """ { handler """
-            if at_group[0]:
-                at_group[0] -= 1
-            else:
-                in_rule[0] = 1
-            return '{'
-
-        def fn_close(_):
-            """ } handler """
-            in_rule[0] = 0
-            return '}'
-
-        def fn_at_group(group):
-            """ @xxx group handler """
-            at_group[0] += 1
-            return group(13)
-
-        def fn_ie7hack(group):
-            """ IE7 Hack handler """
-            if not in_rule[0] and not at_group[0]:
-                in_macie5[0] = 0
-                return group(14) + space_sub(space_subber, group(15))
-            return '>' + space_sub(space_subber, group(15))
-
-        table = (
-            # noqa pylint: disable = C0330
-            None,
-            None,
-            None,
-            None,
-            fn_space_post,                       # space with token after
-            fn_space_post,                       # space with token after
-            fn_space_post,                       # space with token after
-            fn_semicolon,                        # semicolon
-            fn_semicolon2,                       # semicolon
-            fn_open,                             # {
-            fn_close,                            # }
-            lambda g: g(11),                     # string
-            lambda g: 'url(%s)' % uri_space_sub(uri_space_subber, g(12)),
-                                                 # url(...)
-            fn_at_group,                         # @xxx expecting {...}
-            None,
-            fn_ie7hack,                          # ie7hack
-            None,
-            lambda g: g(16) + ' ' + space_sub(space_subber, g(17)),
-                                                 # :first-line|letter followed
-                                                 # by [{,] (apparently space
-                                                 # needed for IE6)
-            lambda g: nl_unesc_sub('', g(18)),   # nl_string
-            lambda g: post_esc_sub(' ', g(19)),  # escape
-        )
-
-        def func(match):
-            """ Main subber """
-            idx, group = match.lastindex, match.group
-            if idx > 3:
-                return table[idx](group)
-
-            # shortcuts for frequent operations below:
-            elif idx == 1:     # not interesting
-                return group(1)
-            #else: # space with token before or at the beginning
-            return space_sub(space_subber, group(idx))
-
-        return func
-
-    def cssmin(style, keep_bang_comments=False):  # pylint: disable = W0621
-        """
-        Minify CSS.
-
-        :Parameters:
-          `style` : ``str``
-            CSS to minify
-
-          `keep_bang_comments` : ``bool``
-            Keep comments starting with an exclamation mark? (``/*!...*/``)
-
-        :Return: Minified style
-        :Rtype: ``str``
-        """
-        return main_sub(main_subber(keep_bang_comments), style)
-
-    return cssmin
-
-cssmin = _make_cssmin()
-
-
-if __name__ == '__main__':
-    def main():
-        """ Main """
-        import sys as _sys
-        keep_bang_comments = (
-            '-b' in _sys.argv[1:]
-            or '-bp' in _sys.argv[1:]
-            or '-pb' in _sys.argv[1:]
-        )
-        if '-p' in _sys.argv[1:] or '-bp' in _sys.argv[1:] \
-                or '-pb' in _sys.argv[1:]:
-            global cssmin  # pylint: disable = W0603
-            cssmin = _make_cssmin(python_only=True)
-        _sys.stdout.write(cssmin(
-            _sys.stdin.read(), keep_bang_comments=keep_bang_comments
-        ))
-    main()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/run_tests.py b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/run_tests.py
deleted file mode 100755
index 9128d74..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/run_tests.py
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-#
-# Copyright 2014
-# Andr\xe9 Malo or his licensors, as applicable
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"""
-===========
- Run tests
-===========
-
-Run tests.
-"""
-__author__ = "Andr\xe9 Malo"
-__author__ = getattr(__author__, 'decode', lambda x: __author__)('latin-1')
-__docformat__ = "restructuredtext en"
-
-import os as _os
-import re as _re
-import sys as _sys
-
-from _setup import shell
-from _setup import term
-
-
-def run_tests(basedir, libdir):
-    """ Run output based tests """
-    import rcssmin as _rcssmin
-    py_cssmin = _rcssmin._make_cssmin(python_only=True)
-    c_cssmin = _rcssmin._make_cssmin(python_only=False)
-
-    def run_test(example, output_file):
-        """ Run it """
-        try:
-            fp = open(example, 'r')
-        except IOError:
-            return
-        else:
-            try:
-                input = fp.read()
-            finally:
-                fp.close()
-
-        def load_output(filename):
-            try:
-                fp = open(filename, 'r')
-            except IOError:
-                return None
-            else:
-                try:
-                    output = fp.read()
-                finally:
-                    fp.close()
-            output = output.strip()
-            if _re.search(r'(?<!\\)(?:\\\\)*\\[0-9a-zA-Z]{1,6}$', output):
-                output += ' '
-            return output
-
-        output = load_output(output_file)
-        output_b = load_output(output_file + '.b')
-
-        def do_test(cssmin, output, **options):
-            try:
-                genout = cssmin(input, **options)
-            except (KeyboardInterrupt, SystemExit):
-                raise
-            except:
-                return 1, "%(RED)s exc%(NORMAL)s "
-            else:
-                if output is None:
-                    return 1, "%(RED)smiss%(NORMAL)s "
-                elif genout == output or genout == output.rstrip():
-                    return 0, "%(GREEN)sOK%(NORMAL)s   "
-                else:
-                    return 1, "%(RED)sfail%(NORMAL)s "
-
-        erred, out = do_test(py_cssmin, output)
-        erred, c_out = do_test(c_cssmin, output)
-        erred, out_b = do_test(py_cssmin, output_b, keep_bang_comments=True)
-        erred, c_out_b = do_test(c_cssmin, output_b, keep_bang_comments=True)
-
-        term.write(
-            "%(out)s %(out_b)s  |  %(c_out)s %(c_out_b)s - %%(example)s\n"
-                % locals(),
-            example=_os.path.basename(example),
-        )
-        return erred
-
-    # end
-    # begin main test code
-
-    erred = 0
-    basedir = shell.native(basedir)
-    strip = len(basedir) - len(_os.path.basename(basedir))
-    for dirname, dirs, files in shell.walk(basedir):
-        dirs[:] = [
-            item for item in dirs if item not in ('.svn', '.git', 'out')
-        ]
-        dirs.sort()
-        files = [item for item in files if item.endswith('.css')]
-        if not files:
-            continue
-        if not _os.path.isdir(_os.path.join(basedir, dirname, 'out')):
-            continue
-        term.yellow("---> %s" % (dirname[strip:],))
-        files.sort()
-        for filename in files:
-            if run_test(
-                _os.path.join(dirname, filename),
-                _os.path.join(dirname, 'out', filename[:-4] + '.out'),
-            ): erred = 1
-        term.yellow("<--- %s" % (dirname[strip:],))
-    return erred
-
-
-def main():
-    """ Main """
-    basedir, libdir = None, None
-    accept_opts = True
-    args = []
-    for arg in _sys.argv[1:]:
-        if accept_opts:
-            if arg == '--':
-                accept_opts = False
-                continue
-            elif arg == '-q':
-                term.write = term.green = term.red = term.yellow = \
-                    term.announce = \
-                    lambda fmt, **kwargs: None
-                continue
-            elif arg == '-p':
-                info = {}
-                for key in term.terminfo():
-                    info[key] = ''
-                info['ERASE'] = '\n'
-                term.terminfo.info = info
-                continue
-            elif arg.startswith('-'):
-                _sys.stderr.write("Unrecognized option %r\n" % (arg,))
-                return 2
-        args.append(arg)
-    if len(args) > 2:
-        _sys.stderr.write("Too many arguments\n")
-        return 2
-    elif len(args) < 1:
-        _sys.stderr.write("Missing arguments\n")
-        return 2
-    basedir = args[0]
-    if len(args) > 1:
-        libdir = args[1]
-    return run_tests(basedir, libdir)
-
-
-if __name__ == '__main__':
-    _sys.exit(main())
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/setup.py b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/setup.py
deleted file mode 100644
index d4ca570..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/setup.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-#
-# Copyright 2006 - 2013
-# Andr\xe9 Malo or his licensors, as applicable
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import sys as _sys
-from _setup import run
-
-
-def setup(args=None, _manifest=0):
-    """ Main setup function """
-    from _setup.ext import Extension
-
-    if 'java' in _sys.platform.lower():
-        # no c extension for jython
-        ext = None
-    else:
-        ext=[Extension('_rcssmin', sources=['rcssmin.c'])]
-
-    return run(script_args=args, ext=ext, manifest_only=_manifest)
-
-
-def manifest():
-    """ Create List of packaged files """
-    return setup((), _manifest=1)
-
-
-if __name__ == '__main__':
-    setup()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_00.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_00.css
deleted file mode 100644
index 6f66822..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_00.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@page :first {
-    margin-left: 1cm;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_01.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_01.css
deleted file mode 100644
index a8c5cba..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_01.css
+++ /dev/null
@@ -1,15 +0,0 @@
-@document url(http://www.w3.org/),
-               url-prefix(http://www.w3.org/Style/),
-               domain(mozilla.org),
-               regexp("https:.*")
-{
-  /* CSS rules here apply to:
-     + The page "http://www.w3.org/".
-     + Any page whose URL begins with "http://www.w3.org/Style/"
-     + Any page whose URL's host is "mozilla.org" or ends with
-       ".mozilla.org"
-     + Any page whose URL starts with "https:" */
-
-  /* make the above-mentioned pages really ugly */
-  body { color: purple; background: yellow; }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_02.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_02.css
deleted file mode 100644
index 430859e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_02.css
+++ /dev/null
@@ -1,17 +0,0 @@
-@media all and (min-width:500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-      /* CSS rules here apply to:
-         + The page "http://www.w3.org/".
-         + Any page whose URL begins with "http://www.w3.org/Style/"
-         + Any page whose URL's host is "mozilla.org" or ends with
-           ".mozilla.org"
-         + Any page whose URL starts with "https:" */
-
-      /* make the above-mentioned pages really ugly */
-      body { color: purple; background: yellow; }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_03.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_03.css
deleted file mode 100644
index 65b74d2..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_03.css
+++ /dev/null
@@ -1,11 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @page :last {
-            margin : 3in;
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_04.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_04.css
deleted file mode 100644
index 57e35ab..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_04.css
+++ /dev/null
@@ -1,13 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @page :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_05.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_05.css
deleted file mode 100644
index fc2bfdd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_05.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @keyframes slidein {
-                from {
-                    margin-left : 100%;
-                    width: 300%
-                }
-      
-                75% {
-                    font-size:300%;
-                    margin-left:25%;
-                    width:150%;
-                }
-      
-                to {
-                    margin-left:0%;
-                    width:100%;
-                }
-            }
-
-            @page :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_06.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_06.css
deleted file mode 100644
index 7cb7ffb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_06.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@mEdia all and (min-width : 500px) {
-    @docuMent url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @suPpoRts ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @keyFRames slidein {
-                from {
-                    margin-left : 100%;
-                    width: 300%
-                }
-      
-                75% {
-                    font-size:300%;
-                    margin-left:25%;
-                    width:150%;
-                }
-      
-                to {
-                    margin-left:0%;
-                    width:100%;
-                }
-            }
-
-            @pagE :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_07.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_07.css
deleted file mode 100644
index 94453d2..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_07.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @keyframes slidein {
-                from :blub {
-                    margin-left : 100%;
-                    width: 300%
-                }
-      
-                75% {
-                    font-size:300%;
-                    margin-left:25%;
-                    width:150%;
-                }
-      
-                to {
-                    margin-left:0%;
-                    width:100%;
-                }
-            }
-
-            @page :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_08.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_08.css
deleted file mode 100644
index c190e17..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_08.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @-o-keyframes slidein {
-                from :blub {
-                    margin-left : 100%;
-                    width: 300%
-                }
-      
-                75% {
-                    font-size:300%;
-                    margin-left:25%;
-                    width:150%;
-                }
-      
-                to {
-                    margin-left:0%;
-                    width:100%;
-                }
-            }
-
-            @page :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_09.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_09.css
deleted file mode 100644
index 8ffd0da..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_09.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @-moz-keyframes slidein {
-                from :blub {
-                    margin-left : 100%;
-                    width: 300%
-                }
-      
-                75% {
-                    font-size:300%;
-                    margin-left:25%;
-                    width:150%;
-                }
-      
-                to {
-                    margin-left:0%;
-                    width:100%;
-                }
-            }
-
-            @page :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_10.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_10.css
deleted file mode 100644
index b083bf6..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_10.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @-webkit-keyframes slidein {
-                from :blub {
-                    margin-left : 100%;
-                    width: 300%
-                }
-      
-                75% {
-                    font-size:300%;
-                    margin-left:25%;
-                    width:150%;
-                }
-      
-                to {
-                    margin-left:0%;
-                    width:100%;
-                }
-            }
-
-            @page :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_11.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_11.css
deleted file mode 100644
index e68b738..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/atgroup_11.css
+++ /dev/null
@@ -1,31 +0,0 @@
-@media all and (min-width : 500px) {
-    @document url(http://www.w3.org/),
-                   url-prefix(http://www.w3.org/Style/),
-                   domain(mozilla.org),
-                   regexp("https:.*")
-    {
-        @supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or (-ms-perspective: 10px) or (-o-perspective: 10px) ) {
-            @-ms-keyframes slidein {
-                from :blub {
-                    margin-left : 100%;
-                    width: 300%
-                }
-      
-                75% {
-                    font-size:300%;
-                    margin-left:25%;
-                    width:150%;
-                }
-      
-                to {
-                    margin-left:0%;
-                    width:100%;
-                }
-            }
-
-            @page :last {
-                margin : 3in;
-            }
-        }
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_00.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_00.css
deleted file mode 100644
index 27a079d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_00.css
+++ /dev/null
@@ -1 +0,0 @@
-/* this is a comment */i {love: comments; /*! yes */; /*YES*/}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_01.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_01.css
deleted file mode 100644
index 3498967..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_01.css
+++ /dev/null
@@ -1,7 +0,0 @@
-#mainnav li.hover dl.subsearch select {
-    margin-top /*\**/:4px\9;
-    margin-bottom /*\**/:0px\9;
-    }
-#mainnav li.hover dl.subsearch label {
-    margin-top /*\**/:4px\9;
-    }
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_02.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_02.css
deleted file mode 100644
index 63ea916..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_02.css
+++ /dev/null
@@ -1 +0,0 @@
-/*/
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_03.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_03.css
deleted file mode 100644
index c307e63..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_03.css
+++ /dev/null
@@ -1 +0,0 @@
-a/***/b
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_04.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_04.css
deleted file mode 100644
index f140a4f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/comment_04.css
+++ /dev/null
@@ -1 +0,0 @@
-a/**\/*/b
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_00.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_00.css
deleted file mode 100644
index 1b7689b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_00.css
+++ /dev/null
@@ -1 +0,0 @@
-\\0
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_01.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_01.css
deleted file mode 100644
index d62fa9d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_01.css
+++ /dev/null
@@ -1 +0,0 @@
-\0
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_02.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_02.css
deleted file mode 100644
index 270feae..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_02.css
+++ /dev/null
@@ -1 +0,0 @@
-\10
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_03.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_03.css
deleted file mode 100644
index aab5566..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_03.css
+++ /dev/null
@@ -1 +0,0 @@
-\0345
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_04.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_04.css
deleted file mode 100644
index 05e2c62..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_04.css
+++ /dev/null
@@ -1 +0,0 @@
-\01234567
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_05.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_05.css
deleted file mode 100644
index c8f0d86..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_05.css
+++ /dev/null
@@ -1 +0,0 @@
-\012345 la
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_06.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_06.css
deleted file mode 100644
index 32f9dbc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/escape_06.css
+++ /dev/null
@@ -1 +0,0 @@
-\a bc
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_00.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_00.css
deleted file mode 100644
index a1eefcc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_00.css
+++ /dev/null
@@ -1 +0,0 @@
-x:first-line{bla: blub;}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_01.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_01.css
deleted file mode 100644
index 9645721..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_01.css
+++ /dev/null
@@ -1 +0,0 @@
-x:first-letter{bla: blub;}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_02.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_02.css
deleted file mode 100644
index fce5c2c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/first_02.css
+++ /dev/null
@@ -1 +0,0 @@
-x:first-letter{bla:blub}y:first-line{foo:bar}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_00.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_00.out
deleted file mode 100644
index 4b5aae8..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_00.out
+++ /dev/null
@@ -1 +0,0 @@
-@page :first{margin-left:1cm}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_00.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_00.out.b
deleted file mode 100644
index 4b5aae8..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_00.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@page :first{margin-left:1cm}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_01.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_01.out
deleted file mode 100644
index 674e2ab..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_01.out
+++ /dev/null
@@ -1 +0,0 @@
-@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){body{color:purple;background:yellow}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_01.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_01.out.b
deleted file mode 100644
index 674e2ab..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_01.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){body{color:purple;background:yellow}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_02.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_02.out
deleted file mode 100644
index 1c688eb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_02.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){body{color:purple;background:yellow}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_02.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_02.out.b
deleted file mode 100644
index 1c688eb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_02.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){body{color:purple;background:yellow}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_03.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_03.out
deleted file mode 100644
index 576ccdf..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_03.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@page :last{margin:3in}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_03.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_03.out.b
deleted file mode 100644
index 576ccdf..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_03.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@page :last{margin:3in}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_04.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_04.out
deleted file mode 100644
index a086a8b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_04.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_04.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_04.out.b
deleted file mode 100644
index a086a8b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_04.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_05.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_05.out
deleted file mode 100644
index f134c5d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_05.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@keyframes slidein{from{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_05.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_05.out.b
deleted file mode 100644
index f134c5d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_05.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@keyframes slidein{from{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_06.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_06.out
deleted file mode 100644
index a6cc57a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_06.out
+++ /dev/null
@@ -1 +0,0 @@
-@mEdia all and (min-width:500px){@docuMent url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@suPpoRts ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@keyFRames slidein{from{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@pagE :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_06.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_06.out.b
deleted file mode 100644
index a6cc57a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_06.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@mEdia all and (min-width:500px){@docuMent url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@suPpoRts ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@keyFRames slidein{from{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@pagE :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_07.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_07.out
deleted file mode 100644
index 6d8b689..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_07.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_07.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_07.out.b
deleted file mode 100644
index 6d8b689..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_07.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_08.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_08.out
deleted file mode 100644
index 8c0d6b1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_08.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-o-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_08.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_08.out.b
deleted file mode 100644
index 8c0d6b1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_08.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-o-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_09.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_09.out
deleted file mode 100644
index ddb2b2a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_09.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-moz-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_09.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_09.out.b
deleted file mode 100644
index ddb2b2a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_09.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-moz-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_10.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_10.out
deleted file mode 100644
index f0b137c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_10.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-webkit-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_10.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_10.out.b
deleted file mode 100644
index f0b137c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_10.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-webkit-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_11.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_11.out
deleted file mode 100644
index 3a621f0..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_11.out
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-ms-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_11.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_11.out.b
deleted file mode 100644
index 3a621f0..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/atgroup_11.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media all and (min-width:500px){@document url(http://www.w3.org/),url-prefix(http://www.w3.org/Style/),domain(mozilla.org),regexp("https:.*"){@supports ((perspective:10px) or (-moz-perspective:10px) or (-webkit-perspective:10px) or (-ms-perspective:10px) or (-o-perspective:10px)){@-ms-keyframes slidein{from :blub{margin-left:100%;width:300%}75%{font-size:300%;margin-left:25%;width:150%}to{margin-left:0%;width:100%}}@page :last{margin:3in}}}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_00.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_00.out
deleted file mode 100644
index 046b074..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_00.out
+++ /dev/null
@@ -1 +0,0 @@
-i{love:comments}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_00.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_00.out.b
deleted file mode 100644
index 3975a8b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_00.out.b
+++ /dev/null
@@ -1 +0,0 @@
-i{love:comments/*! yes */}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_01.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_01.out
deleted file mode 100644
index 2a13c23..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_01.out
+++ /dev/null
@@ -1 +0,0 @@
-#mainnav li.hover dl.subsearch select{margin-top:4px\9;margin-bottom:0px\9}#mainnav li.hover dl.subsearch label{margin-top:4px\9}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_01.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_01.out.b
deleted file mode 100644
index 2a13c23..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_01.out.b
+++ /dev/null
@@ -1 +0,0 @@
-#mainnav li.hover dl.subsearch select{margin-top:4px\9;margin-bottom:0px\9}#mainnav li.hover dl.subsearch label{margin-top:4px\9}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_02.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_02.out
deleted file mode 100644
index aa51ac1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_02.out
+++ /dev/null
@@ -1 +0,0 @@
-/*/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_02.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_02.out.b
deleted file mode 100644
index aa51ac1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_02.out.b
+++ /dev/null
@@ -1 +0,0 @@
-/*/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_03.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_03.out
deleted file mode 100644
index 9eb1507..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_03.out
+++ /dev/null
@@ -1 +0,0 @@
-a b
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_03.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_03.out.b
deleted file mode 100644
index 9eb1507..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_03.out.b
+++ /dev/null
@@ -1 +0,0 @@
-a b
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_04.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_04.out
deleted file mode 100644
index 9eb1507..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_04.out
+++ /dev/null
@@ -1 +0,0 @@
-a b
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_04.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_04.out.b
deleted file mode 100644
index 9eb1507..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/comment_04.out.b
+++ /dev/null
@@ -1 +0,0 @@
-a b
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_00.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_00.out
deleted file mode 100644
index 68ec29b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_00.out
+++ /dev/null
@@ -1 +0,0 @@
-\\0
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_00.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_00.out.b
deleted file mode 100644
index 68ec29b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_00.out.b
+++ /dev/null
@@ -1 +0,0 @@
-\\0
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_01.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_01.out
deleted file mode 100644
index e4939bd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_01.out
+++ /dev/null
@@ -1 +0,0 @@
-\0 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_01.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_01.out.b
deleted file mode 100644
index e4939bd..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_01.out.b
+++ /dev/null
@@ -1 +0,0 @@
-\0 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_02.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_02.out
deleted file mode 100644
index 8e45022..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_02.out
+++ /dev/null
@@ -1 +0,0 @@
-\10 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_02.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_02.out.b
deleted file mode 100644
index 8e45022..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_02.out.b
+++ /dev/null
@@ -1 +0,0 @@
-\10 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_03.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_03.out
deleted file mode 100644
index 4b5a949..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_03.out
+++ /dev/null
@@ -1 +0,0 @@
-\0345 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_03.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_03.out.b
deleted file mode 100644
index 4b5a949..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_03.out.b
+++ /dev/null
@@ -1 +0,0 @@
-\0345 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_04.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_04.out
deleted file mode 100644
index 23aa989..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_04.out
+++ /dev/null
@@ -1 +0,0 @@
-\01234567
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_04.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_04.out.b
deleted file mode 100644
index 23aa989..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_04.out.b
+++ /dev/null
@@ -1 +0,0 @@
-\01234567
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_05.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_05.out
deleted file mode 100644
index c3375f4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_05.out
+++ /dev/null
@@ -1 +0,0 @@
-\012345 la
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_05.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_05.out.b
deleted file mode 100644
index c3375f4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_05.out.b
+++ /dev/null
@@ -1 +0,0 @@
-\012345 la
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_06.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_06.out
deleted file mode 100644
index a525cd5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_06.out
+++ /dev/null
@@ -1 +0,0 @@
-\a bc
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_06.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_06.out.b
deleted file mode 100644
index a525cd5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/escape_06.out.b
+++ /dev/null
@@ -1 +0,0 @@
-\a bc
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_00.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_00.out
deleted file mode 100644
index ff2f806..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_00.out
+++ /dev/null
@@ -1 +0,0 @@
-x:first-line {bla:blub}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_00.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_00.out.b
deleted file mode 100644
index ff2f806..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_00.out.b
+++ /dev/null
@@ -1 +0,0 @@
-x:first-line {bla:blub}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_01.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_01.out
deleted file mode 100644
index c76af38..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_01.out
+++ /dev/null
@@ -1 +0,0 @@
-x:first-letter {bla:blub}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_01.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_01.out.b
deleted file mode 100644
index c76af38..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_01.out.b
+++ /dev/null
@@ -1 +0,0 @@
-x:first-letter {bla:blub}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_02.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_02.out
deleted file mode 100644
index 1831996..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_02.out
+++ /dev/null
@@ -1 +0,0 @@
-x:first-letter {bla:blub}y:first-line {foo:bar}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_02.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_02.out.b
deleted file mode 100644
index 1831996..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/first_02.out.b
+++ /dev/null
@@ -1 +0,0 @@
-x:first-letter {bla:blub}y:first-line {foo:bar}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_00.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_00.out
deleted file mode 100644
index c283d2b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_00.out
+++ /dev/null
@@ -1 +0,0 @@
-xurl(la la la)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_00.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_00.out.b
deleted file mode 100644
index c283d2b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_00.out.b
+++ /dev/null
@@ -1 +0,0 @@
-xurl(la la la)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_01.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_01.out
deleted file mode 100644
index 1244651..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_01.out
+++ /dev/null
@@ -1 +0,0 @@
-url(lalala) 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_01.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_01.out.b
deleted file mode 100644
index 1244651..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_01.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url(lalala) 
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_02.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_02.out
deleted file mode 100644
index 2345a4b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_02.out
+++ /dev/null
@@ -1 +0,0 @@
-url(lalala)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_02.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_02.out.b
deleted file mode 100644
index 2345a4b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_02.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url(lalala)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_03.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_03.out
deleted file mode 100644
index 315887f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_03.out
+++ /dev/null
@@ -1 +0,0 @@
-url("lalala")
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_03.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_03.out.b
deleted file mode 100644
index 315887f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_03.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url("lalala")
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_04.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_04.out
deleted file mode 100644
index 315887f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_04.out
+++ /dev/null
@@ -1 +0,0 @@
-url("lalala")
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_04.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_04.out.b
deleted file mode 100644
index 315887f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_04.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url("lalala")
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_05.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_05.out
deleted file mode 100644
index 239ac2f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_05.out
+++ /dev/null
@@ -1 +0,0 @@
-url(lala\)lala)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_05.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_05.out.b
deleted file mode 100644
index 239ac2f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_05.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url(lala\)lala)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_06.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_06.out
deleted file mode 100644
index d79c151..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_06.out
+++ /dev/null
@@ -1 +0,0 @@
-url(lala\)lalalololo)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_06.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_06.out.b
deleted file mode 100644
index d79c151..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_06.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url(lala\)lalalololo)
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_07.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_07.out
deleted file mode 100644
index 8fdd4fe..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_07.out
+++ /dev/null
@@ -1 +0,0 @@
-url(lalala l
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_07.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_07.out.b
deleted file mode 100644
index 8fdd4fe..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_07.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url(lalala l
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_08.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_08.out
deleted file mode 100644
index 6105592..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_08.out
+++ /dev/null
@@ -1 +0,0 @@
-url("lalala l
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_08.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_08.out.b
deleted file mode 100644
index 6105592..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_08.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url("lalala l
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_09.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_09.out
deleted file mode 100644
index 6e1f640..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_09.out
+++ /dev/null
@@ -1 +0,0 @@
-url(lal " ala     l ")
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_09.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_09.out.b
deleted file mode 100644
index 6e1f640..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/out/url_09.out.b
+++ /dev/null
@@ -1 +0,0 @@
-url(lal " ala     l ")
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_00.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_00.css
deleted file mode 100644
index 4e1f889..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_00.css
+++ /dev/null
@@ -1 +0,0 @@
-xurl( la la la )
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_01.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_01.css
deleted file mode 100644
index e474113..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_01.css
+++ /dev/null
@@ -1 +0,0 @@
-url( la la la )
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_02.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_02.css
deleted file mode 100644
index dba1742..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_02.css
+++ /dev/null
@@ -1,2 +0,0 @@
-url( la 
-la la )
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_03.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_03.css
deleted file mode 100644
index 24ae8ef..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_03.css
+++ /dev/null
@@ -1 +0,0 @@
-url( "la la la" )
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_04.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_04.css
deleted file mode 100644
index 630305c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_04.css
+++ /dev/null
@@ -1,2 +0,0 @@
-url( "la 
-la la" )
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_05.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_05.css
deleted file mode 100644
index 54d2d03..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_05.css
+++ /dev/null
@@ -1,2 +0,0 @@
-url( lala \) la la\
-)
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_06.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_06.css
deleted file mode 100644
index a895129..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_06.css
+++ /dev/null
@@ -1,3 +0,0 @@
-url( lala \) la la\
-lolo  \
-lo)
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_07.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_07.css
deleted file mode 100644
index 825b5ab..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_07.css
+++ /dev/null
@@ -1 +0,0 @@
-url( lalala  l
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_08.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_08.css
deleted file mode 100644
index 821e6db..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_08.css
+++ /dev/null
@@ -1 +0,0 @@
-url( "lalala  l
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_09.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_09.css
deleted file mode 100644
index 07435bb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/main/url_09.css
+++ /dev/null
@@ -1 +0,0 @@
-url(   lal " ala     l " )
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/README b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/README
deleted file mode 100644
index 841b568..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/README
+++ /dev/null
@@ -1,61 +0,0 @@
-These test inputs are originally taken from the YUI compressor suite
-(https://github.com/yui/yuicompressor/). The outputs (in the out/ directory) are
-my own.
-
-The YUI tests are licensed as follows:
-
-===========================================================================
-YUI Compressor Copyright License Agreement (BSD License)
-
-Copyright (c) 2011, Yahoo! Inc.
-All rights reserved.
-
-Redistribution and use of this software in source and binary forms,
-with or without modification, are permitted provided that the following
-conditions are met:
-
-* Redistributions of source code must retain the above
-  copyright notice, this list of conditions and the
-  following disclaimer.
-
-* Redistributions in binary form must reproduce the above
-  copyright notice, this list of conditions and the
-  following disclaimer in the documentation and/or other
-  materials provided with the distribution.
-
-* Neither the name of Yahoo! Inc. nor the names of its
-  contributors may be used to endorse or promote products
-  derived from this software without specific prior
-  written permission of Yahoo! Inc.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-This software also requires access to software from the following sources:
-
-The Jarg Library v 1.0 ( http://jargs.sourceforge.net/ ) is available
-under a BSD License - Copyright (c) 2001-2003 Steve Purcell,
-Copyright (c) 2002 Vidar Holen, Copyright (c) 2002 Michal Ceresna and
-Copyright (c) 2005 Ewan Mellor.
-
-The Rhino Library ( http://www.mozilla.org/rhino/ ) is dually available
-under an MPL 1.1/GPL 2.0 license, with portions subject to a BSD license.
-
-Additionally, this software contains modified versions of the following
-component files from the Rhino Library:
-
-[org/mozilla/javascript/Decompiler.java]
-[org/mozilla/javascript/Parser.java]
-[org/mozilla/javascript/Token.java]
-[org/mozilla/javascript/TokenStream.java]
-
-The modified versions of these files are distributed under the MPL v 1.1
-( http://www.mozilla.org/MPL/MPL-1.1.html )
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/background-position.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/background-position.css
deleted file mode 100644
index 4cdff82..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/background-position.css
+++ /dev/null
@@ -1,2 +0,0 @@
-a {background-position: 0 0 0 0;}
-b {BACKGROUND-POSITION: 0 0;}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/background-position.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/background-position.css.min
deleted file mode 100644
index 0895e1a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/background-position.css.min
+++ /dev/null
@@ -1 +0,0 @@
-a{background-position:0 0}b{background-position:0 0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/border-none.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/border-none.css
deleted file mode 100644
index 29f9cba..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/border-none.css
+++ /dev/null
@@ -1,5 +0,0 @@
-a {
-    border: none;
-}
-b {BACKGROUND:none}
-s {border-top: none;}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/border-none.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/border-none.css.min
deleted file mode 100644
index 1ed1b65..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/border-none.css.min
+++ /dev/null
@@ -1 +0,0 @@
-a{border:0}b{background:0}s{border-top:0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/box-model-hack.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/box-model-hack.css
deleted file mode 100644
index c00e32f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/box-model-hack.css
+++ /dev/null
@@ -1,9 +0,0 @@
-#elem { 
- width: 100px; 
- voice-family: "\"}\""; 
- voice-family:inherit;
- width: 200px;
-}
-html>body #elem {
- width: 200px;
-} 
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/box-model-hack.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/box-model-hack.css.min
deleted file mode 100644
index 3340179..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/box-model-hack.css.min
+++ /dev/null
@@ -1 +0,0 @@
-#elem{width:100px;voice-family:"\"}\"";voice-family:inherit;width:200px}html>body #elem{width:200px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527974.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527974.css
deleted file mode 100644
index b3bc2c8..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527974.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/*	this file contains no css, it exists purely to put the revision number into the 
-	combined css before uploading it to SiteManager. The exclaimation at the start
-	of the comment informs yuicompressor not to strip the comment out */
- 
-/*! $LastChangedRevision: 81 $ $LastChangedDate: 2009-05-27 17:41:02 +0100 (Wed, 27 May 2009) $ */
- 
-body {
-    yo: cats;
-}
-ul[id$=foo] label:hover {yo: yo;}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527974.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527974.css.min
deleted file mode 100644
index 00cc007..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527974.css.min
+++ /dev/null
@@ -1 +0,0 @@
-/*! $LastChangedRevision: 81 $ $LastChangedDate: 2009-05-27 17:41:02 +0100 (Wed, 27 May 2009) $ */body{yo:cats}ul[id$=foo] label:hover{yo:yo}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527991.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527991.css
deleted file mode 100644
index d4c80ff..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527991.css
+++ /dev/null
@@ -1,19 +0,0 @@
-@media screen and/*!YUI-Compresser */(-webkit-min-device-pixel-ratio:0) {
-  a{
-    b: 1;
-  }
-}
-
-
-@media screen and/*! */ /*! */(-webkit-min-device-pixel-ratio:0) {
-  a{
-    b: 1;
-  }
-}
-
-
-@media -webkit-min-device-pixel-ratio:0 {
-  a{
-    b: 1;
-  }
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527991.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527991.css.min
deleted file mode 100644
index 965755a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527991.css.min
+++ /dev/null
@@ -1 +0,0 @@
-@media screen and/*!YUI-Compresser */(-webkit-min-device-pixel-ratio:0){a{b:1}}@media screen and/*! *//*! */(-webkit-min-device-pixel-ratio:0){a{b:1}}@media -webkit-min-device-pixel-ratio:0{a{b:1}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527998.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527998.css
deleted file mode 100644
index 9c6c00e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527998.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! special */
-body {
-
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527998.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527998.css.min
deleted file mode 100644
index 7fabf8a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2527998.css.min
+++ /dev/null
@@ -1 +0,0 @@
-/*! special */
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2528034.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2528034.css
deleted file mode 100644
index c315cb1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2528034.css
+++ /dev/null
@@ -1,5 +0,0 @@
-a[href$="/test/"] span:first-child { b:1; }
-a[href$="/test/"] span:first-child { }
-
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2528034.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2528034.css.min
deleted file mode 100644
index 1543777..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/bug2528034.css.min
+++ /dev/null
@@ -1 +0,0 @@
-a[href$="/test/"] span:first-child{b:1}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/charset-media.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/charset-media.css
deleted file mode 100644
index bd02f38..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/charset-media.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/* re: 2495387 */
-@charset 'utf-8';
-@media all {
-body {
-}
-body {
-background-color: gold;
-}
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/charset-media.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/charset-media.css.min
deleted file mode 100644
index dcaf49d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/charset-media.css.min
+++ /dev/null
@@ -1 +0,0 @@
-@charset 'utf-8';@media all{body{background-color:gold}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color-simple.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color-simple.css
deleted file mode 100644
index bb33ec3..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color-simple.css
+++ /dev/null
@@ -1,8 +0,0 @@
-.foo, #AABBCC {
-  background-color:#aabbcc;
-  border-color:#Ee66aA #ABCDEF #FeAb2C;
-  filter:chroma(color = #FFFFFF );
-  filter:chroma(color="#AABBCC");
-  filter:chroma(color='#BBDDEE');
-  color:#112233
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color-simple.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color-simple.css.min
deleted file mode 100644
index 1e39e23..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color-simple.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.foo,#AABBCC{background-color:#abc;border-color:#e6a #abcdef #feab2c;filter:chroma(color = #FFFFFF);filter:chroma(color="#AABBCC");filter:chroma(color='#BBDDEE');color:#123}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color.css
deleted file mode 100644
index 030b8a0..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color.css
+++ /dev/null
@@ -1,46 +0,0 @@
-.color {
-  me: rgb(123, 123, 123);
-  impressed: #FfEedD;
-  again: #ABCDEF;
-  andagain:#aa66cc;
-  background-color:#aa66ccc;
-  filter: chroma(color="#FFFFFF");
-  background: none repeat scroll 0 0 rgb(255, 0,0);
-  alpha: rgba(1, 2, 3, 4);
-  color:#1122aa
-}
-
-#AABBCC {
-  background-color:#ffee11;
-  filter: chroma(color = #FFFFFF );
-  color:#441122;
-  foo:#00fF11 #ABC #AABbCc #123344;
-  border-color:#aa66ccC
-}
-
-.foo #AABBCC {
-  background-color:#fFEe11;
-  color:#441122;
-  border-color:#AbC;
-  filter: chroma(color= #FFFFFF)
-}
-
-.bar, #AABBCC {
-  background-color:#FFee11;
-  border-color:#00fF11 #ABCDEF;
-  filter: chroma(color=#11FFFFFF);
-  color:#441122;
-}
-
-.foo, #AABBCC.foobar {
-  background-color:#ffee11;
-  border-color:#00fF11 #ABCDEF #AABbCc;
-  color:#441122;
-}
-
-@media screen {
-    .bar, #AABBCC {
-      background-color:#ffEE11;
-      color:#441122
-    }
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color.css.min
deleted file mode 100644
index cf2103a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/color.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.color{me:#7b7b7b;impressed:#fed;again:#abcdef;andagain:#a6c;background-color:#aa66ccc;filter:chroma(color="#FFFFFF");background:none repeat scroll 0 0 #f00;alpha:rgba(1,2,3,4);color:#12a}#AABBCC{background-color:#fe1;filter:chroma(color = #FFFFFF);color:#412;foo:#0f1 #ABC #abc #123344;border-color:#aa66ccC}.foo #AABBCC{background-color:#fe1;color:#412;border-color:#AbC;filter:chroma(color= #FFFFFF)}.bar,#AABBCC{background-color:#fe1;border-color:#0f1 #abcdef;filter:chroma(color=#11FFFFFF);color:#412}.foo,#AABBCC.foobar{background-color:#fe1;border-color:#0f1 #abcdef #abc;color:#412}@media screen{.bar,#AABBCC{background-color:#fe1;color:#412}}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/comment.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/comment.css
deleted file mode 100644
index 7073b9e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/comment.css
+++ /dev/null
@@ -1,3 +0,0 @@
-html >/**/ body p {
-    color: blue; 
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/comment.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/comment.css.min
deleted file mode 100644
index b280371..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/comment.css.min
+++ /dev/null
@@ -1 +0,0 @@
-html>/**/body p{color:blue}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/concat-charset.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/concat-charset.css
deleted file mode 100644
index 87ca565..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/concat-charset.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/* This is invalid CSS, but frequently happens as a result of concatenation. */
-@charset "utf-8";
-#foo {
-	border-width:1px;
-}
-/*
-Note that this is erroneous!
-The actual CSS file can only have a single charset.
-However, this is the job of the author/application.
-The compressor should not get involved.
-*/
-@charset "another one";
-#bar {
-	border-width:10px;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/concat-charset.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/concat-charset.css.min
deleted file mode 100644
index 73e8d3b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/concat-charset.css.min
+++ /dev/null
@@ -1 +0,0 @@
-@charset "utf-8";#foo{border-width:1px}#bar{border-width:10px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-doublequotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-doublequotes.css
deleted file mode 100644
index 49a1315..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-doublequotes.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,
-.yui3-skin-night .yui3-dial-center-button-vml,
-.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night .yui3-dial-marker-vml,
-.yui3-skin-night .yui3-dial-handle-vml {
-    background: none;
-    opacity:1;
-}
-
-div.base64-doublequotes {
-    width:100px;
-    height:100px;
-    background-image:url(   "data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ" );
-    background-position:center center;
-    border:1px solid #00aa00;
-}
-
-.yui-skin-sam .yui-h-slider {
-    background: url(bg-h.gif) no-repeat 5px 0;
-    height: 28px;
-    width: 228px;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-doublequotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-doublequotes.css.min
deleted file mode 100644
index 223d27a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-doublequotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:0;opacity:1}div.base64-doublequotes{width:100px;height:100px;background-image:url("data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ");background-position:center center;border:1px solid #0a0}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-eof.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-eof.css
deleted file mode 100644
index a50ad77..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-eof.css
+++ /dev/null
@@ -1,10 +0,0 @@
-div.base64-singlequotes {
-    width:100px;
-    height:100px;
-    background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');
-    background-position:center center;
-    border:1px solid #00aa00;
-}
-div.otherdataurl {
-    background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC");
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-eof.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-eof.css.min
deleted file mode 100644
index 1f6d2e2..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-eof.css.min
+++ /dev/null
@@ -1 +0,0 @@
-div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');background-position:center center;border:1px solid #0a0}div.otherdataurl{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC")}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-linebreakindata.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-linebreakindata.css
deleted file mode 100644
index c3f686f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-linebreakindata.css
+++ /dev/null
@@ -1,34 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,
-.yui3-skin-night .yui3-dial-center-button-vml,
-.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night .yui3-dial-marker-vml,
-.yui3-skin-night .yui3-dial-handle-vml {
-    background: none;
-    opacity:1;
-}
-
-div.base64-doublequotes {
-    width:100px;
-    height:100px;
-    background-image:url(   "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwq
-                                                    wjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWi
-                                                    iBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv
-                                                    1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOM
-                                                    hWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtT
-                                                    vICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYm
-                                                    yeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDi
-                                                    QonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BW
-                                                    rozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OB
-                                                    GjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2Fu
-                                                    pH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6
-                                                    EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC" );
-    background-position:center center;
-    border:1px solid #00aa00;
-}
-
-.yui-skin-sam .yui-h-slider {
-    background: url(bg-h.gif) no-repeat 5px 0;
-    height: 28px;
-    width: 228px;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-linebreakindata.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-linebreakindata.css.min
deleted file mode 100644
index 1ac0e17..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-linebreakindata.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:0;opacity:1}div.base64-doublequotes{width:100px;height:100px;background-image:url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC");background-position:center center;border:1px solid #0a0}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-noquotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-noquotes.css
deleted file mode 100644
index 71b0962..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-noquotes.css
+++ /dev/null
@@ -1,26 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,
-.yui3-skin-night .yui3-dial-center-button-vml,
-.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night .yui3-dial-marker-vml,
-.yui3-skin-night .yui3-dial-handle-vml {
-    background: none;
-    opacity:1;
-}
-
-div.base64-noquotes {
-    width:100px;
-    height:100px;
-    background-image:url(   
-        data:image/jpeg;base64,
-        %2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ   
-    );
-    background-position:center center;
-    border:1px solid #00aa00;
-}
-
-.yui-skin-sam .yui-h-slider {
-    background: url(bg-h.gif) no-repeat 5px 0;
-    height: 28px;
-    width: 228px;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-noquotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-noquotes.css.min
deleted file mode 100644
index f57be99..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-noquotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:0;opacity:1}div.base64-noquotes{width:100px;height:100px;background-image:url(data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ);background-position:center center;border:1px solid #0a0}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-singlequotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-singlequotes.css
deleted file mode 100644
index 1ec9f67..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-singlequotes.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,
-.yui3-skin-night .yui3-dial-center-button-vml,
-.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night .yui3-dial-marker-vml,
-.yui3-skin-night .yui3-dial-handle-vml {
-    background: none;
-    opacity:1;
-}
-
-div.base64-singlequotes {
-    width:100px;
-    height:100px;
-    background-image:url('data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ');
-    background-position:center center;
-    border:1px solid #00aa00;
-}
-
-.yui-skin-sam .yui-h-slider {
-    background: url(bg-h.gif) no-repeat 5px 0;
-    height: 28px;
-    width: 228px;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-singlequotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-singlequotes.css.min
deleted file mode 100644
index 8f3398d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-singlequotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:0;opacity:1}div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ');background-position:center center;border:1px solid #0a0}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-twourls.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-twourls.css
deleted file mode 100644
index 222342f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-twourls.css
+++ /dev/null
@@ -1,27 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,
-.yui3-skin-night .yui3-dial-center-button-vml,
-.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night v\:oval.yui3-dial-marker-max-min,
-.yui3-skin-night .yui3-dial-marker-vml,
-.yui3-skin-night .yui3-dial-handle-vml {
-    background: none;
-    opacity:1;
-}
-
-div.base64-singlequotes {
-    width:100px;
-    height:100px;
-    background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');
-    background-position:center center;
-    border:1px solid #00aa00;
-}
-
-div.otherdataurl {
-    background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC");
-}
-
-.yui-skin-sam .yui-h-slider {
-    background: url(bg-h.gif) no-repeat 5px 0;
-    height: 28px;
-    width: 228px;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-twourls.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-twourls.css.min
deleted file mode 100644
index d919bca..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-base64-twourls.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:0;opacity:1}div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');background-position:center center;border:1px solid #0a0}div.otherdataurl{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC")}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-dbquote-font.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-dbquote-font.css
deleted file mode 100644
index f9799d7..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-dbquote-font.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/*csslint fontfamily: true*/
-
-/**
- * Foo
- */
-
-.y-ff-1 {
-    font-family:"Foo Bar",Helvetica,Arial;
-    text-rendering: optimizeLegibility;
-}
-
-.ua-op .y-ff-1 {
-    /* Some Comment */
-    font-family:Helvetica,Arial;
-}
-
-/*
-Foo
-
-Bar
-*/
-
-@font-face {
-	font-family: "Foo Bar";
-    src: url("data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA") format("truetype"),
-	     url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");
-	font-weight: normal;
-	font-style: normal;
-}
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-dbquote-font.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-dbquote-font.css.min
deleted file mode 100644
index 7c4c0ed..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-dbquote-font.css.min
+++ /dev/null
@@ -1,5 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url("data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA") format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-doublequotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-doublequotes.css
deleted file mode 100644
index 0d45c94..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-doublequotes.css
+++ /dev/null
@@ -1,13 +0,0 @@
-div.nonbase64-doublequotes {
-    width:100px;
-    height:100px;
-    background-image:url(
-        "data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0'''%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82"
-    );
-    border:1px solid #00aa00;
-}
-
-span.othercss {
-    font-family:"Times New Roman";
-    font-weight:inherit;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-doublequotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-doublequotes.css.min
deleted file mode 100644
index 1acc41d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-doublequotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-doublequotes{width:100px;height:100px;background-image:url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0'''%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82");border:1px solid #0a0}span.othercss{font-family:"Times New Roman";font-weight:inherit}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-noquotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-noquotes.css
deleted file mode 100644
index b4bc9b2..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-noquotes.css
+++ /dev/null
@@ -1,11 +0,0 @@
-div.nonbase64-noquotes {
-    width:100px;
-    height:100px;
-    background-image:url( data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh\)\)\)%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3\(\(\(%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82 );
-    border:1px solid red;
-}
-
-span.othercss {
-    font-family:"Times New Roman";
-    font-weight:inherit;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-noquotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-noquotes.css.min
deleted file mode 100644
index 8f4bf08..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-noquotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-noquotes{width:100px;height:100px;background-image:url(data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh\)\)\)%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3\(\(\(%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82);border:1px solid red}span.othercss{font-family:"Times New Roman";font-weight:inherit}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-singlequotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-singlequotes.css
deleted file mode 100644
index 0488549..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-singlequotes.css
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Some Comment */
-
-div.nonbase64-singlequotes {
-    width:100px;
-    height:100px;
-    background-image:url('data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82');
-    border:1px solid #0000aa;
-}
-
-/* Some Other Comment */
-
-span.othercss {
-    font-family:"Times New Roman";
-    font-weight:inherit;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-singlequotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-singlequotes.css.min
deleted file mode 100644
index badbf06..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-nonbase64-singlequotes.css.min
+++ /dev/null
@@ -1,2 +0,0 @@
-div.nonbase64-singlequotes{width:100px;height:100px;background-image:url('data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82');border:1px solid #00a}span.othercss{font-family:"Times New Roman";font-weight:inherit}
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-noquote-multiline-font.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-noquote-multiline-font.css
deleted file mode 100644
index 722c7ed..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-noquote-multiline-font.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/*csslint fontfamily: true*/
-
-/**
- * Foo
- */
-
-.y-ff-1 {
-    font-family:"Foo Bar",Helvetica,Arial;
-    text-rendering: optimizeLegibility;
-}
-
-.ua-op .y-ff-1 {
-    /* Some Comment */
-    font-family:Helvetica,Arial;
-}
-
-/*
-Foo
-
-Bar
-*/
-
-@font-face {
-    font-family: "Foo Bar";
-    src: url(
-            data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA) format("truetype"),
-         url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");
-    font-weight: normal;
-    font-style: normal;
-}
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-noquote-multiline-font.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-noquote-multiline-font.css.min
deleted file mode 100644
index 6b32e33..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-noquote-multiline-font.css.min
+++ /dev/null
@@ -1,3 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url(data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA) format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-doublequotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-doublequotes.css
deleted file mode 100644
index e86097c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-doublequotes.css
+++ /dev/null
@@ -1,90 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar {
-    -webkit-transform: translate3d(0, 0, 0);
-    -moz-transform: translate(0, 0); 
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle, 
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-radius:3px;
-    -webkit-border-radius: 3px;
-    -moz-border-radius: 3px;
-    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==");
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-bottom-right-radius:0; 
-    border-bottom-left-radius:0;
-
-    -webkit-border-bottom-right-radius:0; 
-    -webkit-border-bottom-left-radius:0;
-
-    -moz-border-radius-bottomright:0; 
-    -moz-border-radius-bottomleft:0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-radius:0; 
-    border-bottom-right-radius:3px; 
-    border-bottom-left-radius:3px; 
-
-    -webkit-border-radius:0; 
-    -webkit-border-bottom-right-radius:3px; 
-    -webkit-border-bottom-left-radius:3px; 
-    -webkit-transform: translate3d(0, 0, 0);
-
-    -moz-border-radius:0; 
-    -moz-border-radius-bottomright:3px; 
-    -moz-border-radius-bottomleft:3px; 
-    -moz-transform: translate(0, 0);
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle {
-    border-radius:0; 
-    -webkit-border-radius: 0;
-    -moz-border-radius: 0; 
-
-    -webkit-transform: translate3d(0,0,0) scaleY(1); 
-    -webkit-transform-origin-y: 0;
-
-    -moz-transform: translate(0,0) scaleY(1); 
-    -moz-transform-origin: 0 0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last {
-    border-top-right-radius: 0;
-    border-bottom-left-radius: 3px;
- 
-    -webkit-border-top-right-radius: 0;
-    -webkit-border-bottom-left-radius: 3px;
-
-    -moz-border-radius-topright: 0;
-    -moz-border-radius-bottomleft: 3px;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last {
-    border-bottom-left-radius: 0; 
-    border-top-right-radius: 3px;
-
-    -webkit-border-bottom-left-radius: 0; 
-    -webkit-border-top-right-radius: 3px;
-
-    -moz-border-radius-bottomleft: 0; 
-    -moz-border-radius-topright: 3px; 
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle { 
-    -webkit-transform: translate3d(0,0,0) scaleX(1); 
-    -webkit-transform-origin: 0 0;
-
-    -moz-transform: translate(0,0) scaleX(1); 
-    -moz-transform-origin: 0 0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child {
-    background-color: #aaa;
-    background-image: none;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-doublequotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-doublequotes.css.min
deleted file mode 100644
index f9e7600..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-doublequotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==")}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-noquotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-noquotes.css
deleted file mode 100644
index ddf720e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-noquotes.css
+++ /dev/null
@@ -1,90 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar {
-    -webkit-transform: translate3d(0, 0, 0);
-    -moz-transform: translate(0, 0); 
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle, 
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-radius:3px;
-    -webkit-border-radius: 3px;
-    -moz-border-radius: 3px;
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==);
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-bottom-right-radius:0; 
-    border-bottom-left-radius:0;
-
-    -webkit-border-bottom-right-radius:0; 
-    -webkit-border-bottom-left-radius:0;
-
-    -moz-border-radius-bottomright:0; 
-    -moz-border-radius-bottomleft:0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-radius:0; 
-    border-bottom-right-radius:3px; 
-    border-bottom-left-radius:3px; 
-
-    -webkit-border-radius:0; 
-    -webkit-border-bottom-right-radius:3px; 
-    -webkit-border-bottom-left-radius:3px; 
-    -webkit-transform: translate3d(0, 0, 0);
-
-    -moz-border-radius:0; 
-    -moz-border-radius-bottomright:3px; 
-    -moz-border-radius-bottomleft:3px; 
-    -moz-transform: translate(0, 0);
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle {
-    border-radius:0; 
-    -webkit-border-radius: 0;
-    -moz-border-radius: 0; 
-
-    -webkit-transform: translate3d(0,0,0) scaleY(1); 
-    -webkit-transform-origin-y: 0;
-
-    -moz-transform: translate(0,0) scaleY(1); 
-    -moz-transform-origin: 0 0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last {
-    border-top-right-radius: 0;
-    border-bottom-left-radius: 3px;
- 
-    -webkit-border-top-right-radius: 0;
-    -webkit-border-bottom-left-radius: 3px;
-
-    -moz-border-radius-topright: 0;
-    -moz-border-radius-bottomleft: 3px;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last {
-    border-bottom-left-radius: 0; 
-    border-top-right-radius: 3px;
-
-    -webkit-border-bottom-left-radius: 0; 
-    -webkit-border-top-right-radius: 3px;
-
-    -moz-border-radius-bottomleft: 0; 
-    -moz-border-radius-topright: 3px; 
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle { 
-    -webkit-transform: translate3d(0,0,0) scaleX(1); 
-    -webkit-transform-origin: 0 0;
-
-    -moz-transform: translate(0,0) scaleX(1); 
-    -moz-transform-origin: 0 0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child {
-    background-color: #aaa;
-    background-image: none;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-noquotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-noquotes.css.min
deleted file mode 100644
index 110f9fc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-noquotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-singlequotes.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-singlequotes.css
deleted file mode 100644
index 9d6ec7a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-singlequotes.css
+++ /dev/null
@@ -1,90 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar {
-    -webkit-transform: translate3d(0, 0, 0);
-    -moz-transform: translate(0, 0); 
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle, 
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-radius:3px;
-    -webkit-border-radius: 3px;
-    -moz-border-radius: 3px;
-    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==');
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-bottom-right-radius:0; 
-    border-bottom-left-radius:0;
-
-    -webkit-border-bottom-right-radius:0; 
-    -webkit-border-bottom-left-radius:0;
-
-    -moz-border-radius-bottomright:0; 
-    -moz-border-radius-bottomleft:0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last {
-    border-radius:0; 
-    border-bottom-right-radius:3px; 
-    border-bottom-left-radius:3px; 
-
-    -webkit-border-radius:0; 
-    -webkit-border-bottom-right-radius:3px; 
-    -webkit-border-bottom-left-radius:3px; 
-    -webkit-transform: translate3d(0, 0, 0);
-
-    -moz-border-radius:0; 
-    -moz-border-radius-bottomright:3px; 
-    -moz-border-radius-bottomleft:3px; 
-    -moz-transform: translate(0, 0);
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle {
-    border-radius:0; 
-    -webkit-border-radius: 0;
-    -moz-border-radius: 0; 
-
-    -webkit-transform: translate3d(0,0,0) scaleY(1); 
-    -webkit-transform-origin-y: 0;
-
-    -moz-transform: translate(0,0) scaleY(1); 
-    -moz-transform-origin: 0 0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last {
-    border-top-right-radius: 0;
-    border-bottom-left-radius: 3px;
- 
-    -webkit-border-top-right-radius: 0;
-    -webkit-border-bottom-left-radius: 3px;
-
-    -moz-border-radius-topright: 0;
-    -moz-border-radius-bottomleft: 3px;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last {
-    border-bottom-left-radius: 0; 
-    border-top-right-radius: 3px;
-
-    -webkit-border-bottom-left-radius: 0; 
-    -webkit-border-top-right-radius: 3px;
-
-    -moz-border-radius-bottomleft: 0; 
-    -moz-border-radius-topright: 3px; 
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle { 
-    -webkit-transform: translate3d(0,0,0) scaleX(1); 
-    -webkit-transform-origin: 0 0;
-
-    -moz-transform: translate(0,0) scaleX(1); 
-    -moz-transform-origin: 0 0;
-}
-
-.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,
-.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child {
-    background-color: #aaa;
-    background-image: none;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-singlequotes.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-singlequotes.css.min
deleted file mode 100644
index 1a4e2c6..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-singlequotes.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==')}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-yuiapp.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-yuiapp.css
deleted file mode 100644
index 78d615d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-yuiapp.css
+++ /dev/null
@@ -1,106 +0,0 @@
-html {
-    background: #fff;
-    color: #555;
-    height: 100%;
-}
- 
-#hd, #bd, #ft {
-    padding: 0 50px;
-}
- 
-#bd {
-    padding-bottom: 50px;
-    border-bottom: 1px solid #006e9c;
-}
- 
-#ft {
-    background: transparent no-repeat 0% 100%;
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAeCAMAAAC/pnaKAAAAwFBMVEUkXIAoYYQoYYQoYYQyao02bpE6cpQ6cpREe51LgqNUiqtUiqtUiqtZj7BckrNlmrtlmrtlmrtroMB3qsp3qsp3qsp+sdCHudiHudiHudiHudiPwN+YyOaYyOaYyOaf0O2g0O6n1vOn1vOn1vOn1vOw3vu45f245f245f3B7f7K9f7K9f7K9f7X/v7X/v7p//7p//79//79//4AAABhAGMAbwBzAC4AcwB0AHIAaQBuAGcAcwABAAAAwIwmGwEAAABQQKFUAAAAQHRSTlP///////////////////////////////////////////////////////////////////8A////////////////0pfSbwAAAdtJREFUOI2NlNGqgzAMhv/ClDlQQcFdKOx4McFCKcH3f7eTtLWr07mFiUvbzz9Nk2LZGRH5937qZTiGyEx0Cr5xQpEd6xzNueCGc9SzUmAzP8cplO1zgRRutBAlM9EhZwknWj1LKXkwbOVojTqMEpKZOfeUD3OnR24VWeJf1OOBTnTgw8zZr3LyOlbdrWrdGlpG6Alz4Ni3RcT4Ldm8wHpOo9Yo5CPsdngM6D3HmLlESrgHD+YvrtEuUeLeMf7x7j23GJVgbJoHs0/cI3B7TNkfON5btsEUrvSdY694U0P9nXMp2mDsdbLmY14CN8XDjtzgo9CuqpYnGoMscDUmn08qsbOn/3Lte6rgP1eM7qQ1YMP+yPhiTmx2laDQspytgJI1MbIzZ7yHfj2/hYYtZ1xMM4dc3iTukjgJyKsrUBEH4uqFXNUh3aXxtWjbC3DpH8LRVPJ8MXLoA8fsz51ue73Q+1z7RkTEF0dWa1o5a8001C6ZbGuzh0bSTo9iS8X+C/NWbfTW5uZ9Vu4QaL20Xv3uhgyrZUXVtI2NfS3fbzgP75dNek/YbrL+k/EykecuZf6ZOzDJYsf9PCV3xhFHq7043mw+H1ylW+5Ab5jpADuPM2Z1P3POLWnUG/sHnIDsqkOjlqoAAAAASUVORK5CYII=);
-    /* image width: 55px */
-    padding: 0 0 40px 0;
-    margin: 50px;
-}
- 
-#hd, #bd {
-    background: #f9f9f9;
-}
- 
-body {
-    margin: 0;
-    padding: 0;
-    font: 12px "Helvetica Nueue", Arial, sans-serif;
-}
- 
-#hd {
-    color: #fff;
-    padding-top: 50px;
-    margin: 0;
-}
- 
-#hd, h1, h2, p, .color {
-    margin: auto;
-}
- 
-h1, h2, a {
-    color: #006e9c;
-}
- 
-h1, h2 {
-    margin-top: 0;
-}
- 
-h4 .title  {
-    font-weight: bold;
-    letter-spacing: -2px;
-    font-size: 47px;
-    text-shadow: 0 1px 0 #369;
-    background: #006e9d;
-    color: #fff;
-    padding: 0 10px;
-}
- 
-h4 {
-    display: block;
-    float: right;
-    margin: 0 0 0 20px;
-}
- 
-h4 .what {
-    display: block;
-    padding: 4px;
-    text-align: center;
-    font-weight: normal;
-}
- 
-h4 .version {
-    font-size: 11px;
-    color: #ccc;
-}
- 
-h2 {
-    font-size: 40px;
-    font-family: "HelveticaNeue-Light", "Helvetica Neue Light",
-                 "Helvetica Neue", sans-serif;
-    font-weight: 300;
-}
- 
-h4, p {
-    padding: 6px 0 6px;
-}
- 
-#ft p.fine, #ft p.fine a {
-    color: #999;
-}
- 
-#ft p.intro {
-    font-size: 12px;
-}
- 
-#bd {
-    font-size: 14px;
-    color: #666;
-}
- 
-#ft p {
-    font-size: 11px;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-yuiapp.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-yuiapp.css.min
deleted file mode 100644
index 8d58663..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-realdata-yuiapp.css.min
+++ /dev/null
@@ -1 +0,0 @@
-html{background:#fff;color:#555;height:100%}#hd,#bd,#ft{padding:0 50px}#bd{padding-bottom:50px;border-bottom:1px solid #006e9c}#ft{background:transparent no-repeat 0 100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAeCAMAAAC/pnaKAAAAwFBMVEUkXIAoYYQoYYQoYYQyao02bpE6cpQ6cpREe51LgqNUiqtUiqtUiqtZj7BckrNlmrtlmrtlmrtroMB3qsp3qsp3qsp+sdCHudiHudiHudiHudiPwN+YyOaYyOaYyOaf0O2g0O6n1vOn1vOn1vOn1vOw3vu45f245f245f3B7f7K9f7K9f7K9f7X/v7X/v7p//7p//79//79//4AAABhAGMAbwBzAC4AcwB0AHIAaQBuAGcAcwABAAAAwIwmGwEAAABQQKFUAAAAQHRSTlP///////////////////////////////////////////////////////////////////8A////////////////0pfSbwAAAdtJREFUOI2NlNGqgzAMhv/ClDlQQcFdKOx4McFCKcH3f7eTtLWr07mFiUvbzz9Nk2LZGRH5937qZTiGyEx0Cr5xQpEd6xzNueCGc9SzUmAzP8cplO1zgRRutBAlM9EhZwknWj1LKXkwbOVojTqMEpKZOfeUD3OnR24VWeJf1OOBTnTgw8zZr3LyOlbdrWrdGlpG6Alz4Ni3RcT4Ldm8wHpOo9Yo5CPsdngM6D3HmLlESrgHD+YvrtEuUeLeMf7x7j23GJVgbJoHs0/cI3B7TNkfON5btsEUrvSdY694U0P9nXMp2mDsdbLmY14CN8XDjtzgo9CuqpYnGoMscDUmn08qsbOn/3Lte6rgP1eM7qQ1YMP+yPhiTmx2laDQspytgJI1MbIzZ7yHfj2/hYYtZ1xMM4dc3iTukjgJyKsrUBEH4uqFXNUh3aXxtWjbC3DpH8LRVPJ8MXLoA8fsz51ue73Q+1z7RkTEF0dWa1o5a8001C6ZbGuzh0bSTo9iS8X+C/NWbfTW5uZ9Vu4QaL20Xv3uhgyrZUXVtI2NfS3fbzgP75dNek/YbrL+k/EykecuZf6ZOzDJYsf9PCV3xhFHq7043mw+H1ylW+5Ab5jpADuPM2Z1P3POLWnUG/sHnIDsqkOjlqoAAAAASUVORK5CYII=);padding:0 0 40px 0;margin:50px}#hd,#bd{background:#f9f9f9}body{margin:0;padding:0;font:12px "Helvetica Nueue",Arial,sans-serif}#hd{color:#fff;padding-top:50px;margin:0}#hd,h1,h2,p,.color{margin:auto}h1,h2,a{color:#006e9c}h1,h2{margin-top:0}h4 .title{font-weight:bold;letter-spacing:-2px;font-size:47px;text-shadow:0 1px 0 #369;background:#006e9d;color:#fff;padding:0 10px}h4{display:block;float:right;margin:0 0 0 20px}h4 .what{display:block;padding:4px;text-align:center;font-weight:normal}h4 .version{font-size:11px;color:#ccc}h2{font-size:40px;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-weight:300}h4,p{padding:6px 0 6px}#ft p.fine,#ft p.fine a{color:#999}#ft p.intro{font-size:12px}#bd{font-size:14px;color:#666}#ft p{font-size:11px}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-singlequote-font.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-singlequote-font.css
deleted file mode 100644
index 91bb3ed..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-singlequote-font.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/*csslint fontfamily: true*/
-
-/**
- * Foo
- */
-
-.y-ff-1 {
-    font-family:"Foo Bar",Helvetica,Arial;
-    text-rendering: optimizeLegibility;
-}
-
-.ua-op .y-ff-1 {
-    /* Some Comment */
-    font-family:Helvetica,Arial;
-}
-
-/*
-Foo
-
-Bar
-*/
-
-@font-face {
-    font-family: "Foo Bar";
-    src: url('data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA') format("truetype"),
-         url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");
-    font-weight: normal;
-    font-style: normal;
-}
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-singlequote-font.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-singlequote-font.css.min
deleted file mode 100644
index fd51d54..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dataurl-singlequote-font.css.min
+++ /dev/null
@@ -1,3 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url('data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA') format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/decimals.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/decimals.css
deleted file mode 100644
index 9593979..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/decimals.css
+++ /dev/null
@@ -1,3 +0,0 @@
-::selection { 
-  margin: 0.6px 0.333pt 1.2em 8.8cm;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/decimals.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/decimals.css.min
deleted file mode 100644
index 4dadedc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/decimals.css.min
+++ /dev/null
@@ -1 +0,0 @@
-::selection{margin:.6px .333pt 1.2em 8.8cm}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dollar-header.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dollar-header.css
deleted file mode 100644
index 43999c4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dollar-header.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
-$Header: /temp/dirname/filename.css 3 2/02/08 3:37p JSmith $
-*/
-
-foo {
-	bar: baz
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dollar-header.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dollar-header.css.min
deleted file mode 100644
index 9308100..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/dollar-header.css.min
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-$Header: /temp/dirname/filename.css 3 2/02/08 3:37p JSmith $
-*/foo{bar:baz}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/font-face.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/font-face.css
deleted file mode 100644
index 4b6956c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/font-face.css
+++ /dev/null
@@ -1,6 +0,0 @@
-@font-face {
-  font-family: 'gzipper';
-  src: url(yanone.eot);
-  src: local('gzipper'), 
-          url(yanone.ttf) format('truetype');
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/font-face.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/font-face.css.min
deleted file mode 100644
index 3a1077c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/font-face.css.min
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:'gzipper';src:url(yanone.eot);src:local('gzipper'),url(yanone.ttf) format('truetype')}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/ie5mac.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/ie5mac.css
deleted file mode 100644
index e4d5204..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/ie5mac.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/* Ignore the next rule in IE mac \*/
-.selector {
-   color: khaki;
-}
-/* Stop ignoring in IE mac */
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/ie5mac.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/ie5mac.css.min
deleted file mode 100644
index f90df41..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/ie5mac.css.min
+++ /dev/null
@@ -1 +0,0 @@
-/*\*/.selector{color:khaki}/**/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-empty-class.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-empty-class.css
deleted file mode 100644
index d2f22d5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-empty-class.css
+++ /dev/null
@@ -1,16 +0,0 @@
-/*! preserved */
-emptiness {}
-
-@import "another.css";
-/* I'm empty - delete me */
-empty { ;}
-
-@media print {
-	.noprint { display: none; }
-}
-
-@media screen {
-	/* this rule should be removed, not simply minified.*/
-	.breakme {}
-	.printonly { display: none; }
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-empty-class.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-empty-class.css.min
deleted file mode 100644
index 0350c7f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-empty-class.css.min
+++ /dev/null
@@ -1 +0,0 @@
-/*! preserved */@import "another.css";@media print{.noprint{display:none}}@media screen{.printonly{display:none}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-multi.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-multi.css
deleted file mode 100644
index c589771..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-multi.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@media only all and (max-width:50em), only all and (max-device-width:800px), only all and (max-width:780px) {
-  some-css : here
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-multi.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-multi.css.min
deleted file mode 100644
index 57b52f7..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-multi.css.min
+++ /dev/null
@@ -1 +0,0 @@
-@media only all and (max-width:50em),only all and (max-device-width:800px),only all and (max-width:780px){some-css:here}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-test.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-test.css
deleted file mode 100644
index af118ff..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-test.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-  some-css : here
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-test.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-test.css.min
deleted file mode 100644
index 0e7168e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/media-test.css.min
+++ /dev/null
@@ -1 +0,0 @@
-@media screen and (-webkit-min-device-pixel-ratio:0){some-css:here}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/opacity-filter.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/opacity-filter.css
deleted file mode 100644
index 60deca7..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/opacity-filter.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/*  example from https://developer.mozilla.org/en/CSS/opacity */
-pre {                               /* make the box translucent (80% opaque) */
-   border: solid red;
-   opacity: 0.8;                    /* Firefox, Safari(WebKit), Opera */
-   -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; /* IE 8 */
-   filter: PROGID:DXImageTransform.Microsoft.Alpha(Opacity=80);       /* IE 4-7 */
-   zoom: 1;       /* set "zoom", "width" or "height" to trigger "hasLayout" in IE 7 and lower */ 
-}
-
-/** and again */
-code {
-   -ms-filter: "PROGID:DXImageTransform.Microsoft.Alpha(Opacity=80)"; /* IE 8 */
-   filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);       /* IE 4-7 */
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/opacity-filter.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/opacity-filter.css.min
deleted file mode 100644
index 99b4fa8..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/opacity-filter.css.min
+++ /dev/null
@@ -1 +0,0 @@
-pre{border:solid red;opacity:.8;-ms-filter:"alpha(opacity=80)";filter:alpha(opacity=80);zoom:1}code{-ms-filter:"alpha(opacity=80)";filter:alpha(opacity=80)}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/background-position.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/background-position.out
deleted file mode 100644
index fd00a91..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/background-position.out
+++ /dev/null
@@ -1 +0,0 @@
-a{background-position:0 0 0 0}b{BACKGROUND-POSITION:0 0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/background-position.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/background-position.out.b
deleted file mode 100644
index fd00a91..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/background-position.out.b
+++ /dev/null
@@ -1 +0,0 @@
-a{background-position:0 0 0 0}b{BACKGROUND-POSITION:0 0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/border-none.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/border-none.out
deleted file mode 100644
index 2d0a801..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/border-none.out
+++ /dev/null
@@ -1 +0,0 @@
-a{border:none}b{BACKGROUND:none}s{border-top:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/border-none.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/border-none.out.b
deleted file mode 100644
index 2d0a801..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/border-none.out.b
+++ /dev/null
@@ -1 +0,0 @@
-a{border:none}b{BACKGROUND:none}s{border-top:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/box-model-hack.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/box-model-hack.out
deleted file mode 100644
index 3340179..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/box-model-hack.out
+++ /dev/null
@@ -1 +0,0 @@
-#elem{width:100px;voice-family:"\"}\"";voice-family:inherit;width:200px}html>body #elem{width:200px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/box-model-hack.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/box-model-hack.out.b
deleted file mode 100644
index 3340179..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/box-model-hack.out.b
+++ /dev/null
@@ -1 +0,0 @@
-#elem{width:100px;voice-family:"\"}\"";voice-family:inherit;width:200px}html>body #elem{width:200px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527974.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527974.out
deleted file mode 100644
index 223a62e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527974.out
+++ /dev/null
@@ -1 +0,0 @@
-body{yo:cats}ul[id$=foo] label:hover{yo:yo}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527974.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527974.out.b
deleted file mode 100644
index 00cc007..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527974.out.b
+++ /dev/null
@@ -1 +0,0 @@
-/*! $LastChangedRevision: 81 $ $LastChangedDate: 2009-05-27 17:41:02 +0100 (Wed, 27 May 2009) $ */body{yo:cats}ul[id$=foo] label:hover{yo:yo}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527991.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527991.out
deleted file mode 100644
index d382e11..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527991.out
+++ /dev/null
@@ -1 +0,0 @@
-@media screen and (-webkit-min-device-pixel-ratio:0){a{b:1}}@media screen and (-webkit-min-device-pixel-ratio:0){a{b:1}}@media -webkit-min-device-pixel-ratio:0{a{b:1}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527991.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527991.out.b
deleted file mode 100644
index e417b6a..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527991.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media screen and /*!YUI-Compresser */(-webkit-min-device-pixel-ratio:0){a{b:1}}@media screen and /*! *//*! */(-webkit-min-device-pixel-ratio:0){a{b:1}}@media -webkit-min-device-pixel-ratio:0{a{b:1}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527998.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527998.out
deleted file mode 100644
index ab5f11c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527998.out
+++ /dev/null
@@ -1 +0,0 @@
-body{}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527998.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527998.out.b
deleted file mode 100644
index 9d49cde..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2527998.out.b
+++ /dev/null
@@ -1 +0,0 @@
-/*! special */body{}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2528034.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2528034.out
deleted file mode 100644
index d43fa34..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2528034.out
+++ /dev/null
@@ -1 +0,0 @@
-a[href$="/test/"] span:first-child{b:1}a[href$="/test/"] span:first-child{}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2528034.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2528034.out.b
deleted file mode 100644
index d43fa34..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/bug2528034.out.b
+++ /dev/null
@@ -1 +0,0 @@
-a[href$="/test/"] span:first-child{b:1}a[href$="/test/"] span:first-child{}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/charset-media.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/charset-media.out
deleted file mode 100644
index 9387b8f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/charset-media.out
+++ /dev/null
@@ -1 +0,0 @@
-@charset 'utf-8';@media all{body{}body{background-color:gold}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/charset-media.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/charset-media.out.b
deleted file mode 100644
index 9387b8f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/charset-media.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@charset 'utf-8';@media all{body{}body{background-color:gold}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color-simple.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color-simple.out
deleted file mode 100644
index 2174146..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color-simple.out
+++ /dev/null
@@ -1 +0,0 @@
-.foo,#AABBCC{background-color:#aabbcc;border-color:#Ee66aA #ABCDEF #FeAb2C;filter:chroma(color=#FFFFFF);filter:chroma(color="#AABBCC");filter:chroma(color='#BBDDEE');color:#112233}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color-simple.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color-simple.out.b
deleted file mode 100644
index 2174146..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color-simple.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.foo,#AABBCC{background-color:#aabbcc;border-color:#Ee66aA #ABCDEF #FeAb2C;filter:chroma(color=#FFFFFF);filter:chroma(color="#AABBCC");filter:chroma(color='#BBDDEE');color:#112233}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color.out
deleted file mode 100644
index 1f098e4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color.out
+++ /dev/null
@@ -1 +0,0 @@
-.color{me:rgb(123,123,123);impressed:#FfEedD;again:#ABCDEF;andagain:#aa66cc;background-color:#aa66ccc;filter:chroma(color="#FFFFFF");background:none repeat scroll 0 0 rgb(255,0,0);alpha:rgba(1,2,3,4);color:#1122aa}#AABBCC{background-color:#ffee11;filter:chroma(color=#FFFFFF);color:#441122;foo:#00fF11 #ABC #AABbCc #123344;border-color:#aa66ccC}.foo #AABBCC{background-color:#fFEe11;color:#441122;border-color:#AbC;filter:chroma(color=#FFFFFF)}.bar,#AABBCC{background-color:#FFee11;border-color:#00fF11 #ABCDEF;filter:chroma(color=#11FFFFFF);color:#441122}.foo,#AABBCC.foobar{background-color:#ffee11;border-color:#00fF11 #ABCDEF #AABbCc;color:#441122}@media screen{.bar,#AABBCC{background-color:#ffEE11;color:#441122}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color.out.b
deleted file mode 100644
index 1f098e4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/color.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.color{me:rgb(123,123,123);impressed:#FfEedD;again:#ABCDEF;andagain:#aa66cc;background-color:#aa66ccc;filter:chroma(color="#FFFFFF");background:none repeat scroll 0 0 rgb(255,0,0);alpha:rgba(1,2,3,4);color:#1122aa}#AABBCC{background-color:#ffee11;filter:chroma(color=#FFFFFF);color:#441122;foo:#00fF11 #ABC #AABbCc #123344;border-color:#aa66ccC}.foo #AABBCC{background-color:#fFEe11;color:#441122;border-color:#AbC;filter:chroma(color=#FFFFFF)}.bar,#AABBCC{background-color:#FFee11;border-color:#00fF11 #ABCDEF;filter:chroma(color=#11FFFFFF);color:#441122}.foo,#AABBCC.foobar{background-color:#ffee11;border-color:#00fF11 #ABCDEF #AABbCc;color:#441122}@media screen{.bar,#AABBCC{background-color:#ffEE11;color:#441122}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/comment.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/comment.out
deleted file mode 100644
index b280371..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/comment.out
+++ /dev/null
@@ -1 +0,0 @@
-html>/**/body p{color:blue}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/comment.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/comment.out.b
deleted file mode 100644
index b280371..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/comment.out.b
+++ /dev/null
@@ -1 +0,0 @@
-html>/**/body p{color:blue}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/concat-charset.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/concat-charset.out
deleted file mode 100644
index 20967ab..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/concat-charset.out
+++ /dev/null
@@ -1 +0,0 @@
-@charset "utf-8";#foo{border-width:1px}@charset "another one";#bar{border-width:10px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/concat-charset.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/concat-charset.out.b
deleted file mode 100644
index 20967ab..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/concat-charset.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@charset "utf-8";#foo{border-width:1px}@charset "another one";#bar{border-width:10px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-doublequotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-doublequotes.out
deleted file mode 100644
index 1db2942..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-doublequotes.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-doublequotes{width:100px;height:100px;background-image:url("data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ");background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-doublequotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-doublequotes.out.b
deleted file mode 100644
index 1db2942..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-doublequotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-doublequotes{width:100px;height:100px;background-image:url("data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ");background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-eof.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-eof.out
deleted file mode 100644
index d9007b5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-eof.out
+++ /dev/null
@@ -1 +0,0 @@
-div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');background-position:center center;border:1px solid #00aa00}div.otherdataurl{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC")}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-eof.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-eof.out.b
deleted file mode 100644
index d9007b5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-eof.out.b
+++ /dev/null
@@ -1 +0,0 @@
-div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');background-position:center center;border:1px solid #00aa00}div.otherdataurl{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC")}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-linebreakindata.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-linebreakindata.out
deleted file mode 100644
index 64dbe31..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-linebreakindata.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-doublequotes{width:100px;height:100px;background-image:url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC");background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-linebreakindata.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-linebreakindata.out.b
deleted file mode 100644
index 64dbe31..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-linebreakindata.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-doublequotes{width:100px;height:100px;background-image:url("data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC");background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-noquotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-noquotes.out
deleted file mode 100644
index 7a34c0c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-noquotes.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-noquotes{width:100px;height:100px;background-image:url(data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ);background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-noquotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-noquotes.out.b
deleted file mode 100644
index 7a34c0c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-noquotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-noquotes{width:100px;height:100px;background-image:url(data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ);background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-singlequotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-singlequotes.out
deleted file mode 100644
index 1da5b6d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-singlequotes.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ');background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-singlequotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-singlequotes.out.b
deleted file mode 100644
index 1da5b6d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-singlequotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/jpeg;base64,%2F9j%2F4AAQSkZJRgABAgEAZABkAAD%2F4RfJRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAAD0JAAAAnEAAPQkAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBNYWNpbnRvc2gAMjAwODowNzoxOSAxNDo1ODowNQAAA6ABAAMAAAAB%2F%2F8AAKACAAQAAAABAAABwqADAAQAAAABAAABRQAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABaTAAAAAAAAAEgAAAABAAAASAAAAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZ%2F%2B01IlBob3Rvc2hvcCAzLjAAOEJJTQQlAAAAAAAQAAAAAAAAAAAAAAAAAAAAADhCSU0D6gAAAAAYEDw%2FeG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8%2BCjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1Ib3Jpem9udGFsUmVzPC9rZXk%2BCgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0aW9uPC9rZXk%2BCgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJPGRpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1TY2FsaW5nPC9rZXk%2BCgkJCQk8cmVhbD4xPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q%2BCgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxSZXM8L2tleT4KCQkJCTxyZWFsPjcyPC9yZWFsPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk%2BCgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJCQkJPHJlYWw%2BMTwvcmVhbD4KCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuc3ViVGlja2V0LnBhcGVyX2luZm9fdGlja2V0PC9rZXk%2BCgk8ZGljdD4KCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNUFBEUGFwZXJDb2RlTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BUE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPm5hLWxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk%2BCgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk%2BCgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD43NzQ8L3JlYWw%2BCgkJCQkJCTxyZWFsPjU5NDwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJOYW1lPC9rZXk%2BCgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk%2BCgkJCQkJPGludGVnZXI%2BMDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q%2BCgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk%2BCgkJPGRpY3Q%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk%2BCgkJCTxzdHJpbmc%2BY29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk%2BCgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BMC4wPC9yZWFsPgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw%2BCgkJCQkJCTxyZWFsPjczNDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTc2PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw%2BLTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw%2BCgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw%2BNTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc%2BCgkJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLnBwZC5QTVBhcGVyTmFtZTwva2V5PgoJCQkJCTxzdHJpbmc%2BVVMgTGV0dGVyPC9zdHJpbmc%2BCgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI%2BCgkJCQk8L2RpY3Q%2BCgkJCTwvYXJyYXk%2BCgkJPC9kaWN0PgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk%2BCgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk%2BY29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk%2BCgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc%2BCgk8L2RpY3Q%2BCgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc%2BY29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0Pgo4QklNA%2BkAAAAAAHgAAwAAAEgASAAAAAAC3gJA%2F%2B7%2F7gMGAlIDZwUoA%2FwAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQADAwMAAAABf%2F8AAQABAAAAAAAAAAAAAAAAaAgAGQGQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QklNA%2B0AAAAAABAAZAAAAAEAAQBkAAAAAQABOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD%2BAAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAoAAAAAAAEAADhCSU0nEAAAAAAACgABAAAAAAAAAAE4QklNA%2FUAAAAAAEgAL2ZmAAEAbGZmAAYAAAAAAAEAL2ZmAAEAoZmaAAYAAAAAAAEAMgAAAAEAWgAAAAYAAAAAAAEANQAAAAEALQAAAAYAAAAAAAE4QklNA%2FgAAAAAAHAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAAAD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FA%2BgAAAAA%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwPoAAAAAP%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8D6AAAOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA1UAAAAGAAAAAAAAAAAAAAFFAAABwgAAABAAcwB3AGkAcwBzAF8AYQByAG0AeQBfAGsAbgBpAGYAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABwgAAAUUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQAAAAAAAG51bGwAAAACAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAUUAAAAAUmdodGxvbmcAAAHCAAAABnNsaWNlc1ZsTHMAAAABT2JqYwAAAAEAAAAAAAVzbGljZQAAABIAAAAHc2xpY2VJRGxvbmcAAAAAAAAAB2dyb3VwSURsb25nAAAAAAAAAAZvcmlnaW5lbnVtAAAADEVTbGljZU9yaWdpbgAAAA1hdXRvR2VuZXJhdGVkAAAAAFR5cGVlbnVtAAAACkVTbGljZVR5cGUAAAAASW1nIAAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAFFAAAAAFJnaHRsb25nAAABwgAAAAN1cmxURVhUAAAAAQAAAAAAAG51bGxURVhUAAAAAQAAAAAAAE1zZ2VURVhUAAAAAQAAAAAABmFsdFRhZ1RFWFQAAAABAAAAAAAOY2VsbFRleHRJc0hUTUxib29sAQAAAAhjZWxsVGV4dFRFWFQAAAABAAAAAAAJaG9yekFsaWduZW51bQAAAA9FU2xpY2VIb3J6QWxpZ24AAAAHZGVmYXVsdAAAAAl2ZXJ0QWxpZ25lbnVtAAAAD0VTbGljZVZlcnRBbGlnbgAAAAdkZWZhdWx0AAAAC2JnQ29sb3JUeXBlZW51bQAAABFFU2xpY2VCR0NvbG9yVHlwZQAAAABOb25lAAAACXRvcE91dHNldGxvbmcAAAAAAAAACmxlZnRPdXRzZXRsb25nAAAAAAAAAAxib3R0b21PdXRzZXRsb25nAAAAAAAAAAtyaWdodE91dHNldGxvbmcAAAAAADhCSU0EKAAAAAAADAAAAAE%2F8AAAAAAAADhCSU0EEQAAAAAAAQEAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAAWrwAAAAEAAACgAAAAdAAAAeAAANmAAAAWkwAYAAH%2F2P%2FgABBKRklGAAECAABIAEgAAP%2FtAAxBZG9iZV9DTQAC%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgAdACgAwEiAAIRAQMRAf%2FdAAQACv%2FEAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5%2FcRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14%2FNGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x%2F%2FaAAwDAQACEQMRAD8A9VSSSSUpJJJJSkkkklKSSSSUs4uDSWiXRoOJKFi3Ovx2Wvbse4e5gMwRo5soypdOyN9mTSRHpWvj4Oc4%2FwDVf9WkpupJJJKUkkkkpSSSSSlJJJJKUkkkkp%2F%2F0PVUklCqxttbbG%2FReA4fApKZpJJJKUo2WNrrdY8w1gLnHyAlVOsWvowXZDZ%2FQOZa8D9xrmm3%2FNr3PUswm%2FpmQGamyl4bHiWuhJTYqsFtTLBw9od94U1Q6FkfaOk4tszuqYfwV9JSll1%2FoOt2sOguDXgeTm7f%2FPmN%2FwCCLUWZ1VhrysbKA%2Bjua7zgtuZ%2F1FqIUXTSQcvKZi47sh7XOY0tBDYJhzms3akfR3blVd13prMtuI%2Bwse%2F6L3Ahm7n0%2FU%2Bi2zafzkFOgq9%2Bdj0ZFOM4k3ZDtrGNEnhzt7v3WbWPU8bJpyavVpduZuc2eNWONb2%2F2XtXOY2VU7rA6hnO9RuJS%2Br1hO1lguGJbuYz2extvv3fzLPU%2FwCESU9QkkkkpSSSSSlJJJJKf%2F%2FR9VWf0iwiu3Ff9LGsewT%2B6D7P%2FAyxy0FmunH6xPDMpgd%2FbZFT%2FwDoOx%2F%2B20Qp0lC02CtxqALwDtB4J8FNJBTVovx%2Bo4jvbLLGlltTuRMssrf%2FANJiz%2BhZDqMO%2FEyCX2dOc6t%2Bkuc1gmt%2B3%2FhaPTeoZ5s6R1IZrBGDlkNvI%2BjXcYYyx%2F7tWV9B%2FwDw%2FwDwlyD1LqWH0jq2N1O55rxOogY1rwC4C9uuP6mzdt9Wl1v6T%2Bb%2FAFdFS%2F1Myq%2F2VThusa%2B2tst2k6sPuY73Brm%2Fo3Vv2fy%2F3F0S4TAzq%2Bm%2FWDquKGnbhWOya62DUUlrcmyulktZ6f2ey19Wz8%2F2Ls2Z%2BFYx1jL6yxgBe%2FcIAI3CXfNIqZX3ursqqrZ6j7TqJgNY2PUsPP0dypfWJ%2Fo9NOT2xrarHTxs3tZkf%2By77VR6v9bejdNsbkb3Zbqm2sfVjgOOhrdZFljqsffXs%2FmvV9V%2F%2BDXHdZ%2BuvU8zA6i%2Bj02Y1zawaZLt2LY21tltb7XOb6j6%2FwDR1V%2FzV36v6rPVYFU%2BiCs5PS7cd43O2WUOB77d1X%2FT27lwvVnNyKK8d15q6hij207o9dg3DHdW9m9zLv8AQ%2F4Wu71K%2FTtr9aqzJ%2BuHV8tmR0zNoyLvsXU8Nr7cdtjmtN1J9K%2B2podsbk1%2Fo%2F8A0YsnG6te%2BnLZbdXXY6pttADNwucwmhv2cWbv0tnr%2FpKnfpKbKf8AtsqD1DvrjnfV70cKlldgzgbqjf7QHB3p2sG0sb6lv0%2FfZ6TEcZg630xz2vezK6jVbfhVtf6biQ%2BxltmNY7a2z9Js3Vu%2FwayvrHh1%2BhhdKv3XubjBhY9wDbHtPpOdXkOH6t1Dd%2FRsl%2F6C%2FwDomV7Fg9Wc%2FF%2Bq3RL6biben5WVjh4lljdxbexltf06La9vvp%2FM%2FwAFZ%2FhEuqn0r6lfXM9WYzpvVoo6wxvcbBcGj9Ltr09LLoj9bxf%2BvU%2Fof5mz9avrJd0%2B2jBwHAZTrcd17iA7bVZa2nY0H%2FCXw9v%2FAAdf%2FWl5zidQZ9ZcY3l3oddwg2z1mHZ6zWfQv3t2%2Bnk0%2FwCn%2FwDRf8xf6Df1DqvXGZ%2Be5tzsi7Gd6lm2kPsqNbqqOG1%2F4Cuxnpt%2FS7%2F9I9ALjR1Gh7f96%2BuJJpA1KZj2WNDmODmnhwMhJaySSSSU%2FwD%2F0vVVn9airFGYSGjEcLXuOkV%2Fzd5J%2FdZU%2FwBX%2Fra0EHM9D7Jf9pE4%2Fpv9YHX2bT6mn9RIKcE9U6lgXnJDv2l0jN%2FS497S39C530sOyxn%2BBc%2F%2Bh5P83%2F2kyfS%2FR5NlPrv16uwczExsPHFozLBRWHz6rriWM9Ouv6Hs9T3vseue6B9buoZF5xBU84BDC%2BtoZYW1PczG%2B02Gxm71Gb2XP2fod7P5mtct167q%2FT87Gdfk%2FbscWHI6V1NrQNGu3O2NZ6fp5FN9dTcrH3epR6f9RKwRYXzhKEuGYo%2FxfSMvM6lZlF%2FVfSobU11Q9MGyqLfa%2BrP9PJsr9Kz09n6bGq%2F7dWN1z9VxC3KfZT0%2B%2BPUyGg5NIaPdU7ezZe7KxPR%2FR5Gyr1sX9Db6%2FwDguZx%2Bv352be4WNwft%2B9tb2n21mza%2F07Xn2%2Fp7qmVep6dbP0vqfolqZD7mY91eDmXh9pBAZDGjT9awvb%2Bkp3W%2Fp2Mdkfpav1b%2BXUb0WulTeP23h5Di3JL3UYWTYzlzbKn1sc5rN7baM3FZ9pw8xrvSvr%2FQf0im6uvH6vY7G6hfS2mx1WFYaq7bnk%2Bo2r0rKPTa7bustxX20%2Bz%2Blf4RW%2FqPXeM403s%2FQ9LpdbQ4v97Wl4DcW1nud6PqfrH2e9nszMavNx%2Fs9%2F2hA6i5r77HZLH24Tn1W4%2BUwj2Pva3Jdj5bfzaHb8n7Fk%2F4P9YxP0tX8wulqaWfb1CzZ6GaM30622WDD%2FSV1mp3sfY6tjWOsY1tf8776a%2FTQ7s27qFNVIrqwAfUsbZRXt9S0N9Ky1tX83%2Bgre%2F1sej%2FAE1lzKltdDtbi9ZJsqqbTaBXdS0TbW68PycUxNj8qrIbR%2FpPU%2FSb6%2FTyv6VWf0qvOrzmsYasnGzHmk7gx1Za6K2XR7sd%2B5v6K79JXi3bPU%2FV8i71RRU5%2FWaLMv6kYj7SGX9L6g%2BqK%2Fosrymeux1cf4B17fYsrpuPmNxftz63Pcwl9DWDQ2sIqZkNJ%2FNZe6luR6f%2FAAX%2FAAS1f2pXX0vq%2BJln7LfkVVta3ZAfl4929myn%2FA76rLq86r%2Bbo%2F4qyhVruoZfSek4ldmM12Pe227D9XQBtvptu3%2B7d6Vr66Xf2PU%2FwiSnsuqnDyLMfFtMZORj%2BrXSPeHFseo2l7g31La%2FV%2Bh%2F2oq%2FwfqfpFznVcd9uDZivaxzDZXa1zztZaXB1LW%2Bv%2Fgb%2FZVXi5tv83%2FRsj9AsLqfXv2j0%2FpXqPFedgNurfa10F3uqsx8lv8Ao3Obvrf%2FAMT6n%2BFQquq59%2FURec1zb7CHXMc8htmw7n47v8BtucPUb6v6P9Ld69iNoS9H6Vk0Zzcpj3tqqeW1AAtuc%2F8Am7Meyhv6WvZ%2FNZX%2FAIEugzuk14eLiN69fbi49u6wgBjyWNb6dP6IOa52V6vt247P0dD%2FAFP0ajjdc6kBeekYQd1DIs2tsZVZbdVXt9tYqsG9%2B3%2FTPZ%2Bl%2FwBCsajpXV%2BtX2Zwo%2Fal7Wuvv9S0Mea2%2FT2%2BvZ7m1e1j6GV76PZ%2FpK0NE7avpH1Z69ndU6Ti4mP6mVZktBdbkP3uqbWTRkjKuYGb9t1e6v2776rP9Iuyw8VuJjtoaS8tkueeXOcdz3%2F2nLyb6vdZv6DjDKwmVt3lzbsZz3VsZcHluTgX499hfRYxuzJwn%2FznsyKrLLv8H2vT%2Fr9hODK%2BsM%2FZuSWkvrtFjC1wLmvr%2FWKqW%2Fm%2BzbZ%2BkRR4vVpKn03q%2FTeq47Mnp%2BQy%2Bt7WvG0%2B4Bw3N9Ss%2FpK%2F%2BuNVxBT%2FAP%2FT9VTOa17SxwDmuBDmnUEHsU6SSnxf6x9CzPqt1ECix7GMeben5Q0caneyylzvouto3MruZ%2Fhav0np%2FpFUryaMjFvrzps6dkPbZmUsHvx7zFber4f7rbLP6Wz%2FAEln%2BivYvY%2Bu9L6f1Xpl2H1GG0OG71SQ01uH0b2Pd9B7P%2FUb%2FwBGvH8vpF3T7%2FQpcH5NIea7az6leXSd2%2BzHjdW70qHbMnE%2FwlSZrE2NuzfjKHMY%2BGfpzR2n%2FL9H95wM%2FByOk5hxsgiyuwb6rm613VH6N1X%2FAKMrW10jqbrmHDyHl8MhjY3G6sHd6PO318dv6eiz07fW9P0v%2BOHiPxc6n9j552Ydh3YmVy7FtP5%2Bvvfiu%2Fw%2F%2FB%2Fpf5zehYv1a6pVk5WLnh%2BJZhML6rmiWvsBY6t1Fn0n1NY77Tvp%2FSf8WnijqNWnOEscjGQ4ZB7Oig0fV7Lf01rr8rqR2tez3XPbBx67XsYzayxjbMl9m38%2F9J%2Bl%2FS%2BpzrvUxMWqvqNVuJksx3402zW5oosbdScig725OHd9qY6v%2Bc2ZOLT6Nn88y3e6X1uyk9NexznYd%2BPdi2Mc1lTxl4ztznWu3bKfWZZXbs9T06f0ypdY6J1Hr%2FVH9Wrtpsx6mMqFDS%2F1WisF30XNa5%2B577bf0eyz%2FRV%2BqnHwW1RotDF6xay49Tviks9OHNBAc9g2sfc1m7Zu2%2FoG%2FQxv3PST9Lw2dTblM%2B1W1sdDixoM2vu3f0936Ot3pOZsurp%2FQ5H%2Bj%2FwaJj4GXf052ZjepRjbmOrywNzNjHulh9Meg5zN%2B1lrn%2F4R9fp%2FpFYxcHD6ey6nItdSGAOtdlFwhlh%2FRuHpN3Ppbv8A5xnqemgFOZ1%2FDyMW77T1DIOQy4vra91bqC00en%2BiYx%2F06Nrqnev%2FAIf%2FAEj1WxaG2sxKOo9Mu6iK32UYeOLHML3vLrNrrmu3%2Blv%2FAPRi1cvpl1PUqW3Nfh5VJ34%2BNmO9XEurHu%2FV7t1jGMsYf0noP9n%2FAANqv9Q6W84w630hn2cuFd1jcYGysjS6qzLxmiu3Fyadv896NX%2Bl%2B2eqhSSBQ1u%2Fwed6z9X%2BrtFJH1dZj1agENsqZuIB9EPsvbkW7Wj6eS%2F6fq%2Bj%2BjWOcbNw8hnqdNxq3tizZYXOa4Ty7fkWbmNd%2FObfof4RdpT1fqHUs1rc%2FLfktyRU2vGa4bSHNePtFL3el6VmLlVejZ7f0m%2F1cj%2BZ%2B0WbvSfqn0%2Fq1eTjdRIdlVspsqcxwBqc8PbfW%2BrX376%2FTtf%2FAKH0bcS6v2WJXqulj4YCXEDZqurxn1dxXdRosuw78hnXcR5dSWu22OrY2bqsdn03ZFTt932Oz2ZWL6lVLPWoXS19Hzup9Pq%2BsfTMYty8kn7ZRXDCy5hdVb1DEre%2F9NU79LvxHbLclj7Kf5rIspXE5mPm9J6q%2FLqa82YrmvfVJHqUsd%2BgyqLatln0a%2F03pP8AWxLmerV%2B5j%2Bz%2FU7qvR%2Bp9Cot6QNlLJbZQ5xdZXb9O1l73S99jnu3%2Bq7%2Be%2FnEmN57qv1X6b9c%2Fq99oxWNx%2BuYxcyx7g9rjc2PXxM5t36x6djmt9H1v02L%2Bi9L%2FCVWcz9VPr51npPWX9H%2Bsxuy8bItFNoyDvtot9tIcN%2F06He316P%2FAEKo%2FwAJ9p9hbXW17ntaA98b3AQXQIbuP5y43%2FGB9Q2dfp%2FaXTWtZ1iloEGGjIY3%2FAPe7%2BayG%2F8AafJ%2F6zb%2Bi%2FSUJT2TK66xtraGAAABoAEAbW8fyVJecfUbqP8AjHPV31dXxMjJ6c%2Fay27LaMd1JaNgsoDxX9o9rf0zaW2%2Br%2FPep%2FpPR0lP%2F9T1VJJJJSDNL%2Fsr9geXGABW1rnakD6F36P%2BsuAwumV%2FWXNrxHvcymqh2S7IqLnRa%2B7Jfj2UPcGtqdvyfVspZ7K%2FQ%2By1%2FoaV6Ffj05FZqvYLKyQS13Eg7m%2F9JKimvHprorEV1NDGDwDRtakkEg2NCNnxDqdGb0Lru3qFDHX41rLTWGxVeyR7626tdVmNa%2F1P3LPWr9i2cmzrpY5tdB6gzpL7Kq7WGXPqqf6D8HIc1gZ9upo%2F7T%2FzmVX%2FADXqr0brOF0%2B4135bWVFgc05kD1WMP06ari17q25P81Z%2B%2FX%2Bi%2BnauTysfqnQeoM6h06l91eW2H4jwf1uhgc70Lq3DdV1XGxm78d7%2FwCfo%2FQXfpK7GIRFX4s2fN7vAeGpRjwk93IyOj5VDnN6U5%2FUMa%2FflYlLGuLm%2BqxnpfadrG1tdk302Ufav%2Bs2en%2FNrQ%2Brd9%2BNlNdfS%2FDuDXMy8e7R1bmjfJ%2FkNhl9Nv59KtOeLbMDO6FktJte%2B%2FCstLh%2Bhcaxm4mY5oc5tLMr08XK3st9H7TRd%2FSqPWW11fA%2Fa%2BOOpdOc6jqeMNllYjcdvudjWt9zfVr3b8d%2F%2Fom%2F1E%2B2F5jpf1u6Dj9RyLKcqu3peaf1rF1aGh%2Bhym0XMr91TfZksr%2Fncb%2FSWY9bFTwftfUOpdQwRZvxsDLOLh2uBexrLH21YzLLAHv9K3ZX%2FwAH%2FOLUw%2BnfU%2F6xVDB6lg4%2FTutEFrLaG%2BgLXD%2FC42zY2x%2F%2Blw7f01f8ur9On%2BroyPqllZfThhMsqBZblWhxFjahFLLWE%2B27HZv3sbsr9H9N63%2FBjW1L9J9PDa%2F6udcx%2FU6Ta7bSH6uxLT7W0Oc0%2Fo6HT6mFl1fzX%2BnV9n1R6v07bbhZv2za4w149K0Vk6enkMeWPu2fzn8xVb%2Fwf0F1GVh4mdSW3MD2vbAfA3AH9xyoYmRZ0o%2FY894%2BztBNGS7QbR%2Ba8n6Oz%2FwH%2FttLyRbyPUcXMqzznY2Nfh9TrbZbkkVyxzQBvzm%2Bm04vr7f0d%2Fo2frX%2BD%2FTV2rc%2BrmH0bqHT8fcW%2Fb2Ned1FrmWsaXOZLfRLH01W%2Bpu9L%2BaXUiCJHBWGegM6d1IdU6WzbJi%2FFbAaWuPvdV%2FV%2FnPTStN6U4%2FWfqPk5jhRj2BorDrMXLOjqnge2m1rNrnV3e1lnpf8b%2FO1Urm%2FqLlZH1a%2BseT03IwLa7s97K8nFrY%2Bx9fp%2Bp6OfjupZ6VvT3%2BrY3I%2F0P6Oyn9F%2BjXrKSCFJJJJKUkkkkp%2F%2F9X1VJJJJSkkkklKQM3Dpzcd2PbuAdBa9hLXscNWWVPb9CxjkdJJTxHVfq4Ol5bc%2Bq55dlvLLq2Dax1lprY7IFbP5i63b77Kf9H%2Bk%2FQrpPq%2FcLMAVlgrupcWXM4duBj9I0y7f%2F1f00vrB0hnVunPo%2BjkMmzFtGjq7QC1tlb9Njvd%2FqxS6dWMj0upH9FfbXsyqwIabGwx30%2Ff%2BifW9n9RHopwvrBh4eF1V%2BXkU%2FqmZQQLSB6deYxwux7HAfpGvs9L%2FB%2F8J6ivWVZ2dj4vV8FgfbkY%2Fo5WO8hosrdr3%2Bi6t7nrefWx8b2h20hzZEwR9Fw%2FlIOLg4%2BI652OCxt7vUfWD7Q4%2FScxv5m%2F89K1IujYj8PpWLjWDa%2BusB7SZIcfc5u6XfnFW31seIe0OEzBE6%2FNSSQUpJJJJSkkkklKSSSSUpJJJJT%2FAP%2FW9VSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2Bqkl8qpJKfqpJfKqSSn6qSXyqkkp%2F%2FZADhCSU0EIQAAAAAAVQAAAAEBAAAADwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAAABMAQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAIABDAFMAMgAAAAEAOEJJTQQGAAAAAAAHAAIAAAABAQD%2F4TkjaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu%2B7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI%2FPgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSIzLjEuMS0xMTIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyI%2BCiAgICAgICAgIDx4YXBNTTpEb2N1bWVudElEPnV1aWQ6RTcxOTVFNTY1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkRvY3VtZW50SUQ%2BCiAgICAgICAgIDx4YXBNTTpJbnN0YW5jZUlEPnV1aWQ6RTcxOTVFNTc1NzMzMTFERDlFNzJGQ0E2QjkwQUZBRjU8L3hhcE1NOkluc3RhbmNlSUQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4YXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU%2BMjAwOC0wNy0xOVQxNDo1Nzo0MS0wNTowMDwveGFwOkNyZWF0ZURhdGU%2BCiAgICAgICAgIDx4YXA6TW9kaWZ5RGF0ZT4yMDA4LTA3LTE5VDE0OjU4OjA1LTA1OjAwPC94YXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhhcDpNZXRhZGF0YURhdGU%2BMjAwOC0wNy0xOVQxNDo1ODowNS0wNTowMDwveGFwOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhhcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ1MyIE1hY2ludG9zaDwveGFwOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOkhpc3RvcnkvPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xMDAwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpOYXRpdmVEaWdlc3Q%2BMjU2LDI1NywyNTgsMjU5LDI2MiwyNzQsMjc3LDI4NCw1MzAsNTMxLDI4MiwyODMsMjk2LDMwMSwzMTgsMzE5LDUyOSw1MzIsMzA2LDI3MCwyNzEsMjcyLDMwNSwzMTUsMzM0MzI7QzA1QTE5MDRGRjAwQUJEQzA1MUJERkFGMDIwNEVBNTE8L3RpZmY6TmF0aXZlRGlnZXN0PgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24%2BNDUwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjMyNTwvZXhpZjpQaXhlbFlEaW1lbnNpb24%2BCiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U%2BLTE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDtENDYzN0NCOUQ0MUExMEJBN0VGNUVCQ0RCNjMxODMyOTwvZXhpZjpOYXRpdmVEaWdlc3Q%2BCiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY%2BCjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8%2B%2F%2B4ADkFkb2JlAGSAAAAAAf%2FbAIQACAYGBgYGCAYGCAwIBwgMDgoICAoOEA0NDg0NEBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEJCAgJCgkLCQkLDgsNCw4RDg4ODhERDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM%2F8AAEQgBRQHCAwEiAAIRAQMRAf%2FdAAQAHf%2FEAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4%2FPE1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BCk5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0%2BPzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1%2Bf3OEhYaHiImKi4yNjo%2BDlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq%2Bv%2FaAAwDAQACEQMRAD8A7%2FmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVdmrlHI2utXn6WltnFESb0RFSp41WjD5q3LCBaslzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2E2rj0LuzvF7PxftUf8AXPLDnC3XI0ewdpOkTK4P08T%2FAMK2Ec1TLNgaxmE9pFIDy%2BEAn3GxwTgV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F%2F0e%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXYUeZpfR0a4kpUAx19h6i74b4X65CbjR76FV5FoJKKe5C1GIVLdDuGhuXs2IKOX4gfsvGdx%2FskKtkiyD6bctHHbXgPImOC4qOpXj6E1ff4Mm4Ndxkpc770BvNmzZFLs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Lv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVokKCT0G%2F3ZgaioNQemANZuhaWLyE0LlY1%2BbGn6sWspA8QA%2FZ%2FUcVRWbNmxV2bNmxV2bNmxV2NZQwKnodj9OOzYqwDT4iiPZsa%2FVLm5sj7I%2F76L%2BOTXTpjPZQSt9pkAb5r8JyKXqfUvMOpIQOFxFDfoP8qFvTl%2F4Q5INDkrFPAf8AdUhI%2FwBV%2FiH8cnLeAPcxHMprmzZsgydmzZsVdmzZsVdmzZsVdmzYyWRIo2kkYKiirMdgAMVX5sjTeaGl1CzsbSAOLuX0w7k14KCzyAD%2BUZJBirebNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV%2F9Pv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVo4CXUFa9e0CbJRWkr%2B0RWlMHZEJ5WtPMtzE5%2BGYJKnyK0%2F4kuEC1ZeM2IW0okjFT8S7H%2BuL4FYz52mMWn2tDTlcpX6FbDHR5ecCH%2BZevywl%2FMM8dJtn7LdJ%2BKvgry9ccrOJ69KVw9E9GS5s2bAh2bNmxV2bNmxV2bNmxVi3miFU1LSbxvsStJYzH%2FJnSi%2F8ADYpoEzLcxq1T68FGr%2FvyE8GrgjzdC0mhXEsY%2Fe2pS5i%2F1omDf8RwttJRHdrcDaNbhZVI6endIG%2F4mcnHeJCDzDL82bNkEuzZs2KuzZs2KuzZs2KurkZ843Zhs4bVTQzvVqfyrvg3zHNPb2UMsLtGBPGJSpIqjEqRUb9ch%2BvSSvp0JlcvJCLyMuxJb4JNvi%2F1SuEBVvkaX9L%2BZbm8Sv1fTbf0Y6%2F78lPxH%2FgFzpeRvyPbWcXlyyubWBIXuoxJOUG7uKjk5%2FaOSSoxPNXZs2bArs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FU7%2FmzZsVQ2osyWM7o3FlQkMOxGPtZhPBHKCDyUE08e%2BM1Bedjcr4xPT%2FgThV5cvBJbpGergEfMDcYa2PkqfZs2bArs2bNirs2bNirs2bNirshfnRGtb7T9TX7LcoJD2qDzSv3vk0wl81WDajodzDGKzRj1oR35R%2FFT6RthHNXaVcrKsUtftDi304dZz7yrqPrQCIncdMnsEnqRK%2Fcjf54yVjP5gwtJ5ckcD%2B5mik%2BivH%2FAI3wD5RnEtpwrWgw983RGby1qiqKlYGkA%2F4x%2FvP%2BNchnke5BIUGoPQ%2FPEJHJ6XG3JFbxAOPxOA1iX7sUwIdmzZsVdmzZsVdmzZsVUbqBbq2mtm%2BzMjRn5MKZDLP4rC2UVq9qYj7SWshWn%2BtxOTnIVG4ttWvdNaiiK7FxGDtWG6Ti%2FwDwMuShzRLky%2B1lE9vFMP8AdiK33gYscKtBmDWhtq%2FHbOyMp68SeSH5UOGpyJ5pYde3moWPmW5KzH0pIo2WNt0A3Wv0ts2D73zJ6FgzxqqXpKpHG9eDMx7EYXed45VeC4gPCdYyqua0I5q5VgOv2cAW8sWo2QMqhwwoyHcVyQFhVOLzvrNrdf6fFHLFX4kVeBH%2Br1%2F4bJlp%2Bt2GqWrXFnICyKWeJtnUgV3XOP67qFjaFLHUrprecy%2BlZajxPDmN1jn8Dv8Aa%2By%2BIaXrclrdtZ34NrfR1USofgeo2K06c%2F8AgcBCXr%2FlvXRrdnzk4rcoSJFXYfMbnDzOV%2BTr82eqAOQIpaBq7AV2r%2BOdTriRSEp8z8RoN9I5AWJPV5HYD0yHr%2BGQg3Ntq1lcLazx3CiZviiYOKzQo9Kjb7YzoWqRevpt5AOskEij5lCOmc60%2BWCK0j9ONYo5IYp%2BEahQWBeNjRafEcMVTvTb%2B80fyHZ3FugE9vSORJBUqPVZW%2BEHw3yVaXeC%2FsobulGkX41HQMNmH%2FBZzC%2B1iTTbadZUkjtJjzkQqSKqNm5fsdMPfyr1%2FRdT8vra2E5N5C8kl3bSMTKpkctz%2BL7SP9peOA7fFkIkgkCwOfkz7NlA1y8DF2bNmxV2bEJLy1injtpJVWeavpREjk3Hc8V64virs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F9Xv%2BbNmxVplDqUbcMKH5HIPokjWsstqx%2BK2lZPf4Wpk5yF6nF9R8xswHGO8QSj%2FAFh8D%2Fqrkoc6VmSMHUOOjAEfTjsAaZMXhMRPxRnYf5J6YPyJV2bNmxV2bNmxVQuzOtu729PVUclBFa07U98DafqsF6i9EkI6ePywwyF6vG2i6oJRUWl6xZCP2JOrr%2FsvtLhG6s0yiK4X6Zfi4QI7Vb9lv5h%2FXDHrgV5c8B0LzLc2Q%2BGF29WDw4SfF%2Fwp%2BHOg6ZMHi4j2YfTkZ%2FMGwpFaazGDytm9GYj%2FAH25%2BEn%2FAFX%2FAOJ4N8uXwliicnps305LmFZDewrc2dxbt0lieNvkylc45%2BX10UCQzHjLATE4P%2BQeNc6L55e5i0J57WVonikRmZDSq7jf2yB2Op%2FVYor2%2FwBNjktpAGjv7ZvU%2BInoy8Vao%2Fa44xCQ9as25RVBqKnfBGRby9rBEsljcIY0aQ%2Bg5FCCQD6bj9lslGAikN5s2bArs2bGyOI0aRuiAsfoFcVS%2B%2F1q2sJltyrSytuyp%2ByDsC3zwxBqAfHfI%2Fodmt2z6pcjnJK5dAexPT%2FgRkhxV2c782mSy82WUgNIdUhNs4PTmlXQ%2FwDBDOiZAvzLb6nHpOrlFkjs7lWdG9yvxVG%2FwiuGJ3Up3YTJFr7op%2BC8t1ljHjxodv8AYtkiyHbxx6XfKx%2FcXBilJ3%2BAsVUV8FRlyYA4Z80DkkPmq3EtlHJSpR%2BJPgHBH66ZBtIufqt9Np8pALHnEpO5p1oM6Xq0P1jTriPoePIfNdxnLtZtrGZluBcG3vF%2BFJYuJfx40IIxHJKzzb5et9ZtZYp1LwygcgPtKy%2FZkT%2FKWuRKKCOC6tNH1CblcWiILDUWHH6wg6wyDejx9Fw4sfOMjEBY5biH1HgLy8VYulOfJV%2By38q4ndH9LlL219K4iilHrWzLxlhI6SgE1%2F2SnFKo0Czxy28zMqcSzspIYBPj2I%2F1cd%2FytnVZdNQ2D1I%2BESMoPw%2FzMftdMG20TSQyyblmjenzoc4TY6ld6ddyKwMUsbFZoHqNwd1KnGXRXs9n5%2Fv7lg98GlWhMjwk1A%2Fm4k%2FF7jDSwSPULTTJI3PGBphGNwG4OHVW%2BgnONX%2BsWFpDFPaSSJcTESG3TcRlf2uRK%2Fazq%2BkR3aeT7e%2BjnX6yoW8ibht%2B9i9Tg%2B%2FQ98QVZHqstutowuSPSdSpV91IPVWzif1i98t%2BZ7m40FjbSWUrNCqEmkex4EH7acT9lv2c6lonmbTvMUTWdwgiumWktrLQhge6H9of6uRLzd5ZurDVP8Q2KetYFUW7jXeSKi%2Bm0hH7UZH7X7OCY4g2YM0sMrjvexB5SHcXsnkPz3Y%2BcdPqKQ6lAB9bta%2F8lI69Y2%2F4XJeDXPJlvPe6JqMeq6NMYLuE842To6ntToyuv2k%2Faz0J5E8%2B2HnGyI2t9VgA%2Bt2ZP0epH%2FNEf%2BEyESeUuff3tmbFAx8bB9H8Uf4sZ8%2F6P82TMMLNb1iDRrQ3EpBkkPC3j7s5%2FwCNV%2B0%2BGVc4n5m8yfpnzJcsr%2F6HYsLe232PBv3j0%2Fy3%2BH%2FY5JxkLourX175%2Ftb28maSZrloqsdlQ1Tgo%2FZUDO755%2B8uxlvPcMI6i6LAe2zZ6BwlS7NmzYFdmzZsVdmzZsVdmzZsVdmzZsVdmzZsVf%2FW7%2FmzZsVdkb83W5%2BrW1%2Bg%2BK1kAc%2F5D%2FCf%2BG45JMC6jare2FxaEf3qMo%2BdPh%2F4bCNiqV6VOOcTV%2BGReB37%2FaX9WHoyFaJMz23BqiWE7juCh%2FsyaRsHRXHRgCPpwy52gLs2bNkUuzZs2Kuwu1rS49W06Wzb4XI5Qv8Ayuu6nDHMemKvONE1KWGVrG7rHPCxRgeqsppk7sb0XC8W2lUbjxHiMhnnnTHtLmPXrZfgakd1TsR9iQ%2FP7LYtomq%2FWI0Iakybof4H55LmFZdqNlFqNjcWMwqk6FD8z9k%2FQc515XuZbW4l0%2B5%2BGWFzE6n%2BZTTOlW063EQkXY9GXwPhnO%2FNsS6T5qtbofBHqaniexmi%2B2v%2BsU4v%2FlfFgHcrPTFbanZNb3caywyApLE3Qj3zjutwW%2FljzBc6Pp6fV9JHpsLNSSgR1HIorV3Vvizq2jXQk%2BAndlBA9xnNvzRiWPzJBJWnr2gJP%2FGNyv8AHAdikJ3YGf0o5pZDIboSD1GJJ9aAgh6%2F5aUzoFnN9YtYZ6gmRFY06VI3zlXk%2FVI5bi2hnlBgdBuxFFahhfr0rSNsnHlXU4JI5NJaSt1avIQm%2B8RaquD0I%2BLjkpbgIZJmzZsirsDagC1jcqvUxOB%2FwJwTjXUMrK32WBB%2BWKpfofE6Xb8f5d%2FnhjkMPmvR%2FKlrJBqkxBSVkjC0PIDpTfI15s%2FMNbu3jbR5plsZVp69swRi9N0eSjMnH%2BRcVpm669cWWtXGnatwjgKma2uPsj0x%2FNXw%2FayOfmLr%2BhX3l%2BPTYrkXM%2BpGtm1uPUUceX7yRx8KLtx%2F1s5xoN%2FefpVr6C8muVVfUuLO8kMrEIeTem7faRk5Iy5FdTuZ9B169trGZvqkc5eFD8SmJzzUcTtsrceWHzTT3fRJv0p5UZvtOYYrgCu%2FJV4P%2FwANHnPrj83vM2lX9zpWoBJYInaJ540pOi1%2BGRQDxf4cln5Z3qT2stjWrK0iexEgE60%2F2XLOUfmHYNZeZbhWP94Ayn%2FV%2BD%2FjVclLlbEdQn955q1wTiU3huLadeQCsfSljO9VNev%2FAA0bYHub1Z7V5yWkhHxpcVHJNwGiuP8AKStVk%2FbyGafqLQxyafO5S2lPJWUAmGQ%2F7uiB8f8Ad0X%2B7F%2Fy8Ctd6jpl3Lb3v%2BkQTpxniqTDcQn7LoR%2FwUb%2FALDZCyyekWl9ZyaFLPelZGN2tqDEtZJHenEs67ckpVXwq1bU7G1iKWvqtcCR4bkkhFYx%2FCHXhvvX48C%2BU7H1SbK3k9Wya5hv4HchSBF8FxBL2WeOJ1k%2F4s9P4cu%2F0j%2Fc1FphmFxPLeOhZBxAiL8jt40%2Fa5YegV6PprvLpcE8sfpTNbh3QVoGK12zluoQ2PnZih42fmWIVt5z8Md4q9I5P5J17Z2A8YrWVl%2BERoaDwoNvupnLtb02LzREdR0hBba7bVe4tEPFZwpr6sH%2FABb%2FAJOSkgPNLqGaG7e3v42iuoTwlicUIK9iM755KnGoeT7ZX6m1CH%2FYSNCf%2BFOctnuIfNkSWeqEWuu249OC8ccfW47elcd%2Bf%2BVnQ%2FyyS5t9Dk067jMVzaSXMLK3hRJlp4r9rjkQl5PbalcaRd%2BlI7PbwysI5lNJIirU%2BH%2FmnOueV%2FOUeo%2BnY6hIpuWX9xPtwnU%2Fhz%2FnTOPeY4zY%2BYNTgpVBcSVQ9CrHkP14Gsb9rFgRWSzY1K1%2BKNh%2B0p%2FZcY2Qdlev%2BZ%2FLKxK19pcdYBUzWqdYx1Lwj%2BT%2BaP8AZ%2FZyHW9xe6ZfQ6ppk7QXsBDRTIevsR%2B0p%2FlyY%2BUPNR1KJLK5lD3KrW3m6esg67f79T9pMD%2BZtCjTnqVilIW%2BKeFRshPWVAP2P9%2BJ%2BzkZRB3DPFlljlxRPz5Edx8mcw%2Fm3aXvkzULyUC3122jET2oNA8kh9NZYT%2FJvzb%2BTOZabIhnWkgaOQcwxO577%2F5fjhKIYndoZvgaUD05v5SN1J%2FyG6YI0RZ4tS%2BoyKQS1HTwYHsffALrdOQwM%2BLGOEHfhu6PWvJ6f5FsfrXnqW8K%2FDBEZD4cmAVf1Z2fOSeSLmfT9RrHEWlvDSZaVagNR0%2BztnW8mWsuzZs2BDs2bNirs2bNirs2bNirs2bNirs2bNir%2F9fv%2BbNmxV2Y5so4qw6WL9HeYLiLpFcUnjHQfH9r%2FhuWSbTnBgMXeJiv0H4l%2FA4T%2Ba4fTW01FRvDJ6chA%2FYfpX5MMGaXcBmHxbSrsCdi6%2F2f8RyZ3j7kdU4zZzrTfO2qQa3eaHrkax6haux%2Br9FkgJ%2FdT2790ZP%2BGydWWoWt%2BnK3erAfHGdmX5rkSEovNm2yiQASTQDqcCt5sL5dZ06Ko9YSMNqRAv8Aiu2Iv5i0qJecsrKo%2FwAkk%2FctTho9yo69htbi2e2vApgmHB1cgA1%2BffOYX%2BnXflXUghJezkNbabxH8jH%2BdcPPN82l65b2j213DN9WdmmtefCRkdeJaNSVb1I%2FtYXWM8cVk2javM95pUv9zcPvLB%2FI3LvwwhIT2x12KCBrxjyjRS06jrxG5YD%2BZcrzzpkXmjyhLPpzCSaFVv8ATZozuXjHP4GH%2B%2FE5JkUmju9BujaTsJYHHKC4G6Sxn9r%2FAJqwJH5g1fyjDaw2KrcaE0zSNE27RiQmtuXPSJ6%2FuW%2FYkxI6hUg8ia9qulatHe3s0k8DgxGKZywBk%2By3%2BTkn%2FN63a8ttG1a3rHL%2B9hIB%2BIdGK%2F8ABA5DNbS0tL%2B4ksJOenzETWrjYiOT4gjD9l4WqjL%2FAJOTTU9XtNc8r6dDP8E8rc4iSP71RwkTfcP%2FALsX%2Bflgq09zFvKeoTMwV2NeCsB0BaNqf8a5N9Zu59K83W2pWb%2Bn9cjBo24ZXUNxI%2F1lyCWsL6fNb3LLxid24tSgINA9Puyb67pd%2Fr2kaPc6bxN5b8owWYKAYW%2BGpP8Ak4RyQU8ufOF7JLD9XRLaAj96ZPiYv4A9An%2FDYOfz9oEbtA0kjXSqG%2Brqh5NtU%2BkW4iQL%2Fk5yK%2FiuNagjEcpTU7Rj6YqaSAbtG3%2FFin4om%2Fa%2BxhXcGeWxlDgpPbfvUFaPDKpFXiI%2FYk%2Fk%2FmwFXr0n5hfXBJFpVtxmC84jOa81%2FaKqv7Sfy5GL7zJq2rwXFhqF40AlWiSQfAEPVW%2BH7Sfz%2FwCRkTl1dLW3t7xi8108C3g9EBArCnI8jtVvtNRcR1zzTdJcQvYwRW7y28dwzFfUblIvI05fAo%2F2OGxSt3zSW9LPXITMlCjiuzofsyRt2YfsPkd0iabTtQksp1Zra4U84X6SJ%2Bw4%2FwAoD7Ei5dzqV7LFCt7KZnVAY%2BRqyg9aj%2BX%2BTJdouuaHrltb2PmCNfrkKmO2vKcT%2FkgsP2v5cjtapfo0Jt%2FMllFGHltZvVeK4ptwWNi6yU%2BzIvRlwm1mUarpNtJHEWutOkuIbh0FSbfkGiZ2%2Fb4MxH%2Bpk6uZNM8saddywStNK605tsKnYcF%2FmbOZy3s2nWaLE%2FG4e4%2BsK43HELxowOzK%2FL4lx5fFWb%2FlprP1TWLQMaLMFRh%2FlRtxr%2FwLYn%2BfNjLp%2Bp2WpwghWLxuf2SGoRX%2FAIDI9peo2kMtjfWQMUi3JM9u24j5rT4D%2B1G5qyfyfYzp%2FwCcdimr%2BUra%2FG%2FwpISOoIpXJDcIPN4HDcR3Scl2I6qeoOGNvcQyw%2Fo%2B%2FJWGpNvP1aBz%2B0PGFv8Adkf%2BzXIxSaym2NCOh7MMNYLhLlOS7H9pfA5FU30vUNQ8uaqjIqsaqHiO8UsZ6EeKsrfA%2BS3yUr6p5iudTl2S1RvRTchTKeCgV%2FlTlkOsvUveOn8VkdatauxoyN%2FID%2B0r%2FwAmTfyYHsrnTdPasc1%2FNczXMZArwhT04g3%2FAD05Yjml6Fditlcmu%2FpvX%2FgTnK5bS4sp1mDtFID6kLioPXZgc61NGTBNH4o1PpUjIpNbyX0Ulvcw%2FV9Tst7i2IqHWn99EP2kZf7xF%2F18nMX1pANMR1TTYfMkRuYYlt%2FMEY5EfYW7UftL%2FwAXjDf8u%2FMFzM8mnX6MJLWRFkMh4yiqtGUYU%2FZP82IzW%2FH4DVQG%2FduPtRP1FG%2Flb9lsG6ZJDJfPcvGI9WCoJZwPhmRGHF2X%2Ffi4AP2peafmBE8Hmq8LgATCOVaeBUL%2BtcjauUPip6qe%2BdJ82x293Pb2GtyL9ZmWRoL5QAUZZGQK47p9nOd39hdaZctaXScXXdSN1YHoynupwFCL0zUX0y4SVGf6uWDqybPG46On%2BWv%2FAA652nRtY%2FTdqJbfjLdqnK4gjpSVen1iBf5G%2FwB3Rf7qfOCxycaqwqjfaH8ck%2Fk%2B61K11AC1kZYIT6gmB%2Bxy2oP%2BMi%2FC6f7LEGlZCbBr%2B%2Bu%2FqqpBCjP6cbtxHwn4ljrX%2FgckOj2EMcC6lK6yTRKYmkIoYl6gE9xT7L5HhcTJqM1jJCEjjQSQsK7qT3rgi%2FuJ7PTDKQ31S5f03ZPi3SrfGP5RiKG6bej%2BQPzB0CG%2BuNHvB9VeZx9WvZKBX7cCf2P8jOvghgGU1B3BHfPHaQrfuEt3DHkAJakKhP8AO37A%2BedX8i%2BYPOen6dNp2qK5t4JFjs5HClyoNJfTdieUaL8S%2FwDCZEcRNEc%2BrfOOKWMTgeGUaEoHfi%2FpRP8Aunt2Ab3UorWqAc5QK8egHzOPhuoTYrdesJYgnJptgDTqdu%2FtkT1C9XnLPIwofjLduJ6fhkgLcYsi0vVRfSSRSUWRd1UeGGgyN%2BVrCSkmrXKlXnHC3RtuMXXlT%2BaTJKMTV7JdmzZsCuzZs2KuzZs2KuzZs2Kv%2F9Dv%2BbNmxV2bNmxVB6rafXtOuLXvIh4HwYbr%2BORbRL%2BsMTMaSQsOSnrseLZNDnIdfXXtP8zXtnZGC2tJWEsUz8pH4yAE8Y14rs3JfibJRPMKyf8AMXye3mKyh1LTH%2Bra1px9S0ulFSV6mNwPtRnIb5e8wXlw%2FwCj9VR9N1u12PGoD9vUgfpJG%2F7UedN8uapcXsH1e7C%2BrAi%2FvV6OPs1K%2FsttgLzP5Ysr%2B3NzHFxmjPMlNj%2FrLTdWHtiNtlU9I82sxa11lAssf2bmMfA9PFf2G%2F4XIt501y81SykEEjRQRMGEaMV5L0%2BKn2sq4ke3j9O4asuyLNSnMduX%2BV%2FxLCfVZ%2FS0u8cDkVhYhfGgxodGQDDZPMculusTzpwryMT7mneh%2B0uTVNL1e%2Bsob1tLmmtJlEkbFW5FGFR8NfUzi2iQ%2FXNXtLjUAXWe6hE3L%2BQyKHG%2FbjnqzzP5ok0H0baxgWVyodi5IRU6KBx74ASrzOzsfL1tcH69ppMtdxM0h4%2F883OS2GLS7239K1pGpGwj%2BEr%2FALHphVcecBcyrc6vBFdabL%2B7lV0UPbt12KDnx%2FlYYGvrWKwP1nTp3kirsT0BpWgcdf8AZDJg%2FFjSanSb8xC2ursXtpG5kt7dkVRGaU4g%2FETy%2FwBbIzc60xSeylsgphDJeafNtIY%2BnqREfCygYcWPmV14x3qkqQDzAo4X%2BYr%2B0ME6h%2BidZZImjM90FLQzQj40BFNn2%2B1X7DYkd2yi%2BrHNIh8uXbLp7yLJdToZbZJDX1EU0NOXxCeL9tf%2BJ4PhbTLya58sXqqt3EoKlV9MSoRUMn8ssf7XH%2FXyD%2BcfKFzoWnRatFqUUU%2BnSGSGAsBcFXZaFeHJVZDu2HOn3See9Kt1%2BsCx8x2y%2BpaXabB2TxH8pP21%2FZwAnu3VQuV1CC2iW9cx%2FwCkS28kMtA5dKLHL1%2B00TJyZPhk%2B1nS%2FKN59Z0GSNno6yI6e1V4v%2Fwy5z9pv8YWj6Hrcf6P836EWmiiHSfiv2ox%2B2kwH7P2ftLk28uxrbeXYLhYXV7gMzxkE0IqPiqNq%2Fy4gb%2BSk7PNdX1m%2BHmqaytJ%2FTtTdx%2FBGoSu6swZqcj8YbCnRmM97drKxKXcslu7tXb1%2BSBq%2FwCSzZK9c06xuNUutStkBls5IFkAIAMoHqUUfzNRkbCPW5Xs70rZcVtL0%2BtCoAFVc1oK%2FwArni2RIShdD0rU9Z0g2UNW1DR5JLG%2BirRlQuXhmp1ZP72M%2FwCph75g0K2sra21G8ch5baGJUpt6yARuvL6OWEQk1eJrq9s55YLxBzuGhJEjr3LKvxSqv7WISanq2oQRXGryvd2MtVhuSQ8aNQch8OyNjsqElhK1hbcr%2Fcv3K%2FyV%2FycRSQBmUiifsfQM6FpfljSbrR0mCy3EjDlDIzN9sGnphU%2FZ%2FlbIrqnl%2F6jM3Cb1VRqOoU8078XoOHPISIiQCd5ckgE3tyS4StK6xSy%2FDJ%2B7HqseO%2FYVw0W2thatp10he2b7YH21cfZljP86f8AD%2FYxO4tbO4so4I7ZUvG5Lpl3PssprUws392JD%2Fut%2FwCbAOh6sLuU6VqYMF4hKRu2x5DrFID0YY7rsh4tMn06%2FkspjzjniaS1nQfDIE%2BJWXwdafEv7Od0ugnmL8tmYipWEOB1oGWp%2FwCH5Zy4hoT9WuU5BTzj7FHp%2FeIe3%2BX%2FADrnR%2FysvRfaHeaJIwZ4RJGo8QDzQ%2F8AAy5OPVBfPNxbpMpifYqaBu4IwFYWlx9fEIJU7lmH7S%2F83ZJ9e0x7K9unRg8azMkoHWJySVR%2F9YH4W%2Bzj%2FKtvFdaxBDLQKzAVO243G%2F8ArYPJUXb2NvDZtdyWxe3B4meCQ%2BtG37Jkjb9lafaXHRXl9q2r6etnWJ7Yxx28h%2B1UNyMjt%2FlH4myX6lp1poPm57CIFLG8jikCsKisqqXWncc2%2BzhLZW0Om35hCuLiCeSgIHFY67KT9rl4YaV63IwMVSakg1pt27eGRuzvrTWILdYbnlcIWXSdQc8W5pXlp91%2FLIP91M%2F94mG9tcfW3AQ14xgsPH4c4Zp%2Btz6HqN2rJ61nNIy3loTTkA54yIf91zR%2FailyRNUinpV0iXqyyxw%2BjdW5Md%2FaN1iPdqf74f8A5Jtka1ZZ4LWYxsySKpaCRT8QI%2BIxkj2Hw5KLe6%2FTsUF%2Fp1wsmrRRk2l0QAL6Fft290g%2Fu7uP7Lo395hFquqaL9XZmmWCRwySWTgs8MgG6Oo%2FY5fZbAUhC%2BZ9JsfMl1SKYW%2BqyQRT2DMf3UvJeTwt4M5%2BJchKyrOr6D5gQwTQEpFK%2FwDeQv8Ayn%2BZDk%2B1Gyj1ew0SaC4gS5ntmCtX0ELQtQAM%2FEcv5Fwv1bQxr%2Bnhr4oms2ymP6xuCStSIbof6v8AdzYOaGAQ%2BXdTm1NdLjj5SN8QkG6FOvqBu%2BTjTrS2sbZLCMcVUmkpFGLn7Rf%2FAFv%2BFxTTme102DTuILIwZpKksW%2BzxWtW41%2FZyU2XlW41HhcahytOQJZVHKaXw%2Fd%2F7rY%2FzviAqQ21ldXtytrDG0k524qKmnj8sO736roNmNIltfVv7hFeaMnkUqTwpxNA2S2MaT5etS9w6WdtEvx1b42A7Symh%2F2C5zTzb%2BZun3swOjacGVKwrqMgoajeiJSr%2FOTDVdVZPYa3pOj%2BW7u31uKKzuZGP1dePP1Iz1UovxtJ%2FlYU%2Fl%2F5hOtyS%2BWrlis1Gm0pyfiR4%2Fi9Kv7SumcrvNYnu5DcXH7yToamrfSf6YL8ratLZ%2BZtJvoT6bwXMbEjuCwVh8uJauPFuFe%2Bx%2BYJ4NMawQiOFzyZOlDX4h%2FwQyQeVtAn1BY9R1QN9WU1toG%2Fa3qGYeGE3lnRLPVfM19LdAyWkTtcW8a7xOGaq1kGz7k%2FAM6moAACigA2AxJ7lojn72wANgKAbDLzZsirs2bNirs2bNirs2bNirs2bNir%2F9Hv%2BbNmxV2bNmxV2Qzz3p3P6rqKbFKwyt%2Fkn4lJPseWTPOVfnX5gmstNtdBtnMbajykuXHX0YyPh%2F2b%2FwDEcbrfm24MRzZI447GR59w6pMfNyWl7EdD1KM3Cp6dwoKldj%2B1zHE%2FRko0rz1rUtz9SvLe2lm2Hp8jC7BhWqV5xvUb%2FDnn01jPEin8pHgckemXmsTaHcxANw05o57O7IIKxliJYll%2FaRT%2B84%2FsNkIZhIkSjRDl6zs%2FwIjJCXFHkb5gp3%2Ba2r%2BbdPuEvYLVbLRpiFL27c2EvWkj0%2Fd8v2VpkGsfN2p3Kra3V2XicgEsQeQJ3qSNs7d%2BkdO1rSbKw1LhN%2BlbRXVJKFZyq8ZV3%2F3YGHLOEecvKFx5TvTLDym0idv3EvdG%2FwB9yf5a%2Fst%2B3lpHUOvsua4iNwbWCruHK%2FB0qN9j0zoy%2BarW48r2Oq3l1Le2sSizuGkqk6zgUVXMda8F%2FwCDTOO2M01rIs0XCRQ4kHqCqGnZl74NgkTlMqSOIZpPVNrXjGG8Qvfj2wXzSyqz1eO%2FtNSjQM8sVubhFbbkIpPiI%2BUR5Yca3q17IdPmtZ2js7yztriONNhyAKSciPtMJUfIZaXDWL%2Bra0jcq0ZYAV4yAq6mv8ynJf5Yex1PRjpUsfO%2F0pnuLJWNPUgkNZ4l%2Fm9Nh6vH%2BVpMRa2uvBcXej2Gp2rSC5tJJbOZkqW4v%2B%2FgY%2Bx%2FeJhtBB5sOi313boLa9ihMlo3EB5ClGkULy%2B16XJk4rhlZarBFAbZljtrS5Tg%2FoIF4fyOT1JjbC1L%2BbSbowyMwu4WrzJryX9h1PQpxw%2FFWFXNut9PB6srS6frlqI4JZHJ%2Br30bCsbOf5phx3%2FAN1T%2FwCRgPQbtreVrEFrW8gfnDU0dJUPF09unHD%2FAFeygjjvbi2haTQbpxcXlpHvLp9x9n6xClfjtjXi1P2P3b%2FGseE99ol9qtyjIKamYlktb6Mn0L5QKJ8Zp6d3x%2BH4vt8OD%2FvciTXPZaZ%2Bkdp5%2Bgt19Yad5p0%2Fe0vU2Y8T0NPiaM%2FtJ%2FuvOj6lcGysFaRlYxJWUjfkUXk3z5MM5p%2BV2l3U2pPdalFHK1sOLyqQxSZaFOdDWOT7W%2F7eTTzK8UdlcxREhXBTf%2BdzWg%2B7JxNji70HnTz%2B51GXyrrFxaapD69nfcRqSftqxHL1oj%2FOjPjtQ0GNYCfrCXWi3QMtlelhyjkYbFfdvsyx4M87Wy6zqemTq4X9KwQnmegkK%2Bmf%2BSi5G9M1PVfLUt3od3CJIGDEQS7iKUD4Zov8%2FjyErqrruPNkK58%2FJN7Sx0%2B0sDe3k0k9xA6JBJACGqwPHiKp8S8fts2F0mrDS3nubPThH6ZLa5YcQsnBvs3kSsCnJeXJuK%2FB%2FwAYmwQ%2FrXdjEsQRizhvjKCrUp8If4uW%2FwCyuK3Fs893p1nezfVdeDCOxmHFi8ZH%2B89wSeBjP2YuX%2BVFiYggA70Pmt9QzfyjdxXeiPeaY3rNYt9ZjdKUkgP2gyj7L8ftL%2FPgTz2tuLdJIT6cN1JFcxzJ2U7Sb%2Fs%2Fa5BsKfLEMvlPXby2sJI40uF%2F0izVuUcb05n0z3gkTlw%2F3237vHeddXN5pEMdnbmOys4BFcy0qDcF6GJa%2FwDFacmyX8Pu2R1QOi6Yupabd2F78dj6xjLVFUlpySaHwkUf7F0%2BDIrrvl6dr42N0eOtRIHs7ldkv4B9ijf8tKgfB%2FP%2FAHX28mPluyb0Vs7OdTL6SSReoK8%2FTZqN%2FrqOPL%2FJwTqdhFr9m1lqUhjnhcm2uv8AdltN%2FMKf7pb9tP8AZrjVhWHaHrEWqxjTb9gt9GKQytsXptxNf2sl35d3J0jznJbCojuQlR26cT%2Btc55qthdyXcyyJ9X8wWfx3ESbC6UbrcwfzS8fjfj%2FAHyfvPt88N%2FKuq3F3q1hqBIEyc4pWZuCkoAwck9MA50VPJV%2FMq2k0TznfCJQUmPJom%2BzJG%2FxcW9t%2FwDY4Q6cILa6ZY2eKRwslv6goaDfjy%2FaK4f%2FAJleadM80a8t1pcZ9GCJYmuG2MrD7TAfsqv2V%2Fmwr0WyuNXUw%2FVxci1%2BKLt%2Fw23wrg6qGVanr1vrK2t3csIry1aESBjxJEYYOQff4cjvm3zLbpZXLWTGC5vr%2FwCswRjfjBGoC8yfi%2BIjCPX2vNMu%2FqZDRNGKSAgUqxqgqKruF%2BH4sjsyPPIZZSXJ7knfG1e9%2Flxrdt5ksbqdSFu7eMLcW5O4%2BE0cV6xvnF75uVzcb14yyBW7%2FaO2KeS9RutC8yWd7DMYLfn6d3L%2Bx6D7SLJ7YhdkNd3UkRDRSXErxMDUFGclT9IwndCtpWrz6ZN8MskcDsGdojxkjcfZmip%2B2v8AL%2B3iWoySfXbiHUmFy14frKXqH4nL14zK%2FVuX7cbYEeJWDPQVpU0Pj0x6yqLL0pJUW4tXE1o5O9SaSRbeP28Cob1Z1T6vPKzxjeNSSQK9aV%2BznXLfUrdtDt9T1U%2BjeRxpa3iMvF5V41jcg%2Ftrx%2BLOd6VbaTqJlS7lMl5Iri3hHwRiQj920snhzODppWsii6zcGeSZg3po3NSy%2FD%2Fen4K9V542r0LyheaXcm5uaCCWNhxkl%2FvClOqcvs4rrn5g2enI9tpKi4uqlWck0rSvxP8Atf7HITazpccriNaLGD%2FozGnBVIJkZP261%2BFuWE4juLqSZo2pbJMjyitAQeVPwrjxbUE01reuXGvCKPUZJ2Cs0iqgUgFtunw%2FCKfDhWLXSzayW73jxuGElWgJUbUoSDhkLcXEjJDSJqkoSd%2BH7OGlh5a1HzDONIit%2FWvZEMkJRlQtGlKsCxVX4%2Fy%2FawWtILTLTTmeMmbTrm1jXe0nmMLOwH2nZlrWv%2BVhlBb6Lql09zpemrbx2cJe5WNqiRi3EKrfyj%2BZR8WJ6x%2BVPnXQrK41i9sljsrUB5pBLGzAVCgiNWLNufs4I8h6hp738sNxRBexei5BoBJWscg%2F2Xw4VZjoMllFbx635Y52k9mvPUdKaRjHIF%2B08PInhJQV6%2Fa%2BHOq6d5%2F0G7toZzK%2FBwKzBCVrTo3GpQ%2F62cYW21DQ%2FMUVrFH%2B5vyInPSIqzfE1f2afawkmtp42klt0f6uzuInWoDqrFQRQjkMJV9Q2ms6VfitpeRS%2BwYV%2FwCBNDg2ozzr5Y1vTI7V9L1PnbTDk8E4Qs7M1KKHBDp9GTfQfOdosSxw6txkp8UN0DxBG37WNea09UzZBNY%2FM3SfLcVrLrDIyXZKwm2bmW40DsF3%2BFa%2FF8eTW1uoby2iu7ducMyCSNh3VhUYEK2bNXNirs2bNirs2bNir%2F%2FS7%2FmzZsVdmzZsVdnE%2FwA9rKYXmj6jT9w0ctuT4OpEgB%2F1lOdsyO%2Bd%2FLUfmvy%2FcaXstxtNZyHosybofk32G%2F1sB5ORpMoxZ4TPIGj7pbPl%2BNPrERi%2FaG6H38MkPlXzh%2BjhHo%2BrmunCqwXFKmDmfiSRf27d%2FwBv9pMJBDcWN7JaXcRhuYHKTRPsVdT0P%2FNWB9RiWO6ag%2FdygSL7cuv3HKpkwImPcXoM2KGaHhy3B3BHf3h6B5qslXQooNOVof0a7Xdi6fDxBPKQQ78vT35xNl6Fr1l5s0yXSNZRHujHxlRhtMv%2B%2FE8JB9r%2FAIfILo2pT6XfLd8mmiKehPAzE8oT%2ByvKtOPWP%2BXKvrafSpl1XT2L6ez84LqLrE1a8WH7PH7NDlkMoluPiHRarRz05F%2BqJ5SHf1CT%2BZ%2FLlz5WvvTUmXT5jW2nP%2FEH%2FwCLB%2Fw2FauD8Sn6c67a3Vh5x0p7G%2BRfrAWskY6EHpLFXp%2FxpnLdc0S88t3ptrir27msE3ZlH6nX9pcmR1HJxFS3uA4oftDBlvcz2lxHc2sjQzxMGjlTYgjCVG6Mh%2BWD4ZRIvv3GC1Z7pdxHraNJCViukq13aswVAO9xCW%2F3Uf8Adkf%2B6%2F8AVw1t5NPkKabe3SyqKG2uIquYDX7Jc7ei37a%2FZ%2Fazm9tdT2dxHdWzcJYzyQ9R4UI7qw%2BFhkwhvDqECTaZbExyHhPbqKmCYivBf%2BKZPtR%2F8DgIkSDxVHqK%2FSyBFbjfvR8k1xY6gVtLb6vJbVWZbhvVLo38yAemYZF%2F4XCjW0McX986%2BX72Uem6V56bekVAYLu0D%2F8AJSL%2FAItjw7W0utVgj0%2B7k9DULc%2BnaSMaFkrvaz%2F8yXP%2Bpgq00iztbkaVcP8AWBer6NzEworLWjRsoJ4yRv8AEjr9jGOMDbn5y3UyJ8vcyfyHpl1puhy31zEE1e9cJfKxXjK8JMaTqfGZCrt%2FN9rCX8wda%2BqyabAGAM85aYA9FUcV%2FwCGyZXElvb20VgHb1LeNDEKmpKDhGS%2FfOK%2BcrhtU1G8vLZ%2BYsz6M0Q%2B0nBh6cwH%2B%2B5af7F8slsAAxG5tkesTm68saddo3GbTZ5bb1B1G%2FrRfrxGTW7LzPpcrahALfzDpir9biI4tJESAZowftJ8Svx%2FY%2F1cD6VMb3RNTsShJmhju4gVP2ovtH%2FgG%2BLBVnb6b5g0ux1JGWDXNDj4SEiongQcGjk%2F34hX7LfsYBukt%2BWba4gWHWmj%2BsWdpK0Dwqy%2BoWkonJE%2FvHZOfNcKdasnk80288TN6EEqxOXNWSOJiS7n2p8eB4bySw1ilv8Au4OQk47kKo%2BLv%2FLX7WK6jr4u9Uee1jItndiIiasyv9sV%2Fl3wWAFZBbvYajqsV%2FDSP1yITPUgSKH9SSinYcIRw%2BH7TSJhr%2BYOr2sOkWmnhHSK6YiRolFF5A%2Bn6ngJif8AWyP2ML6dbiRI%2FrqsAI3SRAsMY%2BxHKrlGhfl%2FefB%2B8%2F3XgXXYppJG1m2unkbj6Op2pUSKVAqksSNsif5L%2FFH9vHoUlrytdtDCgdmV7d5I2boU%2BINGT%2FLhpr3nLTKJ9UT19TB4zNHtCe3Jj3b2XIssp1Y8bUfFOQsix7SCSlAXpTmj4av5OnsdM%2BuzB3Zm9OWaNGD2%2FMgRTolP3sXP4Zv92fyYi6oITDVrG28x6NBeBvqWoWS1ivSeIikU8jFI%2BzLA6%2FGn%2B%2B3yFaq1pcXix28ZUGi3U2wadx%2FuziAEWv8Aq%2FH9vDLV7TzXeWrqbaWO4VhHeNHtFdCP7EhX5D4v9%2BfbwpC3liGgvIoVdSqt6pLPGr0pTj%2Bz8Xw4CUkEGil7RwRu9ZzwjPx8UZiKePShyb%2BRfMdhHM2kLEV%2BsDlDLQFncUCxcRX7WEF1DCs63zCs6r6c1Nkencr7rgXSpFsb5zCForepC9PiUEfZr4DADRVD%2BddUkPmPU4lUgVNtNG4qDw2Bof2kP2GyK1LECpY%2BAqTnUFhsta1Ce%2B1G3inuZCrySsgqwqFNRkwu9R8m%2BWIwscEHrharDBGjSH5tT4f9kcIoop4da6Vqt2GW0tbiQHbikbkH57UwHNFLbSvb3CNFLExSSJxxKsuzKwPQjOu3%2Fmq%2B1mFo1C2NmFMjhTQLGu%2FKRtumQfU%2FMWh3uoTXx0r1pJePKSWSnJlVU5lQNufHnhQxmOYxklSPiFCDvUZQKUIpUn7Jr0%2B7D8eYrBP7nRbUf61W%2FhmPmtkBFvptnEezCMkj78CpRZOY5w%2FBmWhBCjseuSyyn0pIpIr2CSr2gtbYTQt6aylufPp8PBWbCZPNurROskYgVkYOv7tSAVNRtg2780%2BYPNd5CdWuRJHEWkWONFjRaih%2BFAPljsqLeRrVh%2BjQt3GBRoXBBKAfFwag%2BLJ15B17yfealE2taTHcXMG63Eq%2FvbYL%2FvyH%2B6eFK%2F3iJyT9vAXkPygPNEuoxx3KQ3VrAHtYWP8AeOxpv%2FxWqijMv2WZMLdS8vBLx4pg9jqVqTFJIvwup6fvP5lP%2FDLillv5i%2BStPtL867pEEcem6hxkivLWjIk%2FevHb05ftZF9Okd5Et5mayvoWEtrdRmnCUfYmhYfzftp%2B3k3%2FAC68zLfx%2FwCFdWt1eElrbUoW%2BwGIrDPGv7CyU%2BLj%2B18eIeavKM3lq7WqfWNOkYizuXFeNesE9P8AiX7WNbqCncfm2fzRoUmg6zEqa7ZPDPPCv93eQRMC00A%2Fa%2FZaWLCHzf8Al7oOra5b6h5KuBHe3rj61Ywr%2B5Xlu0%2FL%2FdDfzx%2F8Qwpup4VWBrORhfW7iS0YkrJbkdRLKv2om%2FY4fbzsvkXU7fWNHju3jhj1ZAI9UEKhSJvEmg%2BF1%2BPEhXgPm%2B98y%2BWriTyxrM0iCMBo5VVW9aDoJIZm%2BLif5ftRthN5X8zxWXm%2FTZ9dHq6HH%2Foz2z1eNLd1Kq4TvwY%2Bo2el%2FPXkjTPPGkNY3n7q7hq9jeqPjikp%2FwANE%2F8AuxM8mazo%2Bq%2BV9UuNI1KL07y2PFlbdWU%2FZljP7UTfstih9Jy6d%2BVV3f2dja3ltHe6ipezS2mrzAFfh%2B2iMf2K%2FE2Xcfk5ojoTZ311bz1JEjFXG%2FitE%2F4lnlh3USLKCY7lSGLQ7UI3DA9mz0L%2BVP5wLqxi8s%2BaZRHqIpHZX0hAE9NljlPaf%2FK%2F3Z%2FrYqqal%2BS%2BoXb2EYvraWG3kcyvLG3IRuwY%2BkgPFW2PfJjZ%2BRruwuFa21iRYFACKFKsKf6r%2Bmf%2BReTUDxy6Yqo20LQQpE8rzso3lkpyb58QBi2bNirs2bNirs2bNir%2FAP%2FT7%2FmzZsVdmzZsVdlEA9cvNirzb8zvIf6bhOu6REP0tbL%2B%2BjUb3EQ%2FZ%2F4yp%2Bx%2FP9jOHagvqWsMw%2B1ETGwPWh33z1znI%2FzL8hqEutf0qP4JRzvrdR9lwR%2FpCDw%2F37%2FweRnGxTtNBreExw5DsD6Sen9F4gpphto2prYSSQ3Ketp11RbyAiu3QSoP50%2F4ZcK5YzG5Q7eGPEUyRpMykRSEhH7MV2IzGAkDY5h3OSEMkDjyCxL8beaZaglxoOpxTW7qLSWkmn3cX2eJ34nx%2FwApclMsen%2BcdIeC4QCZQPXjH2kanwyxe2RjT7%2B2e0bRtVHLT5SWhl%2Fat5Ozr%2FxWx%2B2uJWtxe6HqSw8wtxDvBL%2BxLGegP8yOMyceQEbcuo7nnNVpZ4JmMtwd4y%2FnD9bENU0y80C%2BazuRyTrHIPsunZh%2FTKil4kSIaj%2BGdZ1HTtM846SXUenKv2gN3glp1%2FykP%2FD5yO9s7vRb2SxvU4sh3I6MOzp7NkyOo5OKmSuGUMvQ9MMdF1m40S%2FjvoAHUfDPA32ZIz9pGH%2FDIf2Gwjt5Qh3%2Bw3%2BdcFnrir0GW5Kyx6hav6ltfqDHddW5Dbi1do5V%2Bw6%2FzZLPLbQ6nP8AWrpAby3oJGI2kXqkrfyyqR9rOU6HrKWHq2N8Gl0y6p66Lu0bjZZ4v%2BLF%2FaX%2FAHYmda8p2i2tk8sjrI7miTITxkj%2B1HJQ7huJ%2BLJR3K3snuq3fo2ruoqQC3idvsgD%2FWpnMJ%2FJ%2Fme4Msq2jC9tuUaXcXER3drJ1japH72NW%2BFmX%2Fit%2FwB5nTdIksyzW0c%2FryxVZgzBmCsa4eCZAKHDIWgbPDvK9jquh6xaW%2BtW81rDL6lozTKaFJQVAB%2BKtfhwvs47myvL%2BNQfTs2kD9UK8gQKlv2Xp8StnR%2FzQ1GW08u%2BlZO0d3dTxxQshKsKHm7hh9jiq%2Fazi6MxEiI5YOa3NyxJMjVrux%2BIrlctmQ3TS91E3jCG2jHI09R1qOdOgFf91r%2Fw2CLKFYxyJBIFZJOwHgMC2NryG3wRnq56t%2FZhusZiihu7cMWt5ir2zpyikUAU9T%2BYcuWR5pdPqiacQrWqXCzR1USVBAb%2FAHYp%2FnwutdVhtdTa%2FgWVBOAk8BcNG9BTqyk4c6rc2dxe2F3c2kcKJGI7qx4kUjpyR0B6Vr%2FNhBqc9haSxpHERaXRaWIt%2FuvcoTRa75PlyQn%2FAJZvYI%2FMUS2SNELiVTEygUjnVW9OlftI8hVWVsnSXVxfTGS6laSViCS2wodjsNs5%2Fo8rrL69qwd6pIrqAw%2Fd%2FYPw9OmSua51GVJ762swQXLCD1AiryNQrMfi2%2FyVwxKkIjW7%2BezjR7PTpr%2BUbv6WyUH8zfa6duOEPnjT7SEWmrxxkSXatazowA5KY%2BScgD9qIrxwQ3mPX7EetqFhAtqPtegzySAewA45F%2FMHm1dcRIGjMdvC%2FqRIKcuVCvJ2%2BR%2BzglLY2yhjnLaESfcEquburW8M5HpzKvIr1FaDl79cRbRr6S8%2Br245GCoac%2FCjKp67%2FwAww%2F8AL3li01qBLgPJO8f7t4wP7s%2FsE9fhOHer%2BVtfgg%2BvabcJe1FJrPjwZVUU%2Fdy%2FR9llyIFixuEzjKEjCYojmGM6jaajZ28RjBiEisJzULTi3iSKR0wboHkTXdWt21OLT5ru2A5RlN1k8SrsVWT%2FAGD5ena1aXA%2Bo6pD%2B9J2WcenL%2FlBJR8D%2FwCrnSfy880W%2Flyzl0m7uJZtJR%2BVmXSsltyNXhYD7cP7ScfiT%2BXDXcxosR1D8rvP2qWUdlZadHZW7kPcPcXEYeSn2EKR8%2BKJ9rh%2FNkRu%2FwArtc026ey1FooJo9yKs4IP7StQclz0brf5jeXtKhR7eYX0sieoiQHYL29Rv2Cf5T8WQ7W%2FMj%2BZrOKd0t1Ct%2B6eDk7xMaj05CaNxb%2FVwEgCy249PlyECMefJ4235fXQ63Uf%2FAt%2FXC7VvKsmkfV7iab1dPlISW7jTeFz%2BxJHWoPg37edQ5kyNDIvpyx%2FbQ%2B%2FQg91OB7hFCurIssUq8JoHFUdD%2Byw%2FU2IIIsMMmKeOZhkiYyHMF5g%2BhCNipcyFf3nwD7cH%2B%2FoT%2B1x%2FwB2J%2BziNyW01%2BNseVtMoMc4G7VH82TCbyxfWMxtUMlnDIPrOli55JIh%2FwCK2ZeMqthYYOMVxBNb%2Fu2HK%2Fsl6JU7Xlp%2B1xDfbT%2FdeFgmPknW7q0eC%2FsZ%2BOoWTck5ftRnrG9PtIfstnatY0iw%2FMfQ4%2FMWh8bfXbdSjxnbmyD47S4%2F5ky55gWcaZqDPp1yZo42Ppz8SvIePHOn%2BTfO2qaXML%2FSHiPqcRf2M9fTYf78Xj8XIfs4qoWsGsQ64Tpp%2Bo31zGbK9WYfFE8Z9TceI4FP9lnpNbWDVdGit9RRbiO4gT1g3QkqCW9jX4lzksE1z5382DU7WzEKoqq5UVAoOIeV9uR%2BL%2Fgc7RDGsMMcS%2FZjUIPkopj0UvHtQ%2FKnV9H1F9X8vXCajyYt9TuQoYLSijkx9OTj%2FlcMS8q%2BaLny95guoNYs2s%2FrfEXsLLxKyJXjLH4pxOdpwl1zy1p%2BvCOSctDcw19K5ioHAOxU1HxJ%2Fk4otNoZYriJJoWDxSKGRh0II2IyF%2FmN%2BXll550z4OMGs2oJsLynfr6Mv80L%2FwDCfayU6RYNplhDYNMZxACqyEBSVqSoIH8uDj0xV8NappV7pd7Np%2BoQNbX9qxSaJuoYfrr9pWwuSNg4NSHBqKbEHxrnrL80Py2g86WX1%2BwCw69aJS3kOyzoN%2Fq8x%2F5NP%2Bw2eXm0q8guZoblGglicpNA4pIroaMjfy0OKvpf8lvMusa5ol1ZazOLqXS3jiiuTvIyOvJRIf2ylKc86eM8y%2Fk35usfK2r3FtfyMtjqoRZZ3qRFNGT6bP4IQ7I%2F%2BxztF1%2BaHke01SDR31aN7mZ%2FTLRVeKNu3qTD4F5dMVZlmylIZQwNQdwRuMvFXZs2bFXZs2bFX%2F%2FU7%2FmzZsVdmzZsVdmzZsVdjXVXVlYclIIIPQg47GSOsaNI5oqgsx9h1xV4R%2BZvkA6VK2r6VH%2FuPlarIv8Aulz%2Bz%2Fxjb%2Fdf%2FA5EoJLK%2FwBFh0yOJU1AyrH6oABboqJItebtyJkjZP8AKVs73qnm%2FwAsyW89les7xzwtSMxMRKG%2BHghpx55w%2FwAy%2BWpbIHWNNjeGKFkDjlVw5%2BIPGwp8S%2FtcfsZGUauQHvdvpNWJxjhyyMZA%2BiXQ%2BUmMXNtcWVzJaXSGOeJisiHsRtll1uLf6rcMeKb20vVoW%2F6pP%2B0v7GHsLr5ptvq7mOPU4ElmEhHH1eCII4kp%2Bz6aO7%2FtephBNBPbytDcRtFNGaPG4oR7EZVKJHrhz%2B92JjDPA4cw3HMdR%2FSiiNG1m7028EiEC4j%2BGWMn4JU7qf8AjVslmvaBp3nLSFvbCiTKCY2P2opP24pKfs%2F9d5BTFFIys5ZGX9pKch9B65JvKmrSaVdevxea1m%2BCcEFQyj9tR%2FvxMtxZBIV8x3Oi1eknp5Ud4n6Zd%2F7XmskVxp11JY3sZikjbiyHsf8Amk%2Fs4caPay6peQadE6rJMwVXboF6k%2B%2FEDOn%2BdPIkfmSyGp6QA12qc4JFpSVPtcG9%2FwDjfI35a8qzaFNa3urKrXLmscfI1gP7NSv2n%2FmywxouIN1DWPKDW95DY6K0t5IfgnaUKgD05cl49I6H7TZ0bynBAmmjSVvhcz2qEM60%2BHnVRw9om%2BH%2FAFsItfhndg1q%2FpNdxmIuDQVU%2FECf8oYReSLk6R5nWBw1bmT6sSD8FGBb4h%2FNyXDyPvbsWITE9%2FVGJkB30jPKV1PpOsrBduRLFcPb3JY9VditW%2F2XxZ0%2B91O2spIoJWL3E54wW0Y5SOf9UdF%2Fmdvhzm%2Fm2w%2BoeapJlBVdRjWdCDsZE2cfeuHdvfQW0BngZptVvEH1u%2FlG6gj%2B5hH7Kr0xHc0pD%2BYg8wa1NDFZWjSWtsrCRoiGJcn46b1YdF2yFWemzxsW1CN4Ej%2FZlUofubOs2WpxpNGl2oMP2eSbEe5yTXGkadqFpJaT26T2860YEVBB6EHx8MeCzdpunlEtpHYQ38GqRrFNaPA8EgJcFa%2FGqhadao2XBGlmbe2uCzevbGeRo2PcNJx%2F2S%2FDht51s3sLpYLoH6ncIq21wRU1UceLt9Hxf8Hhj5f8pXerWc%2Bq2VrHqE1oqQWdvNLwUoijmJB%2FO9W4%2Fs8cjVH3LezEvM2mXWqyabNozB7SS1WJ5SwBrHWnLv8A3ZUbfy4onlazmtrKC%2BJlNoHFFNFbmQaHvtTJ9rPlzU7GOO6vrRbeNioQQMrRxmn938IXj4YE0fQLnXBdQ2062l1CP3SSry9Xav7og0%2F4LDsikps7C3s1WK2iWJB%2Bygpg5lNOX0YAVr7TL0xXsxcxsVlhktwpFPtLVWwbf%2Ban0e8tp7LTYrmyILlpyT6hoRw2%2Fu%2FTbdlw3taoK4v7a1dY2dW5GjQ1qVHj%2FwA24Vah5a03VlNxZEQTtvyX7LH%2FAClyfjyfo3nrTrbV9PRNI1i6gM8qRENC8gb05OUI%2BNR6nR1%2F4HIRqOj655Vu%2FQ1SBogT%2B7mU1ikA7pJ0%2FwBi3xZGwdizhOeOXFCRBSPSZNX8maml1MhNsfgldPijdD1H%2BS37S8s6ZLrEEZt2uEe1W6VWtLsg%2BlKGHIGOReS%2F6wOR9dWtRp11dSQ%2FWHt4Wk%2Br93IGyU%2Fysk%2Fk%2FW5INATT9Z0eAWczGT6gr%2BoIlfcgBxsf2vT%2FAGMYxMSeE2D07m7PqBmjEzjWSO3EOUo%2BY72M%2BYfLcd3FJeQRxyo7EzQU792GQ60bU9Hkf9HTAwts1jdVeNl%2FyX%2B2n%2FEc7ZL5XstVSS58p6kYZqVbTrysif6tWPrRr%2FspVzmuvaDq2jzsup2JtA5NCfjtmNf91Tjb%2FYyccJ8tmgJPqV4JJLJpI3sYLqJ2uY%2FtBgP91q6jpIy8Vw0sNNn8tG11m8KWNnqTrAums5YhTvyct%2B0R8fw%2FYb%2FWwLdRpfaVEkkPO50r1HhjJALRSg9HpX92%2FwCzgSW4TV9Hga5uppdVspFt7a0FOMNshHJm3VuZY8fV%2B0zfBlZHq3BNigOnm52LIfDHCYwMCJmVXI8IqMYnzI4f85l%2BsRQc7eSKVRPHKts4ruUkPAcv9R%2FiwbZaY1p5gtrHUoipjnjWZOo4lhRv8pGwcPL9pcROZo2S6ZkaXgyqoaFVk4hn%2BJ9uPqNxwVrmsWupvYzalF9S1K1lTi6GscsYYMpV%2FFWUNx%2FlwYoSjd8jybO0suLMcUsdmUQROxRrnH75PQtd8vaT5itBZapAJI0YPE6njJGw%2FajcfZzg%2FwCZWh3GhW%2Fr2wH1vSZ0DXlPia1m%2FuZuK7MV%2FuLj%2BbPQ1pdR3ltHcxGqyCtOtD3H0HIF%2BZFnb3k8EMqhxPBJHOh6MnIUDfSdssDq3zfqWmR6lFJqenRCO6iHK%2Fsk3FD0ng%2FmjfC3SNVudJuUvrKQJdQOrxc1DoafaSRGqrK%2FRlyU32i3XlnU4RHOYrF2Isr1hy9Jm%2F495%2F8AimT%2FACsKte0Zp%2FW1Kxg9KaL%2FAI6Nipr6bH%2Fd0X88En2lfFX0%2FwDlz5x0fzbpAlsIYrO%2BgAF%2FYxBVCOR%2FeIBTlE%2F7Lf7HJpniLyz5m1TyrqVtq2ly8ZYzuvVWX9qOQftI37WeufJnnHTfOekJqViwSZaLd2pNXhk7qf8AJP7D%2FtYFZJmzZsVdmzZsVaOct%2FNj8sx5ntJNb0NfT1uBayxrt9ajUfY%2F4zqP7tv2vsZ1PKOKvhz0CsbwMzqSSHPRgw2%2BL3%2FmwrlheB%2BD9exHQjxGeqfPH5Oad5lupdW0icabqU3xTqV5QTN%2FOyr8SOf2nX%2FgM59H%2BQfmu5nWC9ns4rbl8U6OzMB%2FkpwGKr%2Fyk%2FOBtOMPlnzTMWsyRHY6g5qYq9I5j3i%2Flf8A3XnoxWV1VkIZWAKsNwQehGc68sfkv5Q8vBZriE6rdrQ%2BpdAemCO6wj4f%2BD550VVCqFUUVRQAbAAYq3mzZsVdmzZsVf%2FV7%2FmzZsVdmzZsVdmzZsVdiNzNDbwSTXLBIUUmRj0A98WwNfPaJbSm%2BKi2pSUv9mh2pirAPON5pMWiStoiPJfM1bVI4yy1G8jDkCnwrhDrD6jFb%2BWbC7Wt36Ecl%2BCP%2BKiZHbtyJajf5WDvP9xZRaNCfKtxKb4zj04IOR403JKkfAOfH%2FWws84ajNd3EEklFuSOUtK%2FDRVXiKduQOFIeeatpk0F5PeaUj%2BlATLIYwSYhXd%2Fh%2ByleuLP9U12ykmiWO2vrWOW4n3PxgcAFXmaty3cf77%2Bx9jO1%2Flvo0EejT388SvJqDMjFxXlEvw8TX9ls5h%2BY%2FkSTyne%2FpHTVY6LdsVUj%2FdDt1hf%2Fitv91t%2FsMgRW4dxo9X4vDiySqcfon%2FO%2FoyYJsQGHfJL5FsrXUdZk0m6uTbR3UTvHQAgzRjkONSODla5GgcX0%2FUJNL1S0v41DPFINm8G%2BE%2Frym%2BHMD0k52txeLppjqPUPfF6l5X8xWlm995evZlguLSdkjR9gTWjrXovP4XTEPM6wwzKSKCT4tuoIO%2B3vke80xXU2tW13ZQ%2Bo15bq8npJ8UlELVp%2B3sMBWOsXOtWy2iEyXNuCyIw5Myf8VsaseFP7tvizL4tq%2BTzNUfvT%2BOU6npky9ZrciVAO5Xw%2Ba8sis01rp%2FmC01O5YrSWJ4kXcyFiB9nsK%2Ft5fljzLXzMlg0bRQujQESbVlDcl5IenL4kyeebPIp8y6j5e1DSEjX0XWO4QsqKYk%2FfRgV%2Fb5gx8cHMe5lGUom4mjuPnzSW%2F1OfVL6R7sJW2keKFUGygGhIJ3PKmNVy%2FTAk1pdWc9zBdrwuElcTIezA%2FEMj%2FmjXbvQtaW3tEBgCJM6PuCHFQExtizSKI1DHJv5VuxKrWMp%2BwC8JPh%2B0v0ZCNLvrfUrGG9tjWOVQfkf2lP%2BqcPdHme3vIZV24sKn2Ox%2FDJBSyzzBplrqWnSQSxLI0P76EsoIDqO3%2BsMgmlaxceUdRXU7ZS9jJRb62XoUP7QH80f2k%2F4HOgXdyVYgHp1%2BWQW8g4TzQyoQpJIVh1VuhGJCh7FG9hrempKhW4sryMMp6hlYV%2B%2FOWa%2FbXfk%2FU0ZJOEL1ayu2%2By1P91udv3if8OuCPJ%2FmhPL1xaaJetx0y4rFFMx2imJJSvhHLXj%2Fr4N%2FO9G%2FwAJ28o%2FYvY69%2BqOMgdlYzqPmWy8xr615aouoxAA3dk4dJB0%2FfRGjofBl54U%2BnCySRNSa1l%2B2vQq3861%2By65GPKcztqxjY7NEw4jYbU32zoNppF1qfrw2JX6yierHExoJivWIf5fH7DYYnZaY3pN9N5N1n9JJEbuIwyRoisY1kDbpVu3F%2FidM7xpl3Y%2BadFt7m5tle3vIUkaCYBx8Qowof5WB%2BPONG0jvLY28qlRUgqwoyOOu37LpiXl3XbjyZqk7XglmtZIfTEKNQGh5REFvsxr8XLjgIrdWQedvy7GiQPrfl4SNaxVe5s1q7Rp3ki%2FaaNf20%2B1kT07WGCqwcMjdJFNQc9C2N9BqNvHc29WiljSVGI2KyCopkFv%2FwAotHu9cOq2d1JYW0x53dhAo4O53JQt8MYf9ocMFyB23ZwGOQIkeCQGxqwfIsatNQSQrIrmOUbrIhoQfEEb5LLHzPP6X1TV4RqFo4ozFVL0%2FwApD8EmFms%2FlxeWBNxoEpuIhubSQj1B%2FqPsHwo0%2B4ltUmW7Ro5ojRo3BVhT2OWCi1t%2BbPJ1pFCfMXlJgtl%2Fx92VCyRHuwjb4kX%2Bdf2ciOlG2huhcX2n8JI2BE8FHHzMTb%2F8TVc6FpWutaySPblJEmHGeCQVVwP1ZGtcsIbe5N3p0Ui2MlWaM7mB%2FwBpQ4%2B1F%2FLkTGulhnDIYnYprf6tYaxaxxCDlxIaG7iko8Z7kGtWr%2B3ywxsdGl1WwitzGbkgkRzugDGnRm34R0%2FZbIJBZwxv9YhAVx8Qp0JPiBnafJl1eXekLNdyrKOXGNgADQD4g3Gg%2BE7Y8WyTLfiHNJbbQvNHle%2Fe50eQX%2BnXAD3Vg53EoWnKImhQmn7Pwv8AyYRX9xql1dmXWOS3XHiqMnp0QEkKq%2BA5fazrQwHqOmWmqQGC7j5D9lxsynxVsFsLeO39hb39tJbXMYlhlHGSNuhB%2FUffOZXy3%2Fl7UV05n5MgrpN1LTjLCT8VncEj%2FYf5Odt1nQbzR3JcerasfgnA2%2BT%2FAMrYB%2F5V3Y%2BdtAvhefubrn%2FuNux1jkQUYkD7Ubnir%2F6uEq8D1rTFk9XUdNgaHix%2Bu2XVoHPcD%2FfbfstnQfyAeb%2FFktC%2FptaSF1VgFNGTiXFfiA%2BLj%2FlZC9WuNd8p6kNM1e04anYsY2mY7TW%2FZG2pKjfsS4K003mkCHzl5WmDLazercWoB9WCvX1FB%2FeQt9lv8nIofYNRl5FPI3njTfO2li7taRXkQUXlp3Rj0Zf5on%2FYbJXirs2bNirs2bNirs2bNirs2bNirs2bNirs2bNir%2F%2FW7%2FmzZsVdmzZsVdmzZsVdgHVY9PmtHi1JlW3cgEuQBUbr1wdgPUdNttTtzb3IJWoZSOoYdxirzHztP%2Bi20aTyvdm6uDcJSCMJIPTVhRWKj7Bbbi2B9b8keZrnV3FvberbsQsVwHUKFJ6tU8hSvhk%2B%2FwAPGy1GwvLOkqK5ju0cIP3YQ%2BnItAPiif8A4nkkphKQaQOk6eml6ba6fGQVt4whPif2j%2FwWO1LTbPVrGfTr%2BITWtyhSWMjqD%2FEfs4MzEVwIsg2Ni%2BVPOHlm58p65NpU1XhP72znP%2B7IWPwn%2FXX7En%2BVgW28s63f2kWr29m76Ys6xyXQpxUggNUfa4iv2uOen9c8t6J5it0t9as0uo4zyjLVDKf8l1oy5EL7TriGW30Lytp7Q6Dbs0d7xI4Oz%2FFWPlycmNvib%2BfKziufETs7WXahOn8Ph9dVIn6a7%2FewDzPd3ukNplzYtxtEhW2adVBKzRktTkalOdf%2BBw60bydZ%2BaNR%2FwARaPq0VjOIw509bcLIkw%2B16yh%2FjRm%2F3an28de6dLYTXGk6xDztpx8aHoyn7Lqfb9nI3YX%2BreQ9ThS3pcWhcvazMBWSE%2FbgaQ%2FF8P8AJlrrDvunvmryB9buFvzAtnrkQD84z%2B6mKHkGRtu%2F82HWnO%2BoadLpU5aC4ZeUL9Gil%2B0jKR0aOYZOLO80jzho0d3Zv6kMn2WFPUhlGxVh%2By6H7WQWaO80rV1hvwBMjcfUAoskTbLIP%2BNsIr5oSu10tfOt7Ikt4th5ijQC6hkSsdz6fwfWIiCCr7UmTj%2Fl5JG%2FKTSdTjg%2FxDILh4UCUgHD7P8Axafj45GPMdkYtRkvbWf6jewEXNhcr9ppT9pEVatJWnxJx%2BznRPIfmz%2FFujfW5Y%2FSvLZ%2Fq94gBCmQCvNQfiVX%2B1xb7OA2NleaX%2Fkr%2FA19Jb2rO%2BlXbc7UvuFbuvL%2Bb%2FiWC7M7HOuarpdrq9jLY3i8o5Bse6t2df8AKXOP6jbaj5dvpLK5USBd0fcB07Ov8cMT3qkP5l6trkWp2kNi8sVr6CShoyVDyH7RJHXj8OQpfNfmCN1%2BsXcsnBeCrOfUAUdFHP4uP052ny%2Fq2g6veR6T5hgX94Almsp%2Fdsw%2F3W%2F%2BU37GSHUfyp8n6hUpavZse8DkD%2FgH5p%2BGCXNeTwM%2BbzeWxtr%2B3SVHFGMZKMP8oBqr%2FwANh9qv5gpr3kVfLV9zk1O3uIjFOwrzt4w1GZhUeqn2P8rJD5i%2FJJrK2lvNKufrSx%2FEYCnCXiOtCpKPx%2F1M503lq7tpDxDNUUUGlPwyJtWQflfpMWseaFtLgssZtZnDJ1VhxCn3651e38qanp%2Bs2ZX95brKG%2BtR7UVfio6%2Fs16YS%2Fk3pGmWxvNR%2BspJqfEW7WnR4kryLFW3PqN%2FL%2FLnW8I2UsW8x%2BVo71n1LT0CXp3mjGwlp3%2F4yD%2Fhsgl9oyXUaxX1u8LoCY2dStV%2FaG%2Fgc7JTEbiztrr0zcRrIYmDxlhWjDJCXQoeVeW9Rv8Ay1PKL25kuNO9ELEo%2BIjgaoKk%2FAqJyzqtrdQXkCXNs3qQyqGjcdCCK7ZFPMPl1Yg95aLWA7zQjfjXqw%2FycB6JrNzY3BW7uAbARKgUqSQVIC8KfCq8K8vhxq9wlntK4DvtJ07UgBfW6TU6FhvTwqN8FRyRyoHiYOjCoZTUEHH5FDC9Y%2FL6wuSZ9Ic2M3X0tzEfo6p%2FscL9B%2FLy8XVJNS8y3Yuo41aKz0%2BEkQrGwoWlO3N2zomVTDZV4l5n8s3Plq94oS%2BnTk%2FVZj27%2Bk5%2FnX%2FhsMNI893Wj2ht2thNVSEp8PGSlBK%2F%2BSf286nqOnWmqWcllexiSGQbg9QezKf2WGco13yhdaVMUT95A39zL0DDwPg%2BIZc3pPlzU5dStGa4IaeNgGZaAFWHJWoMOc5v5E1B7Wf6tcAoD%2B5PLb3jP0fYzo4xIYrZIo5UaOVQ6MKMrCoIPtidrZ29lAttaoI4UrxQdBU1OL5sCsO8%2FwD5e6V5708RXNINQgB%2Bp3oFStf2JAKc4m%2F4XOIWX5R%2FmVoOpummwIySAxNMssZhZG2q3Mqen80eeoKZqYq8l8h%2Fk%2FceW9Qt9Z1DU3W4gPJLS0JCEGvwTytT1U3%2Bx6arnWs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F1%2B%2F5s2bFXZs2bFXZs2bFXZs2bFXUzZs2KuzZs2KoXUjILG49E0k4EKetK43TYkhsoQp5EqGZvEnvgp1DKVbdW2I9jhDdaDqT%2FuLLWJbOzP8AulEVnAPVVkb4hiqB8wWUXmS%2BXTYWQi3ikZphuUlqOKmn7P8ANnOtRsiPW0TWUKqD9ofajYfZkQ%2B3%2FDLnYtH0Wy0W3aC0BJc8pJHPJ2J8ThV5u8tJrdoZrdQL6EH0z0Lj%2BQ%2F8a4bTbxXQPMGq%2Fl9r7mSs9jcUN3Cv2Zo%2B1xD4Sp%2FzZnaNYhtfNmgRaho7JcMwE1pKCASP246%2Fsn%2BZf58gsugWWtaPFp1xRL21qFkFCyP3U96YR%2BUfMt7%2BX%2BqvpmqEtpUsnGeOtQjE0FxD%2FwAzUxOy%2B5kHmGCOa1s7%2BVeEsFYpHI3SvwyBvDi647RtH1by3qEXmPT5VlgnWmo2C1Amj6rIrH4RMnVcCz3FvJ5x1pIqX2h30cVy3ouv2nQEeka9XZW5ZJNPult7dbZpTLasP9HlYUalP7uVf2JlH2v%2BEw891ZzY3tvqNtHdWz84pBUHoQe6sP2WX9rC7zJoEOu2Xp7LdRVa3lPY90b%2FACHwi0IahBqtdOo9hKf9LjY0Vf8ALU%2F78ybZFD591jS3R3gnRo5Ymp4MjA9snHkr8weRi0LzJII7pQEtdQc0SYdFWQ%2Fsy%2F5X7eH%2FAJw8uLqMDX9qg%2BtRL%2B8Uf7sQf8bLnJbuyjcNFKnND1U%2Fw8Dh5pfQo3Gc487eVFhMmq2KfuHNbmNR%2Fdsf92KP5G%2Fa%2FlyPeXPM%2Fmfy2Y4pmk1PRqfBBKpNwiDr6E3%2B7OH8j51%2B1ubXU7JLiKklvcJWjDqrDdWH%2FEsV5PntoFiuUuQOFxFvHKpKsPpWnLJZ5b8w65p1xEguXuIp3q8d07P1%2FZVm%2Bx%2Fkccbr%2Bhm2125sbPggX95AZq8FRhy3p%2FL8Srk181aDHqempqtvRLu2hDngPheMDmV%2F2P2ozjsrKLW5ju4Eni%2By4rQ9Qe4OL5D%2FACp5hgu7iOwkkUXFxD6yx9DWM8HNMmGJFFDRFRQioPUHIhrmgrAXubdK2z19WOleFepH%2BRkwymCkUIqD1BxBpWIaNq09o31WURrZoiem32ePEheCIB8VV%2BLJcGB3BBHtka1LQXVne0XnC9eUQ%2B0tevHxXA2lxazHfW620rx2atW4gkSqFOPCgdvjDClVwkA7hWYZswzZFXYnNBFPG0UyCSNvtKwqDimbFWE6voE1hIbu0Be3BrQVLIP8rxXJRo92b3T4Z2%2B1Ti3zG1cGkAih3B7ZSRpGvCNQqjsooN8NquzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Dv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxViPmbyo91cfpvQiINVT%2B%2Bh6RXSD9iXwl%2F33N%2FwWQzW9AXXo%2FXaFg7L%2B%2BhK0mjdBuafzACjrnYcDTWNrPKk8kYMsZDI42NR40w3tRW3z1p2l6ho%2BotLAfXVE5OgDVljA%2BLj%2FxZGv7OS2BbeaRbscpI5YuLQq3ETIfiQcv2ZVP90%2F8AsMk3mi1FjqBnt0CpcIHIUU%2BNT8RFP5tuWRDTFEulwPaP9YjVSfVjBIFGPM%2F7BvHCOSXqXlu6trnTI1t7Y2Zj%2BGW1YhmQ%2BJcfb5fzYcZBPKl1I7GRXHKGi3AY%2FajPRvdsnQNd8BFFDjnL%2FPWhJaXguIKRw33KngklPi%2F2Pxcs6jkY892Ul3onqwoZJLWRZeAHIlT8D7fJsAVBaLpUeueS9PtriYPcWykQXkfZ4yVDD%2FJP2WwX5X1NJ2NrQIGXkoXpzQ8JP65GPJfmOTR5G0zXLmGCzlYmzhZPSeE05ceP7UTjfliOhagkWs3CW0gkUXbPZjoZVkY8kQHr8OSHUJZD540vmYtVRBIAvoTo260JrGzU7cvhzaJ5jgm0t9O1u7giu%2FRdY%2BJ48oyCg%2Fd9QyfZ%2FwArJhPBFcwvbzqHikBV0PQg9sgt%2FwCSLpJy9pxniPRiQsgH8rfzYB5ql%2Fkq1hXU4ZigNwjsizftemU3Uf5Jzp%2BRXyloF%2Fpj3FzqYiR3YraxREsyx%2FzTOaL6j%2Fyp8CZKsSUOzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Hv%2BbNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxV2bNmxVg35iPrMEFld6XbR3CRM%2Fro1fUIIHwx%2Fs4U%2FlrqOkz3c1lYQmENFJI8DCgRzIDIg5b1JavTOiajZLf2cls1KsKofBh9k5ydpJPL%2FmzT9ZcBIWY2t5sFoD8Ls5C1%2FwCDkyQ5KyjWdLGi6ml3brSyvKxuo6I58P8AJPVclOiXZurPi5rLAfTf5fsn7sE3drBqFq9vLR4pV2I7dwy%2B%2BF2j6Xf2F5dS3EqNbyhViVa8iV%2Fbfag6%2FZXBdj3KnWURXLzYFYV5n8n3us6ut7btEITGsbc6hl418B8WFd75Ym8svHqVqPrQiCsJSPiikH2jQfsNnScayhwVYBlOxB3BGG1Sby7rf6YgZ5KCZftIBSmHeFllodlp95LeWqlDMKGIfYB7kDDPE%2BSuzZs2BXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F%2F0u%2F5s2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZFfM%2BipLW%2BSJZAf71CtaMPsygf8SyVZRAIIO4PbCDW6pP5YvDd6Wiu1Zbc%2Bi%2B9Tt9mv%2Bxw5xG3tbe1Vlt41jDHkwUUqfE4tgPNXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFXZs2bFX%2F9Pv%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV9%2F5s8AZsVff%2BbPAGbFX3%2FmzwBmxV%2F%2FZ');background-position:center center;border:1px solid #00aa00}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-twourls.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-twourls.out
deleted file mode 100644
index a0a8b21..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-twourls.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');background-position:center center;border:1px solid #00aa00}div.otherdataurl{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC")}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-twourls.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-twourls.out.b
deleted file mode 100644
index a0a8b21..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-base64-twourls.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-night .yui3-dial-ring-vml,.yui3-skin-night .yui3-dial-center-button-vml,.yui3-skin-night .yui3-dial-marker v\:oval.yui3-dial-marker-max-min,.yui3-skin-night v\:oval.yui3-dial-marker-max-min,.yui3-skin-night .yui3-dial-marker-vml,.yui3-skin-night .yui3-dial-handle-vml{background:none;opacity:1}div.base64-singlequotes{width:100px;height:100px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAAAAAAAD5Q7t%2FAAAACXBIWXMAAA3WAAAN1gGQb3mcAAAFrUlEQVRYw%2B2Xz28kRxXHP%2B9Vdc8vj2fG9uIkm2yUeFGEhNCKQwBpj1yRUBAnpJU4ceZP4MxfkBxy2GO45bQXuEGQohUKigQ%2BsBBE1sbYXv8Yz%2FRMd9fjUN09PV5nFZA4kZZa79W3quu9er%2FqNfy%2FPwJgZty%2Ffz%2FZ29vrpmmqhlWTgmFg1UpbfWhYhG6Yq2cFi%2FNrj9nJyWnx%2BPHjeafbMTEzPvjVB9%2B6d%2B%2FezweDwV1BfHubivkC3lZya%2F4m7Np8UZYXhweHH7733rvvC0Kyv7%2F%2F7p07d34qIjyvr63RNb4l4CbsRUrNrq6OfvfRRz%2FxDx486A%2F6g7vXhX9ZIf%2Bp4JomaToZj8d7Pk1SFRFXb1aWodq09l%2F9YZu%2FCWMVL9e%2FaVFVQVUREEG8r3VUEZ4cX%2FHL30%2B5shRtAhFq4wggNb6GrXgVa2K2jYtACIHv7Sz54TfHjWWagBOBy0Xgt%2BcjLtwQxVCpNwURQat1DdYaT7pwdwKDFA6ncHgFizJmSb3WLPDa7PMIVlb2daqZxdONUnAetEojEdBGiXXhTmAjhZ0%2B3N6AlzeEROH1TXiWGf%2BcwmkWZYnAfAkdx1pq%2BhUbT9z3IElUJlVhI4WsgCLUyggi4MQYd4VXNmCYRqXOspV7UoHbQ3hpEMeLAk5mkFYRYlWI%2BHZ6CTDwkKSQqrA7gFeHMF3C6VyYLmFZGiKCE6GrMFsaWb7yuVOh66N1FkUUpBJ3TyvFovToBl9XMbNY2bZ70BsKfW94hbyErosmXpQwy4VgkCjMizjvRRik0EtiLNwagBf465lwOqtkETEn60XT1%2BlTazrpKlR%2BKkooy3Xfb3Wj3wGWJRQhnni7B53q5FqZ4%2FUR7PYhGMxyuMwgWVqTxrYWAwZYQX78J5i8ie9txSAkoOqqQAqk3pBgKLDhlY5XVKPCi3w97YRoKSFaceCgF2hqSXRBPQAIOcXRH8hP%2F0y6%2BRpWLrEyg3SbS9tmzggzJQSLQZo4xoOE8UbCsJfQ7zi6iaIizZ5OBVfXDKPireWC%2BvAYWOBqeszl9Jg03afbH6OqGH%2FBSUrqbrFIXiHoiEDC%2FPySi2d9nnZHJE7opY7dcY%2FdcZej84zpPGfY9Uw2ErYGCf2O4mUVEzELWtqUxZKjf3zK2cURzicMRy%2BzvbuH8ylFPqXIPqNczClKY1mUZFcnSDKkv%2FUNuptbWG%2BLw%2FMh%2FzrYpKBHKV3ONOXzYxeV20z49qhs7gaMWIjqQQiBxVXB4irg05yz4u%2FMpieoJuTLjDJfUJYBzBAFUUHkhMvLvzFPuvQ2JvQ3duh0R%2FjuiDQdIn6MJdvkxTafZUPuaN6UaOo6UNtgNl9weboguwqoA5fCjEusNCzE8LJQFRuNrzpQD%2BrmZNM55%2F4A5z1J2iHtDEg6fZK0j0uHlDrh2N4i3Ptuc%2BH5tjp5HliWQmmOUAhlYe0rqUqWSEOhcZ05AvE1UdColSQJaHWlSUYgJy%2FO2fFfo%2F34piphFOZ4OrvNdL5EJZbcmE8OQzFxIJEGEgIeE1%2FhrjJLxZcOrIVpVC7TW00WmLWyAMDEs%2Bi9wVJDtG17Y21vVmNxLKqIOkQqqoq2qHORmgj9UQcza7mgFm4GmiDjO5C72DSoQ6uPVTW%2BzuFUcQ2teKd4pzhd8b6Nu6jg7vZsrb1rClEIxhu7Q37x47fIy3j%2Fi8iqqlUuEWTFN%2FOrMU3fEEuhUM8FIPDqZgcRIVhsAXxtjGDGS5M%2BP%2Fv%2Bm7yopVrRVsPabsW%2BYG1T%2Fy3KahqSg6cHRb5cTmt5ZXhxQ7nS6yZsVWOajDFbw2JSCSGEIsuyC%2F%2Fo0aPp%2Fv7%2Br9NO5%2F5gMOhJLNn%2FpQLrLfw6tkKKorCDg4NPP%2Fnkjx%2FLOz96h2enzyZvf%2BftH9za2fm6qLrnO9tGk2vY86f%2FMliWZRdPnjz5zcOHDz%2B%2B%2Fifimorzv31C9X718G%2FYrCYSNJa5LgAAACJ6VFh0U29mdHdhcmUAAHjaKy8v18vMyy5OTixI1csvSgcANtgGWBBTylwAAAAASUVORK5CYII%3D');background-position:center center;border:1px solid #00aa00}div.otherdataurl{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kFBQ0WDWwqwjwAAANMSURBVEjHrdZbaFxVFAbgb2aSTG6GTi6mVIwxNxF9qFI0RQnFUqiYamutVutLa2t9EY0oPggFoYgPRR%2FaghYviA%2BiIAYvmBJKoYWiiBCigVTT1FisbUhrEtNkJpc5PuQkjGEmJqkLFmdz2Hv%2Fa%2F3rX3tvlm95oS%2FLokuZtIpbdvAs7KFtL22wjb3V1C41upy2ke1DXC2k%2FBjv1HHXDrbkEamg7lX2P8QTldQ2UtfOB8uiJsHNiB%2Fik0GmO%2BgZIxgnGA59nGCMoJPeQaYP047iBDXZEohkAYof4%2FNyKlZRdR%2F1ASZCnoOMhWkUheMz9F1laJSRZ3gEqVw1ipZQjcoBRrbT3Ez9OJLhZkHG5CD8l8Q47qXhMZp%2FYxhVFaxBLBtQejdtA%2FTtZPMIJnOknI2WSYzicTYN8OtTvICZbECxdr5Pkm6iPL0C3c%2BgkfIJgi%2F4LnP%2FudRKD3K4jf1VJGLEAiuz6VnA4AGam1h7gpNIzSFe66D3NurLKVhJNkHo07N9V9BE3XHOYmyeuirqG1l9mdHgOkDSGd8%2FGWtg9Roa56lrYdchDtRQPLlCkEywKVRScDfrurnwC2diiPTRe47iVtbnLZDxckGCkKYpPM%2FRr3kbyRhsYOtRDiQonFoBSHrBOI18rOeOPvr76YrCeUbf5fTvjOddJ0gQ1uMPku9z6hwjiEZhgOMn%2BaaUeHQJIOkMD7KMA5QQP01HP18hPbfvDTvZPETqb2YiS1BWrozM6jk9SPJJHkZZ5qFagtoaNnbyZg1FE4sUPRdlAQpwkdSjvDZAJ%2FoxNt%2Bw6NlGbQVFl5iKLKKsXCAwyFQZ8S3ciu65ho1lBJ5%2FkZk3OBGjpJWGmVCmsjTkQvA8JHCUU7s5eImevzg%2Fd7BGFhzCARIf8uVN3J5Heh1VM%2BHlko2y%2FHBxF0NJolfo38eDuJJxbf0ro%2FnMurh8hM%2FupH4tdT8zciOFsTC8SAgQoJfRxKzCuvfw0k%2F8MDx7xqUyez%2BS48ESIN7Ky6OUpfAtrxzhx03UR4m0c%2FZF7tnKW2mma4l9yuthTSIZIvxPi6EcpZW0PM0xtOzjo%2Bf4GPfv4r1qNqAUFYs9diJLBC1CIa7FZx8fUlwI22LuNv%2FfLbKMAOftH9TwRXg6%2FiCDAAAAAElFTkSuQmCC")}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-dbquote-font.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-dbquote-font.out
deleted file mode 100644
index 7c4c0ed..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-dbquote-font.out
+++ /dev/null
@@ -1,5 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url("data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA") format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-dbquote-font.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-dbquote-font.out.b
deleted file mode 100644
index 7c4c0ed..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-dbquote-font.out.b
+++ /dev/null
@@ -1,5 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url("data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA") format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-doublequotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-doublequotes.out
deleted file mode 100644
index 8301f10..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-doublequotes.out
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-doublequotes{width:100px;height:100px;background-image:url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0'''%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82");border:1px solid #00aa00}span.othercss{font-family:"Times New Roman";font-weight:inherit}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-doublequotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-doublequotes.out.b
deleted file mode 100644
index 8301f10..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-doublequotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-doublequotes{width:100px;height:100px;background-image:url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0'''%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82");border:1px solid #00aa00}span.othercss{font-family:"Times New Roman";font-weight:inherit}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-noquotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-noquotes.out
deleted file mode 100644
index 8f4bf08..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-noquotes.out
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-noquotes{width:100px;height:100px;background-image:url(data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh\)\)\)%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3\(\(\(%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82);border:1px solid red}span.othercss{font-family:"Times New Roman";font-weight:inherit}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-noquotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-noquotes.out.b
deleted file mode 100644
index 8f4bf08..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-noquotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-noquotes{width:100px;height:100px;background-image:url(data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh\)\)\)%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3\(\(\(%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82);border:1px solid red}span.othercss{font-family:"Times New Roman";font-weight:inherit}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-singlequotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-singlequotes.out
deleted file mode 100644
index 863100e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-singlequotes.out
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-singlequotes{width:100px;height:100px;background-image:url('data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82');border:1px solid #0000aa}span.othercss{font-family:"Times New Roman";font-weight:inherit}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-singlequotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-singlequotes.out.b
deleted file mode 100644
index 863100e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-nonbase64-singlequotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-div.nonbase64-singlequotes{width:100px;height:100px;background-image:url('data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0C%00%00%00%0E%08%03%00%00%00%2Cc%0D%DE%00%00%00%A2PLTEQQQ%FA%FA%FA%FC%FC%FC%EE%EE%EE%A9%A9%A9%E9%E9%E9%0A%0A%0A%0D%0D%0D444PPP%CD%CD%CD%CC%CC%CC%F5%F5%F5UUU%D0%D0%D0\'\'\'%F9%F9%F9%A6%A6%A6%40%40%40FFF%A0%A0%A0%89%89%89%8D%8D%8D%20%20%20%14%14%14%DA%DA%DA%B6%B6%B6%02%02%02%87%87%87%81%81%81%AC%AC%AC%0E%0E%0E111%7D%7D%7D%92%92%92333%B9%B9%B9%BC%BC%BChhh)))%E1%E1%E1%03%03%03%CB%CB%CB%EB%EB%EB%FD%FD%FD%A3%A3%A3(((%04%04%04%CA%CA%CAttt%2C%2C%2C%F4%F4%F4%00%00%00%FF%FF%FF%D6%DE%02%C3%00%00%006tRNS%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%00%A1%8FN1%00%00%00iIDAT%08%D7E%C7E%16%02Q%10%C5%D0j%C3%DD%BDqw%5E%F6%BF5%06%D4%3Fd%94kx%BDf%DE6%FFIA%AB%C8qYj%1F%E3Xk%93%E0%C8JZ%10%90%9E%3A1%60%BBY%85%A8%AE%14%C0%5E%1A6%8E%C5w%02%60%99%C9%FA%9A%03%60%8C%EFz%8C%CE%0EnSu%3F%01%AD%B2%06%04%F0%3CT%FF%B8nk%3F%7C%01%C5z%1B%F9%26%2F%3Az%00%00%00%00IEND%AEB%60%82');border:1px solid #0000aa}span.othercss{font-family:"Times New Roman";font-weight:inherit}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-noquote-multiline-font.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-noquote-multiline-font.out
deleted file mode 100644
index 6b32e33..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-noquote-multiline-font.out
+++ /dev/null
@@ -1,3 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url(data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA) format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-noquote-multiline-font.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-noquote-multiline-font.out.b
deleted file mode 100644
index 6b32e33..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-noquote-multiline-font.out.b
+++ /dev/null
@@ -1,3 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url(data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA) format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-doublequotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-doublequotes.out
deleted file mode 100644
index f9e7600..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-doublequotes.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==")}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-doublequotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-doublequotes.out.b
deleted file mode 100644
index f9e7600..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-doublequotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==")}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-noquotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-noquotes.out
deleted file mode 100644
index 110f9fc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-noquotes.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-noquotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-noquotes.out.b
deleted file mode 100644
index 110f9fc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-noquotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-singlequotes.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-singlequotes.out
deleted file mode 100644
index 1a4e2c6..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-singlequotes.out
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==')}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-singlequotes.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-singlequotes.out.b
deleted file mode 100644
index 1a4e2c6..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-singlequotes.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.yui3-skin-sam .yui3-scrollview-scrollbar{-webkit-transform:translate3d(0,0,0);-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAABCAYAAAD9yd/wAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJJREFUeNpiZGBgSGPAAgACDAAIkABoFyloZQAAAABJRU5ErkJggg==')}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-moz-border-radius-bottomleft:0}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-last{border-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;-webkit-border-radius:0;-webkit-border-bottom-right-radius:3px;-webkit-border-bottom-left-radius:3px;-webkit-transform:translate3d(0,0,0);-moz-border-radius:0;-moz-border-radius-bottomright:3px;-moz-border-radius-bottomleft:3px;-moz-transform:translate(0,0)}.yui3-skin-sam .yui3-scrollview-scrollbar .yui3-scrollview-middle{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-transform:translate3d(0,0,0) scaleY(1);-webkit-transform-origin-y:0;-moz-transform:translate(0,0) scaleY(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-first,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-top-right-radius:0;border-bottom-left-radius:3px;-webkit-border-top-right-radius:0;-webkit-border-bottom-left-radius:3px;-moz-border-radius-topright:0;-moz-border-radius-bottomleft:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-last{border-bottom-left-radius:0;border-top-right-radius:3px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:3px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:3px}.yui3-skin-sam .yui3-scrollview-scrollbar-horiz .yui3-scrollview-middle{-webkit-transform:translate3d(0,0,0) scaleX(1);-webkit-transform-origin:0 0;-moz-transform:translate(0,0) scaleX(1);-moz-transform-origin:0 0}.yui3-skin-sam .yui3-scrollview-scrollbar-vert-basic .yui3-scrollview-child,.yui3-skin-sam .yui3-scrollview-scrollbar-horiz-basic .yui3-scrollview-child{background-color:#aaa;background-image:none}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-yuiapp.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-yuiapp.out
deleted file mode 100644
index ed5e998..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-yuiapp.out
+++ /dev/null
@@ -1 +0,0 @@
-html{background:#fff;color:#555;height:100%}#hd,#bd,#ft{padding:0 50px}#bd{padding-bottom:50px;border-bottom:1px solid #006e9c}#ft{background:transparent no-repeat 0% 100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAeCAMAAAC/pnaKAAAAwFBMVEUkXIAoYYQoYYQoYYQyao02bpE6cpQ6cpREe51LgqNUiqtUiqtUiqtZj7BckrNlmrtlmrtlmrtroMB3qsp3qsp3qsp+sdCHudiHudiHudiHudiPwN+YyOaYyOaYyOaf0O2g0O6n1vOn1vOn1vOn1vOw3vu45f245f245f3B7f7K9f7K9f7K9f7X/v7X/v7p//7p//79//79//4AAABhAGMAbwBzAC4AcwB0AHIAaQBuAGcAcwABAAAAwIwmGwEAAABQQKFUAAAAQHRSTlP///////////////////////////////////////////////////////////////////8A////////////////0pfSbwAAAdtJREFUOI2NlNGqgzAMhv/ClDlQQcFdKOx4McFCKcH3f7eTtLWr07mFiUvbzz9Nk2LZGRH5937qZTiGyEx0Cr5xQpEd6xzNueCGc9SzUmAzP8cplO1zgRRutBAlM9EhZwknWj1LKXkwbOVojTqMEpKZOfeUD3OnR24VWeJf1OOBTnTgw8zZr3LyOlbdrWrdGlpG6Alz4Ni3RcT4Ldm8wHpOo9Yo5CPsdngM6D3HmLlESrgHD+YvrtEuUeLeMf7x7j23GJVgbJoHs0/cI3B7TNkfON5btsEUrvSdY694U0P9nXMp2mDsdbLmY14CN8XDjtzgo9CuqpYnGoMscDUmn08qsbOn/3Lte6rgP1eM7qQ1YMP+yPhiTmx2laDQspytgJI1MbIzZ7yHfj2/hYYtZ1xMM4dc3iTukjgJyKsrUBEH4uqFXNUh3aXxtWjbC3DpH8LRVPJ8MXLoA8fsz51ue73Q+1z7RkTEF0dWa1o5a8001C6ZbGuzh0bSTo9iS8X+C/NWbfTW5uZ9Vu4QaL20Xv3uhgyrZUXVtI2NfS3fbzgP75dNek/YbrL+k/EykecuZf6ZOzDJYsf9PCV3xhFHq7043mw+H1ylW+5Ab5jpADuPM2Z1P3POLWnUG/sHnIDsqkOjlqoAAAAASUVORK5CYII=);padding:0 0 40px 0;margin:50px}#hd,#bd{background:#f9f9f9}body{margin:0;padding:0;font:12px "Helvetica Nueue",Arial,sans-serif}#hd{color:#fff;padding-top:50px;margin:0}#hd,h1,h2,p,.color{margin:auto}h1,h2,a{color:#006e9c}h1,h2{margin-top:0}h4 .title{font-weight:bold;letter-spacing:-2px;font-size:47px;text-shadow:0 1px 0 #369;background:#006e9d;color:#fff;padding:0 10px}h4{display:block;float:right;margin:0 0 0 20px}h4 .what{display:block;padding:4px;text-align:center;font-weight:normal}h4 .version{font-size:11px;color:#ccc}h2{font-size:40px;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-weight:300}h4,p{padding:6px 0 6px}#ft p.fine,#ft p.fine a{color:#999}#ft p.intro{font-size:12px}#bd{font-size:14px;color:#666}#ft p{font-size:11px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-yuiapp.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-yuiapp.out.b
deleted file mode 100644
index ed5e998..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-realdata-yuiapp.out.b
+++ /dev/null
@@ -1 +0,0 @@
-html{background:#fff;color:#555;height:100%}#hd,#bd,#ft{padding:0 50px}#bd{padding-bottom:50px;border-bottom:1px solid #006e9c}#ft{background:transparent no-repeat 0% 100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADcAAAAeCAMAAAC/pnaKAAAAwFBMVEUkXIAoYYQoYYQoYYQyao02bpE6cpQ6cpREe51LgqNUiqtUiqtUiqtZj7BckrNlmrtlmrtlmrtroMB3qsp3qsp3qsp+sdCHudiHudiHudiHudiPwN+YyOaYyOaYyOaf0O2g0O6n1vOn1vOn1vOn1vOw3vu45f245f245f3B7f7K9f7K9f7K9f7X/v7X/v7p//7p//79//79//4AAABhAGMAbwBzAC4AcwB0AHIAaQBuAGcAcwABAAAAwIwmGwEAAABQQKFUAAAAQHRSTlP///////////////////////////////////////////////////////////////////8A////////////////0pfSbwAAAdtJREFUOI2NlNGqgzAMhv/ClDlQQcFdKOx4McFCKcH3f7eTtLWr07mFiUvbzz9Nk2LZGRH5937qZTiGyEx0Cr5xQpEd6xzNueCGc9SzUmAzP8cplO1zgRRutBAlM9EhZwknWj1LKXkwbOVojTqMEpKZOfeUD3OnR24VWeJf1OOBTnTgw8zZr3LyOlbdrWrdGlpG6Alz4Ni3RcT4Ldm8wHpOo9Yo5CPsdngM6D3HmLlESrgHD+YvrtEuUeLeMf7x7j23GJVgbJoHs0/cI3B7TNkfON5btsEUrvSdY694U0P9nXMp2mDsdbLmY14CN8XDjtzgo9CuqpYnGoMscDUmn08qsbOn/3Lte6rgP1eM7qQ1YMP+yPhiTmx2laDQspytgJI1MbIzZ7yHfj2/hYYtZ1xMM4dc3iTukjgJyKsrUBEH4uqFXNUh3aXxtWjbC3DpH8LRVPJ8MXLoA8fsz51ue73Q+1z7RkTEF0dWa1o5a8001C6ZbGuzh0bSTo9iS8X+C/NWbfTW5uZ9Vu4QaL20Xv3uhgyrZUXVtI2NfS3fbzgP75dNek/YbrL+k/EykecuZf6ZOzDJYsf9PCV3xhFHq7043mw+H1ylW+5Ab5jpADuPM2Z1P3POLWnUG/sHnIDsqkOjlqoAAAAASUVORK5CYII=);padding:0 0 40px 0;margin:50px}#hd,#bd{background:#f9f9f9}body{margin:0;padding:0;font:12px "Helvetica Nueue",Arial,sans-serif}#hd{color:#fff;padding-top:50px;margin:0}#hd,h1,h2,p,.color{margin:auto}h1,h2,a{color:#006e9c}h1,h2{margin-top:0}h4 .title{font-weight:bold;letter-spacing:-2px;font-size:47px;text-shadow:0 1px 0 #369;background:#006e9d;color:#fff;padding:0 10px}h4{display:block;float:right;margin:0 0 0 20px}h4 .what{display:block;padding:4px;text-align:center;font-weight:normal}h4 .version{font-size:11px;color:#ccc}h2{font-size:40px;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-weight:300}h4,p{padding:6px 0 6px}#ft p.fine,#ft p.fine a{color:#999}#ft p.intro{font-size:12px}#bd{font-size:14px;color:#666}#ft p{font-size:11px}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-singlequote-font.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-singlequote-font.out
deleted file mode 100644
index fd51d54..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-singlequote-font.out
+++ /dev/null
@@ -1,3 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url('data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA') format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-singlequote-font.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-singlequote-font.out.b
deleted file mode 100644
index fd51d54..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dataurl-singlequote-font.out.b
+++ /dev/null
@@ -1,3 +0,0 @@
-.y-ff-1{font-family:"Foo Bar",Helvetica,Arial;text-rendering:optimizeLegibility}.ua-op .y-ff-1{font-family:Helvetica,Arial}@font-face{font-family:"Foo Bar";src:url('data:font/truetype;base64,gRbIUFAIrsQNGditEWbAUKwAA') format("truetype"),url("http://yuilibrary.com/fonts/foo-bar.svg#webfontse22fewwr") format("svg");font-weight:normal;font-style:normal}
-
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/decimals.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/decimals.out
deleted file mode 100644
index a7ef730..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/decimals.out
+++ /dev/null
@@ -1 +0,0 @@
-::selection{margin:0.6px 0.333pt 1.2em 8.8cm}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/decimals.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/decimals.out.b
deleted file mode 100644
index a7ef730..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/decimals.out.b
+++ /dev/null
@@ -1 +0,0 @@
-::selection{margin:0.6px 0.333pt 1.2em 8.8cm}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dollar-header.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dollar-header.out
deleted file mode 100644
index faf5e12..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dollar-header.out
+++ /dev/null
@@ -1 +0,0 @@
-foo{bar:baz}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dollar-header.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dollar-header.out.b
deleted file mode 100644
index 9308100..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/dollar-header.out.b
+++ /dev/null
@@ -1,3 +0,0 @@
-/*!
-$Header: /temp/dirname/filename.css 3 2/02/08 3:37p JSmith $
-*/foo{bar:baz}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/font-face.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/font-face.out
deleted file mode 100644
index 3a1077c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/font-face.out
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:'gzipper';src:url(yanone.eot);src:local('gzipper'),url(yanone.ttf) format('truetype')}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/font-face.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/font-face.out.b
deleted file mode 100644
index 3a1077c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/font-face.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@font-face{font-family:'gzipper';src:url(yanone.eot);src:local('gzipper'),url(yanone.ttf) format('truetype')}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/ie5mac.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/ie5mac.out
deleted file mode 100644
index f90df41..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/ie5mac.out
+++ /dev/null
@@ -1 +0,0 @@
-/*\*/.selector{color:khaki}/**/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/ie5mac.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/ie5mac.out.b
deleted file mode 100644
index f90df41..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/ie5mac.out.b
+++ /dev/null
@@ -1 +0,0 @@
-/*\*/.selector{color:khaki}/**/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-empty-class.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-empty-class.out
deleted file mode 100644
index 0442012..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-empty-class.out
+++ /dev/null
@@ -1 +0,0 @@
-emptiness{}@import "another.css";empty{}@media print{.noprint{display:none}}@media screen{.breakme{}.printonly{display:none}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-empty-class.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-empty-class.out.b
deleted file mode 100644
index c95413d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-empty-class.out.b
+++ /dev/null
@@ -1 +0,0 @@
-/*! preserved */emptiness{}@import "another.css";empty{}@media print{.noprint{display:none}}@media screen{.breakme{}.printonly{display:none}}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-multi.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-multi.out
deleted file mode 100644
index 648ac7d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-multi.out
+++ /dev/null
@@ -1 +0,0 @@
-@media only all and (max-width:50em),only all and (max-device-width:800px),only all and (max-width:780px){some-css :here}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-multi.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-multi.out.b
deleted file mode 100644
index 648ac7d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-multi.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media only all and (max-width:50em),only all and (max-device-width:800px),only all and (max-width:780px){some-css :here}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-test.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-test.out
deleted file mode 100644
index b6afff5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-test.out
+++ /dev/null
@@ -1 +0,0 @@
-@media screen and (-webkit-min-device-pixel-ratio:0){some-css :here}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-test.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-test.out.b
deleted file mode 100644
index b6afff5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/media-test.out.b
+++ /dev/null
@@ -1 +0,0 @@
-@media screen and (-webkit-min-device-pixel-ratio:0){some-css :here}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/opacity-filter.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/opacity-filter.out
deleted file mode 100644
index cf15296..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/opacity-filter.out
+++ /dev/null
@@ -1 +0,0 @@
-pre{border:solid red;opacity:0.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:PROGID:DXImageTransform.Microsoft.Alpha(Opacity=80);zoom:1}code{-ms-filter:"PROGID:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80)}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/opacity-filter.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/opacity-filter.out.b
deleted file mode 100644
index cf15296..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/opacity-filter.out.b
+++ /dev/null
@@ -1 +0,0 @@
-pre{border:solid red;opacity:0.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:PROGID:DXImageTransform.Microsoft.Alpha(Opacity=80);zoom:1}code{-ms-filter:"PROGID:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80)}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-case.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-case.out
deleted file mode 100644
index 373bcbb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-case.out
+++ /dev/null
@@ -1 +0,0 @@
-#AddAddressForm{padding:0}#AddAddressForm .messageBoxNeutral{padding:0}#FeedbackMailForm{padding:0}#FeedbackMailForm .classe{margin:0}.classes,#FeedBackMailForm{margin:0}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-case.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-case.out.b
deleted file mode 100644
index 373bcbb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-case.out.b
+++ /dev/null
@@ -1 +0,0 @@
-#AddAddressForm{padding:0}#AddAddressForm .messageBoxNeutral{padding:0}#FeedbackMailForm{padding:0}#FeedbackMailForm .classe{margin:0}.classes,#FeedBackMailForm{margin:0}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-new-line.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-new-line.out
deleted file mode 100644
index f2fe1ea..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-new-line.out
+++ /dev/null
@@ -1 +0,0 @@
-#sel-o{content:"on\"ce upon a time";content:'once upon a ti\'me'}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-new-line.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-new-line.out.b
deleted file mode 100644
index f2fe1ea..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-new-line.out.b
+++ /dev/null
@@ -1 +0,0 @@
-#sel-o{content:"on\"ce upon a time";content:'once upon a ti\'me'}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-strings.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-strings.out
deleted file mode 100644
index 3f1d010..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-strings.out
+++ /dev/null
@@ -1 +0,0 @@
-.sele{content:"\"keep  \"    me";something:'\\\' .     . ';else:'empty{}';content:"/* test */"}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-strings.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-strings.out.b
deleted file mode 100644
index 3f1d010..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/preserve-strings.out.b
+++ /dev/null
@@ -1 +0,0 @@
-.sele{content:"\"keep  \"    me";something:'\\\' .     . ';else:'empty{}';content:"/* test */"}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo-first.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo-first.out
deleted file mode 100644
index 687117c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo-first.out
+++ /dev/null
@@ -1 +0,0 @@
-p:first-letter {buh:hum}p:first-line {baa:1}p:first-line ,a,p:first-letter ,b{color:red}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo-first.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo-first.out.b
deleted file mode 100644
index 687117c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo-first.out.b
+++ /dev/null
@@ -1 +0,0 @@
-p:first-letter {buh:hum}p:first-line {baa:1}p:first-line ,a,p:first-letter ,b{color:red}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo.out
deleted file mode 100644
index bb7f8e7..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo.out
+++ /dev/null
@@ -1 +0,0 @@
-p :link{ba:zinga;foo:bar}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo.out.b
deleted file mode 100644
index bb7f8e7..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/pseudo.out.b
+++ /dev/null
@@ -1 +0,0 @@
-p :link{ba:zinga;foo:bar}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/special-comments.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/special-comments.out
deleted file mode 100644
index 97eb92b..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/special-comments.out
+++ /dev/null
@@ -1 +0,0 @@
-#yo{ma:"ma"}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/special-comments.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/special-comments.out.b
deleted file mode 100644
index 92ecbac..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/special-comments.out.b
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!************88****
- Preserving comments
-    as they are
- ********************
- Keep the initial !
- *******************/#yo{ma:"ma"}/*!
-I said
-pre-
-serve! */
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/star-underscore-hacks.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/star-underscore-hacks.out
deleted file mode 100644
index 0a014c3..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/star-underscore-hacks.out
+++ /dev/null
@@ -1 +0,0 @@
-#elementarr{width:1px;*width:3pt;_width:2em}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/star-underscore-hacks.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/star-underscore-hacks.out.b
deleted file mode 100644
index 0a014c3..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/star-underscore-hacks.out.b
+++ /dev/null
@@ -1 +0,0 @@
-#elementarr{width:1px;*width:3pt;_width:2em}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/string-in-comment.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/string-in-comment.out
deleted file mode 100644
index f1f7324..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/string-in-comment.out
+++ /dev/null
@@ -1 +0,0 @@
-a{a:1}b{content:"/**/"}/*\*/c{c:3}/**/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/string-in-comment.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/string-in-comment.out.b
deleted file mode 100644
index 7cdec2d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/string-in-comment.out.b
+++ /dev/null
@@ -1 +0,0 @@
-a{a:1}/*!"preserve" me*/b{content:"/**/"}/*\*/c{c:3}/**/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/webkit-transform.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/webkit-transform.out
deleted file mode 100644
index 3aeed66..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/webkit-transform.out
+++ /dev/null
@@ -1 +0,0 @@
-c{-webkit-transform-origin:0 0}d{-MOZ-TRANSFORM-ORIGIN:0 0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/webkit-transform.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/webkit-transform.out.b
deleted file mode 100644
index 3aeed66..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/webkit-transform.out.b
+++ /dev/null
@@ -1 +0,0 @@
-c{-webkit-transform-origin:0 0}d{-MOZ-TRANSFORM-ORIGIN:0 0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/zeros.out b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/zeros.out
deleted file mode 100644
index 0ef73c4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/zeros.out
+++ /dev/null
@@ -1 +0,0 @@
-a{margin:0px 0pt 0em 0%;_padding-top:0ex;background-position:0 0;padding:0in 0cm 0mm 0pc}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/zeros.out.b b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/zeros.out.b
deleted file mode 100644
index 0ef73c4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/out/zeros.out.b
+++ /dev/null
@@ -1 +0,0 @@
-a{margin:0px 0pt 0em 0%;_padding-top:0ex;background-position:0 0;padding:0in 0cm 0mm 0pc}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-case.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-case.css
deleted file mode 100644
index 06818f0..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-case.css
+++ /dev/null
@@ -1,15 +0,0 @@
-#AddAddressForm {
-    padding: 0;
-}
-#AddAddressForm .messageBoxNeutral {
-    padding: 0;
-}
-#FeedbackMailForm{
-    padding: 0;
-}
-#FeedbackMailForm .classe{
-    margin: 0;
-}
-.classes, #FeedBackMailForm {
-    margin: 0;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-case.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-case.css.min
deleted file mode 100644
index 373bcbb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-case.css.min
+++ /dev/null
@@ -1 +0,0 @@
-#AddAddressForm{padding:0}#AddAddressForm .messageBoxNeutral{padding:0}#FeedbackMailForm{padding:0}#FeedbackMailForm .classe{margin:0}.classes,#FeedBackMailForm{margin:0}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-new-line.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-new-line.css
deleted file mode 100644
index e1f0c92..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-new-line.css
+++ /dev/null
@@ -1,6 +0,0 @@
-#sel-o {
-  content: "on\"ce upon \
-a time";
-  content: 'once upon \
-a ti\'me';
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-new-line.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-new-line.css.min
deleted file mode 100644
index 6ac20b6..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-new-line.css.min
+++ /dev/null
@@ -1,3 +0,0 @@
-#sel-o{content:"on\"ce upon \
-a time";content:'once upon \
-a ti\'me'}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-strings.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-strings.css
deleted file mode 100644
index 9151373..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-strings.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/* preserving strings */
-.sele {
-  content: "\"keep  \"    me";
-  something: '\\\' .     . ';
-  else: 'empty{}';
-  content: "/* test */"; /* <---- this is not a comment, should be be kept */
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-strings.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-strings.css.min
deleted file mode 100644
index 3f1d010..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/preserve-strings.css.min
+++ /dev/null
@@ -1 +0,0 @@
-.sele{content:"\"keep  \"    me";something:'\\\' .     . ';else:'empty{}';content:"/* test */"}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo-first.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo-first.css
deleted file mode 100644
index dbadef4..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo-first.css
+++ /dev/null
@@ -1,16 +0,0 @@
-/* 
-because of IE6 first-letter and first-line
-must be followed by a space
-http://reference.sitepoint.com/css/pseudoelement-firstletter
-Thanks: P.Sorokin comment at http://www.phpied.com/cssmin-js/ 
-*/
-p:first-letter{
-  buh: hum;
-}
-p:first-line{
-  baa: 1;
-}
-
-p:first-line,a,p:first-letter,b{
-  color: red;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo-first.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo-first.css.min
deleted file mode 100644
index 687117c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo-first.css.min
+++ /dev/null
@@ -1 +0,0 @@
-p:first-letter {buh:hum}p:first-line {baa:1}p:first-line ,a,p:first-letter ,b{color:red}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo.css
deleted file mode 100644
index 126a5b1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo.css
+++ /dev/null
@@ -1,4 +0,0 @@
-p :link { 
-  ba:zinga;;;
-  foo: bar;;;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo.css.min
deleted file mode 100644
index bb7f8e7..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/pseudo.css.min
+++ /dev/null
@@ -1 +0,0 @@
-p :link{ba:zinga;foo:bar}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/special-comments.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/special-comments.css
deleted file mode 100644
index 4e184ba..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/special-comments.css
+++ /dev/null
@@ -1,13 +0,0 @@
-/*!************88****
- Preserving comments
-    as they are
- ********************
- Keep the initial !
- *******************/
-#yo {
-    ma: "ma";
-}
-/*!
-I said
-pre-
-serve! */
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/special-comments.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/special-comments.css.min
deleted file mode 100644
index 92ecbac..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/special-comments.css.min
+++ /dev/null
@@ -1,9 +0,0 @@
-/*!************88****
- Preserving comments
-    as they are
- ********************
- Keep the initial !
- *******************/#yo{ma:"ma"}/*!
-I said
-pre-
-serve! */
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/star-underscore-hacks.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/star-underscore-hacks.css
deleted file mode 100644
index 8b6e517..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/star-underscore-hacks.css
+++ /dev/null
@@ -1,5 +0,0 @@
-#elementarr {
-  width: 1px;
-  *width: 3pt;
-  _width: 2em;
-}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/star-underscore-hacks.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/star-underscore-hacks.css.min
deleted file mode 100644
index 0a014c3..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/star-underscore-hacks.css.min
+++ /dev/null
@@ -1 +0,0 @@
-#elementarr{width:1px;*width:3pt;_width:2em}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/string-in-comment.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/string-in-comment.css
deleted file mode 100644
index d94d192..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/string-in-comment.css
+++ /dev/null
@@ -1,8 +0,0 @@
-/* te " st */
-a{a:1}
-/*!"preserve" me*/
-b{content: "/**/"}
-/* quite " quote ' \' \" */
-/* ie mac \*/
-c {c : 3}
-/* end hiding */
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/string-in-comment.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/string-in-comment.css.min
deleted file mode 100644
index 7cdec2d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/string-in-comment.css.min
+++ /dev/null
@@ -1 +0,0 @@
-a{a:1}/*!"preserve" me*/b{content:"/**/"}/*\*/c{c:3}/**/
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/webkit-transform.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/webkit-transform.css
deleted file mode 100644
index 83a50f2..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/webkit-transform.css
+++ /dev/null
@@ -1,2 +0,0 @@
-c {-webkit-transform-origin: 0 0;}
-d {-MOZ-TRANSFORM-ORIGIN: 0 0 }
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/webkit-transform.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/webkit-transform.css.min
deleted file mode 100644
index b640ddf..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/webkit-transform.css.min
+++ /dev/null
@@ -1 +0,0 @@
-c{-webkit-transform-origin:0 0}d{-moz-transform-origin:0 0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/zeros.css b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/zeros.css
deleted file mode 100644
index a5a4da2..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/zeros.css
+++ /dev/null
@@ -1,6 +0,0 @@
-a { 
-  margin: 0px 0pt 0em 0%;
-  _padding-top: 0ex;
-  background-position: 0 0;
-  padding: 0in 0cm 0mm 0pc
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/zeros.css.min b/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/zeros.css.min
deleted file mode 100644
index 14ac7a9..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rcssmin/tests/yui/zeros.css.min
+++ /dev/null
@@ -1 +0,0 @@
-a{margin:0;_padding-top:0;background-position:0 0;padding:0}
\ No newline at end of file
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/LICENSE b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/LICENSE
deleted file mode 100644
index 261eeb9..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/MANIFEST b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/MANIFEST
deleted file mode 100644
index 474e6f6..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/MANIFEST
+++ /dev/null
@@ -1,57 +0,0 @@
-LICENSE
-MANIFEST
-PKG-INFO
-README.rst
-_setup/__init__.py
-_setup/include/cext.h
-_setup/py2/__init__.py
-_setup/py2/commands.py
-_setup/py2/data.py
-_setup/py2/dist.py
-_setup/py2/ext.py
-_setup/py2/setup.py
-_setup/py2/shell.py
-_setup/py2/util.py
-_setup/py3/__init__.py
-_setup/py3/commands.py
-_setup/py3/data.py
-_setup/py3/dist.py
-_setup/py3/ext.py
-_setup/py3/setup.py
-_setup/py3/shell.py
-_setup/py3/util.py
-bench
-bench.sh
-bench/DateTimeShortcuts.js
-bench/__init__.py
-bench/apiviewer.js
-bench/bootstrap.js
-bench/jquery-1.7.1.js
-bench/jsmin.c
-bench/jsmin.py
-bench/jsmin_2_0_9.py
-bench/knockout-2.0.0.js
-bench/main.py
-bench/markermanager.js
-bench/write.py
-docs/BENCHMARKS
-docs/CHANGES
-docs/CLASSIFIERS
-docs/DESCRIPTION
-docs/PROVIDES
-docs/SUMMARY
-docs/apidoc/api-objects.txt
-docs/apidoc/crarr.png
-docs/apidoc/epydoc.css
-docs/apidoc/epydoc.js
-docs/apidoc/help.html
-docs/apidoc/identifier-index.html
-docs/apidoc/index.html
-docs/apidoc/module-tree.html
-docs/apidoc/redirect.html
-docs/apidoc/rjsmin-module.html
-docs/apidoc/rjsmin-pysrc.html
-package.cfg
-rjsmin.c
-rjsmin.py
-setup.py
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/PKG-INFO b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/PKG-INFO
deleted file mode 100644
index 983bc4f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/PKG-INFO
+++ /dev/null
@@ -1,304 +0,0 @@
-Metadata-Version: 1.1
-Name: rjsmin
-Version: 1.0.12
-Summary: Javascript Minifier
-Home-page: http://opensource.perlig.de/rjsmin/
-Author: André Malo
-Author-email: nd@perlig.de
-License:                                  Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-Download-URL: http://storage.perlig.de/rjsmin/
-Description: =====================
-         Javascript Minifier
-        =====================
-        
-        rJSmin is a javascript minifier written in python.
-        
-        The minifier is based on the semantics of `jsmin.c by Douglas Crockford`_\.
-        
-        The module is a re-implementation aiming for speed, so it can be used at
-        runtime (rather than during a preprocessing step). Usually it produces the
-        same results as the original ``jsmin.c``. It differs in the following ways:
-        
-        - there is no error detection: unterminated string, regex and comment
-          literals are treated as regular javascript code and minified as such.
-        - Control characters inside string and regex literals are left untouched; they
-          are not converted to spaces (nor to \n)
-        - Newline characters are not allowed inside string and regex literals, except
-          for line continuations in string literals (ECMA-5).
-        - "return /regex/" is recognized correctly.
-        - Line terminators after regex literals are handled more sensibly
-        - "+ +" and "- -" sequences are not collapsed to '++' or '--'
-        - Newlines before ! operators are removed more sensibly
-        - Comments starting with an exclamation mark (``!``) can be kept optionally
-        - rJSmin does not handle streams, but only complete strings. (However, the
-          module provides a "streamy" interface).
-        
-        Since most parts of the logic are handled by the regex engine it's way faster
-        than the original python port of ``jsmin.c`` by Baruch Even. The speed factor
-        varies between about 6 and 55 depending on input and python version (it gets
-        faster the more compressed the input already is).  Compared to the
-        speed-refactored python port by Dave St.Germain the performance gain is less
-        dramatic but still between 3 and 50 (for huge inputs)). See the
-        docs/BENCHMARKS file for details.
-        
-        rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.
-        
-        Both python 2 (>=2.4) and python 3 are supported.
-        
-        .. _jsmin.c by Douglas Crockford: http://www.crockford.com/javascript/jsmin.c
-        
-        
-        Copyright and License
-        ~~~~~~~~~~~~~~~~~~~~~
-        
-        Copyright 2011 - 2015
-        André Malo or his licensors, as applicable.
-        
-        The whole package (except for the files in the bench/ directory) is
-        distributed under the Apache License Version 2.0. You'll find a copy in the
-        root directory of the distribution or online at:
-        <http://www.apache.org/licenses/LICENSE-2.0>.
-        
-        
-        Bugs
-        ~~~~
-        
-        No bugs, of course. ;-)
-        But if you've found one or have an idea how to improve rjsmin, feel free
-        to send a pull request on `github <https://github.com/ndparker/rjsmin>`_
-        or send a mail to <rjsmin-bugs@perlig.de>.
-        
-        
-        Author Information
-        ~~~~~~~~~~~~~~~~~~
-        
-        André "nd" Malo <nd perlig.de>
-        GPG: 0x8103A37E
-        
-        
-            If God intended people to be naked, they would be born that way.
-            -- Oscar Wilde
-        
-        .. vim:tw=72 syntax=rest
-Keywords: Javascript,Minimization
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Environment :: Web Environment
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved
-Classifier: License :: OSI Approved :: Apache License, Version 2.0
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: C
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: Implementation :: CPython
-Classifier: Programming Language :: Python :: Implementation :: Jython
-Classifier: Programming Language :: Python :: Implementation :: PyPy
-Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
-Classifier: Topic :: Software Development :: Libraries
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Text Processing
-Classifier: Topic :: Text Processing :: Filters
-Classifier: Topic :: Utilities
-Provides: rjsmin (1.0)
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/README.chromium b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/README.chromium
deleted file mode 100644
index 256518f..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/README.chromium
+++ /dev/null
@@ -1,18 +0,0 @@
-Short Name: rJSmin
-URL: http://opensource.perlig.de/rjsmin/
-Version: 1.0.12
-License: Apache 2.0
-License File: NOT_SHIPPED
-Security Critical: no
-
-Description:
-rJSmin is a javascript minifier written in python.
-The minifier is based on the semantics of jsmin.c by Douglas Crockford.
-The module is a re-implementation aiming for speed, so it can be used at runtime (rather than during a preprocessing step). Usually it produces the same results as the original jsmin.c.
-
-Modifications made:
- - Removed the bench.sh since the file doesn't have the licensing info and
-   caused license checker to fail.
- - Added a small hack to not clobber template strings. (Not a complete solution
-   since it won't handle nesting. E.g. `${'`'} foo` would probably cause
-   problems).
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/README.rst b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/README.rst
deleted file mode 100644
index 27ae5a1..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/README.rst
+++ /dev/null
@@ -1,142 +0,0 @@
-.. -*- coding: utf-8 -*-
-
-===========================================
- rJSmin - A Javascript Minifier For Python
-===========================================
-
-TABLE OF CONTENTS
------------------
-
-1. Introduction
-2. Copyright and License
-3. System Requirements
-4. Installation
-5. Documentation
-6. Bugs
-7. Author Information
-
-
-INTRODUCTION
-------------
-
-rJSmin is a javascript minifier written in python.
-
-The minifier is based on the semantics of `jsmin.c by Douglas Crockford`_\.
-
-The module is a re-implementation aiming for speed, so it can be used at
-runtime (rather than during a preprocessing step). Usually it produces the
-same results as the original ``jsmin.c``. It differs in the following ways:
-
-- there is no error detection: unterminated string, regex and comment
-  literals are treated as regular javascript code and minified as such.
-- Control characters inside string and regex literals are left untouched; they
-  are not converted to spaces (nor to \\n)
-- Newline characters are not allowed inside string and regex literals, except
-  for line continuations in string literals (ECMA-5).
-- "return /regex/" is recognized correctly.
-- Line terminators after regex literals are handled more sensibly
-- "+ +" and "- -" sequences are not collapsed to '++' or '--'
-- Newlines before ! operators are removed more sensibly
-- Comments starting with an exclamation mark (``!``) can be kept optionally
-- rJSmin does not handle streams, but only complete strings. (However, the
-  module provides a "streamy" interface).
-
-Since most parts of the logic are handled by the regex engine it's way faster
-than the original python port of ``jsmin.c`` by Baruch Even. The speed factor
-varies between about 6 and 55 depending on input and python version (it gets
-faster the more compressed the input already is).  Compared to the
-speed-refactored python port by Dave St.Germain the performance gain is less
-dramatic but still between 3 and 50 (for huge inputs). See the docs/BENCHMARKS
-file for details.
-
-rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.
-
-.. _jsmin.c by Douglas Crockford: http://www.crockford.com/javascript/jsmin.c
-
-
-COPYRIGHT AND LICENSE
----------------------
-
-Copyright 2011 - 2015
-André Malo or his licensors, as applicable.
-
-The whole package (except for the files in the bench/ directory)
-is distributed under the Apache License Version 2.0. You'll find a copy in the
-root directory of the distribution or online at:
-<http://www.apache.org/licenses/LICENSE-2.0>.
-
-
-SYSTEM REQUIREMENTS
--------------------
-
-Both python 2 (>=2.4) and python 3 are supported.
-
-
-INSTALLATION
-------------
-
-Using pip
-~~~~~~~~~
-
-$ pip install rjsmin
-
-
-Using distutils
-~~~~~~~~~~~~~~~
-
-$ python setup.py install
-
-The following extra options to the install command may be of interest:
-
-  --without-c-extensions  Don't install C extensions
-  --without-docs          Do not install documentation files
-
-
-Drop-in
-~~~~~~~
-
-rJSmin effectively consists of two files: rjsmin.py and rjsmin.c, the
-latter being entirely optional. So, for simple integration you can just
-copy rjsmin.py into your project and use it.
-
-
-DOCUMENTATION
--------------
-
-A generated API documentation is available in the docs/apidoc/ directory.
-But you can just look into the module. It provides a simple function,
-called jsmin which takes the script as a string and returns the minified
-script as a string.
-
-The module additionally provides a "streamy" interface similar to the one
-jsmin.c provides:
-
-$ python -mrjsmin <script >minified
-
-It takes two options:
-
-  -b  Keep bang-comments (Comments starting with an exclamation mark)
-  -p  Force using the python implementation (not the C implementation)
-
-The latest documentation is also available online at
-<http://opensource.perlig.de/rjsmin/>.
-
-
-BUGS
-----
-
-No bugs, of course. ;-)
-But if you've found one or have an idea how to improve rjsmin, feel free
-to send a pull request on `github <https://github.com/ndparker/rjsmin>`_
-or send a mail to <rjsmin-bugs@perlig.de>.
-
-
-AUTHOR INFORMATION
-------------------
-
-André "nd" Malo <nd@perlig.de>
-GPG: 0x8103A37E
-
-
-  If God intended people to be naked, they would be born that way.
-                                                   -- Oscar Wilde
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/DateTimeShortcuts.js b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/DateTimeShortcuts.js
deleted file mode 100644
index d347d6d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/DateTimeShortcuts.js
+++ /dev/null
@@ -1,388 +0,0 @@
-/*! Taken from django release 1.8.5
-
-Copyright (c) Django Software Foundation and individual contributors.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-    1. Redistributions of source code must retain the above copyright notice,
-       this list of conditions and the following disclaimer.
-
-    2. Redistributions in binary form must reproduce the above copyright
-       notice, this list of conditions and the following disclaimer in the
-       documentation and/or other materials provided with the distribution.
-
-    3. Neither the name of Django nor the names of its contributors may be used
-       to endorse or promote products derived from this software without
-       specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-// Inserts shortcut buttons after all of the following:
-//     <input type="text" class="vDateField">
-//     <input type="text" class="vTimeField">
-
-var DateTimeShortcuts = {
-    calendars: [],
-    calendarInputs: [],
-    clockInputs: [],
-    dismissClockFunc: [],
-    dismissCalendarFunc: [],
-    calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
-    calendarDivName2: 'calendarin',  // name of <div> that contains calendar
-    calendarLinkName: 'calendarlink',// name of the link that is used to toggle
-    clockDivName: 'clockbox',        // name of clock <div> that gets toggled
-    clockLinkName: 'clocklink',      // name of the link that is used to toggle
-    shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
-    timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
-    timezoneOffset: 0,
-    admin_media_prefix: '',
-    init: function() {
-        // Get admin_media_prefix by grabbing it off the window object. It's
-        // set in the admin/base.html template, so if it's not there, someone's
-        // overridden the template. In that case, we'll set a clearly-invalid
-        // value in the hopes that someone will examine HTTP requests and see it.
-        if (window.__admin_media_prefix__ != undefined) {
-            DateTimeShortcuts.admin_media_prefix = window.__admin_media_prefix__;
-        } else {
-            DateTimeShortcuts.admin_media_prefix = '/missing-admin-media-prefix/';
-        }
-
-        if (window.__admin_utc_offset__ != undefined) {
-            var serverOffset = window.__admin_utc_offset__;
-            var localOffset = new Date().getTimezoneOffset() * -60;
-            DateTimeShortcuts.timezoneOffset = localOffset - serverOffset;
-        }
-
-        var inputs = document.getElementsByTagName('input');
-        for (i=0; i<inputs.length; i++) {
-            var inp = inputs[i];
-            if (inp.getAttribute('type') == 'text' && inp.className.match(/vTimeField/)) {
-                DateTimeShortcuts.addClock(inp);
-                DateTimeShortcuts.addTimezoneWarning(inp);
-            }
-            else if (inp.getAttribute('type') == 'text' && inp.className.match(/vDateField/)) {
-                DateTimeShortcuts.addCalendar(inp);
-                DateTimeShortcuts.addTimezoneWarning(inp);
-            }
-        }
-    },
-    // Return the current time while accounting for the server timezone.
-    now: function() {
-        if (window.__admin_utc_offset__ != undefined) {
-            var serverOffset = window.__admin_utc_offset__;
-            var localNow = new Date();
-            var localOffset = localNow.getTimezoneOffset() * -60;
-            localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset));
-            return localNow;
-        } else {
-            return new Date();
-        }
-    },
-    // Add a warning when the time zone in the browser and backend do not match.
-    addTimezoneWarning: function(inp) {
-        var $ = django.jQuery;
-        var warningClass = DateTimeShortcuts.timezoneWarningClass;
-        var timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600;
-
-        // Only warn if there is a time zone mismatch.
-        if (!timezoneOffset)
-            return;
-
-        // Check if warning is already there.
-        if ($(inp).siblings('.' + warningClass).length)
-            return;
-
-        var message;
-        if (timezoneOffset > 0) {
-            message = ngettext(
-                'Note: You are %s hour ahead of server time.',
-                'Note: You are %s hours ahead of server time.',
-                timezoneOffset
-            );
-        }
-        else {
-            timezoneOffset *= -1
-            message = ngettext(
-                'Note: You are %s hour behind server time.',
-                'Note: You are %s hours behind server time.',
-                timezoneOffset
-            );
-        }
-        message = interpolate(message, [timezoneOffset]);
-
-        var $warning = $('<span>');
-        $warning.attr('class', warningClass);
-        $warning.text(message);
-
-        $(inp).parent()
-            .append($('<br>'))
-            .append($warning)
-    },
-    // Add clock widget to a given field
-    addClock: function(inp) {
-        var num = DateTimeShortcuts.clockInputs.length;
-        DateTimeShortcuts.clockInputs[num] = inp;
-        DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; };
-
-        // Shortcut links (clock icon and "Now" link)
-        var shortcuts_span = document.createElement('span');
-        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
-        inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
-        var now_link = document.createElement('a');
-        now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", -1);");
-        now_link.appendChild(document.createTextNode(gettext('Now')));
-        var clock_link = document.createElement('a');
-        clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');');
-        clock_link.id = DateTimeShortcuts.clockLinkName + num;
-        quickElement('img', clock_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/icon_clock.gif', 'alt', gettext('Clock'));
-        shortcuts_span.appendChild(document.createTextNode('\240'));
-        shortcuts_span.appendChild(now_link);
-        shortcuts_span.appendChild(document.createTextNode('\240|\240'));
-        shortcuts_span.appendChild(clock_link);
-
-        // Create clock link div
-        //
-        // Markup looks like:
-        // <div id="clockbox1" class="clockbox module">
-        //     <h2>Choose a time</h2>
-        //     <ul class="timelist">
-        //         <li><a href="#">Now</a></li>
-        //         <li><a href="#">Midnight</a></li>
-        //         <li><a href="#">6 a.m.</a></li>
-        //         <li><a href="#">Noon</a></li>
-        //     </ul>
-        //     <p class="calendar-cancel"><a href="#">Cancel</a></p>
-        // </div>
-
-        var clock_box = document.createElement('div');
-        clock_box.style.display = 'none';
-        clock_box.style.position = 'absolute';
-        clock_box.className = 'clockbox module';
-        clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num);
-        document.body.appendChild(clock_box);
-        addEvent(clock_box, 'click', cancelEventPropagation);
-
-        quickElement('h2', clock_box, gettext('Choose a time'));
-        var time_list = quickElement('ul', clock_box);
-        time_list.className = 'timelist';
-        quickElement("a", quickElement("li", time_list), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", -1);");
-        quickElement("a", quickElement("li", time_list), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", 0);");
-        quickElement("a", quickElement("li", time_list), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", 6);");
-        quickElement("a", quickElement("li", time_list), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", 12);");
-
-        var cancel_p = quickElement('p', clock_box);
-        cancel_p.className = 'calendar-cancel';
-        quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');');
-        django.jQuery(document).bind('keyup', function(event) {
-            if (event.which == 27) {
-                // ESC key closes popup
-                DateTimeShortcuts.dismissClock(num);
-                event.preventDefault();
-            }
-        });
-    },
-    openClock: function(num) {
-        var clock_box = document.getElementById(DateTimeShortcuts.clockDivName+num)
-        var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName+num)
-
-        // Recalculate the clockbox position
-        // is it left-to-right or right-to-left layout ?
-        if (getStyle(document.body,'direction')!='rtl') {
-            clock_box.style.left = findPosX(clock_link) + 17 + 'px';
-        }
-        else {
-            // since style's width is in em, it'd be tough to calculate
-            // px value of it. let's use an estimated px for now
-            // TODO: IE returns wrong value for findPosX when in rtl mode
-            //       (it returns as it was left aligned), needs to be fixed.
-            clock_box.style.left = findPosX(clock_link) - 110 + 'px';
-        }
-        clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px';
-
-        // Show the clock box
-        clock_box.style.display = 'block';
-        addEvent(document, 'click', DateTimeShortcuts.dismissClockFunc[num]);
-    },
-    dismissClock: function(num) {
-       document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none';
-       removeEvent(document, 'click', DateTimeShortcuts.dismissClockFunc[num]);
-    },
-    handleClockQuicklink: function(num, val) {
-       var d;
-       if (val == -1) {
-           d = DateTimeShortcuts.now();
-       }
-       else {
-           d = new Date(1970, 1, 1, val, 0, 0, 0)
-       }
-       DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]);
-       DateTimeShortcuts.clockInputs[num].focus();
-       DateTimeShortcuts.dismissClock(num);
-    },
-    // Add calendar widget to a given field.
-    addCalendar: function(inp) {
-        var num = DateTimeShortcuts.calendars.length;
-
-        DateTimeShortcuts.calendarInputs[num] = inp;
-        DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; };
-
-        // Shortcut links (calendar icon and "Today" link)
-        var shortcuts_span = document.createElement('span');
-        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
-        inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
-        var today_link = document.createElement('a');
-        today_link.setAttribute('href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
-        today_link.appendChild(document.createTextNode(gettext('Today')));
-        var cal_link = document.createElement('a');
-        cal_link.setAttribute('href', 'javascript:DateTimeShortcuts.openCalendar(' + num + ');');
-        cal_link.id = DateTimeShortcuts.calendarLinkName + num;
-        quickElement('img', cal_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/icon_calendar.gif', 'alt', gettext('Calendar'));
-        shortcuts_span.appendChild(document.createTextNode('\240'));
-        shortcuts_span.appendChild(today_link);
-        shortcuts_span.appendChild(document.createTextNode('\240|\240'));
-        shortcuts_span.appendChild(cal_link);
-
-        // Create calendarbox div.
-        //
-        // Markup looks like:
-        //
-        // <div id="calendarbox3" class="calendarbox module">
-        //     <h2>
-        //           <a href="#" class="link-previous">&lsaquo;</a>
-        //           <a href="#" class="link-next">&rsaquo;</a> February 2003
-        //     </h2>
-        //     <div class="calendar" id="calendarin3">
-        //         <!-- (cal) -->
-        //     </div>
-        //     <div class="calendar-shortcuts">
-        //          <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a>
-        //     </div>
-        //     <p class="calendar-cancel"><a href="#">Cancel</a></p>
-        // </div>
-        var cal_box = document.createElement('div');
-        cal_box.style.display = 'none';
-        cal_box.style.position = 'absolute';
-        cal_box.className = 'calendarbox module';
-        cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num);
-        document.body.appendChild(cal_box);
-        addEvent(cal_box, 'click', cancelEventPropagation);
-
-        // next-prev links
-        var cal_nav = quickElement('div', cal_box);
-        var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');');
-        cal_nav_prev.className = 'calendarnav-previous';
-        var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');');
-        cal_nav_next.className = 'calendarnav-next';
-
-        // main box
-        var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num);
-        cal_main.className = 'calendar';
-        DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num));
-        DateTimeShortcuts.calendars[num].drawCurrent();
-
-        // calendar shortcuts
-        var shortcuts = quickElement('div', cal_box);
-        shortcuts.className = 'calendar-shortcuts';
-        quickElement('a', shortcuts, gettext('Yesterday'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', -1);');
-        shortcuts.appendChild(document.createTextNode('\240|\240'));
-        quickElement('a', shortcuts, gettext('Today'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
-        shortcuts.appendChild(document.createTextNode('\240|\240'));
-        quickElement('a', shortcuts, gettext('Tomorrow'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', +1);');
-
-        // cancel bar
-        var cancel_p = quickElement('p', cal_box);
-        cancel_p.className = 'calendar-cancel';
-        quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');');
-        django.jQuery(document).bind('keyup', function(event) {
-            if (event.which == 27) {
-                // ESC key closes popup
-                DateTimeShortcuts.dismissCalendar(num);
-                event.preventDefault();
-            }
-        });
-    },
-    openCalendar: function(num) {
-        var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1+num)
-        var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName+num)
-        var inp = DateTimeShortcuts.calendarInputs[num];
-
-        // Determine if the current value in the input has a valid date.
-        // If so, draw the calendar with that date's year and month.
-        if (inp.value) {
-            var format = get_format('DATE_INPUT_FORMATS')[0];
-            var selected = inp.value.strptime(format);
-            var year = selected.getFullYear();
-            var month = selected.getMonth() + 1;
-            var re = /\d{4}/
-            if (re.test(year.toString()) && month >= 1 && month <= 12) {
-                DateTimeShortcuts.calendars[num].drawDate(month, year, selected);
-            }
-        }
-
-        // Recalculate the clockbox position
-        // is it left-to-right or right-to-left layout ?
-        if (getStyle(document.body,'direction')!='rtl') {
-            cal_box.style.left = findPosX(cal_link) + 17 + 'px';
-        }
-        else {
-            // since style's width is in em, it'd be tough to calculate
-            // px value of it. let's use an estimated px for now
-            // TODO: IE returns wrong value for findPosX when in rtl mode
-            //       (it returns as it was left aligned), needs to be fixed.
-            cal_box.style.left = findPosX(cal_link) - 180 + 'px';
-        }
-        cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px';
-
-        cal_box.style.display = 'block';
-        addEvent(document, 'click', DateTimeShortcuts.dismissCalendarFunc[num]);
-    },
-    dismissCalendar: function(num) {
-        document.getElementById(DateTimeShortcuts.calendarDivName1+num).style.display = 'none';
-        removeEvent(document, 'click', DateTimeShortcuts.dismissCalendarFunc[num]);
-    },
-    drawPrev: function(num) {
-        DateTimeShortcuts.calendars[num].drawPreviousMonth();
-    },
-    drawNext: function(num) {
-        DateTimeShortcuts.calendars[num].drawNextMonth();
-    },
-    handleCalendarCallback: function(num) {
-        var format = get_format('DATE_INPUT_FORMATS')[0];
-        // the format needs to be escaped a little
-        format = format.replace('\\', '\\\\');
-        format = format.replace('\r', '\\r');
-        format = format.replace('\n', '\\n');
-        format = format.replace('\t', '\\t');
-        format = format.replace("'", "\\'");
-        return ["function(y, m, d) { DateTimeShortcuts.calendarInputs[",
-               num,
-               "].value = new Date(y, m-1, d).strftime('",
-               format,
-               "');DateTimeShortcuts.calendarInputs[",
-               num,
-               "].focus();document.getElementById(DateTimeShortcuts.calendarDivName1+",
-               num,
-               ").style.display='none';}"].join('');
-    },
-    handleCalendarQuickLink: function(num, offset) {
-       var d = DateTimeShortcuts.now();
-       d.setDate(d.getDate() + offset)
-       DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]);
-       DateTimeShortcuts.calendarInputs[num].focus();
-       DateTimeShortcuts.dismissCalendar(num);
-    }
-}
-
-addEvent(window, 'load', DateTimeShortcuts.init);
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/__init__.py b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/__init__.py
deleted file mode 100644
index a9b2847..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: ascii -*-
-r"""
-=================================
- Benchmark jsmin implementations
-=================================
-
-Benchmark jsmin implementations.
-
-:Copyright:
-
- Copyright 2011 - 2015
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-if __doc__:
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/apiviewer.js b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/apiviewer.js
deleted file mode 100644
index e70ebf8..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/apiviewer.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-This file is part of the qooxdoo framework.
-
-qooxdoo is dual-licensed under the GNU Lesser General Public License (LGPL) and the Eclipse Public License (EPL). As a recipient of qooxdoo, you may choose which license to receive the code under. 
-*/
-
-(function(){
-
-if (!window.qx) window.qx = {};
-
-qx.$$start = new Date();
-  
-if (!window.qxsettings) qxsettings = {};
-var settings = {"qx.application":"apiviewer.Application","qx.nativeScrollBars":true,"qx.theme":"apiviewer.Theme","qx.version":"1.3"};
-for (var k in settings) qxsettings[k] = settings[k];
-
-if (!window.qxvariants) qxvariants = {};
-var variants = {"qx.aspects":"off","qx.debug":"off"};
-for (var k in variants) qxvariants[k] = variants[k];
-
-if (!qx.$$libraries) qx.$$libraries = {};
-var libinfo = {"__out__":{"sourceUri":"script"},"apiviewer":{"resourceUri":"resource","sourceUri":"script","version":"trunk"},"qx":{"resourceUri":"resource","sourceUri":"script","version":"1.3"}};
-for (var k in libinfo) qx.$$libraries[k] = libinfo[k];
-
-qx.$$resources = {};
-qx.$$translations = {};
-qx.$$locales = {};
-qx.$$packageData = {};
-
-qx.$$loader = {
-  parts : {"boot":[0]},
-  uris : [["__out__:apiviewer.js"]],
-  urisBefore : [],
-  packageHashes : {"0":"9b3309ed13dc"},
-  boot : "boot",
-  closureParts : {},
-  bootIsInline : true,
-  addNoCacheParam : true,
-  
-  decodeUris : function(compressedUris)
-  {
-    var libs = qx.$$libraries;
-    var uris = [];
-    for (var i=0; i<compressedUris.length; i++)
-    {
-      var uri = compressedUris[i].split(":");
-      var euri;
-      if (uri.length==2 && uri[0] in libs) {
-        var prefix = libs[uri[0]].sourceUri;
-        euri = prefix + "/" + uri[1];
-      } else {
-        euri = compressedUris[i];
-      }
-      if (qx.$$loader.addNoCacheParam) {
-        euri += "?nocache=" + Math.random();
-      }
-      
-      uris.push(euri);
-    }
-    return uris;      
-  }
-};  
-
-function loadScript(uri, callback) {
-  var elem = document.createElement("script");
-  elem.charset = "utf-8";
-  elem.src = uri;
-  elem.onreadystatechange = elem.onload = function()
-  {
-    if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")
-    {
-      elem.onreadystatechange = elem.onload = null;
-      callback();
-    }
-  };
-  var head = document.getElementsByTagName("head")[0];
-  head.appendChild(elem);
-}
-
-var isWebkit = /AppleWebKit\/([^ ]+)/.test(navigator.userAgent);
-
-function loadScriptList(list, callback) {
-  if (list.length == 0) {
-    callback();
-    return;
-  }
-  loadScript(list.shift(), function() {
-    if (isWebkit) {
-      // force asynchronous load
-      // Safari fails with an "maximum recursion depth exceeded" error if it is
-      // called sync.      
-      window.setTimeout(function() {
-        loadScriptList(list, callback);
-      }, 0);
-    } else {
-      loadScriptList(list, callback);
-    }
-  });
-}
-
-var fireContentLoadedEvent = function() {
-  qx.$$domReady = true;
-  document.removeEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
-};
-if (document.addEventListener) {
-  document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
-}
-
-qx.$$loader.importPackageData = function (dataMap) {
-  if (dataMap["resources"]){
-    var resMap = dataMap["resources"];
-    for (var k in resMap) qx.$$resources[k] = resMap[k];
-  }
-  if (dataMap["locales"]){
-    var locMap = dataMap["locales"];
-    var qxlocs = qx.$$locales;
-    for (var lang in locMap){
-      if (!qxlocs[lang]) qxlocs[lang] = locMap[lang];
-      else 
-        for (var k in locMap[lang]) qxlocs[lang][k] = locMap[lang][k];
-    }
-  }
-  if (dataMap["translations"]){
-    var trMap   = dataMap["translations"];
-    var qxtrans = qx.$$translations;
-    for (var lang in trMap){
-      if (!qxtrans[lang]) qxtrans[lang] = trMap[lang];
-      else 
-        for (var k in trMap[lang]) qxtrans[lang][k] = trMap[lang][k];
-    }
-  }
-}
-
-qx.$$loader.signalStartup = function () 
-{
-  qx.$$loader.scriptLoaded = true;
-  if (window.qx && qx.event && qx.event.handler && qx.event.handler.Application) {
-    qx.event.handler.Application.onScriptLoaded();
-    qx.$$loader.applicationHandlerReady = true; 
-  } else {
-    qx.$$loader.applicationHandlerReady = false;
-  }
-}
-
-qx.$$loader.init = function(){
-  var l=qx.$$loader;
-  if (l.urisBefore.length>0){
-    loadScriptList(l.urisBefore, function(){
-      l.initUris();
-    });
-  } else {
-    l.initUris();
-  }
-}
-
-qx.$$loader.initUris = function(){
-  var l=qx.$$loader;
-  var bootPackageHash=l.packageHashes[l.parts[l.boot][0]];
-  if (l.bootIsInline){
-    l.importPackageData(qx.$$packageData[bootPackageHash]);
-    l.signalStartup();
-  } else {
-    loadScriptList(l.decodeUris(l.uris[l.parts[l.boot]]), function(){
-      // Opera needs this extra time to parse the scripts
-      window.setTimeout(function(){
-        l.importPackageData(qx.$$packageData[bootPackageHash] || {});
-        l.signalStartup();
-      }, 0);
-    });
-  }
-}
-})();
-
-qx.$$packageData['9b3309ed13dc']={"locales":{"C":{"alternateQuotationEnd":"’","alternateQuotationStart":"‘","cldr_am":"AM","cldr_date_format_full":"EEEE, MMMM d, y","cldr_date_format_long":"MMMM d, y","cldr_date_format_medium":"MMM d, y","cldr_date_format_short":"M/d/yy","cldr_date_time_format_EEEd":"d EEE","cldr_date_time_format_Hm":"H:mm","cldr_date_time_format_Hms":"H:mm:ss","cldr_date_time_format_M":"L","cldr_date_time_format_MEd":"E, M/d","cldr_date_time_format_MMM":"LLL","cldr_date_time_format_MMMEd":"E, MMM d","cldr_date_time_format_MMMMEd":"E, MMMM d","cldr_date_time_format_MMMMd":"MMMM d","cldr_date_time_format_MMMd":"MMM d","cldr_date_time_format_Md":"M/d","cldr_date_time_format_d":"d","cldr_date_time_format_hm":"h:mm a","cldr_date_time_format_ms":"mm:ss","cldr_date_time_format_y":"y","cldr_date_time_format_yM":"M/yyyy","cldr_date_time_format_yMEd":"EEE, M/d/yyyy","cldr_date_time_format_yMMM":"MMM y","cldr_date_time_format_yMMMEd":"EEE, MMM d, y","cldr_date_time_format_yMMMM":"MMMM y","cldr_date_time_format_yQ":"Q yyyy","cldr_date_time_format_yQQQ":"QQQ y","cldr_day_format_abbreviated_fri":"Fri","cldr_day_format_abbreviated_mon":"Mon","cldr_day_format_abbreviated_sat":"Sat","cldr_day_format_abbreviated_sun":"Sun","cldr_day_format_abbreviated_thu":"Thu","cldr_day_format_abbreviated_tue":"Tue","cldr_day_format_abbreviated_wed":"Wed","cldr_day_format_narrow_fri":"F","cldr_day_format_narrow_mon":"M","cldr_day_format_narrow_sat":"S","cldr_day_format_narrow_sun":"S","cldr_day_format_narrow_thu":"T","cldr_day_format_narrow_tue":"T","cldr_day_format_narrow_wed":"W","cldr_day_format_wide_fri":"Friday","cldr_day_format_wide_mon":"Monday","cldr_day_format_wide_sat":"Saturday","cldr_day_format_wide_sun":"Sunday","cldr_day_format_wide_thu":"Thursday","cldr_day_format_wide_tue":"Tuesday","cldr_day_format_wide_wed":"Wednesday","cldr_day_stand-alone_abbreviated_fri":"Fri","cldr_day_stand-alone_abbreviated_mon":"Mon","cldr_day_stand-alone_abbreviated_sat":"Sat","cldr_day_stand-alone_abbreviated_sun":"Sun","cldr_day_stand-alone_abbreviated_thu":"Thu","cldr_day_stand-alone_abbreviated_tue":"Tue","cldr_day_stand-alone_abbreviated_wed":"Wed","cldr_day_stand-alone_narrow_fri":"F","cldr_day_stand-alone_narrow_mon":"M","cldr_day_stand-alone_narrow_sat":"S","cldr_day_stand-alone_narrow_sun":"S","cldr_day_stand-alone_narrow_thu":"T","cldr_day_stand-alone_narrow_tue":"T","cldr_day_stand-alone_narrow_wed":"W","cldr_day_stand-alone_wide_fri":"Friday","cldr_day_stand-alone_wide_mon":"Monday","cldr_day_stand-alone_wide_sat":"Saturday","cldr_day_stand-alone_wide_sun":"Sunday","cldr_day_stand-alone_wide_thu":"Thursday","cldr_day_stand-alone_wide_tue":"Tuesday","cldr_day_stand-alone_wide_wed":"Wednesday","cldr_month_format_abbreviated_1":"Jan","cldr_month_format_abbreviated_10":"Oct","cldr_month_format_abbreviated_11":"Nov","cldr_month_format_abbreviated_12":"Dec","cldr_month_format_abbreviated_2":"Feb","cldr_month_format_abbreviated_3":"Mar","cldr_month_format_abbreviated_4":"Apr","cldr_month_format_abbreviated_5":"May","cldr_month_format_abbreviated_6":"Jun","cldr_month_format_abbreviated_7":"Jul","cldr_month_format_abbreviated_8":"Aug","cldr_month_format_abbreviated_9":"Sep","cldr_month_format_wide_1":"January","cldr_month_format_wide_10":"October","cldr_month_format_wide_11":"November","cldr_month_format_wide_12":"December","cldr_month_format_wide_2":"February","cldr_month_format_wide_3":"March","cldr_month_format_wide_4":"April","cldr_month_format_wide_5":"May","cldr_month_format_wide_6":"June","cldr_month_format_wide_7":"July","cldr_month_format_wide_8":"August","cldr_month_format_wide_9":"September","cldr_month_stand-alone_narrow_1":"J","cldr_month_stand-alone_narrow_10":"O","cldr_month_stand-alone_narrow_11":"N","cldr_month_stand-alone_narrow_12":"D","cldr_month_stand-alone_narrow_2":"F","cldr_month_stand-alone_narrow_3":"M","cldr_month_stand-alone_narrow_4":"A","cldr_month_stand-alone_narrow_5":"M","cldr_month_stand-alone_narrow_6":"J","cldr_month_stand-alone_narrow_7":"J","cldr_month_stand-alone_narrow_8":"A","cldr_month_stand-alone_narrow_9":"S","cldr_number_decimal_separator":".","cldr_number_group_separator":",","cldr_number_percent_format":"#,##0%","cldr_pm":"PM","cldr_time_format_full":"h:mm:ss a zzzz","cldr_time_format_long":"h:mm:ss a z","cldr_time_format_medium":"h:mm:ss a","cldr_time_format_short":"h:mm a","quotationEnd":"”","quotationStart":"“"}},"resources":{"apiviewer/css/apiviewer.css":"apiviewer","apiviewer/image/blank.gif":[1,1,"gif","apiviewer"],"apiviewer/image/childcontrol18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-540],"apiviewer/image/class18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-324],"apiviewer/image/class_abstract18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-486],"apiviewer/image/class_abstract_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-306],"apiviewer/image/class_singleton18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-612],"apiviewer/image/class_singleton_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-252],"apiviewer/image/class_static18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-234],"apiviewer/image/class_static_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-144],"apiviewer/image/class_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-342],"apiviewer/image/close.gif":[17,13,"gif","apiviewer"],"apiviewer/image/colorstrip.gif":[192,10,"gif","apiviewer"],"apiviewer/image/constant18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-504],"apiviewer/image/constructor18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-558],"apiviewer/image/cross.gif":[18,18,"gif","apiviewer"],"apiviewer/image/event18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-198],"apiviewer/image/information18.png":[18,18,"png","apiviewer"],"apiviewer/image/interface18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-432],"apiviewer/image/interface_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-450],"apiviewer/image/method_private18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-270],"apiviewer/image/method_protected18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-216],"apiviewer/image/method_public18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-126],"apiviewer/image/method_public_inherited18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-18],"apiviewer/image/mixin18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-162],"apiviewer/image/mixin_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-108],"apiviewer/image/nextlevel.gif":[18,18,"gif","apiviewer"],"apiviewer/image/open.gif":[17,13,"gif","apiviewer"],"apiviewer/image/overlay_abstract18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,0],"apiviewer/image/overlay_constructor18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-36],"apiviewer/image/overlay_error18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-414],"apiviewer/image/overlay_inherited18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-576],"apiviewer/image/overlay_mixin18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-180],"apiviewer/image/overlay_overridden18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-288],"apiviewer/image/overlay_static18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-378],"apiviewer/image/overlay_themeable18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-360],"apiviewer/image/overlay_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-594],"apiviewer/image/package18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-54],"apiviewer/image/package_warning18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-90],"apiviewer/image/property18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-522],"apiviewer/image/property_private18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-72],"apiviewer/image/property_protected18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-468],"apiviewer/image/property_themeable18.gif":[18,18,"gif","apiviewer","apiviewer/imagesCombined/symbols.gif",0,-396],"apiviewer/image/search18.png":[18,18,"png","apiviewer"],"apiviewer/image/vline.gif":[18,18,"gif","apiviewer"],"apiviewer/imagesCombined/symbols.gif":[18,630,"gif","apiviewer"],"qx/decoration/Modern/app-header.png":[110,20,"png","qx"],"qx/decoration/Modern/arrows-combined.png":[87,8,"png","qx"],"qx/decoration/Modern/arrows/down-invert.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-74,0],"qx/decoration/Modern/arrows/down-small-invert.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-69,0],"qx/decoration/Modern/arrows/down-small.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-49,0],"qx/decoration/Modern/arrows/down.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-20,0],"qx/decoration/Modern/arrows/forward.png":[10,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-59,0],"qx/decoration/Modern/arrows/left-invert.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",0,0],"qx/decoration/Modern/arrows/left.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-44,0],"qx/decoration/Modern/arrows/rewind.png":[10,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-10,0],"qx/decoration/Modern/arrows/right-invert.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-5,0],"qx/decoration/Modern/arrows/right.png":[5,8,"png","qx","qx/decoration/Modern/arrows-combined.png",-54,0],"qx/decoration/Modern/arrows/up-invert.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-28,0],"qx/decoration/Modern/arrows/up-small.png":[5,3,"png","qx","qx/decoration/Modern/arrows-combined.png",-82,0],"qx/decoration/Modern/arrows/up.png":[8,5,"png","qx","qx/decoration/Modern/arrows-combined.png",-36,0],"qx/decoration/Modern/button-lr-combined.png":[72,52,"png","qx"],"qx/decoration/Modern/button-tb-combined.png":[4,216,"png","qx"],"qx/decoration/Modern/checkradio-combined.png":[504,14,"png","qx"],"qx/decoration/Modern/colorselector-combined.gif":[46,11,"gif","qx"],"qx/decoration/Modern/colorselector/brightness-field.png":[19,256,"png","qx"],"qx/decoration/Modern/colorselector/brightness-handle.gif":[35,11,"gif","qx","qx/decoration/Modern/colorselector-combined.gif",0,0],"qx/decoration/Modern/colorselector/huesaturation-field.jpg":[256,256,"jpeg","qx"],"qx/decoration/Modern/colorselector/huesaturation-handle.gif":[11,11,"gif","qx","qx/decoration/Modern/colorselector-combined.gif",-35,0],"qx/decoration/Modern/cursors-combined.gif":[71,20,"gif","qx"],"qx/decoration/Modern/cursors/alias.gif":[19,15,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-52,0],"qx/decoration/Modern/cursors/copy.gif":[19,15,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-33,0],"qx/decoration/Modern/cursors/move.gif":[13,9,"gif","qx","qx/decoration/Modern/cursors-combined.gif",-20,0],"qx/decoration/Modern/cursors/nodrop.gif":[20,20,"gif","qx","qx/decoration/Modern/cursors-combined.gif",0,0],"qx/decoration/Modern/form/button-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-72],"qx/decoration/Modern/form/button-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-204],"qx/decoration/Modern/form/button-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-188],"qx/decoration/Modern/form/button-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-36],"qx/decoration/Modern/form/button-checked-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-84],"qx/decoration/Modern/form/button-checked-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-184],"qx/decoration/Modern/form/button-checked-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-156],"qx/decoration/Modern/form/button-checked-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-208],"qx/decoration/Modern/form/button-checked-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-160],"qx/decoration/Modern/form/button-checked-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-checked-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-40,0],"qx/decoration/Modern/form/button-checked-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-32,0],"qx/decoration/Modern/form/button-checked-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-28],"qx/decoration/Modern/form/button-checked-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-24],"qx/decoration/Modern/form/button-checked-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-48],"qx/decoration/Modern/form/button-checked-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-checked-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-16,0],"qx/decoration/Modern/form/button-checked-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-60,0],"qx/decoration/Modern/form/button-checked-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-140],"qx/decoration/Modern/form/button-checked-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-56],"qx/decoration/Modern/form/button-checked-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-112],"qx/decoration/Modern/form/button-checked.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-disabled-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-40],"qx/decoration/Modern/form/button-disabled-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-136],"qx/decoration/Modern/form/button-disabled-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-16],"qx/decoration/Modern/form/button-disabled-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-disabled-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-68,0],"qx/decoration/Modern/form/button-disabled-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-4,0],"qx/decoration/Modern/form/button-disabled-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-116],"qx/decoration/Modern/form/button-disabled-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-168],"qx/decoration/Modern/form/button-disabled-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-60],"qx/decoration/Modern/form/button-disabled.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-68],"qx/decoration/Modern/form/button-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-144],"qx/decoration/Modern/form/button-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-8],"qx/decoration/Modern/form/button-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-24,0],"qx/decoration/Modern/form/button-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-44,0],"qx/decoration/Modern/form/button-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-192],"qx/decoration/Modern/form/button-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-148],"qx/decoration/Modern/form/button-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-104],"qx/decoration/Modern/form/button-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-hovered-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-108],"qx/decoration/Modern/form/button-hovered-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-32],"qx/decoration/Modern/form/button-hovered-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-128],"qx/decoration/Modern/form/button-hovered-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-hovered-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-20,0],"qx/decoration/Modern/form/button-hovered-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-48,0],"qx/decoration/Modern/form/button-hovered-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-44],"qx/decoration/Modern/form/button-hovered-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-76],"qx/decoration/Modern/form/button-hovered-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-88],"qx/decoration/Modern/form/button-hovered.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-56,0],"qx/decoration/Modern/form/button-preselected-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-124],"qx/decoration/Modern/form/button-preselected-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-176],"qx/decoration/Modern/form/button-preselected-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-200],"qx/decoration/Modern/form/button-preselected-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-preselected-focused-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,0],"qx/decoration/Modern/form/button-preselected-focused-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-4],"qx/decoration/Modern/form/button-preselected-focused-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-152],"qx/decoration/Modern/form/button-preselected-focused-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-preselected-focused-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-28,0],"qx/decoration/Modern/form/button-preselected-focused-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-36,0],"qx/decoration/Modern/form/button-preselected-focused-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-196],"qx/decoration/Modern/form/button-preselected-focused-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-164],"qx/decoration/Modern/form/button-preselected-focused-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-212],"qx/decoration/Modern/form/button-preselected-focused.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-preselected-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-8,0],"qx/decoration/Modern/form/button-preselected-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-64,0],"qx/decoration/Modern/form/button-preselected-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-96],"qx/decoration/Modern/form/button-preselected-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-80],"qx/decoration/Modern/form/button-preselected-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-132],"qx/decoration/Modern/form/button-preselected.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-pressed-b.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-12],"qx/decoration/Modern/form/button-pressed-bl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-52],"qx/decoration/Modern/form/button-pressed-br.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-20],"qx/decoration/Modern/form/button-pressed-c.png":[40,52,"png","qx"],"qx/decoration/Modern/form/button-pressed-l.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-52,0],"qx/decoration/Modern/form/button-pressed-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",-12,0],"qx/decoration/Modern/form/button-pressed-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-100],"qx/decoration/Modern/form/button-pressed-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-172],"qx/decoration/Modern/form/button-pressed-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-64],"qx/decoration/Modern/form/button-pressed.png":[80,60,"png","qx"],"qx/decoration/Modern/form/button-r.png":[4,52,"png","qx","qx/decoration/Modern/button-lr-combined.png",0,0],"qx/decoration/Modern/form/button-t.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-92],"qx/decoration/Modern/form/button-tl.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-120],"qx/decoration/Modern/form/button-tr.png":[4,4,"png","qx","qx/decoration/Modern/button-tb-combined.png",0,-180],"qx/decoration/Modern/form/button.png":[80,60,"png","qx"],"qx/decoration/Modern/form/checkbox-checked-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-126,0],"qx/decoration/Modern/form/checkbox-checked-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-322,0],"qx/decoration/Modern/form/checkbox-checked-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-294,0],"qx/decoration/Modern/form/checkbox-checked-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-364,0],"qx/decoration/Modern/form/checkbox-checked-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-490,0],"qx/decoration/Modern/form/checkbox-checked-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-224,0],"qx/decoration/Modern/form/checkbox-checked-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-378,0],"qx/decoration/Modern/form/checkbox-checked-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-84,0],"qx/decoration/Modern/form/checkbox-checked.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-182,0],"qx/decoration/Modern/form/checkbox-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-42,0],"qx/decoration/Modern/form/checkbox-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-392,0],"qx/decoration/Modern/form/checkbox-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-210,0],"qx/decoration/Modern/form/checkbox-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-14,0],"qx/decoration/Modern/form/checkbox-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-238,0],"qx/decoration/Modern/form/checkbox-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-462,0],"qx/decoration/Modern/form/checkbox-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-112,0],"qx/decoration/Modern/form/checkbox-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-448,0],"qx/decoration/Modern/form/checkbox-undetermined-disabled.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-focused-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-focused.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-hovered-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-hovered.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined-invalid.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox-undetermined.png":[14,14,"png","qx"],"qx/decoration/Modern/form/checkbox.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-140,0],"qx/decoration/Modern/form/input-focused.png":[40,12,"png","qx"],"qx/decoration/Modern/form/input.png":[84,12,"png","qx"],"qx/decoration/Modern/form/radiobutton-checked-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-196,0],"qx/decoration/Modern/form/radiobutton-checked-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-168,0],"qx/decoration/Modern/form/radiobutton-checked-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-98,0],"qx/decoration/Modern/form/radiobutton-checked-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-308,0],"qx/decoration/Modern/form/radiobutton-checked-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-406,0],"qx/decoration/Modern/form/radiobutton-checked-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-28,0],"qx/decoration/Modern/form/radiobutton-checked-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-350,0],"qx/decoration/Modern/form/radiobutton-checked-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-266,0],"qx/decoration/Modern/form/radiobutton-checked.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-252,0],"qx/decoration/Modern/form/radiobutton-disabled.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-336,0],"qx/decoration/Modern/form/radiobutton-focused-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-476,0],"qx/decoration/Modern/form/radiobutton-focused.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-420,0],"qx/decoration/Modern/form/radiobutton-hovered-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-56,0],"qx/decoration/Modern/form/radiobutton-hovered.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",0,0],"qx/decoration/Modern/form/radiobutton-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-154,0],"qx/decoration/Modern/form/radiobutton-pressed-invalid.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-434,0],"qx/decoration/Modern/form/radiobutton-pressed.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-280,0],"qx/decoration/Modern/form/radiobutton.png":[14,14,"png","qx","qx/decoration/Modern/checkradio-combined.png",-70,0],"qx/decoration/Modern/form/tooltip-error-arrow.png":[11,14,"png","qx"],"qx/decoration/Modern/form/tooltip-error-b.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-30],"qx/decoration/Modern/form/tooltip-error-bl.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-24],"qx/decoration/Modern/form/tooltip-error-br.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,0],"qx/decoration/Modern/form/tooltip-error-c.png":[40,18,"png","qx"],"qx/decoration/Modern/form/tooltip-error-l.png":[6,18,"png","qx","qx/decoration/Modern/tooltip-error-lr-combined.png",-6,0],"qx/decoration/Modern/form/tooltip-error-r.png":[6,18,"png","qx","qx/decoration/Modern/tooltip-error-lr-combined.png",0,0],"qx/decoration/Modern/form/tooltip-error-t.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-6],"qx/decoration/Modern/form/tooltip-error-tl.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-18],"qx/decoration/Modern/form/tooltip-error-tr.png":[6,6,"png","qx","qx/decoration/Modern/tooltip-error-tb-combined.png",0,-12],"qx/decoration/Modern/form/tooltip-error.png":[127,30,"png","qx"],"qx/decoration/Modern/group-item.png":[110,20,"png","qx"],"qx/decoration/Modern/groupbox-lr-combined.png":[8,51,"png","qx"],"qx/decoration/Modern/groupbox-tb-combined.png":[4,24,"png","qx"],"qx/decoration/Modern/groupbox/groupbox-b.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-12],"qx/decoration/Modern/groupbox/groupbox-bl.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-16],"qx/decoration/Modern/groupbox/groupbox-br.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-8],"qx/decoration/Modern/groupbox/groupbox-c.png":[40,51,"png","qx"],"qx/decoration/Modern/groupbox/groupbox-l.png":[4,51,"png","qx","qx/decoration/Modern/groupbox-lr-combined.png",-4,0],"qx/decoration/Modern/groupbox/groupbox-r.png":[4,51,"png","qx","qx/decoration/Modern/groupbox-lr-combined.png",0,0],"qx/decoration/Modern/groupbox/groupbox-t.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-4],"qx/decoration/Modern/groupbox/groupbox-tl.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,0],"qx/decoration/Modern/groupbox/groupbox-tr.png":[4,4,"png","qx","qx/decoration/Modern/groupbox-tb-combined.png",0,-20],"qx/decoration/Modern/groupbox/groupbox.png":[255,59,"png","qx"],"qx/decoration/Modern/menu-background-combined.png":[80,49,"png","qx"],"qx/decoration/Modern/menu-checkradio-combined.gif":[64,7,"gif","qx"],"qx/decoration/Modern/menu/background.png":[40,49,"png","qx","qx/decoration/Modern/menu-background-combined.png",-40,0],"qx/decoration/Modern/menu/bar-background.png":[40,20,"png","qx","qx/decoration/Modern/menu-background-combined.png",0,0],"qx/decoration/Modern/menu/checkbox-invert.gif":[16,7,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-16,0],"qx/decoration/Modern/menu/checkbox.gif":[16,7,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-48,0],"qx/decoration/Modern/menu/radiobutton-invert.gif":[16,5,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",-32,0],"qx/decoration/Modern/menu/radiobutton.gif":[16,5,"gif","qx","qx/decoration/Modern/menu-checkradio-combined.gif",0,0],"qx/decoration/Modern/pane-lr-combined.png":[12,238,"png","qx"],"qx/decoration/Modern/pane-tb-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/pane/pane-b.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-30],"qx/decoration/Modern/pane/pane-bl.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-18],"qx/decoration/Modern/pane/pane-br.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-12],"qx/decoration/Modern/pane/pane-c.png":[40,238,"png","qx"],"qx/decoration/Modern/pane/pane-l.png":[6,238,"png","qx","qx/decoration/Modern/pane-lr-combined.png",0,0],"qx/decoration/Modern/pane/pane-r.png":[6,238,"png","qx","qx/decoration/Modern/pane-lr-combined.png",-6,0],"qx/decoration/Modern/pane/pane-t.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,0],"qx/decoration/Modern/pane/pane-tl.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-24],"qx/decoration/Modern/pane/pane-tr.png":[6,6,"png","qx","qx/decoration/Modern/pane-tb-combined.png",0,-6],"qx/decoration/Modern/pane/pane.png":[185,250,"png","qx"],"qx/decoration/Modern/scrollbar-combined.png":[54,12,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-horizontal.png":[76,15,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-pressed-horizontal.png":[19,10,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-pressed-vertical.png":[10,19,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-bg-vertical.png":[15,76,"png","qx"],"qx/decoration/Modern/scrollbar/scrollbar-button-bg-horizontal.png":[12,10,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-34,0],"qx/decoration/Modern/scrollbar/scrollbar-button-bg-vertical.png":[10,12,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-6,0],"qx/decoration/Modern/scrollbar/scrollbar-down.png":[6,4,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-28,0],"qx/decoration/Modern/scrollbar/scrollbar-left.png":[4,6,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-50,0],"qx/decoration/Modern/scrollbar/scrollbar-right.png":[4,6,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-46,0],"qx/decoration/Modern/scrollbar/scrollbar-up.png":[6,4,"png","qx","qx/decoration/Modern/scrollbar-combined.png",0,0],"qx/decoration/Modern/scrollbar/slider-knob-background.png":[12,10,"png","qx","qx/decoration/Modern/scrollbar-combined.png",-16,0],"qx/decoration/Modern/selection.png":[110,20,"png","qx"],"qx/decoration/Modern/shadow-lr-combined.png":[30,382,"png","qx"],"qx/decoration/Modern/shadow-small-lr-combined.png":[10,136,"png","qx"],"qx/decoration/Modern/shadow-small-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/shadow-tb-combined.png":[15,90,"png","qx"],"qx/decoration/Modern/shadow/shadow-b.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-30],"qx/decoration/Modern/shadow/shadow-bl.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-15],"qx/decoration/Modern/shadow/shadow-br.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-45],"qx/decoration/Modern/shadow/shadow-c.png":[40,382,"png","qx"],"qx/decoration/Modern/shadow/shadow-l.png":[15,382,"png","qx","qx/decoration/Modern/shadow-lr-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-r.png":[15,382,"png","qx","qx/decoration/Modern/shadow-lr-combined.png",-15,0],"qx/decoration/Modern/shadow/shadow-small-b.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-20],"qx/decoration/Modern/shadow/shadow-small-bl.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-15],"qx/decoration/Modern/shadow/shadow-small-br.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-10],"qx/decoration/Modern/shadow/shadow-small-c.png":[40,136,"png","qx"],"qx/decoration/Modern/shadow/shadow-small-l.png":[5,136,"png","qx","qx/decoration/Modern/shadow-small-lr-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-small-r.png":[5,136,"png","qx","qx/decoration/Modern/shadow-small-lr-combined.png",-5,0],"qx/decoration/Modern/shadow/shadow-small-t.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-5],"qx/decoration/Modern/shadow/shadow-small-tl.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,0],"qx/decoration/Modern/shadow/shadow-small-tr.png":[5,5,"png","qx","qx/decoration/Modern/shadow-small-tb-combined.png",0,-25],"qx/decoration/Modern/shadow/shadow-small.png":[114,146,"png","qx"],"qx/decoration/Modern/shadow/shadow-t.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-60],"qx/decoration/Modern/shadow/shadow-tl.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,-75],"qx/decoration/Modern/shadow/shadow-tr.png":[15,15,"png","qx","qx/decoration/Modern/shadow-tb-combined.png",0,0],"qx/decoration/Modern/shadow/shadow.png":[381,412,"png","qx"],"qx/decoration/Modern/splitpane-knobs-combined.png":[8,9,"png","qx"],"qx/decoration/Modern/splitpane/knob-horizontal.png":[1,8,"png","qx","qx/decoration/Modern/splitpane-knobs-combined.png",0,-1],"qx/decoration/Modern/splitpane/knob-vertical.png":[8,1,"png","qx","qx/decoration/Modern/splitpane-knobs-combined.png",0,0],"qx/decoration/Modern/table-combined.png":[94,18,"png","qx"],"qx/decoration/Modern/table/ascending.png":[8,5,"png","qx","qx/decoration/Modern/table-combined.png",0,0],"qx/decoration/Modern/table/boolean-false.png":[14,14,"png","qx","qx/decoration/Modern/table-combined.png",-80,0],"qx/decoration/Modern/table/boolean-true.png":[14,14,"png","qx","qx/decoration/Modern/table-combined.png",-26,0],"qx/decoration/Modern/table/descending.png":[8,5,"png","qx","qx/decoration/Modern/table-combined.png",-18,0],"qx/decoration/Modern/table/header-cell.png":[40,18,"png","qx","qx/decoration/Modern/table-combined.png",-40,0],"qx/decoration/Modern/table/select-column-order.png":[10,9,"png","qx","qx/decoration/Modern/table-combined.png",-8,0],"qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png":[10,14,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png":[6,15,"png","qx"],"qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-left-active-lr-combined.png":[10,37,"png","qx"],"qx/decoration/Modern/tabview-button-left-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png":[6,39,"png","qx"],"qx/decoration/Modern/tabview-button-left-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-right-active-lr-combined.png":[10,37,"png","qx"],"qx/decoration/Modern/tabview-button-right-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png":[6,39,"png","qx"],"qx/decoration/Modern/tabview-button-right-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-top-active-lr-combined.png":[10,12,"png","qx"],"qx/decoration/Modern/tabview-button-top-active-tb-combined.png":[5,30,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-b-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png":[6,15,"png","qx"],"qx/decoration/Modern/tabview-button-top-inactive-t-combined.png":[3,9,"png","qx"],"qx/decoration/Modern/tabview-pane-lr-combined.png":[60,2,"png","qx"],"qx/decoration/Modern/tabview-pane-tb-combined.png":[30,180,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-bottom-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-bottom-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-bottom-active-c.png":[40,14,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-active-l.png":[5,14,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-active-r.png":[5,14,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-bottom-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-bottom-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-bottom-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-bottom-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-active.png":[49,24,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-c.png":[40,15,"png","qx"],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-l.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-r.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-bottom-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-bottom-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-bottom-inactive.png":[45,21,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-left-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-left-active-c.png":[40,37,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-active-l.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-left-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-active-r.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-left-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-left-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-left-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-left-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-left-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-left-active.png":[22,47,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-left-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-left-inactive-c.png":[40,39,"png","qx"],"qx/decoration/Modern/tabview/tab-button-left-inactive-l.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-r.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-left-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-left-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-left-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-left-inactive.png":[20,45,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-right-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-right-active-c.png":[40,37,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-active-l.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-right-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-active-r.png":[5,37,"png","qx","qx/decoration/Modern/tabview-button-right-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-right-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-right-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-right-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-right-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-right-active.png":[22,47,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-right-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-right-inactive-c.png":[40,39,"png","qx"],"qx/decoration/Modern/tabview/tab-button-right-inactive-l.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-r.png":[3,39,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-right-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-right-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-right-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-right-inactive.png":[20,45,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-active-b.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-20],"qx/decoration/Modern/tabview/tab-button-top-active-bl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-15],"qx/decoration/Modern/tabview/tab-button-top-active-br.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-10],"qx/decoration/Modern/tabview/tab-button-top-active-c.png":[40,14,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-active-l.png":[5,12,"png","qx","qx/decoration/Modern/tabview-button-top-active-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-active-r.png":[5,12,"png","qx","qx/decoration/Modern/tabview-button-top-active-lr-combined.png",-5,0],"qx/decoration/Modern/tabview/tab-button-top-active-t.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-active-tl.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-25],"qx/decoration/Modern/tabview/tab-button-top-active-tr.png":[5,5,"png","qx","qx/decoration/Modern/tabview-button-top-active-tb-combined.png",0,-5],"qx/decoration/Modern/tabview/tab-button-top-active.png":[48,22,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-inactive-b.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-top-inactive-bl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-top-inactive-br.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-b-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-c.png":[40,15,"png","qx"],"qx/decoration/Modern/tabview/tab-button-top-inactive-l.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-r.png":[3,15,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-lr-combined.png",-3,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-t.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,-3],"qx/decoration/Modern/tabview/tab-button-top-inactive-tl.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,0],"qx/decoration/Modern/tabview/tab-button-top-inactive-tr.png":[3,3,"png","qx","qx/decoration/Modern/tabview-button-top-inactive-t-combined.png",0,-6],"qx/decoration/Modern/tabview/tab-button-top-inactive.png":[45,21,"png","qx"],"qx/decoration/Modern/tabview/tabview-pane-b.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-60],"qx/decoration/Modern/tabview/tabview-pane-bl.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,0],"qx/decoration/Modern/tabview/tabview-pane-br.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-120],"qx/decoration/Modern/tabview/tabview-pane-c.png":[40,120,"png","qx"],"qx/decoration/Modern/tabview/tabview-pane-l.png":[30,2,"png","qx","qx/decoration/Modern/tabview-pane-lr-combined.png",0,0],"qx/decoration/Modern/tabview/tabview-pane-r.png":[30,2,"png","qx","qx/decoration/Modern/tabview-pane-lr-combined.png",-30,0],"qx/decoration/Modern/tabview/tabview-pane-t.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-150],"qx/decoration/Modern/tabview/tabview-pane-tl.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-30],"qx/decoration/Modern/tabview/tabview-pane-tr.png":[30,30,"png","qx","qx/decoration/Modern/tabview-pane-tb-combined.png",0,-90],"qx/decoration/Modern/tabview/tabview-pane.png":[185,250,"png","qx"],"qx/decoration/Modern/toolbar-combined.png":[80,130,"png","qx"],"qx/decoration/Modern/toolbar/toolbar-gradient-blue.png":[40,130,"png","qx","qx/decoration/Modern/toolbar-combined.png",-40,0],"qx/decoration/Modern/toolbar/toolbar-gradient.png":[40,130,"png","qx","qx/decoration/Modern/toolbar-combined.png",0,0],"qx/decoration/Modern/toolbar/toolbar-handle-knob.gif":[1,8,"gif","qx"],"qx/decoration/Modern/toolbar/toolbar-part.gif":[7,1,"gif","qx"],"qx/decoration/Modern/tooltip-error-lr-combined.png":[12,18,"png","qx"],"qx/decoration/Modern/tooltip-error-tb-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/tree-combined.png":[32,8,"png","qx"],"qx/decoration/Modern/tree/closed-selected.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-24,0],"qx/decoration/Modern/tree/closed.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-16,0],"qx/decoration/Modern/tree/open-selected.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",-8,0],"qx/decoration/Modern/tree/open.png":[8,8,"png","qx","qx/decoration/Modern/tree-combined.png",0,0],"qx/decoration/Modern/window-captionbar-buttons-combined.png":[108,9,"png","qx"],"qx/decoration/Modern/window-captionbar-lr-active-combined.png":[12,9,"png","qx"],"qx/decoration/Modern/window-captionbar-lr-inactive-combined.png":[12,9,"png","qx"],"qx/decoration/Modern/window-captionbar-tb-active-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/window-captionbar-tb-inactive-combined.png":[6,36,"png","qx"],"qx/decoration/Modern/window-statusbar-lr-combined.png":[8,7,"png","qx"],"qx/decoration/Modern/window-statusbar-tb-combined.png":[4,24,"png","qx"],"qx/decoration/Modern/window/captionbar-active-b.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-18],"qx/decoration/Modern/window/captionbar-active-bl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-24],"qx/decoration/Modern/window/captionbar-active-br.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-12],"qx/decoration/Modern/window/captionbar-active-c.png":[40,9,"png","qx"],"qx/decoration/Modern/window/captionbar-active-l.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-active-combined.png",-6,0],"qx/decoration/Modern/window/captionbar-active-r.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-active-combined.png",0,0],"qx/decoration/Modern/window/captionbar-active-t.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-6],"qx/decoration/Modern/window/captionbar-active-tl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,0],"qx/decoration/Modern/window/captionbar-active-tr.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-active-combined.png",0,-30],"qx/decoration/Modern/window/captionbar-active.png":[69,21,"png","qx"],"qx/decoration/Modern/window/captionbar-inactive-b.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-24],"qx/decoration/Modern/window/captionbar-inactive-bl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-6],"qx/decoration/Modern/window/captionbar-inactive-br.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-30],"qx/decoration/Modern/window/captionbar-inactive-c.png":[40,9,"png","qx"],"qx/decoration/Modern/window/captionbar-inactive-l.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-inactive-combined.png",0,0],"qx/decoration/Modern/window/captionbar-inactive-r.png":[6,9,"png","qx","qx/decoration/Modern/window-captionbar-lr-inactive-combined.png",-6,0],"qx/decoration/Modern/window/captionbar-inactive-t.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,0],"qx/decoration/Modern/window/captionbar-inactive-tl.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-12],"qx/decoration/Modern/window/captionbar-inactive-tr.png":[6,6,"png","qx","qx/decoration/Modern/window-captionbar-tb-inactive-combined.png",0,-18],"qx/decoration/Modern/window/captionbar-inactive.png":[69,21,"png","qx"],"qx/decoration/Modern/window/close-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-27,0],"qx/decoration/Modern/window/close-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-9,0],"qx/decoration/Modern/window/close-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-90,0],"qx/decoration/Modern/window/maximize-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-18,0],"qx/decoration/Modern/window/maximize-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-81,0],"qx/decoration/Modern/window/maximize-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-54,0],"qx/decoration/Modern/window/minimize-active-hovered.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-63,0],"qx/decoration/Modern/window/minimize-active.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-72,0],"qx/decoration/Modern/window/minimize-inactive.png":[9,9,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-36,0],"qx/decoration/Modern/window/restore-active-hovered.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",0,0],"qx/decoration/Modern/window/restore-active.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-99,0],"qx/decoration/Modern/window/restore-inactive.png":[9,8,"png","qx","qx/decoration/Modern/window-captionbar-buttons-combined.png",-45,0],"qx/decoration/Modern/window/statusbar-b.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-16],"qx/decoration/Modern/window/statusbar-bl.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-20],"qx/decoration/Modern/window/statusbar-br.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-4],"qx/decoration/Modern/window/statusbar-c.png":[40,7,"png","qx"],"qx/decoration/Modern/window/statusbar-l.png":[4,7,"png","qx","qx/decoration/Modern/window-statusbar-lr-combined.png",-4,0],"qx/decoration/Modern/window/statusbar-r.png":[4,7,"png","qx","qx/decoration/Modern/window-statusbar-lr-combined.png",0,0],"qx/decoration/Modern/window/statusbar-t.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,0],"qx/decoration/Modern/window/statusbar-tl.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-8],"qx/decoration/Modern/window/statusbar-tr.png":[4,4,"png","qx","qx/decoration/Modern/window-statusbar-tb-combined.png",0,-12],"qx/decoration/Modern/window/statusbar.png":[369,15,"png","qx"],"qx/icon/Tango/16/actions/dialog-cancel.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/dialog-ok.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/view-refresh.png":[16,16,"png","qx"],"qx/icon/Tango/16/actions/window-close.png":[16,16,"png","qx"],"qx/icon/Tango/16/apps/office-calendar.png":[16,16,"png","qx"],"qx/icon/Tango/16/apps/utilities-color-chooser.png":[16,16,"png","qx"],"qx/icon/Tango/16/mimetypes/office-document.png":[16,16,"png","qx"],"qx/icon/Tango/16/places/folder-open.png":[16,16,"png","qx"],"qx/icon/Tango/16/places/folder.png":[16,16,"png","qx"],"qx/icon/Tango/22/actions/edit-find.png":[22,22,"png","qx"],"qx/icon/Tango/22/actions/media-seek-forward.png":[22,22,"png","qx"],"qx/icon/Tango/22/apps/utilities-dictionary.png":[22,22,"png","qx"],"qx/icon/Tango/22/apps/utilities-graphics-viewer.png":[22,22,"png","qx"],"qx/icon/Tango/22/apps/utilities-help.png":[22,22,"png","qx"],"qx/icon/Tango/22/mimetypes/office-document.png":[22,22,"png","qx"],"qx/icon/Tango/22/places/folder-open.png":[22,22,"png","qx"],"qx/icon/Tango/22/places/folder.png":[22,22,"png","qx"],"qx/icon/Tango/32/mimetypes/office-document.png":[32,32,"png","qx"],"qx/icon/Tango/32/places/folder-open.png":[32,32,"png","qx"],"qx/icon/Tango/32/places/folder.png":[32,32,"png","qx"],"qx/static/blank.gif":[1,1,"gif","qx"],"qx/static/blank.html":"qx"},"translations":{"C":{}}};
-(function(){var m="toString",k=".",j="default",h="Object",g='"',f="Array",e="()",d="String",c="Function",b=".prototype",L="function",K="Boolean",J="Error",I="constructor",H="warn",G="hasOwnProperty",F="string",E="toLocaleString",D="RegExp",C='\", "',t="info",u="BROKEN_IE",r="isPrototypeOf",s="Date",p="",q="qx.Bootstrap",n="]",o="Class",v="error",w="[Class ",y="valueOf",x="Number",A="count",z="debug",B="ES5";if(!window.qx){window.qx={};}qx.Bootstrap={genericToString:function(){return w+this.classname+n;},createNamespace:function(name,M){var O=name.split(k);var parent=window;var N=O[0];for(var i=0,P=O.length-1;i<P;i++,N=O[i]){if(!parent[N]){parent=parent[N]={};}else{parent=parent[N];}}parent[N]=M;return N;},setDisplayName:function(Q,R,name){Q.displayName=R+k+name+e;},setDisplayNames:function(S,T){for(var name in S){var U=S[name];if(U instanceof Function){U.displayName=T+k+name+e;}}},define:function(name,V){if(!V){var V={statics:{}};}var bb;var Y=null;qx.Bootstrap.setDisplayNames(V.statics,name);if(V.members||V.extend){qx.Bootstrap.setDisplayNames(V.members,name+b);bb=V.construct||new Function;if(V.extend){this.extendClass(bb,bb,V.extend,name,ba);}var W=V.statics||{};for(var i=0,bc=qx.Bootstrap.getKeys(W),l=bc.length;i<l;i++){var bd=bc[i];bb[bd]=W[bd];}Y=bb.prototype;var X=V.members||{};for(var i=0,bc=qx.Bootstrap.getKeys(X),l=bc.length;i<l;i++){var bd=bc[i];Y[bd]=X[bd];}}else{bb=V.statics||{};}var ba=this.createNamespace(name,bb);bb.name=bb.classname=name;bb.basename=ba;bb.$$type=o;if(!bb.hasOwnProperty(m)){bb.toString=this.genericToString;}if(V.defer){V.defer(bb,Y);}qx.Bootstrap.$$registry[name]=V.statics;return bb;}};qx.Bootstrap.define(q,{statics:{LOADSTART:qx.$$start||new Date(),createNamespace:qx.Bootstrap.createNamespace,define:qx.Bootstrap.define,setDisplayName:qx.Bootstrap.setDisplayName,setDisplayNames:qx.Bootstrap.setDisplayNames,genericToString:qx.Bootstrap.genericToString,extendClass:function(be,bf,bg,name,bh){var bk=bg.prototype;var bj=new Function;bj.prototype=bk;var bi=new bj;be.prototype=bi;bi.name=bi.classname=name;bi.basename=bh;bf.base=be.superclass=bg;bf.self=be.constructor=bi.constructor=be;},getByName:function(name){return qx.Bootstrap.$$registry[name];},$$registry:{},objectGetLength:({"count":function(bl){return bl.__count__;},"default":function(bm){var length=0;for(var bn in bm){length++;}return length;}})[(({}).__count__==0)?A:j],objectMergeWith:function(bo,bp,bq){if(bq===undefined){bq=true;}for(var br in bp){if(bq||bo[br]===undefined){bo[br]=bp[br];}}return bo;},__id:[r,G,E,m,y,I],getKeys:({"ES5":Object.keys,"BROKEN_IE":function(bs){var bt=[];var bv=Object.prototype.hasOwnProperty;for(var bw in bs){if(bv.call(bs,bw)){bt.push(bw);}}var bu=qx.Bootstrap.__id;for(var i=0,a=bu,l=a.length;i<l;i++){if(bv.call(bs,a[i])){bt.push(a[i]);}}return bt;},"default":function(bx){var by=[];var bz=Object.prototype.hasOwnProperty;for(var bA in bx){if(bz.call(bx,bA)){by.push(bA);}}return by;}})[typeof (Object.keys)==L?B:(function(){for(var bB in {toString:1}){return bB;}})()!==m?u:j],getKeysAsString:function(bC){var bD=qx.Bootstrap.getKeys(bC);if(bD.length==0){return p;}return g+bD.join(C)+g;},__ie:{"[object String]":d,"[object Array]":f,"[object Object]":h,"[object RegExp]":D,"[object Number]":x,"[object Boolean]":K,"[object Date]":s,"[object Function]":c,"[object Error]":J},bind:function(bE,self,bF){var bG=Array.prototype.slice.call(arguments,2,arguments.length);return function(){var bH=Array.prototype.slice.call(arguments,0,arguments.length);return bE.apply(self,bG.concat(bH));};},firstUp:function(bI){return bI.charAt(0).toUpperCase()+bI.substr(1);},firstLow:function(bJ){return bJ.charAt(0).toLowerCase()+bJ.substr(1);},getClass:function(bK){var bL=Object.prototype.toString.call(bK);return (qx.Bootstrap.__ie[bL]||bL.slice(8,-1));},isString:function(bM){return (bM!==null&&(typeof bM===F||qx.Bootstrap.getClass(bM)==d||bM instanceof String||(!!bM&&!!bM.$$isString)));},isArray:function(bN){return (bN!==null&&(bN instanceof Array||(bN&&qx.data&&qx.data.IListData&&qx.Bootstrap.hasInterface(bN.constructor,qx.data.IListData))||qx.Bootstrap.getClass(bN)==f||(!!bN&&!!bN.$$isArray)));},isObject:function(bO){return (bO!==undefined&&bO!==null&&qx.Bootstrap.getClass(bO)==h);},isFunction:function(bP){return qx.Bootstrap.getClass(bP)==c;},classIsDefined:function(name){return qx.Bootstrap.getByName(name)!==undefined;},getPropertyDefinition:function(bQ,name){while(bQ){if(bQ.$$properties&&bQ.$$properties[name]){return bQ.$$properties[name];}bQ=bQ.superclass;}return null;},hasProperty:function(bR,name){return !!qx.Bootstrap.getPropertyDefinition(bR,name);},getEventType:function(bS,name){var bS=bS.constructor;while(bS.superclass){if(bS.$$events&&bS.$$events[name]!==undefined){return bS.$$events[name];}bS=bS.superclass;}return null;},supportsEvent:function(bT,name){return !!qx.Bootstrap.getEventType(bT,name);},getByInterface:function(bU,bV){var bW,i,l;while(bU){if(bU.$$implements){bW=bU.$$flatImplements;for(i=0,l=bW.length;i<l;i++){if(bW[i]===bV){return bU;}}}bU=bU.superclass;}return null;},hasInterface:function(bX,bY){return !!qx.Bootstrap.getByInterface(bX,bY);},getMixins:function(ca){var cb=[];while(ca){if(ca.$$includes){cb.push.apply(cb,ca.$$flatIncludes);}ca=ca.superclass;}return cb;},$$logs:[],debug:function(cc,cd){qx.Bootstrap.$$logs.push([z,arguments]);},info:function(ce,cf){qx.Bootstrap.$$logs.push([t,arguments]);},warn:function(cg,ch){qx.Bootstrap.$$logs.push([H,arguments]);},error:function(ci,cj){qx.Bootstrap.$$logs.push([v,arguments]);},trace:function(ck){}}});})();(function(){var g="qx.Mixin",f=".prototype",e="constructor",d="[Mixin ",c="]",b="destruct",a="Mixin";qx.Bootstrap.define(g,{statics:{define:function(name,h){if(h){if(h.include&&!(h.include instanceof Array)){h.include=[h.include];}{};var k=h.statics?h.statics:{};qx.Bootstrap.setDisplayNames(k,name);for(var j in k){if(k[j] instanceof Function){k[j].$$mixin=k;}}if(h.construct){k.$$constructor=h.construct;qx.Bootstrap.setDisplayName(h.construct,name,e);}if(h.include){k.$$includes=h.include;}if(h.properties){k.$$properties=h.properties;}if(h.members){k.$$members=h.members;qx.Bootstrap.setDisplayNames(h.members,name+f);}for(var j in k.$$members){if(k.$$members[j] instanceof Function){k.$$members[j].$$mixin=k;}}if(h.events){k.$$events=h.events;}if(h.destruct){k.$$destructor=h.destruct;qx.Bootstrap.setDisplayName(h.destruct,name,b);}}else{var k={};}k.$$type=a;k.name=name;k.toString=this.genericToString;k.basename=qx.Bootstrap.createNamespace(name,k);this.$$registry[name]=k;return k;},checkCompatibility:function(m){var p=this.flatten(m);var q=p.length;if(q<2){return true;}var t={};var s={};var r={};var o;for(var i=0;i<q;i++){o=p[i];for(var n in o.events){if(r[n]){throw new Error('Conflict between mixin "'+o.name+'" and "'+r[n]+'" in member "'+n+'"!');}r[n]=o.name;}for(var n in o.properties){if(t[n]){throw new Error('Conflict between mixin "'+o.name+'" and "'+t[n]+'" in property "'+n+'"!');}t[n]=o.name;}for(var n in o.members){if(s[n]){throw new Error('Conflict between mixin "'+o.name+'" and "'+s[n]+'" in member "'+n+'"!');}s[n]=o.name;}}return true;},isCompatible:function(u,v){var w=qx.Bootstrap.getMixins(v);w.push(u);return qx.Mixin.checkCompatibility(w);},getByName:function(name){return this.$$registry[name];},isDefined:function(name){return this.getByName(name)!==undefined;},getTotalNumber:function(){return qx.Bootstrap.objectGetLength(this.$$registry);},flatten:function(x){if(!x){return [];}var y=x.concat();for(var i=0,l=x.length;i<l;i++){if(x[i].$$includes){y.push.apply(y,this.flatten(x[i].$$includes));}}return y;},genericToString:function(){return d+this.name+c;},$$registry:{},__er:null,__es:function(){}}});})();(function(){var h="qx.allowUrlSettings",g="&",f="qx.core.Setting",e="qx.allowUrlVariants",d="qx.propertyDebugLevel",c="qxsetting",b=":",a=".";qx.Bootstrap.define(f,{statics:{__eu:{},define:function(j,k){if(k===undefined){throw new Error('Default value of setting "'+j+'" must be defined!');}if(!this.__eu[j]){this.__eu[j]={};}else if(this.__eu[j].defaultValue!==undefined){throw new Error('Setting "'+j+'" is already defined!');}this.__eu[j].defaultValue=k;},get:function(l){var m=this.__eu[l];if(m===undefined){throw new Error('Setting "'+l+'" is not defined.');}if(m.value!==undefined){return m.value;}return m.defaultValue;},set:function(n,o){if((n.split(a)).length<2){throw new Error('Malformed settings key "'+n+'". Must be following the schema "namespace.key".');}if(!this.__eu[n]){this.__eu[n]={};}this.__eu[n].value=o;},__ev:function(){if(window.qxsettings){for(var p in window.qxsettings){this.set(p,window.qxsettings[p]);}window.qxsettings=undefined;try{delete window.qxsettings;}catch(q){}this.__ew();}},__ew:function(){if(this.get(h)!=true){return;}var s=document.location.search.slice(1).split(g);for(var i=0;i<s.length;i++){var r=s[i].split(b);if(r.length!=3||r[0]!=c){continue;}this.set(r[1],decodeURIComponent(r[2]));}}},defer:function(t){t.define(h,false);t.define(e,false);t.define(d,0);t.__ev();}});})();(function(){var h="function",g="Boolean",f="qx.Interface",e="]",d="toggle",c="Interface",b="is",a="[Interface ";qx.Bootstrap.define(f,{statics:{define:function(name,j){if(j){if(j.extend&&!(j.extend instanceof Array)){j.extend=[j.extend];}{};var k=j.statics?j.statics:{};if(j.extend){k.$$extends=j.extend;}if(j.properties){k.$$properties=j.properties;}if(j.members){k.$$members=j.members;}if(j.events){k.$$events=j.events;}}else{var k={};}k.$$type=c;k.name=name;k.toString=this.genericToString;k.basename=qx.Bootstrap.createNamespace(name,k);qx.Interface.$$registry[name]=k;return k;},getByName:function(name){return this.$$registry[name];},isDefined:function(name){return this.getByName(name)!==undefined;},getTotalNumber:function(){return qx.Bootstrap.objectGetLength(this.$$registry);},flatten:function(m){if(!m){return [];}var n=m.concat();for(var i=0,l=m.length;i<l;i++){if(m[i].$$extends){n.push.apply(n,this.flatten(m[i].$$extends));}}return n;},__fI:function(o,p,q,r){var v=q.$$members;if(v){for(var u in v){if(qx.Bootstrap.isFunction(v[u])){var t=this.__fJ(p,u);var s=t||qx.Bootstrap.isFunction(o[u]);if(!s){throw new Error('Implementation of method "'+u+'" is missing in class "'+p.classname+'" required by interface "'+q.name+'"');}var w=r===true&&!t&&!qx.Bootstrap.hasInterface(p,q);if(w){o[u]=this.__fM(q,o[u],u,v[u]);}}else{if(typeof o[u]===undefined){if(typeof o[u]!==h){throw new Error('Implementation of member "'+u+'" is missing in class "'+p.classname+'" required by interface "'+q.name+'"');}}}}}},__fJ:function(x,y){var C=y.match(/^(is|toggle|get|set|reset)(.*)$/);if(!C){return false;}var z=qx.Bootstrap.firstLow(C[2]);var A=qx.Bootstrap.getPropertyDefinition(x,z);if(!A){return false;}var B=C[0]==b||C[0]==d;if(B){return qx.Bootstrap.getPropertyDefinition(x,z).check==g;}return true;},__fK:function(D,E){if(E.$$properties){for(var F in E.$$properties){if(!qx.Bootstrap.getPropertyDefinition(D,F)){throw new Error('The property "'+F+'" is not supported by Class "'+D.classname+'"!');}}}},__fL:function(G,H){if(H.$$events){for(var I in H.$$events){if(!qx.Bootstrap.supportsEvent(G,I)){throw new Error('The event "'+I+'" is not supported by Class "'+G.classname+'"!');}}}},assertObject:function(J,K){var M=J.constructor;this.__fI(J,M,K,false);this.__fK(M,K);this.__fL(M,K);var L=K.$$extends;if(L){for(var i=0,l=L.length;i<l;i++){this.assertObject(J,L[i]);}}},assert:function(N,O,P){this.__fI(N.prototype,N,O,P);this.__fK(N,O);this.__fL(N,O);var Q=O.$$extends;if(Q){for(var i=0,l=Q.length;i<l;i++){this.assert(N,Q[i],P);}}},genericToString:function(){return a+this.name+e;},$$registry:{},__fM:function(){},__fN:null,__fO:function(){}}});})();(function(){var g="emulated",f="native",e='"',d="qx.lang.Core",c="\\\\",b="\\\"",a="[object Error]";qx.Bootstrap.define(d,{statics:{errorToString:{"native":Error.prototype.toString,"emulated":function(){return this.message;}}[(!Error.prototype.toString||Error.prototype.toString()==a)?g:f],arrayIndexOf:{"native":Array.prototype.indexOf,"emulated":function(h,j){if(j==null){j=0;}else if(j<0){j=Math.max(0,this.length+j);}for(var i=j;i<this.length;i++){if(this[i]===h){return i;}}return -1;}}[Array.prototype.indexOf?f:g],arrayLastIndexOf:{"native":Array.prototype.lastIndexOf,"emulated":function(k,m){if(m==null){m=this.length-1;}else if(m<0){m=Math.max(0,this.length+m);}for(var i=m;i>=0;i--){if(this[i]===k){return i;}}return -1;}}[Array.prototype.lastIndexOf?f:g],arrayForEach:{"native":Array.prototype.forEach,"emulated":function(n,o){var l=this.length;for(var i=0;i<l;i++){var p=this[i];if(p!==undefined){n.call(o||window,p,i,this);}}}}[Array.prototype.forEach?f:g],arrayFilter:{"native":Array.prototype.filter,"emulated":function(q,r){var s=[];var l=this.length;for(var i=0;i<l;i++){var t=this[i];if(t!==undefined){if(q.call(r||window,t,i,this)){s.push(this[i]);}}}return s;}}[Array.prototype.filter?f:g],arrayMap:{"native":Array.prototype.map,"emulated":function(u,v){var w=[];var l=this.length;for(var i=0;i<l;i++){var x=this[i];if(x!==undefined){w[i]=u.call(v||window,x,i,this);}}return w;}}[Array.prototype.map?f:g],arraySome:{"native":Array.prototype.some,"emulated":function(y,z){var l=this.length;for(var i=0;i<l;i++){var A=this[i];if(A!==undefined){if(y.call(z||window,A,i,this)){return true;}}}return false;}}[Array.prototype.some?f:g],arrayEvery:{"native":Array.prototype.every,"emulated":function(B,C){var l=this.length;for(var i=0;i<l;i++){var D=this[i];if(D!==undefined){if(!B.call(C||window,D,i,this)){return false;}}}return true;}}[Array.prototype.every?f:g],stringQuote:{"native":String.prototype.quote,"emulated":function(){return e+this.replace(/\\/g,c).replace(/\"/g,b)+e;}}[String.prototype.quote?f:g]}});Error.prototype.toString=qx.lang.Core.errorToString;Array.prototype.indexOf=qx.lang.Core.arrayIndexOf;Array.prototype.lastIndexOf=qx.lang.Core.arrayLastIndexOf;Array.prototype.forEach=qx.lang.Core.arrayForEach;Array.prototype.filter=qx.lang.Core.arrayFilter;Array.prototype.map=qx.lang.Core.arrayMap;Array.prototype.some=qx.lang.Core.arraySome;Array.prototype.every=qx.lang.Core.arrayEvery;String.prototype.quote=qx.lang.Core.stringQuote;})();(function(){var cv=';',cu='computed=this.',ct='=value;',cs='this.',cr="set",cq="setThemed",cp="setRuntime",co="init",cn='if(this.',cm='delete this.',bw='!==undefined)',bv='}',bu="resetThemed",bt='else if(this.',bs="string",br='return this.',bq="reset",bp="boolean",bo="resetRuntime",bn='!==undefined){',cC="",cD="refresh",cA='=true;',cB="this.",cy=";",cz='old=this.',cw="();",cx='else ',cE='if(old===undefined)old=this.',cF='old=computed=this.',bU="return this.",bT="get",bW='(value);',bV="(a[",bY='if(old===computed)return value;',bX='if(old===undefined)old=null;',cb=' of an instance of ',ca=' is not (yet) ready!");',bS="]);",bR='!==inherit){',c='qx.lang.Type.isString(value) && qx.util.ColorUtil.isValidPropertyValue(value)',d='value !== null && qx.theme.manager.Font.getInstance().isDynamic(value)',e='value !== null && value.nodeType === 9 && value.documentElement',f='===value)return value;',g='value !== null && value.$$type === "Mixin"',h='return init;',j='var init=this.',k='value !== null && value.nodeType === 1 && value.attributes',m="var parent = this.getLayoutParent();",n="Error in property ",cT='var a=this._getChildren();if(a)for(var i=0,l=a.length;i<l;i++){',cS='.validate.call(this, value);',cR='qx.core.Assert.assertInstance(value, Date, msg) || true',cQ='else{',cX="if (!parent) return;",cW=" in method ",cV='qx.core.Assert.assertInstance(value, Error, msg) || true',cU='=computed;',da='Undefined value is not allowed!',cY='(backup);',M="MSIE 6.0",N='if(computed===inherit){',K="inherit",L='Is invalid!',Q='if(value===undefined)prop.error(this,2,"',R='var computed, old=this.',O='else if(computed===undefined)',P="': ",I=" of class ",J='value !== null && value.nodeType !== undefined',v='===undefined)return;',u='value !== null && qx.theme.manager.Decoration.getInstance().isValidPropertyValue(value)',x="')){",w='qx.core.Assert.assertPositiveInteger(value, msg) || true',r='else this.',q='value=this.',t='","',s='if(init==qx.core.Property.$$inherit)init=null;',p='value !== null && value.$$type === "Interface"',o='var inherit=prop.$$inherit;',W="', qx.event.type.Data, [computed, old]",X="var value = parent.",Y="$$useinit_",ba='computed=undefined;delete this.',S="(value);",T='Requires exactly one argument!',U='",value);',V='computed=value;',bb="$$runtime_",bc=';}',F="$$user_",E='){',D='qx.core.Assert.assertArray(value, msg) || true',C='if(computed===undefined||computed===inherit){',B='qx.core.Assert.assertPositiveNumber(value, msg) || true',A=".prototype",z="Boolean",y=")}",H='(computed, old, "',G='return value;',bd='if(init==qx.core.Property.$$inherit)throw new Error("Inheritable property ',be="if(reg.hasListener(this, '",bf='Does not allow any arguments!',bg=')a[i].',bh="()",bi="var a=arguments[0] instanceof Array?arguments[0]:arguments;",bj='.$$properties.',bk='value !== null && value.$$type === "Theme"',bl="var reg=qx.event.Registration;",bm="())",bA='return null;',bz='qx.core.Assert.assertObject(value, msg) || true',by='");',bx='qx.core.Assert.assertString(value, msg) || true',bE='var pa=this.getLayoutParent();if(pa)computed=pa.',bD="if (value===undefined) value = parent.",bC='value !== null && value.$$type === "Class"',bB='qx.core.Assert.assertFunction(value, msg) || true',bG='!==undefined&&',bF='var computed, old;',bN='var backup=computed;',bO='}else{',bL="object",bM="$$init_",bJ="$$theme_",bK='if(computed===undefined)computed=null;',bH='qx.core.Assert.assertMap(value, msg) || true',bI='qx.core.Assert.assertNumber(value, msg) || true',bP='if((computed===undefined||computed===inherit)&&',bQ="reg.fireEvent(this, '",cf='Null value is not allowed!',ce='qx.core.Assert.assertInteger(value, msg) || true',ch="value",cg="rv:1.8.1",cj="shorthand",ci='qx.core.Assert.assertInstance(value, RegExp, msg) || true',cl='value !== null && value.type !== undefined',ck='value !== null && value.document',cd='throw new Error("Property ',cc="(!this.",cM='qx.core.Assert.assertBoolean(value, msg) || true',cN='if(a[i].',cO="toggle",cP="$$inherit_",cI='var prop=qx.core.Property;',cJ=" with incoming value '",cK="a=qx.lang.Array.fromShortHand(qx.lang.Array.fromArguments(a));",cL='if(computed===undefined||computed==inherit)computed=null;',cG="qx.core.Property",cH="is",b='Could not change or apply init value after constructing phase!';qx.Bootstrap.define(cG,{statics:{__lF:{"Boolean":cM,"String":bx,"Number":bI,"Integer":ce,"PositiveNumber":B,"PositiveInteger":w,"Error":cV,"RegExp":ci,"Object":bz,"Array":D,"Map":bH,"Function":bB,"Date":cR,"Node":J,"Element":k,"Document":e,"Window":ck,"Event":cl,"Class":bC,"Mixin":g,"Interface":p,"Theme":bk,"Color":c,"Decorator":u,"Font":d},__lG:{"Node":true,"Element":true,"Document":true,"Window":true,"Event":true},$$inherit:K,$$store:{runtime:{},user:{},theme:{},inherit:{},init:{},useinit:{}},$$method:{get:{},set:{},reset:{},init:{},refresh:{},setRuntime:{},resetRuntime:{},setThemed:{},resetThemed:{}},$$allowedKeys:{name:bs,dereference:bp,inheritable:bp,nullable:bp,themeable:bp,refine:bp,init:null,apply:bs,event:bs,check:null,transform:bs,deferredInit:bp,validate:null},$$allowedGroupKeys:{name:bs,group:bL,mode:bs,themeable:bp},$$inheritable:{},__lH:function(db){var dc=this.__lI(db);if(!dc.length){var dd=qx.lang.Function.empty;}else{dd=this.__lJ(dc);}db.prototype.$$refreshInheritables=dd;},__lI:function(de){var dg=[];while(de){var df=de.$$properties;if(df){for(var name in this.$$inheritable){if(df[name]&&df[name].inheritable){dg.push(name);}}}de=de.superclass;}return dg;},__lJ:function(dh){var dl=this.$$store.inherit;var dk=this.$$store.init;var dj=this.$$method.refresh;var di=[m,cX];for(var i=0,l=dh.length;i<l;i++){var name=dh[i];di.push(X,dl[name],cy,bD,dk[name],cy,cB,dj[name],S);}return new Function(di.join(cC));},attachRefreshInheritables:function(dm){dm.prototype.$$refreshInheritables=function(){qx.core.Property.__lH(dm);return this.$$refreshInheritables();};},attachMethods:function(dn,name,dp){dp.group?this.__lK(dn,dp,name):this.__lL(dn,dp,name);},__lK:function(dq,dr,name){var dy=qx.Bootstrap.firstUp(name);var dx=dq.prototype;var dz=dr.themeable===true;{};var dA=[];var du=[];if(dz){var ds=[];var dw=[];}var dv=bi;dA.push(dv);if(dz){ds.push(dv);}if(dr.mode==cj){var dt=cK;dA.push(dt);if(dz){ds.push(dt);}}for(var i=0,a=dr.group,l=a.length;i<l;i++){{};dA.push(cB,this.$$method.set[a[i]],bV,i,bS);du.push(cB,this.$$method.reset[a[i]],cw);if(dz){{};ds.push(cB,this.$$method.setThemed[a[i]],bV,i,bS);dw.push(cB,this.$$method.resetThemed[a[i]],cw);}}this.$$method.set[name]=cr+dy;dx[this.$$method.set[name]]=new Function(dA.join(cC));this.$$method.reset[name]=bq+dy;dx[this.$$method.reset[name]]=new Function(du.join(cC));if(dz){this.$$method.setThemed[name]=cq+dy;dx[this.$$method.setThemed[name]]=new Function(ds.join(cC));this.$$method.resetThemed[name]=bu+dy;dx[this.$$method.resetThemed[name]]=new Function(dw.join(cC));}},__lL:function(dB,dC,name){var dE=qx.Bootstrap.firstUp(name);var dG=dB.prototype;{};if(dC.dereference===undefined&&typeof dC.check===bs){dC.dereference=this.__lM(dC.check);}var dF=this.$$method;var dD=this.$$store;dD.runtime[name]=bb+name;dD.user[name]=F+name;dD.theme[name]=bJ+name;dD.init[name]=bM+name;dD.inherit[name]=cP+name;dD.useinit[name]=Y+name;dF.get[name]=bT+dE;dG[dF.get[name]]=function(){return qx.core.Property.executeOptimizedGetter(this,dB,name,bT);};dF.set[name]=cr+dE;dG[dF.set[name]]=function(dH){return qx.core.Property.executeOptimizedSetter(this,dB,name,cr,arguments);};dF.reset[name]=bq+dE;dG[dF.reset[name]]=function(){return qx.core.Property.executeOptimizedSetter(this,dB,name,bq);};if(dC.inheritable||dC.apply||dC.event||dC.deferredInit){dF.init[name]=co+dE;dG[dF.init[name]]=function(dI){return qx.core.Property.executeOptimizedSetter(this,dB,name,co,arguments);};}if(dC.inheritable){dF.refresh[name]=cD+dE;dG[dF.refresh[name]]=function(dJ){return qx.core.Property.executeOptimizedSetter(this,dB,name,cD,arguments);};}dF.setRuntime[name]=cp+dE;dG[dF.setRuntime[name]]=function(dK){return qx.core.Property.executeOptimizedSetter(this,dB,name,cp,arguments);};dF.resetRuntime[name]=bo+dE;dG[dF.resetRuntime[name]]=function(){return qx.core.Property.executeOptimizedSetter(this,dB,name,bo);};if(dC.themeable){dF.setThemed[name]=cq+dE;dG[dF.setThemed[name]]=function(dL){return qx.core.Property.executeOptimizedSetter(this,dB,name,cq,arguments);};dF.resetThemed[name]=bu+dE;dG[dF.resetThemed[name]]=function(){return qx.core.Property.executeOptimizedSetter(this,dB,name,bu);};}if(dC.check===z){dG[cO+dE]=new Function(bU+dF.set[name]+cc+dF.get[name]+bm);dG[cH+dE]=new Function(bU+dF.get[name]+bh);}},__lM:function(dM){return !!this.__lG[dM];},__lN:function(dN){return this.__lG[dN]||qx.Bootstrap.classIsDefined(dN)||(qx.Interface&&qx.Interface.isDefined(dN));},__lO:{0:b,1:T,2:da,3:bf,4:cf,5:L},error:function(dO,dP,dQ,dR,dS){var dT=dO.constructor.classname;var dU=n+dQ+I+dT+cW+this.$$method[dR][dQ]+cJ+dS+P;throw new Error(dU+(this.__lO[dP]||"Unknown reason: "+dP));},__lP:function(dV,dW,name,dX,dY,ea){var eb=this.$$method[dX][name];{dW[eb]=new Function(ch,dY.join(cC));};{};qx.Bootstrap.setDisplayName(dW[eb],dV.classname+A,eb);if(ea===undefined){return dV[eb]();}else{return dV[eb](ea[0]);}},executeOptimizedGetter:function(ec,ed,name,ee){var eg=ed.$$properties[name];var ei=ed.prototype;var ef=[];var eh=this.$$store;ef.push(cn,eh.runtime[name],bw);ef.push(br,eh.runtime[name],cv);if(eg.inheritable){ef.push(bt,eh.inherit[name],bw);ef.push(br,eh.inherit[name],cv);ef.push(cx);}ef.push(cn,eh.user[name],bw);ef.push(br,eh.user[name],cv);if(eg.themeable){ef.push(bt,eh.theme[name],bw);ef.push(br,eh.theme[name],cv);}if(eg.deferredInit&&eg.init===undefined){ef.push(bt,eh.init[name],bw);ef.push(br,eh.init[name],cv);}ef.push(cx);if(eg.init!==undefined){if(eg.inheritable){ef.push(j,eh.init[name],cv);if(eg.nullable){ef.push(s);}else if(eg.init!==undefined){ef.push(br,eh.init[name],cv);}else{ef.push(bd,name,cb,ed.classname,ca);}ef.push(h);}else{ef.push(br,eh.init[name],cv);}}else if(eg.inheritable||eg.nullable){ef.push(bA);}else{ef.push(cd,name,cb,ed.classname,ca);}return this.__lP(ec,ei,name,ee,ef);},executeOptimizedSetter:function(ej,ek,name,el,em){var er=ek.$$properties[name];var eq=ek.prototype;var eo=[];var en=el===cr||el===cq||el===cp||(el===co&&er.init===undefined);var ep=er.apply||er.event||er.inheritable;var es=this.__lQ(el,name);this.__lR(eo,er,name,el,en);if(en){this.__lS(eo,ek,er,name);}if(ep){this.__lT(eo,en,es,el);}if(er.inheritable){eo.push(o);}{};if(!ep){this.__lV(eo,name,el,en);}else{this.__lW(eo,er,name,el,en);}if(er.inheritable){this.__lX(eo,er,name,el);}else if(ep){this.__lY(eo,er,name,el);}if(ep){this.__ma(eo,er,name);if(er.inheritable&&eq._getChildren){this.__mb(eo,name);}}if(en){eo.push(G);}return this.__lP(ej,eq,name,el,eo,em);},__lQ:function(et,name){if(et===cp||et===bo){var eu=this.$$store.runtime[name];}else if(et===cq||et===bu){eu=this.$$store.theme[name];}else if(et===co){eu=this.$$store.init[name];}else{eu=this.$$store.user[name];}return eu;},__lR:function(ev,ew,name,ex,ey){{if(!ew.nullable||ew.check||ew.inheritable){ev.push(cI);}if(ex===cr){ev.push(Q,name,t,ex,U);}};},__lS:function(ez,eA,eB,name){if(eB.transform){ez.push(q,eB.transform,bW);}if(eB.validate){if(typeof eB.validate===bs){ez.push(cs,eB.validate,bW);}else if(eB.validate instanceof Function){ez.push(eA.classname,bj,name);ez.push(cS);}}},__lT:function(eC,eD,eE,eF){var eG=(eF===bq||eF===bu||eF===bo);if(eD){eC.push(cn,eE,f);}else if(eG){eC.push(cn,eE,v);}},__lU:undefined,__lV:function(eH,name,eI,eJ){if(eI===cp){eH.push(cs,this.$$store.runtime[name],ct);}else if(eI===bo){eH.push(cn,this.$$store.runtime[name],bw);eH.push(cm,this.$$store.runtime[name],cv);}else if(eI===cr){eH.push(cs,this.$$store.user[name],ct);}else if(eI===bq){eH.push(cn,this.$$store.user[name],bw);eH.push(cm,this.$$store.user[name],cv);}else if(eI===cq){eH.push(cs,this.$$store.theme[name],ct);}else if(eI===bu){eH.push(cn,this.$$store.theme[name],bw);eH.push(cm,this.$$store.theme[name],cv);}else if(eI===co&&eJ){eH.push(cs,this.$$store.init[name],ct);}},__lW:function(eK,eL,name,eM,eN){if(eL.inheritable){eK.push(R,this.$$store.inherit[name],cv);}else{eK.push(bF);}eK.push(cn,this.$$store.runtime[name],bn);if(eM===cp){eK.push(cu,this.$$store.runtime[name],ct);}else if(eM===bo){eK.push(cm,this.$$store.runtime[name],cv);eK.push(cn,this.$$store.user[name],bw);eK.push(cu,this.$$store.user[name],cv);eK.push(bt,this.$$store.theme[name],bw);eK.push(cu,this.$$store.theme[name],cv);eK.push(bt,this.$$store.init[name],bn);eK.push(cu,this.$$store.init[name],cv);eK.push(cs,this.$$store.useinit[name],cA);eK.push(bv);}else{eK.push(cF,this.$$store.runtime[name],cv);if(eM===cr){eK.push(cs,this.$$store.user[name],ct);}else if(eM===bq){eK.push(cm,this.$$store.user[name],cv);}else if(eM===cq){eK.push(cs,this.$$store.theme[name],ct);}else if(eM===bu){eK.push(cm,this.$$store.theme[name],cv);}else if(eM===co&&eN){eK.push(cs,this.$$store.init[name],ct);}}eK.push(bv);eK.push(bt,this.$$store.user[name],bn);if(eM===cr){if(!eL.inheritable){eK.push(cz,this.$$store.user[name],cv);}eK.push(cu,this.$$store.user[name],ct);}else if(eM===bq){if(!eL.inheritable){eK.push(cz,this.$$store.user[name],cv);}eK.push(cm,this.$$store.user[name],cv);eK.push(cn,this.$$store.runtime[name],bw);eK.push(cu,this.$$store.runtime[name],cv);eK.push(cn,this.$$store.theme[name],bw);eK.push(cu,this.$$store.theme[name],cv);eK.push(bt,this.$$store.init[name],bn);eK.push(cu,this.$$store.init[name],cv);eK.push(cs,this.$$store.useinit[name],cA);eK.push(bv);}else{if(eM===cp){eK.push(cu,this.$$store.runtime[name],ct);}else if(eL.inheritable){eK.push(cu,this.$$store.user[name],cv);}else{eK.push(cF,this.$$store.user[name],cv);}if(eM===cq){eK.push(cs,this.$$store.theme[name],ct);}else if(eM===bu){eK.push(cm,this.$$store.theme[name],cv);}else if(eM===co&&eN){eK.push(cs,this.$$store.init[name],ct);}}eK.push(bv);if(eL.themeable){eK.push(bt,this.$$store.theme[name],bn);if(!eL.inheritable){eK.push(cz,this.$$store.theme[name],cv);}if(eM===cp){eK.push(cu,this.$$store.runtime[name],ct);}else if(eM===cr){eK.push(cu,this.$$store.user[name],ct);}else if(eM===cq){eK.push(cu,this.$$store.theme[name],ct);}else if(eM===bu){eK.push(cm,this.$$store.theme[name],cv);eK.push(cn,this.$$store.init[name],bn);eK.push(cu,this.$$store.init[name],cv);eK.push(cs,this.$$store.useinit[name],cA);eK.push(bv);}else if(eM===co){if(eN){eK.push(cs,this.$$store.init[name],ct);}eK.push(cu,this.$$store.theme[name],cv);}else if(eM===cD){eK.push(cu,this.$$store.theme[name],cv);}eK.push(bv);}eK.push(bt,this.$$store.useinit[name],E);if(!eL.inheritable){eK.push(cz,this.$$store.init[name],cv);}if(eM===co){if(eN){eK.push(cu,this.$$store.init[name],ct);}else{eK.push(cu,this.$$store.init[name],cv);}}else if(eM===cr||eM===cp||eM===cq||eM===cD){eK.push(cm,this.$$store.useinit[name],cv);if(eM===cp){eK.push(cu,this.$$store.runtime[name],ct);}else if(eM===cr){eK.push(cu,this.$$store.user[name],ct);}else if(eM===cq){eK.push(cu,this.$$store.theme[name],ct);}else if(eM===cD){eK.push(cu,this.$$store.init[name],cv);}}eK.push(bv);if(eM===cr||eM===cp||eM===cq||eM===co){eK.push(cQ);if(eM===cp){eK.push(cu,this.$$store.runtime[name],ct);}else if(eM===cr){eK.push(cu,this.$$store.user[name],ct);}else if(eM===cq){eK.push(cu,this.$$store.theme[name],ct);}else if(eM===co){if(eN){eK.push(cu,this.$$store.init[name],ct);}else{eK.push(cu,this.$$store.init[name],cv);}eK.push(cs,this.$$store.useinit[name],cA);}eK.push(bv);}},__lX:function(eO,eP,name,eQ){eO.push(C);if(eQ===cD){eO.push(V);}else{eO.push(bE,this.$$store.inherit[name],cv);}eO.push(bP);eO.push(cs,this.$$store.init[name],bG);eO.push(cs,this.$$store.init[name],bR);eO.push(cu,this.$$store.init[name],cv);eO.push(cs,this.$$store.useinit[name],cA);eO.push(bO);eO.push(cm,this.$$store.useinit[name],bc);eO.push(bv);eO.push(bY);eO.push(N);eO.push(ba,this.$$store.inherit[name],cv);eO.push(bv);eO.push(O);eO.push(cm,this.$$store.inherit[name],cv);eO.push(r,this.$$store.inherit[name],cU);eO.push(bN);if(eP.init!==undefined&&eQ!==co){eO.push(cE,this.$$store.init[name],cy);}else{eO.push(bX);}eO.push(cL);},__lY:function(eR,eS,name,eT){if(eT!==cr&&eT!==cp&&eT!==cq){eR.push(bK);}eR.push(bY);if(eS.init!==undefined&&eT!==co){eR.push(cE,this.$$store.init[name],cy);}else{eR.push(bX);}},__ma:function(eU,eV,name){if(eV.apply){eU.push(cs,eV.apply,H,name,by);}if(eV.event){eU.push(bl,be,eV.event,x,bQ,eV.event,W,y);}},__mb:function(eW,name){eW.push(cT);eW.push(cN,this.$$method.refresh[name],bg,this.$$method.refresh[name],cY);eW.push(bv);}},defer:function(eX){var fa=navigator.userAgent.indexOf(M)!=-1;var eY=navigator.userAgent.indexOf(cg)!=-1;if(fa||eY){eX.__lM=eX.__lN;}}});})();(function(){var q="[Class ",p="]",o="$$init_",n="toString",m="constructor",k="singleton",j=".prototype",h="extend",g="Class",f="destruct",c="qx.Class",e=".",d="static",b="qx.event.type.Data";qx.Bootstrap.define(c,{statics:{define:function(name,r){if(!r){var r={};}if(r.include&&!(r.include instanceof Array)){r.include=[r.include];}if(r.implement&&!(r.implement instanceof Array)){r.implement=[r.implement];}var s=false;if(!r.hasOwnProperty(h)&&!r.type){r.type=d;s=true;}{};var t=this.__bX(name,r.type,r.extend,r.statics,r.construct,r.destruct,r.include);if(r.extend){if(r.properties){this.__ca(t,r.properties,true);}if(r.members){this.__cc(t,r.members,true,true,false);}if(r.events){this.__bY(t,r.events,true);}if(r.include){for(var i=0,l=r.include.length;i<l;i++){this.__cg(t,r.include[i],false);}}}if(r.settings){for(var u in r.settings){qx.core.Setting.define(u,r.settings[u]);}}if(r.variants){for(var u in r.variants){qx.core.Variant.define(u,r.variants[u].allowedValues,r.variants[u].defaultValue);}}if(r.implement){for(var i=0,l=r.implement.length;i<l;i++){this.__ce(t,r.implement[i]);}}{};if(r.defer){r.defer.self=t;r.defer(t,t.prototype,{add:function(name,v){var w={};w[name]=v;qx.Class.__ca(t,w,true);}});}return t;},undefine:function(name){delete this.$$registry[name];var x=name.split(e);var z=[window];for(var i=0;i<x.length;i++){z.push(z[i][x[i]]);}for(var i=z.length-1;i>=1;i--){var y=z[i];var parent=z[i-1];if(qx.Bootstrap.isFunction(y)||qx.Bootstrap.objectGetLength(y)===0){delete parent[x[i-1]];}else{break;}}},isDefined:qx.Bootstrap.classIsDefined,getTotalNumber:function(){return qx.Bootstrap.objectGetLength(this.$$registry);},getByName:qx.Bootstrap.getByName,include:function(A,B){{};qx.Class.__cg(A,B,false);},patch:function(C,D){{};qx.Class.__cg(C,D,true);},isSubClassOf:function(E,F){if(!E){return false;}if(E==F){return true;}if(E.prototype instanceof F){return true;}return false;},getPropertyDefinition:qx.Bootstrap.getPropertyDefinition,getProperties:function(G){var H=[];while(G){if(G.$$properties){H.push.apply(H,qx.Bootstrap.getKeys(G.$$properties));}G=G.superclass;}return H;},getByProperty:function(I,name){while(I){if(I.$$properties&&I.$$properties[name]){return I;}I=I.superclass;}return null;},hasProperty:qx.Bootstrap.hasProperty,getEventType:qx.Bootstrap.getEventType,supportsEvent:qx.Bootstrap.supportsEvent,hasOwnMixin:function(J,K){return J.$$includes&&J.$$includes.indexOf(K)!==-1;},getByMixin:function(L,M){var N,i,l;while(L){if(L.$$includes){N=L.$$flatIncludes;for(i=0,l=N.length;i<l;i++){if(N[i]===M){return L;}}}L=L.superclass;}return null;},getMixins:qx.Bootstrap.getMixins,hasMixin:function(O,P){return !!this.getByMixin(O,P);},hasOwnInterface:function(Q,R){return Q.$$implements&&Q.$$implements.indexOf(R)!==-1;},getByInterface:qx.Bootstrap.getByInterface,getInterfaces:function(S){var T=[];while(S){if(S.$$implements){T.push.apply(T,S.$$flatImplements);}S=S.superclass;}return T;},hasInterface:qx.Bootstrap.hasInterface,implementsInterface:function(U,V){var W=U.constructor;if(this.hasInterface(W,V)){return true;}try{qx.Interface.assertObject(U,V);return true;}catch(X){}try{qx.Interface.assert(W,V,false);return true;}catch(Y){}return false;},getInstance:function(){if(!this.$$instance){this.$$allowconstruct=true;this.$$instance=new this;delete this.$$allowconstruct;}return this.$$instance;},genericToString:function(){return q+this.classname+p;},$$registry:qx.Bootstrap.$$registry,__bT:null,__bU:null,__bV:function(){},__bW:function(){},__bX:function(name,ba,bb,bc,bd,be,bf){var bi;if(!bb&&true){bi=bc||{};qx.Bootstrap.setDisplayNames(bi,name);}else{var bi={};if(bb){if(!bd){bd=this.__ch();}if(this.__cj(bb,bf)){bi=this.__ck(bd,name,ba);}else{bi=bd;}if(ba===k){bi.getInstance=this.getInstance;}qx.Bootstrap.setDisplayName(bd,name,m);}if(bc){qx.Bootstrap.setDisplayNames(bc,name);var bj;for(var i=0,a=qx.Bootstrap.getKeys(bc),l=a.length;i<l;i++){bj=a[i];var bg=bc[bj];{bi[bj]=bg;};}}}var bh=qx.Bootstrap.createNamespace(name,bi);bi.name=bi.classname=name;bi.basename=bh;bi.$$type=g;if(ba){bi.$$classtype=ba;}if(!bi.hasOwnProperty(n)){bi.toString=this.genericToString;}if(bb){qx.Bootstrap.extendClass(bi,bd,bb,name,bh);if(be){{};bi.$$destructor=be;qx.Bootstrap.setDisplayName(be,name,f);}}this.$$registry[name]=bi;return bi;},__bY:function(bk,bl,bm){var bn,bn;{};if(bk.$$events){for(var bn in bl){bk.$$events[bn]=bl[bn];}}else{bk.$$events=bl;}},__ca:function(bo,bp,bq){var br;if(bq===undefined){bq=false;}var bs=bo.prototype;for(var name in bp){br=bp[name];{};br.name=name;if(!br.refine){if(bo.$$properties===undefined){bo.$$properties={};}bo.$$properties[name]=br;}if(br.init!==undefined){bo.prototype[o+name]=br.init;}if(br.event!==undefined){var event={};event[br.event]=b;this.__bY(bo,event,bq);}if(br.inheritable){qx.core.Property.$$inheritable[name]=true;if(!bs.$$refreshInheritables){qx.core.Property.attachRefreshInheritables(bo);}}if(!br.refine){qx.core.Property.attachMethods(bo,name,br);}}},__cb:null,__cc:function(bt,bu,bv,bw,bx){var by=bt.prototype;var bA,bz;qx.Bootstrap.setDisplayNames(bu,bt.classname+j);for(var i=0,a=qx.Bootstrap.getKeys(bu),l=a.length;i<l;i++){bA=a[i];bz=bu[bA];{};if(bw!==false&&bz instanceof Function&&bz.$$type==null){if(bx==true){bz=this.__cd(bz,by[bA]);}else{if(by[bA]){bz.base=by[bA];}bz.self=bt;}{};}by[bA]=bz;}},__cd:function(bB,bC){if(bC){return function(){var bE=bB.base;bB.base=bC;var bD=bB.apply(this,arguments);bB.base=bE;return bD;};}else{return bB;}},__ce:function(bF,bG){{};var bH=qx.Interface.flatten([bG]);if(bF.$$implements){bF.$$implements.push(bG);bF.$$flatImplements.push.apply(bF.$$flatImplements,bH);}else{bF.$$implements=[bG];bF.$$flatImplements=bH;}},__cf:function(bI){var name=bI.classname;var bJ=this.__ck(bI,name,bI.$$classtype);for(var i=0,a=qx.Bootstrap.getKeys(bI),l=a.length;i<l;i++){bK=a[i];bJ[bK]=bI[bK];}bJ.prototype=bI.prototype;var bM=bI.prototype;for(var i=0,a=qx.Bootstrap.getKeys(bM),l=a.length;i<l;i++){bK=a[i];var bN=bM[bK];if(bN&&bN.self==bI){bN.self=bJ;}}for(var bK in this.$$registry){var bL=this.$$registry[bK];if(!bL){continue;}if(bL.base==bI){bL.base=bJ;}if(bL.superclass==bI){bL.superclass=bJ;}if(bL.$$original){if(bL.$$original.base==bI){bL.$$original.base=bJ;}if(bL.$$original.superclass==bI){bL.$$original.superclass=bJ;}}}qx.Bootstrap.createNamespace(name,bJ);this.$$registry[name]=bJ;return bJ;},__cg:function(bO,bP,bQ){{};if(this.hasMixin(bO,bP)){return;}var bT=bO.$$original;if(bP.$$constructor&&!bT){bO=this.__cf(bO);}var bS=qx.Mixin.flatten([bP]);var bR;for(var i=0,l=bS.length;i<l;i++){bR=bS[i];if(bR.$$events){this.__bY(bO,bR.$$events,bQ);}if(bR.$$properties){this.__ca(bO,bR.$$properties,bQ);}if(bR.$$members){this.__cc(bO,bR.$$members,bQ,bQ,bQ);}}if(bO.$$includes){bO.$$includes.push(bP);bO.$$flatIncludes.push.apply(bO.$$flatIncludes,bS);}else{bO.$$includes=[bP];bO.$$flatIncludes=bS;}},__ch:function(){function bU(){bU.base.apply(this,arguments);}return bU;},__ci:function(){return function(){};},__cj:function(bV,bW){{};if(bV&&bV.$$includes){var bX=bV.$$flatIncludes;for(var i=0,l=bX.length;i<l;i++){if(bX[i].$$constructor){return true;}}}if(bW){var bY=qx.Mixin.flatten(bW);for(var i=0,l=bY.length;i<l;i++){if(bY[i].$$constructor){return true;}}}return false;},__ck:function(ca,name,cb){var cc;var cd=function(){var cg=cd;{};var cf=cg.$$original.apply(this,arguments);if(cg.$$includes){var ce=cg.$$flatIncludes;for(var i=0,l=ce.length;i<l;i++){if(ce[i].$$constructor){ce[i].$$constructor.apply(this,arguments);}}}{};return cf;};{};cd.$$original=ca;ca.wrapper=cd;return cd;}},defer:function(){var ch,ci,cj;{};}});})();(function(){var s="gecko",r="1.9.0.0",q=".",p="[object Opera]",o="function",n="[^\\.0-9]",m="525.26",l="",k="mshtml",j="AppleWebKit/",d="unknown",i="9.6.0",g="4.0",c="Gecko",b="opera",f="webkit",e="0.0.0",h="8.0",a="qx.bom.client.Engine";qx.Bootstrap.define(a,{statics:{NAME:"",FULLVERSION:"0.0.0",VERSION:0.0,OPERA:false,WEBKIT:false,GECKO:false,MSHTML:false,UNKNOWN_ENGINE:false,UNKNOWN_VERSION:false,DOCUMENT_MODE:null,__et:function(){var t=d;var x=e;var w=window.navigator.userAgent;var z=false;var v=false;if(window.opera&&Object.prototype.toString.call(window.opera)==p){t=b;this.OPERA=true;if(/Opera[\s\/]([0-9]+)\.([0-9])([0-9]*)/.test(w)){x=RegExp.$1+q+RegExp.$2;if(RegExp.$3!=l){x+=q+RegExp.$3;}}else{v=true;x=i;}}else if(window.navigator.userAgent.indexOf(j)!=-1){t=f;this.WEBKIT=true;if(/AppleWebKit\/([^ ]+)/.test(w)){x=RegExp.$1;var y=RegExp(n).exec(x);if(y){x=x.slice(0,y.index);}}else{v=true;x=m;}}else if(window.controllers&&window.navigator.product===c){t=s;this.GECKO=true;if(/rv\:([^\);]+)(\)|;)/.test(w)){x=RegExp.$1;}else{v=true;x=r;}}else if(window.navigator.cpuClass&&/MSIE\s+([^\);]+)(\)|;)/.test(w)){t=k;x=RegExp.$1;if(document.documentMode){this.DOCUMENT_MODE=document.documentMode;}if(x<8&&/Trident\/([^\);]+)(\)|;)/.test(w)){if(RegExp.$1===g){x=h;}}this.MSHTML=true;}else{var u=window.qxFail;if(u&&typeof u===o){var t=u();if(t.NAME&&t.FULLVERSION){t=t.NAME;this[t.toUpperCase()]=true;x=t.FULLVERSION;}}else{z=true;v=true;x=r;t=s;this.GECKO=true;qx.Bootstrap.warn("Unsupported client: "+w+"! Assumed gecko version 1.9.0.0 (Firefox 3.0).");}}this.UNKNOWN_ENGINE=z;this.UNKNOWN_VERSION=v;this.NAME=t;this.FULLVERSION=x;this.VERSION=parseFloat(x);}},defer:function(A){A.__et();}});})();(function(){var x="off",w="on",u="|",t="default",s="object",r="&",q="qx.aspects",p="qx.mobile.nativescroll",o="qx.mobile.emulatetouch",n="$",e="qx.allowUrlVariants",m="qx.debug",h="qx.client",c="qx.dynlocale",b="webkit",g="qxvariant",f="opera",j=":",a="qx.core.Variant",k="mshtml",d="gecko";qx.Bootstrap.define(a,{statics:{__kX:{},__kY:{},compilerIsSet:function(){return true;},define:function(y,z,A){{};if(!this.__kX[y]){this.__kX[y]={};}else{}this.__kX[y].allowedValues=z;this.__kX[y].defaultValue=A;},get:function(B){var C=this.__kX[B];{};if(C.value!==undefined){return C.value;}return C.defaultValue;},__la:function(){if(window.qxvariants){for(var D in qxvariants){{};if(!this.__kX[D]){this.__kX[D]={};}this.__kX[D].value=qxvariants[D];}window.qxvariants=undefined;try{delete window.qxvariants;}catch(E){}this.__lb(this.__kX);}},__lb:function(){if(qx.core.Setting.get(e)!=true){return;}var F=document.location.search.slice(1).split(r);for(var i=0;i<F.length;i++){var G=F[i].split(j);if(G.length!=3||G[0]!=g){continue;}var H=G[1];if(!this.__kX[H]){this.__kX[H]={};}this.__kX[H].value=decodeURIComponent(G[2]);}},select:function(I,J){{};for(var K in J){if(this.isSet(I,K)){return J[K];}}if(J[t]!==undefined){return J[t];}{};},isSet:function(L,M){var N=L+n+M;if(this.__kY[N]!==undefined){return this.__kY[N];}var P=false;if(M.indexOf(u)<0){P=this.get(L)===M;}else{var O=M.split(u);for(var i=0,l=O.length;i<l;i++){if(this.get(L)===O[i]){P=true;break;}}}this.__kY[N]=P;return P;},__lc:function(v){return typeof v===s&&v!==null&&v instanceof Array;},__ld:function(v){return typeof v===s&&v!==null&&!(v instanceof Array);},__le:function(Q,R){for(var i=0,l=Q.length;i<l;i++){if(Q[i]==R){return true;}}return false;}},defer:function(S){S.define(h,[d,k,f,b],qx.bom.client.Engine.NAME);S.define(m,[w,x],w);S.define(q,[w,x],x);S.define(c,[w,x],w);S.define(o,[w,x],x);S.define(p,[w,x],x);S.__la();}});})();(function(){var d="qx.dom.Node",c="qx.client",b="";qx.Class.define(d,{statics:{ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12,getDocument:function(e){return e.nodeType===this.DOCUMENT?e:e.ownerDocument||e.document;},getWindow:qx.core.Variant.select(c,{"mshtml":function(f){if(f.nodeType==null){return f;}if(f.nodeType!==this.DOCUMENT){f=f.ownerDocument;}return f.parentWindow;},"default":function(g){if(g.nodeType==null){return g;}if(g.nodeType!==this.DOCUMENT){g=g.ownerDocument;}return g.defaultView;}}),getDocumentElement:function(h){return this.getDocument(h).documentElement;},getBodyElement:function(j){return this.getDocument(j).body;},isNode:function(k){return !!(k&&k.nodeType!=null);},isElement:function(l){return !!(l&&l.nodeType===this.ELEMENT);},isDocument:function(m){return !!(m&&m.nodeType===this.DOCUMENT);},isText:function(n){return !!(n&&n.nodeType===this.TEXT);},isWindow:function(o){return !!(o&&o.history&&o.location&&o.document);},isNodeName:function(p,q){if(!q||!p||!p.nodeName){return false;}return q.toLowerCase()==qx.dom.Node.getName(p);},getName:function(r){if(!r||!r.nodeName){return null;}return r.nodeName.toLowerCase();},getText:function(s){if(!s||!s.nodeType){return null;}switch(s.nodeType){case 1:var i,a=[],t=s.childNodes,length=t.length;for(i=0;i<length;i++){a[i]=this.getText(t[i]);}return a.join(b);case 2:return s.nodeValue;break;case 3:return s.nodeValue;break;}return null;},isBlockNode:function(u){if(!qx.dom.Node.isElement(u)){return false;}u=qx.dom.Node.getName(u);return /^(body|form|textarea|fieldset|ul|ol|dl|dt|dd|li|div|hr|p|h[1-6]|quote|pre|table|thead|tbody|tfoot|tr|td|th|iframe|address|blockquote)$/.test(u);}}});})();(function(){var j="on",i="qx.client",h="gecko",g="function",f="HTMLEvents",d="mousedown",c="qx.bom.Event",b="return;",a="mouseover";qx.Class.define(c,{statics:{addNativeListener:function(k,l,m,n){if(k.addEventListener){k.addEventListener(l,m,!!n);}else if(k.attachEvent){k.attachEvent(j+l,m);}},removeNativeListener:function(o,p,q,r){if(o.removeEventListener){o.removeEventListener(p,q,!!r);}else if(o.detachEvent){try{o.detachEvent(j+p,q);}catch(e){if(e.number!==-2146828218){throw e;}}}},getTarget:function(e){return e.target||e.srcElement;},getRelatedTarget:function(e){if(e.relatedTarget!==undefined){if(qx.core.Variant.isSet(i,h)){try{e.relatedTarget&&e.relatedTarget.nodeType;}catch(e){return null;}}return e.relatedTarget;}else if(e.fromElement!==undefined&&e.type===a){return e.fromElement;}else if(e.toElement!==undefined){return e.toElement;}else{return null;}},preventDefault:function(e){if(e.preventDefault){if(qx.core.Variant.isSet(i,h)&&qx.bom.client.Engine.VERSION>=1.9&&e.type==d&&e.button==2){return;}e.preventDefault();if(qx.core.Variant.isSet(i,h)&&qx.bom.client.Engine.VERSION<1.9){try{e.keyCode=0;}catch(s){}}}else{try{e.keyCode=0;}catch(t){}e.returnValue=false;}},stopPropagation:function(e){if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}},fire:function(u,v){if(document.createEvent){var w=document.createEvent(f);w.initEvent(v,true,true);return !u.dispatchEvent(w);}else{var w=document.createEventObject();return u.fireEvent(j+v,w);}},supportsEvent:qx.core.Variant.select(i,{"webkit":function(x,y){return x.hasOwnProperty(j+y);},"default":function(z,A){var B=j+A;var C=(B in z);if(!C){C=typeof z[B]==g;if(!C&&z.setAttribute){z.setAttribute(B,b);C=typeof z[B]==g;z.removeAttribute(B);}}return C;}})}});})();(function(){var r="|bubble",q="|capture",p="|",o="",n="_",m="unload",k="UNKNOWN_",j="__fs",h="c",g="DOM_",c="__ft",f="WIN_",e="QX_",b="qx.event.Manager",a="capture",d="DOCUMENT_";qx.Class.define(b,{extend:Object,construct:function(s,t){this.__fo=s;this.__fp=qx.core.ObjectRegistry.toHashCode(s);this.__fq=t;if(s.qx!==qx){var self=this;qx.bom.Event.addNativeListener(s,m,qx.event.GlobalError.observeMethod(function(){qx.bom.Event.removeNativeListener(s,m,arguments.callee);self.dispose();}));}this.__fr={};this.__fs={};this.__ft={};this.__fu={};},statics:{__fv:0,getNextUniqueId:function(){return (this.__fv++)+o;}},members:{__fq:null,__fr:null,__ft:null,__fw:null,__fs:null,__fu:null,__fo:null,__fp:null,getWindow:function(){return this.__fo;},getWindowId:function(){return this.__fp;},getHandler:function(u){var v=this.__fs[u.classname];if(v){return v;}return this.__fs[u.classname]=new u(this);},getDispatcher:function(w){var x=this.__ft[w.classname];if(x){return x;}return this.__ft[w.classname]=new w(this,this.__fq);},getListeners:function(y,z,A){var B=y.$$hash||qx.core.ObjectRegistry.toHashCode(y);var D=this.__fr[B];if(!D){return null;}var E=z+(A?q:r);var C=D[E];return C?C.concat():null;},serializeListeners:function(F){var M=F.$$hash||qx.core.ObjectRegistry.toHashCode(F);var O=this.__fr[M];var K=[];if(O){var I,N,G,J,L;for(var H in O){I=H.indexOf(p);N=H.substring(0,I);G=H.charAt(I+1)==h;J=O[H];for(var i=0,l=J.length;i<l;i++){L=J[i];K.push({self:L.context,handler:L.handler,type:N,capture:G});}}}return K;},toggleAttachedEvents:function(P,Q){var V=P.$$hash||qx.core.ObjectRegistry.toHashCode(P);var X=this.__fr[V];if(X){var S,W,R,T;for(var U in X){S=U.indexOf(p);W=U.substring(0,S);R=U.charCodeAt(S+1)===99;T=X[U];if(Q){this.__fx(P,W,R);}else{this.__fy(P,W,R);}}}},hasListener:function(Y,ba,bb){{};var bc=Y.$$hash||qx.core.ObjectRegistry.toHashCode(Y);var be=this.__fr[bc];if(!be){return false;}var bf=ba+(bb?q:r);var bd=be[bf];return bd&&bd.length>0;},importListeners:function(bg,bh){{};var bn=bg.$$hash||qx.core.ObjectRegistry.toHashCode(bg);var bo=this.__fr[bn]={};var bk=qx.event.Manager;for(var bi in bh){var bl=bh[bi];var bm=bl.type+(bl.capture?q:r);var bj=bo[bm];if(!bj){bj=bo[bm]=[];this.__fx(bg,bl.type,bl.capture);}bj.push({handler:bl.listener,context:bl.self,unique:bl.unique||(bk.__fv++)+o});}},addListener:function(bp,bq,br,self,bs){var bw;{};var bx=bp.$$hash||qx.core.ObjectRegistry.toHashCode(bp);var bz=this.__fr[bx];if(!bz){bz=this.__fr[bx]={};}var bv=bq+(bs?q:r);var bu=bz[bv];if(!bu){bu=bz[bv]=[];}if(bu.length===0){this.__fx(bp,bq,bs);}var by=(qx.event.Manager.__fv++)+o;var bt={handler:br,context:self,unique:by};bu.push(bt);return bv+p+by;},findHandler:function(bA,bB){var bN=false,bF=false,bO=false,bC=false;var bL;if(bA.nodeType===1){bN=true;bL=g+bA.tagName.toLowerCase()+n+bB;}else if(bA.nodeType===9){bC=true;bL=d+bB;}else if(bA==this.__fo){bF=true;bL=f+bB;}else if(bA.classname){bO=true;bL=e+bA.classname+n+bB;}else{bL=k+bA+n+bB;}var bH=this.__fu;if(bH[bL]){return bH[bL];}var bK=this.__fq.getHandlers();var bG=qx.event.IEventHandler;var bI,bJ,bE,bD;for(var i=0,l=bK.length;i<l;i++){bI=bK[i];bE=bI.SUPPORTED_TYPES;if(bE&&!bE[bB]){continue;}bD=bI.TARGET_CHECK;if(bD){var bM=false;if(bN&&((bD&bG.TARGET_DOMNODE)!=0)){bM=true;}else if(bF&&((bD&bG.TARGET_WINDOW)!=0)){bM=true;}else if(bO&&((bD&bG.TARGET_OBJECT)!=0)){bM=true;}else if(bC&&((bD&bG.TARGET_DOCUMENT)!=0)){bM=true;}if(!bM){continue;}}bJ=this.getHandler(bK[i]);if(bI.IGNORE_CAN_HANDLE||bJ.canHandleEvent(bA,bB)){bH[bL]=bJ;return bJ;}}return null;},__fx:function(bP,bQ,bR){var bS=this.findHandler(bP,bQ);if(bS){bS.registerEvent(bP,bQ,bR);return;}{};},removeListener:function(bT,bU,bV,self,bW){var cb;{};var cc=bT.$$hash||qx.core.ObjectRegistry.toHashCode(bT);var cd=this.__fr[cc];if(!cd){return false;}var bX=bU+(bW?q:r);var bY=cd[bX];if(!bY){return false;}var ca;for(var i=0,l=bY.length;i<l;i++){ca=bY[i];if(ca.handler===bV&&ca.context===self){qx.lang.Array.removeAt(bY,i);if(bY.length==0){this.__fy(bT,bU,bW);}return true;}}return false;},removeListenerById:function(ce,cf){var cl;{};var cj=cf.split(p);var co=cj[0];var cg=cj[1].charCodeAt(0)==99;var cn=cj[2];var cm=ce.$$hash||qx.core.ObjectRegistry.toHashCode(ce);var cp=this.__fr[cm];if(!cp){return false;}var ck=co+(cg?q:r);var ci=cp[ck];if(!ci){return false;}var ch;for(var i=0,l=ci.length;i<l;i++){ch=ci[i];if(ch.unique===cn){qx.lang.Array.removeAt(ci,i);if(ci.length==0){this.__fy(ce,co,cg);}return true;}}return false;},removeAllListeners:function(cq){var cu=cq.$$hash||qx.core.ObjectRegistry.toHashCode(cq);var cw=this.__fr[cu];if(!cw){return false;}var cs,cv,cr;for(var ct in cw){if(cw[ct].length>0){cs=ct.split(p);cv=cs[0];cr=cs[1]===a;this.__fy(cq,cv,cr);}}delete this.__fr[cu];return true;},deleteAllListeners:function(cx){delete this.__fr[cx];},__fy:function(cy,cz,cA){var cB=this.findHandler(cy,cz);if(cB){cB.unregisterEvent(cy,cz,cA);return;}{};},dispatchEvent:function(cC,event){var cH;{};var cI=event.getType();if(!event.getBubbles()&&!this.hasListener(cC,cI)){qx.event.Pool.getInstance().poolObject(event);return true;}if(!event.getTarget()){event.setTarget(cC);}var cG=this.__fq.getDispatchers();var cF;var cE=false;for(var i=0,l=cG.length;i<l;i++){cF=this.getDispatcher(cG[i]);if(cF.canDispatchEvent(cC,event,cI)){cF.dispatchEvent(cC,event,cI);cE=true;break;}}if(!cE){{};return true;}var cD=event.getDefaultPrevented();qx.event.Pool.getInstance().poolObject(event);return !cD;},dispose:function(){this.__fq.removeManager(this);qx.util.DisposeUtil.disposeMap(this,j);qx.util.DisposeUtil.disposeMap(this,c);this.__fr=this.__fo=this.__fw=null;this.__fq=this.__fu=null;}}});})();(function(){var g="mshtml",f="qx.client",e="[object Array]",d="qx.lang.Array",c="qx",b="number",a="string";qx.Class.define(d,{statics:{toArray:function(h,j){return this.cast(h,Array,j);},cast:function(k,m,n){if(k.constructor===m){return k;}if(qx.Class.hasInterface(k,qx.data.IListData)){var k=k.toArray();}var o=new m;if(qx.core.Variant.isSet(f,g)){if(k.item){for(var i=n||0,l=k.length;i<l;i++){o.push(k[i]);}return o;}}if(Object.prototype.toString.call(k)===e&&n==null){o.push.apply(o,k);}else{o.push.apply(o,Array.prototype.slice.call(k,n||0));}return o;},fromArguments:function(p,q){return Array.prototype.slice.call(p,q||0);},fromCollection:function(r){if(qx.core.Variant.isSet(f,g)){if(r.item){var s=[];for(var i=0,l=r.length;i<l;i++){s[i]=r[i];}return s;}}return Array.prototype.slice.call(r,0);},fromShortHand:function(t){var v=t.length;var u=qx.lang.Array.clone(t);switch(v){case 1:u[1]=u[2]=u[3]=u[0];break;case 2:u[2]=u[0];case 3:u[3]=u[1];}return u;},clone:function(w){return w.concat();},insertAt:function(x,y,i){x.splice(i,0,y);return x;},insertBefore:function(z,A,B){var i=z.indexOf(B);if(i==-1){z.push(A);}else{z.splice(i,0,A);}return z;},insertAfter:function(C,D,E){var i=C.indexOf(E);if(i==-1||i==(C.length-1)){C.push(D);}else{C.splice(i+1,0,D);}return C;},removeAt:function(F,i){return F.splice(i,1)[0];},removeAll:function(G){G.length=0;return this;},append:function(H,I){{};Array.prototype.push.apply(H,I);return H;},exclude:function(J,K){{};for(var i=0,M=K.length,L;i<M;i++){L=J.indexOf(K[i]);if(L!=-1){J.splice(L,1);}}return J;},remove:function(N,O){var i=N.indexOf(O);if(i!=-1){N.splice(i,1);return O;}},contains:function(P,Q){return P.indexOf(Q)!==-1;},equals:function(R,S){var length=R.length;if(length!==S.length){return false;}for(var i=0;i<length;i++){if(R[i]!==S[i]){return false;}}return true;},sum:function(T){var U=0;for(var i=0,l=T.length;i<l;i++){U+=T[i];}return U;},max:function(V){{};var i,X=V.length,W=V[0];for(i=1;i<X;i++){if(V[i]>W){W=V[i];}}return W===undefined?null:W;},min:function(Y){{};var i,bb=Y.length,ba=Y[0];for(i=1;i<bb;i++){if(Y[i]<ba){ba=Y[i];}}return ba===undefined?null:ba;},unique:function(bc){var bm=[],be={},bh={},bj={};var bi,bd=0;var bn=c+qx.lang.Date.now();var bf=false,bl=false,bo=false;for(var i=0,bk=bc.length;i<bk;i++){bi=bc[i];if(bi===null){if(!bf){bf=true;bm.push(bi);}}else if(bi===undefined){}else if(bi===false){if(!bl){bl=true;bm.push(bi);}}else if(bi===true){if(!bo){bo=true;bm.push(bi);}}else if(typeof bi===a){if(!be[bi]){be[bi]=1;bm.push(bi);}}else if(typeof bi===b){if(!bh[bi]){bh[bi]=1;bm.push(bi);}}else{bg=bi[bn];if(bg==null){bg=bi[bn]=bd++;}if(!bj[bg]){bj[bg]=bi;bm.push(bi);}}}for(var bg in bj){try{delete bj[bg][bn];}catch(bp){try{bj[bg][bn]=null;}catch(bq){throw new Error("Cannot clean-up map entry doneObjects["+bg+"]["+bn+"]");}}}return bm;}}});})();(function(){var f="()",e=".",d=".prototype.",c='anonymous()',b="qx.lang.Function",a=".constructor()";qx.Class.define(b,{statics:{getCaller:function(g){return g.caller?g.caller.callee:g.callee.caller;},getName:function(h){if(h.displayName){return h.displayName;}if(h.$$original||h.wrapper||h.classname){return h.classname+a;}if(h.$$mixin){for(var j in h.$$mixin.$$members){if(h.$$mixin.$$members[j]==h){return h.$$mixin.name+d+j+f;}}for(var j in h.$$mixin){if(h.$$mixin[j]==h){return h.$$mixin.name+e+j+f;}}}if(h.self){var k=h.self.constructor;if(k){for(var j in k.prototype){if(k.prototype[j]==h){return k.classname+d+j+f;}}for(var j in k){if(k[j]==h){return k.classname+e+j+f;}}}}var i=h.toString().match(/function\s*(\w*)\s*\(.*/);if(i&&i.length>=1&&i[1]){return i[1]+f;}return c;},globalEval:function(l){if(window.execScript){return window.execScript(l);}else{return eval.call(window,l);}},empty:function(){},returnTrue:function(){return true;},returnFalse:function(){return false;},returnNull:function(){return null;},returnThis:function(){return this;},returnZero:function(){return 0;},create:function(m,n){{};if(!n){return m;}if(!(n.self||n.args||n.delay!=null||n.periodical!=null||n.attempt)){return m;}return function(event){{};var p=qx.lang.Array.fromArguments(arguments);if(n.args){p=n.args.concat(p);}if(n.delay||n.periodical){var o=qx.event.GlobalError.observeMethod(function(){return m.apply(n.self||this,p);});if(n.delay){return window.setTimeout(o,n.delay);}if(n.periodical){return window.setInterval(o,n.periodical);}}else if(n.attempt){var q=false;try{q=m.apply(n.self||this,p);}catch(r){}return q;}else{return m.apply(n.self||this,p);}};},bind:function(s,self,t){return this.create(s,{self:self,args:arguments.length>2?qx.lang.Array.fromArguments(arguments,2):null});},curry:function(u,v){return this.create(u,{args:arguments.length>1?qx.lang.Array.fromArguments(arguments,1):null});},listener:function(w,self,x){if(arguments.length<3){return function(event){return w.call(self||this,event||window.event);};}else{var y=qx.lang.Array.fromArguments(arguments,2);return function(event){var z=[event||window.event];z.push.apply(z,y);w.apply(self||this,z);};}},attempt:function(A,self,B){return this.create(A,{self:self,attempt:true,args:arguments.length>2?qx.lang.Array.fromArguments(arguments,2):null})();},delay:function(C,D,self,E){return this.create(C,{delay:D,self:self,args:arguments.length>3?qx.lang.Array.fromArguments(arguments,3):null})();},periodical:function(F,G,self,H){return this.create(F,{periodical:G,self:self,args:arguments.length>3?qx.lang.Array.fromArguments(arguments,3):null})();}}});})();(function(){var c="qx.event.Registration";qx.Class.define(c,{statics:{__fc:{},getManager:function(d){if(d==null){{};d=window;}else if(d.nodeType){d=qx.dom.Node.getWindow(d);}else if(!qx.dom.Node.isWindow(d)){d=window;}var f=d.$$hash||qx.core.ObjectRegistry.toHashCode(d);var e=this.__fc[f];if(!e){e=new qx.event.Manager(d,this);this.__fc[f]=e;}return e;},removeManager:function(g){var h=g.getWindowId();delete this.__fc[h];},addListener:function(i,j,k,self,l){return this.getManager(i).addListener(i,j,k,self,l);},removeListener:function(m,n,o,self,p){return this.getManager(m).removeListener(m,n,o,self,p);},removeListenerById:function(q,r){return this.getManager(q).removeListenerById(q,r);},removeAllListeners:function(s){return this.getManager(s).removeAllListeners(s);},deleteAllListeners:function(t){var u=t.$$hash;if(u){this.getManager(t).deleteAllListeners(u);}},hasListener:function(v,w,x){return this.getManager(v).hasListener(v,w,x);},serializeListeners:function(y){return this.getManager(y).serializeListeners(y);},createEvent:function(z,A,B){{};if(A==null){A=qx.event.type.Event;}var C=qx.event.Pool.getInstance().getObject(A);B?C.init.apply(C,B):C.init();if(z){C.setType(z);}return C;},dispatchEvent:function(D,event){return this.getManager(D).dispatchEvent(D,event);},fireEvent:function(E,F,G,H){var I;{};var J=this.createEvent(F,G||null,H);return this.getManager(E).dispatchEvent(E,J);},fireNonBubblingEvent:function(K,L,M,N){{};var O=this.getManager(K);if(!O.hasListener(K,L,false)){return true;}var P=this.createEvent(L,M||null,N);return O.dispatchEvent(K,P);},PRIORITY_FIRST:-32000,PRIORITY_NORMAL:0,PRIORITY_LAST:32000,__fd:[],addHandler:function(Q){{};this.__fd.push(Q);this.__fd.sort(function(a,b){return a.PRIORITY-b.PRIORITY;});},getHandlers:function(){return this.__fd;},__fe:[],addDispatcher:function(R,S){{};this.__fe.push(R);this.__fe.sort(function(a,b){return a.PRIORITY-b.PRIORITY;});},getDispatchers:function(){return this.__fe;}}});})();(function(){var e="$$hash",d="",c="qx.core.ObjectRegistry";qx.Class.define(c,{statics:{inShutDown:false,__cM:{},__cN:0,__cO:[],register:function(f){var j=this.__cM;if(!j){return;}var h=f.$$hash;if(h==null){var g=this.__cO;if(g.length>0){h=g.pop();}else{h=(this.__cN++)+d;}f.$$hash=h;}{};j[h]=f;},unregister:function(k){var m=k.$$hash;if(m==null){return;}var n=this.__cM;if(n&&n[m]){delete n[m];this.__cO.push(m);}try{delete k.$$hash;}catch(o){if(k.removeAttribute){k.removeAttribute(e);}}},toHashCode:function(p){{};var r=p.$$hash;if(r!=null){return r;}var q=this.__cO;if(q.length>0){r=q.pop();}else{r=(this.__cN++)+d;}return p.$$hash=r;},clearHashCode:function(s){{};var t=s.$$hash;if(t!=null){this.__cO.push(t);try{delete s.$$hash;}catch(u){if(s.removeAttribute){s.removeAttribute(e);}}}},fromHashCode:function(v){return this.__cM[v]||null;},shutdown:function(){this.inShutDown=true;var x=this.__cM;var z=[];for(var y in x){z.push(y);}z.sort(function(a,b){return parseInt(b,10)-parseInt(a,10);});var w,i=0,l=z.length;while(true){try{for(;i<l;i++){y=z[i];w=x[y];if(w&&w.dispose){w.dispose();}}}catch(A){qx.Bootstrap.error(this,"Could not dispose object "+w.toString()+": "+A);if(i!==l){i++;continue;}}break;}qx.Bootstrap.debug(this,"Disposed "+l+" objects");delete this.__cM;},getRegistry:function(){return this.__cM;}}});})();(function(){var a="qx.data.MBinding";qx.Mixin.define(a,{members:{bind:function(b,c,d,e){return qx.data.SingleValueBinding.bind(this,b,c,d,e);},removeBinding:function(f){qx.data.SingleValueBinding.removeBindingFromObject(this,f);},removeAllBindings:function(){qx.data.SingleValueBinding.removeAllBindingsForObject(this);},getBindings:function(){return qx.data.SingleValueBinding.getAllBindingsForObject(this);}}});})();(function(){var a="qx.lang.RingBuffer";qx.Class.define(a,{extend:Object,construct:function(b){this.setMaxEntries(b||50);},members:{__iq:0,__ir:0,__is:false,__it:0,__iu:null,__iv:null,setMaxEntries:function(c){this.__iv=c;this.clear();},getMaxEntries:function(){return this.__iv;},addEntry:function(d){this.__iu[this.__iq]=d;this.__iq=this.__iw(this.__iq,1);var e=this.getMaxEntries();if(this.__ir<e){this.__ir++;}if(this.__is&&(this.__it<e)){this.__it++;}},mark:function(){this.__is=true;this.__it=0;},clearMark:function(){this.__is=false;},getAllEntries:function(){return this.getEntries(this.getMaxEntries(),false);},getEntries:function(f,g){if(f>this.__ir){f=this.__ir;}if(g&&this.__is&&(f>this.__it)){f=this.__it;}if(f>0){var i=this.__iw(this.__iq,-1);var h=this.__iw(i,-f+1);var j;if(h<=i){j=this.__iu.slice(h,i+1);}else{j=this.__iu.slice(h,this.__ir).concat(this.__iu.slice(0,i+1));}}else{j=[];}return j;},clear:function(){this.__iu=new Array(this.getMaxEntries());this.__ir=0;this.__it=0;this.__iq=0;},__iw:function(k,l){var m=this.getMaxEntries();var n=(k+l)%m;if(n<0){n+=m;}return n;}}});})();(function(){var a="qx.log.appender.RingBuffer";qx.Class.define(a,{extend:qx.lang.RingBuffer,construct:function(b){this.setMaxMessages(b||50);},members:{setMaxMessages:function(c){this.setMaxEntries(c);},getMaxMessages:function(){return this.getMaxEntries();},process:function(d){this.addEntry(d);},getAllLogEvents:function(){return this.getAllEntries();},retrieveLogEvents:function(e,f){return this.getEntries(e,f);},clearHistory:function(){this.clear();}}});})();(function(){var j=":",h="qx.client",g="anonymous",f="...",e="qx.dev.StackTrace",d="",c="\n",b="/source/class/",a=".";qx.Class.define(e,{statics:{getStackTrace:qx.core.Variant.select(h,{"gecko":function(){try{throw new Error();}catch(x){var r=this.getStackTraceFromError(x);qx.lang.Array.removeAt(r,0);var p=this.getStackTraceFromCaller(arguments);var n=p.length>r.length?p:r;for(var i=0;i<Math.min(p.length,r.length);i++){var o=p[i];if(o.indexOf(g)>=0){continue;}var v=o.split(j);if(v.length!=2){continue;}var t=v[0];var m=v[1];var l=r[i];var w=l.split(j);var s=w[0];var k=w[1];if(qx.Class.getByName(s)){var q=s;}else{q=t;}var u=q+j;if(m){u+=m+j;}u+=k;n[i]=u;}return n;}},"mshtml|webkit":function(){return this.getStackTraceFromCaller(arguments);},"opera":function(){var y;try{y.bar();}catch(A){var z=this.getStackTraceFromError(A);qx.lang.Array.removeAt(z,0);return z;}return [];}}),getStackTraceFromCaller:qx.core.Variant.select(h,{"opera":function(B){return [];},"default":function(C){var H=[];var G=qx.lang.Function.getCaller(C);var D={};while(G){var E=qx.lang.Function.getName(G);H.push(E);try{G=G.caller;}catch(I){break;}if(!G){break;}var F=qx.core.ObjectRegistry.toHashCode(G);if(D[F]){H.push(f);break;}D[F]=G;}return H;}}),getStackTraceFromError:qx.core.Variant.select(h,{"gecko":function(J){if(!J.stack){return [];}var P=/@(.+):(\d+)$/gm;var K;var L=[];while((K=P.exec(J.stack))!=null){var M=K[1];var O=K[2];var N=this.__kR(M);L.push(N+j+O);}return L;},"webkit":function(Q){if(Q.sourceURL&&Q.line){return [this.__kR(Q.sourceURL)+j+Q.line];}else{return [];}},"opera":function(R){if(R.message.indexOf("Backtrace:")<0){return [];}var T=[];var U=qx.lang.String.trim(R.message.split("Backtrace:")[1]);var V=U.split(c);for(var i=0;i<V.length;i++){var S=V[i].match(/\s*Line ([0-9]+) of.* (\S.*)/);if(S&&S.length>=2){var X=S[1];var W=this.__kR(S[2]);T.push(W+j+X);}}return T;},"default":function(){return [];}}),__kR:function(Y){var bc=b;var ba=Y.indexOf(bc);var bb=(ba==-1)?Y:Y.substring(ba+bc.length).replace(/\//g,a).replace(/\.js$/,d);return bb;}}});})();(function(){var k="",j="g",h="0",g='\\$1',f="%",e='-',d="qx.lang.String",c=' ',b='\n',a="undefined";qx.Class.define(d,{statics:{camelCase:function(l){return l.replace(/\-([a-z])/g,function(m,n){return n.toUpperCase();});},hyphenate:function(o){return o.replace(/[A-Z]/g,function(p){return (e+p.charAt(0).toLowerCase());});},capitalize:function(q){return q.replace(/\b[a-z]/g,function(r){return r.toUpperCase();});},clean:function(s){return this.trim(s.replace(/\s+/g,c));},trimLeft:function(t){return t.replace(/^\s+/,k);},trimRight:function(u){return u.replace(/\s+$/,k);},trim:function(v){return v.replace(/^\s+|\s+$/g,k);},startsWith:function(w,x){return w.indexOf(x)===0;},endsWith:function(y,z){return y.substring(y.length-z.length,y.length)===z;},repeat:function(A,B){return A.length>0?new Array(B+1).join(A):k;},pad:function(C,length,D){var E=length-C.length;if(E>0){if(typeof D===a){D=h;}return this.repeat(D,E)+C;}else{return C;}},firstUp:qx.Bootstrap.firstUp,firstLow:qx.Bootstrap.firstLow,contains:function(F,G){return F.indexOf(G)!=-1;},format:function(H,I){var J=H;for(var i=0;i<I.length;i++){J=J.replace(new RegExp(f+(i+1),j),I[i]+k);}return J;},escapeRegexpChars:function(K){return K.replace(/([.*+?^${}()|[\]\/\\])/g,g);},toArray:function(L){return L.split(/\B|\b/g);},stripTags:function(M){return M.replace(/<\/?[^>]+>/gi,k);},stripScripts:function(N,O){var Q=k;var P=N.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){Q+=arguments[1]+b;return k;});if(O===true){qx.lang.Function.globalEval(Q);}return P;}}});})();(function(){var k="node",j="error",h="...(+",g="array",f=")",e="info",d="instance",c="string",b="null",a="class",H="number",G="stringify",F="]",E="date",D="unknown",C="function",B="boolean",A="debug",z="map",y="undefined",s="qx.log.Logger",t="[",q="#",r="warn",o="document",p="{...(",m="text[",n="[...(",u="\n",v=")}",x=")]",w="object";qx.Class.define(s,{statics:{__ff:A,setLevel:function(I){this.__ff=I;},getLevel:function(){return this.__ff;},setTreshold:function(J){this.__fi.setMaxMessages(J);},getTreshold:function(){return this.__fi.getMaxMessages();},__fg:{},__fh:0,register:function(K){if(K.$$id){return;}var M=this.__fh++;this.__fg[M]=K;K.$$id=M;var L=this.__fj;var N=this.__fi.getAllLogEvents();for(var i=0,l=N.length;i<l;i++){if(L[N[i].level]>=L[this.__ff]){K.process(N[i]);}}},unregister:function(O){var P=O.$$id;if(P==null){return;}delete this.__fg[P];delete O.$$id;},debug:function(Q,R){qx.log.Logger.__fk(A,arguments);},info:function(S,T){qx.log.Logger.__fk(e,arguments);},warn:function(U,V){qx.log.Logger.__fk(r,arguments);},error:function(W,X){qx.log.Logger.__fk(j,arguments);},trace:function(Y){qx.log.Logger.__fk(e,[Y,qx.dev.StackTrace.getStackTrace().join(u)]);},deprecatedMethodWarning:function(ba,bb){var bc;{};},deprecatedClassWarning:function(bd,be){var bf;{};},deprecatedEventWarning:function(bg,event,bh){var bi;{};},deprecatedMixinWarning:function(bj,bk){var bl;{};},deprecatedConstantWarning:function(bm,bn,bo){var self,bp;{};},deprecateMethodOverriding:function(bq,br,bs,bt){var bu;{};},clear:function(){this.__fi.clearHistory();},__fi:new qx.log.appender.RingBuffer(50),__fj:{debug:0,info:1,warn:2,error:3},__fk:function(bv,bw){var bB=this.__fj;if(bB[bv]<bB[this.__ff]){return;}var by=bw.length<2?null:bw[0];var bA=by?1:0;var bx=[];for(var i=bA,l=bw.length;i<l;i++){bx.push(this.__fm(bw[i],true));}var bC=new Date;var bD={time:bC,offset:bC-qx.Bootstrap.LOADSTART,level:bv,items:bx,win:window};if(by){if(by.$$hash!==undefined){bD.object=by.$$hash;}else if(by.$$type){bD.clazz=by;}}this.__fi.process(bD);var bE=this.__fg;for(var bz in bE){bE[bz].process(bD);}},__fl:function(bF){if(bF===undefined){return y;}else if(bF===null){return b;}if(bF.$$type){return a;}var bG=typeof bF;if(bG===C||bG==c||bG===H||bG===B){return bG;}else if(bG===w){if(bF.nodeType){return k;}else if(bF.classname){return d;}else if(bF instanceof Array){return g;}else if(bF instanceof Error){return j;}else if(bF instanceof Date){return E;}else{return z;}}if(bF.toString){return G;}return D;},__fm:function(bH,bI){var bP=this.__fl(bH);var bL=D;var bK=[];switch(bP){case b:case y:bL=bP;break;case c:case H:case B:case E:bL=bH;break;case k:if(bH.nodeType===9){bL=o;}else if(bH.nodeType===3){bL=m+bH.nodeValue+F;}else if(bH.nodeType===1){bL=bH.nodeName.toLowerCase();if(bH.id){bL+=q+bH.id;}}else{bL=k;}break;case C:bL=qx.lang.Function.getName(bH)||bP;break;case d:bL=bH.basename+t+bH.$$hash+F;break;case a:case G:bL=bH.toString();break;case j:bK=qx.dev.StackTrace.getStackTraceFromError(bH);bL=bH.toString();break;case g:if(bI){bL=[];for(var i=0,l=bH.length;i<l;i++){if(bL.length>20){bL.push(h+(l-i)+f);break;}bL.push(this.__fm(bH[i],false));}}else{bL=n+bH.length+x;}break;case z:if(bI){var bJ;var bO=[];for(var bN in bH){bO.push(bN);}bO.sort();bL=[];for(var i=0,l=bO.length;i<l;i++){if(bL.length>20){bL.push(h+(l-i)+f);break;}bN=bO[i];bJ=this.__fm(bH[bN],false);bJ.key=bN;bL.push(bJ);}}else{var bM=0;for(var bN in bH){bM++;}bL=p+bM+v;}break;}return {type:bP,text:bL,trace:bK};}},defer:function(bQ){var bR=qx.Bootstrap.$$logs;for(var i=0;i<bR.length;i++){bQ.__fk(bR[i][0],bR[i][1]);}qx.Bootstrap.debug=bQ.debug;qx.Bootstrap.info=bQ.info;qx.Bootstrap.warn=bQ.warn;qx.Bootstrap.error=bQ.error;qx.Bootstrap.trace=bQ.trace;}});})();(function(){var q="set",p="get",o="reset",n="MSIE 6.0",m="info",k="qx.core.Object",j="error",h="warn",g="]",f="debug",b="[",d="$$user_",c="rv:1.8.1",a="Object";qx.Class.define(k,{extend:Object,include:[qx.data.MBinding],construct:function(){qx.core.ObjectRegistry.register(this);},statics:{$$type:a},members:{toHashCode:function(){return this.$$hash;},toString:function(){return this.classname+b+this.$$hash+g;},base:function(r,s){{};if(arguments.length===1){return r.callee.base.call(this);}else{return r.callee.base.apply(this,Array.prototype.slice.call(arguments,1));}},self:function(t){return t.callee.self;},clone:function(){var v=this.constructor;var u=new v;var x=qx.Class.getProperties(v);var w=qx.core.Property.$$store.user;var y=qx.core.Property.$$method.set;var name;for(var i=0,l=x.length;i<l;i++){name=x[i];if(this.hasOwnProperty(w[name])){u[y[name]](this[w[name]]);}}return u;},set:function(z,A){var C=qx.core.Property.$$method.set;if(qx.Bootstrap.isString(z)){if(!this[C[z]]){if(this[q+qx.Bootstrap.firstUp(z)]!=undefined){this[q+qx.Bootstrap.firstUp(z)](A);return this;}{};}return this[C[z]](A);}else{for(var B in z){if(!this[C[B]]){if(this[q+qx.Bootstrap.firstUp(B)]!=undefined){this[q+qx.Bootstrap.firstUp(B)](z[B]);continue;}{};}this[C[B]](z[B]);}return this;}},get:function(D){var E=qx.core.Property.$$method.get;if(!this[E[D]]){if(this[p+qx.Bootstrap.firstUp(D)]!=undefined){return this[p+qx.Bootstrap.firstUp(D)]();}{};}return this[E[D]]();},reset:function(F){var G=qx.core.Property.$$method.reset;if(!this[G[F]]){if(this[o+qx.Bootstrap.firstUp(F)]!=undefined){this[o+qx.Bootstrap.firstUp(F)]();return;}{};}this[G[F]]();},__lw:qx.event.Registration,addListener:function(H,I,self,J){if(!this.$$disposed){return this.__lw.addListener(this,H,I,self,J);}return null;},addListenerOnce:function(K,L,self,M){var N=function(e){this.removeListener(K,N,this,M);L.call(self||this,e);};return this.addListener(K,N,this,M);},removeListener:function(O,P,self,Q){if(!this.$$disposed){return this.__lw.removeListener(this,O,P,self,Q);}return false;},removeListenerById:function(R){if(!this.$$disposed){return this.__lw.removeListenerById(this,R);}return false;},hasListener:function(S,T){return this.__lw.hasListener(this,S,T);},dispatchEvent:function(U){if(!this.$$disposed){return this.__lw.dispatchEvent(this,U);}return true;},fireEvent:function(V,W,X){if(!this.$$disposed){return this.__lw.fireEvent(this,V,W,X);}return true;},fireNonBubblingEvent:function(Y,ba,bb){if(!this.$$disposed){return this.__lw.fireNonBubblingEvent(this,Y,ba,bb);}return true;},fireDataEvent:function(bc,bd,be,bf){if(!this.$$disposed){if(be===undefined){be=null;}return this.__lw.fireNonBubblingEvent(this,bc,qx.event.type.Data,[bd,be,!!bf]);}return true;},__lx:null,setUserData:function(bg,bh){if(!this.__lx){this.__lx={};}this.__lx[bg]=bh;},getUserData:function(bi){if(!this.__lx){return null;}var bj=this.__lx[bi];return bj===undefined?null:bj;},__ly:qx.log.Logger,debug:function(bk){this.__lz(f,arguments);},info:function(bl){this.__lz(m,arguments);},warn:function(bm){this.__lz(h,arguments);},error:function(bn){this.__lz(j,arguments);},trace:function(){this.__ly.trace(this);},__lz:function(bo,bp){var bq=qx.lang.Array.fromArguments(bp);bq.unshift(this);this.__ly[bo].apply(this.__ly,bq);},isDisposed:function(){return this.$$disposed||false;},dispose:function(){var bv,bt,bs,bw;if(this.$$disposed){return;}this.$$disposed=true;this.$$instance=null;this.$$allowconstruct=null;{};var bu=this.constructor;var br;while(bu.superclass){if(bu.$$destructor){bu.$$destructor.call(this);}if(bu.$$includes){br=bu.$$flatIncludes;for(var i=0,l=br.length;i<l;i++){if(br[i].$$destructor){br[i].$$destructor.call(this);}}}bu=bu.superclass;}if(this.__lA){this.__lA();}{};},__lA:null,__lB:function(){var bx=qx.Class.getProperties(this.constructor);for(var i=0,l=bx.length;i<l;i++){delete this[d+bx[i]];}},_disposeObjects:function(by){qx.util.DisposeUtil.disposeObjects(this,arguments);},_disposeSingletonObjects:function(bz){qx.util.DisposeUtil.disposeObjects(this,arguments,true);},_disposeArray:function(bA){qx.util.DisposeUtil.disposeArray(this,bA);},_disposeMap:function(bB){qx.util.DisposeUtil.disposeMap(this,bB);}},settings:{"qx.disposerDebugLevel":0},defer:function(bC,bD){{};var bF=navigator.userAgent.indexOf(n)!=-1;var bE=navigator.userAgent.indexOf(c)!=-1;if(bF||bE){bD.__lA=bD.__lB;}},destruct:function(){if(!qx.core.ObjectRegistry.inShutDown){qx.event.Registration.removeAllListeners(this);}else{qx.event.Registration.deleteAllListeners(this);}qx.core.ObjectRegistry.unregister(this);this.__lx=null;var bI=this.constructor;var bM;var bN=qx.core.Property.$$store;var bK=bN.user;var bL=bN.theme;var bG=bN.inherit;var bJ=bN.useinit;var bH=bN.init;while(bI){bM=bI.$$properties;if(bM){for(var name in bM){if(bM[name].dereference){this[bK[name]]=this[bL[name]]=this[bG[name]]=this[bJ[name]]=this[bH[name]]=undefined;}}}bI=bI.superclass;}}});})();(function(){var f="changeSelection",e="qx.event.type.Data",d="tabView",c="apiviewer.TabViewController",b="classLinkClicked",a="itemName";qx.Class.define(c,{extend:qx.core.Object,construct:function(g){qx.core.Object.call(this);apiviewer.TabViewController.instance=this;this._tabView=g.getWidgetById(d);this._tabView.addListener(f,this.__Sm,this);},events:{"classLinkClicked":e,"changeSelection":e},members:{showTabView:function(){this._tabView.show();},onSelectItem:function(h){this.fireDataEvent(b,h);},showItem:function(i){qx.ui.core.queue.Manager.flush();var j=this._tabView.getSelection()[0];j.setUserData(a,i);return j.getChildren()[0].showItem(i);},openPackage:function(k,l){this.__Sj(k,apiviewer.ui.tabview.PackagePage,l);},openClass:function(m,n){this.__Sj(m,apiviewer.ui.tabview.ClassPage,n);},__Sj:function(o,p,q){var r=this._tabView.getSelection()[0];if(q==true||r==null){this.__Sk(p,o);}else{if(r instanceof p){r.setClassNode(o);}else{this.__Sk(p,o);this.__Sl(r);}}},__Sk:function(s,t){var u=new s(t);this._tabView.add(u);this._tabView.setSelection([u]);},__Sl:function(v){this._tabView.remove(v);v.destroy();},__Sm:function(event){var w=event.getOldData();var x=event.getData();this.fireDataEvent(f,x,w);},__Sn:function(y,z){var A=new qx.event.type.Mouse();A.init(y,z,null,true,true);A.stop();return A;}},destruct:function(){this._tabView.destroy();this._tabView=null;}});})();(function(){var a="qx.event.type.Event";qx.Class.define(a,{extend:qx.core.Object,statics:{CAPTURING_PHASE:1,AT_TARGET:2,BUBBLING_PHASE:3},members:{init:function(b,c){{};this._type=null;this._target=null;this._currentTarget=null;this._relatedTarget=null;this._originalTarget=null;this._stopPropagation=false;this._preventDefault=false;this._bubbles=!!b;this._cancelable=!!c;this._timeStamp=(new Date()).getTime();this._eventPhase=null;return this;},clone:function(d){if(d){var e=d;}else{var e=qx.event.Pool.getInstance().getObject(this.constructor);}e._type=this._type;e._target=this._target;e._currentTarget=this._currentTarget;e._relatedTarget=this._relatedTarget;e._originalTarget=this._originalTarget;e._stopPropagation=this._stopPropagation;e._bubbles=this._bubbles;e._preventDefault=this._preventDefault;e._cancelable=this._cancelable;return e;},stop:function(){if(this._bubbles){this.stopPropagation();}if(this._cancelable){this.preventDefault();}},stopPropagation:function(){{};this._stopPropagation=true;},getPropagationStopped:function(){return !!this._stopPropagation;},preventDefault:function(){{};this._preventDefault=true;},getDefaultPrevented:function(){return !!this._preventDefault;},getType:function(){return this._type;},setType:function(f){this._type=f;},getEventPhase:function(){return this._eventPhase;},setEventPhase:function(g){this._eventPhase=g;},getTimeStamp:function(){return this._timeStamp;},getTarget:function(){return this._target;},setTarget:function(h){this._target=h;},getCurrentTarget:function(){return this._currentTarget||this._target;},setCurrentTarget:function(i){this._currentTarget=i;},getRelatedTarget:function(){return this._relatedTarget;},setRelatedTarget:function(j){this._relatedTarget=j;},getOriginalTarget:function(){return this._originalTarget;},setOriginalTarget:function(k){this._originalTarget=k;},getBubbles:function(){return this._bubbles;},setBubbles:function(l){this._bubbles=l;},isCancelable:function(){return this._cancelable;},setCancelable:function(m){this._cancelable=m;}},destruct:function(){this._target=this._currentTarget=this._relatedTarget=this._originalTarget=null;}});})();(function(){var a="qx.event.type.Data";qx.Class.define(a,{extend:qx.event.type.Event,members:{__jO:null,__jP:null,init:function(b,c,d){qx.event.type.Event.prototype.init.call(this,false,d);this.__jO=b;this.__jP=c;return this;},clone:function(e){var f=qx.event.type.Event.prototype.clone.call(this,e);f.__jO=this.__jO;f.__jP=this.__jP;return f;},getData:function(){return this.__jO;},getOldData:function(){return this.__jP;}},destruct:function(){this.__jO=this.__jP=null;}});})();(function(){var c="qx.globalErrorHandling",b="on",a="qx.event.GlobalError";qx.Bootstrap.define(a,{statics:{setErrorHandler:function(d,f){this.__kx=d||null;this.__ky=f||window;if(qx.core.Setting.get(c)===b){if(d&&window.onerror){var g=qx.Bootstrap.bind(this.__kA,this);if(this.__kz==null){this.__kz=window.onerror;}var self=this;window.onerror=function(e){self.__kz(e);g(e);};}if(d&&!window.onerror){window.onerror=qx.Bootstrap.bind(this.__kA,this);}if(this.__kx==null){if(this.__kz!=null){window.onerror=this.__kz;this.__kz=null;}else{window.onerror=null;}}}},__kA:function(h,i,j){if(this.__kx){this.handleError(new qx.core.WindowError(h,i,j));return true;}},observeMethod:function(k){if(qx.core.Setting.get(c)===b){var self=this;return function(){if(!self.__kx){return k.apply(this,arguments);}try{return k.apply(this,arguments);}catch(l){self.handleError(new qx.core.GlobalError(l,arguments));}};}else{return k;}},handleError:function(m){if(this.__kx){this.__kx.call(this.__ky,m);}}},defer:function(n){qx.core.Setting.define(c,b);n.setErrorHandler(null,null);}});})();(function(){var b="",a="qx.core.WindowError";qx.Bootstrap.define(a,{extend:Error,construct:function(c,d,e){Error.call(this,c);this.__cW=c;this.__cX=d||b;this.__cY=e===undefined?-1:e;},members:{__cW:null,__cX:null,__cY:null,toString:function(){return this.__cW;},getUri:function(){return this.__cX;},getLineNumber:function(){return this.__cY;}}});})();(function(){var b="GlobalError: ",a="qx.core.GlobalError";qx.Bootstrap.define(a,{extend:Error,construct:function(c,d){{};this.__kS=b+(c&&c.message?c.message:c);Error.call(this,this.__kS);this.__kT=d;this.__kU=c;},members:{__kU:null,__kT:null,__kS:null,toString:function(){return this.__kS;},getArguments:function(){return this.__kT;},getSourceException:function(){return this.__kU;}},destruct:function(){this.__kU=null;this.__kT=null;this.__kS=null;}});})();(function(){var a="qx.event.IEventHandler";qx.Interface.define(a,{statics:{TARGET_DOMNODE:1,TARGET_WINDOW:2,TARGET_OBJECT:4,TARGET_DOCUMENT:8},members:{canHandleEvent:function(b,c){},registerEvent:function(d,e,f){},unregisterEvent:function(g,h,i){}}});})();(function(){var c="qx.event.type.Data",b="qx.event.type.Event",a="qx.data.IListData";qx.Interface.define(a,{events:{"change":c,"changeLength":b},members:{getItem:function(d){},setItem:function(e,f){},splice:function(g,h,i){},contains:function(j){},getLength:function(){},toArray:function(){}}});})();(function(){var a="qx.lang.Date";qx.Class.define(a,{statics:{now:function(){return +new Date;}}});})();(function(){var b="qx.util.ObjectPool",a="Integer";qx.Class.define(b,{extend:qx.core.Object,construct:function(c){qx.core.Object.call(this);this.__fH={};if(c!=null){this.setSize(c);}},properties:{size:{check:a,init:Infinity}},members:{__fH:null,getObject:function(d){if(this.$$disposed){return new d;}if(!d){throw new Error("Class needs to be defined!");}var e=null;var f=this.__fH[d.classname];if(f){e=f.pop();}if(e){e.$$pooled=false;}else{e=new d;}return e;},poolObject:function(g){if(!this.__fH){return;}var h=g.classname;var j=this.__fH[h];if(g.$$pooled){throw new Error("Object is already pooled: "+g);}if(!j){this.__fH[h]=j=[];}if(j.length>this.getSize()){if(g.destroy){g.destroy();}else{g.dispose();}return;}g.$$pooled=true;j.push(g);}},destruct:function(){var n=this.__fH;var k,m,i,l;for(k in n){m=n[k];for(i=0,l=m.length;i<l;i++){m[i].dispose();}}delete this.__fH;}});})();(function(){var b="singleton",a="qx.event.Pool";qx.Class.define(a,{extend:qx.util.ObjectPool,type:b,construct:function(){qx.util.ObjectPool.call(this,30);}});})();(function(){var a="qx.util.DisposeUtil";qx.Class.define(a,{statics:{disposeObjects:function(b,c,d){var name;for(var i=0,l=c.length;i<l;i++){name=c[i];if(b[name]==null||!b.hasOwnProperty(name)){continue;}if(!qx.core.ObjectRegistry.inShutDown){if(b[name].dispose){if(!d&&b[name].constructor.$$instance){throw new Error("The object stored in key "+name+" is a singleton! Please use disposeSingleton instead.");}else{b[name].dispose();}}else{throw new Error("Has no disposable object under key: "+name+"!");}}b[name]=null;}},disposeArray:function(e,f){var h=e[f];if(!h){return;}if(qx.core.ObjectRegistry.inShutDown){e[f]=null;return;}try{var g;for(var i=h.length-1;i>=0;i--){g=h[i];if(g){g.dispose();}}}catch(j){throw new Error("The array field: "+f+" of object: "+e+" has non disposable entries: "+j);}h.length=0;e[f]=null;},disposeMap:function(k,m){var o=k[m];if(!o){return;}if(qx.core.ObjectRegistry.inShutDown){k[m]=null;return;}try{var n;for(var p in o){n=o[p];if(o.hasOwnProperty(p)&&n){n.dispose();}}}catch(q){throw new Error("The map field: "+m+" of object: "+k+" has non disposable entries: "+q);}k[m]=null;},disposeTriggeredBy:function(r,s){var t=s.dispose;s.dispose=function(){t.call(s);r.dispose();};}}});})();(function(){var m="get",l="",k="[",h="last",g="change",f="]",d=".",c="Number",b="String",a="set",D="deepBinding",C="item",B="reset",A="' (",z="Boolean",y=") to the object '",x="Integer",w=" of object ",v="qx.data.SingleValueBinding",u="Binding property ",s="Binding from '",t="PositiveNumber",q="PositiveInteger",r="Binding does not exist!",o=").",p="Date",n=" not possible: No event available. ";qx.Class.define(v,{statics:{DEBUG_ON:false,__gl:{},bind:function(E,F,G,H,I){var S=this.__gn(E,F,G,H,I);var N=F.split(d);var K=this.__gt(N);var R=[];var O=[];var P=[];var L=[];var M=E;for(var i=0;i<N.length;i++){if(K[i]!==l){L.push(g);}else{L.push(this.__go(M,N[i]));}R[i]=M;if(i==N.length-1){if(K[i]!==l){var V=K[i]===h?M.length-1:K[i];var J=M.getItem(V);this.__gs(J,G,H,I,E);P[i]=this.__gu(M,L[i],G,H,I,K[i]);}else{if(N[i]!=null&&M[m+qx.lang.String.firstUp(N[i])]!=null){var J=M[m+qx.lang.String.firstUp(N[i])]();this.__gs(J,G,H,I,E);}P[i]=this.__gu(M,L[i],G,H,I);}}else{var T={index:i,propertyNames:N,sources:R,listenerIds:P,arrayIndexValues:K,targetObject:G,targetPropertyChain:H,options:I,listeners:O};var Q=qx.lang.Function.bind(this.__gm,this,T);O.push(Q);P[i]=M.addListener(L[i],Q);}if(M[m+qx.lang.String.firstUp(N[i])]==null){M=null;}else if(K[i]!==l){M=M[m+qx.lang.String.firstUp(N[i])](K[i]);}else{M=M[m+qx.lang.String.firstUp(N[i])]();}if(!M){break;}}var U={type:D,listenerIds:P,sources:R,targetListenerIds:S.listenerIds,targets:S.targets};this.__gv(U,E,F,G,H);return U;},__gm:function(W){if(W.options&&W.options.onUpdate){W.options.onUpdate(W.sources[W.index],W.targetObject);}for(var j=W.index+1;j<W.propertyNames.length;j++){var bb=W.sources[j];W.sources[j]=null;if(!bb){continue;}bb.removeListenerById(W.listenerIds[j]);}var bb=W.sources[W.index];for(var j=W.index+1;j<W.propertyNames.length;j++){if(W.arrayIndexValues[j-1]!==l){bb=bb[m+qx.lang.String.firstUp(W.propertyNames[j-1])](W.arrayIndexValues[j-1]);}else{bb=bb[m+qx.lang.String.firstUp(W.propertyNames[j-1])]();}W.sources[j]=bb;if(!bb){this.__gp(W.targetObject,W.targetPropertyChain);break;}if(j==W.propertyNames.length-1){if(qx.Class.implementsInterface(bb,qx.data.IListData)){var bc=W.arrayIndexValues[j]===h?bb.length-1:W.arrayIndexValues[j];var Y=bb.getItem(bc);this.__gs(Y,W.targetObject,W.targetPropertyChain,W.options,W.sources[W.index]);W.listenerIds[j]=this.__gu(bb,g,W.targetObject,W.targetPropertyChain,W.options,W.arrayIndexValues[j]);}else{if(W.propertyNames[j]!=null&&bb[m+qx.lang.String.firstUp(W.propertyNames[j])]!=null){var Y=bb[m+qx.lang.String.firstUp(W.propertyNames[j])]();this.__gs(Y,W.targetObject,W.targetPropertyChain,W.options,W.sources[W.index]);}var ba=this.__go(bb,W.propertyNames[j]);W.listenerIds[j]=this.__gu(bb,ba,W.targetObject,W.targetPropertyChain,W.options);}}else{if(W.listeners[j]==null){var X=qx.lang.Function.bind(this.__gm,this,W);W.listeners.push(X);}if(qx.Class.implementsInterface(bb,qx.data.IListData)){var ba=g;}else{var ba=this.__go(bb,W.propertyNames[j]);}W.listenerIds[j]=bb.addListener(ba,W.listeners[j]);}}},__gn:function(bd,be,bf,bg,bh){var bl=bg.split(d);var bj=this.__gt(bl);var bq=[];var bp=[];var bn=[];var bm=[];var bk=bf;for(var i=0;i<bl.length-1;i++){if(bj[i]!==l){bm.push(g);}else{try{bm.push(this.__go(bk,bl[i]));}catch(e){break;}}bq[i]=bk;var bo=function(){for(var j=i+1;j<bl.length-1;j++){var bt=bq[j];bq[j]=null;if(!bt){continue;}bt.removeListenerById(bn[j]);}var bt=bq[i];for(var j=i+1;j<bl.length-1;j++){var br=qx.lang.String.firstUp(bl[j-1]);if(bj[j-1]!==l){var bu=bj[j-1]===h?bt.getLength()-1:bj[j-1];bt=bt[m+br](bu);}else{bt=bt[m+br]();}bq[j]=bt;if(bp[j]==null){bp.push(bo);}if(qx.Class.implementsInterface(bt,qx.data.IListData)){var bs=g;}else{try{var bs=qx.data.SingleValueBinding.__go(bt,bl[j]);}catch(e){break;}}bn[j]=bt.addListener(bs,bp[j]);}qx.data.SingleValueBinding.updateTarget(bd,be,bf,bg,bh);};bp.push(bo);bn[i]=bk.addListener(bm[i],bo);var bi=qx.lang.String.firstUp(bl[i]);if(bk[m+bi]==null){bk=null;}else if(bj[i]!==l){bk=bk[m+bi](bj[i]);}else{bk=bk[m+bi]();}if(!bk){break;}}return {listenerIds:bn,targets:bq};},updateTarget:function(bv,bw,bx,by,bz){var bD=this.__gr(bv,bw);if(bD!=null){var bF=bw.substring(bw.lastIndexOf(d)+1,bw.length);if(bF.charAt(bF.length-1)==f){var bA=bF.substring(bF.lastIndexOf(k)+1,bF.length-1);var bC=bF.substring(0,bF.lastIndexOf(k));var bE=bD[m+qx.lang.String.firstUp(bC)]();if(bA==h){bA=bE.length-1;}if(bE!=null){var bB=bE.getItem(bA);}}else{var bB=bD[m+qx.lang.String.firstUp(bF)]();}}bB=qx.data.SingleValueBinding.__gw(bB,bx,by,bz);this.__gq(bx,by,bB);},__go:function(bG,bH){var bI=this.__gx(bG,bH);if(bI==null){if(qx.Class.supportsEvent(bG.constructor,bH)){bI=bH;}else if(qx.Class.supportsEvent(bG.constructor,g+qx.lang.String.firstUp(bH))){bI=g+qx.lang.String.firstUp(bH);}else{throw new qx.core.AssertionError(u+bH+w+bG+n);}}return bI;},__gp:function(bJ,bK){var bL=this.__gr(bJ,bK);if(bL!=null){var bM=bK.substring(bK.lastIndexOf(d)+1,bK.length);if(bM.charAt(bM.length-1)==f){this.__gq(bJ,bK,null);return;}if(bL[B+qx.lang.String.firstUp(bM)]!=undefined){bL[B+qx.lang.String.firstUp(bM)]();}else{bL[a+qx.lang.String.firstUp(bM)](null);}}},__gq:function(bN,bO,bP){var bT=this.__gr(bN,bO);if(bT!=null){var bU=bO.substring(bO.lastIndexOf(d)+1,bO.length);if(bU.charAt(bU.length-1)==f){var bQ=bU.substring(bU.lastIndexOf(k)+1,bU.length-1);var bS=bU.substring(0,bU.lastIndexOf(k));var bR=bT[m+qx.lang.String.firstUp(bS)]();if(bQ==h){bQ=bR.length-1;}if(bR!=null){bR.setItem(bQ,bP);}}else{bT[a+qx.lang.String.firstUp(bU)](bP);}}},__gr:function(bV,bW){var ca=bW.split(d);var cb=bV;for(var i=0;i<ca.length-1;i++){try{var bY=ca[i];if(bY.indexOf(f)==bY.length-1){var bX=bY.substring(bY.indexOf(k)+1,bY.length-1);bY=bY.substring(0,bY.indexOf(k));}cb=cb[m+qx.lang.String.firstUp(bY)]();if(bX!=null){if(bX==h){bX=cb.length-1;}cb=cb.getItem(bX);bX=null;}}catch(cc){return null;}}return cb;},__gs:function(cd,ce,cf,cg,ch){cd=this.__gw(cd,ce,cf,cg);if(cd===undefined){this.__gp(ce,cf);}if(cd!==undefined){try{this.__gq(ce,cf,cd);if(cg&&cg.onUpdate){cg.onUpdate(ch,ce,cd);}}catch(e){if(!(e instanceof qx.core.ValidationError)){throw e;}if(cg&&cg.onSetFail){cg.onSetFail(e);}else{qx.log.Logger.warn("Failed so set value "+cd+" on "+ce+". Error message: "+e);}}}},__gt:function(ci){var cj=[];for(var i=0;i<ci.length;i++){var name=ci[i];if(qx.lang.String.endsWith(name,f)){var ck=name.substring(name.indexOf(k)+1,name.indexOf(f));if(name.indexOf(f)!=name.length-1){throw new Error("Please use only one array at a time: "+name+" does not work.");}if(ck!==h){if(ck==l||isNaN(parseInt(ck,10))){throw new Error("No number or 'last' value hast been given"+" in a array binding: "+name+" does not work.");}}if(name.indexOf(k)!=0){ci[i]=name.substring(0,name.indexOf(k));cj[i]=l;cj[i+1]=ck;ci.splice(i+1,0,C);i++;}else{cj[i]=ck;ci.splice(i,1,C);}}else{cj[i]=l;}}return cj;},__gu:function(cl,cm,cn,co,cp,cq){var cr;{};var ct=function(cu,e){if(cu!==l){if(cu===h){cu=cl.length-1;}var cx=cl.getItem(cu);if(cx===undefined){qx.data.SingleValueBinding.__gp(cn,co);}var cv=e.getData().start;var cw=e.getData().end;if(cu<cv||cu>cw){return;}}else{var cx=e.getData();}if(qx.data.SingleValueBinding.DEBUG_ON){qx.log.Logger.debug("Binding executed from "+cl+" by "+cm+" to "+cn+" ("+co+")");qx.log.Logger.debug("Data before conversion: "+cx);}cx=qx.data.SingleValueBinding.__gw(cx,cn,co,cp);if(qx.data.SingleValueBinding.DEBUG_ON){qx.log.Logger.debug("Data after conversion: "+cx);}try{if(cx!==undefined){qx.data.SingleValueBinding.__gq(cn,co,cx);}else{qx.data.SingleValueBinding.__gp(cn,co);}if(cp&&cp.onUpdate){cp.onUpdate(cl,cn,cx);}}catch(e){if(!(e instanceof qx.core.ValidationError)){throw e;}if(cp&&cp.onSetFail){cp.onSetFail(e);}else{qx.log.Logger.warn("Failed so set value "+cx+" on "+cn+". Error message: "+e);}}};if(!cq){cq=l;}ct=qx.lang.Function.bind(ct,cl,cq);var cs=cl.addListener(cm,ct);return cs;},__gv:function(cy,cz,cA,cB,cC){if(this.__gl[cz.toHashCode()]===undefined){this.__gl[cz.toHashCode()]=[];}this.__gl[cz.toHashCode()].push([cy,cz,cA,cB,cC]);},__gw:function(cD,cE,cF,cG){if(cG&&cG.converter){var cI;if(cE.getModel){cI=cE.getModel();}return cG.converter(cD,cI);}else{var cK=this.__gr(cE,cF);var cL=cF.substring(cF.lastIndexOf(d)+1,cF.length);if(cK==null){return cD;}var cJ=qx.Class.getPropertyDefinition(cK.constructor,cL);var cH=cJ==null?l:cJ.check;return this.__gy(cD,cH);}},__gx:function(cM,cN){var cO=qx.Class.getPropertyDefinition(cM.constructor,cN);if(cO==null){return null;}return cO.event;},__gy:function(cP,cQ){var cR=qx.lang.Type.getClass(cP);if((cR==c||cR==b)&&(cQ==x||cQ==q)){cP=parseInt(cP,10);}if((cR==z||cR==c||cR==p)&&cQ==b){cP=cP+l;}if((cR==c||cR==b)&&(cQ==c||cQ==t)){cP=parseFloat(cP);}return cP;},removeBindingFromObject:function(cS,cT){if(cT.type==D){for(var i=0;i<cT.sources.length;i++){if(cT.sources[i]){cT.sources[i].removeListenerById(cT.listenerIds[i]);}}for(var i=0;i<cT.targets.length;i++){if(cT.targets[i]){cT.targets[i].removeListenerById(cT.targetListenerIds[i]);}}}else{cS.removeListenerById(cT);}var cU=this.__gl[cS.toHashCode()];if(cU!=undefined){for(var i=0;i<cU.length;i++){if(cU[i][0]==cT){qx.lang.Array.remove(cU,cU[i]);return;}}}throw new Error("Binding could not be found!");},removeAllBindingsForObject:function(cV){{};var cW=this.__gl[cV.toHashCode()];if(cW!=undefined){for(var i=cW.length-1;i>=0;i--){this.removeBindingFromObject(cV,cW[i][0]);}}},getAllBindingsForObject:function(cX){if(this.__gl[cX.toHashCode()]===undefined){this.__gl[cX.toHashCode()]=[];}return this.__gl[cX.toHashCode()];},removeAllBindings:function(){for(var da in this.__gl){var cY=qx.core.ObjectRegistry.fromHashCode(da);if(cY==null){delete this.__gl[da];continue;}this.removeAllBindingsForObject(cY);}this.__gl={};},getAllBindings:function(){return this.__gl;},showBindingInLog:function(db,dc){var de;for(var i=0;i<this.__gl[db.toHashCode()].length;i++){if(this.__gl[db.toHashCode()][i][0]==dc){de=this.__gl[db.toHashCode()][i];break;}}if(de===undefined){var dd=r;}else{var dd=s+de[1]+A+de[2]+y+de[3]+A+de[4]+o;}qx.log.Logger.debug(dd);},showAllBindingsInLog:function(){for(var dg in this.__gl){var df=qx.core.ObjectRegistry.fromHashCode(dg);for(var i=0;i<this.__gl[dg].length;i++){this.showBindingInLog(df,this.__gl[dg][i][0]);}}}}});})();(function(){var c=": ",b="qx.type.BaseError",a="";qx.Class.define(b,{extend:Error,construct:function(d,e){Error.call(this,e);this.__cL=d||a;this.message=e||qx.type.BaseError.DEFAULTMESSAGE;},statics:{DEFAULTMESSAGE:"error"},members:{__cL:null,message:null,getComment:function(){return this.__cL;},toString:function(){return this.__cL+c+this.message;}}});})();(function(){var a="qx.core.AssertionError";qx.Class.define(a,{extend:qx.type.BaseError,construct:function(b,c){qx.type.BaseError.call(this,b,c);this.__lC=qx.dev.StackTrace.getStackTrace();},members:{__lC:null,getStackTrace:function(){return this.__lC;}}});})();(function(){var a="qx.core.ValidationError";qx.Class.define(a,{extend:qx.type.BaseError});})();(function(){var f="qx.lang.Type",e="Error",d="RegExp",c="Date",b="Number",a="Boolean";qx.Class.define(f,{statics:{getClass:qx.Bootstrap.getClass,isString:qx.Bootstrap.isString,isArray:qx.Bootstrap.isArray,isObject:qx.Bootstrap.isObject,isFunction:qx.Bootstrap.isFunction,isRegExp:function(g){return this.getClass(g)==d;},isNumber:function(h){return (h!==null&&(this.getClass(h)==b||h instanceof Number));},isBoolean:function(i){return (i!==null&&(this.getClass(i)==a||i instanceof Boolean));},isDate:function(j){return (j!==null&&(this.getClass(j)==c||j instanceof Date));},isError:function(k){return (k!==null&&(this.getClass(k)==e||k instanceof Error));}}});})();(function(){var a="qx.event.IEventDispatcher";qx.Interface.define(a,{members:{canDispatchEvent:function(b,event,c){this.assertInstance(event,qx.event.type.Event);this.assertString(c);},dispatchEvent:function(d,event,e){this.assertInstance(event,qx.event.type.Event);this.assertString(e);}}});})();(function(){var a="qx.event.dispatch.Direct";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventDispatcher,construct:function(b){this._manager=b;},statics:{PRIORITY:qx.event.Registration.PRIORITY_LAST},members:{canDispatchEvent:function(c,event,d){return !event.getBubbles();},dispatchEvent:function(e,event,f){var j,g;{};event.setEventPhase(qx.event.type.Event.AT_TARGET);var k=this._manager.getListeners(e,f,false);if(k){for(var i=0,l=k.length;i<l;i++){var h=k[i].context||e;k[i].handler.call(h,event);}}}},defer:function(m){qx.event.Registration.addDispatcher(m);}});})();(function(){var a="qx.event.handler.Object";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,statics:{PRIORITY:qx.event.Registration.PRIORITY_LAST,SUPPORTED_TYPES:null,TARGET_CHECK:qx.event.IEventHandler.TARGET_OBJECT,IGNORE_CAN_HANDLE:false},members:{canHandleEvent:function(b,c){return qx.Class.supportsEvent(b.constructor,c);},registerEvent:function(d,e,f){},unregisterEvent:function(g,h,i){}},defer:function(j){qx.event.Registration.addHandler(j);}});})();(function(){var k="indexOf",j="lastIndexOf",h="slice",g="concat",f="join",e="toLocaleUpperCase",d="shift",c="substr",b="filter",a="unshift",I="match",H="quote",G="qx.lang.Generics",F="localeCompare",E="sort",D="some",C="charAt",B="split",A="substring",z="pop",t="toUpperCase",u="replace",q="push",r="charCodeAt",o="every",p="reverse",m="search",n="forEach",v="map",w="toLowerCase",y="splice",x="toLocaleLowerCase";qx.Class.define(G,{statics:{__eY:{"Array":[f,p,E,q,z,d,a,y,g,h,k,j,n,v,b,D,o],"String":[H,A,w,t,C,r,k,j,x,e,F,I,m,u,B,c,g,h]},__fa:function(J,K){return function(s){return J.prototype[K].apply(s,Array.prototype.slice.call(arguments,1));};},__fb:function(){var L=qx.lang.Generics.__eY;for(var P in L){var N=window[P];var M=L[P];for(var i=0,l=M.length;i<l;i++){var O=M[i];if(!N[O]){N[O]=qx.lang.Generics.__fa(N,O);}}}}},defer:function(Q){Q.__fb();}});})();(function(){var b="qx.util.DeferredCallManager",a="singleton";qx.Class.define(b,{extend:qx.core.Object,type:a,construct:function(){this.__gf={};this.__gg=qx.lang.Function.bind(this.__gk,this);this.__gh=false;},members:{__gi:null,__gj:null,__gf:null,__gh:null,__gg:null,schedule:function(c){if(this.__gi==null){this.__gi=window.setTimeout(this.__gg,0);}var d=c.toHashCode();if(this.__gj&&this.__gj[d]){return;}this.__gf[d]=c;this.__gh=true;},cancel:function(e){var f=e.toHashCode();if(this.__gj&&this.__gj[f]){this.__gj[f]=null;return;}delete this.__gf[f];if(qx.lang.Object.isEmpty(this.__gf)&&this.__gi!=null){window.clearTimeout(this.__gi);this.__gi=null;}},__gk:qx.event.GlobalError.observeMethod(function(){this.__gi=null;while(this.__gh){this.__gj=qx.lang.Object.clone(this.__gf);this.__gf={};this.__gh=false;for(var h in this.__gj){var g=this.__gj[h];if(g){this.__gj[h]=null;g.call();}}}this.__gj=null;})},destruct:function(){if(this.__gi!=null){window.clearTimeout(this.__gi);}this.__gg=this.__gf=null;}});})();(function(){var a="qx.util.DeferredCall";qx.Class.define(a,{extend:qx.core.Object,construct:function(b,c){qx.core.Object.call(this);this.__ia=b;this.__ib=c||null;this.__ic=qx.util.DeferredCallManager.getInstance();},members:{__ia:null,__ib:null,__ic:null,cancel:function(){this.__ic.cancel(this);},schedule:function(){this.__ic.schedule(this);},call:function(){this.__ib?this.__ia.apply(this.__ib):this.__ia();}},destruct:function(d,e){this.cancel();this.__ib=this.__ia=this.__ic=null;}});})();(function(){var m="element",k="qx.client",j="qxSelectable",h="off",g="on",f="text",d="div",c="",b="mshtml",a="none",F="scroll",E="qx.html.Element",D="|capture|",C="activate",B="__dz",A="blur",z="deactivate",w="capture",v="userSelect",u="-moz-none",s="visible",t="releaseCapture",q="|bubble|",r="tabIndex",o="focus",p="MozUserSelect",n="hidden";qx.Class.define(E,{extend:qx.core.Object,construct:function(G,H,I){qx.core.Object.call(this);this.__dd=G||d;this.__de=H||null;this.__df=I||null;},statics:{DEBUG:false,_modified:{},_visibility:{},_scroll:{},_actions:[],__dg:{},_scheduleFlush:function(J){qx.html.Element.__dK.schedule();},flush:function(){var U;{};var M=this.__dh();var L=M.getFocus();if(L&&this.__dl(L)){M.blur(L);}var bc=M.getActive();if(bc&&this.__dl(bc)){qx.bom.Element.deactivate(bc);}var P=this.__dj();if(P&&this.__dl(P)){qx.bom.Element.releaseCapture(P);}var V=[];var W=this._modified;for(var T in W){U=W[T];if(U.__dD()){if(U.__dm&&qx.dom.Hierarchy.isRendered(U.__dm)){V.push(U);}else{{};U.__dC();}delete W[T];}}for(var i=0,l=V.length;i<l;i++){U=V[i];{};U.__dC();}var R=this._visibility;for(var T in R){U=R[T];var X=U.__dm;if(!X){delete R[T];continue;}{};if(!U.$$disposed){X.style.display=U.__dp?c:a;if(qx.core.Variant.isSet(k,b)){if(!(document.documentMode>=8)){X.style.visibility=U.__dp?s:n;}}}delete R[T];}var scroll=this._scroll;for(var T in scroll){U=scroll[T];var bd=U.__dm;if(bd&&bd.offsetWidth){var O=true;if(U.__ds!=null){U.__dm.scrollLeft=U.__ds;delete U.__ds;}if(U.__dt!=null){U.__dm.scrollTop=U.__dt;delete U.__dt;}var Y=U.__dq;if(Y!=null){var S=Y.element.getDomElement();if(S&&S.offsetWidth){qx.bom.element.Scroll.intoViewX(S,bd,Y.align);delete U.__dq;}else{O=false;}}var ba=U.__dr;if(ba!=null){var S=ba.element.getDomElement();if(S&&S.offsetWidth){qx.bom.element.Scroll.intoViewY(S,bd,ba.align);delete U.__dr;}else{O=false;}}if(O){delete scroll[T];}}}var N={"releaseCapture":1,"blur":1,"deactivate":1};for(var i=0;i<this._actions.length;i++){var bb=this._actions[i];var X=bb.element.__dm;if(!X||!N[bb.type]&&!bb.element.__dD()){continue;}var Q=bb.args;Q.unshift(X);qx.bom.Element[bb.type].apply(qx.bom.Element,Q);}this._actions=[];for(var T in this.__dg){var K=this.__dg[T];var bd=K.element.__dm;if(bd){qx.bom.Selection.set(bd,K.start,K.end);delete this.__dg[T];}}qx.event.handler.Appear.refresh();},__dh:function(){if(!this.__di){var be=qx.event.Registration.getManager(window);this.__di=be.getHandler(qx.event.handler.Focus);}return this.__di;},__dj:function(){if(!this.__dk){var bf=qx.event.Registration.getManager(window);this.__dk=bf.getDispatcher(qx.event.dispatch.MouseCapture);}return this.__dk.getCaptureElement();},__dl:function(bg){var bh=qx.core.ObjectRegistry.fromHashCode(bg.$$element);return bh&&!bh.__dD();}},members:{__dd:null,__dm:null,__dn:false,__do:true,__dp:true,__dq:null,__dr:null,__ds:null,__dt:null,__du:null,__dv:null,__dw:null,__de:null,__df:null,__dx:null,__dy:null,__dz:null,__dA:null,__dB:null,_scheduleChildrenUpdate:function(){if(this.__dA){return;}this.__dA=true;qx.html.Element._modified[this.$$hash]=this;qx.html.Element._scheduleFlush(m);},_createDomElement:function(){return qx.bom.Element.create(this.__dd);},__dC:function(){{};var length;var bi=this.__dz;if(bi){length=bi.length;var bj;for(var i=0;i<length;i++){bj=bi[i];if(bj.__dp&&bj.__do&&!bj.__dm){bj.__dC();}}}if(!this.__dm){this.__dm=this._createDomElement();this.__dm.$$element=this.$$hash;this._copyData(false);if(bi&&length>0){this._insertChildren();}}else{this._syncData();if(this.__dA){this._syncChildren();}}delete this.__dA;},_insertChildren:function(){var bk=this.__dz;var length=bk.length;var bm;if(length>2){var bl=document.createDocumentFragment();for(var i=0;i<length;i++){bm=bk[i];if(bm.__dm&&bm.__do){bl.appendChild(bm.__dm);}}this.__dm.appendChild(bl);}else{var bl=this.__dm;for(var i=0;i<length;i++){bm=bk[i];if(bm.__dm&&bm.__do){bl.appendChild(bm.__dm);}}}},_syncChildren:function(){var br;var bw=qx.core.ObjectRegistry;var bn=this.__dz;var bu=bn.length;var bo;var bs;var bq=this.__dm;var bt=bq.childNodes;var bp=0;var bv;{};for(var i=bt.length-1;i>=0;i--){bv=bt[i];bs=bw.fromHashCode(bv.$$element);if(!bs||!bs.__do||bs.__dB!==this){bq.removeChild(bv);{};}}for(var i=0;i<bu;i++){bo=bn[i];if(bo.__do){bs=bo.__dm;bv=bt[bp];if(!bs){continue;}if(bs!=bv){if(bv){bq.insertBefore(bs,bv);}else{bq.appendChild(bs);}{};}bp++;}}{};},_copyData:function(bx){var bB=this.__dm;var bA=this.__df;if(bA){var by=qx.bom.element.Attribute;for(var bC in bA){by.set(bB,bC,bA[bC]);}}var bA=this.__de;if(bA){var bz=qx.bom.element.Style;if(bx){bz.setStyles(bB,bA);}else{bz.setCss(bB,bz.compile(bA));}}var bA=this.__dx;if(bA){for(var bC in bA){this._applyProperty(bC,bA[bC]);}}var bA=this.__dy;if(bA){qx.event.Registration.getManager(bB).importListeners(bB,bA);delete this.__dy;}},_syncData:function(){var bH=this.__dm;var bG=qx.bom.element.Attribute;var bE=qx.bom.element.Style;var bF=this.__dv;if(bF){var bK=this.__df;if(bK){var bI;for(var bJ in bF){bI=bK[bJ];if(bI!==undefined){bG.set(bH,bJ,bI);}else{bG.reset(bH,bJ);}}}this.__dv=null;}var bF=this.__du;if(bF){var bK=this.__de;if(bK){var bD={};for(var bJ in bF){bD[bJ]=bK[bJ];}bE.setStyles(bH,bD);}this.__du=null;}var bF=this.__dw;if(bF){var bK=this.__dx;if(bK){var bI;for(var bJ in bF){this._applyProperty(bJ,bK[bJ]);}}this.__dw=null;}},__dD:function(){var bL=this;while(bL){if(bL.__dn){return true;}if(!bL.__do||!bL.__dp){return false;}bL=bL.__dB;}return false;},__dE:function(bM){if(bM.__dB===this){throw new Error("Child is already in: "+bM);}if(bM.__dn){throw new Error("Root elements could not be inserted into other ones.");}if(bM.__dB){bM.__dB.remove(bM);}bM.__dB=this;if(!this.__dz){this.__dz=[];}if(this.__dm){this._scheduleChildrenUpdate();}},__dF:function(bN){if(bN.__dB!==this){throw new Error("Has no child: "+bN);}if(this.__dm){this._scheduleChildrenUpdate();}delete bN.__dB;},__dG:function(bO){if(bO.__dB!==this){throw new Error("Has no child: "+bO);}if(this.__dm){this._scheduleChildrenUpdate();}},getChildren:function(){return this.__dz||null;},getChild:function(bP){var bQ=this.__dz;return bQ&&bQ[bP]||null;},hasChildren:function(){var bR=this.__dz;return bR&&bR[0]!==undefined;},indexOf:function(bS){var bT=this.__dz;return bT?bT.indexOf(bS):-1;},hasChild:function(bU){var bV=this.__dz;return bV&&bV.indexOf(bU)!==-1;},add:function(bW){if(arguments[1]){for(var i=0,l=arguments.length;i<l;i++){this.__dE(arguments[i]);}this.__dz.push.apply(this.__dz,arguments);}else{this.__dE(bW);this.__dz.push(bW);}return this;},addAt:function(bX,bY){this.__dE(bX);qx.lang.Array.insertAt(this.__dz,bX,bY);return this;},remove:function(ca){var cb=this.__dz;if(!cb){return;}if(arguments[1]){var cc;for(var i=0,l=arguments.length;i<l;i++){cc=arguments[i];this.__dF(cc);qx.lang.Array.remove(cb,cc);}}else{this.__dF(ca);qx.lang.Array.remove(cb,ca);}return this;},removeAt:function(cd){var ce=this.__dz;if(!ce){throw new Error("Has no children!");}var cf=ce[cd];if(!cf){throw new Error("Has no child at this position!");}this.__dF(cf);qx.lang.Array.removeAt(this.__dz,cd);return this;},removeAll:function(){var cg=this.__dz;if(cg){for(var i=0,l=cg.length;i<l;i++){this.__dF(cg[i]);}cg.length=0;}return this;},getParent:function(){return this.__dB||null;},insertInto:function(parent,ch){parent.__dE(this);if(ch==null){parent.__dz.push(this);}else{qx.lang.Array.insertAt(this.__dz,this,ch);}return this;},insertBefore:function(ci){var parent=ci.__dB;parent.__dE(this);qx.lang.Array.insertBefore(parent.__dz,this,ci);return this;},insertAfter:function(cj){var parent=cj.__dB;parent.__dE(this);qx.lang.Array.insertAfter(parent.__dz,this,cj);return this;},moveTo:function(ck){var parent=this.__dB;parent.__dG(this);var cl=parent.__dz.indexOf(this);if(cl===ck){throw new Error("Could not move to same index!");}else if(cl<ck){ck--;}qx.lang.Array.removeAt(parent.__dz,cl);qx.lang.Array.insertAt(parent.__dz,this,ck);return this;},moveBefore:function(cm){var parent=this.__dB;return this.moveTo(parent.__dz.indexOf(cm));},moveAfter:function(cn){var parent=this.__dB;return this.moveTo(parent.__dz.indexOf(cn)+1);},free:function(){var parent=this.__dB;if(!parent){throw new Error("Has no parent to remove from.");}if(!parent.__dz){return;}parent.__dF(this);qx.lang.Array.remove(parent.__dz,this);return this;},getDomElement:function(){return this.__dm||null;},getNodeName:function(){return this.__dd;},setNodeName:function(name){this.__dd=name;},setRoot:function(co){this.__dn=co;},useMarkup:function(cp){if(this.__dm){throw new Error("Could not overwrite existing element!");}if(qx.core.Variant.isSet(k,b)){var cq=document.createElement(d);}else{var cq=qx.bom.Element.getHelperElement();}cq.innerHTML=cp;this.useElement(cq.firstChild);return this.__dm;},useElement:function(cr){if(this.__dm){throw new Error("Could not overwrite existing element!");}this.__dm=cr;this.__dm.$$element=this.$$hash;this._copyData(true);},isFocusable:function(){var ct=this.getAttribute(r);if(ct>=1){return true;}var cs=qx.event.handler.Focus.FOCUSABLE_ELEMENTS;if(ct>=0&&cs[this.__dd]){return true;}return false;},setSelectable:qx.core.Variant.select(k,{"webkit":function(cu){this.setAttribute(j,cu?g:h);this.setStyle(v,cu?f:a);},"gecko":function(cv){this.setAttribute(j,cv?g:h);this.setStyle(p,cv?f:u);},"default":function(cw){this.setAttribute(j,cw?g:h);}}),isNativelyFocusable:function(){return !!qx.event.handler.Focus.FOCUSABLE_ELEMENTS[this.__dd];},include:function(){if(this.__do){return;}delete this.__do;if(this.__dB){this.__dB._scheduleChildrenUpdate();}return this;},exclude:function(){if(!this.__do){return;}this.__do=false;if(this.__dB){this.__dB._scheduleChildrenUpdate();}return this;},isIncluded:function(){return this.__do===true;},show:function(){if(this.__dp){return;}if(this.__dm){qx.html.Element._visibility[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}if(this.__dB){this.__dB._scheduleChildrenUpdate();}delete this.__dp;},hide:function(){if(!this.__dp){return;}if(this.__dm){qx.html.Element._visibility[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}this.__dp=false;},isVisible:function(){return this.__dp===true;},scrollChildIntoViewX:function(cx,cy,cz){var cA=this.__dm;var cB=cx.getDomElement();if(cz!==false&&cA&&cA.offsetWidth&&cB&&cB.offsetWidth){qx.bom.element.Scroll.intoViewX(cB,cA,cy);}else{this.__dq={element:cx,align:cy};qx.html.Element._scroll[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}delete this.__ds;},scrollChildIntoViewY:function(cC,cD,cE){var cF=this.__dm;var cG=cC.getDomElement();if(cE!==false&&cF&&cF.offsetWidth&&cG&&cG.offsetWidth){qx.bom.element.Scroll.intoViewY(cG,cF,cD);}else{this.__dr={element:cC,align:cD};qx.html.Element._scroll[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}delete this.__dt;},scrollToX:function(x,cH){var cI=this.__dm;if(cH!==true&&cI&&cI.offsetWidth){cI.scrollLeft=x;}else{this.__ds=x;qx.html.Element._scroll[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}delete this.__dq;},getScrollX:function(){var cJ=this.__dm;if(cJ){return cJ.scrollLeft;}return this.__ds||0;},scrollToY:function(y,cK){var cL=this.__dm;if(cK!==true&&cL&&cL.offsetWidth){cL.scrollTop=y;}else{this.__dt=y;qx.html.Element._scroll[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}delete this.__dr;},getScrollY:function(){var cM=this.__dm;if(cM){return cM.scrollTop;}return this.__dt||0;},disableScrolling:function(){this.enableScrolling();this.scrollToX(0);this.scrollToY(0);this.addListener(F,this.__dI,this);},enableScrolling:function(){this.removeListener(F,this.__dI,this);},__dH:null,__dI:function(e){if(!this.__dH){this.__dH=true;this.__dm.scrollTop=0;this.__dm.scrollLeft=0;delete this.__dH;}},getTextSelection:function(){var cN=this.__dm;if(cN){return qx.bom.Selection.get(cN);}return null;},getTextSelectionLength:function(){var cO=this.__dm;if(cO){return qx.bom.Selection.getLength(cO);}return null;},getTextSelectionStart:function(){var cP=this.__dm;if(cP){return qx.bom.Selection.getStart(cP);}return null;},getTextSelectionEnd:function(){var cQ=this.__dm;if(cQ){return qx.bom.Selection.getEnd(cQ);}return null;},setTextSelection:function(cR,cS){var cT=this.__dm;if(cT){qx.bom.Selection.set(cT,cR,cS);return;}qx.html.Element.__dg[this.toHashCode()]={element:this,start:cR,end:cS};qx.html.Element._scheduleFlush(m);},clearTextSelection:function(){var cU=this.__dm;if(cU){qx.bom.Selection.clear(cU);}delete qx.html.Element.__dg[this.toHashCode()];},__dJ:function(cV,cW){var cX=qx.html.Element._actions;cX.push({type:cV,element:this,args:cW||[]});qx.html.Element._scheduleFlush(m);},focus:function(){this.__dJ(o);},blur:function(){this.__dJ(A);},activate:function(){this.__dJ(C);},deactivate:function(){this.__dJ(z);},capture:function(cY){this.__dJ(w,[cY!==false]);},releaseCapture:function(){this.__dJ(t);},setStyle:function(da,dc,dd){if(!this.__de){this.__de={};}if(this.__de[da]==dc){return;}if(dc==null){delete this.__de[da];}else{this.__de[da]=dc;}if(this.__dm){if(dd){qx.bom.element.Style.set(this.__dm,da,dc);return this;}if(!this.__du){this.__du={};}this.__du[da]=true;qx.html.Element._modified[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}return this;},setStyles:function(de,df){var dg=qx.bom.element.Style;if(!this.__de){this.__de={};}if(this.__dm){if(!this.__du){this.__du={};}for(var di in de){var dh=de[di];if(this.__de[di]==dh){continue;}if(dh==null){delete this.__de[di];}else{this.__de[di]=dh;}if(df){dg.set(this.__dm,di,dh);continue;}this.__du[di]=true;}qx.html.Element._modified[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}else{for(var di in de){var dh=de[di];if(this.__de[di]==dh){continue;}if(dh==null){delete this.__de[di];}else{this.__de[di]=dh;}}}return this;},removeStyle:function(dj,dk){this.setStyle(dj,null,dk);},getStyle:function(dl){return this.__de?this.__de[dl]:null;},getAllStyles:function(){return this.__de||null;},setAttribute:function(dm,dn,dp){if(!this.__df){this.__df={};}if(this.__df[dm]==dn){return;}if(dn==null){delete this.__df[dm];}else{this.__df[dm]=dn;}if(this.__dm){if(dp){qx.bom.element.Attribute.set(this.__dm,dm,dn);return this;}if(!this.__dv){this.__dv={};}this.__dv[dm]=true;qx.html.Element._modified[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}return this;},setAttributes:function(dq,dr){for(var ds in dq){this.setAttribute(ds,dq[ds],dr);}return this;},removeAttribute:function(dt,du){this.setAttribute(dt,null,du);},getAttribute:function(dv){return this.__df?this.__df[dv]:null;},_applyProperty:function(name,dw){},_setProperty:function(dx,dy,dz){if(!this.__dx){this.__dx={};}if(this.__dx[dx]==dy){return;}if(dy==null){delete this.__dx[dx];}else{this.__dx[dx]=dy;}if(this.__dm){if(dz){this._applyProperty(dx,dy);return this;}if(!this.__dw){this.__dw={};}this.__dw[dx]=true;qx.html.Element._modified[this.$$hash]=this;qx.html.Element._scheduleFlush(m);}return this;},_removeProperty:function(dA,dB){this._setProperty(dA,null,dB);},_getProperty:function(dC){var dD=this.__dx;if(!dD){return null;}var dE=dD[dC];return dE==null?null:dE;},addListener:function(dF,dG,self,dH){var dI;if(this.$$disposed){return null;}{};if(this.__dm){return qx.event.Registration.addListener(this.__dm,dF,dG,self,dH);}if(!this.__dy){this.__dy={};}if(dH==null){dH=false;}var dJ=qx.event.Manager.getNextUniqueId();var dK=dF+(dH?D:q)+dJ;this.__dy[dK]={type:dF,listener:dG,self:self,capture:dH,unique:dJ};return dK;},removeListener:function(dL,dM,self,dN){var dO;if(this.$$disposed){return null;}{};if(this.__dm){qx.event.Registration.removeListener(this.__dm,dL,dM,self,dN);}else{var dQ=this.__dy;var dP;if(dN==null){dN=false;}for(var dR in dQ){dP=dQ[dR];if(dP.listener===dM&&dP.self===self&&dP.capture===dN&&dP.type===dL){delete dQ[dR];break;}}}return this;},removeListenerById:function(dS){if(this.$$disposed){return null;}if(this.__dm){qx.event.Registration.removeListenerById(this.__dm,dS);}else{delete this.__dy[dS];}return this;},hasListener:function(dT,dU){if(this.$$disposed){return false;}if(this.__dm){return qx.event.Registration.hasListener(this.__dm,dT,dU);}var dW=this.__dy;var dV;if(dU==null){dU=false;}for(var dX in dW){dV=dW[dX];if(dV.capture===dU&&dV.type===dT){return true;}}return false;}},defer:function(dY){dY.__dK=new qx.util.DeferredCall(dY.flush,dY);},destruct:function(){var ea=this.__dm;if(ea){qx.event.Registration.getManager(ea).removeAllListeners(ea);ea.$$element=c;}if(!qx.core.ObjectRegistry.inShutDown){var parent=this.__dB;if(parent&&!parent.$$disposed){parent.remove(this);}}this._disposeArray(B);this.__df=this.__de=this.__dy=this.__dx=this.__dv=this.__du=this.__dw=this.__dm=this.__dB=this.__dq=this.__dr=null;}});})();(function(){var g="qx.bom.client.Feature",f="CSS1Compat",d="label",c="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",b="input",a="pointerEvents";qx.Bootstrap.define(g,{statics:{STANDARD_MODE:false,QUIRKS_MODE:false,CONTENT_BOX:false,BORDER_BOX:false,SVG:false,CANVAS:!!window.CanvasRenderingContext2D,VML:false,XPATH:!!document.evaluate,AIR:navigator.userAgent.indexOf("adobeair")!==-1,GEARS:!!(window.google&&window.google.gears),SSL:window.location.protocol==="https:",ECMA_OBJECT_COUNT:(({}).__count__==0),CSS_POINTER_EVENTS:false,XUL:false,CSS_TEXT_OVERFLOW:("textOverflow" in document.documentElement.style||"OTextOverflow" in document.documentElement.style),HTML5_CLASSLIST:!!(document.documentElement.classList&&qx.Bootstrap.getClass(document.documentElement.classList)==="DOMTokenList"),TOUCH:("ontouchstart" in window),PLACEHOLDER:false,__gG:function(){this.QUIRKS_MODE=this.__gH();this.STANDARD_MODE=!this.QUIRKS_MODE;this.CONTENT_BOX=!qx.bom.client.Engine.MSHTML||this.STANDARD_MODE;this.BORDER_BOX=!this.CONTENT_BOX;this.SVG=document.implementation&&document.implementation.hasFeature&&(document.implementation.hasFeature("org.w3c.dom.svg","1.0")||document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"));this.VML=qx.bom.client.Engine.MSHTML;try{document.createElementNS(c,d);this.XUL=true;}catch(e){this.XUL=false;}var i=document.createElement(b);this.PLACEHOLDER="placeholder" in i;if(a in document.documentElement.style){if(qx.bom.client.Engine.OPERA){this.CSS_POINTER_EVENTS=false;}else{this.CSS_POINTER_EVENTS=true;}}},__gH:function(){if(qx.bom.client.Engine.MSHTML&&qx.bom.client.Engine.VERSION>=8){return qx.bom.client.Engine.DOCUMENT_MODE===5;}else{return document.compatMode!==f;}}},defer:function(h){h.__gG();}});})();(function(){var a="qx.event.handler.UserAction";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(b){qx.core.Object.call(this);this.__kB=b;this.__kC=b.getWindow();},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{useraction:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_WINDOW,IGNORE_CAN_HANDLE:true},members:{__kB:null,__kC:null,canHandleEvent:function(c,d){},registerEvent:function(e,f,g){},unregisterEvent:function(h,i,j){}},destruct:function(){this.__kB=this.__kC=null;},defer:function(k){qx.event.Registration.addHandler(k);}});})();(function(){var d='ie',c="qx.ui.core.queue.Manager",b="useraction",a="touchend";qx.Class.define(c,{statics:{__lg:false,__lh:{},__li:0,MAX_RETRIES:10,scheduleFlush:function(f){var self=qx.ui.core.queue.Manager;self.__lh[f]=true;if(!self.__lg){self.__ln.schedule();self.__lg=true;}},flush:function(){if(qx.ui.core.queue.Manager.PAUSE){return;}var self=qx.ui.core.queue.Manager;if(self.__lj){return;}self.__lj=true;self.__ln.cancel();var g=self.__lh;self.__lk(function(){while(g.visibility||g.widget||g.appearance||g.layout||g.element){if(g.widget){delete g.widget;qx.ui.core.queue.Widget.flush();}if(g.visibility){delete g.visibility;qx.ui.core.queue.Visibility.flush();}if(g.appearance){delete g.appearance;qx.ui.core.queue.Appearance.flush();}if(g.widget||g.visibility||g.appearance){continue;}if(g.layout){delete g.layout;qx.ui.core.queue.Layout.flush();}if(g.widget||g.visibility||g.appearance||g.layout){continue;}if(g.element){delete g.element;qx.html.Element.flush();}}},function(){self.__lg=false;});self.__lk(function(){if(g.dispose){delete g.dispose;qx.ui.core.queue.Dispose.flush();}},function(){self.__lj=false;});self.__li=0;},__lk:function(h,i){var self=qx.ui.core.queue.Manager;try{h();}catch(e){{};self.__lg=false;self.__lj=false;self.__li+=1;if(qx.bom.client.Browser.NAME==d&&qx.bom.client.Browser.VERSION<=7){i();}if(self.__li<=self.MAX_RETRIES){self.scheduleFlush();}else{throw new Error("Fatal Error: Flush terminated "+(self.__li-1)+" times in a row"+" due to exceptions in user code. The application has to be reloaded!");}throw e;}finally{i();}},__ll:function(e){var j=qx.ui.core.queue.Manager;if(e.getData()==a){j.PAUSE=true;if(j.__lm){window.clearTimeout(j.__lm);}j.__lm=window.setTimeout(function(){j.PAUSE=false;j.__lm=null;j.flush();},500);}else{j.flush();}}},defer:function(k){k.__ln=new qx.util.DeferredCall(k.flush);qx.html.Element._scheduleFlush=k.scheduleFlush;qx.event.Registration.addListener(window,b,qx.bom.client.Feature.TOUCH?k.__ll:k.flush);}});})();(function(){var a="qx.lang.Object";qx.Class.define(a,{statics:{empty:function(b){{};for(var c in b){if(b.hasOwnProperty(c)){delete b[c];}}},isEmpty:(qx.bom.client.Feature.ECMA_OBJECT_COUNT)?function(d){{};return d.__count__===0;}:function(e){{};for(var f in e){return false;}return true;},hasMinLength:(qx.bom.client.Feature.ECMA_OBJECT_COUNT)?function(g,h){{};return g.__count__>=h;}:function(j,k){{};if(k<=0){return true;}var length=0;for(var m in j){if((++length)>=k){return true;}}return false;},getLength:qx.Bootstrap.objectGetLength,getKeys:qx.Bootstrap.getKeys,getKeysAsString:qx.Bootstrap.getKeysAsString,getValues:function(n){{};var p=[];var o=this.getKeys(n);for(var i=0,l=o.length;i<l;i++){p.push(n[o[i]]);}return p;},mergeWith:qx.Bootstrap.objectMergeWith,carefullyMergeWith:function(q,r){{};return qx.lang.Object.mergeWith(q,r,false);},merge:function(s,t){{};var u=arguments.length;for(var i=1;i<u;i++){qx.lang.Object.mergeWith(s,arguments[i]);}return s;},clone:function(v){{};var w={};for(var x in v){w[x]=v[x];}return w;},invert:function(y){{};var z={};for(var A in y){z[y[A].toString()]=A;}return z;},getKeyFromValue:function(B,C){{};for(var D in B){if(B.hasOwnProperty(D)&&B[D]===C){return D;}}return null;},contains:function(E,F){{};return this.getKeyFromValue(E,F)!==null;},select:function(G,H){{};return H[G];},fromArray:function(I){{};var J={};for(var i=0,l=I.length;i<l;i++){{};J[I[i].toString()]=true;}return J;}}});})();(function(){var b="-",a="qx.event.handler.Element";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(c){qx.core.Object.call(this);this._manager=c;this._registeredEvents={};},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{abort:true,scroll:true,select:true,reset:true,submit:true},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE,IGNORE_CAN_HANDLE:true},members:{canHandleEvent:function(d,e){},registerEvent:function(f,g,h){var k=qx.core.ObjectRegistry.toHashCode(f);var i=k+b+g;var j=qx.lang.Function.listener(this._onNative,this,i);qx.bom.Event.addNativeListener(f,g,j);this._registeredEvents[i]={element:f,type:g,listener:j};},unregisterEvent:function(l,m,n){var q=this._registeredEvents;if(!q){return;}var r=qx.core.ObjectRegistry.toHashCode(l);var o=r+b+m;var p=this._registeredEvents[o];if(p){qx.bom.Event.removeNativeListener(l,m,p.listener);}delete this._registeredEvents[o];},_onNative:qx.event.GlobalError.observeMethod(function(s,t){var v=this._registeredEvents;if(!v){return;}var u=v[t];qx.event.Registration.fireNonBubblingEvent(u.element,u.type,qx.event.type.Native,[s]);})},destruct:function(){var w;var x=this._registeredEvents;for(var y in x){w=x[y];qx.bom.Event.removeNativeListener(w.element,w.type,w.listener);}this._manager=this._registeredEvents=null;},defer:function(z){qx.event.Registration.addHandler(z);}});})();(function(){var e="orientationchange",d="resize",c="landscape",b="portrait",a="qx.event.handler.Orientation";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(f){qx.core.Object.call(this);this.__hU=f;this.__hV=f.getWindow();this._initObserver();},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{orientationchange:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_WINDOW,IGNORE_CAN_HANDLE:true},members:{__hU:null,__hV:null,__hW:null,__hX:null,__hY:null,canHandleEvent:function(g,h){},registerEvent:function(i,j,k){},unregisterEvent:function(l,m,n){},_initObserver:function(){this.__hY=qx.lang.Function.listener(this._onNative,this);this.__hW=qx.bom.Event.supportsEvent(this.__hV,e)?e:d;var Event=qx.bom.Event;Event.addNativeListener(this.__hV,this.__hW,this.__hY);},_stopObserver:function(){var Event=qx.bom.Event;Event.removeNativeListener(this.__hV,this.__hW,this.__hY);},_onNative:qx.event.GlobalError.observeMethod(function(o){var q=qx.bom.Viewport;var p=q.getOrientation();if(this.__hX!=p){this.__hX=p;var r=q.isLandscape()?c:b;qx.event.Registration.fireEvent(this.__hV,e,qx.event.type.Orientation,[p,r]);}})},destruct:function(){this._stopObserver();this.__hU=this.__hV=null;},defer:function(s){qx.event.Registration.addHandler(s);}});})();(function(){var t="qx.mobile.emulatetouch",s="touchend",r="touchstart",q="touchmove",p="mousemove",o="touchcancel",n="mouseup",m="mousedown",l="qx.client",k="mshtml",d="qx.event.handler.Touch",j="useraction",h="swipe",c="qx.mobile.nativescroll",b="webkit",g="off",f="tap",i="x",a="y";qx.Class.define(d,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(u){qx.core.Object.call(this);this.__hc=u;this.__hd=u.getWindow();this.__he=this.__hd.document;this._initTouchObserver();this._initMouseObserver();},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{touchstart:1,touchmove:1,touchend:1,touchcancel:1,tap:1,swipe:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE+qx.event.IEventHandler.TARGET_DOCUMENT,IGNORE_CAN_HANDLE:true,MOUSE_TO_TOUCH_MAPPING:{"mousedown":"touchstart","mousemove":"touchmove","mouseup":"touchend"},SWIPE_DIRECTION:{x:["left","right"],y:["up","down"]},TAP_MAX_DISTANCE:10,SWIPE_MIN_DISTANCE:11,SWIPE_MIN_VELOCITY:0},members:{__hf:null,__hg:null,__hc:null,__hd:null,__he:null,__hh:null,__hi:null,__hj:null,__hk:null,__hl:false,__hm:null,canHandleEvent:function(v,w){},registerEvent:function(x,y,z){},unregisterEvent:function(A,B,C){},__hn:function(D){var E=qx.bom.Event.getTarget(D);if(qx.core.Variant.isSet(l,b)){if(E&&E.nodeType==3){E=E.parentNode;}}return E;},__ho:function(F,G,H,I){if(!H){H=this.__hn(F);}var G=G||F.type;if(H&&H.nodeType){qx.event.Registration.fireEvent(H,G,I||qx.event.type.Touch,[F,H,null,true,true]);}qx.event.Registration.fireEvent(this.__hd,j,qx.event.type.Data,[G]);},__hp:function(J,K,L){if(!L){L=this.__hn(J);}var K=K||J.type;if(K==r){this.__hq(J,L);}else if(K==q){this.__hr(J,L);}else if(K==s){this.__hs(J,L);}},__hq:function(M,N){var O=M.changedTouches[0];this.__hh=O.screenX;this.__hi=O.screenY;this.__hj=new Date().getTime();this.__hk=M.changedTouches.length===1;},__hr:function(P,Q){if(this.__hk&&P.changedTouches.length>1){this.__hk=false;}},__hs:function(R,S){if(this.__hk){var T=R.changedTouches[0];var V={x:T.screenX-this.__hh,y:T.screenY-this.__hi};var W=qx.event.handler.Touch;if(this.__hm==S&&Math.abs(V.x)<=W.TAP_MAX_DISTANCE&&Math.abs(V.y)<=W.TAP_MAX_DISTANCE){this.__ho(R,f,S,qx.event.type.Tap);}else{var U=this.__ht(R,S,V);if(U){R.swipe=U;this.__ho(R,h,S,qx.event.type.Swipe);}}}},__ht:function(X,Y,ba){var be=qx.event.handler.Touch;var bf=new Date().getTime()-this.__hj;var bh=(Math.abs(ba.x)>=Math.abs(ba.y))?i:a;var bb=ba[bh];var bc=be.SWIPE_DIRECTION[bh][bb<0?0:1];var bg=(bf!==0)?bb/bf:0;var bd=null;if(Math.abs(bg)>=be.SWIPE_MIN_VELOCITY&&Math.abs(bb)>=be.SWIPE_MIN_DISTANCE){bd={startTime:this.__hj,duration:bf,axis:bh,direction:bc,distance:bb,velocity:bg};}return bd;},__hu:qx.core.Variant.select(t,{"on":function(bi){var bj=bi.type;var bl=qx.event.handler.Touch.MOUSE_TO_TOUCH_MAPPING;if(bl[bj]){bj=bl[bj];if(bj==r&&this.__hv(bi)){this.__hl=true;}else if(bj==s){this.__hl=false;}var bm=this.__hw(bi);var bk=(bj==s?[]:[bm]);bi.touches=bk;bi.targetTouches=bk;bi.changedTouches=[bm];}return bj;},"default":qx.lang.Function.empty}),__hv:qx.core.Variant.select(t,{"on":function(bn){if(qx.core.Variant.isSet(l,k)){var bo=1;}else{var bo=0;}return bn.button==bo;},"default":qx.lang.Function.empty}),__hw:qx.core.Variant.select(t,{"on":function(bp){var bq=this.__hn(bp);return {clientX:bp.clientX,clientY:bp.clientY,screenX:bp.screenX,screenY:bp.screenY,pageX:bp.pageX,pageY:bp.pageY,identifier:1,target:bq};},"default":qx.lang.Function.empty}),_initTouchObserver:function(){this.__hf=qx.lang.Function.listener(this._onTouchEvent,this);var Event=qx.bom.Event;Event.addNativeListener(this.__he,r,this.__hf);Event.addNativeListener(this.__he,q,this.__hf);Event.addNativeListener(this.__he,s,this.__hf);Event.addNativeListener(this.__he,o,this.__hf);},_initMouseObserver:qx.core.Variant.select(t,{"on":function(){if(!qx.bom.client.Feature.TOUCH){this.__hg=qx.lang.Function.listener(this._onMouseEvent,this);var Event=qx.bom.Event;Event.addNativeListener(this.__he,m,this.__hg);Event.addNativeListener(this.__he,p,this.__hg);Event.addNativeListener(this.__he,n,this.__hg);}},"default":qx.lang.Function.empty}),_stopTouchObserver:function(){var Event=qx.bom.Event;Event.removeNativeListener(this.__he,r,this.__hf);Event.removeNativeListener(this.__he,q,this.__hf);Event.removeNativeListener(this.__he,s,this.__hf);Event.removeNativeListener(this.__he,o,this.__hf);},_stopMouseObserver:qx.core.Variant.select(t,{"on":function(){if(!qx.bom.client.Feature.TOUCH){var Event=qx.bom.Event;Event.removeNativeListener(this.__he,m,this.__hg);Event.removeNativeListener(this.__he,p,this.__hg);Event.removeNativeListener(this.__he,n,this.__hg);}},"default":qx.lang.Function.empty}),_onTouchEvent:qx.event.GlobalError.observeMethod(function(br){this._commonTouchEventHandler(br);}),_onMouseEvent:qx.core.Variant.select(t,{"on":qx.event.GlobalError.observeMethod(function(bs){if(!qx.bom.client.Feature.TOUCH){if(bs.type==p&&!this.__hl){return;}var bt=this.__hu(bs);this._commonTouchEventHandler(bs,bt);}}),"default":qx.lang.Function.empty}),_commonTouchEventHandler:function(bu,bv){var bv=bv||bu.type;if(bv==r){this.__hm=this.__hn(bu);}this.__ho(bu,bv);this.__hp(bu,bv);}},destruct:function(){this._stopTouchObserver();this._stopMouseObserver();this.__hc=this.__hd=this.__he=this.__hm=null;},defer:function(bw){qx.event.Registration.addHandler(bw);if(qx.bom.client.Feature.TOUCH){if(qx.core.Variant.isSet(c,g)){document.addEventListener(q,function(e){e.preventDefault();});}qx.event.Registration.getManager(document).getHandler(bw);}}});})();(function(){var n="iPod",m="Win32",l="",k="Win64",j="Linux",i="BSD",h="Macintosh",g="iPhone",f="Windows",e="qx.bom.client.Platform",b="iPad",d="X11",c="MacIntel",a="MacPPC";qx.Class.define(e,{statics:{NAME:"",WIN:false,MAC:false,UNIX:false,UNKNOWN_PLATFORM:false,__kH:function(){var o=navigator.platform;if(o==null||o===l){o=navigator.userAgent;}if(o.indexOf(f)!=-1||o.indexOf(m)!=-1||o.indexOf(k)!=-1){this.WIN=true;this.NAME="win";}else if(o.indexOf(h)!=-1||o.indexOf(a)!=-1||o.indexOf(c)!=-1||o.indexOf(n)!=-1||o.indexOf(g)!=-1||o.indexOf(b)!=-1){this.MAC=true;this.NAME="mac";}else if(o.indexOf(d)!=-1||o.indexOf(j)!=-1||o.indexOf(i)!=-1){this.UNIX=true;this.NAME="unix";}else{this.UNKNOWN_PLATFORM=true;this.WIN=true;this.NAME="win";}}},defer:function(p){p.__kH();}});})();(function(){var j="win98",i="osx2",h="osx0",g="osx4",f="win95",e="win2000",d="osx1",c="osx5",b="osx3",a="Windows NT 5.01",I=")",H="winxp",G="freebsd",F="sunos",E="SV1",D="|",C="nintendods",B="winnt4",A="wince",z="winme",q="os9",r="\.",o="osx",p="linux",m="netbsd",n="winvista",k="openbsd",l="(",s="win2003",t="iPad",v="symbian",u="win7",x="g",w="qx.bom.client.System",y=" Mobile/";qx.Bootstrap.define(w,{statics:{NAME:"",SP1:false,SP2:false,WIN95:false,WIN98:false,WINME:false,WINNT4:false,WIN2000:false,WINXP:false,WIN2003:false,WINVISTA:false,WIN7:false,WINCE:false,LINUX:false,SUNOS:false,FREEBSD:false,NETBSD:false,OPENBSD:false,OSX:false,OS9:false,SYMBIAN:false,NINTENDODS:false,PSP:false,IPHONE:false,IPAD:false,UNKNOWN_SYSTEM:false,__lu:{"Windows NT 6.1":u,"Windows NT 6.0":n,"Windows NT 5.2":s,"Windows NT 5.1":H,"Windows NT 5.0":e,"Windows 2000":e,"Windows NT 4.0":B,"Win 9x 4.90":z,"Windows CE":A,"Windows 98":j,"Win98":j,"Windows 95":f,"Win95":f,"Linux":p,"FreeBSD":G,"NetBSD":m,"OpenBSD":k,"SunOS":F,"Symbian System":v,"Nitro":C,"PSP":"sonypsp","Mac OS X 10_5":c,"Mac OS X 10.5":c,"Mac OS X 10_4":g,"Mac OS X 10.4":g,"Mac OS X 10_3":b,"Mac OS X 10.3":b,"Mac OS X 10_2":i,"Mac OS X 10.2":i,"Mac OS X 10_1":d,"Mac OS X 10.1":d,"Mac OS X 10_0":h,"Mac OS X 10.0":h,"Mac OS X":o,"Mac OS 9":q},__lv:function(){var L=navigator.userAgent;var K=[];for(var J in this.__lu){K.push(J);}var M=new RegExp(l+K.join(D).replace(/\./g,r)+I,x);if(!M.test(L)){this.UNKNOWN_SYSTEM=true;if(!qx.bom.client.Platform.UNKNOWN_PLATFORM){if(qx.bom.client.Platform.UNIX){this.NAME="linux";this.LINUX=true;}else if(qx.bom.client.Platform.MAC){this.NAME="osx5";this.OSX=true;}else{this.NAME="winxp";this.WINXP=true;}}else{this.NAME="winxp";this.WINXP=true;}return;}if(qx.bom.client.Engine.WEBKIT&&RegExp(y).test(navigator.userAgent)){if(RegExp(t).test(navigator.userAgent)){this.IPAD=true;this.NAME="ipad";}else{this.IPHONE=true;this.NAME="iphone";}}else{this.NAME=this.__lu[RegExp.$1];this[this.NAME.toUpperCase()]=true;if(qx.bom.client.Platform.WIN){if(L.indexOf(a)!==-1){this.SP1=true;}else if(qx.bom.client.Engine.MSHTML&&L.indexOf(E)!==-1){this.SP2=true;}}}}},defer:function(N){N.__lv();}});})();(function(){var p="mouseup",o="click",n="qx.client",m="mousedown",l="contextmenu",k="mousewheel",j="dblclick",h="mouseover",g="mouseout",f="mousemove",c="on",e="useraction",d="DOMMouseScroll",b="gecko|webkit",a="qx.event.handler.Mouse";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(q){qx.core.Object.call(this);this.__eD=q;this.__eE=q.getWindow();this.__eF=this.__eE.document;this._initButtonObserver();this._initMoveObserver();this._initWheelObserver();},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{mousemove:1,mouseover:1,mouseout:1,mousedown:1,mouseup:1,click:1,dblclick:1,contextmenu:1,mousewheel:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE,IGNORE_CAN_HANDLE:true},members:{__eG:null,__eH:null,__eI:null,__eJ:null,__eK:null,__eD:null,__eE:null,__eF:null,canHandleEvent:function(r,s){},registerEvent:qx.bom.client.System.IPHONE?function(t,u,v){t[c+u]=qx.lang.Function.returnNull;}:qx.lang.Function.returnNull,unregisterEvent:qx.bom.client.System.IPHONE?function(w,x,y){w[c+x]=undefined;}:qx.lang.Function.returnNull,__eL:function(z,A,B){if(!B){B=qx.bom.Event.getTarget(z);}if(B&&B.nodeType){qx.event.Registration.fireEvent(B,A||z.type,A==k?qx.event.type.MouseWheel:qx.event.type.Mouse,[z,B,null,true,true]);}qx.event.Registration.fireEvent(this.__eE,e,qx.event.type.Data,[A||z.type]);},__eM:function(){var D=[this.__eE,this.__eF,this.__eF.body];var E=this.__eE;var C=d;for(var i=0;i<D.length;i++){if(qx.bom.Event.supportsEvent(D[i],k)){C=k;E=D[i];break;}}return {type:C,target:E};},_initButtonObserver:function(){this.__eG=qx.lang.Function.listener(this._onButtonEvent,this);var Event=qx.bom.Event;Event.addNativeListener(this.__eF,m,this.__eG);Event.addNativeListener(this.__eF,p,this.__eG);Event.addNativeListener(this.__eF,o,this.__eG);Event.addNativeListener(this.__eF,j,this.__eG);Event.addNativeListener(this.__eF,l,this.__eG);},_initMoveObserver:function(){this.__eH=qx.lang.Function.listener(this._onMoveEvent,this);var Event=qx.bom.Event;Event.addNativeListener(this.__eF,f,this.__eH);Event.addNativeListener(this.__eF,h,this.__eH);Event.addNativeListener(this.__eF,g,this.__eH);},_initWheelObserver:function(){this.__eI=qx.lang.Function.listener(this._onWheelEvent,this);var F=this.__eM();qx.bom.Event.addNativeListener(F.target,F.type,this.__eI);},_stopButtonObserver:function(){var Event=qx.bom.Event;Event.removeNativeListener(this.__eF,m,this.__eG);Event.removeNativeListener(this.__eF,p,this.__eG);Event.removeNativeListener(this.__eF,o,this.__eG);Event.removeNativeListener(this.__eF,j,this.__eG);Event.removeNativeListener(this.__eF,l,this.__eG);},_stopMoveObserver:function(){var Event=qx.bom.Event;Event.removeNativeListener(this.__eF,f,this.__eH);Event.removeNativeListener(this.__eF,h,this.__eH);Event.removeNativeListener(this.__eF,g,this.__eH);},_stopWheelObserver:function(){var G=this.__eM();qx.bom.Event.removeNativeListener(G.target,G.type,this.__eI);},_onMoveEvent:qx.event.GlobalError.observeMethod(function(H){this.__eL(H);}),_onButtonEvent:qx.event.GlobalError.observeMethod(function(I){var J=I.type;var K=qx.bom.Event.getTarget(I);if(qx.core.Variant.isSet(n,b)){if(K&&K.nodeType==3){K=K.parentNode;}}if(this.__eN){this.__eN(I,J,K);}if(this.__eP){this.__eP(I,J,K);}this.__eL(I,J,K);if(this.__eO){this.__eO(I,J,K);}if(this.__eQ){this.__eQ(I,J,K);}this.__eJ=J;}),_onWheelEvent:qx.event.GlobalError.observeMethod(function(L){this.__eL(L,k);}),__eN:qx.core.Variant.select(n,{"webkit":function(M,N,O){if(qx.bom.client.Engine.VERSION<530){if(N==l){this.__eL(M,p,O);}}},"default":null}),__eO:qx.core.Variant.select(n,{"opera":function(P,Q,R){if(Q==p&&P.button==2){this.__eL(P,l,R);}},"default":null}),__eP:qx.core.Variant.select(n,{"mshtml":function(S,T,U){if(S.target!==undefined){return;}if(T==p&&this.__eJ==o){this.__eL(S,m,U);}else if(T==j){this.__eL(S,o,U);}},"default":null}),__eQ:qx.core.Variant.select(n,{"mshtml":null,"default":function(V,W,X){switch(W){case m:this.__eK=X;break;case p:if(X!==this.__eK){var Y=qx.dom.Hierarchy.getCommonParent(X,this.__eK);this.__eL(V,o,Y);}}}})},destruct:function(){this._stopButtonObserver();this._stopMoveObserver();this._stopWheelObserver();this.__eD=this.__eE=this.__eF=this.__eK=null;},defer:function(ba){qx.event.Registration.addHandler(ba);}});})();(function(){var m="keydown",l="qx.client",k="keypress",j="NumLock",i="keyup",h="Enter",g="0",f="9",e="-",d="PageUp",bu="+",bt="PrintScreen",bs="gecko",br="A",bq="Z",bp="Left",bo="F5",bn="Down",bm="Up",bl="F11",t="F6",u="useraction",r="F3",s="keyinput",p="Insert",q="F8",n="End",o="/",B="Delete",C="*",O="cmd",K="F1",W="F4",R="Home",bh="F2",bc="F12",G="PageDown",bk="F7",bj="Win",bi="F9",F="F10",I="Right",J="text",M="Escape",P="webkit",S="5",Y="3",be="Meta",v="7",w="CapsLock",H="input",V="Control",U="Space",T="Tab",bb="Shift",ba="Pause",Q="Unidentified",X="qx.event.handler.Keyboard",a="mshtml|webkit",bd="6",x="off",y="Apps",L="4",b="Alt",c="mshtml",E="2",z="Scroll",A="1",D="8",N="autoComplete",bg=",",bf="Backspace";qx.Class.define(X,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(bv){qx.core.Object.call(this);this.__gO=bv;this.__gP=bv.getWindow();if(qx.core.Variant.isSet(l,bs)){this.__gQ=this.__gP;}else{this.__gQ=this.__gP.document.documentElement;}this.__gR={};this._initKeyObserver();},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{keyup:1,keydown:1,keypress:1,keyinput:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE,IGNORE_CAN_HANDLE:true,isValidKeyIdentifier:function(bw){if(this._identifierToKeyCodeMap[bw]){return true;}if(bw.length!=1){return false;}if(bw>=g&&bw<=f){return true;}if(bw>=br&&bw<=bq){return true;}switch(bw){case bu:case e:case C:case o:return true;default:return false;}}},members:{__gS:null,__gO:null,__gP:null,__gQ:null,__gR:null,__gT:null,__gU:null,__gV:null,canHandleEvent:function(bx,by){},registerEvent:function(bz,bA,bB){},unregisterEvent:function(bC,bD,bE){},_fireInputEvent:function(bF,bG){var bH=this.__gW();if(bH&&bH.offsetWidth!=0){var event=qx.event.Registration.createEvent(s,qx.event.type.KeyInput,[bF,bH,bG]);this.__gO.dispatchEvent(bH,event);}if(this.__gP){qx.event.Registration.fireEvent(this.__gP,u,qx.event.type.Data,[s]);}},_fireSequenceEvent:function(bI,bJ,bK){var bL=this.__gW();var bM=bI.keyCode;var event=qx.event.Registration.createEvent(bJ,qx.event.type.KeySequence,[bI,bL,bK]);this.__gO.dispatchEvent(bL,event);if(qx.core.Variant.isSet(l,a)){if(bJ==m&&event.getDefaultPrevented()){if(!this._isNonPrintableKeyCode(bM)&&!this._emulateKeyPress[bM]){this._fireSequenceEvent(bI,k,bK);}}}if(this.__gP){qx.event.Registration.fireEvent(this.__gP,u,qx.event.type.Data,[bJ]);}},__gW:function(){var bN=this.__gO.getHandler(qx.event.handler.Focus);var bO=bN.getActive();if(!bO||bO.offsetWidth==0){bO=bN.getFocus();}if(!bO||bO.offsetWidth==0){bO=this.__gO.getWindow().document.body;}return bO;},_initKeyObserver:function(){this.__gS=qx.lang.Function.listener(this.__gX,this);this.__gV=qx.lang.Function.listener(this.__ha,this);var Event=qx.bom.Event;Event.addNativeListener(this.__gQ,i,this.__gS);Event.addNativeListener(this.__gQ,m,this.__gS);Event.addNativeListener(this.__gQ,k,this.__gV);},_stopKeyObserver:function(){var Event=qx.bom.Event;Event.removeNativeListener(this.__gQ,i,this.__gS);Event.removeNativeListener(this.__gQ,m,this.__gS);Event.removeNativeListener(this.__gQ,k,this.__gV);for(var bQ in (this.__gU||{})){var bP=this.__gU[bQ];Event.removeNativeListener(bP.target,k,bP.callback);}delete (this.__gU);},__gX:qx.event.GlobalError.observeMethod(qx.core.Variant.select(l,{"mshtml":function(bR){bR=window.event||bR;var bU=bR.keyCode;var bS=0;var bT=bR.type;if(!(this.__gR[bU]==m&&bT==m)){this._idealKeyHandler(bU,bS,bT,bR);}if(bT==m){if(this._isNonPrintableKeyCode(bU)||this._emulateKeyPress[bU]){this._idealKeyHandler(bU,bS,k,bR);}}this.__gR[bU]=bT;},"gecko":function(bV){var ca=this._keyCodeFix[bV.keyCode]||bV.keyCode;var bX=0;var bY=bV.type;if(qx.bom.client.Platform.WIN){var bW=ca?this._keyCodeToIdentifier(ca):this._charCodeToIdentifier(bX);if(!(this.__gR[bW]==m&&bY==m)){this._idealKeyHandler(ca,bX,bY,bV);}this.__gR[bW]=bY;}else{this._idealKeyHandler(ca,bX,bY,bV);}this.__gY(bV.target,bY,ca);},"webkit":function(cb){var ce=0;var cc=0;var cd=cb.type;if(qx.bom.client.Engine.VERSION<525.13){if(cd==i||cd==m){ce=this._charCode2KeyCode[cb.charCode]||cb.keyCode;}else{if(this._charCode2KeyCode[cb.charCode]){ce=this._charCode2KeyCode[cb.charCode];}else{cc=cb.charCode;}}this._idealKeyHandler(ce,cc,cd,cb);}else{ce=cb.keyCode;this._idealKeyHandler(ce,cc,cd,cb);if(cd==m){if(this._isNonPrintableKeyCode(ce)||this._emulateKeyPress[ce]){this._idealKeyHandler(ce,cc,k,cb);}}this.__gR[ce]=cd;}},"opera":function(cf){this.__gT=cf.keyCode;this._idealKeyHandler(cf.keyCode,0,cf.type,cf);}})),__gY:qx.core.Variant.select(l,{"gecko":function(cg,ch,ci){if(ch===m&&(ci==33||ci==34||ci==38||ci==40)&&cg.type==J&&cg.tagName.toLowerCase()===H&&cg.getAttribute(N)!==x){if(!this.__gU){this.__gU={};}var ck=qx.core.ObjectRegistry.toHashCode(cg);if(this.__gU[ck]){return;}var self=this;this.__gU[ck]={target:cg,callback:function(cl){qx.bom.Event.stopPropagation(cl);self.__ha(cl);}};var cj=qx.event.GlobalError.observeMethod(this.__gU[ck].callback);qx.bom.Event.addNativeListener(cg,k,cj);}},"default":null}),__ha:qx.event.GlobalError.observeMethod(qx.core.Variant.select(l,{"mshtml":function(cm){cm=window.event||cm;if(this._charCode2KeyCode[cm.keyCode]){this._idealKeyHandler(this._charCode2KeyCode[cm.keyCode],0,cm.type,cm);}else{this._idealKeyHandler(0,cm.keyCode,cm.type,cm);}},"gecko":function(cn){var cq=this._keyCodeFix[cn.keyCode]||cn.keyCode;var co=cn.charCode;var cp=cn.type;this._idealKeyHandler(cq,co,cp,cn);},"webkit":function(cr){if(qx.bom.client.Engine.VERSION<525.13){var cu=0;var cs=0;var ct=cr.type;if(ct==i||ct==m){cu=this._charCode2KeyCode[cr.charCode]||cr.keyCode;}else{if(this._charCode2KeyCode[cr.charCode]){cu=this._charCode2KeyCode[cr.charCode];}else{cs=cr.charCode;}}this._idealKeyHandler(cu,cs,ct,cr);}else{if(this._charCode2KeyCode[cr.keyCode]){this._idealKeyHandler(this._charCode2KeyCode[cr.keyCode],0,cr.type,cr);}else{this._idealKeyHandler(0,cr.keyCode,cr.type,cr);}}},"opera":function(cv){var cx=cv.keyCode;var cw=cv.type;if(cx!=this.__gT){this._idealKeyHandler(0,this.__gT,cw,cv);}else{if(this._keyCodeToIdentifierMap[cv.keyCode]){this._idealKeyHandler(cv.keyCode,0,cv.type,cv);}else{this._idealKeyHandler(0,cv.keyCode,cv.type,cv);}}}})),_idealKeyHandler:function(cy,cz,cA,cB){var cC;if(cy||(!cy&&!cz)){cC=this._keyCodeToIdentifier(cy);this._fireSequenceEvent(cB,cA,cC);}else{cC=this._charCodeToIdentifier(cz);this._fireSequenceEvent(cB,k,cC);this._fireInputEvent(cB,cz);}},_specialCharCodeMap:{8:bf,9:T,13:h,27:M,32:U},_emulateKeyPress:qx.core.Variant.select(l,{"mshtml":{8:true,9:true},"webkit":{8:true,9:true,27:true},"default":{}}),_keyCodeToIdentifierMap:{16:bb,17:V,18:b,20:w,224:be,37:bp,38:bm,39:I,40:bn,33:d,34:G,35:n,36:R,45:p,46:B,112:K,113:bh,114:r,115:W,116:bo,117:t,118:bk,119:q,120:bi,121:F,122:bl,123:bc,144:j,44:bt,145:z,19:ba,91:qx.bom.client.Platform.MAC?O:bj,92:bj,93:qx.bom.client.Platform.MAC?O:y},_numpadToCharCode:{96:g.charCodeAt(0),97:A.charCodeAt(0),98:E.charCodeAt(0),99:Y.charCodeAt(0),100:L.charCodeAt(0),101:S.charCodeAt(0),102:bd.charCodeAt(0),103:v.charCodeAt(0),104:D.charCodeAt(0),105:f.charCodeAt(0),106:C.charCodeAt(0),107:bu.charCodeAt(0),109:e.charCodeAt(0),110:bg.charCodeAt(0),111:o.charCodeAt(0)},_charCodeA:br.charCodeAt(0),_charCodeZ:bq.charCodeAt(0),_charCode0:g.charCodeAt(0),_charCode9:f.charCodeAt(0),_isNonPrintableKeyCode:function(cD){return this._keyCodeToIdentifierMap[cD]?true:false;},_isIdentifiableKeyCode:function(cE){if(cE>=this._charCodeA&&cE<=this._charCodeZ){return true;}if(cE>=this._charCode0&&cE<=this._charCode9){return true;}if(this._specialCharCodeMap[cE]){return true;}if(this._numpadToCharCode[cE]){return true;}if(this._isNonPrintableKeyCode(cE)){return true;}return false;},_keyCodeToIdentifier:function(cF){if(this._isIdentifiableKeyCode(cF)){var cG=this._numpadToCharCode[cF];if(cG){return String.fromCharCode(cG);}return (this._keyCodeToIdentifierMap[cF]||this._specialCharCodeMap[cF]||String.fromCharCode(cF));}else{return Q;}},_charCodeToIdentifier:function(cH){return this._specialCharCodeMap[cH]||String.fromCharCode(cH).toUpperCase();},_identifierToKeyCode:function(cI){return qx.event.handler.Keyboard._identifierToKeyCodeMap[cI]||cI.charCodeAt(0);}},destruct:function(){this._stopKeyObserver();this.__gT=this.__gO=this.__gP=this.__gQ=this.__gR=null;},defer:function(cJ,cK){qx.event.Registration.addHandler(cJ);if(!cJ._identifierToKeyCodeMap){cJ._identifierToKeyCodeMap={};for(var cL in cK._keyCodeToIdentifierMap){cJ._identifierToKeyCodeMap[cK._keyCodeToIdentifierMap[cL]]=parseInt(cL,10);}for(var cL in cK._specialCharCodeMap){cJ._identifierToKeyCodeMap[cK._specialCharCodeMap[cL]]=parseInt(cL,10);}}if(qx.core.Variant.isSet(l,c)){cK._charCode2KeyCode={13:13,27:27};}else if(qx.core.Variant.isSet(l,bs)){cK._keyCodeFix={12:cK._identifierToKeyCode(j)};}else if(qx.core.Variant.isSet(l,P)){if(qx.bom.client.Engine.VERSION<525.13){cK._charCode2KeyCode={63289:cK._identifierToKeyCode(j),63276:cK._identifierToKeyCode(d),63277:cK._identifierToKeyCode(G),63275:cK._identifierToKeyCode(n),63273:cK._identifierToKeyCode(R),63234:cK._identifierToKeyCode(bp),63232:cK._identifierToKeyCode(bm),63235:cK._identifierToKeyCode(I),63233:cK._identifierToKeyCode(bn),63272:cK._identifierToKeyCode(B),63302:cK._identifierToKeyCode(p),63236:cK._identifierToKeyCode(K),63237:cK._identifierToKeyCode(bh),63238:cK._identifierToKeyCode(r),63239:cK._identifierToKeyCode(W),63240:cK._identifierToKeyCode(bo),63241:cK._identifierToKeyCode(t),63242:cK._identifierToKeyCode(bk),63243:cK._identifierToKeyCode(q),63244:cK._identifierToKeyCode(bi),63245:cK._identifierToKeyCode(F),63246:cK._identifierToKeyCode(bl),63247:cK._identifierToKeyCode(bc),63248:cK._identifierToKeyCode(bt),3:cK._identifierToKeyCode(h),12:cK._identifierToKeyCode(j),13:cK._identifierToKeyCode(h)};}else{cK._charCode2KeyCode={13:13,27:27};}}}});})();(function(){var a="qx.event.handler.Capture";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{capture:true,losecapture:true},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE,IGNORE_CAN_HANDLE:true},members:{canHandleEvent:function(b,c){},registerEvent:function(d,e,f){},unregisterEvent:function(g,h,i){}},defer:function(j){qx.event.Registration.addHandler(j);}});})();(function(){var k="alias",j="copy",i="blur",h="mouseout",g="keydown",f="Ctrl",d="Shift",c="mousemove",b="move",a="mouseover",A="Alt",z="keyup",y="mouseup",x="dragend",w="on",v="mousedown",u="qxDraggable",t="drag",s="drop",r="qxDroppable",p="qx.event.handler.DragDrop",q="droprequest",n="dragstart",o="dragchange",l="dragleave",m="dragover";qx.Class.define(p,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(B){qx.core.Object.call(this);this.__jt=B;this.__ju=B.getWindow().document.documentElement;this.__jt.addListener(this.__ju,v,this._onMouseDown,this);this.__jG();},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{dragstart:1,dragend:1,dragover:1,dragleave:1,drop:1,drag:1,dragchange:1,droprequest:1},IGNORE_CAN_HANDLE:true},members:{__jt:null,__ju:null,__jv:null,__jw:null,__jx:null,__jy:null,__jz:null,__jA:null,__jB:null,__jC:null,__jD:false,__jE:0,__jF:0,canHandleEvent:function(C,D){},registerEvent:function(E,F,G){},unregisterEvent:function(H,I,J){},addType:function(K){this.__jx[K]=true;},addAction:function(L){this.__jy[L]=true;},supportsType:function(M){return !!this.__jx[M];},supportsAction:function(N){return !!this.__jy[N];},getData:function(O){if(!this.__jN||!this.__jv){throw new Error("This method must not be used outside the drop event listener!");}if(!this.__jx[O]){throw new Error("Unsupported data type: "+O+"!");}if(!this.__jA[O]){this.__jB=O;this.__jI(q,this.__jw,this.__jv,false);}if(!this.__jA[O]){throw new Error("Please use a droprequest listener to the drag source to fill the manager with data!");}return this.__jA[O]||null;},getCurrentAction:function(){return this.__jC;},addData:function(P,Q){this.__jA[P]=Q;},getCurrentType:function(){return this.__jB;},isSessionActive:function(){return this.__jD;},__jG:function(){this.__jx={};this.__jy={};this.__jz={};this.__jA={};},__jH:function(){if(this.__jw==null){return;}var T=this.__jy;var R=this.__jz;var S=null;if(this.__jN){if(R.Shift&&R.Ctrl&&T.alias){S=k;}else if(R.Shift&&R.Alt&&T.copy){S=j;}else if(R.Shift&&T.move){S=b;}else if(R.Alt&&T.alias){S=k;}else if(R.Ctrl&&T.copy){S=j;}else if(T.move){S=b;}else if(T.copy){S=j;}else if(T.alias){S=k;}}if(S!=this.__jC){this.__jC=S;this.__jI(o,this.__jw,this.__jv,false);}},__jI:function(U,V,W,X,Y){var bb=qx.event.Registration;var ba=bb.createEvent(U,qx.event.type.Drag,[X,Y]);if(V!==W){ba.setRelatedTarget(W);}return bb.dispatchEvent(V,ba);},__jJ:function(bc){while(bc&&bc.nodeType==1){if(bc.getAttribute(u)==w){return bc;}bc=bc.parentNode;}return null;},__jK:function(bd){while(bd&&bd.nodeType==1){if(bd.getAttribute(r)==w){return bd;}bd=bd.parentNode;}return null;},__jL:function(){this.__jw=null;this.__jt.removeListener(this.__ju,c,this._onMouseMove,this,true);this.__jt.removeListener(this.__ju,y,this._onMouseUp,this,true);qx.event.Registration.removeListener(window,i,this._onWindowBlur,this);this.__jG();},__jM:function(){if(this.__jD){this.__jt.removeListener(this.__ju,a,this._onMouseOver,this,true);this.__jt.removeListener(this.__ju,h,this._onMouseOut,this,true);this.__jt.removeListener(this.__ju,g,this._onKeyDown,this,true);this.__jt.removeListener(this.__ju,z,this._onKeyUp,this,true);this.__jI(x,this.__jw,this.__jv,false);this.__jD=false;}this.__jN=false;this.__jv=null;this.__jL();},__jN:false,_onWindowBlur:function(e){this.__jM();},_onKeyDown:function(e){var be=e.getKeyIdentifier();switch(be){case A:case f:case d:if(!this.__jz[be]){this.__jz[be]=true;this.__jH();}}},_onKeyUp:function(e){var bf=e.getKeyIdentifier();switch(bf){case A:case f:case d:if(this.__jz[bf]){this.__jz[bf]=false;this.__jH();}}},_onMouseDown:function(e){if(this.__jD){return;}var bg=this.__jJ(e.getTarget());if(bg){this.__jE=e.getDocumentLeft();this.__jF=e.getDocumentTop();this.__jw=bg;this.__jt.addListener(this.__ju,c,this._onMouseMove,this,true);this.__jt.addListener(this.__ju,y,this._onMouseUp,this,true);qx.event.Registration.addListener(window,i,this._onWindowBlur,this);}},_onMouseUp:function(e){if(this.__jN){this.__jI(s,this.__jv,this.__jw,false,e);}if(this.__jD){e.stopPropagation();}this.__jM();},_onMouseMove:function(e){if(this.__jD){if(!this.__jI(t,this.__jw,this.__jv,true,e)){this.__jM();}}else{if(Math.abs(e.getDocumentLeft()-this.__jE)>3||Math.abs(e.getDocumentTop()-this.__jF)>3){if(this.__jI(n,this.__jw,this.__jv,true,e)){this.__jD=true;this.__jt.addListener(this.__ju,a,this._onMouseOver,this,true);this.__jt.addListener(this.__ju,h,this._onMouseOut,this,true);this.__jt.addListener(this.__ju,g,this._onKeyDown,this,true);this.__jt.addListener(this.__ju,z,this._onKeyUp,this,true);var bh=this.__jz;bh.Ctrl=e.isCtrlPressed();bh.Shift=e.isShiftPressed();bh.Alt=e.isAltPressed();this.__jH();}else{this.__jI(x,this.__jw,this.__jv,false);this.__jL();}}}},_onMouseOver:function(e){var bi=e.getTarget();var bj=this.__jK(bi);if(bj&&bj!=this.__jv){this.__jN=this.__jI(m,bj,this.__jw,true,e);this.__jv=bj;this.__jH();}},_onMouseOut:function(e){var bl=this.__jK(e.getTarget());var bk=this.__jK(e.getRelatedTarget());if(bl&&bl!==bk&&bl==this.__jv){this.__jI(l,this.__jv,bk,false,e);this.__jv=null;this.__jN=false;qx.event.Timer.once(this.__jH,this,0);}}},destruct:function(){this.__jw=this.__jv=this.__jt=this.__ju=this.__jx=this.__jy=this.__jz=this.__jA=null;},defer:function(bm){qx.event.Registration.addHandler(bm);}});})();(function(){var c="qx.event.handler.Appear",b="disappear",a="appear";qx.Class.define(c,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(d){qx.core.Object.call(this);this.__cl=d;this.__cm={};qx.event.handler.Appear.__cn[this.$$hash]=this;},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{appear:true,disappear:true},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE,IGNORE_CAN_HANDLE:true,__cn:{},refresh:function(){var e=this.__cn;for(var f in e){e[f].refresh();}}},members:{__cl:null,__cm:null,canHandleEvent:function(g,h){},registerEvent:function(i,j,k){var l=qx.core.ObjectRegistry.toHashCode(i)+j;var m=this.__cm;if(m&&!m[l]){m[l]=i;i.$$displayed=i.offsetWidth>0;}},unregisterEvent:function(n,o,p){var q=qx.core.ObjectRegistry.toHashCode(n)+o;var r=this.__cm;if(!r){return;}if(r[q]){delete r[q];}},refresh:function(){var v=this.__cm;var w;for(var u in v){w=v[u];var s=w.offsetWidth>0;if((!!w.$$displayed)!==s){w.$$displayed=s;var t=qx.event.Registration.createEvent(s?a:b);this.__cl.dispatchEvent(w,t);}}}},destruct:function(){this.__cl=this.__cm=null;delete qx.event.handler.Appear.__cn[this.$$hash];},defer:function(x){qx.event.Registration.addHandler(x);}});})();(function(){var b="abstract",a="qx.event.dispatch.AbstractBubbling";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventDispatcher,type:b,construct:function(c){this._manager=c;},members:{_getParent:function(d){throw new Error("Missing implementation");},canDispatchEvent:function(e,event,f){return event.getBubbles();},dispatchEvent:function(g,event,h){var parent=g;var s=this._manager;var p,w;var n;var r,u;var t;var v=[];p=s.getListeners(g,h,true);w=s.getListeners(g,h,false);if(p){v.push(p);}if(w){v.push(w);}var parent=this._getParent(g);var l=[];var k=[];var m=[];var q=[];while(parent!=null){p=s.getListeners(parent,h,true);if(p){m.push(p);q.push(parent);}w=s.getListeners(parent,h,false);if(w){l.push(w);k.push(parent);}parent=this._getParent(parent);}event.setEventPhase(qx.event.type.Event.CAPTURING_PHASE);for(var i=m.length-1;i>=0;i--){t=q[i];event.setCurrentTarget(t);n=m[i];for(var j=0,o=n.length;j<o;j++){r=n[j];u=r.context||t;r.handler.call(u,event);}if(event.getPropagationStopped()){return;}}event.setEventPhase(qx.event.type.Event.AT_TARGET);event.setCurrentTarget(g);for(var i=0,x=v.length;i<x;i++){n=v[i];for(var j=0,o=n.length;j<o;j++){r=n[j];u=r.context||g;r.handler.call(u,event);}if(event.getPropagationStopped()){return;}}event.setEventPhase(qx.event.type.Event.BUBBLING_PHASE);for(var i=0,x=l.length;i<x;i++){t=k[i];event.setCurrentTarget(t);n=l[i];for(var j=0,o=n.length;j<o;j++){r=n[j];u=r.context||t;r.handler.call(u,event);}if(event.getPropagationStopped()){return;}}}}});})();(function(){var a="qx.event.dispatch.DomBubbling";qx.Class.define(a,{extend:qx.event.dispatch.AbstractBubbling,statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL},members:{_getParent:function(b){return b.parentNode;},canDispatchEvent:function(c,event,d){return c.nodeType!==undefined&&event.getBubbles();}},defer:function(e){qx.event.Registration.addDispatcher(e);}});})();(function(){var q="mshtml",p="",o="qx.client",n=" ",m=">",k="<",h="='",g="none",f="<INPUT TYPE='RADIO' NAME='RADIOTEST' VALUE='Second Choice'>",d="qx.bom.Element",a="' ",c="div",b="></";qx.Class.define(d,{statics:{__kI:{"onload":true,"onpropertychange":true,"oninput":true,"onchange":true,"name":true,"type":true,"checked":true,"disabled":true},__kJ:{},__kK:{},allowCreationWithMarkup:function(r){if(!r){r=window;}var s=r.location.href;if(qx.bom.Element.__kK[s]==undefined){try{r.document.createElement(f);qx.bom.Element.__kK[s]=true;}catch(e){qx.bom.Element.__kK[s]=false;}}return qx.bom.Element.__kK[s];},getHelperElement:function(t){if(!t){t=window;}var v=t.location.href;if(!qx.bom.Element.__kJ[v]){var u=qx.bom.Element.__kJ[v]=t.document.createElement(c);if(qx.bom.client.Engine.WEBKIT){u.style.display=g;t.document.body.appendChild(u);}}return qx.bom.Element.__kJ[v];},create:function(name,w,x){if(!x){x=window;}if(!name){throw new Error("The tag name is missing!");}var z=this.__kI;var y=p;for(var B in w){if(z[B]){y+=B+h+w[B]+a;}}var C;if(y!=p){if(qx.bom.Element.allowCreationWithMarkup(x)){C=x.document.createElement(k+name+n+y+m);}else{var A=qx.bom.Element.getHelperElement(x);A.innerHTML=k+name+n+y+b+name+m;C=A.firstChild;}}else{C=x.document.createElement(name);}for(var B in w){if(!z[B]){qx.bom.element.Attribute.set(C,B,w[B]);}}return C;},empty:function(D){return D.innerHTML=p;},addListener:function(E,F,G,self,H){return qx.event.Registration.addListener(E,F,G,self,H);},removeListener:function(I,J,K,self,L){return qx.event.Registration.removeListener(I,J,K,self,L);},removeListenerById:function(M,N){return qx.event.Registration.removeListenerById(M,N);},hasListener:function(O,P,Q){return qx.event.Registration.hasListener(O,P,Q);},focus:function(R){qx.event.Registration.getManager(R).getHandler(qx.event.handler.Focus).focus(R);},blur:function(S){qx.event.Registration.getManager(S).getHandler(qx.event.handler.Focus).blur(S);},activate:function(T){qx.event.Registration.getManager(T).getHandler(qx.event.handler.Focus).activate(T);},deactivate:function(U){qx.event.Registration.getManager(U).getHandler(qx.event.handler.Focus).deactivate(U);},capture:function(V,W){qx.event.Registration.getManager(V).getDispatcher(qx.event.dispatch.MouseCapture).activateCapture(V,W);},releaseCapture:function(X){qx.event.Registration.getManager(X).getDispatcher(qx.event.dispatch.MouseCapture).releaseCapture(X);},matchesSelector:function(Y,ba){if(ba){return qx.bom.Selector.query(ba,Y.parentNode).length>0;}else{return false;}},clone:function(bb,bc){var bf;if(bc||(qx.core.Variant.isSet(o,q)&&!qx.xml.Document.isXmlDocument(bb))){var bj=qx.event.Registration.getManager(bb);var bd=qx.dom.Hierarchy.getDescendants(bb);bd.push(bb);}if(qx.core.Variant.isSet(o,q)){for(var i=0,l=bd.length;i<l;i++){bj.toggleAttachedEvents(bd[i],false);}}var bf=bb.cloneNode(true);if(qx.core.Variant.isSet(o,q)){for(var i=0,l=bd.length;i<l;i++){bj.toggleAttachedEvents(bd[i],true);}}if(bc===true){var bm=qx.dom.Hierarchy.getDescendants(bf);bm.push(bf);var be,bh,bl,bg;for(var i=0,bk=bd.length;i<bk;i++){bl=bd[i];be=bj.serializeListeners(bl);if(be.length>0){bh=bm[i];for(var j=0,bi=be.length;j<bi;j++){bg=be[j];bj.addListener(bh,bg.type,bg.handler,bg.self,bg.capture);}}}}return bf;}}});})();(function(){var a="qx.event.type.Native";qx.Class.define(a,{extend:qx.event.type.Event,members:{init:function(b,c,d,e,f){qx.event.type.Event.prototype.init.call(this,e,f);this._target=c||qx.bom.Event.getTarget(b);this._relatedTarget=d||qx.bom.Event.getRelatedTarget(b);if(b.timeStamp){this._timeStamp=b.timeStamp;}this._native=b;this._returnValue=null;return this;},clone:function(g){var h=qx.event.type.Event.prototype.clone.call(this,g);var i={};h._native=this._cloneNativeEvent(this._native,i);h._returnValue=this._returnValue;return h;},_cloneNativeEvent:function(j,k){k.preventDefault=qx.lang.Function.empty;return k;},preventDefault:function(){qx.event.type.Event.prototype.preventDefault.call(this);qx.bom.Event.preventDefault(this._native);},getNativeEvent:function(){return this._native;},setReturnValue:function(l){this._returnValue=l;},getReturnValue:function(){return this._returnValue;}},destruct:function(){this._native=this._returnValue=null;}});})();(function(){var b="qx.client",a="qx.bom.Viewport";qx.Class.define(a,{statics:{getWidth:qx.core.Variant.select(b,{"opera":function(c){if(qx.bom.client.Engine.VERSION<9.5){return (c||window).document.body.clientWidth;}else{var d=(c||window).document;return qx.bom.Document.isStandardMode(c)?d.documentElement.clientWidth:d.body.clientWidth;}},"webkit":function(e){if(qx.bom.client.Engine.VERSION<523.15){return (e||window).innerWidth;}else{var f=(e||window).document;return qx.bom.Document.isStandardMode(e)?f.documentElement.clientWidth:f.body.clientWidth;}},"default":function(g){var h=(g||window).document;return qx.bom.Document.isStandardMode(g)?h.documentElement.clientWidth:h.body.clientWidth;}}),getHeight:qx.core.Variant.select(b,{"opera":function(i){if(qx.bom.client.Engine.VERSION<9.5){return (i||window).document.body.clientHeight;}else{var j=(i||window).document;return qx.bom.Document.isStandardMode(i)?j.documentElement.clientHeight:j.body.clientHeight;}},"webkit":function(k){if(qx.bom.client.Engine.VERSION<523.15){return (k||window).innerHeight;}else{var l=(k||window).document;return qx.bom.Document.isStandardMode(k)?l.documentElement.clientHeight:l.body.clientHeight;}},"default":function(m){var n=(m||window).document;return qx.bom.Document.isStandardMode(m)?n.documentElement.clientHeight:n.body.clientHeight;}}),getScrollLeft:qx.core.Variant.select(b,{"mshtml":function(o){var p=(o||window).document;return p.documentElement.scrollLeft||p.body.scrollLeft;},"default":function(q){return (q||window).pageXOffset;}}),getScrollTop:qx.core.Variant.select(b,{"mshtml":function(r){var s=(r||window).document;return s.documentElement.scrollTop||s.body.scrollTop;},"default":function(t){return (t||window).pageYOffset;}}),getOrientation:function(u){var v=(u||window).orientation;if(v==null){v=this.getWidth(u)>this.getHeight(u)?90:0;}return v;},isLandscape:function(w){return Math.abs(this.getOrientation(w))==90;},isPortrait:function(x){var y=this.getOrientation(x);return (y==0||y==180);}}});})();(function(){var f="CSS1Compat",e="position:absolute;width:0;height:0;width:1",d="qx.bom.Document",c="1px",b="qx.client",a="div";qx.Class.define(d,{statics:{isQuirksMode:qx.core.Variant.select(b,{"mshtml":function(g){if(qx.bom.client.Engine.VERSION>=8){return (g||window).document.documentMode===5;}else{return (g||window).document.compatMode!==f;}},"webkit":function(h){if(document.compatMode===undefined){var i=(h||window).document.createElement(a);i.style.cssText=e;return i.style.width===c?true:false;}else{return (h||window).document.compatMode!==f;}},"default":function(j){return (j||window).document.compatMode!==f;}}),isStandardMode:function(k){return !this.isQuirksMode(k);},getWidth:function(l){var m=(l||window).document;var n=qx.bom.Viewport.getWidth(l);var scroll=this.isStandardMode(l)?m.documentElement.scrollWidth:m.body.scrollWidth;return Math.max(scroll,n);},getHeight:function(o){var p=(o||window).document;var q=qx.bom.Viewport.getHeight(o);var scroll=this.isStandardMode(o)?p.documentElement.scrollHeight:p.body.scrollHeight;return Math.max(scroll,q);}}});})();(function(){var c="landscape",b="qx.event.type.Orientation",a="portrait";qx.Class.define(b,{extend:qx.event.type.Event,members:{__eB:null,__eC:null,init:function(d,e){qx.event.type.Event.prototype.init.call(this,false,false);this.__eB=d;this.__eC=e;return this;},clone:function(f){var g=qx.event.type.Event.prototype.clone.call(this,f);g.__eB=this.__eB;g.__eC=this.__eC;return g;},getOrientation:function(){return this.__eB;},isLandscape:function(){return this.__eC==c;},isPortrait:function(){return this.__eC==a;}}});})();(function(){var a="qx.event.type.Dom";qx.Class.define(a,{extend:qx.event.type.Native,statics:{SHIFT_MASK:1,CTRL_MASK:2,ALT_MASK:4,META_MASK:8},members:{_cloneNativeEvent:function(b,c){var c=qx.event.type.Native.prototype._cloneNativeEvent.call(this,b,c);c.shiftKey=b.shiftKey;c.ctrlKey=b.ctrlKey;c.altKey=b.altKey;c.metaKey=b.metaKey;return c;},getModifiers:function(){var e=0;var d=this._native;if(d.shiftKey){e|=qx.event.type.Dom.SHIFT_MASK;}if(d.ctrlKey){e|=qx.event.type.Dom.CTRL_MASK;}if(d.altKey){e|=qx.event.type.Dom.ALT_MASK;}if(d.metaKey){e|=qx.event.type.Dom.META_MASK;}return e;},isCtrlPressed:function(){return this._native.ctrlKey;},isShiftPressed:function(){return this._native.shiftKey;},isAltPressed:function(){return this._native.altKey;},isMetaPressed:function(){return this._native.metaKey;},isCtrlOrCommandPressed:function(){if(qx.bom.client.Platform.MAC){return this._native.metaKey;}else{return this._native.ctrlKey;}}}});})();(function(){var c="touchcancel",b="qx.event.type.Touch",a="touchend";qx.Class.define(b,{extend:qx.event.type.Dom,members:{_cloneNativeEvent:function(d,e){var e=qx.event.type.Dom.prototype._cloneNativeEvent.call(this,d,e);e.pageX=d.pageX;e.pageY=d.pageY;e.layerX=d.layerX;e.layerY=d.layerY;e.scale=d.scale;e.rotation=d.rotation;e.srcElement=d.srcElement;e.targetTouches=[];for(var i=0;i<d.targetTouches.length;i++){e.targetTouches[i]=d.targetTouches[i];}e.changedTouches=[];for(var i=0;i<d.changedTouches.length;i++){e.changedTouches[i]=d.changedTouches[i];}e.touches=[];for(var i=0;i<d.touches.length;i++){e.touches[i]=d.touches[i];}return e;},stop:function(){this.stopPropagation();},getAllTouches:function(){return this._native.touches;},getTargetTouches:function(){return this._native.targetTouches;},getChangedTargetTouches:function(){return this._native.changedTouches;},isMultiTouch:function(){return this.__cG().length>1;},getScale:function(){return this._native.scale;},getRotation:function(){return this._native.rotation;},getDocumentLeft:function(f){return this.__cF(f).pageX;},getDocumentTop:function(g){return this.__cF(g).pageY;},getScreenLeft:function(h){return this.__cF(h).screenX;},getScreenTop:function(j){return this.__cF(j).screenY;},getViewportLeft:function(k){return this.__cF(k).clientX;},getViewportTop:function(l){return this.__cF(l).clientY;},getIdentifier:function(m){return this.__cF(m).identifier;},__cF:function(n){n=n==null?0:n;return this.__cG()[n];},__cG:function(){var o=(this._isTouchEnd()?this.getChangedTargetTouches():this.getTargetTouches());return o;},_isTouchEnd:function(){return (this.getType()==a||this.getType()==c);}}});})();(function(){var a="qx.event.type.Tap";qx.Class.define(a,{extend:qx.event.type.Touch,members:{_isTouchEnd:function(){return true;}}});})();(function(){var a="qx.event.type.Swipe";qx.Class.define(a,{extend:qx.event.type.Touch,members:{_cloneNativeEvent:function(b,c){var c=qx.event.type.Touch.prototype._cloneNativeEvent.call(this,b,c);c.swipe=b.swipe;return c;},_isTouchEnd:function(){return true;},getStartTime:function(){return this._native.swipe.startTime;},getDuration:function(){return this._native.swipe.duration;},getAxis:function(){return this._native.swipe.axis;},getDirection:function(){return this._native.swipe.direction;},getVelocity:function(){return this._native.swipe.velocity;},getDistance:function(){return this._native.swipe.distance;}}});})();(function(){var h="left",g="right",f="middle",e="none",d="click",c="contextmenu",b="qx.event.type.Mouse",a="qx.client";qx.Class.define(b,{extend:qx.event.type.Dom,members:{_cloneNativeEvent:function(i,j){var j=qx.event.type.Dom.prototype._cloneNativeEvent.call(this,i,j);j.button=i.button;j.clientX=i.clientX;j.clientY=i.clientY;j.pageX=i.pageX;j.pageY=i.pageY;j.screenX=i.screenX;j.screenY=i.screenY;j.wheelDelta=i.wheelDelta;j.detail=i.detail;j.srcElement=i.srcElement;j.target=i.target;return j;},__kD:{0:h,2:g,1:f},__kE:{1:h,2:g,4:f},stop:function(){this.stopPropagation();},getButton:function(){switch(this._type){case c:return g;case d:if(this.__kF){return this.__kF();}default:if(this._native.target!==undefined){return this.__kD[this._native.button]||e;}else{return this.__kE[this._native.button]||e;}}},__kF:qx.core.Variant.select(a,{"mshtml":function(){return h;},"default":null}),isLeftPressed:function(){return this.getButton()===h;},isMiddlePressed:function(){return this.getButton()===f;},isRightPressed:function(){return this.getButton()===g;},getRelatedTarget:function(){return this._relatedTarget;},getViewportLeft:function(){return this._native.clientX;},getViewportTop:function(){return this._native.clientY;},getDocumentLeft:function(){if(this._native.pageX!==undefined){return this._native.pageX;}else{var k=qx.dom.Node.getWindow(this._native.srcElement);return this._native.clientX+qx.bom.Viewport.getScrollLeft(k);}},getDocumentTop:function(){if(this._native.pageY!==undefined){return this._native.pageY;}else{var l=qx.dom.Node.getWindow(this._native.srcElement);return this._native.clientY+qx.bom.Viewport.getScrollTop(l);}},getScreenLeft:function(){return this._native.screenX;},getScreenTop:function(){return this._native.screenY;}}});})();(function(){var c="qx.client",b="chrome",a="qx.event.type.MouseWheel";qx.Class.define(a,{extend:qx.event.type.Mouse,members:{stop:function(){this.stopPropagation();this.preventDefault();},getWheelDelta:qx.core.Variant.select(c,{"default":function(){return -(this._native.wheelDelta/40);},"gecko":function(){return this._native.detail;},"webkit":function(){if(qx.bom.client.Browser.NAME==b){if(qx.bom.client.Platform.MAC){return -(this._native.wheelDelta/1200);}else{return -(this._native.wheelDelta/120);}}else{if(qx.bom.client.Platform.WIN){var d=120;if(qx.bom.client.Engine.VERSION==533.16){d=1200;}}else{d=40;if(qx.bom.client.Engine.VERSION==533.16||qx.bom.client.Engine.VERSION==533.17||qx.bom.client.Engine.VERSION==533.18){d=1200;}}return -(this._native.wheelDelta/d);}}})}});})();(function(){var j="qx.client",i="ie",h="msie",g="android",f="operamini",e="mobile chrome",d=")(/| )([0-9]+\.[0-9])",c="iemobile",b="opera mobi",a="Mobile Safari",x="operamobile",w="mobile safari",v="IEMobile|Maxthon|MSIE",u="qx.bom.client.Browser",t="opera mini",s="(",r="opera",q="mshtml",p="Opera Mini|Opera Mobi|Opera",o="AdobeAIR|Titanium|Fluid|Chrome|Android|Epiphany|Konqueror|iCab|OmniWeb|Maxthon|Pre|Mobile Safari|Safari",m="webkit",n="5.0",k="prism|Fennec|Camino|Kmeleon|Galeon|Netscape|SeaMonkey|Firefox",l="Mobile/";qx.Bootstrap.define(u,{statics:{UNKNOWN:true,NAME:"unknown",TITLE:"unknown 0.0",VERSION:0.0,FULLVERSION:"0.0.0",__lE:function(y){var z=navigator.userAgent;var B=new RegExp(s+y+d);var C=z.match(B);if(!C){return;}var name=C[1].toLowerCase();var A=C[3];if(z.match(/Version(\/| )([0-9]+\.[0-9])/)){A=RegExp.$2;}if(qx.core.Variant.isSet(j,m)){if(name===g){name=e;}else if(z.indexOf(a)!==-1||z.indexOf(l)!==-1){name=w;}}else if(qx.core.Variant.isSet(j,q)){if(name===h){name=i;if(qx.bom.client.System.WINCE&&name===i){name=c;A=n;}}}else if(qx.core.Variant.isSet(j,r)){if(name===b){name=x;}else if(name===t){name=f;}}this.NAME=name;this.FULLVERSION=A;this.VERSION=parseFloat(A,10);this.TITLE=name+" "+this.VERSION;this.UNKNOWN=false;}},defer:qx.core.Variant.select(j,{"webkit":function(D){D.__lE(o);},"gecko":function(E){E.__lE(k);},"mshtml":function(F){F.__lE(v);},"opera":function(G){G.__lE(p);}})});})();(function(){var f="qx.client",e="qx.dom.Hierarchy",d="previousSibling",c="*",b="nextSibling",a="parentNode";qx.Class.define(e,{statics:{getNodeIndex:function(g){var h=0;while(g&&(g=g.previousSibling)){h++;}return h;},getElementIndex:function(i){var j=0;var k=qx.dom.Node.ELEMENT;while(i&&(i=i.previousSibling)){if(i.nodeType==k){j++;}}return j;},getNextElementSibling:function(l){while(l&&(l=l.nextSibling)&&!qx.dom.Node.isElement(l)){continue;}return l||null;},getPreviousElementSibling:function(m){while(m&&(m=m.previousSibling)&&!qx.dom.Node.isElement(m)){continue;}return m||null;},contains:qx.core.Variant.select(f,{"webkit|mshtml|opera":function(n,o){if(qx.dom.Node.isDocument(n)){var p=qx.dom.Node.getDocument(o);return n&&p==n;}else if(qx.dom.Node.isDocument(o)){return false;}else{return n.contains(o);}},"gecko":function(q,r){return !!(q.compareDocumentPosition(r)&16);},"default":function(s,t){while(t){if(s==t){return true;}t=t.parentNode;}return false;}}),isRendered:qx.core.Variant.select(f,{"mshtml":function(u){if(!u.parentNode||!u.offsetParent){return false;}var v=u.ownerDocument||u.document;return v.body.contains(u);},"gecko":function(w){var x=w.ownerDocument||w.document;return !!(x.compareDocumentPosition(w)&16);},"default":function(y){if(!y.parentNode||!y.offsetParent){return false;}var z=y.ownerDocument||y.document;return z.body.contains(y);}}),isDescendantOf:function(A,B){return this.contains(B,A);},getCommonParent:qx.core.Variant.select(f,{"mshtml|opera":function(C,D){if(C===D){return C;}while(C&&qx.dom.Node.isElement(C)){if(C.contains(D)){return C;}C=C.parentNode;}return null;},"default":function(E,F){if(E===F){return E;}var G={};var J=qx.core.ObjectRegistry;var I,H;while(E||F){if(E){I=J.toHashCode(E);if(G[I]){return G[I];}G[I]=E;E=E.parentNode;}if(F){H=J.toHashCode(F);if(G[H]){return G[H];}G[H]=F;F=F.parentNode;}}return null;}}),getAncestors:function(K){return this._recursivelyCollect(K,a);},getChildElements:function(L){L=L.firstChild;if(!L){return [];}var M=this.getNextSiblings(L);if(L.nodeType===1){M.unshift(L);}return M;},getDescendants:function(N){return qx.lang.Array.fromCollection(N.getElementsByTagName(c));},getFirstDescendant:function(O){O=O.firstChild;while(O&&O.nodeType!=1){O=O.nextSibling;}return O;},getLastDescendant:function(P){P=P.lastChild;while(P&&P.nodeType!=1){P=P.previousSibling;}return P;},getPreviousSiblings:function(Q){return this._recursivelyCollect(Q,d);},getNextSiblings:function(R){return this._recursivelyCollect(R,b);},_recursivelyCollect:function(S,T){var U=[];while(S=S[T]){if(S.nodeType==1){U.push(S);}}return U;},getSiblings:function(V){return this.getPreviousSiblings(V).reverse().concat(this.getNextSiblings(V));},isEmpty:function(W){W=W.firstChild;while(W){if(W.nodeType===qx.dom.Node.ELEMENT||W.nodeType===qx.dom.Node.TEXT){return false;}W=W.nextSibling;}return true;},cleanWhitespace:function(X){var Y=X.firstChild;while(Y){var ba=Y.nextSibling;if(Y.nodeType==3&&!/\S/.test(Y.nodeValue)){X.removeChild(Y);}Y=ba;}}}});})();(function(){var a="qx.event.type.KeyInput";qx.Class.define(a,{extend:qx.event.type.Dom,members:{init:function(b,c,d){qx.event.type.Dom.prototype.init.call(this,b,c,null,true,true);this._charCode=d;return this;},clone:function(e){var f=qx.event.type.Dom.prototype.clone.call(this,e);f._charCode=this._charCode;return f;},getCharCode:function(){return this._charCode;},getChar:function(){return String.fromCharCode(this._charCode);}}});})();(function(){var a="qx.event.type.KeySequence";qx.Class.define(a,{extend:qx.event.type.Dom,members:{init:function(b,c,d){qx.event.type.Dom.prototype.init.call(this,b,c,null,true,true);this._keyCode=b.keyCode;this._identifier=d;return this;},clone:function(e){var f=qx.event.type.Dom.prototype.clone.call(this,e);f._keyCode=this._keyCode;f._identifier=this._identifier;return f;},getKeyIdentifier:function(){return this._identifier;},getKeyCode:function(){return this._keyCode;}}});})();(function(){var j="qx.client",i="mousedown",h="mouseup",g="blur",f="focus",e="on",d="selectstart",c="DOMFocusOut",b="focusin",a="focusout",z="DOMFocusIn",y="draggesture",x="qx.event.handler.Focus",w="_applyFocus",v="deactivate",u="textarea",t="_applyActive",s='character',r="input",q="qxSelectable",o="tabIndex",p="off",m="activate",n="mshtml",k="qxKeepFocus",l="qxKeepActive";qx.Class.define(x,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(A){qx.core.Object.call(this);this._manager=A;this._window=A.getWindow();this._document=this._window.document;this._root=this._document.documentElement;this._body=this._document.body;this._initObserver();},properties:{active:{apply:t,nullable:true},focus:{apply:w,nullable:true}},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{focus:1,blur:1,focusin:1,focusout:1,activate:1,deactivate:1},IGNORE_CAN_HANDLE:true,FOCUSABLE_ELEMENTS:qx.core.Variant.select("qx.client",{"mshtml|gecko":{a:1,body:1,button:1,frame:1,iframe:1,img:1,input:1,object:1,select:1,textarea:1},"opera|webkit":{button:1,input:1,select:1,textarea:1}})},members:{__jQ:null,__jR:null,__jS:null,__jT:null,__jU:null,__jV:null,__jW:null,__jX:null,__jY:null,__ka:null,canHandleEvent:function(B,C){},registerEvent:function(D,E,F){},unregisterEvent:function(G,H,I){},focus:function(J){if(qx.core.Variant.isSet(j,n)){window.setTimeout(function(){try{J.focus();var K=qx.bom.Selection.get(J);if(K.length==0){var L=J.createTextRange();L.moveStart(s,J.value.length);L.collapse();L.select();}}catch(M){}},0);}else{try{J.focus();}catch(N){}}this.setFocus(J);this.setActive(J);},activate:function(O){this.setActive(O);},blur:function(P){try{P.blur();}catch(Q){}if(this.getActive()===P){this.resetActive();}if(this.getFocus()===P){this.resetFocus();}},deactivate:function(R){if(this.getActive()===R){this.resetActive();}},tryActivate:function(S){var T=this.__kp(S);if(T){this.setActive(T);}},__kb:function(U,V,W,X){var ba=qx.event.Registration;var Y=ba.createEvent(W,qx.event.type.Focus,[U,V,X]);ba.dispatchEvent(U,Y);},_windowFocused:true,__kc:function(){if(this._windowFocused){this._windowFocused=false;this.__kb(this._window,null,g,false);}},__kd:function(){if(!this._windowFocused){this._windowFocused=true;this.__kb(this._window,null,f,false);}},_initObserver:qx.core.Variant.select(j,{"gecko":function(){this.__jQ=qx.lang.Function.listener(this.__kj,this);this.__jR=qx.lang.Function.listener(this.__kk,this);this.__jS=qx.lang.Function.listener(this.__ki,this);this.__jT=qx.lang.Function.listener(this.__kh,this);this.__jU=qx.lang.Function.listener(this.__ke,this);qx.bom.Event.addNativeListener(this._document,i,this.__jQ,true);qx.bom.Event.addNativeListener(this._document,h,this.__jR,true);qx.bom.Event.addNativeListener(this._window,f,this.__jS,true);qx.bom.Event.addNativeListener(this._window,g,this.__jT,true);qx.bom.Event.addNativeListener(this._window,y,this.__jU,true);},"mshtml":function(){this.__jQ=qx.lang.Function.listener(this.__kj,this);this.__jR=qx.lang.Function.listener(this.__kk,this);this.__jW=qx.lang.Function.listener(this.__kf,this);this.__jX=qx.lang.Function.listener(this.__kg,this);this.__jV=qx.lang.Function.listener(this.__km,this);qx.bom.Event.addNativeListener(this._document,i,this.__jQ);qx.bom.Event.addNativeListener(this._document,h,this.__jR);qx.bom.Event.addNativeListener(this._document,b,this.__jW);qx.bom.Event.addNativeListener(this._document,a,this.__jX);qx.bom.Event.addNativeListener(this._document,d,this.__jV);},"webkit":function(){this.__jQ=qx.lang.Function.listener(this.__kj,this);this.__jR=qx.lang.Function.listener(this.__kk,this);this.__jX=qx.lang.Function.listener(this.__kg,this);this.__jS=qx.lang.Function.listener(this.__ki,this);this.__jT=qx.lang.Function.listener(this.__kh,this);this.__jV=qx.lang.Function.listener(this.__km,this);qx.bom.Event.addNativeListener(this._document,i,this.__jQ,true);qx.bom.Event.addNativeListener(this._document,h,this.__jR,true);qx.bom.Event.addNativeListener(this._document,d,this.__jV,false);qx.bom.Event.addNativeListener(this._window,c,this.__jX,true);qx.bom.Event.addNativeListener(this._window,f,this.__jS,true);qx.bom.Event.addNativeListener(this._window,g,this.__jT,true);},"opera":function(){this.__jQ=qx.lang.Function.listener(this.__kj,this);this.__jR=qx.lang.Function.listener(this.__kk,this);this.__jW=qx.lang.Function.listener(this.__kf,this);this.__jX=qx.lang.Function.listener(this.__kg,this);qx.bom.Event.addNativeListener(this._document,i,this.__jQ,true);qx.bom.Event.addNativeListener(this._document,h,this.__jR,true);qx.bom.Event.addNativeListener(this._window,z,this.__jW,true);qx.bom.Event.addNativeListener(this._window,c,this.__jX,true);}}),_stopObserver:qx.core.Variant.select(j,{"gecko":function(){qx.bom.Event.removeNativeListener(this._document,i,this.__jQ,true);qx.bom.Event.removeNativeListener(this._document,h,this.__jR,true);qx.bom.Event.removeNativeListener(this._window,f,this.__jS,true);qx.bom.Event.removeNativeListener(this._window,g,this.__jT,true);qx.bom.Event.removeNativeListener(this._window,y,this.__jU,true);},"mshtml":function(){qx.bom.Event.removeNativeListener(this._document,i,this.__jQ);qx.bom.Event.removeNativeListener(this._document,h,this.__jR);qx.bom.Event.removeNativeListener(this._document,b,this.__jW);qx.bom.Event.removeNativeListener(this._document,a,this.__jX);qx.bom.Event.removeNativeListener(this._document,d,this.__jV);},"webkit":function(){qx.bom.Event.removeNativeListener(this._document,i,this.__jQ,true);qx.bom.Event.removeNativeListener(this._document,h,this.__jR,true);qx.bom.Event.removeNativeListener(this._document,d,this.__jV,false);qx.bom.Event.removeNativeListener(this._window,c,this.__jX,true);qx.bom.Event.removeNativeListener(this._window,f,this.__jS,true);qx.bom.Event.removeNativeListener(this._window,g,this.__jT,true);},"opera":function(){qx.bom.Event.removeNativeListener(this._document,i,this.__jQ,true);qx.bom.Event.removeNativeListener(this._document,h,this.__jR,true);qx.bom.Event.removeNativeListener(this._window,z,this.__jW,true);qx.bom.Event.removeNativeListener(this._window,c,this.__jX,true);}}),__ke:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"gecko":function(bb){var bc=qx.bom.Event.getTarget(bb);if(!this.__kq(bc)){qx.bom.Event.preventDefault(bb);}},"default":null})),__kf:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"mshtml":function(bd){this.__kd();var bf=qx.bom.Event.getTarget(bd);var be=this.__ko(bf);if(be){this.setFocus(be);}this.tryActivate(bf);},"opera":function(bg){var bh=qx.bom.Event.getTarget(bg);if(bh==this._document||bh==this._window){this.__kd();if(this.__jY){this.setFocus(this.__jY);delete this.__jY;}if(this.__ka){this.setActive(this.__ka);delete this.__ka;}}else{this.setFocus(bh);this.tryActivate(bh);if(!this.__kq(bh)){bh.selectionStart=0;bh.selectionEnd=0;}}},"default":null})),__kg:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"mshtml":function(bi){if(!bi.toElement){this.__kc();this.resetFocus();this.resetActive();}},"webkit":function(bj){var bk=qx.bom.Event.getTarget(bj);if(bk===this.getFocus()){this.resetFocus();}if(bk===this.getActive()){this.resetActive();}},"opera":function(bl){var bm=qx.bom.Event.getTarget(bl);if(bm==this._document){this.__kc();this.__jY=this.getFocus();this.__ka=this.getActive();this.resetFocus();this.resetActive();}else{if(bm===this.getFocus()){this.resetFocus();}if(bm===this.getActive()){this.resetActive();}}},"default":null})),__kh:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"gecko":function(bn){var bo=qx.bom.Event.getTarget(bn);if(bo===this._window||bo===this._document){this.__kc();this.resetActive();this.resetFocus();}},"webkit":function(bp){var bq=qx.bom.Event.getTarget(bp);if(bq===this._window||bq===this._document){this.__kc();this.__jY=this.getFocus();this.__ka=this.getActive();this.resetActive();this.resetFocus();}},"default":null})),__ki:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"gecko":function(br){var bs=qx.bom.Event.getTarget(br);if(bs===this._window||bs===this._document){this.__kd();bs=this._body;}this.setFocus(bs);this.tryActivate(bs);},"webkit":function(bt){var bu=qx.bom.Event.getTarget(bt);if(bu===this._window||bu===this._document){this.__kd();if(this.__jY){this.setFocus(this.__jY);delete this.__jY;}if(this.__ka){this.setActive(this.__ka);delete this.__ka;}}else{this.setFocus(bu);this.tryActivate(bu);}},"default":null})),__kj:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"gecko":function(bv){var bx=qx.bom.Event.getTarget(bv);var bw=this.__ko(bx);if(!bw){qx.bom.Event.preventDefault(bv);}else if(bw===this._body){this.setFocus(bw);}},"mshtml":function(by){var bA=qx.bom.Event.getTarget(by);var bz=this.__ko(bA);if(bz){if(!this.__kq(bA)){bA.unselectable=e;try{document.selection.empty();}catch(bB){}try{bz.focus();}catch(bC){}}}else{qx.bom.Event.preventDefault(by);if(!this.__kq(bA)){bA.unselectable=e;}}},"webkit":function(bD){var bF=qx.bom.Event.getTarget(bD);var bE=this.__ko(bF);if(bE){this.setFocus(bE);}else{qx.bom.Event.preventDefault(bD);}},"opera":function(bG){var bJ=qx.bom.Event.getTarget(bG);var bH=this.__ko(bJ);if(!this.__kq(bJ)){qx.bom.Event.preventDefault(bG);if(bH){var bI=this.getFocus();if(bI&&bI.selectionEnd){bI.selectionStart=0;bI.selectionEnd=0;bI.blur();}if(bH){this.setFocus(bH);}}}else if(bH){this.setFocus(bH);}},"default":null})),__kk:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"mshtml":function(bK){var bL=qx.bom.Event.getTarget(bK);if(bL.unselectable){bL.unselectable=p;}this.tryActivate(this.__kl(bL));},"gecko":function(bM){var bN=qx.bom.Event.getTarget(bM);while(bN&&bN.offsetWidth===undefined){bN=bN.parentNode;}if(bN){this.tryActivate(bN);}},"webkit|opera":function(bO){var bP=qx.bom.Event.getTarget(bO);this.tryActivate(this.__kl(bP));},"default":null})),__kl:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"mshtml|webkit":function(bQ){var bR=this.getFocus();if(bR&&bQ!=bR&&(bR.nodeName.toLowerCase()===r||bR.nodeName.toLowerCase()===u)){bQ=bR;}return bQ;},"default":function(bS){return bS;}})),__km:qx.event.GlobalError.observeMethod(qx.core.Variant.select(j,{"mshtml|webkit":function(bT){var bU=qx.bom.Event.getTarget(bT);if(!this.__kq(bU)){qx.bom.Event.preventDefault(bT);}},"default":null})),__kn:function(bV){var bW=qx.bom.element.Attribute.get(bV,o);if(bW>=1){return true;}var bX=qx.event.handler.Focus.FOCUSABLE_ELEMENTS;if(bW>=0&&bX[bV.tagName]){return true;}return false;},__ko:function(bY){while(bY&&bY.nodeType===1){if(bY.getAttribute(k)==e){return null;}if(this.__kn(bY)){return bY;}bY=bY.parentNode;}return this._body;},__kp:function(ca){var cb=ca;while(ca&&ca.nodeType===1){if(ca.getAttribute(l)==e){return null;}ca=ca.parentNode;}return cb;},__kq:function(cc){while(cc&&cc.nodeType===1){var cd=cc.getAttribute(q);if(cd!=null){return cd===e;}cc=cc.parentNode;}return true;},_applyActive:function(ce,cf){if(cf){this.__kb(cf,ce,v,true);}if(ce){this.__kb(ce,cf,m,true);}},_applyFocus:function(cg,ch){if(ch){this.__kb(ch,cg,a,true);}if(cg){this.__kb(cg,ch,b,true);}if(ch){this.__kb(ch,cg,g,false);}if(cg){this.__kb(cg,ch,f,false);}}},destruct:function(){this._stopObserver();this._manager=this._window=this._document=this._root=this._body=this.__kr=null;},defer:function(ci){qx.event.Registration.addHandler(ci);var cj=ci.FOCUSABLE_ELEMENTS;for(var ck in cj){cj[ck.toUpperCase()]=1;}}});})();(function(){var k="qx.client",j="character",i="EndToEnd",h="input",g="textarea",f="StartToStart",e='character',d="qx.bom.Selection",c="button",b="#text",a="body";qx.Class.define(d,{statics:{getSelectionObject:qx.core.Variant.select(k,{"mshtml":function(l){return l.selection;},"default":function(m){return qx.dom.Node.getWindow(m).getSelection();}}),get:qx.core.Variant.select(k,{"mshtml":function(n){var o=qx.bom.Range.get(qx.dom.Node.getDocument(n));return o.text;},"default":function(p){if(this.__lf(p)){return p.value.substring(p.selectionStart,p.selectionEnd);}else{return this.getSelectionObject(qx.dom.Node.getDocument(p)).toString();}}}),getLength:qx.core.Variant.select(k,{"mshtml":function(q){var s=this.get(q);var r=qx.util.StringSplit.split(s,/\r\n/);return s.length-(r.length-1);},"opera":function(t){var y,w,u;if(this.__lf(t)){var x=t.selectionStart;var v=t.selectionEnd;y=t.value.substring(x,v);w=v-x;}else{y=qx.bom.Selection.get(t);w=y.length;}u=qx.util.StringSplit.split(y,/\r\n/);return w-(u.length-1);},"default":function(z){if(this.__lf(z)){return z.selectionEnd-z.selectionStart;}else{return this.get(z).length;}}}),getStart:qx.core.Variant.select(k,{"mshtml":function(A){if(this.__lf(A)){var F=qx.bom.Range.get();if(!A.contains(F.parentElement())){return -1;}var G=qx.bom.Range.get(A);var E=A.value.length;G.moveToBookmark(F.getBookmark());G.moveEnd(e,E);return E-G.text.length;}else{var G=qx.bom.Range.get(A);var C=G.parentElement();var H=qx.bom.Range.get();H.moveToElementText(C);var B=qx.bom.Range.get(qx.dom.Node.getBodyElement(A));B.setEndPoint(f,G);B.setEndPoint(i,H);if(H.compareEndPoints(f,B)==0){return 0;}var D;var I=0;while(true){D=B.moveStart(j,-1);if(H.compareEndPoints(f,B)==0){break;}if(D==0){break;}else{I++;}}return ++I;}},"gecko|webkit":function(J){if(this.__lf(J)){return J.selectionStart;}else{var L=qx.dom.Node.getDocument(J);var K=this.getSelectionObject(L);if(K.anchorOffset<K.focusOffset){return K.anchorOffset;}else{return K.focusOffset;}}},"default":function(M){if(this.__lf(M)){return M.selectionStart;}else{return qx.bom.Selection.getSelectionObject(qx.dom.Node.getDocument(M)).anchorOffset;}}}),getEnd:qx.core.Variant.select(k,{"mshtml":function(N){if(this.__lf(N)){var S=qx.bom.Range.get();if(!N.contains(S.parentElement())){return -1;}var T=qx.bom.Range.get(N);var R=N.value.length;T.moveToBookmark(S.getBookmark());T.moveStart(e,-R);return T.text.length;}else{var T=qx.bom.Range.get(N);var P=T.parentElement();var U=qx.bom.Range.get();U.moveToElementText(P);var R=U.text.length;var O=qx.bom.Range.get(qx.dom.Node.getBodyElement(N));O.setEndPoint(i,T);O.setEndPoint(f,U);if(U.compareEndPoints(i,O)==0){return R-1;}var Q;var V=0;while(true){Q=O.moveEnd(j,1);if(U.compareEndPoints(i,O)==0){break;}if(Q==0){break;}else{V++;}}return R-(++V);}},"gecko|webkit":function(W){if(this.__lf(W)){return W.selectionEnd;}else{var Y=qx.dom.Node.getDocument(W);var X=this.getSelectionObject(Y);if(X.focusOffset>X.anchorOffset){return X.focusOffset;}else{return X.anchorOffset;}}},"default":function(ba){if(this.__lf(ba)){return ba.selectionEnd;}else{return qx.bom.Selection.getSelectionObject(qx.dom.Node.getDocument(ba)).focusOffset;}}}),__lf:function(bb){return qx.dom.Node.isElement(bb)&&(bb.nodeName.toLowerCase()==h||bb.nodeName.toLowerCase()==g);},set:qx.core.Variant.select(k,{"mshtml":function(bc,bd,be){var bf;if(qx.dom.Node.isDocument(bc)){bc=bc.body;}if(qx.dom.Node.isElement(bc)||qx.dom.Node.isText(bc)){switch(bc.nodeName.toLowerCase()){case h:case g:case c:if(be===undefined){be=bc.value.length;}if(bd>=0&&bd<=bc.value.length&&be>=0&&be<=bc.value.length){bf=qx.bom.Range.get(bc);bf.collapse(true);bf.moveStart(j,bd);bf.moveEnd(j,be-bd);bf.select();return true;}break;case b:if(be===undefined){be=bc.nodeValue.length;}if(bd>=0&&bd<=bc.nodeValue.length&&be>=0&&be<=bc.nodeValue.length){bf=qx.bom.Range.get(qx.dom.Node.getBodyElement(bc));bf.moveToElementText(bc.parentNode);bf.collapse(true);bf.moveStart(j,bd);bf.moveEnd(j,be-bd);bf.select();return true;}break;default:if(be===undefined){be=bc.childNodes.length-1;}if(bc.childNodes[bd]&&bc.childNodes[be]){bf=qx.bom.Range.get(qx.dom.Node.getBodyElement(bc));bf.moveToElementText(bc.childNodes[bd]);bf.collapse(true);var bg=qx.bom.Range.get(qx.dom.Node.getBodyElement(bc));bg.moveToElementText(bc.childNodes[be]);bf.setEndPoint(i,bg);bf.select();return true;}}}return false;},"default":function(bh,bi,bj){var bn=bh.nodeName.toLowerCase();if(qx.dom.Node.isElement(bh)&&(bn==h||bn==g)){if(bj===undefined){bj=bh.value.length;}if(bi>=0&&bi<=bh.value.length&&bj>=0&&bj<=bh.value.length){bh.focus();bh.select();bh.setSelectionRange(bi,bj);return true;}}else{var bl=false;var bm=qx.dom.Node.getWindow(bh).getSelection();var bk=qx.bom.Range.get(bh);if(qx.dom.Node.isText(bh)){if(bj===undefined){bj=bh.length;}if(bi>=0&&bi<bh.length&&bj>=0&&bj<=bh.length){bl=true;}}else if(qx.dom.Node.isElement(bh)){if(bj===undefined){bj=bh.childNodes.length-1;}if(bi>=0&&bh.childNodes[bi]&&bj>=0&&bh.childNodes[bj]){bl=true;}}else if(qx.dom.Node.isDocument(bh)){bh=bh.body;if(bj===undefined){bj=bh.childNodes.length-1;}if(bi>=0&&bh.childNodes[bi]&&bj>=0&&bh.childNodes[bj]){bl=true;}}if(bl){if(!bm.isCollapsed){bm.collapseToStart();}bk.setStart(bh,bi);if(qx.dom.Node.isText(bh)){bk.setEnd(bh,bj);}else{bk.setEndAfter(bh.childNodes[bj]);}if(bm.rangeCount>0){bm.removeAllRanges();}bm.addRange(bk);return true;}}return false;}}),setAll:function(bo){return qx.bom.Selection.set(bo,0);},clear:qx.core.Variant.select(k,{"mshtml":function(bp){var bq=qx.bom.Selection.getSelectionObject(qx.dom.Node.getDocument(bp));var br=qx.bom.Range.get(bp);var parent=br.parentElement();var bs=qx.bom.Range.get(qx.dom.Node.getDocument(bp));if(parent==bs.parentElement()&&parent==bp){bq.empty();}},"default":function(bt){var bv=qx.bom.Selection.getSelectionObject(qx.dom.Node.getDocument(bt));var bx=bt.nodeName.toLowerCase();if(qx.dom.Node.isElement(bt)&&(bx==h||bx==g)){bt.setSelectionRange(0,0);qx.bom.Element.blur(bt);}else if(qx.dom.Node.isDocument(bt)||bx==a){bv.collapse(bt.body?bt.body:bt,0);}else{var bw=qx.bom.Range.get(bt);if(!bw.collapsed){var by;var bu=bw.commonAncestorContainer;if(qx.dom.Node.isElement(bt)&&qx.dom.Node.isText(bu)){by=bu.parentNode;}else{by=bu;}if(by==bt){bv.collapse(bt,0);}}}}})}});})();(function(){var l="button",k="qx.bom.Range",j="text",i="password",h="file",g="submit",f="reset",e="textarea",d="input",c="hidden",a="qx.client",b="body";qx.Class.define(k,{statics:{get:qx.core.Variant.select(a,{"mshtml":function(m){if(qx.dom.Node.isElement(m)){switch(m.nodeName.toLowerCase()){case d:switch(m.type){case j:case i:case c:case l:case f:case h:case g:return m.createTextRange();break;default:return qx.bom.Selection.getSelectionObject(qx.dom.Node.getDocument(m)).createRange();}break;case e:case b:case l:return m.createTextRange();break;default:return qx.bom.Selection.getSelectionObject(qx.dom.Node.getDocument(m)).createRange();}}else{if(m==null){m=window;}return qx.bom.Selection.getSelectionObject(qx.dom.Node.getDocument(m)).createRange();}},"default":function(n){var o=qx.dom.Node.getDocument(n);var p=qx.bom.Selection.getSelectionObject(o);if(p.rangeCount>0){return p.getRangeAt(0);}else{return o.createRange();}}})}});})();(function(){var j="",h="m",g="g",f="^",e="qx.util.StringSplit",d="i",c="$(?!\\s)",b="[object RegExp]",a="y";qx.Class.define(e,{statics:{split:function(k,l,m){if(Object.prototype.toString.call(l)!==b){return String.prototype.split.call(k,l,m);}var t=[],n=0,r=(l.ignoreCase?d:j)+(l.multiline?h:j)+(l.sticky?a:j),l=RegExp(l.source,r+g),q,u,o,p,s=/()??/.exec(j)[1]===undefined;k=k+j;if(!s){q=RegExp(f+l.source+c,r);}if(m===undefined||+m<0){m=Infinity;}else{m=Math.floor(+m);if(!m){return [];}}while(u=l.exec(k)){o=u.index+u[0].length;if(o>n){t.push(k.slice(n,u.index));if(!s&&u.length>1){u[0].replace(q,function(){for(var i=1;i<arguments.length-2;i++){if(arguments[i]===undefined){u[i]=undefined;}}});}if(u.length>1&&u.index<k.length){Array.prototype.push.apply(t,u.slice(1));}p=u[0].length;n=o;if(t.length>=m){break;}}if(l.lastIndex===u.index){l.lastIndex++;}}if(n===k.length){if(p||!l.test(j)){t.push(j);}}else{t.push(k.slice(n));}return t.length>m?t.slice(0,m):t;}}});})();(function(){var a="qx.event.type.Focus";qx.Class.define(a,{extend:qx.event.type.Event,members:{init:function(b,c,d){qx.event.type.Event.prototype.init.call(this,d,false);this._target=b;this._relatedTarget=c;return this;}}});})();(function(){var j="",i="undefined",h="qx.client",g="readOnly",f="accessKey",e="qx.bom.element.Attribute",d="rowSpan",c="vAlign",b="className",a="textContent",y="'",x="htmlFor",w="longDesc",v="cellSpacing",u="frameBorder",t="='",s="useMap",r="innerText",q="innerHTML",p="tabIndex",n="dateTime",o="maxLength",l="mshtml",m="cellPadding",k="colSpan";qx.Class.define(e,{statics:{__hb:{names:{"class":b,"for":x,html:q,text:qx.core.Variant.isSet(h,l)?r:a,colspan:k,rowspan:d,valign:c,datetime:n,accesskey:f,tabindex:p,maxlength:o,readonly:g,longdesc:w,cellpadding:m,cellspacing:v,frameborder:u,usemap:s},runtime:{"html":1,"text":1},bools:{compact:1,nowrap:1,ismap:1,declare:1,noshade:1,checked:1,disabled:1,readOnly:1,multiple:1,selected:1,noresize:1,defer:1,allowTransparency:1},property:{$$html:1,$$widget:1,disabled:1,checked:1,readOnly:1,multiple:1,selected:1,value:1,maxLength:1,className:1,innerHTML:1,innerText:1,textContent:1,htmlFor:1,tabIndex:1},qxProperties:{$$widget:1,$$html:1},propertyDefault:{disabled:false,checked:false,readOnly:false,multiple:false,selected:false,value:j,className:j,innerHTML:j,innerText:j,textContent:j,htmlFor:j,tabIndex:0,maxLength:qx.core.Variant.select(h,{"mshtml":2147483647,"webkit":524288,"default":-1})},removeableProperties:{disabled:1,multiple:1,maxLength:1},original:{href:1,src:1,type:1}},compile:function(z){var A=[];var C=this.__hb.runtime;for(var B in z){if(!C[B]){A.push(B,t,z[B],y);}}return A.join(j);},get:qx.core.Variant.select(h,{"mshtml":function(D,name){var F=this.__hb;var E;name=F.names[name]||name;if(F.original[name]){E=D.getAttribute(name,2);}else if(F.property[name]){E=D[name];if(typeof F.propertyDefault[name]!==i&&E==F.propertyDefault[name]){if(typeof F.bools[name]===i){return null;}else{return E;}}}else{E=D.getAttribute(name);}if(F.bools[name]){return !!E;}return E;},"default":function(G,name){var I=this.__hb;var H;name=I.names[name]||name;if(I.property[name]){H=G[name];if(typeof I.propertyDefault[name]!==i&&H==I.propertyDefault[name]){if(typeof I.bools[name]===i){return null;}else{return H;}}}else{H=G.getAttribute(name);}if(I.bools[name]){return !!H;}return H;}}),set:function(J,name,K){if(typeof K===i){return;}var L=this.__hb;name=L.names[name]||name;if(L.bools[name]){K=!!K;}if(L.property[name]&&(!(J[name]===undefined)||L.qxProperties[name])){if(K==null){if(L.removeableProperties[name]){J.removeAttribute(name);return;}else if(typeof L.propertyDefault[name]!==i){K=L.propertyDefault[name];}}J[name]=K;}else{if(K===true){J.setAttribute(name,name);}else if(K===false||K===null){J.removeAttribute(name);}else{J.setAttribute(name,K);}}},reset:function(M,name){this.set(M,name,null);}}});})();(function(){var a="qx.event.type.Drag";qx.Class.define(a,{extend:qx.event.type.Event,members:{init:function(b,c){qx.event.type.Event.prototype.init.call(this,true,b);if(c){this._native=c.getNativeEvent()||null;this._originalTarget=c.getTarget()||null;}else{this._native=null;this._originalTarget=null;}return this;},clone:function(d){var e=qx.event.type.Event.prototype.clone.call(this,d);e._native=this._native;return e;},getDocumentLeft:function(){if(this._native==null){return 0;}if(this._native.pageX!==undefined){return this._native.pageX;}else{var f=qx.dom.Node.getWindow(this._native.srcElement);return this._native.clientX+qx.bom.Viewport.getScrollLeft(f);}},getDocumentTop:function(){if(this._native==null){return 0;}if(this._native.pageY!==undefined){return this._native.pageY;}else{var g=qx.dom.Node.getWindow(this._native.srcElement);return this._native.clientY+qx.bom.Viewport.getScrollTop(g);}},getManager:function(){return qx.event.Registration.getManager(this.getTarget()).getHandler(qx.event.handler.DragDrop);},addType:function(h){this.getManager().addType(h);},addAction:function(i){this.getManager().addAction(i);},supportsType:function(j){return this.getManager().supportsType(j);},supportsAction:function(k){return this.getManager().supportsAction(k);},addData:function(l,m){this.getManager().addData(l,m);},getData:function(n){return this.getManager().getData(n);},getCurrentType:function(){return this.getManager().getCurrentType();},getCurrentAction:function(){return this.getManager().getCurrentAction();}}});})();(function(){var h="interval",g="qx.event.Timer",f="_applyInterval",d="_applyEnabled",c="Boolean",b="qx.event.type.Event",a="Integer";qx.Class.define(g,{extend:qx.core.Object,construct:function(i){qx.core.Object.call(this);this.setEnabled(false);if(i!=null){this.setInterval(i);}var self=this;this.__ey=function(){self._oninterval.call(self);};},events:{"interval":b},statics:{once:function(j,k,l){var m=new qx.event.Timer(l);m.__ez=j;m.addListener(h,function(e){m.stop();j.call(k,e);m.dispose();k=null;},k);m.start();return m;}},properties:{enabled:{init:true,check:c,apply:d},interval:{check:a,init:1000,apply:f}},members:{__eA:null,__ey:null,_applyInterval:function(n,o){if(this.getEnabled()){this.restart();}},_applyEnabled:function(p,q){if(q){window.clearInterval(this.__eA);this.__eA=null;}else if(p){this.__eA=window.setInterval(this.__ey,this.getInterval());}},start:function(){this.setEnabled(true);},startWith:function(r){this.setInterval(r);this.start();},stop:function(){this.setEnabled(false);},restart:function(){this.stop();this.start();},restartWith:function(s){this.stop();this.startWith(s);},_oninterval:qx.event.GlobalError.observeMethod(function(){if(this.$$disposed){return;}if(this.getEnabled()){this.fireEvent(h);}})},destruct:function(){if(this.__eA){window.clearInterval(this.__eA);}this.__eA=this.__ey=null;}});})();(function(){var h="losecapture",g="qx.client",f="blur",e="focus",d="click",c="qx.event.dispatch.MouseCapture",b="capture",a="scroll";qx.Class.define(c,{extend:qx.event.dispatch.AbstractBubbling,construct:function(i,j){qx.event.dispatch.AbstractBubbling.call(this,i);this.__ix=i.getWindow();this.__iy=j;i.addListener(this.__ix,f,this.releaseCapture,this);i.addListener(this.__ix,e,this.releaseCapture,this);i.addListener(this.__ix,a,this.releaseCapture,this);},statics:{PRIORITY:qx.event.Registration.PRIORITY_FIRST},members:{__iy:null,__iz:null,__iA:true,__ix:null,_getParent:function(k){return k.parentNode;},canDispatchEvent:function(l,event,m){return (this.__iz&&this.__iB[m]);},dispatchEvent:function(n,event,o){if(o==d){event.stopPropagation();this.releaseCapture();return;}if(this.__iA||!qx.dom.Hierarchy.contains(this.__iz,n)){n=this.__iz;}qx.event.dispatch.AbstractBubbling.prototype.dispatchEvent.call(this,n,event,o);},__iB:{"mouseup":1,"mousedown":1,"click":1,"dblclick":1,"mousemove":1,"mouseout":1,"mouseover":1},activateCapture:function(p,q){var q=q!==false;if(this.__iz===p&&this.__iA==q){return;}if(this.__iz){this.releaseCapture();}this.nativeSetCapture(p,q);if(this.hasNativeCapture){var self=this;qx.bom.Event.addNativeListener(p,h,function(){qx.bom.Event.removeNativeListener(p,h,arguments.callee);self.releaseCapture();});}this.__iA=q;this.__iz=p;this.__iy.fireEvent(p,b,qx.event.type.Event,[true,false]);},getCaptureElement:function(){return this.__iz;},releaseCapture:function(){var r=this.__iz;if(!r){return;}this.__iz=null;this.__iy.fireEvent(r,h,qx.event.type.Event,[true,false]);this.nativeReleaseCapture(r);},hasNativeCapture:qx.bom.client.Engine.MSHTML,nativeSetCapture:qx.core.Variant.select(g,{"mshtml":function(s,t){qx.event.Timer.once(function(){s.setCapture(t!==false);},this,0);},"default":qx.lang.Function.empty}),nativeReleaseCapture:qx.core.Variant.select(g,{"mshtml":function(u){qx.event.Timer.once(function(){u.releaseCapture();},this,0);},"default":qx.lang.Function.empty})},destruct:function(){this.__iz=this.__ix=this.__iy=null;},defer:function(v){qx.event.Registration.addDispatcher(v);}});})();(function(){var a="qx.event.handler.Window";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(b){qx.core.Object.call(this);this._manager=b;this._window=b.getWindow();this._initWindowObserver();},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{error:1,load:1,beforeunload:1,unload:1,resize:1,scroll:1,beforeshutdown:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_WINDOW,IGNORE_CAN_HANDLE:true},members:{canHandleEvent:function(c,d){},registerEvent:function(f,g,h){},unregisterEvent:function(i,j,k){},_initWindowObserver:function(){this._onNativeWrapper=qx.lang.Function.listener(this._onNative,this);var m=qx.event.handler.Window.SUPPORTED_TYPES;for(var l in m){qx.bom.Event.addNativeListener(this._window,l,this._onNativeWrapper);}},_stopWindowObserver:function(){var o=qx.event.handler.Window.SUPPORTED_TYPES;for(var n in o){qx.bom.Event.removeNativeListener(this._window,n,this._onNativeWrapper);}},_onNative:qx.event.GlobalError.observeMethod(function(e){if(this.isDisposed()){return;}var q=this._window;try{var t=q.document;}catch(e){return ;}var r=t.documentElement;var p=qx.bom.Event.getTarget(e);if(p==null||p===q||p===t||p===r){var event=qx.event.Registration.createEvent(e.type,qx.event.type.Native,[e,q]);qx.event.Registration.dispatchEvent(q,event);var s=event.getReturnValue();if(s!=null){e.returnValue=s;return s;}}})},destruct:function(){this._stopWindowObserver();this._manager=this._window=null;},defer:function(u){qx.event.Registration.addHandler(u);}});})();(function(){var c="qx.bom.Selector";qx.Class.define(c,{statics:{query:null,matches:null}});(function(){var o=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,v=0,r=Object.prototype.toString,p=false,x=true;[0,0].sort(function(){x=false;return 0;});var g=function(z,A,B,C){B=B||[];A=A||document;var L=A;if(A.nodeType!==1&&A.nodeType!==9){return [];}if(!z||typeof z!=="string"){return B;}var m,F,D,H,J,G,M,i,N=true,E=g.isXML(A),I=[],K=z;do{o.exec("");m=o.exec(K);if(m){K=m[3];I.push(m[1]);if(m[2]){H=m[3];break;}}}while(m);if(I.length>1&&q.exec(z)){if(I.length===2&&k.relative[I[0]]){F=h(I[0]+I[1],A);}else{F=k.relative[I[0]]?[A]:g(I.shift(),A);while(I.length){z=I.shift();if(k.relative[z]){z+=I.shift();}F=h(z,F);}}}else{if(!C&&I.length>1&&A.nodeType===9&&!E&&k.match.ID.test(I[0])&&!k.match.ID.test(I[I.length-1])){J=g.find(I.shift(),A,E);A=J.expr?g.filter(J.expr,J.set)[0]:J.set[0];}if(A){J=C?{expr:I.pop(),set:f(C)}:g.find(I.pop(),I.length===1&&(I[0]==="~"||I[0]==="+")&&A.parentNode?A.parentNode:A,E);F=J.expr?g.filter(J.expr,J.set):J.set;if(I.length>0){D=f(F);}else{N=false;}while(I.length){G=I.pop();M=G;if(!k.relative[G]){G="";}else{M=I.pop();}if(M==null){M=A;}k.relative[G](D,M,E);}}else{D=I=[];}}if(!D){D=F;}if(!D){g.error(G||z);}if(r.call(D)==="[object Array]"){if(!N){B.push.apply(B,D);}else if(A&&A.nodeType===1){for(i=0;D[i]!=null;i++){if(D[i]&&(D[i]===true||D[i].nodeType===1&&g.contains(A,D[i]))){B.push(F[i]);}}}else{for(i=0;D[i]!=null;i++){if(D[i]&&D[i].nodeType===1){B.push(F[i]);}}}}else{f(D,B);}if(H){g(H,L,B,C);g.uniqueSort(B);}return B;};g.uniqueSort=function(O){if(s){p=x;O.sort(s);if(p){for(var i=1;i<O.length;i++){if(O[i]===O[i-1]){O.splice(i--,1);}}}}return O;};g.matches=function(P,Q){return g(P,null,null,Q);};g.matchesSelector=function(R,S){return g(S,null,null,[R]).length>0;};g.find=function(T,U,V){var W;if(!T){return [];}for(var i=0,l=k.order.length;i<l;i++){var Y,X=k.order[i];if((Y=k.leftMatch[X].exec(T))){var ba=Y[1];Y.splice(1,1);if(ba.substr(ba.length-1)!=="\\"){Y[1]=(Y[1]||"").replace(/\\/g,"");W=k.find[X](Y,U,V);if(W!=null){T=T.replace(k.match[X],"");break;}}}}if(!W){W=U.getElementsByTagName("*");}return {set:W,expr:T};};g.filter=function(bb,bc,bd,be){var br,bq,bf=bb,bk=[],bg=bc,bh=bc&&bc[0]&&g.isXML(bc[0]);while(bb&&bc.length){for(var bo in k.filter){if((br=k.leftMatch[bo].exec(bb))!=null&&br[2]){var bn,bj,bi=k.filter[bo],bs=br[1];bq=false;br.splice(1,1);if(bs.substr(bs.length-1)==="\\"){continue;}if(bg===bk){bk=[];}if(k.preFilter[bo]){br=k.preFilter[bo](br,bg,bd,bk,be,bh);if(!br){bq=bn=true;}else if(br===true){continue;}}if(br){for(var i=0;(bj=bg[i])!=null;i++){if(bj){bn=bi(bj,br,i,bg);var bm=be^!!bn;if(bd&&bn!=null){if(bm){bq=true;}else{bg[i]=false;}}else if(bm){bk.push(bj);bq=true;}}}}if(bn!==undefined){if(!bd){bg=bk;}bb=bb.replace(k.match[bo],"");if(!bq){return [];}break;}}}if(bb===bf){if(bq==null){g.error(bb);}else{break;}}bf=bb;}return bg;};g.error=function(bt){throw "Syntax error, unrecognized expression: "+bt;};var k=g.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(bu){return bu.getAttribute("href");}},relative:{"+":function(bv,bw){var bx=typeof bw==="string",bz=bx&&!/\W/.test(bw),bA=bx&&!bz;if(bz){bw=bw.toLowerCase();}for(var i=0,l=bv.length,by;i<l;i++){if((by=bv[i])){while((by=by.previousSibling)&&by.nodeType!==1){}bv[i]=bA||by&&by.nodeName.toLowerCase()===bw?by||false:by===bw;}}if(bA){g.filter(bw,bv,true);}},">":function(bB,bC){var bE,bD=typeof bC==="string",i=0,l=bB.length;if(bD&&!/\W/.test(bC)){bC=bC.toLowerCase();for(;i<l;i++){bE=bB[i];if(bE){var parent=bE.parentNode;bB[i]=parent.nodeName.toLowerCase()===bC?parent:false;}}}else{for(;i<l;i++){bE=bB[i];if(bE){bB[i]=bD?bE.parentNode:bE.parentNode===bC;}}if(bD){g.filter(bC,bB,true);}}},"":function(bF,bG,bH){var bK,bI=v++,bJ=w;if(typeof bG==="string"&&!/\W/.test(bG)){bG=bG.toLowerCase();bK=bG;bJ=y;}bJ("parentNode",bG,bI,bF,bK,bH);},"~":function(bL,bM,bN){var bQ,bO=v++,bP=w;if(typeof bM==="string"&&!/\W/.test(bM)){bM=bM.toLowerCase();bQ=bM;bP=y;}bP("previousSibling",bM,bO,bL,bQ,bN);}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var m=bS.getElementById(bR[1]);return m&&m.parentNode?[m]:[];}},NAME:function(bU,bV){if(typeof bV.getElementsByName!=="undefined"){var bX=[],bW=bV.getElementsByName(bU[1]);for(var i=0,l=bW.length;i<l;i++){if(bW[i].getAttribute("name")===bU[1]){bX.push(bW[i]);}}return bX.length===0?null:bX;}},TAG:function(bY,ca){return ca.getElementsByTagName(bY[1]);}},preFilter:{CLASS:function(cb,cc,cd,ce,cf,cg){cb=" "+cb[1].replace(/\\/g,"")+" ";if(cg){return cb;}for(var i=0,ch;(ch=cc[i])!=null;i++){if(ch){if(cf^(ch.className&&(" "+ch.className+" ").replace(/[\t\n]/g," ").indexOf(cb)>=0)){if(!cd){ce.push(ch);}}else if(cd){cc[i]=false;}}}return false;},ID:function(ci){return ci[1].replace(/\\/g,"");},TAG:function(cj,ck){return cj[1].toLowerCase();},CHILD:function(cl){if(cl[1]==="nth"){var cm=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(cl[2]==="even"&&"2n"||cl[2]==="odd"&&"2n+1"||!/\D/.test(cl[2])&&"0n+"+cl[2]||cl[2]);cl[2]=(cm[1]+(cm[2]||1))-0;cl[3]=cm[3]-0;}cl[0]=v++;return cl;},ATTR:function(cn,co,cp,cq,cr,cs){var name=cn[1].replace(/\\/g,"");if(!cs&&k.attrMap[name]){cn[1]=k.attrMap[name];}if(cn[2]==="~="){cn[4]=" "+cn[4]+" ";}return cn;},PSEUDO:function(ct,cu,cv,cw,cx){if(ct[1]==="not"){if((o.exec(ct[3])||"").length>1||/^\w/.test(ct[3])){ct[3]=g(ct[3],null,null,cu);}else{var cy=g.filter(ct[3],cu,cv,true^cx);if(!cv){cw.push.apply(cw,cy);}return false;}}else if(k.match.POS.test(ct[0])||k.match.CHILD.test(ct[0])){return true;}return ct;},POS:function(cz){cz.unshift(true);return cz;}},filters:{enabled:function(cA){return cA.disabled===false&&cA.type!=="hidden";},disabled:function(cB){return cB.disabled===true;},checked:function(cC){return cC.checked===true;},selected:function(cD){cD.parentNode.selectedIndex;return cD.selected===true;},parent:function(cE){return !!cE.firstChild;},empty:function(cF){return !cF.firstChild;},has:function(cG,i,cH){return !!g(cH[3],cG).length;},header:function(cI){return (/h\d/i).test(cI.nodeName);},text:function(cJ){return "text"===cJ.type;},radio:function(cK){return "radio"===cK.type;},checkbox:function(cL){return "checkbox"===cL.type;},file:function(cM){return "file"===cM.type;},password:function(cN){return "password"===cN.type;},submit:function(cO){return "submit"===cO.type;},image:function(cP){return "image"===cP.type;},reset:function(cQ){return "reset"===cQ.type;},button:function(cR){return "button"===cR.type||cR.nodeName.toLowerCase()==="button";},input:function(cS){return (/input|select|textarea|button/i).test(cS.nodeName);}},setFilters:{first:function(cT,i){return i===0;},last:function(cU,i,cV,cW){return i===cW.length-1;},even:function(cX,i){return i%2===0;},odd:function(cY,i){return i%2===1;},lt:function(da,i,db){return i<db[3]-0;},gt:function(dc,i,dd){return i>dd[3]-0;},nth:function(de,i,df){return df[3]-0===i;},eq:function(dg,i,dh){return dh[3]-0===i;}},filter:{PSEUDO:function(di,dj,i,dk){var name=dj[1],dl=k.filters[name];if(dl){return dl(di,i,dj,dk);}else if(name==="contains"){return (di.textContent||di.innerText||g.getText([di])||"").indexOf(dj[3])>=0;}else if(name==="not"){var dm=dj[3];for(var j=0,l=dm.length;j<l;j++){if(dm[j]===di){return false;}}return true;}else{g.error("Syntax error, unrecognized expression: "+name);}},CHILD:function(dn,dp){var dv=dp[1],dq=dn;switch(dv){case "only":case "first":while((dq=dq.previousSibling)){if(dq.nodeType===1){return false;}}if(dv==="first"){return true;}dq=dn;case "last":while((dq=dq.nextSibling)){if(dq.nodeType===1){return false;}}return true;case "nth":var dw=dp[2],ds=dp[3];if(dw===1&&ds===0){return true;}var du=dp[0],parent=dn.parentNode;if(parent&&(parent.sizcache!==du||!dn.nodeIndex)){var dr=0;for(dq=parent.firstChild;dq;dq=dq.nextSibling){if(dq.nodeType===1){dq.nodeIndex=++dr;}}parent.sizcache=du;}var dt=dn.nodeIndex-ds;if(dw===0){return dt===0;}else{return (dt%dw===0&&dt/dw>=0);}}},ID:function(dx,dy){return dx.nodeType===1&&dx.getAttribute("id")===dy;},TAG:function(dz,dA){return (dA==="*"&&dz.nodeType===1)||dz.nodeName.toLowerCase()===dA;},CLASS:function(dB,dC){return (" "+(dB.className||dB.getAttribute("class"))+" ").indexOf(dC)>-1;},ATTR:function(dD,dE){var name=dE[1],dI=k.attrHandle[name]?k.attrHandle[name](dD):dD[name]!=null?dD[name]:dD.getAttribute(name),dH=dI+"",dG=dE[2],dF=dE[4];return dI==null?dG==="!=":dG==="="?dH===dF:dG==="*="?dH.indexOf(dF)>=0:dG==="~="?(" "+dH+" ").indexOf(dF)>=0:!dF?dH&&dI!==false:dG==="!="?dH!==dF:dG==="^="?dH.indexOf(dF)===0:dG==="$="?dH.substr(dH.length-dF.length)===dF:dG==="|="?dH===dF||dH.substr(0,dF.length+1)===dF+"-":false;},POS:function(dJ,dK,i,dL){var name=dK[2],dM=k.setFilters[name];if(dM){return dM(dJ,i,dK,dL);}}}};var q=k.match.POS,d=function(dN,dO){return "\\"+(dO-0+1);};for(var u in k.match){k.match[u]=new RegExp(k.match[u].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[u].source.replace(/\\(\d+)/g,d));}var f=function(dP,dQ){dP=Array.prototype.slice.call(dP,0);if(dQ){dQ.push.apply(dQ,dP);return dQ;}return dP;};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType;}catch(e){f=function(dR,dS){var i=0,dT=dS||[];if(r.call(dR)==="[object Array]"){Array.prototype.push.apply(dT,dR);}else{if(typeof dR.length==="number"){for(var l=dR.length;i<l;i++){dT.push(dR[i]);}}else{for(;dR[i];i++){dT.push(dR[i]);}}}return dT;};}var s,n;if(document.documentElement.compareDocumentPosition){s=function(a,b){if(a===b){p=true;return 0;}if(!a.compareDocumentPosition||!b.compareDocumentPosition){return a.compareDocumentPosition?-1:1;}return a.compareDocumentPosition(b)&4?-1:1;};}else{s=function(a,b){var dY,dW,ea=[],eb=[],dV=a.parentNode,dX=b.parentNode,dU=dV;if(a===b){p=true;return 0;}else if(dV===dX){return n(a,b);}else if(!dV){return -1;}else if(!dX){return 1;}while(dU){ea.unshift(dU);dU=dU.parentNode;}dU=dX;while(dU){eb.unshift(dU);dU=dU.parentNode;}dY=ea.length;dW=eb.length;for(var i=0;i<dY&&i<dW;i++){if(ea[i]!==eb[i]){return n(ea[i],eb[i]);}}return i===dY?n(a,eb[i],-1):n(ea[i],b,1);};n=function(a,b,ec){if(a===b){return ec;}var ed=a.nextSibling;while(ed){if(ed===b){return -1;}ed=ed.nextSibling;}return 1;};}g.getText=function(ee){var eg="",ef;for(var i=0;ee[i];i++){ef=ee[i];if(ef.nodeType===3||ef.nodeType===4){eg+=ef.nodeValue;}else if(ef.nodeType!==8){eg+=g.getText(ef.childNodes);}}return eg;};(function(){var ej=document.createElement("div"),ei="script"+(new Date()).getTime(),eh=document.documentElement;ej.innerHTML="<a name='"+ei+"'/>";eh.insertBefore(ej,eh.firstChild);if(document.getElementById(ei)){k.find.ID=function(ek,el,em){if(typeof el.getElementById!=="undefined"&&!em){var m=el.getElementById(ek[1]);return m?m.id===ek[1]||typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id").nodeValue===ek[1]?[m]:undefined:[];}};k.filter.ID=function(en,eo){var ep=typeof en.getAttributeNode!=="undefined"&&en.getAttributeNode("id");return en.nodeType===1&&ep&&ep.nodeValue===eo;};}eh.removeChild(ej);eh=ej=null;})();(function(){var eq=document.createElement("div");eq.appendChild(document.createComment(""));if(eq.getElementsByTagName("*").length>0){k.find.TAG=function(er,es){var eu=es.getElementsByTagName(er[1]);if(er[1]==="*"){var et=[];for(var i=0;eu[i];i++){if(eu[i].nodeType===1){et.push(eu[i]);}}eu=et;}return eu;};}eq.innerHTML="<a href='#'></a>";if(eq.firstChild&&typeof eq.firstChild.getAttribute!=="undefined"&&eq.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(ev){return ev.getAttribute("href",2);};}eq=null;})();if(document.querySelectorAll){(function(){var ex=g,ew=document.createElement("div"),ey="__sizzle__";ew.innerHTML="<p class='TEST'></p>";if(ew.querySelectorAll&&ew.querySelectorAll(".TEST").length===0){return;}g=function(eA,eB,eC,eD){eB=eB||document;eA=eA.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!eD&&!g.isXML(eB)){if(eB.nodeType===9){try{return f(eB.querySelectorAll(eA),eC);}catch(eG){}}else if(eB.nodeType===1&&eB.nodeName.toLowerCase()!=="object"){var eE=eB.getAttribute("id"),eF=eE||ey;if(!eE){eB.setAttribute("id",eF);}try{return f(eB.querySelectorAll("#"+eF+" "+eA),eC);}catch(eH){}finally{if(!eE){eB.removeAttribute("id");}}}}return ex(eA,eB,eC,eD);};for(var ez in ex){g[ez]=ex[ez];}ew=null;})();}(function(){var eK=document.documentElement,eI=eK.matchesSelector||eK.mozMatchesSelector||eK.webkitMatchesSelector||eK.msMatchesSelector,eJ=false;try{eI.call(document.documentElement,"[test!='']:sizzle");}catch(eL){eJ=true;}if(eI){g.matchesSelector=function(eM,eN){eN=eN.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!g.isXML(eM)){try{if(eJ||!k.match.PSEUDO.test(eN)&&!/!=/.test(eN)){return eI.call(eM,eN);}}catch(e){}}return g(eN,null,null,[eM]).length>0;};}})();(function(){var eO=document.createElement("div");eO.innerHTML="<div class='test e'></div><div class='test'></div>";if(!eO.getElementsByClassName||eO.getElementsByClassName("e").length===0){return;}eO.lastChild.className="e";if(eO.getElementsByClassName("e").length===1){return;}k.order.splice(1,0,"CLASS");k.find.CLASS=function(eP,eQ,eR){if(typeof eQ.getElementsByClassName!=="undefined"&&!eR){return eQ.getElementsByClassName(eP[1]);}};eO=null;})();function y(eS,eT,eU,eV,eW,eX){for(var i=0,l=eV.length;i<l;i++){var fa=eV[i];if(fa){var eY=false;fa=fa[eS];while(fa){if(fa.sizcache===eU){eY=eV[fa.sizset];break;}if(fa.nodeType===1&&!eX){fa.sizcache=eU;fa.sizset=i;}if(fa.nodeName.toLowerCase()===eT){eY=fa;break;}fa=fa[eS];}eV[i]=eY;}}}function w(fb,fc,fd,fe,ff,fg){for(var i=0,l=fe.length;i<l;i++){var fi=fe[i];if(fi){var fh=false;fi=fi[fb];while(fi){if(fi.sizcache===fd){fh=fe[fi.sizset];break;}if(fi.nodeType===1){if(!fg){fi.sizcache=fd;fi.sizset=i;}if(typeof fc!=="string"){if(fi===fc){fh=true;break;}}else if(g.filter(fc,[fi]).length>0){fh=fi;break;}}fi=fi[fb];}fe[i]=fh;}}}if(document.documentElement.contains){g.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):true);};}else if(document.documentElement.compareDocumentPosition){g.contains=function(a,b){return !!(a.compareDocumentPosition(b)&16);};}else{g.contains=function(){return false;};}g.isXML=function(fj){var fk=(fj?fj.ownerDocument||fj:0).documentElement;return fk?fk.nodeName!=="HTML":false;};var h=function(fl,fm){var fq,fo=[],fn="",fp=fm.nodeType?[fm]:fm;while((fq=k.match.PSEUDO.exec(fl))){fn+=fq[0];fl=fl.replace(k.match.PSEUDO,"");}fl=k.relative[fl]?fl+"*":fl;for(var i=0,l=fp.length;i<l;i++){g(fl,fp[i],fo);}return g.filter(fn,fo);};var t=qx.bom.Selector;t.query=function(fr,fs){return g(fr,fs);};t.matches=function(ft,fu){return g(ft,null,null,fu);};})();})();(function(){var r="qx.client",q="",p="mshtml",o="'",n="SelectionLanguage",m="qx.xml.Document",k=" />",j="MSXML2.DOMDocument.3.0",h='<\?xml version="1.0" encoding="utf-8"?>\n<',g="MSXML2.XMLHTTP.3.0",c="MSXML2.XMLHTTP.6.0",f=" xmlns='",e="text/xml",b="XPath",a="MSXML2.DOMDocument.6.0",d="HTML";qx.Class.define(m,{statics:{DOMDOC:null,XMLHTTP:null,isXmlDocument:function(s){if(s.nodeType===9){return s.documentElement.nodeName!==d;}else if(s.ownerDocument){return this.isXmlDocument(s.ownerDocument);}else{return false;}},create:qx.core.Variant.select(r,{"mshtml":function(t,u){var v=new ActiveXObject(this.DOMDOC);v.setProperty(n,b);if(u){var w=h;w+=u;if(t){w+=f+t+o;}w+=k;v.loadXML(w);}return v;},"default":function(x,y){return document.implementation.createDocument(x||q,y||q,null);}}),fromString:qx.core.Variant.select(r,{"mshtml":function(z){var A=qx.xml.Document.create();A.loadXML(z);return A;},"default":function(B){var C=new DOMParser();return C.parseFromString(B,e);}})},defer:function(D){if(qx.core.Variant.isSet(r,p)){var E=[a,j];var F=[c,g];for(var i=0,l=E.length;i<l;i++){try{new ActiveXObject(E[i]);new ActiveXObject(F[i]);}catch(G){continue;}D.DOMDOC=E[i];D.XMLHTTP=F[i];break;}}}});})();(function(){var k="visible",j="scroll",i="borderBottomWidth",h="borderTopWidth",g="left",f="borderLeftWidth",e="bottom",d="top",c="right",b="qx.bom.element.Scroll",a="borderRightWidth";qx.Class.define(b,{statics:{intoViewX:function(l,stop,m){var parent=l.parentNode;var r=qx.dom.Node.getDocument(l);var n=r.body;var z,x,u;var B,s,C;var v,D,G;var E,p,y,o;var t,F,w;var q=m===g;var A=m===c;stop=stop?stop.parentNode:r;while(parent&&parent!=stop){if(parent.scrollWidth>parent.clientWidth&&(parent===n||qx.bom.element.Overflow.getY(parent)!=k)){if(parent===n){x=parent.scrollLeft;u=x+qx.bom.Viewport.getWidth();B=qx.bom.Viewport.getWidth();s=parent.clientWidth;C=parent.scrollWidth;v=0;D=0;G=0;}else{z=qx.bom.element.Location.get(parent);x=z.left;u=z.right;B=parent.offsetWidth;s=parent.clientWidth;C=parent.scrollWidth;v=parseInt(qx.bom.element.Style.get(parent,f),10)||0;D=parseInt(qx.bom.element.Style.get(parent,a),10)||0;G=B-s-v-D;}E=qx.bom.element.Location.get(l);p=E.left;y=E.right;o=l.offsetWidth;t=p-x-v;F=y-u+D;w=0;if(q){w=t;}else if(A){w=F+G;}else if(t<0||o>s){w=t;}else if(F>0){w=F+G;}parent.scrollLeft+=w;if(qx.bom.client.Engine.GECKO||qx.bom.client.Engine.OPERA){qx.event.Registration.fireNonBubblingEvent(parent,j);}}if(parent===n){break;}parent=parent.parentNode;}},intoViewY:function(H,stop,I){var parent=H.parentNode;var O=qx.dom.Node.getDocument(H);var J=O.body;var W,K,S;var Y,V,Q;var M,N,L;var bb,bc,X,R;var U,P,bd;var ba=I===d;var T=I===e;stop=stop?stop.parentNode:O;while(parent&&parent!=stop){if(parent.scrollHeight>parent.clientHeight&&(parent===J||qx.bom.element.Overflow.getY(parent)!=k)){if(parent===J){K=parent.scrollTop;S=K+qx.bom.Viewport.getHeight();Y=qx.bom.Viewport.getHeight();V=parent.clientHeight;Q=parent.scrollHeight;M=0;N=0;L=0;}else{W=qx.bom.element.Location.get(parent);K=W.top;S=W.bottom;Y=parent.offsetHeight;V=parent.clientHeight;Q=parent.scrollHeight;M=parseInt(qx.bom.element.Style.get(parent,h),10)||0;N=parseInt(qx.bom.element.Style.get(parent,i),10)||0;L=Y-V-M-N;}bb=qx.bom.element.Location.get(H);bc=bb.top;X=bb.bottom;R=H.offsetHeight;U=bc-K-M;P=X-S+N;bd=0;if(ba){bd=U;}else if(T){bd=P+L;}else if(U<0||R>V){bd=U;}else if(P>0){bd=P+L;}parent.scrollTop+=bd;if(qx.bom.client.Engine.GECKO||qx.bom.client.Engine.OPERA){qx.event.Registration.fireNonBubblingEvent(parent,j);}}if(parent===J){break;}parent=parent.parentNode;}},intoView:function(be,stop,bf,bg){this.intoViewX(be,stop,bf);this.intoViewY(be,stop,bg);}}});})();(function(){var k="",j="qx.client",i="hidden",h="-moz-scrollbars-none",g="overflow",f=";",e="overflowY",d=":",b="overflowX",a="overflow:",y="none",x="scroll",w="borderLeftStyle",v="borderRightStyle",u="div",r="borderRightWidth",q="overflow-y",p="borderLeftWidth",o="-moz-scrollbars-vertical",n="100px",l="qx.bom.element.Overflow",m="overflow-x";qx.Class.define(l,{statics:{__kL:null,getScrollbarWidth:function(){if(this.__kL!==null){return this.__kL;}var z=qx.bom.element.Style;var B=function(F,G){return parseInt(z.get(F,G),10)||0;};var C=function(H){return (z.get(H,v)==y?0:B(H,r));};var A=function(I){return (z.get(I,w)==y?0:B(I,p));};var E=qx.core.Variant.select(j,{"mshtml":function(J){if(z.get(J,e)==i||J.clientWidth==0){return C(J);}return Math.max(0,J.offsetWidth-J.clientLeft-J.clientWidth);},"default":function(K){if(K.clientWidth==0){var L=z.get(K,g);var M=(L==x||L==o?16:0);return Math.max(0,C(K)+M);}return Math.max(0,(K.offsetWidth-K.clientWidth-A(K)));}});var D=function(N){return E(N)-C(N);};var t=document.createElement(u);var s=t.style;s.height=s.width=n;s.overflow=x;document.body.appendChild(t);var c=D(t);this.__kL=c?c:16;document.body.removeChild(t);return this.__kL;},_compile:qx.core.Variant.select(j,{"gecko":qx.bom.client.Engine.VERSION<1.8?function(O,P){if(P==i){P=h;}return a+P+f;}:function(Q,R){return Q+d+R+f;},"opera":qx.bom.client.Engine.VERSION<9.5?function(S,T){return a+T+f;}:function(U,V){return U+d+V+f;},"default":function(W,X){return W+d+X+f;}}),compileX:function(Y){return this._compile(m,Y);},compileY:function(ba){return this._compile(q,ba);},getX:qx.core.Variant.select(j,{"gecko":qx.bom.client.Engine.VERSION<1.8?function(bb,bc){var bd=qx.bom.element.Style.get(bb,g,bc,false);if(bd===h){bd=i;}return bd;}:function(be,bf){return qx.bom.element.Style.get(be,b,bf,false);},"opera":qx.bom.client.Engine.VERSION<9.5?function(bg,bh){return qx.bom.element.Style.get(bg,g,bh,false);}:function(bi,bj){return qx.bom.element.Style.get(bi,b,bj,false);},"default":function(bk,bl){return qx.bom.element.Style.get(bk,b,bl,false);}}),setX:qx.core.Variant.select(j,{"gecko":qx.bom.client.Engine.VERSION<1.8?function(bm,bn){if(bn==i){bn=h;}bm.style.overflow=bn;}:function(bo,bp){bo.style.overflowX=bp;},"opera":qx.bom.client.Engine.VERSION<9.5?function(bq,br){bq.style.overflow=br;}:function(bs,bt){bs.style.overflowX=bt;},"default":function(bu,bv){bu.style.overflowX=bv;}}),resetX:qx.core.Variant.select(j,{"gecko":qx.bom.client.Engine.VERSION<1.8?function(bw){bw.style.overflow=k;}:function(bx){bx.style.overflowX=k;},"opera":qx.bom.client.Engine.VERSION<9.5?function(by,bz){by.style.overflow=k;}:function(bA,bB){bA.style.overflowX=k;},"default":function(bC){bC.style.overflowX=k;}}),getY:qx.core.Variant.select(j,{"gecko":qx.bom.client.Engine.VERSION<1.8?function(bD,bE){var bF=qx.bom.element.Style.get(bD,g,bE,false);if(bF===h){bF=i;}return bF;}:function(bG,bH){return qx.bom.element.Style.get(bG,e,bH,false);},"opera":qx.bom.client.Engine.VERSION<9.5?function(bI,bJ){return qx.bom.element.Style.get(bI,g,bJ,false);}:function(bK,bL){return qx.bom.element.Style.get(bK,e,bL,false);},"default":function(bM,bN){return qx.bom.element.Style.get(bM,e,bN,false);}}),setY:qx.core.Variant.select(j,{"gecko":qx.bom.client.Engine.VERSION<1.8?function(bO,bP){if(bP===i){bP=h;}bO.style.overflow=bP;}:function(bQ,bR){bQ.style.overflowY=bR;},"opera":qx.bom.client.Engine.VERSION<9.5?function(bS,bT){bS.style.overflow=bT;}:function(bU,bV){bU.style.overflowY=bV;},"default":function(bW,bX){bW.style.overflowY=bX;}}),resetY:qx.core.Variant.select(j,{"gecko":qx.bom.client.Engine.VERSION<1.8?function(bY){bY.style.overflow=k;}:function(ca){ca.style.overflowY=k;},"opera":qx.bom.client.Engine.VERSION<9.5?function(cb,cc){cb.style.overflow=k;}:function(cd,ce){cd.style.overflowY=k;},"default":function(cf){cf.style.overflowY=k;}})}});})();(function(){var q="qx.client",p="",o="boxSizing",n="box-sizing",m=":",k="border-box",j="qx.bom.element.BoxSizing",h="KhtmlBoxSizing",g="-moz-box-sizing",f="WebkitBoxSizing",c=";",e="-khtml-box-sizing",d="content-box",b="-webkit-box-sizing",a="MozBoxSizing";qx.Class.define(j,{statics:{__cH:qx.core.Variant.select(q,{"mshtml":null,"webkit":[o,h,f],"gecko":[a],"opera":[o]}),__cI:qx.core.Variant.select(q,{"mshtml":null,"webkit":[n,e,b],"gecko":[g],"opera":[n]}),__cJ:{tags:{button:true,select:true},types:{search:true,button:true,submit:true,reset:true,checkbox:true,radio:true}},__cK:function(r){var s=this.__cJ;return s.tags[r.tagName.toLowerCase()]||s.types[r.type];},compile:qx.core.Variant.select(q,{"mshtml":function(t){{};},"default":function(u){var w=this.__cI;var v=p;if(w){for(var i=0,l=w.length;i<l;i++){v+=w[i]+m+u+c;}}return v;}}),get:qx.core.Variant.select(q,{"mshtml":function(x){if(qx.bom.Document.isStandardMode(qx.dom.Node.getDocument(x))){if(!this.__cK(x)){return d;}}return k;},"default":function(y){var A=this.__cH;var z;if(A){for(var i=0,l=A.length;i<l;i++){z=qx.bom.element.Style.get(y,A[i],null,false);if(z!=null&&z!==p){return z;}}}return p;}}),set:qx.core.Variant.select(q,{"mshtml":function(B,C){{};},"default":function(D,E){var F=this.__cH;if(F){for(var i=0,l=F.length;i<l;i++){D.style[F[i]]=E;}}}}),reset:function(G){this.set(G,p);}}});})();(function(){var k="n-resize",j="e-resize",i="nw-resize",h="ne-resize",g="",f="cursor:",e="qx.client",d=";",c="qx.bom.element.Cursor",b="cursor",a="hand";qx.Class.define(c,{statics:{__eR:qx.core.Variant.select(e,{"mshtml":{"cursor":a,"ew-resize":j,"ns-resize":k,"nesw-resize":h,"nwse-resize":i},"opera":{"col-resize":j,"row-resize":k,"ew-resize":j,"ns-resize":k,"nesw-resize":h,"nwse-resize":i},"default":{}}),compile:function(l){return f+(this.__eR[l]||l)+d;},get:function(m,n){return qx.bom.element.Style.get(m,b,n,false);},set:function(o,p){o.style.cursor=this.__eR[p]||p;},reset:function(q){q.style.cursor=g;}}});})();(function(){var o="auto",n="px",m=",",l="clip:auto;",k="rect(",j=");",i="",h=")",g="qx.bom.element.Clip",f="string",c="clip:rect(",e=" ",d="clip",b="rect(auto,auto,auto,auto)",a="rect(auto, auto, auto, auto)";qx.Class.define(g,{statics:{compile:function(p){if(!p){return l;}var u=p.left;var top=p.top;var t=p.width;var s=p.height;var q,r;if(u==null){q=(t==null?o:t+n);u=o;}else{q=(t==null?o:u+t+n);u=u+n;}if(top==null){r=(s==null?o:s+n);top=o;}else{r=(s==null?o:top+s+n);top=top+n;}return c+top+m+q+m+r+m+u+j;},get:function(v,w){var y=qx.bom.element.Style.get(v,d,w,false);var E,top,C,B;var x,z;if(typeof y===f&&y!==o&&y!==i){y=qx.lang.String.trim(y);if(/\((.*)\)/.test(y)){var D=RegExp.$1;if(/,/.test(D)){var A=D.split(m);}else{var A=D.split(e);}top=qx.lang.String.trim(A[0]);x=qx.lang.String.trim(A[1]);z=qx.lang.String.trim(A[2]);E=qx.lang.String.trim(A[3]);if(E===o){E=null;}if(top===o){top=null;}if(x===o){x=null;}if(z===o){z=null;}if(top!=null){top=parseInt(top,10);}if(x!=null){x=parseInt(x,10);}if(z!=null){z=parseInt(z,10);}if(E!=null){E=parseInt(E,10);}if(x!=null&&E!=null){C=x-E;}else if(x!=null){C=x;}if(z!=null&&top!=null){B=z-top;}else if(z!=null){B=z;}}else{throw new Error("Could not parse clip string: "+y);}}return {left:E||null,top:top||null,width:C||null,height:B||null};},set:function(F,G){if(!G){F.style.clip=b;return;}var L=G.left;var top=G.top;var K=G.width;var J=G.height;var H,I;if(L==null){H=(K==null?o:K+n);L=o;}else{H=(K==null?o:L+K+n);L=L+n;}if(top==null){I=(J==null?o:J+n);top=o;}else{I=(J==null?o:top+J+n);top=top+n;}F.style.clip=k+top+m+H+m+I+m+L+h;},reset:function(M){M.style.clip=a;}}});})();(function(){var m="",l="qx.client",k=";",j="opacity:",i="opacity",h="filter",g="MozOpacity",f=");",e=")",d="zoom:1;filter:alpha(opacity=",a="qx.bom.element.Opacity",c="alpha(opacity=",b="-moz-opacity:";qx.Class.define(a,{statics:{SUPPORT_CSS3_OPACITY:false,compile:qx.core.Variant.select(l,{"mshtml":function(n){if(n>=1){n=1;}if(n<0.00001){n=0;}if(qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY){return j+n+k;}else{return d+(n*100)+f;}},"gecko":function(o){if(o>=1){o=0.999999;}if(!qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY){return b+o+k;}else{return j+o+k;}},"default":function(p){if(p>=1){return m;}return j+p+k;}}),set:qx.core.Variant.select(l,{"mshtml":function(q,r){if(qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY){if(r>=1){r=m;}q.style.opacity=r;}else{var s=qx.bom.element.Style.get(q,h,qx.bom.element.Style.COMPUTED_MODE,false);if(r>=1){r=1;}if(r<0.00001){r=0;}if(!q.currentStyle||!q.currentStyle.hasLayout){q.style.zoom=1;}q.style.filter=s.replace(/alpha\([^\)]*\)/gi,m)+c+r*100+e;}},"gecko":function(t,u){if(u>=1){u=0.999999;}if(!qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY){t.style.MozOpacity=u;}else{t.style.opacity=u;}},"default":function(v,w){if(w>=1){w=m;}v.style.opacity=w;}}),reset:qx.core.Variant.select(l,{"mshtml":function(x){if(qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY){x.style.opacity=m;}else{var y=qx.bom.element.Style.get(x,h,qx.bom.element.Style.COMPUTED_MODE,false);x.style.filter=y.replace(/alpha\([^\)]*\)/gi,m);}},"gecko":function(z){if(!qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY){z.style.MozOpacity=m;}else{z.style.opacity=m;}},"default":function(A){A.style.opacity=m;}}),get:qx.core.Variant.select(l,{"mshtml":function(B,C){if(qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY){var D=qx.bom.element.Style.get(B,i,C,false);if(D!=null){return parseFloat(D);}return 1.0;}else{var E=qx.bom.element.Style.get(B,h,C,false);if(E){var D=E.match(/alpha\(opacity=(.*)\)/);if(D&&D[1]){return parseFloat(D[1])/100;}}return 1.0;}},"gecko":function(F,G){var H=qx.bom.element.Style.get(F,!qx.bom.element.Opacity.SUPPORT_CSS3_OPACITY?g:i,G,false);if(H==0.999999){H=1.0;}if(H!=null){return parseFloat(H);}return 1.0;},"default":function(I,J){var K=qx.bom.element.Style.get(I,i,J,false);if(K!=null){return parseFloat(K);}return 1.0;}})},defer:function(L){L.SUPPORT_CSS3_OPACITY=(typeof document.documentElement.style.opacity=="string");}});})();(function(){var m="",k="qx.client",h="userSelect",g="style",f="MozUserModify",e="px",d="float",c="borderImage",b="styleFloat",a="appearance",F="pixelHeight",E='Ms',D=":",C="cssFloat",B="pixelTop",A="pixelLeft",z='O',y="qx.bom.element.Style",x='Khtml',w='string',t="pixelRight",u='Moz',r="pixelWidth",s="pixelBottom",p=";",q="textOverflow",n="userModify",o='Webkit',v="WebkitUserModify";qx.Class.define(y,{statics:{__cr:function(){var G=[a,h,q,c];var K={};var H=document.documentElement.style;var L=[u,o,x,z,E];for(var i=0,l=G.length;i<l;i++){var M=G[i];var I=M;if(H[M]){K[I]=M;continue;}M=qx.lang.String.firstUp(M);for(var j=0,N=L.length;j<N;j++){var J=L[j]+M;if(typeof H[J]==w){K[I]=J;break;}}}this.__cs=K;this.__cs[n]=qx.core.Variant.select(k,{"gecko":f,"webkit":v,"default":h});this.__ct={};for(var I in K){this.__ct[I]=this.__cx(K[I]);}this.__cs[d]=qx.core.Variant.select(k,{"mshtml":b,"default":C});},__cu:{width:r,height:F,left:A,right:t,top:B,bottom:s},__cv:{clip:qx.bom.element.Clip,cursor:qx.bom.element.Cursor,opacity:qx.bom.element.Opacity,boxSizing:qx.bom.element.BoxSizing,overflowX:{set:qx.lang.Function.bind(qx.bom.element.Overflow.setX,qx.bom.element.Overflow),get:qx.lang.Function.bind(qx.bom.element.Overflow.getX,qx.bom.element.Overflow),reset:qx.lang.Function.bind(qx.bom.element.Overflow.resetX,qx.bom.element.Overflow),compile:qx.lang.Function.bind(qx.bom.element.Overflow.compileX,qx.bom.element.Overflow)},overflowY:{set:qx.lang.Function.bind(qx.bom.element.Overflow.setY,qx.bom.element.Overflow),get:qx.lang.Function.bind(qx.bom.element.Overflow.getY,qx.bom.element.Overflow),reset:qx.lang.Function.bind(qx.bom.element.Overflow.resetY,qx.bom.element.Overflow),compile:qx.lang.Function.bind(qx.bom.element.Overflow.compileY,qx.bom.element.Overflow)}},compile:function(O){var Q=[];var S=this.__cv;var R=this.__ct;var name,P;for(name in O){P=O[name];if(P==null){continue;}name=R[name]||name;if(S[name]){Q.push(S[name].compile(P));}else{Q.push(this.__cx(name),D,P,p);}}return Q.join(m);},__cw:{},__cx:function(T){var U=this.__cw;var V=U[T];if(!V){V=U[T]=qx.lang.String.hyphenate(T);}return V;},setCss:qx.core.Variant.select(k,{"mshtml":function(W,X){W.style.cssText=X;},"default":function(Y,ba){Y.setAttribute(g,ba);}}),getCss:qx.core.Variant.select(k,{"mshtml":function(bb){return bb.style.cssText.toLowerCase();},"default":function(bc){return bc.getAttribute(g);}}),isPropertySupported:function(bd){return (this.__cv[bd]||this.__cs[bd]||bd in document.documentElement.style);},COMPUTED_MODE:1,CASCADED_MODE:2,LOCAL_MODE:3,set:function(be,name,bf,bg){{};name=this.__cs[name]||name;if(bg!==false&&this.__cv[name]){return this.__cv[name].set(be,bf);}else{be.style[name]=bf!==null?bf:m;}},setStyles:function(bh,bi,bj){{};var bm=this.__cs;var bo=this.__cv;var bk=bh.style;for(var bn in bi){var bl=bi[bn];var name=bm[bn]||bn;if(bl===undefined){if(bj!==false&&bo[name]){bo[name].reset(bh);}else{bk[name]=m;}}else{if(bj!==false&&bo[name]){bo[name].set(bh,bl);}else{bk[name]=bl!==null?bl:m;}}}},reset:function(bp,name,bq){name=this.__cs[name]||name;if(bq!==false&&this.__cv[name]){return this.__cv[name].reset(bp);}else{bp.style[name]=m;}},get:qx.core.Variant.select(k,{"mshtml":function(br,name,bs,bt){name=this.__cs[name]||name;if(bt!==false&&this.__cv[name]){return this.__cv[name].get(br,bs);}if(!br.currentStyle){return br.style[name]||m;}switch(bs){case this.LOCAL_MODE:return br.style[name]||m;case this.CASCADED_MODE:return br.currentStyle[name]||m;default:var bx=br.currentStyle[name]||m;if(/^-?[\.\d]+(px)?$/i.test(bx)){return bx;}var bw=this.__cu[name];if(bw){var bu=br.style[name];br.style[name]=bx||0;var bv=br.style[bw]+e;br.style[name]=bu;return bv;}if(/^-?[\.\d]+(em|pt|%)?$/i.test(bx)){throw new Error("Untranslated computed property value: "+name+". Only pixel values work well across different clients.");}return bx;}},"default":function(by,name,bz,bA){name=this.__cs[name]||name;if(bA!==false&&this.__cv[name]){return this.__cv[name].get(by,bz);}switch(bz){case this.LOCAL_MODE:return by.style[name]||m;case this.CASCADED_MODE:if(by.currentStyle){return by.currentStyle[name]||m;}throw new Error("Cascaded styles are not supported in this browser!");default:var bB=qx.dom.Node.getDocument(by);var bC=bB.defaultView.getComputedStyle(by,null);return bC?bC[name]:m;}}})},defer:function(bD){bD.__cr();}});})();(function(){var j="borderTopWidth",i="borderLeftWidth",h="marginTop",g="marginLeft",f="scroll",e="qx.client",d="border-box",c="borderBottomWidth",b="borderRightWidth",a="auto",y="padding",x="qx.bom.element.Location",w="paddingLeft",v="static",u="marginBottom",t="visible",s="BODY",r="paddingBottom",q="paddingTop",p="marginRight",n="position",o="margin",l="overflow",m="paddingRight",k="border";qx.Class.define(x,{statics:{__iY:function(z,A){return qx.bom.element.Style.get(z,A,qx.bom.element.Style.COMPUTED_MODE,false);},__ja:function(B,C){return parseInt(qx.bom.element.Style.get(B,C,qx.bom.element.Style.COMPUTED_MODE,false),10)||0;},__jb:function(D){var G=0,top=0;if(D.getBoundingClientRect&&!qx.bom.client.Engine.OPERA){var F=qx.dom.Node.getWindow(D);G-=qx.bom.Viewport.getScrollLeft(F);top-=qx.bom.Viewport.getScrollTop(F);}else{var E=qx.dom.Node.getDocument(D).body;D=D.parentNode;while(D&&D!=E){G+=D.scrollLeft;top+=D.scrollTop;D=D.parentNode;}}return {left:G,top:top};},__jc:qx.core.Variant.select(e,{"mshtml":function(H){var J=qx.dom.Node.getDocument(H);var I=J.body;var K=0;var top=0;K-=I.clientLeft+J.documentElement.clientLeft;top-=I.clientTop+J.documentElement.clientTop;if(qx.bom.client.Feature.STANDARD_MODE){K+=this.__ja(I,i);top+=this.__ja(I,j);}return {left:K,top:top};},"webkit":function(L){var N=qx.dom.Node.getDocument(L);var M=N.body;var O=M.offsetLeft;var top=M.offsetTop;if(qx.bom.client.Engine.VERSION<530.17){O+=this.__ja(M,i);top+=this.__ja(M,j);}return {left:O,top:top};},"gecko":function(P){var Q=qx.dom.Node.getDocument(P).body;var R=Q.offsetLeft;var top=Q.offsetTop;if(qx.bom.client.Engine.VERSION<1.9){R+=this.__ja(Q,g);top+=this.__ja(Q,h);}if(qx.bom.element.BoxSizing.get(Q)!==d){R+=this.__ja(Q,i);top+=this.__ja(Q,j);}return {left:R,top:top};},"default":function(S){var T=qx.dom.Node.getDocument(S).body;var U=T.offsetLeft;var top=T.offsetTop;return {left:U,top:top};}}),__jd:qx.core.Variant.select(e,{"mshtml|webkit":function(V){var X=qx.dom.Node.getDocument(V);if(V.getBoundingClientRect){var Y=V.getBoundingClientRect();var ba=Y.left;var top=Y.top;}else{var ba=V.offsetLeft;var top=V.offsetTop;V=V.offsetParent;var W=X.body;while(V&&V!=W){ba+=V.offsetLeft;top+=V.offsetTop;ba+=this.__ja(V,i);top+=this.__ja(V,j);V=V.offsetParent;}}return {left:ba,top:top};},"gecko":function(bb){if(bb.getBoundingClientRect){var be=bb.getBoundingClientRect();var bf=Math.round(be.left);var top=Math.round(be.top);}else{var bf=0;var top=0;var bc=qx.dom.Node.getDocument(bb).body;var bd=qx.bom.element.BoxSizing;if(bd.get(bb)!==d){bf-=this.__ja(bb,i);top-=this.__ja(bb,j);}while(bb&&bb!==bc){bf+=bb.offsetLeft;top+=bb.offsetTop;if(bd.get(bb)!==d){bf+=this.__ja(bb,i);top+=this.__ja(bb,j);}if(bb.parentNode&&this.__iY(bb.parentNode,l)!=t){bf+=this.__ja(bb.parentNode,i);top+=this.__ja(bb.parentNode,j);}bb=bb.offsetParent;}}return {left:bf,top:top};},"default":function(bg){var bi=0;var top=0;var bh=qx.dom.Node.getDocument(bg).body;while(bg&&bg!==bh){bi+=bg.offsetLeft;top+=bg.offsetTop;bg=bg.offsetParent;}return {left:bi,top:top};}}),get:function(bj,bk){if(bj.tagName==s){var location=this.__je(bj);var br=location.left;var top=location.top;}else{var bl=this.__jc(bj);var bq=this.__jd(bj);var scroll=this.__jb(bj);var br=bq.left+bl.left-scroll.left;var top=bq.top+bl.top-scroll.top;}var bm=br+bj.offsetWidth;var bn=top+bj.offsetHeight;if(bk){if(bk==y||bk==f){var bo=qx.bom.element.Overflow.getX(bj);if(bo==f||bo==a){bm+=bj.scrollWidth-bj.offsetWidth+this.__ja(bj,i)+this.__ja(bj,b);}var bp=qx.bom.element.Overflow.getY(bj);if(bp==f||bp==a){bn+=bj.scrollHeight-bj.offsetHeight+this.__ja(bj,j)+this.__ja(bj,c);}}switch(bk){case y:br+=this.__ja(bj,w);top+=this.__ja(bj,q);bm-=this.__ja(bj,m);bn-=this.__ja(bj,r);case f:br-=bj.scrollLeft;top-=bj.scrollTop;bm-=bj.scrollLeft;bn-=bj.scrollTop;case k:br+=this.__ja(bj,i);top+=this.__ja(bj,j);bm-=this.__ja(bj,b);bn-=this.__ja(bj,c);break;case o:br-=this.__ja(bj,g);top-=this.__ja(bj,h);bm+=this.__ja(bj,p);bn+=this.__ja(bj,u);break;}}return {left:br,top:top,right:bm,bottom:bn};},__je:qx.core.Variant.select(e,{"default":function(bs){var top=bs.offsetTop+this.__ja(bs,h);var bt=bs.offsetLeft+this.__ja(bs,g);return {left:bt,top:top};},"mshtml":function(bu){var top=bu.offsetTop;var bv=bu.offsetLeft;if(!((qx.bom.client.Engine.VERSION<8||qx.bom.client.Engine.DOCUMENT_MODE<8)&&!qx.bom.client.Feature.QUIRKS_MODE)){top+=this.__ja(bu,h);bv+=this.__ja(bu,g);}return {left:bv,top:top};},"gecko":function(bw){var top=bw.offsetTop+this.__ja(bw,h)+this.__ja(bw,i);var bx=bw.offsetLeft+this.__ja(bw,g)+this.__ja(bw,j);return {left:bx,top:top};}}),getLeft:function(by,bz){return this.get(by,bz).left;},getTop:function(bA,bB){return this.get(bA,bB).top;},getRight:function(bC,bD){return this.get(bC,bD).right;},getBottom:function(bE,bF){return this.get(bE,bF).bottom;},getRelative:function(bG,bH,bI,bJ){var bL=this.get(bG,bI);var bK=this.get(bH,bJ);return {left:bL.left-bK.left,top:bL.top-bK.top,right:bL.right-bK.right,bottom:bL.bottom-bK.bottom};},getPosition:function(bM){return this.getRelative(bM,this.getOffsetParent(bM));},getOffsetParent:function(bN){var bP=bN.offsetParent||document.body;var bO=qx.bom.element.Style;while(bP&&(!/^body|html$/i.test(bP.tagName)&&bO.get(bP,n)===v)){bP=bP.offsetParent;}return bP;}}});})();(function(){var b="qx.ui.core.queue.Widget",a="widget";qx.Class.define(b,{statics:{__iQ:{},remove:function(c){delete this.__iQ[c.$$hash];},add:function(d){var e=this.__iQ;if(e[d.$$hash]){return;}e[d.$$hash]=d;qx.ui.core.queue.Manager.scheduleFlush(a);},flush:function(){var f=this.__iQ;var h;for(var g in f){h=f[g];delete f[g];h.syncWidget();}for(var g in f){return;}this.__iQ={};}}});})();(function(){var b="qx.ui.core.queue.Visibility",a="visibility";qx.Class.define(b,{statics:{__iC:{},__iD:{},remove:function(c){var d=c.$$hash;delete this.__iD[d];delete this.__iC[d];},isVisible:function(e){return this.__iD[e.$$hash]||false;},__iE:function(f){var h=this.__iD;var g=f.$$hash;var i;if(f.isExcluded()){i=false;}else{var parent=f.$$parent;if(parent){i=this.__iE(parent);}else{i=f.isRootWidget();}}return h[g]=i;},add:function(j){var k=this.__iC;if(k[j.$$hash]){return;}k[j.$$hash]=j;qx.ui.core.queue.Manager.scheduleFlush(a);},flush:function(){var l=this.__iC;var p=this.__iD;for(var m in l){if(p[m]!=null){l[m].addChildrenToQueue(l);}}var o={};for(var m in l){o[m]=p[m];p[m]=null;}for(var m in l){var n=l[m];delete l[m];if(p[m]==null){this.__iE(n);}if(p[m]&&p[m]!=o[m]){n.checkAppearanceNeeds();}}this.__iC={};}}});})();(function(){var b="appearance",a="qx.ui.core.queue.Appearance";qx.Class.define(a,{statics:{__hL:{},remove:function(c){delete this.__hL[c.$$hash];},add:function(d){var e=this.__hL;if(e[d.$$hash]){return;}e[d.$$hash]=d;qx.ui.core.queue.Manager.scheduleFlush(b);},has:function(f){return !!this.__hL[f.$$hash];},flush:function(){var j=qx.ui.core.queue.Visibility;var g=this.__hL;var i;for(var h in g){i=g[h];delete g[h];if(j.isVisible(i)){i.syncAppearance();}else{i.$$stateChanges=true;}}}}});})();(function(){var b="qx.ui.core.queue.Layout",a="layout";qx.Class.define(b,{statics:{__if:{},remove:function(c){delete this.__if[c.$$hash];},add:function(d){this.__if[d.$$hash]=d;qx.ui.core.queue.Manager.scheduleFlush(a);},flush:function(){var e=this.__ii();for(var i=e.length-1;i>=0;i--){var f=e[i];if(f.hasValidLayout()){continue;}if(f.isRootWidget()&&!f.hasUserBounds()){var h=f.getSizeHint();f.renderLayout(0,0,h.width,h.height);}else{var g=f.getBounds();f.renderLayout(g.left,g.top,g.width,g.height);}}},getNestingLevel:function(j){var k=this.__ih;var m=0;var parent=j;while(true){if(k[parent.$$hash]!=null){m+=k[parent.$$hash];break;}if(!parent.$$parent){break;}parent=parent.$$parent;m+=1;}var l=m;while(j&&j!==parent){k[j.$$hash]=l--;j=j.$$parent;}return m;},__ig:function(){var s=qx.ui.core.queue.Visibility;this.__ih={};var r=[];var q=this.__if;var n,p;for(var o in q){n=q[o];if(s.isVisible(n)){p=this.getNestingLevel(n);if(!r[p]){r[p]={};}r[p][o]=n;delete q[o];}}return r;},__ii:function(){var w=[];var y=this.__ig();for(var v=y.length-1;v>=0;v--){if(!y[v]){continue;}for(var u in y[v]){var t=y[v][u];if(v==0||t.isRootWidget()||t.hasUserBounds()){w.push(t);t.invalidateLayoutCache();continue;}var A=t.getSizeHint(false);if(A){t.invalidateLayoutCache();var x=t.getSizeHint();var z=(!t.getBounds()||A.minWidth!==x.minWidth||A.width!==x.width||A.maxWidth!==x.maxWidth||A.minHeight!==x.minHeight||A.height!==x.height||A.maxHeight!==x.maxHeight);}else{z=true;}if(z){var parent=t.getLayoutParent();if(!y[v-1]){y[v-1]={};}y[v-1][parent.$$hash]=parent;}else{w.push(t);}}}return w;}}});})();(function(){var b="dispose",a="qx.ui.core.queue.Dispose";qx.Class.define(a,{statics:{__eX:{},add:function(c){var d=this.__eX;if(d[c.$$hash]){return;}d[c.$$hash]=c;qx.ui.core.queue.Manager.scheduleFlush(b);},flush:function(){var e=this.__eX;for(var g in e){var f=e[g];delete e[g];f.dispose();}for(var g in e){return;}this.__eX={};}}});})();(function(){var a="qx.ui.core.MChildrenHandling";qx.Mixin.define(a,{members:{getChildren:function(){return this._getChildren();},hasChildren:function(){return this._hasChildren();},indexOf:function(b){return this._indexOf(b);},add:function(c,d){this._add(c,d);},addAt:function(e,f,g){this._addAt(e,f,g);},addBefore:function(h,i,j){this._addBefore(h,i,j);},addAfter:function(k,l,m){this._addAfter(k,l,m);},remove:function(n){this._remove(n);},removeAt:function(o){return this._removeAt(o);},removeAll:function(){this._removeAll();}},statics:{remap:function(p){p.getChildren=p._getChildren;p.hasChildren=p._hasChildren;p.indexOf=p._indexOf;p.add=p._add;p.addAt=p._addAt;p.addBefore=p._addBefore;p.addAfter=p._addAfter;p.remove=p._remove;p.removeAt=p._removeAt;p.removeAll=p._removeAll;}}});})();(function(){var a="qx.ui.core.MLayoutHandling";qx.Mixin.define(a,{members:{setLayout:function(b){return this._setLayout(b);},getLayout:function(){return this._getLayout();}},statics:{remap:function(c){c.getLayout=c._getLayout;c.setLayout=c._setLayout;}}});})();(function(){var j="Integer",i="_applyDimension",h="Boolean",g="_applyStretching",f="_applyMargin",e="shorthand",d="_applyAlign",c="allowShrinkY",b="bottom",a="baseline",x="marginBottom",w="qx.ui.core.LayoutItem",v="center",u="marginTop",t="allowGrowX",s="middle",r="marginLeft",q="allowShrinkX",p="top",o="right",m="marginRight",n="abstract",k="allowGrowY",l="left";qx.Class.define(w,{type:n,extend:qx.core.Object,properties:{minWidth:{check:j,nullable:true,apply:i,init:null,themeable:true},width:{check:j,nullable:true,apply:i,init:null,themeable:true},maxWidth:{check:j,nullable:true,apply:i,init:null,themeable:true},minHeight:{check:j,nullable:true,apply:i,init:null,themeable:true},height:{check:j,nullable:true,apply:i,init:null,themeable:true},maxHeight:{check:j,nullable:true,apply:i,init:null,themeable:true},allowGrowX:{check:h,apply:g,init:true,themeable:true},allowShrinkX:{check:h,apply:g,init:true,themeable:true},allowGrowY:{check:h,apply:g,init:true,themeable:true},allowShrinkY:{check:h,apply:g,init:true,themeable:true},allowStretchX:{group:[t,q],mode:e,themeable:true},allowStretchY:{group:[k,c],mode:e,themeable:true},marginTop:{check:j,init:0,apply:f,themeable:true},marginRight:{check:j,init:0,apply:f,themeable:true},marginBottom:{check:j,init:0,apply:f,themeable:true},marginLeft:{check:j,init:0,apply:f,themeable:true},margin:{group:[u,m,x,r],mode:e,themeable:true},alignX:{check:[l,v,o],nullable:true,apply:d,themeable:true},alignY:{check:[p,s,b,a],nullable:true,apply:d,themeable:true}},members:{__fz:null,__fA:null,__fB:null,__fC:null,__fD:null,__fE:null,__fF:null,getBounds:function(){return this.__fE||this.__fA||null;},clearSeparators:function(){},renderSeparator:function(y,z){},renderLayout:function(A,top,B,C){var D;{};var E=null;if(this.getHeight()==null&&this._hasHeightForWidth()){var E=this._getHeightForWidth(B);}if(E!=null&&E!==this.__fz){this.__fz=E;qx.ui.core.queue.Layout.add(this);return null;}var G=this.__fA;if(!G){G=this.__fA={};}var F={};if(A!==G.left||top!==G.top){F.position=true;G.left=A;G.top=top;}if(B!==G.width||C!==G.height){F.size=true;G.width=B;G.height=C;}if(this.__fB){F.local=true;delete this.__fB;}if(this.__fD){F.margin=true;delete this.__fD;}return F;},isExcluded:function(){return false;},hasValidLayout:function(){return !this.__fB;},scheduleLayoutUpdate:function(){qx.ui.core.queue.Layout.add(this);},invalidateLayoutCache:function(){this.__fB=true;this.__fC=null;},getSizeHint:function(H){var I=this.__fC;if(I){return I;}if(H===false){return null;}I=this.__fC=this._computeSizeHint();if(this._hasHeightForWidth()&&this.__fz&&this.getHeight()==null){I.height=this.__fz;}if(I.minWidth>I.width){I.width=I.minWidth;}if(I.maxWidth<I.width){I.width=I.maxWidth;}if(!this.getAllowGrowX()){I.maxWidth=I.width;}if(!this.getAllowShrinkX()){I.minWidth=I.width;}if(I.minHeight>I.height){I.height=I.minHeight;}if(I.maxHeight<I.height){I.height=I.maxHeight;}if(!this.getAllowGrowY()){I.maxHeight=I.height;}if(!this.getAllowShrinkY()){I.minHeight=I.height;}return I;},_computeSizeHint:function(){var N=this.getMinWidth()||0;var K=this.getMinHeight()||0;var O=this.getWidth()||N;var M=this.getHeight()||K;var J=this.getMaxWidth()||Infinity;var L=this.getMaxHeight()||Infinity;return {minWidth:N,width:O,maxWidth:J,minHeight:K,height:M,maxHeight:L};},_hasHeightForWidth:function(){var P=this._getLayout();if(P){return P.hasHeightForWidth();}return false;},_getHeightForWidth:function(Q){var R=this._getLayout();if(R&&R.hasHeightForWidth()){return R.getHeightForWidth(Q);}return null;},_getLayout:function(){return null;},_applyMargin:function(){this.__fD=true;var parent=this.$$parent;if(parent){parent.updateLayoutProperties();}},_applyAlign:function(){var parent=this.$$parent;if(parent){parent.updateLayoutProperties();}},_applyDimension:function(){qx.ui.core.queue.Layout.add(this);},_applyStretching:function(){qx.ui.core.queue.Layout.add(this);},hasUserBounds:function(){return !!this.__fE;},setUserBounds:function(S,top,T,U){this.__fE={left:S,top:top,width:T,height:U};qx.ui.core.queue.Layout.add(this);},resetUserBounds:function(){delete this.__fE;qx.ui.core.queue.Layout.add(this);},__fG:{},setLayoutProperties:function(V){if(V==null){return;}var W=this.__fF;if(!W){W=this.__fF={};}var parent=this.getLayoutParent();if(parent){parent.updateLayoutProperties(V);}for(var X in V){if(V[X]==null){delete W[X];}else{W[X]=V[X];}}},getLayoutProperties:function(){return this.__fF||this.__fG;},clearLayoutProperties:function(){delete this.__fF;},updateLayoutProperties:function(Y){var ba=this._getLayout();if(ba){var bb;{};ba.invalidateChildrenCache();}qx.ui.core.queue.Layout.add(this);},getApplicationRoot:function(){return qx.core.Init.getApplication().getRoot();},getLayoutParent:function(){return this.$$parent||null;},setLayoutParent:function(parent){if(this.$$parent===parent){return;}this.$$parent=parent||null;qx.ui.core.queue.Visibility.add(this);},isRootWidget:function(){return false;},_getRoot:function(){var parent=this;while(parent){if(parent.isRootWidget()){return parent;}parent=parent.$$parent;}return null;},clone:function(){var bc=qx.core.Object.prototype.clone.call(this);var bd=this.__fF;if(bd){bc.__fF=qx.lang.Object.clone(bd);}return bc;}},destruct:function(){this.$$parent=this.$$subparent=this.__fF=this.__fA=this.__fE=this.__fC=null;}});})();(function(){var a="qx.locale.MTranslation";qx.Mixin.define(a,{members:{tr:function(b,c){var d=qx.locale.Manager;if(d){return d.tr.apply(d,arguments);}throw new Error("To enable localization please include qx.locale.Manager into your build!");},trn:function(e,f,g,h){var i=qx.locale.Manager;if(i){return i.trn.apply(i,arguments);}throw new Error("To enable localization please include qx.locale.Manager into your build!");},trc:function(j,k,l){var m=qx.locale.Manager;if(m){return m.trc.apply(m,arguments);}throw new Error("To enable localization please include qx.locale.Manager into your build!");},marktr:function(n){var o=qx.locale.Manager;if(o){return o.marktr.apply(o,arguments);}throw new Error("To enable localization please include qx.locale.Manager into your build!");}}});})();(function(){var b="qx.ui.core.DecoratorFactory",a="$$nopool$$";qx.Class.define(b,{extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__cU={};},statics:{MAX_SIZE:15,__cV:a},members:{__cU:null,getDecoratorElement:function(c){var h=qx.ui.core.DecoratorFactory;if(qx.lang.Type.isString(c)){var f=c;var e=qx.theme.manager.Decoration.getInstance().resolve(c);}else{var f=h.__cV;e=c;}var g=this.__cU;if(g[f]&&g[f].length>0){var d=g[f].pop();}else{var d=this._createDecoratorElement(e,f);}d.$$pooled=false;return d;},poolDecorator:function(i){if(!i||i.$$pooled||i.isDisposed()){return;}var l=qx.ui.core.DecoratorFactory;var j=i.getId();if(j==l.__cV){i.dispose();return;}var k=this.__cU;if(!k[j]){k[j]=[];}if(k[j].length>l.MAX_SIZE){i.dispose();}else{i.$$pooled=true;k[j].push(i);}},_createDecoratorElement:function(m,n){var o=new qx.html.Decorator(m,n);{};return o;},toString:function(){return qx.core.Object.prototype.toString.call(this);}},destruct:function(){if(!qx.core.ObjectRegistry.inShutDown){var q=this.__cU;for(var p in q){qx.util.DisposeUtil.disposeArray(q,p);}}this.__cU=null;}});})();(function(){var bV="px",bU="Boolean",bT="qx.event.type.Drag",bS="qx.event.type.Mouse",bR="visible",bQ="qx.event.type.Focus",bP="on",bO="Integer",bN="qx.event.type.Touch",bM="excluded",bx="qx.event.type.Data",bw="_applyPadding",bv="qx.event.type.Event",bu="hidden",bt="contextmenu",bs="String",br="tabIndex",bq="focused",bp="changeVisibility",bo="mshtml",cd="hovered",ce="qx.event.type.KeySequence",cb="qx.client",cc="absolute",bY="backgroundColor",ca="drag",bW="div",bX="disabled",cf="move",cg="dragstart",bF="qx.dynlocale",bE="dragchange",bH="dragend",bG="resize",bJ="Decorator",bI="zIndex",bL="opacity",bK="default",bD="Color",bC="changeToolTipText",c="beforeContextmenuOpen",d="_applyNativeContextMenu",f="_applyBackgroundColor",g="_applyFocusable",h="changeShadow",j="qx.event.type.KeyInput",k="createChildControl",m="__dQ",n="Font",o="_applyShadow",ck="_applyEnabled",cj="_applySelectable",ci="Number",ch="_applyKeepActive",co="__ea",cn="_applyVisibility",cm="repeat",cl="qxDraggable",cq="__dR",cp="syncAppearance",N="paddingLeft",O="_applyDroppable",L="__ec",M="#",R="qx.event.type.MouseWheel",S="_applyCursor",P="_applyDraggable",Q="changeTextColor",J="$$widget",K="changeContextMenu",w="paddingTop",v="changeSelectable",y="hideFocus",x="none",s="outline",r="_applyAppearance",u="_applyOpacity",t="url(",q=")",p="qx.ui.core.Widget",X="_applyFont",Y="cursor",ba="qxDroppable",bb="changeZIndex",T="changeEnabled",U="changeFont",V="__ee",W="__dU",bc="_applyDecorator",bd="_applyZIndex",G="_applyTextColor",F="qx.ui.menu.Menu",E="_applyToolTipText",D="true",C="widget",B="changeDecorator",A="__dV",z="_applyTabIndex",I="changeAppearance",H="shorthand",be="/",bf="",bg="_applyContextMenu",bh="paddingBottom",bi="__dW",bj="changeNativeContextMenu",bk="qx.ui.tooltip.ToolTip",bl="qxKeepActive",bm="_applyKeepFocus",bn="paddingRight",bB="changeBackgroundColor",bA="changeLocale",bz="qxKeepFocus",by="qx/static/blank.gif";qx.Class.define(p,{extend:qx.ui.core.LayoutItem,include:[qx.locale.MTranslation],construct:function(){qx.ui.core.LayoutItem.call(this);this.__dQ=this._createContainerElement();this.__dR=this.__ed();this.__dQ.add(this.__dR);this.initFocusable();this.initSelectable();this.initNativeContextMenu();},events:{appear:bv,disappear:bv,createChildControl:bx,resize:bx,move:bx,syncAppearance:bx,mousemove:bS,mouseover:bS,mouseout:bS,mousedown:bS,mouseup:bS,click:bS,dblclick:bS,contextmenu:bS,beforeContextmenuOpen:bx,mousewheel:R,touchstart:bN,touchend:bN,touchmove:bN,touchcancel:bN,tap:bN,swipe:bN,keyup:ce,keydown:ce,keypress:ce,keyinput:j,focus:bQ,blur:bQ,focusin:bQ,focusout:bQ,activate:bQ,deactivate:bQ,capture:bv,losecapture:bv,drop:bT,dragleave:bT,dragover:bT,drag:bT,dragstart:bT,dragend:bT,dragchange:bT,droprequest:bT},properties:{paddingTop:{check:bO,init:0,apply:bw,themeable:true},paddingRight:{check:bO,init:0,apply:bw,themeable:true},paddingBottom:{check:bO,init:0,apply:bw,themeable:true},paddingLeft:{check:bO,init:0,apply:bw,themeable:true},padding:{group:[w,bn,bh,N],mode:H,themeable:true},zIndex:{nullable:true,init:null,apply:bd,event:bb,check:bO,themeable:true},decorator:{nullable:true,init:null,apply:bc,event:B,check:bJ,themeable:true},shadow:{nullable:true,init:null,apply:o,event:h,check:bJ,themeable:true},backgroundColor:{nullable:true,check:bD,apply:f,event:bB,themeable:true},textColor:{nullable:true,check:bD,apply:G,event:Q,themeable:true,inheritable:true},font:{nullable:true,apply:X,check:n,event:U,themeable:true,inheritable:true,dereference:true},opacity:{check:ci,apply:u,themeable:true,nullable:true,init:null},cursor:{check:bs,apply:S,themeable:true,inheritable:true,nullable:true,init:null},toolTip:{check:bk,nullable:true},toolTipText:{check:bs,nullable:true,event:bC,apply:E},toolTipIcon:{check:bs,nullable:true,event:bC},blockToolTip:{check:bU,init:false},visibility:{check:[bR,bu,bM],init:bR,apply:cn,event:bp},enabled:{init:true,check:bU,inheritable:true,apply:ck,event:T},anonymous:{init:false,check:bU},tabIndex:{check:bO,nullable:true,apply:z},focusable:{check:bU,init:false,apply:g},keepFocus:{check:bU,init:false,apply:bm},keepActive:{check:bU,init:false,apply:ch},draggable:{check:bU,init:false,apply:P},droppable:{check:bU,init:false,apply:O},selectable:{check:bU,init:false,event:v,apply:cj},contextMenu:{check:F,apply:bg,nullable:true,event:K},nativeContextMenu:{check:bU,init:false,themeable:true,event:bj,apply:d},appearance:{check:bs,init:C,apply:r,event:I}},statics:{DEBUG:false,getWidgetByElement:function(cr,cs){while(cr){var ct=cr.$$widget;if(ct!=null){var cu=qx.core.ObjectRegistry.fromHashCode(ct);if(!cs||!cu.getAnonymous()){return cu;}}try{cr=cr.parentNode;}catch(e){return null;}}return null;},contains:function(parent,cv){while(cv){if(parent==cv){return true;}cv=cv.getLayoutParent();}return false;},__dS:new qx.ui.core.DecoratorFactory(),__dT:new qx.ui.core.DecoratorFactory()},members:{__dQ:null,__dR:null,__dU:null,__dV:null,__dW:null,__dX:null,__dY:null,__ea:null,_getLayout:function(){return this.__ea;},_setLayout:function(cw){{};if(this.__ea){this.__ea.connectToWidget(null);}if(cw){cw.connectToWidget(this);}this.__ea=cw;qx.ui.core.queue.Layout.add(this);},setLayoutParent:function(parent){if(this.$$parent===parent){return;}var cx=this.getContainerElement();if(this.$$parent&&!this.$$parent.$$disposed){this.$$parent.getContentElement().remove(cx);}this.$$parent=parent||null;if(parent&&!parent.$$disposed){this.$$parent.getContentElement().add(cx);}this.$$refreshInheritables();qx.ui.core.queue.Visibility.add(this);},_updateInsets:null,__eb:function(a,b){if(a==b){return false;}if(a==null||b==null){return true;}var cy=qx.theme.manager.Decoration.getInstance();var cA=cy.resolve(a).getInsets();var cz=cy.resolve(b).getInsets();if(cA.top!=cz.top||cA.right!=cz.right||cA.bottom!=cz.bottom||cA.left!=cz.left){return true;}return false;},renderLayout:function(cB,top,cC,cD){var cM=qx.ui.core.LayoutItem.prototype.renderLayout.call(this,cB,top,cC,cD);if(!cM){return null;}var cF=this.getContainerElement();var content=this.getContentElement();var cJ=cM.size||this._updateInsets;var cN=bV;var cK={};if(cM.position){cK.left=cB+cN;cK.top=top+cN;}if(cM.size){cK.width=cC+cN;cK.height=cD+cN;}if(cM.position||cM.size){cF.setStyles(cK);}if(cJ||cM.local||cM.margin){var cE=this.getInsets();var innerWidth=cC-cE.left-cE.right;var innerHeight=cD-cE.top-cE.bottom;innerWidth=innerWidth<0?0:innerWidth;innerHeight=innerHeight<0?0:innerHeight;}var cH={};if(this._updateInsets){cH.left=cE.left+cN;cH.top=cE.top+cN;}if(cJ){cH.width=innerWidth+cN;cH.height=innerHeight+cN;}if(cJ||this._updateInsets){content.setStyles(cH);}if(cM.size){var cL=this.__dW;if(cL){cL.setStyles({width:cC+bV,height:cD+bV});}}if(cM.size||this._updateInsets){if(this.__dU){this.__dU.resize(cC,cD);}}if(cM.size){if(this.__dV){var cE=this.__dV.getInsets();var cI=cC+cE.left+cE.right;var cG=cD+cE.top+cE.bottom;this.__dV.resize(cI,cG);}}if(cJ||cM.local||cM.margin){if(this.__ea&&this.hasLayoutChildren()){this.__ea.renderLayout(innerWidth,innerHeight);}else if(this.hasLayoutChildren()){throw new Error("At least one child in control "+this._findTopControl()+" requires a layout, but no one was defined!");}}if(cM.position&&this.hasListener(cf)){this.fireDataEvent(cf,this.getBounds());}if(cM.size&&this.hasListener(bG)){this.fireDataEvent(bG,this.getBounds());}delete this._updateInsets;return cM;},__ec:null,clearSeparators:function(){var cP=this.__ec;if(!cP){return;}var cQ=qx.ui.core.Widget.__dS;var content=this.getContentElement();var cO;for(var i=0,l=cP.length;i<l;i++){cO=cP[i];cQ.poolDecorator(cO);content.remove(cO);}cP.length=0;},renderSeparator:function(cR,cS){var cT=qx.ui.core.Widget.__dS.getDecoratorElement(cR);this.getContentElement().add(cT);cT.resize(cS.width,cS.height);cT.setStyles({left:cS.left+bV,top:cS.top+bV});if(!this.__ec){this.__ec=[cT];}else{this.__ec.push(cT);}},_computeSizeHint:function(){var db=this.getWidth();var da=this.getMinWidth();var cV=this.getMaxWidth();var cY=this.getHeight();var cW=this.getMinHeight();var cX=this.getMaxHeight();{};var dc=this._getContentHint();var cU=this.getInsets();var de=cU.left+cU.right;var dd=cU.top+cU.bottom;if(db==null){db=dc.width+de;}if(cY==null){cY=dc.height+dd;}if(da==null){da=de;if(dc.minWidth!=null){da+=dc.minWidth;}}if(cW==null){cW=dd;if(dc.minHeight!=null){cW+=dc.minHeight;}}if(cV==null){if(dc.maxWidth==null){cV=Infinity;}else{cV=dc.maxWidth+de;}}if(cX==null){if(dc.maxHeight==null){cX=Infinity;}else{cX=dc.maxHeight+dd;}}return {width:db,minWidth:da,maxWidth:cV,height:cY,minHeight:cW,maxHeight:cX};},invalidateLayoutCache:function(){qx.ui.core.LayoutItem.prototype.invalidateLayoutCache.call(this);if(this.__ea){this.__ea.invalidateLayoutCache();}},_getContentHint:function(){var dg=this.__ea;if(dg){if(this.hasLayoutChildren()){var df;var dh=dg.getSizeHint();{};return dh;}else{return {width:0,height:0};}}else{return {width:100,height:50};}},_getHeightForWidth:function(di){var dm=this.getInsets();var dq=dm.left+dm.right;var dp=dm.top+dm.bottom;var dn=di-dq;var dk=this._getLayout();if(dk&&dk.hasHeightForWidth()){var dj=dk.getHeightForWidth(di);}else{dj=this._getContentHeightForWidth(dn);}var dl=dj+dp;return dl;},_getContentHeightForWidth:function(dr){throw new Error("Abstract method call: _getContentHeightForWidth()!");},getInsets:function(){var top=this.getPaddingTop();var dt=this.getPaddingRight();var dv=this.getPaddingBottom();var du=this.getPaddingLeft();if(this.__dU){var ds=this.__dU.getInsets();{};top+=ds.top;dt+=ds.right;dv+=ds.bottom;du+=ds.left;}return {"top":top,"right":dt,"bottom":dv,"left":du};},getInnerSize:function(){var dx=this.getBounds();if(!dx){return null;}var dw=this.getInsets();return {width:dx.width-dw.left-dw.right,height:dx.height-dw.top-dw.bottom};},show:function(){this.setVisibility(bR);},hide:function(){this.setVisibility(bu);},exclude:function(){this.setVisibility(bM);},isVisible:function(){return this.getVisibility()===bR;},isHidden:function(){return this.getVisibility()!==bR;},isExcluded:function(){return this.getVisibility()===bM;},isSeeable:function(){var dz=this.getContainerElement().getDomElement();if(dz){return dz.offsetWidth>0;}var dy=this;do{if(!dy.isVisible()){return false;}if(dy.isRootWidget()){return true;}dy=dy.getLayoutParent();}while(dy);return false;},_createContainerElement:function(){var dB={"$$widget":this.toHashCode()};{};var dA={zIndex:0,position:cc};return new qx.html.Element(bW,dA,dB);},__ed:function(){var dC=this._createContentElement();{};dC.setStyles({"position":cc,"zIndex":10});return dC;},_createContentElement:function(){return new qx.html.Element(bW,{overflowX:bu,overflowY:bu});},getContainerElement:function(){return this.__dQ;},getContentElement:function(){return this.__dR;},getDecoratorElement:function(){return this.__dU||null;},getShadowElement:function(){return this.__dV||null;},__ee:null,getLayoutChildren:function(){var dE=this.__ee;if(!dE){return this.__ef;}var dF;for(var i=0,l=dE.length;i<l;i++){var dD=dE[i];if(dD.hasUserBounds()||dD.isExcluded()){if(dF==null){dF=dE.concat();}qx.lang.Array.remove(dF,dD);}}return dF||dE;},scheduleLayoutUpdate:function(){qx.ui.core.queue.Layout.add(this);},invalidateLayoutChildren:function(){var dG=this.__ea;if(dG){dG.invalidateChildrenCache();}qx.ui.core.queue.Layout.add(this);},hasLayoutChildren:function(){var dH=this.__ee;if(!dH){return false;}var dI;for(var i=0,l=dH.length;i<l;i++){dI=dH[i];if(!dI.hasUserBounds()&&!dI.isExcluded()){return true;}}return false;},getChildrenContainer:function(){return this;},__ef:[],_getChildren:function(){return this.__ee||this.__ef;},_indexOf:function(dJ){var dK=this.__ee;if(!dK){return -1;}return dK.indexOf(dJ);},_hasChildren:function(){var dL=this.__ee;return dL!=null&&(!!dL[0]);},addChildrenToQueue:function(dM){var dN=this.__ee;if(!dN){return;}var dO;for(var i=0,l=dN.length;i<l;i++){dO=dN[i];dM[dO.$$hash]=dO;dO.addChildrenToQueue(dM);}},_add:function(dP,dQ){if(dP.getLayoutParent()==this){qx.lang.Array.remove(this.__ee,dP);}if(this.__ee){this.__ee.push(dP);}else{this.__ee=[dP];}this.__eg(dP,dQ);},_addAt:function(dR,dS,dT){if(!this.__ee){this.__ee=[];}if(dR.getLayoutParent()==this){qx.lang.Array.remove(this.__ee,dR);}var dU=this.__ee[dS];if(dU===dR){dR.setLayoutProperties(dT);}if(dU){qx.lang.Array.insertBefore(this.__ee,dR,dU);}else{this.__ee.push(dR);}this.__eg(dR,dT);},_addBefore:function(dV,dW,dX){{};if(dV==dW){return;}if(!this.__ee){this.__ee=[];}if(dV.getLayoutParent()==this){qx.lang.Array.remove(this.__ee,dV);}qx.lang.Array.insertBefore(this.__ee,dV,dW);this.__eg(dV,dX);},_addAfter:function(dY,ea,eb){{};if(dY==ea){return;}if(!this.__ee){this.__ee=[];}if(dY.getLayoutParent()==this){qx.lang.Array.remove(this.__ee,dY);}qx.lang.Array.insertAfter(this.__ee,dY,ea);this.__eg(dY,eb);},_remove:function(ec){if(!this.__ee){throw new Error("This widget has no children!");}qx.lang.Array.remove(this.__ee,ec);this.__eh(ec);},_removeAt:function(ed){if(!this.__ee){throw new Error("This widget has no children!");}var ee=this.__ee[ed];qx.lang.Array.removeAt(this.__ee,ed);this.__eh(ee);return ee;},_removeAll:function(){if(!this.__ee){return;}var ef=this.__ee.concat();this.__ee.length=0;for(var i=ef.length-1;i>=0;i--){this.__eh(ef[i]);}qx.ui.core.queue.Layout.add(this);},_afterAddChild:null,_afterRemoveChild:null,__eg:function(eg,eh){{};var parent=eg.getLayoutParent();if(parent&&parent!=this){parent._remove(eg);}eg.setLayoutParent(this);if(eh){eg.setLayoutProperties(eh);}else{this.updateLayoutProperties();}if(this._afterAddChild){this._afterAddChild(eg);}},__eh:function(ei){{};if(ei.getLayoutParent()!==this){throw new Error("Remove Error: "+ei+" is not a child of this widget!");}ei.setLayoutParent(null);if(this.__ea){this.__ea.invalidateChildrenCache();}qx.ui.core.queue.Layout.add(this);if(this._afterRemoveChild){this._afterRemoveChild(ei);}},capture:function(ej){this.getContainerElement().capture(ej);},releaseCapture:function(){this.getContainerElement().releaseCapture();},_applyPadding:function(ek,em,name){this._updateInsets=true;qx.ui.core.queue.Layout.add(this);},_createProtectorElement:function(){if(this.__dW){return;}var en=this.__dW=new qx.html.Element;{};en.setStyles({position:cc,top:0,left:0,zIndex:7});var eo=this.getBounds();if(eo){this.__dW.setStyles({width:eo.width+bV,height:eo.height+bV});}if(qx.core.Variant.isSet(cb,bo)){en.setStyles({backgroundImage:t+qx.util.ResourceManager.getInstance().toUri(by)+q,backgroundRepeat:cm});}this.getContainerElement().add(en);},_applyDecorator:function(ep,eq){{};var et=qx.ui.core.Widget.__dS;var er=this.getContainerElement();if(!this.__dW&&!qx.bom.client.Feature.CSS_POINTER_EVENTS){this._createProtectorElement();}if(eq){er.remove(this.__dU);et.poolDecorator(this.__dU);}if(ep){var es=this.__dU=et.getDecoratorElement(ep);es.setStyle(bI,5);er.add(es);}else{delete this.__dU;}this._applyBackgroundColor(this.getBackgroundColor());if(this.__eb(eq,ep)){this._updateInsets=true;qx.ui.core.queue.Layout.add(this);}else if(ep){var eu=this.getBounds();if(eu){es.resize(eu.width,eu.height);this.__dW&&this.__dW.setStyles({width:eu.width+bV,height:eu.height+bV});}}},_applyShadow:function(ev,ew){var eD=qx.ui.core.Widget.__dT;var ey=this.getContainerElement();if(ew){ey.remove(this.__dV);eD.poolDecorator(this.__dV);}if(ev){var eA=this.__dV=eD.getDecoratorElement(ev);ey.add(eA);var eC=eA.getInsets();eA.setStyles({left:(-eC.left)+bV,top:(-eC.top)+bV});var eB=this.getBounds();if(eB){var ez=eB.width+eC.left+eC.right;var ex=eB.height+eC.top+eC.bottom;eA.resize(ez,ex);}eA.tint(null);}else{delete this.__dV;}},_applyToolTipText:function(eE,eF){if(qx.core.Variant.isSet(bF,bP)){if(this.__dY){return;}var eG=qx.locale.Manager.getInstance();this.__dY=eG.addListener(bA,function(){var eH=this.getToolTipText();if(eH&&eH.translate){this.setToolTipText(eH.translate());}},this);}},_applyTextColor:function(eI,eJ){},_applyZIndex:function(eK,eL){this.getContainerElement().setStyle(bI,eK==null?0:eK);},_applyVisibility:function(eM,eN){var eO=this.getContainerElement();if(eM===bR){eO.show();}else{eO.hide();}var parent=this.$$parent;if(parent&&(eN==null||eM==null||eN===bM||eM===bM)){parent.invalidateLayoutChildren();}qx.ui.core.queue.Visibility.add(this);},_applyOpacity:function(eP,eQ){this.getContainerElement().setStyle(bL,eP==1?null:eP);if(qx.core.Variant.isSet(cb,bo)&&qx.bom.element.Decoration.isAlphaImageLoaderEnabled()){if(!qx.Class.isSubClassOf(this.getContentElement().constructor,qx.html.Image)){var eR=(eP==1||eP==null)?null:0.99;this.getContentElement().setStyle(bL,eR);}}},_applyCursor:function(eS,eT){if(eS==null&&!this.isSelectable()){eS=bK;}this.getContainerElement().setStyle(Y,eS,qx.bom.client.Engine.OPERA);},_applyBackgroundColor:function(eU,eV){var eW=this.getBackgroundColor();var eY=this.getContainerElement();if(this.__dU){this.__dU.tint(eW);eY.setStyle(bY,null);}else{var eX=qx.theme.manager.Color.getInstance().resolve(eW);eY.setStyle(bY,eX);}},_applyFont:function(fa,fb){},__ei:null,$$stateChanges:null,_forwardStates:null,hasState:function(fc){var fd=this.__ei;return !!fd&&!!fd[fc];},addState:function(fe){var ff=this.__ei;if(!ff){ff=this.__ei={};}if(ff[fe]){return;}this.__ei[fe]=true;if(fe===cd){this.syncAppearance();}else if(!qx.ui.core.queue.Visibility.isVisible(this)){this.$$stateChanges=true;}else{qx.ui.core.queue.Appearance.add(this);}var forward=this._forwardStates;var fi=this.__el;if(forward&&forward[fe]&&fi){var fg;for(var fh in fi){fg=fi[fh];if(fg instanceof qx.ui.core.Widget){fi[fh].addState(fe);}}}},removeState:function(fj){var fk=this.__ei;if(!fk||!fk[fj]){return;}delete this.__ei[fj];if(fj===cd){this.syncAppearance();}else if(!qx.ui.core.queue.Visibility.isVisible(this)){this.$$stateChanges=true;}else{qx.ui.core.queue.Appearance.add(this);}var forward=this._forwardStates;var fn=this.__el;if(forward&&forward[fj]&&fn){for(var fm in fn){var fl=fn[fm];if(fl instanceof qx.ui.core.Widget){fl.removeState(fj);}}}},replaceState:function(fo,fp){var fq=this.__ei;if(!fq){fq=this.__ei={};}if(!fq[fp]){fq[fp]=true;}if(fq[fo]){delete fq[fo];}if(!qx.ui.core.queue.Visibility.isVisible(this)){this.$$stateChanges=true;}else{qx.ui.core.queue.Appearance.add(this);}var forward=this._forwardStates;var ft=this.__el;if(forward&&forward[fp]&&ft){for(var fs in ft){var fr=ft[fs];if(fr instanceof qx.ui.core.Widget){fr.replaceState(fo,fp);}}}},__ej:null,__ek:null,syncAppearance:function(){var fy=this.__ei;var fx=this.__ej;var fz=qx.theme.manager.Appearance.getInstance();var fv=qx.core.Property.$$method.setThemed;var fD=qx.core.Property.$$method.resetThemed;if(this.__ek){delete this.__ek;if(fx){var fu=fz.styleFrom(fx,fy,null,this.getAppearance());if(fu){fx=null;}}}if(!fx){var fw=this;var fC=[];do{fC.push(fw.$$subcontrol||fw.getAppearance());}while(fw=fw.$$subparent);fx=fC.reverse().join(be).replace(/#[0-9]+/g,bf);this.__ej=fx;}var fA=fz.styleFrom(fx,fy,null,this.getAppearance());if(fA){var fB;if(fu){for(var fB in fu){if(fA[fB]===undefined){this[fD[fB]]();}}}{};for(var fB in fA){fA[fB]===undefined?this[fD[fB]]():this[fv[fB]](fA[fB]);}}else if(fu){for(var fB in fu){this[fD[fB]]();}}this.fireDataEvent(cp,this.__ei);},_applyAppearance:function(fE,fF){this.updateAppearance();},checkAppearanceNeeds:function(){if(!this.__dX){qx.ui.core.queue.Appearance.add(this);this.__dX=true;}else if(this.$$stateChanges){qx.ui.core.queue.Appearance.add(this);delete this.$$stateChanges;}},updateAppearance:function(){this.__ek=true;qx.ui.core.queue.Appearance.add(this);var fI=this.__el;if(fI){var fG;for(var fH in fI){fG=fI[fH];if(fG instanceof qx.ui.core.Widget){fG.updateAppearance();}}}},syncWidget:function(){},getEventTarget:function(){var fJ=this;while(fJ.getAnonymous()){fJ=fJ.getLayoutParent();if(!fJ){return null;}}return fJ;},getFocusTarget:function(){var fK=this;if(!fK.getEnabled()){return null;}while(fK.getAnonymous()||!fK.getFocusable()){fK=fK.getLayoutParent();if(!fK||!fK.getEnabled()){return null;}}return fK;},getFocusElement:function(){return this.getContainerElement();},isTabable:function(){return (!!this.getContainerElement().getDomElement())&&this.isFocusable();},_applyFocusable:function(fL,fM){var fN=this.getFocusElement();if(fL){var fO=this.getTabIndex();if(fO==null){fO=1;}fN.setAttribute(br,fO);if(qx.core.Variant.isSet(cb,bo)){fN.setAttribute(y,D);}else{fN.setStyle(s,x);}}else{if(fN.isNativelyFocusable()){fN.setAttribute(br,-1);}else if(fM){fN.setAttribute(br,null);}}},_applyKeepFocus:function(fP){var fQ=this.getFocusElement();fQ.setAttribute(bz,fP?bP:null);},_applyKeepActive:function(fR){var fS=this.getContainerElement();fS.setAttribute(bl,fR?bP:null);},_applyTabIndex:function(fT){if(fT==null){fT=1;}else if(fT<1||fT>32000){throw new Error("TabIndex property must be between 1 and 32000");}if(this.getFocusable()&&fT!=null){this.getFocusElement().setAttribute(br,fT);}},_applySelectable:function(fU,fV){if(fV!==null){this._applyCursor(this.getCursor());}this.getContentElement().setSelectable(fU);},_applyEnabled:function(fW,fX){if(fW===false){this.addState(bX);this.removeState(cd);if(this.isFocusable()){this.removeState(bq);this._applyFocusable(false,true);}if(this.isDraggable()){this._applyDraggable(false,true);}if(this.isDroppable()){this._applyDroppable(false,true);}}else{this.removeState(bX);if(this.isFocusable()){this._applyFocusable(true,false);}if(this.isDraggable()){this._applyDraggable(true,false);}if(this.isDroppable()){this._applyDroppable(true,false);}}},_applyNativeContextMenu:function(fY,ga,name){},_applyContextMenu:function(gb,gc){if(gc){gc.removeState(bt);if(gc.getOpener()==this){gc.resetOpener();}if(!gb){this.removeListener(bt,this._onContextMenuOpen);gc.removeListener(bp,this._onBeforeContextMenuOpen,this);}}if(gb){gb.setOpener(this);gb.addState(bt);if(!gc){this.addListener(bt,this._onContextMenuOpen);gb.addListener(bp,this._onBeforeContextMenuOpen,this);}}},_onContextMenuOpen:function(e){this.getContextMenu().openAtMouse(e);e.stop();},_onBeforeContextMenuOpen:function(e){if(e.getData()==bR&&this.hasListener(c)){this.fireDataEvent(c,e);}},_onStopEvent:function(e){e.stopPropagation();},_applyDraggable:function(gd,ge){if(!this.isEnabled()&&gd===true){gd=false;}qx.ui.core.DragDropCursor.getInstance();if(gd){this.addListener(cg,this._onDragStart);this.addListener(ca,this._onDrag);this.addListener(bH,this._onDragEnd);this.addListener(bE,this._onDragChange);}else{this.removeListener(cg,this._onDragStart);this.removeListener(ca,this._onDrag);this.removeListener(bH,this._onDragEnd);this.removeListener(bE,this._onDragChange);}this.getContainerElement().setAttribute(cl,gd?bP:null);},_applyDroppable:function(gf,gg){if(!this.isEnabled()&&gf===true){gf=false;}this.getContainerElement().setAttribute(ba,gf?bP:null);},_onDragStart:function(e){qx.ui.core.DragDropCursor.getInstance().placeToMouse(e);this.getApplicationRoot().setGlobalCursor(bK);},_onDrag:function(e){qx.ui.core.DragDropCursor.getInstance().placeToMouse(e);},_onDragEnd:function(e){qx.ui.core.DragDropCursor.getInstance().moveTo(-1000,-1000);this.getApplicationRoot().resetGlobalCursor();},_onDragChange:function(e){var gh=qx.ui.core.DragDropCursor.getInstance();var gi=e.getCurrentAction();gi?gh.setAction(gi):gh.resetAction();},visualizeFocus:function(){this.addState(bq);},visualizeBlur:function(){this.removeState(bq);},scrollChildIntoView:function(gj,gk,gl,gm){this.scrollChildIntoViewX(gj,gk,gm);this.scrollChildIntoViewY(gj,gl,gm);},scrollChildIntoViewX:function(gn,go,gp){this.getContentElement().scrollChildIntoViewX(gn.getContainerElement(),go,gp);},scrollChildIntoViewY:function(gq,gr,gs){this.getContentElement().scrollChildIntoViewY(gq.getContainerElement(),gr,gs);},focus:function(){if(this.isFocusable()){this.getFocusElement().focus();}else{throw new Error("Widget is not focusable!");}},blur:function(){if(this.isFocusable()){this.getFocusElement().blur();}else{throw new Error("Widget is not focusable!");}},activate:function(){this.getContainerElement().activate();},deactivate:function(){this.getContainerElement().deactivate();},tabFocus:function(){this.getFocusElement().focus();},hasChildControl:function(gt){if(!this.__el){return false;}return !!this.__el[gt];},__el:null,_getCreatedChildControls:function(){return this.__el;},getChildControl:function(gu,gv){if(!this.__el){if(gv){return null;}this.__el={};}var gw=this.__el[gu];if(gw){return gw;}if(gv===true){return null;}return this._createChildControl(gu);},_showChildControl:function(gx){var gy=this.getChildControl(gx);gy.show();return gy;},_excludeChildControl:function(gz){var gA=this.getChildControl(gz,true);if(gA){gA.exclude();}},_isChildControlVisible:function(gB){var gC=this.getChildControl(gB,true);if(gC){return gC.isVisible();}return false;},_createChildControl:function(gD){if(!this.__el){this.__el={};}else if(this.__el[gD]){throw new Error("Child control '"+gD+"' already created!");}var gH=gD.indexOf(M);if(gH==-1){var gE=this._createChildControlImpl(gD);}else{var gE=this._createChildControlImpl(gD.substring(0,gH),gD.substring(gH+1,gD.length));}if(!gE){throw new Error("Unsupported control: "+gD);}gE.$$subcontrol=gD;gE.$$subparent=this;var gF=this.__ei;var forward=this._forwardStates;if(gF&&forward&&gE instanceof qx.ui.core.Widget){for(var gG in gF){if(forward[gG]){gE.addState(gG);}}}this.fireDataEvent(k,gE);return this.__el[gD]=gE;},_createChildControlImpl:function(gI,gJ){return null;},_disposeChildControls:function(){var gN=this.__el;if(!gN){return;}var gL=qx.ui.core.Widget;for(var gM in gN){var gK=gN[gM];if(!gL.contains(this,gK)){gK.destroy();}else{gK.dispose();}}delete this.__el;},_findTopControl:function(){var gO=this;while(gO){if(!gO.$$subparent){return gO;}gO=gO.$$subparent;}return null;},getContainerLocation:function(gP){var gQ=this.getContainerElement().getDomElement();return gQ?qx.bom.element.Location.get(gQ,gP):null;},getContentLocation:function(gR){var gS=this.getContentElement().getDomElement();return gS?qx.bom.element.Location.get(gS,gR):null;},setDomLeft:function(gT){var gU=this.getContainerElement().getDomElement();if(gU){gU.style.left=gT+bV;}else{throw new Error("DOM element is not yet created!");}},setDomTop:function(gV){var gW=this.getContainerElement().getDomElement();if(gW){gW.style.top=gV+bV;}else{throw new Error("DOM element is not yet created!");}},setDomPosition:function(gX,top){var gY=this.getContainerElement().getDomElement();if(gY){gY.style.left=gX+bV;gY.style.top=top+bV;}else{throw new Error("DOM element is not yet created!");}},destroy:function(){if(this.$$disposed){return;}var parent=this.$$parent;if(parent){parent._remove(this);}qx.ui.core.queue.Dispose.add(this);},clone:function(){var ha=qx.ui.core.LayoutItem.prototype.clone.call(this);if(this.getChildren){var hb=this.getChildren();for(var i=0,l=hb.length;i<l;i++){ha.add(hb[i].clone());}}return ha;}},destruct:function(){if(!qx.core.ObjectRegistry.inShutDown){if(qx.core.Variant.isSet(bF,bP)){if(this.__dY){qx.locale.Manager.getInstance().removeListenerById(this.__dY);}}this.getContainerElement().setAttribute(J,null,true);this._disposeChildControls();qx.ui.core.queue.Appearance.remove(this);qx.ui.core.queue.Layout.remove(this);qx.ui.core.queue.Visibility.remove(this);qx.ui.core.queue.Widget.remove(this);}if(!qx.core.ObjectRegistry.inShutDown){var hd=qx.ui.core.Widget;var hc=this.getContainerElement();if(this.__dU){hc.remove(this.__dU);hd.__dS.poolDecorator(this.__dU);}if(this.__dV){hc.remove(this.__dV);hd.__dT.poolDecorator(this.__dV);}this.clearSeparators();this.__dU=this.__dV=this.__ec=null;}else{this._disposeArray(L);this._disposeObjects(W,A);}this._disposeArray(V);this.__ei=this.__el=null;this._disposeObjects(co,m,cq,bi);}});})();(function(){var d="qx.event.type.Data",c="qx.ui.container.Composite",b="addChildWidget",a="removeChildWidget";qx.Class.define(c,{extend:qx.ui.core.Widget,include:[qx.ui.core.MChildrenHandling,qx.ui.core.MLayoutHandling],construct:function(e){qx.ui.core.Widget.call(this);if(e!=null){this._setLayout(e);}},events:{addChildWidget:d,removeChildWidget:d},members:{_afterAddChild:function(f){this.fireNonBubblingEvent(b,qx.event.type.Data,[f]);},_afterRemoveChild:function(g){this.fireNonBubblingEvent(a,qx.event.type.Data,[g]);}},defer:function(h,i){qx.ui.core.MChildrenHandling.remap(i);qx.ui.core.MLayoutHandling.remap(i);}});})();(function(){var l="button",k="",j="close",i="String",h="_applyIcon",g="page",f="qx.event.type.Event",e="_applyShowCloseButton",d="tabview-page",c="qx.ui.tabview.Page",a="_applyLabel",b="Boolean";qx.Class.define(c,{extend:qx.ui.container.Composite,construct:function(m,n){qx.ui.container.Composite.call(this);this._createChildControl(l);if(m!=null){this.setLabel(m);}if(n!=null){this.setIcon(n);}},events:{"close":f},properties:{appearance:{refine:true,init:d},label:{check:i,init:k,apply:a},icon:{check:i,init:k,apply:h},showCloseButton:{check:b,init:false,apply:e}},members:{_forwardStates:{barTop:1,barRight:1,barBottom:1,barLeft:1,firstTab:1,lastTab:1},_applyIcon:function(o,p){this.getChildControl(l).setIcon(o);},_applyLabel:function(q,r){this.getChildControl(l).setLabel(q);},_applyEnabled:function(s,t){qx.ui.container.Composite.prototype._applyEnabled.call(this,s,t);var u=this.getChildControl(l);s==null?u.resetEnabled():u.setEnabled(s);},_createChildControlImpl:function(v,w){var x;switch(v){case l:x=new qx.ui.tabview.TabButton;x.setAllowGrowX(true);x.setAllowGrowY(true);x.setUserData(g,this);x.addListener(j,this._onButtonClose,this);break;}return x||qx.ui.container.Composite.prototype._createChildControlImpl.call(this,v);},_applyShowCloseButton:function(y,z){this.getChildControl(l).setShowCloseButton(y);},_onButtonClose:function(){this.fireEvent(j);},getButton:function(){return this.getChildControl(l);}}});})();(function(){var i="showPrivate",h="expandProperties",g="showInherited",f="showProtected",d="_applyClassNode",c="apiviewer.ui.tabview.AbstractPage",b="nodeName",a="abstract";qx.Class.define(c,{extend:qx.ui.tabview.Page,type:a,construct:function(j){qx.ui.tabview.Page.call(this);this.setLayout(new qx.ui.layout.Canvas());this.setShowCloseButton(true);this._bindings=[];this._viewer=this._createViewer();this.add(this._viewer,{edge:0});this.__So(this._viewer);this.setClassNode(j);},properties:{classNode:{apply:d}},members:{_viewer:null,_bindings:null,_createViewer:function(){throw new Error("Abstract method call!");},_applyClassNode:function(k,l){this._viewer.setDocNode(k);this.setLabel(k.getFullName());this.setIcon(apiviewer.TreeUtil.getIconUrl(k));this.setUserData(b,k.getFullName());qx.event.Timer.once(function(e){this._viewer.getContentElement().scrollToY(0);},this,0);},__So:function(m){var n=apiviewer.UiModel.getInstance();var o=this._bindings;o.push(n.bind(g,m,g));o.push(n.bind(h,m,h));o.push(n.bind(f,m,f));o.push(n.bind(i,m,i));},__Sp:function(){var p=apiviewer.UiModel.getInstance();var q=this._bindings;while(q.length>0){var r=q.pop();p.removeBinding(r);}}},destruct:function(){this.__Sp();this._viewer.destroy();this._viewer=null;}});})();(function(){var a="apiviewer.ui.tabview.PackagePage";qx.Class.define(a,{extend:apiviewer.ui.tabview.AbstractPage,members:{_createViewer:function(){return new apiviewer.ui.PackageViewer();}}});})();(function(){var m="ready",l="qx.client",k="mshtml",j="load",i="unload",h="qx.event.handler.Application",g="complete",f="qx.application",d="gecko|opera|webkit",c="left",a="DOMContentLoaded",b="shutdown";qx.Class.define(h,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(n){qx.core.Object.call(this);this._window=n.getWindow();this.__ij=false;this.__ik=false;this._initObserver();qx.event.handler.Application.$$instance=this;},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{ready:1,shutdown:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_WINDOW,IGNORE_CAN_HANDLE:true,onScriptLoaded:function(){var o=qx.event.handler.Application.$$instance;if(o){o.__in();}}},members:{canHandleEvent:function(p,q){},registerEvent:function(r,s,t){},unregisterEvent:function(u,v,w){},__il:null,__ij:null,__ik:null,__im:null,__in:function(){if(!this.__il&&this.__ij&&qx.$$loader.scriptLoaded){try{var x=qx.core.Setting.get(f);if(!qx.Class.getByName(x)){return;}}catch(e){}if(qx.core.Variant.isSet(l,k)){if(qx.event.Registration.hasListener(this._window,m)){this.__il=true;qx.event.Registration.fireEvent(this._window,m);}}else{this.__il=true;qx.event.Registration.fireEvent(this._window,m);}}},isApplicationReady:function(){return this.__il;},_initObserver:function(){if(qx.$$domReady||document.readyState==g||document.readyState==m){this.__ij=true;this.__in();}else{this._onNativeLoadWrapped=qx.lang.Function.bind(this._onNativeLoad,this);if(qx.core.Variant.isSet(l,d)){qx.bom.Event.addNativeListener(this._window,a,this._onNativeLoadWrapped);}else if(qx.core.Variant.isSet(l,k)){var self=this;var y=function(){try{document.documentElement.doScroll(c);if(document.body){self._onNativeLoadWrapped();}}catch(z){window.setTimeout(y,100);}};y();}qx.bom.Event.addNativeListener(this._window,j,this._onNativeLoadWrapped);}this._onNativeUnloadWrapped=qx.lang.Function.bind(this._onNativeUnload,this);qx.bom.Event.addNativeListener(this._window,i,this._onNativeUnloadWrapped);},_stopObserver:function(){if(this._onNativeLoadWrapped){qx.bom.Event.removeNativeListener(this._window,j,this._onNativeLoadWrapped);}qx.bom.Event.removeNativeListener(this._window,i,this._onNativeUnloadWrapped);this._onNativeLoadWrapped=null;this._onNativeUnloadWrapped=null;},_onNativeLoad:qx.event.GlobalError.observeMethod(function(){this.__ij=true;this.__in();}),_onNativeUnload:qx.event.GlobalError.observeMethod(function(){if(!this.__im){this.__im=true;try{qx.event.Registration.fireEvent(this._window,b);}catch(e){throw e;}finally{qx.core.ObjectRegistry.shutdown();}}})},destruct:function(){this._stopObserver();this._window=null;},defer:function(A){qx.event.Registration.addHandler(A);}});})();(function(){var f="ready",d="qx.application",c="beforeunload",b="qx.core.Init",a="shutdown";qx.Class.define(b,{statics:{getApplication:function(){return this.__ku||null;},ready:function(){if(this.__ku){return;}if(qx.bom.client.Engine.UNKNOWN_ENGINE){qx.log.Logger.warn("Could not detect engine!");}if(qx.bom.client.Engine.UNKNOWN_VERSION){qx.log.Logger.warn("Could not detect the version of the engine!");}if(qx.bom.client.Platform.UNKNOWN_PLATFORM){qx.log.Logger.warn("Could not detect platform!");}if(qx.bom.client.System.UNKNOWN_SYSTEM){qx.log.Logger.warn("Could not detect system!");}qx.log.Logger.debug(this,"Load runtime: "+(new Date-qx.Bootstrap.LOADSTART)+"ms");var h=qx.core.Setting.get(d);var i=qx.Class.getByName(h);if(i){this.__ku=new i;var g=new Date;this.__ku.main();qx.log.Logger.debug(this,"Main runtime: "+(new Date-g)+"ms");var g=new Date;this.__ku.finalize();qx.log.Logger.debug(this,"Finalize runtime: "+(new Date-g)+"ms");}else{qx.log.Logger.warn("Missing application class: "+h);}},__kv:function(e){var j=this.__ku;if(j){e.setReturnValue(j.close());}},__kw:function(){var k=this.__ku;if(k){k.terminate();}}},defer:function(l){qx.event.Registration.addListener(window,f,l.ready,l);qx.event.Registration.addListener(window,a,l.__kw,l);qx.event.Registration.addListener(window,c,l.__kv,l);}});})();(function(){var h="object",g="__cq",f="_applyTheme",e="qx.theme.manager.Decoration",d="Theme",c="changeTheme",b="string",a="singleton";qx.Class.define(e,{type:a,extend:qx.core.Object,properties:{theme:{check:d,nullable:true,apply:f,event:c}},members:{__cq:null,resolve:function(i){if(!i){return null;}if(typeof i===h){return i;}var l=this.getTheme();if(!l){return null;}var l=this.getTheme();if(!l){return null;}var m=this.__cq;if(!m){m=this.__cq={};}var j=m[i];if(j){return j;}var k=l.decorations[i];if(!k){return null;}var n=k.decorator;if(n==null){throw new Error("Missing definition of which decorator to use in entry: "+i+"!");}return m[i]=(new n).set(k.style);},isValidPropertyValue:function(o){if(typeof o===b){return this.isDynamic(o);}else if(typeof o===h){var p=o.constructor;return qx.Class.hasInterface(p,qx.ui.decoration.IDecorator);}return false;},isDynamic:function(q){if(!q){return false;}var r=this.getTheme();if(!r){return false;}return !!r.decorations[q];},_applyTheme:function(s,t){var v=qx.util.AliasManager.getInstance();if(t){for(var u in t.aliases){v.remove(u);}}if(s){for(var u in s.aliases){v.add(u,s.aliases[u]);}}if(!s){this.__cq={};}}},destruct:function(){this._disposeMap(g);}});})();(function(){var a="qx.ui.decoration.IDecorator";qx.Interface.define(a,{members:{getMarkup:function(){},resize:function(b,c,d){},tint:function(e,f){},getInsets:function(){}}});})();(function(){var b="qx.util.ValueManager",a="abstract";qx.Class.define(b,{type:a,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this._dynamic={};},members:{_dynamic:null,resolveDynamic:function(c){return this._dynamic[c];},isDynamic:function(d){return !!this._dynamic[d];},resolve:function(e){if(e&&this._dynamic[e]){return this._dynamic[e];}return e;},_setDynamic:function(f){this._dynamic=f;},_getDynamic:function(){return this._dynamic;}},destruct:function(){this._dynamic=null;}});})();(function(){var j="/",i="0",h="qx/static",g="http://",f="https://",e="file://",d="qx.util.AliasManager",c="singleton",b=".",a="static";qx.Class.define(d,{type:c,extend:qx.util.ValueManager,construct:function(){qx.util.ValueManager.call(this);this.__gF={};this.add(a,h);},members:{__gF:null,_preprocess:function(k){var n=this._getDynamic();if(n[k]===false){return k;}else if(n[k]===undefined){if(k.charAt(0)===j||k.charAt(0)===b||k.indexOf(g)===0||k.indexOf(f)===i||k.indexOf(e)===0){n[k]=false;return k;}if(this.__gF[k]){return this.__gF[k];}var m=k.substring(0,k.indexOf(j));var l=this.__gF[m];if(l!==undefined){n[k]=l+k.substring(m.length);}}return k;},add:function(o,p){this.__gF[o]=p;var r=this._getDynamic();for(var q in r){if(q.substring(0,q.indexOf(j))===o){r[q]=p+q.substring(o.length);}}},remove:function(s){delete this.__gF[s];},resolve:function(t){var u=this._getDynamic();if(t!=null){t=this._preprocess(t);}return u[t]||t;}},destruct:function(){this.__gF=null;}});})();(function(){var c="none",b="qx.html.Decorator",a="absolute";qx.Class.define(b,{extend:qx.html.Element,construct:function(d,e){var f={position:a,top:0,left:0};if(qx.bom.client.Feature.CSS_POINTER_EVENTS){f.pointerEvents=c;}qx.html.Element.call(this,null,f);this.__ks=d;this.__kt=e||d.toHashCode();this.useMarkup(d.getMarkup());},members:{__kt:null,__ks:null,getId:function(){return this.__kt;},getDecorator:function(){return this.__ks;},resize:function(g,h){this.__ks.resize(this.getDomElement(),g,h);},tint:function(i){this.__ks.tint(this.getDomElement(),i);},getInsets:function(){return this.__ks.getInsets();}},destruct:function(){this.__ks=null;}});})();(function(){var f="blur",e="focus",d="input",c="load",b="qx.ui.core.EventHandler",a="activate";qx.Class.define(b,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(){qx.core.Object.call(this);this.__em=qx.event.Registration.getManager(window);},statics:{PRIORITY:qx.event.Registration.PRIORITY_FIRST,SUPPORTED_TYPES:{mousemove:1,mouseover:1,mouseout:1,mousedown:1,mouseup:1,click:1,dblclick:1,contextmenu:1,mousewheel:1,keyup:1,keydown:1,keypress:1,keyinput:1,capture:1,losecapture:1,focusin:1,focusout:1,focus:1,blur:1,activate:1,deactivate:1,appear:1,disappear:1,dragstart:1,dragend:1,dragover:1,dragleave:1,drop:1,drag:1,dragchange:1,droprequest:1,touchstart:1,touchend:1,touchmove:1,touchcancel:1,tap:1,swipe:1},IGNORE_CAN_HANDLE:false},members:{__em:null,__en:{focusin:1,focusout:1,focus:1,blur:1},__eo:{mouseover:1,mouseout:1,appear:1,disappear:1},canHandleEvent:function(g,h){return g instanceof qx.ui.core.Widget;},_dispatchEvent:function(j){var p=j.getTarget();var o=qx.ui.core.Widget.getWidgetByElement(p);var q=false;while(o&&o.isAnonymous()){var q=true;o=o.getLayoutParent();}if(o&&q&&j.getType()==a){o.getContainerElement().activate();}if(this.__en[j.getType()]){o=o&&o.getFocusTarget();if(!o){return;}}if(j.getRelatedTarget){var x=j.getRelatedTarget();var w=qx.ui.core.Widget.getWidgetByElement(x);while(w&&w.isAnonymous()){w=w.getLayoutParent();}if(w){if(this.__en[j.getType()]){w=w.getFocusTarget();}if(w===o){return;}}}var s=j.getCurrentTarget();var u=qx.ui.core.Widget.getWidgetByElement(s);if(!u||u.isAnonymous()){return;}if(this.__en[j.getType()]){u=u.getFocusTarget();}var v=j.getType();if(!u||!(u.isEnabled()||this.__eo[v])){return;}var k=j.getEventPhase()==qx.event.type.Event.CAPTURING_PHASE;var r=this.__em.getListeners(u,v,k);if(!r||r.length===0){return;}var m=qx.event.Pool.getInstance().getObject(j.constructor);j.clone(m);m.setTarget(o);m.setRelatedTarget(w||null);m.setCurrentTarget(u);var y=j.getOriginalTarget();if(y){var n=qx.ui.core.Widget.getWidgetByElement(y);while(n&&n.isAnonymous()){n=n.getLayoutParent();}m.setOriginalTarget(n);}else{m.setOriginalTarget(p);}for(var i=0,l=r.length;i<l;i++){var t=r[i].context||u;r[i].handler.call(t,m);}if(m.getPropagationStopped()){j.stopPropagation();}if(m.getDefaultPrevented()){j.preventDefault();}qx.event.Pool.getInstance().poolObject(m);},registerEvent:function(z,A,B){var C;if(A===e||A===f){C=z.getFocusElement();}else if(A===c||A===d){C=z.getContentElement();}else{C=z.getContainerElement();}if(C){C.addListener(A,this._dispatchEvent,this,B);}},unregisterEvent:function(D,E,F){var G;if(E===e||E===f){G=D.getFocusElement();}else if(E===c||E===d){G=D.getContentElement();}else{G=D.getContainerElement();}if(G){G.removeListener(E,this._dispatchEvent,this,F);}}},destruct:function(){this.__em=null;},defer:function(H){qx.event.Registration.addHandler(H);}});})();(function(){var i="",h="/",g="mshtml",f="qx.client",e="//",d="?",c="string",b="qx.util.ResourceManager",a="singleton";qx.Class.define(b,{extend:qx.core.Object,type:a,statics:{__co:qx.$$resources||{},__cp:{}},members:{has:function(j){return !!this.self(arguments).__co[j];},getData:function(k){return this.self(arguments).__co[k]||null;},getImageWidth:function(l){var m=this.self(arguments).__co[l];return m?m[0]:null;},getImageHeight:function(n){var o=this.self(arguments).__co[n];return o?o[1]:null;},getImageFormat:function(p){var q=this.self(arguments).__co[p];return q?q[2]:null;},isClippedImage:function(r){var s=this.self(arguments).__co[r];return s&&s.length>4;},toUri:function(t){if(t==null){return t;}var u=this.self(arguments).__co[t];if(!u){return t;}if(typeof u===c){var w=u;}else{var w=u[3];if(!w){return t;}}var v=i;if(qx.core.Variant.isSet(f,g)&&qx.bom.client.Feature.SSL){v=this.self(arguments).__cp[w];}return v+qx.$$libraries[w].resourceUri+h+t;}},defer:function(x){if(qx.core.Variant.isSet(f,g)){if(qx.bom.client.Feature.SSL){for(var B in qx.$$libraries){var z;if(qx.$$libraries[B].resourceUri){z=qx.$$libraries[B].resourceUri;}else{x.__cp[B]=i;continue;}if(z.match(/^\/\//)!=null){x.__cp[B]=window.location.protocol;}else if(z.match(/^\//)!=null){x.__cp[B]=window.location.protocol+e+window.location.host;}else if(z.match(/^\.\//)!=null){var y=document.URL;x.__cp[B]=y.substring(0,y.lastIndexOf(h)+1);}else if(z.match(/^http/)!=null){x.__cp[B]=i;}else{var C=window.location.href.indexOf(d);var A;if(C==-1){A=window.location.href;}else{A=window.location.href.substring(0,C);}x.__cp[B]=A.substring(0,A.lastIndexOf(h)+1);}}}}}});})();(function(){var c="qx.bom.client.Locale",b="-",a="";qx.Class.define(c,{statics:{LOCALE:"",VARIANT:"",__lD:function(){var d=(navigator.userLanguage||navigator.language).toLowerCase();var f=a;var e=d.indexOf(b);if(e!=-1){f=d.substr(e+1);d=d.substr(0,e);}this.LOCALE=d;this.VARIANT=f;}},defer:function(g){g.__lD();}});})();(function(){var t="",s='indexOf',r='slice',q='concat',p='toLocaleLowerCase',o="qx.type.BaseString",n='match',m='toLocaleUpperCase',k='search',j='replace',c='toLowerCase',h='charCodeAt',f='split',b='substring',a='lastIndexOf',e='substr',d='toUpperCase',g='charAt';qx.Class.define(o,{extend:Object,construct:function(u){var u=u||t;this.__mc=u;this.length=u.length;},members:{$$isString:true,length:0,__mc:null,toString:function(){return this.__mc;},charAt:null,valueOf:null,charCodeAt:null,concat:null,indexOf:null,lastIndexOf:null,match:null,replace:null,search:null,slice:null,split:null,substr:null,substring:null,toLowerCase:null,toUpperCase:null,toHashCode:function(){return qx.core.ObjectRegistry.toHashCode(this);},toLocaleLowerCase:null,toLocaleUpperCase:null,base:function(v,w){return qx.core.Object.prototype.base.apply(this,arguments);}},defer:function(x,y){{};var z=[g,h,q,s,a,n,j,k,r,f,e,b,c,d,p,m];y.valueOf=y.toString;if(new x(t).valueOf()==null){delete y.valueOf;}for(var i=0,l=z.length;i<l;i++){y[z[i]]=String.prototype[z[i]];}}});})();(function(){var a="qx.locale.LocalizedString";qx.Class.define(a,{extend:qx.type.BaseString,construct:function(b,c,d){qx.type.BaseString.call(this,b);this.__ep=c;this.__eq=d;},members:{__ep:null,__eq:null,translate:function(){return qx.locale.Manager.getInstance().translate(this.__ep,this.__eq);}}});})();(function(){var k="_",j="",h="_applyLocale",g="changeLocale",f="C",e="qx.dynlocale",d="on",c="qx.locale.Manager",b="String",a="singleton";qx.Class.define(c,{type:a,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__jf=qx.$$translations||{};this.__jg=qx.$$locales||{};var n=qx.bom.client.Locale;var l=n.LOCALE;var m=n.VARIANT;if(m!==j){l+=k+m;}this.__jh=l;this.setLocale(l||this.__ji);},statics:{tr:function(o,p){var q=qx.lang.Array.fromArguments(arguments);q.splice(0,1);return qx.locale.Manager.getInstance().translate(o,q);},trn:function(r,s,t,u){var v=qx.lang.Array.fromArguments(arguments);v.splice(0,3);if(t!=1){return qx.locale.Manager.getInstance().translate(s,v);}else{return qx.locale.Manager.getInstance().translate(r,v);}},trc:function(w,x,y){var z=qx.lang.Array.fromArguments(arguments);z.splice(0,2);return qx.locale.Manager.getInstance().translate(x,z);},marktr:function(A){return A;}},properties:{locale:{check:b,nullable:true,apply:h,event:g}},members:{__ji:f,__jj:null,__jk:null,__jf:null,__jg:null,__jh:null,getLanguage:function(){return this.__jk;},getTerritory:function(){return this.getLocale().split(k)[1]||j;},getAvailableLocales:function(){var C=[];for(var B in this.__jg){if(B!=this.__ji){C.push(B);}}return C;},__jl:function(D){var F;var E=D.indexOf(k);if(E==-1){F=D;}else{F=D.substring(0,E);}return F;},_applyLocale:function(G,H){{};this.__jj=G;this.__jk=this.__jl(G);},addTranslation:function(I,J){var K=this.__jf;if(K[I]){for(var L in J){K[I][L]=J[L];}}else{K[I]=J;}},addLocale:function(M,N){var O=this.__jg;if(O[M]){for(var P in N){O[M][P]=N[P];}}else{O[M]=N;}},translate:function(Q,R,S){var T=this.__jf;return this.__jm(T,Q,R,S);},localize:function(U,V,W){var X=this.__jg;return this.__jm(X,U,V,W);},__jm:function(Y,ba,bb,bc){var bd;if(!Y){return ba;}if(bc){var bf=this.__jl(bc);}else{bc=this.__jj;bf=this.__jk;}if(!bd&&Y[bc]){bd=Y[bc][ba];}if(!bd&&Y[bf]){bd=Y[bf][ba];}if(!bd&&Y[this.__ji]){bd=Y[this.__ji][ba];}if(!bd){bd=ba;}if(bb.length>0){var be=[];for(var i=0;i<bb.length;i++){var bg=bb[i];if(bg&&bg.translate){be[i]=bg.translate();}else{be[i]=bg;}}bd=qx.lang.String.format(bd,be);}if(qx.core.Variant.isSet(e,d)){bd=new qx.locale.LocalizedString(bd,ba,bb);}return bd;}},destruct:function(){this.__jf=this.__jg=null;}});})();(function(){var k="px",j="qx.client",i="div",h="img",g="",f="no-repeat",d="scale-x",c="mshtml",b="scale",a="scale-y",G="qx/icon",F="repeat",E=".png",D="crop",C="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='",B='<div style="',A="repeat-y",z='<img src="',y="qx.bom.element.Decoration",x="', sizingMethod='",r="png",s="')",p='"></div>',q='"/>',n='" style="',o="none",l="webkit",m=" ",t="repeat-x",u="DXImageTransform.Microsoft.AlphaImageLoader",w="qx/static/blank.gif",v="absolute";qx.Class.define(y,{statics:{DEBUG:false,__hx:{},__hy:qx.core.Variant.isSet(j,c)&&qx.bom.client.Engine.VERSION<9,__hz:qx.core.Variant.select(j,{"mshtml":{"scale-x":true,"scale-y":true,"scale":true,"no-repeat":true},"default":null}),__hA:{"scale-x":h,"scale-y":h,"scale":h,"repeat":i,"no-repeat":i,"repeat-x":i,"repeat-y":i},update:function(H,I,J,K){var M=this.getTagName(J,I);if(M!=H.tagName.toLowerCase()){throw new Error("Image modification not possible because elements could not be replaced at runtime anymore!");}var N=this.getAttributes(I,J,K);if(M===h){H.src=N.src||qx.util.ResourceManager.getInstance().toUri(w);}if(H.style.backgroundPosition!=g&&N.style.backgroundPosition===undefined){N.style.backgroundPosition=null;}if(H.style.clip!=g&&N.style.clip===undefined){N.style.clip=null;}var L=qx.bom.element.Style;L.setStyles(H,N.style);if(this.__hy){try{H.filters[u].apply();}catch(e){}}},create:function(O,P,Q){var R=this.getTagName(P,O);var T=this.getAttributes(O,P,Q);var S=qx.bom.element.Style.compile(T.style);if(R===h){return z+T.src+n+S+q;}else{return B+S+p;}},getTagName:function(U,V){if(qx.core.Variant.isSet(j,c)){if(V&&this.__hy&&this.__hz[U]&&qx.lang.String.endsWith(V,E)){return i;}}return this.__hA[U];},getAttributes:function(W,X,Y){if(!Y){Y={};}if(!Y.position){Y.position=v;}if(qx.core.Variant.isSet(j,c)){Y.fontSize=0;Y.lineHeight=0;}else if(qx.core.Variant.isSet(j,l)){Y.WebkitUserDrag=o;}var bb=qx.util.ResourceManager.getInstance().getImageFormat(W)||qx.io.ImageLoader.getFormat(W);{};var ba;if(this.__hy&&this.__hz[X]&&bb===r){ba=this.__hD(Y,X,W);}else{if(X===b){ba=this.__hE(Y,X,W);}else if(X===d||X===a){ba=this.__hF(Y,X,W);}else{ba=this.__hI(Y,X,W);}}return ba;},__hB:function(bc,bd,be){if(bc.width==null&&bd!=null){bc.width=bd+k;}if(bc.height==null&&be!=null){bc.height=be+k;}return bc;},__hC:function(bf){var bh=qx.util.ResourceManager.getInstance().getImageWidth(bf)||qx.io.ImageLoader.getWidth(bf);var bi=qx.util.ResourceManager.getInstance().getImageHeight(bf)||qx.io.ImageLoader.getHeight(bf);return {width:bh,height:bi};},__hD:function(bj,bk,bl){var bo=this.__hC(bl);bj=this.__hB(bj,bo.width,bo.height);var bn=bk==f?D:b;var bm=C+qx.util.ResourceManager.getInstance().toUri(bl)+x+bn+s;bj.filter=bm;bj.backgroundImage=bj.backgroundRepeat=g;return {style:bj};},__hE:function(bp,bq,br){var bs=qx.util.ResourceManager.getInstance().toUri(br);var bt=this.__hC(br);bp=this.__hB(bp,bt.width,bt.height);return {src:bs,style:bp};},__hF:function(bu,bv,bw){var bA=qx.util.ResourceManager.getInstance();var bz=bA.isClippedImage(bw);var bB=this.__hC(bw);if(bz){var by=bA.getData(bw);var bx=bA.toUri(by[4]);if(bv===d){bu=this.__hG(bu,by,bB.height);}else{bu=this.__hH(bu,by,bB.width);}return {src:bx,style:bu};}else{{};if(bv==d){bu.height=bB.height==null?null:bB.height+k;}else if(bv==a){bu.width=bB.width==null?null:bB.width+k;}var bx=bA.toUri(bw);return {src:bx,style:bu};}},__hG:function(bC,bD,bE){var bF=qx.util.ResourceManager.getInstance().getImageHeight(bD[4]);bC.clip={top:-bD[6],height:bE};bC.height=bF+k;if(bC.top!=null){bC.top=(parseInt(bC.top,10)+bD[6])+k;}else if(bC.bottom!=null){bC.bottom=(parseInt(bC.bottom,10)+bE-bF-bD[6])+k;}return bC;},__hH:function(bG,bH,bI){var bJ=qx.util.ResourceManager.getInstance().getImageWidth(bH[4]);bG.clip={left:-bH[5],width:bI};bG.width=bJ+k;if(bG.left!=null){bG.left=(parseInt(bG.left,10)+bH[5])+k;}else if(bG.right!=null){bG.right=(parseInt(bG.right,10)+bI-bJ-bH[5])+k;}return bG;},__hI:function(bK,bL,bM){var bR=qx.util.ResourceManager.getInstance().isClippedImage(bM);var bQ=this.__hC(bM);if(bR&&bL!==F){var bP=qx.util.ResourceManager.getInstance().getData(bM);var bO=qx.bom.element.Background.getStyles(bP[4],bL,bP[5],bP[6]);for(var bN in bO){bK[bN]=bO[bN];}if(bQ.width!=null&&bK.width==null&&(bL==A||bL===f)){bK.width=bQ.width+k;}if(bQ.height!=null&&bK.height==null&&(bL==t||bL===f)){bK.height=bQ.height+k;}return {style:bK};}else{{};bK=this.__hB(bK,bQ.width,bQ.height);bK=this.__hJ(bK,bM,bL);return {style:bK};}},__hJ:function(bS,bT,bU){var top=null;var bY=null;if(bS.backgroundPosition){var bV=bS.backgroundPosition.split(m);bY=parseInt(bV[0],10);if(isNaN(bY)){bY=bV[0];}top=parseInt(bV[1],10);if(isNaN(top)){top=bV[1];}}var bX=qx.bom.element.Background.getStyles(bT,bU,bY,top);for(var bW in bX){bS[bW]=bX[bW];}if(bS.filter){bS.filter=g;}return bS;},__hK:function(ca){if(this.DEBUG&&qx.util.ResourceManager.getInstance().has(ca)&&ca.indexOf(G)==-1){if(!this.__hx[ca]){qx.log.Logger.debug("Potential clipped image candidate: "+ca);this.__hx[ca]=true;}}},isAlphaImageLoaderEnabled:qx.core.Variant.select(j,{"mshtml":function(){return qx.bom.element.Decoration.__hy;},"default":function(){return false;}})}});})();(function(){var c="qx.client",b="load",a="qx.io.ImageLoader";qx.Bootstrap.define(a,{statics:{__lo:{},__lp:{width:null,height:null},__lq:/\.(png|gif|jpg|jpeg|bmp)\b/i,isLoaded:function(d){var e=this.__lo[d];return !!(e&&e.loaded);},isFailed:function(f){var g=this.__lo[f];return !!(g&&g.failed);},isLoading:function(h){var j=this.__lo[h];return !!(j&&j.loading);},getFormat:function(k){var m=this.__lo[k];return m?m.format:null;},getSize:function(n){var o=this.__lo[n];return o?{width:o.width,height:o.height}:this.__lp;},getWidth:function(p){var q=this.__lo[p];return q?q.width:null;},getHeight:function(r){var s=this.__lo[r];return s?s.height:null;},load:function(t,u,v){var w=this.__lo[t];if(!w){w=this.__lo[t]={};}if(u&&!v){v=window;}if(w.loaded||w.loading||w.failed){if(u){if(w.loading){w.callbacks.push(u,v);}else{u.call(v,t,w);}}}else{w.loading=true;w.callbacks=[];if(u){w.callbacks.push(u,v);}var y=new Image();var x=qx.lang.Function.listener(this.__lr,this,y,t);y.onload=x;y.onerror=x;y.src=t;w.element=y;}},abort:function(z){var A=this.__lo[z];if(A&&!A.loaded){A.aborted=true;var C=A.callbacks;var B=A.element;B.onload=B.onerror=null;delete A.callbacks;delete A.element;delete A.loading;for(var i=0,l=C.length;i<l;i+=2){C[i].call(C[i+1],z,A);}}this.__lo[z]=null;},__lr:qx.event.GlobalError.observeMethod(function(event,D,E){var F=this.__lo[E];if(event.type===b){F.loaded=true;F.width=this.__ls(D);F.height=this.__lt(D);var G=this.__lq.exec(E);if(G!=null){F.format=G[1];}}else{F.failed=true;}D.onload=D.onerror=null;var H=F.callbacks;delete F.loading;delete F.callbacks;delete F.element;for(var i=0,l=H.length;i<l;i+=2){H[i].call(H[i+1],E,F);}}),__ls:qx.core.Variant.select(c,{"gecko":function(I){return I.naturalWidth;},"default":function(J){return J.width;}}),__lt:qx.core.Variant.select(c,{"gecko":function(K){return K.naturalHeight;},"default":function(L){return L.height;}})}});})();(function(){var m="number",l="0",k="px",j=";",i="background-image:url(",h=");",g="",f=")",e="background-repeat:",d=" ",a="qx.bom.element.Background",c="url(",b="background-position:";qx.Class.define(a,{statics:{__da:[i,null,h,b,null,j,e,null,j],__db:{backgroundImage:null,backgroundPosition:null,backgroundRepeat:null},__dc:function(n,top){var o=qx.bom.client.Engine;if(o.GECKO&&o.VERSION<1.9&&n==top&&typeof n==m){top+=0.01;}if(n){var p=(typeof n==m)?n+k:n;}else{p=l;}if(top){var q=(typeof top==m)?top+k:top;}else{q=l;}return p+d+q;},compile:function(r,s,t,top){var u=this.__dc(t,top);var v=qx.util.ResourceManager.getInstance().toUri(r);var w=this.__da;w[1]=v;w[4]=u;w[7]=s;return w.join(g);},getStyles:function(x,y,z,top){if(!x){return this.__db;}var A=this.__dc(z,top);var B=qx.util.ResourceManager.getInstance().toUri(x);var C={backgroundPosition:A,backgroundImage:c+B+f};if(y!=null){C.backgroundRepeat=y;}return C;},set:function(D,E,F,G,top){var H=this.getStyles(E,F,G,top);for(var I in H){D.style[I]=H[I];}}}});})();(function(){var j="source",i="scale",h="no-repeat",g="qx.client",f="mshtml",e="webkit",d="backgroundImage",c="div",b="qx.html.Image",a="qx/static/blank.gif";qx.Class.define(b,{extend:qx.html.Element,members:{tagNameHint:null,_applyProperty:function(name,k){qx.html.Element.prototype._applyProperty.call(this,name,k);if(name===j){var o=this.getDomElement();var l=this.getAllStyles();if(this.getNodeName()==c&&this.getStyle(d)){l.backgroundPosition=null;l.backgroundRepeat=null;}var m=this._getProperty(j);var n=this._getProperty(i);var p=n?i:h;if(m!=null){qx.bom.element.Decoration.update(o,m,p,l);}}},_createDomElement:function(){var r=this._getProperty(i);var s=r?i:h;if(qx.core.Variant.isSet(g,f)){var q=this._getProperty(j);if(this.tagNameHint!=null){this.setNodeName(this.tagNameHint);}else{this.setNodeName(qx.bom.element.Decoration.getTagName(s,q));}}else{this.setNodeName(qx.bom.element.Decoration.getTagName(s));}return qx.html.Element.prototype._createDomElement.call(this);},_copyData:function(t){return qx.html.Element.prototype._copyData.call(this,true);},setSource:function(u){this._setProperty(j,u);return this;},getSource:function(){return this._getProperty(j);},resetSource:function(){if(qx.core.Variant.isSet(g,e)){this._setProperty(j,qx.util.ResourceManager.getInstance().toUri(a));}else{this._removeProperty(j,true);}return this;},setScale:function(v){this._setProperty(i,v);return this;},getScale:function(){return this._getProperty(i);}}});})();(function(){var f="_applyTheme",e="qx.theme.manager.Color",d="Theme",c="changeTheme",b="string",a="singleton";qx.Class.define(e,{type:a,extend:qx.util.ValueManager,properties:{theme:{check:d,nullable:true,apply:f,event:c}},members:{_applyTheme:function(g){var h={};if(g){var i=g.colors;var j=qx.util.ColorUtil;var k;for(var l in i){k=i[l];if(typeof k===b){if(!j.isCssString(k)){throw new Error("Could not parse color: "+k);}}else if(k instanceof Array){k=j.rgbToRgbString(k);}else{throw new Error("Could not parse color: "+k);}h[l]=k;}}this._setDynamic(h);},resolve:function(m){var p=this._dynamic;var n=p[m];if(n){return n;}var o=this.getTheme();if(o!==null&&o.colors[m]){return p[m]=o.colors[m];}return m;},isDynamic:function(q){var s=this._dynamic;if(q&&(s[q]!==undefined)){return true;}var r=this.getTheme();if(r!==null&&q&&(r.colors[q]!==undefined)){s[q]=r.colors[q];return true;}return false;}}});})();(function(){var h=",",e="rgb(",d=")",c="qx.theme.manager.Color",a="qx.util.ColorUtil";qx.Class.define(a,{statics:{REGEXP:{hex3:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,rgb:/^rgb\(\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*\)$/,rgba:/^rgba\(\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*,\s*([0-9]{1,3}\.{0,1}[0-9]*)\s*\)$/},SYSTEM:{activeborder:true,activecaption:true,appworkspace:true,background:true,buttonface:true,buttonhighlight:true,buttonshadow:true,buttontext:true,captiontext:true,graytext:true,highlight:true,highlighttext:true,inactiveborder:true,inactivecaption:true,inactivecaptiontext:true,infobackground:true,infotext:true,menu:true,menutext:true,scrollbar:true,threeddarkshadow:true,threedface:true,threedhighlight:true,threedlightshadow:true,threedshadow:true,window:true,windowframe:true,windowtext:true},NAMED:{black:[0,0,0],silver:[192,192,192],gray:[128,128,128],white:[255,255,255],maroon:[128,0,0],red:[255,0,0],purple:[128,0,128],fuchsia:[255,0,255],green:[0,128,0],lime:[0,255,0],olive:[128,128,0],yellow:[255,255,0],navy:[0,0,128],blue:[0,0,255],teal:[0,128,128],aqua:[0,255,255],transparent:[-1,-1,-1],magenta:[255,0,255],orange:[255,165,0],brown:[165,42,42]},isNamedColor:function(j){return this.NAMED[j]!==undefined;},isSystemColor:function(k){return this.SYSTEM[k]!==undefined;},supportsThemes:function(){return qx.Class.isDefined(c);},isThemedColor:function(l){if(!this.supportsThemes()){return false;}return qx.theme.manager.Color.getInstance().isDynamic(l);},stringToRgb:function(m){if(this.supportsThemes()&&this.isThemedColor(m)){var m=qx.theme.manager.Color.getInstance().resolveDynamic(m);}if(this.isNamedColor(m)){return this.NAMED[m];}else if(this.isSystemColor(m)){throw new Error("Could not convert system colors to RGB: "+m);}else if(this.isRgbString(m)){return this.__gB();}else if(this.isHex3String(m)){return this.__gD();}else if(this.isHex6String(m)){return this.__gE();}throw new Error("Could not parse color: "+m);},cssStringToRgb:function(n){if(this.isNamedColor(n)){return this.NAMED[n];}else if(this.isSystemColor(n)){throw new Error("Could not convert system colors to RGB: "+n);}else if(this.isRgbString(n)){return this.__gB();}else if(this.isRgbaString(n)){return this.__gC();}else if(this.isHex3String(n)){return this.__gD();}else if(this.isHex6String(n)){return this.__gE();}throw new Error("Could not parse color: "+n);},stringToRgbString:function(o){return this.rgbToRgbString(this.stringToRgb(o));},rgbToRgbString:function(s){return e+s[0]+h+s[1]+h+s[2]+d;},rgbToHexString:function(u){return (qx.lang.String.pad(u[0].toString(16).toUpperCase(),2)+qx.lang.String.pad(u[1].toString(16).toUpperCase(),2)+qx.lang.String.pad(u[2].toString(16).toUpperCase(),2));},isValidPropertyValue:function(v){return this.isThemedColor(v)||this.isNamedColor(v)||this.isHex3String(v)||this.isHex6String(v)||this.isRgbString(v);},isCssString:function(w){return this.isSystemColor(w)||this.isNamedColor(w)||this.isHex3String(w)||this.isHex6String(w)||this.isRgbString(w);},isHex3String:function(x){return this.REGEXP.hex3.test(x);},isHex6String:function(y){return this.REGEXP.hex6.test(y);},isRgbString:function(z){return this.REGEXP.rgb.test(z);},isRgbaString:function(A){return this.REGEXP.rgba.test(A);},__gB:function(){var D=parseInt(RegExp.$1,10);var C=parseInt(RegExp.$2,10);var B=parseInt(RegExp.$3,10);return [D,C,B];},__gC:function(){var G=parseInt(RegExp.$1,10);var F=parseInt(RegExp.$2,10);var E=parseInt(RegExp.$3,10);return [G,F,E];},__gD:function(){var J=parseInt(RegExp.$1,16)*17;var I=parseInt(RegExp.$2,16)*17;var H=parseInt(RegExp.$3,16)*17;return [J,I,H];},__gE:function(){var M=(parseInt(RegExp.$1,16)*16)+parseInt(RegExp.$2,16);var L=(parseInt(RegExp.$3,16)*16)+parseInt(RegExp.$4,16);var K=(parseInt(RegExp.$5,16)*16)+parseInt(RegExp.$6,16);return [M,L,K];},hex3StringToRgb:function(N){if(this.isHex3String(N)){return this.__gD(N);}throw new Error("Invalid hex3 value: "+N);},hex6StringToRgb:function(O){if(this.isHex6String(O)){return this.__gE(O);}throw new Error("Invalid hex6 value: "+O);},hexStringToRgb:function(P){if(this.isHex3String(P)){return this.__gD(P);}if(this.isHex6String(P)){return this.__gE(P);}throw new Error("Invalid hex value: "+P);},rgbToHsb:function(Q){var S,T,V;var bc=Q[0];var Y=Q[1];var R=Q[2];var bb=(bc>Y)?bc:Y;if(R>bb){bb=R;}var U=(bc<Y)?bc:Y;if(R<U){U=R;}V=bb/255.0;if(bb!=0){T=(bb-U)/bb;}else{T=0;}if(T==0){S=0;}else{var X=(bb-bc)/(bb-U);var ba=(bb-Y)/(bb-U);var W=(bb-R)/(bb-U);if(bc==bb){S=W-ba;}else if(Y==bb){S=2.0+X-W;}else{S=4.0+ba-X;}S=S/6.0;if(S<0){S=S+1.0;}}return [Math.round(S*360),Math.round(T*100),Math.round(V*100)];},hsbToRgb:function(bd){var i,f,p,q,t;var be=bd[0]/360;var bf=bd[1]/100;var bg=bd[2]/100;if(be>=1.0){be%=1.0;}if(bf>1.0){bf=1.0;}if(bg>1.0){bg=1.0;}var bh=Math.floor(255*bg);var bi={};if(bf==0.0){bi.red=bi.green=bi.blue=bh;}else{be*=6.0;i=Math.floor(be);f=be-i;p=Math.floor(bh*(1.0-bf));q=Math.floor(bh*(1.0-(bf*f)));t=Math.floor(bh*(1.0-(bf*(1.0-f))));switch(i){case 0:bi.red=bh;bi.green=t;bi.blue=p;break;case 1:bi.red=q;bi.green=bh;bi.blue=p;break;case 2:bi.red=p;bi.green=bh;bi.blue=t;break;case 3:bi.red=p;bi.green=q;bi.blue=bh;break;case 4:bi.red=t;bi.green=p;bi.blue=bh;break;case 5:bi.red=bh;bi.green=p;bi.blue=q;break;}}return [bi.red,bi.green,bi.blue];},randomColor:function(){var r=Math.round(Math.random()*255);var g=Math.round(Math.random()*255);var b=Math.round(Math.random()*255);return this.rgbToRgbString([r,g,b]);}}});})();(function(){var h="string",g="_applyTheme",f="qx.theme.manager.Appearance",e=":",d="Theme",c="changeTheme",b="/",a="singleton";qx.Class.define(f,{type:a,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__dL={};this.__dM={};},properties:{theme:{check:d,nullable:true,event:c,apply:g}},members:{__dN:{},__dL:null,__dM:null,_applyTheme:function(j,k){this.__dM={};this.__dL={};},__dO:function(l,m,n){var s=m.appearances;var v=s[l];if(!v){var w=b;var p=[];var u=l.split(w);var t;while(!v&&u.length>0){p.unshift(u.pop());var q=u.join(w);v=s[q];if(v){t=v.alias||v;if(typeof t===h){var r=t+w+p.join(w);return this.__dO(r,m,n);}}}for(var i=0;i<p.length-1;i++){p.shift();var q=p.join(w);var o=this.__dO(q,m);if(o){return o;}}if(n!=null){return this.__dO(n,m);}return null;}else if(typeof v===h){return this.__dO(v,m,n);}else if(v.include&&!v.style){return this.__dO(v.include,m,n);}return l;},styleFrom:function(x,y,z,A){if(!z){z=this.getTheme();}var G=this.__dM;var B=G[x];if(!B){B=G[x]=this.__dO(x,z,A);}var L=z.appearances[B];if(!L){this.warn("Missing appearance: "+x);return null;}if(!L.style){return null;}var M=B;if(y){var N=L.$$bits;if(!N){N=L.$$bits={};L.$$length=0;}var E=0;for(var H in y){if(!y[H]){continue;}if(N[H]==null){N[H]=1<<L.$$length++;}E+=N[H];}if(E>0){M+=e+E;}}var F=this.__dL;if(F[M]!==undefined){return F[M];}if(!y){y=this.__dN;}var J;if(L.include||L.base){var D=L.style(y);var C;if(L.include){C=this.styleFrom(L.include,y,z,A);}J={};if(L.base){var I=this.styleFrom(B,y,L.base,A);if(L.include){for(var K in I){if(!C.hasOwnProperty(K)&&!D.hasOwnProperty(K)){J[K]=I[K];}}}else{for(var K in I){if(!D.hasOwnProperty(K)){J[K]=I[K];}}}}if(L.include){for(var K in C){if(!D.hasOwnProperty(K)){J[K]=C[K];}}}for(var K in D){J[K]=D[K];}}else{J=L.style(y);}return F[M]=J||null;}},destruct:function(){this.__dL=this.__dM=null;}});})();(function(){var j="nonScaled",i="scaled",h="alphaScaled",g=".png",f="qx.client",e="div",d="replacement",c="qx.event.type.Event",b="hidden",a="Boolean",y="px",x="scale",w="changeSource",v="__fP",u="qx.ui.basic.Image",t="loaded",s="-disabled.$1",r="loadingFailed",q="String",p="_applySource",n="img",o="image",l="mshtml",m="_applyScale",k="no-repeat";qx.Class.define(u,{extend:qx.ui.core.Widget,construct:function(z){this.__fP={};qx.ui.core.Widget.call(this);if(z){this.setSource(z);}},properties:{source:{check:q,init:null,nullable:true,event:w,apply:p,themeable:true},scale:{check:a,init:false,themeable:true,apply:m},appearance:{refine:true,init:o},allowShrinkX:{refine:true,init:false},allowShrinkY:{refine:true,init:false},allowGrowX:{refine:true,init:false},allowGrowY:{refine:true,init:false}},events:{loadingFailed:c,loaded:c},members:{__fQ:null,__fR:null,__fS:null,__fP:null,getContentElement:function(){return this.__fW();},_createContentElement:function(){return this.__fW();},_getContentHint:function(){return {width:this.__fQ||0,height:this.__fR||0};},_applyEnabled:function(A,B){qx.ui.core.Widget.prototype._applyEnabled.call(this,A,B);if(this.getSource()){this._styleSource();}},_applySource:function(C){this._styleSource();},_applyScale:function(D){this._styleSource();},__fT:function(E){this.__fS=E;},__fU:function(){if(this.__fS==null){var G=this.getSource();var F=false;if(G!=null){F=qx.lang.String.endsWith(G,g);}if(this.getScale()&&F&&qx.bom.element.Decoration.isAlphaImageLoaderEnabled()){this.__fS=h;}else if(this.getScale()){this.__fS=i;}else{this.__fS=j;}}return this.__fS;},__fV:function(H){var I;var J;if(H==h){I=true;J=e;}else if(H==j){I=false;J=e;}else{I=true;J=n;}var K=new qx.html.Image(J);K.setScale(I);K.setStyles({"overflowX":b,"overflowY":b});return K;},__fW:function(){var L=this.__fU();if(this.__fP[L]==null){this.__fP[L]=this.__fV(L);}return this.__fP[L];},_styleSource:function(){var M=qx.util.AliasManager.getInstance().resolve(this.getSource());if(!M){this.getContentElement().resetSource();return;}this.__fX(M);if(qx.core.Variant.isSet(f,l)){var N=this.getScale()?x:k;this.getContentElement().tagNameHint=qx.bom.element.Decoration.getTagName(N,M);}if(qx.util.ResourceManager.getInstance().has(M)){this.__ga(this.getContentElement(),M);}else if(qx.io.ImageLoader.isLoaded(M)){this.__gb(this.getContentElement(),M);}else{this.__gc(this.getContentElement(),M);}},__fX:qx.core.Variant.select(f,{"mshtml":function(O){var Q=qx.bom.element.Decoration.isAlphaImageLoaderEnabled();var P=qx.lang.String.endsWith(O,g);if(Q&&P){if(this.getScale()&&this.__fU()!=h){this.__fT(h);}else if(!this.getScale()&&this.__fU()!=j){this.__fT(j);}}else{if(this.getScale()&&this.__fU()!=i){this.__fT(i);}else if(!this.getScale()&&this.__fU()!=j){this.__fT(j);}}this.__fY(this.__fW());},"default":function(R){if(this.getScale()&&this.__fU()!=i){this.__fT(i);}else if(!this.getScale()&&this.__fU(j)){this.__fT(j);}this.__fY(this.__fW());}}),__fY:function(S){var V=this.getContainerElement();var W=V.getChild(0);if(W!=S){if(W!=null){var Y=y;var T={};var U=this.getInnerSize();if(U!=null){T.width=U.width+Y;T.height=U.height+Y;}var X=this.getInsets();T.left=X.left+Y;T.top=X.top+Y;T.zIndex=10;S.setStyles(T,true);S.setSelectable(this.getSelectable());}V.removeAt(0);V.addAt(S,0);}},__ga:function(ba,bb){var bd=qx.util.ResourceManager.getInstance();if(!this.getEnabled()){var bc=bb.replace(/\.([a-z]+)$/,s);if(bd.has(bc)){bb=bc;this.addState(d);}else{this.removeState(d);}}if(ba.getSource()===bb){return;}ba.setSource(bb);this.__ge(bd.getImageWidth(bb),bd.getImageHeight(bb));},__gb:function(be,bf){var bh=qx.io.ImageLoader;be.setSource(bf);var bg=bh.getWidth(bf);var bi=bh.getHeight(bf);this.__ge(bg,bi);},__gc:function(bj,bk){var self;var bl=qx.io.ImageLoader;{};if(!bl.isFailed(bk)){bl.load(bk,this.__gd,this);}else{if(bj!=null){bj.resetSource();}}},__gd:function(bm,bn){if(this.$$disposed===true){return;}if(bm!==qx.util.AliasManager.getInstance().resolve(this.getSource())){return;}if(bn.failed){this.warn("Image could not be loaded: "+bm);this.fireEvent(r);}else{this.fireEvent(t);}this._styleSource();},__ge:function(bo,bp){if(bo!==this.__fQ||bp!==this.__fR){this.__fQ=bo;this.__fR=bp;qx.ui.core.queue.Layout.add(this);}}},destruct:function(){this._disposeMap(v);}});})();(function(){var j="Integer",i="interval",h="keep-align",g="disappear",f="best-fit",e="mouse",d="bottom-left",c="direct",b="Boolean",a="bottom-right",x="widget",w="qx.ui.core.MPlacement",v="left-top",u="offsetRight",t="shorthand",s="offsetLeft",r="top-left",q="appear",p="offsetBottom",o="top-right",m="offsetTop",n="right-bottom",k="right-top",l="left-bottom";qx.Mixin.define(w,{statics:{__iR:null,setVisibleElement:function(y){this.__iR=y;},getVisibleElement:function(){return this.__iR;}},properties:{position:{check:[r,o,d,a,v,l,k,n],init:d,themeable:true},placeMethod:{check:[x,e],init:e,themeable:true},domMove:{check:b,init:false},placementModeX:{check:[c,h,f],init:h,themeable:true},placementModeY:{check:[c,h,f],init:h,themeable:true},offsetLeft:{check:j,init:0,themeable:true},offsetTop:{check:j,init:0,themeable:true},offsetRight:{check:j,init:0,themeable:true},offsetBottom:{check:j,init:0,themeable:true},offset:{group:[m,u,p,s],mode:t,themeable:true}},members:{__iS:null,__iT:null,__iU:null,getLayoutLocation:function(z){var C,B,D,top;B=z.getBounds();D=B.left;top=B.top;var E=B;z=z.getLayoutParent();while(z&&!z.isRootWidget()){B=z.getBounds();D+=B.left;top+=B.top;C=z.getInsets();D+=C.left;top+=C.top;z=z.getLayoutParent();}if(z.isRootWidget()){var A=z.getContainerLocation();if(A){D+=A.left;top+=A.top;}}return {left:D,top:top,right:D+E.width,bottom:top+E.height};},moveTo:function(F,top){var H=qx.ui.core.MPlacement.getVisibleElement();if(H){var J=this.getBounds();var G=H.getContentLocation();if(J&&G){var K=top+J.height;var I=F+J.width;if((I>G.left&&F<G.right)&&(K>G.top&&top<G.bottom)){F=Math.max(G.left-J.width,0);}}}if(this.getDomMove()){this.setDomPosition(F,top);}else{this.setLayoutProperties({left:F,top:top});}},placeToWidget:function(L,M){if(M){this.__iV();this.__iS=qx.lang.Function.bind(this.placeToWidget,this,L,false);qx.event.Idle.getInstance().addListener(i,this.__iS);this.__iU=function(){this.__iV();};this.addListener(g,this.__iU,this);}var N=L.getContainerLocation()||this.getLayoutLocation(L);this.__iX(N);},__iV:function(){if(this.__iS){qx.event.Idle.getInstance().removeListener(i,this.__iS);this.__iS=null;}if(this.__iU){this.removeListener(g,this.__iU,this);this.__iU=null;}},placeToMouse:function(event){var P=event.getDocumentLeft();var top=event.getDocumentTop();var O={left:P,top:top,right:P,bottom:top};this.__iX(O);},placeToElement:function(Q,R){var location=qx.bom.element.Location.get(Q);var S={left:location.left,top:location.top,right:location.left+Q.offsetWidth,bottom:location.top+Q.offsetHeight};if(R){this.__iS=qx.lang.Function.bind(this.placeToElement,this,Q,false);qx.event.Idle.getInstance().addListener(i,this.__iS);this.addListener(g,function(){if(this.__iS){qx.event.Idle.getInstance().removeListener(i,this.__iS);this.__iS=null;}},this);}this.__iX(S);},placeToPoint:function(T){var U={left:T.left,top:T.top,right:T.left,bottom:T.top};this.__iX(U);},_getPlacementOffsets:function(){return {left:this.getOffsetLeft(),top:this.getOffsetTop(),right:this.getOffsetRight(),bottom:this.getOffsetBottom()};},__iW:function(V){var W=null;if(this._computePlacementSize){var W=this._computePlacementSize();}else if(this.isVisible()){var W=this.getBounds();}if(W==null){this.addListenerOnce(q,function(){this.__iW(V);},this);}else{V.call(this,W);}},__iX:function(X){this.__iW(function(Y){var ba=qx.util.placement.Placement.compute(Y,this.getLayoutParent().getBounds(),X,this._getPlacementOffsets(),this.getPosition(),this.getPlacementModeX(),this.getPlacementModeY());this.moveTo(ba.left,ba.top);});}},destruct:function(){this.__iV();}});})();(function(){var g="dragdrop-cursor",f="_applyAction",e="alias",d="qx.ui.core.DragDropCursor",c="move",b="singleton",a="copy";qx.Class.define(d,{extend:qx.ui.basic.Image,include:qx.ui.core.MPlacement,type:b,construct:function(){qx.ui.basic.Image.call(this);this.setZIndex(1e8);this.setDomMove(true);var h=this.getApplicationRoot();h.add(this,{left:-1000,top:-1000});},properties:{appearance:{refine:true,init:g},action:{check:[e,a,c],apply:f,nullable:true}},members:{_applyAction:function(i,j){if(j){this.removeState(j);}if(i){this.addState(i);}}}});})();(function(){var f="interval",e="Number",d="_applyTimeoutInterval",c="qx.event.type.Event",b="qx.event.Idle",a="singleton";qx.Class.define(b,{extend:qx.core.Object,type:a,construct:function(){qx.core.Object.call(this);var g=new qx.event.Timer(this.getTimeoutInterval());g.addListener(f,this._onInterval,this);g.start();this.__kM=g;},events:{"interval":c},properties:{timeoutInterval:{check:e,init:100,apply:d}},members:{__kM:null,_applyTimeoutInterval:function(h){this.__kM.setInterval(h);},_onInterval:function(){this.fireEvent(f);}},destruct:function(){if(this.__kM){this.__kM.stop();}this.__kM=null;}});})();(function(){var o="top",n="right",m="bottom",l="left",k="align-start",j="qx.util.placement.AbstractAxis",i="edge-start",h="align-end",g="edge-end",f="-",c="best-fit",e="qx.util.placement.Placement",d="keep-align",b="direct",a='__hM';qx.Class.define(e,{extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__hM=new qx.util.placement.DirectAxis();},properties:{axisX:{check:j},axisY:{check:j},edge:{check:[o,n,m,l],init:o},align:{check:[o,n,m,l],init:n}},statics:{__hN:null,compute:function(p,q,r,s,t,u,v){this.__hN=this.__hN||new qx.util.placement.Placement();var y=t.split(f);var x=y[0];var w=y[1];this.__hN.set({axisX:this.__hR(u),axisY:this.__hR(v),edge:x,align:w});return this.__hN.compute(p,q,r,s);},__hO:null,__hP:null,__hQ:null,__hR:function(z){switch(z){case b:this.__hO=this.__hO||new qx.util.placement.DirectAxis();return this.__hO;case d:this.__hP=this.__hP||new qx.util.placement.KeepAlignAxis();return this.__hP;case c:this.__hQ=this.__hQ||new qx.util.placement.BestFitAxis();return this.__hQ;default:throw new Error("Invalid 'mode' argument!'");}}},members:{__hM:null,compute:function(A,B,C,D){{};var E=this.getAxisX()||this.__hM;var G=E.computeStart(A.width,{start:C.left,end:C.right},{start:D.left,end:D.right},B.width,this.__hS());var F=this.getAxisY()||this.__hM;var top=F.computeStart(A.height,{start:C.top,end:C.bottom},{start:D.top,end:D.bottom},B.height,this.__hT());return {left:G,top:top};},__hS:function(){var I=this.getEdge();var H=this.getAlign();if(I==l){return i;}else if(I==n){return g;}else if(H==l){return k;}else if(H==n){return h;}},__hT:function(){var K=this.getEdge();var J=this.getAlign();if(K==o){return i;}else if(K==m){return g;}else if(J==o){return k;}else if(J==m){return h;}}},destruct:function(){this._disposeObjects(a);}});})();(function(){var e="edge-start",d="align-start",c="align-end",b="edge-end",a="qx.util.placement.AbstractAxis";qx.Class.define(a,{extend:qx.core.Object,members:{computeStart:function(f,g,h,i,j){throw new Error("abstract method call!");},_moveToEdgeAndAlign:function(k,l,m,n){switch(n){case e:return l.start-m.end-k;case b:return l.end+m.start;case d:return l.start+m.start;case c:return l.end-m.end-k;}},_isInRange:function(o,p,q){return o>=0&&o+p<=q;}}});})();(function(){var a="qx.util.placement.DirectAxis";qx.Class.define(a,{extend:qx.util.placement.AbstractAxis,members:{computeStart:function(b,c,d,e,f){return this._moveToEdgeAndAlign(b,c,d,f);}}});})();(function(){var c="qx.util.placement.KeepAlignAxis",b="edge-start",a="edge-end";qx.Class.define(c,{extend:qx.util.placement.AbstractAxis,members:{computeStart:function(d,e,f,g,h){var i=this._moveToEdgeAndAlign(d,e,f,h);var j,k;if(this._isInRange(i,d,g)){return i;}if(h==b||h==a){j=e.start-f.end;k=e.end+f.start;}else{j=e.end-f.end;k=e.start+f.start;}if(j>g-k){i=j-d;}else{i=k;}return i;}}});})();(function(){var a="qx.util.placement.BestFitAxis";qx.Class.define(a,{extend:qx.util.placement.AbstractAxis,members:{computeStart:function(b,c,d,e,f){var g=this._moveToEdgeAndAlign(b,c,d,f);if(this._isInRange(g,b,e)){return g;}if(g<0){g=Math.min(0,e-b);}if(g+b>e){g=Math.max(0,e-b);}return g;}}});})();(function(){var b="qx.ui.form.IRadioItem",a="qx.event.type.Data";qx.Interface.define(b,{events:{"changeValue":a},members:{setValue:function(c){},getValue:function(){},setGroup:function(d){this.assertInstance(d,qx.ui.form.RadioGroup);},getGroup:function(){}}});})();(function(){var b="changeModel",a="qx.ui.form.MModelProperty";qx.Mixin.define(a,{properties:{model:{nullable:true,event:b,dereference:true}}});})();(function(){var b="qx.ui.form.IBooleanForm",a="qx.event.type.Data";qx.Interface.define(b,{events:{"changeValue":a},members:{setValue:function(c){return arguments.length==1;},resetValue:function(){},getValue:function(){}}});})();(function(){var b="qx.ui.form.IModel",a="qx.event.type.Data";qx.Interface.define(b,{events:{"changeModel":a},members:{setModel:function(c){},getModel:function(){},resetModel:function(){}}});})();(function(){var b="qx.event.type.Data",a="qx.ui.form.IForm";qx.Interface.define(a,{events:{"changeEnabled":b,"changeValid":b,"changeInvalidMessage":b,"changeRequired":b},members:{setEnabled:function(c){return arguments.length==1;},getEnabled:function(){},setRequired:function(d){return arguments.length==1;},getRequired:function(){},setValid:function(e){return arguments.length==1;},getValid:function(){},setInvalidMessage:function(f){return arguments.length==1;},getInvalidMessage:function(){},setRequiredInvalidMessage:function(g){return arguments.length==1;},getRequiredInvalidMessage:function(){}}});})();(function(){var b="qx.ui.form.IExecutable",a="qx.event.type.Data";qx.Interface.define(b,{events:{"execute":a},members:{setCommand:function(c){return arguments.length==1;},getCommand:function(){},execute:function(){}}});})();(function(){var n="execute",m="toolTipText",l="icon",k="label",j="qx.ui.core.MExecutable",h="value",g="qx.event.type.Event",f="_applyCommand",d="enabled",c="menu",a="changeCommand",b="qx.ui.core.Command";qx.Mixin.define(j,{events:{"execute":g},properties:{command:{check:b,apply:f,event:a,nullable:true}},members:{__kN:null,__kO:false,__kP:null,_bindableProperties:[d,k,l,m,h,c],execute:function(){var o=this.getCommand();if(o){if(this.__kO){this.__kO=false;}else{this.__kO=true;o.execute(this);}}this.fireEvent(n);},__kQ:function(e){if(this.__kO){this.__kO=false;return;}this.__kO=true;this.execute();},_applyCommand:function(p,q){if(q!=null){q.removeListenerById(this.__kP);}if(p!=null){this.__kP=p.addListener(n,this.__kQ,this);}var t=this.__kN;if(t==null){this.__kN=t={};}for(var i=0;i<this._bindableProperties.length;i++){var s=this._bindableProperties[i];if(q!=null&&t[s]!=null){q.removeBinding(t[s]);t[s]=null;}if(p!=null&&qx.Class.hasProperty(this.constructor,s)){var r=p.get(s);if(r==null){var u=this.get(s);}t[s]=p.bind(s,this,s);if(u){this.set(s,u);}}}}},destruct:function(){this.__kN=null;}});})();(function(){var j="label",i="icon",h="Boolean",g="both",f="String",e="left",d="changeGap",c="changeShow",b="bottom",a="_applyCenter",y="changeIcon",x="qx.ui.basic.Atom",w="changeLabel",v="Integer",u="_applyIconPosition",t="bottom-left",s="top-left",r="top",q="right",p="_applyRich",n="_applyIcon",o="_applyShow",l="_applyLabel",m="_applyGap",k="atom";qx.Class.define(x,{extend:qx.ui.core.Widget,construct:function(z,A){{};qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.layout.Atom());if(z!=null){this.setLabel(z);}if(A!=null){this.setIcon(A);}},properties:{appearance:{refine:true,init:k},label:{apply:l,nullable:true,check:f,event:w},rich:{check:h,init:false,apply:p},icon:{check:f,apply:n,nullable:true,themeable:true,event:y},gap:{check:v,nullable:false,event:d,apply:m,themeable:true,init:4},show:{init:g,check:[g,j,i],themeable:true,inheritable:true,apply:o,event:c},iconPosition:{init:e,check:[r,q,b,e,s,t],themeable:true,apply:u},center:{init:false,check:h,themeable:true,apply:a}},members:{_createChildControlImpl:function(B,C){var D;switch(B){case j:D=new qx.ui.basic.Label(this.getLabel());D.setAnonymous(true);D.setRich(this.getRich());this._add(D);if(this.getLabel()==null||this.getShow()===i){D.exclude();}break;case i:D=new qx.ui.basic.Image(this.getIcon());D.setAnonymous(true);this._addAt(D,0);if(this.getIcon()==null||this.getShow()===j){D.exclude();}break;}return D||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,B);},_forwardStates:{focused:true,hovered:true},_handleLabel:function(){if(this.getLabel()==null||this.getShow()===i){this._excludeChildControl(j);}else{this._showChildControl(j);}},_handleIcon:function(){if(this.getIcon()==null||this.getShow()===j){this._excludeChildControl(i);}else{this._showChildControl(i);}},_applyLabel:function(E,F){var G=this.getChildControl(j,true);if(G){G.setValue(E);}this._handleLabel();},_applyRich:function(H,I){var J=this.getChildControl(j,true);if(J){J.setRich(H);}},_applyIcon:function(K,L){var M=this.getChildControl(i,true);if(M){M.setSource(K);}this._handleIcon();},_applyGap:function(N,O){this._getLayout().setGap(N);},_applyShow:function(P,Q){this._handleLabel();this._handleIcon();},_applyIconPosition:function(R,S){this._getLayout().setIconPosition(R);},_applyCenter:function(T,U){this._getLayout().setCenter(T);}}});})();(function(){var o="pressed",n="abandoned",m="hovered",l="Enter",k="Space",j="dblclick",i="qx.ui.form.Button",h="mouseup",g="mousedown",f="mouseover",b="mouseout",d="keydown",c="button",a="keyup";qx.Class.define(i,{extend:qx.ui.basic.Atom,include:[qx.ui.core.MExecutable],implement:[qx.ui.form.IExecutable],construct:function(p,q,r){qx.ui.basic.Atom.call(this,p,q);if(r!=null){this.setCommand(r);}this.addListener(f,this._onMouseOver);this.addListener(b,this._onMouseOut);this.addListener(g,this._onMouseDown);this.addListener(h,this._onMouseUp);this.addListener(d,this._onKeyDown);this.addListener(a,this._onKeyUp);this.addListener(j,this._onStopEvent);},properties:{appearance:{refine:true,init:c},focusable:{refine:true,init:true}},members:{_forwardStates:{focused:true,hovered:true,pressed:true,disabled:true},press:function(){if(this.hasState(n)){return;}this.addState(o);},release:function(){if(this.hasState(o)){this.removeState(o);}},reset:function(){this.removeState(o);this.removeState(n);this.removeState(m);},_onMouseOver:function(e){if(!this.isEnabled()||e.getTarget()!==this){return;}if(this.hasState(n)){this.removeState(n);this.addState(o);}this.addState(m);},_onMouseOut:function(e){if(!this.isEnabled()||e.getTarget()!==this){return;}this.removeState(m);if(this.hasState(o)){this.removeState(o);this.addState(n);}},_onMouseDown:function(e){if(!e.isLeftPressed()){return;}e.stopPropagation();this.capture();this.removeState(n);this.addState(o);},_onMouseUp:function(e){this.releaseCapture();var s=this.hasState(o);var t=this.hasState(n);if(s){this.removeState(o);}if(t){this.removeState(n);}else{this.addState(m);if(s){this.execute();}}e.stopPropagation();},_onKeyDown:function(e){switch(e.getKeyIdentifier()){case l:case k:this.removeState(n);this.addState(o);e.stopPropagation();}},_onKeyUp:function(e){switch(e.getKeyIdentifier()){case l:case k:if(this.hasState(o)){this.removeState(n);this.removeState(o);this.execute();e.stopPropagation();}}}}});})();(function(){var m="qx.dynlocale",l="Boolean",k="changeLocale",j="changeInvalidMessage",i="on",h="String",g="invalid",f="",d="qx.ui.form.MForm",c="_applyValid",a="changeRequired",b="changeValid";qx.Mixin.define(d,{construct:function(){if(qx.core.Variant.isSet(m,i)){qx.locale.Manager.getInstance().addListener(k,this.__fn,this);}},properties:{valid:{check:l,init:true,apply:c,event:b},required:{check:l,init:false,event:a},invalidMessage:{check:h,init:f,event:j},requiredInvalidMessage:{check:h,nullable:true,event:j}},members:{_applyValid:function(n,o){n?this.removeState(g):this.addState(g);},__fn:qx.core.Variant.select(m,{"on":function(e){var p=this.getInvalidMessage();if(p&&p.translate){this.setInvalidMessage(p.translate());}var q=this.getRequiredInvalidMessage();if(q&&q.translate){this.setRequiredInvalidMessage(q.translate());}},"off":null})},destruct:function(){if(qx.core.Variant.isSet(m,i)){qx.locale.Manager.getInstance().removeListener(k,this.__fn,this);}}});})();(function(){var o="checked",n="keypress",m="Boolean",l="Right",k="_applyValue",j="changeValue",i="qx.ui.form.RadioButton",h="radiobutton",g="Left",f="qx.ui.form.RadioGroup",b="Down",d="_applyGroup",c="Up",a="execute";qx.Class.define(i,{extend:qx.ui.form.Button,include:[qx.ui.form.MForm,qx.ui.form.MModelProperty],implement:[qx.ui.form.IRadioItem,qx.ui.form.IForm,qx.ui.form.IBooleanForm,qx.ui.form.IModel],construct:function(p){{};qx.ui.form.Button.call(this,p);this.addListener(a,this._onExecute);this.addListener(n,this._onKeyPress);},properties:{group:{check:f,nullable:true,apply:d},value:{check:m,nullable:true,event:j,apply:k,init:false},appearance:{refine:true,init:h},allowGrowX:{refine:true,init:false}},members:{_applyValue:function(q,r){q?this.addState(o):this.removeState(o);if(q&&this.getFocusable()){this.focus();}},_applyGroup:function(s,t){if(t){t.remove(this);}if(s){s.add(this);}},_onExecute:function(e){this.setValue(true);},_onKeyPress:function(e){var u=this.getGroup();if(!u){return;}switch(e.getKeyIdentifier()){case g:case c:u.selectPrevious();break;case l:case b:u.selectNext();break;}}}});})();(function(){var o="close-button",n="middle",m="left",l="icon",k="label",j="right",i="click",h="Boolean",g="bottom",f="qx.ui.tabview.TabButton",c="center",e="_applyShowCloseButton",d="top",b="close",a="qx.event.type.Data";qx.Class.define(f,{extend:qx.ui.form.RadioButton,implement:qx.ui.form.IRadioItem,construct:function(){qx.ui.form.RadioButton.call(this);var p=new qx.ui.layout.Grid(2,0);p.setRowAlign(0,m,n);p.setColumnAlign(0,j,n);this._getLayout().dispose();this._setLayout(p);this.initShowCloseButton();},events:{"close":a},properties:{showCloseButton:{check:h,init:false,apply:e}},members:{_forwardStates:{focused:true,checked:true},_applyIconPosition:function(q,r){var s={icon:this.getChildControl(l),label:this.getChildControl(k),closeButton:this.getShowCloseButton()?this.getChildControl(o):null};for(var t in s){if(s[t]){this._remove(s[t]);}}switch(q){case d:this._add(s.label,{row:3,column:2});this._add(s.icon,{row:1,column:2});if(s.closeButton){this._add(s.closeButton,{row:0,column:4});}break;case g:this._add(s.label,{row:1,column:2});this._add(s.icon,{row:3,column:2});if(s.closeButton){this._add(s.closeButton,{row:0,column:4});}break;case m:this._add(s.label,{row:0,column:2});this._add(s.icon,{row:0,column:0});if(s.closeButton){this._add(s.closeButton,{row:0,column:4});}break;case j:this._add(s.label,{row:0,column:0});this._add(s.icon,{row:0,column:2});if(s.closeButton){this._add(s.closeButton,{row:0,column:4});}break;}},_createChildControlImpl:function(u,v){var w;switch(u){case k:var w=new qx.ui.basic.Label(this.getLabel());w.setAnonymous(true);this._add(w,{row:0,column:2});this._getLayout().setColumnFlex(2,1);break;case l:w=new qx.ui.basic.Image(this.getIcon());w.setAnonymous(true);this._add(w,{row:0,column:0});break;case o:w=new qx.ui.form.Button();w.addListener(i,this._onCloseButtonClick,this);this._add(w,{row:0,column:4});if(!this.getShowCloseButton()){w.exclude();}break;}return w||qx.ui.form.RadioButton.prototype._createChildControlImpl.call(this,u);},_onCloseButtonClick:function(){this.fireDataEvent(b,this);},_applyShowCloseButton:function(x,y){if(x){this._showChildControl(o);}else{this._excludeChildControl(o);}},_applyCenter:function(z){var A=this._getLayout();if(z){A.setColumnAlign(2,c,n);}else{A.setColumnAlign(2,m,n);}}}});})();(function(){var e="change",d="__mp",c="qx.event.type.Data",b="qx.ui.form.MModelSelection",a="changeSelection";qx.Mixin.define(b,{construct:function(){this.__mp=new qx.data.Array();this.__mp.addListener(e,this.__ms,this);this.addListener(a,this.__mr,this);},events:{changeModelSelection:c},members:{__mp:null,__mq:false,__mr:function(){if(this.__mq){return;}var h=this.getSelection();var f=[];for(var i=0;i<h.length;i++){var k=h[i];var g=k.getModel?k.getModel():null;if(g!==null){f.push(g);}}if(f.length===h.length){this.setModelSelection(f);}},__ms:function(){this.__mq=true;var m=this.getSelectables(true);var o=[];var n=this.__mp.toArray();for(var i=0;i<n.length;i++){var q=n[i];for(var j=0;j<m.length;j++){var r=m[j];var l=r.getModel?r.getModel():null;if(q===l){o.push(r);break;}}}this.setSelection(o);this.__mq=false;var p=this.getSelection();if(!qx.lang.Array.equals(p,o)){this.__mr();}},getModelSelection:function(){return this.__mp;},setModelSelection:function(s){if(!s){this.__mp.removeAll();return;}{};s.unshift(this.__mp.getLength());s.unshift(0);var t=this.__mp.splice.apply(this.__mp,s);t.dispose();}},destruct:function(){this._disposeObjects(d);}});})();(function(){var a="qx.ui.form.IModelSelection";qx.Interface.define(a,{members:{setModelSelection:function(b){},getModelSelection:function(){}}});})();(function(){var b="qx.ui.core.ISingleSelection",a="qx.event.type.Data";qx.Interface.define(b,{events:{"changeSelection":a},members:{getSelection:function(){return true;},setSelection:function(c){return arguments.length==1;},resetSelection:function(){return true;},isSelected:function(d){return arguments.length==1;},isSelectionEmpty:function(){return true;},getSelectables:function(e){return arguments.length==1;}}});})();(function(){var f="qx.ui.core.MSingleSelectionHandling",d="__my",c="changeSelection",b="changeSelected",a="qx.event.type.Data";qx.Mixin.define(f,{events:{"changeSelection":a},members:{__my:null,getSelection:function(){var g=this.__mz().getSelected();if(g){return [g];}else{return [];}},setSelection:function(h){switch(h.length){case 0:this.resetSelection();break;case 1:this.__mz().setSelected(h[0]);break;default:throw new Error("Could only select one item, but the selection "+" array contains "+h.length+" items!");}},resetSelection:function(){this.__mz().resetSelected();},isSelected:function(i){return this.__mz().isSelected(i);},isSelectionEmpty:function(){return this.__mz().isSelectionEmpty();},getSelectables:function(j){return this.__mz().getSelectables(j);},_onChangeSelected:function(e){var l=e.getData();var k=e.getOldData();l==null?l=[]:l=[l];k==null?k=[]:k=[k];this.fireDataEvent(c,l,k);},__mz:function(){if(this.__my==null){var m=this;this.__my=new qx.ui.core.SingleSelectionManager({getItems:function(){return m._getItems();},isItemSelectable:function(n){if(m._isItemSelectable){return m._isItemSelectable(n);}else{return n.isVisible();}}});this.__my.addListener(b,this._onChangeSelected,this);}this.__my.setAllowEmptySelection(this._isAllowEmptySelection());return this.__my;}},destruct:function(){this._disposeObjects(d);}});})();(function(){var r="Boolean",q="changeInvalidMessage",p="changeValue",o="String",n="_applyAllowEmptySelection",m="_applyInvalidMessage",k="qx.ui.form.RadioGroup",j="_applyValid",h="",g="changeRequired",c="changeValid",f="changeEnabled",d="__a",b="changeSelection",a="_applyEnabled";qx.Class.define(k,{extend:qx.core.Object,implement:[qx.ui.core.ISingleSelection,qx.ui.form.IForm,qx.ui.form.IModelSelection],include:[qx.ui.core.MSingleSelectionHandling,qx.ui.form.MModelSelection],construct:function(s){qx.core.Object.call(this);this.__a=[];this.addListener(b,this.__b,this);if(s!=null){this.add.apply(this,arguments);}},properties:{enabled:{check:r,apply:a,event:f,init:true},wrap:{check:r,init:true},allowEmptySelection:{check:r,init:false,apply:n},valid:{check:r,init:true,apply:j,event:c},required:{check:r,init:false,event:g},invalidMessage:{check:o,init:h,event:q,apply:m},requiredInvalidMessage:{check:o,nullable:true,event:q}},members:{__a:null,getItems:function(){return this.__a;},add:function(t){var u=this.__a;var v;for(var i=0,l=arguments.length;i<l;i++){v=arguments[i];if(qx.lang.Array.contains(u,v)){continue;}v.addListener(p,this._onItemChangeChecked,this);u.push(v);v.setGroup(this);if(v.getValue()){this.setSelection([v]);}}if(!this.isAllowEmptySelection()&&u.length>0&&!this.getSelection()[0]){this.setSelection([u[0]]);}},remove:function(w){var x=this.__a;if(qx.lang.Array.contains(x,w)){qx.lang.Array.remove(x,w);if(w.getGroup()===this){w.resetGroup();}w.removeListener(p,this._onItemChangeChecked,this);if(w.getValue()){this.resetSelection();}}},getChildren:function(){return this.__a;},_onItemChangeChecked:function(e){var y=e.getTarget();if(y.getValue()){this.setSelection([y]);}else if(this.getSelection()[0]==y){this.resetSelection();}},_applyInvalidMessage:function(z,A){for(var i=0;i<this.__a.length;i++){this.__a[i].setInvalidMessage(z);}},_applyValid:function(B,C){for(var i=0;i<this.__a.length;i++){this.__a[i].setValid(B);}},_applyEnabled:function(D,E){var F=this.__a;if(D==null){for(var i=0,l=F.length;i<l;i++){F[i].resetEnabled();}}else{for(var i=0,l=F.length;i<l;i++){F[i].setEnabled(D);}}},_applyAllowEmptySelection:function(G,H){if(!G&&this.isSelectionEmpty()){this.resetSelection();}},selectNext:function(){var I=this.getSelection()[0];var K=this.__a;var J=K.indexOf(I);if(J==-1){return;}var i=0;var length=K.length;if(this.getWrap()){J=(J+1)%length;}else{J=Math.min(J+1,length-1);}while(i<length&&!K[J].getEnabled()){J=(J+1)%length;i++;}this.setSelection([K[J]]);},selectPrevious:function(){var L=this.getSelection()[0];var N=this.__a;var M=N.indexOf(L);if(M==-1){return;}var i=0;var length=N.length;if(this.getWrap()){M=(M-1+length)%length;}else{M=Math.max(M-1,0);}while(i<length&&!N[M].getEnabled()){M=(M-1+length)%length;i++;}this.setSelection([N[M]]);},_getItems:function(){return this.getItems();},_isAllowEmptySelection:function(){return this.isAllowEmptySelection();},__b:function(e){var P=e.getData()[0];var O=e.getOldData()[0];if(O){O.setValue(false);}if(P){P.setValue(true);}}},destruct:function(){this._disposeArray(d);}});})();(function(){var h="[",g="]",f=".",d="idBubble",c="changeBubble",b="qx.data.marshal.MEventBubbling",a="qx.event.type.Data";qx.Mixin.define(b,{events:{"changeBubble":a},members:{_applyEventPropagation:function(i,j,name){this.fireDataEvent(c,{value:i,name:name,old:j});this._registerEventChaining(i,j,name);},_registerEventChaining:function(k,l,name){if((k instanceof qx.core.Object)&&qx.Class.hasMixin(k.constructor,qx.data.marshal.MEventBubbling)){var m=qx.lang.Function.bind(this.__mA,this,name);var n=k.addListener(c,m,this);k.setUserData(d,n);}if(l!=null&&l.getUserData&&l.getUserData(d)!=null){l.removeListenerById(l.getUserData(d));}},__mA:function(name,e){var v=e.getData();var r=v.value;var p=v.old;if(qx.Class.hasInterface(e.getTarget().constructor,qx.data.IListData)){if(v.name.indexOf){var u=v.name.indexOf(f)!=-1?v.name.indexOf(f):v.name.length;var s=v.name.indexOf(h)!=-1?v.name.indexOf(h):v.name.length;if(u<s){var o=v.name.substring(0,u);var t=v.name.substring(u+1,v.name.length);if(t[0]!=h){t=f+t;}var q=name+h+o+g+t;}else if(s<u){var o=v.name.substring(0,s);var t=v.name.substring(s,v.name.length);var q=name+h+o+g+t;}else{var q=name+h+v.name+g;}}else{var q=name+h+v.name+g;}}else{var q=name+f+v.name;}this.fireDataEvent(c,{value:r,name:q,old:p});}}});})();(function(){var l="change",k="add",j="remove",h="order",g="qx.event.type.Data",f="",e="qx.data.Array",d="?",c="changeBubble",b="number",a="changeLength";qx.Class.define(e,{extend:qx.core.Object,include:qx.data.marshal.MEventBubbling,implement:[qx.data.IListData],construct:function(m){qx.core.Object.call(this);if(m==undefined){this.__mm=[];}else if(arguments.length>1){this.__mm=[];for(var i=0;i<arguments.length;i++){this.__mm.push(arguments[i]);}}else if(typeof m==b){this.__mm=new Array(m);}else if(m instanceof Array){this.__mm=qx.lang.Array.clone(m);}else{this.__mm=[];throw new Error("Type of the parameter not supported!");}for(var i=0;i<this.__mm.length;i++){this._applyEventPropagation(this.__mm[i],null,i);}this.__mn();},events:{"change":g,"changeLength":g},members:{__mm:null,concat:function(n){if(n){var o=this.__mm.concat(n);}else{var o=this.__mm.concat();}return new qx.data.Array(o);},join:function(p){return this.__mm.join(p);},pop:function(){var q=this.__mm.pop();this.__mn();this._applyEventPropagation(null,q,this.length-1);this.fireDataEvent(l,{start:this.length-1,end:this.length-1,type:j,items:[q]},null);return q;},push:function(r){for(var i=0;i<arguments.length;i++){this.__mm.push(arguments[i]);this.__mn();this._applyEventPropagation(arguments[i],null,this.length-1);this.fireDataEvent(l,{start:this.length-1,end:this.length-1,type:k,items:[arguments[i]]},null);}return this.length;},reverse:function(){this.__mm.reverse();this.fireDataEvent(l,{start:0,end:this.length-1,type:h,items:null},null);},shift:function(){var s=this.__mm.shift();this.__mn();this._applyEventPropagation(null,s,this.length-1);this.fireDataEvent(l,{start:0,end:this.length-1,type:j,items:[s]},null);return s;},slice:function(t,u){return new qx.data.Array(this.__mm.slice(t,u));},splice:function(v,w,x){var D=this.__mm.length;var A=this.__mm.splice.apply(this.__mm,arguments);if(this.__mm.length!=D){this.__mn();}var B=w>0;var y=arguments.length>2;var z=null;if(B||y){if(this.__mm.length>D){var C=k;}else if(this.__mm.length<D){var C=j;z=A;}else{var C=h;}this.fireDataEvent(l,{start:v,end:this.length-1,type:C,items:z},null);}for(var i=2;i<arguments.length;i++){this._registerEventChaining(arguments[i],null,v+i);}this.fireDataEvent(c,{value:this,name:d,old:A});for(var i=0;i<A.length;i++){this._applyEventPropagation(null,A[i],i);}return (new qx.data.Array(A));},sort:function(E){this.__mm.sort.apply(this.__mm,arguments);this.fireDataEvent(l,{start:0,end:this.length-1,type:h,items:null},null);},unshift:function(F){for(var i=arguments.length-1;i>=0;i--){this.__mm.unshift(arguments[i]);this.__mn();this._applyEventPropagation(arguments[i],null,0);this.fireDataEvent(l,{start:0,end:this.length-1,type:k,items:[arguments[i]]},null);}return this.length;},toArray:function(){return this.__mm;},getItem:function(G){return this.__mm[G];},setItem:function(H,I){var J=this.__mm[H];if(J===I){return;}this.__mm[H]=I;this._applyEventPropagation(I,J,H);if(this.length!=this.__mm.length){this.__mn();}this.fireDataEvent(l,{start:H,end:H,type:k,items:[I]},null);},getLength:function(){return this.length;},indexOf:function(K){return this.__mm.indexOf(K);},toString:function(){if(this.__mm!=null){return this.__mm.toString();}return f;},contains:function(L){return this.__mm.indexOf(L)!==-1;},copy:function(){return this.concat();},insertAt:function(M,N){this.splice(M,0,N);},insertBefore:function(O,P){var Q=this.indexOf(O);if(Q==-1){this.push(P);}else{this.splice(Q,0,P);}},insertAfter:function(R,S){var T=this.indexOf(R);if(T==-1||T==(this.length-1)){this.push(S);}else{this.splice(T+1,0,S);}},removeAt:function(U){return this.splice(U,1).getItem(0);},removeAll:function(){for(var i=0;i<this.__mm.length;i++){this._applyEventPropagation(null,this.__mm[i],i);}var W=this.getLength();var V=this.__mm.concat();this.__mm.length=0;this.__mn();this.fireDataEvent(l,{start:0,end:W-1,type:j,items:V},null);},append:function(X){if(X instanceof qx.data.Array){X=X.toArray();}{};for(var i=0;i<X.length;i++){this._applyEventPropagation(X[i],null,this.__mm.length+i);}Array.prototype.push.apply(this.__mm,X);var Y=this.length;this.__mn();this.fireDataEvent(l,{start:Y,end:this.length-1,type:k,items:X},null);},remove:function(ba){var bb=this.indexOf(ba);if(bb!=-1){this.splice(bb,1);return ba;}},equals:function(bc){if(this.length!==bc.length){return false;}for(var i=0;i<this.length;i++){if(this.getItem(i)!==bc.getItem(i)){return false;}}return true;},sum:function(){var bd=0;for(var i=0;i<this.length;i++){bd+=this.getItem(i);}return bd;},max:function(){var be=this.getItem(0);for(var i=1;i<this.length;i++){if(this.getItem(i)>be){be=this.getItem(i);}}return be===undefined?null:be;},min:function(){var bf=this.getItem(0);for(var i=1;i<this.length;i++){if(this.getItem(i)<bf){bf=this.getItem(i);}}return bf===undefined?null:bf;},forEach:function(bg,bh){for(var i=0;i<this.__mm.length;i++){bg.call(bh,this.__mm[i]);}},__mn:function(){var bi=this.length;this.length=this.__mm.length;this.fireDataEvent(a,this.length,bi);}},destruct:function(){for(var i=0;i<this.__mm.length;i++){this._applyEventPropagation(null,this.__mm[i],i);}this.__mm=null;}});})();(function(){var g="Boolean",f="qx.ui.core.SingleSelectionManager",e="__mv",d="__mt",c="__mu",b="changeSelected",a="qx.event.type.Data";qx.Class.define(f,{extend:qx.core.Object,construct:function(h){qx.core.Object.call(this);{};this.__mt=h;},events:{"changeSelected":a},properties:{allowEmptySelection:{check:g,init:true,apply:e}},members:{__mu:null,__mt:null,getSelected:function(){return this.__mu;},setSelected:function(j){if(!this.__mx(j)){throw new Error("Could not select "+j+", because it is not a child element!");}this.__mw(j);},resetSelected:function(){this.__mw(null);},isSelected:function(k){if(!this.__mx(k)){throw new Error("Could not check if "+k+" is selected,"+" because it is not a child element!");}return this.__mu===k;},isSelectionEmpty:function(){return this.__mu==null;},getSelectables:function(l){var m=this.__mt.getItems();var n=[];for(var i=0;i<m.length;i++){if(this.__mt.isItemSelectable(m[i])){n.push(m[i]);}}if(!l){for(var i=n.length-1;i>=0;i--){if(!n[i].getEnabled()){n.splice(i,1);}}}return n;},__mv:function(o,p){if(!o){this.__mw(this.__mu);}},__mw:function(q){var t=this.__mu;var s=q;if(s!=null&&t===s){return;}if(!this.isAllowEmptySelection()&&s==null){var r=this.getSelectables(true)[0];if(r){s=r;}}this.__mu=s;this.fireDataEvent(b,s,t);},__mx:function(u){var v=this.__mt.getItems();for(var i=0;i<v.length;i++){if(v[i]===u){return true;}}return false;}},destruct:function(){if(this.__mt.toHashCode){this._disposeObjects(d);}else{this.__mt=null;}this._disposeObjects(c);}});})();(function(){var b="abstract",a="qx.ui.layout.Abstract";qx.Class.define(a,{type:b,extend:qx.core.Object,members:{__gz:null,_invalidChildrenCache:null,__gA:null,invalidateLayoutCache:function(){this.__gz=null;},renderLayout:function(c,d){this.warn("Missing renderLayout() implementation!");},getSizeHint:function(){if(this.__gz){return this.__gz;}return this.__gz=this._computeSizeHint();},hasHeightForWidth:function(){return false;},getHeightForWidth:function(e){this.warn("Missing getHeightForWidth() implementation!");return null;},_computeSizeHint:function(){return null;},invalidateChildrenCache:function(){this._invalidChildrenCache=true;},verifyLayoutProperty:null,_clearSeparators:function(){var f=this.__gA;if(f instanceof qx.ui.core.LayoutItem){f.clearSeparators();}},_renderSeparator:function(g,h){this.__gA.renderSeparator(g,h);},connectToWidget:function(i){if(i&&this.__gA){throw new Error("It is not possible to manually set the connected widget.");}this.__gA=i;this.invalidateChildrenCache();},_getWidget:function(){return this.__gA;},_applyLayoutChange:function(){if(this.__gA){this.__gA.scheduleLayoutUpdate();}},_getLayoutChildren:function(){return this.__gA.getLayoutChildren();}},destruct:function(){this.__gA=this.__gz=null;}});})();(function(){var m="bottom",l="top",k="_applyLayoutChange",j="top-left",h="bottom-left",g="left",f="right",e="middle",d="center",c="qx.ui.layout.Atom",a="Integer",b="Boolean";qx.Class.define(c,{extend:qx.ui.layout.Abstract,properties:{gap:{check:a,init:4,apply:k},iconPosition:{check:[g,l,f,m,j,h],init:g,apply:k},center:{check:b,init:false,apply:k}},members:{verifyLayoutProperty:null,renderLayout:function(n,o){var x=qx.ui.layout.Util;var q=this.getIconPosition();var t=this._getLayoutChildren();var length=t.length;var I,top,y,r;var D,w;var B=this.getGap();var G=this.getCenter();if(q===m||q===f){var z=length-1;var u=-1;var s=-1;}else{var z=0;var u=length;var s=1;}if(q==l||q==m){if(G){var C=0;for(var i=z;i!=u;i+=s){r=t[i].getSizeHint().height;if(r>0){C+=r;if(i!=z){C+=B;}}}top=Math.round((o-C)/2);}else{top=0;}for(var i=z;i!=u;i+=s){D=t[i];w=D.getSizeHint();y=Math.min(w.maxWidth,Math.max(n,w.minWidth));r=w.height;I=x.computeHorizontalAlignOffset(d,y,n);D.renderLayout(I,top,y,r);if(r>0){top+=r+B;}}}else{var v=n;var p=null;var F=0;for(var i=z;i!=u;i+=s){D=t[i];y=D.getSizeHint().width;if(y>0){if(!p&&D instanceof qx.ui.basic.Label){p=D;}else{v-=y;}F++;}}if(F>1){var E=(F-1)*B;v-=E;}if(p){var w=p.getSizeHint();var A=Math.max(w.minWidth,Math.min(v,w.maxWidth));v-=A;}if(G&&v>0){I=Math.round(v/2);}else{I=0;}for(var i=z;i!=u;i+=s){D=t[i];w=D.getSizeHint();r=Math.min(w.maxHeight,Math.max(o,w.minHeight));if(D===p){y=A;}else{y=w.width;}var H=e;if(q==j){H=l;}else if(q==h){H=m;}top=x.computeVerticalAlignOffset(H,w.height,o);D.renderLayout(I,top,y,r);if(y>0){I+=y+B;}}}},_computeSizeHint:function(){var T=this._getLayoutChildren();var length=T.length;var L,R;if(length===1){var L=T[0].getSizeHint();R={width:L.width,height:L.height,minWidth:L.minWidth,minHeight:L.minHeight};}else{var P=0,Q=0;var M=0,O=0;var N=this.getIconPosition();var S=this.getGap();if(N===l||N===m){var J=0;for(var i=0;i<length;i++){L=T[i].getSizeHint();Q=Math.max(Q,L.width);P=Math.max(P,L.minWidth);if(L.height>0){O+=L.height;M+=L.minHeight;J++;}}if(J>1){var K=(J-1)*S;O+=K;M+=K;}}else{var J=0;for(var i=0;i<length;i++){L=T[i].getSizeHint();O=Math.max(O,L.height);M=Math.max(M,L.minHeight);if(L.width>0){Q+=L.width;P+=L.minWidth;J++;}}if(J>1){var K=(J-1)*S;Q+=K;P+=K;}}R={minWidth:P,width:Q,minHeight:M,height:O};}return R;}}});})();(function(){var g="middle",f="qx.ui.layout.Util",e="left",d="center",c="top",b="bottom",a="right";qx.Class.define(f,{statics:{PERCENT_VALUE:/[0-9]+(?:\.[0-9]+)?%/,computeFlexOffsets:function(h,j,k){var n,r,m,s;var o=j>k;var t=Math.abs(j-k);var u,p;var q={};for(r in h){n=h[r];q[r]={potential:o?n.max-n.value:n.value-n.min,flex:o?n.flex:1/n.flex,offset:0};}while(t!=0){s=Infinity;m=0;for(r in q){n=q[r];if(n.potential>0){m+=n.flex;s=Math.min(s,n.potential/n.flex);}}if(m==0){break;}s=Math.min(t,s*m)/m;u=0;for(r in q){n=q[r];if(n.potential>0){p=Math.min(t,n.potential,Math.ceil(s*n.flex));u+=p-s*n.flex;if(u>=1){u-=1;p-=1;}n.potential-=p;if(o){n.offset+=p;}else{n.offset-=p;}t-=p;}}}return q;},computeHorizontalAlignOffset:function(v,w,x,y,z){if(y==null){y=0;}if(z==null){z=0;}var A=0;switch(v){case e:A=y;break;case a:A=x-w-z;break;case d:A=Math.round((x-w)/2);if(A<y){A=y;}else if(A<z){A=Math.max(y,x-w-z);}break;}return A;},computeVerticalAlignOffset:function(B,C,D,E,F){if(E==null){E=0;}if(F==null){F=0;}var G=0;switch(B){case c:G=E;break;case b:G=D-C-F;break;case g:G=Math.round((D-C)/2);if(G<E){G=E;}else if(G<F){G=Math.max(E,D-C-F);}break;}return G;},collapseMargins:function(H){var I=0,K=0;for(var i=0,l=arguments.length;i<l;i++){var J=arguments[i];if(J<0){K=Math.min(K,J);}else if(J>0){I=Math.max(I,J);}}return I+K;},computeHorizontalGaps:function(L,M,N){if(M==null){M=0;}var O=0;if(N){O+=L[0].getMarginLeft();for(var i=1,l=L.length;i<l;i+=1){O+=this.collapseMargins(M,L[i-1].getMarginRight(),L[i].getMarginLeft());}O+=L[l-1].getMarginRight();}else{for(var i=1,l=L.length;i<l;i+=1){O+=L[i].getMarginLeft()+L[i].getMarginRight();}O+=(M*(l-1));}return O;},computeVerticalGaps:function(P,Q,R){if(Q==null){Q=0;}var S=0;if(R){S+=P[0].getMarginTop();for(var i=1,l=P.length;i<l;i+=1){S+=this.collapseMargins(Q,P[i-1].getMarginBottom(),P[i].getMarginTop());}S+=P[l-1].getMarginBottom();}else{for(var i=1,l=P.length;i<l;i+=1){S+=P[i].getMarginTop()+P[i].getMarginBottom();}S+=(Q*(l-1));}return S;},computeHorizontalSeparatorGaps:function(T,U,V){var Y=qx.theme.manager.Decoration.getInstance().resolve(V);var X=Y.getInsets();var W=X.left+X.right;var ba=0;for(var i=0,l=T.length;i<l;i++){var bb=T[i];ba+=bb.getMarginLeft()+bb.getMarginRight();}ba+=(U+W+U)*(l-1);return ba;},computeVerticalSeparatorGaps:function(bc,bd,be){var bh=qx.theme.manager.Decoration.getInstance().resolve(be);var bg=bh.getInsets();var bf=bg.top+bg.bottom;var bi=0;for(var i=0,l=bc.length;i<l;i++){var bj=bc[i];bi+=bj.getMarginTop()+bj.getMarginBottom();}bi+=(bd+bf+bd)*(l-1);return bi;},arrangeIdeals:function(bk,bl,bm,bn,bo,bp){if(bl<bk||bo<bn){if(bl<bk&&bo<bn){bl=bk;bo=bn;}else if(bl<bk){bo-=(bk-bl);bl=bk;if(bo<bn){bo=bn;}}else if(bo<bn){bl-=(bn-bo);bo=bn;if(bl<bk){bl=bk;}}}if(bl>bm||bo>bp){if(bl>bm&&bo>bp){bl=bm;bo=bp;}else if(bl>bm){bo+=(bl-bm);bl=bm;if(bo>bp){bo=bp;}}else if(bo>bp){bl+=(bo-bp);bo=bp;if(bl>bm){bl=bm;}}}return {begin:bl,end:bo};}}});})();(function(){var b="qx.event.type.Data",a="qx.ui.form.IStringForm";qx.Interface.define(a,{events:{"changeValue":b},members:{setValue:function(c){return arguments.length==1;},resetValue:function(){},getValue:function(){}}});})();(function(){var k="qx.dynlocale",j="Boolean",i="color",h="changeLocale",g="enabled",f="on",d="_applyTextAlign",c="qx.ui.core.Widget",b="nowrap",a="changeTextAlign",C="_applyWrap",B="A",A="changeContent",z="qx.ui.basic.Label",y="whiteSpace",x="_applyValue",w="center",v="_applyBuddy",u="String",t="textAlign",r="right",s="changeRich",p="normal",q="_applyRich",n="click",o="label",l="left",m="changeValue";qx.Class.define(z,{extend:qx.ui.core.Widget,implement:[qx.ui.form.IStringForm],construct:function(D){qx.ui.core.Widget.call(this);if(D!=null){this.setValue(D);}if(qx.core.Variant.isSet(k,f)){qx.locale.Manager.getInstance().addListener(h,this._onChangeLocale,this);}},properties:{rich:{check:j,init:false,event:s,apply:q},wrap:{check:j,init:true,apply:C},value:{check:u,apply:x,event:m,nullable:true},buddy:{check:c,apply:v,nullable:true,init:null,dereference:true},textAlign:{check:[l,w,r],nullable:true,themeable:true,apply:d,event:a},appearance:{refine:true,init:o},selectable:{refine:true,init:false},allowGrowX:{refine:true,init:false},allowGrowY:{refine:true,init:false},allowShrinkY:{refine:true,init:false}},members:{__gI:null,__gJ:null,__gK:null,__gL:null,_getContentHint:function(){if(this.__gJ){this.__gM=this.__gN();delete this.__gJ;}return {width:this.__gM.width,height:this.__gM.height};},_hasHeightForWidth:function(){return this.getRich()&&this.getWrap();},_applySelectable:function(E){if(!qx.bom.client.Feature.CSS_TEXT_OVERFLOW&&qx.bom.client.Feature.XUL){if(E&&!this.isRich()){{};return;}}qx.ui.core.Widget.prototype._applySelectable.call(this,E);},_getContentHeightForWidth:function(F){if(!this.getRich()&&!this.getWrap()){return null;}return this.__gN(F).height;},_createContentElement:function(){return new qx.html.Label;},_applyTextAlign:function(G,H){this.getContentElement().setStyle(t,G);},_applyTextColor:function(I,J){if(I){this.getContentElement().setStyle(i,qx.theme.manager.Color.getInstance().resolve(I));}else{this.getContentElement().removeStyle(i);}},__gM:{width:0,height:0},_applyFont:function(K,L){var M;if(K){this.__gI=qx.theme.manager.Font.getInstance().resolve(K);M=this.__gI.getStyles();}else{this.__gI=null;M=qx.bom.Font.getDefaultStyles();}this.getContentElement().setStyles(M);this.__gJ=true;qx.ui.core.queue.Layout.add(this);},__gN:function(N){var R=qx.bom.Label;var P=this.getFont();var O=P?this.__gI.getStyles():qx.bom.Font.getDefaultStyles();var content=this.getValue()||B;var Q=this.getRich();return Q?R.getHtmlSize(content,O,N):R.getTextSize(content,O);},_applyBuddy:function(S,T){if(T!=null){T.removeBinding(this.__gK);this.__gK=null;this.removeListenerById(this.__gL);this.__gL=null;}if(S!=null){this.__gK=S.bind(g,this,g);this.__gL=this.addListener(n,function(){if(S.isFocusable()){S.focus.apply(S);}},this);}},_applyRich:function(U){this.getContentElement().setRich(U);this.__gJ=true;qx.ui.core.queue.Layout.add(this);},_applyWrap:function(V,W){if(V&&!this.isRich()){{};}if(this.isRich()){var X=V?p:b;this.getContentElement().setStyle(y,X);}},_onChangeLocale:qx.core.Variant.select(k,{"on":function(e){var content=this.getValue();if(content&&content.translate){this.setValue(content.translate());}},"off":null}),_applyValue:function(Y,ba){this.getContentElement().setValue(Y);this.__gJ=true;qx.ui.core.queue.Layout.add(this);this.fireDataEvent(A,Y,ba);}},destruct:function(){if(qx.core.Variant.isSet(k,f)){qx.locale.Manager.getInstance().removeListener(h,this._onChangeLocale,this);}if(this.__gK!=null){var bb=this.getBuddy();if(bb!=null&&!bb.isDisposed()){bb.removeBinding(this.__gK);}}this.__gI=this.__gK=null;}});})();(function(){var b="value",a="qx.html.Label";qx.Class.define(a,{extend:qx.html.Element,members:{__dP:null,_applyProperty:function(name,c){qx.html.Element.prototype._applyProperty.call(this,name,c);if(name==b){var d=this.getDomElement();qx.bom.Label.setValue(d,c);}},_createDomElement:function(){var f=this.__dP;var e=qx.bom.Label.create(this._content,f);return e;},_copyData:function(g){return qx.html.Element.prototype._copyData.call(this,true);},setRich:function(h){var i=this.getDomElement();if(i){throw new Error("The label mode cannot be modified after initial creation");}h=!!h;if(this.__dP==h){return;}this.__dP=h;return this;},setValue:function(j){this._setProperty(b,j);return this;},getValue:function(){return this._getProperty(b);}}});})();(function(){var j="div",i="inherit",h="text",g="qx.client",f="value",e="",d="hidden",c="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",b="nowrap",a="auto",z="0",y="ellipsis",x="normal",w="label",v="px",u="crop",t="gecko",s="end",r="100%",q="visible",o="qx.bom.Label",p="opera",m="mshtml",n="block",k="-1000px",l="absolute";qx.Class.define(o,{statics:{__jn:{fontFamily:1,fontSize:1,fontWeight:1,fontStyle:1,lineHeight:1},__jo:function(){var A=this.__jq(false);document.body.insertBefore(A,document.body.firstChild);return this._textElement=A;},__jp:function(){var B=this.__jq(true);document.body.insertBefore(B,document.body.firstChild);return this._htmlElement=B;},__jq:function(C){var D=qx.bom.Element.create(j);var E=D.style;E.width=E.height=a;E.left=E.top=k;E.visibility=d;E.position=l;E.overflow=q;if(C){E.whiteSpace=x;}else{E.whiteSpace=b;if(!qx.bom.client.Feature.CSS_TEXT_OVERFLOW&&qx.bom.client.Feature.XUL){var F=document.createElementNS(c,w);var E=F.style;E.padding=z;for(var G in this.__jn){E[G]=i;}D.appendChild(F);}}return D;},__jr:function(H){var I={};if(H){I.whiteSpace=x;}else if(!qx.bom.client.Feature.CSS_TEXT_OVERFLOW&&qx.bom.client.Feature.XUL){I.display=n;}else{I.overflow=d;I.whiteSpace=b;I.textOverflow=y;if(qx.core.Variant.isSet(g,p)){I.OTextOverflow=y;}}return I;},create:function(content,J,K){if(!K){K=window;}if(J){var L=K.document.createElement(j);L.useHtml=true;}else if(!qx.bom.client.Feature.CSS_TEXT_OVERFLOW&&qx.bom.client.Feature.XUL){var L=K.document.createElement(j);var N=K.document.createElementNS(c,w);var M=N.style;M.cursor=i;M.color=i;M.overflow=d;M.maxWidth=r;M.padding=z;for(var O in this.__jn){N.style[O]=i;}N.setAttribute(u,s);L.appendChild(N);}else{var L=K.document.createElement(j);qx.bom.element.Style.setStyles(L,this.__jr(J));}if(content){this.setValue(L,content);}return L;},setValue:function(P,Q){Q=Q||e;if(P.useHtml){P.innerHTML=Q;}else if(!qx.bom.client.Feature.CSS_TEXT_OVERFLOW&&qx.bom.client.Feature.XUL){P.firstChild.setAttribute(f,Q);}else{qx.bom.element.Attribute.set(P,h,Q);}},getValue:function(R){if(R.useHtml){return R.innerHTML;}else if(!qx.bom.client.Feature.CSS_TEXT_OVERFLOW&&qx.bom.client.Feature.XUL){return R.firstChild.getAttribute(f)||e;}else{return qx.bom.element.Attribute.get(R,h);}},getHtmlSize:function(content,S,T){var U=this._htmlElement||this.__jp();U.style.width=T!==undefined?T+v:a;U.innerHTML=content;return this.__js(U,S);},getTextSize:function(V,W){var X=this._textElement||this.__jo();if(!qx.bom.client.Feature.CSS_TEXT_OVERFLOW&&qx.bom.client.Feature.XUL){X.firstChild.setAttribute(f,V);}else{qx.bom.element.Attribute.set(X,h,V);}return this.__js(X,W);},__js:function(Y,ba){var bb=this.__jn;if(!ba){ba={};}for(var bc in bb){Y.style[bc]=ba[bc]||e;}var bd=qx.bom.element.Dimension.getSize(Y);if(qx.core.Variant.isSet(g,t)){if(!qx.bom.client.Platform.WIN){bd.width++;}}if(qx.core.Variant.isSet(g,m)&&qx.bom.client.Engine.VERSION>=9){bd.width++;}return bd;}}});})();(function(){var i="0px",h="qx.client",g="mshtml",f="qx.bom.element.Dimension",e="paddingRight",d="paddingLeft",c="opera",b="paddingTop",a="paddingBottom";qx.Class.define(f,{statics:{getWidth:qx.core.Variant.select(h,{"gecko":function(j){if(j.getBoundingClientRect){var k=j.getBoundingClientRect();return Math.round(k.right)-Math.round(k.left);}else{return j.offsetWidth;}},"default":function(l){return l.offsetWidth;}}),getHeight:qx.core.Variant.select(h,{"gecko":function(m){if(m.getBoundingClientRect){var n=m.getBoundingClientRect();return Math.round(n.bottom)-Math.round(n.top);}else{return m.offsetHeight;}},"default":function(o){return o.offsetHeight;}}),getSize:function(p){return {width:this.getWidth(p),height:this.getHeight(p)};},__ip:{visible:true,hidden:true},getContentWidth:function(q){var s=qx.bom.element.Style;var t=qx.bom.element.Overflow.getX(q);var u=parseInt(s.get(q,d)||i,10);var x=parseInt(s.get(q,e)||i,10);if(this.__ip[t]){var w=q.clientWidth;if(qx.core.Variant.isSet(h,c)){w=w-u-x;}else{if(qx.dom.Node.isBlockNode(q)){w=w-u-x;}}return w;}else{if(q.clientWidth>=q.scrollWidth){return Math.max(q.clientWidth,q.scrollWidth)-u-x;}else{var v=q.scrollWidth-u;var r=qx.bom.client.Engine;if(r.NAME===g&&r.VERSION==6){v-=x;}return v;}}},getContentHeight:function(y){var A=qx.bom.element.Style;var C=qx.bom.element.Overflow.getY(y);var D=parseInt(A.get(y,b)||i,10);var B=parseInt(A.get(y,a)||i,10);if(this.__ip[C]){return y.clientHeight-D-B;}else{if(y.clientHeight>=y.scrollHeight){return Math.max(y.clientHeight,y.scrollHeight)-D-B;}else{var E=y.scrollHeight-D;var z=qx.bom.client.Engine;if(z.NAME===g&&z.VERSION==6){E-=B;}return E;}}},getContentSize:function(F){return {width:this.getContentWidth(F),height:this.getContentHeight(F)};}}});})();(function(){var e="qx.theme.manager.Font",d="Theme",c="changeTheme",b="_applyTheme",a="singleton";qx.Class.define(e,{type:a,extend:qx.util.ValueManager,properties:{theme:{check:d,nullable:true,apply:b,event:c}},members:{resolveDynamic:function(f){var g=this._dynamic;return f instanceof qx.bom.Font?f:g[f];},resolve:function(h){var k=this._dynamic;var i=k[h];if(i){return i;}var j=this.getTheme();if(j!==null&&j.fonts[h]){return k[h]=(new qx.bom.Font).set(j.fonts[h]);}return h;},isDynamic:function(l){var n=this._dynamic;if(l&&(l instanceof qx.bom.Font||n[l]!==undefined)){return true;}var m=this.getTheme();if(m!==null&&l&&m.fonts[l]){n[l]=(new qx.bom.Font).set(m.fonts[l]);return true;}return false;},__io:function(o,p){if(o[p].include){var q=o[o[p].include];o[p].include=null;delete o[p].include;o[p]=qx.lang.Object.mergeWith(o[p],q,false);this.__io(o,p);}},_applyTheme:function(r){var s=this._getDynamic();for(var v in s){if(s[v].themed){s[v].dispose();delete s[v];}}if(r){var t=r.fonts;var u=qx.bom.Font;for(var v in t){if(t[v].include&&t[t[v].include]){this.__io(t,v);}s[v]=(new u).set(t[v]);s[v].themed=true;}}this._setDynamic(s);}}});})();(function(){var k="",j="underline",h="Boolean",g="px",f='"',e="italic",d="normal",c="bold",b="_applyItalic",a="_applyBold",x="Integer",w="_applyFamily",v="_applyLineHeight",u="Array",t="overline",s="line-through",r="qx.bom.Font",q="Number",p="_applyDecoration",o=" ",m="_applySize",n=",";qx.Class.define(r,{extend:qx.core.Object,construct:function(y,z){qx.core.Object.call(this);if(y!==undefined){this.setSize(y);}if(z!==undefined){this.setFamily(z);}},statics:{fromString:function(A){var E=new qx.bom.Font();var C=A.split(/\s+/);var name=[];var D;for(var i=0;i<C.length;i++){switch(D=C[i]){case c:E.setBold(true);break;case e:E.setItalic(true);break;case j:E.setDecoration(j);break;default:var B=parseInt(D,10);if(B==D||qx.lang.String.contains(D,g)){E.setSize(B);}else{name.push(D);}break;}}if(name.length>0){E.setFamily(name);}return E;},fromConfig:function(F){var G=new qx.bom.Font;G.set(F);return G;},__cy:{fontFamily:k,fontSize:k,fontWeight:k,fontStyle:k,textDecoration:k,lineHeight:1.2},getDefaultStyles:function(){return this.__cy;}},properties:{size:{check:x,nullable:true,apply:m},lineHeight:{check:q,nullable:true,apply:v},family:{check:u,nullable:true,apply:w},bold:{check:h,nullable:true,apply:a},italic:{check:h,nullable:true,apply:b},decoration:{check:[j,s,t],nullable:true,apply:p}},members:{__cz:null,__cA:null,__cB:null,__cC:null,__cD:null,__cE:null,_applySize:function(H,I){this.__cz=H===null?null:H+g;},_applyLineHeight:function(J,K){this.__cE=J===null?null:J;},_applyFamily:function(L,M){var N=k;for(var i=0,l=L.length;i<l;i++){if(L[i].indexOf(o)>0){N+=f+L[i]+f;}else{N+=L[i];}if(i!==l-1){N+=n;}}this.__cA=N;},_applyBold:function(O,P){this.__cB=O===null?null:O?c:d;},_applyItalic:function(Q,R){this.__cC=Q===null?null:Q?e:d;},_applyDecoration:function(S,T){this.__cD=S===null?null:S;},getStyles:function(){return {fontFamily:this.__cA,fontSize:this.__cz,fontWeight:this.__cB,fontStyle:this.__cC,textDecoration:this.__cD,lineHeight:this.__cE};}}});})();(function(){var r="left",q="top",p="_applyLayoutChange",o="hAlign",n="flex",m="vAlign",h="Integer",g="minWidth",f="width",e="minHeight",b="qx.ui.layout.Grid",d="height",c="maxHeight",a="maxWidth";qx.Class.define(b,{extend:qx.ui.layout.Abstract,construct:function(s,t){qx.ui.layout.Abstract.call(this);this.__iF=[];this.__iG=[];if(s){this.setSpacingX(s);}if(t){this.setSpacingY(t);}},properties:{spacingX:{check:h,init:0,apply:p},spacingY:{check:h,init:0,apply:p}},members:{__iH:null,__iF:null,__iG:null,__iI:null,__iJ:null,__iK:null,__iL:null,__iM:null,__iN:null,verifyLayoutProperty:null,__iO:function(){var B=[];var A=[];var C=[];var w=-1;var v=-1;var E=this._getLayoutChildren();for(var i=0,l=E.length;i<l;i++){var z=E[i];var D=z.getLayoutProperties();var F=D.row;var u=D.column;D.colSpan=D.colSpan||1;D.rowSpan=D.rowSpan||1;if(F==null||u==null){throw new Error("The layout properties 'row' and 'column' of the child widget '"+z+"' must be defined!");}if(B[F]&&B[F][u]){throw new Error("Cannot add widget '"+z+"'!. "+"There is already a widget '"+B[F][u]+"' in this cell ("+F+", "+u+")");}for(var x=u;x<u+D.colSpan;x++){for(var y=F;y<F+D.rowSpan;y++){if(B[y]==undefined){B[y]=[];}B[y][x]=z;v=Math.max(v,x);w=Math.max(w,y);}}if(D.rowSpan>1){C.push(z);}if(D.colSpan>1){A.push(z);}}for(var y=0;y<=w;y++){if(B[y]==undefined){B[y]=[];}}this.__iH=B;this.__iI=A;this.__iJ=C;this.__iK=w;this.__iL=v;this.__iM=null;this.__iN=null;delete this._invalidChildrenCache;},_setRowData:function(G,H,I){var J=this.__iF[G];if(!J){this.__iF[G]={};this.__iF[G][H]=I;}else{J[H]=I;}},_setColumnData:function(K,L,M){var N=this.__iG[K];if(!N){this.__iG[K]={};this.__iG[K][L]=M;}else{N[L]=M;}},setSpacing:function(O){this.setSpacingY(O);this.setSpacingX(O);return this;},setColumnAlign:function(P,Q,R){{};this._setColumnData(P,o,Q);this._setColumnData(P,m,R);this._applyLayoutChange();return this;},getColumnAlign:function(S){var T=this.__iG[S]||{};return {vAlign:T.vAlign||q,hAlign:T.hAlign||r};},setRowAlign:function(U,V,W){{};this._setRowData(U,o,V);this._setRowData(U,m,W);this._applyLayoutChange();return this;},getRowAlign:function(X){var Y=this.__iF[X]||{};return {vAlign:Y.vAlign||q,hAlign:Y.hAlign||r};},getCellWidget:function(ba,bb){if(this._invalidChildrenCache){this.__iO();}var ba=this.__iH[ba]||{};return ba[bb]||null;},getRowCount:function(){if(this._invalidChildrenCache){this.__iO();}return this.__iK+1;},getColumnCount:function(){if(this._invalidChildrenCache){this.__iO();}return this.__iL+1;},getCellAlign:function(bc,bd){var bj=q;var bh=r;var bi=this.__iF[bc];var bf=this.__iG[bd];var be=this.__iH[bc][bd];if(be){var bg={vAlign:be.getAlignY(),hAlign:be.getAlignX()};}else{bg={};}if(bg.vAlign){bj=bg.vAlign;}else if(bi&&bi.vAlign){bj=bi.vAlign;}else if(bf&&bf.vAlign){bj=bf.vAlign;}if(bg.hAlign){bh=bg.hAlign;}else if(bf&&bf.hAlign){bh=bf.hAlign;}else if(bi&&bi.hAlign){bh=bi.hAlign;}return {vAlign:bj,hAlign:bh};},setColumnFlex:function(bk,bl){this._setColumnData(bk,n,bl);this._applyLayoutChange();return this;},getColumnFlex:function(bm){var bn=this.__iG[bm]||{};return bn.flex!==undefined?bn.flex:0;},setRowFlex:function(bo,bp){this._setRowData(bo,n,bp);this._applyLayoutChange();return this;},getRowFlex:function(bq){var br=this.__iF[bq]||{};var bs=br.flex!==undefined?br.flex:0;return bs;},setColumnMaxWidth:function(bt,bu){this._setColumnData(bt,a,bu);this._applyLayoutChange();return this;},getColumnMaxWidth:function(bv){var bw=this.__iG[bv]||{};return bw.maxWidth!==undefined?bw.maxWidth:Infinity;},setColumnWidth:function(bx,by){this._setColumnData(bx,f,by);this._applyLayoutChange();return this;},getColumnWidth:function(bz){var bA=this.__iG[bz]||{};return bA.width!==undefined?bA.width:null;},setColumnMinWidth:function(bB,bC){this._setColumnData(bB,g,bC);this._applyLayoutChange();return this;},getColumnMinWidth:function(bD){var bE=this.__iG[bD]||{};return bE.minWidth||0;},setRowMaxHeight:function(bF,bG){this._setRowData(bF,c,bG);this._applyLayoutChange();return this;},getRowMaxHeight:function(bH){var bI=this.__iF[bH]||{};return bI.maxHeight||Infinity;},setRowHeight:function(bJ,bK){this._setRowData(bJ,d,bK);this._applyLayoutChange();return this;},getRowHeight:function(bL){var bM=this.__iF[bL]||{};return bM.height!==undefined?bM.height:null;},setRowMinHeight:function(bN,bO){this._setRowData(bN,e,bO);this._applyLayoutChange();return this;},getRowMinHeight:function(bP){var bQ=this.__iF[bP]||{};return bQ.minHeight||0;},__iP:function(bR){var bV=bR.getSizeHint();var bU=bR.getMarginLeft()+bR.getMarginRight();var bT=bR.getMarginTop()+bR.getMarginBottom();var bS={height:bV.height+bT,width:bV.width+bU,minHeight:bV.minHeight+bT,minWidth:bV.minWidth+bU,maxHeight:bV.maxHeight+bT,maxWidth:bV.maxWidth+bU};return bS;},_fixHeightsRowSpan:function(bW){var ck=this.getSpacingY();for(var i=0,l=this.__iJ.length;i<l;i++){var ca=this.__iJ[i];var cc=this.__iP(ca);var cd=ca.getLayoutProperties();var bY=cd.row;var ci=ck*(cd.rowSpan-1);var bX=ci;var cf={};for(var j=0;j<cd.rowSpan;j++){var cm=cd.row+j;var cb=bW[cm];var cl=this.getRowFlex(cm);if(cl>0){cf[cm]={min:cb.minHeight,value:cb.height,max:cb.maxHeight,flex:cl};}ci+=cb.height;bX+=cb.minHeight;}if(ci<cc.height){if(!qx.lang.Object.isEmpty(cf)){var cj=qx.ui.layout.Util.computeFlexOffsets(cf,cc.height,ci);for(var k=0;k<cd.rowSpan;k++){var ce=cj[bY+k]?cj[bY+k].offset:0;bW[bY+k].height+=ce;}}else{var cg=ck*(cd.rowSpan-1);var ch=cc.height-cg;var cb=Math.floor(ch/cd.rowSpan);for(var k=0;k<cd.rowSpan;k++){bW[bY+k].height=cb;}}}if(bX<cc.minHeight){var cj=qx.ui.layout.Util.computeFlexOffsets(cf,cc.minHeight,bX);for(var j=0;j<cd.rowSpan;j++){var ce=cj[bY+j]?cj[bY+j].offset:0;bW[bY+j].minHeight+=ce;}}}},_fixWidthsColSpan:function(cn){var cr=this.getSpacingX();for(var i=0,l=this.__iI.length;i<l;i++){var co=this.__iI[i];var cq=this.__iP(co);var ct=co.getLayoutProperties();var cp=ct.column;var cz=cr*(ct.colSpan-1);var cs=cz;var cu={};var cw;for(var j=0;j<ct.colSpan;j++){var cA=ct.column+j;var cy=cn[cA];var cx=this.getColumnFlex(cA);if(cx>0){cu[cA]={min:cy.minWidth,value:cy.width,max:cy.maxWidth,flex:cx};}cz+=cy.width;cs+=cy.minWidth;}if(cz<cq.width){var cv=qx.ui.layout.Util.computeFlexOffsets(cu,cq.width,cz);for(var j=0;j<ct.colSpan;j++){cw=cv[cp+j]?cv[cp+j].offset:0;cn[cp+j].width+=cw;}}if(cs<cq.minWidth){var cv=qx.ui.layout.Util.computeFlexOffsets(cu,cq.minWidth,cs);for(var j=0;j<ct.colSpan;j++){cw=cv[cp+j]?cv[cp+j].offset:0;cn[cp+j].minWidth+=cw;}}}},_getRowHeights:function(){if(this.__iM!=null){return this.__iM;}var cK=[];var cD=this.__iK;var cC=this.__iL;for(var cL=0;cL<=cD;cL++){var cE=0;var cG=0;var cF=0;for(var cJ=0;cJ<=cC;cJ++){var cB=this.__iH[cL][cJ];if(!cB){continue;}var cH=cB.getLayoutProperties().rowSpan||0;if(cH>1){continue;}var cI=this.__iP(cB);if(this.getRowFlex(cL)>0){cE=Math.max(cE,cI.minHeight);}else{cE=Math.max(cE,cI.height);}cG=Math.max(cG,cI.height);}var cE=Math.max(cE,this.getRowMinHeight(cL));var cF=this.getRowMaxHeight(cL);if(this.getRowHeight(cL)!==null){var cG=this.getRowHeight(cL);}else{var cG=Math.max(cE,Math.min(cG,cF));}cK[cL]={minHeight:cE,height:cG,maxHeight:cF};}if(this.__iJ.length>0){this._fixHeightsRowSpan(cK);}this.__iM=cK;return cK;},_getColWidths:function(){if(this.__iN!=null){return this.__iN;}var cQ=[];var cN=this.__iL;var cP=this.__iK;for(var cV=0;cV<=cN;cV++){var cT=0;var cS=0;var cO=Infinity;for(var cW=0;cW<=cP;cW++){var cM=this.__iH[cW][cV];if(!cM){continue;}var cR=cM.getLayoutProperties().colSpan||0;if(cR>1){continue;}var cU=this.__iP(cM);if(this.getColumnFlex(cV)>0){cS=Math.max(cS,cU.minWidth);}else{cS=Math.max(cS,cU.width);}cT=Math.max(cT,cU.width);}var cS=Math.max(cS,this.getColumnMinWidth(cV));var cO=this.getColumnMaxWidth(cV);if(this.getColumnWidth(cV)!==null){var cT=this.getColumnWidth(cV);}else{var cT=Math.max(cS,Math.min(cT,cO));}cQ[cV]={minWidth:cS,width:cT,maxWidth:cO};}if(this.__iI.length>0){this._fixWidthsColSpan(cQ);}this.__iN=cQ;return cQ;},_getColumnFlexOffsets:function(cX){var cY=this.getSizeHint();var dd=cX-cY.width;if(dd==0){return {};}var db=this._getColWidths();var da={};for(var i=0,l=db.length;i<l;i++){var de=db[i];var dc=this.getColumnFlex(i);if((dc<=0)||(de.width==de.maxWidth&&dd>0)||(de.width==de.minWidth&&dd<0)){continue;}da[i]={min:de.minWidth,value:de.width,max:de.maxWidth,flex:dc};}return qx.ui.layout.Util.computeFlexOffsets(da,cX,cY.width);},_getRowFlexOffsets:function(df){var dg=this.getSizeHint();var dj=df-dg.height;if(dj==0){return {};}var dk=this._getRowHeights();var dh={};for(var i=0,l=dk.length;i<l;i++){var dl=dk[i];var di=this.getRowFlex(i);if((di<=0)||(dl.height==dl.maxHeight&&dj>0)||(dl.height==dl.minHeight&&dj<0)){continue;}dh[i]={min:dl.minHeight,value:dl.height,max:dl.maxHeight,flex:di};}return qx.ui.layout.Util.computeFlexOffsets(dh,df,dg.height);},renderLayout:function(dm,dn){if(this._invalidChildrenCache){this.__iO();}var dC=qx.ui.layout.Util;var dq=this.getSpacingX();var dw=this.getSpacingY();var dH=this._getColWidths();var dG=this._getColumnFlexOffsets(dm);var dr=[];var dJ=this.__iL;var dp=this.__iK;var dI;for(var dK=0;dK<=dJ;dK++){dI=dG[dK]?dG[dK].offset:0;dr[dK]=dH[dK].width+dI;}var dz=this._getRowHeights();var dB=this._getRowFlexOffsets(dn);var dQ=[];for(var dx=0;dx<=dp;dx++){dI=dB[dx]?dB[dx].offset:0;dQ[dx]=dz[dx].height+dI;}var dR=0;for(var dK=0;dK<=dJ;dK++){var top=0;for(var dx=0;dx<=dp;dx++){var dE=this.__iH[dx][dK];if(!dE){top+=dQ[dx]+dw;continue;}var ds=dE.getLayoutProperties();if(ds.row!==dx||ds.column!==dK){top+=dQ[dx]+dw;continue;}var dP=dq*(ds.colSpan-1);for(var i=0;i<ds.colSpan;i++){dP+=dr[dK+i];}var dF=dw*(ds.rowSpan-1);for(var i=0;i<ds.rowSpan;i++){dF+=dQ[dx+i];}var dt=dE.getSizeHint();var dN=dE.getMarginTop();var dD=dE.getMarginLeft();var dA=dE.getMarginBottom();var dv=dE.getMarginRight();var dy=Math.max(dt.minWidth,Math.min(dP-dD-dv,dt.maxWidth));var dO=Math.max(dt.minHeight,Math.min(dF-dN-dA,dt.maxHeight));var dL=this.getCellAlign(dx,dK);var dM=dR+dC.computeHorizontalAlignOffset(dL.hAlign,dy,dP,dD,dv);var du=top+dC.computeVerticalAlignOffset(dL.vAlign,dO,dF,dN,dA);dE.renderLayout(dM,du,dy,dO);top+=dQ[dx]+dw;}dR+=dr[dK]+dq;}},invalidateLayoutCache:function(){qx.ui.layout.Abstract.prototype.invalidateLayoutCache.call(this);this.__iN=null;this.__iM=null;},_computeSizeHint:function(){if(this._invalidChildrenCache){this.__iO();}var dW=this._getColWidths();var dY=0,ea=0;for(var i=0,l=dW.length;i<l;i++){var eb=dW[i];if(this.getColumnFlex(i)>0){dY+=eb.minWidth;}else{dY+=eb.width;}ea+=eb.width;}var ec=this._getRowHeights();var dU=0,dX=0;for(var i=0,l=ec.length;i<l;i++){var ed=ec[i];if(this.getRowFlex(i)>0){dU+=ed.minHeight;}else{dU+=ed.height;}dX+=ed.height;}var dT=this.getSpacingX()*(dW.length-1);var dS=this.getSpacingY()*(ec.length-1);var dV={minWidth:dY+dT,width:ea+dT,minHeight:dU+dS,height:dX+dS};return dV;}},destruct:function(){this.__iH=this.__iF=this.__iG=this.__iI=this.__iJ=this.__iN=this.__iM=null;}});})();(function(){var b="number",a="qx.ui.layout.Canvas";qx.Class.define(a,{extend:qx.ui.layout.Abstract,members:{verifyLayoutProperty:null,renderLayout:function(c,d){var q=this._getLayoutChildren();var g,p,n;var s,top,e,f,j,h;var o,m,r,k;for(var i=0,l=q.length;i<l;i++){g=q[i];p=g.getSizeHint();n=g.getLayoutProperties();o=g.getMarginTop();m=g.getMarginRight();r=g.getMarginBottom();k=g.getMarginLeft();s=n.left!=null?n.left:n.edge;if(qx.lang.Type.isString(s)){s=Math.round(parseFloat(s)*c/100);}e=n.right!=null?n.right:n.edge;if(qx.lang.Type.isString(e)){e=Math.round(parseFloat(e)*c/100);}top=n.top!=null?n.top:n.edge;if(qx.lang.Type.isString(top)){top=Math.round(parseFloat(top)*d/100);}f=n.bottom!=null?n.bottom:n.edge;if(qx.lang.Type.isString(f)){f=Math.round(parseFloat(f)*d/100);}if(s!=null&&e!=null){j=c-s-e-k-m;if(j<p.minWidth){j=p.minWidth;}else if(j>p.maxWidth){j=p.maxWidth;}s+=k;}else{j=n.width;if(j==null){j=p.width;}else{j=Math.round(parseFloat(j)*c/100);if(j<p.minWidth){j=p.minWidth;}else if(j>p.maxWidth){j=p.maxWidth;}}if(e!=null){s=c-j-e-m-k;}else if(s==null){s=k;}else{s+=k;}}if(top!=null&&f!=null){h=d-top-f-o-r;if(h<p.minHeight){h=p.minHeight;}else if(h>p.maxHeight){h=p.maxHeight;}top+=o;}else{h=n.height;if(h==null){h=p.height;}else{h=Math.round(parseFloat(h)*d/100);if(h<p.minHeight){h=p.minHeight;}else if(h>p.maxHeight){h=p.maxHeight;}}if(f!=null){top=d-h-f-r-o;}else if(top==null){top=o;}else{top+=o;}}g.renderLayout(s,top,j,h);}},_computeSizeHint:function(){var I=0,H=0;var F=0,D=0;var B,A;var z,x;var t=this._getLayoutChildren();var w,G,v;var J,top,u,y;for(var i=0,l=t.length;i<l;i++){w=t[i];G=w.getLayoutProperties();v=w.getSizeHint();var E=w.getMarginLeft()+w.getMarginRight();var C=w.getMarginTop()+w.getMarginBottom();B=v.width+E;A=v.minWidth+E;J=G.left!=null?G.left:G.edge;if(J&&typeof J===b){B+=J;A+=J;}u=G.right!=null?G.right:G.edge;if(u&&typeof u===b){B+=u;A+=u;}I=Math.max(I,B);H=Math.max(H,A);z=v.height+C;x=v.minHeight+C;top=G.top!=null?G.top:G.edge;if(top&&typeof top===b){z+=top;x+=top;}y=G.bottom!=null?G.bottom:G.edge;if(y&&typeof y===b){z+=y;x+=y;}F=Math.max(F,z);D=Math.max(D,x);}return {width:I,minWidth:H,height:F,minHeight:D};}}});})();(function(){var k="_",j="_PROT",h="_PUB",g="mixin",f="_PRIV",e="_ABSTRACT",d="_STATIC",c="_INHERITED",b="OVERLAY_",a="_THEMEABLE",F="ICON_CHILDCONTROL",E="_ERROR",D="_OVERRIDDEN",C="ICON_PACKAGE",B="interface",A="ICON_CTOR",z="PROT",y="ICON_CLASS",x="ICON_INTERFACE",w="apiviewer.TreeUtil",r="_MIXIN",s="PUB",p="ICON_EVENT",q="ICON_PROPERTY",n="_WARN",o="ICON_METHOD",l="ICON_MIXIN",m="ICON_APPEARANCE",t="PRIV",u="ICON_CONSTANT",v="_SINGLETON";qx.Class.define(w,{extend:qx.core.Object,construct:function(){qx.core.Object.call(this);},statics:{getChild:function(G,H){if(G!=null&&G.children!=null){for(var i=0;i<G.children.length;i++){if(G.children[i].type==H){return G.children[i];}}}return null;},getChildByAttribute:function(I,J,K){if(I.children!=null){for(var i=0;i<I.children.length;i++){var L=I.children[i];if(L.attributes&&L.attributes[J]==K){return L;}}}return null;},getIconUrl:function(M,N){var O;var P=apiviewer.dao;if(M instanceof P.Package){O=C;}else if(M instanceof P.Class){switch(M.getType()){case g:O=l;break;case B:O=x;break;default:O=y;if(M.isStatic()){O+=d;}else if(M.isAbstract()){O+=e;}else if(M.isSingleton()){O+=v;}}}else if(M instanceof P.Property){O=q;if(M.isPublic()){O+=h;}else if(M.isProtected()){O+=j;}else if(M.isPrivate()||M.isInternal()){O+=f;}if(M.isThemeable()){O+=a;}}else if(M instanceof P.Event){O=p;}else if(M instanceof P.Method){if(M.isConstructor()){var O=A;}else{O=o;if(M.isPublic()){O+=h;}else if(M.isProtected()){O+=j;}else if(M.isPrivate()||M.isInternal()){O+=f;}}if(M.isStatic()){O+=d;}else if(M.isAbstract()){O+=e;}if(M.getClass().getType()==g){O+=r;}}else if(M instanceof P.Constant){O=u;}else if(M instanceof P.Appearance){O=m;}else if(M instanceof P.ChildControl){O=F;}else{throw new Error("Unknown node type: "+M.type);}if(M instanceof P.ClassItem){if(N){O+=c;}else if(M.getOverriddenFrom&&M.getOverriddenFrom()){O+=D;}if(M.getErrors().length>0){O+=E;}}if(M.hasWarning()){O+=n;}return apiviewer.TreeUtil.iconNameToIconPath(O);},iconNameToIconPath:function(Q){var T=apiviewer.TreeUtil[Q];if(!T){var S=Q.split(k);var V=S[0]+k+S[1];if(S[2]==s||S[2]==z||S[2]==t){V+=k+S[2];var U=3;}else{U=2;}T=[apiviewer.TreeUtil[V]];if(T[0]==null){throw new Error("Unknown img constant: "+V);}for(var i=U;i<S.length;i++){var R=apiviewer.TreeUtil[b+S[i]];if(R==null){throw new Error("Unknown img constant: OVERLAY_"+S[i]);}T.push(R);}}return T;},ICON_BLANK:"apiviewer/image/blank.gif",OVERLAY_ABSTRACT:"apiviewer/image/overlay_abstract18.gif",OVERLAY_ERROR:"apiviewer/image/overlay_error18.gif",OVERLAY_INHERITED:"apiviewer/image/overlay_inherited18.gif",OVERLAY_OVERRIDDEN:"apiviewer/image/overlay_overridden18.gif",OVERLAY_THEMEABLE:"apiviewer/image/overlay_themeable18.gif",OVERLAY_STATIC:"apiviewer/image/overlay_static18.gif",OVERLAY_WARN:"apiviewer/image/overlay_warning18.gif",OVERLAY_MIXIN:"apiviewer/image/overlay_mixin18.gif",ICON_PACKAGE:"apiviewer/image/package18.gif",ICON_PACKAGE_WARN:"apiviewer/image/package_warning18.gif",ICON_CLASS:"apiviewer/image/class18.gif",ICON_CLASS_WARN:"apiviewer/image/class_warning18.gif",ICON_CLASS_ERROR:"apiviewer/image/class_warning18.gif",ICON_CLASS_STATIC:"apiviewer/image/class_static18.gif",ICON_CLASS_STATIC_WARN:"apiviewer/image/class_static_warning18.gif",ICON_CLASS_STATIC_ERROR:"apiviewer/image/class_static_warning18.gif",ICON_CLASS_ABSTRACT:"apiviewer/image/class_abstract18.gif",ICON_CLASS_ABSTRACT_WARN:"apiviewer/image/class_abstract_warning18.gif",ICON_CLASS_ABSTRACT_ERROR:"apiviewer/image/class_abstract_warning18.gif",ICON_CLASS_SINGLETON:"apiviewer/image/class_singleton18.gif",ICON_CLASS_SINGLETON_WARN:"apiviewer/image/class_singleton_warning18.gif",ICON_CLASS_SINGLETON_ERROR:"apiviewer/image/class_singleton_warning18.gif",ICON_PROPERTY_PUB:"apiviewer/image/property18.gif",ICON_PROPERTY_PROT:"apiviewer/image/property_protected18.gif",ICON_PROPERTY_PRIV:"apiviewer/image/property_private18.gif",ICON_PROPERTY_PUB_THEMEABLE:"apiviewer/image/property_themeable18.gif",ICON_EVENT:"apiviewer/image/event18.gif",ICON_INTERFACE:"apiviewer/image/interface18.gif",ICON_INTERFACE_WARN:"apiviewer/image/interface_warning18.gif",ICON_MIXIN:"apiviewer/image/mixin18.gif",ICON_MIXIN_WARN:"apiviewer/image/mixin_warning18.gif",ICON_METHOD_PUB:"apiviewer/image/method_public18.gif",ICON_METHOD_PUB_INHERITED:"apiviewer/image/method_public_inherited18.gif",ICON_CTOR:"apiviewer/image/constructor18.gif",ICON_METHOD_PROT:"apiviewer/image/method_protected18.gif",ICON_METHOD_PRIV:"apiviewer/image/method_private18.gif",ICON_CONSTANT:"apiviewer/image/constant18.gif",ICON_APPEARANCE:"apiviewer/image/constant18.gif",ICON_CHILDCONTROL:"apiviewer/image/childcontrol18.gif"},defer:function(W,X,Y){W.PRELOAD_IMAGES=[W.ICON_INFO,W.ICON_SEARCH,W.OVERLAY_ABSTRACT,W.OVERLAY_ERROR,W.OVERLAY_INHERITED,W.OVERLAY_OVERRIDDEN,W.OVERLAY_STATIC,W.OVERLAY_WARN,W.OVERLAY_MIXIN,W.OVERLAY_THEMEABLE,W.ICON_PACKAGE,W.ICON_PACKAGE_WARN,W.ICON_CLASS,W.ICON_CLASS_WARN,W.ICON_CLASS_ERROR,W.ICON_CLASS_STATIC,W.ICON_CLASS_STATIC_WARN,W.ICON_CLASS_STATIC_ERROR,W.ICON_CLASS_ABSTRACT,W.ICON_CLASS_ABSTRACT_WARN,W.ICON_CLASS_ABSTRACT_ERROR,W.ICON_CLASS_SINGLETON,W.ICON_CLASS_SINGLETON_WARN,W.ICON_CLASS_SINGLETON_ERROR,W.ICON_PROPERTY_PUB,W.ICON_PROPERTY_PROT,W.ICON_PROPERTY_PRIV,W.ICON_PROPERTY_PUB_THEMEABLE,W.ICON_EVENT,W.ICON_INTERFACE,W.ICON_INTERFACE_WARN,W.ICON_MIXIN,W.ICON_MIXIN_WARN,W.ICON_METHOD_PUB,W.ICON_METHOD_PUB_INHERITED,W.ICON_CTOR,W.ICON_METHOD_PROT,W.ICON_METHOD_PRIV,W.ICON_CONSTANT,W.ICON_CHILDCONTROL];}});})();(function(){var g="Boolean",f="changeShowInherited",e="changeShowProtected",d="changeExpandProperties",c="apiviewer.UiModel",b="changeShowPrivate",a="singleton";qx.Class.define(c,{extend:qx.core.Object,type:a,properties:{showInherited:{check:g,init:false,event:f},expandProperties:{check:g,init:false,event:d},showProtected:{check:g,init:false,event:e},showPrivate:{check:g,init:false,event:b}}});})();(function(){var i="auto",h="overflowX",g="visible",f="hidden",e="scroll",d="overflowY",c="_applyOverflowX",b="_applyOverflowY",a="qx.ui.core.MNativeOverflow";qx.Mixin.define(a,{properties:{overflowX:{check:[f,g,e,i],nullable:true,apply:c},overflowY:{check:[f,g,e,i],nullable:true,apply:b},overflow:{group:[h,d]}},members:{_applyOverflowX:function(j){this.getContentElement().setStyle(h,j);},_applyOverflowY:function(k){this.getContentElement().setStyle(d,k);}}});})();(function(){var o="none",n="text",m="",l="userSelect",k="color",j="String",i="0px",h="webkit",g="changeHtml",f="_applyCssClass",c="class",e="qx.ui.embed.Html",d="_applyHtml",b="qx.client",a="html";qx.Class.define(e,{extend:qx.ui.core.Widget,include:[qx.ui.core.MNativeOverflow],construct:function(p){qx.ui.core.Widget.call(this);if(p!=null){this.setHtml(p);}},properties:{html:{check:j,apply:d,event:g,nullable:true},cssClass:{check:j,init:m,apply:f},selectable:{refine:true,init:true},focusable:{refine:true,init:true}},members:{getFocusElement:function(){return this.getContentElement();},_applyHtml:function(q,r){var s=this.getContentElement();s.setAttribute(a,q||m);s.setStyles({"padding":i,"border":o});},_applyCssClass:function(t,u){this.getContentElement().setAttribute(c,t);},_applySelectable:function(v){qx.ui.core.Widget.prototype._applySelectable.call(this,v);if(qx.core.Variant.isSet(b,h)){this.getContainerElement().setStyle(l,v?n:o);this.getContentElement().setStyle(l,v?n:o);}},_applyFont:function(w,x){var y=w?qx.theme.manager.Font.getInstance().resolve(w).getStyles():qx.bom.Font.getDefaultStyles();this.getContentElement().setStyles(y);},_applyTextColor:function(z,A){if(z){this.getContentElement().setStyle(k,qx.theme.manager.Color.getInstance().resolve(z));}else{this.getContentElement().removeStyle(k);}}}});})();(function(){var l="Boolean",k="_updatePanels",j="auto",h='</div>',g='<div>',f='apiviewer/image/close.gif',e="javascript",d='<div style="padding:24px;">',c="_blank",b="apiviewer.dao.Node",y="string",x="http://",w="pre",v="_infoPanels",u='apiviewer/image/open.gif',t="appear",s="img",r="_applyDocNode",q="detailviewer",p='<h1></h1>',n="abstract",o="apiviewer.ui.AbstractViewer",m="a";qx.Class.define(o,{type:n,extend:qx.ui.embed.Html,construct:function(){qx.ui.embed.Html.call(this);this._infoPanelHash={};this._infoPanels=[];this.setOverflowX(j);this.setOverflowY(j);this.setAppearance(q);this._infoPanelHash={};this._infoPanels=[];apiviewer.ObjectRegistry.register(this);},properties:{docNode:{check:b,init:null,nullable:true,apply:r},showInherited:{check:l,init:false,apply:k},expandProperties:{check:l,init:false,apply:k},showProtected:{check:l,init:false,apply:k},showPrivate:{check:l,init:false,apply:k}},statics:{fixLinks:function(z){var a=z.getElementsByTagName(m);for(var i=0;i<a.length;i++){if(typeof a[i].href==y&&a[i].href.indexOf(x)==0){a[i].target=c;}}},highlightCode:function(A){var B=A.getElementsByTagName(w);for(var i=0;i<B.length;i++){var C=B[i];if(C.className!==e){continue;}C.innerHTML=qx.dev.Tokenizer.javaScriptToHtml(C.innerHTML);}}},members:{_infoPanelHash:null,_infoPanels:null,__Sq:null,_init:function(D){this.__Sr();this.setDocNode(D);this.addListenerOnce(t,function(){this._syncHtml();this._applyDocNode(this.__Sq);},this);},__Sr:function(){var F=new qx.util.StringBuilder();F.add(d);F.add(p);F.add(g,h);var E=this.getPanels();for(var i=0;i<E.length;i++){var G=E[i];F.add(G.getPanelHtml(this));}F.add(h);this.setHtml(F.get());},_getTitleHtml:function(H){throw new Error("Abstract method called!");},_getDescriptionHtml:function(I){throw new Error("Abstract method called!");},_syncHtml:function(){var M=this.getContentElement().getDomElement().firstChild;var J=M.childNodes;var K=this.getPanels();apiviewer.ui.AbstractViewer.fixLinks(M);this._titleElem=J[0];this._classDescElem=J[1];for(var i=0;i<K.length;i++){var L=K[i];L.setElement(J[i+2]);}},addInfoPanel:function(N){this._infoPanelHash[N.toHashCode()]=N;this._infoPanels.push(N);},getPanels:function(){return this._infoPanels;},getPanelFromHashCode:function(O){return this._infoPanelHash[O];},_updatePanels:function(){var P=this.getPanels();for(var i=0;i<P.length;i++){var Q=P[i];Q.update(this,this.__Sq);}},_applyDocNode:function(R){this.__Sq=R;if(!this._titleElem){return ;}this._titleElem.innerHTML=this._getTitleHtml(R);this._classDescElem.innerHTML=this._getDescriptionHtml(R);apiviewer.ui.AbstractViewer.fixLinks(this._classDescElem);apiviewer.ui.AbstractViewer.highlightCode(this._classDescElem);this._updatePanels();},togglePanelVisibility:function(S){try{S.setIsOpen(!S.getIsOpen());var T=S.getTitleElement().getElementsByTagName(s)[0];T.src=qx.util.ResourceManager.getInstance().toUri(S.getIsOpen()?f:u);S.update(this,this.getDocNode());}catch(U){this.error("Toggling info body failed",U);}}},destruct:function(){this._classDescElem=this._titleElem=this._infoPanelHash=this.__Sq=null;this._disposeArray(v,1);}});})();(function(){var n="classes",m="functions",l="",k="packages",j="class",i="interfaces",h='<div class="class-description">',g='<small>package</small>',f='</div>',e="ClassViewer",b="mixins",d="interface",c="apiviewer.ui.PackageViewer",a="mixin";qx.Class.define(c,{extend:apiviewer.ui.AbstractViewer,construct:function(){apiviewer.ui.AbstractViewer.call(this);this.addInfoPanel(new apiviewer.ui.panels.MethodPanel(m,m));this.addInfoPanel(new apiviewer.ui.panels.ClassPanel(n,n,j));this.addInfoPanel(new apiviewer.ui.panels.ClassPanel(n,i,d));this.addInfoPanel(new apiviewer.ui.panels.ClassPanel(n,b,a));this.addInfoPanel(new apiviewer.ui.panels.PackagePanel(k,k));this.getContentElement().setAttribute(j,e);this._init(new apiviewer.dao.Package({}));},members:{_getTitleHtml:function(o){var p=l;p+=g;p+=o.getFullName();return p;},_getDescriptionHtml:function(q){var r=new qx.util.StringBuilder();var s=q.getDescription();if(s!=l){r.add(h,apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(s,q),f);}return r.get();}}});})();(function(){var a="apiviewer.ObjectRegistry";qx.Class.define(a,{statics:{__Ss:{},register:function(b){var c=qx.core.ObjectRegistry.toHashCode(b);this.__Ss[c]=b;},getObjectFromHashCode:function(d){return this.__Ss[d];}}});})();(function(){var l="</span>",k="sym",j="nl",h="qxkey",g="ws",f=">",e="qqstr",d="<",c="qstr",b="linecomment",bg="ident",bf="keyword",be="regexp",bd="&",bc="|",bb="fullcomment",ba="atom",Y="\\r\\n|\\r|\\n",X="\\s*\\)*",W="\\s",s="^",t='["][^"]*["]',q="real",r="\\s*[,\\)]",o="<span class='string'>",p="[a-zA-Z_][a-zA-Z0-9_]*\\b",m="<span class='comment'>",n="[+-]?\\d+",w="\\s*\\(*\\s*",x="&nbsp;",F="qx.dev.Tokenizer",D="\\t",M="\\s*\\)*\\s*\\)",H="\\.(?:replace)\\s*\\(\\s*\\(*\\s*",S="\\)*\\.(?:test|exec)\\s*\\(\\s*",Q="<span class='regexp'>",z="int",V="'>",U="<span class='",T="(?:\\/(?!\\*)[^\\t\\n\\r\\f\\v\\/]+?\\/[mgi]*)",y=".",B="\\s*\\)*\\s*?,?",C="[\\(,]\\s*",E="<span class='ident'>",G="g",I="[+-]?\\d+(([.]\\d+)*([eE][+-]?\\d+))?",N="\\/\\*(?:.|[\\n\\r])*?\\*\\/",R="\n",u="$",v="['][^']*[']",A="tab",L="\\/\\/.*?[\\n\\r$]",K="<br>",J=" ",P="(?::|=|\\?)\\s*\\(*\\s*",O="\\.(?:match|search|split)\\s*\\(\\s*\\(*\\s*";qx.Class.define(F,{extend:qx.core.Object,statics:{tokenizeJavaScript:function(bh){var bL={"break":1,"case":1,"catch":1,"continue":1,"default":1,"delete":1,"do":1,"else":1,"finally":1,"for":1,"function":1,"if":1,"in":1,"instanceof":1,"new":1,"return":1,"switch":1,"throw":1,"try":1,"typeof":1,"var":1,"while":1,"with":1};var bB={"void":1,"null":1,"true":1,"false":1,"NaN":1,"Infinity":1,"this":1};var bx={"statics":1,"members":1,"construct":1,"destruct":1,"events":1,"properties":1,"extend":1,"implement":1};var bt=function(bM){return new RegExp(s+bM+u);};var bE=L;var bu=N;var bo=p;var bw=n;var br=I;var bz=t;var by=v;var bm=D;var bH=Y;var bJ=W;var bs=T;var bv=[O+bs+M,H+bs+B,w+bs+S,P+bs+X,C+bs+r].join(bc);var bF=bt(bE);var bp=bt(bu);var bC=bt(bo);var bl=bt(bw);var bI=bt(br);var bk=bt(bz);var bj=bt(by);var bD=bt(bm);var bq=bt(bH);var bi=bt(bJ);var bn=bt(bv);var bA=new RegExp([bE,bu,bo,bw,br,bz,by,by,bm,bH,bJ,bv,y].join(bc),G);var bG=[];var a=bh.match(bA);for(var i=0;i<a.length;i++){var bK=a[i];if(bK.match(bF)){bG.push({type:b,value:bK});}else if(bK.match(bp)){bG.push({type:bb,value:bK});}else if(bK.match(bn)){bG.push({type:be,value:bK});}else if(bK.match(bj)){bG.push({type:c,value:bK});}else if(bK.match(bk)){bG.push({type:e,value:bK});}else if(bL[bK]){bG.push({type:bf,value:bK});}else if(bB[bK]){bG.push({type:ba,value:bK});}else if(bx[bK]){bG.push({type:h,value:bK});}else if(bK.match(bC)){bG.push({type:bg,value:bK});}else if(bK.match(bI)){bG.push({type:q,value:bK});}else if(bK.match(bl)){bG.push({type:z,value:bK});}else if(bK.match(bq)){bG.push({type:j,value:bK});}else if(bK.match(bt(bi))){bG.push({type:g,value:bK});}else if(bK.match(bD)){bG.push({type:A,value:bK});}else if(bK==f){bG.push({type:k,value:f});}else if(bK==d){bG.push({type:k,value:d});}else if(bK==bd){bG.push({type:k,value:bd});}else{bG.push({type:k,value:bK});}}return bG;},javaScriptToHtml:function(bN){var bR=qx.dev.Tokenizer.tokenizeJavaScript(bN);var bQ=new qx.util.StringBuilder();for(var i=0;i<bR.length;i++){var bS=bR[i];var bP=qx.bom.String.escape(bS.value);switch(bS.type){case be:bQ.add(Q,bP,l);break;case bg:bQ.add(E,bP,l);break;case b:case bb:bQ.add(m,bP,l);break;case c:case e:bQ.add(o,bP,l);break;case bf:case ba:case h:bQ.add(U,bS.type,V,bP,l);break;case j:var bO=qx.bom.client.Engine.MSHTML?K:R;bQ.add(bO);break;case g:var bT=qx.bom.client.Engine.MSHTML?x:J;bQ.add(bT);break;default:bQ.add(bP);}}return bQ.get();}}});})();(function(){var f="mshtml",e="pop.push.reverse.shift.sort.splice.unshift.join.slice",d="number",c="qx.type.BaseArray",b="qx.client",a=".";qx.Class.define(c,{extend:Array,construct:function(g){},members:{toArray:null,valueOf:null,pop:null,push:null,reverse:null,shift:null,sort:null,splice:null,unshift:null,concat:null,join:null,slice:null,toString:null,indexOf:null,lastIndexOf:null,forEach:null,filter:null,map:null,some:null,every:null}});(function(){function k(l){if(qx.core.Variant.isSet(b,f)){j.prototype={length:0,$$isArray:true};var o=e.split(a);for(var length=o.length;length;){j.prototype[o[--length]]=Array.prototype[o[length]];}}var p=Array.prototype.slice;j.prototype.concat=function(){var r=this.slice(0);for(var i=0,length=arguments.length;i<length;i++){var q;if(arguments[i] instanceof j){q=p.call(arguments[i],0);}else if(arguments[i] instanceof Array){q=arguments[i];}else{q=[arguments[i]];}r.push.apply(r,q);}return r;};j.prototype.toString=function(){return p.call(this,0).toString();};j.prototype.toLocaleString=function(){return p.call(this,0).toLocaleString();};j.prototype.constructor=j;j.prototype.indexOf=qx.lang.Core.arrayIndexOf;j.prototype.lastIndexOf=qx.lang.Core.arrayLastIndexOf;j.prototype.forEach=qx.lang.Core.arrayForEach;j.prototype.some=qx.lang.Core.arraySome;j.prototype.every=qx.lang.Core.arrayEvery;var m=qx.lang.Core.arrayFilter;var n=qx.lang.Core.arrayMap;j.prototype.filter=function(){var s=new this.constructor;s.push.apply(s,m.apply(this,arguments));return s;};j.prototype.map=function(){var t=new this.constructor;t.push.apply(t,n.apply(this,arguments));return t;};j.prototype.slice=function(){var u=new this.constructor;u.push.apply(u,Array.prototype.slice.apply(this,arguments));return u;};j.prototype.splice=function(){var v=new this.constructor;v.push.apply(v,Array.prototype.splice.apply(this,arguments));return v;};j.prototype.toArray=function(){return Array.prototype.slice.call(this,0);};j.prototype.valueOf=function(){return this.length;};return j;}function j(length){if(arguments.length===1&&typeof length===d){this.length=-1<length&&length===length>>.5?length:this.push(length);}else if(arguments.length){this.push.apply(this,arguments);}}function h(){}h.prototype=[];j.prototype=new h;j.prototype.length=0;qx.type.BaseArray=k(j);})();})();(function(){var b="",a="qx.util.StringBuilder";qx.Class.define(a,{extend:qx.type.BaseArray,members:{clear:function(){this.length=0;},get:function(){return this.join(b);},add:null,isEmpty:function(){return this.length===0;},size:function(){return this.join(b).length;}},defer:function(c,d){d.add=d.push;d.toString=d.get;d.valueOf=d.get;}});})();(function(){var p="",o="!",n="'!",m="'",k="Expected '",j="' (rgb(",h=",",g=")), but found value '",f="Event (",d="Expected value to be the CSS color '",bw="' but found ",bv="The value '",bu=" != ",bt="qx.core.Object",bs="Expected value to be an array but found ",br=") was fired.",bq="Expected value to be an integer >= 0 but found ",bp="' to be not equal with '",bo="' to '",bn="qx.ui.core.Widget",w="Called assertTrue with '",x="Expected value to be a map but found ",u="The function did not raise an exception!",v="Expected value to be undefined but found ",s="Expected value to be a DOM element but found  '",t="Expected value to be a regular expression but found ",q="' to implement the interface '",r="Expected value to be null but found ",E="Invalid argument 'type'",F="Called assert with 'false'",R="Assertion error! ",N="Expected value to be a string but found ",ba="null",U="' but found '",bj="' must must be a key of the map '",bf="The String '",J="Expected value not to be undefined but found ",bm="qx.util.ColorUtil",bl=": ",bk="The raised exception does not have the expected type! ",I=") not fired.",L="qx.core.Assert",M="Expected value to be typeof object but found ",P="' (identical) but found '",S="' must have any of the values defined in the array '",V="Expected value to be a number but found ",bc="Called assertFalse with '",bh="]",y="Expected value to be a qooxdoo object but found ",z="' arguments.",K="Expected value not to be null but found ",Y="Array[",X="' does not match the regular expression '",W="' to be not identical with '",be="' arguments but found '",bd="', which cannot be converted to a CSS color!",T="Expected object '",bb="qx.core.AssertionError",a="Expected value to be a boolean but found ",bg="))!",A="Expected value to be a qooxdoo widget but found ",B="Expected value '%1' to be in the range '%2'..'%3'!",O="Expected value to be typeof '",b="Expected value to be typeof function but found ",c="Expected value to be an integer but found ",H="Called fail().",C="The parameter 're' must be a string or a regular expression.",D="Expected value to be a number >= 0 but found ",G="Expected value to be instanceof '",Q="Wrong number of arguments given. Expected '",bi="object";qx.Class.define(L,{statics:{__tN:true,__tO:function(bx,by){var bz=p;for(var i=1,l=arguments.length;i<l;i++){bz=bz+this.__tP(arguments[i]);}var bB=R+bx+bl+bz;if(this.__tN){qx.Bootstrap.error(bB);}if(qx.Class.isDefined(bb)){var bA=new qx.core.AssertionError(bx,bz);if(this.__tN){qx.Bootstrap.error("Stack trace: \n"+bA.getStackTrace());}throw bA;}else{throw new Error(bB);}},__tP:function(bC){var bD;if(bC===null){bD=ba;}else if(qx.lang.Type.isArray(bC)&&bC.length>10){bD=Y+bC.length+bh;}else if((bC instanceof Object)&&(bC.toString==null)){bD=qx.lang.Json.stringify(bC,null,2);}else{try{bD=bC.toString();}catch(e){bD=p;}}return bD;},assert:function(bE,bF){bE==true||this.__tO(bF||p,F);},fail:function(bG){this.__tO(bG||p,H);},assertTrue:function(bH,bI){(bH===true)||this.__tO(bI||p,w,bH,m);},assertFalse:function(bJ,bK){(bJ===false)||this.__tO(bK||p,bc,bJ,m);},assertEquals:function(bL,bM,bN){bL==bM||this.__tO(bN||p,k,bL,U,bM,n);},assertNotEquals:function(bO,bP,bQ){bO!=bP||this.__tO(bQ||p,k,bO,bp,bP,n);},assertIdentical:function(bR,bS,bT){bR===bS||this.__tO(bT||p,k,bR,P,bS,n);},assertNotIdentical:function(bU,bV,bW){bU!==bV||this.__tO(bW||p,k,bU,W,bV,n);},assertNotUndefined:function(bX,bY){bX!==undefined||this.__tO(bY||p,J,bX,o);},assertUndefined:function(ca,cb){ca===undefined||this.__tO(cb||p,v,ca,o);},assertNotNull:function(cc,cd){cc!==null||this.__tO(cd||p,K,cc,o);},assertNull:function(ce,cf){ce===null||this.__tO(cf||p,r,ce,o);},assertJsonEquals:function(cg,ch,ci){this.assertEquals(qx.lang.Json.stringify(cg),qx.lang.Json.stringify(ch),ci);},assertMatch:function(cj,ck,cl){this.assertString(cj);this.assert(qx.lang.Type.isRegExp(ck)||qx.lang.Type.isString(ck),C);cj.search(ck)>=0||this.__tO(cl||p,bf,cj,X,ck.toString(),n);},assertArgumentsCount:function(cm,cn,co,cp){var cq=cm.length;(cq>=cn&&cq<=co)||this.__tO(cp||p,Q,cn,bo,co,be,arguments.length,z);},assertEventFired:function(cr,event,cs,ct,cu){var cw=false;var cv=function(e){if(ct){ct.call(cr,e);}cw=true;};var cx;try{cx=cr.addListener(event,cv,cr);cs.call();}catch(cy){throw cy;}finally{try{cr.removeListenerById(cx);}catch(cz){}}cw===true||this.__tO(cu||p,f,event,I);},assertEventNotFired:function(cA,event,cB,cC){var cE=false;var cD=function(e){cE=true;};var cF=cA.addListener(event,cD,cA);cB.call();cE===false||this.__tO(cC||p,f,event,br);cA.removeListenerById(cF);},assertException:function(cG,cH,cI,cJ){var cH=cH||Error;var cK;try{this.__tN=false;cG();}catch(cL){cK=cL;}finally{this.__tN=true;}if(cK==null){this.__tO(cJ||p,u);}cK instanceof cH||this.__tO(cJ||p,bk,cH,bu,cK);if(cI){this.assertMatch(cK.toString(),cI,cJ);}},assertInArray:function(cM,cN,cO){cN.indexOf(cM)!==-1||this.__tO(cO||p,bv,cM,S,cN,m);},assertArrayEquals:function(cP,cQ,cR){this.assertArray(cP,cR);this.assertArray(cQ,cR);this.assertEquals(cP.length,cQ.length,cR);for(var i=0;i<cP.length;i++){this.assertIdentical(cP[i],cQ[i],cR);}},assertKeyInMap:function(cS,cT,cU){cT[cS]!==undefined||this.__tO(cU||p,bv,cS,bj,cT,m);},assertFunction:function(cV,cW){qx.lang.Type.isFunction(cV)||this.__tO(cW||p,b,cV,o);},assertString:function(cX,cY){qx.lang.Type.isString(cX)||this.__tO(cY||p,N,cX,o);},assertBoolean:function(da,db){qx.lang.Type.isBoolean(da)||this.__tO(db||p,a,da,o);},assertNumber:function(dc,dd){(qx.lang.Type.isNumber(dc)&&isFinite(dc))||this.__tO(dd||p,V,dc,o);},assertPositiveNumber:function(de,df){(qx.lang.Type.isNumber(de)&&isFinite(de)&&de>=0)||this.__tO(df||p,D,de,o);},assertInteger:function(dg,dh){(qx.lang.Type.isNumber(dg)&&isFinite(dg)&&dg%1===0)||this.__tO(dh||p,c,dg,o);},assertPositiveInteger:function(di,dj){var dk=(qx.lang.Type.isNumber(di)&&isFinite(di)&&di%1===0&&di>=0);dk||this.__tO(dj||p,bq,di,o);},assertInRange:function(dl,dm,dn,dp){(dl>=dm&&dl<=dn)||this.__tO(dp||p,qx.lang.String.format(B,[dl,dm,dn]));},assertObject:function(dq,dr){var ds=dq!==null&&(qx.lang.Type.isObject(dq)||typeof dq===bi);ds||this.__tO(dr||p,M,(dq),o);},assertArray:function(dt,du){qx.lang.Type.isArray(dt)||this.__tO(du||p,bs,dt,o);},assertMap:function(dv,dw){qx.lang.Type.isObject(dv)||this.__tO(dw||p,x,dv,o);},assertRegExp:function(dx,dy){qx.lang.Type.isRegExp(dx)||this.__tO(dy||p,t,dx,o);},assertType:function(dz,dA,dB){this.assertString(dA,E);typeof (dz)===dA||this.__tO(dB||p,O,dA,bw,dz,o);},assertInstance:function(dC,dD,dE){var dF=dD.classname||dD+p;dC instanceof dD||this.__tO(dE||p,G,dF,bw,dC,o);},assertInterface:function(dG,dH,dI){qx.Class.implementsInterface(dG,dH)||this.__tO(dI||p,T,dG,q,dH,n);},assertCssColor:function(dJ,dK,dL){var dM=qx.Class.getByName(bm);if(!dM){throw new Error("qx.util.ColorUtil not available! Your code must have a dependency on 'qx.util.ColorUtil'");}var dO=dM.stringToRgb(dJ);try{var dN=dM.stringToRgb(dK);}catch(dQ){this.__tO(dL||p,d,dJ,j,dO.join(h),g,dK,bd);}var dP=dO[0]==dN[0]&&dO[1]==dN[1]&&dO[2]==dN[2];dP||this.__tO(dL||p,d,dO,j,dO.join(h),g,dK,j,dN.join(h),bg);},assertElement:function(dR,dS){!!(dR&&dR.nodeType===1)||this.__tO(dS||p,s,dR,n);},assertQxObject:function(dT,dU){this.__tQ(dT,bt)||this.__tO(dU||p,y,dT,o);},assertQxWidget:function(dV,dW){this.__tQ(dV,bn)||this.__tO(dW||p,A,dV,o);},__tQ:function(dX,dY){if(!dX){return false;}var ea=dX.constructor;while(ea){if(ea.classname===dY){return true;}ea=ea.superclass;}return false;}}});})();(function(){var p='',o='"',m=':',l=']',h='null',g=': ',f='object',e='function',d=',',b='\n',ba='\\u',Y=',\n',X='0000',W='string',V="Cannot stringify a recursive object.",U='0',T='-',S='}',R='String',Q='Boolean',x='\\\\',y='\\f',u='\\t',w='{\n',s='[]',t="qx.lang.JsonImpl",q='Z',r='\\n',z='Object',A='{}',H='@',F='.',K='(',J='Array',M='T',L='\\r',C='{',P='JSON.parse',O=' ',N='[',B='Number',D=')',E='[\n',G='\\"',I='\\b';qx.Class.define(t,{extend:Object,construct:function(){this.stringify=qx.lang.Function.bind(this.stringify,this);this.parse=qx.lang.Function.bind(this.parse,this);},members:{__tT:null,__tU:null,__tV:null,__tW:null,stringify:function(bb,bc,bd){this.__tT=p;this.__tU=p;this.__tW=[];if(qx.lang.Type.isNumber(bd)){var bd=Math.min(10,Math.floor(bd));for(var i=0;i<bd;i+=1){this.__tU+=O;}}else if(qx.lang.Type.isString(bd)){if(bd.length>10){bd=bd.slice(0,10);}this.__tU=bd;}if(bc&&(qx.lang.Type.isFunction(bc)||qx.lang.Type.isArray(bc))){this.__tV=bc;}else{this.__tV=null;}return this.__tX(p,{'':bb});},__tX:function(be,bf){var bi=this.__tT,bg,bj=bf[be];if(bj&&qx.lang.Type.isFunction(bj.toJSON)){bj=bj.toJSON(be);}else if(qx.lang.Type.isDate(bj)){bj=this.dateToJSON(bj);}if(typeof this.__tV===e){bj=this.__tV.call(bf,be,bj);}if(bj===null){return h;}if(bj===undefined){return undefined;}switch(qx.lang.Type.getClass(bj)){case R:return this.__tY(bj);case B:return isFinite(bj)?String(bj):h;case Q:return String(bj);case J:this.__tT+=this.__tU;bg=[];if(this.__tW.indexOf(bj)!==-1){throw new TypeError(V);}this.__tW.push(bj);var length=bj.length;for(var i=0;i<length;i+=1){bg[i]=this.__tX(i,bj)||h;}this.__tW.pop();if(bg.length===0){var bh=s;}else if(this.__tT){bh=E+this.__tT+bg.join(Y+this.__tT)+b+bi+l;}else{bh=N+bg.join(d)+l;}this.__tT=bi;return bh;case z:this.__tT+=this.__tU;bg=[];if(this.__tW.indexOf(bj)!==-1){throw new TypeError(V);}this.__tW.push(bj);if(this.__tV&&typeof this.__tV===f){var length=this.__tV.length;for(var i=0;i<length;i+=1){var k=this.__tV[i];if(typeof k===W){var v=this.__tX(k,bj);if(v){bg.push(this.__tY(k)+(this.__tT?g:m)+v);}}}}else{for(var k in bj){if(Object.hasOwnProperty.call(bj,k)){var v=this.__tX(k,bj);if(v){bg.push(this.__tY(k)+(this.__tT?g:m)+v);}}}}this.__tW.pop();if(bg.length===0){var bh=A;}else if(this.__tT){bh=w+this.__tT+bg.join(Y+this.__tT)+b+bi+S;}else{bh=C+bg.join(d)+S;}this.__tT=bi;return bh;}},dateToJSON:function(bk){var bl=function(n){return n<10?U+n:n;};var bm=function(n){var bn=bl(n);return n<100?U+bn:bn;};return isFinite(bk.valueOf())?bk.getUTCFullYear()+T+bl(bk.getUTCMonth()+1)+T+bl(bk.getUTCDate())+M+bl(bk.getUTCHours())+m+bl(bk.getUTCMinutes())+m+bl(bk.getUTCSeconds())+F+bm(bk.getUTCMilliseconds())+q:null;},__tY:function(bo){var bp={'\b':I,'\t':u,'\n':r,'\f':y,'\r':L,'"':G,'\\':x};var bq=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;bq.lastIndex=0;if(bq.test(bo)){return o+bo.replace(bq,function(a){var c=bp[a];return typeof c===W?c:ba+(X+a.charCodeAt(0).toString(16)).slice(-4);})+o;}else{return o+bo+o;}},parse:function(br,bs){var bt=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;bt.lastIndex=0;if(bt.test(br)){br=br.replace(bt,function(a){return ba+(X+a.charCodeAt(0).toString(16)).slice(-4);});}if(/^[\],:{}\s]*$/.test(br.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,H).replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,l).replace(/(?:^|:|,)(?:\s*\[)+/g,p))){var j=eval(K+br+D);return typeof bs===e?this.__ua({'':j},p,bs):j;}throw new SyntaxError(P);},__ua:function(bu,bv,bw){var bx=bu[bv];if(bx&&typeof bx===f){for(var k in bx){if(Object.hasOwnProperty.call(bx,k)){var v=this.__ua(bx,k,bw);if(v!==undefined){bx[k]=v;}else{delete bx[k];}}}}return bw.call(bu,bv,bx);}}});})();(function(){var a="qx.lang.Json";qx.Class.define(a,{statics:{JSON:(qx.lang.Type.getClass(window.JSON)=="JSON"&&JSON.parse('{"x":1}').x===1)?window.JSON:new qx.lang.JsonImpl(),stringify:null,parse:null},defer:function(b){b.stringify=b.JSON.stringify;b.parse=b.JSON.parse;}});})();(function(){var g="",f="<br",e=" &nbsp;",d="<br>",c=" ",b="\n",a="qx.bom.String";qx.Class.define(a,{statics:{TO_CHARCODE:{"quot":34,"amp":38,"lt":60,"gt":62,"nbsp":160,"iexcl":161,"cent":162,"pound":163,"curren":164,"yen":165,"brvbar":166,"sect":167,"uml":168,"copy":169,"ordf":170,"laquo":171,"not":172,"shy":173,"reg":174,"macr":175,"deg":176,"plusmn":177,"sup2":178,"sup3":179,"acute":180,"micro":181,"para":182,"middot":183,"cedil":184,"sup1":185,"ordm":186,"raquo":187,"frac14":188,"frac12":189,"frac34":190,"iquest":191,"Agrave":192,"Aacute":193,"Acirc":194,"Atilde":195,"Auml":196,"Aring":197,"AElig":198,"Ccedil":199,"Egrave":200,"Eacute":201,"Ecirc":202,"Euml":203,"Igrave":204,"Iacute":205,"Icirc":206,"Iuml":207,"ETH":208,"Ntilde":209,"Ograve":210,"Oacute":211,"Ocirc":212,"Otilde":213,"Ouml":214,"times":215,"Oslash":216,"Ugrave":217,"Uacute":218,"Ucirc":219,"Uuml":220,"Yacute":221,"THORN":222,"szlig":223,"agrave":224,"aacute":225,"acirc":226,"atilde":227,"auml":228,"aring":229,"aelig":230,"ccedil":231,"egrave":232,"eacute":233,"ecirc":234,"euml":235,"igrave":236,"iacute":237,"icirc":238,"iuml":239,"eth":240,"ntilde":241,"ograve":242,"oacute":243,"ocirc":244,"otilde":245,"ouml":246,"divide":247,"oslash":248,"ugrave":249,"uacute":250,"ucirc":251,"uuml":252,"yacute":253,"thorn":254,"yuml":255,"fnof":402,"Alpha":913,"Beta":914,"Gamma":915,"Delta":916,"Epsilon":917,"Zeta":918,"Eta":919,"Theta":920,"Iota":921,"Kappa":922,"Lambda":923,"Mu":924,"Nu":925,"Xi":926,"Omicron":927,"Pi":928,"Rho":929,"Sigma":931,"Tau":932,"Upsilon":933,"Phi":934,"Chi":935,"Psi":936,"Omega":937,"alpha":945,"beta":946,"gamma":947,"delta":948,"epsilon":949,"zeta":950,"eta":951,"theta":952,"iota":953,"kappa":954,"lambda":955,"mu":956,"nu":957,"xi":958,"omicron":959,"pi":960,"rho":961,"sigmaf":962,"sigma":963,"tau":964,"upsilon":965,"phi":966,"chi":967,"psi":968,"omega":969,"thetasym":977,"upsih":978,"piv":982,"bull":8226,"hellip":8230,"prime":8242,"Prime":8243,"oline":8254,"frasl":8260,"weierp":8472,"image":8465,"real":8476,"trade":8482,"alefsym":8501,"larr":8592,"uarr":8593,"rarr":8594,"darr":8595,"harr":8596,"crarr":8629,"lArr":8656,"uArr":8657,"rArr":8658,"dArr":8659,"hArr":8660,"forall":8704,"part":8706,"exist":8707,"empty":8709,"nabla":8711,"isin":8712,"notin":8713,"ni":8715,"prod":8719,"sum":8721,"minus":8722,"lowast":8727,"radic":8730,"prop":8733,"infin":8734,"ang":8736,"and":8743,"or":8744,"cap":8745,"cup":8746,"int":8747,"there4":8756,"sim":8764,"cong":8773,"asymp":8776,"ne":8800,"equiv":8801,"le":8804,"ge":8805,"sub":8834,"sup":8835,"sube":8838,"supe":8839,"oplus":8853,"otimes":8855,"perp":8869,"sdot":8901,"lceil":8968,"rceil":8969,"lfloor":8970,"rfloor":8971,"lang":9001,"rang":9002,"loz":9674,"spades":9824,"clubs":9827,"hearts":9829,"diams":9830,"OElig":338,"oelig":339,"Scaron":352,"scaron":353,"Yuml":376,"circ":710,"tilde":732,"ensp":8194,"emsp":8195,"thinsp":8201,"zwnj":8204,"zwj":8205,"lrm":8206,"rlm":8207,"ndash":8211,"mdash":8212,"lsquo":8216,"rsquo":8217,"sbquo":8218,"ldquo":8220,"rdquo":8221,"bdquo":8222,"dagger":8224,"Dagger":8225,"permil":8240,"lsaquo":8249,"rsaquo":8250,"euro":8364},escape:function(h){return qx.util.StringEscape.escape(h,qx.bom.String.FROM_CHARCODE);},unescape:function(i){return qx.util.StringEscape.unescape(i,qx.bom.String.TO_CHARCODE);},fromText:function(j){return qx.bom.String.escape(j).replace(/(  |\n)/g,function(k){var l={"  ":e,"\n":d};return l[k]||k;});},toText:function(m){return qx.bom.String.unescape(m.replace(/\s+|<([^>])+>/gi,function(n){if(n.indexOf(f)===0){return b;}else if(n.length>0&&n.replace(/^\s*/,g).replace(/\s*$/,g)==g){return c;}else{return g;}}));}},defer:function(o){o.FROM_CHARCODE=qx.lang.Object.invert(o.TO_CHARCODE);}});})();(function(){var g=";",f="&",e='X',d="",c='#',b="&#",a="qx.util.StringEscape";qx.Class.define(a,{statics:{escape:function(h,j){var m,o=d;for(var i=0,l=h.length;i<l;i++){var n=h.charAt(i);var k=n.charCodeAt(0);if(j[k]){m=f+j[k]+g;}else{if(k>0x7F){m=b+k+g;}else{m=n;}}o+=m;}return o;},unescape:function(p,q){return p.replace(/&[#\w]+;/gi,function(r){var s=r;var r=r.substring(1,r.length-1);var t=q[r];if(t){s=String.fromCharCode(t);}else{if(r.charAt(0)==c){if(r.charAt(1).toUpperCase()==e){t=r.substring(2);if(t.match(/^[0-9A-Fa-f]+$/gi)){s=String.fromCharCode(parseInt(t,16));}}else{t=r.substring(1);if(t.match(/^\d+$/gi)){s=String.fromCharCode(parseInt(t,10));}}}}return s;});}}});})();(function(){var bU="",bT='</div>',bS='<div class="item-detail-text">',bR='<div class="item-detail-headline">',bQ="#",bP='</td>',bO="'",bN="(",bM='">',bL=" ",bv=".",bu=",'",bt=")",bs=".toggleShowItemDetails('",br='"',bq="&nbsp;",bp='<div class="item-detail-error">',bo="none",bn="</p>",bm='" onclick="',cc=')">',cd="properties",ca='>',cb="events",bX="methods",bY="mixin",bV='.togglePanelVisibility(',bW='</span>',ce="apiviewer.ObjectRegistry.getObjectFromHashCode('",cf='<td class="type">',bE='<td class="toggle">',bD="apiviewer/image/open.gif",bG='<div class="info-panel"><h2>',bF="apiviewer.dao.Node",bI="Inherited from:",bH='open.gif',bK='\'); return false;"',bJ=' title="',bC='//',bB="</span>",a="'>",b="Documentation errors:",c="<span class='",d='package',e='#',f='" onmouseup="apiviewer.TabViewController.instance.onSelectItem(\'',g='" href="',h="Included from mixin:",k=' onclick="',m=", Column:",cj="; ",ci="&#160;",ch="margin-left:18px;",cg='<td class="text">',cn=" <br/>",cm="See also:",cl="Deprecated:",ck='<a style="',cp='<img src="',co=" is deprecated!",L='apiviewer/image/',M='apiviewer/image/open.gif',J="[]",K="apiviewer.ui.panels.InfoPanel",P='close.gif',Q="_itemName",N='<',O='" alt="',H="Boolean",I="Line: ",u='<h3',t="This ",w='</h2><div></div></div>',v='<span onclick="',q="item-private",p="class",s="item-internal",r="Access:",o="interface",n='title="',V='<td class="icon" ',W='" onclick="return false;"',X='</h3>',Y="')",R=" | ",S=", ",T="private",U="Element",ba='<tr class="',bb='apiviewer/image/close.gif',E='</tr>',D="item-deprecated",C="item-protected",B='<div _itemName="',A='',z='</a></span>',y="qx.client",x="Required by:",G=')"/>',F="overlay_",bc='<img class="openclose" src="',bd="String",be="Overrides:",bf="_applyElement",bg="internal",bh='<span style="white-space: nowrap;">',bi="TBODY",bj='<div class="item-desc">',bk='<table cellspacing="0" cellpadding="0" class="info" width="100%">',bl=')"/> ',bz="abstract",by="protected",bx="webkit",bw='</table>',bA="undefined";qx.Class.define(K,{type:bz,extend:qx.core.Object,construct:function(cq,cr){qx.core.Object.call(this);this.setListName(cq);this._labelText=cr;apiviewer.ObjectRegistry.register(this);},properties:{element:{check:U,init:null,nullable:true,apply:bf},listName:{check:bd},isOpen:{check:H,init:true},docNode:{check:bF,nullable:true}},statics:{ITEM_SPEC_REGEX:/^(([\w\.]+)?(#\w+(\([^\)]*\))?)?)(\s+(.*))?$/,SENTENCE_END_REGEX:/[^\.].\.(\s|<)/,resolveLinkAttributes:function(cs,ct){var cw=/\{@link([^\}]*)\}/mg;var cv=new qx.util.StringBuilder();var cu;var cx=0;while((cu=cw.exec(cs))!=null){cv.add(cs.substring(cx,cu.index)+this.createItemLinkHtml(cu[1],ct));cx=cu.index+cu[0].length;}cv.add(cs.substring(cx,cs.length));return cv.get();},createItemLinkHtml:function(cy,cz,cA,cB){if(cA==null){cA=true;}cy=qx.lang.String.trim(cy);if(cy.charAt(0)==br||cy.charAt(0)==N){return cy;}else{var cE=this.ITEM_SPEC_REGEX.exec(cy);if(cE==null){return cy;}else{var cK=cE[2];var cS=cE[3];var cJ=cE[6];var cD=bU;if(cK==null||cK.length==0){cK=cz.getFullName();}else if(cz&&cK.indexOf(bv)==-1){var name=cz.getName();if(cz instanceof apiviewer.dao.Package){var cG=cz.getFullName();}else{var cQ=cz.getFullName();var cG=cQ.substring(0,cQ.length-name.length-1);}cK=cG+bv+cK;}if(cJ==null||cJ.length==0){cJ=cE[1];}if(cA){var cO=apiviewer.dao.Class.getClassByName(cK);if(cO){var cT;if(cS){var cI=cS.substring(1);var cM=cI.indexOf(bN);if(cM!=-1){cI=qx.lang.String.trim(cI.substring(0,cM));}cT=this.__St(cI,cO);}else{cT=cO;}if(cT){if(cT.getNodeType()!==d){cK=cT.getClass().getFullName();}var cL=apiviewer.TreeUtil.getIconUrl(cT);var cC=apiviewer.ui.ClassViewer.createImageHtml(cL);if(qx.core.Variant.isSet(y,bx)){if(cC.indexOf(F)!==-1){cD=ch;}}}}}var cR=cK+(cS?cS:bU);var cP,cH,cN;if(qx.bom.client.Engine.OPERA&&qx.bom.client.Engine.VERSION>9){cP=location.protocol;cH=location.host;cN=location.pathname;}else{cP=window.location.protocol;cH=window.location.host;cN=window.location.pathname;}var cF=[bh,(typeof cC!=bA?cC:bU),ck+cD+g+cP,bC,cH,cN,e,cR,W,f,cR,bK,bJ,cR,bM,cJ,z];return cF.join(bU);}}},createSeeAlsoHtml:function(cU){var cV=cU.getSee();if(cV.length>0){var cX=new qx.util.StringBuilder();for(var i=0;i<cV.length;i++){if(cX.length!=0){cX.add(S);}cX.add(this.createItemLinkHtml(cV[i],cU.getClass()));}if(!cX.isEmpty()){var cW=new qx.util.StringBuilder();cW.add(bR,cm,bT,bS,cX,bT);return cW.get();}}return bU;},createInheritedFromHtml:function(cY,da){if(cY.getClass().getType()!=bY&&cY.getClass()!=da){var db=new qx.util.StringBuilder(bR,bI,bT,bS,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(cY.getClass().getFullName()+bQ+cY.getName()),bT);return db.get();}else{return bU;}},createOverwriddenFromHtml:function(dc){if(dc.getOverriddenFrom()){var dd=new qx.util.StringBuilder(bR,be,bT,bS,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(dc.getOverriddenFrom().getFullName()+bQ+dc.getName()),bT);return dd.get();}else{return bU;}},createIncludedFromHtml:function(de,df){if(de.getClass()!=df){if(de.getClass().getType()==bY){var dg=new qx.util.StringBuilder(bR,h,bT,bS,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(de.getClass().getFullName()+bQ+de.getName()),bT);return dg.get();}}else{return bU;}},__St:function(dh,di){var dk=di.getItem(dh);if(dk){return dk;}else{var dl=di.getClassHierarchy();for(var i=0,l=dl.length;i<l;i++){var dj=dl[i];dk=dj.getItem(dh);if(dk){break;}}return dk;}},createDescriptionHtml:function(dm,dn,dp){var dq=dm.getDescription();if(dq){if(!dp){dq=this.__Su(dq);}return bj+this.resolveLinkAttributes(dq,dn)+bT;}else{return bU;}},__Su:function(dr){var du=dr;var dt=du.indexOf(bn);if(dt!=-1){du=du.substr(0,dt+4);var ds=this.SENTENCE_END_REGEX.exec(du);if(ds!=null){du=dr.substring(0,ds.index+ds[0].length-1)+bn;}}return du;},descriptionHasDetails:function(dv){var dw=dv.getDescription();if(dw){return this.__Su(dw)!=dw;}else{return false;}},createTypeHtml:function(dx,dy,dz){if(dz==null){dz=true;}var dF=[];var dA,dB,dC;if(dx){dF=dx.getTypes();}var dD=new qx.util.StringBuilder();if(dF.length==0){dD.add(dy);}else{if(dF.length>1){dD.add(bN);}for(var j=0;j<dF.length;j++){if(j>0){dD.add(R);}dB=dF[j].type;dA=dF[j].dimensions;if(apiviewer.ui.ClassViewer.PRIMITIVES[dB]){dD.add(dB);}else{dC=dB;if(dz){var dE=dB.lastIndexOf(bv);if(dE!=-1){dC+=bL+dB.substring(dE+1);}}dD.add(apiviewer.ui.panels.InfoPanel.createItemLinkHtml(dC,dx.getClass(),false,true));}if(dA){for(var i=0;i<parseInt(dA);i++){dD.add(J);}}}if(dF.length>1){dD.add(bt);}}return dD.get();},createErrorHtml:function(dG,dH){var dI=dG.getDocNode();var dJ=dI.getErrors();if(dJ.length>0){var dK=new qx.util.StringBuilder(bp,b,bT);for(var i=0;i<dJ.length;i++){dK.add(bS,dJ[i].attributes.msg,cn);dK.add(bN);if(dG.getClass()!=dH){dK.add(dG.getClass().getFullName(),cj);}dK.add(I,dJ[i].attributes.line,m,dJ[i].attributes.column+bt,bT);}return dK.get();}else{return bU;}},createDeprecationHtml:function(dL,dM){if(!dL.isDeprecated()){return bU;}var dN=new qx.util.StringBuilder();dN.add(bp,cl,bT);dN.add(bS);var dO=dL.getDeprecationText();if(dO){dN.add(dO);}else{dN.add(t,dM,co);}dN.add(bT);return dN.get();},createAccessHtml:function(dP){if(dP.isPublic()){return bU;}var dR=new qx.util.StringBuilder();dR.add(bR,r,bT);dR.add(bS);var dQ=[];if(dP.isPrivate()){dQ.push(T);}if(dP.isInternal()){dQ.push(bg);}if(dP.isProtected()){dQ.push(by);}dR.add(dQ.join(bL));dR.add(bT);return dR.get();},createInfoRequiredByHtml:function(dS){var dU=new qx.util.StringBuilder();var dT=dS.getRequiredBy();if(dT.length>0){dU.add(bR,x,bT);for(var i=0;i<dT.length;i++){dU.add(bS,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(dT[i].getFullName()+bQ+dS.getName()),bT);}}return dU.get();},setTitleClass:function(dV,dW){var dX=[c,bU,a,dW,bB];dX[1]=this.getItemCssClasses(dV);return dX.join(bU);},getItemCssClasses:function(dY){var ea=[];if(dY.isDeprecated()){ea.push(D);}if(dY.isPrivate()){ea.push(q);}if(dY.isInternal()){ea.push(s);}if(dY.isProtected()){ea.push(C);}return ea.join(bL);}},members:{canDisplayItem:function(eb){return (eb.getListName()==this.getListName());},getItemTypeHtml:function(ec,ed){throw new Error("Abstract method called!");},getItemTitleHtml:function(ee,ef){throw new Error("Abstract method called!");},getItemTextHtml:function(eg,eh,ei){throw new Error("Abstract method called!");},getItemTooltip:function(ej,ek){return bU;},getItemHtml:function(el,em,en){if((el instanceof apiviewer.dao.Class)||el instanceof apiviewer.dao.Package){var es=el.getPackage();}else{var es=el.getClass();}var er=new qx.util.StringBuilder();var et=(es!=em)&&es.getType()==p;var eq=apiviewer.TreeUtil.getIconUrl(el,et);er.add(ba,apiviewer.ui.panels.InfoPanel.getItemCssClasses(el),bM);var eu=this.getItemTooltip(el,em);var ep=eu?n+eu+O+eu+br:A;er.add(V,ep,ca,apiviewer.ui.ClassViewer.createImageHtml(eq),bP);var eo=this.getItemTypeHtml(el,em);er.add(cf,((eo)?(eo+bq):bq),bP);er.add(bE);if(this.itemHasDetails(el,em)){er.add(cp,qx.util.ResourceManager.getInstance().toUri(bD),bm,this.__Sv(this),bs,el.getName(),bO,((es!=em)?bu+es.getFullName()+bO:bU),G);}else{er.add(ci);}er.add(bP);er.add(cg);er.add(u);if(this.itemHasDetails(el,em)){er.add(k,this.__Sv(this),bs,el.getName(),bO,((es!=em)?bu+es.getFullName()+bO:bU),cc);}else{er.add(ca);}er.add(this.getItemTitleHtml(el,em));er.add(X);er.add(B,el.getName(),bM);er.add(this.getItemTextHtml(el,em,en));er.add(bT);er.add(bP);er.add(E);return er.get();},itemHasDetails:qx.lang.Function.returnTrue,__Sv:function(ev){return ce+ev.toHashCode()+Y;},getPanelHtml:function(ew){var ey=this._labelText.charAt(0).toUpperCase()+this._labelText.substring(1);var ex=new qx.util.StringBuilder(bG);ex.add(bc,qx.util.ResourceManager.getInstance().toUri(L+(this.getIsOpen()?P:bH)),bm,this.__Sv(ew),bV+this.__Sv(this),bl,v,this.__Sv(ew),bV,this.__Sv(this),cc,ey,bW);ex.add(w);return ex.get();},_getPanelItems:function(ez,eA){if(!eA){return [];}var eB=this.getListName();var eD=[];var eG={};if(ez&&(eB==cb||eB==cd||eB==bX)){if(eA.getType()==o){var eE=eA.getInterfaceHierarchy();}else{var eE=eA.getClassHierarchy();}}else{eE=[eA];}for(var eH=0;eH<eE.length;eH++){var eF=eE[eH];var eC=eF.getItemList(eB);if(eB==cb||eB==cd||eB==bX){qx.lang.Array.append(eC,eF.getNodesOfTypeFromMixins(this.getListName()));}for(var i=0;i<eC.length;i++){var name=eC[i].getName();if(!(Object.prototype.hasOwnProperty.call(eG,name))){eG[name]=eF;eD.push(eC[i]);}}}return eD;},__Sw:function(eI,eJ,eK,eL,eM){var eO=eI.concat();for(var i=eI.length-1;i>=0;i--){var eN=eI[i];if(eN.isPropertyGenerated()&&!eJ){qx.lang.Array.removeAt(eO,i);}else if(eN.isPrivate()&&!eL){qx.lang.Array.removeAt(eO,i);}else if(eN.isProtected()&&!eK){qx.lang.Array.removeAt(eO,i);}else if(eN.isInternal()&&!eM){qx.lang.Array.removeAt(eO,i);}}return eO;},_sortItems:function(eP){eP.sort(function(eQ,eR){var eU=0;if(eQ.isInternal()){eU+=4;}if(eQ.isPrivate()){eU+=2;}if(eQ.isProtected()){eU+=1;}var eT=0;if(eR.isInternal()){eT+=4;}if(eR.isPrivate()){eT+=2;}if(eR.isProtected()){eT+=1;}if(eU==eT){var eV=eQ.getName();var eS=eR.getName();return eV.toLowerCase()<eS.toLowerCase()?-1:1;}else{return eU-eT;}});},_displayNodes:function(eW,eX){if(eW&&eW.length>0){var eY=new qx.util.StringBuilder(bk);for(var i=0;i<eW.length;i++){eY.add(this.getItemHtml(eW[i],eX,false));}eY.add(bw);this.getBodyElement().innerHTML=eY.get();apiviewer.ui.AbstractViewer.fixLinks(this.getBodyElement());apiviewer.ui.AbstractViewer.highlightCode(this.getBodyElement());this.getBodyElement().style.display=!this.getIsOpen()?bo:bU;this.getElement().style.display=bU;}else{this.getElement().style.display=bo;}},update:function(fa,fb){if(!this.getElement()){return;}this.setDocNode(fb);var ff=fa.getShowInherited();var fc=this._getPanelItems(ff,fb);if(fc&&fc.length>0){var fh=fa.getExpandProperties();var fd=fa.getShowProtected();var fg=fa.getShowPrivate();var fe=fg;fc=this.__Sw(fc,fh,fd,fg,fe);this._sortItems(fc);}this._displayNodes(fc,fb);},_applyElement:function(fi){this._titleElement=fi.firstChild;this._bodyElement=fi.lastChild;},getTitleElement:function(){return this._titleElement;},getBodyElement:function(){return this._bodyElement;},getItemElement:function(name){var fj=this.getBodyElement().getElementsByTagName(bi)[0].childNodes;for(var i=0;i<fj.length;i++){if(fj[i].childNodes[3].childNodes[1].getAttribute(Q)==name){return fj[i].childNodes[3].childNodes[1];}}},toggleShowItemDetails:function(fk,fl){try{var fn=this.getItemElement(fk);if(!fn){throw Error("Element for name '"+fk+"' not found!");}var fm=fn._showDetails?!fn._showDetails:true;fn._showDetails=fm;if(fl){var fq=apiviewer.dao.Class.getClassByName(fl);}else{fq=this.getDocNode();}var fo=fq.getItemByListAndName(this.getListName(),fk);var fp=fn.parentNode.previousSibling.firstChild;fp.src=qx.util.ResourceManager.getInstance().toUri(fm?bb:M);fn.innerHTML=this.getItemTextHtml(fo,this.getDocNode(),fm);apiviewer.ui.AbstractViewer.fixLinks(fn);apiviewer.ui.AbstractViewer.highlightCode(fn);}catch(fr){this.error("Toggling item details failed");this.error(fr);}}},destruct:function(){this._titleElement=this._bodyElement=null;}});})();(function(){var k='</div>',j='<div class="item-detail-text">',h='<div class="item-detail-headline">',g='</span>',f="var",e='<span class="parameter-type">',d=" ",c="function",b='</span> <code>',a="<code>",D="Parameters:",C="Throws:",B="Apply method of property:",A='</code>',z=") ",y="</code>",x="apiviewer.ui.panels.MethodPanel",w="void",v='<span class="method-signature"><span class="parenthesis">(</span>',u="Returns:",r=" (default: ",s="[]",p='<span class="separator">,</span> ',q='<span class="parenthesis">)</span></span>',n="Creates a new instance of ",o='<span class="item-detail-optional">',l="?",m="abstract ",t=".";qx.Class.define(x,{extend:apiviewer.ui.panels.InfoPanel,members:{getItemTitleHtml:function(E){if(E.isConstructor()){var I=E.getClass().getName();}else{I=E.getName();}var F=new qx.util.StringBuilder(apiviewer.ui.panels.InfoPanel.setTitleClass(E,I));F.add(v);var G=E.getParams();for(var i=0;i<G.length;i++){var H=G[i];if(i!=0){F.add(p);}F.add(e,apiviewer.ui.panels.InfoPanel.createTypeHtml(H,f),b,H.getName(),A);if(H.getDefaultValue()){F.add(l);}}F.add(q);return F.get();},getItemTypeHtml:function(J){var K=new qx.util.StringBuilder();if(J.isAbstract()){K.add(m);}if(!J.isConstructor()){K.add(apiviewer.ui.panels.InfoPanel.createTypeHtml(J.getDocNode().getReturn(),w));}return K.get();},getItemTextHtml:function(L,M,N){var U=L.getClass();var X=new qx.util.StringBuilder();if(L.isConstructor()&&!L.getDescription()){X.add(n,U.getName(),t);}else{X.add(apiviewer.ui.panels.InfoPanel.createDescriptionHtml(L,U,N));}if(N){var V=L.getDocNode().getParams();if(V.length>0){X.add(h,D,k);for(var i=0;i<V.length;i++){var R=V[i];var O=R.getType()?R.getType():f;var T=R.getArrayDimensions();if(T){for(var i=0;i<T;i++){O+=s;}}var Y=R.getDefaultValue();X.add(j);if(Y){X.add(o);}X.add(a,R.getName(),y);if(Y){X.add(r,Y,z,g);}var ba=R.getDescription();if(ba){X.add(d,apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(ba,U));}X.add(k);}}var P=L.getDocNode().getReturn();if(P){var ba=P.getDescription();if(ba){X.add(h,u,k,j,apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(ba,U),k);}}if(L.getApply()){X.add(h,B,k,j,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(L.getApply(),L.getClass(),true,true),k);}var S=L.getDocNode().getThrows();if(S.length>0){X.add(h,C,k);for(var i=0;i<S.length;i++){var W=S[i];var Q=W.getType()?W.getType():W.getDefaultType();X.add(j);X.add(e,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(Q),g);var ba=W.getDescription();if(ba){X.add(d,apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(ba,U));}X.add(k);}}X.add(apiviewer.ui.panels.InfoPanel.createAccessHtml(L));X.add(apiviewer.ui.panels.InfoPanel.createIncludedFromHtml(L,M));X.add(apiviewer.ui.panels.InfoPanel.createOverwriddenFromHtml(L));X.add(apiviewer.ui.panels.InfoPanel.createInheritedFromHtml(L,M));X.add(apiviewer.ui.panels.InfoPanel.createInfoRequiredByHtml(L));X.add(apiviewer.ui.panels.InfoPanel.createSeeAlsoHtml(L));X.add(apiviewer.ui.panels.InfoPanel.createErrorHtml(L,M));X.add(apiviewer.ui.panels.InfoPanel.createDeprecationHtml(L,c));}return X.get();},itemHasDetails:function(bb,bc){var bd=bb.getDocNode();var be=bd.getReturn()&&bd.getReturn().getDescription();return (bb.getClass()!=bc||bb.getOverriddenFrom()!=null||bb.getRequiredBy().length>0||bd.getParams().length>0||bd.getThrows().length>0||be||bb.getSee().length>0||bb.getErrors().length>0||bb.isDeprecated()||bb.getApply()||apiviewer.ui.panels.InfoPanel.descriptionHasDetails(bb));}}});})();(function(){var h="",g="deprecated",f="internal",e="protected",d="errors",c="apiviewer.dao.Node",b="string",a="private";qx.Class.define(c,{extend:qx.core.Object,construct:function(j){qx.core.Object.call(this);this._docNode=j;j.children=j.children||[];j.attributes=j.attributes||{};j.cls=this;this._initializeFields();for(var i=0;i<j.children.length;i++){var k=j.children[i];if(!this._addChildNode(k)){throw new Error("Unknown child type: "+k.type+" node: "+qx.util.Json.stringify(k));}}},members:{getNode:function(){return this._docNode;},getNodeType:function(){return this._docNode.type;},getErrors:function(){return this._errors;},getDeprecationText:function(){return this._deprecated||h;},isDeprecated:function(){return typeof (this._deprecated)==b?true:false;},isInternal:function(){return this._docNode.attributes.access==f;},isPrivate:function(){return this._docNode.attributes.access==a;},isProtected:function(){return this._docNode.attributes.access==e;},isPropertyGenerated:function(){return this._docNode.attributes.fromProperty!=null;},isPublic:function(){return (!this.isPrivate()&&!this.isProtected()&&!this.isInternal());},hasWarning:function(){return this._docNode.attributes.hasWarning||false;},_createNodeList:function(l,m,n,o){if(m){var p=[];for(var i=0;i<l.children.length;i++){p.push(new m(l.children[i],n,o));}return p;}else{return l.children;}},_initializeFields:function(){this._errors=[];},_addChildNode:function(q){switch(q.type){case g:this._deprecated=q.children?q.children[0].attributes.text||h:h;break;case d:this._errors=this._createNodeList(q);break;default:return false;}return true;}},destruct:function(){this._docNode=this._errors=null;}});})();(function(){var k="",h="getClasses",g="getPackages",f="functions",e="getFunctions",d="packages",c="desc",b="classes",a="apiviewer.dao.Package";qx.Class.define(a,{extend:apiviewer.dao.Node,construct:function(l,m){apiviewer.dao.Node.call(this,l);this._package=m;apiviewer.dao.Class.registerClass(this);},members:{getName:function(){return this._docNode.attributes.name;},getFullName:function(){return this._docNode.attributes.fullName||k;},getDescription:function(){return this._desc||k;},getClasses:function(){return this._classes;},getFunctions:function(){return this._functions;},getPackages:function(){return this._packages;},getPackage:function(){return this._package;},addClass:function(n){var o=n.getFullName();var p=this.getClasses();for(var i=0;i<p.length;i++){if(p[i].getFullName()==o){p[i]=n;return;}}p.push(n);},getItem:function(q){var r=[h,g];for(var i=0;i<r.length;i++){var s=this[r[i]]();for(var j=0;j<s.length;j++){if(q==s[j].getName()){return s[j];}}}},getItemList:function(t){var u={"classes":h,"packages":g,"functions":e};return this[u[t]]();},getItemByListAndName:function(v,w){var x=this.getItemList(v);for(var j=0;j<x.length;j++){if(w==x[j].getName()){return x[j];}}},_initializeFields:function(){apiviewer.dao.Node.prototype._initializeFields.call(this);this._classes=[];this._packages=[];this._functions=[];},_addChildNode:function(y){switch(y.type){case b:this._classes=this._createNodeList(y,apiviewer.dao.Class,this);break;case f:this._functions=this._createNodeList(y,apiviewer.dao.Method,this);break;case d:this._packages=this._createNodeList(y,apiviewer.dao.Package,this);break;case c:this._desc=y.attributes.text||k;break;default:return apiviewer.dao.Node.prototype._addChildNode.call(this,y);}return true;}},destruct:function(){this._package=this._classes=this._functions=this._packages=null;}});})();(function(){var n=",",m="",k="string",j="null",h='"',g=':',f="qx.jsonDebugging",e='-',d='\\u00',c="__qL",N="new Date(Date.UTC(",M='\\\\',L='\\f',K='\\"',J='Z',I="))",H="__qB",G="__qD",F="}",E='(',u='.',v="{",s='\\r',t=":",q='\\t',r="]",o="[",p="__qE",w="qx.jsonEncodeUndefined",x='T',z='\\b',y="__qC",B="qx.util.Json",A=')',D='\\n',C="__qM";qx.Class.define(B,{statics:{__qz:null,BEAUTIFYING_INDENT:"  ",BEAUTIFYING_LINE_END:"\n",CONVERT_DATES:null,__qA:{"function":H,"boolean":y,"number":G,"string":p,"object":c,"undefined":C},__qB:function(O,P){return String(O);},__qC:function(Q,R){return String(Q);},__qD:function(S,T){return isFinite(S)?String(S):j;},__qE:function(U,V){var W;if(/["\\\x00-\x1f]/.test(U)){W=U.replace(/([\x00-\x1f\\"])/g,qx.util.Json.__qG);}else{W=U;}return h+W+h;},__qF:{'\b':z,'\t':q,'\n':D,'\f':L,'\r':s,'"':K,'\\':M},__qG:function(a,b){var X=qx.util.Json.__qF[b];if(X){return X;}X=b.charCodeAt();return d+Math.floor(X/16).toString(16)+(X%16).toString(16);},__qH:function(Y,ba){var bc=[],bf=true,be,bb;var bd=qx.util.Json.__qO;bc.push(o);if(bd){qx.util.Json.__qI+=qx.util.Json.BEAUTIFYING_INDENT;bc.push(qx.util.Json.__qI);}for(var i=0,l=Y.length;i<l;i++){bb=Y[i];be=this.__qA[typeof bb];if(be){bb=this[be](bb,i+m);if(typeof bb==k){if(!bf){bc.push(n);if(bd){bc.push(qx.util.Json.__qI);}}bc.push(bb);bf=false;}}}if(bd){qx.util.Json.__qI=qx.util.Json.__qI.substring(0,qx.util.Json.__qI.length-qx.util.Json.BEAUTIFYING_INDENT.length);bc.push(qx.util.Json.__qI);}bc.push(r);return bc.join(m);},__qJ:function(bg,bh){if(!qx.util.Json.CONVERT_DATES){if(bg.toJSON&&!qx.bom.client.Engine.OPERA){return bg.toJSON();}var bi=qx.util.format.NumberFormat.getInstance();bi.setMinimumIntegerDigits(2);var bk=bg.getUTCFullYear()+e+bi.format(bg.getUTCMonth()+1)+e+bi.format(bg.getUTCDate())+x+bi.format(bg.getUTCHours())+g+bi.format(bg.getUTCMinutes())+g+bi.format(bg.getUTCSeconds())+u;bi.setMinimumIntegerDigits(3);return bk+bi.format(bg.getUTCMilliseconds())+J;}else{var bj=bg.getUTCFullYear()+n+bg.getUTCMonth()+n+bg.getUTCDate()+n+bg.getUTCHours()+n+bg.getUTCMinutes()+n+bg.getUTCSeconds()+n+bg.getUTCMilliseconds();return N+bj+I;}},__qK:function(bl,bm){var bp=[],br=true,bo,bn;var bq=qx.util.Json.__qO;bp.push(v);if(bq){qx.util.Json.__qI+=qx.util.Json.BEAUTIFYING_INDENT;bp.push(qx.util.Json.__qI);}for(var bm in bl){bn=bl[bm];bo=this.__qA[typeof bn];if(bo){bn=this[bo](bn,bm);if(typeof bn==k){if(!br){bp.push(n);if(bq){bp.push(qx.util.Json.__qI);}}bp.push(this.__qE(bm),t,bn);br=false;}}}if(bq){qx.util.Json.__qI=qx.util.Json.__qI.substring(0,qx.util.Json.__qI.length-qx.util.Json.BEAUTIFYING_INDENT.length);bp.push(qx.util.Json.__qI);}bp.push(F);return bp.join(m);},__qL:function(bs,bt){if(bs){if(qx.lang.Type.isFunction(bs.toJSON)&&bs.toJSON!==this.__qz){return this.__qN(bs.toJSON(bt),bt);}else if(qx.lang.Type.isDate(bs)){return this.__qJ(bs,bt);}else if(qx.lang.Type.isArray(bs)){return this.__qH(bs,bt);}else if(qx.lang.Type.isObject(bs)){return this.__qK(bs,bt);}return m;}return j;},__qM:function(bu,bv){if(qx.core.Setting.get(w)){return j;}},__qN:function(bw,bx){return this[this.__qA[typeof bw]](bw,bx);},stringify:function(by,bz){this.__qO=bz;this.__qI=this.BEAUTIFYING_LINE_END;var bA=this.__qN(by,m);if(typeof bA!=k){bA=null;}if(qx.core.Setting.get(f)){qx.log.Logger.debug(this,"JSON request: "+bA);}return bA;},parse:function(bB,bC){if(bC===undefined){bC=true;}if(qx.core.Setting.get(f)){qx.log.Logger.debug(this,"JSON response: "+bB);}if(bC){if(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(bB.replace(/"(\\.|[^"\\])*"/g,m))){throw new Error("Could not parse JSON string!");}}try{var bD=(bB&&bB.length>0)?eval(E+bB+A):null;return bD;}catch(bE){throw new Error("Could not evaluate JSON string: "+bE.message);}}},settings:{"qx.jsonEncodeUndefined":true,"qx.jsonDebugging":false},defer:function(bF){bF.__qz=Date.prototype.toJSON;}});})();(function(){var a="qx.util.format.IFormat";qx.Interface.define(a,{members:{format:function(b){},parse:function(c){}}});})();(function(){var t="",s="Number",r="-",q="0",p="String",o="changeNumberFormat",n='(',m="g",l="Boolean",k="$",d="NaN",j='([0-9]{1,3}(?:',g='{0,1}[0-9]{3}){0,})',c='\\d+){0,1}',b="qx.util.format.NumberFormat",f="Infinity",e="^",h=".",a="-Infinity",i='([-+]){0,1}';qx.Class.define(b,{extend:qx.core.Object,implement:qx.util.format.IFormat,construct:function(u){qx.core.Object.call(this);this.__ro=u;},statics:{getIntegerInstance:function(){var v=qx.util.format.NumberFormat;if(v._integerInstance==null){v._integerInstance=new v();v._integerInstance.setMaximumFractionDigits(0);}return v._integerInstance;},getInstance:function(){if(!this._instance){this._instance=new this;}return this._instance;}},properties:{minimumIntegerDigits:{check:s,init:0},maximumIntegerDigits:{check:s,nullable:true},minimumFractionDigits:{check:s,init:0},maximumFractionDigits:{check:s,nullable:true},groupingUsed:{check:l,init:true},prefix:{check:p,init:t,event:o},postfix:{check:p,init:t,event:o}},members:{__ro:null,format:function(w){switch(w){case Infinity:return f;case -Infinity:return a;case NaN:return d;}var A=(w<0);if(A){w=-w;}if(this.getMaximumFractionDigits()!=null){var H=Math.pow(10,this.getMaximumFractionDigits());w=Math.round(w*H)/H;}var G=String(Math.floor(w)).length;var x=t+w;var D=x.substring(0,G);while(D.length<this.getMinimumIntegerDigits()){D=q+D;}if(this.getMaximumIntegerDigits()!=null&&D.length>this.getMaximumIntegerDigits()){D=D.substring(D.length-this.getMaximumIntegerDigits());}var C=x.substring(G+1);while(C.length<this.getMinimumFractionDigits()){C+=q;}if(this.getMaximumFractionDigits()!=null&&C.length>this.getMaximumFractionDigits()){C=C.substring(0,this.getMaximumFractionDigits());}if(this.getGroupingUsed()){var z=D;D=t;var F;for(F=z.length;F>3;F-=3){D=t+qx.locale.Number.getGroupSeparator(this.__ro)+z.substring(F-3,F)+D;}D=z.substring(0,F)+D;}var B=this.getPrefix()?this.getPrefix():t;var y=this.getPostfix()?this.getPostfix():t;var E=B+(A?r:t)+D;if(C.length>0){E+=t+qx.locale.Number.getDecimalSeparator(this.__ro)+C;}E+=y;return E;},parse:function(I){var N=qx.lang.String.escapeRegexpChars(qx.locale.Number.getGroupSeparator(this.__ro)+t);var L=qx.lang.String.escapeRegexpChars(qx.locale.Number.getDecimalSeparator(this.__ro)+t);var J=new RegExp(e+qx.lang.String.escapeRegexpChars(this.getPrefix())+i+j+N+g+n+L+c+qx.lang.String.escapeRegexpChars(this.getPostfix())+k);var M=J.exec(I);if(M==null){throw new Error("Number string '"+I+"' does not match the number format");}var O=(M[1]==r);var Q=M[2];var P=M[3];Q=Q.replace(new RegExp(N,m),t);var K=(O?r:t)+Q;if(P!=null&&P.length!=0){P=P.replace(new RegExp(L),t);K+=h+P;}return parseFloat(K);}}});})();(function(){var d="cldr_number_decimal_separator",c="cldr_number_percent_format",b="qx.locale.Number",a="cldr_number_group_separator";qx.Class.define(b,{statics:{getDecimalSeparator:function(e){return qx.locale.Manager.getInstance().localize(d,[],e);},getGroupSeparator:function(f){return qx.locale.Manager.getInstance().localize(a,[],f);},getPercentFormat:function(g){return qx.locale.Manager.getInstance().localize(c,[],g);}}});})();(function(){var m="",k=",",h="constructor",g="appearances",f="getAppearances",e="getStatics",d="getChildControls",c="constants",b="getProperties",a="methods",D="properties",C="getEvents",B="getMembers",A="events",z="methods-static",y="getConstants",x="apiviewer.dao.Class",w="superMixins",v="childControls",u="class",s="_constructor",t="desc",q="see",r="getConstructor",o="getSuperInterfaces",p="superInterfaces",n="getSuperMixins";qx.Class.define(x,{extend:apiviewer.dao.Node,construct:function(E,F){apiviewer.dao.Node.call(this,E);this.self(arguments).registerClass(this);this._package=F;},statics:{_class_registry:{},_top_level_classes:[],registerClass:function(G){if(!G.getFullName()){return;}this._class_registry[G.getFullName()]=G;if(!G._docNode.attributes.superClass){this._top_level_classes.push(G);}},getClassByName:function(H){return this._class_registry[H];},getAllTopLevelClasses:function(){return this._top_level_classes;}},members:{getName:function(){return this._docNode.attributes.name;},getClass:function(){return this;},getPackage:function(){return this._package;},isLoaded:function(){return this._docNode.attributes.externalRef!=true;},getFullName:function(){return this._docNode.attributes.fullName||m;},getPackageName:function(){return this._docNode.attributes.packageName||m;},getDescription:function(){return this._desc||m;},getType:function(){return this._docNode.attributes.type||u;},isAbstract:function(){return this._docNode.attributes.isAbstract||false;},isStatic:function(){return this._docNode.attributes.isStatic||false;},isSingleton:function(){return this._docNode.attributes.isSingleton||false;},getSee:function(){return this._see;},getSuperClass:function(){return this.self(arguments).getClassByName(this._docNode.attributes.superClass);},getChildClasses:function(){return this._docNode.attributes.childClasses?this._docNode.attributes.childClasses.split(k):[];},getInterfaces:function(){return this._docNode.attributes.interfaces?this._docNode.attributes.interfaces.split(k):[];},getMixins:function(){return this._docNode.attributes.mixins?this._docNode.attributes.mixins.split(k):[];},getImplementations:function(){return this._docNode.attributes.implementations?this._docNode.attributes.implementations.split(k):[];},getIncluder:function(){return this._docNode.attributes.includer?this._docNode.attributes.includer.split(k):[];},getConstructor:function(){if(this._constructor!=null){return this._constructor;}var I=apiviewer.TreeUtil.getChild(this.getNode(),h);if(I){this._constructor=new apiviewer.dao.Method(I.children[0],this,I.type);}else{this._constructor=m;var K=this.getSuperClass();while(K){var J=K.getConstructor();if(J){var I=J.getNode();this._constructor=new apiviewer.dao.Method(I,this,h);break;}K=K.getSuperClass();}}return this._constructor;},getMembers:function(){if(this._members!=null){return this._members;}else{var L=apiviewer.TreeUtil.getChild(this.getNode(),a);this._members=L?this._createNodeList(L,apiviewer.dao.Method,this,L.type):[];return this._members;}},getStatics:function(){if(this._statics!=null){return this._statics;}else{var M=apiviewer.TreeUtil.getChild(this.getNode(),z);this._statics=M?this._createNodeList(M,apiviewer.dao.Method,this,M.type):[];return this._statics;}},getEvents:function(){if(this._events!=null){return this._events;}else{var N=apiviewer.TreeUtil.getChild(this.getNode(),A);this._events=N?this._createNodeList(N,apiviewer.dao.Event,this,N.type):[];return this._events;}},getProperties:function(){if(this._properties!=null){return this._properties;}else{var O=apiviewer.TreeUtil.getChild(this.getNode(),D);this._properties=O?this._createNodeList(O,apiviewer.dao.Property,this,O.type):[];return this._properties;}},getConstants:function(){if(this._constants!=null){return this._constants;}else{var P=apiviewer.TreeUtil.getChild(this.getNode(),c);this._constants=P?this._createNodeList(P,apiviewer.dao.Constant,this,P.type):[];return this._constants;}},getAppearances:function(){if(this._appearances!=null){return this._appearances;}else{var Q=apiviewer.TreeUtil.getChild(this.getNode(),g);this._appearances=Q?this._createNodeList(Q,apiviewer.dao.Appearance,this,Q.type):[];return this._appearances;}},getSuperInterfaces:function(){return this._superInterfaces;},getSuperMixins:function(){return this._superMixins;},getChildControls:function(){return this._childControls;},getClassHierarchy:function(){var S=[];var R=this;while(R){S.push(R);R=R.getSuperClass();}return S;},getInterfaceHierarchy:function(){var W=this;var U=[W];var V=W.getSuperInterfaces();while(V&&V.length>0){for(var i=0,l=V.length;i<l;i++){var T=apiviewer.dao.Class.getClassByName(V[i].getName());U.push(T);V=T.getSuperInterfaces();}}return U;},getItem:function(X){var Y=[B,e,C,b,y,f,d];for(var i=0;i<Y.length;i++){var ba=this[Y[i]]();for(var j=0;j<ba.length;j++){if(X==ba[j].getName()){return ba[j];}}}},getItemList:function(bb){var bc={"events":C,"constructor":r,"properties":b,"methods":B,"methods-static":e,"constants":y,"appearances":f,"superInterfaces":o,"superMixins":n,"childControls":d};if(bb==h){return this.getConstructor()?[this.getConstructor()]:[];}else{return this[bc[bb]]();}},getItemByListAndName:function(bd,be){var bf=this.getItemList(bd);for(var j=0;j<bf.length;j++){if(be==bf[j].getName()){return bf[j];}}},getClassAppearance:function(){var bg=this.getAppearances();for(var i=0;i<bg.length;i++){if(bg[i].getType()==this){return bg[i];}}return null;},getAllInterfaces:function(bh){if(bh){var bk=this.getClassHierarchy();}else{bk=[this];}var bn=[];for(var bm=0;bm<bk.length;bm++){var bl=bk[bm];var bi=function(bo){var bp=apiviewer.dao.Class.getClassByName(bo);bn.push(bp);var bq=bp.getSuperInterfaces();for(var i=0;i<bq.length;i++){bi(bq[i].getName());}};var bj=bl.getInterfaces();for(var i=0;i<bj.length;i++){bi(bj[i]);}}return bn;},getNodesOfTypeFromMixins:function(br){var bu=this.getMixins();var bv=[];for(var bw=0;bw<bu.length;bw++){var bs=function(bx){var by=bx.getItemList(br);for(var i=0;i<by.length;i++){bv.push(by[i]);}var bz=bx.getSuperMixins();for(var i=0;i<bz.length;i++){bs(apiviewer.dao.Class.getClassByName(bz[i].getName()));}};var bt=apiviewer.dao.Class.getClassByName(bu[bw]);bs(bt);}return bv;},getDependendClasses:function(){return this._findClasses(this,[]);},getDocNode:function(){return this;},_findClasses:function(bA,bB){bB.push(bA);var bJ=bA.getSuperClass();if(bJ){this._findClasses(bJ,bB);}var bG=bA.getMixins();for(var i=0;i<bG.length;i++){var bK=apiviewer.dao.Class.getClassByName(bG[i]);if(bK){this._findClasses(bK,bB);}else{this.warn("Missing mixin: "+bG[i]);}}var bH=bA.getSuperMixins();for(var i=0;i<bH.length;i++){var bI=apiviewer.dao.Class.getClassByName(bH[i]);if(bI){this._findClasses(bI,bB);}else{this.warn("Missing super mixin: "+bH[i]);}}var bF=bA.getInterfaces();for(var i=0;i<bF.length;i++){var bD=apiviewer.dao.Class.getClassByName(bF[i]);if(bD){this._findClasses(bD,bB);}else{this.warn("Missing interface: "+bF[i]);}}var bE=bA.getSuperInterfaces();for(var i=0;i<bE.length;i++){var bC=apiviewer.dao.Class.getClassByName(bE[i]);if(bC){this._findClasses(bC,bB);}else{this.warn("Missing super interface: "+bE[i]);}}return bB;},_initializeFields:function(){apiviewer.dao.Node.prototype._initializeFields.call(this);this._desc=m;this._see=[];this._superInterfaces=[];this._superMixins=[];this._childControls=[];},_addChildNode:function(bL){switch(bL.type){case h:case a:case z:case A:case D:case c:case g:break;case p:this._superInterfaces=this._createNodeList(bL,apiviewer.dao.ClassItem,this,bL.type);break;case w:this._superMixins=this._createNodeList(bL,apiviewer.dao.ClassItem,this,bL.type);break;case v:this._childControls=this._createNodeList(bL,apiviewer.dao.ChildControl,this,bL.type);break;case t:this._desc=bL.attributes.text||m;break;case q:this._see.push(bL.attributes.name);break;default:return apiviewer.dao.Node.prototype._addChildNode.call(this,bL);}return true;}},destruct:function(){this._see=this._superInterfaces=this._superMixins=this._events=this._statics=this._properties=this._constants=this._appearances=this._members=this._package=null;this._disposeObjects(s);}});})();(function(){var f="",e="name",d="desc",c="see",b="types",a="apiviewer.dao.ClassItem";qx.Class.define(a,{extend:apiviewer.dao.Node,construct:function(g,h,k){this._class=h;this._listName=k;apiviewer.dao.Node.call(this,g);},members:{getClass:function(){return this._class;},getName:function(){return this._docNode.attributes.name;},getListName:function(){return this._listName;},getDescription:function(){return this.getDocNode()._desc||f;},getTypes:function(){var m=[];for(var i=0;i<this._types.length;i++){var l={};if(this._types[i].attributes.dimensions){l.dimensions=this._types[i].attributes.dimensions;}l.type=this._types[i].attributes.type;m.push(l);}return m;},getSee:function(){return this._see;},getOverriddenFrom:function(){return apiviewer.dao.Class.getClassByName(this._docNode.attributes.overriddenFrom);},getDocNode:function(){if(this._itemDocNode){return this._itemDocNode;}this._itemDocNode=this;var n=apiviewer.dao.Class.getClassByName(this._docNode.attributes.docFrom);if(n){var o=n.getItemList(this._listName);for(var i=0;i<o.length;i++){if(o[i].getName()==this.getName()){this._itemDocNode=o[i];break;}}}return this._itemDocNode;},isRequiredByInterface:function(p){var r=apiviewer.TreeUtil.getChild(p.getNode(),this._listName);if(r){var q=apiviewer.TreeUtil.getChildByAttribute(r,e,this.getName());return q?true:false;}return false;},getRequiredBy:function(){if(this._requiredBy){return this._requiredBy;}var s=[];var t=this.getClass().getAllInterfaces(true);for(var j=0;j<t.length;j++){if(this.isRequiredByInterface(t[j])){s.push(t[j]);}}this._requiredBy=s;return s;},_initializeFields:function(){apiviewer.dao.Node.prototype._initializeFields.call(this);this._see=[];this._types=[];},_addChildNode:function(u){switch(u.type){case d:this._desc=u.attributes.text||f;break;case c:this._see.push(u.attributes.name);break;case b:this._types=this._createNodeList(u);break;default:return apiviewer.dao.Node.prototype._addChildNode.call(this,u);}return true;}},destruct:function(){this._class=this._itemDocNode=this._requiredBy=this._see=this._types=null;}});})();(function(){var h="params",g="return",f="throws",e="",d="apiviewer.dao.Method",c="_return",b="construct",a="properties";qx.Class.define(d,{extend:apiviewer.dao.ClassItem,construct:function(i,j,k){apiviewer.dao.ClassItem.call(this,i,j,k);},members:{getName:function(){if(this.isConstructor()){return b;}else{return this._docNode.attributes.name;}},isStatic:function(){return this._docNode.attributes.isStatic||false;},isAbstract:function(){return this._docNode.attributes.isAbstract||false;},isConstructor:function(){return this._docNode.attributes.isCtor||false;},isFromProperty:function(){return !!this._docNode.attributes.fromProperty;},getParams:function(){if(this._params!=null){return this._params;}else{var l=apiviewer.TreeUtil.getChild(this.getDocNode().getNode(),h);this._params=l?this._createNodeList(l,apiviewer.dao.Param,this.getClass(),this):[];return this._params;}},getReturn:function(){if(this._return!=null){return this._return;}else{var m=apiviewer.TreeUtil.getChild(this.getDocNode().getNode(),g);this._return=m?new apiviewer.dao.Param(m,this.getClass(),this):e;return this._return;}},getThrows:function(){if(this._throws!=null){return this._throws;}else{var n=apiviewer.TreeUtil.getChild(this.getDocNode().getNode(),f);this._throws=n?this._createNodeList(n,apiviewer.dao.ThrowsEntry,this.getClass(),this):[];return this._throws;}},getApply:function(){return this._docNode.attributes.apply;},getFromProperty:function(){return this.getClass().getItemByListAndName(a,this._docNode.attributes.fromProperty);},_addChildNode:function(o){switch(o.type){case h:case g:case f:break;default:return apiviewer.dao.ClassItem.prototype._addChildNode.call(this,o);}return true;}},destruct:function(){this._params=this._throws=null;this._disposeObjects(c);}});})();(function(){var b="apiviewer.dao.Param",a="properties";qx.Class.define(b,{extend:apiviewer.dao.ClassItem,construct:function(c,d,e){apiviewer.dao.ClassItem.call(this,c,d);this._method=e;},members:{getTypes:function(){var i=this.getMethod().getFromProperty();if(i){if(i.isPropertyGroup()){var g=this.getClass().getItemByListAndName(a,this.getName());if(g){return g.getTypes();}}else{return i.getTypes();}}var h=apiviewer.dao.ClassItem.prototype.getTypes.call(this);var f=this._docNode.attributes;if(f.type){h.push({type:f.type,dimensions:f.dimensions});}return h;},getMethod:function(){return this._method;},getArrayDimensions:function(){return this._docNode.attributes.arrayDimensions;},getType:function(){return this._docNode.attributes.type;},getDefaultValue:function(){return this._docNode.attributes.defaultValue;}},destruct:function(){this._method=null;}});})();(function(){var b="apiviewer.dao.ThrowsEntry",a="Error";qx.Class.define(b,{extend:apiviewer.dao.ClassItem,construct:function(c,d,e){apiviewer.dao.ClassItem.call(this,c,d);},members:{getType:function(){return this._docNode.attributes.type||null;},getDefaultType:function(){return a;},getDescription:function(){return this._docNode.attributes.text;}}});})();(function(){var b="types",a="apiviewer.dao.Event";qx.Class.define(a,{extend:apiviewer.dao.ClassItem,construct:function(c,d,e){apiviewer.dao.ClassItem.call(this,c,d,e);},members:{getType:function(){return apiviewer.dao.Class.getClassByName(this._type);},getTypes:function(){if(this._type){return [{type:this._type}];}else{return null;}},_addChildNode:function(f){switch(f.type){case b:this._type=f.children[0].attributes.type;break;default:return apiviewer.dao.ClassItem.prototype._addChildNode.call(this,f);}return true;}}});})();(function(){var d=",",c="new",b="true",a="apiviewer.dao.Property";qx.Class.define(a,{extend:apiviewer.dao.ClassItem,members:{getTypes:function(){var g=apiviewer.dao.ClassItem.prototype.getTypes.call(this);var e=this.getDocNode();var f=e.getType();if(f){g.push({type:f,dimensions:e.getNode().attributes.dimensions});}return g;},getCheck:function(){var h=this.getDocNode()._docNode.attributes;if(h.check){if(!apiviewer.dao.Class.getClassByName(h.check)&&!apiviewer.ui.ClassViewer.PRIMITIVES[h.check]){return h.check;}}return null;},getClassname:function(){return this._docNode.attributes.classname;},getInstance:function(){return this._docNode.attributes.instance;},getPossibleValues:function(){var i=this._docNode.attributes.possibleValues;if(i){i=i.split(d);return i;}else{return [];}},getGroup:function(){var j=this.getDocNode()._docNode.attributes.group;if(j){return j.split(d);}return [];},isPropertyGroup:function(){return !!this.getDocNode()._docNode.attributes.group;},getType:function(){var k=this._docNode.attributes;if(k.type){return k.type;}if(k.check){if(apiviewer.dao.Class.getClassByName(k.check)||apiviewer.ui.ClassViewer.PRIMITIVES[k.check]){return k.check;}}return null;},getPropertyType:function(){return this.getDocNode()._docNode.attributes.propertyType||c;},getEvent:function(){return this.getDocNode()._docNode.attributes.event;},getApplyMethod:function(){return this.getDocNode()._docNode.attributes.apply;},isNullable:function(){return this.getDocNode()._docNode.attributes.allowNull===b;},getDefaultValue:function(){return this._docNode.attributes.defaultValue;},isInheritable:function(){return this.getDocNode()._docNode.attributes.inheritable||false;},isThemeable:function(){return this.getDocNode()._docNode.attributes.themeable||false;},isRefined:function(){return this._docNode.attributes.refine||false;}}});})();(function(){var bv="mixin",bu="",bt='</div>',bs="<h2>",br="</h2>",bq="interface",bp='',bo="constructor",bn=';',bm="events",bb='</h2>',ba="apiviewer/image/nextlevel.gif",Y='px',X='<p>',W='"',V='">',U="appearances",T='</p>',S="constants",R="This ",bC='px;height:',bD='<h2 class="warning">',bA="properties",bB=' style="',by='<div class="class-description">',bz="methods",bw="Inheritance hierarchy:",bx='</span>',bE="Implementations of this interface:",bF="childControls",bf="sub interfaces",be=";vertical-align:top",bh='" src="',bg=' title="',bj="Internal:",bi="width:18px",bl="Included mixins:",bk="margin-right:-18px;",bd="Interface",bc="apiviewer/image/cross.gif",a='/>',b=' </span>',c='<span style="display:inline-block;display:inline;padding-right:18px;position:relative;top:-2px;left:0;width:',d="superMixins",f="methods-static",g="string",h="<br />\n",k="Deprecated:",l="sub mixins",m=":",bJ='<img src="',bI='</small>',bH=" is deprecated!",bG="position:absolute;top:0px;left:0px",bN="Singleton ",bM='" class="img"',bL='"/>',bK="Direct ",bP="position:absolute;top:0px;left:0px;padding-right:18px;",bO="apiviewer/image/blank.gif",B="apiviewer/image/class18.gif",C='<span style="display:inline;position:relative;top:-2px;width:',z=" is internal!",A="px",F='<span class="type">',G="Classes including this mixin:",D='<img',E="class",x="Implemented interfaces:",y="Class",u="top",t="Object<br/>",w=", ",v="margin-left:",q="construct",p="left",s='<div>',r="child controls",o="Abstract ",n="sub classes",L="vertical-align:top",M="static methods",N="ClassViewer",O="Static ",H="apiviewer.ui.ClassViewer",I='<small>',J="Mixin",K="marked",P="apiviewer/image/vline.gif",Q="superInterfaces";qx.Class.define(H,{extend:apiviewer.ui.AbstractViewer,construct:function(){apiviewer.ui.AbstractViewer.call(this);this.addInfoPanel(new apiviewer.ui.panels.MethodPanel(bo,bo));this.addInfoPanel(new apiviewer.ui.panels.EventPanel(bm,bm,true,true));this.addInfoPanel(new apiviewer.ui.panels.PropertyPanel(bA,bA,true,true));this.addInfoPanel(new apiviewer.ui.panels.MethodPanel(bz,bz));this.addInfoPanel(new apiviewer.ui.panels.MethodPanel(f,M));this.addInfoPanel(new apiviewer.ui.panels.ConstantPanel(S,S,false,true));this.addInfoPanel(new apiviewer.ui.panels.AppearancePanel(U,U,false,true));this.addInfoPanel(new apiviewer.ui.panels.ChildControlsPanel(bF,r));this.getContentElement().setAttribute(E,N);this._init(new apiviewer.dao.Class({}));},statics:{PRIMITIVES:{"var":true,"void":true,"undefined":true,"arguments":true,"null":true,"varargs":true,"Boolean":true,"String":true,"Number":true,"Integer":true,"PositiveNumber":true,"PositiveInteger":true,"Float":true,"Double":true,"Error":true,"RegExp":true,"Object":true,"Array":true,"Map":true,"Function":true,"Date":true,"Node":true,"Element":true,"Document":true,"Window":true,"Event":true,"Class":true,"Bootstrap":true,"List":true,"Mixin":true,"Interface":true,"Theme":true,"Color":true,"Decorator":true,"Font":true},createImageHtml:function(bQ,bR,bS){if(typeof bQ==g){return bJ+qx.util.ResourceManager.getInstance().toUri(bQ)+bM+(bS?bB+bS+W:bu)+a;}else{if(bS){bS+=be;}else{bS=L;}return apiviewer.ui.ClassViewer.createOverlayImageHtml(18,18,bQ,bR,bS);}},createOverlayImageHtml:function(bT,bU,bV,bW,bX){var ca=bp;var bY;if(qx.bom.client.Engine.WEBKIT){ca=C+bT+bC+bU+Y+((bX==null)?bp:(bn+bX))+V;}else{ca=c+bT+bC+bU+Y+((bX==null)?bp:(bn+bX))+V;}if(qx.bom.client.Engine.WEBKIT){bY=bP;}else if(qx.bom.client.Engine.OPERA){bY=bk;}else{bY=bG;}for(var i=0;i<bV.length;i++){ca+=D;if(bW!=null){ca+=bg+bW+W;}ca+=bB+bY+bh+qx.util.ResourceManager.getInstance().toUri(bV[i])+bL;}ca+=bx;return ca;}},members:{_getTitleHtml:function(cb){switch(cb.getType()){case bv:var cd=J;break;case bq:var cd=bd;break;default:var cd=y;break;}var cc=new qx.util.StringBuilder();cc.add(I,cb.getPackageName(),bI);cc.add(F);if(cb.isAbstract()){cc.add(o);}else if(cb.isStatic()){cc.add(O);}else if(cb.isSingleton()){cc.add(bN);}cc.add(cd,b);cc.add(apiviewer.ui.panels.InfoPanel.setTitleClass(cb,cb.getName()));return cc.get();},_getDescriptionHtml:function(ce){switch(ce.getType()){case bv:var cf=l;break;case bq:var cf=bf;break;default:var cf=n;break;}var ch=new qx.util.StringBuilder();var ci=ce.getDescription();if(ci!=bu){ch.add(by,apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(ci,ce),bt);}if(ce.getErrors().length>0){ch.add(by,apiviewer.ui.panels.InfoPanel.createErrorHtml(ce,ce),bt);}switch(ce.getType()){case bv:case bq:ch.add(this.__Sz(ce));break;default:ch.add(this.__Sy(ce));break;}ch.add(this.__Sx(ce.getChildClasses(),bK+cf+m));ch.add(this.__Sx(ce.getInterfaces(),x));ch.add(this.__Sx(ce.getMixins(),bl));ch.add(this.__Sx(ce.getImplementations(),bE));ch.add(this.__Sx(ce.getIncluder(),G));var cg=ce.getConstructor();if(cg){ch.add(apiviewer.ui.panels.InfoPanel.createSeeAlsoHtml(cg));}if(ce.isDeprecated()){ch.add(bD,k,bb);ch.add(X);var ci=ce.getDeprecationText();if(ci){ch.add(ci);}else{ch.add(R,ce.getType(),bH);}ch.add(T);}if(ce.isInternal()){ch.add(bD,bj,bb);ch.add(X);ch.add(R,ce.getType(),z);ch.add(T);}return ch.get();},__Sx:function(cj,ck){if(cj.length>0){var cl=new qx.util.StringBuilder(bs,ck,br);for(var i=0;i<cj.length;i++){if(i!=0){cl.add(w);}cl.add(apiviewer.ui.panels.InfoPanel.createItemLinkHtml(cj[i],null,true,false));}cl=cl.get();}else{cl=bu;}return cl;},__Sy:function(cm){var co=apiviewer.ui.ClassViewer;var cp=new qx.util.StringBuilder(bs,bw,br);var cq=cm.getClassHierarchy();cp.add(co.createImageHtml(B),t);var cn=0;for(var i=cq.length-1;i>=0;i--){cp.add(s);cp.add(co.createImageHtml(ba,null,v+cn+A),co.createImageHtml(apiviewer.TreeUtil.getIconUrl(cq[i])));if(i!=0){cp.add(apiviewer.ui.panels.InfoPanel.createItemLinkHtml(cq[i].getFullName(),null,false));}else{cp.add(cq[i].getFullName());}cn+=18;cp.add(bt);}return cp.get();},__Sz:function(cr){if(cr.getType()==bv){var cs=d;}else{cs=Q;}var cu=apiviewer.ui.ClassViewer;var ct=cu.createImageHtml(bO,null,bi);var cw=function(cx,cy){var cA=[];for(var cz=0;cz<cx.length;cz++){var cD=new qx.util.StringBuilder();var cB=cx[cz];if(!cy){if(cz==cx.length-1){cD.add(cu.createImageHtml(ba));}else{cD.add(cu.createImageHtml(bc));}}else{if(!cy){cD.add(ct);}}cD.add(cu.createImageHtml(apiviewer.TreeUtil.getIconUrl(cB)));if(!cy){cD.add(apiviewer.ui.panels.InfoPanel.createItemLinkHtml(cB.getFullName(),null,false));}else{cD.add(cB.getFullName());}cA.push(cD.get());var cC=qx.lang.Array.clone(cB.getItemList(cs));for(var j=0;j<cC.length;j++){cC[j]=apiviewer.dao.Class.getClassByName(cC[j].getName());}if(cC.length>0){var cE=cw(cC);for(var i=0;i<cE.length;i++){if(cz==cx.length-1){if(cy){cA.push(cE[i]);}else{cA.push(ct+cE[i]);}}else{cA.push(cu.createImageHtml(P)+cE[i]);}}}}return cA;};var cv=new qx.util.StringBuilder();if(cr.getItemList(cs).length>0){cv.add(bs,bw,br);cv.add(cw([cr],true).join(h));}return cv.get();},showItem:function(cF){var cI;if(cF==q){cI=this.getDocNode().getConstructor();}else{cI=this.getDocNode().getItem(cF);}if(!cI){return false;}this.__SA(cI,cF);var cJ=this._getPanelForItemNode(cI);var cG=cJ.getItemElement(cI.getName());if(!cG){return false;}var cH=cG.parentNode.parentNode;if(this._markedElement){this._markedElement.className=bu;}cH.className=K;this._markedElement=cH;qx.event.Timer.once(function(e){qx.bom.element.Scroll.intoView(cH,null,p,u);},this,0);return true;},__SA:function(cK,cL){var cM=apiviewer.UiModel.getInstance();if(cK.isFromProperty&&cK.isFromProperty()){cM.setExpandProperties(true);if(cK.isProtected()){cM.setShowProtected(true);}if(cK.isPrivate()){cM.setShowPrivate(true);}}else if(cK.getListName()=="methods"){if(cL.indexOf("__")===0){cM.setShowPrivate(true);}else if(cL.indexOf("_")===0){cM.setShowProtected(true);}}},_getPanelForItemNode:function(cN){var cO=this.getPanels();for(var i=0;i<cO.length;i++){var cP=cO[i];if(cP.canDisplayItem(cN)){return cP;}}}},destruct:function(){this._titleElem=this._classDescElem=this._markedElement=null;}});})();(function(){var c="apiviewer.ui.panels.EventPanel",b="var",a="event";qx.Class.define(c,{extend:apiviewer.ui.panels.InfoPanel,members:{itemHasDetails:function(d,e){return (d.getClass()!=e||d.getSee().length>0||d.getErrors().length>0||apiviewer.ui.panels.InfoPanel.descriptionHasDetails(d));},getItemTypeHtml:function(f){return apiviewer.ui.panels.InfoPanel.createTypeHtml(f,b);},getItemTitleHtml:function(g){return apiviewer.ui.panels.InfoPanel.setTitleClass(g,g.getName());},getItemTextHtml:function(h,i,j){var k=new qx.util.StringBuilder(apiviewer.ui.panels.InfoPanel.createDescriptionHtml(h,h.getClass(),j));if(j){k.add(apiviewer.ui.panels.InfoPanel.createInheritedFromHtml(h,i));k.add(apiviewer.ui.panels.InfoPanel.createSeeAlsoHtml(h));k.add(apiviewer.ui.panels.InfoPanel.createErrorHtml(h,i));k.add(apiviewer.ui.panels.InfoPanel.createDeprecationHtml(h,a));}return k.get();}}});})();(function(){var j='</div>',i='<div class="item-detail-headline">',h='<div class="item-detail-text">',g="#",f="null",e="instances of ",d="apiviewer.ui.panels.PropertyPanel",c='<div class="javascript">',b="var",a="Apply method:",v="property",u="Check:",t="Allowed values:",s='</code>',r="</code>",q="any ",p="Init value:",o='<code>',n="<code>",m="</code>, <code>",k="Change event:",l=" or sub classes";qx.Class.define(d,{extend:apiviewer.ui.panels.InfoPanel,members:{__SB:function(w,x){if(w.isRefined()){return "";}if(w.isPrivate()){var y="__";var name=w.getName().substring(2);}else if(w.isProtected()){y="_";name=w.getName().substring(1);}else{y="";name=w.getName();}name=qx.lang.String.firstUp(name);var A=[];if(w.getPropertyType()=="fast"){A.push("{@link #"+y+"get"+name+"}</td><td> Get the property value.");}else{A.push("{@link #"+y+"set"+name+"}</td><td> Set the property value.");if(!w.isPropertyGroup()){A.push("{@link #"+y+"get"+name+"}</td><td> Get the property value.");A.push("{@link #"+y+"init"+name+"}</td><td> Call apply method with the init value.");}A.push("{@link #"+y+"reset"+name+"}</td><td> Reset the property value.");if(w.getType()=="Boolean"){A.push("{@link #"+y+"toggle"+name+"}</td><td> Toggle the property value.");A.push("{@link #"+y+"is"+name+"}</td><td> Check whether the property equals <code>true</code>.");}}var z=new qx.util.StringBuilder();z.add('<div class="item-detail-headline">',"Generated methods:",'</div>','<div class="item-detail-text">');z.add("<table><tr><td>");z.add(A.join("</td></tr><tr><td>"));z.add("</td></tr></table>");z.add('</div>');return apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(z.get(),x);},__SC:function(B){var C=[];if(B.isNullable()){C.push("This property allows 'null' values");}if(B.isInheritable()){C.push("The property value can be inherited from a parent object.");}if(B.isThemeable()){C.push("The property value can be set using appearance themes.");}if(B.isPropertyGroup()){C.push("The property is a property group.");}if(B.isRefined()){C.push("The property refines the init value of an existing property.");}if(C.length>0){var D=new qx.util.StringBuilder();D.add('<div class="item-detail-headline">',"Property attributes:",'</div>','<div class="item-detail-text">');D.add("<ul><li>");D.add(C.join("</li><li>"));D.add("</li></ul>");D.add('</div>');return D.get();}else{return "";}},__SD:function(E){if(E.isRefined()){var F=new qx.util.StringBuilder('<div class="item-detail-headline">',"Refined property:",'</div>','<div class="item-detail-text">',apiviewer.ui.panels.InfoPanel.createItemLinkHtml(E.getOverriddenFrom().getFullName()+"#"+E.getName()),'</div>');return F.get();}else{return "";}},getItemTypeHtml:function(G){return apiviewer.ui.panels.InfoPanel.createTypeHtml(G,b);},getItemTitleHtml:function(H){return apiviewer.ui.panels.InfoPanel.setTitleClass(H,H.getName());},getItemTextHtml:function(I,J,K){var L=I.getDocNode();var N=new qx.util.StringBuilder(apiviewer.ui.panels.InfoPanel.createDescriptionHtml(I,I.getClass(),K));if(K){var O=null;var M=qx.lang.Array.clone(I.getPossibleValues());if(M.length>0){if(I.isNullable()){M.push(f);}O=n+M.join(m)+r;}else if(I.getClassname()){O=e+I.getClassname();}else if(I.getInstance()){O=e+I.getInstance()+l;}else if(I.getType()){O=q+I.getType();}if(O){N.add(i,t,j,h);N.add(O,j);}if(I.getCheck()){N.add(i,u,j,c,qx.dev.Tokenizer.javaScriptToHtml(I.getCheck()),j);}if(!I.isPropertyGroup()){N.add(i,p,j,h,o,(I.getDefaultValue()?I.getDefaultValue():f),s,j);}if(I.getEvent()&&!I.isRefined()){N.add(i,k,j,h,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(g+I.getEvent(),I.getClass(),true,true),j);}if(I.getApplyMethod()&&!I.isRefined()){N.add(i,a,j,h,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(g+I.getApplyMethod(),I.getClass(),true,true),j);}N.add(this.__SC(I));N.add(this.__SB(I,J));N.add(apiviewer.ui.panels.InfoPanel.createIncludedFromHtml(I,J));N.add(this.__SD(I));N.add(apiviewer.ui.panels.InfoPanel.createInheritedFromHtml(I,J));N.add(apiviewer.ui.panels.InfoPanel.createInfoRequiredByHtml(I));N.add(apiviewer.ui.panels.InfoPanel.createSeeAlsoHtml(L));N.add(apiviewer.ui.panels.InfoPanel.createErrorHtml(I,J));N.add(apiviewer.ui.panels.InfoPanel.createDeprecationHtml(L,v));}return N.get();}}});})();(function(){var c="apiviewer.ui.panels.ConstantPanel",b="var",a="constant";qx.Class.define(c,{extend:apiviewer.ui.panels.InfoPanel,members:{itemHasDetails:function(d,e){return (d.getSee().length>0||d.getErrors().length>0||apiviewer.ui.panels.InfoPanel.descriptionHasDetails(d)||this.__SE(d));},getItemTypeHtml:function(f){return apiviewer.ui.panels.InfoPanel.createTypeHtml(f,b);},getItemTitleHtml:function(g){return apiviewer.ui.panels.InfoPanel.setTitleClass(g,g.getName());},getItemTextHtml:function(h,i,j){var k=apiviewer.ui.panels.InfoPanel.createDescriptionHtml(h,h.getClass(),j);if(j){k+=this.__SF(h);k+=apiviewer.ui.panels.InfoPanel.createSeeAlsoHtml(h);k+=apiviewer.ui.panels.InfoPanel.createErrorHtml(h,i);k+=apiviewer.ui.panels.InfoPanel.createDeprecationHtml(h,a);}return k;},__SE:function(l){return l.getValue()?true:false;},__SF:function(m){if(this.__SE(m)){var n=new qx.util.StringBuilder('<div class="item-detail-headline">',"Value: ",'</div>','<div class="item-detail-text">',qx.bom.String.escape(qx.util.Json.stringify(m.getValue())),'</div>');return n.get();}else{return "";}}}});})();(function(){var m='</div>',l=" <span class='item-detail-define'>defined by ",k=" (default appearance of the class)",j="</p></div>",h="</span>: ",g='<div class="item-desc">',f=" ",e="apiviewer.ui.panels.AppearancePanel",d='<div class="item-detail-headline">',c="</code><p>",a="<div class='item-detail-text'><code>",b="States:";qx.Class.define(e,{extend:apiviewer.ui.panels.InfoPanel,members:{__SG:function(n){var r=n.getStates();if(r.length>0){var t=qx.lang.Array.clone(r);}else{t=[];}var u=n.getType();var v=n.getClass();var s=1;if(u!=v){v=u;s=0;}var q=v.getClassHierarchy();for(var i=s;i<q.length;i++){v=q[i];var o=v.getClassAppearance();if(o){var p=o.getStates();if(p){qx.lang.Array.append(t,p);}}}return t;},_getPanelItems:function(w,x){var z=apiviewer.ui.panels.InfoPanel.prototype._getPanelItems.call(this,w,x);if(!w){return z;}var A=x.getClassHierarchy();for(var i=0;i<A.length;i++){var B=A[i];var y=B.getClassAppearance();if(y){if(y.getType()!=x){z.push(y);}return z;}}},getItemTypeHtml:function(C){var E=C.getName();if(C.getType()==C.getClass()){var D=E+k;}else{var D=E;}return D;},getItemTitleHtml:function(F){return apiviewer.ui.panels.InfoPanel.setTitleClass(F,F.getName());},getItemTextHtml:function(G,H,I){var M=new qx.util.StringBuilder();M.add(g,apiviewer.ui.panels.InfoPanel.createDescriptionHtml(G,G.getClass(),true),m);if(I){var K=this.__SG(G);if(K.length>0){M.add(d,b,m);for(var i=0;i<K.length;i++){var L=K[i];M.add(a,L.getName(),c);var J=L.getAppearance();if(J.getType()!=G.getClass()){M.add(l,apiviewer.ui.panels.InfoPanel.createItemLinkHtml(J.getType().getFullName()),h);}var N=L.getDescription();if(N){M.add(f,apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(N,L.getClass()));}M.add(j);}M.add(m);}}return M.get();},itemHasDetails:function(O,P){return this.__SG(O).length>0;}}});})();(function(){var i='</div>',h="apiviewer.ui.panels.ChildControlsPanel",g="null",f="var",e='<div class="item-detail-headline">',d='</code>',c='<code>',b="Default value:",a='<div class="item-detail-text">';qx.Class.define(h,{extend:apiviewer.ui.panels.InfoPanel,members:{getItemTypeHtml:function(j,k){return apiviewer.ui.panels.InfoPanel.createTypeHtml(j,f,true);},getItemTitleHtml:function(l,m){return apiviewer.ui.panels.InfoPanel.setTitleClass(l,l.getName());},getItemTextHtml:function(n,o,p){var q=new qx.util.StringBuilder(n.getDescription());if(p){q.add(e,b,i,a,c,(n.getDefaultValue()?n.getDefaultValue():g),d,i);}return q.get();}}});})();(function(){var a="apiviewer.dao.Constant";qx.Class.define(a,{extend:apiviewer.dao.ClassItem,construct:function(b,c,d){apiviewer.dao.ClassItem.call(this,b,c,d);},members:{getValue:function(){return this._docNode.attributes.value;}}});})();(function(){var b="states",a="apiviewer.dao.Appearance";qx.Class.define(a,{extend:apiviewer.dao.ClassItem,construct:function(c,d,e){apiviewer.dao.ClassItem.call(this,c,d,e);},members:{getType:function(){return apiviewer.dao.Class.getClassByName(this._docNode.attributes.type);},getTypes:function(){return [{type:this._docNode.attributes.type}];},getAppearance:function(){return this.getClass();},getStates:function(){return this._states||[];},_addChildNode:function(f){switch(f.type){case b:this._states=this._createNodeList(f,apiviewer.dao.State,this);break;default:return apiviewer.dao.ClassItem.prototype._addChildNode.call(this,f);}return true;}}});})();(function(){var a="apiviewer.dao.State";qx.Class.define(a,{extend:apiviewer.dao.ClassItem,construct:function(b,parent){apiviewer.dao.ClassItem.call(this,b,parent);},members:{getClass:function(){return this._class.getClass();},getAppearance:function(){return this._class;}}});})();(function(){var a="apiviewer.dao.ChildControl";qx.Class.define(a,{extend:apiviewer.dao.ClassItem,construct:function(b,c,d){apiviewer.dao.ClassItem.call(this,b,c);this._listName=d;},members:{getTypes:function(){var f=apiviewer.dao.ClassItem.prototype.getTypes.call(this);var e=this._docNode.attributes;if(e.type){f.push({type:e.type});}return f;},getType:function(){return this._docNode.attributes.type;},getDefaultValue:function(){return this._docNode.attributes.defaultValue;}}});})();(function(){var n="class",m="interface",l="mixin",k="list",j="",h="apiviewer.ui.panels.ClassPanel",g="Singleton ",f="Abstract ",e="bootstrap",d="Static ",a="Class",c="Interface",b="Mixin";qx.Class.define(h,{extend:apiviewer.ui.panels.InfoPanel,construct:function(o,p,q){apiviewer.ui.panels.InfoPanel.call(this,o,p);this.setType(q);},properties:{type:{check:[n,l,m]}},members:{getItemTypeHtml:function(r){return apiviewer.ui.panels.InfoPanel.createItemLinkHtml(r.getName(),r,false,true);},getItemTitleHtml:function(s){return s.getFullName();},getItemTextHtml:function(t,u,v){if(v){return apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(t.getDescription(),t);}else{return apiviewer.ui.panels.InfoPanel.createDescriptionHtml(t,t.getClass(),v);}},getItemTooltip:function(w,x){if(w.isAbstract()){var y=f;}else if(w.isStatic()){var y=d;}else if(w.isSingleton()){var y=g;}else{var y=j;}switch(w.getType()){case l:y+=b;break;case m:y+=c;break;default:y+=a;break;}return y;},itemHasDetails:function(z,A){return apiviewer.ui.panels.InfoPanel.descriptionHasDetails(z);},update:function(B,C){if(!this.getElement()){return;}this.setDocNode(C);var E=C.getClasses();var D=[];var F;for(var i=0;i<E.length;i++){F=E[i].getType();if(F===e||F===k){F=n;}if(F===this.getType()){D.push(E[i]);}}if(D&&D.length>0){this._sortItems(D);}this._displayNodes(D,C);}}});})();(function(){var b="Package",a="apiviewer.ui.panels.PackagePanel";qx.Class.define(a,{extend:apiviewer.ui.panels.InfoPanel,members:{getItemTypeHtml:function(c){return apiviewer.ui.panels.InfoPanel.createItemLinkHtml(c.getFullName(),null,false,true);},getItemTitleHtml:function(d){return d.getFullName();},getItemTextHtml:function(e,f,g){if(g){return apiviewer.ui.panels.InfoPanel.resolveLinkAttributes(e.getDescription(),e);}else{return apiviewer.ui.panels.InfoPanel.createDescriptionHtml(e,e.getPackage(),g);}},getItemTooltip:function(h,i){return b;},itemHasDetails:function(j,k){return apiviewer.ui.panels.InfoPanel.descriptionHasDetails(j);},update:function(l,m){if(!this.getElement()){return;}this.setDocNode(m);var n=m.getPackages();if(n&&n.length>0){this._sortItems(n);}this._displayNodes(n,m);}}});})();(function(){var a="apiviewer.ui.tabview.ClassPage";qx.Class.define(a,{extend:apiviewer.ui.tabview.AbstractPage,members:{_createViewer:function(){return new apiviewer.ui.ClassViewer();}}});})();(function(){var m="value",l="separator-vertical",k="_tabView",j="qooxdoo",h="_packageViewer",g="_searchView",f="_tree",d="_detailLoader",c="apiviewer.Viewer",b="_classViewer",a="tree";qx.Class.define(c,{extend:qx.ui.container.Composite,construct:function(){qx.ui.container.Composite.call(this);this.__SH={};var p=new qx.ui.layout.VBox;p.setSeparator(l);this.setLayout(p);this.add(this.__SQ());this.add(this.__SM());var n=new apiviewer.ui.PackageTree();n.setId(a);this._searchView=new apiviewer.ui.SearchView();var q=new apiviewer.ui.LegendView();var r=this.__SL(n,this._searchView,q);var o=this.__SN();this.add(this.__SP(r,o),{flex:1});},members:{__SI:null,__SJ:null,__SH:null,__SK:null,__SL:function(s,t,u){var v=new qx.ui.container.Stack;v.setAppearance("toggleview");v.add(s);v.add(t);v.add(u);this.__SK.addListener("changeSelection",function(e){var w=e.getData()[0];var x=w!=null?w.getUserData("value"):null;switch(x){case "packages":v.setSelection([s]);v.show();break;case "search":v.setSelection([t]);v.show();qx.lang.Function.delay(this._onShowSearch,100,this);break;case "legend":v.setSelection([u]);v.show();break;default:v.exclude();}},this);return v;},__SM:function(){var toolbar=new qx.ui.toolbar.ToolBar;var B=new qx.ui.toolbar.Part;toolbar.add(B);this.__SI=B.toHashCode();var E=new qx.ui.toolbar.RadioButton(this.tr("Content"),"icon/22/apps/utilities-dictionary.png");E.setUserData("value","packages");E.setValue(true);E.setToolTipText(this.tr("Show/hide the packages."));B.add(E);var H=new qx.ui.toolbar.RadioButton(this.tr("Search"),"icon/22/actions/edit-find.png");H.setUserData("value","search");H.setToolTipText(this.tr("Search for packages, classes and members."));B.add(H);var y=new qx.ui.toolbar.RadioButton(this.tr("Legend"),"icon/22/apps/utilities-help.png");y.setUserData("value","legend");y.setToolTipText(this.tr("Show/hide the legend."));B.add(y);var z=new qx.ui.form.RadioGroup(E,H,y);z.setAllowEmptySelection(true);this.__SK=z;toolbar.addSpacer();var B=new qx.ui.toolbar.Part;toolbar.add(B);var F=new qx.ui.toolbar.CheckBox(this.tr("Properties"),"apiviewer/image/property18.gif");F.setId("btn_expand");F.setValue(true);F.setToolTipText(this.tr("Show/hide all generated property methods."));B.add(F);var D=new qx.ui.toolbar.CheckBox(this.tr("Inherited"),"apiviewer/image/method_public_inherited18.gif");D.setId("btn_inherited");D.setToolTipText(this.tr("Show/hide inherited members of the current class."));B.add(D);var A=new qx.ui.toolbar.CheckBox(this.tr("Protected"),"apiviewer/image/method_protected18.gif");A.setId("btn_protected");A.setToolTipText(this.tr("Show/hide protected members of the current class."));B.add(A);var G=new qx.ui.toolbar.CheckBox(this.tr("Private"),"apiviewer/image/method_private18.gif");G.setId("btn_private");G.setToolTipText(this.tr("Show/hide private members of the current class."));B.add(G);toolbar.setOverflowHandling(true);var C=new qx.ui.toolbar.MenuButton(null,"icon/22/actions/media-seek-forward.png");C.setAppearance("toolbar-button");toolbar.add(C);toolbar.setOverflowIndicator(C);this.__SJ=new qx.ui.menu.Menu();C.setMenu(this.__SJ);toolbar.addListener("hideItem",function(e){var I=e.getData();var J=this._getMenuItems(I);for(var i=0;i<J.length;i++){J[i].setVisibility("visible");}},this);toolbar.addListener("showItem",function(e){var K=e.getData();var L=this._getMenuItems(K);for(var i=0;i<L.length;i++){L[i].setVisibility("excluded");}},this);return toolbar;},_getMenuItems:function(M){var O=M.getChildren();var P=[];if(M.toHashCode()===this.__SI){var N=this.__SH[M.toHashCode()];if(!N){N=new qx.ui.menu.Separator();this.__SJ.addAt(N,0);this.__SH[M.toHashCode()]=N;}P.push(N);}for(var i=O.length-1;i>=0;i--){var Q=O[i];N=this.__SH[Q.toHashCode()];if(!N){if(Q instanceof qx.ui.toolbar.RadioButton){var N=new qx.ui.menu.RadioButton(Q.getLabel());}else{N=new qx.ui.menu.CheckBox(Q.getLabel());}Q.bind(m,N,m);N.bind(m,Q,m);this.__SJ.addAt(N,0);this.__SH[Q.toHashCode()]=N;}P.push(N);}return P;},__SN:function(){var R=new qx.ui.container.Composite(new qx.ui.layout.Canvas);R.getContentElement().setAttribute("class","content");this._detailLoader=new qx.ui.embed.Html('<div style="padding:10px;"><h1><small>please wait</small>Loading data...</h1></div>');this._detailLoader.getContentElement().setAttribute("id","SplashScreen");this._detailLoader.setAppearance("detailviewer");this._detailLoader.setId("detail_loader");R.add(this._detailLoader,{edge:0});this._tabView=new qx.ui.tabview.TabView();this._tabView.setId("tabView");this._tabView.exclude();R.add(this._tabView,{edge:0});return R;},__SO:function(toolbar,S){var T=new qx.ui.container.Composite;T.setLayout(new qx.ui.layout.VBox);T.add(toolbar);T.add(S,{flex:1});return T;},__SP:function(U,V){var W=new qx.ui.splitpane.Pane("horizontal");W.add(U,0);W.add(V,1);return W;},__SQ:function(){var ba=new qx.ui.layout.HBox();var X=new qx.ui.container.Composite(ba);X.setAppearance("app-header");var bb=new qx.ui.basic.Label("API Documentation");var Y=new qx.ui.basic.Label("qooxdoo "+qx.core.Setting.get("qx.version"));X.add(bb);X.add(new qx.ui.core.Spacer,{flex:1});X.add(Y);return X;},_onShowSearch:function(){this._searchView.sinput.focus();}},settings:{"apiviewer.title":j,"apiviewer.initialTreeDepth":1},destruct:function(){this._classTreeNodeHash=this.__SK=null;this._disposeObjects(f,d,b,h,g,k);}});})();(function(){var n="_applyLayoutChange",m="top",k="left",j="middle",h="Decorator",g="center",f="_applyReversed",e="bottom",d="qx.ui.layout.VBox",c="Integer",a="right",b="Boolean";qx.Class.define(d,{extend:qx.ui.layout.Abstract,construct:function(o,p,q){qx.ui.layout.Abstract.call(this);if(o){this.setSpacing(o);}if(p){this.setAlignY(p);}if(q){this.setSeparator(q);}},properties:{alignY:{check:[m,j,e],init:m,apply:n},alignX:{check:[k,g,a],init:k,apply:n},spacing:{check:c,init:0,apply:n},separator:{check:h,nullable:true,apply:n},reversed:{check:b,init:false,apply:f}},members:{__eS:null,__eT:null,__eU:null,__eV:null,_applyReversed:function(){this._invalidChildrenCache=true;this._applyLayoutChange();},__eW:function(){var w=this._getLayoutChildren();var length=w.length;var s=false;var r=this.__eS&&this.__eS.length!=length&&this.__eT&&this.__eS;var u;var t=r?this.__eS:new Array(length);var v=r?this.__eT:new Array(length);if(this.getReversed()){w=w.concat().reverse();}for(var i=0;i<length;i++){u=w[i].getLayoutProperties();if(u.height!=null){t[i]=parseFloat(u.height)/100;}if(u.flex!=null){v[i]=u.flex;s=true;}else{v[i]=0;}}if(!r){this.__eS=t;this.__eT=v;}this.__eU=s;this.__eV=w;delete this._invalidChildrenCache;},verifyLayoutProperty:null,renderLayout:function(x,y){if(this._invalidChildrenCache){this.__eW();}var F=this.__eV;var length=F.length;var P=qx.ui.layout.Util;var O=this.getSpacing();var S=this.getSeparator();if(S){var C=P.computeVerticalSeparatorGaps(F,O,S);}else{var C=P.computeVerticalGaps(F,O,true);}var i,A,B,J;var K=[];var Q=C;for(i=0;i<length;i+=1){J=this.__eS[i];B=J!=null?Math.floor((y-C)*J):F[i].getSizeHint().height;K.push(B);Q+=B;}if(this.__eU&&Q!=y){var H={};var N,R;for(i=0;i<length;i+=1){N=this.__eT[i];if(N>0){G=F[i].getSizeHint();H[i]={min:G.minHeight,value:K[i],max:G.maxHeight,flex:N};}}var D=P.computeFlexOffsets(H,y,Q);for(i in D){R=D[i].offset;K[i]+=R;Q+=R;}}var top=F[0].getMarginTop();if(Q<y&&this.getAlignY()!=m){top=y-Q;if(this.getAlignY()===j){top=Math.round(top/2);}}var G,U,L,B,I,M,E;this._clearSeparators();if(S){var T=qx.theme.manager.Decoration.getInstance().resolve(S).getInsets();var z=T.top+T.bottom;}for(i=0;i<length;i+=1){A=F[i];B=K[i];G=A.getSizeHint();M=A.getMarginLeft();E=A.getMarginRight();L=Math.max(G.minWidth,Math.min(x-M-E,G.maxWidth));U=P.computeHorizontalAlignOffset(A.getAlignX()||this.getAlignX(),L,x,M,E);if(i>0){if(S){top+=I+O;this._renderSeparator(S,{top:top,left:0,height:z,width:x});top+=z+O+A.getMarginTop();}else{top+=P.collapseMargins(O,I,A.getMarginTop());}}A.renderLayout(U,top,L,B);top+=B;I=A.getMarginBottom();}},_computeSizeHint:function(){if(this._invalidChildrenCache){this.__eW();}var bc=qx.ui.layout.Util;var bk=this.__eV;var X=0,bb=0,ba=0;var V=0,bd=0;var bh,W,bj;for(var i=0,l=bk.length;i<l;i+=1){bh=bk[i];W=bh.getSizeHint();bb+=W.height;var bg=this.__eT[i];var Y=this.__eS[i];if(bg){X+=W.minHeight;}else if(Y){ba=Math.max(ba,Math.round(W.minHeight/Y));}else{X+=W.height;}bj=bh.getMarginLeft()+bh.getMarginRight();if((W.width+bj)>bd){bd=W.width+bj;}if((W.minWidth+bj)>V){V=W.minWidth+bj;}}X+=ba;var bf=this.getSpacing();var bi=this.getSeparator();if(bi){var be=bc.computeVerticalSeparatorGaps(bk,bf,bi);}else{var be=bc.computeVerticalGaps(bk,bf,true);}return {minHeight:X+be,height:bb+be,minWidth:V,width:bd};}},destruct:function(){this.__eS=this.__eT=this.__eV=null;}});})();(function(){var b="qx.nativeScrollBars",a="qx.ui.core.scroll.MScrollBarFactory";qx.core.Setting.define(b,false);qx.Mixin.define(a,{members:{_createScrollBar:function(c){if(qx.core.Setting.get(b)){return new qx.ui.core.scroll.NativeScrollBar(c);}else{return new qx.ui.core.scroll.ScrollBar(c);}}}});})();(function(){var k="scrollbar-y",j="scrollbar-x",i="pane",h="auto",g="corner",f="scrollbar-",d="on",c="_computeScrollbars",b="getDocument",a="changeVisibility",D="off",C="x",B="scroll",A="touchmove",z="scrollY",y="Left",x="mousewheel",w="scrollbarX",v="scrollarea",u="y",r="vertical",s="scrollX",p="touchstart",q="horizontal",n="qx.ui.core.scroll.AbstractScrollArea",o="abstract",l="update",m="scrollbarY",t="Top";qx.Class.define(n,{extend:qx.ui.core.Widget,include:qx.ui.core.scroll.MScrollBarFactory,type:o,construct:function(){qx.ui.core.Widget.call(this);var E=new qx.ui.layout.Grid();E.setColumnFlex(0,1);E.setRowFlex(0,1);this._setLayout(E);this.addListener(x,this._onMouseWheel,this);if(qx.bom.client.Feature.TOUCH){this.addListener(A,this._onTouchMove,this);this.addListener(p,function(){this.__qP={"x":0,"y":0};},this);this.__qP={};this.__qQ={};}},properties:{appearance:{refine:true,init:v},width:{refine:true,init:100},height:{refine:true,init:200},scrollbarX:{check:[h,d,D],init:h,themeable:true,apply:c},scrollbarY:{check:[h,d,D],init:h,themeable:true,apply:c},scrollbar:{group:[w,m]}},members:{__qP:null,__qQ:null,_createChildControlImpl:function(F,G){var H;switch(F){case i:H=new qx.ui.core.scroll.ScrollPane();H.addListener(l,this._computeScrollbars,this);H.addListener(s,this._onScrollPaneX,this);H.addListener(z,this._onScrollPaneY,this);this._add(H,{row:0,column:0});break;case j:H=this._createScrollBar(q);H.setMinWidth(0);H.exclude();H.addListener(B,this._onScrollBarX,this);H.addListener(a,this._onChangeScrollbarXVisibility,this);this._add(H,{row:1,column:0});break;case k:H=this._createScrollBar(r);H.setMinHeight(0);H.exclude();H.addListener(B,this._onScrollBarY,this);H.addListener(a,this._onChangeScrollbarYVisibility,this);this._add(H,{row:0,column:1});break;case g:H=new qx.ui.core.Widget();H.setWidth(0);H.setHeight(0);H.exclude();this._add(H,{row:1,column:1});break;}return H||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,F);},getPaneSize:function(){return this.getChildControl(i).getInnerSize();},getItemTop:function(I){return this.getChildControl(i).getItemTop(I);},getItemBottom:function(J){return this.getChildControl(i).getItemBottom(J);},getItemLeft:function(K){return this.getChildControl(i).getItemLeft(K);},getItemRight:function(L){return this.getChildControl(i).getItemRight(L);},scrollToX:function(M){qx.ui.core.queue.Manager.flush();this.getChildControl(j).scrollTo(M);},scrollByX:function(N){qx.ui.core.queue.Manager.flush();this.getChildControl(j).scrollBy(N);},getScrollX:function(){var O=this.getChildControl(j,true);return O?O.getPosition():0;},scrollToY:function(P){qx.ui.core.queue.Manager.flush();this.getChildControl(k).scrollTo(P);},scrollByY:function(Q){qx.ui.core.queue.Manager.flush();this.getChildControl(k).scrollBy(Q);},getScrollY:function(){var R=this.getChildControl(k,true);return R?R.getPosition():0;},_onScrollBarX:function(e){this.getChildControl(i).scrollToX(e.getData());},_onScrollBarY:function(e){this.getChildControl(i).scrollToY(e.getData());},_onScrollPaneX:function(e){this.scrollToX(e.getData());},_onScrollPaneY:function(e){this.scrollToY(e.getData());},_onMouseWheel:function(e){var T=this._isChildControlVisible(j);var U=this._isChildControlVisible(k);var S=(U)?this.getChildControl(k,true):(T?this.getChildControl(j,true):null);if(S){S.scrollBySteps(e.getWheelDelta());e.stop();}},_onTouchMove:function(e){this._onTouchMoveDirectional(C,e);this._onTouchMoveDirectional(u,e);e.stop();},_onTouchMoveDirectional:function(V,e){var W=(V==C?y:t);var Y=this.getChildControl(f+V,true);var ba=this._isChildControlVisible(f+V);if(ba&&Y){if(this.__qP[V]==0){var X=0;}else{var X=-(e[b+W]()-this.__qP[V]);}this.__qP[V]=e[b+W]();Y.scrollBy(X);if(this.__qQ[V]){clearTimeout(this.__qQ[V]);this.__qQ[V]=null;}this.__qQ[V]=setTimeout(qx.lang.Function.bind(function(bb){this.__qR(bb,V);},this,X),100);}},__qR:function(bc,bd){this.__qQ[bd]=null;var bf=this._isChildControlVisible(f+bd);if(bc==0||!bf){return;}if(bc>0){bc=Math.max(0,bc-3);}else{bc=Math.min(0,bc+3);}this.__qQ[bd]=setTimeout(qx.lang.Function.bind(function(bg,bh){this.__qR(bg,bh);},this,bc,bd),20);var be=this.getChildControl(f+bd,true);be.scrollBy(bc);},_onChangeScrollbarXVisibility:function(e){var bi=this._isChildControlVisible(j);var bj=this._isChildControlVisible(k);if(!bi){this.scrollToX(0);}bi&&bj?this._showChildControl(g):this._excludeChildControl(g);},_onChangeScrollbarYVisibility:function(e){var bk=this._isChildControlVisible(j);var bl=this._isChildControlVisible(k);if(!bl){this.scrollToY(0);}bk&&bl?this._showChildControl(g):this._excludeChildControl(g);},_computeScrollbars:function(){var bs=this.getChildControl(i);var content=bs.getChildren()[0];if(!content){this._excludeChildControl(j);this._excludeChildControl(k);return;}var bm=this.getInnerSize();var br=bs.getInnerSize();var bp=bs.getScrollSize();if(!br||!bp){return;}var bt=this.getScrollbarX();var bu=this.getScrollbarY();if(bt===h&&bu===h){var bq=bp.width>bm.width;var bv=bp.height>bm.height;if((bq||bv)&&!(bq&&bv)){if(bq){bv=bp.height>br.height;}else if(bv){bq=bp.width>br.width;}}}else{var bq=bt===d;var bv=bu===d;if(bp.width>(bq?br.width:bm.width)&&bt===h){bq=true;}if(bp.height>(bq?br.height:bm.height)&&bu===h){bv=true;}}if(bq){var bo=this.getChildControl(j);bo.show();bo.setMaximum(Math.max(0,bp.width-br.width));bo.setKnobFactor((bp.width===0)?0:br.width/bp.width);}else{this._excludeChildControl(j);}if(bv){var bn=this.getChildControl(k);bn.show();bn.setMaximum(Math.max(0,bp.height-br.height));bn.setKnobFactor((bp.height===0)?0:br.height/bp.height);}else{this._excludeChildControl(k);}}}});})();(function(){var p="Integer",o="_applyContentPadding",n="resetPaddingRight",m="setPaddingBottom",l="resetPaddingTop",k="qx.ui.core.MContentPadding",j="resetPaddingLeft",i="setPaddingTop",h="setPaddingRight",g="resetPaddingBottom",c="contentPaddingLeft",f="setPaddingLeft",e="contentPaddingTop",b="shorthand",a="contentPaddingRight",d="contentPaddingBottom";qx.Mixin.define(k,{properties:{contentPaddingTop:{check:p,init:0,apply:o,themeable:true},contentPaddingRight:{check:p,init:0,apply:o,themeable:true},contentPaddingBottom:{check:p,init:0,apply:o,themeable:true},contentPaddingLeft:{check:p,init:0,apply:o,themeable:true},contentPadding:{group:[e,a,d,c],mode:b,themeable:true}},members:{__kV:{contentPaddingTop:i,contentPaddingRight:h,contentPaddingBottom:m,contentPaddingLeft:f},__kW:{contentPaddingTop:l,contentPaddingRight:n,contentPaddingBottom:g,contentPaddingLeft:j},_applyContentPadding:function(q,r,name){var s=this._getContentPaddingTarget();if(q==null){var t=this.__kW[name];s[t]();}else{var u=this.__kV[name];s[u](q);}}}});})();(function(){var v="single",u="Boolean",t="one",s="changeSelection",r="__nt",q="mouseup",p="mousedown",o="losecapture",n="multi",m="_applyQuickSelection",d="mouseover",l="_applySelectionMode",h="_applyDragSelection",c="qx.ui.core.MMultiSelectionHandling",b="removeItem",g="keypress",f="qx.event.type.Data",j="addItem",a="additive",k="mousemove";qx.Mixin.define(c,{construct:function(){var x=this.SELECTION_MANAGER;var w=this.__nt=new x(this);this.addListener(p,w.handleMouseDown,w);this.addListener(q,w.handleMouseUp,w);this.addListener(d,w.handleMouseOver,w);this.addListener(k,w.handleMouseMove,w);this.addListener(o,w.handleLoseCapture,w);this.addListener(g,w.handleKeyPress,w);this.addListener(j,w.handleAddItem,w);this.addListener(b,w.handleRemoveItem,w);w.addListener(s,this._onSelectionChange,this);},events:{"changeSelection":f},properties:{selectionMode:{check:[v,n,a,t],init:v,apply:l},dragSelection:{check:u,init:false,apply:h},quickSelection:{check:u,init:false,apply:m}},members:{__nt:null,selectAll:function(){this.__nt.selectAll();},isSelected:function(y){if(!qx.ui.core.Widget.contains(this,y)){throw new Error("Could not test if "+y+" is selected, because it is not a child element!");}return this.__nt.isItemSelected(y);},addToSelection:function(z){if(!qx.ui.core.Widget.contains(this,z)){throw new Error("Could not add + "+z+" to selection, because it is not a child element!");}this.__nt.addItem(z);},removeFromSelection:function(A){if(!qx.ui.core.Widget.contains(this,A)){throw new Error("Could not remove "+A+" from selection, because it is not a child element!");}this.__nt.removeItem(A);},selectRange:function(B,C){this.__nt.selectItemRange(B,C);},resetSelection:function(){this.__nt.clearSelection();},setSelection:function(D){for(var i=0;i<D.length;i++){if(!qx.ui.core.Widget.contains(this,D[i])){throw new Error("Could not select "+D[i]+", because it is not a child element!");}}if(D.length===0){this.resetSelection();}else{var E=this.getSelection();if(!qx.lang.Array.equals(E,D)){this.__nt.replaceSelection(D);}}},getSelection:function(){return this.__nt.getSelection();},getSortedSelection:function(){return this.__nt.getSortedSelection();},isSelectionEmpty:function(){return this.__nt.isSelectionEmpty();},getSelectionContext:function(){return this.__nt.getSelectionContext();},_getManager:function(){return this.__nt;},getSelectables:function(F){return this.__nt.getSelectables(F);},invertSelection:function(){this.__nt.invertSelection();},_getLeadItem:function(){var G=this.__nt.getMode();if(G===v||G===t){return this.__nt.getSelectedItem();}else{return this.__nt.getLeadItem();}},_applySelectionMode:function(H,I){this.__nt.setMode(H);},_applyDragSelection:function(J,K){this.__nt.setDrag(J);},_applyQuickSelection:function(L,M){this.__nt.setQuick(L);},_onSelectionChange:function(e){this.fireDataEvent(s,e.getData());}},destruct:function(){this._disposeObjects(r);}});})();(function(){var a="qx.ui.core.IMultiSelection";qx.Interface.define(a,{extend:qx.ui.core.ISingleSelection,members:{selectAll:function(){return true;},addToSelection:function(b){return arguments.length==1;},removeFromSelection:function(c){return arguments.length==1;}}});})();(function(){var o="one",n="single",m="selected",k="additive",j="multi",h="PageUp",g="under",f="Left",d="lead",c="Down",M="Up",L="Boolean",K="PageDown",J="anchor",I="End",H="Home",G="Right",F="right",E="click",D="above",v="left",w="Escape",t="A",u="Space",r="_applyMode",s="interval",p="changeSelection",q="qx.event.type.Data",x="quick",y="__oG",A="key",z="abstract",C="drag",B="qx.ui.core.selection.Abstract";qx.Class.define(B,{type:z,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__oD={};},events:{"changeSelection":q},properties:{mode:{check:[n,j,k,o],init:n,apply:r},drag:{check:L,init:false},quick:{check:L,init:false}},members:{__oE:0,__oF:0,__oG:null,__oH:null,__oI:null,__oJ:null,__oK:null,__oL:null,__oM:null,__oN:null,__oO:null,__oP:null,__oQ:null,__oR:null,__oS:null,__oT:null,__oU:null,__oD:null,__oV:null,__oW:null,_userInteraction:false,__oX:null,getSelectionContext:function(){return this.__oT;},selectAll:function(){var N=this.getMode();if(N==n||N==o){throw new Error("Can not select all items in selection mode: "+N);}this._selectAllItems();this._fireChange();},selectItem:function(O){this._setSelectedItem(O);var P=this.getMode();if(P!==n&&P!==o){this._setLeadItem(O);this._setAnchorItem(O);}this._scrollItemIntoView(O);this._fireChange();},addItem:function(Q){var R=this.getMode();if(R===n||R===o){this._setSelectedItem(Q);}else{if(!this._getAnchorItem()){this._setAnchorItem(Q);}this._setLeadItem(Q);this._addToSelection(Q);}this._scrollItemIntoView(Q);this._fireChange();},removeItem:function(S){this._removeFromSelection(S);if(this.getMode()===o&&this.isSelectionEmpty()){var T=this._getFirstSelectable();if(T){this.addItem(T);}if(T==S){return;}}if(this.getLeadItem()==S){this._setLeadItem(null);}if(this._getAnchorItem()==S){this._setAnchorItem(null);}this._fireChange();},selectItemRange:function(U,V){var W=this.getMode();if(W==n||W==o){throw new Error("Can not select multiple items in selection mode: "+W);}this._selectItemRange(U,V);this._setAnchorItem(U);this._setLeadItem(V);this._scrollItemIntoView(V);this._fireChange();},clearSelection:function(){if(this.getMode()==o){return;}this._clearSelection();this._setLeadItem(null);this._setAnchorItem(null);this._fireChange();},replaceSelection:function(X){var Y=this.getMode();if(Y==o||Y===n){if(X.length>1){throw new Error("Could not select more than one items in mode: "+Y+"!");}if(X.length==1){this.selectItem(X[0]);}else{this.clearSelection();}return;}else{this._replaceMultiSelection(X);}},getSelectedItem:function(){var ba=this.getMode();if(ba===n||ba===o){return this._getSelectedItem()||null;}throw new Error("The method getSelectedItem() is only supported in 'single' and 'one' selection mode!");},getSelection:function(){return qx.lang.Object.getValues(this.__oD);},getSortedSelection:function(){var bc=this.getSelectables();var bb=qx.lang.Object.getValues(this.__oD);bb.sort(function(a,b){return bc.indexOf(a)-bc.indexOf(b);});return bb;},isItemSelected:function(bd){var be=this._selectableToHashCode(bd);return this.__oD[be]!==undefined;},isSelectionEmpty:function(){return qx.lang.Object.isEmpty(this.__oD);},invertSelection:function(){var bg=this.getMode();if(bg===n||bg===o){throw new Error("The method invertSelection() is only supported in 'multi' and 'additive' selection mode!");}var bf=this.getSelectables();for(var i=0;i<bf.length;i++){this._toggleInSelection(bf[i]);}this._fireChange();},_setLeadItem:function(bh){var bi=this.__oU;if(bi!==null){this._styleSelectable(bi,d,false);}if(bh!==null){this._styleSelectable(bh,d,true);}this.__oU=bh;},getLeadItem:function(){return this.__oU!==null?this.__oU:null;},_setAnchorItem:function(bj){var bk=this.__oV;if(bk){this._styleSelectable(bk,J,false);}if(bj){this._styleSelectable(bj,J,true);}this.__oV=bj;},_getAnchorItem:function(){return this.__oV!==null?this.__oV:null;},_isSelectable:function(bl){throw new Error("Abstract method call: _isSelectable()");},_getSelectableFromMouseEvent:function(event){var bm=event.getTarget();if(bm&&this._isSelectable(bm)){return bm;}return null;},_selectableToHashCode:function(bn){throw new Error("Abstract method call: _selectableToHashCode()");},_styleSelectable:function(bo,bp,bq){throw new Error("Abstract method call: _styleSelectable()");},_capture:function(){throw new Error("Abstract method call: _capture()");},_releaseCapture:function(){throw new Error("Abstract method call: _releaseCapture()");},_getLocation:function(){throw new Error("Abstract method call: _getLocation()");},_getDimension:function(){throw new Error("Abstract method call: _getDimension()");},_getSelectableLocationX:function(br){throw new Error("Abstract method call: _getSelectableLocationX()");},_getSelectableLocationY:function(bs){throw new Error("Abstract method call: _getSelectableLocationY()");},_getScroll:function(){throw new Error("Abstract method call: _getScroll()");},_scrollBy:function(bt,bu){throw new Error("Abstract method call: _scrollBy()");},_scrollItemIntoView:function(bv){throw new Error("Abstract method call: _scrollItemIntoView()");},getSelectables:function(bw){throw new Error("Abstract method call: getSelectables()");},_getSelectableRange:function(bx,by){throw new Error("Abstract method call: _getSelectableRange()");},_getFirstSelectable:function(){throw new Error("Abstract method call: _getFirstSelectable()");},_getLastSelectable:function(){throw new Error("Abstract method call: _getLastSelectable()");},_getRelatedSelectable:function(bz,bA){throw new Error("Abstract method call: _getRelatedSelectable()");},_getPage:function(bB,bC){throw new Error("Abstract method call: _getPage()");},_applyMode:function(bD,bE){this._setLeadItem(null);this._setAnchorItem(null);this._clearSelection();if(bD===o){var bF=this._getFirstSelectable();if(bF){this._setSelectedItem(bF);this._scrollItemIntoView(bF);}}this._fireChange();},handleMouseOver:function(event){if(this.__oX!=null&&this.__oX!=this._getScroll().top){this.__oX=null;return;}this._userInteraction=true;if(!this.getQuick()){this._userInteraction=false;return;}var bH=this.getMode();if(bH!==o&&bH!==n){this._userInteraction=false;return;}var bG=this._getSelectableFromMouseEvent(event);if(bG===null){this._userInteraction=false;return;}this._setSelectedItem(bG);this._fireChange(x);this._userInteraction=false;},handleMouseDown:function(event){this._userInteraction=true;var bJ=this._getSelectableFromMouseEvent(event);if(bJ===null){this._userInteraction=false;return;}var bL=event.isCtrlPressed()||(qx.bom.client.Platform.MAC&&event.isMetaPressed());var bI=event.isShiftPressed();if(this.isItemSelected(bJ)&&!bI&&!bL&&!this.getDrag()){this.__oW=bJ;this._userInteraction=false;return;}else{this.__oW=null;}this._scrollItemIntoView(bJ);switch(this.getMode()){case n:case o:this._setSelectedItem(bJ);break;case k:this._setLeadItem(bJ);this._setAnchorItem(bJ);this._toggleInSelection(bJ);break;case j:this._setLeadItem(bJ);if(bI){var bK=this._getAnchorItem();if(bK===null){bK=this._getFirstSelectable();this._setAnchorItem(bK);}this._selectItemRange(bK,bJ,bL);}else if(bL){this._setAnchorItem(bJ);this._toggleInSelection(bJ);}else{this._setAnchorItem(bJ);this._setSelectedItem(bJ);}break;}var bM=this.getMode();if(this.getDrag()&&bM!==n&&bM!==o&&!bI&&!bL){this.__oK=this._getLocation();this.__oH=this._getScroll();this.__oL=event.getDocumentLeft()+this.__oH.left;this.__oM=event.getDocumentTop()+this.__oH.top;this.__oN=true;this._capture();}this._fireChange(E);this._userInteraction=false;},handleMouseUp:function(event){this._userInteraction=true;var bQ=event.isCtrlPressed()||(qx.bom.client.Platform.MAC&&event.isMetaPressed());var bN=event.isShiftPressed();if(!bQ&&!bN&&this.__oW){var bO=this._getSelectableFromMouseEvent(event);if(bO===null||!this.isItemSelected(bO)){this._userInteraction=false;return;}var bP=this.getMode();if(bP===k){this._removeFromSelection(bO);}else{this._setSelectedItem(bO);if(this.getMode()===j){this._setLeadItem(bO);this._setAnchorItem(bO);}}this._userInteraction=false;}this._cleanup();},handleLoseCapture:function(event){this._cleanup();},handleMouseMove:function(event){if(!this.__oN){return;}this.__oO=event.getDocumentLeft();this.__oP=event.getDocumentTop();this._userInteraction=true;var bS=this.__oO+this.__oH.left;if(bS>this.__oL){this.__oQ=1;}else if(bS<this.__oL){this.__oQ=-1;}else{this.__oQ=0;}var bR=this.__oP+this.__oH.top;if(bR>this.__oM){this.__oR=1;}else if(bR<this.__oM){this.__oR=-1;}else{this.__oR=0;}var location=this.__oK;if(this.__oO<location.left){this.__oE=this.__oO-location.left;}else if(this.__oO>location.right){this.__oE=this.__oO-location.right;}else{this.__oE=0;}if(this.__oP<location.top){this.__oF=this.__oP-location.top;}else if(this.__oP>location.bottom){this.__oF=this.__oP-location.bottom;}else{this.__oF=0;}if(!this.__oG){this.__oG=new qx.event.Timer(100);this.__oG.addListener(s,this._onInterval,this);}this.__oG.start();this._autoSelect();event.stopPropagation();this._userInteraction=false;},handleAddItem:function(e){var bT=e.getData();if(this.getMode()===o&&this.isSelectionEmpty()){this.addItem(bT);}},handleRemoveItem:function(e){this.removeItem(e.getData());},_cleanup:function(){if(!this.getDrag()&&this.__oN){return;}if(this.__oS){this._fireChange(E);}delete this.__oN;delete this.__oI;delete this.__oJ;this._releaseCapture();if(this.__oG){this.__oG.stop();}},_onInterval:function(e){this._scrollBy(this.__oE,this.__oF);this.__oH=this._getScroll();this._autoSelect();},_autoSelect:function(){var cd=this._getDimension();var bV=Math.max(0,Math.min(this.__oO-this.__oK.left,cd.width))+this.__oH.left;var bU=Math.max(0,Math.min(this.__oP-this.__oK.top,cd.height))+this.__oH.top;if(this.__oI===bV&&this.__oJ===bU){return;}this.__oI=bV;this.__oJ=bU;var cf=this._getAnchorItem();var bX=cf;var cb=this.__oQ;var ce,bW;while(cb!==0){ce=cb>0?this._getRelatedSelectable(bX,F):this._getRelatedSelectable(bX,v);if(ce!==null){bW=this._getSelectableLocationX(ce);if((cb>0&&bW.left<=bV)||(cb<0&&bW.right>=bV)){bX=ce;continue;}}break;}var cc=this.__oR;var ca,bY;while(cc!==0){ca=cc>0?this._getRelatedSelectable(bX,g):this._getRelatedSelectable(bX,D);if(ca!==null){bY=this._getSelectableLocationY(ca);if((cc>0&&bY.top<=bU)||(cc<0&&bY.bottom>=bU)){bX=ca;continue;}}break;}var cg=this.getMode();if(cg===j){this._selectItemRange(cf,bX);}else if(cg===k){if(this.isItemSelected(cf)){this._selectItemRange(cf,bX,true);}else{this._deselectItemRange(cf,bX);}this._setAnchorItem(bX);}this._fireChange(C);},__oY:{Home:1,Down:1,Right:1,PageDown:1,End:1,Up:1,Left:1,PageUp:1},handleKeyPress:function(event){this._userInteraction=true;var cm,cl;var co=event.getKeyIdentifier();var cn=this.getMode();var ci=event.isCtrlPressed()||(qx.bom.client.Platform.MAC&&event.isMetaPressed());var cj=event.isShiftPressed();var ck=false;if(co===t&&ci){if(cn!==n&&cn!==o){this._selectAllItems();ck=true;}}else if(co===w){if(cn!==n&&cn!==o){this._clearSelection();ck=true;}}else if(co===u){var ch=this.getLeadItem();if(ch&&!cj){if(ci||cn===k){this._toggleInSelection(ch);}else{this._setSelectedItem(ch);}ck=true;}}else if(this.__oY[co]){ck=true;if(cn===n||cn==o){cm=this._getSelectedItem();}else{cm=this.getLeadItem();}if(cm!==null){switch(co){case H:cl=this._getFirstSelectable();break;case I:cl=this._getLastSelectable();break;case M:cl=this._getRelatedSelectable(cm,D);break;case c:cl=this._getRelatedSelectable(cm,g);break;case f:cl=this._getRelatedSelectable(cm,v);break;case G:cl=this._getRelatedSelectable(cm,F);break;case h:cl=this._getPage(cm,true);break;case K:cl=this._getPage(cm,false);break;}}else{switch(co){case H:case c:case G:case K:cl=this._getFirstSelectable();break;case I:case M:case f:case h:cl=this._getLastSelectable();break;}}if(cl!==null){switch(cn){case n:case o:this._setSelectedItem(cl);break;case k:this._setLeadItem(cl);break;case j:if(cj){var cp=this._getAnchorItem();if(cp===null){this._setAnchorItem(cp=this._getFirstSelectable());}this._setLeadItem(cl);this._selectItemRange(cp,cl,ci);}else{this._setAnchorItem(cl);this._setLeadItem(cl);if(!ci){this._setSelectedItem(cl);}}break;}this.__oX=this._getScroll().top;this._scrollItemIntoView(cl);}}if(ck){event.stop();this._fireChange(A);}this._userInteraction=false;},_selectAllItems:function(){var cq=this.getSelectables();for(var i=0,l=cq.length;i<l;i++){this._addToSelection(cq[i]);}},_clearSelection:function(){var cr=this.__oD;for(var cs in cr){this._removeFromSelection(cr[cs]);}this.__oD={};},_selectItemRange:function(ct,cu,cv){var cy=this._getSelectableRange(ct,cu);if(!cv){var cx=this.__oD;var cz=this.__pa(cy);for(var cw in cx){if(!cz[cw]){this._removeFromSelection(cx[cw]);}}}for(var i=0,l=cy.length;i<l;i++){this._addToSelection(cy[i]);}},_deselectItemRange:function(cA,cB){var cC=this._getSelectableRange(cA,cB);for(var i=0,l=cC.length;i<l;i++){this._removeFromSelection(cC[i]);}},__pa:function(cD){var cF={};var cE;for(var i=0,l=cD.length;i<l;i++){cE=cD[i];cF[this._selectableToHashCode(cE)]=cE;}return cF;},_getSelectedItem:function(){for(var cG in this.__oD){return this.__oD[cG];}return null;},_setSelectedItem:function(cH){if(this._isSelectable(cH)){var cI=this.__oD;var cJ=this._selectableToHashCode(cH);if(!cI[cJ]||qx.lang.Object.hasMinLength(cI,2)){this._clearSelection();this._addToSelection(cH);}}},_addToSelection:function(cK){var cL=this._selectableToHashCode(cK);if(!this.__oD[cL]&&this._isSelectable(cK)){this.__oD[cL]=cK;this._styleSelectable(cK,m,true);this.__oS=true;}},_toggleInSelection:function(cM){var cN=this._selectableToHashCode(cM);if(!this.__oD[cN]){this.__oD[cN]=cM;this._styleSelectable(cM,m,true);}else{delete this.__oD[cN];this._styleSelectable(cM,m,false);}this.__oS=true;},_removeFromSelection:function(cO){var cP=this._selectableToHashCode(cO);if(this.__oD[cP]!=null){delete this.__oD[cP];this._styleSelectable(cO,m,false);this.__oS=true;}},_replaceMultiSelection:function(cQ){var cT=false;var cW,cV;var cR={};for(var i=0,l=cQ.length;i<l;i++){cW=cQ[i];if(this._isSelectable(cW)){cV=this._selectableToHashCode(cW);cR[cV]=cW;}}var cX=cQ[0];var cS=cW;var cU=this.__oD;for(var cV in cU){if(cR[cV]){delete cR[cV];}else{cW=cU[cV];delete cU[cV];this._styleSelectable(cW,m,false);cT=true;}}for(var cV in cR){cW=cU[cV]=cR[cV];this._styleSelectable(cW,m,true);cT=true;}if(!cT){return false;}this._scrollItemIntoView(cS);this._setLeadItem(cX);this._setAnchorItem(cX);this.__oS=true;this._fireChange();},_fireChange:function(cY){if(this.__oS){this.__oT=cY||null;this.fireDataEvent(p,this.getSelection());delete this.__oS;}}},destruct:function(){this._disposeObjects(y);this.__oD=this.__oW=this.__oV=null;this.__oU=null;}});})();(function(){var f="vertical",e="under",d="above",c="qx.ui.core.selection.Widget",b="left",a="right";qx.Class.define(c,{extend:qx.ui.core.selection.Abstract,construct:function(g){qx.ui.core.selection.Abstract.call(this);this.__nW=g;},members:{__nW:null,_isSelectable:function(h){return this._isItemSelectable(h)&&h.getLayoutParent()===this.__nW;},_selectableToHashCode:function(j){return j.$$hash;},_styleSelectable:function(k,m,n){n?k.addState(m):k.removeState(m);},_capture:function(){this.__nW.capture();},_releaseCapture:function(){this.__nW.releaseCapture();},_isItemSelectable:function(o){if(this._userInteraction){return o.isVisible()&&o.isEnabled();}else{return o.isVisible();}},_getWidget:function(){return this.__nW;},_getLocation:function(){var p=this.__nW.getContentElement().getDomElement();return p?qx.bom.element.Location.get(p):null;},_getDimension:function(){return this.__nW.getInnerSize();},_getSelectableLocationX:function(q){var r=q.getBounds();if(r){return {left:r.left,right:r.left+r.width};}},_getSelectableLocationY:function(s){var t=s.getBounds();if(t){return {top:t.top,bottom:t.top+t.height};}},_getScroll:function(){return {left:0,top:0};},_scrollBy:function(u,v){},_scrollItemIntoView:function(w){this.__nW.scrollChildIntoView(w);},getSelectables:function(x){var y=false;if(!x){y=this._userInteraction;this._userInteraction=true;}var B=this.__nW.getChildren();var z=[];var A;for(var i=0,l=B.length;i<l;i++){A=B[i];if(this._isItemSelectable(A)){z.push(A);}}this._userInteraction=y;return z;},_getSelectableRange:function(C,D){if(C===D){return [C];}var H=this.__nW.getChildren();var E=[];var G=false;var F;for(var i=0,l=H.length;i<l;i++){F=H[i];if(F===C||F===D){if(G){E.push(F);break;}else{G=true;}}if(G&&this._isItemSelectable(F)){E.push(F);}}return E;},_getFirstSelectable:function(){var I=this.__nW.getChildren();for(var i=0,l=I.length;i<l;i++){if(this._isItemSelectable(I[i])){return I[i];}}return null;},_getLastSelectable:function(){var J=this.__nW.getChildren();for(var i=J.length-1;i>0;i--){if(this._isItemSelectable(J[i])){return J[i];}}return null;},_getRelatedSelectable:function(K,L){var O=this.__nW.getOrientation()===f;var N=this.__nW.getChildren();var M=N.indexOf(K);var P;if((O&&L===d)||(!O&&L===b)){for(var i=M-1;i>=0;i--){P=N[i];if(this._isItemSelectable(P)){return P;}}}else if((O&&L===e)||(!O&&L===a)){for(var i=M+1;i<N.length;i++){P=N[i];if(this._isItemSelectable(P)){return P;}}}return null;},_getPage:function(Q,R){if(R){return this._getFirstSelectable();}else{return this._getLastSelectable();}}},destruct:function(){this.__nW=null;}});})();(function(){var a="qx.ui.core.selection.ScrollArea";qx.Class.define(a,{extend:qx.ui.core.selection.Widget,members:{_isSelectable:function(b){return this._isItemSelectable(b)&&b.getLayoutParent()===this._getWidget().getChildrenContainer();},_getDimension:function(){return this._getWidget().getPaneSize();},_getScroll:function(){var c=this._getWidget();return {left:c.getScrollX(),top:c.getScrollY()};},_scrollBy:function(d,e){var f=this._getWidget();f.scrollByX(d);f.scrollByY(e);},_getPage:function(g,h){var m=this.getSelectables();var length=m.length;var p=m.indexOf(g);if(p===-1){throw new Error("Invalid lead item: "+g);}var j=this._getWidget();var r=j.getScrollY();var innerHeight=j.getInnerSize().height;var top,l,q;if(h){var o=r;var i=p;while(1){for(;i>=0;i--){top=j.getItemTop(m[i]);if(top<o){q=i+1;break;}}if(q==null){var s=this._getFirstSelectable();return s==g?null:s;}if(q>=p){o-=innerHeight+r-j.getItemBottom(g);q=null;continue;}return m[q];}}else{var n=innerHeight+r;var i=p;while(1){for(;i<length;i++){l=j.getItemBottom(m[i]);if(l>n){q=i-1;break;}}if(q==null){var k=this._getLastSelectable();return k==g?null:k;}if(q<=p){n+=j.getItemTop(g)-r;q=null;continue;}return m[q];}}}}});})();(function(){var e="right",d="above",c="left",b="under",a="qx.ui.tree.SelectionManager";qx.Class.define(a,{extend:qx.ui.core.selection.ScrollArea,members:{_getSelectableLocationY:function(f){var g=f.getBounds();if(g){var top=this._getWidget().getItemTop(f);return {top:top,bottom:top+g.height};}},_isSelectable:function(h){return this._isItemSelectable(h)&&h instanceof qx.ui.tree.AbstractTreeItem;},_getSelectableFromMouseEvent:function(event){return this._getWidget().getTreeItem(event.getTarget());},getSelectables:function(j){var m=false;if(!j){m=this._userInteraction;this._userInteraction=true;}var l=this._getWidget();var n=[];if(l.getRoot()!=null){var k=l.getRoot().getItems(true,!!j,l.getHideRoot());for(var i=0;i<k.length;i++){if(this._isSelectable(k[i])){n.push(k[i]);}}}this._userInteraction=m;return n;},_getSelectableRange:function(o,p){if(o===p){return [o];}var q=this.getSelectables();var r=q.indexOf(o);var s=q.indexOf(p);if(r<0||s<0){return [];}if(r<s){return q.slice(r,s+1);}else{return q.slice(s,r+1);}},_getFirstSelectable:function(){return this.getSelectables()[0]||null;},_getLastSelectable:function(){var t=this.getSelectables();if(t.length>0){return t[t.length-1];}else{return null;}},_getRelatedSelectable:function(u,v){var w=this._getWidget();var x=null;switch(v){case d:x=w.getPreviousNodeOf(u,false);break;case b:x=w.getNextNodeOf(u,false);break;case c:case e:break;}if(!x){return null;}if(this._isSelectable(x)){return x;}else{return this._getRelatedSelectable(x,v);}}}});})();(function(){var l="dblclick",k="click",j="Boolean",h="excluded",g="visible",f="qx.event.type.Data",d="_applyOpenMode",c="Space",b="Left",a="Enter",z="changeOpenMode",y="_applyRootOpenClose",x="changeSelection",w="qx.ui.tree.Tree",v="tree",u="_applyHideRoot",t="changeRoot",s="_applyRoot",r="keypress",q="none",o="pane",p="Right",m="qx.ui.tree.AbstractTreeItem",n="__sv";qx.Class.define(w,{extend:qx.ui.core.scroll.AbstractScrollArea,implement:[qx.ui.core.IMultiSelection,qx.ui.form.IModelSelection,qx.ui.form.IForm],include:[qx.ui.core.MMultiSelectionHandling,qx.ui.core.MContentPadding,qx.ui.form.MModelSelection,qx.ui.form.MForm],construct:function(){qx.ui.core.scroll.AbstractScrollArea.call(this);this.__sv=new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({allowShrinkY:false,allowGrowX:true});this.getChildControl(o).add(this.__sv);this.initOpenMode();this.initRootOpenClose();this.addListener(x,this._onChangeSelection,this);this.addListener(r,this._onKeyPress,this);},events:{addItem:f,removeItem:f},properties:{openMode:{check:[k,l,q],init:l,apply:d,event:z,themeable:true},root:{check:m,init:null,nullable:true,event:t,apply:s},hideRoot:{check:j,init:false,apply:u},rootOpenClose:{check:j,init:false,apply:y},appearance:{refine:true,init:v},focusable:{refine:true,init:true}},members:{__sv:null,SELECTION_MANAGER:qx.ui.tree.SelectionManager,getChildrenContainer:function(){return this.__sv;},_applyRoot:function(A,B){var C=this.getChildrenContainer();if(B){C.remove(B);if(B.hasChildren()){C.remove(B.getChildrenContainer());}}if(A){C.add(A);if(A.hasChildren()){C.add(A.getChildrenContainer());}A.setVisibility(this.getHideRoot()?h:g);A.recursiveAddToWidgetQueue();}},_applyHideRoot:function(D,E){var F=this.getRoot();if(!F){return;}F.setVisibility(D?h:g);F.recursiveAddToWidgetQueue();},_applyRootOpenClose:function(G,H){var I=this.getRoot();if(!I){return;}I.recursiveAddToWidgetQueue();},_getContentPaddingTarget:function(){return this.__sv;},getNextNodeOf:function(J,K){if((K!==false||J.isOpen())&&J.hasChildren()){return J.getChildren()[0];}while(J){var parent=J.getParent();if(!parent){return null;}var M=parent.getChildren();var L=M.indexOf(J);if(L>-1&&L<M.length-1){return M[L+1];}J=parent;}return null;},getPreviousNodeOf:function(N,O){var parent=N.getParent();if(!parent){return null;}if(this.getHideRoot()){if(parent==this.getRoot()){if(parent.getChildren()[0]==N){return null;}}}else{if(N==this.getRoot()){return null;}}var R=parent.getChildren();var P=R.indexOf(N);if(P>0){var Q=R[P-1];while((O!==false||Q.isOpen())&&Q.hasChildren()){var S=Q.getChildren();Q=S[S.length-1];}return Q;}else{return parent;}},getNextSiblingOf:function(T){if(T==this.getRoot()){return null;}var parent=T.getParent();var U=parent.getChildren();var V=U.indexOf(T);if(V<U.length-1){return U[V+1];}return null;},getPreviousSiblingOf:function(W){if(W==this.getRoot()){return null;}var parent=W.getParent();var X=parent.getChildren();var Y=X.indexOf(W);if(Y>0){return X[Y-1];}return null;},getItems:function(ba,bb){if(this.getRoot()!=null){return this.getRoot().getItems(ba,bb,this.getHideRoot());}else{return [];}},getChildren:function(){if(this.getRoot()!=null){return [this.getRoot()];}else{return [];}},getTreeItem:function(bc){while(bc){if(bc==this){return null;}if(bc instanceof qx.ui.tree.AbstractTreeItem){return bc;}bc=bc.getLayoutParent();}return null;},_applyOpenMode:function(bd,be){if(be==k){this.removeListener(k,this._onOpen,this);}else if(be==l){this.removeListener(l,this._onOpen,this);}if(bd==k){this.addListener(k,this._onOpen,this);}else if(bd==l){this.addListener(l,this._onOpen,this);}},_onOpen:function(e){var bf=this.getTreeItem(e.getTarget());if(!bf||!bf.isOpenable()){return;}bf.setOpen(!bf.isOpen());e.stopPropagation();},_onChangeSelection:function(e){var bh=e.getData();for(var i=0;i<bh.length;i++){var bg=bh[i];while(bg.getParent()!=null){bg=bg.getParent();bg.setOpen(true);}}},_onKeyPress:function(e){var bi=this._getLeadItem();if(bi!==null){switch(e.getKeyIdentifier()){case b:if(bi.isOpenable()&&bi.isOpen()){bi.setOpen(false);}break;case p:if(bi.isOpenable()&&!bi.isOpen()){bi.setOpen(true);}break;case a:case c:if(bi.isOpenable()){bi.toggleOpen();}break;}}}},destruct:function(){this._disposeObjects(n);}});})();(function(){var d=".",c="apiviewer.ui.PackageTree",b="Documentation",a="__SR";qx.Class.define(c,{extend:qx.ui.tree.Tree,construct:function(){qx.ui.tree.Tree.call(this,b);this.setDecorator(null);this.__SR=new qx.ui.tree.TreeFolder("Packages");this.__SR.setOpen(true);this.setRoot(this.__SR);this.setSelection([this.__SR]);this._classTreeNodeHash={};},members:{__SR:null,setTreeData:function(e){this._docTree=e;this.__ST(this.__SR,e,0);if(this._wantedClassName){this.selectTreeNodeByClassName(this._wantedClassName);this._wantedClassName=null;}},selectTreeNodeByClassName:function(f){if(this._docTree==null){this._wantedClassName=f;return true;}var j=f.split(d);var h=j[0];var i=0;do{var g=this._classTreeNodeHash[h];if(!g){return false;}if(!g.loaded){g.setOpen(true);}i++;h+=d+j[i];}while(i<j.length);this.setSelection([g]);this.scrollChildIntoView(g);return true;},__SS:function(k,l,m){var self=this;return function(){if(!k.loaded){self.__ST(k,l,m+1);k.setOpenSymbolMode("always");}};},__ST:function(n,o,p){n.loaded=true;var s=apiviewer.ui.PackageTree;var q=o.getPackages();for(var i=0;i<q.length;i++){var r=q[i];var v=apiviewer.TreeUtil.getIconUrl(r);var w=new qx.ui.tree.TreeFolder(r.getName());w.setIcon(v);w.setOpenSymbolMode("always");w.setUserData("nodeName",r.getFullName());n.add(w);w.addListener("changeOpen",this.__SS(w,r,p+1),this);if(p<qx.core.Setting.get("apiviewer.initialTreeDepth")&&r.getPackages().length>0){w.setOpen(true);}this._classTreeNodeHash[r.getFullName()]=w;}var x=o.getClasses();for(var i=0;i<x.length;i++){var u=x[i];var v=apiviewer.TreeUtil.getIconUrl(u);var t=new qx.ui.tree.TreeFolder(u.getName());t.setIcon(v);t.setUserData("nodeName",u.getFullName());t.treeType=s.PACKAGE_TREE;n.add(t);this._classTreeNodeHash[u.getFullName()]=t;}}},destruct:function(){this._docTree=this._classTreeNodeHash=null;this._disposeObjects(a);}});})();(function(){var b="qx.ui.core.scroll.IScrollBar",a="qx.event.type.Data";qx.Interface.define(b,{events:{"scroll":a},properties:{orientation:{},maximum:{},position:{},knobFactor:{}},members:{scrollTo:function(c){this.assertNumber(c);},scrollBy:function(d){this.assertNumber(d);},scrollBySteps:function(e){this.assertNumber(e);}}});})();(function(){var k="horizontal",j="px",i="scroll",h="vertical",g="-1px",f="qx.client",d="0",c="hidden",b="mousedown",a="qx.ui.core.scroll.NativeScrollBar",z="PositiveNumber",y="__pT",x="Integer",w="mousemove",v="_applyMaximum",u="_applyOrientation",t="appear",s="opera",r="PositiveInteger",q="mshtml",o="mouseup",p="Number",m="_applyPosition",n="scrollbar",l="native";qx.Class.define(a,{extend:qx.ui.core.Widget,implement:qx.ui.core.scroll.IScrollBar,construct:function(A){qx.ui.core.Widget.call(this);this.addState(l);this.getContentElement().addListener(i,this._onScroll,this);this.addListener(b,this._stopPropagation,this);this.addListener(o,this._stopPropagation,this);this.addListener(w,this._stopPropagation,this);if(qx.core.Variant.isSet(f,s)){this.addListener(t,this._onAppear,this);}this.getContentElement().add(this._getScrollPaneElement());if(A!=null){this.setOrientation(A);}else{this.initOrientation();}},properties:{appearance:{refine:true,init:n},orientation:{check:[k,h],init:k,apply:u},maximum:{check:r,apply:v,init:100},position:{check:p,init:0,apply:m,event:i},singleStep:{check:x,init:20},knobFactor:{check:z,nullable:true}},members:{__pS:null,__pT:null,_getScrollPaneElement:function(){if(!this.__pT){this.__pT=new qx.html.Element();}return this.__pT;},renderLayout:function(B,top,C,D){var E=qx.ui.core.Widget.prototype.renderLayout.call(this,B,top,C,D);this._updateScrollBar();return E;},_getContentHint:function(){var F=qx.bom.element.Overflow.getScrollbarWidth();return {width:this.__pS?100:F,maxWidth:this.__pS?null:F,minWidth:this.__pS?null:F,height:this.__pS?F:100,maxHeight:this.__pS?F:null,minHeight:this.__pS?F:null};},_applyEnabled:function(G,H){qx.ui.core.Widget.prototype._applyEnabled.call(this,G,H);this._updateScrollBar();},_applyMaximum:function(I){this._updateScrollBar();},_applyPosition:function(J){var content=this.getContentElement();if(this.__pS){content.scrollToX(J);}else{content.scrollToY(J);}},_applyOrientation:function(K,L){var M=this.__pS=K===k;this.set({allowGrowX:M,allowShrinkX:M,allowGrowY:!M,allowShrinkY:!M});if(M){this.replaceState(h,k);}else{this.replaceState(k,h);}this.getContentElement().setStyles({overflowX:M?i:c,overflowY:M?c:i});qx.ui.core.queue.Layout.add(this);},_updateScrollBar:function(){var O=this.__pS;var P=this.getBounds();if(!P){return;}if(this.isEnabled()){var Q=O?P.width:P.height;var N=this.getMaximum()+Q;}else{N=0;}if(qx.core.Variant.isSet(f,q)){var P=this.getBounds();this.getContentElement().setStyles({left:O?d:g,top:O?g:d,width:(O?P.width:P.width+1)+j,height:(O?P.height+1:P.height)+j});}this._getScrollPaneElement().setStyles({left:0,top:0,width:(O?N:1)+j,height:(O?1:N)+j});this.scrollTo(this.getPosition());},scrollTo:function(R){this.setPosition(Math.max(0,Math.min(this.getMaximum(),R)));},scrollBy:function(S){this.scrollTo(this.getPosition()+S);},scrollBySteps:function(T){var U=this.getSingleStep();this.scrollBy(T*U);},_onScroll:function(e){var W=this.getContentElement();var V=this.__pS?W.getScrollX():W.getScrollY();this.setPosition(V);},_onAppear:function(e){this.scrollTo(this.getPosition());},_stopPropagation:function(e){e.stopPropagation();}},destruct:function(){this._disposeObjects(y);}});})();(function(){var k="slider",j="horizontal",i="button-begin",h="vertical",g="button-end",f="Integer",d="execute",c="right",b="left",a="down",z="up",y="PositiveNumber",x="changeValue",w="qx.lang.Type.isNumber(value)&&value>=0&&value<=this.getMaximum()",v="_applyKnobFactor",u="knob",t="qx.ui.core.scroll.ScrollBar",s="resize",r="_applyOrientation",q="_applyPageStep",o="PositiveInteger",p="scroll",m="_applyPosition",n="scrollbar",l="_applyMaximum";qx.Class.define(t,{extend:qx.ui.core.Widget,implement:qx.ui.core.scroll.IScrollBar,construct:function(A){qx.ui.core.Widget.call(this);this._createChildControl(i);this._createChildControl(k).addListener(s,this._onResizeSlider,this);this._createChildControl(g);if(A!=null){this.setOrientation(A);}else{this.initOrientation();}},properties:{appearance:{refine:true,init:n},orientation:{check:[j,h],init:j,apply:r},maximum:{check:o,apply:l,init:100},position:{check:w,init:0,apply:m,event:p},singleStep:{check:f,init:20},pageStep:{check:f,init:10,apply:q},knobFactor:{check:y,apply:v,nullable:true}},members:{__oC:2,_createChildControlImpl:function(B,C){var D;switch(B){case k:D=new qx.ui.core.scroll.ScrollSlider();D.setPageStep(100);D.setFocusable(false);D.addListener(x,this._onChangeSliderValue,this);this._add(D,{flex:1});break;case i:D=new qx.ui.form.RepeatButton();D.setFocusable(false);D.addListener(d,this._onExecuteBegin,this);this._add(D);break;case g:D=new qx.ui.form.RepeatButton();D.setFocusable(false);D.addListener(d,this._onExecuteEnd,this);this._add(D);break;}return D||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,B);},_applyMaximum:function(E){this.getChildControl(k).setMaximum(E);},_applyPosition:function(F){this.getChildControl(k).setValue(F);},_applyKnobFactor:function(G){this.getChildControl(k).setKnobFactor(G);},_applyPageStep:function(H){this.getChildControl(k).setPageStep(H);},_applyOrientation:function(I,J){var K=this._getLayout();if(K){K.dispose();}if(I===j){this._setLayout(new qx.ui.layout.HBox());this.setAllowStretchX(true);this.setAllowStretchY(false);this.replaceState(h,j);this.getChildControl(i).replaceState(z,b);this.getChildControl(g).replaceState(a,c);}else{this._setLayout(new qx.ui.layout.VBox());this.setAllowStretchX(false);this.setAllowStretchY(true);this.replaceState(j,h);this.getChildControl(i).replaceState(b,z);this.getChildControl(g).replaceState(c,a);}this.getChildControl(k).setOrientation(I);},scrollTo:function(L){this.getChildControl(k).slideTo(L);},scrollBy:function(M){this.getChildControl(k).slideBy(M);},scrollBySteps:function(N){var O=this.getSingleStep();this.getChildControl(k).slideBy(N*O);},_onExecuteBegin:function(e){this.scrollBy(-this.getSingleStep());},_onExecuteEnd:function(e){this.scrollBy(this.getSingleStep());},_onChangeSliderValue:function(e){this.setPosition(e.getData());},_onResizeSlider:function(e){var P=this.getChildControl(k).getChildControl(u);var S=P.getSizeHint();var Q=false;var R=this.getChildControl(k).getInnerSize();if(this.getOrientation()==h){if(R.height<S.minHeight+this.__oC){Q=true;}}else{if(R.width<S.minWidth+this.__oC){Q=true;}}if(Q){P.exclude();}else{P.show();}}}});})();(function(){var a="qx.ui.form.IRange";qx.Interface.define(a,{members:{setMinimum:function(b){return arguments.length==1;},getMinimum:function(){},setMaximum:function(c){return arguments.length==1;},getMaximum:function(){},setSingleStep:function(d){return arguments.length==1;},getSingleStep:function(){},setPageStep:function(e){return arguments.length==1;},getPageStep:function(){}}});})();(function(){var b="qx.ui.form.INumberForm",a="qx.event.type.Data";qx.Interface.define(b,{events:{"changeValue":a},members:{setValue:function(c){return arguments.length==1;},resetValue:function(){},getValue:function(){}}});})();(function(){var k="knob",j="horizontal",i="vertical",h="Integer",g="hovered",f="left",d="top",c="mouseup",b="pressed",a="px",V="changeValue",U="interval",T="mousemove",S="resize",R="slider",Q="mousedown",P="PageUp",O="mouseout",N='qx.event.type.Data',M="Left",r="Down",s="Up",p="dblclick",q="qx.ui.form.Slider",n="PageDown",o="mousewheel",l="_applyValue",m="_applyKnobFactor",t="End",u="height",B="Right",z="width",F="_applyOrientation",D="Home",I="mouseover",H="floor",w="_applyMinimum",L="click",K="typeof value==='number'&&value>=this.getMinimum()&&value<=this.getMaximum()",J="keypress",v="ceil",x="losecapture",y="contextmenu",A="_applyMaximum",C="Number",E="changeMaximum",G="changeMinimum";qx.Class.define(q,{extend:qx.ui.core.Widget,implement:[qx.ui.form.IForm,qx.ui.form.INumberForm,qx.ui.form.IRange],include:[qx.ui.form.MForm],construct:function(W){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.layout.Canvas());this.addListener(J,this._onKeyPress);this.addListener(o,this._onMouseWheel);this.addListener(Q,this._onMouseDown);this.addListener(c,this._onMouseUp);this.addListener(x,this._onMouseUp);this.addListener(S,this._onUpdate);this.addListener(y,this._onStopEvent);this.addListener(L,this._onStopEvent);this.addListener(p,this._onStopEvent);if(W!=null){this.setOrientation(W);}else{this.initOrientation();}},events:{changeValue:N},properties:{appearance:{refine:true,init:R},focusable:{refine:true,init:true},orientation:{check:[j,i],init:j,apply:F},value:{check:K,init:0,apply:l,nullable:true},minimum:{check:h,init:0,apply:w,event:G},maximum:{check:h,init:100,apply:A,event:E},singleStep:{check:h,init:1},pageStep:{check:h,init:10},knobFactor:{check:C,apply:m,nullable:true}},members:{__nA:null,__nB:null,__nC:null,__nD:null,__nE:null,__nF:null,__nG:null,__nH:null,__nI:null,__nJ:null,__nK:null,__nL:null,_forwardStates:{invalid:true},_createChildControlImpl:function(X,Y){var ba;switch(X){case k:ba=new qx.ui.core.Widget();ba.addListener(S,this._onUpdate,this);ba.addListener(I,this._onMouseOver);ba.addListener(O,this._onMouseOut);this._add(ba);break;}return ba||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,X);},_onMouseOver:function(e){this.addState(g);},_onMouseOut:function(e){this.removeState(g);},_onMouseWheel:function(e){var bb=e.getWheelDelta()>0?1:-1;this.slideBy(bb*this.getSingleStep());e.stop();},_onKeyPress:function(e){var bd=this.getOrientation()===j;var bc=bd?M:s;var forward=bd?B:r;switch(e.getKeyIdentifier()){case forward:this.slideForward();break;case bc:this.slideBack();break;case n:this.slidePageForward();break;case P:this.slidePageBack();break;case D:this.slideToBegin();break;case t:this.slideToEnd();break;default:return;}e.stop();},_onMouseDown:function(e){if(this.__nD){return;}var bg=this.__nN;var be=this.getChildControl(k);var bf=bg?f:d;var bi=bg?e.getDocumentLeft():e.getDocumentTop();var bj=this.__nA=qx.bom.element.Location.get(this.getContentElement().getDomElement())[bf];var bh=this.__nB=qx.bom.element.Location.get(be.getContainerElement().getDomElement())[bf];if(e.getTarget()===be){this.__nD=true;if(!this.__nJ){this.__nJ=new qx.event.Timer(100);this.__nJ.addListener(U,this._fireValue,this);}this.__nJ.start();this.__nE=bi+bj-bh;be.addState(b);}else{this.__nF=true;this.__nG=bi<=bh?-1:1;this.__nO(e);this._onInterval();if(!this.__nI){this.__nI=new qx.event.Timer(100);this.__nI.addListener(U,this._onInterval,this);}this.__nI.start();}this.addListener(T,this._onMouseMove);this.capture();e.stopPropagation();},_onMouseUp:function(e){if(this.__nD){this.releaseCapture();delete this.__nD;this.__nJ.stop();this._fireValue();delete this.__nE;this.getChildControl(k).removeState(b);if(e.getType()===c){var bl;var bm;var bk;if(this.__nN){bl=e.getDocumentLeft()-(this._valueToPosition(this.getValue())+this.__nA);bk=qx.bom.element.Location.get(this.getContentElement().getDomElement())[d];bm=e.getDocumentTop()-(bk+this.getChildControl(k).getBounds().top);}else{bl=e.getDocumentTop()-(this._valueToPosition(this.getValue())+this.__nA);bk=qx.bom.element.Location.get(this.getContentElement().getDomElement())[f];bm=e.getDocumentLeft()-(bk+this.getChildControl(k).getBounds().left);}if(bm<0||bm>this.__nC||bl<0||bl>this.__nC){this.getChildControl(k).removeState(g);}}}else if(this.__nF){this.__nI.stop();this.releaseCapture();delete this.__nF;delete this.__nG;delete this.__nH;}this.removeListener(T,this._onMouseMove);if(e.getType()===c){e.stopPropagation();}},_onMouseMove:function(e){if(this.__nD){var bo=this.__nN?e.getDocumentLeft():e.getDocumentTop();var bn=bo-this.__nE;this.slideTo(this._positionToValue(bn));}else if(this.__nF){this.__nO(e);}e.stopPropagation();},_onInterval:function(e){var bp=this.getValue()+(this.__nG*this.getPageStep());if(bp<this.getMinimum()){bp=this.getMinimum();}else if(bp>this.getMaximum()){bp=this.getMaximum();}var bq=this.__nG==-1;if((bq&&bp<=this.__nH)||(!bq&&bp>=this.__nH)){bp=this.__nH;}this.slideTo(bp);},_onUpdate:function(e){var bs=this.getInnerSize();var bt=this.getChildControl(k).getBounds();var br=this.__nN?z:u;this._updateKnobSize();this.__nM=bs[br]-bt[br];this.__nC=bt[br];this._updateKnobPosition();},__nN:false,__nM:0,__nO:function(e){var bu=this.__nN;var bB=bu?e.getDocumentLeft():e.getDocumentTop();var bD=this.__nA;var bv=this.__nB;var bF=this.__nC;var bC=bB-bD;if(bB>=bv){bC-=bF;}var bz=this._positionToValue(bC);var bw=this.getMinimum();var bx=this.getMaximum();if(bz<bw){bz=bw;}else if(bz>bx){bz=bx;}else{var bA=this.getValue();var by=this.getPageStep();var bE=this.__nG<0?H:v;bz=bA+(Math[bE]((bz-bA)/by)*by);}if(this.__nH==null||(this.__nG==-1&&bz<=this.__nH)||(this.__nG==1&&bz>=this.__nH)){this.__nH=bz;}},_positionToValue:function(bG){var bH=this.__nM;if(bH==null||bH==0){return 0;}var bJ=bG/bH;if(bJ<0){bJ=0;}else if(bJ>1){bJ=1;}var bI=this.getMaximum()-this.getMinimum();return this.getMinimum()+Math.round(bI*bJ);},_valueToPosition:function(bK){var bL=this.__nM;if(bL==null){return 0;}var bM=this.getMaximum()-this.getMinimum();if(bM==0){return 0;}var bK=bK-this.getMinimum();var bN=bK/bM;if(bN<0){bN=0;}else if(bN>1){bN=1;}return Math.round(bL*bN);},_updateKnobPosition:function(){this._setKnobPosition(this._valueToPosition(this.getValue()));},_setKnobPosition:function(bO){var bP=this.getChildControl(k).getContainerElement();if(this.__nN){bP.setStyle(f,bO+a,true);}else{bP.setStyle(d,bO+a,true);}},_updateKnobSize:function(){var bR=this.getKnobFactor();if(bR==null){return;}var bQ=this.getInnerSize();if(bQ==null){return;}if(this.__nN){this.getChildControl(k).setWidth(Math.round(bR*bQ.width));}else{this.getChildControl(k).setHeight(Math.round(bR*bQ.height));}},slideToBegin:function(){this.slideTo(this.getMinimum());},slideToEnd:function(){this.slideTo(this.getMaximum());},slideForward:function(){this.slideBy(this.getSingleStep());},slideBack:function(){this.slideBy(-this.getSingleStep());},slidePageForward:function(){this.slideBy(this.getPageStep());},slidePageBack:function(){this.slideBy(-this.getPageStep());},slideBy:function(bS){this.slideTo(this.getValue()+bS);},slideTo:function(bT){if(bT<this.getMinimum()){bT=this.getMinimum();}else if(bT>this.getMaximum()){bT=this.getMaximum();}else{bT=this.getMinimum()+Math.round((bT-this.getMinimum())/this.getSingleStep())*this.getSingleStep();}this.setValue(bT);},_applyOrientation:function(bU,bV){var bW=this.getChildControl(k);this.__nN=bU===j;if(this.__nN){this.removeState(i);bW.removeState(i);this.addState(j);bW.addState(j);bW.setLayoutProperties({top:0,right:null,bottom:0});}else{this.removeState(j);bW.removeState(j);this.addState(i);bW.addState(i);bW.setLayoutProperties({right:0,bottom:null,left:0});}this._updateKnobPosition();},_applyKnobFactor:function(bX,bY){if(bX!=null){this._updateKnobSize();}else{if(this.__nN){this.getChildControl(k).resetWidth();}else{this.getChildControl(k).resetHeight();}}},_applyValue:function(ca,cb){if(ca!=null){this._updateKnobPosition();if(this.__nD){this.__nL=[ca,cb];}else{this.fireEvent(V,qx.event.type.Data,[ca,cb]);}}else{this.resetValue();}},_fireValue:function(){if(!this.__nL){return;}var cc=this.__nL;this.__nL=null;this.fireEvent(V,qx.event.type.Data,cc);},_applyMinimum:function(cd,ce){if(this.getValue()<cd){this.setValue(cd);}this._updateKnobPosition();},_applyMaximum:function(cf,cg){if(this.getValue()>cf){this.setValue(cf);}this._updateKnobPosition();}}});})();(function(){var d="horizontal",c="mousewheel",b="qx.ui.core.scroll.ScrollSlider",a="keypress";qx.Class.define(b,{extend:qx.ui.form.Slider,construct:function(e){qx.ui.form.Slider.call(this,e);this.removeListener(a,this._onKeyPress);this.removeListener(c,this._onMouseWheel);},members:{getSizeHint:function(f){var g=qx.ui.form.Slider.prototype.getSizeHint.call(this);if(this.getOrientation()===d){g.width=0;}else{g.height=0;}return g;}}});})();(function(){var n="pressed",m="abandoned",l="Integer",k="hovered",j="qx.event.type.Event",i="Enter",h="Space",g="press",f="qx.ui.form.RepeatButton",d="release",a="interval",c="__nS",b="execute";qx.Class.define(f,{extend:qx.ui.form.Button,construct:function(o,p){qx.ui.form.Button.call(this,o,p);this.__nS=new qx.event.AcceleratingTimer();this.__nS.addListener(a,this._onInterval,this);},events:{"execute":j,"press":j,"release":j},properties:{interval:{check:l,init:100},firstInterval:{check:l,init:500},minTimer:{check:l,init:20},timerDecrease:{check:l,init:2}},members:{__nT:null,__nS:null,press:function(){if(this.isEnabled()){if(!this.hasState(n)){this.__nU();}this.removeState(m);this.addState(n);}},release:function(q){if(!this.isEnabled()){return;}if(this.hasState(n)){if(!this.__nT){this.execute();}}this.removeState(n);this.removeState(m);this.__nV();},_applyEnabled:function(r,s){qx.ui.form.Button.prototype._applyEnabled.call(this,r,s);if(!r){this.removeState(n);this.removeState(m);this.__nV();}},_onMouseOver:function(e){if(!this.isEnabled()||e.getTarget()!==this){return;}if(this.hasState(m)){this.removeState(m);this.addState(n);this.__nS.start();}this.addState(k);},_onMouseOut:function(e){if(!this.isEnabled()||e.getTarget()!==this){return;}this.removeState(k);if(this.hasState(n)){this.removeState(n);this.addState(m);this.__nS.stop();}},_onMouseDown:function(e){if(!e.isLeftPressed()){return;}this.capture();this.__nU();e.stopPropagation();},_onMouseUp:function(e){this.releaseCapture();if(!this.hasState(m)){this.addState(k);if(this.hasState(n)&&!this.__nT){this.execute();}}this.__nV();e.stopPropagation();},_onKeyUp:function(e){switch(e.getKeyIdentifier()){case i:case h:if(this.hasState(n)){if(!this.__nT){this.execute();}this.removeState(n);this.removeState(m);e.stopPropagation();this.__nV();}}},_onKeyDown:function(e){switch(e.getKeyIdentifier()){case i:case h:this.removeState(m);this.addState(n);e.stopPropagation();this.__nU();}},_onInterval:function(e){this.__nT=true;this.fireEvent(b);},__nU:function(){this.fireEvent(g);this.__nT=false;this.__nS.set({interval:this.getInterval(),firstInterval:this.getFirstInterval(),minimum:this.getMinTimer(),decrease:this.getTimerDecrease()}).start();this.removeState(m);this.addState(n);},__nV:function(){this.fireEvent(d);this.__nS.stop();this.removeState(m);this.removeState(n);}},destruct:function(){this._disposeObjects(c);}});})();(function(){var e="Integer",d="interval",c="qx.event.type.Event",b="qx.event.AcceleratingTimer",a="__qn";qx.Class.define(b,{extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__qn=new qx.event.Timer(this.getInterval());this.__qn.addListener(d,this._onInterval,this);},events:{"interval":c},properties:{interval:{check:e,init:100},firstInterval:{check:e,init:500},minimum:{check:e,init:20},decrease:{check:e,init:2}},members:{__qn:null,__qo:null,start:function(){this.__qn.setInterval(this.getFirstInterval());this.__qn.start();},stop:function(){this.__qn.stop();this.__qo=null;},_onInterval:function(){this.__qn.stop();if(this.__qo==null){this.__qo=this.getInterval();}this.__qo=Math.max(this.getMinimum(),this.__qo-this.getDecrease());this.__qn.setInterval(this.__qo);this.__qn.start();this.fireEvent(d);}},destruct:function(){this._disposeObjects(a);}});})();(function(){var n="_applyLayoutChange",m="left",k="center",j="top",h="Decorator",g="middle",f="_applyReversed",e="bottom",d="Boolean",c="right",a="Integer",b="qx.ui.layout.HBox";qx.Class.define(b,{extend:qx.ui.layout.Abstract,construct:function(o,p,q){qx.ui.layout.Abstract.call(this);if(o){this.setSpacing(o);}if(p){this.setAlignX(p);}if(q){this.setSeparator(q);}},properties:{alignX:{check:[m,k,c],init:m,apply:n},alignY:{check:[j,g,e],init:j,apply:n},spacing:{check:a,init:0,apply:n},separator:{check:h,nullable:true,apply:n},reversed:{check:d,init:false,apply:f}},members:{__cP:null,__cQ:null,__cR:null,__cS:null,_applyReversed:function(){this._invalidChildrenCache=true;this._applyLayoutChange();},__cT:function(){var w=this._getLayoutChildren();var length=w.length;var t=false;var r=this.__cP&&this.__cP.length!=length&&this.__cQ&&this.__cP;var u;var s=r?this.__cP:new Array(length);var v=r?this.__cQ:new Array(length);if(this.getReversed()){w=w.concat().reverse();}for(var i=0;i<length;i++){u=w[i].getLayoutProperties();if(u.width!=null){s[i]=parseFloat(u.width)/100;}if(u.flex!=null){v[i]=u.flex;t=true;}else{v[i]=0;}}if(!r){this.__cP=s;this.__cQ=v;}this.__cR=t;this.__cS=w;delete this._invalidChildrenCache;},verifyLayoutProperty:null,renderLayout:function(x,y){if(this._invalidChildrenCache){this.__cT();}var E=this.__cS;var length=E.length;var N=qx.ui.layout.Util;var M=this.getSpacing();var Q=this.getSeparator();if(Q){var B=N.computeHorizontalSeparatorGaps(E,M,Q);}else{var B=N.computeHorizontalGaps(E,M,true);}var i,z,K,J;var P=[];var F=B;for(i=0;i<length;i+=1){J=this.__cP[i];K=J!=null?Math.floor((x-B)*J):E[i].getSizeHint().width;P.push(K);F+=K;}if(this.__cR&&F!=x){var H={};var L,O;for(i=0;i<length;i+=1){L=this.__cQ[i];if(L>0){G=E[i].getSizeHint();H[i]={min:G.minWidth,value:P[i],max:G.maxWidth,flex:L};}}var C=N.computeFlexOffsets(H,x,F);for(i in C){O=C[i].offset;P[i]+=O;F+=O;}}var U=E[0].getMarginLeft();if(F<x&&this.getAlignX()!=m){U=x-F;if(this.getAlignX()===k){U=Math.round(U/2);}}var G,top,A,K,D,S,I;var M=this.getSpacing();this._clearSeparators();if(Q){var R=qx.theme.manager.Decoration.getInstance().resolve(Q).getInsets();var T=R.left+R.right;}for(i=0;i<length;i+=1){z=E[i];K=P[i];G=z.getSizeHint();S=z.getMarginTop();I=z.getMarginBottom();A=Math.max(G.minHeight,Math.min(y-S-I,G.maxHeight));top=N.computeVerticalAlignOffset(z.getAlignY()||this.getAlignY(),A,y,S,I);if(i>0){if(Q){U+=D+M;this._renderSeparator(Q,{left:U,top:0,width:T,height:y});U+=T+M+z.getMarginLeft();}else{U+=N.collapseMargins(M,D,z.getMarginLeft());}}z.renderLayout(U,top,K,A);U+=K;D=z.getMarginRight();}},_computeSizeHint:function(){if(this._invalidChildrenCache){this.__cT();}var bc=qx.ui.layout.Util;var bk=this.__cS;var V=0,bd=0,ba=0;var Y=0,bb=0;var bh,W,bj;for(var i=0,l=bk.length;i<l;i+=1){bh=bk[i];W=bh.getSizeHint();bd+=W.width;var bg=this.__cQ[i];var X=this.__cP[i];if(bg){V+=W.minWidth;}else if(X){ba=Math.max(ba,Math.round(W.minWidth/X));}else{V+=W.width;}bj=bh.getMarginTop()+bh.getMarginBottom();if((W.height+bj)>bb){bb=W.height+bj;}if((W.minHeight+bj)>Y){Y=W.minHeight+bj;}}V+=ba;var bf=this.getSpacing();var bi=this.getSeparator();if(bi){var be=bc.computeHorizontalSeparatorGaps(bk,bf,bi);}else{var be=bc.computeHorizontalGaps(bk,bf,true);}return {minWidth:V+be,width:bd+be,minHeight:Y,height:bb};}},destruct:function(){this.__cP=this.__cQ=this.__cS=null;}});})();(function(){var m="resize",l="scrollY",k="update",j="scrollX",i="_applyScrollX",h="_applyScrollY",g="qx.lang.Type.isNumber(value)&&value>=0&&value<=this.getScrollMaxX()",f="appear",d="qx.lang.Type.isNumber(value)&&value>=0&&value<=this.getScrollMaxY()",c="qx.event.type.Event",a="qx.ui.core.scroll.ScrollPane",b="scroll";qx.Class.define(a,{extend:qx.ui.core.Widget,construct:function(){qx.ui.core.Widget.call(this);this.set({minWidth:0,minHeight:0});this._setLayout(new qx.ui.layout.Grow());this.addListener(m,this._onUpdate);var n=this.getContentElement();n.addListener(b,this._onScroll,this);n.addListener(f,this._onAppear,this);},events:{update:c},properties:{scrollX:{check:g,apply:i,event:j,init:0},scrollY:{check:d,apply:h,event:l,init:0}},members:{add:function(o){var p=this._getChildren()[0];if(p){this._remove(p);p.removeListener(m,this._onUpdate,this);}if(o){this._add(o);o.addListener(m,this._onUpdate,this);}},remove:function(q){if(q){this._remove(q);q.removeListener(m,this._onUpdate,this);}},getChildren:function(){return this._getChildren();},_onUpdate:function(e){this.fireEvent(k);},_onScroll:function(e){var r=this.getContentElement();this.setScrollX(r.getScrollX());this.setScrollY(r.getScrollY());},_onAppear:function(e){var v=this.getContentElement();var s=this.getScrollX();var t=v.getScrollX();if(s!=t){v.scrollToX(s);}var w=this.getScrollY();var u=v.getScrollY();if(w!=u){v.scrollToY(w);}},getItemTop:function(z){var top=0;do{top+=z.getBounds().top;z=z.getLayoutParent();}while(z&&z!==this);return top;},getItemBottom:function(A){return this.getItemTop(A)+A.getBounds().height;},getItemLeft:function(B){var C=0;var parent;do{C+=B.getBounds().left;parent=B.getLayoutParent();if(parent){C+=parent.getInsets().left;}B=parent;}while(B&&B!==this);return C;},getItemRight:function(D){return this.getItemLeft(D)+D.getBounds().width;},getScrollSize:function(){return this.getChildren()[0].getBounds();},getScrollMaxX:function(){var F=this.getInnerSize();var E=this.getScrollSize();if(F&&E){return Math.max(0,E.width-F.width);}return 0;},getScrollMaxY:function(){var H=this.getInnerSize();var G=this.getScrollSize();if(H&&G){return Math.max(0,G.height-H.height);}return 0;},scrollToX:function(I){var J=this.getScrollMaxX();if(I<0){I=0;}else if(I>J){I=J;}this.setScrollX(I);},scrollToY:function(K){var L=this.getScrollMaxY();if(K<0){K=0;}else if(K>L){K=L;}this.setScrollY(K);},scrollByX:function(x){this.scrollToX(this.getScrollX()+x);},scrollByY:function(y){this.scrollToY(this.getScrollY()+y);},_applyScrollX:function(M){this.getContentElement().scrollToX(M);},_applyScrollY:function(N){this.getContentElement().scrollToY(N);}}});})();(function(){var a="qx.ui.layout.Grow";qx.Class.define(a,{extend:qx.ui.layout.Abstract,members:{verifyLayoutProperty:null,renderLayout:function(b,c){var g=this._getLayoutChildren();var f,h,e,d;for(var i=0,l=g.length;i<l;i++){f=g[i];h=f.getSizeHint();e=b;if(e<h.minWidth){e=h.minWidth;}else if(e>h.maxWidth){e=h.maxWidth;}d=c;if(d<h.minHeight){d=h.minHeight;}else if(d>h.maxHeight){d=h.maxHeight;}f.renderLayout(0,0,e,d);}},_computeSizeHint:function(){var q=this._getLayoutChildren();var o,s;var r=0,p=0;var n=0,k=0;var j=Infinity,m=Infinity;for(var i=0,l=q.length;i<l;i++){o=q[i];s=o.getSizeHint();r=Math.max(r,s.width);p=Math.max(p,s.height);n=Math.max(n,s.minWidth);k=Math.max(k,s.minHeight);j=Math.min(j,s.maxWidth);m=Math.min(m,s.maxHeight);}return {width:r,height:p,minWidth:n,minHeight:k,maxWidth:j,maxHeight:m};}}});})();(function(){var m="open",k="icon",j="auto",h="middle",g="String",f="label",d="changeOpen",c="excluded",b="visible",a="opened",H="always",G="qx.ui.tree.AbstractTreeItem",F="_applyIconOpened",E="Boolean",D="__px",C="Integer",B="_applyIndent",A="changeOpenSymbolMode",z="_applyOpenSymbolMode",y="__pu",t="__pt",u="resize",r="",s="removeItem",p="addItem",q="iconOpened",n="abstract",o="never",v="_applyIcon",w="_applyOpen",x="_applyLabel";qx.Class.define(G,{extend:qx.ui.core.Widget,type:n,include:[qx.ui.form.MModelProperty],implement:[qx.ui.form.IModel],construct:function(){qx.ui.core.Widget.call(this);this.__pt=[];this._setLayout(new qx.ui.layout.HBox());this._addWidgets();this.initOpen();},properties:{open:{check:E,init:false,event:d,apply:w},openSymbolMode:{check:[H,o,j],init:j,event:A,apply:z},indent:{check:C,init:19,apply:B,themeable:true},parent:{check:G,nullable:true},icon:{check:g,apply:v,nullable:true,themeable:true},iconOpened:{check:g,apply:F,nullable:true,themeable:true},label:{check:g,apply:x,init:r}},members:{__pt:null,__pu:null,__pv:null,__pw:null,__px:null,__py:null,_addWidgets:function(){throw new Error("Abstract method call.");},_createChildControlImpl:function(I,J){var K;switch(I){case f:K=new qx.ui.basic.Label().set({alignY:h,value:this.getLabel()});break;case k:K=new qx.ui.basic.Image().set({alignY:h,source:this.getIcon()});break;case m:K=new qx.ui.tree.FolderOpenButton().set({alignY:h});K.addListener(d,this._onChangeOpen,this);K.addListener(u,this._updateIndent,this);break;}return K||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,I);},getTree:function(){var M=this;while(M.getParent()){M=M.getParent();}var L=M.getLayoutParent()?M.getLayoutParent().getLayoutParent():0;if(L&&L instanceof qx.ui.core.scroll.ScrollPane){return L.getLayoutParent();}return null;},addWidget:function(N,O){this._add(N,O);},addSpacer:function(){if(!this.__px){this.__px=new qx.ui.core.Spacer();}else{this._remove(this.__px);}this._add(this.__px);},addOpenButton:function(){this._add(this.getChildControl(m));},_onChangeOpen:function(e){if(this.isOpenable()){this.setOpen(e.getData());}},addIcon:function(){var P=this.getChildControl(k);if(this.__pw){this._remove(P);}this._add(P);this.__pw=true;},addLabel:function(Q){var R=this.getChildControl(f);if(this.__pv){this._remove(R);}if(Q){this.setLabel(Q);}else{R.setValue(this.getLabel());}this._add(R);this.__pv=true;},addState:function(S){qx.ui.core.Widget.prototype.addState.call(this,S);var U=this._getChildren();for(var i=0,l=U.length;i<l;i++){var T=U[i];if(T.addState){U[i].addState(S);}}},removeState:function(V){qx.ui.core.Widget.prototype.removeState.call(this,V);var X=this._getChildren();for(var i=0,l=X.length;i<l;i++){var W=X[i];if(W.addState){X[i].removeState(V);}}},_applyIcon:function(Y,ba){if(!this.__pA()){this.__pB(Y);}else if(!this.isOpen()){this.__pB(Y);}},_applyIconOpened:function(bb,bc){if(this.isOpen()){if(this.__pz()&&this.__pA()){this.__pB(bb);}else if(!this.__pz()&&this.__pA()){this.__pB(bb);}}},_applyLabel:function(bd,be){var bf=this.getChildControl(f,true);if(bf){bf.setValue(bd);}},_applyOpen:function(bg,bh){if(this.hasChildren()){this.getChildrenContainer().setVisibility(bg?b:c);}var open=this.getChildControl(m,true);if(open){open.setOpen(bg);}var bi;if(bg){bi=this.__pA()?this.getIconOpened():null;}else{bi=this.getIcon();}if(bi){this.__pB(bi);}bg?this.addState(a):this.removeState(a);},__pz:function(){return qx.util.PropertyUtil.getUserValue(this,k);},__pA:function(){return qx.util.PropertyUtil.getUserValue(this,q);},__pB:function(bj){var bk=this.getChildControl(k,true);if(bk){bk.setSource(bj);}},isOpenable:function(){var bl=this.getOpenSymbolMode();return (bl===H||bl===j&&this.hasChildren());},_shouldShowOpenSymbol:function(){var open=this.getChildControl(m,true);if(!open){return false;}var bm=this.getTree();if(!bm.getRootOpenClose()){if(bm.getHideRoot()){if(bm.getRoot()==this.getParent()){return false;}}else{if(bm.getRoot()==this){return false;}}}return this.isOpenable();},_applyOpenSymbolMode:function(bn,bo){this._updateIndent();},_updateIndent:function(){if(!this.getTree()){return;}var bq=0;var open=this.getChildControl(m,true);if(open){if(this._shouldShowOpenSymbol()){open.show();var bp=open.getBounds();if(bp){bq=bp.width;}else{return;}}else{open.exclude();}}if(this.__px){this.__px.setWidth((this.getLevel()+1)*this.getIndent()-bq);}},_applyIndent:function(br,bs){this._updateIndent();},getLevel:function(){var bt=this.getTree();if(!bt){return;}var bu=this;var bv=-1;while(bu){bu=bu.getParent();bv+=1;}if(bt.getHideRoot()){bv-=1;}if(!bt.getRootOpenClose()){bv-=1;}return bv;},syncWidget:function(){this._updateIndent();},getChildrenContainer:function(){if(!this.__pu){this.__pu=new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({visibility:this.isOpen()?b:c});}return this.__pu;},hasChildrenContainer:function(){return this.__pu;},getParentChildrenContainer:function(){if(this.getParent()){return this.getParent().getChildrenContainer();}else if(this.getLayoutParent()){return this.getLayoutParent();}else{return null;}},getChildren:function(){return this.__pt;},hasChildren:function(){return this.__pt?this.__pt.length>0:false;},getItems:function(bw,bx,by){if(by!==false){var bz=[];}else{var bz=[this];}var bC=this.hasChildren()&&(bx!==false||this.isOpen());if(bC){var bB=this.getChildren();if(bw===false){bz=bz.concat(bB);}else{for(var i=0,bA=bB.length;i<bA;i++){bz=bz.concat(bB[i].getItems(bw,bx,false));}}}return bz;},recursiveAddToWidgetQueue:function(){var bD=this.getItems(true,true,false);for(var i=0,l=bD.length;i<l;i++){qx.ui.core.queue.Widget.add(bD[i]);}},__pC:function(){if(this.getParentChildrenContainer()){this.getParentChildrenContainer()._addAfter(this.getChildrenContainer(),this);}},add:function(bE){var bF=this.getChildrenContainer();var bI=this.getTree();for(var i=0,l=arguments.length;i<l;i++){var bJ=arguments[i];var bH=bJ.getParent();if(bH){bH.remove(bJ);}bJ.setParent(this);var bG=this.hasChildren();bF.add(bJ);if(bJ.hasChildren()){bF.add(bJ.getChildrenContainer());}this.__pt.push(bJ);if(!bG){this.__pC();}if(bI){bJ.recursiveAddToWidgetQueue();bI.fireNonBubblingEvent(p,qx.event.type.Data,[bJ]);}}if(bI){qx.ui.core.queue.Widget.add(this);}},addAt:function(bK,bL){{};if(bL==this.__pt.length){this.add(bK);return;}var bP=bK.getParent();if(bP){bP.remove(bK);}var bN=this.getChildrenContainer();bK.setParent(this);var bO=this.hasChildren();var bM=this.__pt[bL];bN.addBefore(bK,bM);if(bK.hasChildren()){bN.addAfter(bK.getChildrenContainer(),bK);}qx.lang.Array.insertAt(this.__pt,bK,bL);if(!bO){this.__pC();}if(this.getTree()){bK.recursiveAddToWidgetQueue();qx.ui.core.queue.Widget.add(this);}},addBefore:function(bQ,bR){{};var bS=bQ.getParent();if(bS){bS.remove(bQ);}this.addAt(bQ,this.__pt.indexOf(bR));},addAfter:function(bT,bU){{};var bV=bT.getParent();if(bV){bV.remove(bT);}this.addAt(bT,this.__pt.indexOf(bU)+1);},addAtBegin:function(bW){this.addAt(bW,0);},remove:function(bX){for(var i=0,l=arguments.length;i<l;i++){var cc=arguments[i];if(this.__pt.indexOf(cc)==-1){this.warn("Cannot remove treeitem '"+cc+"'. It is not a child of this tree item.");return;}var bY=this.getChildrenContainer();if(cc.hasChildrenContainer()){var cb=cc.getChildrenContainer();if(bY.getChildren().indexOf(cb)>=0){bY.remove(cb);}}qx.lang.Array.remove(this.__pt,cc);cc.setParent(null);bY.remove(cc);}var ca=this.getTree();if(ca){ca.fireNonBubblingEvent(s,qx.event.type.Data,[cc]);}qx.ui.core.queue.Widget.add(this);},removeAt:function(cd){var ce=this.__pt[cd];if(ce){this.remove(ce);}},removeAll:function(){for(var i=this.__pt.length-1;i>=0;i--){this.remove(this.__pt[i]);}}},destruct:function(){this._disposeArray(t);this._disposeObjects(D,y);}});})();(function(){var i="opened",h="click",g="changeOpen",f="Boolean",d="qx.ui.tree.FolderOpenButton",c="_applyOpen",b="mouseup",a="mousedown";qx.Class.define(d,{extend:qx.ui.basic.Image,include:qx.ui.core.MExecutable,construct:function(){qx.ui.basic.Image.call(this);this.initOpen();this.addListener(h,this._onClick);this.addListener(a,this._stopPropagation,this);this.addListener(b,this._stopPropagation,this);},properties:{open:{check:f,init:false,event:g,apply:c}},members:{_applyOpen:function(j,k){j?this.addState(i):this.removeState(i);this.execute();},_stopPropagation:function(e){e.stopPropagation();},_onClick:function(e){this.toggleOpen();e.stopPropagation();}}});})();(function(){var a="qx.ui.core.Spacer";qx.Class.define(a,{extend:qx.ui.core.LayoutItem,construct:function(b,c){qx.ui.core.LayoutItem.call(this);this.setWidth(b!=null?b:0);this.setHeight(c!=null?c:0);},members:{checkAppearanceNeeds:function(){},addChildrenToQueue:function(d){},destroy:function(){if(this.$$disposed){return;}var parent=this.$$parent;if(parent){parent._remove(this);}qx.ui.core.queue.Dispose.add(this);}}});})();(function(){var d="$$theme_",c="$$user_",b="$$init_",a="qx.util.PropertyUtil";qx.Class.define(a,{statics:{getProperties:function(e){return e.$$properties;},getAllProperties:function(f){var i={};var j=f;while(j!=qx.core.Object){var h=this.getProperties(j);for(var g in h){i[g]=h[g];}j=j.superclass;}return i;},getUserValue:function(k,l){return k[c+l];},setUserValue:function(m,n,o){m[c+n]=o;},deleteUserValue:function(p,q){delete (p[c+q]);},getInitValue:function(r,s){return r[b+s];},setInitValue:function(t,u,v){t[b+u]=v;},deleteInitValue:function(w,x){delete (w[b+x]);},getThemeValue:function(y,z){return y[d+z];},setThemeValue:function(A,B,C){A[d+B]=C;},deleteThemeValue:function(D,E){delete (D[d+E]);},setThemed:function(F,G,H){var I=qx.core.Property.$$method.setThemed;F[I[G]](H);},resetThemed:function(J,K){var L=qx.core.Property.$$method.resetThemed;J[L[K]]();}}});})();(function(){var b="tree-folder",a="qx.ui.tree.TreeFolder";qx.Class.define(a,{extend:qx.ui.tree.AbstractTreeItem,construct:function(c){qx.ui.tree.AbstractTreeItem.call(this);if(c){this.setLabel(c);}},properties:{appearance:{refine:true,init:b}},members:{_addWidgets:function(){this.addSpacer();this.addOpenButton();this.addIcon();this.addLabel();}}});})();(function(){var o="",n="/",m="i",k="ICON_",j="separator-vertical",h="sinput",g=")",f="failed",d="CLASS",c="INTERFACE",H="__SV",G="listdata",F="1*",E="#",D="PACKAGE",C="0*",B="changeSelection",A="Search...",z="Results",y="__SW",v="(",w="completed",t="./script/apiindex.json",u="keyup",r="s",s=" Result",p="apiviewer.ui.SearchView",q="appear",x="disappear";qx.Class.define(p,{extend:qx.ui.container.Composite,construct:function(){qx.ui.container.Composite.call(this);var I=new qx.ui.layout.VBox();I.setSeparator(j);this.setLayout(I);this.__SU=false;this.listdata=[];this.apiindex={};this._showSearchForm();},members:{__SV:null,__SW:null,__SU:null,__SX:null,_showSearchForm:function(){var Q=new qx.ui.layout.HBox(4);var K=new qx.ui.container.Composite(Q);K.setPadding(10);this.sinput=new qx.ui.form.TextField().set({allowGrowY:true,placeholder:A});this.__SW=new qx.ui.form.Button("Find");this.__SW.setEnabled(false);K.add(this.sinput,{flex:1});K.add(this.__SW);this.add(K);var O=[];var N=this._tableModel=new qx.ui.table.model.Simple();N.setColumns([o,z]);N.setData(O);var J={tableColumnModel:function(R){return new qx.ui.table.columnmodel.Resize(R);}};var P=new qx.ui.table.Table(N,J);P.setDecorator(null);P.setShowCellFocusIndicator(false);P.setStatusBarVisible(false);P.setColumnVisibilityButtonVisible(false);this._selectionModel=P.getSelectionManager().getSelectionModel();this._selectionModel.addListener(B,this._callDetailFrame,this);this._table=P;var M=P.getTableColumnModel();var L=M.getBehavior();L.set(0,{width:C,minWidth:42,maxWidth:100});L.set(1,{width:F});var M=P.getTableColumnModel();M.setDataCellRenderer(0,new qx.ui.table.cellrenderer.Image());this.__SU=true;this.__SX=P;P.addListener(q,this.__Ta,this);P.addListener(x,function(e){this.__SV.hide();},this);this.add(P,{flex:1});qx.event.Timer.once(this._load,this,0);this.sinput.focus();this.sinput.addListener(u,function(e){this._searchResult(this.sinput.getValue()||o);},this);},_searchResult:function(S){var S=qx.lang.String.trim(S);if(S.length>0){this.__SV.hide();}else{this.__SV.show();}if(S.length<3){if(this.__SU){this.listdata.splice(0,this.listdata.length);}this._resetElements();return;}else{var U=[];try{var T=this._validateInput(S);new RegExp(T[0]);this.__SW.setEnabled(true);}catch(V){if(this.__SU){this.listdata.splice(0,this.listdata.length);}this._resetElements();return;}U=this._searchIndex(T[0],T[1]);this._tableModel.setColumns([o,(U.length+s+((U.length!=1)?r:o))]);this._tableModel.setData(U);this._table.resetSelection();}},_validateInput:function(W){var X=[];if(/^([\w\.]*\w+)(#\w+|\.\w+\(\)|#\.[\*|\+|\?]?)?$/.test(W)){if(RegExp.$2&&RegExp.$2.length>1){X=[RegExp.$2,RegExp.$1];}else if(RegExp.$1.length>1){X=[RegExp.$1,null];}else{return null;}}else{X=[W,null];}return X;},_searchIndex:function(Y,ba){var bf=[];var bd=new RegExp(Y,(/^.*[A-Z].*$/).test(Y)?o:m);var bb=this.apiindex.__index__;var be=this.apiindex.__fullNames__;var bi=this.apiindex.__types__;for(var bg in bb){if(bd.test(bg)){if(ba){for(var i=0,l=bb[bg].length;i<l;i++){var bh=be[bb[bg][i][1]];if(new RegExp(ba,m).test(bh)){var bc=bi[bb[bg][i][0]].toUpperCase();var bj=apiviewer.TreeUtil[k+bc];bf.push([bj,bh+bg]);}}}else{for(var i=0,l=bb[bg].length;i<l;i++){bc=bi[bb[bg][i][0]].toUpperCase();bh=be[bb[bg][i][1]];if(bc==d){bj=apiviewer.TreeUtil.getIconUrl(apiviewer.dao.Class.getClassByName(bh));}else{if(bc!=D&&bc!=c){bh+=bg;}bj=apiviewer.TreeUtil[k+bc];}bf.push([bj,bh]);}}}}return bf;},_setListdata:function(bk){bk.sort(function(a,b){if(a[1]<b[1]){return -1;}if(a[1]>b[1]){return 1;}return 0;});for(var i=0,l=bk.length;i<l;i++){var bl=bk[i][0];var bm={icon:bl,html:o,iconWidth:18,iconHeight:18};this.listdata.push({icon:bm,result:{text:bk[i][1]}});}},_sortByIcons:function(a,b){var bp={"package":0,"class":1,"interface":2,"mixin":3,"method_public":4,"method_protected":5,"method_private":6,"property":7,"property_protected":8,"property_private":9,"event":10,"constructor":11,"constant":12,"childControl":13};var bn=a.substr(a.lastIndexOf(n)+1);var bo=b.substr(b.lastIndexOf(n)+1);a=bp[bn.substr(0,bn.length-6)];b=bp[bo.substr(0,bo.length-6)];return a-b;},_load:function(){var bq=t;var br=new qx.io.remote.Request(bq);br.setAsynchronous(true);br.setTimeout(30000);br.setProhibitCaching(false);br.addListener(w,function(bs){this.apiindex=eval(v+bs.getContent()+g);},this);br.addListener(f,function(bt){this.warn("Couldn't load file: "+bq);},this);br.send();},_callDetailFrame:function(){var bv=this._selectionModel.getAnchorSelectionIndex();var by=this._tableModel.getData()[bv];var bA=qx.core.Init.getApplication().controller;var bu=apiviewer.UiModel.getInstance();if(by!=undefined){var bB=by[1];var bw=by[0];var bz=bB;var bC=null;var bx=bB.indexOf(E);if(bx!=-1){bz=bB.substring(0,bx);bC=bB.substring(bx+1);}if(/protected/.test(bw)){bu.setShowProtected(true);}else if(/private/.test(bw)){bu.setShowPrivate(true);}bA._updateHistory(bB);}},_resetElements:function(){this._tableModel.setData([]);this._tableModel.setColumns([o,o]);this.__SW.setEnabled(false);},__SY:function(bD){this.__SV=new qx.ui.popup.Popup(new qx.ui.layout.Canvas).set({autoHide:false,width:170});var bE=this.tr("Hint: You can use regular expressions in the search field.");var bF=new qx.ui.basic.Label(bE);bF.setRich(true);this.__SV.add(bF,{edge:3});this.__SV.setPosition("bottom-left");this.__SV.placeToWidget(this.sinput,false);this.__SV.show();},__Ta:function(e){if(this.__SV){if(qx.lang.String.trim(this.sinput.getValue()||o).length==0){this.__SV.show();}}else{this.__SY();}}},destruct:function(){this.apiindex=this._table=this.__SX=this._tableModel=this._selectionModel=null;this._disposeObjects(h,y,H);this._disposeArray(G);}});})();(function(){var k="showingPlaceholder",j="",i="none",h="qx.dynlocale",g="Boolean",f="qx.client",d="color",c="qx.event.type.Data",b="readonly",a="placeholder",Y="input",X="focusin",W="visibility",V="focusout",U="changeLocale",T="on",S="readOnly",R="text",Q="_applyTextAlign",P="px",r="RegExp",s=")",p="syncAppearance",q="change",n="textAlign",o="focused",l="center",m="visible",v="disabled",w="url(",D="off",B="String",H="resize",F="qx.ui.form.AbstractField",L="transparent",J="spellcheck",y="false",O="right",N="PositiveInteger",M="mshtml",x="abstract",z="block",A="webkit",C="_applyReadOnly",E="_applyPlaceholder",G="hidden",I="left",K="qx/static/blank.gif",t="changeReadOnly",u="absolute";qx.Class.define(F,{extend:qx.ui.core.Widget,implement:[qx.ui.form.IStringForm,qx.ui.form.IForm],include:[qx.ui.form.MForm],type:x,construct:function(ba){qx.ui.core.Widget.call(this);this.__H=!qx.bom.client.Feature.PLACEHOLDER;if(ba!=null){this.setValue(ba);}this.getContentElement().addListener(q,this._onChangeContent,this);if(this.__H){this.addListener(p,this._syncPlaceholder,this);}if(qx.core.Variant.isSet(h,T)){qx.locale.Manager.getInstance().addListener(U,this._onChangeLocale,this);}},events:{"input":c,"changeValue":c},properties:{textAlign:{check:[I,l,O],nullable:true,themeable:true,apply:Q},readOnly:{check:g,apply:C,event:t,init:false},selectable:{refine:true,init:true},focusable:{refine:true,init:true},maxLength:{check:N,init:Infinity},liveUpdate:{check:g,init:false},placeholder:{check:B,nullable:true,apply:E},filter:{check:r,nullable:true,init:null}},members:{__I:true,__J:null,__K:null,__L:null,__H:true,getFocusElement:function(){var bb=this.getContentElement();if(bb){return bb;}},_createInputElement:function(){return new qx.html.Input(R);},renderLayout:function(bc,top,bd,be){var bf=this._updateInsets;var bj=qx.ui.core.Widget.prototype.renderLayout.call(this,bc,top,bd,be);if(!bj){return;}var bh=bj.size||bf;var bk=P;if(bh||bj.local||bj.margin){var bg=this.getInsets();var innerWidth=bd-bg.left-bg.right;var innerHeight=be-bg.top-bg.bottom;innerWidth=innerWidth<0?0:innerWidth;innerHeight=innerHeight<0?0:innerHeight;}var bi=this.getContentElement();if(bf&&this.__H){this.__O().setStyles({"left":bg.left+bk,"top":bg.top+bk});}if(bh){if(this.__H){this.__O().setStyles({"width":innerWidth+bk,"height":innerHeight+bk});}bi.setStyles({"width":innerWidth+bk,"height":innerHeight+bk});this._renderContentElement(innerHeight,bi);}},_renderContentElement:function(innerHeight,bl){},_createContentElement:function(){var bm=this._createInputElement();bm.setStyles({"border":i,"padding":0,"margin":0,"display":z,"background":L,"outline":i,"appearance":i,"position":u,"autoComplete":D});bm.setSelectable(this.getSelectable());bm.setEnabled(this.getEnabled());bm.addListener(Y,this._onHtmlInput,this);bm.setAttribute(J,y);if(qx.core.Variant.isSet(f,A)){bm.setStyle(H,i);}if(qx.core.Variant.isSet(f,M)){bm.setStyles({backgroundImage:w+qx.util.ResourceManager.getInstance().toUri(K)+s});}return bm;},_applyEnabled:function(bn,bo){qx.ui.core.Widget.prototype._applyEnabled.call(this,bn,bo);this.getContentElement().setEnabled(bn);if(this.__H){if(bn){this._showPlaceholder();}else{this._removePlaceholder();}}else{var bp=this.getContentElement();bp.setAttribute(a,bn?this.getPlaceholder():j);}},__M:{width:16,height:16},_getContentHint:function(){return {width:this.__M.width*10,height:this.__M.height||16};},_applyFont:function(bq,br){var bs;if(bq){var bt=qx.theme.manager.Font.getInstance().resolve(bq);bs=bt.getStyles();}else{bs=qx.bom.Font.getDefaultStyles();}this.getContentElement().setStyles(bs);if(this.__H){this.__O().setStyles(bs);}if(bq){this.__M=qx.bom.Label.getTextSize("A",bs);}else{delete this.__M;}qx.ui.core.queue.Layout.add(this);},_applyTextColor:function(bu,bv){if(bu){this.getContentElement().setStyle(d,qx.theme.manager.Color.getInstance().resolve(bu));}else{this.getContentElement().removeStyle(d);}},tabFocus:function(){qx.ui.core.Widget.prototype.tabFocus.call(this);this.selectAllText();},_getTextSize:function(){return this.__M;},_onHtmlInput:function(e){var bz=e.getData();var by=true;this.__I=false;if(this.getFilter()!=null){var bA=j;var bw=bz.search(this.getFilter());var bx=bz;while(bw>=0){bA=bA+(bx.charAt(bw));bx=bx.substring(bw+1,bx.length);bw=bx.search(this.getFilter());}if(bA!=bz){by=false;bz=bA;this.getContentElement().setValue(bz);}}if(bz.length>this.getMaxLength()){var by=false;this.getContentElement().setValue(bz.substr(0,this.getMaxLength()));}if(by){this.fireDataEvent(Y,bz,this.__L);this.__L=bz;if(this.getLiveUpdate()){this.__N(bz);}}},__N:function(bB){var bC=this.__K;this.__K=bB;if(bC!=bB){this.fireNonBubblingEvent("changeValue",qx.event.type.Data,[bB,bC]);}},setValue:function(bD){if(bD===null){if(this.__I){return bD;}bD=j;this.__I=true;}else{this.__I=false;if(this.__H){this._removePlaceholder();}}if(qx.lang.Type.isString(bD)){var bF=this.getContentElement();if(bD.length>this.getMaxLength()){bD=bD.substr(0,this.getMaxLength());}if(bF.getValue()!=bD){var bG=bF.getValue();bF.setValue(bD);var bE=this.__I?null:bD;this.__K=bG;this.__N(bE);}if(this.__H){this._showPlaceholder();}return bD;}throw new Error("Invalid value type: "+bD);},getValue:function(){var bH=this.getContentElement().getValue();return this.__I?null:bH;},resetValue:function(){this.setValue(null);},_onChangeContent:function(e){this.__I=e.getData()===null;this.__N(e.getData());},getTextSelection:function(){return this.getContentElement().getTextSelection();},getTextSelectionLength:function(){return this.getContentElement().getTextSelectionLength();},getTextSelectionStart:function(){return this.getContentElement().getTextSelectionStart();},getTextSelectionEnd:function(){return this.getContentElement().getTextSelectionEnd();},setTextSelection:function(bI,bJ){this.getContentElement().setTextSelection(bI,bJ);},clearTextSelection:function(){this.getContentElement().clearTextSelection();},selectAllText:function(){this.setTextSelection(0);},_showPlaceholder:function(){var bL=this.getValue()||j;var bK=this.getPlaceholder();if(bK!=null&&bL==j&&!this.hasState(o)&&!this.hasState(v)){if(this.hasState(k)){this._syncPlaceholder();}else{this.addState(k);}}},_removePlaceholder:function(){if(this.hasState(k)){this.__O().setStyle(W,G);this.removeState(k);}},_syncPlaceholder:function(){if(this.hasState(k)){this.__O().setStyle(W,m);}},__O:function(){if(this.__J==null){this.__J=new qx.html.Label();var bM=qx.theme.manager.Color.getInstance();this.__J.setStyles({"visibility":"hidden","zIndex":6,"position":"absolute","color":bM.resolve("text-placeholder")});this.getContainerElement().add(this.__J);}return this.__J;},_onChangeLocale:qx.core.Variant.select(h,{"on":function(e){var content=this.getPlaceholder();if(content&&content.translate){this.setPlaceholder(content.translate());}},"off":null}),_applyPlaceholder:function(bN,bO){if(this.__H){this.__O().setValue(bN);if(bN!=null){this.addListener(X,this._removePlaceholder,this);this.addListener(V,this._showPlaceholder,this);this._showPlaceholder();}else{this.removeListener(X,this._removePlaceholder,this);this.removeListener(V,this._showPlaceholder,this);this._removePlaceholder();}}else{if(this.getEnabled()){this.getContentElement().setAttribute(a,bN);}}},_applyTextAlign:function(bP,bQ){this.getContentElement().setStyle(n,bP);},_applyReadOnly:function(bR,bS){var bT=this.getContentElement();bT.setAttribute(S,bR);if(bR){this.addState(b);this.setFocusable(false);}else{this.removeState(b);this.setFocusable(true);}}},destruct:function(){this.__J=null;if(qx.core.Variant.isSet(h,T)){qx.locale.Manager.getInstance().removeListener(U,this._onChangeLocale,this);}}});})();(function(){var b="qx.ui.form.TextField",a="textfield";qx.Class.define(b,{extend:qx.ui.form.AbstractField,properties:{appearance:{refine:true,init:a},allowGrowY:{refine:true,init:false},allowShrinkY:{refine:true,init:false}},members:{_renderContentElement:function(innerHeight,c){}}});})();(function(){var k="wrap",j="value",i="textarea",h="none",g="qx.client",f="",e="input",d="qx.html.Input",c="select",b="disabled",a="read-only";qx.Class.define(d,{extend:qx.html.Element,construct:function(l,m,n){if(l===c||l===i){var o=l;}else{o=e;}qx.html.Element.call(this,o,m,n);this.__c=l;},members:{__c:null,__d:null,__e:null,_createDomElement:function(){return qx.bom.Input.create(this.__c);},_applyProperty:function(name,p){qx.html.Element.prototype._applyProperty.call(this,name,p);var q=this.getDomElement();if(name===j){qx.bom.Input.setValue(q,p);}else if(name===k){qx.bom.Input.setWrap(q,p);}},setEnabled:qx.core.Variant.select(g,{"webkit":function(r){this.__e=r;if(!r){this.setStyles({"userModify":a,"userSelect":h});}else{this.setStyles({"userModify":null,"userSelect":this.__d?null:h});}},"default":function(s){this.setAttribute(b,s===false);}}),setSelectable:qx.core.Variant.select(g,{"webkit":function(t){this.__d=t;qx.html.Element.prototype.setSelectable.call(this,this.__e&&t);},"default":function(u){qx.html.Element.prototype.setSelectable.call(this,u);}}),setValue:function(v){var w=this.getDomElement();if(w){if(w.value!=v){qx.bom.Input.setValue(w,v);}}else{this._setProperty(j,v);}return this;},getValue:function(){var x=this.getDomElement();if(x){return qx.bom.Input.getValue(x);}return this._getProperty(j)||f;},setWrap:function(y){if(this.__c===i){this._setProperty(k,y);}else{throw new Error("Text wrapping is only support by textareas!");}return this;},getWrap:function(){if(this.__c===i){return this._getProperty(k);}else{throw new Error("Text wrapping is only support by textareas!");}}}});})();(function(){var w="change",v="input",u="qx.client",t="text",s="password",r="checkbox",q="radio",p="textarea",n="keypress",m="opera",d="propertychange",k="blur",h="keydown",c="keyup",b="select-multiple",g="checked",f="value",j="select",a="qx.event.handler.Input";qx.Class.define(a,{extend:qx.core.Object,implement:qx.event.IEventHandler,construct:function(){qx.core.Object.call(this);this._onChangeCheckedWrapper=qx.lang.Function.listener(this._onChangeChecked,this);this._onChangeValueWrapper=qx.lang.Function.listener(this._onChangeValue,this);this._onInputWrapper=qx.lang.Function.listener(this._onInput,this);this._onPropertyWrapper=qx.lang.Function.listener(this._onProperty,this);if(qx.core.Variant.isSet(u,m)){this._onKeyDownWrapper=qx.lang.Function.listener(this._onKeyDown,this);this._onKeyUpWrapper=qx.lang.Function.listener(this._onKeyUp,this);this._onBlurWrapper=qx.lang.Function.listener(this._onBlur,this);}},statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{input:1,change:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE,IGNORE_CAN_HANDLE:false},members:{__g:false,__h:null,__i:null,canHandleEvent:function(x,y){var z=x.tagName.toLowerCase();if(y===v&&(z===v||z===p)){return true;}if(y===w&&(z===v||z===p||z===j)){return true;}return false;},registerEvent:qx.core.Variant.select(u,{"mshtml":function(A,B,C){if(!A.__j){var D=A.tagName.toLowerCase();var E=A.type;if(E===t||E===s||D===p||E===r||E===q){qx.bom.Event.addNativeListener(A,d,this._onPropertyWrapper);}if(E!==r&&E!==q){qx.bom.Event.addNativeListener(A,w,this._onChangeValueWrapper);}if(E===t||E===s){this._onKeyPressWrapped=qx.lang.Function.listener(this._onKeyPress,this,A);qx.bom.Event.addNativeListener(A,n,this._onKeyPressWrapped);}A.__j=true;}},"default":function(F,G,H){if(G===v){this.__k(F);}else if(G===w){if(F.type===q||F.type===r){qx.bom.Event.addNativeListener(F,w,this._onChangeCheckedWrapper);}else{qx.bom.Event.addNativeListener(F,w,this._onChangeValueWrapper);}if(qx.core.Variant.isSet(u,m)){if(F.type===t||F.type===s){this._onKeyPressWrapped=qx.lang.Function.listener(this._onKeyPress,this,F);qx.bom.Event.addNativeListener(F,n,this._onKeyPressWrapped);}}}}}),__k:qx.core.Variant.select(u,{"mshtml":null,"webkit":function(I){var J=I.tagName.toLowerCase();if(qx.bom.client.Engine.VERSION<532&&J==p){qx.bom.Event.addNativeListener(I,n,this._onInputWrapper);}qx.bom.Event.addNativeListener(I,v,this._onInputWrapper);},"opera":function(K){qx.bom.Event.addNativeListener(K,c,this._onKeyUpWrapper);qx.bom.Event.addNativeListener(K,h,this._onKeyDownWrapper);qx.bom.Event.addNativeListener(K,k,this._onBlurWrapper);qx.bom.Event.addNativeListener(K,v,this._onInputWrapper);},"default":function(L){qx.bom.Event.addNativeListener(L,v,this._onInputWrapper);}}),unregisterEvent:qx.core.Variant.select(u,{"mshtml":function(M,N){if(M.__j){var O=M.tagName.toLowerCase();var P=M.type;if(P===t||P===s||O===p||P===r||P===q){qx.bom.Event.removeNativeListener(M,d,this._onPropertyWrapper);}if(P!==r&&P!==q){qx.bom.Event.removeNativeListener(M,w,this._onChangeValueWrapper);}if(P===t||P===s){qx.bom.Event.removeNativeListener(M,n,this._onKeyPressWrapped);}try{delete M.__j;}catch(Q){M.__j=null;}}},"default":function(R,S){if(S===v){this.__k(R);}else if(S===w){if(R.type===q||R.type===r){qx.bom.Event.removeNativeListener(R,w,this._onChangeCheckedWrapper);}else{qx.bom.Event.removeNativeListener(R,w,this._onChangeValueWrapper);}}if(qx.core.Variant.isSet(u,m)){if(R.type===t||R.type===s){qx.bom.Event.removeNativeListener(R,n,this._onKeyPressWrapped);}}}}),__l:qx.core.Variant.select(u,{"mshtml":null,"webkit":function(T){var U=T.tagName.toLowerCase();if(qx.bom.client.Engine.VERSION<532&&U==p){qx.bom.Event.removeNativeListener(T,n,this._onInputWrapper);}qx.bom.Event.removeNativeListener(T,v,this._onInputWrapper);},"opera":function(V){qx.bom.Event.removeNativeListener(V,c,this._onKeyUpWrapper);qx.bom.Event.removeNativeListener(V,h,this._onKeyDownWrapper);qx.bom.Event.removeNativeListener(V,k,this._onBlurWrapper);qx.bom.Event.removeNativeListener(V,v,this._onInputWrapper);},"default":function(W){qx.bom.Event.removeNativeListener(W,v,this._onInputWrapper);}}),_onKeyPress:qx.core.Variant.select(u,{"mshtml|opera":function(e,X){if(e.keyCode===13){if(X.value!==this.__i){this.__i=X.value;qx.event.Registration.fireEvent(X,w,qx.event.type.Data,[X.value]);}}},"default":null}),_onKeyDown:qx.core.Variant.select(u,{"opera":function(e){if(e.keyCode===13){this.__g=true;}},"default":null}),_onKeyUp:qx.core.Variant.select(u,{"opera":function(e){if(e.keyCode===13){this.__g=false;}},"default":null}),_onBlur:qx.core.Variant.select(u,{"opera":function(e){if(this.__h){window.clearTimeout(this.__h);}},"default":null}),_onInput:qx.event.GlobalError.observeMethod(function(e){var Y=qx.bom.Event.getTarget(e);if(!this.__g){if(qx.core.Variant.isSet(u,m)){this.__h=window.setTimeout(function(){qx.event.Registration.fireEvent(Y,v,qx.event.type.Data,[Y.value]);},0);}else{qx.event.Registration.fireEvent(Y,v,qx.event.type.Data,[Y.value]);}}}),_onChangeValue:qx.event.GlobalError.observeMethod(function(e){var bb=qx.bom.Event.getTarget(e);var ba=bb.value;if(bb.type===b){var ba=[];for(var i=0,o=bb.options,l=o.length;i<l;i++){if(o[i].selected){ba.push(o[i].value);}}}qx.event.Registration.fireEvent(bb,w,qx.event.type.Data,[ba]);}),_onChangeChecked:qx.event.GlobalError.observeMethod(function(e){var bc=qx.bom.Event.getTarget(e);if(bc.type===q){if(bc.checked){qx.event.Registration.fireEvent(bc,w,qx.event.type.Data,[bc.value]);}}else{qx.event.Registration.fireEvent(bc,w,qx.event.type.Data,[bc.checked]);}}),_onProperty:qx.core.Variant.select(u,{"mshtml":qx.event.GlobalError.observeMethod(function(e){var bd=qx.bom.Event.getTarget(e);var be=e.propertyName;if(be===f&&(bd.type===t||bd.type===s||bd.tagName.toLowerCase()===p)){if(!bd.$$inValueSet){qx.event.Registration.fireEvent(bd,v,qx.event.type.Data,[bd.value]);}}else if(be===g){if(bd.type===r){qx.event.Registration.fireEvent(bd,w,qx.event.type.Data,[bd.checked]);}else if(bd.checked){qx.event.Registration.fireEvent(bd,w,qx.event.type.Data,[bd.value]);}}}),"default":function(){}})},defer:function(bf){qx.event.Registration.addHandler(bf);}});})();(function(){var v="",u="select",t="soft",s="off",r="qx.client",q="textarea",p="wrap",o="text",n="mshtml",m="number",d="checkbox",k="select-one",g="input",c="option",b="value",f="radio",e="qx.bom.Input",h="nowrap",a="auto",j="normal";qx.Class.define(e,{statics:{__f:{text:1,textarea:1,select:1,checkbox:1,radio:1,password:1,hidden:1,submit:1,image:1,file:1,search:1,reset:1,button:1},create:function(w,x,y){{};var x=x?qx.lang.Object.clone(x):{};var z;if(w===q||w===u){z=w;}else{z=g;x.type=w;}return qx.bom.Element.create(z,x,y);},setValue:function(A,B){var G=A.nodeName.toLowerCase();var D=A.type;var Array=qx.lang.Array;var H=qx.lang.Type;if(typeof B===m){B+=v;}if((D===d||D===f)){if(H.isArray(B)){A.checked=Array.contains(B,A.value);}else{A.checked=A.value==B;}}else if(G===u){var C=H.isArray(B);var I=A.options;var E,F;for(var i=0,l=I.length;i<l;i++){E=I[i];F=E.getAttribute(b);if(F==null){F=E.text;}E.selected=C?Array.contains(B,F):B==F;}if(C&&B.length==0){A.selectedIndex=-1;}}else if((D===o||D===q)&&qx.core.Variant.isSet(r,n)){A.$$inValueSet=true;A.value=B;A.$$inValueSet=null;}else{A.value=B;}},getValue:function(J){var P=J.nodeName.toLowerCase();if(P===c){return (J.attributes.value||{}).specified?J.value:J.text;}if(P===u){var K=J.selectedIndex;if(K<0){return null;}var Q=[];var S=J.options;var R=J.type==k;var O=qx.bom.Input;var N;for(var i=R?K:0,M=R?K+1:S.length;i<M;i++){var L=S[i];if(L.selected){N=O.getValue(L);if(R){return N;}Q.push(N);}}return Q;}else{return (J.value||v).replace(/\r/g,v);}},setWrap:qx.core.Variant.select(r,{"mshtml":function(T,U){T.wrap=U?t:s;},"gecko|webkit":function(V,W){var Y=W?t:s;var X=W?v:a;V.setAttribute(p,Y);V.style.overflow=X;},"default":function(ba,bb){ba.style.whiteSpace=bb?j:h;}})}});})();(function(){var c="qx.event.type.Data",b="qx.event.type.Event",a="qx.ui.table.ITableModel";qx.Interface.define(a,{events:{"dataChanged":c,"metaDataChanged":b,"sorted":c},members:{getRowCount:function(){},getRowData:function(d){},getColumnCount:function(){},getColumnId:function(e){},getColumnIndexById:function(f){},getColumnName:function(g){},isColumnEditable:function(h){},isColumnSortable:function(i){},sortByColumn:function(j,k){},getSortColumnIndex:function(){},isSortAscending:function(){},prefetchRows:function(l,m){},getValue:function(n,o){},getValueById:function(p,q){},setValue:function(r,s,t){},setValueById:function(u,v,w){}}});})();(function(){var e="metaDataChanged",d="qx.event.type.Data",c="qx.event.type.Event",b="abstract",a="qx.ui.table.model.Abstract";qx.Class.define(a,{type:b,extend:qx.core.Object,implement:qx.ui.table.ITableModel,events:{"dataChanged":d,"metaDataChanged":c,"sorted":d},construct:function(){qx.core.Object.call(this);this.__vM=[];this.__vN=[];this.__vO={};},members:{__vM:null,__vN:null,__vO:null,__vP:null,init:function(f){},getRowCount:function(){throw new Error("getRowCount is abstract");},getRowData:function(g){return null;},isColumnEditable:function(h){return false;},isColumnSortable:function(j){return false;},sortByColumn:function(k,l){},getSortColumnIndex:function(){return -1;},isSortAscending:function(){return true;},prefetchRows:function(m,n){},getValue:function(o,p){throw new Error("getValue is abstract");},getValueById:function(q,r){return this.getValue(this.getColumnIndexById(q),r);},setValue:function(s,t,u){throw new Error("setValue is abstract");},setValueById:function(v,w,x){this.setValue(this.getColumnIndexById(v),w,x);},getColumnCount:function(){return this.__vM.length;},getColumnIndexById:function(y){return this.__vO[y];},getColumnId:function(z){return this.__vM[z];},getColumnName:function(A){return this.__vN[A];},setColumnIds:function(B){this.__vM=B;this.__vO={};for(var i=0;i<B.length;i++){this.__vO[B[i]]=i;}this.__vN=new Array(B.length);if(!this.__vP){this.fireEvent(e);}},setColumnNamesByIndex:function(C){if(this.__vM.length!=C.length){throw new Error("this.__columnIdArr and columnNameArr have different length: "+this.__vM.length+" != "+C.length);}this.__vN=C;this.fireEvent(e);},setColumnNamesById:function(D){this.__vN=new Array(this.__vM.length);for(var i=0;i<this.__vM.length;++i){this.__vN[i]=D[this.__vM[i]];}},setColumns:function(E,F){var G=this.__vM.length==0||F;if(F==null){if(this.__vM.length==0){F=E;}else{F=this.__vM;}}if(F.length!=E.length){throw new Error("columnIdArr and columnNameArr have different length: "+F.length+" != "+E.length);}if(G){this.__vP=true;this.setColumnIds(F);this.__vP=false;}this.setColumnNamesByIndex(E);}},destruct:function(){this.__vM=this.__vN=this.__vO=null;}});})();(function(){var e="dataChanged",d="metaDataChanged",c="qx.ui.table.model.Simple",b="Boolean",a="sorted";qx.Class.define(c,{extend:qx.ui.table.model.Abstract,construct:function(){qx.ui.table.model.Abstract.call(this);this.__xM=[];this.__xN=-1;this.__xO=[];this.__xP=null;},properties:{caseSensitiveSorting:{check:b,init:true}},statics:{_defaultSortComparatorAscending:function(f,g){var h=f[arguments.callee.columnIndex];var k=g[arguments.callee.columnIndex];if(qx.lang.Type.isNumber(h)&&qx.lang.Type.isNumber(k)){var l=isNaN(h)?isNaN(k)?0:1:isNaN(k)?-1:null;if(l!=null){return l;}}return (h>k)?1:((h==k)?0:-1);},_defaultSortComparatorInsensitiveAscending:function(m,n){var o=(m[arguments.callee.columnIndex].toLowerCase?m[arguments.callee.columnIndex].toLowerCase():m[arguments.callee.columnIndex]);var p=(n[arguments.callee.columnIndex].toLowerCase?n[arguments.callee.columnIndex].toLowerCase():n[arguments.callee.columnIndex]);if(qx.lang.Type.isNumber(o)&&qx.lang.Type.isNumber(p)){var q=isNaN(o)?isNaN(p)?0:1:isNaN(p)?-1:null;if(q!=null){return q;}}return (o>p)?1:((o==p)?0:-1);},_defaultSortComparatorDescending:function(r,s){var t=r[arguments.callee.columnIndex];var u=s[arguments.callee.columnIndex];if(qx.lang.Type.isNumber(t)&&qx.lang.Type.isNumber(u)){var v=isNaN(t)?isNaN(u)?0:1:isNaN(u)?-1:null;if(v!=null){return v;}}return (t<u)?1:((t==u)?0:-1);},_defaultSortComparatorInsensitiveDescending:function(w,x){var y=(w[arguments.callee.columnIndex].toLowerCase?w[arguments.callee.columnIndex].toLowerCase():w[arguments.callee.columnIndex]);var z=(x[arguments.callee.columnIndex].toLowerCase?x[arguments.callee.columnIndex].toLowerCase():x[arguments.callee.columnIndex]);if(qx.lang.Type.isNumber(y)&&qx.lang.Type.isNumber(z)){var A=isNaN(y)?isNaN(z)?0:1:isNaN(z)?-1:null;if(A!=null){return A;}}return (y<z)?1:((y==z)?0:-1);}},members:{__xM:null,__xP:null,__xQ:null,__xO:null,__xN:null,__xR:null,getRowData:function(B){var C=this.__xM[B];if(C==null||C.originalData==null){return C;}else{return C.originalData;}},getRowDataAsMap:function(D){var F=this.__xM[D];if(F!=null){var E={};for(var G=0;G<this.getColumnCount();G++){E[this.getColumnId(G)]=F[G];}if(F.originalData!=null){for(var H in F.originalData){if(E[H]==undefined){E[H]=F.originalData[H];}}}return E;}return (F&&F.originalData)?F.originalData:null;},getDataAsMapArray:function(){var J=this.getRowCount();var I=[];for(var i=0;i<J;i++){I.push(this.getRowDataAsMap(i));}return I;},setEditable:function(K){this.__xP=[];for(var L=0;L<this.getColumnCount();L++){this.__xP[L]=K;}this.fireEvent(d);},setColumnEditable:function(M,N){if(N!=this.isColumnEditable(M)){if(this.__xP==null){this.__xP=[];}this.__xP[M]=N;this.fireEvent(d);}},isColumnEditable:function(O){return this.__xP?(this.__xP[O]==true):false;},setColumnSortable:function(P,Q){if(Q!=this.isColumnSortable(P)){if(this.__xQ==null){this.__xQ=[];}this.__xQ[P]=Q;this.fireEvent(d);}},isColumnSortable:function(R){return (this.__xQ?(this.__xQ[R]!==false):true);},sortByColumn:function(S,T){var W;var V=this.__xO[S];if(V){W=(T?V.ascending:V.descending);}else{if(this.getCaseSensitiveSorting()){W=(T?qx.ui.table.model.Simple._defaultSortComparatorAscending:qx.ui.table.model.Simple._defaultSortComparatorDescending);}else{W=(T?qx.ui.table.model.Simple._defaultSortComparatorInsensitiveAscending:qx.ui.table.model.Simple._defaultSortComparatorInsensitiveDescending);}}W.columnIndex=S;this.__xM.sort(W);this.__xN=S;this.__xR=T;var U={columnIndex:S,ascending:T};this.fireDataEvent(a,U);this.fireEvent(d);},setSortMethods:function(X,Y){var ba;if(qx.lang.Type.isFunction(Y)){ba={ascending:Y,descending:function(bb,bc){return Y(bc,bb);}};}else{ba=Y;}this.__xO[X]=ba;},getSortMethods:function(bd){return this.__xO[bd];},clearSorting:function(){if(this.__xN!=-1){this.__xN=-1;this.__xR=true;this.fireEvent(d);}},getSortColumnIndex:function(){return this.__xN;},_setSortColumnIndex:function(be){this.__xN=be;},isSortAscending:function(){return this.__xR;},_setSortAscending:function(bf){this.__xR=bf;},getRowCount:function(){return this.__xM.length;},getValue:function(bg,bh){if(bh<0||bh>=this.__xM.length){throw new Error("this.__rowArr out of bounds: "+bh+" (0.."+this.__xM.length+")");}return this.__xM[bh][bg];},setValue:function(bi,bj,bk){if(this.__xM[bj][bi]!=bk){this.__xM[bj][bi]=bk;if(this.hasListener(e)){var bl={firstRow:bj,lastRow:bj,firstColumn:bi,lastColumn:bi};this.fireDataEvent(e,bl);}if(bi==this.__xN){this.clearSorting();}}},setData:function(bm,bn){this.__xM=bm;if(this.hasListener(e)){var bo={firstRow:0,lastRow:bm.length-1,firstColumn:0,lastColumn:this.getColumnCount()-1};this.fireDataEvent(e,bo);}if(bn!==false){this.clearSorting();}},getData:function(){return this.__xM;},setDataAsMapArray:function(bp,bq,br){this.setData(this._mapArray2RowArr(bp,bq),br);},addRows:function(bs,bt,bu){if(bt==null){bt=this.__xM.length;}bs.splice(0,0,bt,0);Array.prototype.splice.apply(this.__xM,bs);var bv={firstRow:bt,lastRow:this.__xM.length-1,firstColumn:0,lastColumn:this.getColumnCount()-1};this.fireDataEvent(e,bv);if(bu!==false){this.clearSorting();}},addRowsAsMapArray:function(bw,bx,by,bz){this.addRows(this._mapArray2RowArr(bw,by),bx,bz);},setRows:function(bA,bB,bC){if(bB==null){bB=0;}bA.splice(0,0,bB,bA.length);Array.prototype.splice.apply(this.__xM,bA);var bD={firstRow:bB,lastRow:this.__xM.length-1,firstColumn:0,lastColumn:this.getColumnCount()-1};this.fireDataEvent(e,bD);if(bC!==false){this.clearSorting();}},setRowsAsMapArray:function(bE,bF,bG,bH){this.setRows(this._mapArray2RowArr(bE,bG),bF,bH);},removeRows:function(bI,bJ,bK){this.__xM.splice(bI,bJ);var bL={firstRow:bI,lastRow:this.__xM.length-1,firstColumn:0,lastColumn:this.getColumnCount()-1,removeStart:bI,removeCount:bJ};this.fireDataEvent(e,bL);if(bK!==false){this.clearSorting();}},_mapArray2RowArr:function(bM,bN){var bR=bM.length;var bO=this.getColumnCount();var bQ=new Array(bR);var bP;for(var i=0;i<bR;++i){bP=[];if(bN){bP.originalData=bM[i];}for(var j=0;j<bO;++j){bP[j]=bM[i][this.getColumnId(j)];}bQ[i]=bP;}return bQ;}},destruct:function(){this.__xM=this.__xP=this.__xO=this.__xQ=null;}});})();(function(){var a="qx.ui.table.ICellEditorFactory";qx.Interface.define(a,{members:{createCellEditor:function(b){return true;},getCellEditorValue:function(c){return true;}}});})();(function(){var f="",e="Function",d="abstract",c="number",b="appear",a="qx.ui.table.celleditor.AbstractField";qx.Class.define(a,{extend:qx.core.Object,implement:qx.ui.table.ICellEditorFactory,type:d,properties:{validationFunction:{check:e,nullable:true,init:null}},members:{_createEditor:function(){throw new Error("Abstract method call!");},createCellEditor:function(g){var h=this._createEditor();h.originalValue=g.value;if(g.value===null||g.value===undefined){g.value=f;}h.setValue(f+g.value);h.addListener(b,function(){h.selectAllText();});return h;},getCellEditorValue:function(i){var k=i.getValue();var j=this.getValidationFunction();if(j){k=j(k,i.originalValue);}if(typeof i.originalValue==c){k=parseFloat(k);}return k;}}});})();(function(){var c="number",b="qx.ui.table.celleditor.TextField",a="table-editor-textfield";qx.Class.define(b,{extend:qx.ui.table.celleditor.AbstractField,members:{getCellEditorValue:function(d){var f=d.getValue();var e=this.getValidationFunction();if(e){f=e(f,d.originalValue);}if(typeof d.originalValue==c){if(f!=null){f=parseFloat(f);}}return f;},_createEditor:function(){var g=new qx.ui.form.TextField();g.setAppearance(a);return g;}}});})();(function(){var a="qx.ui.table.IHeaderRenderer";qx.Interface.define(a,{members:{createHeaderCell:function(b){return true;},updateHeaderCell:function(c,d){return true;}}});})();(function(){var b="qx.ui.table.headerrenderer.Default",a="String";qx.Class.define(b,{extend:qx.core.Object,implement:qx.ui.table.IHeaderRenderer,statics:{STATE_SORTED:"sorted",STATE_SORTED_ASCENDING:"sortedAscending"},properties:{toolTip:{check:a,init:null,nullable:true}},members:{createHeaderCell:function(c){var d=new qx.ui.table.headerrenderer.HeaderCell();this.updateHeaderCell(c,d);return d;},updateHeaderCell:function(e,f){var g=qx.ui.table.headerrenderer.Default;if(e.name&&e.name.translate){f.setLabel(e.name.translate());}else{f.setLabel(e.name);}var h=f.getToolTip();if(this.getToolTip()!=null){if(h==null){h=new qx.ui.tooltip.ToolTip(this.getToolTip());f.setToolTip(h);qx.util.DisposeUtil.disposeTriggeredBy(h,f);}else{h.setLabel(this.getToolTip());}}e.sorted?f.addState(g.STATE_SORTED):f.removeState(g.STATE_SORTED);e.sortedAscending?f.addState(g.STATE_SORTED_ASCENDING):f.removeState(g.STATE_SORTED_ASCENDING);}}});})();(function(){var l="qx.client",k="head",j="text/css",h="stylesheet",g="}",f='@import "',e="{",d='";',c="qx.bom.Stylesheet",b="link",a="style";qx.Class.define(c,{statics:{includeFile:function(m,n){if(!n){n=document;}var o=n.createElement(b);o.type=j;o.rel=h;o.href=qx.util.ResourceManager.getInstance().toUri(m);var p=n.getElementsByTagName(k)[0];p.appendChild(o);},createElement:qx.core.Variant.select(l,{"mshtml":function(q){var r=document.createStyleSheet();if(q){r.cssText=q;}return r;},"default":function(s){var t=document.createElement(a);t.type=j;if(s){t.appendChild(document.createTextNode(s));}document.getElementsByTagName(k)[0].appendChild(t);return t.sheet;}}),addRule:qx.core.Variant.select(l,{"mshtml":function(u,v,w){u.addRule(v,w);},"default":function(x,y,z){x.insertRule(y+e+z+g,x.cssRules.length);}}),removeRule:qx.core.Variant.select(l,{"mshtml":function(A,B){var C=A.rules;var D=C.length;for(var i=D-1;i>=0;--i){if(C[i].selectorText==B){A.removeRule(i);}}},"default":function(E,F){var G=E.cssRules;var H=G.length;for(var i=H-1;i>=0;--i){if(G[i].selectorText==F){E.deleteRule(i);}}}}),removeAllRules:qx.core.Variant.select(l,{"mshtml":function(I){var J=I.rules;var K=J.length;for(var i=K-1;i>=0;i--){I.removeRule(i);}},"default":function(L){var M=L.cssRules;var N=M.length;for(var i=N-1;i>=0;i--){L.deleteRule(i);}}}),addImport:qx.core.Variant.select(l,{"mshtml":function(O,P){O.addImport(P);},"default":function(Q,R){Q.insertRule(f+R+d,Q.cssRules.length);}}),removeImport:qx.core.Variant.select(l,{"mshtml":function(S,T){var U=S.imports;var V=U.length;for(var i=V-1;i>=0;i--){if(U[i].href==T){S.removeImport(i);}}},"default":function(W,X){var Y=W.cssRules;var ba=Y.length;for(var i=ba-1;i>=0;i--){if(Y[i].href==X){W.deleteRule(i);}}}}),removeAllImports:qx.core.Variant.select(l,{"mshtml":function(bb){var bc=bb.imports;var bd=bc.length;for(var i=bd-1;i>=0;i--){bb.removeImport(i);}},"default":function(be){var bf=be.cssRules;var bg=bf.length;for(var i=bg-1;i>=0;i--){if(bf[i].type==bf[i].IMPORT_RULE){be.deleteRule(i);}}}})}});})();(function(){var a="qx.ui.table.ICellRenderer";qx.Interface.define(a,{members:{createDataCellHtml:function(b,c){return true;}}});})();(function(){var j="",i="px;",h=".qooxdoo-table-cell {",g="qooxdoo-table-cell",f='" ',e="nowrap",d="default",c="qx.client",b="}",a="width:",H=".qooxdoo-table-cell-right { text-align:right } ",G="0px 6px",F='<div class="',E="0px",D="height:",C="1px solid ",B=".qooxdoo-table-cell-bold { font-weight:bold } ",A="table-row-line",z="String",y='>',q="mshtml",r='</div>',o="ellipsis",p="content-box",m='left:',n="qx.ui.table.cellrenderer.Abstract",k='" style="',l="abstract",s="none",t="hidden",v="} ",u='px;',x=".qooxdoo-table-cell-italic { font-style:italic} ",w="absolute";qx.Class.define(n,{type:l,implement:qx.ui.table.ICellRenderer,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);var I=qx.ui.table.cellrenderer.Abstract;if(!I.__wp){var K=qx.theme.manager.Color.getInstance();I.__wp=this.self(arguments);var J=h+qx.bom.element.Style.compile({position:w,top:E,overflow:t,whiteSpace:e,borderRight:C+K.resolve(A),padding:G,cursor:d,textOverflow:o,userSelect:s})+v+H+x+B;if(!qx.core.Variant.isSet(c,q)){J+=h+qx.bom.element.BoxSizing.compile(p)+b;}I.__wp.stylesheet=qx.bom.Stylesheet.createElement(J);}},properties:{defaultCellStyle:{init:null,check:z,nullable:true}},members:{_insetX:6+6+1,_insetY:0,_getCellClass:function(L){return g;},_getCellStyle:function(M){return M.style||j;},_getCellAttributes:function(N){return j;},_getContentHtml:function(O){return O.value||j;},_getCellSizeStyle:function(P,Q,R,S){var T=j;if(qx.bom.client.Feature.CONTENT_BOX){P-=R;Q-=S;}T+=a+Math.max(P,0)+i;T+=D+Math.max(Q,0)+i;return T;},createDataCellHtml:function(U,V){V.push(F,this._getCellClass(U),k,m,U.styleLeft,u,this._getCellSizeStyle(U.styleWidth,U.styleHeight,this._insetX,this._insetY),this._getCellStyle(U),f,this._getCellAttributes(U),y+this._getContentHtml(U),r);}}});})();(function(){var h="",g="number",f="Boolean",e="qx.ui.table.cellrenderer.Default",d=" qooxdoo-table-cell-bold",c=" qooxdoo-table-cell-right",b=" qooxdoo-table-cell-italic",a="string";qx.Class.define(e,{extend:qx.ui.table.cellrenderer.Abstract,statics:{STYLEFLAG_ALIGN_RIGHT:1,STYLEFLAG_BOLD:2,STYLEFLAG_ITALIC:4,_numberFormat:null},properties:{useAutoAlign:{check:f,init:true}},members:{_getStyleFlags:function(i){if(this.getUseAutoAlign()){if(typeof i.value==g){return qx.ui.table.cellrenderer.Default.STYLEFLAG_ALIGN_RIGHT;}}return 0;},_getCellClass:function(j){var k=qx.ui.table.cellrenderer.Abstract.prototype._getCellClass.call(this,j);if(!k){return h;}var l=this._getStyleFlags(j);if(l&qx.ui.table.cellrenderer.Default.STYLEFLAG_ALIGN_RIGHT){k+=c;}if(l&qx.ui.table.cellrenderer.Default.STYLEFLAG_BOLD){k+=d;}if(l&qx.ui.table.cellrenderer.Default.STYLEFLAG_ITALIC){k+=b;}return k;},_getContentHtml:function(m){return qx.bom.String.escape(this._formatValue(m));},_formatValue:function(n){var p=n.value;var o;if(p==null){return h;}if(typeof p==a){return p;}else if(typeof p==g){if(!qx.ui.table.cellrenderer.Default._numberFormat){qx.ui.table.cellrenderer.Default._numberFormat=new qx.util.format.NumberFormat();qx.ui.table.cellrenderer.Default._numberFormat.setMaximumFractionDigits(2);}var o=qx.ui.table.cellrenderer.Default._numberFormat.format(p);}else if(p instanceof Date){o=qx.util.format.DateFormat.getDateInstance().format(p);}else{o=p;}return o;}}});})();(function(){var k="qx.event.type.Data",j="visibilityChanged",h="orderChanged",g="visibilityChangedPre",f="__wv",e="__ww",d="widthChanged",c="qx.ui.table.columnmodel.Basic",b="__wx",a="headerCellRendererChanged";qx.Class.define(c,{extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__wq=[];this.__wr=[];},events:{"widthChanged":k,"visibilityChangedPre":k,"visibilityChanged":k,"orderChanged":k,"headerCellRendererChanged":k},statics:{DEFAULT_WIDTH:100,DEFAULT_HEADER_RENDERER:qx.ui.table.headerrenderer.Default,DEFAULT_DATA_RENDERER:qx.ui.table.cellrenderer.Default,DEFAULT_EDITOR_FACTORY:qx.ui.table.celleditor.TextField},members:{__ws:null,__wt:null,__wr:null,__wq:null,__wu:null,__wv:null,__ww:null,__wx:null,init:function(l,m){{};this.__wu=[];var q=qx.ui.table.columnmodel.Basic.DEFAULT_WIDTH;var r=this.__wv||(this.__wv=new qx.ui.table.columnmodel.Basic.DEFAULT_HEADER_RENDERER());var o=this.__ww||(this.__ww=new qx.ui.table.columnmodel.Basic.DEFAULT_DATA_RENDERER());var n=this.__wx||(this.__wx=new qx.ui.table.columnmodel.Basic.DEFAULT_EDITOR_FACTORY());this.__wq=[];this.__wr=[];var t;if(m){t=m.getInitiallyHiddenColumns();}t=t||[];for(var u=0;u<l;u++){this.__wu[u]={width:q,headerRenderer:r,dataRenderer:o,editorFactory:n};this.__wq[u]=u;this.__wr[u]=u;}this.__wt=null;this.__ws=true;for(var s=0;s<t.length;s++){this.setColumnVisible(t[s],false);}this.__ws=false;for(u=0;u<l;u++){var p={col:u,visible:this.isColumnVisible(u)};this.fireDataEvent(g,p);this.fireDataEvent(j,p);}},getVisibleColumns:function(){return this.__wr!=null?this.__wr:[];},setColumnWidth:function(v,w,y){{};var A=this.__wu[v].width;if(A!=w){this.__wu[v].width=w;var z={col:v,newWidth:w,oldWidth:A,isMouseAction:y||false};this.fireDataEvent(d,z);}},getColumnWidth:function(B){{};return this.__wu[B].width;},setHeaderCellRenderer:function(C,D){{};var E=this.__wu[C].headerRenderer;if(E!==this.__wv){E.dispose();}this.__wu[C].headerRenderer=D;this.fireDataEvent(a,{col:C});},getHeaderCellRenderer:function(F){{};return this.__wu[F].headerRenderer;},setDataCellRenderer:function(G,H){{};this.__wu[G].dataRenderer=H;var I=this.__wu[G].dataRenderer;if(I!==this.__ww){return I;}return null;},getDataCellRenderer:function(J){{};return this.__wu[J].dataRenderer;},setCellEditorFactory:function(K,L){{};var M=this.__wu[K].headerRenderer;if(M!==this.__wx){M.dispose();}this.__wu[K].editorFactory=L;},getCellEditorFactory:function(N){{};return this.__wu[N].editorFactory;},_getColToXPosMap:function(){if(this.__wt==null){this.__wt={};for(var Q=0;Q<this.__wq.length;Q++){var P=this.__wq[Q];this.__wt[P]={overX:Q};}for(var O=0;O<this.__wr.length;O++){var P=this.__wr[O];this.__wt[P].visX=O;}}return this.__wt;},getVisibleColumnCount:function(){return this.__wr!=null?this.__wr.length:0;},getVisibleColumnAtX:function(R){{};return this.__wr[R];},getVisibleX:function(S){{};return this._getColToXPosMap()[S].visX;},getOverallColumnCount:function(){return this.__wq.length;},getOverallColumnAtX:function(T){{};return this.__wq[T];},getOverallX:function(U){{};return this._getColToXPosMap()[U].overX;},isColumnVisible:function(V){{};return (this._getColToXPosMap()[V].visX!=null);},setColumnVisible:function(W,X){{};if(X!=this.isColumnVisible(W)){if(X){var be=this._getColToXPosMap();var bb=be[W].overX;if(bb==null){throw new Error("Showing column failed: "+W+". The column is not added to this TablePaneModel.");}var bc;for(var x=bb+1;x<this.__wq.length;x++){var bd=this.__wq[x];var Y=be[bd].visX;if(Y!=null){bc=Y;break;}}if(bc==null){bc=this.__wr.length;}this.__wr.splice(bc,0,W);}else{var ba=this.getVisibleX(W);this.__wr.splice(ba,1);}this.__wt=null;if(!this.__ws){var bf={col:W,visible:X};this.fireDataEvent(g,bf);this.fireDataEvent(j,bf);}}},moveColumn:function(bg,bh){{};this.__ws=true;var bk=this.__wq[bg];var bi=this.isColumnVisible(bk);if(bi){this.setColumnVisible(bk,false);}this.__wq.splice(bg,1);this.__wq.splice(bh,0,bk);this.__wt=null;if(bi){this.setColumnVisible(bk,true);}this.__ws=false;var bj={col:bk,fromOverXPos:bg,toOverXPos:bh};this.fireDataEvent(h,bj);},setColumnsOrder:function(bl){{};if(bl.length==this.__wq.length){this.__ws=true;var bo=new Array(bl.length);for(var bm=0;bm<this.__wq.length;bm++){var bn=this.isColumnVisible(bm);bo[bm]=bn;if(bn){this.setColumnVisible(bm,false);}}this.__wq=qx.lang.Array.clone(bl);this.__wt=null;for(var bm=0;bm<this.__wq.length;bm++){if(bo[bm]){this.setColumnVisible(bm,true);}}this.__ws=false;this.fireDataEvent(h);}else{throw new Error("setColumnsOrder: Invalid number of column positions given, expected "+this.__wq.length+", got "+bl.length);}}},destruct:function(){for(var i=0;i<this.__wu.length;i++){this.__wu[i].headerRenderer.dispose();this.__wu[i].dataRenderer.dispose();this.__wu[i].editorFactory.dispose();}this.__wq=this.__wr=this.__wu=this.__wt=null;this._disposeObjects(f,e,b);}});})();(function(){var n="appear",m="columnVisibilityMenuCreateEnd",l="tableWidthChanged",k="verticalScrollBarChanged",j="qx.ui.table.columnmodel.resizebehavior.Abstract",i="qx.ui.table.columnmodel.Resize",h="_applyBehavior",g="separator",f="visibilityChanged",e="Reset column widths",b="changeBehavior",d="user-button",c="widthChanged",a="execute";qx.Class.define(i,{extend:qx.ui.table.columnmodel.Basic,include:qx.locale.MTranslation,construct:function(){qx.ui.table.columnmodel.Basic.call(this);this.__yb=false;this.__yc=false;},properties:{behavior:{check:j,init:null,nullable:true,apply:h,event:b}},members:{__yc:null,__yb:null,__yd:null,_applyBehavior:function(p,q){if(q!=null){q.dispose();q=null;}p._setNumColumns(this.getOverallColumnCount());p.setTableColumnModel(this);},init:function(r,s){qx.ui.table.columnmodel.Basic.prototype.init.call(this,r,s);if(this.__yd==null){this.__yd=s;s.addListener(n,this._onappear,this);s.addListener(l,this._onTableWidthChanged,this);s.addListener(k,this._onverticalscrollbarchanged,this);s.addListener(m,this._addResetColumnWidthButton,this);this.addListener(c,this._oncolumnwidthchanged,this);this.addListener(f,this._onvisibilitychanged,this);}if(this.getBehavior()==null){this.setBehavior(new qx.ui.table.columnmodel.resizebehavior.Default());}this.getBehavior()._setNumColumns(r);},getTable:function(){return this.__yd;},_addResetColumnWidthButton:function(event){var v=event.getData();var u=v.columnButton;var t=v.menu;var o;o=u.factory(g);t.add(o);o=u.factory(d,{text:this.tr(e)});t.add(o);o.addListener(a,this._onappear,this);},_onappear:function(event){if(this.__yb){return ;}this.__yb=true;{};this.getBehavior().onAppear(event,event.getType()!==n);this.__yd._updateScrollerWidths();this.__yd._updateScrollBarVisibility();this.__yb=false;this.__yc=true;},_onTableWidthChanged:function(event){if(this.__yb||!this.__yc){return ;}this.__yb=true;{};this.getBehavior().onTableWidthChanged(event);this.__yb=false;},_onverticalscrollbarchanged:function(event){if(this.__yb||!this.__yc){return ;}this.__yb=true;{};this.getBehavior().onVerticalScrollBarChanged(event);qx.event.Timer.once(function(){if(this.__yd&&!this.__yd.isDisposed()){this.__yd._updateScrollerWidths();this.__yd._updateScrollBarVisibility();}},this,0);this.__yb=false;},_oncolumnwidthchanged:function(event){if(this.__yb||!this.__yc){return ;}this.__yb=true;{};this.getBehavior().onColumnWidthChanged(event);this.__yb=false;},_onvisibilitychanged:function(event){if(this.__yb||!this.__yc){return ;}this.__yb=true;{};this.getBehavior().onVisibilityChanged(event);this.__yb=false;}},destruct:function(){this.__yd=null;}});})();(function(){var i="icon",h="label",g="String",f="sort-icon",e="_applySortIcon",d="_applyIcon",c="table-header-cell",b="qx.ui.table.headerrenderer.HeaderCell",a="_applyLabel";qx.Class.define(b,{extend:qx.ui.container.Composite,construct:function(){qx.ui.container.Composite.call(this);var j=new qx.ui.layout.Grid();j.setRowFlex(0,1);j.setColumnFlex(1,1);j.setColumnFlex(2,1);this.setLayout(j);},properties:{appearance:{refine:true,init:c},label:{check:g,init:null,nullable:true,apply:a},sortIcon:{check:g,init:null,nullable:true,apply:e,themeable:true},icon:{check:g,init:null,nullable:true,apply:d}},members:{_applyLabel:function(k,l){if(k){this._showChildControl(h).setValue(k);}else{this._excludeChildControl(h);}},_applySortIcon:function(m,n){if(m){this._showChildControl(f).setSource(m);}else{this._excludeChildControl(f);}},_applyIcon:function(o,p){if(o){this._showChildControl(i).setSource(o);}else{this._excludeChildControl(i);}},_createChildControlImpl:function(q,r){var s;switch(q){case h:s=new qx.ui.basic.Label(this.getLabel()).set({anonymous:true,allowShrinkX:true});this._add(s,{row:0,column:1});break;case f:s=new qx.ui.basic.Image(this.getSortIcon());s.setAnonymous(true);this._add(s,{row:0,column:2});break;case i:s=new qx.ui.basic.Image(this.getIcon()).set({anonymous:true,allowShrinkX:true});this._add(s,{row:0,column:0});break;}return s||qx.ui.container.Composite.prototype._createChildControlImpl.call(this,q);}}});})();(function(){var e="qx.ui.popup.Popup",d="visible",c="excluded",b="popup",a="Boolean";qx.Class.define(e,{extend:qx.ui.container.Composite,include:qx.ui.core.MPlacement,construct:function(f){qx.ui.container.Composite.call(this,f);qx.core.Init.getApplication().getRoot().add(this);this.initVisibility();},properties:{appearance:{refine:true,init:b},visibility:{refine:true,init:c},autoHide:{check:a,init:true}},members:{_applyVisibility:function(g,h){qx.ui.container.Composite.prototype._applyVisibility.call(this,g,h);var i=qx.ui.popup.Manager.getInstance();g===d?i.add(this):i.remove(this);}},destruct:function(){qx.ui.popup.Manager.getInstance().remove(this);}});})();(function(){var l="atom",k="Integer",j="String",i="_applyRich",h="qx.ui.tooltip.ToolTip",g="_applyIcon",f="tooltip",d="qx.ui.core.Widget",c="mouseover",b="Boolean",a="_applyLabel";qx.Class.define(h,{extend:qx.ui.popup.Popup,construct:function(m,n){qx.ui.popup.Popup.call(this);this.setLayout(new qx.ui.layout.Grow);this._createChildControl(l);if(m!=null){this.setLabel(m);}if(n!=null){this.setIcon(n);}this.addListener(c,this._onMouseOver,this);},properties:{appearance:{refine:true,init:f},showTimeout:{check:k,init:700,themeable:true},hideTimeout:{check:k,init:4000,themeable:true},label:{check:j,nullable:true,apply:a},icon:{check:j,nullable:true,apply:g,themeable:true},rich:{check:b,init:false,apply:i},opener:{check:d,nullable:true}},members:{_createChildControlImpl:function(o,p){var q;switch(o){case l:q=new qx.ui.basic.Atom;this._add(q);break;}return q||qx.ui.popup.Popup.prototype._createChildControlImpl.call(this,o);},_onMouseOver:function(e){this.hide();},_applyIcon:function(r,s){var t=this.getChildControl(l);r==null?t.resetIcon():t.setIcon(r);},_applyLabel:function(u,v){var w=this.getChildControl(l);u==null?w.resetLabel():w.setLabel(u);},_applyRich:function(x,y){var z=this.getChildControl(l);z.setRich(x);}}});})();(function(){var f="mousedown",d="__rz",c="blur",b="singleton",a="qx.ui.popup.Manager";qx.Class.define(a,{type:b,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__rz=[];qx.event.Registration.addListener(document.documentElement,f,this.__rB,this,true);qx.bom.Element.addListener(window,c,this.hideAll,this);},members:{__rz:null,add:function(g){{};this.__rz.push(g);this.__rA();},remove:function(h){{};if(this.__rz){qx.lang.Array.remove(this.__rz,h);this.__rA();}},hideAll:function(){if(this.__rz){for(var i=0;i<this.__rz.length;i++){this.__rz[i].exclude();}}},__rA:function(){var j=1e7;for(var i=0;i<this.__rz.length;i++){this.__rz[i].setZIndex(j++);}},__rB:function(e){var l=qx.ui.core.Widget.getWidgetByElement(e.getTarget());var m=this.__rz;for(var i=0;i<m.length;i++){var k=m[i];if(!k.getAutoHide()||l==k||qx.ui.core.Widget.contains(k,l)){continue;}k.exclude();}}},destruct:function(){qx.event.Registration.removeListener(document.documentElement,f,this.__rB,this,true);this._disposeArray(d);}});})();(function(){var bD="(\\d\\d?)",bC="format",bB="",bA="abbreviated",bz="wide",by="(",bx=")",bw="|",bv="stand-alone",bu="wildcard",bj="default",bi="literal",bh="'",bg="hour",bf="(\\d\\d?\\d?)",be="ms",bd="narrow",bc="-",bb="quoted_literal",ba='a',bK="HH:mm:ss",bL="+",bI="HHmmss",bJ="long",bG='z',bH="0",bE="sec",bF="day",bM='Z',bN=" ",bn="min",bm="mm",bp="(\\d+)",bo="h",br="KK",bq='L',bt="Z",bs="(\\d\\d+)",bl="EEEE",bk="^",a=":",b='y',c="K",d="a",e="([\\+\\-]\\d\\d:?\\d\\d)",f="GMT",g="dd",h="qx.util.format.DateFormat",j="yyy",k="H",bR="YYYY",bQ="y",bP="HH",bO="EE",bV='h',bU="S",bT='s',bS='A',bX="yyyyyy",bW="kk",J="ss",K='H',H='S',I="MMMM",N='c',O="d",L="([a-zA-Z]+)",M='k',F="m",G='Y',s='D',r="yyyyy",u='K',t="hh",o="SSS",n="MM",q="yy",p="(\\d\\d\\d\\d\\d\\d+)",m="yyyy-MM-dd HH:mm:ss",l="(\\d\\d\\d\\d\\d+)",T="short",U='d',V="unkown",W='m',P="(\\d\\d\\d\\d)",Q="(\\d\\d\\d+)",R="k",S='M',X="(\\d\\d\\d\\d+)",Y="SS",C="MMM",B="s",A="M",z='w',y="EEE",x="$",w="?",v='E',E="z",D="yyyy";qx.Class.define(h,{extend:qx.core.Object,implement:qx.util.format.IFormat,construct:function(bY,ca){qx.core.Object.call(this);if(!ca){this.__wy=qx.locale.Manager.getInstance().getLocale();}else{this.__wy=ca;}if(bY!=null){this.__wz=bY.toString();}else{this.__wz=qx.locale.Date.getDateFormat(bJ,this.__wy)+bN+qx.locale.Date.getDateTimeFormat(bI,bK,this.__wy);}},statics:{getDateTimeInstance:function(){var cc=qx.util.format.DateFormat;var cb=qx.locale.Date.getDateFormat(bJ)+bN+qx.locale.Date.getDateTimeFormat(bI,bK);if(cc._dateInstance==null||cc._dateInstance.__wz!=cb){cc._dateTimeInstance=new cc();}return cc._dateTimeInstance;},getDateInstance:function(){var ce=qx.util.format.DateFormat;var cd=qx.locale.Date.getDateFormat(T)+bB;if(ce._dateInstance==null||ce._dateInstance.__wz!=cd){ce._dateInstance=new ce(cd);}return ce._dateInstance;},ASSUME_YEAR_2000_THRESHOLD:30,LOGGING_DATE_TIME__format:m,AM_MARKER:"am",PM_MARKER:"pm",MEDIUM_TIMEZONE_NAMES:["GMT"],FULL_TIMEZONE_NAMES:["Greenwich Mean Time"]},members:{__wy:null,__wz:null,__wA:null,__wB:null,__wC:null,__wD:function(cf,cg){var ch=bB+cf;while(ch.length<cg){ch=bH+ch;}return ch;},__wE:function(ci){var cj=new Date(ci.getTime());var ck=cj.getDate();while(cj.getMonth()!=0){cj.setDate(-1);ck+=cj.getDate()+1;}return ck;},__wF:function(cl){return new Date(cl.getTime()+(3-((cl.getDay()+6)%7))*86400000);},__wG:function(cm){var co=this.__wF(cm);var cp=co.getFullYear();var cn=this.__wF(new Date(cp,0,4));return Math.floor(1.5+(co.getTime()-cn.getTime())/86400000/7);},format:function(cq){if(cq==null){return null;}var cw=qx.util.format.DateFormat;var cx=this.__wy;var cH=cq.getFullYear();var cB=cq.getMonth();var cJ=cq.getDate();var cr=cq.getDay();var cC=cq.getHours();var cy=cq.getMinutes();var cD=cq.getSeconds();var cF=cq.getMilliseconds();var cI=cq.getTimezoneOffset();var cu=cI>0?1:-1;var cs=Math.floor(Math.abs(cI)/60);var cz=Math.abs(cI)%60;this.__wH();var cG=bB;for(var i=0;i<this.__wC.length;i++){var cE=this.__wC[i];if(cE.type==bi){cG+=cE.text;}else{var cv=cE.character;var cA=cE.size;var ct=w;switch(cv){case b:case G:if(cA==2){ct=this.__wD(cH%100,2);}else{ct=cH+bB;if(cA>ct.length){for(var i=ct.length;i<cA;i++){ct=bH+ct;}}}break;case s:ct=this.__wD(this.__wE(cq),cA);break;case U:ct=this.__wD(cJ,cA);break;case z:ct=this.__wD(this.__wG(cq),cA);break;case v:if(cA==2){ct=qx.locale.Date.getDayName(bd,cr,cx,bC);}else if(cA==3){ct=qx.locale.Date.getDayName(bA,cr,cx,bC);}else if(cA==4){ct=qx.locale.Date.getDayName(bz,cr,cx,bC);}break;case N:if(cA==2){ct=qx.locale.Date.getDayName(bd,cr,cx,bv);}else if(cA==3){ct=qx.locale.Date.getDayName(bA,cr,cx,bv);}else if(cA==4){ct=qx.locale.Date.getDayName(bz,cr,cx,bv);}break;case S:if(cA==1||cA==2){ct=this.__wD(cB+1,cA);}else if(cA==3){ct=qx.locale.Date.getMonthName(bA,cB,cx,bC);}else if(cA==4){ct=qx.locale.Date.getMonthName(bz,cB,cx,bC);}break;case bq:if(cA==1||cA==2){ct=this.__wD(cB+1,cA);}else if(cA==3){ct=qx.locale.Date.getMonthName(bA,cB,cx,bv);}else if(cA==4){ct=qx.locale.Date.getMonthName(bz,cB,cx,bv);}break;case ba:ct=(cC<12)?qx.locale.Date.getAmMarker(cx):qx.locale.Date.getPmMarker(cx);break;case K:ct=this.__wD(cC,cA);break;case M:ct=this.__wD((cC==0)?24:cC,cA);break;case u:ct=this.__wD(cC%12,cA);break;case bV:ct=this.__wD(((cC%12)==0)?12:(cC%12),cA);break;case W:ct=this.__wD(cy,cA);break;case bT:ct=this.__wD(cD,cA);break;case H:ct=this.__wD(cF,cA);break;case bG:if(cA==1){ct=f+((cu>0)?bc:bL)+this.__wD(Math.abs(cs))+a+this.__wD(cz,2);}else if(cA==2){ct=cw.MEDIUM_TIMEZONE_NAMES[cs];}else if(cA==3){ct=cw.FULL_TIMEZONE_NAMES[cs];}break;case bM:ct=((cu>0)?bc:bL)+this.__wD(Math.abs(cs),2)+this.__wD(cz,2);break;}cG+=ct;}}return cG;},parse:function(cK){this.__wI();var cQ=this.__wA.regex.exec(cK);if(cQ==null){throw new Error("Date string '"+cK+"' does not match the date format: "+this.__wz);}var cL={year:1970,month:0,day:1,hour:0,ispm:false,min:0,sec:0,ms:0};var cM=1;for(var i=0;i<this.__wA.usedRules.length;i++){var cO=this.__wA.usedRules[i];var cN=cQ[cM];if(cO.field!=null){cL[cO.field]=parseInt(cN,10);}else{cO.manipulator(cL,cN);}cM+=(cO.groups==null)?1:cO.groups;}var cP=new Date(cL.year,cL.month,cL.day,(cL.ispm)?(cL.hour+12):cL.hour,cL.min,cL.sec,cL.ms);if(cL.month!=cP.getMonth()||cL.year!=cP.getFullYear()){throw new Error("Error parsing date '"+cK+"': the value for day or month is too large");}return cP;},__wH:function(){if(this.__wC!=null){return;}this.__wC=[];var cV;var cT=0;var cX=bB;var cR=this.__wz;var cU=bj;var i=0;while(i<cR.length){var cW=cR.charAt(i);switch(cU){case bb:if(cW==bh){if(i+1>=cR.length){i++;break;}var cS=cR.charAt(i+1);if(cS==bh){cX+=cW;i++;}else{i++;cU=V;}}else{cX+=cW;i++;}break;case bu:if(cW==cV){cT++;i++;}else{this.__wC.push({type:bu,character:cV,size:cT});cV=null;cT=0;cU=bj;}break;default:if((cW>=ba&&cW<=bG)||(cW>=bS&&cW<=bM)){cV=cW;cU=bu;}else if(cW==bh){if(i+1>=cR.length){cX+=cW;i++;break;}var cS=cR.charAt(i+1);if(cS==bh){cX+=cW;i++;}i++;cU=bb;}else{cU=bj;}if(cU!=bj){if(cX.length>0){this.__wC.push({type:bi,text:cX});cX=bB;}}else{cX+=cW;i++;}break;}}if(cV!=null){this.__wC.push({type:bu,character:cV,size:cT});}else if(cX.length>0){this.__wC.push({type:bi,text:cX});}},__wI:function(){if(this.__wA!=null){return ;}var dc=this.__wz;this.__wJ();this.__wH();var di=[];var de=bk;for(var da=0;da<this.__wC.length;da++){var dj=this.__wC[da];if(dj.type==bi){de+=qx.lang.String.escapeRegexpChars(dj.text);}else{var db=dj.character;var df=dj.size;var dd;for(var dk=0;dk<this.__wB.length;dk++){var dg=this.__wB[dk];if(db==dg.pattern.charAt(0)&&df==dg.pattern.length){dd=dg;break;}}if(dd==null){var dh=bB;for(var i=0;i<df;i++){dh+=db;}throw new Error("Malformed date format: "+dc+". Wildcard "+dh+" is not supported");}else{di.push(dd);de+=dd.regex;}}}de+=x;var cY;try{cY=new RegExp(de);}catch(dl){throw new Error("Malformed date format: "+dc);}this.__wA={regex:cY,"usedRules":di,pattern:de};},__wJ:function(){var dw=qx.util.format.DateFormat;var dz=qx.lang.String;if(this.__wB!=null){return ;}var dx=this.__wB=[];var dn=qx.locale.Date.getAmMarker(this.__wy).toString()||dw.AM_MARKER;var dE=qx.locale.Date.getPmMarker(this.__wy).toString()||dw.PM_MARKER;var ds=function(dI,dJ){dJ=parseInt(dJ,10);if(dJ<dw.ASSUME_YEAR_2000_THRESHOLD){dJ+=2000;}else if(dJ<100){dJ+=1900;}dI.year=dJ;};var du=function(dK,dL){dK.month=parseInt(dL,10)-1;};var dq=function(dM,dN){var dO=qx.locale.Date.getPmMarker(this.__wy).toString()||dw.PM_MARKER;dM.ispm=(dN==dO);};var dG=function(dP,dQ){dP.hour=parseInt(dQ,10)%24;};var dp=function(dR,dS){dR.hour=parseInt(dS,10)%12;};var dB=function(dT,dU){return;};var dH=qx.locale.Date.getMonthNames(bA,this.__wy,bC);for(var i=0;i<dH.length;i++){dH[i]=dz.escapeRegexpChars(dH[i].toString());}var dr=function(dV,dW){dW=dz.escapeRegexpChars(dW);dV.month=dH.indexOf(dW);};var dy=qx.locale.Date.getMonthNames(bz,this.__wy,bC);for(var i=0;i<dy.length;i++){dy[i]=dz.escapeRegexpChars(dy[i].toString());}var dC=function(dX,dY){dY=dz.escapeRegexpChars(dY);dX.month=dy.indexOf(dY);};var dm=qx.locale.Date.getDayNames(bd,this.__wy,bC);for(var i=0;i<dm.length;i++){dm[i]=dz.escapeRegexpChars(dm[i].toString());}var dF=function(ea,eb){eb=dz.escapeRegexpChars(eb);ea.month=dm.indexOf(eb);};var dD=qx.locale.Date.getDayNames(bA,this.__wy,bC);for(var i=0;i<dD.length;i++){dD[i]=dz.escapeRegexpChars(dD[i].toString());}var dt=function(ec,ed){ed=dz.escapeRegexpChars(ed);ec.month=dD.indexOf(ed);};var dA=qx.locale.Date.getDayNames(bz,this.__wy,bC);for(var i=0;i<dA.length;i++){dA[i]=dz.escapeRegexpChars(dA[i].toString());}var dv=function(ee,ef){ef=dz.escapeRegexpChars(ef);ee.month=dA.indexOf(ef);};dx.push({pattern:bR,regex:P,manipulator:ds});dx.push({pattern:bQ,regex:bp,manipulator:ds});dx.push({pattern:q,regex:bs,manipulator:ds});dx.push({pattern:j,regex:Q,manipulator:ds});dx.push({pattern:D,regex:X,manipulator:ds});dx.push({pattern:r,regex:l,manipulator:ds});dx.push({pattern:bX,regex:p,manipulator:ds});dx.push({pattern:A,regex:bD,manipulator:du});dx.push({pattern:n,regex:bD,manipulator:du});dx.push({pattern:C,regex:by+dH.join(bw)+bx,manipulator:dr});dx.push({pattern:I,regex:by+dy.join(bw)+bx,manipulator:dC});dx.push({pattern:g,regex:bD,field:bF});dx.push({pattern:O,regex:bD,field:bF});dx.push({pattern:bO,regex:by+dm.join(bw)+bx,manipulator:dF});dx.push({pattern:y,regex:by+dD.join(bw)+bx,manipulator:dt});dx.push({pattern:bl,regex:by+dA.join(bw)+bx,manipulator:dv});dx.push({pattern:d,regex:by+dn+bw+dE+bx,manipulator:dq});dx.push({pattern:bP,regex:bD,field:bg});dx.push({pattern:k,regex:bD,field:bg});dx.push({pattern:bW,regex:bD,manipulator:dG});dx.push({pattern:R,regex:bD,manipulator:dG});dx.push({pattern:br,regex:bD,field:bg});dx.push({pattern:c,regex:bD,field:bg});dx.push({pattern:t,regex:bD,manipulator:dp});dx.push({pattern:bo,regex:bD,manipulator:dp});dx.push({pattern:bm,regex:bD,field:bn});dx.push({pattern:F,regex:bD,field:bn});dx.push({pattern:J,regex:bD,field:bE});dx.push({pattern:B,regex:bD,field:bE});dx.push({pattern:o,regex:bf,field:be});dx.push({pattern:Y,regex:bf,field:be});dx.push({pattern:bU,regex:bf,field:be});dx.push({pattern:bt,regex:e,manipulator:dB});dx.push({pattern:E,regex:L,manipulator:dB});}},destruct:function(){this.__wC=this.__wA=this.__wB=null;}});})();(function(){var k="_",j="format",h="thu",g="sat",f="cldr_day_",e="cldr_month_",d="wed",c="fri",b="tue",a="mon",B="sun",A="short",z="HH:mm",y="HHmmsszz",x="HHmm",w="HHmmss",v="cldr_date_format_",u="HH:mm:ss zz",t="full",s="cldr_pm",q="long",r="medium",o="cldr_am",p="qx.locale.Date",m="cldr_date_time_format_",n="cldr_time_format_",l="HH:mm:ss";qx.Class.define(p,{statics:{__wK:qx.locale.Manager.getInstance(),getAmMarker:function(C){return this.__wK.localize(o,[],C);},getPmMarker:function(D){return this.__wK.localize(s,[],D);},getDayNames:function(length,E,F){var F=F?F:j;{};var H=[B,a,b,d,h,c,g];var I=[];for(var i=0;i<H.length;i++){var G=f+F+k+length+k+H[i];I.push(this.__wK.localize(G,[],E));}return I;},getDayName:function(length,J,K,L){var L=L?L:j;{};var N=[B,a,b,d,h,c,g];var M=f+L+k+length+k+N[J];return this.__wK.localize(M,[],K);},getMonthNames:function(length,O,P){var P=P?P:j;{};var R=[];for(var i=0;i<12;i++){var Q=e+P+k+length+k+(i+1);R.push(this.__wK.localize(Q,[],O));}return R;},getMonthName:function(length,S,T,U){var U=U?U:j;{};var V=e+U+k+length+k+(S+1);return this.__wK.localize(V,[],T);},getDateFormat:function(W,X){{};var Y=v+W;return this.__wK.localize(Y,[],X);},getDateTimeFormat:function(ba,bb,bc){var be=m+ba;var bd=this.__wK.localize(be,[],bc);if(bd==be){bd=bb;}return bd;},getTimeFormat:function(bf,bg){{};var bi=n+bf;var bh=this.__wK.localize(bi,[],bg);if(bh!=bi){return bh;}switch(bf){case A:case r:return qx.locale.Date.getDateTimeFormat(x,z);case q:return qx.locale.Date.getDateTimeFormat(w,l);case t:return qx.locale.Date.getDateTimeFormat(y,u);default:throw new Error("This case should never happen.");}},getWeekStart:function(bj){var bk={"MV":5,"AE":6,"AF":6,"BH":6,"DJ":6,"DZ":6,"EG":6,"ER":6,"ET":6,"IQ":6,"IR":6,"JO":6,"KE":6,"KW":6,"LB":6,"LY":6,"MA":6,"OM":6,"QA":6,"SA":6,"SD":6,"SO":6,"TN":6,"YE":6,"AS":0,"AU":0,"AZ":0,"BW":0,"CA":0,"CN":0,"FO":0,"GE":0,"GL":0,"GU":0,"HK":0,"IE":0,"IL":0,"IS":0,"JM":0,"JP":0,"KG":0,"KR":0,"LA":0,"MH":0,"MN":0,"MO":0,"MP":0,"MT":0,"NZ":0,"PH":0,"PK":0,"SG":0,"TH":0,"TT":0,"TW":0,"UM":0,"US":0,"UZ":0,"VI":0,"ZA":0,"ZW":0,"MW":0,"NG":0,"TJ":0};var bl=qx.locale.Date._getTerritory(bj);return bk[bl]!=null?bk[bl]:1;},getWeekendStart:function(bm){var bo={"EG":5,"IL":5,"SY":5,"IN":0,"AE":4,"BH":4,"DZ":4,"IQ":4,"JO":4,"KW":4,"LB":4,"LY":4,"MA":4,"OM":4,"QA":4,"SA":4,"SD":4,"TN":4,"YE":4};var bn=qx.locale.Date._getTerritory(bm);return bo[bn]!=null?bo[bn]:6;},getWeekendEnd:function(bp){var bq={"AE":5,"BH":5,"DZ":5,"IQ":5,"JO":5,"KW":5,"LB":5,"LY":5,"MA":5,"OM":5,"QA":5,"SA":5,"SD":5,"TN":5,"YE":5,"AF":5,"IR":5,"EG":6,"IL":6,"SY":6};var br=qx.locale.Date._getTerritory(bp);return bq[br]!=null?bq[br]:0;},isWeekend:function(bs,bt){var bv=qx.locale.Date.getWeekendStart(bt);var bu=qx.locale.Date.getWeekendEnd(bt);if(bu>bv){return ((bs>=bv)&&(bs<=bu));}else{return ((bs>=bv)||(bs<=bu));}},_getTerritory:function(bw){if(bw){var bx=bw.split(k)[1]||bw;}else{bx=this.__wK.getTerritory()||this.__wK.getLanguage();}return bx.toUpperCase();}}});})();(function(){var e="auto",d="string",c="number",b="*",a="qx.ui.core.ColumnData";qx.Class.define(a,{extend:qx.ui.core.LayoutItem,construct:function(){qx.ui.core.LayoutItem.call(this);this.setColumnWidth(e);},members:{__ye:null,renderLayout:function(f,top,g,h){this.__ye=g;},getComputedWidth:function(){return this.__ye;},getFlex:function(){return this.getLayoutProperties().flex||0;},setColumnWidth:function(i,j){var j=j||0;var k=null;if(typeof i==c){this.setWidth(i);}else if(typeof i==d){if(i==e){j=1;}else{var l=i.match(/^[0-9]+(?:\.[0-9]+)?([%\*])$/);if(l){if(l[1]==b){j=parseFloat(i);}else{k=i;}}}}this.setLayoutProperties({flex:j,width:k});}},settings:{"qx.tableResizeDebug":false}});})();(function(){var b="qx.ui.table.columnmodel.resizebehavior.Abstract",a="abstract";qx.Class.define(b,{type:a,extend:qx.core.Object,members:{_setNumColumns:function(c){throw new Error("_setNumColumns is abstract");},onAppear:function(event,d){throw new Error("onAppear is abstract");},onTableWidthChanged:function(event){throw new Error("onTableWidthChanged is abstract");},onVerticalScrollBarChanged:function(event){throw new Error("onVerticalScrollBarChanged is abstract");},onColumnWidthChanged:function(event){throw new Error("onColumnWidthChanged is abstract");},onVisibilityChanged:function(event){throw new Error("onVisibilityChanged is abstract");},_getAvailableWidth:function(){var f=this.getTableColumnModel();var i=f.getTable();var e=i._getPaneScrollerArr();if(!e[0]||!e[0].getLayoutParent().getBounds()){return null;}var h=e[0].getLayoutParent().getBounds().width;var g=e[e.length-1];h-=g.getPaneInsetRight();return h;}}});})();(function(){var j="Function",h="Boolean",g="minWidth",f="width",e="__yg",d="qx.ui.table.columnmodel.Resize",c="qx.ui.table.columnmodel.resizebehavior.Default",b="__yh",a="maxWidth";qx.Class.define(c,{extend:qx.ui.table.columnmodel.resizebehavior.Abstract,construct:function(){qx.ui.table.columnmodel.resizebehavior.Abstract.call(this);this.__yf=[];this.__yg=new qx.ui.layout.HBox();this.__yg.connectToWidget(this);this.__yh=new qx.util.DeferredCall(this._computeColumnsFlexWidth,this);},properties:{newResizeBehaviorColumnData:{check:j,init:function(k){return new qx.ui.core.ColumnData();}},initializeWidthsOnEveryAppear:{check:h,init:false},tableColumnModel:{check:d}},members:{__yg:null,__yi:null,__yf:null,__yh:null,__yj:false,setWidth:function(m,n,o){if(m>=this.__yf.length){throw new Error("Column number out of range");}this.__yf[m].setColumnWidth(n,o);this.__yh.schedule();},setMinWidth:function(p,q){if(p>=this.__yf.length){throw new Error("Column number out of range");}this.__yf[p].setMinWidth(q);this.__yh.schedule();},setMaxWidth:function(r,s){if(r>=this.__yf.length){throw new Error("Column number out of range");}this.__yf[r].setMaxWidth(s);this.__yh.schedule();},set:function(t,u){for(var v in u){switch(v){case f:this.setWidth(t,u[v]);break;case g:this.setMinWidth(t,u[v]);break;case a:this.setMaxWidth(t,u[v]);break;default:throw new Error("Unknown property: "+v);}}},onAppear:function(event,w){if(w===true||!this.__yj||this.getInitializeWidthsOnEveryAppear()){this._computeColumnsFlexWidth();this.__yj=true;}},onTableWidthChanged:function(event){this._computeColumnsFlexWidth();},onVerticalScrollBarChanged:function(event){this._computeColumnsFlexWidth();},onColumnWidthChanged:function(event){this._extendNextColumn(event);},onVisibilityChanged:function(event){var x=event.getData();if(x.visible){this._computeColumnsFlexWidth();return;}this._extendLastColumn(event);},_setNumColumns:function(y){var z=this.__yf;if(y<=z.length){z.splice(y,z.length);return;}for(var i=z.length;i<y;i++){z[i]=this.getNewResizeBehaviorColumnData()();z[i].columnNumber=i;}},getLayoutChildren:function(){return this.__yi;},_computeColumnsFlexWidth:function(){this.__yh.cancel();var E=this._getAvailableWidth();if(E===null){return;}var A=this.getTableColumnModel();var C=A.getVisibleColumns();var D=C.length;var B=this.__yf;var i,l;if(D===0){return;}var G=[];for(i=0;i<D;i++){G.push(B[C[i]]);}this.__yi=G;this.__yk();this.__yg.renderLayout(E,100);for(i=0,l=G.length;i<l;i++){var F=G[i].getComputedWidth();A.setColumnWidth(C[i],F);}},__yk:function(){this.__yg.invalidateChildrenCache();var H=this.__yi;for(var i=0,l=H.length;i<l;i++){H[i].invalidateLayoutCache();}},_extendNextColumn:function(event){var M=this.getTableColumnModel();var P=event.getData();var K=M.getVisibleColumns();var J=this._getAvailableWidth();var I=K.length;if(P.newWidth>P.oldWidth){return ;}var i;var L;var O=0;for(i=0;i<I;i++){O+=M.getColumnWidth(K[i]);}if(O<J){for(i=0;i<K.length;i++){if(K[i]==P.col){L=K[i+1];break;}}if(L){var N=(J-(O-M.getColumnWidth(L)));M.setColumnWidth(L,N);}}},_extendLastColumn:function(event){var T=this.getTableColumnModel();var X=event.getData();if(X.visible){return;}var S=T.getVisibleColumns();if(S.length==0){return;}var R=this._getAvailableWidth(T);var Q=S.length;var i;var V;var W=0;for(i=0;i<Q;i++){W+=T.getColumnWidth(S[i]);}if(W<R){V=S[S.length-1];var U=(R-(W-T.getColumnWidth(V)));T.setColumnWidth(V,U);}},_getResizeColumnData:function(){return this.__yf;}},destruct:function(){this.__yf=this.__yi=null;this._disposeObjects(e,b);}});})();(function(){var p="Boolean",o="column-button",n="Function",m="qx.event.type.Data",k="statusbar",j="qx.ui.table.pane.CellEvent",h="function",g="PageUp",f="dataChanged",e='"',bF="changeLocale",bE="changeSelection",bD="qx.dynlocale",bC="__wd",bB="Enter",bA="metaDataChanged",bz="on",by="_applyStatusBarVisible",bx="columnVisibilityMenuCreateStart",bw="blur",w="qx.ui.table.Table",y="columnVisibilityMenuCreateEnd",u="changeVisible",v="_applyResetSelectionOnHeaderClick",s="_applyMetaColumnCounts",t="focus",q="changeDataRowRenderer",r="changeHeaderCellHeight",F="Escape",G="A",X="changeSelectionModel",T="Left",bg="__vS",bb="Down",bs="Integer",bm="_applyHeaderCellHeight",N="__wb",bv="visibilityChanged",bu="qx.ui.table.ITableModel",bt="orderChanged",L="_applySelectionModel",P="menu-button",R="menu",V="_applyAdditionalStatusBarText",Y="_applyFocusCellOnMouseMove",bc="table",bi="_applyColumnVisibilityButtonVisible",bo="changeTableModel",z="qx.event.type.Event",A="tableWidthChanged",O="_applyHeaderCellsVisible",bf="Object",be="_applyShowCellFocusIndicator",bd="resize",bk="verticalScrollBarChanged",bj="__wc",ba="changeScrollY",bh="_applyTableModel",a="End",bn="_applyKeepFirstVisibleRowComplete",B="widthChanged",C="one of one row",U="Home",b="_applyRowHeight",d="F2",K="appear",D="Up",E="%1 rows",I="qx.ui.table.selection.Model",W="one row",bq="PageDown",bp="%1 of %2 rows",Q="keypress",br="changeRowHeight",M="__vT",bl="Number",H="header",J="qx.ui.table.IRowRenderer",c="Right",S="Space";qx.Class.define(w,{extend:qx.ui.core.Widget,construct:function(bG,bH){qx.ui.core.Widget.call(this);if(!bH){bH={};}if(bH.initiallyHiddenColumns){this.setInitiallyHiddenColumns(bH.initiallyHiddenColumns);}if(bH.selectionManager){this.setNewSelectionManager(bH.selectionManager);}if(bH.selectionModel){this.setNewSelectionModel(bH.selectionModel);}if(bH.tableColumnModel){this.setNewTableColumnModel(bH.tableColumnModel);}if(bH.tablePane){this.setNewTablePane(bH.tablePane);}if(bH.tablePaneHeader){this.setNewTablePaneHeader(bH.tablePaneHeader);}if(bH.tablePaneScroller){this.setNewTablePaneScroller(bH.tablePaneScroller);}if(bH.tablePaneModel){this.setNewTablePaneModel(bH.tablePaneModel);}if(bH.columnMenu){this.setNewColumnMenu(bH.columnMenu);}this._setLayout(new qx.ui.layout.VBox());this.__vS=new qx.ui.container.Composite(new qx.ui.layout.HBox());this._add(this.__vS,{flex:1});this.setDataRowRenderer(new qx.ui.table.rowrenderer.Default(this));this.__vT=this.getNewSelectionManager()(this);this.setSelectionModel(this.getNewSelectionModel()(this));this.setTableModel(bG||this.getEmptyTableModel());this.setMetaColumnCounts([-1]);this.setTabIndex(1);this.addListener(Q,this._onKeyPress);this.addListener(t,this._onFocusChanged);this.addListener(bw,this._onFocusChanged);var bI=new qx.ui.core.Widget().set({height:0});this._add(bI);bI.addListener(bd,this._onResize,this);this.__vU=null;this.__vV=null;if(qx.core.Variant.isSet(bD,bz)){qx.locale.Manager.getInstance().addListener(bF,this._onChangeLocale,this);}this.initStatusBarVisible();bG=this.getTableModel();if(bG.init&&typeof (bG.init)==h){bG.init(this);}},events:{"columnVisibilityMenuCreateStart":m,"columnVisibilityMenuCreateEnd":m,"tableWidthChanged":z,"verticalScrollBarChanged":m,"cellClick":j,"cellDblclick":j,"cellContextmenu":j,"dataEdited":m},statics:{__vW:{cellClick:1,cellDblclick:1,cellContextmenu:1}},properties:{appearance:{refine:true,init:bc},focusable:{refine:true,init:true},minWidth:{refine:true,init:50},initiallyHiddenColumns:{init:null},selectable:{refine:true,init:false},selectionModel:{check:I,apply:L,event:X},tableModel:{check:bu,apply:bh,event:bo},rowHeight:{check:bl,init:20,apply:b,event:br},forceLineHeight:{check:p,init:true},headerCellsVisible:{check:p,init:true,apply:O},headerCellHeight:{check:bs,init:16,apply:bm,event:r,nullable:true},statusBarVisible:{check:p,init:true,apply:by},additionalStatusBarText:{nullable:true,init:null,apply:V},columnVisibilityButtonVisible:{check:p,init:true,apply:bi},metaColumnCounts:{check:bf,apply:s},focusCellOnMouseMove:{check:p,init:false,apply:Y},rowFocusChangeModifiesSelection:{check:p,init:true},showCellFocusIndicator:{check:p,init:true,apply:be},keepFirstVisibleRowComplete:{check:p,init:true,apply:bn},alwaysUpdateCells:{check:p,init:false},resetSelectionOnHeaderClick:{check:p,init:true,apply:v},dataRowRenderer:{check:J,init:null,nullable:true,event:q},modalCellEditorPreOpenFunction:{check:n,init:null,nullable:true},newColumnMenu:{check:n,init:function(){return new qx.ui.table.columnmenu.Button();}},newSelectionManager:{check:n,init:function(bJ){return new qx.ui.table.selection.Manager(bJ);}},newSelectionModel:{check:n,init:function(bK){return new qx.ui.table.selection.Model(bK);}},newTableColumnModel:{check:n,init:function(bL){return new qx.ui.table.columnmodel.Basic(bL);}},newTablePane:{check:n,init:function(bM){return new qx.ui.table.pane.Pane(bM);}},newTablePaneHeader:{check:n,init:function(bN){return new qx.ui.table.pane.Header(bN);}},newTablePaneScroller:{check:n,init:function(bO){return new qx.ui.table.pane.Scroller(bO);}},newTablePaneModel:{check:n,init:function(bP){return new qx.ui.table.pane.Model(bP);}}},members:{__vU:null,__vV:null,__vS:null,__vT:null,__vX:null,__vY:null,__wa:null,__wb:null,__wc:null,__wd:null,_createChildControlImpl:function(bQ,bR){var bS;switch(bQ){case k:bS=new qx.ui.basic.Label();bS.set({allowGrowX:true});this._add(bS);break;case o:bS=this.getNewColumnMenu()();bS.set({focusable:false});var bT=bS.factory(R,{table:this});bT.addListener(K,this._initColumnMenu,this);break;}return bS||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,bQ);},_applySelectionModel:function(bU,bV){this.__vT.setSelectionModel(bU);if(bV!=null){bV.removeListener(bE,this._onSelectionChanged,this);}bU.addListener(bE,this._onSelectionChanged,this);},_applyRowHeight:function(bW,bX){var bY=this._getPaneScrollerArr();for(var i=0;i<bY.length;i++){bY[i].updateVerScrollBarMaximum();}},_applyHeaderCellsVisible:function(ca,cb){var cc=this._getPaneScrollerArr();for(var i=0;i<cc.length;i++){cc[i]._excludeChildControl(H);}},_applyHeaderCellHeight:function(cd,ce){var cf=this._getPaneScrollerArr();for(var i=0;i<cf.length;i++){cf[i].getHeader().setHeight(cd);}},getEmptyTableModel:function(){if(!this.__wd){this.__wd=new qx.ui.table.model.Simple();this.__wd.setColumns([]);this.__wd.setData([]);}return this.__wd;},_applyTableModel:function(cg,ch){this.getTableColumnModel().init(cg.getColumnCount(),this);if(ch!=null){ch.removeListener(bA,this._onTableModelMetaDataChanged,this);ch.removeListener(f,this._onTableModelDataChanged,this);}cg.addListener(bA,this._onTableModelMetaDataChanged,this);cg.addListener(f,this._onTableModelDataChanged,this);this._updateStatusBar();this._updateTableData(0,cg.getRowCount(),0,cg.getColumnCount());this._onTableModelMetaDataChanged();if(ch&&cg.init&&typeof (cg.init)==h){cg.init(this);}},getTableColumnModel:function(){if(!this.__wc){var ck=this.__wc=this.getNewTableColumnModel()(this);ck.addListener(bv,this._onColVisibilityChanged,this);ck.addListener(B,this._onColWidthChanged,this);ck.addListener(bt,this._onColOrderChanged,this);var cj=this.getTableModel();ck.init(cj.getColumnCount(),this);var ci=this._getPaneScrollerArr();for(var i=0;i<ci.length;i++){var cl=ci[i];var cm=cl.getTablePaneModel();cm.setTableColumnModel(ck);}}return this.__wc;},_applyStatusBarVisible:function(cn,co){if(cn){this._showChildControl(k);}else{this._excludeChildControl(k);}if(cn){this._updateStatusBar();}},_applyAdditionalStatusBarText:function(cp,cq){this.__vX=cp;this._updateStatusBar();},_applyColumnVisibilityButtonVisible:function(cr,cs){if(cr){this._showChildControl(o);}else{this._excludeChildControl(o);}},_applyMetaColumnCounts:function(ct,cu){var cB=ct;var cv=this._getPaneScrollerArr();var cz={};if(ct>cu){var cD=qx.event.Registration.getManager(cv[0]);for(var cE in qx.ui.table.Table.__vW){cz[cE]={};cz[cE].capture=cD.getListeners(cv[0],cE,true);cz[cE].bubble=cD.getListeners(cv[0],cE,false);}}this._cleanUpMetaColumns(cB.length);var cA=0;for(var i=0;i<cv.length;i++){var cF=cv[i];var cC=cF.getTablePaneModel();cC.setFirstColumnX(cA);cC.setMaxColumnCount(cB[i]);cA+=cB[i];}if(cB.length>cv.length){var cy=this.getTableColumnModel();for(var i=cv.length;i<cB.length;i++){var cC=this.getNewTablePaneModel()(cy);cC.setFirstColumnX(cA);cC.setMaxColumnCount(cB[i]);cA+=cB[i];var cF=this.getNewTablePaneScroller()(this);cF.setTablePaneModel(cC);cF.addListener(ba,this._onScrollY,this);for(cE in qx.ui.table.Table.__vW){if(!cz[cE]){break;}if(cz[cE].capture&&cz[cE].capture.length>0){var cw=cz[cE].capture;for(var i=0;i<cw.length;i++){var cx=cw[i].context;if(!cx){cx=this;}else if(cx==cv[0]){cx=cF;}cF.addListener(cE,cw[i].handler,cx,true);}}if(cz[cE].bubble&&cz[cE].bubble.length>0){var cH=cz[cE].bubble;for(var i=0;i<cH.length;i++){var cx=cH[i].context;if(!cx){cx=this;}else if(cx==cv[0]){cx=cF;}cF.addListener(cE,cH[i].handler,cx,false);}}}var cG=(i==cB.length-1)?1:0;this.__vS.add(cF,{flex:cG});cv=this._getPaneScrollerArr();}}for(var i=0;i<cv.length;i++){var cF=cv[i];var cI=(i==(cv.length-1));cF.getHeader().setHeight(this.getHeaderCellHeight());cF.setTopRightWidget(cI?this.getChildControl(o):null);}if(!this.isColumnVisibilityButtonVisible()){this._excludeChildControl(o);}this._updateScrollerWidths();this._updateScrollBarVisibility();},_applyFocusCellOnMouseMove:function(cJ,cK){var cL=this._getPaneScrollerArr();for(var i=0;i<cL.length;i++){cL[i].setFocusCellOnMouseMove(cJ);}},_applyShowCellFocusIndicator:function(cM,cN){var cO=this._getPaneScrollerArr();for(var i=0;i<cO.length;i++){cO[i].setShowCellFocusIndicator(cM);}},_applyKeepFirstVisibleRowComplete:function(cP,cQ){var cR=this._getPaneScrollerArr();for(var i=0;i<cR.length;i++){cR[i].onKeepFirstVisibleRowCompleteChanged();}},_applyResetSelectionOnHeaderClick:function(cS,cT){var cU=this._getPaneScrollerArr();for(var i=0;i<cU.length;i++){cU[i].setResetSelectionOnHeaderClick(cS);}},getSelectionManager:function(){return this.__vT;},_getPaneScrollerArr:function(){return this.__vS.getChildren();},getPaneScroller:function(cV){return this._getPaneScrollerArr()[cV];},_cleanUpMetaColumns:function(cW){var cX=this._getPaneScrollerArr();if(cX!=null){for(var i=cX.length-1;i>=cW;i--){cX[i].destroy();}}},_onChangeLocale:function(cY){this.updateContent();this._updateStatusBar();},_onSelectionChanged:function(da){var db=this._getPaneScrollerArr();for(var i=0;i<db.length;i++){db[i].onSelectionChanged();}this._updateStatusBar();},_onTableModelMetaDataChanged:function(dc){var dd=this._getPaneScrollerArr();for(var i=0;i<dd.length;i++){dd[i].onTableModelMetaDataChanged();}this._updateStatusBar();},_onTableModelDataChanged:function(de){var df=de.getData();this._updateTableData(df.firstRow,df.lastRow,df.firstColumn,df.lastColumn,df.removeStart,df.removeCount);},_updateTableData:function(dg,dh,di,dj,dk,dl){var dm=this._getPaneScrollerArr();if(dl){this.getSelectionModel().removeSelectionInterval(dk,dk+dl);if(this.__vV>=dk&&this.__vV<(dk+dl)){this.setFocusedCell();}}for(var i=0;i<dm.length;i++){dm[i].onTableModelDataChanged(dg,dh,di,dj);}var dn=this.getTableModel().getRowCount();if(dn!=this.__vY){this.__vY=dn;this._updateScrollBarVisibility();this._updateStatusBar();}},_onScrollY:function(dp){if(!this.__wa){this.__wa=true;var dq=this._getPaneScrollerArr();for(var i=0;i<dq.length;i++){dq[i].setScrollY(dp.getData());}this.__wa=false;}},_onKeyPress:function(dr){if(!this.getEnabled()){return;}var dy=this.__vV;var dv=true;var dz=dr.getKeyIdentifier();if(this.isEditing()){if(dr.getModifiers()==0){switch(dz){case bB:this.stopEditing();var dy=this.__vV;this.moveFocusedCell(0,1);if(this.__vV!=dy){dv=this.startEditing();}break;case F:this.cancelEditing();this.focus();break;default:dv=false;break;}}}else{if(dr.isCtrlPressed()){dv=true;switch(dz){case G:var dw=this.getTableModel().getRowCount();if(dw>0){this.getSelectionModel().setSelectionInterval(0,dw-1);}break;default:dv=false;break;}}else{switch(dz){case S:this.__vT.handleSelectKeyDown(this.__vV,dr);break;case d:case bB:this.startEditing();dv=true;break;case U:this.setFocusedCell(this.__vU,0,true);break;case a:var dw=this.getTableModel().getRowCount();this.setFocusedCell(this.__vU,dw-1,true);break;case T:this.moveFocusedCell(-1,0);break;case c:this.moveFocusedCell(1,0);break;case D:this.moveFocusedCell(0,-1);break;case bb:this.moveFocusedCell(0,1);break;case g:case bq:var du=this.getPaneScroller(0);var dx=du.getTablePane();var dt=this.getRowHeight();var ds=(dz==g)?-1:1;dw=dx.getVisibleRowCount()-1;du.setScrollY(du.getScrollY()+ds*dw*dt);this.moveFocusedCell(0,ds*dw);break;default:dv=false;}}}if(dy!=this.__vV&&this.getRowFocusChangeModifiesSelection()){this.__vT.handleMoveKeyDown(this.__vV,dr);}if(dv){dr.preventDefault();dr.stopPropagation();}},_onFocusChanged:function(dA){var dB=this._getPaneScrollerArr();for(var i=0;i<dB.length;i++){dB[i].onFocusChanged();}},_onColVisibilityChanged:function(dC){var dD=this._getPaneScrollerArr();for(var i=0;i<dD.length;i++){dD[i].onColVisibilityChanged();}var dE=dC.getData();if(this.__wb!=null&&dE.col!=null&&dE.visible!=null){this.__wb[dE.col].setVisible(dE.visible);}this._updateScrollerWidths();this._updateScrollBarVisibility();},_onColWidthChanged:function(dF){var dG=this._getPaneScrollerArr();for(var i=0;i<dG.length;i++){var dH=dF.getData();dG[i].setColumnWidth(dH.col,dH.newWidth);}this._updateScrollerWidths();this._updateScrollBarVisibility();},_onColOrderChanged:function(dI){var dJ=this._getPaneScrollerArr();for(var i=0;i<dJ.length;i++){dJ[i].onColOrderChanged();}this._updateScrollerWidths();this._updateScrollBarVisibility();},getTablePaneScrollerAtPageX:function(dK){var dL=this._getMetaColumnAtPageX(dK);return (dL!=-1)?this.getPaneScroller(dL):null;},setFocusedCell:function(dM,dN,dO){if(!this.isEditing()&&(dM!=this.__vU||dN!=this.__vV)){if(dM===null){dM=0;}this.__vU=dM;this.__vV=dN;var dP=this._getPaneScrollerArr();for(var i=0;i<dP.length;i++){dP[i].setFocusedCell(dM,dN);}if(dM!==null&&dO){this.scrollCellVisible(dM,dN);}}},resetSelection:function(){this.getSelectionModel().resetSelection();},resetCellFocus:function(){this.setFocusedCell(null,null,false);},getFocusedColumn:function(){return this.__vU;},getFocusedRow:function(){return this.__vV;},highlightFocusedRow:function(dQ){this.getDataRowRenderer().setHighlightFocusRow(dQ);},clearFocusedRowHighlight:function(dR){if(dR){var dT=dR.getRelatedTarget();if(dT instanceof qx.ui.table.pane.Pane||dT instanceof qx.ui.table.pane.FocusIndicator){return;}}this.resetCellFocus();var dS=this._getPaneScrollerArr();for(var i=0;i<dS.length;i++){dS[i].onFocusChanged();}},moveFocusedCell:function(dU,dV){var ea=this.__vU;var eb=this.__vV;if(ea===null||eb===null){return;}if(dU!=0){var dY=this.getTableColumnModel();var x=dY.getVisibleX(ea);var dX=dY.getVisibleColumnCount();x=qx.lang.Number.limit(x+dU,0,dX-1);ea=dY.getVisibleColumnAtX(x);}if(dV!=0){var dW=this.getTableModel();eb=qx.lang.Number.limit(eb+dV,0,dW.getRowCount()-1);}this.setFocusedCell(ea,eb,true);},scrollCellVisible:function(ec,ed){var ee=this.getTableColumnModel();var x=ee.getVisibleX(ec);var ef=this._getMetaColumnAtColumnX(x);if(ef!=-1){this.getPaneScroller(ef).scrollCellVisible(ec,ed);}},isEditing:function(){if(this.__vU!=null){var x=this.getTableColumnModel().getVisibleX(this.__vU);var eg=this._getMetaColumnAtColumnX(x);return this.getPaneScroller(eg).isEditing();}return false;},startEditing:function(){if(this.__vU!=null){var x=this.getTableColumnModel().getVisibleX(this.__vU);var ei=this._getMetaColumnAtColumnX(x);var eh=this.getPaneScroller(ei).startEditing();return eh;}return false;},stopEditing:function(){if(this.__vU!=null){var x=this.getTableColumnModel().getVisibleX(this.__vU);var ej=this._getMetaColumnAtColumnX(x);this.getPaneScroller(ej).stopEditing();}},cancelEditing:function(){if(this.__vU!=null){var x=this.getTableColumnModel().getVisibleX(this.__vU);var ek=this._getMetaColumnAtColumnX(x);this.getPaneScroller(ek).cancelEditing();}},updateContent:function(){var el=this._getPaneScrollerArr();for(var i=0;i<el.length;i++){el[i].getTablePane().updateContent(true);}},blockHeaderElements:function(){var em=this._getPaneScrollerArr();for(var i=0;i<em.length;i++){em[i].getHeader().getBlocker().blockContent(20);}this.getChildControl(o).getBlocker().blockContent(20);},unblockHeaderElements:function(){var en=this._getPaneScrollerArr();for(var i=0;i<en.length;i++){en[i].getHeader().getBlocker().unblockContent();}this.getChildControl(o).getBlocker().unblockContent();},_getMetaColumnAtPageX:function(eo){var ep=this._getPaneScrollerArr();for(var i=0;i<ep.length;i++){var eq=ep[i].getContainerLocation();if(eo>=eq.left&&eo<=eq.right){return i;}}return -1;},_getMetaColumnAtColumnX:function(er){var et=this.getMetaColumnCounts();var eu=0;for(var i=0;i<et.length;i++){var es=et[i];eu+=es;if(es==-1||er<eu){return i;}}return -1;},_updateStatusBar:function(){var ev=this.getTableModel();if(this.getStatusBarVisible()){var ew=this.getSelectionModel().getSelectedCount();var ey=ev.getRowCount();var ex;if(ey>=0){if(ew==0){ex=this.trn(W,E,ey,ey);}else{ex=this.trn(C,bp,ey,ew,ey);}}if(this.__vX){if(ex){ex+=this.__vX;}else{ex=this.__vX;}}if(ex){this.getChildControl(k).setValue(ex);}}},_updateScrollerWidths:function(){var ez=this._getPaneScrollerArr();for(var i=0;i<ez.length;i++){var eB=(i==(ez.length-1));var eC=ez[i].getTablePaneModel().getTotalWidth();ez[i].setPaneWidth(eC);var eA=eB?1:0;ez[i].setLayoutProperties({flex:eA});}},_updateScrollBarVisibility:function(){if(!this.getBounds()){return;}var eG=qx.ui.table.pane.Scroller.HORIZONTAL_SCROLLBAR;var eJ=qx.ui.table.pane.Scroller.VERTICAL_SCROLLBAR;var eD=this._getPaneScrollerArr();var eF=false;var eI=false;for(var i=0;i<eD.length;i++){var eK=(i==(eD.length-1));var eE=eD[i].getNeededScrollBars(eF,!eK);if(eE&eG){eF=true;}if(eK&&(eE&eJ)){eI=true;}}for(var i=0;i<eD.length;i++){var eK=(i==(eD.length-1));var eH;eD[i].setHorizontalScrollBarVisible(eF);if(eK){eH=eD[i].getVerticalScrollBarVisible();}eD[i].setVerticalScrollBarVisible(eK&&eI);if(eK&&eI!=eH){this.fireDataEvent(bk,eI);}}},_initColumnMenu:function(){var eN=this.getTableModel();var eO=this.getTableColumnModel();var eP=this.getChildControl(o);eP.empty();var eM=eP.getMenu();var eQ={table:this,menu:eM,columnButton:eP};this.fireDataEvent(bx,eQ);this.__wb={};for(var eR=0,l=eN.getColumnCount();eR<l;eR++){var eL=eP.factory(P,{text:eN.getColumnName(eR),column:eR,bVisible:eO.isColumnVisible(eR)});qx.core.Assert.assertInterface(eL,qx.ui.table.IColumnMenuItem);eL.addListener(u,this._createColumnVisibilityCheckBoxHandler(eR),this);this.__wb[eR]=eL;}eQ={table:this,menu:eM,columnButton:eP};this.fireDataEvent(y,eQ);},_createColumnVisibilityCheckBoxHandler:function(eS){return function(eT){var eU=this.getTableColumnModel();eU.setColumnVisible(eS,eT.getData());};},setColumnWidth:function(eV,eW){this.getTableColumnModel().setColumnWidth(eV,eW);},_onResize:function(){this.fireEvent(A);this._updateScrollerWidths();this._updateScrollBarVisibility();},addListener:function(eX,eY,self,fa){if(this.self(arguments).__vW[eX]){var fc=[eX];for(var i=0,fb=this._getPaneScrollerArr();i<fb.length;i++){fc.push(fb[i].addListener.apply(fb[i],arguments));}return fc.join(e);}else{return qx.ui.core.Widget.prototype.addListener.call(this,eX,eY,self,fa);}},removeListener:function(fd,fe,self,ff){if(this.self(arguments).__vW[fd]){for(var i=0,fg=this._getPaneScrollerArr();i<fg.length;i++){fg[i].removeListener.apply(fg[i],arguments);}}else{qx.ui.core.Widget.prototype.removeListener.call(this,fd,fe,self,ff);}},removeListenerById:function(fh){var fl=fh.split(e);var fk=fl.shift();if(this.self(arguments).__vW[fk]){var fj=true;for(var i=0,fi=this._getPaneScrollerArr();i<fi.length;i++){fj=fi[i].removeListenerById.call(fi[i],fl[i])&&fj;}return fj;}else{return qx.ui.core.Widget.prototype.removeListenerById.call(this,fh);}},destroy:function(){this.getChildControl(o).getMenu().destroy();qx.ui.core.Widget.prototype.destroy.call(this);}},destruct:function(){if(qx.core.Variant.isSet(bD,bz)){qx.locale.Manager.getInstance().removeListener(bF,this._onChangeLocale,this);}var fn=this.getSelectionModel();if(fn){fn.dispose();}var fm=this.getDataRowRenderer();if(fm){fm.dispose();}this._cleanUpMetaColumns(0);this.getTableColumnModel().dispose();this._disposeObjects(M,bg,bC,bC,bj);this._disposeMap(N);}});})();(function(){var a="qx.ui.table.IRowRenderer";qx.Interface.define(a,{members:{updateDataRowElement:function(b,c){},getRowHeightStyle:function(d){},createRowStyle:function(e){},getRowClass:function(f){}}});})();(function(){var t="",s="table-row-background-even",r="table-row-background-selected",q="table-row",p="background-color:",o="table-row-background-focused",n=';border-bottom: 1px solid ',m=';color:',l="table-row-selected",k="table-row-background-odd",d="default",j="table-row-background-focused-selected",g="qx.ui.table.rowrenderer.Default",c="table-row-line",b="'",f="height:",e=";",h="px;",a="1px solid ",i="Boolean";qx.Class.define(g,{extend:qx.core.Object,implement:qx.ui.table.IRowRenderer,construct:function(){qx.core.Object.call(this);this.__wi=t;this.__wi={};this.__wj={};this._renderFont(qx.theme.manager.Font.getInstance().resolve(d));var u=qx.theme.manager.Color.getInstance();this.__wj.bgcolFocusedSelected=u.resolve(j);this.__wj.bgcolFocused=u.resolve(o);this.__wj.bgcolSelected=u.resolve(r);this.__wj.bgcolEven=u.resolve(s);this.__wj.bgcolOdd=u.resolve(k);this.__wj.colSelected=u.resolve(l);this.__wj.colNormal=u.resolve(q);this.__wj.horLine=u.resolve(c);},properties:{highlightFocusRow:{check:i,init:true}},members:{__wj:null,__wk:null,__wi:null,_insetY:1,_renderFont:function(v){if(v){this.__wk=v.getStyles();this.__wi=qx.bom.element.Style.compile(this.__wk);this.__wi=this.__wi.replace(/"/g,b);}else{this.__wi=t;this.__wk=qx.bom.Font.getDefaultStyles();}},updateDataRowElement:function(w,x){var z=this.__wk;var y=x.style;qx.bom.element.Style.setStyles(x,z);if(w.focusedRow&&this.getHighlightFocusRow()){y.backgroundColor=w.selected?this.__wj.bgcolFocusedSelected:this.__wj.bgcolFocused;}else{if(w.selected){y.backgroundColor=this.__wj.bgcolSelected;}else{y.backgroundColor=(w.row%2==0)?this.__wj.bgcolEven:this.__wj.bgcolOdd;}}y.color=w.selected?this.__wj.colSelected:this.__wj.colNormal;y.borderBottom=a+this.__wj.horLine;},getRowHeightStyle:function(A){if(qx.bom.client.Feature.CONTENT_BOX){A-=this._insetY;}return f+A+h;},createRowStyle:function(B){var C=[];C.push(e);C.push(this.__wi);C.push(p);if(B.focusedRow&&this.getHighlightFocusRow()){C.push(B.selected?this.__wj.bgcolFocusedSelected:this.__wj.bgcolFocused);}else{if(B.selected){C.push(this.__wj.bgcolSelected);}else{C.push((B.row%2==0)?this.__wj.bgcolEven:this.__wj.bgcolOdd);}}C.push(m);C.push(B.selected?this.__wj.colSelected:this.__wj.colNormal);C.push(n,this.__wj.horLine);return C.join(t);},getRowClass:function(D){return t;},getRowAttributes:function(E){return t;}},destruct:function(){this.__wj=this.__wk=this.__wi=null;}});})();(function(){var a="qx.ui.table.IColumnMenuButton";qx.Interface.define(a,{properties:{menu:{}},members:{factory:function(b,c){return true;},empty:function(){return true;}}});})();(function(){var l="pressed",k="hovered",j="changeVisibility",i="qx.ui.menu.Menu",h="submenu",g="Enter",f="contextmenu",d="changeMenu",c="qx.ui.form.MenuButton",b="abandoned",a="_applyMenu";qx.Class.define(c,{extend:qx.ui.form.Button,construct:function(m,n,o){qx.ui.form.Button.call(this,m,n);if(o!=null){this.setMenu(o);}},properties:{menu:{check:i,nullable:true,apply:a,event:d}},members:{_applyMenu:function(p,q){if(q){q.removeListener(j,this._onMenuChange,this);q.resetOpener();}if(p){p.addListener(j,this._onMenuChange,this);p.setOpener(this);p.removeState(h);p.removeState(f);}},open:function(r){var s=this.getMenu();if(s){qx.ui.menu.Manager.getInstance().hideAll();s.setOpener(this);s.open();if(r){var t=s.getSelectables()[0];if(t){s.setSelectedButton(t);}}}},_onMenuChange:function(e){var u=this.getMenu();if(u.isVisible()){this.addState(l);}else{this.removeState(l);}},_onMouseDown:function(e){qx.ui.form.Button.prototype._onMouseDown.call(this,e);var v=this.getMenu();if(v){if(!v.isVisible()){this.open();}else{v.exclude();}e.stopPropagation();}},_onMouseUp:function(e){qx.ui.form.Button.prototype._onMouseUp.call(this,e);e.stopPropagation();},_onMouseOver:function(e){this.addState(k);},_onMouseOut:function(e){this.removeState(k);},_onKeyDown:function(e){switch(e.getKeyIdentifier()){case g:this.removeState(b);this.addState(l);var w=this.getMenu();if(w){if(!w.isVisible()){this.open();}else{w.exclude();}}e.stopPropagation();}},_onKeyUp:function(e){}},destruct:function(){if(this.getMenu()){if(!qx.core.ObjectRegistry.inShutDown){this.getMenu().destroy();}}}});})();(function(){var f="menu-button",e="table-column-reset-button",d="separator",c="user-button",b="qx.ui.table.columnmenu.Button",a="menu";qx.Class.define(b,{extend:qx.ui.form.MenuButton,implement:qx.ui.table.IColumnMenuButton,construct:function(){qx.ui.form.MenuButton.call(this);this.__wl=new qx.ui.core.Blocker(this);},members:{__wm:null,__wl:null,factory:function(g,h){switch(g){case a:var j=new qx.ui.menu.Menu();this.setMenu(j);return j;case f:var m=new qx.ui.table.columnmenu.MenuItem(h.text);m.setVisible(h.bVisible);this.getMenu().add(m);return m;case c:var k=new qx.ui.menu.Button(h.text);k.set({appearance:e});return k;case d:return new qx.ui.menu.Separator();default:throw new Error("Unrecognized factory request: "+g);}},getBlocker:function(){return this.__wl;},empty:function(){var n=this.getMenu();var o=n.getChildren();for(var i=0,l=o.length;i<l;i++){o[0].destroy();}}},destruct:function(){this.__wl.dispose();}});})();(function(){var t="keypress",s="interval",r="keydown",q="mousedown",p="keyup",o="__on",n="blur",m="Enter",l="__oo",k="Up",c="Escape",j="qx.ui.menu.Manager",g="Left",b="__om",a="Down",f="Right",d="singleton",h="Space";qx.Class.define(j,{type:d,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__om=[];var u=document.body;var v=qx.event.Registration;v.addListener(window.document.documentElement,q,this._onMouseDown,this,true);v.addListener(u,r,this._onKeyUpDown,this,true);v.addListener(u,p,this._onKeyUpDown,this,true);v.addListener(u,t,this._onKeyPress,this,true);if(!qx.bom.client.Feature.TOUCH){qx.bom.Element.addListener(window,n,this.hideAll,this);}this.__on=new qx.event.Timer;this.__on.addListener(s,this._onOpenInterval,this);this.__oo=new qx.event.Timer;this.__oo.addListener(s,this._onCloseInterval,this);},members:{__op:null,__oq:null,__on:null,__oo:null,__om:null,_getChild:function(w,x,y,z){var A=w.getChildren();var length=A.length;var B;for(var i=x;i<length&&i>=0;i+=y){B=A[i];if(B.isEnabled()&&!B.isAnonymous()){return B;}}if(z){i=i==length?0:length-1;for(;i!=x;i+=y){B=A[i];if(B.isEnabled()&&!B.isAnonymous()){return B;}}}return null;},_isInMenu:function(C){while(C){if(C instanceof qx.ui.menu.Menu){return true;}C=C.getLayoutParent();}return false;},_getMenuButton:function(D){while(D){if(D instanceof qx.ui.menu.AbstractButton){return D;}D=D.getLayoutParent();}return null;},add:function(E){{};var F=this.__om;F.push(E);E.setZIndex(1e6+F.length);},remove:function(G){{};var H=this.__om;if(H){qx.lang.Array.remove(H,G);}},hideAll:function(){var I=this.__om;if(I){for(var i=I.length-1;i>=0;i--){I[i].exclude();}}},getActiveMenu:function(){var J=this.__om;return J.length>0?J[J.length-1]:null;},scheduleOpen:function(K){this.cancelClose(K);if(K.isVisible()){if(this.__op){this.cancelOpen(this.__op);}}else if(this.__op!=K){this.__op=K;this.__on.restartWith(K.getOpenInterval());}},scheduleClose:function(L){this.cancelOpen(L);if(!L.isVisible()){if(this.__oq){this.cancelClose(this.__oq);}}else if(this.__oq!=L){this.__oq=L;this.__oo.restartWith(L.getCloseInterval());}},cancelOpen:function(M){if(this.__op==M){this.__on.stop();this.__op=null;}},cancelClose:function(N){if(this.__oq==N){this.__oo.stop();this.__oq=null;}},_onOpenInterval:function(e){this.__on.stop();this.__op.open();this.__op=null;},_onCloseInterval:function(e){this.__oo.stop();this.__oq.exclude();this.__oq=null;},_onMouseDown:function(e){var O=e.getTarget();O=qx.ui.core.Widget.getWidgetByElement(O,true);if(O==null){this.hideAll();return;}if(O.getMenu&&O.getMenu()&&O.getMenu().isVisible()){return;}if(this.__om.length>0&&!this._isInMenu(O)){this.hideAll();}},__or:{"Enter":1,"Space":1},__os:{"Escape":1,"Up":1,"Down":1,"Left":1,"Right":1},_onKeyUpDown:function(e){var P=this.getActiveMenu();if(!P){return;}var Q=e.getKeyIdentifier();if(this.__os[Q]||(this.__or[Q]&&P.getSelectedButton())){e.stopPropagation();}},_onKeyPress:function(e){var R=this.getActiveMenu();if(!R){return;}var S=e.getKeyIdentifier();var U=this.__os[S];var T=this.__or[S];if(U){switch(S){case k:this._onKeyPressUp(R);break;case a:this._onKeyPressDown(R);break;case g:this._onKeyPressLeft(R);break;case f:this._onKeyPressRight(R);break;case c:this.hideAll();break;}e.stopPropagation();e.preventDefault();}else if(T){var V=R.getSelectedButton();if(V){switch(S){case m:this._onKeyPressEnter(R,V,e);break;case h:this._onKeyPressSpace(R,V,e);break;}e.stopPropagation();e.preventDefault();}}},_onKeyPressUp:function(W){var X=W.getSelectedButton();var Y=W.getChildren();var bb=X?W.indexOf(X)-1:Y.length-1;var ba=this._getChild(W,bb,-1,true);if(ba){W.setSelectedButton(ba);}else{W.resetSelectedButton();}},_onKeyPressDown:function(bc){var bd=bc.getSelectedButton();var bf=bd?bc.indexOf(bd)+1:0;var be=this._getChild(bc,bf,1,true);if(be){bc.setSelectedButton(be);}else{bc.resetSelectedButton();}},_onKeyPressLeft:function(bg){var bl=bg.getOpener();if(!bl){return;}if(bl instanceof qx.ui.menu.AbstractButton){var bi=bl.getLayoutParent();bi.resetOpenedButton();bi.setSelectedButton(bl);}else if(bl instanceof qx.ui.menubar.Button){var bk=bl.getMenuBar().getMenuButtons();var bh=bk.indexOf(bl);if(bh===-1){return;}var bm=null;var length=bk.length;for(var i=1;i<=length;i++){var bj=bk[(bh-i+length)%length];if(bj.isEnabled()){bm=bj;break;}}if(bm&&bm!=bl){bm.open(true);}}},_onKeyPressRight:function(bn){var bp=bn.getSelectedButton();if(bp){var bo=bp.getMenu();if(bo){bn.setOpenedButton(bp);var bv=this._getChild(bo,0,1);if(bv){bo.setSelectedButton(bv);}return;}}else if(!bn.getOpenedButton()){var bv=this._getChild(bn,0,1);if(bv){bn.setSelectedButton(bv);if(bv.getMenu()){bn.setOpenedButton(bv);}return;}}var bt=bn.getOpener();if(bt instanceof qx.ui.menu.Button&&bp){while(bt){bt=bt.getLayoutParent();if(bt instanceof qx.ui.menu.Menu){bt=bt.getOpener();if(bt instanceof qx.ui.menubar.Button){break;}}else{break;}}if(!bt){return;}}if(bt instanceof qx.ui.menubar.Button){var bs=bt.getMenuBar().getMenuButtons();var bq=bs.indexOf(bt);if(bq===-1){return;}var bu=null;var length=bs.length;for(var i=1;i<=length;i++){var br=bs[(bq+i)%length];if(br.isEnabled()){bu=br;break;}}if(bu&&bu!=bt){bu.open(true);}}},_onKeyPressEnter:function(bw,bx,e){if(bx.hasListener(t)){var by=e.clone();by.setBubbles(false);by.setTarget(bx);bx.dispatchEvent(by);}this.hideAll();},_onKeyPressSpace:function(bz,bA,e){if(bA.hasListener(t)){var bB=e.clone();bB.setBubbles(false);bB.setTarget(bA);bA.dispatchEvent(bB);}}},destruct:function(){var bD=qx.event.Registration;var bC=document.body;bD.removeListener(window.document.documentElement,q,this._onMouseDown,this,true);bD.removeListener(bC,r,this._onKeyUpDown,this,true);bD.removeListener(bC,p,this._onKeyUpDown,this,true);bD.removeListener(bC,t,this._onKeyPress,this,true);this._disposeObjects(o,l);this._disposeArray(b);}});})();(function(){var l="indexOf",k="addAfter",j="add",i="addBefore",h="_",g="addAt",f="hasChildren",e="removeAt",d="removeAll",c="getChildren",a="remove",b="qx.ui.core.MRemoteChildrenHandling";qx.Mixin.define(b,{members:{__ex:function(m,n,o,p){var q=this.getChildrenContainer();if(q===this){m=h+m;}return (q[m])(n,o,p);},getChildren:function(){return this.__ex(c);},hasChildren:function(){return this.__ex(f);},add:function(r,s){return this.__ex(j,r,s);},remove:function(t){return this.__ex(a,t);},removeAll:function(){return this.__ex(d);},indexOf:function(u){return this.__ex(l,u);},addAt:function(v,w,x){this.__ex(g,v,w,x);},addBefore:function(y,z,A){this.__ex(i,y,z,A);},addAfter:function(B,C,D){this.__ex(k,B,C,D);},removeAt:function(E){this.__ex(e,E);}}});})();(function(){var l="slidebar",k="Integer",j="resize",h="qx.ui.core.Widget",g="selected",f="visible",d="Boolean",c="mouseout",b="excluded",a="menu",A="_applySelectedButton",z="_applyOpenInterval",y="_applySpacingY",x="_blocker",w="_applyCloseInterval",v="_applyBlockerColor",u="_applyIconColumnWidth",t="mouseover",s="qx.ui.menu.Menu",r="Color",p="Number",q="_applyOpenedButton",n="_applySpacingX",o="_applyBlockerOpacity",m="_applyArrowColumnWidth";qx.Class.define(s,{extend:qx.ui.core.Widget,include:[qx.ui.core.MPlacement,qx.ui.core.MRemoteChildrenHandling],construct:function(){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.menu.Layout);var B=this.getApplicationRoot();B.add(this);this.addListener(t,this._onMouseOver);this.addListener(c,this._onMouseOut);this.addListener(j,this._onResize,this);B.addListener(j,this._onResize,this);this._blocker=new qx.ui.core.Blocker(B);this.initVisibility();this.initKeepFocus();this.initKeepActive();},properties:{appearance:{refine:true,init:a},allowGrowX:{refine:true,init:false},allowGrowY:{refine:true,init:false},visibility:{refine:true,init:b},keepFocus:{refine:true,init:true},keepActive:{refine:true,init:true},spacingX:{check:k,apply:n,init:0,themeable:true},spacingY:{check:k,apply:y,init:0,themeable:true},iconColumnWidth:{check:k,init:0,themeable:true,apply:u},arrowColumnWidth:{check:k,init:0,themeable:true,apply:m},blockerColor:{check:r,init:null,nullable:true,apply:v,themeable:true},blockerOpacity:{check:p,init:1,apply:o,themeable:true},selectedButton:{check:h,nullable:true,apply:A},openedButton:{check:h,nullable:true,apply:q},opener:{check:h,nullable:true},openInterval:{check:k,themeable:true,init:250,apply:z},closeInterval:{check:k,themeable:true,init:250,apply:w},blockBackground:{check:d,themeable:true,init:false}},members:{__qv:null,__qw:null,_blocker:null,open:function(){if(this.getOpener()!=null){this.placeToWidget(this.getOpener());this.__qy();this.show();this._placementTarget=this.getOpener();}else{this.warn("The menu instance needs a configured 'opener' widget!");}},openAtMouse:function(e){this.placeToMouse(e);this.__qy();this.show();this._placementTarget={left:e.getDocumentLeft(),top:e.getDocumentTop()};},openAtPoint:function(C){this.placeToPoint(C);this.__qy();this.show();this._placementTarget=C;},addSeparator:function(){this.add(new qx.ui.menu.Separator);},getColumnSizes:function(){return this._getMenuLayout().getColumnSizes();},getSelectables:function(){var D=[];var E=this.getChildren();for(var i=0;i<E.length;i++){if(E[i].isEnabled()){D.push(E[i]);}}return D;},_applyIconColumnWidth:function(F,G){this._getMenuLayout().setIconColumnWidth(F);},_applyArrowColumnWidth:function(H,I){this._getMenuLayout().setArrowColumnWidth(H);},_applySpacingX:function(J,K){this._getMenuLayout().setColumnSpacing(J);},_applySpacingY:function(L,M){this._getMenuLayout().setSpacing(L);},_applyVisibility:function(N,O){qx.ui.core.Widget.prototype._applyVisibility.call(this,N,O);var P=qx.ui.menu.Manager.getInstance();if(N===f){P.add(this);var Q=this.getParentMenu();if(Q){Q.setOpenedButton(this.getOpener());}}else if(O===f){P.remove(this);var Q=this.getParentMenu();if(Q&&Q.getOpenedButton()==this.getOpener()){Q.resetOpenedButton();}this.resetOpenedButton();this.resetSelectedButton();}this.__qx();},__qx:function(){if(this.isVisible()){if(this.getBlockBackground()){var R=this.getZIndex();this._blocker.blockContent(R-1);}}else{if(this._blocker.isContentBlocked()){this._blocker.unblockContent();}}},getParentMenu:function(){var S=this.getOpener();if(!S||!(S instanceof qx.ui.menu.AbstractButton)){return null;}while(S&&!(S instanceof qx.ui.menu.Menu)){S=S.getLayoutParent();}return S;},_applySelectedButton:function(T,U){if(U){U.removeState(g);}if(T){T.addState(g);}},_applyOpenedButton:function(V,W){if(W){W.getMenu().exclude();}if(V){V.getMenu().open();}},_applyBlockerColor:function(X,Y){this._blocker.setColor(X);},_applyBlockerOpacity:function(ba,bb){this._blocker.setOpacity(ba);},getChildrenContainer:function(){return this.getChildControl(l,true)||this;},_createChildControlImpl:function(bc,bd){var be;switch(bc){case l:var be=new qx.ui.menu.MenuSlideBar();var bg=this._getLayout();this._setLayout(new qx.ui.layout.Grow());var bf=be.getLayout();be.setLayout(bg);bf.dispose();var bh=qx.lang.Array.clone(this.getChildren());for(var i=0;i<bh.length;i++){be.add(bh[i]);}this.removeListener(j,this._onResize,this);be.getChildrenContainer().addListener(j,this._onResize,this);this._add(be);break;}return be||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,bc);},_getMenuLayout:function(){if(this.hasChildControl(l)){return this.getChildControl(l).getChildrenContainer().getLayout();}else{return this._getLayout();}},_getMenuBounds:function(){if(this.hasChildControl(l)){return this.getChildControl(l).getChildrenContainer().getBounds();}else{return this.getBounds();}},_computePlacementSize:function(){return this._getMenuBounds();},__qy:function(){var bj=this._getMenuBounds();if(!bj){this.addListenerOnce(j,this.__qy,this);return;}var bi=this.getLayoutParent().getBounds().height;var top=this.getLayoutProperties().top;var bk=this.getLayoutProperties().left;if(top<0){this._assertSlideBar(function(){this.setHeight(bj.height+top);this.moveTo(bk,0);});}else if(top+bj.height>bi){this._assertSlideBar(function(){this.setHeight(bi-top);});}else{this.setHeight(null);}},_assertSlideBar:function(bl){if(this.hasChildControl(l)){return bl.call(this);}this.__qw=bl;qx.ui.core.queue.Widget.add(this);},syncWidget:function(){this.getChildControl(l);if(this.__qw){this.__qw.call(this);delete this.__qw;}},_onResize:function(){if(this.isVisible()){var bm=this._placementTarget;if(!bm){return;}else if(bm instanceof qx.ui.core.Widget){this.placeToWidget(bm);}else if(bm.top!==undefined){this.placeToPoint(bm);}else{throw new Error("Unknown target: "+bm);}this.__qy();}},_onMouseOver:function(e){var bo=qx.ui.menu.Manager.getInstance();bo.cancelClose(this);var bp=e.getTarget();if(bp.isEnabled()&&bp instanceof qx.ui.menu.AbstractButton){this.setSelectedButton(bp);var bn=bp.getMenu&&bp.getMenu();if(bn){bn.setOpener(bp);bo.scheduleOpen(bn);this.__qv=bn;}else{var bq=this.getOpenedButton();if(bq){bo.scheduleClose(bq.getMenu());}if(this.__qv){bo.cancelOpen(this.__qv);this.__qv=null;}}}else if(!this.getOpenedButton()){this.resetSelectedButton();}},_onMouseOut:function(e){var br=qx.ui.menu.Manager.getInstance();if(!qx.ui.core.Widget.contains(this,e.getRelatedTarget())){var bs=this.getOpenedButton();bs?this.setSelectedButton(bs):this.resetSelectedButton();if(bs){br.cancelClose(bs.getMenu());}if(this.__qv){br.cancelOpen(this.__qv);}}}},destruct:function(){if(!qx.core.ObjectRegistry.inShutDown){qx.ui.menu.Manager.getInstance().remove(this);}this.getApplicationRoot().removeListener(j,this._onResize,this);this._placementTarget=null;this._disposeObjects(x);}});})();(function(){var c="Integer",b="_applyLayoutChange",a="qx.ui.menu.Layout";qx.Class.define(a,{extend:qx.ui.layout.VBox,properties:{columnSpacing:{check:c,init:0,apply:b},spanColumn:{check:c,init:1,nullable:true,apply:b},iconColumnWidth:{check:c,init:0,themeable:true,apply:b},arrowColumnWidth:{check:c,init:0,themeable:true,apply:b}},members:{__qm:null,_computeSizeHint:function(){var q=this._getLayoutChildren();var o,g,j;var e=this.getSpanColumn();var h=this.__qm=[0,0,0,0];var m=this.getColumnSpacing();var k=0;var f=0;for(var i=0,l=q.length;i<l;i++){o=q[i];if(o.isAnonymous()){continue;}g=o.getChildrenSizes();for(var n=0;n<g.length;n++){if(e!=null&&n==e&&g[e+1]==0){k=Math.max(k,g[n]);}else{h[n]=Math.max(h[n],g[n]);}}var d=q[i].getInsets();f=Math.max(f,d.left+d.right);}if(e!=null&&h[e]+m+h[e+1]<k){h[e]=k-h[e+1]-m;}if(k==0){j=m*2;}else{j=m*3;}if(h[0]==0){h[0]=this.getIconColumnWidth();}if(h[3]==0){h[3]=this.getArrowColumnWidth();}var p=qx.ui.layout.VBox.prototype._computeSizeHint.call(this).height;return {minHeight:p,height:p,width:qx.lang.Array.sum(h)+f+j};},getColumnSizes:function(){return this.__qm||null;}},destruct:function(){this.__qm=null;}});})();(function(){var l="zIndex",k="px",j="keydown",h="deactivate",g="resize",f="keyup",d="keypress",c="backgroundColor",b="_applyOpacity",a="Boolean",x="__sg",w="__se",v="opacity",u="interval",t="Tab",s="Color",r="qx.ui.root.Page",q="Number",p="qx.ui.core.Blocker",o="__sc",m="qx.ui.root.Application",n="_applyColor";qx.Class.define(p,{extend:qx.core.Object,construct:function(y){qx.core.Object.call(this);this._widget=y;this._isPageRoot=(qx.Class.isDefined(r)&&y instanceof qx.ui.root.Page);if(this._isPageRoot){y.addListener(g,this.__sh,this);}if(qx.Class.isDefined(m)&&y instanceof qx.ui.root.Application){this.setKeepBlockerActive(true);}this.__rY=[];this.__sa=[];this.__sb=[];},properties:{color:{check:s,init:null,nullable:true,apply:n,themeable:true},opacity:{check:q,init:1,apply:b,themeable:true},keepBlockerActive:{check:a,init:false}},members:{__sc:null,__sd:0,__se:null,__sb:null,__rY:null,__sa:null,__sf:null,__sg:null,_isPageRoot:false,_widget:null,__sh:function(e){var z=e.getData();if(this.isContentBlocked()){this.getContentBlockerElement().setStyles({width:z.width,height:z.height});}if(this.isBlocked()){this.getBlockerElement().setStyles({width:z.width,height:z.height});}},_applyColor:function(A,B){var C=qx.theme.manager.Color.getInstance().resolve(A);this.__si(c,C);},_applyOpacity:function(D,E){this.__si(v,D);},__si:function(F,G){var H=[];this.__sc&&H.push(this.__sc);this.__se&&H.push(this.__se);for(var i=0;i<H.length;i++){H[i].setStyle(F,G);}},_backupActiveWidget:function(){var I=qx.event.Registration.getManager(window).getHandler(qx.event.handler.Focus);this.__rY.push(I.getActive());this.__sa.push(I.getFocus());if(this._widget.isFocusable()){this._widget.focus();}},_restoreActiveWidget:function(){var L=this.__rY.length;if(L>0){var K=this.__rY[L-1];if(K){qx.bom.Element.activate(K);}this.__rY.pop();}var J=this.__sa.length;if(J>0){var K=this.__sa[J-1];if(K){qx.bom.Element.focus(this.__sa[J-1]);}this.__sa.pop();}},__sj:function(){return new qx.html.Blocker(this.getColor(),this.getOpacity());},getBlockerElement:function(){if(!this.__sc){this.__sc=this.__sj();this.__sc.setStyle(l,15);this._widget.getContainerElement().add(this.__sc);this.__sc.exclude();}return this.__sc;},block:function(){this.__sd++;if(this.__sd<2){this._backupActiveWidget();var M=this.getBlockerElement();M.include();M.activate();M.addListener(h,this.__so,this);M.addListener(d,this.__sn,this);M.addListener(j,this.__sn,this);M.addListener(f,this.__sn,this);}},isBlocked:function(){return this.__sd>0;},unblock:function(){if(!this.isBlocked()){return;}this.__sd--;if(this.__sd<1){this.__sk();this.__sd=0;}},forceUnblock:function(){if(!this.isBlocked()){return;}this.__sd=0;this.__sk();},__sk:function(){this._restoreActiveWidget();var N=this.getBlockerElement();N.removeListener(h,this.__so,this);N.removeListener(d,this.__sn,this);N.removeListener(j,this.__sn,this);N.removeListener(f,this.__sn,this);N.exclude();},getContentBlockerElement:function(){if(!this.__se){this.__se=this.__sj();this._widget.getContentElement().add(this.__se);this.__se.exclude();}return this.__se;},blockContent:function(O){var P=this.getContentBlockerElement();P.setStyle(l,O);this.__sb.push(O);if(this.__sb.length<2){P.include();if(this._isPageRoot){if(!this.__sg){this.__sg=new qx.event.Timer(300);this.__sg.addListener(u,this.__sm,this);}this.__sg.start();this.__sm();}}},isContentBlocked:function(){return this.__sb.length>0;},unblockContent:function(){if(!this.isContentBlocked()){return;}this.__sb.pop();var Q=this.__sb[this.__sb.length-1];var R=this.getContentBlockerElement();R.setStyle(l,Q);if(this.__sb.length<1){this.__sl();this.__sb=[];}},forceUnblockContent:function(){if(!this.isContentBlocked()){return;}this.__sb=[];var S=this.getContentBlockerElement();S.setStyle(l,null);this.__sl();},__sl:function(){this.getContentBlockerElement().exclude();if(this._isPageRoot){this.__sg.stop();}},__sm:function(){var T=this._widget.getContainerElement().getDomElement();var U=qx.dom.Node.getDocument(T);this.getContentBlockerElement().setStyles({height:U.documentElement.scrollHeight+k,width:U.documentElement.scrollWidth+k});},__sn:function(e){if(e.getKeyIdentifier()==t){e.stop();}},__so:function(){if(this.getKeepBlockerActive()){this.getBlockerElement().activate();}}},destruct:function(){if(this._isPageRoot){this._widget.removeListener(g,this.__sh,this);}this._disposeObjects(w,o,x);this.__sf=this.__rY=this.__sa=this._widget=this.__sb=null;}});})();(function(){var i="qx.ui.window.Window",h="changeModal",g="changeVisibility",f="changeActive",d="_applyActiveWindow",c="__og",b="__of",a="qx.ui.window.MDesktop";qx.Mixin.define(a,{properties:{activeWindow:{check:i,apply:d,init:null,nullable:true}},members:{__of:null,__og:null,getWindowManager:function(){if(!this.__og){this.setWindowManager(new qx.ui.window.Window.DEFAULT_MANAGER_CLASS());}return this.__og;},supportsMaximize:function(){return true;},setWindowManager:function(j){if(this.__og){this.__og.setDesktop(null);}j.setDesktop(this);this.__og=j;},_onChangeActive:function(e){if(e.getData()){this.setActiveWindow(e.getTarget());}else if(this.getActiveWindow()==e.getTarget()){this.setActiveWindow(null);}},_applyActiveWindow:function(k,l){this.getWindowManager().changeActiveWindow(k,l);this.getWindowManager().updateStack();},_onChangeModal:function(e){this.getWindowManager().updateStack();},_onChangeVisibility:function(){this.getWindowManager().updateStack();},_afterAddChild:function(m){if(qx.Class.isDefined(i)&&m instanceof qx.ui.window.Window){this._addWindow(m);}},_addWindow:function(n){if(!qx.lang.Array.contains(this.getWindows(),n)){this.getWindows().push(n);n.addListener(f,this._onChangeActive,this);n.addListener(h,this._onChangeModal,this);n.addListener(g,this._onChangeVisibility,this);}if(n.getActive()){this.setActiveWindow(n);}this.getWindowManager().updateStack();},_afterRemoveChild:function(o){if(qx.Class.isDefined(i)&&o instanceof qx.ui.window.Window){this._removeWindow(o);}},_removeWindow:function(p){qx.lang.Array.remove(this.getWindows(),p);p.removeListener(f,this._onChangeActive,this);p.removeListener(h,this._onChangeModal,this);p.removeListener(g,this._onChangeVisibility,this);this.getWindowManager().updateStack();},getWindows:function(){if(!this.__of){this.__of=[];}return this.__of;}},destruct:function(){this._disposeArray(b);this._disposeObjects(c);}});})();(function(){var f="_applyBlockerColor",e="Number",d="__rQ",c="qx.ui.core.MBlocker",b="_applyBlockerOpacity",a="Color";qx.Mixin.define(c,{construct:function(){this.__rQ=new qx.ui.core.Blocker(this);},properties:{blockerColor:{check:a,init:null,nullable:true,apply:f,themeable:true},blockerOpacity:{check:e,init:1,apply:b,themeable:true}},members:{__rQ:null,_applyBlockerColor:function(g,h){this.__rQ.setColor(g);},_applyBlockerOpacity:function(i,j){this.__rQ.setOpacity(i);},block:function(){this.__rQ.block();},isBlocked:function(){return this.__rQ.isBlocked();},unblock:function(){this.__rQ.unblock();},forceUnblock:function(){this.__rQ.forceUnblock();},blockContent:function(k){this.__rQ.blockContent(k);},isContentBlocked:function(){return this.__rQ.isContentBlocked();},unblockContent:function(){this.__rQ.unblockContent();},forceUnblockContent:function(){this.__rQ.forceUnblockContent();},getBlocker:function(){return this.__rQ;}},destruct:function(){this._disposeObjects(d);}});})();(function(){var p="contextmenu",o="help",n="qx.client",m="changeGlobalCursor",l="abstract",k="Boolean",j="root",i="",h=" !important",g="_applyGlobalCursor",c="_applyNativeHelp",f=";",d="qx.ui.root.Abstract",b="String",a="*";qx.Class.define(d,{type:l,extend:qx.ui.core.Widget,include:[qx.ui.core.MChildrenHandling,qx.ui.core.MBlocker,qx.ui.window.MDesktop],construct:function(){qx.ui.core.Widget.call(this);qx.ui.core.FocusHandler.getInstance().addRoot(this);qx.ui.core.queue.Visibility.add(this);this.initNativeHelp();},properties:{appearance:{refine:true,init:j},enabled:{refine:true,init:true},focusable:{refine:true,init:true},globalCursor:{check:b,nullable:true,themeable:true,apply:g,event:m},nativeContextMenu:{refine:true,init:false},nativeHelp:{check:k,init:false,apply:c}},members:{__mS:null,isRootWidget:function(){return true;},getLayout:function(){return this._getLayout();},_applyGlobalCursor:qx.core.Variant.select(n,{"mshtml":function(q,r){},"default":function(s,t){var u=qx.bom.Stylesheet;var v=this.__mS;if(!v){this.__mS=v=u.createElement();}u.removeAllRules(v);if(s){u.addRule(v,a,qx.bom.element.Cursor.compile(s).replace(f,i)+h);}}}),_applyNativeContextMenu:function(w,x){if(w){this.removeListener(p,this._onNativeContextMenu,this,true);}else{this.addListener(p,this._onNativeContextMenu,this,true);}},_onNativeContextMenu:function(e){if(e.getTarget().getNativeContextMenu()){return;}e.preventDefault();},_applyNativeHelp:qx.core.Variant.select(n,{"mshtml":function(y,z){if(z===false){qx.bom.Event.removeNativeListener(document,o,qx.lang.Function.returnFalse);}if(y===false){qx.bom.Event.addNativeListener(document,o,qx.lang.Function.returnFalse);}},"default":function(){}})},destruct:function(){this.__mS=null;},defer:function(A,B){qx.ui.core.MChildrenHandling.remap(B);}});})();(function(){var n="resize",m="position",l="0px",k="webkit",j="paddingLeft",i="$$widget",h="qx.ui.root.Application",g="hidden",f="qx.client",d="div",a="paddingTop",c="100%",b="absolute";qx.Class.define(h,{extend:qx.ui.root.Abstract,construct:function(o){this.__pj=qx.dom.Node.getWindow(o);this.__pk=o;qx.ui.root.Abstract.call(this);qx.event.Registration.addListener(this.__pj,n,this._onResize,this);this._setLayout(new qx.ui.layout.Canvas());qx.ui.core.queue.Layout.add(this);qx.ui.core.FocusHandler.getInstance().connectTo(this);this.getContentElement().disableScrolling();},members:{__pj:null,__pk:null,_createContainerElement:function(){var p=this.__pk;if(qx.core.Variant.isSet(f,k)){if(!p.body){alert("The application could not be started due to a missing body tag in the HTML file!");}}var t=p.documentElement.style;var q=p.body.style;t.overflow=q.overflow=g;t.padding=t.margin=q.padding=q.margin=l;t.width=t.height=q.width=q.height=c;var s=p.createElement(d);p.body.appendChild(s);var r=new qx.html.Root(s);r.setStyle(m,b);r.setAttribute(i,this.toHashCode());return r;},_onResize:function(e){qx.ui.core.queue.Layout.add(this);},_computeSizeHint:function(){var u=qx.bom.Viewport.getWidth(this.__pj);var v=qx.bom.Viewport.getHeight(this.__pj);return {minWidth:u,width:u,maxWidth:u,minHeight:v,height:v,maxHeight:v};},_applyPadding:function(w,x,name){if(w&&(name==a||name==j)){throw new Error("The root widget does not support 'left', or 'top' paddings!");}qx.ui.root.Abstract.prototype._applyPadding.call(this,w,x,name);},_applyDecorator:function(y,z){qx.ui.root.Abstract.prototype._applyDecorator.call(this,y,z);if(!y){return;}var A=this.getDecoratorElement().getInsets();if(A.left||A.top){throw new Error("The root widget does not support decorators with 'left', or 'top' insets!");}}},destruct:function(){this.__pj=this.__pk=null;}});})();(function(){var k="keypress",j="focusout",h="activate",g="Tab",f="singleton",d="__bE",c="deactivate",b="focusin",a="qx.ui.core.FocusHandler";qx.Class.define(a,{extend:qx.core.Object,type:f,construct:function(){qx.core.Object.call(this);this.__bE={};},members:{__bE:null,__bF:null,__bG:null,__bH:null,connectTo:function(m){m.addListener(k,this.__bI,this);m.addListener(b,this._onFocusIn,this,true);m.addListener(j,this._onFocusOut,this,true);m.addListener(h,this._onActivate,this,true);m.addListener(c,this._onDeactivate,this,true);},addRoot:function(n){this.__bE[n.$$hash]=n;},removeRoot:function(o){delete this.__bE[o.$$hash];},getActiveWidget:function(){return this.__bF;},isActive:function(p){return this.__bF==p;},getFocusedWidget:function(){return this.__bG;},isFocused:function(q){return this.__bG==q;},isFocusRoot:function(r){return !!this.__bE[r.$$hash];},_onActivate:function(e){var t=e.getTarget();this.__bF=t;var s=this.__bJ(t);if(s!=this.__bH){this.__bH=s;}},_onDeactivate:function(e){var u=e.getTarget();if(this.__bF==u){this.__bF=null;}},_onFocusIn:function(e){var v=e.getTarget();if(v!=this.__bG){this.__bG=v;v.visualizeFocus();}},_onFocusOut:function(e){var w=e.getTarget();if(w==this.__bG){this.__bG=null;w.visualizeBlur();}},__bI:function(e){if(e.getKeyIdentifier()!=g){return;}if(!this.__bH){return;}e.stopPropagation();e.preventDefault();var x=this.__bG;if(!e.isShiftPressed()){var y=x?this.__bN(x):this.__bL();}else{var y=x?this.__bO(x):this.__bM();}if(y){y.tabFocus();}},__bJ:function(z){var A=this.__bE;while(z){if(A[z.$$hash]){return z;}z=z.getLayoutParent();}return null;},__bK:function(B,C){if(B===C){return 0;}var E=B.getTabIndex()||0;var D=C.getTabIndex()||0;if(E!=D){return E-D;}var J=B.getContainerElement().getDomElement();var I=C.getContainerElement().getDomElement();var H=qx.bom.element.Location;var G=H.get(J);var F=H.get(I);if(G.top!=F.top){return G.top-F.top;}if(G.left!=F.left){return G.left-F.left;}var K=B.getZIndex();var L=C.getZIndex();if(K!=L){return K-L;}return 0;},__bL:function(){return this.__bR(this.__bH,null);},__bM:function(){return this.__bS(this.__bH,null);},__bN:function(M){var N=this.__bH;if(N==M){return this.__bL();}while(M&&M.getAnonymous()){M=M.getLayoutParent();}if(M==null){return [];}var O=[];this.__bP(N,M,O);O.sort(this.__bK);var P=O.length;return P>0?O[0]:this.__bL();},__bO:function(Q){var R=this.__bH;if(R==Q){return this.__bM();}while(Q&&Q.getAnonymous()){Q=Q.getLayoutParent();}if(Q==null){return [];}var S=[];this.__bQ(R,Q,S);S.sort(this.__bK);var T=S.length;return T>0?S[T-1]:this.__bM();},__bP:function(parent,U,V){var W=parent.getLayoutChildren();var X;for(var i=0,l=W.length;i<l;i++){X=W[i];if(!(X instanceof qx.ui.core.Widget)){continue;}if(!this.isFocusRoot(X)&&X.isEnabled()&&X.isVisible()){if(X.isTabable()&&this.__bK(U,X)<0){V.push(X);}this.__bP(X,U,V);}}},__bQ:function(parent,Y,ba){var bb=parent.getLayoutChildren();var bc;for(var i=0,l=bb.length;i<l;i++){bc=bb[i];if(!(bc instanceof qx.ui.core.Widget)){continue;}if(!this.isFocusRoot(bc)&&bc.isEnabled()&&bc.isVisible()){if(bc.isTabable()&&this.__bK(Y,bc)>0){ba.push(bc);}this.__bQ(bc,Y,ba);}}},__bR:function(parent,bd){var be=parent.getLayoutChildren();var bf;for(var i=0,l=be.length;i<l;i++){bf=be[i];if(!(bf instanceof qx.ui.core.Widget)){continue;}if(!this.isFocusRoot(bf)&&bf.isEnabled()&&bf.isVisible()){if(bf.isTabable()){if(bd==null||this.__bK(bf,bd)<0){bd=bf;}}bd=this.__bR(bf,bd);}}return bd;},__bS:function(parent,bg){var bh=parent.getLayoutChildren();var bi;for(var i=0,l=bh.length;i<l;i++){bi=bh[i];if(!(bi instanceof qx.ui.core.Widget)){continue;}if(!this.isFocusRoot(bi)&&bi.isEnabled()&&bi.isVisible()){if(bi.isTabable()){if(bg==null||this.__bK(bi,bg)>0){bg=bi;}}bg=this.__bS(bi,bg);}}return bg;}},destruct:function(){this._disposeMap(d);this.__bG=this.__bF=this.__bH=null;}});})();(function(){var a="qx.html.Root";qx.Class.define(a,{extend:qx.html.Element,construct:function(b){qx.html.Element.call(this);if(b!=null){this.useElement(b);}},members:{useElement:function(c){qx.html.Element.prototype.useElement.call(this,c);this.setRoot(true);qx.html.Element._modified[this.$$hash]=this;}}});})();(function(){var k="cursor",j="100%",i="repeat",h="mousedown",g="url(",f=")",d="mouseout",c="qx.client",b="div",a="dblclick",w="mousewheel",v="qx.html.Blocker",u="mousemove",t="mouseover",s="appear",r="click",q="mshtml",p="mouseup",o="contextmenu",n="disappear",l="qx/static/blank.gif",m="absolute";qx.Class.define(v,{extend:qx.html.Element,construct:function(x,y){var x=x?qx.theme.manager.Color.getInstance().resolve(x):null;var z={position:m,width:j,height:j,opacity:y||0,backgroundColor:x};if(qx.core.Variant.isSet(c,q)){z.backgroundImage=g+qx.util.ResourceManager.getInstance().toUri(l)+f;z.backgroundRepeat=i;}qx.html.Element.call(this,b,z);this.addListener(h,this._stopPropagation,this);this.addListener(p,this._stopPropagation,this);this.addListener(r,this._stopPropagation,this);this.addListener(a,this._stopPropagation,this);this.addListener(u,this._stopPropagation,this);this.addListener(t,this._stopPropagation,this);this.addListener(d,this._stopPropagation,this);this.addListener(w,this._stopPropagation,this);this.addListener(o,this._stopPropagation,this);this.addListener(s,this.__qp,this);this.addListener(n,this.__qp,this);},members:{_stopPropagation:function(e){e.stopPropagation();},__qp:function(){var A=this.getStyle(k);this.setStyle(k,null,true);this.setStyle(k,A,true);}}});})();(function(){var b="menu-separator",a="qx.ui.menu.Separator";qx.Class.define(a,{extend:qx.ui.core.Widget,properties:{appearance:{refine:true,init:b},anonymous:{refine:true,init:true}}});})();(function(){var t="icon",s="label",r="arrow",q="shortcut",p="changeLocale",o="qx.dynlocale",n="submenu",m="on",l="String",k="qx.ui.menu.Menu",d="qx.ui.menu.AbstractButton",j="keypress",h="",c="_applyIcon",b="mouseup",g="abstract",f="_applyLabel",i="_applyMenu",a="changeCommand";qx.Class.define(d,{extend:qx.ui.core.Widget,include:[qx.ui.core.MExecutable],implement:[qx.ui.form.IExecutable],type:g,construct:function(){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.menu.ButtonLayout);this.addListener(b,this._onMouseUp);this.addListener(j,this._onKeyPress);this.addListener(a,this._onChangeCommand,this);},properties:{blockToolTip:{refine:true,init:true},label:{check:l,apply:f,nullable:true},menu:{check:k,apply:i,nullable:true,dereference:true},icon:{check:l,apply:c,themeable:true,nullable:true}},members:{_createChildControlImpl:function(u,v){var w;switch(u){case t:w=new qx.ui.basic.Image;w.setAnonymous(true);this._add(w,{column:0});break;case s:w=new qx.ui.basic.Label;w.setAnonymous(true);this._add(w,{column:1});break;case q:w=new qx.ui.basic.Label;w.setAnonymous(true);this._add(w,{column:2});break;case r:w=new qx.ui.basic.Image;w.setAnonymous(true);this._add(w,{column:3});break;}return w||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,u);},_forwardStates:{selected:1},getChildrenSizes:function(){var x=0,y=0,z=0,D=0;if(this._isChildControlVisible(t)){var E=this.getChildControl(t);x=E.getMarginLeft()+E.getSizeHint().width+E.getMarginRight();}if(this._isChildControlVisible(s)){var B=this.getChildControl(s);y=B.getMarginLeft()+B.getSizeHint().width+B.getMarginRight();}if(this._isChildControlVisible(q)){var A=this.getChildControl(q);z=A.getMarginLeft()+A.getSizeHint().width+A.getMarginRight();}if(this._isChildControlVisible(r)){var C=this.getChildControl(r);D=C.getMarginLeft()+C.getSizeHint().width+C.getMarginRight();}return [x,y,z,D];},_onMouseUp:function(e){},_onKeyPress:function(e){},_onChangeCommand:function(e){var H=e.getData();if(qx.core.Variant.isSet(o,m)){var F=e.getOldData();if(!F){qx.locale.Manager.getInstance().addListener(p,this._onChangeLocale,this);}if(!H){qx.locale.Manager.getInstance().removeListener(p,this._onChangeLocale,this);}}var G=H!=null?H.toString():h;this.getChildControl(q).setValue(G);},_onChangeLocale:qx.core.Variant.select(o,{"on":function(e){var I=this.getCommand();if(I!=null){this.getChildControl(q).setValue(I.toString());}},"off":null}),_applyIcon:function(J,K){if(J){this._showChildControl(t).setSource(J);}else{this._excludeChildControl(t);}},_applyLabel:function(L,M){if(L){this._showChildControl(s).setValue(L);}else{this._excludeChildControl(s);}},_applyMenu:function(N,O){if(O){O.resetOpener();O.removeState(n);}if(N){this._showChildControl(r);N.setOpener(this);N.addState(n);}else{this._excludeChildControl(r);}}},destruct:function(){if(this.getMenu()){if(!qx.core.ObjectRegistry.inShutDown){this.getMenu().destroy();}}if(qx.core.Variant.isSet(o,m)){qx.locale.Manager.getInstance().removeListener(p,this._onChangeLocale,this);}}});})();(function(){var c="middle",b="qx.ui.menu.ButtonLayout",a="left";qx.Class.define(b,{extend:qx.ui.layout.Abstract,members:{verifyLayoutProperty:null,renderLayout:function(d,e){var q=this._getLayoutChildren();var p;var g;var h=[];for(var i=0,l=q.length;i<l;i++){p=q[i];g=p.getLayoutProperties().column;h[g]=p;}var o=this.__ob(q[0]);var r=o.getColumnSizes();var k=o.getSpacingX();var j=qx.lang.Array.sum(r)+k*(r.length-1);if(j<d){r[1]+=d-j;}var s=0,top=0;var m=qx.ui.layout.Util;for(var i=0,l=r.length;i<l;i++){p=h[i];if(p){var f=p.getSizeHint();var top=m.computeVerticalAlignOffset(p.getAlignY()||c,f.height,e,0,0);var n=m.computeHorizontalAlignOffset(p.getAlignX()||a,f.width,r[i],p.getMarginLeft(),p.getMarginRight());p.renderLayout(s+n,top,f.width,f.height);}s+=r[i]+k;}},__ob:function(t){while(!(t instanceof qx.ui.menu.Menu)){t=t.getLayoutParent();}return t;},_computeSizeHint:function(){var w=this._getLayoutChildren();var v=0;var x=0;for(var i=0,l=w.length;i<l;i++){var u=w[i].getSizeHint();x+=u.width;v=Math.max(v,u.height);}return {width:x,height:v};}}});})();(function(){var a="qx.ui.core.MRemoteLayoutHandling";qx.Mixin.define(a,{members:{setLayout:function(b){return this.getChildrenContainer().setLayout(b);},getLayout:function(){return this.getChildrenContainer().getLayout();}}});})();(function(){var q="horizontal",p="scrollpane",o="vertical",n="button-backward",m="button-forward",l="content",k="execute",j="qx.ui.container.SlideBar",i="scrollY",h="removeChildWidget",c="scrollX",g="_applyOrientation",f="mousewheel",b="Integer",a="slidebar",d="update";qx.Class.define(j,{extend:qx.ui.core.Widget,include:[qx.ui.core.MRemoteChildrenHandling,qx.ui.core.MRemoteLayoutHandling],construct:function(r){qx.ui.core.Widget.call(this);var s=this.getChildControl(p);this._add(s,{flex:1});if(r!=null){this.setOrientation(r);}else{this.initOrientation();}this.addListener(f,this._onMouseWheel,this);},properties:{appearance:{refine:true,init:a},orientation:{check:[q,o],init:q,apply:g},scrollStep:{check:b,init:15,themeable:true}},members:{getChildrenContainer:function(){return this.getChildControl(l);},_createChildControlImpl:function(t,u){var v;switch(t){case m:v=new qx.ui.form.RepeatButton;v.addListener(k,this._onExecuteForward,this);v.setFocusable(false);this._addAt(v,2);break;case n:v=new qx.ui.form.RepeatButton;v.addListener(k,this._onExecuteBackward,this);v.setFocusable(false);this._addAt(v,0);break;case l:v=new qx.ui.container.Composite();if(qx.bom.client.Engine.GECKO){v.addListener(h,this._onRemoveChild,this);}this.getChildControl(p).add(v);break;case p:v=new qx.ui.core.scroll.ScrollPane();v.addListener(d,this._onResize,this);v.addListener(c,this._onScroll,this);v.addListener(i,this._onScroll,this);break;}return v||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,t);},_forwardStates:{barLeft:true,barTop:true,barRight:true,barBottom:true},scrollBy:function(w){var x=this.getChildControl(p);if(this.getOrientation()===q){x.scrollByX(w);}else{x.scrollByY(w);}},scrollTo:function(y){var z=this.getChildControl(p);if(this.getOrientation()===q){z.scrollToX(y);}else{z.scrollToY(y);}},_applyOrientation:function(A,B){var E=[this.getLayout(),this._getLayout()];var D=this.getChildControl(m);var C=this.getChildControl(n);if(B==o){D.removeState(o);C.removeState(o);D.addState(q);C.addState(q);}else if(B==q){D.removeState(q);C.removeState(q);D.addState(o);C.addState(o);}if(A==q){this._setLayout(new qx.ui.layout.HBox());this.setLayout(new qx.ui.layout.HBox());}else{this._setLayout(new qx.ui.layout.VBox());this.setLayout(new qx.ui.layout.VBox());}if(E[0]){E[0].dispose();}if(E[1]){E[1].dispose();}},_onMouseWheel:function(e){this.scrollBy(e.getWheelDelta()*this.getScrollStep());e.stop();},_onScroll:function(){this._updateArrowsEnabled();},_onResize:function(e){var content=this.getChildControl(p).getChildren()[0];if(!content){return;}var F=this.getInnerSize();var H=content.getBounds();var G=(this.getOrientation()===q)?H.width>F.width:H.height>F.height;if(G){this._showArrows();this._updateArrowsEnabled();}else{this._hideArrows();}},_onExecuteBackward:function(){this.scrollBy(-this.getScrollStep());},_onExecuteForward:function(){this.scrollBy(this.getScrollStep());},_onRemoveChild:function(){qx.event.Timer.once(function(){this.scrollBy(this.getChildControl(p).getScrollX());},this,50);},_updateArrowsEnabled:function(){var J=this.getChildControl(p);if(this.getOrientation()===q){var I=J.getScrollX();var K=J.getScrollMaxX();}else{var I=J.getScrollY();var K=J.getScrollMaxY();}this.getChildControl(n).setEnabled(I>0);this.getChildControl(m).setEnabled(I<K);},_showArrows:function(){this._showChildControl(m);this._showChildControl(n);},_hideArrows:function(){this._excludeChildControl(m);this._excludeChildControl(n);this.scrollTo(0);}}});})();(function(){var f="execute",e="button-backward",d="vertical",c="button-forward",b="menu-slidebar",a="qx.ui.menu.MenuSlideBar";qx.Class.define(a,{extend:qx.ui.container.SlideBar,construct:function(){qx.ui.container.SlideBar.call(this,d);},properties:{appearance:{refine:true,init:b}},members:{_createChildControlImpl:function(g,h){var i;switch(g){case c:i=new qx.ui.form.HoverButton();i.addListener(f,this._onExecuteForward,this);this._addAt(i,2);break;case e:i=new qx.ui.form.HoverButton();i.addListener(f,this._onExecuteBackward,this);this._addAt(i,0);break;}return i||qx.ui.container.SlideBar.prototype._createChildControlImpl.call(this,g);}}});})();(function(){var i="Integer",h="hovered",g="hover-button",f="interval",d="mouseover",c="mouseout",b="__nk",a="qx.ui.form.HoverButton";qx.Class.define(a,{extend:qx.ui.basic.Atom,include:[qx.ui.core.MExecutable],implement:[qx.ui.form.IExecutable],construct:function(j,k){qx.ui.basic.Atom.call(this,j,k);this.addListener(d,this._onMouseOver,this);this.addListener(c,this._onMouseOut,this);this.__nk=new qx.event.AcceleratingTimer();this.__nk.addListener(f,this._onInterval,this);},properties:{appearance:{refine:true,init:g},interval:{check:i,init:80},firstInterval:{check:i,init:200},minTimer:{check:i,init:20},timerDecrease:{check:i,init:2}},members:{__nk:null,_onMouseOver:function(e){if(!this.isEnabled()||e.getTarget()!==this){return;}this.__nk.set({interval:this.getInterval(),firstInterval:this.getFirstInterval(),minimum:this.getMinTimer(),decrease:this.getTimerDecrease()}).start();this.addState(h);},_onMouseOut:function(e){this.__nk.stop();this.removeState(h);if(!this.isEnabled()||e.getTarget()!==this){return;}},_onInterval:function(){if(this.isEnabled()){this.execute();}else{this.__nk.stop();}}},destruct:function(){this._disposeObjects(b);}});})();(function(){var h="pressed",g="hovered",f="inherit",d="qx.ui.menubar.Button",c="keydown",b="menubar-button",a="keyup";qx.Class.define(d,{extend:qx.ui.form.MenuButton,construct:function(i,j,k){qx.ui.form.MenuButton.call(this,i,j,k);this.removeListener(c,this._onKeyDown);this.removeListener(a,this._onKeyUp);},properties:{appearance:{refine:true,init:b},show:{refine:true,init:f},focusable:{refine:true,init:false}},members:{getMenuBar:function(){var parent=this;while(parent){if(parent instanceof qx.ui.toolbar.ToolBar){return parent;}parent=parent.getLayoutParent();}return null;},open:function(l){qx.ui.form.MenuButton.prototype.open.call(this,l);var menubar=this.getMenuBar();menubar._setAllowMenuOpenHover(true);},_onMenuChange:function(e){var m=this.getMenu();var menubar=this.getMenuBar();if(m.isVisible()){this.addState(h);if(menubar){menubar.setOpenMenu(m);}}else{this.removeState(h);if(menubar&&menubar.getOpenMenu()==m){menubar.resetOpenMenu();menubar._setAllowMenuOpenHover(false);}}},_onMouseUp:function(e){qx.ui.form.MenuButton.prototype._onMouseUp.call(this,e);var n=this.getMenu();if(n&&n.isVisible()&&!this.hasState(h)){this.addState(h);}},_onMouseOver:function(e){this.addState(g);if(this.getMenu()){var menubar=this.getMenuBar();if(menubar._isAllowMenuOpenHover()){qx.ui.menu.Manager.getInstance().hideAll();menubar._setAllowMenuOpenHover(true);if(this.isEnabled()){this.open();}}}}}});})();(function(){var w="visible",v="excluded",u="resize",t="qx.event.type.Data",s="both",r="qx.ui.menu.Menu",q="_applySpacing",p="showItem",o="Boolean",n="icon",d="label",m="qx.ui.core.Widget",h="_applyOverflowIndicator",c="_applyOverflowHandling",b="changeShow",g="Integer",f="qx.ui.toolbar.ToolBar",j="hideItem",a="toolbar",k="changeOpenMenu";qx.Class.define(f,{extend:qx.ui.core.Widget,include:qx.ui.core.MChildrenHandling,construct:function(){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.layout.HBox());this.__rp=[];this.__rq=[];},properties:{appearance:{refine:true,init:a},openMenu:{check:r,event:k,nullable:true},show:{init:s,check:[s,d,n],inheritable:true,event:b},spacing:{nullable:true,check:g,themeable:true,apply:q},overflowIndicator:{check:m,nullable:true,apply:h},overflowHandling:{init:false,check:o,apply:c}},events:{"hideItem":t,"showItem":t},members:{__rp:null,__rq:null,_computeSizeHint:function(){var z=qx.ui.core.Widget.prototype._computeSizeHint.call(this);if(true&&this.getOverflowHandling()){var x=0;var y=this.getOverflowIndicator();if(y){x=y.getSizeHint().width+this.getSpacing();}z.minWidth=x;}return z;},_onResize:function(e){this._recalculateOverflow(e.getData().width);},_recalculateOverflow:function(A){if(!this.getOverflowHandling()){return;}var C=this.getSizeHint().width;var B=this.getOverflowIndicator();var F=0;if(B){F=B.getSizeHint().width;}if(A<C){do{var G=this._getNextToHide();if(!G){return;}var H=G.getMarginLeft()+G.getMarginRight();var E=G.getSizeHint().width+H;this.__rs(G);C-=E;if(B&&B.getVisibility()!=w){B.setVisibility(w);C+=F;}}while(C>A);}else{do{var I=this.__rp[0];if(I){var H=I.getMarginLeft()+I.getMarginRight();var D=I.getSizeHint().width+H;if(A>C+D+this.getSpacing()||(this.__rp.length==1&&A>C+D-F+this.getSpacing())){this.__rr(I);A+=D;if(B&&this.__rp.length==0){B.setVisibility(v);}}else{return;}}}while(A>=C&&this.__rp.length>0);}},__rr:function(J){J.setVisibility(w);this.__rp.shift();this.fireDataEvent(p,J);},__rs:function(K){if(!K){return;}this.__rp.unshift(K);K.setVisibility(v);this.fireDataEvent(j,K);},_getNextToHide:function(){for(var i=this.__rq.length-1;i>=0;i--){var L=this.__rq[i];if(L&&L.getVisibility&&L.getVisibility()==w){return L;}}var M=this._getChildren();for(var i=M.length-1;i>=0;i--){var N=M[i];if(N==this.getOverflowIndicator()){continue;}if(N.getVisibility&&N.getVisibility()==w){return N;}}},setRemovePriority:function(O,P,Q){if(!Q&&this.__rq[P]!=undefined){throw new Error("Priority already in use!");}this.__rq[P]=O;},_applyOverflowHandling:function(R,S){this.invalidateLayoutCache();var parent=this.getLayoutParent();if(parent){parent.invalidateLayoutCache();}var U=this.getBounds();if(U&&U.width){this._recalculateOverflow(U.width);}if(R){this.addListener(u,this._onResize,this);}else{this.removeListener(u,this._onResize,this);var T=this.getOverflowIndicator();if(T){T.setVisibility(v);}for(var i=0;i<this.__rp.length;i++){this.__rp[i].setVisibility(w);}this.__rp=[];}},_applyOverflowIndicator:function(V,W){if(W){this._remove(W);}if(V){if(this._indexOf(V)==-1){throw new Error("Widget must be child of the toolbar.");}V.setVisibility(v);}},__rt:false,_setAllowMenuOpenHover:function(X){this.__rt=X;},_isAllowMenuOpenHover:function(){return this.__rt;},_applySpacing:function(Y,ba){var bb=this._getLayout();Y==null?bb.resetSpacing():bb.setSpacing(Y);},addSpacer:function(){var bc=new qx.ui.core.Spacer;this._add(bc,{flex:1});return bc;},addSeparator:function(){this.add(new qx.ui.toolbar.Separator);},getMenuButtons:function(){var be=this.getChildren();var bd=[];var bf;for(var i=0,l=be.length;i<l;i++){bf=be[i];if(bf instanceof qx.ui.menubar.Button){bd.push(bf);}else if(bf instanceof qx.ui.toolbar.Part){bd.push.apply(bd,bf.getMenuButtons());}}return bd;}},destruct:function(){if(this.hasListener(u)){this.removeListener(u,this._onResize,this);}}});})();(function(){var b="toolbar-separator",a="qx.ui.toolbar.Separator";qx.Class.define(a,{extend:qx.ui.core.Widget,properties:{appearance:{refine:true,init:b},anonymous:{refine:true,init:true},width:{refine:true,init:0},height:{refine:true,init:0}}});})();(function(){var m="container",k="handle",j="both",h="Integer",g="middle",f="qx.ui.toolbar.Part",e="icon",d="label",c="changeShow",b="_applySpacing",a="toolbar/part";qx.Class.define(f,{extend:qx.ui.core.Widget,include:[qx.ui.core.MRemoteChildrenHandling],construct:function(){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.layout.HBox);this._createChildControl(k);},properties:{appearance:{refine:true,init:a},show:{init:j,check:[j,d,e],inheritable:true,event:c},spacing:{nullable:true,check:h,themeable:true,apply:b}},members:{_createChildControlImpl:function(n,o){var p;switch(n){case k:p=new qx.ui.basic.Image();p.setAlignY(g);this._add(p);break;case m:p=new qx.ui.toolbar.PartContainer;this._add(p);break;}return p||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,n);},getChildrenContainer:function(){return this.getChildControl(m);},_applySpacing:function(q,r){var s=this.getChildControl(m).getLayout();q==null?s.resetSpacing():s.setSpacing(q);},addSeparator:function(){this.add(new qx.ui.toolbar.Separator);},getMenuButtons:function(){var u=this.getChildren();var t=[];var v;for(var i=0,l=u.length;i<l;i++){v=u[i];if(v instanceof qx.ui.menubar.Button){t.push(v);}}return t;}}});})();(function(){var f="both",e="toolbar/part/container",d="icon",c="changeShow",b="qx.ui.toolbar.PartContainer",a="label";qx.Class.define(b,{extend:qx.ui.container.Composite,construct:function(){qx.ui.container.Composite.call(this);this._setLayout(new qx.ui.layout.HBox);},properties:{appearance:{refine:true,init:e},show:{init:f,check:[f,a,d],inheritable:true,event:c}}});})();(function(){var b="qx.ui.menu.Button",a="menu-button";qx.Class.define(b,{extend:qx.ui.menu.AbstractButton,construct:function(c,d,f,g){qx.ui.menu.AbstractButton.call(this);if(c!=null){this.setLabel(c);}if(d!=null){this.setIcon(d);}if(f!=null){this.setCommand(f);}if(g!=null){this.setMenu(g);}},properties:{appearance:{refine:true,init:a}},members:{_onMouseUp:function(e){if(e.isLeftPressed()){this.execute();if(this.getMenu()){return;}}qx.ui.menu.Manager.getInstance().hideAll();},_onKeyPress:function(e){this.execute();}}});})();(function(){var b="qx.ui.table.IColumnMenuItem",a="qx.event.type.Data";qx.Interface.define(b,{properties:{visible:{}},events:{changeVisible:a}});})();(function(){var h="checked",g="menu-checkbox",f="Boolean",d="_applyValue",c="changeValue",b="qx.ui.menu.CheckBox",a="execute";qx.Class.define(b,{extend:qx.ui.menu.AbstractButton,implement:[qx.ui.form.IBooleanForm],construct:function(i,j){qx.ui.menu.AbstractButton.call(this);if(i!=null){if(i.translate){this.setLabel(i.translate());}else{this.setLabel(i);}}if(j!=null){this.setMenu(j);}this.addListener(a,this._onExecute,this);},properties:{appearance:{refine:true,init:g},value:{check:f,init:false,apply:d,event:c,nullable:true}},members:{_applyValue:function(k,l){k?this.addState(h):this.removeState(h);},_onExecute:function(e){this.toggleValue();},_onMouseUp:function(e){if(e.isLeftPressed()){this.execute();}qx.ui.menu.Manager.getInstance().hideAll();},_onKeyPress:function(e){this.execute();}}});})();(function(){var f="changeVisible",d="qx.ui.table.columnmenu.MenuItem",c="_applyVisible",b="Boolean",a="changeValue";qx.Class.define(d,{extend:qx.ui.menu.CheckBox,implement:qx.ui.table.IColumnMenuItem,properties:{visible:{check:b,init:true,apply:c,event:f}},construct:function(g){qx.ui.menu.CheckBox.call(this,g);this.addListener(a,function(e){this.bInListener=true;this.setVisible(e.getData());this.bInListener=false;});},members:{__wn:false,_applyVisible:function(h,i){if(!this.bInListener){this.setValue(h);}}}});})();(function(){var b="qx.ui.table.selection.Model",a="qx.ui.table.selection.Manager";qx.Class.define(a,{extend:qx.core.Object,construct:function(){qx.core.Object.call(this);},properties:{selectionModel:{check:b}},members:{__wo:null,handleMouseDown:function(c,d){if(d.isLeftPressed()){var e=this.getSelectionModel();if(!e.isSelectedIndex(c)){this._handleSelectEvent(c,d);this.__wo=true;}else{this.__wo=false;}}else if(d.isRightPressed()&&d.getModifiers()==0){var e=this.getSelectionModel();if(!e.isSelectedIndex(c)){e.setSelectionInterval(c,c);}}},handleMouseUp:function(f,g){if(g.isLeftPressed()&&!this.__wo){this._handleSelectEvent(f,g);}},handleClick:function(h,i){},handleSelectKeyDown:function(j,k){this._handleSelectEvent(j,k);},handleMoveKeyDown:function(l,m){var o=this.getSelectionModel();switch(m.getModifiers()){case 0:o.setSelectionInterval(l,l);break;case qx.event.type.Dom.SHIFT_MASK:var n=o.getAnchorSelectionIndex();if(n==-1){o.setSelectionInterval(l,l);}else{o.setSelectionInterval(n,l);}break;}},_handleSelectEvent:function(p,q){var t=this.getSelectionModel();var r=t.getLeadSelectionIndex();var s=t.getAnchorSelectionIndex();if(q.isShiftPressed()){if(p!=r||t.isSelectionEmpty()){if(s==-1){s=p;}if(q.isCtrlOrCommandPressed()){t.addSelectionInterval(s,p);}else{t.setSelectionInterval(s,p);}}}else if(q.isCtrlOrCommandPressed()){if(t.isSelectedIndex(p)){t.removeSelectionInterval(p,p);}else{t.addSelectionInterval(p,p);}}else{t.setSelectionInterval(p,p);}}}});})();(function(){var l="]",k="..",h="changeSelection",g="_applySelectionMode",f='ie',d="qx.event.type.Event",c="Ranges:",b="qx.ui.table.selection.Model",a=" [";qx.Class.define(b,{extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__we=[];this.__wf=-1;this.__wg=-1;this.hasBatchModeRefCount=0;this.__wh=false;},events:{"changeSelection":d},statics:{NO_SELECTION:1,SINGLE_SELECTION:2,SINGLE_INTERVAL_SELECTION:3,MULTIPLE_INTERVAL_SELECTION:4,MULTIPLE_INTERVAL_SELECTION_TOGGLE:5},properties:{selectionMode:{init:2,check:[1,2,3,4,5],apply:g}},members:{__wh:null,__wf:null,__wg:null,__we:null,_applySelectionMode:function(m){this.resetSelection();},setBatchMode:function(n){if(n){this.hasBatchModeRefCount+=1;}else{if(this.hasBatchModeRefCount==0){throw new Error("Try to turn off batch mode althoug it was not turned on.");}this.hasBatchModeRefCount-=1;if(this.__wh){this.__wh=false;this._fireChangeSelection();}}return this.hasBatchMode();},hasBatchMode:function(){return this.hasBatchModeRefCount>0;},getAnchorSelectionIndex:function(){return this.__wf;},_setAnchorSelectionIndex:function(o){this.__wf=o;},getLeadSelectionIndex:function(){return this.__wg;},_setLeadSelectionIndex:function(p){this.__wg=p;},_getSelectedRangeArr:function(){return this.__we;},resetSelection:function(){if(!this.isSelectionEmpty()){this._resetSelection();this._fireChangeSelection();}},isSelectionEmpty:function(){return this.__we.length==0;},getSelectedCount:function(){var r=0;for(var i=0;i<this.__we.length;i++){var q=this.__we[i];r+=q.maxIndex-q.minIndex+1;}return r;},isSelectedIndex:function(s){for(var i=0;i<this.__we.length;i++){var t=this.__we[i];if(s>=t.minIndex&&s<=t.maxIndex){return true;}}return false;},getSelectedRanges:function(){var u=[];for(var i=0;i<this.__we.length;i++){u.push({minIndex:this.__we[i].minIndex,maxIndex:this.__we[i].maxIndex});}return u;},iterateSelection:function(v,w){for(var i=0;i<this.__we.length;i++){for(var j=this.__we[i].minIndex;j<=this.__we[i].maxIndex;j++){v.call(w,j);}}},setSelectionInterval:function(x,y){var z=this.self(arguments);switch(this.getSelectionMode()){case z.NO_SELECTION:return;case z.SINGLE_SELECTION:if(this.isSelectedIndex(y)){return;}x=y;break;case z.MULTIPLE_INTERVAL_SELECTION_TOGGLE:this.setBatchMode(true);try{for(var i=x;i<=y;i++){if(!this.isSelectedIndex(i)){this._addSelectionInterval(i,i);}else{this.removeSelectionInterval(i,i);}}}catch(e){if(qx.bom.client.Browser.NAME==f&&qx.bom.client.Browser.VERSION<=7){this.setBatchMode(false);}throw e;}finally{this.setBatchMode(false);}this._fireChangeSelection();return;}this._resetSelection();this._addSelectionInterval(x,y);this._fireChangeSelection();},addSelectionInterval:function(A,B){var C=qx.ui.table.selection.Model;switch(this.getSelectionMode()){case C.NO_SELECTION:return;case C.MULTIPLE_INTERVAL_SELECTION:case C.MULTIPLE_INTERVAL_SELECTION_TOGGLE:this._addSelectionInterval(A,B);this._fireChangeSelection();break;default:this.setSelectionInterval(A,B);break;}},removeSelectionInterval:function(D,E){this.__wf=D;this.__wg=E;var F=Math.min(D,E);var H=Math.max(D,E);for(var i=0;i<this.__we.length;i++){var J=this.__we[i];if(J.minIndex>H){break;}else if(J.maxIndex>=F){var K=(J.minIndex>=F)&&(J.minIndex<=H);var I=(J.maxIndex>=F)&&(J.maxIndex<=H);if(K&&I){this.__we.splice(i,1);i--;}else if(K){J.minIndex=H+1;}else if(I){J.maxIndex=F-1;}else{var G={minIndex:H+1,maxIndex:J.maxIndex};this.__we.splice(i+1,0,G);J.maxIndex=F-1;break;}}}this._fireChangeSelection();},_resetSelection:function(){this.__we=[];this.__wf=-1;this.__wg=-1;},_addSelectionInterval:function(L,M){this.__wf=L;this.__wg=M;var N=Math.min(L,M);var P=Math.max(L,M);var O=0;for(;O<this.__we.length;O++){var Q=this.__we[O];if(Q.minIndex>N){break;}}this.__we.splice(O,0,{minIndex:N,maxIndex:P});var R=this.__we[0];for(var i=1;i<this.__we.length;i++){var Q=this.__we[i];if(R.maxIndex+1>=Q.minIndex){R.maxIndex=Math.max(R.maxIndex,Q.maxIndex);this.__we.splice(i,1);i--;}else{R=Q;}}},_dumpRanges:function(){var S=c;for(var i=0;i<this.__we.length;i++){var T=this.__we[i];S+=a+T.minIndex+k+T.maxIndex+l;}this.debug(S);},_fireChangeSelection:function(){if(this.hasBatchMode()){this.__wh=true;}else{this.fireEvent(h);}}},destruct:function(){this.__we=null;}});})();(function(){var k="",j="Number",h='</div>',g='" ',f="paneUpdated",e='<div>',d="</div>",c="overflow: hidden;",b="qx.event.type.Data",a="paneReloadsData",E="div",D='style="',C="_applyMaxCacheLines",B="qx.ui.table.pane.Pane",A="width: 100%;",z="qx.event.type.Event",w="_applyVisibleRowCount",v='>',u="line-height: ",t="appear",r='class="',s="width:100%;",p="px;",q='<div ',n="'>",o="_applyFirstVisibleRow",l="<div style='",m=";position:relative;";qx.Class.define(B,{extend:qx.ui.core.Widget,construct:function(F){qx.ui.core.Widget.call(this);this.__wL=F;this.__wM=0;this.__wN=0;this.__wO=[];},events:{"paneReloadsData":b,"paneUpdated":z},properties:{firstVisibleRow:{check:j,init:0,apply:o},visibleRowCount:{check:j,init:0,apply:w},maxCacheLines:{check:j,init:1000,apply:C},allowShrinkX:{refine:true,init:false}},members:{__wN:null,__wM:null,__wL:null,__wP:null,__wQ:null,__wR:null,__wO:null,__wS:0,_applyFirstVisibleRow:function(G,H){this.updateContent(false,G-H);},_applyVisibleRowCount:function(I,J){this.updateContent(true);},_getContentHint:function(){return {width:this.getPaneScroller().getTablePaneModel().getTotalWidth(),height:400};},getPaneScroller:function(){return this.__wL;},getTable:function(){return this.__wL.getTable();},setFocusedCell:function(K,L,M){if(K!=this.__wR||L!=this.__wQ){var N=this.__wQ;this.__wR=K;this.__wQ=L;if(L!=N&&!M){if(N!==null){this.updateContent(false,null,N,true);}if(L!==null){this.updateContent(false,null,L,true);}}}},onSelectionChanged:function(){this.updateContent(false,null,null,true);},onFocusChanged:function(){this.updateContent(false,null,null,true);},setColumnWidth:function(O,P){this.updateContent(true);},onColOrderChanged:function(){this.updateContent(true);},onPaneModelChanged:function(){this.updateContent(true);},onTableModelDataChanged:function(Q,R,S,T){this.__wT();var V=this.getFirstVisibleRow();var U=this.getVisibleRowCount();if(R==-1||R>=V&&Q<V+U){this.updateContent();}},onTableModelMetaDataChanged:function(){this.updateContent(true);},_applyMaxCacheLines:function(W,X){if(this.__wS>=W&&W!==-1){this.__wT();}},__wT:function(){this.__wO=[];this.__wS=0;},__wU:function(Y,ba,bb){if(!ba&&!bb&&this.__wO[Y]){return this.__wO[Y];}else{return null;}},__wV:function(bc,bd,be,bf){var bg=this.getMaxCacheLines();if(!be&&!bf&&!this.__wO[bc]&&bg>0){this._applyMaxCacheLines(bg);this.__wO[bc]=bd;this.__wS+=1;}},updateContent:function(bh,bi,bj,bk){if(bh){this.__wT();}if(bi&&Math.abs(bi)<=Math.min(10,this.getVisibleRowCount())){this._scrollContent(bi);}else if(bk&&!this.getTable().getAlwaysUpdateCells()){this._updateRowStyles(bj);}else{this._updateAllRows();}},_updateRowStyles:function(bl){var bp=this.getContentElement().getDomElement();if(!bp||!bp.firstChild){this._updateAllRows();return;}var bt=this.getTable();var bn=bt.getSelectionModel();var bq=bt.getTableModel();var bu=bt.getDataRowRenderer();var bo=bp.firstChild.childNodes;var bs={table:bt};var bv=this.getFirstVisibleRow();var y=0;var bm=bo.length;if(bl!=null){var br=bl-bv;if(br>=0&&br<bm){bv=bl;y=br;bm=br+1;}else{return;}}for(;y<bm;y++,bv++){bs.row=bv;bs.selected=bn.isSelectedIndex(bv);bs.focusedRow=(this.__wQ==bv);bs.rowData=bq.getRowData(bv);bu.updateDataRowElement(bs,bo[y]);}},_getRowsHtml:function(bw,bx){var bD=this.getTable();var bG=bD.getSelectionModel();var bA=bD.getTableModel();var bB=bD.getTableColumnModel();var bV=this.getPaneScroller().getTablePaneModel();var bL=bD.getDataRowRenderer();bA.prefetchRows(bw,bw+bx-1);var bS=bD.getRowHeight();var bU=bV.getColumnCount();var bC=0;var bz=[];for(var x=0;x<bU;x++){var bY=bV.getColumnAtX(x);var bF=bB.getColumnWidth(bY);bz.push({col:bY,xPos:x,editable:bA.isColumnEditable(bY),focusedCol:this.__wR==bY,styleLeft:bC,styleWidth:bF});bC+=bF;}var bX=[];var ca=false;for(var bE=bw;bE<bw+bx;bE++){var bH=bG.isSelectedIndex(bE);var bK=(this.__wQ==bE);var bP=this.__wU(bE,bH,bK);if(bP){bX.push(bP);continue;}var by=[];var bR={table:bD};bR.styleHeight=bS;bR.row=bE;bR.selected=bH;bR.focusedRow=bK;bR.rowData=bA.getRowData(bE);if(!bR.rowData){ca=true;}by.push(q);var bO=bL.getRowAttributes(bR);if(bO){by.push(bO);}var bN=bL.getRowClass(bR);if(bN){by.push(r,bN,g);}var bM=bL.createRowStyle(bR);bM+=m+bL.getRowHeightStyle(bS)+s;if(bM){by.push(D,bM,g);}by.push(v);var bW=false;for(x=0;x<bU&&!bW;x++){var bI=bz[x];for(var bT in bI){bR[bT]=bI[bT];}var bY=bR.col;bR.value=bA.getValue(bY,bE);var bJ=bB.getDataCellRenderer(bY);bR.style=bJ.getDefaultCellStyle();bW=bJ.createDataCellHtml(bR,by)||false;}by.push(h);var bQ=by.join(k);this.__wV(bE,bQ,bH,bK);bX.push(bQ);}this.fireDataEvent(a,ca);return bX.join(k);},_scrollContent:function(cb){var cc=this.getContentElement().getDomElement();if(!(cc&&cc.firstChild)){this._updateAllRows();return;}var cl=cc.firstChild;var cd=cl.childNodes;var cj=this.getVisibleRowCount();var ci=this.getFirstVisibleRow();var cg=this.getTable().getTableModel();var cm=0;cm=cg.getRowCount();if(ci+cj>cm){this._updateAllRows();return;}var cn=cb<0?cj+cb:0;var ce=cb<0?0:cj-cb;for(i=Math.abs(cb)-1;i>=0;i--){var ch=cd[cn];try{cl.removeChild(ch);}catch(co){break;}}if(!this.__wP){this.__wP=document.createElement(E);}var ck=e;ck+=this._getRowsHtml(ci+ce,Math.abs(cb));ck+=h;this.__wP.innerHTML=ck;var cf=this.__wP.firstChild.childNodes;if(cb>0){for(var i=cf.length-1;i>=0;i--){var ch=cf[0];cl.appendChild(ch);}}else{for(var i=cf.length-1;i>=0;i--){var ch=cf[cf.length-1];cl.insertBefore(ch,cl.firstChild);}}if(this.__wQ!==null){this._updateRowStyles(this.__wQ-cb);this._updateRowStyles(this.__wQ);}this.fireEvent(f);},_updateAllRows:function(){var cs=this.getContentElement().getDomElement();if(!cs){this.addListenerOnce(t,arguments.callee,this);return;}var cy=this.getTable();var cv=cy.getTableModel();var cx=this.getPaneScroller().getTablePaneModel();var cw=cx.getColumnCount();var cp=cy.getRowHeight();var ct=this.getFirstVisibleRow();var cq=this.getVisibleRowCount();var cz=cv.getRowCount();if(ct+cq>cz){cq=Math.max(0,cz-ct);}var cr=cx.getTotalWidth();var cu;if(cq>0){cu=[l,A,(cy.getForceLineHeight()?u+cp+p:k),c,n,this._getRowsHtml(ct,cq),d];}else{cu=[];}var cA=cu.join(k);cs.innerHTML=cA;this.setWidth(cr);this.__wM=cw;this.__wN=cq;this.fireEvent(f);}},destruct:function(){this.__wP=this.__wL=this.__wO=null;}});})();(function(){var c="hovered",b="__wX",a="qx.ui.table.pane.Header";qx.Class.define(a,{extend:qx.ui.core.Widget,construct:function(d){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.layout.HBox());this.__wW=new qx.ui.core.Blocker(this);this.__wX=d;},members:{__wX:null,__wY:null,__xa:null,__wW:null,getPaneScroller:function(){return this.__wX;},getTable:function(){return this.__wX.getTable();},getBlocker:function(){return this.__wW;},onColOrderChanged:function(){this._updateContent(true);},onPaneModelChanged:function(){this._updateContent(true);},onTableModelMetaDataChanged:function(){this._updateContent();},setColumnWidth:function(e,f,g){var h=this.getHeaderWidgetAtColumn(e);if(h!=null){h.setWidth(f);}},setMouseOverColumn:function(i){if(i!=this.__xa){if(this.__xa!=null){var j=this.getHeaderWidgetAtColumn(this.__xa);if(j!=null){j.removeState(c);}}if(i!=null){this.getHeaderWidgetAtColumn(i).addState(c);}this.__xa=i;}},getHeaderWidgetAtColumn:function(k){var l=this.getPaneScroller().getTablePaneModel().getX(k);return this._getChildren()[l];},showColumnMoveFeedback:function(m,x){var q=this.getContainerLocation();if(this.__wY==null){var v=this.getTable();var n=this.getPaneScroller().getTablePaneModel().getX(m);var p=this._getChildren()[n];var r=v.getTableModel();var t=v.getTableColumnModel();var u={xPos:n,col:m,name:r.getColumnName(m),table:v};var s=t.getHeaderCellRenderer(m);var o=s.createHeaderCell(u);var w=p.getBounds();o.setWidth(w.width);o.setHeight(w.height);o.setZIndex(1000000);o.setOpacity(0.8);o.setLayoutProperties({top:q.top});this.getApplicationRoot().add(o);this.__wY=o;}this.__wY.setLayoutProperties({left:q.left+x});this.__wY.show();},hideColumnMoveFeedback:function(){if(this.__wY!=null){this.__wY.destroy();this.__wY=null;}},isShowingColumnMoveFeedback:function(){return this.__wY!=null;},_updateContent:function(y){var I=this.getTable();var C=I.getTableModel();var F=I.getTableColumnModel();var H=this.getPaneScroller().getTablePaneModel();var K=this._getChildren();var D=H.getColumnCount();var G=C.getSortColumnIndex();if(y){this._cleanUpCells();}var z={};z.sortedAscending=C.isSortAscending();for(var x=0;x<D;x++){var B=H.getColumnAtX(x);if(B===undefined){continue;}var J=F.getColumnWidth(B);var E=F.getHeaderCellRenderer(B);z.xPos=x;z.col=B;z.name=C.getColumnName(B);z.editable=C.isColumnEditable(B);z.sorted=(B==G);z.table=I;var A=K[x];if(A==null){A=E.createHeaderCell(z);A.set({width:J});this._add(A);}else{E.updateHeaderCell(z,A);}}},_cleanUpCells:function(){var M=this._getChildren();for(var x=M.length-1;x>=0;x--){var L=M[x];L.destroy();}}},destruct:function(){this.__wW.dispose();this._disposeObjects(b);}});})();(function(){var m="Boolean",l="resize-line",k="mousedown",j="qx.event.type.Data",i="mouseup",h="qx.ui.table.pane.CellEvent",g="scroll",d="focus-indicator",c="excluded",b="scrollbar-y",bm="table-scroller-focus-indicator",bl="visible",bk="mousemove",bj="header",bi="editing",bh="click",bg="modelChanged",bf="scrollbar-x",be="cellClick",bd="pane",t="__xi",u="__xc",r="mouseout",s="__xh",p="changeHorizontalScrollBarVisible",q="bottom",n="_applyScrollTimeout",o="changeScrollX",z="_applyTablePaneModel",A="Integer",I="__xg",G="dblclick",Q="dataEdited",L="mousewheel",Y="interval",V="qx.ui.table.pane.Scroller",C="__xk",bc="_applyShowCellFocusIndicator",bb="__xe",ba="resize",B="vertical",E="changeScrollY",F="appear",H="table-scroller",J="beforeSort",M="__xd",S="cellDblclick",X="horizontal",v="losecapture",w="contextmenu",D="col-resize",P="disappear",O="_applyVerticalScrollBarVisible",N="_applyHorizontalScrollBarVisible",U="cellContextmenu",T="__xj",K="close",R="changeTablePaneModel",a="__xf",W="qx.ui.table.pane.Model",y="changeVerticalScrollBarVisible";qx.Class.define(V,{extend:qx.ui.core.Widget,include:qx.ui.core.scroll.MScrollBarFactory,construct:function(bn){qx.ui.core.Widget.call(this);this.__xb=bn;var bo=new qx.ui.layout.Grid();bo.setColumnFlex(0,1);bo.setRowFlex(1,1);this._setLayout(bo);this.__xc=this._showChildControl(bf);this.__xd=this._showChildControl(b);this.__xe=this._showChildControl(bj);this.__xf=this._showChildControl(bd);this.__xg=new qx.ui.container.Composite(new qx.ui.layout.HBox()).set({minWidth:0});this._add(this.__xg,{row:0,column:0,colSpan:2});this.__xh=new qx.ui.table.pane.Clipper();this.__xh.add(this.__xe);this.__xh.addListener(v,this._onChangeCaptureHeader,this);this.__xh.addListener(bk,this._onMousemoveHeader,this);this.__xh.addListener(k,this._onMousedownHeader,this);this.__xh.addListener(i,this._onMouseupHeader,this);this.__xh.addListener(bh,this._onClickHeader,this);this.__xg.add(this.__xh,{flex:1});this.__xi=new qx.ui.table.pane.Clipper();this.__xi.add(this.__xf);this.__xi.addListener(L,this._onMousewheel,this);this.__xi.addListener(bk,this._onMousemovePane,this);this.__xi.addListener(k,this._onMousedownPane,this);this.__xi.addListener(i,this._onMouseupPane,this);this.__xi.addListener(bh,this._onClickPane,this);this.__xi.addListener(w,this._onContextMenu,this);this.__xi.addListener(G,this._onDblclickPane,this);this.__xi.addListener(ba,this._onResizePane,this);this._add(this.__xi,{row:1,column:0});this.__xj=this.getChildControl(d);this.initShowCellFocusIndicator();this.getChildControl(l).hide();this.addListener(r,this._onMouseout,this);this.addListener(F,this._onAppear,this);this.addListener(P,this._onDisappear,this);this.__xk=new qx.event.Timer();this.__xk.addListener(Y,this._oninterval,this);this.initScrollTimeout();},statics:{MIN_COLUMN_WIDTH:10,RESIZE_REGION_RADIUS:5,CLICK_TOLERANCE:5,HORIZONTAL_SCROLLBAR:1,VERTICAL_SCROLLBAR:2},events:{"changeScrollY":j,"changeScrollX":j,"cellClick":h,"cellDblclick":h,"cellContextmenu":h,"beforeSort":j},properties:{horizontalScrollBarVisible:{check:m,init:true,apply:N,event:p},verticalScrollBarVisible:{check:m,init:true,apply:O,event:y},tablePaneModel:{check:W,apply:z,event:R},liveResize:{check:m,init:false},focusCellOnMouseMove:{check:m,init:false},selectBeforeFocus:{check:m,init:false},showCellFocusIndicator:{check:m,init:true,apply:bc},resetSelectionOnHeaderClick:{check:m,init:true},scrollTimeout:{check:A,init:100,apply:n},appearance:{refine:true,init:H}},members:{__xl:null,__xb:null,__xm:null,__xn:null,__xo:null,__xp:null,__xq:null,__xr:null,__xs:null,__xt:null,__xu:null,__xv:null,__xw:null,__xx:null,__xy:false,__xz:null,__xA:null,__xB:null,__xC:null,__xD:null,__xE:null,__xF:null,__xG:null,__xc:null,__xd:null,__xe:null,__xh:null,__xf:null,__xi:null,__xj:null,__xg:null,__xk:null,getPaneInsetRight:function(){var bq=this.getTopRightWidget();var br=bq&&bq.isVisible()&&bq.getBounds()?bq.getBounds().width:0;var bp=this.getVerticalScrollBarVisible()?this.getVerticalScrollBarWidth():0;return Math.max(br,bp);},setPaneWidth:function(bs){if(this.isVerticalScrollBarVisible()){bs+=this.getPaneInsetRight();}this.setWidth(bs);},_createChildControlImpl:function(bt,bu){var bv;switch(bt){case bj:bv=(this.getTable().getNewTablePaneHeader())(this);break;case bd:bv=(this.getTable().getNewTablePane())(this);break;case d:bv=new qx.ui.table.pane.FocusIndicator(this);bv.setUserBounds(0,0,0,0);bv.setZIndex(1000);bv.addListener(i,this._onMouseupFocusIndicator,this);this.__xi.add(bv);bv.show();bv.setDecorator(null);break;case l:bv=new qx.ui.core.Widget();bv.setUserBounds(0,0,0,0);bv.setZIndex(1000);this.__xi.add(bv);break;case bf:bv=this._createScrollBar(X).set({minWidth:0,alignY:q});bv.addListener(g,this._onScrollX,this);this._add(bv,{row:2,column:0});break;case b:bv=this._createScrollBar(B);bv.addListener(g,this._onScrollY,this);this._add(bv,{row:1,column:1});break;}return bv||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,bt);},_applyHorizontalScrollBarVisible:function(bw,bx){this.__xc.setVisibility(bw?bl:c);},_applyVerticalScrollBarVisible:function(by,bz){this.__xd.setVisibility(by?bl:c);},_applyTablePaneModel:function(bA,bB){if(bB!=null){bB.removeListener(bg,this._onPaneModelChanged,this);}bA.addListener(bg,this._onPaneModelChanged,this);},_applyShowCellFocusIndicator:function(bC,bD){if(bC){this.__xj.setDecorator(bm);this._updateFocusIndicator();}else{if(this.__xj){this.__xj.setDecorator(null);}}},getScrollY:function(){return this.__xd.getPosition();},setScrollY:function(scrollY,bE){this.__xd.scrollTo(scrollY);if(bE){this._updateContent();}},getScrollX:function(){return this.__xc.getPosition();},setScrollX:function(scrollX){this.__xc.scrollTo(scrollX);},getTable:function(){return this.__xb;},onColVisibilityChanged:function(){this.updateHorScrollBarMaximum();this._updateFocusIndicator();},setColumnWidth:function(bF,bG){this.__xe.setColumnWidth(bF,bG);this.__xf.setColumnWidth(bF,bG);var bH=this.getTablePaneModel();var x=bH.getX(bF);if(x!=-1){this.updateHorScrollBarMaximum();this._updateFocusIndicator();}},onColOrderChanged:function(){this.__xe.onColOrderChanged();this.__xf.onColOrderChanged();this.updateHorScrollBarMaximum();},onTableModelDataChanged:function(bI,bJ,bK,bL){this.__xf.onTableModelDataChanged(bI,bJ,bK,bL);var bM=this.getTable().getTableModel().getRowCount();if(bM!=this.__xl){this.updateVerScrollBarMaximum();if(this.getFocusedRow()>=bM){if(bM==0){this.setFocusedCell(null,null);}else{this.setFocusedCell(this.getFocusedColumn(),bM-1);}}this.__xl=bM;}},onSelectionChanged:function(){this.__xf.onSelectionChanged();},onFocusChanged:function(){this.__xf.onFocusChanged();},onTableModelMetaDataChanged:function(){this.__xe.onTableModelMetaDataChanged();this.__xf.onTableModelMetaDataChanged();},_onPaneModelChanged:function(){this.__xe.onPaneModelChanged();this.__xf.onPaneModelChanged();},_onResizePane:function(){this.updateHorScrollBarMaximum();this.updateVerScrollBarMaximum();this._updateContent();this.__xe._updateContent();this.__xb._updateScrollBarVisibility();},updateHorScrollBarMaximum:function(){var bQ=this.__xi.getInnerSize();if(!bQ){return ;}var bO=this.getTablePaneModel().getTotalWidth();var bP=this.__xc;if(bQ.width<bO){var bN=Math.max(0,bO-bQ.width);bP.setMaximum(bN);bP.setKnobFactor(bQ.width/bO);var bR=bP.getPosition();bP.setPosition(Math.min(bR,bN));}else{bP.setMaximum(0);bP.setKnobFactor(1);bP.setPosition(0);}},updateVerScrollBarMaximum:function(){var ca=this.__xi.getInnerSize();if(!ca){return ;}var bX=this.getTable().getTableModel();var bT=bX.getRowCount();if(this.getTable().getKeepFirstVisibleRowComplete()){bT+=1;}var bS=this.getTable().getRowHeight();var bV=bT*bS;var bY=this.__xd;if(ca.height<bV){var bU=Math.max(0,bV-ca.height);bY.setMaximum(bU);bY.setKnobFactor(ca.height/bV);var bW=bY.getPosition();bY.setPosition(Math.min(bW,bU));}else{bY.setMaximum(0);bY.setKnobFactor(1);bY.setPosition(0);}},onKeepFirstVisibleRowCompleteChanged:function(){this.updateVerScrollBarMaximum();this._updateContent();},_onAppear:function(){this._startInterval(this.getScrollTimeout());},_onDisappear:function(){this._stopInterval();},_onScrollX:function(e){var cb=e.getData();this.fireDataEvent(o,cb,e.getOldData());this.__xh.scrollToX(cb);this.__xi.scrollToX(cb);},_onScrollY:function(e){this.fireDataEvent(E,e.getData(),e.getOldData());this._postponedUpdateContent();},_onMousewheel:function(e){var cc=this.getTable();if(!cc.getEnabled()){return;}var ce=qx.bom.client.Engine.GECKO?1:3;var cd=this.__xd.getPosition()+((e.getWheelDelta()*ce)*cc.getRowHeight());this.__xd.scrollTo(cd);if(this.__xA&&this.getFocusCellOnMouseMove()){this._focusCellAtPagePos(this.__xA,this.__xB);}e.stop();},__xH:function(cf){var ck=this.getTable();var cl=this.__xe.getHeaderWidgetAtColumn(this.__xu);var cg=cl.getSizeHint().minWidth;var ci=Math.max(cg,this.__xw+cf-this.__xv);if(this.getLiveResize()){var ch=ck.getTableColumnModel();ch.setColumnWidth(this.__xu,ci,true);}else{this.__xe.setColumnWidth(this.__xu,ci,true);var cj=this.getTablePaneModel();this._showResizeLine(cj.getColumnLeft(this.__xu)+ci);}this.__xv+=ci-this.__xw;this.__xw=ci;},__xI:function(cm){var cn=qx.ui.table.pane.Scroller.CLICK_TOLERANCE;if(this.__xe.isShowingColumnMoveFeedback()||cm>this.__xt+cn||cm<this.__xt-cn){this.__xq+=cm-this.__xt;this.__xe.showColumnMoveFeedback(this.__xp,this.__xq);var co=this.__xb.getTablePaneScrollerAtPageX(cm);if(this.__xs&&this.__xs!=co){this.__xs.hideColumnMoveFeedback();}if(co!=null){this.__xr=co.showColumnMoveFeedback(cm);}else{this.__xr=null;}this.__xs=co;this.__xt=cm;}},_onMousemoveHeader:function(e){var cv=this.getTable();if(!cv.getEnabled()){return;}var cw=false;var cp=null;var ct=e.getDocumentLeft();var cu=e.getDocumentTop();this.__xA=ct;this.__xB=cu;if(this.__xu!=null){this.__xH(ct);cw=true;e.stopPropagation();}else if(this.__xp!=null){this.__xI(ct);e.stopPropagation();}else{var cq=this._getResizeColumnForPageX(ct);if(cq!=-1){cw=true;}else{var cs=cv.getTableModel();var cx=this._getColumnForPageX(ct);if(cx!=null&&cs.isColumnSortable(cx)){cp=cx;}}}var cr=cw?D:null;this.getApplicationRoot().setGlobalCursor(cr);this.setCursor(cr);this.__xe.setMouseOverColumn(cp);},_onMousemovePane:function(e){var cy=this.getTable();if(!cy.getEnabled()){return;}var cA=e.getDocumentLeft();var cB=e.getDocumentTop();this.__xA=cA;this.__xB=cB;var cz=this._getRowForPagePos(cA,cB);if(cz!=null&&this._getColumnForPageX(cA)!=null){if(this.getFocusCellOnMouseMove()){this._focusCellAtPagePos(cA,cB);}}this.__xe.setMouseOverColumn(null);},_onMousedownHeader:function(e){if(!this.getTable().getEnabled()){return;}var cD=e.getDocumentLeft();var cE=this._getResizeColumnForPageX(cD);if(cE!=-1){this._startResizeHeader(cE,cD);e.stop();}else{var cC=this._getColumnForPageX(cD);if(cC!=null){this._startMoveHeader(cC,cD);e.stop();}}},_startResizeHeader:function(cF,cG){var cH=this.getTable().getTableColumnModel();this.__xu=cF;this.__xv=cG;this.__xw=cH.getColumnWidth(this.__xu);this.__xh.capture();},_startMoveHeader:function(cI,cJ){this.__xp=cI;this.__xt=cJ;this.__xq=this.getTablePaneModel().getColumnLeft(cI);this.__xh.capture();},_onMousedownPane:function(e){var cN=this.getTable();if(!cN.getEnabled()){return;}if(cN.isEditing()){cN.stopEditing();}var cK=e.getDocumentLeft();var cM=e.getDocumentTop();var cP=this._getRowForPagePos(cK,cM);var cO=this._getColumnForPageX(cK);if(cP!==null){this.__xx={row:cP,col:cO};this.__xy=false;var cL=this.getSelectBeforeFocus();if(cL){cN.getSelectionManager().handleMouseDown(cP,e);}if(!this.getFocusCellOnMouseMove()){this._focusCellAtPagePos(cK,cM);}if(!cL){cN.getSelectionManager().handleMouseDown(cP,e);}}},_onMouseupFocusIndicator:function(e){if(this.__xx&&!this.__xy&&!this.isEditing()&&this.__xj.getRow()==this.__xx.row&&this.__xj.getColumn()==this.__xx.col){this.fireEvent(be,qx.ui.table.pane.CellEvent,[this,e,this.__xx.row,this.__xx.col],true);this.__xy=true;}else if(!this.isEditing()){this._onMousedownPane(e);}},_onChangeCaptureHeader:function(e){if(this.__xu!=null){this._stopResizeHeader();}if(this.__xp!=null){this._stopMoveHeader();}},_stopResizeHeader:function(){var cQ=this.getTable().getTableColumnModel();if(!this.getLiveResize()){this._hideResizeLine();cQ.setColumnWidth(this.__xu,this.__xw,true);}this.__xu=null;this.__xh.releaseCapture();this.getApplicationRoot().setGlobalCursor(null);this.setCursor(null);if(this.isEditing()){var cR=this.__xE.getBounds().height;this.__xE.setUserBounds(0,0,this.__xw,cR);}},_stopMoveHeader:function(){var cW=this.getTable().getTableColumnModel();var cX=this.getTablePaneModel();this.__xe.hideColumnMoveFeedback();if(this.__xs){this.__xs.hideColumnMoveFeedback();}if(this.__xr!=null){var da=cX.getFirstColumnX()+cX.getX(this.__xp);var cV=this.__xr;if(cV!=da&&cV!=da+1){var cY=cW.getVisibleColumnAtX(da);var cU=cW.getVisibleColumnAtX(cV);var cT=cW.getOverallX(cY);var cS=(cU!=null)?cW.getOverallX(cU):cW.getOverallColumnCount();if(cS>cT){cS--;}cW.moveColumn(cT,cS);this._updateFocusIndicator();}}this.__xp=null;this.__xr=null;this.__xh.releaseCapture();},_onMouseupPane:function(e){var db=this.getTable();if(!db.getEnabled()){return;}var dc=this._getRowForPagePos(e.getDocumentLeft(),e.getDocumentTop());if(dc!=-1&&dc!=null&&this._getColumnForPageX(e.getDocumentLeft())!=null){db.getSelectionManager().handleMouseUp(dc,e);}},_onMouseupHeader:function(e){var dd=this.getTable();if(!dd.getEnabled()){return;}if(this.__xu!=null){this._stopResizeHeader();this.__xz=true;e.stop();}else if(this.__xp!=null){this._stopMoveHeader();e.stop();}},_onClickHeader:function(e){if(this.__xz){this.__xz=false;return;}var di=this.getTable();if(!di.getEnabled()){return;}var dg=di.getTableModel();var dh=e.getDocumentLeft();var df=this._getResizeColumnForPageX(dh);if(df==-1){var dl=this._getColumnForPageX(dh);if(dl!=null&&dg.isColumnSortable(dl)){var de=dg.getSortColumnIndex();var dj=(dl!=de)?true:!dg.isSortAscending();var dk={column:dl,ascending:dj,clickEvent:e};if(this.fireDataEvent(J,dk,null,true)){dg.sortByColumn(dl,dj);if(this.getResetSelectionOnHeaderClick()){di.getSelectionModel().resetSelection();}}}}e.stop();},_onClickPane:function(e){var dm=this.getTable();if(!dm.getEnabled()){return;}var dq=e.getDocumentLeft();var dr=e.getDocumentTop();var dn=this._getRowForPagePos(dq,dr);var dp=this._getColumnForPageX(dq);if(dn!=null&&dp!=null){dm.getSelectionManager().handleClick(dn,e);if(this.__xj.isHidden()||(this.__xx&&!this.__xy&&!this.isEditing()&&dn==this.__xx.row&&dp==this.__xx.col)){this.fireEvent(be,qx.ui.table.pane.CellEvent,[this,e,dn,dp],true);this.__xy=true;}}},_onContextMenu:function(e){var dv=e.getDocumentLeft();var dw=e.getDocumentTop();var dt=this._getRowForPagePos(dv,dw);var du=this._getColumnForPageX(dv);if(this.__xj.isHidden()||(this.__xx&&dt==this.__xx.row&&du==this.__xx.col)){this.fireEvent(U,qx.ui.table.pane.CellEvent,[this,e,dt,du],true);var ds=this.getTable().getContextMenu();if(ds){if(ds.getChildren().length>0){ds.openAtMouse(e);}else{ds.exclude();}e.preventDefault();}}},_onContextMenuOpen:function(e){},_onDblclickPane:function(e){var dy=e.getDocumentLeft();var dz=e.getDocumentTop();this._focusCellAtPagePos(dy,dz);this.startEditing();var dx=this._getRowForPagePos(dy,dz);if(dx!=-1&&dx!=null){this.fireEvent(S,qx.ui.table.pane.CellEvent,[this,e,dx],true);}},_onMouseout:function(e){var dA=this.getTable();if(!dA.getEnabled()){return;}if(this.__xu==null){this.setCursor(null);this.getApplicationRoot().setGlobalCursor(null);}this.__xe.setMouseOverColumn(null);},_showResizeLine:function(x){var dC=this._showChildControl(l);var dB=dC.getWidth();var dD=this.__xi.getBounds();dC.setUserBounds(x-Math.round(dB/2),0,dB,dD.height);},_hideResizeLine:function(){this._excludeChildControl(l);},showColumnMoveFeedback:function(dE){var dN=this.getTablePaneModel();var dM=this.getTable().getTableColumnModel();var dH=this.__xf.getContainerLocation().left;var dL=dN.getColumnCount();var dI=0;var dG=0;var dQ=dH;for(var dF=0;dF<dL;dF++){var dJ=dN.getColumnAtX(dF);var dO=dM.getColumnWidth(dJ);if(dE<dQ+dO/2){break;}dQ+=dO;dI=dF+1;dG=dQ-dH;}var dK=this.__xi.getContainerLocation().left;var dP=this.__xi.getBounds().width;var scrollX=dK-dH;dG=qx.lang.Number.limit(dG,scrollX+2,scrollX+dP-1);this._showResizeLine(dG);return dN.getFirstColumnX()+dI;},hideColumnMoveFeedback:function(){this._hideResizeLine();},_focusCellAtPagePos:function(dR,dS){var dU=this._getRowForPagePos(dR,dS);if(dU!=-1&&dU!=null){var dT=this._getColumnForPageX(dR);this.__xb.setFocusedCell(dT,dU);}},setFocusedCell:function(dV,dW){if(!this.isEditing()){this.__xf.setFocusedCell(dV,dW,this.__xn);this.__xC=dV;this.__xD=dW;this._updateFocusIndicator();}},getFocusedColumn:function(){return this.__xC;},getFocusedRow:function(){return this.__xD;},scrollCellVisible:function(dX,dY){var ej=this.getTablePaneModel();var ea=ej.getX(dX);if(ea!=-1){var eg=this.__xi.getInnerSize();if(!eg){return;}var eh=this.getTable().getTableColumnModel();var ed=ej.getColumnLeft(dX);var ek=eh.getColumnWidth(dX);var eb=this.getTable().getRowHeight();var el=dY*eb;var scrollX=this.getScrollX();var scrollY=this.getScrollY();var ei=Math.min(ed,ed+ek-eg.width);var ef=ed;this.setScrollX(Math.max(ei,Math.min(ef,scrollX)));var ec=el+eb-eg.height;if(this.getTable().getKeepFirstVisibleRowComplete()){ec+=eb;}var ee=el;this.setScrollY(Math.max(ec,Math.min(ee,scrollY)),true);}},isEditing:function(){return this.__xE!=null;},startEditing:function(){var eq=this.getTable();var eo=eq.getTableModel();var es=this.__xC;if(!this.isEditing()&&(es!=null)&&eo.isColumnEditable(es)){var et=this.__xD;var em=this.getTablePaneModel().getX(es);var en=eo.getValue(es,et);this.__xF=eq.getTableColumnModel().getCellEditorFactory(es);var ep={col:es,row:et,xPos:em,value:en,table:eq};this.__xE=this.__xF.createCellEditor(ep);if(this.__xE===null){return false;}else if(this.__xE instanceof qx.ui.window.Window){this.__xE.setModal(true);this.__xE.setShowClose(false);this.__xE.addListener(K,this._onCellEditorModalWindowClose,this);var f=eq.getModalCellEditorPreOpenFunction();if(f!=null){f(this.__xE,ep);}this.__xE.open();}else{var er=this.__xj.getInnerSize();this.__xE.setUserBounds(0,0,er.width,er.height);this.__xj.addListener(k,function(e){this.__xx={row:this.__xD,col:this.__xC};e.stopPropagation();},this);this.__xj.add(this.__xE);this.__xj.addState(bi);this.__xj.setKeepActive(false);this.__xj.setDecorator(bm);this.__xE.focus();this.__xE.activate();}return true;}return false;},stopEditing:function(){if(!this.getShowCellFocusIndicator()){this.__xj.setDecorator(null);}this.flushEditor();this.cancelEditing();},flushEditor:function(){if(this.isEditing()){var ev=this.__xF.getCellEditorValue(this.__xE);var eu=this.getTable().getTableModel().getValue(this.__xC,this.__xD);this.getTable().getTableModel().setValue(this.__xC,this.__xD,ev);this.__xb.focus();this.__xb.fireDataEvent(Q,{row:this.__xD,col:this.__xC,oldValue:eu,value:ev});}},cancelEditing:function(){if(this.isEditing()&&!this.__xE.pendingDispose){if(this._cellEditorIsModalWindow){this.__xE.destroy();this.__xE=null;this.__xF=null;this.__xE.pendingDispose=true;}else{this.__xj.removeState(bi);this.__xj.setKeepActive(true);this.__xE.destroy();this.__xE=null;this.__xF=null;}}},_onCellEditorModalWindowClose:function(e){this.stopEditing();},_getColumnForPageX:function(ew){var ez=this.getTable().getTableColumnModel();var eA=this.getTablePaneModel();var ey=eA.getColumnCount();var eC=this.__xe.getContainerLocation().left;for(var x=0;x<ey;x++){var ex=eA.getColumnAtX(x);var eB=ez.getColumnWidth(ex);eC+=eB;if(ew<eC){return ex;}}return null;},_getResizeColumnForPageX:function(eD){var eH=this.getTable().getTableColumnModel();var eI=this.getTablePaneModel();var eG=eI.getColumnCount();var eK=this.__xe.getContainerLocation().left;var eE=qx.ui.table.pane.Scroller.RESIZE_REGION_RADIUS;for(var x=0;x<eG;x++){var eF=eI.getColumnAtX(x);var eJ=eH.getColumnWidth(eF);eK+=eJ;if(eD>=(eK-eE)&&eD<=(eK+eE)){return eF;}}return -1;},_getRowForPagePos:function(eL,eM){var eN=this.__xf.getContentLocation();if(eL<eN.left||eL>eN.right){return null;}if(eM>=eN.top&&eM<=eN.bottom){var eO=this.getTable().getRowHeight();var scrollY=this.__xd.getPosition();if(this.getTable().getKeepFirstVisibleRowComplete()){scrollY=Math.floor(scrollY/eO)*eO;}var eR=scrollY+eM-eN.top;var eT=Math.floor(eR/eO);var eS=this.getTable().getTableModel();var eP=eS.getRowCount();return (eT<eP)?eT:null;}var eQ=this.__xe.getContainerLocation();if(eM>=eQ.top&&eM<=eQ.bottom&&eL<=eQ.right){return -1;}return null;},setTopRightWidget:function(eU){var eV=this.__xG;if(eV!=null){this.__xg.remove(eV);}if(eU!=null){this.__xg.add(eU);}this.__xG=eU;},getTopRightWidget:function(){return this.__xG;},getHeader:function(){return this.__xe;},getTablePane:function(){return this.__xf;},getVerticalScrollBarWidth:function(){var eW=this.__xd;return eW.isVisible()?(eW.getSizeHint().width||0):0;},getNeededScrollBars:function(eX,eY){var ff=this.__xd.getSizeHint().width;var fg=this.__xi.getInnerSize();var fa=fg?fg.width:0;if(this.getVerticalScrollBarVisible()){fa+=ff;}var fj=fg?fg.height:0;if(this.getHorizontalScrollBarVisible()){fj+=ff;}var fd=this.getTable().getTableModel();var fh=fd.getRowCount();var fk=this.getTablePaneModel().getTotalWidth();var fi=this.getTable().getRowHeight()*fh;var fc=false;var fl=false;if(fk>fa){fc=true;if(fi>fj-ff){fl=true;}}else if(fi>fj){fl=true;if(!eY&&(fk>fa-ff)){fc=true;}}var fe=qx.ui.table.pane.Scroller.HORIZONTAL_SCROLLBAR;var fb=qx.ui.table.pane.Scroller.VERTICAL_SCROLLBAR;return ((eX||fc)?fe:0)|((eY||!fl)?0:fb);},getPaneClipper:function(){return this.__xi;},_applyScrollTimeout:function(fm,fn){this._startInterval(fm);},_startInterval:function(fo){this.__xk.setInterval(fo);this.__xk.start();},_stopInterval:function(){this.__xk.stop();},_postponedUpdateContent:function(){this._updateContent();},_oninterval:qx.event.GlobalError.observeMethod(function(){if(this.__xn&&!this.__xf._layoutPending){this.__xn=false;this._updateContent();}}),_updateContent:function(){var ft=this.__xi.getInnerSize();if(!ft){return;}var fw=ft.height;var scrollX=this.__xc.getPosition();var scrollY=this.__xd.getPosition();var fq=this.getTable().getRowHeight();var fr=Math.floor(scrollY/fq);var fv=this.__xf.getFirstVisibleRow();this.__xf.setFirstVisibleRow(fr);var fs=Math.ceil(fw/fq);var fp=0;var fu=this.getTable().getKeepFirstVisibleRowComplete();if(!fu){fs++;fp=scrollY%fq;}this.__xf.setVisibleRowCount(fs);if(fr!=fv){this._updateFocusIndicator();}this.__xi.scrollToX(scrollX);if(!fu){this.__xi.scrollToY(fp);}},_updateFocusIndicator:function(){var fx=this.getTable();if(!fx.getEnabled()){return;}this.__xj.moveToCell(this.__xC,this.__xD);}},destruct:function(){this._stopInterval();var fy=this.getTablePaneModel();if(fy){fy.dispose();}this.__xx=this.__xG=this.__xb=null;this._disposeObjects(u,M,s,t,T,bb,a,I,C);}});})();(function(){var a="qx.ui.table.pane.Clipper";qx.Class.define(a,{extend:qx.ui.container.Composite,construct:function(){qx.ui.container.Composite.call(this,new qx.ui.layout.Grow());this.setMinWidth(0);},members:{scrollToX:function(b){this.getContentElement().scrollToX(b,false);},scrollToY:function(c){this.getContentElement().scrollToY(c,true);}}});})();(function(){var g="Integer",f="Escape",d="keypress",c="Enter",b="excluded",a="qx.ui.table.pane.FocusIndicator";qx.Class.define(a,{extend:qx.ui.container.Composite,construct:function(h){qx.ui.container.Composite.call(this);this.__xJ=h;this.setKeepActive(true);this.addListener(d,this._onKeyPress,this);},properties:{visibility:{refine:true,init:b},row:{check:g,nullable:true},column:{check:g,nullable:true}},members:{__xJ:null,_onKeyPress:function(e){var i=e.getKeyIdentifier();if(i!==f&&i!==c){e.stopPropagation();}},moveToCell:function(j,k){if(!this.__xJ.getShowCellFocusIndicator()&&!this.__xJ.getTable().getTableModel().isColumnEditable(j)){this.exclude();return;}else{this.show();}if(j==null){this.hide();this.setRow(null);this.setColumn(null);}else{var l=this.__xJ.getTablePaneModel().getX(j);if(l==-1){this.hide();this.setRow(null);this.setColumn(null);}else{var q=this.__xJ.getTable();var o=q.getTableColumnModel();var p=this.__xJ.getTablePaneModel();var n=this.__xJ.getTablePane().getFirstVisibleRow();var m=q.getRowHeight();this.setUserBounds(p.getColumnLeft(j)-2,(k-n)*m-2,o.getColumnWidth(j)+3,m+3);this.show();this.setRow(k);this.setColumn(j);}}}},destruct:function(){this.__xJ=null;}});})();(function(){var b="Integer",a="qx.ui.table.pane.CellEvent";qx.Class.define(a,{extend:qx.event.type.Mouse,properties:{row:{check:b,nullable:true},column:{check:b,nullable:true}},members:{init:function(c,d,e,f){d.clone(this);this.setBubbles(false);if(e!=null){this.setRow(e);}else{this.setRow(c._getRowForPagePos(this.getDocumentLeft(),this.getDocumentTop()));}if(f!=null){this.setColumn(f);}else{this.setColumn(c._getColumnForPageX(this.getDocumentLeft()));}},clone:function(g){var h=qx.event.type.Mouse.prototype.clone.call(this,g);h.set({row:this.getRow(),column:this.getColumn()});return h;}}});})();(function(){var a="qx.lang.Number";qx.Class.define(a,{statics:{isInRange:function(b,c,d){return b>=c&&b<=d;},isBetweenRange:function(e,f,g){return e>f&&e<g;},limit:function(h,i,j){if(j!=null&&h>j){return j;}else if(i!=null&&h<i){return i;}else{return h;}}}});})();(function(){var l="move",k="Boolean",j="mouseup",i="mousedown",h="losecapture",g="qx.ui.core.MMovable",f="__Y",d="__ba",c="mousemove",b="maximized",a="move-frame";qx.Mixin.define(g,{properties:{movable:{check:k,init:true},useMoveFrame:{check:k,init:false}},members:{__Y:null,__ba:null,__bb:null,__bc:null,__bd:null,__be:null,__bf:null,__bg:false,__bh:null,__bi:0,_activateMoveHandle:function(m){if(this.__Y){throw new Error("The move handle could not be redefined!");}this.__Y=m;m.addListener(i,this._onMoveMouseDown,this);m.addListener(j,this._onMoveMouseUp,this);m.addListener(c,this._onMoveMouseMove,this);m.addListener(h,this.__bm,this);},__bj:function(){var n=this.__ba;if(!n){n=this.__ba=new qx.ui.core.Widget();n.setAppearance(a);n.exclude();qx.core.Init.getApplication().getRoot().add(n);}return n;},__bk:function(){var location=this.getContainerLocation();var p=this.getBounds();var o=this.__bj();o.setUserBounds(location.left,location.top,p.width,p.height);o.show();o.setZIndex(this.getZIndex()+1);},__bl:function(e){var r=this.__bb;var u=Math.max(r.left,Math.min(r.right,e.getDocumentLeft()));var t=Math.max(r.top,Math.min(r.bottom,e.getDocumentTop()));var q=this.__bc+u;var s=this.__bd+t;return {viewportLeft:q,viewportTop:s,parentLeft:q-this.__be,parentTop:s-this.__bf};},_onMoveMouseDown:function(e){if(!this.getMovable()||this.hasState(b)){return;}var parent=this.getLayoutParent();var w=parent.getContentLocation();var x=parent.getBounds();if(qx.Class.implementsInterface(parent,qx.ui.window.IDesktop)){if(!parent.isContentBlocked()){this.__bh=parent.getBlockerColor();this.__bi=parent.getBlockerOpacity();parent.setBlockerColor(null);parent.setBlockerOpacity(1);parent.blockContent(this.getZIndex()-1);this.__bg=true;}}this.__bb={left:w.left,top:w.top,right:w.left+x.width,bottom:w.top+x.height};var v=this.getContainerLocation();this.__be=w.left;this.__bf=w.top;this.__bc=v.left-e.getDocumentLeft();this.__bd=v.top-e.getDocumentTop();this.addState(l);this.__Y.capture();if(this.getUseMoveFrame()){this.__bk();}e.stop();},_onMoveMouseMove:function(e){if(!this.hasState(l)){return;}var y=this.__bl(e);if(this.getUseMoveFrame()){this.__bj().setDomPosition(y.viewportLeft,y.viewportTop);}else{this.setDomPosition(y.parentLeft,y.parentTop);}e.stopPropagation();},_onMoveMouseUp:function(e){if(!this.hasState(l)){return;}this.removeState(l);var parent=this.getLayoutParent();if(qx.Class.implementsInterface(parent,qx.ui.window.IDesktop)){if(this.__bg){parent.unblockContent();parent.setBlockerColor(this.__bh);parent.setBlockerOpacity(this.__bi);this.__bh=null;this.__bi=0;this.__bg=false;}}this.__Y.releaseCapture();var z=this.__bl(e);this.setLayoutProperties({left:z.parentLeft,top:z.parentTop});if(this.getUseMoveFrame()){this.__bj().exclude();}e.stopPropagation();},__bm:function(e){if(!this.hasState(l)){return;}this.removeState(l);if(this.getUseMoveFrame()){this.__bj().exclude();}}},destruct:function(){this._disposeObjects(d,f);this.__bb=null;}});})();(function(){var k="Boolean",j="resize",i="mousedown",h="w-resize",g="sw-resize",f="n-resize",d="resizableRight",c="ne-resize",b="se-resize",a="Integer",z="e-resize",y="resizableLeft",x="mousemove",w="move",v="shorthand",u="maximized",t="nw-resize",s="mouseout",r="qx.ui.core.MResizable",q="mouseup",o="losecapture",p="resize-frame",m="resizableBottom",n="s-resize",l="resizableTop";qx.Mixin.define(r,{construct:function(){this.addListener(i,this.__bz,this,true);this.addListener(q,this.__bA,this);this.addListener(x,this.__bC,this);this.addListener(s,this.__bD,this);this.addListener(o,this.__bB,this);var A=this.getContainerElement().getDomElement();if(A==null){A=window;}this.__bn=qx.event.Registration.getManager(A).getHandler(qx.event.handler.DragDrop);},properties:{resizableTop:{check:k,init:true},resizableRight:{check:k,init:true},resizableBottom:{check:k,init:true},resizableLeft:{check:k,init:true},resizable:{group:[l,d,m,y],mode:v},resizeSensitivity:{check:a,init:5},useResizeFrame:{check:k,init:true}},members:{__bn:null,__bo:null,__bp:null,__bq:null,__br:null,__bs:null,__bt:null,RESIZE_TOP:1,RESIZE_BOTTOM:2,RESIZE_LEFT:4,RESIZE_RIGHT:8,__bu:function(){var B=this.__bo;if(!B){B=this.__bo=new qx.ui.core.Widget();B.setAppearance(p);B.exclude();qx.core.Init.getApplication().getRoot().add(B);}return B;},__bv:function(){var D=this.__bs;var C=this.__bu();C.setUserBounds(D.left,D.top,D.width,D.height);C.show();C.setZIndex(this.getZIndex()+1);},__bw:function(e){var F=this.__bp;var G=this.getSizeHint();var J=this.__bt;var I=this.__bs;var E=I.width;var H=I.height;var L=I.left;var top=I.top;var K;if((F&this.RESIZE_TOP)||(F&this.RESIZE_BOTTOM)){K=Math.max(J.top,Math.min(J.bottom,e.getDocumentTop()))-this.__br;if(F&this.RESIZE_TOP){H-=K;}else{H+=K;}if(H<G.minHeight){H=G.minHeight;}else if(H>G.maxHeight){H=G.maxHeight;}if(F&this.RESIZE_TOP){top+=I.height-H;}}if((F&this.RESIZE_LEFT)||(F&this.RESIZE_RIGHT)){K=Math.max(J.left,Math.min(J.right,e.getDocumentLeft()))-this.__bq;if(F&this.RESIZE_LEFT){E-=K;}else{E+=K;}if(E<G.minWidth){E=G.minWidth;}else if(E>G.maxWidth){E=G.maxWidth;}if(F&this.RESIZE_LEFT){L+=I.width-E;}}return {viewportLeft:L,viewportTop:top,parentLeft:I.bounds.left+L-I.left,parentTop:I.bounds.top+top-I.top,width:E,height:H};},__bx:{1:f,2:n,4:h,8:z,5:t,6:g,9:c,10:b},__by:function(e){var O=this.getContentLocation();var M=this.getResizeSensitivity();var Q=e.getDocumentLeft();var P=e.getDocumentTop();var N=0;if(this.getResizableTop()&&Math.abs(O.top-P)<M){N+=this.RESIZE_TOP;}else if(this.getResizableBottom()&&Math.abs(O.bottom-P)<M){N+=this.RESIZE_BOTTOM;}if(this.getResizableLeft()&&Math.abs(O.left-Q)<M){N+=this.RESIZE_LEFT;}else if(this.getResizableRight()&&Math.abs(O.right-Q)<M){N+=this.RESIZE_RIGHT;}this.__bp=N;},__bz:function(e){if(!this.__bp){return;}this.addState(j);this.__bq=e.getDocumentLeft();this.__br=e.getDocumentTop();var location=this.getContainerLocation();var T=this.getBounds();this.__bs={top:location.top,left:location.left,width:T.width,height:T.height,bounds:qx.lang.Object.clone(T)};var parent=this.getLayoutParent();var R=parent.getContentLocation();var S=parent.getBounds();this.__bt={left:R.left,top:R.top,right:R.left+S.width,bottom:R.top+S.height};if(this.getUseResizeFrame()){this.__bv();}this.capture();e.stop();},__bA:function(e){if(!this.hasState(j)){return;}if(this.getUseResizeFrame()){this.__bu().exclude();}var U=this.__bw(e);this.setWidth(U.width);this.setHeight(U.height);if(this.getResizableLeft()||this.getResizableTop()){this.setLayoutProperties({left:U.parentLeft,top:U.parentTop});}this.__bp=0;this.removeState(j);this.resetCursor();this.getApplicationRoot().resetGlobalCursor();this.releaseCapture();e.stopPropagation();},__bB:function(e){if(!this.__bp){return;}this.resetCursor();this.getApplicationRoot().resetGlobalCursor();this.removeState(w);if(this.getUseResizeFrame()){this.__bu().exclude();}},__bC:function(e){if(this.hasState(j)){var Y=this.__bw(e);if(this.getUseResizeFrame()){var W=this.__bu();W.setUserBounds(Y.viewportLeft,Y.viewportTop,Y.width,Y.height);}else{this.setWidth(Y.width);this.setHeight(Y.height);if(this.getResizableLeft()||this.getResizableTop()){this.setLayoutProperties({left:Y.parentLeft,top:Y.parentTop});}}e.stopPropagation();}else if(!this.hasState(u)&&!this.__bn.isSessionActive()){this.__by(e);var ba=this.__bp;var X=this.getApplicationRoot();if(ba){var V=this.__bx[ba];this.setCursor(V);X.setGlobalCursor(V);}else if(this.getCursor()){this.resetCursor();X.resetGlobalCursor();}}},__bD:function(e){if(this.getCursor()&&!this.hasState(j)){this.resetCursor();this.getApplicationRoot().resetGlobalCursor();}}},destruct:function(){if(this.__bo!=null&&!qx.core.ObjectRegistry.inShutDown){this.__bo.destroy();this.__bo=null;}this.__bn=null;}});})();(function(){var a="qx.ui.window.IWindowManager";qx.Interface.define(a,{members:{setDesktop:function(b){this.assertInterface(b,qx.ui.window.IDesktop);},changeActiveWindow:function(c,d){},updateStack:function(){},bringToFront:function(e){this.assertInstance(e,qx.ui.window.Window);},sendToBack:function(f){this.assertInstance(f,qx.ui.window.Window);}}});})();(function(){var b="__X",a="qx.ui.window.Manager";qx.Class.define(a,{extend:qx.core.Object,implement:qx.ui.window.IWindowManager,members:{__X:null,setDesktop:function(c){this.__X=c;this.updateStack();},getDesktop:function(){return this.__X;},changeActiveWindow:function(d,e){if(d){this.bringToFront(d);d.setActive(true);}if(e){e.resetActive();}},_minZIndex:1e5,updateStack:function(){qx.ui.core.queue.Widget.add(this);},syncWidget:function(){this.__X.forceUnblockContent();var f=this.__X.getWindows();var h=this._minZIndex;var m=h+f.length*2;var j=h+f.length*4;var k=null;for(var i=0,l=f.length;i<l;i++){var g=f[i];if(!g.isVisible()){continue;}k=k||g;if(g.isModal()){g.setZIndex(j);this.__X.blockContent(j-1);j+=2;k=g;}else if(g.isAlwaysOnTop()){g.setZIndex(m);m+=2;}else{g.setZIndex(h);h+=2;}if(!k.isModal()&&g.isActive()||g.getZIndex()>k.getZIndex()){k=g;}}this.__X.setActiveWindow(k);},bringToFront:function(n){var o=this.__X.getWindows();var p=qx.lang.Array.remove(o,n);if(p){o.push(n);this.updateStack();}},sendToBack:function(q){var r=this.__X.getWindows();var s=qx.lang.Array.remove(r,q);if(s){r.unshift(q);this.updateStack();}}},destruct:function(){this._disposeObjects(b);}});})();(function(){var k="Boolean",j="qx.event.type.Event",i="captionbar",h="_applyCaptionBarChange",g="maximize-button",f="restore-button",d="minimize-button",c="close-button",b="maximized",a="execute",Q="pane",P="title",O="icon",N="statusbar-text",M="statusbar",L="String",K="normal",J="active",I="beforeClose",H="beforeMinimize",r="mousedown",s="changeStatus",p="changeIcon",q="excluded",n="dblclick",o="_applyActive",l="beforeRestore",m="minimize",t="changeModal",u="changeAlwaysOnTop",z="_applyShowStatusbar",y="_applyStatus",B="qx.ui.window.Window",A="changeCaption",D="focusout",C="beforeMaximize",w="maximize",G="restore",F="window",E="close",v="changeActive",x="minimized";qx.Class.define(B,{extend:qx.ui.core.Widget,include:[qx.ui.core.MRemoteChildrenHandling,qx.ui.core.MRemoteLayoutHandling,qx.ui.core.MResizable,qx.ui.core.MMovable,qx.ui.core.MContentPadding],construct:function(R,S){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.layout.VBox());this._createChildControl(i);this._createChildControl(Q);if(S!=null){this.setIcon(S);}if(R!=null){this.setCaption(R);}this._updateCaptionBar();this.addListener(r,this._onWindowMouseDown,this,true);this.addListener(D,this._onWindowFocusOut,this);qx.core.Init.getApplication().getRoot().add(this);this.initVisibility();qx.ui.core.FocusHandler.getInstance().addRoot(this);},statics:{DEFAULT_MANAGER_CLASS:qx.ui.window.Manager},events:{"beforeClose":j,"close":j,"beforeMinimize":j,"minimize":j,"beforeMaximize":j,"maximize":j,"beforeRestore":j,"restore":j},properties:{appearance:{refine:true,init:F},visibility:{refine:true,init:q},focusable:{refine:true,init:true},active:{check:k,init:false,apply:o,event:v},alwaysOnTop:{check:k,init:false,event:u},modal:{check:k,init:false,event:t},caption:{apply:h,event:A,nullable:true},icon:{check:L,nullable:true,apply:h,event:p,themeable:true},status:{check:L,nullable:true,apply:y,event:s},showClose:{check:k,init:true,apply:h,themeable:true},showMaximize:{check:k,init:true,apply:h,themeable:true},showMinimize:{check:k,init:true,apply:h,themeable:true},allowClose:{check:k,init:true,apply:h},allowMaximize:{check:k,init:true,apply:h},allowMinimize:{check:k,init:true,apply:h},showStatusbar:{check:k,init:false,apply:z}},members:{__V:null,__W:null,getChildrenContainer:function(){return this.getChildControl(Q);},_forwardStates:{active:true,maximized:true},setLayoutParent:function(parent){{};qx.ui.core.Widget.prototype.setLayoutParent.call(this,parent);},_createChildControlImpl:function(T,U){var V;switch(T){case M:V=new qx.ui.container.Composite(new qx.ui.layout.HBox());this._add(V);V.add(this.getChildControl(N));break;case N:V=new qx.ui.basic.Label();V.setValue(this.getStatus());break;case Q:V=new qx.ui.container.Composite();this._add(V,{flex:1});break;case i:var X=new qx.ui.layout.Grid();X.setRowFlex(0,1);X.setColumnFlex(1,1);V=new qx.ui.container.Composite(X);this._add(V);V.addListener(n,this._onCaptionMouseDblClick,this);this._activateMoveHandle(V);break;case O:V=new qx.ui.basic.Image(this.getIcon());this.getChildControl(i).add(V,{row:0,column:0});break;case P:V=new qx.ui.basic.Label(this.getCaption());V.setWidth(0);V.setAllowGrowX(true);var W=this.getChildControl(i);W.add(V,{row:0,column:1});break;case d:V=new qx.ui.form.Button();V.setFocusable(false);V.addListener(a,this._onMinimizeButtonClick,this);this.getChildControl(i).add(V,{row:0,column:2});break;case f:V=new qx.ui.form.Button();V.setFocusable(false);V.addListener(a,this._onRestoreButtonClick,this);this.getChildControl(i).add(V,{row:0,column:3});break;case g:V=new qx.ui.form.Button();V.setFocusable(false);V.addListener(a,this._onMaximizeButtonClick,this);this.getChildControl(i).add(V,{row:0,column:4});break;case c:V=new qx.ui.form.Button();V.setFocusable(false);V.addListener(a,this._onCloseButtonClick,this);this.getChildControl(i).add(V,{row:0,column:6});break;}return V||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,T);},_updateCaptionBar:function(){var ba;var bb=this.getIcon();if(bb){this.getChildControl(O).setSource(bb);this._showChildControl(O);}else{this._excludeChildControl(O);}var Y=this.getCaption();if(Y){this.getChildControl(P).setValue(Y);this._showChildControl(P);}else{this._excludeChildControl(P);}if(this.getShowMinimize()){this._showChildControl(d);ba=this.getChildControl(d);this.getAllowMinimize()?ba.resetEnabled():ba.setEnabled(false);}else{this._excludeChildControl(d);}if(this.getShowMaximize()){if(this.isMaximized()){this._showChildControl(f);this._excludeChildControl(g);}else{this._showChildControl(g);this._excludeChildControl(f);}ba=this.getChildControl(g);this.getAllowMaximize()?ba.resetEnabled():ba.setEnabled(false);}else{this._excludeChildControl(g);this._excludeChildControl(f);}if(this.getShowClose()){this._showChildControl(c);ba=this.getChildControl(c);this.getAllowClose()?ba.resetEnabled():ba.setEnabled(false);}else{this._excludeChildControl(c);}},close:function(){if(!this.isVisible()){return;}if(this.fireNonBubblingEvent(I,qx.event.type.Event,[false,true])){this.hide();this.fireEvent(E);}},open:function(){this.show();this.setActive(true);this.focus();},center:function(){var parent=this.getLayoutParent();if(parent){var bd=parent.getBounds();if(bd){var be=this.getSizeHint();var bc=Math.round((bd.width-be.width)/2);var top=Math.round((bd.height-be.height)/2);if(top<0){top=0;}this.moveTo(bc,top);return;}}{};},maximize:function(){if(this.isMaximized()){return;}var parent=this.getLayoutParent();if(parent!=null&&parent.supportsMaximize()){if(this.fireNonBubblingEvent(C,qx.event.type.Event,[false,true])){if(!this.isVisible()){this.open();}var bf=this.getLayoutProperties();this.__W=bf.left===undefined?0:bf.left;this.__V=bf.top===undefined?0:bf.top;this.setLayoutProperties({left:null,top:null,edge:0});this.addState(b);this._updateCaptionBar();this.fireEvent(w);}}},minimize:function(){if(!this.isVisible()){return;}if(this.fireNonBubblingEvent(H,qx.event.type.Event,[false,true])){var bg=this.getLayoutProperties();this.__W=bg.left===undefined?0:bg.left;this.__V=bg.top===undefined?0:bg.top;this.removeState(b);this.hide();this.fireEvent(m);}},restore:function(){if(this.getMode()===K){return;}if(this.fireNonBubblingEvent(l,qx.event.type.Event,[false,true])){if(!this.isVisible()){this.open();}var bh=this.__W;var top=this.__V;this.setLayoutProperties({edge:null,left:bh,top:top});this.removeState(b);this._updateCaptionBar();this.fireEvent(G);}},moveTo:function(bi,top){if(this.isMaximized()){return;}this.setLayoutProperties({left:bi,top:top});},isMaximized:function(){return this.hasState(b);},getMode:function(){if(!this.isVisible()){return x;}else{if(this.isMaximized()){return b;}else{return K;}}},_applyActive:function(bj,bk){if(bk){this.removeState(J);}else{this.addState(J);}},_getContentPaddingTarget:function(){return this.getChildControl(Q);},_applyShowStatusbar:function(bl,bm){if(bl){this._showChildControl(M);}else{this._excludeChildControl(M);}},_applyCaptionBarChange:function(bn,bo){this._updateCaptionBar();},_applyStatus:function(bp,bq){var br=this.getChildControl(N,true);if(br){br.setValue(bp);}},_onWindowEventStop:function(e){e.stopPropagation();},_onWindowMouseDown:function(e){this.setActive(true);},_onWindowFocusOut:function(e){if(this.getModal()){return;}var bs=e.getRelatedTarget();if(bs!=null&&!qx.ui.core.Widget.contains(this,bs)){this.setActive(false);}},_onCaptionMouseDblClick:function(e){if(this.getAllowMaximize()){this.isMaximized()?this.restore():this.maximize();}},_onMinimizeButtonClick:function(e){this.minimize();this.getChildControl(d).reset();},_onRestoreButtonClick:function(e){this.restore();this.getChildControl(f).reset();},_onMaximizeButtonClick:function(e){this.maximize();this.getChildControl(g).reset();},_onCloseButtonClick:function(e){this.close();this.getChildControl(c).reset();}}});})();(function(){var a="qx.ui.window.IDesktop";qx.Interface.define(a,{members:{setWindowManager:function(b){this.assertInterface(b,qx.ui.window.IWindowManager);},getWindows:function(){},supportsMaximize:function(){},blockContent:function(c){this.assertInteger(c);},unblockContent:function(){},isContentBlocked:function(){}}});})();(function(){var h="headerCellRendererChanged",g="visibilityChangedPre",f="Number",e="qx.event.type.Event",d="_applyFirstColumnX",c="Integer",b="qx.ui.table.pane.Model",a="_applyMaxColumnCount";qx.Class.define(b,{extend:qx.core.Object,construct:function(i){qx.core.Object.call(this);this.setTableColumnModel(i);},events:{"modelChanged":e},statics:{EVENT_TYPE_MODEL_CHANGED:"modelChanged"},properties:{firstColumnX:{check:c,init:0,apply:d},maxColumnCount:{check:f,init:-1,apply:a}},members:{__xK:null,__xL:null,_applyFirstColumnX:function(j,k){this.__xK=null;this.fireEvent(qx.ui.table.pane.Model.EVENT_TYPE_MODEL_CHANGED);},_applyMaxColumnCount:function(l,m){this.__xK=null;this.fireEvent(qx.ui.table.pane.Model.EVENT_TYPE_MODEL_CHANGED);},setTableColumnModel:function(n){if(this.__xL){this.__xL.removeListener(g,this._onColVisibilityChanged,this);this.__xL.removeListener(h,this._onColVisibilityChanged,this);}this.__xL=n;this.__xL.addListener(g,this._onColVisibilityChanged,this);this.__xL.addListener(h,this._onHeaderCellRendererChanged,this);this.__xK=null;},_onColVisibilityChanged:function(o){this.__xK=null;this.fireEvent(qx.ui.table.pane.Model.EVENT_TYPE_MODEL_CHANGED);},_onHeaderCellRendererChanged:function(p){this.fireEvent(qx.ui.table.pane.Model.EVENT_TYPE_MODEL_CHANGED);},getColumnCount:function(){if(this.__xK==null){var q=this.getFirstColumnX();var s=this.getMaxColumnCount();var r=this.__xL.getVisibleColumnCount();if(s==-1||(q+s)>r){this.__xK=r-q;}else{this.__xK=s;}}return this.__xK;},getColumnAtX:function(t){var u=this.getFirstColumnX();return this.__xL.getVisibleColumnAtX(u+t);},getX:function(v){var w=this.getFirstColumnX();var y=this.getMaxColumnCount();var x=this.__xL.getVisibleX(v)-w;if(x>=0&&(y==-1||x<y)){return x;}else{return -1;}},getColumnLeft:function(z){var C=0;var B=this.getColumnCount();for(var x=0;x<B;x++){var A=this.getColumnAtX(x);if(A==z){return C;}C+=this.__xL.getColumnWidth(A);}return -1;},getTotalWidth:function(){var D=0;var E=this.getColumnCount();for(var x=0;x<E;x++){var F=this.getColumnAtX(x);D+=this.__xL.getColumnWidth(F);}return D;}},destruct:function(){if(this.__xL){this.__xL.removeListener(g,this._onColVisibilityChanged,this);this.__xL.removeListener(h,this._onColVisibilityChanged,this);}this.__xL=null;}});})();(function(){var r="px",q=".qooxdoo-table-cell-icon {",p="abstract",o="",n="qx.ui.table.cellrenderer.AbstractImage",m=" qooxdoo-table-cell-icon",l="<div></div>",k="'",j="no-repeat",i="}",c="  text-align:center;",h="inline-block",f="static",b="top",a="  padding-top:1px;",e="title='",d="string",g="-moz-inline-box";qx.Class.define(n,{extend:qx.ui.table.cellrenderer.Abstract,type:p,construct:function(){qx.ui.table.cellrenderer.Abstract.call(this);var s=this.self(arguments);if(!s.stylesheet){s.stylesheet=qx.bom.Stylesheet.createElement(q+c+a+i);}},members:{__Hw:16,__Hx:16,__Hy:null,_insetY:2,_identifyImage:function(t){throw new Error("_identifyImage is abstract");},_getImageInfos:function(u){var v=this._identifyImage(u);if(v==null||typeof v==d){v={url:v,tooltip:null};}if(!v.imageWidth||!v.imageHeight){var w=this.__Hz(v.url);v.imageWidth=w.width;v.imageHeight=w.height;}v.width=v.imageWidth;v.height=v.imageHeight;return v;},__Hz:function(x){var A=qx.util.ResourceManager.getInstance();var z=qx.io.ImageLoader;var y,B;if(A.has(x)){y=A.getImageWidth(x);B=A.getImageHeight(x);}else if(z.isLoaded(x)){y=z.getWidth(x);B=z.getHeight(x);}else{y=this.__Hw;B=this.__Hx;}return {width:y,height:B};},createDataCellHtml:function(C,D){this.__Hy=this._getImageInfos(C);return qx.ui.table.cellrenderer.Abstract.prototype.createDataCellHtml.call(this,C,D);},_getCellClass:function(E){return qx.ui.table.cellrenderer.Abstract.prototype._getCellClass.call(this)+m;},_getContentHtml:function(F){var content=l;if(this.__Hy.url){content=qx.bom.element.Decoration.create(this.__Hy.url,j,{width:this.__Hy.width+r,height:this.__Hy.height+r,display:qx.bom.client.Engine.GECKO&&qx.bom.client.Engine.VERSION<1.9?g:h,verticalAlign:b,position:f});}return content;},_getCellAttributes:function(G){var H=this.__Hy.tooltip;if(H){return e+H+k;}else{return o;}}},destruct:function(){this.__Hy=null;}});})();(function(){var b="qx.ui.table.cellrenderer.Image",a="";qx.Class.define(b,{extend:qx.ui.table.cellrenderer.AbstractImage,construct:function(c,d){qx.ui.table.cellrenderer.AbstractImage.call(this);if(c){this.__HA=c;}if(d){this.__HB=d;}this.__HC=qx.util.AliasManager.getInstance();},members:{__HC:null,__HB:16,__HA:16,_identifyImage:function(e){var f={imageWidth:this.__HA,imageHeight:this.__HB};if(e.value==a){f.url=null;}else{f.url=this.__HC.resolve(e.value);}f.tooltip=e.tooltip;return f;}},destruct:function(){this.__HC=null;}});})();(function(){var k="Boolean",j="qx.event.type.Event",i="queued",h="String",g="sending",f="receiving",d="aborted",c="failed",b="nocache",a="completed",P="qx.io.remote.Response",O="POST",N="configured",M="timeout",L="GET",K="Pragma",J="no-url-params-on-post",I="PUT",H="no-cache",G="Cache-Control",r="Content-Type",s="text/plain",p="application/xml",q="application/json",n="text/html",o="application/x-www-form-urlencoded",l="qx.io.remote.Exchange",m="Integer",t="X-Qooxdoo-Response-Type",u="HEAD",y="qx.io.remote.Request",x="_applyResponseType",A="_applyState",z="text/javascript",C="changeState",B="_applyProhibitCaching",w="",F="_applyMethod",E="DELETE",D="boolean";qx.Class.define(y,{extend:qx.core.Object,construct:function(Q,R,S){qx.core.Object.call(this);this.__sp={};this.__sq={};this.__sr={};this.__ss={};if(Q!==undefined){this.setUrl(Q);}if(R!==undefined){this.setMethod(R);}if(S!==undefined){this.setResponseType(S);}this.setProhibitCaching(true);this.__st=++qx.io.remote.Request.__st;},events:{"created":j,"configured":j,"sending":j,"receiving":j,"completed":P,"aborted":j,"failed":P,"timeout":P},statics:{__st:0,methodAllowsRequestBody:function(T){return (T==O)||(T==I);}},properties:{url:{check:h,init:w},method:{check:[L,O,I,u,E],apply:F,init:L},asynchronous:{check:k,init:true},data:{check:h,nullable:true},username:{check:h,nullable:true},password:{check:h,nullable:true},state:{check:[N,i,g,f,a,d,M,c],init:N,apply:A,event:C},responseType:{check:[s,z,q,p,n],init:s,apply:x},timeout:{check:m,nullable:true},prohibitCaching:{check:function(v){return typeof v==D||v===J;},init:true,apply:B},crossDomain:{check:k,init:false},fileUpload:{check:k,init:false},transport:{check:l,nullable:true},useBasicHttpAuth:{check:k,init:false},parseJson:{check:k,init:true}},members:{__sp:null,__sq:null,__sr:null,__ss:null,__st:null,send:function(){qx.io.remote.RequestQueue.getInstance().add(this);},abort:function(){qx.io.remote.RequestQueue.getInstance().abort(this);},reset:function(){switch(this.getState()){case g:case f:this.error("Aborting already sent request!");case i:this.abort();break;}},isConfigured:function(){return this.getState()===N;},isQueued:function(){return this.getState()===i;},isSending:function(){return this.getState()===g;},isReceiving:function(){return this.getState()===f;},isCompleted:function(){return this.getState()===a;},isAborted:function(){return this.getState()===d;},isTimeout:function(){return this.getState()===M;},isFailed:function(){return this.getState()===c;},__su:qx.event.GlobalError.observeMethod(function(e){var U=e.clone();U.setTarget(this);this.dispatchEvent(U);}),_onqueued:function(e){this.setState(i);this.__su(e);},_onsending:function(e){this.setState(g);this.__su(e);},_onreceiving:function(e){this.setState(f);this.__su(e);},_oncompleted:function(e){this.setState(a);this.__su(e);this.dispose();},_onaborted:function(e){this.setState(d);this.__su(e);this.dispose();},_ontimeout:function(e){this.setState(M);this.__su(e);this.dispose();},_onfailed:function(e){this.setState(c);this.__su(e);this.dispose();},_applyState:function(V,W){{};},_applyProhibitCaching:function(X,Y){if(!X){this.removeParameter(b);this.removeRequestHeader(K);this.removeRequestHeader(G);return;}if(X!==J||this.getMethod()!=O){this.setParameter(b,new Date().valueOf());}else{this.removeParameter(b);}this.setRequestHeader(K,H);this.setRequestHeader(G,H);},_applyMethod:function(ba,bb){if(qx.io.remote.Request.methodAllowsRequestBody(ba)){this.setRequestHeader(r,o);}else{this.removeRequestHeader(r);}var bc=this.getProhibitCaching();this._applyProhibitCaching(bc,bc);},_applyResponseType:function(bd,be){this.setRequestHeader(t,bd);},setRequestHeader:function(bf,bg){this.__sp[bf]=bg;},removeRequestHeader:function(bh){delete this.__sp[bh];},getRequestHeader:function(bi){return this.__sp[bi]||null;},getRequestHeaders:function(){return this.__sp;},setParameter:function(bj,bk,bl){if(bl){this.__sr[bj]=bk;}else{this.__sq[bj]=bk;}},removeParameter:function(bm,bn){if(bn){delete this.__sr[bm];}else{delete this.__sq[bm];}},getParameter:function(bo,bp){if(bp){return this.__sr[bo]||null;}else{return this.__sq[bo]||null;}},getParameters:function(bq){return (bq?this.__sr:this.__sq);},setFormField:function(br,bs){this.__ss[br]=bs;},removeFormField:function(bt){delete this.__ss[bt];},getFormField:function(bu){return this.__ss[bu]||null;},getFormFields:function(){return this.__ss;},getSequenceNumber:function(){return this.__st;}},destruct:function(){this.setTransport(null);this.__sp=this.__sq=this.__sr=this.__ss=null;}});})();(function(){var b=".",a="qx.bom.client.Transport";qx.Class.define(a,{statics:{getMaxConcurrentRequestCount:function(){var h;var c=qx.bom.client.Engine;var g=c.FULLVERSION.split(b);var e=0;var d=0;var f=0;if(g[0]){e=g[0];}if(g[1]){d=g[1];}if(g[2]){f=g[2];}if(window.maxConnectionsPerServer){h=window.maxConnectionsPerServer;}else if(c.OPERA){h=8;}else if(c.WEBKIT){h=4;}else if(c.GECKO&&((e>1)||((e==1)&&(d>9))||((e==1)&&(d==9)&&(f>=1)))){h=6;}else{h=2;}return h;}}});})();(function(){var s="Integer",r="aborted",q="_onaborted",p="_on",o="_applyEnabled",n="Boolean",m="sending",l="__pc",k="interval",j="__pe",c="failed",h="qx.io.remote.RequestQueue",g="timeout",b="completed",a="queued",f="receiving",d="singleton";qx.Class.define(h,{type:d,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.__pb=[];this.__pc=[];this.__pd=0;this.__pe=new qx.event.Timer(500);this.__pe.addListener(k,this._oninterval,this);},properties:{enabled:{init:true,check:n,apply:o},maxTotalRequests:{check:s,nullable:true},maxConcurrentRequests:{check:s,init:qx.bom.client.Transport.getMaxConcurrentRequestCount()},defaultTimeout:{check:s,init:5000}},members:{__pb:null,__pc:null,__pd:null,__pe:null,getRequestQueue:function(){return this.__pb;},getActiveQueue:function(){return this.__pc;},_debug:function(){var t;{};},_check:function(){this._debug();if(this.__pc.length==0&&this.__pb.length==0){this.__pe.stop();}if(!this.getEnabled()){return;}if(this.__pb.length==0||(this.__pb[0].isAsynchronous()&&this.__pc.length>=this.getMaxConcurrentRequests())){return;}if(this.getMaxTotalRequests()!=null&&this.__pd>=this.getMaxTotalRequests()){return;}var u=this.__pb.shift();var v=new qx.io.remote.Exchange(u);this.__pd++;this.__pc.push(v);this._debug();v.addListener(m,this._onsending,this);v.addListener(f,this._onreceiving,this);v.addListener(b,this._oncompleted,this);v.addListener(r,this._oncompleted,this);v.addListener(g,this._oncompleted,this);v.addListener(c,this._oncompleted,this);v._start=(new Date).valueOf();v.send();if(this.__pb.length>0){this._check();}},_remove:function(w){qx.lang.Array.remove(this.__pc,w);w.dispose();this._check();},__pf:0,_onsending:function(e){{};e.getTarget().getRequest()._onsending(e);},_onreceiving:function(e){e.getTarget().getRequest()._onreceiving(e);},_oncompleted:function(e){{};var y=e.getTarget().getRequest();var x=p+e.getType();try{if(y[x]){y[x](e);}}catch(z){this.error("Request "+y+" handler "+x+" threw an error: ",z);try{if(y[q]){var event=qx.event.Registration.createEvent(r,qx.event.type.Event);y[q](event);}}catch(A){}}finally{this._remove(e.getTarget());}},_oninterval:function(e){var H=this.__pc;if(H.length==0){this.__pe.stop();return;}var C=(new Date).valueOf();var F;var D;var G=this.getDefaultTimeout();var E;var B;for(var i=H.length-1;i>=0;i--){F=H[i];D=F.getRequest();if(D.isAsynchronous()){E=D.getTimeout();if(E==0){continue;}if(E==null){E=G;}B=C-F._start;if(B>E){this.warn("Timeout: transport "+F.toHashCode());this.warn(B+"ms > "+E+"ms");F.timeout();}}}},_applyEnabled:function(I,J){if(I){this._check();}this.__pe.setEnabled(I);},add:function(K){K.setState(a);if(K.isAsynchronous()){this.__pb.push(K);}else{this.__pb.unshift(K);}this._check();if(this.getEnabled()){this.__pe.start();}},abort:function(L){var M=L.getTransport();if(M){M.abort();}else if(qx.lang.Array.contains(this.__pb,L)){qx.lang.Array.remove(this.__pb,L);}}},destruct:function(){this._disposeArray(l);this._disposeObjects(j);this.__pb=null;}});})();(function(){var o="failed",n="sending",m="completed",k="receiving",j="aborted",h="timeout",g="qx.event.type.Event",f="Connection dropped",d="qx.io.remote.Response",c="=",bp="configured",bo="&",bn="Unknown status code. ",bm="qx.io.remote.transport.XmlHttp",bl="qx.io.remote.transport.Abstract",bk="Request-URL too large",bj="MSHTML-specific HTTP status code",bi="Not available",bh="Precondition failed",bg="Server error",v="Moved temporarily",w="qx.io.remote.Exchange",t="Possibly due to a cross-domain request?",u="Bad gateway",r="Gone",s="See other",p="Partial content",q="Server timeout",B="qx.io.remote.transport.Script",C="HTTP version not supported",L="Unauthorized",I="Possibly due to application URL using 'file:' protocol?",T="Multiple choices",O="Payment required",bc="Not implemented",Y="Proxy authentication required",E="Length required",bf="_applyState",be="changeState",bd="Not modified",D="qx.io.remote.Request",G="Connection closed by server",H="Moved permanently",K="_applyImplementation",M="",P="Method not allowed",V="Forbidden",bb="Use proxy",x="Ok",y="Conflict",F="Not found",S="Not acceptable",R="Request time-out",Q="Bad request",X="No content",W="file:",N="qx.io.remote.transport.Iframe",U="Request entity too large",a="Unknown status code",ba="Unsupported media type",z="Gateway time-out",A="created",J="Out of resources",b="undefined";qx.Class.define(w,{extend:qx.core.Object,construct:function(bq){qx.core.Object.call(this);this.setRequest(bq);bq.setTransport(this);},events:{"sending":g,"receiving":g,"completed":d,"aborted":g,"failed":d,"timeout":d},statics:{typesOrder:[bm,N,B],typesReady:false,typesAvailable:{},typesSupported:{},registerType:function(br,bs){qx.io.remote.Exchange.typesAvailable[bs]=br;},initTypes:function(){if(qx.io.remote.Exchange.typesReady){return;}for(var bu in qx.io.remote.Exchange.typesAvailable){var bt=qx.io.remote.Exchange.typesAvailable[bu];if(bt.isSupported()){qx.io.remote.Exchange.typesSupported[bu]=bt;}}qx.io.remote.Exchange.typesReady=true;if(qx.lang.Object.isEmpty(qx.io.remote.Exchange.typesSupported)){throw new Error("No supported transport types were found!");}},canHandle:function(bv,bw,bx){if(!qx.lang.Array.contains(bv.handles.responseTypes,bx)){return false;}for(var by in bw){if(!bv.handles[by]){return false;}}return true;},_nativeMap:{0:A,1:bp,2:n,3:k,4:m},wasSuccessful:function(bz,bA,bB){if(bB){switch(bz){case null:case 0:return true;case -1:return bA<4;default:return typeof bz===b;}}else{switch(bz){case -1:{};return bA<4;case 200:case 304:return true;case 201:case 202:case 203:case 204:case 205:return true;case 206:{};return bA!==4;case 300:case 301:case 302:case 303:case 305:case 400:case 401:case 402:case 403:case 404:case 405:case 406:case 407:case 408:case 409:case 410:case 411:case 412:case 413:case 414:case 415:case 500:case 501:case 502:case 503:case 504:case 505:{};return false;case 12002:case 12007:case 12029:case 12030:case 12031:case 12152:case 13030:{};return false;default:if(bz>206&&bz<300){return true;}qx.log.Logger.debug(this,"Unknown status code: "+bz+" ("+bA+")");return false;}}},statusCodeToString:function(bC){switch(bC){case -1:return bi;case 0:var bD=window.location.href;if(qx.lang.String.startsWith(bD.toLowerCase(),W)){return (bn+I);}else{return (bn+t);}break;case 200:return x;case 304:return bd;case 206:return p;case 204:return X;case 300:return T;case 301:return H;case 302:return v;case 303:return s;case 305:return bb;case 400:return Q;case 401:return L;case 402:return O;case 403:return V;case 404:return F;case 405:return P;case 406:return S;case 407:return Y;case 408:return R;case 409:return y;case 410:return r;case 411:return E;case 412:return bh;case 413:return U;case 414:return bk;case 415:return ba;case 500:return bg;case 501:return bc;case 502:return u;case 503:return J;case 504:return z;case 505:return C;case 12002:return q;case 12029:return f;case 12030:return f;case 12031:return f;case 12152:return G;case 13030:return bj;default:return a;}}},properties:{request:{check:D,nullable:true},implementation:{check:bl,nullable:true,apply:K},state:{check:[bp,n,k,m,j,h,o],init:bp,event:be,apply:bf}},members:{send:function(){var bH=this.getRequest();if(!bH){return this.error("Please attach a request object first");}qx.io.remote.Exchange.initTypes();var bF=qx.io.remote.Exchange.typesOrder;var bE=qx.io.remote.Exchange.typesSupported;var bJ=bH.getResponseType();var bK={};if(bH.getAsynchronous()){bK.asynchronous=true;}else{bK.synchronous=true;}if(bH.getCrossDomain()){bK.crossDomain=true;}if(bH.getFileUpload()){bK.fileUpload=true;}for(var bI in bH.getFormFields()){bK.programaticFormFields=true;break;}var bL,bG;for(var i=0,l=bF.length;i<l;i++){bL=bE[bF[i]];if(bL){if(!qx.io.remote.Exchange.canHandle(bL,bK,bJ)){continue;}try{{};bG=new bL;this.setImplementation(bG);bG.setUseBasicHttpAuth(bH.getUseBasicHttpAuth());bG.send();return true;}catch(bM){this.error("Request handler throws error");this.error(bM);return;}}}this.error("There is no transport implementation available to handle this request: "+bH);},abort:function(){var bN=this.getImplementation();if(bN){{};bN.abort();}else{{};this.setState(j);}},timeout:function(){var bQ=this.getImplementation();if(bQ){var bP=M;for(var bO in bQ.getParameters()){bP+=bo+bO+c+bQ.getParameters()[bO];}this.warn("Timeout: implementation "+bQ.toHashCode()+", "+bQ.getUrl()+" ["+bQ.getMethod()+"], "+bP);bQ.timeout();}else{this.warn("Timeout: forcing state to timeout");this.setState(h);}this.__rx();},__rx:function(){var bR=this.getRequest();if(bR){bR.setTimeout(0);}},_onsending:function(e){this.setState(n);},_onreceiving:function(e){this.setState(k);},_oncompleted:function(e){this.setState(m);},_onabort:function(e){this.setState(j);},_onfailed:function(e){this.setState(o);},_ontimeout:function(e){this.setState(h);},_applyImplementation:function(bS,bT){if(bT){bT.removeListener(n,this._onsending,this);bT.removeListener(k,this._onreceiving,this);bT.removeListener(m,this._oncompleted,this);bT.removeListener(j,this._onabort,this);bT.removeListener(h,this._ontimeout,this);bT.removeListener(o,this._onfailed,this);}if(bS){var bV=this.getRequest();bS.setUrl(bV.getUrl());bS.setMethod(bV.getMethod());bS.setAsynchronous(bV.getAsynchronous());bS.setUsername(bV.getUsername());bS.setPassword(bV.getPassword());bS.setParameters(bV.getParameters(false));bS.setFormFields(bV.getFormFields());bS.setRequestHeaders(bV.getRequestHeaders());if(bS instanceof qx.io.remote.transport.XmlHttp){bS.setParseJson(bV.getParseJson());}var bY=bV.getData();if(bY===null){var ca=bV.getParameters(true);var bX=[];for(var bU in ca){var bW=ca[bU];if(bW instanceof Array){for(var i=0;i<bW.length;i++){bX.push(encodeURIComponent(bU)+c+encodeURIComponent(bW[i]));}}else{bX.push(encodeURIComponent(bU)+c+encodeURIComponent(bW));}}if(bX.length>0){bS.setData(bX.join(bo));}}else{bS.setData(bY);}bS.setResponseType(bV.getResponseType());bS.addListener(n,this._onsending,this);bS.addListener(k,this._onreceiving,this);bS.addListener(m,this._oncompleted,this);bS.addListener(j,this._onabort,this);bS.addListener(h,this._ontimeout,this);bS.addListener(o,this._onfailed,this);}},_applyState:function(cb,cc){{};switch(cb){case n:this.fireEvent(n);break;case k:this.fireEvent(k);break;case m:case j:case h:case o:var ce=this.getImplementation();if(!ce){break;}this.__rx();if(this.hasListener(cb)){var cf=qx.event.Registration.createEvent(cb,qx.io.remote.Response);if(cb==m){var cd=ce.getResponseContent();cf.setContent(cd);if(cd===null){{};cb=o;}}else if(cb==o){cf.setContent(ce.getResponseContent());}cf.setStatusCode(ce.getStatusCode());cf.setResponseHeaders(ce.getResponseHeaders());this.dispatchEvent(cf);}this.setImplementation(null);ce.dispose();break;}}},settings:{"qx.ioRemoteDebug":false,"qx.ioRemoteDebugData":false},destruct:function(){var cg=this.getImplementation();if(cg){this.setImplementation(null);cg.dispose();}this.setRequest(null);}});})();(function(){var q="qx.event.type.Event",p="String",o="failed",n="timeout",m="created",l="aborted",k="sending",j="configured",i="receiving",h="completed",c="Object",g="Boolean",f="abstract",b="_applyState",a="GET",e="changeState",d="qx.io.remote.transport.Abstract";qx.Class.define(d,{type:f,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);this.setRequestHeaders({});this.setParameters({});this.setFormFields({});},events:{"created":q,"configured":q,"sending":q,"receiving":q,"completed":q,"aborted":q,"failed":q,"timeout":q},properties:{url:{check:p,nullable:true},method:{check:p,nullable:true,init:a},asynchronous:{check:g,nullable:true,init:true},data:{check:p,nullable:true},username:{check:p,nullable:true},password:{check:p,nullable:true},state:{check:[m,j,k,i,h,l,n,o],init:m,event:e,apply:b},requestHeaders:{check:c,nullable:true},parameters:{check:c,nullable:true},formFields:{check:c,nullable:true},responseType:{check:p,nullable:true},useBasicHttpAuth:{check:g,nullable:true}},members:{send:function(){throw new Error("send is abstract");},abort:function(){{};this.setState(l);},timeout:function(){{};this.setState(n);},failed:function(){{};this.setState(o);},setRequestHeader:function(r,s){throw new Error("setRequestHeader is abstract");},getResponseHeader:function(t){throw new Error("getResponseHeader is abstract");},getResponseHeaders:function(){throw new Error("getResponseHeaders is abstract");},getStatusCode:function(){throw new Error("getStatusCode is abstract");},getStatusText:function(){throw new Error("getStatusText is abstract");},getResponseText:function(){throw new Error("getResponseText is abstract");},getResponseXml:function(){throw new Error("getResponseXml is abstract");},getFetchedLength:function(){throw new Error("getFetchedLength is abstract");},_applyState:function(u,v){{};switch(u){case m:this.fireEvent(m);break;case j:this.fireEvent(j);break;case k:this.fireEvent(k);break;case i:this.fireEvent(i);break;case h:this.fireEvent(h);break;case l:this.fireEvent(l);break;case o:this.fireEvent(o);break;case n:this.fireEvent(n);break;}return true;}},destruct:function(){this.setRequestHeaders(null);this.setParameters(null);this.setFormFields(null);}});})();(function(){var l="=",k="",j="&",h="application/xml",g="application/json",f="text/html",d="qx.client",c="textarea",b="_data_",a="load",G="text/plain",F="text/javascript",E="completed",D="readystatechange",C="?",B="qx.io.remote.transport.Iframe",A="none",z="display",y="gecko",x="frame_",s="aborted",t="pre",q="javascript:void(0)",r="sending",o="form",p="failed",m="mshtml",n="form_",u="opera",v="timeout",w="qx/static/blank.gif";qx.Class.define(B,{extend:qx.io.remote.transport.Abstract,construct:function(){qx.io.remote.transport.Abstract.call(this);var H=(new Date).valueOf();var I=x+H;var J=n+H;var K;if(qx.core.Variant.isSet(d,m)){K=q;}this.__oh=qx.bom.Iframe.create({id:I,name:I,src:K});qx.bom.element.Style.set(this.__oh,z,A);this.__oi=qx.bom.Element.create(o,{id:J,name:J,target:I});qx.bom.element.Style.set(this.__oi,z,A);qx.dom.Element.insertEnd(this.__oi,qx.dom.Node.getBodyElement(document));this.__oj=qx.bom.Element.create(c,{id:b,name:b});qx.dom.Element.insertEnd(this.__oj,this.__oi);qx.dom.Element.insertEnd(this.__oh,qx.dom.Node.getBodyElement(document));qx.event.Registration.addListener(this.__oh,a,this._onload,this);this.__ok=qx.lang.Function.listener(this._onreadystatechange,this);qx.bom.Event.addNativeListener(this.__oh,D,this.__ok);},statics:{handles:{synchronous:false,asynchronous:true,crossDomain:false,fileUpload:true,programaticFormFields:true,responseTypes:[G,F,g,h,f]},isSupported:function(){return true;},_numericMap:{"uninitialized":1,"loading":2,"loaded":2,"interactive":3,"complete":4}},members:{__oj:null,__ol:0,__oi:null,__oh:null,__ok:null,send:function(){var M=this.getMethod();var O=this.getUrl();var S=this.getParameters(false);var R=[];for(var N in S){var P=S[N];if(P instanceof Array){for(var i=0;i<P.length;i++){R.push(encodeURIComponent(N)+l+encodeURIComponent(P[i]));}}else{R.push(encodeURIComponent(N)+l+encodeURIComponent(P));}}if(R.length>0){O+=(O.indexOf(C)>=0?j:C)+R.join(j);}if(this.getData()===null){var S=this.getParameters(true);var R=[];for(var N in S){var P=S[N];if(P instanceof Array){for(var i=0;i<P.length;i++){R.push(encodeURIComponent(N)+l+encodeURIComponent(P[i]));}}else{R.push(encodeURIComponent(N)+l+encodeURIComponent(P));}}if(R.length>0){this.setData(R.join(j));}}var L=this.getFormFields();for(var N in L){var Q=document.createElement(c);Q.name=N;Q.appendChild(document.createTextNode(L[N]));this.__oi.appendChild(Q);}this.__oi.action=O;this.__oi.method=M;this.__oj.appendChild(document.createTextNode(this.getData()));this.__oi.submit();this.setState(r);},_onload:qx.event.GlobalError.observeMethod(function(e){if(qx.bom.client.Engine.NAME==u&&this.getIframeHtmlContent()==k){return;}if(this.__oi.src){return;}this._switchReadyState(qx.io.remote.transport.Iframe._numericMap.complete);}),_onreadystatechange:qx.event.GlobalError.observeMethod(function(e){this._switchReadyState(qx.io.remote.transport.Iframe._numericMap[this.__oh.readyState]);}),_switchReadyState:function(T){switch(this.getState()){case E:case s:case p:case v:this.warn("Ignore Ready State Change");return;}while(this.__ol<T){this.setState(qx.io.remote.Exchange._nativeMap[++this.__ol]);}},setRequestHeader:function(U,V){},getResponseHeader:function(W){return null;},getResponseHeaders:function(){return {};},getStatusCode:function(){return 200;},getStatusText:function(){return k;},getIframeWindow:function(){return qx.bom.Iframe.getWindow(this.__oh);},getIframeDocument:function(){return qx.bom.Iframe.getDocument(this.__oh);},getIframeBody:function(){return qx.bom.Iframe.getBody(this.__oh);},getIframeTextContent:function(){var X=this.getIframeBody();if(!X){return null;}if(!X.firstChild){return k;}if(X.firstChild.tagName&&X.firstChild.tagName.toLowerCase()==t){return X.firstChild.innerHTML;}else{return X.innerHTML;}},getIframeHtmlContent:function(){var Y=this.getIframeBody();return Y?Y.innerHTML:null;},getFetchedLength:function(){return 0;},getResponseContent:function(){if(this.getState()!==E){{};return null;}{};var ba=this.getIframeTextContent();switch(this.getResponseType()){case G:{};return ba;break;case f:ba=this.getIframeHtmlContent();{};return ba;break;case g:ba=this.getIframeHtmlContent();{};try{return ba&&ba.length>0?qx.util.Json.parse(ba,false):null;}catch(bb){return this.error("Could not execute json: ("+ba+")",bb);}case F:ba=this.getIframeHtmlContent();{};try{return ba&&ba.length>0?window.eval(ba):null;}catch(bc){return this.error("Could not execute javascript: ("+ba+")",bc);}case h:ba=this.getIframeDocument();{};return ba;default:this.warn("No valid responseType specified ("+this.getResponseType()+")!");return null;}}},defer:function(){qx.io.remote.Exchange.registerType(qx.io.remote.transport.Iframe,B);},destruct:function(){if(this.__oh){qx.event.Registration.removeListener(this.__oh,a,this._onload,this);qx.bom.Event.removeNativeListener(this.__oh,D,this.__ok);if(qx.core.Variant.isSet(d,y)){this.__oh.src=qx.util.ResourceManager.getInstance().toUri(w);}qx.dom.Element.remove(this.__oh);}if(this.__oi){qx.dom.Element.remove(this.__oi);}this.__oh=this.__oi=this.__oj=null;}});})();(function(){var c="qx.event.handler.Iframe",b="load",a="iframe";qx.Class.define(c,{extend:qx.core.Object,implement:qx.event.IEventHandler,statics:{PRIORITY:qx.event.Registration.PRIORITY_NORMAL,SUPPORTED_TYPES:{load:1},TARGET_CHECK:qx.event.IEventHandler.TARGET_DOMNODE,IGNORE_CAN_HANDLE:false,onevent:qx.event.GlobalError.observeMethod(function(d){qx.event.Registration.fireEvent(d,b);})},members:{canHandleEvent:function(e,f){return e.tagName.toLowerCase()===a;},registerEvent:function(g,h,i){},unregisterEvent:function(j,k,l){}},defer:function(m){qx.event.Registration.addHandler(m);}});})();(function(){var e="qx.client",d="webkit",c="body",b="iframe",a="qx.bom.Iframe";qx.Class.define(a,{statics:{DEFAULT_ATTRIBUTES:{onload:"qx.event.handler.Iframe.onevent(this)",frameBorder:0,frameSpacing:0,marginWidth:0,marginHeight:0,hspace:0,vspace:0,border:0,allowTransparency:true},create:function(f,g){var f=f?qx.lang.Object.clone(f):{};var h=qx.bom.Iframe.DEFAULT_ATTRIBUTES;for(var i in h){if(f[i]==null){f[i]=h[i];}}return qx.bom.Element.create(b,f,g);},getWindow:qx.core.Variant.select(e,{"mshtml|gecko":function(j){try{return j.contentWindow;}catch(k){return null;}},"default":function(l){try{var m=this.getDocument(l);return m?m.defaultView:null;}catch(n){return null;}}}),getDocument:qx.core.Variant.select(e,{"mshtml":function(o){try{var p=this.getWindow(o);return p?p.document:null;}catch(q){return null;}},"default":function(r){try{return r.contentDocument;}catch(s){return null;}}}),getBody:function(t){try{var u=this.getDocument(t);return u?u.getElementsByTagName(c)[0]:null;}catch(v){return null;}},setSource:function(w,x){try{if(this.getWindow(w)&&qx.dom.Hierarchy.isRendered(w)){try{if(qx.core.Variant.isSet(e,d)&&qx.bom.client.Platform.MAC){var y=this.getContentWindow();if(y){y.stop();}}this.getWindow(w).location.replace(x);}catch(z){w.src=x;}}else{w.src=x;}}catch(A){qx.log.Logger.warn("Iframe source could not be set!");}},queryCurrentUrl:function(B){var C=this.getDocument(B);try{if(C&&C.location){return C.location.href;}}catch(D){}return null;}}});})();(function(){var a="qx.dom.Element";qx.Class.define(a,{statics:{hasChild:function(parent,b){return b.parentNode===parent;},hasChildren:function(c){return !!c.firstChild;},hasChildElements:function(d){d=d.firstChild;while(d){if(d.nodeType===1){return true;}d=d.nextSibling;}return false;},getParentElement:function(e){return e.parentNode;},isInDom:function(f,g){if(!g){g=window;}var h=g.document.getElementsByTagName(f.nodeName);for(var i=0,l=h.length;i<l;i++){if(h[i]===f){return true;}}return false;},insertAt:function(j,parent,k){var m=parent.childNodes[k];if(m){parent.insertBefore(j,m);}else{parent.appendChild(j);}return true;},insertBegin:function(n,parent){if(parent.firstChild){this.insertBefore(n,parent.firstChild);}else{parent.appendChild(n);}},insertEnd:function(o,parent){parent.appendChild(o);},insertBefore:function(p,q){q.parentNode.insertBefore(p,q);return true;},insertAfter:function(r,s){var parent=s.parentNode;if(s==parent.lastChild){parent.appendChild(r);}else{return this.insertBefore(r,s.nextSibling);}return true;},remove:function(t){if(!t.parentNode){return false;}t.parentNode.removeChild(t);return true;},removeChild:function(u,parent){if(u.parentNode!==parent){return false;}parent.removeChild(u);return true;},removeChildAt:function(v,parent){var w=parent.childNodes[v];if(!w){return false;}parent.removeChild(w);return true;},replaceChild:function(x,y){if(!y.parentNode){return false;}y.parentNode.replaceChild(x,y);return true;},replaceAt:function(z,A,parent){var B=parent.childNodes[A];if(!B){return false;}parent.replaceChild(z,B);return true;}}});})();(function(){var r="&",q="=",p="?",o="application/json",n="completed",m="text/plain",l="text/javascript",k="qx.io.remote.transport.Script",j="",h="_ScriptTransport_data",c="script",g="timeout",f="_ScriptTransport_",b="_ScriptTransport_id",a="aborted",e="utf-8",d="failed";qx.Class.define(k,{extend:qx.io.remote.transport.Abstract,construct:function(){qx.io.remote.transport.Abstract.call(this);var s=++qx.io.remote.transport.Script.__pg;if(s>=2000000000){qx.io.remote.transport.Script.__pg=s=1;}this.__ph=null;this.__pg=s;},statics:{__pg:0,_instanceRegistry:{},ScriptTransport_PREFIX:f,ScriptTransport_ID_PARAM:b,ScriptTransport_DATA_PARAM:h,handles:{synchronous:false,asynchronous:true,crossDomain:true,fileUpload:false,programaticFormFields:false,responseTypes:[m,l,o]},isSupported:function(){return true;},_numericMap:{"uninitialized":1,"loading":2,"loaded":2,"interactive":3,"complete":4},_requestFinished:qx.event.GlobalError.observeMethod(function(t,content){var u=qx.io.remote.transport.Script._instanceRegistry[t];if(u==null){{};}else{u._responseContent=content;u._switchReadyState(qx.io.remote.transport.Script._numericMap.complete);}})},members:{__pi:0,__ph:null,__pg:null,send:function(){var x=this.getUrl();x+=(x.indexOf(p)>=0?r:p)+qx.io.remote.transport.Script.ScriptTransport_ID_PARAM+q+this.__pg;var A=this.getParameters();var z=[];for(var w in A){if(w.indexOf(qx.io.remote.transport.Script.ScriptTransport_PREFIX)==0){this.error("Illegal parameter name. The following prefix is used internally by qooxdoo): "+qx.io.remote.transport.Script.ScriptTransport_PREFIX);}var y=A[w];if(y instanceof Array){for(var i=0;i<y.length;i++){z.push(encodeURIComponent(w)+q+encodeURIComponent(y[i]));}}else{z.push(encodeURIComponent(w)+q+encodeURIComponent(y));}}if(z.length>0){x+=r+z.join(r);}var v=this.getData();if(v!=null){x+=r+qx.io.remote.transport.Script.ScriptTransport_DATA_PARAM+q+encodeURIComponent(v);}qx.io.remote.transport.Script._instanceRegistry[this.__pg]=this;this.__ph=document.createElement(c);this.__ph.charset=e;this.__ph.src=x;{};document.body.appendChild(this.__ph);},_switchReadyState:function(B){switch(this.getState()){case n:case a:case d:case g:this.warn("Ignore Ready State Change");return;}while(this.__pi<B){this.setState(qx.io.remote.Exchange._nativeMap[++this.__pi]);}},setRequestHeader:function(C,D){},getResponseHeader:function(E){return null;},getResponseHeaders:function(){return {};},getStatusCode:function(){return 200;},getStatusText:function(){return j;},getFetchedLength:function(){return 0;},getResponseContent:function(){if(this.getState()!==n){{};return null;}{};switch(this.getResponseType()){case m:case o:case l:{};var F=this._responseContent;return (F===0?0:(F||null));default:this.warn("No valid responseType specified ("+this.getResponseType()+")!");return null;}}},defer:function(){qx.io.remote.Exchange.registerType(qx.io.remote.transport.Script,k);},destruct:function(){if(this.__ph){delete qx.io.remote.transport.Script._instanceRegistry[this.__pg];document.body.removeChild(this.__ph);}this.__ph=this._responseContent=null;}});})();(function(){var m="failed",k="completed",j="=",h="aborted",g="",f="sending",d="&",c="configured",b="timeout",a="application/xml",J="qx.io.remote.transport.XmlHttp",I="application/json",H="text/html",G="qx.client",F="receiving",E="text/plain",D="text/javascript",C="?",B="created",A="Boolean",u='Referer',v='Basic ',r="\n</pre>",t="string",p='Authorization',q="<pre>Could not execute json: \n",n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o=':',w="parseerror",x="file:",z="webkit",y="object";qx.Class.define(J,{extend:qx.io.remote.transport.Abstract,statics:{handles:{synchronous:true,asynchronous:true,crossDomain:false,fileUpload:false,programaticFormFields:false,responseTypes:[E,D,I,a,H]},requestObjects:[],requestObjectCount:0,createRequestObject:qx.core.Variant.select(G,{"default":function(){return new XMLHttpRequest;},"mshtml":function(){if(window.ActiveXObject&&qx.xml.Document.XMLHTTP){return new ActiveXObject(qx.xml.Document.XMLHTTP);}if(window.XMLHttpRequest){return new XMLHttpRequest;}}}),isSupported:function(){return !!this.createRequestObject();}},properties:{parseJson:{check:A,init:true}},members:{__nh:false,__ni:0,__nj:null,getRequest:function(){if(this.__nj===null){this.__nj=qx.io.remote.transport.XmlHttp.createRequestObject();this.__nj.onreadystatechange=qx.lang.Function.bind(this._onreadystatechange,this);}return this.__nj;},send:function(){this.__ni=0;var O=this.getRequest();var K=this.getMethod();var R=this.getAsynchronous();var Q=this.getUrl();var M=(window.location.protocol===x&&!(/^http(s){0,1}\:/.test(Q)));this.__nh=M;var U=this.getParameters(false);var S=[];for(var L in U){var P=U[L];if(P instanceof Array){for(var i=0;i<P.length;i++){S.push(encodeURIComponent(L)+j+encodeURIComponent(P[i]));}}else{S.push(encodeURIComponent(L)+j+encodeURIComponent(P));}}if(S.length>0){Q+=(Q.indexOf(C)>=0?d:C)+S.join(d);}if(this.getData()===null){var U=this.getParameters(true);var S=[];for(var L in U){var P=U[L];if(P instanceof Array){for(var i=0;i<P.length;i++){S.push(encodeURIComponent(L)+j+encodeURIComponent(P[i]));}}else{S.push(encodeURIComponent(L)+j+encodeURIComponent(P));}}if(S.length>0){this.setData(S.join(d));}}var T=function(V){var bb=n;var bf=g;var Y,X,W;var bc,bd,be,ba;var i=0;do{Y=V.charCodeAt(i++);X=V.charCodeAt(i++);W=V.charCodeAt(i++);bc=Y>>2;bd=((Y&3)<<4)|(X>>4);be=((X&15)<<2)|(W>>6);ba=W&63;if(isNaN(X)){be=ba=64;}else if(isNaN(W)){ba=64;}bf+=bb.charAt(bc)+bb.charAt(bd)+bb.charAt(be)+bb.charAt(ba);}while(i<V.length);return bf;};try{if(this.getUsername()){if(this.getUseBasicHttpAuth()){O.open(K,Q,R);O.setRequestHeader(p,v+T(this.getUsername()+o+this.getPassword()));}else{O.open(K,Q,R,this.getUsername(),this.getPassword());}}else{O.open(K,Q,R);}}catch(bg){this.error("Failed with exception: "+bg);this.failed();return;}if(!qx.core.Variant.isSet(G,z)){O.setRequestHeader(u,window.location.href);}var N=this.getRequestHeaders();for(var L in N){O.setRequestHeader(L,N[L]);}try{{};O.send(this.getData());}catch(bh){if(M){this.failedLocally();}else{this.error("Failed to send data: "+bh,"send");this.failed();}return;}if(!R){this._onreadystatechange();}},failedLocally:function(){if(this.getState()===m){return;}this.warn("Could not load from file: "+this.getUrl());this.failed();},_onreadystatechange:qx.event.GlobalError.observeMethod(function(e){switch(this.getState()){case k:case h:case m:case b:{};return;}var bi=this.getReadyState();if(bi==4){if(!qx.io.remote.Exchange.wasSuccessful(this.getStatusCode(),bi,this.__nh)){if(this.getState()===c){this.setState(f);}this.failed();return;}}while(this.__ni<bi){this.setState(qx.io.remote.Exchange._nativeMap[++this.__ni]);}}),getReadyState:function(){var bj=null;try{bj=this.getRequest().readyState;}catch(bk){}return bj;},setRequestHeader:function(bl,bm){this.getRequestHeaders()[bl]=bm;},getResponseHeader:function(bn){var bo=null;try{bo=this.getRequest().getResponseHeader(bn)||null;}catch(bp){}return bo;},getStringResponseHeaders:function(){var br=null;try{var bq=this.getRequest().getAllResponseHeaders();if(bq){br=bq;}}catch(bs){}return br;},getResponseHeaders:function(){var bv=this.getStringResponseHeaders();var bw={};if(bv){var bt=bv.split(/[\r\n]+/g);for(var i=0,l=bt.length;i<l;i++){var bu=bt[i].match(/^([^:]+)\s*:\s*(.+)$/i);if(bu){bw[bu[1]]=bu[2];}}}return bw;},getStatusCode:function(){var bx=-1;try{bx=this.getRequest().status;}catch(by){}return bx;},getStatusText:function(){var bz=g;try{bz=this.getRequest().statusText;}catch(bA){}return bz;},getResponseText:function(){var bB=null;try{bB=this.getRequest().responseText;}catch(bC){bB=null;}return bB;},getResponseXml:function(){var bF=null;var bD=this.getStatusCode();var bE=this.getReadyState();if(qx.io.remote.Exchange.wasSuccessful(bD,bE,this.__nh)){try{bF=this.getRequest().responseXML;}catch(bG){}}if(typeof bF==y&&bF!=null){if(!bF.documentElement){var s=String(this.getRequest().responseText).replace(/<\?xml[^\?]*\?>/,g);bF.loadXML(s);}if(!bF.documentElement){throw new Error("Missing Document Element!");}if(bF.documentElement.tagName==w){throw new Error("XML-File is not well-formed!");}}else{throw new Error("Response was not a valid xml document ["+this.getRequest().responseText+"]");}return bF;},getFetchedLength:function(){var bH=this.getResponseText();return typeof bH==t?bH.length:0;},getResponseContent:function(){var bI=this.getState();if(bI!==k&&bI!=m){{};return null;}{};var bK=this.getResponseText();if(bI==m){{};return bK;}switch(this.getResponseType()){case E:case H:{};return bK;case I:{};try{if(bK&&bK.length>0){var bJ;if(this.getParseJson()){bJ=qx.util.Json.parse(bK,false);bJ=(bJ===0?0:(bJ||null));}else{bJ=bK;}return bJ;}else{return null;}}catch(bL){this.error("Could not execute json: ["+bK+"]",bL);return q+bK+r;}case D:{};try{if(bK&&bK.length>0){var bJ=window.eval(bK);return (bJ===0?0:(bJ||null));}else{return null;}}catch(bM){this.error("Could not execute javascript: ["+bK+"]",bM);return null;}case a:bK=this.getResponseXml();{};return (bK===0?0:(bK||null));default:this.warn("No valid responseType specified ("+this.getResponseType()+")!");return null;}},_applyState:function(bN,bO){{};switch(bN){case B:this.fireEvent(B);break;case c:this.fireEvent(c);break;case f:this.fireEvent(f);break;case F:this.fireEvent(F);break;case k:this.fireEvent(k);break;case m:this.fireEvent(m);break;case h:this.getRequest().abort();this.fireEvent(h);break;case b:this.getRequest().abort();this.fireEvent(b);break;}}},defer:function(){qx.io.remote.Exchange.registerType(qx.io.remote.transport.XmlHttp,J);},destruct:function(){var bP=this.getRequest();if(bP){bP.onreadystatechange=qx.lang.Function.empty;switch(bP.readyState){case 1:case 2:case 3:bP.abort();}}this.__nj=null;}});})();(function(){var c="Integer",b="Object",a="qx.io.remote.Response";qx.Class.define(a,{extend:qx.event.type.Event,properties:{state:{check:c,nullable:true},statusCode:{check:c,nullable:true},content:{nullable:true},responseHeaders:{check:b,nullable:true}},members:{clone:function(d){var e=qx.event.type.Event.prototype.clone.call(this,d);e.setType(this.getType());e.setState(this.getState());e.setStatusCode(this.getStatusCode());e.setContent(this.getContent());e.setResponseHeaders(this.getResponseHeaders());return e;},getResponseHeader:function(f){var g=this.getResponseHeaders();if(g){return g[f]||null;}return null;}}});})();(function(){var b="pane",a="qx.ui.container.Scroll";qx.Class.define(a,{extend:qx.ui.core.scroll.AbstractScrollArea,include:[qx.ui.core.MContentPadding],construct:function(content){qx.ui.core.scroll.AbstractScrollArea.call(this);if(content){this.add(content);}},members:{add:function(c){this.getChildControl(b).add(c);},remove:function(d){this.getChildControl(b).remove(d);},getChildren:function(){return this.getChildControl(b).getChildren();},_getContentPaddingTarget:function(){return this.getChildControl(b);}}});})();(function(){var k="legendview-label-important",j="Package/Class/Mixin/Interface is not fully documented",h="ICON_PROPERTY_PUB",g="Themeable Property",f="Child Control",e="ICON_CLASS_SINGLETON",d="Public Property",c="Private Method",b="Public Method",a="ICON_CHILDCONTROL",bd="string",bc="ICON_INTERFACE",bb='<span style="text-decoration: line-through;color: #7193b9;">deprecated</span>',ba="center",Y="ICON_EVENT",X="apiviewer.ui.LegendView",W="Singleton Class",V="Private Property",U="OVERLAY_WARN",T="ICON_PACKAGE",r="Method/Property/Event is inherited from one of the super classes",s="legend",p="ICON_PROPERTY_PRIV",q="middle",n="ICON_BLANK",o="__Tb",l="ICON_PROPERTY_PROT",m="ICON_CLASS_ABSTRACT",v="ICON_CLASS",w="ICON_PROPERTY_PUB_THEMEABLE",E="Protected Method",C="Constant",L="Method/Property/Event is not fully documented",G="OVERLAY_OVERRIDDEN",P="Abstract Class",N="OVERLAY_MIXIN",y="Class",S="Interface",R="ICON_METHOD_PUB",Q="Event",x="Mixin",A="Package",B="Protected Property",D="OVERLAY_ERROR",F="ICON_MIXIN",H="legendview-label",M="ICON_CLASS_STATIC",O="Method/Property overrides the Method/Property of the super class",t="ICON_METHOD_PRIV",u="Static Class",z="Method/Property is included from a mixin",K="ICON_METHOD_PROT",J="OVERLAY_INHERITED",I="ICON_CONSTANT";qx.Class.define(X,{extend:qx.ui.container.Scroll,construct:function(){qx.ui.container.Scroll.call(this);this.setAppearance(s);var be=new qx.ui.layout.Grid(10,10);be.setColumnWidth(1,150);be.setColumnFlex(1,1);var content=new qx.ui.container.Composite(be);this.__Tb=[{icon:T,desc:A},{icon:v,desc:y},{icon:M,desc:u},{icon:m,desc:P},{icon:e,desc:W},{icon:bc,desc:S},{icon:F,desc:x},{icon:a,desc:f},{icon:R,desc:b},{icon:K,desc:E},{icon:t,desc:c},{icon:h,desc:d},{icon:l,desc:B},{icon:p,desc:V},{icon:w,desc:g},{icon:Y,desc:Q},{icon:I,desc:C},{icon:n,desc:bb},{icon:U,desc:j},{icon:D,desc:L},{icon:N,desc:z},{icon:J,desc:r},{icon:G,desc:O}];var length=this.__Tb.length;var bg,bf;for(var i=0;i<length;i++){bg=this.__Tb[i];bf=apiviewer.TreeUtil.iconNameToIconPath(bg.icon);if(typeof (bf)!=bd){bf=bf[0];}content.add(new qx.ui.basic.Image(bf).set({alignX:ba,alignY:q}),{row:i,column:0});content.add(new qx.ui.basic.Label(bg.desc).set({rich:true,appearance:(i<17)?k:H}),{row:i,column:1});}this.add(content);},members:{__Tb:null},destruct:function(){this._disposeMap(o);}});})();(function(){var d="_applyDynamic",c="changeSelection",b="Boolean",a="qx.ui.container.Stack";qx.Class.define(a,{extend:qx.ui.core.Widget,implement:qx.ui.core.ISingleSelection,include:qx.ui.core.MSingleSelectionHandling,construct:function(){qx.ui.core.Widget.call(this);this._setLayout(new qx.ui.layout.Grow);this.addListener(c,this.__nu,this);},properties:{dynamic:{check:b,init:false,apply:d}},members:{_applyDynamic:function(f){var h=this._getChildren();var g=this.getSelection()[0];var j;for(var i=0,l=h.length;i<l;i++){j=h[i];if(j!=g){if(f){h[i].exclude();}else{h[i].hide();}}}},_getItems:function(){return this.getChildren();},_isAllowEmptySelection:function(){return true;},_isItemSelectable:function(k){return true;},__nu:function(e){var m=e.getOldData()[0];var n=e.getData()[0];if(m){if(this.isDynamic()){m.exclude();}else{m.hide();}}if(n){n.show();}},add:function(o){this._add(o);var p=this.getSelection()[0];if(!p){this.setSelection([o]);}else if(p!==o){if(this.isDynamic()){o.exclude();}else{o.hide();}}},remove:function(q){this._remove(q);if(this.getSelection()[0]===q){var r=this._getChildren()[0];if(r){this.setSelection([r]);}else{this.resetSelection();}}},indexOf:function(s){return this._indexOf(s);},getChildren:function(){return this._getChildren();},previous:function(){var v=this.getSelection()[0];var t=this._indexOf(v)-1;var w=this._getChildren();if(t<0){t=w.length-1;}var u=w[t];this.setSelection([u]);},next:function(){var y=this.getSelection()[0];var x=this._indexOf(y)+1;var z=this._getChildren();var A=z[x]||z[0];this.setSelection([A]);}}});})();(function(){var k="pressed",j="abandoned",i="hovered",h="Boolean",g="Space",f="undetermined",d="Enter",c="checked",b="mousedown",a="_applyTriState",w="mouseout",v="changeValue",u="keydown",t="_applyGroup",s="button",r="execute",q="qx.ui.form.RadioGroup",p="_applyValue",o="qx.ui.form.ToggleButton",n="mouseover",l="keyup",m="mouseup";qx.Class.define(o,{extend:qx.ui.basic.Atom,include:[qx.ui.core.MExecutable],implement:[qx.ui.form.IBooleanForm,qx.ui.form.IExecutable,qx.ui.form.IRadioItem],construct:function(x,y){qx.ui.basic.Atom.call(this,x,y);this.addListener(n,this._onMouseOver);this.addListener(w,this._onMouseOut);this.addListener(b,this._onMouseDown);this.addListener(m,this._onMouseUp);this.addListener(u,this._onKeyDown);this.addListener(l,this._onKeyUp);this.addListener(r,this._onExecute,this);},properties:{appearance:{refine:true,init:s},focusable:{refine:true,init:true},value:{check:h,nullable:true,event:v,apply:p,init:false},group:{check:q,nullable:true,apply:t},triState:{check:h,apply:a,nullable:true,init:null}},members:{_applyGroup:function(z,A){if(A){A.remove(this);}if(z){z.add(this);}},_applyValue:function(B,C){B?this.addState(c):this.removeState(c);if(this.isTriState()){if(B===null){this.addState(f);}else if(C===null){this.removeState(f);}}},_applyTriState:function(D,E){this._applyValue(this.getValue());},_onExecute:function(e){this.toggleValue();},_onMouseOver:function(e){if(e.getTarget()!==this){return;}this.addState(i);if(this.hasState(j)){this.removeState(j);this.addState(k);}},_onMouseOut:function(e){if(e.getTarget()!==this){return;}this.removeState(i);if(this.hasState(k)){if(!this.getValue()){this.removeState(k);}this.addState(j);}},_onMouseDown:function(e){if(!e.isLeftPressed()){return;}this.capture();this.removeState(j);this.addState(k);e.stopPropagation();},_onMouseUp:function(e){this.releaseCapture();if(this.hasState(j)){this.removeState(j);}else if(this.hasState(k)){this.execute();}this.removeState(k);e.stopPropagation();},_onKeyDown:function(e){switch(e.getKeyIdentifier()){case d:case g:this.removeState(j);this.addState(k);e.stopPropagation();}},_onKeyUp:function(e){if(!this.hasState(k)){return;}switch(e.getKeyIdentifier()){case d:case g:this.removeState(j);this.execute();this.removeState(k);e.stopPropagation();}}}});})();(function(){var e="inherit",d="toolbar-button",c="qx.ui.toolbar.CheckBox",b="keydown",a="keyup";qx.Class.define(c,{extend:qx.ui.form.ToggleButton,construct:function(f,g){qx.ui.form.ToggleButton.call(this,f,g);this.removeListener(b,this._onKeyDown);this.removeListener(a,this._onKeyUp);},properties:{appearance:{refine:true,init:d},show:{refine:true,init:e},focusable:{refine:true,init:false}}});})();(function(){var a="qx.ui.toolbar.RadioButton";qx.Class.define(a,{extend:qx.ui.toolbar.CheckBox,include:[qx.ui.form.MModelProperty],implement:[qx.ui.form.IModel,qx.ui.form.IRadioItem],members:{_applyValue:function(b,c){qx.ui.toolbar.CheckBox.prototype._applyValue.call(this,b,c);if(b){var d=this.getGroup();if(d){d.setSelection([this]);}}},_onExecute:function(e){var f=this.getGroup();if(f&&f.getAllowEmptySelection()||!f){this.toggleValue();}else{this.setValue(true);}}}});})();(function(){var e="arrow",d="qx.ui.toolbar.MenuButton",c="Boolean",b="_applyShowArrow",a="toolbar-menubutton";qx.Class.define(d,{extend:qx.ui.menubar.Button,properties:{appearance:{refine:true,init:a},showArrow:{check:c,init:false,themeable:true,apply:b}},members:{_createChildControlImpl:function(f,g){var h;switch(f){case e:h=new qx.ui.basic.Image();h.setAnonymous(true);this._addAt(h,10);break;}return h||qx.ui.menubar.Button.prototype._createChildControlImpl.call(this,f);},_applyShowArrow:function(i,j){if(i){this._showChildControl(e);}else{this._excludeChildControl(e);}}}});})();(function(){var j="checked",i="qx.ui.form.RadioGroup",h="Boolean",g="menu-radiobutton",f="_applyValue",d="qx.ui.menu.RadioButton",c="changeValue",b="_applyGroup",a="execute";qx.Class.define(d,{extend:qx.ui.menu.AbstractButton,include:[qx.ui.form.MModelProperty],implement:[qx.ui.form.IRadioItem,qx.ui.form.IBooleanForm,qx.ui.form.IModel],construct:function(k,l){qx.ui.menu.AbstractButton.call(this);if(k!=null){this.setLabel(k);}if(l!=null){this.setMenu(l);}this.addListener(a,this._onExecute,this);},properties:{appearance:{refine:true,init:g},value:{check:h,nullable:true,event:c,apply:f,init:false},group:{check:i,nullable:true,apply:b}},members:{_applyValue:function(m,n){m?this.addState(j):this.removeState(j);},_applyGroup:function(o,p){if(p){p.remove(this);}if(o){o.add(this);}},_onExecute:function(e){this.setValue(true);},_onMouseUp:function(e){if(e.isLeftPressed()){this.execute();}qx.ui.menu.Manager.getInstance().hideAll();},_onKeyPress:function(e){this.execute();}}});})();(function(){var x="pane",w="lastTab",v="page",u="bar",t="firstTab",s="right",r="button",q="bottom",p="left",o="close",f="top",n="changeSelection",j="tabview",c="vertical",b="horizontal",h="_applyBarPosition",g="beforeChangeSelection",k="__DQ",a="qx.ui.tabview.TabView",m="close-button",d="qx.event.type.Data";qx.Class.define(a,{extend:qx.ui.core.Widget,implement:qx.ui.core.ISingleSelection,include:[qx.ui.core.MContentPadding],construct:function(y){qx.ui.core.Widget.call(this);this.__DP={top:"barTop",right:"barRight",bottom:"barBottom",left:"barLeft"};this._createChildControl(u);this._createChildControl(x);var z=this.__DQ=new qx.ui.form.RadioGroup;z.setWrap(false);z.addListener(n,this._onChangeSelection,this);if(y!=null){this.setBarPosition(y);}else{this.initBarPosition();}},events:{"changeSelection":d},properties:{appearance:{refine:true,init:j},barPosition:{check:[p,s,f,q],init:f,apply:h}},members:{__DQ:null,_createChildControlImpl:function(A,B){var C;switch(A){case u:C=new qx.ui.container.SlideBar();C.setZIndex(10);this._add(C);break;case x:C=new qx.ui.container.Stack;C.setZIndex(5);this._add(C,{flex:1});break;}return C||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,A);},_getContentPaddingTarget:function(){return this.getChildControl(x);},add:function(D){{};var E=D.getButton();var F=this.getChildControl(u);var H=this.getChildControl(x);D.exclude();F.add(E);H.add(D);this.__DQ.add(E);D.addState(this.__DP[this.getBarPosition()]);D.addState(w);var G=this.getChildren();if(G[0]==D){D.addState(t);}else{G[G.length-2].removeState(w);}D.addListener(o,this._onPageClose,this);},remove:function(I){var N=this.getChildControl(x);var L=this.getChildControl(u);var K=I.getButton();var M=N.getChildren();if(this.getSelection()[0]==I){var J=M.indexOf(I);if(J==0){if(M[1]){this.setSelection([M[1]]);}else{this.resetSelection();}}else{this.setSelection([M[J-1]]);}}L.remove(K);N.remove(I);this.__DQ.remove(K);I.removeState(this.__DP[this.getBarPosition()]);if(I.hasState(t)){I.removeState(t);if(M[0]){M[0].addState(t);}}if(I.hasState(w)){I.removeState(w);if(M.length>0){M[M.length-1].addState(w);}}I.removeListener(o,this._onPageClose,this);},getChildren:function(){return this.getChildControl(x).getChildren();},indexOf:function(O){return this.getChildControl(x).indexOf(O);},__DP:null,_applyBarPosition:function(P,Q){var R=this.getChildControl(u);var W=P==p||P==s;var U=P==s||P==q;var V=W?qx.ui.layout.HBox:qx.ui.layout.VBox;var Y=this._getLayout();if(Y&&Y instanceof V){}else{this._setLayout(Y=new V);}Y.setReversed(U);R.setOrientation(W?c:b);var X=this.getChildren();if(Q){var S=this.__DP[Q];R.removeState(S);for(var i=0,l=X.length;i<l;i++){X[i].removeState(S);}}if(P){var T=this.__DP[P];R.addState(T);for(var i=0,l=X.length;i<l;i++){X[i].addState(T);}}},getSelection:function(){var ba=this.__DQ.getSelection();var bb=[];for(var i=0;i<ba.length;i++){bb.push(ba[i].getUserData(v));}return bb;},setSelection:function(bc){var bd=[];for(var i=0;i<bc.length;i++){bd.push(bc[i].getChildControl(r));}this.__DQ.setSelection(bd);},resetSelection:function(){this.__DQ.resetSelection();},isSelected:function(be){var bf=be.getChildControl(r);return this.__DQ.isSelected(bf);},isSelectionEmpty:function(){return this.__DQ.isSelectionEmpty();},getSelectables:function(bg){var bh=this.__DQ.getSelectables(bg);var bi=[];for(var i=0;i<bh.length;i++){bi.push(bh[i].getUserData(v));}return bi;},_onChangeSelection:function(e){var bn=this.getChildControl(x);var bk=e.getData()[0];var bm=e.getOldData()[0];var bj=[];var bl=[];if(bk){bj=[bk.getUserData(v)];bn.setSelection(bj);bk.focus();this.scrollChildIntoView(bk,null,null,false);}else{bn.resetSelection();}if(bm){bl=[bm.getUserData(v)];}this.fireDataEvent(n,bj,bl);},_onBeforeChangeSelection:function(e){if(!this.fireNonBubblingEvent(g,qx.event.type.Event,[false,true])){e.preventDefault();}},_onRadioChangeSelection:function(e){var bo=e.getData()[0];if(bo){this.setSelection([bo.getUserData(v)]);}else{this.resetSelection();}},_onPageClose:function(e){var bq=e.getTarget();var bp=bq.getButton().getChildControl(m);bp.reset();this.remove(bq);}},destruct:function(){this._disposeObjects(k);this.__DP=null;}});})();(function(){var k="slider",j="splitter",i="horizontal",h="px",g="vertical",f="knob",d="mousedown",c="mouseout",b="Integer",a="height",D="mousemove",C="move",B="maxHeight",A="resize",z="width",w="_applyOrientation",v="_applyOffset",u="splitpane",t="qx.ui.splitpane.Pane",s="top",q="minHeight",r="mouseup",o="minWidth",p="appear",m="losecapture",n="left",l="maxWidth";qx.Class.define(t,{extend:qx.ui.core.Widget,construct:function(E){qx.ui.core.Widget.call(this);this.__mT=[];if(E){this.setOrientation(E);}else{this.initOrientation();}this.__nc.addListener(d,this._onMouseDown,this);this.__nc.addListener(r,this._onMouseUp,this);this.__nc.addListener(D,this._onMouseMove,this);this.__nc.addListener(c,this._onMouseOut,this);this.__nc.addListener(m,this._onMouseUp,this);},properties:{appearance:{refine:true,init:u},offset:{check:b,init:6,apply:v},orientation:{init:i,check:[i,g],apply:w}},members:{__mU:null,__mV:false,__mW:null,__mX:null,__mY:null,__na:null,__nb:null,__mT:null,__nc:null,_createChildControlImpl:function(F,G){var H;switch(F){case k:H=new qx.ui.splitpane.Slider(this);H.exclude();this._add(H,{type:F});break;case j:H=new qx.ui.splitpane.Splitter(this);this._add(H,{type:F});H.addListener(C,this.__nd,this);break;}return H||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,F);},__nd:function(e){this.__nf(e.getData());},__ne:function(I){this.__nc=new qx.ui.splitpane.Blocker(I);this.getContentElement().add(this.__nc);var J=this.getChildControl(j);var K=J.getWidth();if(!K){J.addListenerOnce(p,function(){this.__nf();},this);}J.addListener(A,function(e){var L=e.getData();if(L.height==0||L.width==0){this.__nc.hide();}else{this.__nc.show();}},this);},getBlocker:function(){return this.__nc;},_applyOrientation:function(M,N){var O=this.getChildControl(k);var R=this.getChildControl(j);this.__mY=M===i;if(!this.__nc){this.__ne(M);}this.__nc.setOrientation(M);var Q=this._getLayout();if(Q){Q.dispose();}var P=M===g?new qx.ui.splitpane.VLayout:new qx.ui.splitpane.HLayout;this._setLayout(P);R.removeState(N);R.addState(M);R.getChildControl(f).removeState(N);R.getChildControl(f).addState(M);O.removeState(N);O.addState(M);qx.ui.core.queue.Manager.flush();this.__nf();},_applyOffset:function(S,T){this.__nf();},__nf:function(U){var V=this.getChildControl(j);var ba=this.getOffset();var bb=V.getBounds();var Y=V.getContainerElement().getDomElement();if(!Y){return;}if(this.__mY){var X=null;if(U){X=U.width;}else if(bb){X=bb.width;}var bc=U&&U.left;if(X){if(!bc){bc=qx.bom.element.Location.getPosition(Y).left;}this.__nc.setWidth(ba,X);this.__nc.setLeft(ba,bc);}}else{var W=null;if(U){W=U.height;}else if(bb){W=bb.height;}var top=U&&U.top;if(W){if(!top){top=qx.bom.element.Location.getPosition(Y).top;}this.__nc.setHeight(ba,W);this.__nc.setTop(ba,top);}}},add:function(bd,be){if(be==null){this._add(bd);}else{this._add(bd,{flex:be});}this.__mT.push(bd);},remove:function(bf){this._remove(bf);qx.lang.Array.remove(this.__mT,bf);},getChildren:function(){return this.__mT;},_onMouseDown:function(e){if(!e.isLeftPressed()){return;}var bg=this.getChildControl(j);var bi=bg.getContainerLocation();var bh=this.getContentLocation();this.__mU=this.__mY?e.getDocumentLeft()-bi.left+bh.left:e.getDocumentTop()-bi.top+bh.top;var bk=this.getChildControl(k);var bj=bg.getBounds();bk.setUserBounds(bj.left,bj.top,bj.width,bj.height);bk.setZIndex(bg.getZIndex()+1);bk.show();this.__mV=true;this.__nc.capture();e.stop();},_onMouseMove:function(e){this._setLastMousePosition(e.getDocumentLeft(),e.getDocumentTop());if(this.__mV){this.__ng();var bl=this.getChildControl(k);var bm=this.__na;if(this.__mY){bl.setDomLeft(bm);this.__nc.setStyle(n,(bm-this.getOffset())+h);}else{bl.setDomTop(bm);this.__nc.setStyle(s,(bm-this.getOffset())+h);}e.stop();}},_onMouseOut:function(e){this._setLastMousePosition(e.getDocumentLeft(),e.getDocumentTop());},_onMouseUp:function(e){if(!this.__mV){return;}this._finalizeSizes();var bn=this.getChildControl(k);bn.exclude();this.__mV=false;this.releaseCapture();e.stop();},_finalizeSizes:function(){var br=this.__na;var bo=this.__nb;if(br==null){return;}var bt=this._getChildren();var bs=bt[2];var bp=bt[3];var bq=bs.getLayoutProperties().flex;var bu=bp.getLayoutProperties().flex;if((bq!=0)&&(bu!=0)){bs.setLayoutProperties({flex:br});bp.setLayoutProperties({flex:bo});}else{if(this.__mY){bs.setWidth(br);bp.setWidth(bo);}else{bs.setHeight(br);bp.setHeight(bo);}}},__ng:function(){if(this.__mY){var bx=o,bE=z,by=l,bC=this.__mW;}else{var bx=q,bE=a,by=B,bC=this.__mX;}var bD=this._getChildren();var bv=bD[2].getSizeHint();var bA=bD[3].getSizeHint();var bB=bD[2].getBounds()[bE]+bD[3].getBounds()[bE];var bz=bC-this.__mU;var bw=bB-bz;if(bz<bv[bx]){bw-=bv[bx]-bz;bz=bv[bx];}else if(bw<bA[bx]){bz-=bA[bx]-bw;bw=bA[bx];}if(bz>bv[by]){bw+=bz-bv[by];bz=bv[by];}else if(bw>bA[by]){bz+=bw-bA[by];bw=bA[by];}this.__na=bz;this.__nb=bw;},_isActiveDragSession:function(){return this.__mV;},_setLastMousePosition:function(x,y){this.__mW=x;this.__mX=y;}},destruct:function(){this.__mT=null;}});})();(function(){var a="qx.ui.splitpane.Slider";qx.Class.define(a,{extend:qx.ui.core.Widget,properties:{allowShrinkX:{refine:true,init:false},allowShrinkY:{refine:true,init:false}}});})();(function(){var e="center",d="knob",c="middle",b="qx.ui.splitpane.Splitter",a="vertical";qx.Class.define(b,{extend:qx.ui.core.Widget,construct:function(f){qx.ui.core.Widget.call(this);if(f.getOrientation()==a){this._setLayout(new qx.ui.layout.HBox(0,e));this._getLayout().setAlignY(c);}else{this._setLayout(new qx.ui.layout.VBox(0,c));this._getLayout().setAlignX(e);}this._createChildControl(d);},properties:{allowShrinkX:{refine:true,init:false},allowShrinkY:{refine:true,init:false}},members:{_createChildControlImpl:function(g,h){var i;switch(g){case d:i=new qx.ui.basic.Image;this._add(i);break;}return i||qx.ui.core.Widget.prototype._createChildControlImpl.call(this,g);}}});})();(function(){var o="px",n="horizontal",m="top",l="height",k="width",j="left",i="100%",h="cursor",g="vertical",f="_applyOrientation",c="qx.ui.splitpane.Blocker",e="col-resize",d="row-resize",b="div",a="absolute";qx.Class.define(c,{extend:qx.html.Element,construct:function(p){var q={position:a,zIndex:11};qx.html.Element.call(this,b,q);if(p){this.setOrientation(p);}else{this.initOrientation();}},properties:{orientation:{init:n,check:[n,g],apply:f}},members:{_applyOrientation:function(r,s){if(r==n){this.setStyle(l,i);this.setStyle(h,e);this.setStyle(m,null);}else{this.setStyle(k,i);this.setStyle(j,null);this.setStyle(h,d);}},setWidth:function(t,u){var v=u+2*t;this.setStyle(k,v+o);},setHeight:function(w,x){var y=x+2*w;this.setStyle(l,y+o);},setLeft:function(z,A){var B=A-z;this.setStyle(j,B+o);},setTop:function(C,D){var top=D-C;this.setStyle(m,top+o);}}});})();(function(){var c="slider",b="splitter",a="qx.ui.splitpane.VLayout";qx.Class.define(a,{extend:qx.ui.layout.Abstract,members:{verifyLayoutProperty:null,renderLayout:function(d,e){var v=this._getLayoutChildren();var length=v.length;var r,u;var g,f,p,h;for(var i=0;i<length;i++){r=v[i];u=r.getLayoutProperties().type;if(u===b){f=r;}else if(u===c){p=r;}else if(!g){g=r;}else{h=r;}}if(g&&h){var x=g.getLayoutProperties().flex;var k=h.getLayoutProperties().flex;if(x==null){x=1;}if(k==null){k=1;}var w=g.getSizeHint();var n=f.getSizeHint();var o=h.getSizeHint();var j=w.height;var s=n.height;var t=o.height;if(x>0&&k>0){var l=x+k;var m=e-s;var j=Math.round((m/l)*x);var t=m-j;var q=qx.ui.layout.Util.arrangeIdeals(w.minHeight,j,w.maxHeight,o.minHeight,t,o.maxHeight);j=q.begin;t=q.end;}else if(x>0){j=e-s-t;if(j<w.minHeight){j=w.minHeight;}if(j>w.maxHeight){j=w.maxHeight;}}else if(k>0){t=e-j-s;if(t<o.minHeight){t=o.minHeight;}if(t>o.maxHeight){t=o.maxHeight;}}g.renderLayout(0,0,d,j);f.renderLayout(0,j,d,s);h.renderLayout(0,j+s,d,t);}else{f.renderLayout(0,0,0,0);if(g){g.renderLayout(0,0,d,e);}else if(h){h.renderLayout(0,0,d,e);}}},_computeSizeHint:function(){var H=this._getLayoutChildren();var length=H.length;var A,z,G;var B=0,D=0,C=0;var E=0,F=0,y=0;for(var i=0;i<length;i++){A=H[i];G=A.getLayoutProperties();if(G.type===c){continue;}z=A.getSizeHint();B+=z.minHeight;D+=z.height;C+=z.maxHeight;if(z.minWidth>E){E=z.minWidth;}if(z.width>F){F=z.width;}if(z.maxWidth>y){y=z.maxWidth;}}return {minHeight:B,height:D,maxHeight:C,minWidth:E,width:F,maxWidth:y};}}});})();(function(){var c="slider",b="splitter",a="qx.ui.splitpane.HLayout";qx.Class.define(a,{extend:qx.ui.layout.Abstract,members:{verifyLayoutProperty:null,renderLayout:function(d,e){var v=this._getLayoutChildren();var length=v.length;var s,u;var g,f,p,h;for(var i=0;i<length;i++){s=v[i];u=s.getLayoutProperties().type;if(u===b){f=s;}else if(u===c){p=s;}else if(!g){g=s;}else{h=s;}}if(g&&h){var x=g.getLayoutProperties().flex;var j=h.getLayoutProperties().flex;if(x==null){x=1;}if(j==null){j=1;}var w=g.getSizeHint();var m=f.getSizeHint();var o=h.getSizeHint();var t=w.width;var r=m.width;var q=o.width;if(x>0&&j>0){var k=x+j;var l=d-r;var t=Math.round((l/k)*x);var q=l-t;var n=qx.ui.layout.Util.arrangeIdeals(w.minWidth,t,w.maxWidth,o.minWidth,q,o.maxWidth);t=n.begin;q=n.end;}else if(x>0){t=d-r-q;if(t<w.minWidth){t=w.minWidth;}if(t>w.maxWidth){t=w.maxWidth;}}else if(j>0){q=d-t-r;if(q<o.minWidth){q=o.minWidth;}if(q>o.maxWidth){q=o.maxWidth;}}g.renderLayout(0,0,t,e);f.renderLayout(t,0,r,e);h.renderLayout(t+r,0,q,e);}else{f.renderLayout(0,0,0,0);if(g){g.renderLayout(0,0,d,e);}else if(h){h.renderLayout(0,0,d,e);}}},_computeSizeHint:function(){var H=this._getLayoutChildren();var length=H.length;var A,z,G;var E=0,F=0,y=0;var B=0,D=0,C=0;for(var i=0;i<length;i++){A=H[i];G=A.getLayoutProperties();if(G.type===c){continue;}z=A.getSizeHint();E+=z.minWidth;F+=z.width;y+=z.maxWidth;if(z.minHeight>B){B=z.minHeight;}if(z.height>D){D=z.height;}if(z.maxHeight>C){C=z.maxHeight;}}return {minWidth:E,width:F,maxWidth:y,minHeight:B,height:D,maxHeight:C};}}});})();(function(){var a="apiviewer.test.LayoutItem";qx.Class.define(a,{extend:qx.core.Object,members:{renderSeparator:function(b,c){}}});})();(function(){var p="other",o="widgets",n="fonts",m="appearances",k="qx.Theme",j="]",h="[Theme ",g="colors",f="decorations",e="Theme",b="meta",d="borders",c="icons";qx.Bootstrap.define(k,{statics:{define:function(name,q){if(!q){var q={};}q.include=this.__rg(q.include);q.patch=this.__rg(q.patch);{};var r={$$type:e,name:name,title:q.title,toString:this.genericToString};if(q.extend){r.supertheme=q.extend;}r.basename=qx.Bootstrap.createNamespace(name,r);this.__rj(r,q);this.__rh(r,q);this.$$registry[name]=r;for(var i=0,a=q.include,l=a.length;i<l;i++){this.include(r,a[i]);}for(var i=0,a=q.patch,l=a.length;i<l;i++){this.patch(r,a[i]);}},__rg:function(s){if(!s){return [];}if(qx.Bootstrap.isArray(s)){return s;}else{return [s];}},__rh:function(t,u){var v=u.aliases||{};if(u.extend&&u.extend.aliases){qx.Bootstrap.objectMergeWith(v,u.extend.aliases,false);}t.aliases=v;},getAll:function(){return this.$$registry;},getByName:function(name){return this.$$registry[name];},isDefined:function(name){return this.getByName(name)!==undefined;},getTotalNumber:function(){return qx.Bootstrap.objectGetLength(this.$$registry);},genericToString:function(){return h+this.name+j;},__ri:function(w){for(var i=0,x=this.__rk,l=x.length;i<l;i++){if(w[x[i]]){return x[i];}}},__rj:function(y,z){var C=this.__ri(z);if(z.extend&&!C){C=z.extend.type;}y.type=C||p;if(!C){return;}var E=function(){};if(z.extend){E.prototype=new z.extend.$$clazz;}var D=E.prototype;var B=z[C];for(var A in B){D[A]=B[A];if(D[A].base){{};D[A].base=z.extend;}}y.$$clazz=E;y[C]=new E;},$$registry:{},__rk:[g,d,f,n,c,o,m,b],__rl:null,__rm:null,__rn:function(){},patch:function(F,G){var I=this.__ri(G);if(I!==this.__ri(F)){throw new Error("The mixins '"+F.name+"' are not compatible '"+G.name+"'!");}var H=G[I];var J=F.$$clazz.prototype;for(var K in H){J[K]=H[K];}},include:function(L,M){var O=M.type;if(O!==L.type){throw new Error("The mixins '"+L.name+"' are not compatible '"+M.name+"'!");}var N=M[O];var P=L.$$clazz.prototype;for(var Q in N){if(P[Q]!==undefined){continue;}P[Q]=N[Q];}}}});})();(function(){var dN="button-frame",dM="atom",dL="widget",dK="main",dJ="button",dI="bold",dH="text-selected",dG="image",dF="middle",dE="selected",co="background-light",cn="cell",cm="text-disabled",cl="groupbox",ck="decoration/arrows/down.png",cj="label",ci="border-invalid",ch="input",cg="white",cf="input-disabled",dU="menu-button",dV="input-focused-invalid",dS="toolbar-button",dT="spinner",dQ="input-focused",dR="popup",dO="tooltip",dP="list",dW="tree-item",dX="treevirtual-contract",dk="scrollbar",dj="datechooser/nav-button",dm="text-hovered",dl="center",dp="treevirtual-expand",dn="textfield",dr="decoration/arrows/right.png",dq="background-application",di="radiobutton",dh="invalid",k="combobox",l="right-top",m="checkbox",n="text-title",o="icon/16/places/folder-open.png",p="qx/static/blank.gif",q="scrollbar/button",r="right",s="combobox/button",t="icon/16/places/folder.png",em="text-label",el="decoration/tree/closed.png",ek="scrollbar-slider-horizontal",ej="checkbox-checked",eq="decoration/arrows/left.png",ep="button-focused",eo="text-light",en="menu-slidebar-button",es="checkbox-undetermined",er="text-input",bm="slidebar/button-forward",bn="background-splitpane",bk=".png",bl="decoration/tree/open.png",bq="default",br="decoration/arrows/down-small.png",bo="datechooser",bp="slidebar/button-backward",bi="selectbox",bj="treevirtual-folder",N="shadow-popup",M="icon/16/mimetypes/office-document.png",P="background-medium",O="icon/32/places/folder-open.png",J="icon/22/places/folder-open.png",I="table",L="decoration/arrows/up.png",K="decoration/form/",H="",G="-invalid",bx="button-checked",by="decoration/window/maximize-active-hovered.png",bz="radiobutton-hovered",bA="keyboard-focus",bt="group-item",bu="decoration/cursors/",bv="slidebar",bw="tooltip-error-arrow",bB="table-scroller-focus-indicator",bC="move-frame",bb="nodrop",ba="decoration/table/boolean-true.png",Y="table-header-cell",X="menu",W="app-header",V="row-layer",U="text-inactive",T="move",bf="radiobutton-checked-focused",be="decoration/window/restore-active-hovered.png",bD="shadow-window",bE="table-column-button",bF="right.png",bG="checkbox-undetermined-hovered",bH="tabview-page-button-bottom-inactive",bI="tooltip-error",bJ="window-statusbar",bK="button-hovered",bL="decoration/scrollbar/scrollbar-",bM="background-tip",cw="scrollbar-slider-horizontal-disabled",cv="table-scroller-header",cu="button-pressed",ct="table-pane",cA="decoration/window/close-active.png",cz="native",cy="checkbox-hovered",cx="button-invalid-shadow",cE="decoration/window/minimize-active-hovered.png",cD="menubar",dc="icon/16/actions/dialog-cancel.png",dd="tabview-page-button-top-inactive",da="tabview-page-button-left-inactive",db="menu-slidebar",cX="toolbar-button-checked",cY="decoration/tree/open-selected.png",cV="radiobutton-checked",cW="decoration/window/minimize-inactive.png",de="icon/16/apps/office-calendar.png",df="group",dv="tabview-page-button-right-inactive",du="decoration/window/minimize-active.png",dx="decoration/window/restore-inactive.png",dw="checkbox-checked-focused",dz="splitpane",dy="combobox/textfield",dB="button-preselected-focused",dA="decoration/window/close-active-hovered.png",dt="qx/icon/Tango/16/actions/window-close.png",ds="checkbox-pressed",ef="button-disabled",eg="selected-dragover",eh="border-separator",ei="decoration/window/maximize-inactive.png",eb="dragover",ec="scrollarea",ed="scrollbar-vertical",ee="decoration/menu/checkbox-invert.gif",dY="decoration/toolbar/toolbar-handle-knob.gif",ea="icon/22/mimetypes/office-document.png",j="button-preselected",i="button-checked-focused",h="up.png",g="best-fit",f="decoration/tree/closed-selected.png",e="qx.theme.modern.Appearance",d="text-active",c="toolbar-button-hovered",b="progressive-table-header",a="decoration/table/select-column-order.png",w="decoration/menu/radiobutton.gif",x="decoration/arrows/forward.png",u="decoration/table/descending.png",v="progressbar",A="window-captionbar-active",B="checkbox-checked-hovered",y="scrollbar-slider-vertical",z="toolbar",D="alias",E="decoration/window/restore-active.png",cI="decoration/table/boolean-false.png",cC="icon/32/mimetypes/office-document.png",cP="radiobutton-checked-disabled",cL="tabview-pane",cr="decoration/arrows/rewind.png",cp="checkbox-focused",R="top",cs="icon/16/actions/dialog-ok.png",bd="radiobutton-checked-hovered",bc="table-header-cell-hovered",bW="window",bX="text-gray",bY="decoration/menu/radiobutton-invert.gif",ca="text-placeholder",cb="slider",cc="keep-align",cd="down.png",ce="tabview-page-button-top-active",bT="icon/22/places/folder.png",bU="decoration/window/maximize-active.png",cq="checkbox-checked-pressed",cO="decoration/window/close-inactive.png",cN="tabview-page-button-left-active",cM="toolbar-part",cT="decoration/splitpane/knob-vertical.png",cS=".gif",cR="radiobutton-checked-pressed",cQ="table-statusbar",cK="radiobutton-pressed",cJ="window-captionbar-inactive",C="copy",bh="radiobutton-focused",bg="decoration/arrows/down-invert.png",cB="decoration/menu/checkbox.gif",bs="decoration/splitpane/knob-horizontal.png",cH="icon/32/places/folder.png",cG="toolbar-separator",cF="tabview-page-button-bottom-active",Q="decoration/arrows/up-small.png",cU="decoration/table/ascending.png",F="decoration/arrows/up-invert.png",S="small",bN="tabview-page-button-right-active",bO="-disabled",bP="scrollbar-horizontal",bQ="checkbox-undetermined-focused",bR="progressive-table-header-cell",bS="menu-separator",dg="pane",bV="decoration/arrows/right-invert.png",dD="left.png",dC="icon/16/actions/view-refresh.png";qx.Theme.define(e,{appearances:{"widget":{},"root":{style:function(et){return {backgroundColor:dq,textColor:em,font:bq};}},"label":{style:function(eu){return {textColor:eu.disabled?cm:undefined};}},"move-frame":{style:function(ev){return {decorator:dK};}},"resize-frame":bC,"dragdrop-cursor":{style:function(ew){var ex=bb;if(ew.copy){ex=C;}else if(ew.move){ex=T;}else if(ew.alias){ex=D;}return {source:bu+ex+cS,position:l,offset:[2,16,2,6]};}},"image":{style:function(ey){return {opacity:!ey.replacement&&ey.disabled?0.3:1};}},"atom":{},"atom/label":cj,"atom/icon":dG,"popup":{style:function(ez){return {decorator:dK,backgroundColor:co,shadow:N};}},"button-frame":{alias:dM,style:function(eA){var eC,eB;if(eA.checked&&eA.focused&&!eA.inner){eC=i;eB=undefined;}else if(eA.disabled){eC=ef;eB=undefined;}else if(eA.pressed){eC=cu;eB=dm;}else if(eA.checked){eC=bx;eB=undefined;}else if(eA.hovered){eC=bK;eB=dm;}else if(eA.preselected&&eA.focused&&!eA.inner){eC=dB;eB=dm;}else if(eA.preselected){eC=j;eB=dm;}else if(eA.focused&&!eA.inner){eC=ep;eB=undefined;}else{eC=dJ;eB=undefined;}return {decorator:eC,textColor:eB,shadow:eA.invalid&&!eA.disabled?cx:undefined};}},"button-frame/image":{style:function(eD){return {opacity:!eD.replacement&&eD.disabled?0.5:1};}},"button":{alias:dN,include:dN,style:function(eE){return {padding:[2,8],center:true};}},"hover-button":{alias:dM,include:dM,style:function(eF){return {decorator:eF.hovered?dE:undefined,textColor:eF.hovered?dH:undefined};}},"splitbutton":{},"splitbutton/button":dJ,"splitbutton/arrow":{alias:dJ,include:dJ,style:function(eG){return {icon:ck,padding:2,marginLeft:1};}},"checkbox":{alias:dM,style:function(eH){var eJ;if(eH.checked){if(eH.disabled){eJ=ej;}else if(eH.focused){eJ=dw;}else if(eH.pressed){eJ=cq;}else if(eH.hovered){eJ=B;}else{eJ=ej;}}else if(eH.undetermined){if(eH.disabled){eJ=es;}else if(eH.focused){eJ=bQ;}else if(eH.hovered){eJ=bG;}else{eJ=es;}}else if(!eH.disabled){if(eH.focused){eJ=cp;}else if(eH.pressed){eJ=ds;}else if(eH.hovered){eJ=cy;}}eJ=eJ||m;var eI=eH.invalid&&!eH.disabled?G:H;return {icon:K+eJ+eI+bk,gap:6};}},"radiobutton":{alias:dM,style:function(eK){var eM;if(eK.checked&&eK.focused){eM=bf;}else if(eK.checked&&eK.disabled){eM=cP;}else if(eK.checked&&eK.pressed){eM=cR;}else if(eK.checked&&eK.hovered){eM=bd;}else if(eK.checked){eM=cV;}else if(eK.focused){eM=bh;}else if(eK.pressed){eM=cK;}else if(eK.hovered){eM=bz;}else{eM=di;}var eL=eK.invalid&&!eK.disabled?G:H;return {icon:K+eM+eL+bk,gap:6};}},"textfield":{style:function(eN){var eS;var eQ=!!eN.focused;var eR=!!eN.invalid;var eO=!!eN.disabled;if(eQ&&eR&&!eO){eS=dV;}else if(eQ&&!eR&&!eO){eS=dQ;}else if(eO){eS=cf;}else if(!eQ&&eR&&!eO){eS=ci;}else{eS=ch;}var eP;if(eN.disabled){eP=cm;}else if(eN.showingPlaceholder){eP=ca;}else{eP=er;}return {decorator:eS,padding:[2,4,1],textColor:eP};}},"textarea":{include:dn,style:function(eT){return {padding:4};}},"spinner":{style:function(eU){var eY;var eW=!!eU.focused;var eX=!!eU.invalid;var eV=!!eU.disabled;if(eW&&eX&&!eV){eY=dV;}else if(eW&&!eX&&!eV){eY=dQ;}else if(eV){eY=cf;}else if(!eW&&eX&&!eV){eY=ci;}else{eY=ch;}return {decorator:eY};}},"spinner/textfield":{style:function(fa){return {marginRight:2,padding:[2,4,1],textColor:fa.disabled?cm:er};}},"spinner/upbutton":{alias:dN,include:dN,style:function(fb){return {icon:Q,padding:fb.pressed?[2,2,0,4]:[1,3,1,3],shadow:undefined};}},"spinner/downbutton":{alias:dN,include:dN,style:function(fc){return {icon:br,padding:fc.pressed?[2,2,0,4]:[1,3,1,3],shadow:undefined};}},"datefield":k,"datefield/button":{alias:s,include:s,style:function(fd){return {icon:de,padding:[0,3],decorator:undefined};}},"datefield/textfield":dy,"datefield/list":{alias:bo,include:bo,style:function(fe){return {decorator:undefined};}},"groupbox":{style:function(ff){return {legendPosition:R};}},"groupbox/legend":{alias:dM,style:function(fg){return {padding:[1,0,1,4],textColor:fg.invalid?dh:n,font:dI};}},"groupbox/frame":{style:function(fh){return {padding:12,decorator:df};}},"check-groupbox":cl,"check-groupbox/legend":{alias:m,include:m,style:function(fi){return {padding:[1,0,1,4],textColor:fi.invalid?dh:n,font:dI};}},"radio-groupbox":cl,"radio-groupbox/legend":{alias:di,include:di,style:function(fj){return {padding:[1,0,1,4],textColor:fj.invalid?dh:n,font:dI};}},"scrollarea":{style:function(fk){return {minWidth:50,minHeight:50};}},"scrollarea/corner":{style:function(fl){return {backgroundColor:dq};}},"scrollarea/pane":dL,"scrollarea/scrollbar-x":dk,"scrollarea/scrollbar-y":dk,"scrollbar":{style:function(fm){if(fm[cz]){return {};}return {width:fm.horizontal?undefined:16,height:fm.horizontal?16:undefined,decorator:fm.horizontal?bP:ed,padding:1};}},"scrollbar/slider":{alias:cb,style:function(fn){return {padding:fn.horizontal?[0,1,0,1]:[1,0,1,0]};}},"scrollbar/slider/knob":{include:dN,style:function(fo){var fp=fo.horizontal?ek:y;if(fo.disabled){fp+=bO;}return {decorator:fp,minHeight:fo.horizontal?undefined:9,minWidth:fo.horizontal?9:undefined};}},"scrollbar/button":{alias:dN,include:dN,style:function(fq){var fr=bL;if(fq.left){fr+=dD;}else if(fq.right){fr+=bF;}else if(fq.up){fr+=h;}else{fr+=cd;}if(fq.left||fq.right){return {padding:[0,0,0,fq.left?3:4],icon:fr,width:15,height:14};}else{return {padding:[0,0,0,2],icon:fr,width:14,height:15};}}},"scrollbar/button-begin":q,"scrollbar/button-end":q,"slider":{style:function(fs){var fw;var fu=!!fs.focused;var fv=!!fs.invalid;var ft=!!fs.disabled;if(fu&&fv&&!ft){fw=dV;}else if(fu&&!fv&&!ft){fw=dQ;}else if(ft){fw=cf;}else if(!fu&&fv&&!ft){fw=ci;}else{fw=ch;}return {decorator:fw};}},"slider/knob":{include:dN,style:function(fx){return {decorator:fx.disabled?cw:ek,shadow:undefined,height:14,width:14};}},"list":{alias:ec,style:function(fy){var fC;var fA=!!fy.focused;var fB=!!fy.invalid;var fz=!!fy.disabled;if(fA&&fB&&!fz){fC=dV;}else if(fA&&!fB&&!fz){fC=dQ;}else if(fz){fC=cf;}else if(!fA&&fB&&!fz){fC=ci;}else{fC=ch;}return {backgroundColor:co,decorator:fC};}},"list/pane":dL,"listitem":{alias:dM,style:function(fD){var fE;if(fD.dragover){fE=fD.selected?eg:eb;}else{fE=fD.selected?dE:undefined;}return {padding:fD.dragover?[4,4,2,4]:4,textColor:fD.selected?dH:undefined,decorator:fE};}},"slidebar":{},"slidebar/scrollpane":{},"slidebar/content":{},"slidebar/button-forward":{alias:dN,include:dN,style:function(fF){return {padding:5,center:true,icon:fF.vertical?ck:dr};}},"slidebar/button-backward":{alias:dN,include:dN,style:function(fG){return {padding:5,center:true,icon:fG.vertical?L:eq};}},"tabview":{style:function(fH){return {contentPadding:16};}},"tabview/bar":{alias:bv,style:function(fI){var fJ={marginBottom:fI.barTop?-1:0,marginTop:fI.barBottom?-4:0,marginLeft:fI.barRight?-3:0,marginRight:fI.barLeft?-1:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0};if(fI.barTop||fI.barBottom){fJ.paddingLeft=5;fJ.paddingRight=7;}else{fJ.paddingTop=5;fJ.paddingBottom=7;}return fJ;}},"tabview/bar/button-forward":{include:bm,alias:bm,style:function(fK){if(fK.barTop||fK.barBottom){return {marginTop:2,marginBottom:2};}else{return {marginLeft:2,marginRight:2};}}},"tabview/bar/button-backward":{include:bp,alias:bp,style:function(fL){if(fL.barTop||fL.barBottom){return {marginTop:2,marginBottom:2};}else{return {marginLeft:2,marginRight:2};}}},"tabview/bar/scrollpane":{},"tabview/pane":{style:function(fM){return {decorator:cL,minHeight:100,marginBottom:fM.barBottom?-1:0,marginTop:fM.barTop?-1:0,marginLeft:fM.barLeft?-1:0,marginRight:fM.barRight?-1:0};}},"tabview-page":dL,"tabview-page/button":{alias:dM,style:function(fN){var fT,fP=0;var fS=0,fO=0,fQ=0,fR=0;if(fN.checked){if(fN.barTop){fT=ce;fP=[6,14];fQ=fN.firstTab?0:-5;fR=fN.lastTab?0:-5;}else if(fN.barBottom){fT=cF;fP=[6,14];fQ=fN.firstTab?0:-5;fR=fN.lastTab?0:-5;}else if(fN.barRight){fT=bN;fP=[6,13];fS=fN.firstTab?0:-5;fO=fN.lastTab?0:-5;}else{fT=cN;fP=[6,13];fS=fN.firstTab?0:-5;fO=fN.lastTab?0:-5;}}else{if(fN.barTop){fT=dd;fP=[4,10];fS=4;fQ=fN.firstTab?5:1;fR=1;}else if(fN.barBottom){fT=bH;fP=[4,10];fO=4;fQ=fN.firstTab?5:1;fR=1;}else if(fN.barRight){fT=dv;fP=[4,10];fR=5;fS=fN.firstTab?5:1;fO=1;fQ=1;}else{fT=da;fP=[4,10];fQ=5;fS=fN.firstTab?5:1;fO=1;fR=1;}}return {zIndex:fN.checked?10:5,decorator:fT,padding:fP,marginTop:fS,marginBottom:fO,marginLeft:fQ,marginRight:fR,textColor:fN.checked?d:U};}},"tabview-page/button/label":{alias:cj,style:function(fU){return {padding:[0,1,0,1],margin:fU.focused?0:1,decorator:fU.focused?bA:undefined};}},"tabview-page/button/close-button":{alias:dM,style:function(fV){return {icon:dt};}},"toolbar":{style:function(fW){return {decorator:z,spacing:2};}},"toolbar/part":{style:function(fX){return {decorator:cM,spacing:2};}},"toolbar/part/container":{style:function(fY){return {paddingLeft:2,paddingRight:2};}},"toolbar/part/handle":{style:function(ga){return {source:dY,marginLeft:3,marginRight:3};}},"toolbar-button":{alias:dM,style:function(gb){return {marginTop:2,marginBottom:2,padding:(gb.pressed||gb.checked||gb.hovered)&&!gb.disabled||(gb.disabled&&gb.checked)?3:5,decorator:gb.pressed||(gb.checked&&!gb.hovered)||(gb.checked&&gb.disabled)?cX:gb.hovered&&!gb.disabled?c:undefined};}},"toolbar-menubutton":{alias:dS,include:dS,style:function(gc){return {showArrow:true};}},"toolbar-menubutton/arrow":{alias:dG,include:dG,style:function(gd){return {source:br};}},"toolbar-splitbutton":{style:function(ge){return {marginTop:2,marginBottom:2};}},"toolbar-splitbutton/button":{alias:dS,include:dS,style:function(gf){return {icon:ck,marginTop:undefined,marginBottom:undefined};}},"toolbar-splitbutton/arrow":{alias:dS,include:dS,style:function(gg){if(gg.pressed||gg.checked||(gg.hovered&&!gg.disabled)){var gh=1;}else{var gh=3;}return {padding:gh,icon:ck,marginTop:undefined,marginBottom:undefined};}},"toolbar-separator":{style:function(gi){return {decorator:cG,margin:7};}},"tree":dP,"tree-item":{style:function(gj){return {padding:[2,6],textColor:gj.selected?dH:undefined,decorator:gj.selected?dE:undefined};}},"tree-item/icon":{include:dG,style:function(gk){return {paddingRight:5};}},"tree-item/label":cj,"tree-item/open":{include:dG,style:function(gl){var gm;if(gl.selected&&gl.opened){gm=cY;}else if(gl.selected&&!gl.opened){gm=f;}else if(gl.opened){gm=bl;}else{gm=el;}return {padding:[0,5,0,2],source:gm};}},"tree-folder":{include:dW,alias:dW,style:function(gn){var gp,go;if(gn.small){gp=gn.opened?o:t;go=o;}else if(gn.large){gp=gn.opened?O:cH;go=O;}else{gp=gn.opened?J:bT;go=J;}return {icon:gp,iconOpened:go};}},"tree-file":{include:dW,alias:dW,style:function(gq){return {icon:gq.small?M:gq.large?cC:ea};}},"treevirtual":I,"treevirtual-folder":{style:function(gr){return {icon:gr.opened?o:t};}},"treevirtual-file":{include:bj,alias:bj,style:function(gs){return {icon:M};}},"treevirtual-line":{style:function(gt){return {icon:p};}},"treevirtual-contract":{style:function(gu){return {icon:bl,paddingLeft:5,paddingTop:2};}},"treevirtual-expand":{style:function(gv){return {icon:el,paddingLeft:5,paddingTop:2};}},"treevirtual-only-contract":dX,"treevirtual-only-expand":dp,"treevirtual-start-contract":dX,"treevirtual-start-expand":dp,"treevirtual-end-contract":dX,"treevirtual-end-expand":dp,"treevirtual-cross-contract":dX,"treevirtual-cross-expand":dp,"treevirtual-end":{style:function(gw){return {icon:p};}},"treevirtual-cross":{style:function(gx){return {icon:p};}},"tooltip":{include:dR,style:function(gy){return {backgroundColor:bM,padding:[1,3,2,3],offset:[15,5,5,5]};}},"tooltip/atom":dM,"tooltip-error":{include:dO,style:function(gz){return {textColor:dH,placeMethod:dL,offset:[0,0,0,14],marginTop:-2,position:l,showTimeout:100,hideTimeout:10000,decorator:bI,shadow:bw,font:dI};}},"tooltip-error/atom":dM,"window":{style:function(gA){return {shadow:bD,contentPadding:[10,10,10,10]};}},"window/pane":{style:function(gB){return {decorator:bW};}},"window/captionbar":{style:function(gC){return {decorator:gC.active?A:cJ,textColor:gC.active?cg:bX,minHeight:26,paddingRight:2};}},"window/icon":{style:function(gD){return {margin:[5,0,3,6]};}},"window/title":{style:function(gE){return {alignY:dF,font:dI,marginLeft:6,marginRight:12};}},"window/minimize-button":{alias:dM,style:function(gF){return {icon:gF.active?gF.hovered?cE:du:cW,margin:[4,8,2,0]};}},"window/restore-button":{alias:dM,style:function(gG){return {icon:gG.active?gG.hovered?be:E:dx,margin:[5,8,2,0]};}},"window/maximize-button":{alias:dM,style:function(gH){return {icon:gH.active?gH.hovered?by:bU:ei,margin:[4,8,2,0]};}},"window/close-button":{alias:dM,style:function(gI){return {icon:gI.active?gI.hovered?dA:cA:cO,margin:[4,8,2,0]};}},"window/statusbar":{style:function(gJ){return {padding:[2,6],decorator:bJ,minHeight:18};}},"window/statusbar-text":{style:function(gK){return {font:S};}},"iframe":{style:function(gL){return {decorator:dK};}},"resizer":{style:function(gM){return {decorator:dg};}},"splitpane":{style:function(gN){return {decorator:dz};}},"splitpane/splitter":{style:function(gO){return {width:gO.horizontal?3:undefined,height:gO.vertical?3:undefined,backgroundColor:bn};}},"splitpane/splitter/knob":{style:function(gP){return {source:gP.horizontal?bs:cT};}},"splitpane/slider":{style:function(gQ){return {width:gQ.horizontal?3:undefined,height:gQ.vertical?3:undefined,backgroundColor:bn};}},"selectbox":{alias:dN,include:dN,style:function(gR){return {padding:[2,8]};}},"selectbox/atom":dM,"selectbox/popup":dR,"selectbox/list":{alias:dP},"selectbox/arrow":{include:dG,style:function(gS){return {source:ck,paddingLeft:5};}},"datechooser":{style:function(gT){var gX;var gV=!!gT.focused;var gW=!!gT.invalid;var gU=!!gT.disabled;if(gV&&gW&&!gU){gX=dV;}else if(gV&&!gW&&!gU){gX=dQ;}else if(gU){gX=cf;}else if(!gV&&gW&&!gU){gX=ci;}else{gX=ch;}return {padding:2,decorator:gX,backgroundColor:co};}},"datechooser/navigation-bar":{},"datechooser/nav-button":{include:dN,alias:dN,style:function(gY){var ha={padding:[2,4],shadow:undefined};if(gY.lastYear){ha.icon=cr;ha.marginRight=1;}else if(gY.lastMonth){ha.icon=eq;}else if(gY.nextYear){ha.icon=x;ha.marginLeft=1;}else if(gY.nextMonth){ha.icon=dr;}return ha;}},"datechooser/last-year-button-tooltip":dO,"datechooser/last-month-button-tooltip":dO,"datechooser/next-year-button-tooltip":dO,"datechooser/next-month-button-tooltip":dO,"datechooser/last-year-button":dj,"datechooser/last-month-button":dj,"datechooser/next-month-button":dj,"datechooser/next-year-button":dj,"datechooser/month-year-label":{style:function(hb){return {font:dI,textAlign:dl,textColor:hb.disabled?cm:undefined};}},"datechooser/date-pane":{style:function(hc){return {textColor:hc.disabled?cm:undefined,marginTop:2};}},"datechooser/weekday":{style:function(hd){return {textColor:hd.disabled?cm:hd.weekend?eo:undefined,textAlign:dl,paddingTop:2,backgroundColor:P};}},"datechooser/week":{style:function(he){return {textAlign:dl,padding:[2,4],backgroundColor:P};}},"datechooser/day":{style:function(hf){return {textAlign:dl,decorator:hf.disabled?undefined:hf.selected?dE:undefined,textColor:hf.disabled?cm:hf.selected?dH:hf.otherMonth?eo:undefined,font:hf.today?dI:undefined,padding:[2,4]};}},"combobox":{style:function(hg){var hk;var hi=!!hg.focused;var hj=!!hg.invalid;var hh=!!hg.disabled;if(hi&&hj&&!hh){hk=dV;}else if(hi&&!hj&&!hh){hk=dQ;}else if(hh){hk=cf;}else if(!hi&&hj&&!hh){hk=ci;}else{hk=ch;}return {decorator:hk};}},"combobox/popup":dR,"combobox/list":{alias:dP},"combobox/button":{include:dN,alias:dN,style:function(hl){var hm={icon:ck,padding:2};if(hl.selected){hm.decorator=ep;}return hm;}},"combobox/textfield":{include:dn,style:function(hn){return {decorator:undefined};}},"menu":{style:function(ho){var hp={decorator:X,shadow:N,spacingX:6,spacingY:1,iconColumnWidth:16,arrowColumnWidth:4,placementModeY:ho.submenu||ho.contextmenu?g:cc};if(ho.submenu){hp.position=l;hp.offset=[-2,-3];}return hp;}},"menu/slidebar":db,"menu-slidebar":dL,"menu-slidebar-button":{style:function(hq){return {decorator:hq.hovered?dE:undefined,padding:7,center:true};}},"menu-slidebar/button-backward":{include:en,style:function(hr){return {icon:hr.hovered?F:L};}},"menu-slidebar/button-forward":{include:en,style:function(hs){return {icon:hs.hovered?bg:ck};}},"menu-separator":{style:function(ht){return {height:0,decorator:bS,margin:[4,2]};}},"menu-button":{alias:dM,style:function(hu){return {decorator:hu.selected?dE:undefined,textColor:hu.selected?dH:undefined,padding:[4,6]};}},"menu-button/icon":{include:dG,style:function(hv){return {alignY:dF};}},"menu-button/label":{include:cj,style:function(hw){return {alignY:dF,padding:1};}},"menu-button/shortcut":{include:cj,style:function(hx){return {alignY:dF,marginLeft:14,padding:1};}},"menu-button/arrow":{include:dG,style:function(hy){return {source:hy.selected?bV:dr,alignY:dF};}},"menu-checkbox":{alias:dU,include:dU,style:function(hz){return {icon:!hz.checked?undefined:hz.selected?ee:cB};}},"menu-radiobutton":{alias:dU,include:dU,style:function(hA){return {icon:!hA.checked?undefined:hA.selected?bY:w};}},"menubar":{style:function(hB){return {decorator:cD};}},"menubar-button":{alias:dM,style:function(hC){return {decorator:(hC.pressed||hC.hovered)&&!hC.disabled?dE:undefined,textColor:hC.pressed||hC.hovered?dH:undefined,padding:[3,8]};}},"colorselector":dL,"colorselector/control-bar":dL,"colorselector/control-pane":dL,"colorselector/visual-pane":cl,"colorselector/preset-grid":dL,"colorselector/colorbucket":{style:function(hD){return {decorator:dK,width:16,height:16};}},"colorselector/preset-field-set":cl,"colorselector/input-field-set":cl,"colorselector/preview-field-set":cl,"colorselector/hex-field-composite":dL,"colorselector/hex-field":dn,"colorselector/rgb-spinner-composite":dL,"colorselector/rgb-spinner-red":dT,"colorselector/rgb-spinner-green":dT,"colorselector/rgb-spinner-blue":dT,"colorselector/hsb-spinner-composite":dL,"colorselector/hsb-spinner-hue":dT,"colorselector/hsb-spinner-saturation":dT,"colorselector/hsb-spinner-brightness":dT,"colorselector/preview-content-old":{style:function(hE){return {decorator:dK,width:50,height:10};}},"colorselector/preview-content-new":{style:function(hF){return {decorator:dK,backgroundColor:co,width:50,height:10};}},"colorselector/hue-saturation-field":{style:function(hG){return {decorator:dK,margin:5};}},"colorselector/brightness-field":{style:function(hH){return {decorator:dK,margin:[5,7]};}},"colorselector/hue-saturation-pane":dL,"colorselector/hue-saturation-handle":dL,"colorselector/brightness-pane":dL,"colorselector/brightness-handle":dL,"colorpopup":{alias:dR,include:dR,style:function(hI){return {padding:5,backgroundColor:dq};}},"colorpopup/field":{style:function(hJ){return {decorator:dK,margin:2,width:14,height:14,backgroundColor:co};}},"colorpopup/selector-button":dJ,"colorpopup/auto-button":dJ,"colorpopup/preview-pane":cl,"colorpopup/current-preview":{style:function(hK){return {height:20,padding:4,marginLeft:4,decorator:dK,allowGrowX:true};}},"colorpopup/selected-preview":{style:function(hL){return {height:20,padding:4,marginRight:4,decorator:dK,allowGrowX:true};}},"colorpopup/colorselector-okbutton":{alias:dJ,include:dJ,style:function(hM){return {icon:cs};}},"colorpopup/colorselector-cancelbutton":{alias:dJ,include:dJ,style:function(hN){return {icon:dc};}},"table":{alias:dL,style:function(hO){return {decorator:I};}},"table-header":{},"table/statusbar":{style:function(hP){return {decorator:cQ,padding:[0,2]};}},"table/column-button":{alias:dN,style:function(hQ){return {decorator:bE,padding:3,icon:a};}},"table-column-reset-button":{include:dU,alias:dU,style:function(){return {icon:dC};}},"table-scroller":dL,"table-scroller/scrollbar-x":dk,"table-scroller/scrollbar-y":dk,"table-scroller/header":{style:function(hR){return {decorator:cv};}},"table-scroller/pane":{style:function(hS){return {backgroundColor:ct};}},"table-scroller/focus-indicator":{style:function(hT){return {decorator:bB};}},"table-scroller/resize-line":{style:function(hU){return {backgroundColor:eh,width:2};}},"table-header-cell":{alias:dM,style:function(hV){return {minWidth:13,minHeight:20,padding:hV.hovered?[3,4,2,4]:[3,4],decorator:hV.hovered?bc:Y,sortIcon:hV.sorted?(hV.sortedAscending?cU:u):undefined};}},"table-header-cell/label":{style:function(hW){return {minWidth:0,alignY:dF,paddingRight:5};}},"table-header-cell/sort-icon":{style:function(hX){return {alignY:dF,alignX:r};}},"table-header-cell/icon":{style:function(hY){return {minWidth:0,alignY:dF,paddingRight:5};}},"table-editor-textfield":{include:dn,style:function(ia){return {decorator:undefined,padding:[2,2],backgroundColor:co};}},"table-editor-selectbox":{include:bi,alias:bi,style:function(ib){return {padding:[0,2],backgroundColor:co};}},"table-editor-combobox":{include:k,alias:k,style:function(ic){return {decorator:undefined,backgroundColor:co};}},"progressive-table-header":{alias:dL,style:function(id){return {decorator:b};}},"progressive-table-header-cell":{alias:dM,style:function(ie){return {minWidth:40,minHeight:25,paddingLeft:6,decorator:bR};}},"app-header":{style:function(ig){return {font:dI,textColor:dH,padding:[8,12],decorator:W};}},"virtual-list":dP,"virtual-list/row-layer":V,"row-layer":{style:function(ih){return {colorEven:cg,colorOdd:cg};}},"group-item":{include:cj,alias:cj,style:function(ii){return {padding:4,decorator:bt,textColor:cg,font:dI};}},"column-layer":dL,"cell":{style:function(ij){return {textColor:ij.selected?dH:em,padding:[3,6],font:bq};}},"cell-string":cn,"cell-number":{include:cn,style:function(ik){return {textAlign:r};}},"cell-image":cn,"cell-boolean":{include:cn,style:function(il){return {iconTrue:ba,iconFalse:cI};}},"cell-atom":cn,"cell-date":cn,"cell-html":cn,"htmlarea":{"include":dL,style:function(im){return {backgroundColor:cg};}},"progressbar":{style:function(io){return {decorator:v,padding:[1],backgroundColor:cg};}},"progressbar/progress":{style:function(ip){return {decorator:dE};}}}});})();(function(){var g="#134275",f="scrollarea",e="main",d="Theme for API Viewer",c="apiviewer.Appearance",b="white",a="bold";qx.Theme.define(c,{title:d,extend:qx.theme.modern.Appearance,appearances:{"toggleview":{style:function(h){return {width:240,decorator:e};}},"detailviewer":{style:function(i){return {backgroundColor:b,decorator:e};}},"legend":{include:f,alias:f,style:function(j){return {contentPadding:[10,10,10,10]};}},"legendview-label-important":{style:function(k){return {textColor:g,font:a};}},"legendview-label":{style:function(l){return {textColor:g};}},"tabview":{style:function(m){return {contentPadding:0};}},"tabview/pane":{style:function(n){return {minHeight:100,marginBottom:n.barBottom?-1:0,marginTop:n.barTop?-1:0,marginLeft:n.barLeft?-1:0,marginRight:n.barRight?-1:0};}}}});})();(function(){var a="apiviewer.test.Widget";qx.Class.define(a,{extend:apiviewer.test.LayoutItem,members:{renderSeparator:function(b,c){}}});})();(function(){var a="apiviewer.test.Methods";qx.Class.define(a,{extend:Object,members:{toString:function(){},valueOf:function(){},isPrototypeOf:function(){},hasOwnProperty:function(){},toLocaleString:function(){}}});})();(function(){var h="apiviewer.ClassLoader",g="(",f=")",e=".json",d="completed",c=".",b="/",a="failed";qx.Class.define(h,{extend:qx.core.Object,construct:function(j){qx.core.Object.call(this);this._baseUri=j;},members:{load:function(k,l,m,self){var n=this._baseUri+b+k+e;var o=new qx.io.remote.Request(n);var p=null;o.setAsynchronous(l);o.setTimeout(30000);o.setProhibitCaching(false);o.addListener(d,function(q){var content=eval(g+q.getContent()+f);var r=k.substring(0,k.lastIndexOf(c));var s=apiviewer.dao.Class.getClassByName(r);p=new apiviewer.dao.Class(content,s);s.addClass(p);this.__Tc(p,m,self);},this);o.addListener(a,function(t){alert("Couldn't load file: "+n);},this);o.send();return p;},__Tc:function(u,v,self){if(v){if(self){v.call(self,u);}else{v(u);}}},__Td:function(w,x,self){var z=[];var y=0;var A,i;for(i=0;i<w.length;i++){A=w[i];if(!A.isLoaded()){z.push(A);}}for(i=0;i<z.length;i++){this.load(z[i].getFullName(),true,function(B){y+=1;if(y==z.length){this.__Tc(apiviewer.dao.Class.getClassByName(w[0].getFullName()),x,self);}},this);}if(z.length==0){this.__Tc(w[0],x,self);}},classLoadDependendClasses:function(C,D,self){var E=C.getDependendClasses();this.__Td(E,D,self);},packageLoadDependendClasses:function(F,G,self){var H=F.getClasses();this.__Td(H,G,self);}}});})();(function(){var a="qx.application.IApplication";qx.Interface.define(a,{members:{main:function(){},finalize:function(){},close:function(){},terminate:function(){}}});})();(function(){var b="abstract",a="qx.application.AbstractGui";qx.Class.define(a,{type:b,extend:qx.core.Object,implement:[qx.application.IApplication],include:qx.locale.MTranslation,members:{__nv:null,_createRootWidget:function(){throw new Error("Abstract method call");},getRoot:function(){return this.__nv;},main:function(){qx.theme.manager.Meta.getInstance().initialize();qx.ui.tooltip.Manager.getInstance();this.__nv=this._createRootWidget();},finalize:function(){this.render();},render:function(){qx.ui.core.queue.Manager.flush();},close:function(c){},terminate:function(){}},destruct:function(){this.__nv=null;}});})();(function(){var a="qx.application.Standalone";qx.Class.define(a,{extend:qx.application.AbstractGui,members:{_createRootWidget:function(){return new qx.ui.root.Application(document);}}});})();(function(){var e="controller",d="script/apidata.json",c="apiviewer/css/apiviewer.css",b="apiviewer.Application",a="viewer";qx.Class.define(b,{extend:qx.application.Standalone,construct:function(){qx.application.Standalone.call(this);qx.bom.Stylesheet.includeFile(c);},members:{main:function(){qx.application.Standalone.prototype.main.call(this);{};qx.Class.include(qx.ui.core.Widget,apiviewer.MWidgetRegistry);this.viewer=new apiviewer.Viewer();this.controller=new apiviewer.Controller();this.getRoot().add(this.viewer,{edge:0});},finalize:function(){qx.application.Standalone.prototype.finalize.call(this);this.controller.load(d);}},destruct:function(){this._disposeObjects(a,e);}});})();(function(){var f="_applyTheme",e="qx.theme",d="qx.theme.manager.Meta",c="qx.theme.Modern",b="Theme",a="singleton";qx.Class.define(d,{type:a,extend:qx.core.Object,properties:{theme:{check:b,nullable:true,apply:f}},members:{_applyTheme:function(g,h){var k=null;var n=null;var q=null;var r=null;var m=null;if(g){k=g.meta.color||null;n=g.meta.decoration||null;q=g.meta.font||null;r=g.meta.icon||null;m=g.meta.appearance||null;}var o=qx.theme.manager.Color.getInstance();var p=qx.theme.manager.Decoration.getInstance();var i=qx.theme.manager.Font.getInstance();var l=qx.theme.manager.Icon.getInstance();var j=qx.theme.manager.Appearance.getInstance();o.setTheme(k);p.setTheme(n);i.setTheme(q);l.setTheme(r);j.setTheme(m);},initialize:function(){var t=qx.core.Setting;var s,u;s=t.get(e);if(s){u=qx.Theme.getByName(s);if(!u){throw new Error("The theme to use is not available: "+s);}this.setTheme(u);}}},settings:{"qx.theme":c}});})();(function(){var e="qx.theme.manager.Icon",d="Theme",c="changeTheme",b="_applyTheme",a="singleton";qx.Class.define(e,{type:a,extend:qx.core.Object,properties:{theme:{check:d,nullable:true,apply:b,event:c}},members:{_applyTheme:function(f,g){var i=qx.util.AliasManager.getInstance();if(g){for(var h in g.aliases){i.remove(h);}}if(f){for(var h in f.aliases){i.add(h,f.aliases[h]);}}}}});})();(function(){var p="Boolean",o="focusout",n="interval",m="mouseover",l="mouseout",k="mousemove",j="widget",i="qx.ui.tooltip.ToolTip",h="_applyCurrent",g="qx.ui.tooltip.Manager",c="__qV",f="__qS",d="tooltip-error",b="__qT",a="singleton";qx.Class.define(g,{type:a,extend:qx.core.Object,construct:function(){qx.core.Object.call(this);qx.event.Registration.addListener(document.body,m,this.__rd,this,true);this.__qS=new qx.event.Timer();this.__qS.addListener(n,this.__ra,this);this.__qT=new qx.event.Timer();this.__qT.addListener(n,this.__rb,this);this.__qU={left:0,top:0};},properties:{current:{check:i,nullable:true,apply:h},showInvalidToolTips:{check:p,init:true},showToolTips:{check:p,init:true}},members:{__qU:null,__qT:null,__qS:null,__qV:null,__qW:null,__qX:function(){if(!this.__qV){this.__qV=new qx.ui.tooltip.ToolTip().set({rich:true});}return this.__qV;},__qY:function(){if(!this.__qW){this.__qW=new qx.ui.tooltip.ToolTip().set({appearance:d});this.__qW.syncAppearance();}return this.__qW;},_applyCurrent:function(q,r){if(r&&qx.ui.core.Widget.contains(r,q)){return;}if(r){if(!r.isDisposed()){r.exclude();}this.__qS.stop();this.__qT.stop();}var t=qx.event.Registration;var s=document.body;if(q){this.__qS.startWith(q.getShowTimeout());t.addListener(s,l,this.__re,this,true);t.addListener(s,o,this.__rf,this,true);t.addListener(s,k,this.__rc,this,true);}else{t.removeListener(s,l,this.__re,this,true);t.removeListener(s,o,this.__rf,this,true);t.removeListener(s,k,this.__rc,this,true);}},__ra:function(e){var u=this.getCurrent();if(u&&!u.isDisposed()){this.__qT.startWith(u.getHideTimeout());if(u.getPlaceMethod()==j){u.placeToWidget(u.getOpener());}else{u.placeToPoint(this.__qU);}u.show();}this.__qS.stop();},__rb:function(e){var v=this.getCurrent();if(v&&!v.isDisposed()){v.exclude();}this.__qT.stop();this.resetCurrent();},__rc:function(e){var w=this.__qU;w.left=e.getDocumentLeft();w.top=e.getDocumentTop();},__rd:function(e){var z=qx.ui.core.Widget.getWidgetByElement(e.getTarget());if(!z){return;}var A,B,y,x;while(z!=null){A=z.getToolTip();B=z.getToolTipText()||null;y=z.getToolTipIcon()||null;if(qx.Class.hasInterface(z.constructor,qx.ui.form.IForm)&&!z.isValid()){x=z.getInvalidMessage();}if(A||B||y||x){break;}z=z.getLayoutParent();}if(!z||!z.getEnabled()||z.isBlockToolTip()||(!x&&!this.getShowToolTips())||(x&&!this.getShowInvalidToolTips())){return;}if(x){A=this.__qY().set({label:x});}if(!A){A=this.__qX().set({label:B,icon:y});}this.setCurrent(A);A.setOpener(z);},__re:function(e){var C=qx.ui.core.Widget.getWidgetByElement(e.getTarget());if(!C){return;}var D=qx.ui.core.Widget.getWidgetByElement(e.getRelatedTarget());if(!D){return;}var E=this.getCurrent();if(E&&(D==E||qx.ui.core.Widget.contains(E,D))){return;}if(D&&C&&qx.ui.core.Widget.contains(C,D)){return;}if(E&&!D){this.setCurrent(null);}else{this.resetCurrent();}},__rf:function(e){var F=qx.ui.core.Widget.getWidgetByElement(e.getTarget());if(!F){return;}var G=this.getCurrent();if(G&&G==F.getToolTip()){this.setCurrent(null);}}},destruct:function(){qx.event.Registration.removeListener(document.body,m,this.__rd,this,true);this._disposeObjects(f,b,c);this.__qU=null;}});})();(function(){var c="_applyId",b="String",a="apiviewer.MWidgetRegistry";qx.Mixin.define(a,{properties:{id:{check:b,apply:c,nullable:true,init:null}},members:{_applyId:function(d,e){var f=apiviewer.MWidgetRegistry;if(e){f.unregister(this,e);}if(d){f.register(this,d);}},getWidgetById:function(g){return apiviewer.MWidgetRegistry.getWidgetById(g);}},statics:{__Te:{},getWidgetById:function(h){return this.__Te[h];},register:function(i,j){if(this.__Te[j]){throw new Error("An object with the id '"+j+"' already exists.");}this.__Te[j]=i;},unregister:function(k,l){if(this.__Te[l]!==k){throw new Error("The object is not registered with the id '"+l+"'.");}delete (this.__Te[l]);}}});})();(function(){var k="value",j="nodeName",i="showPrivate",h="#",g="expandProperties",f="changeSelection",d="(",c="showInherited",b="showProtected",a="request",L="mousedown",K="btn_inherited",J=")",I="application",H="_detailLoader",G="aborted",F="_classLoader",E="btn_protected",D="detail_loader",C=" - ",r="btn_expand",s="$1#$2",p="package",q="tree",n="./script",o="btn_private",l="apiviewer.Controller",m="_tabViewController",t="completed",u="failed",x="$1~$2",w="API Documentation",z="file:",y="_history",B="_tree",A="itemName",v="classLinkClicked";qx.Class.define(l,{extend:qx.core.Object,construct:function(M){qx.core.Object.call(this);this._widgetRegistry=apiviewer.MWidgetRegistry;this._titlePrefix=w;document.title=this._titlePrefix;this._classLoader=new apiviewer.ClassLoader(n);this._detailLoader=this._widgetRegistry.getWidgetById(D);this._tabViewController=new apiviewer.TabViewController(this._widgetRegistry);this.__Tg();this._tree=this._widgetRegistry.getWidgetById(q);this.__Th();this.__Ti();this._history=qx.bom.History.getInstance();this.__Tj();qx.core.Init.getApplication().getRoot().addListener(L,function(e){this.__Tf=e.isShiftPressed()||e.isCtrlOrCommandPressed();},this,true);},members:{__Tf:false,$$logCategory:I,load:function(N){var P=new qx.io.remote.Request(N);P.setTimeout(180000);P.setProhibitCaching(false);P.addListener(t,function(R){var V=new Date();{};var content=R.getContent();var S=new Date();var T=eval(d+content+J);var U=new Date();{};qx.event.Timer.once(function(){this.__Tk(T);qx.event.Timer.once(function(){var W=this._history.getState();if(W){this.__Tl(this.__Tn(W));}else{var Y=this.__To(T);var X=Y.attributes.fullName;this.__Tl(X);}},this,0);},this,0);},this);var O=function(ba){this.error("Couldn't load file: "+N);if(window.location.protocol==z){alert("Failed to load API data from the file system.\n\n"+"The security settings of your browser may prohibit AJAX "+"when using the file protocol. Please try the http protocol "+"instead.");}};P.addListener(u,O,this);P.addListener(G,O,this);var Q=new Date();P.send();},__Tg:function(){this._tabViewController.addListener(v,function(bb){this._updateHistory(bb.getData());},this);this._tabViewController.addListener(f,function(bc){var be=bc.getData()[0];if(this._ignoreTabViewSelection==true){return;}if(be&&be.getUserData(j)){var bf=be.getUserData(j);var bd=be.getUserData(A);if(bd!=null){this._updateHistory(bf+h+bd);}else{this._updateHistory(bf);}}else{this._tree.resetSelection();}},this);},__Th:function(){this._tree.addListener(f,function(bg){var bh=bg.getData()[0];if(bh&&bh.getUserData(j)&&!this._ignoreTreeSelection){var bi=bh.getUserData(j);this._updateHistory(bi);}},this);},__Ti:function(){var bk=apiviewer.UiModel.getInstance();var bm=this._widgetRegistry.getWidgetById(K);bm.bind(k,bk,c);bk.bind(c,bm,k);var bj=this._widgetRegistry.getWidgetById(r);bj.bind(k,bk,g);bk.bind(g,bj,k);var bl=this._widgetRegistry.getWidgetById(E);bl.bind(k,bk,b);bk.bind(b,bl,k);var bn=this._widgetRegistry.getWidgetById(o);bn.bind(k,bk,i);bk.bind(i,bn,k);},__Tj:function(){this._history.addListener(a,function(bo){var bp=this.__Tn(bo.getData());if(bp){this.__Tl(bp);}},this);},__Tk:function(bq){var br=new Date();var bs=new apiviewer.dao.Package(bq);var bt=new Date();{};var br=new Date();this._tree.setTreeData(bs);var bt=new Date();{};return true;},_updateHistory:function(bu){var bv=bu+C+this._titlePrefix;qx.bom.History.getInstance().addToHistory(this.__Tm(bu),bv);},_selectClass:function(bw,bx,self){this._detailLoader.exclude();this._tabViewController.showTabView();var by=bx?qx.lang.Function.bind(bx,self):function(){};if(bw instanceof apiviewer.dao.Class){this._classLoader.classLoadDependendClasses(bw,function(bz){this._tabViewController.openClass(bz,this.__Tf);by();},this);}else{this._classLoader.packageLoadDependendClasses(bw,function(){this._tabViewController.openPackage(bw,this.__Tf);by();},this);}},__Tl:function(bA){var bD=bA;var bG=null;var bC=bA.indexOf(h);if(bC!=-1){bD=bA.substring(0,bC);bG=bA.substring(bC+1);var bE=bG.indexOf(d);if(bE!=-1){bG=qx.lang.String.trim(bG.substring(0,bE));}}this._ignoreTreeSelection=true;var bF=this._tree.selectTreeNodeByClassName(bD);this._ignoreTreeSelection=false;if(!bF){this.error("Unknown class: "+bD);alert("Unknown class: "+bD);return;}var bB=this._tree.getSelection()[0].getUserData(j)||bD;this._ignoreTabViewSelection=true;this._selectClass(apiviewer.dao.Class.getClassByName(bB),function(){if(bG){if(!this._tabViewController.showItem(bG)){this.error("Unknown item of class '"+bD+"': "+bG);alert("Unknown item of class '"+bD+"': "+bG);this._updateHistory(bD);this._ignoreTabViewSelection=false;return;}}this._updateHistory(bA);this._ignoreTabViewSelection=false;},this);},__Tm:function(bH){return bH.replace(/(.*)#(.*)/g,x);},__Tn:function(bI){return bI.replace(/(.*)~(.*)/g,s);},__To:function(bJ){if(bJ.type&&bJ.type==p){return bJ;}else{return this.__To(bJ.children[0]);}}},destruct:function(){this._widgetRegistry=null;this._disposeObjects(H,F,B,y,m);}});})();(function(){var m="",l='#',k="String",j="request",i="mshtml",h="changeTitle",g="abstract",f="_applyState",e="qx.client",d="changeState",a="qx.bom.History",c="_applyTitle",b="qx.event.type.Data";qx.Class.define(a,{extend:qx.core.Object,type:g,construct:function(){qx.core.Object.call(this);this._baseUrl=window.location.href.split(l)[0]+l;this.__vx={};this._setInitialState();},events:{"request":b},statics:{SUPPORTS_HASH_CHANGE_EVENT:(qx.bom.client.Engine.MSHTML&&document.documentMode>=8)||(!qx.bom.client.Engine.MSHTML&&document.documentMode&&"onhashchange" in window),getInstance:function(){if(!this.$$instance){if(this.SUPPORTS_HASH_CHANGE_EVENT){this.$$instance=new qx.bom.NativeHistory();}else if(qx.core.Variant.isSet(e,i)){this.$$instance=new qx.bom.IframeHistory();}else{this.$$instance=new qx.bom.NativeHistory();}}return this.$$instance;}},properties:{title:{check:k,event:h,nullable:true,apply:c},state:{check:k,event:d,nullable:true,apply:f}},members:{__vx:null,_applyState:function(n,o){this._writeState(n);},_setInitialState:function(){this.setState(this._readState());},_encode:function(p){if(qx.lang.Type.isString(p)){return encodeURIComponent(p);}return m;},_decode:function(q){if(qx.lang.Type.isString(q)){return decodeURIComponent(q);}return m;},_applyTitle:function(r){if(r!=null){document.title=r||m;}},addToHistory:function(s,t){if(!qx.lang.Type.isString(s)){s=s+m;}if(qx.lang.Type.isString(t)){this.setTitle(t);this.__vx[s]=t;}if(this.getState()!==s){this._writeState(s);}},navigateBack:function(){qx.event.Timer.once(function(){history.back();},0);},navigateForward:function(){qx.event.Timer.once(function(){history.forward();},0);},_onHistoryLoad:function(u){this.setState(u);this.fireDataEvent(j,u);if(this.__vx[u]!=null){this.setTitle(this.__vx[u]);}},_readState:function(){throw new Error("Abstract method call");},_writeState:function(){throw new Error("Abstract method call");},_setHash:function(v){var w=this._baseUrl+(v||m);var x=window.location;if(w!=x.href){x.href=w;}},_getHash:function(){var y=/#(.*)$/.exec(window.location.href);return y&&y[1]?y[1]:m;}},destruct:function(){this.__vx=null;}});})();(function(){var d="hashchange",c="interval",b="qx.bom.NativeHistory",a="qx.client";qx.Class.define(b,{extend:qx.bom.History,construct:function(){qx.bom.History.call(this);this.__vz();},members:{__vy:null,__vz:function(){if(qx.bom.History.SUPPORTS_HASH_CHANGE_EVENT){this.__vy=qx.lang.Function.bind(this.__vB,this);qx.bom.Event.addNativeListener(window,d,this.__vy);}else{qx.event.Idle.getInstance().addListener(c,this.__vB,this);}},__vA:function(){if(qx.bom.History.SUPPORTS_HASH_CHANGE_EVENT){qx.bom.Event.removeNativeListener(window,d,this.__vy);}else{qx.event.Idle.getInstance().removeListener(c,this.__vB,this);}},__vB:function(){var e=this._readState();if(qx.lang.Type.isString(e)&&e!=this.getState()){this._onHistoryLoad(e);}},_readState:function(){return this._decode(this._getHash());},_writeState:qx.core.Variant.select(a,{"opera":function(f){qx.event.Timer.once(function(){this._setHash(this._encode(f));},this,0);},"default":function(g){this._setHash(this._encode(g));}})},destruct:function(){this.__vA();}});})();(function(){var n="interval",m="-1000px",l="mshtml",k="",j="qx.bom.IframeHistory",i="qx/static/blank.html",h="state",g='<html><body><div id="state">',f='</div></body></html>',d="hidden",a="qx.client",c="undefined",b="absolute";if(qx.core.Variant.isSet(a,l)){qx.Class.define(j,{extend:qx.bom.History,construct:function(){qx.bom.History.call(this);this.__vF();},members:{__vC:null,__vD:false,__vE:null,_setInitialState:function(){qx.bom.History.prototype._setInitialState.call(this);this.__vE=this._getHash();},_setHash:function(o){qx.bom.History.prototype._setHash.call(this,o);this.__vE=this._encode(o);},_readState:function(){if(!this.__vD){return this._decode(this._getHash());}var p=this.__vC.contentWindow.document;var q=p.getElementById(h);return q?this._decode(q.innerText):k;},_writeState:function(r){var r=this._encode(r);this._setHash(r);this.__vE=r;try{var s=this.__vC.contentWindow.document;s.open();s.write(g+r+f);s.close();}catch(t){}},__vF:function(){this.__vJ(function(){qx.event.Idle.getInstance().addListener(n,this.__vG,this);});},__vG:function(e){var v=null;var u=this._getHash();if(!this.__vI(u)){v=this.__vH(u);}else{v=this._readState();}if(qx.lang.Type.isString(v)&&v!=this.getState()){this._onHistoryLoad(v);}},__vH:function(w){w=this._decode(w);this._writeState(w);return w;},__vI:function(x){return qx.lang.Type.isString(x)&&x==this.__vE;},__vJ:function(y){this.__vC=this.__vK();document.body.appendChild(this.__vC);this.__vL(function(){this._writeState(this.getState());if(y){y.call(this);}},this);},__vK:function(){var z=qx.bom.Iframe.create({src:qx.util.ResourceManager.getInstance().toUri(i)});z.style.visibility=d;z.style.position=b;z.style.left=m;z.style.top=m;return z;},__vL:function(A,B,C){if(typeof C===c){C=0;}if(!this.__vC.contentWindow||!this.__vC.contentWindow.document){if(C>20){throw new Error("can't initialize iframe");}qx.event.Timer.once(function(){this.__vL(A,B,++C);},this,10);return;}this.__vD=true;A.call(B||window);}},destruct:function(){this.__vC=null;qx.event.Idle.getInstance().addListener(n,this.__vG,this);}});}})();(function(){var n="Liberation Sans",m="Arial",l="Lucida Grande",k="sans-serif",j="Tahoma",i="Candara",h="Segoe UI",g="Consolas",f="Courier New",e="Monaco",b="monospace",d="Lucida Console",c="qx.theme.modern.Font",a="DejaVu Sans Mono";qx.Theme.define(c,{fonts:{"default":{size:(qx.bom.client.System.WINVISTA||qx.bom.client.System.WIN7)?12:11,lineHeight:1.4,family:qx.bom.client.Platform.MAC?[l]:(qx.bom.client.System.WINVISTA||qx.bom.client.System.WIN7)?[h,i]:[j,n,m,k]},"bold":{size:(qx.bom.client.System.WINVISTA||qx.bom.client.System.WIN7)?12:11,lineHeight:1.4,family:qx.bom.client.Platform.MAC?[l]:(qx.bom.client.System.WINVISTA||qx.bom.client.System.WIN7)?[h,i]:[j,n,m,k],bold:true},"small":{size:(qx.bom.client.System.WINVISTA||qx.bom.client.System.WIN7)?11:10,lineHeight:1.4,family:qx.bom.client.Platform.MAC?[l]:(qx.bom.client.System.WINVISTA||qx.bom.client.System.WIN7)?[h,i]:[j,n,m,k]},"monospace":{size:11,lineHeight:1.4,family:qx.bom.client.Platform.MAC?[d,e]:(qx.bom.client.System.WINVISTA||qx.bom.client.System.WIN7)?[g]:[g,a,f,b]}}});})();(function(){var c="Tango",b="qx/icon/Tango",a="qx.theme.icon.Tango";qx.Theme.define(a,{title:c,aliases:{"icon":b},icons:{}});})();(function(){var i="Number",h="_applyInsets",g="abstract",f="insetRight",e="insetTop",d="insetBottom",c="qx.ui.decoration.Abstract",b="shorthand",a="insetLeft";qx.Class.define(c,{extend:qx.core.Object,implement:[qx.ui.decoration.IDecorator],type:g,properties:{insetLeft:{check:i,nullable:true,apply:h},insetRight:{check:i,nullable:true,apply:h},insetBottom:{check:i,nullable:true,apply:h},insetTop:{check:i,nullable:true,apply:h},insets:{group:[e,f,d,a],mode:b}},members:{__oa:null,_getDefaultInsets:function(){throw new Error("Abstract method called.");},_isInitialized:function(){throw new Error("Abstract method called.");},_resetInsets:function(){this.__oa=null;},getInsets:function(){if(this.__oa){return this.__oa;}var j=this._getDefaultInsets();return this.__oa={left:this.getInsetLeft()==null?j.left:this.getInsetLeft(),right:this.getInsetRight()==null?j.right:this.getInsetRight(),bottom:this.getInsetBottom()==null?j.bottom:this.getInsetBottom(),top:this.getInsetTop()==null?j.top:this.getInsetTop()};},_applyInsets:function(){{};this.__oa=null;}},destruct:function(){this.__oa=null;}});})();(function(){var q="_applyBackground",p="repeat",o="mshtml",n="backgroundPositionX",m="",l="backgroundPositionY",k="no-repeat",j="scale",i=" ",h="repeat-x",c="qx.client",g="repeat-y",f="hidden",b="qx.ui.decoration.MBackgroundImage",a="String",e='"></div>',d='<div style="';qx.Mixin.define(b,{properties:{backgroundImage:{check:a,nullable:true,apply:q},backgroundRepeat:{check:[p,h,g,k,j],init:p,apply:q},backgroundPositionX:{nullable:true,apply:q},backgroundPositionY:{nullable:true,apply:q},backgroundPosition:{group:[l,n]}},members:{_generateBackgroundMarkup:function(r){var v=m;var u=this.getBackgroundImage();var t=this.getBackgroundRepeat();var top=this.getBackgroundPositionY();if(top==null){top=0;}var w=this.getBackgroundPositionX();if(w==null){w=0;}r.backgroundPosition=w+i+top;if(u){var s=qx.util.AliasManager.getInstance().resolve(u);v=qx.bom.element.Decoration.create(s,t,r);}else{if(r){if(qx.core.Variant.isSet(c,o)){if(qx.bom.client.Engine.VERSION<7||qx.bom.client.Feature.QUIRKS_MODE){r.overflow=f;}}v=d+qx.bom.element.Style.compile(r)+e;}}return v;},_applyBackground:function(){{};}}});})();(function(){var j="_applyStyle",i="solid",h="Color",g="",f="double",e="px",d="px ",c="dotted",b="_applyWidth",a="dashed",E="Number",D=" ",C="shorthand",B="widthTop",A="styleRight",z="styleLeft",y="widthLeft",x="widthBottom",w="styleTop",v="colorBottom",q="styleBottom",r="widthRight",o="colorLeft",p="colorRight",m="colorTop",n="border-top",k="border-left",l="border-right",s="qx.ui.decoration.Single",t="border-bottom",u="absolute";qx.Class.define(s,{extend:qx.ui.decoration.Abstract,include:[qx.ui.decoration.MBackgroundImage],construct:function(F,G,H){qx.ui.decoration.Abstract.call(this);if(F!=null){this.setWidth(F);}if(G!=null){this.setStyle(G);}if(H!=null){this.setColor(H);}},properties:{widthTop:{check:E,init:0,apply:b},widthRight:{check:E,init:0,apply:b},widthBottom:{check:E,init:0,apply:b},widthLeft:{check:E,init:0,apply:b},styleTop:{nullable:true,check:[i,c,a,f],init:i,apply:j},styleRight:{nullable:true,check:[i,c,a,f],init:i,apply:j},styleBottom:{nullable:true,check:[i,c,a,f],init:i,apply:j},styleLeft:{nullable:true,check:[i,c,a,f],init:i,apply:j},colorTop:{nullable:true,check:h,apply:j},colorRight:{nullable:true,check:h,apply:j},colorBottom:{nullable:true,check:h,apply:j},colorLeft:{nullable:true,check:h,apply:j},backgroundColor:{check:h,nullable:true,apply:j},left:{group:[y,z,o]},right:{group:[r,A,p]},top:{group:[B,w,m]},bottom:{group:[x,q,v]},width:{group:[B,r,x,y],mode:C},style:{group:[w,A,q,z],mode:C},color:{group:[m,p,v,o],mode:C}},members:{__pl:null,_getDefaultInsets:function(){return {top:this.getWidthTop(),right:this.getWidthRight(),bottom:this.getWidthBottom(),left:this.getWidthLeft()};},_isInitialized:function(){return !!this.__pl;},getMarkup:function(I){if(this.__pl){return this.__pl;}var J=qx.theme.manager.Color.getInstance();var K={};var M=this.getWidthTop();if(M>0){K[n]=M+d+this.getStyleTop()+D+(J.resolve(this.getColorTop())||g);}var M=this.getWidthRight();if(M>0){K[l]=M+d+this.getStyleRight()+D+(J.resolve(this.getColorRight())||g);}var M=this.getWidthBottom();if(M>0){K[t]=M+d+this.getStyleBottom()+D+(J.resolve(this.getColorBottom())||g);}var M=this.getWidthLeft();if(M>0){K[k]=M+d+this.getStyleLeft()+D+(J.resolve(this.getColorLeft())||g);}{};K.position=u;K.top=0;K.left=0;var L=this._generateBackgroundMarkup(K);return this.__pl=L;},resize:function(N,O,P){var Q=this.getInsets();O-=Q.left+Q.right;P-=Q.top+Q.bottom;if(O<0){O=0;}if(P<0){P=0;}N.style.width=O+e;N.style.height=P+e;N.style.left=(parseInt(N.style.left,10)+Q.left-this.getWidthLeft())+e;N.style.top=(parseInt(N.style.top,10)+Q.top-this.getWidthTop())+e;},tint:function(R,S){var T=qx.theme.manager.Color.getInstance();if(S==null){S=this.getBackgroundColor();}R.style.backgroundColor=T.resolve(S)||g;},_applyWidth:function(){{};this._resetInsets();},_applyStyle:function(){{};}},destruct:function(){this.__pl=null;}});})();(function(){var f="px",e="qx.ui.decoration.Background",d="",c="_applyStyle",b="Color",a="absolute";qx.Class.define(e,{extend:qx.ui.decoration.Abstract,include:[qx.ui.decoration.MBackgroundImage],construct:function(g){qx.ui.decoration.Abstract.call(this);if(g!=null){this.setBackgroundColor(g);}},properties:{backgroundColor:{check:b,nullable:true,apply:c}},members:{__oe:null,_getDefaultInsets:function(){return {top:0,right:0,bottom:0,left:0};},_isInitialized:function(){return !!this.__oe;},getMarkup:function(){if(this.__oe){return this.__oe;}var h={position:a,top:0,left:0};var i=this._generateBackgroundMarkup(h);return this.__oe=i;},resize:function(j,k,l){var m=this.getInsets();j.style.width=(k-m.left-m.right)+f;j.style.height=(l-m.top-m.bottom)+f;j.style.left=-m.left+f;j.style.top=-m.top+f;},tint:function(n,o){var p=qx.theme.manager.Color.getInstance();if(o==null){o=this.getBackgroundColor();}n.style.backgroundColor=p.resolve(o)||d;},_applyStyle:function(){{};}},destruct:function(){this.__oe=null;}});})();(function(){var j="_applyStyle",i='"></div>',h="Color",g="1px",f='<div style="',e='border:',d="1px solid ",c="",b=";",a="px",v='</div>',u="qx.ui.decoration.Beveled",t='<div style="position:absolute;top:1px;left:1px;',s='border-bottom:',r='border-right:',q='border-left:',p='border-top:',o="Number",n='<div style="position:absolute;top:1px;left:0px;',m='position:absolute;top:0px;left:1px;',k='<div style="overflow:hidden;font-size:0;line-height:0;">',l="absolute";qx.Class.define(u,{extend:qx.ui.decoration.Abstract,include:[qx.ui.decoration.MBackgroundImage],construct:function(w,x,y){qx.ui.decoration.Abstract.call(this);if(w!=null){this.setOuterColor(w);}if(x!=null){this.setInnerColor(x);}if(y!=null){this.setInnerOpacity(y);}},properties:{innerColor:{check:h,nullable:true,apply:j},innerOpacity:{check:o,init:1,apply:j},outerColor:{check:h,nullable:true,apply:j},backgroundColor:{check:h,nullable:true,apply:j}},members:{__ry:null,_getDefaultInsets:function(){return {top:2,right:2,bottom:2,left:2};},_isInitialized:function(){return !!this.__ry;},_applyStyle:function(){{};},getMarkup:function(){if(this.__ry){return this.__ry;}var z=qx.theme.manager.Color.getInstance();var A=[];var D=d+z.resolve(this.getOuterColor())+b;var C=d+z.resolve(this.getInnerColor())+b;A.push(k);A.push(f);A.push(e,D);A.push(qx.bom.element.Opacity.compile(0.35));A.push(i);A.push(n);A.push(q,D);A.push(r,D);A.push(qx.bom.element.Opacity.compile(1));A.push(i);A.push(f);A.push(m);A.push(p,D);A.push(s,D);A.push(qx.bom.element.Opacity.compile(1));A.push(i);var B={position:l,top:g,left:g,opacity:1};A.push(this._generateBackgroundMarkup(B));A.push(t);A.push(e,C);A.push(qx.bom.element.Opacity.compile(this.getInnerOpacity()));A.push(i);A.push(v);return this.__ry=A.join(c);},resize:function(E,F,G){if(F<4){F=4;}if(G<4){G=4;}if(qx.bom.client.Feature.CONTENT_BOX){var outerWidth=F-2;var outerHeight=G-2;var M=outerWidth;var L=outerHeight;var innerWidth=F-4;var innerHeight=G-4;}else{var outerWidth=F;var outerHeight=G;var M=F-2;var L=G-2;var innerWidth=M;var innerHeight=L;}var O=a;var K=E.childNodes[0].style;K.width=outerWidth+O;K.height=outerHeight+O;var J=E.childNodes[1].style;J.width=outerWidth+O;J.height=L+O;var I=E.childNodes[2].style;I.width=M+O;I.height=outerHeight+O;var H=E.childNodes[3].style;H.width=M+O;H.height=L+O;var N=E.childNodes[4].style;N.width=innerWidth+O;N.height=innerHeight+O;},tint:function(P,Q){var R=qx.theme.manager.Color.getInstance();if(Q==null){Q=this.getBackgroundColor();}P.childNodes[3].style.backgroundColor=R.resolve(Q)||c;}},destruct:function(){this.__ry=null;}});})();(function(){var o="_applyStyle",n="",m="Color",l="px",k="solid",j="dotted",i="double",h="dashed",g="_applyWidth",f="qx.ui.decoration.Uniform",c="px ",e=" ",d="scale",b="PositiveInteger",a="absolute";qx.Class.define(f,{extend:qx.ui.decoration.Abstract,include:[qx.ui.decoration.MBackgroundImage],construct:function(p,q,r){qx.ui.decoration.Abstract.call(this);if(p!=null){this.setWidth(p);}if(q!=null){this.setStyle(q);}if(r!=null){this.setColor(r);}},properties:{width:{check:b,init:0,apply:g},style:{nullable:true,check:[k,j,h,i],init:k,apply:o},color:{nullable:true,check:m,apply:o},backgroundColor:{check:m,nullable:true,apply:o}},members:{__rP:null,_getDefaultInsets:function(){var s=this.getWidth();return {top:s,right:s,bottom:s,left:s};},_isInitialized:function(){return !!this.__rP;},getMarkup:function(){if(this.__rP){return this.__rP;}var t={position:a,top:0,left:0};var u=this.getWidth();{};var w=qx.theme.manager.Color.getInstance();t.border=u+c+this.getStyle()+e+(w.resolve(this.getColor())||n);var v=this._generateBackgroundMarkup(t);return this.__rP=v;},resize:function(x,y,z){var B=this.getBackgroundImage()&&this.getBackgroundRepeat()==d;if(B||qx.bom.client.Feature.CONTENT_BOX){var A=this.getWidth()*2;y-=A;z-=A;if(y<0){y=0;}if(z<0){z=0;}}x.style.width=y+l;x.style.height=z+l;},tint:function(C,D){var E=qx.theme.manager.Color.getInstance();if(D==null){D=this.getBackgroundColor();}C.style.backgroundColor=E.resolve(D)||n;},_applyWidth:function(){{};this._resetInsets();},_applyStyle:function(){{};}},destruct:function(){this.__rP=null;}});})();(function(){var m="Number",l="_applyInsets",k="-l",j="insetRight",i="insetTop",h="_applyBaseImage",g="insetBottom",f="set",e="shorthand",d="-t",a="insetLeft",c="String",b="qx.ui.decoration.Grid";qx.Class.define(b,{extend:qx.core.Object,implement:[qx.ui.decoration.IDecorator],construct:function(n,o){qx.core.Object.call(this);if(qx.ui.decoration.css3.BorderImage.IS_SUPPORTED){this.__oA=new qx.ui.decoration.css3.BorderImage();if(n){this.__oB(n);}}else{this.__oA=new qx.ui.decoration.GridDiv(n);}if(o!=null){this.__oA.setInsets(o);}},properties:{baseImage:{check:c,nullable:true,apply:h},insetLeft:{check:m,nullable:true,apply:l},insetRight:{check:m,nullable:true,apply:l},insetBottom:{check:m,nullable:true,apply:l},insetTop:{check:m,nullable:true,apply:l},insets:{group:[i,j,g,a],mode:e}},members:{__oA:null,getMarkup:function(){return this.__oA.getMarkup();},resize:function(p,q,r){this.__oA.resize(p,q,r);},tint:function(s,t){},getInsets:function(){return this.__oA.getInsets();},_applyInsets:function(u,v,name){var w=f+qx.lang.String.firstUp(name);this.__oA[w](u);},_applyBaseImage:function(x,y){if(this.__oA instanceof qx.ui.decoration.GridDiv){this.__oA.setBaseImage(x);}else{this.__oB(x);}},__oB:function(z){var B,D;this.__oA.setBorderImage(z);var F=qx.util.AliasManager.getInstance().resolve(z);var G=/(.*)(\.[a-z]+)$/.exec(F);var C=G[1];var E=G[2];var A=qx.util.ResourceManager.getInstance();var H=A.getImageHeight(C+d+E);var I=A.getImageWidth(C+k+E);{};this.__oA.setSlice([H,I]);}},destruct:function(){this.__oA=null;}});})();(function(){var m="solid",l="scale",k="border-main",j="white",i="repeat-x",h="border-separator",g="background-light",f="invalid",e="border-focused-invalid",d="border-input",bt="border-disabled",bs="decoration/table/header-cell.png",br="decoration/form/input.png",bq="#f8f8f8",bp="decoration/scrollbar/scrollbar-button-bg-horizontal.png",bo="#b6b6b6",bn="background-pane",bm="repeat-y",bl="decoration/form/input-focused.png",bk="#33508D",t="decoration/selection.png",u="decoration/scrollbar/scrollbar-button-bg-vertical.png",r="decoration/tabview/tab-button-top-active.png",s="black",p="decoration/group-item.png",q="decoration/form/button-c.png",n="decoration/scrollbar/scrollbar-bg-vertical.png",o="decoration/form/button.png",B="decoration/form/button-checked.png",C="decoration/tabview/tab-button-left-inactive.png",O="decoration/groupbox/groupbox.png",K="#FAFAFA",W="decoration/pane/pane.png",R="dotted",bg="decoration/toolbar/toolbar-part.gif",bc="decoration/tabview/tab-button-top-inactive.png",G="decoration/menu/bar-background.png",bj="center",bi="decoration/tabview/tab-button-bottom-active.png",bh="decoration/form/button-hovered.png",F="decoration/form/tooltip-error-arrow.png",I="decoration/window/captionbar-inactive.png",J="qx/decoration/Modern",M="decoration/menu/background.png",P="decoration/window/statusbar.png",S="border-focused",Y="table-focus-indicator",be="#F2F2F2",v="decoration/form/button-checked-c.png",w="decoration/scrollbar/scrollbar-bg-horizontal.png",H="qx.theme.modern.Decoration",V="#f4f4f4",U="decoration/shadow/shadow-small.png",T="decoration/app-header.png",bb="decoration/tabview/tabview-pane.png",ba="decoration/form/tooltip-error.png",Q="decoration/form/button-focused.png",X="decoration/tabview/tab-button-bottom-inactive.png",a="decoration/form/button-disabled.png",bd="decoration/tabview/tab-button-right-active.png",x="decoration/form/button-pressed.png",y="no-repeat",L="decoration/window/captionbar-active.png",b="decoration/tabview/tab-button-left-active.png",c="background-splitpane",E="decoration/form/button-checked-focused.png",z="#C5C5C5",A="decoration/toolbar/toolbar-gradient.png",D="decoration/tabview/tab-button-right-inactive.png",N="#b8b8b8",bf="decoration/shadow/shadow.png";qx.Theme.define(H,{aliases:{decoration:J},decorations:{"main":{decorator:qx.ui.decoration.Uniform,style:{width:1,color:k}},"selected":{decorator:qx.ui.decoration.Background,style:{backgroundImage:t,backgroundRepeat:l}},"selected-dragover":{decorator:qx.ui.decoration.Single,style:{backgroundImage:t,backgroundRepeat:l,bottom:[2,m,bk]}},"dragover":{decorator:qx.ui.decoration.Single,style:{bottom:[2,m,bk]}},"pane":{decorator:qx.ui.decoration.Grid,style:{baseImage:W,insets:[0,2,3,0]}},"group":{decorator:qx.ui.decoration.Grid,style:{baseImage:O}},"border-invalid":{decorator:qx.ui.decoration.Beveled,style:{outerColor:f,innerColor:j,innerOpacity:0.5,backgroundImage:br,backgroundRepeat:i,backgroundColor:g}},"keyboard-focus":{decorator:qx.ui.decoration.Single,style:{width:1,color:s,style:R}},"separator-horizontal":{decorator:qx.ui.decoration.Single,style:{widthLeft:1,colorLeft:h}},"separator-vertical":{decorator:qx.ui.decoration.Single,style:{widthTop:1,colorTop:h}},"tooltip-error":{decorator:qx.ui.decoration.Grid,style:{baseImage:ba,insets:[2,5,5,2]}},"tooltip-error-arrow":{decorator:qx.ui.decoration.Background,style:{backgroundImage:F,backgroundPositionY:bj,backgroundRepeat:y,insets:[0,0,0,10]}},"shadow-window":{decorator:qx.ui.decoration.Grid,style:{baseImage:bf,insets:[4,8,8,4]}},"shadow-popup":{decorator:qx.ui.decoration.Grid,style:{baseImage:U,insets:[0,3,3,0]}},"scrollbar-horizontal":{decorator:qx.ui.decoration.Background,style:{backgroundImage:w,backgroundRepeat:i}},"scrollbar-vertical":{decorator:qx.ui.decoration.Background,style:{backgroundImage:n,backgroundRepeat:bm}},"scrollbar-slider-horizontal":{decorator:qx.ui.decoration.Beveled,style:{backgroundImage:bp,backgroundRepeat:l,outerColor:k,innerColor:j,innerOpacity:0.5}},"scrollbar-slider-horizontal-disabled":{decorator:qx.ui.decoration.Beveled,style:{backgroundImage:bp,backgroundRepeat:l,outerColor:bt,innerColor:j,innerOpacity:0.3}},"scrollbar-slider-vertical":{decorator:qx.ui.decoration.Beveled,style:{backgroundImage:u,backgroundRepeat:l,outerColor:k,innerColor:j,innerOpacity:0.5}},"scrollbar-slider-vertical-disabled":{decorator:qx.ui.decoration.Beveled,style:{backgroundImage:u,backgroundRepeat:l,outerColor:bt,innerColor:j,innerOpacity:0.3}},"button":{decorator:qx.ui.decoration.Grid,style:{baseImage:o,insets:2}},"button-disabled":{decorator:qx.ui.decoration.Grid,style:{baseImage:a,insets:2}},"button-focused":{decorator:qx.ui.decoration.Grid,style:{baseImage:Q,insets:2}},"button-hovered":{decorator:qx.ui.decoration.Grid,style:{baseImage:bh,insets:2}},"button-pressed":{decorator:qx.ui.decoration.Grid,style:{baseImage:x,insets:2}},"button-checked":{decorator:qx.ui.decoration.Grid,style:{baseImage:B,insets:2}},"button-checked-focused":{decorator:qx.ui.decoration.Grid,style:{baseImage:E,insets:2}},"button-invalid-shadow":{decorator:qx.ui.decoration.Beveled,style:{outerColor:f,innerColor:e,insets:[1]}},"checkbox-invalid-shadow":{decorator:qx.ui.decoration.Beveled,style:{outerColor:f,innerColor:e,insets:[0]}},"input":{decorator:qx.ui.decoration.Beveled,style:{outerColor:d,innerColor:j,innerOpacity:0.5,backgroundImage:br,backgroundRepeat:i,backgroundColor:g}},"input-focused":{decorator:qx.ui.decoration.Beveled,style:{outerColor:d,innerColor:S,backgroundImage:bl,backgroundRepeat:i,backgroundColor:g}},"input-focused-invalid":{decorator:qx.ui.decoration.Beveled,style:{outerColor:f,innerColor:e,backgroundImage:bl,backgroundRepeat:i,backgroundColor:g,insets:[2]}},"input-disabled":{decorator:qx.ui.decoration.Beveled,style:{outerColor:bt,innerColor:j,innerOpacity:0.5,backgroundImage:br,backgroundRepeat:i,backgroundColor:g}},"toolbar":{decorator:qx.ui.decoration.Background,style:{backgroundImage:A,backgroundRepeat:l}},"toolbar-button-hovered":{decorator:qx.ui.decoration.Beveled,style:{outerColor:bo,innerColor:bq,backgroundImage:q,backgroundRepeat:l}},"toolbar-button-checked":{decorator:qx.ui.decoration.Beveled,style:{outerColor:bo,innerColor:bq,backgroundImage:v,backgroundRepeat:l}},"toolbar-separator":{decorator:qx.ui.decoration.Single,style:{widthLeft:1,widthRight:1,colorLeft:N,colorRight:V,styleLeft:m,styleRight:m}},"toolbar-part":{decorator:qx.ui.decoration.Background,style:{backgroundImage:bg,backgroundRepeat:bm}},"tabview-pane":{decorator:qx.ui.decoration.Grid,style:{baseImage:bb,insets:[4,6,7,4]}},"tabview-page-button-top-active":{decorator:qx.ui.decoration.Grid,style:{baseImage:r}},"tabview-page-button-top-inactive":{decorator:qx.ui.decoration.Grid,style:{baseImage:bc}},"tabview-page-button-bottom-active":{decorator:qx.ui.decoration.Grid,style:{baseImage:bi}},"tabview-page-button-bottom-inactive":{decorator:qx.ui.decoration.Grid,style:{baseImage:X}},"tabview-page-button-left-active":{decorator:qx.ui.decoration.Grid,style:{baseImage:b}},"tabview-page-button-left-inactive":{decorator:qx.ui.decoration.Grid,style:{baseImage:C}},"tabview-page-button-right-active":{decorator:qx.ui.decoration.Grid,style:{baseImage:bd}},"tabview-page-button-right-inactive":{decorator:qx.ui.decoration.Grid,style:{baseImage:D}},"splitpane":{decorator:qx.ui.decoration.Uniform,style:{backgroundColor:bn,width:3,color:c,style:m}},"window":{decorator:qx.ui.decoration.Single,style:{backgroundColor:bn,width:1,color:k,widthTop:0}},"window-captionbar-active":{decorator:qx.ui.decoration.Grid,style:{baseImage:L}},"window-captionbar-inactive":{decorator:qx.ui.decoration.Grid,style:{baseImage:I}},"window-statusbar":{decorator:qx.ui.decoration.Grid,style:{baseImage:P}},"table":{decorator:qx.ui.decoration.Single,style:{width:1,color:k,style:m}},"table-statusbar":{decorator:qx.ui.decoration.Single,style:{widthTop:1,colorTop:k,style:m}},"table-scroller-header":{decorator:qx.ui.decoration.Single,style:{backgroundImage:bs,backgroundRepeat:l,widthBottom:1,colorBottom:k,style:m}},"table-header-cell":{decorator:qx.ui.decoration.Single,style:{widthRight:1,colorRight:h,styleRight:m}},"table-header-cell-hovered":{decorator:qx.ui.decoration.Single,style:{widthRight:1,colorRight:h,styleRight:m,widthBottom:1,colorBottom:j,styleBottom:m}},"table-column-button":{decorator:qx.ui.decoration.Single,style:{backgroundImage:bs,backgroundRepeat:l,widthBottom:1,colorBottom:k,style:m}},"table-scroller-focus-indicator":{decorator:qx.ui.decoration.Single,style:{width:2,color:Y,style:m}},"progressive-table-header":{decorator:qx.ui.decoration.Single,style:{width:1,color:k,style:m}},"progressive-table-header-cell":{decorator:qx.ui.decoration.Single,style:{backgroundImage:bs,backgroundRepeat:l,widthRight:1,colorRight:be,style:m}},"menu":{decorator:qx.ui.decoration.Single,style:{backgroundImage:M,backgroundRepeat:l,width:1,color:k,style:m}},"menu-separator":{decorator:qx.ui.decoration.Single,style:{widthTop:1,colorTop:z,widthBottom:1,colorBottom:K}},"menubar":{decorator:qx.ui.decoration.Single,style:{backgroundImage:G,backgroundRepeat:l,width:1,color:h,style:m}},"app-header":{decorator:qx.ui.decoration.Background,style:{backgroundImage:T,backgroundRepeat:l}},"progressbar":{decorator:qx.ui.decoration.Single,style:{width:1,color:d}},"group-item":{decorator:qx.ui.decoration.Background,style:{backgroundImage:p,backgroundRepeat:l}}}});})();(function(){var j="#CCCCCC",i="#F3F3F3",h="#E4E4E4",g="#1a1a1a",f="#084FAB",e="gray",d="#fffefe",c="white",b="#4a4a4a",a="#EEEEEE",K="#80B4EF",J="#C72B2B",I="#ffffdd",H="#334866",G="#00204D",F="#666666",E="#CBC8CD",D="#99C3FE",C="#808080",B="#F4F4F4",q="#001533",r="#909090",o="#FCFCFC",p="#314a6e",m="#B6B6B6",n="#0880EF",k="#4d4d4d",l="#DFDFDF",s="#000000",t="#FF9999",w="#7B7A7E",v="#26364D",y="#990000",x="#AFAFAF",A="#404955",z="#AAAAAA",u="qx.theme.modern.Color";qx.Theme.define(u,{colors:{"background-application":l,"background-pane":i,"background-light":o,"background-medium":a,"background-splitpane":x,"background-tip":I,"background-tip-error":J,"background-odd":h,"text-light":r,"text-gray":b,"text-label":g,"text-title":p,"text-input":s,"text-hovered":q,"text-disabled":w,"text-selected":d,"text-active":v,"text-inactive":A,"text-placeholder":E,"border-main":k,"border-separator":C,"border-input":H,"border-disabled":m,"border-pane":G,"border-button":F,"border-column":j,"border-focused":D,"invalid":y,"border-focused-invalid":t,"table-pane":i,"table-focus-indicator":n,"table-row-background-focused-selected":f,"table-row-background-focused":K,"table-row-background-selected":f,"table-row-background-even":i,"table-row-background-odd":h,"table-row-selected":d,"table-row":g,"table-row-line":j,"table-column-line":j,"progressive-table-header":z,"progressive-table-row-background-even":B,"progressive-table-row-background-odd":h,"progressive-progressbar-background":e,"progressive-progressbar-indicator-done":j,"progressive-progressbar-indicator-undone":c,"progressive-progressbar-percent-background":e,"progressive-progressbar-percent-text":c}});})();(function(){var b="apiviewer.Theme",a="APIViewer theme";qx.Theme.define(b,{title:a,meta:{color:qx.theme.modern.Color,decoration:qx.theme.modern.Decoration,font:qx.theme.modern.Font,appearance:apiviewer.Appearance,icon:qx.theme.icon.Tango}});})();(function(){var j="_applyStyle",i="stretch",h="Integer",g="px",f=" ",e="repeat",d="round",c="shorthand",b="px ",a="sliceBottom",y=";'></div>",x="<div style='",w="sliceLeft",v="sliceRight",u="repeatX",t="String",s="qx.ui.decoration.css3.BorderImage",r="border-box",q="",p='") ',n="sliceTop",o='url("',l="hidden",m="repeatY",k="absolute";qx.Class.define(s,{extend:qx.ui.decoration.Abstract,construct:function(z,A){qx.ui.decoration.Abstract.call(this);if(z!=null){this.setBorderImage(z);}if(A!=null){this.setSlice(A);}},statics:{IS_SUPPORTED:qx.bom.element.Style.isPropertySupported("borderImage")},properties:{borderImage:{check:t,nullable:true,apply:j},sliceTop:{check:h,init:0,apply:j},sliceRight:{check:h,init:0,apply:j},sliceBottom:{check:h,init:0,apply:j},sliceLeft:{check:h,init:0,apply:j},slice:{group:[n,v,a,w],mode:c},repeatX:{check:[i,e,d],init:i,apply:j},repeatY:{check:[i,e,d],init:i,apply:j},repeat:{group:[u,m],mode:c}},members:{__nw:null,_getDefaultInsets:function(){return {top:0,right:0,bottom:0,left:0};},_isInitialized:function(){return !!this.__nw;},getMarkup:function(){if(this.__nw){return this.__nw;}var B=this._resolveImageUrl(this.getBorderImage());var C=[this.getSliceTop(),this.getSliceRight(),this.getSliceBottom(),this.getSliceLeft()];var D=[this.getRepeatX(),this.getRepeatY()].join(f);this.__nw=[x,qx.bom.element.Style.compile({"borderImage":o+B+p+C.join(f)+f+D,position:k,lineHeight:0,fontSize:0,overflow:l,boxSizing:r,borderWidth:C.join(b)+g}),y].join(q);return this.__nw;},resize:function(E,F,G){E.style.width=F+g;E.style.height=G+g;},tint:function(H,I){},_applyStyle:function(){{};},_resolveImageUrl:function(J){return qx.util.ResourceManager.getInstance().toUri(qx.util.AliasManager.getInstance().resolve(J));}},destruct:function(){this.__nw=null;}});})();(function(){var j="px",i="0px",h="-1px",g="no-repeat",f="scale-x",e="scale-y",d="-tr",c="-l",b='</div>',a="scale",x="qx.client",w="-br",v="-t",u="-tl",t="-r",s='<div style="position:absolute;top:0;left:0;overflow:hidden;font-size:0;line-height:0;">',r="_applyBaseImage",q="-b",p="String",o="",m="-bl",n="qx.ui.decoration.GridDiv",k="-c",l="mshtml";qx.Class.define(n,{extend:qx.ui.decoration.Abstract,construct:function(y,z){qx.ui.decoration.Abstract.call(this);if(y!=null){this.setBaseImage(y);}if(z!=null){this.setInsets(z);}},properties:{baseImage:{check:p,nullable:true,apply:r}},members:{__nx:null,__ny:null,__nz:null,_getDefaultInsets:function(){return {top:0,right:0,bottom:0,left:0};},_isInitialized:function(){return !!this.__nx;},getMarkup:function(){if(this.__nx){return this.__nx;}var A=qx.bom.element.Decoration;var B=this.__ny;var C=this.__nz;var D=[];D.push(s);D.push(A.create(B.tl,g,{top:0,left:0}));D.push(A.create(B.t,f,{top:0,left:C.left+j}));D.push(A.create(B.tr,g,{top:0,right:0}));D.push(A.create(B.bl,g,{bottom:0,left:0}));D.push(A.create(B.b,f,{bottom:0,left:C.left+j}));D.push(A.create(B.br,g,{bottom:0,right:0}));D.push(A.create(B.l,e,{top:C.top+j,left:0}));D.push(A.create(B.c,a,{top:C.top+j,left:C.left+j}));D.push(A.create(B.r,e,{top:C.top+j,right:0}));D.push(b);return this.__nx=D.join(o);},resize:function(E,F,G){var H=this.__nz;var innerWidth=F-H.left-H.right;var innerHeight=G-H.top-H.bottom;if(innerWidth<0){innerWidth=0;}if(innerHeight<0){innerHeight=0;}E.style.width=F+j;E.style.height=G+j;E.childNodes[1].style.width=innerWidth+j;E.childNodes[4].style.width=innerWidth+j;E.childNodes[7].style.width=innerWidth+j;E.childNodes[6].style.height=innerHeight+j;E.childNodes[7].style.height=innerHeight+j;E.childNodes[8].style.height=innerHeight+j;if(qx.core.Variant.isSet(x,l)){if(qx.bom.client.Engine.VERSION<7||(qx.bom.client.Feature.QUIRKS_MODE&&qx.bom.client.Engine.VERSION<8)){if(F%2==1){E.childNodes[2].style.marginRight=h;E.childNodes[5].style.marginRight=h;E.childNodes[8].style.marginRight=h;}else{E.childNodes[2].style.marginRight=i;E.childNodes[5].style.marginRight=i;E.childNodes[8].style.marginRight=i;}if(G%2==1){E.childNodes[3].style.marginBottom=h;E.childNodes[4].style.marginBottom=h;E.childNodes[5].style.marginBottom=h;}else{E.childNodes[3].style.marginBottom=i;E.childNodes[4].style.marginBottom=i;E.childNodes[5].style.marginBottom=i;}}}},tint:function(I,J){},_applyBaseImage:function(K,L){{};if(K){var P=this._resolveImageUrl(K);var Q=/(.*)(\.[a-z]+)$/.exec(P);var O=Q[1];var N=Q[2];var M=this.__ny={tl:O+u+N,t:O+v+N,tr:O+d+N,bl:O+m+N,b:O+q+N,br:O+w+N,l:O+c+N,c:O+k+N,r:O+t+N};this.__nz=this._computeEdgeSizes(M);}},_resolveImageUrl:function(R){return qx.util.AliasManager.getInstance().resolve(R);},_computeEdgeSizes:function(S){var T=qx.util.ResourceManager.getInstance();return {top:T.getImageHeight(S.t),bottom:T.getImageHeight(S.b),left:T.getImageWidth(S.l),right:T.getImageWidth(S.r)};}},destruct:function(){this.__nx=this.__ny=this.__nz=null;}});})();(function(){var a="apiviewer.test.StringExtend";qx.Class.define(a,{extend:String,members:{}});})();
-
-qx.$$loader.init();
-
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/bootstrap.js b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/bootstrap.js
deleted file mode 100644
index c7b9d89..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/bootstrap.js
+++ /dev/null
@@ -1,1829 +0,0 @@
-/* Modifications: replaced one ; with \n for testing purposes
- * Before the second !function -- nd */
-
-/* ===================================================
- * bootstrap-transition.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#transitions
- * ===================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  $(function () {
-
-    "use strict"; // jshint ;_;
-
-
-    /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
-     * ======================================================= */
-
-    $.support.transition = (function () {
-
-      var transitionEnd = (function () {
-
-        var el = document.createElement('bootstrap')
-          , transEndEventNames = {
-               'WebkitTransition' : 'webkitTransitionEnd'
-            ,  'MozTransition'    : 'transitionend'
-            ,  'OTransition'      : 'oTransitionEnd'
-            ,  'msTransition'     : 'MSTransitionEnd'
-            ,  'transition'       : 'transitionend'
-            }
-          , name
-
-        for (name in transEndEventNames){
-          if (el.style[name] !== undefined) {
-            return transEndEventNames[name]
-          }
-        }
-
-      }())
-
-      return transitionEnd && {
-        end: transitionEnd
-      }
-
-    })()
-
-  })
-
-}(window.jQuery)
-/* ==========================================================
- * bootstrap-alert.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#alerts
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* ALERT CLASS DEFINITION
-  * ====================== */
-
-  var dismiss = '[data-dismiss="alert"]'
-    , Alert = function (el) {
-        $(el).on('click', dismiss, this.close)
-      }
-
-  Alert.prototype.close = function (e) {
-    var $this = $(this)
-      , selector = $this.attr('data-target')
-      , $parent
-
-    if (!selector) {
-      selector = $this.attr('href')
-      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-    }
-
-    $parent = $(selector)
-
-    e && e.preventDefault()
-
-    $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
-
-    $parent.trigger(e = $.Event('close'))
-
-    if (e.isDefaultPrevented()) return
-
-    $parent.removeClass('in')
-
-    function removeElement() {
-      $parent
-        .trigger('closed')
-        .remove()
-    }
-
-    $.support.transition && $parent.hasClass('fade') ?
-      $parent.on($.support.transition.end, removeElement) :
-      removeElement()
-  }
-
-
- /* ALERT PLUGIN DEFINITION
-  * ======================= */
-
-  $.fn.alert = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('alert')
-      if (!data) $this.data('alert', (data = new Alert(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.alert.Constructor = Alert
-
-
- /* ALERT DATA-API
-  * ============== */
-
-  $(function () {
-    $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
-  })
-
-}(window.jQuery);/* ============================================================
- * bootstrap-button.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#buttons
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* BUTTON PUBLIC CLASS DEFINITION
-  * ============================== */
-
-  var Button = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.button.defaults, options)
-  }
-
-  Button.prototype.setState = function (state) {
-    var d = 'disabled'
-      , $el = this.$element
-      , data = $el.data()
-      , val = $el.is('input') ? 'val' : 'html'
-
-    state = state + 'Text'
-    data.resetText || $el.data('resetText', $el[val]())
-
-    $el[val](data[state] || this.options[state])
-
-    // push to event loop to allow forms to submit
-    setTimeout(function () {
-      state == 'loadingText' ?
-        $el.addClass(d).attr(d, d) :
-        $el.removeClass(d).removeAttr(d)
-    }, 0)
-  }
-
-  Button.prototype.toggle = function () {
-    var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
-
-    $parent && $parent
-      .find('.active')
-      .removeClass('active')
-
-    this.$element.toggleClass('active')
-  }
-
-
- /* BUTTON PLUGIN DEFINITION
-  * ======================== */
-
-  $.fn.button = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('button')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('button', (data = new Button(this, options)))
-      if (option == 'toggle') data.toggle()
-      else if (option) data.setState(option)
-    })
-  }
-
-  $.fn.button.defaults = {
-    loadingText: 'loading...'
-  }
-
-  $.fn.button.Constructor = Button
-
-
- /* BUTTON DATA-API
-  * =============== */
-
-  $(function () {
-    $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
-      var $btn = $(e.target)
-      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
-      $btn.button('toggle')
-    })
-  })
-
-}(window.jQuery);/* ==========================================================
- * bootstrap-carousel.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#carousel
- * ==========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* CAROUSEL CLASS DEFINITION
-  * ========================= */
-
-  var Carousel = function (element, options) {
-    this.$element = $(element)
-    this.options = options
-    this.options.slide && this.slide(this.options.slide)
-    this.options.pause == 'hover' && this.$element
-      .on('mouseenter', $.proxy(this.pause, this))
-      .on('mouseleave', $.proxy(this.cycle, this))
-  }
-
-  Carousel.prototype = {
-
-    cycle: function (e) {
-      if (!e) this.paused = false
-      this.options.interval
-        && !this.paused
-        && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
-      return this
-    }
-
-  , to: function (pos) {
-      var $active = this.$element.find('.active')
-        , children = $active.parent().children()
-        , activePos = children.index($active)
-        , that = this
-
-      if (pos > (children.length - 1) || pos < 0) return
-
-      if (this.sliding) {
-        return this.$element.one('slid', function () {
-          that.to(pos)
-        })
-      }
-
-      if (activePos == pos) {
-        return this.pause().cycle()
-      }
-
-      return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
-    }
-
-  , pause: function (e) {
-      if (!e) this.paused = true
-      clearInterval(this.interval)
-      this.interval = null
-      return this
-    }
-
-  , next: function () {
-      if (this.sliding) return
-      return this.slide('next')
-    }
-
-  , prev: function () {
-      if (this.sliding) return
-      return this.slide('prev')
-    }
-
-  , slide: function (type, next) {
-      var $active = this.$element.find('.active')
-        , $next = next || $active[type]()
-        , isCycling = this.interval
-        , direction = type == 'next' ? 'left' : 'right'
-        , fallback  = type == 'next' ? 'first' : 'last'
-        , that = this
-        , e = $.Event('slide')
-
-      this.sliding = true
-
-      isCycling && this.pause()
-
-      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
-
-      if ($next.hasClass('active')) return
-
-      if ($.support.transition && this.$element.hasClass('slide')) {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $next.addClass(type)
-        $next[0].offsetWidth // force reflow
-        $active.addClass(direction)
-        $next.addClass(direction)
-        this.$element.one($.support.transition.end, function () {
-          $next.removeClass([type, direction].join(' ')).addClass('active')
-          $active.removeClass(['active', direction].join(' '))
-          that.sliding = false
-          setTimeout(function () { that.$element.trigger('slid') }, 0)
-        })
-      } else {
-        this.$element.trigger(e)
-        if (e.isDefaultPrevented()) return
-        $active.removeClass('active')
-        $next.addClass('active')
-        this.sliding = false
-        this.$element.trigger('slid')
-      }
-
-      isCycling && this.cycle()
-
-      return this
-    }
-
-  }
-
-
- /* CAROUSEL PLUGIN DEFINITION
-  * ========================== */
-
-  $.fn.carousel = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('carousel')
-        , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
-      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
-      if (typeof option == 'number') data.to(option)
-      else if (typeof option == 'string' || (option = options.slide)) data[option]()
-      else if (options.interval) data.cycle()
-    })
-  }
-
-  $.fn.carousel.defaults = {
-    interval: 5000
-  , pause: 'hover'
-  }
-
-  $.fn.carousel.Constructor = Carousel
-
-
- /* CAROUSEL DATA-API
-  * ================= */
-
-  $(function () {
-    $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
-      var $this = $(this), href
-        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-        , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
-      $target.carousel(options)
-      e.preventDefault()
-    })
-  })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-collapse.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#collapse
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* COLLAPSE PUBLIC CLASS DEFINITION
-  * ================================ */
-
-  var Collapse = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.collapse.defaults, options)
-
-    if (this.options.parent) {
-      this.$parent = $(this.options.parent)
-    }
-
-    this.options.toggle && this.toggle()
-  }
-
-  Collapse.prototype = {
-
-    constructor: Collapse
-
-  , dimension: function () {
-      var hasWidth = this.$element.hasClass('width')
-      return hasWidth ? 'width' : 'height'
-    }
-
-  , show: function () {
-      var dimension
-        , scroll
-        , actives
-        , hasData
-
-      if (this.transitioning) return
-
-      dimension = this.dimension()
-      scroll = $.camelCase(['scroll', dimension].join('-'))
-      actives = this.$parent && this.$parent.find('> .accordion-group > .in')
-
-      if (actives && actives.length) {
-        hasData = actives.data('collapse')
-        if (hasData && hasData.transitioning) return
-        actives.collapse('hide')
-        hasData || actives.data('collapse', null)
-      }
-
-      this.$element[dimension](0)
-      this.transition('addClass', $.Event('show'), 'shown')
-      this.$element[dimension](this.$element[0][scroll])
-    }
-
-  , hide: function () {
-      var dimension
-      if (this.transitioning) return
-      dimension = this.dimension()
-      this.reset(this.$element[dimension]())
-      this.transition('removeClass', $.Event('hide'), 'hidden')
-      this.$element[dimension](0)
-    }
-
-  , reset: function (size) {
-      var dimension = this.dimension()
-
-      this.$element
-        .removeClass('collapse')
-        [dimension](size || 'auto')
-        [0].offsetWidth
-
-      this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
-
-      return this
-    }
-
-  , transition: function (method, startEvent, completeEvent) {
-      var that = this
-        , complete = function () {
-            if (startEvent.type == 'show') that.reset()
-            that.transitioning = 0
-            that.$element.trigger(completeEvent)
-          }
-
-      this.$element.trigger(startEvent)
-
-      if (startEvent.isDefaultPrevented()) return
-
-      this.transitioning = 1
-
-      this.$element[method]('in')
-
-      $.support.transition && this.$element.hasClass('collapse') ?
-        this.$element.one($.support.transition.end, complete) :
-        complete()
-    }
-
-  , toggle: function () {
-      this[this.$element.hasClass('in') ? 'hide' : 'show']()
-    }
-
-  }
-
-
- /* COLLAPSIBLE PLUGIN DEFINITION
-  * ============================== */
-
-  $.fn.collapse = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('collapse')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.collapse.defaults = {
-    toggle: true
-  }
-
-  $.fn.collapse.Constructor = Collapse
-
-
- /* COLLAPSIBLE DATA-API
-  * ==================== */
-
-  $(function () {
-    $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
-      var $this = $(this), href
-        , target = $this.attr('data-target')
-          || e.preventDefault()
-          || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
-        , option = $(target).data('collapse') ? 'toggle' : $this.data()
-      $(target).collapse(option)
-    })
-  })
-
-}(window.jQuery);/* ============================================================
- * bootstrap-dropdown.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#dropdowns
- * ============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* DROPDOWN CLASS DEFINITION
-  * ========================= */
-
-  var toggle = '[data-toggle="dropdown"]'
-    , Dropdown = function (element) {
-        var $el = $(element).on('click.dropdown.data-api', this.toggle)
-        $('html').on('click.dropdown.data-api', function () {
-          $el.parent().removeClass('open')
-        })
-      }
-
-  Dropdown.prototype = {
-
-    constructor: Dropdown
-
-  , toggle: function (e) {
-      var $this = $(this)
-        , $parent
-        , selector
-        , isActive
-
-      if ($this.is('.disabled, :disabled')) return
-
-      selector = $this.attr('data-target')
-
-      if (!selector) {
-        selector = $this.attr('href')
-        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-      }
-
-      $parent = $(selector)
-      $parent.length || ($parent = $this.parent())
-
-      isActive = $parent.hasClass('open')
-
-      clearMenus()
-
-      if (!isActive) $parent.toggleClass('open')
-
-      return false
-    }
-
-  }
-
-  function clearMenus() {
-    $(toggle).parent().removeClass('open')
-  }
-
-
-  /* DROPDOWN PLUGIN DEFINITION
-   * ========================== */
-
-  $.fn.dropdown = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('dropdown')
-      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
-      if (typeof option == 'string') data[option].call($this)
-    })
-  }
-
-  $.fn.dropdown.Constructor = Dropdown
-
-
-  /* APPLY TO STANDARD DROPDOWN ELEMENTS
-   * =================================== */
-
-  $(function () {
-    $('html').on('click.dropdown.data-api', clearMenus)
-    $('body')
-      .on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() })
-      .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
-  })
-
-}(window.jQuery);/* =========================================================
- * bootstrap-modal.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#modals
- * =========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* MODAL CLASS DEFINITION
-  * ====================== */
-
-  var Modal = function (content, options) {
-    this.options = options
-    this.$element = $(content)
-      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
-  }
-
-  Modal.prototype = {
-
-      constructor: Modal
-
-    , toggle: function () {
-        return this[!this.isShown ? 'show' : 'hide']()
-      }
-
-    , show: function () {
-        var that = this
-          , e = $.Event('show')
-
-        this.$element.trigger(e)
-
-        if (this.isShown || e.isDefaultPrevented()) return
-
-        $('body').addClass('modal-open')
-
-        this.isShown = true
-
-        escape.call(this)
-        backdrop.call(this, function () {
-          var transition = $.support.transition && that.$element.hasClass('fade')
-
-          if (!that.$element.parent().length) {
-            that.$element.appendTo(document.body) //don't move modals dom position
-          }
-
-          that.$element
-            .show()
-
-          if (transition) {
-            that.$element[0].offsetWidth // force reflow
-          }
-
-          that.$element.addClass('in')
-
-          transition ?
-            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
-            that.$element.trigger('shown')
-
-        })
-      }
-
-    , hide: function (e) {
-        e && e.preventDefault()
-
-        var that = this
-
-        e = $.Event('hide')
-
-        this.$element.trigger(e)
-
-        if (!this.isShown || e.isDefaultPrevented()) return
-
-        this.isShown = false
-
-        $('body').removeClass('modal-open')
-
-        escape.call(this)
-
-        this.$element.removeClass('in')
-
-        $.support.transition && this.$element.hasClass('fade') ?
-          hideWithTransition.call(this) :
-          hideModal.call(this)
-      }
-
-  }
-
-
- /* MODAL PRIVATE METHODS
-  * ===================== */
-
-  function hideWithTransition() {
-    var that = this
-      , timeout = setTimeout(function () {
-          that.$element.off($.support.transition.end)
-          hideModal.call(that)
-        }, 500)
-
-    this.$element.one($.support.transition.end, function () {
-      clearTimeout(timeout)
-      hideModal.call(that)
-    })
-  }
-
-  function hideModal(that) {
-    this.$element
-      .hide()
-      .trigger('hidden')
-
-    backdrop.call(this)
-  }
-
-  function backdrop(callback) {
-    var that = this
-      , animate = this.$element.hasClass('fade') ? 'fade' : ''
-
-    if (this.isShown && this.options.backdrop) {
-      var doAnimate = $.support.transition && animate
-
-      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
-        .appendTo(document.body)
-
-      if (this.options.backdrop != 'static') {
-        this.$backdrop.click($.proxy(this.hide, this))
-      }
-
-      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
-
-      this.$backdrop.addClass('in')
-
-      doAnimate ?
-        this.$backdrop.one($.support.transition.end, callback) :
-        callback()
-
-    } else if (!this.isShown && this.$backdrop) {
-      this.$backdrop.removeClass('in')
-
-      $.support.transition && this.$element.hasClass('fade')?
-        this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
-        removeBackdrop.call(this)
-
-    } else if (callback) {
-      callback()
-    }
-  }
-
-  function removeBackdrop() {
-    this.$backdrop.remove()
-    this.$backdrop = null
-  }
-
-  function escape() {
-    var that = this
-    if (this.isShown && this.options.keyboard) {
-      $(document).on('keyup.dismiss.modal', function ( e ) {
-        e.which == 27 && that.hide()
-      })
-    } else if (!this.isShown) {
-      $(document).off('keyup.dismiss.modal')
-    }
-  }
-
-
- /* MODAL PLUGIN DEFINITION
-  * ======================= */
-
-  $.fn.modal = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('modal')
-        , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
-      if (!data) $this.data('modal', (data = new Modal(this, options)))
-      if (typeof option == 'string') data[option]()
-      else if (options.show) data.show()
-    })
-  }
-
-  $.fn.modal.defaults = {
-      backdrop: true
-    , keyboard: true
-    , show: true
-  }
-
-  $.fn.modal.Constructor = Modal
-
-
- /* MODAL DATA-API
-  * ============== */
-
-  $(function () {
-    $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
-      var $this = $(this), href
-        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-        , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
-
-      e.preventDefault()
-      $target.modal(option)
-    })
-  })
-
-}(window.jQuery);/* ===========================================================
- * bootstrap-tooltip.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#tooltips
- * Inspired by the original jQuery.tipsy by Jason Frame
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* TOOLTIP PUBLIC CLASS DEFINITION
-  * =============================== */
-
-  var Tooltip = function (element, options) {
-    this.init('tooltip', element, options)
-  }
-
-  Tooltip.prototype = {
-
-    constructor: Tooltip
-
-  , init: function (type, element, options) {
-      var eventIn
-        , eventOut
-
-      this.type = type
-      this.$element = $(element)
-      this.options = this.getOptions(options)
-      this.enabled = true
-
-      if (this.options.trigger != 'manual') {
-        eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
-        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
-        this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
-        this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
-      }
-
-      this.options.selector ?
-        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
-        this.fixTitle()
-    }
-
-  , getOptions: function (options) {
-      options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
-
-      if (options.delay && typeof options.delay == 'number') {
-        options.delay = {
-          show: options.delay
-        , hide: options.delay
-        }
-      }
-
-      return options
-    }
-
-  , enter: function (e) {
-      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
-      if (!self.options.delay || !self.options.delay.show) return self.show()
-
-      clearTimeout(this.timeout)
-      self.hoverState = 'in'
-      this.timeout = setTimeout(function() {
-        if (self.hoverState == 'in') self.show()
-      }, self.options.delay.show)
-    }
-
-  , leave: function (e) {
-      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
-
-      if (this.timeout) clearTimeout(this.timeout)
-      if (!self.options.delay || !self.options.delay.hide) return self.hide()
-
-      self.hoverState = 'out'
-      this.timeout = setTimeout(function() {
-        if (self.hoverState == 'out') self.hide()
-      }, self.options.delay.hide)
-    }
-
-  , show: function () {
-      var $tip
-        , inside
-        , pos
-        , actualWidth
-        , actualHeight
-        , placement
-        , tp
-
-      if (this.hasContent() && this.enabled) {
-        $tip = this.tip()
-        this.setContent()
-
-        if (this.options.animation) {
-          $tip.addClass('fade')
-        }
-
-        placement = typeof this.options.placement == 'function' ?
-          this.options.placement.call(this, $tip[0], this.$element[0]) :
-          this.options.placement
-
-        inside = /in/.test(placement)
-
-        $tip
-          .remove()
-          .css({ top: 0, left: 0, display: 'block' })
-          .appendTo(inside ? this.$element : document.body)
-
-        pos = this.getPosition(inside)
-
-        actualWidth = $tip[0].offsetWidth
-        actualHeight = $tip[0].offsetHeight
-
-        switch (inside ? placement.split(' ')[1] : placement) {
-          case 'bottom':
-            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
-            break
-          case 'top':
-            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
-            break
-          case 'left':
-            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
-            break
-          case 'right':
-            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
-            break
-        }
-
-        $tip
-          .css(tp)
-          .addClass(placement)
-          .addClass('in')
-      }
-    }
-
-  , isHTML: function(text) {
-      // html string detection logic adapted from jQuery
-      return typeof text != 'string'
-        || ( text.charAt(0) === "<"
-          && text.charAt( text.length - 1 ) === ">"
-          && text.length >= 3
-        ) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text)
-    }
-
-  , setContent: function () {
-      var $tip = this.tip()
-        , title = this.getTitle()
-
-      $tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title)
-      $tip.removeClass('fade in top bottom left right')
-    }
-
-  , hide: function () {
-      var that = this
-        , $tip = this.tip()
-
-      $tip.removeClass('in')
-
-      function removeWithAnimation() {
-        var timeout = setTimeout(function () {
-          $tip.off($.support.transition.end).remove()
-        }, 500)
-
-        $tip.one($.support.transition.end, function () {
-          clearTimeout(timeout)
-          $tip.remove()
-        })
-      }
-
-      $.support.transition && this.$tip.hasClass('fade') ?
-        removeWithAnimation() :
-        $tip.remove()
-    }
-
-  , fixTitle: function () {
-      var $e = this.$element
-      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
-        $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
-      }
-    }
-
-  , hasContent: function () {
-      return this.getTitle()
-    }
-
-  , getPosition: function (inside) {
-      return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
-        width: this.$element[0].offsetWidth
-      , height: this.$element[0].offsetHeight
-      })
-    }
-
-  , getTitle: function () {
-      var title
-        , $e = this.$element
-        , o = this.options
-
-      title = $e.attr('data-original-title')
-        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
-
-      return title
-    }
-
-  , tip: function () {
-      return this.$tip = this.$tip || $(this.options.template)
-    }
-
-  , validate: function () {
-      if (!this.$element[0].parentNode) {
-        this.hide()
-        this.$element = null
-        this.options = null
-      }
-    }
-
-  , enable: function () {
-      this.enabled = true
-    }
-
-  , disable: function () {
-      this.enabled = false
-    }
-
-  , toggleEnabled: function () {
-      this.enabled = !this.enabled
-    }
-
-  , toggle: function () {
-      this[this.tip().hasClass('in') ? 'hide' : 'show']()
-    }
-
-  }
-
-
- /* TOOLTIP PLUGIN DEFINITION
-  * ========================= */
-
-  $.fn.tooltip = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('tooltip')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tooltip.Constructor = Tooltip
-
-  $.fn.tooltip.defaults = {
-    animation: true
-  , placement: 'top'
-  , selector: false
-  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
-  , trigger: 'hover'
-  , title: ''
-  , delay: 0
-  }
-
-}(window.jQuery);
-/* ===========================================================
- * bootstrap-popover.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#popovers
- * ===========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * =========================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* POPOVER PUBLIC CLASS DEFINITION
-  * =============================== */
-
-  var Popover = function ( element, options ) {
-    this.init('popover', element, options)
-  }
-
-
-  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
-     ========================================== */
-
-  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
-
-    constructor: Popover
-
-  , setContent: function () {
-      var $tip = this.tip()
-        , title = this.getTitle()
-        , content = this.getContent()
-
-      $tip.find('.popover-title')[this.isHTML(title) ? 'html' : 'text'](title)
-      $tip.find('.popover-content > *')[this.isHTML(content) ? 'html' : 'text'](content)
-
-      $tip.removeClass('fade top bottom left right in')
-    }
-
-  , hasContent: function () {
-      return this.getTitle() || this.getContent()
-    }
-
-  , getContent: function () {
-      var content
-        , $e = this.$element
-        , o = this.options
-
-      content = $e.attr('data-content')
-        || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
-
-      return content
-    }
-
-  , tip: function () {
-      if (!this.$tip) {
-        this.$tip = $(this.options.template)
-      }
-      return this.$tip
-    }
-
-  })
-
-
- /* POPOVER PLUGIN DEFINITION
-  * ======================= */
-
-  $.fn.popover = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('popover')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('popover', (data = new Popover(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.popover.Constructor = Popover
-
-  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
-    placement: 'right'
-  , content: ''
-  , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
-  })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-scrollspy.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#scrollspy
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
-  /* SCROLLSPY CLASS DEFINITION
-   * ========================== */
-
-  function ScrollSpy( element, options) {
-    var process = $.proxy(this.process, this)
-      , $element = $(element).is('body') ? $(window) : $(element)
-      , href
-    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
-    this.$scrollElement = $element.on('scroll.scroll.data-api', process)
-    this.selector = (this.options.target
-      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
-      || '') + ' .nav li > a'
-    this.$body = $('body')
-    this.refresh()
-    this.process()
-  }
-
-  ScrollSpy.prototype = {
-
-      constructor: ScrollSpy
-
-    , refresh: function () {
-        var self = this
-          , $targets
-
-        this.offsets = $([])
-        this.targets = $([])
-
-        $targets = this.$body
-          .find(this.selector)
-          .map(function () {
-            var $el = $(this)
-              , href = $el.data('target') || $el.attr('href')
-              , $href = /^#\w/.test(href) && $(href)
-            return ( $href
-              && href.length
-              && [[ $href.position().top, href ]] ) || null
-          })
-          .sort(function (a, b) { return a[0] - b[0] })
-          .each(function () {
-            self.offsets.push(this[0])
-            self.targets.push(this[1])
-          })
-      }
-
-    , process: function () {
-        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
-          , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
-          , maxScroll = scrollHeight - this.$scrollElement.height()
-          , offsets = this.offsets
-          , targets = this.targets
-          , activeTarget = this.activeTarget
-          , i
-
-        if (scrollTop >= maxScroll) {
-          return activeTarget != (i = targets.last()[0])
-            && this.activate ( i )
-        }
-
-        for (i = offsets.length; i--;) {
-          activeTarget != targets[i]
-            && scrollTop >= offsets[i]
-            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
-            && this.activate( targets[i] )
-        }
-      }
-
-    , activate: function (target) {
-        var active
-          , selector
-
-        this.activeTarget = target
-
-        $(this.selector)
-          .parent('.active')
-          .removeClass('active')
-
-        selector = this.selector
-          + '[data-target="' + target + '"],'
-          + this.selector + '[href="' + target + '"]'
-
-        active = $(selector)
-          .parent('li')
-          .addClass('active')
-
-        if (active.parent('.dropdown-menu'))  {
-          active = active.closest('li.dropdown').addClass('active')
-        }
-
-        active.trigger('activate')
-      }
-
-  }
-
-
- /* SCROLLSPY PLUGIN DEFINITION
-  * =========================== */
-
-  $.fn.scrollspy = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('scrollspy')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.scrollspy.Constructor = ScrollSpy
-
-  $.fn.scrollspy.defaults = {
-    offset: 10
-  }
-
-
- /* SCROLLSPY DATA-API
-  * ================== */
-
-  $(function () {
-    $('[data-spy="scroll"]').each(function () {
-      var $spy = $(this)
-      $spy.scrollspy($spy.data())
-    })
-  })
-
-}(window.jQuery);/* ========================================================
- * bootstrap-tab.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#tabs
- * ========================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ======================================================== */
-
-
-!function ($) {
-
-  "use strict"; // jshint ;_;
-
-
- /* TAB CLASS DEFINITION
-  * ==================== */
-
-  var Tab = function ( element ) {
-    this.element = $(element)
-  }
-
-  Tab.prototype = {
-
-    constructor: Tab
-
-  , show: function () {
-      var $this = this.element
-        , $ul = $this.closest('ul:not(.dropdown-menu)')
-        , selector = $this.attr('data-target')
-        , previous
-        , $target
-        , e
-
-      if (!selector) {
-        selector = $this.attr('href')
-        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
-      }
-
-      if ( $this.parent('li').hasClass('active') ) return
-
-      previous = $ul.find('.active a').last()[0]
-
-      e = $.Event('show', {
-        relatedTarget: previous
-      })
-
-      $this.trigger(e)
-
-      if (e.isDefaultPrevented()) return
-
-      $target = $(selector)
-
-      this.activate($this.parent('li'), $ul)
-      this.activate($target, $target.parent(), function () {
-        $this.trigger({
-          type: 'shown'
-        , relatedTarget: previous
-        })
-      })
-    }
-
-  , activate: function ( element, container, callback) {
-      var $active = container.find('> .active')
-        , transition = callback
-            && $.support.transition
-            && $active.hasClass('fade')
-
-      function next() {
-        $active
-          .removeClass('active')
-          .find('> .dropdown-menu > .active')
-          .removeClass('active')
-
-        element.addClass('active')
-
-        if (transition) {
-          element[0].offsetWidth // reflow for transition
-          element.addClass('in')
-        } else {
-          element.removeClass('fade')
-        }
-
-        if ( element.parent('.dropdown-menu') ) {
-          element.closest('li.dropdown').addClass('active')
-        }
-
-        callback && callback()
-      }
-
-      transition ?
-        $active.one($.support.transition.end, next) :
-        next()
-
-      $active.removeClass('in')
-    }
-  }
-
-
- /* TAB PLUGIN DEFINITION
-  * ===================== */
-
-  $.fn.tab = function ( option ) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('tab')
-      if (!data) $this.data('tab', (data = new Tab(this)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.tab.Constructor = Tab
-
-
- /* TAB DATA-API
-  * ============ */
-
-  $(function () {
-    $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
-      e.preventDefault()
-      $(this).tab('show')
-    })
-  })
-
-}(window.jQuery);/* =============================================================
- * bootstrap-typeahead.js v2.0.4
- * http://twitter.github.com/bootstrap/javascript.html#typeahead
- * =============================================================
- * Copyright 2012 Twitter, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============================================================ */
-
-
-!function($){
-
-  "use strict"; // jshint ;_;
-
-
- /* TYPEAHEAD PUBLIC CLASS DEFINITION
-  * ================================= */
-
-  var Typeahead = function (element, options) {
-    this.$element = $(element)
-    this.options = $.extend({}, $.fn.typeahead.defaults, options)
-    this.matcher = this.options.matcher || this.matcher
-    this.sorter = this.options.sorter || this.sorter
-    this.highlighter = this.options.highlighter || this.highlighter
-    this.updater = this.options.updater || this.updater
-    this.$menu = $(this.options.menu).appendTo('body')
-    this.source = this.options.source
-    this.shown = false
-    this.listen()
-  }
-
-  Typeahead.prototype = {
-
-    constructor: Typeahead
-
-  , select: function () {
-      var val = this.$menu.find('.active').attr('data-value')
-      this.$element
-        .val(this.updater(val))
-        .change()
-      return this.hide()
-    }
-
-  , updater: function (item) {
-      return item
-    }
-
-  , show: function () {
-      var pos = $.extend({}, this.$element.offset(), {
-        height: this.$element[0].offsetHeight
-      })
-
-      this.$menu.css({
-        top: pos.top + pos.height
-      , left: pos.left
-      })
-
-      this.$menu.show()
-      this.shown = true
-      return this
-    }
-
-  , hide: function () {
-      this.$menu.hide()
-      this.shown = false
-      return this
-    }
-
-  , lookup: function (event) {
-      var that = this
-        , items
-        , q
-
-      this.query = this.$element.val()
-
-      if (!this.query) {
-        return this.shown ? this.hide() : this
-      }
-
-      items = $.grep(this.source, function (item) {
-        return that.matcher(item)
-      })
-
-      items = this.sorter(items)
-
-      if (!items.length) {
-        return this.shown ? this.hide() : this
-      }
-
-      return this.render(items.slice(0, this.options.items)).show()
-    }
-
-  , matcher: function (item) {
-      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
-    }
-
-  , sorter: function (items) {
-      var beginswith = []
-        , caseSensitive = []
-        , caseInsensitive = []
-        , item
-
-      while (item = items.shift()) {
-        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
-        else if (~item.indexOf(this.query)) caseSensitive.push(item)
-        else caseInsensitive.push(item)
-      }
-
-      return beginswith.concat(caseSensitive, caseInsensitive)
-    }
-
-  , highlighter: function (item) {
-      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
-      return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
-        return '<strong>' + match + '</strong>'
-      })
-    }
-
-  , render: function (items) {
-      var that = this
-
-      items = $(items).map(function (i, item) {
-        i = $(that.options.item).attr('data-value', item)
-        i.find('a').html(that.highlighter(item))
-        return i[0]
-      })
-
-      items.first().addClass('active')
-      this.$menu.html(items)
-      return this
-    }
-
-  , next: function (event) {
-      var active = this.$menu.find('.active').removeClass('active')
-        , next = active.next()
-
-      if (!next.length) {
-        next = $(this.$menu.find('li')[0])
-      }
-
-      next.addClass('active')
-    }
-
-  , prev: function (event) {
-      var active = this.$menu.find('.active').removeClass('active')
-        , prev = active.prev()
-
-      if (!prev.length) {
-        prev = this.$menu.find('li').last()
-      }
-
-      prev.addClass('active')
-    }
-
-  , listen: function () {
-      this.$element
-        .on('blur',     $.proxy(this.blur, this))
-        .on('keypress', $.proxy(this.keypress, this))
-        .on('keyup',    $.proxy(this.keyup, this))
-
-      if ($.browser.webkit || $.browser.msie) {
-        this.$element.on('keydown', $.proxy(this.keypress, this))
-      }
-
-      this.$menu
-        .on('click', $.proxy(this.click, this))
-        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
-    }
-
-  , keyup: function (e) {
-      switch(e.keyCode) {
-        case 40: // down arrow
-        case 38: // up arrow
-          break
-
-        case 9: // tab
-        case 13: // enter
-          if (!this.shown) return
-          this.select()
-          break
-
-        case 27: // escape
-          if (!this.shown) return
-          this.hide()
-          break
-
-        default:
-          this.lookup()
-      }
-
-      e.stopPropagation()
-      e.preventDefault()
-  }
-
-  , keypress: function (e) {
-      if (!this.shown) return
-
-      switch(e.keyCode) {
-        case 9: // tab
-        case 13: // enter
-        case 27: // escape
-          e.preventDefault()
-          break
-
-        case 38: // up arrow
-          if (e.type != 'keydown') break
-          e.preventDefault()
-          this.prev()
-          break
-
-        case 40: // down arrow
-          if (e.type != 'keydown') break
-          e.preventDefault()
-          this.next()
-          break
-      }
-
-      e.stopPropagation()
-    }
-
-  , blur: function (e) {
-      var that = this
-      setTimeout(function () { that.hide() }, 150)
-    }
-
-  , click: function (e) {
-      e.stopPropagation()
-      e.preventDefault()
-      this.select()
-    }
-
-  , mouseenter: function (e) {
-      this.$menu.find('.active').removeClass('active')
-      $(e.currentTarget).addClass('active')
-    }
-
-  }
-
-
-  /* TYPEAHEAD PLUGIN DEFINITION
-   * =========================== */
-
-  $.fn.typeahead = function (option) {
-    return this.each(function () {
-      var $this = $(this)
-        , data = $this.data('typeahead')
-        , options = typeof option == 'object' && option
-      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
-      if (typeof option == 'string') data[option]()
-    })
-  }
-
-  $.fn.typeahead.defaults = {
-    source: []
-  , items: 8
-  , menu: '<ul class="typeahead dropdown-menu"></ul>'
-  , item: '<li><a href="#"></a></li>'
-  }
-
-  $.fn.typeahead.Constructor = Typeahead
-
-
- /* TYPEAHEAD DATA-API
-  * ================== */
-
-  $(function () {
-    $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
-      var $this = $(this)
-      if ($this.data('typeahead')) return
-      e.preventDefault()
-      $this.typeahead($this.data())
-    })
-  })
-
-}(window.jQuery);
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jquery-1.7.1.js b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jquery-1.7.1.js
deleted file mode 100644
index 8ccd0ea..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jquery-1.7.1.js
+++ /dev/null
@@ -1,9266 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Nov 21 21:11:03 2011 -0500
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-	navigator = window.navigator,
-	location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context, rootjQuery );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// A simple way to check for HTML strings or ID strings
-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-	quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	trimLeft = /^\s+/,
-	trimRight = /\s+$/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// JSON RegExp
-	rvalidchars = /^[\],:{}\s]*$/,
-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-	// Useragent RegExp
-	rwebkit = /(webkit)[ \/]([\w.]+)/,
-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-	rmsie = /(msie) ([\w.]+)/,
-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-	// Matches dashed string for camelizing
-	rdashAlpha = /-([a-z]|[0-9])/ig,
-	rmsPrefix = /^-ms-/,
-
-	// Used by jQuery.camelCase as callback to replace()
-	fcamelCase = function( all, letter ) {
-		return ( letter + "" ).toUpperCase();
-	},
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	trim = String.prototype.trim,
-	indexOf = Array.prototype.indexOf,
-
-	// [[Class]] -> type pairs
-	class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		var match, elem, ret, doc;
-
-		// Handle $(""), $(null), or $(undefined)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle $(DOMElement)
-		if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = quickExpr.exec( selector );
-			}
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					doc = ( context ? context.ownerDocument || context : document );
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
-
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
-
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
-
-					} else {
-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
-					}
-
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return ( context || rootjQuery ).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if ( selector.selector !== undefined ) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The current version of jQuery being used
-	jquery: "1.7.1",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	// The number of elements contained in the matched element set
-	size: function() {
-		return this.length;
-	},
-
-	toArray: function() {
-		return slice.call( this, 0 );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this[ this.length + num ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems, name, selector ) {
-		// Build a new jQuery matched element set
-		var ret = this.constructor();
-
-		if ( jQuery.isArray( elems ) ) {
-			push.apply( ret, elems );
-
-		} else {
-			jQuery.merge( ret, elems );
-		}
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		ret.context = this.context;
-
-		if ( name === "find" ) {
-			ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
-		} else if ( name ) {
-			ret.selector = this.selector + "." + name + "(" + selector + ")";
-		}
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-
-	ready: function( fn ) {
-		// Attach the listeners
-		jQuery.bindReady();
-
-		// Add the callback
-		readyList.add( fn );
-
-		return this;
-	},
-
-	eq: function( i ) {
-		i = +i;
-		return i === -1 ?
-			this.slice( i ) :
-			this.slice( i, i + 1 );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ),
-			"slice", slice.call(arguments).join(",") );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function( deep ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-		// Either a released hold or an DOMready/load event and not yet ready
-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 1 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If a normal DOM Ready event fired, decrement, and wait if need be
-			if ( wait !== true && --jQuery.readyWait > 0 ) {
-				return;
-			}
-
-			// If there are functions bound, to execute
-			readyList.fireWith( document, [ jQuery ] );
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.trigger ) {
-				jQuery( document ).trigger( "ready" ).off( "ready" );
-			}
-		}
-	},
-
-	bindReady: function() {
-		if ( readyList ) {
-			return;
-		}
-
-		readyList = jQuery.Callbacks( "once memory" );
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			return setTimeout( jQuery.ready, 1 );
-		}
-
-		// Mozilla, Opera and webkit nightlies currently support this event
-		if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", jQuery.ready, false );
-
-		// If IE event model is used
-		} else if ( document.attachEvent ) {
-			// ensure firing before onload,
-			// maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", jQuery.ready );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var toplevel = false;
-
-			try {
-				toplevel = window.frameElement == null;
-			} catch(e) {}
-
-			if ( document.documentElement.doScroll && toplevel ) {
-				doScrollCheck();
-			}
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	// A crude way of determining if an object is a window
-	isWindow: function( obj ) {
-		return obj && typeof obj === "object" && "setInterval" in obj;
-	},
-
-	isNumeric: function( obj ) {
-		return !isNaN( parseFloat(obj) ) && isFinite( obj );
-	},
-
-	type: function( obj ) {
-		return obj == null ?
-			String( obj ) :
-			class2type[ toString.call(obj) ] || "object";
-	},
-
-	isPlainObject: function( obj ) {
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		try {
-			// Not own constructor property must be Object
-			if ( obj.constructor &&
-				!hasOwn.call(obj, "constructor") &&
-				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-				return false;
-			}
-		} catch ( e ) {
-			// IE8,9 Will throw exceptions on certain host objects #9897
-			return false;
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-
-		var key;
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	isEmptyObject: function( obj ) {
-		for ( var name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	parseJSON: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-
-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
-		data = jQuery.trim( data );
-
-		// Attempt to parse using the native JSON parser first
-		if ( window.JSON && window.JSON.parse ) {
-			return window.JSON.parse( data );
-		}
-
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-			.replace( rvalidtokens, "]" )
-			.replace( rvalidbraces, "")) ) {
-
-			return ( new Function( "return " + data ) )();
-
-		}
-		jQuery.error( "Invalid JSON: " + data );
-	},
-
-	// Cross-browser xml parsing
-	parseXML: function( data ) {
-		var xml, tmp;
-		try {
-			if ( window.DOMParser ) { // Standard
-				tmp = new DOMParser();
-				xml = tmp.parseFromString( data , "text/xml" );
-			} else { // IE
-				xml = new ActiveXObject( "Microsoft.XMLDOM" );
-				xml.async = "false";
-				xml.loadXML( data );
-			}
-		} catch( e ) {
-			xml = undefined;
-		}
-		if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && rnotwhite.test( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	// Convert dashed to camelCase; used by the css and data modules
-	// Microsoft forgot to hump their vendor prefix (#9572)
-	camelCase: function( string ) {
-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-	},
-
-	// args is for internal usage only
-	each: function( object, callback, args ) {
-		var name, i = 0,
-			length = object.length,
-			isObj = length === undefined || jQuery.isFunction( object );
-
-		if ( args ) {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.apply( object[ name ], args ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.apply( object[ i++ ], args ) === false ) {
-						break;
-					}
-				}
-			}
-
-		// A special, fast, case for the most common use of each
-		} else {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return object;
-	},
-
-	// Use native String.trim function wherever possible
-	trim: trim ?
-		function( text ) {
-			return text == null ?
-				"" :
-				trim.call( text );
-		} :
-
-		// Otherwise use our own trimming functionality
-		function( text ) {
-			return text == null ?
-				"" :
-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-		},
-
-	// results is for internal usage only
-	makeArray: function( array, results ) {
-		var ret = results || [];
-
-		if ( array != null ) {
-			// The window, strings (and functions) also have 'length'
-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-			var type = jQuery.type( array );
-
-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-				push.call( ret, array );
-			} else {
-				jQuery.merge( ret, array );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, array, i ) {
-		var len;
-
-		if ( array ) {
-			if ( indexOf ) {
-				return indexOf.call( array, elem, i );
-			}
-
-			len = array.length;
-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-			for ( ; i < len; i++ ) {
-				// Skip accessing in sparse arrays
-				if ( i in array && array[ i ] === elem ) {
-					return i;
-				}
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var i = first.length,
-			j = 0;
-
-		if ( typeof second.length === "number" ) {
-			for ( var l = second.length; j < l; j++ ) {
-				first[ i++ ] = second[ j ];
-			}
-
-		} else {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, inv ) {
-		var ret = [], retVal;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, length = elems.length; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value, key, ret = [],
-			i = 0,
-			length = elems.length,
-			// jquery objects are treated as arrays
-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( key in elems ) {
-				value = callback( elems[ key ], key, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return ret.concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		if ( typeof context === "string" ) {
-			var tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		var args = slice.call( arguments, 2 ),
-			proxy = function() {
-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
-			};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Mutifunctional method to get and set values to a collection
-	// The value/s can optionally be executed if it's a function
-	access: function( elems, key, value, exec, fn, pass ) {
-		var length = elems.length;
-
-		// Setting many attributes
-		if ( typeof key === "object" ) {
-			for ( var k in key ) {
-				jQuery.access( elems, k, key[k], exec, fn, value );
-			}
-			return elems;
-		}
-
-		// Setting one attribute
-		if ( value !== undefined ) {
-			// Optionally, function values get executed if exec is true
-			exec = !pass && exec && jQuery.isFunction(value);
-
-			for ( var i = 0; i < length; i++ ) {
-				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-			}
-
-			return elems;
-		}
-
-		// Getting an attribute
-		return length ? fn( elems[0], key ) : undefined;
-	},
-
-	now: function() {
-		return ( new Date() ).getTime();
-	},
-
-	// Use of jQuery.browser is frowned upon.
-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
-	uaMatch: function( ua ) {
-		ua = ua.toLowerCase();
-
-		var match = rwebkit.exec( ua ) ||
-			ropera.exec( ua ) ||
-			rmsie.exec( ua ) ||
-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-			[];
-
-		return { browser: match[1] || "", version: match[2] || "0" };
-	},
-
-	sub: function() {
-		function jQuerySub( selector, context ) {
-			return new jQuerySub.fn.init( selector, context );
-		}
-		jQuery.extend( true, jQuerySub, this );
-		jQuerySub.superclass = this;
-		jQuerySub.fn = jQuerySub.prototype = this();
-		jQuerySub.fn.constructor = jQuerySub;
-		jQuerySub.sub = this.sub;
-		jQuerySub.fn.init = function init( selector, context ) {
-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-				context = jQuerySub( context );
-			}
-
-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-		};
-		jQuerySub.fn.init.prototype = jQuerySub.fn;
-		var rootjQuerySub = jQuerySub(document);
-		return jQuerySub;
-	},
-
-	browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-	jQuery.browser[ browserMatch.browser ] = true;
-	jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-	jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-	trimLeft = /^[\s\xA0]+/;
-	trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-	DOMContentLoaded = function() {
-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-		jQuery.ready();
-	};
-
-} else if ( document.attachEvent ) {
-	DOMContentLoaded = function() {
-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-		if ( document.readyState === "complete" ) {
-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
-			jQuery.ready();
-		}
-	};
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-	if ( jQuery.isReady ) {
-		return;
-	}
-
-	try {
-		// If IE is used, use the trick by Diego Perini
-		// http://javascript.nwbox.com/IEContentLoaded/
-		document.documentElement.doScroll("left");
-	} catch(e) {
-		setTimeout( doScrollCheck, 1 );
-		return;
-	}
-
-	// and execute any waiting functions
-	jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
-	var object = flagsCache[ flags ] = {},
-		i, length;
-	flags = flags.split( /\s+/ );
-	for ( i = 0, length = flags.length; i < length; i++ ) {
-		object[ flags[i] ] = true;
-	}
-	return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *	flags:	an optional list of space-separated flags that will change how
- *			the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- *	once:			will ensure the callback list can only be fired once (like a Deferred)
- *
- *	memory:			will keep track of previous values and will call any callback added
- *					after the list has been fired right away with the latest "memorized"
- *					values (like a Deferred)
- *
- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
- *
- *	stopOnFalse:	interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
-	// Convert flags from String-formatted to Object-formatted
-	// (we check in cache first)
-	flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
-	var // Actual callback list
-		list = [],
-		// Stack of fire calls for repeatable lists
-		stack = [],
-		// Last fire value (for non-forgettable lists)
-		memory,
-		// Flag to know if list is currently firing
-		firing,
-		// First callback to fire (used internally by add and fireWith)
-		firingStart,
-		// End of the loop when firing
-		firingLength,
-		// Index of currently firing callback (modified by remove if needed)
-		firingIndex,
-		// Add one or several callbacks to the list
-		add = function( args ) {
-			var i,
-				length,
-				elem,
-				type,
-				actual;
-			for ( i = 0, length = args.length; i < length; i++ ) {
-				elem = args[ i ];
-				type = jQuery.type( elem );
-				if ( type === "array" ) {
-					// Inspect recursively
-					add( elem );
-				} else if ( type === "function" ) {
-					// Add if not in unique mode and callback is not in
-					if ( !flags.unique || !self.has( elem ) ) {
-						list.push( elem );
-					}
-				}
-			}
-		},
-		// Fire callbacks
-		fire = function( context, args ) {
-			args = args || [];
-			memory = !flags.memory || [ context, args ];
-			firing = true;
-			firingIndex = firingStart || 0;
-			firingStart = 0;
-			firingLength = list.length;
-			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-				if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
-					memory = true; // Mark as halted
-					break;
-				}
-			}
-			firing = false;
-			if ( list ) {
-				if ( !flags.once ) {
-					if ( stack && stack.length ) {
-						memory = stack.shift();
-						self.fireWith( memory[ 0 ], memory[ 1 ] );
-					}
-				} else if ( memory === true ) {
-					self.disable();
-				} else {
-					list = [];
-				}
-			}
-		},
-		// Actual Callbacks object
-		self = {
-			// Add a callback or a collection of callbacks to the list
-			add: function() {
-				if ( list ) {
-					var length = list.length;
-					add( arguments );
-					// Do we need to add the callbacks to the
-					// current firing batch?
-					if ( firing ) {
-						firingLength = list.length;
-					// With memory, if we're not firing then
-					// we should call right away, unless previous
-					// firing was halted (stopOnFalse)
-					} else if ( memory && memory !== true ) {
-						firingStart = length;
-						fire( memory[ 0 ], memory[ 1 ] );
-					}
-				}
-				return this;
-			},
-			// Remove a callback from the list
-			remove: function() {
-				if ( list ) {
-					var args = arguments,
-						argIndex = 0,
-						argLength = args.length;
-					for ( ; argIndex < argLength ; argIndex++ ) {
-						for ( var i = 0; i < list.length; i++ ) {
-							if ( args[ argIndex ] === list[ i ] ) {
-								// Handle firingIndex and firingLength
-								if ( firing ) {
-									if ( i <= firingLength ) {
-										firingLength--;
-										if ( i <= firingIndex ) {
-											firingIndex--;
-										}
-									}
-								}
-								// Remove the element
-								list.splice( i--, 1 );
-								// If we have some unicity property then
-								// we only need to do this once
-								if ( flags.unique ) {
-									break;
-								}
-							}
-						}
-					}
-				}
-				return this;
-			},
-			// Control if a given callback is in the list
-			has: function( fn ) {
-				if ( list ) {
-					var i = 0,
-						length = list.length;
-					for ( ; i < length; i++ ) {
-						if ( fn === list[ i ] ) {
-							return true;
-						}
-					}
-				}
-				return false;
-			},
-			// Remove all callbacks from the list
-			empty: function() {
-				list = [];
-				return this;
-			},
-			// Have the list do nothing anymore
-			disable: function() {
-				list = stack = memory = undefined;
-				return this;
-			},
-			// Is it disabled?
-			disabled: function() {
-				return !list;
-			},
-			// Lock the list in its current state
-			lock: function() {
-				stack = undefined;
-				if ( !memory || memory === true ) {
-					self.disable();
-				}
-				return this;
-			},
-			// Is it locked?
-			locked: function() {
-				return !stack;
-			},
-			// Call all callbacks with the given context and arguments
-			fireWith: function( context, args ) {
-				if ( stack ) {
-					if ( firing ) {
-						if ( !flags.once ) {
-							stack.push( [ context, args ] );
-						}
-					} else if ( !( flags.once && memory ) ) {
-						fire( context, args );
-					}
-				}
-				return this;
-			},
-			// Call all the callbacks with the given arguments
-			fire: function() {
-				self.fireWith( this, arguments );
-				return this;
-			},
-			// To know if the callbacks have already been called at least once
-			fired: function() {
-				return !!memory;
-			}
-		};
-
-	return self;
-};
-
-
-
-
-var // Static reference to slice
-	sliceDeferred = [].slice;
-
-jQuery.extend({
-
-	Deferred: function( func ) {
-		var doneList = jQuery.Callbacks( "once memory" ),
-			failList = jQuery.Callbacks( "once memory" ),
-			progressList = jQuery.Callbacks( "memory" ),
-			state = "pending",
-			lists = {
-				resolve: doneList,
-				reject: failList,
-				notify: progressList
-			},
-			promise = {
-				done: doneList.add,
-				fail: failList.add,
-				progress: progressList.add,
-
-				state: function() {
-					return state;
-				},
-
-				// Deprecated
-				isResolved: doneList.fired,
-				isRejected: failList.fired,
-
-				then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
-					deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
-					return this;
-				},
-				always: function() {
-					deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
-					return this;
-				},
-				pipe: function( fnDone, fnFail, fnProgress ) {
-					return jQuery.Deferred(function( newDefer ) {
-						jQuery.each( {
-							done: [ fnDone, "resolve" ],
-							fail: [ fnFail, "reject" ],
-							progress: [ fnProgress, "notify" ]
-						}, function( handler, data ) {
-							var fn = data[ 0 ],
-								action = data[ 1 ],
-								returned;
-							if ( jQuery.isFunction( fn ) ) {
-								deferred[ handler ](function() {
-									returned = fn.apply( this, arguments );
-									if ( returned && jQuery.isFunction( returned.promise ) ) {
-										returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
-									} else {
-										newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
-									}
-								});
-							} else {
-								deferred[ handler ]( newDefer[ action ] );
-							}
-						});
-					}).promise();
-				},
-				// Get a promise for this deferred
-				// If obj is provided, the promise aspect is added to the object
-				promise: function( obj ) {
-					if ( obj == null ) {
-						obj = promise;
-					} else {
-						for ( var key in promise ) {
-							obj[ key ] = promise[ key ];
-						}
-					}
-					return obj;
-				}
-			},
-			deferred = promise.promise({}),
-			key;
-
-		for ( key in lists ) {
-			deferred[ key ] = lists[ key ].fire;
-			deferred[ key + "With" ] = lists[ key ].fireWith;
-		}
-
-		// Handle state
-		deferred.done( function() {
-			state = "resolved";
-		}, failList.disable, progressList.lock ).fail( function() {
-			state = "rejected";
-		}, doneList.disable, progressList.lock );
-
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-
-		// All done!
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( firstParam ) {
-		var args = sliceDeferred.call( arguments, 0 ),
-			i = 0,
-			length = args.length,
-			pValues = new Array( length ),
-			count = length,
-			pCount = length,
-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-				firstParam :
-				jQuery.Deferred(),
-			promise = deferred.promise();
-		function resolveFunc( i ) {
-			return function( value ) {
-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				if ( !( --count ) ) {
-					deferred.resolveWith( deferred, args );
-				}
-			};
-		}
-		function progressFunc( i ) {
-			return function( value ) {
-				pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				deferred.notifyWith( promise, pValues );
-			};
-		}
-		if ( length > 1 ) {
-			for ( ; i < length; i++ ) {
-				if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
-					args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
-				} else {
-					--count;
-				}
-			}
-			if ( !count ) {
-				deferred.resolveWith( deferred, args );
-			}
-		} else if ( deferred !== firstParam ) {
-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-		}
-		return promise;
-	}
-});
-
-
-
-
-jQuery.support = (function() {
-
-	var support,
-		all,
-		a,
-		select,
-		opt,
-		input,
-		marginDiv,
-		fragment,
-		tds,
-		events,
-		eventName,
-		i,
-		isSupported,
-		div = document.createElement( "div" ),
-		documentElement = document.documentElement;
-
-	// Preliminary tests
-	div.setAttribute("className", "t");
-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-	all = div.getElementsByTagName( "*" );
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Can't get basic test support
-	if ( !all || !all.length || !a ) {
-		return {};
-	}
-
-	// First batch of supports tests
-	select = document.createElement( "select" );
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName( "input" )[ 0 ];
-
-	support = {
-		// IE strips leading whitespace when .innerHTML is used
-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-		// Make sure that tbody elements aren't automatically inserted
-		// IE will insert them into empty tables
-		tbody: !div.getElementsByTagName("tbody").length,
-
-		// Make sure that link elements get serialized correctly by innerHTML
-		// This requires a wrapper element in IE
-		htmlSerialize: !!div.getElementsByTagName("link").length,
-
-		// Get the style information from getAttribute
-		// (IE uses .cssText instead)
-		style: /top/.test( a.getAttribute("style") ),
-
-		// Make sure that URLs aren't manipulated
-		// (IE normalizes it by default)
-		hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
-		// Make sure that element opacity exists
-		// (IE uses filter instead)
-		// Use a regex to work around a WebKit issue. See #5145
-		opacity: /^0.55/.test( a.style.opacity ),
-
-		// Verify style float existence
-		// (IE uses styleFloat instead of cssFloat)
-		cssFloat: !!a.style.cssFloat,
-
-		// Make sure that if no value is specified for a checkbox
-		// that it defaults to "on".
-		// (WebKit defaults to "" instead)
-		checkOn: ( input.value === "on" ),
-
-		// Make sure that a selected-by-default option has a working selected property.
-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-		optSelected: opt.selected,
-
-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-		getSetAttribute: div.className !== "t",
-
-		// Tests for enctype support on a form(#6743)
-		enctype: !!document.createElement("form").enctype,
-
-		// Makes sure cloning an html5 element does not cause problems
-		// Where outerHTML is undefined, this still works
-		html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
-		// Will be defined later
-		submitBubbles: true,
-		changeBubbles: true,
-		focusinBubbles: false,
-		deleteExpando: true,
-		noCloneEvent: true,
-		inlineBlockNeedsLayout: false,
-		shrinkWrapBlocks: false,
-		reliableMarginRight: true
-	};
-
-	// Make sure checked status is properly cloned
-	input.checked = true;
-	support.noCloneChecked = input.cloneNode( true ).checked;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Test to see if it's possible to delete an expando from an element
-	// Fails in Internet Explorer
-	try {
-		delete div.test;
-	} catch( e ) {
-		support.deleteExpando = false;
-	}
-
-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-		div.attachEvent( "onclick", function() {
-			// Cloning a node shouldn't copy over any
-			// bound event handlers (IE does this)
-			support.noCloneEvent = false;
-		});
-		div.cloneNode( true ).fireEvent( "onclick" );
-	}
-
-	// Check if a radio maintains its value
-	// after being appended to the DOM
-	input = document.createElement("input");
-	input.value = "t";
-	input.setAttribute("type", "radio");
-	support.radioValue = input.value === "t";
-
-	input.setAttribute("checked", "checked");
-	div.appendChild( input );
-	fragment = document.createDocumentFragment();
-	fragment.appendChild( div.lastChild );
-
-	// WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	support.appendChecked = input.checked;
-
-	fragment.removeChild( input );
-	fragment.appendChild( div );
-
-	div.innerHTML = "";
-
-	// Check if div with explicit width and no margin-right incorrectly
-	// gets computed margin-right based on width of container. For more
-	// info see bug #3333
-	// Fails in WebKit before Feb 2011 nightlies
-	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-	if ( window.getComputedStyle ) {
-		marginDiv = document.createElement( "div" );
-		marginDiv.style.width = "0";
-		marginDiv.style.marginRight = "0";
-		div.style.width = "2px";
-		div.appendChild( marginDiv );
-		support.reliableMarginRight =
-			( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-	}
-
-	// Technique from Juriy Zaytsev
-	// http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-	// We only care about the case where non-standard event systems
-	// are used, namely in IE. Short-circuiting here helps us to
-	// avoid an eval call (in setAttribute) which can cause CSP
-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-	if ( div.attachEvent ) {
-		for( i in {
-			submit: 1,
-			change: 1,
-			focusin: 1
-		}) {
-			eventName = "on" + i;
-			isSupported = ( eventName in div );
-			if ( !isSupported ) {
-				div.setAttribute( eventName, "return;" );
-				isSupported = ( typeof div[ eventName ] === "function" );
-			}
-			support[ i + "Bubbles" ] = isSupported;
-		}
-	}
-
-	fragment.removeChild( div );
-
-	// Null elements to avoid leaks in IE
-	fragment = select = opt = marginDiv = div = input = null;
-
-	// Run tests that need a body at doc ready
-	jQuery(function() {
-		var container, outer, inner, table, td, offsetSupport,
-			conMarginTop, ptlm, vb, style, html,
-			body = document.getElementsByTagName("body")[0];
-
-		if ( !body ) {
-			// Return for frameset docs that don't have a body
-			return;
-		}
-
-		conMarginTop = 1;
-		ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
-		vb = "visibility:hidden;border:0;";
-		style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
-		html = "<div " + style + "><div></div></div>" +
-			"<table " + style + " cellpadding='0' cellspacing='0'>" +
-			"<tr><td></td></tr></table>";
-
-		container = document.createElement("div");
-		container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
-		body.insertBefore( container, body.firstChild );
-
-		// Construct the test element
-		div = document.createElement("div");
-		container.appendChild( div );
-
-		// Check if table cells still have offsetWidth/Height when they are set
-		// to display:none and there are still other visible table cells in a
-		// table row; if so, offsetWidth/Height are not reliable for use when
-		// determining if an element has been hidden directly using
-		// display:none (it is still safe to use offsets if a parent element is
-		// hidden; don safety goggles and see bug #4512 for more information).
-		// (only IE 8 fails this test)
-		div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
-		tds = div.getElementsByTagName( "td" );
-		isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-		tds[ 0 ].style.display = "";
-		tds[ 1 ].style.display = "none";
-
-		// Check if empty table cells still have offsetWidth/Height
-		// (IE <= 8 fail this test)
-		support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
-		// Figure out if the W3C box model works as expected
-		div.innerHTML = "";
-		div.style.width = div.style.paddingLeft = "1px";
-		jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
-
-		if ( typeof div.style.zoom !== "undefined" ) {
-			// Check if natively block-level elements act like inline-block
-			// elements when setting their display to 'inline' and giving
-			// them layout
-			// (IE < 8 does this)
-			div.style.display = "inline";
-			div.style.zoom = 1;
-			support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
-			// Check if elements with layout shrink-wrap their children
-			// (IE 6 does this)
-			div.style.display = "";
-			div.innerHTML = "<div style='width:4px;'></div>";
-			support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
-		}
-
-		div.style.cssText = ptlm + vb;
-		div.innerHTML = html;
-
-		outer = div.firstChild;
-		inner = outer.firstChild;
-		td = outer.nextSibling.firstChild.firstChild;
-
-		offsetSupport = {
-			doesNotAddBorder: ( inner.offsetTop !== 5 ),
-			doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
-		};
-
-		inner.style.position = "fixed";
-		inner.style.top = "20px";
-
-		// safari subtracts parent border width here which is 5px
-		offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
-		inner.style.position = inner.style.top = "";
-
-		outer.style.overflow = "hidden";
-		outer.style.position = "relative";
-
-		offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
-		offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
-		body.removeChild( container );
-		div  = container = null;
-
-		jQuery.extend( support, offsetSupport );
-	});
-
-	return support;
-})();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-	rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
-	cache: {},
-
-	// Please use with caution
-	uuid: 0,
-
-	// Unique for each copy of jQuery on the page
-	// Non-digits removed to match rinlinejQuery
-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-	// The following elements throw uncatchable exceptions if you
-	// attempt to add expando properties to them.
-	noData: {
-		"embed": true,
-		// Ban all objects except for Flash (which handle expandos)
-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-		"applet": true
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var privateCache, thisCache, ret,
-			internalKey = jQuery.expando,
-			getByName = typeof name === "string",
-
-			// We have to handle DOM nodes and JS objects differently because IE6-7
-			// can't GC object references properly across the DOM-JS boundary
-			isNode = elem.nodeType,
-
-			// Only DOM nodes need the global jQuery cache; JS object data is
-			// attached directly to the object so GC can occur automatically
-			cache = isNode ? jQuery.cache : elem,
-
-			// Only defining an ID for JS objects if its cache already exists allows
-			// the code to shortcut on the same path as a DOM node with no cache
-			id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
-			isEvents = name === "events";
-
-		// Avoid doing any more work than we need to when trying to get data on an
-		// object that has no data at all
-		if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
-			return;
-		}
-
-		if ( !id ) {
-			// Only DOM nodes need a new unique ID for each element since their data
-			// ends up in the global cache
-			if ( isNode ) {
-				elem[ internalKey ] = id = ++jQuery.uuid;
-			} else {
-				id = internalKey;
-			}
-		}
-
-		if ( !cache[ id ] ) {
-			cache[ id ] = {};
-
-			// Avoids exposing jQuery metadata on plain JS objects when the object
-			// is serialized using JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-		}
-
-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
-		// shallow copied over onto the existing cache
-		if ( typeof name === "object" || typeof name === "function" ) {
-			if ( pvt ) {
-				cache[ id ] = jQuery.extend( cache[ id ], name );
-			} else {
-				cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-			}
-		}
-
-		privateCache = thisCache = cache[ id ];
-
-		// jQuery data() is stored in a separate object inside the object's internal data
-		// cache in order to avoid key collisions between internal data and user-defined
-		// data.
-		if ( !pvt ) {
-			if ( !thisCache.data ) {
-				thisCache.data = {};
-			}
-
-			thisCache = thisCache.data;
-		}
-
-		if ( data !== undefined ) {
-			thisCache[ jQuery.camelCase( name ) ] = data;
-		}
-
-		// Users should not attempt to inspect the internal events object using jQuery.data,
-		// it is undocumented and subject to change. But does anyone listen? No.
-		if ( isEvents && !thisCache[ name ] ) {
-			return privateCache.events;
-		}
-
-		// Check for both converted-to-camel and non-converted data property names
-		// If a data property was specified
-		if ( getByName ) {
-
-			// First Try to find as-is property data
-			ret = thisCache[ name ];
-
-			// Test for null|undefined property data
-			if ( ret == null ) {
-
-				// Try to find the camelCased property
-				ret = thisCache[ jQuery.camelCase( name ) ];
-			}
-		} else {
-			ret = thisCache;
-		}
-
-		return ret;
-	},
-
-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var thisCache, i, l,
-
-			// Reference to internal data cache key
-			internalKey = jQuery.expando,
-
-			isNode = elem.nodeType,
-
-			// See jQuery.data for more information
-			cache = isNode ? jQuery.cache : elem,
-
-			// See jQuery.data for more information
-			id = isNode ? elem[ internalKey ] : internalKey;
-
-		// If there is already no cache entry for this object, there is no
-		// purpose in continuing
-		if ( !cache[ id ] ) {
-			return;
-		}
-
-		if ( name ) {
-
-			thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-			if ( thisCache ) {
-
-				// Support array or space separated string names for data keys
-				if ( !jQuery.isArray( name ) ) {
-
-					// try the string as a key before any manipulation
-					if ( name in thisCache ) {
-						name = [ name ];
-					} else {
-
-						// split the camel cased version by spaces unless a key with the spaces exists
-						name = jQuery.camelCase( name );
-						if ( name in thisCache ) {
-							name = [ name ];
-						} else {
-							name = name.split( " " );
-						}
-					}
-				}
-
-				for ( i = 0, l = name.length; i < l; i++ ) {
-					delete thisCache[ name[i] ];
-				}
-
-				// If there is no data left in the cache, we want to continue
-				// and let the cache object itself get destroyed
-				if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
-					return;
-				}
-			}
-		}
-
-		// See jQuery.data for more information
-		if ( !pvt ) {
-			delete cache[ id ].data;
-
-			// Don't destroy the parent cache unless the internal data object
-			// had been the only thing left in it
-			if ( !isEmptyDataObject(cache[ id ]) ) {
-				return;
-			}
-		}
-
-		// Browsers that fail expando deletion also refuse to delete expandos on
-		// the window, but it will allow it on all other JS objects; other browsers
-		// don't care
-		// Ensure that `cache` is not a window object #10080
-		if ( jQuery.support.deleteExpando || !cache.setInterval ) {
-			delete cache[ id ];
-		} else {
-			cache[ id ] = null;
-		}
-
-		// We destroyed the cache and need to eliminate the expando on the node to avoid
-		// false lookups in the cache for entries that no longer exist
-		if ( isNode ) {
-			// IE does not allow us to delete expando properties from nodes,
-			// nor does it have a removeAttribute function on Document nodes;
-			// we must handle all of these cases
-			if ( jQuery.support.deleteExpando ) {
-				delete elem[ internalKey ];
-			} else if ( elem.removeAttribute ) {
-				elem.removeAttribute( internalKey );
-			} else {
-				elem[ internalKey ] = null;
-			}
-		}
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return jQuery.data( elem, name, data, true );
-	},
-
-	// A method for determining if a DOM node can handle the data expando
-	acceptData: function( elem ) {
-		if ( elem.nodeName ) {
-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-			if ( match ) {
-				return !(match === true || elem.getAttribute("classid") !== match);
-			}
-		}
-
-		return true;
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var parts, attr, name,
-			data = null;
-
-		if ( typeof key === "undefined" ) {
-			if ( this.length ) {
-				data = jQuery.data( this[0] );
-
-				if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
-					attr = this[0].attributes;
-					for ( var i = 0, l = attr.length; i < l; i++ ) {
-						name = attr[i].name;
-
-						if ( name.indexOf( "data-" ) === 0 ) {
-							name = jQuery.camelCase( name.substring(5) );
-
-							dataAttr( this[0], name, data[ name ] );
-						}
-					}
-					jQuery._data( this[0], "parsedAttrs", true );
-				}
-			}
-
-			return data;
-
-		} else if ( typeof key === "object" ) {
-			return this.each(function() {
-				jQuery.data( this, key );
-			});
-		}
-
-		parts = key.split(".");
-		parts[1] = parts[1] ? "." + parts[1] : "";
-
-		if ( value === undefined ) {
-			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
-			// Try to fetch any internally stored data first
-			if ( data === undefined && this.length ) {
-				data = jQuery.data( this[0], key );
-				data = dataAttr( this[0], key, data );
-			}
-
-			return data === undefined && parts[1] ?
-				this.data( parts[0] ) :
-				data;
-
-		} else {
-			return this.each(function() {
-				var self = jQuery( this ),
-					args = [ parts[0], value ];
-
-				self.triggerHandler( "setData" + parts[1] + "!", args );
-				jQuery.data( this, key, value );
-				self.triggerHandler( "changeData" + parts[1] + "!", args );
-			});
-		}
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-
-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-				data === "false" ? false :
-				data === "null" ? null :
-				jQuery.isNumeric( data ) ? parseFloat( data ) :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-	for ( var name in obj ) {
-
-		// if the public data object is empty, the private is still empty
-		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-			continue;
-		}
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-	var deferDataKey = type + "defer",
-		queueDataKey = type + "queue",
-		markDataKey = type + "mark",
-		defer = jQuery._data( elem, deferDataKey );
-	if ( defer &&
-		( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
-		( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
-		// Give room for hard-coded callbacks to fire first
-		// and eventually mark/queue something else on the element
-		setTimeout( function() {
-			if ( !jQuery._data( elem, queueDataKey ) &&
-				!jQuery._data( elem, markDataKey ) ) {
-				jQuery.removeData( elem, deferDataKey, true );
-				defer.fire();
-			}
-		}, 0 );
-	}
-}
-
-jQuery.extend({
-
-	_mark: function( elem, type ) {
-		if ( elem ) {
-			type = ( type || "fx" ) + "mark";
-			jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
-		}
-	},
-
-	_unmark: function( force, elem, type ) {
-		if ( force !== true ) {
-			type = elem;
-			elem = force;
-			force = false;
-		}
-		if ( elem ) {
-			type = type || "fx";
-			var key = type + "mark",
-				count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
-			if ( count ) {
-				jQuery._data( elem, key, count );
-			} else {
-				jQuery.removeData( elem, key, true );
-				handleQueueMarkDefer( elem, type, "mark" );
-			}
-		}
-	},
-
-	queue: function( elem, type, data ) {
-		var q;
-		if ( elem ) {
-			type = ( type || "fx" ) + "queue";
-			q = jQuery._data( elem, type );
-
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !q || jQuery.isArray(data) ) {
-					q = jQuery._data( elem, type, jQuery.makeArray(data) );
-				} else {
-					q.push( data );
-				}
-			}
-			return q || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			fn = queue.shift(),
-			hooks = {};
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-		}
-
-		if ( fn ) {
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift( "inprogress" );
-			}
-
-			jQuery._data( elem, type + ".run", hooks );
-			fn.call( elem, function() {
-				jQuery.dequeue( elem, type );
-			}, hooks );
-		}
-
-		if ( !queue.length ) {
-			jQuery.removeData( elem, type + "queue " + type + ".run", true );
-			handleQueueMarkDefer( elem, type, "queue" );
-		}
-	}
-});
-
-jQuery.fn.extend({
-	queue: function( type, data ) {
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-		}
-
-		if ( data === undefined ) {
-			return jQuery.queue( this[0], type );
-		}
-		return this.each(function() {
-			var queue = jQuery.queue( this, type, data );
-
-			if ( type === "fx" && queue[0] !== "inprogress" ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	},
-	dequeue: function( type ) {
-		return this.each(function() {
-			jQuery.dequeue( this, type );
-		});
-	},
-	// Based off of the plugin by Clint Helfers, with permission.
-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
-	delay: function( time, type ) {
-		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-		type = type || "fx";
-
-		return this.queue( type, function( next, hooks ) {
-			var timeout = setTimeout( next, time );
-			hooks.stop = function() {
-				clearTimeout( timeout );
-			};
-		});
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, object ) {
-		if ( typeof type !== "string" ) {
-			object = type;
-			type = undefined;
-		}
-		type = type || "fx";
-		var defer = jQuery.Deferred(),
-			elements = this,
-			i = elements.length,
-			count = 1,
-			deferDataKey = type + "defer",
-			queueDataKey = type + "queue",
-			markDataKey = type + "mark",
-			tmp;
-		function resolve() {
-			if ( !( --count ) ) {
-				defer.resolveWith( elements, [ elements ] );
-			}
-		}
-		while( i-- ) {
-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-					jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
-				count++;
-				tmp.add( resolve );
-			}
-		}
-		resolve();
-		return defer.promise();
-	}
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-	rspace = /\s+/,
-	rreturn = /\r/g,
-	rtype = /^(?:button|input)$/i,
-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
-	rclickable = /^a(?:rea)?$/i,
-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-	getSetAttribute = jQuery.support.getSetAttribute,
-	nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.attr );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	},
-
-	prop: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.prop );
-	},
-
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	},
-
-	addClass: function( value ) {
-		var classNames, i, l, elem,
-			setClass, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).addClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( value && typeof value === "string" ) {
-			classNames = value.split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 ) {
-					if ( !elem.className && classNames.length === 1 ) {
-						elem.className = value;
-
-					} else {
-						setClass = " " + elem.className + " ";
-
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
-								setClass += classNames[ c ] + " ";
-							}
-						}
-						elem.className = jQuery.trim( setClass );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		var classNames, i, l, elem, className, c, cl;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( j ) {
-				jQuery( this ).removeClass( value.call(this, j, this.className) );
-			});
-		}
-
-		if ( (value && typeof value === "string") || value === undefined ) {
-			classNames = ( value || "" ).split( rspace );
-
-			for ( i = 0, l = this.length; i < l; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.nodeType === 1 && elem.className ) {
-					if ( value ) {
-						className = (" " + elem.className + " ").replace( rclass, " " );
-						for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-							className = className.replace(" " + classNames[ c ] + " ", " ");
-						}
-						elem.className = jQuery.trim( className );
-
-					} else {
-						elem.className = "";
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value,
-			isBool = typeof stateVal === "boolean";
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function( i ) {
-				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-			});
-		}
-
-		return this.each(function() {
-			if ( type === "string" ) {
-				// toggle individual class names
-				var className,
-					i = 0,
-					self = jQuery( this ),
-					state = stateVal,
-					classNames = value.split( rspace );
-
-				while ( (className = classNames[ i++ ]) ) {
-					// check each className given, space seperated list
-					state = isBool ? state : !self.hasClass( className );
-					self[ state ? "addClass" : "removeClass" ]( className );
-				}
-
-			} else if ( type === "undefined" || type === "boolean" ) {
-				if ( this.className ) {
-					// store className if set
-					jQuery._data( this, "__className__", this.className );
-				}
-
-				// toggle whole className
-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-			}
-		});
-	},
-
-	hasClass: function( selector ) {
-		var className = " " + selector + " ",
-			i = 0,
-			l = this.length;
-		for ( ; i < l; i++ ) {
-			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-				return true;
-			}
-		}
-
-		return false;
-	},
-
-	val: function( value ) {
-		var hooks, ret, isFunction,
-			elem = this[0];
-
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				ret = elem.value;
-
-				return typeof ret === "string" ?
-					// handle most common string cases
-					ret.replace(rreturn, "") :
-					// handle cases where value is null/undef or number
-					ret == null ? "" : ret;
-			}
-
-			return;
-		}
-
-		isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var self = jQuery(this), val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, self.val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map(val, function ( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				// attributes.value is undefined in Blackberry 4.7 but
-				// uses .value. See #6932
-				var val = elem.attributes.value;
-				return !val || val.specified ? elem.value : elem.text;
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value, i, max, option,
-					index = elem.selectedIndex,
-					values = [],
-					options = elem.options,
-					one = elem.type === "select-one";
-
-				// Nothing was selected
-				if ( index < 0 ) {
-					return null;
-				}
-
-				// Loop through all the selected options
-				i = one ? index : 0;
-				max = one ? index + 1 : options.length;
-				for ( ; i < max; i++ ) {
-					option = options[ i ];
-
-					// Don't return options that are disabled or in a disabled optgroup
-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-				if ( one && !values.length && options.length ) {
-					return jQuery( options[ index ] ).val();
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var values = jQuery.makeArray( value );
-
-				jQuery(elem).find("option").each(function() {
-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-				});
-
-				if ( !values.length ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	},
-
-	attrFn: {
-		val: true,
-		css: true,
-		html: true,
-		text: true,
-		data: true,
-		width: true,
-		height: true,
-		offset: true
-	},
-
-	attr: function( elem, name, value, pass ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		if ( pass && name in jQuery.attrFn ) {
-			return jQuery( elem )[ name ]( value );
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( typeof elem.getAttribute === "undefined" ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// All attributes are lowercase
-		// Grab necessary hook if one is defined
-		if ( notxml ) {
-			name = name.toLowerCase();
-			hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
-		}
-
-		if ( value !== undefined ) {
-
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return;
-
-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				elem.setAttribute( name, "" + value );
-				return value;
-			}
-
-		} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
-			return ret;
-
-		} else {
-
-			ret = elem.getAttribute( name );
-
-			// Non-existent attributes return null, we normalize to undefined
-			return ret === null ?
-				undefined :
-				ret;
-		}
-	},
-
-	removeAttr: function( elem, value ) {
-		var propName, attrNames, name, l,
-			i = 0;
-
-		if ( value && elem.nodeType === 1 ) {
-			attrNames = value.toLowerCase().split( rspace );
-			l = attrNames.length;
-
-			for ( ; i < l; i++ ) {
-				name = attrNames[ i ];
-
-				if ( name ) {
-					propName = jQuery.propFix[ name ] || name;
-
-					// See #9699 for explanation of this approach (setting first, then removal)
-					jQuery.attr( elem, name, "" );
-					elem.removeAttribute( getSetAttribute ? name : propName );
-
-					// Set corresponding property to false for boolean attributes
-					if ( rboolean.test( name ) && propName in elem ) {
-						elem[ propName ] = false;
-					}
-				}
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				// We can't allow the type property to be changed (since it causes problems in IE)
-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-					jQuery.error( "type property can't be changed" );
-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to it's default in case type is set after value
-					// This is for element creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		},
-		// Use the value property for back compat
-		// Use the nodeHook for button elements in IE6/7 (#1954)
-		value: {
-			get: function( elem, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.get( elem, name );
-				}
-				return name in elem ?
-					elem.value :
-					null;
-			},
-			set: function( elem, value, name ) {
-				if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-					return nodeHook.set( elem, value, name );
-				}
-				// Does not return so that setAttribute is also used
-				elem.value = value;
-			}
-		}
-	},
-
-	propFix: {
-		tabindex: "tabIndex",
-		readonly: "readOnly",
-		"for": "htmlFor",
-		"class": "className",
-		maxlength: "maxLength",
-		cellspacing: "cellSpacing",
-		cellpadding: "cellPadding",
-		rowspan: "rowSpan",
-		colspan: "colSpan",
-		usemap: "useMap",
-		frameborder: "frameBorder",
-		contenteditable: "contentEditable"
-	},
-
-	prop: function( elem, name, value ) {
-		var ret, hooks, notxml,
-			nType = elem.nodeType;
-
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		if ( notxml ) {
-			// Fix name and attach hooks
-			name = jQuery.propFix[ name ] || name;
-			hooks = jQuery.propHooks[ name ];
-		}
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return ( elem[ name ] = value );
-			}
-
-		} else {
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-				return ret;
-
-			} else {
-				return elem[ name ];
-			}
-		}
-	},
-
-	propHooks: {
-		tabIndex: {
-			get: function( elem ) {
-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				var attributeNode = elem.getAttributeNode("tabindex");
-
-				return attributeNode && attributeNode.specified ?
-					parseInt( attributeNode.value, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						undefined;
-			}
-		}
-	}
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
-	get: function( elem, name ) {
-		// Align boolean attributes with corresponding properties
-		// Fall back to attribute presence where some booleans are not supported
-		var attrNode,
-			property = jQuery.prop( elem, name );
-		return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-			name.toLowerCase() :
-			undefined;
-	},
-	set: function( elem, value, name ) {
-		var propName;
-		if ( value === false ) {
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else {
-			// value is true since we know at this point it's type boolean and not false
-			// Set boolean attributes to the same name and set the DOM property
-			propName = jQuery.propFix[ name ] || name;
-			if ( propName in elem ) {
-				// Only set the IDL specifically if it already exists on the element
-				elem[ propName ] = true;
-			}
-
-			elem.setAttribute( name, name.toLowerCase() );
-		}
-		return name;
-	}
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-	fixSpecified = {
-		name: true,
-		id: true
-	};
-
-	// Use this for any attribute in IE6/7
-	// This fixes almost every IE6/7 issue
-	nodeHook = jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret;
-			ret = elem.getAttributeNode( name );
-			return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
-				ret.nodeValue :
-				undefined;
-		},
-		set: function( elem, value, name ) {
-			// Set the existing or create a new attribute node
-			var ret = elem.getAttributeNode( name );
-			if ( !ret ) {
-				ret = document.createAttribute( name );
-				elem.setAttributeNode( ret );
-			}
-			return ( ret.nodeValue = value + "" );
-		}
-	};
-
-	// Apply the nodeHook to tabindex
-	jQuery.attrHooks.tabindex.set = nodeHook.set;
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		});
-	});
-
-	// Set contenteditable to false on removals(#10429)
-	// Setting to empty string throws an error as an invalid value
-	jQuery.attrHooks.contenteditable = {
-		get: nodeHook.get,
-		set: function( elem, value, name ) {
-			if ( value === "" ) {
-				value = "false";
-			}
-			nodeHook.set( elem, value, name );
-		}
-	};
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			get: function( elem ) {
-				var ret = elem.getAttribute( name, 2 );
-				return ret === null ? undefined : ret;
-			}
-		});
-	});
-}
-
-if ( !jQuery.support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Normalize to lowercase since IE uppercases css property names
-			return elem.style.cssText.toLowerCase() || undefined;
-		},
-		set: function( elem, value ) {
-			return ( elem.style.cssText = "" + value );
-		}
-	};
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-			return null;
-		}
-	});
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
-	jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-	jQuery.each([ "radio", "checkbox" ], function() {
-		jQuery.valHooks[ this ] = {
-			get: function( elem ) {
-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-				return elem.getAttribute("value") === null ? "on" : elem.value;
-			}
-		};
-	});
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-			}
-		}
-	});
-});
-
-
-
-
-var rformElems = /^(?:textarea|input|select)$/i,
-	rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
-	rhoverHack = /\bhover(\.\S+)?\b/,
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|contextmenu)|click/,
-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-	rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
-	quickParse = function( selector ) {
-		var quick = rquickIs.exec( selector );
-		if ( quick ) {
-			//   0  1    2   3
-			// [ _, tag, id, class ]
-			quick[1] = ( quick[1] || "" ).toLowerCase();
-			quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
-		}
-		return quick;
-	},
-	quickIs = function( elem, m ) {
-		var attrs = elem.attributes || {};
-		return (
-			(!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-			(!m[2] || (attrs.id || {}).value === m[2]) &&
-			(!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
-		);
-	},
-	hoverHack = function( events ) {
-		return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
-	};
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-	add: function( elem, types, handler, data, selector ) {
-
-		var elemData, eventHandle, events,
-			t, tns, type, namespaces, handleObj,
-			handleObjIn, quick, handlers, special;
-
-		// Don't attach events to noData or text/comment nodes (allow plain objects tho)
-		if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
-			return;
-		}
-
-		// Caller can pass in an object of custom data in lieu of the handler
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-		}
-
-		// Make sure that the handler has a unique ID, used to find/remove it later
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure and main handler, if this is the first
-		events = elemData.events;
-		if ( !events ) {
-			elemData.events = events = {};
-		}
-		eventHandle = elemData.handle;
-		if ( !eventHandle ) {
-			elemData.handle = eventHandle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-			eventHandle.elem = elem;
-		}
-
-		// Handle multiple events separated by a space
-		// jQuery(...).bind("mouseover mouseout", fn);
-		types = jQuery.trim( hoverHack(types) ).split( " " );
-		for ( t = 0; t < types.length; t++ ) {
-
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = tns[1];
-			namespaces = ( tns[2] || "" ).split( "." ).sort();
-
-			// If event changes its type, use the special event handlers for the changed type
-			special = jQuery.event.special[ type ] || {};
-
-			// If selector defined, determine special event api type, otherwise given type
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-
-			// Update special based on newly reset type
-			special = jQuery.event.special[ type ] || {};
-
-			// handleObj is passed to all event handlers
-			handleObj = jQuery.extend({
-				type: type,
-				origType: tns[1],
-				data: data,
-				handler: handler,
-				guid: handler.guid,
-				selector: selector,
-				quick: quickParse( selector ),
-				namespace: namespaces.join(".")
-			}, handleObjIn );
-
-			// Init the event handler queue if we're the first
-			handlers = events[ type ];
-			if ( !handlers ) {
-				handlers = events[ type ] = [];
-				handlers.delegateCount = 0;
-
-				// Only use addEventListener/attachEvent if the special events handler returns false
-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add to the element's handler list, delegates in front
-			if ( selector ) {
-				handlers.splice( handlers.delegateCount++, 0, handleObj );
-			} else {
-				handlers.push( handleObj );
-			}
-
-			// Keep track of which events have ever been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	global: {},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, selector, mappedTypes ) {
-
-		var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-			t, tns, type, origType, namespaces, origCount,
-			j, events, special, handle, eventType, handleObj;
-
-		if ( !elemData || !(events = elemData.events) ) {
-			return;
-		}
-
-		// Once for each type.namespace in types; type may be omitted
-		types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
-		for ( t = 0; t < types.length; t++ ) {
-			tns = rtypenamespace.exec( types[t] ) || [];
-			type = origType = tns[1];
-			namespaces = tns[2];
-
-			// Unbind all events (on this namespace, if provided) for the element
-			if ( !type ) {
-				for ( type in events ) {
-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-				}
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-			type = ( selector? special.delegateType : special.bindType ) || type;
-			eventType = events[ type ] || [];
-			origCount = eventType.length;
-			namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
-			// Remove matching events
-			for ( j = 0; j < eventType.length; j++ ) {
-				handleObj = eventType[ j ];
-
-				if ( ( mappedTypes || origType === handleObj.origType ) &&
-					 ( !handler || handler.guid === handleObj.guid ) &&
-					 ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
-					 ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-					eventType.splice( j--, 1 );
-
-					if ( handleObj.selector ) {
-						eventType.delegateCount--;
-					}
-					if ( special.remove ) {
-						special.remove.call( elem, handleObj );
-					}
-				}
-			}
-
-			// Remove generic event handler if we removed something and no more handlers exist
-			// (avoids potential for endless recursion during removal of special event handlers)
-			if ( eventType.length === 0 && origCount !== eventType.length ) {
-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			handle = elemData.handle;
-			if ( handle ) {
-				handle.elem = null;
-			}
-
-			// removeData also checks for emptiness and clears the expando if empty
-			// so use it instead of delete
-			jQuery.removeData( elem, [ "events", "handle" ], true );
-		}
-	},
-
-	// Events that are safe to short-circuit if no handlers are attached.
-	// Native DOM events should not be added, they may have inline handlers.
-	customEvent: {
-		"getData": true,
-		"setData": true,
-		"changeData": true
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		// Don't do events on text and comment nodes
-		if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
-			return;
-		}
-
-		// Event object or event type
-		var type = event.type || event,
-			namespaces = [],
-			cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-			return;
-		}
-
-		if ( type.indexOf( "!" ) >= 0 ) {
-			// Exclusive events trigger only for the exact event (no namespaces)
-			type = type.slice(0, -1);
-			exclusive = true;
-		}
-
-		if ( type.indexOf( "." ) >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-
-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-			// No jQuery handlers for this event type, and it can't have inline handlers
-			return;
-		}
-
-		// Caller can pass in an Event, Object, or just an event type string
-		event = typeof event === "object" ?
-			// jQuery.Event object
-			event[ jQuery.expando ] ? event :
-			// Object literal
-			new jQuery.Event( type, event ) :
-			// Just the event type (string)
-			new jQuery.Event( type );
-
-		event.type = type;
-		event.isTrigger = true;
-		event.exclusive = exclusive;
-		event.namespace = namespaces.join( "." );
-		event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-		ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
-		// Handle a global trigger
-		if ( !elem ) {
-
-			// TODO: Stop taunting the data cache; remove global events and always attach to document
-			cache = jQuery.cache;
-			for ( i in cache ) {
-				if ( cache[ i ].events && cache[ i ].events[ type ] ) {
-					jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
-				}
-			}
-			return;
-		}
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		if ( !event.target ) {
-			event.target = elem;
-		}
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data != null ? jQuery.makeArray( data ) : [];
-		data.unshift( event );
-
-		// Allow special events to draw outside the lines
-		special = jQuery.event.special[ type ] || {};
-		if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
-			return;
-		}
-
-		// Determine event propagation path in advance, per W3C events spec (#9951)
-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-		eventPath = [[ elem, special.bindType || type ]];
-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-			bubbleType = special.delegateType || type;
-			cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-			old = null;
-			for ( ; cur; cur = cur.parentNode ) {
-				eventPath.push([ cur, bubbleType ]);
-				old = cur;
-			}
-
-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
-			if ( old && old === elem.ownerDocument ) {
-				eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
-			}
-		}
-
-		// Fire handlers on the event path
-		for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
-			cur = eventPath[i][0];
-			event.type = eventPath[i][1];
-
-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-			// Note that this is a bare JS function and not a jQuery handler
-			handle = ontype && cur[ ontype ];
-			if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
-				event.preventDefault();
-			}
-		}
-		event.type = type;
-
-		// If nobody prevented the default action, do it now
-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-			if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction() check here because IE6/7 fails that test.
-				// Don't do default actions on window, that's where global variables be (#6170)
-				// IE<9 dies on focus/blur to hidden element (#1486)
-				if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
-					// Don't re-trigger an onFOO event when we call its FOO() method
-					old = elem[ ontype ];
-
-					if ( old ) {
-						elem[ ontype ] = null;
-					}
-
-					// Prevent re-triggering of the same event, since we already bubbled it above
-					jQuery.event.triggered = type;
-					elem[ type ]();
-					jQuery.event.triggered = undefined;
-
-					if ( old ) {
-						elem[ ontype ] = old;
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	dispatch: function( event ) {
-
-		// Make a writable jQuery.Event from the native event object
-		event = jQuery.event.fix( event || window.event );
-
-		var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-			delegateCount = handlers.delegateCount,
-			args = [].slice.call( arguments, 0 ),
-			run_all = !event.exclusive && !event.namespace,
-			handlerQueue = [],
-			i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
-		args[0] = event;
-		event.delegateTarget = this;
-
-		// Determine handlers that should run if there are delegated events
-		// Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
-		if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
-
-			// Pregenerate a single jQuery object for reuse with .is()
-			jqcur = jQuery(this);
-			jqcur.context = this.ownerDocument || this;
-
-			for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-				selMatch = {};
-				matches = [];
-				jqcur[0] = cur;
-				for ( i = 0; i < delegateCount; i++ ) {
-					handleObj = handlers[ i ];
-					sel = handleObj.selector;
-
-					if ( selMatch[ sel ] === undefined ) {
-						selMatch[ sel ] = (
-							handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
-						);
-					}
-					if ( selMatch[ sel ] ) {
-						matches.push( handleObj );
-					}
-				}
-				if ( matches.length ) {
-					handlerQueue.push({ elem: cur, matches: matches });
-				}
-			}
-		}
-
-		// Add the remaining (directly-bound) handlers
-		if ( handlers.length > delegateCount ) {
-			handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
-		}
-
-		// Run delegates first; they may want to stop propagation beneath us
-		for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-			matched = handlerQueue[ i ];
-			event.currentTarget = matched.elem;
-
-			for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-				handleObj = matched.matches[ j ];
-
-				// Triggered event must either 1) be non-exclusive and have no namespace, or
-				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-				if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
-					event.data = handleObj.data;
-					event.handleObj = handleObj;
-
-					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-							.apply( matched.elem, args );
-
-					if ( ret !== undefined ) {
-						event.result = ret;
-						if ( ret === false ) {
-							event.preventDefault();
-							event.stopPropagation();
-						}
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	// Includes some event props shared by KeyEvent and MouseEvent
-	// *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
-	props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-	fixHooks: {},
-
-	keyHooks: {
-		props: "char charCode key keyCode".split(" "),
-		filter: function( event, original ) {
-
-			// Add which for key events
-			if ( event.which == null ) {
-				event.which = original.charCode != null ? original.charCode : original.keyCode;
-			}
-
-			return event;
-		}
-	},
-
-	mouseHooks: {
-		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-		filter: function( event, original ) {
-			var eventDoc, doc, body,
-				button = original.button,
-				fromElement = original.fromElement;
-
-			// Calculate pageX/Y if missing and clientX/Y available
-			if ( event.pageX == null && original.clientX != null ) {
-				eventDoc = event.target.ownerDocument || document;
-				doc = eventDoc.documentElement;
-				body = eventDoc.body;
-
-				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-			}
-
-			// Add relatedTarget, if necessary
-			if ( !event.relatedTarget && fromElement ) {
-				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-			}
-
-			// Add which for click: 1 === left; 2 === middle; 3 === right
-			// Note: button is not normalized, so don't use it
-			if ( !event.which && button !== undefined ) {
-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-			}
-
-			return event;
-		}
-	},
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// Create a writable copy of the event object and normalize some properties
-		var i, prop,
-			originalEvent = event,
-			fixHook = jQuery.event.fixHooks[ event.type ] || {},
-			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-		event = jQuery.Event( originalEvent );
-
-		for ( i = copy.length; i; ) {
-			prop = copy[ --i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-		if ( !event.target ) {
-			event.target = originalEvent.srcElement || document;
-		}
-
-		// Target should not be a text node (#504, Safari)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
-		if ( event.metaKey === undefined ) {
-			event.metaKey = event.ctrlKey;
-		}
-
-		return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-	},
-
-	special: {
-		ready: {
-			// Make sure the ready event is setup
-			setup: jQuery.bindReady
-		},
-
-		load: {
-			// Prevent triggered image.load events from bubbling to window.load
-			noBubble: true
-		},
-
-		focus: {
-			delegateType: "focusin"
-		},
-		blur: {
-			delegateType: "focusout"
-		},
-
-		beforeunload: {
-			setup: function( data, namespaces, eventHandle ) {
-				// We only want to do this special case on windows
-				if ( jQuery.isWindow( this ) ) {
-					this.onbeforeunload = eventHandle;
-				}
-			},
-
-			teardown: function( namespaces, eventHandle ) {
-				if ( this.onbeforeunload === eventHandle ) {
-					this.onbeforeunload = null;
-				}
-			}
-		}
-	},
-
-	simulate: function( type, elem, event, bubble ) {
-		// Piggyback on a donor event to simulate a different one.
-		// Fake originalEvent to avoid donor's stopPropagation, but if the
-		// simulated event prevents default then we do the same on the donor.
-		var e = jQuery.extend(
-			new jQuery.Event(),
-			event,
-			{ type: type,
-				isSimulated: true,
-				originalEvent: {}
-			}
-		);
-		if ( bubble ) {
-			jQuery.event.trigger( e, null, elem );
-		} else {
-			jQuery.event.dispatch.call( elem, e );
-		}
-		if ( e.isDefaultPrevented() ) {
-			event.preventDefault();
-		}
-	}
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		if ( elem.detachEvent ) {
-			elem.detachEvent( "on" + type, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !(this instanceof jQuery.Event) ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-			src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// Create a timestamp if incoming event doesn't have one
-	this.timeStamp = src && src.timeStamp || jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
-	return false;
-}
-function returnTrue() {
-	return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	preventDefault: function() {
-		this.isDefaultPrevented = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-
-		// if preventDefault exists run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// otherwise set the returnValue property of the original event to false (IE)
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		this.isPropagationStopped = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-		// if stopPropagation exists run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-		// otherwise set the cancelBubble property of the original event to true (IE)
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		this.isImmediatePropagationStopped = returnTrue;
-		this.stopPropagation();
-	},
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		delegateType: fix,
-		bindType: fix,
-
-		handle: function( event ) {
-			var target = this,
-				related = event.relatedTarget,
-				handleObj = event.handleObj,
-				selector = handleObj.selector,
-				ret;
-
-			// For mousenter/leave call the handler if related is outside the target.
-			// NB: No relatedTarget if the mouse left/entered the browser window
-			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-				event.type = handleObj.origType;
-				ret = handleObj.handler.apply( this, arguments );
-				event.type = fix;
-			}
-			return ret;
-		}
-	};
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-	jQuery.event.special.submit = {
-		setup: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Lazy-add a submit handler when a descendant form may potentially be submitted
-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-				// Node name check avoids a VML-related crash in IE (#9807)
-				var elem = e.target,
-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-				if ( form && !form._submit_attached ) {
-					jQuery.event.add( form, "submit._submit", function( event ) {
-						// If form was submitted by the user, bubble the event up the tree
-						if ( this.parentNode && !event.isTrigger ) {
-							jQuery.event.simulate( "submit", this.parentNode, event, true );
-						}
-					});
-					form._submit_attached = true;
-				}
-			});
-			// return undefined since we don't need an event listener
-		},
-
-		teardown: function() {
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-			jQuery.event.remove( this, "._submit" );
-		}
-	};
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
-	jQuery.event.special.change = {
-
-		setup: function() {
-
-			if ( rformElems.test( this.nodeName ) ) {
-				// IE doesn't fire change on a check/radio until blur; trigger it on click
-				// after a propertychange. Eat the blur-change in special.change.handle.
-				// This still fires onchange a second time for check/radio after blur.
-				if ( this.type === "checkbox" || this.type === "radio" ) {
-					jQuery.event.add( this, "propertychange._change", function( event ) {
-						if ( event.originalEvent.propertyName === "checked" ) {
-							this._just_changed = true;
-						}
-					});
-					jQuery.event.add( this, "click._change", function( event ) {
-						if ( this._just_changed && !event.isTrigger ) {
-							this._just_changed = false;
-							jQuery.event.simulate( "change", this, event, true );
-						}
-					});
-				}
-				return false;
-			}
-			// Delegated event; lazy-add a change handler on descendant inputs
-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
-				var elem = e.target;
-
-				if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
-					jQuery.event.add( elem, "change._change", function( event ) {
-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-							jQuery.event.simulate( "change", this.parentNode, event, true );
-						}
-					});
-					elem._change_attached = true;
-				}
-			});
-		},
-
-		handle: function( event ) {
-			var elem = event.target;
-
-			// Swallow native change events from checkbox/radio, we already triggered them above
-			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-				return event.handleObj.handler.apply( this, arguments );
-			}
-		},
-
-		teardown: function() {
-			jQuery.event.remove( this, "._change" );
-
-			return rformElems.test( this.nodeName );
-		}
-	};
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler while someone wants focusin/focusout
-		var attaches = 0,
-			handler = function( event ) {
-				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-			};
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				if ( attaches++ === 0 ) {
-					document.addEventListener( orig, handler, true );
-				}
-			},
-			teardown: function() {
-				if ( --attaches === 0 ) {
-					document.removeEventListener( orig, handler, true );
-				}
-			}
-		};
-	});
-}
-
-jQuery.fn.extend({
-
-	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-		var origFn, type;
-
-		// Types can be a map of types/handlers
-		if ( typeof types === "object" ) {
-			// ( types-Object, selector, data )
-			if ( typeof selector !== "string" ) {
-				// ( types-Object, data )
-				data = selector;
-				selector = undefined;
-			}
-			for ( type in types ) {
-				this.on( type, selector, data, types[ type ], one );
-			}
-			return this;
-		}
-
-		if ( data == null && fn == null ) {
-			// ( types, fn )
-			fn = selector;
-			data = selector = undefined;
-		} else if ( fn == null ) {
-			if ( typeof selector === "string" ) {
-				// ( types, selector, fn )
-				fn = data;
-				data = undefined;
-			} else {
-				// ( types, data, fn )
-				fn = data;
-				data = selector;
-				selector = undefined;
-			}
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		} else if ( !fn ) {
-			return this;
-		}
-
-		if ( one === 1 ) {
-			origFn = fn;
-			fn = function( event ) {
-				// Can use an empty set, since event contains the info
-				jQuery().off( event );
-				return origFn.apply( this, arguments );
-			};
-			// Use same guid so caller can remove using origFn
-			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-		}
-		return this.each( function() {
-			jQuery.event.add( this, types, fn, data, selector );
-		});
-	},
-	one: function( types, selector, data, fn ) {
-		return this.on.call( this, types, selector, data, fn, 1 );
-	},
-	off: function( types, selector, fn ) {
-		if ( types && types.preventDefault && types.handleObj ) {
-			// ( event )  dispatched jQuery.Event
-			var handleObj = types.handleObj;
-			jQuery( types.delegateTarget ).off(
-				handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
-				handleObj.selector,
-				handleObj.handler
-			);
-			return this;
-		}
-		if ( typeof types === "object" ) {
-			// ( types-object [, selector] )
-			for ( var type in types ) {
-				this.off( type, selector, types[ type ] );
-			}
-			return this;
-		}
-		if ( selector === false || typeof selector === "function" ) {
-			// ( types [, fn] )
-			fn = selector;
-			selector = undefined;
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		}
-		return this.each(function() {
-			jQuery.event.remove( this, types, fn, selector );
-		});
-	},
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	live: function( types, data, fn ) {
-		jQuery( this.context ).on( types, this.selector, data, fn );
-		return this;
-	},
-	die: function( types, fn ) {
-		jQuery( this.context ).off( types, this.selector || "**", fn );
-		return this;
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
-	},
-
-	trigger: function( type, data ) {
-		return this.each(function() {
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-	triggerHandler: function( type, data ) {
-		if ( this[0] ) {
-			return jQuery.event.trigger( type, data, this[0], true );
-		}
-	},
-
-	toggle: function( fn ) {
-		// Save reference to arguments for access in closure
-		var args = arguments,
-			guid = fn.guid || jQuery.guid++,
-			i = 0,
-			toggler = function( event ) {
-				// Figure out which function to execute
-				var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-				jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-				// Make sure that clicks stop
-				event.preventDefault();
-
-				// and execute the function
-				return args[ lastToggle ].apply( this, arguments ) || false;
-			};
-
-		// link all the functions, so any of them can unbind this click handler
-		toggler.guid = guid;
-		while ( i < args.length ) {
-			args[ i++ ].guid = guid;
-		}
-
-		return this.click( toggler );
-	},
-
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		if ( fn == null ) {
-			fn = data;
-			data = null;
-		}
-
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-
-	if ( jQuery.attrFn ) {
-		jQuery.attrFn[ name ] = true;
-	}
-
-	if ( rkeyEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
-	}
-
-	if ( rmouseEvent.test( name ) ) {
-		jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
-	}
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-	expando = "sizcache" + (Math.random() + '').replace('.', ''),
-	done = 0,
-	toString = Object.prototype.toString,
-	hasDuplicate = false,
-	baseHasDuplicate = true,
-	rBackslash = /\\/g,
-	rReturn = /\r\n/g,
-	rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-	baseHasDuplicate = false;
-	return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-	results = results || [];
-	context = context || document;
-
-	var origContext = context;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-		return [];
-	}
-	
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var m, set, checkSet, extra, ret, cur, pop, i,
-		prune = true,
-		contextXML = Sizzle.isXML( context ),
-		parts = [],
-		soFar = selector;
-	
-	// Reset the position of the chunker regexp (start from head)
-	do {
-		chunker.exec( "" );
-		m = chunker.exec( soFar );
-
-		if ( m ) {
-			soFar = m[3];
-		
-			parts.push( m[1] );
-		
-			if ( m[2] ) {
-				extra = m[3];
-				break;
-			}
-		}
-	} while ( m );
-
-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-			set = posProcess( parts[0] + parts[1], context, seed );
-
-		} else {
-			set = Expr.relative[ parts[0] ] ?
-				[ context ] :
-				Sizzle( parts.shift(), context );
-
-			while ( parts.length ) {
-				selector = parts.shift();
-
-				if ( Expr.relative[ selector ] ) {
-					selector += parts.shift();
-				}
-				
-				set = posProcess( selector, set, seed );
-			}
-		}
-
-	} else {
-		// Take a shortcut and set the context if the root selector is an ID
-		// (but not if it'll be faster if the inner selector is an ID)
-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-			ret = Sizzle.find( parts.shift(), context, contextXML );
-			context = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set )[0] :
-				ret.set[0];
-		}
-
-		if ( context ) {
-			ret = seed ?
-				{ expr: parts.pop(), set: makeArray(seed) } :
-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-			set = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set ) :
-				ret.set;
-
-			if ( parts.length > 0 ) {
-				checkSet = makeArray( set );
-
-			} else {
-				prune = false;
-			}
-
-			while ( parts.length ) {
-				cur = parts.pop();
-				pop = cur;
-
-				if ( !Expr.relative[ cur ] ) {
-					cur = "";
-				} else {
-					pop = parts.pop();
-				}
-
-				if ( pop == null ) {
-					pop = context;
-				}
-
-				Expr.relative[ cur ]( checkSet, pop, contextXML );
-			}
-
-		} else {
-			checkSet = parts = [];
-		}
-	}
-
-	if ( !checkSet ) {
-		checkSet = set;
-	}
-
-	if ( !checkSet ) {
-		Sizzle.error( cur || selector );
-	}
-
-	if ( toString.call(checkSet) === "[object Array]" ) {
-		if ( !prune ) {
-			results.push.apply( results, checkSet );
-
-		} else if ( context && context.nodeType === 1 ) {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-
-		} else {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-					results.push( set[i] );
-				}
-			}
-		}
-
-	} else {
-		makeArray( checkSet, results );
-	}
-
-	if ( extra ) {
-		Sizzle( extra, origContext, results, seed );
-		Sizzle.uniqueSort( results );
-	}
-
-	return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
-	if ( sortOrder ) {
-		hasDuplicate = baseHasDuplicate;
-		results.sort( sortOrder );
-
-		if ( hasDuplicate ) {
-			for ( var i = 1; i < results.length; i++ ) {
-				if ( results[i] === results[ i - 1 ] ) {
-					results.splice( i--, 1 );
-				}
-			}
-		}
-	}
-
-	return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-	return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-	return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-	var set, i, len, match, type, left;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( i = 0, len = Expr.order.length; i < len; i++ ) {
-		type = Expr.order[i];
-		
-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-			left = match[1];
-			match.splice( 1, 1 );
-
-			if ( left.substr( left.length - 1 ) !== "\\" ) {
-				match[1] = (match[1] || "").replace( rBackslash, "" );
-				set = Expr.find[ type ]( match, context, isXML );
-
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( "*" ) :
-			[];
-	}
-
-	return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-	var match, anyFound,
-		type, found, item, filter, left,
-		i, pass,
-		old = expr,
-		result = [],
-		curLoop = set,
-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-	while ( expr && set.length ) {
-		for ( type in Expr.filter ) {
-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-				filter = Expr.filter[ type ];
-				left = match[1];
-
-				anyFound = false;
-
-				match.splice(1,1);
-
-				if ( left.substr( left.length - 1 ) === "\\" ) {
-					continue;
-				}
-
-				if ( curLoop === result ) {
-					result = [];
-				}
-
-				if ( Expr.preFilter[ type ] ) {
-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-					if ( !match ) {
-						anyFound = found = true;
-
-					} else if ( match === true ) {
-						continue;
-					}
-				}
-
-				if ( match ) {
-					for ( i = 0; (item = curLoop[i]) != null; i++ ) {
-						if ( item ) {
-							found = filter( item, match, i, curLoop );
-							pass = not ^ found;
-
-							if ( inplace && found != null ) {
-								if ( pass ) {
-									anyFound = true;
-
-								} else {
-									curLoop[i] = false;
-								}
-
-							} else if ( pass ) {
-								result.push( item );
-								anyFound = true;
-							}
-						}
-					}
-				}
-
-				if ( found !== undefined ) {
-					if ( !inplace ) {
-						curLoop = result;
-					}
-
-					expr = expr.replace( Expr.match[ type ], "" );
-
-					if ( !anyFound ) {
-						return [];
-					}
-
-					break;
-				}
-			}
-		}
-
-		// Improper expression
-		if ( expr === old ) {
-			if ( anyFound == null ) {
-				Sizzle.error( expr );
-
-			} else {
-				break;
-			}
-		}
-
-		old = expr;
-	}
-
-	return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-	throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
-    var i, node,
-		nodeType = elem.nodeType,
-		ret = "";
-
-	if ( nodeType ) {
-		if ( nodeType === 1 || nodeType === 9 ) {
-			// Use textContent || innerText for elements
-			if ( typeof elem.textContent === 'string' ) {
-				return elem.textContent;
-			} else if ( typeof elem.innerText === 'string' ) {
-				// Replace IE's carriage returns
-				return elem.innerText.replace( rReturn, '' );
-			} else {
-				// Traverse it's children
-				for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
-					ret += getText( elem );
-				}
-			}
-		} else if ( nodeType === 3 || nodeType === 4 ) {
-			return elem.nodeValue;
-		}
-	} else {
-
-		// If no nodeType, this is expected to be an array
-		for ( i = 0; (node = elem[i]); i++ ) {
-			// Do not traverse comment nodes
-			if ( node.nodeType !== 8 ) {
-				ret += getText( node );
-			}
-		}
-	}
-	return ret;
-};
-
-var Expr = Sizzle.selectors = {
-	order: [ "ID", "NAME", "TAG" ],
-
-	match: {
-		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-	},
-
-	leftMatch: {},
-
-	attrMap: {
-		"class": "className",
-		"for": "htmlFor"
-	},
-
-	attrHandle: {
-		href: function( elem ) {
-			return elem.getAttribute( "href" );
-		},
-		type: function( elem ) {
-			return elem.getAttribute( "type" );
-		}
-	},
-
-	relative: {
-		"+": function(checkSet, part){
-			var isPartStr = typeof part === "string",
-				isTag = isPartStr && !rNonWord.test( part ),
-				isPartStrNotTag = isPartStr && !isTag;
-
-			if ( isTag ) {
-				part = part.toLowerCase();
-			}
-
-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-				if ( (elem = checkSet[i]) ) {
-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-						elem || false :
-						elem === part;
-				}
-			}
-
-			if ( isPartStrNotTag ) {
-				Sizzle.filter( part, checkSet, true );
-			}
-		},
-
-		">": function( checkSet, part ) {
-			var elem,
-				isPartStr = typeof part === "string",
-				i = 0,
-				l = checkSet.length;
-
-			if ( isPartStr && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-					}
-				}
-
-			} else {
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						checkSet[i] = isPartStr ?
-							elem.parentNode :
-							elem.parentNode === part;
-					}
-				}
-
-				if ( isPartStr ) {
-					Sizzle.filter( part, checkSet, true );
-				}
-			}
-		},
-
-		"": function(checkSet, part, isXML){
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-		},
-
-		"~": function( checkSet, part, isXML ) {
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-		}
-	},
-
-	find: {
-		ID: function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [m] : [];
-			}
-		},
-
-		NAME: function( match, context ) {
-			if ( typeof context.getElementsByName !== "undefined" ) {
-				var ret = [],
-					results = context.getElementsByName( match[1] );
-
-				for ( var i = 0, l = results.length; i < l; i++ ) {
-					if ( results[i].getAttribute("name") === match[1] ) {
-						ret.push( results[i] );
-					}
-				}
-
-				return ret.length === 0 ? null : ret;
-			}
-		},
-
-		TAG: function( match, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( match[1] );
-			}
-		}
-	},
-	preFilter: {
-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-			match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-			if ( isXML ) {
-				return match;
-			}
-
-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-				if ( elem ) {
-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-						if ( !inplace ) {
-							result.push( elem );
-						}
-
-					} else if ( inplace ) {
-						curLoop[i] = false;
-					}
-				}
-			}
-
-			return false;
-		},
-
-		ID: function( match ) {
-			return match[1].replace( rBackslash, "" );
-		},
-
-		TAG: function( match, curLoop ) {
-			return match[1].replace( rBackslash, "" ).toLowerCase();
-		},
-
-		CHILD: function( match ) {
-			if ( match[1] === "nth" ) {
-				if ( !match[2] ) {
-					Sizzle.error( match[0] );
-				}
-
-				match[2] = match[2].replace(/^\+|\s*/g, '');
-
-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-				// calculate the numbers (first)n+(last) including if they are negative
-				match[2] = (test[1] + (test[2] || 1)) - 0;
-				match[3] = test[3] - 0;
-			}
-			else if ( match[2] ) {
-				Sizzle.error( match[0] );
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = done++;
-
-			return match;
-		},
-
-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-			var name = match[1] = match[1].replace( rBackslash, "" );
-			
-			if ( !isXML && Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			// Handle if an un-quoted value was used
-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-			if ( match[2] === "~=" ) {
-				match[4] = " " + match[4] + " ";
-			}
-
-			return match;
-		},
-
-		PSEUDO: function( match, curLoop, inplace, result, not ) {
-			if ( match[1] === "not" ) {
-				// If we're dealing with a complex expression, or a simple one
-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-					match[3] = Sizzle(match[3], null, null, curLoop);
-
-				} else {
-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-					if ( !inplace ) {
-						result.push.apply( result, ret );
-					}
-
-					return false;
-				}
-
-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-				return true;
-			}
-			
-			return match;
-		},
-
-		POS: function( match ) {
-			match.unshift( true );
-
-			return match;
-		}
-	},
-	
-	filters: {
-		enabled: function( elem ) {
-			return elem.disabled === false && elem.type !== "hidden";
-		},
-
-		disabled: function( elem ) {
-			return elem.disabled === true;
-		},
-
-		checked: function( elem ) {
-			return elem.checked === true;
-		},
-		
-		selected: function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-			
-			return elem.selected === true;
-		},
-
-		parent: function( elem ) {
-			return !!elem.firstChild;
-		},
-
-		empty: function( elem ) {
-			return !elem.firstChild;
-		},
-
-		has: function( elem, i, match ) {
-			return !!Sizzle( match[3], elem ).length;
-		},
-
-		header: function( elem ) {
-			return (/h\d/i).test( elem.nodeName );
-		},
-
-		text: function( elem ) {
-			var attr = elem.getAttribute( "type" ), type = elem.type;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-		},
-
-		radio: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-		},
-
-		checkbox: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-		},
-
-		file: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-		},
-
-		password: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-		},
-
-		submit: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "submit" === elem.type;
-		},
-
-		image: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-		},
-
-		reset: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "reset" === elem.type;
-		},
-
-		button: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && "button" === elem.type || name === "button";
-		},
-
-		input: function( elem ) {
-			return (/input|select|textarea|button/i).test( elem.nodeName );
-		},
-
-		focus: function( elem ) {
-			return elem === elem.ownerDocument.activeElement;
-		}
-	},
-	setFilters: {
-		first: function( elem, i ) {
-			return i === 0;
-		},
-
-		last: function( elem, i, match, array ) {
-			return i === array.length - 1;
-		},
-
-		even: function( elem, i ) {
-			return i % 2 === 0;
-		},
-
-		odd: function( elem, i ) {
-			return i % 2 === 1;
-		},
-
-		lt: function( elem, i, match ) {
-			return i < match[3] - 0;
-		},
-
-		gt: function( elem, i, match ) {
-			return i > match[3] - 0;
-		},
-
-		nth: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		},
-
-		eq: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		}
-	},
-	filter: {
-		PSEUDO: function( elem, match, i, array ) {
-			var name = match[1],
-				filter = Expr.filters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-
-			} else if ( name === "contains" ) {
-				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var j = 0, l = not.length; j < l; j++ ) {
-					if ( not[j] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-
-			} else {
-				Sizzle.error( name );
-			}
-		},
-
-		CHILD: function( elem, match ) {
-			var first, last,
-				doneName, parent, cache,
-				count, diff,
-				type = match[1],
-				node = elem;
-
-			switch ( type ) {
-				case "only":
-				case "first":
-					while ( (node = node.previousSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					if ( type === "first" ) { 
-						return true; 
-					}
-
-					node = elem;
-
-				case "last":
-					while ( (node = node.nextSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					return true;
-
-				case "nth":
-					first = match[2];
-					last = match[3];
-
-					if ( first === 1 && last === 0 ) {
-						return true;
-					}
-					
-					doneName = match[0];
-					parent = elem.parentNode;
-	
-					if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
-						count = 0;
-						
-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
-							if ( node.nodeType === 1 ) {
-								node.nodeIndex = ++count;
-							}
-						} 
-
-						parent[ expando ] = doneName;
-					}
-					
-					diff = elem.nodeIndex - last;
-
-					if ( first === 0 ) {
-						return diff === 0;
-
-					} else {
-						return ( diff % first === 0 && diff / first >= 0 );
-					}
-			}
-		},
-
-		ID: function( elem, match ) {
-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
-		},
-
-		TAG: function( elem, match ) {
-			return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
-		},
-		
-		CLASS: function( elem, match ) {
-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
-				.indexOf( match ) > -1;
-		},
-
-		ATTR: function( elem, match ) {
-			var name = match[1],
-				result = Sizzle.attr ?
-					Sizzle.attr( elem, name ) :
-					Expr.attrHandle[ name ] ?
-					Expr.attrHandle[ name ]( elem ) :
-					elem[ name ] != null ?
-						elem[ name ] :
-						elem.getAttribute( name ),
-				value = result + "",
-				type = match[2],
-				check = match[4];
-
-			return result == null ?
-				type === "!=" :
-				!type && Sizzle.attr ?
-				result != null :
-				type === "=" ?
-				value === check :
-				type === "*=" ?
-				value.indexOf(check) >= 0 :
-				type === "~=" ?
-				(" " + value + " ").indexOf(check) >= 0 :
-				!check ?
-				value && result !== false :
-				type === "!=" ?
-				value !== check :
-				type === "^=" ?
-				value.indexOf(check) === 0 :
-				type === "$=" ?
-				value.substr(value.length - check.length) === check :
-				type === "|=" ?
-				value === check || value.substr(0, check.length + 1) === check + "-" :
-				false;
-		},
-
-		POS: function( elem, match, i, array ) {
-			var name = match[2],
-				filter = Expr.setFilters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			}
-		}
-	}
-};
-
-var origPOS = Expr.match.POS,
-	fescape = function(all, num){
-		return "\\" + (num - 0 + 1);
-	};
-
-for ( var type in Expr.match ) {
-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
-	array = Array.prototype.slice.call( array, 0 );
-
-	if ( results ) {
-		results.push.apply( results, array );
-		return results;
-	}
-	
-	return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-	makeArray = function( array, results ) {
-		var i = 0,
-			ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-
-			} else {
-				for ( ; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-			return a.compareDocumentPosition ? -1 : 1;
-		}
-
-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-	};
-
-} else {
-	sortOrder = function( a, b ) {
-		// The nodes are identical, we can exit early
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
-		} else if ( a.sourceIndex && b.sourceIndex ) {
-			return a.sourceIndex - b.sourceIndex;
-		}
-
-		var al, bl,
-			ap = [],
-			bp = [],
-			aup = a.parentNode,
-			bup = b.parentNode,
-			cur = aup;
-
-		// If the nodes are siblings (or identical) we can do a quick check
-		if ( aup === bup ) {
-			return siblingCheck( a, b );
-
-		// If no parents were found then the nodes are disconnected
-		} else if ( !aup ) {
-			return -1;
-
-		} else if ( !bup ) {
-			return 1;
-		}
-
-		// Otherwise they're somewhere else in the tree so we need
-		// to build up a full list of the parentNodes for comparison
-		while ( cur ) {
-			ap.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		cur = bup;
-
-		while ( cur ) {
-			bp.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		al = ap.length;
-		bl = bp.length;
-
-		// Start walking down the tree looking for a discrepancy
-		for ( var i = 0; i < al && i < bl; i++ ) {
-			if ( ap[i] !== bp[i] ) {
-				return siblingCheck( ap[i], bp[i] );
-			}
-		}
-
-		// We ended someplace up the tree so do a sibling check
-		return i === al ?
-			siblingCheck( a, bp[i], -1 ) :
-			siblingCheck( ap[i], b, 1 );
-	};
-
-	siblingCheck = function( a, b, ret ) {
-		if ( a === b ) {
-			return ret;
-		}
-
-		var cur = a.nextSibling;
-
-		while ( cur ) {
-			if ( cur === b ) {
-				return -1;
-			}
-
-			cur = cur.nextSibling;
-		}
-
-		return 1;
-	};
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-	// We're going to inject a fake input element with a specified name
-	var form = document.createElement("div"),
-		id = "script" + (new Date()).getTime(),
-		root = document.documentElement;
-
-	form.innerHTML = "<a name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	root.insertBefore( form, root.firstChild );
-
-	// The workaround has to do additional checks after a getElementById
-	// Which slows things down for other browsers (hence the branching)
-	if ( document.getElementById( id ) ) {
-		Expr.find.ID = function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-
-				return m ?
-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-						[m] :
-						undefined :
-					[];
-			}
-		};
-
-		Expr.filter.ID = function( elem, match ) {
-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-			return elem.nodeType === 1 && node && node.nodeValue === match;
-		};
-	}
-
-	root.removeChild( form );
-
-	// release memory in IE
-	root = form = null;
-})();
-
-(function(){
-	// Check to see if the browser returns only elements
-	// when doing getElementsByTagName("*")
-
-	// Create a fake element
-	var div = document.createElement("div");
-	div.appendChild( document.createComment("") );
-
-	// Make sure no comments are found
-	if ( div.getElementsByTagName("*").length > 0 ) {
-		Expr.find.TAG = function( match, context ) {
-			var results = context.getElementsByTagName( match[1] );
-
-			// Filter out possible comments
-			if ( match[1] === "*" ) {
-				var tmp = [];
-
-				for ( var i = 0; results[i]; i++ ) {
-					if ( results[i].nodeType === 1 ) {
-						tmp.push( results[i] );
-					}
-				}
-
-				results = tmp;
-			}
-
-			return results;
-		};
-	}
-
-	// Check to see if an attribute returns normalized href attributes
-	div.innerHTML = "<a href='#'></a>";
-
-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-			div.firstChild.getAttribute("href") !== "#" ) {
-
-		Expr.attrHandle.href = function( elem ) {
-			return elem.getAttribute( "href", 2 );
-		};
-	}
-
-	// release memory in IE
-	div = null;
-})();
-
-if ( document.querySelectorAll ) {
-	(function(){
-		var oldSizzle = Sizzle,
-			div = document.createElement("div"),
-			id = "__sizzle__";
-
-		div.innerHTML = "<p class='TEST'></p>";
-
-		// Safari can't handle uppercase or unicode characters when
-		// in quirks mode.
-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-			return;
-		}
-	
-		Sizzle = function( query, context, extra, seed ) {
-			context = context || document;
-
-			// Only use querySelectorAll on non-XML documents
-			// (ID selectors don't work in non-HTML documents)
-			if ( !seed && !Sizzle.isXML(context) ) {
-				// See if we find a selector to speed up
-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-				
-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-					// Speed-up: Sizzle("TAG")
-					if ( match[1] ) {
-						return makeArray( context.getElementsByTagName( query ), extra );
-					
-					// Speed-up: Sizzle(".CLASS")
-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-						return makeArray( context.getElementsByClassName( match[2] ), extra );
-					}
-				}
-				
-				if ( context.nodeType === 9 ) {
-					// Speed-up: Sizzle("body")
-					// The body element only exists once, optimize finding it
-					if ( query === "body" && context.body ) {
-						return makeArray( [ context.body ], extra );
-						
-					// Speed-up: Sizzle("#ID")
-					} else if ( match && match[3] ) {
-						var elem = context.getElementById( match[3] );
-
-						// Check parentNode to catch when Blackberry 4.6 returns
-						// nodes that are no longer in the document #6963
-						if ( elem && elem.parentNode ) {
-							// Handle the case where IE and Opera return items
-							// by name instead of ID
-							if ( elem.id === match[3] ) {
-								return makeArray( [ elem ], extra );
-							}
-							
-						} else {
-							return makeArray( [], extra );
-						}
-					}
-					
-					try {
-						return makeArray( context.querySelectorAll(query), extra );
-					} catch(qsaError) {}
-
-				// qSA works strangely on Element-rooted queries
-				// We can work around this by specifying an extra ID on the root
-				// and working up from there (Thanks to Andrew Dupont for the technique)
-				// IE 8 doesn't work on object elements
-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-					var oldContext = context,
-						old = context.getAttribute( "id" ),
-						nid = old || id,
-						hasParent = context.parentNode,
-						relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-					if ( !old ) {
-						context.setAttribute( "id", nid );
-					} else {
-						nid = nid.replace( /'/g, "\\$&" );
-					}
-					if ( relativeHierarchySelector && hasParent ) {
-						context = context.parentNode;
-					}
-
-					try {
-						if ( !relativeHierarchySelector || hasParent ) {
-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-						}
-
-					} catch(pseudoError) {
-					} finally {
-						if ( !old ) {
-							oldContext.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-		
-			return oldSizzle(query, context, extra, seed);
-		};
-
-		for ( var prop in oldSizzle ) {
-			Sizzle[ prop ] = oldSizzle[ prop ];
-		}
-
-		// release memory in IE
-		div = null;
-	})();
-}
-
-(function(){
-	var html = document.documentElement,
-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-	if ( matches ) {
-		// Check to see if it's possible to do matchesSelector
-		// on a disconnected node (IE 9 fails this)
-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-			pseudoWorks = false;
-
-		try {
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( document.documentElement, "[test!='']:sizzle" );
-	
-		} catch( pseudoError ) {
-			pseudoWorks = true;
-		}
-
-		Sizzle.matchesSelector = function( node, expr ) {
-			// Make sure that attribute selectors are quoted
-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-			if ( !Sizzle.isXML( node ) ) {
-				try { 
-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-						var ret = matches.call( node, expr );
-
-						// IE 9's matchesSelector returns false on disconnected nodes
-						if ( ret || !disconnectedMatch ||
-								// As well, disconnected nodes are said to be in a document
-								// fragment in IE 9, so check for that
-								node.document && node.document.nodeType !== 11 ) {
-							return ret;
-						}
-					}
-				} catch(e) {}
-			}
-
-			return Sizzle(expr, null, null, [node]).length > 0;
-		};
-	}
-})();
-
-(function(){
-	var div = document.createElement("div");
-
-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-	// Opera can't find a second classname (in 9.6)
-	// Also, make sure that getElementsByClassName actually exists
-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-		return;
-	}
-
-	// Safari caches class attributes, doesn't catch changes (in 3.2)
-	div.lastChild.className = "e";
-
-	if ( div.getElementsByClassName("e").length === 1 ) {
-		return;
-	}
-	
-	Expr.order.splice(1, 0, "CLASS");
-	Expr.find.CLASS = function( match, context, isXML ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-			return context.getElementsByClassName(match[1]);
-		}
-	};
-
-	// release memory in IE
-	div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 && !isXML ){
-					elem[ expando ] = doneName;
-					elem.sizset = i;
-				}
-
-				if ( elem.nodeName.toLowerCase() === cur ) {
-					match = elem;
-					break;
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-			
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem[ expando ] === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 ) {
-					if ( !isXML ) {
-						elem[ expando ] = doneName;
-						elem.sizset = i;
-					}
-
-					if ( typeof cur !== "string" ) {
-						if ( elem === cur ) {
-							match = true;
-							break;
-						}
-
-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-						match = elem;
-						break;
-					}
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-if ( document.documentElement.contains ) {
-	Sizzle.contains = function( a, b ) {
-		return a !== b && (a.contains ? a.contains(b) : true);
-	};
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-	Sizzle.contains = function( a, b ) {
-		return !!(a.compareDocumentPosition(b) & 16);
-	};
-
-} else {
-	Sizzle.contains = function() {
-		return false;
-	};
-}
-
-Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833) 
-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
-	var match,
-		tmpSet = [],
-		later = "",
-		root = context.nodeType ? [context] : context;
-
-	// Position selectors must be done after the filter
-	// And so must :not(positional) so we move all PSEUDOs to the end
-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-		later += match[0];
-		selector = selector.replace( Expr.match.PSEUDO, "" );
-	}
-
-	selector = Expr.relative[selector] ? selector + "*" : selector;
-
-	for ( var i = 0, l = root.length; i < l; i++ ) {
-		Sizzle( selector, root[i], tmpSet, seed );
-	}
-
-	return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-	// Note: This RegExp should be improved, or likely pulled from Sizzle
-	rmultiselector = /,/,
-	isSimple = /^.[^:#\[\.,]*$/,
-	slice = Array.prototype.slice,
-	POS = jQuery.expr.match.POS,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var self = this,
-			i, l;
-
-		if ( typeof selector !== "string" ) {
-			return jQuery( selector ).filter(function() {
-				for ( i = 0, l = self.length; i < l; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			});
-		}
-
-		var ret = this.pushStack( "", "find", selector ),
-			length, n, r;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			length = ret.length;
-			jQuery.find( selector, this[i], ret );
-
-			if ( i > 0 ) {
-				// Make sure that the results are unique
-				for ( n = length; n < ret.length; n++ ) {
-					for ( r = 0; r < length; r++ ) {
-						if ( ret[r] === ret[n] ) {
-							ret.splice(n--, 1);
-							break;
-						}
-					}
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	has: function( target ) {
-		var targets = jQuery( target );
-		return this.filter(function() {
-			for ( var i = 0, l = targets.length; i < l; i++ ) {
-				if ( jQuery.contains( this, targets[i] ) ) {
-					return true;
-				}
-			}
-		});
-	},
-
-	not: function( selector ) {
-		return this.pushStack( winnow(this, selector, false), "not", selector);
-	},
-
-	filter: function( selector ) {
-		return this.pushStack( winnow(this, selector, true), "filter", selector );
-	},
-
-	is: function( selector ) {
-		return !!selector && ( 
-			typeof selector === "string" ?
-				// If this is a positional selector, check membership in the returned set
-				// so $("p:first").is("p:last") won't return true for a doc with two "p".
-				POS.test( selector ) ? 
-					jQuery( selector, this.context ).index( this[0] ) >= 0 :
-					jQuery.filter( selector, this ).length > 0 :
-				this.filter( selector ).length > 0 );
-	},
-
-	closest: function( selectors, context ) {
-		var ret = [], i, l, cur = this[0];
-		
-		// Array (deprecated as of jQuery 1.7)
-		if ( jQuery.isArray( selectors ) ) {
-			var level = 1;
-
-			while ( cur && cur.ownerDocument && cur !== context ) {
-				for ( i = 0; i < selectors.length; i++ ) {
-
-					if ( jQuery( cur ).is( selectors[ i ] ) ) {
-						ret.push({ selector: selectors[ i ], elem: cur, level: level });
-					}
-				}
-
-				cur = cur.parentNode;
-				level++;
-			}
-
-			return ret;
-		}
-
-		// String
-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			cur = this[i];
-
-			while ( cur ) {
-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-					ret.push( cur );
-					break;
-
-				} else {
-					cur = cur.parentNode;
-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-						break;
-					}
-				}
-			}
-		}
-
-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-		return this.pushStack( ret, "closest", selectors );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-
-		// No argument, return index in parent
-		if ( !elem ) {
-			return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-		}
-
-		// index in selector
-		if ( typeof elem === "string" ) {
-			return jQuery.inArray( this[0], jQuery( elem ) );
-		}
-
-		// Locate the position of the desired element
-		return jQuery.inArray(
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[0] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		var set = typeof selector === "string" ?
-				jQuery( selector, context ) :
-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-			all = jQuery.merge( this.get(), set );
-
-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-			all :
-			jQuery.unique( all ) );
-	},
-
-	andSelf: function() {
-		return this.add( this.prevObject );
-	}
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return jQuery.dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return jQuery.nth( elem, 2, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return jQuery.nth( elem, 2, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return jQuery.dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return jQuery.dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return jQuery.sibling( elem.parentNode.firstChild, elem );
-	},
-	children: function( elem ) {
-		return jQuery.sibling( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.makeArray( elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until );
-
-		if ( !runtil.test( name ) ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-			ret = ret.reverse();
-		}
-
-		return this.pushStack( ret, name, slice.call( arguments ).join(",") );
-	};
-});
-
-jQuery.extend({
-	filter: function( expr, elems, not ) {
-		if ( not ) {
-			expr = ":not(" + expr + ")";
-		}
-
-		return elems.length === 1 ?
-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-			jQuery.find.matches(expr, elems);
-	},
-
-	dir: function( elem, dir, until ) {
-		var matched = [],
-			cur = elem[ dir ];
-
-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-			if ( cur.nodeType === 1 ) {
-				matched.push( cur );
-			}
-			cur = cur[dir];
-		}
-		return matched;
-	},
-
-	nth: function( cur, result, dir, elem ) {
-		result = result || 1;
-		var num = 0;
-
-		for ( ; cur; cur = cur[dir] ) {
-			if ( cur.nodeType === 1 && ++num === result ) {
-				break;
-			}
-		}
-
-		return cur;
-	},
-
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType === 1 && n !== elem ) {
-				r.push( n );
-			}
-		}
-
-		return r;
-	}
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-	// Can't pass null or undefined to indexOf in Firefox 4
-	// Set to 0 to skip string check
-	qualifier = qualifier || 0;
-
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			var retVal = !!qualifier.call( elem, i, elem );
-			return retVal === keep;
-		});
-
-	} else if ( qualifier.nodeType ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			return ( elem === qualifier ) === keep;
-		});
-
-	} else if ( typeof qualifier === "string" ) {
-		var filtered = jQuery.grep(elements, function( elem ) {
-			return elem.nodeType === 1;
-		});
-
-		if ( isSimple.test( qualifier ) ) {
-			return jQuery.filter(qualifier, filtered, !keep);
-		} else {
-			qualifier = jQuery.filter( qualifier, filtered );
-		}
-	}
-
-	return jQuery.grep(elements, function( elem, i ) {
-		return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
-	});
-}
-
-
-
-
-function createSafeFragment( document ) {
-	var list = nodeNames.split( "|" ),
-	safeFrag = document.createDocumentFragment();
-
-	if ( safeFrag.createElement ) {
-		while ( list.length ) {
-			safeFrag.createElement(
-				list.pop()
-			);
-		}
-	}
-	return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
-		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-	rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnoInnerhtml = /<(?:script|style)/i,
-	rnocache = /<(?:script|object|embed|option|style)/i,
-	rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /\/(java|ecma)script/i,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-	wrapMap = {
-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
-		legend: [ 1, "<fieldset>", "</fieldset>" ],
-		thead: [ 1, "<table>", "</table>" ],
-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-		area: [ 1, "<map>", "</map>" ],
-		_default: [ 0, "", "" ]
-	},
-	safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-	wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-	text: function( text ) {
-		if ( jQuery.isFunction(text) ) {
-			return this.each(function(i) {
-				var self = jQuery( this );
-
-				self.text( text.call(this, i, self.text()) );
-			});
-		}
-
-		if ( typeof text !== "object" && text !== undefined ) {
-			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
-		}
-
-		return jQuery.text( this );
-	},
-
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapAll( html.call(this, i) );
-			});
-		}
-
-		if ( this[0] ) {
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-			if ( this[0].parentNode ) {
-				wrap.insertBefore( this[0] );
-			}
-
-			wrap.map(function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			}).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapInner( html.call(this, i) );
-			});
-		}
-
-		return this.each(function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		});
-	},
-
-	wrap: function( html ) {
-		var isFunction = jQuery.isFunction( html );
-
-		return this.each(function(i) {
-			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-		});
-	},
-
-	unwrap: function() {
-		return this.parent().each(function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		}).end();
-	},
-
-	append: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.appendChild( elem );
-			}
-		});
-	},
-
-	prepend: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.insertBefore( elem, this.firstChild );
-			}
-		});
-	},
-
-	before: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this );
-			});
-		} else if ( arguments.length ) {
-			var set = jQuery.clean( arguments );
-			set.push.apply( set, this.toArray() );
-			return this.pushStack( set, "before", arguments );
-		}
-	},
-
-	after: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			});
-		} else if ( arguments.length ) {
-			var set = this.pushStack( this, "after", arguments );
-			set.push.apply( set, jQuery.clean(arguments) );
-			return set;
-		}
-	},
-
-	// keepData is for internal use only--do not document
-	remove: function( selector, keepData ) {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-				if ( !keepData && elem.nodeType === 1 ) {
-					jQuery.cleanData( elem.getElementsByTagName("*") );
-					jQuery.cleanData( [ elem ] );
-				}
-
-				if ( elem.parentNode ) {
-					elem.parentNode.removeChild( elem );
-				}
-			}
-		}
-
-		return this;
-	},
-
-	empty: function() {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( elem.getElementsByTagName("*") );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function () {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	html: function( value ) {
-		if ( value === undefined ) {
-			return this[0] && this[0].nodeType === 1 ?
-				this[0].innerHTML.replace(rinlinejQuery, "") :
-				null;
-
-		// See if we can take a shortcut and just use innerHTML
-		} else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
-			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
-			value = value.replace(rxhtmlTag, "<$1></$2>");
-
-			try {
-				for ( var i = 0, l = this.length; i < l; i++ ) {
-					// Remove element nodes and prevent memory leaks
-					if ( this[i].nodeType === 1 ) {
-						jQuery.cleanData( this[i].getElementsByTagName("*") );
-						this[i].innerHTML = value;
-					}
-				}
-
-			// If using innerHTML throws an exception, use the fallback method
-			} catch(e) {
-				this.empty().append( value );
-			}
-
-		} else if ( jQuery.isFunction( value ) ) {
-			this.each(function(i){
-				var self = jQuery( this );
-
-				self.html( value.call(this, i, self.html()) );
-			});
-
-		} else {
-			this.empty().append( value );
-		}
-
-		return this;
-	},
-
-	replaceWith: function( value ) {
-		if ( this[0] && this[0].parentNode ) {
-			// Make sure that the elements are removed from the DOM before they are inserted
-			// this can help fix replacing a parent with child elements
-			if ( jQuery.isFunction( value ) ) {
-				return this.each(function(i) {
-					var self = jQuery(this), old = self.html();
-					self.replaceWith( value.call( this, i, old ) );
-				});
-			}
-
-			if ( typeof value !== "string" ) {
-				value = jQuery( value ).detach();
-			}
-
-			return this.each(function() {
-				var next = this.nextSibling,
-					parent = this.parentNode;
-
-				jQuery( this ).remove();
-
-				if ( next ) {
-					jQuery(next).before( value );
-				} else {
-					jQuery(parent).append( value );
-				}
-			});
-		} else {
-			return this.length ?
-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-				this;
-		}
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, table, callback ) {
-		var results, first, fragment, parent,
-			value = args[0],
-			scripts = [];
-
-		// We can't cloneNode fragments that contain checked, in WebKit
-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-			return this.each(function() {
-				jQuery(this).domManip( args, table, callback, true );
-			});
-		}
-
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				args[0] = value.call(this, i, table ? self.html() : undefined);
-				self.domManip( args, table, callback );
-			});
-		}
-
-		if ( this[0] ) {
-			parent = value && value.parentNode;
-
-			// If we're in a fragment, just use that instead of building a new one
-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-				results = { fragment: parent };
-
-			} else {
-				results = jQuery.buildFragment( args, this, scripts );
-			}
-
-			fragment = results.fragment;
-
-			if ( fragment.childNodes.length === 1 ) {
-				first = fragment = fragment.firstChild;
-			} else {
-				first = fragment.firstChild;
-			}
-
-			if ( first ) {
-				table = table && jQuery.nodeName( first, "tr" );
-
-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-					callback.call(
-						table ?
-							root(this[i], first) :
-							this[i],
-						// Make sure that we do not leak memory by inadvertently discarding
-						// the original fragment (which might have attached data) instead of
-						// using it; in addition, use the original fragment object for the last
-						// item instead of first because it can end up being emptied incorrectly
-						// in certain situations (Bug #8070).
-						// Fragments from the fragment cache must always be cloned and never used
-						// in place.
-						results.cacheable || ( l > 1 && i < lastIndex ) ?
-							jQuery.clone( fragment, true, true ) :
-							fragment
-					);
-				}
-			}
-
-			if ( scripts.length ) {
-				jQuery.each( scripts, evalScript );
-			}
-		}
-
-		return this;
-	}
-});
-
-function root( elem, cur ) {
-	return jQuery.nodeName(elem, "table") ?
-		(elem.getElementsByTagName("tbody")[0] ||
-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-		elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var type, i, l,
-		oldData = jQuery._data( src ),
-		curData = jQuery._data( dest, oldData ),
-		events = oldData.events;
-
-	if ( events ) {
-		delete curData.handle;
-		curData.events = {};
-
-		for ( type in events ) {
-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-				jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
-			}
-		}
-	}
-
-	// make the cloned public data object a copy from the original
-	if ( curData.data ) {
-		curData.data = jQuery.extend( {}, curData.data );
-	}
-}
-
-function cloneFixAttributes( src, dest ) {
-	var nodeName;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// clearAttributes removes the attributes, which we don't want,
-	// but also removes the attachEvent events, which we *do* want
-	if ( dest.clearAttributes ) {
-		dest.clearAttributes();
-	}
-
-	// mergeAttributes, in contrast, only merges back on the
-	// original attributes, not the events
-	if ( dest.mergeAttributes ) {
-		dest.mergeAttributes( src );
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 fail to clone children inside object elements that use
-	// the proprietary classid attribute value (rather than the type
-	// attribute) to identify the type of content to display
-	if ( nodeName === "object" ) {
-		dest.outerHTML = src.outerHTML;
-
-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-		if ( src.checked ) {
-			dest.defaultChecked = dest.checked = src.checked;
-		}
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-
-	// Event data gets referenced instead of copied if the expando
-	// gets copied too
-	dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-	var fragment, cacheable, cacheresults, doc,
-	first = args[ 0 ];
-
-	// nodes may contain either an explicit document object,
-	// a jQuery collection or context object.
-	// If nodes[0] contains a valid object to assign to doc
-	if ( nodes && nodes[0] ) {
-		doc = nodes[0].ownerDocument || nodes[0];
-	}
-
-	// Ensure that an attr object doesn't incorrectly stand in as a document object
-	// Chrome and Firefox seem to allow this to occur and will throw exception
-	// Fixes #8950
-	if ( !doc.createDocumentFragment ) {
-		doc = document;
-	}
-
-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-	// Cloning options loses the selected state, so don't cache them
-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-	// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-	if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
-		first.charAt(0) === "<" && !rnocache.test( first ) &&
-		(jQuery.support.checkClone || !rchecked.test( first )) &&
-		(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
-		cacheable = true;
-
-		cacheresults = jQuery.fragments[ first ];
-		if ( cacheresults && cacheresults !== 1 ) {
-			fragment = cacheresults;
-		}
-	}
-
-	if ( !fragment ) {
-		fragment = doc.createDocumentFragment();
-		jQuery.clean( args, doc, fragment, scripts );
-	}
-
-	if ( cacheable ) {
-		jQuery.fragments[ first ] = cacheresults ? fragment : 1;
-	}
-
-	return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var ret = [],
-			insert = jQuery( selector ),
-			parent = this.length === 1 && this[0].parentNode;
-
-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-			insert[ original ]( this[0] );
-			return this;
-
-		} else {
-			for ( var i = 0, l = insert.length; i < l; i++ ) {
-				var elems = ( i > 0 ? this.clone(true) : this ).get();
-				jQuery( insert[i] )[ original ]( elems );
-				ret = ret.concat( elems );
-			}
-
-			return this.pushStack( ret, name, insert.selector );
-		}
-	};
-});
-
-function getAll( elem ) {
-	if ( typeof elem.getElementsByTagName !== "undefined" ) {
-		return elem.getElementsByTagName( "*" );
-
-	} else if ( typeof elem.querySelectorAll !== "undefined" ) {
-		return elem.querySelectorAll( "*" );
-
-	} else {
-		return [];
-	}
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-	var nodeName = ( elem.nodeName || "" ).toLowerCase();
-	if ( nodeName === "input" ) {
-		fixDefaultChecked( elem );
-	// Skip scripts, get other children
-	} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-	}
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
-	var div = document.createElement( "div" );
-	safeFragment.appendChild( div );
-
-	div.innerHTML = elem.outerHTML;
-	return div.firstChild;
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var srcElements,
-			destElements,
-			i,
-			// IE<=8 does not properly clone detached, unknown element nodes
-			clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
-				elem.cloneNode( true ) :
-				shimCloneNode( elem );
-
-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-			// IE copies events bound via attachEvent when using cloneNode.
-			// Calling detachEvent on the clone will also remove the events
-			// from the original. In order to get around this, we use some
-			// proprietary methods to clear the events. Thanks to MooTools
-			// guys for this hotness.
-
-			cloneFixAttributes( elem, clone );
-
-			// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
-			srcElements = getAll( elem );
-			destElements = getAll( clone );
-
-			// Weird iteration because IE will replace the length property
-			// with an element if you are cloning the body and one of the
-			// elements on the page has a name or id of "length"
-			for ( i = 0; srcElements[i]; ++i ) {
-				// Ensure that the destination node is not null; Fixes #9587
-				if ( destElements[i] ) {
-					cloneFixAttributes( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			cloneCopyEvent( elem, clone );
-
-			if ( deepDataAndEvents ) {
-				srcElements = getAll( elem );
-				destElements = getAll( clone );
-
-				for ( i = 0; srcElements[i]; ++i ) {
-					cloneCopyEvent( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		srcElements = destElements = null;
-
-		// Return the cloned set
-		return clone;
-	},
-
-	clean: function( elems, context, fragment, scripts ) {
-		var checkScriptType;
-
-		context = context || document;
-
-		// !context.createElement fails in IE with an error but returns typeof 'object'
-		if ( typeof context.createElement === "undefined" ) {
-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-		}
-
-		var ret = [], j;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( typeof elem === "number" ) {
-				elem += "";
-			}
-
-			if ( !elem ) {
-				continue;
-			}
-
-			// Convert html string into DOM nodes
-			if ( typeof elem === "string" ) {
-				if ( !rhtml.test( elem ) ) {
-					elem = context.createTextNode( elem );
-				} else {
-					// Fix "XHTML"-style tags in all browsers
-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-					// Trim whitespace, otherwise indexOf won't work as expected
-					var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
-						wrap = wrapMap[ tag ] || wrapMap._default,
-						depth = wrap[0],
-						div = context.createElement("div");
-
-					// Append wrapper element to unknown element safe doc fragment
-					if ( context === document ) {
-						// Use the fragment we've already created for this document
-						safeFragment.appendChild( div );
-					} else {
-						// Use a fragment created with the owner document
-						createSafeFragment( context ).appendChild( div );
-					}
-
-					// Go to html and back, then peel off extra wrappers
-					div.innerHTML = wrap[1] + elem + wrap[2];
-
-					// Move to the right depth
-					while ( depth-- ) {
-						div = div.lastChild;
-					}
-
-					// Remove IE's autoinserted <tbody> from table fragments
-					if ( !jQuery.support.tbody ) {
-
-						// String was a <table>, *may* have spurious <tbody>
-						var hasBody = rtbody.test(elem),
-							tbody = tag === "table" && !hasBody ?
-								div.firstChild && div.firstChild.childNodes :
-
-								// String was a bare <thead> or <tfoot>
-								wrap[1] === "<table>" && !hasBody ?
-									div.childNodes :
-									[];
-
-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
-							}
-						}
-					}
-
-					// IE completely kills leading whitespace when innerHTML is used
-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-					}
-
-					elem = div.childNodes;
-				}
-			}
-
-			// Resets defaultChecked for any radios and checkboxes
-			// about to be appended to the DOM in IE 6/7 (#8060)
-			var len;
-			if ( !jQuery.support.appendChecked ) {
-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
-					for ( j = 0; j < len; j++ ) {
-						findInputs( elem[j] );
-					}
-				} else {
-					findInputs( elem );
-				}
-			}
-
-			if ( elem.nodeType ) {
-				ret.push( elem );
-			} else {
-				ret = jQuery.merge( ret, elem );
-			}
-		}
-
-		if ( fragment ) {
-			checkScriptType = function( elem ) {
-				return !elem.type || rscriptType.test( elem.type );
-			};
-			for ( i = 0; ret[i]; i++ ) {
-				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
-					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
-				} else {
-					if ( ret[i].nodeType === 1 ) {
-						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-					}
-					fragment.appendChild( ret[i] );
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	cleanData: function( elems ) {
-		var data, id,
-			cache = jQuery.cache,
-			special = jQuery.event.special,
-			deleteExpando = jQuery.support.deleteExpando;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-				continue;
-			}
-
-			id = elem[ jQuery.expando ];
-
-			if ( id ) {
-				data = cache[ id ];
-
-				if ( data && data.events ) {
-					for ( var type in data.events ) {
-						if ( special[ type ] ) {
-							jQuery.event.remove( elem, type );
-
-						// This is a shortcut to avoid jQuery.event.remove's overhead
-						} else {
-							jQuery.removeEvent( elem, type, data.handle );
-						}
-					}
-
-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
-					if ( data.handle ) {
-						data.handle.elem = null;
-					}
-				}
-
-				if ( deleteExpando ) {
-					delete elem[ jQuery.expando ];
-
-				} else if ( elem.removeAttribute ) {
-					elem.removeAttribute( jQuery.expando );
-				}
-
-				delete cache[ id ];
-			}
-		}
-	}
-});
-
-function evalScript( i, elem ) {
-	if ( elem.src ) {
-		jQuery.ajax({
-			url: elem.src,
-			async: false,
-			dataType: "script"
-		});
-	} else {
-		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
-	}
-
-	if ( elem.parentNode ) {
-		elem.parentNode.removeChild( elem );
-	}
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity=([^)]*)/,
-	// fixed for IE9, see #8346
-	rupper = /([A-Z]|^ms)/g,
-	rnumpx = /^-?\d+(?:px)?$/i,
-	rnum = /^-?\d/,
-	rrelNum = /^([\-+])=([\-+.\de]+)/,
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssWidth = [ "Left", "Right" ],
-	cssHeight = [ "Top", "Bottom" ],
-	curCSS,
-
-	getComputedStyle,
-	currentStyle;
-
-jQuery.fn.css = function( name, value ) {
-	// Setting 'undefined' is a no-op
-	if ( arguments.length === 2 && value === undefined ) {
-		return this;
-	}
-
-	return jQuery.access( this, name, value, true, function( elem, name, value ) {
-		return value !== undefined ?
-			jQuery.style( elem, name, value ) :
-			jQuery.css( elem, name );
-	});
-};
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity", "opacity" );
-					return ret === "" ? "1" : ret;
-
-				} else {
-					return elem.style.opacity;
-				}
-			}
-		}
-	},
-
-	// Exclude the following css properties to add px
-	cssNumber: {
-		"fillOpacity": true,
-		"fontWeight": true,
-		"lineHeight": true,
-		"opacity": true,
-		"orphans": true,
-		"widows": true,
-		"zIndex": true,
-		"zoom": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, origName = jQuery.camelCase( name ),
-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-		name = jQuery.cssProps[ origName ] || origName;
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-				value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
-				// Fixes bug #9237
-				type = "number";
-			}
-
-			// Make sure that NaN and null values aren't set. See: #7116
-			if ( value == null || type === "number" && isNaN( value ) ) {
-				return;
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-				// Fixes bug #5509
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra ) {
-		var ret, hooks;
-
-		// Make sure that we're working with the right name
-		name = jQuery.camelCase( name );
-		hooks = jQuery.cssHooks[ name ];
-		name = jQuery.cssProps[ name ] || name;
-
-		// cssFloat needs a special treatment
-		if ( name === "cssFloat" ) {
-			name = "float";
-		}
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-			return ret;
-
-		// Otherwise, if a way to get the computed value exists, use that
-		} else if ( curCSS ) {
-			return curCSS( elem, name );
-		}
-	},
-
-	// A method for quickly swapping in/out CSS properties to get correct calculations
-	swap: function( elem, options, callback ) {
-		var old = {};
-
-		// Remember the old values, and insert the new ones
-		for ( var name in options ) {
-			old[ name ] = elem.style[ name ];
-			elem.style[ name ] = options[ name ];
-		}
-
-		callback.call( elem );
-
-		// Revert the old values
-		for ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-	}
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			var val;
-
-			if ( computed ) {
-				if ( elem.offsetWidth !== 0 ) {
-					return getWH( elem, name, extra );
-				} else {
-					jQuery.swap( elem, cssShow, function() {
-						val = getWH( elem, name, extra );
-					});
-				}
-
-				return val;
-			}
-		},
-
-		set: function( elem, value ) {
-			if ( rnumpx.test( value ) ) {
-				// ignore negative width and height values #1599
-				value = parseFloat( value );
-
-				if ( value >= 0 ) {
-					return value + "px";
-				}
-
-			} else {
-				return value;
-			}
-		}
-	};
-});
-
-if ( !jQuery.support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle,
-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-			if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
-				// style.removeAttribute is IE Only, but so apparently is this code path...
-				style.removeAttribute( "filter" );
-
-				// if there there is no filter style applied in a css rule, we are done
-				if ( currentStyle && !currentStyle.filter ) {
-					return;
-				}
-			}
-
-			// otherwise, set new filter values
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery(function() {
-	// This hook cannot be added until DOM ready because the support test
-	// for it is not run until after DOM ready
-	if ( !jQuery.support.reliableMarginRight ) {
-		jQuery.cssHooks.marginRight = {
-			get: function( elem, computed ) {
-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-				// Work around by temporarily setting element display to inline-block
-				var ret;
-				jQuery.swap( elem, { "display": "inline-block" }, function() {
-					if ( computed ) {
-						ret = curCSS( elem, "margin-right", "marginRight" );
-					} else {
-						ret = elem.style.marginRight;
-					}
-				});
-				return ret;
-			}
-		};
-	}
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-	getComputedStyle = function( elem, name ) {
-		var ret, defaultView, computedStyle;
-
-		name = name.replace( rupper, "-$1" ).toLowerCase();
-
-		if ( (defaultView = elem.ownerDocument.defaultView) &&
-				(computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-			ret = computedStyle.getPropertyValue( name );
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-		}
-
-		return ret;
-	};
-}
-
-if ( document.documentElement.currentStyle ) {
-	currentStyle = function( elem, name ) {
-		var left, rsLeft, uncomputed,
-			ret = elem.currentStyle && elem.currentStyle[ name ],
-			style = elem.style;
-
-		// Avoid setting ret to empty string here
-		// so we don't default to auto
-		if ( ret === null && style && (uncomputed = style[ name ]) ) {
-			ret = uncomputed;
-		}
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-
-			// Remember the original values
-			left = style.left;
-			rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : ( ret || 0 );
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = rsLeft;
-			}
-		}
-
-		return ret === "" ? "auto" : ret;
-	};
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-
-	// Start with offset property
-	var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-		which = name === "width" ? cssWidth : cssHeight,
-		i = 0,
-		len = which.length;
-
-	if ( val > 0 ) {
-		if ( extra !== "border" ) {
-			for ( ; i < len; i++ ) {
-				if ( !extra ) {
-					val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
-				}
-				if ( extra === "margin" ) {
-					val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
-				} else {
-					val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
-				}
-			}
-		}
-
-		return val + "px";
-	}
-
-	// Fall back to computed then uncomputed css if necessary
-	val = curCSS( elem, name, name );
-	if ( val < 0 || val == null ) {
-		val = elem.style[ name ] || 0;
-	}
-	// Normalize "", auto, and prepare for extra
-	val = parseFloat( val ) || 0;
-
-	// Add padding, border, margin
-	if ( extra ) {
-		for ( ; i < len; i++ ) {
-			val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
-			if ( extra !== "padding" ) {
-				val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
-			}
-			if ( extra === "margin" ) {
-				val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
-			}
-		}
-	}
-
-	return val + "px";
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.hidden = function( elem ) {
-		var width = elem.offsetWidth,
-			height = elem.offsetHeight;
-
-		return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-	};
-
-	jQuery.expr.filters.visible = function( elem ) {
-		return !jQuery.expr.filters.hidden( elem );
-	};
-}
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rhash = /#.*$/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rquery = /\?/,
-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-	rselectTextarea = /^(?:select|textarea)/i,
-	rspacesAjax = /\s+/,
-	rts = /([?&])_=[^&]*/,
-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-	// Keep a copy of the old load method
-	_load = jQuery.fn.load,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Document location
-	ajaxLocation,
-
-	// Document location segments
-	ajaxLocParts,
-
-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-	allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		if ( jQuery.isFunction( func ) ) {
-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-				i = 0,
-				length = dataTypes.length,
-				dataType,
-				list,
-				placeBefore;
-
-			// For each dataType in the dataTypeExpression
-			for ( ; i < length; i++ ) {
-				dataType = dataTypes[ i ];
-				// We control if we're asked to add before
-				// any existing element
-				placeBefore = /^\+/.test( dataType );
-				if ( placeBefore ) {
-					dataType = dataType.substr( 1 ) || "*";
-				}
-				list = structure[ dataType ] = structure[ dataType ] || [];
-				// then we add to the structure accordingly
-				list[ placeBefore ? "unshift" : "push" ]( func );
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-		dataType /* internal */, inspected /* internal */ ) {
-
-	dataType = dataType || options.dataTypes[ 0 ];
-	inspected = inspected || {};
-
-	inspected[ dataType ] = true;
-
-	var list = structure[ dataType ],
-		i = 0,
-		length = list ? list.length : 0,
-		executeOnly = ( structure === prefilters ),
-		selection;
-
-	for ( ; i < length && ( executeOnly || !selection ); i++ ) {
-		selection = list[ i ]( options, originalOptions, jqXHR );
-		// If we got redirected to another dataType
-		// we try there if executing only and not done already
-		if ( typeof selection === "string" ) {
-			if ( !executeOnly || inspected[ selection ] ) {
-				selection = undefined;
-			} else {
-				options.dataTypes.unshift( selection );
-				selection = inspectPrefiltersOrTransports(
-						structure, options, originalOptions, jqXHR, selection, inspected );
-			}
-		}
-	}
-	// If we're only executing or nothing was selected
-	// we try the catchall dataType if not done already
-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-		selection = inspectPrefiltersOrTransports(
-				structure, options, originalOptions, jqXHR, "*", inspected );
-	}
-	// unnecessary when only executing (prefilters)
-	// but it'll be ignored by the caller in that case
-	return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-	var key, deep,
-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
-	for ( key in src ) {
-		if ( src[ key ] !== undefined ) {
-			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-		}
-	}
-	if ( deep ) {
-		jQuery.extend( true, target, deep );
-	}
-}
-
-jQuery.fn.extend({
-	load: function( url, params, callback ) {
-		if ( typeof url !== "string" && _load ) {
-			return _load.apply( this, arguments );
-
-		// Don't do a request if no elements are being requested
-		} else if ( !this.length ) {
-			return this;
-		}
-
-		var off = url.indexOf( " " );
-		if ( off >= 0 ) {
-			var selector = url.slice( off, url.length );
-			url = url.slice( 0, off );
-		}
-
-		// Default to a GET request
-		var type = "GET";
-
-		// If the second parameter was provided
-		if ( params ) {
-			// If it's a function
-			if ( jQuery.isFunction( params ) ) {
-				// We assume that it's the callback
-				callback = params;
-				params = undefined;
-
-			// Otherwise, build a param string
-			} else if ( typeof params === "object" ) {
-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-				type = "POST";
-			}
-		}
-
-		var self = this;
-
-		// Request the remote document
-		jQuery.ajax({
-			url: url,
-			type: type,
-			dataType: "html",
-			data: params,
-			// Complete callback (responseText is used internally)
-			complete: function( jqXHR, status, responseText ) {
-				// Store the response as specified by the jqXHR object
-				responseText = jqXHR.responseText;
-				// If successful, inject the HTML into all the matched elements
-				if ( jqXHR.isResolved() ) {
-					// #4825: Get the actual response in case
-					// a dataFilter is present in ajaxSettings
-					jqXHR.done(function( r ) {
-						responseText = r;
-					});
-					// See if a selector was specified
-					self.html( selector ?
-						// Create a dummy div to hold the results
-						jQuery("<div>")
-							// inject the contents of the document in, removing the scripts
-							// to avoid any 'Permission Denied' errors in IE
-							.append(responseText.replace(rscript, ""))
-
-							// Locate the specified elements
-							.find(selector) :
-
-						// If not, just inject the full result
-						responseText );
-				}
-
-				if ( callback ) {
-					self.each( callback, [ responseText, status, jqXHR ] );
-				}
-			}
-		});
-
-		return this;
-	},
-
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-
-	serializeArray: function() {
-		return this.map(function(){
-			return this.elements ? jQuery.makeArray( this.elements ) : this;
-		})
-		.filter(function(){
-			return this.name && !this.disabled &&
-				( this.checked || rselectTextarea.test( this.nodeName ) ||
-					rinput.test( this.type ) );
-		})
-		.map(function( i, elem ){
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val, i ){
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).get();
-	}
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-	jQuery.fn[ o ] = function( f ){
-		return this.on( o, f );
-	};
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			type: method,
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	};
-});
-
-jQuery.extend({
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function( target, settings ) {
-		if ( settings ) {
-			// Building a settings object
-			ajaxExtend( target, jQuery.ajaxSettings );
-		} else {
-			// Extending ajaxSettings
-			settings = target;
-			target = jQuery.ajaxSettings;
-		}
-		ajaxExtend( target, settings );
-		return target;
-	},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		type: "GET",
-		contentType: "application/x-www-form-urlencoded",
-		processData: true,
-		async: true,
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			xml: "application/xml, text/xml",
-			html: "text/html",
-			text: "text/plain",
-			json: "application/json, text/javascript",
-			"*": allTypes
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText"
-		},
-
-		// List of data converters
-		// 1) key format is "source_type destination_type" (a single space in-between)
-		// 2) the catchall symbol "*" can be used for source_type
-		converters: {
-
-			// Convert anything to text
-			"* text": window.String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		},
-
-		// For options that shouldn't be deep extended:
-		// you can add your own custom options here if
-		// and when you create one that shouldn't be
-		// deep extended (see ajaxExtend)
-		flatOptions: {
-			context: true,
-			url: true
-		}
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events
-			// It's the callbackContext if one was provided in the options
-			// and if it's a DOM node or a jQuery collection
-			globalEventContext = callbackContext !== s &&
-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-						jQuery( callbackContext ) : jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery.Callbacks( "once memory" ),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// ifModified key
-			ifModifiedKey,
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-			// transport
-			transport,
-			// timeout handle
-			timeoutTimer,
-			// Cross-domain detection vars
-			parts,
-			// The jqXHR state
-			state = 0,
-			// To know if global events are to be dispatched
-			fireGlobals,
-			// Loop variable
-			i,
-			// Fake xhr
-			jqXHR = {
-
-				readyState: 0,
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( !state ) {
-						var lname = name.toLowerCase();
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match === undefined ? null : match;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					statusText = statusText || "abort";
-					if ( transport ) {
-						transport.abort( statusText );
-					}
-					done( 0, statusText );
-					return this;
-				}
-			};
-
-		// Callback for when everything is done
-		// It is defined here because jslint complains if it is declared
-		// at the end of the function (which would be more logical and readable)
-		function done( status, nativeStatusText, responses, headers ) {
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status > 0 ? 4 : 0;
-
-			var isSuccess,
-				success,
-				error,
-				statusText = nativeStatusText,
-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-				lastModified,
-				etag;
-
-			// If successful, handle type chaining
-			if ( status >= 200 && status < 300 || status === 304 ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-
-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
-					}
-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-						jQuery.etag[ ifModifiedKey ] = etag;
-					}
-				}
-
-				// If not modified
-				if ( status === 304 ) {
-
-					statusText = "notmodified";
-					isSuccess = true;
-
-				// If we have data
-				} else {
-
-					try {
-						success = ajaxConvert( s, response );
-						statusText = "success";
-						isSuccess = true;
-					} catch(e) {
-						// We have a parsererror
-						statusText = "parsererror";
-						error = e;
-					}
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if ( !statusText || status ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-						[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-		jqXHR.complete = completeDeferred.add;
-
-		// Status-dependent callbacks
-		jqXHR.statusCode = function( map ) {
-			if ( map ) {
-				var tmp;
-				if ( state < 2 ) {
-					for ( tmp in map ) {
-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-					}
-				} else {
-					tmp = map[ jqXHR.status ];
-					jqXHR.then( tmp, tmp );
-				}
-			}
-			return this;
-		};
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-		// Determine if a cross-domain request is in order
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefiler, stop there
-		if ( state === 2 ) {
-			return false;
-		}
-
-		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-				// #9682: remove data so that it's not used in an eventual retry
-				delete s.data;
-			}
-
-			// Get ifModifiedKey before adding the anti-cache parameter
-			ifModifiedKey = s.url;
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-
-				var ts = jQuery.now(),
-					// try replacing _= if it is there
-					ret = s.url.replace( rts, "$1_=" + ts );
-
-				// if nothing was replaced, add timestamp to the end
-				s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			ifModifiedKey = ifModifiedKey || s.url;
-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-			}
-			if ( jQuery.etag[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-			}
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-				// Abort if not done already
-				jqXHR.abort();
-				return false;
-
-		}
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout( function(){
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch (e) {
-				// Propagate exception as error if not done
-				if ( state < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					throw e;
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a, traditional ) {
-		var s = [],
-			add = function( key, value ) {
-				// If value is a function, invoke it and return its value
-				value = jQuery.isFunction( value ) ? value() : value;
-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-			};
-
-		// Set traditional to true for jQuery <= 1.3.2 behavior.
-		if ( traditional === undefined ) {
-			traditional = jQuery.ajaxSettings.traditional;
-		}
-
-		// If an array was passed in, assume that it is an array of form elements.
-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-			// Serialize the form elements
-			jQuery.each( a, function() {
-				add( this.name, this.value );
-			});
-
-		} else {
-			// If traditional, encode the "old" way (the way 1.3.2 or older
-			// did it), otherwise encode params recursively.
-			for ( var prefix in a ) {
-				buildParams( prefix, a[ prefix ], traditional, add );
-			}
-		}
-
-		// Return the resulting serialization
-		return s.join( "&" ).replace( r20, "+" );
-	}
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-				// If array item is non-scalar (array or object), encode its
-				// numeric index to resolve deserialization ambiguity issues.
-				// Note that rack (as of 1.0.0) can't currently deserialize
-				// nested arrays properly, and attempting to do so may cause
-				// a server error. Possible fixes are to modify rack's
-				// deserialization algorithm or to provide an option or flag
-				// to force array serialization to be shallow.
-				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && obj != null && typeof obj === "object" ) {
-		// Serialize object item.
-		for ( var name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var contents = s.contents,
-		dataTypes = s.dataTypes,
-		responseFields = s.responseFields,
-		ct,
-		type,
-		finalDataType,
-		firstDataType;
-
-	// Fill responseXXX fields
-	for ( type in responseFields ) {
-		if ( type in responses ) {
-			jqXHR[ responseFields[type] ] = responses[ type ];
-		}
-	}
-
-	// Remove auto dataType and get content-type in the process
-	while( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-	// Apply the dataFilter if provided
-	if ( s.dataFilter ) {
-		response = s.dataFilter( response, s.dataType );
-	}
-
-	var dataTypes = s.dataTypes,
-		converters = {},
-		i,
-		key,
-		length = dataTypes.length,
-		tmp,
-		// Current and previous dataTypes
-		current = dataTypes[ 0 ],
-		prev,
-		// Conversion expression
-		conversion,
-		// Conversion function
-		conv,
-		// Conversion functions (transitive conversion)
-		conv1,
-		conv2;
-
-	// For each dataType in the chain
-	for ( i = 1; i < length; i++ ) {
-
-		// Create converters map
-		// with lowercased keys
-		if ( i === 1 ) {
-			for ( key in s.converters ) {
-				if ( typeof key === "string" ) {
-					converters[ key.toLowerCase() ] = s.converters[ key ];
-				}
-			}
-		}
-
-		// Get the dataTypes
-		prev = current;
-		current = dataTypes[ i ];
-
-		// If current is auto dataType, update it to prev
-		if ( current === "*" ) {
-			current = prev;
-		// If no auto and dataTypes are actually different
-		} else if ( prev !== "*" && prev !== current ) {
-
-			// Get the converter
-			conversion = prev + " " + current;
-			conv = converters[ conversion ] || converters[ "* " + current ];
-
-			// If there is no direct converter, search transitively
-			if ( !conv ) {
-				conv2 = undefined;
-				for ( conv1 in converters ) {
-					tmp = conv1.split( " " );
-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-						conv2 = converters[ tmp[1] + " " + current ];
-						if ( conv2 ) {
-							conv1 = converters[ conv1 ];
-							if ( conv1 === true ) {
-								conv = conv2;
-							} else if ( conv2 === true ) {
-								conv = conv1;
-							}
-							break;
-						}
-					}
-				}
-			}
-			// If we found no converter, dispatch an error
-			if ( !( conv || conv2 ) ) {
-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-			}
-			// If found converter is not an equivalence
-			if ( conv !== true ) {
-				// Convert with 1 or 2 converters accordingly
-				response = conv ? conv( response ) : conv2( conv1(response) );
-			}
-		}
-	}
-	return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-	jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		return jQuery.expando + "_" + ( jsc++ );
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
-		( typeof s.data === "string" );
-
-	if ( s.dataTypes[ 0 ] === "jsonp" ||
-		s.jsonp !== false && ( jsre.test( s.url ) ||
-				inspectData && jsre.test( s.data ) ) ) {
-
-		var responseContainer,
-			jsonpCallback = s.jsonpCallback =
-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-			previous = window[ jsonpCallback ],
-			url = s.url,
-			data = s.data,
-			replace = "$1" + jsonpCallback + "$2";
-
-		if ( s.jsonp !== false ) {
-			url = url.replace( jsre, replace );
-			if ( s.url === url ) {
-				if ( inspectData ) {
-					data = data.replace( jsre, replace );
-				}
-				if ( s.data === data ) {
-					// Add callback manually
-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-				}
-			}
-		}
-
-		s.url = url;
-		s.data = data;
-
-		// Install callback
-		window[ jsonpCallback ] = function( response ) {
-			responseContainer = [ response ];
-		};
-
-		// Clean-up function
-		jqXHR.always(function() {
-			// Set callback back to previous value
-			window[ jsonpCallback ] = previous;
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( previous ) ) {
-				window[ jsonpCallback ]( responseContainer[ 0 ] );
-			}
-		});
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( jsonpCallback + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /javascript|ecmascript/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = "async";
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( head && script.parentNode ) {
-							head.removeChild( script );
-						}
-
-						// Dereference the script
-						script = undefined;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-				// This arises when a base node is used (#2709 and #4378).
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( 0, 1 );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
-		// Abort all pending requests
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( 0, 1 );
-		}
-	} : false,
-	xhrId = 0,
-	xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-	/* Microsoft failed to properly
-	 * implement the XMLHttpRequest in IE7 (can't request local files),
-	 * so we use the ActiveXObject when it is available
-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-	 * we need a fallback.
-	 */
-	function() {
-		return !this.isLocal && createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-	jQuery.extend( jQuery.support, {
-		ajax: !!xhr,
-		cors: !!xhr && ( "withCredentials" in xhr )
-	});
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-	jQuery.ajaxTransport(function( s ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !s.crossDomain || jQuery.support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-
-					// Get a new xhr
-					var xhr = s.xhr(),
-						handle,
-						i;
-
-					// Open the socket
-					// Passing null username, generates a login popup on Opera (#2865)
-					if ( s.username ) {
-						xhr.open( s.type, s.url, s.async, s.username, s.password );
-					} else {
-						xhr.open( s.type, s.url, s.async );
-					}
-
-					// Apply custom fields if provided
-					if ( s.xhrFields ) {
-						for ( i in s.xhrFields ) {
-							xhr[ i ] = s.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( s.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( s.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Need an extra try/catch for cross domain requests in Firefox 3
-					try {
-						for ( i in headers ) {
-							xhr.setRequestHeader( i, headers[ i ] );
-						}
-					} catch( _ ) {}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( s.hasContent && s.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-
-						var status,
-							statusText,
-							responseHeaders,
-							responses,
-							xml;
-
-						// Firefox throws exceptions when accessing properties
-						// of an xhr when a network error occured
-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-						try {
-
-							// Was never called and is aborted or complete
-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-								// Only called once
-								callback = undefined;
-
-								// Do not keep as active anymore
-								if ( handle ) {
-									xhr.onreadystatechange = jQuery.noop;
-									if ( xhrOnUnloadAbort ) {
-										delete xhrCallbacks[ handle ];
-									}
-								}
-
-								// If it's an abort
-								if ( isAbort ) {
-									// Abort it manually if needed
-									if ( xhr.readyState !== 4 ) {
-										xhr.abort();
-									}
-								} else {
-									status = xhr.status;
-									responseHeaders = xhr.getAllResponseHeaders();
-									responses = {};
-									xml = xhr.responseXML;
-
-									// Construct response list
-									if ( xml && xml.documentElement /* #4958 */ ) {
-										responses.xml = xml;
-									}
-									responses.text = xhr.responseText;
-
-									// Firefox throws an exception when accessing
-									// statusText for faulty cross-domain requests
-									try {
-										statusText = xhr.statusText;
-									} catch( e ) {
-										// We normalize with Webkit giving an empty statusText
-										statusText = "";
-									}
-
-									// Filter status for non standard behaviors
-
-									// If the request is local and we have data: assume a success
-									// (success with no data won't get notified, that's the best we
-									// can do given current implementations)
-									if ( !status && s.isLocal && !s.crossDomain ) {
-										status = responses.text ? 200 : 404;
-									// IE - #1450: sometimes returns 1223 when it should be 204
-									} else if ( status === 1223 ) {
-										status = 204;
-									}
-								}
-							}
-						} catch( firefoxAccessException ) {
-							if ( !isAbort ) {
-								complete( -1, firefoxAccessException );
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, responseHeaders );
-						}
-					};
-
-					// if we're in sync mode or it's in cache
-					// and has been retrieved directly (IE6 & IE7)
-					// we need to manually fire the callback
-					if ( !s.async || xhr.readyState === 4 ) {
-						callback();
-					} else {
-						handle = ++xhrId;
-						if ( xhrOnUnloadAbort ) {
-							// Create the active xhrs callbacks list if needed
-							// and attach the unload handler
-							if ( !xhrCallbacks ) {
-								xhrCallbacks = {};
-								jQuery( window ).unload( xhrOnUnloadAbort );
-							}
-							// Add to list of active xhrs callbacks
-							xhrCallbacks[ handle ] = callback;
-						}
-						xhr.onreadystatechange = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback(0,1);
-					}
-				}
-			};
-		}
-	});
-}
-
-
-
-
-var elemdisplay = {},
-	iframe, iframeDoc,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-	timerId,
-	fxAttrs = [
-		// height animations
-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-		// width animations
-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-		// opacity animations
-		[ "opacity" ]
-	],
-	fxNow;
-
-jQuery.fn.extend({
-	show: function( speed, easing, callback ) {
-		var elem, display;
-
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("show", 3), speed, easing, callback );
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					// Reset the inline display of this element to learn if it is
-					// being hidden by cascaded rules or not
-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-						display = elem.style.display = "";
-					}
-
-					// Set elements which have been overridden with display: none
-					// in a stylesheet to whatever the default browser style is
-					// for such an element
-					if ( display === "" && jQuery.css(elem, "display") === "none" ) {
-						jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-					}
-				}
-			}
-
-			// Set the display of most of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				elem = this[ i ];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					if ( display === "" || display === "none" ) {
-						elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
-					}
-				}
-			}
-
-			return this;
-		}
-	},
-
-	hide: function( speed, easing, callback ) {
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("hide", 3), speed, easing, callback);
-
-		} else {
-			var elem, display,
-				i = 0,
-				j = this.length;
-
-			for ( ; i < j; i++ ) {
-				elem = this[i];
-				if ( elem.style ) {
-					display = jQuery.css( elem, "display" );
-
-					if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
-						jQuery._data( elem, "olddisplay", display );
-					}
-				}
-			}
-
-			// Set the display of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				if ( this[i].style ) {
-					this[i].style.display = "none";
-				}
-			}
-
-			return this;
-		}
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-
-	toggle: function( fn, fn2, callback ) {
-		var bool = typeof fn === "boolean";
-
-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-			this._toggle.apply( this, arguments );
-
-		} else if ( fn == null || bool ) {
-			this.each(function() {
-				var state = bool ? fn : jQuery(this).is(":hidden");
-				jQuery(this)[ state ? "show" : "hide" ]();
-			});
-
-		} else {
-			this.animate(genFx("toggle", 3), fn, fn2, callback);
-		}
-
-		return this;
-	},
-
-	fadeTo: function( speed, to, easing, callback ) {
-		return this.filter(":hidden").css("opacity", 0).show().end()
-					.animate({opacity: to}, speed, easing, callback);
-	},
-
-	animate: function( prop, speed, easing, callback ) {
-		var optall = jQuery.speed( speed, easing, callback );
-
-		if ( jQuery.isEmptyObject( prop ) ) {
-			return this.each( optall.complete, [ false ] );
-		}
-
-		// Do not change referenced properties as per-property easing will be lost
-		prop = jQuery.extend( {}, prop );
-
-		function doAnimation() {
-			// XXX 'this' does not always have a nodeName when running the
-			// test suite
-
-			if ( optall.queue === false ) {
-				jQuery._mark( this );
-			}
-
-			var opt = jQuery.extend( {}, optall ),
-				isElement = this.nodeType === 1,
-				hidden = isElement && jQuery(this).is(":hidden"),
-				name, val, p, e,
-				parts, start, end, unit,
-				method;
-
-			// will store per property easing and be used to determine when an animation is complete
-			opt.animatedProperties = {};
-
-			for ( p in prop ) {
-
-				// property name normalization
-				name = jQuery.camelCase( p );
-				if ( p !== name ) {
-					prop[ name ] = prop[ p ];
-					delete prop[ p ];
-				}
-
-				val = prop[ name ];
-
-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-				if ( jQuery.isArray( val ) ) {
-					opt.animatedProperties[ name ] = val[ 1 ];
-					val = prop[ name ] = val[ 0 ];
-				} else {
-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-				}
-
-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
-					return opt.complete.call( this );
-				}
-
-				if ( isElement && ( name === "height" || name === "width" ) ) {
-					// Make sure that nothing sneaks out
-					// Record all 3 overflow attributes because IE does not
-					// change the overflow attribute when overflowX and
-					// overflowY are set to the same value
-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-					// Set display property to inline-block for height/width
-					// animations on inline elements that are having width/height animated
-					if ( jQuery.css( this, "display" ) === "inline" &&
-							jQuery.css( this, "float" ) === "none" ) {
-
-						// inline-level elements accept inline-block;
-						// block-level elements need to be inline with layout
-						if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
-							this.style.display = "inline-block";
-
-						} else {
-							this.style.zoom = 1;
-						}
-					}
-				}
-			}
-
-			if ( opt.overflow != null ) {
-				this.style.overflow = "hidden";
-			}
-
-			for ( p in prop ) {
-				e = new jQuery.fx( this, opt, p );
-				val = prop[ p ];
-
-				if ( rfxtypes.test( val ) ) {
-
-					// Tracks whether to show or hide based on private
-					// data attached to the element
-					method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
-					if ( method ) {
-						jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
-						e[ method ]();
-					} else {
-						e[ val ]();
-					}
-
-				} else {
-					parts = rfxnum.exec( val );
-					start = e.cur();
-
-					if ( parts ) {
-						end = parseFloat( parts[2] );
-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-						// We need to compute starting value
-						if ( unit !== "px" ) {
-							jQuery.style( this, p, (end || 1) + unit);
-							start = ( (end || 1) / e.cur() ) * start;
-							jQuery.style( this, p, start + unit);
-						}
-
-						// If a +=/-= token was provided, we're doing a relative animation
-						if ( parts[1] ) {
-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-						}
-
-						e.custom( start, end, unit );
-
-					} else {
-						e.custom( start, val, "" );
-					}
-				}
-			}
-
-			// For JS strict compliance
-			return true;
-		}
-
-		return optall.queue === false ?
-			this.each( doAnimation ) :
-			this.queue( optall.queue, doAnimation );
-	},
-
-	stop: function( type, clearQueue, gotoEnd ) {
-		if ( typeof type !== "string" ) {
-			gotoEnd = clearQueue;
-			clearQueue = type;
-			type = undefined;
-		}
-		if ( clearQueue && type !== false ) {
-			this.queue( type || "fx", [] );
-		}
-
-		return this.each(function() {
-			var index,
-				hadTimers = false,
-				timers = jQuery.timers,
-				data = jQuery._data( this );
-
-			// clear marker counters if we know they won't be
-			if ( !gotoEnd ) {
-				jQuery._unmark( true, this );
-			}
-
-			function stopQueue( elem, data, index ) {
-				var hooks = data[ index ];
-				jQuery.removeData( elem, index, true );
-				hooks.stop( gotoEnd );
-			}
-
-			if ( type == null ) {
-				for ( index in data ) {
-					if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
-						stopQueue( this, data, index );
-					}
-				}
-			} else if ( data[ index = type + ".run" ] && data[ index ].stop ){
-				stopQueue( this, data, index );
-			}
-
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-					if ( gotoEnd ) {
-
-						// force the next step to be the last
-						timers[ index ]( true );
-					} else {
-						timers[ index ].saveState();
-					}
-					hadTimers = true;
-					timers.splice( index, 1 );
-				}
-			}
-
-			// start the next in the queue if the last step wasn't forced
-			// timers currently will call their complete callbacks, which will dequeue
-			// but only if they were gotoEnd
-			if ( !( gotoEnd && hadTimers ) ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	}
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout( clearFxNow, 0 );
-	return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-	fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-	var obj = {};
-
-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
-		obj[ this ] = type;
-	});
-
-	return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-	slideDown: genFx( "show", 1 ),
-	slideUp: genFx( "hide", 1 ),
-	slideToggle: genFx( "toggle", 1 ),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.extend({
-	speed: function( speed, easing, fn ) {
-		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-			complete: fn || !fn && easing ||
-				jQuery.isFunction( speed ) && speed,
-			duration: speed,
-			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-		};
-
-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-		// normalize opt.queue - true/undefined/null -> "fx"
-		if ( opt.queue == null || opt.queue === true ) {
-			opt.queue = "fx";
-		}
-
-		// Queueing
-		opt.old = opt.complete;
-
-		opt.complete = function( noUnmark ) {
-			if ( jQuery.isFunction( opt.old ) ) {
-				opt.old.call( this );
-			}
-
-			if ( opt.queue ) {
-				jQuery.dequeue( this, opt.queue );
-			} else if ( noUnmark !== false ) {
-				jQuery._unmark( this );
-			}
-		};
-
-		return opt;
-	},
-
-	easing: {
-		linear: function( p, n, firstNum, diff ) {
-			return firstNum + diff * p;
-		},
-		swing: function( p, n, firstNum, diff ) {
-			return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
-		}
-	},
-
-	timers: [],
-
-	fx: function( elem, options, prop ) {
-		this.options = options;
-		this.elem = elem;
-		this.prop = prop;
-
-		options.orig = options.orig || {};
-	}
-
-});
-
-jQuery.fx.prototype = {
-	// Simple function for setting a style value
-	update: function() {
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
-	},
-
-	// Get the current size
-	cur: function() {
-		if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
-			return this.elem[ this.prop ];
-		}
-
-		var parsed,
-			r = jQuery.css( this.elem, this.prop );
-		// Empty strings, null, undefined and "auto" are converted to 0,
-		// complex values such as "rotate(1rad)" are returned as is,
-		// simple values such as "10px" are parsed to Float.
-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-	},
-
-	// Start an animation from one number to another
-	custom: function( from, to, unit ) {
-		var self = this,
-			fx = jQuery.fx;
-
-		this.startTime = fxNow || createFxNow();
-		this.end = to;
-		this.now = this.start = from;
-		this.pos = this.state = 0;
-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
-		function t( gotoEnd ) {
-			return self.step( gotoEnd );
-		}
-
-		t.queue = this.options.queue;
-		t.elem = this.elem;
-		t.saveState = function() {
-			if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
-				jQuery._data( self.elem, "fxshow" + self.prop, self.start );
-			}
-		};
-
-		if ( t() && jQuery.timers.push(t) && !timerId ) {
-			timerId = setInterval( fx.tick, fx.interval );
-		}
-	},
-
-	// Simple 'show' function
-	show: function() {
-		var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
-		this.options.show = true;
-
-		// Begin the animation
-		// Make sure that we start at a small width/height to avoid any flash of content
-		if ( dataShow !== undefined ) {
-			// This show is picking up where a previous hide or show left off
-			this.custom( this.cur(), dataShow );
-		} else {
-			this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
-		}
-
-		// Start by showing the element
-		jQuery( this.elem ).show();
-	},
-
-	// Simple 'hide' function
-	hide: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
-		this.options.hide = true;
-
-		// Begin the animation
-		this.custom( this.cur(), 0 );
-	},
-
-	// Each step of an animation
-	step: function( gotoEnd ) {
-		var p, n, complete,
-			t = fxNow || createFxNow(),
-			done = true,
-			elem = this.elem,
-			options = this.options;
-
-		if ( gotoEnd || t >= options.duration + this.startTime ) {
-			this.now = this.end;
-			this.pos = this.state = 1;
-			this.update();
-
-			options.animatedProperties[ this.prop ] = true;
-
-			for ( p in options.animatedProperties ) {
-				if ( options.animatedProperties[ p ] !== true ) {
-					done = false;
-				}
-			}
-
-			if ( done ) {
-				// Reset the overflow
-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-					jQuery.each( [ "", "X", "Y" ], function( index, value ) {
-						elem.style[ "overflow" + value ] = options.overflow[ index ];
-					});
-				}
-
-				// Hide the element if the "hide" operation was done
-				if ( options.hide ) {
-					jQuery( elem ).hide();
-				}
-
-				// Reset the properties, if the item has been hidden or shown
-				if ( options.hide || options.show ) {
-					for ( p in options.animatedProperties ) {
-						jQuery.style( elem, p, options.orig[ p ] );
-						jQuery.removeData( elem, "fxshow" + p, true );
-						// Toggle data is no longer needed
-						jQuery.removeData( elem, "toggle" + p, true );
-					}
-				}
-
-				// Execute the complete function
-				// in the event that the complete function throws an exception
-				// we must ensure it won't be called twice. #5684
-
-				complete = options.complete;
-				if ( complete ) {
-
-					options.complete = false;
-					complete.call( elem );
-				}
-			}
-
-			return false;
-
-		} else {
-			// classical easing cannot be used with an Infinity duration
-			if ( options.duration == Infinity ) {
-				this.now = t;
-			} else {
-				n = t - this.startTime;
-				this.state = n / options.duration;
-
-				// Perform the easing function, defaults to swing
-				this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
-				this.now = this.start + ( (this.end - this.start) * this.pos );
-			}
-			// Perform the next step of the animation
-			this.update();
-		}
-
-		return true;
-	}
-};
-
-jQuery.extend( jQuery.fx, {
-	tick: function() {
-		var timer,
-			timers = jQuery.timers,
-			i = 0;
-
-		for ( ; i < timers.length; i++ ) {
-			timer = timers[ i ];
-			// Checks the timer has not already been removed
-			if ( !timer() && timers[ i ] === timer ) {
-				timers.splice( i--, 1 );
-			}
-		}
-
-		if ( !timers.length ) {
-			jQuery.fx.stop();
-		}
-	},
-
-	interval: 13,
-
-	stop: function() {
-		clearInterval( timerId );
-		timerId = null;
-	},
-
-	speeds: {
-		slow: 600,
-		fast: 200,
-		// Default speed
-		_default: 400
-	},
-
-	step: {
-		opacity: function( fx ) {
-			jQuery.style( fx.elem, "opacity", fx.now );
-		},
-
-		_default: function( fx ) {
-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
-			} else {
-				fx.elem[ fx.prop ] = fx.now;
-			}
-		}
-	}
-});
-
-// Adds width/height step functions
-// Do not set anything below 0
-jQuery.each([ "width", "height" ], function( i, prop ) {
-	jQuery.fx.step[ prop ] = function( fx ) {
-		jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
-	};
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.animated = function( elem ) {
-		return jQuery.grep(jQuery.timers, function( fn ) {
-			return elem === fn.elem;
-		}).length;
-	};
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-	if ( !elemdisplay[ nodeName ] ) {
-
-		var body = document.body,
-			elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
-			display = elem.css( "display" );
-		elem.remove();
-
-		// If the simple way fails,
-		// get element's real default display by attaching it to a temp iframe
-		if ( display === "none" || display === "" ) {
-			// No iframe to use yet, so create it
-			if ( !iframe ) {
-				iframe = document.createElement( "iframe" );
-				iframe.frameBorder = iframe.width = iframe.height = 0;
-			}
-
-			body.appendChild( iframe );
-
-			// Create a cacheable copy of the iframe document on first call.
-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-			// document to it; WebKit & Firefox won't allow reusing the iframe document.
-			if ( !iframeDoc || !iframe.createElement ) {
-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-				iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
-				iframeDoc.close();
-			}
-
-			elem = iframeDoc.createElement( nodeName );
-
-			iframeDoc.body.appendChild( elem );
-
-			display = jQuery.css( elem, "display" );
-			body.removeChild( iframe );
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
-	rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0], box;
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		try {
-			box = elem.getBoundingClientRect();
-		} catch(e) {}
-
-		var doc = elem.ownerDocument,
-			docElem = doc.documentElement;
-
-		// Make sure we're not dealing with a disconnected DOM node
-		if ( !box || !jQuery.contains( docElem, elem ) ) {
-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-		}
-
-		var body = doc.body,
-			win = getWindow(doc),
-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-			top  = box.top  + scrollTop  - clientTop,
-			left = box.left + scrollLeft - clientLeft;
-
-		return { top: top, left: left };
-	};
-
-} else {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0];
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		var computedStyle,
-			offsetParent = elem.offsetParent,
-			prevOffsetParent = elem,
-			doc = elem.ownerDocument,
-			docElem = doc.documentElement,
-			body = doc.body,
-			defaultView = doc.defaultView,
-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-			top = elem.offsetTop,
-			left = elem.offsetLeft;
-
-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-			if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-				break;
-			}
-
-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-			top  -= elem.scrollTop;
-			left -= elem.scrollLeft;
-
-			if ( elem === offsetParent ) {
-				top  += elem.offsetTop;
-				left += elem.offsetLeft;
-
-				if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-				}
-
-				prevOffsetParent = offsetParent;
-				offsetParent = elem.offsetParent;
-			}
-
-			if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-			}
-
-			prevComputedStyle = computedStyle;
-		}
-
-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-			top  += body.offsetTop;
-			left += body.offsetLeft;
-		}
-
-		if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-			top  += Math.max( docElem.scrollTop, body.scrollTop );
-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
-		}
-
-		return { top: top, left: left };
-	};
-}
-
-jQuery.offset = {
-
-	bodyOffset: function( body ) {
-		var top = body.offsetTop,
-			left = body.offsetLeft;
-
-		if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-		}
-
-		return { top: top, left: left };
-	},
-
-	setOffset: function( elem, options, i ) {
-		var position = jQuery.css( elem, "position" );
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		var curElem = jQuery( elem ),
-			curOffset = curElem.offset(),
-			curCSSTop = jQuery.css( elem, "top" ),
-			curCSSLeft = jQuery.css( elem, "left" ),
-			calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-			props = {}, curPosition = {}, curTop, curLeft;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if ( options.top != null ) {
-			props.top = ( options.top - curOffset.top ) + curTop;
-		}
-		if ( options.left != null ) {
-			props.left = ( options.left - curOffset.left ) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-
-jQuery.fn.extend({
-
-	position: function() {
-		if ( !this[0] ) {
-			return null;
-		}
-
-		var elem = this[0],
-
-		// Get *real* offsetParent
-		offsetParent = this.offsetParent(),
-
-		// Get correct offsets
-		offset       = this.offset(),
-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-		// Subtract element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-		// Add offsetParent borders
-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
-		// Subtract the two offsets
-		return {
-			top:  offset.top  - parentOffset.top,
-			left: offset.left - parentOffset.left
-		};
-	},
-
-	offsetParent: function() {
-		return this.map(function() {
-			var offsetParent = this.offsetParent || document.body;
-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent;
-		});
-	}
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
-	var method = "scroll" + name;
-
-	jQuery.fn[ method ] = function( val ) {
-		var elem, win;
-
-		if ( val === undefined ) {
-			elem = this[ 0 ];
-
-			if ( !elem ) {
-				return null;
-			}
-
-			win = getWindow( elem );
-
-			// Return the scroll offset
-			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
-				jQuery.support.boxModel && win.document.documentElement[ method ] ||
-					win.document.body[ method ] :
-				elem[ method ];
-		}
-
-		// Set the scroll offset
-		return this.each(function() {
-			win = getWindow( this );
-
-			if ( win ) {
-				win.scrollTo(
-					!i ? val : jQuery( win ).scrollLeft(),
-					 i ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				this[ method ] = val;
-			}
-		});
-	};
-});
-
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
-	var type = name.toLowerCase();
-
-	// innerHeight and innerWidth
-	jQuery.fn[ "inner" + name ] = function() {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, "padding" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	// outerHeight and outerWidth
-	jQuery.fn[ "outer" + name ] = function( margin ) {
-		var elem = this[0];
-		return elem ?
-			elem.style ?
-			parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
-			this[ type ]() :
-			null;
-	};
-
-	jQuery.fn[ type ] = function( size ) {
-		// Get window width or height
-		var elem = this[0];
-		if ( !elem ) {
-			return size == null ? null : this;
-		}
-
-		if ( jQuery.isFunction( size ) ) {
-			return this.each(function( i ) {
-				var self = jQuery( this );
-				self[ type ]( size.call( this, i, self[ type ]() ) );
-			});
-		}
-
-		if ( jQuery.isWindow( elem ) ) {
-			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
-			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-			var docElemProp = elem.document.documentElement[ "client" + name ],
-				body = elem.document.body;
-			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
-				body && body[ "client" + name ] || docElemProp;
-
-		// Get document width or height
-		} else if ( elem.nodeType === 9 ) {
-			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-			return Math.max(
-				elem.documentElement["client" + name],
-				elem.body["scroll" + name], elem.documentElement["scroll" + name],
-				elem.body["offset" + name], elem.documentElement["offset" + name]
-			);
-
-		// Get or set width or height on the element
-		} else if ( size === undefined ) {
-			var orig = jQuery.css( elem, type ),
-				ret = parseFloat( orig );
-
-			return jQuery.isNumeric( ret ) ? ret : orig;
-
-		// Set the width or height on the element (default to pixels if value is unitless)
-		} else {
-			return this.css( type, typeof size === "string" ? size : size + "px" );
-		}
-	};
-
-});
-
-
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
-	define( "jquery", [], function () { return jQuery; } );
-}
-
-
-
-})( window );
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin.c b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin.c
deleted file mode 100644
index 0315828..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/* jsmin.c
-   2011-01-22
-
-Copyright (c) 2002 Douglas Crockford  (www.crockford.com)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-
-static int   theA;
-static int   theB;
-static int   theLookahead = EOF;
-
-
-/* isAlphanum -- return true if the character is a letter, digit, underscore,
-        dollar sign, or non-ASCII character.
-*/
-
-static int
-isAlphanum(int c)
-{
-    return ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') ||
-        (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c == '\\' ||
-        c > 126);
-}
-
-
-/* get -- return the next character from stdin. Watch out for lookahead. If
-        the character is a control character, translate it to a space or
-        linefeed.
-*/
-
-static int
-get()
-{
-    int c = theLookahead;
-    theLookahead = EOF;
-    if (c == EOF) {
-        c = getc(stdin);
-    }
-    if (c >= ' ' || c == '\n' || c == EOF) {
-        return c;
-    }
-    if (c == '\r') {
-        return '\n';
-    }
-    return ' ';
-}
-
-
-/* peek -- get the next character without getting it.
-*/
-
-static int
-peek()
-{
-    theLookahead = get();
-    return theLookahead;
-}
-
-
-/* next -- get the next character, excluding comments. peek() is used to see
-        if a '/' is followed by a '/' or '*'.
-*/
-
-static int
-next()
-{
-    int c = get();
-    if  (c == '/') {
-        switch (peek()) {
-        case '/':
-            for (;;) {
-                c = get();
-                if (c <= '\n') {
-                    return c;
-                }
-            }
-        case '*':
-            get();
-            for (;;) {
-                switch (get()) {
-                case '*':
-                    if (peek() == '/') {
-                        get();
-                        return ' ';
-                    }
-                    break;
-                case EOF:
-                    fprintf(stderr, "Error: JSMIN Unterminated comment.\n");
-                    exit(1);
-                }
-            }
-        default:
-            return c;
-        }
-    }
-    return c;
-}
-
-
-/* action -- do something! What you do is determined by the argument:
-        1   Output A. Copy B to A. Get the next B.
-        2   Copy B to A. Get the next B. (Delete A).
-        3   Get the next B. (Delete B).
-   action treats a string as a single character. Wow!
-   action recognizes a regular expression if it is preceded by ( or , or =.
-*/
-
-static void
-action(int d)
-{
-    switch (d) {
-    case 1:
-        putc(theA, stdout);
-    case 2:
-        theA = theB;
-        if (theA == '\'' || theA == '"') {
-            for (;;) {
-                putc(theA, stdout);
-                theA = get();
-                if (theA == theB) {
-                    break;
-                }
-                if (theA == '\\') {
-                    putc(theA, stdout);
-                    theA = get();
-                }
-                if (theA == EOF) {
-                    fprintf(stderr, "Error: JSMIN unterminated string literal.");
-                    exit(1);
-                }
-            }
-        }
-    case 3:
-        theB = next();
-        if (theB == '/' && (theA == '(' || theA == ',' || theA == '=' ||
-                            theA == ':' || theA == '[' || theA == '!' ||
-                            theA == '&' || theA == '|' || theA == '?' ||
-                            theA == '{' || theA == '}' || theA == ';' ||
-                            theA == '\n')) {
-            putc(theA, stdout);
-            putc(theB, stdout);
-            for (;;) {
-                theA = get();
-                if (theA == '[') {
-					for (;;) {
-						putc(theA, stdout);
-						theA = get();
-						if (theA == ']') {
-							break;
-						} 
-						if (theA == '\\') {
-							putc(theA, stdout);
-							theA = get();
-						} 
-						if (theA == EOF) {
-							fprintf(stderr, 
-								"Error: JSMIN unterminated set in Regular Expression literal.\n");
-							exit(1);
-						}
-					}
-				} else if (theA == '/') {
-                    break;
-                } else if (theA =='\\') {
-                    putc(theA, stdout);
-                    theA = get();
-                }
-                if (theA == EOF) {
-                    fprintf(stderr,
-						"Error: JSMIN unterminated Regular Expression literal.\n");
-                    exit(1);
-                }
-                putc(theA, stdout);
-            }
-            theB = next();
-        }
-    }
-}
-
-
-/* jsmin -- Copy the input to the output, deleting the characters which are
-        insignificant to JavaScript. Comments will be removed. Tabs will be
-        replaced with spaces. Carriage returns will be replaced with linefeeds.
-        Most spaces and linefeeds will be removed.
-*/
-
-static void
-jsmin()
-{
-    theA = '\n';
-    action(3);
-    while (theA != EOF) {
-        switch (theA) {
-        case ' ':
-            if (isAlphanum(theB)) {
-                action(1);
-            } else {
-                action(2);
-            }
-            break;
-        case '\n':
-            switch (theB) {
-            case '{':
-            case '[':
-            case '(':
-            case '+':
-            case '-':
-                action(1);
-                break;
-            case ' ':
-                action(3);
-                break;
-            default:
-                if (isAlphanum(theB)) {
-                    action(1);
-                } else {
-                    action(2);
-                }
-            }
-            break;
-        default:
-            switch (theB) {
-            case ' ':
-                if (isAlphanum(theA)) {
-                    action(1);
-                    break;
-                }
-                action(3);
-                break;
-            case '\n':
-                switch (theA) {
-                case '}':
-                case ']':
-                case ')':
-                case '+':
-                case '-':
-                case '"':
-                case '\'':
-                    action(1);
-                    break;
-                default:
-                    if (isAlphanum(theA)) {
-                        action(1);
-                    } else {
-                        action(3);
-                    }
-                }
-                break;
-            default:
-                action(1);
-                break;
-            }
-        }
-    }
-}
-
-
-/* main -- Output any command line arguments as comments
-        and then minify the input.
-*/
-extern int
-main(int argc, char* argv[])
-{
-    int i;
-    for (i = 1; i < argc; i += 1) {
-        fprintf(stdout, "// %s\n", argv[i]);
-    }
-    jsmin();
-    return 0;
-}
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin.py b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin.py
deleted file mode 100644
index b1f7dd7..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/env python
-
-# This code is original from jsmin by Douglas Crockford, it was translated to
-# Python by Baruch Even. The original code had the following copyright and
-# license.
-#
-# /* jsmin.c
-#    2007-05-22
-#
-# Copyright (c) 2002 Douglas Crockford  (www.crockford.com)
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy of
-# this software and associated documentation files (the "Software"), to deal in
-# the Software without restriction, including without limitation the rights to
-# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-# of the Software, and to permit persons to whom the Software is furnished to do
-# so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-#
-# The Software shall be used for Good, not Evil.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-# */
-
-# imports adjusted for speed (cStringIO) and python 3 (io) -- nd
-try:
-    from cStringIO import StringIO
-except ImportError:
-    try:
-        from StringIO import StringIO
-    except ImportError:
-        from io import StringIO
-
-
-def jsmin(js):
-    ins = StringIO(js)
-    outs = StringIO()
-    JavascriptMinify().minify(ins, outs)
-    str = outs.getvalue()
-    if len(str) > 0 and str[0] == '\n':
-        str = str[1:]
-    return str
-
-def isAlphanum(c):
-    """return true if the character is a letter, digit, underscore,
-           dollar sign, or non-ASCII character.
-    """
-    return ((c >= 'a' and c <= 'z') or (c >= '0' and c <= '9') or
-            (c >= 'A' and c <= 'Z') or c == '_' or c == '$' or c == '\\' or (c is not None and ord(c) > 126));
-
-class UnterminatedComment(Exception):
-    pass
-
-class UnterminatedStringLiteral(Exception):
-    pass
-
-class UnterminatedRegularExpression(Exception):
-    pass
-
-class JavascriptMinify(object):
-
-    def _outA(self):
-        self.outstream.write(self.theA)
-    def _outB(self):
-        self.outstream.write(self.theB)
-
-    def _get(self):
-        """return the next character from stdin. Watch out for lookahead. If
-           the character is a control character, translate it to a space or
-           linefeed.
-        """
-        c = self.theLookahead
-        self.theLookahead = None
-        if c == None:
-            c = self.instream.read(1)
-        if c >= ' ' or c == '\n':
-            return c
-        if c == '': # EOF
-            return '\000'
-        if c == '\r':
-            return '\n'
-        return ' '
-
-    def _peek(self):
-        self.theLookahead = self._get()
-        return self.theLookahead
-
-    def _next(self):
-        """get the next character, excluding comments. peek() is used to see
-           if an unescaped '/' is followed by a '/' or '*'.
-        """
-        c = self._get()
-        if c == '/' and self.theA != '\\':
-            p = self._peek()
-            if p == '/':
-                c = self._get()
-                while c > '\n':
-                    c = self._get()
-                return c
-            if p == '*':
-                c = self._get()
-                while 1:
-                    c = self._get()
-                    if c == '*':
-                        if self._peek() == '/':
-                            self._get()
-                            return ' '
-                    if c == '\000':
-                        raise UnterminatedComment()
-
-        return c
-
-    def _action(self, action):
-        """do something! What you do is determined by the argument:
-           1   Output A. Copy B to A. Get the next B.
-           2   Copy B to A. Get the next B. (Delete A).
-           3   Get the next B. (Delete B).
-           action treats a string as a single character. Wow!
-           action recognizes a regular expression if it is preceded by ( or , or =.
-        """
-        if action <= 1:
-            self._outA()
-
-        if action <= 2:
-            self.theA = self.theB
-            if self.theA == "'" or self.theA == '"':
-                while 1:
-                    self._outA()
-                    self.theA = self._get()
-                    if self.theA == self.theB:
-                        break
-                    if self.theA <= '\n':
-                        raise UnterminatedStringLiteral()
-                    if self.theA == '\\':
-                        self._outA()
-                        self.theA = self._get()
-
-
-        if action <= 3:
-            self.theB = self._next()
-            if self.theB == '/' and (self.theA == '(' or self.theA == ',' or
-                                     self.theA == '=' or self.theA == ':' or
-                                     self.theA == '[' or self.theA == '?' or
-                                     self.theA == '!' or self.theA == '&' or
-                                     self.theA == '|' or self.theA == ';' or
-                                     self.theA == '{' or self.theA == '}' or
-                                     self.theA == '\n'):
-                self._outA()
-                self._outB()
-                while 1:
-                    self.theA = self._get()
-                    if self.theA == '/':
-                        break
-                    elif self.theA == '\\':
-                        self._outA()
-                        self.theA = self._get()
-                    elif self.theA <= '\n':
-                        raise UnterminatedRegularExpression()
-                    self._outA()
-                self.theB = self._next()
-
-
-    def _jsmin(self):
-        """Copy the input to the output, deleting the characters which are
-           insignificant to JavaScript. Comments will be removed. Tabs will be
-           replaced with spaces. Carriage returns will be replaced with linefeeds.
-           Most spaces and linefeeds will be removed.
-        """
-        self.theA = '\n'
-        self._action(3)
-
-        while self.theA != '\000':
-            if self.theA == ' ':
-                if isAlphanum(self.theB):
-                    self._action(1)
-                else:
-                    self._action(2)
-            elif self.theA == '\n':
-                if self.theB in ['{', '[', '(', '+', '-']:
-                    self._action(1)
-                elif self.theB == ' ':
-                    self._action(3)
-                else:
-                    if isAlphanum(self.theB):
-                        self._action(1)
-                    else:
-                        self._action(2)
-            else:
-                if self.theB == ' ':
-                    if isAlphanum(self.theA):
-                        self._action(1)
-                    else:
-                        self._action(3)
-                elif self.theB == '\n':
-                    if self.theA in ['}', ']', ')', '+', '-', '"', '\'']:
-                        self._action(1)
-                    else:
-                        if isAlphanum(self.theA):
-                            self._action(1)
-                        else:
-                            self._action(3)
-                else:
-                    self._action(1)
-
-    def minify(self, instream, outstream):
-        self.instream = instream
-        self.outstream = outstream
-        self.theA = '\n'
-        self.theB = None
-        self.theLookahead = None
-
-        self._jsmin()
-        self.instream.close()
-
-if __name__ == '__main__':
-    import sys
-    jsm = JavascriptMinify()
-    jsm.minify(sys.stdin, sys.stdout)
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin_2_0_9.py b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin_2_0_9.py
deleted file mode 100644
index 23bed60..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/jsmin_2_0_9.py
+++ /dev/null
@@ -1,233 +0,0 @@
-# This code is original from jsmin by Douglas Crockford, it was translated to
-# Python by Baruch Even. It was rewritten by Dave St.Germain for speed.
-#
-# The MIT License (MIT)
-# 
-# Copyright (c) 2013 Dave St.Germain
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-
-import sys
-is_3 = sys.version_info >= (3, 0)
-if is_3:
-    import io
-else:
-    import StringIO
-    try:
-        import cStringIO
-    except ImportError:
-        cStringIO = None
-
-
-__all__ = ['jsmin', 'JavascriptMinify']
-__version__ = '2.0.9'
-
-
-def jsmin(js):
-    """
-    returns a minified version of the javascript string
-    """
-    if not is_3:        
-        if cStringIO and not isinstance(js, unicode):
-            # strings can use cStringIO for a 3x performance
-            # improvement, but unicode (in python2) cannot
-            klass = cStringIO.StringIO
-        else:
-            klass = StringIO.StringIO
-    else:
-        klass = io.StringIO
-    ins = klass(js)
-    outs = klass()
-    JavascriptMinify(ins, outs).minify()
-    return outs.getvalue()
-
-
-class JavascriptMinify(object):
-    """
-    Minify an input stream of javascript, writing
-    to an output stream
-    """
-
-    def __init__(self, instream=None, outstream=None):
-        self.ins = instream
-        self.outs = outstream
-
-    def minify(self, instream=None, outstream=None):
-        if instream and outstream:
-            self.ins, self.outs = instream, outstream
-        
-        self.is_return = False
-        self.return_buf = ''
-        
-        def write(char):
-            # all of this is to support literal regular expressions.
-            # sigh
-            if char in 'return':
-                self.return_buf += char
-                self.is_return = self.return_buf == 'return'
-            self.outs.write(char)
-            if self.is_return:
-                self.return_buf = ''
-
-        read = self.ins.read
-
-        space_strings = "abcdefghijklmnopqrstuvwxyz"\
-        "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$\\"
-        starters, enders = '{[(+-', '}])+-"\''
-        newlinestart_strings = starters + space_strings
-        newlineend_strings = enders + space_strings
-        do_newline = False
-        do_space = False
-        escape_slash_count = 0
-        doing_single_comment = False
-        previous_before_comment = ''
-        doing_multi_comment = False
-        in_re = False
-        in_quote = ''
-        quote_buf = []
-        
-        previous = read(1)
-        if previous == '\\':
-            escape_slash_count += 1
-        next1 = read(1)
-        if previous == '/':
-            if next1 == '/':
-                doing_single_comment = True
-            elif next1 == '*':
-                doing_multi_comment = True
-                previous = next1
-                next1 = read(1)
-            else:
-                write(previous)
-        elif not previous:
-            return
-        elif previous >= '!':
-            if previous in "'\"":
-                in_quote = previous
-            write(previous)
-            previous_non_space = previous
-        else:
-            previous_non_space = ' '
-        if not next1:
-            return
-
-        while 1:
-            next2 = read(1)
-            if not next2:
-                last = next1.strip()
-                if not (doing_single_comment or doing_multi_comment)\
-                    and last not in ('', '/'):
-                    if in_quote:
-                        write(''.join(quote_buf))
-                    write(last)
-                break
-            if doing_multi_comment:
-                if next1 == '*' and next2 == '/':
-                    doing_multi_comment = False
-                    next2 = read(1)
-            elif doing_single_comment:
-                if next1 in '\r\n':
-                    doing_single_comment = False
-                    while next2 in '\r\n':
-                        next2 = read(1)
-                        if not next2:
-                            break
-                    if previous_before_comment in ')}]':
-                        do_newline = True
-                    elif previous_before_comment in space_strings:
-                        write('\n')
-            elif in_quote:
-                quote_buf.append(next1)
-
-                if next1 == in_quote:
-                    numslashes = 0
-                    for c in reversed(quote_buf[:-1]):
-                        if c != '\\':
-                            break
-                        else:
-                            numslashes += 1
-                    if numslashes % 2 == 0:
-                        in_quote = ''
-                        write(''.join(quote_buf))
-            elif next1 in '\r\n':
-                if previous_non_space in newlineend_strings \
-                    or previous_non_space > '~':
-                    while 1:
-                        if next2 < '!':
-                            next2 = read(1)
-                            if not next2:
-                                break
-                        else:
-                            if next2 in newlinestart_strings \
-                                or next2 > '~' or next2 == '/':
-                                do_newline = True
-                            break
-            elif next1 < '!' and not in_re:
-                if (previous_non_space in space_strings \
-                    or previous_non_space > '~') \
-                    and (next2 in space_strings or next2 > '~'):
-                    do_space = True
-                elif previous_non_space in '-+' and next2 == previous_non_space:
-                    # protect against + ++ or - -- sequences
-                    do_space = True
-                elif self.is_return and next2 == '/':
-                    # returning a regex...
-                    write(' ')
-            elif next1 == '/':
-                if do_space:
-                    write(' ')
-                if in_re:
-                    if previous != '\\' or (not escape_slash_count % 2) or next2 in 'gimy':
-                        in_re = False
-                    write('/')
-                elif next2 == '/':                    
-                    doing_single_comment = True
-                    previous_before_comment = previous_non_space
-                elif next2 == '*':
-                    doing_multi_comment = True
-                    previous = next1
-                    next1 = next2
-                    next2 = read(1)
-                else:
-                    in_re = previous_non_space in '(,=:[?!&|' or self.is_return # literal regular expression
-                    write('/')
-            else:
-                if do_space:
-                    do_space = False
-                    write(' ')
-                if do_newline:
-                    write('\n')
-                    do_newline = False
-                    
-                write(next1)
-                if not in_re and next1 in "'\"":
-                    in_quote = next1
-                    quote_buf = []
-
-            previous = next1
-            next1 = next2
-
-            if previous >= '!':
-                previous_non_space = previous
-
-            if previous == '\\':
-                escape_slash_count += 1
-            else:
-                escape_slash_count = 0
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/knockout-2.0.0.js b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/knockout-2.0.0.js
deleted file mode 100644
index e5577eb..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/knockout-2.0.0.js
+++ /dev/null
@@ -1,97 +0,0 @@
-// Knockout JavaScript library v2.0.0
-// (c) Steven Sanderson - http://knockoutjs.com/
-// License: MIT (http://www.opensource.org/licenses/mit-license.php)
-
-(function(window,undefined){ 
-function c(a){throw a;}var l=void 0,m=!0,o=null,p=!1,r=window.ko={};r.b=function(a,b){for(var d=a.split("."),e=window,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=b};r.l=function(a,b,d){a[b]=d};
-r.a=new function(){function a(a,e){if("INPUT"!=a.tagName||!a.type)return p;if("click"!=e.toLowerCase())return p;var b=a.type.toLowerCase();return"checkbox"==b||"radio"==b}var b=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,d={},e={};d[/Firefox\/2/i.test(navigator.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];d.MouseEvents="click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave".split(",");for(var f in d){var h=d[f];if(h.length)for(var g=0,i=h.length;g<i;g++)e[h[g]]=
-f}var j=function(){for(var a=3,e=document.createElement("div"),b=e.getElementsByTagName("i");e.innerHTML="<\!--[if gt IE "+ ++a+"]><i></i><![endif]--\>",b[0];);return 4<a?a:l}();return{Ba:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],n:function(a,e){for(var b=0,f=a.length;b<f;b++)e(a[b])},k:function(a,e){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,e);for(var b=0,f=a.length;b<f;b++)if(a[b]===e)return b;return-1},Wa:function(a,e,b){for(var f=0,d=
-a.length;f<d;f++)if(e.call(b,a[f]))return a[f];return o},ca:function(a,e){var b=r.a.k(a,e);0<=b&&a.splice(b,1)},ya:function(a){for(var a=a||[],e=[],b=0,f=a.length;b<f;b++)0>r.a.k(e,a[b])&&e.push(a[b]);return e},ba:function(a,e){for(var a=a||[],b=[],f=0,d=a.length;f<d;f++)b.push(e(a[f]));return b},aa:function(a,e){for(var a=a||[],b=[],f=0,d=a.length;f<d;f++)e(a[f])&&b.push(a[f]);return b},J:function(a,e){for(var b=0,f=e.length;b<f;b++)a.push(e[b]);return a},extend:function(a,e){for(var b in e)e.hasOwnProperty(b)&&
-(a[b]=e[b]);return a},U:function(a){for(;a.firstChild;)r.removeNode(a.firstChild)},oa:function(a,e){r.a.U(a);e&&r.a.n(e,function(e){a.appendChild(e)})},Ja:function(a,e){var b=a.nodeType?[a]:a;if(0<b.length){for(var f=b[0],d=f.parentNode,h=0,g=e.length;h<g;h++)d.insertBefore(e[h],f);h=0;for(g=b.length;h<g;h++)r.removeNode(b[h])}},La:function(a,e){0<=navigator.userAgent.indexOf("MSIE 6")?a.setAttribute("selected",e):a.selected=e},z:function(a){return(a||"").replace(b,"")},Db:function(a,e){for(var b=
-[],f=(a||"").split(e),d=0,h=f.length;d<h;d++){var g=r.a.z(f[d]);""!==g&&b.push(g)}return b},Cb:function(a,e){a=a||"";return e.length>a.length?p:a.substring(0,e.length)===e},hb:function(a){for(var e=Array.prototype.slice.call(arguments,1),b="return ("+a+")",f=0;f<e.length;f++)e[f]&&"object"==typeof e[f]&&(b="with(sc["+f+"]) { "+b+" } ");return(new Function("sc",b))(e)},fb:function(a,e){if(e.compareDocumentPosition)return 16==(e.compareDocumentPosition(a)&16);for(;a!=o;){if(a==e)return m;a=a.parentNode}return p},
-ga:function(a){return r.a.fb(a,document)},s:function(e,b,f){if("undefined"!=typeof jQuery){if(a(e,b))var d=f,f=function(a,e){var b=this.checked;if(e)this.checked=e.Ya!==m;d.call(this,a);this.checked=b};jQuery(e).bind(b,f)}else"function"==typeof e.addEventListener?e.addEventListener(b,f,p):"undefined"!=typeof e.attachEvent?e.attachEvent("on"+b,function(a){f.call(e,a)}):c(Error("Browser doesn't support addEventListener or attachEvent"))},sa:function(b,f){(!b||!b.nodeType)&&c(Error("element must be a DOM node when calling triggerEvent"));
-if("undefined"!=typeof jQuery){var d=[];a(b,f)&&d.push({Ya:b.checked});jQuery(b).trigger(f,d)}else if("function"==typeof document.createEvent)"function"==typeof b.dispatchEvent?(d=document.createEvent(e[f]||"HTMLEvents"),d.initEvent(f,m,m,window,0,0,0,0,0,p,p,p,p,0,b),b.dispatchEvent(d)):c(Error("The supplied element doesn't support dispatchEvent"));else if("undefined"!=typeof b.fireEvent){if("click"==f&&"INPUT"==b.tagName&&("checkbox"==b.type.toLowerCase()||"radio"==b.type.toLowerCase()))b.checked=
-b.checked!==m;b.fireEvent("on"+f)}else c(Error("Browser doesn't support triggering events"))},d:function(a){return r.V(a)?a():a},eb:function(a,e){return 0<=r.a.k((a.className||"").split(/\s+/),e)},Qa:function(a,e,b){var f=r.a.eb(a,e);if(b&&!f)a.className=(a.className||"")+" "+e;else if(f&&!b){for(var b=(a.className||"").split(/\s+/),f="",d=0;d<b.length;d++)b[d]!=e&&(f+=b[d]+" ");a.className=r.a.z(f)}},outerHTML:function(a){if(j===l){var e=a.outerHTML;if("string"==typeof e)return e}e=window.document.createElement("div");
-e.appendChild(a.cloneNode(m));return e.innerHTML},Ma:function(a,e){var b=r.a.d(e);if(b===o||b===l)b="";"innerText"in a?a.innerText=b:a.textContent=b;if(9<=j)a.innerHTML=a.innerHTML},yb:function(a,e){for(var a=r.a.d(a),e=r.a.d(e),b=[],f=a;f<=e;f++)b.push(f);return b},X:function(a){for(var e=[],b=0,f=a.length;b<f;b++)e.push(a[b]);return e},ob:6===j,pb:7===j,Ca:function(a,e){for(var b=r.a.X(a.getElementsByTagName("INPUT")).concat(r.a.X(a.getElementsByTagName("TEXTAREA"))),f="string"==typeof e?function(a){return a.name===
-e}:function(a){return e.test(a.name)},d=[],h=b.length-1;0<=h;h--)f(b[h])&&d.push(b[h]);return d},vb:function(a){return"string"==typeof a&&(a=r.a.z(a))?window.JSON&&window.JSON.parse?window.JSON.parse(a):(new Function("return "+a))():o},qa:function(a){("undefined"==typeof JSON||"undefined"==typeof JSON.stringify)&&c(Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js"));
-return JSON.stringify(r.a.d(a))},wb:function(a,e,b){var b=b||{},f=b.params||{},d=b.includeFields||this.Ba,h=a;if("object"==typeof a&&"FORM"==a.tagName)for(var h=a.action,g=d.length-1;0<=g;g--)for(var j=r.a.Ca(a,d[g]),i=j.length-1;0<=i;i--)f[j[i].name]=j[i].value;var e=r.a.d(e),u=document.createElement("FORM");u.style.display="none";u.action=h;u.method="post";for(var y in e)a=document.createElement("INPUT"),a.name=y,a.value=r.a.qa(r.a.d(e[y])),u.appendChild(a);for(y in f)a=document.createElement("INPUT"),
-a.name=y,a.value=f[y],u.appendChild(a);document.body.appendChild(u);b.submitter?b.submitter(u):u.submit();setTimeout(function(){u.parentNode.removeChild(u)},0)}}};r.b("ko.utils",r.a);
-r.a.n([["arrayForEach",r.a.n],["arrayFirst",r.a.Wa],["arrayFilter",r.a.aa],["arrayGetDistinctValues",r.a.ya],["arrayIndexOf",r.a.k],["arrayMap",r.a.ba],["arrayPushAll",r.a.J],["arrayRemoveItem",r.a.ca],["extend",r.a.extend],["fieldsIncludedWithJsonPost",r.a.Ba],["getFormFields",r.a.Ca],["postJson",r.a.wb],["parseJson",r.a.vb],["registerEventHandler",r.a.s],["stringifyJson",r.a.qa],["range",r.a.yb],["toggleDomNodeCssClass",r.a.Qa],["triggerEvent",r.a.sa],["unwrapObservable",r.a.d]],function(a){r.b("ko.utils."+
-a[0],a[1])});Function.prototype.bind||(Function.prototype.bind=function(a){var b=this,d=Array.prototype.slice.call(arguments),a=d.shift();return function(){return b.apply(a,d.concat(Array.prototype.slice.call(arguments)))}});
-r.a.e=new function(){var a=0,b="__ko__"+(new Date).getTime(),d={};return{get:function(a,b){var d=r.a.e.getAll(a,p);return d===l?l:d[b]},set:function(a,b,d){d===l&&r.a.e.getAll(a,p)===l||(r.a.e.getAll(a,m)[b]=d)},getAll:function(e,f){var h=e[b];if(!(h&&"null"!==h)){if(!f)return;h=e[b]="ko"+a++;d[h]={}}return d[h]},clear:function(a){var f=a[b];f&&(delete d[f],a[b]=o)}}};r.b("ko.utils.domData",r.a.e);r.b("ko.utils.domData.clear",r.a.e.clear);
-r.a.A=new function(){function a(a,b){var h=r.a.e.get(a,d);h===l&&b&&(h=[],r.a.e.set(a,d,h));return h}function b(e){var b=a(e,p);if(b)for(var b=b.slice(0),d=0;d<b.length;d++)b[d](e);r.a.e.clear(e);"function"==typeof jQuery&&"function"==typeof jQuery.cleanData&&jQuery.cleanData([e])}var d="__ko_domNodeDisposal__"+(new Date).getTime();return{va:function(e,b){"function"!=typeof b&&c(Error("Callback must be a function"));a(e,m).push(b)},Ia:function(e,b){var h=a(e,p);h&&(r.a.ca(h,b),0==h.length&&r.a.e.set(e,
-d,l))},F:function(a){if(!(1!=a.nodeType&&9!=a.nodeType)){b(a);var f=[];r.a.J(f,a.getElementsByTagName("*"));for(var a=0,d=f.length;a<d;a++)b(f[a])}},removeNode:function(a){r.F(a);a.parentNode&&a.parentNode.removeChild(a)}}};r.F=r.a.A.F;r.removeNode=r.a.A.removeNode;r.b("ko.cleanNode",r.F);r.b("ko.removeNode",r.removeNode);r.b("ko.utils.domNodeDisposal",r.a.A);r.b("ko.utils.domNodeDisposal.addDisposeCallback",r.a.A.va);r.b("ko.utils.domNodeDisposal.removeDisposeCallback",r.a.A.Ia);
-r.a.ma=function(a){var b;if("undefined"!=typeof jQuery){if((b=jQuery.clean([a]))&&b[0]){for(a=b[0];a.parentNode&&11!==a.parentNode.nodeType;)a=a.parentNode;a.parentNode&&a.parentNode.removeChild(a)}}else{var d=r.a.z(a).toLowerCase();b=document.createElement("div");d=d.match(/^<(thead|tbody|tfoot)/)&&[1,"<table>","</table>"]||!d.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!d.indexOf("<td")||!d.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||[0,"",""];a="ignored<div>"+
-d[1]+a+d[2]+"</div>";for("function"==typeof window.innerShiv?b.appendChild(window.innerShiv(a)):b.innerHTML=a;d[0]--;)b=b.lastChild;b=r.a.X(b.lastChild.childNodes)}return b};r.a.Z=function(a,b){r.a.U(a);if(b!==o&&b!==l)if("string"!=typeof b&&(b=b.toString()),"undefined"!=typeof jQuery)jQuery(a).html(b);else for(var d=r.a.ma(b),e=0;e<d.length;e++)a.appendChild(d[e])};r.b("ko.utils.parseHtmlFragment",r.a.ma);r.b("ko.utils.setHtml",r.a.Z);
-r.r=function(){function a(){return(4294967296*(1+Math.random())|0).toString(16).substring(1)}function b(a,f){if(a)if(8==a.nodeType){var d=r.r.Ga(a.nodeValue);d!=o&&f.push({cb:a,tb:d})}else if(1==a.nodeType)for(var d=0,g=a.childNodes,i=g.length;d<i;d++)b(g[d],f)}var d={};return{ka:function(b){"function"!=typeof b&&c(Error("You can only pass a function to ko.memoization.memoize()"));var f=a()+a();d[f]=b;return"<\!--[ko_memo:"+f+"]--\>"},Ra:function(a,b){var h=d[a];h===l&&c(Error("Couldn't find any memo with ID "+
-a+". Perhaps it's already been unmemoized."));try{return h.apply(o,b||[]),m}finally{delete d[a]}},Sa:function(a,f){var d=[];b(a,d);for(var g=0,i=d.length;g<i;g++){var j=d[g].cb,k=[j];f&&r.a.J(k,f);r.r.Ra(d[g].tb,k);j.nodeValue="";j.parentNode&&j.parentNode.removeChild(j)}},Ga:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:o}}}();r.b("ko.memoization",r.r);r.b("ko.memoization.memoize",r.r.ka);r.b("ko.memoization.unmemoize",r.r.Ra);r.b("ko.memoization.parseMemoText",r.r.Ga);
-r.b("ko.memoization.unmemoizeDomNodeAndDescendants",r.r.Sa);r.Aa={throttle:function(a,b){a.throttleEvaluation=b;var d=o;return r.i({read:a,write:function(e){clearTimeout(d);d=setTimeout(function(){a(e)},b)}})},notify:function(a,b){a.equalityComparer="always"==b?function(){return p}:r.w.fn.equalityComparer;return a}};r.b("ko.extenders",r.Aa);r.Oa=function(a,b){this.da=a;this.bb=b;r.l(this,"dispose",this.v)};r.Oa.prototype.v=function(){this.nb=m;this.bb()};
-r.R=function(){this.u={};r.a.extend(this,r.R.fn);r.l(this,"subscribe",this.ra);r.l(this,"extend",this.extend);r.l(this,"getSubscriptionsCount",this.kb)};
-r.R.fn={ra:function(a,b,d){var d=d||"change",a=b?a.bind(b):a,e=new r.Oa(a,function(){r.a.ca(this.u[d],e)}.bind(this));this.u[d]||(this.u[d]=[]);this.u[d].push(e);return e},notifySubscribers:function(a,b){b=b||"change";this.u[b]&&r.a.n(this.u[b].slice(0),function(b){b&&b.nb!==m&&b.da(a)})},kb:function(){var a=0,b;for(b in this.u)this.u.hasOwnProperty(b)&&(a+=this.u[b].length);return a},extend:function(a){var b=this;if(a)for(var d in a){var e=r.Aa[d];"function"==typeof e&&(b=e(b,a[d]))}return b}};
-r.Ea=function(a){return"function"==typeof a.ra&&"function"==typeof a.notifySubscribers};r.b("ko.subscribable",r.R);r.b("ko.isSubscribable",r.Ea);r.T=function(){var a=[];return{Xa:function(b){a.push({da:b,za:[]})},end:function(){a.pop()},Ha:function(b){r.Ea(b)||c("Only subscribable things can act as dependencies");if(0<a.length){var d=a[a.length-1];0<=r.a.k(d.za,b)||(d.za.push(b),d.da(b))}}}}();var B={undefined:m,"boolean":m,number:m,string:m};
-r.w=function(a){function b(){if(0<arguments.length){if(!b.equalityComparer||!b.equalityComparer(d,arguments[0]))b.H(),d=arguments[0],b.G();return this}r.T.Ha(b);return d}var d=a;r.R.call(b);b.G=function(){b.notifySubscribers(d)};b.H=function(){b.notifySubscribers(d,"beforeChange")};r.a.extend(b,r.w.fn);r.l(b,"valueHasMutated",b.G);r.l(b,"valueWillMutate",b.H);return b};r.w.fn={B:r.w,equalityComparer:function(a,b){return a===o||typeof a in B?a===b:p}};
-r.V=function(a){return a===o||a===l||a.B===l?p:a.B===r.w?m:r.V(a.B)};r.P=function(a){return"function"==typeof a&&a.B===r.w?m:"function"==typeof a&&a.B===r.i&&a.lb?m:p};r.b("ko.observable",r.w);r.b("ko.isObservable",r.V);r.b("ko.isWriteableObservable",r.P);
-r.Q=function(a){0==arguments.length&&(a=[]);a!==o&&a!==l&&!("length"in a)&&c(Error("The argument passed when initializing an observable array must be an array, or null, or undefined."));var b=new r.w(a);r.a.extend(b,r.Q.fn);r.l(b,"remove",b.remove);r.l(b,"removeAll",b.zb);r.l(b,"destroy",b.fa);r.l(b,"destroyAll",b.ab);r.l(b,"indexOf",b.indexOf);r.l(b,"replace",b.replace);return b};
-r.Q.fn={remove:function(a){for(var b=this(),d=[],e="function"==typeof a?a:function(b){return b===a},f=0;f<b.length;f++){var h=b[f];e(h)&&(0===d.length&&this.H(),d.push(h),b.splice(f,1),f--)}d.length&&this.G();return d},zb:function(a){if(a===l){var b=this(),d=b.slice(0);this.H();b.splice(0,b.length);this.G();return d}return!a?[]:this.remove(function(b){return 0<=r.a.k(a,b)})},fa:function(a){var b=this(),d="function"==typeof a?a:function(b){return b===a};this.H();for(var e=b.length-1;0<=e;e--)d(b[e])&&
-(b[e]._destroy=m);this.G()},ab:function(a){return a===l?this.fa(function(){return m}):!a?[]:this.fa(function(b){return 0<=r.a.k(a,b)})},indexOf:function(a){var b=this();return r.a.k(b,a)},replace:function(a,b){var d=this.indexOf(a);0<=d&&(this.H(),this()[d]=b,this.G())}};r.a.n("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){r.Q.fn[a]=function(){var b=this();this.H();b=b[a].apply(b,arguments);this.G();return b}});
-r.a.n(["slice"],function(a){r.Q.fn[a]=function(){var b=this();return b[a].apply(b,arguments)}});r.b("ko.observableArray",r.Q);function C(a,b){a&&"object"==typeof a?b=a:(b=b||{},b.read=a||b.read);"function"!=typeof b.read&&c("Pass a function that returns the value of the dependentObservable");return b}
-r.i=function(a,b,d){function e(){r.a.n(q,function(a){a.v()});q=[]}function f(){var a=g.throttleEvaluation;a&&0<=a?(clearTimeout(v),v=setTimeout(h,a)):h()}function h(){if(j&&"function"==typeof d.disposeWhen&&d.disposeWhen())g.v();else{try{e();r.T.Xa(function(a){q.push(a.ra(f))});var a=d.read.call(d.owner||b);g.notifySubscribers(i,"beforeChange");i=a}finally{r.T.end()}g.notifySubscribers(i);j=m}}function g(){if(0<arguments.length)"function"===typeof d.write?d.write.apply(d.owner||b,arguments):c("Cannot write a value to a dependentObservable unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
-else return j||h(),r.T.Ha(g),i}var i,j=p,d=C(a,d),k="object"==typeof d.disposeWhenNodeIsRemoved?d.disposeWhenNodeIsRemoved:o,n=o;if(k){n=function(){g.v()};r.a.A.va(k,n);var t=d.disposeWhen;d.disposeWhen=function(){return!r.a.ga(k)||"function"==typeof t&&t()}}var q=[],v=o;g.jb=function(){return q.length};g.lb="function"===typeof d.write;g.v=function(){k&&r.a.A.Ia(k,n);e()};r.R.call(g);r.a.extend(g,r.i.fn);d.deferEvaluation!==m&&h();r.l(g,"dispose",g.v);r.l(g,"getDependenciesCount",g.jb);return g};
-r.i.fn={B:r.i};r.i.B=r.w;r.b("ko.dependentObservable",r.i);r.b("ko.computed",r.i);
-(function(){function a(e,f,h){h=h||new d;e=f(e);if(!("object"==typeof e&&e!==o&&e!==l&&!(e instanceof Date)))return e;var g=e instanceof Array?[]:{};h.save(e,g);b(e,function(b){var d=f(e[b]);switch(typeof d){case "boolean":case "number":case "string":case "function":g[b]=d;break;case "object":case "undefined":var k=h.get(d);g[b]=k!==l?k:a(d,f,h)}});return g}function b(a,b){if(a instanceof Array)for(var d=0;d<a.length;d++)b(d);else for(d in a)b(d)}function d(){var a=[],b=[];this.save=function(d,g){var i=
-r.a.k(a,d);0<=i?b[i]=g:(a.push(d),b.push(g))};this.get=function(d){d=r.a.k(a,d);return 0<=d?b[d]:l}}r.Pa=function(b){0==arguments.length&&c(Error("When calling ko.toJS, pass the object you want to convert."));return a(b,function(a){for(var b=0;r.V(a)&&10>b;b++)a=a();return a})};r.toJSON=function(a){a=r.Pa(a);return r.a.qa(a)}})();r.b("ko.toJS",r.Pa);r.b("ko.toJSON",r.toJSON);
-r.h={q:function(a){return"OPTION"==a.tagName?a.__ko__hasDomDataOptionValue__===m?r.a.e.get(a,r.c.options.la):a.getAttribute("value"):"SELECT"==a.tagName?0<=a.selectedIndex?r.h.q(a.options[a.selectedIndex]):l:a.value},S:function(a,b){if("OPTION"==a.tagName)switch(typeof b){case "string":r.a.e.set(a,r.c.options.la,l);"__ko__hasDomDataOptionValue__"in a&&delete a.__ko__hasDomDataOptionValue__;a.value=b;break;default:r.a.e.set(a,r.c.options.la,b),a.__ko__hasDomDataOptionValue__=m,a.value="number"===typeof b?
-b:""}else if("SELECT"==a.tagName)for(var d=a.options.length-1;0<=d;d--){if(r.h.q(a.options[d])==b){a.selectedIndex=d;break}}else{if(b===o||b===l)b="";a.value=b}}};r.b("ko.selectExtensions",r.h);r.b("ko.selectExtensions.readValue",r.h.q);r.b("ko.selectExtensions.writeValue",r.h.S);
-r.j=function(){function a(a,e){for(var d=o;a!=d;)d=a,a=a.replace(b,function(a,b){return e[b]});return a}var b=/\@ko_token_(\d+)\@/g,d=/^[\_$a-z][\_$a-z0-9]*(\[.*?\])*(\.[\_$a-z][\_$a-z0-9]*(\[.*?\])*)*$/i,e=["true","false"];return{D:[],Y:function(b){var e=r.a.z(b);if(3>e.length)return[];"{"===e.charAt(0)&&(e=e.substring(1,e.length-1));for(var b=[],d=o,i,j=0;j<e.length;j++){var k=e.charAt(j);if(d===o)switch(k){case '"':case "'":case "/":d=j,i=k}else if(k==i&&"\\"!==e.charAt(j-1)){k=e.substring(d,j+
-1);b.push(k);var n="@ko_token_"+(b.length-1)+"@",e=e.substring(0,d)+n+e.substring(j+1),j=j-(k.length-n.length),d=o}}i=d=o;for(var t=0,q=o,j=0;j<e.length;j++){k=e.charAt(j);if(d===o)switch(k){case "{":d=j;q=k;i="}";break;case "(":d=j;q=k;i=")";break;case "[":d=j,q=k,i="]"}k===q?t++:k===i&&(t--,0===t&&(k=e.substring(d,j+1),b.push(k),n="@ko_token_"+(b.length-1)+"@",e=e.substring(0,d)+n+e.substring(j+1),j-=k.length-n.length,d=o))}i=[];e=e.split(",");d=0;for(j=e.length;d<j;d++)t=e[d],q=t.indexOf(":"),
-0<q&&q<t.length-1?(k=t.substring(q+1),i.push({key:a(t.substring(0,q),b),value:a(k,b)})):i.push({unknown:a(t,b)});return i},ia:function(a){for(var b="string"===typeof a?r.j.Y(a):a,g=[],a=[],i,j=0;i=b[j];j++)if(0<g.length&&g.push(","),i.key){var k;a:{k=i.key;var n=r.a.z(k);switch(n.length&&n.charAt(0)){case "'":case '"':break a;default:k="'"+n+"'"}}i=i.value;g.push(k);g.push(":");g.push(i);n=r.a.z(i);if(0<=r.a.k(e,r.a.z(n).toLowerCase())?0:n.match(d)!==o)0<a.length&&a.push(", "),a.push(k+" : function(__ko_value) { "+
-i+" = __ko_value; }")}else i.unknown&&g.push(i.unknown);b=g.join("");0<a.length&&(b=b+", '_ko_property_writers' : { "+a.join("")+" } ");return b},rb:function(a,b){for(var e=0;e<a.length;e++)if(r.a.z(a[e].key)==b)return m;return p}}}();r.b("ko.jsonExpressionRewriting",r.j);r.b("ko.jsonExpressionRewriting.bindingRewriteValidators",r.j.D);r.b("ko.jsonExpressionRewriting.parseObjectLiteral",r.j.Y);r.b("ko.jsonExpressionRewriting.insertPropertyAccessorsIntoJson",r.j.ia);
-(function(){function a(a){return 8==a.nodeType&&(f?a.text:a.nodeValue).match(h)}function b(a){return 8==a.nodeType&&(f?a.text:a.nodeValue).match(g)}function d(e,d){for(var f=e,g=1,h=[];f=f.nextSibling;){if(b(f)&&(g--,0===g))return h;h.push(f);a(f)&&g++}d||c(Error("Cannot find closing comment tag to match: "+e.nodeValue));return o}function e(a,b){var e=d(a,b);return e?0<e.length?e[e.length-1].nextSibling:a.nextSibling:o}var f="<\!--test--\>"===document.createComment("test").text,h=f?/^<\!--\s*ko\s+(.*\:.*)\s*--\>$/:
-/^\s*ko\s+(.*\:.*)\s*$/,g=f?/^<\!--\s*\/ko\s*--\>$/:/^\s*\/ko\s*$/,i={ul:m,ol:m};r.f={C:{},childNodes:function(b){return a(b)?d(b):b.childNodes},ha:function(b){if(a(b))for(var b=r.f.childNodes(b),e=0,d=b.length;e<d;e++)r.removeNode(b[e]);else r.a.U(b)},oa:function(b,e){if(a(b)){r.f.ha(b);for(var d=b.nextSibling,f=0,g=e.length;f<g;f++)d.parentNode.insertBefore(e[f],d)}else r.a.oa(b,e)},xb:function(b,e){a(b)?b.parentNode.insertBefore(e,b.nextSibling):b.firstChild?b.insertBefore(e,b.firstChild):b.appendChild(e)},
-mb:function(b,e,d){a(b)?b.parentNode.insertBefore(e,d.nextSibling):d.nextSibling?b.insertBefore(e,d.nextSibling):b.appendChild(e)},nextSibling:function(d){return a(d)?e(d).nextSibling:d.nextSibling&&b(d.nextSibling)?l:d.nextSibling},ta:function(b){return(b=a(b))?b[1]:o},ib:function(a){if(r.f.ta(a)){var b;b=r.f.childNodes(a);for(var e=[],d=0,f=b.length;d<f;d++)r.a.A.F(b[d]),e.push(r.a.outerHTML(b[d]));b=String.prototype.concat.apply("",e);r.f.ha(a);(new r.m.I(a)).text(b)}},Fa:function(d){if(i[d.tagName.toLowerCase()]){var f=
-d.firstChild;if(f){do if(1===f.nodeType){var g;g=f.firstChild;var h=o;if(g){do if(h)h.push(g);else if(a(g)){var q=e(g,m);q?g=q:h=[g]}else b(g)&&(h=[g]);while(g=g.nextSibling)}if(g=h){h=f.nextSibling;for(q=0;q<g.length;q++)h?d.insertBefore(g[q],h):d.appendChild(g[q])}}while(f=f.nextSibling)}}}}})();r.L=function(){};
-r.a.extend(r.L.prototype,{nodeHasBindings:function(a){switch(a.nodeType){case 1:return a.getAttribute("data-bind")!=o;case 8:return r.f.ta(a)!=o;default:return p}},getBindings:function(a,b){var d=this.getBindingsString(a,b);return d?this.parseBindingsString(d,b):o},getBindingsString:function(a){switch(a.nodeType){case 1:return a.getAttribute("data-bind");case 8:return r.f.ta(a);default:return o}},parseBindingsString:function(a,b){try{var d=b.$data,e=" { "+r.j.ia(a)+" } ";return r.a.hb(e,d===o?window:
-d,b)}catch(f){c(Error("Unable to parse bindings.\nMessage: "+f+";\nBindings value: "+a))}}});r.L.instance=new r.L;r.b("ko.bindingProvider",r.L);
-(function(){function a(a,d){for(var h,g=d.childNodes[0];h=g;)g=r.f.nextSibling(h),b(a,h,p)}function b(b,f,h){var g=m,i=1==f.nodeType;i&&r.f.Fa(f);if(i&&h||r.L.instance.nodeHasBindings(f))g=d(f,o,b,h).Bb;i&&g&&a(b,f)}function d(a,b,d,g){function i(a){return function(){return n[a]}}function j(){return n}var k=0;r.f.ib(a);var n,t;new r.i(function(){var q=d&&d instanceof r.K?d:new r.K(r.a.d(d)),v=q.$data;g&&r.Na(a,q);if(n=("function"==typeof b?b():b)||r.L.instance.getBindings(a,q)){if(0===k){k=1;for(var s in n){var w=
-r.c[s];w&&8===a.nodeType&&!r.f.C[s]&&c(Error("The binding '"+s+"' cannot be used with virtual elements"));if(w&&"function"==typeof w.init&&(w=(0,w.init)(a,i(s),j,v,q))&&w.controlsDescendantBindings)t!==l&&c(Error("Multiple bindings ("+t+" and "+s+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.")),t=s}k=2}if(2===k)for(s in n)(w=r.c[s])&&"function"==typeof w.update&&(0,w.update)(a,i(s),j,v,q)}},o,{disposeWhenNodeIsRemoved:a});
-return{Bb:t===l}}r.c={};r.K=function(a,b){this.$data=a;b?(this.$parent=b.$data,this.$parents=(b.$parents||[]).slice(0),this.$parents.unshift(this.$parent),this.$root=b.$root):(this.$parents=[],this.$root=a)};r.K.prototype.createChildContext=function(a){return new r.K(a,this)};r.Na=function(a,b){if(2==arguments.length)r.a.e.set(a,"__ko_bindingContext__",b);else return r.a.e.get(a,"__ko_bindingContext__")};r.xa=function(a,b,h){1===a.nodeType&&r.f.Fa(a);return d(a,b,h,m)};r.Ta=function(b,d){1===d.nodeType&&
-a(b,d)};r.wa=function(a,d){d&&1!==d.nodeType&&8!==d.nodeType&&c(Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node"));d=d||window.document.body;b(a,d,m)};r.ea=function(a){switch(a.nodeType){case 1:case 8:var b=r.Na(a);if(b)return b;if(a.parentNode)return r.ea(a.parentNode)}};r.$a=function(a){return(a=r.ea(a))?a.$data:l};r.b("ko.bindingHandlers",r.c);r.b("ko.applyBindings",r.wa);r.b("ko.applyBindingsToDescendants",r.Ta);r.b("ko.applyBindingsToNode",
-r.xa);r.b("ko.contextFor",r.ea);r.b("ko.dataFor",r.$a)})();r.a.n(["click"],function(a){r.c[a]={init:function(b,d,e,f){return r.c.event.init.call(this,b,function(){var b={};b[a]=d();return b},e,f)}}});
-r.c.event={init:function(a,b,d,e){var f=b()||{},h;for(h in f)(function(){var f=h;"string"==typeof f&&r.a.s(a,f,function(a){var h,k=b()[f];if(k){var n=d();try{var t=r.a.X(arguments);t.unshift(e);h=k.apply(e,t)}finally{if(h!==m)a.preventDefault?a.preventDefault():a.returnValue=p}if(n[f+"Bubble"]===p)a.cancelBubble=m,a.stopPropagation&&a.stopPropagation()}})})()}};
-r.c.submit={init:function(a,b,d,e){"function"!=typeof b()&&c(Error("The value for a submit binding must be a function"));r.a.s(a,"submit",function(d){var h,g=b();try{h=g.call(e,a)}finally{if(h!==m)d.preventDefault?d.preventDefault():d.returnValue=p}})}};r.c.visible={update:function(a,b){var d=r.a.d(b()),e="none"!=a.style.display;if(d&&!e)a.style.display="";else if(!d&&e)a.style.display="none"}};
-r.c.enable={update:function(a,b){var d=r.a.d(b());if(d&&a.disabled)a.removeAttribute("disabled");else if(!d&&!a.disabled)a.disabled=m}};r.c.disable={update:function(a,b){r.c.enable.update(a,function(){return!r.a.d(b())})}};function D(a,b,d){d&&b!==r.h.q(a)&&r.h.S(a,b);b!==r.h.q(a)&&r.a.sa(a,"change")}
-r.c.value={init:function(a,b,d){var e=["change"],f=d().valueUpdate;f&&("string"==typeof f&&(f=[f]),r.a.J(e,f),e=r.a.ya(e));r.a.n(e,function(e){var f=p;r.a.Cb(e,"after")&&(f=m,e=e.substring(5));var i=f?function(a){setTimeout(a,0)}:function(a){a()};r.a.s(a,e,function(){i(function(){var e=b(),f=r.h.q(a);r.P(e)?e(f):(e=d(),e._ko_property_writers&&e._ko_property_writers.value&&e._ko_property_writers.value(f))})})})},update:function(a,b){var d=r.a.d(b()),e=r.h.q(a),f=d!=e;0===d&&0!==e&&"0"!==e&&(f=m);f&&
-(e=function(){r.h.S(a,d)},e(),"SELECT"==a.tagName&&setTimeout(e,0));"SELECT"==a.tagName&&0<a.length&&D(a,d,p)}};
-r.c.options={update:function(a,b,d){"SELECT"!=a.tagName&&c(Error("options binding applies only to SELECT elements"));var e=0==a.length,f=r.a.ba(r.a.aa(a.childNodes,function(a){return a.tagName&&"OPTION"==a.tagName&&a.selected}),function(a){return r.h.q(a)||a.innerText||a.textContent}),h=a.scrollTop;a.scrollTop=0;for(var g=r.a.d(b());0<a.length;)r.F(a.options[0]),a.remove(0);if(g){d=d();"number"!=typeof g.length&&(g=[g]);if(d.optionsCaption){var i=document.createElement("OPTION");r.a.Z(i,d.optionsCaption);
-r.h.S(i,l);a.appendChild(i)}for(var b=0,j=g.length;b<j;b++){var i=document.createElement("OPTION"),k="string"==typeof d.optionsValue?g[b][d.optionsValue]:g[b],k=r.a.d(k);r.h.S(i,k);var n=d.optionsText,k="function"==typeof n?n(g[b]):"string"==typeof n?g[b][n]:k;if(k===o||k===l)k="";r.a.Ma(i,k);a.appendChild(i)}g=a.getElementsByTagName("OPTION");b=i=0;for(j=g.length;b<j;b++)0<=r.a.k(f,r.h.q(g[b]))&&(r.a.La(g[b],m),i++);if(h)a.scrollTop=h;e&&"value"in d&&D(a,r.a.d(d.value),m)}}};r.c.options.la="__ko.optionValueDomData__";
-r.c.selectedOptions={Da:function(a){for(var b=[],a=a.childNodes,d=0,e=a.length;d<e;d++){var f=a[d];"OPTION"==f.tagName&&f.selected&&b.push(r.h.q(f))}return b},init:function(a,b,d){r.a.s(a,"change",function(){var a=b();r.P(a)?a(r.c.selectedOptions.Da(this)):(a=d(),a._ko_property_writers&&a._ko_property_writers.value&&a._ko_property_writers.value(r.c.selectedOptions.Da(this)))})},update:function(a,b){"SELECT"!=a.tagName&&c(Error("values binding applies only to SELECT elements"));var d=r.a.d(b());if(d&&
-"number"==typeof d.length)for(var e=a.childNodes,f=0,h=e.length;f<h;f++){var g=e[f];"OPTION"==g.tagName&&r.a.La(g,0<=r.a.k(d,r.h.q(g)))}}};r.c.text={update:function(a,b){r.a.Ma(a,b())}};r.c.html={init:function(){return{controlsDescendantBindings:m}},update:function(a,b){var d=r.a.d(b());r.a.Z(a,d)}};r.c.css={update:function(a,b){var d=r.a.d(b()||{}),e;for(e in d)if("string"==typeof e){var f=r.a.d(d[e]);r.a.Qa(a,e,f)}}};
-r.c.style={update:function(a,b){var d=r.a.d(b()||{}),e;for(e in d)if("string"==typeof e){var f=r.a.d(d[e]);a.style[e]=f||""}}};r.c.uniqueName={init:function(a,b){if(b())a.name="ko_unique_"+ ++r.c.uniqueName.Za,(r.a.ob||r.a.pb)&&a.mergeAttributes(document.createElement("<input name='"+a.name+"'/>"),p)}};r.c.uniqueName.Za=0;
-r.c.checked={init:function(a,b,d){r.a.s(a,"click",function(){var e;if("checkbox"==a.type)e=a.checked;else if("radio"==a.type&&a.checked)e=a.value;else return;var f=b();"checkbox"==a.type&&r.a.d(f)instanceof Array?(e=r.a.k(r.a.d(f),a.value),a.checked&&0>e?f.push(a.value):!a.checked&&0<=e&&f.splice(e,1)):r.P(f)?f()!==e&&f(e):(f=d(),f._ko_property_writers&&f._ko_property_writers.checked&&f._ko_property_writers.checked(e))});"radio"==a.type&&!a.name&&r.c.uniqueName.init(a,function(){return m})},update:function(a,
-b){var d=r.a.d(b());if("checkbox"==a.type)a.checked=d instanceof Array?0<=r.a.k(d,a.value):d;else if("radio"==a.type)a.checked=a.value==d}};r.c.attr={update:function(a,b){var d=r.a.d(b())||{},e;for(e in d)if("string"==typeof e){var f=r.a.d(d[e]);f===p||f===o||f===l?a.removeAttribute(e):a.setAttribute(e,f.toString())}}};
-r.c.hasfocus={init:function(a,b,d){function e(a){var e=b();a!=r.a.d(e)&&(r.P(e)?e(a):(e=d(),e._ko_property_writers&&e._ko_property_writers.hasfocus&&e._ko_property_writers.hasfocus(a)))}r.a.s(a,"focus",function(){e(m)});r.a.s(a,"focusin",function(){e(m)});r.a.s(a,"blur",function(){e(p)});r.a.s(a,"focusout",function(){e(p)})},update:function(a,b){var d=r.a.d(b());d?a.focus():a.blur();r.a.sa(a,d?"focusin":"focusout")}};
-r.c["with"]={o:function(a){return function(){var b=a();return{"if":b,data:b,templateEngine:r.p.M}}},init:function(a,b){return r.c.template.init(a,r.c["with"].o(b))},update:function(a,b,d,e,f){return r.c.template.update(a,r.c["with"].o(b),d,e,f)}};r.j.D["with"]=p;r.f.C["with"]=m;r.c["if"]={o:function(a){return function(){return{"if":a(),templateEngine:r.p.M}}},init:function(a,b){return r.c.template.init(a,r.c["if"].o(b))},update:function(a,b,d,e,f){return r.c.template.update(a,r.c["if"].o(b),d,e,f)}};
-r.j.D["if"]=p;r.f.C["if"]=m;r.c.ifnot={o:function(a){return function(){return{ifnot:a(),templateEngine:r.p.M}}},init:function(a,b){return r.c.template.init(a,r.c.ifnot.o(b))},update:function(a,b,d,e,f){return r.c.template.update(a,r.c.ifnot.o(b),d,e,f)}};r.j.D.ifnot=p;r.f.C.ifnot=m;
-r.c.foreach={o:function(a){return function(){var b=r.a.d(a());return!b||"number"==typeof b.length?{foreach:b,templateEngine:r.p.M}:{foreach:b.data,includeDestroyed:b.includeDestroyed,afterAdd:b.afterAdd,beforeRemove:b.beforeRemove,afterRender:b.afterRender,templateEngine:r.p.M}}},init:function(a,b){return r.c.template.init(a,r.c.foreach.o(b))},update:function(a,b,d,e,f){return r.c.template.update(a,r.c.foreach.o(b),d,e,f)}};r.j.D.foreach=p;r.f.C.foreach=m;r.b("ko.allowedVirtualElementBindings",r.f.C);
-r.t=function(){};r.t.prototype.renderTemplateSource=function(){c("Override renderTemplateSource")};r.t.prototype.createJavaScriptEvaluatorBlock=function(){c("Override createJavaScriptEvaluatorBlock")};r.t.prototype.makeTemplateSource=function(a){if("string"==typeof a){var b=document.getElementById(a);b||c(Error("Cannot find template with ID "+a));return new r.m.g(b)}if(1==a.nodeType||8==a.nodeType)return new r.m.I(a);c(Error("Unknown template type: "+a))};
-r.t.prototype.renderTemplate=function(a,b,d){return this.renderTemplateSource(this.makeTemplateSource(a),b,d)};r.t.prototype.isTemplateRewritten=function(a){return this.allowTemplateRewriting===p?m:this.W&&this.W[a]?m:this.makeTemplateSource(a).data("isRewritten")};r.t.prototype.rewriteTemplate=function(a,b){var d=this.makeTemplateSource(a),e=b(d.text());d.text(e);d.data("isRewritten",m);if("string"==typeof a)this.W=this.W||{},this.W[a]=m};r.b("ko.templateEngine",r.t);
-r.$=function(){function a(a,b,d){for(var a=r.j.Y(a),g=r.j.D,i=0;i<a.length;i++){var j=a[i].key;if(g.hasOwnProperty(j)){var k=g[j];"function"===typeof k?(j=k(a[i].value))&&c(Error(j)):k||c(Error("This template engine does not support the '"+j+"' binding within its templates"))}}a="ko.templateRewriting.applyMemoizedBindingsToNextSibling(function() {             return (function() { return { "+r.j.ia(a)+" } })()         })";return d.createJavaScriptEvaluatorBlock(a)+b}var b=/(<[a-z]+\d*(\s+(?!data-bind=)[a-z0-9\-]+(=(\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind=(["'])([\s\S]*?)\5/gi,
-d=/<\!--\s*ko\b\s*([\s\S]*?)\s*--\>/g;return{gb:function(a,b){b.isTemplateRewritten(a)||b.rewriteTemplate(a,function(a){return r.$.ub(a,b)})},ub:function(e,f){return e.replace(b,function(b,e,d,j,k,n,t){return a(t,e,f)}).replace(d,function(b,e){return a(e,"<\!-- ko --\>",f)})},Ua:function(a){return r.r.ka(function(b,d){b.nextSibling&&r.xa(b.nextSibling,a,d)})}}}();r.b("ko.templateRewriting",r.$);r.b("ko.templateRewriting.applyMemoizedBindingsToNextSibling",r.$.Ua);r.m={};r.m.g=function(a){this.g=a};
-r.m.g.prototype.text=function(){if(0==arguments.length)return"script"==this.g.tagName.toLowerCase()?this.g.text:this.g.innerHTML;var a=arguments[0];"script"==this.g.tagName.toLowerCase()?this.g.text=a:r.a.Z(this.g,a)};r.m.g.prototype.data=function(a){if(1===arguments.length)return r.a.e.get(this.g,"templateSourceData_"+a);r.a.e.set(this.g,"templateSourceData_"+a,arguments[1])};r.m.I=function(a){this.g=a};r.m.I.prototype=new r.m.g;
-r.m.I.prototype.text=function(){if(0==arguments.length)return r.a.e.get(this.g,"__ko_anon_template__");r.a.e.set(this.g,"__ko_anon_template__",arguments[0])};r.b("ko.templateSources",r.m);r.b("ko.templateSources.domElement",r.m.g);r.b("ko.templateSources.anonymousTemplate",r.m.I);
-(function(){function a(a,b,d){for(var g=0;node=a[g];g++)node.parentNode===b&&(1===node.nodeType||8===node.nodeType)&&d(node)}function b(a,b,h,g,i){var i=i||{},j=i.templateEngine||d;r.$.gb(h,j);h=j.renderTemplate(h,g,i);("number"!=typeof h.length||0<h.length&&"number"!=typeof h[0].nodeType)&&c("Template engine must return an array of DOM nodes");j=p;switch(b){case "replaceChildren":r.f.oa(a,h);j=m;break;case "replaceNode":r.a.Ja(a,h);j=m;break;case "ignoreTargetNode":break;default:c(Error("Unknown renderMode: "+
-b))}j&&(r.ua(h,g),i.afterRender&&i.afterRender(h,g.$data));return h}var d;r.pa=function(a){a!=l&&!(a instanceof r.t)&&c("templateEngine must inherit from ko.templateEngine");d=a};r.ua=function(b,d){var h=r.a.J([],b),g=0<b.length?b[0].parentNode:o;a(h,g,function(a){r.wa(d,a)});a(h,g,function(a){r.r.Sa(a,[d])})};r.na=function(a,f,h,g,i){h=h||{};(h.templateEngine||d)==l&&c("Set a template engine before calling renderTemplate");i=i||"replaceChildren";if(g){var j=g.nodeType?g:0<g.length?g[0]:o;return new r.i(function(){var d=
-f&&f instanceof r.K?f:new r.K(r.a.d(f)),n="function"==typeof a?a(d.$data):a,d=b(g,i,n,d,h);"replaceNode"==i&&(g=d,j=g.nodeType?g:0<g.length?g[0]:o)},o,{disposeWhen:function(){return!j||!r.a.ga(j)},disposeWhenNodeIsRemoved:j&&"replaceNode"==i?j.parentNode:j})}return r.r.ka(function(b){r.na(a,f,h,b,"replaceNode")})};r.Ab=function(a,d,h,g,i){function j(a,b){var d=k(a);r.ua(b,d);h.afterRender&&h.afterRender(b,d.$data)}function k(a){return i.createChildContext(r.a.d(a))}return new r.i(function(){var i=
-r.a.d(d)||[];"undefined"==typeof i.length&&(i=[i]);i=r.a.aa(i,function(a){return h.includeDestroyed||a===l||a===o||!r.a.d(a._destroy)});r.a.Ka(g,i,function(d){var f="function"==typeof a?a(d):a;return b(o,"ignoreTargetNode",f,k(d),h)},h,j)},o,{disposeWhenNodeIsRemoved:g})};r.c.template={init:function(a,b){var d=r.a.d(b());"string"!=typeof d&&!d.name&&1==a.nodeType&&((new r.m.I(a)).text(a.innerHTML),r.a.U(a));return{controlsDescendantBindings:m}},update:function(a,b,d,g,i){b=r.a.d(b());g=m;"string"==
-typeof b?d=b:(d=b.name,"if"in b&&(g=g&&r.a.d(b["if"])),"ifnot"in b&&(g=g&&!r.a.d(b.ifnot)));var j=o;"object"===typeof b&&"foreach"in b?j=r.Ab(d||a,g&&b.foreach||[],b,a,i):g?(i="object"==typeof b&&"data"in b?i.createChildContext(r.a.d(b.data)):i,j=r.na(d||a,i,b,a)):r.f.ha(a);i=j;(b=r.a.e.get(a,"__ko__templateSubscriptionDomDataKey__"))&&"function"==typeof b.v&&b.v();r.a.e.set(a,"__ko__templateSubscriptionDomDataKey__",i)}};r.j.D.template=function(a){a=r.j.Y(a);return 1==a.length&&a[0].unknown?o:r.j.rb(a,
-"name")?o:"This template engine does not support anonymous templates nested within its templates"};r.f.C.template=m})();r.b("ko.setTemplateEngine",r.pa);r.b("ko.renderTemplate",r.na);
-r.a.N=function(a,b,d){if(d===l)return r.a.N(a,b,1)||r.a.N(a,b,10)||r.a.N(a,b,Number.MAX_VALUE);for(var a=a||[],b=b||[],e=a,f=b,h=[],g=0;g<=f.length;g++)h[g]=[];for(var g=0,i=Math.min(e.length,d);g<=i;g++)h[0][g]=g;g=1;for(i=Math.min(f.length,d);g<=i;g++)h[g][0]=g;for(var i=e.length,j,k=f.length,g=1;g<=i;g++){j=Math.max(1,g-d);for(var n=Math.min(k,g+d);j<=n;j++)h[j][g]=e[g-1]===f[j-1]?h[j-1][g-1]:Math.min(h[j-1][g]===l?Number.MAX_VALUE:h[j-1][g]+1,h[j][g-1]===l?Number.MAX_VALUE:h[j][g-1]+1)}d=a.length;
-e=b.length;f=[];g=h[e][d];if(g===l)h=o;else{for(;0<d||0<e;){i=h[e][d];k=0<e?h[e-1][d]:g+1;n=0<d?h[e][d-1]:g+1;j=0<e&&0<d?h[e-1][d-1]:g+1;if(k===l||k<i-1)k=g+1;if(n===l||n<i-1)n=g+1;j<i-1&&(j=g+1);k<=n&&k<j?(f.push({status:"added",value:b[e-1]}),e--):(n<k&&n<j?f.push({status:"deleted",value:a[d-1]}):(f.push({status:"retained",value:a[d-1]}),e--),d--)}h=f.reverse()}return h};r.b("ko.utils.compareArrays",r.a.N);
-(function(){function a(a){if(2<a.length){for(var b=a[0],f=a[a.length-1],h=[b];b!==f;){b=b.nextSibling;if(!b)return;h.push(b)}Array.prototype.splice.apply(a,[0,a.length].concat(h))}}function b(b,e,f,h){var g=[],b=r.i(function(){var b=e(f)||[];0<g.length&&(a(g),r.a.Ja(g,b),h&&h(f,b));g.splice(0,g.length);r.a.J(g,b)},o,{disposeWhenNodeIsRemoved:b,disposeWhen:function(){return 0==g.length||!r.a.ga(g[0])}});return{sb:g,i:b}}r.a.Ka=function(d,e,f,h,g){for(var e=e||[],h=h||{},i=r.a.e.get(d,"setDomNodeChildrenFromArrayMapping_lastMappingResult")===
-l,j=r.a.e.get(d,"setDomNodeChildrenFromArrayMapping_lastMappingResult")||[],k=r.a.ba(j,function(a){return a.Va}),n=r.a.N(k,e),e=[],t=0,q=[],k=[],v=o,s=0,w=n.length;s<w;s++)switch(n[s].status){case "retained":var x=j[t];e.push(x);0<x.O.length&&(v=x.O[x.O.length-1]);t++;break;case "deleted":j[t].i.v();a(j[t].O);r.a.n(j[t].O,function(a){q.push({element:a,index:s,value:n[s].value});v=a});t++;break;case "added":var x=n[s].value,z=b(d,f,x,g),u=z.sb;e.push({Va:n[s].value,O:u,i:z.i});for(var z=0,y=u.length;z<
-y;z++){var A=u[z];k.push({element:A,index:s,value:n[s].value});v==o?r.f.xb(d,A):r.f.mb(d,A,v);v=A}g&&g(x,u)}r.a.n(q,function(a){r.F(a.element)});f=p;if(!i){if(h.afterAdd)for(s=0;s<k.length;s++)h.afterAdd(k[s].element,k[s].index,k[s].value);if(h.beforeRemove){for(s=0;s<q.length;s++)h.beforeRemove(q[s].element,q[s].index,q[s].value);f=m}}f||r.a.n(q,function(a){r.removeNode(a.element)});r.a.e.set(d,"setDomNodeChildrenFromArrayMapping_lastMappingResult",e)}})();
-r.b("ko.utils.setDomNodeChildrenFromArrayMapping",r.a.Ka);r.p=function(){this.allowTemplateRewriting=p};r.p.prototype=new r.t;r.p.prototype.renderTemplateSource=function(a){a=a.text();return r.a.ma(a)};r.p.M=new r.p;r.pa(r.p.M);r.b("ko.nativeTemplateEngine",r.p);
-(function(){r.ja=function(){var a=this.qb=function(){if("undefined"==typeof jQuery||!jQuery.tmpl)return 0;try{if(0<=jQuery.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(d,e,f){f=f||{};2>a&&c(Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later."));var h=d.data("precompiled");h||(h=d.text()||"",h=jQuery.template(o,"{{ko_with $item.koBindingContext}}"+h+"{{/ko_with}}"),d.data("precompiled",h));
-d=[e.$data];e=jQuery.extend({koBindingContext:e},f.templateOptions);e=jQuery.tmpl(h,d,e);e.appendTo(document.createElement("div"));jQuery.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+a+" })()) }}"};this.addTemplate=function(a,b){document.write("<script type='text/html' id='"+a+"'>"+b+"<\/script>")};if(0<a)jQuery.tmpl.tag.ko_code={open:"__.push($1 || '');"},jQuery.tmpl.tag.ko_with={open:"with($1) {",close:"} "}};r.ja.prototype=new r.t;
-var a=new r.ja;0<a.qb&&r.pa(a);r.b("ko.jqueryTmplTemplateEngine",r.ja)})();
-})(window);                  
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/main.py b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/main.py
deleted file mode 100644
index c438105..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/main.py
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-r"""
-=================================
- Benchmark jsmin implementations
-=================================
-
-Benchmark jsmin implementations.
-
-:Copyright:
-
- Copyright 2011 - 2015
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-Usage::
-
-    python -mbench.main [-c COUNT] [-p file] jsfile ...
-
-    -c COUNT  number of runs per jsfile and minifier. Defaults to 10.
-    -p file   File to write the benchmark results in (pickled)
-
-"""
-if __doc__:
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape')
-__docformat__ = "restructuredtext en"
-__license__ = "Apache License, Version 2.0"
-__version__ = "1.0.0"
-
-import sys as _sys
-import time as _time
-
-import_notes = []
-class jsmins(object):
-    from bench import jsmin as p_01_simple_port
-    if _sys.version_info >= (2, 4):
-        from bench import jsmin_2_0_9 as p_02_jsmin_2_0_9
-    else:
-        import_notes.append(
-            "jsmin_2_0_9 available for python 2.4 and later..."
-        )
-        print(import_notes[-1])
-
-    import rjsmin as p_05_rjsmin
-    try:
-        import _rjsmin as p_06__rjsmin
-    except ImportError:
-        import_notes.append("_rjsmin (C-Port) not available")
-        print(import_notes[-1])
-jsmins.p_05_rjsmin.jsmin = jsmins.p_05_rjsmin._make_jsmin(
-    python_only=True
-)
-print("Python Release: %s" % ".".join(map(str, _sys.version_info[:3])))
-print("")
-
-
-def slurp(filename):
-    """ Load a file """
-    fp = open(filename)
-    try:
-        return fp.read()
-    finally:
-        fp.close()
-
-
-def print_(*value, **kwargs):
-    """ Print stuff """
-    (kwargs.get('file') or _sys.stdout).write(
-        ''.join(value) + kwargs.get('end', '\n')
-    )
-
-
-def bench(filenames, count):
-    """
-    Benchmark the minifiers with given javascript samples
-
-    :Parameters:
-      `filenames` : sequence
-        List of filenames
-
-      `count` : ``int``
-        Number of runs per js file and minifier
-
-    :Exceptions:
-      - `RuntimeError` : empty filenames sequence
-    """
-    if not filenames:
-        raise RuntimeError("Missing files to benchmark")
-    try:
-        xrange
-    except NameError:
-        xrange = range
-    try:
-        cmp
-    except NameError:
-        cmp = lambda a, b: (a > b) - (a < b)
-
-    ports = [item for item in dir(jsmins) if item.startswith('p_')]
-    ports.sort()
-    space = max(map(len, ports)) - 4
-    ports = [(item[5:], getattr(jsmins, item).jsmin) for item in ports]
-    flush = _sys.stdout.flush
-
-    struct = []
-    inputs = [(filename, slurp(filename)) for filename in filenames]
-    for filename, script in inputs:
-        print_("Benchmarking %r..." % filename, end=" ")
-        flush()
-        outputs = []
-        for _, jsmin in ports:
-            try:
-                outputs.append(jsmin(script))
-            except (SystemExit, KeyboardInterrupt):
-                raise
-            except:
-                outputs.append(None)
-        struct.append(dict(
-            filename=filename,
-            sizes=[
-                (item is not None and len(item) or None) for item in outputs
-            ],
-            size=len(script),
-            messages=[],
-            times=[],
-        ))
-        print_("(%.1f KiB)" % (struct[-1]['size'] / 1024.0,))
-        flush()
-        times = []
-        for idx, (name, jsmin) in enumerate(ports):
-            if outputs[idx] is None:
-                print_("  FAILED %s" % (name,))
-                struct[-1]['times'].append((name, None))
-            else:
-                print_("  Timing %s%s... (%5.1f KiB %s)" % (
-                    name,
-                    " " * (space - len(name)),
-                    len(outputs[idx]) / 1024.0,
-                    idx == 0 and '*' or ['=', '>', '<'][
-                        cmp(len(outputs[idx]), len(outputs[0]))
-                    ],
-                ), end=" ")
-                flush()
-
-                xcount = count
-                while True:
-                    counted = [None for _ in xrange(xcount)]
-                    start = _time.time()
-                    for _ in counted:
-                        jsmin(script)
-                    end = _time.time()
-                    result = (end - start) * 1000
-                    if result < 10: # avoid measuring within the error range
-                        xcount *= 10
-                        continue
-                    times.append(result / xcount)
-                    break
-
-                print_("%8.2f ms" % times[-1], end=" ")
-                flush()
-                if len(times) <= 1:
-                    print_()
-                else:
-                    print_("(factor: %s)" % (', '.join([
-                        '%.2f' % (timed / times[-1]) for timed in times[:-1]
-                    ])))
-                struct[-1]['times'].append((name, times[-1]))
-
-            flush()
-        print_()
-
-    return struct
-
-
-def main(argv=None):
-    """ Main """
-    import getopt as _getopt
-    import os as _os
-    import pickle as _pickle
-
-    if argv is None:
-        argv = _sys.argv[1:]
-    try:
-        opts, args = _getopt.getopt(argv, "hc:p:", ["help"])
-    except getopt.GetoptError:
-        e = _sys.exc_info()[0](_sys.exc_info()[1])
-        print >> _sys.stderr, "%s\nTry %s -mbench.main --help" % (
-            e,
-            _os.path.basename(_sys.executable),
-        )
-        _sys.exit(2)
-
-    count, pickle = 10, None
-    for key, value in opts:
-        if key in ("-h", "--help"):
-            print >> _sys.stderr, (
-                "%s -mbench.main [-c count] [-p file] cssfile ..." % (
-                    _os.path.basename(_sys.executable),
-                )
-            )
-            _sys.exit(0)
-        elif key == '-c':
-            count = int(value)
-        elif key == '-p':
-            pickle = str(value)
-
-    struct = bench(args, count)
-    if pickle:
-        fp = open(pickle, 'wb')
-        try:
-            fp.write(_pickle.dumps((
-                ".".join(map(str, _sys.version_info[:3])),
-                import_notes,
-                struct,
-            ), 0))
-        finally:
-            fp.close()
-
-
-if __name__ == '__main__':
-    main()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/markermanager.js b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/markermanager.js
deleted file mode 100644
index 1006650..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/markermanager.js
+++ /dev/null
@@ -1,976 +0,0 @@
-/**
- * @name MarkerManager v3
- * @version 1.0
- * @copyright (c) 2007 Google Inc.
- * @author Doug Ricket, Bjorn Brala (port to v3), others,
- *
- * @fileoverview Marker manager is an interface between the map and the user,
- * designed to manage adding and removing many points when the viewport changes.
- * <br /><br />
- * <b>How it Works</b>:<br/>
- * The MarkerManager places its markers onto a grid, similar to the map tiles.
- * When the user moves the viewport, it computes which grid cells have
- * entered or left the viewport, and shows or hides all the markers in those
- * cells.
- * (If the users scrolls the viewport beyond the markers that are loaded,
- * no markers will be visible until the <code>EVENT_moveend</code>
- * triggers an update.)
- * In practical consequences, this allows 10,000 markers to be distributed over
- * a large area, and as long as only 100-200 are visible in any given viewport,
- * the user will see good performance corresponding to the 100 visible markers,
- * rather than poor performance corresponding to the total 10,000 markers.
- * Note that some code is optimized for speed over space,
- * with the goal of accommodating thousands of markers.
- */
-
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @name MarkerManagerOptions
- * @class This class represents optional arguments to the {@link MarkerManager}
- *     constructor.
- * @property {Number} maxZoom Sets the maximum zoom level monitored by a
- *     marker manager. If not given, the manager assumes the maximum map zoom
- *     level. This value is also used when markers are added to the manager
- *     without the optional {@link maxZoom} parameter.
- * @property {Number} borderPadding Specifies, in pixels, the extra padding
- *     outside the map's current viewport monitored by a manager. Markers that
- *     fall within this padding are added to the map, even if they are not fully
- *     visible.
- * @property {Boolean} trackMarkers=false Indicates whether or not a marker
- *     manager should track markers' movements. If you wish to move managed
- *     markers using the {@link setPoint}/{@link setLatLng} methods,
- *     this option should be set to {@link true}.
- */
-
-/**
- * Creates a new MarkerManager that will show/hide markers on a map.
- *
- * Events:
- * @event changed (Parameters: shown bounds, shown markers) Notify listeners when the state of what is displayed changes.
- * @event loaded MarkerManager has succesfully been initialized.
- *
- * @constructor
- * @param {Map} map The map to manage.
- * @param {Object} opt_opts A container for optional arguments:
- *   {Number} maxZoom The maximum zoom level for which to create tiles.
- *   {Number} borderPadding The width in pixels beyond the map border,
- *                   where markers should be display.
- *   {Boolean} trackMarkers Whether or not this manager should track marker
- *                   movements.
- */
-function MarkerManager(map, opt_opts) {
-  var me = this;
-  me.map_ = map;
-  me.mapZoom_ = map.getZoom();
-
-  me.projectionHelper_ = new ProjectionHelperOverlay(map);
-  google.maps.event.addListener(me.projectionHelper_, 'ready', function () {
-    me.projection_ = this.getProjection();
-    me.initialize(map, opt_opts);
-  });
-}
-
-
-MarkerManager.prototype.initialize = function (map, opt_opts) {
-  var me = this;
-
-  opt_opts = opt_opts || {};
-  me.tileSize_ = MarkerManager.DEFAULT_TILE_SIZE_;
-
-  var mapTypes = map.mapTypes;
-
-  // Find max zoom level
-  var mapMaxZoom = 1;
-  for (var sType in mapTypes ) {
-    if (typeof map.mapTypes.get(sType) === 'object' && typeof map.mapTypes.get(sType).maxZoom === 'number') {
-      var mapTypeMaxZoom = map.mapTypes.get(sType).maxZoom;
-      if (mapTypeMaxZoom > mapMaxZoom) {
-        mapMaxZoom = mapTypeMaxZoom;
-      }
-    }
-  }
-
-  me.maxZoom_  = opt_opts.maxZoom || 19;
-
-  me.trackMarkers_ = opt_opts.trackMarkers;
-  me.show_ = opt_opts.show || true;
-
-  var padding;
-  if (typeof opt_opts.borderPadding === 'number') {
-    padding = opt_opts.borderPadding;
-  } else {
-    padding = MarkerManager.DEFAULT_BORDER_PADDING_;
-  }
-  // The padding in pixels beyond the viewport, where we will pre-load markers.
-  me.swPadding_ = new google.maps.Size(-padding, padding);
-  me.nePadding_ = new google.maps.Size(padding, -padding);
-  me.borderPadding_ = padding;
-
-  me.gridWidth_ = {};
-
-  me.grid_ = {};
-  me.grid_[me.maxZoom_] = {};
-  me.numMarkers_ = {};
-  me.numMarkers_[me.maxZoom_] = 0;
-
-
-  google.maps.event.addListener(map, 'dragend', function () {
-    me.onMapMoveEnd_();
-  });
-  google.maps.event.addListener(map, 'zoom_changed', function () {
-    me.onMapMoveEnd_();
-  });
-
-
-
-  /**
-   * This closure provide easy access to the map.
-   * They are used as callbacks, not as methods.
-   * @param GMarker marker Marker to be removed from the map
-   * @private
-   */
-  me.removeOverlay_ = function (marker) {
-    marker.setMap(null);
-    me.shownMarkers_--;
-  };
-
-  /**
-   * This closure provide easy access to the map.
-   * They are used as callbacks, not as methods.
-   * @param GMarker marker Marker to be added to the map
-   * @private
-   */
-  me.addOverlay_ = function (marker) {
-    if (me.show_) {
-      marker.setMap(me.map_);
-      me.shownMarkers_++;
-    }
-  };
-
-  me.resetManager_();
-  me.shownMarkers_ = 0;
-
-  me.shownBounds_ = me.getMapGridBounds_();
-
-  google.maps.event.trigger(me, 'loaded');
-
-};
-
-/**
- *  Default tile size used for deviding the map into a grid.
- */
-MarkerManager.DEFAULT_TILE_SIZE_ = 1024;
-
-/*
- *  How much extra space to show around the map border so
- *  dragging doesn't result in an empty place.
- */
-MarkerManager.DEFAULT_BORDER_PADDING_ = 100;
-
-/**
- *  Default tilesize of single tile world.
- */
-MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE = 256;
-
-
-/**
- * Initializes MarkerManager arrays for all zoom levels
- * Called by constructor and by clearAllMarkers
- */
-MarkerManager.prototype.resetManager_ = function () {
-  var mapWidth = MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE;
-  for (var zoom = 0; zoom <= this.maxZoom_; ++zoom) {
-    this.grid_[zoom] = {};
-    this.numMarkers_[zoom] = 0;
-    this.gridWidth_[zoom] = Math.ceil(mapWidth / this.tileSize_);
-    mapWidth <<= 1;
-  }
-
-};
-
-/**
- * Removes all markers in the manager, and
- * removes any visible markers from the map.
- */
-MarkerManager.prototype.clearMarkers = function () {
-  this.processAll_(this.shownBounds_, this.removeOverlay_);
-  this.resetManager_();
-};
-
-
-/**
- * Gets the tile coordinate for a given latlng point.
- *
- * @param {LatLng} latlng The geographical point.
- * @param {Number} zoom The zoom level.
- * @param {google.maps.Size} padding The padding used to shift the pixel coordinate.
- *               Used for expanding a bounds to include an extra padding
- *               of pixels surrounding the bounds.
- * @return {GPoint} The point in tile coordinates.
- *
- */
-MarkerManager.prototype.getTilePoint_ = function (latlng, zoom, padding) {
-
-  var pixelPoint = this.projectionHelper_.LatLngToPixel(latlng, zoom);
-
-  var point = new google.maps.Point(
-    Math.floor((pixelPoint.x + padding.width) / this.tileSize_),
-    Math.floor((pixelPoint.y + padding.height) / this.tileSize_)
-  );
-
-  return point;
-};
-
-
-/**
- * Finds the appropriate place to add the marker to the grid.
- * Optimized for speed; does not actually add the marker to the map.
- * Designed for batch-processing thousands of markers.
- *
- * @param {Marker} marker The marker to add.
- * @param {Number} minZoom The minimum zoom for displaying the marker.
- * @param {Number} maxZoom The maximum zoom for displaying the marker.
- */
-MarkerManager.prototype.addMarkerBatch_ = function (marker, minZoom, maxZoom) {
-  var me = this;
-
-  var mPoint = marker.getPosition();
-  marker.MarkerManager_minZoom = minZoom;
-
-
-  // Tracking markers is expensive, so we do this only if the
-  // user explicitly requested it when creating marker manager.
-  if (this.trackMarkers_) {
-    google.maps.event.addListener(marker, 'changed', function (a, b, c) {
-      me.onMarkerMoved_(a, b, c);
-    });
-  }
-
-  var gridPoint = this.getTilePoint_(mPoint, maxZoom, new google.maps.Size(0, 0, 0, 0));
-
-  for (var zoom = maxZoom; zoom >= minZoom; zoom--) {
-    var cell = this.getGridCellCreate_(gridPoint.x, gridPoint.y, zoom);
-    cell.push(marker);
-
-    gridPoint.x = gridPoint.x >> 1;
-    gridPoint.y = gridPoint.y >> 1;
-  }
-};
-
-
-/**
- * Returns whether or not the given point is visible in the shown bounds. This
- * is a helper method that takes care of the corner case, when shownBounds have
- * negative minX value.
- *
- * @param {Point} point a point on a grid.
- * @return {Boolean} Whether or not the given point is visible in the currently
- * shown bounds.
- */
-MarkerManager.prototype.isGridPointVisible_ = function (point) {
-  var vertical = this.shownBounds_.minY <= point.y &&
-      point.y <= this.shownBounds_.maxY;
-  var minX = this.shownBounds_.minX;
-  var horizontal = minX <= point.x && point.x <= this.shownBounds_.maxX;
-  if (!horizontal && minX < 0) {
-    // Shifts the negative part of the rectangle. As point.x is always less
-    // than grid width, only test shifted minX .. 0 part of the shown bounds.
-    var width = this.gridWidth_[this.shownBounds_.z];
-    horizontal = minX + width <= point.x && point.x <= width - 1;
-  }
-  return vertical && horizontal;
-};
-
-
-/**
- * Reacts to a notification from a marker that it has moved to a new location.
- * It scans the grid all all zoom levels and moves the marker from the old grid
- * location to a new grid location.
- *
- * @param {Marker} marker The marker that moved.
- * @param {LatLng} oldPoint The old position of the marker.
- * @param {LatLng} newPoint The new position of the marker.
- */
-MarkerManager.prototype.onMarkerMoved_ = function (marker, oldPoint, newPoint) {
-  // NOTE: We do not know the minimum or maximum zoom the marker was
-  // added at, so we start at the absolute maximum. Whenever we successfully
-  // remove a marker at a given zoom, we add it at the new grid coordinates.
-  var zoom = this.maxZoom_;
-  var changed = false;
-  var oldGrid = this.getTilePoint_(oldPoint, zoom, new google.maps.Size(0, 0, 0, 0));
-  var newGrid = this.getTilePoint_(newPoint, zoom, new google.maps.Size(0, 0, 0, 0));
-  while (zoom >= 0 && (oldGrid.x !== newGrid.x || oldGrid.y !== newGrid.y)) {
-    var cell = this.getGridCellNoCreate_(oldGrid.x, oldGrid.y, zoom);
-    if (cell) {
-      if (this.removeFromArray_(cell, marker)) {
-        this.getGridCellCreate_(newGrid.x, newGrid.y, zoom).push(marker);
-      }
-    }
-    // For the current zoom we also need to update the map. Markers that no
-    // longer are visible are removed from the map. Markers that moved into
-    // the shown bounds are added to the map. This also lets us keep the count
-    // of visible markers up to date.
-    if (zoom === this.mapZoom_) {
-      if (this.isGridPointVisible_(oldGrid)) {
-        if (!this.isGridPointVisible_(newGrid)) {
-          this.removeOverlay_(marker);
-          changed = true;
-        }
-      } else {
-        if (this.isGridPointVisible_(newGrid)) {
-          this.addOverlay_(marker);
-          changed = true;
-        }
-      }
-    }
-    oldGrid.x = oldGrid.x >> 1;
-    oldGrid.y = oldGrid.y >> 1;
-    newGrid.x = newGrid.x >> 1;
-    newGrid.y = newGrid.y >> 1;
-    --zoom;
-  }
-  if (changed) {
-    this.notifyListeners_();
-  }
-};
-
-
-/**
- * Removes marker from the manager and from the map
- * (if it's currently visible).
- * @param {GMarker} marker The marker to delete.
- */
-MarkerManager.prototype.removeMarker = function (marker) {
-  var zoom = this.maxZoom_;
-  var changed = false;
-  var point = marker.getPosition();
-  var grid = this.getTilePoint_(point, zoom, new google.maps.Size(0, 0, 0, 0));
-  while (zoom >= 0) {
-    var cell = this.getGridCellNoCreate_(grid.x, grid.y, zoom);
-
-    if (cell) {
-      this.removeFromArray_(cell, marker);
-    }
-    // For the current zoom we also need to update the map. Markers that no
-    // longer are visible are removed from the map. This also lets us keep the count
-    // of visible markers up to date.
-    if (zoom === this.mapZoom_) {
-      if (this.isGridPointVisible_(grid)) {
-        this.removeOverlay_(marker);
-        changed = true;
-      }
-    }
-    grid.x = grid.x >> 1;
-    grid.y = grid.y >> 1;
-    --zoom;
-  }
-  if (changed) {
-    this.notifyListeners_();
-  }
-  this.numMarkers_[marker.MarkerManager_minZoom]--;
-};
-
-
-/**
- * Add many markers at once.
- * Does not actually update the map, just the internal grid.
- *
- * @param {Array of Marker} markers The markers to add.
- * @param {Number} minZoom The minimum zoom level to display the markers.
- * @param {Number} opt_maxZoom The maximum zoom level to display the markers.
- */
-MarkerManager.prototype.addMarkers = function (markers, minZoom, opt_maxZoom) {
-  var maxZoom = this.getOptMaxZoom_(opt_maxZoom);
-  for (var i = markers.length - 1; i >= 0; i--) {
-    this.addMarkerBatch_(markers[i], minZoom, maxZoom);
-  }
-
-  this.numMarkers_[minZoom] += markers.length;
-};
-
-
-/**
- * Returns the value of the optional maximum zoom. This method is defined so
- * that we have just one place where optional maximum zoom is calculated.
- *
- * @param {Number} opt_maxZoom The optinal maximum zoom.
- * @return The maximum zoom.
- */
-MarkerManager.prototype.getOptMaxZoom_ = function (opt_maxZoom) {
-  return opt_maxZoom || this.maxZoom_;
-};
-
-
-/**
- * Calculates the total number of markers potentially visible at a given
- * zoom level.
- *
- * @param {Number} zoom The zoom level to check.
- */
-MarkerManager.prototype.getMarkerCount = function (zoom) {
-  var total = 0;
-  for (var z = 0; z <= zoom; z++) {
-    total += this.numMarkers_[z];
-  }
-  return total;
-};
-
-/**
- * Returns a marker given latitude, longitude and zoom. If the marker does not
- * exist, the method will return a new marker. If a new marker is created,
- * it will NOT be added to the manager.
- *
- * @param {Number} lat - the latitude of a marker.
- * @param {Number} lng - the longitude of a marker.
- * @param {Number} zoom - the zoom level
- * @return {GMarker} marker - the marker found at lat and lng
- */
-MarkerManager.prototype.getMarker = function (lat, lng, zoom) {
-  var mPoint = new google.maps.LatLng(lat, lng);
-  var gridPoint = this.getTilePoint_(mPoint, zoom, new google.maps.Size(0, 0, 0, 0));
-
-  var marker = new google.maps.Marker({position: mPoint});
-
-  var cellArray = this.getGridCellNoCreate_(gridPoint.x, gridPoint.y, zoom);
-  if (cellArray !== undefined) {
-    for (var i = 0; i < cellArray.length; i++)
-    {
-      if (lat === cellArray[i].getLatLng().lat() && lng === cellArray[i].getLatLng().lng()) {
-        marker = cellArray[i];
-      }
-    }
-  }
-  return marker;
-};
-
-/**
- * Add a single marker to the map.
- *
- * @param {Marker} marker The marker to add.
- * @param {Number} minZoom The minimum zoom level to display the marker.
- * @param {Number} opt_maxZoom The maximum zoom level to display the marker.
- */
-MarkerManager.prototype.addMarker = function (marker, minZoom, opt_maxZoom) {
-  var maxZoom = this.getOptMaxZoom_(opt_maxZoom);
-  this.addMarkerBatch_(marker, minZoom, maxZoom);
-  var gridPoint = this.getTilePoint_(marker.getPosition(), this.mapZoom_, new google.maps.Size(0, 0, 0, 0));
-  if (this.isGridPointVisible_(gridPoint) &&
-      minZoom <= this.shownBounds_.z &&
-      this.shownBounds_.z <= maxZoom) {
-    this.addOverlay_(marker);
-    this.notifyListeners_();
-  }
-  this.numMarkers_[minZoom]++;
-};
-
-
-/**
- * Helper class to create a bounds of INT ranges.
- * @param bounds Array.<Object.<string, number>> Bounds object.
- * @constructor
- */
-function GridBounds(bounds) {
-  // [sw, ne]
-
-  this.minX = Math.min(bounds[0].x, bounds[1].x);
-  this.maxX = Math.max(bounds[0].x, bounds[1].x);
-  this.minY = Math.min(bounds[0].y, bounds[1].y);
-  this.maxY = Math.max(bounds[0].y, bounds[1].y);
-
-}
-
-/**
- * Returns true if this bounds equal the given bounds.
- * @param {GridBounds} gridBounds GridBounds The bounds to test.
- * @return {Boolean} This Bounds equals the given GridBounds.
- */
-GridBounds.prototype.equals = function (gridBounds) {
-  if (this.maxX === gridBounds.maxX && this.maxY === gridBounds.maxY && this.minX === gridBounds.minX && this.minY === gridBounds.minY) {
-    return true;
-  } else {
-    return false;
-  }
-};
-
-/**
- * Returns true if this bounds (inclusively) contains the given point.
- * @param {Point} point  The point to test.
- * @return {Boolean} This Bounds contains the given Point.
- */
-GridBounds.prototype.containsPoint = function (point) {
-  var outer = this;
-  return (outer.minX <= point.x && outer.maxX >= point.x && outer.minY <= point.y && outer.maxY >= point.y);
-};
-
-/**
- * Get a cell in the grid, creating it first if necessary.
- *
- * Optimization candidate
- *
- * @param {Number} x The x coordinate of the cell.
- * @param {Number} y The y coordinate of the cell.
- * @param {Number} z The z coordinate of the cell.
- * @return {Array} The cell in the array.
- */
-MarkerManager.prototype.getGridCellCreate_ = function (x, y, z) {
-  var grid = this.grid_[z];
-  if (x < 0) {
-    x += this.gridWidth_[z];
-  }
-  var gridCol = grid[x];
-  if (!gridCol) {
-    gridCol = grid[x] = [];
-    return (gridCol[y] = []);
-  }
-  var gridCell = gridCol[y];
-  if (!gridCell) {
-    return (gridCol[y] = []);
-  }
-  return gridCell;
-};
-
-
-/**
- * Get a cell in the grid, returning undefined if it does not exist.
- *
- * NOTE: Optimized for speed -- otherwise could combine with getGridCellCreate_.
- *
- * @param {Number} x The x coordinate of the cell.
- * @param {Number} y The y coordinate of the cell.
- * @param {Number} z The z coordinate of the cell.
- * @return {Array} The cell in the array.
- */
-MarkerManager.prototype.getGridCellNoCreate_ = function (x, y, z) {
-  var grid = this.grid_[z];
-
-  if (x < 0) {
-    x += this.gridWidth_[z];
-  }
-  var gridCol = grid[x];
-  return gridCol ? gridCol[y] : undefined;
-};
-
-
-/**
- * Turns at geographical bounds into a grid-space bounds.
- *
- * @param {LatLngBounds} bounds The geographical bounds.
- * @param {Number} zoom The zoom level of the bounds.
- * @param {google.maps.Size} swPadding The padding in pixels to extend beyond the
- * given bounds.
- * @param {google.maps.Size} nePadding The padding in pixels to extend beyond the
- * given bounds.
- * @return {GridBounds} The bounds in grid space.
- */
-MarkerManager.prototype.getGridBounds_ = function (bounds, zoom, swPadding, nePadding) {
-  zoom = Math.min(zoom, this.maxZoom_);
-
-  var bl = bounds.getSouthWest();
-  var tr = bounds.getNorthEast();
-  var sw = this.getTilePoint_(bl, zoom, swPadding);
-
-  var ne = this.getTilePoint_(tr, zoom, nePadding);
-  var gw = this.gridWidth_[zoom];
-
-  // Crossing the prime meridian requires correction of bounds.
-  if (tr.lng() < bl.lng() || ne.x < sw.x) {
-    sw.x -= gw;
-  }
-  if (ne.x - sw.x  + 1 >= gw) {
-    // Computed grid bounds are larger than the world; truncate.
-    sw.x = 0;
-    ne.x = gw - 1;
-  }
-
-  var gridBounds = new GridBounds([sw, ne]);
-  gridBounds.z = zoom;
-
-  return gridBounds;
-};
-
-
-/**
- * Gets the grid-space bounds for the current map viewport.
- *
- * @return {Bounds} The bounds in grid space.
- */
-MarkerManager.prototype.getMapGridBounds_ = function () {
-  return this.getGridBounds_(this.map_.getBounds(), this.mapZoom_, this.swPadding_, this.nePadding_);
-};
-
-
-/**
- * Event listener for map:movend.
- * NOTE: Use a timeout so that the user is not blocked
- * from moving the map.
- *
- * Removed this because a a lack of a scopy override/callback function on events.
- */
-MarkerManager.prototype.onMapMoveEnd_ = function () {
-  this.objectSetTimeout_(this, this.updateMarkers_, 0);
-};
-
-
-/**
- * Call a function or evaluate an expression after a specified number of
- * milliseconds.
- *
- * Equivalent to the standard window.setTimeout function, but the given
- * function executes as a method of this instance. So the function passed to
- * objectSetTimeout can contain references to this.
- *    objectSetTimeout(this, function () { alert(this.x) }, 1000);
- *
- * @param {Object} object  The target object.
- * @param {Function} command  The command to run.
- * @param {Number} milliseconds  The delay.
- * @return {Boolean}  Success.
- */
-MarkerManager.prototype.objectSetTimeout_ = function (object, command, milliseconds) {
-  return window.setTimeout(function () {
-    command.call(object);
-  }, milliseconds);
-};
-
-
-/**
- * Is this layer visible?
- *
- * Returns visibility setting
- *
- * @return {Boolean} Visible
- */
-MarkerManager.prototype.visible = function () {
-  return this.show_ ? true : false;
-};
-
-
-/**
- * Returns true if the manager is hidden.
- * Otherwise returns false.
- * @return {Boolean} Hidden
- */
-MarkerManager.prototype.isHidden = function () {
-  return !this.show_;
-};
-
-
-/**
- * Shows the manager if it's currently hidden.
- */
-MarkerManager.prototype.show = function () {
-  this.show_ = true;
-  this.refresh();
-};
-
-
-/**
- * Hides the manager if it's currently visible
- */
-MarkerManager.prototype.hide = function () {
-  this.show_ = false;
-  this.refresh();
-};
-
-
-/**
- * Toggles the visibility of the manager.
- */
-MarkerManager.prototype.toggle = function () {
-  this.show_ = !this.show_;
-  this.refresh();
-};
-
-
-/**
- * Refresh forces the marker-manager into a good state.
- * <ol>
- *   <li>If never before initialized, shows all the markers.</li>
- *   <li>If previously initialized, removes and re-adds all markers.</li>
- * </ol>
- */
-MarkerManager.prototype.refresh = function () {
-  if (this.shownMarkers_ > 0) {
-    this.processAll_(this.shownBounds_, this.removeOverlay_);
-  }
-  // An extra check on this.show_ to increase performance (no need to processAll_)
-  if (this.show_) {
-    this.processAll_(this.shownBounds_, this.addOverlay_);
-  }
-  this.notifyListeners_();
-};
-
-
-/**
- * After the viewport may have changed, add or remove markers as needed.
- */
-MarkerManager.prototype.updateMarkers_ = function () {
-  this.mapZoom_ = this.map_.getZoom();
-  var newBounds = this.getMapGridBounds_();
-
-  // If the move does not include new grid sections,
-  // we have no work to do:
-  if (newBounds.equals(this.shownBounds_) && newBounds.z === this.shownBounds_.z) {
-    return;
-  }
-
-  if (newBounds.z !== this.shownBounds_.z) {
-    this.processAll_(this.shownBounds_, this.removeOverlay_);
-    if (this.show_) { // performance
-      this.processAll_(newBounds, this.addOverlay_);
-    }
-  } else {
-    // Remove markers:
-    this.rectangleDiff_(this.shownBounds_, newBounds, this.removeCellMarkers_);
-
-    // Add markers:
-    if (this.show_) { // performance
-      this.rectangleDiff_(newBounds, this.shownBounds_, this.addCellMarkers_);
-    }
-  }
-  this.shownBounds_ = newBounds;
-
-  this.notifyListeners_();
-};
-
-
-/**
- * Notify listeners when the state of what is displayed changes.
- */
-MarkerManager.prototype.notifyListeners_ = function () {
-  google.maps.event.trigger(this, 'changed', this.shownBounds_, this.shownMarkers_);
-};
-
-
-/**
- * Process all markers in the bounds provided, using a callback.
- *
- * @param {Bounds} bounds The bounds in grid space.
- * @param {Function} callback The function to call for each marker.
- */
-MarkerManager.prototype.processAll_ = function (bounds, callback) {
-  for (var x = bounds.minX; x <= bounds.maxX; x++) {
-    for (var y = bounds.minY; y <= bounds.maxY; y++) {
-      this.processCellMarkers_(x, y,  bounds.z, callback);
-    }
-  }
-};
-
-
-/**
- * Process all markers in the grid cell, using a callback.
- *
- * @param {Number} x The x coordinate of the cell.
- * @param {Number} y The y coordinate of the cell.
- * @param {Number} z The z coordinate of the cell.
- * @param {Function} callback The function to call for each marker.
- */
-MarkerManager.prototype.processCellMarkers_ = function (x, y, z, callback) {
-  var cell = this.getGridCellNoCreate_(x, y, z);
-  if (cell) {
-    for (var i = cell.length - 1; i >= 0; i--) {
-      callback(cell[i]);
-    }
-  }
-};
-
-
-/**
- * Remove all markers in a grid cell.
- *
- * @param {Number} x The x coordinate of the cell.
- * @param {Number} y The y coordinate of the cell.
- * @param {Number} z The z coordinate of the cell.
- */
-MarkerManager.prototype.removeCellMarkers_ = function (x, y, z) {
-  this.processCellMarkers_(x, y, z, this.removeOverlay_);
-};
-
-
-/**
- * Add all markers in a grid cell.
- *
- * @param {Number} x The x coordinate of the cell.
- * @param {Number} y The y coordinate of the cell.
- * @param {Number} z The z coordinate of the cell.
- */
-MarkerManager.prototype.addCellMarkers_ = function (x, y, z) {
-  this.processCellMarkers_(x, y, z, this.addOverlay_);
-};
-
-
-/**
- * Use the rectangleDiffCoords_ function to process all grid cells
- * that are in bounds1 but not bounds2, using a callback, and using
- * the current MarkerManager object as the instance.
- *
- * Pass the z parameter to the callback in addition to x and y.
- *
- * @param {Bounds} bounds1 The bounds of all points we may process.
- * @param {Bounds} bounds2 The bounds of points to exclude.
- * @param {Function} callback The callback function to call
- *                   for each grid coordinate (x, y, z).
- */
-MarkerManager.prototype.rectangleDiff_ = function (bounds1, bounds2, callback) {
-  var me = this;
-  me.rectangleDiffCoords_(bounds1, bounds2, function (x, y) {
-    callback.apply(me, [x, y, bounds1.z]);
-  });
-};
-
-
-/**
- * Calls the function for all points in bounds1, not in bounds2
- *
- * @param {Bounds} bounds1 The bounds of all points we may process.
- * @param {Bounds} bounds2 The bounds of points to exclude.
- * @param {Function} callback The callback function to call
- *                   for each grid coordinate.
- */
-MarkerManager.prototype.rectangleDiffCoords_ = function (bounds1, bounds2, callback) {
-  var minX1 = bounds1.minX;
-  var minY1 = bounds1.minY;
-  var maxX1 = bounds1.maxX;
-  var maxY1 = bounds1.maxY;
-  var minX2 = bounds2.minX;
-  var minY2 = bounds2.minY;
-  var maxX2 = bounds2.maxX;
-  var maxY2 = bounds2.maxY;
-
-  var x, y;
-  for (x = minX1; x <= maxX1; x++) {  // All x in R1
-    // All above:
-    for (y = minY1; y <= maxY1 && y < minY2; y++) {  // y in R1 above R2
-      callback(x, y);
-    }
-    // All below:
-    for (y = Math.max(maxY2 + 1, minY1);  // y in R1 below R2
-         y <= maxY1; y++) {
-      callback(x, y);
-    }
-  }
-
-  for (y = Math.max(minY1, minY2);
-       y <= Math.min(maxY1, maxY2); y++) {  // All y in R2 and in R1
-    // Strictly left:
-    for (x = Math.min(maxX1 + 1, minX2) - 1;
-         x >= minX1; x--) {  // x in R1 left of R2
-      callback(x, y);
-    }
-    // Strictly right:
-    for (x = Math.max(minX1, maxX2 + 1);  // x in R1 right of R2
-         x <= maxX1; x++) {
-      callback(x, y);
-    }
-  }
-};
-
-
-/**
- * Removes value from array. O(N).
- *
- * @param {Array} array  The array to modify.
- * @param {any} value  The value to remove.
- * @param {Boolean} opt_notype  Flag to disable type checking in equality.
- * @return {Number}  The number of instances of value that were removed.
- */
-MarkerManager.prototype.removeFromArray_ = function (array, value, opt_notype) {
-  var shift = 0;
-  for (var i = 0; i < array.length; ++i) {
-    if (array[i] === value || (opt_notype && array[i] === value)) {
-      array.splice(i--, 1);
-      shift++;
-    }
-  }
-  return shift;
-};
-
-
-
-
-
-
-
-/**
-*   Projection overlay helper. Helps in calculating
-*   that markers get into the right grid.
-*   @constructor
-*   @param {Map} map The map to manage.
-**/
-function ProjectionHelperOverlay(map) {
-
-  this.setMap(map);
-
-  var TILEFACTOR = 8;
-  var TILESIDE = 1 << TILEFACTOR;
-  var RADIUS = 7;
-
-  this._map = map;
-  this._zoom = -1;
-  this._X0 =
-  this._Y0 =
-  this._X1 =
-  this._Y1 = -1;
-
-
-}
-if (typeof(google) != 'undefined' && google.maps) { // make sure it exists -- amalo
-ProjectionHelperOverlay.prototype = new google.maps.OverlayView();
-}
-
-/**
- *  Helper function to convert Lng to X
- *  @private
- *  @param {float} lng
- **/
-ProjectionHelperOverlay.prototype.LngToX_ = function (lng) {
-  return (1 + lng / 180);
-};
-
-/**
- *  Helper function to convert Lat to Y
- *  @private
- *  @param {float} lat
- **/
-ProjectionHelperOverlay.prototype.LatToY_ = function (lat) {
-  var sinofphi = Math.sin(lat * Math.PI / 180);
-  return (1 - 0.5 / Math.PI * Math.log((1 + sinofphi) / (1 - sinofphi)));
-};
-
-/**
-*   Old school LatLngToPixel
-*   @param {LatLng} latlng google.maps.LatLng object
-*   @param {Number} zoom Zoom level
-*   @return {position} {x: pixelPositionX, y: pixelPositionY}
-**/
-ProjectionHelperOverlay.prototype.LatLngToPixel = function (latlng, zoom) {
-  var map = this._map;
-  var div = this.getProjection().fromLatLngToDivPixel(latlng);
-  var abs = {x: ~~(0.5 + this.LngToX_(latlng.lng()) * (2 << (zoom + 6))), y: ~~(0.5 + this.LatToY_(latlng.lat()) * (2 << (zoom + 6)))};
-  return abs;
-};
-
-
-/**
- * Draw function only triggers a ready event for
- * MarkerManager to know projection can proceed to
- * initialize.
- */
-ProjectionHelperOverlay.prototype.draw = function () {
-  if (!this.ready) {
-    this.ready = true;
-    google.maps.event.trigger(this, 'ready');
-  }
-};
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/write.py b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/write.py
deleted file mode 100644
index e91c3d0..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/bench/write.py
+++ /dev/null
@@ -1,345 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-r"""
-=========================
- Write benchmark results
-=========================
-
-Write benchmark results.
-
-:Copyright:
-
- Copyright 2014 - 2015
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-Usage::
-
-    python -mbench.write [-p plain] [-t table] <pickled
-
-    -p plain  Plain file to write to (like docs/BENCHMARKS).
-    -t table  Table file to write to (like docs/_userdoc/benchmark.txt).
-
-"""
-if __doc__:
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape')
-__docformat__ = "restructuredtext en"
-__license__ = "Apache License, Version 2.0"
-__version__ = "1.0.0"
-
-import os as _os
-import re as _re
-import sys as _sys
-
-
-try:
-    unicode
-except NameError:
-    def uni(v):
-        if hasattr(v, 'decode'):
-            return v.decode('latin-1')
-        return str(v)
-else:
-    def uni(v):
-        if isinstance(v, unicode):
-            return v.encode('utf-8')
-        return str(v)
-
-
-def write_table(filename, results):
-    """
-    Output tabled benchmark results
-
-    :Parameters:
-      `filename` : ``str``
-        Filename to write to
-
-      `results` : ``list``
-        Results
-    """
-    try:
-        next
-    except NameError:
-        next = lambda i: (getattr(i, 'next', None) or i.__next__)()
-    try:
-        cmp
-    except NameError:
-        cmp = lambda a, b: (a > b) - (a < b)
-
-    names = [
-        ('simple_port', 'Simple Port'),
-        ('jsmin_2_0_9', 'jsmin 2.0.9'),
-        ('rjsmin', '|rjsmin|'),
-        ('_rjsmin', r'_\ |rjsmin|'),
-    ]
-    benched_per_table = 2
-
-    results = sorted(results, reverse=True)
-
-    # First we transform our data into a table (list of lists)
-    pythons, widths = [], [0] * (benched_per_table + 1)
-    last_version = None
-    for version, _, result in results:
-        version = uni(version)
-        if not(last_version is None or version.startswith('2.')):
-            continue
-        last_version = version
-
-        namesub = _re.compile(r'(?:-\d+(?:\.\d+)*)?\.js$').sub
-        result = iter(result)
-        tables = []
-
-        # given our data it's easier to create the table transposed...
-        for benched in result:
-            rows = [['Name'] + [desc for _, desc in names]]
-            for _ in range(benched_per_table):
-                if _:
-                    try:
-                        benched = next(result)
-                    except StopIteration:
-                        rows.append([''] + ['' for _ in names])
-                        continue
-
-                times = dict((
-                    uni(port), (time, benched['sizes'][idx])
-                ) for idx, (port, time) in enumerate(benched['times']))
-                columns = ['%s (%.1f)' % (
-                    namesub('', _os.path.basename(uni(benched['filename']))),
-                    benched['size'] / 1024.0,
-                )]
-                for idx, (port, _) in enumerate(names):
-                    if port not in times:
-                        columns.append('n/a')
-                        continue
-                    time, size = times[port]
-                    if time is None:
-                        columns.append('(failed)')
-                        continue
-                    columns.append('%s%.2f ms (%.1f %s)' % (
-                        idx == 0 and ' ' or '',
-                        time,
-                        size / 1024.0,
-                        idx == 0 and '\\*' or ['=', '>', '<'][
-                            cmp(size, benched['sizes'][0])
-                        ],
-                    ))
-                rows.append(columns)
-
-            # calculate column widths (global for all tables)
-            for idx, row in enumerate(rows):
-                widths[idx] = max(widths[idx], max(map(len, row)))
-
-            # ... and transpose it back.
-            tables.append(zip(*rows))
-        pythons.append((version, tables))
-
-        if last_version.startswith('2.'):
-            break
-
-    # Second we create a rest table from it
-    lines = []
-    separator = lambda c='-': '+'.join([''] + [
-        c * (width + 2) for width in widths
-    ] + [''])
-
-    for idx, (version, tables) in enumerate(pythons):
-        if idx:
-            lines.append('')
-            lines.append('')
-
-        line = 'Python %s' % (version,)
-        lines.append(line)
-        lines.append('~' * len(line))
-
-        for table in tables:
-            lines.append('')
-            lines.append('.. rst-class:: benchmark')
-            lines.append('')
-
-            for idx, row in enumerate(table):
-                if idx == 0:
-                    # header
-                    lines.append(separator())
-                    lines.append('|'.join([''] + [
-                        ' %s%*s ' % (col, len(col) - width, '')
-                        for width, col in zip(widths, row)
-                    ] + ['']))
-                    lines.append(separator('='))
-                else: # data
-                    lines.append('|'.join([''] + [
-                        j == 0 and (
-                            ' %s%*s ' % (col, len(col) - widths[j], '')
-                        ) or (
-                            ['%*s  ', ' %*s '][idx == 1] % (widths[j], col)
-                        )
-                        for j, col in enumerate(row)
-                    ] + ['']))
-                    lines.append(separator())
-
-    fplines = []
-    fp = open(filename)
-    try:
-        fpiter = iter(fp)
-        for line in fpiter:
-            line = line.rstrip()
-            if line == '.. begin tables':
-                buf = []
-                for line in fpiter:
-                    line = line.rstrip()
-                    if line == '.. end tables':
-                        fplines.append('.. begin tables')
-                        fplines.append('')
-                        fplines.extend(lines)
-                        fplines.append('')
-                        fplines.append('.. end tables')
-                        buf = []
-                        break
-                    else:
-                        buf.append(line)
-                else:
-                    fplines.extend(buf)
-                    _sys.stderr.write("Placeholder container not found!\n")
-            else:
-                fplines.append(line)
-    finally:
-        fp.close()
-
-    fp = open(filename, 'w')
-    try:
-        fp.write('\n'.join(fplines) + '\n')
-    finally:
-        fp.close()
-
-
-def write_plain(filename, results):
-    """
-    Output plain benchmark results
-
-    :Parameters:
-      `filename` : ``str``
-        Filename to write to
-
-      `results` : ``list``
-        Results
-    """
-    lines = []
-    results = sorted(results, reverse=True)
-    for idx, (version, import_notes, result) in enumerate(results):
-        if idx:
-            lines.append('')
-            lines.append('')
-
-        lines.append('$ python%s -OO bench/main.py bench/*.js' % (
-            '.'.join(version.split('.')[:2])
-        ))
-        lines.append('~' * 72)
-        for note in import_notes:
-            lines.append(uni(note))
-        lines.append('Python Release: %s' % (version,))
-
-        for single in result:
-            lines.append('')
-            lines.append('Benchmarking %r... (%.1f KiB)' % (
-                uni(single['filename']), single['size'] / 1024.0
-            ))
-            for msg in single['messages']:
-                lines.append(msg)
-            times = []
-            space = max([len(uni(port)) for port, _ in single['times']])
-            for idx, (port, time) in enumerate(single['times']):
-                port = uni(port)
-                if time is None:
-                    lines.append("  FAILED %s" % (port,))
-                else:
-                    times.append(time)
-                    lines.append(
-                        "  Timing %s%s ... (%5.1f KiB %s) %8.2f ms" % (
-                            port,
-                            " " * (space - len(port)),
-                            single['sizes'][idx] / 1024.0,
-                            idx == 0 and '*' or ['=', '>', '<'][
-                                cmp(single['sizes'][idx], single['sizes'][0])
-                            ],
-                            time
-                        )
-                    )
-                    if len(times) > 1:
-                        lines[-1] += " (factor: %s)" % (', '.join([
-                            '%.2f' % (timed / time) for timed in times[:-1]
-                        ]))
-
-    lines.append('')
-    lines.append('')
-    lines.append('# vim: nowrap')
-    fp = open(filename, 'w')
-    try:
-        fp.write('\n'.join(lines) + '\n')
-    finally:
-        fp.close()
-
-
-def main(argv=None):
-    """ Main """
-    import getopt as _getopt
-    import pickle as _pickle
-
-    if argv is None:
-        argv = _sys.argv[1:]
-    try:
-        opts, args = _getopt.getopt(argv, "hp:t:", ["help"])
-    except getopt.GetoptError:
-        e = _sys.exc_info()[0](_sys.exc_info()[1])
-        print >> _sys.stderr, "%s\nTry %s -mbench.write --help" % (
-            e,
-            _os.path.basename(_sys.executable),
-        )
-        _sys.exit(2)
-
-    plain, table = None, None
-    for key, value in opts:
-        if key in ("-h", "--help"):
-            print >> _sys.stderr, (
-                "%s -mbench.write [-p plain] [-t table] <pickled" % (
-                    _os.path.basename(_sys.executable),
-                )
-            )
-            _sys.exit(0)
-        elif key == '-p':
-            plain = str(value)
-        elif key == '-t':
-            table = str(value)
-
-    struct = []
-    _sys.stdin = getattr(_sys.stdin, 'detach', lambda: _sys.stdin)()
-    try:
-        while True:
-            version, import_notes, result = _pickle.load(_sys.stdin)
-            if hasattr(version, 'decode'):
-                version = version.decode('latin-1')
-            struct.append((version, import_notes, result))
-    except EOFError:
-        pass
-
-    if plain:
-        write_plain(plain, struct)
-
-    if table:
-        write_table(table, struct)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/BENCHMARKS b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/BENCHMARKS
deleted file mode 100644
index 00fbc90..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/BENCHMARKS
+++ /dev/null
@@ -1,165 +0,0 @@
-$ python3.5 -OO bench/main.py bench/*.js
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 3.5.0
-
-Benchmarking 'bench/apiviewer.js'... (953.2 KiB)
-  Timing simple_port ... (951.5 KiB *)  1417.14 ms
-  Timing jsmin_2_0_9 ... (951.5 KiB >)  1682.43 ms (factor: 0.84)
-  Timing rjsmin      ... (951.5 KiB =)    36.38 ms (factor: 38.95, 46.25)
-  Timing _rjsmin     ... (951.5 KiB =)     1.81 ms (factor: 783.54, 930.22, 20.11)
-
-Benchmarking 'bench/bootstrap.js'... (49.0 KiB)
-  Timing simple_port ... ( 26.4 KiB *)    58.49 ms
-  Timing jsmin_2_0_9 ... ( 26.4 KiB >)    23.18 ms (factor: 2.52)
-  Timing rjsmin      ... ( 26.4 KiB >)     8.93 ms (factor: 6.55, 2.60)
-  Timing _rjsmin     ... ( 26.4 KiB >)     0.13 ms (factor: 444.62, 176.25, 67.89)
-
-Benchmarking 'bench/DateTimeShortcuts.js'... (18.3 KiB)
-  Timing simple_port ... ( 10.2 KiB *)    21.83 ms
-  Timing jsmin_2_0_9 ... ( 10.3 KiB >)     8.87 ms (factor: 2.46)
-  Timing rjsmin      ... ( 10.2 KiB >)     2.42 ms (factor: 9.03, 3.67)
-  Timing _rjsmin     ... ( 10.2 KiB >)     0.05 ms (factor: 479.81, 194.97, 53.16)
-
-Benchmarking 'bench/jquery-1.7.1.js'... (242.4 KiB)
-  Timing simple_port ... (135.9 KiB *)   306.41 ms
-  Timing jsmin_2_0_9 ... (136.8 KiB >)   156.45 ms (factor: 1.96)
-  Timing rjsmin      ... (135.9 KiB =)    61.57 ms (factor: 4.98, 2.54)
-  Timing _rjsmin     ... (135.9 KiB =)     0.83 ms (factor: 368.52, 188.17, 74.05)
-
-Benchmarking 'bench/knockout-2.0.0.js'... (38.9 KiB)
-  Timing simple_port ... ( 38.6 KiB *)    56.58 ms
-  Timing jsmin_2_0_9 ... ( 38.6 KiB >)    25.53 ms (factor: 2.22)
-  Timing rjsmin      ... ( 38.6 KiB >)     1.88 ms (factor: 30.11, 13.58)
-  Timing _rjsmin     ... ( 38.6 KiB >)     0.08 ms (factor: 736.51, 332.27, 24.46)
-
-Benchmarking 'bench/markermanager.js'... (28.6 KiB)
-  Timing simple_port ... ( 11.6 KiB *)    28.61 ms
-  Timing jsmin_2_0_9 ... ( 11.6 KiB >)    11.74 ms (factor: 2.44)
-  Timing rjsmin      ... ( 11.6 KiB =)     3.81 ms (factor: 7.51, 3.08)
-  Timing _rjsmin     ... ( 11.6 KiB =)     0.06 ms (factor: 497.49, 204.19, 66.25)
-
-
-$ python3.4 -OO bench/main.py bench/*.js
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 3.4.3
-
-Benchmarking 'bench/apiviewer.js'... (953.2 KiB)
-  Timing simple_port ... (951.5 KiB *)  1486.02 ms
-  Timing jsmin_2_0_9 ... (951.5 KiB >)  1798.61 ms (factor: 0.83)
-  Timing rjsmin      ... (951.5 KiB =)    37.49 ms (factor: 39.64, 47.98)
-  Timing _rjsmin     ... (951.5 KiB =)     1.90 ms (factor: 780.39, 944.55, 19.69)
-
-Benchmarking 'bench/bootstrap.js'... (49.0 KiB)
-  Timing simple_port ... ( 26.4 KiB *)    63.29 ms
-  Timing jsmin_2_0_9 ... ( 26.4 KiB >)    27.47 ms (factor: 2.30)
-  Timing rjsmin      ... ( 26.4 KiB >)     9.30 ms (factor: 6.80, 2.95)
-  Timing _rjsmin     ... ( 26.4 KiB >)     0.14 ms (factor: 459.12, 199.29, 67.47)
-
-Benchmarking 'bench/DateTimeShortcuts.js'... (18.3 KiB)
-  Timing simple_port ... ( 10.2 KiB *)    23.70 ms
-  Timing jsmin_2_0_9 ... ( 10.3 KiB >)     9.66 ms (factor: 2.45)
-  Timing rjsmin      ... ( 10.2 KiB >)     2.51 ms (factor: 9.44, 3.85)
-  Timing _rjsmin     ... ( 10.2 KiB >)     0.05 ms (factor: 485.22, 197.80, 51.38)
-
-Benchmarking 'bench/jquery-1.7.1.js'... (242.4 KiB)
-  Timing simple_port ... (135.9 KiB *)   332.05 ms
-  Timing jsmin_2_0_9 ... (136.8 KiB >)   170.77 ms (factor: 1.94)
-  Timing rjsmin      ... (135.9 KiB =)    64.29 ms (factor: 5.17, 2.66)
-  Timing _rjsmin     ... (135.9 KiB =)     0.86 ms (factor: 385.59, 198.30, 74.65)
-
-Benchmarking 'bench/knockout-2.0.0.js'... (38.9 KiB)
-  Timing simple_port ... ( 38.6 KiB *)    60.90 ms
-  Timing jsmin_2_0_9 ... ( 38.6 KiB >)    27.06 ms (factor: 2.25)
-  Timing rjsmin      ... ( 38.6 KiB >)     1.99 ms (factor: 30.55, 13.57)
-  Timing _rjsmin     ... ( 38.6 KiB >)     0.08 ms (factor: 731.84, 325.16, 23.96)
-
-Benchmarking 'bench/markermanager.js'... (28.6 KiB)
-  Timing simple_port ... ( 11.6 KiB *)    31.08 ms
-  Timing jsmin_2_0_9 ... ( 11.6 KiB >)    12.89 ms (factor: 2.41)
-  Timing rjsmin      ... ( 11.6 KiB =)     3.99 ms (factor: 7.78, 3.23)
-  Timing _rjsmin     ... ( 11.6 KiB =)     0.06 ms (factor: 512.70, 212.64, 65.88)
-
-
-$ python3.3 -OO bench/main.py bench/*.js
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 3.3.5
-
-Benchmarking 'bench/apiviewer.js'... (953.2 KiB)
-  Timing simple_port ... (951.5 KiB *)  1824.95 ms
-  Timing jsmin_2_0_9 ... (951.5 KiB >)  1874.17 ms (factor: 0.97)
-  Timing rjsmin      ... (951.5 KiB =)    45.03 ms (factor: 40.53, 41.63)
-  Timing _rjsmin     ... (951.5 KiB =)     1.86 ms (factor: 982.48, 1008.98, 24.24)
-
-Benchmarking 'bench/bootstrap.js'... (49.0 KiB)
-  Timing simple_port ... ( 26.4 KiB *)    72.87 ms
-  Timing jsmin_2_0_9 ... ( 26.4 KiB >)    27.80 ms (factor: 2.62)
-  Timing rjsmin      ... ( 26.4 KiB >)    10.58 ms (factor: 6.89, 2.63)
-  Timing _rjsmin     ... ( 26.4 KiB >)     0.14 ms (factor: 528.45, 201.57, 76.74)
-
-Benchmarking 'bench/DateTimeShortcuts.js'... (18.3 KiB)
-  Timing simple_port ... ( 10.2 KiB *)    27.12 ms
-  Timing jsmin_2_0_9 ... ( 10.3 KiB >)    10.54 ms (factor: 2.57)
-  Timing rjsmin      ... ( 10.2 KiB >)     2.76 ms (factor: 9.82, 3.82)
-  Timing _rjsmin     ... ( 10.2 KiB >)     0.05 ms (factor: 560.00, 217.65, 57.00)
-
-Benchmarking 'bench/jquery-1.7.1.js'... (242.4 KiB)
-  Timing simple_port ... (135.9 KiB *)   385.43 ms
-  Timing jsmin_2_0_9 ... (136.8 KiB >)   183.31 ms (factor: 2.10)
-  Timing rjsmin      ... (135.9 KiB =)    73.03 ms (factor: 5.28, 2.51)
-  Timing _rjsmin     ... (135.9 KiB =)     0.87 ms (factor: 445.30, 211.78, 84.38)
-
-Benchmarking 'bench/knockout-2.0.0.js'... (38.9 KiB)
-  Timing simple_port ... ( 38.6 KiB *)    71.85 ms
-  Timing jsmin_2_0_9 ... ( 38.6 KiB >)    29.80 ms (factor: 2.41)
-  Timing rjsmin      ... ( 38.6 KiB >)     2.37 ms (factor: 30.28, 12.56)
-  Timing _rjsmin     ... ( 38.6 KiB >)     0.08 ms (factor: 897.57, 372.29, 29.64)
-
-Benchmarking 'bench/markermanager.js'... (28.6 KiB)
-  Timing simple_port ... ( 11.6 KiB *)    35.54 ms
-  Timing jsmin_2_0_9 ... ( 11.6 KiB >)    14.17 ms (factor: 2.51)
-  Timing rjsmin      ... ( 11.6 KiB =)     4.80 ms (factor: 7.40, 2.95)
-  Timing _rjsmin     ... ( 11.6 KiB =)     0.06 ms (factor: 592.11, 236.04, 80.03)
-
-
-$ python2.7 -OO bench/main.py bench/*.js
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Python Release: 2.7.10
-
-Benchmarking 'bench/apiviewer.js'... (953.2 KiB)
-  Timing simple_port ... (951.5 KiB *)  1838.28 ms
-  Timing jsmin_2_0_9 ... (951.5 KiB >)  2031.25 ms (factor: 0.91)
-  Timing rjsmin      ... (951.5 KiB =)    44.39 ms (factor: 41.41, 45.76)
-  Timing _rjsmin     ... (951.5 KiB =)     1.65 ms (factor: 1114.11, 1231.06, 26.90)
-
-Benchmarking 'bench/bootstrap.js'... (49.0 KiB)
-  Timing simple_port ... ( 26.4 KiB *)    73.95 ms
-  Timing jsmin_2_0_9 ... ( 26.4 KiB >)    31.02 ms (factor: 2.38)
-  Timing rjsmin      ... ( 26.4 KiB >)     9.36 ms (factor: 7.90, 3.32)
-  Timing _rjsmin     ... ( 26.4 KiB >)     0.13 ms (factor: 582.62, 244.42, 73.71)
-
-Benchmarking 'bench/DateTimeShortcuts.js'... (18.3 KiB)
-  Timing simple_port ... ( 10.2 KiB *)    27.22 ms
-  Timing jsmin_2_0_9 ... ( 10.3 KiB >)    11.76 ms (factor: 2.32)
-  Timing rjsmin      ... ( 10.2 KiB >)     2.57 ms (factor: 10.59, 4.57)
-  Timing _rjsmin     ... ( 10.2 KiB >)     0.04 ms (factor: 772.01, 333.43, 72.92)
-
-Benchmarking 'bench/jquery-1.7.1.js'... (242.4 KiB)
-  Timing simple_port ... (135.9 KiB *)   379.62 ms
-  Timing jsmin_2_0_9 ... (136.8 KiB >)   207.60 ms (factor: 1.83)
-  Timing rjsmin      ... (135.9 KiB =)    65.50 ms (factor: 5.80, 3.17)
-  Timing _rjsmin     ... (135.9 KiB =)     0.80 ms (factor: 475.82, 260.21, 82.10)
-
-Benchmarking 'bench/knockout-2.0.0.js'... (38.9 KiB)
-  Timing simple_port ... ( 38.6 KiB *)    73.44 ms
-  Timing jsmin_2_0_9 ... ( 38.6 KiB >)    34.63 ms (factor: 2.12)
-  Timing rjsmin      ... ( 38.6 KiB >)     2.05 ms (factor: 35.80, 16.89)
-  Timing _rjsmin     ... ( 38.6 KiB >)     0.07 ms (factor: 1000.09, 471.65, 27.93)
-
-Benchmarking 'bench/markermanager.js'... (28.6 KiB)
-  Timing simple_port ... ( 11.6 KiB *)    36.26 ms
-  Timing jsmin_2_0_9 ... ( 11.6 KiB >)    15.54 ms (factor: 2.33)
-  Timing rjsmin      ... ( 11.6 KiB =)     4.06 ms (factor: 8.94, 3.83)
-  Timing _rjsmin     ... ( 11.6 KiB =)     0.05 ms (factor: 663.56, 284.44, 74.24)
-
-
-# vim: nowrap
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/CHANGES b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/CHANGES
deleted file mode 100644
index ce74c4c..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/CHANGES
+++ /dev/null
@@ -1,111 +0,0 @@
-Changes with version 1.0.12
-
- *) Benchmark updates, dropped slimit benchmarks, because of installation
-    trouble
-
- *) Reworked handling of comments starting with exclamation marks. The matcher
-    should no longer get out of sync, even if they appear in the middle of other
-    matches.
-
- *) Handle line terminators before and after regex literals more sensible
-
-
-Changes with version 1.0.11
-
- *) Benchmark updates
-
- *) Lifted max restrictions for CPython and Jython as well.
-
- *) Lifted max restrictions for pypy versions. Added pypy3 support.
-    Submitted by https://github.com/tony
-
-
-Changes with version 1.0.10
-
- *) Added support for pypy 2.2
-
- *) Relint with newer pylint
-
- *) Fix locale problem with the setup script on python3.
-    Submitted by https://github.com/svenstaro
-
-
-Changes with version 1.0.9
-
- *) Documentation and benchmark updates
-
-
-Changes with version 1.0.8
-
- *) Updated benchmarks
-
- *) Added command line option for keeping comments starting with an exclamation
-    mark (-b)
-
- *) Added command line option for disabling the C implemention (-p)
-
- *) Added support for python 3.4
-
- *) Added support for keeping comments starting with an exclamation mark. This
-    feature can be enabled by passing keep_bang_comments=True to the jsmin
-    function.
-
-
-Changes with version 1.0.7
-
- *) Fix inconsistency between Python and C (Python implementation was buggy).
-    Spotted by: Dave Smith <dave thesmithfam.org>
-
- *) Added support for jython 2.7
-
-
-Changes with version 1.0.6
-
- *) Added compat option to setup.py supporting the pip installer
-
- *) Added support for pypy (1.9, 2.0)
-
- *) Added support for jython (2.5)
-
-
-Changes with version 1.0.5
-
- *) Newline removal before ! operator was made more sensible.
-
-
-Changes with version 1.0.4
-
- *) Added support for Python 3.3
-
- *) Collapsion protection was reduced to "+ +" and "- -" sequences (which
-    still includes longer sequences like "+ ++")
-
-
-Changes with version 1.0.3
-
- *) "+ ++" and "- --" sequences are no longer collapsed. They were before,
-    because the original jsmin collapsed them, too.
-
- *) Updated benchmarks, added slimit and removed jsmin v8 (because it produced
-    invalid results).
-
- *) Removed "classic" regex variant.
-
-
-Changes with version 1.0.2
-
- *) Although it should work, python 2.3 is no longer supported.
-    (No suitable test environment)
-
- *) "return /regex/" is now recognized as regex expression. It wasn't before,
-    because the original jsmin ignored that, too.
-
-
-Changes with version 1.0.1
-
- *) Add C extension reimplementing the regex from rjsmin.py
-
-
-Changes with version 1.0.0
-
- *) First stable release.
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/CLASSIFIERS b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/CLASSIFIERS
deleted file mode 100644
index 10d5965..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/CLASSIFIERS
+++ /dev/null
@@ -1,19 +0,0 @@
-Development Status :: 5 - Production/Stable
-Environment :: Web Environment
-Intended Audience :: Developers
-License :: OSI Approved
-License :: OSI Approved :: Apache License, Version 2.0
-Operating System :: OS Independent
-Programming Language :: C
-Programming Language :: Python
-Programming Language :: Python :: 2
-Programming Language :: Python :: 3
-Programming Language :: Python :: Implementation :: CPython
-Programming Language :: Python :: Implementation :: Jython
-Programming Language :: Python :: Implementation :: PyPy
-Topic :: Internet :: WWW/HTTP :: Dynamic Content
-Topic :: Software Development :: Libraries
-Topic :: Software Development :: Libraries :: Python Modules
-Topic :: Text Processing
-Topic :: Text Processing :: Filters
-Topic :: Utilities
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/DESCRIPTION b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/DESCRIPTION
deleted file mode 100644
index 26a5fb3..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/DESCRIPTION
+++ /dev/null
@@ -1,73 +0,0 @@
-=====================
- Javascript Minifier
-=====================
-
-rJSmin is a javascript minifier written in python.
-
-The minifier is based on the semantics of `jsmin.c by Douglas Crockford`_\.
-
-The module is a re-implementation aiming for speed, so it can be used at
-runtime (rather than during a preprocessing step). Usually it produces the
-same results as the original ``jsmin.c``. It differs in the following ways:
-
-- there is no error detection: unterminated string, regex and comment
-  literals are treated as regular javascript code and minified as such.
-- Control characters inside string and regex literals are left untouched; they
-  are not converted to spaces (nor to \n)
-- Newline characters are not allowed inside string and regex literals, except
-  for line continuations in string literals (ECMA-5).
-- "return /regex/" is recognized correctly.
-- Line terminators after regex literals are handled more sensibly
-- "+ +" and "- -" sequences are not collapsed to '++' or '--'
-- Newlines before ! operators are removed more sensibly
-- Comments starting with an exclamation mark (``!``) can be kept optionally
-- rJSmin does not handle streams, but only complete strings. (However, the
-  module provides a "streamy" interface).
-
-Since most parts of the logic are handled by the regex engine it's way faster
-than the original python port of ``jsmin.c`` by Baruch Even. The speed factor
-varies between about 6 and 55 depending on input and python version (it gets
-faster the more compressed the input already is).  Compared to the
-speed-refactored python port by Dave St.Germain the performance gain is less
-dramatic but still between 3 and 50 (for huge inputs)). See the
-docs/BENCHMARKS file for details.
-
-rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.
-
-Both python 2 (>=2.4) and python 3 are supported.
-
-.. _jsmin.c by Douglas Crockford: http://www.crockford.com/javascript/jsmin.c
-
-
-Copyright and License
-~~~~~~~~~~~~~~~~~~~~~
-
-Copyright 2011 - 2015
-André Malo or his licensors, as applicable.
-
-The whole package (except for the files in the bench/ directory) is
-distributed under the Apache License Version 2.0. You'll find a copy in the
-root directory of the distribution or online at:
-<http://www.apache.org/licenses/LICENSE-2.0>.
-
-
-Bugs
-~~~~
-
-No bugs, of course. ;-)
-But if you've found one or have an idea how to improve rjsmin, feel free
-to send a pull request on `github <https://github.com/ndparker/rjsmin>`_
-or send a mail to <rjsmin-bugs@perlig.de>.
-
-
-Author Information
-~~~~~~~~~~~~~~~~~~
-
-André "nd" Malo <nd perlig.de>
-GPG: 0x8103A37E
-
-
-    If God intended people to be naked, they would be born that way.
-    -- Oscar Wilde
-
-.. vim:tw=72 syntax=rest
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/PROVIDES b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/PROVIDES
deleted file mode 100644
index 8e9e663..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/PROVIDES
+++ /dev/null
@@ -1 +0,0 @@
-rjsmin (1.0)
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/SUMMARY b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/SUMMARY
deleted file mode 100644
index 52064ce..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/SUMMARY
+++ /dev/null
@@ -1 +0,0 @@
-Javascript Minifier
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/api-objects.txt b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/api-objects.txt
deleted file mode 100644
index e5f2e82..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/api-objects.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-rjsmin	rjsmin-module.html
-rjsmin.__license__	rjsmin-module.html#__license__
-rjsmin.jsmin	rjsmin-module.html#jsmin
-rjsmin.__package__	rjsmin-module.html#__package__
-rjsmin._make_jsmin	rjsmin-module.html#_make_jsmin
-rjsmin.jsmin_for_posers	rjsmin-module.html#jsmin_for_posers
-rjsmin.__doc__	rjsmin-module.html#__doc__
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/crarr.png b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/crarr.png
deleted file mode 100644
index 26b43c5..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/crarr.png
+++ /dev/null
Binary files differ
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/epydoc.css b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/epydoc.css
deleted file mode 100644
index 86d4170..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/epydoc.css
+++ /dev/null
@@ -1,322 +0,0 @@
-
-
-/* Epydoc CSS Stylesheet
- *
- * This stylesheet can be used to customize the appearance of epydoc's
- * HTML output.
- *
- */
-
-/* Default Colors & Styles
- *   - Set the default foreground & background color with 'body'; and 
- *     link colors with 'a:link' and 'a:visited'.
- *   - Use bold for decision list terms.
- *   - The heading styles defined here are used for headings *within*
- *     docstring descriptions.  All headings used by epydoc itself use
- *     either class='epydoc' or class='toc' (CSS styles for both
- *     defined below).
- */
-body                        { background: #ffffff; color: #000000; }
-p                           { margin-top: 0.5em; margin-bottom: 0.5em; }
-a:link                      { color: #0000ff; }
-a:visited                   { color: #204080; }
-dt                          { font-weight: bold; }
-h1                          { font-size: +140%; font-style: italic;
-                              font-weight: bold; }
-h2                          { font-size: +125%; font-style: italic;
-                              font-weight: bold; }
-h3                          { font-size: +110%; font-style: italic;
-                              font-weight: normal; }
-code                        { font-size: 100%; }
-/* N.B.: class, not pseudoclass */
-a.link                      { font-family: monospace; }
- 
-/* Page Header & Footer
- *   - The standard page header consists of a navigation bar (with
- *     pointers to standard pages such as 'home' and 'trees'); a
- *     breadcrumbs list, which can be used to navigate to containing
- *     classes or modules; options links, to show/hide private
- *     variables and to show/hide frames; and a page title (using
- *     <h1>).  The page title may be followed by a link to the
- *     corresponding source code (using 'span.codelink').
- *   - The footer consists of a navigation bar, a timestamp, and a
- *     pointer to epydoc's homepage.
- */ 
-h1.epydoc                   { margin: 0; font-size: +140%; font-weight: bold; }
-h2.epydoc                   { font-size: +130%; font-weight: bold; }
-h3.epydoc                   { font-size: +115%; font-weight: bold;
-                              margin-top: 0.2em; }
-td h3.epydoc                { font-size: +115%; font-weight: bold;
-                              margin-bottom: 0; }
-table.navbar                { background: #a0c0ff; color: #000000;
-                              border: 2px groove #c0d0d0; }
-table.navbar table          { color: #000000; }
-th.navbar-select            { background: #70b0ff;
-                              color: #000000; } 
-table.navbar a              { text-decoration: none; }  
-table.navbar a:link         { color: #0000ff; }
-table.navbar a:visited      { color: #204080; }
-span.breadcrumbs            { font-size: 85%; font-weight: bold; }
-span.options                { font-size: 70%; }
-span.codelink               { font-size: 85%; }
-td.footer                   { font-size: 85%; }
-
-/* Table Headers
- *   - Each summary table and details section begins with a 'header'
- *     row.  This row contains a section title (marked by
- *     'span.table-header') as well as a show/hide private link
- *     (marked by 'span.options', defined above).
- *   - Summary tables that contain user-defined groups mark those
- *     groups using 'group header' rows.
- */
-td.table-header             { background: #70b0ff; color: #000000;
-                              border: 1px solid #608090; }
-td.table-header table       { color: #000000; }
-td.table-header table a:link      { color: #0000ff; }
-td.table-header table a:visited   { color: #204080; }
-span.table-header           { font-size: 120%; font-weight: bold; }
-th.group-header             { background: #c0e0f8; color: #000000;
-                              text-align: left; font-style: italic; 
-                              font-size: 115%; 
-                              border: 1px solid #608090; }
-
-/* Summary Tables (functions, variables, etc)
- *   - Each object is described by a single row of the table with
- *     two cells.  The left cell gives the object's type, and is
- *     marked with 'code.summary-type'.  The right cell gives the
- *     object's name and a summary description.
- *   - CSS styles for the table's header and group headers are
- *     defined above, under 'Table Headers'
- */
-table.summary               { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090;
-                              margin-bottom: 0.5em; }
-td.summary                  { border: 1px solid #608090; }
-code.summary-type           { font-size: 85%; }
-table.summary a:link        { color: #0000ff; }
-table.summary a:visited     { color: #204080; }
-
-
-/* Details Tables (functions, variables, etc)
- *   - Each object is described in its own div.
- *   - A single-row summary table w/ table-header is used as
- *     a header for each details section (CSS style for table-header
- *     is defined above, under 'Table Headers').
- */
-table.details               { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090;
-                              margin: .2em 0 0 0; }
-table.details table         { color: #000000; }
-table.details a:link        { color: #0000ff; }
-table.details a:visited     { color: #204080; }
-
-/* Fields */
-dl.fields                   { margin-left: 2em; margin-top: 1em;
-                              margin-bottom: 1em; }
-dl.fields dd ul             { margin-left: 0em; padding-left: 0em; }
-dl.fields dd ul li ul       { margin-left: 2em; padding-left: 0em; }
-div.fields                  { margin-left: 2em; }
-div.fields p                { margin-bottom: 0.5em; }
-
-/* Index tables (identifier index, term index, etc)
- *   - link-index is used for indices containing lists of links
- *     (namely, the identifier index & term index).
- *   - index-where is used in link indices for the text indicating
- *     the container/source for each link.
- *   - metadata-index is used for indices containing metadata
- *     extracted from fields (namely, the bug index & todo index).
- */
-table.link-index            { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090; }
-td.link-index               { border-width: 0px; }
-table.link-index a:link     { color: #0000ff; }
-table.link-index a:visited  { color: #204080; }
-span.index-where            { font-size: 70%; }
-table.metadata-index        { border-collapse: collapse;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #608090; 
-                              margin: .2em 0 0 0; }
-td.metadata-index           { border-width: 1px; border-style: solid; }
-table.metadata-index a:link { color: #0000ff; }
-table.metadata-index a:visited  { color: #204080; }
-
-/* Function signatures
- *   - sig* is used for the signature in the details section.
- *   - .summary-sig* is used for the signature in the summary 
- *     table, and when listing property accessor functions.
- * */
-.sig-name                   { color: #006080; }
-.sig-arg                    { color: #008060; }
-.sig-default                { color: #602000; }
-.summary-sig                { font-family: monospace; }
-.summary-sig-name           { color: #006080; font-weight: bold; }
-table.summary a.summary-sig-name:link
-                            { color: #006080; font-weight: bold; }
-table.summary a.summary-sig-name:visited
-                            { color: #006080; font-weight: bold; }
-.summary-sig-arg            { color: #006040; }
-.summary-sig-default        { color: #501800; }
-
-/* Subclass list
- */
-ul.subclass-list { display: inline; }
-ul.subclass-list li { display: inline; }
-
-/* To render variables, classes etc. like functions */
-table.summary .summary-name { color: #006080; font-weight: bold;
-                              font-family: monospace; }
-table.summary
-     a.summary-name:link    { color: #006080; font-weight: bold;
-                              font-family: monospace; }
-table.summary
-    a.summary-name:visited  { color: #006080; font-weight: bold;
-                              font-family: monospace; }
-
-/* Variable values
- *   - In the 'variable details' sections, each varaible's value is
- *     listed in a 'pre.variable' box.  The width of this box is
- *     restricted to 80 chars; if the value's repr is longer than
- *     this it will be wrapped, using a backslash marked with
- *     class 'variable-linewrap'.  If the value's repr is longer
- *     than 3 lines, the rest will be ellided; and an ellipsis
- *     marker ('...' marked with 'variable-ellipsis') will be used.
- *   - If the value is a string, its quote marks will be marked
- *     with 'variable-quote'.
- *   - If the variable is a regexp, it is syntax-highlighted using
- *     the re* CSS classes.
- */
-pre.variable                { padding: .5em; margin: 0;
-                              background: #dce4ec; color: #000000;
-                              border: 1px solid #708890; }
-.variable-linewrap          { color: #604000; font-weight: bold; }
-.variable-ellipsis          { color: #604000; font-weight: bold; }
-.variable-quote             { color: #604000; font-weight: bold; }
-.variable-group             { color: #008000; font-weight: bold; }
-.variable-op                { color: #604000; font-weight: bold; }
-.variable-string            { color: #006030; }
-.variable-unknown           { color: #a00000; font-weight: bold; }
-.re                         { color: #000000; }
-.re-char                    { color: #006030; }
-.re-op                      { color: #600000; }
-.re-group                   { color: #003060; }
-.re-ref                     { color: #404040; }
-
-/* Base tree
- *   - Used by class pages to display the base class hierarchy.
- */
-pre.base-tree               { font-size: 80%; margin: 0; }
-
-/* Frames-based table of contents headers
- *   - Consists of two frames: one for selecting modules; and
- *     the other listing the contents of the selected module.
- *   - h1.toc is used for each frame's heading
- *   - h2.toc is used for subheadings within each frame.
- */
-h1.toc                      { text-align: center; font-size: 105%;
-                              margin: 0; font-weight: bold;
-                              padding: 0; }
-h2.toc                      { font-size: 100%; font-weight: bold; 
-                              margin: 0.5em 0 0 -0.3em; }
-
-/* Syntax Highlighting for Source Code
- *   - doctest examples are displayed in a 'pre.py-doctest' block.
- *     If the example is in a details table entry, then it will use
- *     the colors specified by the 'table pre.py-doctest' line.
- *   - Source code listings are displayed in a 'pre.py-src' block.
- *     Each line is marked with 'span.py-line' (used to draw a line
- *     down the left margin, separating the code from the line
- *     numbers).  Line numbers are displayed with 'span.py-lineno'.
- *     The expand/collapse block toggle button is displayed with
- *     'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
- *     modify the font size of the text.)
- *   - If a source code page is opened with an anchor, then the
- *     corresponding code block will be highlighted.  The code
- *     block's header is highlighted with 'py-highlight-hdr'; and
- *     the code block's body is highlighted with 'py-highlight'.
- *   - The remaining py-* classes are used to perform syntax
- *     highlighting (py-string for string literals, py-name for names,
- *     etc.)
- */
-pre.py-doctest              { padding: .5em; margin: 1em;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #708890; }
-table pre.py-doctest        { background: #dce4ec;
-                              color: #000000; }
-pre.py-src                  { border: 2px solid #000000; 
-                              background: #f0f0f0; color: #000000; }
-.py-line                    { border-left: 2px solid #000000; 
-                              margin-left: .2em; padding-left: .4em; }
-.py-lineno                  { font-style: italic; font-size: 90%;
-                              padding-left: .5em; }
-a.py-toggle                 { text-decoration: none; }
-div.py-highlight-hdr        { border-top: 2px solid #000000;
-                              border-bottom: 2px solid #000000;
-                              background: #d8e8e8; }
-div.py-highlight            { border-bottom: 2px solid #000000;
-                              background: #d0e0e0; }
-.py-prompt                  { color: #005050; font-weight: bold;}
-.py-more                    { color: #005050; font-weight: bold;}
-.py-string                  { color: #006030; }
-.py-comment                 { color: #003060; }
-.py-keyword                 { color: #600000; }
-.py-output                  { color: #404040; }
-.py-name                    { color: #000050; }
-.py-name:link               { color: #000050 !important; }
-.py-name:visited            { color: #000050 !important; }
-.py-number                  { color: #005000; }
-.py-defname                 { color: #000060; font-weight: bold; }
-.py-def-name                { color: #000060; font-weight: bold; }
-.py-base-class              { color: #000060; }
-.py-param                   { color: #000060; }
-.py-docstring               { color: #006030; }
-.py-decorator               { color: #804020; }
-/* Use this if you don't want links to names underlined: */
-/*a.py-name                   { text-decoration: none; }*/
-
-/* Graphs & Diagrams
- *   - These CSS styles are used for graphs & diagrams generated using
- *     Graphviz dot.  'img.graph-without-title' is used for bare
- *     diagrams (to remove the border created by making the image
- *     clickable).
- */
-img.graph-without-title     { border: none; }
-img.graph-with-title        { border: 1px solid #000000; }
-span.graph-title            { font-weight: bold; }
-span.graph-caption          { }
-
-/* General-purpose classes
- *   - 'p.indent-wrapped-lines' defines a paragraph whose first line
- *     is not indented, but whose subsequent lines are.
- *   - The 'nomargin-top' class is used to remove the top margin (e.g.
- *     from lists).  The 'nomargin' class is used to remove both the
- *     top and bottom margin (but not the left or right margin --
- *     for lists, that would cause the bullets to disappear.)
- */
-p.indent-wrapped-lines      { padding: 0 0 0 7em; text-indent: -7em; 
-                              margin: 0; }
-.nomargin-top               { margin-top: 0; }
-.nomargin                   { margin-top: 0; margin-bottom: 0; }
-
-/* HTML Log */
-div.log-block               { padding: 0; margin: .5em 0 .5em 0;
-                              background: #e8f0f8; color: #000000;
-                              border: 1px solid #000000; }
-div.log-error               { padding: .1em .3em .1em .3em; margin: 4px;
-                              background: #ffb0b0; color: #000000;
-                              border: 1px solid #000000; }
-div.log-warning             { padding: .1em .3em .1em .3em; margin: 4px;
-                              background: #ffffb0; color: #000000;
-                              border: 1px solid #000000; }
-div.log-info               { padding: .1em .3em .1em .3em; margin: 4px;
-                              background: #b0ffb0; color: #000000;
-                              border: 1px solid #000000; }
-h2.log-hdr                  { background: #70b0ff; color: #000000;
-                              margin: 0; padding: 0em 0.5em 0em 0.5em;
-                              border-bottom: 1px solid #000000; font-size: 110%; }
-p.log                       { font-weight: bold; margin: .5em 0 .5em 0; }
-tr.opt-changed              { color: #000000; font-weight: bold; }
-tr.opt-default              { color: #606060; }
-pre.log                     { margin: 0; padding: 0; padding-left: 1em; }
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/epydoc.js b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/epydoc.js
deleted file mode 100644
index e787dbc..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/epydoc.js
+++ /dev/null
@@ -1,293 +0,0 @@
-function toggle_private() {
-        // Search for any private/public links on this page.  Store
-        // their old text in "cmd," so we will know what action to
-        // take; and change their text to the opposite action.
-        var cmd = "?";
-        var elts = document.getElementsByTagName("a");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "privatelink") {
-            cmd = elts[i].innerHTML;
-            elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
-                                    "hide&nbsp;private":"show&nbsp;private");
-          }
-        }
-        // Update all DIVs containing private objects.
-        var elts = document.getElementsByTagName("div");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
-          }
-          else if (elts[i].className == "public") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
-          }
-        }
-        // Update all table rows containing private objects.  Note, we
-        // use "" instead of "block" becaue IE & firefox disagree on what
-        // this should be (block vs table-row), and "" just gives the
-        // default for both browsers.
-        var elts = document.getElementsByTagName("tr");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
-          }
-        }
-        // Update all list items containing private objects.
-        var elts = document.getElementsByTagName("li");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
-                                        "none":"");
-          }
-        }
-        // Update all list items containing private objects.
-        var elts = document.getElementsByTagName("ul");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "private") {
-            elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
-          }
-        }
-        // Set a cookie to remember the current option.
-        document.cookie = "EpydocPrivate="+cmd;
-      }
-function show_private() {
-        var elts = document.getElementsByTagName("a");
-        for(var i=0; i<elts.length; i++) {
-          if (elts[i].className == "privatelink") {
-            cmd = elts[i].innerHTML;
-            if (cmd && cmd.substr(0,4)=="show")
-                toggle_private();
-          }
-        }
-      }
-function getCookie(name) {
-        var dc = document.cookie;
-        var prefix = name + "=";
-        var begin = dc.indexOf("; " + prefix);
-        if (begin == -1) {
-          begin = dc.indexOf(prefix);
-          if (begin != 0) return null;
-        } else
-        { begin += 2; }
-        var end = document.cookie.indexOf(";", begin);
-        if (end == -1)
-        { end = dc.length; }
-        return unescape(dc.substring(begin + prefix.length, end));
-      }
-function setFrame(url1, url2) {
-          parent.frames[1].location.href = url1;
-          parent.frames[2].location.href = url2;
-      }
-function checkCookie() {
-        var cmd=getCookie("EpydocPrivate");
-        if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
-            toggle_private();
-      }
-function toggleCallGraph(id) {
-        var elt = document.getElementById(id);
-        if (elt.style.display == "none")
-            elt.style.display = "block";
-        else
-            elt.style.display = "none";
-      }
-function expand(id) {
-  var elt = document.getElementById(id+"-expanded");
-  if (elt) elt.style.display = "block";
-  var elt = document.getElementById(id+"-expanded-linenums");
-  if (elt) elt.style.display = "block";
-  var elt = document.getElementById(id+"-collapsed");
-  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
-  var elt = document.getElementById(id+"-collapsed-linenums");
-  if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
-  var elt = document.getElementById(id+"-toggle");
-  if (elt) { elt.innerHTML = "-"; }
-}
-
-function collapse(id) {
-  var elt = document.getElementById(id+"-expanded");
-  if (elt) elt.style.display = "none";
-  var elt = document.getElementById(id+"-expanded-linenums");
-  if (elt) elt.style.display = "none";
-  var elt = document.getElementById(id+"-collapsed-linenums");
-  if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
-  var elt = document.getElementById(id+"-toggle");
-  if (elt) { elt.innerHTML = "+"; }
-  var elt = document.getElementById(id+"-collapsed");
-  if (elt) {
-    elt.style.display = "block";
-    
-    var indent = elt.getAttribute("indent");
-    var pad = elt.getAttribute("pad");
-    var s = "<tt class='py-lineno'>";
-    for (var i=0; i<pad.length; i++) { s += "&nbsp;" }
-    s += "</tt>";
-    s += "&nbsp;&nbsp;<tt class='py-line'>";
-    for (var i=0; i<indent.length; i++) { s += "&nbsp;" }
-    s += "<a href='#' onclick='expand(\"" + id;
-    s += "\");return false'>...</a></tt><br />";
-    elt.innerHTML = s;
-  }
-}
-
-function toggle(id) {
-  elt = document.getElementById(id+"-toggle");
-  if (elt.innerHTML == "-")
-      collapse(id); 
-  else
-      expand(id);
-  return false;
-}
-
-function highlight(id) {
-  var elt = document.getElementById(id+"-def");
-  if (elt) elt.className = "py-highlight-hdr";
-  var elt = document.getElementById(id+"-expanded");
-  if (elt) elt.className = "py-highlight";
-  var elt = document.getElementById(id+"-collapsed");
-  if (elt) elt.className = "py-highlight";
-}
-
-function num_lines(s) {
-  var n = 1;
-  var pos = s.indexOf("\n");
-  while ( pos > 0) {
-    n += 1;
-    pos = s.indexOf("\n", pos+1);
-  }
-  return n;
-}
-
-// Collapse all blocks that mave more than `min_lines` lines.
-function collapse_all(min_lines) {
-  var elts = document.getElementsByTagName("div");
-  for (var i=0; i<elts.length; i++) {
-    var elt = elts[i];
-    var split = elt.id.indexOf("-");
-    if (split > 0)
-      if (elt.id.substring(split, elt.id.length) == "-expanded")
-        if (num_lines(elt.innerHTML) > min_lines)
-          collapse(elt.id.substring(0, split));
-  }
-}
-
-function expandto(href) {
-  var start = href.indexOf("#")+1;
-  if (start != 0 && start != href.length) {
-    if (href.substring(start, href.length) != "-") {
-      collapse_all(4);
-      pos = href.indexOf(".", start);
-      while (pos != -1) {
-        var id = href.substring(start, pos);
-        expand(id);
-        pos = href.indexOf(".", pos+1);
-      }
-      var id = href.substring(start, href.length);
-      expand(id);
-      highlight(id);
-    }
-  }
-}
-
-function kill_doclink(id) {
-  var parent = document.getElementById(id);
-  parent.removeChild(parent.childNodes.item(0));
-}
-function auto_kill_doclink(ev) {
-  if (!ev) var ev = window.event;
-  if (!this.contains(ev.toElement)) {
-    var parent = document.getElementById(this.parentID);
-    parent.removeChild(parent.childNodes.item(0));
-  }
-}
-
-function doclink(id, name, targets_id) {
-  var elt = document.getElementById(id);
-
-  // If we already opened the box, then destroy it.
-  // (This case should never occur, but leave it in just in case.)
-  if (elt.childNodes.length > 1) {
-    elt.removeChild(elt.childNodes.item(0));
-  }
-  else {
-    // The outer box: relative + inline positioning.
-    var box1 = document.createElement("div");
-    box1.style.position = "relative";
-    box1.style.display = "inline";
-    box1.style.top = 0;
-    box1.style.left = 0;
-  
-    // A shadow for fun
-    var shadow = document.createElement("div");
-    shadow.style.position = "absolute";
-    shadow.style.left = "-1.3em";
-    shadow.style.top = "-1.3em";
-    shadow.style.background = "#404040";
-    
-    // The inner box: absolute positioning.
-    var box2 = document.createElement("div");
-    box2.style.position = "relative";
-    box2.style.border = "1px solid #a0a0a0";
-    box2.style.left = "-.2em";
-    box2.style.top = "-.2em";
-    box2.style.background = "white";
-    box2.style.padding = ".3em .4em .3em .4em";
-    box2.style.fontStyle = "normal";
-    box2.onmouseout=auto_kill_doclink;
-    box2.parentID = id;
-
-    // Get the targets
-    var targets_elt = document.getElementById(targets_id);
-    var targets = targets_elt.getAttribute("targets");
-    var links = "";
-    target_list = targets.split(",");
-    for (var i=0; i<target_list.length; i++) {
-        var target = target_list[i].split("=");
-        links += "<li><a href='" + target[1] + 
-               "' style='text-decoration:none'>" +
-               target[0] + "</a></li>";
-    }
-  
-    // Put it all together.
-    elt.insertBefore(box1, elt.childNodes.item(0));
-    //box1.appendChild(box2);
-    box1.appendChild(shadow);
-    shadow.appendChild(box2);
-    box2.innerHTML =
-        "Which <b>"+name+"</b> do you want to see documentation for?" +
-        "<ul style='margin-bottom: 0;'>" +
-        links + 
-        "<li><a href='#' style='text-decoration:none' " +
-        "onclick='kill_doclink(\""+id+"\");return false;'>"+
-        "<i>None of the above</i></a></li></ul>";
-  }
-  return false;
-}
-
-function get_anchor() {
-          var href = location.href;
-          var start = href.indexOf("#")+1;
-          if ((start != 0) && (start != href.length))
-              return href.substring(start, href.length);
-      }
-function redirect_url(dottedName) {
-          // Scan through each element of the "pages" list, and check
-          // if "name" matches with any of them.
-          for (var i=0; i<pages.length; i++) {
-
-              // Each page has the form "<pagename>-m" or "<pagename>-c";
-              // extract the <pagename> portion & compare it to dottedName.
-              var pagename = pages[i].substring(0, pages[i].length-2);
-              if (pagename == dottedName.substring(0,pagename.length)) {
-
-                  // We've found a page that matches `dottedName`;
-                  // construct its URL, using leftover `dottedName`
-                  // content to form an anchor.
-                  var pagetype = pages[i].charAt(pages[i].length-1);
-                  var url = pagename + ((pagetype=="m")?"-module.html":
-                                                        "-class.html");
-                  if (dottedName.length > pagename.length)
-                      url += "#" + dottedName.substring(pagename.length+1,
-                                                        dottedName.length);
-                  return url;
-              }
-          }
-      }
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/help.html b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/help.html
deleted file mode 100644
index 729bb89..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/help.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Help</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rjsmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">&nbsp;</td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-
-<h1 class="epydoc"> API Documentation </h1>
-
-<p> This document contains the API (Application Programming Interface)
-documentation for this project.  Documentation for the Python
-objects defined by the project is divided into separate pages for each
-package, module, and class.  The API documentation also includes two
-pages containing information about the project as a whole: a trees
-page, and an index page.  </p>
-
-<h2> Object Documentation </h2>
-
-  <p>Each <strong>Package Documentation</strong> page contains: </p>
-  <ul>
-    <li> A description of the package. </li>
-    <li> A list of the modules and sub-packages contained by the
-    package.  </li>
-    <li> A summary of the classes defined by the package. </li>
-    <li> A summary of the functions defined by the package. </li>
-    <li> A summary of the variables defined by the package. </li>
-    <li> A detailed description of each function defined by the
-    package. </li>
-    <li> A detailed description of each variable defined by the
-    package. </li>
-  </ul>
-  
-  <p>Each <strong>Module Documentation</strong> page contains:</p>
-  <ul>
-    <li> A description of the module. </li>
-    <li> A summary of the classes defined by the module. </li>
-    <li> A summary of the functions defined by the module. </li>
-    <li> A summary of the variables defined by the module. </li>
-    <li> A detailed description of each function defined by the
-    module. </li>
-    <li> A detailed description of each variable defined by the
-    module. </li>
-  </ul>
-  
-  <p>Each <strong>Class Documentation</strong> page contains: </p>
-  <ul>
-    <li> A class inheritance diagram. </li>
-    <li> A list of known subclasses. </li>
-    <li> A description of the class. </li>
-    <li> A summary of the methods defined by the class. </li>
-    <li> A summary of the instance variables defined by the class. </li>
-    <li> A summary of the class (static) variables defined by the
-    class. </li> 
-    <li> A detailed description of each method defined by the
-    class. </li>
-    <li> A detailed description of each instance variable defined by the
-    class. </li> 
-    <li> A detailed description of each class (static) variable defined
-    by the class. </li> 
-  </ul>
-
-<h2> Project Documentation </h2>
-
-  <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
-  <ul>
-    <li> The <em>module hierarchy</em> lists every package and module, with
-    modules grouped into packages.  At the top level, and within each
-    package, modules and sub-packages are listed alphabetically. </li>
-    <li> The <em>class hierarchy</em> lists every class, grouped by base
-    class.  If a class has more than one base class, then it will be
-    listed under each base class.  At the top level, and under each base
-    class, classes are listed alphabetically. </li>
-  </ul>
-  
-  <p> The <strong>Index</strong> page contains indices of terms and
-  identifiers: </p>
-  <ul>
-    <li> The <em>term index</em> lists every term indexed by any object's
-    documentation.  For each term, the index provides links to each
-    place where the term is indexed. </li>
-    <li> The <em>identifier index</em> lists the (short) name of every package,
-    module, class, method, function, variable, and parameter.  For each
-    identifier, the index provides a short description, and a link to
-    its documentation. </li>
-  </ul>
-
-<h2> The Table of Contents </h2>
-
-<p> The table of contents occupies the two frames on the left side of
-the window.  The upper-left frame displays the <em>project
-contents</em>, and the lower-left frame displays the <em>module
-contents</em>: </p>
-
-<table class="help summary" border="1" cellspacing="0" cellpadding="3">
-  <tr style="height: 30%">
-    <td align="center" style="font-size: small">
-       Project<br />Contents<hr />...</td>
-    <td align="center" style="font-size: small" rowspan="2" width="70%">
-      API<br />Documentation<br />Frame<br /><br /><br />
-    </td>
-  </tr>
-  <tr>
-    <td align="center" style="font-size: small">
-      Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;
-    </td>
-  </tr>
-</table><br />
-
-<p> The <strong>project contents frame</strong> contains a list of all packages
-and modules that are defined by the project.  Clicking on an entry
-will display its contents in the module contents frame.  Clicking on a
-special entry, labeled "Everything," will display the contents of
-the entire project. </p>
-
-<p> The <strong>module contents frame</strong> contains a list of every
-submodule, class, type, exception, function, and variable defined by a
-module or package.  Clicking on an entry will display its
-documentation in the API documentation frame.  Clicking on the name of
-the module, at the top of the frame, will display the documentation
-for the module itself. </p>
-
-<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
-navigation bar can be used to control whether the table of contents is
-displayed or not. </p>
-
-<h2> The Navigation Bar </h2>
-
-<p> A navigation bar is located at the top and bottom of every page.
-It indicates what type of page you are currently viewing, and allows
-you to go to related pages.  The following table describes the labels
-on the navigation bar.  Note that not some labels (such as
-[Parent]) are not displayed on all pages. </p>
-
-<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
-<tr class="summary">
-  <th>Label</th>
-  <th>Highlighted when...</th>
-  <th>Links to...</th>
-</tr>
-  <tr><td valign="top"><strong>[Parent]</strong></td>
-      <td valign="top"><em>(never highlighted)</em></td>
-      <td valign="top"> the parent of the current package </td></tr>
-  <tr><td valign="top"><strong>[Package]</strong></td>
-      <td valign="top">viewing a package</td>
-      <td valign="top">the package containing the current object
-      </td></tr>
-  <tr><td valign="top"><strong>[Module]</strong></td>
-      <td valign="top">viewing a module</td>
-      <td valign="top">the module containing the current object
-      </td></tr> 
-  <tr><td valign="top"><strong>[Class]</strong></td>
-      <td valign="top">viewing a class </td>
-      <td valign="top">the class containing the current object</td></tr>
-  <tr><td valign="top"><strong>[Trees]</strong></td>
-      <td valign="top">viewing the trees page</td>
-      <td valign="top"> the trees page </td></tr>
-  <tr><td valign="top"><strong>[Index]</strong></td>
-      <td valign="top">viewing the index page</td>
-      <td valign="top"> the index page </td></tr>
-  <tr><td valign="top"><strong>[Help]</strong></td>
-      <td valign="top">viewing the help page</td>
-      <td valign="top"> the help page </td></tr>
-</table>
-
-<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
-the top navigation bar can be used to control whether documentation
-for private objects is displayed.  Private objects are usually defined
-as objects whose (short) names begin with a single underscore, but do
-not end with an underscore.  For example, "<code>_x</code>",
-"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
-are private objects; but "<code>re.sub</code>",
-"<code>__init__</code>", and "<code>type_</code>" are not.  However,
-if a module defines the "<code>__all__</code>" variable, then its
-contents are used to decide which objects are private. </p>
-
-<p> A timestamp below the bottom navigation bar indicates when each
-page was last updated. </p>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rjsmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/identifier-index.html b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/identifier-index.html
deleted file mode 100644
index 37b4b98..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/identifier-index.html
+++ /dev/null
@@ -1,163 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Identifier Index</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rjsmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">&nbsp;</td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<table border="0" width="100%">
-<tr valign="bottom"><td>
-<h1 class="epydoc">Identifier Index</h1>
-</td><td>
-[
-  A
-  B
-  C
-  D
-  E
-  F
-  G
-  H
-  I
- <a href="#J">J</a>
-  K
-  L
-  M
-  N
-  O
-  P
-  Q
- <a href="#R">R</a>
-  S
-  T
-  U
-  V
-  W
-  X
-  Y
-  Z
- <a href="#_">_</a>
-]
-</td></table>
-<table border="0" width="100%">
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="J">J</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="rjsmin-module.html#jsmin">jsmin()</a><br />
-<span class="index-where">(in&nbsp;<a href="rjsmin-module.html">rjsmin</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="R">R</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="rjsmin-module.html">rjsmin</a></td>
-<td width="33%" class="link-index">&nbsp;</td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="rjsmin-module.html#__doc__">__doc__</a><br />
-<span class="index-where">(in&nbsp;<a href="rjsmin-module.html">rjsmin</a>)</span></td>
-<td width="33%" class="link-index"><a href="rjsmin-module.html#__license__">__license__</a><br />
-<span class="index-where">(in&nbsp;<a href="rjsmin-module.html">rjsmin</a>)</span></td>
-<td width="33%" class="link-index"><a href="rjsmin-module.html#__package__">__package__</a><br />
-<span class="index-where">(in&nbsp;<a href="rjsmin-module.html">rjsmin</a>)</span></td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-</table>
-<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rjsmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/index.html b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/index.html
deleted file mode 100644
index e51b6da..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/index.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>rjsmin</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">
-      <span class="breadcrumbs">
-        Module&nbsp;rjsmin
-      </span>
-    </td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module rjsmin</h1><p class="nomargin-top"><span class="codelink"><a href="rjsmin-pysrc.html">source&nbsp;code</a></span></p>
-<p>rJSmin is a javascript minifier written in python.</p>
-<p>The minifier is based on the semantics of <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</p>
-<p>The module is a re-implementation aiming for speed, so it can be used at
-runtime (rather than during a preprocessing step). Usually it produces the
-same results as the original <tt class="rst-docutils literal">jsmin.c</tt>. It differs in the following ways:</p>
-<ul class="rst-simple">
-<li>there is no error detection: unterminated string, regex and comment
-literals are treated as regular javascript code and minified as such.</li>
-<li>Control characters inside string and regex literals are left untouched; they
-are not converted to spaces (nor to n)</li>
-<li>Newline characters are not allowed inside string and regex literals, except
-for line continuations in string literals (ECMA-5).</li>
-<li>&quot;return /regex/&quot; is recognized correctly.</li>
-<li>Line terminators after regex literals are handled more sensibly</li>
-<li>&quot;+ +&quot; and &quot;- -&quot; sequences are not collapsed to '++' or '--'</li>
-<li>Newlines before ! operators are removed more sensibly</li>
-<li>Comments starting with an exclamation mark (<tt class="rst-docutils literal">!</tt>) can be kept optionally</li>
-<li>rJSmin does not handle streams, but only complete strings. (However, the
-module provides a &quot;streamy&quot; interface).</li>
-</ul>
-<p>Since most parts of the logic are handled by the regex engine it's way faster
-than the original python port of <tt class="rst-docutils literal">jsmin.c</tt> by Baruch Even. The speed factor
-varies between about 6 and 55 depending on input and python version (it gets
-faster the more compressed the input already is). Compared to the
-speed-refactored python port by Dave St.Germain the performance gain is less
-dramatic but still between 3 and 50 (for huge inputs). See the docs/BENCHMARKS
-file for details.</p>
-<p>rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.</p>
-<p>Both python 2 and python 3 are supported.</p>
-
-<hr />
-<div class="fields">      <p><strong>Copyright:</strong>
-        Copyright 2011 - 2015
-Andr&#233; Malo or his licensors, as applicable
-      </p>
-      <p><strong>License:</strong>
-        <p>Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at</p>
-<blockquote>
-<a class="rst-reference external" href="http://www.apache.org/licenses/LICENSE-2.0" target="_top">http://www.apache.org/licenses/LICENSE-2.0</a></blockquote>
-<p>Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.</p>
-      </p>
-      <p><strong>Version:</strong>
-        1.0.12
-      </p>
-      <p><strong>Author:</strong>
-        Andr&#233; Malo
-      </p>
-</div><!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Functions</span></td>
-</tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"><tt class="rst-docutils literal">str</tt></span>
-    </td><td class="summary">
-      <table width="100%" cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td><span class="summary-sig"><a href="rjsmin-module.html#jsmin" class="summary-sig-name">jsmin</a>(<span class="summary-sig-arg">script</span>,
-        <span class="summary-sig-arg">keep_bang_comments</span>=<span class="summary-sig-default">False</span>)</span><br />
-      Minify javascript based on <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</td>
-          <td align="right" valign="top">
-            <span class="codelink"><a href="rjsmin-pysrc.html#jsmin">source&nbsp;code</a></span>
-            
-          </td>
-        </tr>
-      </table>
-      
-    </td>
-  </tr>
-</table>
-<!-- ==================== FUNCTION DETAILS ==================== -->
-<a name="section-FunctionDetails"></a>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Function Details</span></td>
-</tr>
-</table>
-<a name="jsmin"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
-  <table width="100%" cellpadding="0" cellspacing="0" border="0">
-  <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">jsmin</span>(<span class="sig-arg">script</span>,
-        <span class="sig-arg">keep_bang_comments</span>=<span class="sig-default">False</span>)</span>
-  </h3>
-  </td><td align="right" valign="top"
-    ><span class="codelink"><a href="rjsmin-pysrc.html#jsmin">source&nbsp;code</a></span>&nbsp;
-    </td>
-  </tr></table>
-  
-  <p>Minify javascript based on <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</p>
-<p>Instead of parsing the stream char by char, it uses a regular
-expression approach which minifies the whole script with one big
-substitution regex.</p>
-  <dl class="fields">
-    <dt>Parameters:</dt>
-    <dd><ul class="nomargin-top">
-        <li><strong class="pname"><code>script</code></strong> (<tt class="rst-docutils literal">str</tt>) - Script to minify</li>
-        <li><strong class="pname"><code>keep_bang_comments</code></strong> (<tt class="rst-docutils literal">bool</tt>) - Keep comments starting with an exclamation mark? (<tt class="rst-docutils literal"><span class="pre">/*!...*/</span></tt>)</li>
-    </ul></dd>
-    <dt>Returns: <tt class="rst-docutils literal">str</tt></dt>
-        <dd>Minified script</dd>
-  </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/module-tree.html b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/module-tree.html
deleted file mode 100644
index d89305d..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/module-tree.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>Module Hierarchy</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rjsmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">&nbsp;</td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<h1 class="epydoc">Module Hierarchy</h1>
-<ul class="nomargin-top">
-    <li> <strong class="uidlink"><a href="rjsmin-module.html">rjsmin</a></strong>: <em class="summary">rJSmin is a javascript minifier written in python.</em>    </li>
-</ul>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="rjsmin-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/redirect.html b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/redirect.html
deleted file mode 100644
index 50aee0e..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/redirect.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<html><head><title>Epydoc Redirect Page</title>
-<meta http-equiv="cache-control" content="no-cache" />
-<meta http-equiv="expires" content="0" />
-<meta http-equiv="pragma" content="no-cache" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-<body>
-<script type="text/javascript">
-<!--
-var pages = ["rjsmin-m"];
-var dottedName = get_anchor();
-if (dottedName) {
-    var target = redirect_url(dottedName);
-    if (target) window.location.replace(target);
-}
-// -->
-</script>
-
-<h3>Epydoc Auto-redirect page</h3>
-
-<p>When javascript is enabled, this page will redirect URLs of
-the form <tt>redirect.html#<i>dotted.name</i></tt> to the
-documentation for the object with the given fully-qualified
-dotted name.</p>
-<p><a id="message"> &nbsp; </a></p>
-
-<script type="text/javascript">
-<!--
-if (dottedName) {
-    var msg = document.getElementById("message");
-    msg.innerHTML = "No documentation found for <tt>"+
-                    dottedName+"</tt>";
-}
-// -->
-</script>
-
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/rjsmin-module.html b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/rjsmin-module.html
deleted file mode 100644
index e51b6da..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/rjsmin-module.html
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>rjsmin</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">
-      <span class="breadcrumbs">
-        Module&nbsp;rjsmin
-      </span>
-    </td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module rjsmin</h1><p class="nomargin-top"><span class="codelink"><a href="rjsmin-pysrc.html">source&nbsp;code</a></span></p>
-<p>rJSmin is a javascript minifier written in python.</p>
-<p>The minifier is based on the semantics of <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</p>
-<p>The module is a re-implementation aiming for speed, so it can be used at
-runtime (rather than during a preprocessing step). Usually it produces the
-same results as the original <tt class="rst-docutils literal">jsmin.c</tt>. It differs in the following ways:</p>
-<ul class="rst-simple">
-<li>there is no error detection: unterminated string, regex and comment
-literals are treated as regular javascript code and minified as such.</li>
-<li>Control characters inside string and regex literals are left untouched; they
-are not converted to spaces (nor to n)</li>
-<li>Newline characters are not allowed inside string and regex literals, except
-for line continuations in string literals (ECMA-5).</li>
-<li>&quot;return /regex/&quot; is recognized correctly.</li>
-<li>Line terminators after regex literals are handled more sensibly</li>
-<li>&quot;+ +&quot; and &quot;- -&quot; sequences are not collapsed to '++' or '--'</li>
-<li>Newlines before ! operators are removed more sensibly</li>
-<li>Comments starting with an exclamation mark (<tt class="rst-docutils literal">!</tt>) can be kept optionally</li>
-<li>rJSmin does not handle streams, but only complete strings. (However, the
-module provides a &quot;streamy&quot; interface).</li>
-</ul>
-<p>Since most parts of the logic are handled by the regex engine it's way faster
-than the original python port of <tt class="rst-docutils literal">jsmin.c</tt> by Baruch Even. The speed factor
-varies between about 6 and 55 depending on input and python version (it gets
-faster the more compressed the input already is). Compared to the
-speed-refactored python port by Dave St.Germain the performance gain is less
-dramatic but still between 3 and 50 (for huge inputs). See the docs/BENCHMARKS
-file for details.</p>
-<p>rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.</p>
-<p>Both python 2 and python 3 are supported.</p>
-
-<hr />
-<div class="fields">      <p><strong>Copyright:</strong>
-        Copyright 2011 - 2015
-Andr&#233; Malo or his licensors, as applicable
-      </p>
-      <p><strong>License:</strong>
-        <p>Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at</p>
-<blockquote>
-<a class="rst-reference external" href="http://www.apache.org/licenses/LICENSE-2.0" target="_top">http://www.apache.org/licenses/LICENSE-2.0</a></blockquote>
-<p>Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.</p>
-      </p>
-      <p><strong>Version:</strong>
-        1.0.12
-      </p>
-      <p><strong>Author:</strong>
-        Andr&#233; Malo
-      </p>
-</div><!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Functions</span></td>
-</tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"><tt class="rst-docutils literal">str</tt></span>
-    </td><td class="summary">
-      <table width="100%" cellpadding="0" cellspacing="0" border="0">
-        <tr>
-          <td><span class="summary-sig"><a href="rjsmin-module.html#jsmin" class="summary-sig-name">jsmin</a>(<span class="summary-sig-arg">script</span>,
-        <span class="summary-sig-arg">keep_bang_comments</span>=<span class="summary-sig-default">False</span>)</span><br />
-      Minify javascript based on <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</td>
-          <td align="right" valign="top">
-            <span class="codelink"><a href="rjsmin-pysrc.html#jsmin">source&nbsp;code</a></span>
-            
-          </td>
-        </tr>
-      </table>
-      
-    </td>
-  </tr>
-</table>
-<!-- ==================== FUNCTION DETAILS ==================== -->
-<a name="section-FunctionDetails"></a>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td align="left" colspan="2" class="table-header">
-    <span class="table-header">Function Details</span></td>
-</tr>
-</table>
-<a name="jsmin"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
-  <table width="100%" cellpadding="0" cellspacing="0" border="0">
-  <tr valign="top"><td>
-  <h3 class="epydoc"><span class="sig"><span class="sig-name">jsmin</span>(<span class="sig-arg">script</span>,
-        <span class="sig-arg">keep_bang_comments</span>=<span class="sig-default">False</span>)</span>
-  </h3>
-  </td><td align="right" valign="top"
-    ><span class="codelink"><a href="rjsmin-pysrc.html#jsmin">source&nbsp;code</a></span>&nbsp;
-    </td>
-  </tr></table>
-  
-  <p>Minify javascript based on <a class="rst-reference external" href="http://www.crockford.com/javascript/jsmin.c" target="_top">jsmin.c by Douglas Crockford</a>.</p>
-<p>Instead of parsing the stream char by char, it uses a regular
-expression approach which minifies the whole script with one big
-substitution regex.</p>
-  <dl class="fields">
-    <dt>Parameters:</dt>
-    <dd><ul class="nomargin-top">
-        <li><strong class="pname"><code>script</code></strong> (<tt class="rst-docutils literal">str</tt>) - Script to minify</li>
-        <li><strong class="pname"><code>keep_bang_comments</code></strong> (<tt class="rst-docutils literal">bool</tt>) - Keep comments starting with an exclamation mark? (<tt class="rst-docutils literal"><span class="pre">/*!...*/</span></tt>)</li>
-    </ul></dd>
-    <dt>Returns: <tt class="rst-docutils literal">str</tt></dt>
-        <dd>Minified script</dd>
-  </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/rjsmin-pysrc.html b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/rjsmin-pysrc.html
deleted file mode 100644
index acf0aaa..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/docs/apidoc/rjsmin-pysrc.html
+++ /dev/null
@@ -1,617 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-          "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-  <title>rjsmin</title>
-  <link rel="stylesheet" href="epydoc.css" type="text/css" />
-  <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
-      alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
-  <tr valign="top">
-    <td width="100%">
-      <span class="breadcrumbs">
-        Module&nbsp;rjsmin
-      </span>
-    </td>
-    <td>
-      <table cellpadding="0" cellspacing="0">
-        <!-- hide/show private -->
-      </table>
-    </td>
-  </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="rjsmin-module.html">Module rjsmin</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno">  1</tt>  <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
-<a name="L2"></a><tt class="py-lineno">  2</tt>  <tt class="py-line"><tt class="py-comment"># -*- coding: ascii -*-</tt> </tt>
-<a name="L3"></a><tt class="py-lineno">  3</tt>  <tt class="py-line"><tt class="py-docstring">r"""</tt> </tt>
-<a name="L4"></a><tt class="py-lineno">  4</tt>  <tt class="py-line"><tt class="py-docstring">=====================</tt> </tt>
-<a name="L5"></a><tt class="py-lineno">  5</tt>  <tt class="py-line"><tt class="py-docstring"> Javascript Minifier</tt> </tt>
-<a name="L6"></a><tt class="py-lineno">  6</tt>  <tt class="py-line"><tt class="py-docstring">=====================</tt> </tt>
-<a name="L7"></a><tt class="py-lineno">  7</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L8"></a><tt class="py-lineno">  8</tt>  <tt class="py-line"><tt class="py-docstring">rJSmin is a javascript minifier written in python.</tt> </tt>
-<a name="L9"></a><tt class="py-lineno">  9</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L10"></a><tt class="py-lineno"> 10</tt>  <tt class="py-line"><tt class="py-docstring">The minifier is based on the semantics of `jsmin.c by Douglas Crockford`_\\.</tt> </tt>
-<a name="L11"></a><tt class="py-lineno"> 11</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L12"></a><tt class="py-lineno"> 12</tt>  <tt class="py-line"><tt class="py-docstring">:Copyright:</tt> </tt>
-<a name="L13"></a><tt class="py-lineno"> 13</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L14"></a><tt class="py-lineno"> 14</tt>  <tt class="py-line"><tt class="py-docstring"> Copyright 2011 - 2015</tt> </tt>
-<a name="L15"></a><tt class="py-lineno"> 15</tt>  <tt class="py-line"><tt class="py-docstring"> Andr\xe9 Malo or his licensors, as applicable</tt> </tt>
-<a name="L16"></a><tt class="py-lineno"> 16</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L17"></a><tt class="py-lineno"> 17</tt>  <tt class="py-line"><tt class="py-docstring">:License:</tt> </tt>
-<a name="L18"></a><tt class="py-lineno"> 18</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L19"></a><tt class="py-lineno"> 19</tt>  <tt class="py-line"><tt class="py-docstring"> Licensed under the Apache License, Version 2.0 (the "License");</tt> </tt>
-<a name="L20"></a><tt class="py-lineno"> 20</tt>  <tt class="py-line"><tt class="py-docstring"> you may not use this file except in compliance with the License.</tt> </tt>
-<a name="L21"></a><tt class="py-lineno"> 21</tt>  <tt class="py-line"><tt class="py-docstring"> You may obtain a copy of the License at</tt> </tt>
-<a name="L22"></a><tt class="py-lineno"> 22</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L23"></a><tt class="py-lineno"> 23</tt>  <tt class="py-line"><tt class="py-docstring">     http://www.apache.org/licenses/LICENSE-2.0</tt> </tt>
-<a name="L24"></a><tt class="py-lineno"> 24</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L25"></a><tt class="py-lineno"> 25</tt>  <tt class="py-line"><tt class="py-docstring"> Unless required by applicable law or agreed to in writing, software</tt> </tt>
-<a name="L26"></a><tt class="py-lineno"> 26</tt>  <tt class="py-line"><tt class="py-docstring"> distributed under the License is distributed on an "AS IS" BASIS,</tt> </tt>
-<a name="L27"></a><tt class="py-lineno"> 27</tt>  <tt class="py-line"><tt class="py-docstring"> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</tt> </tt>
-<a name="L28"></a><tt class="py-lineno"> 28</tt>  <tt class="py-line"><tt class="py-docstring"> See the License for the specific language governing permissions and</tt> </tt>
-<a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-docstring"> limitations under the License.</tt> </tt>
-<a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"><tt class="py-docstring">The module is a re-implementation aiming for speed, so it can be used at</tt> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-docstring">runtime (rather than during a preprocessing step). Usually it produces the</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-docstring">same results as the original ``jsmin.c``. It differs in the following ways:</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-docstring">- there is no error detection: unterminated string, regex and comment</tt> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt class="py-docstring">  literals are treated as regular javascript code and minified as such.</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt class="py-docstring">- Control characters inside string and regex literals are left untouched; they</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-docstring">  are not converted to spaces (nor to \\n)</tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-docstring">- Newline characters are not allowed inside string and regex literals, except</tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt class="py-docstring">  for line continuations in string literals (ECMA-5).</tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt class="py-docstring">- "return /regex/" is recognized correctly.</tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"><tt class="py-docstring">- Line terminators after regex literals are handled more sensibly</tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt class="py-docstring">- "+ +" and "- -" sequences are not collapsed to '++' or '--'</tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt class="py-docstring">- Newlines before ! operators are removed more sensibly</tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-docstring">- Comments starting with an exclamation mark (``!``) can be kept optionally</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-docstring">- rJSmin does not handle streams, but only complete strings. (However, the</tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-docstring">  module provides a "streamy" interface).</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-docstring">Since most parts of the logic are handled by the regex engine it's way faster</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-docstring">than the original python port of ``jsmin.c`` by Baruch Even. The speed factor</tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-docstring">varies between about 6 and 55 depending on input and python version (it gets</tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"><tt class="py-docstring">faster the more compressed the input already is). Compared to the</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-docstring">speed-refactored python port by Dave St.Germain the performance gain is less</tt> </tt>
-<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-docstring">dramatic but still between 3 and 50 (for huge inputs). See the docs/BENCHMARKS</tt> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-docstring">file for details.</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-docstring">rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">Both python 2 and python 3 are supported.</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-docstring">.. _jsmin.c by Douglas Crockford:</tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring">   http://www.crockford.com/javascript/jsmin.c</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-0" class="py-name" targets="Variable rjsmin.__doc__=rjsmin-module.html#__doc__"><a title="rjsmin.__doc__" class="py-name" href="#" onclick="return doclink('link-0', '__doc__', 'link-0');">__doc__</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line">    <tt class="py-comment"># pylint: disable = redefined-builtin</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line">    <tt id="link-1" class="py-name"><a title="rjsmin.__doc__" class="py-name" href="#" onclick="return doclink('link-1', '__doc__', 'link-0');">__doc__</a></tt> <tt class="py-op">=</tt> <tt id="link-2" class="py-name"><a title="rjsmin.__doc__" class="py-name" href="#" onclick="return doclink('link-2', '__doc__', 'link-0');">__doc__</a></tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'ascii'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'unicode_escape'</tt><tt class="py-op">)</tt> </tt>
-<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-name">__author__</tt> <tt class="py-op">=</tt> <tt class="py-string">r"Andr\xe9 Malo"</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'ascii'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'unicode_escape'</tt><tt class="py-op">)</tt> </tt>
-<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt class="py-name">__docformat__</tt> <tt class="py-op">=</tt> <tt class="py-string">"restructuredtext en"</tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable rjsmin.__license__=rjsmin-module.html#__license__"><a title="rjsmin.__license__" class="py-name" href="#" onclick="return doclink('link-3', '__license__', 'link-3');">__license__</a></tt> <tt class="py-op">=</tt> <tt class="py-string">"Apache License, Version 2.0"</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-string">'1.0.12'</tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"><tt class="py-name">__all__</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'jsmin'</tt><tt class="py-op">]</tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_re</tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"> </tt>
-<a name="_make_jsmin"></a><div id="_make_jsmin-def"><a name="L76"></a><tt class="py-lineno"> 76</tt> <a class="py-toggle" href="#" id="_make_jsmin-toggle" onclick="return toggle('_make_jsmin');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="rjsmin-module.html#_make_jsmin">_make_jsmin</a><tt class="py-op">(</tt><tt class="py-param">python_only</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_make_jsmin-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_make_jsmin-expanded"><a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring">    Generate JS minifier based on `jsmin.c by Douglas Crockford`_</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">    .. _jsmin.c by Douglas Crockford:</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-docstring">       http://www.crockford.com/javascript/jsmin.c</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"><tt class="py-docstring">    :Parameters:</tt> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"><tt class="py-docstring">      `python_only` : ``bool``</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"><tt class="py-docstring">        Use only the python variant. If true, the c extension is not even</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"><tt class="py-docstring">        tried to be loaded.</tt> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-docstring">    :Return: Minifier</tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">    :Rtype: ``callable``</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">    <tt class="py-comment"># pylint: disable = unused-variable</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">    <tt class="py-comment"># pylint: disable = too-many-locals</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">python_only</tt><tt class="py-op">:</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">            <tt class="py-keyword">import</tt> <tt class="py-name">_rjsmin</tt> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">_rjsmin</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Function rjsmin.jsmin()=rjsmin-module.html#jsmin"><a title="rjsmin.jsmin" class="py-name" href="#" onclick="return doclink('link-4', 'jsmin', 'link-4');">jsmin</a></tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">        <tt class="py-name">xrange</tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">NameError</tt><tt class="py-op">:</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">        <tt class="py-name">xrange</tt> <tt class="py-op">=</tt> <tt class="py-name">range</tt>  <tt class="py-comment"># pylint: disable = redefined-builtin</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line"> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">    <tt class="py-name">space_chars</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[\000-\011\013\014\016-\040]'</tt> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line"> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">    <tt class="py-name">line_comment</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?://[^\r\n]*)'</tt> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">    <tt class="py-name">space_comment</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)'</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">    <tt class="py-name">space_comment_nobang</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/)'</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">    <tt class="py-name">bang_comment</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:/\*![^*]*\*+(?:[^/*][^*]*\*+)*/)'</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line"> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">    <tt class="py-name">string1</tt> <tt class="py-op">=</tt> \ </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">        <tt class="py-string">r'(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)'</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">    <tt class="py-name">string2</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^"\\\r\n]*)*")'</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">    <tt class="py-name">strings</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:%s|%s)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">string1</tt><tt class="py-op">,</tt> <tt class="py-name">string2</tt><tt class="py-op">)</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line"> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">    <tt class="py-name">charclass</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\])'</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">    <tt class="py-name">nospecial</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[^/\\\[\r\n]'</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">    <tt class="py-name">regex</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:/(?![\r\n/*])%s*(?:(?:\\[^\r\n]|%s)%s*)*/)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">        <tt class="py-name">nospecial</tt><tt class="py-op">,</tt> <tt class="py-name">charclass</tt><tt class="py-op">,</tt> <tt class="py-name">nospecial</tt> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">    <tt class="py-op">)</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">    <tt class="py-name">space</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:%s|%s)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">space_chars</tt><tt class="py-op">,</tt> <tt class="py-name">space_comment</tt><tt class="py-op">)</tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">    <tt class="py-name">newline</tt> <tt class="py-op">=</tt> <tt class="py-string">r'(?:%s?[\r\n])'</tt> <tt class="py-op">%</tt> <tt class="py-name">line_comment</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">fix_charclass</tt><tt class="py-op">(</tt><tt class="py-param">result</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">        <tt class="py-docstring">""" Fixup string of chars to fit into a regex char class """</tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">        <tt class="py-name">pos</tt> <tt class="py-op">=</tt> <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">pos</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line">            <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-string">r'%s%s-'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-name">pos</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">result</tt><tt class="py-op">[</tt><tt class="py-name">pos</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">sequentize</tt><tt class="py-op">(</tt><tt class="py-param">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">            <tt class="py-docstring">"""</tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-docstring">            Notate consecutive characters as sequence</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring">            (1-4 instead of 1234)</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring">            """</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">            <tt class="py-name">first</tt><tt class="py-op">,</tt> <tt class="py-name">last</tt><tt class="py-op">,</tt> <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">            <tt class="py-keyword">for</tt> <tt class="py-name">char</tt> <tt class="py-keyword">in</tt> <tt class="py-name">map</tt><tt class="py-op">(</tt><tt class="py-name">ord</tt><tt class="py-op">,</tt> <tt class="py-name">string</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">                <tt class="py-keyword">if</tt> <tt class="py-name">last</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">                    <tt class="py-name">first</tt> <tt class="py-op">=</tt> <tt class="py-name">last</tt> <tt class="py-op">=</tt> <tt class="py-name">char</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">                <tt class="py-keyword">elif</tt> <tt class="py-name">last</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> <tt class="py-op">==</tt> <tt class="py-name">char</tt><tt class="py-op">:</tt> </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line">                    <tt class="py-name">last</tt> <tt class="py-op">=</tt> <tt class="py-name">char</tt> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">                <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">                    <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">first</tt><tt class="py-op">,</tt> <tt class="py-name">last</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">                    <tt class="py-name">first</tt> <tt class="py-op">=</tt> <tt class="py-name">last</tt> <tt class="py-op">=</tt> <tt class="py-name">char</tt> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">last</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">                <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">first</tt><tt class="py-op">,</tt> <tt class="py-name">last</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'%s%s%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">                <tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">first</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">                <tt class="py-name">last</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">first</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'-'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">                <tt class="py-name">last</tt> <tt class="py-op">!=</tt> <tt class="py-name">first</tt> <tt class="py-keyword">and</tt> <tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">last</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt> </tt>
-<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">            <tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">first</tt><tt class="py-op">,</tt> <tt class="py-name">last</tt> <tt class="py-keyword">in</tt> <tt class="py-name">result</tt><tt class="py-op">]</tt><tt class="py-op">)</tt>  <tt class="py-comment"># noqa</tt> </tt>
-</div><a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line"> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line">            <tt class="py-string">r'([\000-\040\047])'</tt><tt class="py-op">,</tt>  <tt class="py-comment"># \047 for better portability</tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line">            <tt class="py-keyword">lambda</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> <tt class="py-string">'\\%03o'</tt> <tt class="py-op">%</tt> <tt class="py-name">ord</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line">                <tt class="py-name">sequentize</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line">                <tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'\\'</tt><tt class="py-op">,</tt> <tt class="py-string">'\\\\'</tt><tt class="py-op">)</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line">                <tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'['</tt><tt class="py-op">,</tt> <tt class="py-string">'\\['</tt><tt class="py-op">)</tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line">                <tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">']'</tt><tt class="py-op">,</tt> <tt class="py-string">'\\]'</tt><tt class="py-op">)</tt> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line">            <tt class="py-op">)</tt> </tt>
-<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-</div><a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line"> </tt>
-<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">id_literal_</tt><tt class="py-op">(</tt><tt class="py-param">what</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">        <tt class="py-docstring">""" Make id_literal like char class """</tt> </tt>
-<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">        <tt class="py-name">match</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-name">what</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">match</tt> </tt>
-<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">        <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">            <tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xrange</tt><tt class="py-op">(</tt><tt class="py-number">127</tt><tt class="py-op">)</tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-string">'[^%s]'</tt> <tt class="py-op">%</tt> <tt class="py-name">fix_charclass</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line"> </tt>
-<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">not_id_literal_</tt><tt class="py-op">(</tt><tt class="py-param">keep</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">        <tt class="py-docstring">""" Make negated id_literal like char class """</tt> </tt>
-<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line">        <tt class="py-name">match</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-name">id_literal_</tt><tt class="py-op">(</tt><tt class="py-name">keep</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">match</tt> </tt>
-<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line">        <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
-<a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">            <tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xrange</tt><tt class="py-op">(</tt><tt class="py-number">127</tt><tt class="py-op">)</tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">chr</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line">        <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-string">r'[%s]'</tt> <tt class="py-op">%</tt> <tt class="py-name">fix_charclass</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line"> </tt>
-<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">    <tt class="py-name">not_id_literal</tt> <tt class="py-op">=</tt> <tt class="py-name">not_id_literal_</tt><tt class="py-op">(</tt><tt class="py-string">r'[a-zA-Z0-9_$]'</tt><tt class="py-op">)</tt> </tt>
-<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">    <tt class="py-name">preregex1</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[(,=:\[!&amp;|?{};\r\n]'</tt> </tt>
-<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">    <tt class="py-name">preregex2</tt> <tt class="py-op">=</tt> <tt class="py-string">r'%(not_id_literal)sreturn'</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line"> </tt>
-<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">    <tt class="py-name">id_literal</tt> <tt class="py-op">=</tt> <tt class="py-name">id_literal_</tt><tt class="py-op">(</tt><tt class="py-string">r'[a-zA-Z0-9_$]'</tt><tt class="py-op">)</tt> </tt>
-<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">    <tt class="py-name">id_literal_open</tt> <tt class="py-op">=</tt> <tt class="py-name">id_literal_</tt><tt class="py-op">(</tt><tt class="py-string">r'[a-zA-Z0-9_${\[(!+-]'</tt><tt class="py-op">)</tt> </tt>
-<a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">    <tt class="py-name">id_literal_close</tt> <tt class="py-op">=</tt> <tt class="py-name">id_literal_</tt><tt class="py-op">(</tt><tt class="py-string">r'[a-zA-Z0-9_$}\])"\047+-]'</tt><tt class="py-op">)</tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">    <tt class="py-name">post_regex_off</tt> <tt class="py-op">=</tt> <tt class="py-name">id_literal_</tt><tt class="py-op">(</tt><tt class="py-string">r'[^\000-\040}\])?:|,;.&amp;=+-]'</tt><tt class="py-op">)</tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line"> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">    <tt class="py-name">dull</tt> <tt class="py-op">=</tt> <tt class="py-string">r'[^\047"/\000-\040]'</tt> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line"> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">    <tt class="py-name">space_sub_simple</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line">        <tt class="py-comment"># noqa pylint: disable = bad-continuation</tt> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line"> </tt>
-<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">        <tt class="py-string">r'(%(dull)s+)'</tt>                                         <tt class="py-comment"># 0</tt> </tt>
-<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(strings)s%(dull)s*)'</tt>                             <tt class="py-comment"># 1</tt> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(preregex1)s)'</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">            <tt class="py-string">r'%(space)s*(?:%(newline)s%(space)s*)*'</tt> </tt>
-<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line">            <tt class="py-string">r'(%(regex)s)'</tt>                                     <tt class="py-comment"># 2</tt> </tt>
-<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*(?:%(newline)s%(space)s*)+'</tt>           <tt class="py-comment"># 3</tt> </tt>
-<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">                <tt class="py-string">r'(?=%(post_regex_off)s))?'</tt> </tt>
-<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(preregex2)s)'</tt> </tt>
-<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">            <tt class="py-string">r'%(space)s*(?:(%(newline)s)%(space)s*)*'</tt>          <tt class="py-comment"># 4</tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">            <tt class="py-string">r'(%(regex)s)'</tt>                                     <tt class="py-comment"># 5</tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*(?:%(newline)s%(space)s*)+'</tt>           <tt class="py-comment"># 6</tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">                <tt class="py-string">r'(?=%(post_regex_off)s))?'</tt> </tt>
-<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(id_literal_close)s)'</tt> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line">            <tt class="py-string">r'%(space)s*(?:(%(newline)s)%(space)s*)+'</tt>          <tt class="py-comment"># 7</tt> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">            <tt class="py-string">r'(?=%(id_literal_open)s)'</tt> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)'</tt>  <tt class="py-comment"># 8</tt> </tt>
-<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=\+)(%(space)s)+(?=\+)'</tt>                          <tt class="py-comment"># 9</tt> </tt>
-<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=-)(%(space)s)+(?=-)'</tt>                            <tt class="py-comment"># 10</tt> </tt>
-<a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">        <tt class="py-string">r'|%(space)s+'</tt> </tt>
-<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line">        <tt class="py-string">r'|(?:%(newline)s%(space)s*)+'</tt> </tt>
-<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">    <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"> </tt>
-<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">    <tt class="py-comment"># print space_sub_simple.__self__.pattern</tt> </tt>
-<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line"> </tt>
-<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">space_subber_simple</tt><tt class="py-op">(</tt><tt class="py-param">match</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line">        <tt class="py-docstring">""" Substitution callback """</tt> </tt>
-<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line">        <tt class="py-comment"># pylint: disable = too-many-return-statements</tt> </tt>
-<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line"> </tt>
-<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">        <tt class="py-name">groups</tt> <tt class="py-op">=</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line">            <tt class="py-keyword">if</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> <tt class="py-string">'\n'</tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"%s%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">6</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line">            <tt class="py-op">)</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">'\n'</tt> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">8</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">9</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">10</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">' '</tt> </tt>
-<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-</div><a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line"> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line">    <tt class="py-name">space_sub_banged</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line">        <tt class="py-comment"># noqa pylint: disable = bad-continuation</tt> </tt>
-<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line"> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line">        <tt class="py-string">r'(%(dull)s+)'</tt>                                         <tt class="py-comment"># 0</tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(strings)s%(dull)s*)'</tt>                             <tt class="py-comment"># 1</tt> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(preregex1)s)'</tt> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*(?:%(newline)s%(space)s*)*)'</tt>          <tt class="py-comment"># 2</tt> </tt>
-<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line">            <tt class="py-string">r'(%(regex)s)'</tt>                                     <tt class="py-comment"># 3</tt> </tt>
-<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*(?:%(newline)s%(space)s*)+'</tt>           <tt class="py-comment"># 4</tt> </tt>
-<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">                <tt class="py-string">r'(?=%(post_regex_off)s))?'</tt> </tt>
-<a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(preregex2)s)'</tt> </tt>
-<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*(?:(%(newline)s)%(space)s*)*)'</tt>        <tt class="py-comment"># 5, 6</tt> </tt>
-<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">            <tt class="py-string">r'(%(regex)s)'</tt>                                     <tt class="py-comment"># 7</tt> </tt>
-<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*(?:%(newline)s%(space)s*)+'</tt>           <tt class="py-comment"># 8</tt> </tt>
-<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line">                <tt class="py-string">r'(?=%(post_regex_off)s))?'</tt> </tt>
-<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(id_literal_close)s)'</tt> </tt>
-<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">            <tt class="py-string">r'(%(space)s*(?:%(newline)s%(space)s*)+)'</tt>          <tt class="py-comment"># 9</tt> </tt>
-<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">            <tt class="py-string">r'(?=%(id_literal_open)s)'</tt> </tt>
-<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=%(id_literal)s)(%(space)s+)(?=%(id_literal)s)'</tt>  <tt class="py-comment"># 10</tt> </tt>
-<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=\+)(%(space)s+)(?=\+)'</tt>                          <tt class="py-comment"># 11</tt> </tt>
-<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line">        <tt class="py-string">r'|(?&lt;=-)(%(space)s+)(?=-)'</tt>                            <tt class="py-comment"># 12</tt> </tt>
-<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(space)s+)'</tt>                                       <tt class="py-comment"># 13</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">        <tt class="py-string">r'|((?:%(newline)s%(space)s*)+)'</tt>                       <tt class="py-comment"># 14</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">    <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line"> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">    <tt class="py-comment"># print space_sub_banged.__self__.pattern</tt> </tt>
-<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line"> </tt>
-<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">    <tt class="py-name">keep</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">        <tt class="py-string">r'%(space_chars)s+|%(space_comment_nobang)s+|%(newline)s+'</tt> </tt>
-<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">        <tt class="py-string">r'|(%(bang_comment)s+)'</tt> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line">    <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">    <tt class="py-name">keeper</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt> </tt>
-<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line"> </tt>
-<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">    <tt class="py-comment"># print keep.__self__.pattern</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line"> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">space_subber_banged</tt><tt class="py-op">(</tt><tt class="py-param">match</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">        <tt class="py-docstring">""" Substitution callback """</tt> </tt>
-<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">        <tt class="py-comment"># pylint: disable = too-many-return-statements</tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line"> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">        <tt class="py-name">groups</tt> <tt class="py-op">=</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"%s%s%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">                <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">                <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">            <tt class="py-op">)</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-string">"%s%s%s%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line">                <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">6</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line">                <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">8</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">8</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">            <tt class="py-op">)</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">9</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">9</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'\n'</tt> </tt>
-<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line">        <tt class="py-keyword">elif</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">10</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">11</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">12</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">10</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">11</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">12</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">' '</tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">13</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">14</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line"> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">    <tt class="py-keyword">def</tt> <tt class="py-def-name">jsmin</tt><tt class="py-op">(</tt><tt class="py-param">script</tt><tt class="py-op">,</tt> <tt class="py-param">keep_bang_comments</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line">        <tt class="py-docstring">r"""</tt> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line"><tt class="py-docstring">        Minify javascript based on `jsmin.c by Douglas Crockford`_\.</tt> </tt>
-<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line"><tt class="py-docstring">        Instead of parsing the stream char by char, it uses a regular</tt> </tt>
-<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line"><tt class="py-docstring">        expression approach which minifies the whole script with one big</tt> </tt>
-<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line"><tt class="py-docstring">        substitution regex.</tt> </tt>
-<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line"><tt class="py-docstring">        .. _jsmin.c by Douglas Crockford:</tt> </tt>
-<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line"><tt class="py-docstring">           http://www.crockford.com/javascript/jsmin.c</tt> </tt>
-<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line"><tt class="py-docstring">        :Parameters:</tt> </tt>
-<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line"><tt class="py-docstring">          `script` : ``str``</tt> </tt>
-<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line"><tt class="py-docstring">            Script to minify</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line"><tt class="py-docstring">          `keep_bang_comments` : ``bool``</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line"><tt class="py-docstring">            Keep comments starting with an exclamation mark? (``/*!...*/``)</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"><tt class="py-docstring">        :Return: Minified script</tt> </tt>
-<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line"><tt class="py-docstring">        :Rtype: ``str``</tt> </tt>
-<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
-<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line">        <tt class="py-comment"># pylint: disable = redefined-outer-name</tt> </tt>
-<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line"> </tt>
-<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">keep_bang_comments</tt><tt class="py-op">:</tt> </tt>
-<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">space_sub_banged</tt><tt class="py-op">(</tt> </tt>
-<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">                <tt class="py-name">space_subber_banged</tt><tt class="py-op">,</tt> <tt class="py-string">'\n%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-name">script</tt> </tt>
-<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line">            <tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">space_sub_simple</tt><tt class="py-op">(</tt> </tt>
-<a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line">                <tt class="py-name">space_subber_simple</tt><tt class="py-op">,</tt> <tt class="py-string">'\n%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-name">script</tt> </tt>
-<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line">            <tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line"> </tt>
-<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-5" class="py-name"><a title="rjsmin.jsmin" class="py-name" href="#" onclick="return doclink('link-5', 'jsmin', 'link-4');">jsmin</a></tt> </tt>
-</div><a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line"> </tt>
-<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line"><tt id="link-6" class="py-name"><a title="rjsmin.jsmin" class="py-name" href="#" onclick="return doclink('link-6', 'jsmin', 'link-4');">jsmin</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_make_jsmin</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line"> </tt>
-<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line"> </tt>
-<a name="jsmin_for_posers"></a><div id="jsmin_for_posers-def"><a name="L348"></a><tt class="py-lineno">348</tt> <a class="py-toggle" href="#" id="jsmin_for_posers-toggle" onclick="return toggle('jsmin_for_posers');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="rjsmin-module.html#jsmin_for_posers">jsmin_for_posers</a><tt class="py-op">(</tt><tt class="py-param">script</tt><tt class="py-op">,</tt> <tt class="py-param">keep_bang_comments</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="jsmin_for_posers-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="jsmin_for_posers-expanded"><a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line">    <tt class="py-docstring">r"""</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring">    Minify javascript based on `jsmin.c by Douglas Crockford`_\.</tt> </tt>
-<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"><tt class="py-docstring">    Instead of parsing the stream char by char, it uses a regular</tt> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"><tt class="py-docstring">    expression approach which minifies the whole script with one big</tt> </tt>
-<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"><tt class="py-docstring">    substitution regex.</tt> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"><tt class="py-docstring">    .. _jsmin.c by Douglas Crockford:</tt> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"><tt class="py-docstring">       http://www.crockford.com/javascript/jsmin.c</tt> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"><tt class="py-docstring">    :Warning: This function is the digest of a _make_jsmin() call. It just</tt> </tt>
-<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line"><tt class="py-docstring">              utilizes the resulting regexes. It's here for fun and may</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line"><tt class="py-docstring">              vanish any time. Use the `jsmin` function instead.</tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"><tt class="py-docstring">    :Parameters:</tt> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line"><tt class="py-docstring">      `script` : ``str``</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"><tt class="py-docstring">        Script to minify</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line"><tt class="py-docstring">      `keep_bang_comments` : ``bool``</tt> </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"><tt class="py-docstring">        Keep comments starting with an exclamation mark? (``/*!...*/``)</tt> </tt>
-<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line"><tt class="py-docstring">    :Return: Minified script</tt> </tt>
-<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line"><tt class="py-docstring">    :Rtype: ``str``</tt> </tt>
-<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">keep_bang_comments</tt><tt class="py-op">:</tt> </tt>
-<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">        <tt class="py-name">rex</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt> </tt>
-<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">            <tt class="py-string">r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]'</tt> </tt>
-<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">            <tt class="py-string">r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]'</tt> </tt>
-<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">            <tt class="py-string">r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?&lt;=[(,=:\[!&amp;|?'</tt> </tt>
-<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">            <tt class="py-string">r'{};\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*'</tt> </tt>
-<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line">            <tt class="py-string">r'][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\0'</tt> </tt>
-<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line">            <tt class="py-string">r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r'</tt> </tt>
-<a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line">            <tt class="py-string">r'\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r'</tt> </tt>
-<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">            <tt class="py-string">r'\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\014'</tt> </tt>
-<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">            <tt class="py-string">r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r'</tt> </tt>
-<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">            <tt class="py-string">r'\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:'</tt> </tt>
-<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">            <tt class="py-string">r'[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&amp;)+,.:;=?\]|}-]))?|(?&lt;=[\00'</tt> </tt>
-<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line">            <tt class="py-string">r'0-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\016-\040]|(?'</tt> </tt>
-<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">            <tt class="py-string">r':/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]'</tt> </tt>
-<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">            <tt class="py-string">r'))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*'</tt> </tt>
-<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line">            <tt class="py-string">r'\*+)*/))*)*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\['</tt> </tt>
-<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">            <tt class="py-string">r'[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))(('</tt> </tt>
-<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line">            <tt class="py-string">r'?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)'</tt> </tt>
-<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line">            <tt class="py-string">r'*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\04'</tt> </tt>
-<a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">            <tt class="py-string">r'0]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&amp;)+,.:;'</tt> </tt>
-<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line">            <tt class="py-string">r'=?\]|}-]))?|(?&lt;=[^\000-!#%&amp;(*,./:-@\[\\^`{|~])(?:[\000-\011\01'</tt> </tt>
-<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">            <tt class="py-string">r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?:'</tt> </tt>
-<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line">            <tt class="py-string">r'//[^\r\n]*)?[\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]'</tt> </tt>
-<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line">            <tt class="py-string">r'*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040"#%-\047)*,./:-@\\-^'</tt> </tt>
-<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line">            <tt class="py-string">r'`|-~])|(?&lt;=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\013\014\0'</tt> </tt>
-<a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line">            <tt class="py-string">r'16-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^\000-#%-,./'</tt> </tt>
-<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line">            <tt class="py-string">r':-@\[-^`{-~-])|(?&lt;=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*['</tt> </tt>
-<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line">            <tt class="py-string">r'^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=\+)|(?&lt;=-)((?:[\000-\011\013'</tt> </tt>
-<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line">            <tt class="py-string">r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:['</tt> </tt>
-<a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line">            <tt class="py-string">r'\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)'</tt> </tt>
-<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">            <tt class="py-string">r')+|(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]'</tt> </tt>
-<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line">            <tt class="py-string">r'|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+'</tt> </tt>
-<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line"> </tt>
-<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">subber</tt><tt class="py-op">(</tt><tt class="py-param">match</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line">            <tt class="py-docstring">""" Substitution callback """</tt> </tt>
-<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line">            <tt class="py-name">groups</tt> <tt class="py-op">=</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt> </tt>
-<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> <tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">"%s%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">6</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line">                <tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">8</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">9</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">10</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line">                <tt class="py-string">''</tt> </tt>
-<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line">            <tt class="py-op">)</tt> </tt>
-</div><a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line">        <tt class="py-name">rex</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt> </tt>
-<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line">            <tt class="py-string">r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]'</tt> </tt>
-<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line">            <tt class="py-string">r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]'</tt> </tt>
-<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line">            <tt class="py-string">r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?&lt;=[(,=:\[!&amp;|?'</tt> </tt>
-<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line">            <tt class="py-string">r'{};\r\n])((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/'</tt> </tt>
-<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line">            <tt class="py-string">r'*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013'</tt> </tt>
-<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line">            <tt class="py-string">r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?!'</tt> </tt>
-<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line">            <tt class="py-string">r'[\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^'</tt> </tt>
-<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line">            <tt class="py-string">r'\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\01'</tt> </tt>
-<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line">            <tt class="py-string">r'4\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^'</tt> </tt>
-<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">            <tt class="py-string">r'\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+('</tt> </tt>
-<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line">            <tt class="py-string">r'?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&amp;)+,.:;=?\]|}-]))?|(?&lt;=['</tt> </tt>
-<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line">            <tt class="py-string">r'\000-#%-,./:-@\[-^`{-~-]return)((?:[\000-\011\013\014\016-\040'</tt> </tt>
-<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">            <tt class="py-string">r']|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?['</tt> </tt>
-<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line">            <tt class="py-string">r'\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*]['</tt> </tt>
-<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line">            <tt class="py-string">r'^*]*\*+)*/))*)*)((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|'</tt> </tt>
-<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line">            <tt class="py-string">r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*'</tt> </tt>
-<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line">            <tt class="py-string">r'/))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]'</tt> </tt>
-<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line">            <tt class="py-string">r'*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\01'</tt> </tt>
-<a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line">            <tt class="py-string">r'6-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&amp;)'</tt> </tt>
-<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line">            <tt class="py-string">r'+,.:;=?\]|}-]))?|(?&lt;=[^\000-!#%&amp;(*,./:-@\[\\^`{|~])((?:[\000-'</tt> </tt>
-<a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line">            <tt class="py-string">r'\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:'</tt> </tt>
-<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">            <tt class="py-string">r'(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/'</tt> </tt>
-<a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line">            <tt class="py-string">r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)(?=[^\000-\040"#%-\047)*,./'</tt> </tt>
-<a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line">            <tt class="py-string">r':-@\\-^`|-~])|(?&lt;=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\01'</tt> </tt>
-<a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line">            <tt class="py-string">r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=[^\000'</tt> </tt>
-<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line">            <tt class="py-string">r'-#%-,./:-@\[-^`{-~-])|(?&lt;=\+)((?:[\000-\011\013\014\016-\040]|'</tt> </tt>
-<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line">            <tt class="py-string">r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=\+)|(?&lt;=-)((?:[\000-\0'</tt> </tt>
-<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line">            <tt class="py-string">r'11\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=-'</tt> </tt>
-<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line">            <tt class="py-string">r')|((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*'</tt> </tt>
-<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line">            <tt class="py-string">r'\*+)*/))+)|((?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014'</tt> </tt>
-<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line">            <tt class="py-string">r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)'</tt> </tt>
-<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line"> </tt>
-<a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line">        <tt class="py-name">keep</tt> <tt class="py-op">=</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-op">(</tt> </tt>
-<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line">            <tt class="py-string">r'[\000-\011\013\014\016-\040]+|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*'</tt> </tt>
-<a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line">            <tt class="py-string">r'\*+)*/)+|(?:(?://[^\r\n]*)?[\r\n])+|((?:/\*![^*]*\*+(?:[^/*][^'</tt> </tt>
-<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line">            <tt class="py-string">r'*]*\*+)*/)+)'</tt> </tt>
-<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line">        <tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">locals</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt> </tt>
-<a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line">        <tt class="py-name">keeper</tt> <tt class="py-op">=</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">m</tt><tt class="py-op">:</tt> <tt class="py-name">m</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt> </tt>
-<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line"> </tt>
-<a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">subber</tt><tt class="py-op">(</tt><tt class="py-param">match</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line">            <tt class="py-docstring">""" Substitution callback """</tt> </tt>
-<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line">            <tt class="py-name">groups</tt> <tt class="py-op">=</tt> <tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">groups</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-op">(</tt> </tt>
-<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line">                <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">"%s%s%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line">                    <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L478"></a><tt class="py-lineno">478</tt>  <tt class="py-line">                    <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line">                <tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">"%s%s%s%s%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">                    <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">6</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L484"></a><tt class="py-lineno">484</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">7</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line">                    <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">8</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line">                    <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">8</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'\n'</tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line">                <tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">9</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">9</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> <tt class="py-string">'\n'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">10</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">10</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">11</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">11</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">12</tt><tt class="py-op">]</tt> <tt class="py-keyword">and</tt> <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">12</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">' '</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> </tt>
-<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line">                <tt class="py-name">keep</tt><tt class="py-op">(</tt><tt class="py-name">keeper</tt><tt class="py-op">,</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">13</tt><tt class="py-op">]</tt> <tt class="py-keyword">or</tt> <tt class="py-name">groups</tt><tt class="py-op">[</tt><tt class="py-number">14</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line">            <tt class="py-op">)</tt> </tt>
-</div><a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line"> </tt>
-<a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">sub</tt><tt class="py-op">(</tt><tt class="py-name">rex</tt><tt class="py-op">,</tt> <tt class="py-name">subber</tt><tt class="py-op">,</tt> <tt class="py-string">'\n%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-name">script</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line"> </tt>
-<a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line"> </tt>
-<a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
-<a name="main"></a><div id="main-def"><a name="L499"></a><tt class="py-lineno">499</tt> <a class="py-toggle" href="#" id="main-toggle" onclick="return toggle('main');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="rjsmin-module.html#main">main</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="main-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="main-expanded"><a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line">        <tt class="py-docstring">""" Main """</tt> </tt>
-<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line">        <tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_sys</tt> </tt>
-<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line"> </tt>
-<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line">        <tt class="py-name">argv</tt> <tt class="py-op">=</tt> <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">argv</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
-<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line">        <tt class="py-name">keep_bang_comments</tt> <tt class="py-op">=</tt> <tt class="py-string">'-b'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">argv</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'-bp'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">argv</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'-pb'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">argv</tt> </tt>
-<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'-p'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">argv</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'-bp'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">argv</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'-pb'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">argv</tt><tt class="py-op">:</tt> </tt>
-<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line">            <tt class="py-name">xjsmin</tt> <tt class="py-op">=</tt> <tt class="py-name">_make_jsmin</tt><tt class="py-op">(</tt><tt class="py-name">python_only</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line">            <tt class="py-name">xjsmin</tt> <tt class="py-op">=</tt> <tt id="link-7" class="py-name"><a title="rjsmin.jsmin" class="py-name" href="#" onclick="return doclink('link-7', 'jsmin', 'link-4');">jsmin</a></tt> </tt>
-<a name="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line"> </tt>
-<a name="L510"></a><tt class="py-lineno">510</tt>  <tt class="py-line">        <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt class="py-name">xjsmin</tt><tt class="py-op">(</tt> </tt>
-<a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line">            <tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">stdin</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">keep_bang_comments</tt><tt class="py-op">=</tt><tt class="py-name">keep_bang_comments</tt> </tt>
-<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line">        <tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line"> </tt>
-<a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line">    <tt class="py-name">main</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
-       bgcolor="#a0c0ff" cellspacing="0">
-  <tr valign="middle">
-  <!-- Home link -->
-      <th bgcolor="#70b0f0" class="navbar-select"
-          >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Tree link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Index link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Help link -->
-      <th>&nbsp;&nbsp;&nbsp;<a
-        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
-  <!-- Project homepage -->
-      <th class="navbar" align="right" width="100%">
-        <table border="0" cellpadding="0" cellspacing="0">
-          <tr><th class="navbar" align="center"
-            ><a href="http://opensource.perlig.de/rjsmin/" target="_top">Visit rjsmin Online</a></th>
-          </tr></table></th>
-  </tr>
-</table>
-
-<script type="text/javascript">
-  <!--
-  // Private objects are initially displayed (because if
-  // javascript is turned off then we want them to be
-  // visible); but by default, we want to hide them.  So hide
-  // them unless we have a cookie that says to show them.
-  checkCookie();
-  // -->
-</script>
-</body>
-</html>
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/package.cfg b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/package.cfg
deleted file mode 100644
index 6093e82..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/package.cfg
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright 2009 - 2015
-# André Malo or his licensors, as applicable
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-[package]
-name = rjsmin
-
-python.min = 2.4
-pypy.min = 1.9
-pypy3.min = 2.4
-jython.min = 2.5
-
-version.number = 1.0.12
-
-author.name = André Malo
-author.email = nd@perlig.de
-#maintainer.name =
-#maintainer.email = 
-url.homepage = http://opensource.perlig.de/rjsmin/
-url.download = http://storage.perlig.de/rjsmin/
-
-
-[docs]
-meta.classifiers = docs/CLASSIFIERS
-meta.description = docs/DESCRIPTION
-meta.summary = docs/SUMMARY
-meta.provides = docs/PROVIDES
-meta.license = LICENSE
-meta.keywords =
-    Javascript
-    Minimization
-
-apidoc.dir = docs/apidoc
-apidoc.strip = 1
-#apidoc.ignore =
-
-#userdoc.dir = docs/userdoc
-#userdoc.strip = 1
-#userdoc.ignore =
-#    .buildinfo
-
-#examples.dir = docs/examples
-#examples.strip = 1
-#examples.ignore =
-
-#man =
-
-extra =
-    README.rst
-    docs/CHANGES
-    docs/BENCHMARKS
-
-
-[manifest]
-#packages.lib = .
-#packages.collect =
-modules = rjsmin
-
-#scripts =
-
-dist =
-    bench
-    bench.sh
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c
deleted file mode 100644
index aa77a88..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/*
- * Copyright 2011 - 2015
- * Andr\xe9 Malo or his licensors, as applicable
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "cext.h"
-EXT_INIT_FUNC;
-
-#define RJSMIN_DULL_BIT           (1 << 0)
-#define RJSMIN_PRE_REGEX_BIT      (1 << 1)
-#define RJSMIN_REGEX_DULL_BIT     (1 << 2)
-#define RJSMIN_REGEX_CC_DULL_BIT  (1 << 3)
-#define RJSMIN_ID_LIT_BIT         (1 << 4)
-#define RJSMIN_ID_LIT_O_BIT       (1 << 5)
-#define RJSMIN_ID_LIT_C_BIT       (1 << 6)
-#define RJSMIN_STRING_DULL_BIT    (1 << 7)
-#define RJSMIN_SPACE_BIT          (1 << 8)
-#define RJSMIN_POST_REGEX_OFF_BIT (1 << 9)
-
-#ifdef EXT3
-typedef Py_UNICODE rchar;
-#else
-typedef unsigned char rchar;
-#endif
-#define U(c) ((rchar)(c))
-
-#define RJSMIN_IS_DULL(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_DULL_BIT))
-
-#define RJSMIN_IS_REGEX_DULL(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_REGEX_DULL_BIT))
-
-#define RJSMIN_IS_REGEX_CC_DULL(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_REGEX_CC_DULL_BIT))
-
-#define RJSMIN_IS_STRING_DULL(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_STRING_DULL_BIT))
-
-#define RJSMIN_IS_ID_LITERAL(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_ID_LIT_BIT))
-
-#define RJSMIN_IS_ID_LITERAL_OPEN(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_ID_LIT_O_BIT))
-
-#define RJSMIN_IS_ID_LITERAL_CLOSE(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_ID_LIT_C_BIT))
-
-#define RJSMIN_IS_POST_REGEX_OFF(c) ((U(c) > 127) || \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_POST_REGEX_OFF_BIT))
-
-#define RJSMIN_IS_SPACE(c) ((U(c) <= 127) && \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_SPACE_BIT))
-
-#define RJSMIN_IS_PRE_REGEX_1(c) ((U(c) <= 127) && \
-    (rjsmin_charmask[U(c) & 0x7F] & RJSMIN_PRE_REGEX_BIT))
-
-
-static const unsigned short rjsmin_charmask[128] = {
-    396, 396, 396, 396, 396, 396, 396, 396,
-    396, 396,   2, 396, 396,   2, 396, 396,
-    396, 396, 396, 396, 396, 396, 396, 396,
-    396, 396, 396, 396, 396, 396, 396, 396,
-    396, 687, 588, 653, 765, 653, 143, 588,
-    687, 205, 653, 237, 143, 237, 141, 648,
-    765, 765, 765, 765, 765, 765, 765, 765,
-    765, 765, 143, 143, 653, 143, 653, 143,
-    653, 765, 765, 765, 765, 765, 765, 765,
-    765, 765, 765, 765, 765, 765, 765, 765,
-    765, 765, 765, 765, 765, 765, 765, 765,
-    765, 765, 765, 683, 513, 197, 653, 765,
-    653, 765, 765, 765, 765, 765, 765, 765,
-    765, 765, 765, 765, 765, 765, 765, 765,
-    765, 765, 765, 765, 765, 765, 765, 765,
-    765, 765, 765, 687, 143, 207, 653, 765
-};
-
-static Py_ssize_t
-rjsmin(const rchar *source, rchar *target, Py_ssize_t length,
-       int keep_bang_comments)
-{
-    const rchar *reset, *pcreset = NULL, *pctoken = NULL, *xtarget,
-                *sentinel = source + length;
-    rchar *tstart = target;
-    int post_regex = 0;
-    rchar c, quote, spaced = U(' ');
-
-    while (source < sentinel) {
-        c = *source++;
-        if (RJSMIN_IS_DULL(c)) {
-            if (post_regex) post_regex = 0;
-            if (pctoken) pctoken = NULL;
-            if (spaced == U('\n')) spaced = U(' ');
-
-            *target++ = c;
-            continue;
-        }
-        switch (c) {
-
-        /* String */
-        case U('\''): case U('"'):
-            if (post_regex) post_regex = 0;
-            if (pctoken) pctoken = NULL;
-            if (spaced == U('\n')) spaced = U(' ');
-
-            reset = source;
-            *target++ = quote = c;
-            while (source < sentinel) {
-                c = *source++;
-                *target++ = c;
-                if (RJSMIN_IS_STRING_DULL(c))
-                    continue;
-                switch (c) {
-                case U('\''): case U('"'):
-                    if (c == quote)
-                        goto cont;
-                    continue;
-                case U('\\'):
-                    if (source < sentinel) {
-                        c = *source++;
-                        *target++ = c;
-                        if (c == U('\r') && source < sentinel
-                            && *source == U('\n'))
-                            *target++ = *source++;
-                    }
-                    continue;
-                }
-                break;
-            }
-            target -= source - reset;
-            source = reset;
-            continue;
-
-        /* Comment or Regex or something else entirely */
-        case U('/'):
-            if (!(source < sentinel)) {
-                if (post_regex) post_regex = 0;
-                if (pctoken) pctoken = NULL;
-                if (spaced == U('\n')) spaced = U(' ');
-
-                *target++ = c;
-            }
-            else {
-                switch (*source) {
-            /* Comment */
-                case U('*'): case U('/'):
-                    goto skip_or_copy_ws;
-
-                default:
-                    xtarget = NULL;
-                    if (   target == tstart
-                        || RJSMIN_IS_PRE_REGEX_1(*((pctoken ? pctoken : target)
-                                                   - 1))
-                        || (
-                            (xtarget = pctoken ? pctoken : target)
-                            && (xtarget - tstart >= 6)
-                            && *(xtarget - 1) == U('n')
-                            && *(xtarget - 2) == U('r')
-                            && *(xtarget - 3) == U('u')
-                            && *(xtarget - 4) == U('t')
-                            && *(xtarget - 5) == U('e')
-                            && *(xtarget - 6) == U('r')
-                            && (
-                                   xtarget - tstart == 6
-                                || !RJSMIN_IS_ID_LITERAL(*(xtarget - 7))
-                            )
-                        )) {
-
-            /* Regex */
-                        if (post_regex) post_regex = 0;
-                        if (pctoken) pctoken = NULL;
-
-                        reset = source;
-                        if (spaced == U('\n')) {
-                            spaced = U(' ');
-                            if (xtarget)
-                                *target++ = U('\n');
-                        }
-
-                        *target++ = U('/');
-                        while (source < sentinel) {
-                            c = *source++;
-                            *target++ = c;
-                            if (RJSMIN_IS_REGEX_DULL(c))
-                                continue;
-                            switch (c) {
-                            case U('/'):
-                                post_regex = 1;
-                                goto cont;
-                            case U('\\'):
-                                if (source < sentinel) {
-                                    c = *source++;
-                                    *target++ = c;
-                                    if (c == U('\r') || c == U('\n'))
-                                        break;
-                                }
-                                continue;
-                            case U('['):
-                                while (source < sentinel) {
-                                    c = *source++;
-                                    *target++ = c;
-                                    if (RJSMIN_IS_REGEX_CC_DULL(c))
-                                        continue;
-                                    switch (c) {
-                                    case U('\\'):
-                                        if (source < sentinel) {
-                                            c = *source++;
-                                            *target++ = c;
-                                            if (c == U('\r') || c == U('\n'))
-                                                break;
-                                        }
-                                        continue;
-                                    case U(']'):
-                                        goto cont_regex;
-                                    }
-                                }
-                                break;
-                            }
-                            break;
-                        cont_regex:
-                            continue;
-                        }
-                        target -= source - reset;
-                        source = reset;
-                    }
-                    else {
-            /* Just a slash */
-                        if (post_regex) post_regex = 0;
-                        if (pctoken) pctoken = NULL;
-                        if (spaced == U('\n')) spaced = U(' ');
-
-                        *target++ = c;
-                    }
-                    continue;
-                }
-            }
-            continue;
-
-        /* Whitespace */
-        default:
-        skip_or_copy_ws:
-            quote = U(' ');
-            --source;
-            while (source < sentinel) {
-                c = *source++;
-                if (RJSMIN_IS_SPACE(c))
-                    continue;
-                switch (c) {
-                case U('\r'): case U('\n'):
-                    quote = U('\n');
-                    continue;
-                case U('/'):
-                    if (source < sentinel) {
-                        switch (*source) {
-                        case U('*'):
-                            reset = source++;
-                            /* copy bang comment, if requested */
-                            if (   keep_bang_comments && source < sentinel
-                                && *source == U('!')) {
-                                if (!pctoken) {
-                                    pctoken = target;
-                                    pcreset = reset;
-                                }
-
-                                *target++ = U('/');
-                                *target++ = U('*');
-                                *target++ = *source++;
-                                while (source < sentinel) {
-                                    c = *source++;
-                                    *target++ = c;
-                                    if (c == U('*') && source < sentinel
-                                        && *source == U('/')) {
-                                        *target++ = *source++;
-                                        reset = NULL;
-                                        break;
-                                    }
-                                }
-                                if (!reset)
-                                    continue;
-
-                                target -= source - reset;
-                                source = reset;
-                                if (pcreset == reset) {
-                                    pctoken = NULL;
-                                    pcreset = NULL;
-                                }
-
-                            }
-                            /* strip regular comment */
-                            else {
-                                while (source < sentinel) {
-                                    c = *source++;
-                                    if (c == U('*') && source < sentinel
-                                        && *source == U('/')) {
-                                        ++source;
-                                        reset = NULL;
-                                        break;
-                                    }
-                                }
-                                if (!reset)
-                                    continue;
-                                source = reset;
-                                *target++ = U('/');
-                            }
-                            goto cont;
-                        case U('/'):
-                            ++source;
-                            while (source < sentinel) {
-                                c = *source++;
-                                switch (c) {
-                                case U('\n'):
-                                    break;
-                                case U('\r'):
-                                    if (source < sentinel
-                                        && *source == U('\n'))
-                                        ++source;
-                                    break;
-                                default:
-                                    continue;
-                                }
-                                break;
-                            }
-                            quote = U('\n');
-                            continue;
-                        }
-                    }
-                }
-                --source;
-                break;
-            }
-
-            if ((tstart < (pctoken ? pctoken : target) && source < sentinel)
-                && ((quote == U('\n')
-                     && ((RJSMIN_IS_ID_LITERAL_CLOSE(*((pctoken ?
-                                                        pctoken : target) - 1))
-                          && RJSMIN_IS_ID_LITERAL_OPEN(*source))
-                         || (post_regex
-                             && RJSMIN_IS_POST_REGEX_OFF(*source)
-                             && !(post_regex = 0))))
-                    ||
-                    (quote == U(' ') && !pctoken
-                     && ((RJSMIN_IS_ID_LITERAL(*(target - 1))
-                          && RJSMIN_IS_ID_LITERAL(*source))
-                         || (source < sentinel
-                             && ((*(target - 1) == U('+')
-                                  && *source == U('+'))
-                                 || (*(target - 1) == U('-')
-                                     && *source == U('-')))))))) {
-                *target++ = quote;
-            }
-
-            pcreset = NULL;
-            spaced = quote;
-        }
-    cont:
-        continue;
-    }
-    return (Py_ssize_t)(target - tstart);
-}
-
-
-PyDoc_STRVAR(rjsmin_jsmin__doc__,
-"jsmin(script, keep_bang_comments=False)\n\
-\n\
-Minify javascript based on `jsmin.c by Douglas Crockford`_\\.\n\
-\n\
-Instead of parsing the stream char by char, it uses a regular\n\
-expression approach which minifies the whole script with one big\n\
-substitution regex.\n\
-\n\
-.. _jsmin.c by Douglas Crockford:\n\
-   http://www.crockford.com/javascript/jsmin.c\n\
-\n\
-:Note: This is a hand crafted C implementation built on the regex\n\
-       semantics.\n\
-\n\
-:Parameters:\n\
-  `script` : ``str``\n\
-    Script to minify\n\
-\n\
-  `keep_bang_comments` : ``bool``\n\
-    Keep comments starting with an exclamation mark? (``/*!...*/``)\n\
-\n\
-:Return: Minified script\n\
-:Rtype: ``str``");
-
-static PyObject *
-rjsmin_jsmin(PyObject *self, PyObject *args, PyObject *kwds)
-{
-    PyObject *script, *keep_bang_comments_ = NULL, *result;
-    static char *kwlist[] = {"script", "keep_bang_comments", NULL};
-    Py_ssize_t slength, length;
-    int keep_bang_comments;
-#ifdef EXT2
-    int uni;
-#define UOBJ "O"
-#endif
-#ifdef EXT3
-#define UOBJ "U"
-#endif
-
-    if (!PyArg_ParseTupleAndKeywords(args, kwds, UOBJ "|O", kwlist,
-                                     &script, &keep_bang_comments_))
-        return NULL;
-
-    if (!keep_bang_comments_)
-        keep_bang_comments = 0;
-    else {
-        keep_bang_comments = PyObject_IsTrue(keep_bang_comments_);
-        if (keep_bang_comments == -1)
-            return NULL;
-    }
-
-#ifdef EXT2
-    if (PyUnicode_Check(script)) {
-        if (!(script = PyUnicode_AsUTF8String(script)))
-            return NULL;
-        uni = 1;
-    }
-    else {
-        if (!(script = PyObject_Str(script)))
-            return NULL;
-        uni = 0;
-    }
-#endif
-
-#ifdef EXT3
-    Py_INCREF(script);
-#define PyString_GET_SIZE PyUnicode_GET_SIZE
-#define PyString_AS_STRING PyUnicode_AS_UNICODE
-#define _PyString_Resize PyUnicode_Resize
-#define PyString_FromStringAndSize PyUnicode_FromUnicode
-#endif
-
-    slength = PyString_GET_SIZE(script);
-    if (!(result = PyString_FromStringAndSize(NULL, slength))) {
-        Py_DECREF(script);
-        return NULL;
-    }
-    Py_BEGIN_ALLOW_THREADS
-    length = rjsmin((rchar *)PyString_AS_STRING(script),
-                    (rchar *)PyString_AS_STRING(result),
-                    slength, keep_bang_comments);
-    Py_END_ALLOW_THREADS
-
-    Py_DECREF(script);
-    if (length < 0) {
-        Py_DECREF(result);
-        return NULL;
-    }
-    if (length != slength && _PyString_Resize(&result, length) == -1)
-        return NULL;
-
-#ifdef EXT2
-    if (uni) {
-        script = PyUnicode_DecodeUTF8(PyString_AS_STRING(result),
-                                      PyString_GET_SIZE(result), "strict");
-        Py_DECREF(result);
-        if (!script)
-            return NULL;
-        result = script;
-    }
-#endif
-    return result;
-}
-
-/* ------------------------ BEGIN MODULE DEFINITION ------------------------ */
-
-EXT_METHODS = {
-    {"jsmin",
-        (PyCFunction)rjsmin_jsmin, METH_VARARGS | METH_KEYWORDS,
-        rjsmin_jsmin__doc__},
-
-    {NULL}  /* Sentinel */
-};
-
-PyDoc_STRVAR(EXT_DOCS_VAR,
-"C implementation of rjsmin\n\
-==========================\n\
-\n\
-C implementation of rjsmin.");
-
-
-EXT_DEFINE(EXT_MODULE_NAME, EXT_METHODS_VAR, EXT_DOCS_VAR);
-
-EXT_INIT_FUNC {
-    PyObject *m;
-
-    /* Create the module and populate stuff */
-    if (!(m = EXT_CREATE(&EXT_DEFINE_VAR)))
-        EXT_INIT_ERROR(NULL);
-
-    EXT_ADD_UNICODE(m, "__author__", "Andr\xe9 Malo", "latin-1");
-    EXT_ADD_STRING(m, "__docformat__", "restructuredtext en");
-
-    EXT_INIT_RETURN(m);
-}
-
-/* ------------------------- END MODULE DEFINITION ------------------------- */
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py
deleted file mode 100755
index 54e20ec..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/rjsmin.py
+++ /dev/null
@@ -1,515 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-r"""
-=====================
- Javascript Minifier
-=====================
-
-rJSmin is a javascript minifier written in python.
-
-The minifier is based on the semantics of `jsmin.c by Douglas Crockford`_\\.
-
-:Copyright:
-
- Copyright 2011 - 2015
- Andr\xe9 Malo or his licensors, as applicable
-
-:License:
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-The module is a re-implementation aiming for speed, so it can be used at
-runtime (rather than during a preprocessing step). Usually it produces the
-same results as the original ``jsmin.c``. It differs in the following ways:
-
-- there is no error detection: unterminated string, regex and comment
-  literals are treated as regular javascript code and minified as such.
-- Control characters inside string and regex literals are left untouched; they
-  are not converted to spaces (nor to \\n)
-- Newline characters are not allowed inside string and regex literals, except
-  for line continuations in string literals (ECMA-5).
-- "return /regex/" is recognized correctly.
-- Line terminators after regex literals are handled more sensibly
-- "+ +" and "- -" sequences are not collapsed to '++' or '--'
-- Newlines before ! operators are removed more sensibly
-- Comments starting with an exclamation mark (``!``) can be kept optionally
-- rJSmin does not handle streams, but only complete strings. (However, the
-  module provides a "streamy" interface).
-
-Since most parts of the logic are handled by the regex engine it's way faster
-than the original python port of ``jsmin.c`` by Baruch Even. The speed factor
-varies between about 6 and 55 depending on input and python version (it gets
-faster the more compressed the input already is). Compared to the
-speed-refactored python port by Dave St.Germain the performance gain is less
-dramatic but still between 3 and 50 (for huge inputs). See the docs/BENCHMARKS
-file for details.
-
-rjsmin.c is a reimplementation of rjsmin.py in C and speeds it up even more.
-
-Both python 2 and python 3 are supported.
-
-.. _jsmin.c by Douglas Crockford:
-   http://www.crockford.com/javascript/jsmin.c
-"""
-if __doc__:
-    # pylint: disable = redefined-builtin
-    __doc__ = __doc__.encode('ascii').decode('unicode_escape')
-__author__ = r"Andr\xe9 Malo".encode('ascii').decode('unicode_escape')
-__docformat__ = "restructuredtext en"
-__license__ = "Apache License, Version 2.0"
-__version__ = '1.0.12'
-__all__ = ['jsmin']
-
-import re as _re
-
-
-def _make_jsmin(python_only=False):
-    """
-    Generate JS minifier based on `jsmin.c by Douglas Crockford`_
-
-    .. _jsmin.c by Douglas Crockford:
-       http://www.crockford.com/javascript/jsmin.c
-
-    :Parameters:
-      `python_only` : ``bool``
-        Use only the python variant. If true, the c extension is not even
-        tried to be loaded.
-
-    :Return: Minifier
-    :Rtype: ``callable``
-    """
-    # pylint: disable = unused-variable
-    # pylint: disable = too-many-locals
-
-    if not python_only:
-        try:
-            import _rjsmin
-        except ImportError:
-            pass
-        else:
-            return _rjsmin.jsmin
-    try:
-        xrange
-    except NameError:
-        xrange = range  # pylint: disable = redefined-builtin
-
-    space_chars = r'[\000-\011\013\014\016-\040]'
-
-    line_comment = r'(?://[^\r\n]*)'
-    space_comment = r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)'
-    space_comment_nobang = r'(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*\*+)*/)'
-    bang_comment = r'(?:/\*![^*]*\*+(?:[^/*][^*]*\*+)*/)'
-
-    string1 = \
-        r'(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^\047\\\r\n]*)*\047)'
-    string2 = r'(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]|\r?\n|\r)[^"\\\r\n]*)*")'
-    string3 = r'(?:`(?:[^`\\]|\\.)*`)'
-    strings = r'(?:%s|%s|%s)' % (string1, string2, string3)
-
-    charclass = r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\])'
-    nospecial = r'[^/\\\[\r\n]'
-    regex = r'(?:/(?![\r\n/*])%s*(?:(?:\\[^\r\n]|%s)%s*)*/)' % (
-        nospecial, charclass, nospecial
-    )
-    space = r'(?:%s|%s)' % (space_chars, space_comment)
-    newline = r'(?:%s?[\r\n])' % line_comment
-
-    def fix_charclass(result):
-        """ Fixup string of chars to fit into a regex char class """
-        pos = result.find('-')
-        if pos >= 0:
-            result = r'%s%s-' % (result[:pos], result[pos + 1:])
-
-        def sequentize(string):
-            """
-            Notate consecutive characters as sequence
-
-            (1-4 instead of 1234)
-            """
-            first, last, result = None, None, []
-            for char in map(ord, string):
-                if last is None:
-                    first = last = char
-                elif last + 1 == char:
-                    last = char
-                else:
-                    result.append((first, last))
-                    first = last = char
-            if last is not None:
-                result.append((first, last))
-            return ''.join(['%s%s%s' % (
-                chr(first),
-                last > first + 1 and '-' or '',
-                last != first and chr(last) or ''
-            ) for first, last in result])  # noqa
-
-        return _re.sub(
-            r'([\000-\040\047])',  # \047 for better portability
-            lambda m: '\\%03o' % ord(m.group(1)), (
-                sequentize(result)
-                .replace('\\', '\\\\')
-                .replace('[', '\\[')
-                .replace(']', '\\]')
-            )
-        )
-
-    def id_literal_(what):
-        """ Make id_literal like char class """
-        match = _re.compile(what).match
-        result = ''.join([
-            chr(c) for c in xrange(127) if not match(chr(c))
-        ])
-        return '[^%s]' % fix_charclass(result)
-
-    def not_id_literal_(keep):
-        """ Make negated id_literal like char class """
-        match = _re.compile(id_literal_(keep)).match
-        result = ''.join([
-            chr(c) for c in xrange(127) if not match(chr(c))
-        ])
-        return r'[%s]' % fix_charclass(result)
-
-    not_id_literal = not_id_literal_(r'[a-zA-Z0-9_$]')
-    preregex1 = r'[(,=:\[!&|?{};\r\n]'
-    preregex2 = r'%(not_id_literal)sreturn' % locals()
-
-    id_literal = id_literal_(r'[a-zA-Z0-9_$]')
-    id_literal_open = id_literal_(r'[a-zA-Z0-9_${\[(!+-]')
-    id_literal_close = id_literal_(r'[a-zA-Z0-9_$}\])"\047+-]')
-    post_regex_off = id_literal_(r'[^\000-\040}\])?:|,;.&=+-]')
-
-    dull = r'[^\047"`/\000-\040]'
-
-    space_sub_simple = _re.compile((
-        # noqa pylint: disable = bad-continuation
-
-        r'(%(dull)s+)'                                         # 0
-        r'|(%(strings)s%(dull)s*)'                             # 1
-        r'|(?<=%(preregex1)s)'
-            r'%(space)s*(?:%(newline)s%(space)s*)*'
-            r'(%(regex)s)'                                     # 2
-            r'(%(space)s*(?:%(newline)s%(space)s*)+'           # 3
-                r'(?=%(post_regex_off)s))?'
-        r'|(?<=%(preregex2)s)'
-            r'%(space)s*(?:(%(newline)s)%(space)s*)*'          # 4
-            r'(%(regex)s)'                                     # 5
-            r'(%(space)s*(?:%(newline)s%(space)s*)+'           # 6
-                r'(?=%(post_regex_off)s))?'
-        r'|(?<=%(id_literal_close)s)'
-            r'%(space)s*(?:(%(newline)s)%(space)s*)+'          # 7
-            r'(?=%(id_literal_open)s)'
-        r'|(?<=%(id_literal)s)(%(space)s)+(?=%(id_literal)s)'  # 8
-        r'|(?<=\+)(%(space)s)+(?=\+)'                          # 9
-        r'|(?<=-)(%(space)s)+(?=-)'                            # 10
-        r'|%(space)s+'
-        r'|(?:%(newline)s%(space)s*)+'
-    ) % locals()).sub
-
-    # print space_sub_simple.__self__.pattern
-
-    def space_subber_simple(match):
-        """ Substitution callback """
-        # pylint: disable = too-many-return-statements
-
-        groups = match.groups()
-        if groups[0]:
-            return groups[0]
-        elif groups[1]:
-            return groups[1]
-        elif groups[2]:
-            if groups[3]:
-                return groups[2] + '\n'
-            return groups[2]
-        elif groups[5]:
-            return "%s%s%s" % (
-                groups[4] and '\n' or '',
-                groups[5],
-                groups[6] and '\n' or '',
-            )
-        elif groups[7]:
-            return '\n'
-        elif groups[8] or groups[9] or groups[10]:
-            return ' '
-        else:
-            return ''
-
-    space_sub_banged = _re.compile((
-        # noqa pylint: disable = bad-continuation
-
-        r'(%(dull)s+)'                                         # 0
-        r'|(%(strings)s%(dull)s*)'                             # 1
-        r'|(?<=%(preregex1)s)'
-            r'(%(space)s*(?:%(newline)s%(space)s*)*)'          # 2
-            r'(%(regex)s)'                                     # 3
-            r'(%(space)s*(?:%(newline)s%(space)s*)+'           # 4
-                r'(?=%(post_regex_off)s))?'
-        r'|(?<=%(preregex2)s)'
-            r'(%(space)s*(?:(%(newline)s)%(space)s*)*)'        # 5, 6
-            r'(%(regex)s)'                                     # 7
-            r'(%(space)s*(?:%(newline)s%(space)s*)+'           # 8
-                r'(?=%(post_regex_off)s))?'
-        r'|(?<=%(id_literal_close)s)'
-            r'(%(space)s*(?:%(newline)s%(space)s*)+)'          # 9
-            r'(?=%(id_literal_open)s)'
-        r'|(?<=%(id_literal)s)(%(space)s+)(?=%(id_literal)s)'  # 10
-        r'|(?<=\+)(%(space)s+)(?=\+)'                          # 11
-        r'|(?<=-)(%(space)s+)(?=-)'                            # 12
-        r'|(%(space)s+)'                                       # 13
-        r'|((?:%(newline)s%(space)s*)+)'                       # 14
-    ) % locals()).sub
-
-    # print space_sub_banged.__self__.pattern
-
-    keep = _re.compile((
-        r'%(space_chars)s+|%(space_comment_nobang)s+|%(newline)s+'
-        r'|(%(bang_comment)s+)'
-    ) % locals()).sub
-    keeper = lambda m: m.groups()[0] or ''
-
-    # print keep.__self__.pattern
-
-    def space_subber_banged(match):
-        """ Substitution callback """
-        # pylint: disable = too-many-return-statements
-
-        groups = match.groups()
-        if groups[0]:
-            return groups[0]
-        elif groups[1]:
-            return groups[1]
-        elif groups[3]:
-            return "%s%s%s%s" % (
-                keep(keeper, groups[2]),
-                groups[3],
-                keep(keeper, groups[4] or ''),
-                groups[4] and '\n' or '',
-            )
-        elif groups[7]:
-            return "%s%s%s%s%s" % (
-                keep(keeper, groups[5]),
-                groups[6] and '\n' or '',
-                groups[7],
-                keep(keeper, groups[8] or ''),
-                groups[8] and '\n' or '',
-            )
-        elif groups[9]:
-            return keep(keeper, groups[9]) + '\n'
-        elif groups[10] or groups[11] or groups[12]:
-            return keep(keeper, groups[10] or groups[11] or groups[12]) or ' '
-        else:
-            return keep(keeper, groups[13] or groups[14])
-
-    def jsmin(script, keep_bang_comments=False):
-        r"""
-        Minify javascript based on `jsmin.c by Douglas Crockford`_\.
-
-        Instead of parsing the stream char by char, it uses a regular
-        expression approach which minifies the whole script with one big
-        substitution regex.
-
-        .. _jsmin.c by Douglas Crockford:
-           http://www.crockford.com/javascript/jsmin.c
-
-        :Parameters:
-          `script` : ``str``
-            Script to minify
-
-          `keep_bang_comments` : ``bool``
-            Keep comments starting with an exclamation mark? (``/*!...*/``)
-
-        :Return: Minified script
-        :Rtype: ``str``
-        """
-        # pylint: disable = redefined-outer-name
-
-        if keep_bang_comments:
-            return space_sub_banged(
-                space_subber_banged, '\n%s\n' % script
-            ).strip()
-        else:
-            return space_sub_simple(
-                space_subber_simple, '\n%s\n' % script
-            ).strip()
-
-    return jsmin
-
-jsmin = _make_jsmin()
-
-
-def jsmin_for_posers(script, keep_bang_comments=False):
-    r"""
-    Minify javascript based on `jsmin.c by Douglas Crockford`_\.
-
-    Instead of parsing the stream char by char, it uses a regular
-    expression approach which minifies the whole script with one big
-    substitution regex.
-
-    .. _jsmin.c by Douglas Crockford:
-       http://www.crockford.com/javascript/jsmin.c
-
-    :Warning: This function is the digest of a _make_jsmin() call. It just
-              utilizes the resulting regexes. It's here for fun and may
-              vanish any time. Use the `jsmin` function instead.
-
-    :Parameters:
-      `script` : ``str``
-        Script to minify
-
-      `keep_bang_comments` : ``bool``
-        Keep comments starting with an exclamation mark? (``/*!...*/``)
-
-    :Return: Minified script
-    :Rtype: ``str``
-    """
-    if not keep_bang_comments:
-        rex = (
-            r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]'
-            r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]'
-            r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?'
-            r'{};\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*'
-            r'][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\0'
-            r'14\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*((?:/(?![\r'
-            r'\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^\r'
-            r'\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\014'
-            r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^\r'
-            r'\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:'
-            r'[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=[\00'
-            r'0-#%-,./:-@\[-^`{-~-]return)(?:[\000-\011\013\014\016-\040]|(?'
-            r':/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?[\r\n]'
-            r'))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*'
-            r'\*+)*/))*)*((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\['
-            r'[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))(('
-            r'?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)'
-            r'*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\04'
-            r'0]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;'
-            r'=?\]|}-]))?|(?<=[^\000-!#%&(*,./:-@\[\\^`{|~])(?:[\000-\011\01'
-            r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?:'
-            r'//[^\r\n]*)?[\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]'
-            r'*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040"#%-\047)*,./:-@\\-^'
-            r'`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\013\014\0'
-            r'16-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=[^\000-#%-,./'
-            r':-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|(?:/\*['
-            r'^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=\+)|(?<=-)((?:[\000-\011\013'
-            r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)))+(?=-)|(?:['
-            r'\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/)'
-            r')+|(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]'
-            r'|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+'
-        )
-
-        def subber(match):
-            """ Substitution callback """
-            groups = match.groups()
-            return (
-                groups[0] or
-                groups[1] or
-                (groups[3] and (groups[2] + '\n')) or
-                groups[2] or
-                (groups[5] and "%s%s%s" % (
-                    groups[4] and '\n' or '',
-                    groups[5],
-                    groups[6] and '\n' or '',
-                )) or
-                (groups[7] and '\n') or
-                (groups[8] and ' ') or
-                (groups[9] and ' ') or
-                (groups[10] and ' ') or
-                ''
-            )
-    else:
-        rex = (
-            r'([^\047"/\000-\040]+)|((?:(?:\047[^\047\\\r\n]*(?:\\(?:[^\r\n]'
-            r'|\r?\n|\r)[^\047\\\r\n]*)*\047)|(?:"[^"\\\r\n]*(?:\\(?:[^\r\n]'
-            r'|\r?\n|\r)[^"\\\r\n]*)*"))[^\047"/\000-\040]*)|(?<=[(,=:\[!&|?'
-            r'{};\r\n])((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/'
-            r'*][^*]*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013'
-            r'\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)*)((?:/(?!'
-            r'[\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|(?:\[[^\\\]\r\n]*(?:\\[^'
-            r'\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*/))((?:[\000-\011\013\01'
-            r'4\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:(?:(?://[^'
-            r'\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+('
-            r'?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)+,.:;=?\]|}-]))?|(?<=['
-            r'\000-#%-,./:-@\[-^`{-~-]return)((?:[\000-\011\013\014\016-\040'
-            r']|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:((?:(?://[^\r\n]*)?['
-            r'\r\n]))(?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*]['
-            r'^*]*\*+)*/))*)*)((?:/(?![\r\n/*])[^/\\\[\r\n]*(?:(?:\\[^\r\n]|'
-            r'(?:\[[^\\\]\r\n]*(?:\\[^\r\n][^\\\]\r\n]*)*\]))[^/\\\[\r\n]*)*'
-            r'/))((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]'
-            r'*\*+)*/))*(?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\01'
-            r'6-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+(?=[^\000-\040&)'
-            r'+,.:;=?\]|}-]))?|(?<=[^\000-!#%&(*,./:-@\[\\^`{|~])((?:[\000-'
-            r'\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*(?:'
-            r'(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014\016-\040]|(?:/'
-            r'\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)(?=[^\000-\040"#%-\047)*,./'
-            r':-@\\-^`|-~])|(?<=[^\000-#%-,./:-@\[-^`{-~-])((?:[\000-\011\01'
-            r'3\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=[^\000'
-            r'-#%-,./:-@\[-^`{-~-])|(?<=\+)((?:[\000-\011\013\014\016-\040]|'
-            r'(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=\+)|(?<=-)((?:[\000-\0'
-            r'11\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))+)(?=-'
-            r')|((?:[\000-\011\013\014\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*'
-            r'\*+)*/))+)|((?:(?:(?://[^\r\n]*)?[\r\n])(?:[\000-\011\013\014'
-            r'\016-\040]|(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/))*)+)'
-        )
-
-        keep = _re.compile((
-            r'[\000-\011\013\014\016-\040]+|(?:/\*(?!!)[^*]*\*+(?:[^/*][^*]*'
-            r'\*+)*/)+|(?:(?://[^\r\n]*)?[\r\n])+|((?:/\*![^*]*\*+(?:[^/*][^'
-            r'*]*\*+)*/)+)'
-        ) % locals()).sub
-        keeper = lambda m: m.groups()[0] or ''
-
-        def subber(match):
-            """ Substitution callback """
-            groups = match.groups()
-            return (
-                groups[0] or
-                groups[1] or
-                (groups[3] and "%s%s%s%s" % (
-                    keep(keeper, groups[2]),
-                    groups[3],
-                    keep(keeper, groups[4] or ''),
-                    groups[4] and '\n' or '',
-                )) or
-                (groups[7] and "%s%s%s%s%s" % (
-                    keep(keeper, groups[5]),
-                    groups[6] and '\n' or '',
-                    groups[7],
-                    keep(keeper, groups[8] or ''),
-                    groups[8] and '\n' or '',
-                )) or
-                (groups[9] and keep(keeper, groups[9] + '\n')) or
-                (groups[10] and keep(keeper, groups[10]) or ' ') or
-                (groups[11] and keep(keeper, groups[11]) or ' ') or
-                (groups[12] and keep(keeper, groups[12]) or ' ') or
-                keep(keeper, groups[13] or groups[14])
-            )
-
-    return _re.sub(rex, subber, '\n%s\n' % script).strip()
-
-
-if __name__ == '__main__':
-    def main():
-        """ Main """
-        import sys as _sys
-
-        argv = _sys.argv[1:]
-        keep_bang_comments = '-b' in argv or '-bp' in argv or '-pb' in argv
-        if '-p' in argv or '-bp' in argv or '-pb' in argv:
-            xjsmin = _make_jsmin(python_only=True)
-        else:
-            xjsmin = jsmin
-
-        _sys.stdout.write(xjsmin(
-            _sys.stdin.read(), keep_bang_comments=keep_bang_comments
-        ))
-
-    main()
diff --git a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/setup.py b/systrace/catapult/common/py_vulcanize/third_party/rjsmin/setup.py
deleted file mode 100644
index d281913..0000000
--- a/systrace/catapult/common/py_vulcanize/third_party/rjsmin/setup.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: ascii -*-
-#
-# Copyright 2006 - 2013
-# Andr\xe9 Malo or his licensors, as applicable
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import sys as _sys
-from _setup import run
-
-
-def setup(args=None, _manifest=0):
-    """ Main setup function """
-    from _setup.ext import Extension
-
-    if 'java' in _sys.platform.lower():
-        # no c extension for jython
-        ext = None
-    else:
-        ext=[Extension('_rjsmin', sources=['rjsmin.c'])]
-
-    return run(script_args=args, ext=ext, manifest_only=_manifest)
-
-
-def manifest():
-    """ Create List of packaged files """
-    return setup((), _manifest=1)
-
-
-if __name__ == '__main__':
-    setup()
diff --git a/systrace/catapult/dependency_manager/PRESUBMIT.py b/systrace/catapult/dependency_manager/PRESUBMIT.py
deleted file mode 100644
index a34480c..0000000
--- a/systrace/catapult/dependency_manager/PRESUBMIT.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-def CheckChangeOnUpload(input_api, output_api):
-  return _CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
-  return _CommonChecks(input_api, output_api)
-
-
-def _CommonChecks(input_api, output_api):
-  results = []
-  results += input_api.RunTests(input_api.canned_checks.GetPylint(
-      input_api, output_api, extra_paths_list=_GetPathsToPrepend(input_api),
-      pylintrc='pylintrc'))
-  return results
-
-
-def _GetPathsToPrepend(input_api):
-  project_dir = input_api.PresubmitLocalPath()
-  catapult_dir = input_api.os_path.join(project_dir, '..')
-  return [
-      project_dir,
-
-      input_api.os_path.join(catapult_dir, 'common', 'py_utils'),
-
-      input_api.os_path.join(catapult_dir, 'third_party', 'mock'),
-      input_api.os_path.join(catapult_dir, 'third_party', 'pyfakefs'),
-  ]
diff --git a/systrace/catapult/dependency_manager/bin/run_tests b/systrace/catapult/dependency_manager/bin/run_tests
deleted file mode 100755
index 9a87bd6..0000000
--- a/systrace/catapult/dependency_manager/bin/run_tests
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Runs all Python unit tests in dependency_manager/."""
-
-import os
-import sys
-
-_CATAPULT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-
-sys.path.append(os.path.join(_CATAPULT, 'third_party', 'mock'))
-
-
-def main():
-  sys.path.append(_CATAPULT)
-
-  from hooks import install
-  if '--no-install-hooks' in sys.argv:
-    sys.argv.remove('--no-install-hooks')
-  else:
-    install.InstallHooks()
-
-  from catapult_build import run_with_typ
-  return run_with_typ.Run(
-      os.path.join(_CATAPULT, 'dependency_manager'), path=[_CATAPULT])
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/dependency_manager/bin/update b/systrace/catapult/dependency_manager/bin/update
deleted file mode 100755
index c2ca1df..0000000
--- a/systrace/catapult/dependency_manager/bin/update
+++ /dev/null
@@ -1,37 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import os
-import sys
-
-sys.path.append(
-    os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-from dependency_manager import base_config
-
-
-def UpdateDependency(dependency, platform, path, config):
-  c = base_config.BaseConfig(config, writable=True)
-  c.AddCloudStorageDependencyUpdateJob(
-      dependency, platform, path, version=None, execute_job=True)
-
-
-def main(raw_args):
-  parser = argparse.ArgumentParser()
-  parser.add_argument('--config', required=True, type=os.path.realpath,
-                      help='Path to the dependency configuration file.')
-  parser.add_argument('--dependency', required=True,
-                      help='Dependency name.')
-  parser.add_argument('--path', required=True, type=os.path.realpath,
-                      help='Path to the new dependency.')
-  parser.add_argument('--platform', required=True,
-                      help='Platform to update.')
-  args = parser.parse_args(raw_args)
-  UpdateDependency(args.dependency, args.platform, args.path, args.config)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/dependency_manager/dependency_manager/__init__.py b/systrace/catapult/dependency_manager/dependency_manager/__init__.py
deleted file mode 100644
index 68efbdb..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/__init__.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-
-CATAPULT_PATH = os.path.dirname(os.path.dirname(os.path.dirname(
-    os.path.abspath(__file__))))
-CATAPULT_THIRD_PARTY_PATH = os.path.join(CATAPULT_PATH, 'third_party')
-DEPENDENCY_MANAGER_PATH = os.path.join(CATAPULT_PATH, 'dependency_manager')
-
-
-def _AddDirToPythonPath(*path_parts):
-  path = os.path.abspath(os.path.join(*path_parts))
-  if os.path.isdir(path) and path not in sys.path:
-    sys.path.append(path)
-
-
-_AddDirToPythonPath(CATAPULT_PATH, 'common', 'py_utils')
-_AddDirToPythonPath(CATAPULT_THIRD_PARTY_PATH, 'mock')
-_AddDirToPythonPath(CATAPULT_THIRD_PARTY_PATH, 'pyfakefs')
-_AddDirToPythonPath(CATAPULT_THIRD_PARTY_PATH, 'zipfile')
-_AddDirToPythonPath(DEPENDENCY_MANAGER_PATH)
-
-
-# pylint: disable=unused-import
-from .archive_info import ArchiveInfo
-from .base_config import BaseConfig
-from .cloud_storage_info import CloudStorageInfo
-from .dependency_info import DependencyInfo
-from .exceptions import CloudStorageError
-from .exceptions import CloudStorageUploadConflictError
-from .exceptions import EmptyConfigError
-from .exceptions import FileNotFoundError
-from .exceptions import NoPathFoundError
-from .exceptions import ReadWriteError
-from .exceptions import UnsupportedConfigFormatError
-from .local_path_info import LocalPathInfo
-from .manager import DependencyManager
-# pylint: enable=unused-import
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/archive_info.py b/systrace/catapult/dependency_manager/dependency_manager/archive_info.py
deleted file mode 100644
index ff13f90..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/archive_info.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import glob
-import os
-import shutil
-
-from dependency_manager import exceptions
-from dependency_manager import dependency_manager_util
-
-
-class ArchiveInfo(object):
-
-  def __init__(self, archive_file, unzip_path, path_within_archive,
-               stale_unzip_path_glob=None):
-    """ Container for the information needed to unzip a downloaded archive.
-
-    Args:
-        archive_path: Path to the archive file.
-        unzip_path: Path to unzip the archive into. Assumes that this path
-            is unique for the archive.
-        path_within_archive: Specify if and how to handle zip archives
-            downloaded from cloud_storage. Expected values:
-                None: Do not unzip the file downloaded from cloud_storage.
-                '.': Unzip the file downloaded from cloud_storage. The
-                    unzipped file/folder is the expected dependency.
-                file_path: Unzip the file downloaded from cloud_storage.
-                    |file_path| is the path to the expected dependency,
-                    relative to the unzipped archive path.
-        stale_unzip_path_glob: Optional argument specifying a glob matching
-            string which matches directories that should be removed before this
-            archive is extracted (if it is extracted at all).
-    """
-    self._archive_file = archive_file
-    self._unzip_path = unzip_path
-    self._path_within_archive = path_within_archive
-    self._dependency_path = os.path.join(
-        self._unzip_path, self._path_within_archive)
-    self._stale_unzip_path_glob = stale_unzip_path_glob
-    if not self._has_minimum_data:
-      raise ValueError(
-          'Not enough information specified to initialize an archive info.'
-          ' %s' % self)
-
-  def GetUnzippedPath(self):
-    if self.ShouldUnzipArchive():
-      # Remove stale unzip results
-      if self._stale_unzip_path_glob:
-        for path in glob.glob(self._stale_unzip_path_glob):
-          shutil.rmtree(path)
-      # TODO(aiolos): Replace UnzipFile with zipfile.extractall once python
-      # version 2.7.4 or later can safely be assumed.
-      dependency_manager_util.UnzipArchive(
-          self._archive_file, self._unzip_path)
-      if self.ShouldUnzipArchive():
-        raise exceptions.ArchiveError(
-            "Expected path '%s' was not extracted from archive '%s'." %
-            (self._dependency_path, self._archive_file))
-    return self._dependency_path
-
-  def ShouldUnzipArchive(self):
-    if not self._has_minimum_data:
-      raise exceptions.ArchiveError(
-          'Missing needed info to unzip archive. Known data: %s',
-          self.data_string)
-    return not os.path.exists(self._dependency_path)
-
-  @property
-  def _has_minimum_data(self):
-    return all([self._archive_file, self._unzip_path,
-                self._dependency_path])
-
-  def __repr__(self):
-    return (
-        'ArchiveInfo(archive_file=%s, unzip_path=%s, path_within_archive=%s, '
-        'dependency_path =%s)' % (
-            self._archive_file, self._unzip_path, self._path_within_archive,
-            self._dependency_path))
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/base_config.py b/systrace/catapult/dependency_manager/dependency_manager/base_config.py
deleted file mode 100644
index c735688..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/base_config.py
+++ /dev/null
@@ -1,388 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import json
-import logging
-import os
-
-from py_utils import cloud_storage
-from dependency_manager import archive_info
-from dependency_manager import cloud_storage_info
-from dependency_manager import dependency_info
-from dependency_manager import exceptions
-from dependency_manager import local_path_info
-from dependency_manager import uploader
-
-
-class BaseConfig(object):
-  """A basic config class for use with the DependencyManager.
-
-  Initiated with a json file in the following format:
-
-            {  "config_type": "BaseConfig",
-               "dependencies": {
-                 "dep_name1": {
-                   "cloud_storage_base_folder": "base_folder1",
-                   "cloud_storage_bucket": "bucket1",
-                   "file_info": {
-                     "platform1": {
-                        "cloud_storage_hash": "hash_for_platform1",
-                        "download_path": "download_path111",
-                        "version_in_cs": "1.11.1.11."
-                        "local_paths": ["local_path1110", "local_path1111"]
-                      },
-                      "platform2": {
-                        "cloud_storage_hash": "hash_for_platform2",
-                        "download_path": "download_path2",
-                        "local_paths": ["local_path20", "local_path21"]
-                      },
-                      ...
-                   }
-                 },
-                 "dependency_name_2": {
-                    ...
-                 },
-                  ...
-              }
-            }
-
-    Required fields: "dependencies" and "config_type".
-                     Note that config_type must be "BaseConfig"
-
-    Assumptions:
-        "cloud_storage_base_folder" is a top level folder in the given
-          "cloud_storage_bucket" where all of the dependency files are stored
-          at "dependency_name"_"cloud_storage_hash".
-
-        "download_path" and all paths in "local_paths" are relative to the
-          config file's location.
-
-        All or none of the following cloud storage related fields must be
-          included in each platform dictionary:
-          "cloud_storage_hash", "download_path", "cs_remote_path"
-
-        "version_in_cs" is an optional cloud storage field, but is dependent
-          on the above cloud storage related fields.
-
-
-    Also note that platform names are often of the form os_architechture.
-    Ex: "win_AMD64"
-
-    More information on the fields can be found in dependencies_info.py
-  """
-  def __init__(self, file_path, writable=False):
-    """ Initialize a BaseConfig for the DependencyManager.
-
-    Args:
-        writable: False: This config will be used to lookup information.
-                  True: This config will be used to update information.
-
-        file_path: Path to a file containing a json dictionary in the expected
-                   json format for this config class. Base format expected:
-
-                   { "config_type": config_type,
-                     "dependencies": dependencies_dict }
-
-                   config_type: must match the return value of GetConfigType.
-                   dependencies: A dictionary with the information needed to
-                       create dependency_info instances for the given
-                       dependencies.
-
-                   See dependency_info.py for more information.
-    """
-    self._config_path = file_path
-    self._writable = writable
-    self._pending_uploads = []
-    if not self._config_path:
-      raise ValueError('Must supply config file path.')
-    if not os.path.exists(self._config_path):
-      if not writable:
-        raise exceptions.EmptyConfigError(file_path)
-      self._config_data = {}
-      self._WriteConfigToFile(self._config_path, dependencies=self._config_data)
-    else:
-      with open(file_path, 'r') as f:
-        config_data = json.load(f)
-      if not config_data:
-        raise exceptions.EmptyConfigError(file_path)
-      config_type = config_data.pop('config_type', None)
-      if config_type != self.GetConfigType():
-        raise ValueError(
-            'Supplied config_type (%s) is not the expected type (%s) in file '
-            '%s' % (config_type, self.GetConfigType(), file_path))
-      self._config_data = config_data.get('dependencies', {})
-
-  def IterDependencyInfo(self):
-    """ Yields a DependencyInfo for each dependency/platform pair.
-
-    Raises:
-        ReadWriteError: If called when the config is writable.
-        ValueError: If any of the dependencies contain partial information for
-            downloading from cloud_storage. (See dependency_info.py)
-    """
-    if self._writable:
-      raise exceptions.ReadWriteError(
-          'Trying to read dependency info from a  writable config. File for '
-          'config: %s' % self._config_path)
-    base_path = os.path.dirname(self._config_path)
-    for dependency in self._config_data:
-      dependency_dict = self._config_data.get(dependency)
-      platforms_dict = dependency_dict.get('file_info', {})
-      for platform in platforms_dict:
-        platform_info = platforms_dict.get(platform)
-
-        local_info = None
-        local_paths = platform_info.get('local_paths', [])
-        if local_paths:
-          paths = []
-          for path in local_paths:
-            path = self._FormatPath(path)
-            paths.append(os.path.abspath(os.path.join(base_path, path)))
-          local_info = local_path_info.LocalPathInfo(paths)
-
-        cs_info = None
-        cs_bucket = dependency_dict.get('cloud_storage_bucket')
-        cs_base_folder = dependency_dict.get('cloud_storage_base_folder', '')
-        download_path = platform_info.get('download_path')
-        if download_path:
-          download_path = self._FormatPath(download_path)
-          download_path = os.path.abspath(
-              os.path.join(base_path, download_path))
-
-          cs_hash = platform_info.get('cloud_storage_hash')
-          if not cs_hash:
-            raise exceptions.ConfigError(
-                'Dependency %s has cloud storage info on platform %s, but is '
-                'missing a cloud storage hash.', dependency, platform)
-          cs_remote_path = self._CloudStorageRemotePath(
-              dependency, cs_hash, cs_base_folder)
-          version_in_cs = platform_info.get('version_in_cs')
-
-          zip_info = None
-          path_within_archive = platform_info.get('path_within_archive')
-          if path_within_archive:
-            unzip_path = os.path.abspath(
-                os.path.join(os.path.dirname(download_path),
-                             '%s_%s_%s' % (dependency, platform, cs_hash)))
-            stale_unzip_path_glob = os.path.abspath(
-                os.path.join(os.path.dirname(download_path),
-                             '%s_%s_%s' % (dependency, platform,
-                                           '[0-9a-f]' * 40)))
-            zip_info = archive_info.ArchiveInfo(
-                download_path, unzip_path, path_within_archive,
-                stale_unzip_path_glob)
-
-          cs_info = cloud_storage_info.CloudStorageInfo(
-              cs_bucket, cs_hash, download_path, cs_remote_path,
-              version_in_cs=version_in_cs, archive_info=zip_info)
-
-        dep_info = dependency_info.DependencyInfo(
-            dependency, platform, self._config_path,
-            local_path_info=local_info, cloud_storage_info=cs_info)
-        yield dep_info
-
-  @classmethod
-  def GetConfigType(cls):
-    return 'BaseConfig'
-
-  @property
-  def config_path(self):
-    return self._config_path
-
-  def AddCloudStorageDependencyUpdateJob(
-      self, dependency, platform, dependency_path, version=None,
-      execute_job=True):
-    """Update the file downloaded from cloud storage for a dependency/platform.
-
-    Upload a new file to cloud storage for the given dependency and platform
-    pair and update the cloud storage hash and the version for the given pair.
-
-    Example usage:
-      The following should update the default platform for 'dep_name':
-          UpdateCloudStorageDependency('dep_name', 'default', 'path/to/file')
-
-      The following should update both the mac and win platforms for 'dep_name',
-      or neither if either update fails:
-          UpdateCloudStorageDependency(
-              'dep_name', 'mac_x86_64', 'path/to/mac/file', execute_job=False)
-          UpdateCloudStorageDependency(
-              'dep_name', 'win_AMD64', 'path/to/win/file', execute_job=False)
-          ExecuteUpdateJobs()
-
-    Args:
-      dependency: The dependency to update.
-      platform: The platform to update the dependency info for.
-      dependency_path: Path to the new dependency to be used.
-      version: Version of the updated dependency, for checking future updates
-          against.
-      execute_job: True if the config should be written to disk and the file
-          should be uploaded to cloud storage after the update. False if
-          multiple updates should be performed atomically. Must call
-          ExecuteUpdateJobs after all non-executed jobs are added to complete
-          the update.
-
-    Raises:
-      ReadWriteError: If the config was not initialized as writable, or if
-          |execute_job| is True but the config has update jobs still pending
-          execution.
-      ValueError: If no information exists in the config for |dependency| on
-          |platform|.
-    """
-    self._ValidateIsConfigUpdatable(
-        execute_job=execute_job, dependency=dependency, platform=platform)
-    cs_hash = cloud_storage.CalculateHash(dependency_path)
-    if version:
-      self._SetPlatformData(dependency, platform, 'version_in_cs', version)
-    self._SetPlatformData(dependency, platform, 'cloud_storage_hash', cs_hash)
-
-    cs_base_folder = self._GetPlatformData(
-        dependency, platform, 'cloud_storage_base_folder')
-    cs_bucket = self._GetPlatformData(
-        dependency, platform, 'cloud_storage_bucket')
-    cs_remote_path = self._CloudStorageRemotePath(
-        dependency, cs_hash, cs_base_folder)
-    self._pending_uploads.append(uploader.CloudStorageUploader(
-        cs_bucket, cs_remote_path, dependency_path))
-    if execute_job:
-      self.ExecuteUpdateJobs()
-
-  def ExecuteUpdateJobs(self, force=False):
-    """Write all config changes to the config_path specified in __init__.
-
-    Upload all files pending upload and then write the updated config to
-    file. Attempt to remove all uploaded files on failure.
-
-    Args:
-      force: True if files should be uploaded to cloud storage even if a
-          file already exists in the upload location.
-
-    Returns:
-      True: if the config was dirty and the upload succeeded.
-      False: if the config was not dirty.
-
-    Raises:
-      CloudStorageUploadConflictError: If |force| is False and the potential
-          upload location of a file already exists.
-      CloudStorageError: If copying an existing file to the backup location
-          or uploading a new file fails.
-    """
-    self._ValidateIsConfigUpdatable()
-    if not self._IsDirty():
-      logging.info('ExecuteUpdateJobs called on clean config')
-      return False
-    if not self._pending_uploads:
-      logging.debug('No files needing upload.')
-    else:
-      try:
-        for item_pending_upload in self._pending_uploads:
-          item_pending_upload.Upload(force)
-        self._WriteConfigToFile(self._config_path, self._config_data)
-        self._pending_uploads = []
-      except:
-        # Attempt to rollback the update in any instance of failure, even user
-        # interrupt via Ctrl+C; but don't consume the exception.
-        logging.error('Update failed, attempting to roll it back.')
-        for upload_item in reversed(self._pending_uploads):
-          upload_item.Rollback()
-        raise
-    return True
-
-  def GetVersion(self, dependency, platform):
-    """Return the Version information for the given dependency."""
-    return self._GetPlatformData(
-        dependency, platform, data_type='version_in_cs')
-
-  def _IsDirty(self):
-    with open(self._config_path, 'r') as fstream:
-      curr_config_data = json.load(fstream)
-    curr_config_data = curr_config_data.get('dependencies', {})
-    return self._config_data != curr_config_data
-
-  def _SetPlatformData(self, dependency, platform, data_type, data):
-    self._ValidateIsConfigWritable()
-    dependency_dict = self._config_data.get(dependency, {})
-    platform_dict = dependency_dict.get('file_info', {}).get(platform)
-    if not platform_dict:
-      raise ValueError('No platform data for platform %s on dependency %s' %
-                       (platform, dependency))
-    if (data_type == 'cloud_storage_bucket' or
-        data_type == 'cloud_storage_base_folder'):
-      self._config_data[dependency][data_type] = data
-    else:
-      self._config_data[dependency]['file_info'][platform][data_type] = data
-
-  def _GetPlatformData(self, dependency, platform, data_type=None):
-    dependency_dict = self._config_data.get(dependency, {})
-    if not dependency_dict:
-      raise ValueError('Dependency %s is not in config.' % dependency)
-    platform_dict = dependency_dict.get('file_info', {}).get(platform)
-    if not platform_dict:
-      raise ValueError('No platform data for platform %s on dependency %s' %
-                       (platform, dependency))
-    if data_type:
-      if (data_type == 'cloud_storage_bucket' or
-          data_type == 'cloud_storage_base_folder'):
-        return dependency_dict.get(data_type)
-      return platform_dict.get(data_type)
-    return platform_dict
-
-  def _ValidateIsConfigUpdatable(
-      self, execute_job=False, dependency=None, platform=None):
-    self._ValidateIsConfigWritable()
-    if self._IsDirty() and execute_job:
-      raise exceptions.ReadWriteError(
-          'A change has already been made to this config. Either call without'
-          'using the execute_job option or first call ExecuteUpdateJobs().')
-    if dependency and not self._config_data.get(dependency):
-      raise ValueError('Cannot update information because dependency %s does '
-                       'not exist.' % dependency)
-    if platform and not self._GetPlatformData(dependency, platform):
-      raise ValueError('No dependency info is available for the given '
-                       'dependency: %s' % dependency)
-
-  def _ValidateIsConfigWritable(self):
-    if not self._writable:
-      raise exceptions.ReadWriteError(
-          'Trying to update the information from a read-only config. '
-          'File for config: %s' % self._config_path)
-
-  @staticmethod
-  def _CloudStorageRemotePath(dependency, cs_hash, cs_base_folder):
-    cs_remote_file = '%s_%s' % (dependency, cs_hash)
-    cs_remote_path = cs_remote_file if not cs_base_folder else (
-        '%s/%s' % (cs_base_folder, cs_remote_file))
-    return cs_remote_path
-
-  @classmethod
-  def _FormatPath(cls, file_path):
-    """ Format |file_path| for the current file system.
-
-    We may be downloading files for another platform, so paths must be
-    downloadable on the current system.
-    """
-    if not file_path:
-      return file_path
-    if os.path.sep != '\\':
-      return file_path.replace('\\', os.path.sep)
-    elif os.path.sep != '/':
-      return file_path.replace('/', os.path.sep)
-    return file_path
-
-  @classmethod
-  def _WriteConfigToFile(cls, file_path, dependencies=None):
-    json_dict = cls._GetJsonDict(dependencies)
-    file_dir = os.path.dirname(file_path)
-    if not os.path.exists(file_dir):
-      os.makedirs(file_dir)
-    with open(file_path, 'w') as outfile:
-      json.dump(
-          json_dict, outfile, indent=2, sort_keys=True, separators=(',', ': '))
-    return json_dict
-
-  @classmethod
-  def _GetJsonDict(cls, dependencies=None):
-    dependencies = dependencies or {}
-    json_dict = {'config_type': cls.GetConfigType(),
-                 'dependencies': dependencies}
-    return json_dict
diff --git a/systrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py
deleted file mode 100755
index 0dc775b..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/base_config_unittest.py
+++ /dev/null
@@ -1,1525 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=unused-argument
-
-import os
-import unittest
-
-from py_utils import cloud_storage
-import mock
-from pyfakefs import fake_filesystem_unittest
-from pyfakefs import fake_filesystem
-from pyfakefs import fake_filesystem_glob
-
-import dependency_manager
-from dependency_manager import uploader
-
-
-class BaseConfigCreationAndUpdateUnittests(fake_filesystem_unittest.TestCase):
-  def setUp(self):
-    self.addTypeEqualityFunc(uploader.CloudStorageUploader,
-                             uploader.CloudStorageUploader.__eq__)
-    self.setUpPyfakefs()
-    self.dependencies = {
-        'dep1': {'cloud_storage_bucket': 'bucket1',
-                 'cloud_storage_base_folder': 'dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1'},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash12',
-                         'download_path': '../../relative/dep1/path2'}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash21',
-                         'download_path': '../../relative/dep2/path1'},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-
-    self.expected_file_lines = [
-      # pylint: disable=bad-continuation
-      '{', '"config_type": "BaseConfig",', '"dependencies": {',
-        '"dep1": {', '"cloud_storage_base_folder": "dependencies_folder",',
-          '"cloud_storage_bucket": "bucket1",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "hash11",',
-              '"download_path": "../../relative/dep1/path1"', '},',
-            '"plat2": {', '"cloud_storage_hash": "hash12",',
-              '"download_path": "../../relative/dep1/path2"', '}', '}', '},',
-        '"dep2": {', '"cloud_storage_bucket": "bucket2",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "hash21",',
-              '"download_path": "../../relative/dep2/path1"', '},',
-            '"plat2": {', '"cloud_storage_hash": "hash22",',
-              '"download_path": "../../relative/dep2/path2"', '}', '}', '}',
-      '}', '}']
-
-    self.file_path = os.path.abspath(os.path.join(
-        'path', 'to', 'config', 'file'))
-
-    self.new_dep_path = 'path/to/new/dep'
-    self.fs.CreateFile(self.new_dep_path)
-    self.new_dep_hash = 'A23B56B7F23E798601F'
-    self.new_dependencies = {
-        'dep1': {'cloud_storage_bucket': 'bucket1',
-                 'cloud_storage_base_folder': 'dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1'},
-                     'plat2': {
-                         'cloud_storage_hash': self.new_dep_hash,
-                         'download_path': '../../relative/dep1/path2'}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash21',
-                         'download_path': '../../relative/dep2/path1'},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-    self.new_bucket = 'bucket1'
-    self.new_remote_path = 'dependencies_folder/dep1_%s' % self.new_dep_hash
-    self.new_pending_upload = uploader.CloudStorageUploader(
-        self.new_bucket, self.new_remote_path, self.new_dep_path)
-    self.expected_new_backup_path = '.'.join([self.new_remote_path, 'old'])
-    self.new_expected_file_lines = [
-      # pylint: disable=bad-continuation
-      '{', '"config_type": "BaseConfig",', '"dependencies": {',
-        '"dep1": {', '"cloud_storage_base_folder": "dependencies_folder",',
-          '"cloud_storage_bucket": "bucket1",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "hash11",',
-              '"download_path": "../../relative/dep1/path1"', '},',
-            '"plat2": {', '"cloud_storage_hash": "%s",' % self.new_dep_hash,
-              '"download_path": "../../relative/dep1/path2"', '}', '}', '},',
-        '"dep2": {', '"cloud_storage_bucket": "bucket2",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "hash21",',
-              '"download_path": "../../relative/dep2/path1"', '},',
-            '"plat2": {', '"cloud_storage_hash": "hash22",',
-              '"download_path": "../../relative/dep2/path2"', '}', '}', '}',
-      '}', '}']
-
-    self.final_dep_path = 'path/to/final/dep'
-    self.fs.CreateFile(self.final_dep_path)
-    self.final_dep_hash = 'B34662F23B56B7F98601F'
-    self.final_bucket = 'bucket2'
-    self.final_remote_path = 'dep1_%s' % self.final_dep_hash
-    self.final_pending_upload = uploader.CloudStorageUploader(
-        self.final_bucket, self.final_remote_path, self.final_dep_path)
-    self.expected_final_backup_path = '.'.join([self.final_remote_path,
-                                                'old'])
-    self.final_dependencies = {
-        'dep1': {'cloud_storage_bucket': 'bucket1',
-                 'cloud_storage_base_folder': 'dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1'},
-                     'plat2': {
-                         'cloud_storage_hash': self.new_dep_hash,
-                         'download_path': '../../relative/dep1/path2'}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': self.final_dep_hash,
-                         'download_path': '../../relative/dep2/path1'},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-    self.final_expected_file_lines = [
-      # pylint: disable=bad-continuation
-      '{', '"config_type": "BaseConfig",', '"dependencies": {',
-        '"dep1": {', '"cloud_storage_base_folder": "dependencies_folder",',
-          '"cloud_storage_bucket": "bucket1",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "hash11",',
-              '"download_path": "../../relative/dep1/path1"', '},',
-            '"plat2": {', '"cloud_storage_hash": "%s",' % self.new_dep_hash,
-              '"download_path": "../../relative/dep1/path2"', '}', '}', '},',
-        '"dep2": {', '"cloud_storage_bucket": "bucket2",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "%s",' % self.final_dep_hash,
-              '"download_path": "../../relative/dep2/path1"', '},',
-            '"plat2": {', '"cloud_storage_hash": "hash22",',
-              '"download_path": "../../relative/dep2/path2"', '}', '}', '}',
-      '}', '}']
-
-
-  def tearDown(self):
-    self.tearDownPyfakefs()
-
-  # Init is not meant to be overridden, so we should be mocking the
-  # base_config's json module, even in subclasses.
-  def testCreateEmptyConfig(self):
-    expected_file_lines = ['{',
-                           '"config_type": "BaseConfig",',
-                           '"dependencies": {}',
-                           '}']
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual({}, config._config_data)
-    self.assertEqual(self.file_path, config._config_path)
-
-  def testCreateEmptyConfigError(self):
-    self.assertRaises(dependency_manager.EmptyConfigError,
-                      dependency_manager.BaseConfig, self.file_path)
-
-  def testCloudStorageRemotePath(self):
-    dependency = 'dep_name'
-    cs_hash = self.new_dep_hash
-    cs_base_folder = 'dependency_remote_folder'
-    expected_remote_path = '%s/%s_%s' % (cs_base_folder, dependency, cs_hash)
-    remote_path = dependency_manager.BaseConfig._CloudStorageRemotePath(
-        dependency, cs_hash, cs_base_folder)
-    self.assertEqual(expected_remote_path, remote_path)
-
-    cs_base_folder = 'dependency_remote_folder'
-    expected_remote_path = '%s_%s' % (dependency, cs_hash)
-    remote_path = dependency_manager.BaseConfig._CloudStorageRemotePath(
-        dependency, cs_hash, cs_base_folder)
-
-  def testGetEmptyJsonDict(self):
-    expected_json_dict = {'config_type': 'BaseConfig',
-                          'dependencies': {}}
-    json_dict = dependency_manager.BaseConfig._GetJsonDict()
-    self.assertEqual(expected_json_dict, json_dict)
-
-  def testGetNonEmptyJsonDict(self):
-    expected_json_dict = {"config_type": "BaseConfig",
-                          "dependencies": self.dependencies}
-    json_dict = dependency_manager.BaseConfig._GetJsonDict(self.dependencies)
-    self.assertEqual(expected_json_dict, json_dict)
-
-  def testWriteEmptyConfigToFile(self):
-    expected_file_lines = ['{', '"config_type": "BaseConfig",',
-                           '"dependencies": {}', '}']
-    self.assertFalse(os.path.exists(self.file_path))
-    dependency_manager.BaseConfig._WriteConfigToFile(self.file_path)
-    self.assertTrue(os.path.exists(self.file_path))
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-
-  def testWriteNonEmptyConfigToFile(self):
-    self.assertFalse(os.path.exists(self.file_path))
-    dependency_manager.BaseConfig._WriteConfigToFile(self.file_path,
-                                                     self.dependencies)
-    self.assertTrue(os.path.exists(self.file_path))
-    expected_file_lines = list(self.expected_file_lines)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsNoOp(self, uploader_cs_mock):
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-
-    self.assertFalse(config.ExecuteUpdateJobs())
-    self.assertFalse(config._IsDirty())
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(self.dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnInsertNoCSCollision(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = False
-    uploader_cs_mock.Insert.side_effect = cloud_storage.CloudStorageError
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path)]
-    expected_copy_calls = []
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnInsertCSCollisionForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = True
-    uploader_cs_mock.Insert.side_effect = cloud_storage.CloudStorageError
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path)]
-    expected_copy_calls = [mock.call(self.new_bucket, self.new_bucket,
-                                     self.new_remote_path,
-                                     self.expected_new_backup_path),
-                           mock.call(self.new_bucket, self.new_bucket,
-                                     self.expected_new_backup_path,
-                                     self.new_remote_path)]
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs, force=True)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnInsertCSCollisionNoForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = True
-    uploader_cs_mock.Insert.side_effect = cloud_storage.CloudStorageError
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = []
-    expected_copy_calls = []
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnCopy(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = True
-    uploader_cs_mock.Copy.side_effect = cloud_storage.CloudStorageError
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = []
-    expected_copy_calls = [mock.call(self.new_bucket, self.new_bucket,
-                                     self.new_remote_path,
-                                     self.expected_new_backup_path)]
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs, force=True)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnSecondInsertNoCSCollision(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = False
-    uploader_cs_mock.Insert.side_effect = [
-        True, cloud_storage.CloudStorageError]
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path,
-                                       self.final_dep_path)]
-    expected_copy_calls = []
-    expected_delete_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnSecondInsertCSCollisionForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = True
-    uploader_cs_mock.Insert.side_effect = [
-        True, cloud_storage.CloudStorageError]
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path,
-                                       self.final_dep_path)]
-    expected_copy_calls = [mock.call(self.new_bucket, self.new_bucket,
-                                     self.new_remote_path,
-                                     self.expected_new_backup_path),
-                           mock.call(self.final_bucket, self.final_bucket,
-                                     self.final_remote_path,
-                                     self.expected_final_backup_path),
-                           mock.call(self.final_bucket, self.final_bucket,
-                                     self.expected_final_backup_path,
-                                     self.final_remote_path),
-                           mock.call(self.new_bucket, self.new_bucket,
-                                     self.expected_new_backup_path,
-                                     self.new_remote_path)]
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs, force=True)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnSecondInsertFirstCSCollisionForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.side_effect = [True, False, True]
-    uploader_cs_mock.Insert.side_effect = [
-        True, cloud_storage.CloudStorageError]
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path,
-                                       self.final_dep_path)]
-    expected_copy_calls = [mock.call(self.new_bucket, self.new_bucket,
-                                     self.new_remote_path,
-                                     self.expected_new_backup_path),
-                           mock.call(self.new_bucket, self.new_bucket,
-                                     self.expected_new_backup_path,
-                                     self.new_remote_path)]
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs, force=True)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnFirstCSCollisionNoForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.side_effect = [True, False, True]
-    uploader_cs_mock.Insert.side_effect = [
-        True, cloud_storage.CloudStorageError]
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = []
-    expected_copy_calls = []
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnSecondCopyCSCollision(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = True
-    uploader_cs_mock.Insert.return_value = True
-    uploader_cs_mock.Copy.side_effect = [
-        True, cloud_storage.CloudStorageError, True]
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path)]
-    expected_copy_calls = [mock.call(self.new_bucket, self.new_bucket,
-                                     self.new_remote_path,
-                                     self.expected_new_backup_path),
-                           mock.call(self.final_bucket, self.final_bucket,
-                                     self.final_remote_path,
-                                     self.expected_final_backup_path),
-                           mock.call(self.new_bucket, self.new_bucket,
-                                     self.expected_new_backup_path,
-                                     self.new_remote_path)]
-    expected_delete_calls = []
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs, force=True)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnSecondCopyNoCSCollisionForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.side_effect = [False, True, False]
-    uploader_cs_mock.Copy.side_effect = cloud_storage.CloudStorageError
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path)]
-    expected_copy_calls = [mock.call(self.final_bucket, self.final_bucket,
-                                     self.final_remote_path,
-                                     self.expected_final_backup_path)]
-    expected_delete_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs, force=True)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsFailureOnSecondCopyNoCSCollisionNoForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.side_effect = [False, True, False]
-    uploader_cs_mock.Copy.side_effect = cloud_storage.CloudStorageError
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path)]
-    expected_copy_calls = []
-    expected_delete_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      config.ExecuteUpdateJobs)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsSuccessOnePendingDepNoCloudStorageCollision(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = False
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._pending_uploads = [self.new_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._IsDirty())
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path)]
-    expected_copy_calls = []
-    expected_delete_calls = []
-
-    self.assertTrue(config.ExecuteUpdateJobs())
-    self.assertFalse(config._IsDirty())
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.new_expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-    self.assertEqual(expected_delete_calls,
-                     uploader_cs_mock.Delete.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsSuccessOnePendingDepCloudStorageCollision(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = True
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._pending_uploads = [self.new_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._IsDirty())
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path)]
-    expected_copy_calls = [mock.call(self.new_bucket, self.new_bucket,
-                                     self.new_remote_path,
-                                     self.expected_new_backup_path)]
-
-    self.assertTrue(config.ExecuteUpdateJobs(force=True))
-    self.assertFalse(config._IsDirty())
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(self.new_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.new_expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsErrorOnePendingDepCloudStorageCollisionNoForce(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.return_value = True
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.new_dependencies.copy()
-    config._is_dirty = True
-    config._pending_uploads = [self.new_pending_upload]
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertTrue(config._is_dirty)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path)]
-    expected_insert_calls = []
-    expected_copy_calls = []
-
-    self.assertRaises(dependency_manager.CloudStorageUploadConflictError,
-                      config.ExecuteUpdateJobs)
-    self.assertTrue(config._is_dirty)
-    self.assertTrue(config._pending_uploads)
-    self.assertEqual(self.new_dependencies, config._config_data)
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testExecuteUpdateJobsSuccessMultiplePendingDepsOneCloudStorageCollision(
-      self, uploader_cs_mock):
-    uploader_cs_mock.Exists.side_effect = [False, True]
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    config._config_data = self.final_dependencies.copy()
-    config._pending_uploads = [self.new_pending_upload,
-                               self.final_pending_upload]
-    self.assertEqual(self.final_dependencies, config._config_data)
-    self.assertTrue(config._IsDirty())
-    self.assertEqual(2, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(self.final_pending_upload, config._pending_uploads[1])
-
-    expected_exists_calls = [mock.call(self.new_bucket, self.new_remote_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path)]
-    expected_insert_calls = [mock.call(self.new_bucket, self.new_remote_path,
-                                       self.new_dep_path),
-                             mock.call(self.final_bucket,
-                                       self.final_remote_path,
-                                       self.final_dep_path)]
-    expected_copy_calls = [mock.call(self.final_bucket, self.final_bucket,
-                                     self.final_remote_path,
-                                     self.expected_final_backup_path)]
-
-    self.assertTrue(config.ExecuteUpdateJobs(force=True))
-    self.assertFalse(config._IsDirty())
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(self.final_dependencies, config._config_data)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.final_expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(expected_insert_calls,
-                     uploader_cs_mock.Insert.call_args_list)
-    self.assertEqual(expected_exists_calls,
-                     uploader_cs_mock.Exists.call_args_list)
-    self.assertEqual(expected_copy_calls,
-                     uploader_cs_mock.Copy.call_args_list)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testUpdateCloudStorageDependenciesReadOnlyConfig(
-      self, uploader_cs_mock):
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path)
-    with self.assertRaises(dependency_manager.ReadWriteError):
-      config.AddCloudStorageDependencyUpdateJob(
-          'dep', 'plat', 'path')
-    with self.assertRaises(dependency_manager.ReadWriteError):
-      config.AddCloudStorageDependencyUpdateJob(
-          'dep', 'plat', 'path', version='1.2.3')
-    with self.assertRaises(dependency_manager.ReadWriteError):
-      config.AddCloudStorageDependencyUpdateJob(
-          'dep', 'plat', 'path', execute_job=False)
-    with self.assertRaises(dependency_manager.ReadWriteError):
-      config.AddCloudStorageDependencyUpdateJob(
-          'dep', 'plat', 'path', version='1.2.3', execute_job=False)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  def testUpdateCloudStorageDependenciesMissingDependency(
-      self, uploader_cs_mock):
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertRaises(ValueError, config.AddCloudStorageDependencyUpdateJob,
-                      'dep', 'plat', 'path')
-    self.assertRaises(ValueError, config.AddCloudStorageDependencyUpdateJob,
-                      'dep', 'plat', 'path', version='1.2.3')
-    self.assertRaises(ValueError, config.AddCloudStorageDependencyUpdateJob,
-                      'dep', 'plat', 'path', execute_job=False)
-    self.assertRaises(ValueError, config.AddCloudStorageDependencyUpdateJob,
-                      'dep', 'plat', 'path', version='1.2.3', execute_job=False)
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  @mock.patch('dependency_manager.base_config.cloud_storage')
-  def testUpdateCloudStorageDependenciesWrite(
-      self, base_config_cs_mock, uploader_cs_mock):
-    expected_dependencies = self.dependencies
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertFalse(config._IsDirty())
-    self.assertEqual(expected_dependencies, config._config_data)
-
-    base_config_cs_mock.CalculateHash.return_value = self.new_dep_hash
-    uploader_cs_mock.Exists.return_value = False
-    expected_dependencies = self.new_dependencies
-    config.AddCloudStorageDependencyUpdateJob(
-        'dep1', 'plat2', self.new_dep_path, execute_job=True)
-    self.assertFalse(config._IsDirty())
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(expected_dependencies, config._config_data)
-    # check that file contents has been updated
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    expected_file_lines = list(self.new_expected_file_lines)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-
-    expected_dependencies = self.final_dependencies
-    base_config_cs_mock.CalculateHash.return_value = self.final_dep_hash
-    config.AddCloudStorageDependencyUpdateJob(
-        'dep2', 'plat1', self.final_dep_path, execute_job=True)
-    self.assertFalse(config._IsDirty())
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(expected_dependencies, config._config_data)
-    # check that file contents has been updated
-    expected_file_lines = list(self.final_expected_file_lines)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-
-  @mock.patch('dependency_manager.uploader.cloud_storage')
-  @mock.patch('dependency_manager.base_config.cloud_storage')
-  def testUpdateCloudStorageDependenciesNoWrite(
-      self, base_config_cs_mock, uploader_cs_mock):
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-
-    self.assertRaises(ValueError, config.AddCloudStorageDependencyUpdateJob,
-                      'dep', 'plat', 'path')
-    self.assertRaises(ValueError, config.AddCloudStorageDependencyUpdateJob,
-                      'dep', 'plat', 'path', version='1.2.3')
-
-    expected_dependencies = self.dependencies
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertFalse(config._IsDirty())
-    self.assertFalse(config._pending_uploads)
-    self.assertEqual(expected_dependencies, config._config_data)
-
-    base_config_cs_mock.CalculateHash.return_value = self.new_dep_hash
-    uploader_cs_mock.Exists.return_value = False
-    expected_dependencies = self.new_dependencies
-    config.AddCloudStorageDependencyUpdateJob(
-        'dep1', 'plat2', self.new_dep_path, execute_job=False)
-    self.assertTrue(config._IsDirty())
-    self.assertEqual(1, len(config._pending_uploads))
-    self.assertEqual(self.new_pending_upload, config._pending_uploads[0])
-    self.assertEqual(expected_dependencies, config._config_data)
-    # check that file contents have not been updated.
-    expected_file_lines = list(self.expected_file_lines)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-
-    expected_dependencies = self.final_dependencies
-    base_config_cs_mock.CalculateHash.return_value = self.final_dep_hash
-    config.AddCloudStorageDependencyUpdateJob(
-        'dep2', 'plat1', self.final_dep_path, execute_job=False)
-    self.assertTrue(config._IsDirty())
-    self.assertEqual(expected_dependencies, config._config_data)
-    # check that file contents have not been updated.
-    expected_file_lines = list(self.expected_file_lines)
-    file_module = fake_filesystem.FakeFileOpen(self.fs)
-    for line in file_module(self.file_path):
-      self.assertEqual(expected_file_lines.pop(0), line.strip())
-    self.fs.CloseOpenFile(file_module(self.file_path))
-
-
-class BaseConfigDataManipulationUnittests(fake_filesystem_unittest.TestCase):
-  def setUp(self):
-    self.addTypeEqualityFunc(uploader.CloudStorageUploader,
-                             uploader.CloudStorageUploader.__eq__)
-    self.setUpPyfakefs()
-
-    self.cs_bucket = 'bucket1'
-    self.cs_base_folder = 'dependencies_folder'
-    self.cs_hash = 'hash12'
-    self.download_path = '../../relative/dep1/path2'
-    self.local_paths = ['../../../relative/local/path21',
-                        '../../../relative/local/path22']
-    self.platform_dict = {'cloud_storage_hash': self.cs_hash,
-                          'download_path': self.download_path,
-                          'local_paths': self.local_paths}
-    self.dependencies = {
-        'dep1': {
-            'cloud_storage_bucket': self.cs_bucket,
-            'cloud_storage_base_folder': self.cs_base_folder,
-            'file_info': {
-                'plat1': {
-                    'cloud_storage_hash': 'hash11',
-                    'download_path': '../../relative/dep1/path1',
-                    'local_paths': ['../../../relative/local/path11',
-                                    '../../../relative/local/path12']},
-                'plat2': self.platform_dict
-            }
-        },
-        'dep2': {
-            'cloud_storage_bucket': 'bucket2',
-            'file_info': {
-                'plat1': {
-                    'cloud_storage_hash': 'hash21',
-                    'download_path': '../../relative/dep2/path1',
-                    'local_paths': ['../../../relative/local/path31',
-                                    '../../../relative/local/path32']},
-                'plat2': {
-                    'cloud_storage_hash': 'hash22',
-                    'download_path': '../../relative/dep2/path2'}}}}
-
-    self.file_path = os.path.abspath(os.path.join(
-        'path', 'to', 'config', 'file'))
-
-
-    self.expected_file_lines = [
-      # pylint: disable=bad-continuation
-      '{', '"config_type": "BaseConfig",', '"dependencies": {',
-        '"dep1": {', '"cloud_storage_base_folder": "dependencies_folder",',
-          '"cloud_storage_bucket": "bucket1",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "hash11",',
-              '"download_path": "../../relative/dep1/path1",',
-              '"local_paths": [', '"../../../relative/local/path11",',
-                              '"../../../relative/local/path12"', ']', '},',
-            '"plat2": {', '"cloud_storage_hash": "hash12",',
-              '"download_path": "../../relative/dep1/path2",',
-              '"local_paths": [', '"../../../relative/local/path21",',
-                              '"../../../relative/local/path22"', ']',
-              '}', '}', '},',
-        '"dep2": {', '"cloud_storage_bucket": "bucket2",', '"file_info": {',
-            '"plat1": {', '"cloud_storage_hash": "hash21",',
-              '"download_path": "../../relative/dep2/path1",',
-              '"local_paths": [', '"../../../relative/local/path31",',
-                              '"../../../relative/local/path32"', ']', '},',
-            '"plat2": {', '"cloud_storage_hash": "hash22",',
-              '"download_path": "../../relative/dep2/path2"', '}', '}', '}',
-      '}', '}']
-    self.fs.CreateFile(self.file_path,
-                       contents='\n'.join(self.expected_file_lines))
-
-
-  def testSetPlatformDataFailureNotWritable(self):
-    config = dependency_manager.BaseConfig(self.file_path)
-    self.assertRaises(
-        dependency_manager.ReadWriteError, config._SetPlatformData,
-        'dep1', 'plat1', 'cloud_storage_bucket', 'new_bucket')
-    self.assertEqual(self.dependencies, config._config_data)
-
-  def testSetPlatformDataFailure(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertRaises(ValueError, config._SetPlatformData, 'missing_dep',
-                      'plat2', 'cloud_storage_bucket', 'new_bucket')
-    self.assertEqual(self.dependencies, config._config_data)
-    self.assertRaises(ValueError, config._SetPlatformData, 'dep1',
-                      'missing_plat', 'cloud_storage_bucket', 'new_bucket')
-    self.assertEqual(self.dependencies, config._config_data)
-
-
-  def testSetPlatformDataCloudStorageBucketSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    updated_cs_dependencies = {
-        'dep1': {'cloud_storage_bucket': 'new_bucket',
-                 'cloud_storage_base_folder': 'dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1',
-                         'local_paths': ['../../../relative/local/path11',
-                                         '../../../relative/local/path12']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash12',
-                         'download_path': '../../relative/dep1/path2',
-                         'local_paths': ['../../../relative/local/path21',
-                                         '../../../relative/local/path22']}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash21',
-                         'download_path': '../../relative/dep2/path1',
-                         'local_paths': ['../../../relative/local/path31',
-                                         '../../../relative/local/path32']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-    config._SetPlatformData('dep1', 'plat2', 'cloud_storage_bucket',
-                            'new_bucket')
-    self.assertEqual(updated_cs_dependencies, config._config_data)
-
-  def testSetPlatformDataCloudStorageBaseFolderSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    updated_cs_dependencies = {
-        'dep1': {'cloud_storage_bucket': 'bucket1',
-                 'cloud_storage_base_folder': 'new_dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1',
-                         'local_paths': ['../../../relative/local/path11',
-                                         '../../../relative/local/path12']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash12',
-                         'download_path': '../../relative/dep1/path2',
-                         'local_paths': ['../../../relative/local/path21',
-                                         '../../../relative/local/path22']}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash21',
-                         'download_path': '../../relative/dep2/path1',
-                         'local_paths': ['../../../relative/local/path31',
-                                         '../../../relative/local/path32']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-    config._SetPlatformData('dep1', 'plat2', 'cloud_storage_base_folder',
-                            'new_dependencies_folder')
-    self.assertEqual(updated_cs_dependencies, config._config_data)
-
-  def testSetPlatformDataHashSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    updated_cs_dependencies = {
-        'dep1': {'cloud_storage_bucket': 'bucket1',
-                 'cloud_storage_base_folder': 'dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1',
-                         'local_paths': ['../../../relative/local/path11',
-                                         '../../../relative/local/path12']},
-                     'plat2': {
-                         'cloud_storage_hash': 'new_hash',
-                         'download_path': '../../relative/dep1/path2',
-                         'local_paths': ['../../../relative/local/path21',
-                                         '../../../relative/local/path22']}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash21',
-                         'download_path': '../../relative/dep2/path1',
-                         'local_paths': ['../../../relative/local/path31',
-                                         '../../../relative/local/path32']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-    config._SetPlatformData('dep1', 'plat2', 'cloud_storage_hash',
-                            'new_hash')
-    self.assertEqual(updated_cs_dependencies, config._config_data)
-
-  def testSetPlatformDataDownloadPathSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    updated_cs_dependencies = {
-        'dep1': {'cloud_storage_bucket': 'bucket1',
-                 'cloud_storage_base_folder': 'dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1',
-                         'local_paths': ['../../../relative/local/path11',
-                                         '../../../relative/local/path12']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash12',
-                         'download_path': '../../new/dep1/path2',
-                         'local_paths': ['../../../relative/local/path21',
-                                         '../../../relative/local/path22']}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash21',
-                         'download_path': '../../relative/dep2/path1',
-                         'local_paths': ['../../../relative/local/path31',
-                                         '../../../relative/local/path32']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-    config._SetPlatformData('dep1', 'plat2', 'download_path',
-                            '../../new/dep1/path2')
-    self.assertEqual(updated_cs_dependencies, config._config_data)
-
-  def testSetPlatformDataLocalPathSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    updated_cs_dependencies = {
-        'dep1': {'cloud_storage_bucket': 'bucket1',
-                 'cloud_storage_base_folder': 'dependencies_folder',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash11',
-                         'download_path': '../../relative/dep1/path1',
-                         'local_paths': ['../../../relative/local/path11',
-                                         '../../../relative/local/path12']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash12',
-                         'download_path': '../../relative/dep1/path2',
-                         'local_paths': ['../../new/relative/local/path21',
-                                         '../../new/relative/local/path22']}}},
-        'dep2': {'cloud_storage_bucket': 'bucket2',
-                 'file_info': {
-                     'plat1': {
-                         'cloud_storage_hash': 'hash21',
-                         'download_path': '../../relative/dep2/path1',
-                         'local_paths': ['../../../relative/local/path31',
-                                         '../../../relative/local/path32']},
-                     'plat2': {
-                         'cloud_storage_hash': 'hash22',
-                         'download_path': '../../relative/dep2/path2'}}}}
-    config._SetPlatformData('dep1', 'plat2', 'local_paths',
-                            ['../../new/relative/local/path21',
-                             '../../new/relative/local/path22'])
-    self.assertEqual(updated_cs_dependencies, config._config_data)
-
-  def testGetPlatformDataFailure(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertRaises(ValueError, config._GetPlatformData, 'missing_dep',
-                      'plat2', 'cloud_storage_bucket')
-    self.assertEqual(self.dependencies, config._config_data)
-    self.assertRaises(ValueError, config._GetPlatformData, 'dep1',
-                      'missing_plat', 'cloud_storage_bucket')
-    self.assertEqual(self.dependencies, config._config_data)
-
-  def testGetPlatformDataDictSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertEqual(self.platform_dict,
-                     config._GetPlatformData('dep1', 'plat2'))
-    self.assertEqual(self.dependencies, config._config_data)
-
-  def testGetPlatformDataCloudStorageBucketSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertEqual(self.cs_bucket, config._GetPlatformData(
-        'dep1', 'plat2', 'cloud_storage_bucket'))
-    self.assertEqual(self.dependencies, config._config_data)
-
-  def testGetPlatformDataCloudStorageBaseFolderSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertEqual(self.cs_base_folder, config._GetPlatformData(
-        'dep1', 'plat2', 'cloud_storage_base_folder'))
-    self.assertEqual(self.dependencies, config._config_data)
-
-  def testGetPlatformDataHashSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertEqual(self.cs_hash, config._GetPlatformData(
-        'dep1', 'plat2', 'cloud_storage_hash'))
-    self.assertEqual(self.dependencies, config._config_data)
-
-  def testGetPlatformDataDownloadPathSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertEqual(self.download_path, config._GetPlatformData(
-        'dep1', 'plat2', 'download_path'))
-    self.assertEqual(self.dependencies, config._config_data)
-
-  def testGetPlatformDataLocalPathSuccess(self):
-    config = dependency_manager.BaseConfig(self.file_path, writable=True)
-    self.assertEqual(self.local_paths, config._GetPlatformData(
-        'dep1', 'plat2', 'local_paths'))
-    self.assertEqual(self.dependencies, config._config_data)
-
-class BaseConfigTest(unittest.TestCase):
-  """ Subclassable unittests for BaseConfig.
-  For subclasses: override setUp, GetConfigDataFromDict,
-    and EndToEndExpectedConfigData as needed.
-
-    setUp must set the following properties:
-      self.config_type: String returnedd from GetConfigType in config subclass.
-      self.config_class: the class for the config subclass.
-      self.config_module: importable module for the config subclass.
-      self.empty_dict: expected dictionary for an empty config, as it would be
-        stored in a json file.
-      self.one_dep_dict: example dictionary for a config with one dependency,
-        as it would be stored in a json file.
-  """
-  def setUp(self):
-    self.config_type = 'BaseConfig'
-    self.config_class = dependency_manager.BaseConfig
-    self.config_module = 'dependency_manager.base_config'
-
-    self.empty_dict = {'config_type': self.config_type,
-                       'dependencies': {}}
-
-    dependency_dict = {
-        'dep': {
-            'cloud_storage_base_folder': 'cs_base_folder1',
-            'cloud_storage_bucket': 'bucket1',
-            'file_info': {
-                'plat1_arch1': {
-                    'cloud_storage_hash': 'hash111',
-                    'download_path': 'download_path111',
-                    'cs_remote_path': 'cs_path111',
-                    'version_in_cs': 'version_111',
-                    'local_paths': ['local_path1110', 'local_path1111']
-                },
-                'plat1_arch2': {
-                    'cloud_storage_hash': 'hash112',
-                    'download_path': 'download_path112',
-                    'cs_remote_path': 'cs_path112',
-                    'local_paths': ['local_path1120', 'local_path1121']
-                },
-                'win_arch1': {
-                    'cloud_storage_hash': 'hash1w1',
-                    'download_path': 'download\\path\\1w1',
-                    'cs_remote_path': 'cs_path1w1',
-                    'local_paths': ['local\\path\\1w10', 'local\\path\\1w11']
-                },
-                'all_the_variables': {
-                    'cloud_storage_hash': 'hash111',
-                    'download_path': 'download_path111',
-                    'cs_remote_path': 'cs_path111',
-                    'version_in_cs': 'version_111',
-                    'path_within_archive': 'path/within/archive',
-                    'local_paths': ['local_path1110', 'local_path1111']
-                }
-            }
-        }
-    }
-    self.one_dep_dict = {'config_type': self.config_type,
-                         'dependencies': dependency_dict}
-
-  def GetConfigDataFromDict(self, config_dict):
-    return config_dict.get('dependencies', {})
-
-  @mock.patch('os.path')
-  @mock.patch('__builtin__.open')
-  def testInitBaseProperties(self, open_mock, path_mock):
-    # Init is not meant to be overridden, so we should be mocking the
-    # base_config's json module, even in subclasses.
-    json_module = 'dependency_manager.base_config.json'
-    with mock.patch(json_module) as json_mock:
-      json_mock.load.return_value = self.empty_dict.copy()
-      config = self.config_class('file_path')
-      self.assertEqual('file_path', config._config_path)
-      self.assertEqual(self.config_type, config.GetConfigType())
-      self.assertEqual(self.GetConfigDataFromDict(self.empty_dict),
-                       config._config_data)
-
-
-  @mock.patch('dependency_manager.dependency_info.DependencyInfo')
-  @mock.patch('os.path')
-  @mock.patch('__builtin__.open')
-  def testInitWithDependencies(self, open_mock, path_mock, dep_info_mock):
-    # Init is not meant to be overridden, so we should be mocking the
-    # base_config's json module, even in subclasses.
-    json_module = 'dependency_manager.base_config.json'
-    with mock.patch(json_module) as json_mock:
-      json_mock.load.return_value = self.one_dep_dict
-      config = self.config_class('file_path')
-      self.assertEqual('file_path', config._config_path)
-      self.assertEqual(self.config_type, config.GetConfigType())
-      self.assertEqual(self.GetConfigDataFromDict(self.one_dep_dict),
-                       config._config_data)
-
-  def testFormatPath(self):
-    self.assertEqual(None, self.config_class._FormatPath(None))
-    self.assertEqual('', self.config_class._FormatPath(''))
-    self.assertEqual('some_string',
-                     self.config_class._FormatPath('some_string'))
-
-    expected_path = os.path.join('some', 'file', 'path')
-    self.assertEqual(expected_path,
-                     self.config_class._FormatPath('some/file/path'))
-    self.assertEqual(expected_path,
-                     self.config_class._FormatPath('some\\file\\path'))
-
-  @mock.patch('dependency_manager.base_config.json')
-  @mock.patch('dependency_manager.dependency_info.DependencyInfo')
-  @mock.patch('os.path.exists')
-  @mock.patch('__builtin__.open')
-  def testIterDependenciesError(
-      self, open_mock, exists_mock, dep_info_mock, json_mock):
-    # Init is not meant to be overridden, so we should be mocking the
-    # base_config's json module, even in subclasses.
-    json_mock.load.return_value = self.one_dep_dict
-    config = self.config_class('file_path', writable=True)
-    self.assertEqual(self.GetConfigDataFromDict(self.one_dep_dict),
-                     config._config_data)
-    self.assertTrue(config._writable)
-    with self.assertRaises(dependency_manager.ReadWriteError):
-      for _ in config.IterDependencyInfo():
-        pass
-
-  @mock.patch('dependency_manager.base_config.json')
-  @mock.patch('dependency_manager.dependency_info.DependencyInfo')
-  @mock.patch('os.path.exists')
-  @mock.patch('__builtin__.open')
-  def testIterDependencies(
-      self, open_mock, exists_mock, dep_info_mock, json_mock):
-    json_mock.load.return_value = self.one_dep_dict
-    config = self.config_class('file_path')
-    self.assertEqual(self.GetConfigDataFromDict(self.one_dep_dict),
-                     config._config_data)
-    expected_dep_info = ['dep_info0', 'dep_info1', 'dep_info2']
-    dep_info_mock.side_effect = expected_dep_info
-    expected_calls = [
-        mock.call('dep', 'plat1_arch1', 'file_path', cs_bucket='bucket1',
-                  cs_hash='hash111', download_path='download_path111',
-                  cs_remote_path='cs_path111',
-                  local_paths=['local_path1110', 'local_path1111']),
-        mock.call('dep', 'plat1_arch1', 'file_path', cs_bucket='bucket1',
-                  cs_hash='hash112', download_path='download_path112',
-                  cs_remote_path='cs_path112',
-                  local_paths=['local_path1120', 'local_path1121']),
-        mock.call('dep', 'win_arch1', 'file_path', cs_bucket='bucket1',
-                  cs_hash='hash1w1',
-                  download_path=os.path.join('download', 'path', '1w1'),
-                  cs_remote_path='cs_path1w1',
-                  local_paths=[os.path.join('download', 'path', '1w10'),
-                               os.path.join('download', 'path', '1w11')])]
-    deps_seen = []
-    for dep_info in config.IterDependencyInfo():
-      deps_seen.append(dep_info)
-    dep_info_mock.assert_call_args(expected_calls)
-    self.assertItemsEqual(expected_dep_info, deps_seen)
-
-  @mock.patch('dependency_manager.base_config.json')
-  @mock.patch('os.path.exists')
-  @mock.patch('__builtin__.open')
-  def testIterDependenciesStaleGlob(self, open_mock, exists_mock, json_mock):
-    json_mock.load.return_value = self.one_dep_dict
-    config = self.config_class('file_path')
-
-    abspath = os.path.abspath
-    should_match = set(map(abspath, [
-        'dep_all_the_variables_0123456789abcdef0123456789abcdef01234567',
-        'dep_all_the_variables_123456789abcdef0123456789abcdef012345678']))
-    # Not testing case changes, because Windows is case-insensitive.
-    should_not_match = set(map(abspath, [
-        # A configuration that doesn't unzip shouldn't clear any stale unzips.
-        'dep_plat1_arch1_0123456789abcdef0123456789abcdef01234567',
-        # "Hash" component less than 40 characters (not a valid SHA1 hash).
-        'dep_all_the_variables_0123456789abcdef0123456789abcdef0123456',
-        # "Hash" component greater than 40 characters (not a valid SHA1 hash).
-        'dep_all_the_variables_0123456789abcdef0123456789abcdef012345678',
-        # "Hash" component not comprised of hex (not a valid SHA1 hash).
-        'dep_all_the_variables_0123456789gggggg0123456789gggggg01234567']))
-
-    # Create a fake filesystem just for glob to use
-    fake_fs = fake_filesystem.FakeFilesystem()
-    fake_glob = fake_filesystem_glob.FakeGlobModule(fake_fs)
-    for stale_dir in set.union(should_match, should_not_match):
-      fake_fs.CreateDirectory(stale_dir)
-      fake_fs.CreateFile(os.path.join(stale_dir, 'some_file'))
-
-    for dep_info in config.IterDependencyInfo():
-      if dep_info.platform == 'all_the_variables':
-        cs_info = dep_info.cloud_storage_info
-        actual_glob = cs_info._archive_info._stale_unzip_path_glob
-        actual_matches = set(fake_glob.glob(actual_glob))
-        self.assertItemsEqual(should_match, actual_matches)
diff --git a/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info.py b/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info.py
deleted file mode 100644
index 376c311..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import errno
-import os
-import stat
-
-from py_utils import cloud_storage
-
-from dependency_manager import exceptions
-
-class CloudStorageInfo(object):
-  def __init__(self, cs_bucket, cs_hash, download_path, cs_remote_path,
-               version_in_cs=None, archive_info=None):
-    """ Container for the information needed to download a dependency from
-        cloud storage.
-
-    Args:
-          cs_bucket: The cloud storage bucket the dependency is located in.
-          cs_hash: The hash of the file stored in cloud storage.
-          download_path: Where the file should be downloaded to.
-          cs_remote_path: Where the file is stored in the cloud storage bucket.
-          version_in_cs: The version of the file stored in cloud storage.
-          archive_info: An instance of ArchiveInfo if this dependency is an
-              archive. Else None.
-    """
-    self._download_path = download_path
-    self._cs_remote_path = cs_remote_path
-    self._cs_bucket = cs_bucket
-    self._cs_hash = cs_hash
-    self._version_in_cs = version_in_cs
-    self._archive_info = archive_info
-    if not self._has_minimum_data:
-      raise ValueError(
-          'Not enough information specified to initialize a cloud storage info.'
-          ' %s' % self)
-
-  def DependencyExistsInCloudStorage(self):
-    return cloud_storage.Exists(self._cs_bucket, self._cs_remote_path)
-
-  def GetRemotePath(self):
-    """Gets the path to a downloaded version of the dependency.
-
-    May not download the file if it has already been downloaded.
-    Will unzip the downloaded file if a non-empty archive_info was passed in at
-    init.
-
-    Returns: A path to an executable that was stored in cloud_storage, or None
-       if not found.
-
-    Raises:
-        CredentialsError: If cloud_storage credentials aren't configured.
-        PermissionError: If cloud_storage credentials are configured, but not
-            with an account that has permission to download the needed file.
-        NotFoundError: If the needed file does not exist where expected in
-            cloud_storage or the downloaded zip file.
-        ServerError: If an internal server error is hit while downloading the
-            needed file.
-        CloudStorageError: If another error occured while downloading the remote
-            path.
-        FileNotFoundError: If the download was otherwise unsuccessful.
-    """
-    if not self._has_minimum_data:
-      return None
-
-    download_dir = os.path.dirname(self._download_path)
-    if not os.path.exists(download_dir):
-      try:
-        os.makedirs(download_dir)
-      except OSError as e:
-        # The logic above is racy, and os.makedirs will raise an OSError if
-        # the directory exists.
-        if e.errno != errno.EEXIST:
-          raise
-
-    dependency_path = self._download_path
-    cloud_storage.GetIfHashChanged(
-        self._cs_remote_path, self._download_path, self._cs_bucket,
-        self._cs_hash)
-    if not os.path.exists(dependency_path):
-      raise exceptions.FileNotFoundError(dependency_path)
-
-    if self.has_archive_info:
-      dependency_path = self._archive_info.GetUnzippedPath()
-    else:
-      mode = os.stat(dependency_path).st_mode
-      os.chmod(dependency_path, mode | stat.S_IXUSR)
-    return os.path.abspath(dependency_path)
-
-  @property
-  def version_in_cs(self):
-    return self._version_in_cs
-
-  @property
-  def _has_minimum_data(self):
-    return all([self._cs_bucket, self._cs_remote_path, self._download_path,
-                self._cs_hash])
-
-
-  @property
-  def has_archive_info(self):
-    return bool(self._archive_info)
-
-  def __repr__(self):
-    return (
-        'CloudStorageInfo(download_path=%s, cs_remote_path=%s, cs_bucket=%s, '
-        'cs_hash=%s, version_in_cs=%s, archive_info=%s)' % (
-            self._download_path, self._cs_remote_path, self._cs_bucket,
-            self._cs_hash, self._version_in_cs, self._archive_info))
diff --git a/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py
deleted file mode 100644
index 699cd50..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/cloud_storage_info_unittest.py
+++ /dev/null
@@ -1,233 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import stat
-import unittest
-
-import mock
-from pyfakefs import fake_filesystem_unittest
-from py_utils import cloud_storage
-
-from dependency_manager import archive_info
-from dependency_manager import cloud_storage_info
-from dependency_manager import exceptions
-
-class CloudStorageInfoTest(unittest.TestCase):
-  def testInitCloudStorageInfoErrors(self):
-    # Must specify cloud storage information atomically.
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      None, None, None, None)
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      'cs_bucket', None, None, None)
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      None, 'cs_hash', None, None)
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      None, None, 'download_path', None)
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      None, None, None, 'cs_remote_path')
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      None, 'cs_hash', 'download_path', 'cs_remote_path')
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      'cs_bucket', None, 'download_path', 'cs_remote_path')
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      'cs_bucket', 'cs_hash', None, 'cs_remote_path')
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      'cs_bucket', 'cs_hash', 'download_path', None)
-
-  def testInitWithVersion(self):
-    self.assertRaises(
-        ValueError, cloud_storage_info.CloudStorageInfo, None, None, None,
-        'cs_remote_path', version_in_cs='version_in_cs')
-    self.assertRaises(
-        ValueError, cloud_storage_info.CloudStorageInfo, None, 'cs_hash',
-        'download_path', 'cs_remote_path', version_in_cs='version_in_cs')
-
-    cs_info = cloud_storage_info.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', 'download_path', 'cs_remote_path',
-        version_in_cs='version_in_cs')
-    self.assertEqual('cs_hash', cs_info._cs_hash)
-    self.assertEqual('cs_bucket', cs_info._cs_bucket)
-    self.assertEqual('cs_remote_path', cs_info._cs_remote_path)
-    self.assertEqual('download_path', cs_info._download_path)
-    self.assertEqual('version_in_cs', cs_info._version_in_cs)
-
-  def testInitWithArchiveInfoErrors(self):
-    zip_info = archive_info.ArchiveInfo(
-        'download_path', 'unzip_location', 'path_within_archive')
-    self.assertRaises(
-        ValueError, cloud_storage_info.CloudStorageInfo, None, None, None, None,
-        archive_info=zip_info)
-    self.assertRaises(
-        ValueError, cloud_storage_info.CloudStorageInfo, None, None, None,
-        'cs_remote_path', archive_info=zip_info)
-    self.assertRaises(
-        ValueError, cloud_storage_info.CloudStorageInfo, 'cs_bucket', 'cs_hash',
-        None, 'cs_remote_path', archive_info=zip_info)
-    self.assertRaises(ValueError, cloud_storage_info.CloudStorageInfo,
-                      'cs_bucket', 'cs_hash',
-                      'cs_remote_path', None, version_in_cs='version',
-                      archive_info=zip_info)
-
-
-  def testInitWithArchiveInfo(self):
-    zip_info = archive_info.ArchiveInfo(
-        'download_path', 'unzip_location', 'path_within_archive')
-    cs_info = cloud_storage_info.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', 'download_path', 'cs_remote_path',
-        archive_info=zip_info)
-    self.assertEqual('cs_hash', cs_info._cs_hash)
-    self.assertEqual('cs_bucket', cs_info._cs_bucket)
-    self.assertEqual('cs_remote_path', cs_info._cs_remote_path)
-    self.assertEqual('download_path', cs_info._download_path)
-    self.assertEqual(zip_info, cs_info._archive_info)
-    self.assertFalse(cs_info._version_in_cs)
-
-  def testInitWithVersionAndArchiveInfo(self):
-    zip_info = archive_info.ArchiveInfo(
-        'download_path', 'unzip_location', 'path_within_archive')
-    cs_info = cloud_storage_info.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', 'download_path',
-        'cs_remote_path', version_in_cs='version_in_cs',
-        archive_info=zip_info)
-    self.assertEqual('cs_hash', cs_info._cs_hash)
-    self.assertEqual('cs_bucket', cs_info._cs_bucket)
-    self.assertEqual('cs_remote_path', cs_info._cs_remote_path)
-    self.assertEqual('download_path', cs_info._download_path)
-    self.assertEqual(zip_info, cs_info._archive_info)
-    self.assertEqual('version_in_cs', cs_info._version_in_cs)
-
-  def testInitMinimumCloudStorageInfo(self):
-    cs_info = cloud_storage_info.CloudStorageInfo(
-        'cs_bucket',
-        'cs_hash', 'download_path',
-        'cs_remote_path')
-    self.assertEqual('cs_hash', cs_info._cs_hash)
-    self.assertEqual('cs_bucket', cs_info._cs_bucket)
-    self.assertEqual('cs_remote_path', cs_info._cs_remote_path)
-    self.assertEqual('download_path', cs_info._download_path)
-    self.assertFalse(cs_info._version_in_cs)
-    self.assertFalse(cs_info._archive_info)
-
-
-class TestGetRemotePath(fake_filesystem_unittest.TestCase):
-  def setUp(self):
-    self.setUpPyfakefs()
-    self.config_path = '/test/dep_config.json'
-    self.fs.CreateFile(self.config_path, contents='{}')
-    self.download_path = '/foo/download_path'
-    self.fs.CreateFile(
-        self.download_path, contents='1010110', st_mode=stat.S_IWOTH)
-    self.cs_info = cloud_storage_info.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', self.download_path, 'cs_remote_path',
-        version_in_cs='1.2.3.4',)
-
-  def tearDown(self):
-    self.tearDownPyfakefs()
-
-  @mock.patch(
-      'py_utils.cloud_storage.GetIfHashChanged')
-  def testGetRemotePathNoArchive(self, cs_get_mock):
-    def _GetIfHashChangedMock(cs_path, download_path, bucket, file_hash):
-      del cs_path, bucket, file_hash
-      if not os.path.exists(download_path):
-        self.fs.CreateFile(download_path, contents='1010001010101010110101')
-    cs_get_mock.side_effect = _GetIfHashChangedMock
-    # All of the needed information is given, and the downloaded path exists
-    # after calling cloud storage.
-    self.assertEqual(
-        os.path.abspath(self.download_path),
-        self.cs_info.GetRemotePath())
-    self.assertTrue(os.stat(self.download_path).st_mode & stat.S_IXUSR)
-
-    # All of the needed information is given, but the downloaded path doesn't
-    # exists after calling cloud storage.
-    self.fs.RemoveObject(self.download_path)
-    cs_get_mock.side_effect = [True]
-    self.assertRaises(
-        exceptions.FileNotFoundError, self.cs_info.GetRemotePath)
-
-  @mock.patch(
-      'dependency_manager.dependency_manager_util.UnzipArchive')
-  @mock.patch(
-      'dependency_manager.cloud_storage_info.cloud_storage.GetIfHashChanged') # pylint: disable=line-too-long
-  def testGetRemotePathWithArchive(self, cs_get_mock, unzip_mock):
-    def _GetIfHashChangedMock(cs_path, download_path, bucket, file_hash):
-      del cs_path, bucket, file_hash
-      if not os.path.exists(download_path):
-        self.fs.CreateFile(download_path, contents='1010001010101010110101')
-    cs_get_mock.side_effect = _GetIfHashChangedMock
-
-    unzip_path = os.path.join(
-        os.path.dirname(self.download_path), 'unzip_dir')
-    path_within_archive = os.path.join('path', 'within', 'archive')
-    dep_path = os.path.join(unzip_path, path_within_archive)
-    def _UnzipFileMock(archive_file, unzip_location, tmp_location=None):
-      del archive_file, tmp_location
-      self.fs.CreateFile(dep_path)
-      self.fs.CreateFile(os.path.join(unzip_location, 'extra', 'path'))
-      self.fs.CreateFile(os.path.join(unzip_location, 'another_extra_path'))
-    unzip_mock.side_effect = _UnzipFileMock
-
-    # Create a stale directory that's expected to get deleted
-    stale_unzip_path_glob = os.path.join(
-        os.path.dirname(self.download_path), 'unzip_dir_*')
-    stale_path = os.path.join(
-        os.path.dirname(self.download_path), 'unzip_dir_stale')
-    self.fs.CreateDirectory(stale_path)
-    self.fs.CreateFile(os.path.join(stale_path, 'some_file'))
-
-    self.assertFalse(os.path.exists(dep_path))
-    zip_info = archive_info.ArchiveInfo(
-        self.download_path, unzip_path, path_within_archive,
-        stale_unzip_path_glob)
-    self.cs_info = cloud_storage_info.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', self.download_path, 'cs_remote_path',
-        version_in_cs='1.2.3.4', archive_info=zip_info)
-
-    self.assertFalse(unzip_mock.called)
-    self.assertEqual(
-        os.path.abspath(dep_path),
-        self.cs_info.GetRemotePath())
-    self.assertTrue(os.path.exists(dep_path))
-    self.assertTrue(stat.S_IMODE(os.stat(os.path.abspath(dep_path)).st_mode) &
-                    (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR))
-    unzip_mock.assert_called_once_with(self.download_path, unzip_path)
-
-    # Stale directory should have been deleted
-    self.assertFalse(os.path.exists(stale_path))
-
-    # Should not need to unzip a second time, but should return the same path.
-    unzip_mock.reset_mock()
-    self.assertTrue(os.path.exists(dep_path))
-    self.assertEqual(
-        os.path.abspath(dep_path),
-        self.cs_info.GetRemotePath())
-    self.assertTrue(stat.S_IMODE(os.stat(os.path.abspath(dep_path)).st_mode) &
-                    (stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR))
-    self.assertFalse(unzip_mock.called)
-
-
-  @mock.patch(
-      'py_utils.cloud_storage.GetIfHashChanged')
-  def testGetRemotePathCloudStorageErrors(self, cs_get_mock):
-    cs_get_mock.side_effect = cloud_storage.CloudStorageError
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      self.cs_info.GetRemotePath)
-
-    cs_get_mock.side_effect = cloud_storage.ServerError
-    self.assertRaises(cloud_storage.ServerError,
-                      self.cs_info.GetRemotePath)
-
-    cs_get_mock.side_effect = cloud_storage.NotFoundError
-    self.assertRaises(cloud_storage.NotFoundError,
-                      self.cs_info.GetRemotePath)
-
-    cs_get_mock.side_effect = cloud_storage.PermissionError
-    self.assertRaises(cloud_storage.PermissionError,
-                      self.cs_info.GetRemotePath)
-
-    cs_get_mock.side_effect = cloud_storage.CredentialsError
-    self.assertRaises(cloud_storage.CredentialsError,
-                      self.cs_info.GetRemotePath)
diff --git a/systrace/catapult/dependency_manager/dependency_manager/dependency_info.py b/systrace/catapult/dependency_manager/dependency_manager/dependency_info.py
deleted file mode 100644
index 942d57e..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/dependency_info.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-class DependencyInfo(object):
-  def __init__(self, dependency, platform, config_path, local_path_info=None,
-               cloud_storage_info=None):
-    """ Container for the information needed for each dependency/platform pair
-    in the dependency_manager.
-
-    Args:
-        Required:
-          dependency: Name of the dependency.
-          platform: Name of the platform to be run on.
-          config_path: Path to the config_path this information came from. Used
-                       for error messages to improve debugging.
-
-        Optional:
-          local_paths: A list of paths to search in order for a local file.
-          cloud_storage_info: An instance of CloudStorageInfo.
-    """
-    # TODO(aiolos): update the above doc string for A) the usage of zip files
-    # and B) supporting lists of local_paths to be checked for most recently
-    # changed files.
-    if not dependency or not platform:
-      raise ValueError(
-          'Must supply both a dependency and platform to DependencyInfo')
-
-    self._dependency = dependency
-    self._platform = platform
-    self._config_paths = [config_path]
-    self._local_path_info = local_path_info
-    self._cloud_storage_info = cloud_storage_info
-
-  def Update(self, new_dep_info):
-    """Add the information from |new_dep_info| to this instance.
-    """
-    self._config_paths.extend(new_dep_info.config_paths)
-    if (self.dependency != new_dep_info.dependency or
-        self.platform != new_dep_info.platform):
-      raise ValueError(
-          'Cannot update DependencyInfo with different dependency or platform.'
-          'Existing dep: %s, existing platform: %s. New dep: %s, new platform:'
-          '%s. Config_paths conflicting: %s' % (
-              self.dependency, self.platform, new_dep_info.dependency,
-              new_dep_info.platform, self.config_paths))
-    if new_dep_info.has_cloud_storage_info:
-      if self.has_cloud_storage_info:
-        raise ValueError(
-            'Overriding cloud storage data is not allowed when updating a '
-            'DependencyInfo. Conflict in dependency %s on platform %s in '
-            'config_paths: %s.' % (self.dependency, self.platform,
-                                   self.config_paths))
-      else:
-        self._cloud_storage_info = new_dep_info._cloud_storage_info
-    if not self._local_path_info:
-      self._local_path_info = new_dep_info._local_path_info
-    else:
-      self._local_path_info.Update(new_dep_info._local_path_info)
-
-  def GetRemotePath(self):
-    """Gets the path to a downloaded version of the dependency.
-
-    May not download the file if it has already been downloaded.
-    Will unzip the downloaded file if specified in the config
-    via unzipped_hash.
-
-    Returns: A path to an executable that was stored in cloud_storage, or None
-       if not found.
-
-    Raises:
-        CredentialsError: If cloud_storage credentials aren't configured.
-        PermissionError: If cloud_storage credentials are configured, but not
-            with an account that has permission to download the needed file.
-        NotFoundError: If the needed file does not exist where expected in
-            cloud_storage or the downloaded zip file.
-        ServerError: If an internal server error is hit while downloading the
-            needed file.
-        CloudStorageError: If another error occured while downloading the remote
-            path.
-        FileNotFoundError: If the download was otherwise unsuccessful.
-    """
-    if self.has_cloud_storage_info:
-      return self._cloud_storage_info.GetRemotePath()
-    return None
-
-  def GetRemotePathVersion(self):
-    if self.has_cloud_storage_info:
-      return self._cloud_storage_info.version_in_cs
-    return None
-
-  def GetLocalPath(self):
-    """Gets the path to a local version of the dependency.
-
-    Returns: A path to a local dependency, or None if not found.
-
-    """
-    if self.has_local_path_info:
-      return self._local_path_info.GetLocalPath()
-    return None
-
-  @property
-  def dependency(self):
-    return self._dependency
-
-  @property
-  def platform(self):
-    return self._platform
-
-  @property
-  def config_paths(self):
-    return self._config_paths
-
-  @property
-  def local_path_info(self):
-    return self._local_path_info
-
-  @property
-  def has_cloud_storage_info(self):
-    return bool(self._cloud_storage_info)
-
-  @property
-  def has_local_path_info(self):
-    return bool(self._local_path_info)
-
-  @property
-  def cloud_storage_info(self):
-    return self._cloud_storage_info
diff --git a/systrace/catapult/dependency_manager/dependency_manager/dependency_info_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/dependency_info_unittest.py
deleted file mode 100644
index 6117cd3..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/dependency_info_unittest.py
+++ /dev/null
@@ -1,234 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-import dependency_manager
-
-class DependencyInfoTest(unittest.TestCase):
-  def testInitRequiredInfo(self):
-    # Must have a dependency, platform and file_path.
-    self.assertRaises(ValueError, dependency_manager.DependencyInfo,
-                      None, None, None)
-    self.assertRaises(ValueError, dependency_manager.DependencyInfo,
-                      'dep', None, None)
-    self.assertRaises(ValueError, dependency_manager.DependencyInfo,
-                      None, 'plat', None)
-    self.assertRaises(ValueError, dependency_manager.DependencyInfo,
-                      None, None, 'config_path')
-    # Empty DependencyInfo.
-    empty_di = dependency_manager.DependencyInfo('dep', 'plat', 'config_path')
-    self.assertEqual('dep', empty_di.dependency)
-    self.assertEqual('plat', empty_di.platform)
-    self.assertEqual(['config_path'], empty_di.config_paths)
-    self.assertFalse(empty_di.has_local_path_info)
-    self.assertFalse(empty_di.has_cloud_storage_info)
-
-  def testInitLocalPaths(self):
-    local_path_info = dependency_manager.LocalPathInfo(['path0', 'path1'])
-    dep_info = dependency_manager.DependencyInfo(
-        'dep', 'platform', 'config_path', local_path_info
-        )
-    self.assertEqual('dep', dep_info.dependency)
-    self.assertEqual('platform', dep_info.platform)
-    self.assertEqual(['config_path'], dep_info.config_paths)
-    self.assertEqual(local_path_info, dep_info._local_path_info)
-    self.assertFalse(dep_info.has_cloud_storage_info)
-
-  def testInitCloudStorageInfo(self):
-    cs_info = dependency_manager.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', 'dowload_path', 'cs_remote_path')
-    dep_info = dependency_manager.DependencyInfo(
-        'dep', 'platform', 'config_path', cloud_storage_info=cs_info)
-    self.assertEqual('dep', dep_info.dependency)
-    self.assertEqual('platform', dep_info.platform)
-    self.assertEqual(['config_path'], dep_info.config_paths)
-    self.assertFalse(dep_info.has_local_path_info)
-    self.assertTrue(dep_info.has_cloud_storage_info)
-    self.assertEqual(cs_info, dep_info._cloud_storage_info)
-
-  def testInitAllInfo(self):
-    cs_info = dependency_manager.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', 'dowload_path', 'cs_remote_path')
-    dep_info = dependency_manager.DependencyInfo(
-        'dep', 'platform', 'config_path', cloud_storage_info=cs_info)
-    self.assertEqual('dep', dep_info.dependency)
-    self.assertEqual('platform', dep_info.platform)
-    self.assertEqual(['config_path'], dep_info.config_paths)
-    self.assertFalse(dep_info.has_local_path_info)
-    self.assertTrue(dep_info.has_cloud_storage_info)
-
-
-  def testUpdateRequiredArgsConflicts(self):
-    lp_info = dependency_manager.LocalPathInfo(['path0', 'path2'])
-    dep_info1 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path1', local_path_info=lp_info)
-    dep_info2 = dependency_manager.DependencyInfo(
-        'dep1', 'platform2', 'config_path2', local_path_info=lp_info)
-    dep_info3 = dependency_manager.DependencyInfo(
-        'dep2', 'platform1', 'config_path3', local_path_info=lp_info)
-    self.assertRaises(ValueError, dep_info1.Update, dep_info2)
-    self.assertRaises(ValueError, dep_info1.Update, dep_info3)
-    self.assertRaises(ValueError, dep_info3.Update, dep_info2)
-
-  def testUpdateMinimumCloudStorageInfo(self):
-    dep_info1 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path1')
-
-    cs_info2 = dependency_manager.CloudStorageInfo(
-        cs_bucket='cs_bucket2', cs_hash='cs_hash2',
-        download_path='download_path2', cs_remote_path='cs_remote_path2')
-    dep_info2 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path2', cloud_storage_info=cs_info2)
-
-    dep_info3 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path3')
-
-    cs_info4 = dependency_manager.CloudStorageInfo(
-        cs_bucket='cs_bucket4', cs_hash='cs_hash4',
-        download_path='download_path4', cs_remote_path='cs_remote_path4')
-    dep_info4 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path4', cloud_storage_info=cs_info4)
-
-    self.assertEqual('dep1', dep_info1.dependency)
-    self.assertEqual('platform1', dep_info1.platform)
-    self.assertEqual(['config_path1'], dep_info1.config_paths)
-
-    dep_info1.Update(dep_info2)
-    self.assertFalse(dep_info1.has_local_path_info)
-    self.assertEqual('dep1', dep_info1.dependency)
-    self.assertEqual('platform1', dep_info1.platform)
-    self.assertEqual(['config_path1', 'config_path2'], dep_info1.config_paths)
-
-    cs_info = dep_info1._cloud_storage_info
-    self.assertEqual(cs_info, cs_info2)
-    self.assertEqual('cs_bucket2', cs_info._cs_bucket)
-    self.assertEqual('cs_hash2', cs_info._cs_hash)
-    self.assertEqual('download_path2', cs_info._download_path)
-    self.assertEqual('cs_remote_path2', cs_info._cs_remote_path)
-
-    dep_info1.Update(dep_info3)
-    self.assertEqual('dep1', dep_info1.dependency)
-    self.assertEqual('platform1', dep_info1.platform)
-    self.assertEqual(['config_path1', 'config_path2', 'config_path3'],
-                     dep_info1.config_paths)
-    self.assertFalse(dep_info1.has_local_path_info)
-    cs_info = dep_info1._cloud_storage_info
-    self.assertEqual(cs_info, cs_info2)
-    self.assertEqual('cs_bucket2', cs_info._cs_bucket)
-    self.assertEqual('cs_hash2', cs_info._cs_hash)
-    self.assertEqual('download_path2', cs_info._download_path)
-    self.assertEqual('cs_remote_path2', cs_info._cs_remote_path)
-
-    self.assertRaises(ValueError, dep_info1.Update, dep_info4)
-
-  def testUpdateMaxCloudStorageInfo(self):
-    dep_info1 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path1')
-
-    zip_info2 = dependency_manager.ArchiveInfo(
-        'archive_path2', 'unzip_path2', 'path_withing_archive2')
-    cs_info2 = dependency_manager.CloudStorageInfo(
-        'cs_bucket2', 'cs_hash2', 'download_path2', 'cs_remote_path2',
-        version_in_cs='2.1.1', archive_info=zip_info2)
-    dep_info2 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path2', cloud_storage_info=cs_info2)
-
-    dep_info3 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path3')
-
-    zip_info4 = dependency_manager.ArchiveInfo(
-        'archive_path4', 'unzip_path4', 'path_withing_archive4')
-    cs_info4 = dependency_manager.CloudStorageInfo(
-        'cs_bucket4', 'cs_hash4', 'download_path4', 'cs_remote_path4',
-        version_in_cs='4.2.1', archive_info=zip_info4)
-    dep_info4 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path4', cloud_storage_info=cs_info4)
-
-    self.assertEqual('dep1', dep_info1.dependency)
-    self.assertEqual('platform1', dep_info1.platform)
-    self.assertEqual(['config_path1'], dep_info1.config_paths)
-
-    dep_info1.Update(dep_info2)
-    self.assertFalse(dep_info1.has_local_path_info)
-    self.assertEqual('dep1', dep_info1.dependency)
-    self.assertEqual('platform1', dep_info1.platform)
-    self.assertEqual(['config_path1', 'config_path2'], dep_info1.config_paths)
-
-    cs_info = dep_info1._cloud_storage_info
-    self.assertEqual(cs_info, cs_info2)
-    self.assertEqual('cs_bucket2', cs_info._cs_bucket)
-    self.assertEqual('cs_hash2', cs_info._cs_hash)
-    self.assertEqual('download_path2', cs_info._download_path)
-    self.assertEqual('cs_remote_path2', cs_info._cs_remote_path)
-    self.assertEqual('cs_remote_path2', cs_info._cs_remote_path)
-
-    dep_info1.Update(dep_info3)
-    self.assertEqual('dep1', dep_info1.dependency)
-    self.assertEqual('platform1', dep_info1.platform)
-    self.assertEqual(['config_path1', 'config_path2', 'config_path3'],
-                     dep_info1.config_paths)
-    self.assertFalse(dep_info1.has_local_path_info)
-    cs_info = dep_info1._cloud_storage_info
-    self.assertEqual(cs_info, cs_info2)
-    self.assertEqual('cs_bucket2', cs_info._cs_bucket)
-    self.assertEqual('cs_hash2', cs_info._cs_hash)
-    self.assertEqual('download_path2', cs_info._download_path)
-    self.assertEqual('cs_remote_path2', cs_info._cs_remote_path)
-
-    self.assertRaises(ValueError, dep_info1.Update, dep_info4)
-
-  def testUpdateAllInfo(self):
-    lp_info1 = dependency_manager.LocalPathInfo(['path1'])
-    dep_info1 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path1', local_path_info=lp_info1)
-    cs_info2 = dependency_manager.CloudStorageInfo(
-        cs_bucket='cs_bucket2', cs_hash='cs_hash2',
-        download_path='download_path2', cs_remote_path='cs_remote_path2')
-    lp_info2 = dependency_manager.LocalPathInfo(['path2'])
-    dep_info2 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path2', local_path_info=lp_info2,
-        cloud_storage_info=cs_info2)
-    lp_info3 = dependency_manager.LocalPathInfo(['path3'])
-    dep_info3 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path3', local_path_info=lp_info3)
-    lp_info4 = dependency_manager.LocalPathInfo(['path4'])
-    cs_info4 = dependency_manager.CloudStorageInfo(
-        cs_bucket='cs_bucket4', cs_hash='cs_hash4',
-        download_path='download_path4', cs_remote_path='cs_remote_path4')
-    dep_info4 = dependency_manager.DependencyInfo(
-        'dep1', 'platform1', 'config_path4', local_path_info=lp_info4,
-        cloud_storage_info=cs_info4)
-
-    self.assertTrue(dep_info1._local_path_info.IsPathInLocalPaths('path1'))
-    self.assertFalse(dep_info1._local_path_info.IsPathInLocalPaths('path2'))
-    self.assertFalse(dep_info1._local_path_info.IsPathInLocalPaths('path3'))
-    self.assertFalse(dep_info1._local_path_info.IsPathInLocalPaths('path4'))
-
-    dep_info1.Update(dep_info2)
-    cs_info = dep_info1._cloud_storage_info
-    self.assertEqual(cs_info, cs_info2)
-    self.assertEqual('cs_bucket2', cs_info._cs_bucket)
-    self.assertEqual('cs_hash2', cs_info._cs_hash)
-    self.assertEqual('download_path2', cs_info._download_path)
-    self.assertEqual('cs_remote_path2', cs_info._cs_remote_path)
-    self.assertTrue(dep_info1._local_path_info.IsPathInLocalPaths('path1'))
-    self.assertTrue(dep_info1._local_path_info.IsPathInLocalPaths('path2'))
-    self.assertFalse(dep_info1._local_path_info.IsPathInLocalPaths('path3'))
-    self.assertFalse(dep_info1._local_path_info.IsPathInLocalPaths('path4'))
-
-    dep_info1.Update(dep_info3)
-    cs_info = dep_info1._cloud_storage_info
-    self.assertEqual(cs_info, cs_info2)
-    self.assertEqual('cs_bucket2', cs_info._cs_bucket)
-    self.assertEqual('cs_hash2', cs_info._cs_hash)
-    self.assertEqual('download_path2', cs_info._download_path)
-    self.assertEqual('cs_remote_path2', cs_info._cs_remote_path)
-    self.assertTrue(dep_info1._local_path_info.IsPathInLocalPaths('path1'))
-    self.assertTrue(dep_info1._local_path_info.IsPathInLocalPaths('path2'))
-    self.assertTrue(dep_info1._local_path_info.IsPathInLocalPaths('path3'))
-    self.assertFalse(dep_info1._local_path_info.IsPathInLocalPaths('path4'))
-
-    self.assertRaises(ValueError, dep_info1.Update, dep_info4)
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_unittest.py
deleted file mode 100644
index 86d17f7..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_unittest.py
+++ /dev/null
@@ -1,527 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=unused-argument
-
-import mock
-
-from pyfakefs import fake_filesystem_unittest
-from py_utils import cloud_storage
-
-import dependency_manager
-from dependency_manager import exceptions
-
-
-class DependencyManagerTest(fake_filesystem_unittest.TestCase):
-
-  def setUp(self):
-    self.lp_info012 = dependency_manager.LocalPathInfo(
-        ['path0', 'path1', 'path2'])
-    self.cloud_storage_info = dependency_manager.CloudStorageInfo(
-        'cs_bucket', 'cs_hash', 'download_path', 'cs_remote_path')
-
-    self.dep_info = dependency_manager.DependencyInfo(
-        'dep', 'platform', 'config_file', local_path_info=self.lp_info012,
-        cloud_storage_info=self.cloud_storage_info)
-    self.setUpPyfakefs()
-
-  def tearDown(self):
-    self.tearDownPyfakefs()
-
-  # TODO(nednguyen): add a test that construct
-  # dependency_manager.DependencyManager from a list of DependencyInfo.
-  def testErrorInit(self):
-    with self.assertRaises(ValueError):
-      dependency_manager.DependencyManager(None)
-    with self.assertRaises(ValueError):
-      dependency_manager.DependencyManager('config_file?')
-
-  def testInitialUpdateDependencies(self):
-    dep_manager = dependency_manager.DependencyManager([])
-
-    # Empty BaseConfig.
-    dep_manager._lookup_dict = {}
-    base_config_mock = mock.MagicMock(spec=dependency_manager.BaseConfig)
-    base_config_mock.IterDependencyInfo.return_value = iter([])
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertFalse(dep_manager._lookup_dict)
-
-    # One dependency/platform in a BaseConfig.
-    dep_manager._lookup_dict = {}
-    base_config_mock = mock.MagicMock(spec=dependency_manager.BaseConfig)
-    dep_info = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep = 'dependency'
-    plat = 'platform'
-    dep_info.dependency = dep
-    dep_info.platform = plat
-    base_config_mock.IterDependencyInfo.return_value = iter([dep_info])
-    expected_lookup_dict = {dep: {plat: dep_info}}
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info.Update.called)
-
-    # One dependency multiple platforms in a BaseConfig.
-    dep_manager._lookup_dict = {}
-    base_config_mock = mock.MagicMock(spec=dependency_manager.BaseConfig)
-    dep = 'dependency'
-    plat1 = 'platform1'
-    plat2 = 'platform2'
-    dep_info1 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info1.dependency = dep
-    dep_info1.platform = plat1
-    dep_info2 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info2.dependency = dep
-    dep_info2.platform = plat2
-    base_config_mock.IterDependencyInfo.return_value = iter([dep_info1,
-                                                             dep_info2])
-    expected_lookup_dict = {dep: {plat1: dep_info1,
-                                  plat2: dep_info2}}
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info1.Update.called)
-    self.assertFalse(dep_info2.Update.called)
-
-    # Multiple dependencies, multiple platforms in a BaseConfig.
-    dep_manager._lookup_dict = {}
-    base_config_mock = mock.MagicMock(spec=dependency_manager.BaseConfig)
-    dep1 = 'dependency1'
-    dep2 = 'dependency2'
-    plat1 = 'platform1'
-    plat2 = 'platform2'
-    dep_info1 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info1.dependency = dep1
-    dep_info1.platform = plat1
-    dep_info2 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info2.dependency = dep1
-    dep_info2.platform = plat2
-    dep_info3 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info3.dependency = dep2
-    dep_info3.platform = plat2
-    base_config_mock.IterDependencyInfo.return_value = iter(
-        [dep_info1, dep_info2, dep_info3])
-    expected_lookup_dict = {dep1: {plat1: dep_info1,
-                                   plat2: dep_info2},
-                            dep2: {plat2: dep_info3}}
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info1.Update.called)
-    self.assertFalse(dep_info2.Update.called)
-    self.assertFalse(dep_info3.Update.called)
-
-  def testFollowupUpdateDependenciesNoOverlap(self):
-    dep_manager = dependency_manager.DependencyManager([])
-    dep = 'dependency'
-    dep1 = 'dependency1'
-    dep2 = 'dependency2'
-    dep3 = 'dependency3'
-    plat1 = 'platform1'
-    plat2 = 'platform2'
-    plat3 = 'platform3'
-    dep_info_a = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info_a.dependency = dep1
-    dep_info_a.platform = plat1
-    dep_info_b = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info_b.dependency = dep1
-    dep_info_b.platform = plat2
-    dep_info_c = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info_c.dependency = dep
-    dep_info_c.platform = plat1
-
-    start_lookup_dict = {dep: {plat1: dep_info_a,
-                               plat2: dep_info_b},
-                         dep1: {plat1: dep_info_c}}
-    base_config_mock = mock.MagicMock(spec=dependency_manager.BaseConfig)
-
-    # Empty BaseConfig.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    base_config_mock.IterDependencyInfo.return_value = iter([])
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(start_lookup_dict, dep_manager._lookup_dict)
-
-    # One dependency/platform in a BaseConfig.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    dep_info = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info.dependency = dep3
-    dep_info.platform = plat1
-    base_config_mock.IterDependencyInfo.return_value = iter([dep_info])
-    expected_lookup_dict = {dep: {plat1: dep_info_a,
-                                  plat2: dep_info_b},
-                            dep1: {plat1: dep_info_c},
-                            dep3: {plat3: dep_info}}
-
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertItemsEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info.Update.called)
-    self.assertFalse(dep_info_a.Update.called)
-    self.assertFalse(dep_info_b.Update.called)
-    self.assertFalse(dep_info_c.Update.called)
-
-    # One dependency multiple platforms in a BaseConfig.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    dep_info1 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info1.dependency = dep2
-    dep_info1.platform = plat1
-    dep_info2 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info2.dependency = dep2
-    dep_info2.platform = plat2
-    base_config_mock.IterDependencyInfo.return_value = iter([dep_info1,
-                                                             dep_info2])
-    expected_lookup_dict = {dep: {plat1: dep_info_a,
-                                  plat2: dep_info_b},
-                            dep1: {plat1: dep_info_c},
-                            dep2: {plat1: dep_info1,
-                                   plat2: dep_info2}}
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info1.Update.called)
-    self.assertFalse(dep_info2.Update.called)
-    self.assertFalse(dep_info_a.Update.called)
-    self.assertFalse(dep_info_b.Update.called)
-    self.assertFalse(dep_info_c.Update.called)
-
-    # Multiple dependencies, multiple platforms in a BaseConfig.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    dep1 = 'dependency1'
-    plat1 = 'platform1'
-    plat2 = 'platform2'
-    dep_info1 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info1.dependency = dep2
-    dep_info1.platform = plat1
-    dep_info2 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info2.dependency = dep2
-    dep_info2.platform = plat2
-    dep_info3 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info3.dependency = dep3
-    dep_info3.platform = plat2
-    base_config_mock.IterDependencyInfo.return_value = iter(
-        [dep_info1, dep_info2, dep_info3])
-    expected_lookup_dict = {dep: {plat1: dep_info_a,
-                                  plat2: dep_info_b},
-                            dep1: {plat1: dep_info_c},
-                            dep2: {plat1: dep_info1,
-                                   plat2: dep_info2},
-                            dep3: {plat2: dep_info3}}
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info1.Update.called)
-    self.assertFalse(dep_info2.Update.called)
-    self.assertFalse(dep_info3.Update.called)
-    self.assertFalse(dep_info_a.Update.called)
-    self.assertFalse(dep_info_b.Update.called)
-    self.assertFalse(dep_info_c.Update.called)
-
-    # Ensure the testing data wasn't corrupted.
-    self.assertEqual(start_lookup_dict,
-                     {dep: {plat1: dep_info_a,
-                            plat2: dep_info_b},
-                      dep1: {plat1: dep_info_c}})
-
-  def testFollowupUpdateDependenciesWithCollisions(self):
-    dep_manager = dependency_manager.DependencyManager([])
-    dep = 'dependency'
-    dep1 = 'dependency1'
-    dep2 = 'dependency2'
-    plat1 = 'platform1'
-    plat2 = 'platform2'
-    dep_info_a = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info_a.dependency = dep1
-    dep_info_a.platform = plat1
-    dep_info_b = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info_b.dependency = dep1
-    dep_info_b.platform = plat2
-    dep_info_c = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info_c.dependency = dep
-    dep_info_c.platform = plat1
-
-    start_lookup_dict = {dep: {plat1: dep_info_a,
-                               plat2: dep_info_b},
-                         dep1: {plat1: dep_info_c}}
-    base_config_mock = mock.MagicMock(spec=dependency_manager.BaseConfig)
-
-    # One dependency/platform.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    dep_info = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info.dependency = dep
-    dep_info.platform = plat1
-    base_config_mock.IterDependencyInfo.return_value = iter([dep_info])
-    expected_lookup_dict = {dep: {plat1: dep_info_a,
-                                  plat2: dep_info_b},
-                            dep1: {plat1: dep_info_c}}
-
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertItemsEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    dep_info_a.Update.assert_called_once_with(dep_info)
-    self.assertFalse(dep_info.Update.called)
-    self.assertFalse(dep_info_b.Update.called)
-    self.assertFalse(dep_info_c.Update.called)
-    dep_info_a.reset_mock()
-    dep_info_b.reset_mock()
-    dep_info_c.reset_mock()
-
-    # One dependency multiple platforms in a BaseConfig.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    dep_info1 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info1.dependency = dep1
-    dep_info1.platform = plat1
-    dep_info2 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info2.dependency = dep2
-    dep_info2.platform = plat2
-    base_config_mock.IterDependencyInfo.return_value = iter([dep_info1,
-                                                             dep_info2])
-    expected_lookup_dict = {dep: {plat1: dep_info_a,
-                                  plat2: dep_info_b},
-                            dep1: {plat1: dep_info_c},
-                            dep2: {plat2: dep_info2}}
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info1.Update.called)
-    self.assertFalse(dep_info2.Update.called)
-    self.assertFalse(dep_info_a.Update.called)
-    self.assertFalse(dep_info_b.Update.called)
-    dep_info_c.Update.assert_called_once_with(dep_info1)
-    dep_info_a.reset_mock()
-    dep_info_b.reset_mock()
-    dep_info_c.reset_mock()
-
-    # Multiple dependencies, multiple platforms in a BaseConfig.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    dep1 = 'dependency1'
-    plat1 = 'platform1'
-    plat2 = 'platform2'
-    dep_info1 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info1.dependency = dep
-    dep_info1.platform = plat1
-    dep_info2 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info2.dependency = dep1
-    dep_info2.platform = plat1
-    dep_info3 = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info3.dependency = dep2
-    dep_info3.platform = plat2
-    base_config_mock.IterDependencyInfo.return_value = iter(
-        [dep_info1, dep_info2, dep_info3])
-    expected_lookup_dict = {dep: {plat1: dep_info_a,
-                                  plat2: dep_info_b},
-                            dep1: {plat1: dep_info_c},
-                            dep2: {plat2: dep_info3}}
-    dep_manager._UpdateDependencies(base_config_mock)
-    self.assertEqual(expected_lookup_dict, dep_manager._lookup_dict)
-    self.assertFalse(dep_info1.Update.called)
-    self.assertFalse(dep_info2.Update.called)
-    self.assertFalse(dep_info3.Update.called)
-    self.assertFalse(dep_info_b.Update.called)
-    dep_info_a.Update.assert_called_once_with(dep_info1)
-    dep_info_c.Update.assert_called_once_with(dep_info2)
-
-    # Collision error.
-    dep_manager._lookup_dict = start_lookup_dict.copy()
-    dep_info = mock.MagicMock(spec=dependency_manager.DependencyInfo)
-    dep_info.dependency = dep
-    dep_info.platform = plat1
-    base_config_mock.IterDependencyInfo.return_value = iter([dep_info])
-    dep_info_a.Update.side_effect = ValueError
-    self.assertRaises(ValueError,
-                      dep_manager._UpdateDependencies, base_config_mock)
-
-    # Ensure the testing data wasn't corrupted.
-    self.assertEqual(start_lookup_dict,
-                     {dep: {plat1: dep_info_a,
-                            plat2: dep_info_b},
-                      dep1: {plat1: dep_info_c}})
-
-  def testGetDependencyInfo(self):
-    dep_manager = dependency_manager.DependencyManager([])
-    self.assertFalse(dep_manager._lookup_dict)
-
-    # No dependencies in the dependency manager.
-    self.assertEqual(None, dep_manager._GetDependencyInfo('missing_dep',
-                                                          'missing_plat'))
-
-    dep_manager._lookup_dict = {'dep1': {'plat1': 'dep_info11',
-                                         'plat2': 'dep_info12',
-                                         'plat3': 'dep_info13'},
-                                'dep2': {'plat1': 'dep_info11',
-                                         'plat2': 'dep_info21',
-                                         'plat3': 'dep_info23',
-                                         'default': 'dep_info2d'},
-                                'dep3': {'plat1': 'dep_info31',
-                                         'plat2': 'dep_info32',
-                                         'default': 'dep_info3d'}}
-    # Dependency not in the dependency manager.
-    self.assertEqual(None, dep_manager._GetDependencyInfo(
-        'missing_dep', 'missing_plat'))
-    # Dependency in the dependency manager, but not the platform. No default.
-    self.assertEqual(None, dep_manager._GetDependencyInfo(
-        'dep1', 'missing_plat'))
-    # Dependency in the dependency manager, but not the platform, but a default
-    # exists.
-    self.assertEqual('dep_info2d', dep_manager._GetDependencyInfo(
-        'dep2', 'missing_plat'))
-    # Dependency and platform in the dependency manager. A default exists.
-    self.assertEqual('dep_info23', dep_manager._GetDependencyInfo(
-        'dep2', 'plat3'))
-    # Dependency and platform in the dependency manager. No default exists.
-    self.assertEqual('dep_info12', dep_manager._GetDependencyInfo(
-        'dep1', 'plat2'))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-  @mock.patch(
-      'dependency_manager.dependency_info.DependencyInfo.GetRemotePath')  # pylint: disable=line-too-long
-  def testFetchPathUnititializedDependency(
-      self, cs_path_mock):
-    dep_manager = dependency_manager.DependencyManager([])
-    self.assertFalse(cs_path_mock.call_args)
-    cs_path = 'cs_path'
-    cs_path_mock.return_value = cs_path
-
-    # Empty lookup_dict
-    with self.assertRaises(exceptions.NoPathFoundError):
-      dep_manager.FetchPath('dep', 'plat_arch_x86')
-
-    # Non-empty lookup dict that doesn't contain the dependency we're looking
-    # for.
-    dep_manager._lookup_dict = {'dep1': mock.MagicMock(),
-                                'dep2': mock.MagicMock()}
-    with self.assertRaises(exceptions.NoPathFoundError):
-      dep_manager.FetchPath('dep', 'plat_arch_x86')
-
-  @mock.patch('os.path')
-  @mock.patch(
-      'dependency_manager.DependencyManager._GetDependencyInfo')
-  @mock.patch(
-      'dependency_manager.dependency_info.DependencyInfo.GetRemotePath')  # pylint: disable=line-too-long
-  def testFetchPathLocalFile(self, cs_path_mock, dep_info_mock, path_mock):
-    dep_manager = dependency_manager.DependencyManager([])
-    self.assertFalse(cs_path_mock.call_args)
-    cs_path = 'cs_path'
-    dep_info = self.dep_info
-    cs_path_mock.return_value = cs_path
-    # The DependencyInfo returned should be passed through to LocalPath.
-    dep_info_mock.return_value = dep_info
-
-    # Non-empty lookup dict that contains the dependency we're looking for.
-    # Local path exists.
-    dep_manager._lookup_dict = {'dep': {'platform' : self.dep_info},
-                                'dep2': mock.MagicMock()}
-    self.fs.CreateFile('path1')
-    found_path = dep_manager.FetchPath('dep', 'platform')
-
-    self.assertEqual('path1', found_path)
-    self.assertFalse(cs_path_mock.call_args)
-
-
-  @mock.patch(
-      'dependency_manager.dependency_info.DependencyInfo.GetRemotePath')  # pylint: disable=line-too-long
-  def testFetchPathRemoteFile(
-      self, cs_path_mock):
-    dep_manager = dependency_manager.DependencyManager([])
-    self.assertFalse(cs_path_mock.call_args)
-    cs_path = 'cs_path'
-    def FakeCSPath():
-      self.fs.CreateFile(cs_path)
-      return cs_path
-    cs_path_mock.side_effect = FakeCSPath
-
-    # Non-empty lookup dict that contains the dependency we're looking for.
-    # Local path doesn't exist, but cloud_storage_path is downloaded.
-    dep_manager._lookup_dict = {'dep': {'platform' : self.dep_info,
-                                        'plat1': mock.MagicMock()},
-                                'dep2': {'plat2': mock.MagicMock()}}
-    found_path = dep_manager.FetchPath('dep', 'platform')
-    self.assertEqual(cs_path, found_path)
-
-
-  @mock.patch(
-      'dependency_manager.dependency_info.DependencyInfo.GetRemotePath')  # pylint: disable=line-too-long
-  def testFetchPathError(
-      self, cs_path_mock):
-    dep_manager = dependency_manager.DependencyManager([])
-    self.assertFalse(cs_path_mock.call_args)
-    cs_path_mock.return_value = None
-    dep_manager._lookup_dict = {'dep': {'platform' : self.dep_info,
-                                        'plat1': mock.MagicMock()},
-                                'dep2': {'plat2': mock.MagicMock()}}
-    # Non-empty lookup dict that contains the dependency we're looking for.
-    # Local path doesn't exist, and cloud_storage path wasn't successfully
-    # found.
-    self.assertRaises(exceptions.NoPathFoundError,
-                      dep_manager.FetchPath, 'dep', 'platform')
-
-    cs_path_mock.side_effect = cloud_storage.CredentialsError
-    self.assertRaises(cloud_storage.CredentialsError,
-                      dep_manager.FetchPath, 'dep', 'platform')
-
-    cs_path_mock.side_effect = cloud_storage.CloudStorageError
-    self.assertRaises(cloud_storage.CloudStorageError,
-                      dep_manager.FetchPath, 'dep', 'platform')
-
-    cs_path_mock.side_effect = cloud_storage.PermissionError
-    self.assertRaises(cloud_storage.PermissionError,
-                      dep_manager.FetchPath, 'dep', 'platform')
-
-  def testLocalPath(self):
-    dep_manager = dependency_manager.DependencyManager([])
-    # Empty lookup_dict
-    with self.assertRaises(exceptions.NoPathFoundError):
-      dep_manager.LocalPath('dep', 'plat')
-
-  def testLocalPathNoDependency(self):
-    # Non-empty lookup dict that doesn't contain the dependency we're looking
-    # for.
-    dep_manager = dependency_manager.DependencyManager([])
-    dep_manager._lookup_dict = {'dep1': mock.MagicMock(),
-                                'dep2': mock.MagicMock()}
-    with self.assertRaises(exceptions.NoPathFoundError):
-      dep_manager.LocalPath('dep', 'plat')
-
-  def testLocalPathExists(self):
-    # Non-empty lookup dict that contains the dependency we're looking for.
-    # Local path exists.
-    dep_manager = dependency_manager.DependencyManager([])
-    dep_manager._lookup_dict = {'dependency' : {'platform': self.dep_info},
-                                'dep1': mock.MagicMock(),
-                                'dep2': mock.MagicMock()}
-    self.fs.CreateFile('path1')
-    found_path = dep_manager.LocalPath('dependency', 'platform')
-
-    self.assertEqual('path1', found_path)
-
-  def testLocalPathMissingPaths(self):
-    # Non-empty lookup dict that contains the dependency we're looking for.
-    # Local path is found but doesn't exist.
-    dep_manager = dependency_manager.DependencyManager([])
-    dep_manager._lookup_dict = {'dependency' : {'platform': self.dep_info},
-                                'dep1': mock.MagicMock(),
-                                'dep2': mock.MagicMock()}
-    self.assertRaises(exceptions.NoPathFoundError,
-                      dep_manager.LocalPath, 'dependency', 'platform')
-
-  def testLocalPathNoPaths(self):
-    # Non-empty lookup dict that contains the dependency we're looking for.
-    # Local path isn't found.
-    dep_manager = dependency_manager.DependencyManager([])
-    dep_info = dependency_manager.DependencyInfo(
-        'dep', 'platform', 'config_file',
-        cloud_storage_info=self.cloud_storage_info)
-    dep_manager._lookup_dict = {'dependency' : {'platform': dep_info},
-                                'dep1': mock.MagicMock(),
-                                'dep2': mock.MagicMock()}
-    self.assertRaises(exceptions.NoPathFoundError,
-                      dep_manager.LocalPath, 'dependency', 'platform')
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_util.py b/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_util.py
deleted file mode 100644
index ca0174e..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_util.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import shutil
-import stat
-import subprocess
-import sys
-import zipfile_2_7_13 as zipfile
-
-from dependency_manager import exceptions
-
-
-def _WinReadOnlyHandler(func, path, execinfo):
-  if not os.access(path, os.W_OK):
-    os.chmod(path, stat.S_IWRITE)
-    func(path)
-  else:
-    raise execinfo[0], execinfo[1], execinfo[2]
-
-
-def RemoveDir(dir_path):
-  assert os.path.isabs(dir_path)
-  if sys.platform.startswith('win'):
-    dir_path = u'\\\\?\\' + dir_path
-  if os.path.isdir(dir_path):
-    shutil.rmtree(dir_path, onerror=_WinReadOnlyHandler)
-
-
-def VerifySafeArchive(archive):
-  def ResolvePath(path_name):
-    return os.path.realpath(os.path.abspath(path_name))
-  # Must add pathsep to avoid false positives.
-  # Ex: /tmp/abc/bad_file.py starts with /tmp/a but not /tmp/a/
-  base_path = ResolvePath(os.getcwd()) + os.path.sep
-  for member in archive.namelist():
-    if not ResolvePath(os.path.join(base_path, member)).startswith(base_path):
-      raise exceptions.ArchiveError(
-          'Archive %s contains a bad member: %s.' % (archive.filename, member))
-
-
-def GetModeFromPath(file_path):
-  return stat.S_IMODE(os.stat(file_path).st_mode)
-
-
-def GetModeFromZipInfo(zip_info):
-  return zip_info.external_attr >> 16
-
-
-def SetUnzippedDirPermissions(archive, unzipped_dir):
-  """Set the file permissions in an unzipped archive.
-
-     Designed to be called right after extractall() was called on |archive|.
-     Noop on Win. Otherwise sets the executable bit on files where needed.
-
-     Args:
-         archive: A zipfile.ZipFile object opened for reading.
-         unzipped_dir: A path to a directory containing the unzipped contents
-             of |archive|.
-  """
-  if sys.platform.startswith('win'):
-    # Windows doesn't have an executable bit, so don't mess with the ACLs.
-    return
-  for zip_info in archive.infolist():
-    archive_acls = GetModeFromZipInfo(zip_info)
-    if archive_acls & stat.S_IXUSR:
-      # Only preserve owner execurable permissions.
-      unzipped_path = os.path.abspath(
-          os.path.join(unzipped_dir, zip_info.filename))
-      mode = GetModeFromPath(unzipped_path)
-      os.chmod(unzipped_path, mode | stat.S_IXUSR)
-
-
-def UnzipArchive(archive_path, unzip_path):
-  """Unzips a file if it is a zip file.
-
-  Args:
-      archive_path: The downloaded file to unzip.
-      unzip_path: The destination directory to unzip to.
-
-  Raises:
-      ValueError: If |archive_path| is not a zipfile.
-  """
-  # TODO(aiolos): Add tests once the refactor is completed. crbug.com/551158
-  if not (archive_path and zipfile.is_zipfile(archive_path)):
-    raise ValueError(
-        'Attempting to unzip a non-archive file at %s' % archive_path)
-  if not os.path.exists(unzip_path):
-    os.makedirs(unzip_path)
-  # The Python ZipFile does not support symbolic links, which makes it
-  # unsuitable for Mac builds. so use ditto instead. crbug.com/700097.
-  if sys.platform.startswith('darwin'):
-    assert os.path.isabs(unzip_path)
-    unzip_cmd = ['ditto', '-x', '-k', archive_path, unzip_path]
-    proc = subprocess.Popen(unzip_cmd, bufsize=0, stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
-    proc.communicate()
-    return
-  try:
-    with zipfile.ZipFile(archive_path, 'r') as archive:
-      VerifySafeArchive(archive)
-      assert os.path.isabs(unzip_path)
-      unzip_path_without_prefix = unzip_path
-      if sys.platform.startswith('win'):
-        unzip_path = u'\\\\?\\' + unzip_path
-      archive.extractall(path=unzip_path)
-      SetUnzippedDirPermissions(archive, unzip_path)
-  except:
-    # Hack necessary because isdir doesn't work with escaped paths on Windows.
-    if unzip_path_without_prefix and os.path.isdir(unzip_path_without_prefix):
-      RemoveDir(unzip_path_without_prefix)
-    raise
diff --git a/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_util_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_util_unittest.py
deleted file mode 100644
index bd17025..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/dependency_manager_util_unittest.py
+++ /dev/null
@@ -1,196 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import shutil
-import stat
-import sys
-import tempfile
-import unittest
-import uuid
-import zipfile
-
-import mock
-
-from dependency_manager import dependency_manager_util
-from dependency_manager import exceptions
-
-
-class DependencyManagerUtilTest(unittest.TestCase):
-  # This class intentionally uses actual file I/O to test real system behavior.
-
-  def setUp(self):
-    self.tmp_dir = os.path.abspath(tempfile.mkdtemp(prefix='telemetry'))
-    self.sub_dir = os.path.join(self.tmp_dir, 'sub_dir')
-    os.mkdir(self.sub_dir)
-
-    self.read_only_path = (os.path.join(self.tmp_dir, 'read_only'))
-    with open(self.read_only_path, 'w+') as read_file:
-      read_file.write('Read-only file')
-    os.chmod(self.read_only_path, stat.S_IRUSR)
-
-    self.writable_path = (os.path.join(self.tmp_dir, 'writable'))
-    with open(self.writable_path, 'w+') as writable_file:
-      writable_file.write('Writable file')
-    os.chmod(self.writable_path, stat.S_IRUSR | stat.S_IWUSR)
-
-    self.executable_path = (os.path.join(self.tmp_dir, 'executable'))
-    with open(self.executable_path, 'w+') as executable_file:
-      executable_file.write('Executable file')
-    os.chmod(self.executable_path, stat.S_IRWXU)
-
-    self.sub_read_only_path = (os.path.join(self.sub_dir, 'read_only'))
-    with open(self.sub_read_only_path, 'w+') as read_file:
-      read_file.write('Read-only sub file')
-    os.chmod(self.sub_read_only_path, stat.S_IRUSR)
-
-    self.sub_writable_path = (os.path.join(self.sub_dir, 'writable'))
-    with open(self.sub_writable_path, 'w+') as writable_file:
-      writable_file.write('Writable sub file')
-    os.chmod(self.sub_writable_path, stat.S_IRUSR | stat.S_IWUSR)
-
-    self.sub_executable_path = (os.path.join(self.sub_dir, 'executable'))
-    with open(self.sub_executable_path, 'w+') as executable_file:
-      executable_file.write('Executable sub file')
-    os.chmod(self.sub_executable_path, stat.S_IRWXU)
-
-    self.AssertExpectedDirFiles(self.tmp_dir)
-    self.archive_path = self.CreateZipArchiveFromDir(self.tmp_dir)
-
-  def tearDown(self):
-    if os.path.isdir(self.tmp_dir):
-      dependency_manager_util.RemoveDir(self.tmp_dir)
-    if os.path.isfile(self.archive_path):
-      os.remove(self.archive_path)
-
-  def AssertExpectedDirFiles(self, top_dir):
-    sub_dir = os.path.join(top_dir, 'sub_dir')
-    read_only_path = (os.path.join(top_dir, 'read_only'))
-    writable_path = (os.path.join(top_dir, 'writable'))
-    executable_path = (os.path.join(top_dir, 'executable'))
-    sub_read_only_path = (os.path.join(sub_dir, 'read_only'))
-    sub_writable_path = (os.path.join(sub_dir, 'writable'))
-    sub_executable_path = (os.path.join(sub_dir, 'executable'))
-    # assert contents as expected
-    self.assertTrue(os.path.isdir(top_dir))
-    self.assertTrue(os.path.isdir(sub_dir))
-    self.assertTrue(os.path.isfile(read_only_path))
-    self.assertTrue(os.path.isfile(writable_path))
-    self.assertTrue(os.path.isfile(executable_path))
-    self.assertTrue(os.path.isfile(sub_read_only_path))
-    self.assertTrue(os.path.isfile(sub_writable_path))
-    self.assertTrue(os.path.isfile(sub_executable_path))
-
-    # assert permissions as expected
-    self.assertTrue(
-        stat.S_IRUSR & stat.S_IMODE(os.stat(read_only_path).st_mode))
-    self.assertTrue(
-        stat.S_IRUSR & stat.S_IMODE(os.stat(sub_read_only_path).st_mode))
-    self.assertTrue(
-        stat.S_IRUSR & stat.S_IMODE(os.stat(writable_path).st_mode))
-    self.assertTrue(
-        stat.S_IWUSR & stat.S_IMODE(os.stat(writable_path).st_mode))
-    self.assertTrue(
-        stat.S_IRUSR & stat.S_IMODE(os.stat(sub_writable_path).st_mode))
-    self.assertTrue(
-        stat.S_IWUSR & stat.S_IMODE(os.stat(sub_writable_path).st_mode))
-    if not sys.platform.startswith('win'):
-      self.assertEqual(
-          stat.S_IRWXU,
-          stat.S_IRWXU & stat.S_IMODE(os.stat(executable_path).st_mode))
-      self.assertEqual(
-          stat.S_IRWXU,
-          stat.S_IRWXU & stat.S_IMODE(os.stat(sub_executable_path).st_mode))
-
-  def CreateZipArchiveFromDir(self, dir_path):
-    try:
-      base_path = os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
-      archive_path = shutil.make_archive(base_path, 'zip', dir_path)
-      self.assertTrue(os.path.exists(archive_path))
-      self.assertTrue(zipfile.is_zipfile(archive_path))
-    except:
-      if os.path.isfile(archive_path):
-        os.remove(archive_path)
-      raise
-    return archive_path
-
-  def testRemoveDirWithSubDir(self):
-    dependency_manager_util.RemoveDir(self.tmp_dir)
-
-    self.assertFalse(os.path.exists(self.tmp_dir))
-    self.assertFalse(os.path.exists(self.sub_dir))
-    self.assertFalse(os.path.exists(self.read_only_path))
-    self.assertFalse(os.path.exists(self.writable_path))
-    self.assertFalse(os.path.isfile(self.executable_path))
-    self.assertFalse(os.path.exists(self.sub_read_only_path))
-    self.assertFalse(os.path.exists(self.sub_writable_path))
-    self.assertFalse(os.path.isfile(self.sub_executable_path))
-
-  def testUnzipFile(self):
-    self.AssertExpectedDirFiles(self.tmp_dir)
-    unzip_path = os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
-    dependency_manager_util.UnzipArchive(self.archive_path, unzip_path)
-    self.AssertExpectedDirFiles(unzip_path)
-    self.AssertExpectedDirFiles(self.tmp_dir)
-    dependency_manager_util.RemoveDir(unzip_path)
-
-  def testUnzipFileContainingLongPath(self):
-    try:
-      dir_path = self.tmp_dir
-      if sys.platform.startswith('win'):
-        dir_path = u'\\\\?\\' + dir_path
-
-      archive_suffix = ''
-      # 260 is the Windows API path length limit.
-      while len(archive_suffix) < 260:
-        archive_suffix = os.path.join(archive_suffix, 'really')
-      contents_dir_path = os.path.join(dir_path, archive_suffix)
-      os.makedirs(contents_dir_path)
-      filename = os.path.join(contents_dir_path, 'longpath.txt')
-      open(filename, 'a').close()
-
-      base_path = os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
-      archive_path = shutil.make_archive(base_path, 'zip', dir_path)
-      self.assertTrue(os.path.exists(archive_path))
-      self.assertTrue(zipfile.is_zipfile(archive_path))
-    except:
-      if os.path.isfile(archive_path):
-        os.remove(archive_path)
-      raise
-
-    unzip_path = os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
-    dependency_manager_util.UnzipArchive(archive_path, unzip_path)
-    dependency_manager_util.RemoveDir(unzip_path)
-
-  def testUnzipFileFailure(self):
-    # zipfile is not used on MacOS. See crbug.com/700097.
-    if sys.platform.startswith('darwin'):
-      return
-    unzip_path = os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
-    self.assertFalse(os.path.exists(unzip_path))
-    with mock.patch(
-        'dependency_manager.dependency_manager_util.zipfile.ZipFile.extractall'  # pylint: disable=line-too-long
-        ) as zipfile_mock:
-      zipfile_mock.side_effect = IOError
-      self.assertRaises(
-          IOError, dependency_manager_util.UnzipArchive, self.archive_path,
-          unzip_path)
-    self.AssertExpectedDirFiles(self.tmp_dir)
-    self.assertFalse(os.path.exists(unzip_path))
-
-  def testVerifySafeArchivePasses(self):
-    with zipfile.ZipFile(self.archive_path) as archive:
-      dependency_manager_util.VerifySafeArchive(archive)
-
-  def testVerifySafeArchiveFailsOnRelativePathWithPardir(self):
-    tmp_file = tempfile.NamedTemporaryFile(delete=False)
-    tmp_file_name = tmp_file.name
-    tmp_file.write('Bad file!')
-    tmp_file.close()
-    with zipfile.ZipFile(self.archive_path, 'w') as archive:
-      archive.write(tmp_file_name, '../../foo')
-      self.assertRaises(
-          exceptions.ArchiveError, dependency_manager_util.VerifySafeArchive,
-          archive)
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/exceptions.py b/systrace/catapult/dependency_manager/dependency_manager/exceptions.py
deleted file mode 100644
index d7863db..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/exceptions.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from py_utils import cloud_storage
-
-
-CloudStorageError = cloud_storage.CloudStorageError
-
-
-class UnsupportedConfigFormatError(ValueError):
-  def __init__(self, config_type, config_file):
-    if not config_type:
-      message = ('The json file at %s is unsupported by the dependency_manager '
-                 'due to no specified config type' % config_file)
-    else:
-      message = ('The json file at %s has config type %s, which is unsupported '
-                 'by the dependency manager.' % (config_file, config_type))
-    super(UnsupportedConfigFormatError, self).__init__(message)
-
-
-class EmptyConfigError(ValueError):
-  def __init__(self, file_path):
-    super(EmptyConfigError, self).__init__('Empty config at %s.' % file_path)
-
-
-class FileNotFoundError(Exception):
-  def __init__(self, file_path):
-    super(FileNotFoundError, self).__init__('No file found at %s' % file_path)
-
-
-class NoPathFoundError(Exception):
-  def __init__(self, dependency, platform):
-    super(NoPathFoundError, self).__init__(
-        'No file could be found locally, and no file to download from cloud '
-        'storage for %s on platform %s' % (dependency, platform))
-
-
-class ReadWriteError(Exception):
-  pass
-
-
-class CloudStorageUploadConflictError(CloudStorageError):
-  def __init__(self, bucket, path):
-    super(CloudStorageUploadConflictError, self).__init__(
-        'File location %s already exists in bucket %s' % (path, bucket))
-
-
-class ArchiveError(Exception):
-  def __init__(self, msg):
-    super(ArchiveError, self).__init__(msg)
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/local_path_info.py b/systrace/catapult/dependency_manager/dependency_manager/local_path_info.py
deleted file mode 100644
index 0103e8f..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/local_path_info.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-
-class LocalPathInfo(object):
-
-  def __init__(self, path_priority_groups):
-    self._path_priority_groups = self._ParseLocalPaths(path_priority_groups)
-
-  def GetLocalPath(self):
-    for priority_group in self._path_priority_groups:
-      priority_group = filter(os.path.exists, priority_group)
-      if not priority_group:
-        continue
-      return max(priority_group, key=lambda path: os.stat(path).st_mtime)
-    return None
-
-  def IsPathInLocalPaths(self, path):
-    return any(
-        path in priority_group for priority_group in self._path_priority_groups)
-
-  def Update(self, local_path_info):
-    if not local_path_info:
-      return
-    for priority_group in local_path_info._path_priority_groups:
-      group_list = []
-      for path in priority_group:
-        if not self.IsPathInLocalPaths(path):
-          group_list.append(path)
-      if group_list:
-        self._path_priority_groups.append(group_list)
-
-  @staticmethod
-  def _ParseLocalPaths(local_paths):
-    if not local_paths:
-      return []
-    return [[e] if isinstance(e, basestring) else e for e in local_paths]
diff --git a/systrace/catapult/dependency_manager/dependency_manager/manager.py b/systrace/catapult/dependency_manager/dependency_manager/manager.py
deleted file mode 100644
index 7ebb46d..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/manager.py
+++ /dev/null
@@ -1,246 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import os
-
-from dependency_manager import base_config
-from dependency_manager import exceptions
-
-
-DEFAULT_TYPE = 'default'
-
-
-class DependencyManager(object):
-  def __init__(self, configs, supported_config_types=None):
-    """Manages file dependencies found locally or in cloud_storage.
-
-    Args:
-        configs: A list of instances of BaseConfig or it's subclasses, passed
-            in decreasing order of precedence.
-        supported_config_types: A list of whitelisted config_types.
-            No restrictions if None is specified.
-
-    Raises:
-        ValueError: If |configs| is not a list of instances of BaseConfig or
-            its subclasses.
-        UnsupportedConfigFormatError: If supported_config_types is specified and
-            configs contains a config not in the supported config_types.
-
-    Example: DependencyManager([config1, config2, config3])
-        No requirements on the type of Config, and any dependencies that have
-        local files for the same platform will first look in those from
-        config1, then those from config2, and finally those from config3.
-    """
-    if configs is None or type(configs) != list:
-      raise ValueError(
-          'Must supply a list of config files to DependencyManager')
-    # self._lookup_dict is a dictionary with the following format:
-    # { dependency1: {platform1: dependency_info1,
-    #                 platform2: dependency_info2}
-    #   dependency2: {platform1: dependency_info3,
-    #                  ...}
-    #   ...}
-    #
-    # Where the dependencies and platforms are strings, and the
-    # dependency_info's are DependencyInfo instances.
-    self._lookup_dict = {}
-    self.supported_configs = supported_config_types or []
-    for config in configs:
-      self._UpdateDependencies(config)
-
-
-  def FetchPathWithVersion(self, dependency, platform):
-    """Get a path to an executable for |dependency|, downloading as needed.
-
-    A path to a default executable may be returned if a platform specific
-    version is not specified in the config(s).
-
-    Args:
-        dependency: Name of the desired dependency, as given in the config(s)
-            used in this DependencyManager.
-        platform: Name of the platform the dependency will run on. Often of the
-            form 'os_architecture'. Must match those specified in the config(s)
-            used in this DependencyManager.
-    Returns:
-        <path>, <version> where:
-            <path> is the path to an executable of |dependency| that will run
-            on |platform|, downloading from cloud storage if needed.
-            <version> is the version of the executable at <path> or None.
-
-    Raises:
-        NoPathFoundError: If a local copy of the executable cannot be found and
-            a remote path could not be downloaded from cloud_storage.
-        CredentialsError: If cloud_storage credentials aren't configured.
-        PermissionError: If cloud_storage credentials are configured, but not
-            with an account that has permission to download the remote file.
-        NotFoundError: If the remote file does not exist where expected in
-            cloud_storage.
-        ServerError: If an internal server error is hit while downloading the
-            remote file.
-        CloudStorageError: If another error occured while downloading the remote
-            path.
-        FileNotFoundError: If an attempted download was otherwise unsuccessful.
-
-    """
-    dependency_info = self._GetDependencyInfo(dependency, platform)
-    if not dependency_info:
-      raise exceptions.NoPathFoundError(dependency, platform)
-    path = dependency_info.GetLocalPath()
-    version = None
-    if not path or not os.path.exists(path):
-      path = dependency_info.GetRemotePath()
-      if not path or not os.path.exists(path):
-        raise exceptions.NoPathFoundError(dependency, platform)
-      version = dependency_info.GetRemotePathVersion()
-    return path, version
-
-  def FetchPath(self, dependency, platform):
-    """Get a path to an executable for |dependency|, downloading as needed.
-
-    A path to a default executable may be returned if a platform specific
-    version is not specified in the config(s).
-
-    Args:
-        dependency: Name of the desired dependency, as given in the config(s)
-            used in this DependencyManager.
-        platform: Name of the platform the dependency will run on. Often of the
-            form 'os_architecture'. Must match those specified in the config(s)
-            used in this DependencyManager.
-    Returns:
-        A path to an executable of |dependency| that will run on |platform|,
-        downloading from cloud storage if needed.
-
-    Raises:
-        NoPathFoundError: If a local copy of the executable cannot be found and
-            a remote path could not be downloaded from cloud_storage.
-        CredentialsError: If cloud_storage credentials aren't configured.
-        PermissionError: If cloud_storage credentials are configured, but not
-            with an account that has permission to download the remote file.
-        NotFoundError: If the remote file does not exist where expected in
-            cloud_storage.
-        ServerError: If an internal server error is hit while downloading the
-            remote file.
-        CloudStorageError: If another error occured while downloading the remote
-            path.
-        FileNotFoundError: If an attempted download was otherwise unsuccessful.
-
-    """
-    path, _ = self.FetchPathWithVersion(dependency, platform)
-    return path
-
-  def LocalPath(self, dependency, platform):
-    """Get a path to a locally stored executable for |dependency|.
-
-    A path to a default executable may be returned if a platform specific
-    version is not specified in the config(s).
-    Will not download the executable.
-
-    Args:
-        dependency: Name of the desired dependency, as given in the config(s)
-            used in this DependencyManager.
-        platform: Name of the platform the dependency will run on. Often of the
-            form 'os_architecture'. Must match those specified in the config(s)
-            used in this DependencyManager.
-    Returns:
-        A path to an executable for |dependency| that will run on |platform|.
-
-    Raises:
-        NoPathFoundError: If a local copy of the executable cannot be found.
-    """
-    dependency_info = self._GetDependencyInfo(dependency, platform)
-    if not dependency_info:
-      raise exceptions.NoPathFoundError(dependency, platform)
-    local_path = dependency_info.GetLocalPath()
-    if not local_path or not os.path.exists(local_path):
-      raise exceptions.NoPathFoundError(dependency, platform)
-    return local_path
-
-  def PrefetchPaths(self, platform, dependencies=None, cloud_storage_retries=3):
-    if not dependencies:
-      dependencies = self._lookup_dict.keys()
-
-    skipped_deps = []
-    found_deps = []
-    missing_deps = []
-    for dependency in dependencies:
-      dependency_info = self._GetDependencyInfo(dependency, platform)
-      if not dependency_info:
-        # The dependency is only configured for other platforms.
-        skipped_deps.append(dependency)
-        continue
-      local_path = dependency_info.GetLocalPath()
-      if local_path:
-        found_deps.append(dependency)
-        continue
-      fetched_path = None
-      cloud_storage_error = None
-      for _ in range(0, cloud_storage_retries + 1):
-        try:
-          fetched_path = dependency_info.GetRemotePath()
-        except exceptions.CloudStorageError as e:
-          cloud_storage_error = e
-        break
-      if fetched_path:
-        found_deps.append(dependency)
-      else:
-        missing_deps.append(dependency)
-        logging.error(
-            'Dependency %s could not be found or fetched from cloud storage for'
-            ' platform %s. Error: %s', dependency, platform,
-            cloud_storage_error)
-    if missing_deps:
-      raise exceptions.NoPathFoundError(', '.join(missing_deps), platform)
-    return (found_deps, skipped_deps)
-
-  def _UpdateDependencies(self, config):
-    """Add the dependency information stored in |config| to this instance.
-
-    Args:
-        config: An instances of BaseConfig or a subclasses.
-
-    Raises:
-        UnsupportedConfigFormatError: If supported_config_types was specified
-        and config is not in the supported config_types.
-    """
-    if not isinstance(config, base_config.BaseConfig):
-      raise ValueError('Must use a BaseConfig or subclass instance with the '
-                       'DependencyManager.')
-    if (self.supported_configs and
-        config.GetConfigType() not in self.supported_configs):
-      raise exceptions.UnsupportedConfigFormatError(config.GetConfigType(),
-                                                    config.config_path)
-    for dep_info in config.IterDependencyInfo():
-      dependency = dep_info.dependency
-      platform = dep_info.platform
-      if dependency not in self._lookup_dict:
-        self._lookup_dict[dependency] = {}
-      if platform not in self._lookup_dict[dependency]:
-        self._lookup_dict[dependency][platform] = dep_info
-      else:
-        self._lookup_dict[dependency][platform].Update(dep_info)
-
-
-  def _GetDependencyInfo(self, dependency, platform):
-    """Get information for |dependency| on |platform|, or a default if needed.
-
-    Args:
-        dependency: Name of the desired dependency, as given in the config(s)
-            used in this DependencyManager.
-        platform: Name of the platform the dependency will run on. Often of the
-            form 'os_architecture'. Must match those specified in the config(s)
-            used in this DependencyManager.
-
-    Returns: The dependency_info for |dependency| on |platform| if it exists.
-        Or the default version of |dependency| if it exists, or None if neither
-        exist.
-    """
-    if not self._lookup_dict or dependency not in self._lookup_dict:
-      return None
-    dependency_dict = self._lookup_dict[dependency]
-    device_type = platform
-    if not device_type in dependency_dict:
-      device_type = DEFAULT_TYPE
-    return dependency_dict.get(device_type)
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/uploader.py b/systrace/catapult/dependency_manager/dependency_manager/uploader.py
deleted file mode 100644
index e88b7c0..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/uploader.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import os
-
-from py_utils import cloud_storage
-
-from dependency_manager import exceptions
-
-
-BACKUP_PATH_EXTENSION = 'old'
-
-
-class CloudStorageUploader(object):
-  def __init__(self, bucket, remote_path, local_path, cs_backup_path=None):
-    if not bucket or not remote_path or not local_path:
-      raise ValueError(
-          'Attempted to partially initialize upload data with bucket %s, '
-          'remote_path %s, and local_path %s', bucket, remote_path, local_path)
-    if not os.path.exists(local_path):
-      raise ValueError('Attempting to initilize UploadInfo with missing '
-                       'local path %s', local_path)
-
-    self._cs_bucket = bucket
-    self._cs_remote_path = remote_path
-    self._local_path = local_path
-    self._cs_backup_path = (cs_backup_path or
-                            '%s.%s' % (self._cs_remote_path,
-                                       BACKUP_PATH_EXTENSION))
-    self._updated = False
-    self._backed_up = False
-
-  def Upload(self, force=False):
-    """Upload all pending files and then write the updated config to disk.
-
-    Will attempt to copy files existing in the upload location to a backup
-    location in the same bucket in cloud storage if |force| is True.
-
-    Args:
-      force: True if files should be uploaded to cloud storage even if a
-          file already exists in the upload location.
-
-    Raises:
-      CloudStorageUploadConflictError: If |force| is False and the potential
-          upload location of a file already exists.
-      CloudStorageError: If copying an existing file to the backup location
-          or uploading the new file fails.
-    """
-    if cloud_storage.Exists(self._cs_bucket, self._cs_remote_path):
-      if not force:
-        #pylint: disable=nonstandard-exception
-        raise exceptions.CloudStorageUploadConflictError(self._cs_bucket,
-                                                         self._cs_remote_path)
-        #pylint: enable=nonstandard-exception
-      logging.debug('A file already exists at upload path %s in self.cs_bucket'
-                    ' %s', self._cs_remote_path, self._cs_bucket)
-      try:
-        cloud_storage.Copy(self._cs_bucket, self._cs_bucket,
-                           self._cs_remote_path, self._cs_backup_path)
-        self._backed_up = True
-      except cloud_storage.CloudStorageError:
-        logging.error('Failed to copy existing file %s in cloud storage bucket '
-                      '%s to backup location %s', self._cs_remote_path,
-                      self._cs_bucket, self._cs_backup_path)
-        raise
-
-    try:
-      cloud_storage.Insert(
-          self._cs_bucket, self._cs_remote_path, self._local_path)
-    except cloud_storage.CloudStorageError:
-      logging.error('Failed to upload %s to %s in cloud_storage bucket %s',
-                    self._local_path, self._cs_remote_path, self._cs_bucket)
-      raise
-    self._updated = True
-
-  def Rollback(self):
-    """Attempt to undo the previous call to Upload.
-
-    Does nothing if no previous call to Upload was made, or if nothing was
-    successfully changed.
-
-    Returns:
-      True iff changes were successfully rolled back.
-    Raises:
-      CloudStorageError: If copying the backed up file to its original
-          location or removing the uploaded file fails.
-    """
-    cloud_storage_changed = False
-    if self._backed_up:
-      cloud_storage.Copy(self._cs_bucket, self._cs_bucket, self._cs_backup_path,
-                         self._cs_remote_path)
-      cloud_storage_changed = True
-      self._cs_backup_path = None
-    elif self._updated:
-      cloud_storage.Delete(self._cs_bucket, self._cs_remote_path)
-      cloud_storage_changed = True
-    self._updated = False
-    return cloud_storage_changed
-
-  def __eq__(self, other, msg=None):
-    if type(self) != type(other):
-      return False
-    return (self._local_path == other._local_path and
-            self._cs_remote_path == other._cs_remote_path and
-            self._cs_bucket == other._cs_bucket)
-
diff --git a/systrace/catapult/dependency_manager/dependency_manager/uploader_unittest.py b/systrace/catapult/dependency_manager/dependency_manager/uploader_unittest.py
deleted file mode 100644
index 5c8e2a0..0000000
--- a/systrace/catapult/dependency_manager/dependency_manager/uploader_unittest.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-from pyfakefs import fake_filesystem_unittest
-
-from dependency_manager import uploader
-
-
-class CloudStorageUploaderTest(fake_filesystem_unittest.TestCase):
-  def setUp(self):
-    self.setUpPyfakefs()
-    self.bucket = 'cloud_storage_bucket'
-    self.local_path = os.path.abspath(os.path.join('path', 'to', 'dependency'))
-    self.fs.CreateFile(self.local_path)
-    self.remote_path = 'config_folder/remote_path'
-
-  def testCloudStorageUploaderMissingData(self):
-    self.assertRaises(ValueError, uploader.CloudStorageUploader,
-                      None, self.remote_path, self.local_path)
-    self.assertRaises(ValueError, uploader.CloudStorageUploader,
-                      self.bucket, None, self.local_path)
-    self.assertRaises(ValueError, uploader.CloudStorageUploader,
-                      self.bucket, self.remote_path, None)
-
-  def testCloudStorageUploaderLocalFileMissing(self):
-    self.fs.RemoveObject(self.local_path)
-    self.assertRaises(ValueError, uploader.CloudStorageUploader,
-                      self.bucket, self.remote_path, self.local_path)
-
-  def testCloudStorageUploaderCreation(self):
-    upload_data = uploader.CloudStorageUploader(
-        self.bucket, self.remote_path, self.local_path)
-    expected_bucket = self.bucket
-    expected_remote_path = self.remote_path
-    expected_cs_backup_path = '%s.old' % expected_remote_path
-    expected_local_path = self.local_path
-    self.assertEqual(expected_bucket, upload_data._cs_bucket)
-    self.assertEqual(expected_remote_path, upload_data._cs_remote_path)
-    self.assertEqual(expected_local_path, upload_data._local_path)
-    self.assertEqual(expected_cs_backup_path, upload_data._cs_backup_path)
-
-  def testCloudStorageUploaderEquality(self):
-    upload_data = uploader.CloudStorageUploader(
-        self.bucket, self.remote_path, self.local_path)
-    upload_data_exact = uploader.CloudStorageUploader(
-        self.bucket, self.remote_path, self.local_path)
-    upload_data_equal = uploader.CloudStorageUploader(
-        'cloud_storage_bucket',
-        'config_folder/remote_path',
-        os.path.abspath(os.path.join('path', 'to', 'dependency')))
-    self.assertEqual(upload_data, upload_data)
-    self.assertEqual(upload_data, upload_data_exact)
-    self.assertEqual(upload_data_exact, upload_data)
-    self.assertEqual(upload_data, upload_data_equal)
-    self.assertEqual(upload_data_equal, upload_data)
-
-
-  def testCloudStorageUploaderInequality(self):
-    new_local_path = os.path.abspath(os.path.join('new', 'local', 'path'))
-    self.fs.CreateFile(new_local_path)
-    new_bucket = 'new_bucket'
-    new_remote_path = 'new_remote/path'
-
-    upload_data = uploader.CloudStorageUploader(
-        self.bucket, self.remote_path, self.local_path)
-    upload_data_all_different = uploader.CloudStorageUploader(
-        new_bucket, new_remote_path, new_local_path)
-    upload_data_different_bucket = uploader.CloudStorageUploader(
-        new_bucket, self.remote_path, self.local_path)
-    upload_data_different_remote_path = uploader.CloudStorageUploader(
-        self.bucket, new_remote_path, self.local_path)
-    upload_data_different_local_path = uploader.CloudStorageUploader(
-        self.bucket, self.remote_path, new_local_path)
-
-    self.assertNotEqual(upload_data, 'a string!')
-    self.assertNotEqual(upload_data, 0)
-    self.assertNotEqual(upload_data, 2354)
-    self.assertNotEqual(upload_data, None)
-    self.assertNotEqual(upload_data, upload_data_all_different)
-    self.assertNotEqual(upload_data_all_different, upload_data)
-    self.assertNotEqual(upload_data, upload_data_different_bucket)
-    self.assertNotEqual(upload_data_different_bucket, upload_data)
-    self.assertNotEqual(upload_data, upload_data_different_remote_path)
-    self.assertNotEqual(upload_data_different_remote_path, upload_data)
-    self.assertNotEqual(upload_data, upload_data_different_local_path)
-    self.assertNotEqual(upload_data_different_local_path, upload_data)
-
-  #TODO: write unittests for upload and rollback
diff --git a/systrace/catapult/dependency_manager/pylintrc b/systrace/catapult/dependency_manager/pylintrc
deleted file mode 100644
index 4541fb8..0000000
--- a/systrace/catapult/dependency_manager/pylintrc
+++ /dev/null
@@ -1,68 +0,0 @@
-[MESSAGES CONTROL]
-
-# Disable the message, report, category or checker with the given id(s).
-# TODO: Shrink this list to as small as possible.
-disable=
-  design,
-  similarities,
-
-  fixme,
-  locally-disabled,
-  locally-enabled,
-  missing-docstring,
-  no-member,
-  no-self-use,
-  protected-access,
-  star-args,
-
-
-[REPORTS]
-
-# Don't write out full reports, just messages.
-reports=no
-
-
-[BASIC]
-
-# Regular expression which should only match correct function names.
-function-rgx=^(?:(?P<exempt>setUp|tearDown|setUpModule|tearDownModule)|(?P<camel_case>_?[A-Z][a-zA-Z0-9]*))$
-
-# Regular expression which should only match correct method names.
-method-rgx=^(?:(?P<exempt>_[a-z0-9_]+__|get|post|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass)|(?P<camel_case>(_{0,2}|test|assert)[A-Z][a-zA-Z0-9_]*))$
-
-# Regular expression which should only match correct argument names.
-argument-rgx=^[a-z][a-z0-9_]*$
-
-# Regular expression which should only match correct variable names.
-variable-rgx=^[a-z][a-z0-9_]*$
-
-# Good variable names which should always be accepted, separated by a comma.
-good-names=main,_
-
-# List of builtins function names that should not be used, separated by a comma.
-bad-functions=apply,input,reduce
-
-
-[VARIABLES]
-
-# Tells wether we should check for unused import in __init__ files.
-init-import=no
-
-# A regular expression matching names used for dummy variables (i.e. not used).
-dummy-variables-rgx=^\*{0,2}(_$|unused_)
-
-
-[TYPECHECK]
-
-# Tells wether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-
-[FORMAT]
-
-# Maximum number of lines in a module.
-max-module-lines=2000
-
-# We use two spaces for indents, instead of the usual four spaces or tab.
-indent-string='  '
diff --git a/systrace/catapult/devil/PRESUBMIT.py b/systrace/catapult/devil/PRESUBMIT.py
deleted file mode 100644
index 289a5c6..0000000
--- a/systrace/catapult/devil/PRESUBMIT.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Presubmit script for devil.
-
-See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
-details on the presubmit API built into depot_tools.
-"""
-
-
-def _RunPylint(input_api, output_api):
-  return input_api.RunTests(input_api.canned_checks.RunPylint(
-      input_api, output_api, pylintrc='pylintrc'))
-
-
-def _RunUnitTests(input_api, output_api):
-  def J(*dirs):
-    """Returns a path relative to presubmit directory."""
-    return input_api.os_path.join(
-        input_api.PresubmitLocalPath(), 'devil', *dirs)
-
-  test_env = dict(input_api.environ)
-  test_env.update({
-    'PYTHONDONTWRITEBYTECODE': '1',
-    'PYTHONPATH': ':'.join([J(), J('..')]),
-  })
-
-  message_type = (output_api.PresubmitError if input_api.is_committing
-                  else output_api.PresubmitPromptWarning)
-
-  return input_api.RunTests([
-      input_api.Command(
-          name='devil/bin/run_py_tests',
-          cmd=[
-            input_api.os_path.join(
-                input_api.PresubmitLocalPath(), 'bin', 'run_py_tests')],
-          kwargs={'env': test_env},
-          message=message_type)])
-
-
-def _EnsureNoPylibUse(input_api, output_api):
-  def other_python_files(f):
-    this_presubmit_file = input_api.os_path.join(
-        input_api.PresubmitLocalPath(), 'PRESUBMIT.py')
-    return (f.LocalPath().endswith('.py')
-            and not f.AbsoluteLocalPath() == this_presubmit_file)
-
-  changed_files = input_api.AffectedSourceFiles(other_python_files)
-  import_error_re = input_api.re.compile(
-      r'(from pylib.* import)|(import pylib)')
-
-  errors = []
-  for f in changed_files:
-    errors.extend(
-        '%s:%d' % (f.LocalPath(), line_number)
-        for line_number, line_text in f.ChangedContents()
-        if import_error_re.search(line_text))
-
-  if errors:
-    return [output_api.PresubmitError(
-        'pylib modules should not be imported from devil modules.',
-        items=errors)]
-  return []
-
-
-def CommonChecks(input_api, output_api):
-  output = []
-  output += _RunPylint(input_api, output_api)
-  output += _RunUnitTests(input_api, output_api)
-  output += _EnsureNoPylibUse(input_api, output_api)
-  return output
-
-
-def CheckChangeOnUpload(input_api, output_api):
-  return CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
-  return CommonChecks(input_api, output_api)
-
diff --git a/systrace/catapult/devil/README.md b/systrace/catapult/devil/README.md
deleted file mode 100644
index 852ac37..0000000
--- a/systrace/catapult/devil/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-<!-- Copyright 2015 The Chromium Authors. All rights reserved.
-     Use of this source code is governed by a BSD-style license that can be
-     found in the LICENSE file.
--->
-## devil
-
-😈
-
-devil is a library used by the Chromium developers to interact with Android
-devices. It currently supports SDK level 16 and above.
-
-## Interfaces
-
-devil provides python APIs:
-  - [`devil.android.adb_wrapper`](docs/adb_wrapper.md) provides a thin wrapper
-    around the adb binary. Most functions and methods have direct analogues on
-    the adb command-line.
-  - [`devil.android.device_utils`](docs/device_utils.md) provides higher-level
-    functionality built on top of `adb_wrapper`. **This is the primary
-    mechanism through which chromium's scripts interact with devices.**
-
-## Utilities
-
-devil also provides command-line utilities:
- - [`devil/utils/markdown.py`](docs/markdown.md) generated markdown
-   documentation for python modules.
-
-## Constraints and Caveats
-
-devil is used with python 2.7. Its compatibility with python 3 has not been
-tested, and neither achieving nor maintaining said compatibility is currently
-a priority.
-
-## Contributing
-
-Please see the [contributor's guide](https://github.com/catapult-project/catapult/blob/master/CONTRIBUTING.md).
-
diff --git a/systrace/catapult/devil/bin/generate_md_docs b/systrace/catapult/devil/bin/generate_md_docs
deleted file mode 100755
index 634e14a..0000000
--- a/systrace/catapult/devil/bin/generate_md_docs
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_DEVIL_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..'))
-_DEVIL_URL = (
-    'https://github.com/catapult-project/catapult/blob/master/devil/')
-
-sys.path.append(_DEVIL_PATH)
-from devil.utils import cmd_helper
-
-_FILES_TO_DOC = {
-  'devil/android/sdk/adb_wrapper.py': 'docs/adb_wrapper.md',
-  'devil/android/device_utils.py': 'docs/device_utils.md',
-  'devil/utils/markdown.py': 'docs/markdown.md',
-}
-
-_MARKDOWN_SCRIPT = os.path.join(_DEVIL_PATH, 'devil', 'utils', 'markdown.py')
-
-def main():
-  failed = False
-  for k, v in _FILES_TO_DOC.iteritems():
-    module_path = os.path.join(_DEVIL_PATH, k)
-    module_link = _DEVIL_URL + k
-    doc_path = os.path.join(_DEVIL_PATH, v)
-
-    status, stdout = cmd_helper.GetCmdStatusAndOutput(
-        [sys.executable, _MARKDOWN_SCRIPT, module_path,
-         '--module-link', module_link])
-    if status:
-      logging.error('Failed to update doc for %s' % module_path)
-      failed = True
-    else:
-      with open(doc_path, 'w') as doc_file:
-        doc_file.write(stdout)
-
-  return 1 if failed else 0
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/bin/run_py_devicetests b/systrace/catapult/devil/bin/run_py_devicetests
deleted file mode 100755
index 656bedf..0000000
--- a/systrace/catapult/devil/bin/run_py_devicetests
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_CATAPULT_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..', '..'))
-_DEVIL_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..'))
-_TYP_PATH = os.path.abspath(os.path.join(_CATAPULT_PATH, 'third_party', 'typ'))
-
-sys.path.append(_TYP_PATH)
-import typ
-
-sys.path.append(_DEVIL_PATH)
-from devil.android import device_test_case
-
-
-def main():
-  runner = typ.Runner()
-  runner.setup_fn = device_test_case.PrepareDevices
-  return runner.main(
-      coverage_source=[_DEVIL_PATH],
-      jobs=1,
-      suffixes=['*_devicetest.py'],
-      top_level_dir=_DEVIL_PATH)
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/bin/run_py_tests b/systrace/catapult/devil/bin/run_py_tests
deleted file mode 100755
index 44ec61e..0000000
--- a/systrace/catapult/devil/bin/run_py_tests
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_CATAPULT_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..', '..'))
-_DEVIL_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..'))
-
-sys.path.append(_CATAPULT_PATH)
-from catapult_build import run_with_typ
-
-
-def main():
-  return run_with_typ.Run(top_level_dir=_DEVIL_PATH)
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/__init__.py b/systrace/catapult/devil/devil/__init__.py
deleted file mode 100644
index 7de59c9..0000000
--- a/systrace/catapult/devil/devil/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-
-logging.getLogger('devil').addHandler(logging.NullHandler())
diff --git a/systrace/catapult/devil/devil/android/__init__.py b/systrace/catapult/devil/devil/android/__init__.py
deleted file mode 100644
index 50b23df..0000000
--- a/systrace/catapult/devil/devil/android/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
diff --git a/systrace/catapult/devil/devil/android/apk_helper.py b/systrace/catapult/devil/devil/android/apk_helper.py
deleted file mode 100644
index 8acb41e..0000000
--- a/systrace/catapult/devil/devil/android/apk_helper.py
+++ /dev/null
@@ -1,244 +0,0 @@
-# Copyright (c) 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Module containing utilities for apk packages."""
-
-import re
-
-from devil import base_error
-from devil.android.sdk import aapt
-
-
-_MANIFEST_ATTRIBUTE_RE = re.compile(
-    r'\s*A: ([^\(\)= ]*)(?:\([^\(\)= ]*\))?='
-    r'(?:"(.*)" \(Raw: .*\)|\(type.*?\)(.*))$')
-_MANIFEST_ELEMENT_RE = re.compile(r'\s*(?:E|N): (\S*) .*$')
-
-
-def GetPackageName(apk_path):
-  """Returns the package name of the apk."""
-  return ApkHelper(apk_path).GetPackageName()
-
-
-# TODO(jbudorick): Deprecate and remove this function once callers have been
-# converted to ApkHelper.GetInstrumentationName
-def GetInstrumentationName(apk_path):
-  """Returns the name of the Instrumentation in the apk."""
-  return ApkHelper(apk_path).GetInstrumentationName()
-
-
-def ToHelper(path_or_helper):
-  """Creates an ApkHelper unless one is already given."""
-  if isinstance(path_or_helper, basestring):
-    return ApkHelper(path_or_helper)
-  return path_or_helper
-
-
-# To parse the manifest, the function uses a node stack where at each level of
-# the stack it keeps the currently in focus node at that level (of indentation
-# in the xmltree output, ie. depth in the tree). The height of the stack is
-# determinded by line indentation. When indentation is increased so is the stack
-# (by pushing a new empty node on to the stack). When indentation is decreased
-# the top of the stack is popped (sometimes multiple times, until indentation
-# matches the height of the stack). Each line parsed (either an attribute or an
-# element) is added to the node at the top of the stack (after the stack has
-# been popped/pushed due to indentation).
-def _ParseManifestFromApk(apk_path):
-  aapt_output = aapt.Dump('xmltree', apk_path, 'AndroidManifest.xml')
-
-  parsed_manifest = {}
-  node_stack = [parsed_manifest]
-  indent = '  '
-
-  if aapt_output[0].startswith('N'):
-    # if the first line is a namespace then the root manifest is indented, and
-    # we need to add a dummy namespace node, then skip the first line (we dont
-    # care about namespaces).
-    node_stack.insert(0, {})
-    output_to_parse = aapt_output[1:]
-  else:
-    output_to_parse = aapt_output
-
-  for line in output_to_parse:
-    if len(line) == 0:
-      continue
-
-    # If namespaces are stripped, aapt still outputs the full url to the
-    # namespace and appends it to the attribute names.
-    line = line.replace('http://schemas.android.com/apk/res/android:', 'android:')
-
-    indent_depth = 0
-    while line[(len(indent) * indent_depth):].startswith(indent):
-      indent_depth += 1
-
-    # Pop the stack until the height of the stack is the same is the depth of
-    # the current line within the tree.
-    node_stack = node_stack[:indent_depth + 1]
-    node = node_stack[-1]
-
-    # Element nodes are a list of python dicts while attributes are just a dict.
-    # This is because multiple elements, at the same depth of tree and the same
-    # name, are all added to the same list keyed under the element name.
-    m = _MANIFEST_ELEMENT_RE.match(line[len(indent) * indent_depth:])
-    if m:
-      manifest_key = m.group(1)
-      if manifest_key in node:
-        node[manifest_key] += [{}]
-      else:
-        node[manifest_key] = [{}]
-      node_stack += [node[manifest_key][-1]]
-      continue
-
-    m = _MANIFEST_ATTRIBUTE_RE.match(line[len(indent) * indent_depth:])
-    if m:
-      manifest_key = m.group(1)
-      if manifest_key in node:
-        raise base_error.BaseError(
-            "A single attribute should have one key and one value")
-      else:
-        node[manifest_key] = m.group(2) or m.group(3)
-      continue
-
-  return parsed_manifest
-
-
-def _ParseNumericKey(obj, key, default=0):
-  val = obj.get(key)
-  if val is None:
-    return default
-  return int(val, 0)
-
-
-class _ExportedActivity(object):
-  def __init__(self, name):
-    self.name = name
-    self.actions = set()
-    self.categories = set()
-    self.schemes = set()
-
-
-def _IterateExportedActivities(manifest_info):
-  app_node = manifest_info['manifest'][0]['application'][0]
-  activities = app_node.get('activity', []) + app_node.get('activity-alias', [])
-  for activity_node in activities:
-    # Presence of intent filters make an activity exported by default.
-    has_intent_filter = 'intent-filter' in activity_node
-    if not _ParseNumericKey(
-        activity_node, 'android:exported', default=has_intent_filter):
-      continue
-
-    activity = _ExportedActivity(activity_node.get('android:name'))
-    # Merge all intent-filters into a single set because there is not
-    # currently a need to keep them separate.
-    for intent_filter in activity_node.get('intent-filter', []):
-      for action in intent_filter.get('action', []):
-        activity.actions.add(action.get('android:name'))
-      for category in intent_filter.get('category', []):
-        activity.categories.add(category.get('android:name'))
-      for data in intent_filter.get('data', []):
-        activity.schemes.add(data.get('android:scheme'))
-    yield activity
-
-
-class ApkHelper(object):
-
-  def __init__(self, path):
-    self._apk_path = path
-    self._manifest = None
-
-  @property
-  def path(self):
-    return self._apk_path
-
-  def GetActivityName(self):
-    """Returns the name of the first launcher Activity in the apk."""
-    manifest_info = self._GetManifest()
-    for activity in _IterateExportedActivities(manifest_info):
-      if ('android.intent.action.MAIN' in activity.actions and
-          'android.intent.category.LAUNCHER' in activity.categories):
-        return self._ResolveName(activity.name)
-    return None
-
-  def GetViewActivityName(self):
-    """Returns name of the first action=View Activity that can handle http."""
-    manifest_info = self._GetManifest()
-    for activity in _IterateExportedActivities(manifest_info):
-      if ('android.intent.action.VIEW' in activity.actions and
-          'http' in activity.schemes):
-        return self._ResolveName(activity.name)
-    return None
-
-  def GetInstrumentationName(
-      self, default='android.test.InstrumentationTestRunner'):
-    """Returns the name of the Instrumentation in the apk."""
-    all_instrumentations = self.GetAllInstrumentations(default=default)
-    if len(all_instrumentations) != 1:
-      raise base_error.BaseError(
-          'There is more than one instrumentation. Expected one.')
-    else:
-      return self._ResolveName(all_instrumentations[0]['android:name'])
-
-  def GetAllInstrumentations(
-      self, default='android.test.InstrumentationTestRunner'):
-    """Returns a list of all Instrumentations in the apk."""
-    try:
-      return self._GetManifest()['manifest'][0]['instrumentation']
-    except KeyError:
-      return [{'android:name': default}]
-
-  def GetPackageName(self):
-    """Returns the package name of the apk."""
-    manifest_info = self._GetManifest()
-    try:
-      return manifest_info['manifest'][0]['package']
-    except KeyError:
-      raise Exception('Failed to determine package name of %s' % self._apk_path)
-
-  def GetPermissions(self):
-    manifest_info = self._GetManifest()
-    try:
-      return [p['android:name'] for
-              p in manifest_info['manifest'][0]['uses-permission']]
-    except KeyError:
-      return []
-
-  def GetSplitName(self):
-    """Returns the name of the split of the apk."""
-    manifest_info = self._GetManifest()
-    try:
-      return manifest_info['manifest'][0]['split']
-    except KeyError:
-      return None
-
-  def HasIsolatedProcesses(self):
-    """Returns whether any services exist that use isolatedProcess=true."""
-    manifest_info = self._GetManifest()
-    try:
-      application = manifest_info['manifest'][0]['application'][0]
-      services = application['service']
-      return any(
-          _ParseNumericKey(s, 'android:isolatedProcess') for s in services)
-    except KeyError:
-      return False
-
-  def GetAllMetadata(self):
-    """Returns a list meta-data tags as (name, value) tuples."""
-    manifest_info = self._GetManifest()
-    try:
-      application = manifest_info['manifest'][0]['application'][0]
-      metadata = application['meta-data']
-      return [(x.get('android:name'), x.get('android:value')) for x in metadata]
-    except KeyError:
-      return []
-
-  def _GetManifest(self):
-    if not self._manifest:
-      self._manifest = _ParseManifestFromApk(self._apk_path)
-    return self._manifest
-
-  def _ResolveName(self, name):
-    name = name.lstrip('.')
-    if '.' not in name:
-      return '%s.%s' % (self.GetPackageName(), name)
-    return name
diff --git a/systrace/catapult/devil/devil/android/apk_helper_test.py b/systrace/catapult/devil/devil/android/apk_helper_test.py
deleted file mode 100755
index 12137db..0000000
--- a/systrace/catapult/devil/devil/android/apk_helper_test.py
+++ /dev/null
@@ -1,225 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from devil import base_error
-from devil import devil_env
-from devil.android import apk_helper
-from devil.utils import mock_calls
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-_MANIFEST_DUMP = """N: android=http://schemas.android.com/apk/res/android
-  E: manifest (line=1)
-    A: package="org.chromium.abc" (Raw: "org.chromium.abc")
-    A: split="random_split" (Raw: "random_split")
-    E: uses-permission (line=2)
-      A: android:name(0x01010003)="android.permission.INTERNET" (Raw: "android.permission.INTERNET")
-    E: uses-permission (line=3)
-      A: android:name(0x01010003)="android.permission.READ_EXTERNAL_STORAGE" (Raw: "android.permission.READ_EXTERNAL_STORAGE")
-    E: uses-permission (line=4)
-      A: android:name(0x01010003)="android.permission.ACCESS_FINE_LOCATION" (Raw: "android.permission.ACCESS_FINE_LOCATION")
-    E: application (line=5)
-      E: activity (line=6)
-        A: android:name(0x01010003)="org.chromium.ActivityName" (Raw: "org.chromium.ActivityName")
-        A: android:exported(0x01010010)=(type 0x12)0xffffffff
-      E: service (line=7)
-        A: android:name(0x01010001)="org.chromium.RandomService" (Raw: "org.chromium.RandomService")
-        A: android:isolatedProcess(0x01010888)=(type 0x12)0xffffffff
-      E: activity (line=173)
-        A: android:name(0x01010003)=".MainActivity" (Raw: ".MainActivity")
-        E: intent-filter (line=177)
-          E: action (line=178)
-            A: android:name(0x01010003)="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
-          E: category (line=180)
-            A: android:name(0x01010003)="android.intent.category.DEFAULT" (Raw: "android.intent.category.DEFAULT")
-          E: category (line=181)
-            A: android:name(0x01010003)="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")
-      E: activity-alias (line=173)
-        A: android:name(0x01010003)="org.chromium.ViewActivity" (Raw: "org.chromium.ViewActivity")
-        A: android:targetActivity(0x01010202)="org.chromium.ActivityName" (Raw: "org.chromium.ActivityName")
-        E: intent-filter (line=191)
-          E: action (line=192)
-            A: android:name(0x01010003)="android.intent.action.VIEW" (Raw: "android.intent.action.VIEW")
-          E: data (line=198)
-            A: android:scheme(0x01010027)="http" (Raw: "http")
-          E: data (line=199)
-            A: android:scheme(0x01010027)="https" (Raw: "https")
-      E: meta-data (line=43)
-        A: android:name(0x01010003)="name1" (Raw: "name1")
-        A: android:value(0x01010024)="value1" (Raw: "value1")
-      E: meta-data (line=43)
-        A: android:name(0x01010003)="name2" (Raw: "name2")
-        A: android:value(0x01010024)="value2" (Raw: "value2")
-    E: instrumentation (line=8)
-      A: android:label(0x01010001)="abc" (Raw: "abc")
-      A: android:name(0x01010003)="org.chromium.RandomJUnit4TestRunner" (Raw: "org.chromium.RandomJUnit4TestRunner")
-      A: android:targetPackage(0x01010021)="org.chromium.random_package" (Raw:"org.chromium.random_pacakge")
-      A: junit4=(type 0x12)0xffffffff (Raw: "true")
-    E: instrumentation (line=9)
-      A: android:label(0x01010001)="abc" (Raw: "abc")
-      A: android:name(0x01010003)="org.chromium.RandomTestRunner" (Raw: "org.chromium.RandomTestRunner")
-      A: android:targetPackage(0x01010021)="org.chromium.random_package" (Raw:"org.chromium.random_pacakge")
-"""
-
-_NO_ISOLATED_SERVICES = """N: android=http://schemas.android.com/apk/res/android
-  E: manifest (line=1)
-    A: package="org.chromium.abc" (Raw: "org.chromium.abc")
-    E: application (line=5)
-      E: activity (line=6)
-        A: android:name(0x01010003)="org.chromium.ActivityName" (Raw: "org.chromium.ActivityName")
-        A: android:exported(0x01010010)=(type 0x12)0xffffffff
-      E: service (line=7)
-        A: android:name(0x01010001)="org.chromium.RandomService" (Raw: "org.chromium.RandomService")
-"""
-
-_NO_SERVICES = """N: android=http://schemas.android.com/apk/res/android
-  E: manifest (line=1)
-    A: package="org.chromium.abc" (Raw: "org.chromium.abc")
-    E: application (line=5)
-      E: activity (line=6)
-        A: android:name(0x01010003)="org.chromium.ActivityName" (Raw: "org.chromium.ActivityName")
-        A: android:exported(0x01010010)=(type 0x12)0xffffffff
-"""
-
-_NO_APPLICATION = """N: android=http://schemas.android.com/apk/res/android
-  E: manifest (line=1)
-    A: package="org.chromium.abc" (Raw: "org.chromium.abc")
-"""
-
-_SINGLE_INSTRUMENTATION_MANIFEST_DUMP = """N: android=http://schemas.android.com/apk/res/android
-  E: manifest (line=1)
-    A: package="org.chromium.xyz" (Raw: "org.chromium.xyz")
-    E: instrumentation (line=8)
-      A: android:label(0x01010001)="xyz" (Raw: "xyz")
-      A: android:name(0x01010003)="org.chromium.RandomTestRunner" (Raw: "org.chromium.RandomTestRunner")
-      A: android:targetPackage(0x01010021)="org.chromium.random_package" (Raw:"org.chromium.random_pacakge")
-"""
-
-_SINGLE_J4_INSTRUMENTATION_MANIFEST_DUMP = """N: android=http://schemas.android.com/apk/res/android
-  E: manifest (line=1)
-    A: package="org.chromium.xyz" (Raw: "org.chromium.xyz")
-    E: instrumentation (line=8)
-      A: android:label(0x01010001)="xyz" (Raw: "xyz")
-      A: android:name(0x01010003)="org.chromium.RandomJ4TestRunner" (Raw: "org.chromium.RandomJ4TestRunner")
-      A: android:targetPackage(0x01010021)="org.chromium.random_package" (Raw:"org.chromium.random_pacakge")
-      A: junit4=(type 0x12)0xffffffff (Raw: "true")
-"""
-
-_NO_NAMESPACE_MANIFEST_DUMP = """E: manifest (line=1)
-  A: package="org.chromium.xyz" (Raw: "org.chromium.xyz")
-  E: instrumentation (line=8)
-    A: http://schemas.android.com/apk/res/android:label(0x01010001)="xyz" (Raw: "xyz")
-    A: http://schemas.android.com/apk/res/android:name(0x01010003)="org.chromium.RandomTestRunner" (Raw: "org.chromium.RandomTestRunner")
-    A: http://schemas.android.com/apk/res/android:targetPackage(0x01010021)="org.chromium.random_package" (Raw:"org.chromium.random_pacakge")
-"""
-
-
-def _MockAaptDump(manifest_dump):
-  return mock.patch(
-      'devil.android.sdk.aapt.Dump',
-      mock.Mock(side_effect=None, return_value=manifest_dump.split('\n')))
-
-class ApkHelperTest(mock_calls.TestCase):
-
-  def testGetInstrumentationName(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      with self.assertRaises(base_error.BaseError):
-        helper.GetInstrumentationName()
-
-  def testGetActivityName(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals(
-          helper.GetActivityName(), 'org.chromium.abc.MainActivity')
-
-  def testGetViewActivityName(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals(
-          helper.GetViewActivityName(), 'org.chromium.ViewActivity')
-
-  def testGetAllInstrumentations(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      all_instrumentations = helper.GetAllInstrumentations()
-      self.assertEquals(len(all_instrumentations), 2)
-      self.assertEquals(all_instrumentations[0]['android:name'],
-                        'org.chromium.RandomJUnit4TestRunner')
-      self.assertEquals(all_instrumentations[1]['android:name'],
-                        'org.chromium.RandomTestRunner')
-
-  def testGetPackageName(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals(helper.GetPackageName(), 'org.chromium.abc')
-
-  def testGetPermssions(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      all_permissions = helper.GetPermissions()
-      self.assertEquals(len(all_permissions), 3)
-      self.assertTrue('android.permission.INTERNET' in all_permissions)
-      self.assertTrue(
-          'android.permission.READ_EXTERNAL_STORAGE' in all_permissions)
-      self.assertTrue(
-          'android.permission.ACCESS_FINE_LOCATION' in all_permissions)
-
-  def testGetSplitName(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals(helper.GetSplitName(), 'random_split')
-
-  def testHasIsolatedProcesses_noApplication(self):
-    with _MockAaptDump(_NO_APPLICATION):
-      helper = apk_helper.ApkHelper('')
-      self.assertFalse(helper.HasIsolatedProcesses())
-
-  def testHasIsolatedProcesses_noServices(self):
-    with _MockAaptDump(_NO_SERVICES):
-      helper = apk_helper.ApkHelper('')
-      self.assertFalse(helper.HasIsolatedProcesses())
-
-  def testHasIsolatedProcesses_oneNotIsolatedProcess(self):
-    with _MockAaptDump(_NO_ISOLATED_SERVICES):
-      helper = apk_helper.ApkHelper('')
-      self.assertFalse(helper.HasIsolatedProcesses())
-
-  def testHasIsolatedProcesses_oneIsolatedProcess(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertTrue(helper.HasIsolatedProcesses())
-
-  def testGetSingleInstrumentationName(self):
-    with _MockAaptDump(_SINGLE_INSTRUMENTATION_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals('org.chromium.RandomTestRunner',
-                        helper.GetInstrumentationName())
-
-  def testGetSingleJUnit4InstrumentationName(self):
-    with _MockAaptDump(_SINGLE_J4_INSTRUMENTATION_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals('org.chromium.RandomJ4TestRunner',
-                        helper.GetInstrumentationName())
-
-  def testGetAllMetadata(self):
-    with _MockAaptDump(_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals([('name1', 'value1'), ('name2', 'value2')],
-                        helper.GetAllMetadata())
-
-  def testGetSingleInstrumentationName_strippedNamespaces(self):
-    with _MockAaptDump(_NO_NAMESPACE_MANIFEST_DUMP):
-      helper = apk_helper.ApkHelper('')
-      self.assertEquals('org.chromium.RandomTestRunner',
-                        helper.GetInstrumentationName())
-
-
-if __name__ == '__main__':
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/app_ui.py b/systrace/catapult/devil/devil/android/app_ui.py
deleted file mode 100644
index 2b04e8b..0000000
--- a/systrace/catapult/devil/devil/android/app_ui.py
+++ /dev/null
@@ -1,243 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Provides functionality to interact with UI elements of an Android app."""
-
-import collections
-import re
-from xml.etree import ElementTree as element_tree
-
-from devil.android import decorators
-from devil.android import device_temp_file
-from devil.utils import geometry
-from devil.utils import timeout_retry
-
-_DEFAULT_SHORT_TIMEOUT = 10
-_DEFAULT_SHORT_RETRIES = 3
-_DEFAULT_LONG_TIMEOUT = 30
-_DEFAULT_LONG_RETRIES = 0
-
-# Parse rectangle bounds given as: '[left,top][right,bottom]'.
-_RE_BOUNDS = re.compile(
-    r'\[(?P<left>\d+),(?P<top>\d+)\]\[(?P<right>\d+),(?P<bottom>\d+)\]')
-
-
-class _UiNode(object):
-
-  def __init__(self, device, xml_node, package=None):
-    """Object to interact with a UI node from an xml snapshot.
-
-    Note: there is usually no need to call this constructor directly. Instead,
-    use an AppUi object (below) to grab an xml screenshot from a device and
-    find nodes in it.
-
-    Args:
-      device: A device_utils.DeviceUtils instance.
-      xml_node: An ElementTree instance of the node to interact with.
-      package: An optional package name for the app owning this node.
-    """
-    self._device = device
-    self._xml_node = xml_node
-    self._package = package
-
-  def _GetAttribute(self, key):
-    """Get the value of an attribute of this node."""
-    return self._xml_node.attrib.get(key)
-
-  @property
-  def bounds(self):
-    """Get a rectangle with the bounds of this UI node.
-
-    Returns:
-      A geometry.Rectangle instance.
-    """
-    d = _RE_BOUNDS.match(self._GetAttribute('bounds')).groupdict()
-    return geometry.Rectangle.FromDict({k: int(v) for k, v in d.iteritems()})
-
-  def Tap(self, point=None, dp_units=False):
-    """Send a tap event to the UI node.
-
-    Args:
-      point: An optional geometry.Point instance indicating the location to
-        tap, relative to the bounds of the UI node, i.e. (0, 0) taps the
-        top-left corner. If ommited, the center of the node is tapped.
-      dp_units: If True, indicates that the coordinates of the point are given
-        in device-independent pixels; otherwise they are assumed to be "real"
-        pixels. This option has no effect when the point is ommited.
-    """
-    if point is None:
-      point = self.bounds.center
-    else:
-      if dp_units:
-        point = (float(self._device.pixel_density) / 160) * point
-      point += self.bounds.top_left
-
-    x, y = (str(int(v)) for v in point)
-    self._device.RunShellCommand(['input', 'tap', x, y], check_return=True)
-
-  def Dump(self):
-    """Get a brief summary of the child nodes that can be found on this node.
-
-    Returns:
-      A list of lines that can be logged or otherwise printed.
-    """
-    summary = collections.defaultdict(set)
-    for node in self._xml_node.iter():
-      package = node.get('package') or '(no package)'
-      label = node.get('resource-id') or '(no id)'
-      text = node.get('text')
-      if text:
-        label = '%s[%r]' % (label, text)
-      summary[package].add(label)
-    lines = []
-    for package, labels in sorted(summary.iteritems()):
-      lines.append('- %s:' % package)
-      for label in sorted(labels):
-        lines.append('  - %s' % label)
-    return lines
-
-  def __getitem__(self, key):
-    """Retrieve a child of this node by its index.
-
-    Args:
-      key: An integer with the index of the child to retrieve.
-    Returns:
-      A UI node instance of the selected child.
-    Raises:
-      IndexError if the index is out of range.
-    """
-    return type(self)(self._device, self._xml_node[key], package=self._package)
-
-  def _Find(self, **kwargs):
-    """Find the first descendant node that matches a given criteria.
-
-    Note: clients would usually call AppUi.GetUiNode or AppUi.WaitForUiNode
-    instead.
-
-    For example:
-
-      app = app_ui.AppUi(device, package='org.my.app')
-      app.GetUiNode(resource_id='some_element', text='hello')
-
-    would retrieve the first matching node with both of the xml attributes:
-
-      resource-id='org.my.app:id/some_element'
-      text='hello'
-
-    As the example shows, if given and needed, the value of the resource_id key
-    is auto-completed with the package name specified in the AppUi constructor.
-
-    Args:
-      Arguments are specified as key-value pairs, where keys correnspond to
-      attribute names in xml nodes (replacing any '-' with '_' to make them
-      valid identifiers). At least one argument must be supplied, and arguments
-      with a None value are ignored.
-    Returns:
-      A UI node instance of the first descendant node that matches ALL the
-      given key-value criteria; or None if no such node is found.
-    Raises:
-      TypeError if no search arguments are provided.
-    """
-    matches_criteria = self._NodeMatcher(kwargs)
-    for node in self._xml_node.iter():
-      if matches_criteria(node):
-        return type(self)(self._device, node, package=self._package)
-    return None
-
-  def _NodeMatcher(self, kwargs):
-    # Auto-complete resource-id's using the package name if available.
-    resource_id = kwargs.get('resource_id')
-    if (resource_id is not None
-        and self._package is not None
-        and ':id/' not in resource_id):
-      kwargs['resource_id'] = '%s:id/%s' % (self._package, resource_id)
-
-    criteria = [(k.replace('_', '-'), v)
-                for k, v in kwargs.iteritems()
-                if v is not None]
-    if not criteria:
-      raise TypeError('At least one search criteria should be specified')
-    return lambda node: all(node.get(k) == v for k, v in criteria)
-
-
-class AppUi(object):
-  # timeout and retry arguments appear unused, but are handled by decorator.
-  # pylint: disable=unused-argument
-
-  def __init__(self, device, package=None):
-    """Object to interact with the UI of an Android app.
-
-    Args:
-      device: A device_utils.DeviceUtils instance.
-      package: An optional package name for the app.
-    """
-    self._device = device
-    self._package = package
-
-  @property
-  def package(self):
-    return self._package
-
-  @decorators.WithTimeoutAndRetriesDefaults(_DEFAULT_SHORT_TIMEOUT,
-                                            _DEFAULT_SHORT_RETRIES)
-  def _GetRootUiNode(self, timeout=None, retries=None):
-    """Get a node pointing to the root of the UI nodes on screen.
-
-    Note: This is currently implemented via adb calls to uiatomator and it
-    is *slow*, ~2 secs per call. Do not rely on low-level implementation
-    details that may change in the future.
-
-    TODO(crbug.com/567217): Swap to a more efficient implementation.
-
-    Args:
-      timeout: A number of seconds to wait for the uiautomator dump.
-      retries: Number of times to retry if the adb command fails.
-    Returns:
-      A UI node instance pointing to the root of the xml screenshot.
-    """
-    with device_temp_file.DeviceTempFile(self._device.adb) as dtemp:
-      self._device.RunShellCommand(['uiautomator', 'dump', dtemp.name],
-                                  check_return=True)
-      xml_node = element_tree.fromstring(
-          self._device.ReadFile(dtemp.name, force_pull=True))
-    return _UiNode(self._device, xml_node, package=self._package)
-
-  def ScreenDump(self):
-    """Get a brief summary of the nodes that can be found on the screen.
-
-    Returns:
-      A list of lines that can be logged or otherwise printed.
-    """
-    return self._GetRootUiNode().Dump()
-
-  def GetUiNode(self, **kwargs):
-    """Get the first node found matching a specified criteria.
-
-    Args:
-      See _UiNode._Find.
-    Returns:
-      A UI node instance of the node if found, otherwise None.
-    """
-    # pylint: disable=protected-access
-    return self._GetRootUiNode()._Find(**kwargs)
-
-  @decorators.WithTimeoutAndRetriesDefaults(_DEFAULT_LONG_TIMEOUT,
-                                            _DEFAULT_LONG_RETRIES)
-  def WaitForUiNode(self, timeout=None, retries=None, **kwargs):
-    """Wait for a node matching a given criteria to appear on the screen.
-
-    Args:
-      timeout: A number of seconds to wait for the matching node to appear.
-      retries: Number of times to retry in case of adb command errors.
-      For other args, to specify the search criteria, see _UiNode._Find.
-    Returns:
-      The UI node instance found.
-    Raises:
-      device_errors.CommandTimeoutError if the node is not found before the
-      timeout.
-    """
-    def node_found():
-      return self.GetUiNode(**kwargs)
-
-    return timeout_retry.WaitFor(node_found)
diff --git a/systrace/catapult/devil/devil/android/app_ui_test.py b/systrace/catapult/devil/devil/android/app_ui_test.py
deleted file mode 100644
index 3472985..0000000
--- a/systrace/catapult/devil/devil/android/app_ui_test.py
+++ /dev/null
@@ -1,191 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unit tests for the app_ui module."""
-
-import unittest
-from xml.etree import ElementTree as element_tree
-
-from devil import devil_env
-from devil.android import app_ui
-from devil.android import device_errors
-from devil.utils import geometry
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-MOCK_XML_LOADING = '''
-<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
-<hierarchy rotation="0">
-  <node bounds="[0,50][1536,178]" content-desc="Loading"
-      resource-id="com.example.app:id/spinner"/>
-</hierarchy>
-'''.strip()
-
-
-MOCK_XML_LOADED = '''
-<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
-<hierarchy rotation="0">
-  <node bounds="[0,50][1536,178]" content-desc=""
-      resource-id="com.example.app:id/toolbar">
-    <node bounds="[0,58][112,170]" content-desc="Open navigation drawer"/>
-    <node bounds="[121,50][1536,178]"
-        resource-id="com.example.app:id/actionbar_custom_view">
-      <node bounds="[121,50][1424,178]"
-          resource-id="com.example.app:id/actionbar_title" text="Primary"/>
-      <node bounds="[1424,50][1536,178]" content-desc="Search"
-          resource-id="com.example.app:id/actionbar_search_button"/>
-    </node>
-  </node>
-  <node bounds="[0,178][576,1952]" resource-id="com.example.app:id/drawer">
-    <node bounds="[0,178][144,1952]"
-        resource-id="com.example.app:id/mini_drawer">
-      <node bounds="[40,254][104,318]" resource-id="com.example.app:id/avatar"/>
-      <node bounds="[16,354][128,466]" content-desc="Primary"
-          resource-id="com.example.app:id/image_view"/>
-      <node bounds="[16,466][128,578]" content-desc="Social"
-          resource-id="com.example.app:id/image_view"/>
-      <node bounds="[16,578][128,690]" content-desc="Promotions"
-          resource-id="com.example.app:id/image_view"/>
-    </node>
-  </node>
-</hierarchy>
-'''.strip()
-
-
-class UiAppTest(unittest.TestCase):
-
-  def setUp(self):
-    self.device = mock.Mock()
-    self.device.pixel_density = 320  # Each dp pixel is 2 real pixels.
-    self.app = app_ui.AppUi(self.device, package='com.example.app')
-    self._setMockXmlScreenshots([MOCK_XML_LOADED])
-
-  def _setMockXmlScreenshots(self, xml_docs):
-    """Mock self.app._GetRootUiNode to load nodes from some test xml_docs.
-
-    Each time the method is called it will return a UI node for each string
-    given in |xml_docs|, or rise a time out error when the list is exhausted.
-    """
-    # pylint: disable=protected-access
-    def get_mock_root_ui_node(value):
-      if isinstance(value, Exception):
-        raise value
-      return app_ui._UiNode(
-          self.device, element_tree.fromstring(value), self.app.package)
-
-    xml_docs.append(device_errors.CommandTimeoutError('Timed out!'))
-
-    self.app._GetRootUiNode = mock.Mock(
-        side_effect=(get_mock_root_ui_node(doc) for doc in xml_docs))
-
-  def assertNodeHasAttribs(self, node, attr):
-    # pylint: disable=protected-access
-    for key, value in attr.iteritems():
-      self.assertEquals(node._GetAttribute(key), value)
-
-  def assertTappedOnceAt(self, x, y):
-    self.device.RunShellCommand.assert_called_once_with(
-        ['input', 'tap', str(x), str(y)], check_return=True)
-
-  def testFind_byText(self):
-    node = self.app.GetUiNode(text='Primary')
-    self.assertNodeHasAttribs(node, {
-        'text': 'Primary',
-        'content-desc': None,
-        'resource-id': 'com.example.app:id/actionbar_title',
-    })
-    self.assertEquals(node.bounds, geometry.Rectangle([121, 50], [1424, 178]))
-
-  def testFind_byContentDesc(self):
-    node = self.app.GetUiNode(content_desc='Social')
-    self.assertNodeHasAttribs(node, {
-        'text': None,
-        'content-desc': 'Social',
-        'resource-id': 'com.example.app:id/image_view',
-    })
-    self.assertEquals(node.bounds, geometry.Rectangle([16, 466], [128, 578]))
-
-  def testFind_byResourceId_autocompleted(self):
-    node = self.app.GetUiNode(resource_id='image_view')
-    self.assertNodeHasAttribs(node, {
-        'content-desc': 'Primary',
-        'resource-id': 'com.example.app:id/image_view',
-    })
-
-  def testFind_byResourceId_absolute(self):
-    node = self.app.GetUiNode(resource_id='com.example.app:id/image_view')
-    self.assertNodeHasAttribs(node, {
-        'content-desc': 'Primary',
-        'resource-id': 'com.example.app:id/image_view',
-    })
-
-  def testFind_byMultiple(self):
-    node = self.app.GetUiNode(resource_id='image_view',
-                              content_desc='Promotions')
-    self.assertNodeHasAttribs(node, {
-        'content-desc': 'Promotions',
-        'resource-id': 'com.example.app:id/image_view',
-    })
-    self.assertEquals(node.bounds, geometry.Rectangle([16, 578], [128, 690]))
-
-  def testFind_notFound(self):
-    node = self.app.GetUiNode(resource_id='does_not_exist')
-    self.assertIsNone(node)
-
-  def testFind_noArgsGiven(self):
-    # Same exception given by Python for a function call with not enough args.
-    with self.assertRaises(TypeError):
-      self.app.GetUiNode()
-
-  def testGetChildren(self):
-    node = self.app.GetUiNode(resource_id='mini_drawer')
-    self.assertNodeHasAttribs(
-        node[0], {'resource-id': 'com.example.app:id/avatar'})
-    self.assertNodeHasAttribs(node[1], {'content-desc': 'Primary'})
-    self.assertNodeHasAttribs(node[2], {'content-desc': 'Social'})
-    self.assertNodeHasAttribs(node[3], {'content-desc': 'Promotions'})
-    with self.assertRaises(IndexError):
-      # pylint: disable=pointless-statement
-      node[4]
-
-  def testTap_center(self):
-    node = self.app.GetUiNode(content_desc='Open navigation drawer')
-    node.Tap()
-    self.assertTappedOnceAt(56, 114)
-
-  def testTap_topleft(self):
-    node = self.app.GetUiNode(content_desc='Open navigation drawer')
-    node.Tap(geometry.Point(0, 0))
-    self.assertTappedOnceAt(0, 58)
-
-  def testTap_withOffset(self):
-    node = self.app.GetUiNode(content_desc='Open navigation drawer')
-    node.Tap(geometry.Point(10, 20))
-    self.assertTappedOnceAt(10, 78)
-
-  def testTap_withOffsetInDp(self):
-    node = self.app.GetUiNode(content_desc='Open navigation drawer')
-    node.Tap(geometry.Point(10, 20), dp_units=True)
-    self.assertTappedOnceAt(20, 98)
-
-  def testTap_dpUnitsIgnored(self):
-    node = self.app.GetUiNode(content_desc='Open navigation drawer')
-    node.Tap(dp_units=True)
-    self.assertTappedOnceAt(56, 114)  # Still taps at center.
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testWaitForUiNode_found(self):
-    self._setMockXmlScreenshots(
-        [MOCK_XML_LOADING, MOCK_XML_LOADING, MOCK_XML_LOADED])
-    node = self.app.WaitForUiNode(resource_id='actionbar_title')
-    self.assertNodeHasAttribs(node, {'text': 'Primary'})
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testWaitForUiNode_notFound(self):
-    self._setMockXmlScreenshots(
-        [MOCK_XML_LOADING, MOCK_XML_LOADING, MOCK_XML_LOADING])
-    with self.assertRaises(device_errors.CommandTimeoutError):
-      self.app.WaitForUiNode(resource_id='actionbar_title')
diff --git a/systrace/catapult/devil/devil/android/battery_utils.py b/systrace/catapult/devil/devil/android/battery_utils.py
deleted file mode 100644
index a8a08a9..0000000
--- a/systrace/catapult/devil/devil/android/battery_utils.py
+++ /dev/null
@@ -1,711 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Provides a variety of device interactions with power.
-"""
-# pylint: disable=unused-argument
-
-import collections
-import contextlib
-import csv
-import logging
-
-from devil.android import decorators
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android.sdk import version_codes
-from devil.utils import timeout_retry
-
-logger = logging.getLogger(__name__)
-
-_DEFAULT_TIMEOUT = 30
-_DEFAULT_RETRIES = 3
-
-
-_DEVICE_PROFILES = [
-  {
-    'name': ['Nexus 4'],
-    'enable_command': (
-        'echo 0 > /sys/module/pm8921_charger/parameters/disabled && '
-        'dumpsys battery reset'),
-    'disable_command': (
-        'echo 1 > /sys/module/pm8921_charger/parameters/disabled && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': None,
-    'voltage': None,
-    'current': None,
-  },
-  {
-    'name': ['Nexus 5'],
-    # Nexus 5
-    # Setting the HIZ bit of the bq24192 causes the charger to actually ignore
-    # energy coming from USB. Setting the power_supply offline just updates the
-    # Android system to reflect that.
-    'enable_command': (
-        'echo 0x4A > /sys/kernel/debug/bq24192/INPUT_SRC_CONT && '
-        'chmod 644 /sys/class/power_supply/usb/online && '
-        'echo 1 > /sys/class/power_supply/usb/online && '
-        'dumpsys battery reset'),
-    'disable_command': (
-        'echo 0xCA > /sys/kernel/debug/bq24192/INPUT_SRC_CONT && '
-        'chmod 644 /sys/class/power_supply/usb/online && '
-        'echo 0 > /sys/class/power_supply/usb/online && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': None,
-    'voltage': None,
-    'current': None,
-  },
-  {
-    'name': ['Nexus 6'],
-    'enable_command': (
-        'echo 1 > /sys/class/power_supply/battery/charging_enabled && '
-        'dumpsys battery reset'),
-    'disable_command': (
-        'echo 0 > /sys/class/power_supply/battery/charging_enabled && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': (
-        '/sys/class/power_supply/max170xx_battery/charge_counter_ext'),
-    'voltage': '/sys/class/power_supply/max170xx_battery/voltage_now',
-    'current': '/sys/class/power_supply/max170xx_battery/current_now',
-  },
-  {
-    'name': ['Nexus 9'],
-    'enable_command': (
-        'echo Disconnected > '
-        '/sys/bus/i2c/drivers/bq2419x/0-006b/input_cable_state && '
-        'dumpsys battery reset'),
-    'disable_command': (
-        'echo Connected > '
-        '/sys/bus/i2c/drivers/bq2419x/0-006b/input_cable_state && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': '/sys/class/power_supply/battery/charge_counter_ext',
-    'voltage': '/sys/class/power_supply/battery/voltage_now',
-    'current': '/sys/class/power_supply/battery/current_now',
-  },
-  {
-    'name': ['Nexus 10'],
-    'enable_command': None,
-    'disable_command': None,
-    'charge_counter': None,
-    'voltage': '/sys/class/power_supply/ds2784-fuelgauge/voltage_now',
-    'current': '/sys/class/power_supply/ds2784-fuelgauge/current_now',
-
-  },
-  {
-    'name': ['Nexus 5X'],
-    'enable_command': (
-        'echo 1 > /sys/class/power_supply/battery/charging_enabled && '
-        'dumpsys battery reset'),
-    'disable_command': (
-        'echo 0 > /sys/class/power_supply/battery/charging_enabled && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': None,
-    'voltage': None,
-    'current': None,
-  },
-  { # Galaxy s5
-    'name': ['SM-G900H'],
-    'enable_command': (
-        'chmod 644 /sys/class/power_supply/battery/test_mode && '
-        'chmod 644 /sys/class/power_supply/sec-charger/current_now && '
-        'echo 0 > /sys/class/power_supply/battery/test_mode && '
-        'echo 9999 > /sys/class/power_supply/sec-charger/current_now &&'
-        'dumpsys battery reset'),
-    'disable_command': (
-        'chmod 644 /sys/class/power_supply/battery/test_mode && '
-        'chmod 644 /sys/class/power_supply/sec-charger/current_now && '
-        'echo 1 > /sys/class/power_supply/battery/test_mode && '
-        'echo 0 > /sys/class/power_supply/sec-charger/current_now && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': None,
-    'voltage': '/sys/class/power_supply/sec-fuelgauge/voltage_now',
-    'current': '/sys/class/power_supply/sec-charger/current_now',
-  },
-  { # Galaxy s6, Galaxy s6, Galaxy s6 edge
-    'name': ['SM-G920F', 'SM-G920V', 'SM-G925V'],
-    'enable_command': (
-        'chmod 644 /sys/class/power_supply/battery/test_mode && '
-        'chmod 644 /sys/class/power_supply/max77843-charger/current_now && '
-        'echo 0 > /sys/class/power_supply/battery/test_mode && '
-        'echo 9999 > /sys/class/power_supply/max77843-charger/current_now &&'
-        'dumpsys battery reset'),
-    'disable_command': (
-        'chmod 644 /sys/class/power_supply/battery/test_mode && '
-        'chmod 644 /sys/class/power_supply/max77843-charger/current_now && '
-        'echo 1 > /sys/class/power_supply/battery/test_mode && '
-        'echo 0 > /sys/class/power_supply/max77843-charger/current_now && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': None,
-    'voltage': '/sys/class/power_supply/max77843-fuelgauge/voltage_now',
-    'current': '/sys/class/power_supply/max77843-charger/current_now',
-  },
-  { # Cherry Mobile One
-    'name': ['W6210 (4560MMX_b fingerprint)'],
-    'enable_command': (
-        'echo "0 0" > /proc/mtk_battery_cmd/current_cmd && '
-        'dumpsys battery reset'),
-    'disable_command': (
-        'echo "0 1" > /proc/mtk_battery_cmd/current_cmd && '
-        'dumpsys battery set ac 0 && dumpsys battery set usb 0'),
-    'charge_counter': None,
-    'voltage': None,
-    'current': None,
-},
-]
-
-# The list of useful dumpsys columns.
-# Index of the column containing the format version.
-_DUMP_VERSION_INDEX = 0
-# Index of the column containing the type of the row.
-_ROW_TYPE_INDEX = 3
-# Index of the column containing the uid.
-_PACKAGE_UID_INDEX = 4
-# Index of the column containing the application package.
-_PACKAGE_NAME_INDEX = 5
-# The column containing the uid of the power data.
-_PWI_UID_INDEX = 1
-# The column containing the type of consumption. Only consumption since last
-# charge are of interest here.
-_PWI_AGGREGATION_INDEX = 2
-_PWS_AGGREGATION_INDEX = _PWI_AGGREGATION_INDEX
-# The column containing the amount of power used, in mah.
-_PWI_POWER_CONSUMPTION_INDEX = 5
-_PWS_POWER_CONSUMPTION_INDEX = _PWI_POWER_CONSUMPTION_INDEX
-
-_MAX_CHARGE_ERROR = 20
-
-
-class BatteryUtils(object):
-
-  def __init__(self, device, default_timeout=_DEFAULT_TIMEOUT,
-               default_retries=_DEFAULT_RETRIES):
-    """BatteryUtils constructor.
-
-      Args:
-        device: A DeviceUtils instance.
-        default_timeout: An integer containing the default number of seconds to
-                         wait for an operation to complete if no explicit value
-                         is provided.
-        default_retries: An integer containing the default number or times an
-                         operation should be retried on failure if no explicit
-                         value is provided.
-      Raises:
-        TypeError: If it is not passed a DeviceUtils instance.
-    """
-    if not isinstance(device, device_utils.DeviceUtils):
-      raise TypeError('Must be initialized with DeviceUtils object.')
-    self._device = device
-    self._cache = device.GetClientCache(self.__class__.__name__)
-    self._default_timeout = default_timeout
-    self._default_retries = default_retries
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SupportsFuelGauge(self, timeout=None, retries=None):
-    """Detect if fuel gauge chip is present.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if known fuel gauge files are present.
-      False otherwise.
-    """
-    self._DiscoverDeviceProfile()
-    return (self._cache['profile']['enable_command'] != None
-        and self._cache['profile']['charge_counter'] != None)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetFuelGaugeChargeCounter(self, timeout=None, retries=None):
-    """Get value of charge_counter on fuel gauge chip.
-
-    Device must have charging disabled for this, not just battery updates
-    disabled. The only device that this currently works with is the nexus 5.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      value of charge_counter for fuel gauge chip in units of nAh.
-
-    Raises:
-      device_errors.CommandFailedError: If fuel gauge chip not found.
-    """
-    if self.SupportsFuelGauge():
-      return int(self._device.ReadFile(
-          self._cache['profile']['charge_counter']))
-    raise device_errors.CommandFailedError(
-        'Unable to find fuel gauge.')
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetNetworkData(self, package, timeout=None, retries=None):
-    """Get network data for specific package.
-
-    Args:
-      package: package name you want network data for.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      Tuple of (sent_data, recieved_data)
-      None if no network data found
-    """
-    # If device_utils clears cache, cache['uids'] doesn't exist
-    if 'uids' not in self._cache:
-      self._cache['uids'] = {}
-    if package not in self._cache['uids']:
-      self.GetPowerData()
-      if package not in self._cache['uids']:
-        logger.warning('No UID found for %s. Can\'t get network data.',
-                       package)
-        return None
-
-    network_data_path = '/proc/uid_stat/%s/' % self._cache['uids'][package]
-    try:
-      send_data = int(self._device.ReadFile(network_data_path + 'tcp_snd'))
-    # If ReadFile throws exception, it means no network data usage file for
-    # package has been recorded. Return 0 sent and 0 received.
-    except device_errors.AdbShellCommandFailedError:
-      logger.warning('No sent data found for package %s', package)
-      send_data = 0
-    try:
-      recv_data = int(self._device.ReadFile(network_data_path + 'tcp_rcv'))
-    except device_errors.AdbShellCommandFailedError:
-      logger.warning('No received data found for package %s', package)
-      recv_data = 0
-    return (send_data, recv_data)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetPowerData(self, timeout=None, retries=None):
-    """Get power data for device.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      Dict containing system power, and a per-package power dict keyed on
-      package names.
-      {
-        'system_total': 23.1,
-        'per_package' : {
-          package_name: {
-            'uid': uid,
-            'data': [1,2,3]
-          },
-        }
-      }
-    """
-    if 'uids' not in self._cache:
-      self._cache['uids'] = {}
-    dumpsys_output = self._device.RunShellCommand(
-        ['dumpsys', 'batterystats', '-c'],
-        check_return=True, large_output=True)
-    csvreader = csv.reader(dumpsys_output)
-    pwi_entries = collections.defaultdict(list)
-    system_total = None
-    for entry in csvreader:
-      if entry[_DUMP_VERSION_INDEX] not in ['8', '9']:
-        # Wrong dumpsys version.
-        raise device_errors.DeviceVersionError(
-            'Dumpsys version must be 8 or 9. "%s" found.'
-            % entry[_DUMP_VERSION_INDEX])
-      if _ROW_TYPE_INDEX < len(entry) and entry[_ROW_TYPE_INDEX] == 'uid':
-        current_package = entry[_PACKAGE_NAME_INDEX]
-        if (self._cache['uids'].get(current_package)
-            and self._cache['uids'].get(current_package)
-            != entry[_PACKAGE_UID_INDEX]):
-          raise device_errors.CommandFailedError(
-              'Package %s found multiple times with different UIDs %s and %s'
-               % (current_package, self._cache['uids'][current_package],
-               entry[_PACKAGE_UID_INDEX]))
-        self._cache['uids'][current_package] = entry[_PACKAGE_UID_INDEX]
-      elif (_PWI_POWER_CONSUMPTION_INDEX < len(entry)
-          and entry[_ROW_TYPE_INDEX] == 'pwi'
-          and entry[_PWI_AGGREGATION_INDEX] == 'l'):
-        pwi_entries[entry[_PWI_UID_INDEX]].append(
-            float(entry[_PWI_POWER_CONSUMPTION_INDEX]))
-      elif (_PWS_POWER_CONSUMPTION_INDEX < len(entry)
-          and entry[_ROW_TYPE_INDEX] == 'pws'
-          and entry[_PWS_AGGREGATION_INDEX] == 'l'):
-        # This entry should only appear once.
-        assert system_total is None
-        system_total = float(entry[_PWS_POWER_CONSUMPTION_INDEX])
-
-    per_package = {p: {'uid': uid, 'data': pwi_entries[uid]}
-                   for p, uid in self._cache['uids'].iteritems()}
-    return {'system_total': system_total, 'per_package': per_package}
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetBatteryInfo(self, timeout=None, retries=None):
-    """Gets battery info for the device.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-    Returns:
-      A dict containing various battery information as reported by dumpsys
-      battery.
-    """
-    result = {}
-    # Skip the first line, which is just a header.
-    for line in self._device.RunShellCommand(
-        ['dumpsys', 'battery'], check_return=True)[1:]:
-      # If usb charging has been disabled, an extra line of header exists.
-      if 'UPDATES STOPPED' in line:
-        logger.warning('Dumpsys battery not receiving updates. '
-                       'Run dumpsys battery reset if this is in error.')
-      elif ':' not in line:
-        logger.warning('Unknown line found in dumpsys battery: "%s"', line)
-      else:
-        k, v = line.split(':', 1)
-        result[k.strip()] = v.strip()
-    return result
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetCharging(self, timeout=None, retries=None):
-    """Gets the charging state of the device.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-    Returns:
-      True if the device is charging, false otherwise.
-    """
-    battery_info = self.GetBatteryInfo()
-    for k in ('AC powered', 'USB powered', 'Wireless powered'):
-      if (k in battery_info and
-          battery_info[k].lower() in ('true', '1', 'yes')):
-        return True
-    return False
-
-  # TODO(rnephew): Make private when all use cases can use the context manager.
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def DisableBatteryUpdates(self, timeout=None, retries=None):
-    """Resets battery data and makes device appear like it is not
-    charging so that it will collect power data since last charge.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      device_errors.CommandFailedError: When resetting batterystats fails to
-        reset power values.
-      device_errors.DeviceVersionError: If device is not L or higher.
-    """
-    def battery_updates_disabled():
-      return self.GetCharging() is False
-
-    self._ClearPowerData()
-    self._device.RunShellCommand(['dumpsys', 'battery', 'set', 'ac', '0'],
-                                 check_return=True)
-    self._device.RunShellCommand(['dumpsys', 'battery', 'set', 'usb', '0'],
-                                 check_return=True)
-    timeout_retry.WaitFor(battery_updates_disabled, wait_period=1)
-
-  # TODO(rnephew): Make private when all use cases can use the context manager.
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def EnableBatteryUpdates(self, timeout=None, retries=None):
-    """Restarts device charging so that dumpsys no longer collects power data.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      device_errors.DeviceVersionError: If device is not L or higher.
-    """
-    def battery_updates_enabled():
-      return (self.GetCharging()
-              or not bool('UPDATES STOPPED' in self._device.RunShellCommand(
-                  ['dumpsys', 'battery'], check_return=True)))
-
-    self._device.RunShellCommand(['dumpsys', 'battery', 'reset'],
-                                 check_return=True)
-    timeout_retry.WaitFor(battery_updates_enabled, wait_period=1)
-
-  @contextlib.contextmanager
-  def BatteryMeasurement(self, timeout=None, retries=None):
-    """Context manager that enables battery data collection. It makes
-    the device appear to stop charging so that dumpsys will start collecting
-    power data since last charge. Once the with block is exited, charging is
-    resumed and power data since last charge is no longer collected.
-
-    Only for devices L and higher.
-
-    Example usage:
-      with BatteryMeasurement():
-        browser_actions()
-        get_power_data() # report usage within this block
-      after_measurements() # Anything that runs after power
-                           # measurements are collected
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      device_errors.DeviceVersionError: If device is not L or higher.
-    """
-    if self._device.build_version_sdk < version_codes.LOLLIPOP:
-      raise device_errors.DeviceVersionError('Device must be L or higher.')
-    try:
-      self.DisableBatteryUpdates(timeout=timeout, retries=retries)
-      yield
-    finally:
-      self.EnableBatteryUpdates(timeout=timeout, retries=retries)
-
-  def _DischargeDevice(self, percent, wait_period=120):
-    """Disables charging and waits for device to discharge given amount
-
-    Args:
-      percent: level of charge to discharge.
-
-    Raises:
-      ValueError: If percent is not between 1 and 99.
-    """
-    battery_level = int(self.GetBatteryInfo().get('level'))
-    if not 0 < percent < 100:
-      raise ValueError('Discharge amount(%s) must be between 1 and 99'
-                       % percent)
-    if battery_level is None:
-      logger.warning('Unable to find current battery level. Cannot discharge.')
-      return
-    # Do not discharge if it would make battery level too low.
-    if percent >= battery_level - 10:
-      logger.warning('Battery is too low or discharge amount requested is too '
-                     'high. Cannot discharge phone %s percent.', percent)
-      return
-
-    self._HardwareSetCharging(False)
-
-    def device_discharged():
-      self._HardwareSetCharging(True)
-      current_level = int(self.GetBatteryInfo().get('level'))
-      logger.info('current battery level: %s', current_level)
-      if battery_level - current_level >= percent:
-        return True
-      self._HardwareSetCharging(False)
-      return False
-
-    timeout_retry.WaitFor(device_discharged, wait_period=wait_period)
-
-  def ChargeDeviceToLevel(self, level, wait_period=60):
-    """Enables charging and waits for device to be charged to given level.
-
-    Args:
-      level: level of charge to wait for.
-      wait_period: time in seconds to wait between checking.
-    Raises:
-      device_errors.DeviceChargingError: If error while charging is detected.
-    """
-    self.SetCharging(True)
-    charge_status = {
-        'charge_failure_count': 0,
-        'last_charge_value': 0
-    }
-    def device_charged():
-      battery_level = self.GetBatteryInfo().get('level')
-      if battery_level is None:
-        logger.warning('Unable to find current battery level.')
-        battery_level = 100
-      else:
-        logger.info('current battery level: %s', battery_level)
-        battery_level = int(battery_level)
-
-      # Use > so that it will not reset if charge is going down.
-      if battery_level > charge_status['last_charge_value']:
-        charge_status['last_charge_value'] = battery_level
-        charge_status['charge_failure_count'] = 0
-      else:
-        charge_status['charge_failure_count'] += 1
-
-      if (not battery_level >= level
-          and charge_status['charge_failure_count'] >= _MAX_CHARGE_ERROR):
-        raise device_errors.DeviceChargingError(
-            'Device not charging properly. Current level:%s Previous level:%s'
-             % (battery_level, charge_status['last_charge_value']))
-      return battery_level >= level
-
-    timeout_retry.WaitFor(device_charged, wait_period=wait_period)
-
-  def LetBatteryCoolToTemperature(self, target_temp, wait_period=180):
-    """Lets device sit to give battery time to cool down
-    Args:
-      temp: maximum temperature to allow in tenths of degrees c.
-      wait_period: time in seconds to wait between checking.
-    """
-    def cool_device():
-      temp = self.GetBatteryInfo().get('temperature')
-      if temp is None:
-        logger.warning('Unable to find current battery temperature.')
-        temp = 0
-      else:
-        logger.info('Current battery temperature: %s', temp)
-      if int(temp) <= target_temp:
-        return True
-      else:
-        if 'Nexus 5' in self._cache['profile']['name']:
-          self._DischargeDevice(1)
-        return False
-
-    self._DiscoverDeviceProfile()
-    self.EnableBatteryUpdates()
-    logger.info('Waiting for the device to cool down to %s (0.1 C)',
-                target_temp)
-    timeout_retry.WaitFor(cool_device, wait_period=wait_period)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SetCharging(self, enabled, timeout=None, retries=None):
-    """Enables or disables charging on the device.
-
-    Args:
-      enabled: A boolean indicating whether charging should be enabled or
-        disabled.
-      timeout: timeout in seconds
-      retries: number of retries
-    """
-    if self.GetCharging() == enabled:
-      logger.warning('Device charging already in expected state: %s', enabled)
-      return
-
-    self._DiscoverDeviceProfile()
-    if enabled:
-      if self._cache['profile']['enable_command']:
-        self._HardwareSetCharging(enabled)
-      else:
-        logger.info('Unable to enable charging via hardware. '
-                    'Falling back to software enabling.')
-        self.EnableBatteryUpdates()
-    else:
-      if self._cache['profile']['enable_command']:
-        self._ClearPowerData()
-        self._HardwareSetCharging(enabled)
-      else:
-        logger.info('Unable to disable charging via hardware. '
-                     'Falling back to software disabling.')
-        self.DisableBatteryUpdates()
-
-  def _HardwareSetCharging(self, enabled, timeout=None, retries=None):
-    """Enables or disables charging on the device.
-
-    Args:
-      enabled: A boolean indicating whether charging should be enabled or
-        disabled.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      device_errors.CommandFailedError: If method of disabling charging cannot
-        be determined.
-    """
-    self._DiscoverDeviceProfile()
-    if not self._cache['profile']['enable_command']:
-      raise device_errors.CommandFailedError(
-          'Unable to find charging commands.')
-
-    command = (self._cache['profile']['enable_command'] if enabled
-               else self._cache['profile']['disable_command'])
-
-    def verify_charging():
-      return self.GetCharging() == enabled
-
-    self._device.RunShellCommand(
-        command, shell=True, check_return=True, as_root=True, large_output=True)
-    timeout_retry.WaitFor(verify_charging, wait_period=1)
-
-  @contextlib.contextmanager
-  def PowerMeasurement(self, timeout=None, retries=None):
-    """Context manager that enables battery power collection.
-
-    Once the with block is exited, charging is resumed. Will attempt to disable
-    charging at the hardware level, and if that fails will fall back to software
-    disabling of battery updates.
-
-    Only for devices L and higher.
-
-    Example usage:
-      with PowerMeasurement():
-        browser_actions()
-        get_power_data() # report usage within this block
-      after_measurements() # Anything that runs after power
-                           # measurements are collected
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-    """
-    try:
-      self.SetCharging(False, timeout=timeout, retries=retries)
-      yield
-    finally:
-      self.SetCharging(True, timeout=timeout, retries=retries)
-
-  def _ClearPowerData(self):
-    """Resets battery data and makes device appear like it is not
-    charging so that it will collect power data since last charge.
-
-    Returns:
-      True if power data cleared.
-      False if power data clearing is not supported (pre-L)
-
-    Raises:
-      device_errors.DeviceVersionError: If power clearing is supported,
-        but fails.
-    """
-    if self._device.build_version_sdk < version_codes.LOLLIPOP:
-      logger.warning('Dumpsys power data only available on 5.0 and above. '
-                     'Cannot clear power data.')
-      return False
-
-    self._device.RunShellCommand(
-        ['dumpsys', 'battery', 'set', 'usb', '1'], check_return=True)
-    self._device.RunShellCommand(
-        ['dumpsys', 'battery', 'set', 'ac', '1'], check_return=True)
-
-    def test_if_clear():
-      self._device.RunShellCommand(
-          ['dumpsys', 'batterystats', '--reset'], check_return=True)
-      battery_data = self._device.RunShellCommand(
-          ['dumpsys', 'batterystats', '--charged', '-c'],
-          check_return=True, large_output=True)
-      for line in battery_data:
-        l = line.split(',')
-        if (len(l) > _PWI_POWER_CONSUMPTION_INDEX
-            and l[_ROW_TYPE_INDEX] == 'pwi'
-            and float(l[_PWI_POWER_CONSUMPTION_INDEX]) != 0.0):
-          return False
-      return True
-
-    try:
-      timeout_retry.WaitFor(test_if_clear, wait_period=1)
-      return True
-    finally:
-      self._device.RunShellCommand(
-          ['dumpsys', 'battery', 'reset'], check_return=True)
-
-  def _DiscoverDeviceProfile(self):
-    """Checks and caches device information.
-
-    Returns:
-      True if profile is found, false otherwise.
-    """
-
-    if 'profile' in self._cache:
-      return True
-    for profile in _DEVICE_PROFILES:
-      if self._device.product_model in profile['name']:
-        self._cache['profile'] = profile
-        return True
-    self._cache['profile'] = {
-        'name': [],
-        'enable_command': None,
-        'disable_command': None,
-        'charge_counter': None,
-        'voltage': None,
-        'current': None,
-    }
-    return False
diff --git a/systrace/catapult/devil/devil/android/battery_utils_test.py b/systrace/catapult/devil/devil/android/battery_utils_test.py
deleted file mode 100755
index feccf79..0000000
--- a/systrace/catapult/devil/devil/android/battery_utils_test.py
+++ /dev/null
@@ -1,697 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for the contents of battery_utils.py
-"""
-
-# pylint: disable=protected-access,unused-argument
-
-import logging
-import unittest
-
-from devil import devil_env
-from devil.android import battery_utils
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android import device_utils_test
-from devil.utils import mock_calls
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-_DUMPSYS_OUTPUT = [
-    '9,0,i,uid,1000,test_package1',
-    '9,0,i,uid,1001,test_package2',
-    '9,1000,l,pwi,uid,1',
-    '9,1001,l,pwi,uid,2',
-    '9,0,l,pws,1728,2000,190,207',
-]
-
-
-class BatteryUtilsTest(mock_calls.TestCase):
-
-  _NEXUS_5 = {
-    'name': 'Nexus 5',
-    'witness_file': '/sys/kernel/debug/bq24192/INPUT_SRC_CONT',
-    'enable_command': (
-        'echo 0x4A > /sys/kernel/debug/bq24192/INPUT_SRC_CONT && '
-        'echo 1 > /sys/class/power_supply/usb/online'),
-    'disable_command': (
-        'echo 0xCA > /sys/kernel/debug/bq24192/INPUT_SRC_CONT && '
-        'chmod 644 /sys/class/power_supply/usb/online && '
-        'echo 0 > /sys/class/power_supply/usb/online'),
-    'charge_counter': None,
-    'voltage': None,
-    'current': None,
-  }
-
-  _NEXUS_6 = {
-    'name': 'Nexus 6',
-    'witness_file': None,
-    'enable_command': None,
-    'disable_command': None,
-    'charge_counter': (
-        '/sys/class/power_supply/max170xx_battery/charge_counter_ext'),
-    'voltage': '/sys/class/power_supply/max170xx_battery/voltage_now',
-    'current': '/sys/class/power_supply/max170xx_battery/current_now',
-  }
-
-  _NEXUS_10 = {
-    'name': 'Nexus 10',
-    'witness_file': None,
-    'enable_command': None,
-    'disable_command': None,
-    'charge_counter': (
-        '/sys/class/power_supply/ds2784-fuelgauge/charge_counter_ext'),
-    'voltage': '/sys/class/power_supply/ds2784-fuelgauge/voltage_now',
-    'current': '/sys/class/power_supply/ds2784-fuelgauge/current_now',
-  }
-
-  def ShellError(self, output=None, status=1):
-    def action(cmd, *args, **kwargs):
-      raise device_errors.AdbShellCommandFailedError(
-          cmd, output, status, str(self.device))
-    if output is None:
-      output = 'Permission denied\n'
-    return action
-
-  def setUp(self):
-    self.adb = device_utils_test._AdbWrapperMock('0123456789abcdef')
-    self.device = device_utils.DeviceUtils(
-        self.adb, default_timeout=10, default_retries=0)
-    self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial'])
-    self.battery = battery_utils.BatteryUtils(
-        self.device, default_timeout=10, default_retries=0)
-
-
-class BatteryUtilsInitTest(unittest.TestCase):
-
-  def testInitWithDeviceUtil(self):
-    serial = '0fedcba987654321'
-    d = device_utils.DeviceUtils(serial)
-    b = battery_utils.BatteryUtils(d)
-    self.assertEqual(d, b._device)
-
-  def testInitWithMissing_fails(self):
-    with self.assertRaises(TypeError):
-      battery_utils.BatteryUtils(None)
-    with self.assertRaises(TypeError):
-      battery_utils.BatteryUtils('')
-
-
-class BatteryUtilsSetChargingTest(BatteryUtilsTest):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testHardwareSetCharging_enabled(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            mock.ANY, shell=True, check_return=True, as_root=True,
-            large_output=True), []),
-        (self.call.battery.GetCharging(), False),
-        (self.call.battery.GetCharging(), True)):
-      self.battery._HardwareSetCharging(True)
-
-  def testHardwareSetCharging_alreadyEnabled(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            mock.ANY, shell=True, check_return=True, as_root=True,
-            large_output=True), []),
-        (self.call.battery.GetCharging(), True)):
-      self.battery._HardwareSetCharging(True)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testHardwareSetCharging_disabled(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            mock.ANY, shell=True, check_return=True, as_root=True,
-            large_output=True), []),
-        (self.call.battery.GetCharging(), True),
-        (self.call.battery.GetCharging(), False)):
-      self.battery._HardwareSetCharging(False)
-
-
-class BatteryUtilsSetBatteryMeasurementTest(BatteryUtilsTest):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testBatteryMeasurementWifi(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=22):
-      with self.assertCalls(
-          (self.call.battery._ClearPowerData(), True),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'ac', '0'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'usb', '0'], check_return=True),
-           []),
-          (self.call.battery.GetCharging(), False),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'reset'], check_return=True), []),
-          (self.call.battery.GetCharging(), False),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery'], check_return=True), ['UPDATES STOPPED']),
-          (self.call.battery.GetCharging(), False),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery'], check_return=True), [])):
-        with self.battery.BatteryMeasurement():
-          pass
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testBatteryMeasurementUsb(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=22):
-      with self.assertCalls(
-          (self.call.battery._ClearPowerData(), True),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'ac', '0'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'usb', '0'], check_return=True),
-           []),
-          (self.call.battery.GetCharging(), False),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'reset'], check_return=True), []),
-          (self.call.battery.GetCharging(), False),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery'], check_return=True), ['UPDATES STOPPED']),
-          (self.call.battery.GetCharging(), True)):
-        with self.battery.BatteryMeasurement():
-          pass
-
-
-class BatteryUtilsGetPowerData(BatteryUtilsTest):
-
-  def testGetPowerData(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-         _DUMPSYS_OUTPUT)):
-      data = self.battery.GetPowerData()
-      check = {
-        'system_total': 2000.0,
-        'per_package': {
-          'test_package1': {'uid': '1000', 'data': [1.0]},
-          'test_package2': {'uid': '1001', 'data': [2.0]}
-        }
-      }
-      self.assertEqual(data, check)
-
-  def testGetPowerData_packageCollisionSame(self):
-    self.battery._cache['uids'] = {'test_package1': '1000'}
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-        _DUMPSYS_OUTPUT):
-      data = self.battery.GetPowerData()
-      check = {
-        'system_total': 2000.0,
-        'per_package': {
-          'test_package1': {'uid': '1000', 'data': [1.0]},
-          'test_package2': {'uid': '1001', 'data': [2.0]}
-        }
-      }
-      self.assertEqual(data, check)
-
-  def testGetPowerData_packageCollisionDifferent(self):
-    self.battery._cache['uids'] = {'test_package1': '1'}
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-        _DUMPSYS_OUTPUT):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.battery.GetPowerData()
-
-  def testGetPowerData_cacheCleared(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-         _DUMPSYS_OUTPUT)):
-      self.battery._cache.clear()
-      data = self.battery.GetPowerData()
-      check = {
-        'system_total': 2000.0,
-        'per_package': {
-          'test_package1': {'uid': '1000', 'data': [1.0]},
-          'test_package2': {'uid': '1001', 'data': [2.0]}
-        }
-      }
-      self.assertEqual(data, check)
-
-
-class BatteryUtilsChargeDevice(BatteryUtilsTest):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testChargeDeviceToLevel_pass(self):
-    with self.assertCalls(
-        (self.call.battery.SetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '50'}),
-        (self.call.battery.GetBatteryInfo(), {'level': '100'})):
-      self.battery.ChargeDeviceToLevel(95)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testChargeDeviceToLevel_failureSame(self):
-    with self.assertCalls(
-        (self.call.battery.SetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '50'}),
-        (self.call.battery.GetBatteryInfo(), {'level': '50'}),
-
-        (self.call.battery.GetBatteryInfo(), {'level': '50'})):
-      with self.assertRaises(device_errors.DeviceChargingError):
-        old_max = battery_utils._MAX_CHARGE_ERROR
-        try:
-          battery_utils._MAX_CHARGE_ERROR = 2
-          self.battery.ChargeDeviceToLevel(95)
-        finally:
-          battery_utils._MAX_CHARGE_ERROR = old_max
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testChargeDeviceToLevel_failureDischarge(self):
-    with self.assertCalls(
-        (self.call.battery.SetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '50'}),
-        (self.call.battery.GetBatteryInfo(), {'level': '49'}),
-        (self.call.battery.GetBatteryInfo(), {'level': '48'})):
-      with self.assertRaises(device_errors.DeviceChargingError):
-        old_max = battery_utils._MAX_CHARGE_ERROR
-        try:
-          battery_utils._MAX_CHARGE_ERROR = 2
-          self.battery.ChargeDeviceToLevel(95)
-        finally:
-          battery_utils._MAX_CHARGE_ERROR = old_max
-
-
-class BatteryUtilsDischargeDevice(BatteryUtilsTest):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testDischargeDevice_exact(self):
-    with self.assertCalls(
-        (self.call.battery.GetBatteryInfo(), {'level': '100'}),
-        (self.call.battery._HardwareSetCharging(False)),
-        (self.call.battery._HardwareSetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '99'})):
-      self.battery._DischargeDevice(1)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testDischargeDevice_over(self):
-    with self.assertCalls(
-        (self.call.battery.GetBatteryInfo(), {'level': '100'}),
-        (self.call.battery._HardwareSetCharging(False)),
-        (self.call.battery._HardwareSetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '50'})):
-      self.battery._DischargeDevice(1)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testDischargeDevice_takeslong(self):
-    with self.assertCalls(
-        (self.call.battery.GetBatteryInfo(), {'level': '100'}),
-        (self.call.battery._HardwareSetCharging(False)),
-        (self.call.battery._HardwareSetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '100'}),
-        (self.call.battery._HardwareSetCharging(False)),
-        (self.call.battery._HardwareSetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '99'}),
-        (self.call.battery._HardwareSetCharging(False)),
-        (self.call.battery._HardwareSetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '98'}),
-        (self.call.battery._HardwareSetCharging(False)),
-        (self.call.battery._HardwareSetCharging(True)),
-        (self.call.battery.GetBatteryInfo(), {'level': '97'})):
-      self.battery._DischargeDevice(3)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testDischargeDevice_dischargeTooClose(self):
-    with self.assertCalls(
-        (self.call.battery.GetBatteryInfo(), {'level': '100'})):
-      self.battery._DischargeDevice(99)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testDischargeDevice_percentageOutOfBounds(self):
-    with self.assertCalls(
-        (self.call.battery.GetBatteryInfo(), {'level': '100'})):
-      with self.assertRaises(ValueError):
-        self.battery._DischargeDevice(100)
-    with self.assertCalls(
-        (self.call.battery.GetBatteryInfo(), {'level': '100'})):
-      with self.assertRaises(ValueError):
-        self.battery._DischargeDevice(0)
-
-
-class BatteryUtilsGetBatteryInfoTest(BatteryUtilsTest):
-
-  def testGetBatteryInfo_normal(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery'], check_return=True),
-        [
-          'Current Battery Service state:',
-          '  AC powered: false',
-          '  USB powered: true',
-          '  level: 100',
-          '  temperature: 321',
-        ])):
-      self.assertEquals(
-          {
-            'AC powered': 'false',
-            'USB powered': 'true',
-            'level': '100',
-            'temperature': '321',
-          },
-          self.battery.GetBatteryInfo())
-
-  def testGetBatteryInfo_nothing(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery'], check_return=True), [])):
-      self.assertEquals({}, self.battery.GetBatteryInfo())
-
-
-class BatteryUtilsGetChargingTest(BatteryUtilsTest):
-
-  def testGetCharging_usb(self):
-    with self.assertCall(
-        self.call.battery.GetBatteryInfo(), {'USB powered': 'true'}):
-      self.assertTrue(self.battery.GetCharging())
-
-  def testGetCharging_usbFalse(self):
-    with self.assertCall(
-        self.call.battery.GetBatteryInfo(), {'USB powered': 'false'}):
-      self.assertFalse(self.battery.GetCharging())
-
-  def testGetCharging_ac(self):
-    with self.assertCall(
-        self.call.battery.GetBatteryInfo(), {'AC powered': 'true'}):
-      self.assertTrue(self.battery.GetCharging())
-
-  def testGetCharging_wireless(self):
-    with self.assertCall(
-        self.call.battery.GetBatteryInfo(), {'Wireless powered': 'true'}):
-      self.assertTrue(self.battery.GetCharging())
-
-  def testGetCharging_unknown(self):
-    with self.assertCall(
-        self.call.battery.GetBatteryInfo(), {'level': '42'}):
-      self.assertFalse(self.battery.GetCharging())
-
-
-class BatteryUtilsGetNetworkDataTest(BatteryUtilsTest):
-
-  def testGetNetworkData_noDataUsage(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-         _DUMPSYS_OUTPUT),
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'),
-            self.ShellError()),
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'),
-            self.ShellError())):
-      self.assertEquals(self.battery.GetNetworkData('test_package1'), (0, 0))
-
-  def testGetNetworkData_badPackage(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-        _DUMPSYS_OUTPUT):
-      self.assertEqual(self.battery.GetNetworkData('asdf'), None)
-
-  def testGetNetworkData_packageNotCached(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-         _DUMPSYS_OUTPUT),
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
-      self.assertEqual(self.battery.GetNetworkData('test_package1'), (1, 2))
-
-  def testGetNetworkData_packageCached(self):
-    self.battery._cache['uids'] = {'test_package1': '1000'}
-    with self.assertCalls(
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
-      self.assertEqual(self.battery.GetNetworkData('test_package1'), (1, 2))
-
-  def testGetNetworkData_clearedCache(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'batterystats', '-c'],
-            check_return=True, large_output=True),
-         _DUMPSYS_OUTPUT),
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_snd'), 1),
-        (self.call.device.ReadFile('/proc/uid_stat/1000/tcp_rcv'), 2)):
-      self.battery._cache.clear()
-      self.assertEqual(self.battery.GetNetworkData('test_package1'), (1, 2))
-
-
-class BatteryUtilsLetBatteryCoolToTemperatureTest(BatteryUtilsTest):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testLetBatteryCoolToTemperature_startUnder(self):
-    self.battery._cache['profile'] = self._NEXUS_6
-    with self.assertCalls(
-        (self.call.battery.EnableBatteryUpdates(), []),
-        (self.call.battery.GetBatteryInfo(), {'temperature': '500'})):
-      self.battery.LetBatteryCoolToTemperature(600)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testLetBatteryCoolToTemperature_startOver(self):
-    self.battery._cache['profile'] = self._NEXUS_6
-    with self.assertCalls(
-        (self.call.battery.EnableBatteryUpdates(), []),
-        (self.call.battery.GetBatteryInfo(), {'temperature': '500'}),
-        (self.call.battery.GetBatteryInfo(), {'temperature': '400'})):
-      self.battery.LetBatteryCoolToTemperature(400)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testLetBatteryCoolToTemperature_nexus5Hot(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.battery.EnableBatteryUpdates(), []),
-        (self.call.battery.GetBatteryInfo(), {'temperature': '500'}),
-        (self.call.battery._DischargeDevice(1), []),
-        (self.call.battery.GetBatteryInfo(), {'temperature': '400'})):
-      self.battery.LetBatteryCoolToTemperature(400)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testLetBatteryCoolToTemperature_nexus5Cool(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.battery.EnableBatteryUpdates(), []),
-        (self.call.battery.GetBatteryInfo(), {'temperature': '400'})):
-      self.battery.LetBatteryCoolToTemperature(400)
-
-
-class BatteryUtilsSupportsFuelGaugeTest(BatteryUtilsTest):
-
-  def testSupportsFuelGauge_false(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    self.assertFalse(self.battery.SupportsFuelGauge())
-
-  def testSupportsFuelGauge_trueMax(self):
-    self.battery._cache['profile'] = self._NEXUS_6
-    # TODO(rnephew): Change this to assertTrue when we have support for
-    # disabling hardware charging on nexus 6.
-    self.assertFalse(self.battery.SupportsFuelGauge())
-
-  def testSupportsFuelGauge_trueDS(self):
-    self.battery._cache['profile'] = self._NEXUS_10
-    # TODO(rnephew): Change this to assertTrue when we have support for
-    # disabling hardware charging on nexus 10.
-    self.assertFalse(self.battery.SupportsFuelGauge())
-
-
-class BatteryUtilsGetFuelGaugeChargeCounterTest(BatteryUtilsTest):
-
-  def testGetFuelGaugeChargeCounter_noFuelGauge(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertRaises(device_errors.CommandFailedError):
-      self.battery.GetFuelGaugeChargeCounter()
-
-  def testGetFuelGaugeChargeCounter_fuelGaugePresent(self):
-    self.battery._cache['profile'] = self._NEXUS_6
-    with self.assertCalls(
-        (self.call.battery.SupportsFuelGauge(), True),
-        (self.call.device.ReadFile(mock.ANY), '123')):
-      self.assertEqual(self.battery.GetFuelGaugeChargeCounter(), 123)
-
-
-class BatteryUtilsSetCharging(BatteryUtilsTest):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetCharging_softwareSetTrue(self):
-    self.battery._cache['profile'] = self._NEXUS_6
-    with self.assertCalls(
-        (self.call.battery.GetCharging(), False),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery', 'reset'], check_return=True), []),
-        (self.call.battery.GetCharging(), False),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery'], check_return=True), ['UPDATES STOPPED']),
-        (self.call.battery.GetCharging(), True)):
-      self.battery.SetCharging(True)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetCharging_softwareSetFalse(self):
-    self.battery._cache['profile'] = self._NEXUS_6
-    with self.assertCalls(
-        (self.call.battery.GetCharging(), True),
-        (self.call.battery._ClearPowerData(), True),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery', 'set', 'ac', '0'], check_return=True), []),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery', 'set', 'usb', '0'], check_return=True), []),
-        (self.call.battery.GetCharging(), False)):
-      self.battery.SetCharging(False)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetCharging_hardwareSetTrue(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.battery.GetCharging(), False),
-        (self.call.battery._HardwareSetCharging(True))):
-      self.battery.SetCharging(True)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetCharging_hardwareSetFalse(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.battery.GetCharging(), True),
-        (self.call.battery._ClearPowerData(), True),
-        (self.call.battery._HardwareSetCharging(False))):
-      self.battery.SetCharging(False)
-
-  def testSetCharging_expectedStateAlreadyTrue(self):
-    with self.assertCalls((self.call.battery.GetCharging(), True)):
-      self.battery.SetCharging(True)
-
-  def testSetCharging_expectedStateAlreadyFalse(self):
-    with self.assertCalls((self.call.battery.GetCharging(), False)):
-      self.battery.SetCharging(False)
-
-
-class BatteryUtilsPowerMeasurement(BatteryUtilsTest):
-
-  def testPowerMeasurement_hardware(self):
-    self.battery._cache['profile'] = self._NEXUS_5
-    with self.assertCalls(
-        (self.call.battery.GetCharging(), True),
-        (self.call.battery._ClearPowerData(), True),
-        (self.call.battery._HardwareSetCharging(False)),
-        (self.call.battery.GetCharging(), False),
-        (self.call.battery._HardwareSetCharging(True))):
-      with self.battery.PowerMeasurement():
-        pass
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testPowerMeasurement_software(self):
-    self.battery._cache['profile'] = self._NEXUS_6
-    with self.assertCalls(
-        (self.call.battery.GetCharging(), True),
-        (self.call.battery._ClearPowerData(), True),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery', 'set', 'ac', '0'], check_return=True), []),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery', 'set', 'usb', '0'], check_return=True), []),
-        (self.call.battery.GetCharging(), False),
-        (self.call.battery.GetCharging(), False),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery', 'reset'], check_return=True), []),
-        (self.call.battery.GetCharging(), False),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'battery'], check_return=True), ['UPDATES STOPPED']),
-        (self.call.battery.GetCharging(), True)):
-      with self.battery.PowerMeasurement():
-        pass
-
-
-class BatteryUtilsDiscoverDeviceProfile(BatteryUtilsTest):
-
-  def testDiscoverDeviceProfile_known(self):
-    with self.patch_call(self.call.device.product_model,
-                         return_value='Nexus 4'):
-      self.battery._DiscoverDeviceProfile()
-      self.assertListEqual(self.battery._cache['profile']['name'], ["Nexus 4"])
-
-  def testDiscoverDeviceProfile_unknown(self):
-    with self.patch_call(self.call.device.product_model,
-                         return_value='Other'):
-      self.battery._DiscoverDeviceProfile()
-      self.assertListEqual(self.battery._cache['profile']['name'], [])
-
-
-class BatteryUtilsClearPowerData(BatteryUtilsTest):
-
-  def testClearPowerData_preL(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=20):
-      self.assertFalse(self.battery._ClearPowerData())
-
-  def testClearPowerData_clearedL(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=22):
-      with self.assertCalls(
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'usb', '1'], check_return=True),
-           []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'ac', '1'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--reset'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--charged', '-c'],
-              check_return=True, large_output=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'reset'], check_return=True), [])):
-        self.assertTrue(self.battery._ClearPowerData())
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testClearPowerData_notClearedL(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=22):
-      with self.assertCalls(
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'usb', '1'], check_return=True),
-           []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'set', 'ac', '1'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--reset'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--charged', '-c'],
-              check_return=True, large_output=True),
-              ['9,1000,l,pwi,uid,0.0327']),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--reset'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--charged', '-c'],
-              check_return=True, large_output=True),
-              ['9,1000,l,pwi,uid,0.0327']),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--reset'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--charged', '-c'],
-              check_return=True, large_output=True),
-              ['9,1000,l,pwi,uid,0.0327']),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--reset'], check_return=True), []),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'batterystats', '--charged', '-c'],
-              check_return=True, large_output=True),
-              ['9,1000,l,pwi,uid,0.0']),
-          (self.call.device.RunShellCommand(
-              ['dumpsys', 'battery', 'reset'], check_return=True), [])):
-        self.battery._ClearPowerData()
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/constants/__init__.py b/systrace/catapult/devil/devil/android/constants/__init__.py
deleted file mode 100644
index 50b23df..0000000
--- a/systrace/catapult/devil/devil/android/constants/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
diff --git a/systrace/catapult/devil/devil/android/constants/chrome.py b/systrace/catapult/devil/devil/android/constants/chrome.py
deleted file mode 100644
index 36bd972..0000000
--- a/systrace/catapult/devil/devil/android/constants/chrome.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import collections
-
-PackageInfo = collections.namedtuple(
-    'PackageInfo',
-    ['package', 'activity', 'cmdline_file', 'devtools_socket'])
-
-PACKAGE_INFO = {
-    'chrome_document': PackageInfo(
-        'com.google.android.apps.chrome.document',
-        'com.google.android.apps.chrome.document.ChromeLauncherActivity',
-        'chrome-command-line',
-        'chrome_devtools_remote'),
-    'chrome': PackageInfo(
-        'com.google.android.apps.chrome',
-        'com.google.android.apps.chrome.Main',
-        'chrome-command-line',
-        'chrome_devtools_remote'),
-    'chrome_beta': PackageInfo(
-        'com.chrome.beta',
-        'com.google.android.apps.chrome.Main',
-        'chrome-command-line',
-        'chrome_devtools_remote'),
-    'chrome_stable': PackageInfo(
-        'com.android.chrome',
-        'com.google.android.apps.chrome.Main',
-        'chrome-command-line',
-        'chrome_devtools_remote'),
-    'chrome_dev': PackageInfo(
-        'com.chrome.dev',
-        'com.google.android.apps.chrome.Main',
-        'chrome-command-line',
-        'chrome_devtools_remote'),
-    'chrome_canary': PackageInfo(
-        'com.chrome.canary',
-        'com.google.android.apps.chrome.Main',
-        'chrome-command-line',
-        'chrome_devtools_remote'),
-    'chromium': PackageInfo(
-        'org.chromium.chrome',
-        'com.google.android.apps.chrome.Main',
-        'chrome-command-line',
-        'chrome_devtools_remote'),
-    'content_shell': PackageInfo(
-        'org.chromium.content_shell_apk',
-        '.ContentShellActivity',
-        'content-shell-command-line',
-        'content_shell_devtools_remote'),
-}
diff --git a/systrace/catapult/devil/devil/android/constants/file_system.py b/systrace/catapult/devil/devil/android/constants/file_system.py
deleted file mode 100644
index bffec61..0000000
--- a/systrace/catapult/devil/devil/android/constants/file_system.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-TEST_EXECUTABLE_DIR = '/data/local/tmp'
diff --git a/systrace/catapult/devil/devil/android/constants/webapk.py b/systrace/catapult/devil/devil/android/constants/webapk.py
deleted file mode 100644
index 5a17e72..0000000
--- a/systrace/catapult/devil/devil/android/constants/webapk.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-WEBAPK_MAIN_ACTIVITY = 'org.chromium.webapk.shell_apk.MainActivity'
-
diff --git a/systrace/catapult/devil/devil/android/crash_handler.py b/systrace/catapult/devil/devil/android/crash_handler.py
deleted file mode 100644
index 7cfabcf..0000000
--- a/systrace/catapult/devil/devil/android/crash_handler.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-import logging
-
-from devil import base_error
-from devil.android import device_errors
-
-logger = logging.getLogger(__name__)
-
-
-def RetryOnSystemCrash(f, device, retries=3):
-  """Retries the given function on a device crash.
-
-  If the provided function fails with a DeviceUnreachableError, this will wait
-  for the device to come back online, then retry the function.
-
-  Note that this uses the same retry scheme as timeout_retry.Run.
-
-  Args:
-    f: a unary callable that takes an instance of device_utils.DeviceUtils.
-    device: an instance of device_utils.DeviceUtils.
-    retries: the number of retries.
-  Returns:
-    Whatever f returns.
-  """
-  num_try = 1
-  while True:
-    try:
-      return f(device)
-    except device_errors.DeviceUnreachableError:
-      if num_try > retries:
-        logger.error('%d consecutive device crashes. No longer retrying.',
-                      num_try)
-        raise
-      try:
-        logger.warning('Device is unreachable. Waiting for recovery...')
-        device.WaitUntilFullyBooted()
-      except base_error.BaseError:
-        logger.exception('Device never recovered. X(')
-    num_try += 1
diff --git a/systrace/catapult/devil/devil/android/crash_handler_devicetest.py b/systrace/catapult/devil/devil/android/crash_handler_devicetest.py
deleted file mode 100755
index 6365104..0000000
--- a/systrace/catapult/devil/devil/android/crash_handler_devicetest.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', )))
-
-from devil.android import crash_handler
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android import device_temp_file
-from devil.android import device_test_case
-from devil.utils import cmd_helper
-from devil.utils import reraiser_thread
-from devil.utils import timeout_retry
-
-
-class DeviceCrashTest(device_test_case.DeviceTestCase):
-
-  def setUp(self):
-    super(DeviceCrashTest, self).setUp()
-    self.device = device_utils.DeviceUtils(self.serial)
-
-  def testCrashDuringCommand(self):
-    self.device.EnableRoot()
-    with device_temp_file.DeviceTempFile(self.device.adb) as trigger_file:
-
-      trigger_text = 'hello world'
-
-      def victim():
-        trigger_cmd = 'echo -n %s > %s; sleep 20' % (
-            cmd_helper.SingleQuote(trigger_text),
-            cmd_helper.SingleQuote(trigger_file.name))
-        crash_handler.RetryOnSystemCrash(
-            lambda d: d.RunShellCommand(
-                trigger_cmd, shell=True, check_return=True, retries=1,
-                as_root=True, timeout=180),
-            device=self.device)
-        self.assertEquals(
-            trigger_text,
-            self.device.ReadFile(trigger_file.name, retries=0).strip())
-        return True
-
-      def crasher():
-        def ready_to_crash():
-          try:
-            return trigger_text == self.device.ReadFile(
-                trigger_file.name, retries=0).strip()
-          except device_errors.CommandFailedError:
-            return False
-
-        timeout_retry.WaitFor(ready_to_crash, wait_period=2, max_tries=10)
-        if not ready_to_crash():
-          return False
-        self.device.adb.Shell(
-            'echo c > /proc/sysrq-trigger',
-            expect_status=None, timeout=60, retries=0)
-        return True
-
-    self.assertEquals([True, True],
-                      reraiser_thread.RunAsync([crasher, victim]))
-
-
-if __name__ == '__main__':
-  device_test_case.PrepareDevices()
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/decorators.py b/systrace/catapult/devil/devil/android/decorators.py
deleted file mode 100644
index 3844b49..0000000
--- a/systrace/catapult/devil/devil/android/decorators.py
+++ /dev/null
@@ -1,176 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Function/method decorators that provide timeout and retry logic.
-"""
-
-import functools
-import itertools
-import sys
-
-from devil.android import device_errors
-from devil.utils import cmd_helper
-from devil.utils import reraiser_thread
-from devil.utils import timeout_retry
-
-DEFAULT_TIMEOUT_ATTR = '_default_timeout'
-DEFAULT_RETRIES_ATTR = '_default_retries'
-
-
-def _TimeoutRetryWrapper(
-    f, timeout_func, retries_func, retry_if_func=timeout_retry.AlwaysRetry,
-    pass_values=False):
-  """ Wraps a funcion with timeout and retry handling logic.
-
-  Args:
-    f: The function to wrap.
-    timeout_func: A callable that returns the timeout value.
-    retries_func: A callable that returns the retries value.
-    pass_values: If True, passes the values returned by |timeout_func| and
-                 |retries_func| to the wrapped function as 'timeout' and
-                 'retries' kwargs, respectively.
-  Returns:
-    The wrapped function.
-  """
-  @functools.wraps(f)
-  def timeout_retry_wrapper(*args, **kwargs):
-    timeout = timeout_func(*args, **kwargs)
-    retries = retries_func(*args, **kwargs)
-    if pass_values:
-      kwargs['timeout'] = timeout
-      kwargs['retries'] = retries
-
-    @functools.wraps(f)
-    def impl():
-      return f(*args, **kwargs)
-    try:
-      if timeout_retry.CurrentTimeoutThreadGroup():
-        # Don't wrap if there's already an outer timeout thread.
-        return impl()
-      else:
-        desc = '%s(%s)' % (f.__name__, ', '.join(itertools.chain(
-            (str(a) for a in args),
-            ('%s=%s' % (k, str(v)) for k, v in kwargs.iteritems()))))
-        return timeout_retry.Run(impl, timeout, retries, desc=desc,
-                                 retry_if_func=retry_if_func)
-    except reraiser_thread.TimeoutError as e:
-      raise device_errors.CommandTimeoutError(str(e)), None, (
-          sys.exc_info()[2])
-    except cmd_helper.TimeoutError as e:
-      raise device_errors.CommandTimeoutError(str(e)), None, (
-          sys.exc_info()[2])
-  return timeout_retry_wrapper
-
-
-def WithTimeoutAndRetries(f):
-  """A decorator that handles timeouts and retries.
-
-  'timeout' and 'retries' kwargs must be passed to the function.
-
-  Args:
-    f: The function to decorate.
-  Returns:
-    The decorated function.
-  """
-  get_timeout = lambda *a, **kw: kw['timeout']
-  get_retries = lambda *a, **kw: kw['retries']
-  return _TimeoutRetryWrapper(f, get_timeout, get_retries)
-
-
-def WithTimeoutAndConditionalRetries(retry_if_func):
-  """Returns a decorator that handles timeouts and, in some cases, retries.
-
-  'timeout' and 'retries' kwargs must be passed to the function.
-
-  Args:
-    retry_if_func: A unary callable that takes an exception and returns
-      whether failures should be retried.
-  Returns:
-    The actual decorator.
-  """
-  def decorator(f):
-    get_timeout = lambda *a, **kw: kw['timeout']
-    get_retries = lambda *a, **kw: kw['retries']
-    return _TimeoutRetryWrapper(
-        f, get_timeout, get_retries, retry_if_func=retry_if_func)
-  return decorator
-
-
-def WithExplicitTimeoutAndRetries(timeout, retries):
-  """Returns a decorator that handles timeouts and retries.
-
-  The provided |timeout| and |retries| values are always used.
-
-  Args:
-    timeout: The number of seconds to wait for the decorated function to
-             return. Always used.
-    retries: The number of times the decorated function should be retried on
-             failure. Always used.
-  Returns:
-    The actual decorator.
-  """
-  def decorator(f):
-    get_timeout = lambda *a, **kw: timeout
-    get_retries = lambda *a, **kw: retries
-    return _TimeoutRetryWrapper(f, get_timeout, get_retries)
-  return decorator
-
-
-def WithTimeoutAndRetriesDefaults(default_timeout, default_retries):
-  """Returns a decorator that handles timeouts and retries.
-
-  The provided |default_timeout| and |default_retries| values are used only
-  if timeout and retries values are not provided.
-
-  Args:
-    default_timeout: The number of seconds to wait for the decorated function
-                     to return. Only used if a 'timeout' kwarg is not passed
-                     to the decorated function.
-    default_retries: The number of times the decorated function should be
-                     retried on failure. Only used if a 'retries' kwarg is not
-                     passed to the decorated function.
-  Returns:
-    The actual decorator.
-  """
-  def decorator(f):
-    get_timeout = lambda *a, **kw: kw.get('timeout', default_timeout)
-    get_retries = lambda *a, **kw: kw.get('retries', default_retries)
-    return _TimeoutRetryWrapper(f, get_timeout, get_retries, pass_values=True)
-  return decorator
-
-
-def WithTimeoutAndRetriesFromInstance(
-    default_timeout_name=DEFAULT_TIMEOUT_ATTR,
-    default_retries_name=DEFAULT_RETRIES_ATTR,
-    min_default_timeout=None):
-  """Returns a decorator that handles timeouts and retries.
-
-  The provided |default_timeout_name| and |default_retries_name| are used to
-  get the default timeout value and the default retries value from the object
-  instance if timeout and retries values are not provided.
-
-  Note that this should only be used to decorate methods, not functions.
-
-  Args:
-    default_timeout_name: The name of the default timeout attribute of the
-                          instance.
-    default_retries_name: The name of the default retries attribute of the
-                          instance.
-    min_timeout: Miniumum timeout to be used when using instance timeout.
-  Returns:
-    The actual decorator.
-  """
-  def decorator(f):
-    def get_timeout(inst, *_args, **kwargs):
-      ret = getattr(inst, default_timeout_name)
-      if min_default_timeout is not None:
-        ret = max(min_default_timeout, ret)
-      return kwargs.get('timeout', ret)
-
-    def get_retries(inst, *_args, **kwargs):
-      return kwargs.get('retries', getattr(inst, default_retries_name))
-    return _TimeoutRetryWrapper(f, get_timeout, get_retries, pass_values=True)
-  return decorator
-
diff --git a/systrace/catapult/devil/devil/android/decorators_test.py b/systrace/catapult/devil/devil/android/decorators_test.py
deleted file mode 100644
index f60953e..0000000
--- a/systrace/catapult/devil/devil/android/decorators_test.py
+++ /dev/null
@@ -1,332 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for decorators.py.
-"""
-
-# pylint: disable=W0613
-
-import time
-import traceback
-import unittest
-
-from devil.android import decorators
-from devil.android import device_errors
-from devil.utils import reraiser_thread
-
-_DEFAULT_TIMEOUT = 30
-_DEFAULT_RETRIES = 3
-
-
-class DecoratorsTest(unittest.TestCase):
-  _decorated_function_called_count = 0
-
-  def testFunctionDecoratorDoesTimeouts(self):
-    """Tests that the base decorator handles the timeout logic."""
-    DecoratorsTest._decorated_function_called_count = 0
-
-    @decorators.WithTimeoutAndRetries
-    def alwaysTimesOut(timeout=None, retries=None):
-      DecoratorsTest._decorated_function_called_count += 1
-      time.sleep(100)
-
-    start_time = time.time()
-    with self.assertRaises(device_errors.CommandTimeoutError):
-      alwaysTimesOut(timeout=1, retries=0)
-    elapsed_time = time.time() - start_time
-    self.assertTrue(elapsed_time >= 1)
-    self.assertEquals(1, DecoratorsTest._decorated_function_called_count)
-
-  def testFunctionDecoratorDoesRetries(self):
-    """Tests that the base decorator handles the retries logic."""
-    DecoratorsTest._decorated_function_called_count = 0
-
-    @decorators.WithTimeoutAndRetries
-    def alwaysRaisesCommandFailedError(timeout=None, retries=None):
-      DecoratorsTest._decorated_function_called_count += 1
-      raise device_errors.CommandFailedError('testCommand failed')
-
-    with self.assertRaises(device_errors.CommandFailedError):
-      alwaysRaisesCommandFailedError(timeout=30, retries=10)
-    self.assertEquals(11, DecoratorsTest._decorated_function_called_count)
-
-  def testFunctionDecoratorRequiresParams(self):
-    """Tests that the base decorator requires timeout and retries params."""
-    @decorators.WithTimeoutAndRetries
-    def requiresExplicitTimeoutAndRetries(timeout=None, retries=None):
-      return (timeout, retries)
-
-    with self.assertRaises(KeyError):
-      requiresExplicitTimeoutAndRetries()
-    with self.assertRaises(KeyError):
-      requiresExplicitTimeoutAndRetries(timeout=10)
-    with self.assertRaises(KeyError):
-      requiresExplicitTimeoutAndRetries(retries=0)
-    expected_timeout = 10
-    expected_retries = 1
-    (actual_timeout, actual_retries) = (
-        requiresExplicitTimeoutAndRetries(timeout=expected_timeout,
-                                          retries=expected_retries))
-    self.assertEquals(expected_timeout, actual_timeout)
-    self.assertEquals(expected_retries, actual_retries)
-
-  def testFunctionDecoratorTranslatesReraiserExceptions(self):
-    """Tests that the explicit decorator translates reraiser exceptions."""
-    @decorators.WithTimeoutAndRetries
-    def alwaysRaisesProvidedException(exception, timeout=None, retries=None):
-      raise exception
-
-    exception_desc = 'Reraiser thread timeout error'
-    with self.assertRaises(device_errors.CommandTimeoutError) as e:
-      alwaysRaisesProvidedException(
-          reraiser_thread.TimeoutError(exception_desc),
-          timeout=10, retries=1)
-    self.assertEquals(exception_desc, str(e.exception))
-
-  def testConditionalRetriesDecoratorRetries(self):
-    def do_not_retry_no_adb_error(exc):
-      return not isinstance(exc, device_errors.NoAdbError)
-
-    actual_tries = [0]
-
-    @decorators.WithTimeoutAndConditionalRetries(do_not_retry_no_adb_error)
-    def alwaysRaisesCommandFailedError(timeout=None, retries=None):
-      actual_tries[0] += 1
-      raise device_errors.CommandFailedError('Command failed :(')
-
-    with self.assertRaises(device_errors.CommandFailedError):
-      alwaysRaisesCommandFailedError(timeout=10, retries=10)
-    self.assertEquals(11, actual_tries[0])
-
-  def testConditionalRetriesDecoratorDoesntRetry(self):
-    def do_not_retry_no_adb_error(exc):
-      return not isinstance(exc, device_errors.NoAdbError)
-
-    actual_tries = [0]
-
-    @decorators.WithTimeoutAndConditionalRetries(do_not_retry_no_adb_error)
-    def alwaysRaisesNoAdbError(timeout=None, retries=None):
-      actual_tries[0] += 1
-      raise device_errors.NoAdbError()
-
-    with self.assertRaises(device_errors.NoAdbError):
-      alwaysRaisesNoAdbError(timeout=10, retries=10)
-    self.assertEquals(1, actual_tries[0])
-
-  def testDefaultsFunctionDecoratorDoesTimeouts(self):
-    """Tests that the defaults decorator handles timeout logic."""
-    DecoratorsTest._decorated_function_called_count = 0
-
-    @decorators.WithTimeoutAndRetriesDefaults(1, 0)
-    def alwaysTimesOut(timeout=None, retries=None):
-      DecoratorsTest._decorated_function_called_count += 1
-      time.sleep(100)
-
-    start_time = time.time()
-    with self.assertRaises(device_errors.CommandTimeoutError):
-      alwaysTimesOut()
-    elapsed_time = time.time() - start_time
-    self.assertTrue(elapsed_time >= 1)
-    self.assertEquals(1, DecoratorsTest._decorated_function_called_count)
-
-    DecoratorsTest._decorated_function_called_count = 0
-    with self.assertRaises(device_errors.CommandTimeoutError):
-      alwaysTimesOut(timeout=2)
-    elapsed_time = time.time() - start_time
-    self.assertTrue(elapsed_time >= 2)
-    self.assertEquals(1, DecoratorsTest._decorated_function_called_count)
-
-  def testDefaultsFunctionDecoratorDoesRetries(self):
-    """Tests that the defaults decorator handles retries logic."""
-    DecoratorsTest._decorated_function_called_count = 0
-
-    @decorators.WithTimeoutAndRetriesDefaults(30, 10)
-    def alwaysRaisesCommandFailedError(timeout=None, retries=None):
-      DecoratorsTest._decorated_function_called_count += 1
-      raise device_errors.CommandFailedError('testCommand failed')
-
-    with self.assertRaises(device_errors.CommandFailedError):
-      alwaysRaisesCommandFailedError()
-    self.assertEquals(11, DecoratorsTest._decorated_function_called_count)
-
-    DecoratorsTest._decorated_function_called_count = 0
-    with self.assertRaises(device_errors.CommandFailedError):
-      alwaysRaisesCommandFailedError(retries=5)
-    self.assertEquals(6, DecoratorsTest._decorated_function_called_count)
-
-  def testDefaultsFunctionDecoratorPassesValues(self):
-    """Tests that the defaults decorator passes timeout and retries kwargs."""
-    @decorators.WithTimeoutAndRetriesDefaults(30, 10)
-    def alwaysReturnsTimeouts(timeout=None, retries=None):
-      return timeout
-
-    self.assertEquals(30, alwaysReturnsTimeouts())
-    self.assertEquals(120, alwaysReturnsTimeouts(timeout=120))
-
-    @decorators.WithTimeoutAndRetriesDefaults(30, 10)
-    def alwaysReturnsRetries(timeout=None, retries=None):
-      return retries
-
-    self.assertEquals(10, alwaysReturnsRetries())
-    self.assertEquals(1, alwaysReturnsRetries(retries=1))
-
-  def testDefaultsFunctionDecoratorTranslatesReraiserExceptions(self):
-    """Tests that the explicit decorator translates reraiser exceptions."""
-    @decorators.WithTimeoutAndRetriesDefaults(30, 10)
-    def alwaysRaisesProvidedException(exception, timeout=None, retries=None):
-      raise exception
-
-    exception_desc = 'Reraiser thread timeout error'
-    with self.assertRaises(device_errors.CommandTimeoutError) as e:
-      alwaysRaisesProvidedException(
-          reraiser_thread.TimeoutError(exception_desc))
-    self.assertEquals(exception_desc, str(e.exception))
-
-  def testExplicitFunctionDecoratorDoesTimeouts(self):
-    """Tests that the explicit decorator handles timeout logic."""
-    DecoratorsTest._decorated_function_called_count = 0
-
-    @decorators.WithExplicitTimeoutAndRetries(1, 0)
-    def alwaysTimesOut():
-      DecoratorsTest._decorated_function_called_count += 1
-      time.sleep(100)
-
-    start_time = time.time()
-    with self.assertRaises(device_errors.CommandTimeoutError):
-      alwaysTimesOut()
-    elapsed_time = time.time() - start_time
-    self.assertTrue(elapsed_time >= 1)
-    self.assertEquals(1, DecoratorsTest._decorated_function_called_count)
-
-  def testExplicitFunctionDecoratorDoesRetries(self):
-    """Tests that the explicit decorator handles retries logic."""
-    DecoratorsTest._decorated_function_called_count = 0
-
-    @decorators.WithExplicitTimeoutAndRetries(30, 10)
-    def alwaysRaisesCommandFailedError():
-      DecoratorsTest._decorated_function_called_count += 1
-      raise device_errors.CommandFailedError('testCommand failed')
-
-    with self.assertRaises(device_errors.CommandFailedError):
-      alwaysRaisesCommandFailedError()
-    self.assertEquals(11, DecoratorsTest._decorated_function_called_count)
-
-  def testExplicitDecoratorTranslatesReraiserExceptions(self):
-    """Tests that the explicit decorator translates reraiser exceptions."""
-    @decorators.WithExplicitTimeoutAndRetries(30, 10)
-    def alwaysRaisesProvidedException(exception):
-      raise exception
-
-    exception_desc = 'Reraiser thread timeout error'
-    with self.assertRaises(device_errors.CommandTimeoutError) as e:
-      alwaysRaisesProvidedException(
-          reraiser_thread.TimeoutError(exception_desc))
-    self.assertEquals(exception_desc, str(e.exception))
-
-  class _MethodDecoratorTestObject(object):
-    """An object suitable for testing the method decorator."""
-
-    def __init__(self, test_case, default_timeout=_DEFAULT_TIMEOUT,
-                 default_retries=_DEFAULT_RETRIES):
-      self._test_case = test_case
-      self.default_timeout = default_timeout
-      self.default_retries = default_retries
-      self.function_call_counters = {
-          'alwaysRaisesCommandFailedError': 0,
-          'alwaysTimesOut': 0,
-          'requiresExplicitTimeoutAndRetries': 0,
-      }
-
-    @decorators.WithTimeoutAndRetriesFromInstance(
-        'default_timeout', 'default_retries')
-    def alwaysTimesOut(self, timeout=None, retries=None):
-      self.function_call_counters['alwaysTimesOut'] += 1
-      time.sleep(100)
-      self._test_case.assertFalse(True, msg='Failed to time out?')
-
-    @decorators.WithTimeoutAndRetriesFromInstance(
-        'default_timeout', 'default_retries')
-    def alwaysRaisesCommandFailedError(self, timeout=None, retries=None):
-      self.function_call_counters['alwaysRaisesCommandFailedError'] += 1
-      raise device_errors.CommandFailedError('testCommand failed')
-
-    # pylint: disable=no-self-use
-
-    @decorators.WithTimeoutAndRetriesFromInstance(
-        'default_timeout', 'default_retries')
-    def alwaysReturnsTimeout(self, timeout=None, retries=None):
-      return timeout
-
-    @decorators.WithTimeoutAndRetriesFromInstance(
-        'default_timeout', 'default_retries', min_default_timeout=100)
-    def alwaysReturnsTimeoutWithMin(self, timeout=None, retries=None):
-      return timeout
-
-    @decorators.WithTimeoutAndRetriesFromInstance(
-        'default_timeout', 'default_retries')
-    def alwaysReturnsRetries(self, timeout=None, retries=None):
-      return retries
-
-    @decorators.WithTimeoutAndRetriesFromInstance(
-        'default_timeout', 'default_retries')
-    def alwaysRaisesProvidedException(self, exception, timeout=None,
-                                      retries=None):
-      raise exception
-
-    # pylint: enable=no-self-use
-
-  def testMethodDecoratorDoesTimeout(self):
-    """Tests that the method decorator handles timeout logic."""
-    test_obj = self._MethodDecoratorTestObject(self)
-    start_time = time.time()
-    with self.assertRaises(device_errors.CommandTimeoutError):
-      try:
-        test_obj.alwaysTimesOut(timeout=1, retries=0)
-      except:
-        traceback.print_exc()
-        raise
-    elapsed_time = time.time() - start_time
-    self.assertTrue(elapsed_time >= 1)
-    self.assertEquals(1, test_obj.function_call_counters['alwaysTimesOut'])
-
-  def testMethodDecoratorDoesRetries(self):
-    """Tests that the method decorator handles retries logic."""
-    test_obj = self._MethodDecoratorTestObject(self)
-    with self.assertRaises(device_errors.CommandFailedError):
-      try:
-        test_obj.alwaysRaisesCommandFailedError(retries=10)
-      except:
-        traceback.print_exc()
-        raise
-    self.assertEquals(
-        11, test_obj.function_call_counters['alwaysRaisesCommandFailedError'])
-
-  def testMethodDecoratorPassesValues(self):
-    """Tests that the method decorator passes timeout and retries kwargs."""
-    test_obj = self._MethodDecoratorTestObject(
-        self, default_timeout=42, default_retries=31)
-    self.assertEquals(42, test_obj.alwaysReturnsTimeout())
-    self.assertEquals(41, test_obj.alwaysReturnsTimeout(timeout=41))
-    self.assertEquals(31, test_obj.alwaysReturnsRetries())
-    self.assertEquals(32, test_obj.alwaysReturnsRetries(retries=32))
-
-  def testMethodDecoratorUsesMiniumumTimeout(self):
-    test_obj = self._MethodDecoratorTestObject(
-        self, default_timeout=42, default_retries=31)
-    self.assertEquals(100, test_obj.alwaysReturnsTimeoutWithMin())
-    self.assertEquals(41, test_obj.alwaysReturnsTimeoutWithMin(timeout=41))
-
-  def testMethodDecoratorTranslatesReraiserExceptions(self):
-    test_obj = self._MethodDecoratorTestObject(self)
-
-    exception_desc = 'Reraiser thread timeout error'
-    with self.assertRaises(device_errors.CommandTimeoutError) as e:
-      test_obj.alwaysRaisesProvidedException(
-          reraiser_thread.TimeoutError(exception_desc))
-    self.assertEquals(exception_desc, str(e.exception))
-
-if __name__ == '__main__':
-  unittest.main(verbosity=2)
-
diff --git a/systrace/catapult/devil/devil/android/device_blacklist.py b/systrace/catapult/devil/devil/android/device_blacklist.py
deleted file mode 100644
index 010e996..0000000
--- a/systrace/catapult/devil/devil/android/device_blacklist.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import json
-import logging
-import os
-import threading
-import time
-
-logger = logging.getLogger(__name__)
-
-
-class Blacklist(object):
-
-  def __init__(self, path):
-    self._blacklist_lock = threading.RLock()
-    self._path = path
-
-  def Read(self):
-    """Reads the blacklist from the blacklist file.
-
-    Returns:
-      A dict containing bad devices.
-    """
-    with self._blacklist_lock:
-      blacklist = dict()
-      if not os.path.exists(self._path):
-        return blacklist
-
-      try:
-        with open(self._path, 'r') as f:
-          blacklist = json.load(f)
-      except (IOError, ValueError) as e:
-        logger.warning('Unable to read blacklist: %s', str(e))
-        os.remove(self._path)
-
-      if not isinstance(blacklist, dict):
-        logger.warning('Ignoring %s: %s (a dict was expected instead)',
-                        self._path, blacklist)
-        blacklist = dict()
-
-      return blacklist
-
-  def Write(self, blacklist):
-    """Writes the provided blacklist to the blacklist file.
-
-    Args:
-      blacklist: list of bad devices to write to the blacklist file.
-    """
-    with self._blacklist_lock:
-      with open(self._path, 'w') as f:
-        json.dump(blacklist, f)
-
-  def Extend(self, devices, reason='unknown'):
-    """Adds devices to blacklist file.
-
-    Args:
-      devices: list of bad devices to be added to the blacklist file.
-      reason: string specifying the reason for blacklist (eg: 'unauthorized')
-    """
-    timestamp = time.time()
-    event_info = {
-        'timestamp': timestamp,
-        'reason': reason,
-    }
-    device_dicts = {device: event_info for device in devices}
-    logger.info('Adding %s to blacklist %s for reason: %s',
-                 ','.join(devices), self._path, reason)
-    with self._blacklist_lock:
-      blacklist = self.Read()
-      blacklist.update(device_dicts)
-      self.Write(blacklist)
-
-  def Reset(self):
-    """Erases the blacklist file if it exists."""
-    logger.info('Resetting blacklist %s', self._path)
-    with self._blacklist_lock:
-      if os.path.exists(self._path):
-        os.remove(self._path)
diff --git a/systrace/catapult/devil/devil/android/device_blacklist_test.py b/systrace/catapult/devil/devil/android/device_blacklist_test.py
deleted file mode 100644
index bc44da5..0000000
--- a/systrace/catapult/devil/devil/android/device_blacklist_test.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import tempfile
-import unittest
-
-from devil.android import device_blacklist
-
-
-class DeviceBlacklistTest(unittest.TestCase):
-
-  def testBlacklistFileDoesNotExist(self):
-    with tempfile.NamedTemporaryFile() as blacklist_file:
-      # Allow the temporary file to be deleted.
-      pass
-
-    test_blacklist = device_blacklist.Blacklist(blacklist_file.name)
-    self.assertEquals({}, test_blacklist.Read())
-
-  def testBlacklistFileIsEmpty(self):
-    try:
-      with tempfile.NamedTemporaryFile(delete=False) as blacklist_file:
-        # Allow the temporary file to be closed.
-        pass
-
-      test_blacklist = device_blacklist.Blacklist(blacklist_file.name)
-      self.assertEquals({}, test_blacklist.Read())
-
-    finally:
-      if os.path.exists(blacklist_file.name):
-        os.remove(blacklist_file.name)
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/device_errors.py b/systrace/catapult/devil/devil/android/device_errors.py
deleted file mode 100644
index 57f3615..0000000
--- a/systrace/catapult/devil/devil/android/device_errors.py
+++ /dev/null
@@ -1,196 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Exception classes raised by AdbWrapper and DeviceUtils.
-
-The class hierarchy for device exceptions is:
-
-    base_error.BaseError
-     +-- CommandFailedError
-     |    +-- AdbCommandFailedError
-     |    |    +-- AdbShellCommandFailedError
-     |    +-- FastbootCommandFailedError
-     |    +-- DeviceVersionError
-     |    +-- DeviceChargingError
-     +-- CommandTimeoutError
-     +-- DeviceUnreachableError
-     +-- NoDevicesError
-     +-- MultipleDevicesError
-     +-- NoAdbError
-
-"""
-
-from devil import base_error
-from devil.utils import cmd_helper
-from devil.utils import parallelizer
-
-
-class CommandFailedError(base_error.BaseError):
-  """Exception for command failures."""
-
-  def __init__(self, message, device_serial=None):
-    device_leader = '(device: %s)' % device_serial
-    if device_serial is not None and not message.startswith(device_leader):
-      message = '%s %s' % (device_leader, message)
-    self.device_serial = device_serial
-    super(CommandFailedError, self).__init__(message)
-
-  def __eq__(self, other):
-    return (super(CommandFailedError, self).__eq__(other)
-            and self.device_serial == other.device_serial)
-
-  def __ne__(self, other):
-    return not self == other
-
-
-class _BaseCommandFailedError(CommandFailedError):
-  """Base Exception for adb and fastboot command failures."""
-
-  def __init__(self, args, output, status=None, device_serial=None,
-               message=None):
-    self.args = args
-    self.output = output
-    self.status = status
-    if not message:
-      adb_cmd = ' '.join(cmd_helper.SingleQuote(arg) for arg in self.args)
-      message = ['adb %s: failed ' % adb_cmd]
-      if status:
-        message.append('with exit status %s ' % self.status)
-      if output:
-        message.append('and output:\n')
-        message.extend('- %s\n' % line for line in output.splitlines())
-      else:
-        message.append('and no output.')
-      message = ''.join(message)
-    super(_BaseCommandFailedError, self).__init__(message, device_serial)
-
-  def __eq__(self, other):
-    return (super(_BaseCommandFailedError, self).__eq__(other)
-            and self.args == other.args
-            and self.output == other.output
-            and self.status == other.status)
-
-  def __ne__(self, other):
-    return not self == other
-
-  def __reduce__(self):
-    """Support pickling."""
-    result = [None, None, None, None, None]
-    super_result = super(_BaseCommandFailedError, self).__reduce__()
-    for i in range(len(super_result)):
-      result[i] = super_result[i]
-
-    # Update the args used to reconstruct this exception.
-    result[1] = (
-        self.args, self.output, self.status, self.device_serial, self.message)
-    return tuple(result)
-
-
-class AdbCommandFailedError(_BaseCommandFailedError):
-  """Exception for adb command failures."""
-
-  def __init__(self, args, output, status=None, device_serial=None,
-               message=None):
-    super(AdbCommandFailedError, self).__init__(
-        args, output, status=status, message=message,
-        device_serial=device_serial)
-
-
-class FastbootCommandFailedError(_BaseCommandFailedError):
-  """Exception for fastboot command failures."""
-
-  def __init__(self, args, output, status=None, device_serial=None,
-               message=None):
-    super(FastbootCommandFailedError, self).__init__(
-        args, output, status=status, message=message,
-        device_serial=device_serial)
-
-
-class DeviceVersionError(CommandFailedError):
-  """Exception for device version failures."""
-
-  def __init__(self, message, device_serial=None):
-    super(DeviceVersionError, self).__init__(message, device_serial)
-
-
-class AdbShellCommandFailedError(AdbCommandFailedError):
-  """Exception for shell command failures run via adb."""
-
-  def __init__(self, command, output, status, device_serial=None):
-    self.command = command
-    message = ['shell command run via adb failed on the device:\n',
-               '  command: %s\n' % command]
-    message.append('  exit status: %s\n' % status)
-    if output:
-      message.append('  output:\n')
-      if isinstance(output, basestring):
-        output_lines = output.splitlines()
-      else:
-        output_lines = output
-      message.extend('  - %s\n' % line for line in output_lines)
-    else:
-      message.append("  output: ''\n")
-    message = ''.join(message)
-    super(AdbShellCommandFailedError, self).__init__(
-      ['shell', command], output, status, device_serial, message)
-
-  def __reduce__(self):
-    """Support pickling."""
-    result = [None, None, None, None, None]
-    super_result = super(AdbShellCommandFailedError, self).__reduce__()
-    for i in range(len(super_result)):
-      result[i] = super_result[i]
-
-    # Update the args used to reconstruct this exception.
-    result[1] = (self.command, self.output, self.status, self.device_serial)
-    return tuple(result)
-
-
-class CommandTimeoutError(base_error.BaseError):
-  """Exception for command timeouts."""
-  pass
-
-
-class DeviceUnreachableError(base_error.BaseError):
-  """Exception for device unreachable failures."""
-  pass
-
-
-class NoDevicesError(base_error.BaseError):
-  """Exception for having no devices attached."""
-
-  def __init__(self, msg=None):
-    super(NoDevicesError, self).__init__(
-        msg or 'No devices attached.', is_infra_error=True)
-
-
-class MultipleDevicesError(base_error.BaseError):
-  """Exception for having multiple attached devices without selecting one."""
-
-  def __init__(self, devices):
-    parallel_devices = parallelizer.Parallelizer(devices)
-    descriptions = parallel_devices.pMap(
-        lambda d: d.build_description).pGet(None)
-    msg = ('More than one device available. Use -d/--device to select a device '
-           'by serial.\n\nAvailable devices:\n')
-    for d, desc in zip(devices, descriptions):
-      msg += '  %s (%s)\n' % (d, desc)
-
-    super(MultipleDevicesError, self).__init__(msg, is_infra_error=True)
-
-
-class NoAdbError(base_error.BaseError):
-  """Exception for being unable to find ADB."""
-
-  def __init__(self, msg=None):
-    super(NoAdbError, self).__init__(
-        msg or 'Unable to find adb.', is_infra_error=True)
-
-
-class DeviceChargingError(CommandFailedError):
-  """Exception for device charging errors."""
-
-  def __init__(self, message, device_serial=None):
-    super(DeviceChargingError, self).__init__(message, device_serial)
diff --git a/systrace/catapult/devil/devil/android/device_errors_test.py b/systrace/catapult/devil/devil/android/device_errors_test.py
deleted file mode 100755
index 68a4f16..0000000
--- a/systrace/catapult/devil/devil/android/device_errors_test.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import pickle
-import sys
-import unittest
-
-from devil.android import device_errors
-
-
-class DeviceErrorsTest(unittest.TestCase):
-
-  def assertIsPicklable(self, original):
-    pickled = pickle.dumps(original)
-    reconstructed = pickle.loads(pickled)
-    self.assertEquals(original, reconstructed)
-
-  def testPicklable_AdbCommandFailedError(self):
-    original = device_errors.AdbCommandFailedError(
-        ['these', 'are', 'adb', 'args'], 'adb failure output', status=':(',
-        device_serial='0123456789abcdef')
-    self.assertIsPicklable(original)
-
-  def testPicklable_AdbShellCommandFailedError(self):
-    original = device_errors.AdbShellCommandFailedError(
-        'foo', 'erroneous foo output', '1', device_serial='0123456789abcdef')
-    self.assertIsPicklable(original)
-
-  def testPicklable_CommandFailedError(self):
-    original = device_errors.CommandFailedError(
-        'sample command failed')
-    self.assertIsPicklable(original)
-
-  def testPicklable_CommandTimeoutError(self):
-    original = device_errors.CommandTimeoutError(
-        'My fake command timed out :(')
-    self.assertIsPicklable(original)
-
-  def testPicklable_DeviceChargingError(self):
-    original = device_errors.DeviceChargingError(
-        'Fake device failed to charge')
-    self.assertIsPicklable(original)
-
-  def testPicklable_DeviceUnreachableError(self):
-    original = device_errors.DeviceUnreachableError
-    self.assertIsPicklable(original)
-
-  def testPicklable_FastbootCommandFailedError(self):
-    original = device_errors.FastbootCommandFailedError(
-        ['these', 'are', 'fastboot', 'args'], 'fastboot failure output',
-        status=':(', device_serial='0123456789abcdef')
-    self.assertIsPicklable(original)
-
-  def testPicklable_MultipleDevicesError(self):
-    # TODO(jbudorick): Implement this after implementing a stable DeviceUtils
-    # fake. https://github.com/catapult-project/catapult/issues/3145
-    pass
-
-  def testPicklable_NoAdbError(self):
-    original = device_errors.NoAdbError()
-    self.assertIsPicklable(original)
-
-  def testPicklable_NoDevicesError(self):
-    original = device_errors.NoDevicesError()
-    self.assertIsPicklable(original)
-
-
-
-if __name__ == '__main__':
-  sys.exit(unittest.main())
diff --git a/systrace/catapult/devil/devil/android/device_list.py b/systrace/catapult/devil/devil/android/device_list.py
deleted file mode 100644
index 0fbb0f1..0000000
--- a/systrace/catapult/devil/devil/android/device_list.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A module to keep track of devices across builds."""
-
-import json
-import logging
-import os
-
-logger = logging.getLogger(__name__)
-
-
-def GetPersistentDeviceList(file_name):
-  """Returns a list of devices.
-
-  Args:
-    file_name: the file name containing a list of devices.
-
-  Returns: List of device serial numbers that were on the bot.
-  """
-  if not os.path.isfile(file_name):
-    logger.warning("Device file %s doesn't exist.", file_name)
-    return []
-
-  try:
-    with open(file_name) as f:
-      devices = json.load(f)
-    if not isinstance(devices, list) or not all(isinstance(d, basestring)
-                                                for d in devices):
-      logger.warning('Unrecognized device file format: %s', devices)
-      return []
-    return [d for d in devices if d != '(error)']
-  except ValueError:
-    logger.exception(
-        'Error reading device file %s. Falling back to old format.', file_name)
-
-  # TODO(bpastene) Remove support for old unstructured file format.
-  with open(file_name) as f:
-    return [d for d in f.read().splitlines() if d != '(error)']
-
-
-def WritePersistentDeviceList(file_name, device_list):
-  path = os.path.dirname(file_name)
-  assert isinstance(device_list, list)
-  # If there is a problem with ADB "(error)" can be added to the device list.
-  # These should be removed before saving.
-  device_list = [d for d in device_list if d != '(error)']
-  if not os.path.exists(path):
-    os.makedirs(path)
-  with open(file_name, 'w') as f:
-    json.dump(device_list, f)
diff --git a/systrace/catapult/devil/devil/android/device_signal.py b/systrace/catapult/devil/devil/android/device_signal.py
deleted file mode 100644
index 2cec46d..0000000
--- a/systrace/catapult/devil/devil/android/device_signal.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Defines constants for signals that should be supported on devices.
-
-Note: Obtained by running `kill -l` on a user device.
-"""
-
-
-SIGHUP = 1  # Hangup
-SIGINT = 2  # Interrupt
-SIGQUIT = 3  # Quit
-SIGILL = 4  # Illegal instruction
-SIGTRAP = 5  # Trap
-SIGABRT = 6  # Aborted
-SIGBUS = 7  # Bus error
-SIGFPE = 8  # Floating point exception
-SIGKILL = 9  # Killed
-SIGUSR1 = 10  # User signal 1
-SIGSEGV = 11  # Segmentation fault
-SIGUSR2 = 12  # User signal 2
-SIGPIPE = 13  # Broken pipe
-SIGALRM = 14  # Alarm clock
-SIGTERM = 15  # Terminated
-SIGSTKFLT = 16  # Stack fault
-SIGCHLD = 17  # Child exited
-SIGCONT = 18  # Continue
-SIGSTOP = 19  # Stopped (signal)
-SIGTSTP = 20  # Stopped
-SIGTTIN = 21  # Stopped (tty input)
-SIGTTOU = 22  # Stopped (tty output)
-SIGURG = 23  # Urgent I/O condition
-SIGXCPU = 24  # CPU time limit exceeded
-SIGXFSZ = 25  # File size limit exceeded
-SIGVTALRM = 26  # Virtual timer expired
-SIGPROF = 27  # Profiling timer expired
-SIGWINCH = 28  # Window size changed
-SIGIO = 29  # I/O possible
-SIGPWR = 30  # Power failure
-SIGSYS = 31  # Bad system call
diff --git a/systrace/catapult/devil/devil/android/device_temp_file.py b/systrace/catapult/devil/devil/android/device_temp_file.py
deleted file mode 100644
index 74cc509..0000000
--- a/systrace/catapult/devil/devil/android/device_temp_file.py
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A temp file that automatically gets pushed and deleted from a device."""
-
-# pylint: disable=W0622
-
-import logging
-import posixpath
-import random
-import threading
-
-from devil import base_error
-from devil.android import device_errors
-from devil.utils import cmd_helper
-
-logger = logging.getLogger(__name__)
-
-
-def _GenerateName(prefix, suffix, dir):
-  random_hex = hex(random.randint(0, 2 ** 52))[2:]
-  return posixpath.join(dir, '%s-%s%s' % (prefix, random_hex, suffix))
-
-
-class DeviceTempFile(object):
-  """A named temporary file on a device.
-
-  Behaves like tempfile.NamedTemporaryFile.
-  """
-
-  def __init__(self, adb, suffix='', prefix='temp_file', dir='/data/local/tmp'):
-    """Find an unused temporary file path on the device.
-
-    When this object is closed, the file will be deleted on the device.
-
-    Args:
-      adb: An instance of AdbWrapper
-      suffix: The suffix of the name of the temporary file.
-      prefix: The prefix of the name of the temporary file.
-      dir: The directory on the device in which the temporary file should be
-        placed.
-    Raises:
-      ValueError if any of suffix, prefix, or dir are None.
-    """
-    if None in (dir, prefix, suffix):
-      m = 'Provided None path component. (dir: %s, prefix: %s, suffix: %s)' % (
-          dir, prefix, suffix)
-      raise ValueError(m)
-
-    self._adb = adb
-    # Python's random module use 52-bit numbers according to its docs.
-    self.name = _GenerateName(prefix, suffix, dir)
-    self.name_quoted = cmd_helper.SingleQuote(self.name)
-
-  def close(self):
-    """Deletes the temporary file from the device."""
-    # ignore exception if the file is already gone.
-    def delete_temporary_file():
-      try:
-        self._adb.Shell('rm -f %s' % self.name_quoted, expect_status=None)
-      except base_error.BaseError as e:
-        # We don't really care, and stack traces clog up the log.
-        # Log a warning and move on.
-        logger.warning('Failed to delete temporary file %s: %s',
-                        self.name, str(e))
-
-    # It shouldn't matter when the temp file gets deleted, so do so
-    # asynchronously.
-    threading.Thread(
-        target=delete_temporary_file,
-        name='delete_temporary_file(%s)' % self._adb.GetDeviceSerial()).start()
-
-  def __enter__(self):
-    return self
-
-  def __exit__(self, type, value, traceback):
-    self.close()
-
-
-class NamedDeviceTemporaryDirectory(object):
-  """A named temporary directory on a device."""
-
-  def __init__(self, adb, suffix='', prefix='tmp', dir='/data/local/tmp'):
-    """Find an unused temporary directory path on the device. The directory is
-    not created until it is used with a 'with' statement.
-
-    When this object is closed, the directory will be deleted on the device.
-
-    Args:
-      adb: An instance of AdbWrapper
-      suffix: The suffix of the name of the temporary directory.
-      prefix: The prefix of the name of the temporary directory.
-      dir: The directory on the device where to place the temporary directory.
-    Raises:
-      ValueError if any of suffix, prefix, or dir are None.
-    """
-    self._adb = adb
-    self.name = _GenerateName(prefix, suffix, dir)
-    self.name_quoted = cmd_helper.SingleQuote(self.name)
-
-  def close(self):
-    """Deletes the temporary directory from the device."""
-    def delete_temporary_dir():
-      try:
-        self._adb.Shell('rm -rf %s' % self.name, expect_status=None)
-      except device_errors.AdbCommandFailedError:
-        pass
-
-    threading.Thread(
-        target=delete_temporary_dir,
-        name='delete_temporary_dir(%s)' % self._adb.GetDeviceSerial()).start()
-
-  def __enter__(self):
-    self._adb.Shell('mkdir -p %s' % self.name)
-    return self
-
-  def __exit__(self, exc_type, exc_val, exc_tb):
-    self.close()
diff --git a/systrace/catapult/devil/devil/android/device_test_case.py b/systrace/catapult/devil/devil/android/device_test_case.py
deleted file mode 100644
index 1148b54..0000000
--- a/systrace/catapult/devil/devil/android/device_test_case.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import threading
-import unittest
-
-from devil.android import device_errors
-from devil.android import device_utils
-
-_devices_lock = threading.Lock()
-_devices_condition = threading.Condition(_devices_lock)
-_devices = set()
-
-
-def PrepareDevices(*_args):
-
-  raw_devices = device_utils.DeviceUtils.HealthyDevices()
-  live_devices = []
-  for d in raw_devices:
-    try:
-      d.WaitUntilFullyBooted(timeout=5, retries=0)
-      live_devices.append(str(d))
-    except (device_errors.CommandFailedError,
-            device_errors.CommandTimeoutError,
-            device_errors.DeviceUnreachableError):
-      pass
-  with _devices_lock:
-    _devices.update(set(live_devices))
-
-  if not _devices:
-    raise Exception('No live devices attached.')
-
-
-class DeviceTestCase(unittest.TestCase):
-
-  def __init__(self, *args, **kwargs):
-    super(DeviceTestCase, self).__init__(*args, **kwargs)
-    self.serial = None
-
-  #override
-  def setUp(self):
-    super(DeviceTestCase, self).setUp()
-    with _devices_lock:
-      while not _devices:
-        _devices_condition.wait(5)
-      self.serial = _devices.pop()
-
-  #override
-  def tearDown(self):
-    super(DeviceTestCase, self).tearDown()
-    with _devices_lock:
-      _devices.add(self.serial)
-      _devices_condition.notify()
diff --git a/systrace/catapult/devil/devil/android/device_utils.py b/systrace/catapult/devil/devil/android/device_utils.py
deleted file mode 100644
index 5a3db41..0000000
--- a/systrace/catapult/devil/devil/android/device_utils.py
+++ /dev/null
@@ -1,2808 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Provides a variety of device interactions based on adb.
-
-Eventually, this will be based on adb_wrapper.
-"""
-# pylint: disable=unused-argument
-
-import calendar
-import collections
-import fnmatch
-import json
-import logging
-import os
-import posixpath
-import pprint
-import random
-import re
-import shutil
-import stat
-import tempfile
-import time
-import threading
-import uuid
-
-from devil import base_error
-from devil import devil_env
-from devil.utils import cmd_helper
-from devil.android import apk_helper
-from devil.android import device_signal
-from devil.android import decorators
-from devil.android import device_errors
-from devil.android import device_temp_file
-from devil.android import install_commands
-from devil.android import logcat_monitor
-from devil.android import md5sum
-from devil.android.sdk import adb_wrapper
-from devil.android.sdk import intent
-from devil.android.sdk import keyevent
-from devil.android.sdk import split_select
-from devil.android.sdk import version_codes
-from devil.utils import host_utils
-from devil.utils import parallelizer
-from devil.utils import reraiser_thread
-from devil.utils import timeout_retry
-from devil.utils import zip_utils
-
-from py_utils import tempfile_ext
-
-logger = logging.getLogger(__name__)
-
-_DEFAULT_TIMEOUT = 30
-_DEFAULT_RETRIES = 3
-
-# A sentinel object for default values
-# TODO(jbudorick,perezju): revisit how default values are handled by
-# the timeout_retry decorators.
-DEFAULT = object()
-
-_RESTART_ADBD_SCRIPT = """
-  trap '' HUP
-  trap '' TERM
-  trap '' PIPE
-  function restart() {
-    stop adbd
-    start adbd
-  }
-  restart &
-"""
-
-# Not all permissions can be set.
-_PERMISSIONS_BLACKLIST_RE = re.compile('|'.join(fnmatch.translate(p) for p in [
-    'android.permission.ACCESS_LOCATION_EXTRA_COMMANDS',
-    'android.permission.ACCESS_MOCK_LOCATION',
-    'android.permission.ACCESS_NETWORK_STATE',
-    'android.permission.ACCESS_NOTIFICATION_POLICY',
-    'android.permission.ACCESS_VR_STATE',
-    'android.permission.ACCESS_WIFI_STATE',
-    'android.permission.AUTHENTICATE_ACCOUNTS',
-    'android.permission.BLUETOOTH',
-    'android.permission.BLUETOOTH_ADMIN',
-    'android.permission.BROADCAST_STICKY',
-    'android.permission.CHANGE_NETWORK_STATE',
-    'android.permission.CHANGE_WIFI_MULTICAST_STATE',
-    'android.permission.CHANGE_WIFI_STATE',
-    'android.permission.DISABLE_KEYGUARD',
-    'android.permission.DOWNLOAD_WITHOUT_NOTIFICATION',
-    'android.permission.EXPAND_STATUS_BAR',
-    'android.permission.GET_PACKAGE_SIZE',
-    'android.permission.INSTALL_SHORTCUT',
-    'android.permission.INJECT_EVENTS',
-    'android.permission.INTERNET',
-    'android.permission.KILL_BACKGROUND_PROCESSES',
-    'android.permission.MANAGE_ACCOUNTS',
-    'android.permission.MODIFY_AUDIO_SETTINGS',
-    'android.permission.NFC',
-    'android.permission.READ_SYNC_SETTINGS',
-    'android.permission.READ_SYNC_STATS',
-    'android.permission.RECEIVE_BOOT_COMPLETED',
-    'android.permission.RECORD_VIDEO',
-    'android.permission.REORDER_TASKS',
-    'android.permission.REQUEST_INSTALL_PACKAGES',
-    'android.permission.RESTRICTED_VR_ACCESS',
-    'android.permission.RUN_INSTRUMENTATION',
-    'android.permission.SET_ALARM',
-    'android.permission.SET_TIME_ZONE',
-    'android.permission.SET_WALLPAPER',
-    'android.permission.SET_WALLPAPER_HINTS',
-    'android.permission.TRANSMIT_IR',
-    'android.permission.USE_CREDENTIALS',
-    'android.permission.USE_FINGERPRINT',
-    'android.permission.VIBRATE',
-    'android.permission.WAKE_LOCK',
-    'android.permission.WRITE_SYNC_SETTINGS',
-    'com.android.browser.permission.READ_HISTORY_BOOKMARKS',
-    'com.android.browser.permission.WRITE_HISTORY_BOOKMARKS',
-    'com.android.launcher.permission.INSTALL_SHORTCUT',
-    'com.chrome.permission.DEVICE_EXTRAS',
-    'com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS',
-    'com.google.android.c2dm.permission.RECEIVE',
-    'com.google.android.providers.gsf.permission.READ_GSERVICES',
-    'com.google.vr.vrcore.permission.VRCORE_INTERNAL',
-    'com.sec.enterprise.knox.MDM_CONTENT_PROVIDER',
-    '*.permission.C2D_MESSAGE',
-    '*.permission.READ_WRITE_BOOKMARK_FOLDERS',
-    '*.TOS_ACKED',
-]))
-_SHELL_OUTPUT_SEPARATOR = '~X~'
-_PERMISSIONS_EXCEPTION_RE = re.compile(
-    r'java\.lang\.\w+Exception: .*$', re.MULTILINE)
-
-_CURRENT_FOCUS_CRASH_RE = re.compile(
-    r'\s*mCurrentFocus.*Application (Error|Not Responding): (\S+)}')
-
-_GETPROP_RE = re.compile(r'\[(.*?)\]: \[(.*?)\]')
-
-# Regex to parse the long (-l) output of 'ls' command, c.f.
-# https://github.com/landley/toybox/blob/master/toys/posix/ls.c#L446
-_LONG_LS_OUTPUT_RE = re.compile(
-    r'(?P<st_mode>[\w-]{10})\s+'                  # File permissions
-    r'(?:(?P<st_nlink>\d+)\s+)?'                  # Number of links (optional)
-    r'(?P<st_owner>\w+)\s+'                       # Name of owner
-    r'(?P<st_group>\w+)\s+'                       # Group of owner
-    r'(?:'                                        # Either ...
-      r'(?P<st_rdev_major>\d+),\s+'                 # Device major, and
-      r'(?P<st_rdev_minor>\d+)\s+'                  # Device minor
-    r'|'                                          # .. or
-      r'(?P<st_size>\d+)\s+'                        # Size in bytes
-    r')?'                                         # .. or nothing
-    r'(?P<st_mtime>\d{4}-\d\d-\d\d \d\d:\d\d)\s+' # Modification date/time
-    r'(?P<filename>.+?)'                          # File name
-    r'(?: -> (?P<symbolic_link_to>.+))?'          # Symbolic link (optional)
-    r'$'                                          # End of string
-)
-_LS_DATE_FORMAT = '%Y-%m-%d %H:%M'
-_FILE_MODE_RE = re.compile(r'[dbclps-](?:[r-][w-][xSs-]){2}[r-][w-][xTt-]$')
-_FILE_MODE_KIND = {
-    'd': stat.S_IFDIR, 'b': stat.S_IFBLK, 'c': stat.S_IFCHR,
-    'l': stat.S_IFLNK, 'p': stat.S_IFIFO, 's': stat.S_IFSOCK,
-    '-': stat.S_IFREG}
-_FILE_MODE_PERMS = [
-    stat.S_IRUSR, stat.S_IWUSR, stat.S_IXUSR,
-    stat.S_IRGRP, stat.S_IWGRP, stat.S_IXGRP,
-    stat.S_IROTH, stat.S_IWOTH, stat.S_IXOTH,
-]
-_FILE_MODE_SPECIAL = [
-    ('s', stat.S_ISUID),
-    ('s', stat.S_ISGID),
-    ('t', stat.S_ISVTX),
-]
-_PS_COLUMNS = {
-  'pid': 1,
-  'ppid': 2,
-  'name': -1
-}
-_SELINUX_MODE = {
-    'enforcing': True,
-    'permissive': False,
-    'disabled': None
-}
-# Some devices require different logic for checking if root is necessary
-_SPECIAL_ROOT_DEVICE_LIST = [
-    'marlin', # Pixel XL
-    'sailfish', # Pixel
-    'taimen', # Pixel 2 XL
-    'walleye', # Pixel 2
-]
-_IMEI_RE = re.compile(r'  Device ID = (.+)$')
-# The following regex is used to match result parcels like:
-"""
-Result: Parcel(
-  0x00000000: 00000000 0000000f 00350033 00360033 '........3.5.3.6.'
-  0x00000010: 00360032 00370030 00300032 00300039 '2.6.0.7.2.0.9.0.'
-  0x00000020: 00380033 00000039                   '3.8.9...        ')
-"""
-_PARCEL_RESULT_RE = re.compile(
-    r'0x[0-9a-f]{8}\: (?:[0-9a-f]{8}\s+){1,4}\'(.{16})\'')
-_EBUSY_RE = re.compile(
-    r'mkdir failed for ([^,]*), Device or resource busy')
-
-PS_COLUMNS = ('name', 'pid', 'ppid')
-ProcessInfo = collections.namedtuple('ProcessInfo', PS_COLUMNS)
-
-
-@decorators.WithExplicitTimeoutAndRetries(
-    _DEFAULT_TIMEOUT, _DEFAULT_RETRIES)
-def GetAVDs():
-  """Returns a list of Android Virtual Devices.
-
-  Returns:
-    A list containing the configured AVDs.
-  """
-  lines = cmd_helper.GetCmdOutput([
-      os.path.join(devil_env.config.LocalPath('android_sdk'),
-                   'tools', 'android'),
-      'list', 'avd']).splitlines()
-  avds = []
-  for line in lines:
-    if 'Name:' not in line:
-      continue
-    key, value = (s.strip() for s in line.split(':', 1))
-    if key == 'Name':
-      avds.append(value)
-  return avds
-
-
-@decorators.WithExplicitTimeoutAndRetries(
-    _DEFAULT_TIMEOUT, _DEFAULT_RETRIES)
-def RestartServer():
-  """Restarts the adb server.
-
-  Raises:
-    CommandFailedError if we fail to kill or restart the server.
-  """
-  def adb_killed():
-    return not adb_wrapper.AdbWrapper.IsServerOnline()
-
-  def adb_started():
-    return adb_wrapper.AdbWrapper.IsServerOnline()
-
-  adb_wrapper.AdbWrapper.KillServer()
-  if not timeout_retry.WaitFor(adb_killed, wait_period=1, max_tries=5):
-    # TODO(perezju): raise an exception after fixng http://crbug.com/442319
-    logger.warning('Failed to kill adb server')
-  adb_wrapper.AdbWrapper.StartServer()
-  if not timeout_retry.WaitFor(adb_started, wait_period=1, max_tries=5):
-    raise device_errors.CommandFailedError('Failed to start adb server')
-
-
-def _ParseModeString(mode_str):
-  """Parse a mode string, e.g. 'drwxrwxrwx', into a st_mode value.
-
-  Effectively the reverse of |mode_to_string| in, e.g.:
-  https://github.com/landley/toybox/blob/master/lib/lib.c#L896
-  """
-  if not _FILE_MODE_RE.match(mode_str):
-    raise ValueError('Unexpected file mode %r', mode_str)
-  mode = _FILE_MODE_KIND[mode_str[0]]
-  for c, flag in zip(mode_str[1:], _FILE_MODE_PERMS):
-    if c != '-' and c.islower():
-      mode |= flag
-  for c, (t, flag) in zip(mode_str[3::3], _FILE_MODE_SPECIAL):
-    if c.lower() == t:
-      mode |= flag
-  return mode
-
-
-def _GetTimeStamp():
-  """Return a basic ISO 8601 time stamp with the current local time."""
-  return time.strftime('%Y%m%dT%H%M%S', time.localtime())
-
-
-def _JoinLines(lines):
-  # makes sure that the last line is also terminated, and is more memory
-  # efficient than first appending an end-line to each line and then joining
-  # all of them together.
-  return ''.join(s for line in lines for s in (line, '\n'))
-
-
-def _CreateAdbWrapper(device):
-  if isinstance(device, adb_wrapper.AdbWrapper):
-    return device
-  else:
-    return adb_wrapper.AdbWrapper(device)
-
-
-def _FormatPartialOutputError(output):
-  lines = output.splitlines() if isinstance(output, basestring) else output
-  message = ['Partial output found:']
-  if len(lines) > 11:
-    message.extend('- %s' % line for line in lines[:5])
-    message.extend('<snip>')
-    message.extend('- %s' % line for line in lines[-5:])
-  else:
-    message.extend('- %s' % line for line in lines)
-  return '\n'.join(message)
-
-
-class DeviceUtils(object):
-
-  _MAX_ADB_COMMAND_LENGTH = 512
-  _MAX_ADB_OUTPUT_LENGTH = 32768
-  _LAUNCHER_FOCUSED_RE = re.compile(
-      r'\s*mCurrentFocus.*(Launcher|launcher).*')
-  _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$')
-
-  LOCAL_PROPERTIES_PATH = posixpath.join('/', 'data', 'local.prop')
-
-  # Property in /data/local.prop that controls Java assertions.
-  JAVA_ASSERT_PROPERTY = 'dalvik.vm.enableassertions'
-
-  def __init__(self, device, enable_device_files_cache=False,
-               default_timeout=_DEFAULT_TIMEOUT,
-               default_retries=_DEFAULT_RETRIES):
-    """DeviceUtils constructor.
-
-    Args:
-      device: Either a device serial, an existing AdbWrapper instance, or an
-        an existing AndroidCommands instance.
-      enable_device_files_cache: For PushChangedFiles(), cache checksums of
-        pushed files rather than recomputing them on a subsequent call.
-      default_timeout: An integer containing the default number of seconds to
-        wait for an operation to complete if no explicit value is provided.
-      default_retries: An integer containing the default number or times an
-        operation should be retried on failure if no explicit value is provided.
-    """
-    self.adb = None
-    if isinstance(device, basestring):
-      self.adb = _CreateAdbWrapper(device)
-    elif isinstance(device, adb_wrapper.AdbWrapper):
-      self.adb = device
-    else:
-      raise ValueError('Unsupported device value: %r' % device)
-    self._commands_installed = None
-    self._default_timeout = default_timeout
-    self._default_retries = default_retries
-    self._enable_device_files_cache = enable_device_files_cache
-    self._cache = {}
-    self._client_caches = {}
-    self._cache_lock = threading.RLock()
-    assert hasattr(self, decorators.DEFAULT_TIMEOUT_ATTR)
-    assert hasattr(self, decorators.DEFAULT_RETRIES_ATTR)
-
-    self._ClearCache()
-
-  @property
-  def serial(self):
-    """Returns the device serial."""
-    return self.adb.GetDeviceSerial()
-
-  def __eq__(self, other):
-    """Checks whether |other| refers to the same device as |self|.
-
-    Args:
-      other: The object to compare to. This can be a basestring, an instance
-        of adb_wrapper.AdbWrapper, or an instance of DeviceUtils.
-    Returns:
-      Whether |other| refers to the same device as |self|.
-    """
-    return self.serial == str(other)
-
-  def __lt__(self, other):
-    """Compares two instances of DeviceUtils.
-
-    This merely compares their serial numbers.
-
-    Args:
-      other: The instance of DeviceUtils to compare to.
-    Returns:
-      Whether |self| is less than |other|.
-    """
-    return self.serial < other.serial
-
-  def __str__(self):
-    """Returns the device serial."""
-    return self.serial
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def IsOnline(self, timeout=None, retries=None):
-    """Checks whether the device is online.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the device is online, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-    """
-    try:
-      return self.adb.GetState() == 'device'
-    except base_error.BaseError as exc:
-      logger.info('Failed to get state: %s', exc)
-      return False
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def HasRoot(self, timeout=None, retries=None):
-    """Checks whether or not adbd has root privileges.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if adbd has root privileges, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    try:
-      if self.product_name in _SPECIAL_ROOT_DEVICE_LIST:
-        return self.GetProp('service.adb.root') == '1'
-      self.RunShellCommand(['ls', '/root'], check_return=True)
-      return True
-    except device_errors.AdbCommandFailedError:
-      return False
-
-  def NeedsSU(self, timeout=DEFAULT, retries=DEFAULT):
-    """Checks whether 'su' is needed to access protected resources.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if 'su' is available on the device and is needed to to access
-        protected resources; False otherwise if either 'su' is not available
-        (e.g. because the device has a user build), or not needed (because adbd
-        already has root privileges).
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    if 'needs_su' not in self._cache:
-      cmd = '%s && ! ls /root' % self._Su('ls /root')
-      if self.product_name in _SPECIAL_ROOT_DEVICE_LIST:
-        if self.HasRoot():
-          self._cache['needs_su'] = False
-          return False
-        cmd = 'which which && which su'
-      try:
-        self.RunShellCommand(cmd, shell=True, check_return=True,
-            timeout=self._default_timeout if timeout is DEFAULT else timeout,
-            retries=self._default_retries if retries is DEFAULT else retries)
-        self._cache['needs_su'] = True
-      except device_errors.AdbCommandFailedError:
-        self._cache['needs_su'] = False
-    return self._cache['needs_su']
-
-
-  def _Su(self, command):
-    if self.build_version_sdk >= version_codes.MARSHMALLOW:
-      return 'su 0 %s' % command
-    return 'su -c %s' % command
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def EnableRoot(self, timeout=None, retries=None):
-    """Restarts adbd with root privileges.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if root could not be enabled.
-      CommandTimeoutError on timeout.
-    """
-    if 'needs_su' in self._cache:
-      del self._cache['needs_su']
-
-    try:
-      self.adb.Root()
-    except device_errors.AdbCommandFailedError:
-      if self.IsUserBuild():
-        raise device_errors.CommandFailedError(
-            'Unable to root device with user build.', str(self))
-      else:
-        raise  # Failed probably due to some other reason.
-
-    def device_online_with_root():
-      try:
-        self.adb.WaitForDevice()
-        return self.GetProp('service.adb.root', cache=False) == '1'
-      except (device_errors.AdbCommandFailedError,
-              device_errors.DeviceUnreachableError):
-        return False
-
-    timeout_retry.WaitFor(device_online_with_root, wait_period=1)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def IsUserBuild(self, timeout=None, retries=None):
-    """Checks whether or not the device is running a user build.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the device is running a user build, False otherwise (i.e. if
-        it's running a userdebug build).
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    return self.build_type == 'user'
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetExternalStoragePath(self, timeout=None, retries=None):
-    """Get the device's path to its SD card.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The device's path to its SD card.
-
-    Raises:
-      CommandFailedError if the external storage path could not be determined.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    self._EnsureCacheInitialized()
-    if not self._cache['external_storage']:
-      raise device_errors.CommandFailedError('$EXTERNAL_STORAGE is not set',
-                                             str(self))
-    return self._cache['external_storage']
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetIMEI(self, timeout=None, retries=None):
-    """Get the device's IMEI.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The device's IMEI.
-
-    Raises:
-      AdbCommandFailedError on error
-    """
-    if self._cache.get('imei') is not None:
-      return self._cache.get('imei')
-
-    if self.build_version_sdk < 21:
-      out = self.RunShellCommand(['dumpsys', 'iphonesubinfo'],
-                                 raw_output=True, check_return=True)
-      if out:
-        match = re.search(_IMEI_RE, out)
-        if match:
-          self._cache['imei'] = match.group(1)
-          return self._cache['imei']
-    else:
-      out = self.RunShellCommand(['service', 'call', 'iphonesubinfo', '1'],
-                                 check_return=True)
-      if out:
-        imei = ''
-        for line in out:
-          match = re.search(_PARCEL_RESULT_RE, line)
-          if match:
-            imei = imei + match.group(1)
-        imei = imei.replace('.', '').strip()
-        if imei:
-          self._cache['imei'] = imei
-          return self._cache['imei']
-
-    raise device_errors.CommandFailedError('Unable to fetch IMEI.')
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetApplicationPaths(self, package, timeout=None, retries=None):
-    """Get the paths of the installed apks on the device for the given package.
-
-    Args:
-      package: Name of the package.
-
-    Returns:
-      List of paths to the apks on the device for the given package.
-    """
-    return self._GetApplicationPathsInternal(package)
-
-  def _GetApplicationPathsInternal(self, package, skip_cache=False):
-    cached_result = self._cache['package_apk_paths'].get(package)
-    if cached_result is not None and not skip_cache:
-      if package in self._cache['package_apk_paths_to_verify']:
-        self._cache['package_apk_paths_to_verify'].remove(package)
-        # Don't verify an app that is not thought to be installed. We are
-        # concerned only with apps we think are installed having been
-        # uninstalled manually.
-        if cached_result and not self.PathExists(cached_result):
-          cached_result = None
-          self._cache['package_apk_checksums'].pop(package, 0)
-      if cached_result is not None:
-        return list(cached_result)
-    # 'pm path' is liable to incorrectly exit with a nonzero number starting
-    # in Lollipop.
-    # TODO(jbudorick): Check if this is fixed as new Android versions are
-    # released to put an upper bound on this.
-    should_check_return = (self.build_version_sdk < version_codes.LOLLIPOP)
-    output = self.RunShellCommand(
-        ['pm', 'path', package], check_return=should_check_return)
-    apks = []
-    bad_output = False
-    for line in output:
-      if line.startswith('package:'):
-        apks.append(line[len('package:'):])
-      elif line.startswith('WARNING:'):
-        continue
-      else:
-        bad_output = True  # Unexpected line in output.
-    if not apks and output:
-      if bad_output:
-        raise device_errors.CommandFailedError(
-            'Unexpected pm path output: %r' % '\n'.join(output), str(self))
-      else:
-        logger.warning('pm returned no paths but the following warnings:')
-        for line in output:
-          logger.warning('- %s', line)
-    self._cache['package_apk_paths'][package] = list(apks)
-    return apks
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetApplicationVersion(self, package, timeout=None, retries=None):
-    """Get the version name of a package installed on the device.
-
-    Args:
-      package: Name of the package.
-
-    Returns:
-      A string with the version name or None if the package is not found
-      on the device.
-    """
-    output = self.RunShellCommand(
-        ['dumpsys', 'package', package], check_return=True)
-    if not output:
-      return None
-    for line in output:
-      line = line.strip()
-      if line.startswith('versionName='):
-        return line[len('versionName='):]
-    raise device_errors.CommandFailedError(
-        'Version name for %s not found on dumpsys output' % package, str(self))
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetApplicationDataDirectory(self, package, timeout=None, retries=None):
-    """Get the data directory on the device for the given package.
-
-    Args:
-      package: Name of the package.
-
-    Returns:
-      The package's data directory.
-    Raises:
-      CommandFailedError if the package's data directory can't be found,
-        whether because it's not installed or otherwise.
-    """
-    output = self._RunPipedShellCommand(
-        'pm dump %s | grep dataDir=' % cmd_helper.SingleQuote(package))
-    for line in output:
-      _, _, dataDir = line.partition('dataDir=')
-      if dataDir:
-        return dataDir
-    raise device_errors.CommandFailedError(
-        'Could not find data directory for %s', package)
-
-  def TakeBugReport(self, path, timeout=60*5, retries=None):
-    """Takes a bug report and dumps it to the specified path.
-
-    This doesn't use adb's bugreport option since its behavior is dependent on
-    both adb version and device OS version. To make it simpler, this directly
-    runs the bugreport command on the device itself and dumps the stdout to a
-    file.
-
-    Args:
-      path: Path on the host to drop the bug report.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    with device_temp_file.DeviceTempFile(self.adb) as device_tmp_file:
-      cmd = '( bugreport )>%s 2>&1' % device_tmp_file.name
-      self.RunShellCommand(
-          cmd, check_return=True, shell=True, timeout=timeout, retries=retries)
-      self.PullFile(device_tmp_file.name, path)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def WaitUntilFullyBooted(self, wifi=False, timeout=None, retries=None):
-    """Wait for the device to fully boot.
-
-    This means waiting for the device to boot, the package manager to be
-    available, and the SD card to be ready. It can optionally mean waiting
-    for wifi to come up, too.
-
-    Args:
-      wifi: A boolean indicating if we should wait for wifi to come up or not.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError if one of the component waits times out.
-      DeviceUnreachableError if the device becomes unresponsive.
-    """
-    def sd_card_ready():
-      try:
-        self.RunShellCommand(['test', '-d', self.GetExternalStoragePath()],
-                             check_return=True)
-        return True
-      except device_errors.AdbCommandFailedError:
-        return False
-
-    def pm_ready():
-      try:
-        return self._GetApplicationPathsInternal('android', skip_cache=True)
-      except device_errors.CommandFailedError:
-        return False
-
-    def boot_completed():
-      try:
-        return self.GetProp('sys.boot_completed', cache=False) == '1'
-      except device_errors.CommandFailedError:
-        return False
-
-    def wifi_enabled():
-      return 'Wi-Fi is enabled' in self.RunShellCommand(['dumpsys', 'wifi'],
-                                                        check_return=False)
-
-    self.adb.WaitForDevice()
-    timeout_retry.WaitFor(sd_card_ready)
-    timeout_retry.WaitFor(pm_ready)
-    timeout_retry.WaitFor(boot_completed)
-    if wifi:
-      timeout_retry.WaitFor(wifi_enabled)
-
-  REBOOT_DEFAULT_TIMEOUT = 10 * _DEFAULT_TIMEOUT
-
-  @decorators.WithTimeoutAndRetriesFromInstance(
-      min_default_timeout=REBOOT_DEFAULT_TIMEOUT)
-  def Reboot(self, block=True, wifi=False, timeout=None, retries=None):
-    """Reboot the device.
-
-    Args:
-      block: A boolean indicating if we should wait for the reboot to complete.
-      wifi: A boolean indicating if we should wait for wifi to be enabled after
-        the reboot. The option has no effect unless |block| is also True.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    def device_offline():
-      return not self.IsOnline()
-
-    self.adb.Reboot()
-    self._ClearCache()
-    timeout_retry.WaitFor(device_offline, wait_period=1)
-    if block:
-      self.WaitUntilFullyBooted(wifi=wifi)
-
-  INSTALL_DEFAULT_TIMEOUT = 4 * _DEFAULT_TIMEOUT
-
-  @decorators.WithTimeoutAndRetriesFromInstance(
-      min_default_timeout=INSTALL_DEFAULT_TIMEOUT)
-  def Install(self, apk, allow_downgrade=False, reinstall=False,
-              permissions=None, timeout=None, retries=None):
-    """Install an APK.
-
-    Noop if an identical APK is already installed.
-
-    Args:
-      apk: An ApkHelper instance or string containing the path to the APK.
-      allow_downgrade: A boolean indicating if we should allow downgrades.
-      reinstall: A boolean indicating if we should keep any existing app data.
-      permissions: Set of permissions to set. If not set, finds permissions with
-          apk helper. To set no permissions, pass [].
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the installation fails.
-      CommandTimeoutError if the installation times out.
-      DeviceUnreachableError on missing device.
-    """
-    self._InstallInternal(apk, None, allow_downgrade=allow_downgrade,
-                          reinstall=reinstall, permissions=permissions)
-
-  @decorators.WithTimeoutAndRetriesFromInstance(
-      min_default_timeout=INSTALL_DEFAULT_TIMEOUT)
-  def InstallSplitApk(self, base_apk, split_apks, allow_downgrade=False,
-                      reinstall=False, allow_cached_props=False,
-                      permissions=None, timeout=None, retries=None):
-    """Install a split APK.
-
-    Noop if all of the APK splits are already installed.
-
-    Args:
-      base_apk: An ApkHelper instance or string containing the path to the base
-          APK.
-      split_apks: A list of strings of paths of all of the APK splits.
-      allow_downgrade: A boolean indicating if we should allow downgrades.
-      reinstall: A boolean indicating if we should keep any existing app data.
-      allow_cached_props: Whether to use cached values for device properties.
-      permissions: Set of permissions to set. If not set, finds permissions with
-          apk helper. To set no permissions, pass [].
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the installation fails.
-      CommandTimeoutError if the installation times out.
-      DeviceUnreachableError on missing device.
-      DeviceVersionError if device SDK is less than Android L.
-    """
-    self._InstallInternal(base_apk, split_apks, reinstall=reinstall,
-                          allow_cached_props=allow_cached_props,
-                          permissions=permissions,
-                          allow_downgrade=allow_downgrade)
-
-  def _InstallInternal(self, base_apk, split_apks, allow_downgrade=False,
-                       reinstall=False, allow_cached_props=False,
-                       permissions=None):
-    if split_apks:
-      self._CheckSdkLevel(version_codes.LOLLIPOP)
-
-    base_apk = apk_helper.ToHelper(base_apk)
-
-    all_apks = [base_apk.path]
-    if split_apks:
-      all_apks += split_select.SelectSplits(
-        self, base_apk.path, split_apks, allow_cached_props=allow_cached_props)
-      if len(all_apks) == 1:
-        logger.warning('split-select did not select any from %s', split_apks)
-
-    missing_apks = [apk for apk in all_apks if not os.path.exists(apk)]
-    if missing_apks:
-      raise device_errors.CommandFailedError(
-          'Attempted to install non-existent apks: %s'
-              % pprint.pformat(missing_apks))
-
-    package_name = base_apk.GetPackageName()
-    device_apk_paths = self._GetApplicationPathsInternal(package_name)
-
-    apks_to_install = None
-    host_checksums = None
-    if not device_apk_paths:
-      apks_to_install = all_apks
-    elif len(device_apk_paths) > 1 and not split_apks:
-      logger.warning(
-          'Installing non-split APK when split APK was previously installed')
-      apks_to_install = all_apks
-    elif len(device_apk_paths) == 1 and split_apks:
-      logger.warning(
-          'Installing split APK when non-split APK was previously installed')
-      apks_to_install = all_apks
-    else:
-      try:
-        apks_to_install, host_checksums = (
-            self._ComputeStaleApks(package_name, all_apks))
-      except EnvironmentError as e:
-        logger.warning('Error calculating md5: %s', e)
-        apks_to_install, host_checksums = all_apks, None
-      if apks_to_install and not reinstall:
-        self.Uninstall(package_name)
-        apks_to_install = all_apks
-
-    if apks_to_install:
-      # Assume that we won't know the resulting device state.
-      self._cache['package_apk_paths'].pop(package_name, 0)
-      self._cache['package_apk_checksums'].pop(package_name, 0)
-      if split_apks:
-        partial = package_name if len(apks_to_install) < len(all_apks) else None
-        self.adb.InstallMultiple(
-            apks_to_install, partial=partial, reinstall=reinstall,
-            allow_downgrade=allow_downgrade)
-      else:
-        self.adb.Install(
-            base_apk.path, reinstall=reinstall, allow_downgrade=allow_downgrade)
-    else:
-      # Running adb install terminates running instances of the app, so to be
-      # consistent, we explicitly terminate it when skipping the install.
-      self.ForceStop(package_name)
-
-    if (permissions is None
-        and self.build_version_sdk >= version_codes.MARSHMALLOW):
-      permissions = base_apk.GetPermissions()
-    self.GrantPermissions(package_name, permissions)
-    # Upon success, we know the device checksums, but not their paths.
-    if host_checksums is not None:
-      self._cache['package_apk_checksums'][package_name] = host_checksums
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def Uninstall(self, package_name, keep_data=False, timeout=None,
-                retries=None):
-    """Remove the app |package_name| from the device.
-
-    This is a no-op if the app is not already installed.
-
-    Args:
-      package_name: The package to uninstall.
-      keep_data: (optional) Whether to keep the data and cache directories.
-      timeout: Timeout in seconds.
-      retries: Number of retries.
-
-    Raises:
-      CommandFailedError if the uninstallation fails.
-      CommandTimeoutError if the uninstallation times out.
-      DeviceUnreachableError on missing device.
-    """
-    installed = self._GetApplicationPathsInternal(package_name)
-    if not installed:
-      return
-    try:
-      self.adb.Uninstall(package_name, keep_data)
-      self._cache['package_apk_paths'][package_name] = []
-      self._cache['package_apk_checksums'][package_name] = set()
-    except:
-      # Clear cache since we can't be sure of the state.
-      self._cache['package_apk_paths'].pop(package_name, 0)
-      self._cache['package_apk_checksums'].pop(package_name, 0)
-      raise
-
-  def _CheckSdkLevel(self, required_sdk_level):
-    """Raises an exception if the device does not have the required SDK level.
-    """
-    if self.build_version_sdk < required_sdk_level:
-      raise device_errors.DeviceVersionError(
-          ('Requires SDK level %s, device is SDK level %s' %
-           (required_sdk_level, self.build_version_sdk)),
-           device_serial=self.serial)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def RunShellCommand(self, cmd, shell=False, check_return=False, cwd=None,
-                      env=None, run_as=None, as_root=False, single_line=False,
-                      large_output=False, raw_output=False, timeout=None,
-                      retries=None):
-    """Run an ADB shell command.
-
-    The command to run |cmd| should be a sequence of program arguments
-    (preferred) or a single string with a shell script to run.
-
-    When |cmd| is a sequence, it is assumed to contain the name of the command
-    to run followed by its arguments. In this case, arguments are passed to the
-    command exactly as given, preventing any further processing by the shell.
-    This allows callers to easily pass arguments with spaces or special
-    characters without having to worry about quoting rules. Whenever possible,
-    it is recomended to pass |cmd| as a sequence.
-
-    When |cmd| is passed as a single string, |shell| should be set to True.
-    The command will be interpreted and run by the shell on the device,
-    allowing the use of shell features such as pipes, wildcards, or variables.
-    Failing to set shell=True will issue a warning, but this will be changed
-    to a hard failure in the future (see: catapult:#3242).
-
-    This behaviour is consistent with that of command runners in cmd_helper as
-    well as Python's own subprocess.Popen.
-
-    TODO(perezju) Change the default of |check_return| to True when callers
-      have switched to the new behaviour.
-
-    Args:
-      cmd: A sequence containing the command to run and its arguments, or a
-        string with a shell script to run (should also set shell=True).
-      shell: A boolean indicating whether shell features may be used in |cmd|.
-      check_return: A boolean indicating whether or not the return code should
-        be checked.
-      cwd: The device directory in which the command should be run.
-      env: The environment variables with which the command should be run.
-      run_as: A string containing the package as which the command should be
-        run.
-      as_root: A boolean indicating whether the shell command should be run
-        with root privileges.
-      single_line: A boolean indicating if only a single line of output is
-        expected.
-      large_output: Uses a work-around for large shell command output. Without
-        this large output will be truncated.
-      raw_output: Whether to only return the raw output
-          (no splitting into lines).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      If single_line is False, the output of the command as a list of lines,
-      otherwise, a string with the unique line of output emmited by the command
-      (with the optional newline at the end stripped).
-
-    Raises:
-      AdbCommandFailedError if check_return is True and the exit code of
-        the command run on the device is non-zero.
-      CommandFailedError if single_line is True but the output contains two or
-        more lines.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    def env_quote(key, value):
-      if not DeviceUtils._VALID_SHELL_VARIABLE.match(key):
-        raise KeyError('Invalid shell variable name %r' % key)
-      # using double quotes here to allow interpolation of shell variables
-      return '%s=%s' % (key, cmd_helper.DoubleQuote(value))
-
-    def run(cmd):
-      return self.adb.Shell(cmd)
-
-    def handle_check_return(cmd):
-      try:
-        return run(cmd)
-      except device_errors.AdbCommandFailedError as exc:
-        if check_return:
-          raise
-        else:
-          return exc.output
-
-    def handle_large_command(cmd):
-      if len(cmd) < self._MAX_ADB_COMMAND_LENGTH:
-        return handle_check_return(cmd)
-      else:
-        with device_temp_file.DeviceTempFile(self.adb, suffix='.sh') as script:
-          self._WriteFileWithPush(script.name, cmd)
-          logger.info('Large shell command will be run from file: %s ...',
-                      cmd[:self._MAX_ADB_COMMAND_LENGTH])
-          return handle_check_return('sh %s' % script.name_quoted)
-
-    def handle_large_output(cmd, large_output_mode):
-      if large_output_mode:
-        with device_temp_file.DeviceTempFile(self.adb) as large_output_file:
-          cmd = '( %s )>%s 2>&1' % (cmd, large_output_file.name)
-          logger.debug('Large output mode enabled. Will write output to '
-                       'device and read results from file.')
-          handle_large_command(cmd)
-          return self.ReadFile(large_output_file.name, force_pull=True)
-      else:
-        try:
-          return handle_large_command(cmd)
-        except device_errors.AdbCommandFailedError as exc:
-          if exc.status is None:
-            logger.error(_FormatPartialOutputError(exc.output))
-            logger.warning('Attempting to run in large_output mode.')
-            logger.warning('Use RunShellCommand(..., large_output=True) for '
-                           'shell commands that expect a lot of output.')
-            return handle_large_output(cmd, True)
-          else:
-            raise
-
-    if isinstance(cmd, basestring):
-      if not shell:
-        logger.warning(
-            'The command to run should preferably be passed as a sequence of'
-            ' args. If shell features are needed (pipes, wildcards, variables)'
-            ' clients should explicitly set shell=True.')
-    else:
-      cmd = ' '.join(cmd_helper.SingleQuote(s) for s in cmd)
-    if env:
-      env = ' '.join(env_quote(k, v) for k, v in env.iteritems())
-      cmd = '%s %s' % (env, cmd)
-    if cwd:
-      cmd = 'cd %s && %s' % (cmd_helper.SingleQuote(cwd), cmd)
-    if run_as:
-      cmd = 'run-as %s sh -c %s' % (cmd_helper.SingleQuote(run_as),
-                                    cmd_helper.SingleQuote(cmd))
-    if as_root and self.NeedsSU():
-      # "su -c sh -c" allows using shell features in |cmd|
-      cmd = self._Su('sh -c %s' % cmd_helper.SingleQuote(cmd))
-
-    output = handle_large_output(cmd, large_output)
-
-    if raw_output:
-      return output
-
-    output = output.splitlines()
-    if single_line:
-      if not output:
-        return ''
-      elif len(output) == 1:
-        return output[0]
-      else:
-        msg = 'one line of output was expected, but got: %s'
-        raise device_errors.CommandFailedError(msg % output, str(self))
-    else:
-      return output
-
-  def _RunPipedShellCommand(self, script, **kwargs):
-    PIPESTATUS_LEADER = 'PIPESTATUS: '
-
-    script += '; echo "%s${PIPESTATUS[@]}"' % PIPESTATUS_LEADER
-    kwargs.update(shell=True, check_return=True)
-    output = self.RunShellCommand(script, **kwargs)
-    pipestatus_line = output[-1]
-
-    if not pipestatus_line.startswith(PIPESTATUS_LEADER):
-      logger.error('Pipe exit statuses of shell script missing.')
-      raise device_errors.AdbShellCommandFailedError(
-          script, output, status=None,
-          device_serial=self.serial)
-
-    output = output[:-1]
-    statuses = [
-        int(s) for s in pipestatus_line[len(PIPESTATUS_LEADER):].split()]
-    if any(statuses):
-      raise device_errors.AdbShellCommandFailedError(
-          script, output, status=statuses,
-          device_serial=self.serial)
-    return output
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def KillAll(self, process_name, exact=False, signum=device_signal.SIGKILL,
-              as_root=False, blocking=False, quiet=False,
-              timeout=None, retries=None):
-    """Kill all processes with the given name on the device.
-
-    Args:
-      process_name: A string containing the name of the process to kill.
-      exact: A boolean indicating whether to kill all processes matching
-             the string |process_name| exactly, or all of those which contain
-             |process_name| as a substring. Defaults to False.
-      signum: An integer containing the signal number to send to kill. Defaults
-              to SIGKILL (9).
-      as_root: A boolean indicating whether the kill should be executed with
-               root privileges.
-      blocking: A boolean indicating whether we should wait until all processes
-                with the given |process_name| are dead.
-      quiet: A boolean indicating whether to ignore the fact that no processes
-             to kill were found.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The number of processes attempted to kill.
-
-    Raises:
-      CommandFailedError if no process was killed and |quiet| is False.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    processes = self.ListProcesses(process_name)
-    if exact:
-      processes = [p for p in processes if p.name == process_name]
-    if not processes:
-      if quiet:
-        return 0
-      else:
-        raise device_errors.CommandFailedError(
-            'No processes matching %r (exact=%r)' % (process_name, exact),
-            str(self))
-
-    logger.info(
-        'KillAll(%r, ...) attempting to kill the following:', process_name)
-    for p in processes:
-      logger.info('  %05d %s', p.pid, p.name)
-
-    pids = set(p.pid for p in processes)
-    cmd = ['kill', '-%d' % signum] + sorted(str(p) for p in pids)
-    self.RunShellCommand(cmd, as_root=as_root, check_return=True)
-
-    def all_pids_killed():
-      pids_left = (p.pid for p in self.ListProcesses(process_name))
-      return not pids.intersection(pids_left)
-
-    if blocking:
-      timeout_retry.WaitFor(all_pids_killed, wait_period=0.1)
-
-    return len(pids)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def StartActivity(self, intent_obj, blocking=False, trace_file_name=None,
-                    force_stop=False, timeout=None, retries=None):
-    """Start package's activity on the device.
-
-    Args:
-      intent_obj: An Intent object to send.
-      blocking: A boolean indicating whether we should wait for the activity to
-                finish launching.
-      trace_file_name: If present, a string that both indicates that we want to
-                       profile the activity and contains the path to which the
-                       trace should be saved.
-      force_stop: A boolean indicating whether we should stop the activity
-                  before starting it.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the activity could not be started.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    cmd = ['am', 'start']
-    if blocking:
-      cmd.append('-W')
-    if trace_file_name:
-      cmd.extend(['--start-profiler', trace_file_name])
-    if force_stop:
-      cmd.append('-S')
-    cmd.extend(intent_obj.am_args)
-    for line in self.RunShellCommand(cmd, check_return=True):
-      if line.startswith('Error:'):
-        raise device_errors.CommandFailedError(line, str(self))
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def StartInstrumentation(self, component, finish=True, raw=False,
-                           extras=None, timeout=None, retries=None):
-    if extras is None:
-      extras = {}
-
-    cmd = ['am', 'instrument']
-    if finish:
-      cmd.append('-w')
-    if raw:
-      cmd.append('-r')
-    for k, v in extras.iteritems():
-      cmd.extend(['-e', str(k), str(v)])
-    cmd.append(component)
-
-    # Store the package name in a shell variable to help the command stay under
-    # the _MAX_ADB_COMMAND_LENGTH limit.
-    package = component.split('/')[0]
-    shell_snippet = 'p=%s;%s' % (package,
-                                 cmd_helper.ShrinkToSnippet(cmd, 'p', package))
-    return self.RunShellCommand(shell_snippet, shell=True, check_return=True,
-                                large_output=True)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def BroadcastIntent(self, intent_obj, timeout=None, retries=None):
-    """Send a broadcast intent.
-
-    Args:
-      intent: An Intent to broadcast.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    cmd = ['am', 'broadcast'] + intent_obj.am_args
-    self.RunShellCommand(cmd, check_return=True)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GoHome(self, timeout=None, retries=None):
-    """Return to the home screen and obtain launcher focus.
-
-    This command launches the home screen and attempts to obtain
-    launcher focus until the timeout is reached.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    def is_launcher_focused():
-      output = self.RunShellCommand(['dumpsys', 'window', 'windows'],
-                                    check_return=True, large_output=True)
-      return any(self._LAUNCHER_FOCUSED_RE.match(l) for l in output)
-
-    def dismiss_popups():
-      # There is a dialog present; attempt to get rid of it.
-      # Not all dialogs can be dismissed with back.
-      self.SendKeyEvent(keyevent.KEYCODE_ENTER)
-      self.SendKeyEvent(keyevent.KEYCODE_BACK)
-      return is_launcher_focused()
-
-    # If Home is already focused, return early to avoid unnecessary work.
-    if is_launcher_focused():
-      return
-
-    self.StartActivity(
-        intent.Intent(action='android.intent.action.MAIN',
-                      category='android.intent.category.HOME'),
-        blocking=True)
-
-    if not is_launcher_focused():
-      timeout_retry.WaitFor(dismiss_popups, wait_period=1)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def ForceStop(self, package, timeout=None, retries=None):
-    """Close the application.
-
-    Args:
-      package: A string containing the name of the package to stop.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    if self.GetApplicationPids(package):
-      self.RunShellCommand(['am', 'force-stop', package], check_return=True)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def ClearApplicationState(
-      self, package, permissions=None, timeout=None, retries=None):
-    """Clear all state for the given package.
-
-    Args:
-      package: A string containing the name of the package to stop.
-      permissions: List of permissions to set after clearing data.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    # Check that the package exists before clearing it for android builds below
-    # JB MR2. Necessary because calling pm clear on a package that doesn't exist
-    # may never return.
-    if ((self.build_version_sdk >= version_codes.JELLY_BEAN_MR2)
-        or self._GetApplicationPathsInternal(package)):
-      self.RunShellCommand(['pm', 'clear', package], check_return=True)
-      self.GrantPermissions(package, permissions)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SendKeyEvent(self, keycode, timeout=None, retries=None):
-    """Sends a keycode to the device.
-
-    See the devil.android.sdk.keyevent module for suitable keycode values.
-
-    Args:
-      keycode: A integer keycode to send to the device.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    self.RunShellCommand(['input', 'keyevent', format(keycode, 'd')],
-                         check_return=True)
-
-  PUSH_CHANGED_FILES_DEFAULT_TIMEOUT = 10 * _DEFAULT_TIMEOUT
-
-  @decorators.WithTimeoutAndRetriesFromInstance(
-      min_default_timeout=PUSH_CHANGED_FILES_DEFAULT_TIMEOUT)
-  def PushChangedFiles(self, host_device_tuples, timeout=None,
-                       retries=None, delete_device_stale=False):
-    """Push files to the device, skipping files that don't need updating.
-
-    When a directory is pushed, it is traversed recursively on the host and
-    all files in it are pushed to the device as needed.
-    Additionally, if delete_device_stale option is True,
-    files that exist on the device but don't exist on the host are deleted.
-
-    Args:
-      host_device_tuples: A list of (host_path, device_path) tuples, where
-        |host_path| is an absolute path of a file or directory on the host
-        that should be minimially pushed to the device, and |device_path| is
-        an absolute path of the destination on the device.
-      timeout: timeout in seconds
-      retries: number of retries
-      delete_device_stale: option to delete stale files on device
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-
-    all_changed_files = []
-    all_stale_files = []
-    missing_dirs = set()
-    cache_commit_funcs = []
-    for h, d in host_device_tuples:
-      assert os.path.isabs(h) and posixpath.isabs(d)
-      h = os.path.realpath(h)
-      changed_files, up_to_date_files, stale_files, cache_commit_func = (
-          self._GetChangedAndStaleFiles(h, d, delete_device_stale))
-      all_changed_files += changed_files
-      all_stale_files += stale_files
-      cache_commit_funcs.append(cache_commit_func)
-      if changed_files and not up_to_date_files and not stale_files:
-        if os.path.isdir(h):
-          missing_dirs.add(d)
-        else:
-          missing_dirs.add(posixpath.dirname(d))
-
-    if delete_device_stale and all_stale_files:
-      self.RunShellCommand(['rm', '-f'] + all_stale_files, check_return=True)
-
-    if all_changed_files:
-      if missing_dirs:
-        try:
-          self.RunShellCommand(['mkdir', '-p'] + list(missing_dirs),
-                               check_return=True)
-        except device_errors.AdbShellCommandFailedError as e:
-          # TODO(crbug.com/739899): This is attempting to diagnose flaky EBUSY
-          # errors that have been popping up in single-device scenarios.
-          # Remove it once we've figured out what's causing them and how best
-          # to handle them.
-          m = _EBUSY_RE.search(e.output)
-          if m:
-            logging.error(
-                'Hit EBUSY while attempting to make missing directories.')
-            logging.error('lsof output:')
-            # Don't check for return below since grep exits with a non-zero when
-            # no match is found.
-            for l in self.RunShellCommand(
-                'lsof | grep %s' % cmd_helper.SingleQuote(m.group(1)),
-                check_return=False):
-              logging.error('  %s', l)
-          raise
-      self._PushFilesImpl(host_device_tuples, all_changed_files)
-    for func in cache_commit_funcs:
-      func()
-
-  def _GetChangedAndStaleFiles(self, host_path, device_path, track_stale=False):
-    """Get files to push and delete
-
-    Args:
-      host_path: an absolute path of a file or directory on the host
-      device_path: an absolute path of a file or directory on the device
-      track_stale: whether to bother looking for stale files (slower)
-
-    Returns:
-      a four-element tuple
-      1st element: a list of (host_files_path, device_files_path) tuples to push
-      2nd element: a list of host_files_path that are up-to-date
-      3rd element: a list of stale files under device_path, or [] when
-        track_stale == False
-      4th element: a cache commit function.
-    """
-    try:
-      # Length calculations below assume no trailing /.
-      host_path = host_path.rstrip('/')
-      device_path = device_path.rstrip('/')
-
-      specific_device_paths = [device_path]
-      ignore_other_files = not track_stale and os.path.isdir(host_path)
-      if ignore_other_files:
-        specific_device_paths = []
-        for root, _, filenames in os.walk(host_path):
-          relative_dir = root[len(host_path) + 1:]
-          specific_device_paths.extend(
-              posixpath.join(device_path, relative_dir, f) for f in filenames)
-
-      def calculate_host_checksums():
-        return md5sum.CalculateHostMd5Sums([host_path])
-
-      def calculate_device_checksums():
-        if self._enable_device_files_cache:
-          cache_entry = self._cache['device_path_checksums'].get(device_path)
-          if cache_entry and cache_entry[0] == ignore_other_files:
-            return dict(cache_entry[1])
-
-        sums = md5sum.CalculateDeviceMd5Sums(specific_device_paths, self)
-
-        cache_entry = [ignore_other_files, sums]
-        self._cache['device_path_checksums'][device_path] = cache_entry
-        return dict(sums)
-
-      host_checksums, device_checksums = reraiser_thread.RunAsync((
-          calculate_host_checksums,
-          calculate_device_checksums))
-    except EnvironmentError as e:
-      logger.warning('Error calculating md5: %s', e)
-      return ([(host_path, device_path)], [], [], lambda: 0)
-
-    to_push = []
-    up_to_date = []
-    to_delete = []
-    if os.path.isfile(host_path):
-      host_checksum = host_checksums.get(host_path)
-      device_checksum = device_checksums.get(device_path)
-      if host_checksum == device_checksum:
-        up_to_date.append(host_path)
-      else:
-        to_push.append((host_path, device_path))
-    else:
-      for host_abs_path, host_checksum in host_checksums.iteritems():
-        device_abs_path = posixpath.join(
-            device_path, os.path.relpath(host_abs_path, host_path))
-        device_checksum = device_checksums.pop(device_abs_path, None)
-        if device_checksum == host_checksum:
-          up_to_date.append(host_abs_path)
-        else:
-          to_push.append((host_abs_path, device_abs_path))
-      to_delete = device_checksums.keys()
-
-    def cache_commit_func():
-      new_sums = {posixpath.join(device_path, path[len(host_path) + 1:]): val
-                  for path, val in host_checksums.iteritems()}
-      cache_entry = [ignore_other_files, new_sums]
-      self._cache['device_path_checksums'][device_path] = cache_entry
-
-    return (to_push, up_to_date, to_delete, cache_commit_func)
-
-  def _ComputeDeviceChecksumsForApks(self, package_name):
-    ret = self._cache['package_apk_checksums'].get(package_name)
-    if ret is None:
-      device_paths = self._GetApplicationPathsInternal(package_name)
-      file_to_checksums = md5sum.CalculateDeviceMd5Sums(device_paths, self)
-      ret = set(file_to_checksums.values())
-      self._cache['package_apk_checksums'][package_name] = ret
-    return ret
-
-  def _ComputeStaleApks(self, package_name, host_apk_paths):
-    def calculate_host_checksums():
-      return md5sum.CalculateHostMd5Sums(host_apk_paths)
-
-    def calculate_device_checksums():
-      return self._ComputeDeviceChecksumsForApks(package_name)
-
-    host_checksums, device_checksums = reraiser_thread.RunAsync((
-        calculate_host_checksums, calculate_device_checksums))
-    stale_apks = [k for (k, v) in host_checksums.iteritems()
-                  if v not in device_checksums]
-    return stale_apks, set(host_checksums.values())
-
-  def _PushFilesImpl(self, host_device_tuples, files):
-    if not files:
-      return
-
-    size = sum(host_utils.GetRecursiveDiskUsage(h) for h, _ in files)
-    file_count = len(files)
-    dir_size = sum(host_utils.GetRecursiveDiskUsage(h)
-                   for h, _ in host_device_tuples)
-    dir_file_count = 0
-    for h, _ in host_device_tuples:
-      if os.path.isdir(h):
-        dir_file_count += sum(len(f) for _r, _d, f in os.walk(h))
-      else:
-        dir_file_count += 1
-
-    push_duration = self._ApproximateDuration(
-        file_count, file_count, size, False)
-    dir_push_duration = self._ApproximateDuration(
-        len(host_device_tuples), dir_file_count, dir_size, False)
-    zip_duration = self._ApproximateDuration(1, 1, size, True)
-
-    if (dir_push_duration < push_duration and dir_push_duration < zip_duration
-        # TODO(jbudorick): Resume directory pushing once clients have switched
-        # to 1.0.36-compatible syntax.
-        and False):
-      self._PushChangedFilesIndividually(host_device_tuples)
-    elif push_duration < zip_duration:
-      self._PushChangedFilesIndividually(files)
-    elif self._commands_installed is False:
-      # Already tried and failed to install unzip command.
-      self._PushChangedFilesIndividually(files)
-    elif not self._PushChangedFilesZipped(
-        files, [d for _, d in host_device_tuples]):
-      self._PushChangedFilesIndividually(files)
-
-  def _MaybeInstallCommands(self):
-    if self._commands_installed is None:
-      try:
-        if not install_commands.Installed(self):
-          install_commands.InstallCommands(self)
-        self._commands_installed = True
-      except device_errors.CommandFailedError as e:
-        logger.warning('unzip not available: %s', str(e))
-        self._commands_installed = False
-    return self._commands_installed
-
-  @staticmethod
-  def _ApproximateDuration(adb_calls, file_count, byte_count, is_zipping):
-    # We approximate the time to push a set of files to a device as:
-    #   t = c1 * a + c2 * f + c3 + b / c4 + b / (c5 * c6), where
-    #     t: total time (sec)
-    #     c1: adb call time delay (sec)
-    #     a: number of times adb is called (unitless)
-    #     c2: push time delay (sec)
-    #     f: number of files pushed via adb (unitless)
-    #     c3: zip time delay (sec)
-    #     c4: zip rate (bytes/sec)
-    #     b: total number of bytes (bytes)
-    #     c5: transfer rate (bytes/sec)
-    #     c6: compression ratio (unitless)
-
-    # All of these are approximations.
-    ADB_CALL_PENALTY = 0.1  # seconds
-    ADB_PUSH_PENALTY = 0.01  # seconds
-    ZIP_PENALTY = 2.0  # seconds
-    ZIP_RATE = 10000000.0  # bytes / second
-    TRANSFER_RATE = 2000000.0  # bytes / second
-    COMPRESSION_RATIO = 2.0  # unitless
-
-    adb_call_time = ADB_CALL_PENALTY * adb_calls
-    adb_push_setup_time = ADB_PUSH_PENALTY * file_count
-    if is_zipping:
-      zip_time = ZIP_PENALTY + byte_count / ZIP_RATE
-      transfer_time = byte_count / (TRANSFER_RATE * COMPRESSION_RATIO)
-    else:
-      zip_time = 0
-      transfer_time = byte_count / TRANSFER_RATE
-    return adb_call_time + adb_push_setup_time + zip_time + transfer_time
-
-  def _PushChangedFilesIndividually(self, files):
-    for h, d in files:
-      self.adb.Push(h, d)
-
-  def _PushChangedFilesZipped(self, files, dirs):
-    if not self._MaybeInstallCommands():
-      return False
-
-    with tempfile_ext.NamedTemporaryDirectory() as working_dir:
-      zip_path = os.path.join(working_dir, 'tmp.zip')
-      try:
-        zip_utils.WriteZipFile(zip_path, files)
-      except zip_utils.ZipFailedError:
-        return False
-
-      self.NeedsSU()
-      with device_temp_file.DeviceTempFile(
-          self.adb, suffix='.zip') as device_temp:
-        self.adb.Push(zip_path, device_temp.name)
-
-        quoted_dirs = ' '.join(cmd_helper.SingleQuote(d) for d in dirs)
-        self.RunShellCommand(
-            'unzip %s&&chmod -R 777 %s' % (device_temp.name, quoted_dirs),
-            shell=True, as_root=True,
-            env={'PATH': '%s:$PATH' % install_commands.BIN_DIR},
-            check_return=True)
-
-    return True
-
-  # TODO(nednguyen): remove this and migrate the callsite to PathExists().
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def FileExists(self, device_path, timeout=None, retries=None):
-    """Checks whether the given file exists on the device.
-
-    Arguments are the same as PathExists.
-    """
-    return self.PathExists(device_path, timeout=timeout, retries=retries)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def PathExists(self, device_paths, as_root=False, timeout=None, retries=None):
-    """Checks whether the given path(s) exists on the device.
-
-    Args:
-      device_path: A string containing the absolute path to the file on the
-                   device, or an iterable of paths to check.
-      as_root: Whether root permissions should be use to check for the existence
-               of the given path(s).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the all given paths exist on the device, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    paths = device_paths
-    if isinstance(paths, basestring):
-      paths = (paths,)
-    if not paths:
-      return True
-    cmd = ['test', '-e', paths[0]]
-    for p in paths[1:]:
-      cmd.extend(['-a', '-e', p])
-    try:
-      self.RunShellCommand(cmd, as_root=as_root, check_return=True,
-                           timeout=timeout, retries=retries)
-      return True
-    except device_errors.CommandFailedError:
-      return False
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def RemovePath(self, device_path, force=False, recursive=False,
-                 as_root=False, rename=False, timeout=None, retries=None):
-    """Removes the given path(s) from the device.
-
-    Args:
-      device_path: A string containing the absolute path to the file on the
-                   device, or an iterable of paths to check.
-      force: Whether to remove the path(s) with force (-f).
-      recursive: Whether to remove any directories in the path(s) recursively.
-      as_root: Whether root permissions should be use to remove the given
-               path(s).
-      rename: Whether to rename the path(s) before removing to help avoid
-            filesystem errors. See https://stackoverflow.com/questions/11539657
-      timeout: timeout in seconds
-      retries: number of retries
-    """
-    def _RenamePath(path):
-      random_suffix = hex(random.randint(2 ** 12, 2 ** 16 - 1))[2:]
-      dest = '%s-%s' % (path, random_suffix)
-      try:
-        self.RunShellCommand(
-            ['mv', path, dest], as_root=as_root, check_return=True)
-        return dest
-      except device_errors.AdbShellCommandFailedError:
-        # If it couldn't be moved, just try rm'ing the original path instead.
-        return path
-    args = ['rm']
-    if force:
-      args.append('-f')
-    if recursive:
-      args.append('-r')
-    if isinstance(device_path, basestring):
-      args.append(device_path if not rename else _RenamePath(device_path))
-    else:
-      args.extend(
-          device_path if not rename else [_RenamePath(p) for p in device_path])
-    self.RunShellCommand(args, as_root=as_root, check_return=True)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def PullFile(self, device_path, host_path, timeout=None, retries=None):
-    """Pull a file from the device.
-
-    Args:
-      device_path: A string containing the absolute path of the file to pull
-                   from the device.
-      host_path: A string containing the absolute path of the destination on
-                 the host.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-    """
-    # Create the base dir if it doesn't exist already
-    dirname = os.path.dirname(host_path)
-    if dirname and not os.path.exists(dirname):
-      os.makedirs(dirname)
-    self.adb.Pull(device_path, host_path)
-
-  def _ReadFileWithPull(self, device_path):
-    try:
-      d = tempfile.mkdtemp()
-      host_temp_path = os.path.join(d, 'tmp_ReadFileWithPull')
-      self.adb.Pull(device_path, host_temp_path)
-      with open(host_temp_path, 'r') as host_temp:
-        return host_temp.read()
-    finally:
-      if os.path.exists(d):
-        shutil.rmtree(d)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def ReadFile(self, device_path, as_root=False, force_pull=False,
-               timeout=None, retries=None):
-    """Reads the contents of a file from the device.
-
-    Args:
-      device_path: A string containing the absolute path of the file to read
-                   from the device.
-      as_root: A boolean indicating whether the read should be executed with
-               root privileges.
-      force_pull: A boolean indicating whether to force the operation to be
-          performed by pulling a file from the device. The default is, when the
-          contents are short, to retrieve the contents using cat instead.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The contents of |device_path| as a string. Contents are intepreted using
-      universal newlines, so the caller will see them encoded as '\n'. Also,
-      all lines will be terminated.
-
-    Raises:
-      AdbCommandFailedError if the file can't be read.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    def get_size(path):
-      return self.FileSize(path, as_root=as_root)
-
-    if (not force_pull
-        and 0 < get_size(device_path) <= self._MAX_ADB_OUTPUT_LENGTH):
-      return _JoinLines(self.RunShellCommand(
-          ['cat', device_path], as_root=as_root, check_return=True))
-    elif as_root and self.NeedsSU():
-      with device_temp_file.DeviceTempFile(self.adb) as device_temp:
-        cmd = 'SRC=%s DEST=%s;cp "$SRC" "$DEST" && chmod 666 "$DEST"' % (
-            cmd_helper.SingleQuote(device_path),
-            cmd_helper.SingleQuote(device_temp.name))
-        self.RunShellCommand(cmd, shell=True, as_root=True, check_return=True)
-        return self._ReadFileWithPull(device_temp.name)
-    else:
-      return self._ReadFileWithPull(device_path)
-
-  def _WriteFileWithPush(self, device_path, contents):
-    with tempfile.NamedTemporaryFile() as host_temp:
-      host_temp.write(contents)
-      host_temp.flush()
-      self.adb.Push(host_temp.name, device_path)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def WriteFile(self, device_path, contents, as_root=False, force_push=False,
-                timeout=None, retries=None):
-    """Writes |contents| to a file on the device.
-
-    Args:
-      device_path: A string containing the absolute path to the file to write
-          on the device.
-      contents: A string containing the data to write to the device.
-      as_root: A boolean indicating whether the write should be executed with
-          root privileges (if available).
-      force_push: A boolean indicating whether to force the operation to be
-          performed by pushing a file to the device. The default is, when the
-          contents are short, to pass the contents using a shell script instead.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the file could not be written on the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    if not force_push and len(contents) < self._MAX_ADB_COMMAND_LENGTH:
-      # If the contents are small, for efficieny we write the contents with
-      # a shell command rather than pushing a file.
-      cmd = 'echo -n %s > %s' % (cmd_helper.SingleQuote(contents),
-                                 cmd_helper.SingleQuote(device_path))
-      self.RunShellCommand(cmd, shell=True, as_root=as_root, check_return=True)
-    elif as_root and self.NeedsSU():
-      # Adb does not allow to "push with su", so we first push to a temp file
-      # on a safe location, and then copy it to the desired location with su.
-      with device_temp_file.DeviceTempFile(self.adb) as device_temp:
-        self._WriteFileWithPush(device_temp.name, contents)
-        # Here we need 'cp' rather than 'mv' because the temp and
-        # destination files might be on different file systems (e.g.
-        # on internal storage and an external sd card).
-        self.RunShellCommand(['cp', device_temp.name, device_path],
-                             as_root=True, check_return=True)
-    else:
-      # If root is not needed, we can push directly to the desired location.
-      self._WriteFileWithPush(device_path, contents)
-
-  def _ParseLongLsOutput(self, device_path, as_root=False, **kwargs):
-    """Run and scrape the output of 'ls -a -l' on a device directory."""
-    device_path = posixpath.join(device_path, '')  # Force trailing '/'.
-    output = self.RunShellCommand(
-        ['ls', '-a', '-l', device_path], as_root=as_root,
-        check_return=True, env={'TZ': 'utc'}, **kwargs)
-    if output and output[0].startswith('total '):
-      output.pop(0) # pylint: disable=maybe-no-member
-
-    entries = []
-    for line in output:
-      m = _LONG_LS_OUTPUT_RE.match(line)
-      if m:
-        if m.group('filename') not in ['.', '..']:
-          item = m.groupdict()
-          # A change in toybox is causing recent Android versions to escape
-          # spaces in file names. Here we just unquote those spaces. If we
-          # later find more essoteric characters in file names, a more careful
-          # unquoting mechanism may be needed. But hopefully not.
-          # See: https://goo.gl/JAebZj
-          item['filename'] = item['filename'].replace('\\ ', ' ')
-          entries.append(item)
-      else:
-        logger.info('Skipping: %s', line)
-
-    return entries
-
-  def ListDirectory(self, device_path, as_root=False, **kwargs):
-    """List all files on a device directory.
-
-    Mirroring os.listdir (and most client expectations) the resulting list
-    does not include the special entries '.' and '..' even if they are present
-    in the directory.
-
-    Args:
-      device_path: A string containing the path of the directory on the device
-                   to list.
-      as_root: A boolean indicating whether the to use root privileges to list
-               the directory contents.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A list of filenames for all entries contained in the directory.
-
-    Raises:
-      AdbCommandFailedError if |device_path| does not specify a valid and
-          accessible directory in the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    entries = self._ParseLongLsOutput(device_path, as_root=as_root, **kwargs)
-    return [d['filename'] for d in entries]
-
-  def StatDirectory(self, device_path, as_root=False, **kwargs):
-    """List file and stat info for all entries on a device directory.
-
-    Implementation notes: this is currently implemented by parsing the output
-    of 'ls -a -l' on the device. Whether possible and convenient, we attempt to
-    make parsing strict and return values mirroring those of the standard |os|
-    and |stat| Python modules.
-
-    Mirroring os.listdir (and most client expectations) the resulting list
-    does not include the special entries '.' and '..' even if they are present
-    in the directory.
-
-    Args:
-      device_path: A string containing the path of the directory on the device
-                   to list.
-      as_root: A boolean indicating whether the to use root privileges to list
-               the directory contents.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A list of dictionaries, each containing the following keys:
-        filename: A string with the file name.
-        st_mode: File permissions, use the stat module to interpret these.
-        st_nlink: Number of hard links (may be missing).
-        st_owner: A string with the user name of the owner.
-        st_group: A string with the group name of the owner.
-        st_rdev_pair: Device type as (major, minior) (only if inode device).
-        st_size: Size of file, in bytes (may be missing for non-regular files).
-        st_mtime: Time of most recent modification, in seconds since epoch
-          (although resolution is in minutes).
-        symbolic_link_to: If entry is a symbolic link, path where it points to;
-          missing otherwise.
-
-    Raises:
-      AdbCommandFailedError if |device_path| does not specify a valid and
-          accessible directory in the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    entries = self._ParseLongLsOutput(device_path, as_root=as_root, **kwargs)
-    for d in entries:
-      for key, value in d.items():
-        if value is None:
-          del d[key]  # Remove missing fields.
-      d['st_mode'] = _ParseModeString(d['st_mode'])
-      d['st_mtime'] = calendar.timegm(
-          time.strptime(d['st_mtime'], _LS_DATE_FORMAT))
-      for key in ['st_nlink', 'st_size', 'st_rdev_major', 'st_rdev_minor']:
-        if key in d:
-          d[key] = int(d[key])
-      if 'st_rdev_major' in d and 'st_rdev_minor' in d:
-        d['st_rdev_pair'] = (d.pop('st_rdev_major'), d.pop('st_rdev_minor'))
-    return entries
-
-  def StatPath(self, device_path, as_root=False, **kwargs):
-    """Get the stat attributes of a file or directory on the device.
-
-    Args:
-      device_path: A string containing the path of a file or directory from
-                   which to get attributes.
-      as_root: A boolean indicating whether the to use root privileges to
-               access the file information.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A dictionary with the stat info collected; see StatDirectory for details.
-
-    Raises:
-      CommandFailedError if device_path cannot be found on the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    dirname, filename = posixpath.split(posixpath.normpath(device_path))
-    for entry in self.StatDirectory(dirname, as_root=as_root, **kwargs):
-      if entry['filename'] == filename:
-        return entry
-    raise device_errors.CommandFailedError(
-        'Cannot find file or directory: %r' % device_path, str(self))
-
-  def FileSize(self, device_path, as_root=False, **kwargs):
-    """Get the size of a file on the device.
-
-    Note: This is implemented by parsing the output of the 'ls' command on
-    the device. On some Android versions, when passing a directory or special
-    file, the size is *not* reported and this function will throw an exception.
-
-    Args:
-      device_path: A string containing the path of a file on the device.
-      as_root: A boolean indicating whether the to use root privileges to
-               access the file information.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The size of the file in bytes.
-
-    Raises:
-      CommandFailedError if device_path cannot be found on the device, or
-        its size cannot be determited for some reason.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    entry = self.StatPath(device_path, as_root=as_root, **kwargs)
-    try:
-      return entry['st_size']
-    except KeyError:
-      raise device_errors.CommandFailedError(
-          'Could not determine the size of: %s' % device_path, str(self))
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SetJavaAsserts(self, enabled, timeout=None, retries=None):
-    """Enables or disables Java asserts.
-
-    Args:
-      enabled: A boolean indicating whether Java asserts should be enabled
-               or disabled.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the device-side property changed and a restart is required as a
-      result, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-    """
-    def find_property(lines, property_name):
-      for index, line in enumerate(lines):
-        if line.strip() == '':
-          continue
-        key_value = tuple(s.strip() for s in line.split('=', 1))
-        if len(key_value) != 2:
-          continue
-        key, value = key_value
-        if key == property_name:
-          return index, value
-      return None, ''
-
-    new_value = 'all' if enabled else ''
-
-    # First ensure the desired property is persisted.
-    try:
-      properties = self.ReadFile(self.LOCAL_PROPERTIES_PATH).splitlines()
-    except device_errors.CommandFailedError:
-      properties = []
-    index, value = find_property(properties, self.JAVA_ASSERT_PROPERTY)
-    if new_value != value:
-      if new_value:
-        new_line = '%s=%s' % (self.JAVA_ASSERT_PROPERTY, new_value)
-        if index is None:
-          properties.append(new_line)
-        else:
-          properties[index] = new_line
-      else:
-        assert index is not None  # since new_value == '' and new_value != value
-        properties.pop(index)
-      self.WriteFile(self.LOCAL_PROPERTIES_PATH, _JoinLines(properties))
-
-    # Next, check the current runtime value is what we need, and
-    # if not, set it and report that a reboot is required.
-    value = self.GetProp(self.JAVA_ASSERT_PROPERTY)
-    if new_value != value:
-      self.SetProp(self.JAVA_ASSERT_PROPERTY, new_value)
-      return True
-    else:
-      return False
-
-  def GetLanguage(self, cache=False):
-    """Returns the language setting on the device.
-    Args:
-      cache: Whether to use cached properties when available.
-    """
-    return self.GetProp('persist.sys.language', cache=cache)
-
-  def GetCountry(self, cache=False):
-    """Returns the country setting on the device.
-
-    Args:
-      cache: Whether to use cached properties when available.
-    """
-    return self.GetProp('persist.sys.country', cache=cache)
-
-  @property
-  def screen_density(self):
-    """Returns the screen density of the device."""
-    DPI_TO_DENSITY = {
-      120: 'ldpi',
-      160: 'mdpi',
-      240: 'hdpi',
-      320: 'xhdpi',
-      480: 'xxhdpi',
-      640: 'xxxhdpi',
-    }
-    return DPI_TO_DENSITY.get(self.pixel_density, 'tvdpi')
-
-  @property
-  def pixel_density(self):
-    return int(self.GetProp('ro.sf.lcd_density', cache=True))
-
-  @property
-  def build_description(self):
-    """Returns the build description of the system.
-
-    For example:
-      nakasi-user 4.4.4 KTU84P 1227136 release-keys
-    """
-    return self.GetProp('ro.build.description', cache=True)
-
-  @property
-  def build_fingerprint(self):
-    """Returns the build fingerprint of the system.
-
-    For example:
-      google/nakasi/grouper:4.4.4/KTU84P/1227136:user/release-keys
-    """
-    return self.GetProp('ro.build.fingerprint', cache=True)
-
-  @property
-  def build_id(self):
-    """Returns the build ID of the system (e.g. 'KTU84P')."""
-    return self.GetProp('ro.build.id', cache=True)
-
-  @property
-  def build_product(self):
-    """Returns the build product of the system (e.g. 'grouper')."""
-    return self.GetProp('ro.build.product', cache=True)
-
-  @property
-  def build_type(self):
-    """Returns the build type of the system (e.g. 'user')."""
-    return self.GetProp('ro.build.type', cache=True)
-
-  @property
-  def build_version_sdk(self):
-    """Returns the build version sdk of the system as a number (e.g. 19).
-
-    For version code numbers see:
-    http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
-
-    For named constants see devil.android.sdk.version_codes
-
-    Raises:
-      CommandFailedError if the build version sdk is not a number.
-    """
-    value = self.GetProp('ro.build.version.sdk', cache=True)
-    try:
-      return int(value)
-    except ValueError:
-      raise device_errors.CommandFailedError(
-          'Invalid build version sdk: %r' % value)
-
-  @property
-  def product_cpu_abi(self):
-    """Returns the product cpu abi of the device (e.g. 'armeabi-v7a')."""
-    return self.GetProp('ro.product.cpu.abi', cache=True)
-
-  @property
-  def product_model(self):
-    """Returns the name of the product model (e.g. 'Nexus 7')."""
-    return self.GetProp('ro.product.model', cache=True)
-
-  @property
-  def product_name(self):
-    """Returns the product name of the device (e.g. 'nakasi')."""
-    return self.GetProp('ro.product.name', cache=True)
-
-  @property
-  def product_board(self):
-    """Returns the product board name of the device (e.g. 'shamu')."""
-    return self.GetProp('ro.product.board', cache=True)
-
-  def _EnsureCacheInitialized(self):
-    """Populates cache token, runs getprop and fetches $EXTERNAL_STORAGE."""
-    if self._cache['token']:
-      return
-    with self._cache_lock:
-      if self._cache['token']:
-        return
-      # Change the token every time to ensure that it will match only the
-      # previously dumped cache.
-      token = str(uuid.uuid1())
-      cmd = (
-          'c=/data/local/tmp/cache_token;'
-          'echo $EXTERNAL_STORAGE;'
-          'cat $c 2>/dev/null||echo;'
-          'echo "%s">$c &&' % token +
-          'getprop'
-      )
-      output = self.RunShellCommand(
-          cmd, shell=True, check_return=True, large_output=True)
-      # Error-checking for this existing is done in GetExternalStoragePath().
-      self._cache['external_storage'] = output[0]
-      self._cache['prev_token'] = output[1]
-      output = output[2:]
-
-      prop_cache = self._cache['getprop']
-      prop_cache.clear()
-      for key, value in _GETPROP_RE.findall(''.join(output)):
-        prop_cache[key] = value
-      self._cache['token'] = token
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetProp(self, property_name, cache=False, timeout=None, retries=None):
-    """Gets a property from the device.
-
-    Args:
-      property_name: A string containing the name of the property to get from
-                     the device.
-      cache: Whether to use cached properties when available.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The value of the device's |property_name| property.
-
-    Raises:
-      CommandTimeoutError on timeout.
-    """
-    assert isinstance(property_name, basestring), (
-        "property_name is not a string: %r" % property_name)
-
-    if cache:
-      # It takes ~120ms to query a single property, and ~130ms to query all
-      # properties. So, when caching we always query all properties.
-      self._EnsureCacheInitialized()
-    else:
-      # timeout and retries are handled down at run shell, because we don't
-      # want to apply them in the other branch when reading from the cache
-      value = self.RunShellCommand(
-          ['getprop', property_name], single_line=True, check_return=True,
-          timeout=timeout, retries=retries)
-      self._cache['getprop'][property_name] = value
-    # Non-existent properties are treated as empty strings by getprop.
-    return self._cache['getprop'].get(property_name, '')
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SetProp(self, property_name, value, check=False, timeout=None,
-              retries=None):
-    """Sets a property on the device.
-
-    Args:
-      property_name: A string containing the name of the property to set on
-                     the device.
-      value: A string containing the value to set to the property on the
-             device.
-      check: A boolean indicating whether to check that the property was
-             successfully set on the device.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if check is true and the property was not correctly
-        set on the device (e.g. because it is not rooted).
-      CommandTimeoutError on timeout.
-    """
-    assert isinstance(property_name, basestring), (
-        "property_name is not a string: %r" % property_name)
-    assert isinstance(value, basestring), "value is not a string: %r" % value
-
-    self.RunShellCommand(['setprop', property_name, value], check_return=True)
-    prop_cache = self._cache['getprop']
-    if property_name in prop_cache:
-      del prop_cache[property_name]
-    # TODO(perezju) remove the option and make the check mandatory, but using a
-    # single shell script to both set- and getprop.
-    if check and value != self.GetProp(property_name, cache=False):
-      raise device_errors.CommandFailedError(
-          'Unable to set property %r on the device to %r'
-          % (property_name, value), str(self))
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetABI(self, timeout=None, retries=None):
-    """Gets the device main ABI.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The device's main ABI name.
-
-    Raises:
-      CommandTimeoutError on timeout.
-    """
-    return self.GetProp('ro.product.cpu.abi', cache=True)
-
-  def _GetPsOutput(self, pattern):
-    """Runs |ps| command on the device and returns its output,
-
-    This private method abstracts away differences between Android verions for
-    calling |ps|, and implements support for filtering the output by a given
-    |pattern|, but does not do any output parsing.
-    """
-    try:
-      ps_cmd = 'ps'
-      # ps behavior was changed in Android above N, http://crbug.com/686716
-      if (self.build_version_sdk >= version_codes.NOUGAT_MR1
-          and self.build_id[0] > 'N'):
-        ps_cmd = 'ps -e'
-      if pattern:
-        return self._RunPipedShellCommand(
-            '%s | grep -F %s' % (ps_cmd, cmd_helper.SingleQuote(pattern)))
-      else:
-        return self.RunShellCommand(
-            ps_cmd.split(), check_return=True, large_output=True)
-    except device_errors.AdbShellCommandFailedError as e:
-      if e.status and isinstance(e.status, list) and not e.status[0]:
-        # If ps succeeded but grep failed, there were no processes with the
-        # given name.
-        return []
-      else:
-        raise
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def ListProcesses(self, process_name=None, timeout=None, retries=None):
-    """Returns a list of tuples with info about processes on the device.
-
-    This essentially parses the output of the |ps| command into convenient
-    ProcessInfo tuples.
-
-    Args:
-      process_name: A string used to filter the returned processes. If given,
-                    only processes whose name have this value as a substring
-                    will be returned.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A list of ProcessInfo tuples with |name|, |pid|, and |ppid| fields.
-    """
-    process_name = process_name or ''
-    processes = []
-    for line in self._GetPsOutput(process_name):
-      row = line.split()
-      try:
-        row = {k: row[i] for k, i in _PS_COLUMNS.iteritems()}
-        if row['pid'] == 'PID' or process_name not in row['name']:
-          # Skip over header and non-matching processes.
-          continue
-        row['pid'] = int(row['pid'])
-        row['ppid'] = int(row['ppid'])
-      except StandardError:  # e.g. IndexError, TypeError, ValueError.
-        logging.warning('failed to parse ps line: %r', line)
-        continue
-      processes.append(ProcessInfo(**row))
-    return processes
-
-  # TODO(#4103): Remove after migrating clients to ListProcesses.
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetPids(self, process_name=None, timeout=None, retries=None):
-    """Returns the PIDs of processes containing the given name as substring.
-
-    DEPRECATED
-
-    Note that the |process_name| is often the package name.
-
-    Args:
-      process_name: A string containing the process name to get the PIDs for.
-                    If missing returns PIDs for all processes.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A dict mapping process name to a list of PIDs for each process that
-      contained the provided |process_name|.
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    procs_pids = collections.defaultdict(list)
-    for p in self.ListProcesses(process_name):
-      procs_pids[p.name].append(str(p.pid))
-    return procs_pids
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetApplicationPids(self, process_name, at_most_one=False,
-                         timeout=None, retries=None):
-    """Returns the PID or PIDs of a given process name.
-
-    Note that the |process_name|, often the package name, must match exactly.
-
-    Args:
-      process_name: A string containing the process name to get the PIDs for.
-      at_most_one: A boolean indicating that at most one PID is expected to
-                   be found.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A list of the PIDs for the named process. If at_most_one=True returns
-      the single PID found or None otherwise.
-
-    Raises:
-      CommandFailedError if at_most_one=True and more than one PID is found
-          for the named process.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    pids = [p.pid for p in self.ListProcesses(process_name)
-            if p.name == process_name]
-    if at_most_one:
-      if len(pids) > 1:
-        raise device_errors.CommandFailedError(
-            'Expected a single PID for %r but found: %r.' % (
-                process_name, pids),
-            device_serial=str(self))
-      return pids[0] if pids else None
-    else:
-      return pids
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GetEnforce(self, timeout=None, retries=None):
-    """Get the current mode of SELinux.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True (enforcing), False (permissive), or None (disabled).
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    output = self.RunShellCommand(
-        ['getenforce'], check_return=True, single_line=True).lower()
-    if output not in _SELINUX_MODE:
-      raise device_errors.CommandFailedError(
-          'Unexpected getenforce output: %s' % output)
-    return _SELINUX_MODE[output]
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SetEnforce(self, enabled, timeout=None, retries=None):
-    """Modify the mode SELinux is running in.
-
-    Args:
-      enabled: a boolean indicating whether to put SELinux in encorcing mode
-               (if True), or permissive mode (otherwise).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    self.RunShellCommand(
-        ['setenforce', '1' if int(enabled) else '0'], as_root=True,
-        check_return=True)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def TakeScreenshot(self, host_path=None, timeout=None, retries=None):
-    """Takes a screenshot of the device.
-
-    Args:
-      host_path: A string containing the path on the host to save the
-                 screenshot to. If None, a file name in the current
-                 directory will be generated.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The name of the file on the host to which the screenshot was saved.
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-    """
-    if not host_path:
-      host_path = os.path.abspath('screenshot-%s-%s.png' % (
-          self.serial, _GetTimeStamp()))
-    with device_temp_file.DeviceTempFile(self.adb, suffix='.png') as device_tmp:
-      self.RunShellCommand(['/system/bin/screencap', '-p', device_tmp.name],
-                           check_return=True)
-      self.PullFile(device_tmp.name, host_path)
-    return host_path
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def DismissCrashDialogIfNeeded(self, timeout=None, retries=None):
-    """Dismiss the error/ANR dialog if present.
-
-    Returns: Name of the crashed package if a dialog is focused,
-             None otherwise.
-    """
-    def _FindFocusedWindow():
-      match = None
-      # TODO(jbudorick): Try to grep the output on the device instead of using
-      # large_output if/when DeviceUtils exposes a public interface for piped
-      # shell command handling.
-      for line in self.RunShellCommand(['dumpsys', 'window', 'windows'],
-                                       check_return=True, large_output=True):
-        match = re.match(_CURRENT_FOCUS_CRASH_RE, line)
-        if match:
-          break
-      return match
-
-    match = _FindFocusedWindow()
-    if not match:
-      return None
-    package = match.group(2)
-    logger.warning('Trying to dismiss %s dialog for %s', *match.groups())
-    self.SendKeyEvent(keyevent.KEYCODE_DPAD_RIGHT)
-    self.SendKeyEvent(keyevent.KEYCODE_DPAD_RIGHT)
-    self.SendKeyEvent(keyevent.KEYCODE_ENTER)
-    match = _FindFocusedWindow()
-    if match:
-      logger.error('Still showing a %s dialog for %s', *match.groups())
-    return package
-
-  def GetLogcatMonitor(self, *args, **kwargs):
-    """Returns a new LogcatMonitor associated with this device.
-
-    Parameters passed to this function are passed directly to
-    |logcat_monitor.LogcatMonitor| and are documented there.
-    """
-    return logcat_monitor.LogcatMonitor(self.adb, *args, **kwargs)
-
-  def GetClientCache(self, client_name):
-    """Returns client cache."""
-    if client_name not in self._client_caches:
-      self._client_caches[client_name] = {}
-    return self._client_caches[client_name]
-
-  def _ClearCache(self):
-    """Clears all caches."""
-    for client in self._client_caches:
-      self._client_caches[client].clear()
-    self._cache = {
-        # Map of packageId -> list of on-device .apk paths
-        'package_apk_paths': {},
-        # Set of packageId that were loaded from LoadCacheData and not yet
-        # verified.
-        'package_apk_paths_to_verify': set(),
-        # Map of packageId -> set of on-device .apk checksums
-        'package_apk_checksums': {},
-        # Map of property_name -> value
-        'getprop': {},
-        # Map of device_path -> [ignore_other_files, map of path->checksum]
-        'device_path_checksums': {},
-        # Location of sdcard ($EXTERNAL_STORAGE).
-        'external_storage': None,
-        # Token used to detect when LoadCacheData is stale.
-        'token': None,
-        'prev_token': None,
-    }
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def LoadCacheData(self, data, timeout=None, retries=None):
-    """Initializes the cache from data created using DumpCacheData.
-
-    The cache is used only if its token matches the one found on the device.
-    This prevents a stale cache from being used (which can happen when sharing
-    devices).
-
-    Args:
-      data: A previously serialized cache (string).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      Whether the cache was loaded.
-    """
-    obj = json.loads(data)
-    self._EnsureCacheInitialized()
-    given_token = obj.get('token')
-    if not given_token or self._cache['prev_token'] != given_token:
-      logger.warning('Stale cache detected. Not using it.')
-      return False
-
-    self._cache['package_apk_paths'] = obj.get('package_apk_paths', {})
-    # When using a cache across script invokations, verify that apps have
-    # not been uninstalled.
-    self._cache['package_apk_paths_to_verify'] = set(
-        self._cache['package_apk_paths'].iterkeys())
-
-    package_apk_checksums = obj.get('package_apk_checksums', {})
-    for k, v in package_apk_checksums.iteritems():
-      package_apk_checksums[k] = set(v)
-    self._cache['package_apk_checksums'] = package_apk_checksums
-    device_path_checksums = obj.get('device_path_checksums', {})
-    self._cache['device_path_checksums'] = device_path_checksums
-    return True
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def DumpCacheData(self, timeout=None, retries=None):
-    """Dumps the current cache state to a string.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A serialized cache as a string.
-    """
-    self._EnsureCacheInitialized()
-    obj = {}
-    obj['token'] = self._cache['token']
-    obj['package_apk_paths'] = self._cache['package_apk_paths']
-    obj['package_apk_checksums'] = self._cache['package_apk_checksums']
-    # JSON can't handle sets.
-    for k, v in obj['package_apk_checksums'].iteritems():
-      obj['package_apk_checksums'][k] = list(v)
-    obj['device_path_checksums'] = self._cache['device_path_checksums']
-    return json.dumps(obj, separators=(',', ':'))
-
-  @classmethod
-  def parallel(cls, devices, async=False):
-    """Creates a Parallelizer to operate over the provided list of devices.
-
-    Args:
-      devices: A list of either DeviceUtils instances or objects from
-               from which DeviceUtils instances can be constructed. If None,
-               all attached devices will be used.
-      async: If true, returns a Parallelizer that runs operations
-             asynchronously.
-
-    Returns:
-      A Parallelizer operating over |devices|.
-    """
-    devices = [d if isinstance(d, cls) else cls(d) for d in devices]
-    if async:
-      return parallelizer.Parallelizer(devices)
-    else:
-      return parallelizer.SyncParallelizer(devices)
-
-  @classmethod
-  def HealthyDevices(cls, blacklist=None, device_arg='default', retry=True,
-                     **kwargs):
-    """Returns a list of DeviceUtils instances.
-
-    Returns a list of DeviceUtils instances that are attached, not blacklisted,
-    and optionally filtered by --device flags or ANDROID_SERIAL environment
-    variable.
-
-    Args:
-      blacklist: A DeviceBlacklist instance (optional). Device serials in this
-          blacklist will never be returned, but a warning will be logged if they
-          otherwise would have been.
-      device_arg: The value of the --device flag. This can be:
-          'default' -> Same as [], but returns an empty list rather than raise a
-              NoDevicesError.
-          [] -> Returns all devices, unless $ANDROID_SERIAL is set.
-          None -> Use $ANDROID_SERIAL if set, otherwise looks for a single
-              attached device. Raises an exception if multiple devices are
-              attached.
-          'serial' -> Returns an instance for the given serial, if not
-              blacklisted.
-          ['A', 'B', ...] -> Returns instances for the subset that is not
-              blacklisted.
-      retry: If true, will attempt to restart adb server and query it again if
-          no devices are found.
-      A device serial, or a list of device serials (optional).
-
-    Returns:
-      A list of DeviceUtils instances.
-
-    Raises:
-      NoDevicesError: Raised when no non-blacklisted devices exist and
-          device_arg is passed.
-      MultipleDevicesError: Raise when multiple devices exist, but |device_arg|
-          is None.
-    """
-    allow_no_devices = False
-    if device_arg == 'default':
-      allow_no_devices = True
-      device_arg = ()
-
-    select_multiple = True
-    if not (isinstance(device_arg, tuple) or isinstance(device_arg, list)):
-      select_multiple = False
-      if device_arg:
-        device_arg = (device_arg,)
-
-    blacklisted_devices = blacklist.Read() if blacklist else []
-
-    # adb looks for ANDROID_SERIAL, so support it as well.
-    android_serial = os.environ.get('ANDROID_SERIAL')
-    if not device_arg and android_serial:
-      device_arg = (android_serial,)
-
-    def blacklisted(serial):
-      if serial in blacklisted_devices:
-        logger.warning('Device %s is blacklisted.', serial)
-        return True
-      return False
-
-    def _get_devices():
-      if device_arg:
-        devices = [cls(x, **kwargs) for x in device_arg if not blacklisted(x)]
-      else:
-        devices = []
-        for adb in adb_wrapper.AdbWrapper.Devices():
-          if not blacklisted(adb.GetDeviceSerial()):
-            devices.append(cls(_CreateAdbWrapper(adb), **kwargs))
-
-      if len(devices) == 0 and not allow_no_devices:
-        raise device_errors.NoDevicesError()
-      if len(devices) > 1 and not select_multiple:
-        raise device_errors.MultipleDevicesError(devices)
-      return sorted(devices)
-
-    try:
-      return _get_devices()
-    except device_errors.NoDevicesError:
-      if not retry:
-        raise
-      logger.warning(
-          'No devices found. Will try again after restarting adb server.')
-      RestartServer()
-      return _get_devices()
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def RestartAdbd(self, timeout=None, retries=None):
-    logger.info('Restarting adbd on device.')
-    with device_temp_file.DeviceTempFile(self.adb, suffix='.sh') as script:
-      self.WriteFile(script.name, _RESTART_ADBD_SCRIPT)
-      self.RunShellCommand(
-          ['source', script.name], check_return=True, as_root=True)
-      self.adb.WaitForDevice()
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def GrantPermissions(self, package, permissions, timeout=None, retries=None):
-    # Permissions only need to be set on M and above because of the changes to
-    # the permission model.
-    if not permissions or self.build_version_sdk < version_codes.MARSHMALLOW:
-      return
-
-    permissions = set(
-        p for p in permissions if not _PERMISSIONS_BLACKLIST_RE.match(p))
-
-    if ('android.permission.WRITE_EXTERNAL_STORAGE' in permissions
-        and 'android.permission.READ_EXTERNAL_STORAGE' not in permissions):
-      permissions.add('android.permission.READ_EXTERNAL_STORAGE')
-
-    script = ';'.join([
-      'p={package}',
-      'for q in {permissions}',
-      'do pm grant "$p" "$q"',
-      'echo "{sep}$q{sep}$?{sep}"',
-      'done'
-    ]).format(
-        package=cmd_helper.SingleQuote(package),
-        permissions=' '.join(
-            cmd_helper.SingleQuote(p) for p in sorted(permissions)),
-        sep=_SHELL_OUTPUT_SEPARATOR)
-
-    logger.info('Setting permissions for %s.', package)
-    res = self.RunShellCommand(
-        script, shell=True, raw_output=True, large_output=True,
-        check_return=True)
-    res = res.split(_SHELL_OUTPUT_SEPARATOR)
-    failures = [
-      (permission, output.strip())
-      for permission, status, output in zip(res[1::3], res[2::3], res[0::3])
-      if int(status)]
-
-    if failures:
-      logger.warning(
-          'Failed to grant some permissions. Blacklist may need to be updated?')
-      for permission, output in failures:
-        # Try to grab the relevant error message from the output.
-        m = _PERMISSIONS_EXCEPTION_RE.search(output)
-        if m:
-          error_msg = m.group(0)
-        elif len(output) > 200:
-          error_msg = repr(output[:200]) + ' (truncated)'
-        else:
-          error_msg = repr(output)
-        logger.warning('- %s: %s', permission, error_msg)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def IsScreenOn(self, timeout=None, retries=None):
-    """Determines if screen is on.
-
-    Dumpsys input_method exposes screen on/off state. Below is an explination of
-    the states.
-
-    Pre-L:
-      On: mScreenOn=true
-      Off: mScreenOn=false
-    L+:
-      On: mInteractive=true
-      Off: mInteractive=false
-
-    Returns:
-      True if screen is on, false if it is off.
-
-    Raises:
-      device_errors.CommandFailedError: If screen state cannot be found.
-    """
-    if self.build_version_sdk < version_codes.LOLLIPOP:
-      input_check = 'mScreenOn'
-      check_value = 'mScreenOn=true'
-    else:
-      input_check = 'mInteractive'
-      check_value = 'mInteractive=true'
-    dumpsys_out = self._RunPipedShellCommand(
-        'dumpsys input_method | grep %s' % input_check)
-    if not dumpsys_out:
-      raise device_errors.CommandFailedError(
-          'Unable to detect screen state', str(self))
-    return check_value in dumpsys_out[0]
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SetScreen(self, on, timeout=None, retries=None):
-    """Turns screen on and off.
-
-    Args:
-      on: bool to decide state to switch to. True = on False = off.
-    """
-    def screen_test():
-      return self.IsScreenOn() == on
-
-    if screen_test():
-      logger.info('Screen already in expected state.')
-      return
-    self.SendKeyEvent(keyevent.KEYCODE_POWER)
-    timeout_retry.WaitFor(screen_test, wait_period=1)
diff --git a/systrace/catapult/devil/devil/android/device_utils_devicetest.py b/systrace/catapult/devil/devil/android/device_utils_devicetest.py
deleted file mode 100755
index 173094b..0000000
--- a/systrace/catapult/devil/devil/android/device_utils_devicetest.py
+++ /dev/null
@@ -1,268 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for the contents of device_utils.py (mostly DeviceUtils).
-The test will invoke real devices
-"""
-
-import os
-import posixpath
-import sys
-import tempfile
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', )))
-
-from devil.android import device_test_case
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-from devil.utils import cmd_helper
-
-_OLD_CONTENTS = "foo"
-_NEW_CONTENTS = "bar"
-_DEVICE_DIR = "/data/local/tmp/device_utils_test"
-_SUB_DIR = "sub"
-_SUB_DIR1 = "sub1"
-_SUB_DIR2 = "sub2"
-
-
-class DeviceUtilsPushDeleteFilesTest(device_test_case.DeviceTestCase):
-
-  def setUp(self):
-    super(DeviceUtilsPushDeleteFilesTest, self).setUp()
-    self.adb = adb_wrapper.AdbWrapper(self.serial)
-    self.adb.WaitForDevice()
-    self.device = device_utils.DeviceUtils(
-        self.adb, default_timeout=10, default_retries=0)
-
-  @staticmethod
-  def _MakeTempFile(contents):
-    """Make a temporary file with the given contents.
-
-    Args:
-      contents: string to write to the temporary file.
-
-    Returns:
-      the tuple contains the absolute path to the file and the file name
-    """
-    fi, path = tempfile.mkstemp(text=True)
-    with os.fdopen(fi, 'w') as f:
-      f.write(contents)
-    file_name = os.path.basename(path)
-    return (path, file_name)
-
-  @staticmethod
-  def _MakeTempFileGivenDir(directory, contents):
-    """Make a temporary file under the given directory
-    with the given contents
-
-    Args:
-      directory: the temp directory to create the file
-      contents: string to write to the temp file
-
-    Returns:
-      the list contains the absolute path to the file and the file name
-    """
-    fi, path = tempfile.mkstemp(dir=directory, text=True)
-    with os.fdopen(fi, 'w') as f:
-      f.write(contents)
-    file_name = os.path.basename(path)
-    return (path, file_name)
-
-  @staticmethod
-  def _ChangeTempFile(path, contents):
-    with os.open(path, 'w') as f:
-      f.write(contents)
-
-  @staticmethod
-  def _DeleteTempFile(path):
-    os.remove(path)
-
-  def testPushChangedFiles_noFileChange(self):
-    (host_file_path, file_name) = self._MakeTempFile(_OLD_CONTENTS)
-    device_file_path = "%s/%s" % (_DEVICE_DIR, file_name)
-    self.adb.Push(host_file_path, device_file_path)
-    self.device.PushChangedFiles([(host_file_path, device_file_path)])
-    result = self.device.RunShellCommand(
-        ['cat', device_file_path], check_return=True, single_line=True)
-    self.assertEqual(_OLD_CONTENTS, result)
-
-    cmd_helper.RunCmd(['rm', host_file_path])
-    self.device.RemovePath(_DEVICE_DIR, recursive=True, force=True)
-
-  def testPushChangedFiles_singleFileChange(self):
-    (host_file_path, file_name) = self._MakeTempFile(_OLD_CONTENTS)
-    device_file_path = "%s/%s" % (_DEVICE_DIR, file_name)
-    self.adb.Push(host_file_path, device_file_path)
-
-    with open(host_file_path, 'w') as f:
-      f.write(_NEW_CONTENTS)
-    self.device.PushChangedFiles([(host_file_path, device_file_path)])
-    result = self.device.RunShellCommand(
-        ['cat', device_file_path], check_return=True, single_line=True)
-    self.assertEqual(_NEW_CONTENTS, result)
-
-    cmd_helper.RunCmd(['rm', host_file_path])
-    self.device.RemovePath(_DEVICE_DIR, recursive=True, force=True)
-
-  def testDeleteFiles(self):
-    host_tmp_dir = tempfile.mkdtemp()
-    (host_file_path, file_name) = self._MakeTempFileGivenDir(
-        host_tmp_dir, _OLD_CONTENTS)
-
-    device_file_path = "%s/%s" % (_DEVICE_DIR, file_name)
-    self.adb.Push(host_file_path, device_file_path)
-
-    cmd_helper.RunCmd(['rm', host_file_path])
-    self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)],
-                                 delete_device_stale=True)
-    filenames = self.device.ListDirectory(_DEVICE_DIR)
-    self.assertEqual([], filenames)
-
-    cmd_helper.RunCmd(['rm', '-rf', host_tmp_dir])
-    self.device.RemovePath(_DEVICE_DIR, recursive=True, force=True)
-
-  def testPushAndDeleteFiles_noSubDir(self):
-    host_tmp_dir = tempfile.mkdtemp()
-    (host_file_path1, file_name1) = self._MakeTempFileGivenDir(
-        host_tmp_dir, _OLD_CONTENTS)
-    (host_file_path2, file_name2) = self._MakeTempFileGivenDir(
-        host_tmp_dir, _OLD_CONTENTS)
-
-    device_file_path1 = "%s/%s" % (_DEVICE_DIR, file_name1)
-    device_file_path2 = "%s/%s" % (_DEVICE_DIR, file_name2)
-    self.adb.Push(host_file_path1, device_file_path1)
-    self.adb.Push(host_file_path2, device_file_path2)
-
-    with open(host_file_path1, 'w') as f:
-      f.write(_NEW_CONTENTS)
-    cmd_helper.RunCmd(['rm', host_file_path2])
-
-    self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)],
-                                   delete_device_stale=True)
-    result = self.device.RunShellCommand(
-        ['cat', device_file_path1], check_return=True, single_line=True)
-    self.assertEqual(_NEW_CONTENTS, result)
-
-    filenames = self.device.ListDirectory(_DEVICE_DIR)
-    self.assertEqual([file_name1], filenames)
-
-    cmd_helper.RunCmd(['rm', '-rf', host_tmp_dir])
-    self.device.RemovePath(_DEVICE_DIR, recursive=True, force=True)
-
-  def testPushAndDeleteFiles_SubDir(self):
-    host_tmp_dir = tempfile.mkdtemp()
-    host_sub_dir1 = "%s/%s" % (host_tmp_dir, _SUB_DIR1)
-    host_sub_dir2 = "%s/%s/%s" % (host_tmp_dir, _SUB_DIR, _SUB_DIR2)
-    cmd_helper.RunCmd(['mkdir', '-p', host_sub_dir1])
-    cmd_helper.RunCmd(['mkdir', '-p', host_sub_dir2])
-
-    (host_file_path1, file_name1) = self._MakeTempFileGivenDir(
-        host_tmp_dir, _OLD_CONTENTS)
-    (host_file_path2, file_name2) = self._MakeTempFileGivenDir(
-        host_tmp_dir, _OLD_CONTENTS)
-    (host_file_path3, file_name3) = self._MakeTempFileGivenDir(
-        host_sub_dir1, _OLD_CONTENTS)
-    (host_file_path4, file_name4) = self._MakeTempFileGivenDir(
-        host_sub_dir2, _OLD_CONTENTS)
-
-    device_file_path1 = "%s/%s" % (_DEVICE_DIR, file_name1)
-    device_file_path2 = "%s/%s" % (_DEVICE_DIR, file_name2)
-    device_file_path3 = "%s/%s/%s" % (_DEVICE_DIR, _SUB_DIR1, file_name3)
-    device_file_path4 = "%s/%s/%s/%s" % (_DEVICE_DIR, _SUB_DIR,
-                                         _SUB_DIR2, file_name4)
-
-    self.adb.Push(host_file_path1, device_file_path1)
-    self.adb.Push(host_file_path2, device_file_path2)
-    self.adb.Push(host_file_path3, device_file_path3)
-    self.adb.Push(host_file_path4, device_file_path4)
-
-    with open(host_file_path1, 'w') as f:
-      f.write(_NEW_CONTENTS)
-    cmd_helper.RunCmd(['rm', host_file_path2])
-    cmd_helper.RunCmd(['rm', host_file_path4])
-
-    self.device.PushChangedFiles([(host_tmp_dir, _DEVICE_DIR)],
-                                   delete_device_stale=True)
-    result = self.device.RunShellCommand(
-        ['cat', device_file_path1], check_return=True, single_line=True)
-    self.assertEqual(_NEW_CONTENTS, result)
-
-    filenames = self.device.ListDirectory(_DEVICE_DIR)
-    self.assertIn(file_name1, filenames)
-    self.assertIn(_SUB_DIR1, filenames)
-    self.assertIn(_SUB_DIR, filenames)
-    self.assertEqual(3, len(filenames))
-
-    result = self.device.RunShellCommand(
-        ['cat', device_file_path3], check_return=True, single_line=True)
-    self.assertEqual(_OLD_CONTENTS, result)
-
-    filenames = self.device.ListDirectory(
-        posixpath.join(_DEVICE_DIR, _SUB_DIR, _SUB_DIR2))
-    self.assertEqual([], filenames)
-
-    cmd_helper.RunCmd(['rm', '-rf', host_tmp_dir])
-    self.device.RemovePath(_DEVICE_DIR, recursive=True, force=True)
-
-  def testRestartAdbd(self):
-    def get_adbd_pid():
-      try:
-        return next(p.pid for p in self.device.ListProcesses('adbd'))
-      except StopIteration:
-        self.fail('Unable to find adbd')
-
-    old_adbd_pid = get_adbd_pid()
-    self.device.RestartAdbd()
-    new_adbd_pid = get_adbd_pid()
-    self.assertNotEqual(old_adbd_pid, new_adbd_pid)
-
-  def testEnableRoot(self):
-    self.device.SetProp('service.adb.root', '0')
-    self.device.RestartAdbd()
-    self.assertFalse(self.device.HasRoot())
-    self.assertIn(self.device.GetProp('service.adb.root'), ('', '0'))
-    self.device.EnableRoot()
-    self.assertTrue(self.device.HasRoot())
-    self.assertEquals(self.device.GetProp('service.adb.root'), '1')
-
-
-class PsOutputCompatibilityTests(device_test_case.DeviceTestCase):
-
-  def setUp(self):
-    super(PsOutputCompatibilityTests, self).setUp()
-    self.adb = adb_wrapper.AdbWrapper(self.serial)
-    self.adb.WaitForDevice()
-    self.device = device_utils.DeviceUtils(self.adb, default_retries=0)
-
-  def testPsOutoutCompatibility(self):
-    # pylint: disable=protected-access
-    lines = self.device._GetPsOutput(None)
-
-    # Check column names at each index match expected values.
-    header = lines[0].split()
-    for column, idx in device_utils._PS_COLUMNS.iteritems():
-      column = column.upper()
-      self.assertEqual(
-          header[idx], column,
-          'Expected column %s at index %d but found %s\nsource: %r' % (
-              column, idx, header[idx], lines[0]))
-
-    # Check pid and ppid are numeric values.
-    for line in lines[1:]:
-      row = line.split()
-      row = {k: row[i] for k, i in device_utils._PS_COLUMNS.iteritems()}
-      for key in ('pid', 'ppid'):
-        self.assertTrue(
-            row[key].isdigit(),
-            'Expected numeric %s value but found %r\nsource: %r' % (
-                key, row[key], line))
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/device_utils_test.py b/systrace/catapult/devil/devil/android/device_utils_test.py
deleted file mode 100755
index b5660ac..0000000
--- a/systrace/catapult/devil/devil/android/device_utils_test.py
+++ /dev/null
@@ -1,2972 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for the contents of device_utils.py (mostly DeviceUtils).
-"""
-
-# pylint: disable=protected-access
-# pylint: disable=unused-argument
-
-import contextlib
-import json
-import logging
-import os
-import stat
-import unittest
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android import device_signal
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-from devil.android.sdk import intent
-from devil.android.sdk import keyevent
-from devil.android.sdk import version_codes
-from devil.utils import cmd_helper
-from devil.utils import mock_calls
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-def Process(name, pid, ppid='1'):
-  return device_utils.ProcessInfo(name=name, pid=pid, ppid=ppid)
-
-
-def Processes(*args):
-  return [Process(*arg) for arg in args]
-
-
-class AnyStringWith(object):
-  def __init__(self, value):
-    self._value = value
-
-  def __eq__(self, other):
-    return self._value in other
-
-  def __repr__(self):
-    return '<AnyStringWith: %s>' % self._value
-
-
-class _MockApkHelper(object):
-
-  def __init__(self, path, package_name, perms=None):
-    self.path = path
-    self.package_name = package_name
-    self.perms = perms
-
-  def GetPackageName(self):
-    return self.package_name
-
-  def GetPermissions(self):
-    return self.perms
-
-
-class _MockMultipleDevicesError(Exception):
-  pass
-
-
-class DeviceUtilsInitTest(unittest.TestCase):
-
-  def testInitWithStr(self):
-    serial_as_str = str('0123456789abcdef')
-    d = device_utils.DeviceUtils('0123456789abcdef')
-    self.assertEqual(serial_as_str, d.adb.GetDeviceSerial())
-
-  def testInitWithUnicode(self):
-    serial_as_unicode = unicode('fedcba9876543210')
-    d = device_utils.DeviceUtils(serial_as_unicode)
-    self.assertEqual(serial_as_unicode, d.adb.GetDeviceSerial())
-
-  def testInitWithAdbWrapper(self):
-    serial = '123456789abcdef0'
-    a = adb_wrapper.AdbWrapper(serial)
-    d = device_utils.DeviceUtils(a)
-    self.assertEqual(serial, d.adb.GetDeviceSerial())
-
-  def testInitWithMissing_fails(self):
-    with self.assertRaises(ValueError):
-      device_utils.DeviceUtils(None)
-    with self.assertRaises(ValueError):
-      device_utils.DeviceUtils('')
-
-
-class DeviceUtilsGetAVDsTest(mock_calls.TestCase):
-
-  def testGetAVDs(self):
-    mocked_attrs = {
-      'android_sdk': '/my/sdk/path'
-    }
-    with mock.patch('devil.devil_env._Environment.LocalPath',
-                    mock.Mock(side_effect=lambda a: mocked_attrs[a])):
-      with self.assertCall(
-          mock.call.devil.utils.cmd_helper.GetCmdOutput(
-              [mock.ANY, 'list', 'avd']),
-          'Available Android Virtual Devices:\n'
-          '    Name: my_android5.0\n'
-          '    Path: /some/path/to/.android/avd/my_android5.0.avd\n'
-          '  Target: Android 5.0 (API level 21)\n'
-          ' Tag/ABI: default/x86\n'
-          '    Skin: WVGA800\n'):
-        self.assertEquals(['my_android5.0'], device_utils.GetAVDs())
-
-
-class DeviceUtilsRestartServerTest(mock_calls.TestCase):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testRestartServer_succeeds(self):
-    with self.assertCalls(
-        mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.KillServer(),
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutput(
-            ['pgrep', 'adb']),
-         (1, '')),
-        mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.StartServer(),
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutput(
-            ['pgrep', 'adb']),
-         (1, '')),
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutput(
-            ['pgrep', 'adb']),
-         (0, '123\n'))):
-      device_utils.RestartServer()
-
-
-class MockTempFile(object):
-
-  def __init__(self, name='/tmp/some/file'):
-    self.file = mock.MagicMock(spec=file)
-    self.file.name = name
-    self.file.name_quoted = cmd_helper.SingleQuote(name)
-
-  def __enter__(self):
-    return self.file
-
-  def __exit__(self, exc_type, exc_val, exc_tb):
-    pass
-
-  @property
-  def name(self):
-    return self.file.name
-
-
-class MockLogger(mock.Mock):
-  def __init__(self, *args, **kwargs):
-    super(MockLogger, self).__init__(*args, **kwargs)
-    # TODO(perezju): Consider adding traps for error, info, etc.
-    self.warnings = []
-
-  def warning(self, message, *args):
-    self.warnings.append(message % args)
-
-
-def PatchLogger():
-  return mock.patch(
-      'devil.android.device_utils.logger', new_callable=MockLogger)
-
-
-class _PatchedFunction(object):
-
-  def __init__(self, patched=None, mocked=None):
-    self.patched = patched
-    self.mocked = mocked
-
-
-def _AdbWrapperMock(test_serial, is_ready=True):
-  adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
-  adb.__str__ = mock.Mock(return_value=test_serial)
-  adb.GetDeviceSerial.return_value = test_serial
-  adb.is_ready = is_ready
-  return adb
-
-
-class DeviceUtilsTest(mock_calls.TestCase):
-
-  def setUp(self):
-    self.adb = _AdbWrapperMock('0123456789abcdef')
-    self.device = device_utils.DeviceUtils(
-        self.adb, default_timeout=10, default_retries=0)
-    self.watchMethodCalls(self.call.adb, ignore=['GetDeviceSerial'])
-
-  def AdbCommandError(self, args=None, output=None, status=None, msg=None):
-    if args is None:
-      args = ['[unspecified]']
-    return mock.Mock(side_effect=device_errors.AdbCommandFailedError(
-        args, output, status, msg, str(self.device)))
-
-  def CommandError(self, msg=None):
-    if msg is None:
-      msg = 'Command failed'
-    return mock.Mock(side_effect=device_errors.CommandFailedError(
-        msg, str(self.device)))
-
-  def ShellError(self, output=None, status=1):
-    def action(cmd, *args, **kwargs):
-      raise device_errors.AdbShellCommandFailedError(
-          cmd, output, status, str(self.device))
-    if output is None:
-      output = 'Permission denied\n'
-    return action
-
-  def TimeoutError(self, msg=None):
-    if msg is None:
-      msg = 'Operation timed out'
-    return mock.Mock(side_effect=device_errors.CommandTimeoutError(
-        msg, str(self.device)))
-
-  def EnsureCacheInitialized(self, props=None, sdcard='/sdcard'):
-    props = props or []
-    ret = [sdcard, 'TOKEN'] + props
-    return (self.call.device.RunShellCommand(
-        AnyStringWith('getprop'),
-        shell=True, check_return=True, large_output=True), ret)
-
-
-class DeviceUtilsEqTest(DeviceUtilsTest):
-
-  def testEq_equal_deviceUtils(self):
-    other = device_utils.DeviceUtils(_AdbWrapperMock('0123456789abcdef'))
-    self.assertTrue(self.device == other)
-    self.assertTrue(other == self.device)
-
-  def testEq_equal_adbWrapper(self):
-    other = adb_wrapper.AdbWrapper('0123456789abcdef')
-    self.assertTrue(self.device == other)
-    self.assertTrue(other == self.device)
-
-  def testEq_equal_string(self):
-    other = '0123456789abcdef'
-    self.assertTrue(self.device == other)
-    self.assertTrue(other == self.device)
-
-  def testEq_devicesNotEqual(self):
-    other = device_utils.DeviceUtils(_AdbWrapperMock('0123456789abcdee'))
-    self.assertFalse(self.device == other)
-    self.assertFalse(other == self.device)
-
-  def testEq_identity(self):
-    self.assertTrue(self.device == self.device)
-
-  def testEq_serialInList(self):
-    devices = [self.device]
-    self.assertTrue('0123456789abcdef' in devices)
-
-
-class DeviceUtilsLtTest(DeviceUtilsTest):
-
-  def testLt_lessThan(self):
-    other = device_utils.DeviceUtils(_AdbWrapperMock('ffffffffffffffff'))
-    self.assertTrue(self.device < other)
-    self.assertTrue(other > self.device)
-
-  def testLt_greaterThan_lhs(self):
-    other = device_utils.DeviceUtils(_AdbWrapperMock('0000000000000000'))
-    self.assertFalse(self.device < other)
-    self.assertFalse(other > self.device)
-
-  def testLt_equal(self):
-    other = device_utils.DeviceUtils(_AdbWrapperMock('0123456789abcdef'))
-    self.assertFalse(self.device < other)
-    self.assertFalse(other > self.device)
-
-  def testLt_sorted(self):
-    devices = [
-        device_utils.DeviceUtils(_AdbWrapperMock('ffffffffffffffff')),
-        device_utils.DeviceUtils(_AdbWrapperMock('0000000000000000')),
-    ]
-    sorted_devices = sorted(devices)
-    self.assertEquals('0000000000000000',
-                      sorted_devices[0].adb.GetDeviceSerial())
-    self.assertEquals('ffffffffffffffff',
-                      sorted_devices[1].adb.GetDeviceSerial())
-
-
-class DeviceUtilsStrTest(DeviceUtilsTest):
-
-  def testStr_returnsSerial(self):
-    with self.assertCalls(
-        (self.call.adb.GetDeviceSerial(), '0123456789abcdef')):
-      self.assertEqual('0123456789abcdef', str(self.device))
-
-
-class DeviceUtilsIsOnlineTest(DeviceUtilsTest):
-
-  def testIsOnline_true(self):
-    with self.assertCall(self.call.adb.GetState(), 'device'):
-      self.assertTrue(self.device.IsOnline())
-
-  def testIsOnline_false(self):
-    with self.assertCall(self.call.adb.GetState(), 'offline'):
-      self.assertFalse(self.device.IsOnline())
-
-  def testIsOnline_error(self):
-    with self.assertCall(self.call.adb.GetState(), self.CommandError()):
-      self.assertFalse(self.device.IsOnline())
-
-
-class DeviceUtilsHasRootTest(DeviceUtilsTest):
-
-  def testHasRoot_true(self):
-    with self.patch_call(self.call.device.product_name,
-                          return_value='notasailfish'), (
-        self.assertCall(self.call.adb.Shell('ls /root'), 'foo\n')):
-      self.assertTrue(self.device.HasRoot())
-
-  def testhasRootSpecial_true(self):
-    with self.patch_call(self.call.device.product_name,
-                         return_value='sailfish'), (
-        self.assertCall(self.call.adb.Shell('getprop service.adb.root'),
-                        '1\n')):
-      self.assertTrue(self.device.HasRoot())
-
-  def testHasRoot_false(self):
-    with self.patch_call(self.call.device.product_name,
-                         return_value='notasailfish'), (
-        self.assertCall(self.call.adb.Shell('ls /root'),
-                        self.ShellError())):
-      self.assertFalse(self.device.HasRoot())
-
-  def testHasRootSpecial_false(self):
-    with self.patch_call(self.call.device.product_name,
-                         return_value='sailfish'), (
-        self.assertCall(self.call.adb.Shell('getprop service.adb.root'),
-                        '\n')):
-      self.assertFalse(self.device.HasRoot())
-
-
-class DeviceUtilsEnableRootTest(DeviceUtilsTest):
-
-  def testEnableRoot_succeeds(self):
-    with self.assertCalls(
-        self.call.adb.Root(),
-        self.call.adb.WaitForDevice(),
-        (self.call.device.GetProp('service.adb.root', cache=False), '1')):
-      self.device.EnableRoot()
-
-  def testEnableRoot_userBuild(self):
-    with self.assertCalls(
-        (self.call.adb.Root(), self.AdbCommandError()),
-        (self.call.device.IsUserBuild(), True)):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.EnableRoot()
-
-  def testEnableRoot_rootFails(self):
-    with self.assertCalls(
-        (self.call.adb.Root(), self.AdbCommandError()),
-        (self.call.device.IsUserBuild(), False)):
-      with self.assertRaises(device_errors.AdbCommandFailedError):
-        self.device.EnableRoot()
-
-
-class DeviceUtilsIsUserBuildTest(DeviceUtilsTest):
-
-  def testIsUserBuild_yes(self):
-    with self.assertCall(
-        self.call.device.GetProp('ro.build.type', cache=True), 'user'):
-      self.assertTrue(self.device.IsUserBuild())
-
-  def testIsUserBuild_no(self):
-    with self.assertCall(
-        self.call.device.GetProp('ro.build.type', cache=True), 'userdebug'):
-      self.assertFalse(self.device.IsUserBuild())
-
-
-class DeviceUtilsGetExternalStoragePathTest(DeviceUtilsTest):
-
-  def testGetExternalStoragePath_succeeds(self):
-    with self.assertCalls(
-        self.EnsureCacheInitialized(sdcard='/fake/storage/path')):
-      self.assertEquals('/fake/storage/path',
-                        self.device.GetExternalStoragePath())
-
-  def testGetExternalStoragePath_fails(self):
-    with self.assertCalls(
-        self.EnsureCacheInitialized(sdcard='')):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.GetExternalStoragePath()
-
-
-class DeviceUtilsGetApplicationPathsInternalTest(DeviceUtilsTest):
-
-  def testGetApplicationPathsInternal_exists(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '19'),
-        (self.call.device.RunShellCommand(
-            ['pm', 'path', 'android'], check_return=True),
-         ['package:/path/to/android.apk'])):
-      self.assertEquals(['/path/to/android.apk'],
-                        self.device._GetApplicationPathsInternal('android'))
-
-  def testGetApplicationPathsInternal_notExists(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '19'),
-        (self.call.device.RunShellCommand(
-            ['pm', 'path', 'not.installed.app'], check_return=True),
-         '')):
-      self.assertEquals([],
-          self.device._GetApplicationPathsInternal('not.installed.app'))
-
-  def testGetApplicationPathsInternal_garbageOutputRaises(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '19'),
-        (self.call.device.RunShellCommand(
-            ['pm', 'path', 'android'], check_return=True),
-         ['garbage first line'])):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device._GetApplicationPathsInternal('android')
-
-  def testGetApplicationPathsInternal_outputWarningsIgnored(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '19'),
-        (self.call.device.RunShellCommand(
-            ['pm', 'path', 'not.installed.app'], check_return=True),
-         ['WARNING: some warning message from pm'])):
-      self.assertEquals([],
-          self.device._GetApplicationPathsInternal('not.installed.app'))
-
-  def testGetApplicationPathsInternal_fails(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '19'),
-        (self.call.device.RunShellCommand(
-            ['pm', 'path', 'android'], check_return=True),
-         self.CommandError('ERROR. Is package manager running?\n'))):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device._GetApplicationPathsInternal('android')
-
-
-class DeviceUtils_GetApplicationVersionTest(DeviceUtilsTest):
-
-  def test_GetApplicationVersion_exists(self):
-    with self.assertCalls(
-        (self.call.adb.Shell('dumpsys package com.android.chrome'),
-         'Packages:\n'
-         '  Package [com.android.chrome] (3901ecfb):\n'
-         '    userId=1234 gids=[123, 456, 789]\n'
-         '    pkg=Package{1fecf634 com.android.chrome}\n'
-         '    versionName=45.0.1234.7\n')):
-      self.assertEquals('45.0.1234.7',
-                        self.device.GetApplicationVersion('com.android.chrome'))
-
-  def test_GetApplicationVersion_notExists(self):
-    with self.assertCalls(
-        (self.call.adb.Shell('dumpsys package com.android.chrome'), '')):
-      self.assertEquals(None,
-                        self.device.GetApplicationVersion('com.android.chrome'))
-
-  def test_GetApplicationVersion_fails(self):
-    with self.assertCalls(
-        (self.call.adb.Shell('dumpsys package com.android.chrome'),
-         'Packages:\n'
-         '  Package [com.android.chrome] (3901ecfb):\n'
-         '    userId=1234 gids=[123, 456, 789]\n'
-         '    pkg=Package{1fecf634 com.android.chrome}\n')):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.GetApplicationVersion('com.android.chrome')
-
-
-class DeviceUtilsGetApplicationDataDirectoryTest(DeviceUtilsTest):
-
-  def testGetApplicationDataDirectory_exists(self):
-    with self.assertCall(
-        self.call.device._RunPipedShellCommand(
-            'pm dump foo.bar.baz | grep dataDir='),
-        ['dataDir=/data/data/foo.bar.baz']):
-      self.assertEquals(
-          '/data/data/foo.bar.baz',
-          self.device.GetApplicationDataDirectory('foo.bar.baz'))
-
-  def testGetApplicationDataDirectory_notExists(self):
-    with self.assertCall(
-        self.call.device._RunPipedShellCommand(
-            'pm dump foo.bar.baz | grep dataDir='),
-        self.ShellError()):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.GetApplicationDataDirectory('foo.bar.baz')
-
-
-@mock.patch('time.sleep', mock.Mock())
-class DeviceUtilsWaitUntilFullyBootedTest(DeviceUtilsTest):
-
-  def testWaitUntilFullyBooted_succeedsNoWifi(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), ''),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         ['package:/some/fake/path']),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False), '1')):
-      self.device.WaitUntilFullyBooted(wifi=False)
-
-  def testWaitUntilFullyBooted_succeedsWithWifi(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), ''),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         ['package:/some/fake/path']),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False), '1'),
-        # wifi_enabled
-        (self.call.adb.Shell('dumpsys wifi'),
-         'stuff\nWi-Fi is enabled\nmore stuff\n')):
-      self.device.WaitUntilFullyBooted(wifi=True)
-
-  def testWaitUntilFullyBooted_deviceNotInitiallyAvailable(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), self.AdbCommandError()),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), ''),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         ['package:/some/fake/path']),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False), '1')):
-      self.device.WaitUntilFullyBooted(wifi=False)
-
-  def testWaitUntilFullyBooted_deviceBrieflyOffline(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), ''),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         ['package:/some/fake/path']),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False),
-         self.AdbCommandError()),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False), '1')):
-      self.device.WaitUntilFullyBooted(wifi=False)
-
-  def testWaitUntilFullyBooted_sdCardReadyFails_noPath(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), self.CommandError())):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.WaitUntilFullyBooted(wifi=False)
-
-  def testWaitUntilFullyBooted_sdCardReadyFails_notExists(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), self.ShellError()),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), self.ShellError()),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'),
-         self.TimeoutError())):
-      with self.assertRaises(device_errors.CommandTimeoutError):
-        self.device.WaitUntilFullyBooted(wifi=False)
-
-  def testWaitUntilFullyBooted_devicePmFails(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), ''),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         self.CommandError()),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         self.CommandError()),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         self.TimeoutError())):
-      with self.assertRaises(device_errors.CommandTimeoutError):
-        self.device.WaitUntilFullyBooted(wifi=False)
-
-  def testWaitUntilFullyBooted_bootFails(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), ''),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         ['package:/some/fake/path']),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False), '0'),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False), '0'),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False),
-         self.TimeoutError())):
-      with self.assertRaises(device_errors.CommandTimeoutError):
-        self.device.WaitUntilFullyBooted(wifi=False)
-
-  def testWaitUntilFullyBooted_wifiFails(self):
-    with self.assertCalls(
-        self.call.adb.WaitForDevice(),
-        # sd_card_ready
-        (self.call.device.GetExternalStoragePath(), '/fake/storage/path'),
-        (self.call.adb.Shell('test -d /fake/storage/path'), ''),
-        # pm_ready
-        (self.call.device._GetApplicationPathsInternal('android',
-                                                       skip_cache=True),
-         ['package:/some/fake/path']),
-        # boot_completed
-        (self.call.device.GetProp('sys.boot_completed', cache=False), '1'),
-        # wifi_enabled
-        (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'),
-        # wifi_enabled
-        (self.call.adb.Shell('dumpsys wifi'), 'stuff\nmore stuff\n'),
-        # wifi_enabled
-        (self.call.adb.Shell('dumpsys wifi'), self.TimeoutError())):
-      with self.assertRaises(device_errors.CommandTimeoutError):
-        self.device.WaitUntilFullyBooted(wifi=True)
-
-
-@mock.patch('time.sleep', mock.Mock())
-class DeviceUtilsRebootTest(DeviceUtilsTest):
-
-  def testReboot_nonBlocking(self):
-    with self.assertCalls(
-        self.call.adb.Reboot(),
-        (self.call.device.IsOnline(), True),
-        (self.call.device.IsOnline(), False)):
-      self.device.Reboot(block=False)
-
-  def testReboot_blocking(self):
-    with self.assertCalls(
-        self.call.adb.Reboot(),
-        (self.call.device.IsOnline(), True),
-        (self.call.device.IsOnline(), False),
-        self.call.device.WaitUntilFullyBooted(wifi=False)):
-      self.device.Reboot(block=True)
-
-  def testReboot_blockUntilWifi(self):
-    with self.assertCalls(
-        self.call.adb.Reboot(),
-        (self.call.device.IsOnline(), True),
-        (self.call.device.IsOnline(), False),
-        self.call.device.WaitUntilFullyBooted(wifi=True)):
-      self.device.Reboot(block=True, wifi=True)
-
-
-class DeviceUtilsInstallTest(DeviceUtilsTest):
-
-  mock_apk = _MockApkHelper('/fake/test/app.apk', 'test.package', ['p1'])
-
-  def testInstall_noPriorInstall(self):
-    with self.patch_call(self.call.device.build_version_sdk, return_value=23):
-      with self.assertCalls(
-          (mock.call.os.path.exists('/fake/test/app.apk'), True),
-          (self.call.device._GetApplicationPathsInternal('test.package'), []),
-          self.call.adb.Install('/fake/test/app.apk', reinstall=False,
-                                allow_downgrade=False),
-          (self.call.device.GrantPermissions('test.package', ['p1']), [])):
-        self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0)
-
-  def testInstall_permissionsPreM(self):
-    with self.patch_call(self.call.device.build_version_sdk, return_value=20):
-      with self.assertCalls(
-          (mock.call.os.path.exists('/fake/test/app.apk'), True),
-          (self.call.device._GetApplicationPathsInternal('test.package'), []),
-          (self.call.adb.Install('/fake/test/app.apk', reinstall=False,
-                                 allow_downgrade=False))):
-        self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0)
-
-  def testInstall_findPermissions(self):
-    with self.patch_call(self.call.device.build_version_sdk, return_value=23):
-      with self.assertCalls(
-          (mock.call.os.path.exists('/fake/test/app.apk'), True),
-          (self.call.device._GetApplicationPathsInternal('test.package'), []),
-          (self.call.adb.Install('/fake/test/app.apk', reinstall=False,
-                                 allow_downgrade=False)),
-          (self.call.device.GrantPermissions('test.package', ['p1']), [])):
-        self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0)
-
-  def testInstall_passPermissions(self):
-    with self.assertCalls(
-        (mock.call.os.path.exists('/fake/test/app.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'), []),
-        (self.call.adb.Install('/fake/test/app.apk', reinstall=False,
-                               allow_downgrade=False)),
-        (self.call.device.GrantPermissions('test.package', ['p1', 'p2']), [])):
-      self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0,
-                          permissions=['p1', 'p2'])
-
-  def testInstall_differentPriorInstall(self):
-    with self.assertCalls(
-        (mock.call.os.path.exists('/fake/test/app.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'),
-         ['/fake/data/app/test.package.apk']),
-        (self.call.device._ComputeStaleApks('test.package',
-            ['/fake/test/app.apk']),
-         (['/fake/test/app.apk'], None)),
-        self.call.device.Uninstall('test.package'),
-        self.call.adb.Install('/fake/test/app.apk', reinstall=False,
-                              allow_downgrade=False)):
-      self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0,
-                          permissions=[])
-
-  def testInstall_differentPriorInstall_reinstall(self):
-    with self.assertCalls(
-        (mock.call.os.path.exists('/fake/test/app.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'),
-         ['/fake/data/app/test.package.apk']),
-        (self.call.device._ComputeStaleApks('test.package',
-            ['/fake/test/app.apk']),
-         (['/fake/test/app.apk'], None)),
-        self.call.adb.Install('/fake/test/app.apk', reinstall=True,
-                              allow_downgrade=False)):
-      self.device.Install(DeviceUtilsInstallTest.mock_apk,
-          reinstall=True, retries=0, permissions=[])
-
-  def testInstall_identicalPriorInstall_reinstall(self):
-    with self.assertCalls(
-        (mock.call.os.path.exists('/fake/test/app.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'),
-         ['/fake/data/app/test.package.apk']),
-        (self.call.device._ComputeStaleApks('test.package',
-            ['/fake/test/app.apk']),
-         ([], None)),
-        (self.call.device.ForceStop('test.package'))):
-      self.device.Install(DeviceUtilsInstallTest.mock_apk,
-          reinstall=True, retries=0, permissions=[])
-
-  def testInstall_missingApk(self):
-    with self.assertCalls(
-        (mock.call.os.path.exists('/fake/test/app.apk'), False)):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0)
-
-  def testInstall_fails(self):
-    with self.assertCalls(
-        (mock.call.os.path.exists('/fake/test/app.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'), []),
-        (self.call.adb.Install('/fake/test/app.apk', reinstall=False,
-                               allow_downgrade=False),
-         self.CommandError('Failure\r\n'))):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.Install(DeviceUtilsInstallTest.mock_apk, retries=0)
-
-  def testInstall_downgrade(self):
-    with self.assertCalls(
-        (mock.call.os.path.exists('/fake/test/app.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'),
-         ['/fake/data/app/test.package.apk']),
-        (self.call.device._ComputeStaleApks('test.package',
-            ['/fake/test/app.apk']),
-         (['/fake/test/app.apk'], None)),
-        self.call.adb.Install('/fake/test/app.apk', reinstall=True,
-                              allow_downgrade=True)):
-      self.device.Install(DeviceUtilsInstallTest.mock_apk,
-          reinstall=True, retries=0, permissions=[], allow_downgrade=True)
-
-
-class DeviceUtilsInstallSplitApkTest(DeviceUtilsTest):
-
-  mock_apk = _MockApkHelper('base.apk', 'test.package', ['p1'])
-
-  def testInstallSplitApk_noPriorInstall(self):
-    with self.assertCalls(
-        (self.call.device._CheckSdkLevel(21)),
-        (mock.call.devil.android.sdk.split_select.SelectSplits(
-            self.device, 'base.apk',
-            ['split1.apk', 'split2.apk', 'split3.apk'],
-            allow_cached_props=False),
-         ['split2.apk']),
-        (mock.call.os.path.exists('base.apk'), True),
-        (mock.call.os.path.exists('split2.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'), []),
-        (self.call.adb.InstallMultiple(
-            ['base.apk', 'split2.apk'], partial=None, reinstall=False,
-            allow_downgrade=False))):
-      self.device.InstallSplitApk(DeviceUtilsInstallSplitApkTest.mock_apk,
-          ['split1.apk', 'split2.apk', 'split3.apk'], permissions=[], retries=0)
-
-  def testInstallSplitApk_partialInstall(self):
-    with self.assertCalls(
-        (self.call.device._CheckSdkLevel(21)),
-        (mock.call.devil.android.sdk.split_select.SelectSplits(
-            self.device, 'base.apk',
-            ['split1.apk', 'split2.apk', 'split3.apk'],
-            allow_cached_props=False),
-         ['split2.apk']),
-        (mock.call.os.path.exists('base.apk'), True),
-        (mock.call.os.path.exists('split2.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'),
-         ['base-on-device.apk', 'split2-on-device.apk']),
-        (self.call.device._ComputeStaleApks('test.package',
-                                            ['base.apk', 'split2.apk']),
-         (['split2.apk'], None)),
-        (self.call.adb.InstallMultiple(
-            ['split2.apk'], partial='test.package', reinstall=True,
-            allow_downgrade=False))):
-      self.device.InstallSplitApk(DeviceUtilsInstallSplitApkTest.mock_apk,
-                                  ['split1.apk', 'split2.apk', 'split3.apk'],
-                                  reinstall=True, permissions=[], retries=0)
-
-  def testInstallSplitApk_downgrade(self):
-    with self.assertCalls(
-        (self.call.device._CheckSdkLevel(21)),
-        (mock.call.devil.android.sdk.split_select.SelectSplits(
-            self.device, 'base.apk',
-            ['split1.apk', 'split2.apk', 'split3.apk'],
-            allow_cached_props=False),
-         ['split2.apk']),
-        (mock.call.os.path.exists('base.apk'), True),
-        (mock.call.os.path.exists('split2.apk'), True),
-        (self.call.device._GetApplicationPathsInternal('test.package'),
-         ['base-on-device.apk', 'split2-on-device.apk']),
-        (self.call.device._ComputeStaleApks('test.package',
-                                            ['base.apk', 'split2.apk']),
-         (['split2.apk'], None)),
-        (self.call.adb.InstallMultiple(
-            ['split2.apk'], partial='test.package', reinstall=True,
-            allow_downgrade=True))):
-      self.device.InstallSplitApk(DeviceUtilsInstallSplitApkTest.mock_apk,
-                                  ['split1.apk', 'split2.apk', 'split3.apk'],
-                                  reinstall=True, permissions=[], retries=0,
-                                  allow_downgrade=True)
-
-  def testInstallSplitApk_missingSplit(self):
-    with self.assertCalls(
-        (self.call.device._CheckSdkLevel(21)),
-        (mock.call.devil.android.sdk.split_select.SelectSplits(
-            self.device, 'base.apk',
-            ['split1.apk', 'split2.apk', 'split3.apk'],
-            allow_cached_props=False),
-         ['split2.apk']),
-        (mock.call.os.path.exists('base.apk'), True),
-        (mock.call.os.path.exists('split2.apk'), False)):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.InstallSplitApk(DeviceUtilsInstallSplitApkTest.mock_apk,
-            ['split1.apk', 'split2.apk', 'split3.apk'], permissions=[],
-            retries=0)
-
-
-class DeviceUtilsUninstallTest(DeviceUtilsTest):
-
-  def testUninstall_callsThrough(self):
-    with self.assertCalls(
-        (self.call.device._GetApplicationPathsInternal('test.package'),
-         ['/path.apk']),
-        self.call.adb.Uninstall('test.package', True)):
-      self.device.Uninstall('test.package', True)
-
-  def testUninstall_noop(self):
-    with self.assertCalls(
-        (self.call.device._GetApplicationPathsInternal('test.package'), [])):
-      self.device.Uninstall('test.package', True)
-
-
-class DeviceUtilsSuTest(DeviceUtilsTest):
-
-  def testSu_preM(self):
-    with self.patch_call(
-        self.call.device.build_version_sdk,
-        return_value=version_codes.LOLLIPOP_MR1):
-      self.assertEquals('su -c foo', self.device._Su('foo'))
-
-  def testSu_mAndAbove(self):
-    with self.patch_call(
-        self.call.device.build_version_sdk,
-        return_value=version_codes.MARSHMALLOW):
-      self.assertEquals('su 0 foo', self.device._Su('foo'))
-
-
-class DeviceUtilsRunShellCommandTest(DeviceUtilsTest):
-
-  def setUp(self):
-    super(DeviceUtilsRunShellCommandTest, self).setUp()
-    self.device.NeedsSU = mock.Mock(return_value=False)
-
-  def testRunShellCommand_commandAsList(self):
-    with self.assertCall(self.call.adb.Shell('pm list packages'), ''):
-      self.device.RunShellCommand(
-          ['pm', 'list', 'packages'], check_return=True)
-
-  def testRunShellCommand_commandAsListQuoted(self):
-    with self.assertCall(self.call.adb.Shell("echo 'hello world' '$10'"), ''):
-      self.device.RunShellCommand(
-          ['echo', 'hello world', '$10'], check_return=True)
-
-  def testRunShellCommand_commandAsString(self):
-    with self.assertCall(self.call.adb.Shell('echo "$VAR"'), ''):
-      self.device.RunShellCommand(
-          'echo "$VAR"', shell=True, check_return=True)
-
-  def testNewRunShellImpl_withEnv(self):
-    with self.assertCall(
-        self.call.adb.Shell('VAR=some_string echo "$VAR"'), ''):
-      self.device.RunShellCommand(
-          'echo "$VAR"', shell=True, check_return=True,
-          env={'VAR': 'some_string'})
-
-  def testNewRunShellImpl_withEnvQuoted(self):
-    with self.assertCall(
-        self.call.adb.Shell('PATH="$PATH:/other/path" run_this'), ''):
-      self.device.RunShellCommand(
-          ['run_this'], check_return=True, env={'PATH': '$PATH:/other/path'})
-
-  def testNewRunShellImpl_withEnv_failure(self):
-    with self.assertRaises(KeyError):
-      self.device.RunShellCommand(
-          ['some_cmd'], check_return=True, env={'INVALID NAME': 'value'})
-
-  def testNewRunShellImpl_withCwd(self):
-    with self.assertCall(self.call.adb.Shell('cd /some/test/path && ls'), ''):
-      self.device.RunShellCommand(
-          ['ls'], check_return=True, cwd='/some/test/path')
-
-  def testNewRunShellImpl_withCwdQuoted(self):
-    with self.assertCall(
-        self.call.adb.Shell("cd '/some test/path with/spaces' && ls"), ''):
-      self.device.RunShellCommand(
-          ['ls'], check_return=True, cwd='/some test/path with/spaces')
-
-  def testRunShellCommand_withHugeCmd(self):
-    payload = 'hi! ' * 1024
-    expected_cmd = "echo '%s'" % payload
-    with self.assertCalls(
-      (mock.call.devil.android.device_temp_file.DeviceTempFile(
-          self.adb, suffix='.sh'), MockTempFile('/sdcard/temp-123.sh')),
-      self.call.device._WriteFileWithPush('/sdcard/temp-123.sh', expected_cmd),
-      (self.call.adb.Shell('sh /sdcard/temp-123.sh'), payload + '\n')):
-      self.assertEquals(
-          [payload],
-          self.device.RunShellCommand(['echo', payload], check_return=True))
-
-  def testRunShellCommand_withHugeCmdAndSu(self):
-    payload = 'hi! ' * 1024
-    expected_cmd_without_su = """sh -c 'echo '"'"'%s'"'"''""" % payload
-    expected_cmd = 'su -c %s' % expected_cmd_without_su
-    with self.assertCalls(
-      (self.call.device.NeedsSU(), True),
-      (self.call.device._Su(expected_cmd_without_su), expected_cmd),
-      (mock.call.devil.android.device_temp_file.DeviceTempFile(
-          self.adb, suffix='.sh'), MockTempFile('/sdcard/temp-123.sh')),
-      self.call.device._WriteFileWithPush('/sdcard/temp-123.sh', expected_cmd),
-      (self.call.adb.Shell('sh /sdcard/temp-123.sh'), payload + '\n')):
-      self.assertEquals(
-          [payload],
-          self.device.RunShellCommand(
-              ['echo', payload], check_return=True, as_root=True))
-
-  def testRunShellCommand_withSu(self):
-    expected_cmd_without_su = "sh -c 'setprop service.adb.root 0'"
-    expected_cmd = 'su -c %s' % expected_cmd_without_su
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), True),
-        (self.call.device._Su(expected_cmd_without_su), expected_cmd),
-        (self.call.adb.Shell(expected_cmd), '')):
-      self.device.RunShellCommand(
-          ['setprop', 'service.adb.root', '0'],
-          check_return=True, as_root=True)
-
-  def testRunShellCommand_withRunAs(self):
-    expected_cmd_without_run_as = "sh -c 'mkdir -p files'"
-    expected_cmd = (
-        'run-as org.devil.test_package %s' % expected_cmd_without_run_as)
-    with self.assertCall(self.call.adb.Shell(expected_cmd), ''):
-      self.device.RunShellCommand(
-          ['mkdir', '-p', 'files'],
-          check_return=True, run_as='org.devil.test_package')
-
-  def testRunShellCommand_withRunAsAndSu(self):
-    expected_cmd_with_nothing = "sh -c 'mkdir -p files'"
-    expected_cmd_with_run_as = (
-        'run-as org.devil.test_package %s' % expected_cmd_with_nothing)
-    expected_cmd_without_su = (
-        'sh -c %s' % cmd_helper.SingleQuote(expected_cmd_with_run_as))
-    expected_cmd = 'su -c %s' % expected_cmd_without_su
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), True),
-        (self.call.device._Su(expected_cmd_without_su), expected_cmd),
-        (self.call.adb.Shell(expected_cmd), '')):
-      self.device.RunShellCommand(
-          ['mkdir', '-p', 'files'],
-          check_return=True, run_as='org.devil.test_package',
-          as_root=True)
-
-  def testRunShellCommand_manyLines(self):
-    cmd = 'ls /some/path'
-    with self.assertCall(self.call.adb.Shell(cmd), 'file1\nfile2\nfile3\n'):
-      self.assertEquals(
-          ['file1', 'file2', 'file3'],
-          self.device.RunShellCommand(cmd.split(), check_return=True))
-
-  def testRunShellCommand_manyLinesRawOutput(self):
-    cmd = 'ls /some/path'
-    with self.assertCall(self.call.adb.Shell(cmd), '\rfile1\nfile2\r\nfile3\n'):
-      self.assertEquals(
-          '\rfile1\nfile2\r\nfile3\n',
-          self.device.RunShellCommand(
-              cmd.split(), check_return=True, raw_output=True))
-
-  def testRunShellCommand_singleLine_success(self):
-    cmd = 'echo $VALUE'
-    with self.assertCall(self.call.adb.Shell(cmd), 'some value\n'):
-      self.assertEquals(
-          'some value',
-          self.device.RunShellCommand(
-              cmd, shell=True, check_return=True, single_line=True))
-
-  def testRunShellCommand_singleLine_successEmptyLine(self):
-    cmd = 'echo $VALUE'
-    with self.assertCall(self.call.adb.Shell(cmd), '\n'):
-      self.assertEquals(
-          '',
-          self.device.RunShellCommand(
-              cmd, shell=True, check_return=True, single_line=True))
-
-  def testRunShellCommand_singleLine_successWithoutEndLine(self):
-    cmd = 'echo -n $VALUE'
-    with self.assertCall(self.call.adb.Shell(cmd), 'some value'):
-      self.assertEquals(
-          'some value',
-          self.device.RunShellCommand(
-              cmd, shell=True, check_return=True, single_line=True))
-
-  def testRunShellCommand_singleLine_successNoOutput(self):
-    cmd = 'echo -n $VALUE'
-    with self.assertCall(self.call.adb.Shell(cmd), ''):
-      self.assertEquals(
-          '',
-          self.device.RunShellCommand(
-              cmd, shell=True, check_return=True, single_line=True))
-
-  def testRunShellCommand_singleLine_failTooManyLines(self):
-    cmd = 'echo $VALUE'
-    with self.assertCall(self.call.adb.Shell(cmd),
-                         'some value\nanother value\n'):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.RunShellCommand(
-            cmd, shell=True, check_return=True, single_line=True)
-
-  def testRunShellCommand_checkReturn_success(self):
-    cmd = 'echo $ANDROID_DATA'
-    output = '/data\n'
-    with self.assertCall(self.call.adb.Shell(cmd), output):
-      self.assertEquals(
-          [output.rstrip()],
-          self.device.RunShellCommand(cmd, shell=True, check_return=True))
-
-  def testRunShellCommand_checkReturn_failure(self):
-    cmd = 'ls /root'
-    output = 'opendir failed, Permission denied\n'
-    with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)):
-      with self.assertRaises(device_errors.AdbCommandFailedError):
-        self.device.RunShellCommand(cmd.split(), check_return=True)
-
-  def testRunShellCommand_checkReturn_disabled(self):
-    cmd = 'ls /root'
-    output = 'opendir failed, Permission denied\n'
-    with self.assertCall(self.call.adb.Shell(cmd), self.ShellError(output)):
-      self.assertEquals(
-          [output.rstrip()],
-          self.device.RunShellCommand(cmd.split(), check_return=False))
-
-  def testRunShellCommand_largeOutput_enabled(self):
-    cmd = 'echo $VALUE'
-    temp_file = MockTempFile('/sdcard/temp-123')
-    cmd_redirect = '( %s )>%s 2>&1' % (cmd, temp_file.name)
-    with self.assertCalls(
-        (mock.call.devil.android.device_temp_file.DeviceTempFile(self.adb),
-            temp_file),
-        (self.call.adb.Shell(cmd_redirect)),
-        (self.call.device.ReadFile(temp_file.name, force_pull=True),
-         'something')):
-      self.assertEquals(
-          ['something'],
-          self.device.RunShellCommand(
-              cmd, shell=True, large_output=True, check_return=True))
-
-  def testRunShellCommand_largeOutput_disabledNoTrigger(self):
-    cmd = 'something'
-    with self.assertCall(self.call.adb.Shell(cmd), self.ShellError('')):
-      with self.assertRaises(device_errors.AdbCommandFailedError):
-        self.device.RunShellCommand([cmd], check_return=True)
-
-  def testRunShellCommand_largeOutput_disabledTrigger(self):
-    cmd = 'echo $VALUE'
-    temp_file = MockTempFile('/sdcard/temp-123')
-    cmd_redirect = '( %s )>%s 2>&1' % (cmd, temp_file.name)
-    with self.assertCalls(
-        (self.call.adb.Shell(cmd), self.ShellError('', None)),
-        (mock.call.devil.android.device_temp_file.DeviceTempFile(self.adb),
-            temp_file),
-        (self.call.adb.Shell(cmd_redirect)),
-        (self.call.device.ReadFile(mock.ANY, force_pull=True),
-         'something')):
-      self.assertEquals(
-          ['something'],
-          self.device.RunShellCommand(cmd, shell=True, check_return=True))
-
-
-class DeviceUtilsRunPipedShellCommandTest(DeviceUtilsTest):
-
-  def testRunPipedShellCommand_success(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
-            shell=True, check_return=True),
-        ['This line contains foo', 'PIPESTATUS: 0 0']):
-      self.assertEquals(['This line contains foo'],
-                        self.device._RunPipedShellCommand('ps | grep foo'))
-
-  def testRunPipedShellCommand_firstCommandFails(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
-            shell=True, check_return=True),
-        ['PIPESTATUS: 1 0']):
-      with self.assertRaises(device_errors.AdbShellCommandFailedError) as ec:
-        self.device._RunPipedShellCommand('ps | grep foo')
-      self.assertEquals([1, 0], ec.exception.status)
-
-  def testRunPipedShellCommand_secondCommandFails(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
-            shell=True, check_return=True),
-        ['PIPESTATUS: 0 1']):
-      with self.assertRaises(device_errors.AdbShellCommandFailedError) as ec:
-        self.device._RunPipedShellCommand('ps | grep foo')
-      self.assertEquals([0, 1], ec.exception.status)
-
-  def testRunPipedShellCommand_outputCutOff(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            'ps | grep foo; echo "PIPESTATUS: ${PIPESTATUS[@]}"',
-            shell=True, check_return=True),
-        ['foo.bar'] * 256 + ['foo.ba']):
-      with self.assertRaises(device_errors.AdbShellCommandFailedError) as ec:
-        self.device._RunPipedShellCommand('ps | grep foo')
-      self.assertIs(None, ec.exception.status)
-
-
-@mock.patch('time.sleep', mock.Mock())
-class DeviceUtilsKillAllTest(DeviceUtilsTest):
-
-  def testKillAll_noMatchingProcessesFailure(self):
-    with self.assertCall(self.call.device.ListProcesses('test_process'), []):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.KillAll('test_process')
-
-  def testKillAll_noMatchingProcessesQuiet(self):
-    with self.assertCall(self.call.device.ListProcesses('test_process'), []):
-      self.assertEqual(0, self.device.KillAll('test_process', quiet=True))
-
-  def testKillAll_nonblocking(self):
-    with self.assertCalls(
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234), ('some.process.thing', 5678))),
-        (self.call.adb.Shell('kill -9 1234 5678'), '')):
-      self.assertEquals(
-          2, self.device.KillAll('some.process', blocking=False))
-
-  def testKillAll_blocking(self):
-    with self.assertCalls(
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234), ('some.process.thing', 5678))),
-        (self.call.adb.Shell('kill -9 1234 5678'), ''),
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process.thing', 5678))),
-        (self.call.device.ListProcesses('some.process'),
-         # Other instance with different pid.
-         Processes(('some.process', 111)))):
-      self.assertEquals(
-          2, self.device.KillAll('some.process', blocking=True))
-
-  def testKillAll_exactNonblocking(self):
-    with self.assertCalls(
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234), ('some.process.thing', 5678))),
-        (self.call.adb.Shell('kill -9 1234'), '')):
-      self.assertEquals(
-          1, self.device.KillAll('some.process', exact=True, blocking=False))
-
-  def testKillAll_exactBlocking(self):
-    with self.assertCalls(
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234), ('some.process.thing', 5678))),
-        (self.call.adb.Shell('kill -9 1234'), ''),
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234), ('some.process.thing', 5678))),
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process.thing', 5678)))):
-      self.assertEquals(
-          1, self.device.KillAll('some.process', exact=True, blocking=True))
-
-  def testKillAll_root(self):
-    with self.assertCalls(
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234))),
-        (self.call.device.NeedsSU(), True),
-        (self.call.device._Su("sh -c 'kill -9 1234'"),
-         "su -c sh -c 'kill -9 1234'"),
-        (self.call.adb.Shell("su -c sh -c 'kill -9 1234'"), '')):
-      self.assertEquals(
-          1, self.device.KillAll('some.process', as_root=True))
-
-  def testKillAll_sigterm(self):
-    with self.assertCalls(
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234))),
-        (self.call.adb.Shell('kill -15 1234'), '')):
-      self.assertEquals(
-          1, self.device.KillAll('some.process', signum=device_signal.SIGTERM))
-
-  def testKillAll_multipleInstances(self):
-    with self.assertCalls(
-        (self.call.device.ListProcesses('some.process'),
-         Processes(('some.process', 1234), ('some.process', 4567))),
-        (self.call.adb.Shell('kill -15 1234 4567'), '')):
-      self.assertEquals(
-          2, self.device.KillAll('some.process', signum=device_signal.SIGTERM))
-
-
-class DeviceUtilsStartActivityTest(DeviceUtilsTest):
-
-  def testStartActivity_actionOnly(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_success(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_failure(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main'),
-        'Error: Failed to start test activity'):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.StartActivity(test_intent)
-
-  def testStartActivity_blocking(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-W '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent, blocking=True)
-
-  def testStartActivity_withCategory(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main',
-                                category='android.intent.category.HOME')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-c android.intent.category.HOME '
-                            '-n test.package/.Main'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_withMultipleCategories(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main',
-                                category=['android.intent.category.HOME',
-                                          'android.intent.category.BROWSABLE'])
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-c android.intent.category.HOME '
-                            '-c android.intent.category.BROWSABLE '
-                            '-n test.package/.Main'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_withData(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main',
-                                data='http://www.google.com/')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-d http://www.google.com/ '
-                            '-n test.package/.Main'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_withStringExtra(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main',
-                                extras={'foo': 'test'})
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main '
-                            '--es foo test'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_withBoolExtra(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main',
-                                extras={'foo': True})
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main '
-                            '--ez foo True'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_withIntExtra(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main',
-                                extras={'foo': 123})
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main '
-                            '--ei foo 123'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-  def testStartActivity_withTraceFile(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '--start-profiler test_trace_file.out '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent,
-                                trace_file_name='test_trace_file.out')
-
-  def testStartActivity_withForceStop(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main')
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-S '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent, force_stop=True)
-
-  def testStartActivity_withFlags(self):
-    test_intent = intent.Intent(action='android.intent.action.VIEW',
-                                package='test.package',
-                                activity='.Main',
-                                flags=[
-                                  intent.FLAG_ACTIVITY_NEW_TASK,
-                                  intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
-                                ])
-    with self.assertCall(
-        self.call.adb.Shell('am start '
-                            '-a android.intent.action.VIEW '
-                            '-n test.package/.Main '
-                            '-f 0x10200000'),
-        'Starting: Intent { act=android.intent.action.VIEW }'):
-      self.device.StartActivity(test_intent)
-
-
-class DeviceUtilsStartInstrumentationTest(DeviceUtilsTest):
-
-  def testStartInstrumentation_nothing(self):
-    with self.assertCalls(
-        self.call.device.RunShellCommand(
-            'p=test.package;am instrument "$p"/.TestInstrumentation',
-            shell=True, check_return=True, large_output=True)):
-      self.device.StartInstrumentation(
-          'test.package/.TestInstrumentation',
-          finish=False, raw=False, extras=None)
-
-  def testStartInstrumentation_finish(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            'p=test.package;am instrument -w "$p"/.TestInstrumentation',
-            shell=True, check_return=True, large_output=True),
-         ['OK (1 test)'])):
-      output = self.device.StartInstrumentation(
-          'test.package/.TestInstrumentation',
-          finish=True, raw=False, extras=None)
-      self.assertEquals(['OK (1 test)'], output)
-
-  def testStartInstrumentation_raw(self):
-    with self.assertCalls(
-        self.call.device.RunShellCommand(
-            'p=test.package;am instrument -r "$p"/.TestInstrumentation',
-            shell=True, check_return=True, large_output=True)):
-      self.device.StartInstrumentation(
-          'test.package/.TestInstrumentation',
-          finish=False, raw=True, extras=None)
-
-  def testStartInstrumentation_extras(self):
-    with self.assertCalls(
-        self.call.device.RunShellCommand(
-            'p=test.package;am instrument -e "$p".foo Foo -e bar \'Val \'"$p" '
-            '"$p"/.TestInstrumentation',
-            shell=True, check_return=True, large_output=True)):
-      self.device.StartInstrumentation(
-          'test.package/.TestInstrumentation',
-          finish=False, raw=False, extras={'test.package.foo': 'Foo',
-                                           'bar': 'Val test.package'})
-
-
-class DeviceUtilsBroadcastIntentTest(DeviceUtilsTest):
-
-  def testBroadcastIntent_noExtras(self):
-    test_intent = intent.Intent(action='test.package.with.an.INTENT')
-    with self.assertCall(
-        self.call.adb.Shell('am broadcast -a test.package.with.an.INTENT'),
-        'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
-      self.device.BroadcastIntent(test_intent)
-
-  def testBroadcastIntent_withExtra(self):
-    test_intent = intent.Intent(action='test.package.with.an.INTENT',
-                                extras={'foo': 'bar value'})
-    with self.assertCall(
-        self.call.adb.Shell(
-            "am broadcast -a test.package.with.an.INTENT --es foo 'bar value'"),
-        'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
-      self.device.BroadcastIntent(test_intent)
-
-  def testBroadcastIntent_withExtra_noValue(self):
-    test_intent = intent.Intent(action='test.package.with.an.INTENT',
-                                extras={'foo': None})
-    with self.assertCall(
-        self.call.adb.Shell(
-            'am broadcast -a test.package.with.an.INTENT --esn foo'),
-        'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
-      self.device.BroadcastIntent(test_intent)
-
-
-class DeviceUtilsGoHomeTest(DeviceUtilsTest):
-
-  def testGoHome_popupsExist(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), []),
-        (self.call.device.RunShellCommand(
-            ['am', 'start', '-W', '-a', 'android.intent.action.MAIN',
-            '-c', 'android.intent.category.HOME'], check_return=True),
-         'Starting: Intent { act=android.intent.action.MAIN }\r\n'''),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), []),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '66'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '4'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True),
-         ['mCurrentFocus Launcher'])):
-      self.device.GoHome()
-
-  def testGoHome_willRetry(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), []),
-        (self.call.device.RunShellCommand(
-            ['am', 'start', '-W', '-a', 'android.intent.action.MAIN',
-            '-c', 'android.intent.category.HOME'], check_return=True),
-         'Starting: Intent { act=android.intent.action.MAIN }\r\n'''),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), []),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '66'], check_return=True,)),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '4'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), []),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '66'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '4'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True),
-         self.TimeoutError())):
-      with self.assertRaises(device_errors.CommandTimeoutError):
-        self.device.GoHome()
-
-  def testGoHome_alreadyFocused(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True),
-        ['mCurrentFocus Launcher']):
-      self.device.GoHome()
-
-  def testGoHome_alreadyFocusedAlternateCase(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True),
-        [' mCurrentFocus .launcher/.']):
-      self.device.GoHome()
-
-  def testGoHome_obtainsFocusAfterGoingHome(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), []),
-        (self.call.device.RunShellCommand(
-            ['am', 'start', '-W', '-a', 'android.intent.action.MAIN',
-            '-c', 'android.intent.category.HOME'], check_return=True),
-         'Starting: Intent { act=android.intent.action.MAIN }\r\n'''),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True),
-         ['mCurrentFocus Launcher'])):
-      self.device.GoHome()
-
-
-class DeviceUtilsForceStopTest(DeviceUtilsTest):
-
-  def testForceStop(self):
-    with self.assertCalls(
-        (self.call.device.GetApplicationPids('test.package'), [1111]),
-        (self.call.device.RunShellCommand(
-            ['am', 'force-stop', 'test.package'],
-            check_return=True),
-         ['Success'])):
-      self.device.ForceStop('test.package')
-
-  def testForceStop_NoProcessFound(self):
-    with self.assertCall(
-        self.call.device.GetApplicationPids('test.package'), []):
-      self.device.ForceStop('test.package')
-
-
-class DeviceUtilsClearApplicationStateTest(DeviceUtilsTest):
-
-  def testClearApplicationState_setPermissions(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '17'),
-        (self.call.device._GetApplicationPathsInternal('this.package.exists'),
-         ['/data/app/this.package.exists.apk']),
-        (self.call.device.RunShellCommand(
-            ['pm', 'clear', 'this.package.exists'],
-            check_return=True),
-         ['Success']),
-        (self.call.device.GrantPermissions(
-            'this.package.exists', ['p1']), [])):
-      self.device.ClearApplicationState(
-          'this.package.exists', permissions=['p1'])
-
-  def testClearApplicationState_packageDoesntExist(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '11'),
-        (self.call.device._GetApplicationPathsInternal('does.not.exist'),
-         [])):
-      self.device.ClearApplicationState('does.not.exist')
-
-  def testClearApplicationState_packageDoesntExistOnAndroidJBMR2OrAbove(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '18'),
-        (self.call.device.RunShellCommand(
-            ['pm', 'clear', 'this.package.does.not.exist'],
-            check_return=True),
-         ['Failed'])):
-      self.device.ClearApplicationState('this.package.does.not.exist')
-
-  def testClearApplicationState_packageExists(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '17'),
-        (self.call.device._GetApplicationPathsInternal('this.package.exists'),
-         ['/data/app/this.package.exists.apk']),
-        (self.call.device.RunShellCommand(
-            ['pm', 'clear', 'this.package.exists'],
-            check_return=True),
-         ['Success'])):
-      self.device.ClearApplicationState('this.package.exists')
-
-  def testClearApplicationState_packageExistsOnAndroidJBMR2OrAbove(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '18'),
-        (self.call.device.RunShellCommand(
-            ['pm', 'clear', 'this.package.exists'],
-            check_return=True),
-         ['Success'])):
-      self.device.ClearApplicationState('this.package.exists')
-
-
-class DeviceUtilsSendKeyEventTest(DeviceUtilsTest):
-
-  def testSendKeyEvent(self):
-    with self.assertCall(self.call.adb.Shell('input keyevent 66'), ''):
-      self.device.SendKeyEvent(66)
-
-
-class DeviceUtilsPushChangedFilesIndividuallyTest(DeviceUtilsTest):
-
-  def testPushChangedFilesIndividually_empty(self):
-    test_files = []
-    with self.assertCalls():
-      self.device._PushChangedFilesIndividually(test_files)
-
-  def testPushChangedFilesIndividually_single(self):
-    test_files = [('/test/host/path', '/test/device/path')]
-    with self.assertCalls(self.call.adb.Push(*test_files[0])):
-      self.device._PushChangedFilesIndividually(test_files)
-
-  def testPushChangedFilesIndividually_multiple(self):
-    test_files = [
-        ('/test/host/path/file1', '/test/device/path/file1'),
-        ('/test/host/path/file2', '/test/device/path/file2')]
-    with self.assertCalls(
-        self.call.adb.Push(*test_files[0]),
-        self.call.adb.Push(*test_files[1])):
-      self.device._PushChangedFilesIndividually(test_files)
-
-
-class DeviceUtilsPushChangedFilesZippedTest(DeviceUtilsTest):
-
-  def testPushChangedFilesZipped_noUnzipCommand(self):
-    test_files = [('/test/host/path/file1', '/test/device/path/file1')]
-    with self.assertCalls(
-        (self.call.device._MaybeInstallCommands(), False)):
-      self.assertFalse(self.device._PushChangedFilesZipped(test_files,
-                                                           ['/test/dir']))
-
-  def _testPushChangedFilesZipped_spec(self, test_files):
-    @contextlib.contextmanager
-    def mock_zip_temp_dir():
-      yield '/test/temp/dir'
-
-    with self.assertCalls(
-        (self.call.device._MaybeInstallCommands(), True),
-        (mock.call.py_utils.tempfile_ext.NamedTemporaryDirectory(),
-         mock_zip_temp_dir),
-        (mock.call.devil.utils.zip_utils.WriteZipFile(
-            '/test/temp/dir/tmp.zip', test_files)),
-        (self.call.device.NeedsSU(), True),
-        (mock.call.devil.android.device_temp_file.DeviceTempFile(self.adb,
-                                                                 suffix='.zip'),
-             MockTempFile('/test/sdcard/foo123.zip')),
-        self.call.adb.Push(
-            '/test/temp/dir/tmp.zip', '/test/sdcard/foo123.zip'),
-        self.call.device.RunShellCommand(
-            'unzip /test/sdcard/foo123.zip&&chmod -R 777 /test/dir',
-            shell=True, as_root=True,
-            env={'PATH': '/data/local/tmp/bin:$PATH'},
-            check_return=True)):
-      self.assertTrue(self.device._PushChangedFilesZipped(test_files,
-                                                          ['/test/dir']))
-
-  def testPushChangedFilesZipped_single(self):
-    self._testPushChangedFilesZipped_spec(
-        [('/test/host/path/file1', '/test/device/path/file1')])
-
-  def testPushChangedFilesZipped_multiple(self):
-    self._testPushChangedFilesZipped_spec(
-        [('/test/host/path/file1', '/test/device/path/file1'),
-         ('/test/host/path/file2', '/test/device/path/file2')])
-
-
-class DeviceUtilsPathExistsTest(DeviceUtilsTest):
-
-  def testPathExists_pathExists(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['test', '-e', '/path/file exists'],
-            as_root=False, check_return=True, timeout=10, retries=0),
-        []):
-      self.assertTrue(self.device.PathExists('/path/file exists'))
-
-  def testPathExists_multiplePathExists(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['test', '-e', '/path 1', '-a', '-e', '/path2'],
-            as_root=False, check_return=True, timeout=10, retries=0),
-        []):
-      self.assertTrue(self.device.PathExists(('/path 1', '/path2')))
-
-  def testPathExists_pathDoesntExist(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['test', '-e', '/path/file.not.exists'],
-            as_root=False, check_return=True, timeout=10, retries=0),
-        self.ShellError()):
-      self.assertFalse(self.device.PathExists('/path/file.not.exists'))
-
-  def testPathExists_asRoot(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['test', '-e', '/root/path/exists'],
-            as_root=True, check_return=True, timeout=10, retries=0),
-        self.ShellError()):
-      self.assertFalse(
-          self.device.PathExists('/root/path/exists', as_root=True))
-
-  def testFileExists_pathDoesntExist(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['test', '-e', '/path/file.not.exists'],
-            as_root=False, check_return=True, timeout=10, retries=0),
-        self.ShellError()):
-      self.assertFalse(self.device.FileExists('/path/file.not.exists'))
-
-
-class DeviceUtilsRemovePathTest(DeviceUtilsTest):
-
-  def testRemovePath_regular(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['rm', 'some file'], as_root=False, check_return=True),
-        []):
-      self.device.RemovePath('some file')
-
-  def testRemovePath_withForce(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['rm', '-f', 'some file'], as_root=False, check_return=True),
-        []):
-      self.device.RemovePath('some file', force=True)
-
-  def testRemovePath_recursively(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['rm', '-r', '/remove/this/dir'], as_root=False, check_return=True),
-        []):
-      self.device.RemovePath('/remove/this/dir', recursive=True)
-
-  def testRemovePath_withRoot(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['rm', 'some file'], as_root=True, check_return=True),
-        []):
-      self.device.RemovePath('some file', as_root=True)
-
-  def testRemovePath_manyPaths(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['rm', 'eeny', 'meeny', 'miny', 'moe'],
-            as_root=False, check_return=True),
-        []):
-      self.device.RemovePath(['eeny', 'meeny', 'miny', 'moe'])
-
-
-class DeviceUtilsPullFileTest(DeviceUtilsTest):
-
-  def testPullFile_existsOnDevice(self):
-    with mock.patch('os.path.exists', return_value=True):
-      with self.assertCall(
-          self.call.adb.Pull('/data/app/test.file.exists',
-                             '/test/file/host/path')):
-        self.device.PullFile('/data/app/test.file.exists',
-                             '/test/file/host/path')
-
-  def testPullFile_doesntExistOnDevice(self):
-    with mock.patch('os.path.exists', return_value=True):
-      with self.assertCall(
-          self.call.adb.Pull('/data/app/test.file.does.not.exist',
-                             '/test/file/host/path'),
-          self.CommandError('remote object does not exist')):
-        with self.assertRaises(device_errors.CommandFailedError):
-          self.device.PullFile('/data/app/test.file.does.not.exist',
-                               '/test/file/host/path')
-
-
-class DeviceUtilsReadFileTest(DeviceUtilsTest):
-
-  def testReadFileWithPull_success(self):
-    tmp_host_dir = '/tmp/dir/on.host/'
-    tmp_host = MockTempFile('/tmp/dir/on.host/tmp_ReadFileWithPull')
-    tmp_host.file.read.return_value = 'some interesting contents'
-    with self.assertCalls(
-        (mock.call.tempfile.mkdtemp(), tmp_host_dir),
-        (self.call.adb.Pull('/path/to/device/file', mock.ANY)),
-        (mock.call.__builtin__.open(mock.ANY, 'r'), tmp_host),
-        (mock.call.os.path.exists(tmp_host_dir), True),
-        (mock.call.shutil.rmtree(tmp_host_dir), None)):
-      self.assertEquals('some interesting contents',
-                        self.device._ReadFileWithPull('/path/to/device/file'))
-    tmp_host.file.read.assert_called_once_with()
-
-  def testReadFileWithPull_rejected(self):
-    tmp_host_dir = '/tmp/dir/on.host/'
-    with self.assertCalls(
-        (mock.call.tempfile.mkdtemp(), tmp_host_dir),
-        (self.call.adb.Pull('/path/to/device/file', mock.ANY),
-         self.CommandError()),
-        (mock.call.os.path.exists(tmp_host_dir), True),
-        (mock.call.shutil.rmtree(tmp_host_dir), None)):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device._ReadFileWithPull('/path/to/device/file')
-
-  def testReadFile_exists(self):
-    with self.assertCalls(
-        (self.call.device.FileSize('/read/this/test/file', as_root=False), 256),
-        (self.call.device.RunShellCommand(
-            ['cat', '/read/this/test/file'],
-            as_root=False, check_return=True),
-         ['this is a test file'])):
-      self.assertEqual('this is a test file\n',
-                       self.device.ReadFile('/read/this/test/file'))
-
-  def testReadFile_exists2(self):
-    # Same as testReadFile_exists, but uses Android N ls output.
-    with self.assertCalls(
-        (self.call.device.FileSize('/read/this/test/file', as_root=False), 256),
-        (self.call.device.RunShellCommand(
-            ['cat', '/read/this/test/file'],
-            as_root=False, check_return=True),
-         ['this is a test file'])):
-      self.assertEqual('this is a test file\n',
-                       self.device.ReadFile('/read/this/test/file'))
-
-  def testReadFile_doesNotExist(self):
-    with self.assertCall(
-        self.call.device.FileSize('/this/file/does.not.exist', as_root=False),
-        self.CommandError('File does not exist')):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.ReadFile('/this/file/does.not.exist')
-
-  def testReadFile_zeroSize(self):
-    with self.assertCalls(
-        (self.call.device.FileSize('/this/file/has/zero/size', as_root=False),
-         0),
-        (self.call.device._ReadFileWithPull('/this/file/has/zero/size'),
-         'but it has contents\n')):
-      self.assertEqual('but it has contents\n',
-                       self.device.ReadFile('/this/file/has/zero/size'))
-
-  def testReadFile_withSU(self):
-    with self.assertCalls(
-        (self.call.device.FileSize(
-            '/this/file/can.be.read.with.su', as_root=True), 256),
-        (self.call.device.RunShellCommand(
-            ['cat', '/this/file/can.be.read.with.su'],
-            as_root=True, check_return=True),
-         ['this is a test file', 'read with su'])):
-      self.assertEqual(
-          'this is a test file\nread with su\n',
-          self.device.ReadFile('/this/file/can.be.read.with.su',
-                               as_root=True))
-
-  def testReadFile_withPull(self):
-    contents = 'a' * 123456
-    with self.assertCalls(
-        (self.call.device.FileSize('/read/this/big/test/file', as_root=False),
-         123456),
-        (self.call.device._ReadFileWithPull('/read/this/big/test/file'),
-         contents)):
-      self.assertEqual(
-          contents, self.device.ReadFile('/read/this/big/test/file'))
-
-  def testReadFile_withPullAndSU(self):
-    contents = 'b' * 123456
-    with self.assertCalls(
-        (self.call.device.FileSize(
-            '/this/big/file/can.be.read.with.su', as_root=True), 123456),
-        (self.call.device.NeedsSU(), True),
-        (mock.call.devil.android.device_temp_file.DeviceTempFile(self.adb),
-         MockTempFile('/sdcard/tmp/on.device')),
-        self.call.device.RunShellCommand(
-            'SRC=/this/big/file/can.be.read.with.su DEST=/sdcard/tmp/on.device;'
-            'cp "$SRC" "$DEST" && chmod 666 "$DEST"',
-            shell=True, as_root=True, check_return=True),
-        (self.call.device._ReadFileWithPull('/sdcard/tmp/on.device'),
-         contents)):
-      self.assertEqual(
-          contents,
-          self.device.ReadFile('/this/big/file/can.be.read.with.su',
-                               as_root=True))
-
-  def testReadFile_forcePull(self):
-    contents = 'a' * 123456
-    with self.assertCall(
-        self.call.device._ReadFileWithPull('/read/this/big/test/file'),
-        contents):
-      self.assertEqual(
-          contents,
-          self.device.ReadFile('/read/this/big/test/file', force_pull=True))
-
-
-class DeviceUtilsWriteFileTest(DeviceUtilsTest):
-
-  def testWriteFileWithPush_success(self):
-    tmp_host = MockTempFile('/tmp/file/on.host')
-    contents = 'some interesting contents'
-    with self.assertCalls(
-        (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
-        self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file')):
-      self.device._WriteFileWithPush('/path/to/device/file', contents)
-    tmp_host.file.write.assert_called_once_with(contents)
-
-  def testWriteFileWithPush_rejected(self):
-    tmp_host = MockTempFile('/tmp/file/on.host')
-    contents = 'some interesting contents'
-    with self.assertCalls(
-        (mock.call.tempfile.NamedTemporaryFile(), tmp_host),
-        (self.call.adb.Push('/tmp/file/on.host', '/path/to/device/file'),
-         self.CommandError())):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device._WriteFileWithPush('/path/to/device/file', contents)
-
-  def testWriteFile_withPush(self):
-    contents = 'some large contents ' * 26  # 20 * 26 = 520 chars
-    with self.assertCalls(
-        self.call.device._WriteFileWithPush('/path/to/device/file', contents)):
-      self.device.WriteFile('/path/to/device/file', contents)
-
-  def testWriteFile_withPushForced(self):
-    contents = 'tiny contents'
-    with self.assertCalls(
-        self.call.device._WriteFileWithPush('/path/to/device/file', contents)):
-      self.device.WriteFile('/path/to/device/file', contents, force_push=True)
-
-  def testWriteFile_withPushAndSU(self):
-    contents = 'some large contents ' * 26  # 20 * 26 = 520 chars
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), True),
-        (mock.call.devil.android.device_temp_file.DeviceTempFile(self.adb),
-         MockTempFile('/sdcard/tmp/on.device')),
-        self.call.device._WriteFileWithPush('/sdcard/tmp/on.device', contents),
-        self.call.device.RunShellCommand(
-            ['cp', '/sdcard/tmp/on.device', '/path/to/device/file'],
-            as_root=True, check_return=True)):
-      self.device.WriteFile('/path/to/device/file', contents, as_root=True)
-
-  def testWriteFile_withEcho(self):
-    with self.assertCall(self.call.adb.Shell(
-        "echo -n the.contents > /test/file/to.write"), ''):
-      self.device.WriteFile('/test/file/to.write', 'the.contents')
-
-  def testWriteFile_withEchoAndQuotes(self):
-    with self.assertCall(self.call.adb.Shell(
-        "echo -n 'the contents' > '/test/file/to write'"), ''):
-      self.device.WriteFile('/test/file/to write', 'the contents')
-
-  def testWriteFile_withEchoAndSU(self):
-    expected_cmd_without_su = "sh -c 'echo -n contents > /test/file'"
-    expected_cmd = 'su -c %s' % expected_cmd_without_su
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), True),
-        (self.call.device._Su(expected_cmd_without_su), expected_cmd),
-        (self.call.adb.Shell(expected_cmd),
-         '')):
-      self.device.WriteFile('/test/file', 'contents', as_root=True)
-
-
-class DeviceUtilsStatDirectoryTest(DeviceUtilsTest):
-  # Note: Also tests ListDirectory in testStatDirectory_fileList.
-
-  EXAMPLE_LS_OUTPUT = [
-    'total 12345',
-    'drwxr-xr-x  19 root   root          0 1970-04-06 18:03 .',
-    'drwxr-xr-x  19 root   root          0 1970-04-06 18:03 ..',
-    'drwxr-xr-x   6 root   root            1970-01-01 00:00 some_dir',
-    '-rw-r--r--   1 root   root        723 1971-01-01 07:04 some_file',
-    '-rw-r-----   1 root   root        327 2009-02-13 23:30 My Music File',
-    # Some Android versions escape spaces in file names
-    '-rw-rw-rw-   1 root   root          0 2018-01-11 13:35 Local\\ State',
-    # Older Android versions do not print st_nlink
-    'lrwxrwxrwx root     root              1970-01-01 00:00 lnk -> /some/path',
-    'srwxrwx--- system   system            2016-05-31 17:25 a_socket1',
-    'drwxrwxrwt system   misc              1970-11-23 02:25 tmp',
-    'drwxr-s--- system   shell             1970-11-23 02:24 my_cmd',
-    'cr--r----- root     system    10, 183 1971-01-01 07:04 random',
-    'brw------- root     root       7,   0 1971-01-01 07:04 block_dev',
-    '-rwS------ root     shell      157404 2015-04-13 15:44 silly',
-  ]
-
-  FILENAMES = [
-    'some_dir', 'some_file', 'My Music File', 'Local State', 'lnk',
-    'a_socket1', 'tmp', 'my_cmd', 'random', 'block_dev', 'silly']
-
-  def getStatEntries(self, path_given='/', path_listed='/'):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['ls', '-a', '-l', path_listed],
-            check_return=True, as_root=False, env={'TZ': 'utc'}),
-        self.EXAMPLE_LS_OUTPUT):
-      entries = self.device.StatDirectory(path_given)
-    return {f['filename']: f for f in entries}
-
-  def getListEntries(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['ls', '-a', '-l', '/'],
-            check_return=True, as_root=False, env={'TZ': 'utc'}),
-        self.EXAMPLE_LS_OUTPUT):
-      return self.device.ListDirectory('/')
-
-  def testStatDirectory_forceTrailingSlash(self):
-    self.getStatEntries(path_given='/foo/bar/', path_listed='/foo/bar/')
-    self.getStatEntries(path_given='/foo/bar', path_listed='/foo/bar/')
-
-  def testStatDirectory_fileList(self):
-    self.assertItemsEqual(self.getStatEntries().keys(), self.FILENAMES)
-    self.assertItemsEqual(self.getListEntries(), self.FILENAMES)
-
-  def testStatDirectory_fileModes(self):
-    expected_modes = (
-      ('some_dir', stat.S_ISDIR),
-      ('some_file', stat.S_ISREG),
-      ('lnk', stat.S_ISLNK),
-      ('a_socket1', stat.S_ISSOCK),
-      ('block_dev', stat.S_ISBLK),
-      ('random', stat.S_ISCHR),
-    )
-    entries = self.getStatEntries()
-    for filename, check in expected_modes:
-      self.assertTrue(check(entries[filename]['st_mode']))
-
-  def testStatDirectory_filePermissions(self):
-    should_have = (
-      ('some_file', stat.S_IWUSR),  # Owner can write.
-      ('tmp', stat.S_IXOTH),  # Others can execute.
-      ('tmp', stat.S_ISVTX),  # Has sticky bit.
-      ('my_cmd', stat.S_ISGID),  # Has set-group-ID bit.
-      ('silly', stat.S_ISUID),  # Has set UID bit.
-    )
-    should_not_have = (
-      ('some_file', stat.S_IWOTH),  # Others can't write.
-      ('block_dev', stat.S_IRGRP),  # Group can't read.
-      ('silly', stat.S_IXUSR),  # Owner can't execute.
-    )
-    entries = self.getStatEntries()
-    for filename, bit in should_have:
-      self.assertTrue(entries[filename]['st_mode'] & bit)
-    for filename, bit in should_not_have:
-      self.assertFalse(entries[filename]['st_mode'] & bit)
-
-  def testStatDirectory_numHardLinks(self):
-    entries = self.getStatEntries()
-    self.assertEqual(entries['some_dir']['st_nlink'], 6)
-    self.assertEqual(entries['some_file']['st_nlink'], 1)
-    self.assertFalse('st_nlink' in entries['tmp'])
-
-  def testStatDirectory_fileOwners(self):
-    entries = self.getStatEntries()
-    self.assertEqual(entries['some_dir']['st_owner'], 'root')
-    self.assertEqual(entries['my_cmd']['st_owner'], 'system')
-    self.assertEqual(entries['my_cmd']['st_group'], 'shell')
-    self.assertEqual(entries['tmp']['st_group'], 'misc')
-
-  def testStatDirectory_fileSize(self):
-    entries = self.getStatEntries()
-    self.assertEqual(entries['some_file']['st_size'], 723)
-    self.assertEqual(entries['My Music File']['st_size'], 327)
-    # Sizes are sometimes not reported for non-regular files, don't try to
-    # guess the size in those cases.
-    self.assertFalse('st_size' in entries['some_dir'])
-
-  def testStatDirectory_fileDateTime(self):
-    entries = self.getStatEntries()
-    self.assertEqual(entries['some_dir']['st_mtime'], 0)  # Epoch!
-    self.assertEqual(entries['My Music File']['st_mtime'], 1234567800)
-
-  def testStatDirectory_deviceType(self):
-    entries = self.getStatEntries()
-    self.assertEqual(entries['random']['st_rdev_pair'], (10, 183))
-    self.assertEqual(entries['block_dev']['st_rdev_pair'], (7, 0))
-
-  def testStatDirectory_symbolicLinks(self):
-    entries = self.getStatEntries()
-    self.assertEqual(entries['lnk']['symbolic_link_to'], '/some/path')
-    for d in entries.itervalues():
-      self.assertEqual('symbolic_link_to' in d, stat.S_ISLNK(d['st_mode']))
-
-
-class DeviceUtilsStatPathTest(DeviceUtilsTest):
-
-  EXAMPLE_DIRECTORY = [
-    {'filename': 'foo.txt', 'st_size': 123, 'st_time': 456},
-    {'filename': 'some_dir', 'st_time': 0}
-  ]
-  INDEX = {e['filename']: e for e in EXAMPLE_DIRECTORY}
-
-  def testStatPath_file(self):
-    with self.assertCall(
-        self.call.device.StatDirectory('/data/local/tmp', as_root=False),
-        self.EXAMPLE_DIRECTORY):
-      self.assertEquals(self.INDEX['foo.txt'],
-                        self.device.StatPath('/data/local/tmp/foo.txt'))
-
-  def testStatPath_directory(self):
-    with self.assertCall(
-        self.call.device.StatDirectory('/data/local/tmp', as_root=False),
-        self.EXAMPLE_DIRECTORY):
-      self.assertEquals(self.INDEX['some_dir'],
-                        self.device.StatPath('/data/local/tmp/some_dir'))
-
-  def testStatPath_directoryWithTrailingSlash(self):
-    with self.assertCall(
-        self.call.device.StatDirectory('/data/local/tmp', as_root=False),
-        self.EXAMPLE_DIRECTORY):
-      self.assertEquals(self.INDEX['some_dir'],
-                        self.device.StatPath('/data/local/tmp/some_dir/'))
-
-  def testStatPath_doesNotExist(self):
-    with self.assertCall(
-        self.call.device.StatDirectory('/data/local/tmp', as_root=False),
-        self.EXAMPLE_DIRECTORY):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.StatPath('/data/local/tmp/does.not.exist.txt')
-
-
-class DeviceUtilsFileSizeTest(DeviceUtilsTest):
-
-  EXAMPLE_DIRECTORY = [
-    {'filename': 'foo.txt', 'st_size': 123, 'st_mtime': 456},
-    {'filename': 'some_dir', 'st_mtime': 0}
-  ]
-
-  def testFileSize_file(self):
-    with self.assertCall(
-        self.call.device.StatDirectory('/data/local/tmp', as_root=False),
-        self.EXAMPLE_DIRECTORY):
-      self.assertEquals(123,
-                        self.device.FileSize('/data/local/tmp/foo.txt'))
-
-  def testFileSize_doesNotExist(self):
-    with self.assertCall(
-        self.call.device.StatDirectory('/data/local/tmp', as_root=False),
-        self.EXAMPLE_DIRECTORY):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.FileSize('/data/local/tmp/does.not.exist.txt')
-
-  def testFileSize_directoryWithNoSize(self):
-    with self.assertCall(
-        self.call.device.StatDirectory('/data/local/tmp', as_root=False),
-        self.EXAMPLE_DIRECTORY):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.FileSize('/data/local/tmp/some_dir')
-
-
-class DeviceUtilsSetJavaAssertsTest(DeviceUtilsTest):
-
-  def testSetJavaAsserts_enable(self):
-    with self.assertCalls(
-        (self.call.device.ReadFile(self.device.LOCAL_PROPERTIES_PATH),
-         'some.example.prop=with an example value\n'
-         'some.other.prop=value_ok\n'),
-        self.call.device.WriteFile(
-            self.device.LOCAL_PROPERTIES_PATH,
-            'some.example.prop=with an example value\n'
-            'some.other.prop=value_ok\n'
-            'dalvik.vm.enableassertions=all\n'),
-        (self.call.device.GetProp('dalvik.vm.enableassertions'), ''),
-        self.call.device.SetProp('dalvik.vm.enableassertions', 'all')):
-      self.assertTrue(self.device.SetJavaAsserts(True))
-
-  def testSetJavaAsserts_disable(self):
-    with self.assertCalls(
-        (self.call.device.ReadFile(self.device.LOCAL_PROPERTIES_PATH),
-         'some.example.prop=with an example value\n'
-         'dalvik.vm.enableassertions=all\n'
-         'some.other.prop=value_ok\n'),
-        self.call.device.WriteFile(
-            self.device.LOCAL_PROPERTIES_PATH,
-            'some.example.prop=with an example value\n'
-            'some.other.prop=value_ok\n'),
-        (self.call.device.GetProp('dalvik.vm.enableassertions'), 'all'),
-        self.call.device.SetProp('dalvik.vm.enableassertions', '')):
-      self.assertTrue(self.device.SetJavaAsserts(False))
-
-  def testSetJavaAsserts_alreadyEnabled(self):
-    with self.assertCalls(
-        (self.call.device.ReadFile(self.device.LOCAL_PROPERTIES_PATH),
-         'some.example.prop=with an example value\n'
-         'dalvik.vm.enableassertions=all\n'
-         'some.other.prop=value_ok\n'),
-        (self.call.device.GetProp('dalvik.vm.enableassertions'), 'all')):
-      self.assertFalse(self.device.SetJavaAsserts(True))
-
-  def testSetJavaAsserts_malformedLocalProp(self):
-    with self.assertCalls(
-        (self.call.device.ReadFile(self.device.LOCAL_PROPERTIES_PATH),
-         'some.example.prop=with an example value\n'
-         'malformed_property\n'
-         'dalvik.vm.enableassertions=all\n'
-         'some.other.prop=value_ok\n'),
-        (self.call.device.GetProp('dalvik.vm.enableassertions'), 'all')):
-      self.assertFalse(self.device.SetJavaAsserts(True))
-
-
-class DeviceUtilsEnsureCacheInitializedTest(DeviceUtilsTest):
-
-  def testEnsureCacheInitialized_noCache_success(self):
-    self.assertIsNone(self.device._cache['token'])
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            AnyStringWith('getprop'),
-            shell=True, check_return=True, large_output=True),
-        ['/sdcard', 'TOKEN']):
-      self.device._EnsureCacheInitialized()
-    self.assertIsNotNone(self.device._cache['token'])
-
-  def testEnsureCacheInitialized_noCache_failure(self):
-    self.assertIsNone(self.device._cache['token'])
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            AnyStringWith('getprop'),
-            shell=True, check_return=True, large_output=True),
-        self.TimeoutError()):
-      with self.assertRaises(device_errors.CommandTimeoutError):
-        self.device._EnsureCacheInitialized()
-    self.assertIsNone(self.device._cache['token'])
-
-  def testEnsureCacheInitialized_cache(self):
-    self.device._cache['token'] = 'TOKEN'
-    with self.assertCalls():
-      self.device._EnsureCacheInitialized()
-    self.assertIsNotNone(self.device._cache['token'])
-
-
-class DeviceUtilsGetPropTest(DeviceUtilsTest):
-
-  def testGetProp_exists(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['getprop', 'test.property'], check_return=True, single_line=True,
-            timeout=self.device._default_timeout,
-            retries=self.device._default_retries),
-        'property_value'):
-      self.assertEqual('property_value',
-                       self.device.GetProp('test.property'))
-
-  def testGetProp_doesNotExist(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['getprop', 'property.does.not.exist'],
-            check_return=True, single_line=True,
-            timeout=self.device._default_timeout,
-            retries=self.device._default_retries),
-        ''):
-      self.assertEqual('', self.device.GetProp('property.does.not.exist'))
-
-  def testGetProp_cachedRoProp(self):
-    with self.assertCalls(
-        self.EnsureCacheInitialized(props=['[ro.build.type]: [userdebug]'])):
-      self.assertEqual('userdebug',
-                       self.device.GetProp('ro.build.type', cache=True))
-      self.assertEqual('userdebug',
-                       self.device.GetProp('ro.build.type', cache=True))
-
-
-class DeviceUtilsSetPropTest(DeviceUtilsTest):
-
-  def testSetProp(self):
-    with self.assertCall(
-        self.call.device.RunShellCommand(
-            ['setprop', 'test.property', 'test value'], check_return=True)):
-      self.device.SetProp('test.property', 'test value')
-
-  def testSetProp_check_succeeds(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['setprop', 'test.property', 'new_value'], check_return=True)),
-        (self.call.device.GetProp('test.property', cache=False), 'new_value')):
-      self.device.SetProp('test.property', 'new_value', check=True)
-
-  def testSetProp_check_fails(self):
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['setprop', 'test.property', 'new_value'], check_return=True)),
-        (self.call.device.GetProp('test.property', cache=False), 'old_value')):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.SetProp('test.property', 'new_value', check=True)
-
-
-class DeviceUtilsListProcessesTest(DeviceUtilsTest):
-  def setUp(self):
-    super(DeviceUtilsListProcessesTest, self).setUp()
-    self.sample_output = [
-        'USER  PID     PPID  VSIZE RSS   WCHAN          PC  NAME',
-        'user  1001    100   1024  1024  ffffffff 00000000 one.match',
-        'user  1002    100   1024  1024  ffffffff 00000000 two.match',
-        'user  1003    101   1024  1024  ffffffff 00000000 three.match',
-        'user  1234    101   1024  1024  ffffffff 00000000 my$process',
-        'user  1236    100   1024  1024  ffffffff 00000000 foo',
-        'user  1578    1236  1024  1024  ffffffff 00000000 foo',
-    ]
-
-  def _grepOutput(self, substring):
-    return [line for line in self.sample_output if substring in line]
-
-  def testListProcesses_sdkGreaterThanNougatMR1(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=(version_codes.NOUGAT_MR1 + 1)):
-      with self.patch_call(self.call.device.build_id,
-                           return_value='ZZZ99Z'):
-        with self.assertCall(
-            self.call.device._RunPipedShellCommand(
-                'ps -e | grep -F example.process'), []):
-          self.device.ListProcesses('example.process')
-
-  def testListProcesses_noMatches(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F does.not.match'),
-          self._grepOutput('does.not.match')):
-        self.assertEqual([], self.device.ListProcesses('does.not.match'))
-
-  def testListProcesses_oneMatch(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F one.match'),
-          self._grepOutput('one.match')):
-        self.assertEqual(
-            Processes(('one.match', 1001, 100)),
-            self.device.ListProcesses('one.match'))
-
-  def testListProcesses_multipleMatches(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F match'),
-          self._grepOutput('match')):
-        self.assertEqual(
-            Processes(('one.match', 1001, 100),
-                      ('two.match', 1002, 100),
-                      ('three.match', 1003, 101)),
-            self.device.ListProcesses('match'))
-
-  def testListProcesses_quotable(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand("ps | grep -F 'my$process'"),
-          self._grepOutput('my$process')):
-        self.assertEqual(
-            Processes(('my$process', 1234, 101)),
-            self.device.ListProcesses('my$process'))
-
-  # Tests for the GetPids wrapper interface.
-  def testGetPids_multipleInstances(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F foo'),
-          self._grepOutput('foo')):
-        self.assertEqual(
-            {'foo': ['1236', '1578']},
-            self.device.GetPids('foo'))
-
-  def testGetPids_allProcesses(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device.RunShellCommand(
-              ['ps'], check_return=True, large_output=True),
-          self.sample_output):
-        self.assertEqual(
-            {'one.match': ['1001'],
-             'two.match': ['1002'],
-             'three.match': ['1003'],
-             'my$process': ['1234'],
-             'foo': ['1236', '1578']},
-            self.device.GetPids())
-
-  # Tests for the GetApplicationPids wrapper interface.
-  def testGetApplicationPids_notFound(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F match'),
-          self._grepOutput('match')):
-        # No PIDs found, process name should be exact match.
-        self.assertEqual([], self.device.GetApplicationPids('match'))
-
-  def testGetApplicationPids_foundOne(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F one.match'),
-          self._grepOutput('one.match')):
-        self.assertEqual([1001], self.device.GetApplicationPids('one.match'))
-
-  def testGetApplicationPids_foundMany(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F foo'),
-          self._grepOutput('foo')):
-        self.assertEqual(
-            [1236, 1578],
-            self.device.GetApplicationPids('foo'))
-
-  def testGetApplicationPids_atMostOneNotFound(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F match'),
-          self._grepOutput('match')):
-        # No PIDs found, process name should be exact match.
-        self.assertEqual(
-            None,
-            self.device.GetApplicationPids('match', at_most_one=True))
-
-  def testGetApplicationPids_atMostOneFound(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCall(
-          self.call.device._RunPipedShellCommand('ps | grep -F one.match'),
-          self._grepOutput('one.match')):
-        self.assertEqual(
-            1001,
-            self.device.GetApplicationPids('one.match', at_most_one=True))
-
-  def testGetApplicationPids_atMostOneFoundTooMany(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertRaises(device_errors.CommandFailedError):
-        with self.assertCall(
-            self.call.device._RunPipedShellCommand('ps | grep -F foo'),
-            self._grepOutput('foo')):
-          self.device.GetApplicationPids('foo', at_most_one=True)
-
-
-class DeviceUtilsGetSetEnforce(DeviceUtilsTest):
-
-  def testGetEnforce_Enforcing(self):
-    with self.assertCall(self.call.adb.Shell('getenforce'), 'Enforcing'):
-      self.assertEqual(True, self.device.GetEnforce())
-
-  def testGetEnforce_Permissive(self):
-    with self.assertCall(self.call.adb.Shell('getenforce'), 'Permissive'):
-      self.assertEqual(False, self.device.GetEnforce())
-
-  def testGetEnforce_Disabled(self):
-    with self.assertCall(self.call.adb.Shell('getenforce'), 'Disabled'):
-      self.assertEqual(None, self.device.GetEnforce())
-
-  def testSetEnforce_Enforcing(self):
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), False),
-        (self.call.adb.Shell('setenforce 1'), '')):
-      self.device.SetEnforce(enabled=True)
-
-  def testSetEnforce_Permissive(self):
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), False),
-        (self.call.adb.Shell('setenforce 0'), '')):
-      self.device.SetEnforce(enabled=False)
-
-  def testSetEnforce_EnforcingWithInt(self):
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), False),
-        (self.call.adb.Shell('setenforce 1'), '')):
-      self.device.SetEnforce(enabled=1)
-
-  def testSetEnforce_PermissiveWithInt(self):
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), False),
-        (self.call.adb.Shell('setenforce 0'), '')):
-      self.device.SetEnforce(enabled=0)
-
-  def testSetEnforce_EnforcingWithStr(self):
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), False),
-        (self.call.adb.Shell('setenforce 1'), '')):
-      self.device.SetEnforce(enabled='1')
-
-  def testSetEnforce_PermissiveWithStr(self):
-    with self.assertCalls(
-        (self.call.device.NeedsSU(), False),
-        (self.call.adb.Shell('setenforce 0'), '')):
-      self.device.SetEnforce(enabled='0')  # Not recommended but it works!
-
-
-class DeviceUtilsTakeScreenshotTest(DeviceUtilsTest):
-
-  def testTakeScreenshot_fileNameProvided(self):
-    with self.assertCalls(
-        (mock.call.devil.android.device_temp_file.DeviceTempFile(
-            self.adb, suffix='.png'),
-         MockTempFile('/tmp/path/temp-123.png')),
-        (self.call.adb.Shell('/system/bin/screencap -p /tmp/path/temp-123.png'),
-         ''),
-        self.call.device.PullFile('/tmp/path/temp-123.png',
-                                  '/test/host/screenshot.png')):
-      self.device.TakeScreenshot('/test/host/screenshot.png')
-
-
-class DeviceUtilsDismissCrashDialogIfNeededTest(DeviceUtilsTest):
-
-  def testDismissCrashDialogIfNeeded_crashedPageckageNotFound(self):
-    sample_dumpsys_output = '''
-WINDOW MANAGER WINDOWS (dumpsys window windows)
-  Window #11 Window{f8b647a u0 SearchPanel}:
-    mDisplayId=0 mSession=Session{8 94:122} mClient=android.os.BinderProxy@1ba5
-    mOwnerUid=100 mShowToOwnerOnly=false package=com.android.systemui appop=NONE
-    mAttrs=WM.LayoutParams{(0,0)(fillxfill) gr=#53 sim=#31 ty=2024 fl=100
-    Requested w=1080 h=1920 mLayoutSeq=426
-    mBaseLayer=211000 mSubLayer=0 mAnimLayer=211000+0=211000 mLastLayer=211000
-'''
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), sample_dumpsys_output.split('\n'))):
-      package_name = self.device.DismissCrashDialogIfNeeded()
-      self.assertIsNone(package_name)
-
-  def testDismissCrashDialogIfNeeded_crashedPageckageFound(self):
-    sample_dumpsys_output = '''
-WINDOW MANAGER WINDOWS (dumpsys window windows)
-  Window #11 Window{f8b647a u0 SearchPanel}:
-    mDisplayId=0 mSession=Session{8 94:122} mClient=android.os.BinderProxy@1ba5
-    mOwnerUid=102 mShowToOwnerOnly=false package=com.android.systemui appop=NONE
-    mAttrs=WM.LayoutParams{(0,0)(fillxfill) gr=#53 sim=#31 ty=2024 fl=100
-    Requested w=1080 h=1920 mLayoutSeq=426
-    mBaseLayer=211000 mSubLayer=0 mAnimLayer=211000+0=211000 mLastLayer=211000
-  mHasPermanentDpad=false
-  mCurrentFocus=Window{3a27740f u0 Application Error: com.android.chrome}
-  mFocusedApp=AppWindowToken{470af6f token=Token{272ec24e ActivityRecord{t894}}}
-'''
-    with self.assertCalls(
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), sample_dumpsys_output.split('\n')),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '22'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '22'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['input', 'keyevent', '66'], check_return=True)),
-        (self.call.device.RunShellCommand(
-            ['dumpsys', 'window', 'windows'], check_return=True,
-            large_output=True), [])):
-      package_name = self.device.DismissCrashDialogIfNeeded()
-      self.assertEqual(package_name, 'com.android.chrome')
-
-
-class DeviceUtilsClientCache(DeviceUtilsTest):
-
-  def testClientCache_twoCaches(self):
-    self.device._cache['test'] = 0
-    client_cache_one = self.device.GetClientCache('ClientOne')
-    client_cache_one['test'] = 1
-    client_cache_two = self.device.GetClientCache('ClientTwo')
-    client_cache_two['test'] = 2
-    self.assertEqual(self.device._cache['test'], 0)
-    self.assertEqual(client_cache_one, {'test': 1})
-    self.assertEqual(client_cache_two, {'test': 2})
-    self.device._ClearCache()
-    self.assertTrue('test' not in self.device._cache)
-    self.assertEqual(client_cache_one, {})
-    self.assertEqual(client_cache_two, {})
-
-  def testClientCache_multipleInstances(self):
-    client_cache_one = self.device.GetClientCache('ClientOne')
-    client_cache_one['test'] = 1
-    client_cache_two = self.device.GetClientCache('ClientOne')
-    self.assertEqual(client_cache_one, {'test': 1})
-    self.assertEqual(client_cache_two, {'test': 1})
-    self.device._ClearCache()
-    self.assertEqual(client_cache_one, {})
-    self.assertEqual(client_cache_two, {})
-
-
-class DeviceUtilsHealthyDevicesTest(mock_calls.TestCase):
-
-  def testHealthyDevices_emptyBlacklist_defaultDeviceArg(self):
-    test_serials = ['0123456789abcdef', 'fedcba9876543210']
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials])):
-      blacklist = mock.NonCallableMock(**{'Read.return_value': []})
-      devices = device_utils.DeviceUtils.HealthyDevices(blacklist)
-    for serial, device in zip(test_serials, devices):
-      self.assertTrue(isinstance(device, device_utils.DeviceUtils))
-      self.assertEquals(serial, device.adb.GetDeviceSerial())
-
-  def testHealthyDevices_blacklist_defaultDeviceArg(self):
-    test_serials = ['0123456789abcdef', 'fedcba9876543210']
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials])):
-      blacklist = mock.NonCallableMock(
-          **{'Read.return_value': ['fedcba9876543210']})
-      devices = device_utils.DeviceUtils.HealthyDevices(blacklist)
-    self.assertEquals(1, len(devices))
-    self.assertTrue(isinstance(devices[0], device_utils.DeviceUtils))
-    self.assertEquals('0123456789abcdef', devices[0].adb.GetDeviceSerial())
-
-  def testHealthyDevices_noneDeviceArg_multiple_attached(self):
-    test_serials = ['0123456789abcdef', 'fedcba9876543210']
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials]),
-        (mock.call.devil.android.device_errors.MultipleDevicesError(mock.ANY),
-         _MockMultipleDevicesError())):
-      with self.assertRaises(_MockMultipleDevicesError):
-        device_utils.DeviceUtils.HealthyDevices(device_arg=None)
-
-  def testHealthyDevices_noneDeviceArg_one_attached(self):
-    test_serials = ['0123456789abcdef']
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials])):
-      devices = device_utils.DeviceUtils.HealthyDevices(device_arg=None)
-    self.assertEquals(1, len(devices))
-
-  def testHealthyDevices_noneDeviceArg_no_attached(self):
-    test_serials = []
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials])):
-      with self.assertRaises(device_errors.NoDevicesError):
-        device_utils.DeviceUtils.HealthyDevices(device_arg=None, retry=False)
-
-  def testHealthyDevices_noneDeviceArg_multiple_attached_ANDROID_SERIAL(self):
-    try:
-      os.environ['ANDROID_SERIAL'] = '0123456789abcdef'
-      with self.assertCalls():  # Should skip adb devices when device is known.
-        device_utils.DeviceUtils.HealthyDevices(device_arg=None)
-    finally:
-      del os.environ['ANDROID_SERIAL']
-
-  def testHealthyDevices_stringDeviceArg(self):
-    with self.assertCalls():  # Should skip adb devices when device is known.
-      devices = device_utils.DeviceUtils.HealthyDevices(
-          device_arg='0123456789abcdef')
-    self.assertEquals(1, len(devices))
-
-  def testHealthyDevices_EmptyListDeviceArg_multiple_attached(self):
-    test_serials = ['0123456789abcdef', 'fedcba9876543210']
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials])):
-      devices = device_utils.DeviceUtils.HealthyDevices(device_arg=())
-    self.assertEquals(2, len(devices))
-
-  def testHealthyDevices_EmptyListDeviceArg_ANDROID_SERIAL(self):
-    try:
-      os.environ['ANDROID_SERIAL'] = '0123456789abcdef'
-      with self.assertCalls():  # Should skip adb devices when device is known.
-        devices = device_utils.DeviceUtils.HealthyDevices(device_arg=())
-    finally:
-      del os.environ['ANDROID_SERIAL']
-    self.assertEquals(1, len(devices))
-
-  def testHealthyDevices_EmptyListDeviceArg_no_attached(self):
-    test_serials = []
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials])):
-      with self.assertRaises(device_errors.NoDevicesError):
-        device_utils.DeviceUtils.HealthyDevices(device_arg=[], retry=False)
-
-  def testHealthyDevices_EmptyListDeviceArg_no_attached_with_retry(self):
-    test_serials = []
-    with self.assertCalls(
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials]),
-        (mock.call.devil.android.sdk.adb_wrapper.AdbWrapper.Devices(),
-         [_AdbWrapperMock(s) for s in test_serials])):
-      with self.assertRaises(device_errors.NoDevicesError):
-        device_utils.DeviceUtils.HealthyDevices(device_arg=[], retry=True)
-
-  def testHealthyDevices_ListDeviceArg(self):
-    device_arg = ['0123456789abcdef', 'fedcba9876543210']
-    try:
-      os.environ['ANDROID_SERIAL'] = 'should-not-apply'
-      with self.assertCalls():  # Should skip adb devices when device is known.
-        devices = device_utils.DeviceUtils.HealthyDevices(device_arg=device_arg)
-    finally:
-      del os.environ['ANDROID_SERIAL']
-    self.assertEquals(2, len(devices))
-
-
-class DeviceUtilsRestartAdbdTest(DeviceUtilsTest):
-
-  def testAdbdRestart(self):
-    mock_temp_file = '/sdcard/temp-123.sh'
-    with self.assertCalls(
-        (mock.call.devil.android.device_temp_file.DeviceTempFile(
-            self.adb, suffix='.sh'), MockTempFile(mock_temp_file)),
-        self.call.device.WriteFile(mock.ANY, mock.ANY),
-        (self.call.device.RunShellCommand(
-            ['source', mock_temp_file], check_return=True, as_root=True)),
-        self.call.adb.WaitForDevice()):
-      self.device.RestartAdbd()
-
-
-class DeviceUtilsGrantPermissionsTest(DeviceUtilsTest):
-  def _PmGrantShellCall(self, package, permissions):
-    fragment = 'p=%s;for q in %s;' % (package, ' '.join(sorted(permissions)))
-    results = []
-    for permission, result in sorted(permissions.iteritems()):
-      if result:
-        output, status = result + '\n', 1
-      else:
-        output, status = '', 0
-      results.append(
-          '{output}{sep}{permission}{sep}{status}{sep}\n'.format(
-              output=output,
-              permission=permission,
-              status=status,
-              sep=device_utils._SHELL_OUTPUT_SEPARATOR
-          ))
-    return (
-        self.call.device.RunShellCommand(
-            AnyStringWith(fragment),
-            shell=True, raw_output=True, large_output=True, check_return=True),
-        ''.join(results))
-
-  def testGrantPermissions_none(self):
-    self.device.GrantPermissions('package', [])
-
-  def testGrantPermissions_underM(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      self.device.GrantPermissions('package', ['p1'])
-
-  def testGrantPermissions_one(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.MARSHMALLOW):
-      with self.assertCalls(
-          self._PmGrantShellCall('package', {'p1': 0})):
-        self.device.GrantPermissions('package', ['p1'])
-
-  def testGrantPermissions_multiple(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.MARSHMALLOW):
-      with self.assertCalls(
-          self._PmGrantShellCall('package', {'p1': 0, 'p2': 0})):
-        self.device.GrantPermissions('package', ['p1', 'p2'])
-
-  def testGrantPermissions_WriteExtrnalStorage(self):
-    WRITE = 'android.permission.WRITE_EXTERNAL_STORAGE'
-    READ = 'android.permission.READ_EXTERNAL_STORAGE'
-    with PatchLogger() as logger:
-      with self.patch_call(self.call.device.build_version_sdk,
-                           return_value=version_codes.MARSHMALLOW):
-        with self.assertCalls(
-            self._PmGrantShellCall('package', {READ: 0, WRITE: 0})):
-          self.device.GrantPermissions('package', [WRITE])
-      self.assertEqual(logger.warnings, [])
-
-  def testGrantPermissions_BlackList(self):
-    with PatchLogger() as logger:
-      with self.patch_call(self.call.device.build_version_sdk,
-                           return_value=version_codes.MARSHMALLOW):
-        with self.assertCalls(
-            self._PmGrantShellCall('package', {'p1': 0})):
-          self.device.GrantPermissions(
-              'package', ['p1', 'foo.permission.C2D_MESSAGE'])
-      self.assertEqual(logger.warnings, [])
-
-  def testGrantPermissions_unchangeablePermision(self):
-    error_message = (
-        'Operation not allowed: java.lang.SecurityException: '
-        'Permission UNCHANGEABLE is not a changeable permission type')
-    with PatchLogger() as logger:
-      with self.patch_call(self.call.device.build_version_sdk,
-                           return_value=version_codes.MARSHMALLOW):
-        with self.assertCalls(
-            self._PmGrantShellCall('package', {'UNCHANGEABLE': error_message})):
-          self.device.GrantPermissions('package', ['UNCHANGEABLE'])
-      self.assertEqual(
-          logger.warnings, [mock.ANY, AnyStringWith('UNCHANGEABLE')])
-
-
-class DeviecUtilsIsScreenOn(DeviceUtilsTest):
-
-  _L_SCREEN_ON = ['test=test mInteractive=true']
-  _K_SCREEN_ON = ['test=test mScreenOn=true']
-  _L_SCREEN_OFF = ['mInteractive=false']
-  _K_SCREEN_OFF = ['mScreenOn=false']
-
-  def testIsScreenOn_onPreL(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.KITKAT):
-      with self.assertCalls(
-          (self.call.device._RunPipedShellCommand(
-              'dumpsys input_method | grep mScreenOn'), self._K_SCREEN_ON)):
-        self.assertTrue(self.device.IsScreenOn())
-
-  def testIsScreenOn_onL(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCalls(
-          (self.call.device._RunPipedShellCommand(
-              'dumpsys input_method | grep mInteractive'), self._L_SCREEN_ON)):
-        self.assertTrue(self.device.IsScreenOn())
-
-  def testIsScreenOn_offPreL(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.KITKAT):
-      with self.assertCalls(
-          (self.call.device._RunPipedShellCommand(
-              'dumpsys input_method | grep mScreenOn'), self._K_SCREEN_OFF)):
-        self.assertFalse(self.device.IsScreenOn())
-
-  def testIsScreenOn_offL(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCalls(
-          (self.call.device._RunPipedShellCommand(
-              'dumpsys input_method | grep mInteractive'), self._L_SCREEN_OFF)):
-        self.assertFalse(self.device.IsScreenOn())
-
-  def testIsScreenOn_noOutput(self):
-    with self.patch_call(self.call.device.build_version_sdk,
-                         return_value=version_codes.LOLLIPOP):
-      with self.assertCalls(
-          (self.call.device._RunPipedShellCommand(
-              'dumpsys input_method | grep mInteractive'), [])):
-        with self.assertRaises(device_errors.CommandFailedError):
-          self.device.IsScreenOn()
-
-
-class DeviecUtilsSetScreen(DeviceUtilsTest):
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetScren_alreadySet(self):
-    with self.assertCalls(
-        (self.call.device.IsScreenOn(), False)):
-      self.device.SetScreen(False)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetScreen_on(self):
-    with self.assertCalls(
-        (self.call.device.IsScreenOn(), False),
-        (self.call.device.SendKeyEvent(keyevent.KEYCODE_POWER), None),
-        (self.call.device.IsScreenOn(), True)):
-      self.device.SetScreen(True)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetScreen_off(self):
-    with self.assertCalls(
-        (self.call.device.IsScreenOn(), True),
-        (self.call.device.SendKeyEvent(keyevent.KEYCODE_POWER), None),
-        (self.call.device.IsScreenOn(), False)):
-      self.device.SetScreen(False)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testSetScreen_slow(self):
-    with self.assertCalls(
-        (self.call.device.IsScreenOn(), True),
-        (self.call.device.SendKeyEvent(keyevent.KEYCODE_POWER), None),
-        (self.call.device.IsScreenOn(), True),
-        (self.call.device.IsScreenOn(), True),
-        (self.call.device.IsScreenOn(), False)):
-      self.device.SetScreen(False)
-
-class DeviecUtilsLoadCacheData(DeviceUtilsTest):
-
-  def testTokenMissing(self):
-    with self.assertCalls(
-        self.EnsureCacheInitialized()):
-      self.assertFalse(self.device.LoadCacheData('{}'))
-
-  def testTokenStale(self):
-    with self.assertCalls(
-        self.EnsureCacheInitialized()):
-      self.assertFalse(self.device.LoadCacheData('{"token":"foo"}'))
-
-  def testTokenMatches(self):
-    with self.assertCalls(
-        self.EnsureCacheInitialized()):
-      self.assertTrue(self.device.LoadCacheData('{"token":"TOKEN"}'))
-
-  def testDumpThenLoad(self):
-    with self.assertCalls(
-        self.EnsureCacheInitialized()):
-      data = json.loads(self.device.DumpCacheData())
-      data['token'] = 'TOKEN'
-      self.assertTrue(self.device.LoadCacheData(json.dumps(data)))
-
-
-class DeviceUtilsGetIMEITest(DeviceUtilsTest):
-
-  def testSuccessfulDumpsys(self):
-    dumpsys_output = (
-        'Phone Subscriber Info:'
-        '  Phone Type = GSM'
-        '  Device ID = 123454321')
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '19'),
-        (self.call.adb.Shell('dumpsys iphonesubinfo'), dumpsys_output)):
-      self.assertEquals(self.device.GetIMEI(), '123454321')
-
-  def testSuccessfulServiceCall(self):
-    service_output = """
-        Result: Parcel(\n'
-          0x00000000: 00000000 0000000f 00350033 00360033 '........7.6.5.4.'
-          0x00000010: 00360032 00370030 00300032 00300039 '3.2.1.0.1.2.3.4.'
-          0x00000020: 00380033 00000039                   '5.6.7...        ')
-    """
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '24'),
-        (self.call.adb.Shell('service call iphonesubinfo 1'), service_output)):
-      self.assertEquals(self.device.GetIMEI(), '765432101234567')
-
-  def testNoIMEI(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '19'),
-        (self.call.adb.Shell('dumpsys iphonesubinfo'), 'no device id')):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.GetIMEI()
-
-  def testAdbError(self):
-    with self.assertCalls(
-        (self.call.device.GetProp('ro.build.version.sdk', cache=True), '24'),
-        (self.call.adb.Shell('service call iphonesubinfo 1'),
-         self.ShellError())):
-      with self.assertRaises(device_errors.CommandFailedError):
-        self.device.GetIMEI()
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/fastboot_utils.py b/systrace/catapult/devil/devil/android/fastboot_utils.py
deleted file mode 100644
index 3bd3ee8..0000000
--- a/systrace/catapult/devil/devil/android/fastboot_utils.py
+++ /dev/null
@@ -1,256 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Provides a variety of device interactions based on fastboot."""
-# pylint: disable=unused-argument
-
-import collections
-import contextlib
-import fnmatch
-import logging
-import os
-import re
-
-from devil.android import decorators
-from devil.android import device_errors
-from devil.android.sdk import fastboot
-from devil.utils import timeout_retry
-
-logger = logging.getLogger(__name__)
-
-_DEFAULT_TIMEOUT = 30
-_DEFAULT_RETRIES = 3
-_FASTBOOT_REBOOT_TIMEOUT = 10 * _DEFAULT_TIMEOUT
-_KNOWN_PARTITIONS = collections.OrderedDict([
-      ('bootloader', {'image': 'bootloader*.img', 'restart': True}),
-      ('radio', {'image': 'radio*.img', 'restart': True}),
-      ('boot', {'image': 'boot.img'}),
-      ('recovery', {'image': 'recovery.img'}),
-      ('system', {'image': 'system.img'}),
-      ('userdata', {'image': 'userdata.img', 'wipe_only': True}),
-      ('cache', {'image': 'cache.img', 'wipe_only': True}),
-      ('vendor', {'image': 'vendor*.img', 'optional': True}),
-  ])
-ALL_PARTITIONS = _KNOWN_PARTITIONS.keys()
-
-
-def _FindAndVerifyPartitionsAndImages(partitions, directory):
-  """Validate partitions and images.
-
-  Validate all partition names and partition directories. Cannot stop mid
-  flash so its important to validate everything first.
-
-  Args:
-    Partitions: partitions to be tested.
-    directory: directory containing the images.
-
-  Returns:
-    Dictionary with exact partition, image name mapping.
-  """
-
-  files = os.listdir(directory)
-  return_dict = collections.OrderedDict()
-
-  def find_file(pattern):
-    for filename in files:
-      if fnmatch.fnmatch(filename, pattern):
-        return os.path.join(directory, filename)
-    return None
-  for partition in partitions:
-    partition_info = _KNOWN_PARTITIONS[partition]
-    image_file = find_file(partition_info['image'])
-    if image_file:
-      return_dict[partition] = image_file
-    elif not partition_info.get('optional'):
-      raise device_errors.FastbootCommandFailedError(
-          'Failed to flash device. Could not find image for %s.',
-          partition_info['image'])
-  return return_dict
-
-
-class FastbootUtils(object):
-
-  _FASTBOOT_WAIT_TIME = 1
-  _BOARD_VERIFICATION_FILE = 'android-info.txt'
-
-  def __init__(self, device, fastbooter=None, default_timeout=_DEFAULT_TIMEOUT,
-               default_retries=_DEFAULT_RETRIES):
-    """FastbootUtils constructor.
-
-    Example Usage to flash a device:
-      fastboot = fastboot_utils.FastbootUtils(device)
-      fastboot.FlashDevice('/path/to/build/directory')
-
-    Args:
-      device: A DeviceUtils instance.
-      fastbooter: Optional fastboot object. If none is passed, one will
-        be created.
-      default_timeout: An integer containing the default number of seconds to
-        wait for an operation to complete if no explicit value is provided.
-      default_retries: An integer containing the default number or times an
-        operation should be retried on failure if no explicit value is provided.
-    """
-    self._device = device
-    self._board = device.product_board
-    self._serial = str(device)
-    self._default_timeout = default_timeout
-    self._default_retries = default_retries
-    if fastbooter:
-      self.fastboot = fastbooter
-    else:
-      self.fastboot = fastboot.Fastboot(self._serial)
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def WaitForFastbootMode(self, timeout=None, retries=None):
-    """Wait for device to boot into fastboot mode.
-
-    This waits for the device serial to show up in fastboot devices output.
-    """
-    def fastboot_mode():
-      return self._serial in self.fastboot.Devices()
-
-    timeout_retry.WaitFor(fastboot_mode, wait_period=self._FASTBOOT_WAIT_TIME)
-
-  @decorators.WithTimeoutAndRetriesFromInstance(
-      min_default_timeout=_FASTBOOT_REBOOT_TIMEOUT)
-  def EnableFastbootMode(self, timeout=None, retries=None):
-    """Reboots phone into fastboot mode.
-
-    Roots phone if needed, then reboots phone into fastboot mode and waits.
-    """
-    self._device.EnableRoot()
-    self._device.adb.Reboot(to_bootloader=True)
-    self.WaitForFastbootMode()
-
-  @decorators.WithTimeoutAndRetriesFromInstance(
-      min_default_timeout=_FASTBOOT_REBOOT_TIMEOUT)
-  def Reboot(
-      self, bootloader=False, wait_for_reboot=True, timeout=None, retries=None):
-    """Reboots out of fastboot mode.
-
-    It reboots the phone either back into fastboot, or to a regular boot. It
-    then blocks until the device is ready.
-
-    Args:
-      bootloader: If set to True, reboots back into bootloader.
-    """
-    if bootloader:
-      self.fastboot.RebootBootloader()
-      self.WaitForFastbootMode()
-    else:
-      self.fastboot.Reboot()
-      if wait_for_reboot:
-        self._device.WaitUntilFullyBooted(timeout=_FASTBOOT_REBOOT_TIMEOUT)
-
-  def _VerifyBoard(self, directory):
-    """Validate as best as possible that the android build matches the device.
-
-    Goes through build files and checks if the board name is mentioned in the
-    |self._BOARD_VERIFICATION_FILE| or in the build archive.
-
-    Args:
-      directory: directory where build files are located.
-    """
-    files = os.listdir(directory)
-    board_regex = re.compile(r'require board=(\w+)')
-    if self._BOARD_VERIFICATION_FILE in files:
-      with open(os.path.join(directory, self._BOARD_VERIFICATION_FILE)) as f:
-        for line in f:
-          m = board_regex.match(line)
-          if m:
-            board_name = m.group(1)
-            if board_name == self._board:
-              return True
-            elif board_name:
-              return False
-            else:
-              logger.warning('No board type found in %s.',
-                             self._BOARD_VERIFICATION_FILE)
-    else:
-      logger.warning('%s not found. Unable to use it to verify device.',
-                     self._BOARD_VERIFICATION_FILE)
-
-    zip_regex = re.compile(r'.*%s.*\.zip' % re.escape(self._board))
-    for f in files:
-      if zip_regex.match(f):
-        return True
-
-    return False
-
-  def _FlashPartitions(self, partitions, directory, wipe=False, force=False):
-    """Flashes all given partiitons with all given images.
-
-    Args:
-      partitions: List of partitions to flash.
-      directory: Directory where all partitions can be found.
-      wipe: If set to true, will automatically detect if cache and userdata
-          partitions are sent, and if so ignore them.
-      force: boolean to decide to ignore board name safety checks.
-
-    Raises:
-      device_errors.CommandFailedError(): If image cannot be found or if bad
-          partition name is give.
-    """
-    if not self._VerifyBoard(directory):
-      if force:
-        logger.warning('Could not verify build is meant to be installed on '
-                       'the current device type, but force flag is set. '
-                       'Flashing device. Possibly dangerous operation.')
-      else:
-        raise device_errors.CommandFailedError(
-            'Could not verify build is meant to be installed on the current '
-            'device type. Run again with force=True to force flashing with an '
-            'unverified board.')
-
-    flash_image_files = _FindAndVerifyPartitionsAndImages(partitions, directory)
-    partitions = flash_image_files.keys()
-    for partition in partitions:
-      if _KNOWN_PARTITIONS[partition].get('wipe_only') and not wipe:
-        logger.info(
-            'Not flashing in wipe mode. Skipping partition %s.', partition)
-      else:
-        logger.info(
-            'Flashing %s with %s', partition, flash_image_files[partition])
-        self.fastboot.Flash(partition, flash_image_files[partition])
-        if _KNOWN_PARTITIONS[partition].get('restart', False):
-          self.Reboot(bootloader=True)
-
-  @contextlib.contextmanager
-  def FastbootMode(self, wait_for_reboot=True, timeout=None, retries=None):
-    """Context manager that enables fastboot mode, and reboots after.
-
-    Example usage:
-      with FastbootMode():
-        Flash Device
-      # Anything that runs after flashing.
-    """
-    self.EnableFastbootMode()
-    self.fastboot.SetOemOffModeCharge(False)
-    try:
-      yield self
-    finally:
-      self.fastboot.SetOemOffModeCharge(True)
-      self.Reboot(wait_for_reboot=wait_for_reboot)
-
-  def FlashDevice(self, directory, partitions=None, wipe=False):
-    """Flash device with build in |directory|.
-
-    Directory must contain bootloader, radio, boot, recovery, system, userdata,
-    and cache .img files from an android build. This is a dangerous operation so
-    use with care.
-
-    Args:
-      fastboot: A FastbootUtils instance.
-      directory: Directory with build files.
-      wipe: Wipes cache and userdata if set to true.
-      partitions: List of partitions to flash. Defaults to all.
-    """
-    if partitions is None:
-      partitions = ALL_PARTITIONS
-    # If a device is wiped, then it will no longer have adb keys so it cannot be
-    # communicated with to verify that it is rebooted. It is up to the user of
-    # this script to ensure that the adb keys are set on the device after using
-    # this to wipe a device.
-    with self.FastbootMode(wait_for_reboot=not wipe):
-      self._FlashPartitions(partitions, directory, wipe=wipe)
diff --git a/systrace/catapult/devil/devil/android/fastboot_utils_test.py b/systrace/catapult/devil/devil/android/fastboot_utils_test.py
deleted file mode 100755
index 0562974..0000000
--- a/systrace/catapult/devil/devil/android/fastboot_utils_test.py
+++ /dev/null
@@ -1,375 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for the contents of fastboot_utils.py
-"""
-
-# pylint: disable=protected-access,unused-argument
-
-import collections
-import io
-import logging
-import unittest
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android import fastboot_utils
-from devil.android.sdk import fastboot
-from devil.utils import mock_calls
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-_BOARD = 'board_type'
-_SERIAL = '0123456789abcdef'
-_PARTITIONS = [
-    'bootloader', 'radio', 'boot', 'recovery', 'system', 'userdata', 'cache']
-_IMAGES = collections.OrderedDict([
-    ('bootloader', 'bootloader.img'),
-    ('radio', 'radio.img'),
-    ('boot', 'boot.img'),
-    ('recovery', 'recovery.img'),
-    ('system', 'system.img'),
-    ('userdata', 'userdata.img'),
-    ('cache', 'cache.img')
-])
-_VALID_FILES = [_BOARD + '.zip', 'android-info.txt']
-_INVALID_FILES = ['test.zip', 'android-info.txt']
-
-
-class MockFile(object):
-
-  def __init__(self, name='/tmp/some/file'):
-    self.file = mock.MagicMock(spec=file)
-    self.file.name = name
-
-  def __enter__(self):
-    return self.file
-
-  def __exit__(self, exc_type, exc_val, exc_tb):
-    pass
-
-  @property
-  def name(self):
-    return self.file.name
-
-
-def _FastbootWrapperMock(test_serial):
-  fastbooter = mock.Mock(spec=fastboot.Fastboot)
-  fastbooter.__str__ = mock.Mock(return_value=test_serial)
-  fastbooter.Devices.return_value = [test_serial]
-  return fastbooter
-
-
-def _DeviceUtilsMock(test_serial):
-  device = mock.Mock(spec=device_utils.DeviceUtils)
-  device.__str__ = mock.Mock(return_value=test_serial)
-  device.product_board = mock.Mock(return_value=_BOARD)
-  device.adb = mock.Mock()
-  return device
-
-
-class FastbootUtilsTest(mock_calls.TestCase):
-
-  def setUp(self):
-    self.device_utils_mock = _DeviceUtilsMock(_SERIAL)
-    self.fastboot_wrapper = _FastbootWrapperMock(_SERIAL)
-    self.fastboot = fastboot_utils.FastbootUtils(
-        self.device_utils_mock, fastbooter=self.fastboot_wrapper,
-        default_timeout=2, default_retries=0)
-    self.fastboot._board = _BOARD
-
-
-class FastbootUtilsInitTest(FastbootUtilsTest):
-
-  def testInitWithDeviceUtil(self):
-    f = fastboot_utils.FastbootUtils(self.device_utils_mock)
-    self.assertEqual(str(self.device_utils_mock), str(f._device))
-
-  def testInitWithMissing_fails(self):
-    with self.assertRaises(AttributeError):
-      fastboot_utils.FastbootUtils(None)
-    with self.assertRaises(AttributeError):
-      fastboot_utils.FastbootUtils('')
-
-  def testPartitionOrdering(self):
-    parts = ['bootloader', 'radio', 'boot', 'recovery', 'system', 'userdata',
-             'cache', 'vendor']
-    self.assertListEqual(fastboot_utils.ALL_PARTITIONS, parts)
-
-
-class FastbootUtilsWaitForFastbootMode(FastbootUtilsTest):
-
-  # If this test fails by timing out after 1 second.
-  @mock.patch('time.sleep', mock.Mock())
-  def testWaitForFastbootMode(self):
-    self.fastboot.WaitForFastbootMode()
-
-
-class FastbootUtilsEnableFastbootMode(FastbootUtilsTest):
-
-  def testEnableFastbootMode(self):
-    with self.assertCalls(
-        self.call.fastboot._device.EnableRoot(),
-        self.call.fastboot._device.adb.Reboot(to_bootloader=True),
-        self.call.fastboot.WaitForFastbootMode()):
-      self.fastboot.EnableFastbootMode()
-
-
-class FastbootUtilsReboot(FastbootUtilsTest):
-
-  def testReboot_bootloader(self):
-    with self.assertCalls(
-        self.call.fastboot.fastboot.RebootBootloader(),
-        self.call.fastboot.WaitForFastbootMode()):
-      self.fastboot.Reboot(bootloader=True)
-
-  def testReboot_normal(self):
-    with self.assertCalls(
-        self.call.fastboot.fastboot.Reboot(),
-        self.call.fastboot._device.WaitUntilFullyBooted(timeout=mock.ANY)):
-      self.fastboot.Reboot()
-
-
-class FastbootUtilsFlashPartitions(FastbootUtilsTest):
-
-  def testFlashPartitions_wipe(self):
-    with self.assertCalls(
-        (self.call.fastboot._VerifyBoard('test'), True),
-        (mock.call.devil.android.fastboot_utils.
-            _FindAndVerifyPartitionsAndImages(_PARTITIONS, 'test'), _IMAGES),
-        (self.call.fastboot.fastboot.Flash('bootloader', 'bootloader.img')),
-        (self.call.fastboot.Reboot(bootloader=True)),
-        (self.call.fastboot.fastboot.Flash('radio', 'radio.img')),
-        (self.call.fastboot.Reboot(bootloader=True)),
-        (self.call.fastboot.fastboot.Flash('boot', 'boot.img')),
-        (self.call.fastboot.fastboot.Flash('recovery', 'recovery.img')),
-        (self.call.fastboot.fastboot.Flash('system', 'system.img')),
-        (self.call.fastboot.fastboot.Flash('userdata', 'userdata.img')),
-        (self.call.fastboot.fastboot.Flash('cache', 'cache.img'))):
-      self.fastboot._FlashPartitions(_PARTITIONS, 'test', wipe=True)
-
-  def testFlashPartitions_noWipe(self):
-    with self.assertCalls(
-        (self.call.fastboot._VerifyBoard('test'), True),
-        (mock.call.devil.android.fastboot_utils.
-            _FindAndVerifyPartitionsAndImages(_PARTITIONS, 'test'), _IMAGES),
-        (self.call.fastboot.fastboot.Flash('bootloader', 'bootloader.img')),
-        (self.call.fastboot.Reboot(bootloader=True)),
-        (self.call.fastboot.fastboot.Flash('radio', 'radio.img')),
-        (self.call.fastboot.Reboot(bootloader=True)),
-        (self.call.fastboot.fastboot.Flash('boot', 'boot.img')),
-        (self.call.fastboot.fastboot.Flash('recovery', 'recovery.img')),
-        (self.call.fastboot.fastboot.Flash('system', 'system.img'))):
-      self.fastboot._FlashPartitions(_PARTITIONS, 'test')
-
-
-class FastbootUtilsFastbootMode(FastbootUtilsTest):
-
-  def testFastbootMode_goodWait(self):
-    with self.assertCalls(
-        self.call.fastboot.EnableFastbootMode(),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(False),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(True),
-        self.call.fastboot.Reboot(wait_for_reboot=True)):
-      with self.fastboot.FastbootMode() as fbm:
-        self.assertEqual(self.fastboot, fbm)
-
-  def testFastbootMode_goodNoWait(self):
-    with self.assertCalls(
-        self.call.fastboot.EnableFastbootMode(),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(False),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(True),
-        self.call.fastboot.Reboot(wait_for_reboot=False)):
-      with self.fastboot.FastbootMode(wait_for_reboot=False) as fbm:
-        self.assertEqual(self.fastboot, fbm)
-
-  def testFastbootMode_exception(self):
-    with self.assertCalls(
-        self.call.fastboot.EnableFastbootMode(),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(False),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(True),
-        self.call.fastboot.Reboot(wait_for_reboot=True)):
-      with self.assertRaises(NotImplementedError):
-        with self.fastboot.FastbootMode() as fbm:
-          self.assertEqual(self.fastboot, fbm)
-          raise NotImplementedError
-
-  def testFastbootMode_exceptionInEnableFastboot(self):
-    self.fastboot.EnableFastbootMode = mock.Mock()
-    self.fastboot.EnableFastbootMode.side_effect = NotImplementedError
-    with self.assertRaises(NotImplementedError):
-      with self.fastboot.FastbootMode():
-        pass
-
-
-class FastbootUtilsVerifyBoard(FastbootUtilsTest):
-
-  def testVerifyBoard_bothValid(self):
-    mock_file = io.StringIO(u'require board=%s\n' % _BOARD)
-    with mock.patch('__builtin__.open', return_value=mock_file, create=True):
-      with mock.patch('os.listdir', return_value=_VALID_FILES):
-        self.assertTrue(self.fastboot._VerifyBoard('test'))
-
-  def testVerifyBoard_BothNotValid(self):
-    mock_file = io.StringIO(u'abc')
-    with mock.patch('__builtin__.open', return_value=mock_file, create=True):
-      with mock.patch('os.listdir', return_value=_INVALID_FILES):
-        self.assertFalse(self.assertFalse(self.fastboot._VerifyBoard('test')))
-
-  def testVerifyBoard_FileNotFoundZipValid(self):
-    with mock.patch('os.listdir', return_value=[_BOARD + '.zip']):
-      self.assertTrue(self.fastboot._VerifyBoard('test'))
-
-  def testVerifyBoard_ZipNotFoundFileValid(self):
-    mock_file = io.StringIO(u'require board=%s\n' % _BOARD)
-    with mock.patch('__builtin__.open', return_value=mock_file, create=True):
-      with mock.patch('os.listdir', return_value=['android-info.txt']):
-        self.assertTrue(self.fastboot._VerifyBoard('test'))
-
-  def testVerifyBoard_zipNotValidFileIs(self):
-    mock_file = io.StringIO(u'require board=%s\n' % _BOARD)
-    with mock.patch('__builtin__.open', return_value=mock_file, create=True):
-      with mock.patch('os.listdir', return_value=_INVALID_FILES):
-        self.assertTrue(self.fastboot._VerifyBoard('test'))
-
-  def testVerifyBoard_fileNotValidZipIs(self):
-    mock_file = io.StringIO(u'require board=WrongBoard')
-    with mock.patch('__builtin__.open', return_value=mock_file, create=True):
-      with mock.patch('os.listdir', return_value=_VALID_FILES):
-        self.assertFalse(self.fastboot._VerifyBoard('test'))
-
-  def testVerifyBoard_noBoardInFileValidZip(self):
-    mock_file = io.StringIO(u'Regex wont match')
-    with mock.patch('__builtin__.open', return_value=mock_file, create=True):
-      with mock.patch('os.listdir', return_value=_VALID_FILES):
-        self.assertTrue(self.fastboot._VerifyBoard('test'))
-
-  def testVerifyBoard_noBoardInFileInvalidZip(self):
-    mock_file = io.StringIO(u'Regex wont match')
-    with mock.patch('__builtin__.open', return_value=mock_file, create=True):
-      with mock.patch('os.listdir', return_value=_INVALID_FILES):
-        self.assertFalse(self.fastboot._VerifyBoard('test'))
-
-
-class FastbootUtilsFindAndVerifyPartitionsAndImages(FastbootUtilsTest):
-
-  def testFindAndVerifyPartitionsAndImages_validNoVendor(self):
-    PARTITIONS = [
-        'bootloader', 'radio', 'boot', 'recovery', 'system', 'userdata',
-        'cache', 'vendor'
-    ]
-    files = [
-        'bootloader-test-.img',
-        'radio123.img',
-        'boot.img',
-        'recovery.img',
-        'system.img',
-        'userdata.img',
-        'cache.img'
-    ]
-    img_check = collections.OrderedDict([
-      ('bootloader', 'test/bootloader-test-.img'),
-      ('radio', 'test/radio123.img'),
-      ('boot', 'test/boot.img'),
-      ('recovery', 'test/recovery.img'),
-      ('system', 'test/system.img'),
-      ('userdata', 'test/userdata.img'),
-      ('cache', 'test/cache.img'),
-    ])
-    parts_check = [
-        'bootloader', 'radio', 'boot', 'recovery', 'system', 'userdata',
-        'cache'
-    ]
-    with mock.patch('os.listdir', return_value=files):
-      imgs = fastboot_utils._FindAndVerifyPartitionsAndImages(
-          PARTITIONS, 'test')
-      parts = imgs.keys()
-      self.assertDictEqual(imgs, img_check)
-      self.assertListEqual(parts, parts_check)
-
-  def testFindAndVerifyPartitionsAndImages_validVendor(self):
-    PARTITIONS = [
-        'bootloader', 'radio', 'boot', 'recovery', 'system', 'userdata',
-        'cache', 'vendor'
-    ]
-    files = [
-        'bootloader-test-.img',
-        'radio123.img',
-        'boot.img',
-        'recovery.img',
-        'system.img',
-        'userdata.img',
-        'cache.img',
-        'vendor.img'
-    ]
-    img_check = {
-      'bootloader': 'test/bootloader-test-.img',
-      'radio': 'test/radio123.img',
-      'boot': 'test/boot.img',
-      'recovery': 'test/recovery.img',
-      'system': 'test/system.img',
-      'userdata': 'test/userdata.img',
-      'cache': 'test/cache.img',
-      'vendor': 'test/vendor.img',
-    }
-    parts_check = [
-        'bootloader', 'radio', 'boot', 'recovery', 'system', 'userdata',
-        'cache', 'vendor'
-    ]
-
-    with mock.patch('os.listdir', return_value=files):
-      imgs = fastboot_utils._FindAndVerifyPartitionsAndImages(
-          PARTITIONS, 'test')
-      parts = imgs.keys()
-      self.assertDictEqual(imgs, img_check)
-      self.assertListEqual(parts, parts_check)
-
-  def testFindAndVerifyPartitionsAndImages_badPartition(self):
-    with mock.patch('os.listdir', return_value=['test']):
-      with self.assertRaises(KeyError):
-        fastboot_utils._FindAndVerifyPartitionsAndImages(['test'], 'test')
-
-  def testFindAndVerifyPartitionsAndImages_noFile(self):
-    with mock.patch('os.listdir', return_value=['test']):
-      with self.assertRaises(device_errors.FastbootCommandFailedError):
-        fastboot_utils._FindAndVerifyPartitionsAndImages(['cache'], 'test')
-
-
-class FastbootUtilsFlashDevice(FastbootUtilsTest):
-
-  def testFlashDevice_wipe(self):
-    with self.assertCalls(
-        self.call.fastboot.EnableFastbootMode(),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(False),
-        self.call.fastboot._FlashPartitions(mock.ANY, 'test', wipe=True),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(True),
-        self.call.fastboot.Reboot(wait_for_reboot=False)):
-      self.fastboot.FlashDevice('test', wipe=True)
-
-  def testFlashDevice_noWipe(self):
-    with self.assertCalls(
-        self.call.fastboot.EnableFastbootMode(),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(False),
-        self.call.fastboot._FlashPartitions(mock.ANY, 'test', wipe=False),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(True),
-        self.call.fastboot.Reboot(wait_for_reboot=True)):
-      self.fastboot.FlashDevice('test', wipe=False)
-
-  def testFlashDevice_partitions(self):
-    with self.assertCalls(
-        self.call.fastboot.EnableFastbootMode(),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(False),
-        self.call.fastboot._FlashPartitions(['boot'], 'test', wipe=False),
-        self.call.fastboot.fastboot.SetOemOffModeCharge(True),
-        self.call.fastboot.Reboot(wait_for_reboot=True)):
-      self.fastboot.FlashDevice('test', partitions=['boot'], wipe=False)
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/flag_changer.py b/systrace/catapult/devil/devil/android/flag_changer.py
deleted file mode 100644
index 0055e23..0000000
--- a/systrace/catapult/devil/devil/android/flag_changer.py
+++ /dev/null
@@ -1,311 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import logging
-import posixpath
-import re
-
-from devil.android.sdk import version_codes
-
-
-logger = logging.getLogger(__name__)
-
-
-_CMDLINE_DIR = '/data/local/tmp'
-_CMDLINE_DIR_LEGACY = '/data/local'
-_RE_NEEDS_QUOTING = re.compile(r'[^\w-]')  # Not in: alphanumeric or hyphens.
-_QUOTES = '"\''  # Either a single or a double quote.
-_ESCAPE = '\\'  # A backslash.
-
-
-@contextlib.contextmanager
-def CustomCommandLineFlags(device, cmdline_name, flags):
-  """Context manager to change Chrome's command line temporarily.
-
-  Example:
-
-      with flag_changer.TemporaryCommandLineFlags(device, name, flags):
-        # Launching Chrome will use the provided flags.
-
-      # Previous set of flags on the device is now restored.
-
-  Args:
-    device: A DeviceUtils instance.
-    cmdline_name: Name of the command line file where to store flags.
-    flags: A sequence of command line flags to set.
-  """
-  changer = FlagChanger(device, cmdline_name)
-  try:
-    changer.ReplaceFlags(flags)
-    yield
-  finally:
-    changer.Restore()
-
-
-class FlagChanger(object):
-  """Changes the flags Chrome runs with.
-
-    Flags can be temporarily set for a particular set of unit tests.  These
-    tests should call Restore() to revert the flags to their original state
-    once the tests have completed.
-  """
-
-  def __init__(self, device, cmdline_file):
-    """Initializes the FlagChanger and records the original arguments.
-
-    Args:
-      device: A DeviceUtils instance.
-      cmdline_file: Name of the command line file where to store flags.
-    """
-    self._device = device
-    self._should_reset_enforce = False
-
-    if posixpath.sep in cmdline_file:
-      raise ValueError(
-          'cmdline_file should be a file name only, do not include path'
-          ' separators in: %s' % cmdline_file)
-    self._cmdline_path = posixpath.join(_CMDLINE_DIR, cmdline_file)
-
-    cmdline_path_legacy = posixpath.join(_CMDLINE_DIR_LEGACY, cmdline_file)
-    if self._device.PathExists(cmdline_path_legacy):
-      logger.warning(
-            'Removing legacy command line file %r.', cmdline_path_legacy)
-      self._device.RemovePath(cmdline_path_legacy, as_root=True)
-
-    self._state_stack = [None]  # Actual state is set by GetCurrentFlags().
-    self.GetCurrentFlags()
-
-  def GetCurrentFlags(self):
-    """Read the current flags currently stored in the device.
-
-    Also updates the internal state of the flag_changer.
-
-    Returns:
-      A list of flags.
-    """
-    if self._device.PathExists(self._cmdline_path):
-      command_line = self._device.ReadFile(self._cmdline_path).strip()
-    else:
-      command_line = ''
-    flags = _ParseFlags(command_line)
-
-    # Store the flags as a set to facilitate adding and removing flags.
-    self._state_stack[-1] = set(flags)
-    return flags
-
-  def ReplaceFlags(self, flags):
-    """Replaces the flags in the command line with the ones provided.
-       Saves the current flags state on the stack, so a call to Restore will
-       change the state back to the one preceeding the call to ReplaceFlags.
-
-    Args:
-      flags: A sequence of command line flags to set, eg. ['--single-process'].
-             Note: this should include flags only, not the name of a command
-             to run (ie. there is no need to start the sequence with 'chrome').
-
-    Returns:
-      A list with the flags now stored on the device.
-    """
-    new_flags = set(flags)
-    self._state_stack.append(new_flags)
-    self._SetPermissive()
-    return self._UpdateCommandLineFile()
-
-  def AddFlags(self, flags):
-    """Appends flags to the command line if they aren't already there.
-       Saves the current flags state on the stack, so a call to Restore will
-       change the state back to the one preceeding the call to AddFlags.
-
-    Args:
-      flags: A sequence of flags to add on, eg. ['--single-process'].
-
-    Returns:
-      A list with the flags now stored on the device.
-    """
-    return self.PushFlags(add=flags)
-
-  def RemoveFlags(self, flags):
-    """Removes flags from the command line, if they exist.
-       Saves the current flags state on the stack, so a call to Restore will
-       change the state back to the one preceeding the call to RemoveFlags.
-
-       Note that calling RemoveFlags after AddFlags will result in having
-       two nested states.
-
-    Args:
-      flags: A sequence of flags to remove, eg. ['--single-process'].  Note
-             that we expect a complete match when removing flags; if you want
-             to remove a switch with a value, you must use the exact string
-             used to add it in the first place.
-
-    Returns:
-      A list with the flags now stored on the device.
-    """
-    return self.PushFlags(remove=flags)
-
-  def PushFlags(self, add=None, remove=None):
-    """Appends and removes flags to/from the command line if they aren't already
-       there. Saves the current flags state on the stack, so a call to Restore
-       will change the state back to the one preceeding the call to PushFlags.
-
-    Args:
-      add: A list of flags to add on, eg. ['--single-process'].
-      remove: A list of flags to remove, eg. ['--single-process'].  Note that we
-              expect a complete match when removing flags; if you want to remove
-              a switch with a value, you must use the exact string used to add
-              it in the first place.
-
-    Returns:
-      A list with the flags now stored on the device.
-    """
-    new_flags = self._state_stack[-1].copy()
-    if add:
-      new_flags.update(add)
-    if remove:
-      new_flags.difference_update(remove)
-    return self.ReplaceFlags(new_flags)
-
-  def _SetPermissive(self):
-    """Set SELinux to permissive, if needed.
-
-    On Android N and above this is needed in order to allow Chrome to read the
-    command line file.
-
-    TODO(crbug.com/699082): Remove when a better solution exists.
-    """
-    if (self._device.build_version_sdk >= version_codes.NOUGAT and
-        self._device.GetEnforce()):
-      self._device.SetEnforce(enabled=False)
-      self._should_reset_enforce = True
-
-  def _ResetEnforce(self):
-    """Restore SELinux policy if it had been previously made permissive."""
-    if self._should_reset_enforce:
-      self._device.SetEnforce(enabled=True)
-      self._should_reset_enforce = False
-
-  def Restore(self):
-    """Restores the flags to their state prior to the last AddFlags or
-       RemoveFlags call.
-
-    Returns:
-      A list with the flags now stored on the device.
-    """
-    # The initial state must always remain on the stack.
-    assert len(self._state_stack) > 1, (
-      "Mismatch between calls to Add/RemoveFlags and Restore")
-    self._state_stack.pop()
-    if len(self._state_stack) == 1:
-      self._ResetEnforce()
-    return self._UpdateCommandLineFile()
-
-  def _UpdateCommandLineFile(self):
-    """Writes out the command line to the file, or removes it if empty.
-
-    Returns:
-      A list with the flags now stored on the device.
-    """
-    command_line = _SerializeFlags(self._state_stack[-1])
-    if command_line is not None:
-      self._device.WriteFile(self._cmdline_path, command_line)
-    else:
-      self._device.RemovePath(self._cmdline_path, force=True)
-
-    current_flags = self.GetCurrentFlags()
-    logger.info('Flags now set on the device: %s', current_flags)
-    return current_flags
-
-
-def _ParseFlags(line):
-  """Parse the string containing the command line into a list of flags.
-
-  It's a direct port of CommandLine.java::tokenizeQuotedArguments.
-
-  The first token is assumed to be the (unused) program name and stripped off
-  from the list of flags.
-
-  Args:
-    line: A string containing the entire command line.  The first token is
-          assumed to be the program name.
-
-  Returns:
-     A list of flags, with quoting removed.
-  """
-  flags = []
-  current_quote = None
-  current_flag = None
-
-  for c in line:
-    # Detect start or end of quote block.
-    if (current_quote is None and c in _QUOTES) or c == current_quote:
-      if current_flag is not None and current_flag[-1] == _ESCAPE:
-        # Last char was a backslash; pop it, and treat c as a literal.
-        current_flag = current_flag[:-1] + c
-      else:
-        current_quote = c if current_quote is None else None
-    elif current_quote is None and c.isspace():
-      if current_flag is not None:
-        flags.append(current_flag)
-        current_flag = None
-    else:
-      if current_flag is None:
-        current_flag = ''
-      current_flag += c
-
-  if current_flag is not None:
-    if current_quote is not None:
-      logger.warning('Unterminated quoted argument: ' + current_flag)
-    flags.append(current_flag)
-
-  # Return everything but the program name.
-  return flags[1:]
-
-
-def _SerializeFlags(flags):
-  """Serialize a sequence of flags into a command line string.
-
-  Args:
-    flags: A sequence of strings with individual flags.
-
-  Returns:
-    A line with the command line contents to save; or None if the sequence of
-    flags is empty.
-  """
-  if flags:
-    # The first command line argument doesn't matter as we are not actually
-    # launching the chrome executable using this command line.
-    args = ['_']
-    args.extend(_QuoteFlag(f) for f in flags)
-    return ' '.join(args)
-  else:
-    return None
-
-
-def _QuoteFlag(flag):
-  """Validate and quote a single flag.
-
-  Args:
-    A string with the flag to quote.
-
-  Returns:
-    A string with the flag quoted so that it can be parsed by the algorithm
-    in _ParseFlags; or None if the flag does not appear to be valid.
-  """
-  if '=' in flag:
-    key, value = flag.split('=', 1)
-  else:
-    key, value = flag, None
-
-  if not flag or _RE_NEEDS_QUOTING.search(key):
-    # Probably not a valid flag, but quote the whole thing so it can be
-    # parsed back correctly.
-    return '"%s"' % flag.replace('"', r'\"')
-
-  if value is None:
-    return key
-
-  if _RE_NEEDS_QUOTING.search(value):
-    value = '"%s"' % value.replace('"', r'\"')
-  return '='.join([key, value])
diff --git a/systrace/catapult/devil/devil/android/flag_changer_devicetest.py b/systrace/catapult/devil/devil/android/flag_changer_devicetest.py
deleted file mode 100644
index b75504b..0000000
--- a/systrace/catapult/devil/devil/android/flag_changer_devicetest.py
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""
-Unit tests for the contents of flag_changer.py.
-The test will invoke real devices
-"""
-
-import os
-import posixpath
-import sys
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', )))
-
-from devil.android import device_test_case
-from devil.android import device_utils
-from devil.android import flag_changer
-from devil.android.sdk import adb_wrapper
-
-
-_CMDLINE_FILE = 'dummy-command-line'
-
-
-class FlagChangerTest(device_test_case.DeviceTestCase):
-
-  def setUp(self):
-    super(FlagChangerTest, self).setUp()
-    self.adb = adb_wrapper.AdbWrapper(self.serial)
-    self.adb.WaitForDevice()
-    self.device = device_utils.DeviceUtils(
-        self.adb, default_timeout=10, default_retries=0)
-    # pylint: disable=protected-access
-    self.cmdline_path = posixpath.join(flag_changer._CMDLINE_DIR, _CMDLINE_FILE)
-    self.cmdline_path_legacy = posixpath.join(
-        flag_changer._CMDLINE_DIR_LEGACY, _CMDLINE_FILE)
-
-  def tearDown(self):
-    super(FlagChangerTest, self).tearDown()
-    self.device.RemovePath(
-        [self.cmdline_path, self.cmdline_path_legacy], force=True, as_root=True)
-
-  def testFlagChanger_restoreFlags(self):
-    if not self.device.HasRoot():
-      self.skipTest('Test needs a rooted device')
-
-    # Write some custom chrome command line flags.
-    self.device.WriteFile(
-        self.cmdline_path, 'chrome --some --old --flags')
-
-    # Write some more flags on a command line file in the legacy location.
-    self.device.WriteFile(
-        self.cmdline_path_legacy, 'some --stray --flags', as_root=True)
-    self.assertTrue(self.device.PathExists(self.cmdline_path_legacy))
-
-    changer = flag_changer.FlagChanger(self.device, _CMDLINE_FILE)
-
-    # Legacy command line file is removed, ensuring Chrome picks up the
-    # right file.
-    self.assertFalse(self.device.PathExists(self.cmdline_path_legacy))
-
-    # Write some new files, and check they are set.
-    new_flags = ['--my', '--new', '--flags=with special value']
-    self.assertItemsEqual(
-        changer.ReplaceFlags(new_flags),
-        new_flags)
-
-    # Restore and go back to the old flags.
-    self.assertItemsEqual(
-        changer.Restore(),
-        ['--some', '--old', '--flags'])
-
-  def testFlagChanger_removeFlags(self):
-    self.device.RemovePath(self.cmdline_path, force=True)
-    self.assertFalse(self.device.PathExists(self.cmdline_path))
-
-    with flag_changer.CustomCommandLineFlags(
-        self.device, _CMDLINE_FILE, ['--some', '--flags']):
-      self.assertTrue(self.device.PathExists(self.cmdline_path))
-
-    self.assertFalse(self.device.PathExists(self.cmdline_path))
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/flag_changer_test.py b/systrace/catapult/devil/devil/android/flag_changer_test.py
deleted file mode 100755
index 5342cf4..0000000
--- a/systrace/catapult/devil/devil/android/flag_changer_test.py
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import posixpath
-import unittest
-
-from devil.android import flag_changer
-
-
-_CMDLINE_FILE = 'chrome-command-line'
-
-
-class _FakeDevice(object):
-  def __init__(self):
-    self.build_type = 'user'
-    self.has_root = True
-    self.file_system = {}
-
-  def HasRoot(self):
-    return self.has_root
-
-  def PathExists(self, filepath):
-    return filepath in self.file_system
-
-  def RemovePath(self, path, **_kwargs):
-    self.file_system.pop(path)
-
-  def WriteFile(self, path, contents, **_kwargs):
-    self.file_system[path] = contents
-
-  def ReadFile(self, path, **_kwargs):
-    return self.file_system[path]
-
-
-class FlagChangerTest(unittest.TestCase):
-  def setUp(self):
-    self.device = _FakeDevice()
-    # pylint: disable=protected-access
-    self.cmdline_path = posixpath.join(flag_changer._CMDLINE_DIR, _CMDLINE_FILE)
-    self.cmdline_path_legacy = posixpath.join(
-        flag_changer._CMDLINE_DIR_LEGACY, _CMDLINE_FILE)
-
-  def testFlagChanger_removeLegacyCmdLine(self):
-    self.device.WriteFile(self.cmdline_path_legacy, 'chrome --old --stuff')
-    self.assertTrue(self.device.PathExists(self.cmdline_path_legacy))
-
-    changer = flag_changer.FlagChanger(self.device, 'chrome-command-line')
-    self.assertEquals(
-        changer._cmdline_path,  # pylint: disable=protected-access
-        self.cmdline_path)
-    self.assertFalse(self.device.PathExists(self.cmdline_path_legacy))
-
-  def testFlagChanger_mustBeFileName(self):
-    with self.assertRaises(ValueError):
-      flag_changer.FlagChanger(self.device, '/data/local/chrome-command-line')
-
-
-class ParseSerializeFlagsTest(unittest.TestCase):
-  def _testQuoteFlag(self, flag, expected_quoted_flag):
-    # Start with an unquoted flag, check that it's quoted as expected.
-    # pylint: disable=protected-access
-    quoted_flag = flag_changer._QuoteFlag(flag)
-    self.assertEqual(quoted_flag, expected_quoted_flag)
-    # Check that it survives a round-trip.
-    parsed_flags = flag_changer._ParseFlags('_ %s' % quoted_flag)
-    self.assertEqual(len(parsed_flags), 1)
-    self.assertEqual(flag, parsed_flags[0])
-
-  def testQuoteFlag_simple(self):
-    self._testQuoteFlag('--simple-flag', '--simple-flag')
-
-  def testQuoteFlag_withSimpleValue(self):
-    self._testQuoteFlag('--key=value', '--key=value')
-
-  def testQuoteFlag_withQuotedValue1(self):
-    self._testQuoteFlag('--key=valueA valueB', '--key="valueA valueB"')
-
-  def testQuoteFlag_withQuotedValue2(self):
-    self._testQuoteFlag(
-        '--key=this "should" work', r'--key="this \"should\" work"')
-
-  def testQuoteFlag_withQuotedValue3(self):
-    self._testQuoteFlag(
-        "--key=this is 'fine' too", '''--key="this is 'fine' too"''')
-
-  def testQuoteFlag_withQuotedValue4(self):
-    self._testQuoteFlag(
-        "--key='I really want to keep these quotes'",
-        '''--key="'I really want to keep these quotes'"''')
-
-  def testQuoteFlag_withQuotedValue5(self):
-    self._testQuoteFlag(
-        "--this is a strange=flag", '"--this is a strange=flag"')
-
-  def testQuoteFlag_withEmptyValue(self):
-    self._testQuoteFlag('--some-flag=', '--some-flag=')
-
-  def _testParseCmdLine(self, command_line, expected_flags):
-    # Start with a command line, check that flags are parsed as expected.
-    # pylint: disable=protected-access
-    flags = flag_changer._ParseFlags(command_line)
-    self.assertItemsEqual(flags, expected_flags)
-
-    # Check that flags survive a round-trip.
-    # Note: Although new_command_line and command_line may not match, they
-    # should describe the same set of flags.
-    new_command_line = flag_changer._SerializeFlags(flags)
-    new_flags = flag_changer._ParseFlags(new_command_line)
-    self.assertItemsEqual(new_flags, expected_flags)
-
-  def testParseCmdLine_simple(self):
-    self._testParseCmdLine(
-        'chrome --foo --bar="a b" --baz=true --fine="ok"',
-        ['--foo', '--bar=a b', '--baz=true', '--fine=ok'])
-
-  def testParseCmdLine_withFancyQuotes(self):
-    self._testParseCmdLine(
-        r'''_ --foo="this 'is' ok"
-              --bar='this \'is\' too'
-              --baz="this \'is\' tricky"
-        ''',
-        ["--foo=this 'is' ok",
-         "--bar=this 'is' too",
-         r"--baz=this \'is\' tricky"])
-
-  def testParseCmdLine_withUnterminatedQuote(self):
-    self._testParseCmdLine(
-        '_ --foo --bar="I forgot something',
-        ['--foo', '--bar=I forgot something'])
-
-
-if __name__ == '__main__':
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/forwarder.py b/systrace/catapult/devil/devil/android/forwarder.py
deleted file mode 100644
index cf1fbe1..0000000
--- a/systrace/catapult/devil/devil/android/forwarder.py
+++ /dev/null
@@ -1,476 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=W0212
-
-import fcntl
-import inspect
-import logging
-import os
-import psutil
-
-from devil import base_error
-from devil import devil_env
-from devil.android import device_errors
-from devil.android.constants import file_system
-from devil.android.sdk import adb_wrapper
-from devil.android.valgrind_tools import base_tool
-from devil.utils import cmd_helper
-
-logger = logging.getLogger(__name__)
-
-# If passed as the device port, this will tell the forwarder to allocate
-# a dynamic port on the device. The actual port can then be retrieved with
-# Forwarder.DevicePortForHostPort.
-DYNAMIC_DEVICE_PORT = 0
-
-
-def _GetProcessStartTime(pid):
-  p = psutil.Process(pid)
-  if inspect.ismethod(p.create_time):
-    return p.create_time()
-  else:  # Process.create_time is a property in old versions of psutil.
-    return p.create_time
-
-
-def _LogMapFailureDiagnostics(device):
-  # The host forwarder daemon logs to /tmp/host_forwarder_log, so print the end
-  # of that.
-  try:
-    with open('/tmp/host_forwarder_log') as host_forwarder_log:
-      logger.info('Last 50 lines of the host forwarder daemon log:')
-      for line in host_forwarder_log.read().splitlines()[-50:]:
-        logger.info('    %s', line)
-  except Exception: # pylint: disable=broad-except
-    # Grabbing the host forwarder log is best-effort. Ignore all errors.
-    logger.warning('Failed to get the contents of host_forwarder_log.')
-
-  # The device forwarder daemon logs to the logcat, so print the end of that.
-  try:
-    logger.info('Last 50 lines of logcat:')
-    for logcat_line in device.adb.Logcat(dump=True)[-50:]:
-      logger.info('    %s', logcat_line)
-  except (device_errors.CommandFailedError,
-          device_errors.DeviceUnreachableError):
-    # Grabbing the device forwarder log is also best-effort. Ignore all errors.
-    logger.warning('Failed to get the contents of the logcat.')
-
-  # Log alive device forwarders.
-  try:
-    ps_out = device.RunShellCommand(['ps'], check_return=True)
-    logger.info('Currently running device_forwarders:')
-    for line in ps_out:
-      if 'device_forwarder' in line:
-        logger.info('    %s', line)
-  except (device_errors.CommandFailedError,
-          device_errors.DeviceUnreachableError):
-    logger.warning('Failed to list currently running device_forwarder '
-                   'instances.')
-
-
-class _FileLock(object):
-  """With statement-aware implementation of a file lock.
-
-  File locks are needed for cross-process synchronization when the
-  multiprocessing Python module is used.
-  """
-
-  def __init__(self, path):
-    self._fd = -1
-    self._path = path
-
-  def __enter__(self):
-    self._fd = os.open(self._path, os.O_RDONLY | os.O_CREAT)
-    if self._fd < 0:
-      raise Exception('Could not open file %s for reading' % self._path)
-    fcntl.flock(self._fd, fcntl.LOCK_EX)
-
-  def __exit__(self, _exception_type, _exception_value, traceback):
-    fcntl.flock(self._fd, fcntl.LOCK_UN)
-    os.close(self._fd)
-
-
-class HostForwarderError(base_error.BaseError):
-  """Exception for failures involving host_forwarder."""
-
-  def __init__(self, message):
-    super(HostForwarderError, self).__init__(message)
-
-
-class Forwarder(object):
-  """Thread-safe class to manage port forwards from the device to the host."""
-
-  _DEVICE_FORWARDER_FOLDER = (file_system.TEST_EXECUTABLE_DIR +
-                              '/forwarder/')
-  _DEVICE_FORWARDER_PATH = (file_system.TEST_EXECUTABLE_DIR +
-                            '/forwarder/device_forwarder')
-  _LOCK_PATH = '/tmp/chrome.forwarder.lock'
-  # Defined in host_forwarder_main.cc
-  _HOST_FORWARDER_LOG = '/tmp/host_forwarder_log'
-
-  _TIMEOUT = 60  # seconds
-
-  _instance = None
-
-  @staticmethod
-  def Map(port_pairs, device, tool=None):
-    """Runs the forwarder.
-
-    Args:
-      port_pairs: A list of tuples (device_port, host_port) to forward. Note
-                 that you can specify 0 as a device_port, in which case a
-                 port will by dynamically assigned on the device. You can
-                 get the number of the assigned port using the
-                 DevicePortForHostPort method.
-      device: A DeviceUtils instance.
-      tool: Tool class to use to get wrapper, if necessary, for executing the
-            forwarder (see valgrind_tools.py).
-
-    Raises:
-      Exception on failure to forward the port.
-    """
-    if not tool:
-      tool = base_tool.BaseTool()
-    with _FileLock(Forwarder._LOCK_PATH):
-      instance = Forwarder._GetInstanceLocked(tool)
-      instance._InitDeviceLocked(device, tool)
-
-      device_serial = str(device)
-      map_arg_lists = [
-          ['--adb=' + adb_wrapper.AdbWrapper.GetAdbPath(),
-           '--serial-id=' + device_serial,
-           '--map', str(device_port), str(host_port)]
-          for device_port, host_port in port_pairs]
-      logger.info('Forwarding using commands: %s', map_arg_lists)
-
-      for map_arg_list in map_arg_lists:
-        try:
-          map_cmd = [instance._host_forwarder_path] + map_arg_list
-          (exit_code, output) = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-              map_cmd, Forwarder._TIMEOUT)
-        except cmd_helper.TimeoutError as e:
-          raise HostForwarderError(
-              '`%s` timed out:\n%s' % (' '.join(map_cmd), e.output))
-        except OSError as e:
-          if e.errno == 2:
-            raise HostForwarderError(
-                'Unable to start host forwarder. '
-                'Make sure you have built host_forwarder.')
-          else: raise
-        if exit_code != 0:
-          try:
-            instance._KillDeviceLocked(device, tool)
-          except (device_errors.CommandFailedError,
-                  device_errors.DeviceUnreachableError):
-            # We don't want the failure to kill the device forwarder to
-            # supersede the original failure to map.
-            logger.warning(
-                'Failed to kill the device forwarder after map failure: %s',
-                str(e))
-          _LogMapFailureDiagnostics(device)
-          formatted_output = ('\n'.join(output) if isinstance(output, list)
-                              else output)
-          raise HostForwarderError(
-              '`%s` exited with %d:\n%s' % (
-                  ' '.join(map_cmd),
-                  exit_code,
-                  formatted_output))
-        tokens = output.split(':')
-        if len(tokens) != 2:
-          raise HostForwarderError(
-              'Unexpected host forwarder output "%s", '
-              'expected "device_port:host_port"' % output)
-        device_port = int(tokens[0])
-        host_port = int(tokens[1])
-        serial_with_port = (device_serial, device_port)
-        instance._device_to_host_port_map[serial_with_port] = host_port
-        instance._host_to_device_port_map[host_port] = serial_with_port
-        logger.info('Forwarding device port: %d to host port: %d.',
-                    device_port, host_port)
-
-  @staticmethod
-  def UnmapDevicePort(device_port, device):
-    """Unmaps a previously forwarded device port.
-
-    Args:
-      device: A DeviceUtils instance.
-      device_port: A previously forwarded port (through Map()).
-    """
-    with _FileLock(Forwarder._LOCK_PATH):
-      Forwarder._UnmapDevicePortLocked(device_port, device)
-
-  @staticmethod
-  def UnmapAllDevicePorts(device):
-    """Unmaps all the previously forwarded ports for the provided device.
-
-    Args:
-      device: A DeviceUtils instance.
-      port_pairs: A list of tuples (device_port, host_port) to unmap.
-    """
-    with _FileLock(Forwarder._LOCK_PATH):
-      instance = Forwarder._GetInstanceLocked(None)
-      unmap_all_cmd = [
-          instance._host_forwarder_path,
-          '--adb=%s' % adb_wrapper.AdbWrapper.GetAdbPath(),
-          '--serial-id=%s' % device.serial,
-          '--unmap-all'
-      ]
-      try:
-        exit_code, output = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-            unmap_all_cmd, Forwarder._TIMEOUT)
-      except cmd_helper.TimeoutError as e:
-        raise HostForwarderError(
-            '`%s` timed out:\n%s' % (' '.join(unmap_all_cmd), e.output))
-      if exit_code != 0:
-        error_msg = [
-            '`%s` exited with %d' % (' '.join(unmap_all_cmd), exit_code)]
-        if isinstance(output, list):
-          error_msg += output
-        else:
-          error_msg += [output]
-        raise HostForwarderError('\n'.join(error_msg))
-
-      # Clean out any entries from the device & host map.
-      device_map = instance._device_to_host_port_map
-      host_map = instance._host_to_device_port_map
-      for device_serial_and_port, host_port in device_map.items():
-        device_serial = device_serial_and_port[0]
-        if device_serial == device.serial:
-          del device_map[device_serial_and_port]
-          del host_map[host_port]
-
-      # Kill the device forwarder.
-      tool = base_tool.BaseTool()
-      instance._KillDeviceLocked(device, tool)
-
-  @staticmethod
-  def DevicePortForHostPort(host_port):
-    """Returns the device port that corresponds to a given host port."""
-    with _FileLock(Forwarder._LOCK_PATH):
-      serial_and_port = Forwarder._GetInstanceLocked(
-          None)._host_to_device_port_map.get(host_port)
-      return serial_and_port[1] if serial_and_port else None
-
-  @staticmethod
-  def RemoveHostLog():
-    if os.path.exists(Forwarder._HOST_FORWARDER_LOG):
-      os.unlink(Forwarder._HOST_FORWARDER_LOG)
-
-  @staticmethod
-  def GetHostLog():
-    if not os.path.exists(Forwarder._HOST_FORWARDER_LOG):
-      return ''
-    with file(Forwarder._HOST_FORWARDER_LOG, 'r') as f:
-      return f.read()
-
-  @staticmethod
-  def _GetInstanceLocked(tool):
-    """Returns the singleton instance.
-
-    Note that the global lock must be acquired before calling this method.
-
-    Args:
-      tool: Tool class to use to get wrapper, if necessary, for executing the
-            forwarder (see valgrind_tools.py).
-    """
-    if not Forwarder._instance:
-      Forwarder._instance = Forwarder(tool)
-    return Forwarder._instance
-
-  def __init__(self, tool):
-    """Constructs a new instance of Forwarder.
-
-    Note that Forwarder is a singleton therefore this constructor should be
-    called only once.
-
-    Args:
-      tool: Tool class to use to get wrapper, if necessary, for executing the
-            forwarder (see valgrind_tools.py).
-    """
-    assert not Forwarder._instance
-    self._tool = tool
-    self._initialized_devices = set()
-    self._device_to_host_port_map = dict()
-    self._host_to_device_port_map = dict()
-    self._host_forwarder_path = devil_env.config.FetchPath('forwarder_host')
-    assert os.path.exists(self._host_forwarder_path), 'Please build forwarder2'
-    self._InitHostLocked()
-
-  @staticmethod
-  def _UnmapDevicePortLocked(device_port, device):
-    """Internal method used by UnmapDevicePort().
-
-    Note that the global lock must be acquired before calling this method.
-    """
-    instance = Forwarder._GetInstanceLocked(None)
-    serial = str(device)
-    serial_with_port = (serial, device_port)
-    if not serial_with_port in instance._device_to_host_port_map:
-      logger.error('Trying to unmap non-forwarded port %d', device_port)
-      return
-
-    host_port = instance._device_to_host_port_map[serial_with_port]
-    del instance._device_to_host_port_map[serial_with_port]
-    del instance._host_to_device_port_map[host_port]
-
-    unmap_cmd = [
-        instance._host_forwarder_path,
-        '--adb=%s' % adb_wrapper.AdbWrapper.GetAdbPath(),
-        '--serial-id=%s' % serial,
-        '--unmap', str(device_port)
-    ]
-    try:
-      (exit_code, output) = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-          unmap_cmd, Forwarder._TIMEOUT)
-    except cmd_helper.TimeoutError as e:
-      raise HostForwarderError(
-          '`%s` timed out:\n%s' % (' '.join(unmap_cmd), e.output))
-    if exit_code != 0:
-      logger.error(
-          '`%s` exited with %d:\n%s',
-          ' '.join(unmap_cmd),
-          exit_code,
-          '\n'.join(output) if isinstance(output, list) else output)
-
-  @staticmethod
-  def _GetPidForLock():
-    """Returns the PID used for host_forwarder initialization.
-
-    The PID of the "sharder" is used to handle multiprocessing. The "sharder"
-    is the initial process that forks that is the parent process.
-    """
-    return os.getpgrp()
-
-  def _InitHostLocked(self):
-    """Initializes the host forwarder daemon.
-
-    Note that the global lock must be acquired before calling this method. This
-    method kills any existing host_forwarder process that could be stale.
-    """
-    # See if the host_forwarder daemon was already initialized by a concurrent
-    # process or thread (in case multi-process sharding is not used).
-    # TODO(crbug.com/762005): Consider using a different implemention; relying
-    # on matching the string represantion of the process start time seems
-    # fragile.
-    pid_for_lock = Forwarder._GetPidForLock()
-    fd = os.open(Forwarder._LOCK_PATH, os.O_RDWR | os.O_CREAT)
-    with os.fdopen(fd, 'r+') as pid_file:
-      pid_with_start_time = pid_file.readline()
-      if pid_with_start_time:
-        (pid, process_start_time) = pid_with_start_time.split(':')
-        if pid == str(pid_for_lock):
-          if process_start_time == str(_GetProcessStartTime(pid_for_lock)):
-            return
-      self._KillHostLocked()
-      pid_file.seek(0)
-      pid_file.write(
-          '%s:%s' % (pid_for_lock, str(_GetProcessStartTime(pid_for_lock))))
-      pid_file.truncate()
-
-  def _InitDeviceLocked(self, device, tool):
-    """Initializes the device_forwarder daemon for a specific device (once).
-
-    Note that the global lock must be acquired before calling this method. This
-    method kills any existing device_forwarder daemon on the device that could
-    be stale, pushes the latest version of the daemon (to the device) and starts
-    it.
-
-    Args:
-      device: A DeviceUtils instance.
-      tool: Tool class to use to get wrapper, if necessary, for executing the
-            forwarder (see valgrind_tools.py).
-    """
-    device_serial = str(device)
-    if device_serial in self._initialized_devices:
-      return
-    try:
-      self._KillDeviceLocked(device, tool)
-    except device_errors.CommandFailedError:
-      logger.warning('Failed to kill device forwarder. Rebooting.')
-      device.Reboot()
-    forwarder_device_path_on_host = devil_env.config.FetchPath(
-        'forwarder_device', device=device)
-    forwarder_device_path_on_device = (
-        Forwarder._DEVICE_FORWARDER_FOLDER
-        if os.path.isdir(forwarder_device_path_on_host)
-        else Forwarder._DEVICE_FORWARDER_PATH)
-    device.PushChangedFiles([(
-        forwarder_device_path_on_host,
-        forwarder_device_path_on_device)])
-
-    cmd = [Forwarder._DEVICE_FORWARDER_PATH]
-    wrapper = tool.GetUtilWrapper()
-    if wrapper:
-      cmd.insert(0, wrapper)
-    device.RunShellCommand(
-        cmd, env={'LD_LIBRARY_PATH': Forwarder._DEVICE_FORWARDER_FOLDER},
-        check_return=True)
-    self._initialized_devices.add(device_serial)
-
-  @staticmethod
-  def KillHost():
-    """Kills the forwarder process running on the host."""
-    with _FileLock(Forwarder._LOCK_PATH):
-      Forwarder._GetInstanceLocked(None)._KillHostLocked()
-
-  def _KillHostLocked(self):
-    """Kills the forwarder process running on the host.
-
-    Note that the global lock must be acquired before calling this method.
-    """
-    logger.info('Killing host_forwarder.')
-    try:
-      kill_cmd = [self._host_forwarder_path, '--kill-server']
-      (exit_code, output) = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-          kill_cmd, Forwarder._TIMEOUT)
-      if exit_code != 0:
-        logger.warning('Forwarder unable to shut down:\n%s', output)
-        kill_cmd = ['pkill', '-9', 'host_forwarder']
-        (exit_code, output) = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-            kill_cmd, Forwarder._TIMEOUT)
-        if exit_code != 0:
-          raise HostForwarderError(
-              '%s exited with %d:\n%s' % (
-                  self._host_forwarder_path,
-                  exit_code,
-                  '\n'.join(output) if isinstance(output, list) else output))
-    except cmd_helper.TimeoutError as e:
-      raise HostForwarderError(
-          '`%s` timed out:\n%s' % (' '.join(kill_cmd), e.output))
-
-  @staticmethod
-  def KillDevice(device, tool=None):
-    """Kills the forwarder process running on the device.
-
-    Args:
-      device: Instance of DeviceUtils for talking to the device.
-      tool: Wrapper tool (e.g. valgrind) that can be used to execute the device
-            forwarder (see valgrind_tools.py).
-    """
-    with _FileLock(Forwarder._LOCK_PATH):
-      Forwarder._GetInstanceLocked(None)._KillDeviceLocked(
-          device, tool or base_tool.BaseTool())
-
-  def _KillDeviceLocked(self, device, tool):
-    """Kills the forwarder process running on the device.
-
-    Note that the global lock must be acquired before calling this method.
-
-    Args:
-      device: Instance of DeviceUtils for talking to the device.
-      tool: Wrapper tool (e.g. valgrind) that can be used to execute the device
-            forwarder (see valgrind_tools.py).
-    """
-    logger.info('Killing device_forwarder.')
-    self._initialized_devices.discard(device.serial)
-    if not device.FileExists(Forwarder._DEVICE_FORWARDER_PATH):
-      return
-
-    cmd = [Forwarder._DEVICE_FORWARDER_PATH, '--kill-server']
-    wrapper = tool.GetUtilWrapper()
-    if wrapper:
-      cmd.insert(0, wrapper)
-    device.RunShellCommand(
-        cmd, env={'LD_LIBRARY_PATH': Forwarder._DEVICE_FORWARDER_FOLDER},
-        check_return=True)
diff --git a/systrace/catapult/devil/devil/android/install_commands.py b/systrace/catapult/devil/devil/android/install_commands.py
deleted file mode 100644
index c8da869..0000000
--- a/systrace/catapult/devil/devil/android/install_commands.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import posixpath
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android.constants import file_system
-
-BIN_DIR = '%s/bin' % file_system.TEST_EXECUTABLE_DIR
-_FRAMEWORK_DIR = '%s/framework' % file_system.TEST_EXECUTABLE_DIR
-
-_COMMANDS = {
-  'unzip': 'org.chromium.android.commands.unzip.Unzip',
-}
-
-_SHELL_COMMAND_FORMAT = (
-"""#!/system/bin/sh
-base=%s
-export CLASSPATH=$base/framework/chromium_commands.jar
-exec app_process $base/bin %s $@
-""")
-
-
-def Installed(device):
-  paths = [posixpath.join(BIN_DIR, c) for c in _COMMANDS]
-  paths.append(posixpath.join(_FRAMEWORK_DIR, 'chromium_commands.jar'))
-  return device.PathExists(paths)
-
-
-def InstallCommands(device):
-  if device.IsUserBuild():
-    raise device_errors.CommandFailedError(
-        'chromium_commands currently requires a userdebug build.',
-        device_serial=device.adb.GetDeviceSerial())
-
-  chromium_commands_jar_path = devil_env.config.FetchPath('chromium_commands')
-  if not os.path.exists(chromium_commands_jar_path):
-    raise device_errors.CommandFailedError(
-        '%s not found. Please build chromium_commands.'
-        % chromium_commands_jar_path)
-
-  device.RunShellCommand(
-      ['mkdir', '-p', BIN_DIR, _FRAMEWORK_DIR], check_return=True)
-  for command, main_class in _COMMANDS.iteritems():
-    shell_command = _SHELL_COMMAND_FORMAT % (
-        file_system.TEST_EXECUTABLE_DIR, main_class)
-    shell_file = '%s/%s' % (BIN_DIR, command)
-    device.WriteFile(shell_file, shell_command)
-    device.RunShellCommand(
-        ['chmod', '755', shell_file], check_return=True)
-
-  device.adb.Push(
-      chromium_commands_jar_path,
-      '%s/chromium_commands.jar' % _FRAMEWORK_DIR)
diff --git a/systrace/catapult/devil/devil/android/logcat_monitor.py b/systrace/catapult/devil/devil/android/logcat_monitor.py
deleted file mode 100644
index 249320b..0000000
--- a/systrace/catapult/devil/devil/android/logcat_monitor.py
+++ /dev/null
@@ -1,268 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=unused-argument
-
-import errno
-import logging
-import os
-import re
-import shutil
-import tempfile
-import threading
-import time
-
-from devil.android import decorators
-from devil.android import device_errors
-from devil.android.sdk import adb_wrapper
-from devil.utils import reraiser_thread
-
-logger = logging.getLogger(__name__)
-
-
-class LogcatMonitor(object):
-
-  _RECORD_ITER_TIMEOUT = 0.2
-  _RECORD_THREAD_JOIN_WAIT = 5.0
-  _WAIT_TIME = 0.2
-  THREADTIME_RE_FORMAT = (
-      r'(?P<date>\S*) +(?P<time>\S*) +(?P<proc_id>%s) +(?P<thread_id>%s) +'
-      r'(?P<log_level>%s) +(?P<component>%s) *: +(?P<message>%s)$')
-
-  def __init__(self, adb, clear=True, filter_specs=None, output_file=None,
-               transform_func=None):
-    """Create a LogcatMonitor instance.
-
-    Args:
-      adb: An instance of adb_wrapper.AdbWrapper.
-      clear: If True, clear the logcat when monitoring starts.
-      filter_specs: An optional list of '<tag>[:priority]' strings.
-      output_file: File path to save recorded logcat.
-      transform_func: An optional unary callable that takes and returns
-        a list of lines, possibly transforming them in the process.
-    """
-    if isinstance(adb, adb_wrapper.AdbWrapper):
-      self._adb = adb
-    else:
-      raise ValueError('Unsupported type passed for argument "device"')
-    self._clear = clear
-    self._filter_specs = filter_specs
-    self._output_file = output_file
-    self._record_file = None
-    self._record_file_lock = threading.Lock()
-    self._record_thread = None
-    self._stop_recording_event = threading.Event()
-    self._transform_func = transform_func
-
-  @property
-  def output_file(self):
-    return self._output_file
-
-  @decorators.WithTimeoutAndRetriesDefaults(10, 0)
-  def WaitFor(self, success_regex, failure_regex=None, timeout=None,
-              retries=None):
-    """Wait for a matching logcat line or until a timeout occurs.
-
-    This will attempt to match lines in the logcat against both |success_regex|
-    and |failure_regex| (if provided). Note that this calls re.search on each
-    logcat line, not re.match, so the provided regular expressions don't have
-    to match an entire line.
-
-    Args:
-      success_regex: The regular expression to search for.
-      failure_regex: An optional regular expression that, if hit, causes this
-        to stop looking for a match. Can be None.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A match object if |success_regex| matches a part of a logcat line, or
-      None if |failure_regex| matches a part of a logcat line.
-    Raises:
-      CommandFailedError on logcat failure (NOT on a |failure_regex| match).
-      CommandTimeoutError if no logcat line matching either |success_regex| or
-        |failure_regex| is found in |timeout| seconds.
-      DeviceUnreachableError if the device becomes unreachable.
-      LogcatMonitorCommandError when calling |WaitFor| while not recording
-        logcat.
-    """
-    if self._record_thread is None:
-      raise LogcatMonitorCommandError(
-          'Must be recording logcat when calling |WaitFor|',
-          device_serial=str(self._adb))
-    if isinstance(success_regex, basestring):
-      success_regex = re.compile(success_regex)
-    if isinstance(failure_regex, basestring):
-      failure_regex = re.compile(failure_regex)
-
-    logger.debug('Waiting %d seconds for "%s"', timeout, success_regex.pattern)
-
-    # NOTE This will continue looping until:
-    #  - success_regex matches a line, in which case the match object is
-    #    returned.
-    #  - failure_regex matches a line, in which case None is returned
-    #  - the timeout is hit, in which case a CommandTimeoutError is raised.
-    with open(self._record_file.name, 'r') as f:
-      while True:
-        line = f.readline()
-        if line:
-          m = success_regex.search(line)
-          if m:
-            return m
-          if failure_regex and failure_regex.search(line):
-            return None
-        else:
-          time.sleep(self._WAIT_TIME)
-
-  def FindAll(self, message_regex, proc_id=None, thread_id=None, log_level=None,
-              component=None):
-    """Finds all lines in the logcat that match the provided constraints.
-
-    Args:
-      message_regex: The regular expression that the <message> section must
-        match.
-      proc_id: The process ID to match. If None, matches any process ID.
-      thread_id: The thread ID to match. If None, matches any thread ID.
-      log_level: The log level to match. If None, matches any log level.
-      component: The component to match. If None, matches any component.
-
-    Raises:
-      LogcatMonitorCommandError when calling |FindAll| before recording logcat.
-
-    Yields:
-      A match object for each matching line in the logcat. The match object
-      will always contain, in addition to groups defined in |message_regex|,
-      the following named groups: 'date', 'time', 'proc_id', 'thread_id',
-      'log_level', 'component', and 'message'.
-    """
-    if self._record_file is None:
-      raise LogcatMonitorCommandError(
-          'Must have recorded or be recording a logcat to call |FindAll|',
-          device_serial=str(self._adb))
-    if proc_id is None:
-      proc_id = r'\d+'
-    if thread_id is None:
-      thread_id = r'\d+'
-    if log_level is None:
-      log_level = r'[VDIWEF]'
-    if component is None:
-      component = r'[^\s:]+'
-    # pylint: disable=protected-access
-    threadtime_re = re.compile(
-        type(self).THREADTIME_RE_FORMAT % (
-            proc_id, thread_id, log_level, component, message_regex))
-
-    with open(self._record_file.name, 'r') as f:
-      for line in f:
-        m = re.match(threadtime_re, line)
-        if m:
-          yield m
-
-  def _StartRecording(self):
-    """Starts recording logcat to file.
-
-    Function spawns a thread that records logcat to file and will not die
-    until |StopRecording| is called.
-    """
-    def record_to_file():
-      # Write the log with line buffering so the consumer sees each individual
-      # line.
-      for data in self._adb.Logcat(filter_specs=self._filter_specs,
-                                   logcat_format='threadtime',
-                                   iter_timeout=self._RECORD_ITER_TIMEOUT):
-        if self._stop_recording_event.isSet():
-          return
-
-        if data is None:
-          # Logcat can yield None if the iter_timeout is hit.
-          continue
-
-        with self._record_file_lock:
-          if self._record_file and not self._record_file.closed:
-            if self._transform_func:
-              data = '\n'.join(self._transform_func([data]))
-            self._record_file.write(data + '\n')
-
-    self._stop_recording_event.clear()
-    if not self._record_thread:
-      self._record_thread = reraiser_thread.ReraiserThread(record_to_file)
-      self._record_thread.start()
-
-  def _StopRecording(self):
-    """Finish recording logcat."""
-    if self._record_thread:
-      self._stop_recording_event.set()
-      self._record_thread.join(timeout=self._RECORD_THREAD_JOIN_WAIT)
-      self._record_thread.ReraiseIfException()
-      self._record_thread = None
-
-  def Start(self):
-    """Starts the logcat monitor.
-
-    Clears the logcat if |clear| was set in |__init__|.
-    """
-    if self._clear:
-      self._adb.Logcat(clear=True)
-    if not self._record_file:
-      self._record_file = tempfile.NamedTemporaryFile(mode='a', bufsize=1)
-    self._StartRecording()
-
-  def Stop(self):
-    """Stops the logcat monitor.
-
-    Stops recording the logcat. Copies currently recorded logcat to
-    |self._output_file|.
-    """
-    self._StopRecording()
-    with self._record_file_lock:
-      if self._record_file and self._output_file:
-        try:
-          os.makedirs(os.path.dirname(self._output_file))
-        except OSError as e:
-          if e.errno != errno.EEXIST:
-            raise
-        shutil.copy(self._record_file.name, self._output_file)
-
-  def Close(self):
-    """Closes logcat recording file.
-
-    Should be called when finished using the logcat monitor.
-    """
-    with self._record_file_lock:
-      if self._record_file:
-        self._record_file.close()
-        self._record_file = None
-
-  def close(self):
-    """An alias for Close.
-
-    Allows LogcatMonitors to be used with contextlib.closing.
-    """
-    self.Close()
-
-  def __enter__(self):
-    """Starts the logcat monitor."""
-    self.Start()
-    return self
-
-  def __exit__(self, exc_type, exc_val, exc_tb):
-    """Stops the logcat monitor."""
-    self.Stop()
-
-  def __del__(self):
-    """Closes logcat recording file in case |Close| was never called."""
-    with self._record_file_lock:
-      if self._record_file:
-        logger.warning(
-            'Need to call |Close| on the logcat monitor when done!')
-        self._record_file.close()
-
-  @property
-  def adb(self):
-    return self._adb
-
-
-class LogcatMonitorCommandError(device_errors.CommandFailedError):
-  """Exception for errors with logcat monitor commands."""
-  pass
diff --git a/systrace/catapult/devil/devil/android/logcat_monitor_test.py b/systrace/catapult/devil/devil/android/logcat_monitor_test.py
deleted file mode 100755
index 8fb4d74..0000000
--- a/systrace/catapult/devil/devil/android/logcat_monitor_test.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=protected-access
-
-import itertools
-import threading
-import unittest
-
-from devil import devil_env
-from devil.android import logcat_monitor
-from devil.android.sdk import adb_wrapper
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-def _CreateTestLog(raw_logcat=None):
-  test_adb = adb_wrapper.AdbWrapper('0123456789abcdef')
-  test_adb.Logcat = mock.Mock(return_value=(l for l in raw_logcat))
-  test_log = logcat_monitor.LogcatMonitor(test_adb, clear=False)
-  return test_log
-
-
-class LogcatMonitorTest(unittest.TestCase):
-
-  _TEST_THREADTIME_LOGCAT_DATA = [
-      '01-01 01:02:03.456  7890  0987 V LogcatMonitorTest: '
-          'verbose logcat monitor test message 1',
-      '01-01 01:02:03.457  8901  1098 D LogcatMonitorTest: '
-          'debug logcat monitor test message 2',
-      '01-01 01:02:03.458  9012  2109 I LogcatMonitorTest: '
-          'info logcat monitor test message 3',
-      '01-01 01:02:03.459  0123  3210 W LogcatMonitorTest: '
-          'warning logcat monitor test message 4',
-      '01-01 01:02:03.460  1234  4321 E LogcatMonitorTest: '
-          'error logcat monitor test message 5',
-      '01-01 01:02:03.461  2345  5432 F LogcatMonitorTest: '
-          'fatal logcat monitor test message 6',
-      '01-01 01:02:03.462  3456  6543 D LogcatMonitorTest: '
-          'last line'
-  ]
-
-  def assertIterEqual(self, expected_iter, actual_iter):
-    for expected, actual in itertools.izip_longest(expected_iter, actual_iter):
-      self.assertIsNotNone(
-          expected,
-          msg='actual has unexpected elements starting with %s' % str(actual))
-      self.assertIsNotNone(
-          actual,
-          msg='actual is missing elements starting with %s' % str(expected))
-      self.assertEqual(actual.group('proc_id'), expected[0])
-      self.assertEqual(actual.group('thread_id'), expected[1])
-      self.assertEqual(actual.group('log_level'), expected[2])
-      self.assertEqual(actual.group('component'), expected[3])
-      self.assertEqual(actual.group('message'), expected[4])
-
-    with self.assertRaises(StopIteration):
-      next(actual_iter)
-    with self.assertRaises(StopIteration):
-      next(expected_iter)
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testWaitFor_success(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    actual_match = test_log.WaitFor(r'.*(fatal|error) logcat monitor.*', None)
-    self.assertTrue(actual_match)
-    self.assertEqual(
-        '01-01 01:02:03.460  1234  4321 E LogcatMonitorTest: '
-            'error logcat monitor test message 5',
-        actual_match.group(0))
-    self.assertEqual('error', actual_match.group(1))
-    test_log.Stop()
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testWaitFor_failure(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    actual_match = test_log.WaitFor(
-        r'.*My Success Regex.*', r'.*(fatal|error) logcat monitor.*')
-    self.assertIsNone(actual_match)
-    test_log.Stop()
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testWaitFor_buffering(self):
-    # Simulate an adb log stream which does not complete until the test tells it
-    # to. This checks that the log matcher can receive individual lines from the
-    # log reader thread even if adb is not producing enough output to fill an
-    # entire file io buffer.
-    finished_lock = threading.Lock()
-    finished_lock.acquire()
-
-    def LogGenerator():
-      for line in type(self)._TEST_THREADTIME_LOGCAT_DATA:
-        yield line
-      finished_lock.acquire()
-
-    test_adb = adb_wrapper.AdbWrapper('0123456789abcdef')
-    test_adb.Logcat = mock.Mock(return_value=LogGenerator())
-    test_log = logcat_monitor.LogcatMonitor(test_adb, clear=False)
-    test_log.Start()
-
-    actual_match = test_log.WaitFor(r'.*last line.*', None)
-    finished_lock.release()
-    self.assertTrue(actual_match)
-    test_log.Stop()
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testFindAll_defaults(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    test_log.WaitFor(r'.*last line.*', None)
-    test_log.Stop()
-    expected_results = [
-        ('7890', '0987', 'V', 'LogcatMonitorTest',
-         'verbose logcat monitor test message 1'),
-        ('8901', '1098', 'D', 'LogcatMonitorTest',
-         'debug logcat monitor test message 2'),
-        ('9012', '2109', 'I', 'LogcatMonitorTest',
-         'info logcat monitor test message 3'),
-        ('0123', '3210', 'W', 'LogcatMonitorTest',
-         'warning logcat monitor test message 4'),
-        ('1234', '4321', 'E', 'LogcatMonitorTest',
-         'error logcat monitor test message 5'),
-        ('2345', '5432', 'F', 'LogcatMonitorTest',
-         'fatal logcat monitor test message 6')]
-    actual_results = test_log.FindAll(r'\S* logcat monitor test message \d')
-    self.assertIterEqual(iter(expected_results), actual_results)
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testFindAll_defaults_miss(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    test_log.WaitFor(r'.*last line.*', None)
-    test_log.Stop()
-    expected_results = []
-    actual_results = test_log.FindAll(r'\S* nothing should match this \d')
-    self.assertIterEqual(iter(expected_results), actual_results)
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testFindAll_filterProcId(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    test_log.WaitFor(r'.*last line.*', None)
-    test_log.Stop()
-    actual_results = test_log.FindAll(
-        r'\S* logcat monitor test message \d', proc_id=1234)
-    expected_results = [
-        ('1234', '4321', 'E', 'LogcatMonitorTest',
-         'error logcat monitor test message 5')]
-    self.assertIterEqual(iter(expected_results), actual_results)
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testFindAll_filterThreadId(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    test_log.WaitFor(r'.*last line.*', None)
-    test_log.Stop()
-    actual_results = test_log.FindAll(
-        r'\S* logcat monitor test message \d', thread_id=2109)
-    expected_results = [
-        ('9012', '2109', 'I', 'LogcatMonitorTest',
-         'info logcat monitor test message 3')]
-    self.assertIterEqual(iter(expected_results), actual_results)
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testFindAll_filterLogLevel(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    test_log.WaitFor(r'.*last line.*', None)
-    test_log.Stop()
-    actual_results = test_log.FindAll(
-        r'\S* logcat monitor test message \d', log_level=r'[DW]')
-    expected_results = [
-        ('8901', '1098', 'D', 'LogcatMonitorTest',
-         'debug logcat monitor test message 2'),
-        ('0123', '3210', 'W', 'LogcatMonitorTest',
-         'warning logcat monitor test message 4')
-    ]
-    self.assertIterEqual(iter(expected_results), actual_results)
-    test_log.Close()
-
-  @mock.patch('time.sleep', mock.Mock())
-  def testFindAll_filterComponent(self):
-    test_log = _CreateTestLog(
-        raw_logcat=type(self)._TEST_THREADTIME_LOGCAT_DATA)
-    test_log.Start()
-    test_log.WaitFor(r'.*last line.*', None)
-    test_log.Stop()
-    actual_results = test_log.FindAll(r'.*', component='LogcatMonitorTest')
-    expected_results = [
-        ('7890', '0987', 'V', 'LogcatMonitorTest',
-         'verbose logcat monitor test message 1'),
-        ('8901', '1098', 'D', 'LogcatMonitorTest',
-         'debug logcat monitor test message 2'),
-        ('9012', '2109', 'I', 'LogcatMonitorTest',
-         'info logcat monitor test message 3'),
-        ('0123', '3210', 'W', 'LogcatMonitorTest',
-         'warning logcat monitor test message 4'),
-        ('1234', '4321', 'E', 'LogcatMonitorTest',
-         'error logcat monitor test message 5'),
-        ('2345', '5432', 'F', 'LogcatMonitorTest',
-         'fatal logcat monitor test message 6'),
-        ('3456', '6543', 'D', 'LogcatMonitorTest',
-         'last line')
-    ]
-    self.assertIterEqual(iter(expected_results), actual_results)
-    test_log.Close()
-
-
-if __name__ == '__main__':
-  unittest.main(verbosity=2)
-
diff --git a/systrace/catapult/devil/devil/android/md5sum.py b/systrace/catapult/devil/devil/android/md5sum.py
deleted file mode 100644
index 6dece9e..0000000
--- a/systrace/catapult/devil/devil/android/md5sum.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import posixpath
-import re
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.utils import cmd_helper
-
-MD5SUM_DEVICE_LIB_PATH = '/data/local/tmp/md5sum'
-MD5SUM_DEVICE_BIN_PATH = MD5SUM_DEVICE_LIB_PATH + '/md5sum_bin'
-
-_STARTS_WITH_CHECKSUM_RE = re.compile(r'^\s*[0-9a-fA-F]{32}\s+')
-
-
-def CalculateHostMd5Sums(paths):
-  """Calculates the MD5 sum value for all items in |paths|.
-
-  Directories are traversed recursively and the MD5 sum of each file found is
-  reported in the result.
-
-  Args:
-    paths: A list of host paths to md5sum.
-  Returns:
-    A dict mapping file paths to their respective md5sum checksums.
-  """
-  if isinstance(paths, basestring):
-    paths = [paths]
-
-  md5sum_bin_host_path = devil_env.config.FetchPath('md5sum_host')
-  if not os.path.exists(md5sum_bin_host_path):
-    raise IOError('File not built: %s' % md5sum_bin_host_path)
-  out = cmd_helper.GetCmdOutput(
-    [md5sum_bin_host_path] + [os.path.realpath(p) for p in paths])
-
-  return _ParseMd5SumOutput(out.splitlines())
-
-
-def CalculateDeviceMd5Sums(paths, device):
-  """Calculates the MD5 sum value for all items in |paths|.
-
-  Directories are traversed recursively and the MD5 sum of each file found is
-  reported in the result.
-
-  Args:
-    paths: A list of device paths to md5sum.
-  Returns:
-    A dict mapping file paths to their respective md5sum checksums.
-  """
-  if not paths:
-    return {}
-
-  if isinstance(paths, basestring):
-    paths = [paths]
-  # Allow generators
-  paths = list(paths)
-
-  md5sum_dist_path = devil_env.config.FetchPath('md5sum_device', device=device)
-
-  if os.path.isdir(md5sum_dist_path):
-    md5sum_dist_bin_path = os.path.join(md5sum_dist_path, 'md5sum_bin')
-  else:
-    md5sum_dist_bin_path = md5sum_dist_path
-
-  if not os.path.exists(md5sum_dist_path):
-    raise IOError('File not built: %s' % md5sum_dist_path)
-  md5sum_file_size = os.path.getsize(md5sum_dist_bin_path)
-
-  # For better performance, make the script as small as possible to try and
-  # avoid needing to write to an intermediary file (which RunShellCommand will
-  # do if necessary).
-  md5sum_script = 'a=%s;' % MD5SUM_DEVICE_BIN_PATH
-  # Check if the binary is missing or has changed (using its file size as an
-  # indicator), and trigger a (re-)push via the exit code.
-  md5sum_script += '! [[ $(ls -l $a) = *%d* ]]&&exit 2;' % md5sum_file_size
-  # Make sure it can find libbase.so
-  md5sum_script += 'export LD_LIBRARY_PATH=%s;' % MD5SUM_DEVICE_LIB_PATH
-  if len(paths) > 1:
-    prefix = posixpath.commonprefix(paths)
-    if len(prefix) > 4:
-      md5sum_script += 'p="%s";' % prefix
-      paths = ['$p"%s"' % p[len(prefix):] for p in paths]
-
-  md5sum_script += ';'.join('$a %s' % p for p in paths)
-  # Don't fail the script if the last md5sum fails (due to file not found)
-  # Note: ":" is equivalent to "true".
-  md5sum_script += ';:'
-  try:
-    out = device.RunShellCommand(md5sum_script, shell=True, check_return=True)
-  except device_errors.AdbShellCommandFailedError as e:
-    # Push the binary only if it is found to not exist
-    # (faster than checking up-front).
-    if e.status == 2:
-      # If files were previously pushed as root (adbd running as root), trying
-      # to re-push as non-root causes the push command to report success, but
-      # actually fail. So, wipe the directory first.
-      device.RunShellCommand(['rm', '-rf', MD5SUM_DEVICE_LIB_PATH],
-                             as_root=True, check_return=True)
-      if os.path.isdir(md5sum_dist_path):
-        device.adb.Push(md5sum_dist_path, MD5SUM_DEVICE_LIB_PATH)
-      else:
-        mkdir_cmd = 'a=%s;[[ -e $a ]] || mkdir $a' % MD5SUM_DEVICE_LIB_PATH
-        device.RunShellCommand(mkdir_cmd, shell=True, check_return=True)
-        device.adb.Push(md5sum_dist_bin_path, MD5SUM_DEVICE_BIN_PATH)
-
-      out = device.RunShellCommand(md5sum_script, shell=True, check_return=True)
-    else:
-      raise
-
-  return _ParseMd5SumOutput(out)
-
-
-def _ParseMd5SumOutput(out):
-  hash_and_path = (l.split(None, 1) for l in out
-                   if l and _STARTS_WITH_CHECKSUM_RE.match(l))
-  return dict((p, h) for h, p in hash_and_path)
-
diff --git a/systrace/catapult/devil/devil/android/md5sum_test.py b/systrace/catapult/devil/devil/android/md5sum_test.py
deleted file mode 100755
index c9b4954..0000000
--- a/systrace/catapult/devil/devil/android/md5sum_test.py
+++ /dev/null
@@ -1,237 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android import md5sum
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-TEST_OUT_DIR = os.path.join('test', 'out', 'directory')
-HOST_MD5_EXECUTABLE = os.path.join(TEST_OUT_DIR, 'md5sum_bin_host')
-MD5_DIST = os.path.join(TEST_OUT_DIR, 'md5sum_dist')
-
-
-class Md5SumTest(unittest.TestCase):
-
-  def setUp(self):
-    mocked_attrs = {
-      'md5sum_host': HOST_MD5_EXECUTABLE,
-      'md5sum_device': MD5_DIST,
-    }
-    self._patchers = [
-      mock.patch('devil.devil_env._Environment.FetchPath',
-                 mock.Mock(side_effect=lambda a, device=None: mocked_attrs[a])),
-      mock.patch('os.path.exists',
-                 new=mock.Mock(return_value=True)),
-    ]
-    for p in self._patchers:
-      p.start()
-
-  def tearDown(self):
-    for p in self._patchers:
-      p.stop()
-
-  def testCalculateHostMd5Sums_singlePath(self):
-    test_path = '/test/host/file.dat'
-    mock_get_cmd_output = mock.Mock(
-        return_value='0123456789abcdeffedcba9876543210 /test/host/file.dat')
-    with mock.patch('devil.utils.cmd_helper.GetCmdOutput',
-                    new=mock_get_cmd_output):
-      out = md5sum.CalculateHostMd5Sums(test_path)
-      self.assertEquals(1, len(out))
-      self.assertTrue('/test/host/file.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/test/host/file.dat'])
-      mock_get_cmd_output.assert_called_once_with(
-          [HOST_MD5_EXECUTABLE, '/test/host/file.dat'])
-
-  def testCalculateHostMd5Sums_list(self):
-    test_paths = ['/test/host/file0.dat', '/test/host/file1.dat']
-    mock_get_cmd_output = mock.Mock(
-        return_value='0123456789abcdeffedcba9876543210 /test/host/file0.dat\n'
-                     '123456789abcdef00fedcba987654321 /test/host/file1.dat\n')
-    with mock.patch('devil.utils.cmd_helper.GetCmdOutput',
-                    new=mock_get_cmd_output):
-      out = md5sum.CalculateHostMd5Sums(test_paths)
-      self.assertEquals(2, len(out))
-      self.assertTrue('/test/host/file0.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/test/host/file0.dat'])
-      self.assertTrue('/test/host/file1.dat' in out)
-      self.assertEquals('123456789abcdef00fedcba987654321',
-                        out['/test/host/file1.dat'])
-      mock_get_cmd_output.assert_called_once_with(
-          [HOST_MD5_EXECUTABLE, '/test/host/file0.dat',
-           '/test/host/file1.dat'])
-
-  def testCalculateHostMd5Sums_generator(self):
-    test_paths = ('/test/host/' + p for p in ['file0.dat', 'file1.dat'])
-    mock_get_cmd_output = mock.Mock(
-        return_value='0123456789abcdeffedcba9876543210 /test/host/file0.dat\n'
-                     '123456789abcdef00fedcba987654321 /test/host/file1.dat\n')
-    with mock.patch('devil.utils.cmd_helper.GetCmdOutput',
-                    new=mock_get_cmd_output):
-      out = md5sum.CalculateHostMd5Sums(test_paths)
-      self.assertEquals(2, len(out))
-      self.assertTrue('/test/host/file0.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/test/host/file0.dat'])
-      self.assertTrue('/test/host/file1.dat' in out)
-      self.assertEquals('123456789abcdef00fedcba987654321',
-                        out['/test/host/file1.dat'])
-      mock_get_cmd_output.assert_called_once_with(
-          [HOST_MD5_EXECUTABLE, '/test/host/file0.dat', '/test/host/file1.dat'])
-
-  def testCalculateDeviceMd5Sums_noPaths(self):
-    device = mock.NonCallableMock()
-    device.RunShellCommand = mock.Mock(side_effect=Exception())
-
-    out = md5sum.CalculateDeviceMd5Sums([], device)
-    self.assertEquals(0, len(out))
-
-  def testCalculateDeviceMd5Sums_singlePath(self):
-    test_path = '/storage/emulated/legacy/test/file.dat'
-
-    device = mock.NonCallableMock()
-    device_md5sum_output = [
-        '0123456789abcdeffedcba9876543210 '
-            '/storage/emulated/legacy/test/file.dat',
-    ]
-    device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
-
-    with mock.patch('os.path.getsize', return_value=1337):
-      out = md5sum.CalculateDeviceMd5Sums(test_path, device)
-      self.assertEquals(1, len(out))
-      self.assertTrue('/storage/emulated/legacy/test/file.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/storage/emulated/legacy/test/file.dat'])
-      self.assertEquals(1, len(device.RunShellCommand.call_args_list))
-
-  def testCalculateDeviceMd5Sums_list(self):
-    test_path = ['/storage/emulated/legacy/test/file0.dat',
-                 '/storage/emulated/legacy/test/file1.dat']
-    device = mock.NonCallableMock()
-    device_md5sum_output = [
-        '0123456789abcdeffedcba9876543210 '
-            '/storage/emulated/legacy/test/file0.dat',
-        '123456789abcdef00fedcba987654321 '
-            '/storage/emulated/legacy/test/file1.dat',
-    ]
-    device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
-
-    with mock.patch('os.path.getsize', return_value=1337):
-      out = md5sum.CalculateDeviceMd5Sums(test_path, device)
-      self.assertEquals(2, len(out))
-      self.assertTrue('/storage/emulated/legacy/test/file0.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/storage/emulated/legacy/test/file0.dat'])
-      self.assertTrue('/storage/emulated/legacy/test/file1.dat' in out)
-      self.assertEquals('123456789abcdef00fedcba987654321',
-                        out['/storage/emulated/legacy/test/file1.dat'])
-      self.assertEquals(1, len(device.RunShellCommand.call_args_list))
-
-  def testCalculateDeviceMd5Sums_generator(self):
-    test_path = ('/storage/emulated/legacy/test/file%d.dat' % n
-                 for n in xrange(0, 2))
-
-    device = mock.NonCallableMock()
-    device_md5sum_output = [
-        '0123456789abcdeffedcba9876543210 '
-            '/storage/emulated/legacy/test/file0.dat',
-        '123456789abcdef00fedcba987654321 '
-            '/storage/emulated/legacy/test/file1.dat',
-    ]
-    device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
-
-    with mock.patch('os.path.getsize', return_value=1337):
-      out = md5sum.CalculateDeviceMd5Sums(test_path, device)
-      self.assertEquals(2, len(out))
-      self.assertTrue('/storage/emulated/legacy/test/file0.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/storage/emulated/legacy/test/file0.dat'])
-      self.assertTrue('/storage/emulated/legacy/test/file1.dat' in out)
-      self.assertEquals('123456789abcdef00fedcba987654321',
-                        out['/storage/emulated/legacy/test/file1.dat'])
-      self.assertEquals(1, len(device.RunShellCommand.call_args_list))
-
-  def testCalculateDeviceMd5Sums_singlePath_linkerWarning(self):
-    # See crbug/479966
-    test_path = '/storage/emulated/legacy/test/file.dat'
-
-    device = mock.NonCallableMock()
-    device_md5sum_output = [
-        'WARNING: linker: /data/local/tmp/md5sum/md5sum_bin: '
-            'unused DT entry: type 0x1d arg 0x15db',
-        'THIS_IS_NOT_A_VALID_CHECKSUM_ZZZ some random text',
-        '0123456789abcdeffedcba9876543210 '
-            '/storage/emulated/legacy/test/file.dat',
-    ]
-    device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
-
-    with mock.patch('os.path.getsize', return_value=1337):
-      out = md5sum.CalculateDeviceMd5Sums(test_path, device)
-      self.assertEquals(1, len(out))
-      self.assertTrue('/storage/emulated/legacy/test/file.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/storage/emulated/legacy/test/file.dat'])
-      self.assertEquals(1, len(device.RunShellCommand.call_args_list))
-
-  def testCalculateDeviceMd5Sums_list_fileMissing(self):
-    test_path = ['/storage/emulated/legacy/test/file0.dat',
-                 '/storage/emulated/legacy/test/file1.dat']
-    device = mock.NonCallableMock()
-    device_md5sum_output = [
-        '0123456789abcdeffedcba9876543210 '
-            '/storage/emulated/legacy/test/file0.dat',
-        '[0819/203513:ERROR:md5sum.cc(25)] Could not open file asdf',
-        '',
-    ]
-    device.RunShellCommand = mock.Mock(return_value=device_md5sum_output)
-
-    with mock.patch('os.path.getsize', return_value=1337):
-      out = md5sum.CalculateDeviceMd5Sums(test_path, device)
-      self.assertEquals(1, len(out))
-      self.assertTrue('/storage/emulated/legacy/test/file0.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/storage/emulated/legacy/test/file0.dat'])
-      self.assertEquals(1, len(device.RunShellCommand.call_args_list))
-
-  def testCalculateDeviceMd5Sums_requiresBinary(self):
-    test_path = '/storage/emulated/legacy/test/file.dat'
-
-    device = mock.NonCallableMock()
-    device.adb = mock.NonCallableMock()
-    device.adb.Push = mock.Mock()
-    device_md5sum_output = [
-        'WARNING: linker: /data/local/tmp/md5sum/md5sum_bin: '
-            'unused DT entry: type 0x1d arg 0x15db',
-        'THIS_IS_NOT_A_VALID_CHECKSUM_ZZZ some random text',
-        '0123456789abcdeffedcba9876543210 '
-            '/storage/emulated/legacy/test/file.dat',
-    ]
-    error = device_errors.AdbShellCommandFailedError('cmd', 'out', 2)
-    device.RunShellCommand = mock.Mock(
-        side_effect=(error, '', device_md5sum_output))
-
-    with mock.patch('os.path.isdir', return_value=True), (
-         mock.patch('os.path.getsize', return_value=1337)):
-      out = md5sum.CalculateDeviceMd5Sums(test_path, device)
-      self.assertEquals(1, len(out))
-      self.assertTrue('/storage/emulated/legacy/test/file.dat' in out)
-      self.assertEquals('0123456789abcdeffedcba9876543210',
-                        out['/storage/emulated/legacy/test/file.dat'])
-      self.assertEquals(3, len(device.RunShellCommand.call_args_list))
-      device.adb.Push.assert_called_once_with(
-          'test/out/directory/md5sum_dist', '/data/local/tmp/md5sum')
-
-
-if __name__ == '__main__':
-  unittest.main(verbosity=2)
-
diff --git a/systrace/catapult/devil/devil/android/perf/__init__.py b/systrace/catapult/devil/devil/android/perf/__init__.py
deleted file mode 100644
index 50b23df..0000000
--- a/systrace/catapult/devil/devil/android/perf/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
diff --git a/systrace/catapult/devil/devil/android/perf/cache_control.py b/systrace/catapult/devil/devil/android/perf/cache_control.py
deleted file mode 100644
index 27782b5..0000000
--- a/systrace/catapult/devil/devil/android/perf/cache_control.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-class CacheControl(object):
-  _DROP_CACHES = '/proc/sys/vm/drop_caches'
-
-  def __init__(self, device):
-    self._device = device
-
-  def DropRamCaches(self):
-    """Drops the filesystem ram caches for performance testing."""
-    self._device.RunShellCommand(['sync'], check_return=True, as_root=True)
-    self._device.WriteFile(CacheControl._DROP_CACHES, '3', as_root=True)
diff --git a/systrace/catapult/devil/devil/android/perf/perf_control.py b/systrace/catapult/devil/devil/android/perf/perf_control.py
deleted file mode 100644
index 06a5db6..0000000
--- a/systrace/catapult/devil/devil/android/perf/perf_control.py
+++ /dev/null
@@ -1,210 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import atexit
-import logging
-import re
-
-from devil.android import device_errors
-
-logger = logging.getLogger(__name__)
-
-
-class PerfControl(object):
-  """Provides methods for setting the performance mode of a device."""
-
-  _AVAILABLE_GOVERNORS_REL_PATH = 'cpufreq/scaling_available_governors'
-  _CPU_FILE_PATTERN = re.compile(r'^cpu\d+$')
-  _CPU_PATH = '/sys/devices/system/cpu'
-  _KERNEL_MAX = '/sys/devices/system/cpu/kernel_max'
-
-  def __init__(self, device):
-    self._device = device
-    self._cpu_files = [
-        filename
-        for filename in self._device.ListDirectory(self._CPU_PATH, as_root=True)
-        if self._CPU_FILE_PATTERN.match(filename)]
-    assert self._cpu_files, 'Failed to detect CPUs.'
-    self._cpu_file_list = ' '.join(self._cpu_files)
-    logger.info('CPUs found: %s', self._cpu_file_list)
-
-    self._have_mpdecision = self._device.FileExists('/system/bin/mpdecision')
-
-    raw = self._ReadEachCpuFile(self._AVAILABLE_GOVERNORS_REL_PATH)
-    self._available_governors = [
-        (cpu, raw_governors.strip().split() if not exit_code else None)
-        for cpu, raw_governors, exit_code in raw]
-
-  def SetHighPerfMode(self):
-    """Sets the highest stable performance mode for the device."""
-    try:
-      self._device.EnableRoot()
-    except device_errors.CommandFailedError:
-      message = 'Need root for performance mode. Results may be NOISY!!'
-      logger.warning(message)
-      # Add an additional warning at exit, such that it's clear that any results
-      # may be different/noisy (due to the lack of intended performance mode).
-      atexit.register(logger.warning, message)
-      return
-
-    product_model = self._device.product_model
-    # TODO(epenner): Enable on all devices (http://crbug.com/383566)
-    if 'Nexus 4' == product_model:
-      self._ForceAllCpusOnline(True)
-      if not self._AllCpusAreOnline():
-        logger.warning('Failed to force CPUs online. Results may be NOISY!')
-      self.SetScalingGovernor('performance')
-    elif 'Nexus 5' == product_model:
-      self._ForceAllCpusOnline(True)
-      if not self._AllCpusAreOnline():
-        logger.warning('Failed to force CPUs online. Results may be NOISY!')
-      self.SetScalingGovernor('performance')
-      self._SetScalingMaxFreq(1190400)
-      self._SetMaxGpuClock(200000000)
-    else:
-      self.SetScalingGovernor('performance')
-
-  def SetPerfProfilingMode(self):
-    """Enables all cores for reliable perf profiling."""
-    self._ForceAllCpusOnline(True)
-    self.SetScalingGovernor('performance')
-    if not self._AllCpusAreOnline():
-      if not self._device.HasRoot():
-        raise RuntimeError('Need root to force CPUs online.')
-      raise RuntimeError('Failed to force CPUs online.')
-
-  def SetDefaultPerfMode(self):
-    """Sets the performance mode for the device to its default mode."""
-    if not self._device.HasRoot():
-      return
-    product_model = self._device.product_model
-    if 'Nexus 5' == product_model:
-      if self._AllCpusAreOnline():
-        self._SetScalingMaxFreq(2265600)
-        self._SetMaxGpuClock(450000000)
-
-    governor_mode = {
-        'GT-I9300': 'pegasusq',
-        'Galaxy Nexus': 'interactive',
-        'Nexus 4': 'ondemand',
-        'Nexus 5': 'ondemand',
-        'Nexus 7': 'interactive',
-        'Nexus 10': 'interactive'
-    }.get(product_model, 'ondemand')
-    self.SetScalingGovernor(governor_mode)
-    self._ForceAllCpusOnline(False)
-
-  def GetCpuInfo(self):
-    online = (output.rstrip() == '1' and status == 0
-              for (_, output, status) in self._ForEachCpu('cat "$CPU/online"'))
-    governor = (output.rstrip() if status == 0 else None
-                for (_, output, status)
-                in self._ForEachCpu('cat "$CPU/cpufreq/scaling_governor"'))
-    return zip(self._cpu_files, online, governor)
-
-  def _ForEachCpu(self, cmd):
-    script = '; '.join([
-        'for CPU in %s' % self._cpu_file_list,
-        'do %s' % cmd,
-        'echo -n "%~%$?%~%"',
-        'done'
-    ])
-    output = self._device.RunShellCommand(
-        script, cwd=self._CPU_PATH, check_return=True, as_root=True, shell=True)
-    output = '\n'.join(output).split('%~%')
-    return zip(self._cpu_files, output[0::2], (int(c) for c in output[1::2]))
-
-  def _WriteEachCpuFile(self, path, value):
-    self._ConditionallyWriteEachCpuFile(path, value, condition='true')
-
-  def _ConditionallyWriteEachCpuFile(self, path, value, condition):
-    template = (
-        '{condition} && test -e "$CPU/{path}" && echo {value} > "$CPU/{path}"')
-    results = self._ForEachCpu(
-        template.format(path=path, value=value, condition=condition))
-    cpus = ' '.join(cpu for (cpu, _, status) in results if status == 0)
-    if cpus:
-      logger.info('Successfully set %s to %r on: %s', path, value, cpus)
-    else:
-      logger.warning('Failed to set %s to %r on any cpus', path, value)
-
-  def _ReadEachCpuFile(self, path):
-    return self._ForEachCpu(
-        'cat "$CPU/{path}"'.format(path=path))
-
-  def SetScalingGovernor(self, value):
-    """Sets the scaling governor to the given value on all possible CPUs.
-
-    This does not attempt to set a governor to a value not reported as available
-    on the corresponding CPU.
-
-    Args:
-      value: [string] The new governor value.
-    """
-    condition = 'test -e "{path}" && grep -q {value} {path}'.format(
-        path=('${CPU}/%s' % self._AVAILABLE_GOVERNORS_REL_PATH),
-        value=value)
-    self._ConditionallyWriteEachCpuFile(
-        'cpufreq/scaling_governor', value, condition)
-
-  def GetScalingGovernor(self):
-    """Gets the currently set governor for each CPU.
-
-    Returns:
-      An iterable of 2-tuples, each containing the cpu and the current
-      governor.
-    """
-    raw = self._ReadEachCpuFile('cpufreq/scaling_governor')
-    return [
-        (cpu, raw_governor.strip() if not exit_code else None)
-        for cpu, raw_governor, exit_code in raw]
-
-  def ListAvailableGovernors(self):
-    """Returns the list of available governors for each CPU.
-
-    Returns:
-      An iterable of 2-tuples, each containing the cpu and a list of available
-      governors for that cpu.
-    """
-    return self._available_governors
-
-  def _SetScalingMaxFreq(self, value):
-    self._WriteEachCpuFile('cpufreq/scaling_max_freq', '%d' % value)
-
-  def _SetMaxGpuClock(self, value):
-    self._device.WriteFile('/sys/class/kgsl/kgsl-3d0/max_gpuclk',
-                           str(value),
-                           as_root=True)
-
-  def _AllCpusAreOnline(self):
-    results = self._ForEachCpu('cat "$CPU/online"')
-    # TODO(epenner): Investigate why file may be missing
-    # (http://crbug.com/397118)
-    return all(output.rstrip() == '1' and status == 0
-               for (cpu, output, status) in results
-               if cpu != 'cpu0')
-
-  def _ForceAllCpusOnline(self, force_online):
-    """Enable all CPUs on a device.
-
-    Some vendors (or only Qualcomm?) hot-plug their CPUs, which can add noise
-    to measurements:
-    - In perf, samples are only taken for the CPUs that are online when the
-      measurement is started.
-    - The scaling governor can't be set for an offline CPU and frequency scaling
-      on newly enabled CPUs adds noise to both perf and tracing measurements.
-
-    It appears Qualcomm is the only vendor that hot-plugs CPUs, and on Qualcomm
-    this is done by "mpdecision".
-
-    """
-    if self._have_mpdecision:
-      cmd = ['stop', 'mpdecision'] if force_online else ['start', 'mpdecision']
-      self._device.RunShellCommand(cmd, check_return=True, as_root=True)
-
-    if not self._have_mpdecision and not self._AllCpusAreOnline():
-      logger.warning('Unexpected cpu hot plugging detected.')
-
-    if force_online:
-      self._ForEachCpu('echo 1 > "$CPU/online"')
diff --git a/systrace/catapult/devil/devil/android/perf/perf_control_devicetest.py b/systrace/catapult/devil/devil/android/perf/perf_control_devicetest.py
deleted file mode 100644
index b645803..0000000
--- a/systrace/catapult/devil/devil/android/perf/perf_control_devicetest.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-# pylint: disable=W0212
-
-import os
-import sys
-import unittest
-
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..'))
-
-from devil.android import device_test_case
-from devil.android import device_utils
-from devil.android.perf import perf_control
-
-
-class TestPerfControl(device_test_case.DeviceTestCase):
-
-  def setUp(self):
-    super(TestPerfControl, self).setUp()
-    if not os.getenv('BUILDTYPE'):
-      os.environ['BUILDTYPE'] = 'Debug'
-    self._device = device_utils.DeviceUtils(self.serial)
-
-  def testHighPerfMode(self):
-    perf = perf_control.PerfControl(self._device)
-    try:
-      perf.SetPerfProfilingMode()
-      cpu_info = perf.GetCpuInfo()
-      self.assertEquals(len(perf._cpu_files), len(cpu_info))
-      for _, online, governor in cpu_info:
-        self.assertTrue(online)
-        self.assertEquals('performance', governor)
-    finally:
-      perf.SetDefaultPerfMode()
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/perf/surface_stats_collector.py b/systrace/catapult/devil/devil/android/perf/surface_stats_collector.py
deleted file mode 100644
index eab493d..0000000
--- a/systrace/catapult/devil/devil/android/perf/surface_stats_collector.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import Queue
-import threading
-
-
-# Log marker containing SurfaceTexture timestamps.
-_SURFACE_TEXTURE_TIMESTAMPS_MESSAGE = 'SurfaceTexture update timestamps'
-_SURFACE_TEXTURE_TIMESTAMP_RE = r'\d+'
-
-
-class SurfaceStatsCollector(object):
-  """Collects surface stats for a SurfaceView from the output of SurfaceFlinger.
-
-  Args:
-    device: A DeviceUtils instance.
-  """
-
-  def __init__(self, device):
-    self._device = device
-    self._collector_thread = None
-    self._surface_before = None
-    self._get_data_event = None
-    self._data_queue = None
-    self._stop_event = None
-    self._warn_about_empty_data = True
-
-  def DisableWarningAboutEmptyData(self):
-    self._warn_about_empty_data = False
-
-  def Start(self):
-    assert not self._collector_thread
-
-    if self._ClearSurfaceFlingerLatencyData():
-      self._get_data_event = threading.Event()
-      self._stop_event = threading.Event()
-      self._data_queue = Queue.Queue()
-      self._collector_thread = threading.Thread(target=self._CollectorThread)
-      self._collector_thread.start()
-    else:
-      raise Exception('SurfaceFlinger not supported on this device.')
-
-  def Stop(self):
-    assert self._collector_thread
-    (refresh_period, timestamps) = self._GetDataFromThread()
-    if self._collector_thread:
-      self._stop_event.set()
-      self._collector_thread.join()
-      self._collector_thread = None
-    return (refresh_period, timestamps)
-
-  def _CollectorThread(self):
-    last_timestamp = 0
-    timestamps = []
-    retries = 0
-
-    while not self._stop_event.is_set():
-      self._get_data_event.wait(1)
-      try:
-        refresh_period, new_timestamps = self._GetSurfaceFlingerFrameData()
-        if refresh_period is None or timestamps is None:
-          retries += 1
-          if retries < 3:
-            continue
-          if last_timestamp:
-            # Some data has already been collected, but either the app
-            # was closed or there's no new data. Signal the main thread and
-            # wait.
-            self._data_queue.put((None, None))
-            self._stop_event.wait()
-            break
-          raise Exception('Unable to get surface flinger latency data')
-
-        timestamps += [timestamp for timestamp in new_timestamps
-                       if timestamp > last_timestamp]
-        if len(timestamps):
-          last_timestamp = timestamps[-1]
-
-        if self._get_data_event.is_set():
-          self._get_data_event.clear()
-          self._data_queue.put((refresh_period, timestamps))
-          timestamps = []
-      except Exception as e:
-        # On any error, before aborting, put the exception into _data_queue to
-        # prevent the main thread from waiting at _data_queue.get() infinitely.
-        self._data_queue.put(e)
-        raise
-
-  def _GetDataFromThread(self):
-    self._get_data_event.set()
-    ret = self._data_queue.get()
-    if isinstance(ret, Exception):
-      raise ret
-    return ret
-
-  def _ClearSurfaceFlingerLatencyData(self):
-    """Clears the SurfaceFlinger latency data.
-
-    Returns:
-      True if SurfaceFlinger latency is supported by the device, otherwise
-      False.
-    """
-    # The command returns nothing if it is supported, otherwise returns many
-    # lines of result just like 'dumpsys SurfaceFlinger'.
-    results = self._device.RunShellCommand(
-        ['dumpsys', 'SurfaceFlinger', '--latency-clear', 'SurfaceView'],
-        check_return=True)
-    return not len(results)
-
-  def GetSurfaceFlingerPid(self):
-    try:
-      # Returns the first matching PID found.
-      return next(p.pid for p in self._device.ListProcesses('surfaceflinger'))
-    except StopIteration:
-      raise Exception('Unable to get surface flinger process id')
-
-  def _GetSurfaceFlingerFrameData(self):
-    """Returns collected SurfaceFlinger frame timing data.
-
-    Returns:
-      A tuple containing:
-      - The display's nominal refresh period in milliseconds.
-      - A list of timestamps signifying frame presentation times in
-        milliseconds.
-      The return value may be (None, None) if there was no data collected (for
-      example, if the app was closed before the collector thread has finished).
-    """
-    # adb shell dumpsys SurfaceFlinger --latency <window name>
-    # prints some information about the last 128 frames displayed in
-    # that window.
-    # The data returned looks like this:
-    # 16954612
-    # 7657467895508   7657482691352   7657493499756
-    # 7657484466553   7657499645964   7657511077881
-    # 7657500793457   7657516600576   7657527404785
-    # (...)
-    #
-    # The first line is the refresh period (here 16.95 ms), it is followed
-    # by 128 lines w/ 3 timestamps in nanosecond each:
-    # A) when the app started to draw
-    # B) the vsync immediately preceding SF submitting the frame to the h/w
-    # C) timestamp immediately after SF submitted that frame to the h/w
-    #
-    # The difference between the 1st and 3rd timestamp is the frame-latency.
-    # An interesting data is when the frame latency crosses a refresh period
-    # boundary, this can be calculated this way:
-    #
-    # ceil((C - A) / refresh-period)
-    #
-    # (each time the number above changes, we have a "jank").
-    # If this happens a lot during an animation, the animation appears
-    # janky, even if it runs at 60 fps in average.
-    #
-    # We use the special "SurfaceView" window name because the statistics for
-    # the activity's main window are not updated when the main web content is
-    # composited into a SurfaceView.
-    results = self._device.RunShellCommand(
-        ['dumpsys', 'SurfaceFlinger', '--latency', 'SurfaceView'],
-        check_return=True)
-    if not len(results):
-      return (None, None)
-
-    timestamps = []
-    nanoseconds_per_millisecond = 1e6
-    refresh_period = long(results[0]) / nanoseconds_per_millisecond
-
-    # If a fence associated with a frame is still pending when we query the
-    # latency data, SurfaceFlinger gives the frame a timestamp of INT64_MAX.
-    # Since we only care about completed frames, we will ignore any timestamps
-    # with this value.
-    pending_fence_timestamp = (1 << 63) - 1
-
-    for line in results[1:]:
-      fields = line.split()
-      if len(fields) != 3:
-        continue
-      timestamp = long(fields[1])
-      if timestamp == pending_fence_timestamp:
-        continue
-      timestamp /= nanoseconds_per_millisecond
-      timestamps.append(timestamp)
-
-    return (refresh_period, timestamps)
diff --git a/systrace/catapult/devil/devil/android/perf/thermal_throttle.py b/systrace/catapult/devil/devil/android/perf/thermal_throttle.py
deleted file mode 100644
index 546a92e..0000000
--- a/systrace/catapult/devil/devil/android/perf/thermal_throttle.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-
-logger = logging.getLogger(__name__)
-
-
-class OmapThrottlingDetector(object):
-  """Class to detect and track thermal throttling on an OMAP 4."""
-  OMAP_TEMP_FILE = ('/sys/devices/platform/omap/omap_temp_sensor.0/'
-                    'temperature')
-
-  @staticmethod
-  def IsSupported(device):
-    return device.FileExists(OmapThrottlingDetector.OMAP_TEMP_FILE)
-
-  def __init__(self, device):
-    self._device = device
-
-  @staticmethod
-  def BecameThrottled(log_line):
-    return 'omap_thermal_throttle' in log_line
-
-  @staticmethod
-  def BecameUnthrottled(log_line):
-    return 'omap_thermal_unthrottle' in log_line
-
-  @staticmethod
-  def GetThrottlingTemperature(log_line):
-    if 'throttle_delayed_work_fn' in log_line:
-      return float([s for s in log_line.split() if s.isdigit()][0]) / 1000.0
-
-  def GetCurrentTemperature(self):
-    tempdata = self._device.ReadFile(OmapThrottlingDetector.OMAP_TEMP_FILE)
-    return float(tempdata) / 1000.0
-
-
-class ExynosThrottlingDetector(object):
-  """Class to detect and track thermal throttling on an Exynos 5."""
-  @staticmethod
-  def IsSupported(device):
-    return device.FileExists('/sys/bus/exynos5-core')
-
-  def __init__(self, device):
-    pass
-
-  @staticmethod
-  def BecameThrottled(log_line):
-    return 'exynos_tmu: Throttling interrupt' in log_line
-
-  @staticmethod
-  def BecameUnthrottled(log_line):
-    return 'exynos_thermal_unthrottle: not throttling' in log_line
-
-  @staticmethod
-  def GetThrottlingTemperature(_log_line):
-    return None
-
-  @staticmethod
-  def GetCurrentTemperature():
-    return None
-
-
-class ThermalThrottle(object):
-  """Class to detect and track thermal throttling.
-
-  Usage:
-    Wait for IsThrottled() to be False before running test
-    After running test call HasBeenThrottled() to find out if the
-    test run was affected by thermal throttling.
-  """
-
-  def __init__(self, device):
-    self._device = device
-    self._throttled = False
-    self._detector = None
-    if OmapThrottlingDetector.IsSupported(device):
-      self._detector = OmapThrottlingDetector(device)
-    elif ExynosThrottlingDetector.IsSupported(device):
-      self._detector = ExynosThrottlingDetector(device)
-
-  def HasBeenThrottled(self):
-    """True if there has been any throttling since the last call to
-       HasBeenThrottled or IsThrottled.
-    """
-    return self._ReadLog()
-
-  def IsThrottled(self):
-    """True if currently throttled."""
-    self._ReadLog()
-    return self._throttled
-
-  def _ReadLog(self):
-    if not self._detector:
-      return False
-    has_been_throttled = False
-    serial_number = str(self._device)
-    log = self._device.RunShellCommand(
-        ['dmesg', '-c'], large_output=True, check_return=True)
-    degree_symbol = unichr(0x00B0)
-    for line in log:
-      if self._detector.BecameThrottled(line):
-        if not self._throttled:
-          logger.warning('>>> Device %s thermally throttled', serial_number)
-        self._throttled = True
-        has_been_throttled = True
-      elif self._detector.BecameUnthrottled(line):
-        if self._throttled:
-          logger.warning('>>> Device %s thermally unthrottled', serial_number)
-        self._throttled = False
-        has_been_throttled = True
-      temperature = self._detector.GetThrottlingTemperature(line)
-      if temperature is not None:
-        logger.info(u'Device %s thermally throttled at %3.1f%sC',
-                    serial_number, temperature, degree_symbol)
-
-    if logger.isEnabledFor(logging.DEBUG):
-      # Print current temperature of CPU SoC.
-      temperature = self._detector.GetCurrentTemperature()
-      if temperature is not None:
-        logger.debug(u'Current SoC temperature of %s = %3.1f%sC',
-                     serial_number, temperature, degree_symbol)
-
-      # Print temperature of battery, to give a system temperature
-      dumpsys_log = self._device.RunShellCommand(
-          ['dumpsys', 'battery'], check_return=True)
-      for line in dumpsys_log:
-        if 'temperature' in line:
-          btemp = float([s for s in line.split() if s.isdigit()][0]) / 10.0
-          logger.debug(u'Current battery temperature of %s = %3.1f%sC',
-                       serial_number, btemp, degree_symbol)
-
-    return has_been_throttled
diff --git a/systrace/catapult/devil/devil/android/ports.py b/systrace/catapult/devil/devil/android/ports.py
deleted file mode 100644
index 1d4e5f2..0000000
--- a/systrace/catapult/devil/devil/android/ports.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Functions that deal with local and device ports."""
-
-import contextlib
-import fcntl
-import httplib
-import logging
-import os
-import socket
-import traceback
-
-logger = logging.getLogger(__name__)
-
-# The net test server is started from port 10201.
-_TEST_SERVER_PORT_FIRST = 10201
-_TEST_SERVER_PORT_LAST = 30000
-# A file to record next valid port of test server.
-_TEST_SERVER_PORT_FILE = '/tmp/test_server_port'
-_TEST_SERVER_PORT_LOCKFILE = '/tmp/test_server_port.lock'
-
-
-# The following two methods are used to allocate the port source for various
-# types of test servers. Because some net-related tests can be run on shards at
-# same time, it's important to have a mechanism to allocate the port
-# process-safe. In here, we implement the safe port allocation by leveraging
-# flock.
-def ResetTestServerPortAllocation():
-  """Resets the port allocation to start from TEST_SERVER_PORT_FIRST.
-
-  Returns:
-    Returns True if reset successes. Otherwise returns False.
-  """
-  try:
-    with open(_TEST_SERVER_PORT_FILE, 'w') as fp:
-      fp.write('%d' % _TEST_SERVER_PORT_FIRST)
-    return True
-  except Exception:  # pylint: disable=broad-except
-    logger.exception('Error while resetting port allocation')
-  return False
-
-
-def AllocateTestServerPort():
-  """Allocates a port incrementally.
-
-  Returns:
-    Returns a valid port which should be in between TEST_SERVER_PORT_FIRST and
-    TEST_SERVER_PORT_LAST. Returning 0 means no more valid port can be used.
-  """
-  port = 0
-  ports_tried = []
-  try:
-    fp_lock = open(_TEST_SERVER_PORT_LOCKFILE, 'w')
-    fcntl.flock(fp_lock, fcntl.LOCK_EX)
-    # Get current valid port and calculate next valid port.
-    if not os.path.exists(_TEST_SERVER_PORT_FILE):
-      ResetTestServerPortAllocation()
-    with open(_TEST_SERVER_PORT_FILE, 'r+') as fp:
-      port = int(fp.read())
-      ports_tried.append(port)
-      while not IsHostPortAvailable(port):
-        port += 1
-        ports_tried.append(port)
-      if (port > _TEST_SERVER_PORT_LAST or
-          port < _TEST_SERVER_PORT_FIRST):
-        port = 0
-      else:
-        fp.seek(0, os.SEEK_SET)
-        fp.write('%d' % (port + 1))
-  except Exception:  # pylint: disable=broad-except
-    logger.exception('Error while allocating port')
-  finally:
-    if fp_lock:
-      fcntl.flock(fp_lock, fcntl.LOCK_UN)
-      fp_lock.close()
-  if port:
-    logger.info('Allocate port %d for test server.', port)
-  else:
-    logger.error('Could not allocate port for test server. '
-                 'List of ports tried: %s', str(ports_tried))
-  return port
-
-
-def IsHostPortAvailable(host_port):
-  """Checks whether the specified host port is available.
-
-  Args:
-    host_port: Port on host to check.
-
-  Returns:
-    True if the port on host is available, otherwise returns False.
-  """
-  s = socket.socket()
-  try:
-    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-    s.bind(('', host_port))
-    s.close()
-    return True
-  except socket.error:
-    return False
-
-
-def IsDevicePortUsed(device, device_port, state=''):
-  """Checks whether the specified device port is used or not.
-
-  Args:
-    device: A DeviceUtils instance.
-    device_port: Port on device we want to check.
-    state: String of the specified state. Default is empty string, which
-           means any state.
-
-  Returns:
-    True if the port on device is already used, otherwise returns False.
-  """
-  base_urls = ('127.0.0.1:%d' % device_port, 'localhost:%d' % device_port)
-  netstat_results = device.RunShellCommand(
-      ['netstat', '-a'], check_return=True, large_output=True)
-  for single_connect in netstat_results:
-    # Column 3 is the local address which we want to check with.
-    connect_results = single_connect.split()
-    if connect_results[0] != 'tcp':
-      continue
-    if len(connect_results) < 6:
-      raise Exception('Unexpected format while parsing netstat line: ' +
-                      single_connect)
-    is_state_match = connect_results[5] == state if state else True
-    if connect_results[3] in base_urls and is_state_match:
-      return True
-  return False
-
-
-def IsHttpServerConnectable(host, port, tries=3, command='GET', path='/',
-                            expected_read='', timeout=2):
-  """Checks whether the specified http server is ready to serve request or not.
-
-  Args:
-    host: Host name of the HTTP server.
-    port: Port number of the HTTP server.
-    tries: How many times we want to test the connection. The default value is
-           3.
-    command: The http command we use to connect to HTTP server. The default
-             command is 'GET'.
-    path: The path we use when connecting to HTTP server. The default path is
-          '/'.
-    expected_read: The content we expect to read from the response. The default
-                   value is ''.
-    timeout: Timeout (in seconds) for each http connection. The default is 2s.
-
-  Returns:
-    Tuple of (connect status, client error). connect status is a boolean value
-    to indicate whether the server is connectable. client_error is the error
-    message the server returns when connect status is false.
-  """
-  assert tries >= 1
-  for i in xrange(0, tries):
-    client_error = None
-    try:
-      with contextlib.closing(httplib.HTTPConnection(
-          host, port, timeout=timeout)) as http:
-        # Output some debug information when we have tried more than 2 times.
-        http.set_debuglevel(i >= 2)
-        http.request(command, path)
-        r = http.getresponse()
-        content = r.read()
-        if r.status == 200 and r.reason == 'OK' and content == expected_read:
-          return (True, '')
-        client_error = ('Bad response: %s %s version %s\n  ' %
-                        (r.status, r.reason, r.version) +
-                        '\n  '.join([': '.join(h) for h in r.getheaders()]))
-    except (httplib.HTTPException, socket.error) as e:
-      # Probably too quick connecting: try again.
-      exception_error_msgs = traceback.format_exception_only(type(e), e)
-      if exception_error_msgs:
-        client_error = ''.join(exception_error_msgs)
-  # Only returns last client_error.
-  return (False, client_error or 'Timeout')
diff --git a/systrace/catapult/devil/devil/android/sdk/__init__.py b/systrace/catapult/devil/devil/android/sdk/__init__.py
deleted file mode 100644
index f95d3b2..0000000
--- a/systrace/catapult/devil/devil/android/sdk/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# This package is intended for modules that are very tightly coupled to
-# tools or APIs from the Android SDK.
diff --git a/systrace/catapult/devil/devil/android/sdk/aapt.py b/systrace/catapult/devil/devil/android/sdk/aapt.py
deleted file mode 100644
index 7ae3a93..0000000
--- a/systrace/catapult/devil/devil/android/sdk/aapt.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""This module wraps the Android Asset Packaging Tool."""
-
-from devil.android.sdk import build_tools
-from devil.utils import cmd_helper
-from devil.utils import lazy
-
-
-_aapt_path = lazy.WeakConstant(lambda: build_tools.GetPath('aapt'))
-
-
-def _RunAaptCmd(args):
-  """Runs an aapt command.
-
-  Args:
-    args: A list of arguments for aapt.
-
-  Returns:
-    The output of the command.
-  """
-  cmd = [_aapt_path.read()] + args
-  status, output = cmd_helper.GetCmdStatusAndOutput(cmd)
-  if status != 0:
-    raise Exception('Failed running aapt command: "%s" with output "%s".' %
-                    (' '.join(cmd), output))
-  return output
-
-
-def Dump(what, apk, assets=None):
-  """Returns the output of the aapt dump command.
-
-  Args:
-    what: What you want to dump.
-    apk: Path to apk you want to dump information for.
-    assets: List of assets in apk you want to dump information for.
-  """
-  assets = assets or []
-  if isinstance(assets, basestring):
-    assets = [assets]
-  return _RunAaptCmd(['dump', what, apk] + assets).splitlines()
diff --git a/systrace/catapult/devil/devil/android/sdk/adb_compatibility_devicetest.py b/systrace/catapult/devil/devil/android/sdk/adb_compatibility_devicetest.py
deleted file mode 100644
index cbe2a1b..0000000
--- a/systrace/catapult/devil/devil/android/sdk/adb_compatibility_devicetest.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import os
-import posixpath
-import random
-import signal
-import sys
-import unittest
-
-_CATAPULT_BASE_DIR = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..', '..', '..', '..'))
-
-sys.path.append(os.path.join(_CATAPULT_BASE_DIR, 'devil'))
-from devil import devil_env
-from devil.android import device_errors
-from devil.android import device_test_case
-from devil.android.sdk import adb_wrapper
-from devil.utils import cmd_helper
-from devil.utils import timeout_retry
-
-
-_TEST_DATA_DIR = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), 'test', 'data'))
-
-
-def _hostAdbPids():
-  ps_status, ps_output = cmd_helper.GetCmdStatusAndOutput(
-      ['pgrep', '-l', 'adb'])
-  if ps_status != 0:
-    return []
-
-  pids_and_names = (line.split() for line in ps_output.splitlines())
-  return [int(pid) for pid, name in pids_and_names
-          if name == 'adb']
-
-
-class AdbCompatibilityTest(device_test_case.DeviceTestCase):
-
-  @classmethod
-  def setUpClass(cls):
-    custom_adb_path = os.environ.get('ADB_PATH')
-    custom_deps = {
-      'config_type': 'BaseConfig',
-      'dependencies': {},
-    }
-    if custom_adb_path:
-      custom_deps['dependencies']['adb'] = {
-        'file_info': {
-          devil_env.GetPlatform(): {
-            'local_paths': [custom_adb_path],
-          },
-        },
-      }
-    devil_env.config.Initialize(configs=[custom_deps])
-
-  def testStartServer(self):
-    # Manually kill off any instances of adb.
-    adb_pids = _hostAdbPids()
-    for p in adb_pids:
-      os.kill(p, signal.SIGKILL)
-
-    self.assertIsNotNone(
-        timeout_retry.WaitFor(
-            lambda: not _hostAdbPids(), wait_period=0.1, max_tries=10))
-
-    # start the adb server
-    start_server_status, _ = cmd_helper.GetCmdStatusAndOutput(
-        [adb_wrapper.AdbWrapper.GetAdbPath(), 'start-server'])
-
-    # verify that the server is now online
-    self.assertEquals(0, start_server_status)
-    self.assertIsNotNone(
-        timeout_retry.WaitFor(
-            lambda: bool(_hostAdbPids()), wait_period=0.1, max_tries=10))
-
-  def testKillServer(self):
-    adb_pids = _hostAdbPids()
-    if not adb_pids:
-      adb_wrapper.AdbWrapper.StartServer()
-
-    adb_pids = _hostAdbPids()
-    self.assertGreaterEqual(len(adb_pids), 1)
-
-    kill_server_status, _ = cmd_helper.GetCmdStatusAndOutput(
-        [adb_wrapper.AdbWrapper.GetAdbPath(), 'kill-server'])
-    self.assertEqual(0, kill_server_status)
-
-    adb_pids = _hostAdbPids()
-    self.assertEqual(0, len(adb_pids))
-
-  def testDevices(self):
-    devices = adb_wrapper.AdbWrapper.Devices()
-    self.assertNotEqual(0, len(devices), 'No devices found.')
-
-  def getTestInstance(self):
-    """Creates a real AdbWrapper instance for testing."""
-    return adb_wrapper.AdbWrapper(self.serial)
-
-  def testShell(self):
-    under_test = self.getTestInstance()
-    shell_ls_result = under_test.Shell('ls')
-    self.assertIsInstance(shell_ls_result, str)
-    self.assertTrue(bool(shell_ls_result))
-
-  def testShell_failed(self):
-    under_test = self.getTestInstance()
-    with self.assertRaises(device_errors.AdbShellCommandFailedError):
-      under_test.Shell('ls /foo/bar/baz')
-
-  def testShell_externalStorageDefined(self):
-    under_test = self.getTestInstance()
-    external_storage = under_test.Shell('echo $EXTERNAL_STORAGE')
-    self.assertIsInstance(external_storage, str)
-    self.assertTrue(posixpath.isabs(external_storage))
-
-  @contextlib.contextmanager
-  def getTestPushDestination(self, under_test):
-    """Creates a temporary directory suitable for pushing to."""
-    external_storage = under_test.Shell('echo $EXTERNAL_STORAGE').strip()
-    if not external_storage:
-      self.skipTest('External storage not available.')
-    while True:
-      random_hex = hex(random.randint(0, 2 ** 52))[2:]
-      name = 'tmp_push_test%s' % random_hex
-      path = posixpath.join(external_storage, name)
-      try:
-        under_test.Shell('ls %s' % path)
-      except device_errors.AdbShellCommandFailedError:
-        break
-    under_test.Shell('mkdir %s' % path)
-    try:
-      yield path
-    finally:
-      under_test.Shell('rm -rf %s' % path)
-
-  def testPush_fileToFile(self):
-    under_test = self.getTestInstance()
-    with self.getTestPushDestination(under_test) as push_target_directory:
-      src = os.path.join(_TEST_DATA_DIR, 'push_file.txt')
-      dest = posixpath.join(push_target_directory, 'push_file.txt')
-      with self.assertRaises(device_errors.AdbShellCommandFailedError):
-        under_test.Shell('ls %s' % dest)
-      under_test.Push(src, dest)
-      self.assertEquals(dest, under_test.Shell('ls %s' % dest).strip())
-
-  def testPush_fileToDirectory(self):
-    under_test = self.getTestInstance()
-    with self.getTestPushDestination(under_test) as push_target_directory:
-      src = os.path.join(_TEST_DATA_DIR, 'push_file.txt')
-      dest = push_target_directory
-      resulting_file = posixpath.join(dest, 'push_file.txt')
-      with self.assertRaises(device_errors.AdbShellCommandFailedError):
-        under_test.Shell('ls %s' % resulting_file)
-      under_test.Push(src, dest)
-      self.assertEquals(
-          resulting_file,
-          under_test.Shell('ls %s' % resulting_file).strip())
-
-  def testPush_directoryToDirectory(self):
-    under_test = self.getTestInstance()
-    with self.getTestPushDestination(under_test) as push_target_directory:
-      src = os.path.join(_TEST_DATA_DIR, 'push_directory')
-      dest = posixpath.join(push_target_directory, 'push_directory')
-      with self.assertRaises(device_errors.AdbShellCommandFailedError):
-        under_test.Shell('ls %s' % dest)
-      under_test.Push(src, dest)
-      self.assertEquals(
-          sorted(os.listdir(src)),
-          sorted(under_test.Shell('ls %s' % dest).strip().split()))
-
-  def testPush_directoryToExistingDirectory(self):
-    under_test = self.getTestInstance()
-    with self.getTestPushDestination(under_test) as push_target_directory:
-      src = os.path.join(_TEST_DATA_DIR, 'push_directory')
-      dest = push_target_directory
-      resulting_directory = posixpath.join(dest, 'push_directory')
-      with self.assertRaises(device_errors.AdbShellCommandFailedError):
-        under_test.Shell('ls %s' % resulting_directory)
-      under_test.Shell('mkdir %s' % resulting_directory)
-      under_test.Push(src, dest)
-      self.assertEquals(
-          sorted(os.listdir(src)),
-          sorted(under_test.Shell('ls %s' % resulting_directory).split()))
-
-  # TODO(jbudorick): Implement tests for the following:
-  # taskset -c
-  # devices [-l]
-  # pull
-  # shell
-  # ls
-  # logcat [-c] [-d] [-v] [-b]
-  # forward [--remove] [--list]
-  # jdwp
-  # install [-l] [-r] [-s] [-d]
-  # install-multiple [-l] [-r] [-s] [-d] [-p]
-  # uninstall [-k]
-  # backup -f [-apk] [-shared] [-nosystem] [-all]
-  # restore
-  # wait-for-device
-  # get-state (BROKEN IN THE M SDK)
-  # get-devpath
-  # remount
-  # reboot
-  # reboot-bootloader
-  # root
-  # emu
-
-  @classmethod
-  def tearDownClass(cls):
-    print
-    print
-    print 'tested %s' % adb_wrapper.AdbWrapper.GetAdbPath()
-    print '  %s' % adb_wrapper.AdbWrapper.Version()
-    print 'connected devices:'
-    try:
-      for d in adb_wrapper.AdbWrapper.Devices():
-        print '  %s' % d
-    except device_errors.AdbCommandFailedError:
-      print '  <failed to list devices>'
-      raise
-    finally:
-      print
-
-
-if __name__ == '__main__':
-  sys.exit(unittest.main())
diff --git a/systrace/catapult/devil/devil/android/sdk/adb_wrapper.py b/systrace/catapult/devil/devil/android/sdk/adb_wrapper.py
deleted file mode 100644
index 5d24d47..0000000
--- a/systrace/catapult/devil/devil/android/sdk/adb_wrapper.py
+++ /dev/null
@@ -1,940 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""This module wraps Android's adb tool.
-
-This is a thin wrapper around the adb interface. Any additional complexity
-should be delegated to a higher level (ex. DeviceUtils).
-"""
-
-import collections
-import distutils.version
-import errno
-import logging
-import os
-import posixpath
-import re
-import subprocess
-
-from devil import devil_env
-from devil.android import decorators
-from devil.android import device_errors
-from devil.utils import cmd_helper
-from devil.utils import lazy
-from devil.utils import timeout_retry
-
-with devil_env.SysPath(devil_env.DEPENDENCY_MANAGER_PATH):
-  import dependency_manager  # pylint: disable=import-error
-
-logger = logging.getLogger(__name__)
-
-
-ADB_KEYS_FILE = '/data/misc/adb/adb_keys'
-
-DEFAULT_TIMEOUT = 30
-DEFAULT_RETRIES = 2
-
-_ADB_VERSION_RE = re.compile(r'Android Debug Bridge version (\d+\.\d+\.\d+)')
-_EMULATOR_RE = re.compile(r'^emulator-[0-9]+$')
-_DEVICE_NOT_FOUND_RE = re.compile(r"error: device '(?P<serial>.+)' not found")
-_READY_STATE = 'device'
-_VERITY_DISABLE_RE = re.compile(r'Verity (already )?disabled')
-_VERITY_ENABLE_RE = re.compile(r'Verity (already )?enabled')
-_WAITING_FOR_DEVICE_RE = re.compile(r'- waiting for device -')
-
-
-def VerifyLocalFileExists(path):
-  """Verifies a local file exists.
-
-  Args:
-    path: Path to the local file.
-
-  Raises:
-    IOError: If the file doesn't exist.
-  """
-  if not os.path.exists(path):
-    raise IOError(errno.ENOENT, os.strerror(errno.ENOENT), path)
-
-
-def _CreateAdbEnvironment():
-  adb_env = dict(os.environ)
-  adb_env['ADB_LIBUSB'] = '0'
-  return adb_env
-
-
-def _FindAdb():
-  try:
-    return devil_env.config.LocalPath('adb')
-  except dependency_manager.NoPathFoundError:
-    pass
-
-  try:
-    return os.path.join(devil_env.config.LocalPath('android_sdk'),
-                        'platform-tools', 'adb')
-  except dependency_manager.NoPathFoundError:
-    pass
-
-  try:
-    return devil_env.config.FetchPath('adb')
-  except dependency_manager.NoPathFoundError:
-    raise device_errors.NoAdbError()
-
-
-def _GetVersion():
-  # pylint: disable=protected-access
-  raw_version = AdbWrapper._RunAdbCmd(['version'], timeout=2, retries=0)
-  for l in raw_version.splitlines():
-    m = _ADB_VERSION_RE.search(l)
-    if m:
-      return m.group(1)
-  return None
-
-
-def _ShouldRetryAdbCmd(exc):
-  return not isinstance(exc, device_errors.NoAdbError)
-
-
-DeviceStat = collections.namedtuple('DeviceStat',
-                                    ['st_mode', 'st_size', 'st_time'])
-
-
-def _IsExtraneousLine(line, send_cmd):
-  """Determine if a line read from stdout in persistent shell is extraneous.
-
-  The results output to stdout by the persistent shell process
-  (in PersistentShell below) often include "extraneous" lines that are
-  not part of the output of the shell command. These "extraneous" lines
-  do not always appear and are of two forms: shell prompt lines and lines
-  that just duplicate what the input command was. This function
-  detects these extraneous lines. Since all these lines have the
-  original command in them, that is what it detects ror.
-
-  Args:
-      line: Output line to check.
-      send_cmd: Command that was sent to adb persistent shell.
-  """
-  return send_cmd.rstrip() in line
-
-
-class AdbWrapper(object):
-  """A wrapper around a local Android Debug Bridge executable."""
-
-  _ADB_ENV = _CreateAdbEnvironment()
-
-  _adb_path = lazy.WeakConstant(_FindAdb)
-  _adb_version = lazy.WeakConstant(_GetVersion)
-
-  def __init__(self, device_serial):
-    """Initializes the AdbWrapper.
-
-    Args:
-      device_serial: The device serial number as a string.
-    """
-    if not device_serial:
-      raise ValueError('A device serial must be specified')
-    self._device_serial = str(device_serial)
-
-  class PersistentShell(object):
-    '''Class to use persistent shell for ADB.
-
-    This class allows a persistent ADB shell to be created, where multiple
-    commands can be passed into it. This avoids the overhead of starting
-    up a new ADB shell for each command.
-
-    Example of use:
-    with PersistentShell('123456789') as pshell:
-        pshell.RunCommand('which ls')
-        pshell.RunCommand('echo TEST', close=True)
-    '''
-    def __init__(self, serial):
-      """Initialization function:
-
-      Args:
-        serial: Serial number of device.
-      """
-      self._cmd = [AdbWrapper.GetAdbPath(), '-s', serial, 'shell']
-      self._process = None
-
-    def __enter__(self):
-      self.Start()
-      self.WaitForReady()
-      return self
-
-    def __exit__(self, exc_type, exc_value, tb):
-      self.Stop()
-
-    def Start(self):
-      """Start the shell."""
-      if self._process is not None:
-        raise RuntimeError('Persistent shell already running.')
-      # pylint: disable=protected-access
-      self._process = subprocess.Popen(self._cmd,
-                                       stdin=subprocess.PIPE,
-                                       stdout=subprocess.PIPE,
-                                       shell=False,
-                                       env=AdbWrapper._ADB_ENV)
-
-    def WaitForReady(self):
-      """Wait for the shell to be ready after starting.
-
-      Sends an echo command, then waits until it gets a response.
-      """
-      self._process.stdin.write('echo\n')
-      output_line = self._process.stdout.readline()
-      while output_line.rstrip() != '':
-        output_line = self._process.stdout.readline()
-
-    def RunCommand(self, command, close=False):
-      """Runs an ADB command and returns the output.
-
-      Note that there can be approximately 40 ms of additional latency
-      between sending the command and receiving the results if close=False
-      due to the use of Nagle's algorithm in the TCP socket between the
-      adb server and client. To avoid this extra latency, set close=True.
-
-      Args:
-        command: Command to send.
-      Returns:
-        The command output, given as a list of lines, and the exit code
-      """
-
-      if close:
-        def run_cmd(cmd):
-          send_cmd = '( %s ); echo $?; exit;\n' % cmd.rstrip()
-          (output, _) = self._process.communicate(send_cmd)
-          self._process = None
-          for x in output.rstrip().splitlines():
-            yield x
-
-      else:
-        def run_cmd(cmd):
-          send_cmd = '( %s ); echo DONE:$?;\n' % cmd.rstrip()
-          self._process.stdin.write(send_cmd)
-          while True:
-            output_line = self._process.stdout.readline().rstrip()
-            if output_line[:5] == 'DONE:':
-              yield output_line[5:]
-              break
-            yield output_line
-
-      result = [line for line in run_cmd(command)
-                if not _IsExtraneousLine(line, command)]
-
-      return (result[:-1], int(result[-1]))
-
-    def Stop(self):
-      """Stops the ADB process if it is still running."""
-      if self._process is not None:
-        self._process.stdin.write('exit\n')
-        self._process = None
-
-  @classmethod
-  def GetAdbPath(cls):
-    return cls._adb_path.read()
-
-  @classmethod
-  def Version(cls):
-    return cls._adb_version.read()
-
-  @classmethod
-  def _BuildAdbCmd(cls, args, device_serial, cpu_affinity=None):
-    if cpu_affinity is not None:
-      cmd = ['taskset', '-c', str(cpu_affinity)]
-    else:
-      cmd = []
-    cmd.append(cls.GetAdbPath())
-    if device_serial is not None:
-      cmd.extend(['-s', device_serial])
-    cmd.extend(args)
-    return cmd
-
-  # pylint: disable=unused-argument
-  @classmethod
-  @decorators.WithTimeoutAndConditionalRetries(_ShouldRetryAdbCmd)
-  def _RunAdbCmd(cls, args, timeout=None, retries=None, device_serial=None,
-                 check_error=True, cpu_affinity=None):
-    # pylint: disable=no-member
-    try:
-      status, output = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-          cls._BuildAdbCmd(args, device_serial, cpu_affinity=cpu_affinity),
-          timeout_retry.CurrentTimeoutThreadGroup().GetRemainingTime(),
-          env=cls._ADB_ENV)
-    except OSError as e:
-      if e.errno in (errno.ENOENT, errno.ENOEXEC):
-        raise device_errors.NoAdbError(msg=str(e))
-      else:
-        raise
-
-    # Best effort to catch errors from adb; unfortunately adb is very
-    # inconsistent with error reporting so many command failures present
-    # differently.
-    if status != 0 or (check_error and output.startswith('error:')):
-      not_found_m = _DEVICE_NOT_FOUND_RE.match(output)
-      device_waiting_m = _WAITING_FOR_DEVICE_RE.match(output)
-      if (device_waiting_m is not None
-          or (not_found_m is not None and
-              not_found_m.group('serial') == device_serial)):
-        raise device_errors.DeviceUnreachableError(device_serial)
-      else:
-        raise device_errors.AdbCommandFailedError(
-            args, output, status, device_serial)
-
-    return output
-  # pylint: enable=unused-argument
-
-  def _RunDeviceAdbCmd(self, args, timeout, retries, check_error=True):
-    """Runs an adb command on the device associated with this object.
-
-    Args:
-      args: A list of arguments to adb.
-      timeout: Timeout in seconds.
-      retries: Number of retries.
-      check_error: Check that the command doesn't return an error message. This
-        does NOT check the exit status of shell commands.
-
-    Returns:
-      The output of the command.
-    """
-    return self._RunAdbCmd(args, timeout=timeout, retries=retries,
-                           device_serial=self._device_serial,
-                           check_error=check_error)
-
-  def _IterRunDeviceAdbCmd(self, args, iter_timeout, timeout):
-    """Runs an adb command and returns an iterator over its output lines.
-
-    Args:
-      args: A list of arguments to adb.
-      iter_timeout: Timeout for each iteration in seconds.
-      timeout: Timeout for the entire command in seconds.
-
-    Yields:
-      The output of the command line by line.
-    """
-    return cmd_helper.IterCmdOutputLines(
-        self._BuildAdbCmd(args, self._device_serial),
-        iter_timeout=iter_timeout,
-        timeout=timeout,
-        env=self._ADB_ENV)
-
-  def __eq__(self, other):
-    """Consider instances equal if they refer to the same device.
-
-    Args:
-      other: The instance to compare equality with.
-
-    Returns:
-      True if the instances are considered equal, false otherwise.
-    """
-    return self._device_serial == str(other)
-
-  def __str__(self):
-    """The string representation of an instance.
-
-    Returns:
-      The device serial number as a string.
-    """
-    return self._device_serial
-
-  def __repr__(self):
-    return '%s(\'%s\')' % (self.__class__.__name__, self)
-
-  # pylint: disable=unused-argument
-  @classmethod
-  def IsServerOnline(cls):
-    status, output = cmd_helper.GetCmdStatusAndOutput(['pgrep', 'adb'])
-    output = [int(x) for x in output.split()]
-    logger.info('PIDs for adb found: %r', output)
-    return status == 0
-  # pylint: enable=unused-argument
-
-  @classmethod
-  def KillServer(cls, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    cls._RunAdbCmd(['kill-server'], timeout=timeout, retries=retries)
-
-  @classmethod
-  def StartServer(cls, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    # CPU affinity is used to reduce adb instability http://crbug.com/268450
-    cls._RunAdbCmd(['start-server'], timeout=timeout, retries=retries,
-                   cpu_affinity=0)
-
-  @classmethod
-  def GetDevices(cls, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """DEPRECATED. Refer to Devices(...) below."""
-    # TODO(jbudorick): Remove this function once no more clients are using it.
-    return cls.Devices(timeout=timeout, retries=retries)
-
-  @classmethod
-  def Devices(cls, desired_state=_READY_STATE, long_list=False,
-              timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Get the list of active attached devices.
-
-    Args:
-      desired_state: If not None, limit the devices returned to only those
-        in the given state.
-      long_list: Whether to use the long listing format.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Yields:
-      AdbWrapper instances.
-    """
-    lines = cls._RawDevices(long_list=long_list, timeout=timeout,
-                            retries=retries)
-    if long_list:
-      return [
-        [AdbWrapper(line[0])] + line[1:]
-        for line in lines
-        if (len(line) >= 2 and (not desired_state or line[1] == desired_state))
-      ]
-    else:
-      return [
-        AdbWrapper(line[0])
-        for line in lines
-        if (len(line) == 2 and (not desired_state or line[1] == desired_state))
-      ]
-
-  @classmethod
-  def _RawDevices(cls, long_list=False, timeout=DEFAULT_TIMEOUT,
-                  retries=DEFAULT_RETRIES):
-    cmd = ['devices']
-    if long_list:
-      cmd.append('-l')
-    output = cls._RunAdbCmd(cmd, timeout=timeout, retries=retries)
-    return [line.split() for line in output.splitlines()[1:]]
-
-  def GetDeviceSerial(self):
-    """Gets the device serial number associated with this object.
-
-    Returns:
-      Device serial number as a string.
-    """
-    return self._device_serial
-
-  def Push(self, local, remote, timeout=60 * 5, retries=DEFAULT_RETRIES):
-    """Pushes a file from the host to the device.
-
-    Args:
-      local: Path on the host filesystem.
-      remote: Path on the device filesystem.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    VerifyLocalFileExists(local)
-
-    if (distutils.version.LooseVersion(self.Version()) <
-        distutils.version.LooseVersion('1.0.36')):
-
-      # Different versions of adb handle pushing a directory to an existing
-      # directory differently.
-
-      # In the version packaged with the M SDK, 1.0.32, the following push:
-      #   foo/bar -> /sdcard/foo/bar
-      # where bar is an existing directory both on the host and the device
-      # results in the contents of bar/ on the host being pushed to bar/ on
-      # the device, i.e.
-      #   foo/bar/A -> /sdcard/foo/bar/A
-      #   foo/bar/B -> /sdcard/foo/bar/B
-      #   ... etc.
-
-      # In the version packaged with the N SDK, 1.0.36, the same push under
-      # the same conditions results in a second bar/ directory being created
-      # underneath the first bar/ directory on the device, i.e.
-      #   foo/bar/A -> /sdcard/foo/bar/bar/A
-      #   foo/bar/B -> /sdcard/foo/bar/bar/B
-      #   ... etc.
-
-      # In order to provide a consistent interface to clients, we check whether
-      # the target is an existing directory on the device and, if so, modifies
-      # the target passed to adb to emulate the behavior on 1.0.36 and above.
-
-      # Note that this behavior may have started before 1.0.36; that's simply
-      # the earliest version we've confirmed thus far.
-
-      try:
-        self.Shell('test -d %s' % remote, timeout=timeout, retries=retries)
-        remote = posixpath.join(remote, posixpath.basename(local))
-      except device_errors.AdbShellCommandFailedError:
-        # The target directory doesn't exist on the device, so we can use it
-        # without modification.
-        pass
-
-    self._RunDeviceAdbCmd(['push', local, remote], timeout, retries)
-
-  def Pull(self, remote, local, timeout=60 * 5, retries=DEFAULT_RETRIES):
-    """Pulls a file from the device to the host.
-
-    Args:
-      remote: Path on the device filesystem.
-      local: Path on the host filesystem.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    cmd = ['pull', remote, local]
-    self._RunDeviceAdbCmd(cmd, timeout, retries)
-    try:
-      VerifyLocalFileExists(local)
-    except IOError:
-      raise device_errors.AdbCommandFailedError(
-          cmd,
-          'File pulled from the device did not arrive on the host: %s' % local,
-          device_serial=str(self))
-
-  def Shell(self, command, expect_status=0, timeout=DEFAULT_TIMEOUT,
-            retries=DEFAULT_RETRIES):
-    """Runs a shell command on the device.
-
-    Args:
-      command: A string with the shell command to run.
-      expect_status: (optional) Check that the command's exit status matches
-        this value. Default is 0. If set to None the test is skipped.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      The output of the shell command as a string.
-
-    Raises:
-      device_errors.AdbCommandFailedError: If the exit status doesn't match
-        |expect_status|.
-    """
-    if expect_status is None:
-      args = ['shell', command]
-    else:
-      args = ['shell', '( %s );echo %%$?' % command.rstrip()]
-    output = self._RunDeviceAdbCmd(args, timeout, retries, check_error=False)
-    if expect_status is not None:
-      output_end = output.rfind('%')
-      if output_end < 0:
-        # causes the status string to become empty and raise a ValueError
-        output_end = len(output)
-
-      try:
-        status = int(output[output_end + 1:])
-      except ValueError:
-        logger.warning('exit status of shell command %r missing.', command)
-        raise device_errors.AdbShellCommandFailedError(
-            command, output, status=None, device_serial=self._device_serial)
-      output = output[:output_end]
-      if status != expect_status:
-        raise device_errors.AdbShellCommandFailedError(
-            command, output, status=status, device_serial=self._device_serial)
-    return output
-
-  def IterShell(self, command, timeout):
-    """Runs a shell command and returns an iterator over its output lines.
-
-    Args:
-      command: A string with the shell command to run.
-      timeout: Timeout in seconds.
-
-    Yields:
-      The output of the command line by line.
-    """
-    args = ['shell', command]
-    return cmd_helper.IterCmdOutputLines(
-      self._BuildAdbCmd(args, self._device_serial), timeout=timeout,
-      env=self._ADB_ENV)
-
-  def Ls(self, path, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """List the contents of a directory on the device.
-
-    Args:
-      path: Path on the device filesystem.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      A list of pairs (filename, stat) for each file found in the directory,
-      where the stat object has the properties: st_mode, st_size, and st_time.
-
-    Raises:
-      AdbCommandFailedError if |path| does not specify a valid and accessible
-          directory in the device, or the output of "adb ls" command is less
-          than four columns
-    """
-    def ParseLine(line, cmd):
-      cols = line.split(None, 3)
-      if len(cols) < 4:
-        raise device_errors.AdbCommandFailedError(
-            cmd, line, "the output should be 4 columns, but is only %d columns"
-            % len(cols), device_serial=self._device_serial)
-      filename = cols.pop()
-      stat = DeviceStat(*[int(num, base=16) for num in cols])
-      return (filename, stat)
-
-    cmd = ['ls', path]
-    lines = self._RunDeviceAdbCmd(
-        cmd, timeout=timeout, retries=retries).splitlines()
-    if lines:
-      return [ParseLine(line, cmd) for line in lines]
-    else:
-      raise device_errors.AdbCommandFailedError(
-          cmd, 'path does not specify an accessible directory in the device',
-          device_serial=self._device_serial)
-
-  def Logcat(self, clear=False, dump=False, filter_specs=None,
-             logcat_format=None, ring_buffer=None, iter_timeout=None,
-             timeout=None, retries=DEFAULT_RETRIES):
-    """Get an iterable over the logcat output.
-
-    Args:
-      clear: If true, clear the logcat.
-      dump: If true, dump the current logcat contents.
-      filter_specs: If set, a list of specs to filter the logcat.
-      logcat_format: If set, the format in which the logcat should be output.
-        Options include "brief", "process", "tag", "thread", "raw", "time",
-        "threadtime", and "long"
-      ring_buffer: If set, a list of alternate ring buffers to request.
-        Options include "main", "system", "radio", "events", "crash" or "all".
-        The default is equivalent to ["main", "system", "crash"].
-      iter_timeout: If set and neither clear nor dump is set, the number of
-        seconds to wait between iterations. If no line is found before the
-        given number of seconds elapses, the iterable will yield None.
-      timeout: (optional) If set, timeout per try in seconds. If clear or dump
-        is set, defaults to DEFAULT_TIMEOUT.
-      retries: (optional) If clear or dump is set, the number of retries to
-        attempt. Otherwise, does nothing.
-
-    Yields:
-      logcat output line by line.
-    """
-    cmd = ['logcat']
-    use_iter = True
-    if clear:
-      cmd.append('-c')
-      use_iter = False
-    if dump:
-      cmd.append('-d')
-      use_iter = False
-    if logcat_format:
-      cmd.extend(['-v', logcat_format])
-    if ring_buffer:
-      for buffer_name in ring_buffer:
-        cmd.extend(['-b', buffer_name])
-    if filter_specs:
-      cmd.extend(filter_specs)
-
-    if use_iter:
-      return self._IterRunDeviceAdbCmd(cmd, iter_timeout, timeout)
-    else:
-      timeout = timeout if timeout is not None else DEFAULT_TIMEOUT
-      return self._RunDeviceAdbCmd(cmd, timeout, retries).splitlines()
-
-  def Forward(self, local, remote, allow_rebind=False,
-              timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Forward socket connections from the local socket to the remote socket.
-
-    Sockets are specified by one of:
-      tcp:<port>
-      localabstract:<unix domain socket name>
-      localreserved:<unix domain socket name>
-      localfilesystem:<unix domain socket name>
-      dev:<character device name>
-      jdwp:<process pid> (remote only)
-
-    Args:
-      local: The host socket.
-      remote: The device socket.
-      allow_rebind: A boolean indicating whether adb may rebind a local socket;
-        otherwise, the default, an exception is raised if the local socket is
-        already being forwarded.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    cmd = ['forward']
-    if not allow_rebind:
-      cmd.append('--no-rebind')
-    cmd.extend([str(local), str(remote)])
-    output = self._RunDeviceAdbCmd(cmd, timeout, retries).strip()
-    if output:
-      logger.warning('Unexpected output from "adb forward": %s', output)
-
-  def ForwardRemove(self, local, timeout=DEFAULT_TIMEOUT,
-                    retries=DEFAULT_RETRIES):
-    """Remove a forward socket connection.
-
-    Args:
-      local: The host socket.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    self._RunDeviceAdbCmd(['forward', '--remove', str(local)], timeout,
-                          retries)
-
-  def ForwardList(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """List all currently forwarded socket connections.
-
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    Returns:
-      The output of adb forward --list as a string.
-    """
-    if (distutils.version.LooseVersion(self.Version()) >=
-        distutils.version.LooseVersion('1.0.36')):
-      # Starting in 1.0.36, this can occasionally fail with a protocol fault.
-      # As this interrupts all connections with all devices, we instead just
-      # return an empty list. This may give clients an inaccurate result, but
-      # that's usually better than crashing the adb server.
-
-      # TODO(jbudorick): Determine an appropriate upper version bound for this
-      # once b/31811775 is fixed.
-      return ''
-
-    return self._RunDeviceAdbCmd(['forward', '--list'], timeout, retries)
-
-  def JDWP(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """List of PIDs of processes hosting a JDWP transport.
-
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      A list of PIDs as strings.
-    """
-    return [a.strip() for a in
-            self._RunDeviceAdbCmd(['jdwp'], timeout, retries).split('\n')]
-
-  def Install(self, apk_path, forward_lock=False, allow_downgrade=False,
-              reinstall=False, sd_card=False, timeout=60 * 2,
-              retries=DEFAULT_RETRIES):
-    """Install an apk on the device.
-
-    Args:
-      apk_path: Host path to the APK file.
-      forward_lock: (optional) If set forward-locks the app.
-      allow_downgrade: (optional) If set, allows for downgrades.
-      reinstall: (optional) If set reinstalls the app, keeping its data.
-      sd_card: (optional) If set installs on the SD card.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    VerifyLocalFileExists(apk_path)
-    cmd = ['install']
-    if forward_lock:
-      cmd.append('-l')
-    if reinstall:
-      cmd.append('-r')
-    if sd_card:
-      cmd.append('-s')
-    if allow_downgrade:
-      cmd.append('-d')
-    cmd.append(apk_path)
-    output = self._RunDeviceAdbCmd(cmd, timeout, retries)
-    if 'Success' not in output:
-      raise device_errors.AdbCommandFailedError(
-          cmd, output, device_serial=self._device_serial)
-
-  def InstallMultiple(self, apk_paths, forward_lock=False, reinstall=False,
-                      sd_card=False, allow_downgrade=False, partial=False,
-                      timeout=60 * 2, retries=DEFAULT_RETRIES):
-    """Install an apk with splits on the device.
-
-    Args:
-      apk_paths: Host path to the APK file.
-      forward_lock: (optional) If set forward-locks the app.
-      reinstall: (optional) If set reinstalls the app, keeping its data.
-      sd_card: (optional) If set installs on the SD card.
-      allow_downgrade: (optional) Allow versionCode downgrade.
-      partial: (optional) Package ID if apk_paths doesn't include all .apks.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    for path in apk_paths:
-      VerifyLocalFileExists(path)
-    cmd = ['install-multiple']
-    if forward_lock:
-      cmd.append('-l')
-    if reinstall:
-      cmd.append('-r')
-    if sd_card:
-      cmd.append('-s')
-    if allow_downgrade:
-      cmd.append('-d')
-    if partial:
-      cmd.extend(('-p', partial))
-    cmd.extend(apk_paths)
-    output = self._RunDeviceAdbCmd(cmd, timeout, retries)
-    if 'Success' not in output:
-      raise device_errors.AdbCommandFailedError(
-          cmd, output, device_serial=self._device_serial)
-
-  def Uninstall(self, package, keep_data=False, timeout=DEFAULT_TIMEOUT,
-                retries=DEFAULT_RETRIES):
-    """Remove the app |package| from the device.
-
-    Args:
-      package: The package to uninstall.
-      keep_data: (optional) If set keep the data and cache directories.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    cmd = ['uninstall']
-    if keep_data:
-      cmd.append('-k')
-    cmd.append(package)
-    output = self._RunDeviceAdbCmd(cmd, timeout, retries)
-    if 'Failure' in output or 'Exception' in output:
-      raise device_errors.AdbCommandFailedError(
-          cmd, output, device_serial=self._device_serial)
-
-  def Backup(self, path, packages=None, apk=False, shared=False,
-             nosystem=True, include_all=False, timeout=DEFAULT_TIMEOUT,
-             retries=DEFAULT_RETRIES):
-    """Write an archive of the device's data to |path|.
-
-    Args:
-      path: Local path to store the backup file.
-      packages: List of to packages to be backed up.
-      apk: (optional) If set include the .apk files in the archive.
-      shared: (optional) If set buckup the device's SD card.
-      nosystem: (optional) If set exclude system applications.
-      include_all: (optional) If set back up all installed applications and
-        |packages| is optional.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    cmd = ['backup', '-f', path]
-    if apk:
-      cmd.append('-apk')
-    if shared:
-      cmd.append('-shared')
-    if nosystem:
-      cmd.append('-nosystem')
-    if include_all:
-      cmd.append('-all')
-    if packages:
-      cmd.extend(packages)
-    assert bool(packages) ^ bool(include_all), (
-        'Provide \'packages\' or set \'include_all\' but not both.')
-    ret = self._RunDeviceAdbCmd(cmd, timeout, retries)
-    VerifyLocalFileExists(path)
-    return ret
-
-  def Restore(self, path, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Restore device contents from the backup archive.
-
-    Args:
-      path: Host path to the backup archive.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    VerifyLocalFileExists(path)
-    self._RunDeviceAdbCmd(['restore'] + [path], timeout, retries)
-
-  def WaitForDevice(self, timeout=60 * 5, retries=DEFAULT_RETRIES):
-    """Block until the device is online.
-
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    self._RunDeviceAdbCmd(['wait-for-device'], timeout, retries)
-
-  def GetState(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Get device state.
-
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      One of 'offline', 'bootloader', or 'device'.
-    """
-    # TODO(jbudorick): Revert to using get-state once it doesn't cause a
-    # a protocol fault.
-    # return self._RunDeviceAdbCmd(['get-state'], timeout, retries).strip()
-
-    lines = self._RawDevices(timeout=timeout, retries=retries)
-    for line in lines:
-      if len(line) >= 2 and line[0] == self._device_serial:
-        return line[1]
-    return 'offline'
-
-  def GetDevPath(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Gets the device path.
-
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      The device path (e.g. usb:3-4)
-    """
-    return self._RunDeviceAdbCmd(['get-devpath'], timeout, retries)
-
-  def Remount(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Remounts the /system partition on the device read-write."""
-    self._RunDeviceAdbCmd(['remount'], timeout, retries)
-
-  def Reboot(self, to_bootloader=False, timeout=60 * 5,
-             retries=DEFAULT_RETRIES):
-    """Reboots the device.
-
-    Args:
-      to_bootloader: (optional) If set reboots to the bootloader.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    if to_bootloader:
-      cmd = ['reboot-bootloader']
-    else:
-      cmd = ['reboot']
-    self._RunDeviceAdbCmd(cmd, timeout, retries)
-
-  def Root(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Restarts the adbd daemon with root permissions, if possible.
-
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    """
-    output = self._RunDeviceAdbCmd(['root'], timeout, retries)
-    if 'cannot' in output:
-      raise device_errors.AdbCommandFailedError(
-          ['root'], output, device_serial=self._device_serial)
-
-  def Emu(self, cmd, timeout=DEFAULT_TIMEOUT,
-               retries=DEFAULT_RETRIES):
-    """Runs an emulator console command.
-
-    See http://developer.android.com/tools/devices/emulator.html#console
-
-    Args:
-      cmd: The command to run on the emulator console.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      The output of the emulator console command.
-    """
-    if isinstance(cmd, basestring):
-      cmd = [cmd]
-    return self._RunDeviceAdbCmd(['emu'] + cmd, timeout, retries)
-
-  def DisableVerity(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Disable Marshmallow's Verity security feature"""
-    output = self._RunDeviceAdbCmd(['disable-verity'], timeout, retries)
-    if output and not _VERITY_DISABLE_RE.search(output):
-      raise device_errors.AdbCommandFailedError(
-          ['disable-verity'], output, device_serial=self._device_serial)
-
-  def EnableVerity(self, timeout=DEFAULT_TIMEOUT, retries=DEFAULT_RETRIES):
-    """Enable Marshmallow's Verity security feature"""
-    output = self._RunDeviceAdbCmd(['enable-verity'], timeout, retries)
-    if output and not _VERITY_ENABLE_RE.search(output):
-      raise device_errors.AdbCommandFailedError(
-          ['enable-verity'], output, device_serial=self._device_serial)
-
-  @property
-  def is_emulator(self):
-    return _EMULATOR_RE.match(self._device_serial)
-
-  @property
-  def is_ready(self):
-    try:
-      return self.GetState() == _READY_STATE
-    except device_errors.CommandFailedError:
-      return False
diff --git a/systrace/catapult/devil/devil/android/sdk/adb_wrapper_devicetest.py b/systrace/catapult/devil/devil/android/sdk/adb_wrapper_devicetest.py
deleted file mode 100755
index b0ccb24..0000000
--- a/systrace/catapult/devil/devil/android/sdk/adb_wrapper_devicetest.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tests for the AdbWrapper class."""
-
-import os
-import tempfile
-import time
-import unittest
-
-from devil.android import device_test_case
-from devil.android import device_errors
-from devil.android.sdk import adb_wrapper
-
-
-class TestAdbWrapper(device_test_case.DeviceTestCase):
-
-  def setUp(self):
-    super(TestAdbWrapper, self).setUp()
-    self._adb = adb_wrapper.AdbWrapper(self.serial)
-    self._adb.WaitForDevice()
-
-  @staticmethod
-  def _MakeTempFile(contents):
-    """Make a temporary file with the given contents.
-
-    Args:
-      contents: string to write to the temporary file.
-
-    Returns:
-      The absolute path to the file.
-    """
-    fi, path = tempfile.mkstemp()
-    with os.fdopen(fi, 'wb') as f:
-      f.write(contents)
-    return path
-
-  def testDeviceUnreachable(self):
-    with self.assertRaises(device_errors.DeviceUnreachableError):
-      bad_adb = adb_wrapper.AdbWrapper('device_gone')
-      bad_adb.Shell('echo test')
-
-  def testShell(self):
-    output = self._adb.Shell('echo test', expect_status=0)
-    self.assertEqual(output.strip(), 'test')
-    output = self._adb.Shell('echo test')
-    self.assertEqual(output.strip(), 'test')
-    with self.assertRaises(device_errors.AdbCommandFailedError):
-      self._adb.Shell('echo test', expect_status=1)
-
-  def testPersistentShell(self):
-    # We need to access the device serial number here in order
-    # to create the persistent shell.
-    serial = self._adb.GetDeviceSerial() # pylint: disable=protected-access
-    with self._adb.PersistentShell(serial) as pshell:
-      (res1, code1) = pshell.RunCommand('echo TEST')
-      (res2, code2) = pshell.RunCommand('echo TEST2')
-      self.assertEqual(len(res1), 1)
-      self.assertEqual(res1[0], 'TEST')
-      self.assertEqual(res2[-1], 'TEST2')
-      self.assertEqual(code1, 0)
-      self.assertEqual(code2, 0)
-
-  def testPushLsPull(self):
-    path = self._MakeTempFile('foo')
-    device_path = '/data/local/tmp/testfile.txt'
-    local_tmpdir = os.path.dirname(path)
-    self._adb.Push(path, device_path)
-    files = dict(self._adb.Ls('/data/local/tmp'))
-    self.assertTrue('testfile.txt' in files)
-    self.assertEquals(3, files['testfile.txt'].st_size)
-    self.assertEqual(self._adb.Shell('cat %s' % device_path), 'foo')
-    self._adb.Pull(device_path, local_tmpdir)
-    with open(os.path.join(local_tmpdir, 'testfile.txt'), 'r') as f:
-      self.assertEqual(f.read(), 'foo')
-
-  def testInstall(self):
-    path = self._MakeTempFile('foo')
-    with self.assertRaises(device_errors.AdbCommandFailedError):
-      self._adb.Install(path)
-
-  def testForward(self):
-    with self.assertRaises(device_errors.AdbCommandFailedError):
-      self._adb.Forward(0, 0)
-
-  def testUninstall(self):
-    with self.assertRaises(device_errors.AdbCommandFailedError):
-      self._adb.Uninstall('some.nonexistant.package')
-
-  def testRebootWaitForDevice(self):
-    self._adb.Reboot()
-    print 'waiting for device to reboot...'
-    while self._adb.GetState() == 'device':
-      time.sleep(1)
-    self._adb.WaitForDevice()
-    self.assertEqual(self._adb.GetState(), 'device')
-    print 'waiting for package manager...'
-    while True:
-      try:
-        android_path = self._adb.Shell('pm path android')
-      except device_errors.AdbShellCommandFailedError:
-        android_path = None
-      if android_path and 'package:' in android_path:
-        break
-      time.sleep(1)
-
-  def testRootRemount(self):
-    self._adb.Root()
-    while True:
-      try:
-        self._adb.Shell('start')
-        break
-      except device_errors.DeviceUnreachableError:
-        time.sleep(1)
-    self._adb.Remount()
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/sdk/adb_wrapper_test.py b/systrace/catapult/devil/devil/android/sdk/adb_wrapper_test.py
deleted file mode 100755
index 07f784d..0000000
--- a/systrace/catapult/devil/devil/android/sdk/adb_wrapper_test.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for some APIs with conditional logic in adb_wrapper.py
-"""
-
-import unittest
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android.sdk import adb_wrapper
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-class AdbWrapperTest(unittest.TestCase):
-  def setUp(self):
-    self.device_serial = 'ABC12345678'
-    self.adb = adb_wrapper.AdbWrapper(self.device_serial)
-
-  def _MockRunDeviceAdbCmd(self, return_value):
-    return mock.patch.object(
-        self.adb,
-        '_RunDeviceAdbCmd',
-        mock.Mock(side_effect=None, return_value=return_value))
-
-  def testDisableVerityWhenDisabled(self):
-    with self._MockRunDeviceAdbCmd('Verity already disabled on /system'):
-      self.adb.DisableVerity()
-
-  def testDisableVerityWhenEnabled(self):
-    with self._MockRunDeviceAdbCmd(
-        'Verity disabled on /system\nNow reboot your device for settings to '
-        'take effect'):
-      self.adb.DisableVerity()
-
-  def testEnableVerityWhenEnabled(self):
-    with self._MockRunDeviceAdbCmd('Verity already enabled on /system'):
-      self.adb.EnableVerity()
-
-  def testEnableVerityWhenDisabled(self):
-    with self._MockRunDeviceAdbCmd(
-        'Verity enabled on /system\nNow reboot your device for settings to '
-        'take effect'):
-      self.adb.EnableVerity()
-
-  def testFailEnableVerity(self):
-    with self._MockRunDeviceAdbCmd('error: closed'):
-      self.assertRaises(
-          device_errors.AdbCommandFailedError, self.adb.EnableVerity)
-
-  def testFailDisableVerity(self):
-    with self._MockRunDeviceAdbCmd('error: closed'):
-      self.assertRaises(
-          device_errors.AdbCommandFailedError, self.adb.DisableVerity)
-
-  @mock.patch('devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout')
-  def testDeviceUnreachable(self, get_cmd_mock):
-    get_cmd_mock.return_value = (
-        1, "error: device '%s' not found" % self.device_serial)
-    self.assertRaises(
-        device_errors.DeviceUnreachableError, self.adb.Shell, '/bin/true')
-
-  @mock.patch('devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout')
-  def testWaitingForDevice(self, get_cmd_mock):
-    get_cmd_mock.return_value = (1, '- waiting for device - ')
-    self.assertRaises(
-        device_errors.DeviceUnreachableError, self.adb.Shell, '/bin/true')
diff --git a/systrace/catapult/devil/devil/android/sdk/build_tools.py b/systrace/catapult/devil/devil/android/sdk/build_tools.py
deleted file mode 100644
index 99083d9..0000000
--- a/systrace/catapult/devil/devil/android/sdk/build_tools.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-from devil import devil_env
-from devil.utils import lazy
-
-with devil_env.SysPath(devil_env.DEPENDENCY_MANAGER_PATH):
-  import dependency_manager  # pylint: disable=import-error
-
-
-def GetPath(build_tool):
-  try:
-    return devil_env.config.LocalPath(build_tool)
-  except dependency_manager.NoPathFoundError:
-    pass
-
-  try:
-    return _PathInLocalSdk(build_tool)
-  except dependency_manager.NoPathFoundError:
-    pass
-
-  return devil_env.config.FetchPath(build_tool)
-
-
-def _PathInLocalSdk(build_tool):
-  build_tools_path = _build_tools_path.read()
-  return (os.path.join(build_tools_path, build_tool) if build_tools_path
-          else None)
-
-
-def _FindBuildTools():
-  android_sdk_path = devil_env.config.LocalPath('android_sdk')
-  if not android_sdk_path:
-    return None
-
-  build_tools_contents = os.listdir(
-      os.path.join(android_sdk_path, 'build-tools'))
-
-  if not build_tools_contents:
-    return None
-  else:
-    if len(build_tools_contents) > 1:
-      build_tools_contents.sort()
-    return os.path.join(android_sdk_path, 'build-tools',
-                        build_tools_contents[-1])
-
-
-_build_tools_path = lazy.WeakConstant(_FindBuildTools)
diff --git a/systrace/catapult/devil/devil/android/sdk/dexdump.py b/systrace/catapult/devil/devil/android/sdk/dexdump.py
deleted file mode 100644
index 992366e..0000000
--- a/systrace/catapult/devil/devil/android/sdk/dexdump.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from devil.android.sdk import build_tools
-from devil.utils import cmd_helper
-from devil.utils import lazy
-
-
-_dexdump_path = lazy.WeakConstant(lambda: build_tools.GetPath('dexdump'))
-
-
-def DexDump(dexfiles, file_summary=False):
-  """A wrapper around the Android SDK's dexdump tool.
-
-  Args:
-    dexfiles: The dexfile or list of dex files to dump.
-    file_summary: Display summary information from the file header. (-f)
-
-  Returns:
-    An iterable over the output lines.
-  """
-  # TODO(jbudorick): Add support for more options as necessary.
-  if isinstance(dexfiles, basestring):
-    dexfiles = [dexfiles]
-  args = [_dexdump_path.read()] + dexfiles
-  if file_summary:
-    args.append('-f')
-
-  return cmd_helper.IterCmdOutputLines(args)
-
diff --git a/systrace/catapult/devil/devil/android/sdk/fastboot.py b/systrace/catapult/devil/devil/android/sdk/fastboot.py
deleted file mode 100644
index ae99d39..0000000
--- a/systrace/catapult/devil/devil/android/sdk/fastboot.py
+++ /dev/null
@@ -1,122 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""This module wraps Android's fastboot tool.
-
-This is a thin wrapper around the fastboot interface. Any additional complexity
-should be delegated to a higher level (ex. FastbootUtils).
-"""
-# pylint: disable=unused-argument
-
-from devil import devil_env
-from devil.android import decorators
-from devil.android import device_errors
-from devil.utils import cmd_helper
-from devil.utils import lazy
-
-_DEFAULT_TIMEOUT = 30
-_DEFAULT_RETRIES = 3
-_FLASH_TIMEOUT = _DEFAULT_TIMEOUT * 10
-
-
-class Fastboot(object):
-
-  _fastboot_path = lazy.WeakConstant(
-      lambda: devil_env.config.FetchPath('fastboot'))
-
-  def __init__(self, device_serial, default_timeout=_DEFAULT_TIMEOUT,
-               default_retries=_DEFAULT_RETRIES):
-    """Initializes the FastbootWrapper.
-
-    Args:
-      device_serial: The device serial number as a string.
-    """
-    if not device_serial:
-      raise ValueError('A device serial must be specified')
-    self._device_serial = str(device_serial)
-    self._default_timeout = default_timeout
-    self._default_retries = default_retries
-
-  def __str__(self):
-    return self._device_serial
-
-  @classmethod
-  def _RunFastbootCommand(cls, cmd):
-    """Run a generic fastboot command.
-
-    Args:
-      cmd: Command to run. Must be list of args, the first one being the command
-
-    Returns:
-      output of command.
-
-    Raises:
-      TypeError: If cmd is not of type list.
-    """
-    if type(cmd) == list:
-      cmd = [cls._fastboot_path.read()] + cmd
-    else:
-      raise TypeError(
-          'Command for _RunDeviceFastbootCommand must be a list.')
-    status, output = cmd_helper.GetCmdStatusAndOutput(cmd)
-    if int(status) != 0:
-      raise device_errors.FastbootCommandFailedError(cmd, output, status)
-    return output
-
-  def _RunDeviceFastbootCommand(self, cmd):
-    """Run a fastboot command on the device associated with this object.
-
-    Args:
-      cmd: Command to run. Must be list of args, the first one being the command
-
-    Returns:
-      output of command.
-
-    Raises:
-      TypeError: If cmd is not of type list.
-    """
-    if type(cmd) == list:
-      cmd = ['-s', self._device_serial] + cmd
-    return self._RunFastbootCommand(cmd)
-
-  @decorators.WithTimeoutAndRetriesDefaults(_FLASH_TIMEOUT, 0)
-  def Flash(self, partition, image, timeout=None, retries=None):
-    """Flash partition with img.
-
-    Args:
-      partition: Partition to be flashed.
-      image: location of image to flash with.
-    """
-    self._RunDeviceFastbootCommand(['flash', partition, image])
-
-  @classmethod
-  @decorators.WithTimeoutAndRetriesDefaults(_DEFAULT_TIMEOUT, _DEFAULT_RETRIES)
-  def Devices(cls, timeout=None, retries=None):
-    """Outputs list of devices in fastboot mode.
-
-    Returns:
-      List of Fastboot objects, one for each device in fastboot.
-    """
-    output = cls._RunFastbootCommand(['devices'])
-    return [Fastboot(line.split()[0]) for line in output.splitlines()]
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def RebootBootloader(self, timeout=None, retries=None):
-    """Reboot from fastboot, into fastboot."""
-    self._RunDeviceFastbootCommand(['reboot-bootloader'])
-
-  @decorators.WithTimeoutAndRetriesDefaults(_FLASH_TIMEOUT, 0)
-  def Reboot(self, timeout=None, retries=None):
-    """Reboot from fastboot to normal usage"""
-    self._RunDeviceFastbootCommand(['reboot'])
-
-  @decorators.WithTimeoutAndRetriesFromInstance()
-  def SetOemOffModeCharge(self, value, timeout=None, retries=None):
-    """Sets off mode charging
-
-    Args:
-      value: boolean value to set off-mode-charging on or off.
-    """
-    self._RunDeviceFastbootCommand(
-        ['oem', 'off-mode-charge', str(int(value))])
diff --git a/systrace/catapult/devil/devil/android/sdk/gce_adb_wrapper.py b/systrace/catapult/devil/devil/android/sdk/gce_adb_wrapper.py
deleted file mode 100644
index 71600f4..0000000
--- a/systrace/catapult/devil/devil/android/sdk/gce_adb_wrapper.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Provides a work around for various adb commands on android gce instances.
-
-Some adb commands don't work well when the device is a cloud vm, namely
-'push' and 'pull'. With gce instances, moving files through adb can be
-painfully slow and hit timeouts, so the methods here just use scp instead.
-"""
-# pylint: disable=unused-argument
-
-import logging
-import os
-import subprocess
-
-from devil.android import device_errors
-from devil.android.sdk import adb_wrapper
-from devil.utils import cmd_helper
-
-logger = logging.getLogger(__name__)
-
-
-class GceAdbWrapper(adb_wrapper.AdbWrapper):
-
-  def __init__(self, device_serial):
-    super(GceAdbWrapper, self).__init__(device_serial)
-    self._Connect()
-    self.Root()
-    self._instance_ip = self.Shell('getprop net.gce.ip').strip()
-
-  def _Connect(self, timeout=adb_wrapper.DEFAULT_TIMEOUT,
-               retries=adb_wrapper.DEFAULT_RETRIES):
-    """Connects ADB to the android gce instance."""
-    cmd = ['connect', self._device_serial]
-    output = self._RunAdbCmd(cmd, timeout=timeout, retries=retries)
-    if 'unable to connect' in output:
-      raise device_errors.AdbCommandFailedError(cmd, output)
-    self.WaitForDevice()
-
-  # override
-  def Root(self, **kwargs):
-    super(GceAdbWrapper, self).Root()
-    self._Connect()
-
-  # override
-  def Push(self, local, remote, **kwargs):
-    """Pushes an object from the host to the gce instance.
-
-    Args:
-      local: Path on the host filesystem.
-      remote: Path on the instance filesystem.
-    """
-    adb_wrapper.VerifyLocalFileExists(local)
-    if os.path.isdir(local):
-      self.Shell('mkdir -p %s' % cmd_helper.SingleQuote(remote))
-
-      # When the object to be pushed is a directory, adb merges the source dir
-      # with the destination dir. So if local is a dir, just scp its contents.
-      for f in os.listdir(local):
-        self._PushObject(os.path.join(local, f), os.path.join(remote, f))
-        self.Shell('chmod 777 %s' %
-                   cmd_helper.SingleQuote(os.path.join(remote, f)))
-    else:
-      parent_dir = remote[0:remote.rfind('/')]
-      if parent_dir:
-        self.Shell('mkdir -p %s' % cmd_helper.SingleQuote(parent_dir))
-      self._PushObject(local, remote)
-      self.Shell('chmod 777 %s' % cmd_helper.SingleQuote(remote))
-
-  def _PushObject(self, local, remote):
-    """Copies an object from the host to the gce instance using scp.
-
-    Args:
-      local: Path on the host filesystem.
-      remote: Path on the instance filesystem.
-    """
-    cmd = [
-        'scp',
-        '-r',
-        '-o', 'UserKnownHostsFile=/dev/null',
-        '-o', 'StrictHostKeyChecking=no',
-        local,
-        'root@%s:%s' % (self._instance_ip, remote)
-    ]
-    status, _ = cmd_helper.GetCmdStatusAndOutput(cmd)
-    if status:
-      raise device_errors.AdbCommandFailedError(
-          cmd, 'File not reachable on host: %s' % local,
-          device_serial=str(self))
-
-  # override
-  def Pull(self, remote, local, **kwargs):
-    """Pulls a file from the gce instance to the host.
-
-    Args:
-      remote: Path on the instance filesystem.
-      local: Path on the host filesystem.
-    """
-    cmd = [
-        'scp',
-        '-p',
-        '-r',
-        '-o', 'UserKnownHostsFile=/dev/null',
-        '-o', 'StrictHostKeyChecking=no',
-        'root@%s:%s' % (self._instance_ip, remote),
-        local,
-    ]
-    status, _ = cmd_helper.GetCmdStatusAndOutput(cmd)
-    if status:
-      raise device_errors.AdbCommandFailedError(
-          cmd, 'File not reachable on host: %s' % local,
-          device_serial=str(self))
-
-    try:
-      adb_wrapper.VerifyLocalFileExists(local)
-    except (subprocess.CalledProcessError, IOError):
-      logger.exception('Error when pulling files from android instance.')
-      raise device_errors.AdbCommandFailedError(
-          cmd, 'File not reachable on host: %s' % local,
-          device_serial=str(self))
-
-  # override
-  def Install(self, apk_path, forward_lock=False, reinstall=False,
-              sd_card=False, **kwargs):
-    """Installs an apk on the gce instance
-
-    Args:
-      apk_path: Host path to the APK file.
-      forward_lock: (optional) If set forward-locks the app.
-      reinstall: (optional) If set reinstalls the app, keeping its data.
-      sd_card: (optional) If set installs on the SD card.
-    """
-    adb_wrapper.VerifyLocalFileExists(apk_path)
-    cmd = ['install']
-    if forward_lock:
-      cmd.append('-l')
-    if reinstall:
-      cmd.append('-r')
-    if sd_card:
-      cmd.append('-s')
-    self.Push(apk_path, '/data/local/tmp/tmp.apk')
-    cmd = ['pm'] + cmd
-    cmd.append('/data/local/tmp/tmp.apk')
-    output = self.Shell(' '.join(cmd))
-    self.Shell('rm /data/local/tmp/tmp.apk')
-    if 'Success' not in output:
-      raise device_errors.AdbCommandFailedError(
-          cmd, output, device_serial=self._device_serial)
-
-  # override
-  @property
-  def is_emulator(self):
-    return True
diff --git a/systrace/catapult/devil/devil/android/sdk/intent.py b/systrace/catapult/devil/devil/android/sdk/intent.py
deleted file mode 100644
index cdefb46..0000000
--- a/systrace/catapult/devil/devil/android/sdk/intent.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Manages intents and associated information.
-
-This is generally intended to be used with functions that calls Android's
-Am command.
-"""
-
-# Some common flag constants that can be used to construct intents.
-# Full list: http://developer.android.com/reference/android/content/Intent.html
-FLAG_ACTIVITY_CLEAR_TASK = 0x00008000
-FLAG_ACTIVITY_CLEAR_TOP = 0x04000000
-FLAG_ACTIVITY_NEW_TASK = 0x10000000
-FLAG_ACTIVITY_REORDER_TO_FRONT = 0x00020000
-FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 0x00200000
-
-
-def _bitwise_or(flags):
-  result = 0
-  for flag in flags:
-    result |= flag
-  return result
-
-
-class Intent(object):
-
-  def __init__(self, action='android.intent.action.VIEW', activity=None,
-               category=None, component=None, data=None, extras=None,
-               flags=None, package=None):
-    """Creates an Intent.
-
-    Args:
-      action: A string containing the action.
-      activity: A string that, with |package|, can be used to specify the
-                component.
-      category: A string or list containing any categories.
-      component: A string that specifies the component to send the intent to.
-      data: A string containing a data URI.
-      extras: A dict containing extra parameters to be passed along with the
-              intent.
-      flags: A sequence of flag constants to be passed with the intent.
-      package: A string that, with activity, can be used to specify the
-               component.
-    """
-    self._action = action
-    self._activity = activity
-    if isinstance(category, list) or category is None:
-      self._category = category
-    else:
-      self._category = [category]
-    self._component = component
-    self._data = data
-    self._extras = extras
-    self._flags = '0x%0.8x' % _bitwise_or(flags) if flags else None
-    self._package = package
-
-    if self._component and '/' in component:
-      self._package, self._activity = component.split('/', 1)
-    elif self._package and self._activity:
-      self._component = '%s/%s' % (package, activity)
-
-  @property
-  def action(self):
-    return self._action
-
-  @property
-  def activity(self):
-    return self._activity
-
-  @property
-  def category(self):
-    return self._category
-
-  @property
-  def component(self):
-    return self._component
-
-  @property
-  def data(self):
-    return self._data
-
-  @property
-  def extras(self):
-    return self._extras
-
-  @property
-  def flags(self):
-    return self._flags
-
-  @property
-  def package(self):
-    return self._package
-
-  @property
-  def am_args(self):
-    """Returns the intent as a list of arguments for the activity manager.
-
-    For details refer to the specification at:
-    - http://developer.android.com/tools/help/adb.html#IntentSpec
-    """
-    args = []
-    if self.action:
-      args.extend(['-a', self.action])
-    if self.data:
-      args.extend(['-d', self.data])
-    if self.category:
-      args.extend(arg for cat in self.category for arg in ('-c', cat))
-    if self.component:
-      args.extend(['-n', self.component])
-    if self.flags:
-      args.extend(['-f', self.flags])
-    if self.extras:
-      for key, value in self.extras.iteritems():
-        if value is None:
-          args.extend(['--esn', key])
-        elif isinstance(value, str):
-          args.extend(['--es', key, value])
-        elif isinstance(value, bool):
-          args.extend(['--ez', key, str(value)])
-        elif isinstance(value, int):
-          args.extend(['--ei', key, str(value)])
-        elif isinstance(value, float):
-          args.extend(['--ef', key, str(value)])
-        else:
-          raise NotImplementedError(
-              'Intent does not know how to pass %s extras' % type(value))
-    return args
diff --git a/systrace/catapult/devil/devil/android/sdk/keyevent.py b/systrace/catapult/devil/devil/android/sdk/keyevent.py
deleted file mode 100644
index 657dc96..0000000
--- a/systrace/catapult/devil/devil/android/sdk/keyevent.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Android KeyEvent constants.
-
-http://developer.android.com/reference/android/view/KeyEvent.html
-"""
-
-KEYCODE_BACK = 4
-
-KEYCODE_0 = 7
-KEYCODE_1 = 8
-KEYCODE_2 = 9
-KEYCODE_3 = 10
-KEYCODE_4 = 11
-KEYCODE_5 = 12
-KEYCODE_6 = 13
-KEYCODE_7 = 14
-KEYCODE_8 = 15
-KEYCODE_9 = 16
-
-KEYCODE_DPAD_RIGHT = 22
-
-KEYCODE_POWER = 26
-
-KEYCODE_A = 29
-KEYCODE_B = 30
-KEYCODE_C = 31
-KEYCODE_D = 32
-KEYCODE_E = 33
-KEYCODE_F = 34
-KEYCODE_G = 35
-KEYCODE_H = 36
-KEYCODE_I = 37
-KEYCODE_J = 38
-KEYCODE_K = 39
-KEYCODE_L = 40
-KEYCODE_M = 41
-KEYCODE_N = 42
-KEYCODE_O = 43
-KEYCODE_P = 44
-KEYCODE_Q = 45
-KEYCODE_R = 46
-KEYCODE_S = 47
-KEYCODE_T = 48
-KEYCODE_U = 49
-KEYCODE_V = 50
-KEYCODE_W = 51
-KEYCODE_X = 52
-KEYCODE_Y = 53
-KEYCODE_Z = 54
-
-KEYCODE_PERIOD = 56
-
-KEYCODE_SPACE = 62
-
-KEYCODE_ENTER = 66
-KEYCODE_DEL = 67
-
-KEYCODE_MENU = 82
-
-KEYCODE_APP_SWITCH = 187
diff --git a/systrace/catapult/devil/devil/android/sdk/shared_prefs.py b/systrace/catapult/devil/devil/android/sdk/shared_prefs.py
deleted file mode 100644
index 2fa2e6a..0000000
--- a/systrace/catapult/devil/devil/android/sdk/shared_prefs.py
+++ /dev/null
@@ -1,420 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Helper object to read and modify Shared Preferences from Android apps.
-
-See e.g.:
-  http://developer.android.com/reference/android/content/SharedPreferences.html
-"""
-
-import logging
-import posixpath
-
-from devil.android import device_errors
-from devil.android.sdk import version_codes
-from xml.etree import ElementTree
-
-logger = logging.getLogger(__name__)
-
-
-_XML_DECLARATION = "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
-
-
-class BasePref(object):
-  """Base class for getting/setting the value of a specific preference type.
-
-  Should not be instantiated directly. The SharedPrefs collection will
-  instantiate the appropriate subclasses, which directly manipulate the
-  underlying xml document, to parse and serialize values according to their
-  type.
-
-  Args:
-    elem: An xml ElementTree object holding the preference data.
-
-  Properties:
-    tag_name: A string with the tag that must be used for this preference type.
-  """
-  tag_name = None
-
-  def __init__(self, elem):
-    if elem.tag != type(self).tag_name:
-      raise TypeError('Property %r has type %r, but trying to access as %r' %
-                      (elem.get('name'), elem.tag, type(self).tag_name))
-    self._elem = elem
-
-  def __str__(self):
-    """Get the underlying xml element as a string."""
-    return ElementTree.tostring(self._elem)
-
-  def get(self):
-    """Get the value of this preference."""
-    return self._elem.get('value')
-
-  def set(self, value):
-    """Set from a value casted as a string."""
-    self._elem.set('value', str(value))
-
-  @property
-  def has_value(self):
-    """Check whether the element has a value."""
-    return self._elem.get('value') is not None
-
-
-class BooleanPref(BasePref):
-  """Class for getting/setting a preference with a boolean value.
-
-  The underlying xml element has the form, e.g.:
-      <boolean name="featureEnabled" value="false" />
-  """
-  tag_name = 'boolean'
-  VALUES = {'true': True, 'false': False}
-
-  def get(self):
-    """Get the value as a Python bool."""
-    return type(self).VALUES[super(BooleanPref, self).get()]
-
-  def set(self, value):
-    """Set from a value casted as a bool."""
-    super(BooleanPref, self).set('true' if value else 'false')
-
-
-class FloatPref(BasePref):
-  """Class for getting/setting a preference with a float value.
-
-  The underlying xml element has the form, e.g.:
-      <float name="someMetric" value="4.7" />
-  """
-  tag_name = 'float'
-
-  def get(self):
-    """Get the value as a Python float."""
-    return float(super(FloatPref, self).get())
-
-
-class IntPref(BasePref):
-  """Class for getting/setting a preference with an int value.
-
-  The underlying xml element has the form, e.g.:
-      <int name="aCounter" value="1234" />
-  """
-  tag_name = 'int'
-
-  def get(self):
-    """Get the value as a Python int."""
-    return int(super(IntPref, self).get())
-
-
-class LongPref(IntPref):
-  """Class for getting/setting a preference with a long value.
-
-  The underlying xml element has the form, e.g.:
-      <long name="aLongCounter" value="1234" />
-
-  We use the same implementation from IntPref.
-  """
-  tag_name = 'long'
-
-
-class StringPref(BasePref):
-  """Class for getting/setting a preference with a string value.
-
-  The underlying xml element has the form, e.g.:
-      <string name="someHashValue">249b3e5af13d4db2</string>
-  """
-  tag_name = 'string'
-
-  def get(self):
-    """Get the value as a Python string."""
-    return self._elem.text
-
-  def set(self, value):
-    """Set from a value casted as a string."""
-    self._elem.text = str(value)
-
-
-class StringSetPref(StringPref):
-  """Class for getting/setting a preference with a set of string values.
-
-  The underlying xml element has the form, e.g.:
-      <set name="managed_apps">
-          <string>com.mine.app1</string>
-          <string>com.mine.app2</string>
-          <string>com.mine.app3</string>
-      </set>
-  """
-  tag_name = 'set'
-
-  def get(self):
-    """Get a list with the string values contained."""
-    value = []
-    for child in self._elem:
-      assert child.tag == 'string'
-      value.append(child.text)
-    return value
-
-  def set(self, value):
-    """Set from a sequence of values, each casted as a string."""
-    for child in list(self._elem):
-      self._elem.remove(child)
-    for item in value:
-      ElementTree.SubElement(self._elem, 'string').text = str(item)
-
-
-_PREF_TYPES = {c.tag_name: c for c in [BooleanPref, FloatPref, IntPref,
-                                       LongPref, StringPref, StringSetPref]}
-
-
-class SharedPrefs(object):
-
-  def __init__(self, device, package, filename):
-    """Helper object to read and update "Shared Prefs" of Android apps.
-
-    Such files typically look like, e.g.:
-
-        <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
-        <map>
-          <int name="databaseVersion" value="107" />
-          <boolean name="featureEnabled" value="false" />
-          <string name="someHashValue">249b3e5af13d4db2</string>
-        </map>
-
-    Example usage:
-
-        prefs = shared_prefs.SharedPrefs(device, 'com.my.app', 'my_prefs.xml')
-        prefs.Load()
-        prefs.GetString('someHashValue') # => '249b3e5af13d4db2'
-        prefs.SetInt('databaseVersion', 42)
-        prefs.Remove('featureEnabled')
-        prefs.Commit()
-
-    The object may also be used as a context manager to automatically load and
-    commit, respectively, upon entering and leaving the context.
-
-    Args:
-      device: A DeviceUtils object.
-      package: A string with the package name of the app that owns the shared
-        preferences file.
-      filename: A string with the name of the preferences file to read/write.
-    """
-    self._device = device
-    self._xml = None
-    self._package = package
-    self._filename = filename
-    self._path = '/data/data/%s/shared_prefs/%s' % (package, filename)
-    self._changed = False
-
-  def __repr__(self):
-    """Get a useful printable representation of the object."""
-    return '<{cls} file {filename} for {package} on {device}>'.format(
-      cls=type(self).__name__, filename=self.filename, package=self.package,
-      device=str(self._device))
-
-  def __str__(self):
-    """Get the underlying xml document as a string."""
-    return _XML_DECLARATION + ElementTree.tostring(self.xml)
-
-  @property
-  def package(self):
-    """Get the package name of the app that owns the shared preferences."""
-    return self._package
-
-  @property
-  def filename(self):
-    """Get the filename of the shared preferences file."""
-    return self._filename
-
-  @property
-  def path(self):
-    """Get the full path to the shared preferences file on the device."""
-    return self._path
-
-  @property
-  def changed(self):
-    """True if properties have changed and a commit would be needed."""
-    return self._changed
-
-  @property
-  def xml(self):
-    """Get the underlying xml document as an ElementTree object."""
-    if self._xml is None:
-      self._xml = ElementTree.Element('map')
-    return self._xml
-
-  def Load(self):
-    """Load the shared preferences file from the device.
-
-    A empty xml document, which may be modified and saved on |commit|, is
-    created if the file does not already exist.
-    """
-    if self._device.FileExists(self.path):
-      self._xml = ElementTree.fromstring(
-          self._device.ReadFile(self.path, as_root=True))
-      assert self._xml.tag == 'map'
-    else:
-      self._xml = None
-    self._changed = False
-
-  def Clear(self):
-    """Clear all of the preferences contained in this object."""
-    if self._xml is not None and len(self):  # only clear if not already empty
-      self._xml = None
-      self._changed = True
-
-  def Commit(self):
-    """Save the current set of preferences to the device.
-
-    Only actually saves if some preferences have been modified.
-    """
-    if not self.changed:
-      return
-    self._device.RunShellCommand(
-        ['mkdir', '-p', posixpath.dirname(self.path)],
-        as_root=True, check_return=True)
-    self._device.WriteFile(self.path, str(self), as_root=True)
-    # Creating the directory/file can cause issues with SELinux if they did
-    # not already exist. As a workaround, apply the package's security context
-    # to the shared_prefs directory, which mimics the behavior of a file
-    # created by the app itself
-    if self._device.build_version_sdk >= version_codes.MARSHMALLOW:
-      security_context = self._GetSecurityContext(self.package)
-      if security_context == None:
-        raise device_errors.CommandFailedError(
-            'Failed to get security context for %s' % self.package)
-      self._device.RunShellCommand(
-          ['chcon', '-R', security_context,
-           '/data/data/%s/shared_prefs' % self.package],
-          as_root=True, check_return=True)
-    self._device.KillAll(self.package, exact=True, as_root=True, quiet=True)
-    self._changed = False
-
-  def __len__(self):
-    """Get the number of preferences in this collection."""
-    return len(self.xml)
-
-  def PropertyType(self, key):
-    """Get the type (i.e. tag name) of a property in the collection."""
-    return self._GetChild(key).tag
-
-  def HasProperty(self, key):
-    try:
-      self._GetChild(key)
-      return True
-    except KeyError:
-      return False
-
-  def GetBoolean(self, key):
-    """Get a boolean property."""
-    return BooleanPref(self._GetChild(key)).get()
-
-  def SetBoolean(self, key, value):
-    """Set a boolean property."""
-    self._SetPrefValue(key, value, BooleanPref)
-
-  def GetFloat(self, key):
-    """Get a float property."""
-    return FloatPref(self._GetChild(key)).get()
-
-  def SetFloat(self, key, value):
-    """Set a float property."""
-    self._SetPrefValue(key, value, FloatPref)
-
-  def GetInt(self, key):
-    """Get an int property."""
-    return IntPref(self._GetChild(key)).get()
-
-  def SetInt(self, key, value):
-    """Set an int property."""
-    self._SetPrefValue(key, value, IntPref)
-
-  def GetLong(self, key):
-    """Get a long property."""
-    return LongPref(self._GetChild(key)).get()
-
-  def SetLong(self, key, value):
-    """Set a long property."""
-    self._SetPrefValue(key, value, LongPref)
-
-  def GetString(self, key):
-    """Get a string property."""
-    return StringPref(self._GetChild(key)).get()
-
-  def SetString(self, key, value):
-    """Set a string property."""
-    self._SetPrefValue(key, value, StringPref)
-
-  def GetStringSet(self, key):
-    """Get a string set property."""
-    return StringSetPref(self._GetChild(key)).get()
-
-  def SetStringSet(self, key, value):
-    """Set a string set property."""
-    self._SetPrefValue(key, value, StringSetPref)
-
-  def Remove(self, key):
-    """Remove a preference from the collection."""
-    self.xml.remove(self._GetChild(key))
-
-  def AsDict(self):
-    """Return the properties and their values as a dictionary."""
-    d = {}
-    for child in self.xml:
-      pref = _PREF_TYPES[child.tag](child)
-      d[child.get('name')] = pref.get()
-    return d
-
-  def __enter__(self):
-    """Load preferences file from the device when entering a context."""
-    self.Load()
-    return self
-
-  def __exit__(self, exc_type, _exc_value, _traceback):
-    """Save preferences file to the device when leaving a context."""
-    if not exc_type:
-      self.Commit()
-
-  def _GetChild(self, key):
-    """Get the underlying xml node that holds the property of a given key.
-
-    Raises:
-      KeyError when the key is not found in the collection.
-    """
-    for child in self.xml:
-      if child.get('name') == key:
-        return child
-    raise KeyError(key)
-
-  def _SetPrefValue(self, key, value, pref_cls):
-    """Set the value of a property.
-
-    Args:
-      key: The key of the property to set.
-      value: The new value of the property.
-      pref_cls: A subclass of BasePref used to access the property.
-
-    Raises:
-      TypeError when the key already exists but with a different type.
-    """
-    try:
-      pref = pref_cls(self._GetChild(key))
-      old_value = pref.get()
-    except KeyError:
-      pref = pref_cls(ElementTree.SubElement(
-          self.xml, pref_cls.tag_name, {'name': key}))
-      old_value = None
-    if old_value != value:
-      pref.set(value)
-      self._changed = True
-      logger.info('Setting property: %s', pref)
-
-  def _GetSecurityContext(self, package):
-    for line in self._device.RunShellCommand(['ls', '-Z', '/data/data/'],
-                                             as_root=True, check_return=True):
-      split_line = line.split()
-      # ls -Z output differs between Android versions, but the package is
-      # always last and the context always starts with "u:object"
-      if split_line[-1] == package:
-        for column in split_line:
-          if column.startswith('u:object'):
-            return column
-    return None
diff --git a/systrace/catapult/devil/devil/android/sdk/shared_prefs_test.py b/systrace/catapult/devil/devil/android/sdk/shared_prefs_test.py
deleted file mode 100755
index 4c31c56..0000000
--- a/systrace/catapult/devil/devil/android/sdk/shared_prefs_test.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for the contents of shared_prefs.py (mostly SharedPrefs).
-"""
-
-import logging
-import unittest
-
-from devil import devil_env
-from devil.android import device_utils
-from devil.android.sdk import shared_prefs
-from devil.android.sdk import version_codes
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-def MockDeviceWithFiles(files=None):
-  if files is None:
-    files = {}
-
-  def file_exists(path):
-    return path in files
-
-  def write_file(path, contents, **_kwargs):
-    files[path] = contents
-
-  def read_file(path, **_kwargs):
-    return files[path]
-
-  device = mock.MagicMock(spec=device_utils.DeviceUtils)
-  device.FileExists = mock.Mock(side_effect=file_exists)
-  device.WriteFile = mock.Mock(side_effect=write_file)
-  device.ReadFile = mock.Mock(side_effect=read_file)
-  return device
-
-
-class SharedPrefsTest(unittest.TestCase):
-
-  def setUp(self):
-    self.device = MockDeviceWithFiles({
-      '/data/data/com.some.package/shared_prefs/prefs.xml':
-          "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
-          '<map>\n'
-          '  <int name="databaseVersion" value="107" />\n'
-          '  <boolean name="featureEnabled" value="false" />\n'
-          '  <string name="someHashValue">249b3e5af13d4db2</string>\n'
-          '</map>'})
-    self.expected_data = {'databaseVersion': 107,
-                          'featureEnabled': False,
-                          'someHashValue': '249b3e5af13d4db2'}
-
-  def testPropertyLifetime(self):
-    prefs = shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml')
-    self.assertEquals(len(prefs), 0)  # collection is empty before loading
-    prefs.SetInt('myValue', 444)
-    self.assertEquals(len(prefs), 1)
-    self.assertEquals(prefs.GetInt('myValue'), 444)
-    self.assertTrue(prefs.HasProperty('myValue'))
-    prefs.Remove('myValue')
-    self.assertEquals(len(prefs), 0)
-    self.assertFalse(prefs.HasProperty('myValue'))
-    with self.assertRaises(KeyError):
-      prefs.GetInt('myValue')
-
-  def testPropertyType(self):
-    prefs = shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml')
-    prefs.SetInt('myValue', 444)
-    self.assertEquals(prefs.PropertyType('myValue'), 'int')
-    with self.assertRaises(TypeError):
-      prefs.GetString('myValue')
-    with self.assertRaises(TypeError):
-      prefs.SetString('myValue', 'hello')
-
-  def testLoad(self):
-    prefs = shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml')
-    self.assertEquals(len(prefs), 0)  # collection is empty before loading
-    prefs.Load()
-    self.assertEquals(len(prefs), len(self.expected_data))
-    self.assertEquals(prefs.AsDict(), self.expected_data)
-    self.assertFalse(prefs.changed)
-
-  def testClear(self):
-    prefs = shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml')
-    prefs.Load()
-    self.assertEquals(prefs.AsDict(), self.expected_data)
-    self.assertFalse(prefs.changed)
-    prefs.Clear()
-    self.assertEquals(len(prefs), 0)  # collection is empty now
-    self.assertTrue(prefs.changed)
-
-  def testCommit(self):
-    type(self.device).build_version_sdk = mock.PropertyMock(
-        return_value=version_codes.LOLLIPOP_MR1)
-    prefs = shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'other_prefs.xml')
-    self.assertFalse(self.device.FileExists(prefs.path))  # file does not exist
-    prefs.Load()
-    self.assertEquals(len(prefs), 0)  # file did not exist, collection is empty
-    prefs.SetInt('magicNumber', 42)
-    prefs.SetFloat('myMetric', 3.14)
-    prefs.SetLong('bigNumner', 6000000000)
-    prefs.SetStringSet('apps', ['gmail', 'chrome', 'music'])
-    self.assertFalse(self.device.FileExists(prefs.path))  # still does not exist
-    self.assertTrue(prefs.changed)
-    prefs.Commit()
-    self.assertTrue(self.device.FileExists(prefs.path))  # should exist now
-    self.device.KillAll.assert_called_once_with(prefs.package, exact=True,
-                                                as_root=True, quiet=True)
-    self.assertFalse(prefs.changed)
-
-    prefs = shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'other_prefs.xml')
-    self.assertEquals(len(prefs), 0)  # collection is empty before loading
-    prefs.Load()
-    self.assertEquals(prefs.AsDict(), {
-        'magicNumber': 42,
-        'myMetric': 3.14,
-        'bigNumner': 6000000000,
-        'apps': ['gmail', 'chrome', 'music']})  # data survived roundtrip
-
-  def testAsContextManager_onlyReads(self):
-    with shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml') as prefs:
-      self.assertEquals(prefs.AsDict(), self.expected_data)  # loaded and ready
-    self.assertEquals(self.device.WriteFile.call_args_list, [])  # did not write
-
-  def testAsContextManager_readAndWrite(self):
-    type(self.device).build_version_sdk = mock.PropertyMock(
-        return_value=version_codes.LOLLIPOP_MR1)
-    with shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml') as prefs:
-      prefs.SetBoolean('featureEnabled', True)
-      prefs.Remove('someHashValue')
-      prefs.SetString('newString', 'hello')
-
-    self.assertTrue(self.device.WriteFile.called)  # did write
-    with shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml') as prefs:
-      # changes persisted
-      self.assertTrue(prefs.GetBoolean('featureEnabled'))
-      self.assertFalse(prefs.HasProperty('someHashValue'))
-      self.assertEquals(prefs.GetString('newString'), 'hello')
-      self.assertTrue(prefs.HasProperty('databaseVersion'))  # still there
-
-  def testAsContextManager_commitAborted(self):
-    with self.assertRaises(TypeError):
-      with shared_prefs.SharedPrefs(
-          self.device, 'com.some.package', 'prefs.xml') as prefs:
-        prefs.SetBoolean('featureEnabled', True)
-        prefs.Remove('someHashValue')
-        prefs.SetString('newString', 'hello')
-        prefs.SetInt('newString', 123)  # oops!
-
-    self.assertEquals(self.device.WriteFile.call_args_list, [])  # did not write
-    with shared_prefs.SharedPrefs(
-        self.device, 'com.some.package', 'prefs.xml') as prefs:
-      # contents were not modified
-      self.assertEquals(prefs.AsDict(), self.expected_data)
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/android/sdk/split_select.py b/systrace/catapult/devil/devil/android/sdk/split_select.py
deleted file mode 100644
index 6c3d231..0000000
--- a/systrace/catapult/devil/devil/android/sdk/split_select.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""This module wraps Android's split-select tool."""
-
-from devil.android.sdk import build_tools
-from devil.utils import cmd_helper
-from devil.utils import lazy
-
-
-_split_select_path = lazy.WeakConstant(
-    lambda: build_tools.GetPath('split-select'))
-
-
-def _RunSplitSelectCmd(args):
-  """Runs a split-select command.
-
-  Args:
-    args: A list of arguments for split-select.
-
-  Returns:
-    The output of the command.
-  """
-  cmd = [_split_select_path.read()] + args
-  status, output = cmd_helper.GetCmdStatusAndOutput(cmd)
-  if status != 0:
-    raise Exception('Failed running command "%s" with output "%s".' %
-                    (' '.join(cmd), output))
-  return output
-
-
-def _SplitConfig(device, allow_cached_props=False):
-  """Returns a config specifying which APK splits are required by the device.
-
-  Args:
-    device: A DeviceUtils object.
-    allow_cached_props: Whether to use cached values for device properties.
-  """
-  return ('%s-r%s-%s:%s' %
-          (device.GetLanguage(cache=allow_cached_props),
-           device.GetCountry(cache=allow_cached_props),
-           device.screen_density,
-           device.product_cpu_abi))
-
-
-def SelectSplits(device, base_apk, split_apks, allow_cached_props=False):
-  """Determines which APK splits the device requires.
-
-  Args:
-    device: A DeviceUtils object.
-    base_apk: The path of the base APK.
-    split_apks: A list of paths of APK splits.
-    allow_cached_props: Whether to use cached values for device properties.
-
-  Returns:
-    The list of APK splits that the device requires.
-  """
-  config = _SplitConfig(device, allow_cached_props=allow_cached_props)
-  args = ['--target', config, '--base', base_apk]
-  for split in split_apks:
-    args.extend(['--split', split])
-  return _RunSplitSelectCmd(args).splitlines()
diff --git a/systrace/catapult/devil/devil/android/sdk/test/data/push_directory/push_directory_contents.txt b/systrace/catapult/devil/devil/android/sdk/test/data/push_directory/push_directory_contents.txt
deleted file mode 100644
index 573df2e..0000000
--- a/systrace/catapult/devil/devil/android/sdk/test/data/push_directory/push_directory_contents.txt
+++ /dev/null
@@ -1 +0,0 @@
-Goodnight, moon.
diff --git a/systrace/catapult/devil/devil/android/sdk/test/data/push_file.txt b/systrace/catapult/devil/devil/android/sdk/test/data/push_file.txt
deleted file mode 100644
index af5626b..0000000
--- a/systrace/catapult/devil/devil/android/sdk/test/data/push_file.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello, world!
diff --git a/systrace/catapult/devil/devil/android/sdk/version_codes.py b/systrace/catapult/devil/devil/android/sdk/version_codes.py
deleted file mode 100644
index ec14359..0000000
--- a/systrace/catapult/devil/devil/android/sdk/version_codes.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Android SDK version codes.
-
-http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
-"""
-
-JELLY_BEAN = 16
-JELLY_BEAN_MR1 = 17
-JELLY_BEAN_MR2 = 18
-KITKAT = 19
-KITKAT_WATCH = 20
-LOLLIPOP = 21
-LOLLIPOP_MR1 = 22
-MARSHMALLOW = 23
-NOUGAT = 24
-NOUGAT_MR1 = 25
-O = 26
-O_MR1 = 27
diff --git a/systrace/catapult/devil/devil/android/settings.py b/systrace/catapult/devil/devil/android/settings.py
deleted file mode 100644
index 1713be4..0000000
--- a/systrace/catapult/devil/devil/android/settings.py
+++ /dev/null
@@ -1,287 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-
-logger = logging.getLogger(__name__)
-
-_LOCK_SCREEN_SETTINGS_PATH = '/data/system/locksettings.db'
-_ALTERNATE_LOCK_SCREEN_SETTINGS_PATH = (
-    '/data/data/com.android.providers.settings/databases/settings.db')
-PASSWORD_QUALITY_UNSPECIFIED = '0'
-_COMPATIBLE_BUILD_TYPES = ['userdebug', 'eng']
-
-
-ENABLE_LOCATION_SETTINGS = [
-  # Note that setting these in this order is required in order for all of
-  # them to take and stick through a reboot.
-  ('com.google.settings/partner', [
-    ('use_location_for_services', 1),
-  ]),
-  ('settings/secure', [
-    # Ensure Geolocation is enabled and allowed for tests.
-    ('location_providers_allowed', 'gps,network'),
-  ]),
-  ('com.google.settings/partner', [
-    ('network_location_opt_in', 1),
-  ])
-]
-
-DISABLE_LOCATION_SETTINGS = [
-  ('com.google.settings/partner', [
-    ('use_location_for_services', 0),
-  ]),
-  ('settings/secure', [
-    # Ensure Geolocation is disabled.
-    ('location_providers_allowed', ''),
-  ]),
-]
-
-ENABLE_MOCK_LOCATION_SETTINGS = [
-  ('settings/secure', [
-    ('mock_location', 1),
-  ]),
-]
-
-DISABLE_MOCK_LOCATION_SETTINGS = [
-  ('settings/secure', [
-    ('mock_location', 0),
-  ]),
-]
-
-DETERMINISTIC_DEVICE_SETTINGS = [
-  ('settings/global', [
-    ('assisted_gps_enabled', 0),
-
-    # Disable "auto time" and "auto time zone" to avoid network-provided time
-    # to overwrite the device's datetime and timezone synchronized from host
-    # when running tests later. See b/6569849.
-    ('auto_time', 0),
-    ('auto_time_zone', 0),
-
-    ('development_settings_enabled', 1),
-
-    # Flag for allowing ActivityManagerService to send ACTION_APP_ERROR intents
-    # on application crashes and ANRs. If this is disabled, the crash/ANR dialog
-    # will never display the "Report" button.
-    # Type: int ( 0 = disallow, 1 = allow )
-    ('send_action_app_error', 0),
-
-    ('stay_on_while_plugged_in', 3),
-
-    ('verifier_verify_adb_installs', 0),
-
-    ('window_animation_scale', 0),
-  ]),
-  ('settings/secure', [
-    ('allowed_geolocation_origins',
-        'http://www.google.co.uk http://www.google.com'),
-
-    # Ensure that we never get random dialogs like "Unfortunately the process
-    # android.process.acore has stopped", which steal the focus, and make our
-    # automation fail (because the dialog steals the focus then mistakenly
-    # receives the injected user input events).
-    ('anr_show_background', 0),
-
-    ('lockscreen.disabled', 1),
-
-    ('screensaver_enabled', 0),
-
-    ('skip_first_use_hints', 1),
-  ]),
-  ('settings/system', [
-    # Don't want devices to accidentally rotate the screen as that could
-    # affect performance measurements.
-    ('accelerometer_rotation', 0),
-
-    ('lockscreen.disabled', 1),
-
-    # Turn down brightness and disable auto-adjust so that devices run cooler.
-    ('screen_brightness', 5),
-    ('screen_brightness_mode', 0),
-
-    ('user_rotation', 0),
-
-    ('window_animation_scale', 0),
-  ]),
-]
-
-NETWORK_DISABLED_SETTINGS = [
-  ('settings/global', [
-    ('airplane_mode_on', 1),
-    ('wifi_on', 0),
-  ]),
-]
-
-
-class ContentSettings(dict):
-
-  """A dict interface to interact with device content settings.
-
-  System properties are key/value pairs as exposed by adb shell content.
-  """
-
-  def __init__(self, table, device):
-    super(ContentSettings, self).__init__()
-    self._table = table
-    self._device = device
-
-  @staticmethod
-  def _GetTypeBinding(value):
-    if isinstance(value, bool):
-      return 'b'
-    if isinstance(value, float):
-      return 'f'
-    if isinstance(value, int):
-      return 'i'
-    if isinstance(value, long):
-      return 'l'
-    if isinstance(value, str):
-      return 's'
-    raise ValueError('Unsupported type %s' % type(value))
-
-  def iteritems(self):
-    for row in self._device.RunShellCommand(
-        ['content', 'query', '--uri', 'content://%s' % self._table],
-        check_return=True, as_root=True):
-      key, value = _ParseContentRow(row)
-      if not key:
-        continue
-      yield key, value
-
-  def __getitem__(self, key):
-    query_row = self._device.RunShellCommand(
-        ['content', 'query', '--uri', 'content://%s' % self._table,
-         '--where', "name='%s'" % key],
-        check_return=True, as_root=True, single_line=True)
-    parsed_key, parsed_value = _ParseContentRow(query_row)
-    if parsed_key is None:
-      raise KeyError('key=%s not found' % key)
-    if parsed_key != key:
-      raise KeyError('Expected key=%s, but got key=%s' % (key, parsed_key))
-    return parsed_value
-
-  def __setitem__(self, key, value):
-    if key in self:
-      self._device.RunShellCommand(
-          ['content', 'update', '--uri', 'content://%s' % self._table,
-           '--bind', 'value:%s:%s' % (self._GetTypeBinding(value), value),
-           '--where', "name='%s'" % key],
-          check_return=True, as_root=True)
-    else:
-      self._device.RunShellCommand(
-          ['content', 'insert', '--uri', 'content://%s' % self._table,
-           '--bind', 'name:%s:%s' % (self._GetTypeBinding(key), key),
-           '--bind', 'value:%s:%s' % (self._GetTypeBinding(value), value)],
-          check_return=True, as_root=True)
-
-  def __delitem__(self, key):
-    self._device.RunShellCommand(
-        ['content', 'delete', '--uri', 'content://%s' % self._table,
-         '--bind', 'name:%s:%s' % (self._GetTypeBinding(key), key)],
-        check_return=True, as_root=True)
-
-
-def ConfigureContentSettings(device, desired_settings):
-  """Configures device content setings from a list.
-
-  Many settings are documented at:
-    http://developer.android.com/reference/android/provider/Settings.Global.html
-    http://developer.android.com/reference/android/provider/Settings.Secure.html
-    http://developer.android.com/reference/android/provider/Settings.System.html
-
-  Many others are undocumented.
-
-  Args:
-    device: A DeviceUtils instance for the device to configure.
-    desired_settings: A list of (table, [(key: value), ...]) for all
-        settings to configure.
-  """
-  for table, key_value in desired_settings:
-    settings = ContentSettings(table, device)
-    for key, value in key_value:
-      settings[key] = value
-    logger.info('\n%s %s', table, (80 - len(table)) * '-')
-    for key, value in sorted(settings.iteritems()):
-      logger.info('\t%s: %s', key, value)
-
-
-def SetLockScreenSettings(device):
-  """Sets lock screen settings on the device.
-
-  On certain device/Android configurations we need to disable the lock screen in
-  a different database. Additionally, the password type must be set to
-  DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED.
-  Lock screen settings are stored in sqlite on the device in:
-      /data/system/locksettings.db
-
-  IMPORTANT: The first column is used as a primary key so that all rows with the
-  same value for that column are removed from the table prior to inserting the
-  new values.
-
-  Args:
-    device: A DeviceUtils instance for the device to configure.
-
-  Raises:
-    Exception if the setting was not properly set.
-  """
-  if device.build_type not in _COMPATIBLE_BUILD_TYPES:
-    logger.warning('Unable to disable lockscreen on %s builds.',
-                   device.build_type)
-    return
-
-  def get_lock_settings(table):
-    return [(table, 'lockscreen.disabled', '1'),
-            (table, 'lockscreen.password_type', PASSWORD_QUALITY_UNSPECIFIED),
-            (table, 'lockscreen.password_type_alternate',
-             PASSWORD_QUALITY_UNSPECIFIED)]
-
-  if device.FileExists(_LOCK_SCREEN_SETTINGS_PATH):
-    db = _LOCK_SCREEN_SETTINGS_PATH
-    locksettings = get_lock_settings('locksettings')
-    columns = ['name', 'user', 'value']
-    generate_values = lambda k, v: [k, '0', v]
-  elif device.FileExists(_ALTERNATE_LOCK_SCREEN_SETTINGS_PATH):
-    db = _ALTERNATE_LOCK_SCREEN_SETTINGS_PATH
-    locksettings = get_lock_settings('secure') + get_lock_settings('system')
-    columns = ['name', 'value']
-    generate_values = lambda k, v: [k, v]
-  else:
-    logger.warning('Unable to find database file to set lock screen settings.')
-    return
-
-  for table, key, value in locksettings:
-    # Set the lockscreen setting for default user '0'
-    values = generate_values(key, value)
-
-    cmd = """begin transaction;
-delete from '%(table)s' where %(primary_key)s='%(primary_value)s';
-insert into '%(table)s' (%(columns)s) values (%(values)s);
-commit transaction;""" % {
-      'table': table,
-      'primary_key': columns[0],
-      'primary_value': values[0],
-      'columns': ', '.join(columns),
-      'values': ', '.join(["'%s'" % value for value in values])
-    }
-    output_msg = device.RunShellCommand(
-        ['sqlite3', db, cmd], check_return=True, as_root=True)
-    if output_msg:
-      logger.info(' '.join(output_msg))
-
-
-def _ParseContentRow(row):
-  """Parse key, value entries from a row string."""
-  # Example row:
-  # 'Row: 0 _id=13, name=logging_id2, value=-1fccbaa546705b05'
-  fields = row.split(', ')
-  key = None
-  value = ''
-  for field in fields:
-    k, _, v = field.partition('=')
-    if k == 'name':
-      key = v
-    elif k == 'value':
-      value = v
-  return key, value
diff --git a/systrace/catapult/devil/devil/android/tools/__init__.py b/systrace/catapult/devil/devil/android/tools/__init__.py
deleted file mode 100644
index 50b23df..0000000
--- a/systrace/catapult/devil/devil/android/tools/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
diff --git a/systrace/catapult/devil/devil/android/tools/adb_run_shell_cmd.py b/systrace/catapult/devil/devil/android/tools/adb_run_shell_cmd.py
deleted file mode 100755
index 6edd560..0000000
--- a/systrace/catapult/devil/devil/android/tools/adb_run_shell_cmd.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import json
-import os
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-
-from devil.android import device_utils
-from devil.android.tools import script_common
-from devil.utils import logging_common
-
-
-def main():
-  parser = argparse.ArgumentParser(
-      'Run an adb shell command on selected devices')
-  parser.add_argument('cmd', help='Adb shell command to run.', nargs="+")
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddDeviceArguments(parser)
-  script_common.AddEnvironmentArguments(parser)
-  parser.add_argument('--as-root', action='store_true', help='Run as root.')
-  parser.add_argument('--json-output',
-                      help='File to dump json output to.')
-  args = parser.parse_args()
-
-  logging_common.InitializeLogging(args)
-  script_common.InitializeEnvironment(args)
-
-  devices = script_common.GetDevices(args.devices, args.blacklist_file)
-  p_out = (device_utils.DeviceUtils.parallel(devices).RunShellCommand(
-      args.cmd, large_output=True, as_root=args.as_root, check_return=True)
-      .pGet(None))
-
-  data = {}
-  for device, output in zip(devices, p_out):
-    for line in output:
-      print '%s: %s' % (device, line)
-    data[str(device)] = output
-
-  if args.json_output:
-    with open(args.json_output, 'w') as f:
-      json.dump(data, f)
-
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/android/tools/cpufreq.py b/systrace/catapult/devil/devil/android/tools/cpufreq.py
deleted file mode 100755
index 6ce0aff..0000000
--- a/systrace/catapult/devil/devil/android/tools/cpufreq.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A script to manipulate device CPU frequency."""
-
-import argparse
-import os
-import pprint
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-
-from devil.android import device_utils
-from devil.android.perf import perf_control
-from devil.android.tools import script_common
-from devil.utils import logging_common
-
-
-def SetScalingGovernor(device, args):
-  p = perf_control.PerfControl(device)
-  p.SetScalingGovernor(args.governor)
-
-
-def GetScalingGovernor(device, _args):
-  p = perf_control.PerfControl(device)
-  for cpu, governor in p.GetScalingGovernor():
-    print '%s %s: %s' % (str(device), cpu, governor)
-
-
-def ListAvailableGovernors(device, _args):
-  p = perf_control.PerfControl(device)
-  for cpu, governors in p.ListAvailableGovernors():
-    print '%s %s: %s' % (str(device), cpu, pprint.pformat(governors))
-
-
-def main(raw_args):
-  parser = argparse.ArgumentParser()
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddEnvironmentArguments(parser)
-  parser.add_argument(
-      '--device', dest='devices', action='append', default=[],
-      help='Devices for which the governor should be set. Defaults to all.')
-
-  subparsers = parser.add_subparsers()
-
-  set_governor = subparsers.add_parser('set-governor')
-  set_governor.add_argument(
-      'governor',
-      help='Desired CPU governor.')
-  set_governor.set_defaults(func=SetScalingGovernor)
-
-  get_governor = subparsers.add_parser('get-governor')
-  get_governor.set_defaults(func=GetScalingGovernor)
-
-  list_governors = subparsers.add_parser('list-governors')
-  list_governors.set_defaults(func=ListAvailableGovernors)
-
-  args = parser.parse_args(raw_args)
-
-  logging_common.InitializeLogging(args)
-  script_common.InitializeEnvironment(args)
-
-  devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices)
-
-  parallel_devices = device_utils.DeviceUtils.parallel(devices)
-  parallel_devices.pMap(args.func, args)
-
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/android/tools/device_monitor.py b/systrace/catapult/devil/devil/android/tools/device_monitor.py
deleted file mode 100755
index 10e0333..0000000
--- a/systrace/catapult/devil/devil/android/tools/device_monitor.py
+++ /dev/null
@@ -1,230 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Launches a daemon to monitor android device temperatures & status.
-
-This script will repeatedly poll the given devices for their temperatures and
-status every 60 seconds and dump the stats to file on the host.
-"""
-
-import argparse
-import collections
-import json
-import logging
-import logging.handlers
-import os
-import re
-import socket
-import sys
-import time
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-
-from devil.android import battery_utils
-from devil.android import device_blacklist
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android.tools import script_common
-
-
-# Various names of sensors used to measure cpu temp
-CPU_TEMP_SENSORS = [
-  # most nexus devices
-  'tsens_tz_sensor0',
-  # android one
-  'mtktscpu',
-  # nexus 9
-  'CPU-therm',
-]
-
-DEVICE_FILE_VERSION = 1
-DEVICE_FILE = os.path.join(
-    os.path.expanduser('~'), '.android',
-    '%s__android_device_status.json' % socket.gethostname().split('.')[0])
-
-MEM_INFO_REGEX = re.compile(r'.*?\:\s*(\d+)\s*kB') # ex: 'MemTotal:   185735 kB'
-
-
-def get_device_status_unsafe(device):
-  """Polls the given device for various info.
-
-    Returns: A dict of the following format:
-    {
-      'battery': {
-        'level': 100,
-        'temperature': 123
-      },
-      'build': {
-        'build.id': 'ABC12D',
-        'product.device': 'chickenofthesea'
-      },
-      'imei': 123456789,
-      'mem': {
-        'avail': 1000000,
-        'total': 1234567,
-      },
-      'processes': 123,
-      'state': 'good',
-      'temp': {
-        'some_sensor': 30
-      },
-      'uptime': 1234.56,
-    }
-  """
-  status = collections.defaultdict(dict)
-
-  # Battery
-  battery = battery_utils.BatteryUtils(device)
-  battery_info = battery.GetBatteryInfo()
-  try:
-    level = int(battery_info.get('level'))
-  except (KeyError, TypeError, ValueError):
-    level = None
-  if level and level >= 0 and level <= 100:
-    status['battery']['level'] = level
-  try:
-    temperature = int(battery_info.get('temperature'))
-  except (KeyError, TypeError, ValueError):
-    temperature = None
-  if temperature:
-    status['battery']['temperature'] = temperature
-
-  # Build
-  status['build']['build.id'] = device.build_id
-  status['build']['product.device'] = device.build_product
-
-  # Memory
-  mem_info = ''
-  try:
-    mem_info = device.ReadFile('/proc/meminfo')
-  except device_errors.AdbShellCommandFailedError:
-    logging.exception('Unable to read /proc/meminfo')
-  for line in mem_info.splitlines():
-    match = MEM_INFO_REGEX.match(line)
-    if match:
-      try:
-        value = int(match.group(1))
-      except ValueError:
-        continue
-      key = line.split(':')[0].strip()
-      if 'MemTotal' == key:
-        status['mem']['total'] = value
-      elif 'MemFree' == key:
-        status['mem']['free'] = value
-
-  # Process
-  try:
-    status['processes'] = len(device.ListProcesses())
-  except device_errors.AdbCommandFailedError:
-    logging.exception('Unable to count process list.')
-
-  # CPU Temps
-  # Find a thermal sensor that matches one in CPU_TEMP_SENSORS and read its
-  # temperature.
-  files = []
-  try:
-    files = device.RunShellCommand(
-        'grep -lE "%s" /sys/class/thermal/thermal_zone*/type' % '|'.join(
-            CPU_TEMP_SENSORS), shell=True, check_return=True)
-  except device_errors.AdbShellCommandFailedError:
-    logging.exception('Unable to list thermal sensors.')
-  for f in files:
-    try:
-      sensor_name = device.ReadFile(f).strip()
-      temp = float(device.ReadFile(f[:-4] + 'temp').strip()) # s/type^/temp
-      status['temp'][sensor_name] = temp
-    except (device_errors.AdbShellCommandFailedError, ValueError):
-      logging.exception('Unable to read thermal sensor %s', f)
-
-  # Uptime
-  try:
-    uptimes = device.ReadFile('/proc/uptime').split()
-    status['uptime'] = float(uptimes[0]) # Take the first field (actual uptime)
-  except (device_errors.AdbShellCommandFailedError, ValueError):
-    logging.exception('Unable to read /proc/uptime')
-
-  try:
-    status['imei'] = device.GetIMEI()
-  except device_errors.CommandFailedError:
-    logging.exception('Unable to read IMEI')
-    status['imei'] = 'unknown'
-
-  status['state'] = 'available'
-  return status
-
-
-def get_device_status(device):
-  try:
-    status = get_device_status_unsafe(device)
-  except device_errors.DeviceUnreachableError:
-    status = {'state': 'offline'}
-  return status
-
-
-def get_all_status(blacklist):
-  status_dict = {
-      'version': DEVICE_FILE_VERSION,
-      'devices': {},
-  }
-
-  healthy_devices = device_utils.DeviceUtils.HealthyDevices(blacklist)
-  parallel_devices = device_utils.DeviceUtils.parallel(healthy_devices)
-  results = parallel_devices.pMap(get_device_status).pGet(None)
-
-  status_dict['devices'] = {
-      device.serial: result for device, result in zip(healthy_devices, results)
-  }
-
-  if blacklist:
-    for device, reason in blacklist.Read().iteritems():
-      status_dict['devices'][device] = {
-          'state': reason.get('reason', 'blacklisted')}
-
-  status_dict['timestamp'] = time.time()
-  return status_dict
-
-
-def main(argv):
-  """Launches the device monitor.
-
-  Polls the devices for their battery and cpu temperatures and scans the
-  blacklist file every 60 seconds and dumps the data to DEVICE_FILE.
-  """
-
-  parser = argparse.ArgumentParser(
-      description='Launches the device monitor.')
-  script_common.AddEnvironmentArguments(parser)
-  parser.add_argument('--blacklist-file', help='Path to device blacklist file.')
-  args = parser.parse_args(argv)
-
-  logger = logging.getLogger()
-  logger.setLevel(logging.DEBUG)
-  handler = logging.handlers.RotatingFileHandler(
-      '/tmp/device_monitor.log', maxBytes=10 * 1024 * 1024, backupCount=5)
-  fmt = logging.Formatter('%(asctime)s %(levelname)s %(message)s',
-                          datefmt='%y%m%d %H:%M:%S')
-  handler.setFormatter(fmt)
-  logger.addHandler(handler)
-  script_common.InitializeEnvironment(args)
-
-  blacklist = (device_blacklist.Blacklist(args.blacklist_file)
-               if args.blacklist_file else None)
-
-  logging.info('Device monitor running with pid %d, adb: %s, blacklist: %s',
-               os.getpid(), args.adb_path, args.blacklist_file)
-  while True:
-    start = time.time()
-    status_dict = get_all_status(blacklist)
-    with open(DEVICE_FILE, 'wb') as f:
-      json.dump(status_dict, f, indent=2, sort_keys=True)
-    logging.info('Got status of all devices in %.2fs.', time.time() - start)
-    time.sleep(60)
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/android/tools/device_monitor_test.py b/systrace/catapult/devil/devil/android/tools/device_monitor_test.py
deleted file mode 100755
index 2cb0dd2..0000000
--- a/systrace/catapult/devil/devil/android/tools/device_monitor_test.py
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(
-        os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                           '..', '..', '..')))
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android.tools import device_monitor
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-class DeviceMonitorTest(unittest.TestCase):
-
-  def setUp(self):
-    self.device = mock.Mock(spec=device_utils.DeviceUtils,
-        serial='device_cereal', build_id='abc123', build_product='clownfish',
-        GetIMEI=lambda: '123456789')
-    self.file_contents = {
-        '/proc/meminfo': """
-                         MemTotal:        1234567 kB
-                         MemFree:         1000000 kB
-                         MemUsed:          234567 kB
-                         """,
-        '/sys/class/thermal/thermal_zone0/type': 'CPU-therm',
-        '/sys/class/thermal/thermal_zone0/temp': '30',
-        '/proc/uptime': '12345 99999',
-    }
-    self.device.ReadFile = mock.MagicMock(
-        side_effect=lambda file_name: self.file_contents[file_name])
-
-    self.device.ListProcesses.return_value = ['p1', 'p2', 'p3', 'p4', 'p5']
-
-    self.cmd_outputs = {
-        'grep': ['/sys/class/thermal/thermal_zone0/type'],
-    }
-
-    def mock_run_shell(cmd, **_kwargs):
-      args = cmd.split() if isinstance(cmd, basestring) else cmd
-      try:
-        return self.cmd_outputs[args[0]]
-      except KeyError:
-        raise device_errors.AdbShellCommandFailedError(cmd, None, None)
-
-    self.device.RunShellCommand = mock.MagicMock(side_effect=mock_run_shell)
-
-    self.battery = mock.Mock()
-    self.battery.GetBatteryInfo = mock.MagicMock(
-        return_value={'level': '80', 'temperature': '123'})
-
-    self.expected_status = {
-      'device_cereal': {
-        'processes': 5,
-        'temp': {
-          'CPU-therm': 30.0
-         },
-         'battery': {
-           'temperature': 123,
-           'level': 80
-         },
-         'uptime': 12345.0,
-         'mem': {
-           'total': 1234567,
-           'free': 1000000
-         },
-         'build': {
-           'build.id': 'abc123',
-           'product.device': 'clownfish',
-         },
-         'imei': '123456789',
-         'state': 'available',
-      }
-    }
-
-  @mock.patch('devil.android.battery_utils.BatteryUtils')
-  @mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices')
-  def test_getStats(self, get_devices, get_battery):
-    get_devices.return_value = [self.device]
-    get_battery.return_value = self.battery
-
-    status = device_monitor.get_all_status(None)
-    self.assertEquals(self.expected_status, status['devices'])
-
-  @mock.patch('devil.android.battery_utils.BatteryUtils')
-  @mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices')
-  def test_getStatsNoBattery(self, get_devices, get_battery):
-    get_devices.return_value = [self.device]
-    get_battery.return_value = self.battery
-    broken_battery_info = mock.Mock()
-    broken_battery_info.GetBatteryInfo = mock.MagicMock(
-        return_value={'level': '-1', 'temperature': 'not_a_number'})
-    get_battery.return_value = broken_battery_info
-
-    # Should be same status dict but without battery stats.
-    expected_status_no_battery = self.expected_status.copy()
-    expected_status_no_battery['device_cereal'].pop('battery')
-
-    status = device_monitor.get_all_status(None)
-    self.assertEquals(expected_status_no_battery, status['devices'])
-
-  @mock.patch('devil.android.battery_utils.BatteryUtils')
-  @mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices')
-  def test_getStatsNoPs(self, get_devices, get_battery):
-    get_devices.return_value = [self.device]
-    get_battery.return_value = self.battery
-    # Throw exception when listing processes.
-    self.device.ListProcesses.side_effect = device_errors.AdbCommandFailedError(
-        ['ps'], 'something failed', 1)
-
-    # Should be same status dict but without process stats.
-    expected_status_no_ps = self.expected_status.copy()
-    expected_status_no_ps['device_cereal'].pop('processes')
-
-    status = device_monitor.get_all_status(None)
-    self.assertEquals(expected_status_no_ps, status['devices'])
-
-  @mock.patch('devil.android.battery_utils.BatteryUtils')
-  @mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices')
-  def test_getStatsNoSensors(self, get_devices, get_battery):
-    get_devices.return_value = [self.device]
-    get_battery.return_value = self.battery
-    del self.cmd_outputs['grep']  # Throw exception on run shell grep command.
-
-    # Should be same status dict but without temp stats.
-    expected_status_no_temp = self.expected_status.copy()
-    expected_status_no_temp['device_cereal'].pop('temp')
-
-    status = device_monitor.get_all_status(None)
-    self.assertEquals(expected_status_no_temp, status['devices'])
-
-  @mock.patch('devil.android.battery_utils.BatteryUtils')
-  @mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices')
-  def test_getStatsWithBlacklist(self, get_devices, get_battery):
-    get_devices.return_value = [self.device]
-    get_battery.return_value = self.battery
-    blacklist = mock.Mock()
-    blacklist.Read = mock.MagicMock(
-        return_value={'bad_device': {'reason': 'offline'}})
-
-    # Should be same status dict but with extra blacklisted device.
-    expected_status = self.expected_status.copy()
-    expected_status['bad_device'] = {'state': 'offline'}
-
-    status = device_monitor.get_all_status(blacklist)
-    self.assertEquals(expected_status, status['devices'])
-
-  @mock.patch('devil.android.battery_utils.BatteryUtils')
-  @mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices')
-  def test_brokenTempValue(self, get_devices, get_battery):
-    self.file_contents['/sys/class/thermal/thermal_zone0/temp'] = 'n0t a numb3r'
-    get_devices.return_value = [self.device]
-    get_battery.return_value = self.battery
-
-    expected_status_no_temp = self.expected_status.copy()
-    expected_status_no_temp['device_cereal'].pop('temp')
-
-    status = device_monitor.get_all_status(None)
-    self.assertEquals(self.expected_status, status['devices'])
-
-
-if __name__ == '__main__':
-  sys.exit(unittest.main())
diff --git a/systrace/catapult/devil/devil/android/tools/device_recovery.py b/systrace/catapult/devil/devil/android/tools/device_recovery.py
deleted file mode 100755
index 0925aae..0000000
--- a/systrace/catapult/devil/devil/android/tools/device_recovery.py
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A script to recover devices in a known bad state."""
-
-import argparse
-import logging
-import os
-import psutil
-import signal
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-from devil.android import device_blacklist
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-from devil.android.tools import device_status
-from devil.android.tools import script_common
-from devil.utils import logging_common
-from devil.utils import lsusb
-# TODO(jbudorick): Resolve this after experimenting w/ disabling the USB reset.
-from devil.utils import reset_usb  # pylint: disable=unused-import
-
-logger = logging.getLogger(__name__)
-
-
-def KillAllAdb():
-  def get_all_adb():
-    for p in psutil.process_iter():
-      try:
-        # Note: p.as_dict is compatible with both older (v1 and under) as well
-        # as newer (v2 and over) versions of psutil.
-        # See: http://grodola.blogspot.com/2014/01/psutil-20-porting.html
-        pinfo = p.as_dict(attrs=['pid', 'name', 'cmdline'])
-        if 'adb' == pinfo['name']:
-          pinfo['cmdline'] = ' '.join(pinfo['cmdline'])
-          yield p, pinfo
-      except (psutil.NoSuchProcess, psutil.AccessDenied):
-        pass
-
-  for sig in [signal.SIGTERM, signal.SIGQUIT, signal.SIGKILL]:
-    for p, pinfo in get_all_adb():
-      try:
-        pinfo['signal'] = sig
-        logger.info('kill %(signal)s %(pid)s (%(name)s [%(cmdline)s])', pinfo)
-        p.send_signal(sig)
-      except (psutil.NoSuchProcess, psutil.AccessDenied):
-        pass
-  for _, pinfo in get_all_adb():
-    try:
-      logger.error('Unable to kill %(pid)s (%(name)s [%(cmdline)s])', pinfo)
-    except (psutil.NoSuchProcess, psutil.AccessDenied):
-      pass
-
-
-def RecoverDevice(device, blacklist, should_reboot=lambda device: True):
-  if device_status.IsBlacklisted(device.adb.GetDeviceSerial(),
-                                 blacklist):
-    logger.debug('%s is blacklisted, skipping recovery.', str(device))
-    return
-
-  if should_reboot(device):
-    try:
-      device.WaitUntilFullyBooted(retries=0)
-    except (device_errors.CommandTimeoutError,
-            device_errors.CommandFailedError,
-            device_errors.DeviceUnreachableError):
-      logger.exception('Failure while waiting for %s. '
-                       'Attempting to recover.', str(device))
-    try:
-      try:
-        device.Reboot(block=False, timeout=5, retries=0)
-      except device_errors.CommandTimeoutError:
-        logger.warning('Timed out while attempting to reboot %s normally.'
-                       'Attempting alternative reboot.', str(device))
-        # The device drops offline before we can grab the exit code, so
-        # we don't check for status.
-        try:
-          device.adb.Root()
-        finally:
-          # We are already in a failure mode, attempt to reboot regardless of
-          # what device.adb.Root() returns. If the sysrq reboot fails an
-          # exception willbe thrown at that level.
-          device.adb.Shell('echo b > /proc/sysrq-trigger', expect_status=None,
-                           timeout=5, retries=0)
-    except (device_errors.CommandFailedError,
-            device_errors.DeviceUnreachableError):
-      logger.exception('Failed to reboot %s.', str(device))
-      if blacklist:
-        blacklist.Extend([device.adb.GetDeviceSerial()],
-                         reason='reboot_failure')
-    except device_errors.CommandTimeoutError:
-      logger.exception('Timed out while rebooting %s.', str(device))
-      if blacklist:
-        blacklist.Extend([device.adb.GetDeviceSerial()],
-                         reason='reboot_timeout')
-
-    try:
-      device.WaitUntilFullyBooted(
-          retries=0, timeout=device.REBOOT_DEFAULT_TIMEOUT)
-    except (device_errors.CommandFailedError,
-            device_errors.DeviceUnreachableError):
-      logger.exception('Failure while waiting for %s.', str(device))
-      if blacklist:
-        blacklist.Extend([device.adb.GetDeviceSerial()],
-                         reason='reboot_failure')
-    except device_errors.CommandTimeoutError:
-      logger.exception('Timed out while waiting for %s.', str(device))
-      if blacklist:
-        blacklist.Extend([device.adb.GetDeviceSerial()],
-                         reason='reboot_timeout')
-
-
-def RecoverDevices(devices, blacklist, enable_usb_reset=False):
-  """Attempts to recover any inoperable devices in the provided list.
-
-  Args:
-    devices: The list of devices to attempt to recover.
-    blacklist: The current device blacklist, which will be used then
-      reset.
-  """
-
-  statuses = device_status.DeviceStatus(devices, blacklist)
-
-  should_restart_usb = set(
-      status['serial'] for status in statuses
-      if (not status['usb_status']
-          or status['adb_status'] in ('offline', 'missing')))
-  should_restart_adb = should_restart_usb.union(set(
-      status['serial'] for status in statuses
-      if status['adb_status'] == 'unauthorized'))
-  should_reboot_device = should_restart_adb.union(set(
-      status['serial'] for status in statuses
-      if status['blacklisted']))
-
-  logger.debug('Should restart USB for:')
-  for d in should_restart_usb:
-    logger.debug('  %s', d)
-  logger.debug('Should restart ADB for:')
-  for d in should_restart_adb:
-    logger.debug('  %s', d)
-  logger.debug('Should reboot:')
-  for d in should_reboot_device:
-    logger.debug('  %s', d)
-
-  if blacklist:
-    blacklist.Reset()
-
-  if should_restart_adb:
-    KillAllAdb()
-    adb_wrapper.AdbWrapper.StartServer()
-
-  for serial in should_restart_usb:
-    try:
-      # TODO(crbug.com/642194): Resetting may be causing more harm
-      # (specifically, kernel panics) than it does good.
-      if enable_usb_reset:
-        reset_usb.reset_android_usb(serial)
-      else:
-        logger.warning('USB reset disabled for %s (crbug.com/642914)',
-                       serial)
-    except IOError:
-      logger.exception('Unable to reset USB for %s.', serial)
-      if blacklist:
-        blacklist.Extend([serial], reason='USB failure')
-    except device_errors.DeviceUnreachableError:
-      logger.exception('Unable to reset USB for %s.', serial)
-      if blacklist:
-        blacklist.Extend([serial], reason='offline')
-
-  device_utils.DeviceUtils.parallel(devices).pMap(
-      RecoverDevice, blacklist,
-      should_reboot=lambda device: device.serial in should_reboot_device)
-
-
-def main():
-  parser = argparse.ArgumentParser()
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddEnvironmentArguments(parser)
-  parser.add_argument('--blacklist-file', help='Device blacklist JSON file.')
-  parser.add_argument('--known-devices-file', action='append', default=[],
-                      dest='known_devices_files',
-                      help='Path to known device lists.')
-  parser.add_argument('--enable-usb-reset', action='store_true',
-                      help='Reset USB if necessary.')
-
-  args = parser.parse_args()
-  logging_common.InitializeLogging(args)
-  script_common.InitializeEnvironment(args)
-
-  blacklist = (device_blacklist.Blacklist(args.blacklist_file)
-               if args.blacklist_file
-               else None)
-
-  expected_devices = device_status.GetExpectedDevices(args.known_devices_files)
-  usb_devices = set(lsusb.get_android_devices())
-  devices = [device_utils.DeviceUtils(s)
-             for s in expected_devices.union(usb_devices)]
-
-  RecoverDevices(devices, blacklist, enable_usb_reset=args.enable_usb_reset)
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/android/tools/device_status.py b/systrace/catapult/devil/devil/android/tools/device_status.py
deleted file mode 100755
index dbbf290..0000000
--- a/systrace/catapult/devil/devil/android/tools/device_status.py
+++ /dev/null
@@ -1,296 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A script to keep track of devices across builds and report state."""
-
-import argparse
-import json
-import logging
-import os
-import re
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-from devil.android import battery_utils
-from devil.android import device_blacklist
-from devil.android import device_errors
-from devil.android import device_list
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-from devil.android.tools import script_common
-from devil.constants import exit_codes
-from devil.utils import logging_common
-from devil.utils import lsusb
-
-logger = logging.getLogger(__name__)
-
-_RE_DEVICE_ID = re.compile(r'Device ID = (\d+)')
-
-
-def IsBlacklisted(serial, blacklist):
-  return blacklist and serial in blacklist.Read()
-
-
-def _BatteryStatus(device, blacklist):
-  battery_info = {}
-  try:
-    battery = battery_utils.BatteryUtils(device)
-    battery_info = battery.GetBatteryInfo(timeout=5)
-    battery_level = int(battery_info.get('level', 100))
-
-    if battery_level < 15:
-      logger.error('Critically low battery level (%d)', battery_level)
-      battery = battery_utils.BatteryUtils(device)
-      if not battery.GetCharging():
-        battery.SetCharging(True)
-      if blacklist:
-        blacklist.Extend([device.adb.GetDeviceSerial()], reason='low_battery')
-
-  except (device_errors.CommandFailedError,
-          device_errors.DeviceUnreachableError):
-    logger.exception('Failed to get battery information for %s',
-                     str(device))
-
-  return battery_info
-
-
-def DeviceStatus(devices, blacklist):
-  """Generates status information for the given devices.
-
-  Args:
-    devices: The devices to generate status for.
-    blacklist: The current device blacklist.
-  Returns:
-    A dict of the following form:
-    {
-      '<serial>': {
-        'serial': '<serial>',
-        'adb_status': str,
-        'usb_status': bool,
-        'blacklisted': bool,
-        # only if the device is connected and not blacklisted
-        'type': ro.build.product,
-        'build': ro.build.id,
-        'build_detail': ro.build.fingerprint,
-        'battery': {
-          ...
-        },
-        'imei_slice': str,
-        'wifi_ip': str,
-      },
-      ...
-    }
-  """
-  adb_devices = {
-    a[0].GetDeviceSerial(): a
-    for a in adb_wrapper.AdbWrapper.Devices(desired_state=None, long_list=True)
-  }
-  usb_devices = set(lsusb.get_android_devices())
-
-  def blacklisting_device_status(device):
-    serial = device.adb.GetDeviceSerial()
-    adb_status = (
-        adb_devices[serial][1] if serial in adb_devices
-        else 'missing')
-    usb_status = bool(serial in usb_devices)
-
-    device_status = {
-      'serial': serial,
-      'adb_status': adb_status,
-      'usb_status': usb_status,
-    }
-
-    if not IsBlacklisted(serial, blacklist):
-      if adb_status == 'device':
-        try:
-          build_product = device.build_product
-          build_id = device.build_id
-          build_fingerprint = device.build_fingerprint
-          build_description = device.build_description
-          wifi_ip = device.GetProp('dhcp.wlan0.ipaddress')
-          battery_info = _BatteryStatus(device, blacklist)
-          try:
-            imei_slice = device.GetIMEI()
-          except device_errors.CommandFailedError:
-            logging.exception('Unable to fetch IMEI for %s.', str(device))
-            imei_slice = 'unknown'
-
-          if (device.product_name == 'mantaray' and
-              battery_info.get('AC powered', None) != 'true'):
-            logger.error('Mantaray device not connected to AC power.')
-
-          device_status.update({
-            'ro.build.product': build_product,
-            'ro.build.id': build_id,
-            'ro.build.fingerprint': build_fingerprint,
-            'ro.build.description': build_description,
-            'battery': battery_info,
-            'imei_slice': imei_slice,
-            'wifi_ip': wifi_ip,
-          })
-
-        except (device_errors.CommandFailedError,
-                device_errors.DeviceUnreachableError):
-          logger.exception('Failure while getting device status for %s.',
-                           str(device))
-          if blacklist:
-            blacklist.Extend([serial], reason='status_check_failure')
-
-        except device_errors.CommandTimeoutError:
-          logger.exception('Timeout while getting device status for %s.',
-                           str(device))
-          if blacklist:
-            blacklist.Extend([serial], reason='status_check_timeout')
-
-      elif blacklist:
-        blacklist.Extend([serial],
-                         reason=adb_status if usb_status else 'offline')
-
-    device_status['blacklisted'] = IsBlacklisted(serial, blacklist)
-
-    return device_status
-
-  parallel_devices = device_utils.DeviceUtils.parallel(devices)
-  statuses = parallel_devices.pMap(blacklisting_device_status).pGet(None)
-  return statuses
-
-
-def _LogStatuses(statuses):
-  # Log the state of all devices.
-  for status in statuses:
-    logger.info(status['serial'])
-    adb_status = status.get('adb_status')
-    blacklisted = status.get('blacklisted')
-    logger.info('  USB status: %s',
-                'online' if status.get('usb_status') else 'offline')
-    logger.info('  ADB status: %s', adb_status)
-    logger.info('  Blacklisted: %s', str(blacklisted))
-    if adb_status == 'device' and not blacklisted:
-      logger.info('  Device type: %s', status.get('ro.build.product'))
-      logger.info('  OS build: %s', status.get('ro.build.id'))
-      logger.info('  OS build fingerprint: %s',
-                  status.get('ro.build.fingerprint'))
-      logger.info('  Battery state:')
-      for k, v in status.get('battery', {}).iteritems():
-        logger.info('    %s: %s', k, v)
-      logger.info('  IMEI slice: %s', status.get('imei_slice'))
-      logger.info('  WiFi IP: %s', status.get('wifi_ip'))
-
-
-def _WriteBuildbotFile(file_path, statuses):
-  buildbot_path, _ = os.path.split(file_path)
-  if os.path.exists(buildbot_path):
-    with open(file_path, 'w') as f:
-      for status in statuses:
-        try:
-          if status['adb_status'] == 'device':
-            f.write('{serial} {adb_status} {build_product} {build_id} '
-                    '{temperature:.1f}C {level}%\n'.format(
-                serial=status['serial'],
-                adb_status=status['adb_status'],
-                build_product=status['type'],
-                build_id=status['build'],
-                temperature=float(status['battery']['temperature']) / 10,
-                level=status['battery']['level']
-            ))
-          elif status.get('usb_status', False):
-            f.write('{serial} {adb_status}\n'.format(
-                serial=status['serial'],
-                adb_status=status['adb_status']
-            ))
-          else:
-            f.write('{serial} offline\n'.format(
-                serial=status['serial']
-            ))
-        except Exception: # pylint: disable=broad-except
-          pass
-
-
-def GetExpectedDevices(known_devices_files):
-  expected_devices = set()
-  try:
-    for path in known_devices_files:
-      if os.path.exists(path):
-        expected_devices.update(device_list.GetPersistentDeviceList(path))
-      else:
-        logger.warning('Could not find known devices file: %s', path)
-  except IOError:
-    logger.warning('Problem reading %s, skipping.', path)
-
-  logger.info('Expected devices:')
-  for device in expected_devices:
-    logger.info('  %s', device)
-  return expected_devices
-
-
-def AddArguments(parser):
-  parser.add_argument('--json-output',
-                      help='Output JSON information into a specified file.')
-  parser.add_argument('--blacklist-file', help='Device blacklist JSON file.')
-  parser.add_argument('--known-devices-file', action='append', default=[],
-                      dest='known_devices_files',
-                      help='Path to known device lists.')
-  parser.add_argument('--buildbot-path', '-b',
-                      default='/home/chrome-bot/.adb_device_info',
-                      help='Absolute path to buildbot file location')
-  parser.add_argument('-w', '--overwrite-known-devices-files',
-                      action='store_true',
-                      help='If set, overwrites known devices files wiht new '
-                           'values.')
-
-def main():
-  parser = argparse.ArgumentParser()
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddEnvironmentArguments(parser)
-  AddArguments(parser)
-  args = parser.parse_args()
-
-  logging_common.InitializeLogging(args)
-  script_common.InitializeEnvironment(args)
-
-  blacklist = (device_blacklist.Blacklist(args.blacklist_file)
-               if args.blacklist_file
-               else None)
-
-  expected_devices = GetExpectedDevices(args.known_devices_files)
-  usb_devices = set(lsusb.get_android_devices())
-  devices = [device_utils.DeviceUtils(s)
-             for s in expected_devices.union(usb_devices)]
-
-  statuses = DeviceStatus(devices, blacklist)
-
-  # Log the state of all devices.
-  _LogStatuses(statuses)
-
-  # Update the last devices file(s).
-  if args.overwrite_known_devices_files:
-    for path in args.known_devices_files:
-      device_list.WritePersistentDeviceList(
-          path, [status['serial'] for status in statuses])
-
-  # Write device info to file for buildbot info display.
-  _WriteBuildbotFile(args.buildbot_path, statuses)
-
-  # Dump the device statuses to JSON.
-  if args.json_output:
-    with open(args.json_output, 'wb') as f:
-      f.write(json.dumps(
-          statuses, indent=4, sort_keys=True, separators=(',', ': ')))
-
-  live_devices = [status['serial'] for status in statuses
-                  if (status['adb_status'] == 'device'
-                      and not IsBlacklisted(status['serial'], blacklist))]
-
-  # If all devices failed, or if there are no devices, it's an infra error.
-  if not live_devices:
-    logger.error('No available devices.')
-  return 0 if live_devices else exit_codes.INFRA
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/android/tools/flash_device.py b/systrace/catapult/devil/devil/android/tools/flash_device.py
deleted file mode 100755
index 8b51c60..0000000
--- a/systrace/catapult/devil/devil/android/tools/flash_device.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import logging
-import os
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(os.path.abspath(os.path.join(
-      os.path.dirname(__file__), '..', '..', '..')))
-from devil.android import device_blacklist
-from devil.android import device_utils
-from devil.android import fastboot_utils
-from devil.android.tools import script_common
-from devil.constants import exit_codes
-from devil.utils import logging_common
-
-logger = logging.getLogger(__name__)
-
-
-def main():
-  parser = argparse.ArgumentParser()
-  parser.add_argument('build_path', help='Path to android build.')
-  parser.add_argument('-w', '--wipe', action='store_true',
-                       help='If set, wipes user data')
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddDeviceArguments(parser)
-  args = parser.parse_args()
-  logging_common.InitializeLogging(args)
-
-  if args.blacklist_file:
-    blacklist = device_blacklist.Blacklist(args.blacklist_file).Read()
-    if blacklist:
-      logger.critical('Device(s) in blacklist, not flashing devices:')
-      for key in blacklist:
-        logger.critical('  %s', key)
-      return exit_codes.INFRA
-
-  flashed_devices = []
-  failed_devices = []
-
-  def flash(device):
-    fastboot = fastboot_utils.FastbootUtils(device)
-    try:
-      fastboot.FlashDevice(args.build_path, wipe=args.wipe)
-      flashed_devices.append(device)
-    except Exception:  # pylint: disable=broad-except
-      logger.exception('Device %s failed to flash.', str(device))
-      failed_devices.append(device)
-
-  devices = script_common.GetDevices(args.devices, args.blacklist_file)
-  device_utils.DeviceUtils.parallel(devices).pMap(flash)
-
-  if flashed_devices:
-    logger.info('The following devices were flashed:')
-    logger.info('  %s', ' '.join(str(d) for d in flashed_devices))
-  if failed_devices:
-    logger.critical('The following devices failed to flash:')
-    logger.critical('  %s', ' '.join(str(d) for d in failed_devices))
-    return exit_codes.INFRA
-  return 0
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/android/tools/keyboard.py b/systrace/catapult/devil/devil/android/tools/keyboard.py
deleted file mode 100755
index c5cb614..0000000
--- a/systrace/catapult/devil/devil/android/tools/keyboard.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Use your keyboard as your phone's keyboard. Experimental."""
-
-import argparse
-import copy
-import os
-import sys
-import termios
-import tty
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-from devil import base_error
-from devil.android.sdk import keyevent
-from devil.android.tools import script_common
-from devil.utils import logging_common
-
-
-_KEY_MAPPING = {
-  '\x08': keyevent.KEYCODE_DEL,
-  '\x0a': keyevent.KEYCODE_ENTER,
-  ' ': keyevent.KEYCODE_SPACE,
-  '.': keyevent.KEYCODE_PERIOD,
-  '0': keyevent.KEYCODE_0,
-  '1': keyevent.KEYCODE_1,
-  '2': keyevent.KEYCODE_2,
-  '3': keyevent.KEYCODE_3,
-  '4': keyevent.KEYCODE_4,
-  '5': keyevent.KEYCODE_5,
-  '6': keyevent.KEYCODE_6,
-  '7': keyevent.KEYCODE_7,
-  '8': keyevent.KEYCODE_8,
-  '9': keyevent.KEYCODE_9,
-  'a': keyevent.KEYCODE_A,
-  'b': keyevent.KEYCODE_B,
-  'c': keyevent.KEYCODE_C,
-  'd': keyevent.KEYCODE_D,
-  'e': keyevent.KEYCODE_E,
-  'f': keyevent.KEYCODE_F,
-  'g': keyevent.KEYCODE_G,
-  'h': keyevent.KEYCODE_H,
-  'i': keyevent.KEYCODE_I,
-  'j': keyevent.KEYCODE_J,
-  'k': keyevent.KEYCODE_K,
-  'l': keyevent.KEYCODE_L,
-  'm': keyevent.KEYCODE_M,
-  'n': keyevent.KEYCODE_N,
-  'o': keyevent.KEYCODE_O,
-  'p': keyevent.KEYCODE_P,
-  'q': keyevent.KEYCODE_Q,
-  'r': keyevent.KEYCODE_R,
-  's': keyevent.KEYCODE_S,
-  't': keyevent.KEYCODE_T,
-  'u': keyevent.KEYCODE_U,
-  'v': keyevent.KEYCODE_V,
-  'w': keyevent.KEYCODE_W,
-  'x': keyevent.KEYCODE_X,
-  'y': keyevent.KEYCODE_Y,
-  'z': keyevent.KEYCODE_Z,
-  '\x7f': keyevent.KEYCODE_DEL,
-}
-
-
-def Keyboard(device, stream_itr):
-  try:
-    for c in stream_itr:
-      k = _KEY_MAPPING.get(c)
-      if k:
-        device.SendKeyEvent(k)
-      else:
-        print
-        print '(No mapping for character 0x%x)' % ord(c)
-  except KeyboardInterrupt:
-    pass
-
-
-class MultipleDevicesError(base_error.BaseError):
-  def __init__(self, devices):
-    super(MultipleDevicesError, self).__init__(
-        'More than one device found: %s' % ', '.join(str(d) for d in devices))
-
-
-def main(raw_args):
-  parser = argparse.ArgumentParser(
-      description="Use your keyboard as your phone's keyboard.")
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddDeviceArguments(parser)
-  args = parser.parse_args(raw_args)
-
-  logging_common.InitializeLogging(args)
-
-  devices = script_common.GetDevices(args.devices, None)
-  if len(devices) > 1:
-    raise MultipleDevicesError(devices)
-
-  def next_char():
-    while True:
-      yield sys.stdin.read(1)
-
-  try:
-    fd = sys.stdin.fileno()
-
-    # See man 3 termios for more info on what this is doing.
-    old_attrs = termios.tcgetattr(fd)
-    new_attrs = copy.deepcopy(old_attrs)
-    new_attrs[tty.LFLAG] = new_attrs[tty.LFLAG] & ~(termios.ICANON)
-    new_attrs[tty.CC][tty.VMIN] = 1
-    new_attrs[tty.CC][tty.VTIME] = 0
-    termios.tcsetattr(fd, termios.TCSAFLUSH, new_attrs)
-
-    Keyboard(devices[0], next_char())
-  finally:
-    termios.tcsetattr(fd, termios.TCSAFLUSH, old_attrs)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/android/tools/provision_devices.py b/systrace/catapult/devil/devil/android/tools/provision_devices.py
deleted file mode 100755
index 68aca3b..0000000
--- a/systrace/catapult/devil/devil/android/tools/provision_devices.py
+++ /dev/null
@@ -1,647 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright (c) 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Provisions Android devices with settings required for bots.
-
-Usage:
-  ./provision_devices.py [-d <device serial number>]
-"""
-
-import argparse
-import datetime
-import json
-import logging
-import os
-import posixpath
-import re
-import sys
-import time
-
-# Import _strptime before threaded code. datetime.datetime.strptime is
-# threadsafe except for the initial import of the _strptime module.
-# See crbug.com/584730 and https://bugs.python.org/issue7980.
-import _strptime  # pylint: disable=unused-import
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-
-from devil.android import battery_utils
-from devil.android import device_blacklist
-from devil.android import device_errors
-from devil.android import device_temp_file
-from devil.android import device_utils
-from devil.android import settings
-from devil.android.sdk import adb_wrapper
-from devil.android.sdk import intent
-from devil.android.sdk import keyevent
-from devil.android.sdk import version_codes
-from devil.android.tools import script_common
-from devil.constants import exit_codes
-from devil.utils import logging_common
-from devil.utils import timeout_retry
-
-logger = logging.getLogger(__name__)
-
-_SYSTEM_APP_DIRECTORIES = ['/system/app/', '/system/priv-app/']
-_SYSTEM_WEBVIEW_NAMES = ['webview', 'WebViewGoogle']
-_CHROME_PACKAGE_REGEX = re.compile('.*chrom.*')
-_TOMBSTONE_REGEX = re.compile('tombstone.*')
-
-
-class _DEFAULT_TIMEOUTS(object):
-  # L can take a while to reboot after a wipe.
-  LOLLIPOP = 600
-  PRE_LOLLIPOP = 180
-
-  HELP_TEXT = '{}s on L, {}s on pre-L'.format(LOLLIPOP, PRE_LOLLIPOP)
-
-
-class ProvisionStep(object):
-
-  def __init__(self, cmd, reboot=False):
-    self.cmd = cmd
-    self.reboot = reboot
-
-
-def ProvisionDevices(
-    devices,
-    blacklist_file,
-    adb_key_files=None,
-    disable_location=False,
-    disable_mock_location=False,
-    disable_network=False,
-    disable_system_chrome=False,
-    emulators=False,
-    enable_java_debug=False,
-    max_battery_temp=None,
-    min_battery_level=None,
-    output_device_blacklist=None,
-    reboot_timeout=None,
-    remove_system_webview=False,
-    system_app_remove_list=None,
-    system_package_remove_list=None,
-    wipe=True):
-  blacklist = (device_blacklist.Blacklist(blacklist_file)
-               if blacklist_file
-               else None)
-  system_app_remove_list = system_app_remove_list or []
-  system_package_remove_list = system_package_remove_list or []
-  try:
-    devices = script_common.GetDevices(devices, blacklist)
-  except device_errors.NoDevicesError:
-    logging.error('No available devices to provision.')
-    if blacklist:
-      logging.error('Local device blacklist: %s', blacklist.Read())
-    raise
-  devices = [d for d in devices
-             if not emulators or d.adb.is_emulator]
-  parallel_devices = device_utils.DeviceUtils.parallel(devices)
-
-  steps = []
-  if wipe:
-    steps += [ProvisionStep(lambda d: Wipe(d, adb_key_files), reboot=True)]
-  steps += [ProvisionStep(
-      lambda d: SetProperties(d, enable_java_debug, disable_location,
-                              disable_mock_location),
-      reboot=not emulators)]
-
-  if disable_network:
-    steps.append(ProvisionStep(DisableNetwork))
-
-  if disable_system_chrome:
-    steps.append(ProvisionStep(DisableSystemChrome))
-
-  if max_battery_temp:
-    steps.append(ProvisionStep(
-        lambda d: WaitForBatteryTemperature(d, max_battery_temp)))
-
-  if min_battery_level:
-    steps.append(ProvisionStep(
-        lambda d: WaitForCharge(d, min_battery_level)))
-
-  if remove_system_webview:
-    system_app_remove_list.extend(_SYSTEM_WEBVIEW_NAMES)
-
-  if system_app_remove_list or system_package_remove_list:
-    steps.append(ProvisionStep(
-        lambda d: RemoveSystemApps(
-            d, system_app_remove_list, system_package_remove_list)))
-
-  steps.append(ProvisionStep(SetDate))
-  steps.append(ProvisionStep(CheckExternalStorage))
-
-  parallel_devices.pMap(ProvisionDevice, steps, blacklist, reboot_timeout)
-
-  blacklisted_devices = blacklist.Read() if blacklist else []
-  if output_device_blacklist:
-    with open(output_device_blacklist, 'w') as f:
-      json.dump(blacklisted_devices, f)
-  if all(d in blacklisted_devices for d in devices):
-    raise device_errors.NoDevicesError
-  return 0
-
-
-def ProvisionDevice(device, steps, blacklist, reboot_timeout=None):
-  try:
-    if not reboot_timeout:
-      if device.build_version_sdk >= version_codes.LOLLIPOP:
-        reboot_timeout = _DEFAULT_TIMEOUTS.LOLLIPOP
-      else:
-        reboot_timeout = _DEFAULT_TIMEOUTS.PRE_LOLLIPOP
-
-    for step in steps:
-      try:
-        device.WaitUntilFullyBooted(timeout=reboot_timeout, retries=0)
-      except device_errors.CommandTimeoutError:
-        logger.error('Device did not finish booting. Will try to reboot.')
-        device.Reboot(timeout=reboot_timeout)
-      step.cmd(device)
-      if step.reboot:
-        device.Reboot(False, retries=0)
-        device.adb.WaitForDevice()
-
-  except device_errors.CommandTimeoutError:
-    logger.exception('Timed out waiting for device %s. Adding to blacklist.',
-                     str(device))
-    if blacklist:
-      blacklist.Extend([str(device)], reason='provision_timeout')
-
-  except (device_errors.CommandFailedError,
-          device_errors.DeviceUnreachableError):
-    logger.exception('Failed to provision device %s. Adding to blacklist.',
-                     str(device))
-    if blacklist:
-      blacklist.Extend([str(device)], reason='provision_failure')
-
-
-def Wipe(device, adb_key_files=None):
-  if (device.IsUserBuild() or
-      device.build_version_sdk >= version_codes.MARSHMALLOW):
-    WipeChromeData(device)
-
-    package = 'com.google.android.gms'
-    if device.GetApplicationPaths(package):
-      version_name = device.GetApplicationVersion(package)
-      logger.info('Version name for %s is %s', package, version_name)
-    else:
-      logger.info('Package %s is not installed', package)
-  else:
-    WipeDevice(device, adb_key_files)
-
-
-def WipeChromeData(device):
-  """Wipes chrome specific data from device
-
-  (1) uninstall any app whose name matches *chrom*, except
-      com.android.chrome, which is the chrome stable package. Doing so also
-      removes the corresponding dirs under /data/data/ and /data/app/
-  (2) remove any dir under /data/app-lib/ whose name matches *chrom*
-  (3) remove any files under /data/tombstones/ whose name matches "tombstone*"
-  (4) remove /data/local.prop if there is any
-  (5) remove /data/local/chrome-command-line if there is any
-  (6) remove anything under /data/local/.config/ if the dir exists
-      (this is telemetry related)
-  (7) remove anything under /data/local/tmp/
-
-  Arguments:
-    device: the device to wipe
-  """
-  try:
-    if device.IsUserBuild():
-      _UninstallIfMatch(device, _CHROME_PACKAGE_REGEX)
-      device.RunShellCommand('rm -rf %s/*' % device.GetExternalStoragePath(),
-                             shell=True, check_return=True)
-      device.RunShellCommand('rm -rf /data/local/tmp/*',
-                             shell=True, check_return=True)
-    else:
-      device.EnableRoot()
-      _UninstallIfMatch(device, _CHROME_PACKAGE_REGEX)
-      _WipeUnderDirIfMatch(device, '/data/app-lib/', _CHROME_PACKAGE_REGEX)
-      _WipeUnderDirIfMatch(device, '/data/tombstones/', _TOMBSTONE_REGEX)
-
-      _WipeFileOrDir(device, '/data/local.prop')
-      _WipeFileOrDir(device, '/data/local/chrome-command-line')
-      _WipeFileOrDir(device, '/data/local/.config/')
-      _WipeFileOrDir(device, '/data/local/tmp/')
-      device.RunShellCommand('rm -rf %s/*' % device.GetExternalStoragePath(),
-                             shell=True, check_return=True)
-  except device_errors.CommandFailedError:
-    logger.exception('Possible failure while wiping the device. '
-                     'Attempting to continue.')
-
-
-def _UninstallIfMatch(device, pattern):
-  installed_packages = device.RunShellCommand(
-      ['pm', 'list', 'packages'], check_return=True)
-  installed_system_packages = [
-      pkg.split(':')[1] for pkg in device.RunShellCommand(
-          ['pm', 'list', 'packages', '-s'], check_return=True)]
-  for package_output in installed_packages:
-    package = package_output.split(":")[1]
-    if pattern.match(package) and package not in installed_system_packages:
-      device.Uninstall(package)
-
-
-def _WipeUnderDirIfMatch(device, path, pattern):
-  for filename in device.ListDirectory(path):
-    if pattern.match(filename):
-      _WipeFileOrDir(device, posixpath.join(path, filename))
-
-
-def _WipeFileOrDir(device, path):
-  if device.PathExists(path):
-    device.RunShellCommand(['rm', '-rf', path], check_return=True)
-
-
-def WipeDevice(device, adb_key_files):
-  """Wipes data from device, keeping only the adb_keys for authorization.
-
-  After wiping data on a device that has been authorized, adb can still
-  communicate with the device, but after reboot the device will need to be
-  re-authorized because the adb keys file is stored in /data/misc/adb/.
-  Thus, adb_keys file is rewritten so the device does not need to be
-  re-authorized.
-
-  Arguments:
-    device: the device to wipe
-  """
-  try:
-    device.EnableRoot()
-    device_authorized = device.FileExists(adb_wrapper.ADB_KEYS_FILE)
-    if device_authorized:
-      adb_keys = device.ReadFile(adb_wrapper.ADB_KEYS_FILE,
-                                 as_root=True).splitlines()
-    device.RunShellCommand(['wipe', 'data'],
-                           as_root=True, check_return=True)
-    device.adb.WaitForDevice()
-
-    if device_authorized:
-      adb_keys_set = set(adb_keys)
-      for adb_key_file in adb_key_files or []:
-        try:
-          with open(adb_key_file, 'r') as f:
-            adb_public_keys = f.readlines()
-          adb_keys_set.update(adb_public_keys)
-        except IOError:
-          logger.warning('Unable to find adb keys file %s.', adb_key_file)
-      _WriteAdbKeysFile(device, '\n'.join(adb_keys_set))
-  except device_errors.CommandFailedError:
-    logger.exception('Possible failure while wiping the device. '
-                     'Attempting to continue.')
-
-
-def _WriteAdbKeysFile(device, adb_keys_string):
-  dir_path = posixpath.dirname(adb_wrapper.ADB_KEYS_FILE)
-  device.RunShellCommand(['mkdir', '-p', dir_path],
-                         as_root=True, check_return=True)
-  device.RunShellCommand(['restorecon', dir_path],
-                         as_root=True, check_return=True)
-  device.WriteFile(adb_wrapper.ADB_KEYS_FILE, adb_keys_string, as_root=True)
-  device.RunShellCommand(['restorecon', adb_wrapper.ADB_KEYS_FILE],
-                         as_root=True, check_return=True)
-
-
-def SetProperties(device, enable_java_debug, disable_location,
-                  disable_mock_location):
-  try:
-    device.EnableRoot()
-  except device_errors.CommandFailedError as e:
-    logger.warning(str(e))
-
-  if not device.IsUserBuild():
-    _ConfigureLocalProperties(device, enable_java_debug)
-  else:
-    logger.warning('Cannot configure properties in user builds.')
-  settings.ConfigureContentSettings(
-      device, settings.DETERMINISTIC_DEVICE_SETTINGS)
-  if disable_location:
-    settings.ConfigureContentSettings(
-        device, settings.DISABLE_LOCATION_SETTINGS)
-  else:
-    settings.ConfigureContentSettings(
-        device, settings.ENABLE_LOCATION_SETTINGS)
-
-  if disable_mock_location:
-    settings.ConfigureContentSettings(
-        device, settings.DISABLE_MOCK_LOCATION_SETTINGS)
-  else:
-    settings.ConfigureContentSettings(
-        device, settings.ENABLE_MOCK_LOCATION_SETTINGS)
-
-  settings.SetLockScreenSettings(device)
-
-  # Some device types can momentarily disappear after setting properties.
-  device.adb.WaitForDevice()
-
-
-def DisableNetwork(device):
-  settings.ConfigureContentSettings(
-      device, settings.NETWORK_DISABLED_SETTINGS)
-  if device.build_version_sdk >= version_codes.MARSHMALLOW:
-    # Ensure that NFC is also switched off.
-    device.RunShellCommand(['svc', 'nfc', 'disable'],
-                           as_root=True, check_return=True)
-
-
-def DisableSystemChrome(device):
-  # The system chrome version on the device interferes with some tests.
-  device.RunShellCommand(['pm', 'disable', 'com.android.chrome'],
-                         as_root=True, check_return=True)
-
-
-def _FindSystemPackagePaths(device, system_package_list):
-  found_paths = []
-  for system_package in system_package_list:
-    found_paths.extend(device.GetApplicationPaths(system_package))
-  return [p for p in found_paths if p.startswith('/system/')]
-
-
-def _FindSystemAppPaths(device, system_app_list):
-  found_paths = []
-  for system_app in system_app_list:
-    for directory in _SYSTEM_APP_DIRECTORIES:
-      path = os.path.join(directory, system_app)
-      if device.PathExists(path):
-        found_paths.append(path)
-  return found_paths
-
-
-def RemoveSystemApps(
-    device, system_app_remove_list, system_package_remove_list):
-  """Attempts to remove the provided system apps from the given device.
-
-  Arguments:
-    device: The device to remove the system apps from.
-    system_app_remove_list: A list of app names to remove, e.g.
-        ['WebViewGoogle', 'GoogleVrCore']
-    system_package_remove_list: A list of app packages to remove, e.g.
-        ['com.google.android.webview']
-  """
-  device.EnableRoot()
-  if device.HasRoot():
-    system_app_paths = (
-        _FindSystemAppPaths(device, system_app_remove_list) +
-        _FindSystemPackagePaths(device, system_package_remove_list))
-    if system_app_paths:
-      # Disable Marshmallow's Verity security feature
-      if device.build_version_sdk >= version_codes.MARSHMALLOW:
-        logger.info('Disabling Verity on %s', device.serial)
-        device.adb.DisableVerity()
-        device.Reboot()
-        device.WaitUntilFullyBooted()
-        device.EnableRoot()
-
-      device.adb.Remount()
-      device.RunShellCommand(['stop'], check_return=True)
-      device.RemovePath(system_app_paths, force=True, recursive=True)
-      device.RunShellCommand(['start'], check_return=True)
-  else:
-    raise device_errors.CommandFailedError(
-        'Failed to remove system apps from non-rooted device', str(device))
-
-
-def _ConfigureLocalProperties(device, java_debug=True):
-  """Set standard readonly testing device properties prior to reboot."""
-  local_props = [
-      'persist.sys.usb.config=adb',
-      'ro.monkey=1',
-      'ro.test_harness=1',
-      'ro.audio.silent=1',
-      'ro.setupwizard.mode=DISABLED',
-      ]
-  if java_debug:
-    local_props.append(
-        '%s=all' % device_utils.DeviceUtils.JAVA_ASSERT_PROPERTY)
-    local_props.append('debug.checkjni=1')
-  try:
-    device.WriteFile(
-        device.LOCAL_PROPERTIES_PATH,
-        '\n'.join(local_props), as_root=True)
-    # Android will not respect the local props file if it is world writable.
-    device.RunShellCommand(
-        ['chmod', '644', device.LOCAL_PROPERTIES_PATH],
-        as_root=True, check_return=True)
-  except device_errors.CommandFailedError:
-    logger.exception('Failed to configure local properties.')
-
-
-def FinishProvisioning(device):
-  # The lockscreen can't be disabled on user builds, so send a keyevent
-  # to unlock it.
-  if device.IsUserBuild():
-    device.SendKeyEvent(keyevent.KEYCODE_MENU)
-
-
-def WaitForCharge(device, min_battery_level):
-  battery = battery_utils.BatteryUtils(device)
-  try:
-    battery.ChargeDeviceToLevel(min_battery_level)
-  except device_errors.DeviceChargingError:
-    device.Reboot()
-    battery.ChargeDeviceToLevel(min_battery_level)
-
-
-def WaitForBatteryTemperature(device, max_battery_temp):
-  try:
-    battery = battery_utils.BatteryUtils(device)
-    battery.LetBatteryCoolToTemperature(max_battery_temp)
-  except device_errors.CommandFailedError:
-    logger.exception('Unable to let battery cool to specified temperature.')
-
-
-def SetDate(device):
-  def _set_and_verify_date():
-    if device.build_version_sdk >= version_codes.MARSHMALLOW:
-      date_format = '%m%d%H%M%Y.%S'
-      set_date_command = ['date', '-u']
-      get_date_command = ['date', '-u']
-    else:
-      date_format = '%Y%m%d.%H%M%S'
-      set_date_command = ['date', '-s']
-      get_date_command = ['date']
-
-    # TODO(jbudorick): This is wrong on pre-M devices -- get/set are
-    # dealing in local time, but we're setting based on GMT.
-    strgmtime = time.strftime(date_format, time.gmtime())
-    set_date_command.append(strgmtime)
-    device.RunShellCommand(set_date_command, as_root=True, check_return=True)
-
-    get_date_command.append('+"%Y%m%d.%H%M%S"')
-    device_time = device.RunShellCommand(
-        get_date_command, check_return=True,
-        as_root=True, single_line=True).replace('"', '')
-    device_time = datetime.datetime.strptime(device_time, "%Y%m%d.%H%M%S")
-    correct_time = datetime.datetime.strptime(strgmtime, date_format)
-    tdelta = (correct_time - device_time).seconds
-    if tdelta <= 1:
-      logger.info('Date/time successfully set on %s', device)
-      return True
-    else:
-      logger.error('Date mismatch. Device: %s Correct: %s',
-                   device_time.isoformat(), correct_time.isoformat())
-      return False
-
-  # Sometimes the date is not set correctly on the devices. Retry on failure.
-  if device.IsUserBuild():
-    # TODO(bpastene): Figure out how to set the date & time on user builds.
-    pass
-  else:
-    if not timeout_retry.WaitFor(
-        _set_and_verify_date, wait_period=1, max_tries=2):
-      raise device_errors.CommandFailedError(
-          'Failed to set date & time.', device_serial=str(device))
-    device.EnableRoot()
-    # The following intent can take a bit to complete when ran shortly after
-    # device boot-up.
-    device.BroadcastIntent(
-        intent.Intent(action='android.intent.action.TIME_SET'),
-        timeout=180)
-
-
-def LogDeviceProperties(device):
-  props = device.RunShellCommand(['getprop'], check_return=True)
-  for prop in props:
-    logger.info('  %s', prop)
-
-
-def CheckExternalStorage(device):
-  """Checks that storage is writable and if not makes it writable.
-
-  Arguments:
-    device: The device to check.
-  """
-  try:
-    with device_temp_file.DeviceTempFile(
-        device.adb, suffix='.sh', dir=device.GetExternalStoragePath()) as f:
-      device.WriteFile(f.name, 'test')
-  except device_errors.CommandFailedError:
-    logger.info('External storage not writable. Remounting / as RW')
-    device.RunShellCommand(['mount', '-o', 'remount,rw', '/'],
-                           check_return=True, as_root=True)
-    device.EnableRoot()
-    with device_temp_file.DeviceTempFile(
-        device.adb, suffix='.sh', dir=device.GetExternalStoragePath()) as f:
-      device.WriteFile(f.name, 'test')
-
-
-def main(raw_args):
-  # Recommended options on perf bots:
-  # --disable-network
-  #     TODO(tonyg): We eventually want network on. However, currently radios
-  #     can cause perfbots to drain faster than they charge.
-  # --min-battery-level 95
-  #     Some perf bots run benchmarks with USB charging disabled which leads
-  #     to gradual draining of the battery. We must wait for a full charge
-  #     before starting a run in order to keep the devices online.
-
-  parser = argparse.ArgumentParser(
-      description='Provision Android devices with settings required for bots.')
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddDeviceArguments(parser)
-  script_common.AddEnvironmentArguments(parser)
-  parser.add_argument(
-      '--adb-key-files', type=str, nargs='+',
-      help='list of adb keys to push to device')
-  parser.add_argument(
-      '--disable-location', action='store_true',
-      help='disable Google location services on devices')
-  parser.add_argument(
-      '--disable-mock-location', action='store_true', default=False,
-      help='Set ALLOW_MOCK_LOCATION to false')
-  parser.add_argument(
-      '--disable-network', action='store_true',
-      help='disable network access on devices')
-  parser.add_argument(
-      '--disable-java-debug', action='store_false',
-      dest='enable_java_debug', default=True,
-      help='disable Java property asserts and JNI checking')
-  parser.add_argument(
-      '--disable-system-chrome', action='store_true',
-      help='DEPRECATED: use --remove-system-packages com.android.google '
-           'Disable the system chrome from devices.')
-  parser.add_argument(
-      '--emulators', action='store_true',
-      help='provision only emulators and ignore usb devices '
-           '(this will not wipe emulators)')
-  parser.add_argument(
-      '--max-battery-temp', type=int, metavar='NUM',
-      help='Wait for the battery to have this temp or lower.')
-  parser.add_argument(
-      '--min-battery-level', type=int, metavar='NUM',
-      help='wait for the device to reach this minimum battery'
-           ' level before trying to continue')
-  parser.add_argument(
-      '--output-device-blacklist',
-      help='Json file to output the device blacklist.')
-  parser.add_argument(
-      '--reboot-timeout', metavar='SECS', type=int,
-      help='when wiping the device, max number of seconds to'
-           ' wait after each reboot '
-           '(default: %s)' % _DEFAULT_TIMEOUTS.HELP_TEXT)
-  parser.add_argument(
-      '--remove-system-apps', nargs='*', dest='system_app_remove_list',
-      help='DEPRECATED: use --remove-system-packages instead. '
-           'The names of system apps to remove. ')
-  parser.add_argument(
-      '--remove-system-packages', nargs='*', dest='system_package_remove_list',
-      help='The names of system packages to remove.')
-  parser.add_argument(
-      '--remove-system-webview', action='store_true',
-      help='DEPRECATED: use --remove-system-packages '
-           'com.google.android.webview com.android.webview '
-           'Remove the system webview from devices.')
-  parser.add_argument(
-      '--skip-wipe', action='store_true', default=False,
-      help='do not wipe device data during provisioning')
-
-  # No-op arguments for compatibility with build/android/provision_devices.py.
-  # TODO(jbudorick): Remove these once all callers have stopped using them.
-  parser.add_argument(
-      '--chrome-specific-wipe', action='store_true',
-      help=argparse.SUPPRESS)
-  parser.add_argument(
-      '--phase', action='append',
-      help=argparse.SUPPRESS)
-  parser.add_argument(
-      '-r', '--auto-reconnect', action='store_true',
-      help=argparse.SUPPRESS)
-  parser.add_argument(
-      '-t', '--target',
-      help=argparse.SUPPRESS)
-
-  args = parser.parse_args(raw_args)
-
-  logging_common.InitializeLogging(args)
-  script_common.InitializeEnvironment(args)
-
-  try:
-    return ProvisionDevices(
-        args.devices,
-        args.blacklist_file,
-        adb_key_files=args.adb_key_files,
-        disable_location=args.disable_location,
-        disable_mock_location=args.disable_mock_location,
-        disable_network=args.disable_network,
-        disable_system_chrome=args.disable_system_chrome,
-        emulators=args.emulators,
-        enable_java_debug=args.enable_java_debug,
-        max_battery_temp=args.max_battery_temp,
-        min_battery_level=args.min_battery_level,
-        output_device_blacklist=args.output_device_blacklist,
-        reboot_timeout=args.reboot_timeout,
-        remove_system_webview=args.remove_system_webview,
-        system_app_remove_list=args.system_app_remove_list,
-        system_package_remove_list=args.system_package_remove_list,
-        wipe=not args.skip_wipe and not args.emulators)
-  except (device_errors.DeviceUnreachableError, device_errors.NoDevicesError):
-    logging.exception('Unable to provision local devices.')
-    return exit_codes.INFRA
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/android/tools/screenshot.py b/systrace/catapult/devil/devil/android/tools/screenshot.py
deleted file mode 100755
index 3b3335c..0000000
--- a/systrace/catapult/devil/devil/android/tools/screenshot.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Takes a screenshot from an Android device."""
-
-import argparse
-import logging
-import os
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(os.path.abspath(os.path.join(
-      os.path.dirname(__file__), '..', '..', '..')))
-from devil.android import device_utils
-from devil.android.tools import script_common
-from devil.utils import logging_common
-
-logger = logging.getLogger(__name__)
-
-
-def main():
-  # Parse options.
-  parser = argparse.ArgumentParser(description=__doc__)
-  logging_common.AddLoggingArguments(parser)
-  script_common.AddDeviceArguments(parser)
-  parser.add_argument('-f', '--file', metavar='FILE',
-                      help='Save result to file instead of generating a '
-                           'timestamped file name.')
-  parser.add_argument('host_file', nargs='?',
-                      help='File to which the screenshot will be saved.')
-
-  args = parser.parse_args()
-  host_file = args.host_file or args.file
-  logging_common.InitializeLogging(args)
-
-  devices = script_common.GetDevices(args.devices, args.blacklist_file)
-
-  def screenshot(device):
-    f = None
-    if host_file:
-      root, ext = os.path.splitext(host_file)
-      f = '%s_%s%s' % (root, str(device), ext)
-    f = device.TakeScreenshot(f)
-    print 'Screenshot for device %s written to %s' % (
-        str(device), os.path.abspath(f))
-
-  device_utils.DeviceUtils.parallel(devices).pMap(screenshot)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/android/tools/script_common.py b/systrace/catapult/devil/devil/android/tools/script_common.py
deleted file mode 100644
index 150e63f..0000000
--- a/systrace/catapult/devil/devil/android/tools/script_common.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-from devil import devil_env
-from devil.android import device_blacklist
-from devil.android import device_errors
-from devil.android import device_utils
-
-
-def AddEnvironmentArguments(parser):
-  """Adds environment-specific arguments to the provided parser."""
-  parser.add_argument(
-      '--adb-path', type=os.path.realpath,
-      help='Path to the adb binary')
-
-
-def InitializeEnvironment(args):
-  devil_dynamic_config = devil_env.EmptyConfig()
-  if args.adb_path:
-    devil_dynamic_config['dependencies'].update(
-        devil_env.LocalConfigItem(
-            'adb', devil_env.GetPlatform(), args.adb_path))
-
-  devil_env.config.Initialize(configs=[devil_dynamic_config])
-
-
-def AddDeviceArguments(parser):
-  """Adds device and blacklist arguments to the provided parser."""
-  parser.add_argument(
-      '-d', '--device', dest='devices', action='append',
-      help='Serial number of the Android device to use. (default: use all)')
-  parser.add_argument('--blacklist-file', help='Device blacklist JSON file.')
-
-
-def GetDevices(requested_devices, blacklist_file):
-  """Gets a list of healthy devices matching the given parameters."""
-  if not isinstance(blacklist_file, device_blacklist.Blacklist):
-    blacklist_file = (device_blacklist.Blacklist(blacklist_file)
-                      if blacklist_file
-                      else None)
-
-  devices = device_utils.DeviceUtils.HealthyDevices(blacklist_file)
-  if not devices:
-    raise device_errors.NoDevicesError()
-  elif requested_devices:
-    requested = set(requested_devices)
-    available = set(str(d) for d in devices)
-    missing = requested.difference(available)
-    if missing:
-      raise device_errors.DeviceUnreachableError(next(iter(missing)))
-    return sorted(device_utils.DeviceUtils(d)
-                  for d in available.intersection(requested))
-  else:
-    return devices
-
diff --git a/systrace/catapult/devil/devil/android/tools/script_common_test.py b/systrace/catapult/devil/devil/android/tools/script_common_test.py
deleted file mode 100755
index 3ddb1c1..0000000
--- a/systrace/catapult/devil/devil/android/tools/script_common_test.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-import argparse
-import sys
-import tempfile
-import unittest
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android import device_utils
-from devil.android.tools import script_common
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-with devil_env.SysPath(devil_env.DEPENDENCY_MANAGER_PATH):
-  from dependency_manager import exceptions
-
-
-class GetDevicesTest(unittest.TestCase):
-
-  def testNoSpecs(self):
-    devices = [
-        device_utils.DeviceUtils('123'),
-        device_utils.DeviceUtils('456'),
-    ]
-    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
-                    return_value=devices):
-      self.assertEquals(
-          devices,
-          script_common.GetDevices(None, None))
-
-  def testWithDevices(self):
-    devices = [
-        device_utils.DeviceUtils('123'),
-        device_utils.DeviceUtils('456'),
-    ]
-    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
-                    return_value=devices):
-      self.assertEquals(
-          [device_utils.DeviceUtils('456')],
-          script_common.GetDevices(['456'], None))
-
-  def testMissingDevice(self):
-    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
-                    return_value=[device_utils.DeviceUtils('123')]):
-      with self.assertRaises(device_errors.DeviceUnreachableError):
-        script_common.GetDevices(['456'], None)
-
-  def testNoDevices(self):
-    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
-                    return_value=[]):
-      with self.assertRaises(device_errors.NoDevicesError):
-        script_common.GetDevices(None, None)
-
-
-class InitializeEnvironmentTest(unittest.TestCase):
-
-  def setUp(self):
-    # pylint: disable=protected-access
-    self.parser = argparse.ArgumentParser()
-    script_common.AddEnvironmentArguments(self.parser)
-    devil_env.config = devil_env._Environment()
-
-  def testNoAdb(self):
-    args = self.parser.parse_args([])
-    script_common.InitializeEnvironment(args)
-    with self.assertRaises(exceptions.NoPathFoundError):
-      devil_env.config.LocalPath('adb')
-
-  def testAdb(self):
-    with tempfile.NamedTemporaryFile() as f:
-      args = self.parser.parse_args(['--adb-path=%s' % f.name])
-      script_common.InitializeEnvironment(args)
-      self.assertEquals(
-          f.name,
-          devil_env.config.LocalPath('adb'))
-
-  def testNonExistentAdb(self):
-    with tempfile.NamedTemporaryFile() as f:
-      args = self.parser.parse_args(['--adb-path=%s' % f.name])
-    script_common.InitializeEnvironment(args)
-    with self.assertRaises(exceptions.NoPathFoundError):
-      devil_env.config.LocalPath('adb')
-
-
-if __name__ == '__main__':
-  sys.exit(unittest.main())
-
diff --git a/systrace/catapult/devil/devil/android/tools/system_app.py b/systrace/catapult/devil/devil/android/tools/system_app.py
deleted file mode 100755
index 00ea312..0000000
--- a/systrace/catapult/devil/devil/android/tools/system_app.py
+++ /dev/null
@@ -1,218 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A script to replace a system app while running a command."""
-
-import argparse
-import contextlib
-import logging
-import os
-import posixpath
-import sys
-
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-
-
-from devil.android import apk_helper
-from devil.android import device_errors
-from devil.android import device_temp_file
-from devil.android.sdk import version_codes
-from devil.android.tools import script_common
-from devil.utils import cmd_helper
-from devil.utils import parallelizer
-from devil.utils import run_tests_helper
-
-logger = logging.getLogger(__name__)
-
-
-def RemoveSystemApps(device, package_names):
-  """Removes the given system apps.
-
-  Args:
-    device: (device_utils.DeviceUtils) the device for which the given
-      system app should be removed.
-    package_name: (iterable of strs) the names of the packages to remove.
-  """
-  system_package_paths = _FindSystemPackagePaths(device, package_names)
-  if system_package_paths:
-    with EnableSystemAppModification(device):
-      device.RemovePath(system_package_paths, force=True, recursive=True)
-
-
-@contextlib.contextmanager
-def ReplaceSystemApp(device, package_name, replacement_apk):
-  """A context manager that replaces the given system app while in scope.
-
-  Args:
-    device: (device_utils.DeviceUtils) the device for which the given
-      system app should be replaced.
-    package_name: (str) the name of the package to replace.
-    replacement_apk: (str) the path to the APK to use as a replacement.
-  """
-  storage_dir = device_temp_file.NamedDeviceTemporaryDirectory(device.adb)
-  relocate_app = _RelocateApp(device, package_name, storage_dir.name)
-  install_app = _TemporarilyInstallApp(device, replacement_apk)
-  with storage_dir, relocate_app, install_app:
-    yield
-
-
-def _FindSystemPackagePaths(device, system_package_list):
-  """Finds all system paths for the given packages."""
-  found_paths = []
-  for system_package in system_package_list:
-    found_paths.extend(device.GetApplicationPaths(system_package))
-  return [p for p in found_paths if p.startswith('/system/')]
-
-
-_ENABLE_MODIFICATION_PROP = 'devil.modify_sys_apps'
-
-
-@contextlib.contextmanager
-def EnableSystemAppModification(device):
-  """A context manager that allows system apps to be modified while in scope.
-
-  Args:
-    device: (device_utils.DeviceUtils) the device
-  """
-  if device.GetProp(_ENABLE_MODIFICATION_PROP) == '1':
-    yield
-    return
-
-  device.EnableRoot()
-  if not device.HasRoot():
-    raise device_errors.CommandFailedError(
-        'Failed to enable modification of system apps on non-rooted device',
-        str(device))
-
-  try:
-    # Disable Marshmallow's Verity security feature
-    if device.build_version_sdk >= version_codes.MARSHMALLOW:
-      logger.info('Disabling Verity on %s', device.serial)
-      device.adb.DisableVerity()
-      device.Reboot()
-      device.WaitUntilFullyBooted()
-      device.EnableRoot()
-
-    device.adb.Remount()
-    device.RunShellCommand(['stop'], check_return=True)
-    device.SetProp(_ENABLE_MODIFICATION_PROP, '1')
-    yield
-  finally:
-    device.SetProp(_ENABLE_MODIFICATION_PROP, '0')
-    device.Reboot()
-    device.WaitUntilFullyBooted()
-
-
-@contextlib.contextmanager
-def _RelocateApp(device, package_name, relocate_to):
-  """A context manager that relocates an app while in scope."""
-  relocation_map = {}
-  system_package_paths = _FindSystemPackagePaths(device, [package_name])
-  if system_package_paths:
-    relocation_map = {
-        p: posixpath.join(relocate_to, posixpath.relpath(p, '/'))
-        for p in system_package_paths
-    }
-    relocation_dirs = [
-        posixpath.dirname(d)
-        for _, d in relocation_map.iteritems()
-    ]
-    device.RunShellCommand(['mkdir', '-p'] + relocation_dirs,
-                           check_return=True)
-    _MoveApp(device, relocation_map)
-  else:
-    logger.info('No system package "%s"', package_name)
-
-  try:
-    yield
-  finally:
-    _MoveApp(device, {v: k for k, v in relocation_map.iteritems()})
-
-
-@contextlib.contextmanager
-def _TemporarilyInstallApp(device, apk):
-  """A context manager that installs an app while in scope."""
-  device.adb.Install(apk, reinstall=True)
-  try:
-    yield
-  finally:
-    device.adb.Uninstall(apk_helper.GetPackageName(apk))
-
-
-def _MoveApp(device, relocation_map):
-  """Moves an app according to the provided relocation map.
-
-  Args:
-    device: (device_utils.DeviceUtils)
-    relocation_map: (dict) A dict that maps src to dest
-  """
-  movements = [
-      'mv %s %s' % (k, v)
-      for k, v in relocation_map.iteritems()
-  ]
-  cmd = ' && '.join(movements)
-  with EnableSystemAppModification(device):
-    device.RunShellCommand(cmd, as_root=True, check_return=True, shell=True)
-
-
-def main(raw_args):
-  parser = argparse.ArgumentParser()
-  subparsers = parser.add_subparsers()
-
-  def add_common_arguments(p):
-    script_common.AddDeviceArguments(p)
-    script_common.AddEnvironmentArguments(p)
-    p.add_argument(
-        '-v', '--verbose', action='count', default=0,
-        help='Print more information.')
-    p.add_argument('command', nargs='*')
-
-  @contextlib.contextmanager
-  def remove_system_app(device, args):
-    RemoveSystemApps(device, args.packages)
-    yield
-
-  remove_parser = subparsers.add_parser('remove')
-  remove_parser.add_argument(
-      '--package', dest='packages', nargs='*', required=True,
-      help='The system package(s) to remove.')
-  add_common_arguments(remove_parser)
-  remove_parser.set_defaults(func=remove_system_app)
-
-  @contextlib.contextmanager
-  def replace_system_app(device, args):
-    with ReplaceSystemApp(device, args.package, args.replace_with):
-      yield
-
-  replace_parser = subparsers.add_parser('replace')
-  replace_parser.add_argument(
-      '--package', required=True,
-      help='The system package to replace.')
-  replace_parser.add_argument(
-      '--replace-with', metavar='APK', required=True,
-      help='The APK with which the existing system app should be replaced.')
-  add_common_arguments(replace_parser)
-  replace_parser.set_defaults(func=replace_system_app)
-
-  args = parser.parse_args(raw_args)
-
-  run_tests_helper.SetLogLevel(args.verbose)
-  script_common.InitializeEnvironment(args)
-
-  devices = script_common.GetDevices(args.devices, args.blacklist_file)
-  parallel_devices = parallelizer.SyncParallelizer(
-      [args.func(d, args) for d in devices])
-  with parallel_devices:
-    if args.command:
-      return cmd_helper.Call(args.command)
-    return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/android/tools/system_app_devicetest.py b/systrace/catapult/devil/devil/android/tools/system_app_devicetest.py
deleted file mode 100755
index 0e8afdc..0000000
--- a/systrace/catapult/devil/devil/android/tools/system_app_devicetest.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import os
-import posixpath
-import shutil
-import sys
-import tempfile
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(
-          os.path.dirname(__file__), '..', '..', '..')))
-
-from devil import base_error
-from devil import devil_env
-from devil.android import device_temp_file
-from devil.android import device_test_case
-from devil.android import device_utils
-from devil.android.tools import system_app
-
-logger = logging.getLogger(__name__)
-
-
-class SystemAppDeviceTest(device_test_case.DeviceTestCase):
-
-  PACKAGE = 'com.google.android.webview'
-
-  def setUp(self):
-    super(SystemAppDeviceTest, self).setUp()
-    self._device = device_utils.DeviceUtils(self.serial)
-    self._original_paths = self._device.GetApplicationPaths(self.PACKAGE)
-    self._apk_cache_dir = tempfile.mkdtemp()
-    # Host location -> device location
-    self._cached_apks = {}
-    for o in self._original_paths:
-      h = os.path.join(self._apk_cache_dir, posixpath.basename(o))
-      self._device.PullFile(o, h)
-      self._cached_apks[h] = o
-
-  def tearDown(self):
-    final_paths = self._device.GetApplicationPaths(self.PACKAGE)
-    if self._original_paths != final_paths:
-      try:
-        self._device.Uninstall(self.PACKAGE)
-      except Exception:  # pylint: disable=broad-except
-        pass
-
-      with system_app.EnableSystemAppModification(self._device):
-        for cached_apk, install_path in self._cached_apks.iteritems():
-          try:
-            with device_temp_file.DeviceTempFile(self._device.adb) as tmp:
-              self._device.adb.Push(cached_apk, tmp.name)
-              self._device.RunShellCommand(
-                  ['mv', tmp.name, install_path],
-                  as_root=True, check_return=True)
-          except base_error.BaseError:
-            logger.warning('Failed to reinstall %s',
-                           os.path.basename(cached_apk))
-
-    try:
-      shutil.rmtree(self._apk_cache_dir)
-    except IOError:
-      logger.error('Unable to remove app cache directory.')
-
-    super(SystemAppDeviceTest, self).tearDown()
-
-  def _check_preconditions(self):
-    if not self._original_paths:
-      self.skipTest('%s is not installed on %s' % (
-          self.PACKAGE, str(self._device)))
-    if not any(p.startswith('/system/') for p in self._original_paths):
-      self.skipTest('%s is not installed in a system location on %s' % (
-          self.PACKAGE, str(self._device)))
-
-  def testReplace(self):
-    self._check_preconditions()
-    replacement = devil_env.config.FetchPath(
-        'empty_system_webview', device=self._device)
-    with system_app.ReplaceSystemApp(self._device, self.PACKAGE, replacement):
-      replaced_paths = self._device.GetApplicationPaths(self.PACKAGE)
-      self.assertNotEqual(self._original_paths, replaced_paths)
-    restored_paths = self._device.GetApplicationPaths(self.PACKAGE)
-    self.assertEqual(self._original_paths, restored_paths)
-
-  def testRemove(self):
-    self._check_preconditions()
-    system_app.RemoveSystemApps(self._device, [self.PACKAGE])
-    removed_paths = self._device.GetApplicationPaths(self.PACKAGE)
-    self.assertEqual([], removed_paths)
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/tools/system_app_test.py b/systrace/catapult/devil/devil/android/tools/system_app_test.py
deleted file mode 100644
index f72aa16..0000000
--- a/systrace/catapult/devil/devil/android/tools/system_app_test.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(os.path.abspath(
-      os.path.join(os.path.dirname(__file__), '..', '..', '..')))
-
-from devil import devil_env
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-from devil.android.sdk import version_codes
-from devil.android.tools import system_app
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock
-
-
-class SystemAppTest(unittest.TestCase):
-
-  def testDoubleEnableModification(self):
-    """Ensures that system app modification logic isn't repeated.
-
-    If EnableSystemAppModification uses are nested, inner calls should
-    not need to perform any of the expensive modification logic.
-    """
-    # pylint: disable=no-self-use,protected-access
-    mock_device = mock.Mock(spec=device_utils.DeviceUtils)
-    mock_device.adb = mock.Mock(spec=adb_wrapper.AdbWrapper)
-    type(mock_device).build_version_sdk = mock.PropertyMock(
-        return_value=version_codes.LOLLIPOP)
-
-    system_props = {}
-
-    def dict_setprop(prop_name, value):
-      system_props[prop_name] = value
-
-    def dict_getprop(prop_name):
-      return system_props.get(prop_name, '')
-
-    mock_device.SetProp.side_effect = dict_setprop
-    mock_device.GetProp.side_effect = dict_getprop
-
-    with system_app.EnableSystemAppModification(mock_device):
-      mock_device.EnableRoot.assert_called_once()
-      mock_device.GetProp.assert_called_once_with(
-          system_app._ENABLE_MODIFICATION_PROP)
-      mock_device.SetProp.assert_called_once_with(
-          system_app._ENABLE_MODIFICATION_PROP, '1')
-      mock_device.reset_mock()
-
-      with system_app.EnableSystemAppModification(mock_device):
-        mock_device.EnableRoot.assert_not_called()
-        mock_device.GetProp.assert_called_once_with(
-            system_app._ENABLE_MODIFICATION_PROP)
-        mock_device.SetProp.assert_not_called()
-        mock_device.reset_mock()
-
-    mock_device.SetProp.assert_called_once_with(
-        system_app._ENABLE_MODIFICATION_PROP, '0')
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/android/tools/unlock_bootloader.py b/systrace/catapult/devil/devil/android/tools/unlock_bootloader.py
deleted file mode 100644
index 46fec9d..0000000
--- a/systrace/catapult/devil/devil/android/tools/unlock_bootloader.py
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A script to open the unlock bootloader on-screen prompt on all devices."""
-
-import argparse
-import logging
-import os
-import subprocess
-import sys
-import time
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-
-from devil import devil_env
-from devil.android import device_errors
-from devil.android.sdk import adb_wrapper
-from devil.android.sdk import fastboot
-from devil.android.tools import script_common
-from devil.utils import parallelizer
-
-
-def reboot_into_bootloader(filter_devices):
-  # Reboot all devices into bootloader if they aren't there already.
-  rebooted_devices = set()
-  for d in adb_wrapper.AdbWrapper.Devices(desired_state=None):
-    if filter_devices and str(d) not in filter_devices:
-      continue
-    state = d.GetState()
-    if state == 'device':
-      logging.info('Booting %s to bootloader.', d)
-      try:
-        d.Reboot(to_bootloader=True)
-        rebooted_devices.add(str(d))
-      except (device_errors.AdbCommandFailedError,
-              device_errors.DeviceUnreachableError):
-        logging.exception('Unable to reboot device %s', d)
-    else:
-      logging.error('Unable to reboot device %s: %s', d, state)
-
-  # Wait for the rebooted devices to show up in fastboot.
-  if rebooted_devices:
-    logging.info('Waiting for devices to reboot...')
-    timeout = 60
-    start = time.time()
-    while True:
-      time.sleep(5)
-      fastbooted_devices = set([str(d) for d in fastboot.Fastboot.Devices()])
-      if rebooted_devices <= set(fastbooted_devices):
-        logging.info('All devices in fastboot.')
-        break
-      if time.time() - start > timeout:
-        logging.error('Timed out waiting for %s to reboot.',
-                      rebooted_devices - set(fastbooted_devices))
-        break
-
-
-def unlock_bootloader(d):
-  # Unlock the phones.
-  unlocking_processes = []
-  logging.info('Unlocking %s...', d)
-  # The command to unlock the bootloader could be either of the following
-  # depending on the android version and/or oem. Can't really tell which is
-  # needed, so just try both.
-  # pylint: disable=protected-access
-  cmd_old = [d._fastboot_path.read(), '-s', str(d), 'oem', 'unlock']
-  cmd_new = [d._fastboot_path.read(), '-s', str(d), 'flashing', 'unlock']
-  unlocking_processes.append(
-      subprocess.Popen(
-          cmd_old, stdout=subprocess.PIPE, stderr=subprocess.PIPE))
-  unlocking_processes.append(
-      subprocess.Popen(
-          cmd_new, stdout=subprocess.PIPE, stderr=subprocess.PIPE))
-
-  # Give the unlocking command time to finish and/or open the on-screen prompt.
-  logging.info('Sleeping for 5 seconds...')
-  time.sleep(5)
-
-  leftover_pids = []
-  for p in unlocking_processes:
-    p.poll()
-    rc = p.returncode
-    # If the command succesfully opened the unlock prompt on the screen, the
-    # fastboot command process will hang and wait for a response. We still
-    # need to read its stdout/stderr, so use os.read so that we don't
-    # have to wait for EOF to be written.
-    out = os.read(p.stderr.fileno(), 1024).strip().lower()
-    if not rc:
-      if out == '...' or out == '< waiting for device >':
-        logging.info('Device %s is waiting for confirmation.', d)
-      else:
-        logging.error(
-            'Device %s is hanging, but not waiting for confirmation: %s',
-            d, out)
-      leftover_pids.append(p.pid)
-    else:
-      if 'unknown command' in out:
-        # Of the two unlocking commands, this was likely the wrong one.
-        continue
-      elif 'already unlocked' in out:
-        logging.info('Device %s already unlocked.', d)
-      elif 'unlock is not allowed' in out:
-        logging.error("Device %s is oem locked. Can't unlock bootloader.", d)
-      else:
-        logging.error('Device %s in unknown state: "%s"', d, out)
-    break
-
-  if leftover_pids:
-    logging.warning('Processes %s left over after unlocking.', leftover_pids)
-
-  return 0
-
-
-def main():
-  logging.getLogger().setLevel(logging.INFO)
-
-  parser = argparse.ArgumentParser()
-  script_common.AddDeviceArguments(parser)
-  parser.add_argument('--adb-path',
-                      help='Absolute path to the adb binary to use.')
-  args = parser.parse_args()
-
-  devil_dynamic_config = devil_env.EmptyConfig()
-  if args.adb_path:
-    devil_dynamic_config['dependencies'].update(
-        devil_env.LocalConfigItem(
-            'adb', devil_env.GetPlatform(), args.adb_path))
-  devil_env.config.Initialize(configs=[devil_dynamic_config])
-
-  reboot_into_bootloader(args.devices)
-  devices = [
-      d for d in fastboot.Fastboot.Devices() if not args.devices or
-          str(d) in args.devices]
-  parallel_devices = parallelizer.Parallelizer(devices)
-  parallel_devices.pMap(unlock_bootloader).pGet(None)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/android/tools/video_recorder.py b/systrace/catapult/devil/devil/android/tools/video_recorder.py
deleted file mode 100755
index 0843264..0000000
--- a/systrace/catapult/devil/devil/android/tools/video_recorder.py
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Captures a video from an Android device."""
-
-import argparse
-import logging
-import os
-import threading
-import time
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(os.path.abspath(os.path.join(
-      os.path.dirname(__file__), '..', '..', '..')))
-from devil.android import device_signal
-from devil.android import device_utils
-from devil.android.tools import script_common
-from devil.utils import cmd_helper
-from devil.utils import reraiser_thread
-from devil.utils import timeout_retry
-
-logger = logging.getLogger(__name__)
-
-
-class VideoRecorder(object):
-  """Records a screen capture video from an Android Device (KitKat or newer)."""
-
-  def __init__(self, device, megabits_per_second=4, size=None,
-               rotate=False):
-    """Creates a VideoRecorder instance.
-
-    Args:
-      device: DeviceUtils instance.
-      host_file: Path to the video file to store on the host.
-      megabits_per_second: Video bitrate in megabits per second. Allowed range
-                           from 0.1 to 100 mbps.
-      size: Video frame size tuple (width, height) or None to use the device
-            default.
-      rotate: If True, the video will be rotated 90 degrees.
-    """
-    self._bit_rate = megabits_per_second * 1000 * 1000
-    self._device = device
-    self._device_file = (
-        '%s/screen-recording.mp4' % device.GetExternalStoragePath())
-    self._recorder_thread = None
-    self._rotate = rotate
-    self._size = size
-    self._started = threading.Event()
-
-  def __enter__(self):
-    self.Start()
-
-  def Start(self, timeout=None):
-    """Start recording video."""
-    def screenrecord_started():
-      return bool(self._device.GetPids('screenrecord'))
-
-    if screenrecord_started():
-      raise Exception("Can't run multiple concurrent video captures.")
-
-    self._started.clear()
-    self._recorder_thread = reraiser_thread.ReraiserThread(self._Record)
-    self._recorder_thread.start()
-    timeout_retry.WaitFor(
-        screenrecord_started, wait_period=1, max_tries=timeout)
-    self._started.wait(timeout)
-
-  def _Record(self):
-    cmd = ['screenrecord', '--verbose', '--bit-rate', str(self._bit_rate)]
-    if self._rotate:
-      cmd += ['--rotate']
-    if self._size:
-      cmd += ['--size', '%dx%d' % self._size]
-    cmd += [self._device_file]
-    for line in self._device.adb.IterShell(
-        ' '.join(cmd_helper.SingleQuote(i) for i in cmd), None):
-      if line.startswith('Content area is '):
-        self._started.set()
-
-  def __exit__(self, _exc_type, _exc_value, _traceback):
-    self.Stop()
-
-  def Stop(self):
-    """Stop recording video."""
-    if not self._device.KillAll('screenrecord', signum=device_signal.SIGINT,
-                                quiet=True):
-      logger.warning('Nothing to kill: screenrecord was not running')
-    self._recorder_thread.join()
-
-  def Pull(self, host_file=None):
-    """Pull resulting video file from the device.
-
-    Args:
-      host_file: Path to the video file to store on the host.
-    Returns:
-      Output video file name on the host.
-    """
-    # TODO(jbudorick): Merge filename generation with the logic for doing so in
-    # DeviceUtils.
-    host_file_name = (
-        host_file
-        or 'screen-recording-%s-%s.mp4' % (
-            str(self._device),
-            time.strftime('%Y%m%dT%H%M%S', time.localtime())))
-    host_file_name = os.path.abspath(host_file_name)
-    self._device.PullFile(self._device_file, host_file_name)
-    self._device.RemovePath(self._device_file, force=True)
-    return host_file_name
-
-
-def main():
-  # Parse options.
-  parser = argparse.ArgumentParser(description=__doc__)
-  parser.add_argument('-d', '--device', dest='devices', action='append',
-                      help='Serial number of Android device to use.')
-  parser.add_argument('--blacklist-file', help='Device blacklist JSON file.')
-  parser.add_argument('-f', '--file', metavar='FILE',
-                      help='Save result to file instead of generating a '
-                           'timestamped file name.')
-  parser.add_argument('-v', '--verbose', action='store_true',
-                      help='Verbose logging.')
-  parser.add_argument('-b', '--bitrate', default=4, type=float,
-                      help='Bitrate in megabits/s, from 0.1 to 100 mbps, '
-                           '%(default)d mbps by default.')
-  parser.add_argument('-r', '--rotate', action='store_true',
-                      help='Rotate video by 90 degrees.')
-  parser.add_argument('-s', '--size', metavar='WIDTHxHEIGHT',
-                      help='Frame size to use instead of the device '
-                           'screen size.')
-  parser.add_argument('host_file', nargs='?',
-                      help='File to which the video capture will be written.')
-
-  args = parser.parse_args()
-
-  host_file = args.host_file or args.file
-
-  if args.verbose:
-    logging.getLogger().setLevel(logging.DEBUG)
-
-  size = (tuple(int(i) for i in args.size.split('x'))
-          if args.size
-          else None)
-
-  def record_video(device, stop_recording):
-    recorder = VideoRecorder(
-        device, megabits_per_second=args.bitrate, size=size, rotate=args.rotate)
-    with recorder:
-      stop_recording.wait()
-
-    f = None
-    if host_file:
-      root, ext = os.path.splitext(host_file)
-      f = '%s_%s%s' % (root, str(device), ext)
-    f = recorder.Pull(f)
-    print 'Video written to %s' % os.path.abspath(f)
-
-  parallel_devices = device_utils.DeviceUtils.parallel(
-      script_common.GetDevices(args.devices, args.blacklist_file),
-      async=True)
-  stop_recording = threading.Event()
-  running_recording = parallel_devices.pMap(record_video, stop_recording)
-  print 'Recording. Press Enter to stop.',
-  sys.stdout.flush()
-  raw_input()
-  stop_recording.set()
-
-  running_recording.pGet(None)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/android/tools/wait_for_devices.py b/systrace/catapult/devil/devil/android/tools/wait_for_devices.py
deleted file mode 100755
index bc73335..0000000
--- a/systrace/catapult/devil/devil/android/tools/wait_for_devices.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Waits for the given devices to be available."""
-
-import argparse
-import os
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..', '..')))
-
-from devil.android import device_utils
-from devil.android.tools import script_common
-from devil.utils import run_tests_helper
-
-
-def main(raw_args):
-  parser = argparse.ArgumentParser()
-  parser.add_argument('-v', '--verbose', action='count', help='Log more.')
-  parser.add_argument('-t', '--timeout', default=30, type=int,
-                      help='Seconds to wait for the devices.')
-  parser.add_argument('--adb-path', help='ADB binary to use.')
-  parser.add_argument('device_serials', nargs='*', metavar='SERIAL',
-                      help='Serials of the devices to wait for.')
-
-  args = parser.parse_args(raw_args)
-
-  run_tests_helper.SetLogLevel(args.verbose)
-  script_common.InitializeEnvironment(args)
-
-  devices = device_utils.DeviceUtils.HealthyDevices(
-      device_arg=args.device_serials)
-  parallel_devices = device_utils.DeviceUtils.parallel(devices)
-  parallel_devices.WaitUntilFullyBooted(timeout=args.timeout)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/android/valgrind_tools/__init__.py b/systrace/catapult/devil/devil/android/valgrind_tools/__init__.py
deleted file mode 100644
index 0182d4c..0000000
--- a/systrace/catapult/devil/devil/android/valgrind_tools/__init__.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""
-Classes in this package define additional actions that need to be taken to run a
-test under some kind of runtime error detection tool.
-
-The interface is intended to be used as follows.
-
-1. For tests that simply run a native process (i.e. no activity is spawned):
-
-Call tool.CopyFiles(device).
-Prepend test command line with tool.GetTestWrapper().
-
-2. For tests that spawn an activity:
-
-Call tool.CopyFiles(device).
-Call tool.SetupEnvironment().
-Run the test as usual.
-Call tool.CleanUpEnvironment().
-"""
diff --git a/systrace/catapult/devil/devil/android/valgrind_tools/base_tool.py b/systrace/catapult/devil/devil/android/valgrind_tools/base_tool.py
deleted file mode 100644
index 2e6e9af..0000000
--- a/systrace/catapult/devil/devil/android/valgrind_tools/base_tool.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-class BaseTool(object):
-  """A tool that does nothing."""
-  # pylint: disable=R0201
-
-  def __init__(self):
-    """Does nothing."""
-    pass
-
-  def GetTestWrapper(self):
-    """Returns a string that is to be prepended to the test command line."""
-    return ''
-
-  def GetUtilWrapper(self):
-    """Returns the wrapper name for the utilities.
-
-    Returns:
-       A string that is to be prepended to the command line of utility
-    processes (forwarder, etc.).
-    """
-    return ''
-
-  @classmethod
-  def CopyFiles(cls, device):
-    """Copies tool-specific files to the device, create directories, etc."""
-    pass
-
-  def SetupEnvironment(self):
-    """Sets up the system environment for a test.
-
-    This is a good place to set system properties.
-    """
-    pass
-
-  def CleanUpEnvironment(self):
-    """Cleans up environment."""
-    pass
-
-  def GetTimeoutScale(self):
-    """Returns a multiplier that should be applied to timeout values."""
-    return 1.0
-
-  def NeedsDebugInfo(self):
-    """Whether this tool requires debug info.
-
-    Returns:
-      True if this tool can not work with stripped binaries.
-    """
-    return False
diff --git a/systrace/catapult/devil/devil/base_error.py b/systrace/catapult/devil/devil/base_error.py
deleted file mode 100644
index 4b89661..0000000
--- a/systrace/catapult/devil/devil/base_error.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-class BaseError(Exception):
-  """Base error for all test runner errors."""
-
-  def __init__(self, message, is_infra_error=False):
-    super(BaseError, self).__init__(message)
-    self._is_infra_error = is_infra_error
-
-  def __eq__(self, other):
-    return (self.message == other.message
-            and self.is_infra_error == other.is_infra_error)
-
-  def __ne__(self, other):
-    return not self == other
-
-  @property
-  def is_infra_error(self):
-    """Property to indicate if error was caused by an infrastructure issue."""
-    return self._is_infra_error
-
diff --git a/systrace/catapult/devil/devil/constants/__init__.py b/systrace/catapult/devil/devil/constants/__init__.py
deleted file mode 100644
index 50b23df..0000000
--- a/systrace/catapult/devil/devil/constants/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
diff --git a/systrace/catapult/devil/devil/constants/exit_codes.py b/systrace/catapult/devil/devil/constants/exit_codes.py
deleted file mode 100644
index aaeca4a..0000000
--- a/systrace/catapult/devil/devil/constants/exit_codes.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Common exit codes used by devil."""
-
-ERROR = 1
-INFRA = 87
-WARNING = 88
diff --git a/systrace/catapult/devil/devil/devil_dependencies.json b/systrace/catapult/devil/devil/devil_dependencies.json
deleted file mode 100644
index 6884a36..0000000
--- a/systrace/catapult/devil/devil/devil_dependencies.json
+++ /dev/null
@@ -1,137 +0,0 @@
-{
-  "config_type": "BaseConfig",
-  "dependencies": {
-    "aapt": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "16ba3180141a2489d7ec99b39fd6e3434a9a373f",
-          "download_path": "../bin/deps/linux2/x86_64/bin/aapt"
-        }
-      }
-    },
-    "adb": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "8bd43e3930f6eec643d5dc64cab9e5bb4ddf4909",
-          "download_path": "../bin/deps/linux2/x86_64/bin/adb"
-        }
-      }
-    },
-    "android_build_tools_libc++": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "91cdce1e3bd81b2ac1fd380013896d0e2cdb40a0",
-          "download_path": "../bin/deps/linux2/x86_64/lib/libc++.so"
-        }
-      }
-    },
-    "chromium_commands": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "4e22f641e4757309510e8d9f933f5aa504574ab6",
-          "download_path": "../bin/deps/linux2/x86_64/lib.java/chromium_commands.dex.jar"
-        }
-      }
-    },
-    "dexdump": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "acfb10f7a868baf9bcf446a2d9f8ed6b5d52c3c6",
-          "download_path": "../bin/deps/linux2/x86_64/bin/dexdump"
-        }
-      }
-    },
-    "empty_system_webview": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "android_armeabi-v7a": {
-          "cloud_storage_hash": "220ff3ba1a6c3c81877997e32784ffd008f293a5",
-          "download_path": "../bin/deps/android/armeabi-v7a/apks/EmptySystemWebView.apk"
-        }
-      }
-    },
-    "fastboot": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "db9728166f182800eb9d09e9f036d56e105e8235",
-          "download_path": "../bin/deps/linux2/x86_64/bin/fastboot"
-        }
-      }
-    },
-    "forwarder_device": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "android_arm64-v8a": {
-          "cloud_storage_hash": "f222268d8442979240d1b18de00911a49e548daa",
-          "download_path": "../bin/deps/android/arm64-v8a/bin/forwarder_device"
-        },
-        "android_armeabi-v7a": {
-          "cloud_storage_hash": "c15267bf01c26eb0aea4f61c780bbba460c5c981",
-          "download_path": "../bin/deps/android/armeabi-v7a/bin/forwarder_device"
-        }
-      }
-    },
-    "forwarder_host": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "8fe69994b670f028484eed475dbffc838c8a57f7",
-          "download_path": "../bin/deps/linux2/x86_64/forwarder_host"
-        }
-      }
-    },
-    "md5sum_device": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "android_arm64-v8a": {
-          "cloud_storage_hash": "4e7d2dedd9c6321fdc152b06869e09a3c5817904",
-          "download_path": "../bin/deps/android/arm64-v8a/bin/md5sum_device"
-        },
-        "android_armeabi-v7a": {
-          "cloud_storage_hash": "39fd90af0f8828202b687f7128393759181c5e2e",
-          "download_path": "../bin/deps/android/armeabi-v7a/bin/md5sum_device"
-        },
-        "android_x86": {
-          "cloud_storage_hash": "d5cf42ab5986a69c31c0177b0df499d6bf708df6",
-          "download_path": "../bin/deps/android/x86/bin/md5sum_device"
-        }
-      }
-    },
-    "md5sum_host": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "4db5bd5e9bea8880d8bf2caa59d0efb0acc19f74",
-          "download_path": "../bin/deps/linux2/x86_64/bin/md5sum_host"
-        }
-      }
-    },
-    "split-select": {
-      "cloud_storage_base_folder": "binary_dependencies",
-      "cloud_storage_bucket": "chromium-telemetry",
-      "file_info": {
-        "linux2_x86_64": {
-          "cloud_storage_hash": "abb9753a8d3efeea4144e328933931729e01571c",
-          "download_path": "../bin/deps/linux2/x86_64/bin/split-select"
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/systrace/catapult/devil/devil/devil_env.py b/systrace/catapult/devil/devil/devil_env.py
deleted file mode 100644
index aa4fe1e..0000000
--- a/systrace/catapult/devil/devil/devil_env.py
+++ /dev/null
@@ -1,194 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import json
-import logging
-import os
-import platform
-import sys
-import tempfile
-import threading
-
-CATAPULT_ROOT_PATH = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..', '..'))
-DEPENDENCY_MANAGER_PATH = os.path.join(
-    CATAPULT_ROOT_PATH, 'dependency_manager')
-PYMOCK_PATH = os.path.join(
-    CATAPULT_ROOT_PATH, 'third_party', 'mock')
-
-
-@contextlib.contextmanager
-def SysPath(path):
-  sys.path.append(path)
-  yield
-  if sys.path[-1] != path:
-    sys.path.remove(path)
-  else:
-    sys.path.pop()
-
-with SysPath(DEPENDENCY_MANAGER_PATH):
-  import dependency_manager  # pylint: disable=import-error
-
-_ANDROID_BUILD_TOOLS = {'aapt', 'dexdump', 'split-select'}
-
-_DEVIL_DEFAULT_CONFIG = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), 'devil_dependencies.json'))
-
-_LEGACY_ENVIRONMENT_VARIABLES = {
-  'ADB_PATH': {
-    'dependency_name': 'adb',
-    'platform': 'linux2_x86_64',
-  },
-  'ANDROID_SDK_ROOT': {
-    'dependency_name': 'android_sdk',
-    'platform': 'linux2_x86_64',
-  },
-}
-
-
-def EmptyConfig():
-  return {
-    'config_type': 'BaseConfig',
-    'dependencies': {}
-  }
-
-
-def LocalConfigItem(dependency_name, dependency_platform, dependency_path):
-  if isinstance(dependency_path, basestring):
-    dependency_path = [dependency_path]
-  return {
-    dependency_name: {
-      'file_info': {
-        dependency_platform: {
-          'local_paths': dependency_path
-        },
-      },
-    },
-  }
-
-
-def _GetEnvironmentVariableConfig():
-  env_config = EmptyConfig()
-  path_config = (
-      (os.environ.get(k), v)
-      for k, v in _LEGACY_ENVIRONMENT_VARIABLES.iteritems())
-  path_config = ((p, c) for p, c in path_config if p)
-  for p, c in path_config:
-    env_config['dependencies'].update(
-        LocalConfigItem(c['dependency_name'], c['platform'], p))
-  return env_config
-
-
-class _Environment(object):
-
-  def __init__(self):
-    self._dm_init_lock = threading.Lock()
-    self._dm = None
-    self._logging_init_lock = threading.Lock()
-    self._logging_initialized = False
-
-  def Initialize(self, configs=None, config_files=None):
-    """Initialize devil's environment from configuration files.
-
-    This uses all configurations provided via |configs| and |config_files|
-    to determine the locations of devil's dependencies. Configurations should
-    all take the form described by py_utils.dependency_manager.BaseConfig.
-    If no configurations are provided, a default one will be used if available.
-
-    Args:
-      configs: An optional list of dict configurations.
-      config_files: An optional list of files to load
-    """
-
-    # Make sure we only initialize self._dm once.
-    with self._dm_init_lock:
-      if self._dm is None:
-        if configs is None:
-          configs = []
-
-        env_config = _GetEnvironmentVariableConfig()
-        if env_config:
-          configs.insert(0, env_config)
-        self._InitializeRecursive(
-            configs=configs,
-            config_files=config_files)
-        assert self._dm is not None, 'Failed to create dependency manager.'
-
-  def _InitializeRecursive(self, configs=None, config_files=None):
-    # This recurses through configs to create temporary files for each and
-    # take advantage of context managers to appropriately close those files.
-    # TODO(jbudorick): Remove this recursion if/when dependency_manager
-    # supports loading configurations directly from a dict.
-    if configs:
-      with tempfile.NamedTemporaryFile(delete=False) as next_config_file:
-        try:
-          next_config_file.write(json.dumps(configs[0]))
-          next_config_file.close()
-          self._InitializeRecursive(
-              configs=configs[1:],
-              config_files=[next_config_file.name] + (config_files or []))
-        finally:
-          if os.path.exists(next_config_file.name):
-            os.remove(next_config_file.name)
-    else:
-      config_files = config_files or []
-      if 'DEVIL_ENV_CONFIG' in os.environ:
-        config_files.append(os.environ.get('DEVIL_ENV_CONFIG'))
-      config_files.append(_DEVIL_DEFAULT_CONFIG)
-
-      self._dm = dependency_manager.DependencyManager(
-          [dependency_manager.BaseConfig(c) for c in config_files])
-
-  def InitializeLogging(self, log_level, formatter=None, handler=None):
-    if self._logging_initialized:
-      return
-
-    with self._logging_init_lock:
-      if self._logging_initialized:
-        return
-
-      formatter = formatter or logging.Formatter(
-          '%(threadName)-4s  %(message)s')
-      handler = handler or logging.StreamHandler(sys.stdout)
-      handler.setFormatter(formatter)
-
-      devil_logger = logging.getLogger('devil')
-      devil_logger.setLevel(log_level)
-      devil_logger.propagate = False
-      devil_logger.addHandler(handler)
-
-      import py_utils.cloud_storage
-      lock_logger = py_utils.cloud_storage.logger
-      lock_logger.setLevel(log_level)
-      lock_logger.propagate = False
-      lock_logger.addHandler(handler)
-
-      self._logging_initialized = True
-
-  def FetchPath(self, dependency, arch=None, device=None):
-    if self._dm is None:
-      self.Initialize()
-    if dependency in _ANDROID_BUILD_TOOLS:
-      self.FetchPath('android_build_tools_libc++', arch=arch, device=device)
-    return self._dm.FetchPath(dependency, GetPlatform(arch, device))
-
-  def LocalPath(self, dependency, arch=None, device=None):
-    if self._dm is None:
-      self.Initialize()
-    return self._dm.LocalPath(dependency, GetPlatform(arch, device))
-
-  def PrefetchPaths(self, dependencies=None, arch=None, device=None):
-    return self._dm.PrefetchPaths(
-        GetPlatform(arch, device), dependencies=dependencies)
-
-
-def GetPlatform(arch=None, device=None):
-  if arch or device:
-    return 'android_%s' % (arch or device.product_cpu_abi)
-  return '%s_%s' % (sys.platform, platform.machine())
-
-
-config = _Environment()
-
diff --git a/systrace/catapult/devil/devil/devil_env_test.py b/systrace/catapult/devil/devil/devil_env_test.py
deleted file mode 100755
index e78221a..0000000
--- a/systrace/catapult/devil/devil/devil_env_test.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=protected-access
-
-import logging
-import sys
-import unittest
-
-from devil import devil_env
-
-_sys_path_before = list(sys.path)
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  _sys_path_with_pymock = list(sys.path)
-  import mock  # pylint: disable=import-error
-_sys_path_after = list(sys.path)
-
-
-class DevilEnvTest(unittest.TestCase):
-
-  def testSysPath(self):
-    self.assertEquals(_sys_path_before, _sys_path_after)
-    self.assertEquals(
-        _sys_path_before + [devil_env.PYMOCK_PATH],
-        _sys_path_with_pymock)
-
-  def testGetEnvironmentVariableConfig_configType(self):
-    with mock.patch('os.environ.get',
-                    mock.Mock(side_effect=lambda _env_var: None)):
-      env_config = devil_env._GetEnvironmentVariableConfig()
-    self.assertEquals('BaseConfig', env_config.get('config_type'))
-
-  def testGetEnvironmentVariableConfig_noEnv(self):
-    with mock.patch('os.environ.get',
-                    mock.Mock(side_effect=lambda _env_var: None)):
-      env_config = devil_env._GetEnvironmentVariableConfig()
-    self.assertEquals({}, env_config.get('dependencies'))
-
-  def testGetEnvironmentVariableConfig_adbPath(self):
-    def mock_environment(env_var):
-      return '/my/fake/adb/path' if env_var == 'ADB_PATH' else None
-
-    with mock.patch('os.environ.get',
-                    mock.Mock(side_effect=mock_environment)):
-      env_config = devil_env._GetEnvironmentVariableConfig()
-    self.assertEquals(
-        {
-          'adb': {
-            'file_info': {
-              'linux2_x86_64': {
-                'local_paths': ['/my/fake/adb/path'],
-              },
-            },
-          },
-        },
-        env_config.get('dependencies'))
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/utils/__init__.py b/systrace/catapult/devil/devil/utils/__init__.py
deleted file mode 100644
index ff84988..0000000
--- a/systrace/catapult/devil/devil/utils/__init__.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-def _JoinPath(*path_parts):
-  return os.path.abspath(os.path.join(*path_parts))
-
-
-def _AddDirToPythonPath(*path_parts):
-  path = _JoinPath(*path_parts)
-  if os.path.isdir(path) and path not in sys.path:
-    # Some call sites that use Telemetry assume that sys.path[0] is the
-    # directory containing the script, so we add these extra paths to right
-    # after sys.path[0].
-    sys.path.insert(1, path)
-
-_CATAPULT_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),
-                             os.path.pardir, os.path.pardir, os.path.pardir)
-
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'battor')
diff --git a/systrace/catapult/devil/devil/utils/battor_device_mapping.py b/systrace/catapult/devil/devil/utils/battor_device_mapping.py
deleted file mode 100755
index 8cabb83..0000000
--- a/systrace/catapult/devil/devil/utils/battor_device_mapping.py
+++ /dev/null
@@ -1,309 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-'''
-This script provides tools to map BattOrs to phones.
-
-Phones are identified by the following string:
-
-"Phone serial number" - Serial number of the phone. This can be
-obtained via 'adb devices' or 'usb-devices', and is not expected
-to change for a given phone.
-
-BattOrs are identified by the following two strings:
-
-"BattOr serial number" - Serial number of the BattOr. This can be
-obtained via 'usb-devices', and is not expected to change for
-a given BattOr.
-
-"BattOr path" - The path of the form '/dev/ttyUSB*' that is used
-to communicate with the BattOr (the battor_agent binary takes
-this BattOr path as a parameter). The BattOr path is frequently
-reassigned by the OS, most often when the device is disconnected
-and then reconnected. Thus, the BattOr path cannot be expected
-to be stable.
-
-In a typical application, the user will require the BattOr path
-for the BattOr that is plugged into a given phone. For instance,
-the user will be running tracing on a particular phone, and will
-need to know which BattOr path to use to communicate with the BattOr
-to get the corresponding power trace.
-
-Getting this mapping requires two steps: (1) determining the
-mapping between phone serial numbers and BattOr serial numbers, and
-(2) getting the BattOr path corresponding to a given BattOr serial
-number.
-
-For step (1), we generate a JSON file giving this mapping. This
-JSON file consists of a list of items of the following form:
-[{'phone': <phone serial 1>, 'battor': <battor serial 1>},
-{'phone': <phone serial 2>, 'battor': <battor serial 2>}, ...]
-
-The default way to generate this JSON file is using the function
-GenerateSerialMapFile, which generates a mapping based on assuming
-that the system has two identical USB hubs connected to it, and
-the phone plugged into physical port number 1 on one hub corresponds
-to the BattOr plugged into physical port number 1 on the other hub,
-and similarly with physical port numbers 2, 3, etc. This generates
-the map file based on the structure at the time GenerateSerialMapFile called.
-Note that after the map file is generated, port numbers are no longer used;
-the user could move around the devices in the ports without affecting
-which phone goes with which BattOr. (Thus, if the user wanted to update the
-mapping to match the new port connections, the user would have to
-re-generate this file.)
-
-The script update_mapping.py will do this updating from the command line.
-
-If the user wanted to specify a custom mapping, the user could instead
-create the JSON file manually. (In this case, hubs would not be necessary
-and the physical ports connected would be irrelevant.)
-
-Step (2) is conducted through the function GetBattOrPathFromPhoneSerial,
-which takes a serial number mapping generated via step (1) and a phone
-serial number, then gets the corresponding BattOr serial number from the
-map and determines its BattOr path (e.g. /dev/ttyUSB0). Since BattOr paths
-can change if devices are connected and disconnected (even if connected
-or disconnected via the same port) this function should be called to
-determine the BattOr path every time before connecting to the BattOr.
-
-Note that if there is only one BattOr connected to the system, then
-GetBattOrPathFromPhoneSerial will always return that BattOr and will ignore
-the mapping file. Thus, if the user never has more than one BattOr connected
-to the system, the user will not need to generate mapping files.
-'''
-
-
-import json
-import collections
-
-from battor import battor_error
-from devil.utils import find_usb_devices
-from devil.utils import usb_hubs
-
-
-def GetBattOrList(device_tree_map):
-  return [x for x in find_usb_devices.GetTTYList()
-          if IsBattOr(x, device_tree_map)]
-
-
-def IsBattOr(tty_string, device_tree_map):
-  (bus, device) = find_usb_devices.GetBusDeviceFromTTY(tty_string)
-  node = device_tree_map[bus].FindDeviceNumber(device)
-  return '0403:6001' in node.desc
-
-
-def GetBattOrSerialNumbers(device_tree_map):
-  for x in find_usb_devices.GetTTYList():
-    if IsBattOr(x, device_tree_map):
-      (bus, device) = find_usb_devices.GetBusDeviceFromTTY(x)
-      devnode = device_tree_map[bus].FindDeviceNumber(device)
-      yield devnode.serial
-
-
-def ReadSerialMapFile(filename):
-  """Reads JSON file giving phone-to-battor serial number map.
-
-  Parses a JSON file consisting of a list of items of the following form:
-  [{'phone': <phone serial 1>, 'battor': <battor serial 1>},
-  {'phone': <phone serial 2>, 'battor': <battor serial 2>}, ...]
-
-  indicating which phone serial numbers should be matched with
-  which BattOr serial numbers. Returns dictionary of the form:
-
-  {<phone serial 1>: <BattOr serial 1>,
-   <phone serial 2>: <BattOr serial 2>}
-
-  Args:
-      filename: Name of file to read.
-  """
-  result = {}
-  with open(filename, 'r') as infile:
-    in_dict = json.load(infile)
-  for x in in_dict:
-    result[x['phone']] = x['battor']
-  return result
-
-def WriteSerialMapFile(filename, serial_map):
-  """Writes a map of phone serial numbers to BattOr serial numbers to file.
-
-  Writes a JSON file consisting of a list of items of the following form:
-  [{'phone': <phone serial 1>, 'battor': <battor serial 1>},
-  {'phone': <phone serial 2>, 'battor': <battor serial 2>}, ...]
-
-  indicating which phone serial numbers should be matched with
-  which BattOr serial numbers. Mapping is based on the physical port numbers
-  of the hubs that the BattOrs and phones are connected to.
-
-  Args:
-      filename: Name of file to write.
-      serial_map: Serial map {phone: battor}
-  """
-  result = []
-  for (phone, battor) in serial_map.iteritems():
-    result.append({'phone': phone, 'battor': battor})
-  with open(filename, 'w') as outfile:
-    json.dump(result, outfile)
-
-def GenerateSerialMap(hub_types=None):
-  """Generates a map of phone serial numbers to BattOr serial numbers.
-
-  Generates a dict of:
-  {<phone serial 1>: <battor serial 1>,
-   <phone serial 2>: <battor serial 2>}
-  indicating which phone serial numbers should be matched with
-  which BattOr serial numbers. Mapping is based on the physical port numbers
-  of the hubs that the BattOrs and phones are connected to.
-
-  Args:
-      hub_types: List of hub types to check for. If not specified, checks
-      for all defined hub types. (see usb_hubs.py for details)
-  """
-  if hub_types:
-    hub_types = [usb_hubs.GetHubType(x) for x in hub_types]
-  else:
-    hub_types = usb_hubs.ALL_HUBS
-
-  devtree = find_usb_devices.GetBusNumberToDeviceTreeMap()
-
-  # List of serial numbers in the system that represent BattOrs.
-  battor_serials = list(GetBattOrSerialNumbers(devtree))
-
-  # If there's only one BattOr in the system, then a serial number ma
-  # is not necessary.
-  if len(battor_serials) == 1:
-    return {}
-
-  # List of dictionaries, one for each hub, that maps the physical
-  # port number to the serial number of that hub. For instance, in a 2
-  # hub system, this could return [{1:'ab', 2:'cd'}, {1:'jkl', 2:'xyz'}]
-  # where 'ab' and 'cd' are the phone serial numbers and 'jkl' and 'xyz'
-  # are the BattOr serial numbers.
-  port_to_serial = find_usb_devices.GetAllPhysicalPortToSerialMaps(
-      hub_types, device_tree_map=devtree)
-
-  class serials(object):
-    def __init__(self):
-      self.phone = None
-      self.battor = None
-
-  # Map of {physical port number: [phone serial #, BattOr serial #]. This
-  # map is populated by executing the code below. For instance, in the above
-  # example, after the code below is executed, port_to_devices would equal
-  # {1: ['ab', 'jkl'], 2: ['cd', 'xyz']}
-  port_to_devices = collections.defaultdict(serials)
-  for hub in port_to_serial:
-    for (port, serial) in hub.iteritems():
-      if serial in battor_serials:
-        if port_to_devices[port].battor is not None:
-          raise battor_error.BattOrError('Multiple BattOrs on same port number')
-        else:
-          port_to_devices[port].battor = serial
-      else:
-        if port_to_devices[port].phone is not None:
-          raise battor_error.BattOrError('Multiple phones on same port number')
-        else:
-          port_to_devices[port].phone = serial
-
-  # Turn the port_to_devices map into a map of the form
-  # {phone serial number: BattOr serial number}.
-  result = {}
-  for pair in port_to_devices.values():
-    if pair.phone is None:
-      continue
-    if pair.battor is None:
-      raise battor_error.BattOrError(
-          'Phone detected with no corresponding BattOr')
-    result[pair.phone] = pair.battor
-  return result
-
-def GenerateSerialMapFile(filename, hub_types=None):
-  """Generates a serial map file and writes it."""
-  WriteSerialMapFile(filename, GenerateSerialMap(hub_types))
-
-def _PhoneToPathMap(serial, serial_map, devtree):
-  """Maps phone serial number to TTY path, assuming serial map is provided."""
-  try:
-    battor_serial = serial_map[serial]
-  except KeyError:
-    raise battor_error.BattOrError('Serial number not found in serial map.')
-  for tree in devtree.values():
-    for node in tree.AllNodes():
-      if isinstance(node, find_usb_devices.USBDeviceNode):
-        if node.serial == battor_serial:
-          bus_device_to_tty = find_usb_devices.GetBusDeviceToTTYMap()
-          bus_device = (node.bus_num, node.device_num)
-          try:
-            return bus_device_to_tty[bus_device]
-          except KeyError:
-            raise battor_error.BattOrError(
-                'Device with given serial number not a BattOr '
-                '(does not have TTY path)')
-
-
-def GetBattOrPathFromPhoneSerial(serial, serial_map=None,
-                                 serial_map_file=None):
-  """Gets the TTY path (e.g. '/dev/ttyUSB0')  to communicate with the BattOr.
-
-  (1) If serial_map is given, it is treated as a dictionary mapping
-  phone serial numbers to BattOr serial numbers. This function will get the
-  TTY path for the given BattOr serial number.
-
-  (2) If serial_map_file is given, it is treated as the name of a
-  phone-to-BattOr mapping file (generated with GenerateSerialMapFile)
-  and this will be loaded and used as the dict to map port numbers to
-  BattOr serial numbers.
-
-  You can only give one of serial_map and serial_map_file.
-
-  Args:
-    serial: Serial number of phone connected on the same physical port that
-    the BattOr is connected to.
-    serial_map: Map of phone serial numbers to BattOr serial numbers, given
-    as a dictionary.
-    serial_map_file: Map of phone serial numbers to BattOr serial numbers,
-    given as a file.
-    hub_types: List of hub types to check for. Used only if serial_map_file
-    is None.
-
-  Returns:
-    Device string used to communicate with device.
-
-  Raises:
-    ValueError: If serial number is not given.
-    BattOrError: If BattOr not found or unexpected USB topology.
-  """
-  # If there's only one BattOr connected to the system, just use that one.
-  # This allows for use on, e.g., a developer's workstation with no hubs.
-  devtree = find_usb_devices.GetBusNumberToDeviceTreeMap()
-  all_battors = GetBattOrList(devtree)
-  if len(all_battors) == 1:
-    return '/dev/' + all_battors[0]
-
-  if not serial:
-    raise battor_error.BattOrError(
-        'Two or more BattOrs connected, no serial provided')
-
-  if serial_map and serial_map_file:
-    raise ValueError('Cannot specify both serial_map and serial_map_file')
-
-  if serial_map_file:
-    serial_map = ReadSerialMapFile(serial_map_file)
-
-  tty_string = _PhoneToPathMap(serial, serial_map, devtree)
-
-  if not tty_string:
-    raise battor_error.BattOrError(
-        'No device with given serial number detected.')
-
-  if IsBattOr(tty_string, devtree):
-    return '/dev/' + tty_string
-  else:
-    raise battor_error.BattOrError(
-        'Device with given serial number is not a BattOr.')
-
-if __name__ == '__main__':
-  # Main function for testing purposes
-  print GenerateSerialMap()
diff --git a/systrace/catapult/devil/devil/utils/cmd_helper.py b/systrace/catapult/devil/devil/utils/cmd_helper.py
deleted file mode 100644
index b477c70..0000000
--- a/systrace/catapult/devil/devil/utils/cmd_helper.py
+++ /dev/null
@@ -1,473 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A wrapper for subprocess to make calling shell commands easier."""
-
-import logging
-import os
-import pipes
-import select
-import signal
-import string
-import StringIO
-import subprocess
-import sys
-import time
-
-
-logger = logging.getLogger(__name__)
-
-_SafeShellChars = frozenset(string.ascii_letters + string.digits + '@%_-+=:,./')
-
-
-def SingleQuote(s):
-  """Return an shell-escaped version of the string using single quotes.
-
-  Reliably quote a string which may contain unsafe characters (e.g. space,
-  quote, or other special characters such as '$').
-
-  The returned value can be used in a shell command line as one token that gets
-  to be interpreted literally.
-
-  Args:
-    s: The string to quote.
-
-  Return:
-    The string quoted using single quotes.
-  """
-  return pipes.quote(s)
-
-
-def DoubleQuote(s):
-  """Return an shell-escaped version of the string using double quotes.
-
-  Reliably quote a string which may contain unsafe characters (e.g. space
-  or quote characters), while retaining some shell features such as variable
-  interpolation.
-
-  The returned value can be used in a shell command line as one token that gets
-  to be further interpreted by the shell.
-
-  The set of characters that retain their special meaning may depend on the
-  shell implementation. This set usually includes: '$', '`', '\', '!', '*',
-  and '@'.
-
-  Args:
-    s: The string to quote.
-
-  Return:
-    The string quoted using double quotes.
-  """
-  if not s:
-    return '""'
-  elif all(c in _SafeShellChars for c in s):
-    return s
-  else:
-    return '"' + s.replace('"', '\\"') + '"'
-
-
-def ShrinkToSnippet(cmd_parts, var_name, var_value):
-  """Constructs a shell snippet for a command using a variable to shrink it.
-
-  Takes into account all quoting that needs to happen.
-
-  Args:
-    cmd_parts: A list of command arguments.
-    var_name: The variable that holds var_value.
-    var_value: The string to replace in cmd_parts with $var_name
-
-  Returns:
-    A shell snippet that does not include setting the variable.
-  """
-  def shrink(value):
-    parts = (x and SingleQuote(x) for x in value.split(var_value))
-    with_substitutions = ('"$%s"' % var_name).join(parts)
-    return with_substitutions or "''"
-
-  return ' '.join(shrink(part) for part in cmd_parts)
-
-
-def Popen(args, stdout=None, stderr=None, shell=None, cwd=None, env=None):
-  # preexec_fn isn't supported on windows.
-  if sys.platform == 'win32':
-    close_fds = (stdout is None and stderr is None)
-    preexec_fn = None
-  else:
-    close_fds = True
-    preexec_fn = lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL)
-
-  return subprocess.Popen(
-      args=args, cwd=cwd, stdout=stdout, stderr=stderr,
-      shell=shell, close_fds=close_fds, env=env, preexec_fn=preexec_fn)
-
-
-def Call(args, stdout=None, stderr=None, shell=None, cwd=None, env=None):
-  pipe = Popen(args, stdout=stdout, stderr=stderr, shell=shell, cwd=cwd,
-               env=env)
-  pipe.communicate()
-  return pipe.wait()
-
-
-def RunCmd(args, cwd=None):
-  """Opens a subprocess to execute a program and returns its return value.
-
-  Args:
-    args: A string or a sequence of program arguments. The program to execute is
-      the string or the first item in the args sequence.
-    cwd: If not None, the subprocess's current directory will be changed to
-      |cwd| before it's executed.
-
-  Returns:
-    Return code from the command execution.
-  """
-  logger.info(str(args) + ' ' + (cwd or ''))
-  return Call(args, cwd=cwd)
-
-
-def GetCmdOutput(args, cwd=None, shell=False, env=None):
-  """Open a subprocess to execute a program and returns its output.
-
-  Args:
-    args: A string or a sequence of program arguments. The program to execute is
-      the string or the first item in the args sequence.
-    cwd: If not None, the subprocess's current directory will be changed to
-      |cwd| before it's executed.
-    shell: Whether to execute args as a shell command.
-    env: If not None, a mapping that defines environment variables for the
-      subprocess.
-
-  Returns:
-    Captures and returns the command's stdout.
-    Prints the command's stderr to logger (which defaults to stdout).
-  """
-  (_, output) = GetCmdStatusAndOutput(args, cwd, shell, env)
-  return output
-
-
-def _ValidateAndLogCommand(args, cwd, shell):
-  if isinstance(args, basestring):
-    if not shell:
-      raise Exception('string args must be run with shell=True')
-  else:
-    if shell:
-      raise Exception('array args must be run with shell=False')
-    args = ' '.join(SingleQuote(c) for c in args)
-  if cwd is None:
-    cwd = ''
-  else:
-    cwd = ':' + cwd
-  logger.info('[host]%s> %s', cwd, args)
-  return args
-
-
-def GetCmdStatusAndOutput(args, cwd=None, shell=False, env=None):
-  """Executes a subprocess and returns its exit code and output.
-
-  Args:
-    args: A string or a sequence of program arguments. The program to execute is
-      the string or the first item in the args sequence.
-    cwd: If not None, the subprocess's current directory will be changed to
-      |cwd| before it's executed.
-    shell: Whether to execute args as a shell command. Must be True if args
-      is a string and False if args is a sequence.
-    env: If not None, a mapping that defines environment variables for the
-      subprocess.
-
-  Returns:
-    The 2-tuple (exit code, stdout).
-  """
-  status, stdout, stderr = GetCmdStatusOutputAndError(
-      args, cwd=cwd, shell=shell, env=env)
-
-  if stderr:
-    logger.critical('STDERR: %s', stderr)
-  logger.debug('STDOUT: %s%s', stdout[:4096].rstrip(),
-               '<truncated>' if len(stdout) > 4096 else '')
-  return (status, stdout)
-
-
-def GetCmdStatusOutputAndError(args, cwd=None, shell=False, env=None):
-  """Executes a subprocess and returns its exit code, output, and errors.
-
-  Args:
-    args: A string or a sequence of program arguments. The program to execute is
-      the string or the first item in the args sequence.
-    cwd: If not None, the subprocess's current directory will be changed to
-      |cwd| before it's executed.
-    shell: Whether to execute args as a shell command. Must be True if args
-      is a string and False if args is a sequence.
-    env: If not None, a mapping that defines environment variables for the
-      subprocess.
-
-  Returns:
-    The 3-tuple (exit code, stdout, stderr).
-  """
-  _ValidateAndLogCommand(args, cwd, shell)
-  pipe = Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
-               shell=shell, cwd=cwd, env=env)
-  stdout, stderr = pipe.communicate()
-  return (pipe.returncode, stdout, stderr)
-
-
-class TimeoutError(Exception):
-  """Module-specific timeout exception."""
-
-  def __init__(self, output=None):
-    super(TimeoutError, self).__init__()
-    self._output = output
-
-  @property
-  def output(self):
-    return self._output
-
-
-def _IterProcessStdoutFcntl(
-    process, iter_timeout=None, timeout=None, buffer_size=4096,
-    poll_interval=1):
-  """An fcntl-based implementation of _IterProcessStdout."""
-  import fcntl
-  try:
-    # Enable non-blocking reads from the child's stdout.
-    child_fd = process.stdout.fileno()
-    fl = fcntl.fcntl(child_fd, fcntl.F_GETFL)
-    fcntl.fcntl(child_fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
-
-    end_time = (time.time() + timeout) if timeout else None
-    iter_end_time = (time.time() + iter_timeout) if iter_timeout else None
-
-    while True:
-      if end_time and time.time() > end_time:
-        raise TimeoutError()
-      if iter_end_time and time.time() > iter_end_time:
-        yield None
-        iter_end_time = time.time() + iter_timeout
-
-      if iter_end_time:
-        iter_aware_poll_interval = min(
-            poll_interval,
-            max(0, iter_end_time - time.time()))
-      else:
-        iter_aware_poll_interval = poll_interval
-
-      read_fds, _, _ = select.select(
-          [child_fd], [], [], iter_aware_poll_interval)
-      if child_fd in read_fds:
-        data = os.read(child_fd, buffer_size)
-        if not data:
-          break
-        yield data
-
-      if process.poll() is not None:
-        # If process is closed, keep checking for output data (because of timing
-        # issues).
-        while True:
-          read_fds, _, _ = select.select(
-              [child_fd], [], [], iter_aware_poll_interval)
-          if child_fd in read_fds:
-            data = os.read(child_fd, buffer_size)
-            if data:
-              yield data
-              continue
-          break
-        break
-  finally:
-    try:
-      if process.returncode is None:
-        # Make sure the process doesn't stick around if we fail with an
-        # exception.
-        process.kill()
-    except OSError:
-      pass
-    process.wait()
-
-
-def _IterProcessStdoutQueue(
-    process, iter_timeout=None, timeout=None, buffer_size=4096,
-    poll_interval=1):
-  """A Queue.Queue-based implementation of _IterProcessStdout.
-
-  TODO(jbudorick): Evaluate whether this is a suitable replacement for
-  _IterProcessStdoutFcntl on all platforms.
-  """
-  # pylint: disable=unused-argument
-  import Queue
-  import threading
-
-  stdout_queue = Queue.Queue()
-
-  def read_process_stdout():
-    # TODO(jbudorick): Pick an appropriate read size here.
-    while True:
-      try:
-        output_chunk = os.read(process.stdout.fileno(), buffer_size)
-      except IOError:
-        break
-      stdout_queue.put(output_chunk, True)
-      if not output_chunk and process.poll() is not None:
-        break
-
-  reader_thread = threading.Thread(target=read_process_stdout)
-  reader_thread.start()
-
-  end_time = (time.time() + timeout) if timeout else None
-
-  try:
-    while True:
-      if end_time and time.time() > end_time:
-        raise TimeoutError()
-      try:
-        s = stdout_queue.get(True, iter_timeout)
-        if not s:
-          break
-        yield s
-      except Queue.Empty:
-        yield None
-  finally:
-    try:
-      if process.returncode is None:
-        # Make sure the process doesn't stick around if we fail with an
-        # exception.
-        process.kill()
-    except OSError:
-      pass
-    process.wait()
-    reader_thread.join()
-
-
-_IterProcessStdout = (
-    _IterProcessStdoutQueue
-    if sys.platform == 'win32'
-    else _IterProcessStdoutFcntl)
-"""Iterate over a process's stdout.
-
-This is intentionally not public.
-
-Args:
-  process: The process in question.
-  iter_timeout: An optional length of time, in seconds, to wait in
-    between each iteration. If no output is received in the given
-    time, this generator will yield None.
-  timeout: An optional length of time, in seconds, during which
-    the process must finish. If it fails to do so, a TimeoutError
-    will be raised.
-  buffer_size: The maximum number of bytes to read (and thus yield) at once.
-  poll_interval: The length of time to wait in calls to `select.select`.
-    If iter_timeout is set, the remaining length of time in the iteration
-    may take precedence.
-Raises:
-  TimeoutError: if timeout is set and the process does not complete.
-Yields:
-  basestrings of data or None.
-"""
-
-
-def GetCmdStatusAndOutputWithTimeout(args, timeout, cwd=None, shell=False,
-                                     logfile=None, env=None):
-  """Executes a subprocess with a timeout.
-
-  Args:
-    args: List of arguments to the program, the program to execute is the first
-      element.
-    timeout: the timeout in seconds or None to wait forever.
-    cwd: If not None, the subprocess's current directory will be changed to
-      |cwd| before it's executed.
-    shell: Whether to execute args as a shell command. Must be True if args
-      is a string and False if args is a sequence.
-    logfile: Optional file-like object that will receive output from the
-      command as it is running.
-    env: If not None, a mapping that defines environment variables for the
-      subprocess.
-
-  Returns:
-    The 2-tuple (exit code, output).
-  Raises:
-    TimeoutError on timeout.
-  """
-  _ValidateAndLogCommand(args, cwd, shell)
-  output = StringIO.StringIO()
-  process = Popen(args, cwd=cwd, shell=shell, stdout=subprocess.PIPE,
-                  stderr=subprocess.STDOUT, env=env)
-  try:
-    for data in _IterProcessStdout(process, timeout=timeout):
-      if logfile:
-        logfile.write(data)
-      output.write(data)
-  except TimeoutError:
-    raise TimeoutError(output.getvalue())
-
-  str_output = output.getvalue()
-  logger.debug('STDOUT+STDERR: %s%s', str_output[:4096].rstrip(),
-               '<truncated>' if len(str_output) > 4096 else '')
-  return process.returncode, str_output
-
-
-def IterCmdOutputLines(args, iter_timeout=None, timeout=None, cwd=None,
-                       shell=False, env=None, check_status=True):
-  """Executes a subprocess and continuously yields lines from its output.
-
-  Args:
-    args: List of arguments to the program, the program to execute is the first
-      element.
-    iter_timeout: Timeout for each iteration, in seconds.
-    timeout: Timeout for the entire command, in seconds.
-    cwd: If not None, the subprocess's current directory will be changed to
-      |cwd| before it's executed.
-    shell: Whether to execute args as a shell command. Must be True if args
-      is a string and False if args is a sequence.
-    env: If not None, a mapping that defines environment variables for the
-      subprocess.
-    check_status: A boolean indicating whether to check the exit status of the
-      process after all output has been read.
-  Yields:
-    The output of the subprocess, line by line.
-
-  Raises:
-    CalledProcessError if check_status is True and the process exited with a
-      non-zero exit status.
-  """
-  cmd = _ValidateAndLogCommand(args, cwd, shell)
-  process = Popen(args, cwd=cwd, shell=shell, env=env,
-                  stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
-  return _IterCmdOutputLines(
-      process, cmd, iter_timeout=iter_timeout, timeout=timeout,
-      check_status=check_status)
-
-def _IterCmdOutputLines(process, cmd, iter_timeout=None, timeout=None,
-                        check_status=True):
-  buffer_output = ''
-
-  iter_end = None
-  cur_iter_timeout = None
-  if iter_timeout:
-    iter_end = time.time() + iter_timeout
-    cur_iter_timeout = iter_timeout
-
-  for data in _IterProcessStdout(process, iter_timeout=cur_iter_timeout,
-                                 timeout=timeout):
-    if iter_timeout:
-      # Check whether the current iteration has timed out.
-      cur_iter_timeout = iter_end - time.time()
-      if data is None or cur_iter_timeout < 0:
-        yield None
-        iter_end = time.time() + iter_timeout
-        continue
-    else:
-      assert data is not None, (
-          'Iteration received no data despite no iter_timeout being set. '
-          'cmd: %s' % cmd)
-
-    # Construct lines to yield from raw data.
-    buffer_output += data
-    has_incomplete_line = buffer_output[-1] not in '\r\n'
-    lines = buffer_output.splitlines()
-    buffer_output = lines.pop() if has_incomplete_line else ''
-    for line in lines:
-      yield line
-      if iter_timeout:
-        iter_end = time.time() + iter_timeout
-
-  if buffer_output:
-    yield buffer_output
-  if check_status and process.returncode:
-    raise subprocess.CalledProcessError(process.returncode, cmd)
diff --git a/systrace/catapult/devil/devil/utils/cmd_helper_test.py b/systrace/catapult/devil/devil/utils/cmd_helper_test.py
deleted file mode 100755
index 6a8e881..0000000
--- a/systrace/catapult/devil/devil/utils/cmd_helper_test.py
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tests for the cmd_helper module."""
-
-import unittest
-import subprocess
-import sys
-import time
-
-from devil import devil_env
-from devil.utils import cmd_helper
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-class CmdHelperSingleQuoteTest(unittest.TestCase):
-
-  def testSingleQuote_basic(self):
-    self.assertEquals('hello',
-                      cmd_helper.SingleQuote('hello'))
-
-  def testSingleQuote_withSpaces(self):
-    self.assertEquals("'hello world'",
-                      cmd_helper.SingleQuote('hello world'))
-
-  def testSingleQuote_withUnsafeChars(self):
-    self.assertEquals("""'hello'"'"'; rm -rf /'""",
-                      cmd_helper.SingleQuote("hello'; rm -rf /"))
-
-  def testSingleQuote_dontExpand(self):
-    test_string = 'hello $TEST_VAR'
-    cmd = 'TEST_VAR=world; echo %s' % cmd_helper.SingleQuote(test_string)
-    self.assertEquals(test_string,
-                      cmd_helper.GetCmdOutput(cmd, shell=True).rstrip())
-
-
-class CmdHelperDoubleQuoteTest(unittest.TestCase):
-
-  def testDoubleQuote_basic(self):
-    self.assertEquals('hello',
-                      cmd_helper.DoubleQuote('hello'))
-
-  def testDoubleQuote_withSpaces(self):
-    self.assertEquals('"hello world"',
-                      cmd_helper.DoubleQuote('hello world'))
-
-  def testDoubleQuote_withUnsafeChars(self):
-    self.assertEquals('''"hello\\"; rm -rf /"''',
-                      cmd_helper.DoubleQuote('hello"; rm -rf /'))
-
-  def testSingleQuote_doExpand(self):
-    test_string = 'hello $TEST_VAR'
-    cmd = 'TEST_VAR=world; echo %s' % cmd_helper.DoubleQuote(test_string)
-    self.assertEquals('hello world',
-                      cmd_helper.GetCmdOutput(cmd, shell=True).rstrip())
-
-
-class CmdHelperShinkToSnippetTest(unittest.TestCase):
-
-  def testShrinkToSnippet_noArgs(self):
-    self.assertEquals('foo',
-        cmd_helper.ShrinkToSnippet(['foo'], 'a', 'bar'))
-    self.assertEquals("'foo foo'",
-        cmd_helper.ShrinkToSnippet(['foo foo'], 'a', 'bar'))
-    self.assertEquals('"$a"\' bar\'',
-        cmd_helper.ShrinkToSnippet(['foo bar'], 'a', 'foo'))
-    self.assertEquals('\'foo \'"$a"',
-        cmd_helper.ShrinkToSnippet(['foo bar'], 'a', 'bar'))
-    self.assertEquals('foo"$a"',
-        cmd_helper.ShrinkToSnippet(['foobar'], 'a', 'bar'))
-
-  def testShrinkToSnippet_singleArg(self):
-    self.assertEquals("foo ''",
-        cmd_helper.ShrinkToSnippet(['foo', ''], 'a', 'bar'))
-    self.assertEquals("foo foo",
-        cmd_helper.ShrinkToSnippet(['foo', 'foo'], 'a', 'bar'))
-    self.assertEquals('"$a" "$a"',
-        cmd_helper.ShrinkToSnippet(['foo', 'foo'], 'a', 'foo'))
-    self.assertEquals('foo "$a""$a"',
-        cmd_helper.ShrinkToSnippet(['foo', 'barbar'], 'a', 'bar'))
-    self.assertEquals('foo "$a"\' \'"$a"',
-        cmd_helper.ShrinkToSnippet(['foo', 'bar bar'], 'a', 'bar'))
-    self.assertEquals('foo "$a""$a"\' \'',
-        cmd_helper.ShrinkToSnippet(['foo', 'barbar '], 'a', 'bar'))
-    self.assertEquals('foo \' \'"$a""$a"\' \'',
-        cmd_helper.ShrinkToSnippet(['foo', ' barbar '], 'a', 'bar'))
-
-
-_DEFAULT = 'DEFAULT'
-
-
-class _ProcessOutputEvent(object):
-
-  def __init__(self, select_fds=_DEFAULT, read_contents=None, ts=_DEFAULT):
-    self.select_fds = select_fds
-    self.read_contents = read_contents
-    self.ts = ts
-
-
-class _MockProcess(object):
-
-  def __init__(self, output_sequence=None, return_value=0):
-
-    # Arbitrary.
-    fake_stdout_fileno = 25
-
-    self.mock_proc = mock.MagicMock(spec=subprocess.Popen)
-    self.mock_proc.stdout = mock.MagicMock()
-    self.mock_proc.stdout.fileno = mock.MagicMock(
-        return_value=fake_stdout_fileno)
-    self.mock_proc.returncode = None
-
-    self._return_value = return_value
-
-    # This links the behavior of os.read, select.select, time.time, and
-    # <process>.poll. The output sequence can be thought of as a list of
-    # return values for select.select with corresponding return values for
-    # the other calls at any time between that select call and the following
-    # one. We iterate through the sequence only on calls to select.select.
-    #
-    # os.read is a special case, though, where we only return a given chunk
-    # of data *once* after a given call to select.
-
-    if not output_sequence:
-      output_sequence = []
-
-    # Use an leading element to make the iteration logic work.
-    initial_seq_element = _ProcessOutputEvent(
-        _DEFAULT, '',
-        output_sequence[0].ts if output_sequence else _DEFAULT)
-    output_sequence.insert(0, initial_seq_element)
-
-    for o in output_sequence:
-      if o.select_fds == _DEFAULT:
-        if o.read_contents is None:
-          o.select_fds = []
-        else:
-          o.select_fds = [fake_stdout_fileno]
-      if o.ts == _DEFAULT:
-        o.ts = time.time()
-    self._output_sequence = output_sequence
-
-    self._output_seq_index = 0
-    self._read_flags = [False] * len(output_sequence)
-
-    def read_side_effect(*_args, **_kwargs):
-      if self._read_flags[self._output_seq_index]:
-        return None
-      self._read_flags[self._output_seq_index] = True
-      return self._output_sequence[self._output_seq_index].read_contents
-
-    def select_side_effect(*_args, **_kwargs):
-      if self._output_seq_index is None:
-        self._output_seq_index = 0
-      else:
-        self._output_seq_index += 1
-      if self._output_seq_index < len(self._output_sequence):
-        return (self._output_sequence[self._output_seq_index].select_fds,
-                None, None)
-      else:
-        return([], None, None)
-
-    def time_side_effect(*_args, **_kwargs):
-      return self._output_sequence[self._output_seq_index].ts
-
-    def poll_side_effect(*_args, **_kwargs):
-      if self._output_seq_index >= len(self._output_sequence) - 1:
-        self.mock_proc.returncode = self._return_value
-      return self.mock_proc.returncode
-
-    mock_read = mock.MagicMock(side_effect=read_side_effect)
-    mock_select = mock.MagicMock(side_effect=select_side_effect)
-    mock_time = mock.MagicMock(side_effect=time_side_effect)
-    self.mock_proc.poll = mock.MagicMock(side_effect=poll_side_effect)
-
-    # Set up but *do not start* the mocks.
-    self._mocks = [
-      mock.patch('os.read', new=mock_read),
-      mock.patch('select.select', new=mock_select),
-      mock.patch('time.time', new=mock_time),
-    ]
-    if sys.platform != 'win32':
-      self._mocks.append(mock.patch('fcntl.fcntl'))
-
-  def __enter__(self):
-    for m in self._mocks:
-      m.__enter__()
-    return self.mock_proc
-
-  def __exit__(self, exc_type, exc_val, exc_tb):
-    for m in reversed(self._mocks):
-      m.__exit__(exc_type, exc_val, exc_tb)
-
-
-class CmdHelperIterCmdOutputLinesTest(unittest.TestCase):
-  """Test IterCmdOutputLines with some calls to the unix 'seq' command."""
-
-  # This calls _IterCmdOutputLines rather than IterCmdOutputLines s.t. it
-  # can mock the process.
-  # pylint: disable=protected-access
-
-  _SIMPLE_OUTPUT_SEQUENCE = [
-    _ProcessOutputEvent(read_contents='1\n2\n'),
-  ]
-
-  def testIterCmdOutputLines_success(self):
-    with _MockProcess(
-        output_sequence=self._SIMPLE_OUTPUT_SEQUENCE) as mock_proc:
-      for num, line in enumerate(
-          cmd_helper._IterCmdOutputLines(mock_proc, 'mock_proc'), 1):
-        self.assertEquals(num, int(line))
-
-  def testIterCmdOutputLines_exitStatusFail(self):
-    with self.assertRaises(subprocess.CalledProcessError):
-      with _MockProcess(output_sequence=self._SIMPLE_OUTPUT_SEQUENCE,
-                        return_value=1) as mock_proc:
-        for num, line in enumerate(
-            cmd_helper._IterCmdOutputLines(mock_proc, 'mock_proc'), 1):
-          self.assertEquals(num, int(line))
-        # after reading all the output we get an exit status of 1
-
-  def testIterCmdOutputLines_exitStatusIgnored(self):
-    with _MockProcess(output_sequence=self._SIMPLE_OUTPUT_SEQUENCE,
-                      return_value=1) as mock_proc:
-      for num, line in enumerate(
-          cmd_helper._IterCmdOutputLines(
-              mock_proc, 'mock_proc', check_status=False),
-          1):
-        self.assertEquals(num, int(line))
-
-  def testIterCmdOutputLines_exitStatusSkipped(self):
-    with _MockProcess(output_sequence=self._SIMPLE_OUTPUT_SEQUENCE,
-                      return_value=1) as mock_proc:
-      for num, line in enumerate(
-          cmd_helper._IterCmdOutputLines(mock_proc, 'mock_proc'), 1):
-        self.assertEquals(num, int(line))
-        # no exception will be raised because we don't attempt to read past
-        # the end of the output and, thus, the status never gets checked
-        if num == 2:
-          break
-
-  def testIterCmdOutputLines_delay(self):
-    output_sequence = [
-      _ProcessOutputEvent(read_contents='1\n2\n', ts=1),
-      _ProcessOutputEvent(read_contents=None, ts=2),
-      _ProcessOutputEvent(read_contents='Awake', ts=10),
-    ]
-    with _MockProcess(output_sequence=output_sequence) as mock_proc:
-      for num, line in enumerate(
-          cmd_helper._IterCmdOutputLines(mock_proc, 'mock_proc',
-                                         iter_timeout=5), 1):
-        if num <= 2:
-          self.assertEquals(num, int(line))
-        elif num == 3:
-          self.assertEquals(None, line)
-        elif num == 4:
-          self.assertEquals('Awake', line)
-        else:
-          self.fail()
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/utils/file_utils.py b/systrace/catapult/devil/devil/utils/file_utils.py
deleted file mode 100644
index dc5a9ef..0000000
--- a/systrace/catapult/devil/devil/utils/file_utils.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-
-
-def MergeFiles(dest_file, source_files):
-  """Merge list of files into single destination file.
-
-  Args:
-    dest_file: File to be written to.
-    source_files: List of files to be merged. Will be merged in the order they
-        appear in the list.
-  """
-  if not os.path.exists(os.path.dirname(dest_file)):
-    os.makedirs(os.path.dirname(dest_file))
-  try:
-    with open(dest_file, 'w') as dest_f:
-      for source_file in source_files:
-        with open(source_file, 'r') as source_f:
-          dest_f.write(source_f.read())
-  except Exception as e:  # pylint: disable=broad-except
-    # Something went wrong when creating dest_file. Cleaning up.
-    try:
-      os.remove(dest_file)
-    except OSError:
-      pass
-    raise e
-
-
diff --git a/systrace/catapult/devil/devil/utils/find_usb_devices.py b/systrace/catapult/devil/devil/utils/find_usb_devices.py
deleted file mode 100755
index 74b888d..0000000
--- a/systrace/catapult/devil/devil/utils/find_usb_devices.py
+++ /dev/null
@@ -1,546 +0,0 @@
-#!/usr/bin/python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import logging
-import os
-import re
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..')))
-
-from devil.utils import cmd_helper
-from devil.utils import usb_hubs
-from devil.utils import lsusb
-
-logger = logging.getLogger(__name__)
-
-# Note: In the documentation below, "virtual port" refers to the port number
-# as observed by the system (e.g. by usb-devices) and "physical port" refers
-# to the physical numerical label on the physical port e.g. on a USB hub.
-# The mapping between virtual and physical ports is not always the identity
-# (e.g. the port labeled "1" on a USB hub does not always show up as "port 1"
-# when you plug something into it) but, as far as we are aware, the mapping
-# between virtual and physical ports is always the same for a given
-# model of USB hub. When "port number" is referenced without specifying, it
-# means the virtual port number.
-
-
-# Wrapper functions for system commands to get output. These are in wrapper
-# functions so that they can be more easily mocked-out for tests.
-def _GetParsedLSUSBOutput():
-  return lsusb.lsusb()
-
-
-def _GetUSBDevicesOutput():
-  return cmd_helper.GetCmdOutput(['usb-devices'])
-
-
-def _GetTtyUSBInfo(tty_string):
-  cmd = ['udevadm', 'info', '--name=/dev/' + tty_string, '--attribute-walk']
-  return cmd_helper.GetCmdOutput(cmd)
-
-
-def _GetCommList():
-  return cmd_helper.GetCmdOutput('ls /dev', shell=True)
-
-
-def GetTTYList():
-  return [x for x in _GetCommList().splitlines() if 'ttyUSB' in x]
-
-
-# Class to identify nodes in the USB topology. USB topology is organized as
-# a tree.
-class USBNode(object):
-  def __init__(self):
-    self._port_to_node = {}
-
-  @property
-  def desc(self):
-    raise NotImplementedError
-
-  @property
-  def info(self):
-    raise NotImplementedError
-
-  @property
-  def device_num(self):
-    raise NotImplementedError
-
-  @property
-  def bus_num(self):
-    raise NotImplementedError
-
-  def HasPort(self, port):
-    """Determines if this device has a device connected to the given port."""
-    return port in self._port_to_node
-
-  def PortToDevice(self, port):
-    """Gets the device connected to the given port on this device."""
-    return self._port_to_node[port]
-
-  def Display(self, port_chain='', info=False):
-    """Displays information about this node and its descendants.
-
-    Output format is, e.g. 1:3:3:Device 42 (ID 1234:5678 Some Device)
-    meaning that from the bus, if you look at the device connected
-    to port 1, then the device connected to port 3 of that,
-    then the device connected to port 3 of that, you get the device
-    assigned device number 42, which is Some Device. Note that device
-    numbers will be reassigned whenever a connected device is powercycled
-    or reinserted, but port numbers stay the same as long as the device
-    is reinserted back into the same physical port.
-
-    Args:
-      port_chain: [string] Chain of ports from bus to this node (e.g. '2:4:')
-      info: [bool] Whether to display detailed info as well.
-    """
-    raise NotImplementedError
-
-  def AddChild(self, port, device):
-    """Adds child to the device tree.
-
-    Args:
-      port: [int] Port number of the device.
-      device: [USBDeviceNode] Device to add.
-
-    Raises:
-      ValueError: If device already has a child at the given port.
-    """
-    if self.HasPort(port):
-      raise ValueError('Duplicate port number')
-    else:
-      self._port_to_node[port] = device
-
-  def AllNodes(self):
-    """Generator that yields this node and all of its descendants.
-
-    Yields:
-      [USBNode] First this node, then each of its descendants (recursively)
-    """
-    yield self
-    for child_node in self._port_to_node.values():
-      for descendant_node in child_node.AllNodes():
-        yield descendant_node
-
-  def FindDeviceNumber(self, findnum):
-    """Find device with given number in tree
-
-    Searches the portion of the device tree rooted at this node for
-    a device with the given device number.
-
-    Args:
-      findnum: [int] Device number to search for.
-
-    Returns:
-      [USBDeviceNode] Node that is found.
-    """
-    for node in self.AllNodes():
-      if node.device_num == findnum:
-        return node
-    return None
-
-
-class USBDeviceNode(USBNode):
-  def __init__(self, bus_num=0, device_num=0, serial=None, info=None):
-    """Class that represents a device in USB tree.
-
-    Args:
-      bus_num: [int] Bus number that this node is attached to.
-      device_num: [int] Device number of this device (or 0, if this is a bus)
-      serial: [string] Serial number.
-      info: [dict] Map giving detailed device info.
-    """
-    super(USBDeviceNode, self).__init__()
-    self._bus_num = bus_num
-    self._device_num = device_num
-    self._serial = serial
-    self._info = {} if info is None else info
-
-  #override
-  @property
-  def desc(self):
-    return self._info.get('desc')
-
-  #override
-  @property
-  def info(self):
-    return self._info
-
-  #override
-  @property
-  def device_num(self):
-    return self._device_num
-
-  #override
-  @property
-  def bus_num(self):
-    return self._bus_num
-
-  @property
-  def serial(self):
-    return self._serial
-
-  @serial.setter
-  def serial(self, serial):
-    self._serial = serial
-
-  #override
-  def Display(self, port_chain='', info=False):
-    logger.info('%s Device %d (%s)', port_chain, self.device_num, self.desc)
-    if info:
-      logger.info('%s', self.info)
-    for (port, device) in self._port_to_node.iteritems():
-      device.Display('%s%d:' % (port_chain, port), info=info)
-
-
-class USBBusNode(USBNode):
-  def __init__(self, bus_num=0):
-    """Class that represents a node (either a bus or device) in USB tree.
-
-    Args:
-      is_bus: [bool] If true, node is bus; if not, node is device.
-      bus_num: [int] Bus number that this node is attached to.
-      device_num: [int] Device number of this device (or 0, if this is a bus)
-      desc: [string] Short description of device.
-      serial: [string] Serial number.
-      info: [dict] Map giving detailed device info.
-      port_to_dev: [dict(int:USBDeviceNode)]
-          Maps port # to device connected to port.
-    """
-    super(USBBusNode, self).__init__()
-    self._bus_num = bus_num
-
-  #override
-  @property
-  def desc(self):
-    return 'BUS %d' % self._bus_num
-
-  #override
-  @property
-  def info(self):
-    return {}
-
-  #override
-  @property
-  def device_num(self):
-    return -1
-
-  #override
-  @property
-  def bus_num(self):
-    return self._bus_num
-
-  #override
-  def Display(self, port_chain='', info=False):
-    logger.info('=== %s ===', self.desc)
-    for (port, device) in self._port_to_node.iteritems():
-      device.Display('%s%d:' % (port_chain, port), info=info)
-
-
-_T_LINE_REGEX = re.compile(r'T:  Bus=(?P<bus>\d{2}) Lev=(?P<lev>\d{2}) '
-                           r'Prnt=(?P<prnt>\d{2,3}) Port=(?P<port>\d{2}) '
-                           r'Cnt=(?P<cnt>\d{2}) Dev#=(?P<dev>.{3}) .*')
-
-_S_LINE_REGEX = re.compile(r'S:  SerialNumber=(?P<serial>.*)')
-_LSUSB_BUS_DEVICE_RE = re.compile(r'^Bus (\d{3}) Device (\d{3}): (.*)')
-
-
-def GetBusNumberToDeviceTreeMap(fast=True):
-  """Gets devices currently attached.
-
-  Args:
-    fast [bool]: whether to do it fast (only get description, not
-    the whole dictionary, from lsusb)
-
-  Returns:
-    map of {bus number: bus object}
-    where the bus object has all the devices attached to it in a tree.
-  """
-  if fast:
-    info_map = {}
-    for line in lsusb.raw_lsusb().splitlines():
-      match = _LSUSB_BUS_DEVICE_RE.match(line)
-      if match:
-        info_map[(int(match.group(1)), int(match.group(2)))] = (
-          {'desc':match.group(3)})
-  else:
-    info_map = {((int(line['bus']), int(line['device']))): line
-                for line in _GetParsedLSUSBOutput()}
-
-
-  tree = {}
-  bus_num = -1
-  for line in _GetUSBDevicesOutput().splitlines():
-    match = _T_LINE_REGEX.match(line)
-    if match:
-      bus_num = int(match.group('bus'))
-      parent_num = int(match.group('prnt'))
-      # usb-devices starts counting ports from 0, so add 1
-      port_num = int(match.group('port')) + 1
-      device_num = int(match.group('dev'))
-
-      # create new bus if necessary
-      if bus_num not in tree:
-        tree[bus_num] = USBBusNode(bus_num=bus_num)
-
-      # create the new device
-      new_device = USBDeviceNode(bus_num=bus_num,
-                                 device_num=device_num,
-                                 info=info_map.get((bus_num, device_num),
-                                                   {'desc': 'NOT AVAILABLE'}))
-
-      # add device to bus
-      if parent_num != 0:
-        tree[bus_num].FindDeviceNumber(parent_num).AddChild(
-            port_num, new_device)
-      else:
-        tree[bus_num].AddChild(port_num, new_device)
-
-    match = _S_LINE_REGEX.match(line)
-    if match:
-      if bus_num == -1:
-        raise ValueError('S line appears before T line in input file')
-      # put the serial number in the device
-      tree[bus_num].FindDeviceNumber(device_num).serial = match.group('serial')
-
-  return tree
-
-
-def GetHubsOnBus(bus, hub_types):
-  """Scans for all hubs on a bus of given hub types.
-
-  Args:
-    bus: [USBNode] Bus object.
-    hub_types: [iterable(usb_hubs.HubType)] Possible types of hubs.
-
-  Yields:
-    Sequence of tuples representing (hub, type of hub)
-  """
-  for device in bus.AllNodes():
-    for hub_type in hub_types:
-      if hub_type.IsType(device):
-        yield (device, hub_type)
-
-
-def GetPhysicalPortToNodeMap(hub, hub_type):
-  """Gets physical-port:node mapping for a given hub.
-  Args:
-    hub: [USBNode] Hub to get map for.
-    hub_type: [usb_hubs.HubType] Which type of hub it is.
-
-  Returns:
-    Dict of {physical port: node}
-  """
-  port_device = hub_type.GetPhysicalPortToNodeTuples(hub)
-  return {port: device for (port, device) in port_device}
-
-
-def GetPhysicalPortToBusDeviceMap(hub, hub_type):
-  """Gets physical-port:(bus#, device#) mapping for a given hub.
-  Args:
-    hub: [USBNode] Hub to get map for.
-    hub_type: [usb_hubs.HubType] Which type of hub it is.
-
-  Returns:
-    Dict of {physical port: (bus number, device number)}
-  """
-  port_device = hub_type.GetPhysicalPortToNodeTuples(hub)
-  return {port: (device.bus_num, device.device_num)
-          for (port, device) in port_device}
-
-
-def GetPhysicalPortToSerialMap(hub, hub_type):
-  """Gets physical-port:serial# mapping for a given hub.
-
-  Args:
-    hub: [USBNode] Hub to get map for.
-    hub_type: [usb_hubs.HubType] Which type of hub it is.
-
-  Returns:
-    Dict of {physical port: serial number)}
-  """
-  port_device = hub_type.GetPhysicalPortToNodeTuples(hub)
-  return {port: device.serial
-          for (port, device) in port_device
-          if device.serial}
-
-
-def GetPhysicalPortToTTYMap(device, hub_type):
-  """Gets physical-port:tty-string mapping for a given hub.
-  Args:
-    hub: [USBNode] Hub to get map for.
-    hub_type: [usb_hubs.HubType] Which type of hub it is.
-
-  Returns:
-    Dict of {physical port: tty-string)}
-  """
-  port_device = hub_type.GetPhysicalPortToNodeTuples(device)
-  bus_device_to_tty = GetBusDeviceToTTYMap()
-  return {port: bus_device_to_tty[(device.bus_num, device.device_num)]
-          for (port, device) in port_device
-          if (device.bus_num, device.device_num) in bus_device_to_tty}
-
-
-def CollectHubMaps(hub_types, map_func, device_tree_map=None, fast=False):
-  """Runs a function on all hubs in the system and collects their output.
-
-  Args:
-    hub_types: [usb_hubs.HubType] List of possible hub types.
-    map_func: [string] Function to run on each hub.
-    device_tree: Previously constructed device tree map, if any.
-    fast: Whether to construct device tree fast, if not already provided
-
-  Yields:
-    Sequence of dicts of {physical port: device} where the type of
-    device depends on the ident keyword. Each dict is a separate hub.
-  """
-  if device_tree_map is None:
-    device_tree_map = GetBusNumberToDeviceTreeMap(fast=fast)
-  for bus in device_tree_map.values():
-    for (hub, hub_type) in GetHubsOnBus(bus, hub_types):
-      yield map_func(hub, hub_type)
-
-
-def GetAllPhysicalPortToNodeMaps(hub_types, **kwargs):
-  return CollectHubMaps(hub_types, GetPhysicalPortToNodeMap, **kwargs)
-
-
-def GetAllPhysicalPortToBusDeviceMaps(hub_types, **kwargs):
-  return CollectHubMaps(hub_types, GetPhysicalPortToBusDeviceMap, **kwargs)
-
-
-def GetAllPhysicalPortToSerialMaps(hub_types, **kwargs):
-  return CollectHubMaps(hub_types, GetPhysicalPortToSerialMap, **kwargs)
-
-
-def GetAllPhysicalPortToTTYMaps(hub_types, **kwargs):
-  return CollectHubMaps(hub_types, GetPhysicalPortToTTYMap, **kwargs)
-
-
-_BUS_NUM_REGEX = re.compile(r'.*ATTRS{busnum}=="(\d*)".*')
-_DEVICE_NUM_REGEX = re.compile(r'.*ATTRS{devnum}=="(\d*)".*')
-
-
-def GetBusDeviceFromTTY(tty_string):
-  """Gets bus and device number connected to a ttyUSB port.
-
-  Args:
-    tty_string: [String] Identifier for ttyUSB (e.g. 'ttyUSB0')
-
-  Returns:
-    Tuple (bus, device) giving device connected to that ttyUSB.
-
-  Raises:
-    ValueError: If bus and device information could not be found.
-  """
-  bus_num = None
-  device_num = None
-  # Expected output of GetCmdOutput should be something like:
-  # looking at device /devices/something/.../.../...
-  # KERNELS="ttyUSB0"
-  # SUBSYSTEMS=...
-  # DRIVERS=...
-  # ATTRS{foo}=...
-  # ATTRS{bar}=...
-  # ...
-  for line in _GetTtyUSBInfo(tty_string).splitlines():
-    bus_match = _BUS_NUM_REGEX.match(line)
-    device_match = _DEVICE_NUM_REGEX.match(line)
-    if bus_match and bus_num == None:
-      bus_num = int(bus_match.group(1))
-    if device_match and device_num == None:
-      device_num = int(device_match.group(1))
-  if bus_num is None or device_num is None:
-    raise ValueError('Info not found')
-  return (bus_num, device_num)
-
-
-def GetBusDeviceToTTYMap():
-  """Gets all mappings from (bus, device) to ttyUSB string.
-
-  Gets mapping from (bus, device) to ttyUSB string (e.g. 'ttyUSB0'),
-  for all ttyUSB strings currently active.
-
-  Returns:
-    [dict] Dict that maps (bus, device) to ttyUSB string
-  """
-  result = {}
-  for tty in GetTTYList():
-    result[GetBusDeviceFromTTY(tty)] = tty
-  return result
-
-
-# This dictionary described the mapping between physical and
-# virtual ports on a Plugable 7-Port Hub (model USB2-HUB7BC).
-# Keys are the virtual ports, values are the physical port.
-# The entry 4:{1:4, 2:3, 3:2, 4:1} indicates that virtual port
-# 4 connects to another 'virtual' hub that itself has the
-# virtual-to-physical port mapping {1:4, 2:3, 3:2, 4:1}.
-
-
-def TestUSBTopologyScript():
-  """Test display and hub identification."""
-  # The following makes logger.info behave pretty much like print
-  # during this test script.
-  logging.basicConfig(format='%(message)s', stream=sys.stdout)
-  logger.setLevel(logging.INFO)
-
-  # Identification criteria for Plugable 7-Port Hub
-  logger.info('==== USB TOPOLOGY SCRIPT TEST ====')
-  logger.info('')
-
-  # Display devices
-  logger.info('==== DEVICE DISPLAY ====')
-  device_trees = GetBusNumberToDeviceTreeMap()
-  for device_tree in device_trees.values():
-    device_tree.Display()
-  logger.info('')
-
-  # Display TTY information about devices plugged into hubs.
-  logger.info('==== TTY INFORMATION ====')
-  for port_map in GetAllPhysicalPortToTTYMaps(
-      usb_hubs.ALL_HUBS, device_tree_map=device_trees):
-    logger.info('%s', port_map)
-  logger.info('')
-
-  # Display serial number information about devices plugged into hubs.
-  logger.info('==== SERIAL NUMBER INFORMATION ====')
-  for port_map in GetAllPhysicalPortToSerialMaps(
-      usb_hubs.ALL_HUBS, device_tree_map=device_trees):
-    logger.info('%s', port_map)
-
-  return 0
-
-
-def parse_options(argv):
-  """Parses and checks the command-line options.
-
-  Returns:
-    A tuple containing the options structure and a list of categories to
-    be traced.
-  """
-  USAGE = '''./find_usb_devices [--help]
-    This script shows the mapping between USB devices and port numbers.
-    Clients are not intended to call this script from the command line.
-    Clients are intended to call the functions in this script directly.
-    For instance, GetAllPhysicalPortToSerialMaps(...)
-    Running this script with --help will display this message.
-    Running this script without --help will display information about
-    devices attached, TTY mapping, and serial number mapping,
-    for testing purposes. See design document for API documentation.
-  '''
-  parser = argparse.ArgumentParser(usage=USAGE)
-  return parser.parse_args(argv[1:])
-
-def main():
-  parse_options(sys.argv)
-  TestUSBTopologyScript()
-
-if __name__ == "__main__":
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/utils/find_usb_devices_test.py b/systrace/catapult/devil/devil/utils/find_usb_devices_test.py
deleted file mode 100755
index e8b00c8..0000000
--- a/systrace/catapult/devil/devil/utils/find_usb_devices_test.py
+++ /dev/null
@@ -1,379 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# pylint: disable=protected-access
-
-"""
-Unit tests for the contents of find_usb_devices.py.
-
-Device tree for these tests is as follows:
-Bus 001:
-1: Device 011 "foo"
-2: Device 012 "bar"
-3: Device 013 "baz"
-
-Bus 002:
-1: Device 011 "quux"
-2: Device 020 "My Test HUB" #hub 1
-2:1: Device 021 "battor_p7_h1_t0" #physical port 7 on hub 1, on ttyUSB0
-2:3: Device 022 "battor_p5_h1_t1" #physical port 5 on hub 1, on ttyUSB1
-2:4: Device 023 "My Test Internal HUB" #internal section of hub 1
-2:4:2: Device 024 "battor_p3_h1_t2" #physical port 3 on hub 1, on ttyUSB2
-2:4:3: Device 026 "Not a Battery Monitor" #physical port 1 on hub 1, on ttyUSB3
-2:4:4: Device 025 "battor_p1_h1_t3" #physical port 1 on hub 1, on ttyUSB3
-3: Device 100 "My Test HUB" #hub 2
-3:4: Device 101 "My Test Internal HUB" #internal section of hub 2
-3:4:4: Device 102 "battor_p1_h2_t4" #physical port 1 on hub 2, on ttyusb4
-"""
-
-import logging
-import os
-import unittest
-
-from devil import devil_env
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-from devil.utils import lsusb
-from devil.utils import usb_hubs
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock # pylint: disable=import-error
-
-# Output of lsusb.lsusb().
-# We just test that the dictionary is working by creating an
-# "ID number" equal to (bus_num*1000)+device_num and seeing if
-# it is picked up correctly. Also we test the description
-
-DEVLIST = [(1, 11, 'foo'),
-           (1, 12, 'bar'),
-           (1, 13, 'baz'),
-           (2, 11, 'quux'),
-           (2, 20, 'My Test HUB'),
-           (2, 21, 'ID 0403:6001 battor_p7_h1_t0'),
-           (2, 22, 'ID 0403:6001 battor_p5_h1_t1'),
-           (2, 23, 'My Test Internal HUB'),
-           (2, 24, 'ID 0403:6001 battor_p3_h1_t2'),
-           (2, 25, 'ID 0403:6001 battor_p1_h1_t3'),
-           (2, 26, 'Not a Battery Monitor'),
-           (2, 100, 'My Test HUB'),
-           (2, 101, 'My Test Internal HUB'),
-           (2, 102, 'ID 0403:6001 battor_p1_h1_t4')]
-
-LSUSB_OUTPUT = [
-  {'bus': b, 'device': d, 'desc': t, 'id': (1000*b)+d}
-       for (b, d, t) in DEVLIST]
-
-
-# Note: "Lev", "Cnt", "Spd", and "MxCh" are not used by parser,
-# so we just leave them as zeros here. Also note that the port
-# numbers reported here start at 0, so they're 1 less than the
-# port numbers reported elsewhere.
-USB_DEVICES_OUTPUT = '''
-T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 11 Spd=000 MxCh=00
-S:  SerialNumber=FooSerial
-T:  Bus=01 Lev=00 Prnt=00 Port=01 Cnt=00 Dev#= 12 Spd=000 MxCh=00
-S:  SerialNumber=BarSerial
-T:  Bus=01 Lev=00 Prnt=00 Port=02 Cnt=00 Dev#= 13 Spd=000 MxCh=00
-S:  SerialNumber=BazSerial
-
-T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 11 Spd=000 MxCh=00
-
-T:  Bus=02 Lev=00 Prnt=00 Port=01 Cnt=00 Dev#= 20 Spd=000 MxCh=00
-T:  Bus=02 Lev=00 Prnt=20 Port=00 Cnt=00 Dev#= 21 Spd=000 MxCh=00
-S:  SerialNumber=BattOr0
-T:  Bus=02 Lev=00 Prnt=20 Port=02 Cnt=00 Dev#= 22 Spd=000 MxCh=00
-S:  SerialNumber=BattOr1
-T:  Bus=02 Lev=00 Prnt=20 Port=03 Cnt=00 Dev#= 23 Spd=000 MxCh=00
-T:  Bus=02 Lev=00 Prnt=23 Port=01 Cnt=00 Dev#= 24 Spd=000 MxCh=00
-S:  SerialNumber=BattOr2
-T:  Bus=02 Lev=00 Prnt=23 Port=03 Cnt=00 Dev#= 25 Spd=000 MxCh=00
-S:  SerialNumber=BattOr3
-T:  Bus=02 Lev=00 Prnt=23 Port=02 Cnt=00 Dev#= 26 Spd=000 MxCh=00
-
-T:  Bus=02 Lev=00 Prnt=00 Port=02 Cnt=00 Dev#=100 Spd=000 MxCh=00
-T:  Bus=02 Lev=00 Prnt=100 Port=03 Cnt=00 Dev#=101 Spd=000 MxCh=00
-T:  Bus=02 Lev=00 Prnt=101 Port=03 Cnt=00 Dev#=102 Spd=000 MxCh=00
-'''
-
-RAW_LSUSB_OUTPUT = '''
-Bus 001 Device 011: FAST foo
-Bus 001 Device 012: FAST bar
-Bus 001 Device 013: baz
-Bus 002 Device 011: quux
-Bus 002 Device 020: My Test HUB
-Bus 002 Device 021: ID 0403:6001 battor_p7_h1_t0
-Bus 002 Device 022: ID 0403:6001 battor_p5_h1_t1
-Bus 002 Device 023: My Test Internal HUB
-Bus 002 Device 024: ID 0403:6001 battor_p3_h1_t2
-Bus 002 Device 025: ID 0403:6001 battor_p1_h1_t3
-Bus 002 Device 026: Not a Battery Monitor
-Bus 002 Device 100: My Test HUB
-Bus 002 Device 101: My Test Internal HUB
-Bus 002 Device 102: ID 0403:6001 battor_p1_h1_t4
-'''
-
-LIST_TTY_OUTPUT = '''
-ttyUSB0
-Something-else-0
-ttyUSB1
-ttyUSB2
-Something-else-1
-ttyUSB3
-ttyUSB4
-Something-else-2
-ttyUSB5
-'''
-
-# Note: The real output will have multiple lines with
-# ATTRS{busnum} and ATTRS{devnum}, but only the first
-# one counts. Thus the test output duplicates this.
-UDEVADM_USBTTY0_OUTPUT = '''
-ATTRS{busnum}=="2"
-ATTRS{devnum}=="21"
-ATTRS{busnum}=="0"
-ATTRS{devnum}=="0"
-'''
-
-UDEVADM_USBTTY1_OUTPUT = '''
-ATTRS{busnum}=="2"
-ATTRS{devnum}=="22"
-ATTRS{busnum}=="0"
-ATTRS{devnum}=="0"
-'''
-
-UDEVADM_USBTTY2_OUTPUT = '''
-ATTRS{busnum}=="2"
-ATTRS{devnum}=="24"
-ATTRS{busnum}=="0"
-ATTRS{devnum}=="0"
-'''
-
-UDEVADM_USBTTY3_OUTPUT = '''
-ATTRS{busnum}=="2"
-ATTRS{devnum}=="25"
-ATTRS{busnum}=="0"
-ATTRS{devnum}=="0"
-'''
-
-UDEVADM_USBTTY4_OUTPUT = '''
-ATTRS{busnum}=="2"
-ATTRS{devnum}=="102"
-ATTRS{busnum}=="0"
-ATTRS{devnum}=="0"
-'''
-
-UDEVADM_USBTTY5_OUTPUT = '''
-ATTRS{busnum}=="2"
-ATTRS{devnum}=="26"
-ATTRS{busnum}=="0"
-ATTRS{devnum}=="0"
-'''
-
-UDEVADM_OUTPUT_DICT = {
-  'ttyUSB0': UDEVADM_USBTTY0_OUTPUT,
-  'ttyUSB1': UDEVADM_USBTTY1_OUTPUT,
-  'ttyUSB2': UDEVADM_USBTTY2_OUTPUT,
-  'ttyUSB3': UDEVADM_USBTTY3_OUTPUT,
-  'ttyUSB4': UDEVADM_USBTTY4_OUTPUT,
-  'ttyUSB5': UDEVADM_USBTTY5_OUTPUT}
-
-# Identification criteria for Plugable 7-Port Hub
-def isTestHub(node):
-  """Check if a node is a Plugable 7-Port Hub
-  (Model USB2-HUB7BC)
-  The topology of this device is a 4-port hub,
-  with another 4-port hub connected on port 4.
-  """
-  if not isinstance(node, find_usb_devices.USBDeviceNode):
-    return False
-  if 'Test HUB' not in node.desc:
-    return False
-  if not node.HasPort(4):
-    return False
-  return 'Test Internal HUB' in node.PortToDevice(4).desc
-
-TEST_HUB = usb_hubs.HubType(isTestHub,
-                            {1:7,
-                             2:6,
-                             3:5,
-                             4:{1:4, 2:3, 3:2, 4:1}})
-
-class USBScriptTest(unittest.TestCase):
-  def setUp(self):
-    find_usb_devices._GetTtyUSBInfo = mock.Mock(
-        side_effect=lambda x: UDEVADM_OUTPUT_DICT[x])
-    find_usb_devices._GetParsedLSUSBOutput = mock.Mock(
-        return_value=LSUSB_OUTPUT)
-    find_usb_devices._GetUSBDevicesOutput = mock.Mock(
-        return_value=USB_DEVICES_OUTPUT)
-    find_usb_devices._GetCommList = mock.Mock(
-        return_value=LIST_TTY_OUTPUT)
-    lsusb.raw_lsusb = mock.Mock(
-        return_value=RAW_LSUSB_OUTPUT)
-
-  def testIsBattOr(self):
-    bd = find_usb_devices.GetBusNumberToDeviceTreeMap()
-    self.assertTrue(battor_device_mapping.IsBattOr('ttyUSB3', bd))
-    self.assertFalse(battor_device_mapping.IsBattOr('ttyUSB5', bd))
-
-  def testGetBattOrs(self):
-    bd = find_usb_devices.GetBusNumberToDeviceTreeMap()
-    self.assertEquals(battor_device_mapping.GetBattOrList(bd),
-                          ['ttyUSB0', 'ttyUSB1', 'ttyUSB2',
-                           'ttyUSB3', 'ttyUSB4'])
-
-  def testGetTTYDevices(self):
-    pp = find_usb_devices.GetAllPhysicalPortToTTYMaps([TEST_HUB])
-    result = list(pp)
-    self.assertEquals(result[0], {7:'ttyUSB0',
-                                  5:'ttyUSB1',
-                                  3:'ttyUSB2',
-                                  2:'ttyUSB5',
-                                  1:'ttyUSB3'})
-    self.assertEquals(result[1], {1:'ttyUSB4'})
-
-  def testGetPortDeviceMapping(self):
-    pp = find_usb_devices.GetAllPhysicalPortToBusDeviceMaps([TEST_HUB])
-    result = list(pp)
-    self.assertEquals(result[0], {7:(2, 21),
-                                  5:(2, 22),
-                                  3:(2, 24),
-                                  2:(2, 26),
-                                  1:(2, 25)})
-    self.assertEquals(result[1], {1:(2, 102)})
-
-  def testGetSerialMapping(self):
-    pp = find_usb_devices.GetAllPhysicalPortToSerialMaps([TEST_HUB])
-    result = list(pp)
-    self.assertEquals(result[0], {7:'BattOr0',
-                                  5:'BattOr1',
-                                  3:'BattOr2',
-                                  1:'BattOr3'})
-    self.assertEquals(result[1], {})
-
-  def testFastDeviceDescriptions(self):
-    bd = find_usb_devices.GetBusNumberToDeviceTreeMap()
-    dev_foo = bd[1].FindDeviceNumber(11)
-    dev_bar = bd[1].FindDeviceNumber(12)
-    dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
-    self.assertEquals(dev_foo.desc, 'FAST foo')
-    self.assertEquals(dev_bar.desc, 'FAST bar')
-    self.assertEquals(dev_battor_p7_h1_t0.desc,
-        'ID 0403:6001 battor_p7_h1_t0')
-
-  def testDeviceDescriptions(self):
-    bd = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=False)
-    dev_foo = bd[1].FindDeviceNumber(11)
-    dev_bar = bd[1].FindDeviceNumber(12)
-    dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
-    self.assertEquals(dev_foo.desc, 'foo')
-    self.assertEquals(dev_bar.desc, 'bar')
-    self.assertEquals(dev_battor_p7_h1_t0.desc,
-        'ID 0403:6001 battor_p7_h1_t0')
-
-  def testDeviceInformation(self):
-    bd = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=False)
-    dev_foo = bd[1].FindDeviceNumber(11)
-    dev_bar = bd[1].FindDeviceNumber(12)
-    dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
-    self.assertEquals(dev_foo.info['id'], 1011)
-    self.assertEquals(dev_bar.info['id'], 1012)
-    self.assertEquals(dev_battor_p7_h1_t0.info['id'], 2021)
-
-  def testSerialNumber(self):
-    bd = find_usb_devices.GetBusNumberToDeviceTreeMap(fast=False)
-    dev_foo = bd[1].FindDeviceNumber(11)
-    dev_bar = bd[1].FindDeviceNumber(12)
-    dev_battor_p7_h1_t0 = bd[2].FindDeviceNumber(21)
-    self.assertEquals(dev_foo.serial, 'FooSerial')
-    self.assertEquals(dev_bar.serial, 'BarSerial')
-    self.assertEquals(dev_battor_p7_h1_t0.serial, 'BattOr0')
-
-  def testBattOrDictMapping(self):
-    map_dict = {'Phone1':'BattOr1', 'Phone2':'BattOr2', 'Phone3':'BattOr3'}
-    a1 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
-             'Phone1', serial_map=map_dict)
-    a2 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
-             'Phone2', serial_map=map_dict)
-    a3 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
-             'Phone3', serial_map=map_dict)
-    self.assertEquals(a1, '/dev/ttyUSB1')
-    self.assertEquals(a2, '/dev/ttyUSB2')
-    self.assertEquals(a3, '/dev/ttyUSB3')
-
-  def testBattOrDictFromFileMapping(self):
-    try:
-      map_dict = {'Phone1':'BattOr1', 'Phone2':'BattOr2', 'Phone3':'BattOr3'}
-      curr_dir = os.path.dirname(os.path.realpath(__file__))
-      filename = os.path.join(curr_dir, 'test', 'data', 'test_write_map.json')
-      battor_device_mapping.WriteSerialMapFile(filename, map_dict)
-      a1 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
-               'Phone1', serial_map_file=filename)
-      a2 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
-               'Phone2', serial_map_file=filename)
-      a3 = battor_device_mapping.GetBattOrPathFromPhoneSerial(
-               'Phone3', serial_map_file=filename)
-    finally:
-      os.remove(filename)
-    self.assertEquals(a1, '/dev/ttyUSB1')
-    self.assertEquals(a2, '/dev/ttyUSB2')
-    self.assertEquals(a3, '/dev/ttyUSB3')
-
-  def testReadSerialMapFile(self):
-    curr_dir = os.path.dirname(os.path.realpath(__file__))
-    map_dict = battor_device_mapping.ReadSerialMapFile(
-        os.path.join(curr_dir, 'test', 'data', 'test_serial_map.json'))
-    self.assertEquals(len(map_dict.keys()), 3)
-    self.assertEquals(map_dict['Phone1'], 'BattOr1')
-    self.assertEquals(map_dict['Phone2'], 'BattOr2')
-    self.assertEquals(map_dict['Phone3'], 'BattOr3')
-
-original_PPTSM = find_usb_devices.GetAllPhysicalPortToSerialMaps
-original_PPTTM = find_usb_devices.GetAllPhysicalPortToTTYMaps
-original_GBL = battor_device_mapping.GetBattOrList
-original_GBNDM = find_usb_devices.GetBusNumberToDeviceTreeMap
-original_IB = battor_device_mapping.IsBattOr
-original_GBSM = battor_device_mapping.GetBattOrSerialNumbers
-
-def setup_battor_test(serial, tty, battor, bser=None):
-  serial_mapper = mock.Mock(return_value=serial)
-  tty_mapper = mock.Mock(return_value=tty)
-  battor_lister = mock.Mock(return_value=battor)
-  devtree = mock.Mock(return_value=None)
-  is_battor = mock.Mock(side_effect=lambda x, y: x in battor)
-  battor_serials = mock.Mock(return_value=bser)
-  find_usb_devices.GetAllPhysicalPortToSerialMaps = serial_mapper
-  find_usb_devices.GetAllPhysicalPortToTTYMaps = tty_mapper
-  battor_device_mapping.GetBattOrList = battor_lister
-  find_usb_devices.GetBusNumberToDeviceTreeMap = devtree
-  battor_device_mapping.IsBattOr = is_battor
-  battor_device_mapping.GetBattOrSerialNumbers = battor_serials
-
-class BattOrMappingTest(unittest.TestCase):
-  def tearDown(self):
-    find_usb_devices.GetAllPhysicalPortToSerialMaps = original_PPTSM
-    find_usb_devices.GetAllPhysicalPortToTTYMaps = original_PPTTM
-    battor_device_mapping.GetBattOrList = original_GBL
-    find_usb_devices.GetBusNumberToDeviceTreeMap = original_GBNDM
-    battor_device_mapping.IsBattOr = original_IB
-    battor_device_mapping.GetBattOrSerialNumbers = original_GBSM
-
-  def test_generate_serial_map(self):
-    setup_battor_test([{1:'Phn1', 2:'Phn2', 3:'Phn3'},
-                       {1:'Bat1', 2:'Bat2', 3:'Bat3'}],
-                      [{},
-                       {1:'ttyUSB0', 2:'ttyUSB1', 3:'ttyUSB2'}],
-                      ['ttyUSB0', 'ttyUSB1', 'ttyUSB2'],
-                      ['Bat1', 'Bat2', 'Bat3'])
-    result = battor_device_mapping.GenerateSerialMap()
-    self.assertEqual(len(result), 3)
-    self.assertEqual(result['Phn1'], 'Bat1')
-    self.assertEqual(result['Phn2'], 'Bat2')
-    self.assertEqual(result['Phn3'], 'Bat3')
-
-
-if __name__ == "__main__":
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/utils/geometry.py b/systrace/catapult/devil/devil/utils/geometry.py
deleted file mode 100644
index da21770..0000000
--- a/systrace/catapult/devil/devil/utils/geometry.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Objects for convenient manipulation of points and other surface areas."""
-
-import collections
-
-
-class Point(collections.namedtuple('Point', ['x', 'y'])):
-  """Object to represent an (x, y) point on a surface.
-
-  Args:
-    x, y: Two numeric coordinates that define the point.
-  """
-  __slots__ = ()
-
-  def __str__(self):
-    """Get a useful string representation of the object."""
-    return '(%s, %s)' % (self.x, self.y)
-
-  def __add__(self, other):
-    """Sum of two points, e.g. p + q."""
-    if isinstance(other, Point):
-      return Point(self.x + other.x, self.y + other.y)
-    else:
-      return NotImplemented
-
-  def __mul__(self, factor):
-    """Multiplication on the right is not implemented."""
-    # This overrides the default behaviour of a tuple multiplied by a constant
-    # on the right, which does not make sense for a Point.
-    return NotImplemented
-
-  def __rmul__(self, factor):
-    """Multiply a point by a scalar factor on the left, e.g. 2 * p."""
-    return Point(factor * self.x, factor * self.y)
-
-
-class Rectangle(
-    collections.namedtuple('Rectangle', ['top_left', 'bottom_right'])):
-  """Object to represent a rectangle on a surface.
-
-  Args:
-    top_left: A pair of (left, top) coordinates. Might be given as a Point
-      or as a two-element sequence (list, tuple, etc.).
-    bottom_right: A pair (right, bottom) coordinates.
-  """
-  __slots__ = ()
-
-  def __new__(cls, top_left, bottom_right):
-    if not isinstance(top_left, Point):
-      top_left = Point(*top_left)
-    if not isinstance(bottom_right, Point):
-      bottom_right = Point(*bottom_right)
-    return super(Rectangle, cls).__new__(cls, top_left, bottom_right)
-
-  def __str__(self):
-    """Get a useful string representation of the object."""
-    return '[%s, %s]' % (self.top_left, self.bottom_right)
-
-  @property
-  def center(self):
-    """Get the point at the center of the rectangle."""
-    return 0.5 * (self.top_left + self.bottom_right)
-
-  @classmethod
-  def FromDict(cls, d):
-    """Create a rectangle object from a dictionary.
-
-    Args:
-      d: A dictionary (or mapping) of the form, e.g., {'top': 0, 'left': 0,
-         'bottom': 1, 'right': 1}.
-    """
-    return cls(Point(d['left'], d['top']), Point(d['right'], d['bottom']))
diff --git a/systrace/catapult/devil/devil/utils/geometry_test.py b/systrace/catapult/devil/devil/utils/geometry_test.py
deleted file mode 100644
index af69442..0000000
--- a/systrace/catapult/devil/devil/utils/geometry_test.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tests for the geometry module."""
-
-import unittest
-
-from devil.utils import geometry as g
-
-
-class PointTest(unittest.TestCase):
-
-  def testStr(self):
-    p = g.Point(1, 2)
-    self.assertEquals(str(p), '(1, 2)')
-
-  def testAdd(self):
-    p = g.Point(1, 2)
-    q = g.Point(3, 4)
-    r = g.Point(4, 6)
-    self.assertEquals(p + q, r)
-
-  def testAdd_TypeErrorWithInvalidOperands(self):
-    # pylint: disable=pointless-statement
-    p = g.Point(1, 2)
-    with self.assertRaises(TypeError):
-      p + 4  # Can't add point and scalar.
-    with self.assertRaises(TypeError):
-      4 + p  # Can't add scalar and point.
-
-  def testMult(self):
-    p = g.Point(1, 2)
-    r = g.Point(2, 4)
-    self.assertEquals(2 * p, r)  # Multiply by scalar on the left.
-
-  def testMult_TypeErrorWithInvalidOperands(self):
-    # pylint: disable=pointless-statement
-    p = g.Point(1, 2)
-    q = g.Point(2, 4)
-    with self.assertRaises(TypeError):
-      p * q  # Can't multiply points.
-    with self.assertRaises(TypeError):
-      p * 4  # Can't multiply by a scalar on the right.
-
-
-class RectangleTest(unittest.TestCase):
-
-  def testStr(self):
-    r = g.Rectangle(g.Point(0, 1), g.Point(2, 3))
-    self.assertEquals(str(r), '[(0, 1), (2, 3)]')
-
-  def testCenter(self):
-    r = g.Rectangle(g.Point(0, 1), g.Point(2, 3))
-    c = g.Point(1, 2)
-    self.assertEquals(r.center, c)
-
-  def testFromJson(self):
-    r1 = g.Rectangle(g.Point(0, 1), g.Point(2, 3))
-    r2 = g.Rectangle.FromDict({'top': 1, 'left': 0, 'bottom': 3, 'right': 2})
-    self.assertEquals(r1, r2)
diff --git a/systrace/catapult/devil/devil/utils/host_utils.py b/systrace/catapult/devil/devil/utils/host_utils.py
deleted file mode 100644
index 6c337cf..0000000
--- a/systrace/catapult/devil/devil/utils/host_utils.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import os
-
-
-def GetRecursiveDiskUsage(path):
-  """Returns the disk usage in bytes of |path|. Similar to `du -sb |path|`."""
-  def get_size(filepath):
-    try:
-      return os.path.getsize(filepath)
-    except OSError:
-      logging.warning('File or directory no longer found: %s', filepath)
-      return 0
-
-  running_size = get_size(path)
-  if os.path.isdir(path):
-    for root, dirs, files in os.walk(path):
-      running_size += sum([get_size(os.path.join(root, f))
-                           for f in files + dirs])
-  return running_size
diff --git a/systrace/catapult/devil/devil/utils/lazy/__init__.py b/systrace/catapult/devil/devil/utils/lazy/__init__.py
deleted file mode 100644
index 3cc56c0..0000000
--- a/systrace/catapult/devil/devil/utils/lazy/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from devil.utils.lazy.weak_constant import WeakConstant
diff --git a/systrace/catapult/devil/devil/utils/lazy/weak_constant.py b/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
deleted file mode 100644
index 3558f29..0000000
--- a/systrace/catapult/devil/devil/utils/lazy/weak_constant.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import threading
-
-
-class WeakConstant(object):
-  """A thread-safe, lazily initialized object.
-
-  This does not support modification after initialization. The intended
-  constant nature of the object is not enforced, though, hence the "weak".
-  """
-
-  def __init__(self, initializer):
-    self._initialized = False
-    self._initializer = initializer
-    self._lock = threading.Lock()
-    self._val = None
-
-  def read(self):
-    """Get the object, creating it if necessary."""
-    if self._initialized:
-      return self._val
-    with self._lock:
-      if not self._initialized:
-        self._val = self._initializer()
-        self._initialized = True
-    return self._val
diff --git a/systrace/catapult/devil/devil/utils/logging_common.py b/systrace/catapult/devil/devil/utils/logging_common.py
deleted file mode 100644
index 5aea3c6..0000000
--- a/systrace/catapult/devil/devil/utils/logging_common.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import sys
-import time
-
-
-def AddLoggingArguments(parser):
-  parser.add_argument(
-      '-v', '--verbose', action='count', default=0,
-      help='Log more. Use multiple times for even more logging.')
-
-
-def InitializeLogging(args, handler=None):
-  if args.verbose == 0:
-    log_level = logging.WARNING
-  elif args.verbose == 1:
-    log_level = logging.INFO
-  else:
-    log_level = logging.DEBUG
-  logger = logging.getLogger()
-  logger.setLevel(log_level)
-  if not handler:
-    handler = logging.StreamHandler(sys.stdout)
-    handler.setFormatter(CustomFormatter())
-  logger.addHandler(handler)
-
-
-class CustomFormatter(logging.Formatter):
-  """Custom log formatter."""
-
-  # override
-  def __init__(self, fmt='%(threadName)-4s  %(message)s'):
-    # Can't use super() because in older Python versions logging.Formatter does
-    # not inherit from object.
-    logging.Formatter.__init__(self, fmt=fmt)
-    self._creation_time = time.time()
-
-  # override
-  def format(self, record):
-    # Can't use super() because in older Python versions logging.Formatter does
-    # not inherit from object.
-    msg = logging.Formatter.format(self, record)
-    if 'MainThread' in msg[:19]:
-      msg = msg.replace('MainThread', 'Main', 1)
-    timediff = time.time() - self._creation_time
-    return '%s %8.3fs %s' % (record.levelname[0], timediff, msg)
-
diff --git a/systrace/catapult/devil/devil/utils/lsusb.py b/systrace/catapult/devil/devil/utils/lsusb.py
deleted file mode 100644
index 6cbf256..0000000
--- a/systrace/catapult/devil/devil/utils/lsusb.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import re
-
-from devil.utils import cmd_helper
-
-logger = logging.getLogger(__name__)
-
-_COULDNT_OPEN_ERROR_RE = re.compile(r'Couldn\'t open device.*')
-_INDENTATION_RE = re.compile(r'^( *)')
-_LSUSB_BUS_DEVICE_RE = re.compile(r'^Bus (\d{3}) Device (\d{3}): (.*)')
-_LSUSB_ENTRY_RE = re.compile(r'^ *([^ ]+) +([^ ]+) *([^ ].*)?$')
-_LSUSB_GROUP_RE = re.compile(r'^ *([^ ]+.*):$')
-
-
-def _lsusbv_on_device(bus_id, dev_id):
-  """Calls lsusb -v on device."""
-  _, raw_output = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-      ['lsusb', '-v', '-s', '%s:%s' % (bus_id, dev_id)], timeout=10)
-
-  device = {'bus': bus_id, 'device': dev_id}
-  depth_stack = [device]
-
-  # This builds a nested dict -- a tree, basically -- that corresponds
-  # to the lsusb output. It looks first for a line containing
-  #
-  #   "Bus <bus number> Device <device number>: ..."
-  #
-  # and uses that to create the root node. It then parses all remaining
-  # lines as a tree, with the indentation level determining the
-  # depth of the new node.
-  #
-  # This expects two kinds of lines:
-  #   - "groups", which take the form
-  #       "<Group name>:"
-  #     and typically have children, and
-  #   - "entries", which take the form
-  #       "<entry name>   <entry value>  <possible entry description>"
-  #     and typically do not have children (but can).
-  #
-  # This maintains a stack containing all current ancestor nodes in
-  # order to add new nodes to the proper place in the tree.
-  # The stack is added to when a new node is parsed. Nodes are removed
-  # from the stack when they are either at the same indentation level as
-  # or a deeper indentation level than the current line.
-  #
-  # e.g. the following lsusb output:
-  #
-  # Bus 123 Device 456: School bus
-  # Device Descriptor:
-  #   bDeviceClass 5 Actual School Bus
-  #   Configuration Descriptor:
-  #     bLength 20 Rows
-  #
-  # would produce the following dict:
-  #
-  # {
-  #   'bus': 123,
-  #   'device': 456,
-  #   'desc': 'School bus',
-  #   'Device Descriptor': {
-  #     'bDeviceClass': {
-  #       '_value': '5',
-  #       '_desc': 'Actual School Bus',
-  #     },
-  #     'Configuration Descriptor': {
-  #       'bLength': {
-  #         '_value': '20',
-  #         '_desc': 'Rows',
-  #       },
-  #     },
-  #   }
-  # }
-  for line in raw_output.splitlines():
-    # Ignore blank lines.
-    if not line:
-      continue
-    # Filter out error mesage about opening device.
-    if _COULDNT_OPEN_ERROR_RE.match(line):
-      continue
-    # Find start of device information.
-    m = _LSUSB_BUS_DEVICE_RE.match(line)
-    if m:
-      if m.group(1) != bus_id:
-        logger.warning(
-            'Expected bus_id value: %r, seen %r', bus_id, m.group(1))
-      if m.group(2) != dev_id:
-        logger.warning(
-            'Expected dev_id value: %r, seen %r', dev_id, m.group(2))
-      device['desc'] = m.group(3)
-      continue
-
-    # Skip any lines that aren't indented, as they're not part of the
-    # device descriptor.
-    indent_match = _INDENTATION_RE.match(line)
-    if not indent_match:
-      continue
-
-    # Determine the indentation depth.
-    depth = 1 + len(indent_match.group(1)) / 2
-    if depth > len(depth_stack):
-      logger.error(
-          'lsusb parsing error: unexpected indentation: "%s"', line)
-      continue
-
-    # Pop everything off the depth stack that isn't a parent of
-    # this element.
-    while depth < len(depth_stack):
-      depth_stack.pop()
-
-    cur = depth_stack[-1]
-
-    m = _LSUSB_GROUP_RE.match(line)
-    if m:
-      new_group = {}
-      cur[m.group(1)] = new_group
-      depth_stack.append(new_group)
-      continue
-
-    m = _LSUSB_ENTRY_RE.match(line)
-    if m:
-      new_entry = {
-        '_value': m.group(2),
-        '_desc': m.group(3),
-      }
-      cur[m.group(1)] = new_entry
-      depth_stack.append(new_entry)
-      continue
-
-    logger.error('lsusb parsing error: unrecognized line: "%s"', line)
-
-  return device
-
-def lsusb():
-  """Call lsusb and return the parsed output."""
-  _, lsusb_list_output = cmd_helper.GetCmdStatusAndOutputWithTimeout(
-      ['lsusb'], timeout=10)
-  devices = []
-  for line in lsusb_list_output.splitlines():
-    m = _LSUSB_BUS_DEVICE_RE.match(line)
-    if m:
-      bus_num = m.group(1)
-      dev_num = m.group(2)
-      try:
-        devices.append(_lsusbv_on_device(bus_num, dev_num))
-      except cmd_helper.TimeoutError:
-        # Will be blacklisted if it is in expected device file, but times out.
-        logger.info('lsusb -v %s:%s timed out.', bus_num, dev_num)
-  return devices
-
-def raw_lsusb():
-  return cmd_helper.GetCmdOutput(['lsusb'])
-
-def get_lsusb_serial(device):
-  try:
-    return device['Device Descriptor']['iSerial']['_desc']
-  except KeyError:
-    return None
-
-def _is_android_device(device):
-  try:
-    # Hubs are not android devices.
-    if device['Device Descriptor']['bDeviceClass']['_value'] == '9':
-      return False
-  except KeyError:
-    pass
-  return get_lsusb_serial(device) is not None
-
-def get_android_devices():
-  android_devices = (d for d in lsusb() if _is_android_device(d))
-  return [get_lsusb_serial(d) for d in android_devices]
diff --git a/systrace/catapult/devil/devil/utils/lsusb_test.py b/systrace/catapult/devil/devil/utils/lsusb_test.py
deleted file mode 100755
index f381e72..0000000
--- a/systrace/catapult/devil/devil/utils/lsusb_test.py
+++ /dev/null
@@ -1,250 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tests for the cmd_helper module."""
-
-import unittest
-
-from devil import devil_env
-from devil.utils import lsusb
-from devil.utils import mock_calls
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock # pylint: disable=import-error
-
-RAW_OUTPUT = """
-Bus 003 Device 007: ID 18d1:4ee2 Google Inc. Nexus 4 (debug)
-Device Descriptor:
-  bLength                18
-  bDescriptorType         1
-  bcdUSB               2.00
-  bDeviceClass            0 (Defined at Interface level)
-  bDeviceSubClass         0
-  bDeviceProtocol         0
-  bMaxPacketSize0        64
-  idVendor           0x18d1 Google Inc.
-  idProduct          0x4ee2 Nexus 4 (debug)
-  bcdDevice            2.28
-  iManufacturer           1 LGE
-  iProduct                2 Nexus 4
-  iSerial                 3 01d2450ea194a93b
-  bNumConfigurations      1
-  Configuration Descriptor:
-    bLength                 9
-    bDescriptorType         2
-    wTotalLength           62
-    bNumInterfaces          2
-    bConfigurationValue     1
-    iConfiguration          0
-    bmAttributes         0x80
-      (Bus Powered)
-    MaxPower              500mA
-    Interface Descriptor:
-      bLength                 9
-      bDescriptorType         4
-      bInterfaceNumber        0
-      bAlternateSetting       0
-      bNumEndpoints           3
-      bInterfaceClass       255 Vendor Specific Class
-      bInterfaceSubClass    255 Vendor Specific Subclass
-      bInterfaceProtocol      0
-      iInterface              4 MTP
-      Endpoint Descriptor:
-        bLength                 7
-        bDescriptorType         5
-        bEndpointAddress     0x81  EP 1 IN
-        bmAttributes            2
-          Transfer Type            Bulk
-          Synch Type               None
-          Usage Type               Data
-        wMaxPacketSize     0x0040  1x 64 bytes
-        bInterval               0
-      Endpoint Descriptor:
-        bLength                 7
-        bDescriptorType         5
-        bEndpointAddress     0x01  EP 1 OUT
-        bmAttributes            2
-          Transfer Type            Bulk
-          Synch Type               None
-          Usage Type               Data
-        wMaxPacketSize     0x0040  1x 64 bytes
-        bInterval               0
-      Endpoint Descriptor:
-        bLength                 7
-        bDescriptorType         5
-        bEndpointAddress     0x82  EP 2 IN
-        bmAttributes            3
-          Transfer Type            Interrupt
-          Synch Type               None
-          Usage Type               Data
-        wMaxPacketSize     0x001c  1x 28 bytes
-        bInterval               6
-    Interface Descriptor:
-      bLength                 9
-      bDescriptorType         4
-      bInterfaceNumber        1
-      bAlternateSetting       0
-      bNumEndpoints           2
-      bInterfaceClass       255 Vendor Specific Class
-      bInterfaceSubClass     66
-      bInterfaceProtocol      1
-      iInterface              0
-      Endpoint Descriptor:
-        bLength                 7
-        bDescriptorType         5
-        bEndpointAddress     0x83  EP 3 IN
-        bmAttributes            2
-          Transfer Type            Bulk
-          Synch Type               None
-          Usage Type               Data
-        wMaxPacketSize     0x0040  1x 64 bytes
-        bInterval               0
-      Endpoint Descriptor:
-        bLength                 7
-        bDescriptorType         5
-        bEndpointAddress     0x02  EP 2 OUT
-        bmAttributes            2
-          Transfer Type            Bulk
-          Synch Type               None
-          Usage Type               Data
-        wMaxPacketSize     0x0040  1x 64 bytes
-        bInterval               0
-Device Qualifier (for other device speed):
-  bLength                10
-  bDescriptorType         6
-  bcdUSB               2.00
-  bDeviceClass            0 (Defined at Interface level)
-  bDeviceSubClass         0
-  bDeviceProtocol         0
-  bMaxPacketSize0        64
-  bNumConfigurations      1
-Device Status:     0x0000
-  (Bus Powered)
-"""
-DEVICE_LIST = 'Bus 003 Device 007: ID 18d1:4ee2 Google Inc. Nexus 4 (debug)'
-
-EXPECTED_RESULT = {
-    'device': '007',
-    'bus': '003',
-    'desc': 'ID 18d1:4ee2 Google Inc. Nexus 4 (debug)',
-    'Device': {
-        '_value': 'Status:',
-        '_desc': '0x0000',
-        '(Bus': {
-            '_value': 'Powered)',
-            '_desc': None
-        }
-    },
-    'Device Descriptor': {
-        'bLength': {'_value': '18', '_desc': None},
-        'bcdDevice': {'_value': '2.28', '_desc': None},
-        'bDeviceSubClass': {'_value': '0', '_desc': None},
-        'idVendor': {'_value': '0x18d1', '_desc': 'Google Inc.'},
-        'bcdUSB': {'_value': '2.00', '_desc': None},
-        'bDeviceProtocol': {'_value': '0', '_desc': None},
-        'bDescriptorType': {'_value': '1', '_desc': None},
-        'Configuration Descriptor': {
-            'bLength': {'_value': '9', '_desc': None},
-            'wTotalLength': {'_value': '62', '_desc': None},
-            'bConfigurationValue': {'_value': '1', '_desc': None},
-            'Interface Descriptor': {
-                'bLength': {'_value': '9', '_desc': None},
-                'bAlternateSetting': {'_value': '0', '_desc': None},
-                'bInterfaceNumber': {'_value': '1', '_desc': None},
-                'bNumEndpoints': {'_value': '2', '_desc': None},
-                'bDescriptorType': {'_value': '4', '_desc': None},
-                'bInterfaceSubClass': {'_value': '66', '_desc': None},
-                'bInterfaceClass': {
-                    '_value': '255',
-                    '_desc': 'Vendor Specific Class'
-                },
-                'bInterfaceProtocol': {'_value': '1', '_desc': None},
-                'Endpoint Descriptor': {
-                    'bLength': {'_value': '7', '_desc': None},
-                    'bEndpointAddress': {'_value': '0x02', '_desc': 'EP 2 OUT'},
-                    'bInterval': {'_value': '0', '_desc': None},
-                    'bDescriptorType': {'_value': '5', '_desc': None},
-                    'bmAttributes': {
-                        '_value': '2',
-                        'Transfer': {'_value': 'Type', '_desc': 'Bulk'},
-                        'Usage': {'_value': 'Type', '_desc': 'Data'},
-                        '_desc': None,
-                        'Synch': {'_value': 'Type', '_desc': 'None'}
-                    },
-                    'wMaxPacketSize': {
-                        '_value': '0x0040',
-                        '_desc': '1x 64 bytes'
-                    }
-                },
-                'iInterface': {'_value': '0', '_desc': None}
-            },
-            'bDescriptorType': {'_value': '2', '_desc': None},
-            'iConfiguration': {'_value': '0', '_desc': None},
-            'bmAttributes': {
-                '_value': '0x80',
-                '_desc': None,
-                '(Bus': {'_value': 'Powered)', '_desc': None}
-            },
-            'bNumInterfaces': {'_value': '2', '_desc': None},
-            'MaxPower': {'_value': '500mA', '_desc': None}
-        },
-        'iSerial': {'_value': '3', '_desc': '01d2450ea194a93b'},
-        'idProduct': {'_value': '0x4ee2', '_desc': 'Nexus 4 (debug)'},
-        'iManufacturer': {'_value': '1', '_desc': 'LGE'},
-        'bDeviceClass': {
-            '_value': '0',
-            '_desc': '(Defined at Interface level)'
-        },
-        'iProduct': {'_value': '2', '_desc': 'Nexus 4'},
-        'bMaxPacketSize0': {'_value': '64', '_desc': None},
-        'bNumConfigurations': {'_value': '1', '_desc': None}
-    },
-    'Device Qualifier (for other device speed)': {
-        'bLength': {'_value': '10', '_desc': None},
-        'bNumConfigurations': {'_value': '1', '_desc': None},
-        'bDeviceSubClass': {'_value': '0', '_desc': None},
-        'bcdUSB': {'_value': '2.00', '_desc': None},
-        'bDeviceProtocol': {'_value': '0', '_desc': None},
-        'bDescriptorType': {'_value': '6', '_desc': None},
-        'bDeviceClass': {
-            '_value': '0',
-            '_desc': '(Defined at Interface level)'
-        },
-        'bMaxPacketSize0': {'_value': '64', '_desc': None}
-    }
-}
-
-
-class LsusbTest(mock_calls.TestCase):
-  """Test Lsusb parsing."""
-
-  def testLsusb(self):
-    with self.assertCalls(
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout(
-            ['lsusb'], timeout=10), (None, DEVICE_LIST)),
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout(
-          ['lsusb', '-v', '-s', '003:007'], timeout=10), (None, RAW_OUTPUT))):
-      self.assertDictEqual(lsusb.lsusb().pop(), EXPECTED_RESULT)
-
-  def testGetSerial(self):
-    with self.assertCalls(
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout(
-            ['lsusb'], timeout=10), (None, DEVICE_LIST)),
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout(
-          ['lsusb', '-v', '-s', '003:007'], timeout=10), (None, RAW_OUTPUT))):
-      self.assertEqual(lsusb.get_android_devices(), ['01d2450ea194a93b'])
-
-  def testGetLsusbSerial(self):
-    with self.assertCalls(
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout(
-            ['lsusb'], timeout=10), (None, DEVICE_LIST)),
-        (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout(
-          ['lsusb', '-v', '-s', '003:007'], timeout=10), (None, RAW_OUTPUT))):
-      out = lsusb.lsusb().pop()
-      self.assertEqual(lsusb.get_lsusb_serial(out), '01d2450ea194a93b')
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/utils/markdown.py b/systrace/catapult/devil/devil/utils/markdown.py
deleted file mode 100755
index 54e7ed5..0000000
--- a/systrace/catapult/devil/devil/utils/markdown.py
+++ /dev/null
@@ -1,320 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import imp
-import os
-import re
-import sys
-import textwrap
-import types
-
-# A markdown code block template: https://goo.gl/9EsyRi
-_CODE_BLOCK_FORMAT = '''```{language}
-{code}
-```
-'''
-
-_DEVIL_ROOT = os.path.abspath(os.path.join(
-    os.path.dirname(__file__), '..', '..'))
-
-
-def md_bold(raw_text):
-  """Returns markdown-formatted bold text."""
-  return '**%s**' % md_escape(raw_text, characters='*')
-
-
-def md_code(raw_text, language):
-  """Returns a markdown-formatted code block in the given language."""
-  return _CODE_BLOCK_FORMAT.format(
-      language=language or '',
-      code=md_escape(raw_text, characters='`'))
-
-
-def md_escape(raw_text, characters='*_'):
-  """Escapes * and _."""
-  def escape_char(m):
-    return '\\%s' % m.group(0)
-  pattern = '[%s]' % re.escape(characters)
-  return re.sub(pattern, escape_char, raw_text)
-
-
-def md_heading(raw_text, level):
-  """Returns markdown-formatted heading."""
-  adjusted_level = min(max(level, 0), 6)
-  return '%s%s%s' % (
-      '#' * adjusted_level, ' ' if adjusted_level > 0 else '', raw_text)
-
-
-def md_inline_code(raw_text):
-  """Returns markdown-formatted inline code."""
-  return '`%s`' % md_escape(raw_text, characters='`')
-
-
-def md_italic(raw_text):
-  """Returns markdown-formatted italic text."""
-  return '*%s*' % md_escape(raw_text, characters='*')
-
-
-def md_link(link_text, link_target):
-  """returns a markdown-formatted link."""
-  return '[%s](%s)' % (
-      md_escape(link_text, characters=']'),
-      md_escape(link_target, characters=')'))
-
-
-class MarkdownHelpFormatter(argparse.HelpFormatter):
-  """A really bare-bones argparse help formatter that generates valid markdown.
-
-  This will generate something like:
-
-  usage
-
-  # **section heading**:
-
-  ## **--argument-one**
-
-  ```
-  argument-one help text
-  ```
-
-  """
-
-  #override
-  def _format_usage(self, usage, actions, groups, prefix):
-    usage_text = super(MarkdownHelpFormatter, self)._format_usage(
-        usage, actions, groups, prefix)
-    return md_code(usage_text, language=None)
-
-  #override
-  def format_help(self):
-    self._root_section.heading = md_heading(self._prog, level=1)
-    return super(MarkdownHelpFormatter, self).format_help()
-
-  #override
-  def start_section(self, heading):
-    super(MarkdownHelpFormatter, self).start_section(
-        md_heading(heading, level=2))
-
-  #override
-  def _format_action(self, action):
-    lines = []
-    action_header = self._format_action_invocation(action)
-    lines.append(md_heading(action_header, level=3))
-    if action.help:
-      lines.append(md_code(self._expand_help(action), language=None))
-    lines.extend(['', ''])
-    return '\n'.join(lines)
-
-
-class MarkdownHelpAction(argparse.Action):
-  def __init__(self, option_strings,
-               dest=argparse.SUPPRESS, default=argparse.SUPPRESS,
-               **kwargs):
-    super(MarkdownHelpAction, self).__init__(
-        option_strings=option_strings,
-        dest=dest,
-        default=default,
-        nargs=0,
-        **kwargs)
-
-  def __call__(self, parser, namespace, values, option_string=None):
-    parser.formatter_class = MarkdownHelpFormatter
-    parser.print_help()
-    parser.exit()
-
-
-def add_md_help_argument(parser):
-  """Adds --md-help to the given argparse.ArgumentParser.
-
-  Running a script with --md-help will print the help text for that script
-  as valid markdown.
-
-  Args:
-    parser: The ArgumentParser to which --md-help should be added.
-  """
-  parser.add_argument('--md-help', action=MarkdownHelpAction,
-                      help='print Markdown-formatted help text and exit.')
-
-
-def load_module_from_path(module_path):
-  """Load a module given only the path name.
-
-  Also loads package modules as necessary.
-
-  Args:
-    module_path: An absolute path to a python module.
-  Returns:
-    The module object for the given path.
-  """
-  module_names = [os.path.splitext(os.path.basename(module_path))[0]]
-  d = os.path.dirname(module_path)
-
-  while os.path.exists(os.path.join(d, '__init__.py')):
-    module_names.append(os.path.basename(d))
-    d = os.path.dirname(d)
-
-  d = [d]
-
-  module = None
-  full_module_name = ''
-  for package_name in reversed(module_names):
-    if module:
-      d = module.__path__
-      full_module_name += '.'
-    r = imp.find_module(package_name, d)
-    full_module_name += package_name
-    module = imp.load_module(full_module_name, *r)
-  return module
-
-
-def md_module(module_obj, module_path=None, module_link=None):
-  """Write markdown documentation for a class.
-
-  Documents public classes and functions.
-
-  Args:
-    class_obj: a types.TypeType object for the class that should be
-      documented.
-  Returns:
-    A list of markdown-formatted lines.
-  """
-  def should_doc(name):
-    return (type(module_obj.__dict__[name]) != types.ModuleType
-            and not name.startswith('_'))
-
-  stuff_to_doc = sorted(
-    obj for name, obj in module_obj.__dict__.iteritems()
-    if should_doc(name))
-
-  classes_to_doc = []
-  functions_to_doc = []
-
-  for s in stuff_to_doc:
-    if type(s) == types.TypeType:
-      classes_to_doc.append(s)
-    elif type(s) == types.FunctionType:
-      functions_to_doc.append(s)
-
-  command = ['devil/utils/markdown.py']
-  if module_link:
-    command.extend(['--module-link', module_link])
-  if module_path:
-    command.append(os.path.relpath(module_path, _DEVIL_ROOT))
-
-  heading_text = module_obj.__name__
-  if module_link:
-    heading_text = md_link(heading_text, module_link)
-
-  content = [
-      md_heading(heading_text, level=1),
-      '',
-      md_italic('This page was autogenerated by %s'
-          % md_inline_code(' '.join(command))),
-      '',
-  ]
-
-  for c in classes_to_doc:
-    content += md_class(c)
-  for f in functions_to_doc:
-    content += md_function(f)
-
-  print '\n'.join(content)
-
-  return 0
-
-
-def md_class(class_obj):
-  """Write markdown documentation for a class.
-
-  Documents public methods. Does not currently document subclasses.
-
-  Args:
-    class_obj: a types.TypeType object for the class that should be
-      documented.
-  Returns:
-    A list of markdown-formatted lines.
-  """
-  content = [md_heading(md_escape(class_obj.__name__), level=2)]
-  content.append('')
-  if class_obj.__doc__:
-    content.extend(md_docstring(class_obj.__doc__))
-
-  def should_doc(name, obj):
-    return (type(obj) == types.FunctionType
-            and (name.startswith('__') or not name.startswith('_')))
-
-  methods_to_doc = sorted(
-      obj for name, obj in class_obj.__dict__.iteritems()
-      if should_doc(name, obj))
-
-  for m in methods_to_doc:
-    content.extend(md_function(m, class_obj=class_obj))
-
-  return content
-
-
-def md_docstring(docstring):
-  """Write a markdown-formatted docstring.
-
-  Returns:
-    A list of markdown-formatted lines.
-  """
-  content = []
-  lines = textwrap.dedent(docstring).splitlines()
-  content.append(md_escape(lines[0]))
-  lines = lines[1:]
-  while lines and (not lines[0] or lines[0].isspace()):
-    lines = lines[1:]
-
-  if not all(l.isspace() for l in lines):
-    content.append(md_code('\n'.join(lines), language=None))
-    content.append('')
-  return content
-
-
-def md_function(func_obj, class_obj=None):
-  """Write markdown documentation for a function.
-
-  Args:
-    func_obj: a types.FunctionType object for the function that should be
-      documented.
-  Returns:
-    A list of markdown-formatted lines.
-  """
-  if class_obj:
-    heading_text = '%s.%s' % (class_obj.__name__, func_obj.__name__)
-  else:
-    heading_text = func_obj.__name__
-  content = [md_heading(md_escape(heading_text), level=3)]
-  content.append('')
-
-  if func_obj.__doc__:
-    content.extend(md_docstring(func_obj.__doc__))
-
-  return content
-
-
-def main(raw_args):
-  """Write markdown documentation for the module at the provided path.
-
-  Args:
-    raw_args: the raw command-line args. Usually sys.argv[1:].
-  Returns:
-    An integer exit code. 0 for success, non-zero for failure.
-  """
-  parser = argparse.ArgumentParser()
-  parser.add_argument('--module-link')
-  parser.add_argument('module_path', type=os.path.realpath)
-  args = parser.parse_args(raw_args)
-
-  return md_module(
-      load_module_from_path(args.module_path),
-      module_link=args.module_link)
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
-
diff --git a/systrace/catapult/devil/devil/utils/markdown_test.py b/systrace/catapult/devil/devil/utils/markdown_test.py
deleted file mode 100755
index 323776c..0000000
--- a/systrace/catapult/devil/devil/utils/markdown_test.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-import textwrap
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
-
-from devil.utils import markdown
-
-
-class MarkdownTest(unittest.TestCase):
-
-  def testBold(self):
-    raw = 'foo'
-    self.assertEquals('**foo**', markdown.md_bold(raw))
-
-  def testBoldContainsStars(self):
-    raw = '*foo*'
-    self.assertEquals('**\\*foo\\***', markdown.md_bold(raw))
-
-  def testCode(self):
-    raw = textwrap.dedent("""\
-        class MarkdownTest(unittest.TestCase):
-          def testCode(self):
-            pass""")
-
-    expected = textwrap.dedent("""\
-        ```python
-        class MarkdownTest(unittest.TestCase):
-          def testCode(self):
-            pass
-        ```
-        """)
-    actual = markdown.md_code(raw, language='python')
-    self.assertEquals(expected, actual)
-
-  def testCodeContainsTicks(self):
-    raw = textwrap.dedent("""\
-        This is sample markdown.
-        ```c
-        // This is a sample code block.
-        int main(int argc, char** argv) {
-          return 0;
-        }
-        ```""")
-
-    expected = textwrap.dedent("""\
-        ```
-        This is sample markdown.
-        \\`\\`\\`c
-        // This is a sample code block.
-        int main(int argc, char** argv) {
-          return 0;
-        }
-        \\`\\`\\`
-        ```
-        """)
-    actual = markdown.md_code(raw, language=None)
-    self.assertEquals(expected, actual)
-
-  def testEscape(self):
-    raw = 'text_with_underscores *and stars*'
-    expected = 'text\\_with\\_underscores \\*and stars\\*'
-    actual = markdown.md_escape(raw)
-    self.assertEquals(expected, actual)
-
-  def testHeading1(self):
-    raw = 'Heading 1'
-    self.assertEquals('# Heading 1', markdown.md_heading(raw, level=1))
-
-  def testHeading5(self):
-    raw = 'Heading 5'
-    self.assertEquals('##### Heading 5', markdown.md_heading(raw, level=5))
-
-  def testHeading10(self):
-    raw = 'Heading 10'
-    self.assertEquals('###### Heading 10', markdown.md_heading(raw, level=10))
-
-  def testInlineCode(self):
-    raw = 'devil.utils.markdown_test'
-    self.assertEquals(
-        '`devil.utils.markdown_test`', markdown.md_inline_code(raw))
-
-  def testInlineCodeContainsTicks(self):
-    raw = 'this contains `backticks`'
-    self.assertEquals(
-        '`this contains \\`backticks\\``', markdown.md_inline_code(raw))
-
-  def testItalic(self):
-    raw = 'bar'
-    self.assertEquals('*bar*', markdown.md_italic(raw))
-
-  def testItalicContainsStars(self):
-    raw = '*bar*'
-    self.assertEquals('*\\*bar\\**', markdown.md_italic(raw))
-
-  def testLink(self):
-    link_text = 'Devil home'
-    link_target = (
-        'https://github.com/catapult-project/catapult/tree/master/devil')
-    expected = (
-        '[Devil home]'
-        '(https://github.com/catapult-project/catapult/tree/master/devil)')
-    self.assertEquals(expected, markdown.md_link(link_text, link_target))
-
-  def testLinkTextContainsBracket(self):
-    link_text = 'foo [] bar'
-    link_target = 'https://www.google.com'
-    expected = '[foo [\\] bar](https://www.google.com)'
-    self.assertEquals(expected, markdown.md_link(link_text, link_target))
-
-
-if __name__ == '__main__':
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/devil/devil/utils/mock_calls.py b/systrace/catapult/devil/devil/utils/mock_calls.py
deleted file mode 100644
index 5ae951e..0000000
--- a/systrace/catapult/devil/devil/utils/mock_calls.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-A test facility to assert call sequences while mocking their behavior.
-"""
-
-import unittest
-
-from devil import devil_env
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-class TestCase(unittest.TestCase):
-  """Adds assertCalls to TestCase objects."""
-  class _AssertCalls(object):
-
-    def __init__(self, test_case, expected_calls, watched):
-      def call_action(pair):
-        if isinstance(pair, type(mock.call)):
-          return (pair, None)
-        else:
-          return pair
-
-      def do_check(call):
-        def side_effect(*args, **kwargs):
-          received_call = call(*args, **kwargs)
-          self._test_case.assertTrue(
-              self._expected_calls,
-              msg=('Unexpected call: %s' % str(received_call)))
-          expected_call, action = self._expected_calls.pop(0)
-          self._test_case.assertTrue(
-              received_call == expected_call,
-              msg=('Expected call mismatch:\n'
-                   '  expected: %s\n'
-                   '  received: %s\n'
-                   % (str(expected_call), str(received_call))))
-          if callable(action):
-            return action(*args, **kwargs)
-          else:
-            return action
-        return side_effect
-
-      self._test_case = test_case
-      self._expected_calls = [call_action(pair) for pair in expected_calls]
-      watched = watched.copy()  # do not pollute the caller's dict
-      watched.update((call.parent.name, call.parent)
-                     for call, _ in self._expected_calls)
-      self._patched = [test_case.patch_call(call, side_effect=do_check(call))
-                       for call in watched.itervalues()]
-
-    def __enter__(self):
-      for patch in self._patched:
-        patch.__enter__()
-      return self
-
-    def __exit__(self, exc_type, exc_val, exc_tb):
-      for patch in self._patched:
-        patch.__exit__(exc_type, exc_val, exc_tb)
-      if exc_type is None:
-        missing = ''.join('  expected: %s\n' % str(call)
-                          for call, _ in self._expected_calls)
-        self._test_case.assertFalse(
-            missing,
-            msg='Expected calls not found:\n' + missing)
-
-  def __init__(self, *args, **kwargs):
-    super(TestCase, self).__init__(*args, **kwargs)
-    self.call = mock.call.self
-    self._watched = {}
-
-  def call_target(self, call):
-    """Resolve a self.call instance to the target it represents.
-
-    Args:
-      call: a self.call instance, e.g. self.call.adb.Shell
-
-    Returns:
-      The target object represented by the call, e.g. self.adb.Shell
-
-    Raises:
-      ValueError if the path of the call does not start with "self", i.e. the
-          target of the call is external to the self object.
-      AttributeError if the path of the call does not specify a valid
-          chain of attributes (without any calls) starting from "self".
-    """
-    path = call.name.split('.')
-    if path.pop(0) != 'self':
-      raise ValueError("Target %r outside of 'self' object" % call.name)
-    target = self
-    for attr in path:
-      target = getattr(target, attr)
-    return target
-
-  def patch_call(self, call, **kwargs):
-    """Patch the target of a mock.call instance.
-
-    Args:
-      call: a mock.call instance identifying a target to patch
-      Extra keyword arguments are processed by mock.patch
-
-    Returns:
-      A context manager to mock/unmock the target of the call
-    """
-    if call.name.startswith('self.'):
-      target = self.call_target(call.parent)
-      _, attribute = call.name.rsplit('.', 1)
-      if (hasattr(type(target), attribute)
-          and isinstance(getattr(type(target), attribute), property)):
-        return mock.patch.object(
-            type(target), attribute, new_callable=mock.PropertyMock, **kwargs)
-      else:
-        return mock.patch.object(target, attribute, **kwargs)
-    else:
-      return mock.patch(call.name, **kwargs)
-
-  def watchCalls(self, calls):
-    """Add calls to the set of watched calls.
-
-    Args:
-      calls: a sequence of mock.call instances identifying targets to watch
-    """
-    self._watched.update((call.name, call) for call in calls)
-
-  def watchMethodCalls(self, call, ignore=None):
-    """Watch all public methods of the target identified by a self.call.
-
-    Args:
-      call: a self.call instance indetifying an object
-      ignore: a list of public methods to ignore when watching for calls
-    """
-    target = self.call_target(call)
-    if ignore is None:
-      ignore = []
-    self.watchCalls(getattr(call, method)
-                    for method in dir(target.__class__)
-                    if not method.startswith('_') and not method in ignore)
-
-  def clearWatched(self):
-    """Clear the set of watched calls."""
-    self._watched = {}
-
-  def assertCalls(self, *calls):
-    """A context manager to assert that a sequence of calls is made.
-
-    During the assertion, a number of functions and methods will be "watched",
-    and any calls made to them is expected to appear---in the exact same order,
-    and with the exact same arguments---as specified by the argument |calls|.
-
-    By default, the targets of all expected calls are watched. Further targets
-    to watch may be added using watchCalls and watchMethodCalls.
-
-    Optionaly, each call may be accompanied by an action. If the action is a
-    (non-callable) value, this value will be used as the return value given to
-    the caller when the matching call is found. Alternatively, if the action is
-    a callable, the action will be then called with the same arguments as the
-    intercepted call, so that it can provide a return value or perform other
-    side effects. If the action is missing, a return value of None is assumed.
-
-    Note that mock.Mock objects are often convenient to use as a callable
-    action, e.g. to raise exceptions or return other objects which are
-    themselves callable.
-
-    Args:
-      calls: each argument is either a pair (expected_call, action) or just an
-          expected_call, where expected_call is a mock.call instance.
-
-    Raises:
-      AssertionError if the watched targets do not receive the exact sequence
-          of calls specified. Missing calls, extra calls, and calls with
-          mismatching arguments, all cause the assertion to fail.
-    """
-    return self._AssertCalls(self, calls, self._watched)
-
-  def assertCall(self, call, action=None):
-    return self.assertCalls((call, action))
-
diff --git a/systrace/catapult/devil/devil/utils/mock_calls_test.py b/systrace/catapult/devil/devil/utils/mock_calls_test.py
deleted file mode 100755
index 8eb4fc9..0000000
--- a/systrace/catapult/devil/devil/utils/mock_calls_test.py
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""
-Unit tests for the contents of mock_calls.py.
-"""
-
-import logging
-import os
-import unittest
-
-from devil import devil_env
-from devil.android.sdk import version_codes
-from devil.utils import mock_calls
-
-with devil_env.SysPath(devil_env.PYMOCK_PATH):
-  import mock  # pylint: disable=import-error
-
-
-class _DummyAdb(object):
-
-  def __str__(self):
-    return '0123456789abcdef'
-
-  def Push(self, host_path, device_path):
-    logging.debug('(device %s) pushing %r to %r', self, host_path, device_path)
-
-  def IsOnline(self):
-    logging.debug('(device %s) checking device online', self)
-    return True
-
-  def Shell(self, cmd):
-    logging.debug('(device %s) running command %r', self, cmd)
-    return "nice output\n"
-
-  def Reboot(self):
-    logging.debug('(device %s) rebooted!', self)
-
-  @property
-  def build_version_sdk(self):
-    logging.debug('(device %s) getting build_version_sdk', self)
-    return version_codes.LOLLIPOP
-
-
-class TestCaseWithAssertCallsTest(mock_calls.TestCase):
-
-  def setUp(self):
-    self.adb = _DummyAdb()
-
-  def ShellError(self):
-    def action(cmd):
-      raise ValueError('(device %s) command %r is not nice' % (self.adb, cmd))
-    return action
-
-  def get_answer(self):
-    logging.debug("called 'get_answer' of %r object", self)
-    return 42
-
-  def echo(self, thing):
-    logging.debug("called 'echo' of %r object", self)
-    return thing
-
-  def testCallTarget_succeds(self):
-    self.assertEquals(self.adb.Shell,
-                      self.call_target(self.call.adb.Shell))
-
-  def testCallTarget_failsExternal(self):
-    with self.assertRaises(ValueError):
-      self.call_target(mock.call.sys.getcwd)
-
-  def testCallTarget_failsUnknownAttribute(self):
-    with self.assertRaises(AttributeError):
-      self.call_target(self.call.adb.Run)
-
-  def testCallTarget_failsIntermediateCalls(self):
-    with self.assertRaises(AttributeError):
-      self.call_target(self.call.adb.RunShell('cmd').append)
-
-  def testPatchCall_method(self):
-    self.assertEquals(42, self.get_answer())
-    with self.patch_call(self.call.get_answer, return_value=123):
-      self.assertEquals(123, self.get_answer())
-    self.assertEquals(42, self.get_answer())
-
-  def testPatchCall_attribute_method(self):
-    with self.patch_call(self.call.adb.Shell, return_value='hello'):
-      self.assertEquals('hello', self.adb.Shell('echo hello'))
-
-  def testPatchCall_global(self):
-    with self.patch_call(mock.call.os.getcwd, return_value='/some/path'):
-      self.assertEquals('/some/path', os.getcwd())
-
-  def testPatchCall_withSideEffect(self):
-    with self.patch_call(self.call.adb.Shell, side_effect=ValueError):
-      with self.assertRaises(ValueError):
-        self.adb.Shell('echo hello')
-
-  def testPatchCall_property(self):
-    self.assertEquals(version_codes.LOLLIPOP, self.adb.build_version_sdk)
-    with self.patch_call(
-        self.call.adb.build_version_sdk,
-        return_value=version_codes.KITKAT):
-      self.assertEquals(version_codes.KITKAT, self.adb.build_version_sdk)
-    self.assertEquals(version_codes.LOLLIPOP, self.adb.build_version_sdk)
-
-  def testAssertCalls_succeeds_simple(self):
-    self.assertEquals(42, self.get_answer())
-    with self.assertCall(self.call.get_answer(), 123):
-      self.assertEquals(123, self.get_answer())
-    self.assertEquals(42, self.get_answer())
-
-  def testAssertCalls_succeeds_multiple(self):
-    with self.assertCalls(
-        (mock.call.os.getcwd(), '/some/path'),
-        (self.call.echo('hello'), 'hello'),
-        (self.call.get_answer(), 11),
-        self.call.adb.Push('this_file', 'that_file'),
-        (self.call.get_answer(), 12)):
-      self.assertEquals(os.getcwd(), '/some/path')
-      self.assertEquals('hello', self.echo('hello'))
-      self.assertEquals(11, self.get_answer())
-      self.adb.Push('this_file', 'that_file')
-      self.assertEquals(12, self.get_answer())
-
-  def testAsserCalls_succeeds_withAction(self):
-    with self.assertCall(
-        self.call.adb.Shell('echo hello'), self.ShellError()):
-      with self.assertRaises(ValueError):
-        self.adb.Shell('echo hello')
-
-  def testAssertCalls_fails_tooManyCalls(self):
-    with self.assertRaises(AssertionError):
-      with self.assertCalls(self.call.adb.IsOnline()):
-        self.adb.IsOnline()
-        self.adb.IsOnline()
-
-  def testAssertCalls_fails_tooFewCalls(self):
-    with self.assertRaises(AssertionError):
-      with self.assertCalls(self.call.adb.IsOnline()):
-        pass
-
-  def testAssertCalls_succeeds_extraCalls(self):
-    # we are not watching Reboot, so the assertion succeeds
-    with self.assertCalls(self.call.adb.IsOnline()):
-      self.adb.IsOnline()
-      self.adb.Reboot()
-
-  def testAssertCalls_fails_extraCalls(self):
-    self.watchCalls([self.call.adb.Reboot])
-    # this time we are also watching Reboot, so the assertion fails
-    with self.assertRaises(AssertionError):
-      with self.assertCalls(self.call.adb.IsOnline()):
-        self.adb.IsOnline()
-        self.adb.Reboot()
-
-  def testAssertCalls_succeeds_NoCalls(self):
-    self.watchMethodCalls(self.call.adb)  # we are watching all adb methods
-    with self.assertCalls():
-      pass
-
-  def testAssertCalls_fails_NoCalls(self):
-    self.watchMethodCalls(self.call.adb)
-    with self.assertRaises(AssertionError):
-      with self.assertCalls():
-        self.adb.IsOnline()
-
-
-if __name__ == '__main__':
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
-
diff --git a/systrace/catapult/devil/devil/utils/parallelizer.py b/systrace/catapult/devil/devil/utils/parallelizer.py
deleted file mode 100644
index 678066c..0000000
--- a/systrace/catapult/devil/devil/utils/parallelizer.py
+++ /dev/null
@@ -1,265 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-""" Wrapper that allows method execution in parallel.
-
-This class wraps a list of objects of the same type, emulates their
-interface, and executes any functions called on the objects in parallel
-in ReraiserThreads.
-
-This means that, given a list of objects:
-
-  class Foo:
-    def __init__(self):
-      self.baz = Baz()
-
-    def bar(self, my_param):
-      // do something
-
-  list_of_foos = [Foo(1), Foo(2), Foo(3)]
-
-we can take a sequential operation on that list of objects:
-
-  for f in list_of_foos:
-    f.bar('Hello')
-
-and run it in parallel across all of the objects:
-
-  Parallelizer(list_of_foos).bar('Hello')
-
-It can also handle (non-method) attributes of objects, so that this:
-
-  for f in list_of_foos:
-    f.baz.myBazMethod()
-
-can be run in parallel with:
-
-  Parallelizer(list_of_foos).baz.myBazMethod()
-
-Because it emulates the interface of the wrapped objects, a Parallelizer
-can be passed to a method or function that takes objects of that type:
-
-  def DoesSomethingWithFoo(the_foo):
-    the_foo.bar('Hello')
-    the_foo.bar('world')
-    the_foo.baz.myBazMethod
-
-  DoesSomethingWithFoo(Parallelizer(list_of_foos))
-
-Note that this class spins up a thread for each object. Using this class
-to parallelize operations that are already fast will incur a net performance
-penalty.
-
-"""
-# pylint: disable=protected-access
-
-from devil.utils import reraiser_thread
-from devil.utils import watchdog_timer
-
-_DEFAULT_TIMEOUT = 30
-_DEFAULT_RETRIES = 3
-
-
-class Parallelizer(object):
-  """Allows parallel execution of method calls across a group of objects."""
-
-  def __init__(self, objs):
-    self._orig_objs = objs
-    self._objs = objs
-
-  def __getattr__(self, name):
-    """Emulate getting the |name| attribute of |self|.
-
-    Args:
-      name: The name of the attribute to retrieve.
-    Returns:
-      A Parallelizer emulating the |name| attribute of |self|.
-    """
-    self.pGet(None)
-
-    r = type(self)(self._orig_objs)
-    r._objs = [getattr(o, name) for o in self._objs]
-    return r
-
-  def __getitem__(self, index):
-    """Emulate getting the value of |self| at |index|.
-
-    Returns:
-      A Parallelizer emulating the value of |self| at |index|.
-    """
-    self.pGet(None)
-
-    r = type(self)(self._orig_objs)
-    r._objs = [o[index] for o in self._objs]
-    return r
-
-  def __call__(self, *args, **kwargs):
-    """Emulate calling |self| with |args| and |kwargs|.
-
-    Note that this call is asynchronous. Call pFinish on the return value to
-    block until the call finishes.
-
-    Returns:
-      A Parallelizer wrapping the ReraiserThreadGroup running the call in
-      parallel.
-    Raises:
-      AttributeError if the wrapped objects aren't callable.
-    """
-    self.pGet(None)
-
-    for o in self._objs:
-      if not callable(o):
-        raise AttributeError("'%s' is not callable" % o.__name__)
-
-    r = type(self)(self._orig_objs)
-    r._objs = reraiser_thread.ReraiserThreadGroup(
-        [reraiser_thread.ReraiserThread(
-            o, args=args, kwargs=kwargs,
-            name='%s.%s' % (str(d), o.__name__))
-         for d, o in zip(self._orig_objs, self._objs)])
-    r._objs.StartAll()
-    return r
-
-  def pFinish(self, timeout):
-    """Finish any outstanding asynchronous operations.
-
-    Args:
-      timeout: The maximum number of seconds to wait for an individual
-               result to return, or None to wait forever.
-    Returns:
-      self, now emulating the return values.
-    """
-    self._assertNoShadow('pFinish')
-    if isinstance(self._objs, reraiser_thread.ReraiserThreadGroup):
-      self._objs.JoinAll()
-      self._objs = self._objs.GetAllReturnValues(
-          watchdog_timer.WatchdogTimer(timeout))
-    return self
-
-  def pGet(self, timeout):
-    """Get the current wrapped objects.
-
-    Args:
-      timeout: Same as |pFinish|.
-    Returns:
-      A list of the results, in order of the provided devices.
-    Raises:
-      Any exception raised by any of the called functions.
-    """
-    self._assertNoShadow('pGet')
-    self.pFinish(timeout)
-    return self._objs
-
-  def pMap(self, f, *args, **kwargs):
-    """Map a function across the current wrapped objects in parallel.
-
-    This calls f(o, *args, **kwargs) for each o in the set of wrapped objects.
-
-    Note that this call is asynchronous. Call pFinish on the return value to
-    block until the call finishes.
-
-    Args:
-      f: The function to call.
-      args: The positional args to pass to f.
-      kwargs: The keyword args to pass to f.
-    Returns:
-      A Parallelizer wrapping the ReraiserThreadGroup running the map in
-      parallel.
-    """
-    self._assertNoShadow('pMap')
-    r = type(self)(self._orig_objs)
-    r._objs = reraiser_thread.ReraiserThreadGroup(
-        [reraiser_thread.ReraiserThread(
-            f, args=tuple([o] + list(args)), kwargs=kwargs,
-            name='%s(%s)' % (f.__name__, d))
-         for d, o in zip(self._orig_objs, self._objs)])
-    r._objs.StartAll()
-    return r
-
-  def _assertNoShadow(self, attr_name):
-    """Ensures that |attr_name| isn't shadowing part of the wrapped obejcts.
-
-    If the wrapped objects _do_ have an |attr_name| attribute, it will be
-    inaccessible to clients.
-
-    Args:
-      attr_name: The attribute to check.
-    Raises:
-      AssertionError if the wrapped objects have an attribute named 'attr_name'
-      or '_assertNoShadow'.
-    """
-    if isinstance(self._objs, reraiser_thread.ReraiserThreadGroup):
-      assert not hasattr(self._objs, '_assertNoShadow')
-      assert not hasattr(self._objs, attr_name)
-    else:
-      assert not any(hasattr(o, '_assertNoShadow') for o in self._objs)
-      assert not any(hasattr(o, attr_name) for o in self._objs)
-
-
-class SyncParallelizer(Parallelizer):
-  """A Parallelizer that blocks on function calls."""
-
-  def __enter__(self):
-    """Emulate entering the context of |self|.
-
-    Note that this call is synchronous.
-
-    Returns:
-      A Parallelizer emulating the value returned from entering into the
-      context of |self|.
-    """
-    r = type(self)(self._orig_objs)
-    r._objs = [o.__enter__ for o in r._objs]
-    return r.__call__()
-
-  def __exit__(self, exc_type, exc_val, exc_tb):
-    """Emulate exiting the context of |self|.
-
-    Note that this call is synchronous.
-
-    Args:
-      exc_type: the exception type.
-      exc_val: the exception value.
-      exc_tb: the exception traceback.
-    """
-    r = type(self)(self._orig_objs)
-    r._objs = [o.__exit__ for o in r._objs]
-    r.__call__(exc_type, exc_val, exc_tb)
-
-  # override
-  def __call__(self, *args, **kwargs):
-    """Emulate calling |self| with |args| and |kwargs|.
-
-    Note that this call is synchronous.
-
-    Returns:
-      A Parallelizer emulating the value returned from calling |self| with
-      |args| and |kwargs|.
-    Raises:
-      AttributeError if the wrapped objects aren't callable.
-    """
-    r = super(SyncParallelizer, self).__call__(*args, **kwargs)
-    r.pFinish(None)
-    return r
-
-  # override
-  def pMap(self, f, *args, **kwargs):
-    """Map a function across the current wrapped objects in parallel.
-
-    This calls f(o, *args, **kwargs) for each o in the set of wrapped objects.
-
-    Note that this call is synchronous.
-
-    Args:
-      f: The function to call.
-      args: The positional args to pass to f.
-      kwargs: The keyword args to pass to f.
-    Returns:
-      A Parallelizer wrapping the ReraiserThreadGroup running the map in
-      parallel.
-    """
-    r = super(SyncParallelizer, self).pMap(f, *args, **kwargs)
-    r.pFinish(None)
-    return r
-
diff --git a/systrace/catapult/devil/devil/utils/parallelizer_test.py b/systrace/catapult/devil/devil/utils/parallelizer_test.py
deleted file mode 100644
index acbb986..0000000
--- a/systrace/catapult/devil/devil/utils/parallelizer_test.py
+++ /dev/null
@@ -1,190 +0,0 @@
-#! /usr/bin/env python
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unit tests for the contents of parallelizer.py."""
-
-# pylint: disable=protected-access
-# pylint: disable=unused-argument
-
-import contextlib
-import os
-import tempfile
-import time
-import sys
-import unittest
-
-if __name__ == '__main__':
-  sys.path.append(os.path.abspath(
-      os.path.join(os.path.dirname(__file__), '..', '..')))
-
-from devil.utils import parallelizer
-
-
-class ParallelizerTestObject(object):
-  """Class used to test parallelizer.Parallelizer."""
-
-  parallel = parallelizer.Parallelizer
-
-  def __init__(self, thing, completion_file_name=None):
-    self._thing = thing
-    self._completion_file_name = completion_file_name
-    self.helper = ParallelizerTestObjectHelper(thing)
-
-  @staticmethod
-  def doReturn(what):
-    return what
-
-  @classmethod
-  def doRaise(cls, what):
-    raise what
-
-  def doSetTheThing(self, new_thing):
-    self._thing = new_thing
-
-  def doReturnTheThing(self):
-    return self._thing
-
-  def doRaiseTheThing(self):
-    raise self._thing
-
-  def doRaiseIfExceptionElseSleepFor(self, sleep_duration):
-    if isinstance(self._thing, Exception):
-      raise self._thing
-    time.sleep(sleep_duration)
-    self._write_completion_file()
-    return self._thing
-
-  def _write_completion_file(self):
-    if self._completion_file_name and len(self._completion_file_name):
-      with open(self._completion_file_name, 'w+b') as completion_file:
-        completion_file.write('complete')
-
-  def __getitem__(self, index):
-    return self._thing[index]
-
-  def __str__(self):
-    return type(self).__name__
-
-
-class ParallelizerTestObjectHelper(object):
-
-  def __init__(self, thing):
-    self._thing = thing
-
-  def doReturnStringThing(self):
-    return str(self._thing)
-
-
-class ParallelizerTest(unittest.TestCase):
-
-  def testInitEmptyList(self):
-    r = parallelizer.Parallelizer([]).replace('a', 'b').pGet(0.1)
-    self.assertEquals([], r)
-
-  def testMethodCall(self):
-    test_data = ['abc_foo', 'def_foo', 'ghi_foo']
-    expected = ['abc_bar', 'def_bar', 'ghi_bar']
-    r = parallelizer.Parallelizer(test_data).replace('_foo', '_bar').pGet(0.1)
-    self.assertEquals(expected, r)
-
-  def testMutate(self):
-    devices = [ParallelizerTestObject(True) for _ in xrange(0, 10)]
-    self.assertTrue(all(d.doReturnTheThing() for d in devices))
-    ParallelizerTestObject.parallel(devices).doSetTheThing(False).pFinish(1)
-    self.assertTrue(not any(d.doReturnTheThing() for d in devices))
-
-  def testAllReturn(self):
-    devices = [ParallelizerTestObject(True) for _ in xrange(0, 10)]
-    results = ParallelizerTestObject.parallel(
-        devices).doReturnTheThing().pGet(1)
-    self.assertTrue(isinstance(results, list))
-    self.assertEquals(10, len(results))
-    self.assertTrue(all(results))
-
-  def testAllRaise(self):
-    devices = [ParallelizerTestObject(Exception('thing %d' % i))
-               for i in xrange(0, 10)]
-    p = ParallelizerTestObject.parallel(devices).doRaiseTheThing()
-    with self.assertRaises(Exception):
-      p.pGet(1)
-
-  def testOneFailOthersComplete(self):
-    parallel_device_count = 10
-    exception_index = 7
-    exception_msg = 'thing %d' % exception_index
-
-    try:
-      completion_files = [tempfile.NamedTemporaryFile(delete=False)
-                          for _ in xrange(0, parallel_device_count)]
-      devices = [
-          ParallelizerTestObject(
-              i if i != exception_index else Exception(exception_msg),
-              completion_files[i].name)
-          for i in xrange(0, parallel_device_count)]
-      for f in completion_files:
-        f.close()
-      p = ParallelizerTestObject.parallel(devices)
-      with self.assertRaises(Exception) as e:
-        p.doRaiseIfExceptionElseSleepFor(2).pGet(3)
-      self.assertTrue(exception_msg in str(e.exception))
-      for i in xrange(0, parallel_device_count):
-        with open(completion_files[i].name) as f:
-          if i == exception_index:
-            self.assertEquals('', f.read())
-          else:
-            self.assertEquals('complete', f.read())
-    finally:
-      for f in completion_files:
-        os.remove(f.name)
-
-  def testReusable(self):
-    devices = [ParallelizerTestObject(True) for _ in xrange(0, 10)]
-    p = ParallelizerTestObject.parallel(devices)
-    results = p.doReturn(True).pGet(1)
-    self.assertTrue(all(results))
-    results = p.doReturn(True).pGet(1)
-    self.assertTrue(all(results))
-    with self.assertRaises(Exception):
-      results = p.doRaise(Exception('reusableTest')).pGet(1)
-
-  def testContained(self):
-    devices = [ParallelizerTestObject(i) for i in xrange(0, 10)]
-    results = (ParallelizerTestObject.parallel(devices).helper
-        .doReturnStringThing().pGet(1))
-    self.assertTrue(isinstance(results, list))
-    self.assertEquals(10, len(results))
-    for i in xrange(0, 10):
-      self.assertEquals(str(i), results[i])
-
-  def testGetItem(self):
-    devices = [ParallelizerTestObject(range(i, i + 10)) for i in xrange(0, 10)]
-    results = ParallelizerTestObject.parallel(devices)[9].pGet(1)
-    self.assertEquals(range(9, 19), results)
-
-
-class SyncParallelizerTest(unittest.TestCase):
-
-  def testContextManager(self):
-    in_context = [False for i in xrange(10)]
-
-    @contextlib.contextmanager
-    def enter_into_context(i):
-      in_context[i] = True
-      try:
-        yield
-      finally:
-        in_context[i] = False
-
-    parallelized_context = parallelizer.SyncParallelizer(
-        [enter_into_context(i) for i in xrange(10)])
-
-    with parallelized_context:
-      self.assertTrue(all(in_context))
-    self.assertFalse(any(in_context))
-
-
-if __name__ == '__main__':
-  unittest.main(verbosity=2)
-
diff --git a/systrace/catapult/devil/devil/utils/reraiser_thread.py b/systrace/catapult/devil/devil/utils/reraiser_thread.py
deleted file mode 100644
index 56d95f3..0000000
--- a/systrace/catapult/devil/devil/utils/reraiser_thread.py
+++ /dev/null
@@ -1,228 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Thread and ThreadGroup that reraise exceptions on the main thread."""
-# pylint: disable=W0212
-
-import logging
-import sys
-import threading
-import time
-import traceback
-
-from devil.utils import watchdog_timer
-
-
-class TimeoutError(Exception):
-  """Module-specific timeout exception."""
-  pass
-
-
-def LogThreadStack(thread, error_log_func=logging.critical):
-  """Log the stack for the given thread.
-
-  Args:
-    thread: a threading.Thread instance.
-    error_log_func: Logging function when logging errors.
-  """
-  stack = sys._current_frames()[thread.ident]
-  error_log_func('*' * 80)
-  error_log_func('Stack dump for thread %r', thread.name)
-  error_log_func('*' * 80)
-  for filename, lineno, name, line in traceback.extract_stack(stack):
-    error_log_func('File: "%s", line %d, in %s', filename, lineno, name)
-    if line:
-      error_log_func('  %s', line.strip())
-  error_log_func('*' * 80)
-
-
-class ReraiserThread(threading.Thread):
-  """Thread class that can reraise exceptions."""
-
-  def __init__(self, func, args=None, kwargs=None, name=None):
-    """Initialize thread.
-
-    Args:
-      func: callable to call on a new thread.
-      args: list of positional arguments for callable, defaults to empty.
-      kwargs: dictionary of keyword arguments for callable, defaults to empty.
-      name: thread name, defaults to Thread-N.
-    """
-    if not name and func.__name__ != '<lambda>':
-      name = func.__name__
-    super(ReraiserThread, self).__init__(name=name)
-    if not args:
-      args = []
-    if not kwargs:
-      kwargs = {}
-    self.daemon = True
-    self._func = func
-    self._args = args
-    self._kwargs = kwargs
-    self._ret = None
-    self._exc_info = None
-    self._thread_group = None
-
-  def ReraiseIfException(self):
-    """Reraise exception if an exception was raised in the thread."""
-    if self._exc_info:
-      raise self._exc_info[0], self._exc_info[1], self._exc_info[2]
-
-  def GetReturnValue(self):
-    """Reraise exception if present, otherwise get the return value."""
-    self.ReraiseIfException()
-    return self._ret
-
-  # override
-  def run(self):
-    """Overrides Thread.run() to add support for reraising exceptions."""
-    try:
-      self._ret = self._func(*self._args, **self._kwargs)
-    except:  # pylint: disable=W0702
-      self._exc_info = sys.exc_info()
-
-
-class ReraiserThreadGroup(object):
-  """A group of ReraiserThread objects."""
-
-  def __init__(self, threads=None):
-    """Initialize thread group.
-
-    Args:
-      threads: a list of ReraiserThread objects; defaults to empty.
-    """
-    self._threads = []
-    # Set when a thread from one group has called JoinAll on another. It is used
-    # to detect when a there is a TimeoutRetryThread active that links to the
-    # current thread.
-    self.blocked_parent_thread_group = None
-    if threads:
-      for thread in threads:
-        self.Add(thread)
-
-  def Add(self, thread):
-    """Add a thread to the group.
-
-    Args:
-      thread: a ReraiserThread object.
-    """
-    assert thread._thread_group is None
-    thread._thread_group = self
-    self._threads.append(thread)
-
-  def StartAll(self, will_block=False):
-    """Start all threads.
-
-    Args:
-      will_block: Whether the calling thread will subsequently block on this
-        thread group. Causes the active ReraiserThreadGroup (if there is one)
-        to be marked as blocking on this thread group.
-    """
-    if will_block:
-      # Multiple threads blocking on the same outer thread should not happen in
-      # practice.
-      assert not self.blocked_parent_thread_group
-      self.blocked_parent_thread_group = CurrentThreadGroup()
-    for thread in self._threads:
-      thread.start()
-
-  def _JoinAll(self, watcher=None, timeout=None):
-    """Join all threads without stack dumps.
-
-    Reraises exceptions raised by the child threads and supports breaking
-    immediately on exceptions raised on the main thread.
-
-    Args:
-      watcher: Watchdog object providing the thread timeout. If none is
-          provided, the thread will never be timed out.
-      timeout: An optional number of seconds to wait before timing out the join
-          operation. This will not time out the threads.
-    """
-    if watcher is None:
-      watcher = watchdog_timer.WatchdogTimer(None)
-    alive_threads = self._threads[:]
-    end_time = (time.time() + timeout) if timeout else None
-    try:
-      while alive_threads and (end_time is None or end_time > time.time()):
-        for thread in alive_threads[:]:
-          if watcher.IsTimedOut():
-            raise TimeoutError('Timed out waiting for %d of %d threads.' %
-                               (len(alive_threads), len(self._threads)))
-          # Allow the main thread to periodically check for interrupts.
-          thread.join(0.1)
-          if not thread.isAlive():
-            alive_threads.remove(thread)
-      # All threads are allowed to complete before reraising exceptions.
-      for thread in self._threads:
-        thread.ReraiseIfException()
-    finally:
-      self.blocked_parent_thread_group = None
-
-  def IsAlive(self):
-    """Check whether any of the threads are still alive.
-
-    Returns:
-      Whether any of the threads are still alive.
-    """
-    return any(t.isAlive() for t in self._threads)
-
-  def JoinAll(self, watcher=None, timeout=None,
-              error_log_func=logging.critical):
-    """Join all threads.
-
-    Reraises exceptions raised by the child threads and supports breaking
-    immediately on exceptions raised on the main thread. Unfinished threads'
-    stacks will be logged on watchdog timeout.
-
-    Args:
-      watcher: Watchdog object providing the thread timeout. If none is
-          provided, the thread will never be timed out.
-      timeout: An optional number of seconds to wait before timing out the join
-          operation. This will not time out the threads.
-      error_log_func: Logging function when logging errors.
-    """
-    try:
-      self._JoinAll(watcher, timeout)
-    except TimeoutError:
-      error_log_func('Timed out. Dumping threads.')
-      for thread in (t for t in self._threads if t.isAlive()):
-        LogThreadStack(thread, error_log_func=error_log_func)
-      raise
-
-  def GetAllReturnValues(self, watcher=None):
-    """Get all return values, joining all threads if necessary.
-
-    Args:
-      watcher: same as in |JoinAll|. Only used if threads are alive.
-    """
-    if any([t.isAlive() for t in self._threads]):
-      self.JoinAll(watcher)
-    return [t.GetReturnValue() for t in self._threads]
-
-
-def CurrentThreadGroup():
-  """Returns the ReraiserThreadGroup that owns the running thread.
-
-  Returns:
-    The current thread group, otherwise None.
-  """
-  current_thread = threading.current_thread()
-  if isinstance(current_thread, ReraiserThread):
-    return current_thread._thread_group  # pylint: disable=no-member
-  return None
-
-
-def RunAsync(funcs, watcher=None):
-  """Executes the given functions in parallel and returns their results.
-
-  Args:
-    funcs: List of functions to perform on their own threads.
-    watcher: Watchdog object providing timeout, by default waits forever.
-
-  Returns:
-    A list of return values in the order of the given functions.
-  """
-  thread_group = ReraiserThreadGroup(ReraiserThread(f) for f in funcs)
-  thread_group.StartAll(will_block=True)
-  return thread_group.GetAllReturnValues(watcher=watcher)
diff --git a/systrace/catapult/devil/devil/utils/reraiser_thread_unittest.py b/systrace/catapult/devil/devil/utils/reraiser_thread_unittest.py
deleted file mode 100644
index e3c4e6b..0000000
--- a/systrace/catapult/devil/devil/utils/reraiser_thread_unittest.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unittests for reraiser_thread.py."""
-
-import threading
-import unittest
-
-from devil.utils import reraiser_thread
-from devil.utils import watchdog_timer
-
-
-class TestException(Exception):
-  pass
-
-
-class TestReraiserThread(unittest.TestCase):
-  """Tests for reraiser_thread.ReraiserThread."""
-
-  def testNominal(self):
-    result = [None, None]
-
-    def f(a, b=None):
-      result[0] = a
-      result[1] = b
-
-    thread = reraiser_thread.ReraiserThread(f, [1], {'b': 2})
-    thread.start()
-    thread.join()
-    self.assertEqual(result[0], 1)
-    self.assertEqual(result[1], 2)
-
-  def testRaise(self):
-    def f():
-      raise TestException
-
-    thread = reraiser_thread.ReraiserThread(f)
-    thread.start()
-    thread.join()
-    with self.assertRaises(TestException):
-      thread.ReraiseIfException()
-
-
-class TestReraiserThreadGroup(unittest.TestCase):
-  """Tests for reraiser_thread.ReraiserThreadGroup."""
-
-  def testInit(self):
-    ran = [False] * 5
-
-    def f(i):
-      ran[i] = True
-
-    group = reraiser_thread.ReraiserThreadGroup(
-      [reraiser_thread.ReraiserThread(f, args=[i]) for i in range(5)])
-    group.StartAll()
-    group.JoinAll()
-    for v in ran:
-      self.assertTrue(v)
-
-  def testAdd(self):
-    ran = [False] * 5
-
-    def f(i):
-      ran[i] = True
-
-    group = reraiser_thread.ReraiserThreadGroup()
-    for i in xrange(5):
-      group.Add(reraiser_thread.ReraiserThread(f, args=[i]))
-    group.StartAll()
-    group.JoinAll()
-    for v in ran:
-      self.assertTrue(v)
-
-  def testJoinRaise(self):
-    def f():
-      raise TestException
-    group = reraiser_thread.ReraiserThreadGroup(
-      [reraiser_thread.ReraiserThread(f) for _ in xrange(5)])
-    group.StartAll()
-    with self.assertRaises(TestException):
-      group.JoinAll()
-
-  def testJoinTimeout(self):
-    def f():
-      pass
-    event = threading.Event()
-
-    def g():
-      event.wait()
-    group = reraiser_thread.ReraiserThreadGroup(
-        [reraiser_thread.ReraiserThread(g),
-         reraiser_thread.ReraiserThread(f)])
-    group.StartAll()
-    with self.assertRaises(reraiser_thread.TimeoutError):
-      group.JoinAll(watchdog_timer.WatchdogTimer(0.01))
-    event.set()
-
-
-class TestRunAsync(unittest.TestCase):
-  """Tests for reraiser_thread.RunAsync."""
-
-  def testNoArgs(self):
-    results = reraiser_thread.RunAsync([])
-    self.assertEqual([], results)
-
-  def testOneArg(self):
-    results = reraiser_thread.RunAsync([lambda: 1])
-    self.assertEqual([1], results)
-
-  def testTwoArgs(self):
-    a, b = reraiser_thread.RunAsync((lambda: 1, lambda: 2))
-    self.assertEqual(1, a)
-    self.assertEqual(2, b)
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/utils/reset_usb.py b/systrace/catapult/devil/devil/utils/reset_usb.py
deleted file mode 100755
index 0335227..0000000
--- a/systrace/catapult/devil/devil/utils/reset_usb.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import fcntl
-import logging
-import os
-import re
-import sys
-
-if __name__ == '__main__':
-  sys.path.append(
-      os.path.abspath(os.path.join(os.path.dirname(__file__),
-                                   '..', '..')))
-
-from devil.android import device_errors
-from devil.utils import lsusb
-from devil.utils import run_tests_helper
-
-logger = logging.getLogger(__name__)
-
-_INDENTATION_RE = re.compile(r'^( *)')
-_LSUSB_BUS_DEVICE_RE = re.compile(r'^Bus (\d{3}) Device (\d{3}):')
-_LSUSB_ENTRY_RE = re.compile(r'^ *([^ ]+) +([^ ]+) *([^ ].*)?$')
-_LSUSB_GROUP_RE = re.compile(r'^ *([^ ]+.*):$')
-
-_USBDEVFS_RESET = ord('U') << 8 | 20
-
-
-def reset_usb(bus, device):
-  """Reset the USB device with the given bus and device."""
-  usb_file_path = '/dev/bus/usb/%03d/%03d' % (bus, device)
-  with open(usb_file_path, 'w') as usb_file:
-    logger.debug('fcntl.ioctl(%s, %d)', usb_file_path, _USBDEVFS_RESET)
-    fcntl.ioctl(usb_file, _USBDEVFS_RESET)
-
-
-def reset_android_usb(serial):
-  """Reset the USB device for the given Android device."""
-  lsusb_info = lsusb.lsusb()
-
-  bus = None
-  device = None
-  for device_info in lsusb_info:
-    device_serial = lsusb.get_lsusb_serial(device_info)
-    if device_serial == serial:
-      bus = int(device_info.get('bus'))
-      device = int(device_info.get('device'))
-
-  if bus and device:
-    reset_usb(bus, device)
-  else:
-    raise device_errors.DeviceUnreachableError(
-        'Unable to determine bus(%s) or device(%s) for device %s'
-         % (bus, device, serial))
-
-
-def reset_all_android_devices():
-  """Reset all USB devices that look like an Android device."""
-  _reset_all_matching(lambda i: bool(lsusb.get_lsusb_serial(i)))
-
-
-def _reset_all_matching(condition):
-  lsusb_info = lsusb.lsusb()
-  for device_info in lsusb_info:
-    if int(device_info.get('device')) != 1 and condition(device_info):
-      bus = int(device_info.get('bus'))
-      device = int(device_info.get('device'))
-      try:
-        reset_usb(bus, device)
-        serial = lsusb.get_lsusb_serial(device_info)
-        if serial:
-          logger.info(
-              'Reset USB device (bus: %03d, device: %03d, serial: %s)',
-              bus, device, serial)
-        else:
-          logger.info(
-              'Reset USB device (bus: %03d, device: %03d)',
-              bus, device)
-      except IOError:
-        logger.error(
-            'Failed to reset USB device (bus: %03d, device: %03d)',
-            bus, device)
-
-
-def main():
-  parser = argparse.ArgumentParser()
-  parser.add_argument('-v', '--verbose', action='count')
-  parser.add_argument('-s', '--serial')
-  parser.add_argument('--bus', type=int)
-  parser.add_argument('--device', type=int)
-  args = parser.parse_args()
-
-  run_tests_helper.SetLogLevel(args.verbose)
-
-  if args.serial:
-    reset_android_usb(args.serial)
-  elif args.bus and args.device:
-    reset_usb(args.bus, args.device)
-  else:
-    parser.error('Unable to determine target. '
-                 'Specify --serial or BOTH --bus and --device.')
-
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
-
diff --git a/systrace/catapult/devil/devil/utils/run_tests_helper.py b/systrace/catapult/devil/devil/utils/run_tests_helper.py
deleted file mode 100644
index 7f71b65..0000000
--- a/systrace/catapult/devil/devil/utils/run_tests_helper.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Helper functions common to native, java and host-driven test runners."""
-
-import collections
-import logging
-
-from devil.utils import logging_common
-
-
-CustomFormatter = logging_common.CustomFormatter
-
-
-_WrappedLoggingArgs = collections.namedtuple(
-    '_WrappedLoggingArgs', ['verbose'])
-
-
-def SetLogLevel(verbose_count, add_handler=True):
-  """Sets log level as |verbose_count|.
-
-  Args:
-    verbose_count: Verbosity level.
-    add_handler: If true, adds a handler with |CustomFormatter|.
-  """
-  logging_common.InitializeLogging(
-      _WrappedLoggingArgs(verbose_count),
-      handler=None if add_handler else logging.NullHandler())
diff --git a/systrace/catapult/devil/devil/utils/signal_handler.py b/systrace/catapult/devil/devil/utils/signal_handler.py
deleted file mode 100644
index 1230f8d..0000000
--- a/systrace/catapult/devil/devil/utils/signal_handler.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import signal
-
-
-@contextlib.contextmanager
-def SignalHandler(signalnum, handler):
-  """Sets the signal handler for the given signal in the wrapped context.
-
-  Args:
-    signum: The signal for which a handler should be added.
-    additional_handler: The handler to add.
-  """
-  existing_handler = signal.getsignal(signalnum)
-
-  try:
-    signal.signal(signalnum, handler)
-    yield
-  finally:
-    signal.signal(signalnum, existing_handler)
-
-
-@contextlib.contextmanager
-def AddSignalHandler(signalnum, additional_handler):
-  """Adds a signal handler for the given signal in the wrapped context.
-
-  This runs the new handler after any existing handler rather than
-  replacing the existing handler.
-
-  Args:
-    signum: The signal for which a handler should be added.
-    additional_handler: The handler to add.
-  """
-  existing_handler = signal.getsignal(signalnum)
-
-  def handler(signum, frame):
-    if callable(existing_handler):
-      existing_handler(signum, frame)
-    additional_handler(signum, frame)
-
-  try:
-    signal.signal(signalnum, handler)
-    yield
-  finally:
-    signal.signal(signalnum, existing_handler)
diff --git a/systrace/catapult/devil/devil/utils/test/data/test_serial_map.json b/systrace/catapult/devil/devil/utils/test/data/test_serial_map.json
deleted file mode 100644
index f068281..0000000
--- a/systrace/catapult/devil/devil/utils/test/data/test_serial_map.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"phone": "Phone1", "battor": "BattOr1"}, {"phone": "Phone2", "battor": "BattOr2"}, {"phone": "Phone3", "battor": "BattOr3"}]
diff --git a/systrace/catapult/devil/devil/utils/timeout_retry.py b/systrace/catapult/devil/devil/utils/timeout_retry.py
deleted file mode 100644
index 2327b6b..0000000
--- a/systrace/catapult/devil/devil/utils/timeout_retry.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A utility to run functions with timeouts and retries."""
-# pylint: disable=W0702
-
-import logging
-import threading
-import time
-
-from devil.utils import reraiser_thread
-from devil.utils import watchdog_timer
-
-logger = logging.getLogger(__name__)
-
-
-class TimeoutRetryThreadGroup(reraiser_thread.ReraiserThreadGroup):
-
-  def __init__(self, timeout, threads=None):
-    super(TimeoutRetryThreadGroup, self).__init__(threads)
-    self._watcher = watchdog_timer.WatchdogTimer(timeout)
-
-  def GetWatcher(self):
-    """Returns the watchdog keeping track of this thread's time."""
-    return self._watcher
-
-  def GetElapsedTime(self):
-    return self._watcher.GetElapsed()
-
-  def GetRemainingTime(self, required=0, suffix=None):
-    """Get the remaining time before the thread times out.
-
-    Useful to send as the |timeout| parameter of async IO operations.
-
-    Args:
-      required: minimum amount of time that will be required to complete, e.g.,
-        some sleep or IO operation.
-      msg: error message to show if timing out.
-
-    Returns:
-      The number of seconds remaining before the thread times out, or None
-      if the thread never times out.
-
-    Raises:
-      reraiser_thread.TimeoutError if the remaining time is less than the
-        required time.
-    """
-    remaining = self._watcher.GetRemaining()
-    if remaining is not None and remaining < required:
-      msg = 'Timeout of %.1f secs expired' % self._watcher.GetTimeout()
-      if suffix:
-        msg += suffix
-      raise reraiser_thread.TimeoutError(msg)
-    return remaining
-
-
-def CurrentTimeoutThreadGroup():
-  """Returns the thread group that owns or is blocked on the active thread.
-
-  Returns:
-    Returns None if no TimeoutRetryThreadGroup is tracking the current thread.
-  """
-  thread_group = reraiser_thread.CurrentThreadGroup()
-  while thread_group:
-    if isinstance(thread_group, TimeoutRetryThreadGroup):
-      return thread_group
-    thread_group = thread_group.blocked_parent_thread_group
-  return None
-
-
-def WaitFor(condition, wait_period=5, max_tries=None):
-  """Wait for a condition to become true.
-
-  Repeatedly call the function condition(), with no arguments, until it returns
-  a true value.
-
-  If called within a TimeoutRetryThreadGroup, it cooperates nicely with it.
-
-  Args:
-    condition: function with the condition to check
-    wait_period: number of seconds to wait before retrying to check the
-      condition
-    max_tries: maximum number of checks to make, the default tries forever
-      or until the TimeoutRetryThreadGroup expires.
-
-  Returns:
-    The true value returned by the condition, or None if the condition was
-    not met after max_tries.
-
-  Raises:
-    reraiser_thread.TimeoutError: if the current thread is a
-      TimeoutRetryThreadGroup and the timeout expires.
-  """
-  condition_name = condition.__name__
-  timeout_thread_group = CurrentTimeoutThreadGroup()
-  while max_tries is None or max_tries > 0:
-    result = condition()
-    if max_tries is not None:
-      max_tries -= 1
-    msg = ['condition', repr(condition_name), 'met' if result else 'not met']
-    if timeout_thread_group:
-      # pylint: disable=no-member
-      msg.append('(%.1fs)' % timeout_thread_group.GetElapsedTime())
-    logger.info(' '.join(msg))
-    if result:
-      return result
-    if timeout_thread_group:
-      # pylint: disable=no-member
-      timeout_thread_group.GetRemainingTime(wait_period,
-          suffix=' waiting for condition %r' % condition_name)
-    time.sleep(wait_period)
-  return None
-
-
-def AlwaysRetry(_exception):
-  return True
-
-
-def Run(func, timeout, retries, args=None, kwargs=None, desc=None,
-        error_log_func=logging.critical, retry_if_func=AlwaysRetry):
-  """Runs the passed function in a separate thread with timeouts and retries.
-
-  Args:
-    func: the function to be wrapped.
-    timeout: the timeout in seconds for each try.
-    retries: the number of retries.
-    args: list of positional args to pass to |func|.
-    kwargs: dictionary of keyword args to pass to |func|.
-    desc: An optional description of |func| used in logging. If omitted,
-      |func.__name__| will be used.
-    error_log_func: Logging function when logging errors.
-    retry_if_func: Unary callable that takes an exception and returns
-      whether |func| should be retried. Defaults to always retrying.
-
-  Returns:
-    The return value of func(*args, **kwargs).
-  """
-  if not args:
-    args = []
-  if not kwargs:
-    kwargs = {}
-  if not desc:
-    desc = func.__name__
-
-  num_try = 1
-  while True:
-    thread_name = 'TimeoutThread-%d-for-%s' % (num_try,
-                                               threading.current_thread().name)
-    child_thread = reraiser_thread.ReraiserThread(lambda: func(*args, **kwargs),
-                                                  name=thread_name)
-    try:
-      thread_group = TimeoutRetryThreadGroup(timeout, threads=[child_thread])
-      thread_group.StartAll(will_block=True)
-      while True:
-        thread_group.JoinAll(watcher=thread_group.GetWatcher(), timeout=60,
-                             error_log_func=error_log_func)
-        if thread_group.IsAlive():
-          logger.info('Still working on %s', desc)
-        else:
-          return thread_group.GetAllReturnValues()[0]
-    except reraiser_thread.TimeoutError as e:
-      # Timeouts already get their stacks logged.
-      if num_try > retries or not retry_if_func(e):
-        raise
-      # Do not catch KeyboardInterrupt.
-    except Exception as e:  # pylint: disable=broad-except
-      if num_try > retries or not retry_if_func(e):
-        raise
-      error_log_func(
-          '(%s) Exception on %s, attempt %d of %d: %r',
-          thread_name, desc, num_try, retries + 1, e)
-    num_try += 1
diff --git a/systrace/catapult/devil/devil/utils/timeout_retry_unittest.py b/systrace/catapult/devil/devil/utils/timeout_retry_unittest.py
deleted file mode 100755
index 0eeb31a..0000000
--- a/systrace/catapult/devil/devil/utils/timeout_retry_unittest.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/python
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Unittests for timeout_and_retry.py."""
-
-import logging
-import time
-import unittest
-
-from devil.utils import reraiser_thread
-from devil.utils import timeout_retry
-
-
-_DEFAULT_TIMEOUT = .1
-
-
-class TestException(Exception):
-  pass
-
-
-def _CountTries(tries):
-  tries[0] += 1
-  raise TestException
-
-
-class TestRun(unittest.TestCase):
-  """Tests for timeout_retry.Run."""
-
-  def testRun(self):
-    self.assertTrue(timeout_retry.Run(
-        lambda x: x, 30, 3, [True], {}))
-
-  def testTimeout(self):
-    tries = [0]
-
-    def _sleep():
-      tries[0] += 1
-      time.sleep(1)
-
-    self.assertRaises(
-        reraiser_thread.TimeoutError, timeout_retry.Run, _sleep, .01, 1,
-        error_log_func=logging.debug)
-    self.assertEqual(tries[0], 2)
-
-  def testRetries(self):
-    tries = [0]
-    self.assertRaises(
-        TestException, timeout_retry.Run, lambda: _CountTries(tries),
-        _DEFAULT_TIMEOUT, 3, error_log_func=logging.debug)
-    self.assertEqual(tries[0], 4)
-
-  def testNoRetries(self):
-    tries = [0]
-    self.assertRaises(
-        TestException, timeout_retry.Run, lambda: _CountTries(tries),
-        _DEFAULT_TIMEOUT, 0, error_log_func=logging.debug)
-    self.assertEqual(tries[0], 1)
-
-  def testReturnValue(self):
-    self.assertTrue(timeout_retry.Run(lambda: True, _DEFAULT_TIMEOUT, 3))
-
-  def testCurrentTimeoutThreadGroup(self):
-    def InnerFunc():
-      current_thread_group = timeout_retry.CurrentTimeoutThreadGroup()
-      self.assertIsNotNone(current_thread_group)
-
-      def InnerInnerFunc():
-        self.assertEqual(current_thread_group,
-                         timeout_retry.CurrentTimeoutThreadGroup())
-        return True
-      return reraiser_thread.RunAsync((InnerInnerFunc,))[0]
-
-    self.assertTrue(timeout_retry.Run(InnerFunc, _DEFAULT_TIMEOUT, 3))
-
-
-if __name__ == '__main__':
-  unittest.main()
diff --git a/systrace/catapult/devil/devil/utils/update_mapping.py b/systrace/catapult/devil/devil/utils/update_mapping.py
deleted file mode 100755
index 6666b9b..0000000
--- a/systrace/catapult/devil/devil/utils/update_mapping.py
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import sys
-
-from devil.utils import battor_device_mapping
-
-def parse_options():
-  """Parses and checks the command-line options.
-
-  Returns:
-    A tuple containing the options structure.
-  """
-  usage = 'Usage: ./update_mapping.py [options]'
-  desc = ('Example: ./update_mapping.py -o mapping.json.\n'
-  'This script generates and stores a file that gives the\n'
-  'mapping between phone serial numbers and BattOr serial numbers\n'
-  'Mapping is based on which physical ports on the USB hubs the\n'
-  'devices are plugged in to. For instance, if there are two hubs,\n'
-  'the phone connected to port N on the first hub is mapped to the\n'
-  'BattOr connected to port N on the second hub, for each N.')
-  parser = argparse.ArgumentParser(usage=usage, description=desc)
-  parser.add_argument('-o', '--output', dest='out_file',
-                      default='mapping.json', type=str,
-                      action='store', help='mapping file name')
-  parser.add_argument('-u', '--hub', dest='hub_types',
-                      action='append', choices=['plugable_7port',
-                                                'plugable_7port_usb3_part2',
-                                                'plugable_7port_usb3_part3'],
-                      help='USB hub types.')
-  options = parser.parse_args()
-  if not options.hub_types:
-    options.hub_types = ['plugable_7port', 'plugable_7port_usb3_part2',
-                         'plugable_7port_usb3_part3']
-  return options
-
-def main():
-  options = parse_options()
-  battor_device_mapping.GenerateSerialMapFile(options.out_file,
-                                              options.hub_types)
-
-if __name__ == "__main__":
-  sys.exit(main())
diff --git a/systrace/catapult/devil/devil/utils/usb_hubs.py b/systrace/catapult/devil/devil/utils/usb_hubs.py
deleted file mode 100644
index bd984c7..0000000
--- a/systrace/catapult/devil/devil/utils/usb_hubs.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-PLUGABLE_7PORT_LAYOUT = {1:7,
-                         2:6,
-                         3:5,
-                         4:{1:4, 2:3, 3:2, 4:1}}
-
-PLUGABLE_7PORT_USB3_LAYOUT = {1:{1:1, 2:2, 3:3, 4:4},
-                              2:5,
-                              3:6,
-                              4:7}
-
-KEEDOX_LAYOUT = {1:1,
-                 2:2,
-                 3:3,
-                 4:{1:4, 2:5, 3:6, 4:7}}
-
-VIA_LAYOUT = {1:1,
-              2:2,
-              3:3,
-              4:{1:4, 2:5, 3:6, 4:7}}
-
-class HubType(object):
-  def __init__(self, id_func, port_mapping):
-    """Defines a type of hub.
-
-    Args:
-      id_func: [USBNode -> bool] is a function that can be run on a node
-        to determine if the node represents this type of hub.
-      port_mapping: [dict(int:(int|dict))] maps virtual to physical port
-        numbers. For instance, {3:1, 1:2, 2:3} means that virtual port 3
-        corresponds to physical port 1, virtual port 1 corresponds to physical
-        port 2, and virtual port 2 corresponds to physical port 3. In the
-        case of hubs with "internal" topology, this is represented by nested
-        maps. For instance, {1:{1:1,2:2},2:{1:3,2:4}} means, e.g. that the
-        device plugged into physical port 3 will show up as being connected
-        to port 1, on a device which is connected to port 2 on the hub.
-    """
-    self._id_func = id_func
-    # v2p = "virtual to physical" ports
-    self._v2p_port = port_mapping
-
-  def IsType(self, node):
-    """Determines if the given Node is a hub of this type.
-
-    Args:
-      node: [USBNode] Node to check.
-    """
-    return self._id_func(node)
-
-  def GetPhysicalPortToNodeTuples(self, node):
-    """Gets devices connected to the physical ports on a hub of this type.
-
-    Args:
-      node: [USBNode] Node representing a hub of this type.
-
-    Yields:
-      A series of (int, USBNode) tuples giving a physical port
-      and the USBNode connected to it.
-
-    Raises:
-      ValueError: If the given node isn't a hub of this type.
-    """
-    if self.IsType(node):
-      for res in self._GppHelper(node, self._v2p_port):
-        yield res
-    else:
-      raise ValueError('Node must be a hub of this type')
-
-  def _GppHelper(self, node, mapping):
-    """Helper function for GetPhysicalPortToNodeMap.
-
-    Gets devices connected to physical ports, based on device tree
-    rooted at the given node and the mapping between virtual and physical
-    ports.
-
-    Args:
-      node: [USBNode] Root of tree to search for devices.
-      mapping: [dict] Mapping between virtual and physical ports.
-
-    Yields:
-      A series of (int, USBNode) tuples giving a physical port
-      and the Node connected to it.
-    """
-    for (virtual, physical) in mapping.iteritems():
-      if node.HasPort(virtual):
-        if isinstance(physical, dict):
-          for res in self._GppHelper(node.PortToDevice(virtual), physical):
-            yield res
-        else:
-          yield (physical, node.PortToDevice(virtual))
-
-def _is_plugable_7port_hub(node):
-  """Check if a node is a Plugable 7-Port Hub
-  (Model USB2-HUB7BC)
-  The topology of this device is a 4-port hub,
-  with another 4-port hub connected on port 4.
-  """
-  if '1a40:0101' not in node.desc:
-    return False
-  if not node.HasPort(4):
-    return False
-  return '1a40:0101' in node.PortToDevice(4).desc
-
-# Plugable 7-Port USB-3 Hubs show up twice in the USB devices list; they have
-# two different "branches", one which has USB2 devices and one which has
-# USB3 devices. The "part2" is the "USB-2" branch of the hub, the
-# "part3" is the "USB-3" branch of the hub.
-
-def _is_plugable_7port_usb3_part2_hub(node):
-  """Check if a node is the "USB2 branch" of
-  a Plugable 7-Port USB-3 Hub (Model USB3-HUB7BC)
-  The topology of this device is a 4-port hub,
-  with another 4-port hub connected on port 1.
-  """
-  if '2109:2811' not in node.desc:
-    return False
-  if not node.HasPort(1):
-    return False
-  return '2109:2811' in node.PortToDevice(1).desc
-
-def _is_plugable_7port_usb3_part3_hub(node):
-  """Check if a node is the "USB3 branch" of
-  a Plugable 7-Port USB-3 Hub (Model USB3-HUB7BC)
-  The topology of this device is a 4-port hub,
-  with another 4-port hub connected on port 1.
-  """
-  if '2109:8110' not in node.desc:
-    return False
-  if not node.HasPort(1):
-    return False
-  return '2109:8110' in node.PortToDevice(1).desc
-
-def _is_keedox_hub(node):
-  """Check if a node is a Keedox hub.
-  The topology of this device is a 4-port hub,
-  with another 4-port hub connected on port 4.
-  """
-  if '0bda:5411' not in node.desc:
-    return False
-  if not node.HasPort(4):
-    return False
-  return '0bda:5411' in node.PortToDevice(4).desc
-
-def _is_via_hub(node):
-  """Check if a node is a Via Labs hub.
-  The topology of this device is a 4-port hub,
-  with another 4-port hub connected on port 4.
-  """
-  if '2109:2812' not in node.desc and '2109:0812' not in node.desc:
-    return False
-  if not node.HasPort(4):
-    return False
-  return ('2109:2812' in node.PortToDevice(4).desc or
-          '2109:0812' in node.PortToDevice(4).desc)
-
-
-PLUGABLE_7PORT = HubType(_is_plugable_7port_hub, PLUGABLE_7PORT_LAYOUT)
-PLUGABLE_7PORT_USB3_PART2 = HubType(_is_plugable_7port_usb3_part2_hub,
-                                    PLUGABLE_7PORT_USB3_LAYOUT)
-PLUGABLE_7PORT_USB3_PART3 = HubType(_is_plugable_7port_usb3_part3_hub,
-                                    PLUGABLE_7PORT_USB3_LAYOUT)
-KEEDOX = HubType(_is_keedox_hub, KEEDOX_LAYOUT)
-VIA = HubType(_is_via_hub, VIA_LAYOUT)
-
-ALL_HUBS = [PLUGABLE_7PORT,
-            PLUGABLE_7PORT_USB3_PART2,
-            PLUGABLE_7PORT_USB3_PART3,
-            KEEDOX,
-            VIA]
-
-def GetHubType(type_name):
-  if type_name == 'plugable_7port':
-    return PLUGABLE_7PORT
-  elif type_name == 'plugable_7port_usb3_part2':
-    return PLUGABLE_7PORT_USB3_PART2
-  elif type_name == 'plugable_7port_usb3_part3':
-    return PLUGABLE_7PORT_USB3_PART3
-  elif type_name == 'keedox':
-    return KEEDOX
-  elif type_name == 'via':
-    return VIA
-  raise ValueError('Invalid hub type')
diff --git a/systrace/catapult/devil/devil/utils/watchdog_timer.py b/systrace/catapult/devil/devil/utils/watchdog_timer.py
deleted file mode 100644
index bff1f8c..0000000
--- a/systrace/catapult/devil/devil/utils/watchdog_timer.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""WatchdogTimer timeout objects."""
-
-import time
-
-
-class WatchdogTimer(object):
-  """A resetable timeout-based watchdog.
-
-  This object is threadsafe.
-  """
-
-  def __init__(self, timeout):
-    """Initializes the watchdog.
-
-    Args:
-      timeout: The timeout in seconds. If timeout is None it will never timeout.
-    """
-    self._start_time = time.time()
-    self._timeout = timeout
-
-  def Reset(self):
-    """Resets the timeout countdown."""
-    self._start_time = time.time()
-
-  def GetElapsed(self):
-    """Returns the elapsed time of the watchdog."""
-    return time.time() - self._start_time
-
-  def GetRemaining(self):
-    """Returns the remaining time of the watchdog."""
-    if self._timeout:
-      return self._timeout - self.GetElapsed()
-    else:
-      return None
-
-  def GetTimeout(self):
-    """Returns the timout of the watchdog."""
-    return self._timeout
-
-  def IsTimedOut(self):
-    """Whether the watchdog has timed out.
-
-    Returns:
-      True if the watchdog has timed out, False otherwise.
-    """
-    remaining = self.GetRemaining()
-    return remaining is not None and remaining < 0
diff --git a/systrace/catapult/devil/devil/utils/zip_utils.py b/systrace/catapult/devil/devil/utils/zip_utils.py
deleted file mode 100644
index e1f812b..0000000
--- a/systrace/catapult/devil/devil/utils/zip_utils.py
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import json
-import logging
-import os
-import sys
-import zipfile
-
-if __name__ == '__main__':
-  _DEVIL_ROOT_DIR = os.path.abspath(
-      os.path.join(os.path.dirname(__file__), '..', '..'))
-  _PY_UTILS_ROOT_DIR = os.path.abspath(
-      os.path.join(_DEVIL_ROOT_DIR, '..', 'common', 'py_utils'))
-  sys.path.extend((_DEVIL_ROOT_DIR, _PY_UTILS_ROOT_DIR))
-
-from devil import base_error
-from devil.utils import cmd_helper
-from py_utils import tempfile_ext
-
-
-logger = logging.getLogger(__name__)
-
-
-class ZipFailedError(base_error.BaseError):
-  """Raised on a failure to perform a zip operation."""
-  pass
-
-
-def _WriteToZipFile(zip_file, path, arc_path):
-  """Recursively write |path| to |zip_file| as |arc_path|.
-
-  zip_file: An open instance of zipfile.ZipFile.
-  path: An absolute path to the file or directory to be zipped.
-  arc_path: A relative path within the zip file to which the file or directory
-    located at |path| should be written.
-  """
-  if os.path.isdir(path):
-    for dir_path, _, file_names in os.walk(path):
-      dir_arc_path = os.path.join(arc_path, os.path.relpath(dir_path, path))
-      logger.debug('dir:  %s -> %s', dir_path, dir_arc_path)
-      zip_file.write(dir_path, dir_arc_path, zipfile.ZIP_STORED)
-      for f in file_names:
-        file_path = os.path.join(dir_path, f)
-        file_arc_path = os.path.join(dir_arc_path, f)
-        logger.debug('file: %s -> %s', file_path, file_arc_path)
-        zip_file.write(file_path, file_arc_path, zipfile.ZIP_DEFLATED)
-  else:
-    logger.debug('file: %s -> %s', path, arc_path)
-    zip_file.write(path, arc_path, zipfile.ZIP_DEFLATED)
-
-
-def _WriteZipFile(zip_path, zip_contents):
-  with zipfile.ZipFile(zip_path, 'w') as zip_file:
-    for path, arc_path in zip_contents:
-      _WriteToZipFile(zip_file, path, arc_path)
-
-
-def WriteZipFile(zip_path, zip_contents):
-  """Writes the provided contents to the given zip file.
-
-  Note that this uses python's zipfile module and is done in a separate
-  process to avoid hogging the GIL.
-
-  Args:
-    zip_path: String path to the zip file to write.
-    zip_contents: A list of (host path, archive path) tuples.
-
-  Raises:
-    ZipFailedError on failure.
-  """
-  zip_spec = {
-    'zip_path': zip_path,
-    'zip_contents': zip_contents,
-  }
-  with tempfile_ext.NamedTemporaryDirectory() as tmpdir:
-    json_path = os.path.join(tmpdir, 'zip_spec.json')
-    with open(json_path, 'w') as json_file:
-      json.dump(zip_spec, json_file)
-    ret, output, error = cmd_helper.GetCmdStatusOutputAndError([
-        sys.executable, os.path.abspath(__file__),
-        '--zip-spec', json_path])
-
-  if ret != 0:
-    exc_msg = ['Failed to create %s' % zip_path]
-    exc_msg.extend('stdout:  %s' % l for l in output.splitlines())
-    exc_msg.extend('stderr:  %s' % l for l in error.splitlines())
-    raise ZipFailedError('\n'.join(exc_msg))
-
-
-def main(raw_args):
-  parser = argparse.ArgumentParser()
-  parser.add_argument('--zip-spec', required=True)
-
-  args = parser.parse_args(raw_args)
-
-  with open(args.zip_spec) as zip_spec_file:
-    zip_spec = json.load(zip_spec_file)
-
-  return _WriteZipFile(**zip_spec)
-
-
-if __name__ == '__main__':
-  sys.exit(main(sys.argv[1:]))
diff --git a/systrace/catapult/devil/devil/utils/zip_utils_test.py b/systrace/catapult/devil/devil/utils/zip_utils_test.py
deleted file mode 100644
index 4564e3f..0000000
--- a/systrace/catapult/devil/devil/utils/zip_utils_test.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-import zipfile
-
-from devil.utils import zip_utils
-from py_utils import tempfile_ext
-
-
-class WriteZipFileTest(unittest.TestCase):
-
-  def testSimple(self):
-    with tempfile_ext.NamedTemporaryDirectory() as working_dir:
-      file1 = os.path.join(working_dir, 'file1.txt')
-      file2 = os.path.join(working_dir, 'file2.txt')
-
-      with open(file1, 'w') as f1:
-        f1.write('file1')
-      with open(file2, 'w') as f2:
-        f2.write('file2')
-
-      zip_tuples = [
-        (file1, 'foo/file1.txt'),
-        (file2, 'bar/file2.txt'),
-      ]
-
-      zip_path = os.path.join(working_dir, 'out.zip')
-      zip_utils.WriteZipFile(zip_path, zip_tuples)
-
-      self.assertTrue(zipfile.is_zipfile(zip_path))
-
-      actual = zipfile.ZipFile(zip_path)
-      expected_files = [
-        'foo/file1.txt',
-        'bar/file2.txt',
-      ]
-
-      self.assertEquals(
-          sorted(expected_files),
-          sorted(actual.namelist()))
diff --git a/systrace/catapult/devil/docs/adb_wrapper.md b/systrace/catapult/devil/docs/adb_wrapper.md
deleted file mode 100644
index a8dc3b0..0000000
--- a/systrace/catapult/devil/docs/adb_wrapper.md
+++ /dev/null
@@ -1,388 +0,0 @@
-# [devil.android.sdk.adb_wrapper](https://github.com/catapult-project/catapult/blob/master/devil/devil/android/sdk/adb_wrapper.py)
-
-*This page was autogenerated by `devil/utils/markdown.py --module-link https://github.com/catapult-project/catapult/blob/master/devil/devil/android/sdk/adb_wrapper.py`*
-
-## DeviceStat
-
-DeviceStat(st\_mode, st\_size, st\_time)
-### DeviceStat.\_\_repr\_\_
-
-Return a nicely formatted representation string
-### DeviceStat.\_\_getnewargs\_\_
-
-Return self as a plain tuple.  Used by copy and pickle.
-### DeviceStat.\_\_getstate\_\_
-
-Exclude the OrderedDict from pickling
-## AdbWrapper
-
-A wrapper around a local Android Debug Bridge executable.
-### AdbWrapper.GetDeviceSerial
-
-Gets the device serial number associated with this object.
-```
-    Returns:
-      Device serial number as a string.
-```
-
-
-### AdbWrapper.Push
-
-Pushes a file from the host to the device.
-```
-    Args:
-      local: Path on the host filesystem.
-      remote: Path on the device filesystem.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.Pull
-
-Pulls a file from the device to the host.
-```
-    Args:
-      remote: Path on the device filesystem.
-      local: Path on the host filesystem.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.Shell
-
-Runs a shell command on the device.
-```
-    Args:
-      command: A string with the shell command to run.
-      expect_status: (optional) Check that the command's exit status matches
-        this value. Default is 0. If set to None the test is skipped.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      The output of the shell command as a string.
-
-    Raises:
-      device_errors.AdbCommandFailedError: If the exit status doesn't match
-        |expect_status|.
-```
-
-
-### AdbWrapper.IterShell
-
-Runs a shell command and returns an iterator over its output lines.
-```
-    Args:
-      command: A string with the shell command to run.
-      timeout: Timeout in seconds.
-
-    Yields:
-      The output of the command line by line.
-```
-
-
-### AdbWrapper.Ls
-
-List the contents of a directory on the device.
-```
-    Args:
-      path: Path on the device filesystem.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      A list of pairs (filename, stat) for each file found in the directory,
-      where the stat object has the properties: st_mode, st_size, and st_time.
-
-    Raises:
-      AdbCommandFailedError if |path| does not specify a valid and accessible
-          directory in the device, or the output of "adb ls" command is less
-          than four columns
-```
-
-
-### AdbWrapper.Logcat
-
-Get an iterable over the logcat output.
-```
-    Args:
-      clear: If true, clear the logcat.
-      dump: If true, dump the current logcat contents.
-      filter_specs: If set, a list of specs to filter the logcat.
-      logcat_format: If set, the format in which the logcat should be output.
-        Options include "brief", "process", "tag", "thread", "raw", "time",
-        "threadtime", and "long"
-      ring_buffer: If set, a list of alternate ring buffers to request.
-        Options include "main", "system", "radio", "events", "crash" or "all".
-        The default is equivalent to ["main", "system", "crash"].
-      iter_timeout: If set and neither clear nor dump is set, the number of
-        seconds to wait between iterations. If no line is found before the
-        given number of seconds elapses, the iterable will yield None.
-      timeout: (optional) If set, timeout per try in seconds. If clear or dump
-        is set, defaults to DEFAULT_TIMEOUT.
-      retries: (optional) If clear or dump is set, the number of retries to
-        attempt. Otherwise, does nothing.
-
-    Yields:
-      logcat output line by line.
-```
-
-
-### AdbWrapper.Forward
-
-Forward socket connections from the local socket to the remote socket.
-```
-    Sockets are specified by one of:
-      tcp:<port>
-      localabstract:<unix domain socket name>
-      localreserved:<unix domain socket name>
-      localfilesystem:<unix domain socket name>
-      dev:<character device name>
-      jdwp:<process pid> (remote only)
-
-    Args:
-      local: The host socket.
-      remote: The device socket.
-      allow_rebind: A boolean indicating whether adb may rebind a local socket;
-        otherwise, the default, an exception is raised if the local socket is
-        already being forwarded.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.ForwardRemove
-
-Remove a forward socket connection.
-```
-    Args:
-      local: The host socket.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.ForwardList
-
-List all currently forwarded socket connections.
-```
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-    Returns:
-      The output of adb forward --list as a string.
-```
-
-
-### AdbWrapper.JDWP
-
-List of PIDs of processes hosting a JDWP transport.
-```
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      A list of PIDs as strings.
-```
-
-
-### AdbWrapper.Install
-
-Install an apk on the device.
-```
-    Args:
-      apk_path: Host path to the APK file.
-      forward_lock: (optional) If set forward-locks the app.
-      allow_downgrade: (optional) If set, allows for downgrades.
-      reinstall: (optional) If set reinstalls the app, keeping its data.
-      sd_card: (optional) If set installs on the SD card.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.InstallMultiple
-
-Install an apk with splits on the device.
-```
-    Args:
-      apk_paths: Host path to the APK file.
-      forward_lock: (optional) If set forward-locks the app.
-      reinstall: (optional) If set reinstalls the app, keeping its data.
-      sd_card: (optional) If set installs on the SD card.
-      allow_downgrade: (optional) Allow versionCode downgrade.
-      partial: (optional) Package ID if apk_paths doesn't include all .apks.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.Uninstall
-
-Remove the app |package| from the device.
-```
-    Args:
-      package: The package to uninstall.
-      keep_data: (optional) If set keep the data and cache directories.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.Backup
-
-Write an archive of the device's data to |path|.
-```
-    Args:
-      path: Local path to store the backup file.
-      packages: List of to packages to be backed up.
-      apk: (optional) If set include the .apk files in the archive.
-      shared: (optional) If set buckup the device's SD card.
-      nosystem: (optional) If set exclude system applications.
-      include_all: (optional) If set back up all installed applications and
-        |packages| is optional.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.Restore
-
-Restore device contents from the backup archive.
-```
-    Args:
-      path: Host path to the backup archive.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.WaitForDevice
-
-Block until the device is online.
-```
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.GetState
-
-Get device state.
-```
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      One of 'offline', 'bootloader', or 'device'.
-```
-
-
-### AdbWrapper.GetDevPath
-
-Gets the device path.
-```
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      The device path (e.g. usb:3-4)
-```
-
-
-### AdbWrapper.Remount
-
-Remounts the /system partition on the device read-write.
-### AdbWrapper.Reboot
-
-Reboots the device.
-```
-    Args:
-      to_bootloader: (optional) If set reboots to the bootloader.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.Root
-
-Restarts the adbd daemon with root permissions, if possible.
-```
-    Args:
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### AdbWrapper.Emu
-
-Runs an emulator console command.
-```
-    See http://developer.android.com/tools/devices/emulator.html#console
-
-    Args:
-      cmd: The command to run on the emulator console.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-
-    Returns:
-      The output of the emulator console command.
-```
-
-
-### AdbWrapper.DisableVerity
-
-Disable Marshmallow's Verity security feature
-### AdbWrapper.EnableVerity
-
-Enable Marshmallow's Verity security feature
-### AdbWrapper.\_\_init\_\_
-
-Initializes the AdbWrapper.
-```
-    Args:
-      device_serial: The device serial number as a string.
-```
-
-
-### AdbWrapper.\_\_eq\_\_
-
-Consider instances equal if they refer to the same device.
-```
-    Args:
-      other: The instance to compare equality with.
-
-    Returns:
-      True if the instances are considered equal, false otherwise.
-```
-
-
-### AdbWrapper.\_\_str\_\_
-
-The string representation of an instance.
-```
-    Returns:
-      The device serial number as a string.
-```
-
-
-### AdbWrapper.\_\_repr\_\_
-
-### VerifyLocalFileExists
-
-Verifies a local file exists.
-```
-  Args:
-    path: Path to the local file.
-
-  Raises:
-    IOError: If the file doesn't exist.
-```
-
-
diff --git a/systrace/catapult/devil/docs/device_blacklist.md b/systrace/catapult/devil/docs/device_blacklist.md
deleted file mode 100644
index c6eed51..0000000
--- a/systrace/catapult/devil/docs/device_blacklist.md
+++ /dev/null
@@ -1,59 +0,0 @@
-<!-- Copyright 2016 The Chromium Authors. All rights reserved.
-     Use of this source code is governed by a BSD-style license that can be
-     found in the LICENSE file.
--->
-
-# Devil: Device Blacklist
-
-## What is it?
-
-The device blacklist is a per-run list of devices detected to be in a known bad
-state along with the reason they are suspected of being in a bad state (offline,
-not responding, etc). It is stored as a json file. This gets reset every run
-during the device recovery step (currently part of `bb_device_status_check`).
-
-## Bots
-
-On bots, this is normally found at `//out/bad_devices.json`. If you are having
-problems with blacklisted devices locally even though a device is in a good
-state, you can safely delete this file.
-
-# Tools for interacting with device black list.
-
-You can interact with the device blacklist via [devil.android.device\_blacklist](https://cs.chromium.org/chromium/src/third_party/catapult/devil/devil/android/device_blacklist.py).
-This allows for any interaction you would need with a device blacklist:
-
-  - Reading
-  - Writing
-  - Extending
-  - Resetting
-
-An example usecase of this is:
-```python
-from devil.android import device_blacklist
-
-blacklist = device_blacklist.Blacklist(blacklist_path)
-blacklisted_devices = blacklist.Read()
-for device in blacklisted_devices:
-  print 'Device %s is blacklisted' % device
-blacklist.Reset()
-new_blacklist = {'device_id1': {'timestamp': ts, 'reason': reason}}
-blacklist.Write(new_blacklist)
-blacklist.Extend([device_2, device_3], reason='Reason for blacklisting')
-```
-
-
-## Where it is used.
-
-The blacklist file path is passed directly to the following scripts in chromium:
-
-  - [test\_runner.py](https://cs.chromium.org/chromium/src/build/android/test_runner.py)
-  - [provision\_devices.py](https://cs.chromium.org/chromium/src/build/android/provision_devices.py)
-  - [bb\_device\_status\_check.py](https://cs.chromium.org/chromium/src/build/android/buildbot/bb_device_status_check.py)
-
-The blacklist is also used in the following scripts:
-
-  - [device\_status.py](https://cs.chromium.org/chromium/src/third_party/catapult/devil/devil/android/tools/device_status.py)
-  - [device\_recovery.py](https://cs.chromium.org/chromium/src/third_party/catapult/devil/devil/android/tools/device_recovery.py)
-
-
diff --git a/systrace/catapult/devil/docs/device_utils.md b/systrace/catapult/devil/docs/device_utils.md
deleted file mode 100644
index a6e89a7..0000000
--- a/systrace/catapult/devil/docs/device_utils.md
+++ /dev/null
@@ -1,1086 +0,0 @@
-# [devil.android.device_utils](https://github.com/catapult-project/catapult/blob/master/devil/devil/android/device_utils.py)
-
-*This page was autogenerated by `devil/utils/markdown.py --module-link https://github.com/catapult-project/catapult/blob/master/devil/devil/android/device_utils.py`*
-
-## DeviceUtils
-
-### DeviceUtils.\_\_init\_\_
-
-DeviceUtils constructor.
-```
-    Args:
-      device: Either a device serial, an existing AdbWrapper instance, or an
-        an existing AndroidCommands instance.
-      enable_device_files_cache: For PushChangedFiles(), cache checksums of
-        pushed files rather than recomputing them on a subsequent call.
-      default_timeout: An integer containing the default number of seconds to
-        wait for an operation to complete if no explicit value is provided.
-      default_retries: An integer containing the default number or times an
-        operation should be retried on failure if no explicit value is provided.
-```
-
-
-### DeviceUtils.\_\_eq\_\_
-
-Checks whether |other| refers to the same device as |self|.
-```
-    Args:
-      other: The object to compare to. This can be a basestring, an instance
-        of adb_wrapper.AdbWrapper, or an instance of DeviceUtils.
-    Returns:
-      Whether |other| refers to the same device as |self|.
-```
-
-
-### DeviceUtils.\_\_lt\_\_
-
-Compares two instances of DeviceUtils.
-```
-    This merely compares their serial numbers.
-
-    Args:
-      other: The instance of DeviceUtils to compare to.
-    Returns:
-      Whether |self| is less than |other|.
-```
-
-
-### DeviceUtils.\_\_str\_\_
-
-Returns the device serial.
-### DeviceUtils.NeedsSU
-
-Checks whether 'su' is needed to access protected resources.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if 'su' is available on the device and is needed to to access
-        protected resources; False otherwise if either 'su' is not available
-        (e.g. because the device has a user build), or not needed (because adbd
-        already has root privileges).
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.IsOnline
-
-Checks whether the device is online.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the device is online, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-```
-
-
-### DeviceUtils.HasRoot
-
-Checks whether or not adbd has root privileges.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if adbd has root privileges, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.EnableRoot
-
-Restarts adbd with root privileges.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if root could not be enabled.
-      CommandTimeoutError on timeout.
-```
-
-
-### DeviceUtils.IsUserBuild
-
-Checks whether or not the device is running a user build.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the device is running a user build, False otherwise (i.e. if
-        it's running a userdebug build).
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.GetExternalStoragePath
-
-Get the device's path to its SD card.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The device's path to its SD card.
-
-    Raises:
-      CommandFailedError if the external storage path could not be determined.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.GetIMEI
-
-Get the device's IMEI.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The device's IMEI.
-
-    Raises:
-      AdbCommandFailedError on error
-```
-
-
-### DeviceUtils.GetApplicationPaths
-
-Get the paths of the installed apks on the device for the given package.
-```
-    Args:
-      package: Name of the package.
-
-    Returns:
-      List of paths to the apks on the device for the given package.
-```
-
-
-### DeviceUtils.TakeBugReport
-
-Takes a bug report and dumps it to the specified path.
-```
-    This doesn't use adb's bugreport option since its behavior is dependent on
-    both adb version and device OS version. To make it simpler, this directly
-    runs the bugreport command on the device itself and dumps the stdout to a
-    file.
-
-    Args:
-      path: Path on the host to drop the bug report.
-      timeout: (optional) Timeout per try in seconds.
-      retries: (optional) Number of retries to attempt.
-```
-
-
-### DeviceUtils.GetApplicationVersion
-
-Get the version name of a package installed on the device.
-```
-    Args:
-      package: Name of the package.
-
-    Returns:
-      A string with the version name or None if the package is not found
-      on the device.
-```
-
-
-### DeviceUtils.GetApplicationDataDirectory
-
-Get the data directory on the device for the given package.
-```
-    Args:
-      package: Name of the package.
-
-    Returns:
-      The package's data directory.
-    Raises:
-      CommandFailedError if the package's data directory can't be found,
-        whether because it's not installed or otherwise.
-```
-
-
-### DeviceUtils.WaitUntilFullyBooted
-
-Wait for the device to fully boot.
-```
-    This means waiting for the device to boot, the package manager to be
-    available, and the SD card to be ready. It can optionally mean waiting
-    for wifi to come up, too.
-
-    Args:
-      wifi: A boolean indicating if we should wait for wifi to come up or not.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError if one of the component waits times out.
-      DeviceUnreachableError if the device becomes unresponsive.
-```
-
-
-### DeviceUtils.Reboot
-
-Reboot the device.
-```
-    Args:
-      block: A boolean indicating if we should wait for the reboot to complete.
-      wifi: A boolean indicating if we should wait for wifi to be enabled after
-        the reboot. The option has no effect unless |block| is also True.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.Install
-
-Install an APK.
-```
-    Noop if an identical APK is already installed.
-
-    Args:
-      apk: An ApkHelper instance or string containing the path to the APK.
-      allow_downgrade: A boolean indicating if we should allow downgrades.
-      reinstall: A boolean indicating if we should keep any existing app data.
-      permissions: Set of permissions to set. If not set, finds permissions with
-          apk helper. To set no permissions, pass [].
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the installation fails.
-      CommandTimeoutError if the installation times out.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.InstallSplitApk
-
-Install a split APK.
-```
-    Noop if all of the APK splits are already installed.
-
-    Args:
-      base_apk: An ApkHelper instance or string containing the path to the base
-          APK.
-      split_apks: A list of strings of paths of all of the APK splits.
-      allow_downgrade: A boolean indicating if we should allow downgrades.
-      reinstall: A boolean indicating if we should keep any existing app data.
-      allow_cached_props: Whether to use cached values for device properties.
-      permissions: Set of permissions to set. If not set, finds permissions with
-          apk helper. To set no permissions, pass [].
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the installation fails.
-      CommandTimeoutError if the installation times out.
-      DeviceUnreachableError on missing device.
-      DeviceVersionError if device SDK is less than Android L.
-```
-
-
-### DeviceUtils.Uninstall
-
-Remove the app |package\_name| from the device.
-```
-    This is a no-op if the app is not already installed.
-
-    Args:
-      package_name: The package to uninstall.
-      keep_data: (optional) Whether to keep the data and cache directories.
-      timeout: Timeout in seconds.
-      retries: Number of retries.
-
-    Raises:
-      CommandFailedError if the uninstallation fails.
-      CommandTimeoutError if the uninstallation times out.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.RunShellCommand
-
-Run an ADB shell command.
-```
-    The command to run |cmd| should be a sequence of program arguments
-    (preferred) or a single string with a shell script to run.
-
-    When |cmd| is a sequence, it is assumed to contain the name of the command
-    to run followed by its arguments. In this case, arguments are passed to the
-    command exactly as given, preventing any further processing by the shell.
-    This allows callers to easily pass arguments with spaces or special
-    characters without having to worry about quoting rules. Whenever possible,
-    it is recomended to pass |cmd| as a sequence.
-
-    When |cmd| is passed as a single string, |shell| should be set to True.
-    The command will be interpreted and run by the shell on the device,
-    allowing the use of shell features such as pipes, wildcards, or variables.
-    Failing to set shell=True will issue a warning, but this will be changed
-    to a hard failure in the future (see: catapult:#3242).
-
-    This behaviour is consistent with that of command runners in cmd_helper as
-    well as Python's own subprocess.Popen.
-
-    TODO(perezju) Change the default of |check_return| to True when callers
-      have switched to the new behaviour.
-
-    Args:
-      cmd: A sequence containing the command to run and its arguments, or a
-        string with a shell script to run (should also set shell=True).
-      shell: A boolean indicating whether shell features may be used in |cmd|.
-      check_return: A boolean indicating whether or not the return code should
-        be checked.
-      cwd: The device directory in which the command should be run.
-      env: The environment variables with which the command should be run.
-      run_as: A string containing the package as which the command should be
-        run.
-      as_root: A boolean indicating whether the shell command should be run
-        with root privileges.
-      single_line: A boolean indicating if only a single line of output is
-        expected.
-      large_output: Uses a work-around for large shell command output. Without
-        this large output will be truncated.
-      raw_output: Whether to only return the raw output
-          (no splitting into lines).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      If single_line is False, the output of the command as a list of lines,
-      otherwise, a string with the unique line of output emmited by the command
-      (with the optional newline at the end stripped).
-
-    Raises:
-      AdbCommandFailedError if check_return is True and the exit code of
-        the command run on the device is non-zero.
-      CommandFailedError if single_line is True but the output contains two or
-        more lines.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.KillAll
-
-Kill all processes with the given name on the device.
-```
-    Args:
-      process_name: A string containing the name of the process to kill.
-      exact: A boolean indicating whether to kill all processes matching
-             the string |process_name| exactly, or all of those which contain
-             |process_name| as a substring. Defaults to False.
-      signum: An integer containing the signal number to send to kill. Defaults
-              to SIGKILL (9).
-      as_root: A boolean indicating whether the kill should be executed with
-               root privileges.
-      blocking: A boolean indicating whether we should wait until all processes
-                with the given |process_name| are dead.
-      quiet: A boolean indicating whether to ignore the fact that no processes
-             to kill were found.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The number of processes attempted to kill.
-
-    Raises:
-      CommandFailedError if no process was killed and |quiet| is False.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.StartActivity
-
-Start package's activity on the device.
-```
-    Args:
-      intent_obj: An Intent object to send.
-      blocking: A boolean indicating whether we should wait for the activity to
-                finish launching.
-      trace_file_name: If present, a string that both indicates that we want to
-                       profile the activity and contains the path to which the
-                       trace should be saved.
-      force_stop: A boolean indicating whether we should stop the activity
-                  before starting it.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the activity could not be started.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.StartInstrumentation
-
-### DeviceUtils.BroadcastIntent
-
-Send a broadcast intent.
-```
-    Args:
-      intent: An Intent to broadcast.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.GoHome
-
-Return to the home screen and obtain launcher focus.
-```
-    This command launches the home screen and attempts to obtain
-    launcher focus until the timeout is reached.
-
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.ForceStop
-
-Close the application.
-```
-    Args:
-      package: A string containing the name of the package to stop.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.ClearApplicationState
-
-Clear all state for the given package.
-```
-    Args:
-      package: A string containing the name of the package to stop.
-      permissions: List of permissions to set after clearing data.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.SendKeyEvent
-
-Sends a keycode to the device.
-```
-    See the devil.android.sdk.keyevent module for suitable keycode values.
-
-    Args:
-      keycode: A integer keycode to send to the device.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.PushChangedFiles
-
-Push files to the device, skipping files that don't need updating.
-```
-    When a directory is pushed, it is traversed recursively on the host and
-    all files in it are pushed to the device as needed.
-    Additionally, if delete_device_stale option is True,
-    files that exist on the device but don't exist on the host are deleted.
-
-    Args:
-      host_device_tuples: A list of (host_path, device_path) tuples, where
-        |host_path| is an absolute path of a file or directory on the host
-        that should be minimially pushed to the device, and |device_path| is
-        an absolute path of the destination on the device.
-      timeout: timeout in seconds
-      retries: number of retries
-      delete_device_stale: option to delete stale files on device
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.FileExists
-
-Checks whether the given file exists on the device.
-```
-    Arguments are the same as PathExists.
-```
-
-
-### DeviceUtils.PathExists
-
-Checks whether the given path(s) exists on the device.
-```
-    Args:
-      device_path: A string containing the absolute path to the file on the
-                   device, or an iterable of paths to check.
-      as_root: Whether root permissions should be use to check for the existence
-               of the given path(s).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the all given paths exist on the device, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.RemovePath
-
-Removes the given path(s) from the device.
-```
-    Args:
-      device_path: A string containing the absolute path to the file on the
-                   device, or an iterable of paths to check.
-      force: Whether to remove the path(s) with force (-f).
-      recursive: Whether to remove any directories in the path(s) recursively.
-      as_root: Whether root permissions should be use to remove the given
-               path(s).
-      rename: Whether to rename the path(s) before removing to help avoid
-            filesystem errors. See https://stackoverflow.com/questions/11539657
-      timeout: timeout in seconds
-      retries: number of retries
-```
-
-
-### DeviceUtils.PullFile
-
-Pull a file from the device.
-```
-    Args:
-      device_path: A string containing the absolute path of the file to pull
-                   from the device.
-      host_path: A string containing the absolute path of the destination on
-                 the host.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-```
-
-
-### DeviceUtils.ReadFile
-
-Reads the contents of a file from the device.
-```
-    Args:
-      device_path: A string containing the absolute path of the file to read
-                   from the device.
-      as_root: A boolean indicating whether the read should be executed with
-               root privileges.
-      force_pull: A boolean indicating whether to force the operation to be
-          performed by pulling a file from the device. The default is, when the
-          contents are short, to retrieve the contents using cat instead.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The contents of |device_path| as a string. Contents are intepreted using
-      universal newlines, so the caller will see them encoded as '
-'. Also,
-      all lines will be terminated.
-
-    Raises:
-      AdbCommandFailedError if the file can't be read.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.WriteFile
-
-Writes |contents| to a file on the device.
-```
-    Args:
-      device_path: A string containing the absolute path to the file to write
-          on the device.
-      contents: A string containing the data to write to the device.
-      as_root: A boolean indicating whether the write should be executed with
-          root privileges (if available).
-      force_push: A boolean indicating whether to force the operation to be
-          performed by pushing a file to the device. The default is, when the
-          contents are short, to pass the contents using a shell script instead.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if the file could not be written on the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.ListDirectory
-
-List all files on a device directory.
-```
-    Mirroring os.listdir (and most client expectations) the resulting list
-    does not include the special entries '.' and '..' even if they are present
-    in the directory.
-
-    Args:
-      device_path: A string containing the path of the directory on the device
-                   to list.
-      as_root: A boolean indicating whether the to use root privileges to list
-               the directory contents.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A list of filenames for all entries contained in the directory.
-
-    Raises:
-      AdbCommandFailedError if |device_path| does not specify a valid and
-          accessible directory in the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.StatDirectory
-
-List file and stat info for all entries on a device directory.
-```
-    Implementation notes: this is currently implemented by parsing the output
-    of 'ls -a -l' on the device. Whether possible and convenient, we attempt to
-    make parsing strict and return values mirroring those of the standard |os|
-    and |stat| Python modules.
-
-    Mirroring os.listdir (and most client expectations) the resulting list
-    does not include the special entries '.' and '..' even if they are present
-    in the directory.
-
-    Args:
-      device_path: A string containing the path of the directory on the device
-                   to list.
-      as_root: A boolean indicating whether the to use root privileges to list
-               the directory contents.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A list of dictionaries, each containing the following keys:
-        filename: A string with the file name.
-        st_mode: File permissions, use the stat module to interpret these.
-        st_nlink: Number of hard links (may be missing).
-        st_owner: A string with the user name of the owner.
-        st_group: A string with the group name of the owner.
-        st_rdev_pair: Device type as (major, minior) (only if inode device).
-        st_size: Size of file, in bytes (may be missing for non-regular files).
-        st_mtime: Time of most recent modification, in seconds since epoch
-          (although resolution is in minutes).
-        symbolic_link_to: If entry is a symbolic link, path where it points to;
-          missing otherwise.
-
-    Raises:
-      AdbCommandFailedError if |device_path| does not specify a valid and
-          accessible directory in the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.StatPath
-
-Get the stat attributes of a file or directory on the device.
-```
-    Args:
-      device_path: A string containing the path of a file or directory from
-                   which to get attributes.
-      as_root: A boolean indicating whether the to use root privileges to
-               access the file information.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A dictionary with the stat info collected; see StatDirectory for details.
-
-    Raises:
-      CommandFailedError if device_path cannot be found on the device.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.FileSize
-
-Get the size of a file on the device.
-```
-    Note: This is implemented by parsing the output of the 'ls' command on
-    the device. On some Android versions, when passing a directory or special
-    file, the size is *not* reported and this function will throw an exception.
-
-    Args:
-      device_path: A string containing the path of a file on the device.
-      as_root: A boolean indicating whether the to use root privileges to
-               access the file information.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The size of the file in bytes.
-
-    Raises:
-      CommandFailedError if device_path cannot be found on the device, or
-        its size cannot be determited for some reason.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.GetLanguage
-
-Returns the language setting on the device.
-```
-    Args:
-      cache: Whether to use cached properties when available.
-```
-
-
-### DeviceUtils.SetJavaAsserts
-
-Enables or disables Java asserts.
-```
-    Args:
-      enabled: A boolean indicating whether Java asserts should be enabled
-               or disabled.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True if the device-side property changed and a restart is required as a
-      result, False otherwise.
-
-    Raises:
-      CommandTimeoutError on timeout.
-```
-
-
-### DeviceUtils.GetCountry
-
-Returns the country setting on the device.
-```
-    Args:
-      cache: Whether to use cached properties when available.
-```
-
-
-### DeviceUtils.GetApplicationPids
-
-Returns the PID or PIDs of a given process name.
-```
-    Note that the |process_name|, often the package name, must match exactly.
-
-    Args:
-      process_name: A string containing the process name to get the PIDs for.
-      at_most_one: A boolean indicating that at most one PID is expected to
-                   be found.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A list of the PIDs for the named process. If at_most_one=True returns
-      the single PID found or None otherwise.
-
-    Raises:
-      CommandFailedError if at_most_one=True and more than one PID is found
-          for the named process.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.GetProp
-
-Gets a property from the device.
-```
-    Args:
-      property_name: A string containing the name of the property to get from
-                     the device.
-      cache: Whether to use cached properties when available.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The value of the device's |property_name| property.
-
-    Raises:
-      CommandTimeoutError on timeout.
-```
-
-
-### DeviceUtils.SetProp
-
-Sets a property on the device.
-```
-    Args:
-      property_name: A string containing the name of the property to set on
-                     the device.
-      value: A string containing the value to set to the property on the
-             device.
-      check: A boolean indicating whether to check that the property was
-             successfully set on the device.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError if check is true and the property was not correctly
-        set on the device (e.g. because it is not rooted).
-      CommandTimeoutError on timeout.
-```
-
-
-### DeviceUtils.GetABI
-
-Gets the device main ABI.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The device's main ABI name.
-
-    Raises:
-      CommandTimeoutError on timeout.
-```
-
-
-### DeviceUtils.GetPids
-
-Returns the PIDs of processes containing the given name as substring.
-```
-    Note that the |process_name| is often the package name.
-
-    Args:
-      process_name: A string containing the process name to get the PIDs for.
-                    If missing returns PIDs for all processes.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A dict mapping process name to a list of PIDs for each process that
-      contained the provided |process_name|.
-
-    Raises:
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.GetLogcatMonitor
-
-Returns a new LogcatMonitor associated with this device.
-```
-    Parameters passed to this function are passed directly to
-    |logcat_monitor.LogcatMonitor| and are documented there.
-```
-
-
-### DeviceUtils.GetEnforce
-
-Get the current mode of SELinux.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      True (enforcing), False (permissive), or None (disabled).
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.SetEnforce
-
-Modify the mode SELinux is running in.
-```
-    Args:
-      enabled: a boolean indicating whether to put SELinux in encorcing mode
-               (if True), or permissive mode (otherwise).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.TakeScreenshot
-
-Takes a screenshot of the device.
-```
-    Args:
-      host_path: A string containing the path on the host to save the
-                 screenshot to. If None, a file name in the current
-                 directory will be generated.
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      The name of the file on the host to which the screenshot was saved.
-
-    Raises:
-      CommandFailedError on failure.
-      CommandTimeoutError on timeout.
-      DeviceUnreachableError on missing device.
-```
-
-
-### DeviceUtils.DismissCrashDialogIfNeeded
-
-Dismiss the error/ANR dialog if present.
-```
-    Returns: Name of the crashed package if a dialog is focused,
-             None otherwise.
-```
-
-
-### DeviceUtils.GetClientCache
-
-Returns client cache.
-### DeviceUtils.LoadCacheData
-
-Initializes the cache from data created using DumpCacheData.
-```
-    The cache is used only if its token matches the one found on the device.
-    This prevents a stale cache from being used (which can happen when sharing
-    devices).
-
-    Args:
-      data: A previously serialized cache (string).
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      Whether the cache was loaded.
-```
-
-
-### DeviceUtils.DumpCacheData
-
-Dumps the current cache state to a string.
-```
-    Args:
-      timeout: timeout in seconds
-      retries: number of retries
-
-    Returns:
-      A serialized cache as a string.
-```
-
-
-### DeviceUtils.RestartAdbd
-
-### DeviceUtils.GrantPermissions
-
-### DeviceUtils.IsScreenOn
-
-Determines if screen is on.
-```
-    Dumpsys input_method exposes screen on/off state. Below is an explination of
-    the states.
-
-    Pre-L:
-      On: mScreenOn=true
-      Off: mScreenOn=false
-    L+:
-      On: mInteractive=true
-      Off: mInteractive=false
-
-    Returns:
-      True if screen is on, false if it is off.
-
-    Raises:
-      device_errors.CommandFailedError: If screen state cannot be found.
-```
-
-
-### DeviceUtils.SetScreen
-
-Turns screen on and off.
-```
-    Args:
-      on: bool to decide state to switch to. True = on False = off.
-```
-
-
-### GetAVDs
-
-Returns a list of Android Virtual Devices.
-```
-  Returns:
-    A list containing the configured AVDs.
-```
-
-
-### RestartServer
-
-Restarts the adb server.
-```
-  Raises:
-    CommandFailedError if we fail to kill or restart the server.
-```
-
-
diff --git a/systrace/catapult/devil/docs/markdown.md b/systrace/catapult/devil/docs/markdown.md
deleted file mode 100644
index 957dba7..0000000
--- a/systrace/catapult/devil/docs/markdown.md
+++ /dev/null
@@ -1,139 +0,0 @@
-# [devil.utils.markdown](https://github.com/catapult-project/catapult/blob/master/devil/devil/utils/markdown.py)
-
-*This page was autogenerated by `devil/utils/markdown.py --module-link https://github.com/catapult-project/catapult/blob/master/devil/devil/utils/markdown.py`*
-
-## MarkdownHelpAction
-
-### MarkdownHelpAction.\_\_init\_\_
-
-### MarkdownHelpAction.\_\_call\_\_
-
-## MarkdownHelpFormatter
-
-A really bare-bones argparse help formatter that generates valid markdown.
-```
-  This will generate something like:
-
-  usage
-
-  # **section heading**:
-
-  ## **--argument-one**
-
-  \`\`\`
-  argument-one help text
-  \`\`\`
-
-```
-
-
-### MarkdownHelpFormatter.format\_help
-
-### MarkdownHelpFormatter.start\_section
-
-### md\_bold
-
-Returns markdown-formatted bold text.
-### md\_code
-
-Returns a markdown-formatted code block in the given language.
-### md\_escape
-
-Escapes \* and \_.
-### md\_heading
-
-Returns markdown-formatted heading.
-### md\_inline\_code
-
-Returns markdown-formatted inline code.
-### md\_italic
-
-Returns markdown-formatted italic text.
-### md\_link
-
-returns a markdown-formatted link.
-### add\_md\_help\_argument
-
-Adds --md-help to the given argparse.ArgumentParser.
-```
-  Running a script with --md-help will print the help text for that script
-  as valid markdown.
-
-  Args:
-    parser: The ArgumentParser to which --md-help should be added.
-```
-
-
-### load\_module\_from\_path
-
-Load a module given only the path name.
-```
-  Also loads package modules as necessary.
-
-  Args:
-    module_path: An absolute path to a python module.
-  Returns:
-    The module object for the given path.
-```
-
-
-### md\_module
-
-Write markdown documentation for a class.
-```
-  Documents public classes and functions.
-
-  Args:
-    class_obj: a types.TypeType object for the class that should be
-      documented.
-  Returns:
-    A list of markdown-formatted lines.
-```
-
-
-### md\_class
-
-Write markdown documentation for a class.
-```
-  Documents public methods. Does not currently document subclasses.
-
-  Args:
-    class_obj: a types.TypeType object for the class that should be
-      documented.
-  Returns:
-    A list of markdown-formatted lines.
-```
-
-
-### md\_docstring
-
-Write a markdown-formatted docstring.
-```
-  Returns:
-    A list of markdown-formatted lines.
-```
-
-
-### md\_function
-
-Write markdown documentation for a function.
-```
-  Args:
-    func_obj: a types.FunctionType object for the function that should be
-      documented.
-  Returns:
-    A list of markdown-formatted lines.
-```
-
-
-### main
-
-Write markdown documentation for the module at the provided path.
-```
-  Args:
-    raw_args: the raw command-line args. Usually sys.argv[1:].
-  Returns:
-    An integer exit code. 0 for success, non-zero for failure.
-```
-
-
diff --git a/systrace/catapult/devil/docs/persistent_device_list.md b/systrace/catapult/devil/docs/persistent_device_list.md
deleted file mode 100644
index 626a878..0000000
--- a/systrace/catapult/devil/docs/persistent_device_list.md
+++ /dev/null
@@ -1,35 +0,0 @@
-<!-- Copyright 2016 The Chromium Authors. All rights reserved.
-     Use of this source code is governed by a BSD-style license that can be
-     found in the LICENSE file.
--->
-
-# Devil: Persistent Device List
-
-## What is it?
-
-A persistent device list that stores all expected devices between builds. It
-is used by non-swarmed bots to detect any missing/extra devices attached to
-them.
-
-This will be no longer needed when all bots are switched over to swarming.
-
-## Bots
-
-The list is usually located at:
-
-  - `~/.android/known_devices.json`.
-
-Look at recipes listed below in order to find more up to date location.
-
-## Local Runs
-
-The persistent device list is unnecessary for local runs. It is only used on the
-bots that upload data to the perf dashboard.
-
-## Where it is used
-
-The persistent device list is used in the
-[chromium_android](https://cs.chromium.org/chromium/build/scripts/slave/recipe_modules/chromium_android/api.py?q=known_devices_file)
-recipe module, and consumed by the
-[device_status.py](https://cs.chromium.org/chromium/src/third_party/catapult/devil/devil/android/tools/device_status.py?q=\-\-known%5C-devices%5C-file)
-script among others.
diff --git a/systrace/catapult/devil/pylintrc b/systrace/catapult/devil/pylintrc
deleted file mode 100644
index 7e024a2..0000000
--- a/systrace/catapult/devil/pylintrc
+++ /dev/null
@@ -1,68 +0,0 @@
-[MESSAGES CONTROL]
-
-# Disable the message, report, category or checker with the given id(s).
-# TODO: Shrink this list to as small as possible.
-disable=
-  design,
-  similarities,
-
-  bad-continuation,
-  fixme,
-  import-error,
-  invalid-name,
-  locally-disabled,
-  locally-enabled,
-  missing-docstring,
-  star-args,
-
-
-[REPORTS]
-
-# Don't write out full reports, just messages.
-reports=no
-
-
-[BASIC]
-
-# Regular expression which should only match correct function names.
-function-rgx=^(?:(?P<exempt>setUp|tearDown|setUpModule|tearDownModule)|(?P<camel_case>_?[A-Z][a-zA-Z0-9]*))$
-
-# Regular expression which should only match correct method names.
-method-rgx=^(?:(?P<exempt>_[a-z0-9_]+__|get|post|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass)|(?P<camel_case>(_{0,2}|test|assert)[A-Z][a-zA-Z0-9_]*))$
-
-# Regular expression which should only match correct argument names.
-argument-rgx=^[a-z][a-z0-9_]*$
-
-# Regular expression which should only match correct variable names.
-variable-rgx=^[a-z][a-z0-9_]*$
-
-# Good variable names which should always be accepted, separated by a comma.
-good-names=main,_
-
-# List of builtins function names that should not be used, separated by a comma.
-bad-functions=apply,input,reduce
-
-
-[VARIABLES]
-
-# Tells wether we should check for unused import in __init__ files.
-init-import=no
-
-# A regular expression matching names used for dummy variables (i.e. not used).
-dummy-variables-rgx=^_.*$|dummy
-
-
-[TYPECHECK]
-
-# Tells wether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-
-[FORMAT]
-
-# Maximum number of lines in a module.
-max-module-lines=10000
-
-# We use two spaces for indents, instead of the usual four spaces or tab.
-indent-string='  '
diff --git a/systrace/catapult/systrace/PRESUBMIT.py b/systrace/catapult/systrace/PRESUBMIT.py
deleted file mode 100644
index 1234a8d..0000000
--- a/systrace/catapult/systrace/PRESUBMIT.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-def CheckChangeOnUpload(input_api, output_api):
-  return _CommonChecks(input_api, output_api)
-
-
-def CheckChangeOnCommit(input_api, output_api):
-  return _CommonChecks(input_api, output_api)
-
-
-def _CommonChecks(input_api, output_api):
-  results = []
-  results += input_api.RunTests(input_api.canned_checks.GetPylint(
-      input_api, output_api, extra_paths_list=_GetPathsToPrepend(input_api),
-      pylintrc='pylintrc'))
-  return results
-
-
-def _GetPathsToPrepend(input_api):
-  project_dir = input_api.PresubmitLocalPath()
-  catapult_dir = input_api.os_path.join(project_dir, '..')
-  return [
-      project_dir,
-
-      input_api.os_path.join(catapult_dir, 'common', 'battor'),
-      input_api.os_path.join(catapult_dir, 'common', 'py_trace_event'),
-      input_api.os_path.join(catapult_dir, 'common', 'py_utils'),
-      input_api.os_path.join(catapult_dir, 'devil'),
-      input_api.os_path.join(catapult_dir, 'telemetry'),
-      input_api.os_path.join(catapult_dir, 'third_party', 'mock'),
-      input_api.os_path.join(catapult_dir, 'tracing'),
-
-  ]
diff --git a/systrace/catapult/systrace/README.md b/systrace/catapult/systrace/README.md
deleted file mode 100644
index 3ca9249..0000000
--- a/systrace/catapult/systrace/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- Copyright 2015 The Chromium Authors. All rights reserved.
-     Use of this source code is governed by a BSD-style license that can be
-     found in the LICENSE file.
--->
-Systrace
-========
-
-Systrace provides command-line tools to analyze the performance of your
-application. It currently includes
-[Android Systrace](http://developer.android.com/tools/help/systrace.html).
diff --git a/systrace/catapult/systrace/atrace_helper/README.md b/systrace/catapult/systrace/atrace_helper/README.md
deleted file mode 100644
index b5fd651..0000000
--- a/systrace/catapult/systrace/atrace_helper/README.md
+++ /dev/null
@@ -1,29 +0,0 @@
-<!-- Copyright 2017 The Chromium Authors. All rights reserved.
-     Use of this source code is governed by a BSD-style license that can be
-     found in the LICENSE file.
--->
-atrace_helper is an optional binary which can be pushed onto the device running
-systrace in order to enrich the traces with further details (memory, I/O, etc).
-
-Which problem is it solving?
----------------------------
-Some nice-to-have details are not present in the systrace, specifically:
- - Memory snapshots of running processes (PSS/RSS).
- - Periodic snapshotting of processes and thread names.
- - File paths for filesystem events (today they report only inode numbers).
-
-How is it solving it?
----------------------
-atrace_helper is a small userspace binary which is meant to be pushed on the
-device and run together with atrace by a dedicated tracing agent. When stopped,
-the helper produces a JSON file which contains all the relevant details
-(see --help). The JSON file is consumed by the TraceViewer importers and the
-extra details are merged into the final model.
-
-Build instructions
-------------------
-Building the binary requires the Android NDK to be installed. See
-[Android NDK page](https://developer.android.com/ndk).
-Once installed the binary can be just built as follows:
-`$(NDK_HOME)/ndk-build`
-The binary will be built in `libs/armeabi-v7a/`
diff --git a/systrace/catapult/systrace/atrace_helper/jni/Application.mk b/systrace/catapult/systrace/atrace_helper/jni/Application.mk
deleted file mode 100644
index cc2eb67..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/Application.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-APP_ABI := armeabi-v7a
-APP_PLATFORM := android-21
-APP_STL := c++_static
diff --git a/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc b/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc
deleted file mode 100644
index ef72f78..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.cc
+++ /dev/null
@@ -1,250 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "atrace_process_dump.h"
-
-#include <stdint.h>
-
-#include <limits>
-
-#include "file_utils.h"
-#include "logging.h"
-#include "procfs_utils.h"
-
-namespace {
-
-const int kMemInfoIntervalMs = 100;  // 100ms-ish.
-
-}  // namespace
-
-AtraceProcessDump::AtraceProcessDump() {
-  self_pid_ = static_cast<int>(getpid());
-}
-
-AtraceProcessDump::~AtraceProcessDump() {
-}
-
-void AtraceProcessDump::SetDumpInterval(int interval_ms) {
-  CHECK(interval_ms >= kMemInfoIntervalMs);
-  dump_interval_in_timer_ticks_ = interval_ms / kMemInfoIntervalMs;
-  // Approximately equals to kMemInfoIntervalMs.
-  int tick_interval_ms = interval_ms / dump_interval_in_timer_ticks_;
-  snapshot_timer_ = std::unique_ptr<time_utils::PeriodicTimer>(
-      new time_utils::PeriodicTimer(tick_interval_ms));
-}
-
-void AtraceProcessDump::RunAndPrintJson(FILE* stream) {
-  out_ = stream;
-
-  fprintf(out_, "{\"start_ts\": \"%llu\", \"snapshots\":[\n",
-      time_utils::GetTimestamp());
-
-  CHECK(snapshot_timer_);
-  snapshot_timer_->Start();
-
-  int tick_count = std::numeric_limits<int>::max();
-  if (dump_count_ > 0)
-    tick_count = dump_count_ * dump_interval_in_timer_ticks_;
-
-  for (int tick = 0; tick < tick_count; tick++) {
-    if (tick > 0) {
-      if (!snapshot_timer_->Wait())
-        break;  // Interrupted by signal.
-      fprintf(out_, ",\n");
-    }
-    TakeAndSerializeMemInfo();
-    if (!(tick % dump_interval_in_timer_ticks_)) {
-      fprintf(out_, ",\n");
-      TakeGlobalSnapshot();
-      SerializeSnapshot();
-    }
-    fflush(out_);
-  }
-
-  fprintf(out_, "],\n");
-  SerializePersistentProcessInfo();
-  fprintf(out_, "}\n");
-  fflush(out_);
-  Cleanup();
-}
-
-void AtraceProcessDump::Stop() {
-  CHECK(snapshot_timer_);
-  snapshot_timer_->Stop();
-}
-
-void AtraceProcessDump::TakeGlobalSnapshot() {
-  snapshot_.clear();
-  snapshot_timestamp_ = time_utils::GetTimestamp();
-
-  file_utils::ForEachPidInProcPath("/proc", [this](int pid) {
-    // Skip if not regognized as a process.
-    if (!UpdatePersistentProcessInfo(pid))
-      return;
-    const ProcessInfo* process = processes_[pid].get();
-    // Snapshot can't be obtained for kernel workers.
-    if (process->in_kernel)
-      return;
-
-    ProcessSnapshot* process_snapshot = new ProcessSnapshot();
-    snapshot_[pid] = std::unique_ptr<ProcessSnapshot>(process_snapshot);
-
-    process_snapshot->pid = pid;
-    procfs_utils::ReadOomStats(process_snapshot);
-    procfs_utils::ReadPageFaultsAndCpuTimeStats(process_snapshot);
-
-    if (ShouldTakeFullDump(process)) {
-      process_snapshot->memory.ReadFullStats(pid);
-    } else {
-      process_snapshot->memory.ReadLightStats(pid);
-    }
-    if (graphics_stats_ && process->is_app) {
-      process_snapshot->memory.ReadGpuStats(pid);
-    }
-  });
-}
-
-bool AtraceProcessDump::UpdatePersistentProcessInfo(int pid) {
-  if (!processes_.count(pid)) {
-    if (procfs_utils::ReadTgid(pid) != pid)
-      return false;
-    processes_[pid] = procfs_utils::ReadProcessInfo(pid);
-  }
-  ProcessInfo* process = processes_[pid].get();
-  procfs_utils::ReadProcessThreads(process);
-
-  if (full_dump_mode_ == FullDumpMode::kOnlyWhitelisted &&
-      full_dump_whitelist_.count(process->name)) {
-    full_dump_whitelisted_pids_.insert(pid);
-  }
-  return true;
-}
-
-bool AtraceProcessDump::ShouldTakeFullDump(const ProcessInfo* process) {
-  if (full_dump_mode_ == FullDumpMode::kAllProcesses)
-    return !process->in_kernel && (process->pid != self_pid_);
-  if (full_dump_mode_ == FullDumpMode::kAllJavaApps)
-    return process->is_app;
-  if (full_dump_mode_ == FullDumpMode::kDisabled)
-    return false;
-  return full_dump_whitelisted_pids_.count(process->pid) > 0;
-}
-
-void AtraceProcessDump::SerializeSnapshot() {
-  fprintf(out_, "{\"ts\":\"%llu\",\"memdump\":{\n", snapshot_timestamp_);
-  for (auto it = snapshot_.begin(); it != snapshot_.end();) {
-    const ProcessSnapshot* process = it->second.get();
-    const ProcessMemoryStats* mem = &process->memory;
-    fprintf(out_, "\"%d\":{", process->pid);
-
-    fprintf(out_, "\"vm\":%llu,\"rss\":%llu",
-            mem->virt_kb(), mem->rss_kb());
-
-    fprintf(out_, ",\"oom_sc\":%d,\"oom_sc_adj\":%d"
-                  ",\"min_flt\":%lu,\"maj_flt\":%lu"
-                  ",\"utime\":%lu,\"stime\":%lu",
-            process->oom_score, process->oom_score_adj,
-            process->minor_faults, process->major_faults,
-            process->utime, process->stime);
-
-    if (mem->full_stats_available()) {
-      fprintf(out_, ",\"pss\":%llu,\"swp\":%llu"
-                    ",\"pc\":%llu,\"pd\":%llu,\"sc\":%llu,\"sd\":%llu",
-              mem->pss_kb(), mem->swapped_kb(),
-              mem->private_clean_kb(), mem->private_dirty_kb(),
-              mem->shared_clean_kb(), mem->shared_dirty_kb());
-    }
-
-    if (mem->gpu_stats_available()) {
-      fprintf(out_, ",\"gpu_egl\":%llu,\"gpu_egl_pss\":%llu"
-                    ",\"gpu_gl\":%llu,\"gpu_gl_pss\":%llu"
-                    ",\"gpu_etc\":%llu,\"gpu_etc_pss\":%llu",
-              mem->gpu_graphics_kb(), mem->gpu_graphics_pss_kb(),
-              mem->gpu_gl_kb(), mem->gpu_gl_pss_kb(),
-              mem->gpu_other_kb(), mem->gpu_other_pss_kb());
-    }
-
-    // Memory maps are too heavy to serialize. Enable only in whitelisting mode.
-    if (print_smaps_ &&
-        full_dump_mode_ == FullDumpMode::kOnlyWhitelisted &&
-        mem->full_stats_available() &&
-        full_dump_whitelisted_pids_.count(process->pid)) {
-
-      fprintf(out_, ", \"mmaps\":[");
-      size_t n_mmaps = mem->mmaps_count();
-      for (size_t k = 0; k < n_mmaps; ++k) {
-        const ProcessMemoryStats::MmapInfo* mm = mem->mmap(k);
-        fprintf(out_,
-                "{\"vm\":\"%llx-%llx\",\"file\":\"%s\",\"flags\":\"%s\","
-                "\"pss\":%llu,\"rss\":%llu,\"swp\":%llu,"
-                "\"pc\":%llu,\"pd\":%llu,"
-                "\"sc\":%llu,\"sd\":%llu}",
-                mm->start_addr, mm->end_addr, mm->mapped_file, mm->prot_flags,
-                mm->pss_kb, mm->rss_kb, mm->swapped_kb,
-                mm->private_clean_kb, mm->private_dirty_kb,
-                mm->shared_clean_kb, mm->shared_dirty_kb);
-        if (k < n_mmaps - 1)
-          fprintf(out_, ", ");
-      }
-      fprintf(out_, "]");
-    }
-
-    if (++it != snapshot_.end())
-      fprintf(out_, "},\n");
-    else
-      fprintf(out_, "}}\n");
-  }
-  fprintf(out_, "}");
-}
-
-void AtraceProcessDump::SerializePersistentProcessInfo() {
-  fprintf(out_, "\"processes\":{");
-  for (auto it = processes_.begin(); it != processes_.end();) {
-    const ProcessInfo* process = it->second.get();
-    fprintf(out_, "\"%d\":{", process->pid);
-    fprintf(out_, "\"name\":\"%s\"", process->name);
-
-    if (!process->in_kernel) {
-      fprintf(out_, ",\"exe\":\"%s\",", process->exe);
-      fprintf(out_, "\"threads\":{\n");
-      const auto threads = &process->threads;
-      for (auto thread_it = threads->begin(); thread_it != threads->end();) {
-        const ThreadInfo* thread = &(thread_it->second);
-        fprintf(out_, "\"%d\":{", thread->tid);
-        fprintf(out_, "\"name\":\"%s\"", thread->name);
-
-        if (++thread_it != threads->end())
-          fprintf(out_, "},\n");
-        else
-          fprintf(out_, "}\n");
-      }
-      fprintf(out_, "}");
-    }
-
-    if (++it != processes_.end())
-      fprintf(out_, "},\n");
-    else
-      fprintf(out_, "}\n");
-  }
-  fprintf(out_, "}");
-}
-
-void AtraceProcessDump::TakeAndSerializeMemInfo() {
-  std::map<std::string, uint64_t> mem_info;
-  CHECK(procfs_utils::ReadMemInfoStats(&mem_info));
-  fprintf(out_, "{\"ts\":\"%llu\",\"meminfo\":{\n", time_utils::GetTimestamp());
-  for (auto it = mem_info.begin(); it != mem_info.end(); ++it) {
-    if (it != mem_info.begin())
-      fprintf(out_, ",");
-    fprintf(out_, "\"%s\":%llu", it->first.c_str(), it->second);
-  }
-  fprintf(out_, "}}");
-}
-
-void AtraceProcessDump::Cleanup() {
-  processes_.clear();
-  snapshot_.clear();
-  full_dump_whitelisted_pids_.clear();
-  snapshot_timer_ = nullptr;
-}
diff --git a/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.h b/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.h
deleted file mode 100644
index b71184a..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/atrace_process_dump.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef ATRACE_PROCESS_DUMP_H_
-#define ATRACE_PROCESS_DUMP_H_
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <memory>
-#include <set>
-#include <string>
-
-#include "logging.h"
-#include "process_info.h"
-#include "time_utils.h"
-
-// Program that collects processes, thread names, per-process memory stats and
-// other minor metrics from /proc filesystem. It's aimed to extend systrace
-// with more actionable number to hit performance issues.
-class AtraceProcessDump {
- public:
-  enum FullDumpMode {
-    kDisabled,
-    kAllProcesses,
-    kAllJavaApps,
-    kOnlyWhitelisted,
-  };
-
-  AtraceProcessDump();
-  ~AtraceProcessDump();
-
-  void RunAndPrintJson(FILE* stream);
-  void Stop();
-
-  void SetDumpInterval(int interval_ms);
-
-  // Negative number or zero means unlimited number of dumps.
-  void set_dump_count(int count) { dump_count_ = count; }
-
-  void set_full_dump_mode(FullDumpMode mode) { full_dump_mode_ = mode; }
-  void set_full_dump_whitelist(const std::set<std::string> &whitelist) {
-    CHECK(full_dump_mode_ == FullDumpMode::kOnlyWhitelisted);
-    full_dump_whitelist_ = whitelist;
-  }
-  void enable_graphics_stats() { graphics_stats_ = true; }
-  void enable_print_smaps() { print_smaps_ = true; }
-
- private:
-  AtraceProcessDump(const AtraceProcessDump&) = delete;
-  void operator=(const AtraceProcessDump&) = delete;
-
-  using ProcessMap = std::map<int, std::unique_ptr<ProcessInfo>>;
-  using ProcessSnapshotMap = std::map<int, std::unique_ptr<ProcessSnapshot>>;
-
-  void TakeGlobalSnapshot();
-  void TakeAndSerializeMemInfo();
-  bool UpdatePersistentProcessInfo(int pid);
-  bool ShouldTakeFullDump(const ProcessInfo* process);
-  void SerializeSnapshot();
-  void SerializePersistentProcessInfo();
-  void Cleanup();
-
-  int self_pid_;
-  int dump_count_;
-  bool graphics_stats_ = false;
-  bool print_smaps_ = false;
-  FullDumpMode full_dump_mode_ = FullDumpMode::kDisabled;
-  std::set<std::string> full_dump_whitelist_;
-
-  FILE* out_;
-  ProcessMap processes_;
-  ProcessSnapshotMap snapshot_;
-  uint64_t snapshot_timestamp_;
-  std::set<int> full_dump_whitelisted_pids_;
-  std::unique_ptr<time_utils::PeriodicTimer> snapshot_timer_;
-  int dump_interval_in_timer_ticks_;
-};
-
-#endif  // ATRACE_PROCESS_DUMP_H_
diff --git a/systrace/catapult/systrace/atrace_helper/jni/file_utils.cc b/systrace/catapult/systrace/atrace_helper/jni/file_utils.cc
deleted file mode 100644
index 7d122d6..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/file_utils.cc
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "file_utils.h"
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-namespace {
-
-bool IsNumeric(const char* str) {
-  if (!str[0])
-    return false;
-  for (const char* c = str; *c; c++) {
-    if (!isdigit(*c))
-      return false;
-  }
-  return true;
-}
-
-}  // namespace
-
-namespace file_utils {
-
-void ForEachPidInProcPath(const char* proc_path,
-                          std::function<void(int)> predicate) {
-  DIR* root_dir = opendir(proc_path);
-  ScopedDir autoclose(root_dir);
-  struct dirent* child_dir;
-  while ((child_dir = readdir(root_dir))) {
-    if (child_dir->d_type != DT_DIR || !IsNumeric(child_dir->d_name))
-      continue;
-    predicate(atoi(child_dir->d_name));
-  }
-}
-
-ssize_t ReadFile(const char* path, char* buf, size_t length) {
-  buf[0] = '\0';
-  int fd = open(path, O_RDONLY);
-  if (fd < 0 && errno == ENOENT)
-    return -1;
-  ScopedFD autoclose(fd);
-  size_t tot_read = 0;
-  do {
-    ssize_t rsize = read(fd, buf + tot_read, length - tot_read);
-    if (rsize == 0)
-      break;
-    if (rsize == -1 && errno == EINTR)
-      continue;
-    else if (rsize < 0)
-      return -1;
-    tot_read += static_cast<size_t>(rsize);
-  } while (tot_read < length);
-  buf[tot_read < length ? tot_read : length - 1] = '\0';
-  return tot_read;
-}
-
-bool ReadFileTrimmed(const char* path, char* buf, size_t length) {
-  ssize_t rsize = ReadFile(path, buf, length);
-  if (rsize < 0)
-    return false;
-  for (ssize_t i = 0; i < rsize; i++) {
-    const char c = buf[i];
-    if (c == '\0' || c == '\r' || c == '\n') {
-      buf[i] = '\0';
-      break;
-    }
-    buf[i] = isprint(c) ? c : '?';
-  }
-  return true;
-}
-
-ssize_t ReadProcFile(int pid, const char* proc_file, char* buf, size_t length) {
-  char proc_path[128];
-  snprintf(proc_path, sizeof(proc_path), "/proc/%d/%s", pid, proc_file);
-  return ReadFile(proc_path, buf, length);
-}
-
-// Reads a single-line proc file, stripping out any \0, \r, \n and replacing
-// non-printable charcters with '?'.
-bool ReadProcFileTrimmed(int pid,
-                         const char* proc_file,
-                         char* buf,
-                         size_t length) {
-  char proc_path[128];
-  snprintf(proc_path, sizeof(proc_path), "/proc/%d/%s", pid, proc_file);
-  return ReadFileTrimmed(proc_path, buf, length);
-}
-
-LineReader::LineReader(char* buf, size_t size)
-    : ptr_(buf), end_(buf + size) {
-}
-
-LineReader::~LineReader() {
-}
-
-const char* LineReader::NextLine() {
-  if (ptr_ >= end_)
-    return nullptr;
-  const char* cur = ptr_;
-  char* next = strchr(ptr_, '\n');
-  if (next) {
-    *next = '\0';
-    ptr_ = next + 1;
-  } else {
-    ptr_ = end_;
-  }
-  return cur;
-}
-
-}  // namespace file_utils
diff --git a/systrace/catapult/systrace/atrace_helper/jni/file_utils.h b/systrace/catapult/systrace/atrace_helper/jni/file_utils.h
deleted file mode 100644
index 2b2556b..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/file_utils.h
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef FILE_UTILS_H_
-#define FILE_UTILS_H_
-
-#include <dirent.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <functional>
-#include <map>
-#include <memory>
-
-#include "logging.h"
-
-namespace file_utils {
-
-// RAII classes for auto-releasing fd/dirs.
-template <typename RESOURCE_TYPE, int (*CLOSE_FN)(RESOURCE_TYPE)>
-struct ScopedResource {
-  explicit ScopedResource(RESOURCE_TYPE r) : r_(r) { CHECK(r); }
-  ~ScopedResource() { CLOSE_FN(r_); }
-  RESOURCE_TYPE r_;
-};
-
-using ScopedFD = ScopedResource<int, close>;
-using ScopedDir = ScopedResource<DIR*, closedir>;
-
-// Invokes predicate(pid) for each folder in |proc_path|/[0-9]+ which has
-// a numeric name (typically pids and tids).
-void ForEachPidInProcPath(const char* proc_path,
-                          std::function<void(int)> predicate);
-
-// Reads the contents of |path| fully into |buf| up to |length| chars.
-// |buf| is guaranteed to be null terminated.
-ssize_t ReadFile(const char* path, char* buf, size_t length);
-
-// Reads a single-line file, stripping out any \0, \r, \n and replacing
-// non-printable charcters with '?'. |buf| is guaranteed to be null terminated.
-bool ReadFileTrimmed(const char* path, char* buf, size_t length);
-
-// Convenience wrappers for /proc/|pid|/|proc_file| paths.
-ssize_t ReadProcFile(int pid, const char* proc_file, char* buf, size_t length);
-bool ReadProcFileTrimmed(int pid,
-                         const char* proc_file,
-                         char* buf,
-                         size_t length);
-
-// Takes a C string buffer and chunks it into lines without creating any
-// copies. It modifies the original buffer, by replacing \n with \0.
-class LineReader {
- public:
-  LineReader(char* buf, size_t size);
-  ~LineReader();
-
-  const char* NextLine();
-
- private:
-  char* ptr_;
-  char* end_;
-};
-
-}  // namespace file_utils
-
-#endif  // FILE_UTILS_H_
diff --git a/systrace/catapult/systrace/atrace_helper/jni/libmemtrack_wrapper.cc b/systrace/catapult/systrace/atrace_helper/jni/libmemtrack_wrapper.cc
deleted file mode 100644
index b6f0a57..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/libmemtrack_wrapper.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "libmemtrack_wrapper.h"
-
-#include <dlfcn.h>
-
-#include "logging.h"
-
-namespace {
-
-// Init memtrack service. Removed in the latest version.
-int (*memtrack_init)(void);
-
-// Allocate and dispose memory stats.
-libmemtrack_proc* (*memtrack_proc_new)(void);
-void (*memtrack_proc_destroy)(libmemtrack_proc* p);
-
-// Query memory stats for given process.
-int (*memtrack_proc_get)(libmemtrack_proc* p, pid_t pid);
-
-// Since memory stats is opaque structure, there are helpers to parse it.
-ssize_t (*memtrack_proc_graphics_total)(libmemtrack_proc* p);
-ssize_t (*memtrack_proc_graphics_pss)(libmemtrack_proc* p);
-ssize_t (*memtrack_proc_gl_total)(libmemtrack_proc* p);
-ssize_t (*memtrack_proc_gl_pss)(libmemtrack_proc* p);
-ssize_t (*memtrack_proc_other_total)(libmemtrack_proc* p);
-ssize_t (*memtrack_proc_other_pss)(libmemtrack_proc* p);
-
-typedef ssize_t (*libmemtrack_getter_t)(libmemtrack_proc*);
-
-bool g_initialized = false;
-bool g_broken = false;
-
-template <typename T>
-void Import(T** func, void* lib, const char* name) {
-  *(reinterpret_cast<void**>(func)) = dlsym(lib, name);
-}
-
-bool ImportLibmemtrackSymbols(void* handle) {
-  Import(&memtrack_init, handle, "memtrack_init");
-  Import(&memtrack_proc_new, handle, "memtrack_proc_new");
-  Import(&memtrack_proc_destroy, handle, "memtrack_proc_destroy");
-  Import(&memtrack_proc_get, handle, "memtrack_proc_get");
-  Import(&memtrack_proc_graphics_total, handle, "memtrack_proc_graphics_total");
-  Import(&memtrack_proc_graphics_pss, handle, "memtrack_proc_graphics_pss");
-  Import(&memtrack_proc_gl_total, handle, "memtrack_proc_gl_total");
-  Import(&memtrack_proc_gl_pss, handle, "memtrack_proc_gl_pss");
-  Import(&memtrack_proc_other_total, handle, "memtrack_proc_other_total");
-  Import(&memtrack_proc_other_pss, handle, "memtrack_proc_other_pss");
-
-  if (!memtrack_proc_new || !memtrack_proc_destroy || !memtrack_proc_get) {
-    LogError("Couldn't use libmemtrack. Probably it's API has been changed.");
-    return false;
-  }
-  // Initialization is required on pre-O Android.
-  if (memtrack_init && memtrack_init() != 0) {
-    LogError("Failed to initialize libmemtrack. "
-             "Probably implementation is missing in the ROM.");
-    return false;
-  }
-  return true;
-}
-
-bool LazyOpenLibmemtrack() {
-  if (g_initialized)
-    return true;
-  if (g_broken)
-    return false;
-
-  void *handle = dlopen("libmemtrack.so", RTLD_GLOBAL | RTLD_NOW);
-  if (handle == nullptr) {
-    LogError("Failed to open libmemtrack library.");
-    g_broken = true;
-    return false;
-  }
-
-  if (!ImportLibmemtrackSymbols(handle)) {
-    dlclose(handle);
-    g_broken = true;
-    return false;
-  }
-
-  g_initialized = true;
-  return true;
-}
-
-uint64_t GetOrZero(libmemtrack_getter_t getter, libmemtrack_proc* proc) {
-  if (!getter || !proc)
-    return 0;
-  return static_cast<uint64_t>(getter(proc));
-}
-
-}  // namespace
-
-MemtrackProc::MemtrackProc(int pid) {
-  if (!LazyOpenLibmemtrack())
-    return;
-
-  proc_ = memtrack_proc_new();
-  if (!proc_) {
-    LogError("Failed to create libmemtrack proc. "
-             "Probably it's API has been changed.");
-    return;
-  }
-
-  if (memtrack_proc_get(proc_, pid) != 0) {
-    // Don't log an error since not every process has memtrack stats.
-    memtrack_proc_destroy(proc_);
-    proc_ = nullptr;
-  }
-}
-
-MemtrackProc::~MemtrackProc() {
-  if (proc_)
-    memtrack_proc_destroy(proc_);
-}
-
-uint64_t MemtrackProc::graphics_total() const {
-  return GetOrZero(memtrack_proc_graphics_total, proc_);
-}
-
-uint64_t MemtrackProc::graphics_pss() const {
-  return GetOrZero(memtrack_proc_graphics_pss, proc_);
-}
-
-uint64_t MemtrackProc::gl_total() const {
-  return GetOrZero(memtrack_proc_gl_total, proc_);
-}
-
-uint64_t MemtrackProc::gl_pss() const {
-  return GetOrZero(memtrack_proc_gl_pss, proc_);
-}
-
-uint64_t MemtrackProc::other_total() const {
-  return GetOrZero(memtrack_proc_other_total, proc_);
-}
-
-uint64_t MemtrackProc::other_pss() const {
-  return GetOrZero(memtrack_proc_other_pss, proc_);
-}
diff --git a/systrace/catapult/systrace/atrace_helper/jni/libmemtrack_wrapper.h b/systrace/catapult/systrace/atrace_helper/jni/libmemtrack_wrapper.h
deleted file mode 100644
index cec5cec..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/libmemtrack_wrapper.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LIBMEMTRACK_WRAPPER_H_
-#define LIBMEMTRACK_WRAPPER_H_
-
-#include <stdint.h>
-
-// Wrapper on top of libmemtrack API.
-
-// Opaque structure with memory stats.
-// See $ANDROID/system/core/libmemtrack/include/memtrack/memtrack.h for details.
-struct libmemtrack_proc;
-
-// These numbers are vendor-specific and can't be trusted as a stable metric
-// across different hardware or driver versions.
-class MemtrackProc {
- public:
-  explicit MemtrackProc(int pid);
-  ~MemtrackProc();
-
-  uint64_t graphics_total() const;
-  uint64_t graphics_pss() const;
-  uint64_t gl_total() const;
-  uint64_t gl_pss() const;
-  uint64_t other_total() const;
-  uint64_t other_pss() const;
-
-  bool has_errors() const { return proc_ == nullptr; };
-
- private:
-  MemtrackProc(const MemtrackProc&) = delete;
-  void operator=(const MemtrackProc&) = delete;
-
-  libmemtrack_proc* proc_ = nullptr;
-};
-
-#endif  // LIBMEMTRACK_WRAPPER_H_
diff --git a/systrace/catapult/systrace/atrace_helper/jni/logging.h b/systrace/catapult/systrace/atrace_helper/jni/logging.h
deleted file mode 100644
index c132051..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/logging.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef LOGGING_H_
-#define LOGGING_H_
-
-#include <android/log.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define CHECK_ARGS(COND, ERR)                                          \
-  "FAILED CHECK(%s) @ %s:%d (errno: %s)\n", #COND, __FILE__, __LINE__, \
-      strerror(ERR)
-
-#define CHECK(x)                                              \
-  do {                                                        \
-    if (!(x)) {                                               \
-      const int e = errno;                                    \
-      __android_log_print(ANDROID_LOG_FATAL, "atrace_helper", \
-                          CHECK_ARGS(x, e));                  \
-      fprintf(stderr, "\n" CHECK_ARGS(x, e));                 \
-      fflush(stderr);                                         \
-      abort();                                                \
-    }                                                         \
-  } while (0)
-
-inline void LogError(const char* message) {
-  __android_log_write(ANDROID_LOG_ERROR, "atrace_helper", message);
-  fprintf(stderr, "\n%s\n", message);
-  fflush(stderr);
-}
-
-#endif  // LOGGING_H_
diff --git a/systrace/catapult/systrace/atrace_helper/jni/main.cc b/systrace/catapult/systrace/atrace_helper/jni/main.cc
deleted file mode 100644
index 764b573..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/main.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <memory>
-#include <set>
-#include <string>
-#include <sstream>
-
-#include "atrace_process_dump.h"
-#include "logging.h"
-
-namespace {
-
-std::unique_ptr<AtraceProcessDump> g_prog;
-
-void ParseFullDumpConfig(const std::string& config, AtraceProcessDump* prog) {
-  using FullDumpMode = AtraceProcessDump::FullDumpMode;
-  if (config == "all") {
-    prog->set_full_dump_mode(FullDumpMode::kAllProcesses);
-  } else if (config == "apps") {
-    prog->set_full_dump_mode(FullDumpMode::kAllJavaApps);
-  } else {
-    std::set<std::string> whitelist;
-    std::istringstream ss(config);
-    std::string entry;
-    while (std::getline(ss, entry, ',')) {
-      whitelist.insert(entry);
-    }
-    if (whitelist.empty())
-      return;
-    prog->set_full_dump_mode(FullDumpMode::kOnlyWhitelisted);
-    prog->set_full_dump_whitelist(whitelist);
-  }
-}
-
-}  // namespace
-
-int main(int argc, char** argv) {
-  if (argc == 2 && !strcmp(argv[1], "--echo-ts")) {
-    // Used by clock sync marker to correct the difference between
-    // Linux monotonic clocks on the device and host.
-    printf("%llu\n", time_utils::GetTimestamp());
-    return 0;
-  }
-
-  bool background = false;
-  int dump_interval_ms = 5000;
-  char out_file[PATH_MAX] = {};
-  bool dump_to_file = false;
-  int count = -1;
-
-  AtraceProcessDump* prog = new AtraceProcessDump();
-  g_prog = std::unique_ptr<AtraceProcessDump>(prog);
-
-  if (geteuid()) {
-    fprintf(stderr, "Must run as root\n");
-    exit(EXIT_FAILURE);
-  }
-
-  int opt;
-  while ((opt = getopt(argc, argv, "bm:gst:o:c:")) != -1) {
-    switch (opt) {
-      case 'b':
-        background = true;
-        break;
-      case 'm':
-        ParseFullDumpConfig(optarg, prog);
-        break;
-      case 'g':
-        prog->enable_graphics_stats();
-        break;
-      case 's':
-        prog->enable_print_smaps();
-        break;
-      case 't':
-        dump_interval_ms = atoi(optarg);
-        CHECK(dump_interval_ms > 0);
-        break;
-      case 'c':
-        count = atoi(optarg);
-        CHECK(count > 0);
-        break;
-      case 'o':
-        strncpy(out_file, optarg, sizeof(out_file));
-        dump_to_file = true;
-        break;
-      default:
-        fprintf(stderr,
-                "Usage: %s [-b] [-m full_dump_filter] [-g] [-s] "
-                "[-t dump_interval_ms] "
-                "[-c dumps_count] [-o out.json]\n",
-                argv[0]);
-        exit(EXIT_FAILURE);
-    }
-  }
-
-  prog->set_dump_count(count);
-  prog->SetDumpInterval(dump_interval_ms);
-
-  FILE* out_stream = stdout;
-  char tmp_file[PATH_MAX];
-  if (dump_to_file) {
-    unlink(out_file);
-    sprintf(tmp_file, "%s.tmp", out_file);
-    out_stream = fopen(tmp_file, "w");
-    CHECK(out_stream);
-  }
-
-  if (background) {
-    if (!dump_to_file) {
-      fprintf(stderr, "-b requires -o for output dump path.\n");
-      exit(EXIT_FAILURE);
-    }
-    printf("Continuing in background. kill -TERM to terminate the daemon.\n");
-    CHECK(daemon(0 /* nochdir */, 0 /* noclose */) == 0);
-  }
-
-  auto on_exit = [](int) { g_prog->Stop(); };
-  signal(SIGINT, on_exit);
-  signal(SIGTERM, on_exit);
-
-  prog->RunAndPrintJson(out_stream);
-  fclose(out_stream);
-
-  if (dump_to_file)
-    rename(tmp_file, out_file);
-}
diff --git a/systrace/catapult/systrace/atrace_helper/jni/process_info.h b/systrace/catapult/systrace/atrace_helper/jni/process_info.h
deleted file mode 100644
index 089e77e..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/process_info.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PROCESS_INFO_H_
-#define PROCESS_INFO_H_
-
-#include <map>
-
-#include "process_memory_stats.h"
-
-struct ThreadInfo {
-  int tid;
-  char name[16];
-};
-
-struct ProcessInfo {
-  int pid;
-  bool in_kernel;
-  bool is_app;
-  char name[256];
-  char exe[256];
-  std::map<int, ThreadInfo> threads;
-};
-
-struct ProcessSnapshot {
-  int pid;
-  ProcessMemoryStats memory;
-  // OOM badness and tolerance (oom_adj is deprecated).
-  int oom_score;
-  int oom_score_adj;
-  // Page faults.
-  unsigned long minor_faults;
-  unsigned long major_faults;
-  // Time spent in userspace and in the kernel.
-  unsigned long utime;
-  unsigned long stime;
-};
-
-#endif  // PROCESS_INFO_H_
diff --git a/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc b/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc
deleted file mode 100644
index e13dc22..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.cc
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "process_memory_stats.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <memory>
-
-#include "file_utils.h"
-#include "libmemtrack_wrapper.h"
-#include "logging.h"
-
-namespace {
-
-const int kKbPerPage = 4;
-
-const char kRss[] = "Rss";
-const char kPss[] = "Pss";
-const char kSwap[] = "Swap";
-const char kSharedClean[] = "Shared_Clean";
-const char kSharedDirty[] = "Shared_Dirty";
-const char kPrivateClean[] = "Private_Clean";
-const char kPrivateDirty[] = "Private_Dirty";
-
-bool ReadSmapsMetric(
-    const char* line, const char* metric, int metric_size, uint64_t* res) {
-  if (strncmp(line, metric, metric_size - 1))
-    return false;
-  if (line[metric_size - 1] != ':')
-    return false;
-  *res = strtoull(line + metric_size, nullptr, 10);
-  return true;
-}
-
-}  // namespace
-
-bool ProcessMemoryStats::ReadLightStats(int pid) {
-  char buf[64];
-  if (file_utils::ReadProcFile(pid, "statm", buf, sizeof(buf)) <= 0)
-    return false;
-  uint32_t vm_size_pages;
-  uint32_t rss_pages;
-  int res = sscanf(buf, "%u %u", &vm_size_pages, &rss_pages);
-  CHECK(res == 2);
-  rss_kb_ = rss_pages * kKbPerPage;
-  virt_kb_ = vm_size_pages * kKbPerPage;
-  return true;
-}
-
-bool ProcessMemoryStats::ReadFullStats(int pid) {
-  const size_t kBufSize = 8u * 1024 * 1024;
-  std::unique_ptr<char[]> buf(new char[kBufSize]);
-  ssize_t rsize = file_utils::ReadProcFile(pid, "smaps", &buf[0], kBufSize);
-  if (rsize <= 0)
-    return false;
-  MmapInfo* last_mmap_entry = nullptr;
-  std::unique_ptr<MmapInfo> new_mmap(new MmapInfo());
-  CHECK(mmaps_.empty());
-  CHECK(rss_kb_ == 0);
-
-  // Iterate over all lines in /proc/PID/smaps.
-  file_utils::LineReader rd(&buf[0], rsize);
-  for (const char* line = rd.NextLine(); line; line = rd.NextLine()) {
-    if (!line[0])
-      continue;
-    // Performance optimization (hack).
-    // Any header line starts with lowercase hex digit but subsequent lines
-    // start with uppercase letter.
-    if (line[0] < 'A' || line[0] > 'Z') {
-      // Note that the mapped file name ([stack]) is optional and won't be
-      // present on anonymous memory maps (hence res >= 3 below).
-      int res = sscanf(line,
-          "%llx-%llx %4s %*llx %*[:0-9a-f] %*[0-9a-f]%*[ \t]%127[^\n]",
-          &new_mmap->start_addr, &new_mmap->end_addr, new_mmap->prot_flags,
-          new_mmap->mapped_file);
-      last_mmap_entry = new_mmap.get();
-      CHECK(new_mmap->end_addr >= new_mmap->start_addr);
-      new_mmap->virt_kb =
-          (new_mmap->end_addr - new_mmap->start_addr) / 1024;
-      if (res == 3)
-        new_mmap->mapped_file[0] = '\0';
-      virt_kb_ += new_mmap->virt_kb;
-      mmaps_.push_back(std::move(new_mmap));
-      new_mmap.reset(new MmapInfo());
-    } else {
-      // The current line is a metrics line within a mmap entry, e.g.:
-      // Size:   4 kB
-      uint64_t size = 0;
-      CHECK(last_mmap_entry);
-      if (ReadSmapsMetric(line, kRss, sizeof(kRss), &size)) {
-        last_mmap_entry->rss_kb = size;
-        rss_kb_ += size;
-      } else if (ReadSmapsMetric(line, kPss, sizeof(kPss), &size)) {
-        last_mmap_entry->pss_kb = size;
-        pss_kb_ += size;
-      } else if (ReadSmapsMetric(line, kSwap, sizeof(kSwap), &size)) {
-        last_mmap_entry->swapped_kb = size;
-        swapped_kb_ += size;
-      } else if (ReadSmapsMetric(
-                     line, kSharedClean, sizeof(kSharedClean), &size)) {
-        last_mmap_entry->shared_clean_kb = size;
-        shared_clean_kb_ += size;
-      } else if (ReadSmapsMetric(
-                     line, kSharedDirty, sizeof(kSharedDirty), &size)) {
-        last_mmap_entry->shared_dirty_kb = size;
-        shared_dirty_kb_ += size;
-      } else if (ReadSmapsMetric(
-                     line, kPrivateClean, sizeof(kPrivateClean), &size)) {
-        last_mmap_entry->private_clean_kb = size;
-        private_clean_kb_ += size;
-      } else if (ReadSmapsMetric(
-                     line, kPrivateDirty, sizeof(kPrivateDirty), &size)) {
-        last_mmap_entry->private_dirty_kb = size;
-        private_dirty_kb_ += size;
-      }
-    }
-  }
-  full_stats_ = true;
-  return true;
-}
-
-bool ProcessMemoryStats::ReadGpuStats(int pid) {
-  MemtrackProc mt(pid);
-  gpu_graphics_kb_ = mt.graphics_total() / 1024;
-  gpu_graphics_pss_kb_ = mt.graphics_pss() / 1024;
-  gpu_gl_kb_ = mt.gl_total() / 1024;
-  gpu_gl_pss_kb_ = mt.gl_pss() / 1024;
-  gpu_other_kb_ = mt.other_total() / 1024;
-  gpu_other_pss_kb_ = mt.other_pss() / 1024;
-
-  gpu_stats_ = !mt.has_errors() &&
-      (gpu_graphics_kb_ != 0 || gpu_gl_kb_ != 0 || gpu_other_kb_ != 0);
-  return gpu_stats_;
-}
diff --git a/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.h b/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.h
deleted file mode 100644
index 84584aa..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/process_memory_stats.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PROCESS_MEMORY_STATS_H_
-#define PROCESS_MEMORY_STATS_H_
-
-#include <stdint.h>
-
-#include <memory>
-#include <vector>
-
-// Reads process memory stats from /proc/pid/{statm,smaps}.
-class ProcessMemoryStats {
- public:
-  struct MmapInfo {
-    char mapped_file[128] = {};
-    char prot_flags[5] = {};
-    uint64_t start_addr = 0;
-    uint64_t end_addr = 0;
-    uint64_t virt_kb = 0;
-    uint64_t pss_kb = 0;  // Proportional Set Size.
-    uint64_t rss_kb = 0;  // Resident Set Size.
-    uint64_t private_clean_kb = 0;
-    uint64_t private_dirty_kb = 0;
-    uint64_t shared_clean_kb = 0;
-    uint64_t shared_dirty_kb = 0;
-    uint64_t swapped_kb = 0;
-  };
-
-  ProcessMemoryStats() {}
-
-  bool ReadLightStats(int pid);
-  bool ReadFullStats(int pid);
-  bool ReadGpuStats(int pid);
-
-  // Available after ReadLightStats().
-  uint64_t virt_kb() const { return virt_kb_; }
-  uint64_t rss_kb() const { return rss_kb_; }
-
-  // Available after ReadFullStats().
-  bool full_stats_available() const { return full_stats_; }
-  uint64_t pss_kb() const { return pss_kb_; }
-  uint64_t private_clean_kb() const { return private_clean_kb_; }
-  uint64_t private_dirty_kb() const { return private_dirty_kb_; }
-  uint64_t shared_clean_kb() const { return shared_clean_kb_; }
-  uint64_t shared_dirty_kb() const { return shared_dirty_kb_; }
-  uint64_t swapped_kb() const { return swapped_kb_; }
-
-  // Available after ReadMemtrackStats().
-  bool gpu_stats_available() const { return gpu_stats_; }
-  uint64_t gpu_graphics_kb() const { return gpu_graphics_kb_; }
-  uint64_t gpu_graphics_pss_kb() const { return gpu_graphics_pss_kb_; }
-  uint64_t gpu_gl_kb() const { return gpu_gl_kb_; }
-  uint64_t gpu_gl_pss_kb() const { return gpu_gl_pss_kb_; }
-  uint64_t gpu_other_kb() const { return gpu_other_kb_; }
-  uint64_t gpu_other_pss_kb() const { return gpu_other_pss_kb_; }
-
-  size_t mmaps_count() const { return mmaps_.size(); }
-  const MmapInfo* mmap(size_t index) const { return mmaps_[index].get(); }
-
- private:
-  ProcessMemoryStats(const ProcessMemoryStats&) = delete;
-  void operator=(const ProcessMemoryStats&) = delete;
-
-  // Light stats.
-  uint64_t virt_kb_ = 0;
-  uint64_t rss_kb_ = 0;
-
-  // Full stats.
-  bool full_stats_ = false;
-  uint64_t pss_kb_ = 0;
-  uint64_t private_clean_kb_ = 0;
-  uint64_t private_dirty_kb_ = 0;
-  uint64_t shared_clean_kb_ = 0;
-  uint64_t shared_dirty_kb_ = 0;
-  uint64_t swapped_kb_ = 0;
-
-  // Graphics stats.
-  bool gpu_stats_ = false;
-  uint64_t gpu_graphics_kb_ = 0;
-  uint64_t gpu_graphics_pss_kb_ = 0;
-  uint64_t gpu_gl_kb_ = 0;
-  uint64_t gpu_gl_pss_kb_ = 0;
-  uint64_t gpu_other_kb_ = 0;
-  uint64_t gpu_other_pss_kb_ = 0;
-
-  std::vector<std::unique_ptr<const MmapInfo>> mmaps_;
-};
-
-#endif  // PROCESS_MEMORY_STATS_H_
diff --git a/systrace/catapult/systrace/atrace_helper/jni/procfs_utils.cc b/systrace/catapult/systrace/atrace_helper/jni/procfs_utils.cc
deleted file mode 100644
index 7edea29..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/procfs_utils.cc
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "procfs_utils.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#include "file_utils.h"
-#include "logging.h"
-
-using file_utils::ForEachPidInProcPath;
-using file_utils::ReadProcFile;
-using file_utils::ReadProcFileTrimmed;
-
-namespace procfs_utils {
-
-namespace {
-
-const char kJavaAppPrefix[] = "/system/bin/app_process";
-const char kZygotePrefix[] = "zygote";
-
-inline void ReadProcString(int pid, const char* path, char* buf, size_t size) {
-  if (!file_utils::ReadProcFileTrimmed(pid, path, buf, size))
-    buf[0] = '\0';
-}
-
-inline void ReadExePath(int pid, char* buf, size_t size) {
-  char exe_path[64];
-  sprintf(exe_path, "/proc/%d/exe", pid);
-  ssize_t res = readlink(exe_path, buf, size - 1);
-  if (res >= 0)
-    buf[res] = '\0';
-  else
-    buf[0] = '\0';
-}
-
-inline bool IsApp(const char* name, const char* exe) {
-  return strncmp(exe, kJavaAppPrefix, sizeof(kJavaAppPrefix) - 1) == 0 &&
-         strncmp(name, kZygotePrefix, sizeof(kZygotePrefix) - 1) != 0;
-}
-
-}  // namespace
-
-int ReadTgid(int pid) {
-  static const char kTgid[] = "\nTgid:";
-  char buf[512];
-  ssize_t rsize = ReadProcFile(pid, "status", buf, sizeof(buf));
-  if (rsize <= 0)
-    return -1;
-  const char* tgid_line = strstr(buf, kTgid);
-  CHECK(tgid_line);
-  return atoi(tgid_line + sizeof(kTgid) - 1);
-}
-
-std::unique_ptr<ProcessInfo> ReadProcessInfo(int pid) {
-  ProcessInfo* process = new ProcessInfo();
-  process->pid = pid;
-  ReadProcString(pid, "cmdline", process->name, sizeof(process->name));
-  if (process->name[0] != 0) {
-    ReadExePath(pid, process->exe, sizeof(process->exe));
-    process->is_app = IsApp(process->name, process->exe);
-  } else {
-    ReadProcString(pid, "comm", process->name, sizeof(process->name));
-    CHECK(process->name[0]);
-    process->in_kernel = true;
-  }
-  return std::unique_ptr<ProcessInfo>(process);
-}
-
-void ReadProcessThreads(ProcessInfo* process) {
-  if (process->in_kernel)
-    return;
-
-  char tasks_path[64];
-  sprintf(tasks_path, "/proc/%d/task", process->pid);
-  ForEachPidInProcPath(tasks_path, [process](int tid) {
-    if (process->threads.count(tid))
-      return;
-    ThreadInfo thread = { tid, "" };
-    char task_comm[64];
-    sprintf(task_comm, "task/%d/comm", tid);
-    ReadProcString(process->pid, task_comm, thread.name, sizeof(thread.name));
-    if (thread.name[0] == '\0' && process->is_app)
-      strcpy(thread.name, "UI Thread");
-    process->threads[tid] = thread;
-  });
-}
-
-bool ReadOomStats(ProcessSnapshot* snapshot) {
-  char buf[64];
-  if (ReadProcFileTrimmed(snapshot->pid, "oom_score", buf, sizeof(buf)))
-    snapshot->oom_score = atoi(buf);
-  else
-    return false;
-  if (ReadProcFileTrimmed(snapshot->pid, "oom_score_adj", buf, sizeof(buf)))
-    snapshot->oom_score_adj = atoi(buf);
-  else
-    return false;
-  return true;
-}
-
-bool ReadPageFaultsAndCpuTimeStats(ProcessSnapshot* snapshot) {
-  char buf[512];
-  if (!ReadProcFileTrimmed(snapshot->pid, "stat", buf, sizeof(buf)))
-    return false;
-  int ret = sscanf(buf,
-      "%*d (%*[^)]) %*c %*d %*d %*d %*d %*d %*u %lu %*lu %lu %*lu %lu %lu",
-      &snapshot->minor_faults, &snapshot->major_faults,
-      &snapshot->utime, &snapshot->stime);
-  CHECK(ret == 4);
-  return true;
-}
-
-bool ReadMemInfoStats(std::map<std::string, uint64_t>* mem_info) {
-  char buf[1024];
-  ssize_t rsize = file_utils::ReadFile("/proc/meminfo", buf, sizeof(buf));
-  if (rsize <= 0)
-    return false;
-
-  file_utils::LineReader reader(buf, rsize);
-  for (const char* line = reader.NextLine();
-       line && line[0];
-       line = reader.NextLine()) {
-
-    const char* pos_colon = strstr(line, ":");
-    if (pos_colon == nullptr)
-      continue;  // Should not happen.
-    std::string name(line, pos_colon - line);
-    (*mem_info)[name] = strtoull(&pos_colon[1], nullptr, 10);
-  }
-  return true;
-}
-
-}  // namespace procfs_utils
diff --git a/systrace/catapult/systrace/atrace_helper/jni/procfs_utils.h b/systrace/catapult/systrace/atrace_helper/jni/procfs_utils.h
deleted file mode 100644
index e5ce704..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/procfs_utils.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PROCFS_UTILS_H_
-#define PROCFS_UTILS_H_
-
-#include <map>
-#include <memory>
-#include <string>
-
-#include "process_info.h"
-
-namespace procfs_utils {
-
-// ProcFS doesn't necessarly distinguish PID vs. TID, but all threads of a
-// process have the same Thread Group ID which is equal to Process ID.
-int ReadTgid(int pid);
-
-std::unique_ptr<ProcessInfo> ReadProcessInfo(int pid);
-void ReadProcessThreads(ProcessInfo* process);
-
-bool ReadOomStats(ProcessSnapshot* snapshot);
-bool ReadPageFaultsAndCpuTimeStats(ProcessSnapshot* snapshot);
-
-bool ReadMemInfoStats(std::map<std::string, uint64_t>* mem_info);
-
-}  // namespace procfs_utils
-
-#endif  // PROCFS_UTILS_H_
diff --git a/systrace/catapult/systrace/atrace_helper/jni/time_utils.cc b/systrace/catapult/systrace/atrace_helper/jni/time_utils.cc
deleted file mode 100644
index 2da7d79..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/time_utils.cc
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "time_utils.h"
-
-#include <sys/time.h>
-#include <sys/timerfd.h>
-#include <time.h>
-
-#include "logging.h"
-
-namespace time_utils {
-
-uint64_t GetTimestamp() {
-  struct timespec ts = {};
-  CHECK(clock_gettime(CLOCK_MONOTONIC_COARSE, &ts) == 0);
-  return ts.tv_sec * 1000 + ts.tv_nsec / 1000000ul;
-}
-
-PeriodicTimer::PeriodicTimer(int interval_ms) : interval_ms_(interval_ms) {
-  timer_fd_ = -1;
-}
-
-PeriodicTimer::~PeriodicTimer() {
-  Stop();
-}
-
-void PeriodicTimer::Start() {
-  Stop();
-  timer_fd_ = timerfd_create(CLOCK_MONOTONIC, 0);
-  CHECK(timer_fd_ >= 0);
-  int sec = interval_ms_ / 1000;
-  int nsec = (interval_ms_ % 1000) * 1000000;
-  struct itimerspec ts = {};
-  ts.it_value.tv_nsec = nsec;
-  ts.it_value.tv_sec = sec;
-  ts.it_interval.tv_nsec = nsec;
-  ts.it_interval.tv_sec = sec;
-  CHECK(timerfd_settime(timer_fd_, 0, &ts, nullptr) == 0);
-}
-
-void PeriodicTimer::Stop() {
-  if (timer_fd_ < 0)
-    return;
-  close(timer_fd_);
-  timer_fd_ = -1;
-}
-
-bool PeriodicTimer::Wait() {
-  if (timer_fd_ < 0)
-    return false;  // Not started yet.
-  uint64_t stub = 0;
-  int res = read(timer_fd_, &stub, sizeof(stub));
-  if (res < 0 && errno == EBADF)
-    return false;  // Interrupted by Stop().
-  CHECK(res > 0);
-  return true;
-}
-
-}  // namespace time_utils
diff --git a/systrace/catapult/systrace/atrace_helper/jni/time_utils.h b/systrace/catapult/systrace/atrace_helper/jni/time_utils.h
deleted file mode 100644
index 2319601..0000000
--- a/systrace/catapult/systrace/atrace_helper/jni/time_utils.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef TIME_UTILS_H_
-#define TIME_UTILS_H_
-
-#include <stdint.h>
-
-namespace time_utils {
-
-uint64_t GetTimestamp();
-
-class PeriodicTimer {
- public:
-  PeriodicTimer(int interval_ms);
-  ~PeriodicTimer();
-
-  void Start();
-  void Stop();
-  // Wait for next tick. Returns false if interrupted by Stop() or not started.
-  bool Wait();
-
- private:
-  PeriodicTimer(const PeriodicTimer&) = delete;
-  void operator=(const PeriodicTimer&) = delete;
-
-  const int interval_ms_;
-  int timer_fd_;
-};
-
-}  // namespace time_utils
-
-#endif  // TIME_UTILS_
diff --git a/systrace/catapult/systrace/bin/adb_profile_chrome b/systrace/catapult/systrace/bin/adb_profile_chrome
deleted file mode 100755
index 5231c8f..0000000
--- a/systrace/catapult/systrace/bin/adb_profile_chrome
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-if __name__ == '__main__':
-  systrace_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
-  sys.path.append(systrace_path)
-  from profile_chrome import main
-  sys.exit(main.main())
diff --git a/systrace/catapult/systrace/bin/adb_profile_chrome_startup b/systrace/catapult/systrace/bin/adb_profile_chrome_startup
deleted file mode 100755
index 6bd3270..0000000
--- a/systrace/catapult/systrace/bin/adb_profile_chrome_startup
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import optparse
-import os
-import sys
-import webbrowser
-
-_SYSTRACE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
-sys.path.append(_SYSTRACE_DIR)
-
-from profile_chrome import chrome_startup_tracing_agent
-from profile_chrome import flags
-from profile_chrome import profiler
-from profile_chrome import ui
-from systrace import util
-from systrace.tracing_agents import atrace_agent
-
-_CATAPULT_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), '..', '..')
-sys.path.append(os.path.join(_CATAPULT_DIR, 'devil'))
-
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-
-
-_CHROME_STARTUP_MODULES = [atrace_agent, chrome_startup_tracing_agent]
-_DEFAULT_CHROME_CATEGORIES = '_DEFAULT_CHROME_CATEGORIES'
-
-
-def _CreateOptionParser():
-  parser = optparse.OptionParser(description='Record about://tracing profiles '
-                                 'from Android browsers startup, combined with '
-                                 'Android systrace. See http://dev.chromium.org'
-                                 '/developers/how-tos/trace-event-profiling-'
-                                 'tool for detailed instructions for '
-                                 'profiling.', conflict_handler='resolve')
-  parser = util.get_main_options(parser)
-
-  browsers = sorted(util.get_supported_browsers().keys())
-  parser.add_option('-b', '--browser', help='Select among installed browsers. '
-                    'One of ' + ', '.join(browsers) + ', "stable" is used by '
-                    'default.', type='choice', choices=browsers,
-                    default='stable')
-  parser.add_option('-v', '--verbose', help='Verbose logging.',
-                    action='store_true')
-  parser.add_option('-z', '--compress', help='Compress the resulting trace '
-                    'with gzip. ', action='store_true')
-  parser.add_option('-t', '--time', help='Stops tracing after N seconds, 0 to '
-                    'manually stop (startup trace ends after at most 5s).',
-                    default=5, metavar='N', type='int', dest='trace_time')
-
-  parser.add_option_group(chrome_startup_tracing_agent.add_options(parser))
-  parser.add_option_group(atrace_agent.add_options(parser))
-  parser.add_option_group(flags.OutputOptions(parser))
-
-  return parser
-
-
-def main():
-  parser = _CreateOptionParser()
-  options, _ = parser.parse_args()
-
-  if not options.device_serial_number:
-    devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
-    if len(devices) == 0:
-      raise RuntimeError('No ADB devices connected.')
-    elif len(devices) >= 2:
-      raise RuntimeError('Multiple devices connected, serial number required')
-    options.device_serial_number = devices[0]
-
-  if options.verbose:
-    logging.getLogger().setLevel(logging.DEBUG)
-
-  devices = device_utils.DeviceUtils.HealthyDevices()
-  if len(devices) != 1:
-    logging.error('Exactly 1 device must be attached.')
-    return 1
-  device = devices[0]
-  package_info = util.get_supported_browsers()[options.browser]
-
-  options.device = device
-  options.package_info = package_info
-
-  # TODO(washingtonp): Once Systrace uses all of the profile_chrome agents,
-  # manually setting these options will no longer be necessary and should be
-  # removed.
-  options.ring_buffer = False
-  options.trace_memory = False
-  options.chrome_categories = _DEFAULT_CHROME_CATEGORIES
-
-  if options.atrace_categories in ['list', 'help']:
-    atrace_agent.list_categories(atrace_agent.get_config(options))
-    print '\n'
-    return 0
-  result = profiler.CaptureProfile(options,
-                                   options.trace_time,
-                                   _CHROME_STARTUP_MODULES,
-                                   output=options.output_file,
-                                   compress=options.compress,
-                                   write_json=options.write_json)
-  if options.view:
-    if sys.platform == 'darwin':
-      os.system('/usr/bin/open %s' % os.path.abspath(result))
-    else:
-      webbrowser.open(result)
-
-
-if __name__ == '__main__':
-  sys.exit(main())
diff --git a/systrace/catapult/systrace/bin/run_tests b/systrace/catapult/systrace/bin/run_tests
deleted file mode 100755
index 4944c36..0000000
--- a/systrace/catapult/systrace/bin/run_tests
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env python2.7
-
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Runs the unit test suite for systrace."""
-
-import optparse
-import os
-import sys
-import unittest
-
-_SYSTRACE_DIR = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.path.pardir))
-sys.path.insert(0, _SYSTRACE_DIR)
-from systrace import decorators
-
-
-def main():
-  parser = optparse.OptionParser()
-  parser.add_option("-d", "--device", dest="device",
-                    help="device the test runs on", metavar="DEVICE")
-  options, _args = parser.parse_args()  # pylint: disable=unused-variable
-  unfiltered_suite = unittest.TestLoader().discover(
-      _SYSTRACE_DIR,
-      pattern = '*_unittest.py',
-      top_level_dir=_SYSTRACE_DIR)
-  suite = unittest.TestSuite()
-
-  for test_group in unfiltered_suite._tests:
-    for inner_group in test_group:
-      for test in inner_group:
-        method = getattr(
-          test, test._testMethodName)  # pylint: disable=protected-access
-        if not decorators.ShouldSkip(method, options.device):
-          suite.addTest(test)
-
-  result = unittest.TextTestRunner(verbosity=2).run(suite)
-  if result.wasSuccessful():
-    sys.exit(0)
-  else:
-    sys.exit(1)
-
-if __name__ == '__main__':
-  main()
diff --git a/systrace/catapult/systrace/bin/systrace b/systrace/catapult/systrace/bin/systrace
deleted file mode 100755
index bce86a7..0000000
--- a/systrace/catapult/systrace/bin/systrace
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-_SYSTRACE_DIR = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.path.pardir))
-sys.path.insert(0, _SYSTRACE_DIR)
-from systrace import run_systrace
-
-if __name__ == '__main__':
-  sys.exit(run_systrace.main())
diff --git a/systrace/catapult/systrace/profile_chrome/__init__.py b/systrace/catapult/systrace/profile_chrome/__init__.py
deleted file mode 100644
index 8257681..0000000
--- a/systrace/catapult/systrace/profile_chrome/__init__.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-
-_CATAPULT_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), '..', '..')
-sys.path.append(os.path.join(_CATAPULT_DIR, 'devil'))
-sys.path.append(os.path.join(_CATAPULT_DIR, 'systrace'))
-sys.path.append(os.path.join(_CATAPULT_DIR, 'common', 'py_utils'))
diff --git a/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py
deleted file mode 100644
index e389c15..0000000
--- a/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent.py
+++ /dev/null
@@ -1,153 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import optparse
-import os
-import py_utils
-import re
-
-from devil.android import flag_changer
-from devil.android.constants import webapk
-from devil.android.perf import cache_control
-from devil.android.sdk import intent
-
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-class ChromeStartupTracingAgent(tracing_agents.TracingAgent):
-  def __init__(self, device, package_info, webapk_package, cold, url,
-               trace_time=None):
-    tracing_agents.TracingAgent.__init__(self)
-    self._device = device
-    self._package_info = package_info
-    self._webapk_package = webapk_package
-    self._cold = cold
-    self._logcat_monitor = self._device.GetLogcatMonitor()
-    self._url = url
-    self._trace_time = trace_time
-    self._trace_file = None
-    self._trace_finish_re = re.compile(r' Completed startup tracing to (.*)')
-    self._flag_changer = flag_changer.FlagChanger(
-      self._device, self._package_info.cmdline_file)
-
-  def __repr__(self):
-    return 'Browser Startup Trace'
-
-  def _SetupTracing(self):
-    # TODO(lizeb): Figure out how to clean up the command-line file when
-    # _TearDownTracing() is not executed in StopTracing().
-    flags = ['--trace-startup']
-    if self._trace_time is not None:
-      flags.append('--trace-startup-duration={}'.format(self._trace_time))
-    self._flag_changer.AddFlags(flags)
-    self._device.ForceStop(self._package_info.package)
-    if self._webapk_package:
-      self._device.ForceStop(self._webapk_package)
-      logging.warning('Forces to stop the WebAPK and the browser provided by '
-                      '--browser: %s. Please make sure that this browser '
-                      'matches the host browser of the WebAPK %s. ',
-                      self._package_info.package,
-                      self._webapk_package)
-    if self._cold:
-      self._device.EnableRoot()
-      cache_control.CacheControl(self._device).DropRamCaches()
-    launch_intent = None
-    if self._webapk_package:
-      launch_intent = intent.Intent(
-          package=self._webapk_package,
-          activity=webapk.WEBAPK_MAIN_ACTIVITY,
-          data=self._url)
-    elif self._url == '':
-      launch_intent = intent.Intent(
-          action='android.intent.action.MAIN',
-          package=self._package_info.package,
-          activity=self._package_info.activity)
-    else:
-      launch_intent = intent.Intent(
-          package=self._package_info.package,
-          activity=self._package_info.activity,
-          data=self._url,
-          extras={'create_new_tab': True})
-    self._logcat_monitor.Start()
-    self._device.StartActivity(launch_intent, blocking=True)
-
-  def _TearDownTracing(self):
-    self._flag_changer.Restore()
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    self._SetupTracing()
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    try:
-      self._trace_file = self._logcat_monitor.WaitFor(
-          self._trace_finish_re).group(1)
-    finally:
-      self._TearDownTracing()
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    with open(self._PullTrace(), 'r') as f:
-      trace_data = f.read()
-    return trace_result.TraceResult('traceEvents', trace_data)
-
-  def _PullTrace(self):
-    trace_file = self._trace_file.replace('/storage/emulated/0/', '/sdcard/')
-    host_file = os.path.join(os.path.curdir, os.path.basename(trace_file))
-    self._device.PullFile(trace_file, host_file)
-    return host_file
-
-  def SupportsExplicitClockSync(self):
-    return False
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    # pylint: disable=unused-argument
-    assert self.SupportsExplicitClockSync(), ('Clock sync marker cannot be '
-        'recorded since explicit clock sync is not supported.')
-
-
-class ChromeStartupConfig(tracing_agents.TracingConfig):
-  def __init__(self, device, package_info, webapk_package, cold, url,
-               chrome_categories, trace_time):
-    tracing_agents.TracingConfig.__init__(self)
-    self.device = device
-    self.package_info = package_info
-    self.webapk_package = webapk_package
-    self.cold = cold
-    self.url = url
-    self.chrome_categories = chrome_categories
-    self.trace_time = trace_time
-
-
-def try_create_agent(config):
-  return ChromeStartupTracingAgent(config.device, config.package_info,
-                                   config.webapk_package,
-                                   config.cold, config.url, config.trace_time)
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Chrome startup tracing')
-  options.add_option('--url', help='URL to visit on startup. Default: '
-                     'https://www.google.com. An empty URL launches Chrome '
-                     'with a MAIN action instead of VIEW.',
-                     default='https://www.google.com', metavar='URL')
-  options.add_option('--cold', help='Flush the OS page cache before starting '
-                     'the browser. Note that this require a device with root '
-                     'access.', default=False, action='store_true')
-  options.add_option('--webapk-package', help='Specify the package name '
-                     'of the WebAPK to launch the given URL. An empty URL '
-                     'laucnhes the host browser of the WebAPK with an new '
-                     'tab.', default=None)
-
-  return options
-
-def get_config(options):
-  return ChromeStartupConfig(options.device, options.package_info,
-                             options.webapk_package, options.cold,
-                             options.url, options.chrome_categories,
-                             options.trace_time)
diff --git a/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent_unittest.py b/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent_unittest.py
deleted file mode 100644
index 6123c3c..0000000
--- a/systrace/catapult/systrace/profile_chrome/chrome_startup_tracing_agent_unittest.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import json
-
-from profile_chrome import chrome_startup_tracing_agent
-from systrace import decorators
-from systrace.tracing_agents import agents_unittest
-
-
-class ChromeAgentTest(agents_unittest.BaseAgentTest):
-  # TODO(washingtonp): This test seems to fail on the version of Android
-  # currently on the Trybot servers (KTU84P), although it works on Android M.
-  # Either upgrade the version of Android on the Trybot servers or determine
-  # if there is a way to run this agent on Android KTU84P.
-  @decorators.Disabled
-  def testTracing(self):
-    agent = chrome_startup_tracing_agent.ChromeStartupTracingAgent(
-        self.device, self.package_info,
-        '', # webapk_package
-        False, # cold
-        'https://www.google.com' # url
-    )
-
-    try:
-      agent.StartAgentTracing(None)
-    finally:
-      agent.StopAgentTracing()
-
-    result = agent.GetResults()
-    json.loads(result.raw_data)
diff --git a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py
deleted file mode 100644
index 1e8895b..0000000
--- a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent.py
+++ /dev/null
@@ -1,214 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import json
-import optparse
-import os
-import py_utils
-import re
-
-from devil.android import device_errors
-from devil.android.sdk import intent
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-DEFAULT_CHROME_CATEGORIES = '_DEFAULT_CHROME_CATEGORIES'
-_HEAP_PROFILE_MMAP_PROPERTY = 'heapprof.mmap'
-
-
-class ChromeTracingAgent(tracing_agents.TracingAgent):
-  def __init__(self, device, package_info, ring_buffer, trace_memory=False):
-    tracing_agents.TracingAgent.__init__(self)
-    self._device = device
-    self._package_info = package_info
-    self._ring_buffer = ring_buffer
-    self._logcat_monitor = self._device.GetLogcatMonitor()
-    self._trace_file = None
-    self._trace_memory = trace_memory
-    self._is_tracing = False
-    self._trace_start_re = \
-       re.compile(r'Logging performance trace to file')
-    self._trace_finish_re = \
-       re.compile(r'Profiler finished[.] Results are in (.*)[.]')
-    self._categories = None
-
-  def __repr__(self):
-    return 'chrome trace'
-
-  @staticmethod
-  def GetCategories(device, package_info):
-    with device.GetLogcatMonitor() as logmon:
-      device.BroadcastIntent(intent.Intent(
-          action='%s.GPU_PROFILER_LIST_CATEGORIES' % package_info.package))
-      try:
-        json_category_list = logmon.WaitFor(
-            re.compile(r'{"traceCategoriesList(.*)'), timeout=5).group(0)
-      except device_errors.CommandTimeoutError:
-        raise RuntimeError('Performance trace category list marker not found. '
-                           'Is the correct version of the browser running?')
-
-    record_categories = set()
-    disabled_by_default_categories = set()
-    json_data = json.loads(json_category_list)['traceCategoriesList']
-    for item in json_data:
-      for category in item.split(','):
-        if category.startswith('disabled-by-default'):
-          disabled_by_default_categories.add(category)
-        else:
-          record_categories.add(category)
-
-    return list(record_categories), list(disabled_by_default_categories)
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    self._categories = _ComputeChromeCategories(config)
-    self._logcat_monitor.Start()
-    start_extras = {'categories': ','.join(self._categories)}
-    if self._ring_buffer:
-      start_extras['continuous'] = None
-    self._device.BroadcastIntent(intent.Intent(
-        action='%s.GPU_PROFILER_START' % self._package_info.package,
-        extras=start_extras))
-
-    if self._trace_memory:
-      self._device.EnableRoot()
-      self._device.SetProp(_HEAP_PROFILE_MMAP_PROPERTY, 1)
-
-    # Chrome logs two different messages related to tracing:
-    #
-    # 1. "Logging performance trace to file"
-    # 2. "Profiler finished. Results are in [...]"
-    #
-    # The first one is printed when tracing starts and the second one indicates
-    # that the trace file is ready to be pulled.
-    try:
-      self._logcat_monitor.WaitFor(self._trace_start_re, timeout=5)
-      self._is_tracing = True
-    except device_errors.CommandTimeoutError:
-      raise RuntimeError(
-          'Trace start marker not found. Possible causes: 1) Is the correct '
-          'version of the browser running? 2) Is the browser already launched?')
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    if self._is_tracing:
-      self._device.BroadcastIntent(intent.Intent(
-          action='%s.GPU_PROFILER_STOP' % self._package_info.package))
-      self._trace_file = self._logcat_monitor.WaitFor(
-          self._trace_finish_re, timeout=120).group(1)
-      self._is_tracing = False
-    if self._trace_memory:
-      self._device.SetProp(_HEAP_PROFILE_MMAP_PROPERTY, 0)
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    with open(self._PullTrace(), 'r') as f:
-      trace_data = f.read()
-    return trace_result.TraceResult('traceEvents', trace_data)
-
-  def _PullTrace(self):
-    trace_file = self._trace_file.replace('/storage/emulated/0/', '/sdcard/')
-    host_file = os.path.join(os.path.curdir, os.path.basename(trace_file))
-    try:
-      self._device.PullFile(trace_file, host_file)
-    except device_errors.AdbCommandFailedError:
-      raise RuntimeError(
-          'Cannot pull the trace file. Have you granted Storage permission to '
-          'the browser? (Android Settings -> Apps -> [the browser app] -> '
-          'Permissions -> Storage)')
-    return host_file
-
-  def SupportsExplicitClockSync(self):
-    return False
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    # pylint: disable=unused-argument
-    assert self.SupportsExplicitClockSync(), ('Clock sync marker cannot be '
-        'recorded since explicit clock sync is not supported.')
-
-
-class ChromeConfig(tracing_agents.TracingConfig):
-  def __init__(self, chrome_categories, trace_cc, trace_frame_viewer,
-               trace_ubercompositor, trace_gpu, trace_flow, trace_memory,
-               trace_scheduler, ring_buffer, device, package_info):
-    tracing_agents.TracingConfig.__init__(self)
-    self.chrome_categories = chrome_categories
-    self.trace_cc = trace_cc
-    self.trace_frame_viewer = trace_frame_viewer
-    self.trace_ubercompositor = trace_ubercompositor
-    self.trace_gpu = trace_gpu
-    self.trace_flow = trace_flow
-    self.trace_memory = trace_memory
-    self.trace_scheduler = trace_scheduler
-    self.ring_buffer = ring_buffer
-    self.device = device
-    self.package_info = package_info
-
-
-def try_create_agent(config):
-  if config.chrome_categories:
-    return ChromeTracingAgent(config.device, config.package_info,
-                              config.ring_buffer, config.trace_memory)
-  return None
-
-def add_options(parser):
-  chrome_opts = optparse.OptionGroup(parser, 'Chrome tracing options')
-  chrome_opts.add_option('-c', '--categories', help='Select Chrome tracing '
-                         'categories with comma-delimited wildcards, '
-                         'e.g., "*", "cat1*,-cat1a". Omit this option to trace '
-                         'Chrome\'s default categories. Chrome tracing can be '
-                         'disabled with "--categories=\'\'". Use "list" to '
-                         'see the available categories.',
-                         metavar='CHROME_CATEGORIES', dest='chrome_categories')
-  chrome_opts.add_option('--trace-cc',
-                         help='Deprecated, use --trace-frame-viewer.',
-                         action='store_true')
-  chrome_opts.add_option('--trace-frame-viewer',
-                         help='Enable enough trace categories for '
-                         'compositor frame viewing.', action='store_true')
-  chrome_opts.add_option('--trace-ubercompositor',
-                         help='Enable enough trace categories for '
-                         'ubercompositor frame data.', action='store_true')
-  chrome_opts.add_option('--trace-gpu', help='Enable extra trace categories '
-                         'for GPU data.', action='store_true')
-  chrome_opts.add_option('--trace-flow', help='Enable extra trace categories '
-                         'for IPC message flows.', action='store_true')
-  chrome_opts.add_option('--trace-memory', help='Enable extra trace categories '
-                         'for memory profile. (tcmalloc required)',
-                         action='store_true')
-  chrome_opts.add_option('--trace-scheduler', help='Enable extra trace '
-                         'categories for scheduler state',
-                         action='store_true')
-  return chrome_opts
-
-def get_config(options):
-  return ChromeConfig(options.chrome_categories, options.trace_cc,
-                      options.trace_frame_viewer, options.trace_ubercompositor,
-                      options.trace_gpu, options.trace_flow,
-                      options.trace_memory, options.trace_scheduler,
-                      options.ring_buffer, options.device,
-                      options.package_info)
-
-def _ComputeChromeCategories(config):
-  categories = []
-  if config.trace_frame_viewer:
-    categories.append('disabled-by-default-cc.debug')
-  if config.trace_ubercompositor:
-    categories.append('disabled-by-default-cc.debug*')
-  if config.trace_gpu:
-    categories.append('disabled-by-default-gpu.debug*')
-  if config.trace_flow:
-    categories.append('disabled-by-default-toplevel.flow')
-  if config.trace_memory:
-    categories.append('disabled-by-default-memory')
-  if config.trace_scheduler:
-    categories.append('disabled-by-default-blink.scheduler')
-    categories.append('disabled-by-default-cc.debug.scheduler')
-    categories.append('disabled-by-default-renderer.scheduler')
-  if config.chrome_categories:
-    categories += config.chrome_categories.split(',')
-  return categories
diff --git a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py b/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py
deleted file mode 100644
index 25c701a..0000000
--- a/systrace/catapult/systrace/profile_chrome/chrome_tracing_agent_unittest.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import json
-
-from profile_chrome import chrome_tracing_agent
-from systrace import decorators
-from systrace.tracing_agents import agents_unittest
-
-
-class ChromeAgentTest(agents_unittest.BaseAgentTest):
-  # TODO(washingtonp): This test seems to fail on the version of Android
-  # currently on the Trybot servers (KTU84P), although it works on Android M.
-  # Either upgrade the version of Android on the Trybot servers or determine
-  # if there is a way to run this agent on Android KTU84P.
-  @decorators.Disabled
-  def testGetCategories(self):
-    curr_browser = self.GetChromeProcessID()
-    if curr_browser == None:
-      self.StartBrowser()
-
-    categories = \
-        chrome_tracing_agent.ChromeTracingAgent.GetCategories(
-            self.device, self.package_info)
-
-    self.assertEquals(len(categories), 2)
-    self.assertTrue(categories[0])
-    self.assertTrue(categories[1])
-
-  # TODO(washingtonp): This test is pretty flaky on the version of Android
-  # currently on the Trybot servers (KTU84P), although it works on Android M.
-  # Either upgrade the version of Android on the Trybot servers or determine
-  # if there is a way to run this agent on Android KTU84P.
-  @decorators.Disabled
-  def testTracing(self):
-    curr_browser = self.GetChromeProcessID()
-    if curr_browser == None:
-      self.StartBrowser()
-
-    categories = '*'
-    ring_buffer = False
-    agent = chrome_tracing_agent.ChromeTracingAgent(self.device,
-                                                    self.package_info,
-                                                    ring_buffer)
-    agent.StartAgentTracing(chrome_tracing_agent.ChromeConfig(categories, None,
-        None, None, None, None, None, None, ring_buffer, self.device,
-        self.package_info))
-    agent.StopAgentTracing()
-    result = agent.GetResults()
-    json.loads(result.raw_data)
diff --git a/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py
deleted file mode 100644
index 9d041b9..0000000
--- a/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import optparse
-import os
-import py_utils
-import re
-
-from profile_chrome import util
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-_DDMS_SAMPLING_FREQUENCY_US = 100
-
-
-class DdmsAgent(tracing_agents.TracingAgent):
-  def __init__(self, device, package_info):
-    tracing_agents.TracingAgent.__init__(self)
-    self._device = device
-    self._package = package_info.package
-    self._output_file = None
-    self._supports_sampling = self._SupportsSampling()
-
-  def __repr__(self):
-    return 'ddms profile'
-
-  def _SupportsSampling(self):
-    for line in self._device.RunShellCommand(
-        ['am', '--help'], check_return=True):
-      if re.match(r'.*am profile start.*--sampling', line):
-        return True
-    return False
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    self._output_file = (
-        '/data/local/tmp/ddms-profile-%s' % util.GetTraceTimestamp())
-    cmd = ['am', 'profile', 'start']
-    if self._supports_sampling:
-      cmd.extend(['--sampling', str(_DDMS_SAMPLING_FREQUENCY_US)])
-    cmd.extend([self._package, self._output_file])
-    self._device.RunShellCommand(cmd, check_return=True)
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    self._device.RunShellCommand(
-        ['am', 'profile', 'stop', self._package], check_return=True)
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    with open(self._PullTrace(), 'r') as f:
-      trace_data = f.read()
-    return trace_result.TraceResult('ddms', trace_data)
-
-  def _PullTrace(self):
-    if not self._output_file:
-      return None
-
-    host_file = os.path.join(
-        os.path.curdir, os.path.basename(self._output_file))
-    self._device.PullFile(self._output_file, host_file)
-    return host_file
-
-  def SupportsExplicitClockSync(self):
-    return False
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    # pylint: disable=unused-argument
-    assert self.SupportsExplicitClockSync(), ('Clock sync marker cannot be '
-        'recorded since explicit clock sync is not supported.')
-
-
-class DdmsConfig(tracing_agents.TracingConfig):
-  def __init__(self, device, package_info, ddms):
-    tracing_agents.TracingConfig.__init__(self)
-    self.device = device
-    self.package_info = package_info
-    self.ddms = ddms
-
-
-def try_create_agent(config):
-  if config.ddms:
-    return DdmsAgent(config.device, config.package_info)
-  return None
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Java tracing')
-  options.add_option('--ddms', help='Trace Java execution using DDMS '
-                     'sampling.', action='store_true')
-  return options
-
-def get_config(options):
-  return DdmsConfig(options.device, options.package_info, options.ddms)
diff --git a/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent_unittest.py b/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent_unittest.py
deleted file mode 100644
index c7269bb..0000000
--- a/systrace/catapult/systrace/profile_chrome/ddms_tracing_agent_unittest.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from profile_chrome import ddms_tracing_agent
-from systrace import decorators
-from systrace.tracing_agents import agents_unittest
-
-
-class DdmsAgentTest(agents_unittest.BaseAgentTest):
-  # TODO(washingtonp): The DDMS test is flaky on the Tryserver, but it
-  # consistently passes on Android M. Need to figure out why the result data
-  # does not start with '*version' and why the test is flaky.
-  @decorators.Disabled
-  def testTracing(self):
-    agent = ddms_tracing_agent.DdmsAgent(self.device, self.package_info)
-
-    try:
-      agent.StartAgentTracing(None)
-    finally:
-      agent.StopAgentTracing()
-
-    result = agent.GetResults()
-    self.assertTrue(result.raw_data.startswith('*version'))
diff --git a/systrace/catapult/systrace/profile_chrome/fake_agent_1.py b/systrace/catapult/systrace/profile_chrome/fake_agent_1.py
deleted file mode 100644
index 62889f4..0000000
--- a/systrace/catapult/systrace/profile_chrome/fake_agent_1.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import optparse
-import tempfile
-
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-class FakeAgent(object):
-  def __init__(self, contents='fake-contents'):
-    self.contents = contents
-    self.stopped = False
-    self.filename = None
-    self.config = None
-    self.timeout = None
-
-  def StartAgentTracing(self, config, timeout=None):
-    self.config = config
-    self.timeout = timeout
-    return True
-
-  # pylint: disable=unused-argument
-  def StopAgentTracing(self, timeout=None):
-    self.stopped = True
-    return True
-
-  # pylint: disable=unused-argument
-  def GetResults(self, timeout=None):
-    trace_data = open(self._PullTrace()).read()
-    return trace_result.TraceResult('fakeData', trace_data)
-
-  def _PullTrace(self):
-    with tempfile.NamedTemporaryFile(delete=False) as f:
-      self.filename = f.name
-      f.write(self.contents)
-      return f.name
-
-  # pylint: disable=no-self-use
-  def SupportsExplicitClockSync(self):
-    return False
-
-  # pylint: disable=unused-argument, no-self-use
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    print ('Clock sync marker cannot be recorded since explicit clock sync '
-           'is not supported.')
-
-  def __repr__(self):
-    return 'faketrace'
-
-
-class FakeConfig(tracing_agents.TracingConfig):
-  def __init__(self):
-    tracing_agents.TracingConfig.__init__(self)
-
-
-# pylint: disable=unused-argument
-def try_create_agent(config):
-  return FakeAgent()
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Fake options.')
-  return options
-
-# pylint: disable=unused-argument
-def get_config(options):
-  return FakeConfig()
diff --git a/systrace/catapult/systrace/profile_chrome/fake_agent_2.py b/systrace/catapult/systrace/profile_chrome/fake_agent_2.py
deleted file mode 100644
index 477b6c7..0000000
--- a/systrace/catapult/systrace/profile_chrome/fake_agent_2.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import optparse
-import tempfile
-
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-class FakeAgent2(object):
-  def __init__(self, contents='fake-contents'):
-    self.contents = contents
-    self.stopped = False
-    self.config = None
-    self.filename = None
-
-  # pylint: disable=unused-argument
-  def StartAgentTracing(self, config, timeout=None):
-    self.config = config
-    return True
-
-  # pylint: disable=unused-argument
-  def StopAgentTracing(self, timeout=None):
-    self.stopped = True
-    return True
-
-  # pylint: disable=unused-argument
-  def GetResults(self, timeout=None):
-    trace_data = open(self._PullTrace()).read()
-    return trace_result.TraceResult('fakeDataTwo', trace_data)
-
-  def _PullTrace(self):
-    with tempfile.NamedTemporaryFile(delete=False) as f:
-      self.filename = f.name
-      f.write(self.contents)
-      return f.name
-
-  # pylint: disable=no-self-use
-  def SupportsExplicitClockSync(self):
-    return False
-
-  # pylint: disable=unused-argument, no-self-use
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    print ('Clock sync marker cannot be recorded since explicit clock sync '
-           'is not supported.')
-
-  def __repr__(self):
-    return 'faketracetwo'
-
-
-class FakeConfig(tracing_agents.TracingConfig):
-  def __init__(self):
-    tracing_agents.TracingConfig.__init__(self)
-
-
-# pylint: disable=unused-argument
-def try_create_agent(config):
-  return FakeAgent2()
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Fake options.')
-  return options
-
-# pylint: disable=unused-argument
-def get_config(options):
-  return FakeConfig()
diff --git a/systrace/catapult/systrace/profile_chrome/flags.py b/systrace/catapult/systrace/profile_chrome/flags.py
deleted file mode 100644
index c951123..0000000
--- a/systrace/catapult/systrace/profile_chrome/flags.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import optparse
-
-
-def OutputOptions(parser):
-  output_options = optparse.OptionGroup(parser, 'Output options')
-  output_options.add_option('-o', '--output', dest='output_file',
-                            help='Save trace output to file.')
-  output_options.add_option('--json', help='Save trace as raw JSON instead of '
-                            'HTML.', dest='write_json')
-  output_options.add_option('--view', help='Open resulting trace file in a '
-                            'browser.', action='store_true')
-  return output_options
diff --git a/systrace/catapult/systrace/profile_chrome/main.py b/systrace/catapult/systrace/profile_chrome/main.py
deleted file mode 100755
index 6cd815c..0000000
--- a/systrace/catapult/systrace/profile_chrome/main.py
+++ /dev/null
@@ -1,160 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import optparse
-import os
-import sys
-import webbrowser
-
-from profile_chrome import chrome_tracing_agent
-from profile_chrome import ddms_tracing_agent
-from profile_chrome import flags
-from profile_chrome import perf_tracing_agent
-from profile_chrome import profiler
-from profile_chrome import ui
-from systrace import util
-from systrace.tracing_agents import atrace_agent
-
-from devil.android import device_utils
-from devil.android.sdk import adb_wrapper
-
-
-_PROFILE_CHROME_AGENT_MODULES = [chrome_tracing_agent, ddms_tracing_agent,
-                                 perf_tracing_agent, atrace_agent]
-
-
-def _CreateOptionParser():
-  parser = optparse.OptionParser(description='Record about://tracing profiles '
-                                 'from Android browsers. See http://dev.'
-                                 'chromium.org/developers/how-tos/trace-event-'
-                                 'profiling-tool for detailed instructions for '
-                                 'profiling.', conflict_handler='resolve')
-
-  parser = util.get_main_options(parser)
-
-  timed_options = optparse.OptionGroup(parser, 'Timed tracing')
-  timed_options.add_option('-t', '--time', help='Profile for N seconds and '
-                          'download the resulting trace.', metavar='N',
-                           type='float', dest='trace_time')
-  parser.add_option_group(timed_options)
-
-  cont_options = optparse.OptionGroup(parser, 'Continuous tracing')
-  cont_options.add_option('--continuous', help='Profile continuously until '
-                          'stopped.', action='store_true')
-  cont_options.add_option('--ring-buffer', help='Use the trace buffer as a '
-                          'ring buffer and save its contents when stopping '
-                          'instead of appending events into one long trace.',
-                          action='store_true')
-  parser.add_option_group(cont_options)
-
-  parser.add_option_group(flags.OutputOptions(parser))
-
-  browsers = sorted(util.get_supported_browsers().keys())
-  parser.add_option('-b', '--browser', help='Select among installed browsers. '
-                    'One of ' + ', '.join(browsers) + ', "stable" is used by '
-                    'default.', type='choice', choices=browsers,
-                    default='stable')
-  parser.add_option('-v', '--verbose', help='Verbose logging.',
-                    action='store_true')
-  parser.add_option('-z', '--compress', help='Compress the resulting trace '
-                    'with gzip. ', action='store_true')
-
-  # Add options from profile_chrome agents.
-  for module in _PROFILE_CHROME_AGENT_MODULES:
-    parser.add_option_group(module.add_options(parser))
-
-  return parser
-
-
-def main():
-  parser = _CreateOptionParser()
-  options, _args = parser.parse_args()  # pylint: disable=unused-variable
-  if options.trace_cc:
-    parser.error("""--trace-cc is deprecated.
-
-For basic jank busting uses, use  --trace-frame-viewer
-For detailed study of ubercompositor, pass --trace-ubercompositor.
-
-When in doubt, just try out --trace-frame-viewer.
-""")
-
-  logging.basicConfig()
-
-  if options.verbose:
-    logging.getLogger().setLevel(logging.DEBUG)
-
-  if not options.device_serial_number:
-    devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
-    if len(devices) == 0:
-      raise RuntimeError('No ADB devices connected.')
-    elif len(devices) >= 2:
-      raise RuntimeError('Multiple devices connected, serial number required')
-    options.device_serial_number = devices[0]
-  device = device_utils.DeviceUtils.HealthyDevices(device_arg=
-      options.device_serial_number)[0]
-  package_info = util.get_supported_browsers()[options.browser]
-
-  options.device = device
-  options.package_info = package_info
-
-  # Include Chrome categories by default in profile_chrome.
-  if not options.chrome_categories:
-    options.chrome_categories = chrome_tracing_agent.DEFAULT_CHROME_CATEGORIES
-
-  if options.chrome_categories in ['list', 'help']:
-    ui.PrintMessage('Collecting record categories list...', eol='')
-    record_categories = []
-    disabled_by_default_categories = []
-    record_categories, disabled_by_default_categories = \
-        chrome_tracing_agent.ChromeTracingAgent.GetCategories(
-            device, package_info)
-
-    ui.PrintMessage('done')
-    ui.PrintMessage('Record Categories:')
-    ui.PrintMessage('\n'.join('\t%s' % item \
-        for item in sorted(record_categories)))
-
-    ui.PrintMessage('\nDisabled by Default Categories:')
-    ui.PrintMessage('\n'.join('\t%s' % item \
-        for item in sorted(disabled_by_default_categories)))
-
-    return 0
-
-  if options.atrace_categories in ['list', 'help']:
-    atrace_agent.list_categories(atrace_agent.get_config(options))
-    print '\n'
-    return 0
-
-  if (perf_tracing_agent.PerfProfilerAgent.IsSupported() and
-      options.perf_categories in ['list', 'help']):
-    ui.PrintMessage('\n'.join(
-        perf_tracing_agent.PerfProfilerAgent.GetCategories(device)))
-    return 0
-
-  if not options.trace_time and not options.continuous:
-    ui.PrintMessage('Time interval or continuous tracing should be specified.')
-    return 1
-
-  if (options.chrome_categories and options.atrace_categories and
-      'webview' in options.atrace_categories):
-    logging.warning('Using the "webview" category in atrace together with '
-                    'Chrome tracing results in duplicate trace events.')
-
-  if options.output_file:
-    options.output_file = os.path.expanduser(options.output_file)
-  result = profiler.CaptureProfile(
-      options,
-      options.trace_time if not options.continuous else 0,
-      _PROFILE_CHROME_AGENT_MODULES,
-      output=options.output_file,
-      compress=options.compress,
-      write_json=options.write_json)
-  if options.view:
-    if sys.platform == 'darwin':
-      os.system('/usr/bin/open %s' % os.path.abspath(result))
-    else:
-      webbrowser.open(result)
diff --git a/systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py b/systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py
deleted file mode 100644
index 65831df..0000000
--- a/systrace/catapult/systrace/profile_chrome/perf_tracing_agent.py
+++ /dev/null
@@ -1,253 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import optparse
-import os
-import py_utils
-import signal
-import subprocess
-import sys
-import tempfile
-
-from devil.android import device_temp_file
-from devil.android.perf import perf_control
-
-from profile_chrome import ui
-from systrace import trace_result
-from systrace import tracing_agents
-
-_CATAPULT_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), '..', '..')
-sys.path.append(os.path.join(_CATAPULT_DIR, 'telemetry'))
-try:
-  # pylint: disable=F0401
-  from telemetry.internal.platform.profiler import android_profiling_helper
-  from telemetry.internal.util import binary_manager
-except ImportError:
-  android_profiling_helper = None
-  binary_manager = None
-
-
-_PERF_OPTIONS = [
-    # Sample across all processes and CPUs to so that the current CPU gets
-    # recorded to each sample.
-    '--all-cpus',
-    # In perf 3.13 --call-graph requires an argument, so use the -g short-hand
-    # which does not.
-    '-g',
-    # Increase priority to avoid dropping samples. Requires root.
-    '--realtime', '80',
-    # Record raw samples to get CPU information.
-    '--raw-samples',
-    # Increase sampling frequency for better coverage.
-    '--freq', '2000',
-]
-
-
-class _PerfProfiler(object):
-  def __init__(self, device, perf_binary, categories):
-    self._device = device
-    self._output_file = device_temp_file.DeviceTempFile(
-        self._device.adb, prefix='perf_output')
-    self._log_file = tempfile.TemporaryFile()
-
-    # TODO(jbudorick) Look at providing a way to unhandroll this once the
-    #                 adb rewrite has fully landed.
-    device_param = (['-s', str(self._device)] if str(self._device) else [])
-    cmd = ['adb'] + device_param + \
-          ['shell', perf_binary, 'record',
-           '--output', self._output_file.name] + _PERF_OPTIONS
-    if categories:
-      cmd += ['--event', ','.join(categories)]
-    self._perf_control = perf_control.PerfControl(self._device)
-    self._perf_control.SetPerfProfilingMode()
-    self._perf_process = subprocess.Popen(cmd,
-                                          stdout=self._log_file,
-                                          stderr=subprocess.STDOUT)
-
-  def SignalAndWait(self):
-    self._device.KillAll('perf', signum=signal.SIGINT)
-    self._perf_process.wait()
-    self._perf_control.SetDefaultPerfMode()
-
-  def _FailWithLog(self, msg):
-    self._log_file.seek(0)
-    log = self._log_file.read()
-    raise RuntimeError('%s. Log output:\n%s' % (msg, log))
-
-  def PullResult(self, output_path):
-    if not self._device.FileExists(self._output_file.name):
-      self._FailWithLog('Perf recorded no data')
-
-    perf_profile = os.path.join(output_path,
-                                os.path.basename(self._output_file.name))
-    self._device.PullFile(self._output_file.name, perf_profile)
-    if not os.stat(perf_profile).st_size:
-      os.remove(perf_profile)
-      self._FailWithLog('Perf recorded a zero-sized file')
-
-    self._log_file.close()
-    self._output_file.close()
-    return perf_profile
-
-
-class PerfProfilerAgent(tracing_agents.TracingAgent):
-  def __init__(self, device):
-    tracing_agents.TracingAgent.__init__(self)
-    self._device = device
-    self._perf_binary = self._PrepareDevice(device)
-    self._perf_instance = None
-    self._categories = None
-
-  def __repr__(self):
-    return 'perf profile'
-
-  @staticmethod
-  def IsSupported():
-    return bool(android_profiling_helper)
-
-  @staticmethod
-  def _PrepareDevice(device):
-    if not 'BUILDTYPE' in os.environ:
-      os.environ['BUILDTYPE'] = 'Release'
-    if binary_manager.NeedsInit():
-      binary_manager.InitDependencyManager(None)
-    return android_profiling_helper.PrepareDeviceForPerf(device)
-
-  @classmethod
-  def GetCategories(cls, device):
-    perf_binary = cls._PrepareDevice(device)
-    # Perf binary returns non-zero exit status on "list" command.
-    return device.RunShellCommand([perf_binary, 'list'], check_return=False)
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    self._categories = _ComputePerfCategories(config)
-    self._perf_instance = _PerfProfiler(self._device,
-                                        self._perf_binary,
-                                        self._categories)
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    if not self._perf_instance:
-      return
-    self._perf_instance.SignalAndWait()
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    with open(self._PullTrace(), 'r') as f:
-      trace_data = f.read()
-    return trace_result.TraceResult('perf', trace_data)
-
-  @staticmethod
-  def _GetInteractivePerfCommand(perfhost_path, perf_profile, symfs_dir,
-                                 required_libs, kallsyms):
-    cmd = '%s report -n -i %s --symfs %s --kallsyms %s' % (
-        os.path.relpath(perfhost_path, '.'), perf_profile, symfs_dir, kallsyms)
-    for lib in required_libs:
-      lib = os.path.join(symfs_dir, lib[1:])
-      if not os.path.exists(lib):
-        continue
-      objdump_path = android_profiling_helper.GetToolchainBinaryPath(
-          lib, 'objdump')
-      if objdump_path:
-        cmd += ' --objdump %s' % os.path.relpath(objdump_path, '.')
-        break
-    return cmd
-
-  def _PullTrace(self):
-    symfs_dir = os.path.join(tempfile.gettempdir(),
-                             os.path.expandvars('$USER-perf-symfs'))
-    if not os.path.exists(symfs_dir):
-      os.makedirs(symfs_dir)
-    required_libs = set()
-
-    # Download the recorded perf profile.
-    perf_profile = self._perf_instance.PullResult(symfs_dir)
-    required_libs = \
-        android_profiling_helper.GetRequiredLibrariesForPerfProfile(
-            perf_profile)
-    if not required_libs:
-      logging.warning('No libraries required by perf trace. Most likely there '
-                      'are no samples in the trace.')
-
-    # Build a symfs with all the necessary libraries.
-    kallsyms = android_profiling_helper.CreateSymFs(self._device,
-                                                    symfs_dir,
-                                                    required_libs,
-                                                    use_symlinks=False)
-    perfhost_path = binary_manager.FetchPath(
-        android_profiling_helper.GetPerfhostName(), 'x86_64', 'linux')
-
-    ui.PrintMessage('\nNote: to view the profile in perf, run:')
-    ui.PrintMessage('  ' + self._GetInteractivePerfCommand(perfhost_path,
-        perf_profile, symfs_dir, required_libs, kallsyms))
-
-    # Convert the perf profile into JSON.
-    perf_script_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
-                                    'third_party', 'perf_to_tracing.py')
-    json_file_name = os.path.basename(perf_profile)
-    with open(os.devnull, 'w') as dev_null, \
-        open(json_file_name, 'w') as json_file:
-      cmd = [perfhost_path, 'script', '-s', perf_script_path, '-i',
-             perf_profile, '--symfs', symfs_dir, '--kallsyms', kallsyms]
-      if subprocess.call(cmd, stdout=json_file, stderr=dev_null):
-        logging.warning('Perf data to JSON conversion failed. The result will '
-                        'not contain any perf samples. You can still view the '
-                        'perf data manually as shown above.')
-        return None
-
-    return json_file_name
-
-  def SupportsExplicitClockSync(self):
-    return False
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    # pylint: disable=unused-argument
-    assert self.SupportsExplicitClockSync(), ('Clock sync marker cannot be '
-        'recorded since explicit clock sync is not supported.')
-
-def _OptionalValueCallback(default_value):
-  def callback(option, _, __, parser):  # pylint: disable=unused-argument
-    value = default_value
-    if parser.rargs and not parser.rargs[0].startswith('-'):
-      value = parser.rargs.pop(0)
-    setattr(parser.values, option.dest, value)
-  return callback
-
-
-class PerfConfig(tracing_agents.TracingConfig):
-  def __init__(self, perf_categories, device):
-    tracing_agents.TracingConfig.__init__(self)
-    self.perf_categories = perf_categories
-    self.device = device
-
-
-def try_create_agent(config):
-  if config.perf_categories:
-    return PerfProfilerAgent(config.device)
-  return None
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Perf profiling options')
-  options.add_option('-p', '--perf', help='Capture a perf profile with '
-                     'the chosen comma-delimited event categories. '
-                     'Samples CPU cycles by default. Use "list" to see '
-                     'the available sample types.', action='callback',
-                     default='', callback=_OptionalValueCallback('cycles'),
-                     metavar='PERF_CATEGORIES', dest='perf_categories')
-  return options
-
-def get_config(options):
-  return PerfConfig(options.perf_categories, options.device)
-
-def _ComputePerfCategories(config):
-  if not PerfProfilerAgent.IsSupported():
-    return []
-  if not config.perf_categories:
-    return []
-  return config.perf_categories.split(',')
diff --git a/systrace/catapult/systrace/profile_chrome/perf_tracing_agent_unittest.py b/systrace/catapult/systrace/profile_chrome/perf_tracing_agent_unittest.py
deleted file mode 100644
index d8ebe3a..0000000
--- a/systrace/catapult/systrace/profile_chrome/perf_tracing_agent_unittest.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import json
-
-from profile_chrome import perf_tracing_agent
-from profile_chrome import ui
-from systrace import decorators
-from systrace.tracing_agents import agents_unittest
-
-
-class PerfProfilerAgentTest(agents_unittest.BaseAgentTest):
-  @decorators.ClientOnlyTest
-  def testGetCategories(self):
-    if not perf_tracing_agent.PerfProfilerAgent.IsSupported():
-      return
-    categories = \
-        perf_tracing_agent.PerfProfilerAgent.GetCategories(self.device)
-    assert 'cycles' in ' '.join(categories)
-
-  # TODO(washingtonp): Try enabling this test for the SimpleperfProfilerAgent,
-  # which will be added later.
-  @decorators.Disabled
-  def testTracing(self):
-    if not perf_tracing_agent.PerfProfilerAgent.IsSupported():
-      return
-    ui.EnableTestMode()
-    categories = 'cycles'
-    agent = perf_tracing_agent.PerfProfilerAgent(self.device)
-
-    try:
-      agent.StartAgentTracing(perf_tracing_agent.PerfConfig(categories,
-                                                            self.device))
-    finally:
-      agent.StopAgentTracing()
-
-    result = agent.GetResults()
-    json.loads(result.raw_data)
diff --git a/systrace/catapult/systrace/profile_chrome/profiler.py b/systrace/catapult/systrace/profile_chrome/profiler.py
deleted file mode 100644
index 148aabb..0000000
--- a/systrace/catapult/systrace/profile_chrome/profiler.py
+++ /dev/null
@@ -1,108 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import time
-
-from profile_chrome import chrome_startup_tracing_agent
-from profile_chrome import chrome_tracing_agent
-from profile_chrome import ui
-from profile_chrome import util
-from systrace import output_generator
-from systrace import tracing_controller
-
-
-def _GetResults(trace_results, controller, output, compress, write_json,
-                interval):
-  ui.PrintMessage('Downloading...')
-
-  # Wait for the trace file to get written.
-  time.sleep(1)
-
-  for agent in controller.get_child_agents:
-    if isinstance(agent, chrome_tracing_agent.ChromeTracingAgent):
-      time.sleep(interval / 4)
-
-  # Ignore the systraceController because it will not contain any results,
-  # instead being in charge of collecting results.
-  trace_results = [x for x in controller.all_results if not (x.source_name ==
-      'systraceController')]
-
-  if not trace_results:
-    ui.PrintMessage('No results')
-    return ''
-
-  result = None
-  trace_results = output_generator.MergeTraceResultsIfNeeded(trace_results)
-  if not write_json:
-    ui.PrintMessage('Writing trace HTML...')
-    html_file = output or trace_results[0].source_name + '.html'
-    result = output_generator.GenerateHTMLOutput(trace_results, html_file)
-    ui.PrintMessage('\nWrote file://%s' % result)
-  elif compress and len(trace_results) == 1:
-    result = output or trace_results[0].source_name + '.gz'
-    util.WriteDataToCompressedFile(trace_results[0].raw_data, result)
-  elif len(trace_results) > 1:
-    result = (output or 'chrome-combined-trace-%s.zip' %
-              util.GetTraceTimestamp())
-    util.ArchiveData(trace_results, result)
-  elif output:
-    result = output
-    with open(result, 'wb') as f:
-      f.write(trace_results[0].raw_data)
-  else:
-    result = trace_results[0].source_name
-    with open(result, 'wb') as f:
-      f.write(trace_results[0].raw_data)
-
-  return result
-
-
-def CaptureProfile(options, interval, modules, output=None,
-                   compress=False, write_json=False):
-  """Records a profiling trace saves the result to a file.
-
-  Args:
-    options: Command line options.
-    interval: Time interval to capture in seconds. An interval of None (or 0)
-        continues tracing until stopped by the user.
-    modules: The list of modules to initialize the tracing controller with.
-    output: Output file name or None to use an automatically generated name.
-    compress: If True, the result will be compressed either with gzip or zip
-        depending on the number of captured subtraces.
-    write_json: If True, prefer JSON output over HTML.
-
-  Returns:
-    Path to saved profile.
-  """
-  agents_with_config = tracing_controller.CreateAgentsWithConfig(options,
-                                                                 modules)
-  if chrome_startup_tracing_agent in modules:
-    controller_config = tracing_controller.GetChromeStartupControllerConfig(
-        options)
-  else:
-    controller_config = tracing_controller.GetControllerConfig(options)
-  controller = tracing_controller.TracingController(agents_with_config,
-                                                    controller_config)
-  try:
-    result = controller.StartTracing()
-    trace_type = controller.GetTraceType()
-    if not result:
-      ui.PrintMessage('Trace starting failed.')
-    if interval:
-      ui.PrintMessage(('Capturing %d-second %s. Press Enter to stop early...' %
-                     (interval, trace_type)), eol='')
-      ui.WaitForEnter(interval)
-    else:
-      ui.PrintMessage('Capturing %s. Press Enter to stop...' % trace_type,
-                      eol='')
-      raw_input()
-
-    ui.PrintMessage('Stopping...')
-    all_results = controller.StopTracing()
-  finally:
-    if interval:
-      ui.PrintMessage('done')
-
-  return _GetResults(all_results, controller, output, compress, write_json,
-                     interval)
diff --git a/systrace/catapult/systrace/profile_chrome/profiler_unittest.py b/systrace/catapult/systrace/profile_chrome/profiler_unittest.py
deleted file mode 100644
index 9b35753..0000000
--- a/systrace/catapult/systrace/profile_chrome/profiler_unittest.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-import zipfile
-
-from profile_chrome import profiler
-from profile_chrome import ui
-from profile_chrome import fake_agent_1
-from profile_chrome import fake_agent_2
-from systrace import decorators
-from systrace import tracing_controller
-
-
-class ProfilerTest(unittest.TestCase):
-  def setUp(self):
-    ui.EnableTestMode()
-    self._tracing_options = tracing_controller.TracingControllerConfig(None,
-        None, None, None, None, None, None, None, None)
-
-  @decorators.ClientOnlyTest
-  def testCaptureBasicProfile(self):
-    result = profiler.CaptureProfile(self._tracing_options, 1, [fake_agent_1])
-
-    try:
-      self.assertTrue(os.path.exists(result))
-      self.assertTrue(result.endswith('.html'))
-    finally:
-      if os.path.exists(result):
-        os.remove(result)
-
-  @decorators.ClientOnlyTest
-  def testCaptureJsonProfile(self):
-    result = profiler.CaptureProfile(self._tracing_options, 1,
-                                     [fake_agent_2], write_json=True)
-
-    try:
-      self.assertFalse(result.endswith('.html'))
-      with open(result) as f:
-        self.assertEquals(f.read(), 'fake-contents')
-    finally:
-      if os.path.exists(result):
-        os.remove(result)
-
-  @decorators.ClientOnlyTest
-  def testCaptureMultipleProfiles(self):
-    result = profiler.CaptureProfile(self._tracing_options, 1,
-                                     [fake_agent_1, fake_agent_2],
-                                     write_json=True)
-
-    try:
-      self.assertTrue(result.endswith('.zip'))
-      self.assertTrue(zipfile.is_zipfile(result))
-    finally:
-      if os.path.exists(result):
-        os.remove(result)
diff --git a/systrace/catapult/systrace/profile_chrome/run_tests b/systrace/catapult/systrace/profile_chrome/run_tests
deleted file mode 100755
index 6ae1854..0000000
--- a/systrace/catapult/systrace/profile_chrome/run_tests
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-cd $(dirname $0)/../
-exec python -m unittest discover profile_chrome '*_unittest.py' $@
diff --git a/systrace/catapult/systrace/profile_chrome/third_party/COPYING b/systrace/catapult/systrace/profile_chrome/third_party/COPYING
deleted file mode 100644
index d159169..0000000
--- a/systrace/catapult/systrace/profile_chrome/third_party/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                    GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                            NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License along
-    with this program; if not, write to the Free Software Foundation, Inc.,
-    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/systrace/catapult/systrace/profile_chrome/third_party/README.chromium b/systrace/catapult/systrace/profile_chrome/third_party/README.chromium
deleted file mode 100644
index 5f58a65..0000000
--- a/systrace/catapult/systrace/profile_chrome/third_party/README.chromium
+++ /dev/null
@@ -1,15 +0,0 @@
-Name: Perf to JSON conversion script
-Short Name: perf_to_json
-URL: http://www.chromium.org
-Version: 0
-Date: 21.7.2014
-Revision: 0
-License: GPL
-License File: NOT_SHIPPED
-Security Critical: No
-
-Description:
-Script for converting perf script events into tracing JSON.
-
-Local Modifications:
-None.
diff --git a/systrace/catapult/systrace/profile_chrome/third_party/perf_to_tracing.py b/systrace/catapult/systrace/profile_chrome/third_party/perf_to_tracing.py
deleted file mode 100644
index 280937a..0000000
--- a/systrace/catapult/systrace/profile_chrome/third_party/perf_to_tracing.py
+++ /dev/null
@@ -1,248 +0,0 @@
-# Script for converting perf script events into tracing JSON.
-#
-# Generated by perf script -g python
-# Licensed under the terms of the GNU GPL License version 2
-
-import json
-import os
-import sys
-
-from collections import deque
-
-
-# Categorize DSOs by component.
-dso_to_comp = {
-    'libdvm.so': 'Java',
-    'libart.so': 'Java',
-    'libjavacore.so': 'Java',
-    'libandroid_runtime.so': 'Android',
-    'libgui.so': 'Android',
-    'libui.so': 'Android',
-    'libbinder.so': 'Android',
-    'libmemalloc.so': 'Android',
-    'libcrypto.so': 'Android',
-    'libcutils.so':'Android',
-    'libutils.so': 'Android',
-    '[kernel.kallsyms]': 'Kernel',
-    'libc.so': 'Standard Lib',
-    'libstdc++.so': 'Standard Lib',
-    'libm.so':'Standard Lib',
-    'libGLESv2_adreno.so': 'GPU Driver',
-    'libGLESv2_adreno200.so': 'GPU Driver',
-    'libq3dtools_adreno200.so': 'GPU Driver',
-    'libEGL_adreno.so': 'GPU Driver',
-    'libEGL_adreno200.so': 'GPU Driver',
-    'libEGL.so': 'GPU Driver',
-    'libgsl.so': 'GPU Driver',
-    'libGLESv2.so': 'GPU Driver',
-    'libsc-a3xx.so': 'GPU Driver',
-    'libadreno_utils.so': 'GPU Driver',
-    'eglsubAndroid.so': 'GPU Driver',
-    'gralloc.msm8960.so': 'GPU Driver',
-    'libadreno_utils': 'GPU Driver',
-    'libGLES_mali.so': 'GPU Driver',
-    'libchromeview.so': 'Chrome',
-    '[unknown]': '<unknown>',
-    '[UNKNOWN]': '<unknown>',
-}
-
-
-def FilterSymbolModule(module):
-  m = dso_to_comp.get(module, None)
-  if m:
-    return m
-  if module.find('libchrome.') == 0:
-    return 'Chrome'
-  if module.find('dalvik') >= 0 or module.find('@') >= 0:
-    return 'Java'
-  return module
-
-
-def FilterSymbolName(module, orign_module, name):
-  if module == 'Java':
-    return name
-  elif module == 'GPU Driver':
-    return name
-  if name == '':
-    return orign_module + ':unknown'
-  if name[0].isdigit() or name == '(nil)':
-    return orign_module + ':unknown'
-  return name
-
-
-class StackFrameNode:
-  def __init__(self, stack_id, name, category):
-    self.stack_id = stack_id
-    self.parent_id = 0
-    self.children = {}
-    self.category = category
-    self.name = name
-    self.samples = []
-    self.total_weight = 0.0
-    self.have_total_weight = False
-    self.parent = None
-
-  def ToDict(self, out_dict):
-    if self.stack_id:
-      node_dict = {}
-      node_dict['name'] = self.name
-      node_dict['category'] = self.category
-      if self.parent_id:
-        node_dict['parent'] = self.parent_id
-
-      out_dict[self.stack_id] = node_dict
-
-    for child in self.children.values():
-      child.ToDict(out_dict)
-    return out_dict
-
-  def GetTotalWeight(self):
-    if self.have_total_weight:
-      return self.total_weight
-    else:
-      # Sum up self samples weight, and children's total weights.
-      for s in self.samples:
-        self.total_weight += s.weight
-      for c in self.children.values():
-        self.total_weight += c.GetTotalWeight()
-      self.have_total_weight = True
-      return self.total_weight
-
-
-class PerfSample:
-  def __init__(self, stack_id, ts, cpu, tid, weight, samp_type, comm):
-    self.stack_id = stack_id
-    self.ts = ts
-    self.cpu = cpu
-    self.tid = tid
-    self.weight = weight
-    self.type = samp_type
-    self.comm = comm
-
-  def ToDict(self):
-    ret = {}
-    ret['ts'] = self.ts / 1000.0  # Timestamp in microseconds
-    ret['tid'] = self.tid  # Thread id
-    ret['cpu'] = self.cpu  # Sampled CPU
-    ret['weight'] = self.weight  # Sample weight
-    ret['name'] = self.type  # Sample type
-    ret['comm'] = self.comm  # Sample type
-    assert self.stack_id != 0
-    if self.stack_id:
-      ret['sf'] = self.stack_id  # Stack frame id
-    return ret
-
-
-samples = []
-root_chain = StackFrameNode(0, 'root', '[unknown]')
-next_stack_id = 1
-tot_period = 0
-saved_period = 0
-
-
-def process_event(param_dict):
-  global next_stack_id
-  global saved_period
-  global tot_period
-
-  samp_comm = param_dict['comm']
-  samp_tid = param_dict['tid']
-  samp_cpu = param_dict['cpu']
-  samp_ts = param_dict['time']
-  samp_period = param_dict['period']
-  samp_type = param_dict['ev_name']
-  tot_period += samp_period
-
-  # Parse call chain.
-  seen_syms = set()
-  chain = deque()
-  for cs in param_dict['cs']:
-    cs_name = cs[0]
-    cs_dso = os.path.basename(cs[1])
-    cs_category = FilterSymbolModule(cs_dso)
-    cs_name = FilterSymbolName(cs_category, cs_dso, cs_name)
-
-    if cs_category != '<unknown>' or len(chain) == 0:
-      sym = (cs_name, cs_category)
-      if sym in seen_syms:
-        while chain[0] != sym:
-          seen_syms.remove(chain[0])
-          chain.popleft()
-      else:
-        seen_syms.add(sym)
-        chain.appendleft(sym)
-
-      # Discard garbage stacktrace before __pthread_start()
-      if cs_name == '__pthread_start(void*)':
-        break
-
-  # Done reading call chain.  Add to stack frame tree.
-  stack_frame = root_chain
-  for call in chain:
-    if call in stack_frame.children:
-      stack_frame = stack_frame.children[call]
-    else:
-      new_node = StackFrameNode(next_stack_id, call[0], call[1])
-      next_stack_id += 1
-      new_node.parent_id = stack_frame.stack_id
-      stack_frame.children[call] = new_node
-      stack_frame = new_node
-
-  # Save sample.
-  sample = PerfSample(stack_frame.stack_id,
-                  samp_ts,
-                  samp_cpu,
-                  samp_tid,
-                  samp_period,
-                  samp_type,
-                  samp_comm)
-  samples.append(sample)
-  stack_frame.samples.append(sample)
-  saved_period += samp_period
-
-
-def trace_begin():
-  pass
-
-
-def trace_end():
-  # Return siblings of a call tree node.
-  def GetNodeSiblings(node):
-    if not node:
-      return []
-    if not node.parent:
-      return []
-    return node.parent.children.values()
-
-  # Try to reduce misplaced stack leaves by moving them up into sibling nodes.
-  def FixCallTree(node, parent):
-    # Get siblings of node's parent.
-    node.parent = parent
-    parent_siblings = GetNodeSiblings(parent)
-
-    # If parent's sibling has same node name, has no children and small weight,
-    # transplant sibling's samples into the current node.
-    for sibling in parent_siblings:
-      if sibling.name == node.name and \
-          len(sibling.children) == 0 and \
-          sibling.GetTotalWeight() <= node.GetTotalWeight() * 0.15:
-
-        # Transplant samples from sibling to current node.
-        for samp in sibling.samples:
-          samp.stack_id = node.stack_id
-          node.samples.append(samp)
-        sibling.samples = []
-        break
-
-    # Recurse child nodes.
-    for c in node.children.values():
-      FixCallTree(c, node)
-
-  FixCallTree(root_chain, None)
-
-  trace_dict = {}
-  trace_dict['samples'] = [s.ToDict() for s in samples]
-  trace_dict['stackFrames'] = root_chain.ToDict({})
-  trace_dict['traceEvents'] = []
-
-  json.dump(trace_dict, sys.stdout, indent=1)
diff --git a/systrace/catapult/systrace/profile_chrome/ui.py b/systrace/catapult/systrace/profile_chrome/ui.py
deleted file mode 100644
index 30ebd9b..0000000
--- a/systrace/catapult/systrace/profile_chrome/ui.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import select
-import sys
-
-
-def PrintMessage(heading, eol='\n'):
-  sys.stdout.write('%s%s' % (heading, eol))
-  sys.stdout.flush()
-
-
-def WaitForEnter(timeout):
-  select.select([sys.stdin], [], [], timeout)
-
-
-def EnableTestMode():
-  def NoOp(*_, **__):  # pylint: disable=unused-argument
-    pass
-  # pylint: disable=W0601
-  global PrintMessage
-  global WaitForEnter
-  PrintMessage = NoOp
-  WaitForEnter = NoOp
-  logging.getLogger().disabled = True
diff --git a/systrace/catapult/systrace/profile_chrome/util.py b/systrace/catapult/systrace/profile_chrome/util.py
deleted file mode 100644
index f5cb5bf..0000000
--- a/systrace/catapult/systrace/profile_chrome/util.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import gzip
-import os
-import time
-import zipfile
-
-
-def ArchiveFiles(host_files, output):
-  with zipfile.ZipFile(output, 'w', zipfile.ZIP_DEFLATED) as z:
-    for host_file in host_files:
-      z.write(host_file)
-      os.unlink(host_file)
-
-def CompressFile(host_file, output):
-  with gzip.open(output, 'wb') as out, open(host_file, 'rb') as input_file:
-    out.write(input_file.read())
-  os.unlink(host_file)
-
-def ArchiveData(trace_results, output):
-  with zipfile.ZipFile(output, 'w', zipfile.ZIP_DEFLATED) as z:
-    for result in trace_results:
-      trace_file = result.source_name + GetTraceTimestamp()
-      WriteDataToCompressedFile(result.raw_data, trace_file)
-      z.write(trace_file)
-      os.unlink(trace_file)
-
-def WriteDataToCompressedFile(data, output):
-  with gzip.open(output, 'wb') as out:
-    out.write(data)
-
-def GetTraceTimestamp():
-  return time.strftime('%Y-%m-%d-%H%M%S', time.localtime())
diff --git a/systrace/catapult/systrace/pylintrc b/systrace/catapult/systrace/pylintrc
deleted file mode 100644
index eb051e6..0000000
--- a/systrace/catapult/systrace/pylintrc
+++ /dev/null
@@ -1,67 +0,0 @@
-[MESSAGES CONTROL]
-
-# Disable the message, report, category or checker with the given id(s).
-# TODO: Shrink this list to as small as possible.
-disable=
-  design,
-  similarities,
-
-  abstract-class-not-used,
-  bad-builtin,
-  bad-continuation,
-  eval-used,
-  fixme,
-  invalid-name,
-  locally-disabled,
-  missing-docstring,
-  protected-access,
-  star-args,
-
-
-[REPORTS]
-
-# Don't write out full reports, just messages.
-reports=no
-
-
-[BASIC]
-
-# Regular expression which should only match correct function names.
-function-rgx=^(?:(?P<exempt>setUp|tearDown|setUpModule|tearDownModule)|(?P<camel_case>_?[A-Z][a-zA-Z0-9]*))$
-
-# Regular expression which should only match correct method names.
-method-rgx=^(?:(?P<exempt>_[a-z0-9_]+__|get|post|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass)|(?P<camel_case>(_{0,2}|test|assert)[A-Z][a-zA-Z0-9_]*))$
-
-# Regular expression which should only match correct argument names.
-argument-rgx=^[a-z][a-z0-9_]*$
-
-# Regular expression which should only match correct variable names.
-variable-rgx=^[a-z][a-z0-9_]*$
-
-# Good variable names which should always be accepted, separated by a comma.
-good-names=main,_
-
-# List of builtins function names that should not be used, separated by a comma.
-bad-functions=apply,input,reduce
-
-
-[VARIABLES]
-
-# Tells wether we should check for unused import in __init__ files.
-init-import=no
-
-# A regular expression matching names used for dummy variables (i.e. not used).
-dummy-variables-rgx=^\*{0,2}(_$|unused_)
-
-
-[TYPECHECK]
-
-# Tells wether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-
-[FORMAT]
-
-# We use two spaces for indents, instead of the usual four spaces or tab.
-indent-string='  '
diff --git a/systrace/catapult/systrace/systrace/AUTHORS b/systrace/catapult/systrace/systrace/AUTHORS
deleted file mode 100644
index 5a7ed82..0000000
--- a/systrace/catapult/systrace/systrace/AUTHORS
+++ /dev/null
@@ -1,12 +0,0 @@
-# Names should be added to this file with this pattern:
-#
-# For individuals:
-#   Name <email address>
-#
-# For organizations:
-#   Organization <fnmatch pattern>
-#
-# See python fnmatch module documentation for more information.
-
-The Chromium Authors <*@chromium.org>
-Google Inc. <*@google.com>
diff --git a/systrace/catapult/systrace/systrace/LICENSE b/systrace/catapult/systrace/systrace/LICENSE
deleted file mode 100644
index 8dc3504..0000000
--- a/systrace/catapult/systrace/systrace/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//    * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//    * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/systrace/catapult/systrace/systrace/README.md b/systrace/catapult/systrace/systrace/README.md
deleted file mode 100644
index 0e103a5..0000000
--- a/systrace/catapult/systrace/systrace/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-<!-- Copyright 2015 The Chromium Authors. All rights reserved.
-     Use of this source code is governed by a BSD-style license that can be
-     found in the LICENSE file.
--->
-Systrace
-========
-
-Systrace relies on
-[Trace-Viewer](https://github.com/catapult-project/catapult/blob/master/tracing/README.md)
-to visualize the traces. The development of Trace-Viewer and Systrace is
-decoupled by the systrace_trace_viewer.html file.
-* The update_systrace_trace_viewer.py script generates
-systrace_trace_viewer.html based on the Trace-Viewer code.
-* Systrace visualizes the trace result based on systrace_trace_viewer.html.
-* Systrace will auto update systrace_trace_viewer.html if
-update_systrace_trace_viewer.py exists.
diff --git a/systrace/catapult/systrace/systrace/__init__.py b/systrace/catapult/systrace/systrace/__init__.py
deleted file mode 100644
index 831f774..0000000
--- a/systrace/catapult/systrace/systrace/__init__.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-import os
-import sys
-
-def _JoinPath(*path_parts):
-  return os.path.abspath(os.path.join(*path_parts))
-
-
-def _AddDirToPythonPath(*path_parts):
-  path = _JoinPath(*path_parts)
-  if os.path.isdir(path) and path not in sys.path:
-    # Some call sites that use Telemetry assume that sys.path[0] is the
-    # directory containing the script, so we add these extra paths to right
-    # after sys.path[0].
-    sys.path.insert(1, path)
-
-_CATAPULT_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), os.path.pardir, os.path.pardir)
-
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'battor')
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_utils')
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_trace_event')
-_AddDirToPythonPath(_CATAPULT_DIR, 'common', 'py_trace_event', 'py_trace_event')
-_AddDirToPythonPath(_CATAPULT_DIR, 'devil')
-_AddDirToPythonPath(_CATAPULT_DIR, 'systrace')
-_AddDirToPythonPath(_CATAPULT_DIR, 'tracing')
diff --git a/systrace/catapult/systrace/systrace/decorators.py b/systrace/catapult/systrace/systrace/decorators.py
deleted file mode 100644
index 8545eaa..0000000
--- a/systrace/catapult/systrace/systrace/decorators.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-def HostOnlyTest(func):
-  """Decorator for running unit tests only on the host device.
-
-  This will disable unit tests from running on Android devices.
-  """
-  return _SkipTestDecoratorHelper(func, ['android'])
-
-
-def ClientOnlyTest(func):
-  """Decorator for running unit tests only on client devices (Android).
-  """
-  return _SkipTestDecoratorHelper(func, ['win', 'linux', 'mac'])
-
-
-def Disabled(func):
-  """Decorator for not running a unit test on any Trybot platform.
-  """
-  return _SkipTestDecoratorHelper(func, ['win', 'linux', 'mac', 'android'])
-
-
-def LinuxMacTest(func):
-  return _SkipTestDecoratorHelper(func, ['win', 'android'])
-
-
-def _SkipTestDecoratorHelper(func, disabled_strings):
-  if not hasattr(func, '_disabled_strings'):
-    setattr(func, '_disabled_strings', set(disabled_strings))
-  return func
-
-
-def ShouldSkip(test, device):
-  """Returns whether the test should be skipped and the reason for it."""
-  if hasattr(test, '_disabled_strings'):
-    disabled_devices = getattr(test, '_disabled_strings')
-    return device in disabled_devices
-  return False
diff --git a/systrace/catapult/systrace/systrace/monitor_unittest.py b/systrace/catapult/systrace/systrace/monitor_unittest.py
deleted file mode 100644
index 65d63e1..0000000
--- a/systrace/catapult/systrace/systrace/monitor_unittest.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import unittest
-
-from systrace import decorators
-from systrace import update_systrace_trace_viewer
-
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-STABLE_VIEWER_PATH = os.path.join(SCRIPT_DIR, 'systrace_trace_viewer.html')
-
-# Tests presence and content of static HTML files used not only for Python
-# systrace capture, but also Java-based capture in the android SDK tools.
-#
-# NOTE: changes to this file should typically be accompanied by changes to the
-# Android SDK's method of systrace capture.
-class MonitorTest(unittest.TestCase):
-
-  @decorators.HostOnlyTest
-  def test_systrace_trace_viewer(self):
-    self.assertEqual(STABLE_VIEWER_PATH,
-      update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
-
-    update_systrace_trace_viewer.update(force_update=True)
-
-    with open(STABLE_VIEWER_PATH) as f:
-      content = f.read().strip()
-
-      # expect big html file
-      self.assertGreater(5 * 1024 * 1024, len(content))
-      self.assertEqual('<', content[0])
-    os.remove(f.name)
-
-
-  @decorators.HostOnlyTest
-  def test_prefix(self):
-    with open(os.path.join(SCRIPT_DIR, 'prefix.html')) as f:
-      content = f.read().strip()
-
-      self.assertTrue("<html>" in content)
-      self.assertTrue("<title>Android System Trace</title>" in content)
-      self.assertTrue("{{SYSTRACE_TRACE_VIEWER_HTML}}" in content)
-
-
-  @decorators.HostOnlyTest
-  def test_suffix(self):
-    with open(os.path.join(SCRIPT_DIR, 'suffix.html')) as f:
-      content = f.read().strip()
-
-      self.assertTrue("</html>" in content)
diff --git a/systrace/catapult/systrace/systrace/output_generator.py b/systrace/catapult/systrace/systrace/output_generator.py
deleted file mode 100644
index 6b63ac8..0000000
--- a/systrace/catapult/systrace/systrace/output_generator.py
+++ /dev/null
@@ -1,190 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import base64
-import gzip
-import json
-import os
-import StringIO
-
-from systrace import tracing_controller
-from systrace import trace_result
-from tracing.trace_data import trace_data
-
-
-# TODO(alexandermont): Current version of trace viewer does not support
-# the controller tracing agent output. Thus we use this variable to
-# suppress this tracing agent's output. This should be removed once
-# trace viewer is working again.
-OUTPUT_CONTROLLER_TRACE_ = False
-CONTROLLER_TRACE_DATA_KEY = 'controllerTraceDataKey'
-_SYSTRACE_TO_TRACE_DATA_NAME_MAPPING = {
-    'androidProcessDump': trace_data.ANDROID_PROCESS_DATA_PART,
-    'atraceProcessDump': trace_data.ATRACE_PROCESS_DUMP_PART,
-    'systemTraceEvents': trace_data.ATRACE_PART,
-    'powerTraceAsString': trace_data.BATTOR_TRACE_PART,
-    'systraceController': trace_data.TELEMETRY_PART,
-    'traceEvents': trace_data.CHROME_TRACE_PART,
-    'waltTrace': trace_data.WALT_TRACE_PART,
-}
-_SYSTRACE_HEADER = 'Systrace'
-
-
-def NewGenerateHTMLOutput(trace_results, output_file_name):
-  trace_data_builder = trace_data.TraceDataBuilder()
-  for trace in trace_results:
-    trace_data_part = _SYSTRACE_TO_TRACE_DATA_NAME_MAPPING.get(
-        trace.source_name)
-    trace_data_builder.AddTraceFor(trace_data_part, trace.raw_data)
-  trace_data_builder.AsData().Serialize(output_file_name, _SYSTRACE_HEADER)
-
-
-def GenerateHTMLOutput(trace_results, output_file_name):
-  """Write the results of systrace to an HTML file.
-
-  Args:
-      trace_results: A list of TraceResults.
-      output_file_name: The name of the HTML file that the trace viewer
-          results should be written to.
-  """
-  def _ReadAsset(src_dir, filename):
-    return open(os.path.join(src_dir, filename)).read()
-
-  # TODO(rnephew): The tracing output formatter is able to handle a single
-  # systrace trace just as well as it handles multiple traces. The obvious thing
-  # to do here would be to use it all for all systrace output: however, we want
-  # to continue using the legacy way of formatting systrace output when a single
-  # systrace and the tracing controller trace are present in order to match the
-  # Java verison of systrace. Java systrace is expected to be deleted at a later
-  # date. We should consolidate this logic when that happens.
-
-  if len(trace_results) > 3:
-    NewGenerateHTMLOutput(trace_results, output_file_name)
-    return os.path.abspath(output_file_name)
-
-  systrace_dir = os.path.abspath(os.path.dirname(__file__))
-
-  try:
-    from systrace import update_systrace_trace_viewer
-  except ImportError:
-    pass
-  else:
-    update_systrace_trace_viewer.update()
-
-  trace_viewer_html = _ReadAsset(systrace_dir, 'systrace_trace_viewer.html')
-
-  # Open the file in binary mode to prevent python from changing the
-  # line endings, then write the prefix.
-  systrace_dir = os.path.abspath(os.path.dirname(__file__))
-  html_prefix = _ReadAsset(systrace_dir, 'prefix.html')
-  html_suffix = _ReadAsset(systrace_dir, 'suffix.html')
-  trace_viewer_html = _ReadAsset(systrace_dir,
-                                  'systrace_trace_viewer.html')
-
-  # Open the file in binary mode to prevent python from changing the
-  # line endings, then write the prefix.
-  html_file = open(output_file_name, 'wb')
-  html_file.write(html_prefix.replace('{{SYSTRACE_TRACE_VIEWER_HTML}}',
-                                      trace_viewer_html))
-
-  # Write the trace data itself. There is a separate section of the form
-  # <script class="trace-data" type="application/text"> ... </script>
-  # for each tracing agent (including the controller tracing agent).
-  html_file.write('<!-- BEGIN TRACE -->\n')
-  for result in trace_results:
-    html_file.write('  <script class="trace-data" type="application/text">\n')
-    html_file.write(_ConvertToHtmlString(result.raw_data))
-    html_file.write('  </script>\n')
-  html_file.write('<!-- END TRACE -->\n')
-
-  # Write the suffix and finish.
-  html_file.write(html_suffix)
-  html_file.close()
-
-  final_path = os.path.abspath(output_file_name)
-  return final_path
-
-def _ConvertToHtmlString(result):
-  """Convert a trace result to the format to be output into HTML.
-
-  If the trace result is a dictionary or list, JSON-encode it.
-  If the trace result is a string, leave it unchanged.
-  """
-  if isinstance(result, dict) or isinstance(result, list):
-    return json.dumps(result)
-  elif isinstance(result, str):
-    return result
-  else:
-    raise ValueError('Invalid trace result format for HTML output')
-
-def GenerateJSONOutput(trace_results, output_file_name):
-  """Write the results of systrace to a JSON file.
-
-  Args:
-      trace_results: A list of TraceResults.
-      output_file_name: The name of the JSON file that the trace viewer
-          results should be written to.
-  """
-  results = _ConvertTraceListToDictionary(trace_results)
-  results[CONTROLLER_TRACE_DATA_KEY] = (
-      tracing_controller.TRACE_DATA_CONTROLLER_NAME)
-  with open(output_file_name, 'w') as json_file:
-    json.dump(results, json_file)
-  final_path = os.path.abspath(output_file_name)
-  return final_path
-
-def MergeTraceResultsIfNeeded(trace_results):
-  """Merge a list of trace data, if possible. This function can take any list
-     of trace data, but it will only merge the JSON data (since that's all
-     we can merge).
-
-     Args:
-        trace_results: A list of TraceResults containing trace data.
-  """
-  if len(trace_results) <= 1:
-    return trace_results
-  merge_candidates = []
-  for result in trace_results:
-    # Try to detect a JSON file cheaply since that's all we can merge.
-    if result.raw_data[0] != '{':
-      continue
-    try:
-      json_data = json.loads(result.raw_data)
-    except ValueError:
-      continue
-    merge_candidates.append(trace_result.TraceResult(result.source_name,
-                                                     json_data))
-
-  if len(merge_candidates) <= 1:
-    return trace_results
-
-  other_results = [r for r in trace_results
-                   if not r.source_name in
-                   [c.source_name for c in merge_candidates]]
-
-  merged_data = merge_candidates[0].raw_data
-
-  for candidate in merge_candidates[1:]:
-    json_data = candidate.raw_data
-    for key, value in json_data.items():
-      if not str(key) in merged_data or not merged_data[str(key)]:
-        merged_data[str(key)] = value
-
-  return ([trace_result.TraceResult('merged-data', json.dumps(merged_data))]
-              + other_results)
-
-def _EncodeTraceData(trace_string):
-  compressed_trace = StringIO.StringIO()
-  with gzip.GzipFile(fileobj=compressed_trace, mode='w') as f:
-    f.write(trace_string)
-  b64_content = base64.b64encode(compressed_trace.getvalue())
-  return b64_content
-
-def _ConvertTraceListToDictionary(trace_list):
-  trace_dict = {}
-  for trace in trace_list:
-    trace_dict[trace.source_name] = trace.raw_data
-  return trace_dict
diff --git a/systrace/catapult/systrace/systrace/output_generator_unittest.py b/systrace/catapult/systrace/systrace/output_generator_unittest.py
deleted file mode 100644
index 58e11ac..0000000
--- a/systrace/catapult/systrace/systrace/output_generator_unittest.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import hashlib
-import json
-import os
-import unittest
-
-from systrace import decorators
-from systrace import output_generator
-from systrace import trace_result
-from systrace import update_systrace_trace_viewer
-from systrace import util
-from tracing.trace_data import trace_data as trace_data_module
-
-
-TEST_DIR = os.path.join(os.path.dirname(__file__), 'test_data')
-ATRACE_DATA = os.path.join(TEST_DIR, 'atrace_data')
-BATTOR_DATA = os.path.join(TEST_DIR, 'battor_test_data.txt')
-COMBINED_PROFILE_CHROME_DATA = os.path.join(
-    TEST_DIR, 'profile-chrome_systrace_perf_chrome_data')
-
-
-class OutputGeneratorTest(unittest.TestCase):
-
-  @decorators.HostOnlyTest
-  def testJsonTraceMerging(self):
-    update_systrace_trace_viewer.update(force_update=True)
-    self.assertTrue(os.path.exists(
-        update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE))
-    t1 = "{'traceEvents': [{'ts': 123, 'ph': 'b'}]}"
-    t2 = "{'traceEvents': [], 'stackFrames': ['blah']}"
-    results = [trace_result.TraceResult('a', t1),
-               trace_result.TraceResult('b', t2)]
-
-    merged_results = output_generator.MergeTraceResultsIfNeeded(results)
-    for r in merged_results:
-      if r.source_name == 'a':
-        self.assertEquals(r.raw_data, t1)
-      elif r.source_name == 'b':
-        self.assertEquals(r.raw_data, t2)
-    self.assertEquals(len(merged_results), len(results))
-    os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
-
-  @decorators.HostOnlyTest
-  def testHtmlOutputGenerationFormatsSingleTrace(self):
-    update_systrace_trace_viewer.update(force_update=True)
-    self.assertTrue(os.path.exists(
-        update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE))
-    with open(ATRACE_DATA) as f:
-      atrace_data = f.read().replace(" ", "").strip()
-      trace_results = [trace_result.TraceResult('systemTraceEvents',
-                       atrace_data)]
-      output_file_name = util.generate_random_filename_for_test()
-      final_path = output_generator.GenerateHTMLOutput(trace_results,
-                                                       output_file_name)
-      with open(output_file_name, 'r') as f:
-        output_generator.GenerateHTMLOutput(trace_results, f.name)
-        html_output = f.read()
-        trace_data = (html_output.split(
-          '<script class="trace-data" type="application/text">')[1].split(
-          '</script>'))[0].replace(" ", "").strip()
-      os.remove(final_path)
-
-    # Ensure the trace data written in HTML is located within the
-    # correct place in the HTML document and that the data is not
-    # malformed.
-    self.assertEquals(trace_data, atrace_data)
-    os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
-
-  @decorators.HostOnlyTest
-  def testHtmlOutputGenerationFormatsMultipleTraces(self):
-    trace_results = []
-    trace_data_builder = trace_data_module.TraceDataBuilder()
-
-    with open(BATTOR_DATA) as fp:
-      battor_data = fp.read()
-    trace_results.append(
-        trace_result.TraceResult('powerTraceAsString', battor_data))
-    trace_data_builder.AddTraceFor(
-        trace_data_module.BATTOR_TRACE_PART, battor_data)
-
-    with open(ATRACE_DATA) as fp:
-      atrace_data = fp.read()
-    trace_results.append(
-        trace_result.TraceResult('systemTraceEvents', atrace_data))
-    trace_data_builder.AddTraceFor(trace_data_module.ATRACE_PART, atrace_data)
-
-
-    with open(COMBINED_PROFILE_CHROME_DATA) as fp:
-      chrome_data = fp.read()
-    trace_results.append(
-        trace_result.TraceResult('traceEvents', json.loads(chrome_data)))
-    trace_data_builder.AddTraceFor(
-        trace_data_module.CHROME_TRACE_PART, json.loads(chrome_data))
-
-    trace_results.append(
-        trace_result.TraceResult('systraceController', str({})))
-    trace_data_builder.AddTraceFor(trace_data_module.TELEMETRY_PART, {})
-
-    try:
-      data_builder_out = util.generate_random_filename_for_test()
-      output_generator_out = util.generate_random_filename_for_test()
-      output_generator.GenerateHTMLOutput(trace_results, output_generator_out)
-      trace_data_builder.AsData().Serialize(data_builder_out, 'Systrace')
-
-      output_generator_md5sum = hashlib.md5(
-          open(output_generator_out, 'rb').read()).hexdigest()
-      data_builder_md5sum = hashlib.md5(
-          open(data_builder_out, 'rb').read()).hexdigest()
-
-      self.assertEqual(output_generator_md5sum, data_builder_md5sum)
-    finally:
-      def del_if_exist(path):
-        try:
-          os.remove(path)
-        except IOError:
-          pass
-      del_if_exist(output_generator_out)
-      del_if_exist(data_builder_out)
diff --git a/systrace/catapult/systrace/systrace/prefix.html b/systrace/catapult/systrace/systrace/prefix.html
deleted file mode 100644
index 828eef0..0000000
--- a/systrace/catapult/systrace/systrace/prefix.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head i18n-values="dir:textdirection;">
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<meta charset="utf-8"/>
-<title>Android System Trace</title>
-<style>
-  html,
-  body {
-    height: 100%;
-  }
-
-  body {
-    -webkit-flex-direction: column;
-    display: -webkit-flex;
-    margin: 0;
-    padding: 0;
-  }
-
-  body > tr-ui-timeline-view {
-    -webkit-flex: 1 1 auto;
-    min-height: 0;
-  }
-  body > tr-ui-timeline-view:focus {
-    outline: none;
-  }
-</style>
-{{SYSTRACE_TRACE_VIEWER_HTML}}
-</head>
-<body>
-  <tr-ui-timeline-view>
-    <track-view-container id='track_view_container'></track-view-container>
-  </tr-ui-timeline-view>
-
-  <script>
-  'use strict';
-  var timelineViewEl;
-
-  function onLoad() {
-    timelineViewEl = document.querySelector('tr-ui-timeline-view');
-    timelineViewEl.globalMode = true;
-
-    var traceDataEls = document.body.querySelectorAll('.trace-data');
-    var traces = [];
-    for (var i = 0; i < traceDataEls.length; i++) {
-      var traceText = traceDataEls[i].textContent;
-      // Remove the leading newline.
-      traceText = traceText.substring(1);
-      traces.push(traceText);
-    }
-
-    var m = new tr.Model();
-    var i = new tr.importer.Import(m);
-    var p = i.importTracesWithProgressDialog(traces);
-    p.then(
-      function() {
-        timelineViewEl.model = m;
-        timelineViewEl.updateDocumentFavicon();
-        timelineViewEl.globalMode = true;
-        timelineViewEl.viewTitle = 'Android System Trace';
-      },
-      function(err) {
-        var overlay = new tr.ui.b.Overlay();
-        overlay.textContent = tr.b.normalizeException(err).message;
-        overlay.title = 'Import error';
-        overlay.visible = true;
-      });
-  }
-  window.addEventListener('load', onLoad);
-  </script>
diff --git a/systrace/catapult/systrace/systrace/run_systrace.py b/systrace/catapult/systrace/systrace/run_systrace.py
deleted file mode 100755
index cb32036..0000000
--- a/systrace/catapult/systrace/systrace/run_systrace.py
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2011 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Android system-wide tracing utility.
-
-This is a tool for capturing a trace that includes data from both userland and
-the kernel.  It creates an HTML file for visualizing the trace.
-"""
-
-# Make sure we're using a new enough version of Python.
-# The flags= parameter of re.sub() is new in Python 2.7. And Systrace does not
-# support Python 3 yet.
-
-import sys
-
-version = sys.version_info[:2]
-if version != (2, 7):
-  sys.stderr.write('This script does not support Python %d.%d. '
-                   'Please use Python 2.7.\n' % version)
-  sys.exit(1)
-
-
-import optparse
-import os
-import time
-
-_SYSTRACE_DIR = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.path.pardir))
-_CATAPULT_DIR = os.path.join(
-    os.path.dirname(os.path.abspath(__file__)), os.path.pardir, os.path.pardir)
-_DEVIL_DIR = os.path.join(_CATAPULT_DIR, 'devil')
-if _DEVIL_DIR not in sys.path:
-  sys.path.insert(0, _DEVIL_DIR)
-if _SYSTRACE_DIR not in sys.path:
-  sys.path.insert(0, _SYSTRACE_DIR)
-
-from devil import devil_env
-from devil.android.sdk import adb_wrapper
-from systrace import systrace_runner
-from systrace import util
-from systrace.tracing_agents import atrace_agent
-from systrace.tracing_agents import atrace_from_file_agent
-from systrace.tracing_agents import atrace_process_dump
-from systrace.tracing_agents import battor_trace_agent
-from systrace.tracing_agents import ftrace_agent
-from systrace.tracing_agents import walt_agent
-
-
-ALL_MODULES = [atrace_agent, atrace_from_file_agent, atrace_process_dump,
-               battor_trace_agent, ftrace_agent, walt_agent]
-
-
-def parse_options(argv):
-  """Parses and checks the command-line options.
-
-  Returns:
-    A tuple containing the options structure and a list of categories to
-    be traced.
-  """
-  usage = 'Usage: %prog [options] [category1 [category2 ...]]'
-  desc = 'Example: %prog -b 32768 -t 15 gfx input view sched freq'
-  parser = optparse.OptionParser(usage=usage, description=desc,
-                                 conflict_handler='resolve')
-  parser = util.get_main_options(parser)
-
-  parser.add_option('-l', '--list-categories', dest='list_categories',
-                    default=False, action='store_true',
-                    help='list the available categories and exit')
-
-  # Add the other agent parsing options to the parser. For Systrace on the
-  # command line, all agents are added. For Android, only the compatible agents
-  # will be added.
-  for module in ALL_MODULES:
-    option_group = module.add_options(parser)
-    if option_group:
-      parser.add_option_group(option_group)
-
-  options, categories = parser.parse_args(argv[1:])
-
-  if options.output_file is None:
-    base = 'trace'
-    if options.from_file is not None:
-      base = os.path.splitext(options.from_file)[0]
-    suffix = '.json' if options.write_json else '.html'
-    options.output_file = base + suffix
-
-  if options.link_assets or options.asset_dir != 'trace-viewer':
-    parser.error('--link-assets and --asset-dir are deprecated.')
-
-  if options.trace_time and options.trace_time < 0:
-    parser.error('the trace time must be a non-negative number')
-
-  if (options.trace_buf_size is not None) and (options.trace_buf_size <= 0):
-    parser.error('the trace buffer size must be a positive number')
-
-  return (options, categories)
-
-def find_adb():
-  """Finds adb on the path.
-
-  This method is provided to avoid the issue of diskutils.spawn's
-  find_executable which first searches the current directory before
-  searching $PATH. That behavior results in issues where systrace.py
-  uses a different adb than the one in the path.
-  """
-  paths = os.environ['PATH'].split(os.pathsep)
-  executable = 'adb'
-  if sys.platform == 'win32':
-    executable = executable + '.exe'
-  for p in paths:
-    f = os.path.join(p, executable)
-    if os.path.isfile(f):
-      return f
-  return None
-
-def initialize_devil():
-  """Initialize devil to use adb from $PATH"""
-  adb_path = find_adb()
-  if adb_path is None:
-    print >> sys.stderr, "Unable to find adb, is it in your path?"
-    sys.exit(1)
-  devil_dynamic_config = {
-    'config_type': 'BaseConfig',
-    'dependencies': {
-      'adb': {
-        'file_info': {
-          devil_env.GetPlatform(): {
-            'local_paths': [os.path.abspath(adb_path)]
-          }
-        }
-      }
-    }
-  }
-  devil_env.config.Initialize(configs=[devil_dynamic_config])
-
-
-def main_impl(arguments):
-  # Parse the command line options.
-  options, categories = parse_options(arguments)
-
-  # Override --atrace-categories and --ftrace-categories flags if command-line
-  # categories are provided.
-  if categories:
-    if options.target == 'android':
-      options.atrace_categories = categories
-    elif options.target == 'linux':
-      options.ftrace_categories = categories
-    else:
-      raise RuntimeError('Categories are only valid for atrace/ftrace. Target '
-                         'platform must be either Android or Linux.')
-
-  # Include atrace categories by default in Systrace.
-  if options.target == 'android' and not options.atrace_categories:
-    options.atrace_categories = atrace_agent.DEFAULT_CATEGORIES
-
-  if options.target == 'android' and not options.from_file:
-    initialize_devil()
-    if not options.device_serial_number:
-      devices = [a.GetDeviceSerial() for a in adb_wrapper.AdbWrapper.Devices()]
-      if len(devices) == 0:
-        raise RuntimeError('No ADB devices connected.')
-      elif len(devices) >= 2:
-        raise RuntimeError('Multiple devices connected, serial number required')
-      options.device_serial_number = devices[0]
-
-  # If list_categories is selected, just print the list of categories.
-  # In this case, use of the tracing controller is not necessary.
-  if options.list_categories:
-    if options.target == 'android':
-      atrace_agent.list_categories(options)
-    elif options.target == 'linux':
-      ftrace_agent.list_categories(options)
-    return
-
-  # Set up the systrace runner and start tracing.
-  controller = systrace_runner.SystraceRunner(
-      os.path.dirname(os.path.abspath(__file__)), options)
-  controller.StartTracing()
-
-  # Wait for the given number of seconds or until the user presses enter.
-  # pylint: disable=superfluous-parens
-  # (need the parens so no syntax error if trying to load with Python 3)
-  if options.from_file is not None:
-    print('Reading results from file.')
-  elif options.trace_time:
-    print('Starting tracing (%d seconds)' % options.trace_time)
-    time.sleep(options.trace_time)
-  else:
-    raw_input('Starting tracing (stop with enter)')
-
-  # Stop tracing and collect the output.
-  print('Tracing completed. Collecting output...')
-  controller.StopTracing()
-  print('Outputting Systrace results...')
-  controller.OutputSystraceResults(write_json=options.write_json)
-
-def main():
-  main_impl(sys.argv)
-
-if __name__ == '__main__' and __package__ is None:
-  main()
diff --git a/systrace/catapult/systrace/systrace/suffix.html b/systrace/catapult/systrace/systrace/suffix.html
deleted file mode 100644
index 308b1d0..0000000
--- a/systrace/catapult/systrace/systrace/suffix.html
+++ /dev/null
@@ -1,2 +0,0 @@
-</body>
-</html>
diff --git a/systrace/catapult/systrace/systrace/systrace_runner.py b/systrace/catapult/systrace/systrace/systrace_runner.py
deleted file mode 100644
index b3d9324..0000000
--- a/systrace/catapult/systrace/systrace/systrace_runner.py
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-'''Implementation of tracing controller for systrace. This class creates the
-necessary tracing agents for systrace, runs them, and outputs the results
-as an HTML or JSON file.'''
-
-from systrace import output_generator
-from systrace import tracing_controller
-from systrace.tracing_agents import android_process_data_agent
-from systrace.tracing_agents import atrace_agent
-from systrace.tracing_agents import atrace_from_file_agent
-from systrace.tracing_agents import atrace_process_dump
-from systrace.tracing_agents import battor_trace_agent
-from systrace.tracing_agents import ftrace_agent
-from systrace.tracing_agents import walt_agent
-
-AGENT_MODULES = [android_process_data_agent, atrace_agent,
-                 atrace_from_file_agent, atrace_process_dump,
-                 battor_trace_agent, ftrace_agent, walt_agent]
-
-class SystraceRunner(object):
-  def __init__(self, script_dir, options):
-    """Constructor.
-
-    Args:
-        script_dir: Directory containing the trace viewer script
-                    (systrace_trace_viewer.html)
-        options: Object containing command line options.
-    """
-    # Parse command line arguments and create agents.
-    self._script_dir = script_dir
-    self._out_filename = options.output_file
-    agents_with_config = tracing_controller.CreateAgentsWithConfig(
-        options, AGENT_MODULES)
-    controller_config = tracing_controller.GetControllerConfig(options)
-
-    # Set up tracing controller.
-    self._tracing_controller = tracing_controller.TracingController(
-        agents_with_config, controller_config)
-
-  def StartTracing(self):
-    self._tracing_controller.StartTracing()
-
-  def StopTracing(self):
-    self._tracing_controller.StopTracing()
-
-  def OutputSystraceResults(self, write_json=False):
-    """Output the results of systrace to a file.
-
-    If output is necessary, then write the results of systrace to either (a)
-    a standalone HTML file, or (b) a json file which can be read by the
-    trace viewer.
-
-    Args:
-       write_json: Whether to output to a json file (if false, use HTML file)
-    """
-    print 'Tracing complete, writing results'
-    if write_json:
-      result = output_generator.GenerateJSONOutput(
-                  self._tracing_controller.all_results,
-                  self._out_filename)
-    else:
-      result = output_generator.GenerateHTMLOutput(
-                  self._tracing_controller.all_results,
-                  self._out_filename)
-    print '\nWrote trace %s file: file://%s\n' % (('JSON' if write_json
-                                                   else 'HTML'), result)
diff --git a/systrace/catapult/systrace/systrace/systrace_trace_viewer.html b/systrace/catapult/systrace/systrace/systrace_trace_viewer.html
deleted file mode 100644
index 1b7fb39..0000000
--- a/systrace/catapult/systrace/systrace/systrace_trace_viewer.html
+++ /dev/null
@@ -1,9562 +0,0 @@
-<template id="overlay-template">
-  <style>
-    overlay-mask {
-      left: 0;
-      padding: 8px;
-      position: absolute;
-      top: 0;
-      z-index: 1000;
-      font-family: sans-serif;
-      -webkit-justify-content: center;
-      background: rgba(0, 0, 0, 0.8);
-      display: flex;
-      height: 100%;
-      left: 0;
-      position: fixed;
-      top: 0;
-      width: 100%;
-    }
-    overlay-mask:focus {
-      outline: none;
-    }
-    overlay-vertical-centering-container {
-      -webkit-justify-content: center;
-      flex-direction: column;
-      display: flex;
-    }
-    overlay-frame {
-      z-index: 1100;
-      background: rgb(255, 255, 255);
-      border: 1px solid #ccc;
-      margin: 75px;
-      display: flex;
-      flex-direction: column;
-      min-height: 0;
-    }
-    title-bar {
-      -webkit-align-items: center;
-      flex-direction: row;
-      border-bottom: 1px solid #ccc;
-      background-color: #ddd;
-      display: flex;
-      padding: 5px;
-      flex: 0 0 auto;
-    }
-    title {
-      display: inline;
-      font-weight: bold;
-      flex: 1 1 auto;
-    }
-    close-button {
-      -webkit-align-self: flex-end;
-      border: 1px solid #eee;
-      background-color: #999;
-      font-size: 10pt;
-      font-weight: bold;
-      padding: 2px;
-      text-align: center;
-      width: 16px;
-    }
-    close-button:hover {
-      background-color: #ddd;
-      border-color: black;
-      cursor: pointer;
-    }
-    overlay-content {
-      display: flex;
-      flex: 1 1 auto;
-      flex-direction: column;
-      overflow-y: auto;
-      padding: 10px;
-      min-width: 300px;
-      min-height: 0;
-    }
-    button-bar {
-      -webkit-align-items: baseline;
-      border-top: 1px solid #ccc;
-      display: flex;
-      flex: 0 0 auto;
-      flex-direction: row-reverse;
-      padding: 4px;
-    }
-  </style>
-
-  <overlay-mask>
-    <overlay-vertical-centering-container>
-      <overlay-frame>
-        <title-bar>
-          <title></title>
-          <close-button>✕</close-button>
-        </title-bar>
-        <overlay-content>
-          <content></content>
-        </overlay-content>
-        <button-bar></button-bar>
-      </overlay-frame>
-    </overlay-vertical-centering-container>
-  </overlay-mask>
-</template><dom-module id="tr-ui-a-analysis-link">
-  <template>
-    <style>
-    :host {
-      display: inline;
-      cursor: pointer;
-      cursor: pointer;
-      white-space: nowrap;
-    }
-    a {
-      text-decoration: underline;
-    }
-    </style>
-    <a href="{{href}}" on-click="onClicked_" on-mouseenter="onMouseEnter_" on-mouseleave="onMouseLeave_"><content></content></a>
-
-  </template>
-</dom-module><dom-module id="tr-ui-b-table">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: column;
-      }
-
-      table {
-        flex: 1 1 auto;
-        align-self: stretch;
-        border-collapse: separate;
-        border-spacing: 0;
-        border-width: 0;
-        -webkit-user-select: initial;
-      }
-
-      tr > td {
-        padding: 2px 4px 2px 4px;
-        vertical-align: top;
-      }
-
-      table > tbody:focus {
-        outline: none;
-      }
-      table > tbody:focus[selection-mode="row"] > tr[selected],
-      table > tbody:focus[selection-mode="cell"] > tr > td[selected],
-      table > tbody:focus > tr.empty-row > td {
-        outline: 1px dotted #666666;
-        outline-offset: -1px;
-      }
-
-      button.toggle-button {
-        height: 15px;
-        line-height: 60%;
-        vertical-align: middle;
-        width: 100%;
-      }
-
-      button > * {
-        height: 15px;
-        vertical-align: middle;
-      }
-
-      td.button-column {
-        width: 30px;
-      }
-
-      table > thead > tr > td.sensitive:hover {
-        background-color: #fcfcfc;
-      }
-
-      table > thead > tr > td {
-        font-weight: bold;
-        text-align: left;
-
-        background-color: #eee;
-        white-space: nowrap;
-        overflow: hidden;
-        text-overflow: ellipsis;
-
-        border-top: 1px solid #ffffff;
-        border-bottom: 1px solid #aaa;
-      }
-
-      table > tfoot {
-        background-color: #eee;
-        font-weight: bold;
-      }
-
-      /* Light row and cell highlight. */
-      table > tbody[row-highlight-style="light"] > tr[selected],
-      table > tbody[cell-highlight-style="light"] > tr > td[selected] {
-        background-color: rgb(213, 236, 229);  /* light turquoise */
-      }
-      table > tbody[row-highlight-style="light"] >
-          tr:not(.empty-row):not([selected]):hover,
-      table > tbody[cell-highlight-style="light"] >
-          tr:not(.empty-row):not([selected]) > td:hover {
-        background-color: #f6f6f6;  /* light grey */
-      }
-
-      /* Dark row and cell highlight. */
-      table > tbody[row-highlight-style="dark"] > tr[selected],
-      table > tbody[cell-highlight-style="dark"] > tr > td[selected] {
-        background-color: rgb(103, 199, 165);  /* turquoise */
-      }
-      table > tbody[row-highlight-style="dark"] >
-          tr:not(.empty-row):not([selected]):hover,
-      table > tbody[cell-highlight-style="dark"] >
-          tr:not(.empty-row):not([selected]) > td:hover {
-        background-color: #e6e6e6;  /* grey */
-      }
-      table > tbody[row-highlight-style="dark"] > tr:hover[selected],
-      table > tbody[cell-highlight-style="dark"] > tr[selected] > td:hover {
-        background-color: rgb(171, 217, 202);  /* semi-light turquoise */
-      }
-
-      table > colgroup > col[selected] {
-        background-color: #e6e6e6;  /* grey */
-      }
-
-      table > tbody > tr.empty-row > td {
-        color: #666;
-        font-style: italic;
-        text-align: center;
-      }
-
-      table > tbody.has-footer > tr:last-child > td {
-        border-bottom: 1px solid #aaa;
-      }
-
-      table > tfoot > tr:first-child > td {
-        border-top: 1px solid #ffffff;
-      }
-
-      :host([zebra]) table tbody tr:nth-child(even) {
-        background-color: #f4f4f4;
-      }
-
-      expand-button {
-        -webkit-user-select: none;
-        cursor: pointer;
-        margin-right: 3px;
-        font-size: smaller;
-        height: 1rem;
-      }
-
-      expand-button.button-expanded {
-        transform: rotate(90deg);
-      }
-    </style>
-    <table>
-      <colgroup id="cols">
-      </colgroup>
-      <thead id="head">
-      </thead>
-      <tbody id="body">
-      </tbody>
-      <tfoot id="foot">
-      </tfoot>
-    </table>
-  </template>
-</dom-module><dom-module id="tr-ui-b-table-header-cell">
-  <template>
-  <style>
-    :host {
-      -webkit-user-select: none;
-      display: flex;
-    }
-
-    span {
-      flex: 0 1 auto;
-    }
-
-    #side {
-      -webkit-user-select: none;
-      flex: 0 0 auto;
-      padding-left: 2px;
-      padding-right: 2px;
-      vertical-align: top;
-      font-size: 15px;
-      font-family: sans-serif;
-      line-height: 85%;
-      margin-left: 5px;
-    }
-
-    #side.disabled {
-      color: rgb(140, 140, 140);
-    }
-
-    #title:empty, #side:empty {
-      display: none;
-    }
-  </style>
-
-    <span id="title"></span>
-    <span id="side"></span>
-  </template>
-</dom-module><dom-module id="tr-v-ui-scalar-context-controller">
-  <template></template>
-</dom-module><dom-module id="tr-v-ui-scalar-span">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: row;
-      justify-content: flex-end;
-      position: relative;
-      /* Limit the sparkline's negative z-index to the span only. */
-      isolation: isolate;
-    }
-
-    :host(.left-align) {
-      justify-content: flex-start;
-    }
-
-    :host(.inline) {
-      display: inline-flex;
-    }
-
-    #sparkline {
-      width: 0%;
-      position: absolute;
-      bottom: 0;
-      display: none;
-      height: 100%;
-      background-color: hsla(216, 100%, 94.5%, .75);
-      border-color: hsl(216, 100%, 89%);
-      box-sizing: border-box;
-      z-index: -1;
-    }
-    #sparkline.positive {
-      border-right-style: solid;
-      /* The border width must be kept in sync with buildSparklineStyle_(). */
-      border-right-width: 1px;
-    }
-    #sparkline:not(.positive) {
-      border-left-style: solid;
-      /* The border width must be kept in sync with buildSparklineStyle_(). */
-      border-left-width: 1px;
-    }
-    #sparkline.better {
-      background-color: hsla(115, 100%, 93%, .75);
-      border-color: hsl(118, 60%, 80%);
-    }
-    #sparkline.worse {
-      background-color: hsla(0, 100%, 88%, .75);
-      border-color: hsl(0, 100%, 80%);
-    }
-
-    #content {
-      white-space: nowrap;
-    }
-    #content, #significance, #warning {
-      flex-grow: 0;
-    }
-    #content.better {
-      color: green;
-    }
-    #content.worse {
-      color: red;
-    }
-
-    #significance svg {
-      margin-left: 4px;
-      display: none;
-      height: 1em;
-      vertical-align: text-top;
-      stroke-width: 4;
-      fill: rgba(0, 0, 0, 0);
-    }
-    #significance #insignificant {
-      stroke: black;
-    }
-    #significance #significantly_better {
-      stroke: green;
-    }
-    #significance #significantly_worse {
-      stroke: red;
-    }
-
-    #warning {
-      display: none;
-      margin-left: 4px;
-      height: 1em;
-      vertical-align: text-top;
-      stroke-width: 0;
-    }
-    #warning path {
-      fill: rgb(255, 185, 185);
-    }
-    #warning rect {
-      fill: red;
-    }
-    </style>
-
-    <span id="sparkline"></span>
-
-    <span id="content"></span>
-
-    <span id="significance">
-      
-      <svg id="insignificant" viewBox="0 0 128 128">
-        <circle cx="64" cy="64" r="60"></circle>
-        <circle cx="44" cy="44" r="4"></circle>
-        <circle cx="84" cy="44" r="4"></circle>
-        <line x1="36" x2="92" y1="80" y2="80"></line>
-      </svg>
-
-      
-      <svg id="significantly_better" viewBox="0 0 128 128">
-        <circle cx="64" cy="64" r="60"></circle>
-        <circle cx="44" cy="44" r="4"></circle>
-        <circle cx="84" cy="44" r="4"></circle>
-        <path d="M 28 64 Q 64 128 100 64"></path>
-      </svg>
-
-      
-      <svg id="significantly_worse" viewBox="0 0 128 128">
-        <circle cx="64" cy="64" r="60"></circle>
-        <circle cx="44" cy="44" r="4"></circle>
-        <circle cx="84" cy="44" r="4"></circle>
-        <path d="M 36 96 Q 64 48 92 96"></path>
-      </svg>
-    </span>
-
-    <svg id="warning" viewBox="0 0 128 128">
-      <path d="M 64 0 L 128 128 L 0 128 L 64 0"></path>
-      <rect height="84" width="8" x="60" y="0"></rect>
-      <rect height="24" width="8" x="60" y="100"></rect>
-    </svg>
-  </template>
-</dom-module><dom-module id="tr-ui-a-generic-object-view">
-  <template>
-    <style>
-    :host {
-      display: block;
-      font-family: monospace;
-    }
-    </style>
-    <div id="content">
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-generic-object-view-with-label">
-  <template>
-    <style>
-    :host {
-      display: block;
-    }
-    </style>
-  </template>
-</dom-module><dom-module id="tr-ui-b-drag-handle">
-  <template>
-    <style>
-    :host {
-      -webkit-user-select: none;
-      box-sizing: border-box;
-      display: block;
-    }
-
-    :host(.horizontal-drag-handle) {
-      background-image: -webkit-gradient(linear,
-                                         0 0, 0 100%,
-                                         from(#E5E5E5),
-                                         to(#D1D1D1));
-      border-bottom: 1px solid #8e8e8e;
-      border-top: 1px solid white;
-      cursor: ns-resize;
-      flex: 0 0 auto;
-      height: 7px;
-      position: relative;
-    }
-
-    :host(.vertical-drag-handle) {
-      background-image: -webkit-gradient(linear,
-                                         0 0, 100% 0,
-                                         from(#E5E5E5),
-                                         to(#D1D1D1));
-      border-left: 1px solid white;
-      border-right: 1px solid #8e8e8e;
-      cursor: ew-resize;
-      flex: 0 0 auto;
-      position: relative;
-      width: 7px;
-    }
-    </style>
-    <div></div>
-  </template>
-</dom-module><dom-module id="tv-ui-b-hotkey-controller">
-  <template>
-    <div></div>
-  </template>
-</dom-module><dom-module id="tr-ui-b-info-bar">
-  <template>
-    <style>
-    :host {
-      align-items: center;
-      flex: 0 0 auto;
-      background-color: rgb(252, 235, 162);
-      border-bottom: 1px solid #A3A3A3;
-      border-left: 1px solid white;
-      border-right: 1px solid #A3A3A3;
-      border-top: 1px solid white;
-      display: flex;
-      height: 26px;
-      padding: 0 3px 0 3px;
-    }
-
-    :host([hidden]) {
-      display: none !important;
-    }
-
-    #message { flex: 1 1 auto; }
-    </style>
-
-    <span id="message"></span>
-    <span id="buttons"></span>
-  </template>
-</dom-module><dom-module id="tr-ui-b-mouse-mode-icon">
-  <template>
-    <style>
-    :host {
-      display: block;
-      background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAChCAYAAACbBNzvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABV0RVh0Q3JlYXRpb24gVGltZQA3LzE2LzEzRNEKUwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAA9aSURBVHic7V1rTFvl//+UrgUmZWMpbLa6cLErwpYxkqLGkjAG88WSbmumGUllvlmAJctMRtybvlHrLXiJUekMIZuYSCL5gS+EuLIXGEGjqCsllCEW6xQECgzWG7S05/+C/zkp9LTn0gsL6ych9JzznOdzPj19Luf5PN/nCN59913ixRdfRFdXFxLx/2GDgCAIYmpqCoWFhUjE/4cNae+99x4AIFH/Hzak7nDqDu+wOyyw2WzEdl9EMpG23ReQbKQE73Q8coJ3bfcFWK1W/Pbbb/D7/UhLi/37DwaDEIvFKC8vR0lJSdjxbRVstVoxPDyMxx9/HAUFBcjMzIRAIOCdXzAYhNvtht1ux/DwMACEid5WwSMjI3jyySdRXFwMsVgMoVAYk2CCIJCZmYns7GyMjo5iZGQkPoKXl5exd+9e3hdGIhgMIj8/H5mZmRCJRIyCyQ5NJBAEgUAgAKFQiIKCAiwsLISl4VxoHA4H+vv74Xa7uZ4aBqFQiOzsbIhEIojFYojFYohEItq/8fFxXLlyBUtLSxHThOaxZ88eCIXC2AWPj48DAH799deYBaelpUEoFLL6++qrrwAAH3zwAav0YrGYthLkJHh6ehpzc3MAgPn5eUxPT8csWiAQMJbboaEhmM1mAIDFYsHQ0BDvPDkJtlgsYdt+v59LFrxw/fr1sG2Xy8UrL06C6+vrw7bFYjEvYi747rvvwrYlEgmvvDjV0g6HI+p2ohBP3qh32OFwoLe3l1VGvb29sNvtvC8kFCMjI9DpdKzS6nQ6mEwm1nnTPg/7/X6MjY1hcnKS/VX+P/bu3YuysjLk5uYypv36669x8uRJZGRkQCQSwev1oqOjAz09PZx5CwsLcenSJRw+fBh+vx+rq6swmUx46aWXNqWjvcMDAwO8xAIbnZKBgQFeNXhzczMvscBGp6S5uRk//vhj1HS0grVaLYqLi3kRy+Vy1NXVRe0RRcKNGzeg0Wh48apUKnR1daG6ujpqOtpKy+VyQa1Wo6SkBLdv38aFCxeoY5988gn1+fLly9TnL774ApWVlXjiiSfgdDqxtrbG+aJ9Ph/0ej3OnDkDvV6PW7duUceOHDlCfR4dHaU+v/DCC7h27RrUajWcTidWV1ejctAKJggCKysryMzMhE6nw+zsLO3Joft1Oh0ePHiApaUlduqi8BYVFaGvr48Vb19fHyfeqM2Sz+dj3QTEs4lKJC+njsfWJoptkxUrtjZRbJssOnASXFtbG3U7UXjrrbeibnMBJ8FZWVkoKysDABQUFCArK4s3MRcoFArqrlZXV0OhUPDOi5Ngn8+Hw4cPQyqV4tlnn4XP5+NNTIIgmH0An8+HV155BUqlEq+++ior3kAgQLuf84jH2toajh8/jvX1da6n0sLj8SAjI4MxHUEQ+PTTT1nlSRAEHjx4QHtsW8e0RCIR7HY79uzZE/GOcEUgEEAgEMDff/8NkUgUdnxbBR85cgRmsxkCgQD5+fkRh2XYIhAI4P79+5iamoLD4cCxY8fC0myr4KeeegoCgQBWqxVzc3NIS0uLedQyGAxi165dKC8vR1FRUVialHu405ESvNPxyAlOuYfJRMo9fFjdw3iBq3vIBDbu4bYK3uoextKtJEH2yWNyD8nyEG8wuYcffvgha3cxru6h3W5Hf39/QoyzaE6fyWRCQ0MDZ+MsLu7h8vIyent7sby8zIk8VkxNTUGn08Fms8UlP04Nn9/vR39/f9w8JLZwu91obGzk5CFFAq+Wfnh4mDKok4mWlha0trbGlAfvrs3k5CQGBgaSYoiHoqenB1evXk2OIb4VDocDJpMp6eXaYrGgsbGRV7mOufPq8XgwMDCQ9HI9NzeHq1evci7XvDseUqkUWq0W6enpCAaDcDqd8Hq9fLNjDaVSiRs3bkAikfDi5XSHxWIxampqAAALCwsYGhrC7Ows5ufnEypWIpHAYDAAACYmJnD9+nXevJwEnzp1CjKZDBUVFQCAsbGxpJTfjz76CFVVVWhqagIAdHR08G6XWQuuqanB7t274fV6UVpaiuzsbAAbTzyJhMFggEKhgNfrRX19PWQyGQDAaDTyyo+V4JqaGshkMsricLlcOH78OICNCWp8p0cwwWAwoKqqahPvG2+8AWDji+7u7uacJyvBMpksrKxkZWVR0yLGxsY4E7NBVVVVGK9CoaCmRXR0dHDOk5VguorB5/OhoqICYrE4YZ2PSLxXrlyBRCLhNcE1pufh1dVVXLx4EWlpaRGnJzCBjXtId87g4GBU3ri5h1uJ5+fnY8mCtXvIhTflHoYg5R4mEyn3MAl45KyWlOCdjkdOcMo9TCZS7mHKPeSGhLmH5LBOrAGXXN1DcliHrgdFgsk95CzYbrfDbDbD7/ejrKwstpmtNO5hJJhMJrS2tsLtdqOpqQlarTZi2mjuIWvBfr8fZrN50/iz2WzG9PQ0nn/+edonEzZgij10uVwwGo2bxp+NRiOGhobw+uuv005hjtk9JENz6AbbyWCuRESp2Ww2NDc30w62WywW6HQ6zoOIrO5wbm4uzp8/j5WVFXR2dm46VldXh3379mF5eTku86dDUVxcjK6uLthstrClqrq6unDo0CHOvKwE+/1+LC4uUqG0oZiYmIhaicQCkvfu3bthxwYGBnhVmpy6NnSD7kxxQvEA3Zo+fIsQJ8F040j379/nRcwFdF4037FwToLphkUXFxd5EXMB3chkUgQ7nc6wfT6fL+Gm+H///Re2z+Vy8TLFGSut/v5+RsPsm2++AbDR84pXLFNDQwPjelxnz54FsBFK+/nnn7PKl/EOa7VaVmHvYrE4au+HK27evMkq7F0ikeDmzZus82UU7HK5qG8yGs6ePct73gUdfD4f2tvbGdO1t7dzaocZBRMEAaFQSBnhdKipqYFQKORlm0TjzcvLo4xwOhgMBuTl5XHiZVVp+f1+yGQy2iDq4uJiyGSyhFRcfr8fVVVVtEHUGo0GVVVVnHlZ19JerxdqtRpSqZTaJ5VKoVarEzrdwev1Qq/XQ6lUUvuUSiX0ej0vXk7N0srKCjQaDbXmjUajwcrKCmfSULD5Oa6srKCtrQ0SiQQSiQRtbW2MvHFzD0MrsXhUUmzdw9BKjKmSiqt7SBBE3Conru4hOa8kWqBnyj3cgl0EQcQ0cMYWW3kIgkiKe7iVV2C1Won09PSYxLCB1+tFZmYmtb22tobt4E1LBimATaQAkiKWjveR85ZSgnc6Uu5hMpFyD1PuITekYg/ZxB52dXXFTMo2n1D38NSpU7zjDEP/yHzisnJpIsBm5dJ45rntgpONuITTJirctqWlJabjdGAUvNUEp0NouxcvtLa2MgZhmUwmzqKjCrbb7aw9HC5pmWAymVivb2kymTgFe0RslrbeNTa1rtlshkgkQn5+PusL2Iqtd42NdWM0GpGVlYWTJ08ypo14h/nGI8Uax8Q3XJbteREFV1ZW8iLmex6Ja9euJfS8iD9puVyOmpoa3L59G8DmVUq3glzNlAzoimVgvrq6GmlpadDr9QA2r1K6FeRqpmRAFxveiIK9Xi8VZ/jLL78whulUVFTELJbkJeMMjUYjI29TUxNrsQBDX5qMM4w0qE2iuLgYpaWlcXMPyThDphWMNRoN6uvrOfGyskvVanXUNGq1Oq5WKclL/qwjQa/Xc+Zl1dNi8nFi9ZeSyZvqS0erjbmAbT6kT7X1lQp8QeYTyasKE8w3aJJvPh6PBwRBYGZmJi68MzMzqdjDUDx67mEsFxwrUrGHSUCqWdrpSAne6dix7uFzzz1HW0s/FO7h/v37UVBQgMceeyxm99DlcsFut2NwcBACgSDsnTHb7h4ePHgQxcXFcTPTMjIyIJFIcOfOHfz+++8Pl2DSPSTftxQv93DXrl0oKirCnTt3wtIwFhq62aputxtms5maCR8pHROEQiEkEgntew/X1tbC3mu4tLSE9vZ2nD9/njZd6Pn79u3jHoo3OTmJsbExnDlzBsDGWLXdbqcNoent7YVCocChQ4dYh+VFij3s7u5GR0cH9YWaTCbcunVr0yMkmfbChQvQarXQarVUWF4wGER6ejp7wdPT0zCbzfB4PJv2R7NT/H4/rFYrJicnUVZWxnowPtTpGxoagtFoDAsIi2anuN1ufPnll+ju7salS5dw4sQJKk+64hH2FTgcDgwPD4eJZQu/3w+bzcZ5JSSLxYL333+fNvqNDdxuN3p6ehjPDxMsl8tjjkw5ceIENfOVLVQqFd58882YeA0GA7WiWiSECfb5fPjpp58AbKyBx/bCpVIp6urqAADff/895wf6tbU1fPbZZwCAjz/+mPHCSSiVSsr3eueddxh5aWtpMrwuJyeH9cuczp07R5UZvktO/fnnnwCAY8eOoa+vj9U5nZ2d1CsH2fhaUZulwcFB1kGNi4uLjK/gYwuDwcCJ9+2332add9RmyW63w+12Q6FQIC8vD5cvX8bCwgI19VcqlcJms8HhcGBycjJuSz6aTCbMzs5Cq9Xi6NGjGB0dxcTEBJxOJyQSCZRKJUZGRjAyMoL//e9/jBFsoaAVLJfLKZvD4XBQ37ZEItlUph0OB238gVwu5ySQhEqlopo+i8VCtbsymWxTmb579y6t46BSqRg5aAXX1tbi22+/DZvY5XQ6aQMuQyGVSlFbW8trgb6WlhY0NDRgYmJi0/6ZmRnGYVylUomWlhbGeGbaMuzxeKDRaKhVDdkgOzsblZWVOHfuHO82fH19HW1tbWhqamL9ul2ZTIbXXnsNnZ2drN7yFfFFjy6XC6WlpVCpVFhaWsK///5LVfnz8/PIy8sDAOzevRu5ubnIycmBx+OJKZ6YIAj4fD7U19ejsbERf/zxB4aHhykrdHx8HE8//TQAYP/+/VAqlVAoFJx4I1ZapGiyrBw4cAD37t2DXC7HgQMHAGx0QXNycrC+vh63VR5Cecnw3J6eHqhUKpSXlwPY6OI+88wzALiHxnN6PPz555/D9h08eJATIR/Qzd9gE/FKh9SYFlvI5XKqPMUCrlFuKpUKp0+fZkwXDAZp93MSLBaLUVJSgqNHjyIjIwNerzfmOR0ul4sx9lAikeD06dN4+eWXIZVKGXnj5h5evHgRXq8XHo+Hd9MTCpFIhHv37iEnJydqp/+HH36A1+uFy+VirKTi6h7Gug7tVpDuIUEQKCwsjOge/vPPP6zyCwQCWF5exl9//YX5+Xla93DbzTSbzQar1Yr19fW4uoclJSUp9xB4BJullOCdjkdO8P8BGCQ0hnF1DxUAAAAASUVORK5CYII=);
-      width: 27px;
-      height: 30px;
-    }
-    :host.active {
-      cursor: auto;
-    }
-    </style>
-  </template>
-</dom-module><dom-module id="tr-ui-b-mouse-mode-selector">
-  <template>
-    <style>
-    :host {
-
-      -webkit-user-drag: element;
-      -webkit-user-select: none;
-
-      background: #DDD;
-      border: 1px solid #BBB;
-      border-radius: 4px;
-      box-shadow: 0 1px 2px rgba(0,0,0,0.2);
-      left: calc(100% - 120px);
-      position: absolute;
-      top: 100px;
-      user-select: none;
-      width: 29px;
-      z-index: 20;
-    }
-
-    .drag-handle {
-      background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAChCAYAAACbBNzvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABV0RVh0Q3JlYXRpb24gVGltZQA3LzE2LzEzRNEKUwAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAA9aSURBVHic7V1rTFvl//+UrgUmZWMpbLa6cLErwpYxkqLGkjAG88WSbmumGUllvlmAJctMRtybvlHrLXiJUekMIZuYSCL5gS+EuLIXGEGjqCsllCEW6xQECgzWG7S05/+C/zkp9LTn0gsL6ych9JzznOdzPj19Luf5PN/nCN59913ixRdfRFdXFxLx/2GDgCAIYmpqCoWFhUjE/4cNae+99x4AIFH/Hzak7nDqDu+wOyyw2WzEdl9EMpG23ReQbKQE73Q8coJ3bfcFWK1W/Pbbb/D7/UhLi/37DwaDEIvFKC8vR0lJSdjxbRVstVoxPDyMxx9/HAUFBcjMzIRAIOCdXzAYhNvtht1ux/DwMACEid5WwSMjI3jyySdRXFwMsVgMoVAYk2CCIJCZmYns7GyMjo5iZGQkPoKXl5exd+9e3hdGIhgMIj8/H5mZmRCJRIyCyQ5NJBAEgUAgAKFQiIKCAiwsLISl4VxoHA4H+vv74Xa7uZ4aBqFQiOzsbIhEIojFYojFYohEItq/8fFxXLlyBUtLSxHThOaxZ88eCIXC2AWPj48DAH799deYBaelpUEoFLL6++qrrwAAH3zwAav0YrGYthLkJHh6ehpzc3MAgPn5eUxPT8csWiAQMJbboaEhmM1mAIDFYsHQ0BDvPDkJtlgsYdt+v59LFrxw/fr1sG2Xy8UrL06C6+vrw7bFYjEvYi747rvvwrYlEgmvvDjV0g6HI+p2ohBP3qh32OFwoLe3l1VGvb29sNvtvC8kFCMjI9DpdKzS6nQ6mEwm1nnTPg/7/X6MjY1hcnKS/VX+P/bu3YuysjLk5uYypv36669x8uRJZGRkQCQSwev1oqOjAz09PZx5CwsLcenSJRw+fBh+vx+rq6swmUx46aWXNqWjvcMDAwO8xAIbnZKBgQFeNXhzczMvscBGp6S5uRk//vhj1HS0grVaLYqLi3kRy+Vy1NXVRe0RRcKNGzeg0Wh48apUKnR1daG6ujpqOtpKy+VyQa1Wo6SkBLdv38aFCxeoY5988gn1+fLly9TnL774ApWVlXjiiSfgdDqxtrbG+aJ9Ph/0ej3OnDkDvV6PW7duUceOHDlCfR4dHaU+v/DCC7h27RrUajWcTidWV1ejctAKJggCKysryMzMhE6nw+zsLO3Joft1Oh0ePHiApaUlduqi8BYVFaGvr48Vb19fHyfeqM2Sz+dj3QTEs4lKJC+njsfWJoptkxUrtjZRbJssOnASXFtbG3U7UXjrrbeibnMBJ8FZWVkoKysDABQUFCArK4s3MRcoFArqrlZXV0OhUPDOi5Ngn8+Hw4cPQyqV4tlnn4XP5+NNTIIgmH0An8+HV155BUqlEq+++ior3kAgQLuf84jH2toajh8/jvX1da6n0sLj8SAjI4MxHUEQ+PTTT1nlSRAEHjx4QHtsW8e0RCIR7HY79uzZE/GOcEUgEEAgEMDff/8NkUgUdnxbBR85cgRmsxkCgQD5+fkRh2XYIhAI4P79+5iamoLD4cCxY8fC0myr4KeeegoCgQBWqxVzc3NIS0uLedQyGAxi165dKC8vR1FRUVialHu405ESvNPxyAlOuYfJRMo9fFjdw3iBq3vIBDbu4bYK3uoextKtJEH2yWNyD8nyEG8wuYcffvgha3cxru6h3W5Hf39/QoyzaE6fyWRCQ0MDZ+MsLu7h8vIyent7sby8zIk8VkxNTUGn08Fms8UlP04Nn9/vR39/f9w8JLZwu91obGzk5CFFAq+Wfnh4mDKok4mWlha0trbGlAfvrs3k5CQGBgaSYoiHoqenB1evXk2OIb4VDocDJpMp6eXaYrGgsbGRV7mOufPq8XgwMDCQ9HI9NzeHq1evci7XvDseUqkUWq0W6enpCAaDcDqd8Hq9fLNjDaVSiRs3bkAikfDi5XSHxWIxampqAAALCwsYGhrC7Ows5ufnEypWIpHAYDAAACYmJnD9+nXevJwEnzp1CjKZDBUVFQCAsbGxpJTfjz76CFVVVWhqagIAdHR08G6XWQuuqanB7t274fV6UVpaiuzsbAAbTzyJhMFggEKhgNfrRX19PWQyGQDAaDTyyo+V4JqaGshkMsricLlcOH78OICNCWp8p0cwwWAwoKqqahPvG2+8AWDji+7u7uacJyvBMpksrKxkZWVR0yLGxsY4E7NBVVVVGK9CoaCmRXR0dHDOk5VguorB5/OhoqICYrE4YZ2PSLxXrlyBRCLhNcE1pufh1dVVXLx4EWlpaRGnJzCBjXtId87g4GBU3ri5h1uJ5+fnY8mCtXvIhTflHoYg5R4mEyn3MAl45KyWlOCdjkdOcMo9TCZS7mHKPeSGhLmH5LBOrAGXXN1DcliHrgdFgsk95CzYbrfDbDbD7/ejrKwstpmtNO5hJJhMJrS2tsLtdqOpqQlarTZi2mjuIWvBfr8fZrN50/iz2WzG9PQ0nn/+edonEzZgij10uVwwGo2bxp+NRiOGhobw+uuv005hjtk9JENz6AbbyWCuRESp2Ww2NDc30w62WywW6HQ6zoOIrO5wbm4uzp8/j5WVFXR2dm46VldXh3379mF5eTku86dDUVxcjK6uLthstrClqrq6unDo0CHOvKwE+/1+LC4uUqG0oZiYmIhaicQCkvfu3bthxwYGBnhVmpy6NnSD7kxxQvEA3Zo+fIsQJ8F040j379/nRcwFdF4037FwToLphkUXFxd5EXMB3chkUgQ7nc6wfT6fL+Gm+H///Re2z+Vy8TLFGSut/v5+RsPsm2++AbDR84pXLFNDQwPjelxnz54FsBFK+/nnn7PKl/EOa7VaVmHvYrE4au+HK27evMkq7F0ikeDmzZus82UU7HK5qG8yGs6ePct73gUdfD4f2tvbGdO1t7dzaocZBRMEAaFQSBnhdKipqYFQKORlm0TjzcvLo4xwOhgMBuTl5XHiZVVp+f1+yGQy2iDq4uJiyGSyhFRcfr8fVVVVtEHUGo0GVVVVnHlZ19JerxdqtRpSqZTaJ5VKoVarEzrdwev1Qq/XQ6lUUvuUSiX0ej0vXk7N0srKCjQaDbXmjUajwcrKCmfSULD5Oa6srKCtrQ0SiQQSiQRtbW2MvHFzD0MrsXhUUmzdw9BKjKmSiqt7SBBE3Conru4hOa8kWqBnyj3cgl0EQcQ0cMYWW3kIgkiKe7iVV2C1Won09PSYxLCB1+tFZmYmtb22tobt4E1LBimATaQAkiKWjveR85ZSgnc6Uu5hMpFyD1PuITekYg/ZxB52dXXFTMo2n1D38NSpU7zjDEP/yHzisnJpIsBm5dJ45rntgpONuITTJirctqWlJabjdGAUvNUEp0NouxcvtLa2MgZhmUwmzqKjCrbb7aw9HC5pmWAymVivb2kymTgFe0RslrbeNTa1rtlshkgkQn5+PusL2Iqtd42NdWM0GpGVlYWTJ08ypo14h/nGI8Uax8Q3XJbteREFV1ZW8iLmex6Ja9euJfS8iD9puVyOmpoa3L59G8DmVUq3glzNlAzoimVgvrq6GmlpadDr9QA2r1K6FeRqpmRAFxveiIK9Xi8VZ/jLL78whulUVFTELJbkJeMMjUYjI29TUxNrsQBDX5qMM4w0qE2iuLgYpaWlcXMPyThDphWMNRoN6uvrOfGyskvVanXUNGq1Oq5WKclL/qwjQa/Xc+Zl1dNi8nFi9ZeSyZvqS0erjbmAbT6kT7X1lQp8QeYTyasKE8w3aJJvPh6PBwRBYGZmJi68MzMzqdjDUDx67mEsFxwrUrGHSUCqWdrpSAne6dix7uFzzz1HW0s/FO7h/v37UVBQgMceeyxm99DlcsFut2NwcBACgSDsnTHb7h4ePHgQxcXFcTPTMjIyIJFIcOfOHfz+++8Pl2DSPSTftxQv93DXrl0oKirCnTt3wtIwFhq62aputxtms5maCR8pHROEQiEkEgntew/X1tbC3mu4tLSE9vZ2nD9/njZd6Pn79u3jHoo3OTmJsbExnDlzBsDGWLXdbqcNoent7YVCocChQ4dYh+VFij3s7u5GR0cH9YWaTCbcunVr0yMkmfbChQvQarXQarVUWF4wGER6ejp7wdPT0zCbzfB4PJv2R7NT/H4/rFYrJicnUVZWxnowPtTpGxoagtFoDAsIi2anuN1ufPnll+ju7salS5dw4sQJKk+64hH2FTgcDgwPD4eJZQu/3w+bzcZ5JSSLxYL333+fNvqNDdxuN3p6ehjPDxMsl8tjjkw5ceIENfOVLVQqFd58882YeA0GA7WiWiSECfb5fPjpp58AbKyBx/bCpVIp6urqAADff/895wf6tbU1fPbZZwCAjz/+mPHCSSiVSsr3eueddxh5aWtpMrwuJyeH9cuczp07R5UZvktO/fnnnwCAY8eOoa+vj9U5nZ2d1CsH2fhaUZulwcFB1kGNi4uLjK/gYwuDwcCJ9+2332add9RmyW63w+12Q6FQIC8vD5cvX8bCwgI19VcqlcJms8HhcGBycjJuSz6aTCbMzs5Cq9Xi6NGjGB0dxcTEBJxOJyQSCZRKJUZGRjAyMoL//e9/jBFsoaAVLJfLKZvD4XBQ37ZEItlUph0OB238gVwu5ySQhEqlopo+i8VCtbsymWxTmb579y6t46BSqRg5aAXX1tbi22+/DZvY5XQ6aQMuQyGVSlFbW8trgb6WlhY0NDRgYmJi0/6ZmRnGYVylUomWlhbGeGbaMuzxeKDRaKhVDdkgOzsblZWVOHfuHO82fH19HW1tbWhqamL9ul2ZTIbXXnsNnZ2drN7yFfFFjy6XC6WlpVCpVFhaWsK///5LVfnz8/PIy8sDAOzevRu5ubnIycmBx+OJKZ6YIAj4fD7U19ejsbERf/zxB4aHhykrdHx8HE8//TQAYP/+/VAqlVAoFJx4I1ZapGiyrBw4cAD37t2DXC7HgQMHAGx0QXNycrC+vh63VR5Cecnw3J6eHqhUKpSXlwPY6OI+88wzALiHxnN6PPz555/D9h08eJATIR/Qzd9gE/FKh9SYFlvI5XKqPMUCrlFuKpUKp0+fZkwXDAZp93MSLBaLUVJSgqNHjyIjIwNerzfmOR0ul4sx9lAikeD06dN4+eWXIZVKGXnj5h5evHgRXq8XHo+Hd9MTCpFIhHv37iEnJydqp/+HH36A1+uFy+VirKTi6h7Gug7tVpDuIUEQKCwsjOge/vPPP6zyCwQCWF5exl9//YX5+Xla93DbzTSbzQar1Yr19fW4uoclJSUp9xB4BJullOCdjkdO8P8BGCQ0hnF1DxUAAAAASUVORK5CYII=) 2px 3px no-repeat;
-      background-repeat: no-repeat;
-      border-bottom: 1px solid #BCBCBC;
-      cursor: move;
-      display: block;
-      height: 13px;
-      width: 27px;
-    }
-
-    .tool-button {
-      background-position: center center;
-      background-repeat: no-repeat;
-      border-bottom: 1px solid #BCBCBC;
-      border-top: 1px solid #F1F1F1;
-      cursor: pointer;
-    }
-
-    .buttons > .tool-button:last-child {
-      border-bottom: none;
-    }
-
-    </style>
-    <div class="drag-handle"></div>
-    <div class="buttons">
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-e-chrome-cc-display-item-list-item">
-  <template>
-    <style>
-      :host {
-        border-bottom: 1px solid #555;
-        display: block;
-        font-size: 12px;
-        padding: 3px 5px;
-      }
-
-      :host(:hover) {
-        background-color: #f0f0f0;
-        cursor: pointer;
-      }
-
-      .header {
-        font-weight: bold;
-        margin: 2px 0;
-      }
-
-      .header > .extra {
-        background-color: #777;
-        border-radius: 4px;
-        color: white;
-        margin: 0 6px;
-        text-decoration: none;
-        padding: 2px 4px;
-      }
-
-      .raw-details {
-        white-space: pre-wrap;
-      }
-
-      .details > dl {
-        margin: 0;
-      }
-
-      :host(:not([selected])) .details {
-        display: none;
-      }
-    </style>
-    <div class="header">
-      {{name}}
-      <template if="{{_computeIf(richDetails)}}" is="dom-if">
-        <a class="extra" download="drawing.skp" href$="{{_computeHref(richDetails)}}" on-click="{{stopPropagation}}">SKP</a>
-      </template>
-    </div>
-    <div class="details">
-      <template if="{{rawDetails}}">
-        <div class="raw-details">{{rawDetails}}</div>
-      </template>
-      <template bind="{{richDetails}}" if="{{richDetails}}" is="dom-if">
-        <dl>
-          <template bind="{{cullRect}}" if="{{cullRect}}" is="dom-if">
-            <dt>Cull rect</dt>
-            <dd>{{x}},{{y}} {{width}}×{{height}}</dd>
-          </template>
-          <template bind="{{visualRect}}" if="{{visualRect}}" is="dom-if">
-            <dt>Visual rect</dt>
-            <dd>{{x}},{{y}} {{width}}×{{height}}</dd>
-          </template>
-        </dl>
-      </template>
-    </div>
-  </template>
-
-</dom-module><template id="tr-ui-e-chrome-cc-display-item-debugger-template">
-  <left-panel>
-    <display-item-info>
-      <header>
-        <span class="title">Display Item List</span>
-        <span class="size"></span>
-        <div class="export">
-          <input class="dlfilename" type="text" value="displayitemlist.json"/>
-          <button class="dlexport">Export display item list</button>
-        </div>
-        <div class="export">
-          <input class="skpfilename" type="text" value="skpicture.skp"/>
-          <button class="skpexport">Export list as SkPicture</button>
-        </div>
-      </header>
-    </display-item-info>
-  </left-panel>
-  <right-panel>
-    <raster-area><canvas></canvas></raster-area>
-  </right-panel>
-</template><template id="quad-stack-view-template">
-  <style>
-  #chrome-left {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAABICAYAAABC4+HLAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH3QcNFyMmV/Pm9QAAIABJREFUeNrtvXmwXdd13vlbe9/7BgzEQAIcQAIEQYKjSAokLVlOW5Fk2nLKmqx0J2Wp0k652h13uiy5XYqdwU7sSnckpZ1yV3U75apU4kos27Elu9NlyRXZjiiRomSTIiWZs0hwHsABJIY33rPX6j/W2ueed3DvAyDKKoGFW0UCeO/ec/fZZ+29v7XWt74lAIuLi7tXV1f/raq+zcy2AogIZsbpvrqfMzNE5IS/1/fVn5sZKaUTrtX9/v7nT+fn9e/1e052X/3r1THWa3R/37+miKCq7c+mjW/a+F/P57vj6/45bayn+wzXs4n+794Q9nP8+PHdS0tL31LVmfpGVQU4YSInGUb/YfZvpn+zp/LQu4Y27X31d933nurkq+qaa08yotO55npG0v2O+r1/XZ9fb2FMWoD9Oe5+pju//e+fdP3u83+j2I+89NJLn11dXf1bdSCTJnnSSpz2+/VWZ/8m+w+g/zD616yT2P9733BOZ5f4dhbCevPQHet63zVtV3y9n1/v/k9nZ562SNY7Gd5o9iPPP//8qxVKrQdL+hOy3qqdNEnTjv1JA+vuRpMGvd7kn8oCqded9B2THuJ6u/Kk7+vuiNOgQH8OX+/np813/376O/CkU2EavDwVWPiGsp9nn33WJt3ItF2ne2xOe2jTHuTJMOS0He1UcG33791JmWQYkzB6dyfp7tynsktPG8/Jdv2TGcLpfH7Sc5m0EKZBsPV+tp4PMe39bwj7efrpp229G5u2O3WPplN1cE/XQZsENybtnNN2pv4x3N1Fpu2S/SO6j6fXgz6n4gRPGmMfR7/ez/cXd/1798Tsfr4PMU52Oq4Hp95I9jPor7ZJ+G7STlEnvN7gesfXpB2tH5lZzynrO07Txtb92aQTY9rv+3i1v4jqv5umOSEq0r9O3/iqEUx6MPXnqjpxrk73812oMQmP968zyUj68zPp+U1bxG80+5GnnnrKpkVxTiWUuN4q7+96/YFXp6pvANN8hD7MmRbF6O7200KR9ed9CDbpSF4v6jIJtnQjQdPGOylK9p34/HowaFL0Z73IUNex7Z5Gk3bkN6L9yBNPPGHdY3fayu3uSP0dqH62uyP0w4XrDWo957gPEfqf78e4p4U8+0Y86R6711pvAUyL3vTvd9ou238Q/Xn4dj4/Cd6d7BlMC532534S9OnO8xvVfuTxxx+39RJlk/DtpAGc6k6hquScp+7EkyIn0+LV60Ufpu2q05zN/sOYFIfvP8CT5VEmGWN/h5w0zm/38+sl7/r3drLntt58rzdXbyT7kccee8z6O2b3JnLO6zpjk47nkyVg1pu07muas9b3CaZh4f5uPMn4Sikn7Jj9RTEJMnQfVHdck4x3Wt5i0qL6dj8/6WQ5GcSYBiEn+STrhT/fqPYzmJYxrRcopax5eH18Oi38WI2ulLImYTPNMavv716z/93rRXUmOZXVgZ5kePX7+hPeN5xJTmx3MdXf9zHyM888w8LCwgn30IUQ0xzWSYvhVD4/LarTzpWBpOl+zqRQ9lqjE2DCtbH2x9MW3XA45JxzzmHnzp0njYp9r9jPoH75Gkekc8SZ2ZpjrH/Ez8wMSSmHMY4YjZp2MDnniVGT/sPvRhxmZ2fJOWHmxj0ajU7AtvV6k4727gSklMg5M4jdq6iyuro69bv799fNptYF0X3vJKjz8MMPMz+/gWuvuYatW7eScgIEwTADEwEUAZDkBgtuYONlCCJgAuZ/N5QkCcP8avFzUH8fsZgNEoJJLAakc+2TjENi90RQjGSCJm1/hwlmgmRFFIwEYoiNxyPxvYZ07gVKUzh8+DD333cfRZXLLrvsBLxfjbl76pyO/ZRS1thq325O137k4YcftvUSOf1Ufdco/uwLX+LOv7ibZ194EYBdF+zkB956C+98+99ARE64ue6XqyqDwaDdGZqm4Qtf/DK3f+UveO7QS2uu944f/IH2WpNwdp2U/oT8+W23c8dX7+K5GN9FF+zkb7zlZt71jh9cswNPw8uTsPU0h19VeeSRR7j55lvYumUzK6MCpqTs9p2AAiRLmChWBBIIiqZEMkVUMAQTJZtQSCCKkDE0/h+7twkKpCSYxrhVMTGyCYogohRLCGvHoYD0xyGKScIUpC5AVSQl/0ACaxeCkJJhakDCTJEEiKAmDMx8XSdAY6lZQjHmZoa89NLL3Pv1r3PVVVeesDH3T+FTtZ/uguhu8v3o36naj4ggjzzyiPXhwtRjOf6+tLjEP//4r3HOuRfw5psPsOeSXQA8+dQz3Pu1ezl2+BC//I9+jvn5uXWjDfW1uLjIr37y19m8/fzJ13vlBf75L/48c3Oza3aWadSP5eUVfuUT/2bd6/3yL/xvbNgwv2Y3qbtOF0J2MfN6ka7nnnuOvZfuZcfO8xitKnloFBXEBHGLc4MTQwVEDeIkyAqa/Pdh9z5vaqgkUuz8akYGVATEHOYYiCSUQtJqkCDJsJJIvXFYNRIzLGWQQqqLEiOhqKS6gnzhqJ9cJplsiiXBSnfBJF957TEoJBKYYskwFUSgWCKnBkmZp59+mpdfepmdO3eu2USn+V/r2c/JWAX9CN/J7KdNiD744IO2nqM0Cff+01/9P7js6gP8d29/C5detJNtmzYC8OrxBZ547kVu/+JfcPDBe/iXv/xPkCnkvHalm/HPTvV6v/SP25vs3mB3fKurI37pX36cfdesf73HHriH//2X/3Fr/NOSTZMyzn0n0sx47LHH+JEf+REWFhd8pzcliRtyBVbFYlcTN0bfpoWEYiaxENTtjOQwByOZ7+r+b/zacY5YICvH/iDmBurjmzQOKMlIWkPThpohkuN0iwWI+YrNGkdeQswwcbhlWEAzw8wXazZDJfsYMP84ghXzxSHip5rB/IY5/sv/+0dc96Y3rdmA2uz0YDA1EHIqDNv1KDAVvk2yn64vOujHlqdlJ+vv/+wLX2JuywVcfOkeXj2ywGtHn0C1Hov+uUsu3cNzzz/Hf7vtdm5959snRknq6wtfvOOUr/fnX7yDH37n29fccBdG5Zy57fYvs2HrqV7vdm59x9vXJeqtx6WqD+T555/nyiv3s7y8TMLhSgLMElkURx+KENi+7uzi0EgtIUCi+OmSwIpjmYTSAIN6uiSDkkAKQgp/IgON+yaGnxIBz/rjcPckj30LU5I5rCsJsiYsafgjCbXEUIwiiqq4e1J9FjVfNCioYMlPC/eJIFuisTiN0oBkhllBcmJlaYnL9+/n0KFD7Nixg5xza6hPP/00S0tLzM7Mho/lfpGicW/hyyCQAv75Nuw+UOwi/o7WmXLfClhYOMaWLVvZtWtXG7TpRibrMx/0V1j34XcdT4DBYMA933yQnRdeymhUOHZsCZFEqrurORRZHRV2XrCLr33jft596zsZjUbtiuzGqQeDAXd//T52Xrj3lK53zzce4G/d+k6WlpfXOF5jSAhf+8YD7DjF8d3zjQf50VvfRdM0LYzqv/pHcH9napqGF154gb/59rdz7PhxTPCdNSliisYuK5rjIRsWPyeJQyGhWhyNCEn9sbrPIGRJmBRfeCb+kEXQwDZG49AFIYmh4kvmhHGYISTEGl9YBimPoZypvx8VJA3R5IurMcdrSTrjLuGjGJCNpJnGlCwWp6CRMLIoMCBhFJPYIAxNxjVXX83v//7vs337dnLONE1DzpmXX36Zt73tB1g8fhwzh3OIObyrp60IWp9XNlBfRtkCPqWIM9T5x+GhDIQN8/O88srLfPWrX+WWW245IeLVPvvubt49biZRMTDj6MISGzdt9i81YTjIzM/OMjc7w3AwANwp27hpM0cWln0iOt9RowruSAlHFpZP43pLJxAB68lnZuSUOXJa41tCIuQ7jYBWf9fnP5kZo9GIlZUVLrzwQpaXVzxihGHJEE1ucdlIkgOwKMncj5Ds0SjfZd2R9re7AeWkGOFUhuOrrd+jFDPMEkJ1XGPhxdY+cRzZARPJfR9Jiqm/P2wONKHJwJRs6jt0Su5nWHJfQj2IYBQIp14xBkI47OE/BVyUFI6/KCk5zJOSGY1W2bFjB03TrOGtzQyHNKNRnTGQghWjWInxGI0phvtyNOZg0GAU86hmlMYw9c9qMYyCjgpHjx9ndmYD3//Wt3LPPfdM9FtUlYGqUko5IbzVdUi7WHw4M8vc3CxzczNsmnejq6HSphSWVlYBWF2ZY2Z2tt2tuwuw/ruUwszs6V2vuxi6TlYd48zM6V+vC8/qYqgnZT861Y+dP/bYo/zoj/4Yo3o8u1PgoVRJiPqJBRkRo6C+oxchSaGIxC5uJHEfwDdqN3xTg+wRKXd2EyRIBppjy/fLY02CWCzTxuHX91MAEfdPNJESqBopFcwyJurAqg3jWpx6DqkExVIiNwIDQa1BAWRAQiE5XExJ/URCyQgFIZlB9rk8cOAAt912G/v3728jiMOZGVQDEShoSUhuEM2U5CecFHWIGbAzlwZJghRDs0AJ2FVdu2wUMxI+XyqFpjF27drF0aNH2bRpU7txt455fcjVuCrE6Ds6DkdW2bF9C1lg49wsG+ZmOWfjHNu3bGL7lk1s2TjPpvlZNszOkMTYsW0LWvSEHbhraDu2nfr1ztu6haa3uLqn0qhpOO+0rncOTWcy+vmMesLVxVgXdimFpmligWbmZgZtLN8vFmFZbbBGHfdSwo9whxot8ZAdMydzTG9aUDGKGlZ8QaiGU6wGVtDSUChIY6j6gqOBTHPScZj5qVHUoAg0DaYlIIWhlj2qFUhBDUwLNH4tMCgKZqRSGMwO+PM//VOGgznPe2jDYGbIvfd8g5mZAapCMcEEv6cK8RpFLLFp06Z2Lqvt7dmzh4cfeRBTQ1E04GXBEG187pLSqNKYbyBm0IQda6MoDUbB1DwQUvyE1tJgKFqM1dJw6Z5Lefzxx1vb7B4EqbtSJjmmXYjVNIXrr7mCI68dZmaQmJ8dsu2cTezYtpkd2zaz9ZyNzM8OmRlkjr52mBuu2c/qaHRCZGcMSxpuuGb/qV/v2isYxfW6GdFqtE3TcMNpjq8mGbs+xyRSX520GhMvpfDC889z7XXXsdKsYMV8t7fA3ChYJmWgGKkIlh3SWeQEwJDkp0UJKKIioGNXW9R3PnKKEK+E32BYDlxvUMTQzEnHIREQSCQaMSRn9+dlvKOmMUr3aFRKcco43JIUicWU+G+3fYHf/c+/x6c+9R+ZGQ6ZmZ3jtz/1Kf7PX/vX3HPvvTHaQsYgKUnFo9C5oBirKytcdeVVvPjii+1zEBGOHTvGxk0bfXGabyxGQ1GHmaYB4YqRLDYIIXyw4vDQ/HoJQ61BTHyPKeZ3aMbxhQXm5+dPSDCaGamPt7pQZRJL8qYbrmP56KscPnwYEZgZJAbZ/5sZZMA4fPgVlo++yoEbrqXCtq4Bdv2bm9/8JpaPvXZq17v+2hNgTXcxN03DzQeuP+Xx3XLg+hNoGN1Togsxu4umnijPv/AC+6/YTxlZZIo1YJIf5yLmBpeFMhCwEg67J8QkVacyRe66eLg1aRtcUVFSgmzFsx3uWSKSkWIUibiSpcD1648DMU/ggTvP6r5PskhrmEMfRFEJKBcZfJPkjq4nQTA13vk338mHfuJDfOXOr/J7v/t7/M7v/A53fvlOfuqnfoqbbjhA8di1/2nZr5kU0YQlhz7XvukannrqqTW2snXrVpYXFrBmBH5+OBnA/CRxP0NJVjySZoo2DrLcbhu0eDTORONnxde3FUQLqoVmtMreS/fwzDPPnOBe5J/+6Z/+F/1dvZ9V7BqHiHDDtVdy51f/ktVRw9ZzNpMkMRo1HD16jAce/hbPPv0k/+N//941Wcr1CoNuvO4q7vjKetd7gr/3t98zkXJ8QpTJjBuuu5IvTxnf/Q9/i+effpIPf/DHJiqO9EPX/Yhd9UuWl5fZMD/ProsupJhDBEniOzaCWMakuNMsjp0znhzTSv0wRbL4yYCQyWgliJhTMzKZRty3cNhDJNgMY0ACz66H333ScRSHVSnCrZbdfzFpc4okFLHsvkEkBE0E6YSPfXxQrHDF/suZnZ3jttu+wHPPPcv73vdefuiHfpiVZrlNbLYJy4Hfm9uSn4jaFF47coScUuvnbd26lccOPsa27eehxXd/JO7LQAZgJRZ84+epZM8JeYwtIaKIRZpGxXNFLTvMIuye2LRxE48++ig7d+5c48/KPffcY5O4+11nvOsj1N/Pz2/ggYe/xaNPPUcTGHc4GLBvz0Vcc8U+VlZXpkrgTCrPrNf71pPPnnC9a6+8gqWlxTUOUx1T/VmfGbphw0buf+gRHn3yudavaMe3/3JWVpZPYOXW+6vX7CYcu9GUpmm47777+OAHP+h4NxYlSdr8gOGOY45TwCpIsRQwxkjqxi7iECCJY3MBj91L8viXKSlFrN7iG6SyrOp1OaVxEAlB1EPFyTzSVCkjmgSp2XGNPALBO2kMy0JW8YhW8VNpODvLp//g03zjG/diCDfeeAN/+8c/yOrqClgOLpZgA8NGKU6vOI0QhMzK8iL/9fOf58orr2QwGJBz5v777+etb/l+jh096rAzCNApbhMqRItTRVKHGBmcF6CYkSUjWlr+pNNrIodiwlNPP8WuXbvWJKoHXew+GAwYjUYnxPS78d9q3EtLi+zfdym3HLiBuVlP1qyurPLakSMsryxPrNfuhnL7hLKFhePs33cpN9/4Jubm58BgeWWFI0eOsLBwfM3i7BrytLrlhYXjXL1/H993043MzsyAwMrKKseOHWNxcWEq6a3PzO0nSFWV0WjE7OwsMzOzLC8teagTQ5w8FVljZ8B6bD/Ig2YkUaz4I1Tx06Sh+E4cxuIZcHdAU8Ak0+T2ihtWzYSj1NThScfhYM4dbne6fVcV8bCx5zpicanvvO2qix+bepSrFMgizM7O8h8/9Z/46p1f4f0f+HEA/ugP/5CVpRU+/KEPsTxa8XAxhpRUM6C+IFViDgqbNp3Tnso153HhhRfyyuGXyGmGOjtJxfliqYbFPX+hpiQKWIoNB1CFQYrTsqGIRLTKT+xk0ChA4Yr9+3ng/vvZu3dvaw+D7mmxsrLCYDBY44TWf3eNsJsPeeWVV9aVdekvvm7Uql88tLq6yksvvzy1sH+aSkh9NU3T+k0iwuLiIouLi+0J2K8zmERP7+Z2qvPdz3EcOnSI6667jtXVZTQZ0pgf81KZrNWgAuNWrlJSSolEWPL9WqWGOt2eJSlaguJhvusnEc/yV0ygRkkpiH+QRSnCScfhnCl1smM44BVIdVnBnnFOEfpMiBVUnMxYeWFZ3FP6/z77x9x5x528//0f4F3vfAdigpbCZ/7wM1yyezdveetbnL8lCbNC5cAUJ7d4SFoSS6Nlrrnmap555ll27tzJcDjk3HPP5eDBg1x2+RU0qytgQol5dNaDopactoLFCVyQLKhCSua+hQTzWD33YwKpcUaA/8ztbBRRs/bk6OPsLkTRoHj3C/Yn1Rv0/ZJJBSarq6troEr3c/XPmvnuQ7FJmfu+sMAkI+/WpPQTndMURGqCr8/6rD8/dOgQ73nPezh27HhEYzzk6Md6pX8bFbAIhonDJKhoxWLXTwFp1NdPY8EgFzT8Dv+AOwbOrjWPgKXKbfLo1CmNo15HPHFmUhgTVQh+lOOWLM641aCFWEtbj+cgyo/+yLvZtnUb3//Wt7G6OkIwfviHb2Xnzgu48c3Xs7K86idNzTGUoLlLxUdOiMwI1159NX/5l3exbdu29jkuLi4yPzvL8dUVSoNDtDjJLKBRI0YmkqXOcEQSFI2cShKkLowSSUlLkU+CZMbi4iLnbt/O8vIyMzMzbkt33nmnTaqK6lZx1aOuX7vcx+yTanq7MKpbfNR1quvu3F8wfQp5d7ev4+v6Al3o0/eX1hMHm1aLPEl8YWFhgZWVZd7+gz/IatOEPzDwya8bdXLoQwnqglR6OBFNcqhDOLbq22dEIiM513iUR8woyZ32XJ3sFDukuPtSKhnxFMbRJgZjx0ymIIM2CWkBO6xS4FNk7cVQC1jia6UNh1rOfgKotgnLFGOWDkFRTZyuUmodSaX1BNoYCF+548vMDGeYn59nZmYGVeXwK4fZef4FqFkEH2owISElnil+X77Ak/PQLBYzYNKQbNDys2rEziJQkFDO2bKVu+6+i71797q9dxNp/d247yfUnMC00Gw3kdNNltXPTitb7VZ91YRQn6zY/96+L1TDq30nvY6l+2fNldSxdU/Mfji3C+1WVlZ45JFHeOtb3sZodTWIbL4raTAKa8UFxTlOTlfxZJRU34DkcXuLRG6p4VdAszu+QZZTBSkOY6zu/MUJWaYRTTuNcfhxlaIOQ+Ik8ARhqZBNPOyMJFLkFDTGX0wpJUCYiI+ztaHY7ASsGRuemS+iZCCqEbiKMKv6ovRxKbccuIWDBw+2lBIR4YVDLzAzHJLQCF1bhzZSPKnZEjiDvqLmi5sCyfMeJpU640466uPT5Pe4PFohDTLD4dARQ3e3rYbdzRB3F0mfqj0pD9CFL12sXiM+1ZDrd9WfdSejv+C6pMWukXezmv3/uhCpe63uoqvjrYuq6WHOetp1v3N+fp65+TnMMpTShjOt3QE9ROvYPI5/83oKlRL1FIrzNSRyAJXFamBNLexzjJ78mqq+YFJxACZ4dvB0xqFBFycpUMhmlBw0k6CxWnJDdlqKnwR+gezcrmD+WkR+tN1/jUJARRM/tSg+1mSU8K80KCGkgiEeoFAfkqkyt2kD8/PzLVlVVbn22mu57YtfYLUUNm7cgBYfmgUb2BduHJfFKBRnAqRIXBZnKIuCNMWTirFo0eKUEwEdGcuLy2MbuP32260LfU6m0zRNm3Q9XdZazDIajRgOh+2C6Auk9X2e9dQpJtU+96HSYDA4IYk5TVh4Te1w+Br9U+PFF1/kyquuYu/eS50KkiQoHtLmCHJEhGosnRrPD6IgOaIl5rAJ8YSYJoWSUSnk5Bwqq5gjJUyLR4tybhm8vkA4rXFIMmiEkqSlswseyclSTxL3XzyRCGLF5QaiZLZSw2t+JuHObaJuAuo8KLF6i/V/Dgu1pk+C1hEOcRLP8D/1zFM89NBDnH/++QyHQy91Hgx44IEHKKUwPz9PaZq4txpVq5WINZIXLoJGwZa4RyZtrNzvQVGSed3LzOwsKQm7du0aEw+7jmyfaDiJRtENuU2Td+z/vMvd6i6++u8uhOpHlyoEqousr3LXvYd+sq7eU9c3miSjWRdJ9WO6i7DuYIcOHeLHP/B+ji0skSWyA6kWKKU2x13LUn3HcuydUoSjgk6NJqwUkNziYMtK1hTwSONKvggk+WJJgbFNGswyScopj6MN+yZjkEAbQwYNlMwwfKKSPN8S9u9JNcmIRj1HkByliEfGRoKm5KzxONMkxpCjTEDw7L1FWUESpWgIX2SLkoKoGMzC/iuu4Mtf/jI7duxobWJ5eZnLLrusjXh2Swb69tO3iYpQuqWw1fftRkyHw+GaIM2gL0ZQv7juntN0nLoZ9a5D3GXdttTfyHr2F0QdcH8xdk+P6kt0F0w3RNyv0OtH37rXn8TA7YsorK6unlBPXEphYWGByy+7jMWlZa+YK8kd5sDqKejfRkNmgBaPubvwgNKUQYxRIZnvxil2VC3+WREnFOILysSDrKoCNAgShU/J687l9MeRygCNYqriTA7PyquzcX0z953fiIRMtnEJbQ7elnrQQHMhaaIBp8cHLPOKkUqV0VYvQsy8ZiVqQ8Tpu2OonmBlZYX9+/dz5MgRtmzZsqaMtm8bw+FwzabaZ23X1+zs7Bok008kT5JYSl0j74ZtR6PRGojV3fFreLOLxfs+S5f+XXfe6mtMKputi6DrVPfpIX1fon5n15/o+g2T9GHrOJaXl9fkbUoprTJJHWddwE3T8MQTT/COH3oXpSmRqnP6tyexvKRUUMQG7luY1GgqiSF5UDynkSzwdZSamkQxj4dXsyWyQE7uvFrUwWrKEIVPOqgV36c/Do3TS6VGsiLWr2PlkAxYKo5zaiYcozHncGlAGEsgJUUdObhn4ZAmp2Acx2JHpBO50tZvMrE2ny1RHKXA277/bRw8eHCNXX237Sd1C4e6cKceMd2sdI3ydJ31SYXsdYDd1djdyfuwqgt3BoPBCSJjNRFZrzccDtes+vWUUvqJwvr+4XC4Jsxcd4+6+6SUGI1GHD16lAcffJD/4e/8HZaPL3nVWXCSPLTpLB1LbqopZGsQT4aliB5pyaTAtwWQQfAhtJCDqaqRlCtBabBhwnKJIiOLTDfQSOQrTn8czsNIHhUL6J0HOGwzJxUWEZJKsDIEy4ZJ9ipDrUojGg67JwuCKxwejuc1LIfJB8YXEY9WRZGXImQN1i+GpuSnWTGWV5b48Ic/zNfvvZejR4+uQTffLfuR27/0pdhCiAL6MUmM4J7Uyq5WmiU0kmqEo2oj1Z9JyLVU3GqRFfU5Cp+ge52uDx+7UJ3kVgFJWPO++pska+Vqqq+FdcbT+S4i4tJqRdXQUCSU3JeTljM1HA64+qorWS4N2VJ8jQYBLpMoQUWHAUKDix9U+ptj/cBI4nymAEvxQBwe+XXjHlJBtdIQ05hwh6JZSPo6xtFm68f3i4IFnZycQhBhnJF3H1yD4hIlsCpjxq6M6+NpqTIhAySKFKfiD5K11A93xI0qFlRTqV42HLkhEyQJDz74wASxD9pn1SGutQteqM+acRBhLBI2wZ7Hw2+t6/lDh2woQhG8drkaazUUBI00ewpqDClR1EXGqiZRq2IR0jE5HM+avZWITzsTMqInEb2oC0BDoCxJ8IoiopCCy+OsS6c1iPiR7xFFI6dQvqhiCjHlLfwQN6Lx/Xssp5iQrBpK5JJbdqrXSYiF1kegDM8ZBDkvplIl5igHLSMoH9XZFIOSa2WdeXVbZGpdWMfxuVRHH39fLFvPVai87nH4JsDaZ6WG5SBFVl6X1PmHsV5QhEQcCZcsAAAWiUlEQVTN/3S+VfIipBosE0FLzWRnf1Z4Vtp9J/WAXcpRvBVUrprIi/vGxpG2yOWf5FkJRdx+Bh6DeN32nCRKFyV2No1Yd12ViguMpZRiB/AEVor4u0VM2+LYN/Hj2LO6cXhGFVjoVDjetnqsBMUnDuVURS1IpOw7TqP12K8Lw5Nm7vA5dUDVs8MSnl8hwpKhzKfqIgWu3RScHgtjSw4l6s6SgtWKuhqHU9OkzbYWMyx1ggPm7FZJyZ1UBIsyToschguG+HcXxZN+kdmuQVdNJRJw1jlVtS2W+k6MQ8W8bDcMMhWjSfgmY8Vza6o+P8Hd0wjFWlQG1mNc8OfqGWev2WgipKzqBuf+T4kyFB9f0TzOktdEqLoWlpl4HQaN86LsVJ+VeaTvO2jPg6B6erRDIIdR13oD/02s+uQTSJvrdfwpUTBjA2sTR9IINlCkyWiuzM/sD0DMSS0mTkqzhKbiANpo2aClEXLc2LhYP7Kfgb/rSSvWtMk2y7G7hbSHVUigtcjIKMUX60iEQQOWa/DU0BIs2ahRdqLOd2aOihZee+UwRYsbQ3a2qmbIxb1hC1U3oQ1ZjRm7GnkFEXKLIYmEn4zRRYp6kXofFYIEydHLB4OK0RmHf5eChOYVY2q81edWhdrCc3B4GBC3as3Fs0rFoaDXllQYowEVfcMiiJh10Yt2TqzkTGE/GeS7OkeDFD5CSfFnOFxSAjRKwKIUxklGvC4TGRSk8aIXk8bLO1NyxuQgao6roYaRWlSEWZhiIlFaAw+tpMANKeHx8Ip5Ww5NPDj1YnpPPDmFuoqMWRz1VfAMgvgnhpVwxIrn5Er2IqEkvjMnySjFT6SUnX/0HZij44tHWVkdccnu3Zx9fe+/Btr4DuvUBW1hjiTfL1IpNAKDyNiqFefN+Kbv8Wp1LaVKoSdi89Iq7/lRlc0jKJqsfW9JNi7cJ3mMPRwlrUzTtoYldokorjZxcKniO4e6DIWvfMVLSXODufU7wcE8yVZq2FDHO3xj1SeSVr0jWUE1ofL65shILC6tsG/fZW3M/ezre/uVkBJVZo5HCacxyDruuJkTzqzSHrK4WFqFKWLkyOWk6kTWLHllZhYP3UXZekRliFj4uHorBSFMzOPdFllaB8w4F0Y8sqJVXdzEaxnCaTXxMkpxBVn/uqSh9FcimuEOutQQRUrOdkU8vBo+kNcCvP45SiI0zejswjiTFodLODaUCJ21YbzgpKSICnn9rbSliCYRprOE5OTOoLg2kJHIUQYq2aMKOVVpRtpoeKoymVLpy0FbSA66UjinxRLJ7RfLGUWcyyMOzCLC6pg4uUaTmKDZa4fropFU2miNk3BaXgdSwqlLige1amVdcvr2654j9zfOvs4gWEVxVW2rNc2iHg7P7qiJiDujppTqtBSw1CDmcXRWidqA8LOtuAYTTlOQKOUZkwIrv8ZFugbqWqzSOulxZBQNOU+HLSkcNi3GAEHzyIPDGkxRF0cKCqpiKaT7i7rwWBX6ipNINbtoQHJGJjmFbEsVFNOWkWq8zjkadRzDs68zBVa5wQ2DgpAkObOsRFSiCsdJxdgZyKHm4OFbBhG4SZW373FzHUR7lKBGWIT2UieLOtTIaUQtmvsblT7txDUlkzRXIqUnk5LnHyQWBknIqDvFklxVQ2sCLBYdCcmGWnJJTvFQoRYhDYKBKhGxyQRPKLVhz29njlxMwDVaObs2zjBYFUmdxqzF3yI1l5DaTKSiaEkgrhhHEmaGmc2bNjM7mHF4o5HOi2qvXEJu3/DC/uAQEU53FokkWxDGUtVX9TLHpDkUx+tWPBYTm8kDl6jJngjy/GotAfUQclRTen11VMah47BdUUgpBJ6DFaCUEAwzJGVmN8yxYdM8m+Y3QM7Vg4kkkTE7nJ06R5VHZHEAnV0bZxysiqysefioiDCIWmQstbyYZMllKkMndX5mA//3b/w//MnnPsett97K//qz/wuriwbZd+IaXUo11m8pdFIjc12MJJGbiOIUzFzvtR1P01bOEUS9lDOPPPQQr7z6Kju2n8cVV1zuSStxaUxyiCfXa5iHgEuQ5VxCMORhUE/IVapQUGFTSqwsL/E7v/uf+eY3v86RI0eYGQ65/PLLee973su1N1xPWVnh2OICn/+jz/P+D3wgAgedOTJXRS8mDCIjXSkjZ19nCqyKrKMUT+J5mt4CK9MamAZRKhnMzczyG//2N3jowQe56aab+PrX7yUxJCWLCJLDnMoZwlwNIqc4naQySR1Mlcp5CQl8SSn8F2lT+W5YnpRqSmHvnktJOfHoY4+ShkFYyzkSSNYqjbcyXuKEEq1Z+6iuz4RAcpw6szNz/Pmf/lf+3k/+JN969GG2bd/Gvn37uPiSSzh+fIGPf/IT/Itf+iWOHDvGRz/yc+Q8OHGOYuJUPNTbWGkTY2dfZ9DiKADFG5aIppYe4KJi2qrsIQ2iwuzcLP/+t/4D9993H9u2bUO1cPPNN6Ml5F5qWNZLgl260Wruo6qMp7arllrxgFHtHyFgxeVUUggwN5W8KL7INm3eiKJs2LQRBQ5+63FyErSx4PxUiFfpGR4CdqFwRTUFT6j4Yo6SycEg8cd//F/49Gf+kBuuvx5B2LZ1G9deey2X7N5N0YZ9+/axuLTEz/7sz7Jnz+4WgnbnyKNmrhiokS23s7DqzINViaalbZQcNGXR0AbKThxIgllhbm6WT/32b3P3XXezY8cOzIwtW7byD3/mH7K4shzdiYxG8IRfKzwfLMiiYeAaxfnFI0ollMilbY4HRaNqLXnmXDJWCkVgzyWX8sSTjzOcmWPzhs0cOX6EJ558kt2790TysJCCJtBUVTypQoBGyRp98ELmrHgTl8OHD/MHf/Bp9u3bx2g04qMf/Qh7du9meWWZLENKafh3/+Hf8/xzz3HFFVcE6zeoJDFHLvDhVBlVF1FGcoSlzxrcmeVz2ABSoYTSRAlYoCl7D4eggc8Mh3zmM3/A7bffwfnnnw/Azp07+djHPkajDefMDUNhI1rwBllNVVlcWvRdNFid3quCwP7aGo5ZioYr3gekcnA8cqWklMMHSly+7woee+IgOQ3YumULh189zLPPPsPFF+9qWxRr66iH6oc60SxriBCrO82ShJQGfPozf8TevXs5duwYv/iLv8imTedw7PhxhEQjixxfXOa+b/4V5+04b1xGGwVHqXK7teZSSnTZqnUTejaSe+YtDu82mkU6HYEyYh5gFVNSHvC5P/kTPv/5P+Oiiy5sDeOhhx7i3e9+d0igyLgntYybtm/cuJFf/79+nXM2nxPKEwnJ2tJKUu0BIerZZIWmKdx11x1ITuOWXLjgGSHfLyS2bN3Cls3nUFTZunUbrx0+zPPPvsCFF1zoY8rR6kqcqGgaogiR6fYwrUfWBnOzPPLwg2zffi6X7buM7du2szJaDSq28OLLr/LRj3yEiy++mKNHj3p8S4RmtQkWLeHZV3GxqvAXGFNbZvnZ15myOEwsIq+1j0EmpdKqSKDG7Pw8n/7MZ9izZ8+a6r9zzz2X8847b90vKKXhi1/8Eu99z4+5+28lEhgS7EpXscgpuzyKKK+8dIiLd+9hkMQ1YtMIs2FIygS1pOo6hR9hZLZu386hFw6x6+JdjJrGe3lHEZEnxx37ayTzarPHJmU2JGNpyWVZLrrgQlaa1SBOehRr1wUX8NnPfg60RPbeN4Dl0QrLxxfbXuKo530oNm4qGYIHdhZXnWGLwxVhnJEq4lDDosREjZShrK5y1VVXsbS0dNpfsLo6YveuXWhxDySJdy8ySSRV1LIr1WlpT565jZs5fuwIaWbW9Y0sk5JGHsPFYES974KKMDDH+0X9NGmaEs0nvejHlFbqsu19h4euNdiBRYW5uVnX2F1aIqsXz2jxSpOl0SrLr7ziaRJlXAVnRm6VA6tgW/FkYuuE51pOefZ1Ri0OCrkMKGmsnySB2ZNAo0JZXuEjH/kon/zkJ9bUY59//vlcffVV3tpM2sLTtrZPzNiydQs33ngTy6tLkSj0uolkng/IOHFPa2mjGlu3biJnf2+tx0gdSYFg/XPs+AJZ1DsUkVhZXuDSSy9DKYg5M9ijYt4FqaiQcnFNpWxYyd5ZVYSiDeeffz5NU7j77rv50E98iIWlBVqhm5JdtsYysxtmKKPG+wCKK3VX9JSTM38tNFqrOksKn+fs68x5ydPPPF116sPochSF+C5emyFIRGQ+8YmPt7W8zz77HH//7/8kb37zAe+akw1TbwxZBbUV7yCkVW81HOycDG0kmh5KW8stVVM1VUHxCO9aFMvgnKnXXn2Nlw4dYtu554IVFldX2Lt7D6Vx/ydngvIuURIqQYyM8leSJzsju52ScMcdt/OlL93O4uIiBw68mb/7d3+C5ZXlqGly3+uVl17iV37lV7nxxhv4n/7B/8xoZTWKZizyi937SO6UR4vjFw49z00HbjprdWdKnsOakFUxjQ6exYnehdDmHtdooIWPfexjlJDc2bXrIn7zN3+Tv/rmN5zuPYrrFHXcrRaG6Ht+MYNSEFXKyHMSpp4LMNShkXmyT83afm+VKFi1/I6+eoRnn3uGrdu3oRiLSyvsufgSmlGlo9decNCkWn9hjKJGo4QAcqNOFUmmFFPe8a53ISJs3ryZ2277Iv/q4/+Kl156iY0bNoHC5z77x/yjX/gFzr/gfP7irr9kNg+pnQHaA7VoKwEKhjVB3bez2fEz7uR48qknLJNbdQ9LtaC4qkDUckZvmSXJM9Sf/OQnWxmUgwcP8lu/9VssLi4g5CASWtCVkq+TWmgURfFAiHpVXaZg9YpHtCza9bbyjeIwaSYP+NrXv8auCy6ClFg8vsieS/d4F9bIp2RxkWLNtLXX0Zpi3M8uKPBaO8DEybi0uMSv/ZtfY252luXlZR5//HEWFhYYDAZccsklbN++nYWFBd73vvdx0803U7Q5YY6INsaVGZ+Sy8+8+PwhDhw4cNbqzqSTo2BRqFOiFtuL8FMIFFA0+jQ03p8tZX7+536e5RWP7uw4b4d/Pqjpg2gmoqqIGk2IhlkqFINGjSZOBFXvEJpKQa2BQqhIBPtcFGu8GaIUb86+aX4TBeP48aPs3rMbbUY0USCF+omgRKticzHjohpL1JeHJqUpTl+36HmtpmyY38A/+6f/hAsvuojRaMT+/fu5+aabuf6GG5ifn2eQB/zMz/wDvu+W76OUZuIcWaijazFUCqWRXlHX2dcZcXI88eTjZpJoJYTa5iJjwYFKwo7MhwscZKGMCnd/7S7edMONbJyb94hTkii2DwVwAaxBZNCWt0rkARSviZBilARZw1hTLcgfh4UsKvEkpPEXFo6zcdNm12K1VjmrrfKr2lOefmg1WECdS+b6JjZuqFgpLHhgYn7DPMeOH+eRRx7m6NGjzM7NcsnFl7D3sr0cO7rg2XCxqXOU1JuqJFwsLQ0yh154nptuOutznDmL44knDPHqORt4Ew/VHPUXIeyg4pSLUK3TkHMPcaiqTeFwJVH14d2g1ZyqHmL1Xq0aelUaurBZooVCrdgLmJNrfTmtTlGKL9boA6HiDUwkh8SPiod9XUCD1EQ31VSbqsQCiSYsYhJtvdplBGY0SRhaFc2JTqbqQoGCYqc4RzUhmtOAF188C6vOLFhFzYr7jq5BIdeooZBUQg3PXD+1lOiyGBhe3dFurGqQatvpE6JKLjXeQ6HVEKoOdpwQxXMY3qXHG40UDGk80lTEe+URkvtaqScWPSrCnyBgVJXsMUtobtqGj973O8iUNCGr0zj3KciNqr7gBhqkkLZ3hYXBW0uzP5U5MhOn47SaT2dfZ8zi0Ej21cahRLzes9niESh1yEEJdZCIHCW1tr2UiF+H6Nmg0RWxrbQTV6zTKmxEkPQ6X1xlHNUKAwnZzuR1TqUEEz3V0m9DdeCD01Atz3jVYTSalOLYvwRd3YoLOlSVESxakdnIGzhqRJWiM5IFrUXR1z1HVb3x7OsMSgIGEhmTG6L/AsGXkoznMGosn+QVdC01PYWyRwqZ+mjxS9u1xHddBMvFdYdLaRuyCDky8jXWFO1QrLiUTklRo+Rqikkt1MktZEejM1UIK9RbkFQV1r1iRC17UZVEaxcpURUYcEqhiPsz0nj0rKr6IfK650gH5ezaONNODqnE1xAIIKIsVVXDosmIR1b94edsnUIoGxtRLm1OoVXwVWtVDnNTF03VeM1eUpqsbdjYRKKvsg0zDmUkKSKlI1Zcuw+NW+VWX8ePIRdSbheLjFwNBD8NBiWa1BOOe/gG5rMShUoBM78Dc+Slv+msxZ1RPkfoQbmYQY3qgI4E1QYzx+Zq3uAU9SyzVawfjd2LetMUxXtEW/SK8B50OT4T6iMaHY5QShVIEPH6h+TizVWlRIMoWFTRIjTi/kkJyCYWbFtTirijXlXNVUucHrX/t2vrWiNOlykuueNhZ1opTO/zEi20NNqhvc450qawYX4Df3XffWsoOGdf38PRqscOPmYpFG1ShlSyc5kyUQvurXSlNBGFicBU1F20WlPquk2VLlLFvzUUsVPrRIdvUCKqU6nudY83acNg1tK9MySvIHRIpeTk6iWErGfkMaM/orcPQ1rdbvdtShrXkVeyjCilqrkXVzqR6NtXhcorn+t1z1HxnNIrr77KyspS9LUIXtkayFUZPbV1g7WdWaPXfCsKYViwVySawXTeYIzJjq3av7Tq7bWPNxEKr+OQWrIs2p6I1umjN+011oSvrSfCyOrvpBaGhSp7R4e3+px0tXbbga+9le/WHMljjx70pHg4qSqCyMhLSU1c87XqzVpoCIbUjSuXgKYQcDbI4vKZskauvmrcgmhGJSRzglflSt/RtsBcMsc0t4TDksbibN4ZKSrwxJCiHnatRVFt96DIrkdttySX1K+ZE4v0dTXmFCdUFonmMcEOiJyMiLbq79+xOZJOo4ToAe6+j7WLX6r5mDe7SUGt8QaQHgk0Fd94skb9irR+XKp6KTIOr0t0lR1InKhrxkGba5LiRNRstZeGz1OTooePpjVtjMfPKuar6kNXKqq6ovugfVZEi4BoU2AaWsUhB0vQ1uJ5EJWX3605annVIkKREp1Ds3cBjRZZIeCHiIuU1V3FzBscinn72kQJ/K2RSIwFIJVHFUVNRNutCN820SvDdbAij5E1yIdGrhQMIWTjSyvCTU7MRqjUhZ4tdi6NZF9oZsVNSLZxf47sLYNTZMyl+hrRMyKpRueMyHN8p+coKqBU1GnuGCWVttNq7R8jql6LbnGaRu9AojamCm1HcUtUZDZutBqSQeoVj2hBtbgGcJETx4GXAljxZ+bs6WjtXIxRSLYq6gvDAqKGwkpSIoEM0gQnwSo1SZgp3tO8RBsJgnemMVduG+NnpbUeJ/Fdn6OBVme0hmKJTp9tljlk4iWq8qLfRirxuTJuQqPRJqgemVrPqugYlELbqf62WHSASuIdf1o2cNDMq9+SQqbexp2anKBo0fsiGMSR3EvW0ERfDRkYTSPef1oEHakLrJVEoYE09Aw+CVd/tKCwZ3IqSBn4Qygh+fnXNEeSBt8T4zj7rMZzNPjKV75KbbLT9idogVhIeNZjrdvaqsrsmESuo9Mjq6NCMq61DvwvXdzr35GihUBtKmNRm60hNh05OMfHMZQkqdN2rYtvg9LRJiSqhm0kO10BoZUBSiYtDBtLhNSuFFVwOnlo+K9xjhLfG+M4+6zGc/T/A8/G/snZpSWJAAAAAElFTkSuQmCC);
-    display: none;
-  }
-  #chrome-mid {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAABICAYAAADRa1RpAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH3QcNFycE5v9iFQAAAQtJREFUOMvtkjGSWzEMQx/0eYrM3v8k3vgqycalSwlI8Ufyl3OBFMtGIgUCIEd6PB6RBEASqvfONSrJXrDNbNkQ8ywA2y/SmayW+ZIESTsiyQsxo40xmMS2aUmYbheHpCVd0+UqJGGMsey3mUyldoUvlY3D9rIN0K7Wbe/WbZ+y1yWtaVtrp3VJzAEX6ZVjc2p7b2mtnYhNdl6m05rwtfV/ltx7XypJTpXeO7Y5juOlchzHaWxyrJmuhLapqgIJONv05+srThBgiQpBTSRwGOr3rwccgWHUhJ7P5/YNlbd/2XiL78L/WajP240AQUihfnx84EDJjCHKHjTAbkimQDgBjAJ1/3kHAgEk/gL71AHEWVXPGQAAAABJRU5ErkJggg==);
-    display: none;
-  }
-  #chrome-right {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAABICAYAAACaw4eEAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH3QcNFyghKmOqnQAADE1JREFUaN6dmsuyZsdRhb/M2uf07bREYDykPeIleAMibNx92i9BgEPBgyB5xlvgtgI8VDNBI41xhGkpQowERgqw3H0ue1cuBlm1T/3Vu4XNiWj9l12XrMyVK1fWL/v6668lCXdHEt/1Z2YnnyUhCTPbX8dn45pmRkR81z7/XUr59Pz8/K8ePnz47/bVV19pnDhu0t+Pmx0Z+Pv8zWv1/eZnZ2dntw8ePPizZXw4bj5/P3vq6G/eePZiX9fd9/Xng6/reg78/dInzxPG9+/auH83GjEbPUahj6m1Hoa6v1/X9c+XPrlP7INqrfuru7+10WzUkUHvOtTojPF1mPdHSzdqPPXo5vm046bdq0fhGr+bvXZk6OgAM2OZBx7hZD7hnCzbtp149Wid0YOjx+eE6t8tMzb659Ebkg5PPY8ZvXpEQWNCzck2M4H3BWeM1Fr31/6+GziPmTefM3tcYzQoIt4a3+cso2EzhsYTzAAdw9M9M3rviPv683dl/Oi9pdZKKeVk4piVRyDu1NI3mCtARFBKeWeGbtt2yHV9HXdnGUMyGjSfZq4K42ajYbPXx836XjO+jsj3rawcFx5dPgK8bzJ6eGbzI8yO3j4yaMToiWF98fl0c4bNSXBEJ/Ozd1HSEY8BLGOIxlONeCqlnHyWtGNoxteRMX38uP44fkyyPnfpp58zqy/s7jsGj0rOEcvPVaMD/sj4I/zWWllmMB/VviOwHumv+dkRGc9EOtOUu6fHZteOGBtDN/+NeJwPNRsxl54RU3PIO4x827a3wNwfdr45kib92WhAf9+fHem1I7FZa31rr+WIr45kzrjZsixvZWHHYcfqXFHGctM9ta7ridcigmVZWNf1DvyllN2wkatmHIxCby7kYzbPOD2qFCN39efrut55rE8YM3I+8VENHPFVa2VZlkOSdXe2bTuhmHdl+W5ox8T8YCbD/l2t9YQqRiNGjx8l1JEamVXKri56doyTuzfGhWd+OyLJjsNRlo+eHaX63Iy8ldnjQn3hbmA/yagGusfG7JwrxZytcxMyjpnH77VyPEEP65iVs5tntp4ldp8zlrG+x8z2Y9L1f91Jy+zeccGZn0Zv9nFHTH500BGbM6HOojMiWEZQf1cN7Aut68qyLCdeGFN+xuRYJ7tXu5fetU9EZCiPOp8xm8bTzLqpe2jkoDnzxjCOa8/VZByzzG7t8gQ4eT+GdO4Be0kZDTgq5kea/0g0RgS+rushNkbg93o6aqeejUeNR/fcUWmaqWLbtn39MdGWGcRHUrcb17E1jhszq3tvxNCsJuaE6VGZMbeMKTrL6LGelVL2k41jx6zuRbknSS9BI7WMdDRTxLi3z+VkDl3/7vb29oS3xhoZESdZOm4whrW/7/NHT83UtNze3u6c1I06Ozs7wdjc7PaQzsV8JNSOp7k97IDvtDPDYTdsvts6Pz8/MXCsm2PD2g/Tm+Vx0bHZHTNvjMyRyh2pajk/P0cIZEAHLLgXQLg5ckDCAFsKCwtIeHHAQGAmSnEkMAyZMBkin4lc3jBEM4a7MZgo7mBGhLD/+M1/qiCqDJflIjICYbknjlEtQEl81cBDYIaUi3aDwoEQ7mABuFMjcHOMQHLMRLSDhhlFQk4+k9IhLggZBREeVLN+NNwNCAhRwjGMimGyPJlA3owyIwiKEltWjTBHNchIGpLleIS5ITNKQHVDYRiBGUQI/83X/0XUyorhm2EKAsvT1IqFgwusgglCWARV3SuGmdNchwgiRHWQagcHIqCNJ7whJ6AI20AeUJ3A0ilP/vQJ33zzDdvNDbWkO91oAwphrah7wVGG1cHMqSHkggiwDJthmAcgjIIVg5rfWc1h2AZ7AgBLpMElMpQCUyOSX/3rr/j+9/+EGoEQTgKxKnDADRROmCiWySJBeILbMCxENVhwBISCnldm4EBEeiQRk1AJs/Y5ER2q7BX03v17SQnumDeXRqXgDaSA1cSdIExQDM+UgtoArTyMIjABJUPt4S2hRHEIgbdstV5LI4OusDvDMgMNqw3sHqi0HPcMotyRNqp5ArnmRrkLuBm4kHmjDAeEDMICk2PFMwomqjI2xYSHsJIUUnxoeBO7rdQUJ2qeJk8SLfdLGtgWCouEVzFUG7NXMAXVG1YqyDdMhSDgFuTpabUEiUguUw3AiAafbhoR4EtmpJknKArgytMaBHBmIozEIQ41M1dK7ySGEvxQ8NoI1w2WFh0XlsUaFYilJ5zhpuGKwBxXeygIqxlrE6Ih1wKPgi8L799/QGcJo4M5o9oYDfcKUZJmEFdX12zrikh2xwwrQA2KOeqETRlCGaKaUFXLpjQwy5Elu4dzflb4uw8/5MXP/wEsE6ORVX8hbVRzTVcN4ic/ec4HH3zA7XaTC1sQtZUXAm98Z7I7uvjii8+5ePw4pUiwu7TXuogM3cX7j/jhX/yIJz948gf/NPjll1/yy1/+E//z299RCGrL+AxI8krQfhk5Ab+6LmrGyDA1dvfkqOvXNzy7fMonn7w8umjafabmsDuowPPnz3nz5joLiN9VCwIqJDGHweixV59/weNHF4itZSMJbGq61kg3h3N2fs7D9x7jIdTwIzw3tCxrZo560U5U8frNFdu6URWJS8RmRukto3smv07uxwJrMa9uLDJCG1ZKI87AWJBvhEOsG9WEhSVcWBtu1A615da2kboiPaRW4hSRcBGEClhg0cTDycWdJR1XgUdkrN2hRqslGapydo+fffgRL37+Ir1opzrrJHZDAiB49vySv/3gp9zcRiqLCpsrjSLrnpQ27KH8/ItXPHz4PtRbRMoTajrBw6Hk4o8vLvjhj/6SH/w/wf/xx//I629/u9fPjkxLIZfVwmLwWBhQqUqgU1NZlCrkQVRwGW9urrl89pRPXr78gw27vHzO9dVVI2cIOYVIGHkrYXVDUQaPvXrFo4tHbFV7dnkjzGT+5BjXwnK/cPHovcRLI9hME3ZeM2+HtRwQAVdXb1ivr6ldzfYC3sSnPFAUZHW+HE7WtqamZL07avrcnYgKKtR6m/VKQTR9n0JQjZj7KqD2LCLY2h4quqsKNUWA5BQPatjAY1hTpuAO2iqlGLV1EQJ8C87vnfOzjz7ixS8+5vf93y+sFeZnl5f89K//htttw1bAW5d05rAK90awjOD//BUPHtynblmInXStyUHJR3jw3sV7/PjpU548eXJArvZ/gv/Fx7/g9bfftug4NfVKa7byd8pN9ZT5I9rFSM/wSPFXrOn5Tby5vubp0x/z8uU/t1Jx5/H9v3b3/q4YGJfPLrl+c0Pde8lgEWxN0znG1jG6e+zfXnHvwQNETdmMINqlSEeZJ1Dvn93j4uJiL+6jv8TQO9L6lya9f/fta26228wodVwZboFU2gLbqbqglZLarzTbdpvBEhWxNJI1bq5uuV6/SRCHt35AyAwPo5aKZzlIHRb5SqTR1nRSnitQtC4phNlyqvlTppRUlmZEQJizhCErbYSa57J8SNkLRm3s7RV54AHymjK9cYjUyg+wqV8XRCtfdzea+IZiFIoSsFKBEm1SE26SpXZCeDh7g9P64R4SrU2ZkC1btea5TMDsqCJ5UfUuZwO1BlnZ6tkgrWWWqjOgqhJmsLWa2dowsKZK0nuKlMWokWWBoBIeiJpZF6CqhtnMdHSHW6PdZLfijjISu2HX11dEjURrTza3BtymzaLV5NZwEGQYW4ekaLdCkXSDRCkidr2n/XKGUlOKjxc6oXZN0H4ZefXrVxQ3atTsjD1lkJpIDNEwlSCRZ53rp4zViNiQtqwEStHT1YoUOaclSY1MmmjXCelNz2Q1T5L/7LPPYDEePXqYNa0ENHnd7xeKKUFiAO2HBM97DZMoS1prMmQLrqCE8uZHIgVDNAFpFEW7BnGKWQtnYJ6GOmL54+99D0JEzfT1alRzikHtda+1/4nsxk/VqQZmlXXzJMUiqFu7nrJMe8v2LhteteuAvEcrVqk1m+Owdn9h7ZYSE6WAIrkjPCVIFua8s0jhWHfhZ5YZZ6rZNxoplZp3clg2uUSKAcmwYpgqUs1iFI5Z4rr3mliq3IVqVDbwM9CGkao1rN1IR6F4xepCEFht1wAhIKjRNH0Dv6ym5lHrEQw8JSlUtapghHJ+qiK13OyZ6yyf/sunSYqyVuPavVVq3bvSgrKxcKVGU7/s1U5ovXz1W5v9ftPVet68cbSehRo65ZNfUuB/AWHLchVUWJtFAAAAAElFTkSuQmCC);
-    display: none;
-  }
-  </style>
-
-  <div id="header"></div>
-  <input id="stacking-distance-slider" max="400" min="1" step="1" type="range"/>
-  
-  <canvas id="canvas"></canvas>
-  <img id="chrome-left"/>
-  <img id="chrome-mid"/>
-  <img id="chrome-right"/>
-</template><template id="tr-ui-e-chrome-cc-layer-tree-quad-stack-view-template">
-  <style>
-  #input-event {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAMnwAADJ8BPja39wAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAyNSURBVHic7Z1PTCPXHcc/4wWWVbJN2cJSLVqiQJuGpoIGEVWReoBNIlIF5RCRSysOK9EbksUeOHLIIQcULbLEEYk7oqduD6gSRoqUEyK7dCOabOHghCiAE/JntQtesHt4fuM3z2+MZzy2x8ZfaTTjN+Px4/fh9/7Pb6xMJkND4VGk2hloyKkGkJCpASRkagAJmRpAQqYGkJCpASRkaqp2BvzKsizf3w1z38sKc+ZUaQCuAFeB57P7q4AF/Kxsj4GnLrfL+6PDYofQAskCaAJ6gJeB6+QAFOvZpwgwPwOHwCNgN5uu/+H252raJHRALMu6ggDwCtALNAf8E88QUL5AAHqSTVcNUTU4oQBiWVYzMIiA0E3lGhtp4CsEnPtACgFDGqXiYKoKxLKsCPAaMIwojlzV1tZGV1cXHR0ddHR00N7ebh93dHQAcHh4aG/JZNI+3tvb4+jo6LzsPAY+QYA5Ix9KBsoPpmpALMt6BXgTaHe7pre3l5GREUZGRujv7/fdsspkMmxtbRGPx4nH4+zs7BS6/HtgHfgvOW9xeE05bVZxIJZldQNvATf1c5FIhMHBQYaHh7l16xbd3d1lyUMikWBtbY319XU2NzdJp9Omy74B1oAEAoa8yIZTDttVDIhlWZeB94Dfm86Pjo4SjUbLBsFNiUSCWCzG6uqq2yVfAv9CNKHTlNlbKgLEsqxrwF+BX+nnhoaGuHPnDv39/WXPRyFtbW1x9+5dNjY2TKePgBXgOwQUFUyg3lJ2IJZl9QAfAK1qek9PD9PT04yMjJT1970qHo8zPz/P7u6ufuoE+CewQw6Kw2OCsGVZgViW9SdgFNGLBqC1tZWZmRnGx8eJRMI5lJZOp1lZWWFubo7j42P1VAZR4W8gWmJn5KBAAEVYWYBkm7PvIvoWtjo7O1lYWKCvry/w3yyHtre3mZqaYn9/Xz/1EPg3ot+iQslQIpTAgWRh/A0x5GFrYGCAWCxGe7trKzeUSiaTRKNRHjx4oJ/6CvgHoigLDEo5yox30WCMjY2xtLRUczAA2tvbWVpaYmxsTD91E3gbMbTTBFxCFM0WYPntMwXqIdk64x3lM9FolMnJycB+o5paXFwkFovplfcniDrlNLvJXr4vTwnMQ7KtqVE1rZ5gAExOThKNRvXkPyMGQaWXlOQpgQDJ9jM+QGlNjY2N1RUMqcnJSb34shClwnVE8aVCAY9QSi6ysj3wv6N0+gYGBlhaWqKlpaWke4dVqVSK27dv6xX9j8AyYpDyGaL4svsqxdo5CA95DwVGZ2cnsVisbmEAtLS0EIvF6OzsVJNfQIzRlVTJlwQkO1Boj021traysLBQk60pr2pvb2dhYYHWVscAxEuI1pcKJYIHKKV6yFvqh5mZmZrp9AWhvr4+ZmZm9OQ3MAMpSr6BZOcz7CH0np4exsfH/d6uZjU+Pk5Pj6PbdR34LT69xBeQbG/8TTVteno6tGNT5VQkEmF6elpPfh24TK7VFaFIKH4t+BrKTN/Q0FDoRm0rqZGREYaGhtSkXyDqVs9Fl2cg2QUJw2ranTt3vN6m7mSwwR8R68dULzm31eXHQwZRFiSMjo5WfXIpDOrv72d01DFQcQXoQ3hI0V7iB8gr9pcjEdNQwoVVNBrV69EXcanccfEST0Cyi9jsSe/BwcGKz4GHWd3d3QwOOqaAOoDnMFfuRnn1kJfV7wwPD3v8ev1Ls4mF+Ac2FVsW5C8aLxpI9ou/U9Nu3brlOcP1LoNNbuJej+R5ihcPaQJ+Iz/09vY2iiuDuru76e3tVZN+jeiTyFHggsWWFyA9KAufL3K/4zxptrkE3MClYkcDUxQQU3HVAOIug226yHlIXvNXrUe8eEiHPGhra2v0PQqov7+ftrY2NekFzEVWSXWI3Rns6uoq6ZGyepdlWXR1dalJrRTwEFVegFyVB3L5f0Pu0mzUirC1CsPoJcUCuYLyGFkDyPnSbBQhB8VUZNm99nOBZC+8qqZdhBnBUmWw0RXMQHx5iOPpprB5yMbGBp999lm1s+GQwUZXKFBUSRULxOEhYQNy//59Hj58WO1sOOQCpGAfBOoESBhVwENMm61in/cOXRt3f3+f09NTAH766SdaWlrY29sDoLm5mevXr1cze25y9QypYoH8rH44PDwsIU/B6KOPPrLzcXBwQCQS4dNPPwXgxo0bfPzxx9XMnslGJ7h7hkX2GZOaBRKLxezjxcVFLl++zMTERBVz5JTBRseGy3zXIaEDEna5eAgENIX7WP2QTCaL/NrFlcFG0kMKLvIttsh6ilg83ATh85D3338/dGNrmo3SiAXYuvLgeImX9Rj4peHHqq5r165VOwt50mx0gjkqhJT92cvgol2P7O3thSa+VBiVyWTsJnhWsv4wBrZR5QWIjfzo6IitrS0vebxQ2tra0oPdPCbfQ4ze4gXII/VDPB73k9cLIYNtDnACUJ9td8gLkF2UiqkBxF2abc6AJOboD3lQzgWi1BWnCCgA7OzskEgk/Oa5bpVIJPTwT9+RCymoe4jvIkt+8Qs1cW1tzVem61kGm8jiKk1+gIE8eV25+Ihc3CjW19c9fr3+pdkkgwCiwsiL+oDyUKhXIE8QISUA2NzcbBRbihKJBJubm2rSD4h4KLLuOMMQRUiVn9XvdrGVTqcdg3wXXbFYTI9Op3qHuqlQHCoKSNadJNH7KGNbq6urjT4Jou+hRaVLIUoTE4zA6hD5Q5+oCXfv3vVxm/qSwQY7iG6C9BAZByWv6auOevgBIr3ke5mwsbFxofsl8XhcDw34BPgaYXg1KI0p6JlDRQPRiq0zRGQ1W/Pz827RPeta6XSa+fl5Pfl/5LxC3QrCAP9P4WYQcW2/kQm7u7usrKz4vF3tamVlRY/P+CPwLTlvcANiDN/kCYjiJXLv6AXNzc2xvb3t5ZY1re3tbebm5vRk2Vc7JReExgTDqFI8JIMIMvylTDw+PmZqaupCzCgmk0mmpqb0IJkHiLpV9Ypn5MA4oJimMDwD0eqSDCLIsD3WvL+/TzQaJZVKeb11zSiVShGNRvXgmE+Az8kVU8+UrSjvgNKCz8jxmaeIIMNyEoYHDx4wOztbwq3DrdnZWT1W1imi5XmCE0YKlyLLbYLPFxDlZhLKd4ggw/aJe/fusbi46Of2odbi4iL37t1TkzLAfxAzqmc4PcPkIQVVqofIfRrREVpXL4jFYnUFRQbB1PQIMZsqYaSUraiWlaqSQvxlV3rIFd2XEIsm/gL8Qb1ubGyMDz/8sGajzKVSKWZnZ3XPANHs/xxh+BSiyDrObifkirCiiisIDogK5TIwjvY6ijoMpHwEbCJAPCMHQIWhxl4sKmxsEEEwwQmlCQHlbeBV9do6CjX+DbBNDobqHSYYRQfCLDnimKEZfJbN0CpiENLOxf7+PhMTEywvL4d6mCWdTrO8vMzExIQOI4Pod31OPowTzHWHpz80kMjWyqpB6SXSU5oRQYbfARwVSA2+ruIU0ZrSK/ATnEBky8oxqlusnQMLNa4VXRa5Sr4JEYdwDPG8tkM18kKXJ+TmgWQ/Q3qDDsNTJa4r6NjvkA/lEsJTnkdEMX3J9N0Qv/LoAFFEyRaTbFFJGPK4ZBhQntdVgDuUZkTr6w2E1zgUspeC/YjoY3yPczgkZdhk568kGFC+F7qAE4qsU2S90owIpfo6ImCkUVV6bd4TxHzGtzgnmNThEN0rHK0pSngFUtleeeQCRa1XmhHN41eBAcRDka6qwIslU4jRhq/Jn8tQh0HUitttWtb3YvRyv4MKck8MyUeCZRGmeosMGPkiIshNpR72yCCW6hwgFiTI1pE0tDS6abDQ87BIMarEW9rAGUFNNot1MHL/HCIs3k1E8K9LAWfpDDEYepDd5Lopdc5b9Qx9r14nx/EgABhQASCQ109RizAdjApH9vhvIOJNvYCIFyJjhhSjNLlm6WMEgCS5tbbqAjbTlKsKwwTCHmCtmfcY2j/khCL3auwPNXyRGqOwifzQRq2IYk7dwDl8cYwwpjoqrRrSDYYKpdCaqpLrC5Oq8S5c+xCzx+hwTJtbEBdT3aMbUBpVXWvrtsnz+op1CNArVFXlbdEu3mICowJS9+cBsR/Exx2IaQG0af1tHggI1itUVft96vahsi/kOabPxQCRe93IaW3TAVQMhFRVgdiZMIORexOgQiDkXv3DdAObPMYIgAqBkAoFECmtJ+4Gp9Ax2rEORe51w+sQ7OOK17FhAqLKBY567AbBTSY4rsfVsktogagqACfvUpd0tz/SkR4GW9QEEFVBhtAI499ec0DqXf8H8f4X10jf2YAAAAAASUVORK5CYII=);
-    display: none;
-  }
-  </style>
-  <img id="input-event"/>
-</template><template id="tr-ui-e-chrome-cc-picture-debugger-template">
-  <left-panel>
-    <picture-info>
-      <div>
-        <span class="title">Skia Picture</span>
-        <span class="size"></span>
-      </div>
-      <div>
-        <input class="filename" type="text" value="skpicture.skp"/>
-        <button class="export">Export</button>
-      </div>
-    </picture-info>
-  </left-panel>
-  <right-panel>
-    <tr-ui-e-chrome-cc-picture-ops-chart-view>
-    </tr-ui-e-chrome-cc-picture-ops-chart-view>
-    <raster-area><canvas></canvas></raster-area>
-  </right-panel>
-</template><dom-module id="tr-ui-a-stack-frame">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: row;
-      align-items: center;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-event-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex: 0 1;
-      flex-direction: column;
-    }
-    #table {
-      flex: 0 1 auto;
-      align-self: stretch;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table">
-    </tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-chrome-cc-raster-task-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    #heading {
-      flex: 0 0 auto;
-    }
-    tr-ui-b-table {
-      font-size: 12px;
-    }
-    </style>
-
-    <div id="heading">
-      Rasterization costs in
-      <tr-ui-a-analysis-link id="link"></tr-ui-a-analysis-link>
-    </div>
-    <tr-ui-b-table id="content"></tr-ui-b-table>
-  </template>
-</dom-module><style>
-.tr-ui-e-chrome-gpu-state-snapshot-view{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAEwATABMYqp3KAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB90JCQsBMCH7ZqYAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAUElEQVRYw+3WwQkAIAiF4Vc0hTO5/wiuURvYIcQOv1cRPhDlDXffSsrMsrYiQi/zU80FAACAVX3nt3lWAABA/x+ovnPyAAAA5AHyAAAA3wMOd34Xd+lsglgAAAAASUVORK5CYII=);display:flex;overflow:auto}.tr-ui-e-chrome-gpu-state-snapshot-view img{display:block;margin:16px auto 16px auto}
-</style><dom-module id="tr-ui-a-layout-tree-sub-view">
-  <template>
-    <style>
-    tr-ui-b-table {
-      font-size: 12px;
-    }
-    </style>
-    <div id="content"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-e-s-frame-data-side-panel">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      width: 600px;
-      flex-direction: column;
-    }
-    table-container {
-      display: flex;
-      overflow: auto;
-      font-size: 12px;
-    }
-    </style>
-    <div>
-      Organize by:
-      <select id="select">
-        <option value="none">None</option>
-        <option value="tree">Frame Tree</option>
-      </select>
-    </div>
-    <table-container>
-      <tr-ui-b-table id="table"></tr-ui-b-table>
-    </table-container>
-  </template>
-</dom-module><dom-module id="tr-ui-b-chart-legend-key">
-  <template>
-    <style>
-      #checkbox {
-        margin: 0;
-        visibility: hidden;
-        vertical-align: text-top;
-      }
-      #label, #link {
-        white-space: nowrap;
-        text-overflow: ellipsis;
-        overflow: hidden;
-        display: inline-block;
-      }
-    </style>
-
-    <input checked="" id="checkbox" type="checkbox"/>
-    <tr-ui-a-analysis-link id="link"></tr-ui-a-analysis-link>
-    <label id="label"></label>
-  </template>
-</dom-module><template id="chart-base-template">
-  <svg> 
-    <g id="chart-area" xmlns="http://www.w3.org/2000/svg">
-      <g class="x axis"></g>
-      <g class="y axis"></g>
-      <text id="title"></text>
-    </g>
-  </svg>
-</template><dom-module id="tr-ui-e-s-input-latency-side-panel">
-  <template>
-    <style>
-    :host {
-      flex-direction: column;
-      display: flex;
-    }
-    toolbar {
-      flex: 0 0 auto;
-      border-bottom: 1px solid black;
-      display: flex;
-    }
-    result-area {
-      flex: 1 1 auto;
-      display: block;
-      min-height: 0;
-      overflow-y: auto;
-    }
-    </style>
-
-    <toolbar id="toolbar"></toolbar>
-    <result-area id="result_area"></result-area>
-  </template>
-</dom-module><dom-module id="tr-ui-b-heading">
-  <template>
-    <style>
-    :host {
-      background-color: rgb(243, 245, 247);
-      border-right: 1px solid #8e8e8e;
-      display: block;
-      height: 100%;
-      margin: 0;
-      padding: 0 5px 0 0;
-    }
-
-    heading {
-      display: block;
-      overflow-x: hidden;
-      text-align: left;
-      text-overflow: ellipsis;
-      white-space: nowrap;
-    }
-
-    #arrow {
-      flex: 0 0 auto;
-      font-family: sans-serif;
-      margin-left: 5px;
-      margin-right: 5px;
-      width: 8px;
-    }
-
-    #link, #heading_content {
-      display: none;
-    }
-    </style>
-    <heading id="heading" on-click="onHeadingDivClicked_">
-      <span id="arrow"></span>
-      <span id="heading_content"></span>
-      <tr-ui-a-analysis-link id="link"></tr-ui-a-analysis-link>
-    </heading>
-  </template>
-</dom-module><style>
-.track-button{background-color:rgba(255,255,255,0.5);border:1px solid rgba(0,0,0,0.1);color:rgba(0,0,0,0.2);font-size:10px;height:12px;text-align:center;width:12px}.track-button:hover{background-color:rgba(255,255,255,1.0);border:1px solid rgba(0,0,0,0.5);box-shadow:0 0 .05em rgba(0,0,0,0.4);color:rgba(0,0,0,1)}.track-close-button{left:2px;position:absolute;top:2px}.track-collapse-button{left:3px;position:absolute;top:2px}
-</style><style>
-.object-instance-track{height:18px}
-</style><style>
-.tr-ui-e-system-stats-instance-track{height:500px}.tr-ui-e-system-stats-instance-track ul{list-style:none;list-style-position:outside;margin:0;overflow:hidden}
-</style><style>
-.tr-ui-e-system-stats-snapshot-view .subhead{font-size:small;padding-bottom:10px}.tr-ui-e-system-stats-snapshot-view ul{background-position:0 5px;background-repeat:no-repeat;cursor:pointer;font-family:monospace;list-style:none;margin:0;padding-left:15px}.tr-ui-e-system-stats-snapshot-view li{background-position:0 5px;background-repeat:no-repeat;cursor:pointer;list-style:none;margin:0;padding-left:15px}
-</style><dom-module id="tr-ui-e-v8-gc-objects-stats-table">
-  <template>
-    <style>
-    tr-ui-b-table {
-      flex: 0 0 auto;
-      align-self: stretch;
-      margin-top: 1em;
-      font-size: 12px;
-    }
-    .diff {
-      display: inline-block;
-      margin-top: 1em;
-      margin-left: 0.8em;
-    }
-    </style>
-    <div class="diff" id="diffOption">
-      Diff
-    </div>
-    <tr-ui-b-table id="diffTable"></tr-ui-b-table>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-multi-v8-gc-stats-thread-slice-sub-view">
-  <template>
-    <style>
-    </style>
-    <tr-ui-e-v8-gc-objects-stats-table id="gcObjectsStats">
-    </tr-ui-e-v8-gc-objects-stats-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-v8-ic-stats-table">
-  <template>
-    <style>
-    tr-ui-b-table {
-      flex: 0 0 auto;
-      align-self: stretch;
-      margin-top: 1em;
-      font-size: 12px;
-    }
-    #total {
-      margin-top: 1em;
-      margin-left: 0.8em;
-    }
-    #groupOption {
-      display: inline-block;
-      margin-top: 1em;
-      margin-left: 0.8em;
-    }
-    </style>
-    <div style="padding-right: 200px">
-      <div style="float:right;  border-style: solid; border-width: 1px; padding:20px">
-        0 uninitialized<br/>
-        . premonomorphic<br/>
-        1 monomorphic<br/>
-        ^ recompute handler<br/>
-        P polymorphic<br/>
-        N megamorphic<br/>
-        G generic
-      </div>
-    </div>
-    <div id="total">
-    </div>
-    <div id="groupOption">
-      Group Key
-    </div>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-multi-v8-ic-stats-thread-slice-sub-view">
-  <template>
-    <tr-ui-e-v8-ic-stats-table id="table">
-    </tr-ui-e-v8-ic-stats-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-v8-runtime-call-stats-table">
-  <template>
-    <style>
-    #table, #blink_rcs_table {
-      flex: 0 0 auto;
-      align-self: stretch;
-      margin-top: 1em;
-      font-size: 12px;
-    }
-
-    #v8_rcs_heading, #blink_rcs_heading {
-        padding-top: 1em;
-        font-size: 18px;
-    }
-    </style>
-    <h1 id="v8_rcs_heading"></h1>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-    <h1 id="blink_rcs_heading"></h1>
-    <tr-ui-b-table id="blink_rcs_table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-multi-v8-thread-slice-sub-view">
-  <template>
-    <tr-ui-a-multi-thread-slice-sub-view id="content"></tr-ui-a-multi-thread-slice-sub-view>
-    <tr-ui-e-v8-runtime-call-stats-table id="runtimeCallStats"></tr-ui-e-v8-runtime-call-stats-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-single-v8-gc-stats-thread-slice-sub-view">
-  <template>
-    <tr-ui-a-single-event-sub-view id="content"></tr-ui-a-single-event-sub-view>
-    <tr-ui-e-v8-gc-objects-stats-table id="gcObjectsStats"></tr-ui-e-v8-gc-objects-stats-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-single-v8-ic-stats-thread-slice-sub-view">
-  <template>
-    <tr-ui-e-v8-ic-stats-table id="table">
-    </tr-ui-e-v8-ic-stats-table>
-  </template>
-</dom-module><dom-module id="tr-ui-e-single-v8-thread-slice-sub-view">
-  <template>
-    <tr-ui-a-single-thread-slice-sub-view id="content"></tr-ui-a-single-thread-slice-sub-view>
-    <tr-ui-e-v8-runtime-call-stats-table id="runtimeCallStats"></tr-ui-e-v8-runtime-call-stats-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-alert-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    #table {
-      flex: 1 1 auto;
-      align-self: stretch;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table">
-    </tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-b-tab-view">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: column;
-      }
-
-      #selection_description, #tabs {
-        font-size: 12px;
-      }
-
-      #selection_description {
-        display: inline-block;
-        font-weight: bold;
-        margin: 9px 0px 4px 20px;
-      }
-
-      #tabs {
-        flex: 0 0 auto;
-        border-top: 1px solid #8e8e8e;
-        border-bottom: 1px solid #8e8e8e;
-        background-color: #ececec;
-        overflow: hidden;
-        margin: 0;
-      }
-
-      #tabs input[type=radio] {
-        display: none;
-      }
-
-      #tabs tab label {
-        cursor: pointer;
-        display: inline-block;
-        border: 1px solid #ececec;
-        margin: 5px 0px 0px 15px;
-        padding: 3px 10px 3px 10px;
-      }
-
-      #tabs tab label span {
-        font-weight: bold;
-      }
-
-      #tabs:focus input[type=radio]:checked ~ label {
-        outline: dotted 1px #8e8e8e;
-        outline-offset: -2px;
-      }
-
-      #tabs input[type=radio]:checked ~ label {
-        background-color: white;
-        border: 1px solid #8e8e8e;
-        border-bottom: 1px solid white;
-      }
-
-      #subView {
-        flex: 1 1 auto;
-        overflow: auto;
-      }
-    </style>
-    <div hidden="[[tabsHidden]]" id="tabs">
-      <label id="selection_description">[[label_]]</label>
-      <template is="dom-repeat" items="[[subViews_]]">
-        <tab>
-          <input checked="[[isChecked_(item)]]" id$="[[computeRadioId_(item)]]" name="tabs" on-change="onTabChanged_" type="radio"/>
-          <label for$="[[computeRadioId_(item)]]">
-            <template if="[[item.tabIcon]]" is="dom-if">
-              <span style$="[[item.tabIcon.style]]">[[item.tabIcon.text]]</span>
-            </template>
-            [[item.tabLabel]]
-          </label>
-        </tab>
-      </template>
-    </div>
-    <div id="subView"></div>
-    <content>
-    </content>
-  </template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-heap-details-breakdown-view">
-  <template>
-    <tr-ui-b-tab-view id="tabs"></tr-ui-b-tab-view>
-  </template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-heap-details-breakdown-view-tab">
-  <template>
-    <tr-v-ui-scalar-context-controller></tr-v-ui-scalar-context-controller>
-    <tr-ui-b-info-bar hidden="" id="info"></tr-ui-b-info-bar>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-heap-details-path-view">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: column;
-      }
-    </style>
-    <tr-v-ui-scalar-context-controller></tr-v-ui-scalar-context-controller>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-heap-details-pane">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: column;
-      }
-
-      #header {
-        flex: 0 0 auto;
-        display: flex;
-        flex-direction: row;
-        align-items: center;
-
-        background-color: #eee;
-        border-bottom: 1px solid #8e8e8e;
-        border-top: 1px solid white;
-      }
-
-      #label {
-        flex: 1 1 auto;
-        padding: 8px;
-        font-size: 15px;
-        font-weight: bold;
-      }
-
-      #view_mode_container {
-        display: none;
-        flex: 0 0 auto;
-        padding: 5px;
-        font-size: 15px;
-      }
-
-      #contents {
-        flex: 1 0 auto;
-        align-self: stretch;
-        font-size: 12px;
-      }
-
-      #info_text {
-        padding: 8px;
-        color: #666;
-        font-style: italic;
-        text-align: center;
-      }
-
-      #split_view {
-        display: none;  /* Hide until memory allocator dumps are set. */
-        flex: 1 0 auto;
-        align-self: stretch;
-        flex-direction: row;
-      }
-
-      #path_view {
-        width: 50%;
-      }
-
-      #breakdown_view {
-        flex: 1 1 auto;
-        width: 0;
-      }
-
-      #path_view, #breakdown_view {
-        overflow-x: auto;  /* Show scrollbar if necessary. */
-      }
-    </style>
-    <div id="header">
-      <div id="label">Heap details</div>
-      <div id="view_mode_container">
-        <span>View mode:</span>
-        
-      </div>
-    </div>
-    <div id="contents">
-      <tr-ui-b-info-bar hidden="" id="info_bar">
-      </tr-ui-b-info-bar>
-
-      <div id="info_text">No heap dump selected</div>
-
-      <div id="split_view">
-        <tr-ui-a-memory-dump-heap-details-path-view id="path_view">
-        </tr-ui-a-memory-dump-heap-details-path-view>
-        <tr-ui-b-drag-handle id="drag_handle"></tr-ui-b-drag-handle>
-        <tr-ui-a-memory-dump-heap-details-breakdown-view id="breakdown_view">
-        </tr-ui-a-memory-dump-heap-details-breakdown-view>
-      </div>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-allocator-details-pane">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: column;
-      }
-
-      #label {
-        flex: 0 0 auto;
-        padding: 8px;
-
-        background-color: #eee;
-        border-bottom: 1px solid #8e8e8e;
-        border-top: 1px solid white;
-
-        font-size:  15px;
-        font-weight: bold;
-      }
-
-      #contents {
-        flex: 1 0 auto;
-        align-self: stretch;
-        font-size: 12px;
-      }
-
-      #info_text {
-        padding: 8px;
-        color: #666;
-        font-style: italic;
-        text-align: center;
-      }
-
-      #table {
-        display: none;  /* Hide until memory allocator dumps are set. */
-        flex: 1 0 auto;
-        align-self: stretch;
-        font-size: 12px;
-      }
-    </style>
-    <div id="label">Component details</div>
-    <div id="contents">
-      <div id="info_text">No memory allocator dump selected</div>
-      <tr-ui-b-table id="table"></tr-ui-b-table>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-vm-regions-details-pane">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: column;
-      }
-
-      #label {
-        flex: 0 0 auto;
-        padding: 8px;
-
-        background-color: #eee;
-        border-bottom: 1px solid #8e8e8e;
-        border-top: 1px solid white;
-
-        font-size:  15px;
-        font-weight: bold;
-      }
-
-      #contents {
-        flex: 1 0 auto;
-        align-self: stretch;
-        font-size: 12px;
-      }
-
-      #info_text {
-        padding: 8px;
-        color: #666;
-        font-style: italic;
-        text-align: center;
-      }
-
-      #table {
-        display: none;  /* Hide until memory dumps are set. */
-        flex: 1 0 auto;
-        align-self: stretch;
-        font-size: 12px;
-      }
-    </style>
-    <div id="label">Memory maps</div>
-    <div id="contents">
-      <div id="info_text">No memory maps selected</div>
-      <tr-ui-b-table id="table"></tr-ui-b-table>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-b-color-legend">
-  <template>
-    <style>
-    :host {
-      display: inline-block;
-    }
-
-    #square {
-      font-size: 150%;  /* Make the square bigger. */
-      line-height: 0%;  /* Prevent the square from increasing legend height. */
-    }
-    </style>
-    <span id="square"></span>
-    <span id="label"></span>
-  </template>
-</dom-module><dom-module id="tr-ui-b-view-specific-brushing-state">
-  <template></template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-overview-pane">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: column;
-      }
-
-      #label {
-        flex: 0 0 auto;
-        padding: 8px;
-
-        background-color: #eee;
-        border-bottom: 1px solid #8e8e8e;
-        border-top: 1px solid white;
-
-        font-size:  15px;
-        font-weight: bold;
-      }
-
-      #label a {
-        font-weight: normal;
-        float: right;
-      }
-
-      #contents {
-        flex: 1 0 auto;
-        align-self: stretch;
-        font-size: 12px;
-        overflow: auto;
-      }
-
-      #info_text {
-        padding: 8px;
-        color: #666;
-        font-style: italic;
-        text-align: center;
-      }
-
-      #table {
-        display: none;  /* Hide until memory dumps are set. */
-        flex: 1 0 auto;
-        align-self: stretch;
-        font-size: 12px;
-      }
-    </style>
-    <tr-ui-b-view-specific-brushing-state id="state" view-id="analysis.memory_dump_overview_pane">
-    </tr-ui-b-view-specific-brushing-state>
-    <div id="label">Overview <a href="https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra">Help</a></div>
-    <div id="contents">
-      <div id="info_text">No memory memory dumps selected</div>
-      <tr-ui-b-table id="table"></tr-ui-b-table>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-memory-dump-header-pane">
-  <template>
-    <style>
-      :host {
-        display: flex;
-        flex-direction: row;
-        align-items: center;
-
-        background-color: #d0d0d0;
-        border-bottom: 1px solid #8e8e8e;
-        border-top: 1px solid white;
-      }
-
-      #label {
-        flex: 1 1 auto;
-        padding: 6px;
-        font-size: 15px;
-      }
-
-      #aggregation_mode_container {
-        display: none;
-        flex: 0 0 auto;
-        padding: 5px;
-        font-size: 15px;
-      }
-    </style>
-    
-    <div id="label"></div>
-    <div id="aggregation_mode_container">
-      <span>Metric aggregation:</span>
-      
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-stacked-pane-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-
-    #pane_container > * {
-      flex: 0 0 auto;
-    }
-    </style>
-    <div id="pane_container">
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-container-memory-dump-sub-view">
-  <template>
-    <style>
-    tr-ui-b-table {
-      font-size: 12px;
-    }
-    </style>
-    <div id="content"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-counter-sample-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    tr-ui-b-table {
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-event-summary-table">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    #table {
-      flex: 1 1 auto;
-      align-self: stretch;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table">
-    </tr-ui-b-table>
-    
-  </template>
-</dom-module><dom-module id="tr-ui-a-selection-summary-table">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    #table {
-      flex: 1 1 auto;
-      align-self: stretch;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table">
-    </tr-ui-b-table>
-    
-  </template>
-</dom-module><dom-module id="tr-ui-b-radio-picker">
-  <template>
-    <style>
-    :host([vertical]) #container {
-      flex-direction: column;
-    }
-    :host(:not[vertical]) #container {
-      flex-direction: row;
-    }
-    #container {
-      display: flex;
-    }
-    #container > div {
-      padding-left: 1em;
-      padding-bottom: 0.5em;
-    }
-    </style>
-    <div id="container"></div>
-  </template>
-</dom-module><dom-module id="tr-v-ui-breakdown-span">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    #table_container {
-      display: flex;
-      flex: 0 0 auto;
-    }
-    #table {
-      max-height: 150px;
-      overflow-y: auto;
-    }
-    </style>
-
-    <div id="empty">(empty)</div>
-    <div id="table_container">
-      <div id="container"></div>
-      <span>
-        <tr-ui-b-table id="table"></tr-ui-b-table>
-      </span>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-v-ui-collected-related-event-set-span">
-</dom-module><dom-module id="tr-v-ui-date-range-span">
-  <template>
-    <content></content>
-  </template>
-</dom-module><dom-module id="tr-v-ui-generic-set-span">
-  <template>
-    <style>
-      a {
-        display: block;
-      }
-    </style>
-
-    <tr-ui-a-generic-object-view id="generic"></tr-ui-a-generic-object-view>
-
-    <div id="links"></div>
-  </template>
-</dom-module><dom-module id="tr-v-ui-related-event-set-span">
-</dom-module><dom-module id="tr-v-ui-related-histogram-map-span">
-  <template>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-v-ui-scalar-diagnostic-span">
-  <template>
-    <tr-v-ui-scalar-span id="scalar"></tr-v-ui-scalar-span>
-  </template>
-</dom-module><dom-module id="tr-v-ui-tag-map-span">
-  <template>
-    <style>
-    #hide, #generic {
-      display: none;
-    }
-    </style>
-    <button id="show" on-click="onShow_">Show</button>
-    <button id="hide" on-click="onHide_">Hide</button>
-    <tr-ui-a-generic-object-view id="generic"></tr-ui-a-generic-object-view>
-  </template>
-</dom-module><dom-module id="tr-v-ui-unmergeable-diagnostic-set-span">
-</dom-module><dom-module id="tr-v-ui-diagnostic-map-table">
-  <template>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-v-ui-scalar-map-table">
-  <template>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-v-ui-histogram-span">
-  <template>
-    <style>
-    #container {
-      display: flex;
-      flex-direction: row;
-      justify-content: space-between;
-    }
-    #chart {
-      flex-grow: 1;
-      display: none;
-    }
-    #drag_handle, #diagnostics_tab_templates {
-      display: none;
-    }
-    #chart svg {
-      display: block;
-    }
-    #stats_container {
-      overflow-y: auto;
-    }
-    </style>
-
-    <div id="container">
-      <div id="chart"></div>
-      <div id="stats_container">
-        <tr-v-ui-scalar-map-table id="stats"></tr-v-ui-scalar-map-table>
-      </div>
-    </div>
-    <tr-ui-b-drag-handle id="drag_handle"></tr-ui-b-drag-handle>
-
-    <tr-ui-b-tab-view id="diagnostics"></tr-ui-b-tab-view>
-
-    <div id="diagnostics_tab_templates">
-      <tr-v-ui-diagnostic-map-table id="metric_diagnostics"></tr-v-ui-diagnostic-map-table>
-
-      <tr-v-ui-diagnostic-map-table id="metadata_diagnostics"></tr-v-ui-diagnostic-map-table>
-
-      <div id="sample_diagnostics_container">
-        <div id="merge_sample_diagnostics_container">
-          <input checked="" id="merge_sample_diagnostics" on-change="updateDiagnostics_" type="checkbox"/>
-          <label for="merge_sample_diagnostics">Merge Sample Diagnostics</label>
-        </div>
-        <tr-v-ui-diagnostic-map-table id="sample_diagnostics"></tr-v-ui-diagnostic-map-table>
-      </div>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-event-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      overflow: auto;
-    }
-    #content {
-      display: flex;
-      flex-direction: column;
-      flex: 0 1 auto;
-      align-self: stretch;
-    }
-    #content > * {
-      flex: 0 0 auto;
-      align-self: stretch;
-    }
-    #histogramContainer {
-      display: flex;
-    }
-
-    tr-ui-a-multi-event-summary-table {
-      border-bottom: 1px solid #aaa;
-    }
-
-    tr-ui-a-selection-summary-table  {
-      margin-top: 1.25em;
-      border-top: 1px solid #aaa;
-      background-color: #eee;
-      font-weight: bold;
-      margin-bottom: 1.25em;
-      border-bottom: 1px solid #aaa;
-    }
-    </style>
-    <div id="content">
-      <tr-ui-a-multi-event-summary-table id="eventSummaryTable">
-      </tr-ui-a-multi-event-summary-table>
-      <tr-ui-a-selection-summary-table id="selectionSummaryTable">
-      </tr-ui-a-selection-summary-table>
-      <tr-ui-b-radio-picker id="radioPicker">
-      </tr-ui-b-radio-picker>
-      <div id="histogramContainer">
-        <tr-v-ui-histogram-span id="histogramSpan">
-        </tr-v-ui-histogram-span>
-      </div>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-related-events">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    #table {
-      flex: 1 1 auto;
-      align-self: stretch;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-async-slice-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    #container {
-      display: flex;
-      flex: 1 1 auto;
-    }
-    #events {
-      margin-left: 8px;
-      flex: 0 1 200px;
-    }
-    </style>
-    <div id="container">
-      <tr-ui-a-multi-event-sub-view id="content"></tr-ui-a-multi-event-sub-view>
-      <div id="events">
-        <tr-ui-a-related-events id="relatedEvents"></tr-ui-a-related-events>
-      </div>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-cpu-slice-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    #content {
-      flex: 1 1 auto;
-    }
-    </style>
-    <tr-ui-a-multi-event-sub-view id="content"></tr-ui-a-multi-event-sub-view>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-flow-event-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    </style>
-    <tr-ui-a-multi-event-sub-view id="content"></tr-ui-a-multi-event-sub-view>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-instant-event-sub-view">
-  <template>
-    <style>
-    :host {
-      display: block;
-    }
-    </style>
-    <div id="content"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-object-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="content"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-frame-power-usage-chart">
-  <template>
-    <div id="content"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-power-sample-summary-table">
-  <template>
-    <style>
-    tr-ui-b-table {
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-power-sample-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: row;
-    }
-    #tables {
-      display: flex;
-      flex-direction: column;
-      width: 50%;
-    }
-    #chart {
-      width: 50%;
-    }
-    </style>
-    <div id="tables">
-      <tr-ui-a-power-sample-summary-table id="summaryTable">
-      </tr-ui-a-power-sample-summary-table>
-    </div>
-    <tr-ui-a-frame-power-usage-chart id="chart">
-    </tr-ui-a-frame-power-usage-chart>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-sample-sub-view">
-  <template>
-    <style>
-    :host { display: block; }
-    #control {
-      background-color: #e6e6e6;
-      background-image: -webkit-gradient(linear, 0 0, 0 100%,
-                                         from(#E5E5E5), to(#D1D1D1));
-      flex: 0 0 auto;
-      overflow-x: auto;
-    }
-    #control::-webkit-scrollbar { height: 0px; }
-    #control {
-      font-size: 12px;
-      display: flex;
-      flex-direction: row;
-      align-items: stretch;
-      margin: 1px;
-      margin-right: 2px;
-    }
-    tr-ui-b-table {
-      font-size: 12px;
-    }
-    </style>
-    <div id="control">
-      Sample View Option
-    </div>
-    <tr-ui-b-table id="table">
-    </tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-thread-slice-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    #content {
-      display: flex;
-      flex: 1 1 auto;
-    }
-    #content > tr-ui-a-related-events {
-      margin-left: 8px;
-      flex: 0 1 200px;
-    }
-    </style>
-    <div id="content"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-thread-time-slice-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    #content {
-      flex: 1 1 auto;
-    }
-    </style>
-    <tr-ui-a-multi-event-sub-view id="content"></tr-ui-a-multi-event-sub-view>
-  </template>
-</dom-module><dom-module id="tr-ui-a-user-expectation-related-samples-table">
-  <template>
-    <style>
-    #table {
-      flex: 1 1 auto;
-      align-self: stretch;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-multi-user-expectation-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex: 1 1 auto;
-    }
-    #events {
-      margin-left: 8px;
-      flex: 0 1 200px;
-    }
-    </style>
-    <tr-ui-a-multi-event-sub-view id="realView"></tr-ui-a-multi-event-sub-view>
-    <div id="events">
-      <tr-ui-a-user-expectation-related-samples-table id="relatedSamples"></tr-ui-a-user-expectation-related-samples-table>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-async-slice-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: row;
-    }
-    #events {
-      display:flex;
-      flex-direction: column;
-    }
-    </style>
-    <tr-ui-a-single-event-sub-view id="content"></tr-ui-a-single-event-sub-view>
-    <div id="events">
-      <tr-ui-a-related-events id="relatedEvents"></tr-ui-a-related-events>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-cpu-slice-sub-view">
-  <template>
-    <style>
-    table {
-      border-collapse: collapse;
-      border-width: 0;
-      margin-bottom: 25px;
-      width: 100%;
-    }
-
-    table tr > td:first-child {
-      padding-left: 2px;
-    }
-
-    table tr > td {
-      padding: 2px 4px 2px 4px;
-      vertical-align: text-top;
-      width: 150px;
-    }
-
-    table td td {
-      padding: 0 0 0 0;
-      width: auto;
-    }
-    tr {
-      vertical-align: top;
-    }
-
-    tr:nth-child(2n+0) {
-      background-color: #e2e2e2;
-    }
-    </style>
-    <table>
-      <tbody><tr>
-        <td>Running process:</td><td id="process-name"></td>
-      </tr>
-      <tr>
-        <td>Running thread:</td><td id="thread-name"></td>
-      </tr>
-      <tr>
-        <td>Start:</td>
-        <td>
-          <tr-v-ui-scalar-span id="start">
-          </tr-v-ui-scalar-span>
-        </td>
-      </tr>
-      <tr>
-        <td>Duration:</td>
-        <td>
-          <tr-v-ui-scalar-span id="duration">
-          </tr-v-ui-scalar-span>
-        </td>
-      </tr>
-      <tr>
-        <td>Active slices:</td><td id="running-thread"></td>
-      </tr>
-      <tr>
-        <td>Args:</td>
-        <td>
-          <tr-ui-a-generic-object-view id="args">
-          </tr-ui-a-generic-object-view>
-        </td>
-      </tr>
-    </tbody></table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-flow-event-sub-view">
-  <template>
-    <style>
-    :host {
-      display: block;
-    }
-    </style>
-    <tr-ui-a-single-event-sub-view id="singleEventSubView">
-    </tr-ui-a-single-event-sub-view>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-frame-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    #asv {
-      flex: 0 0 auto;
-      align-self: stretch;
-    }
-    </style>
-    <tr-ui-a-alert-sub-view id="asv">
-    </tr-ui-a-alert-sub-view>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-instant-event-sub-view">
-  <template>
-    <style>
-    :host {
-      display: block;
-    }
-    </style>
-    <div id="content"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-object-instance-sub-view">
-  <template>
-    <style>
-    :host {
-      display: block;
-    }
-
-    #snapshots > * {
-      display: block;
-    }
-
-    :host {
-      overflow: auto;
-      display: block;
-    }
-
-    * {
-      -webkit-user-select: text;
-    }
-
-    .title {
-      border-bottom: 1px solid rgb(128, 128, 128);
-      font-size: 110%;
-      font-weight: bold;
-    }
-
-    td, th {
-      font-family: monospace;
-      vertical-align: top;
-    }
-    </style>
-    <div id="content"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-object-snapshot-sub-view">
-  <template>
-    <style>
-    #args {
-      white-space: pre;
-    }
-
-    :host {
-      overflow: auto;
-      display: flex;
-    }
-
-    ::content * {
-      -webkit-user-select: text;
-    }
-
-    ::content .title {
-      border-bottom: 1px solid rgb(128, 128, 128);
-      font-size: 110%;
-      font-weight: bold;
-    }
-
-    ::content td, th {
-      font-family: monospace;
-      vertical-align: top;
-    }
-    </style>
-    <content></content>
-  </template>
-</dom-module><dom-module id="tr-ui-a-power-sample-table">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-power-sample-sub-view">
-  <template>
-    <style>
-    :host { display: block; }
-    </style>
-    <tr-ui-a-power-sample-table id="samplesTable">
-    </tr-ui-a-power-sample-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-sample-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="content"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-thread-slice-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: row;
-    }
-    #events {
-      display: flex;
-      flex-direction: column;
-    }
-
-    </style>
-    <tr-ui-a-single-event-sub-view id="content"></tr-ui-a-single-event-sub-view>
-    <div id="events">
-      <tr-ui-a-related-events id="relatedEvents">
-      </tr-ui-a-related-events>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-thread-time-slice-sub-view">
-  <template>
-    <style>
-    table {
-      border-collapse: collapse;
-      border-width: 0;
-      margin-bottom: 25px;
-      width: 100%;
-    }
-
-    table tr > td:first-child {
-      padding-left: 2px;
-    }
-
-    table tr > td {
-      padding: 2px 4px 2px 4px;
-      vertical-align: text-top;
-      width: 150px;
-    }
-
-    table td td {
-      padding: 0 0 0 0;
-      width: auto;
-    }
-    tr {
-      vertical-align: top;
-    }
-
-    tr:nth-child(2n+0) {
-      background-color: #e2e2e2;
-    }
-    </style>
-    <table>
-      <tbody><tr>
-        <td>Running process:</td><td id="process-name"></td>
-      </tr>
-      <tr>
-        <td>Running thread:</td><td id="thread-name"></td>
-      </tr>
-      <tr>
-        <td>State:</td>
-        <td><b><span id="state"></span></b></td>
-      </tr>
-      <tr>
-        <td>Start:</td>
-        <td>
-          <tr-v-ui-scalar-span id="start">
-          </tr-v-ui-scalar-span>
-        </td>
-      </tr>
-      <tr>
-        <td>Duration:</td>
-        <td>
-          <tr-v-ui-scalar-span id="duration">
-          </tr-v-ui-scalar-span>
-        </td>
-      </tr>
-
-      <tr>
-        <td>On CPU:</td><td id="on-cpu"></td>
-      </tr>
-
-      <tr>
-        <td>Running instead:</td><td id="running-instead"></td>
-      </tr>
-
-      <tr>
-        <td>Args:</td><td id="args"></td>
-      </tr>
-    </tbody></table>
-  </template>
-</dom-module><dom-module id="tr-ui-a-single-user-expectation-sub-view">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: row;
-    }
-    #events {
-      display: flex;
-      flex-direction: column;
-    }
-    </style>
-    <tr-ui-a-single-event-sub-view id="realView"></tr-ui-a-single-event-sub-view>
-    <div id="events">
-      <tr-ui-a-user-expectation-related-samples-table id="relatedSamples"></tr-ui-a-user-expectation-related-samples-table>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-a-analysis-view">
-  <template>
-    <style>
-      :host {
-        background-color: white;
-        display: flex;
-        flex-direction: column;
-        height: 275px;
-        overflow: auto;
-      }
-
-      :host(.tall-mode) {
-        height: 525px;
-      }
-    </style>
-    <content></content>
-  </template>
-</dom-module><dom-module id="tr-ui-b-dropdown">
-  <template>
-    <style>
-    button {
-      @apply(--dropdown-button);
-    }
-    button.open {
-      @apply(--dropdown-button-open);
-    }
-    dialog {
-      position: absolute;
-      margin: 0;
-      padding: 1em;
-      border: 1px solid darkgrey;
-      @apply(--dropdown-dialog);
-    }
-    </style>
-
-    <button id="button" on-tap="open">[[label]]</button>
-
-    <dialog id="dialog" on-cancel="close" on-tap="onDialogTap_">
-      <content></content>
-    </dialog>
-  </template>
-</dom-module><dom-module id="tr-ui-b-info-bar-group">
-  <template>
-    <style>
-    :host {
-      flex: 0 0 auto;
-      flex-direction: column;
-      display: flex;
-    }
-    </style>
-    <div id="messages"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-b-toolbar-button">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      background-color: #f8f8f8;
-      border: 1px solid rgba(0, 0, 0, 0.5);
-      color: rgba(0,0,0,0.8);
-      justify-content: center;
-      align-self: stretch;
-      min-width: 23px;
-    }
-
-    :host(:hover) {
-      background-color: rgba(255, 255, 255, 1.0);
-      border-color: rgba(0, 0, 0, 0.8);
-      box-shadow: 0 0 .05em rgba(0, 0, 0, 0.4);
-      color: rgba(0, 0, 0, 1);
-    }
-
-    #aligner {
-      display: flex;
-      flex: 0 0 auto;
-      align-self: center;
-    }
-    </style>
-    <div id="aligner">
-      <content></content>
-    </div>
-  </template>
-</dom-module><style>
-.drawing-container{display:inline;overflow:auto;overflow-x:hidden;position:relative}.drawing-container-canvas{display:block;pointer-events:none;position:absolute;top:0}
-</style><style>
-.letter-dot-track {
-  height: 18px;
-}
-</style><style>
-.chart-track {
-  height: 30px;
-  position: relative;
-}
-</style><style>
-.cpu-usage-track {
-  height: 90px;
-}
-</style><style>
-.power-series-track {
-  height: 90px;
-}
-</style><style>
-.spacing-track{height:4px}
-</style><style>
-.rect-track{height:18px}
-</style><style>
-.thread-track{flex-direction:column;display:flex;position:relative}
-</style><style>
-.process-track-header{flex:0 0 auto;background-image:-webkit-gradient(linear,0 0,100% 0,from(#E5E5E5),to(#D1D1D1));border-bottom:1px solid #8e8e8e;border-top:1px solid white;font-size:75%}.process-track-name:before{content:'\25B8';padding:0 5px}.process-track-base.expanded .process-track-name:before{content:'\25BE'}
-</style><style>
-.model-track {
-  flex-grow: 1;
-}
-</style><style>
-.x-axis-track {
-  height: 12px;
-}
-
-.x-axis-track.tall-mode {
-  height: 30px;
-}
-</style><dom-module id="tr-ui-timeline-track-view">
-  <template>
-    <style>
-    :host {
-      flex-direction: column;
-      display: flex;
-      position: relative;
-    }
-
-    :host ::content * {
-      -webkit-user-select: none;
-      cursor: default;
-    }
-
-    #drag_box {
-      background-color: rgba(0, 0, 255, 0.25);
-      border: 1px solid rgb(0, 0, 96);
-      font-size: 75%;
-      position: fixed;
-    }
-
-    #hint_text {
-      position: absolute;
-      bottom: 6px;
-      right: 6px;
-      font-size: 8pt;
-    }
-    </style>
-    <content></content>
-
-    <div id="drag_box"></div>
-    <div id="hint_text"></div>
-
-    <tv-ui-b-hotkey-controller id="hotkey_controller">
-    </tv-ui-b-hotkey-controller>
-  </template>
-</dom-module><dom-module id="tr-ui-find-control">
-  <template>
-    <style>
-      :host {
-        -webkit-user-select: none;
-        display: flex;
-        position: relative;
-      }
-      input {
-        -webkit-user-select: auto;
-        background-color: #f8f8f8;
-        border: 1px solid rgba(0, 0, 0, 0.5);
-        box-sizing: border-box;
-        margin: 0;
-        padding: 0;
-        width: 170px;
-      }
-      input:focus {
-        background-color: white;
-      }
-      tr-ui-b-toolbar-button {
-        border-left: none;
-        margin: 0;
-      }
-      #hitCount {
-        left: 0;
-        opacity: 0.25;
-        pointer-events: none;
-        position: absolute;
-        text-align: right;
-        top: 2px;
-        width: 167px;
-        z-index: 1;
-      }
-      #spinner {
-        visibility: hidden;
-        width: 8px;
-        height: 8px;
-        left: 154px;
-        pointer-events: none;
-        position: absolute;
-        top: 4px;
-        z-index: 1;
-
-        border: 2px solid transparent;
-        border-bottom: 2px solid rgba(0, 0, 0, 0.5);
-        border-right: 2px solid rgba(0, 0, 0, 0.5);
-        border-radius: 50%;
-      }
-      @keyframes spin { 100% { transform: rotate(360deg); } }
-    </style>
-
-    <input id="filter" on-blur="filterBlur" on-focus="filterFocus" on-input="filterTextChanged" on-keydown="filterKeyDown" on-mouseup="filterMouseUp" type="text"/>
-    <div id="spinner"></div>
-    <tr-ui-b-toolbar-button on-click="findPrevious">
-      ←
-    </tr-ui-b-toolbar-button>
-    <tr-ui-b-toolbar-button on-click="findNext">
-      →
-    </tr-ui-b-toolbar-button>
-    <div id="hitCount">0 of 0</div>
-  </template>
-</dom-module><dom-module id="tr-ui-scripting-control">
-  <template>
-    <style>
-      :host {
-        flex: 1 1 auto;
-      }
-      .root {
-        font-family: monospace;
-        cursor: text;
-
-        padding: 2px;
-        margin: 2px;
-        border: 1px solid rgba(0, 0, 0, 0.5);
-        background: white;
-
-        height: 100px;
-        overflow-y: auto;
-
-        transition-property: opacity, height, padding, margin;
-        transition-duration: .2s;
-        transition-timing-function: ease-out;
-      }
-      .hidden {
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding-top: 0px;
-        padding-bottom: 0px;
-        height: 0px;
-        opacity: 0;
-      }
-      .focused {
-        outline: auto 5px -webkit-focus-ring-color;
-      }
-      #history {
-        -webkit-user-select: text;
-        color: #777;
-      }
-      #promptContainer {
-        display: flex;
-      }
-      #promptMark {
-        width: 1em;
-        color: #468;
-      }
-      #prompt {
-        flex: 1;
-        width: 100%;
-        border: none !important;
-        background-color: inherit !important;
-        font: inherit !important;
-        text-overflow: clip !important;
-        text-decoration: none !important;
-      }
-      #prompt:focus {
-        outline: none;
-      }
-    </style>
-
-    <div class="root hidden" id="root" on-focus="onConsoleFocus" tabindex="0">
-      <div id="history"></div>
-      <div id="promptContainer">
-        <span id="promptMark">&gt;</span>
-        <input id="prompt" on-blur="onConsoleBlur" on-keydown="promptKeyDown" on-keypress="promptKeyPress" type="text"/>
-       </div>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-side-panel-container">
-  <template>
-    <style>
-    :host {
-      align-items: stretch;
-      display: flex;
-      background-color: white;
-    }
-
-    :host([expanded]) > #side_panel_drag_handle,
-    :host([expanded]) > active-panel-container {
-      flex: 1 1 auto;
-      border-left: 1px solid black;
-      display: flex;
-    }
-
-    :host(:not([expanded])) > #side_panel_drag_handle,
-    :host(:not([expanded])) > active-panel-container {
-      display: none;
-    }
-
-    active-panel-container {
-      display: flex;
-    }
-
-    tab-strip {
-      flex: 0 0 auto;
-      flex-direction: column;
-      -webkit-user-select: none;
-      background-color: rgb(236, 236, 236);
-      border-left: 1px solid black;
-      cursor: default;
-      display: flex;
-      min-width: 18px; /* workaround for flexbox and writing-mode mixing bug */
-      padding: 10px 0 10px 0;
-      font-size: 12px;
-    }
-
-    tab-strip > tab-strip-label {
-      flex-shrink: 0;
-      -webkit-writing-mode: vertical-rl;
-      white-space: nowrap;
-      display: inline;
-      margin-right: 1px;
-      min-height: 20px;
-      padding: 15px 3px 15px 1px;
-    }
-
-    tab-strip >
-        tab-strip-label:not([enabled]) {
-      color: rgb(128, 128, 128);
-    }
-
-    tab-strip > tab-strip-label[selected] {
-      background-color: white;
-      border: 1px solid rgb(163, 163, 163);
-      border-left: none;
-      padding: 14px 2px 14px 1px;
-    }
-
-    #active_panel_container {
-      overflow: auto;
-    }
-    </style>
-
-    <tr-ui-b-drag-handle id="side_panel_drag_handle"></tr-ui-b-drag-handle>
-    <active-panel-container id="active_panel_container">
-    </active-panel-container>
-    <tab-strip id="tab_strip"></tab-strip>
-  </template>
-</dom-module><dom-module id="tr-ui-timeline-view-help-overlay">
-  <template>
-    <style>
-    :host {
-      flex: 1 1 auto;
-      flex-direction: row;
-      display: flex;
-      width: 700px;
-    }
-    .column {
-      width: 50%;
-    }
-    h2 {
-      font-size: 1.2em;
-      margin: 0;
-      margin-top: 5px;
-      text-align: center;
-    }
-    h3 {
-      margin: 0;
-      margin-left: 126px;
-      margin-top: 10px;
-    }
-    .pair {
-      flex: 1 1 auto;
-      flex-direction: row;
-      display: flex;
-    }
-    .command {
-      font-family: monospace;
-      margin-right: 5px;
-      text-align: right;
-      width: 150px;
-    }
-    .action {
-      font-size: 0.9em;
-      text-align: left;
-      width: 200px;
-    }
-    tr-ui-b-mouse-mode-icon {
-      border: 1px solid #888;
-      border-radius: 3px;
-      box-shadow: inset 0 0 2px rgba(0,0,0,0.3);
-      display: inline-block;
-      margin-right: 1px;
-      position: relative;
-      top: 4px;
-    }
-    .mouse-mode-icon.pan-mode {
-      background-position: -1px -11px;
-    }
-    .mouse-mode-icon.select-mode {
-      background-position: -1px -41px;
-    }
-    .mouse-mode-icon.zoom-mode {
-      background-position: -1px -71px;
-    }
-    .mouse-mode-icon.timing-mode {
-      background-position: -1px -101px;
-    }
-    </style>
-    <div class="column left">
-      <h2>Navigation</h2>
-      <div class="pair">
-        <div class="command">w/s</div>
-        <div class="action">Zoom in/out (+shift: faster)</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">a/d</div>
-        <div class="action">Pan left/right (+shift: faster)</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">→/shift-TAB</div>
-        <div class="action">Select previous event</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">←/TAB</div>
-        <div class="action">Select next event</div>
-      </div>
-
-      <h2>Mouse Controls</h2>
-      <div class="pair">
-        <div class="command">click</div>
-        <div class="action">Select event</div>
-      </div>
-      <div class="pair">
-        <div class="command">alt-mousewheel</div>
-        <div class="action">Zoom in/out</div>
-      </div>
-
-      <h3>
-        <tr-ui-b-mouse-mode-icon mode-name="SELECTION"></tr-ui-b-mouse-mode-icon>
-        Select mode
-      </h3>
-      <div class="pair">
-        <div class="command">drag</div>
-        <div class="action">Box select</div>
-      </div>
-
-      <div class="pair">
-        <div class="command"><span class="mod"></span>-click/drag</div>
-        <div class="action">Add events to the current selection</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">double click</div>
-        <div class="action">Select all events with same title</div>
-      </div>
-
-      <h3>
-        <tr-ui-b-mouse-mode-icon mode-name="PANSCAN"></tr-ui-b-mouse-mode-icon>
-        Pan mode
-      </h3>
-      <div class="pair">
-        <div class="command">drag</div>
-        <div class="action">Pan the view</div>
-      </div>
-
-      <h3>
-        <tr-ui-b-mouse-mode-icon mode-name="ZOOM"></tr-ui-b-mouse-mode-icon>
-        Zoom mode
-      </h3>
-      <div class="pair">
-        <div class="command">drag</div>
-        <div class="action">Zoom in/out by dragging up/down</div>
-      </div>
-
-      <h3>
-        <tr-ui-b-mouse-mode-icon mode-name="TIMING"></tr-ui-b-mouse-mode-icon>
-        Timing mode
-      </h3>
-      <div class="pair">
-        <div class="command">drag</div>
-        <div class="action">Create or move markers</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">double click</div>
-        <div class="action">Set marker range to slice</div>
-      </div>
-    </div>
-
-    <div class="column right">
-      <h2>General</h2>
-      <div class="pair">
-        <div class="command">1-4</div>
-        <div class="action">Switch mouse mode</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">shift</div>
-        <div class="action">Hold for temporary select</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">space</div>
-        <div class="action">Hold for temporary pan</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">/</div>
-        <div class="action">Search</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">enter</div>
-        <div class="action">Step through search results</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">f</div>
-        <div class="action">Zoom into selection</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">z/0</div>
-        <div class="action">Reset zoom and pan</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">g/G</div>
-        <div class="action">Toggle 60hz grid</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">v</div>
-        <div class="action">Highlight VSync</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">h</div>
-        <div class="action">Toggle low/high details</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">m</div>
-        <div class="action">Mark current selection</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">p</div>
-        <div class="action">Select power samples over current selection interval</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">`</div>
-        <div class="action">Show or hide the scripting console</div>
-      </div>
-
-      <div class="pair">
-        <div class="command">?</div>
-        <div class="action">Show help</div>
-      </div>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-timeline-view-metadata-overlay">
-  <template>
-    <style>
-    :host {
-      width: 700px;
-
-      overflow: auto;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-timeline-view">
-  <template>
-    <style>
-    :host {
-      flex-direction: column;
-      cursor: default;
-      display: flex;
-      font-family: sans-serif;
-      padding: 0;
-    }
-
-    #control {
-      background-color: #e6e6e6;
-      background-image: -webkit-gradient(linear, 0 0, 0 100%,
-          from(#E5E5E5), to(#D1D1D1));
-      flex: 0 0 auto;
-      overflow-x: auto;
-    }
-
-    #control::-webkit-scrollbar { height: 0px; }
-
-    #control > #bar {
-      font-size: 12px;
-      display: flex;
-      flex-direction: row;
-      margin: 1px;
-    }
-
-    #control > #bar > #title {
-      display: flex;
-      align-items: center;
-      padding-left: 8px;
-      padding-right: 8px;
-      flex: 1 1 auto;
-    }
-
-    #control > #bar > #left_controls,
-    #control > #bar > #right_controls {
-      display: flex;
-      flex-direction: row;
-      align-items: stretch;
-    }
-
-    #control > #bar > #left_controls > * { margin-right: 2px; }
-    #control > #bar > #right_controls > * { margin-left: 2px; }
-    #control > #collapsing_controls { display: flex; }
-
-    middle-container {
-      flex: 1 1 auto;
-      flex-direction: row;
-      border-bottom: 1px solid #8e8e8e;
-      display: flex;
-      min-height: 0;
-    }
-
-    middle-container ::content track-view-container {
-      flex: 1 1 auto;
-      display: flex;
-      min-height: 0;
-      min-width: 0;
-      overflow-x: hidden;
-    }
-
-    middle-container ::content track-view-container > * { flex: 1 1 auto; }
-    middle-container > x-timeline-view-side-panel-container { flex: 0 0 auto; }
-    tr-ui-b-drag-handle { flex: 0 0 auto; }
-    tr-ui-a-analysis-view { flex: 0 0 auto; }
-
-    #view_options_dropdown {
-      --dropdown-button: {
-        -webkit-appearance: none;
-        align-items: normal;
-        background-color: rgb(248, 248, 248);
-        border: 1px solid rgba(0, 0, 0, 0.5);
-        box-sizing: content-box;
-        color: rgba(0, 0, 0, 0.8);
-        font-family: sans-serif;
-        font-size: 12px;
-        padding: 2px 5px;
-      }
-    }
-    </style>
-
-    <tv-ui-b-hotkey-controller id="hkc"></tv-ui-b-hotkey-controller>
-    <div id="control">
-      <div id="bar">
-        <div id="left_controls"></div>
-        <div id="title">^_^</div>
-        <div id="right_controls">
-          <tr-ui-b-toolbar-button id="view_metadata_button">
-            M
-          </tr-ui-b-toolbar-button>
-          <tr-ui-b-dropdown id="view_options_dropdown" label="View Options"></tr-ui-b-dropdown>
-          <tr-ui-find-control id="view_find_control"></tr-ui-find-control>
-          <tr-ui-b-toolbar-button id="view_console_button">
-            »
-          </tr-ui-b-toolbar-button>
-          <tr-ui-b-toolbar-button id="view_help_button">
-            ?
-          </tr-ui-b-toolbar-button>
-        </div>
-      </div>
-      <div id="collapsing_controls"></div>
-      <tr-ui-b-info-bar-group id="import-warnings">
-      </tr-ui-b-info-bar-group>
-    </div>
-    <middle-container>
-      <content></content>
-
-      <tr-ui-side-panel-container id="side_panel_container">
-      </tr-ui-side-panel-container>
-    </middle-container>
-    <tr-ui-b-drag-handle id="drag_handle"></tr-ui-b-drag-handle>
-    <tr-ui-a-analysis-view id="analysis"></tr-ui-a-analysis-view>
-
-    <tr-v-ui-preferred-display-unit id="display_unit">
-    </tr-v-ui-preferred-display-unit>
-  </template>
-</dom-module><dom-module id="tr-ui-b-grouping-table">
-  <template>
-    <style>
-    :host {
-      display: flex;
-    }
-    #table {
-      flex: 1 1 auto;
-      font-size: 12px;
-    }
-    </style>
-    <tr-ui-b-table id="table"></tr-ui-b-table>
-  </template>
-</dom-module><dom-module id="tr-ui-b-grouping-table-groupby-picker">
-  <template>
-    <style>
-    #container {
-      display: flex;
-    }
-    #container *:not(:first-child) {
-      padding-left: 3px;
-      border-left: 1px solid black;
-      margin-left: 3px;
-    }
-    </style>
-
-    <div id="container"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-b-grouping-table-groupby-picker-group">
-  <template>
-    <style>
-    :host {
-      white-space: nowrap;
-    }
-    #left, #right {
-      user-select: none;
-      cursor: pointer;
-    }
-    </style>
-
-    <span id="left" on-click="moveLeft_">◀</span>
-    <input id="enabled" on-change="onEnableChanged_" type="checkbox"/>
-    <label for="enabled" id="label"></label>
-    <span id="right" on-click="moveRight_">▶</span>
-  </template>
-</dom-module><dom-module id="tr-ui-sp-file-size-stats-side-panel">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    toolbar {
-      align-items: center;
-      background-color: rgb(236, 236, 236);
-      border-bottom: 1px solid #8e8e8e;
-      display: flex;
-      flex-direction: row;
-      flex-direction: row;
-      flex: 0 0 auto;
-      font-size: 12px;
-      padding: 0 10px 0 10px;
-    }
-    table-container {
-      display: flex;
-      min-height: 0px;
-      overflow-y: auto;
-    }
-    </style>
-
-    <toolbar>
-      <span><b>Group by:</b></span>
-      <tr-ui-b-grouping-table-groupby-picker id="picker">
-      </tr-ui-b-grouping-table-groupby-picker>
-    </toolbar>
-    <table-container>
-      <tr-ui-b-grouping-table id="table"></tr-ui-b-grouping-table>
-    </table-container>
-  </template>
-</dom-module><dom-module id="tr-v-ui-histogram-set-controls-export">
-  <template>
-    <style>
-    :host {
-      display: grid;
-      grid-gap: 1em;
-      grid-template-rows: auto auto;
-      grid-template-columns: auto auto;
-    }
-    button {
-      -webkit-appearance: none;
-      border: 0;
-      font-size: initial;
-      padding: 5px;
-    }
-    </style>
-
-    <button on-tap="exportRawCsv_">raw CSV</button>
-    <button on-tap="exportRawJson_">raw JSON</button>
-    <button on-tap="exportMergedCsv_">merged CSV</button>
-    <button on-tap="exportMergedJson_">merged JSON</button>
-  </template>
-</dom-module><dom-module id="tr-v-ui-histogram-set-controls">
-  <template>
-    <style>
-    :host {
-      display: block;
-    }
-
-    #help, #feedback {
-      display: none;
-      margin-left: 20px;
-    }
-
-    #search_container {
-      display: inline-flex;
-      margin-right: 20px;
-      padding-bottom: 1px;
-      border-bottom: 1px solid darkgrey;
-    }
-
-    #search {
-      border: 0;
-      max-width: 20em;
-      outline: none;
-    }
-
-    #clear_search {
-      visibility: hidden;
-      height: 1em;
-      stroke: black;
-      stroke-width: 16;
-    }
-
-    #controls {
-      white-space: nowrap;
-    }
-
-    #show_overview, #hide_overview {
-      height: 1em;
-      margin-right: 20px;
-    }
-
-    #show_overview {
-      stroke: blue;
-      stroke-width: 16;
-    }
-
-    #show_overview:hover {
-      background: blue;
-      stroke: white;
-    }
-
-    #hide_overview {
-      display: none;
-      stroke-width: 18;
-      stroke: black;
-    }
-
-    #hide_overview:hover {
-      background: black;
-      stroke: white;
-    }
-
-    #reference_display_label {
-      display: none;
-      margin-right: 20px;
-    }
-
-    #alpha, #alpha_slider_container {
-      display: none;
-    }
-
-    #alpha {
-      margin-right: 20px;
-    }
-
-    #alpha_slider_container {
-      background: white;
-      border: 1px solid black;
-      flex-direction: column;
-      padding: 0.5em;
-      position: absolute;
-      z-index: 10; /* scalar-span uses z-index :-( */
-    }
-
-    #alpha_slider {
-      -webkit-appearance: slider-vertical;
-      align-self: center;
-      height: 200px;
-      width: 30px;
-    }
-
-    #statistic {
-      display: none;
-      margin-right: 20px;
-    }
-
-    #export {
-      margin-right: 20px;
-    }
-    </style>
-
-    <div id="controls">
-      <span id="search_container">
-        <input id="search" placeholder="Find Histogram name" value="{{searchQuery::keyup}}"/>
-        <svg id="clear_search" on-tap="clearSearch_" viewBox="0 0 128 128">
-          <g>
-          <title>Clear search</title>
-          <line x1="28" x2="100" y1="28" y2="100"></line>
-          <line x1="28" x2="100" y1="100" y2="28"></line>
-          </g>
-        </svg>
-      </span>
-
-      <svg id="show_overview" on-tap="toggleOverviewLineCharts_" viewBox="0 0 128 128">
-        <g>
-        <title>Show overview charts</title>
-        <line x1="19" x2="49" y1="109" y2="49"></line>
-        <line x1="49" x2="79" y1="49" y2="79"></line>
-        <line x1="79" x2="109" y1="79" y2="19"></line>
-        </g>
-      </svg>
-      <svg id="hide_overview" on-tap="toggleOverviewLineCharts_" viewBox="0 0 128 128">
-        <g>
-        <title>Hide overview charts</title>
-        <line x1="28" x2="100" y1="28" y2="100"></line>
-        <line x1="28" x2="100" y1="100" y2="28"></line>
-        </g>
-      </svg>
-
-      <select id="reference_display_label" value="{{referenceDisplayLabel::change}}">
-        <option value="">Select a reference column</option>
-      </select>
-
-      <button id="alpha" on-tap="openAlphaSlider_">α=[[alphaString]]</button>
-      <div id="alpha_slider_container">
-        <input id="alpha_slider" max="18" min="0" on-blur="closeAlphaSlider_" on-input="updateAlpha_" type="range" value="{{alphaIndex::change}}"/>
-      </div>
-
-      <select id="statistic" value="{{displayStatisticName::change}}">
-      </select>
-
-      <tr-ui-b-dropdown label="Export">
-        <tr-v-ui-histogram-set-controls-export>
-        </tr-v-ui-histogram-set-controls-export>
-      </tr-ui-b-dropdown>
-
-      <input checked="{{showAll::change}}" id="show_all" title="When unchecked, less important histograms are hidden." type="checkbox"/>
-      <label for="show_all" title="When unchecked, less important histograms are hidden.">Show all</label>
-
-      <a id="help">Help</a>
-      <a id="feedback">Feedback</a>
-    </div>
-
-    <tr-ui-b-grouping-table-groupby-picker id="picker">
-    </tr-ui-b-grouping-table-groupby-picker>
-  </template>
-</dom-module><dom-module id="tr-v-ui-histogram-set-table-cell">
-  <template>
-    <style>
-    #histogram_container {
-      display: flex;
-      flex-direction: row;
-    }
-
-    #missing, #empty, #unmergeable, #scalar {
-      flex-grow: 1;
-    }
-
-    #open_histogram, #close_histogram, #open_histogram svg, #close_histogram svg {
-      height: 1em;
-    }
-
-    #open_histogram svg {
-      margin-left: 4px;
-      stroke-width: 0;
-      stroke: blue;
-      fill: blue;
-    }
-    :host(:hover) #open_histogram svg {
-      background: blue;
-      stroke: white;
-      fill: white;
-    }
-
-    #scalar {
-      flex-grow: 1;
-      white-space: nowrap;
-    }
-
-    #histogram {
-      flex-grow: 1;
-    }
-
-    #close_histogram svg line {
-      stroke-width: 18;
-      stroke: black;
-    }
-    #close_histogram:hover svg {
-      background: black;
-    }
-    #close_histogram:hover svg line {
-      stroke: white;
-    }
-
-    #overview_container {
-      display: none;
-    }
-    </style>
-
-    <div id="histogram_container">
-      <span id="missing">(missing)</span>
-      <span id="empty">(empty)</span>
-      <span id="unmergeable">(unmergeable)</span>
-
-      <tr-v-ui-scalar-span id="scalar" on-click="openHistogram_"></tr-v-ui-scalar-span>
-
-      <span id="open_histogram" on-click="openHistogram_">
-        <svg viewBox="0 0 128 128">
-          <rect height="16" width="32" x="16" y="24"></rect>
-          <rect height="16" width="96" x="16" y="56"></rect>
-          <rect height="16" width="64" x="16" y="88"></rect>
-        </svg>
-      </span>
-
-      <span id="histogram"></span>
-
-      <span id="close_histogram" on-click="closeHistogram_">
-        <svg viewBox="0 0 128 128">
-          <line x1="28" x2="100" y1="28" y2="100"></line>
-          <line x1="28" x2="100" y1="100" y2="28"></line>
-        </svg>
-      </span>
-    </div>
-
-    <div id="overview_container">
-    </div>
-  </template>
-</dom-module><dom-module id="tr-v-ui-histogram-set-table-name-cell">
-  <template>
-    <style>
-    #name_container {
-      display: flex;
-    }
-
-    #name {
-      overflow: hidden;
-      white-space: nowrap;
-      text-overflow: ellipsis;
-    }
-
-    #show_overview, #hide_overview, #show_overview svg, #hide_overview svg {
-      height: 1em;
-      margin-left: 5px;
-    }
-
-    #show_overview svg {
-      stroke: blue;
-      stroke-width: 16;
-    }
-
-    #show_overview:hover svg {
-      background: blue;
-      stroke: white;
-    }
-
-    #hide_overview {
-      display: none;
-    }
-
-    #hide_overview svg {
-      stroke-width: 18;
-      stroke: black;
-    }
-
-    #hide_overview:hover svg {
-      background: black;
-      stroke: white;
-    }
-
-    #open_histograms, #close_histograms, #open_histograms svg, #close_histograms svg {
-      height: 1em;
-    }
-
-    #close_histograms {
-      display: none;
-    }
-
-    #open_histograms svg {
-      margin-left: 4px;
-      stroke-width: 0;
-      stroke: blue;
-      fill: blue;
-    }
-    #open_histograms:hover svg {
-      background: blue;
-      stroke: white;
-      fill: white;
-    }
-
-    #close_histograms line {
-      stroke-width: 18;
-      stroke: black;
-    }
-    #close_histograms:hover {
-      background: black;
-    }
-    #close_histograms:hover line {
-      stroke: white;
-    }
-
-    #overview_container {
-      display: none;
-    }
-    </style>
-
-    <div id="name_container">
-      <span id="name"></span>
-
-      <span id="show_overview" on-click="showOverview_">
-        <svg viewBox="0 0 128 128">
-          <line x1="19" x2="49" y1="109" y2="49"></line>
-          <line x1="49" x2="79" y1="49" y2="79"></line>
-          <line x1="79" x2="109" y1="79" y2="19"></line>
-        </svg>
-      </span>
-
-      <span id="hide_overview" on-click="hideOverview_">
-        <svg viewBox="0 0 128 128">
-          <line x1="28" x2="100" y1="28" y2="100"></line>
-          <line x1="28" x2="100" y1="100" y2="28"></line>
-        </svg>
-      </span>
-
-      <span id="open_histograms" on-click="openHistograms_">
-        <svg viewBox="0 0 128 128">
-          <rect height="16" width="32" x="16" y="24"></rect>
-          <rect height="16" width="96" x="16" y="56"></rect>
-          <rect height="16" width="64" x="16" y="88"></rect>
-        </svg>
-      </span>
-
-      <span id="close_histograms" on-click="closeHistograms_">
-        <svg viewBox="0 0 128 128">
-          <line x1="28" x2="100" y1="28" y2="100"></line>
-          <line x1="28" x2="100" y1="100" y2="28"></line>
-        </svg>
-      </span>
-    </div>
-
-    <div id="overview_container">
-    </div>
-  </template>
-</dom-module><dom-module id="tr-v-ui-histogram-set-table">
-  <template>
-    <style>
-    :host {
-      min-height: 0px;
-      overflow: auto;
-    }
-    #table {
-      margin-top: 5px;
-    }
-    </style>
-
-    <tr-ui-b-table id="table">
-  </tr-ui-b-table></template>
-</dom-module><dom-module id="tr-v-ui-histogram-set-view">
-  <template>
-    <style>
-    :host {
-      font-family: sans-serif;
-    }
-
-    #zero {
-      color: red;
-      /* histogram-set-table is used by both metrics-side-panel and results.html.
-       * This font-size rule has no effect in results.html, but improves
-       * legibility in the metrics-side-panel, which sets font-size in order to
-       * make this table denser.
-       */
-      font-size: initial;
-    }
-
-    #container {
-      display: none;
-    }
-    </style>
-
-    <div id="zero">zero Histograms</div>
-
-    <div id="container">
-      <tr-v-ui-histogram-set-controls id="controls">
-      </tr-v-ui-histogram-set-controls>
-
-      <tr-v-ui-histogram-set-table id="table"></tr-v-ui-histogram-set-table>
-    </div>
-  </template>
-</dom-module><dom-module id="tr-ui-sp-metrics-side-panel">
-  <template>
-    <style>
-    :host {
-      display: flex;
-      flex-direction: column;
-    }
-    div#error {
-      color: red;
-    }
-    #results {
-      font-size: 12px;
-    }
-    </style>
-
-    <top-left-controls id="top_left_controls"></top-left-controls>
-
-    <tr-v-ui-histogram-set-view id="results"></tr-v-ui-histogram-set-view>
-
-    <div id="error"></div>
-  </template>
-</dom-module><dom-module id="tr-ui-e-s-alerts-side-panel">
-  <template>
-    <style>
-    :host {
-      display: block;
-      width: 250px;
-    }
-    #content {
-      flex-direction: column;
-      display: flex;
-    }
-    tr-ui-b-table {
-      font-size: 12px;
-    }
-    </style>
-
-    <div id="content">
-      <toolbar id="toolbar"></toolbar>
-      <result-area id="result_area"></result-area>
-    </div>
-  </template>
-</dom-module><script>
-
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/* WARNING: This file is auto generated.
- *
- * Do not edit directly.
- */
-
-'use strict';if(window.Polymer){throw new Error('Cannot proceed. Polymer already present.');}
-window.Polymer={};window.Polymer.dom='shadow';(function(){function resolve(){document.body.removeAttribute('unresolved');}
-if(window.WebComponents){addEventListener('WebComponentsReady',resolve);}else{if(document.readyState==='interactive'||document.readyState==='complete'){resolve();}else{addEventListener('DOMContentLoaded',resolve);}}}());window.Polymer={Settings:function(){var settings=window.Polymer||{};if(!settings.noUrlSettings){var parts=location.search.slice(1).split('&');for(var i=0,o;i<parts.length&&(o=parts[i]);i++){o=o.split('=');o[0]&&(settings[o[0]]=o[1]||true);}}
-settings.wantShadow=settings.dom==='shadow';settings.hasShadow=Boolean(Element.prototype.createShadowRoot);settings.nativeShadow=settings.hasShadow&&!window.ShadowDOMPolyfill;settings.useShadow=settings.wantShadow&&settings.hasShadow;settings.hasNativeImports=Boolean('import'in document.createElement('link'));settings.useNativeImports=settings.hasNativeImports;settings.useNativeCustomElements=!window.CustomElements||window.CustomElements.useNative;settings.useNativeShadow=settings.useShadow&&settings.nativeShadow;settings.usePolyfillProto=!settings.useNativeCustomElements&&!Object.__proto__;settings.hasNativeCSSProperties=!navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)&&window.CSS&&CSS.supports&&CSS.supports('box-shadow','0 0 0 var(--foo)');settings.useNativeCSSProperties=settings.hasNativeCSSProperties&&settings.lazyRegister&&settings.useNativeCSSProperties;settings.isIE=navigator.userAgent.match('Trident');settings.passiveTouchGestures=settings.passiveTouchGestures||false;return settings;}()};(function(){var userPolymer=window.Polymer;window.Polymer=function(prototype){if(typeof prototype==='function'){prototype=prototype.prototype;}
-if(!prototype){prototype={};}
-prototype=desugar(prototype);var customCtor=prototype===prototype.constructor.prototype?prototype.constructor:null;var options={prototype:prototype};if(prototype.extends){options.extends=prototype.extends;}
-Polymer.telemetry._registrate(prototype);var ctor=document.registerElement(prototype.is,options);return customCtor||ctor;};var desugar=function(prototype){var base=Polymer.Base;if(prototype.extends){base=Polymer.Base._getExtendedPrototype(prototype.extends);}
-prototype=Polymer.Base.chainObject(prototype,base);prototype.registerCallback();return prototype;};if(userPolymer){for(var i in userPolymer){Polymer[i]=userPolymer[i];}}
-Polymer.Class=function(prototype){if(!prototype.factoryImpl){prototype.factoryImpl=function(){};}
-return desugar(prototype).constructor;};}());Polymer.telemetry={registrations:[],_regLog:function(prototype){console.log('['+prototype.is+']: registered');},_registrate:function(prototype){this.registrations.push(prototype);Polymer.log&&this._regLog(prototype);},dumpRegistrations:function(){this.registrations.forEach(this._regLog);}};Object.defineProperty(window,'currentImport',{enumerable:true,configurable:true,get:function(){return(document._currentScript||document.currentScript||{}).ownerDocument;}});Polymer.RenderStatus={_ready:false,_callbacks:[],whenReady:function(cb){if(this._ready){cb();}else{this._callbacks.push(cb);}},_makeReady:function(){this._ready=true;for(var i=0;i<this._callbacks.length;i++){this._callbacks[i]();}
-this._callbacks=[];},_catchFirstRender:function(){requestAnimationFrame(function(){Polymer.RenderStatus._makeReady();});},_afterNextRenderQueue:[],_waitingNextRender:false,afterNextRender:function(element,fn,args){this._watchNextRender();this._afterNextRenderQueue.push([element,fn,args]);},hasRendered:function(){return this._ready;},_watchNextRender:function(){if(!this._waitingNextRender){this._waitingNextRender=true;var fn=function(){Polymer.RenderStatus._flushNextRender();};if(!this._ready){this.whenReady(fn);}else{requestAnimationFrame(fn);}}},_flushNextRender:function(){var self=this;setTimeout(function(){self._flushRenderCallbacks(self._afterNextRenderQueue);self._afterNextRenderQueue=[];self._waitingNextRender=false;});},_flushRenderCallbacks:function(callbacks){for(var i=0,h;i<callbacks.length;i++){h=callbacks[i];h[1].apply(h[0],h[2]||Polymer.nar);}}};if(window.HTMLImports){HTMLImports.whenReady(function(){Polymer.RenderStatus._catchFirstRender();});}else{Polymer.RenderStatus._catchFirstRender();}
-Polymer.ImportStatus=Polymer.RenderStatus;Polymer.ImportStatus.whenLoaded=Polymer.ImportStatus.whenReady;(function(){'use strict';var settings=Polymer.Settings;Polymer.Base={__isPolymerInstance__:true,_addFeature:function(feature){this.mixin(this,feature);},registerCallback:function(){if(settings.lazyRegister==='max'){if(this.beforeRegister){this.beforeRegister();}}else{this._desugarBehaviors();for(var i=0,b;i<this.behaviors.length;i++){b=this.behaviors[i];if(b.beforeRegister){b.beforeRegister.call(this);}}
-if(this.beforeRegister){this.beforeRegister();}}
-this._registerFeatures();if(!settings.lazyRegister){this.ensureRegisterFinished();}},createdCallback:function(){if(settings.disableUpgradeEnabled){if(this.hasAttribute('disable-upgrade')){this._propertySetter=disableUpgradePropertySetter;this._configValue=null;this.__data__={};return;}else{this.__hasInitialized=true;}}
-this.__initialize();},__initialize:function(){if(!this.__hasRegisterFinished){this._ensureRegisterFinished(this.__proto__);}
-Polymer.telemetry.instanceCount++;this.root=this;for(var i=0,b;i<this.behaviors.length;i++){b=this.behaviors[i];if(b.created){b.created.call(this);}}
-if(this.created){this.created();}
-this._initFeatures();},ensureRegisterFinished:function(){this._ensureRegisterFinished(this);},_ensureRegisterFinished:function(proto){if(proto.__hasRegisterFinished!==proto.is||!proto.is){if(settings.lazyRegister==='max'){proto._desugarBehaviors();for(var i=0,b;i<proto.behaviors.length;i++){b=proto.behaviors[i];if(b.beforeRegister){b.beforeRegister.call(proto);}}}
-proto.__hasRegisterFinished=proto.is;if(proto._finishRegisterFeatures){proto._finishRegisterFeatures();}
-for(var j=0,pb;j<proto.behaviors.length;j++){pb=proto.behaviors[j];if(pb.registered){pb.registered.call(proto);}}
-if(proto.registered){proto.registered();}
-if(settings.usePolyfillProto&&proto!==this){proto.extend(this,proto);}}},attachedCallback:function(){var self=this;Polymer.RenderStatus.whenReady(function(){self.isAttached=true;for(var i=0,b;i<self.behaviors.length;i++){b=self.behaviors[i];if(b.attached){b.attached.call(self);}}
-if(self.attached){self.attached();}});},detachedCallback:function(){var self=this;Polymer.RenderStatus.whenReady(function(){self.isAttached=false;for(var i=0,b;i<self.behaviors.length;i++){b=self.behaviors[i];if(b.detached){b.detached.call(self);}}
-if(self.detached){self.detached();}});},attributeChangedCallback:function(name,oldValue,newValue){this._attributeChangedImpl(name);for(var i=0,b;i<this.behaviors.length;i++){b=this.behaviors[i];if(b.attributeChanged){b.attributeChanged.call(this,name,oldValue,newValue);}}
-if(this.attributeChanged){this.attributeChanged(name,oldValue,newValue);}},_attributeChangedImpl:function(name){this._setAttributeToProperty(this,name);},extend:function(target,source){if(target&&source){var n$=Object.getOwnPropertyNames(source);for(var i=0,n;i<n$.length&&(n=n$[i]);i++){this.copyOwnProperty(n,source,target);}}
-return target||source;},mixin:function(target,source){for(var i in source){target[i]=source[i];}
-return target;},copyOwnProperty:function(name,source,target){var pd=Object.getOwnPropertyDescriptor(source,name);if(pd){Object.defineProperty(target,name,pd);}},_logger:function(level,args){if(args.length===1&&Array.isArray(args[0])){args=args[0];}
-switch(level){case'log':case'warn':case'error':console[level].apply(console,args);break;}},_log:function(){var args=Array.prototype.slice.call(arguments,0);this._logger('log',args);},_warn:function(){var args=Array.prototype.slice.call(arguments,0);this._logger('warn',args);},_error:function(){var args=Array.prototype.slice.call(arguments,0);this._logger('error',args);},_logf:function(){return this._logPrefix.concat(this.is).concat(Array.prototype.slice.call(arguments,0));}};Polymer.Base._logPrefix=function(){var color=window.chrome&&!/edge/i.test(navigator.userAgent)||/firefox/i.test(navigator.userAgent);return color?['%c[%s::%s]:','font-weight: bold; background-color:#EEEE00;']:['[%s::%s]:'];}();Polymer.Base.chainObject=function(object,inherited){if(object&&inherited&&object!==inherited){if(!Object.__proto__){object=Polymer.Base.extend(Object.create(inherited),object);}
-object.__proto__=inherited;}
-return object;};Polymer.Base=Polymer.Base.chainObject(Polymer.Base,HTMLElement.prototype);Polymer.BaseDescriptors={};var disableUpgradePropertySetter;if(settings.disableUpgradeEnabled){disableUpgradePropertySetter=function(property,value){this.__data__[property]=value;};var origAttributeChangedCallback=Polymer.Base.attributeChangedCallback;Polymer.Base.attributeChangedCallback=function(name,oldValue,newValue){if(!this.__hasInitialized&&name==='disable-upgrade'){this.__hasInitialized=true;this._propertySetter=Polymer.Bind._modelApi._propertySetter;this._configValue=Polymer.Base._configValue;this.__initialize();}
-origAttributeChangedCallback.call(this,name,oldValue,newValue);};}
-if(window.CustomElements){Polymer.instanceof=CustomElements.instanceof;}else{Polymer.instanceof=function(obj,ctor){return obj instanceof ctor;};}
-Polymer.isInstance=function(obj){return Boolean(obj&&obj.__isPolymerInstance__);};Polymer.telemetry.instanceCount=0;}());(function(){var modules={};var lcModules={};var findModule=function(id){return modules[id]||lcModules[id.toLowerCase()];};var DomModule=function(){return document.createElement('dom-module');};DomModule.prototype=Object.create(HTMLElement.prototype);Polymer.Base.mixin(DomModule.prototype,{createdCallback:function(){this.register();},register:function(id){id=id||this.id||this.getAttribute('name')||this.getAttribute('is');if(id){this.id=id;modules[id]=this;lcModules[id.toLowerCase()]=this;}},import:function(id,selector){if(id){var m=findModule(id);if(!m){forceDomModulesUpgrade();m=findModule(id);}
-if(m&&selector){m=m.querySelector(selector);}
-return m;}}});Object.defineProperty(DomModule.prototype,'constructor',{value:DomModule,configurable:true,writable:true});var cePolyfill=window.CustomElements&&!CustomElements.useNative;document.registerElement('dom-module',DomModule);function forceDomModulesUpgrade(){if(cePolyfill){var script=document._currentScript||document.currentScript;var doc=script&&script.ownerDocument||document;var modules=doc.querySelectorAll('dom-module');for(var i=modules.length-1,m;i>=0&&(m=modules[i]);i--){if(m.__upgraded__){return;}else{CustomElements.upgrade(m);}}}}}());Polymer.Base._addFeature({_prepIs:function(){if(!this.is){var module=(document._currentScript||document.currentScript).parentNode;if(module.localName==='dom-module'){var id=module.id||module.getAttribute('name')||module.getAttribute('is');this.is=id;}}
-if(this.is){this.is=this.is.toLowerCase();}}});Polymer.Base._addFeature({behaviors:[],_desugarBehaviors:function(){if(this.behaviors.length){this.behaviors=this._desugarSomeBehaviors(this.behaviors);}},_desugarSomeBehaviors:function(behaviors){var behaviorSet=[];behaviors=this._flattenBehaviorsList(behaviors);for(var i=behaviors.length-1;i>=0;i--){var b=behaviors[i];if(behaviorSet.indexOf(b)===-1){this._mixinBehavior(b);behaviorSet.unshift(b);}}
-return behaviorSet;},_flattenBehaviorsList:function(behaviors){var flat=[];for(var i=0;i<behaviors.length;i++){var b=behaviors[i];if(b instanceof Array){flat=flat.concat(this._flattenBehaviorsList(b));}else if(b){flat.push(b);}else{this._warn(this._logf('_flattenBehaviorsList','behavior is null, check for missing or 404 import'));}}
-return flat;},_mixinBehavior:function(b){var n$=Object.getOwnPropertyNames(b);var useAssignment=b._noAccessors;for(var i=0,n;i<n$.length&&(n=n$[i]);i++){if(!Polymer.Base._behaviorProperties[n]&&!this.hasOwnProperty(n)){if(useAssignment){this[n]=b[n];}else{this.copyOwnProperty(n,b,this);}}}},_prepBehaviors:function(){this._prepFlattenedBehaviors(this.behaviors);},_prepFlattenedBehaviors:function(behaviors){for(var i=0,l=behaviors.length;i<l;i++){this._prepBehavior(behaviors[i]);}
-this._prepBehavior(this);},_marshalBehaviors:function(){for(var i=0;i<this.behaviors.length;i++){this._marshalBehavior(this.behaviors[i]);}
-this._marshalBehavior(this);}});Polymer.Base._behaviorProperties={hostAttributes:true,beforeRegister:true,registered:true,properties:true,observers:true,listeners:true,created:true,attached:true,detached:true,attributeChanged:true,ready:true,_noAccessors:true};Polymer.Base._addFeature({_getExtendedPrototype:function(tag){return this._getExtendedNativePrototype(tag);},_nativePrototypes:{},_getExtendedNativePrototype:function(tag){var p=this._nativePrototypes[tag];if(!p){p=Object.create(this.getNativePrototype(tag));var p$=Object.getOwnPropertyNames(Polymer.Base);for(var i=0,n;i<p$.length&&(n=p$[i]);i++){if(!Polymer.BaseDescriptors[n]){p[n]=Polymer.Base[n];}}
-Object.defineProperties(p,Polymer.BaseDescriptors);this._nativePrototypes[tag]=p;}
-return p;},getNativePrototype:function(tag){return Object.getPrototypeOf(document.createElement(tag));}});Polymer.Base._addFeature({_prepConstructor:function(){this._factoryArgs=this.extends?[this.extends,this.is]:[this.is];var ctor=function(){return this._factory(arguments);};if(this.hasOwnProperty('extends')){ctor.extends=this.extends;}
-Object.defineProperty(this,'constructor',{value:ctor,writable:true,configurable:true});ctor.prototype=this;},_factory:function(args){var elt=document.createElement.apply(document,this._factoryArgs);if(this.factoryImpl){this.factoryImpl.apply(elt,args);}
-return elt;}});Polymer.nob=Object.create(null);Polymer.Base._addFeature({getPropertyInfo:function(property){var info=this._getPropertyInfo(property,this.properties);if(!info){for(var i=0;i<this.behaviors.length;i++){info=this._getPropertyInfo(property,this.behaviors[i].properties);if(info){return info;}}}
-return info||Polymer.nob;},_getPropertyInfo:function(property,properties){var p=properties&&properties[property];if(typeof p==='function'){p=properties[property]={type:p};}
-if(p){p.defined=true;}
-return p;},_prepPropertyInfo:function(){this._propertyInfo={};for(var i=0;i<this.behaviors.length;i++){this._addPropertyInfo(this._propertyInfo,this.behaviors[i].properties);}
-this._addPropertyInfo(this._propertyInfo,this.properties);this._addPropertyInfo(this._propertyInfo,this._propertyEffects);},_addPropertyInfo:function(target,source){if(source){var t,s;for(var i in source){t=target[i];s=source[i];if(i[0]==='_'&&!s.readOnly){continue;}
-if(!target[i]){target[i]={type:typeof s==='function'?s:s.type,readOnly:s.readOnly,attribute:Polymer.CaseMap.camelToDashCase(i)};}else{if(!t.type){t.type=s.type;}
-if(!t.readOnly){t.readOnly=s.readOnly;}}}}}});(function(){var propertiesDesc={configurable:true,writable:true,enumerable:true,value:{}};Polymer.BaseDescriptors.properties=propertiesDesc;Object.defineProperty(Polymer.Base,'properties',propertiesDesc);}());Polymer.CaseMap={_caseMap:{},_rx:{dashToCamel:/-[a-z]/g,camelToDash:/([A-Z])/g},dashToCamelCase:function(dash){return this._caseMap[dash]||(this._caseMap[dash]=dash.indexOf('-')<0?dash:dash.replace(this._rx.dashToCamel,function(m){return m[1].toUpperCase();}));},camelToDashCase:function(camel){return this._caseMap[camel]||(this._caseMap[camel]=camel.replace(this._rx.camelToDash,'-$1').toLowerCase());}};Polymer.Base._addFeature({_addHostAttributes:function(attributes){if(!this._aggregatedAttributes){this._aggregatedAttributes={};}
-if(attributes){this.mixin(this._aggregatedAttributes,attributes);}},_marshalHostAttributes:function(){if(this._aggregatedAttributes){this._applyAttributes(this,this._aggregatedAttributes);}},_applyAttributes:function(node,attr$){for(var n in attr$){if(!this.hasAttribute(n)&&n!=='class'){var v=attr$[n];this.serializeValueToAttribute(v,n,this);}}},_marshalAttributes:function(){this._takeAttributesToModel(this);},_takeAttributesToModel:function(model){if(this.hasAttributes()){for(var i in this._propertyInfo){var info=this._propertyInfo[i];if(this.hasAttribute(info.attribute)){this._setAttributeToProperty(model,info.attribute,i,info);}}}},_setAttributeToProperty:function(model,attribute,property,info){if(!this._serializing){property=property||Polymer.CaseMap.dashToCamelCase(attribute);info=info||this._propertyInfo&&this._propertyInfo[property];if(info&&!info.readOnly){var v=this.getAttribute(attribute);model[property]=this.deserialize(v,info.type);}}},_serializing:false,reflectPropertyToAttribute:function(property,attribute,value){this._serializing=true;value=value===undefined?this[property]:value;this.serializeValueToAttribute(value,attribute||Polymer.CaseMap.camelToDashCase(property));this._serializing=false;},serializeValueToAttribute:function(value,attribute,node){var str=this.serialize(value);node=node||this;if(str===undefined){node.removeAttribute(attribute);}else{node.setAttribute(attribute,str);}},deserialize:function(value,type){switch(type){case Number:value=Number(value);break;case Boolean:value=value!=null;break;case Object:try{value=JSON.parse(value);}catch(x){}
-break;case Array:try{value=JSON.parse(value);}catch(x){value=null;console.warn('Polymer::Attributes: couldn`t decode Array as JSON');}
-break;case Date:value=new Date(value);break;case String:default:break;}
-return value;},serialize:function(value){switch(typeof value){case'boolean':return value?'':undefined;case'object':if(value instanceof Date){return value.toString();}else if(value){try{return JSON.stringify(value);}catch(x){return'';}}
-default:return value!=null?value:undefined;}}});Polymer.version="1.10.1";Polymer.Base._addFeature({_registerFeatures:function(){this._prepIs();this._prepBehaviors();this._prepConstructor();this._prepPropertyInfo();},_prepBehavior:function(b){this._addHostAttributes(b.hostAttributes);},_marshalBehavior:function(b){},_initFeatures:function(){this._marshalHostAttributes();this._marshalBehaviors();}});(function(){function resolveCss(cssText,ownerDocument){return cssText.replace(CSS_URL_RX,function(m,pre,url,post){return pre+'\''+resolve(url.replace(/["']/g,''),ownerDocument)+'\''+post;});}
-function resolveAttrs(element,ownerDocument){for(var name in URL_ATTRS){var a$=URL_ATTRS[name];for(var i=0,l=a$.length,a,at,v;i<l&&(a=a$[i]);i++){if(name==='*'||element.localName===name){at=element.attributes[a];v=at&&at.value;if(v&&v.search(BINDING_RX)<0){at.value=a==='style'?resolveCss(v,ownerDocument):resolve(v,ownerDocument);}}}}}
-function resolve(url,ownerDocument){if(url&&ABS_URL.test(url)){return url;}
-var resolver=getUrlResolver(ownerDocument);resolver.href=url;return resolver.href||url;}
-var tempDoc;var tempDocBase;function resolveUrl(url,baseUri){if(!tempDoc){tempDoc=document.implementation.createHTMLDocument('temp');tempDocBase=tempDoc.createElement('base');tempDoc.head.appendChild(tempDocBase);}
-tempDocBase.href=baseUri;return resolve(url,tempDoc);}
-function getUrlResolver(ownerDocument){return ownerDocument.body.__urlResolver||(ownerDocument.body.__urlResolver=ownerDocument.createElement('a'));}
-function pathFromUrl(url){return url.substring(0,url.lastIndexOf('/')+1);}
-var CSS_URL_RX=/(url\()([^)]*)(\))/g;var URL_ATTRS={'*':['href','src','style','url'],form:['action']};var ABS_URL=/(^\/)|(^#)|(^[\w-\d]*:)/;var BINDING_RX=/\{\{|\[\[/;Polymer.ResolveUrl={resolveCss:resolveCss,resolveAttrs:resolveAttrs,resolveUrl:resolveUrl,pathFromUrl:pathFromUrl};Polymer.rootPath=Polymer.Settings.rootPath||pathFromUrl(document.baseURI||window.location.href);}());Polymer.Base._addFeature({_prepTemplate:function(){var module;if(this._template===undefined){module=Polymer.DomModule.import(this.is);this._template=module&&module.querySelector('template');}
-if(module){var assetPath=module.getAttribute('assetpath')||'';var importURL=Polymer.ResolveUrl.resolveUrl(assetPath,module.ownerDocument.baseURI);this._importPath=Polymer.ResolveUrl.pathFromUrl(importURL);}else{this._importPath='';}
-if(this._template&&this._template.hasAttribute('is')){this._warn(this._logf('_prepTemplate','top-level Polymer template '+'must not be a type-extension, found',this._template,'Move inside simple <template>.'));}
-if(this._template&&!this._template.content&&window.HTMLTemplateElement&&HTMLTemplateElement.decorate){HTMLTemplateElement.decorate(this._template);}},_stampTemplate:function(){if(this._template){this.root=this.instanceTemplate(this._template);}},instanceTemplate:function(template){var dom=document.importNode(template._content||template.content,true);return dom;}});(function(){var baseAttachedCallback=Polymer.Base.attachedCallback;var baseDetachedCallback=Polymer.Base.detachedCallback;Polymer.Base._addFeature({_hostStack:[],ready:function(){},_registerHost:function(host){this.dataHost=host=host||Polymer.Base._hostStack[Polymer.Base._hostStack.length-1];if(host&&host._clients){host._clients.push(this);}
-this._clients=null;this._clientsReadied=false;},_beginHosting:function(){Polymer.Base._hostStack.push(this);if(!this._clients){this._clients=[];}},_endHosting:function(){Polymer.Base._hostStack.pop();},_tryReady:function(){this._readied=false;if(this._canReady()){this._ready();}},_canReady:function(){return!this.dataHost||this.dataHost._clientsReadied;},_ready:function(){this._beforeClientsReady();if(this._template){this._setupRoot();this._readyClients();}
-this._clientsReadied=true;this._clients=null;this._afterClientsReady();this._readySelf();},_readyClients:function(){this._beginDistribute();var c$=this._clients;if(c$){for(var i=0,l=c$.length,c;i<l&&(c=c$[i]);i++){c._ready();}}
-this._finishDistribute();},_readySelf:function(){for(var i=0,b;i<this.behaviors.length;i++){b=this.behaviors[i];if(b.ready){b.ready.call(this);}}
-if(this.ready){this.ready();}
-this._readied=true;if(this._attachedPending){this._attachedPending=false;this.attachedCallback();}},_beforeClientsReady:function(){},_afterClientsReady:function(){},_beforeAttached:function(){},attachedCallback:function(){if(this._readied){this._beforeAttached();baseAttachedCallback.call(this);}else{this._attachedPending=true;}},detachedCallback:function(){if(this._readied){baseDetachedCallback.call(this);}else{this._attachedPending=false;}}});}());Polymer.ArraySplice=function(){function newSplice(index,removed,addedCount){return{index:index,removed:removed,addedCount:addedCount};}
-var EDIT_LEAVE=0;var EDIT_UPDATE=1;var EDIT_ADD=2;var EDIT_DELETE=3;function ArraySplice(){}
-ArraySplice.prototype={calcEditDistances:function(current,currentStart,currentEnd,old,oldStart,oldEnd){var rowCount=oldEnd-oldStart+1;var columnCount=currentEnd-currentStart+1;var distances=new Array(rowCount);for(var i=0;i<rowCount;i++){distances[i]=new Array(columnCount);distances[i][0]=i;}
-for(var j=0;j<columnCount;j++)
-distances[0][j]=j;for(i=1;i<rowCount;i++){for(j=1;j<columnCount;j++){if(this.equals(current[currentStart+j-1],old[oldStart+i-1]))
-distances[i][j]=distances[i-1][j-1];else{var north=distances[i-1][j]+1;var west=distances[i][j-1]+1;distances[i][j]=north<west?north:west;}}}
-return distances;},spliceOperationsFromEditDistances:function(distances){var i=distances.length-1;var j=distances[0].length-1;var current=distances[i][j];var edits=[];while(i>0||j>0){if(i==0){edits.push(EDIT_ADD);j--;continue;}
-if(j==0){edits.push(EDIT_DELETE);i--;continue;}
-var northWest=distances[i-1][j-1];var west=distances[i-1][j];var north=distances[i][j-1];var min;if(west<north)
-min=west<northWest?west:northWest;else
-min=north<northWest?north:northWest;if(min==northWest){if(northWest==current){edits.push(EDIT_LEAVE);}else{edits.push(EDIT_UPDATE);current=northWest;}
-i--;j--;}else if(min==west){edits.push(EDIT_DELETE);i--;current=west;}else{edits.push(EDIT_ADD);j--;current=north;}}
-edits.reverse();return edits;},calcSplices:function(current,currentStart,currentEnd,old,oldStart,oldEnd){var prefixCount=0;var suffixCount=0;var minLength=Math.min(currentEnd-currentStart,oldEnd-oldStart);if(currentStart==0&&oldStart==0)
-prefixCount=this.sharedPrefix(current,old,minLength);if(currentEnd==current.length&&oldEnd==old.length)
-suffixCount=this.sharedSuffix(current,old,minLength-prefixCount);currentStart+=prefixCount;oldStart+=prefixCount;currentEnd-=suffixCount;oldEnd-=suffixCount;if(currentEnd-currentStart==0&&oldEnd-oldStart==0)
-return[];if(currentStart==currentEnd){var splice=newSplice(currentStart,[],0);while(oldStart<oldEnd)
-splice.removed.push(old[oldStart++]);return[splice];}else if(oldStart==oldEnd)
-return[newSplice(currentStart,[],currentEnd-currentStart)];var ops=this.spliceOperationsFromEditDistances(this.calcEditDistances(current,currentStart,currentEnd,old,oldStart,oldEnd));splice=undefined;var splices=[];var index=currentStart;var oldIndex=oldStart;for(var i=0;i<ops.length;i++){switch(ops[i]){case EDIT_LEAVE:if(splice){splices.push(splice);splice=undefined;}
-index++;oldIndex++;break;case EDIT_UPDATE:if(!splice)
-splice=newSplice(index,[],0);splice.addedCount++;index++;splice.removed.push(old[oldIndex]);oldIndex++;break;case EDIT_ADD:if(!splice)
-splice=newSplice(index,[],0);splice.addedCount++;index++;break;case EDIT_DELETE:if(!splice)
-splice=newSplice(index,[],0);splice.removed.push(old[oldIndex]);oldIndex++;break;}}
-if(splice){splices.push(splice);}
-return splices;},sharedPrefix:function(current,old,searchLength){for(var i=0;i<searchLength;i++)
-if(!this.equals(current[i],old[i]))
-return i;return searchLength;},sharedSuffix:function(current,old,searchLength){var index1=current.length;var index2=old.length;var count=0;while(count<searchLength&&this.equals(current[--index1],old[--index2]))
-count++;return count;},calculateSplices:function(current,previous){return this.calcSplices(current,0,current.length,previous,0,previous.length);},equals:function(currentValue,previousValue){return currentValue===previousValue;}};return new ArraySplice();}();Polymer.domInnerHTML=function(){var escapeAttrRegExp=/[&\u00A0"]/g;var escapeDataRegExp=/[&\u00A0<>]/g;function escapeReplace(c){switch(c){case'&':return'&amp;';case'<':return'&lt;';case'>':return'&gt;';case'"':return'&quot;';case'\xA0':return'&nbsp;';}}
-function escapeAttr(s){return s.replace(escapeAttrRegExp,escapeReplace);}
-function escapeData(s){return s.replace(escapeDataRegExp,escapeReplace);}
-function makeSet(arr){var set={};for(var i=0;i<arr.length;i++){set[arr[i]]=true;}
-return set;}
-var voidElements=makeSet(['area','base','br','col','command','embed','hr','img','input','keygen','link','meta','param','source','track','wbr']);var plaintextParents=makeSet(['style','script','xmp','iframe','noembed','noframes','plaintext','noscript']);function getOuterHTML(node,parentNode,composed){switch(node.nodeType){case Node.ELEMENT_NODE:var tagName=node.localName;var s='<'+tagName;var attrs=node.attributes;for(var i=0,attr;attr=attrs[i];i++){s+=' '+attr.name+'="'+escapeAttr(attr.value)+'"';}
-s+='>';if(voidElements[tagName]){return s;}
-return s+getInnerHTML(node,composed)+'</'+tagName+'>';case Node.TEXT_NODE:var data=node.data;if(parentNode&&plaintextParents[parentNode.localName]){return data;}
-return escapeData(data);case Node.COMMENT_NODE:return'<!--'+node.data+'-->';default:console.error(node);throw new Error('not implemented');}}
-function getInnerHTML(node,composed){if(node instanceof HTMLTemplateElement)
-node=node.content;var s='';var c$=Polymer.dom(node).childNodes;for(var i=0,l=c$.length,child;i<l&&(child=c$[i]);i++){s+=getOuterHTML(child,node,composed);}
-return s;}
-return{getInnerHTML:getInnerHTML};}();(function(){'use strict';var nativeInsertBefore=Element.prototype.insertBefore;var nativeAppendChild=Element.prototype.appendChild;var nativeRemoveChild=Element.prototype.removeChild;Polymer.TreeApi={arrayCopyChildNodes:function(parent){var copy=[],i=0;for(var n=parent.firstChild;n;n=n.nextSibling){copy[i++]=n;}
-return copy;},arrayCopyChildren:function(parent){var copy=[],i=0;for(var n=parent.firstElementChild;n;n=n.nextElementSibling){copy[i++]=n;}
-return copy;},arrayCopy:function(a$){var l=a$.length;var copy=new Array(l);for(var i=0;i<l;i++){copy[i]=a$[i];}
-return copy;}};Polymer.TreeApi.Logical={hasParentNode:function(node){return Boolean(node.__dom&&node.__dom.parentNode);},hasChildNodes:function(node){return Boolean(node.__dom&&node.__dom.childNodes!==undefined);},getChildNodes:function(node){return this.hasChildNodes(node)?this._getChildNodes(node):node.childNodes;},_getChildNodes:function(node){if(!node.__dom.childNodes){node.__dom.childNodes=[];for(var n=node.__dom.firstChild;n;n=n.__dom.nextSibling){node.__dom.childNodes.push(n);}}
-return node.__dom.childNodes;},getParentNode:function(node){return node.__dom&&node.__dom.parentNode!==undefined?node.__dom.parentNode:node.parentNode;},getFirstChild:function(node){return node.__dom&&node.__dom.firstChild!==undefined?node.__dom.firstChild:node.firstChild;},getLastChild:function(node){return node.__dom&&node.__dom.lastChild!==undefined?node.__dom.lastChild:node.lastChild;},getNextSibling:function(node){return node.__dom&&node.__dom.nextSibling!==undefined?node.__dom.nextSibling:node.nextSibling;},getPreviousSibling:function(node){return node.__dom&&node.__dom.previousSibling!==undefined?node.__dom.previousSibling:node.previousSibling;},getFirstElementChild:function(node){return node.__dom&&node.__dom.firstChild!==undefined?this._getFirstElementChild(node):node.firstElementChild;},_getFirstElementChild:function(node){var n=node.__dom.firstChild;while(n&&n.nodeType!==Node.ELEMENT_NODE){n=n.__dom.nextSibling;}
-return n;},getLastElementChild:function(node){return node.__dom&&node.__dom.lastChild!==undefined?this._getLastElementChild(node):node.lastElementChild;},_getLastElementChild:function(node){var n=node.__dom.lastChild;while(n&&n.nodeType!==Node.ELEMENT_NODE){n=n.__dom.previousSibling;}
-return n;},getNextElementSibling:function(node){return node.__dom&&node.__dom.nextSibling!==undefined?this._getNextElementSibling(node):node.nextElementSibling;},_getNextElementSibling:function(node){var n=node.__dom.nextSibling;while(n&&n.nodeType!==Node.ELEMENT_NODE){n=n.__dom.nextSibling;}
-return n;},getPreviousElementSibling:function(node){return node.__dom&&node.__dom.previousSibling!==undefined?this._getPreviousElementSibling(node):node.previousElementSibling;},_getPreviousElementSibling:function(node){var n=node.__dom.previousSibling;while(n&&n.nodeType!==Node.ELEMENT_NODE){n=n.__dom.previousSibling;}
-return n;},saveChildNodes:function(node){if(!this.hasChildNodes(node)){node.__dom=node.__dom||{};node.__dom.firstChild=node.firstChild;node.__dom.lastChild=node.lastChild;node.__dom.childNodes=[];for(var n=node.firstChild;n;n=n.nextSibling){n.__dom=n.__dom||{};n.__dom.parentNode=node;node.__dom.childNodes.push(n);n.__dom.nextSibling=n.nextSibling;n.__dom.previousSibling=n.previousSibling;}}},recordInsertBefore:function(node,container,ref_node){container.__dom.childNodes=null;if(node.nodeType===Node.DOCUMENT_FRAGMENT_NODE){for(var n=node.firstChild;n;n=n.nextSibling){this._linkNode(n,container,ref_node);}}else{this._linkNode(node,container,ref_node);}},_linkNode:function(node,container,ref_node){node.__dom=node.__dom||{};container.__dom=container.__dom||{};if(ref_node){ref_node.__dom=ref_node.__dom||{};}
-node.__dom.previousSibling=ref_node?ref_node.__dom.previousSibling:container.__dom.lastChild;if(node.__dom.previousSibling){node.__dom.previousSibling.__dom.nextSibling=node;}
-node.__dom.nextSibling=ref_node||null;if(node.__dom.nextSibling){node.__dom.nextSibling.__dom.previousSibling=node;}
-node.__dom.parentNode=container;if(ref_node){if(ref_node===container.__dom.firstChild){container.__dom.firstChild=node;}}else{container.__dom.lastChild=node;if(!container.__dom.firstChild){container.__dom.firstChild=node;}}
-container.__dom.childNodes=null;},recordRemoveChild:function(node,container){node.__dom=node.__dom||{};container.__dom=container.__dom||{};if(node===container.__dom.firstChild){container.__dom.firstChild=node.__dom.nextSibling;}
-if(node===container.__dom.lastChild){container.__dom.lastChild=node.__dom.previousSibling;}
-var p=node.__dom.previousSibling;var n=node.__dom.nextSibling;if(p){p.__dom.nextSibling=n;}
-if(n){n.__dom.previousSibling=p;}
-node.__dom.parentNode=node.__dom.previousSibling=node.__dom.nextSibling=undefined;container.__dom.childNodes=null;}};Polymer.TreeApi.Composed={getChildNodes:function(node){return Polymer.TreeApi.arrayCopyChildNodes(node);},getParentNode:function(node){return node.parentNode;},clearChildNodes:function(node){node.textContent='';},insertBefore:function(parentNode,newChild,refChild){return nativeInsertBefore.call(parentNode,newChild,refChild||null);},appendChild:function(parentNode,newChild){return nativeAppendChild.call(parentNode,newChild);},removeChild:function(parentNode,node){return nativeRemoveChild.call(parentNode,node);}};}());Polymer.DomApi=function(){'use strict';var Settings=Polymer.Settings;var TreeApi=Polymer.TreeApi;var DomApi=function(node){this.node=needsToWrap?DomApi.wrap(node):node;};var needsToWrap=Settings.hasShadow&&!Settings.nativeShadow;DomApi.wrap=window.wrap?window.wrap:function(node){return node;};DomApi.prototype={flush:function(){Polymer.dom.flush();},deepContains:function(node){if(this.node.contains(node)){return true;}
-var n=node;var doc=node.ownerDocument;while(n&&n!==doc&&n!==this.node){n=Polymer.dom(n).parentNode||n.host;}
-return n===this.node;},queryDistributedElements:function(selector){var c$=this.getEffectiveChildNodes();var list=[];for(var i=0,l=c$.length,c;i<l&&(c=c$[i]);i++){if(c.nodeType===Node.ELEMENT_NODE&&DomApi.matchesSelector.call(c,selector)){list.push(c);}}
-return list;},getEffectiveChildNodes:function(){var list=[];var c$=this.childNodes;for(var i=0,l=c$.length,c;i<l&&(c=c$[i]);i++){if(c.localName===CONTENT){var d$=dom(c).getDistributedNodes();for(var j=0;j<d$.length;j++){list.push(d$[j]);}}else{list.push(c);}}
-return list;},observeNodes:function(callback){if(callback){if(!this.observer){this.observer=this.node.localName===CONTENT?new DomApi.DistributedNodesObserver(this):new DomApi.EffectiveNodesObserver(this);}
-return this.observer.addListener(callback);}},unobserveNodes:function(handle){if(this.observer){this.observer.removeListener(handle);}},notifyObserver:function(){if(this.observer){this.observer.notify();}},_query:function(matcher,node,halter){node=node||this.node;var list=[];this._queryElements(TreeApi.Logical.getChildNodes(node),matcher,halter,list);return list;},_queryElements:function(elements,matcher,halter,list){for(var i=0,l=elements.length,c;i<l&&(c=elements[i]);i++){if(c.nodeType===Node.ELEMENT_NODE){if(this._queryElement(c,matcher,halter,list)){return true;}}}},_queryElement:function(node,matcher,halter,list){var result=matcher(node);if(result){list.push(node);}
-if(halter&&halter(result)){return result;}
-this._queryElements(TreeApi.Logical.getChildNodes(node),matcher,halter,list);}};var CONTENT=DomApi.CONTENT='content';var dom=DomApi.factory=function(node){node=node||document;if(!node.__domApi){node.__domApi=new DomApi.ctor(node);}
-return node.__domApi;};DomApi.hasApi=function(node){return Boolean(node.__domApi);};DomApi.ctor=DomApi;Polymer.dom=function(obj,patch){if(obj instanceof Event){return Polymer.EventApi.factory(obj);}else{return DomApi.factory(obj,patch);}};var p=Element.prototype;DomApi.matchesSelector=p.matches||p.matchesSelector||p.mozMatchesSelector||p.msMatchesSelector||p.oMatchesSelector||p.webkitMatchesSelector;return DomApi;}();(function(){'use strict';var Settings=Polymer.Settings;var DomApi=Polymer.DomApi;var dom=DomApi.factory;var TreeApi=Polymer.TreeApi;var getInnerHTML=Polymer.domInnerHTML.getInnerHTML;var CONTENT=DomApi.CONTENT;if(Settings.useShadow){return;}
-var nativeCloneNode=Element.prototype.cloneNode;var nativeImportNode=Document.prototype.importNode;Polymer.Base.mixin(DomApi.prototype,{_lazyDistribute:function(host){if(host.shadyRoot&&host.shadyRoot._distributionClean){host.shadyRoot._distributionClean=false;Polymer.dom.addDebouncer(host.debounce('_distribute',host._distributeContent));}},appendChild:function(node){return this.insertBefore(node);},insertBefore:function(node,ref_node){if(ref_node&&TreeApi.Logical.getParentNode(ref_node)!==this.node){throw Error('The ref_node to be inserted before is not a child '+'of this node');}
-if(node.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){var parent=TreeApi.Logical.getParentNode(node);if(parent){if(DomApi.hasApi(parent)){dom(parent).notifyObserver();}
-this._removeNode(node);}else{this._removeOwnerShadyRoot(node);}}
-if(!this._addNode(node,ref_node)){if(ref_node){ref_node=ref_node.localName===CONTENT?this._firstComposedNode(ref_node):ref_node;}
-var container=this.node._isShadyRoot?this.node.host:this.node;if(ref_node){TreeApi.Composed.insertBefore(container,node,ref_node);}else{TreeApi.Composed.appendChild(container,node);}}
-this.notifyObserver();return node;},_addNode:function(node,ref_node){var root=this.getOwnerRoot();if(root){var ipAdded=this._maybeAddInsertionPoint(node,this.node);if(!root._invalidInsertionPoints){root._invalidInsertionPoints=ipAdded;}
-this._addNodeToHost(root.host,node);}
-if(TreeApi.Logical.hasChildNodes(this.node)){TreeApi.Logical.recordInsertBefore(node,this.node,ref_node);}
-var handled=this._maybeDistribute(node)||this.node.shadyRoot;if(handled){if(node.nodeType===Node.DOCUMENT_FRAGMENT_NODE){while(node.firstChild){TreeApi.Composed.removeChild(node,node.firstChild);}}else{var parent=TreeApi.Composed.getParentNode(node);if(parent){TreeApi.Composed.removeChild(parent,node);}}}
-return handled;},removeChild:function(node){if(TreeApi.Logical.getParentNode(node)!==this.node){throw Error('The node to be removed is not a child of this node: '+node);}
-if(!this._removeNode(node)){var container=this.node._isShadyRoot?this.node.host:this.node;var parent=TreeApi.Composed.getParentNode(node);if(container===parent){TreeApi.Composed.removeChild(container,node);}}
-this.notifyObserver();return node;},_removeNode:function(node){var logicalParent=TreeApi.Logical.hasParentNode(node)&&TreeApi.Logical.getParentNode(node);var distributed;var root=this._ownerShadyRootForNode(node);if(logicalParent){distributed=dom(node)._maybeDistributeParent();TreeApi.Logical.recordRemoveChild(node,logicalParent);if(root&&this._removeDistributedChildren(root,node)){root._invalidInsertionPoints=true;this._lazyDistribute(root.host);}}
-this._removeOwnerShadyRoot(node);if(root){this._removeNodeFromHost(root.host,node);}
-return distributed;},replaceChild:function(node,ref_node){this.insertBefore(node,ref_node);this.removeChild(ref_node);return node;},_hasCachedOwnerRoot:function(node){return Boolean(node._ownerShadyRoot!==undefined);},getOwnerRoot:function(){return this._ownerShadyRootForNode(this.node);},_ownerShadyRootForNode:function(node){if(!node){return;}
-var root=node._ownerShadyRoot;if(root===undefined){if(node._isShadyRoot){root=node;}else{var parent=TreeApi.Logical.getParentNode(node);if(parent){root=parent._isShadyRoot?parent:this._ownerShadyRootForNode(parent);}else{root=null;}}
-if(root||document.documentElement.contains(node)){node._ownerShadyRoot=root;}}
-return root;},_maybeDistribute:function(node){var fragContent=node.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&!node.__noContent&&dom(node).querySelector(CONTENT);var wrappedContent=fragContent&&TreeApi.Logical.getParentNode(fragContent).nodeType!==Node.DOCUMENT_FRAGMENT_NODE;var hasContent=fragContent||node.localName===CONTENT;if(hasContent){var root=this.getOwnerRoot();if(root){this._lazyDistribute(root.host);}}
-var needsDist=this._nodeNeedsDistribution(this.node);if(needsDist){this._lazyDistribute(this.node);}
-return needsDist||hasContent&&!wrappedContent;},_maybeAddInsertionPoint:function(node,parent){var added;if(node.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&!node.__noContent){var c$=dom(node).querySelectorAll(CONTENT);for(var i=0,n,np,na;i<c$.length&&(n=c$[i]);i++){np=TreeApi.Logical.getParentNode(n);if(np===node){np=parent;}
-na=this._maybeAddInsertionPoint(n,np);added=added||na;}}else if(node.localName===CONTENT){TreeApi.Logical.saveChildNodes(parent);TreeApi.Logical.saveChildNodes(node);added=true;}
-return added;},_updateInsertionPoints:function(host){var i$=host.shadyRoot._insertionPoints=dom(host.shadyRoot).querySelectorAll(CONTENT);for(var i=0,c;i<i$.length;i++){c=i$[i];TreeApi.Logical.saveChildNodes(c);TreeApi.Logical.saveChildNodes(TreeApi.Logical.getParentNode(c));}},_nodeNeedsDistribution:function(node){return node&&node.shadyRoot&&DomApi.hasInsertionPoint(node.shadyRoot);},_addNodeToHost:function(host,node){if(host._elementAdd){host._elementAdd(node);}},_removeNodeFromHost:function(host,node){if(host._elementRemove){host._elementRemove(node);}},_removeDistributedChildren:function(root,container){var hostNeedsDist;var ip$=root._insertionPoints;for(var i=0;i<ip$.length;i++){var content=ip$[i];if(this._contains(container,content)){var dc$=dom(content).getDistributedNodes();for(var j=0;j<dc$.length;j++){hostNeedsDist=true;var node=dc$[j];var parent=TreeApi.Composed.getParentNode(node);if(parent){TreeApi.Composed.removeChild(parent,node);}}}}
-return hostNeedsDist;},_contains:function(container,node){while(node){if(node==container){return true;}
-node=TreeApi.Logical.getParentNode(node);}},_removeOwnerShadyRoot:function(node){if(this._hasCachedOwnerRoot(node)){var c$=TreeApi.Logical.getChildNodes(node);for(var i=0,l=c$.length,n;i<l&&(n=c$[i]);i++){this._removeOwnerShadyRoot(n);}}
-node._ownerShadyRoot=undefined;},_firstComposedNode:function(content){var n$=dom(content).getDistributedNodes();for(var i=0,l=n$.length,n,p$;i<l&&(n=n$[i]);i++){p$=dom(n).getDestinationInsertionPoints();if(p$[p$.length-1]===content){return n;}}},querySelector:function(selector){var result=this._query(function(n){return DomApi.matchesSelector.call(n,selector);},this.node,function(n){return Boolean(n);})[0];return result||null;},querySelectorAll:function(selector){return this._query(function(n){return DomApi.matchesSelector.call(n,selector);},this.node);},getDestinationInsertionPoints:function(){return this.node._destinationInsertionPoints||[];},getDistributedNodes:function(){return this.node._distributedNodes||[];},_clear:function(){while(this.childNodes.length){this.removeChild(this.childNodes[0]);}},setAttribute:function(name,value){this.node.setAttribute(name,value);this._maybeDistributeParent();},removeAttribute:function(name){this.node.removeAttribute(name);this._maybeDistributeParent();},_maybeDistributeParent:function(){if(this._nodeNeedsDistribution(this.parentNode)){this._lazyDistribute(this.parentNode);return true;}},cloneNode:function(deep){var n=nativeCloneNode.call(this.node,false);if(deep){var c$=this.childNodes;var d=dom(n);for(var i=0,nc;i<c$.length;i++){nc=dom(c$[i]).cloneNode(true);d.appendChild(nc);}}
-return n;},importNode:function(externalNode,deep){var doc=this.node instanceof Document?this.node:this.node.ownerDocument;var n=nativeImportNode.call(doc,externalNode,false);if(deep){var c$=TreeApi.Logical.getChildNodes(externalNode);var d=dom(n);for(var i=0,nc;i<c$.length;i++){nc=dom(doc).importNode(c$[i],true);d.appendChild(nc);}}
-return n;},_getComposedInnerHTML:function(){return getInnerHTML(this.node,true);}});Object.defineProperties(DomApi.prototype,{activeElement:{get:function(){var active=document.activeElement;if(!active){return null;}
-var isShadyRoot=!!this.node._isShadyRoot;if(this.node!==document){if(!isShadyRoot){return null;}
-if(this.node.host===active||!this.node.host.contains(active)){return null;}}
-var activeRoot=dom(active).getOwnerRoot();while(activeRoot&&activeRoot!==this.node){active=activeRoot.host;activeRoot=dom(active).getOwnerRoot();}
-if(this.node===document){return activeRoot?null:active;}else{return activeRoot===this.node?active:null;}},configurable:true},childNodes:{get:function(){var c$=TreeApi.Logical.getChildNodes(this.node);return Array.isArray(c$)?c$:TreeApi.arrayCopyChildNodes(this.node);},configurable:true},children:{get:function(){if(TreeApi.Logical.hasChildNodes(this.node)){return Array.prototype.filter.call(this.childNodes,function(n){return n.nodeType===Node.ELEMENT_NODE;});}else{return TreeApi.arrayCopyChildren(this.node);}},configurable:true},parentNode:{get:function(){return TreeApi.Logical.getParentNode(this.node);},configurable:true},firstChild:{get:function(){return TreeApi.Logical.getFirstChild(this.node);},configurable:true},lastChild:{get:function(){return TreeApi.Logical.getLastChild(this.node);},configurable:true},nextSibling:{get:function(){return TreeApi.Logical.getNextSibling(this.node);},configurable:true},previousSibling:{get:function(){return TreeApi.Logical.getPreviousSibling(this.node);},configurable:true},firstElementChild:{get:function(){return TreeApi.Logical.getFirstElementChild(this.node);},configurable:true},lastElementChild:{get:function(){return TreeApi.Logical.getLastElementChild(this.node);},configurable:true},nextElementSibling:{get:function(){return TreeApi.Logical.getNextElementSibling(this.node);},configurable:true},previousElementSibling:{get:function(){return TreeApi.Logical.getPreviousElementSibling(this.node);},configurable:true},textContent:{get:function(){var nt=this.node.nodeType;if(nt===Node.TEXT_NODE||nt===Node.COMMENT_NODE){return this.node.textContent;}else{var tc=[];for(var i=0,cn=this.childNodes,c;c=cn[i];i++){if(c.nodeType!==Node.COMMENT_NODE){tc.push(c.textContent);}}
-return tc.join('');}},set:function(text){var nt=this.node.nodeType;if(nt===Node.TEXT_NODE||nt===Node.COMMENT_NODE){this.node.textContent=text;}else{this._clear();if(text){this.appendChild(document.createTextNode(text));}}},configurable:true},innerHTML:{get:function(){var nt=this.node.nodeType;if(nt===Node.TEXT_NODE||nt===Node.COMMENT_NODE){return null;}else{return getInnerHTML(this.node);}},set:function(text){var nt=this.node.nodeType;if(nt!==Node.TEXT_NODE||nt!==Node.COMMENT_NODE){this._clear();var d=document.createElement('div');d.innerHTML=text;var c$=TreeApi.arrayCopyChildNodes(d);for(var i=0;i<c$.length;i++){this.appendChild(c$[i]);}}},configurable:true}});DomApi.hasInsertionPoint=function(root){return Boolean(root&&root._insertionPoints.length);};}());(function(){'use strict';var Settings=Polymer.Settings;var TreeApi=Polymer.TreeApi;var DomApi=Polymer.DomApi;if(!Settings.useShadow){return;}
-Polymer.Base.mixin(DomApi.prototype,{querySelectorAll:function(selector){return TreeApi.arrayCopy(this.node.querySelectorAll(selector));},getOwnerRoot:function(){var n=this.node;while(n){if(n.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&n.host){return n;}
-n=n.parentNode;}},importNode:function(externalNode,deep){var doc=this.node instanceof Document?this.node:this.node.ownerDocument;return doc.importNode(externalNode,deep);},getDestinationInsertionPoints:function(){var n$=this.node.getDestinationInsertionPoints&&this.node.getDestinationInsertionPoints();return n$?TreeApi.arrayCopy(n$):[];},getDistributedNodes:function(){var n$=this.node.getDistributedNodes&&this.node.getDistributedNodes();return n$?TreeApi.arrayCopy(n$):[];}});Object.defineProperties(DomApi.prototype,{activeElement:{get:function(){var node=DomApi.wrap(this.node);var activeElement=node.activeElement;return node.contains(activeElement)?activeElement:null;},configurable:true},childNodes:{get:function(){return TreeApi.arrayCopyChildNodes(this.node);},configurable:true},children:{get:function(){return TreeApi.arrayCopyChildren(this.node);},configurable:true},textContent:{get:function(){return this.node.textContent;},set:function(value){return this.node.textContent=value;},configurable:true},innerHTML:{get:function(){return this.node.innerHTML;},set:function(value){return this.node.innerHTML=value;},configurable:true}});var forwardMethods=function(m$){for(var i=0;i<m$.length;i++){forwardMethod(m$[i]);}};var forwardMethod=function(method){DomApi.prototype[method]=function(){return this.node[method].apply(this.node,arguments);};};forwardMethods(['cloneNode','appendChild','insertBefore','removeChild','replaceChild','setAttribute','removeAttribute','querySelector']);var forwardProperties=function(f$){for(var i=0;i<f$.length;i++){forwardProperty(f$[i]);}};var forwardProperty=function(name){Object.defineProperty(DomApi.prototype,name,{get:function(){return this.node[name];},configurable:true});};forwardProperties(['parentNode','firstChild','lastChild','nextSibling','previousSibling','firstElementChild','lastElementChild','nextElementSibling','previousElementSibling']);}());Polymer.Base.mixin(Polymer.dom,{_flushGuard:0,_FLUSH_MAX:100,_needsTakeRecords:!Polymer.Settings.useNativeCustomElements,_debouncers:[],_staticFlushList:[],_finishDebouncer:null,flush:function(){this._flushGuard=0;this._prepareFlush();while(this._debouncers.length&&this._flushGuard<this._FLUSH_MAX){while(this._debouncers.length){this._debouncers.shift().complete();}
-if(this._finishDebouncer){this._finishDebouncer.complete();}
-this._prepareFlush();this._flushGuard++;}
-if(this._flushGuard>=this._FLUSH_MAX){console.warn('Polymer.dom.flush aborted. Flush may not be complete.');}},_prepareFlush:function(){if(this._needsTakeRecords){CustomElements.takeRecords();}
-for(var i=0;i<this._staticFlushList.length;i++){this._staticFlushList[i]();}},addStaticFlush:function(fn){this._staticFlushList.push(fn);},removeStaticFlush:function(fn){var i=this._staticFlushList.indexOf(fn);if(i>=0){this._staticFlushList.splice(i,1);}},addDebouncer:function(debouncer){this._debouncers.push(debouncer);this._finishDebouncer=Polymer.Debounce(this._finishDebouncer,this._finishFlush);},_finishFlush:function(){Polymer.dom._debouncers=[];}});Polymer.EventApi=function(){'use strict';var DomApi=Polymer.DomApi.ctor;var Settings=Polymer.Settings;DomApi.Event=function(event){this.event=event;};if(Settings.useShadow){DomApi.Event.prototype={get rootTarget(){return this.event.path[0];},get localTarget(){return this.event.target;},get path(){var path=this.event.path;if(!Array.isArray(path)){path=Array.prototype.slice.call(path);}
-return path;}};}else{DomApi.Event.prototype={get rootTarget(){return this.event.target;},get localTarget(){var current=this.event.currentTarget;var currentRoot=current&&Polymer.dom(current).getOwnerRoot();var p$=this.path;for(var i=0;i<p$.length;i++){if(Polymer.dom(p$[i]).getOwnerRoot()===currentRoot){return p$[i];}}},get path(){if(!this.event._path){var path=[];var current=this.rootTarget;while(current){path.push(current);var insertionPoints=Polymer.dom(current).getDestinationInsertionPoints();if(insertionPoints.length){for(var i=0;i<insertionPoints.length-1;i++){path.push(insertionPoints[i]);}
-current=insertionPoints[insertionPoints.length-1];}else{current=Polymer.dom(current).parentNode||current.host;}}
-path.push(window);this.event._path=path;}
-return this.event._path;}};}
-var factory=function(event){if(!event.__eventApi){event.__eventApi=new DomApi.Event(event);}
-return event.__eventApi;};return{factory:factory};}();(function(){'use strict';var DomApi=Polymer.DomApi.ctor;var useShadow=Polymer.Settings.useShadow;Object.defineProperty(DomApi.prototype,'classList',{get:function(){if(!this._classList){this._classList=new DomApi.ClassList(this);}
-return this._classList;},configurable:true});DomApi.ClassList=function(host){this.domApi=host;this.node=host.node;};DomApi.ClassList.prototype={add:function(){this.node.classList.add.apply(this.node.classList,arguments);this._distributeParent();},remove:function(){this.node.classList.remove.apply(this.node.classList,arguments);this._distributeParent();},toggle:function(){this.node.classList.toggle.apply(this.node.classList,arguments);this._distributeParent();},_distributeParent:function(){if(!useShadow){this.domApi._maybeDistributeParent();}},contains:function(){return this.node.classList.contains.apply(this.node.classList,arguments);}};}());(function(){'use strict';var DomApi=Polymer.DomApi.ctor;var Settings=Polymer.Settings;DomApi.EffectiveNodesObserver=function(domApi){this.domApi=domApi;this.node=this.domApi.node;this._listeners=[];};DomApi.EffectiveNodesObserver.prototype={addListener:function(callback){if(!this._isSetup){this._setup();this._isSetup=true;}
-var listener={fn:callback,_nodes:[]};this._listeners.push(listener);this._scheduleNotify();return listener;},removeListener:function(handle){var i=this._listeners.indexOf(handle);if(i>=0){this._listeners.splice(i,1);handle._nodes=[];}
-if(!this._hasListeners()){this._cleanup();this._isSetup=false;}},_setup:function(){this._observeContentElements(this.domApi.childNodes);},_cleanup:function(){this._unobserveContentElements(this.domApi.childNodes);},_hasListeners:function(){return Boolean(this._listeners.length);},_scheduleNotify:function(){if(this._debouncer){this._debouncer.stop();}
-this._debouncer=Polymer.Debounce(this._debouncer,this._notify);this._debouncer.context=this;Polymer.dom.addDebouncer(this._debouncer);},notify:function(){if(this._hasListeners()){this._scheduleNotify();}},_notify:function(){this._beforeCallListeners();this._callListeners();},_beforeCallListeners:function(){this._updateContentElements();},_updateContentElements:function(){this._observeContentElements(this.domApi.childNodes);},_observeContentElements:function(elements){for(var i=0,n;i<elements.length&&(n=elements[i]);i++){if(this._isContent(n)){n.__observeNodesMap=n.__observeNodesMap||new WeakMap();if(!n.__observeNodesMap.has(this)){n.__observeNodesMap.set(this,this._observeContent(n));}}}},_observeContent:function(content){var self=this;var h=Polymer.dom(content).observeNodes(function(){self._scheduleNotify();});h._avoidChangeCalculation=true;return h;},_unobserveContentElements:function(elements){for(var i=0,n,h;i<elements.length&&(n=elements[i]);i++){if(this._isContent(n)){h=n.__observeNodesMap.get(this);if(h){Polymer.dom(n).unobserveNodes(h);n.__observeNodesMap.delete(this);}}}},_isContent:function(node){return node.localName==='content';},_callListeners:function(){var o$=this._listeners;var nodes=this._getEffectiveNodes();for(var i=0,o;i<o$.length&&(o=o$[i]);i++){var info=this._generateListenerInfo(o,nodes);if(info||o._alwaysNotify){this._callListener(o,info);}}},_getEffectiveNodes:function(){return this.domApi.getEffectiveChildNodes();},_generateListenerInfo:function(listener,newNodes){if(listener._avoidChangeCalculation){return true;}
-var oldNodes=listener._nodes;var info={target:this.node,addedNodes:[],removedNodes:[]};var splices=Polymer.ArraySplice.calculateSplices(newNodes,oldNodes);for(var i=0,s;i<splices.length&&(s=splices[i]);i++){for(var j=0,n;j<s.removed.length&&(n=s.removed[j]);j++){info.removedNodes.push(n);}}
-for(i=0,s;i<splices.length&&(s=splices[i]);i++){for(j=s.index;j<s.index+s.addedCount;j++){info.addedNodes.push(newNodes[j]);}}
-listener._nodes=newNodes;if(info.addedNodes.length||info.removedNodes.length){return info;}},_callListener:function(listener,info){return listener.fn.call(this.node,info);},enableShadowAttributeTracking:function(){}};if(Settings.useShadow){var baseSetup=DomApi.EffectiveNodesObserver.prototype._setup;var baseCleanup=DomApi.EffectiveNodesObserver.prototype._cleanup;Polymer.Base.mixin(DomApi.EffectiveNodesObserver.prototype,{_setup:function(){if(!this._observer){var self=this;this._mutationHandler=function(mxns){if(mxns&&mxns.length){self._scheduleNotify();}};this._observer=new MutationObserver(this._mutationHandler);this._boundFlush=function(){self._flush();};Polymer.dom.addStaticFlush(this._boundFlush);this._observer.observe(this.node,{childList:true});}
-baseSetup.call(this);},_cleanup:function(){this._observer.disconnect();this._observer=null;this._mutationHandler=null;Polymer.dom.removeStaticFlush(this._boundFlush);baseCleanup.call(this);},_flush:function(){if(this._observer){this._mutationHandler(this._observer.takeRecords());}},enableShadowAttributeTracking:function(){if(this._observer){this._makeContentListenersAlwaysNotify();this._observer.disconnect();this._observer.observe(this.node,{childList:true,attributes:true,subtree:true});var root=this.domApi.getOwnerRoot();var host=root&&root.host;if(host&&Polymer.dom(host).observer){Polymer.dom(host).observer.enableShadowAttributeTracking();}}},_makeContentListenersAlwaysNotify:function(){for(var i=0,h;i<this._listeners.length;i++){h=this._listeners[i];h._alwaysNotify=h._isContentListener;}}});}}());(function(){'use strict';var DomApi=Polymer.DomApi.ctor;var Settings=Polymer.Settings;DomApi.DistributedNodesObserver=function(domApi){DomApi.EffectiveNodesObserver.call(this,domApi);};DomApi.DistributedNodesObserver.prototype=Object.create(DomApi.EffectiveNodesObserver.prototype);Polymer.Base.mixin(DomApi.DistributedNodesObserver.prototype,{_setup:function(){},_cleanup:function(){},_beforeCallListeners:function(){},_getEffectiveNodes:function(){return this.domApi.getDistributedNodes();}});if(Settings.useShadow){Polymer.Base.mixin(DomApi.DistributedNodesObserver.prototype,{_setup:function(){if(!this._observer){var root=this.domApi.getOwnerRoot();var host=root&&root.host;if(host){var self=this;this._observer=Polymer.dom(host).observeNodes(function(){self._scheduleNotify();});this._observer._isContentListener=true;if(this._hasAttrSelect()){Polymer.dom(host).observer.enableShadowAttributeTracking();}}}},_hasAttrSelect:function(){var select=this.node.getAttribute('select');return select&&select.match(/[[.]+/);},_cleanup:function(){var root=this.domApi.getOwnerRoot();var host=root&&root.host;if(host){Polymer.dom(host).unobserveNodes(this._observer);}
-this._observer=null;}});}}());(function(){var DomApi=Polymer.DomApi;var TreeApi=Polymer.TreeApi;Polymer.Base._addFeature({_prepShady:function(){this._useContent=this._useContent||Boolean(this._template);},_setupShady:function(){this.shadyRoot=null;if(!this.__domApi){this.__domApi=null;}
-if(!this.__dom){this.__dom=null;}
-if(!this._ownerShadyRoot){this._ownerShadyRoot=undefined;}},_poolContent:function(){if(this._useContent){TreeApi.Logical.saveChildNodes(this);}},_setupRoot:function(){if(this._useContent){this._createLocalRoot();if(!this.dataHost){upgradeLogicalChildren(TreeApi.Logical.getChildNodes(this));}}},_createLocalRoot:function(){this.shadyRoot=this.root;this.shadyRoot._distributionClean=false;this.shadyRoot._hasDistributed=false;this.shadyRoot._isShadyRoot=true;this.shadyRoot._dirtyRoots=[];var i$=this.shadyRoot._insertionPoints=!this._notes||this._notes._hasContent?this.shadyRoot.querySelectorAll('content'):[];TreeApi.Logical.saveChildNodes(this.shadyRoot);for(var i=0,c;i<i$.length;i++){c=i$[i];TreeApi.Logical.saveChildNodes(c);TreeApi.Logical.saveChildNodes(c.parentNode);}
-this.shadyRoot.host=this;},distributeContent:function(updateInsertionPoints){if(this.shadyRoot){this.shadyRoot._invalidInsertionPoints=this.shadyRoot._invalidInsertionPoints||updateInsertionPoints;var host=getTopDistributingHost(this);Polymer.dom(this)._lazyDistribute(host);}},_distributeContent:function(){if(this._useContent&&!this.shadyRoot._distributionClean){if(this.shadyRoot._invalidInsertionPoints){Polymer.dom(this)._updateInsertionPoints(this);this.shadyRoot._invalidInsertionPoints=false;}
-this._beginDistribute();this._distributeDirtyRoots();this._finishDistribute();}},_beginDistribute:function(){if(this._useContent&&DomApi.hasInsertionPoint(this.shadyRoot)){this._resetDistribution();this._distributePool(this.shadyRoot,this._collectPool());}},_distributeDirtyRoots:function(){var c$=this.shadyRoot._dirtyRoots;for(var i=0,l=c$.length,c;i<l&&(c=c$[i]);i++){c._distributeContent();}
-this.shadyRoot._dirtyRoots=[];},_finishDistribute:function(){if(this._useContent){this.shadyRoot._distributionClean=true;if(DomApi.hasInsertionPoint(this.shadyRoot)){this._composeTree();notifyContentObservers(this.shadyRoot);}else{if(!this.shadyRoot._hasDistributed){TreeApi.Composed.clearChildNodes(this);this.appendChild(this.shadyRoot);}else{var children=this._composeNode(this);this._updateChildNodes(this,children);}}
-if(!this.shadyRoot._hasDistributed){notifyInitialDistribution(this);}
-this.shadyRoot._hasDistributed=true;}},elementMatches:function(selector,node){node=node||this;return DomApi.matchesSelector.call(node,selector);},_resetDistribution:function(){var children=TreeApi.Logical.getChildNodes(this);for(var i=0;i<children.length;i++){var child=children[i];if(child._destinationInsertionPoints){child._destinationInsertionPoints=undefined;}
-if(isInsertionPoint(child)){clearDistributedDestinationInsertionPoints(child);}}
-var root=this.shadyRoot;var p$=root._insertionPoints;for(var j=0;j<p$.length;j++){p$[j]._distributedNodes=[];}},_collectPool:function(){var pool=[];var children=TreeApi.Logical.getChildNodes(this);for(var i=0;i<children.length;i++){var child=children[i];if(isInsertionPoint(child)){pool.push.apply(pool,child._distributedNodes);}else{pool.push(child);}}
-return pool;},_distributePool:function(node,pool){var p$=node._insertionPoints;for(var i=0,l=p$.length,p;i<l&&(p=p$[i]);i++){this._distributeInsertionPoint(p,pool);maybeRedistributeParent(p,this);}},_distributeInsertionPoint:function(content,pool){var anyDistributed=false;for(var i=0,l=pool.length,node;i<l;i++){node=pool[i];if(!node){continue;}
-if(this._matchesContentSelect(node,content)){distributeNodeInto(node,content);pool[i]=undefined;anyDistributed=true;}}
-if(!anyDistributed){var children=TreeApi.Logical.getChildNodes(content);for(var j=0;j<children.length;j++){distributeNodeInto(children[j],content);}}},_composeTree:function(){this._updateChildNodes(this,this._composeNode(this));var p$=this.shadyRoot._insertionPoints;for(var i=0,l=p$.length,p,parent;i<l&&(p=p$[i]);i++){parent=TreeApi.Logical.getParentNode(p);if(!parent._useContent&&parent!==this&&parent!==this.shadyRoot){this._updateChildNodes(parent,this._composeNode(parent));}}},_composeNode:function(node){var children=[];var c$=TreeApi.Logical.getChildNodes(node.shadyRoot||node);for(var i=0;i<c$.length;i++){var child=c$[i];if(isInsertionPoint(child)){var distributedNodes=child._distributedNodes;for(var j=0;j<distributedNodes.length;j++){var distributedNode=distributedNodes[j];if(isFinalDestination(child,distributedNode)){children.push(distributedNode);}}}else{children.push(child);}}
-return children;},_updateChildNodes:function(container,children){var composed=TreeApi.Composed.getChildNodes(container);var splices=Polymer.ArraySplice.calculateSplices(children,composed);for(var i=0,d=0,s;i<splices.length&&(s=splices[i]);i++){for(var j=0,n;j<s.removed.length&&(n=s.removed[j]);j++){if(TreeApi.Composed.getParentNode(n)===container){TreeApi.Composed.removeChild(container,n);}
-composed.splice(s.index+d,1);}
-d-=s.addedCount;}
-for(var i=0,s,next;i<splices.length&&(s=splices[i]);i++){next=composed[s.index];for(j=s.index,n;j<s.index+s.addedCount;j++){n=children[j];TreeApi.Composed.insertBefore(container,n,next);composed.splice(j,0,n);}}},_matchesContentSelect:function(node,contentElement){var select=contentElement.getAttribute('select');if(!select){return true;}
-select=select.trim();if(!select){return true;}
-if(!(node instanceof Element)){return false;}
-var validSelectors=/^(:not\()?[*.#[a-zA-Z_|]/;if(!validSelectors.test(select)){return false;}
-return this.elementMatches(select,node);},_elementAdd:function(){},_elementRemove:function(){}});var domHostDesc={get:function(){var root=Polymer.dom(this).getOwnerRoot();return root&&root.host;},configurable:true};Object.defineProperty(Polymer.Base,'domHost',domHostDesc);Polymer.BaseDescriptors.domHost=domHostDesc;function distributeNodeInto(child,insertionPoint){insertionPoint._distributedNodes.push(child);var points=child._destinationInsertionPoints;if(!points){child._destinationInsertionPoints=[insertionPoint];}else{points.push(insertionPoint);}}
-function clearDistributedDestinationInsertionPoints(content){var e$=content._distributedNodes;if(e$){for(var i=0;i<e$.length;i++){var d=e$[i]._destinationInsertionPoints;if(d){d.splice(d.indexOf(content)+1,d.length);}}}}
-function maybeRedistributeParent(content,host){var parent=TreeApi.Logical.getParentNode(content);if(parent&&parent.shadyRoot&&DomApi.hasInsertionPoint(parent.shadyRoot)&&parent.shadyRoot._distributionClean){parent.shadyRoot._distributionClean=false;host.shadyRoot._dirtyRoots.push(parent);}}
-function isFinalDestination(insertionPoint,node){var points=node._destinationInsertionPoints;return points&&points[points.length-1]===insertionPoint;}
-function isInsertionPoint(node){return node.localName=='content';}
-function getTopDistributingHost(host){while(host&&hostNeedsRedistribution(host)){host=host.domHost;}
-return host;}
-function hostNeedsRedistribution(host){var c$=TreeApi.Logical.getChildNodes(host);for(var i=0,c;i<c$.length;i++){c=c$[i];if(c.localName&&c.localName==='content'){return host.domHost;}}}
-function notifyContentObservers(root){for(var i=0,c;i<root._insertionPoints.length;i++){c=root._insertionPoints[i];if(DomApi.hasApi(c)){Polymer.dom(c).notifyObserver();}}}
-function notifyInitialDistribution(host){if(DomApi.hasApi(host)){Polymer.dom(host).notifyObserver();}}
-var needsUpgrade=window.CustomElements&&!CustomElements.useNative;function upgradeLogicalChildren(children){if(needsUpgrade&&children){for(var i=0;i<children.length;i++){CustomElements.upgrade(children[i]);}}}}());if(Polymer.Settings.useShadow){Polymer.Base._addFeature({_poolContent:function(){},_beginDistribute:function(){},distributeContent:function(){},_distributeContent:function(){},_finishDistribute:function(){},_createLocalRoot:function(){this.createShadowRoot();this.shadowRoot.appendChild(this.root);this.root=this.shadowRoot;}});}Polymer.Async={_currVal:0,_lastVal:0,_callbacks:[],_twiddleContent:0,_twiddle:document.createTextNode(''),run:function(callback,waitTime){if(waitTime>0){return~setTimeout(callback,waitTime);}else{this._twiddle.textContent=this._twiddleContent++;this._callbacks.push(callback);return this._currVal++;}},cancel:function(handle){if(handle<0){clearTimeout(~handle);}else{var idx=handle-this._lastVal;if(idx>=0){if(!this._callbacks[idx]){throw'invalid async handle: '+handle;}
-this._callbacks[idx]=null;}}},_atEndOfMicrotask:function(){var len=this._callbacks.length;for(var i=0;i<len;i++){var cb=this._callbacks[i];if(cb){try{cb();}catch(e){i++;this._callbacks.splice(0,i);this._lastVal+=i;this._twiddle.textContent=this._twiddleContent++;throw e;}}}
-this._callbacks.splice(0,len);this._lastVal+=len;}};new window.MutationObserver(function(){Polymer.Async._atEndOfMicrotask();}).observe(Polymer.Async._twiddle,{characterData:true});Polymer.Debounce=function(){var Async=Polymer.Async;var Debouncer=function(context){this.context=context;var self=this;this.boundComplete=function(){self.complete();};};Debouncer.prototype={go:function(callback,wait){var h;this.finish=function(){Async.cancel(h);};h=Async.run(this.boundComplete,wait);this.callback=callback;},stop:function(){if(this.finish){this.finish();this.finish=null;this.callback=null;}},complete:function(){if(this.finish){var callback=this.callback;this.stop();callback.call(this.context);}}};function debounce(debouncer,callback,wait){if(debouncer){debouncer.stop();}else{debouncer=new Debouncer(this);}
-debouncer.go(callback,wait);return debouncer;}
-return debounce;}();Polymer.Base._addFeature({_setupDebouncers:function(){this._debouncers={};},debounce:function(jobName,callback,wait){return this._debouncers[jobName]=Polymer.Debounce.call(this,this._debouncers[jobName],callback,wait);},isDebouncerActive:function(jobName){var debouncer=this._debouncers[jobName];return!!(debouncer&&debouncer.finish);},flushDebouncer:function(jobName){var debouncer=this._debouncers[jobName];if(debouncer){debouncer.complete();}},cancelDebouncer:function(jobName){var debouncer=this._debouncers[jobName];if(debouncer){debouncer.stop();}}});Polymer.DomModule=document.createElement('dom-module');Polymer.Base._addFeature({_registerFeatures:function(){this._prepIs();this._prepBehaviors();this._prepConstructor();this._prepTemplate();this._prepShady();this._prepPropertyInfo();},_prepBehavior:function(b){this._addHostAttributes(b.hostAttributes);},_initFeatures:function(){this._registerHost();if(this._template){this._poolContent();this._beginHosting();this._stampTemplate();this._endHosting();}
-this._marshalHostAttributes();this._setupDebouncers();this._marshalBehaviors();this._tryReady();},_marshalBehavior:function(b){}});(function(){Polymer.nar=[];var disableUpgradeEnabled=Polymer.Settings.disableUpgradeEnabled;Polymer.Annotations={parseAnnotations:function(template,stripWhiteSpace){var list=[];var content=template._content||template.content;this._parseNodeAnnotations(content,list,stripWhiteSpace||template.hasAttribute('strip-whitespace'));return list;},_parseNodeAnnotations:function(node,list,stripWhiteSpace){return node.nodeType===Node.TEXT_NODE?this._parseTextNodeAnnotation(node,list):this._parseElementAnnotations(node,list,stripWhiteSpace);},_bindingRegex:function(){var IDENT='(?:'+'[a-zA-Z_$][\\w.:$\\-*]*'+')';var NUMBER='(?:'+'[-+]?[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?'+')';var SQUOTE_STRING='(?:'+'\'(?:[^\'\\\\]|\\\\.)*\''+')';var DQUOTE_STRING='(?:'+'"(?:[^"\\\\]|\\\\.)*"'+')';var STRING='(?:'+SQUOTE_STRING+'|'+DQUOTE_STRING+')';var ARGUMENT='(?:'+IDENT+'|'+NUMBER+'|'+STRING+'\\s*'+')';var ARGUMENTS='(?:'+ARGUMENT+'(?:,\\s*'+ARGUMENT+')*'+')';var ARGUMENT_LIST='(?:'+'\\(\\s*'+'(?:'+ARGUMENTS+'?'+')'+'\\)\\s*'+')';var BINDING='('+IDENT+'\\s*'+ARGUMENT_LIST+'?'+')';var OPEN_BRACKET='(\\[\\[|{{)'+'\\s*';var CLOSE_BRACKET='(?:]]|}})';var NEGATE='(?:(!)\\s*)?';var EXPRESSION=OPEN_BRACKET+NEGATE+BINDING+CLOSE_BRACKET;return new RegExp(EXPRESSION,'g');}(),_parseBindings:function(text){var re=this._bindingRegex;var parts=[];var lastIndex=0;var m;while((m=re.exec(text))!==null){if(m.index>lastIndex){parts.push({literal:text.slice(lastIndex,m.index)});}
-var mode=m[1][0];var negate=Boolean(m[2]);var value=m[3].trim();var customEvent,notifyEvent,colon;if(mode=='{'&&(colon=value.indexOf('::'))>0){notifyEvent=value.substring(colon+2);value=value.substring(0,colon);customEvent=true;}
-parts.push({compoundIndex:parts.length,value:value,mode:mode,negate:negate,event:notifyEvent,customEvent:customEvent});lastIndex=re.lastIndex;}
-if(lastIndex&&lastIndex<text.length){var literal=text.substring(lastIndex);if(literal){parts.push({literal:literal});}}
-if(parts.length){return parts;}},_literalFromParts:function(parts){var s='';for(var i=0;i<parts.length;i++){var literal=parts[i].literal;s+=literal||'';}
-return s;},_parseTextNodeAnnotation:function(node,list){var parts=this._parseBindings(node.textContent);if(parts){node.textContent=this._literalFromParts(parts)||' ';var annote={bindings:[{kind:'text',name:'textContent',parts:parts,isCompound:parts.length!==1}]};list.push(annote);return annote;}},_parseElementAnnotations:function(element,list,stripWhiteSpace){var annote={bindings:[],events:[]};if(element.localName==='content'){list._hasContent=true;}
-this._parseChildNodesAnnotations(element,annote,list,stripWhiteSpace);if(element.attributes){this._parseNodeAttributeAnnotations(element,annote,list);if(this.prepElement){this.prepElement(element);}}
-if(annote.bindings.length||annote.events.length||annote.id){list.push(annote);}
-return annote;},_parseChildNodesAnnotations:function(root,annote,list,stripWhiteSpace){if(root.firstChild){var node=root.firstChild;var i=0;while(node){var next=node.nextSibling;if(node.localName==='template'&&!node.hasAttribute('preserve-content')){this._parseTemplate(node,i,list,annote,stripWhiteSpace);}
-if(node.localName=='slot'){node=this._replaceSlotWithContent(node);}
-if(node.nodeType===Node.TEXT_NODE){var n=next;while(n&&n.nodeType===Node.TEXT_NODE){node.textContent+=n.textContent;next=n.nextSibling;root.removeChild(n);n=next;}
-if(stripWhiteSpace&&!node.textContent.trim()){root.removeChild(node);i--;}}
-if(node.parentNode){var childAnnotation=this._parseNodeAnnotations(node,list,stripWhiteSpace);if(childAnnotation){childAnnotation.parent=annote;childAnnotation.index=i;}}
-node=next;i++;}}},_replaceSlotWithContent:function(slot){var content=slot.ownerDocument.createElement('content');while(slot.firstChild){content.appendChild(slot.firstChild);}
-var attrs=slot.attributes;for(var i=0;i<attrs.length;i++){var attr=attrs[i];content.setAttribute(attr.name,attr.value);}
-var name=slot.getAttribute('name');if(name){content.setAttribute('select','[slot=\''+name+'\']');}
-slot.parentNode.replaceChild(content,slot);return content;},_parseTemplate:function(node,index,list,parent,stripWhiteSpace){var content=document.createDocumentFragment();content._notes=this.parseAnnotations(node,stripWhiteSpace);content.appendChild(node.content);list.push({bindings:Polymer.nar,events:Polymer.nar,templateContent:content,parent:parent,index:index});},_parseNodeAttributeAnnotations:function(node,annotation){var attrs=Array.prototype.slice.call(node.attributes);for(var i=attrs.length-1,a;a=attrs[i];i--){var n=a.name;var v=a.value;var b;if(n.slice(0,3)==='on-'){node.removeAttribute(n);annotation.events.push({name:n.slice(3),value:v});}else if(b=this._parseNodeAttributeAnnotation(node,n,v)){annotation.bindings.push(b);}else if(n==='id'){annotation.id=v;}}},_parseNodeAttributeAnnotation:function(node,name,value){var parts=this._parseBindings(value);if(parts){var origName=name;var kind='property';if(name[name.length-1]=='$'){name=name.slice(0,-1);kind='attribute';}
-var literal=this._literalFromParts(parts);if(literal&&kind=='attribute'){node.setAttribute(name,literal);}
-if(node.localName==='input'&&origName==='value'){node.setAttribute(origName,'');}
-if(disableUpgradeEnabled&&origName==='disable-upgrade$'){node.setAttribute(name,'');}
-node.removeAttribute(origName);var propertyName=Polymer.CaseMap.dashToCamelCase(name);if(kind==='property'){name=propertyName;}
-return{kind:kind,name:name,propertyName:propertyName,parts:parts,literal:literal,isCompound:parts.length!==1};}},findAnnotatedNode:function(root,annote){var parent=annote.parent&&Polymer.Annotations.findAnnotatedNode(root,annote.parent);if(parent){for(var n=parent.firstChild,i=0;n;n=n.nextSibling){if(annote.index===i++){return n;}}}else{return root;}}};}());Polymer.Path={root:function(path){var dotIndex=path.indexOf('.');if(dotIndex===-1){return path;}
-return path.slice(0,dotIndex);},isDeep:function(path){return path.indexOf('.')!==-1;},isAncestor:function(base,path){return base.indexOf(path+'.')===0;},isDescendant:function(base,path){return path.indexOf(base+'.')===0;},translate:function(base,newBase,path){return newBase+path.slice(base.length);},matches:function(base,wildcard,path){return base===path||this.isAncestor(base,path)||Boolean(wildcard)&&this.isDescendant(base,path);}};Polymer.Base._addFeature({_prepAnnotations:function(){if(!this._template){this._notes=[];}else{var self=this;Polymer.Annotations.prepElement=function(element){self._prepElement(element);};if(this._template._content&&this._template._content._notes){this._notes=this._template._content._notes;}else{this._notes=Polymer.Annotations.parseAnnotations(this._template);this._processAnnotations(this._notes);}
-Polymer.Annotations.prepElement=null;}},_processAnnotations:function(notes){for(var i=0;i<notes.length;i++){var note=notes[i];for(var j=0;j<note.bindings.length;j++){var b=note.bindings[j];for(var k=0;k<b.parts.length;k++){var p=b.parts[k];if(!p.literal){var signature=this._parseMethod(p.value);if(signature){p.signature=signature;}else{p.model=Polymer.Path.root(p.value);}}}}
-if(note.templateContent){this._processAnnotations(note.templateContent._notes);var pp=note.templateContent._parentProps=this._discoverTemplateParentProps(note.templateContent._notes);var bindings=[];for(var prop in pp){var name='_parent_'+prop;bindings.push({index:note.index,kind:'property',name:name,propertyName:name,parts:[{mode:'{',model:prop,value:prop}]});}
-note.bindings=note.bindings.concat(bindings);}}},_discoverTemplateParentProps:function(notes){var pp={};for(var i=0,n;i<notes.length&&(n=notes[i]);i++){for(var j=0,b$=n.bindings,b;j<b$.length&&(b=b$[j]);j++){for(var k=0,p$=b.parts,p;k<p$.length&&(p=p$[k]);k++){if(p.signature){var args=p.signature.args;for(var kk=0;kk<args.length;kk++){var model=args[kk].model;if(model){pp[model]=true;}}
-if(p.signature.dynamicFn){pp[p.signature.method]=true;}}else{if(p.model){pp[p.model]=true;}}}}
-if(n.templateContent){var tpp=n.templateContent._parentProps;Polymer.Base.mixin(pp,tpp);}}
-return pp;},_prepElement:function(element){Polymer.ResolveUrl.resolveAttrs(element,this._template.ownerDocument);},_findAnnotatedNode:Polymer.Annotations.findAnnotatedNode,_marshalAnnotationReferences:function(){if(this._template){this._marshalIdNodes();this._marshalAnnotatedNodes();this._marshalAnnotatedListeners();}},_configureAnnotationReferences:function(){var notes=this._notes;var nodes=this._nodes;for(var i=0;i<notes.length;i++){var note=notes[i];var node=nodes[i];this._configureTemplateContent(note,node);this._configureCompoundBindings(note,node);}},_configureTemplateContent:function(note,node){if(note.templateContent){node._content=note.templateContent;}},_configureCompoundBindings:function(note,node){var bindings=note.bindings;for(var i=0;i<bindings.length;i++){var binding=bindings[i];if(binding.isCompound){var storage=node.__compoundStorage__||(node.__compoundStorage__={});var parts=binding.parts;var literals=new Array(parts.length);for(var j=0;j<parts.length;j++){literals[j]=parts[j].literal;}
-var name=binding.name;storage[name]=literals;if(binding.literal&&binding.kind=='property'){if(node._configValue){node._configValue(name,binding.literal);}else{node[name]=binding.literal;}}}}},_marshalIdNodes:function(){this.$={};for(var i=0,l=this._notes.length,a;i<l&&(a=this._notes[i]);i++){if(a.id){this.$[a.id]=this._findAnnotatedNode(this.root,a);}}},_marshalAnnotatedNodes:function(){if(this._notes&&this._notes.length){var r=new Array(this._notes.length);for(var i=0;i<this._notes.length;i++){r[i]=this._findAnnotatedNode(this.root,this._notes[i]);}
-this._nodes=r;}},_marshalAnnotatedListeners:function(){for(var i=0,l=this._notes.length,a;i<l&&(a=this._notes[i]);i++){if(a.events&&a.events.length){var node=this._findAnnotatedNode(this.root,a);for(var j=0,e$=a.events,e;j<e$.length&&(e=e$[j]);j++){this.listen(node,e.name,e.value);}}}}});Polymer.Base._addFeature({listeners:{},_listenListeners:function(listeners){var node,name,eventName;for(eventName in listeners){if(eventName.indexOf('.')<0){node=this;name=eventName;}else{name=eventName.split('.');node=this.$[name[0]];name=name[1];}
-this.listen(node,name,listeners[eventName]);}},listen:function(node,eventName,methodName){var handler=this._recallEventHandler(this,eventName,node,methodName);if(!handler){handler=this._createEventHandler(node,eventName,methodName);}
-if(handler._listening){return;}
-this._listen(node,eventName,handler);handler._listening=true;},_boundListenerKey:function(eventName,methodName){return eventName+':'+methodName;},_recordEventHandler:function(host,eventName,target,methodName,handler){var hbl=host.__boundListeners;if(!hbl){hbl=host.__boundListeners=new WeakMap();}
-var bl=hbl.get(target);if(!bl){bl={};if(!Polymer.Settings.isIE||target!=window){hbl.set(target,bl);}}
-var key=this._boundListenerKey(eventName,methodName);bl[key]=handler;},_recallEventHandler:function(host,eventName,target,methodName){var hbl=host.__boundListeners;if(!hbl){return;}
-var bl=hbl.get(target);if(!bl){return;}
-var key=this._boundListenerKey(eventName,methodName);return bl[key];},_createEventHandler:function(node,eventName,methodName){var host=this;var handler=function(e){if(host[methodName]){host[methodName](e,e.detail);}else{host._warn(host._logf('_createEventHandler','listener method `'+methodName+'` not defined'));}};handler._listening=false;this._recordEventHandler(host,eventName,node,methodName,handler);return handler;},unlisten:function(node,eventName,methodName){var handler=this._recallEventHandler(this,eventName,node,methodName);if(handler){this._unlisten(node,eventName,handler);handler._listening=false;}},_listen:function(node,eventName,handler){node.addEventListener(eventName,handler);},_unlisten:function(node,eventName,handler){node.removeEventListener(eventName,handler);}});(function(){'use strict';var wrap=Polymer.DomApi.wrap;var HAS_NATIVE_TA=typeof document.head.style.touchAction==='string';var GESTURE_KEY='__polymerGestures';var HANDLED_OBJ='__polymerGesturesHandled';var TOUCH_ACTION='__polymerGesturesTouchAction';var TAP_DISTANCE=25;var TRACK_DISTANCE=5;var TRACK_LENGTH=2;var MOUSE_TIMEOUT=2500;var MOUSE_EVENTS=['mousedown','mousemove','mouseup','click'];var MOUSE_WHICH_TO_BUTTONS=[0,1,4,2];var MOUSE_HAS_BUTTONS=function(){try{return new MouseEvent('test',{buttons:1}).buttons===1;}catch(e){return false;}}();function isMouseEvent(name){return MOUSE_EVENTS.indexOf(name)>-1;}
-var SUPPORTS_PASSIVE=false;(function(){try{var opts=Object.defineProperty({},'passive',{get:function(){SUPPORTS_PASSIVE=true;}});window.addEventListener('test',null,opts);window.removeEventListener('test',null,opts);}catch(e){}}());function PASSIVE_TOUCH(){if(HAS_NATIVE_TA&&SUPPORTS_PASSIVE&&Polymer.Settings.passiveTouchGestures){return{passive:true};}}
-var IS_TOUCH_ONLY=navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/);var mouseCanceller=function(mouseEvent){var sc=mouseEvent.sourceCapabilities;if(sc&&!sc.firesTouchEvents){return;}
-mouseEvent[HANDLED_OBJ]={skip:true};if(mouseEvent.type==='click'){var path=Polymer.dom(mouseEvent).path;for(var i=0;i<path.length;i++){if(path[i]===POINTERSTATE.mouse.target){return;}}
-mouseEvent.preventDefault();mouseEvent.stopPropagation();}};function setupTeardownMouseCanceller(setup){var events=IS_TOUCH_ONLY?['click']:MOUSE_EVENTS;for(var i=0,en;i<events.length;i++){en=events[i];if(setup){document.addEventListener(en,mouseCanceller,true);}else{document.removeEventListener(en,mouseCanceller,true);}}}
-function ignoreMouse(ev){if(!POINTERSTATE.mouse.mouseIgnoreJob){setupTeardownMouseCanceller(true);}
-var unset=function(){setupTeardownMouseCanceller();POINTERSTATE.mouse.target=null;POINTERSTATE.mouse.mouseIgnoreJob=null;};POINTERSTATE.mouse.target=Polymer.dom(ev).rootTarget;POINTERSTATE.mouse.mouseIgnoreJob=Polymer.Debounce(POINTERSTATE.mouse.mouseIgnoreJob,unset,MOUSE_TIMEOUT);}
-function hasLeftMouseButton(ev){var type=ev.type;if(!isMouseEvent(type)){return false;}
-if(type==='mousemove'){var buttons=ev.buttons===undefined?1:ev.buttons;if(ev instanceof window.MouseEvent&&!MOUSE_HAS_BUTTONS){buttons=MOUSE_WHICH_TO_BUTTONS[ev.which]||0;}
-return Boolean(buttons&1);}else{var button=ev.button===undefined?0:ev.button;return button===0;}}
-function isSyntheticClick(ev){if(ev.type==='click'){if(ev.detail===0){return true;}
-var t=Gestures.findOriginalTarget(ev);var bcr=t.getBoundingClientRect();var x=ev.pageX,y=ev.pageY;return!(x>=bcr.left&&x<=bcr.right&&(y>=bcr.top&&y<=bcr.bottom));}
-return false;}
-var POINTERSTATE={mouse:{target:null,mouseIgnoreJob:null},touch:{x:0,y:0,id:-1,scrollDecided:false}};function firstTouchAction(ev){var path=Polymer.dom(ev).path;var ta='auto';for(var i=0,n;i<path.length;i++){n=path[i];if(n[TOUCH_ACTION]){ta=n[TOUCH_ACTION];break;}}
-return ta;}
-function trackDocument(stateObj,movefn,upfn){stateObj.movefn=movefn;stateObj.upfn=upfn;document.addEventListener('mousemove',movefn);document.addEventListener('mouseup',upfn);}
-function untrackDocument(stateObj){document.removeEventListener('mousemove',stateObj.movefn);document.removeEventListener('mouseup',stateObj.upfn);stateObj.movefn=null;stateObj.upfn=null;}
-document.addEventListener('touchend',ignoreMouse,SUPPORTS_PASSIVE?{passive:true}:false);var Gestures={gestures:{},recognizers:[],deepTargetFind:function(x,y){var node=document.elementFromPoint(x,y);var next=node;while(next&&next.shadowRoot){next=next.shadowRoot.elementFromPoint(x,y);if(next){node=next;}}
-return node;},findOriginalTarget:function(ev){if(ev.path){return ev.path[0];}
-return ev.target;},handleNative:function(ev){var handled;var type=ev.type;var node=wrap(ev.currentTarget);var gobj=node[GESTURE_KEY];if(!gobj){return;}
-var gs=gobj[type];if(!gs){return;}
-if(!ev[HANDLED_OBJ]){ev[HANDLED_OBJ]={};if(type.slice(0,5)==='touch'){var t=ev.changedTouches[0];if(type==='touchstart'){if(ev.touches.length===1){POINTERSTATE.touch.id=t.identifier;}}
-if(POINTERSTATE.touch.id!==t.identifier){return;}
-if(!HAS_NATIVE_TA){if(type==='touchstart'||type==='touchmove'){Gestures.handleTouchAction(ev);}}}}
-handled=ev[HANDLED_OBJ];if(handled.skip){return;}
-var recognizers=Gestures.recognizers;for(var i=0,r;i<recognizers.length;i++){r=recognizers[i];if(gs[r.name]&&!handled[r.name]){if(r.flow&&r.flow.start.indexOf(ev.type)>-1&&r.reset){r.reset();}}}
-for(i=0,r;i<recognizers.length;i++){r=recognizers[i];if(gs[r.name]&&!handled[r.name]){handled[r.name]=true;r[type](ev);}}},handleTouchAction:function(ev){var t=ev.changedTouches[0];var type=ev.type;if(type==='touchstart'){POINTERSTATE.touch.x=t.clientX;POINTERSTATE.touch.y=t.clientY;POINTERSTATE.touch.scrollDecided=false;}else if(type==='touchmove'){if(POINTERSTATE.touch.scrollDecided){return;}
-POINTERSTATE.touch.scrollDecided=true;var ta=firstTouchAction(ev);var prevent=false;var dx=Math.abs(POINTERSTATE.touch.x-t.clientX);var dy=Math.abs(POINTERSTATE.touch.y-t.clientY);if(!ev.cancelable){}else if(ta==='none'){prevent=true;}else if(ta==='pan-x'){prevent=dy>dx;}else if(ta==='pan-y'){prevent=dx>dy;}
-if(prevent){ev.preventDefault();}else{Gestures.prevent('track');}}},add:function(node,evType,handler){node=wrap(node);var recognizer=this.gestures[evType];var deps=recognizer.deps;var name=recognizer.name;var gobj=node[GESTURE_KEY];if(!gobj){node[GESTURE_KEY]=gobj={};}
-for(var i=0,dep,gd;i<deps.length;i++){dep=deps[i];if(IS_TOUCH_ONLY&&isMouseEvent(dep)&&dep!=='click'){continue;}
-gd=gobj[dep];if(!gd){gobj[dep]=gd={_count:0};}
-if(gd._count===0){var options=!isMouseEvent(dep)&&PASSIVE_TOUCH();node.addEventListener(dep,this.handleNative,options);}
-gd[name]=(gd[name]||0)+1;gd._count=(gd._count||0)+1;}
-node.addEventListener(evType,handler);if(recognizer.touchAction){this.setTouchAction(node,recognizer.touchAction);}},remove:function(node,evType,handler){node=wrap(node);var recognizer=this.gestures[evType];var deps=recognizer.deps;var name=recognizer.name;var gobj=node[GESTURE_KEY];if(gobj){for(var i=0,dep,gd;i<deps.length;i++){dep=deps[i];gd=gobj[dep];if(gd&&gd[name]){gd[name]=(gd[name]||1)-1;gd._count=(gd._count||1)-1;if(gd._count===0){var options=!isMouseEvent(dep)&&PASSIVE_TOUCH();node.removeEventListener(dep,this.handleNative,options);}}}}
-node.removeEventListener(evType,handler);},register:function(recog){this.recognizers.push(recog);for(var i=0;i<recog.emits.length;i++){this.gestures[recog.emits[i]]=recog;}},findRecognizerByEvent:function(evName){for(var i=0,r;i<this.recognizers.length;i++){r=this.recognizers[i];for(var j=0,n;j<r.emits.length;j++){n=r.emits[j];if(n===evName){return r;}}}
-return null;},setTouchAction:function(node,value){if(HAS_NATIVE_TA){node.style.touchAction=value;}
-node[TOUCH_ACTION]=value;},fire:function(target,type,detail){var ev=Polymer.Base.fire(type,detail,{node:target,bubbles:true,cancelable:true});if(ev.defaultPrevented){var preventer=detail.preventer||detail.sourceEvent;if(preventer&&preventer.preventDefault){preventer.preventDefault();}}},prevent:function(evName){var recognizer=this.findRecognizerByEvent(evName);if(recognizer.info){recognizer.info.prevent=true;}},resetMouseCanceller:function(){if(POINTERSTATE.mouse.mouseIgnoreJob){POINTERSTATE.mouse.mouseIgnoreJob.complete();}}};Gestures.register({name:'downup',deps:['mousedown','touchstart','touchend'],flow:{start:['mousedown','touchstart'],end:['mouseup','touchend']},emits:['down','up'],info:{movefn:null,upfn:null},reset:function(){untrackDocument(this.info);},mousedown:function(e){if(!hasLeftMouseButton(e)){return;}
-var t=Gestures.findOriginalTarget(e);var self=this;var movefn=function movefn(e){if(!hasLeftMouseButton(e)){self.fire('up',t,e);untrackDocument(self.info);}};var upfn=function upfn(e){if(hasLeftMouseButton(e)){self.fire('up',t,e);}
-untrackDocument(self.info);};trackDocument(this.info,movefn,upfn);this.fire('down',t,e);},touchstart:function(e){this.fire('down',Gestures.findOriginalTarget(e),e.changedTouches[0],e);},touchend:function(e){this.fire('up',Gestures.findOriginalTarget(e),e.changedTouches[0],e);},fire:function(type,target,event,preventer){Gestures.fire(target,type,{x:event.clientX,y:event.clientY,sourceEvent:event,preventer:preventer,prevent:function(e){return Gestures.prevent(e);}});}});Gestures.register({name:'track',touchAction:'none',deps:['mousedown','touchstart','touchmove','touchend'],flow:{start:['mousedown','touchstart'],end:['mouseup','touchend']},emits:['track'],info:{x:0,y:0,state:'start',started:false,moves:[],addMove:function(move){if(this.moves.length>TRACK_LENGTH){this.moves.shift();}
-this.moves.push(move);},movefn:null,upfn:null,prevent:false},reset:function(){this.info.state='start';this.info.started=false;this.info.moves=[];this.info.x=0;this.info.y=0;this.info.prevent=false;untrackDocument(this.info);},hasMovedEnough:function(x,y){if(this.info.prevent){return false;}
-if(this.info.started){return true;}
-var dx=Math.abs(this.info.x-x);var dy=Math.abs(this.info.y-y);return dx>=TRACK_DISTANCE||dy>=TRACK_DISTANCE;},mousedown:function(e){if(!hasLeftMouseButton(e)){return;}
-var t=Gestures.findOriginalTarget(e);var self=this;var movefn=function movefn(e){var x=e.clientX,y=e.clientY;if(self.hasMovedEnough(x,y)){self.info.state=self.info.started?e.type==='mouseup'?'end':'track':'start';if(self.info.state==='start'){Gestures.prevent('tap');}
-self.info.addMove({x:x,y:y});if(!hasLeftMouseButton(e)){self.info.state='end';untrackDocument(self.info);}
-self.fire(t,e);self.info.started=true;}};var upfn=function upfn(e){if(self.info.started){movefn(e);}
-untrackDocument(self.info);};trackDocument(this.info,movefn,upfn);this.info.x=e.clientX;this.info.y=e.clientY;},touchstart:function(e){var ct=e.changedTouches[0];this.info.x=ct.clientX;this.info.y=ct.clientY;},touchmove:function(e){var t=Gestures.findOriginalTarget(e);var ct=e.changedTouches[0];var x=ct.clientX,y=ct.clientY;if(this.hasMovedEnough(x,y)){if(this.info.state==='start'){Gestures.prevent('tap');}
-this.info.addMove({x:x,y:y});this.fire(t,ct);this.info.state='track';this.info.started=true;}},touchend:function(e){var t=Gestures.findOriginalTarget(e);var ct=e.changedTouches[0];if(this.info.started){this.info.state='end';this.info.addMove({x:ct.clientX,y:ct.clientY});this.fire(t,ct,e);}},fire:function(target,touch,preventer){var secondlast=this.info.moves[this.info.moves.length-2];var lastmove=this.info.moves[this.info.moves.length-1];var dx=lastmove.x-this.info.x;var dy=lastmove.y-this.info.y;var ddx,ddy=0;if(secondlast){ddx=lastmove.x-secondlast.x;ddy=lastmove.y-secondlast.y;}
-return Gestures.fire(target,'track',{state:this.info.state,x:touch.clientX,y:touch.clientY,dx:dx,dy:dy,ddx:ddx,ddy:ddy,sourceEvent:touch,preventer:preventer,hover:function(){return Gestures.deepTargetFind(touch.clientX,touch.clientY);}});}});Gestures.register({name:'tap',deps:['mousedown','click','touchstart','touchend'],flow:{start:['mousedown','touchstart'],end:['click','touchend']},emits:['tap'],info:{x:NaN,y:NaN,prevent:false},reset:function(){this.info.x=NaN;this.info.y=NaN;this.info.prevent=false;},save:function(e){this.info.x=e.clientX;this.info.y=e.clientY;},mousedown:function(e){if(hasLeftMouseButton(e)){this.save(e);}},click:function(e){if(hasLeftMouseButton(e)){this.forward(e);}},touchstart:function(e){this.save(e.changedTouches[0],e);},touchend:function(e){this.forward(e.changedTouches[0],e);},forward:function(e,preventer){var dx=Math.abs(e.clientX-this.info.x);var dy=Math.abs(e.clientY-this.info.y);var t=Gestures.findOriginalTarget(e);if(isNaN(dx)||isNaN(dy)||dx<=TAP_DISTANCE&&dy<=TAP_DISTANCE||isSyntheticClick(e)){if(!this.info.prevent){Gestures.fire(t,'tap',{x:e.clientX,y:e.clientY,sourceEvent:e,preventer:preventer});}}}});var DIRECTION_MAP={x:'pan-x',y:'pan-y',none:'none',all:'auto'};Polymer.Base._addFeature({_setupGestures:function(){this.__polymerGestures=null;},_listen:function(node,eventName,handler){if(Gestures.gestures[eventName]){Gestures.add(node,eventName,handler);}else{node.addEventListener(eventName,handler);}},_unlisten:function(node,eventName,handler){if(Gestures.gestures[eventName]){Gestures.remove(node,eventName,handler);}else{node.removeEventListener(eventName,handler);}},setScrollDirection:function(direction,node){node=node||this;Gestures.setTouchAction(node,DIRECTION_MAP[direction]||'auto');}});Polymer.Gestures=Gestures;}());(function(){'use strict';Polymer.Base._addFeature({$$:function(slctr){return Polymer.dom(this.root).querySelector(slctr);},toggleClass:function(name,bool,node){node=node||this;if(arguments.length==1){bool=!node.classList.contains(name);}
-if(bool){Polymer.dom(node).classList.add(name);}else{Polymer.dom(node).classList.remove(name);}},toggleAttribute:function(name,bool,node){node=node||this;if(arguments.length==1){bool=!node.hasAttribute(name);}
-if(bool){Polymer.dom(node).setAttribute(name,'');}else{Polymer.dom(node).removeAttribute(name);}},classFollows:function(name,toElement,fromElement){if(fromElement){Polymer.dom(fromElement).classList.remove(name);}
-if(toElement){Polymer.dom(toElement).classList.add(name);}},attributeFollows:function(name,toElement,fromElement){if(fromElement){Polymer.dom(fromElement).removeAttribute(name);}
-if(toElement){Polymer.dom(toElement).setAttribute(name,'');}},getEffectiveChildNodes:function(){return Polymer.dom(this).getEffectiveChildNodes();},getEffectiveChildren:function(){var list=Polymer.dom(this).getEffectiveChildNodes();return list.filter(function(n){return n.nodeType===Node.ELEMENT_NODE;});},getEffectiveTextContent:function(){var cn=this.getEffectiveChildNodes();var tc=[];for(var i=0,c;c=cn[i];i++){if(c.nodeType!==Node.COMMENT_NODE){tc.push(Polymer.dom(c).textContent);}}
-return tc.join('');},queryEffectiveChildren:function(slctr){var e$=Polymer.dom(this).queryDistributedElements(slctr);return e$&&e$[0];},queryAllEffectiveChildren:function(slctr){return Polymer.dom(this).queryDistributedElements(slctr);},getContentChildNodes:function(slctr){var content=Polymer.dom(this.root).querySelector(slctr||'content');return content?Polymer.dom(content).getDistributedNodes():[];},getContentChildren:function(slctr){return this.getContentChildNodes(slctr).filter(function(n){return n.nodeType===Node.ELEMENT_NODE;});},fire:function(type,detail,options){options=options||Polymer.nob;var node=options.node||this;detail=detail===null||detail===undefined?{}:detail;var bubbles=options.bubbles===undefined?true:options.bubbles;var cancelable=Boolean(options.cancelable);var useCache=options._useCache;var event=this._getEvent(type,bubbles,cancelable,useCache);event.detail=detail;if(useCache){this.__eventCache[type]=null;}
-node.dispatchEvent(event);if(useCache){this.__eventCache[type]=event;}
-return event;},__eventCache:{},_getEvent:function(type,bubbles,cancelable,useCache){var event=useCache&&this.__eventCache[type];if(!event||(event.bubbles!=bubbles||event.cancelable!=cancelable)){event=new Event(type,{bubbles:Boolean(bubbles),cancelable:cancelable});}
-return event;},async:function(callback,waitTime){var self=this;return Polymer.Async.run(function(){callback.call(self);},waitTime);},cancelAsync:function(handle){Polymer.Async.cancel(handle);},arrayDelete:function(path,item){var index;if(Array.isArray(path)){index=path.indexOf(item);if(index>=0){return path.splice(index,1);}}else{var arr=this._get(path);index=arr.indexOf(item);if(index>=0){return this.splice(path,index,1);}}},transform:function(transform,node){node=node||this;node.style.webkitTransform=transform;node.style.transform=transform;},translate3d:function(x,y,z,node){node=node||this;this.transform('translate3d('+x+','+y+','+z+')',node);},importHref:function(href,onload,onerror,optAsync){var link=document.createElement('link');link.rel='import';link.href=href;var list=Polymer.Base.importHref.imported=Polymer.Base.importHref.imported||{};var cached=list[link.href];var imprt=cached||link;var self=this;var loadListener=function(e){e.target.__firedLoad=true;e.target.removeEventListener('load',loadListener);e.target.removeEventListener('error',errorListener);return onload.call(self,e);};var errorListener=function(e){e.target.__firedError=true;e.target.removeEventListener('load',loadListener);e.target.removeEventListener('error',errorListener);return onerror.call(self,e);};if(onload){imprt.addEventListener('load',loadListener);}
-if(onerror){imprt.addEventListener('error',errorListener);}
-if(cached){if(cached.__firedLoad){cached.dispatchEvent(new Event('load'));}
-if(cached.__firedError){cached.dispatchEvent(new Event('error'));}}else{list[link.href]=link;optAsync=Boolean(optAsync);if(optAsync){link.setAttribute('async','');}
-document.head.appendChild(link);}
-return imprt;},create:function(tag,props){var elt=document.createElement(tag);if(props){for(var n in props){elt[n]=props[n];}}
-return elt;},isLightDescendant:function(node){return this!==node&&this.contains(node)&&Polymer.dom(this).getOwnerRoot()===Polymer.dom(node).getOwnerRoot();},isLocalDescendant:function(node){return this.root===Polymer.dom(node).getOwnerRoot();}});if(!Polymer.Settings.useNativeCustomElements){var importHref=Polymer.Base.importHref;Polymer.Base.importHref=function(href,onload,onerror,optAsync){CustomElements.ready=false;var loadFn=function(e){CustomElements.upgradeDocumentTree(document);CustomElements.ready=true;if(onload){return onload.call(this,e);}};return importHref.call(this,href,loadFn,onerror,optAsync);};}}());Polymer.Bind={prepareModel:function(model){Polymer.Base.mixin(model,this._modelApi);},_modelApi:{_notifyChange:function(source,event,value){value=value===undefined?this[source]:value;event=event||Polymer.CaseMap.camelToDashCase(source)+'-changed';this.fire(event,{value:value},{bubbles:false,cancelable:false,_useCache:Polymer.Settings.eventDataCache||!Polymer.Settings.isIE});},_propertySetter:function(property,value,effects,fromAbove){var old=this.__data__[property];if(old!==value&&(old===old||value===value)){this.__data__[property]=value;if(typeof value=='object'){this._clearPath(property);}
-if(this._propertyChanged){this._propertyChanged(property,value,old);}
-if(effects){this._effectEffects(property,value,effects,old,fromAbove);}}
-return old;},__setProperty:function(property,value,quiet,node){node=node||this;var effects=node._propertyEffects&&node._propertyEffects[property];if(effects){node._propertySetter(property,value,effects,quiet);}else if(node[property]!==value){node[property]=value;}},_effectEffects:function(property,value,effects,old,fromAbove){for(var i=0,l=effects.length,fx;i<l&&(fx=effects[i]);i++){fx.fn.call(this,property,this[property],fx.effect,old,fromAbove);}},_clearPath:function(path){for(var prop in this.__data__){if(Polymer.Path.isDescendant(path,prop)){this.__data__[prop]=undefined;}}}},ensurePropertyEffects:function(model,property){if(!model._propertyEffects){model._propertyEffects={};}
-var fx=model._propertyEffects[property];if(!fx){fx=model._propertyEffects[property]=[];}
-return fx;},addPropertyEffect:function(model,property,kind,effect){var fx=this.ensurePropertyEffects(model,property);var propEffect={kind:kind,effect:effect,fn:Polymer.Bind['_'+kind+'Effect']};fx.push(propEffect);return propEffect;},createBindings:function(model){var fx$=model._propertyEffects;if(fx$){for(var n in fx$){var fx=fx$[n];fx.sort(this._sortPropertyEffects);this._createAccessors(model,n,fx);}}},_sortPropertyEffects:function(){var EFFECT_ORDER={'compute':0,'annotation':1,'annotatedComputation':2,'reflect':3,'notify':4,'observer':5,'complexObserver':6,'function':7};return function(a,b){return EFFECT_ORDER[a.kind]-EFFECT_ORDER[b.kind];};}(),_createAccessors:function(model,property,effects){var defun={get:function(){return this.__data__[property];}};var setter=function(value){this._propertySetter(property,value,effects);};var info=model.getPropertyInfo&&model.getPropertyInfo(property);if(info&&info.readOnly){if(!info.computed){model['_set'+this.upper(property)]=setter;}}else{defun.set=setter;}
-Object.defineProperty(model,property,defun);},upper:function(name){return name[0].toUpperCase()+name.substring(1);},_addAnnotatedListener:function(model,index,property,path,event,negated){if(!model._bindListeners){model._bindListeners=[];}
-var fn=this._notedListenerFactory(property,path,Polymer.Path.isDeep(path),negated);var eventName=event||Polymer.CaseMap.camelToDashCase(property)+'-changed';model._bindListeners.push({index:index,property:property,path:path,changedFn:fn,event:eventName});},_isEventBogus:function(e,target){return e.path&&e.path[0]!==target;},_notedListenerFactory:function(property,path,isStructured,negated){return function(target,value,targetPath){if(targetPath){var newPath=Polymer.Path.translate(property,path,targetPath);this._notifyPath(newPath,value);}else{value=target[property];if(negated){value=!value;}
-if(!isStructured){this[path]=value;}else{if(this.__data__[path]!=value){this.set(path,value);}}}};},prepareInstance:function(inst){inst.__data__=Object.create(null);},setupBindListeners:function(inst){var b$=inst._bindListeners;for(var i=0,l=b$.length,info;i<l&&(info=b$[i]);i++){var node=inst._nodes[info.index];this._addNotifyListener(node,inst,info.event,info.changedFn);}},_addNotifyListener:function(element,context,event,changedFn){element.addEventListener(event,function(e){return context._notifyListener(changedFn,e);});}};Polymer.Base.mixin(Polymer.Bind,{_shouldAddListener:function(effect){return effect.name&&effect.kind!='attribute'&&effect.kind!='text'&&!effect.isCompound&&effect.parts[0].mode==='{';},_annotationEffect:function(source,value,effect){if(source!=effect.value){value=this._get(effect.value);this.__data__[effect.value]=value;}
-this._applyEffectValue(effect,value);},_reflectEffect:function(source,value,effect){this.reflectPropertyToAttribute(source,effect.attribute,value);},_notifyEffect:function(source,value,effect,old,fromAbove){if(!fromAbove){this._notifyChange(source,effect.event,value);}},_functionEffect:function(source,value,fn,old,fromAbove){fn.call(this,source,value,old,fromAbove);},_observerEffect:function(source,value,effect,old){var fn=this[effect.method];if(fn){fn.call(this,value,old);}else{this._warn(this._logf('_observerEffect','observer method `'+effect.method+'` not defined'));}},_complexObserverEffect:function(source,value,effect){var fn=this[effect.method];if(fn){var args=Polymer.Bind._marshalArgs(this.__data__,effect,source,value);if(args){fn.apply(this,args);}}else if(effect.dynamicFn){}else{this._warn(this._logf('_complexObserverEffect','observer method `'+effect.method+'` not defined'));}},_computeEffect:function(source,value,effect){var fn=this[effect.method];if(fn){var args=Polymer.Bind._marshalArgs(this.__data__,effect,source,value);if(args){var computedvalue=fn.apply(this,args);this.__setProperty(effect.name,computedvalue);}}else if(effect.dynamicFn){}else{this._warn(this._logf('_computeEffect','compute method `'+effect.method+'` not defined'));}},_annotatedComputationEffect:function(source,value,effect){var computedHost=this._rootDataHost||this;var fn=computedHost[effect.method];if(fn){var args=Polymer.Bind._marshalArgs(this.__data__,effect,source,value);if(args){var computedvalue=fn.apply(computedHost,args);this._applyEffectValue(effect,computedvalue);}}else if(effect.dynamicFn){}else{computedHost._warn(computedHost._logf('_annotatedComputationEffect','compute method `'+effect.method+'` not defined'));}},_marshalArgs:function(model,effect,path,value){var values=[];var args=effect.args;var bailoutEarly=args.length>1||effect.dynamicFn;for(var i=0,l=args.length;i<l;i++){var arg=args[i];var name=arg.name;var v;if(arg.literal){v=arg.value;}else if(path===name){v=value;}else{v=model[name];if(v===undefined&&arg.structured){v=Polymer.Base._get(name,model);}}
-if(bailoutEarly&&v===undefined){return;}
-if(arg.wildcard){var matches=Polymer.Path.isAncestor(path,name);values[i]={path:matches?path:name,value:matches?value:v,base:v};}else{values[i]=v;}}
-return values;}});Polymer.Base._addFeature({_addPropertyEffect:function(property,kind,effect){var prop=Polymer.Bind.addPropertyEffect(this,property,kind,effect);prop.pathFn=this['_'+prop.kind+'PathEffect'];},_prepEffects:function(){Polymer.Bind.prepareModel(this);this._addAnnotationEffects(this._notes);},_prepBindings:function(){Polymer.Bind.createBindings(this);},_addPropertyEffects:function(properties){if(properties){for(var p in properties){var prop=properties[p];if(prop.observer){this._addObserverEffect(p,prop.observer);}
-if(prop.computed){prop.readOnly=true;this._addComputedEffect(p,prop.computed);}
-if(prop.notify){this._addPropertyEffect(p,'notify',{event:Polymer.CaseMap.camelToDashCase(p)+'-changed'});}
-if(prop.reflectToAttribute){var attr=Polymer.CaseMap.camelToDashCase(p);if(attr[0]==='-'){this._warn(this._logf('_addPropertyEffects','Property '+p+' cannot be reflected to attribute '+attr+' because "-" is not a valid starting attribute name. Use a lowercase first letter for the property instead.'));}else{this._addPropertyEffect(p,'reflect',{attribute:attr});}}
-if(prop.readOnly){Polymer.Bind.ensurePropertyEffects(this,p);}}}},_addComputedEffect:function(name,expression){var sig=this._parseMethod(expression);var dynamicFn=sig.dynamicFn;for(var i=0,arg;i<sig.args.length&&(arg=sig.args[i]);i++){this._addPropertyEffect(arg.model,'compute',{method:sig.method,args:sig.args,trigger:arg,name:name,dynamicFn:dynamicFn});}
-if(dynamicFn){this._addPropertyEffect(sig.method,'compute',{method:sig.method,args:sig.args,trigger:null,name:name,dynamicFn:dynamicFn});}},_addObserverEffect:function(property,observer){this._addPropertyEffect(property,'observer',{method:observer,property:property});},_addComplexObserverEffects:function(observers){if(observers){for(var i=0,o;i<observers.length&&(o=observers[i]);i++){this._addComplexObserverEffect(o);}}},_addComplexObserverEffect:function(observer){var sig=this._parseMethod(observer);if(!sig){throw new Error('Malformed observer expression \''+observer+'\'');}
-var dynamicFn=sig.dynamicFn;for(var i=0,arg;i<sig.args.length&&(arg=sig.args[i]);i++){this._addPropertyEffect(arg.model,'complexObserver',{method:sig.method,args:sig.args,trigger:arg,dynamicFn:dynamicFn});}
-if(dynamicFn){this._addPropertyEffect(sig.method,'complexObserver',{method:sig.method,args:sig.args,trigger:null,dynamicFn:dynamicFn});}},_addAnnotationEffects:function(notes){for(var i=0,note;i<notes.length&&(note=notes[i]);i++){var b$=note.bindings;for(var j=0,binding;j<b$.length&&(binding=b$[j]);j++){this._addAnnotationEffect(binding,i);}}},_addAnnotationEffect:function(note,index){if(Polymer.Bind._shouldAddListener(note)){Polymer.Bind._addAnnotatedListener(this,index,note.name,note.parts[0].value,note.parts[0].event,note.parts[0].negate);}
-for(var i=0;i<note.parts.length;i++){var part=note.parts[i];if(part.signature){this._addAnnotatedComputationEffect(note,part,index);}else if(!part.literal){if(note.kind==='attribute'&&note.name[0]==='-'){this._warn(this._logf('_addAnnotationEffect','Cannot set attribute '+note.name+' because "-" is not a valid attribute starting character'));}else{this._addPropertyEffect(part.model,'annotation',{kind:note.kind,index:index,name:note.name,propertyName:note.propertyName,value:part.value,isCompound:note.isCompound,compoundIndex:part.compoundIndex,event:part.event,customEvent:part.customEvent,negate:part.negate});}}}},_addAnnotatedComputationEffect:function(note,part,index){var sig=part.signature;if(sig.static){this.__addAnnotatedComputationEffect('__static__',index,note,part,null);}else{for(var i=0,arg;i<sig.args.length&&(arg=sig.args[i]);i++){if(!arg.literal){this.__addAnnotatedComputationEffect(arg.model,index,note,part,arg);}}
-if(sig.dynamicFn){this.__addAnnotatedComputationEffect(sig.method,index,note,part,null);}}},__addAnnotatedComputationEffect:function(property,index,note,part,trigger){this._addPropertyEffect(property,'annotatedComputation',{index:index,isCompound:note.isCompound,compoundIndex:part.compoundIndex,kind:note.kind,name:note.name,negate:part.negate,method:part.signature.method,args:part.signature.args,trigger:trigger,dynamicFn:part.signature.dynamicFn});},_parseMethod:function(expression){var m=expression.match(/([^\s]+?)\(([\s\S]*)\)/);if(m){var sig={method:m[1],static:true};if(this.getPropertyInfo(sig.method)!==Polymer.nob){sig.static=false;sig.dynamicFn=true;}
-if(m[2].trim()){var args=m[2].replace(/\\,/g,'&comma;').split(',');return this._parseArgs(args,sig);}else{sig.args=Polymer.nar;return sig;}}},_parseArgs:function(argList,sig){sig.args=argList.map(function(rawArg){var arg=this._parseArg(rawArg);if(!arg.literal){sig.static=false;}
-return arg;},this);return sig;},_parseArg:function(rawArg){var arg=rawArg.trim().replace(/&comma;/g,',').replace(/\\(.)/g,'$1');var a={name:arg};var fc=arg[0];if(fc==='-'){fc=arg[1];}
-if(fc>='0'&&fc<='9'){fc='#';}
-switch(fc){case'\'':case'"':a.value=arg.slice(1,-1);a.literal=true;break;case'#':a.value=Number(arg);a.literal=true;break;}
-if(!a.literal){a.model=Polymer.Path.root(arg);a.structured=Polymer.Path.isDeep(arg);if(a.structured){a.wildcard=arg.slice(-2)=='.*';if(a.wildcard){a.name=arg.slice(0,-2);}}}
-return a;},_marshalInstanceEffects:function(){Polymer.Bind.prepareInstance(this);if(this._bindListeners){Polymer.Bind.setupBindListeners(this);}},_applyEffectValue:function(info,value){var node=this._nodes[info.index];var property=info.name;value=this._computeFinalAnnotationValue(node,property,value,info);if(info.kind=='attribute'){this.serializeValueToAttribute(value,property,node);}else{var pinfo=node._propertyInfo&&node._propertyInfo[property];if(pinfo&&pinfo.readOnly){return;}
-this.__setProperty(property,value,Polymer.Settings.suppressBindingNotifications,node);}},_computeFinalAnnotationValue:function(node,property,value,info){if(info.negate){value=!value;}
-if(info.isCompound){var storage=node.__compoundStorage__[property];storage[info.compoundIndex]=value;value=storage.join('');}
-if(info.kind!=='attribute'){if(property==='className'){value=this._scopeElementClass(node,value);}
-if(property==='textContent'||node.localName=='input'&&property=='value'){value=value==undefined?'':value;}}
-return value;},_executeStaticEffects:function(){if(this._propertyEffects&&this._propertyEffects.__static__){this._effectEffects('__static__',null,this._propertyEffects.__static__);}}});(function(){var usePolyfillProto=Polymer.Settings.usePolyfillProto;var avoidInstanceProperties=Boolean(Object.getOwnPropertyDescriptor(document.documentElement,'properties'));Polymer.Base._addFeature({_setupConfigure:function(initialConfig){this._config={};this._handlers=[];this._aboveConfig=null;if(initialConfig){for(var i in initialConfig){if(initialConfig[i]!==undefined){this._config[i]=initialConfig[i];}}}},_marshalAttributes:function(){this._takeAttributesToModel(this._config);},_attributeChangedImpl:function(name){var model=this._clientsReadied?this:this._config;this._setAttributeToProperty(model,name);},_configValue:function(name,value){var info=this._propertyInfo[name];if(!info||!info.readOnly){this._config[name]=value;}},_beforeClientsReady:function(){this._configure();},_configure:function(){this._configureAnnotationReferences();this._configureInstanceProperties();this._aboveConfig=this.mixin({},this._config);var config={};for(var i=0;i<this.behaviors.length;i++){this._configureProperties(this.behaviors[i].properties,config);}
-this._configureProperties(avoidInstanceProperties?this.__proto__.properties:this.properties,config);this.mixin(config,this._aboveConfig);this._config=config;if(this._clients&&this._clients.length){this._distributeConfig(this._config);}},_configureInstanceProperties:function(){for(var i in this._propertyEffects){if(!usePolyfillProto&&this.hasOwnProperty(i)){this._configValue(i,this[i]);delete this[i];}}},_configureProperties:function(properties,config){for(var i in properties){var c=properties[i];if(c.value!==undefined){var value=c.value;if(typeof value=='function'){value=value.call(this,this._config);}
-config[i]=value;}}},_distributeConfig:function(config){var fx$=this._propertyEffects;if(fx$){for(var p in config){var fx=fx$[p];if(fx){for(var i=0,l=fx.length,x;i<l&&(x=fx[i]);i++){if(x.kind==='annotation'){var node=this._nodes[x.effect.index];var name=x.effect.propertyName;var isAttr=x.effect.kind=='attribute';var hasEffect=node._propertyEffects&&node._propertyEffects[name];if(node._configValue&&(hasEffect||!isAttr)){var value=p===x.effect.value?config[p]:this._get(x.effect.value,config);value=this._computeFinalAnnotationValue(node,name,value,x.effect);if(isAttr){value=node.deserialize(this.serialize(value),node._propertyInfo[name].type);}
-node._configValue(name,value);}}}}}}},_afterClientsReady:function(){this.importPath=this._importPath;this.rootPath=Polymer.rootPath;this._executeStaticEffects();this._applyConfig(this._config,this._aboveConfig);this._flushHandlers();},_applyConfig:function(config,aboveConfig){for(var n in config){if(this[n]===undefined){this.__setProperty(n,config[n],n in aboveConfig);}}},_notifyListener:function(fn,e){if(!Polymer.Bind._isEventBogus(e,e.target)){var value,path;if(e.detail){value=e.detail.value;path=e.detail.path;}
-if(!this._clientsReadied){this._queueHandler([fn,e.target,value,path]);}else{return fn.call(this,e.target,value,path);}}},_queueHandler:function(args){this._handlers.push(args);},_flushHandlers:function(){var h$=this._handlers;for(var i=0,l=h$.length,h;i<l&&(h=h$[i]);i++){h[0].call(this,h[1],h[2],h[3]);}
-this._handlers=[];}});}());(function(){'use strict';var Path=Polymer.Path;Polymer.Base._addFeature({notifyPath:function(path,value,fromAbove){var info={};var v=this._get(path,this,info);if(arguments.length===1){value=v;}
-if(info.path){this._notifyPath(info.path,value,fromAbove);}},_notifyPath:function(path,value,fromAbove){var old=this._propertySetter(path,value);if(old!==value&&(old===old||value===value)){this._pathEffector(path,value);if(!fromAbove){this._notifyPathUp(path,value);}
-return true;}},_getPathParts:function(path){if(Array.isArray(path)){var parts=[];for(var i=0;i<path.length;i++){var args=path[i].toString().split('.');for(var j=0;j<args.length;j++){parts.push(args[j]);}}
-return parts;}else{return path.toString().split('.');}},set:function(path,value,root){var prop=root||this;var parts=this._getPathParts(path);var array;var last=parts[parts.length-1];if(parts.length>1){for(var i=0;i<parts.length-1;i++){var part=parts[i];if(array&&part[0]=='#'){prop=Polymer.Collection.get(array).getItem(part);}else{prop=prop[part];if(array&&parseInt(part,10)==part){parts[i]=Polymer.Collection.get(array).getKey(prop);}}
-if(!prop){return;}
-array=Array.isArray(prop)?prop:null;}
-if(array){var coll=Polymer.Collection.get(array);var old,key;if(last[0]=='#'){key=last;old=coll.getItem(key);last=array.indexOf(old);coll.setItem(key,value);}else if(parseInt(last,10)==last){old=prop[last];key=coll.getKey(old);parts[i]=key;coll.setItem(key,value);}}
-prop[last]=value;if(!root){this._notifyPath(parts.join('.'),value);}}else{prop[path]=value;}},get:function(path,root){return this._get(path,root);},_get:function(path,root,info){var prop=root||this;var parts=this._getPathParts(path);var array;for(var i=0;i<parts.length;i++){if(!prop){return;}
-var part=parts[i];if(array&&part[0]=='#'){prop=Polymer.Collection.get(array).getItem(part);}else{prop=prop[part];if(info&&array&&parseInt(part,10)==part){parts[i]=Polymer.Collection.get(array).getKey(prop);}}
-array=Array.isArray(prop)?prop:null;}
-if(info){info.path=parts.join('.');}
-return prop;},_pathEffector:function(path,value){var model=Path.root(path);var fx$=this._propertyEffects&&this._propertyEffects[model];if(fx$){for(var i=0,fx;i<fx$.length&&(fx=fx$[i]);i++){var fxFn=fx.pathFn;if(fxFn){fxFn.call(this,path,value,fx.effect);}}}
-if(this._boundPaths){this._notifyBoundPaths(path,value);}},_annotationPathEffect:function(path,value,effect){if(Path.matches(effect.value,false,path)){Polymer.Bind._annotationEffect.call(this,path,value,effect);}else if(!effect.negate&&Path.isDescendant(effect.value,path)){var node=this._nodes[effect.index];if(node&&node._notifyPath){var newPath=Path.translate(effect.value,effect.name,path);node._notifyPath(newPath,value,true);}}},_complexObserverPathEffect:function(path,value,effect){if(Path.matches(effect.trigger.name,effect.trigger.wildcard,path)){Polymer.Bind._complexObserverEffect.call(this,path,value,effect);}},_computePathEffect:function(path,value,effect){if(Path.matches(effect.trigger.name,effect.trigger.wildcard,path)){Polymer.Bind._computeEffect.call(this,path,value,effect);}},_annotatedComputationPathEffect:function(path,value,effect){if(Path.matches(effect.trigger.name,effect.trigger.wildcard,path)){Polymer.Bind._annotatedComputationEffect.call(this,path,value,effect);}},linkPaths:function(to,from){this._boundPaths=this._boundPaths||{};if(from){this._boundPaths[to]=from;}else{this.unlinkPaths(to);}},unlinkPaths:function(path){if(this._boundPaths){delete this._boundPaths[path];}},_notifyBoundPaths:function(path,value){for(var a in this._boundPaths){var b=this._boundPaths[a];if(Path.isDescendant(a,path)){this._notifyPath(Path.translate(a,b,path),value);}else if(Path.isDescendant(b,path)){this._notifyPath(Path.translate(b,a,path),value);}}},_notifyPathUp:function(path,value){var rootName=Path.root(path);var dashCaseName=Polymer.CaseMap.camelToDashCase(rootName);var eventName=dashCaseName+this._EVENT_CHANGED;this.fire(eventName,{path:path,value:value},{bubbles:false,_useCache:Polymer.Settings.eventDataCache||!Polymer.Settings.isIE});},_EVENT_CHANGED:'-changed',notifySplices:function(path,splices){var info={};var array=this._get(path,this,info);this._notifySplices(array,info.path,splices);},_notifySplices:function(array,path,splices){var change={keySplices:Polymer.Collection.applySplices(array,splices),indexSplices:splices};var splicesPath=path+'.splices';this._notifyPath(splicesPath,change);this._notifyPath(path+'.length',array.length);this.__data__[splicesPath]={keySplices:null,indexSplices:null};},_notifySplice:function(array,path,index,added,removed){this._notifySplices(array,path,[{index:index,addedCount:added,removed:removed,object:array,type:'splice'}]);},push:function(path){var info={};var array=this._get(path,this,info);var args=Array.prototype.slice.call(arguments,1);var len=array.length;var ret=array.push.apply(array,args);if(args.length){this._notifySplice(array,info.path,len,args.length,[]);}
-return ret;},pop:function(path){var info={};var array=this._get(path,this,info);var hadLength=Boolean(array.length);var args=Array.prototype.slice.call(arguments,1);var ret=array.pop.apply(array,args);if(hadLength){this._notifySplice(array,info.path,array.length,0,[ret]);}
-return ret;},splice:function(path,start){var info={};var array=this._get(path,this,info);if(start<0){start=array.length-Math.floor(-start);}else{start=Math.floor(start);}
-if(!start){start=0;}
-var args=Array.prototype.slice.call(arguments,1);var ret=array.splice.apply(array,args);var addedCount=Math.max(args.length-2,0);if(addedCount||ret.length){this._notifySplice(array,info.path,start,addedCount,ret);}
-return ret;},shift:function(path){var info={};var array=this._get(path,this,info);var hadLength=Boolean(array.length);var args=Array.prototype.slice.call(arguments,1);var ret=array.shift.apply(array,args);if(hadLength){this._notifySplice(array,info.path,0,0,[ret]);}
-return ret;},unshift:function(path){var info={};var array=this._get(path,this,info);var args=Array.prototype.slice.call(arguments,1);var ret=array.unshift.apply(array,args);if(args.length){this._notifySplice(array,info.path,0,args.length,[]);}
-return ret;},prepareModelNotifyPath:function(model){this.mixin(model,{fire:Polymer.Base.fire,_getEvent:Polymer.Base._getEvent,__eventCache:Polymer.Base.__eventCache,notifyPath:Polymer.Base.notifyPath,_get:Polymer.Base._get,_EVENT_CHANGED:Polymer.Base._EVENT_CHANGED,_notifyPath:Polymer.Base._notifyPath,_notifyPathUp:Polymer.Base._notifyPathUp,_pathEffector:Polymer.Base._pathEffector,_annotationPathEffect:Polymer.Base._annotationPathEffect,_complexObserverPathEffect:Polymer.Base._complexObserverPathEffect,_annotatedComputationPathEffect:Polymer.Base._annotatedComputationPathEffect,_computePathEffect:Polymer.Base._computePathEffect,_notifyBoundPaths:Polymer.Base._notifyBoundPaths,_getPathParts:Polymer.Base._getPathParts});}});}());Polymer.Base._addFeature({resolveUrl:function(url){return Polymer.ResolveUrl.resolveUrl(url,this._importPath);}});Polymer.CssParse=function(){return{parse:function(text){text=this._clean(text);return this._parseCss(this._lex(text),text);},_clean:function(cssText){return cssText.replace(this._rx.comments,'').replace(this._rx.port,'');},_lex:function(text){var root={start:0,end:text.length};var n=root;for(var i=0,l=text.length;i<l;i++){switch(text[i]){case this.OPEN_BRACE:if(!n.rules){n.rules=[];}
-var p=n;var previous=p.rules[p.rules.length-1];n={start:i+1,parent:p,previous:previous};p.rules.push(n);break;case this.CLOSE_BRACE:n.end=i+1;n=n.parent||root;break;}}
-return root;},_parseCss:function(node,text){var t=text.substring(node.start,node.end-1);node.parsedCssText=node.cssText=t.trim();if(node.parent){var ss=node.previous?node.previous.end:node.parent.start;t=text.substring(ss,node.start-1);t=this._expandUnicodeEscapes(t);t=t.replace(this._rx.multipleSpaces,' ');t=t.substring(t.lastIndexOf(';')+1);var s=node.parsedSelector=node.selector=t.trim();node.atRule=s.indexOf(this.AT_START)===0;if(node.atRule){if(s.indexOf(this.MEDIA_START)===0){node.type=this.types.MEDIA_RULE;}else if(s.match(this._rx.keyframesRule)){node.type=this.types.KEYFRAMES_RULE;node.keyframesName=node.selector.split(this._rx.multipleSpaces).pop();}}else{if(s.indexOf(this.VAR_START)===0){node.type=this.types.MIXIN_RULE;}else{node.type=this.types.STYLE_RULE;}}}
-var r$=node.rules;if(r$){for(var i=0,l=r$.length,r;i<l&&(r=r$[i]);i++){this._parseCss(r,text);}}
-return node;},_expandUnicodeEscapes:function(s){return s.replace(/\\([0-9a-f]{1,6})\s/gi,function(){var code=arguments[1],repeat=6-code.length;while(repeat--){code='0'+code;}
-return'\\'+code;});},stringify:function(node,preserveProperties,text){text=text||'';var cssText='';if(node.cssText||node.rules){var r$=node.rules;if(r$&&!this._hasMixinRules(r$)){for(var i=0,l=r$.length,r;i<l&&(r=r$[i]);i++){cssText=this.stringify(r,preserveProperties,cssText);}}else{cssText=preserveProperties?node.cssText:this.removeCustomProps(node.cssText);cssText=cssText.trim();if(cssText){cssText='  '+cssText+'\n';}}}
-if(cssText){if(node.selector){text+=node.selector+' '+this.OPEN_BRACE+'\n';}
-text+=cssText;if(node.selector){text+=this.CLOSE_BRACE+'\n\n';}}
-return text;},_hasMixinRules:function(rules){return rules[0].selector.indexOf(this.VAR_START)===0;},removeCustomProps:function(cssText){cssText=this.removeCustomPropAssignment(cssText);return this.removeCustomPropApply(cssText);},removeCustomPropAssignment:function(cssText){return cssText.replace(this._rx.customProp,'').replace(this._rx.mixinProp,'');},removeCustomPropApply:function(cssText){return cssText.replace(this._rx.mixinApply,'').replace(this._rx.varApply,'');},types:{STYLE_RULE:1,KEYFRAMES_RULE:7,MEDIA_RULE:4,MIXIN_RULE:1000},OPEN_BRACE:'{',CLOSE_BRACE:'}',_rx:{comments:/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,port:/@import[^;]*;/gim,customProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,mixinProp:/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,mixinApply:/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,varApply:/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,keyframesRule:/^@[^\s]*keyframes/,multipleSpaces:/\s+/g},VAR_START:'--',MEDIA_START:'@media',AT_START:'@'};}();Polymer.StyleUtil=function(){var settings=Polymer.Settings;return{NATIVE_VARIABLES:Polymer.Settings.useNativeCSSProperties,MODULE_STYLES_SELECTOR:'style, link[rel=import][type~=css], template',INCLUDE_ATTR:'include',toCssText:function(rules,callback){if(typeof rules==='string'){rules=this.parser.parse(rules);}
-if(callback){this.forEachRule(rules,callback);}
-return this.parser.stringify(rules,this.NATIVE_VARIABLES);},forRulesInStyles:function(styles,styleRuleCallback,keyframesRuleCallback){if(styles){for(var i=0,l=styles.length,s;i<l&&(s=styles[i]);i++){this.forEachRuleInStyle(s,styleRuleCallback,keyframesRuleCallback);}}},forActiveRulesInStyles:function(styles,styleRuleCallback,keyframesRuleCallback){if(styles){for(var i=0,l=styles.length,s;i<l&&(s=styles[i]);i++){this.forEachRuleInStyle(s,styleRuleCallback,keyframesRuleCallback,true);}}},rulesForStyle:function(style){if(!style.__cssRules&&style.textContent){style.__cssRules=this.parser.parse(style.textContent);}
-return style.__cssRules;},isKeyframesSelector:function(rule){return rule.parent&&rule.parent.type===this.ruleTypes.KEYFRAMES_RULE;},forEachRuleInStyle:function(style,styleRuleCallback,keyframesRuleCallback,onlyActiveRules){var rules=this.rulesForStyle(style);var styleCallback,keyframeCallback;if(styleRuleCallback){styleCallback=function(rule){styleRuleCallback(rule,style);};}
-if(keyframesRuleCallback){keyframeCallback=function(rule){keyframesRuleCallback(rule,style);};}
-this.forEachRule(rules,styleCallback,keyframeCallback,onlyActiveRules);},forEachRule:function(node,styleRuleCallback,keyframesRuleCallback,onlyActiveRules){if(!node){return;}
-var skipRules=false;if(onlyActiveRules){if(node.type===this.ruleTypes.MEDIA_RULE){var matchMedia=node.selector.match(this.rx.MEDIA_MATCH);if(matchMedia){if(!window.matchMedia(matchMedia[1]).matches){skipRules=true;}}}}
-if(node.type===this.ruleTypes.STYLE_RULE){styleRuleCallback(node);}else if(keyframesRuleCallback&&node.type===this.ruleTypes.KEYFRAMES_RULE){keyframesRuleCallback(node);}else if(node.type===this.ruleTypes.MIXIN_RULE){skipRules=true;}
-var r$=node.rules;if(r$&&!skipRules){for(var i=0,l=r$.length,r;i<l&&(r=r$[i]);i++){this.forEachRule(r,styleRuleCallback,keyframesRuleCallback,onlyActiveRules);}}},applyCss:function(cssText,moniker,target,contextNode){var style=this.createScopeStyle(cssText,moniker);return this.applyStyle(style,target,contextNode);},applyStyle:function(style,target,contextNode){target=target||document.head;var after=contextNode&&contextNode.nextSibling||target.firstChild;this.__lastHeadApplyNode=style;return target.insertBefore(style,after);},createScopeStyle:function(cssText,moniker){var style=document.createElement('style');if(moniker){style.setAttribute('scope',moniker);}
-style.textContent=cssText;return style;},__lastHeadApplyNode:null,applyStylePlaceHolder:function(moniker){var placeHolder=document.createComment(' Shady DOM styles for '+moniker+' ');var after=this.__lastHeadApplyNode?this.__lastHeadApplyNode.nextSibling:null;var scope=document.head;scope.insertBefore(placeHolder,after||scope.firstChild);this.__lastHeadApplyNode=placeHolder;return placeHolder;},cssFromModules:function(moduleIds,warnIfNotFound){var modules=moduleIds.trim().split(' ');var cssText='';for(var i=0;i<modules.length;i++){cssText+=this.cssFromModule(modules[i],warnIfNotFound);}
-return cssText;},cssFromModule:function(moduleId,warnIfNotFound){var m=Polymer.DomModule.import(moduleId);if(m&&!m._cssText){m._cssText=this.cssFromElement(m);}
-if(!m&&warnIfNotFound){console.warn('Could not find style data in module named',moduleId);}
-return m&&m._cssText||'';},cssFromElement:function(element){var cssText='';var content=element.content||element;var e$=Polymer.TreeApi.arrayCopy(content.querySelectorAll(this.MODULE_STYLES_SELECTOR));for(var i=0,e;i<e$.length;i++){e=e$[i];if(e.localName==='template'){if(!e.hasAttribute('preserve-content')){cssText+=this.cssFromElement(e);}}else{if(e.localName==='style'){var include=e.getAttribute(this.INCLUDE_ATTR);if(include){cssText+=this.cssFromModules(include,true);}
-e=e.__appliedElement||e;e.parentNode.removeChild(e);cssText+=this.resolveCss(e.textContent,element.ownerDocument);}else if(e.import&&e.import.body){cssText+=this.resolveCss(e.import.body.textContent,e.import);}}}
-return cssText;},styleIncludesToTemplate:function(targetTemplate){var styles=targetTemplate.content.querySelectorAll('style[include]');for(var i=0,s;i<styles.length;i++){s=styles[i];s.parentNode.insertBefore(this._includesToFragment(s.getAttribute('include')),s);}},_includesToFragment:function(styleIncludes){var includeArray=styleIncludes.trim().split(' ');var frag=document.createDocumentFragment();for(var i=0;i<includeArray.length;i++){var t=Polymer.DomModule.import(includeArray[i],'template');if(t){this._addStylesToFragment(frag,t.content);}}
-return frag;},_addStylesToFragment:function(frag,source){var s$=source.querySelectorAll('style');for(var i=0,s;i<s$.length;i++){s=s$[i];var include=s.getAttribute('include');if(include){frag.appendChild(this._includesToFragment(include));}
-if(s.textContent){frag.appendChild(s.cloneNode(true));}}},isTargetedBuild:function(buildType){return settings.useNativeShadow?buildType==='shadow':buildType==='shady';},cssBuildTypeForModule:function(module){var dm=Polymer.DomModule.import(module);if(dm){return this.getCssBuildType(dm);}},getCssBuildType:function(element){return element.getAttribute('css-build');},_findMatchingParen:function(text,start){var level=0;for(var i=start,l=text.length;i<l;i++){switch(text[i]){case'(':level++;break;case')':if(--level===0){return i;}
-break;}}
-return-1;},processVariableAndFallback:function(str,callback){var start=str.indexOf('var(');if(start===-1){return callback(str,'','','');}
-var end=this._findMatchingParen(str,start+3);var inner=str.substring(start+4,end);var prefix=str.substring(0,start);var suffix=this.processVariableAndFallback(str.substring(end+1),callback);var comma=inner.indexOf(',');if(comma===-1){return callback(prefix,inner.trim(),'',suffix);}
-var value=inner.substring(0,comma).trim();var fallback=inner.substring(comma+1).trim();return callback(prefix,value,fallback,suffix);},rx:{VAR_ASSIGN:/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:([^;{]*)|{([^}]*)})(?:(?=[;\s}])|$)/gi,MIXIN_MATCH:/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,VAR_CONSUMED:/(--[\w-]+)\s*([:,;)]|$)/gi,ANIMATION_MATCH:/(animation\s*:)|(animation-name\s*:)/,MEDIA_MATCH:/@media[^(]*(\([^)]*\))/,IS_VAR:/^--/,BRACKETED:/\{[^}]*\}/g,HOST_PREFIX:'(?:^|[^.#[:])',HOST_SUFFIX:'($|[.:[\\s>+~])'},resolveCss:Polymer.ResolveUrl.resolveCss,parser:Polymer.CssParse,ruleTypes:Polymer.CssParse.types};}();Polymer.StyleTransformer=function(){var styleUtil=Polymer.StyleUtil;var settings=Polymer.Settings;var api={dom:function(node,scope,useAttr,shouldRemoveScope){this._transformDom(node,scope||'',useAttr,shouldRemoveScope);},_transformDom:function(node,selector,useAttr,shouldRemoveScope){if(node.setAttribute){this.element(node,selector,useAttr,shouldRemoveScope);}
-var c$=Polymer.dom(node).childNodes;for(var i=0;i<c$.length;i++){this._transformDom(c$[i],selector,useAttr,shouldRemoveScope);}},element:function(element,scope,useAttr,shouldRemoveScope){if(useAttr){if(shouldRemoveScope){element.removeAttribute(SCOPE_NAME);}else{element.setAttribute(SCOPE_NAME,scope);}}else{if(scope){if(element.classList){if(shouldRemoveScope){element.classList.remove(SCOPE_NAME);element.classList.remove(scope);}else{element.classList.add(SCOPE_NAME);element.classList.add(scope);}}else if(element.getAttribute){var c=element.getAttribute(CLASS);if(shouldRemoveScope){if(c){element.setAttribute(CLASS,c.replace(SCOPE_NAME,'').replace(scope,''));}}else{element.setAttribute(CLASS,(c?c+' ':'')+SCOPE_NAME+' '+scope);}}}}},elementStyles:function(element,callback){var styles=element._styles;var cssText='';var cssBuildType=element.__cssBuild;var passthrough=settings.useNativeShadow||cssBuildType==='shady';var cb;if(passthrough){var self=this;cb=function(rule){rule.selector=self._slottedToContent(rule.selector);rule.selector=rule.selector.replace(ROOT,':host > *');if(callback){callback(rule);}};}
-for(var i=0,l=styles.length,s;i<l&&(s=styles[i]);i++){var rules=styleUtil.rulesForStyle(s);cssText+=passthrough?styleUtil.toCssText(rules,cb):this.css(rules,element.is,element.extends,callback,element._scopeCssViaAttr)+'\n\n';}
-return cssText.trim();},css:function(rules,scope,ext,callback,useAttr){var hostScope=this._calcHostScope(scope,ext);scope=this._calcElementScope(scope,useAttr);var self=this;return styleUtil.toCssText(rules,function(rule){if(!rule.isScoped){self.rule(rule,scope,hostScope);rule.isScoped=true;}
-if(callback){callback(rule,scope,hostScope);}});},_calcElementScope:function(scope,useAttr){if(scope){return useAttr?CSS_ATTR_PREFIX+scope+CSS_ATTR_SUFFIX:CSS_CLASS_PREFIX+scope;}else{return'';}},_calcHostScope:function(scope,ext){return ext?'[is='+scope+']':scope;},rule:function(rule,scope,hostScope){this._transformRule(rule,this._transformComplexSelector,scope,hostScope);},_transformRule:function(rule,transformer,scope,hostScope){rule.selector=rule.transformedSelector=this._transformRuleCss(rule,transformer,scope,hostScope);},_transformRuleCss:function(rule,transformer,scope,hostScope){var p$=rule.selector.split(COMPLEX_SELECTOR_SEP);if(!styleUtil.isKeyframesSelector(rule)){for(var i=0,l=p$.length,p;i<l&&(p=p$[i]);i++){p$[i]=transformer.call(this,p,scope,hostScope);}}
-return p$.join(COMPLEX_SELECTOR_SEP);},_transformComplexSelector:function(selector,scope,hostScope){var stop=false;var hostContext=false;var self=this;selector=selector.trim();selector=this._slottedToContent(selector);selector=selector.replace(ROOT,':host > *');selector=selector.replace(CONTENT_START,HOST+' $1');selector=selector.replace(SIMPLE_SELECTOR_SEP,function(m,c,s){if(!stop){var info=self._transformCompoundSelector(s,c,scope,hostScope);stop=stop||info.stop;hostContext=hostContext||info.hostContext;c=info.combinator;s=info.value;}else{s=s.replace(SCOPE_JUMP,' ');}
-return c+s;});if(hostContext){selector=selector.replace(HOST_CONTEXT_PAREN,function(m,pre,paren,post){return pre+paren+' '+hostScope+post+COMPLEX_SELECTOR_SEP+' '+pre+hostScope+paren+post;});}
-return selector;},_transformCompoundSelector:function(selector,combinator,scope,hostScope){var jumpIndex=selector.search(SCOPE_JUMP);var hostContext=false;if(selector.indexOf(HOST_CONTEXT)>=0){hostContext=true;}else if(selector.indexOf(HOST)>=0){selector=this._transformHostSelector(selector,hostScope);}else if(jumpIndex!==0){selector=scope?this._transformSimpleSelector(selector,scope):selector;}
-if(selector.indexOf(CONTENT)>=0){combinator='';}
-var stop;if(jumpIndex>=0){selector=selector.replace(SCOPE_JUMP,' ');stop=true;}
-return{value:selector,combinator:combinator,stop:stop,hostContext:hostContext};},_transformSimpleSelector:function(selector,scope){var p$=selector.split(PSEUDO_PREFIX);p$[0]+=scope;return p$.join(PSEUDO_PREFIX);},_transformHostSelector:function(selector,hostScope){var m=selector.match(HOST_PAREN);var paren=m&&m[2].trim()||'';if(paren){if(!paren[0].match(SIMPLE_SELECTOR_PREFIX)){var typeSelector=paren.split(SIMPLE_SELECTOR_PREFIX)[0];if(typeSelector===hostScope){return paren;}else{return SELECTOR_NO_MATCH;}}else{return selector.replace(HOST_PAREN,function(m,host,paren){return hostScope+paren;});}}else{return selector.replace(HOST,hostScope);}},documentRule:function(rule){rule.selector=rule.parsedSelector;this.normalizeRootSelector(rule);if(!settings.useNativeShadow){this._transformRule(rule,this._transformDocumentSelector);}},normalizeRootSelector:function(rule){rule.selector=rule.selector.replace(ROOT,'html');var parts=rule.selector.split(COMPLEX_SELECTOR_SEP);parts=parts.filter(function(part){return!part.match(HOST_OR_HOST_GT_STAR);});rule.selector=parts.join(COMPLEX_SELECTOR_SEP);},_transformDocumentSelector:function(selector){return selector.match(SCOPE_JUMP)?this._transformComplexSelector(selector,SCOPE_DOC_SELECTOR):this._transformSimpleSelector(selector.trim(),SCOPE_DOC_SELECTOR);},_slottedToContent:function(cssText){return cssText.replace(SLOTTED_PAREN,CONTENT+'> $1');},SCOPE_NAME:'style-scope'};var SCOPE_NAME=api.SCOPE_NAME;var SCOPE_DOC_SELECTOR=':not(['+SCOPE_NAME+'])'+':not(.'+SCOPE_NAME+')';var COMPLEX_SELECTOR_SEP=',';var SIMPLE_SELECTOR_SEP=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=\[])+)/g;var SIMPLE_SELECTOR_PREFIX=/[[.:#*]/;var HOST=':host';var ROOT=':root';var HOST_PAREN=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/;var HOST_CONTEXT=':host-context';var HOST_CONTEXT_PAREN=/(.*)(?::host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))(.*)/;var CONTENT='::content';var SCOPE_JUMP=/::content|::shadow|\/deep\//;var CSS_CLASS_PREFIX='.';var CSS_ATTR_PREFIX='['+SCOPE_NAME+'~=';var CSS_ATTR_SUFFIX=']';var PSEUDO_PREFIX=':';var CLASS='class';var CONTENT_START=new RegExp('^('+CONTENT+')');var SELECTOR_NO_MATCH='should_not_match';var SLOTTED_PAREN=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/g;var HOST_OR_HOST_GT_STAR=/:host(?:\s*>\s*\*)?/;return api;}();Polymer.StyleExtends=function(){var styleUtil=Polymer.StyleUtil;return{hasExtends:function(cssText){return Boolean(cssText.match(this.rx.EXTEND));},transform:function(style){var rules=styleUtil.rulesForStyle(style);var self=this;styleUtil.forEachRule(rules,function(rule){self._mapRuleOntoParent(rule);if(rule.parent){var m;while(m=self.rx.EXTEND.exec(rule.cssText)){var extend=m[1];var extendor=self._findExtendor(extend,rule);if(extendor){self._extendRule(rule,extendor);}}}
-rule.cssText=rule.cssText.replace(self.rx.EXTEND,'');});return styleUtil.toCssText(rules,function(rule){if(rule.selector.match(self.rx.STRIP)){rule.cssText='';}},true);},_mapRuleOntoParent:function(rule){if(rule.parent){var map=rule.parent.map||(rule.parent.map={});var parts=rule.selector.split(',');for(var i=0,p;i<parts.length;i++){p=parts[i];map[p.trim()]=rule;}
-return map;}},_findExtendor:function(extend,rule){return rule.parent&&rule.parent.map&&rule.parent.map[extend]||this._findExtendor(extend,rule.parent);},_extendRule:function(target,source){if(target.parent!==source.parent){this._cloneAndAddRuleToParent(source,target.parent);}
-target.extends=target.extends||[];target.extends.push(source);source.selector=source.selector.replace(this.rx.STRIP,'');source.selector=(source.selector&&source.selector+',\n')+target.selector;if(source.extends){source.extends.forEach(function(e){this._extendRule(target,e);},this);}},_cloneAndAddRuleToParent:function(rule,parent){rule=Object.create(rule);rule.parent=parent;if(rule.extends){rule.extends=rule.extends.slice();}
-parent.rules.push(rule);},rx:{EXTEND:/@extends\(([^)]*)\)\s*?;/gim,STRIP:/%[^,]*$/}};}();Polymer.ApplyShim=function(){'use strict';var styleUtil=Polymer.StyleUtil;var MIXIN_MATCH=styleUtil.rx.MIXIN_MATCH;var VAR_ASSIGN=styleUtil.rx.VAR_ASSIGN;var BAD_VAR=/var\(\s*(--[^,]*),\s*(--[^)]*)\)/g;var APPLY_NAME_CLEAN=/;\s*/m;var INITIAL_INHERIT=/^\s*(initial)|(inherit)\s*$/;var MIXIN_VAR_SEP='_-_';var mixinMap={};function mapSet(name,props){name=name.trim();mixinMap[name]={properties:props,dependants:{}};}
-function mapGet(name){name=name.trim();return mixinMap[name];}
-function replaceInitialOrInherit(property,value){var match=INITIAL_INHERIT.exec(value);if(match){if(match[1]){value=ApplyShim._getInitialValueForProperty(property);}else{value='apply-shim-inherit';}}
-return value;}
-function cssTextToMap(text){var props=text.split(';');var property,value;var out={};for(var i=0,p,sp;i<props.length;i++){p=props[i];if(p){sp=p.split(':');if(sp.length>1){property=sp[0].trim();value=replaceInitialOrInherit(property,sp.slice(1).join(':'));out[property]=value;}}}
-return out;}
-function invalidateMixinEntry(mixinEntry){var currentProto=ApplyShim.__currentElementProto;var currentElementName=currentProto&&currentProto.is;for(var elementName in mixinEntry.dependants){if(elementName!==currentElementName){mixinEntry.dependants[elementName].__applyShimInvalid=true;}}}
-function produceCssProperties(matchText,propertyName,valueProperty,valueMixin){if(valueProperty){styleUtil.processVariableAndFallback(valueProperty,function(prefix,value){if(value&&mapGet(value)){valueMixin='@apply '+value+';';}});}
-if(!valueMixin){return matchText;}
-var mixinAsProperties=consumeCssProperties(valueMixin);var prefix=matchText.slice(0,matchText.indexOf('--'));var mixinValues=cssTextToMap(mixinAsProperties);var combinedProps=mixinValues;var mixinEntry=mapGet(propertyName);var oldProps=mixinEntry&&mixinEntry.properties;if(oldProps){combinedProps=Object.create(oldProps);combinedProps=Polymer.Base.mixin(combinedProps,mixinValues);}else{mapSet(propertyName,combinedProps);}
-var out=[];var p,v;var needToInvalidate=false;for(p in combinedProps){v=mixinValues[p];if(v===undefined){v='initial';}
-if(oldProps&&!(p in oldProps)){needToInvalidate=true;}
-out.push(propertyName+MIXIN_VAR_SEP+p+': '+v);}
-if(needToInvalidate){invalidateMixinEntry(mixinEntry);}
-if(mixinEntry){mixinEntry.properties=combinedProps;}
-if(valueProperty){prefix=matchText+';'+prefix;}
-return prefix+out.join('; ')+';';}
-function fixVars(matchText,varA,varB){return'var('+varA+','+'var('+varB+'))';}
-function atApplyToCssProperties(mixinName,fallbacks){mixinName=mixinName.replace(APPLY_NAME_CLEAN,'');var vars=[];var mixinEntry=mapGet(mixinName);if(!mixinEntry){mapSet(mixinName,{});mixinEntry=mapGet(mixinName);}
-if(mixinEntry){var currentProto=ApplyShim.__currentElementProto;if(currentProto){mixinEntry.dependants[currentProto.is]=currentProto;}
-var p,parts,f;for(p in mixinEntry.properties){f=fallbacks&&fallbacks[p];parts=[p,': var(',mixinName,MIXIN_VAR_SEP,p];if(f){parts.push(',',f);}
-parts.push(')');vars.push(parts.join(''));}}
-return vars.join('; ');}
-function consumeCssProperties(text){var m;while(m=MIXIN_MATCH.exec(text)){var matchText=m[0];var mixinName=m[1];var idx=m.index;var applyPos=idx+matchText.indexOf('@apply');var afterApplyPos=idx+matchText.length;var textBeforeApply=text.slice(0,applyPos);var textAfterApply=text.slice(afterApplyPos);var defaults=cssTextToMap(textBeforeApply);var replacement=atApplyToCssProperties(mixinName,defaults);text=[textBeforeApply,replacement,textAfterApply].join('');MIXIN_MATCH.lastIndex=idx+replacement.length;}
-return text;}
-var ApplyShim={_measureElement:null,_map:mixinMap,_separator:MIXIN_VAR_SEP,transform:function(styles,elementProto){this.__currentElementProto=elementProto;styleUtil.forRulesInStyles(styles,this._boundFindDefinitions);styleUtil.forRulesInStyles(styles,this._boundFindApplications);if(elementProto){elementProto.__applyShimInvalid=false;}
-this.__currentElementProto=null;},_findDefinitions:function(rule){var cssText=rule.parsedCssText;cssText=cssText.replace(BAD_VAR,fixVars);cssText=cssText.replace(VAR_ASSIGN,produceCssProperties);rule.cssText=cssText;if(rule.selector===':root'){rule.selector=':host > *';}},_findApplications:function(rule){rule.cssText=consumeCssProperties(rule.cssText);},transformRule:function(rule){this._findDefinitions(rule);this._findApplications(rule);},_getInitialValueForProperty:function(property){if(!this._measureElement){this._measureElement=document.createElement('meta');this._measureElement.style.all='initial';document.head.appendChild(this._measureElement);}
-return window.getComputedStyle(this._measureElement).getPropertyValue(property);}};ApplyShim._boundTransformRule=ApplyShim.transformRule.bind(ApplyShim);ApplyShim._boundFindDefinitions=ApplyShim._findDefinitions.bind(ApplyShim);ApplyShim._boundFindApplications=ApplyShim._findApplications.bind(ApplyShim);return ApplyShim;}();(function(){var prepElement=Polymer.Base._prepElement;var nativeShadow=Polymer.Settings.useNativeShadow;var styleUtil=Polymer.StyleUtil;var styleTransformer=Polymer.StyleTransformer;var styleExtends=Polymer.StyleExtends;var applyShim=Polymer.ApplyShim;var settings=Polymer.Settings;Polymer.Base._addFeature({_prepElement:function(element){if(this._encapsulateStyle&&this.__cssBuild!=='shady'){styleTransformer.element(element,this.is,this._scopeCssViaAttr);}
-prepElement.call(this,element);},_prepStyles:function(){if(this._encapsulateStyle===undefined){this._encapsulateStyle=!nativeShadow;}
-if(!nativeShadow){this._scopeStyle=styleUtil.applyStylePlaceHolder(this.is);}
-this.__cssBuild=styleUtil.cssBuildTypeForModule(this.is);},_prepShimStyles:function(){if(this._template){var hasTargetedCssBuild=styleUtil.isTargetedBuild(this.__cssBuild);if(settings.useNativeCSSProperties&&this.__cssBuild==='shadow'&&hasTargetedCssBuild){if(settings.preserveStyleIncludes){styleUtil.styleIncludesToTemplate(this._template);}
-return;}
-this._styles=this._styles||this._collectStyles();if(settings.useNativeCSSProperties&&!this.__cssBuild){applyShim.transform(this._styles,this);}
-var cssText=settings.useNativeCSSProperties&&hasTargetedCssBuild?this._styles.length&&this._styles[0].textContent.trim():styleTransformer.elementStyles(this);this._prepStyleProperties();if(!this._needsStyleProperties()&&cssText){styleUtil.applyCss(cssText,this.is,nativeShadow?this._template.content:null,this._scopeStyle);}}else{this._styles=[];}},_collectStyles:function(){var styles=[];var cssText='',m$=this.styleModules;if(m$){for(var i=0,l=m$.length,m;i<l&&(m=m$[i]);i++){cssText+=styleUtil.cssFromModule(m);}}
-cssText+=styleUtil.cssFromModule(this.is);var p=this._template&&this._template.parentNode;if(this._template&&(!p||p.id.toLowerCase()!==this.is)){cssText+=styleUtil.cssFromElement(this._template);}
-if(cssText){var style=document.createElement('style');style.textContent=cssText;if(styleExtends.hasExtends(style.textContent)){cssText=styleExtends.transform(style);}
-styles.push(style);}
-return styles;},_elementAdd:function(node){if(this._encapsulateStyle){if(node.__styleScoped){node.__styleScoped=false;}else{styleTransformer.dom(node,this.is,this._scopeCssViaAttr);}}},_elementRemove:function(node){if(this._encapsulateStyle){styleTransformer.dom(node,this.is,this._scopeCssViaAttr,true);}},scopeSubtree:function(container,shouldObserve){if(nativeShadow){return;}
-var self=this;var scopify=function(node){if(node.nodeType===Node.ELEMENT_NODE){var className=node.getAttribute('class');node.setAttribute('class',self._scopeElementClass(node,className));var n$=node.querySelectorAll('*');for(var i=0,n;i<n$.length&&(n=n$[i]);i++){className=n.getAttribute('class');n.setAttribute('class',self._scopeElementClass(n,className));}}};scopify(container);if(shouldObserve){var mo=new MutationObserver(function(mxns){for(var i=0,m;i<mxns.length&&(m=mxns[i]);i++){if(m.addedNodes){for(var j=0;j<m.addedNodes.length;j++){scopify(m.addedNodes[j]);}}}});mo.observe(container,{childList:true,subtree:true});return mo;}}});}());Polymer.StyleProperties=function(){'use strict';var matchesSelector=Polymer.DomApi.matchesSelector;var styleUtil=Polymer.StyleUtil;var styleTransformer=Polymer.StyleTransformer;var IS_IE=navigator.userAgent.match('Trident');var settings=Polymer.Settings;return{decorateStyles:function(styles,scope){var self=this,props={},keyframes=[],ruleIndex=0;var scopeSelector=styleTransformer._calcHostScope(scope.is,scope.extends);styleUtil.forRulesInStyles(styles,function(rule,style){self.decorateRule(rule);rule.index=ruleIndex++;self.whenHostOrRootRule(scope,rule,style,function(info){if(rule.parent.type===styleUtil.ruleTypes.MEDIA_RULE){scope.__notStyleScopeCacheable=true;}
-if(info.isHost){var hostContextOrFunction=info.selector.split(' ').some(function(s){return s.indexOf(scopeSelector)===0&&s.length!==scopeSelector.length;});scope.__notStyleScopeCacheable=scope.__notStyleScopeCacheable||hostContextOrFunction;}});self.collectPropertiesInCssText(rule.propertyInfo.cssText,props);},function onKeyframesRule(rule){keyframes.push(rule);});styles._keyframes=keyframes;var names=[];for(var i in props){names.push(i);}
-return names;},decorateRule:function(rule){if(rule.propertyInfo){return rule.propertyInfo;}
-var info={},properties={};var hasProperties=this.collectProperties(rule,properties);if(hasProperties){info.properties=properties;rule.rules=null;}
-info.cssText=this.collectCssText(rule);rule.propertyInfo=info;return info;},collectProperties:function(rule,properties){var info=rule.propertyInfo;if(info){if(info.properties){Polymer.Base.mixin(properties,info.properties);return true;}}else{var m,rx=this.rx.VAR_ASSIGN;var cssText=rule.parsedCssText;var value;var any;while(m=rx.exec(cssText)){value=(m[2]||m[3]).trim();if(value!=='inherit'){properties[m[1].trim()]=value;}
-any=true;}
-return any;}},collectCssText:function(rule){return this.collectConsumingCssText(rule.parsedCssText);},collectConsumingCssText:function(cssText){return cssText.replace(this.rx.BRACKETED,'').replace(this.rx.VAR_ASSIGN,'');},collectPropertiesInCssText:function(cssText,props){var m;while(m=this.rx.VAR_CONSUMED.exec(cssText)){var name=m[1];if(m[2]!==':'){props[name]=true;}}},reify:function(props){var names=Object.getOwnPropertyNames(props);for(var i=0,n;i<names.length;i++){n=names[i];props[n]=this.valueForProperty(props[n],props);}},valueForProperty:function(property,props){if(property){if(property.indexOf(';')>=0){property=this.valueForProperties(property,props);}else{var self=this;var fn=function(prefix,value,fallback,suffix){var propertyValue=self.valueForProperty(props[value],props);if(!propertyValue||propertyValue==='initial'){propertyValue=self.valueForProperty(props[fallback]||fallback,props)||fallback;}else if(propertyValue==='apply-shim-inherit'){propertyValue='inherit';}
-return prefix+(propertyValue||'')+suffix;};property=styleUtil.processVariableAndFallback(property,fn);}}
-return property&&property.trim()||'';},valueForProperties:function(property,props){var parts=property.split(';');for(var i=0,p,m;i<parts.length;i++){if(p=parts[i]){this.rx.MIXIN_MATCH.lastIndex=0;m=this.rx.MIXIN_MATCH.exec(p);if(m){p=this.valueForProperty(props[m[1]],props);}else{var colon=p.indexOf(':');if(colon!==-1){var pp=p.substring(colon);pp=pp.trim();pp=this.valueForProperty(pp,props)||pp;p=p.substring(0,colon)+pp;}}
-parts[i]=p&&p.lastIndexOf(';')===p.length-1?p.slice(0,-1):p||'';}}
-return parts.join(';');},applyProperties:function(rule,props){var output='';if(!rule.propertyInfo){this.decorateRule(rule);}
-if(rule.propertyInfo.cssText){output=this.valueForProperties(rule.propertyInfo.cssText,props);}
-rule.cssText=output;},applyKeyframeTransforms:function(rule,keyframeTransforms){var input=rule.cssText;var output=rule.cssText;if(rule.hasAnimations==null){rule.hasAnimations=this.rx.ANIMATION_MATCH.test(input);}
-if(rule.hasAnimations){var transform;if(rule.keyframeNamesToTransform==null){rule.keyframeNamesToTransform=[];for(var keyframe in keyframeTransforms){transform=keyframeTransforms[keyframe];output=transform(input);if(input!==output){input=output;rule.keyframeNamesToTransform.push(keyframe);}}}else{for(var i=0;i<rule.keyframeNamesToTransform.length;++i){transform=keyframeTransforms[rule.keyframeNamesToTransform[i]];input=transform(input);}
-output=input;}}
-rule.cssText=output;},propertyDataFromStyles:function(styles,element){var props={},self=this;var o=[];styleUtil.forActiveRulesInStyles(styles,function(rule){if(!rule.propertyInfo){self.decorateRule(rule);}
-var selectorToMatch=rule.transformedSelector||rule.parsedSelector;if(element&&rule.propertyInfo.properties&&selectorToMatch){if(matchesSelector.call(element,selectorToMatch)){self.collectProperties(rule,props);addToBitMask(rule.index,o);}}});return{properties:props,key:o};},_rootSelector:/:root|:host\s*>\s*\*/,_checkRoot:function(hostScope,selector){return Boolean(selector.match(this._rootSelector))||hostScope==='html'&&selector.indexOf('html')>-1;},whenHostOrRootRule:function(scope,rule,style,callback){if(!rule.propertyInfo){self.decorateRule(rule);}
-if(!rule.propertyInfo.properties){return;}
-var hostScope=scope.is?styleTransformer._calcHostScope(scope.is,scope.extends):'html';var parsedSelector=rule.parsedSelector;var isRoot=this._checkRoot(hostScope,parsedSelector);var isHost=!isRoot&&parsedSelector.indexOf(':host')===0;var cssBuild=scope.__cssBuild||style.__cssBuild;if(cssBuild==='shady'){isRoot=parsedSelector===hostScope+' > *.'+hostScope||parsedSelector.indexOf('html')>-1;isHost=!isRoot&&parsedSelector.indexOf(hostScope)===0;}
-if(!isRoot&&!isHost){return;}
-var selectorToMatch=hostScope;if(isHost){if(settings.useNativeShadow&&!rule.transformedSelector){rule.transformedSelector=styleTransformer._transformRuleCss(rule,styleTransformer._transformComplexSelector,scope.is,hostScope);}
-selectorToMatch=rule.transformedSelector||rule.parsedSelector;}
-if(isRoot&&hostScope==='html'){selectorToMatch=rule.transformedSelector||rule.parsedSelector;}
-callback({selector:selectorToMatch,isHost:isHost,isRoot:isRoot});},hostAndRootPropertiesForScope:function(scope){var hostProps={},rootProps={},self=this;styleUtil.forActiveRulesInStyles(scope._styles,function(rule,style){self.whenHostOrRootRule(scope,rule,style,function(info){var element=scope._element||scope;if(matchesSelector.call(element,info.selector)){if(info.isHost){self.collectProperties(rule,hostProps);}else{self.collectProperties(rule,rootProps);}}});});return{rootProps:rootProps,hostProps:hostProps};},transformStyles:function(element,properties,scopeSelector){var self=this;var hostSelector=styleTransformer._calcHostScope(element.is,element.extends);var rxHostSelector=element.extends?'\\'+hostSelector.slice(0,-1)+'\\]':hostSelector;var hostRx=new RegExp(this.rx.HOST_PREFIX+rxHostSelector+this.rx.HOST_SUFFIX);var keyframeTransforms=this._elementKeyframeTransforms(element,scopeSelector);return styleTransformer.elementStyles(element,function(rule){self.applyProperties(rule,properties);if(!settings.useNativeShadow&&!Polymer.StyleUtil.isKeyframesSelector(rule)&&rule.cssText){self.applyKeyframeTransforms(rule,keyframeTransforms);self._scopeSelector(rule,hostRx,hostSelector,element._scopeCssViaAttr,scopeSelector);}});},_elementKeyframeTransforms:function(element,scopeSelector){var keyframesRules=element._styles._keyframes;var keyframeTransforms={};if(!settings.useNativeShadow&&keyframesRules){for(var i=0,keyframesRule=keyframesRules[i];i<keyframesRules.length;keyframesRule=keyframesRules[++i]){this._scopeKeyframes(keyframesRule,scopeSelector);keyframeTransforms[keyframesRule.keyframesName]=this._keyframesRuleTransformer(keyframesRule);}}
-return keyframeTransforms;},_keyframesRuleTransformer:function(keyframesRule){return function(cssText){return cssText.replace(keyframesRule.keyframesNameRx,keyframesRule.transformedKeyframesName);};},_scopeKeyframes:function(rule,scopeId){rule.keyframesNameRx=new RegExp(rule.keyframesName,'g');rule.transformedKeyframesName=rule.keyframesName+'-'+scopeId;rule.transformedSelector=rule.transformedSelector||rule.selector;rule.selector=rule.transformedSelector.replace(rule.keyframesName,rule.transformedKeyframesName);},_scopeSelector:function(rule,hostRx,hostSelector,viaAttr,scopeId){rule.transformedSelector=rule.transformedSelector||rule.selector;var selector=rule.transformedSelector;var scope=viaAttr?'['+styleTransformer.SCOPE_NAME+'~='+scopeId+']':'.'+scopeId;var parts=selector.split(',');for(var i=0,l=parts.length,p;i<l&&(p=parts[i]);i++){parts[i]=p.match(hostRx)?p.replace(hostSelector,scope):scope+' '+p;}
-rule.selector=parts.join(',');},applyElementScopeSelector:function(element,selector,old,viaAttr){var c=viaAttr?element.getAttribute(styleTransformer.SCOPE_NAME):element.getAttribute('class')||'';var v=old?c.replace(old,selector):(c?c+' ':'')+this.XSCOPE_NAME+' '+selector;if(c!==v){if(viaAttr){element.setAttribute(styleTransformer.SCOPE_NAME,v);}else{element.setAttribute('class',v);}}},applyElementStyle:function(element,properties,selector,style){var cssText=style?style.textContent||'':this.transformStyles(element,properties,selector);var s=element._customStyle;if(s&&!settings.useNativeShadow&&s!==style){s._useCount--;if(s._useCount<=0&&s.parentNode){s.parentNode.removeChild(s);}}
-if(settings.useNativeShadow){if(element._customStyle){element._customStyle.textContent=cssText;style=element._customStyle;}else if(cssText){style=styleUtil.applyCss(cssText,selector,element.root,element._scopeStyle);}}else{if(!style){if(cssText){style=styleUtil.applyCss(cssText,selector,null,element._scopeStyle);}}else if(!style.parentNode){if(IS_IE&&cssText.indexOf('@media')>-1){style.textContent=cssText;}
-styleUtil.applyStyle(style,null,element._scopeStyle);}}
-if(style){style._useCount=style._useCount||0;if(element._customStyle!=style){style._useCount++;}
-element._customStyle=style;}
-return style;},mixinCustomStyle:function(props,customStyle){var v;for(var i in customStyle){v=customStyle[i];if(v||v===0){props[i]=v;}}},updateNativeStyleProperties:function(element,properties){var oldPropertyNames=element.__customStyleProperties;if(oldPropertyNames){for(var i=0;i<oldPropertyNames.length;i++){element.style.removeProperty(oldPropertyNames[i]);}}
-var propertyNames=[];for(var p in properties){if(properties[p]!==null){element.style.setProperty(p,properties[p]);propertyNames.push(p);}}
-element.__customStyleProperties=propertyNames;},rx:styleUtil.rx,XSCOPE_NAME:'x-scope'};function addToBitMask(n,bits){var o=parseInt(n/32);var v=1<<n%32;bits[o]=(bits[o]||0)|v;}}();(function(){Polymer.StyleCache=function(){this.cache={};};Polymer.StyleCache.prototype={MAX:100,store:function(is,data,keyValues,keyStyles){data.keyValues=keyValues;data.styles=keyStyles;var s$=this.cache[is]=this.cache[is]||[];s$.push(data);if(s$.length>this.MAX){s$.shift();}},retrieve:function(is,keyValues,keyStyles){var cache=this.cache[is];if(cache){for(var i=cache.length-1,data;i>=0;i--){data=cache[i];if(keyStyles===data.styles&&this._objectsEqual(keyValues,data.keyValues)){return data;}}}},clear:function(){this.cache={};},_objectsEqual:function(target,source){var t,s;for(var i in target){t=target[i],s=source[i];if(!(typeof t==='object'&&t?this._objectsStrictlyEqual(t,s):t===s)){return false;}}
-if(Array.isArray(target)){return target.length===source.length;}
-return true;},_objectsStrictlyEqual:function(target,source){return this._objectsEqual(target,source)&&this._objectsEqual(source,target);}};}());Polymer.StyleDefaults=function(){var styleProperties=Polymer.StyleProperties;var StyleCache=Polymer.StyleCache;var nativeVariables=Polymer.Settings.useNativeCSSProperties;var api={_styles:[],_properties:null,customStyle:{},_styleCache:new StyleCache(),_element:Polymer.DomApi.wrap(document.documentElement),addStyle:function(style){this._styles.push(style);this._properties=null;},get _styleProperties(){if(!this._properties){styleProperties.decorateStyles(this._styles,this);this._styles._scopeStyleProperties=null;this._properties=styleProperties.hostAndRootPropertiesForScope(this).rootProps;styleProperties.mixinCustomStyle(this._properties,this.customStyle);styleProperties.reify(this._properties);}
-return this._properties;},hasStyleProperties:function(){return Boolean(this._properties);},_needsStyleProperties:function(){},_computeStyleProperties:function(){return this._styleProperties;},updateStyles:function(properties){this._properties=null;if(properties){Polymer.Base.mixin(this.customStyle,properties);}
-this._styleCache.clear();for(var i=0,s;i<this._styles.length;i++){s=this._styles[i];s=s.__importElement||s;s._apply();}
-if(nativeVariables){styleProperties.updateNativeStyleProperties(document.documentElement,this.customStyle);}}};return api;}();(function(){'use strict';var serializeValueToAttribute=Polymer.Base.serializeValueToAttribute;var propertyUtils=Polymer.StyleProperties;var styleTransformer=Polymer.StyleTransformer;var styleDefaults=Polymer.StyleDefaults;var nativeShadow=Polymer.Settings.useNativeShadow;var nativeVariables=Polymer.Settings.useNativeCSSProperties;Polymer.Base._addFeature({_prepStyleProperties:function(){if(!nativeVariables){this._ownStylePropertyNames=this._styles&&this._styles.length?propertyUtils.decorateStyles(this._styles,this):null;}},customStyle:null,getComputedStyleValue:function(property){if(!nativeVariables&&!this._styleProperties){this._computeStyleProperties();}
-return!nativeVariables&&this._styleProperties&&this._styleProperties[property]||getComputedStyle(this).getPropertyValue(property);},_setupStyleProperties:function(){this.customStyle={};this._styleCache=null;this._styleProperties=null;this._scopeSelector=null;this._ownStyleProperties=null;this._customStyle=null;},_needsStyleProperties:function(){return Boolean(!nativeVariables&&this._ownStylePropertyNames&&this._ownStylePropertyNames.length);},_validateApplyShim:function(){if(this.__applyShimInvalid){Polymer.ApplyShim.transform(this._styles,this.__proto__);var cssText=styleTransformer.elementStyles(this);if(nativeShadow){var templateStyle=this._template.content.querySelector('style');if(templateStyle){templateStyle.textContent=cssText;}}else{var shadyStyle=this._scopeStyle&&this._scopeStyle.nextSibling;if(shadyStyle){shadyStyle.textContent=cssText;}}}},_beforeAttached:function(){if((!this._scopeSelector||this.__stylePropertiesInvalid)&&this._needsStyleProperties()){this.__stylePropertiesInvalid=false;this._updateStyleProperties();}},_findStyleHost:function(){var e=this,root;while(root=Polymer.dom(e).getOwnerRoot()){if(Polymer.isInstance(root.host)){return root.host;}
-e=root.host;}
-return styleDefaults;},_updateStyleProperties:function(){var info,scope=this._findStyleHost();if(!scope._styleProperties){scope._computeStyleProperties();}
-if(!scope._styleCache){scope._styleCache=new Polymer.StyleCache();}
-var scopeData=propertyUtils.propertyDataFromStyles(scope._styles,this);var scopeCacheable=!this.__notStyleScopeCacheable;if(scopeCacheable){scopeData.key.customStyle=this.customStyle;info=scope._styleCache.retrieve(this.is,scopeData.key,this._styles);}
-var scopeCached=Boolean(info);if(scopeCached){this._styleProperties=info._styleProperties;}else{this._computeStyleProperties(scopeData.properties);}
-this._computeOwnStyleProperties();if(!scopeCached){info=styleCache.retrieve(this.is,this._ownStyleProperties,this._styles);}
-var globalCached=Boolean(info)&&!scopeCached;var style=this._applyStyleProperties(info);if(!scopeCached){style=style&&nativeShadow?style.cloneNode(true):style;info={style:style,_scopeSelector:this._scopeSelector,_styleProperties:this._styleProperties};if(scopeCacheable){scopeData.key.customStyle={};this.mixin(scopeData.key.customStyle,this.customStyle);scope._styleCache.store(this.is,info,scopeData.key,this._styles);}
-if(!globalCached){styleCache.store(this.is,Object.create(info),this._ownStyleProperties,this._styles);}}},_computeStyleProperties:function(scopeProps){var scope=this._findStyleHost();if(!scope._styleProperties){scope._computeStyleProperties();}
-var props=Object.create(scope._styleProperties);var hostAndRootProps=propertyUtils.hostAndRootPropertiesForScope(this);this.mixin(props,hostAndRootProps.hostProps);scopeProps=scopeProps||propertyUtils.propertyDataFromStyles(scope._styles,this).properties;this.mixin(props,scopeProps);this.mixin(props,hostAndRootProps.rootProps);propertyUtils.mixinCustomStyle(props,this.customStyle);propertyUtils.reify(props);this._styleProperties=props;},_computeOwnStyleProperties:function(){var props={};for(var i=0,n;i<this._ownStylePropertyNames.length;i++){n=this._ownStylePropertyNames[i];props[n]=this._styleProperties[n];}
-this._ownStyleProperties=props;},_scopeCount:0,_applyStyleProperties:function(info){var oldScopeSelector=this._scopeSelector;this._scopeSelector=info?info._scopeSelector:this.is+'-'+this.__proto__._scopeCount++;var style=propertyUtils.applyElementStyle(this,this._styleProperties,this._scopeSelector,info&&info.style);if(!nativeShadow){propertyUtils.applyElementScopeSelector(this,this._scopeSelector,oldScopeSelector,this._scopeCssViaAttr);}
-return style;},serializeValueToAttribute:function(value,attribute,node){node=node||this;if(attribute==='class'&&!nativeShadow){var host=node===this?this.domHost||this.dataHost:this;if(host){value=host._scopeElementClass(node,value);}}
-node=this.shadyRoot&&this.shadyRoot._hasDistributed?Polymer.dom(node):node;serializeValueToAttribute.call(this,value,attribute,node);},_scopeElementClass:function(element,selector){if(!nativeShadow&&!this._scopeCssViaAttr){selector=(selector?selector+' ':'')+SCOPE_NAME+' '+this.is+(element._scopeSelector?' '+XSCOPE_NAME+' '+element._scopeSelector:'');}
-return selector;},updateStyles:function(properties){if(properties){this.mixin(this.customStyle,properties);}
-if(nativeVariables){propertyUtils.updateNativeStyleProperties(this,this.customStyle);}else{if(this.isAttached){if(this._needsStyleProperties()){this._updateStyleProperties();}else{this._styleProperties=null;}}else{this.__stylePropertiesInvalid=true;}
-if(this._styleCache){this._styleCache.clear();}
-this._updateRootStyles();}},_updateRootStyles:function(root){root=root||this.root;var c$=Polymer.dom(root)._query(function(e){return e.shadyRoot||e.shadowRoot;});for(var i=0,l=c$.length,c;i<l&&(c=c$[i]);i++){if(c.updateStyles){c.updateStyles();}}}});Polymer.updateStyles=function(properties){styleDefaults.updateStyles(properties);Polymer.Base._updateRootStyles(document);};var styleCache=new Polymer.StyleCache();Polymer.customStyleCache=styleCache;var SCOPE_NAME=styleTransformer.SCOPE_NAME;var XSCOPE_NAME=propertyUtils.XSCOPE_NAME;}());Polymer.Base._addFeature({_registerFeatures:function(){this._prepIs();if(this.factoryImpl){this._prepConstructor();}
-this._prepStyles();},_finishRegisterFeatures:function(){this._prepTemplate();this._prepShimStyles();this._prepAnnotations();this._prepEffects();this._prepBehaviors();this._prepPropertyInfo();this._prepBindings();this._prepShady();},_prepBehavior:function(b){this._addPropertyEffects(b.properties);this._addComplexObserverEffects(b.observers);this._addHostAttributes(b.hostAttributes);},_initFeatures:function(){this._setupGestures();this._setupConfigure(this.__data__);this._setupStyleProperties();this._setupDebouncers();this._setupShady();this._registerHost();if(this._template){this._validateApplyShim();this._poolContent();this._beginHosting();this._stampTemplate();this._endHosting();this._marshalAnnotationReferences();}
-this._marshalInstanceEffects();this._marshalBehaviors();this._marshalHostAttributes();this._marshalAttributes();this._tryReady();},_marshalBehavior:function(b){if(b.listeners){this._listenListeners(b.listeners);}}});(function(){var propertyUtils=Polymer.StyleProperties;var styleUtil=Polymer.StyleUtil;var cssParse=Polymer.CssParse;var styleDefaults=Polymer.StyleDefaults;var styleTransformer=Polymer.StyleTransformer;var applyShim=Polymer.ApplyShim;var debounce=Polymer.Debounce;var settings=Polymer.Settings;var updateDebouncer;Polymer({is:'custom-style',extends:'style',_template:null,properties:{include:String},ready:function(){this.__appliedElement=this.__appliedElement||this;this.__cssBuild=styleUtil.getCssBuildType(this);if(this.__appliedElement!==this){this.__appliedElement.__cssBuild=this.__cssBuild;}
-if(this.ownerDocument!==window.document&&this.__appliedElement===this){document.head.appendChild(this);}
-this._tryApply();},attached:function(){this._tryApply();},_tryApply:function(){if(!this._appliesToDocument){if(this.parentNode&&this.parentNode.localName!=='dom-module'){this._appliesToDocument=true;var e=this.__appliedElement;if(!settings.useNativeCSSProperties){this.__needsUpdateStyles=styleDefaults.hasStyleProperties();styleDefaults.addStyle(e);}
-if(e.textContent||this.include){this._apply(true);}else{var self=this;var observer=new MutationObserver(function(){observer.disconnect();self._apply(true);});observer.observe(e,{childList:true});}}}},_updateStyles:function(){Polymer.updateStyles();},_apply:function(initialApply){var e=this.__appliedElement;if(this.include){e.textContent=styleUtil.cssFromModules(this.include,true)+e.textContent;}
-if(!e.textContent){return;}
-var buildType=this.__cssBuild;var targetedBuild=styleUtil.isTargetedBuild(buildType);if(settings.useNativeCSSProperties&&targetedBuild){return;}
-var styleRules=styleUtil.rulesForStyle(e);if(!targetedBuild){styleUtil.forEachRule(styleRules,function(rule){styleTransformer.documentRule(rule);});if(settings.useNativeCSSProperties&&!buildType){applyShim.transform([e]);}}
-if(settings.useNativeCSSProperties){e.textContent=styleUtil.toCssText(styleRules);}else{var self=this;var fn=function fn(){self._flushCustomProperties();};if(initialApply){Polymer.RenderStatus.whenReady(fn);}else{fn();}}},_flushCustomProperties:function(){if(this.__needsUpdateStyles){this.__needsUpdateStyles=false;updateDebouncer=debounce(updateDebouncer,this._updateStyles);}else{this._applyCustomProperties();}},_applyCustomProperties:function(){var element=this.__appliedElement;this._computeStyleProperties();var props=this._styleProperties;var rules=styleUtil.rulesForStyle(element);if(!rules){return;}
-element.textContent=styleUtil.toCssText(rules,function(rule){var css=rule.cssText=rule.parsedCssText;if(rule.propertyInfo&&rule.propertyInfo.cssText){css=cssParse.removeCustomPropAssignment(css);rule.cssText=propertyUtils.valueForProperties(css,props);}});}});}());Polymer.Templatizer={properties:{__hideTemplateChildren__:{observer:'_showHideChildren'}},_instanceProps:Polymer.nob,_parentPropPrefix:'_parent_',templatize:function(template){this._templatized=template;if(!template._content){template._content=template.content;}
-if(template._content._ctor){this.ctor=template._content._ctor;this._prepParentProperties(this.ctor.prototype,template);return;}
-var archetype=Object.create(Polymer.Base);this._customPrepAnnotations(archetype,template);this._prepParentProperties(archetype,template);archetype._prepEffects();this._customPrepEffects(archetype);archetype._prepBehaviors();archetype._prepPropertyInfo();archetype._prepBindings();archetype._notifyPathUp=this._notifyPathUpImpl;archetype._scopeElementClass=this._scopeElementClassImpl;archetype.listen=this._listenImpl;archetype._showHideChildren=this._showHideChildrenImpl;archetype.__setPropertyOrig=this.__setProperty;archetype.__setProperty=this.__setPropertyImpl;var _constructor=this._constructorImpl;var ctor=function TemplateInstance(model,host){_constructor.call(this,model,host);};ctor.prototype=archetype;archetype.constructor=ctor;template._content._ctor=ctor;this.ctor=ctor;},_getRootDataHost:function(){return this.dataHost&&this.dataHost._rootDataHost||this.dataHost;},_showHideChildrenImpl:function(hide){var c=this._children;for(var i=0;i<c.length;i++){var n=c[i];if(Boolean(hide)!=Boolean(n.__hideTemplateChildren__)){if(n.nodeType===Node.TEXT_NODE){if(hide){n.__polymerTextContent__=n.textContent;n.textContent='';}else{n.textContent=n.__polymerTextContent__;}}else if(n.style){if(hide){n.__polymerDisplay__=n.style.display;n.style.display='none';}else{n.style.display=n.__polymerDisplay__;}}}
-n.__hideTemplateChildren__=hide;}},__setPropertyImpl:function(property,value,fromAbove,node){if(node&&node.__hideTemplateChildren__&&property=='textContent'){property='__polymerTextContent__';}
-this.__setPropertyOrig(property,value,fromAbove,node);},_debounceTemplate:function(fn){Polymer.dom.addDebouncer(this.debounce('_debounceTemplate',fn));},_flushTemplates:function(){Polymer.dom.flush();},_customPrepEffects:function(archetype){var parentProps=archetype._parentProps;for(var prop in parentProps){archetype._addPropertyEffect(prop,'function',this._createHostPropEffector(prop));}
-for(prop in this._instanceProps){archetype._addPropertyEffect(prop,'function',this._createInstancePropEffector(prop));}},_customPrepAnnotations:function(archetype,template){archetype._template=template;var c=template._content;if(!c._notes){var rootDataHost=archetype._rootDataHost;if(rootDataHost){Polymer.Annotations.prepElement=function(){rootDataHost._prepElement();};}
-c._notes=Polymer.Annotations.parseAnnotations(template);Polymer.Annotations.prepElement=null;this._processAnnotations(c._notes);}
-archetype._notes=c._notes;archetype._parentProps=c._parentProps;},_prepParentProperties:function(archetype,template){var parentProps=this._parentProps=archetype._parentProps;if(this._forwardParentProp&&parentProps){var proto=archetype._parentPropProto;var prop;if(!proto){for(prop in this._instanceProps){delete parentProps[prop];}
-proto=archetype._parentPropProto=Object.create(null);if(template!=this){Polymer.Bind.prepareModel(proto);Polymer.Base.prepareModelNotifyPath(proto);}
-for(prop in parentProps){var parentProp=this._parentPropPrefix+prop;var effects=[{kind:'function',effect:this._createForwardPropEffector(prop),fn:Polymer.Bind._functionEffect},{kind:'notify',fn:Polymer.Bind._notifyEffect,effect:{event:Polymer.CaseMap.camelToDashCase(parentProp)+'-changed'}}];proto._propertyEffects=proto._propertyEffects||{};proto._propertyEffects[parentProp]=effects;Polymer.Bind._createAccessors(proto,parentProp,effects);}}
-var self=this;if(template!=this){Polymer.Bind.prepareInstance(template);template._forwardParentProp=function(source,value){self._forwardParentProp(source,value);};}
-this._extendTemplate(template,proto);template._pathEffector=function(path,value,fromAbove){return self._pathEffectorImpl(path,value,fromAbove);};}},_createForwardPropEffector:function(prop){return function(source,value){this._forwardParentProp(prop,value);};},_createHostPropEffector:function(prop){var prefix=this._parentPropPrefix;return function(source,value){this.dataHost._templatized[prefix+prop]=value;};},_createInstancePropEffector:function(prop){return function(source,value,old,fromAbove){if(!fromAbove){this.dataHost._forwardInstanceProp(this,prop,value);}};},_extendTemplate:function(template,proto){var n$=Object.getOwnPropertyNames(proto);if(proto._propertySetter){template._propertySetter=proto._propertySetter;}
-for(var i=0,n;i<n$.length&&(n=n$[i]);i++){var val=template[n];if(val&&n=='_propertyEffects'){var pe=Polymer.Base.mixin({},val);template._propertyEffects=Polymer.Base.mixin(pe,proto._propertyEffects);}else{var pd=Object.getOwnPropertyDescriptor(proto,n);Object.defineProperty(template,n,pd);if(val!==undefined){template._propertySetter(n,val);}}}},_showHideChildren:function(hidden){},_forwardInstancePath:function(inst,path,value){},_forwardInstanceProp:function(inst,prop,value){},_notifyPathUpImpl:function(path,value){var dataHost=this.dataHost;var root=Polymer.Path.root(path);dataHost._forwardInstancePath.call(dataHost,this,path,value);if(root in dataHost._parentProps){dataHost._templatized._notifyPath(dataHost._parentPropPrefix+path,value);}},_pathEffectorImpl:function(path,value,fromAbove){if(this._forwardParentPath){if(path.indexOf(this._parentPropPrefix)===0){var subPath=path.substring(this._parentPropPrefix.length);var model=Polymer.Path.root(subPath);if(model in this._parentProps){this._forwardParentPath(subPath,value);}}}
-Polymer.Base._pathEffector.call(this._templatized,path,value,fromAbove);},_constructorImpl:function(model,host){this._rootDataHost=host._getRootDataHost();this._setupConfigure(model);this._registerHost(host);this._beginHosting();this.root=this.instanceTemplate(this._template);this.root.__noContent=!this._notes._hasContent;this.root.__styleScoped=true;this._endHosting();this._marshalAnnotatedNodes();this._marshalInstanceEffects();this._marshalAnnotatedListeners();var children=[];for(var n=this.root.firstChild;n;n=n.nextSibling){children.push(n);n._templateInstance=this;}
-this._children=children;if(host.__hideTemplateChildren__){this._showHideChildren(true);}
-this._tryReady();},_listenImpl:function(node,eventName,methodName){var model=this;var host=this._rootDataHost;var handler=host._createEventHandler(node,eventName,methodName);var decorated=function(e){e.model=model;handler(e);};host._listen(node,eventName,decorated);},_scopeElementClassImpl:function(node,value){var host=this._rootDataHost;if(host){return host._scopeElementClass(node,value);}
-return value;},stamp:function(model){model=model||{};if(this._parentProps){var templatized=this._templatized;for(var prop in this._parentProps){if(model[prop]===undefined){model[prop]=templatized[this._parentPropPrefix+prop];}}}
-return new this.ctor(model,this);},modelForElement:function(el){var model;while(el){if(model=el._templateInstance){if(model.dataHost!=this){el=model.dataHost;}else{return model;}}else{el=el.parentNode;}}}};Polymer({is:'dom-template',extends:'template',_template:null,behaviors:[Polymer.Templatizer],ready:function(){this.templatize(this);}});Polymer._collections=new WeakMap();Polymer.Collection=function(userArray){Polymer._collections.set(userArray,this);this.userArray=userArray;this.store=userArray.slice();this.initMap();};Polymer.Collection.prototype={constructor:Polymer.Collection,initMap:function(){var omap=this.omap=new WeakMap();var pmap=this.pmap={};var s=this.store;for(var i=0;i<s.length;i++){var item=s[i];if(item&&typeof item=='object'){omap.set(item,i);}else{pmap[item]=i;}}},add:function(item){var key=this.store.push(item)-1;if(item&&typeof item=='object'){this.omap.set(item,key);}else{this.pmap[item]=key;}
-return'#'+key;},removeKey:function(key){if(key=this._parseKey(key)){this._removeFromMap(this.store[key]);delete this.store[key];}},_removeFromMap:function(item){if(item&&typeof item=='object'){this.omap.delete(item);}else{delete this.pmap[item];}},remove:function(item){var key=this.getKey(item);this.removeKey(key);return key;},getKey:function(item){var key;if(item&&typeof item=='object'){key=this.omap.get(item);}else{key=this.pmap[item];}
-if(key!=undefined){return'#'+key;}},getKeys:function(){return Object.keys(this.store).map(function(key){return'#'+key;});},_parseKey:function(key){if(key&&key[0]=='#'){return key.slice(1);}},setItem:function(key,item){if(key=this._parseKey(key)){var old=this.store[key];if(old){this._removeFromMap(old);}
-if(item&&typeof item=='object'){this.omap.set(item,key);}else{this.pmap[item]=key;}
-this.store[key]=item;}},getItem:function(key){if(key=this._parseKey(key)){return this.store[key];}},getItems:function(){var items=[],store=this.store;for(var key in store){items.push(store[key]);}
-return items;},_applySplices:function(splices){var keyMap={},key;for(var i=0,s;i<splices.length&&(s=splices[i]);i++){s.addedKeys=[];for(var j=0;j<s.removed.length;j++){key=this.getKey(s.removed[j]);keyMap[key]=keyMap[key]?null:-1;}
-for(j=0;j<s.addedCount;j++){var item=this.userArray[s.index+j];key=this.getKey(item);key=key===undefined?this.add(item):key;keyMap[key]=keyMap[key]?null:1;s.addedKeys.push(key);}}
-var removed=[];var added=[];for(key in keyMap){if(keyMap[key]<0){this.removeKey(key);removed.push(key);}
-if(keyMap[key]>0){added.push(key);}}
-return[{removed:removed,added:added}];}};Polymer.Collection.get=function(userArray){return Polymer._collections.get(userArray)||new Polymer.Collection(userArray);};Polymer.Collection.applySplices=function(userArray,splices){var coll=Polymer._collections.get(userArray);return coll?coll._applySplices(splices):null;};Polymer({is:'dom-repeat',extends:'template',_template:null,properties:{items:{type:Array},as:{type:String,value:'item'},indexAs:{type:String,value:'index'},sort:{type:Function,observer:'_sortChanged'},filter:{type:Function,observer:'_filterChanged'},observe:{type:String,observer:'_observeChanged'},delay:Number,renderedItemCount:{type:Number,notify:!Polymer.Settings.suppressTemplateNotifications,readOnly:true},initialCount:{type:Number,observer:'_initializeChunking'},targetFramerate:{type:Number,value:20},notifyDomChange:{type:Boolean},_targetFrameTime:{type:Number,computed:'_computeFrameTime(targetFramerate)'}},behaviors:[Polymer.Templatizer],observers:['_itemsChanged(items.*)'],created:function(){this._instances=[];this._pool=[];this._limit=Infinity;var self=this;this._boundRenderChunk=function(){self._renderChunk();};},detached:function(){this.__isDetached=true;for(var i=0;i<this._instances.length;i++){this._detachInstance(i);}},attached:function(){if(this.__isDetached){this.__isDetached=false;var refNode;var parentNode=Polymer.dom(this).parentNode;if(parentNode.localName==this.is){refNode=parentNode;parentNode=Polymer.dom(parentNode).parentNode;}else{refNode=this;}
-var parent=Polymer.dom(parentNode);for(var i=0;i<this._instances.length;i++){this._attachInstance(i,parent,refNode);}}},ready:function(){this._instanceProps={__key__:true};this._instanceProps[this.as]=true;this._instanceProps[this.indexAs]=true;if(!this.ctor){this.templatize(this);}},_sortChanged:function(sort){var dataHost=this._getRootDataHost();this._sortFn=sort&&(typeof sort=='function'?sort:function(){return dataHost[sort].apply(dataHost,arguments);});this._needFullRefresh=true;if(this.items){this._debounceTemplate(this._render);}},_filterChanged:function(filter){var dataHost=this._getRootDataHost();this._filterFn=filter&&(typeof filter=='function'?filter:function(){return dataHost[filter].apply(dataHost,arguments);});this._needFullRefresh=true;if(this.items){this._debounceTemplate(this._render);}},_computeFrameTime:function(rate){return Math.ceil(1000/rate);},_initializeChunking:function(){if(this.initialCount){this._limit=this.initialCount;this._chunkCount=this.initialCount;this._lastChunkTime=performance.now();}},_tryRenderChunk:function(){if(this.items&&this._limit<this.items.length){this.debounce('renderChunk',this._requestRenderChunk);}},_requestRenderChunk:function(){requestAnimationFrame(this._boundRenderChunk);},_renderChunk:function(){var currChunkTime=performance.now();var ratio=this._targetFrameTime/(currChunkTime-this._lastChunkTime);this._chunkCount=Math.round(this._chunkCount*ratio)||1;this._limit+=this._chunkCount;this._lastChunkTime=currChunkTime;this._debounceTemplate(this._render);},_observeChanged:function(){this._observePaths=this.observe&&this.observe.replace('.*','.').split(' ');},_itemsChanged:function(change){if(change.path=='items'){if(Array.isArray(this.items)){this.collection=Polymer.Collection.get(this.items);}else if(!this.items){this.collection=null;}else{this._error(this._logf('dom-repeat','expected array for `items`,'+' found',this.items));}
-this._keySplices=[];this._indexSplices=[];this._needFullRefresh=true;this._initializeChunking();this._debounceTemplate(this._render);}else if(change.path=='items.splices'){this._keySplices=this._keySplices.concat(change.value.keySplices);this._indexSplices=this._indexSplices.concat(change.value.indexSplices);this._debounceTemplate(this._render);}else{var subpath=change.path.slice(6);this._forwardItemPath(subpath,change.value);this._checkObservedPaths(subpath);}},_checkObservedPaths:function(path){if(this._observePaths){path=path.substring(path.indexOf('.')+1);var paths=this._observePaths;for(var i=0;i<paths.length;i++){if(path.indexOf(paths[i])===0){this._needFullRefresh=true;if(this.delay){this.debounce('render',this._render,this.delay);}else{this._debounceTemplate(this._render);}
-return;}}}},render:function(){this._needFullRefresh=true;this._debounceTemplate(this._render);this._flushTemplates();},_render:function(){if(this._needFullRefresh){this._applyFullRefresh();this._needFullRefresh=false;}else if(this._keySplices.length){if(this._sortFn){this._applySplicesUserSort(this._keySplices);}else{if(this._filterFn){this._applyFullRefresh();}else{this._applySplicesArrayOrder(this._indexSplices);}}}else{}
-this._keySplices=[];this._indexSplices=[];var keyToIdx=this._keyToInstIdx={};for(var i=this._instances.length-1;i>=0;i--){var inst=this._instances[i];if(inst.isPlaceholder&&i<this._limit){inst=this._insertInstance(i,inst.__key__);}else if(!inst.isPlaceholder&&i>=this._limit){inst=this._downgradeInstance(i,inst.__key__);}
-keyToIdx[inst.__key__]=i;if(!inst.isPlaceholder){inst.__setProperty(this.indexAs,i,true);}}
-this._pool.length=0;this._setRenderedItemCount(this._instances.length);if(!Polymer.Settings.suppressTemplateNotifications||this.notifyDomChange){this.fire('dom-change');}
-this._tryRenderChunk();},_applyFullRefresh:function(){var c=this.collection;var keys;if(this._sortFn){keys=c?c.getKeys():[];}else{keys=[];var items=this.items;if(items){for(var i=0;i<items.length;i++){keys.push(c.getKey(items[i]));}}}
-var self=this;if(this._filterFn){keys=keys.filter(function(a){return self._filterFn(c.getItem(a));});}
-if(this._sortFn){keys.sort(function(a,b){return self._sortFn(c.getItem(a),c.getItem(b));});}
-for(i=0;i<keys.length;i++){var key=keys[i];var inst=this._instances[i];if(inst){inst.__key__=key;if(!inst.isPlaceholder&&i<this._limit){inst.__setProperty(this.as,c.getItem(key),true);}}else if(i<this._limit){this._insertInstance(i,key);}else{this._insertPlaceholder(i,key);}}
-for(var j=this._instances.length-1;j>=i;j--){this._detachAndRemoveInstance(j);}},_numericSort:function(a,b){return a-b;},_applySplicesUserSort:function(splices){var c=this.collection;var keyMap={};var key;for(var i=0,s;i<splices.length&&(s=splices[i]);i++){for(var j=0;j<s.removed.length;j++){key=s.removed[j];keyMap[key]=keyMap[key]?null:-1;}
-for(j=0;j<s.added.length;j++){key=s.added[j];keyMap[key]=keyMap[key]?null:1;}}
-var removedIdxs=[];var addedKeys=[];for(key in keyMap){if(keyMap[key]===-1){removedIdxs.push(this._keyToInstIdx[key]);}
-if(keyMap[key]===1){addedKeys.push(key);}}
-if(removedIdxs.length){removedIdxs.sort(this._numericSort);for(i=removedIdxs.length-1;i>=0;i--){var idx=removedIdxs[i];if(idx!==undefined){this._detachAndRemoveInstance(idx);}}}
-var self=this;if(addedKeys.length){if(this._filterFn){addedKeys=addedKeys.filter(function(a){return self._filterFn(c.getItem(a));});}
-addedKeys.sort(function(a,b){return self._sortFn(c.getItem(a),c.getItem(b));});var start=0;for(i=0;i<addedKeys.length;i++){start=this._insertRowUserSort(start,addedKeys[i]);}}},_insertRowUserSort:function(start,key){var c=this.collection;var item=c.getItem(key);var end=this._instances.length-1;var idx=-1;while(start<=end){var mid=start+end>>1;var midKey=this._instances[mid].__key__;var cmp=this._sortFn(c.getItem(midKey),item);if(cmp<0){start=mid+1;}else if(cmp>0){end=mid-1;}else{idx=mid;break;}}
-if(idx<0){idx=end+1;}
-this._insertPlaceholder(idx,key);return idx;},_applySplicesArrayOrder:function(splices){for(var i=0,s;i<splices.length&&(s=splices[i]);i++){for(var j=0;j<s.removed.length;j++){this._detachAndRemoveInstance(s.index);}
-for(j=0;j<s.addedKeys.length;j++){this._insertPlaceholder(s.index+j,s.addedKeys[j]);}}},_detachInstance:function(idx){var inst=this._instances[idx];if(!inst.isPlaceholder){for(var i=0;i<inst._children.length;i++){var el=inst._children[i];Polymer.dom(inst.root).appendChild(el);}
-return inst;}},_attachInstance:function(idx,parent,refNode){var inst=this._instances[idx];if(!inst.isPlaceholder){parent.insertBefore(inst.root,refNode);}},_detachAndRemoveInstance:function(idx){var inst=this._detachInstance(idx);if(inst){this._pool.push(inst);}
-this._instances.splice(idx,1);},_insertPlaceholder:function(idx,key){this._instances.splice(idx,0,{isPlaceholder:true,__key__:key});},_stampInstance:function(idx,key){var model={__key__:key};model[this.as]=this.collection.getItem(key);model[this.indexAs]=idx;return this.stamp(model);},_insertInstance:function(idx,key){var inst=this._pool.pop();if(inst){inst.__setProperty(this.as,this.collection.getItem(key),true);inst.__setProperty('__key__',key,true);}else{inst=this._stampInstance(idx,key);}
-var beforeRow=this._instances[idx+1];var beforeNode=beforeRow&&!beforeRow.isPlaceholder?beforeRow._children[0]:this;var parentNode=Polymer.dom(this).parentNode;if(parentNode.localName==this.is){if(beforeNode==this){beforeNode=parentNode;}
-parentNode=Polymer.dom(parentNode).parentNode;}
-Polymer.dom(parentNode).insertBefore(inst.root,beforeNode);this._instances[idx]=inst;return inst;},_downgradeInstance:function(idx,key){var inst=this._detachInstance(idx);if(inst){this._pool.push(inst);}
-inst={isPlaceholder:true,__key__:key};this._instances[idx]=inst;return inst;},_showHideChildren:function(hidden){for(var i=0;i<this._instances.length;i++){if(!this._instances[i].isPlaceholder)
-this._instances[i]._showHideChildren(hidden);}},_forwardInstanceProp:function(inst,prop,value){if(prop==this.as){var idx;if(this._sortFn||this._filterFn){idx=this.items.indexOf(this.collection.getItem(inst.__key__));}else{idx=inst[this.indexAs];}
-this.set('items.'+idx,value);}},_forwardInstancePath:function(inst,path,value){if(path.indexOf(this.as+'.')===0){this._notifyPath('items.'+inst.__key__+'.'+path.slice(this.as.length+1),value);}},_forwardParentProp:function(prop,value){var i$=this._instances;for(var i=0,inst;i<i$.length&&(inst=i$[i]);i++){if(!inst.isPlaceholder){inst.__setProperty(prop,value,true);}}},_forwardParentPath:function(path,value){var i$=this._instances;for(var i=0,inst;i<i$.length&&(inst=i$[i]);i++){if(!inst.isPlaceholder){inst._notifyPath(path,value,true);}}},_forwardItemPath:function(path,value){if(this._keyToInstIdx){var dot=path.indexOf('.');var key=path.substring(0,dot<0?path.length:dot);var idx=this._keyToInstIdx[key];var inst=this._instances[idx];if(inst&&!inst.isPlaceholder){if(dot>=0){path=this.as+'.'+path.substring(dot+1);inst._notifyPath(path,value,true);}else{inst.__setProperty(this.as,value,true);}}}},itemForElement:function(el){var instance=this.modelForElement(el);return instance&&instance[this.as];},keyForElement:function(el){var instance=this.modelForElement(el);return instance&&instance.__key__;},indexForElement:function(el){var instance=this.modelForElement(el);return instance&&instance[this.indexAs];}});Polymer({is:'array-selector',_template:null,properties:{items:{type:Array,observer:'clearSelection'},multi:{type:Boolean,value:false,observer:'clearSelection'},selected:{type:Object,notify:true},selectedItem:{type:Object,notify:true},toggle:{type:Boolean,value:false}},clearSelection:function(){if(Array.isArray(this.selected)){for(var i=0;i<this.selected.length;i++){this.unlinkPaths('selected.'+i);}}else{this.unlinkPaths('selected');this.unlinkPaths('selectedItem');}
-if(this.multi){if(!this.selected||this.selected.length){this.selected=[];this._selectedColl=Polymer.Collection.get(this.selected);}}else{this.selected=null;this._selectedColl=null;}
-this.selectedItem=null;},isSelected:function(item){if(this.multi){return this._selectedColl.getKey(item)!==undefined;}else{return this.selected==item;}},deselect:function(item){if(this.multi){if(this.isSelected(item)){var skey=this._selectedColl.getKey(item);this.arrayDelete('selected',item);this.unlinkPaths('selected.'+skey);}}else{this.selected=null;this.selectedItem=null;this.unlinkPaths('selected');this.unlinkPaths('selectedItem');}},select:function(item){var icol=Polymer.Collection.get(this.items);var key=icol.getKey(item);if(this.multi){if(this.isSelected(item)){if(this.toggle){this.deselect(item);}}else{this.push('selected',item);var skey=this._selectedColl.getKey(item);this.linkPaths('selected.'+skey,'items.'+key);}}else{if(this.toggle&&item==this.selected){this.deselect();}else{this.selected=item;this.selectedItem=item;this.linkPaths('selected','items.'+key);this.linkPaths('selectedItem','items.'+key);}}}});Polymer({is:'dom-if',extends:'template',_template:null,properties:{'if':{type:Boolean,value:false,observer:'_queueRender'},restamp:{type:Boolean,value:false,observer:'_queueRender'},notifyDomChange:{type:Boolean}},behaviors:[Polymer.Templatizer],_queueRender:function(){this._debounceTemplate(this._render);},detached:function(){var parentNode=this.parentNode;if(parentNode&&parentNode.localName==this.is){parentNode=Polymer.dom(parentNode).parentNode;}
-if(!parentNode||parentNode.nodeType==Node.DOCUMENT_FRAGMENT_NODE&&(!Polymer.Settings.hasShadow||!(parentNode instanceof ShadowRoot))){this._teardownInstance();}},attached:function(){if(this.if&&this.ctor){this.async(this._ensureInstance);}},render:function(){this._flushTemplates();},_render:function(){if(this.if){if(!this.ctor){this.templatize(this);}
-this._ensureInstance();this._showHideChildren();}else if(this.restamp){this._teardownInstance();}
-if(!this.restamp&&this._instance){this._showHideChildren();}
-if(this.if!=this._lastIf){if(!Polymer.Settings.suppressTemplateNotifications||this.notifyDomChange){this.fire('dom-change');}
-this._lastIf=this.if;}},_ensureInstance:function(){var refNode;var parentNode=Polymer.dom(this).parentNode;if(parentNode&&parentNode.localName==this.is){refNode=parentNode;parentNode=Polymer.dom(parentNode).parentNode;}else{refNode=this;}
-if(parentNode){if(!this._instance){this._instance=this.stamp();var root=this._instance.root;Polymer.dom(parentNode).insertBefore(root,refNode);}else{var c$=this._instance._children;if(c$&&c$.length){var lastChild=Polymer.dom(refNode).previousSibling;if(lastChild!==c$[c$.length-1]){for(var i=0,n;i<c$.length&&(n=c$[i]);i++){Polymer.dom(parentNode).insertBefore(n,refNode);}}}}}},_teardownInstance:function(){if(this._instance){var c$=this._instance._children;if(c$&&c$.length){var parent=Polymer.dom(Polymer.dom(c$[0]).parentNode);for(var i=0,n;i<c$.length&&(n=c$[i]);i++){parent.removeChild(n);}}
-this._instance=null;}},_showHideChildren:function(){var hidden=this.__hideTemplateChildren__||!this.if;if(this._instance){this._instance._showHideChildren(hidden);}},_forwardParentProp:function(prop,value){if(this._instance){this._instance.__setProperty(prop,value,true);}},_forwardParentPath:function(path,value){if(this._instance){this._instance._notifyPath(path,value,true);}}});Polymer({is:'dom-bind',properties:{notifyDomChange:{type:Boolean}},extends:'template',_template:null,created:function(){var self=this;Polymer.RenderStatus.whenReady(function(){if(document.readyState=='loading'){document.addEventListener('DOMContentLoaded',function(){self._markImportsReady();});}else{self._markImportsReady();}});},_ensureReady:function(){if(!this._readied){this._readySelf();}},_markImportsReady:function(){this._importsReady=true;this._ensureReady();},_registerFeatures:function(){this._prepConstructor();},_insertChildren:function(){var refNode;var parentNode=Polymer.dom(this).parentNode;if(parentNode.localName==this.is){refNode=parentNode;parentNode=Polymer.dom(parentNode).parentNode;}else{refNode=this;}
-Polymer.dom(parentNode).insertBefore(this.root,refNode);},_removeChildren:function(){if(this._children){for(var i=0;i<this._children.length;i++){this.root.appendChild(this._children[i]);}}},_initFeatures:function(){},_scopeElementClass:function(element,selector){if(this.dataHost){return this.dataHost._scopeElementClass(element,selector);}else{return selector;}},_configureInstanceProperties:function(){},_prepConfigure:function(){var config={};for(var prop in this._propertyEffects){config[prop]=this[prop];}
-var setupConfigure=this._setupConfigure;this._setupConfigure=function(){setupConfigure.call(this,config);};},attached:function(){if(this._importsReady){this.render();}},detached:function(){this._removeChildren();},render:function(){this._ensureReady();if(!this._children){this._template=this;this._prepAnnotations();this._prepEffects();this._prepBehaviors();this._prepConfigure();this._prepBindings();this._prepPropertyInfo();Polymer.Base._initFeatures.call(this);this._children=Polymer.TreeApi.arrayCopyChildNodes(this.root);}
-this._insertChildren();if(!Polymer.Settings.suppressTemplateNotifications||this.notifyDomChange){this.fire('dom-change');}}});'use strict';if(!Polymer.Settings.useNativeShadow){tr.showPanic('Polymer error','base only works in shadow mode');}'use strict';const global=this.window||this.global;this.tr=(function(){if(global.tr)return global.tr;function exportPath(name){const parts=name.split('.');let cur=global;for(let part;parts.length&&(part=parts.shift());){if(part in cur){cur=cur[part];}else{cur=cur[part]={};}}
-return cur;}
-function isExported(name){const parts=name.split('.');let cur=global;for(let part;parts.length&&(part=parts.shift());){if(part in cur){cur=cur[part];}else{return false;}}
-return true;}
-function isDefined(name){const parts=name.split('.');let curObject=global;for(let i=0;i<parts.length;i++){const partName=parts[i];const nextObject=curObject[partName];if(nextObject===undefined)return false;curObject=nextObject;}
-return true;}
-let panicElement=undefined;const rawPanicMessages=[];function showPanicElementIfNeeded(){if(panicElement)return;const panicOverlay=document.createElement('div');panicOverlay.style.backgroundColor='white';panicOverlay.style.border='3px solid red';panicOverlay.style.boxSizing='border-box';panicOverlay.style.color='black';panicOverlay.style.display='flex';panicOverlay.style.height='100%';panicOverlay.style.left=0;panicOverlay.style.padding='8px';panicOverlay.style.position='fixed';panicOverlay.style.top=0;panicOverlay.style.webkitFlexDirection='column';panicOverlay.style.width='100%';panicElement=document.createElement('div');panicElement.style.webkitFlex='1 1 auto';panicElement.style.overflow='auto';panicOverlay.appendChild(panicElement);if(!document.body){setTimeout(function(){document.body.appendChild(panicOverlay);},150);}else{document.body.appendChild(panicOverlay);}}
-function showPanic(panicTitle,panicDetails){if(tr.isHeadless){if(panicDetails instanceof Error)throw panicDetails;throw new Error('Panic: '+panicTitle+':\n'+panicDetails);}
-if(panicDetails instanceof Error){panicDetails=panicDetails.stack;}
-showPanicElementIfNeeded();const panicMessageEl=document.createElement('div');panicMessageEl.innerHTML='<h2 id="message"></h2>'+'<pre id="details"></pre>';panicMessageEl.querySelector('#message').textContent=panicTitle;panicMessageEl.querySelector('#details').textContent=panicDetails;panicElement.appendChild(panicMessageEl);rawPanicMessages.push({title:panicTitle,details:panicDetails});}
-function hasPanic(){return rawPanicMessages.length!==0;}
-function getPanicText(){return rawPanicMessages.map(function(msg){return msg.title;}).join(', ');}
-function exportTo(namespace,fn){const obj=exportPath(namespace);const exports=fn();for(const propertyName in exports){const propertyDescriptor=Object.getOwnPropertyDescriptor(exports,propertyName);if(propertyDescriptor){Object.defineProperty(obj,propertyName,propertyDescriptor);}}}
-function initialize(){if(global.isVinn){tr.isVinn=true;}else if(global.process&&global.process.versions.node){tr.isNode=true;}else{tr.isVinn=false;tr.isNode=false;tr.doc=document;tr.isMac=/Mac/.test(navigator.platform);tr.isWindows=/Win/.test(navigator.platform);tr.isChromeOS=/CrOS/.test(navigator.userAgent);tr.isLinux=/Linux/.test(navigator.userAgent);}
-tr.isHeadless=tr.isVinn||tr.isNode;}
-return{initialize,exportTo,isExported,isDefined,showPanic,hasPanic,getPanicText,};})();tr.initialize();'use strict';tr.exportTo('tr.b',function(){function EventTarget(){}
-EventTarget.decorate=function(target){for(const k in EventTarget.prototype){if(k==='decorate')continue;const v=EventTarget.prototype[k];if(typeof v!=='function')continue;target[k]=v;}};EventTarget.prototype={addEventListener(type,handler){if(!this.listeners_){this.listeners_=Object.create(null);}
-if(!(type in this.listeners_)){this.listeners_[type]=[handler];}else{const handlers=this.listeners_[type];if(handlers.indexOf(handler)<0){handlers.push(handler);}}},removeEventListener(type,handler){if(!this.listeners_)return;if(type in this.listeners_){const handlers=this.listeners_[type];const index=handlers.indexOf(handler);if(index>=0){if(handlers.length===1){delete this.listeners_[type];}else{handlers.splice(index,1);}}}},dispatchEvent(event){if(!this.listeners_)return true;event.__defineGetter__('target',()=>this);const realPreventDefault=event.preventDefault;event.preventDefault=function(){realPreventDefault.call(this);this.rawReturnValue=false;};const type=event.type;let prevented=0;if(type in this.listeners_){const handlers=this.listeners_[type].concat();for(let i=0,handler;handler=handlers[i];i++){if(handler.handleEvent){prevented|=handler.handleEvent.call(handler,event)===false;}else{prevented|=handler.call(this,event)===false;}}}
-return!prevented&&event.rawReturnValue;},async dispatchAsync(event){if(!this.listeners_)return true;const listeners=this.listeners_[event.type];if(listeners===undefined)return;await Promise.all(listeners.slice().map(listener=>{if(listener.handleEvent){return listener.handleEvent.call(listener,event);}
-return listener.call(this,event);}));},hasEventListener(type){return(this.listeners_!==undefined&&this.listeners_[type]!==undefined);}};return{EventTarget,};});'use strict';tr.exportTo('tr.b',function(){function RegisteredTypeInfo(constructor,metadata){this.constructor=constructor;this.metadata=metadata;}
-const BASIC_REGISTRY_MODE='BASIC_REGISTRY_MODE';const TYPE_BASED_REGISTRY_MODE='TYPE_BASED_REGISTRY_MODE';const ALL_MODES={BASIC_REGISTRY_MODE:true,TYPE_BASED_REGISTRY_MODE:true};function ExtensionRegistryOptions(mode){if(mode===undefined){throw new Error('Mode is required');}
-if(!ALL_MODES[mode]){throw new Error('Not a mode.');}
-this.mode_=mode;this.defaultMetadata_={};this.defaultConstructor_=undefined;this.defaultTypeInfo_=undefined;this.frozen_=false;}
-ExtensionRegistryOptions.prototype={freeze(){if(this.frozen_){throw new Error('Frozen');}
-this.frozen_=true;},get mode(){return this.mode_;},get defaultMetadata(){return this.defaultMetadata_;},set defaultMetadata(defaultMetadata){if(this.frozen_){throw new Error('Frozen');}
-this.defaultMetadata_=defaultMetadata;this.defaultTypeInfo_=undefined;},get defaultConstructor(){return this.defaultConstructor_;},set defaultConstructor(defaultConstructor){if(this.frozen_){throw new Error('Frozen');}
-this.defaultConstructor_=defaultConstructor;this.defaultTypeInfo_=undefined;},get defaultTypeInfo(){if(this.defaultTypeInfo_===undefined&&this.defaultConstructor_){this.defaultTypeInfo_=new RegisteredTypeInfo(this.defaultConstructor,this.defaultMetadata);}
-return this.defaultTypeInfo_;},validateConstructor(constructor){if(!this.mandatoryBaseClass)return;let curProto=constructor.prototype.__proto__;let ok=false;while(curProto){if(curProto===this.mandatoryBaseClass.prototype){ok=true;break;}
-curProto=curProto.__proto__;}
-if(!ok){throw new Error(constructor+'must be subclass of '+registry);}}};return{BASIC_REGISTRY_MODE,TYPE_BASED_REGISTRY_MODE,ExtensionRegistryOptions,RegisteredTypeInfo,};});'use strict';tr.exportTo('tr.b',function(){let Event;if(tr.isHeadless){function HeadlessEvent(type,opt_bubbles,opt_preventable){this.type=type;this.bubbles=(opt_bubbles!==undefined?!!opt_bubbles:false);this.cancelable=(opt_preventable!==undefined?!!opt_preventable:false);this.defaultPrevented=false;this.cancelBubble=false;}
-HeadlessEvent.prototype={preventDefault(){this.defaultPrevented=true;},stopPropagation(){this.cancelBubble=true;}};Event=HeadlessEvent;}else{function TrEvent(type,opt_bubbles,opt_preventable){const e=tr.doc.createEvent('Event');e.initEvent(type,!!opt_bubbles,!!opt_preventable);e.__proto__=global.Event.prototype;return e;}
-TrEvent.prototype={__proto__:global.Event.prototype};Event=TrEvent;}
-function dispatchSimpleEvent(target,type,opt_bubbles,opt_cancelable,opt_fields){const e=new tr.b.Event(type,opt_bubbles,opt_cancelable);Object.assign(e,opt_fields);return target.dispatchEvent(e);}
-async function dispatchSimpleEventAsync(target,type,opt_fields){const e=new tr.b.Event(type,false,false);Object.assign(e,opt_fields);return await target.dispatchAsync(e);}
-return{Event,dispatchSimpleEvent,dispatchSimpleEventAsync,};});'use strict';tr.exportTo('tr.b',function(){const RegisteredTypeInfo=tr.b.RegisteredTypeInfo;const ExtensionRegistryOptions=tr.b.ExtensionRegistryOptions;function decorateBasicExtensionRegistry(registry,extensionRegistryOptions){const savedStateStack=[];registry.registeredTypeInfos_=[];registry.register=function(constructor,opt_metadata){if(registry.findIndexOfRegisteredConstructor(constructor)!==undefined){throw new Error('Handler already registered for '+constructor);}
-extensionRegistryOptions.validateConstructor(constructor);const metadata={};for(const k in extensionRegistryOptions.defaultMetadata){metadata[k]=extensionRegistryOptions.defaultMetadata[k];}
-if(opt_metadata){for(const k in opt_metadata){metadata[k]=opt_metadata[k];}}
-const typeInfo=new RegisteredTypeInfo(constructor,metadata);let e=new tr.b.Event('will-register');e.typeInfo=typeInfo;registry.dispatchEvent(e);registry.registeredTypeInfos_.push(typeInfo);e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.pushCleanStateBeforeTest=function(){savedStateStack.push(registry.registeredTypeInfos_);registry.registeredTypeInfos_=[];const e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.popCleanStateAfterTest=function(){registry.registeredTypeInfos_=savedStateStack[0];savedStateStack.splice(0,1);const e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.findIndexOfRegisteredConstructor=function(constructor){for(let i=0;i<registry.registeredTypeInfos_.length;i++){if(registry.registeredTypeInfos_[i].constructor===constructor){return i;}}
-return undefined;};registry.unregister=function(constructor){const foundIndex=registry.findIndexOfRegisteredConstructor(constructor);if(foundIndex===undefined){throw new Error(constructor+' not registered');}
-registry.registeredTypeInfos_.splice(foundIndex,1);const e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.getAllRegisteredTypeInfos=function(){return registry.registeredTypeInfos_;};registry.findTypeInfo=function(constructor){const foundIndex=this.findIndexOfRegisteredConstructor(constructor);if(foundIndex!==undefined){return this.registeredTypeInfos_[foundIndex];}
-return undefined;};registry.findTypeInfoMatching=function(predicate,opt_this){opt_this=opt_this?opt_this:undefined;for(let i=0;i<registry.registeredTypeInfos_.length;++i){const typeInfo=registry.registeredTypeInfos_[i];if(predicate.call(opt_this,typeInfo)){return typeInfo;}}
-return extensionRegistryOptions.defaultTypeInfo;};registry.findTypeInfoWithName=function(name){if(typeof(name)!=='string'){throw new Error('Name is not a string.');}
-const typeInfo=registry.findTypeInfoMatching(function(ti){return ti.constructor.name===name;});if(typeInfo)return typeInfo;return undefined;};}
-return{_decorateBasicExtensionRegistry:decorateBasicExtensionRegistry};});'use strict';tr.exportTo('tr.b',function(){const categoryPartsFor={};function getCategoryParts(category){let parts=categoryPartsFor[category];if(parts!==undefined)return parts;parts=category.split(',');categoryPartsFor[category]=parts;return parts;}
-return{getCategoryParts,};});'use strict';tr.exportTo('tr.b',function(){const getCategoryParts=tr.b.getCategoryParts;const RegisteredTypeInfo=tr.b.RegisteredTypeInfo;const ExtensionRegistryOptions=tr.b.ExtensionRegistryOptions;function decorateTypeBasedExtensionRegistry(registry,extensionRegistryOptions){const savedStateStack=[];registry.registeredTypeInfos_=[];registry.categoryPartToTypeInfoMap_=new Map();registry.typeNameToTypeInfoMap_=new Map();registry.register=function(constructor,metadata){extensionRegistryOptions.validateConstructor(constructor);const typeInfo=new RegisteredTypeInfo(constructor,metadata||extensionRegistryOptions.defaultMetadata);typeInfo.typeNames=[];typeInfo.categoryParts=[];if(metadata&&metadata.typeName){typeInfo.typeNames.push(metadata.typeName);}
-if(metadata&&metadata.typeNames){typeInfo.typeNames.push.apply(typeInfo.typeNames,metadata.typeNames);}
-if(metadata&&metadata.categoryParts){typeInfo.categoryParts.push.apply(typeInfo.categoryParts,metadata.categoryParts);}
-if(typeInfo.typeNames.length===0&&typeInfo.categoryParts.length===0){throw new Error('typeName or typeNames must be provided');}
-typeInfo.typeNames.forEach(function(typeName){if(registry.typeNameToTypeInfoMap_.has(typeName)){throw new Error('typeName '+typeName+' already registered');}});typeInfo.categoryParts.forEach(function(categoryPart){if(registry.categoryPartToTypeInfoMap_.has(categoryPart)){throw new Error('categoryPart '+categoryPart+' already registered');}});let e=new tr.b.Event('will-register');e.typeInfo=typeInfo;registry.dispatchEvent(e);typeInfo.typeNames.forEach(function(typeName){registry.typeNameToTypeInfoMap_.set(typeName,typeInfo);});typeInfo.categoryParts.forEach(function(categoryPart){registry.categoryPartToTypeInfoMap_.set(categoryPart,typeInfo);});registry.registeredTypeInfos_.push(typeInfo);e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.pushCleanStateBeforeTest=function(){savedStateStack.push({registeredTypeInfos:registry.registeredTypeInfos_,typeNameToTypeInfoMap:registry.typeNameToTypeInfoMap_,categoryPartToTypeInfoMap:registry.categoryPartToTypeInfoMap_});registry.registeredTypeInfos_=[];registry.typeNameToTypeInfoMap_=new Map();registry.categoryPartToTypeInfoMap_=new Map();const e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.popCleanStateAfterTest=function(){const state=savedStateStack[0];savedStateStack.splice(0,1);registry.registeredTypeInfos_=state.registeredTypeInfos;registry.typeNameToTypeInfoMap_=state.typeNameToTypeInfoMap;registry.categoryPartToTypeInfoMap_=state.categoryPartToTypeInfoMap;const e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.unregister=function(constructor){let typeInfoIndex=-1;for(let i=0;i<registry.registeredTypeInfos_.length;i++){if(registry.registeredTypeInfos_[i].constructor===constructor){typeInfoIndex=i;break;}}
-if(typeInfoIndex===-1){throw new Error(constructor+' not registered');}
-const typeInfo=registry.registeredTypeInfos_[typeInfoIndex];registry.registeredTypeInfos_.splice(typeInfoIndex,1);typeInfo.typeNames.forEach(function(typeName){registry.typeNameToTypeInfoMap_.delete(typeName);});typeInfo.categoryParts.forEach(function(categoryPart){registry.categoryPartToTypeInfoMap_.delete(categoryPart);});const e=new tr.b.Event('registry-changed');registry.dispatchEvent(e);};registry.getTypeInfo=function(category,typeName){if(category){const categoryParts=getCategoryParts(category);for(let i=0;i<categoryParts.length;i++){const categoryPart=categoryParts[i];const typeInfo=registry.categoryPartToTypeInfoMap_.get(categoryPart);if(typeInfo!==undefined)return typeInfo;}}
-const typeInfo=registry.typeNameToTypeInfoMap_.get(typeName);if(typeInfo!==undefined)return typeInfo;return extensionRegistryOptions.defaultTypeInfo;};registry.getConstructor=function(category,typeName){const typeInfo=registry.getTypeInfo(category,typeName);if(typeInfo)return typeInfo.constructor;return undefined;};}
-return{_decorateTypeBasedExtensionRegistry:decorateTypeBasedExtensionRegistry};});'use strict';tr.exportTo('tr.b',function(){const URL_REGEX=/^(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b|file:\/\/)([-a-zA-Z0-9@:%_\+.~#?&//=]*)$/;function deepCopy(value){if(!(value instanceof Object)){if(value===undefined||value===null)return value;if(typeof value==='string')return value.substring();if(typeof value==='boolean')return value;if(typeof value==='number')return value;throw new Error('Unrecognized: '+typeof value);}
-const object=value;if(object instanceof Array){const res=new Array(object.length);for(let i=0;i<object.length;i++){res[i]=deepCopy(object[i]);}
-return res;}
-if(object.__proto__!==Object.prototype){throw new Error('Can only clone simple types');}
-const res={};for(const key in object){res[key]=deepCopy(object[key]);}
-return res;}
-function normalizeException(e){if(e===undefined||e===null){return{typeName:'UndefinedError',message:'Unknown: null or undefined exception',stack:'Unknown'};}
-if(typeof(e)==='string'){return{typeName:'StringError',message:e,stack:[e]};}
-let typeName;if(e.name){typeName=e.name;}else if(e.constructor){if(e.constructor.name){typeName=e.constructor.name;}else{typeName='AnonymousError';}}else{typeName='ErrorWithNoConstructor';}
-const msg=e.message?e.message:'Unknown';return{typeName,message:msg,stack:e.stack?e.stack:[msg]};}
-function stackTraceAsString(){return new Error().stack+'';}
-function stackTrace(){let stack=stackTraceAsString();stack=stack.split('\n');return stack.slice(2);}
-function getUsingPath(path,fromDict){const parts=path.split('.');let cur=fromDict;for(let part;parts.length&&(part=parts.shift());){if(!parts.length){return cur[part];}else if(part in cur){cur=cur[part];}else{return undefined;}}
-return undefined;}
-function formatDate(date){return date.toISOString().replace('T',' ').slice(0,19);}
-function numberToJson(n){if(isNaN(n))return'NaN';if(n===Infinity)return'Infinity';if(n===-Infinity)return'-Infinity';return n;}
-function numberFromJson(n){if(n==='NaN'||n===null)return NaN;if(n==='Infinity')return Infinity;if(n==='-Infinity')return-Infinity;return n;}
-function runLengthEncoding(ary){const encodedArray=[];for(const element of ary){if(encodedArray.length===0||encodedArray[encodedArray.length-1].value!==element){encodedArray.push({value:element,count:1,});}else{encodedArray[encodedArray.length-1].count+=1;}}
-return encodedArray;}
-function isUrl(s){return typeof(s)==='string'&&s.match(URL_REGEX)!==null;}
-function getOnlyElement(iterable){const iterator=iterable[Symbol.iterator]();const firstIteration=iterator.next();if(firstIteration.done){throw new Error('getOnlyElement was passed an empty iterable.');}
-const secondIteration=iterator.next();if(!secondIteration.done){throw new Error('getOnlyElement was passed an iterable with multiple elements.');}
-return firstIteration.value;}
-function getFirstElement(iterable){const iterator=iterable[Symbol.iterator]();const result=iterator.next();if(result.done){throw new Error('getFirstElement was passed an empty iterable.');}
-return result.value;}
-function compareArrays(x,y,elementCmp){const minLength=Math.min(x.length,y.length);let i;for(i=0;i<minLength;i++){const tmp=elementCmp(x[i],y[i]);if(tmp)return tmp;}
-if(x.length===y.length)return 0;if(x[i]===undefined)return-1;return 1;}
-function groupIntoMap(ary,callback,opt_this,opt_arrayConstructor){const arrayConstructor=opt_arrayConstructor||Array;const results=new Map();for(const element of ary){const key=callback.call(opt_this,element);let items=results.get(key);if(items===undefined){items=new arrayConstructor();results.set(key,items);}
-items.push(element);}
-return results;}
-function inPlaceFilter(array,predicate,opt_this){opt_this=opt_this||this;let nextPosition=0;for(let i=0;i<array.length;i++){if(!predicate.call(opt_this,array[i],i))continue;if(nextPosition<i){array[nextPosition]=array[i];}
-nextPosition++;}
-if(nextPosition<array.length){array.length=nextPosition;}}
-function invertArrayOfDicts(array,opt_dictGetter,opt_this){opt_this=opt_this||this;const result={};for(let i=0;i<array.length;i++){const item=array[i];if(item===undefined)continue;const dict=opt_dictGetter?opt_dictGetter.call(opt_this,item):item;if(dict===undefined)continue;for(const key in dict){let valueList=result[key];if(valueList===undefined){result[key]=valueList=new Array(array.length);}
-valueList[i]=dict[key];}}
-return result;}
-function setsEqual(a,b){if(!(a instanceof Set)||!(b instanceof Set))return false;if(a.size!==b.size)return false;for(const x of a){if(!b.has(x))return false;}
-return true;}
-function findLowIndexInSortedArray(ary,mapFn,loVal){if(ary.length===0)return 1;let low=0;let high=ary.length-1;let i;let comparison;let hitPos=-1;while(low<=high){i=Math.floor((low+high)/2);comparison=mapFn(ary[i])-loVal;if(comparison<0){low=i+1;continue;}else if(comparison>0){high=i-1;continue;}else{hitPos=i;high=i-1;}}
-return hitPos!==-1?hitPos:low;}
-function findIndexInSortedIntervals(ary,mapLoFn,mapWidthFn,loVal){const first=findLowIndexInSortedArray(ary,mapLoFn,loVal);if(first===0){if(loVal>=mapLoFn(ary[0])&&loVal<mapLoFn(ary[0])+mapWidthFn(ary[0],0)){return 0;}
-return-1;}
-if(first<ary.length){if(loVal>=mapLoFn(ary[first])&&loVal<mapLoFn(ary[first])+mapWidthFn(ary[first],first)){return first;}
-if(loVal>=mapLoFn(ary[first-1])&&loVal<mapLoFn(ary[first-1])+
-mapWidthFn(ary[first-1],first-1)){return first-1;}
-return ary.length;}
-if(first===ary.length){if(loVal>=mapLoFn(ary[first-1])&&loVal<mapLoFn(ary[first-1])+
-mapWidthFn(ary[first-1],first-1)){return first-1;}
-return ary.length;}
-return ary.length;}
-function findIndexInSortedClosedIntervals(ary,mapLoFn,mapHiFn,val){const i=findLowIndexInSortedArray(ary,mapLoFn,val);if(i===0){if(val>=mapLoFn(ary[0],0)&&val<=mapHiFn(ary[0],0)){return 0;}
-return-1;}
-if(i<ary.length){if(val>=mapLoFn(ary[i-1],i-1)&&val<=mapHiFn(ary[i-1],i-1)){return i-1;}
-if(val>=mapLoFn(ary[i],i)&&val<=mapHiFn(ary[i],i)){return i;}
-return ary.length;}
-if(i===ary.length){if(val>=mapLoFn(ary[i-1],i-1)&&val<=mapHiFn(ary[i-1],i-1)){return i-1;}
-return ary.length;}
-return ary.length;}
-function iterateOverIntersectingIntervals(ary,mapLoFn,mapWidthFn,loVal,hiVal,cb){if(ary.length===0)return;if(loVal>hiVal)return;let i=findLowIndexInSortedArray(ary,mapLoFn,loVal);if(i===-1){return;}
-if(i>0){const hi=mapLoFn(ary[i-1])+mapWidthFn(ary[i-1],i-1);if(hi>=loVal){cb(ary[i-1],i-1);}}
-if(i===ary.length){return;}
-for(let n=ary.length;i<n;i++){const lo=mapLoFn(ary[i]);if(lo>=hiVal)break;cb(ary[i],i);}}
-function findClosestElementInSortedArray(ary,mapFn,val,maxDiff){if(ary.length===0)return null;let aftIdx=findLowIndexInSortedArray(ary,mapFn,val);const befIdx=aftIdx>0?aftIdx-1:0;if(aftIdx===ary.length)aftIdx-=1;const befDiff=Math.abs(val-mapFn(ary[befIdx]));const aftDiff=Math.abs(val-mapFn(ary[aftIdx]));if(befDiff>maxDiff&&aftDiff>maxDiff)return null;const idx=befDiff<aftDiff?befIdx:aftIdx;return ary[idx];}
-function findClosestIntervalInSortedIntervals(ary,mapLoFn,mapHiFn,val,maxDiff){if(ary.length===0)return null;let idx=findLowIndexInSortedArray(ary,mapLoFn,val);if(idx>0)idx-=1;const hiInt=ary[idx];let loInt=hiInt;if(val>mapHiFn(hiInt)&&idx+1<ary.length){loInt=ary[idx+1];}
-const loDiff=Math.abs(val-mapLoFn(loInt));const hiDiff=Math.abs(val-mapHiFn(hiInt));if(loDiff>maxDiff&&hiDiff>maxDiff)return null;if(loDiff<hiDiff)return loInt;return hiInt;}
-function findFirstTrueIndexInSortedArray(array,test){let i0=0;let i1=array.length;while(i0<i1){const i=Math.trunc((i0+i1)/2);if(test(array[i])){i1=i;}else{i0=i+1;}}
-return i1;}
-return{compareArrays,deepCopy,findClosestElementInSortedArray,findClosestIntervalInSortedIntervals,findFirstTrueIndexInSortedArray,findIndexInSortedClosedIntervals,findIndexInSortedIntervals,findLowIndexInSortedArray,formatDate,getFirstElement,getOnlyElement,getUsingPath,groupIntoMap,inPlaceFilter,invertArrayOfDicts,isUrl,iterateOverIntersectingIntervals,normalizeException,numberFromJson,numberToJson,runLengthEncoding,setsEqual,stackTrace,stackTraceAsString,};});'use strict';tr.exportTo('tr.b',function(){function decorateExtensionRegistry(registry,registryOptions){if(registry.register){throw new Error('Already has registry');}
-registryOptions.freeze();if(registryOptions.mode===tr.b.BASIC_REGISTRY_MODE){tr.b._decorateBasicExtensionRegistry(registry,registryOptions);}else if(registryOptions.mode===tr.b.TYPE_BASED_REGISTRY_MODE){tr.b._decorateTypeBasedExtensionRegistry(registry,registryOptions);}else{throw new Error('Unrecognized mode');}
-if(registry.addEventListener===undefined){tr.b.EventTarget.decorate(registry);}}
-return{decorateExtensionRegistry,};});'use strict';tr.exportTo('tr.importer',function(){function Importer(){}
-Importer.prototype={__proto__:Object.prototype,get importerName(){return'Importer';},isTraceDataContainer(){return false;},extractSubtraces(){return[];},importClockSyncMarkers(){},importEvents(){},importSampleData(){},finalizeImport(){}};const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.defaultMetadata={};options.mandatoryBaseClass=Importer;tr.b.decorateExtensionRegistry(Importer,options);Importer.findImporterFor=function(eventData){const typeInfo=Importer.findTypeInfoMatching(function(ti){return ti.constructor.canImport(eventData);});if(typeInfo){return typeInfo.constructor;}
-return undefined;};return{Importer,};});'use strict';tr.exportTo('tr.e.importer.gcloud_trace',function(){function GcloudTraceImporter(model,eventData){this.importPriority=2;this.eventData_=eventData;}
-GcloudTraceImporter.canImport=function(eventData){if(typeof(eventData)!=='string'&&!(eventData instanceof String)){return false;}
-const normalizedEventData=eventData.slice(0,20).replace(/\s/g,'');if(normalizedEventData.length<14)return false;return normalizedEventData.slice(0,14)==='{"projectId":"';};GcloudTraceImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'GcloudTraceImporter';},extractSubtraces(){const traceEvents=this.createEventsForTrace();return traceEvents?[traceEvents]:[];},createEventsForTrace(){const events=[];const trace=JSON.parse(this.eventData_);const spanLength=trace.spans.length;for(let i=0;i<spanLength;i++){events.push(this.createEventForSpan(trace.traceId,trace.spans[i]));}
-return{'traceEvents':events};},createEventForSpan(traceId,span){let newArgs={};if(span.labels){newArgs=JSON.parse(JSON.stringify(span.labels));}
-newArgs['Span ID']=span.spanId;newArgs['Start Time']=span.startTime;newArgs['End Time']=span.endTime;if(span.parentSpanId){newArgs['Parent Span ID']=span.parentSpanId;}
-return{name:span.name,args:newArgs,pid:traceId,ts:Date.parse(span.startTime)*1000,dur:(Date.parse(span.endTime)-Date.parse(span.startTime))*1000,cat:'tracespan',tid:traceId,ph:'X'};}};tr.importer.Importer.register(GcloudTraceImporter);return{GcloudTraceImporter,};});'use strict';tr.exportTo('tr.b.math',function(){function convertEventsToRanges(events){return events.map(function(event){return tr.b.math.Range.fromExplicitRange(event.start,event.end);});}
-function mergeRanges(inRanges,mergeThreshold,mergeFunction){const remainingEvents=inRanges.slice();remainingEvents.sort(function(x,y){return x.min-y.min;});if(remainingEvents.length<=1){const merged=[];if(remainingEvents.length===1){merged.push(mergeFunction(remainingEvents));}
-return merged;}
-const mergedEvents=[];let currentMergeBuffer=[];let rightEdge;function beginMerging(){currentMergeBuffer.push(remainingEvents[0]);remainingEvents.splice(0,1);rightEdge=currentMergeBuffer[0].max;}
-function flushCurrentMergeBuffer(){if(currentMergeBuffer.length===0)return;mergedEvents.push(mergeFunction(currentMergeBuffer));currentMergeBuffer=[];if(remainingEvents.length!==0)beginMerging();}
-beginMerging();while(remainingEvents.length){const currentEvent=remainingEvents[0];const distanceFromRightEdge=currentEvent.min-rightEdge;if(distanceFromRightEdge<mergeThreshold){rightEdge=Math.max(rightEdge,currentEvent.max);remainingEvents.splice(0,1);currentMergeBuffer.push(currentEvent);continue;}
-flushCurrentMergeBuffer();}
-flushCurrentMergeBuffer();return mergedEvents;}
-function findEmptyRangesBetweenRanges(inRanges,opt_totalRange){if(opt_totalRange&&opt_totalRange.isEmpty)opt_totalRange=undefined;const emptyRanges=[];if(!inRanges.length){if(opt_totalRange)emptyRanges.push(opt_totalRange);return emptyRanges;}
-inRanges=inRanges.slice();inRanges.sort(function(x,y){return x.min-y.min;});if(opt_totalRange&&(opt_totalRange.min<inRanges[0].min)){emptyRanges.push(tr.b.math.Range.fromExplicitRange(opt_totalRange.min,inRanges[0].min));}
-inRanges.forEach(function(range,index){for(let otherIndex=0;otherIndex<inRanges.length;++otherIndex){if(index===otherIndex)continue;const other=inRanges[otherIndex];if(other.min>range.max){emptyRanges.push(tr.b.math.Range.fromExplicitRange(range.max,other.min));return;}
-if(other.max>range.max){return;}}
-if(opt_totalRange&&(range.max<opt_totalRange.max)){emptyRanges.push(tr.b.math.Range.fromExplicitRange(range.max,opt_totalRange.max));}});return emptyRanges;}
-return{convertEventsToRanges,findEmptyRangesBetweenRanges,mergeRanges,};});!function(t,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define(n);else{var r=n();for(var a in r)("object"==typeof exports?exports:t)[a]=r[a]}}(this,function(){return function(t){function n(a){if(r[a])return r[a].exports;var e=r[a]={exports:{},id:a,loaded:!1};return t[a].call(e.exports,e,e.exports,n),e.loaded=!0,e.exports}var r={};return n.m=t,n.c=r,n.p="",n(0)}([function(t,n,r){n.glMatrix=r(1),n.mat2=r(2),n.mat2d=r(3),n.mat3=r(4),n.mat4=r(5),n.quat=r(6),n.vec2=r(9),n.vec3=r(7),n.vec4=r(8)},function(t,n,r){var a={};a.EPSILON=1e-6,a.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,a.RANDOM=Math.random,a.setMatrixArrayType=function(t){GLMAT_ARRAY_TYPE=t};var e=Math.PI/180;a.toRadian=function(t){return t*e},t.exports=a},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},e.clone=function(t){var n=new a.ARRAY_TYPE(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},e.transpose=function(t,n){if(t===n){var r=n[1];t[1]=n[2],t[2]=r}else t[0]=n[0],t[1]=n[2],t[2]=n[1],t[3]=n[3];return t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r*u-e*a;return o?(o=1/o,t[0]=u*o,t[1]=-a*o,t[2]=-e*o,t[3]=r*o,t):null},e.adjoint=function(t,n){var r=n[0];return t[0]=n[3],t[1]=-n[1],t[2]=-n[2],t[3]=r,t},e.determinant=function(t){return t[0]*t[3]-t[2]*t[1]},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=r[0],c=r[1],f=r[2],s=r[3];return t[0]=a*i+u*c,t[1]=e*i+o*c,t[2]=a*f+u*s,t[3]=e*f+o*s,t},e.mul=e.multiply,e.rotate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c+u*i,t[1]=e*c+o*i,t[2]=a*-i+u*c,t[3]=e*-i+o*c,t},e.scale=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=r[0],c=r[1];return t[0]=a*i,t[1]=e*i,t[2]=u*c,t[3]=o*c,t},e.fromRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=-r,t[3]=a,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=n[1],t},e.str=function(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2))},e.LDU=function(t,n,r,a){return t[2]=a[2]/a[0],r[0]=a[0],r[1]=a[1],r[3]=a[3]-t[2]*r[1],[t,n,r]},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(6);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(6);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=r*u-a*e;return c?(c=1/c,t[0]=u*c,t[1]=-a*c,t[2]=-e*c,t[3]=r*c,t[4]=(e*i-u*o)*c,t[5]=(a*o-r*i)*c,t):null},e.determinant=function(t){return t[0]*t[3]-t[1]*t[2]},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=r[0],s=r[1],h=r[2],M=r[3],l=r[4],v=r[5];return t[0]=a*f+u*s,t[1]=e*f+o*s,t[2]=a*h+u*M,t[3]=e*h+o*M,t[4]=a*l+u*v+i,t[5]=e*l+o*v+c,t},e.mul=e.multiply,e.rotate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=Math.sin(r),s=Math.cos(r);return t[0]=a*s+u*f,t[1]=e*s+o*f,t[2]=a*-f+u*s,t[3]=e*-f+o*s,t[4]=i,t[5]=c,t},e.scale=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=r[0],s=r[1];return t[0]=a*f,t[1]=e*f,t[2]=u*s,t[3]=o*s,t[4]=i,t[5]=c,t},e.translate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=r[0],s=r[1];return t[0]=a,t[1]=e,t[2]=u,t[3]=o,t[4]=a*f+u*s+i,t[5]=e*f+o*s+c,t},e.fromRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=-r,t[3]=a,t[4]=0,t[5]=0,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=n[1],t[4]=0,t[5]=0,t},e.fromTranslation=function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=n[0],t[5]=n[1],t},e.str=function(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+1)},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[4],t[4]=n[5],t[5]=n[6],t[6]=n[8],t[7]=n[9],t[8]=n[10],t},e.clone=function(t){var n=new a.ARRAY_TYPE(9);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.transpose=function(t,n){if(t===n){var r=n[1],a=n[2],e=n[5];t[1]=n[3],t[2]=n[6],t[3]=r,t[5]=n[7],t[6]=a,t[7]=e}else t[0]=n[0],t[1]=n[3],t[2]=n[6],t[3]=n[1],t[4]=n[4],t[5]=n[7],t[6]=n[2],t[7]=n[5],t[8]=n[8];return t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=s*o-i*f,M=-s*u+i*c,l=f*u-o*c,v=r*h+a*M+e*l;return v?(v=1/v,t[0]=h*v,t[1]=(-s*a+e*f)*v,t[2]=(i*a-e*o)*v,t[3]=M*v,t[4]=(s*r-e*c)*v,t[5]=(-i*r+e*u)*v,t[6]=l*v,t[7]=(-f*r+a*c)*v,t[8]=(o*r-a*u)*v,t):null},e.adjoint=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8];return t[0]=o*s-i*f,t[1]=e*f-a*s,t[2]=a*i-e*o,t[3]=i*c-u*s,t[4]=r*s-e*c,t[5]=e*u-r*i,t[6]=u*f-o*c,t[7]=a*c-r*f,t[8]=r*o-a*u,t},e.determinant=function(t){var n=t[0],r=t[1],a=t[2],e=t[3],u=t[4],o=t[5],i=t[6],c=t[7],f=t[8];return n*(f*u-o*c)+r*(-f*e+o*i)+a*(c*e-u*i)},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=r[0],l=r[1],v=r[2],m=r[3],p=r[4],d=r[5],A=r[6],R=r[7],w=r[8];return t[0]=M*a+l*o+v*f,t[1]=M*e+l*i+v*s,t[2]=M*u+l*c+v*h,t[3]=m*a+p*o+d*f,t[4]=m*e+p*i+d*s,t[5]=m*u+p*c+d*h,t[6]=A*a+R*o+w*f,t[7]=A*e+R*i+w*s,t[8]=A*u+R*c+w*h,t},e.mul=e.multiply,e.translate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=r[0],l=r[1];return t[0]=a,t[1]=e,t[2]=u,t[3]=o,t[4]=i,t[5]=c,t[6]=M*a+l*o+f,t[7]=M*e+l*i+s,t[8]=M*u+l*c+h,t},e.rotate=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=Math.sin(r),l=Math.cos(r);return t[0]=l*a+M*o,t[1]=l*e+M*i,t[2]=l*u+M*c,t[3]=l*o-M*a,t[4]=l*i-M*e,t[5]=l*c-M*u,t[6]=f,t[7]=s,t[8]=h,t},e.scale=function(t,n,r){var a=r[0],e=r[1];return t[0]=a*n[0],t[1]=a*n[1],t[2]=a*n[2],t[3]=e*n[3],t[4]=e*n[4],t[5]=e*n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t},e.fromTranslation=function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=n[0],t[7]=n[1],t[8]=1,t},e.fromRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=0,t[3]=-r,t[4]=a,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=0,t[4]=n[1],t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat2d=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=0,t[3]=n[2],t[4]=n[3],t[5]=0,t[6]=n[4],t[7]=n[5],t[8]=1,t},e.fromQuat=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r+r,i=a+a,c=e+e,f=r*o,s=a*o,h=a*i,M=e*o,l=e*i,v=e*c,m=u*o,p=u*i,d=u*c;return t[0]=1-h-v,t[3]=s-d,t[6]=M+p,t[1]=s+d,t[4]=1-f-v,t[7]=l-m,t[2]=M-p,t[5]=l+m,t[8]=1-f-h,t},e.normalFromMat4=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=n[9],M=n[10],l=n[11],v=n[12],m=n[13],p=n[14],d=n[15],A=r*i-a*o,R=r*c-e*o,w=r*f-u*o,q=a*c-e*i,Y=a*f-u*i,g=e*f-u*c,y=s*m-h*v,x=s*p-M*v,P=s*d-l*v,E=h*p-M*m,T=h*d-l*m,b=M*d-l*p,D=A*b-R*T+w*E+q*P-Y*x+g*y;return D?(D=1/D,t[0]=(i*b-c*T+f*E)*D,t[1]=(c*P-o*b-f*x)*D,t[2]=(o*T-i*P+f*y)*D,t[3]=(e*T-a*b-u*E)*D,t[4]=(r*b-e*P+u*x)*D,t[5]=(a*P-r*T-u*y)*D,t[6]=(m*g-p*Y+d*q)*D,t[7]=(p*w-v*g-d*R)*D,t[8]=(v*Y-m*w+d*A)*D,t):null},e.str=function(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2))},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.clone=function(t){var n=new a.ARRAY_TYPE(16);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=t[12],n[13]=t[13],n[14]=t[14],n[15]=t[15],n},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.transpose=function(t,n){if(t===n){var r=n[1],a=n[2],e=n[3],u=n[6],o=n[7],i=n[11];t[1]=n[4],t[2]=n[8],t[3]=n[12],t[4]=r,t[6]=n[9],t[7]=n[13],t[8]=a,t[9]=u,t[11]=n[14],t[12]=e,t[13]=o,t[14]=i}else t[0]=n[0],t[1]=n[4],t[2]=n[8],t[3]=n[12],t[4]=n[1],t[5]=n[5],t[6]=n[9],t[7]=n[13],t[8]=n[2],t[9]=n[6],t[10]=n[10],t[11]=n[14],t[12]=n[3],t[13]=n[7],t[14]=n[11],t[15]=n[15];return t},e.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=n[9],M=n[10],l=n[11],v=n[12],m=n[13],p=n[14],d=n[15],A=r*i-a*o,R=r*c-e*o,w=r*f-u*o,q=a*c-e*i,Y=a*f-u*i,g=e*f-u*c,y=s*m-h*v,x=s*p-M*v,P=s*d-l*v,E=h*p-M*m,T=h*d-l*m,b=M*d-l*p,D=A*b-R*T+w*E+q*P-Y*x+g*y;return D?(D=1/D,t[0]=(i*b-c*T+f*E)*D,t[1]=(e*T-a*b-u*E)*D,t[2]=(m*g-p*Y+d*q)*D,t[3]=(M*Y-h*g-l*q)*D,t[4]=(c*P-o*b-f*x)*D,t[5]=(r*b-e*P+u*x)*D,t[6]=(p*w-v*g-d*R)*D,t[7]=(s*g-M*w+l*R)*D,t[8]=(o*T-i*P+f*y)*D,t[9]=(a*P-r*T-u*y)*D,t[10]=(v*Y-m*w+d*A)*D,t[11]=(h*w-s*Y-l*A)*D,t[12]=(i*x-o*E-c*y)*D,t[13]=(r*E-a*x+e*y)*D,t[14]=(m*R-v*q-p*A)*D,t[15]=(s*q-h*R+M*A)*D,t):null},e.adjoint=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],c=n[6],f=n[7],s=n[8],h=n[9],M=n[10],l=n[11],v=n[12],m=n[13],p=n[14],d=n[15];return t[0]=i*(M*d-l*p)-h*(c*d-f*p)+m*(c*l-f*M),t[1]=-(a*(M*d-l*p)-h*(e*d-u*p)+m*(e*l-u*M)),t[2]=a*(c*d-f*p)-i*(e*d-u*p)+m*(e*f-u*c),t[3]=-(a*(c*l-f*M)-i*(e*l-u*M)+h*(e*f-u*c)),t[4]=-(o*(M*d-l*p)-s*(c*d-f*p)+v*(c*l-f*M)),t[5]=r*(M*d-l*p)-s*(e*d-u*p)+v*(e*l-u*M),t[6]=-(r*(c*d-f*p)-o*(e*d-u*p)+v*(e*f-u*c)),t[7]=r*(c*l-f*M)-o*(e*l-u*M)+s*(e*f-u*c),t[8]=o*(h*d-l*m)-s*(i*d-f*m)+v*(i*l-f*h),t[9]=-(r*(h*d-l*m)-s*(a*d-u*m)+v*(a*l-u*h)),t[10]=r*(i*d-f*m)-o*(a*d-u*m)+v*(a*f-u*i),t[11]=-(r*(i*l-f*h)-o*(a*l-u*h)+s*(a*f-u*i)),t[12]=-(o*(h*p-M*m)-s*(i*p-c*m)+v*(i*M-c*h)),t[13]=r*(h*p-M*m)-s*(a*p-e*m)+v*(a*M-e*h),t[14]=-(r*(i*p-c*m)-o*(a*p-e*m)+v*(a*c-e*i)),t[15]=r*(i*M-c*h)-o*(a*M-e*h)+s*(a*c-e*i),t},e.determinant=function(t){var n=t[0],r=t[1],a=t[2],e=t[3],u=t[4],o=t[5],i=t[6],c=t[7],f=t[8],s=t[9],h=t[10],M=t[11],l=t[12],v=t[13],m=t[14],p=t[15],d=n*o-r*u,A=n*i-a*u,R=n*c-e*u,w=r*i-a*o,q=r*c-e*o,Y=a*c-e*i,g=f*v-s*l,y=f*m-h*l,x=f*p-M*l,P=s*m-h*v,E=s*p-M*v,T=h*p-M*m;return d*T-A*E+R*P+w*x-q*y+Y*g},e.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=n[9],l=n[10],v=n[11],m=n[12],p=n[13],d=n[14],A=n[15],R=r[0],w=r[1],q=r[2],Y=r[3];return t[0]=R*a+w*i+q*h+Y*m,t[1]=R*e+w*c+q*M+Y*p,t[2]=R*u+w*f+q*l+Y*d,t[3]=R*o+w*s+q*v+Y*A,R=r[4],w=r[5],q=r[6],Y=r[7],t[4]=R*a+w*i+q*h+Y*m,t[5]=R*e+w*c+q*M+Y*p,t[6]=R*u+w*f+q*l+Y*d,t[7]=R*o+w*s+q*v+Y*A,R=r[8],w=r[9],q=r[10],Y=r[11],t[8]=R*a+w*i+q*h+Y*m,t[9]=R*e+w*c+q*M+Y*p,t[10]=R*u+w*f+q*l+Y*d,t[11]=R*o+w*s+q*v+Y*A,R=r[12],w=r[13],q=r[14],Y=r[15],t[12]=R*a+w*i+q*h+Y*m,t[13]=R*e+w*c+q*M+Y*p,t[14]=R*u+w*f+q*l+Y*d,t[15]=R*o+w*s+q*v+Y*A,t},e.mul=e.multiply,e.translate=function(t,n,r){var a,e,u,o,i,c,f,s,h,M,l,v,m=r[0],p=r[1],d=r[2];return n===t?(t[12]=n[0]*m+n[4]*p+n[8]*d+n[12],t[13]=n[1]*m+n[5]*p+n[9]*d+n[13],t[14]=n[2]*m+n[6]*p+n[10]*d+n[14],t[15]=n[3]*m+n[7]*p+n[11]*d+n[15]):(a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],c=n[5],f=n[6],s=n[7],h=n[8],M=n[9],l=n[10],v=n[11],t[0]=a,t[1]=e,t[2]=u,t[3]=o,t[4]=i,t[5]=c,t[6]=f,t[7]=s,t[8]=h,t[9]=M,t[10]=l,t[11]=v,t[12]=a*m+i*p+h*d+n[12],t[13]=e*m+c*p+M*d+n[13],t[14]=u*m+f*p+l*d+n[14],t[15]=o*m+s*p+v*d+n[15]),t},e.scale=function(t,n,r){var a=r[0],e=r[1],u=r[2];return t[0]=n[0]*a,t[1]=n[1]*a,t[2]=n[2]*a,t[3]=n[3]*a,t[4]=n[4]*e,t[5]=n[5]*e,t[6]=n[6]*e,t[7]=n[7]*e,t[8]=n[8]*u,t[9]=n[9]*u,t[10]=n[10]*u,t[11]=n[11]*u,t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],t},e.rotate=function(t,n,r,e){var u,o,i,c,f,s,h,M,l,v,m,p,d,A,R,w,q,Y,g,y,x,P,E,T,b=e[0],D=e[1],L=e[2],_=Math.sqrt(b*b+D*D+L*L);return Math.abs(_)<a.EPSILON?null:(_=1/_,b*=_,D*=_,L*=_,u=Math.sin(r),o=Math.cos(r),i=1-o,c=n[0],f=n[1],s=n[2],h=n[3],M=n[4],l=n[5],v=n[6],m=n[7],p=n[8],d=n[9],A=n[10],R=n[11],w=b*b*i+o,q=D*b*i+L*u,Y=L*b*i-D*u,g=b*D*i-L*u,y=D*D*i+o,x=L*D*i+b*u,P=b*L*i+D*u,E=D*L*i-b*u,T=L*L*i+o,t[0]=c*w+M*q+p*Y,t[1]=f*w+l*q+d*Y,t[2]=s*w+v*q+A*Y,t[3]=h*w+m*q+R*Y,t[4]=c*g+M*y+p*x,t[5]=f*g+l*y+d*x,t[6]=s*g+v*y+A*x,t[7]=h*g+m*y+R*x,t[8]=c*P+M*E+p*T,t[9]=f*P+l*E+d*T,t[10]=s*P+v*E+A*T,t[11]=h*P+m*E+R*T,n!==t&&(t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t)},e.rotateX=function(t,n,r){var a=Math.sin(r),e=Math.cos(r),u=n[4],o=n[5],i=n[6],c=n[7],f=n[8],s=n[9],h=n[10],M=n[11];return n!==t&&(t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[4]=u*e+f*a,t[5]=o*e+s*a,t[6]=i*e+h*a,t[7]=c*e+M*a,t[8]=f*e-u*a,t[9]=s*e-o*a,t[10]=h*e-i*a,t[11]=M*e-c*a,t},e.rotateY=function(t,n,r){var a=Math.sin(r),e=Math.cos(r),u=n[0],o=n[1],i=n[2],c=n[3],f=n[8],s=n[9],h=n[10],M=n[11];return n!==t&&(t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[0]=u*e-f*a,t[1]=o*e-s*a,t[2]=i*e-h*a,t[3]=c*e-M*a,t[8]=u*a+f*e,t[9]=o*a+s*e,t[10]=i*a+h*e,t[11]=c*a+M*e,t},e.rotateZ=function(t,n,r){var a=Math.sin(r),e=Math.cos(r),u=n[0],o=n[1],i=n[2],c=n[3],f=n[4],s=n[5],h=n[6],M=n[7];return n!==t&&(t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15]),t[0]=u*e+f*a,t[1]=o*e+s*a,t[2]=i*e+h*a,t[3]=c*e+M*a,t[4]=f*e-u*a,t[5]=s*e-o*a,t[6]=h*e-i*a,t[7]=M*e-c*a,t},e.fromTranslation=function(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},e.fromScaling=function(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=n[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromRotation=function(t,n,r){var e,u,o,i=r[0],c=r[1],f=r[2],s=Math.sqrt(i*i+c*c+f*f);return Math.abs(s)<a.EPSILON?null:(s=1/s,i*=s,c*=s,f*=s,e=Math.sin(n),u=Math.cos(n),o=1-u,t[0]=i*i*o+u,t[1]=c*i*o+f*e,t[2]=f*i*o-c*e,t[3]=0,t[4]=i*c*o-f*e,t[5]=c*c*o+u,t[6]=f*c*o+i*e,t[7]=0,t[8]=i*f*o+c*e,t[9]=c*f*o-i*e,t[10]=f*f*o+u,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)},e.fromXRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromYRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromZRotation=function(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.fromRotationTranslation=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=a+a,c=e+e,f=u+u,s=a*i,h=a*c,M=a*f,l=e*c,v=e*f,m=u*f,p=o*i,d=o*c,A=o*f;return t[0]=1-(l+m),t[1]=h+A,t[2]=M-d,t[3]=0,t[4]=h-A,t[5]=1-(s+m),t[6]=v+p,t[7]=0,t[8]=M+d,t[9]=v-p,t[10]=1-(s+l),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t},e.fromRotationTranslationScale=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3],c=e+e,f=u+u,s=o+o,h=e*c,M=e*f,l=e*s,v=u*f,m=u*s,p=o*s,d=i*c,A=i*f,R=i*s,w=a[0],q=a[1],Y=a[2];return t[0]=(1-(v+p))*w,t[1]=(M+R)*w,t[2]=(l-A)*w,t[3]=0,t[4]=(M-R)*q,t[5]=(1-(h+p))*q,t[6]=(m+d)*q,t[7]=0,t[8]=(l+A)*Y,t[9]=(m-d)*Y,t[10]=(1-(h+v))*Y,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t},e.fromRotationTranslationScaleOrigin=function(t,n,r,a,e){var u=n[0],o=n[1],i=n[2],c=n[3],f=u+u,s=o+o,h=i+i,M=u*f,l=u*s,v=u*h,m=o*s,p=o*h,d=i*h,A=c*f,R=c*s,w=c*h,q=a[0],Y=a[1],g=a[2],y=e[0],x=e[1],P=e[2];return t[0]=(1-(m+d))*q,t[1]=(l+w)*q,t[2]=(v-R)*q,t[3]=0,t[4]=(l-w)*Y,t[5]=(1-(M+d))*Y,t[6]=(p+A)*Y,t[7]=0,t[8]=(v+R)*g,t[9]=(p-A)*g,t[10]=(1-(M+m))*g,t[11]=0,t[12]=r[0]+y-(t[0]*y+t[4]*x+t[8]*P),t[13]=r[1]+x-(t[1]*y+t[5]*x+t[9]*P),t[14]=r[2]+P-(t[2]*y+t[6]*x+t[10]*P),t[15]=1,t},e.fromQuat=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r+r,i=a+a,c=e+e,f=r*o,s=a*o,h=a*i,M=e*o,l=e*i,v=e*c,m=u*o,p=u*i,d=u*c;return t[0]=1-h-v,t[1]=s+d,t[2]=M-p,t[3]=0,t[4]=s-d,t[5]=1-f-v,t[6]=l+m,t[7]=0,t[8]=M+p,t[9]=l-m,t[10]=1-f-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,n,r,a,e,u,o){var i=1/(r-n),c=1/(e-a),f=1/(u-o);return t[0]=2*u*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*u*c,t[6]=0,t[7]=0,t[8]=(r+n)*i,t[9]=(e+a)*c,t[10]=(o+u)*f,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*u*2*f,t[15]=0,t},e.perspective=function(t,n,r,a,e){var u=1/Math.tan(n/2),o=1/(a-e);return t[0]=u/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(e+a)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*e*a*o,t[15]=0,t},e.perspectiveFromFieldOfView=function(t,n,r,a){var e=Math.tan(n.upDegrees*Math.PI/180),u=Math.tan(n.downDegrees*Math.PI/180),o=Math.tan(n.leftDegrees*Math.PI/180),i=Math.tan(n.rightDegrees*Math.PI/180),c=2/(o+i),f=2/(e+u);return t[0]=c,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=f,t[6]=0,t[7]=0,t[8]=-((o-i)*c*.5),t[9]=(e-u)*f*.5,t[10]=a/(r-a),t[11]=-1,t[12]=0,t[13]=0,t[14]=a*r/(r-a),t[15]=0,t},e.ortho=function(t,n,r,a,e,u,o){var i=1/(n-r),c=1/(a-e),f=1/(u-o);return t[0]=-2*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*c,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*f,t[11]=0,t[12]=(n+r)*i,t[13]=(e+a)*c,t[14]=(o+u)*f,t[15]=1,t},e.lookAt=function(t,n,r,u){var o,i,c,f,s,h,M,l,v,m,p=n[0],d=n[1],A=n[2],R=u[0],w=u[1],q=u[2],Y=r[0],g=r[1],y=r[2];return Math.abs(p-Y)<a.EPSILON&&Math.abs(d-g)<a.EPSILON&&Math.abs(A-y)<a.EPSILON?e.identity(t):(M=p-Y,l=d-g,v=A-y,m=1/Math.sqrt(M*M+l*l+v*v),M*=m,l*=m,v*=m,o=w*v-q*l,i=q*M-R*v,c=R*l-w*M,m=Math.sqrt(o*o+i*i+c*c),m?(m=1/m,o*=m,i*=m,c*=m):(o=0,i=0,c=0),f=l*c-v*i,s=v*o-M*c,h=M*i-l*o,m=Math.sqrt(f*f+s*s+h*h),m?(m=1/m,f*=m,s*=m,h*=m):(f=0,s=0,h=0),t[0]=o,t[1]=f,t[2]=M,t[3]=0,t[4]=i,t[5]=s,t[6]=l,t[7]=0,t[8]=c,t[9]=h,t[10]=v,t[11]=0,t[12]=-(o*p+i*d+c*A),t[13]=-(f*p+s*d+h*A),t[14]=-(M*p+l*d+v*A),t[15]=1,t)},e.str=function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"},e.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2)+Math.pow(t[9],2)+Math.pow(t[10],2)+Math.pow(t[11],2)+Math.pow(t[12],2)+Math.pow(t[13],2)+Math.pow(t[14],2)+Math.pow(t[15],2))},t.exports=e},function(t,n,r){var a=r(1),e=r(4),u=r(7),o=r(8),i={};i.create=function(){var t=new a.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},i.rotationTo=function(){var t=u.create(),n=u.fromValues(1,0,0),r=u.fromValues(0,1,0);return function(a,e,o){var c=u.dot(e,o);return-.999999>c?(u.cross(t,n,e),u.length(t)<1e-6&&u.cross(t,r,e),u.normalize(t,t),i.setAxisAngle(a,t,Math.PI),a):c>.999999?(a[0]=0,a[1]=0,a[2]=0,a[3]=1,a):(u.cross(t,e,o),a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=1+c,i.normalize(a,a))}}(),i.setAxes=function(){var t=e.create();return function(n,r,a,e){return t[0]=a[0],t[3]=a[1],t[6]=a[2],t[1]=e[0],t[4]=e[1],t[7]=e[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],i.normalize(n,i.fromMat3(n,t))}}(),i.clone=o.clone,i.fromValues=o.fromValues,i.copy=o.copy,i.set=o.set,i.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},i.setAxisAngle=function(t,n,r){r=.5*r;var a=Math.sin(r);return t[0]=a*n[0],t[1]=a*n[1],t[2]=a*n[2],t[3]=Math.cos(r),t},i.add=o.add,i.multiply=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=r[0],c=r[1],f=r[2],s=r[3];return t[0]=a*s+o*i+e*f-u*c,t[1]=e*s+o*c+u*i-a*f,t[2]=u*s+o*f+a*c-e*i,t[3]=o*s-a*i-e*c-u*f,t},i.mul=i.multiply,i.scale=o.scale,i.rotateX=function(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c+o*i,t[1]=e*c+u*i,t[2]=u*c-e*i,t[3]=o*c-a*i,t},i.rotateY=function(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c-u*i,t[1]=e*c+o*i,t[2]=u*c+a*i,t[3]=o*c-e*i,t},i.rotateZ=function(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),c=Math.cos(r);return t[0]=a*c+e*i,t[1]=e*c-a*i,t[2]=u*c+o*i,t[3]=o*c-u*i,t},i.calculateW=function(t,n){var r=n[0],a=n[1],e=n[2];return t[0]=r,t[1]=a,t[2]=e,t[3]=Math.sqrt(Math.abs(1-r*r-a*a-e*e)),t},i.dot=o.dot,i.lerp=o.lerp,i.slerp=function(t,n,r,a){var e,u,o,i,c,f=n[0],s=n[1],h=n[2],M=n[3],l=r[0],v=r[1],m=r[2],p=r[3];return u=f*l+s*v+h*m+M*p,0>u&&(u=-u,l=-l,v=-v,m=-m,p=-p),1-u>1e-6?(e=Math.acos(u),o=Math.sin(e),i=Math.sin((1-a)*e)/o,c=Math.sin(a*e)/o):(i=1-a,c=a),t[0]=i*f+c*l,t[1]=i*s+c*v,t[2]=i*h+c*m,t[3]=i*M+c*p,t},i.sqlerp=function(){var t=i.create(),n=i.create();return function(r,a,e,u,o,c){return i.slerp(t,a,o,c),i.slerp(n,e,u,c),i.slerp(r,t,n,2*c*(1-c)),r}}(),i.invert=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r*r+a*a+e*e+u*u,i=o?1/o:0;return t[0]=-r*i,t[1]=-a*i,t[2]=-e*i,t[3]=u*i,t},i.conjugate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t},i.length=o.length,i.len=i.length,i.squaredLength=o.squaredLength,i.sqrLen=i.squaredLength,i.normalize=o.normalize,i.fromMat3=function(t,n){var r,a=n[0]+n[4]+n[8];if(a>0)r=Math.sqrt(a+1),t[3]=.5*r,r=.5/r,t[0]=(n[5]-n[7])*r,t[1]=(n[6]-n[2])*r,t[2]=(n[1]-n[3])*r;else{var e=0;n[4]>n[0]&&(e=1),n[8]>n[3*e+e]&&(e=2);var u=(e+1)%3,o=(e+2)%3;r=Math.sqrt(n[3*e+e]-n[3*u+u]-n[3*o+o]+1),t[e]=.5*r,r=.5/r,t[3]=(n[3*u+o]-n[3*o+u])*r,t[u]=(n[3*u+e]+n[3*e+u])*r,t[o]=(n[3*o+e]+n[3*e+o])*r}return t},i.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t.exports=i},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(3);return t[0]=0,t[1]=0,t[2]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n},e.fromValues=function(t,n,r){var e=new a.ARRAY_TYPE(3);return e[0]=t,e[1]=n,e[2]=r,e},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t},e.set=function(t,n,r,a){return t[0]=n,t[1]=r,t[2]=a,t},e.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t},e.subtract=function(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t},e.sub=e.subtract,e.multiply=function(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t},e.mul=e.multiply,e.divide=function(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t},e.div=e.divide,e.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t},e.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t},e.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t},e.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t},e.distance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return Math.sqrt(r*r+a*a+e*e)},e.dist=e.distance,e.squaredDistance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return r*r+a*a+e*e},e.sqrDist=e.squaredDistance,e.length=function(t){var n=t[0],r=t[1],a=t[2];return Math.sqrt(n*n+r*r+a*a)},e.len=e.length,e.squaredLength=function(t){var n=t[0],r=t[1],a=t[2];return n*n+r*r+a*a},e.sqrLen=e.squaredLength,e.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t},e.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t},e.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=r*r+a*a+e*e;return u>0&&(u=1/Math.sqrt(u),t[0]=n[0]*u,t[1]=n[1]*u,t[2]=n[2]*u),t},e.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]},e.cross=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2];return t[0]=e*c-u*i,t[1]=u*o-a*c,t[2]=a*i-e*o,t},e.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t},e.hermite=function(t,n,r,a,e,u){var o=u*u,i=o*(2*u-3)+1,c=o*(u-2)+u,f=o*(u-1),s=o*(3-2*u);return t[0]=n[0]*i+r[0]*c+a[0]*f+e[0]*s,t[1]=n[1]*i+r[1]*c+a[1]*f+e[1]*s,t[2]=n[2]*i+r[2]*c+a[2]*f+e[2]*s,t},e.bezier=function(t,n,r,a,e,u){var o=1-u,i=o*o,c=u*u,f=i*o,s=3*u*i,h=3*c*o,M=c*u;return t[0]=n[0]*f+r[0]*s+a[0]*h+e[0]*M,t[1]=n[1]*f+r[1]*s+a[1]*h+e[1]*M,t[2]=n[2]*f+r[2]*s+a[2]*h+e[2]*M,t},e.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI,e=2*a.RANDOM()-1,u=Math.sqrt(1-e*e)*n;return t[0]=Math.cos(r)*u,t[1]=Math.sin(r)*u,t[2]=e*n,t},e.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[3]*a+r[7]*e+r[11]*u+r[15];return o=o||1,t[0]=(r[0]*a+r[4]*e+r[8]*u+r[12])/o,t[1]=(r[1]*a+r[5]*e+r[9]*u+r[13])/o,t[2]=(r[2]*a+r[6]*e+r[10]*u+r[14])/o,t},e.transformMat3=function(t,n,r){var a=n[0],e=n[1],u=n[2];return t[0]=a*r[0]+e*r[3]+u*r[6],t[1]=a*r[1]+e*r[4]+u*r[7],t[2]=a*r[2]+e*r[5]+u*r[8],t},e.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],s=f*a+i*u-c*e,h=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=s*f+l*-o+h*-c-M*-i,t[1]=h*f+l*-i+M*-o-s*-c,t[2]=M*f+l*-c+s*-i-h*-o,t},e.rotateX=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0],u[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),u[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},e.rotateY=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),u[1]=e[1],u[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},e.rotateZ=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),u[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),u[2]=e[2],t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},e.forEach=function(){var t=e.create();return function(n,r,a,e,u,o){var i,c;for(r||(r=3),a||(a=0),c=e?Math.min(e*r+a,n.length):n.length,i=a;c>i;i+=r)t[0]=n[i],t[1]=n[i+1],t[2]=n[i+2],u(t,t,o),n[i]=t[0],n[i+1]=t[1],n[i+2]=t[2];return n}}(),e.angle=function(t,n){var r=e.fromValues(t[0],t[1],t[2]),a=e.fromValues(n[0],n[1],n[2]);e.normalize(r,r),e.normalize(a,a);var u=e.dot(r,a);return u>1?0:Math.acos(u)},e.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(4);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n},e.fromValues=function(t,n,r,e){var u=new a.ARRAY_TYPE(4);return u[0]=t,u[1]=n,u[2]=r,u[3]=e,u},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t},e.set=function(t,n,r,a,e){return t[0]=n,t[1]=r,t[2]=a,t[3]=e,t},e.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t[3]=n[3]+r[3],t},e.subtract=function(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t},e.sub=e.subtract,e.multiply=function(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t[3]=n[3]*r[3],t},e.mul=e.multiply,e.divide=function(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t[3]=n[3]/r[3],t},e.div=e.divide,e.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t[3]=Math.min(n[3],r[3]),t},e.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t[3]=Math.max(n[3],r[3]),t},e.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=n[3]*r,t},e.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t[3]=n[3]+r[3]*a,t},e.distance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return Math.sqrt(r*r+a*a+e*e+u*u)},e.dist=e.distance,e.squaredDistance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return r*r+a*a+e*e+u*u},e.sqrDist=e.squaredDistance,e.length=function(t){var n=t[0],r=t[1],a=t[2],e=t[3];return Math.sqrt(n*n+r*r+a*a+e*e)},e.len=e.length,e.squaredLength=function(t){var n=t[0],r=t[1],a=t[2],e=t[3];return n*n+r*r+a*a+e*e},e.sqrLen=e.squaredLength,e.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=-n[3],t},e.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t[3]=1/n[3],t},e.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r*r+a*a+e*e+u*u;return o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=a*o,t[2]=e*o,t[3]=u*o),t},e.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},e.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t[3]=i+a*(r[3]-i),t},e.random=function(t,n){return n=n||1,t[0]=a.RANDOM(),t[1]=a.RANDOM(),t[2]=a.RANDOM(),t[3]=a.RANDOM(),e.normalize(t,t),e.scale(t,t,n),t},e.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3];return t[0]=r[0]*a+r[4]*e+r[8]*u+r[12]*o,t[1]=r[1]*a+r[5]*e+r[9]*u+r[13]*o,t[2]=r[2]*a+r[6]*e+r[10]*u+r[14]*o,t[3]=r[3]*a+r[7]*e+r[11]*u+r[15]*o,t},e.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],s=f*a+i*u-c*e,h=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=s*f+l*-o+h*-c-M*-i,t[1]=h*f+l*-i+M*-o-s*-c,t[2]=M*f+l*-c+s*-i-h*-o,t[3]=n[3],t},e.forEach=function(){var t=e.create();return function(n,r,a,e,u,o){var i,c;for(r||(r=4),a||(a=0),c=e?Math.min(e*r+a,n.length):n.length,i=a;c>i;i+=r)t[0]=n[i],t[1]=n[i+1],t[2]=n[i+2],t[3]=n[i+3],u(t,t,o),n[i]=t[0],n[i+1]=t[1],n[i+2]=t[2],n[i+3]=t[3];return n}}(),e.str=function(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},t.exports=e},function(t,n,r){var a=r(1),e={};e.create=function(){var t=new a.ARRAY_TYPE(2);return t[0]=0,t[1]=0,t},e.clone=function(t){var n=new a.ARRAY_TYPE(2);return n[0]=t[0],n[1]=t[1],n},e.fromValues=function(t,n){var r=new a.ARRAY_TYPE(2);return r[0]=t,r[1]=n,r},e.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t},e.set=function(t,n,r){return t[0]=n,t[1]=r,t},e.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t},e.subtract=function(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t},e.sub=e.subtract,e.multiply=function(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t},e.mul=e.multiply,e.divide=function(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t},e.div=e.divide,e.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t},e.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t},e.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t},e.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t},e.distance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1];return Math.sqrt(r*r+a*a)},e.dist=e.distance,e.squaredDistance=function(t,n){var r=n[0]-t[0],a=n[1]-t[1];return r*r+a*a},e.sqrDist=e.squaredDistance,e.length=function(t){var n=t[0],r=t[1];return Math.sqrt(n*n+r*r)},e.len=e.length,e.squaredLength=function(t){var n=t[0],r=t[1];return n*n+r*r},e.sqrLen=e.squaredLength,e.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t},e.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t},e.normalize=function(t,n){var r=n[0],a=n[1],e=r*r+a*a;return e>0&&(e=1/Math.sqrt(e),t[0]=n[0]*e,t[1]=n[1]*e),t},e.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},e.cross=function(t,n,r){var a=n[0]*r[1]-n[1]*r[0];return t[0]=t[1]=0,t[2]=a,t},e.lerp=function(t,n,r,a){var e=n[0],u=n[1];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t},e.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI;return t[0]=Math.cos(r)*n,t[1]=Math.sin(r)*n,t},e.transformMat2=function(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[2]*e,t[1]=r[1]*a+r[3]*e,t},e.transformMat2d=function(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[2]*e+r[4],t[1]=r[1]*a+r[3]*e+r[5],t},e.transformMat3=function(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[3]*e+r[6],t[1]=r[1]*a+r[4]*e+r[7],t},e.transformMat4=function(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[4]*e+r[12],t[1]=r[1]*a+r[5]*e+r[13],t},e.forEach=function(){var t=e.create();return function(n,r,a,e,u,o){var i,c;for(r||(r=2),a||(a=0),c=e?Math.min(e*r+a,n.length):n.length,i=a;c>i;i+=r)t[0]=n[i],t[1]=n[i+1],u(t,t,o),n[i]=t[0],n[i+1]=t[1];return n}}(),e.str=function(t){return"vec2("+t[0]+", "+t[1]+")"},t.exports=e}])});'use strict';(function(global){if(tr.isNode){const glMatrixAbsPath=HTMLImportsLoader.hrefToAbsolutePath('/gl-matrix-min.js');const glMatrixModule=require(glMatrixAbsPath);for(const exportName in glMatrixModule){global[exportName]=glMatrixModule[exportName];}}})(this);'use strict';tr.exportTo('tr.b.math',function(){const PREFERRED_NUMBER_SERIES_MULTIPLIERS=[1,2,5,10];function approximately(x,y,delta){if(delta===undefined)delta=1e-9;return Math.abs(x-y)<delta;}
-function clamp(x,lo,hi){return Math.min(Math.max(x,lo),hi);}
-function lerp(percentage,lo,hi){const range=hi-lo;return lo+percentage*range;}
-function normalize(value,lo,hi){return(value-lo)/(hi-lo);}
-function deg2rad(deg){return(Math.PI*deg)/180.0;}
-function erf(x){const sign=(x>=0)?1:-1;x=Math.abs(x);const a1=0.254829592;const a2=-0.284496736;const a3=1.421413741;const a4=-1.453152027;const a5=1.061405429;const p=0.3275911;const t=1.0/(1.0+p*x);const y=1.0-(((((a5*t+a4)*t)+a3)*t+a2)*t+a1)*t*Math.exp(-x*x);return sign*y;}
-const tmpVec2=vec2.create();const tmpVec2b=vec2.create();const tmpVec4=vec4.create();const tmpMat2d=mat2d.create();vec2.createFromArray=function(arr){if(arr.length!==2)throw new Error('Should be length 2');const v=vec2.create();vec2.set(v,arr[0],arr[1]);return v;};vec2.createXY=function(x,y){const v=vec2.create();vec2.set(v,x,y);return v;};vec2.toString=function(a){return'['+a[0]+', '+a[1]+']';};vec2.addTwoScaledUnitVectors=function(out,u1,scale1,u2,scale2){vec2.scale(tmpVec2,u1,scale1);vec2.scale(tmpVec2b,u2,scale2);vec2.add(out,tmpVec2,tmpVec2b);};vec2.interpolatePiecewiseFunction=function(points,x){if(x<points[0][0])return points[0][1];for(let i=1;i<points.length;++i){if(x<points[i][0]){const percent=normalize(x,points[i-1][0],points[i][0]);return lerp(percent,points[i-1][1],points[i][1]);}}
-return points[points.length-1][1];};vec3.createXYZ=function(x,y,z){const v=vec3.create();vec3.set(v,x,y,z);return v;};vec3.toString=function(a){return'vec3('+a[0]+', '+a[1]+', '+a[2]+')';};mat2d.translateXY=function(out,x,y){vec2.set(tmpVec2,x,y);mat2d.translate(out,out,tmpVec2);};mat2d.scaleXY=function(out,x,y){vec2.set(tmpVec2,x,y);mat2d.scale(out,out,tmpVec2);};vec4.unitize=function(out,a){out[0]=a[0]/a[3];out[1]=a[1]/a[3];out[2]=a[2]/a[3];out[3]=1;return out;};vec2.copyFromVec4=function(out,a){vec4.unitize(tmpVec4,a);vec2.copy(out,tmpVec4);};function logOrLog10(x,base){if(base===10)return Math.log10(x);return Math.log(x)/Math.log(base);}
-function lesserPower(x,opt_base){const base=opt_base||10;return Math.pow(base,Math.floor(logOrLog10(x,base)));}
-function greaterPower(x,opt_base){const base=opt_base||10;return Math.pow(base,Math.ceil(logOrLog10(x,base)));}
-function lesserWholeNumber(x){if(x===0)return 0;const pow10=(x<0)?-lesserPower(-x):lesserPower(x);return pow10*Math.floor(x/pow10);}
-function greaterWholeNumber(x){if(x===0)return 0;const pow10=(x<0)?-lesserPower(-x):lesserPower(x);return pow10*Math.ceil(x/pow10);}
-function preferredNumberLargerThanMin(min){const absMin=Math.abs(min);const conservativeGuess=tr.b.math.lesserPower(absMin);let minPreferedNumber=undefined;for(const multiplier of PREFERRED_NUMBER_SERIES_MULTIPLIERS){const tightenedGuess=conservativeGuess*multiplier;if(tightenedGuess>=absMin){minPreferedNumber=tightenedGuess;break;}}
-if(minPreferedNumber===undefined){throw new Error('Could not compute preferred number for '+min);}
-if(min<0)minPreferedNumber*=-1;return minPreferedNumber;}
-return{approximately,clamp,lerp,normalize,deg2rad,erf,lesserPower,greaterPower,lesserWholeNumber,greaterWholeNumber,preferredNumberLargerThanMin,};});'use strict';tr.exportTo('tr.b.math',function(){function Range(){this.isEmpty_=true;this.min_=undefined;this.max_=undefined;}
-Range.prototype={__proto__:Object.prototype,clone(){if(this.isEmpty)return new Range();return Range.fromExplicitRange(this.min_,this.max_);},reset(){this.isEmpty_=true;this.min_=undefined;this.max_=undefined;},get isEmpty(){return this.isEmpty_;},addRange(range){if(range.isEmpty)return;this.addValue(range.min);this.addValue(range.max);},addValue(value){if(this.isEmpty_){this.max_=value;this.min_=value;this.isEmpty_=false;return;}
-this.max_=Math.max(this.max_,value);this.min_=Math.min(this.min_,value);},set min(min){this.isEmpty_=false;this.min_=min;},get min(){if(this.isEmpty_)return undefined;return this.min_;},get max(){if(this.isEmpty_)return undefined;return this.max_;},set max(max){this.isEmpty_=false;this.max_=max;},get range(){if(this.isEmpty_)return undefined;return this.max_-this.min_;},get center(){return(this.min_+this.max_)*0.5;},get duration(){if(this.isEmpty_)return 0;return this.max_-this.min_;},enclosingPowers(opt_base){if(this.isEmpty)return new Range();return Range.fromExplicitRange(tr.b.math.lesserPower(this.min_,opt_base),tr.b.math.greaterPower(this.max_,opt_base));},normalize(x){return tr.b.math.normalize(x,this.min,this.max);},lerp(x){return tr.b.math.lerp(x,this.min,this.max);},clamp(x){return tr.b.math.clamp(x,this.min,this.max);},equals(that){if(this.isEmpty&&that.isEmpty)return true;if(this.isEmpty!==that.isEmpty)return false;return(tr.b.math.approximately(this.min,that.min)&&tr.b.math.approximately(this.max,that.max));},containsExplicitRangeInclusive(min,max){if(this.isEmpty)return false;return this.min_<=min&&max<=this.max_;},containsExplicitRangeExclusive(min,max){if(this.isEmpty)return false;return this.min_<min&&max<this.max_;},intersectsExplicitRangeInclusive(min,max){if(this.isEmpty)return false;return this.min_<=max&&min<=this.max_;},intersectsExplicitRangeExclusive(min,max){if(this.isEmpty)return false;return this.min_<max&&min<this.max_;},containsRangeInclusive(range){if(range.isEmpty)return false;return this.containsExplicitRangeInclusive(range.min_,range.max_);},containsRangeExclusive(range){if(range.isEmpty)return false;return this.containsExplicitRangeExclusive(range.min_,range.max_);},intersectsRangeInclusive(range){if(range.isEmpty)return false;return this.intersectsExplicitRangeInclusive(range.min_,range.max_);},intersectsRangeExclusive(range){if(range.isEmpty)return false;return this.intersectsExplicitRangeExclusive(range.min_,range.max_);},findExplicitIntersectionDuration(min,max){min=Math.max(this.min,min);max=Math.min(this.max,max);if(max<min)return 0;return max-min;},findIntersection(range){if(this.isEmpty||range.isEmpty)return new Range();const min=Math.max(this.min,range.min);const max=Math.min(this.max,range.max);if(max<min)return new Range();return Range.fromExplicitRange(min,max);},toJSON(){if(this.isEmpty_)return{isEmpty:true};return{isEmpty:false,max:this.max,min:this.min};},filterArray(sortedArray,opt_keyFunc,opt_this){if(this.isEmpty_)return[];const keyFunc=opt_keyFunc||(x=>x);function getValue(obj){return keyFunc.call(opt_this,obj);}
-const first=tr.b.findFirstTrueIndexInSortedArray(sortedArray,obj=>this.min_===undefined||this.min_<=getValue(obj));const last=tr.b.findFirstTrueIndexInSortedArray(sortedArray,obj=>this.max_!==undefined&&this.max_<getValue(obj));return sortedArray.slice(first,last);}};Range.fromDict=function(d){if(d.isEmpty===true)return new Range();if(d.isEmpty===false){const range=new Range();range.min=d.min;range.max=d.max;return range;}
-throw new Error('Not a range');};Range.fromExplicitRange=function(min,max){const range=new Range();range.min=min;range.max=max;return range;};Range.compareByMinTimes=function(a,b){if(!a.isEmpty&&!b.isEmpty)return a.min_-b.min_;if(a.isEmpty&&!b.isEmpty)return-1;if(!a.isEmpty&&b.isEmpty)return 1;return 0;};Range.findDifference=function(rangeA,rangeB){if(!rangeA||rangeA.duration<0||!rangeB||rangeB.duration<0){throw new Error(`Couldn't subtract ranges`);}
-const resultRanges=[];if(rangeA.isEmpty)return resultRanges;if(rangeB.isEmpty)return[rangeA.clone()];const intersection=rangeA.findIntersection(rangeB);if(intersection.isEmpty){return[rangeA.clone()];}
-if(rangeA.duration===0&&rangeB.duration===0){if(intersection.empty)return[rangeA.clone()];else if(intersection.duration===0)return resultRanges;throw new Error(`Two points' intersection can only be a point or empty`);}
-const leftRange=tr.b.math.Range.fromExplicitRange(rangeA.min,intersection.min);if(leftRange.duration>0){resultRanges.push(leftRange);}
-const rightRange=tr.b.math.Range.fromExplicitRange(intersection.max,rangeA.max);if(rightRange.duration>0){resultRanges.push(rightRange);}
-return resultRanges;};Range.PERCENT_RANGE=Range.fromExplicitRange(0,1);Object.freeze(Range.PERCENT_RANGE);return{Range,};});'use strict';(function(exports){var rank={standard:function(array,key){array=array.sort(function(a,b){var x=a[key];var y=b[key];return((x<y)?-1:((x>y)?1:0));});for(var i=1;i<array.length+1;i++){array[i-1]['rank']=i;}
-return array;},fractional:function(array,key){array=this.standard(array,key);var pos=0;while(pos<array.length){var sum=0;var i=0;for(i=0;array[pos+i+1]&&(array[pos+i][key]===array[pos+i+1][key]);i++){sum+=array[pos+i]['rank'];}
-sum+=array[pos+i]['rank'];var endPos=pos+i+1;for(pos;pos<endPos;pos++){array[pos]['rank']=sum/(i+1);}
-pos=endPos;}
-return array;},rank:function(x,y){var nx=x.length,ny=y.length,combined=[],ranked;while(nx--){combined.push({set:'x',val:x[nx]});}
-while(ny--){combined.push({set:'y',val:y[ny]});}
-ranked=this.fractional(combined,'val');return ranked}};var erf=function erf(x){var cof=[-1.3026537197817094,6.4196979235649026e-1,1.9476473204185836e-2,-9.561514786808631e-3,-9.46595344482036e-4,3.66839497852761e-4,4.2523324806907e-5,-2.0278578112534e-5,-1.624290004647e-6,1.303655835580e-6,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,9.6467911e-11,2.394038e-12,-6.886027e-12,8.94487e-13,3.13092e-13,-1.12708e-13,3.81e-16,7.106e-15,-1.523e-15,-9.4e-17,1.21e-16,-2.8e-17];var j=cof.length-1;var isneg=false;var d=0;var dd=0;var t,ty,tmp,res;if(x<0){x=-x;isneg=true;}
-t=2/(2+x);ty=4*t-2;for(;j>0;j--){tmp=d;d=ty*d-dd+cof[j];dd=tmp;}
-res=t*Math.exp(-x*x+0.5*(cof[0]+ty*d)-dd);return isneg?res-1:1-res;};var dnorm=function(x,mean,std){return 0.5*(1+erf((x-mean)/Math.sqrt(2*std*std)));}
-var statistic=function(x,y){var ranked=rank.rank(x,y),nr=ranked.length,nx=x.length,ny=y.length,ranksums={x:0,y:0},i=0,t=0,nt=1,tcf,ux,uy;while(i<nr){if(i>0){if(ranked[i].val==ranked[i-1].val){nt++;}else{if(nt>1){t+=Math.pow(nt,3)-nt
-nt=1;}}}
-ranksums[ranked[i].set]+=ranked[i].rank
-i++;}
-tcf=1-(t/(Math.pow(nr,3)-nr))
-ux=nx*ny+(nx*(nx+1)/2)-ranksums.x;uy=nx*ny-ux;return{tcf:tcf,ux:ux,uy:uy,big:Math.max(ux,uy),small:Math.min(ux,uy)}}
-exports.test=function(x,y,alt,corr){alt=typeof alt!=='undefined'?alt:'two-sided';corr=typeof corr!=='undefined'?corr:true;var nx=x.length,ny=y.length,f=1,u,mu,std,z,p;u=statistic(x,y);if(corr){mu=(nx*ny/2)+0.5;}else{mu=nx*ny/2;}
-std=Math.sqrt(u.tcf*nx*ny*(nx+ny+1)/12);if(alt=='less'){z=(u.ux-mu)/std;}else if(alt=='greater'){z=(u.uy-mu)/std;}else if(alt=='two-sided'){z=Math.abs((u.big-mu)/std);}else{console.log('Unknown alternative argument');}
-if(alt=='two-sided'){f=2;}
-p=dnorm(-z,0,1)*f;return{U:u.small,p:p};}})(typeof exports==='undefined'?this['mannwhitneyu']={}:exports);'use strict';(function(global){if(tr.isNode){const mwuAbsPath=HTMLImportsLoader.hrefToAbsolutePath('/mannwhitneyu.js');const mwuModule=require(mwuAbsPath);for(const exportName in mwuModule){global[exportName]=mwuModule[exportName];}}})(this);'use strict';tr.exportTo('tr.b.math',function(){const Statistics={};Statistics.divideIfPossibleOrZero=function(numerator,denominator){if(denominator===0)return 0;return numerator/denominator;};Statistics.sum=function(ary,opt_func,opt_this){const func=opt_func||(x=>x);let ret=0;let i=0;for(const elt of ary){ret+=func.call(opt_this,elt,i++);}
-return ret;};Statistics.mean=function(ary,opt_func,opt_this){const func=opt_func||(x=>x);let sum=0;let i=0;for(const elt of ary){sum+=func.call(opt_this,elt,i++);}
-if(i===0)return undefined;return sum/i;};Statistics.geometricMean=function(ary,opt_func,opt_this){const func=opt_func||(x=>x);let i=0;let logsum=0;for(const elt of ary){const x=func.call(opt_this,elt,i++);if(x<=0)return 0;logsum+=Math.log(Math.abs(x));}
-if(i===0)return 1;return Math.exp(logsum/i);};Statistics.weightedMean=function(ary,weightCallback,opt_valueCallback,opt_this){const valueCallback=opt_valueCallback||(x=>x);let numerator=0;let denominator=0;let i=-1;for(const elt of ary){i++;const value=valueCallback.call(opt_this,elt,i);if(value===undefined)continue;const weight=weightCallback.call(opt_this,elt,i,value);numerator+=weight*value;denominator+=weight;}
-if(denominator===0)return undefined;return numerator/denominator;};Statistics.variance=function(ary,opt_func,opt_this){if(ary.length===0)return undefined;if(ary.length===1)return 0;const func=opt_func||(x=>x);const mean=Statistics.mean(ary,func,opt_this);const sumOfSquaredDistances=Statistics.sum(ary,function(d,i){const v=func.call(this,d,i)-mean;return v*v;},opt_this);return sumOfSquaredDistances/(ary.length-1);};Statistics.stddev=function(ary,opt_func,opt_this){if(ary.length===0)return undefined;return Math.sqrt(Statistics.variance(ary,opt_func,opt_this));};Statistics.max=function(ary,opt_func,opt_this){const func=opt_func||(x=>x);let ret=-Infinity;let i=0;for(const elt of ary){ret=Math.max(ret,func.call(opt_this,elt,i++));}
-return ret;};Statistics.min=function(ary,opt_func,opt_this){const func=opt_func||(x=>x);let ret=Infinity;let i=0;for(const elt of ary){ret=Math.min(ret,func.call(opt_this,elt,i++));}
-return ret;};Statistics.range=function(ary,opt_func,opt_this){const func=opt_func||(x=>x);const ret=new tr.b.math.Range();let i=0;for(const elt of ary){ret.addValue(func.call(opt_this,elt,i++));}
-return ret;};Statistics.percentile=function(ary,percent,opt_func,opt_this){if(!(percent>=0&&percent<=1)){throw new Error('percent must be [0,1]');}
-const func=opt_func||(x=>x);const tmp=new Array(ary.length);let i=0;for(const elt of ary){tmp[i]=func.call(opt_this,elt,i++);}
-tmp.sort((a,b)=>a-b);const idx=Math.floor((ary.length-1)*percent);return tmp[idx];};Statistics.normalizeSamples=function(samples){if(samples.length===0){return{normalized_samples:samples,scale:1.0};}
-samples=samples.slice().sort(function(a,b){return a-b;});const low=Math.min.apply(null,samples);const high=Math.max.apply(null,samples);const newLow=0.5/samples.length;const newHigh=(samples.length-0.5)/samples.length;if(high-low===0.0){samples=Array.apply(null,new Array(samples.length)).map(function(){return 0.5;});return{normalized_samples:samples,scale:1.0};}
-const scale=(newHigh-newLow)/(high-low);for(let i=0;i<samples.length;i++){samples[i]=(samples[i]-low)*scale+newLow;}
-return{normalized_samples:samples,scale};};Statistics.discrepancy=function(samples,opt_locationCount){if(samples.length===0)return 0.0;let maxLocalDiscrepancy=0;const invSampleCount=1.0/samples.length;const locations=[];const countLess=[];const countLessEqual=[];if(opt_locationCount!==undefined){let sampleIndex=0;for(let i=0;i<opt_locationCount;i++){const location=i/(opt_locationCount-1);locations.push(location);while(sampleIndex<samples.length&&samples[sampleIndex]<location){sampleIndex+=1;}
-countLess.push(sampleIndex);while(sampleIndex<samples.length&&samples[sampleIndex]<=location){sampleIndex+=1;}
-countLessEqual.push(sampleIndex);}}else{if(samples[0]>0.0){locations.push(0.0);countLess.push(0);countLessEqual.push(0);}
-for(let i=0;i<samples.length;i++){locations.push(samples[i]);countLess.push(i);countLessEqual.push(i+1);}
-if(samples[-1]<1.0){locations.push(1.0);countLess.push(samples.length);countLessEqual.push(samples.length);}}
-let maxDiff=0;let minDiff=0;for(let i=1;i<locations.length;i++){const length=locations[i]-locations[i-1];const countClosed=countLessEqual[i]-countLess[i-1];const countOpen=countLess[i]-countLessEqual[i-1];const countClosedIncrement=countLessEqual[i]-countLessEqual[i-1];const countOpenIncrement=countLess[i]-countLess[i-1];maxDiff=Math.max(countClosedIncrement*invSampleCount-length+maxDiff,countClosed*invSampleCount-length);minDiff=Math.min(countOpenIncrement*invSampleCount-length+minDiff,countOpen*invSampleCount-length);maxLocalDiscrepancy=Math.max(maxDiff,-minDiff,maxLocalDiscrepancy);}
-return maxLocalDiscrepancy;};Statistics.timestampsDiscrepancy=function(timestamps,opt_absolute,opt_locationCount){if(timestamps.length===0)return 0.0;if(opt_absolute===undefined)opt_absolute=true;if(Array.isArray(timestamps[0])){const rangeDiscrepancies=timestamps.map(function(r){return Statistics.timestampsDiscrepancy(r);});return Math.max.apply(null,rangeDiscrepancies);}
-const s=Statistics.normalizeSamples(timestamps);const samples=s.normalized_samples;const sampleScale=s.scale;let discrepancy=Statistics.discrepancy(samples,opt_locationCount);const invSampleCount=1.0/samples.length;if(opt_absolute===true){discrepancy/=sampleScale;}else{discrepancy=tr.b.math.clamp((discrepancy-invSampleCount)/(1.0-invSampleCount),0.0,1.0);}
-return discrepancy;};Statistics.durationsDiscrepancy=function(durations,opt_absolute,opt_locationCount){if(durations.length===0)return 0.0;const timestamps=durations.reduce(function(prev,curr,index,array){prev.push(prev[prev.length-1]+curr);return prev;},[0]);return Statistics.timestampsDiscrepancy(timestamps,opt_absolute,opt_locationCount);};Statistics.uniformlySampleArray=function(samples,count){if(samples.length<=count){return samples;}
-while(samples.length>count){const i=parseInt(Math.random()*samples.length);samples.splice(i,1);}
-return samples;};Statistics.uniformlySampleStream=function(samples,streamLength,newElement,numSamples){if(streamLength<=numSamples){if(samples.length>=streamLength){samples[streamLength-1]=newElement;}else{samples.push(newElement);}
-return;}
-const probToKeep=numSamples/streamLength;if(Math.random()>probToKeep)return;const index=Math.floor(Math.random()*numSamples);samples[index]=newElement;};Statistics.mergeSampledStreams=function(samplesA,streamLengthA,samplesB,streamLengthB,numSamples){if(streamLengthB<numSamples){const nbElements=Math.min(streamLengthB,samplesB.length);for(let i=0;i<nbElements;++i){Statistics.uniformlySampleStream(samplesA,streamLengthA+i+1,samplesB[i],numSamples);}
-return;}
-if(streamLengthA<numSamples){const nbElements=Math.min(streamLengthA,samplesA.length);const tempSamples=samplesB.slice();for(let i=0;i<nbElements;++i){Statistics.uniformlySampleStream(tempSamples,streamLengthB+i+1,samplesA[i],numSamples);}
-for(let i=0;i<tempSamples.length;++i){samplesA[i]=tempSamples[i];}
-return;}
-const nbElements=Math.min(numSamples,samplesB.length);const probOfSwapping=streamLengthB/(streamLengthA+streamLengthB);for(let i=0;i<nbElements;++i){if(Math.random()<probOfSwapping){samplesA[i]=samplesB[i];}}};function Distribution(){}
-Distribution.prototype={computeDensity(x){throw Error('Not implemented');},computePercentile(x){throw Error('Not implemented');},computeComplementaryPercentile(x){return 1-this.computePercentile(x);},get mean(){throw Error('Not implemented');},get mode(){throw Error('Not implemented');},get median(){throw Error('Not implemented');},get standardDeviation(){throw Error('Not implemented');},get variance(){throw Error('Not implemented');}};Statistics.UniformDistribution=function(opt_range){if(!opt_range)opt_range=tr.b.math.Range.fromExplicitRange(0,1);this.range=opt_range;};Statistics.UniformDistribution.prototype={__proto__:Distribution.prototype,computeDensity(x){return 1/this.range.range;},computePercentile(x){return tr.b.math.normalize(x,this.range.min,this.range.max);},get mean(){return this.range.center;},get mode(){return undefined;},get median(){return this.mean;},get standardDeviation(){return Math.sqrt(this.variance);},get variance(){return Math.pow(this.range.range,2)/12;}};Statistics.NormalDistribution=function(opt_mean,opt_variance){this.mean_=opt_mean||0;this.variance_=opt_variance||1;this.standardDeviation_=Math.sqrt(this.variance_);};Statistics.NormalDistribution.prototype={__proto__:Distribution.prototype,computeDensity(x){const scale=(1.0/(this.standardDeviation*Math.sqrt(2.0*Math.PI)));const exponent=-Math.pow(x-this.mean,2)/(2.0*this.variance);return scale*Math.exp(exponent);},computePercentile(x){const standardizedX=((x-this.mean)/Math.sqrt(2.0*this.variance));return(1.0+tr.b.math.erf(standardizedX))/2.0;},get mean(){return this.mean_;},get median(){return this.mean;},get mode(){return this.mean;},get standardDeviation(){return this.standardDeviation_;},get variance(){return this.variance_;}};Statistics.LogNormalDistribution=function(opt_location,opt_shape){this.normalDistribution_=new Statistics.NormalDistribution(opt_location,Math.pow(opt_shape||1,2));};Statistics.LogNormalDistribution.prototype={__proto__:Statistics.NormalDistribution.prototype,computeDensity(x){return this.normalDistribution_.computeDensity(Math.log(x))/x;},computePercentile(x){return this.normalDistribution_.computePercentile(Math.log(x));},get mean(){return Math.exp(this.normalDistribution_.mean+
-(this.normalDistribution_.variance/2));},get variance(){const nm=this.normalDistribution_.mean;const nv=this.normalDistribution_.variance;return(Math.exp(2*(nm+nv))-
-Math.exp(2*nm+nv));},get standardDeviation(){return Math.sqrt(this.variance);},get median(){return Math.exp(this.normalDistribution_.mean);},get mode(){return Math.exp(this.normalDistribution_.mean-
-this.normalDistribution_.variance);}};Statistics.LogNormalDistribution.fromMedianAndDiminishingReturns=function(median,diminishingReturns){diminishingReturns=Math.log(diminishingReturns/median);const shape=Math.sqrt(1-3*diminishingReturns-
-Math.sqrt(Math.pow(diminishingReturns-3,2)-8))/2;const location=Math.log(median);return new Statistics.LogNormalDistribution(location,shape);};Statistics.DEFAULT_ALPHA=0.01;Statistics.MAX_SUGGESTED_SAMPLE_SIZE=20;Statistics.Significance={SIGNIFICANT:'REJECT',INSIGNIFICANT:'FAIL_TO_REJECT',NEED_MORE_DATA:'NEED_MORE_DATA',DONT_CARE:'DONT_CARE',};class HypothesisTestResult{constructor(p,u,needMoreData,opt_alpha){this.p_=p;this.u_=u;this.needMoreData_=needMoreData;this.compare(opt_alpha);}
-get p(){return this.p_;}
-get U(){return this.u_;}
-get significance(){return this.significance_;}
-compare(opt_alpha){const alpha=opt_alpha||Statistics.DEFAULT_ALPHA;if(this.p<alpha){this.significance_=Statistics.Significance.SIGNIFICANT;}else if(this.needMoreData_){this.significance_=Statistics.Significance.NEED_MORE_DATA;}else{this.significance_=Statistics.Significance.INSIGNIFICANT;}
-return this.significance_;}
-asDict(){return{p:this.p,U:this.U,significance:this.significance,};}}
-Statistics.mwu=function(a,b,opt_alpha,opt_reqSampleSize){const result=mannwhitneyu.test(a,b);const needMoreData=opt_reqSampleSize&&Math.min(a.length,b.length)<opt_reqSampleSize;return new HypothesisTestResult(result.p,result.U,needMoreData,opt_alpha);};return{Statistics,};});'use strict';const GREEK_SMALL_LETTER_MU=String.fromCharCode(956);tr.exportTo('tr.b',function(){const SECONDS_IN_A_MINUTE=60;const SECONDS_IN_AN_HOUR=SECONDS_IN_A_MINUTE*60;const SECONDS_IN_A_DAY=SECONDS_IN_AN_HOUR*24;const SECONDS_IN_A_WEEK=SECONDS_IN_A_DAY*7;const SECONDS_IN_A_YEAR=SECONDS_IN_A_DAY*365.2422;const SECONDS_IN_A_MONTH=SECONDS_IN_A_YEAR/12;const UnitPrefixScale={};const UnitScale={};function defineUnitPrefixScale(name,prefixes){if(UnitPrefixScale[name]!==undefined){throw new Error('Unit prefix scale \''+name+'\' already exists');}
-if(prefixes.AUTO!==undefined){throw new Error('The \'AUTO\' unit prefix is not supported for unit'+'prefix scales and cannot be added to scale \''+name+'\'');}
-UnitPrefixScale[name]=prefixes;}
-UnitScale.defineUnitScale=function(name,unitScale){if(UnitScale[name]!==undefined){throw new Error('Unit scale \''+name+'\' already exists');}
-if(unitScale.AUTO!==undefined){throw new Error('\'AUTO\' unit scale will be added automatically '+'for unit scale \''+name+'\'');}
-unitScale.AUTO=Object.values(unitScale);unitScale.AUTO.sort((a,b)=>a.value-b.value);if(name)UnitScale[name]=unitScale;return unitScale;};UnitScale.defineUnitScaleFromPrefixScale=function(baseSymbol,baseName,prefixScale,opt_scaleName){if(baseSymbol===undefined){throw new Error('Cannot create UnitScale with undefined baseSymbol.');}
-if(!baseName){throw new Error('Cannot create UnitScale without a baseName.');}
-if(!prefixScale){throw new Error('Cannot create UnitScale without a prefix scale.');}
-const unitScale={};for(const curPrefix of Object.keys(prefixScale)){const curScale=prefixScale[curPrefix];if(curScale.symbol===undefined||!curScale.value){throw new Error(`Cannot convert PrefixScale with malformed prefix ${curScale}.`);}
-const name=curPrefix==='NONE'?baseName:`${curPrefix}_${baseName}`;unitScale[name]={value:curScale.value,symbol:curScale.symbol+baseSymbol,baseSymbol};}
-return UnitScale.defineUnitScale(opt_scaleName,unitScale);};function convertUnit(value,fromScale,toScale){if(value===undefined)return undefined;const fromScaleBase=fromScale.baseSymbol;const toScaleBase=toScale.baseSymbol;if(fromScaleBase!==undefined&&toScaleBase!==undefined&&fromScaleBase!==toScaleBase){throw new Error('Cannot convert between units with different base symbols.');}
-return value*(fromScale.value/toScale.value);}
-defineUnitPrefixScale('BINARY',{NONE:{value:Math.pow(1024,0),symbol:''},KIBI:{value:Math.pow(1024,1),symbol:'Ki'},MEBI:{value:Math.pow(1024,2),symbol:'Mi'},GIBI:{value:Math.pow(1024,3),symbol:'Gi'},TEBI:{value:Math.pow(1024,4),symbol:'Ti'}});defineUnitPrefixScale('METRIC',{NANO:{value:1e-9,symbol:'n'},MICRO:{value:1e-6,symbol:GREEK_SMALL_LETTER_MU},MILLI:{value:1e-3,symbol:'m'},NONE:{value:1,symbol:''},KILO:{value:1e3,symbol:'k'},MEGA:{value:1e6,symbol:'M'},GIGA:{value:1e9,symbol:'G'}});UnitScale.defineUnitScale('TIME',{NANO_SEC:{value:1e-9,symbol:'ns',baseSymbol:'s'},MICRO_SEC:{value:1e-6,symbol:GREEK_SMALL_LETTER_MU+'s',baseSymbol:'s'},MILLI_SEC:{value:1e-3,symbol:'ms',baseSymbol:'s'},SEC:{value:1,symbol:'s',baseSymbol:'s'},MINUTE:{value:SECONDS_IN_A_MINUTE,symbol:'min',baseSymbol:'s'},HOUR:{value:SECONDS_IN_AN_HOUR,symbol:'hr',baseSymbol:'s'},DAY:{value:SECONDS_IN_A_DAY,symbol:'days',baseSymbol:'s'},WEEK:{value:SECONDS_IN_A_WEEK,symbol:'weeks',baseSymbol:'s'},MONTH:{value:SECONDS_IN_A_MONTH,symbol:'months',baseSymbol:'s'},YEAR:{value:SECONDS_IN_A_YEAR,symbol:'years',baseSymbol:'s'}});UnitScale.defineUnitScaleFromPrefixScale('B','BYTE',UnitPrefixScale.BINARY,'MEMORY');return{UnitPrefixScale,UnitScale,convertUnit,};});'use strict';tr.exportTo('tr.b',function(){const msDisplayMode={scale:1e-3,suffix:'ms',roundedLess(a,b){return Math.round(a*1000)<Math.round(b*1000);},formatSpec:{unitScale:[tr.b.UnitScale.TIME.MILLI_SEC],minimumFractionDigits:3,}};const nsDisplayMode={scale:1e-9,suffix:'ns',roundedLess(a,b){return Math.round(a*1000000)<Math.round(b*1000000);},formatSpec:{unitScale:[tr.b.UnitScale.TIME.NANO_SEC],maximumFractionDigits:0}};const TimeDisplayModes={ns:nsDisplayMode,ms:msDisplayMode};return{TimeDisplayModes,};});'use strict';tr.exportTo('tr.ui.b',function(){function iterateElementDeeplyImpl(element,cb,thisArg,includeElement){if(includeElement&&cb.call(thisArg,element))return true;if(element.root&&element.root!==element&&iterateElementDeeplyImpl(element.root,cb,thisArg,false)){return true;}
-const children=Polymer.dom(element).children;for(let i=0;i<children.length;i++){if(iterateElementDeeplyImpl(children[i],cb,thisArg,true)){return true;}}
-return false;}
-function iterateElementDeeply(element,cb,thisArg){iterateElementDeeplyImpl(element,cb,thisArg,false);}
-function findDeepElementMatchingPredicate(element,predicate){let foundElement=undefined;function matches(element){const match=predicate(element);if(!match){return false;}
-foundElement=element;return true;}
-iterateElementDeeply(element,matches);return foundElement;}
-function findDeepElementsMatchingPredicate(element,predicate){const foundElements=[];function matches(element){const match=predicate(element);if(match){foundElements.push(element);}
-return false;}
-iterateElementDeeply(element,matches);return foundElements;}
-function findDeepElementMatching(element,selector){return findDeepElementMatchingPredicate(element,function(element){return element.matches(selector);});}
-function findDeepElementsMatching(element,selector){return findDeepElementsMatchingPredicate(element,function(element){return element.matches(selector);});}
-function findDeepElementWithTextContent(element,re){return findDeepElementMatchingPredicate(element,function(element){if(element.children.length!==0)return false;return re.test(Polymer.dom(element).textContent);});}
-return{findDeepElementMatching,findDeepElementsMatching,findDeepElementMatchingPredicate,findDeepElementsMatchingPredicate,findDeepElementWithTextContent,};});'use strict';tr.exportTo('tr.b',function(){const TimeDisplayModes=tr.b.TimeDisplayModes;const PLUS_MINUS_SIGN=String.fromCharCode(177);const CACHED_FORMATTERS={};function getNumberFormatter(minSpec,maxSpec,minCtx,maxCtx){const key=minSpec+'-'+maxSpec+'-'+minCtx+'-'+maxCtx;let formatter=CACHED_FORMATTERS[key];if(formatter===undefined){let minimumFractionDigits=minCtx!==undefined?minCtx:minSpec;let maximumFractionDigits=maxCtx!==undefined?maxCtx:maxSpec;if(minimumFractionDigits>maximumFractionDigits){if(minCtx!==undefined&&maxCtx===undefined){maximumFractionDigits=minimumFractionDigits;}else if(minCtx===undefined&&maxCtx!==undefined){minimumFractionDigits=maximumFractionDigits;}}
-formatter=new Intl.NumberFormat(undefined,{minimumFractionDigits,maximumFractionDigits,});CACHED_FORMATTERS[key]=formatter;}
-return formatter;}
-function max(a,b){if(a===undefined)return b;if(b===undefined)return a;return a.scale>b.scale?a:b;}
-const ImprovementDirection={DONT_CARE:0,BIGGER_IS_BETTER:1,SMALLER_IS_BETTER:2};function Unit(unitName,jsonName,scaleBaseUnit,isDelta,improvementDirection,formatSpec){this.unitName=unitName;this.jsonName=jsonName;this.scaleBaseUnit=scaleBaseUnit;this.isDelta=isDelta;this.improvementDirection=improvementDirection;this.formatSpec_=formatSpec;this.baseUnit=undefined;this.correspondingDeltaUnit=undefined;}
-Unit.prototype={asJSON(){return this.jsonName;},getUnitScale_(opt_context){let formatSpec=this.formatSpec_;let formatSpecWasFunction=false;if(typeof formatSpec==='function'){formatSpecWasFunction=true;formatSpec=formatSpec();}
-const context=opt_context||{};let scale=undefined;if(context.unitScale){scale=context.unitScale;}else if(context.unitPrefix){const symbol=formatSpec.baseSymbol?formatSpec.baseSymbol:this.scaleBaseUnit.baseSymbol;scale=tr.b.UnitScale.defineUnitScaleFromPrefixScale(symbol,symbol,[context.unitPrefix]).AUTO;}else{scale=formatSpec.unitScale;if(!scale){scale=[{value:1,symbol:formatSpec.baseSymbol||'',baseSymbol:formatSpec.baseSymbol||''}];if(!formatSpecWasFunction)formatSpec.unitScale=scale;}}
-if(!(scale instanceof Array)){throw new Error('Unit has a malformed unit scale.');}
-return scale;},get unitString(){const scale=this.getUnitScale_();if(!scale){throw new Error('A UnitScale could not be found for Unit '+this.unitName);}
-return scale[0].symbol;},format(value,opt_context){let signString='';if(value<0){signString='-';value=-value;}else if(this.isDelta){signString=value===0?PLUS_MINUS_SIGN:'+';}
-const context=opt_context||{};const scale=this.getUnitScale_(context);let deltaValue=context.deltaValue===undefined?value:context.deltaValue;deltaValue=Math.abs(deltaValue)*this.scaleBaseUnit.value;let i=0;while(i<scale.length-1&&deltaValue/scale[i+1].value>=1){i++;}
-const selectedSubUnit=scale[i];let formatSpec=this.formatSpec_;if(typeof formatSpec==='function')formatSpec=formatSpec();let unitString='';if(selectedSubUnit.symbol){if(!formatSpec.avoidSpacePrecedingUnit)unitString=' ';unitString+=selectedSubUnit.symbol;}
-value=tr.b.convertUnit(value,this.scaleBaseUnit,selectedSubUnit);const numberString=getNumberFormatter(formatSpec.minimumFractionDigits,formatSpec.maximumFractionDigits,context.minimumFractionDigits,context.maximumFractionDigits).format(value);return signString+numberString+unitString;}};Unit.reset=function(){Unit.currentTimeDisplayMode=TimeDisplayModes.ms;};Unit.timestampFromUs=function(us){return tr.b.convertUnit(us,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);};Object.defineProperty(Unit,'currentTimeDisplayMode',{get(){return Unit.currentTimeDisplayMode_;},set(value){if(Unit.currentTimeDisplayMode_===value)return;Unit.currentTimeDisplayMode_=value;Unit.dispatchEvent(new tr.b.Event('display-mode-changed'));}});Unit.didPreferredTimeDisplayUnitChange=function(){let largest=undefined;const els=tr.ui.b.findDeepElementsMatching(document.body,'tr-v-ui-preferred-display-unit');els.forEach(function(el){largest=max(largest,el.preferredTimeDisplayMode);});Unit.currentTimeDisplayMode=largest===undefined?TimeDisplayModes.ms:largest;};Unit.byName={};Unit.byJSONName={};Unit.fromJSON=function(object){const u=Unit.byJSONName[object];if(u){return u;}
-throw new Error(`Unrecognized unit "${object}"`);};Unit.define=function(params){const definedUnits=[];for(const improvementDirection of Object.values(ImprovementDirection)){const regularUnit=Unit.defineUnitVariant_(params,false,improvementDirection);const deltaUnit=Unit.defineUnitVariant_(params,true,improvementDirection);regularUnit.correspondingDeltaUnit=deltaUnit;deltaUnit.correspondingDeltaUnit=deltaUnit;definedUnits.push(regularUnit,deltaUnit);}
-const baseUnit=Unit.byName[params.baseUnitName];definedUnits.forEach(u=>u.baseUnit=baseUnit);};Unit.nameSuffixForImprovementDirection=function(improvementDirection){switch(improvementDirection){case ImprovementDirection.DONT_CARE:return'';case ImprovementDirection.BIGGER_IS_BETTER:return'_biggerIsBetter';case ImprovementDirection.SMALLER_IS_BETTER:return'_smallerIsBetter';default:throw new Error('Unknown improvement direction: '+improvementDirection);}};Unit.defineUnitVariant_=function(params,isDelta,improvementDirection){let nameSuffix=isDelta?'Delta':'';nameSuffix+=Unit.nameSuffixForImprovementDirection(improvementDirection);const unitName=params.baseUnitName+nameSuffix;const jsonName=params.baseJsonName+nameSuffix;if(Unit.byName[unitName]!==undefined){throw new Error('Unit \''+unitName+'\' already exists');}
-if(Unit.byJSONName[jsonName]!==undefined){throw new Error('JSON unit \''+jsonName+'\' alread exists');}
-let scaleBaseUnit=params.scaleBaseUnit;if(!scaleBaseUnit){let formatSpec=params.formatSpec;if(typeof formatSpec==='function')formatSpec=formatSpec();const baseSymbol=formatSpec.unitScale?formatSpec.unitScale[0].baseSymbol:(formatSpec.baseSymbol||'');scaleBaseUnit={value:1,symbol:baseSymbol,baseSymbol};}
-const unit=new Unit(unitName,jsonName,scaleBaseUnit,isDelta,improvementDirection,params.formatSpec);Unit.byName[unitName]=unit;Unit.byJSONName[jsonName]=unit;return unit;};tr.b.EventTarget.decorate(Unit);Unit.reset();Unit.define({baseUnitName:'timeInMsAutoFormat',baseJsonName:'msBestFitFormat',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec:{unitScale:tr.b.UnitScale.TIME.AUTO,minimumFractionDigits:0,maximumFractionDigits:3}});Unit.define({baseUnitName:'timeDurationInMs',baseJsonName:'ms',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec(){return Unit.currentTimeDisplayMode_.formatSpec;}});Unit.define({baseUnitName:'timeStampInMs',baseJsonName:'tsMs',scaleBaseUnit:tr.b.UnitScale.TIME.MILLI_SEC,formatSpec(){return Unit.currentTimeDisplayMode_.formatSpec;}});Unit.define({baseUnitName:'normalizedPercentage',baseJsonName:'n%',formatSpec:{unitScale:[{value:0.01,symbol:'%'}],avoidSpacePrecedingUnit:true,minimumFractionDigits:3,maximumFractionDigits:3}});Unit.define({baseUnitName:'sizeInBytes',baseJsonName:'sizeInBytes',formatSpec:{unitScale:tr.b.UnitScale.MEMORY.AUTO,minimumFractionDigits:1,maximumFractionDigits:1}});Unit.define({baseUnitName:'energyInJoules',baseJsonName:'J',formatSpec:{baseSymbol:'J',minimumFractionDigits:3}});Unit.define({baseUnitName:'powerInWatts',baseJsonName:'W',formatSpec:{baseSymbol:'W',minimumFractionDigits:3}});Unit.define({baseUnitName:'unitlessNumber',baseJsonName:'unitless',formatSpec:{minimumFractionDigits:3,maximumFractionDigits:3}});Unit.define({baseUnitName:'count',baseJsonName:'count',formatSpec:{minimumFractionDigits:0,maximumFractionDigits:0}});Unit.define({baseUnitName:'sigma',baseJsonName:'sigma',formatSpec:{baseSymbol:String.fromCharCode(963),minimumFractionDigits:1,maximumFractionDigits:1}});return{ImprovementDirection,Unit,};});'use strict';tr.exportTo('tr.b',function(){class Scalar{constructor(unit,value){if(!(unit instanceof tr.b.Unit)){throw new Error('Expected Unit');}
-if(!(typeof(value)==='number')){throw new Error('Expected value to be number');}
-this.unit=unit;this.value=value;}
-asDict(){return{unit:this.unit.asJSON(),value:tr.b.numberToJson(this.value),};}
-toString(){return this.unit.format(this.value);}
-static fromDict(d){return new Scalar(tr.b.Unit.fromJSON(d.unit),tr.b.numberFromJson(d.value));}}
-return{Scalar,};});'use strict';tr.exportTo('tr.c',function(){function Auditor(model){this.model_=model;}
-Auditor.prototype={__proto__:Object.prototype,get model(){return this.model_;},runAnnotate(){},installUserFriendlyCategoryDriverIfNeeded(){},runAudit(){}};const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.defaultMetadata={};options.mandatoryBaseClass=Auditor;tr.b.decorateExtensionRegistry(Auditor,options);return{Auditor,};});'use strict';tr.exportTo('tr.b',function(){function clamp01(value){return Math.max(0,Math.min(1,value));}
-function Color(opt_r,opt_g,opt_b,opt_a){this.r=Math.floor(opt_r)||0;this.g=Math.floor(opt_g)||0;this.b=Math.floor(opt_b)||0;this.a=opt_a;}
-Color.fromString=function(str){let tmp;let values;if(str.substr(0,4)==='rgb('){tmp=str.substr(4,str.length-5);values=tmp.split(',').map(function(v){return v.replace(/^\s+/,'','g');});if(values.length!==3){throw new Error('Malformatted rgb-expression');}
-return new Color(parseInt(values[0]),parseInt(values[1]),parseInt(values[2]));}
-if(str.substr(0,5)==='rgba('){tmp=str.substr(5,str.length-6);values=tmp.split(',').map(function(v){return v.replace(/^\s+/,'','g');});if(values.length!==4){throw new Error('Malformatted rgb-expression');}
-return new Color(parseInt(values[0]),parseInt(values[1]),parseInt(values[2]),parseFloat(values[3]));}
-if(str[0]==='#'&&str.length===7){return new Color(parseInt(str.substr(1,2),16),parseInt(str.substr(3,2),16),parseInt(str.substr(5,2),16));}
-throw new Error('Unrecognized string format.');};Color.lerp=function(a,b,percent){if(a.a!==undefined&&b.a!==undefined){return Color.lerpRGBA(a,b,percent);}
-return Color.lerpRGB(a,b,percent);};Color.lerpRGB=function(a,b,percent){return new Color(((b.r-a.r)*percent)+a.r,((b.g-a.g)*percent)+a.g,((b.b-a.b)*percent)+a.b);};Color.lerpRGBA=function(a,b,percent){return new Color(((b.r-a.r)*percent)+a.r,((b.g-a.g)*percent)+a.g,((b.b-a.b)*percent)+a.b,((b.a-a.a)*percent)+a.a);};Color.fromDict=function(dict){return new Color(dict.r,dict.g,dict.b,dict.a);};Color.fromHSLExplicit=function(h,s,l,a){let r;let g;let b;function hue2rgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p;}
-if(s===0){r=g=b=l;}else{const q=l<0.5?l*(1+s):l+s-l*s;const p=2*l-q;r=hue2rgb(p,q,h+1/3);g=hue2rgb(p,q,h);b=hue2rgb(p,q,h-1/3);}
-return new Color(Math.floor(r*255),Math.floor(g*255),Math.floor(b*255),a);};Color.fromHSL=function(hsl){return Color.fromHSLExplicit(hsl.h,hsl.s,hsl.l,hsl.a);};Color.prototype={clone(){const c=new Color();c.r=this.r;c.g=this.g;c.b=this.b;c.a=this.a;return c;},blendOver(bgColor){const oneMinusThisAlpha=1-this.a;const outA=this.a+bgColor.a*oneMinusThisAlpha;const bgBlend=(bgColor.a*oneMinusThisAlpha)/bgColor.a;return new Color(this.r*this.a+bgColor.r*bgBlend,this.g*this.a+bgColor.g*bgBlend,this.b*this.a+bgColor.b*bgBlend,outA);},brighten(opt_k){const k=opt_k||0.45;return new Color(Math.min(255,this.r+Math.floor(this.r*k)),Math.min(255,this.g+Math.floor(this.g*k)),Math.min(255,this.b+Math.floor(this.b*k)),this.a);},lighten(k,opt_maxL){const maxL=opt_maxL!==undefined?opt_maxL:1.0;const hsl=this.toHSL();hsl.l=Math.min(hsl.l+k,maxL);return Color.fromHSL(hsl);},darken(opt_k){let k;if(opt_k!==undefined){k=opt_k;}else{k=0.45;}
-return new Color(Math.min(255,this.r-Math.floor(this.r*k)),Math.min(255,this.g-Math.floor(this.g*k)),Math.min(255,this.b-Math.floor(this.b*k)),this.a);},desaturate(opt_desaturateFactor){let desaturateFactor;if(opt_desaturateFactor!==undefined){desaturateFactor=opt_desaturateFactor;}else{desaturateFactor=1;}
-const hsl=this.toHSL();hsl.s=clamp01(hsl.s*(1-desaturateFactor));return Color.fromHSL(hsl);},withAlpha(a){return new Color(this.r,this.g,this.b,a);},toString(){if(this.a!==undefined){return'rgba('+
-this.r+','+this.g+','+
-this.b+','+this.a+')';}
-return'rgb('+this.r+','+this.g+','+this.b+')';},toHSL(){const r=this.r/255;const g=this.g/255;const b=this.b/255;const max=Math.max(r,g,b);const min=Math.min(r,g,b);let h;let s;const l=(max+min)/2;if(min===max){h=0;s=0;}else{const delta=max-min;if(l>0.5){s=delta/(2-max-min);}else{s=delta/(max+min);}
-if(r===max){h=(g-b)/delta;if(g<b)h+=6;}else if(g===max){h=2+((b-r)/delta);}else{h=4+((r-g)/delta);}
-h/=6;}
-return{h,s,l,a:this.a};},toStringWithAlphaOverride(alpha){return'rgba('+
-this.r+','+this.g+','+
-this.b+','+alpha+')';}};return{Color,};});'use strict';tr.exportTo('tr.b',function(){const generalPurposeColors=[new tr.b.Color(122,98,135),new tr.b.Color(150,83,105),new tr.b.Color(44,56,189),new tr.b.Color(99,86,147),new tr.b.Color(104,129,107),new tr.b.Color(130,178,55),new tr.b.Color(87,109,147),new tr.b.Color(111,145,88),new tr.b.Color(81,152,131),new tr.b.Color(142,91,111),new tr.b.Color(81,163,70),new tr.b.Color(148,94,86),new tr.b.Color(144,89,118),new tr.b.Color(83,150,97),new tr.b.Color(105,94,139),new tr.b.Color(89,144,122),new tr.b.Color(105,119,128),new tr.b.Color(96,128,137),new tr.b.Color(145,88,145),new tr.b.Color(88,145,144),new tr.b.Color(90,100,143),new tr.b.Color(121,97,136),new tr.b.Color(111,160,73),new tr.b.Color(112,91,142),new tr.b.Color(86,147,86),new tr.b.Color(63,100,170),new tr.b.Color(81,152,107),new tr.b.Color(60,164,173),new tr.b.Color(143,72,161),new tr.b.Color(159,74,86)];const reservedColorsByName={thread_state_uninterruptible:new tr.b.Color(182,125,143),thread_state_iowait:new tr.b.Color(255,140,0),thread_state_running:new tr.b.Color(126,200,148),thread_state_runnable:new tr.b.Color(133,160,210),thread_state_sleeping:new tr.b.Color(240,240,240),thread_state_unknown:new tr.b.Color(199,155,125),background_memory_dump:new tr.b.Color(0,180,180),light_memory_dump:new tr.b.Color(0,0,180),detailed_memory_dump:new tr.b.Color(180,0,180),vsync_highlight_color:new tr.b.Color(0,0,255),generic_work:new tr.b.Color(125,125,125),good:new tr.b.Color(0,125,0),bad:new tr.b.Color(180,125,0),terrible:new tr.b.Color(180,0,0),black:new tr.b.Color(0,0,0),grey:new tr.b.Color(221,221,221),white:new tr.b.Color(255,255,255),yellow:new tr.b.Color(255,255,0),olive:new tr.b.Color(100,100,0),rail_response:new tr.b.Color(67,135,253),rail_animation:new tr.b.Color(244,74,63),rail_idle:new tr.b.Color(238,142,0),rail_load:new tr.b.Color(13,168,97),startup:new tr.b.Color(230,230,0),heap_dump_stack_frame:new tr.b.Color(128,128,128),heap_dump_object_type:new tr.b.Color(0,0,255),heap_dump_child_node_arrow:new tr.b.Color(204,102,0),cq_build_running:new tr.b.Color(255,255,119),cq_build_passed:new tr.b.Color(153,238,102),cq_build_failed:new tr.b.Color(238,136,136),cq_build_abandoned:new tr.b.Color(187,187,187),cq_build_attempt_runnig:new tr.b.Color(222,222,75),cq_build_attempt_passed:new tr.b.Color(103,218,35),cq_build_attempt_failed:new tr.b.Color(197,81,81)};const numGeneralPurposeColorIds=generalPurposeColors.length;const numReservedColorIds=Object.keys(reservedColorsByName).length;const numColorsPerVariant=numGeneralPurposeColorIds+numReservedColorIds;function ColorScheme(){}
-const paletteBase=[];paletteBase.push.apply(paletteBase,generalPurposeColors);paletteBase.push.apply(paletteBase,Object.values(reservedColorsByName));ColorScheme.colors=[];ColorScheme.properties={};ColorScheme.properties={numColorsPerVariant,};function pushVariant(func){const variantColors=paletteBase.map(func);ColorScheme.colors.push.apply(ColorScheme.colors,variantColors);}
-pushVariant(function(c){return c;});ColorScheme.properties.brightenedOffsets=[];ColorScheme.properties.brightenedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.lighten(0.3,0.8);});ColorScheme.properties.brightenedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.lighten(0.48,0.85);});ColorScheme.properties.brightenedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.lighten(0.65,0.9);});ColorScheme.properties.dimmedOffsets=[];ColorScheme.properties.dimmedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.desaturate();});ColorScheme.properties.dimmedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.desaturate(0.5);});ColorScheme.properties.dimmedOffsets.push(ColorScheme.colors.length);pushVariant(function(c){return c.desaturate(0.3);});ColorScheme.colorsAsStrings=ColorScheme.colors.map(function(c){return c.toString();});const reservedColorNameToIdMap=(function(){const m=new Map();let i=generalPurposeColors.length;for(const key of Object.keys(reservedColorsByName)){m.set(key,i++);}
-return m;})();ColorScheme.getColorIdForReservedName=function(name){const id=reservedColorNameToIdMap.get(name);if(id===undefined){throw new Error('Unrecognized color '+name);}
-return id;};ColorScheme.getColorForReservedNameAsString=function(reservedName){const id=ColorScheme.getColorIdForReservedName(reservedName);return ColorScheme.colorsAsStrings[id];};ColorScheme.getStringHash=function(name){let hash=0;for(let i=0;i<name.length;++i){hash=(hash+37*hash+11*name.charCodeAt(i))%0xFFFFFFFF;}
-return hash;};const stringColorIdCache=new Map();ColorScheme.getColorIdForGeneralPurposeString=function(string){if(stringColorIdCache.get(string)===undefined){const hash=ColorScheme.getStringHash(string);stringColorIdCache.set(string,hash%numGeneralPurposeColorIds);}
-return stringColorIdCache.get(string);};ColorScheme.getAnotherColorId=function(colorId,n){return(colorId+n)%numColorsPerVariant;};ColorScheme.getVariantColorId=function(colorId,offset){return colorId+offset;};return{ColorScheme,};});'use strict';tr.exportTo('tr.model',function(){const ColorScheme=tr.b.ColorScheme;function EventInfo(title,description,docLinks){this.title=title;this.description=description;this.docLinks=docLinks;this.colorId=ColorScheme.getColorIdForGeneralPurposeString(title);}
-return{EventInfo,};});'use strict';tr.exportTo('tr.b',function(){let nextGUID=1;const UUID4_PATTERN='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';const GUID={allocateSimple(){return nextGUID++;},getLastSimpleGuid(){return nextGUID-1;},allocateUUID4(){return UUID4_PATTERN.replace(/[xy]/g,function(c){let r=parseInt(Math.random()*16);if(c==='y')r=(r&3)+8;return r.toString(16);});}};return{GUID,};});'use strict';tr.exportTo('tr.model',function(){function EventRegistry(){}
-const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);tr.b.decorateExtensionRegistry(EventRegistry,options);EventRegistry.addEventListener('will-register',function(e){const metadata=e.typeInfo.metadata;if(metadata.name===undefined){throw new Error('Registered events must provide name metadata');}
-if(metadata.pluralName===undefined){throw new Error('Registered events must provide pluralName metadata');}
-if(metadata.subTypes===undefined){metadata.subTypes={};const options=new tr.b.ExtensionRegistryOptions(tr.b.TYPE_BASED_REGISTRY_MODE);options.mandatoryBaseClass=e.typeInfo.constructor;options.defaultConstructor=e.typeInfo.constructor;tr.b.decorateExtensionRegistry(metadata.subTypes,options);}else{if(!metadata.subTypes.register){throw new Error('metadata.subTypes must be an extension registry.');}}
-e.typeInfo.constructor.subTypes=metadata.subTypes;});let eventsByTypeName=undefined;EventRegistry.getEventTypeInfoByTypeName=function(typeName){if(eventsByTypeName===undefined){eventsByTypeName={};EventRegistry.getAllRegisteredTypeInfos().forEach(function(typeInfo){eventsByTypeName[typeInfo.metadata.name]=typeInfo;});}
-return eventsByTypeName[typeName];};EventRegistry.addEventListener('registry-changed',function(){eventsByTypeName=undefined;});function convertCamelCaseToTitleCase(name){let result=name.replace(/[A-Z]/g,' $&');result=result.charAt(0).toUpperCase()+result.slice(1);return result;}
-EventRegistry.getUserFriendlySingularName=function(typeName){const typeInfo=EventRegistry.getEventTypeInfoByTypeName(typeName);const str=typeInfo.metadata.name;return convertCamelCaseToTitleCase(str);};EventRegistry.getUserFriendlyPluralName=function(typeName){const typeInfo=EventRegistry.getEventTypeInfoByTypeName(typeName);const str=typeInfo.metadata.pluralName;return convertCamelCaseToTitleCase(str);};return{EventRegistry,};});'use strict';tr.exportTo('tr.model',function(){const EventRegistry=tr.model.EventRegistry;const RequestSelectionChangeEvent=tr.b.Event.bind(undefined,'requestSelectionChange',true,false);function EventSet(opt_events){this.bounds_=new tr.b.math.Range();this.events_=new Set();this.guid_=tr.b.GUID.allocateSimple();if(opt_events){if(opt_events instanceof Array){for(const event of opt_events){this.push(event);}}else if(opt_events instanceof EventSet){this.addEventSet(opt_events);}else{this.push(opt_events);}}}
-EventSet.prototype={__proto__:Object.prototype,get bounds(){return this.bounds_;},get duration(){if(this.bounds_.isEmpty)return 0;return this.bounds_.max-this.bounds_.min;},get length(){return this.events_.size;},get guid(){return this.guid_;},*[Symbol.iterator](){for(const event of this.events_){yield event;}},clear(){this.bounds_=new tr.b.math.Range();this.events_.clear();},push(...events){let numPushed;for(const event of events){if(event.guid===undefined){throw new Error('Event must have a GUID');}
-if(!this.events_.has(event)){this.events_.add(event);if(event.addBoundsToRange){if(this.bounds_!==undefined){event.addBoundsToRange(this.bounds_);}}}
-numPushed++;}
-return numPushed;},contains(event){if(this.events_.has(event))return event;return undefined;},addEventSet(eventSet){for(const event of eventSet){this.push(event);}},intersectionIsEmpty(otherEventSet){return!this.some(event=>otherEventSet.contains(event));},equals(that){if(this.length!==that.length)return false;return this.every(event=>that.contains(event));},sortEvents(compare){const ary=this.toArray();ary.sort(compare);this.clear();for(const event of ary){this.push(event);}},getEventsOrganizedByBaseType(opt_pruneEmpty){const allTypeInfos=EventRegistry.getAllRegisteredTypeInfos();const events=this.getEventsOrganizedByCallback(function(event){let maxEventIndex=-1;let maxEventTypeInfo=undefined;allTypeInfos.forEach(function(eventTypeInfo,eventIndex){if(!(event instanceof eventTypeInfo.constructor))return;if(eventIndex>maxEventIndex){maxEventIndex=eventIndex;maxEventTypeInfo=eventTypeInfo;}});if(maxEventIndex===-1){throw new Error(`Unrecognized event type: ${event.constructor.name}`);}
-return maxEventTypeInfo.metadata.name;});if(!opt_pruneEmpty){allTypeInfos.forEach(function(eventTypeInfo){if(events[eventTypeInfo.metadata.name]===undefined){events[eventTypeInfo.metadata.name]=new EventSet();}});}
-return events;},getEventsOrganizedByTitle(){return this.getEventsOrganizedByCallback(function(event){if(event.title===undefined){throw new Error('An event didn\'t have a title!');}
-return event.title;});},getEventsOrganizedByCallback(cb,opt_this){const groupedEvents=tr.b.groupIntoMap(this,cb,opt_this||this);const groupedEventsDict={};for(const[k,events]of groupedEvents){groupedEventsDict[k]=new EventSet(events);}
-return groupedEventsDict;},enumEventsOfType(type,func){for(const event of this){if(event instanceof type){func(event);}}},get userFriendlyName(){if(this.length===0){throw new Error('Empty event set');}
-const eventsByBaseType=this.getEventsOrganizedByBaseType(true);const eventTypeName=Object.keys(eventsByBaseType)[0];if(this.length===1){const tmp=EventRegistry.getUserFriendlySingularName(eventTypeName);return tr.b.getOnlyElement(this.events_).userFriendlyName;}
-const numEventTypes=Object.keys(eventsByBaseType).length;if(numEventTypes!==1){return this.length+' events of various types';}
-const tmp=EventRegistry.getUserFriendlyPluralName(eventTypeName);return this.length+' '+tmp;},filter(fn,opt_this){const res=new EventSet();for(const event of this){if(fn.call(opt_this,event)){res.push(event);}}
-return res;},toArray(){const ary=[];for(const event of this){ary.push(event);}
-return ary;},forEach(fn,opt_this){for(const event of this){fn.call(opt_this,event);}},map(fn,opt_this){const res=[];for(const event of this){res.push(fn.call(opt_this,event));}
-return res;},every(fn,opt_this){for(const event of this){if(!fn.call(opt_this,event)){return false;}}
-return true;},some(fn,opt_this){for(const event of this){if(fn.call(opt_this,event)){return true;}}
-return false;},asDict(){const stableIds=[];for(const event of this){stableIds.push(event.stableId);}
-return{'events':stableIds};},asSet(){return this.events_;}};EventSet.IMMUTABLE_EMPTY_SET=(function(){const s=new EventSet();s.push=function(){throw new Error('Cannot push to an immutable event set');};s.addEventSet=function(){throw new Error('Cannot add to an immutable event set');};Object.freeze(s);return s;})();return{EventSet,RequestSelectionChangeEvent,};});'use strict';tr.exportTo('tr.model',function(){const ColorScheme=tr.b.ColorScheme;const SelectionState={NONE:0,SELECTED:ColorScheme.properties.brightenedOffsets[0],HIGHLIGHTED:ColorScheme.properties.brightenedOffsets[1],DIMMED:ColorScheme.properties.dimmedOffsets[0],BRIGHTENED0:ColorScheme.properties.brightenedOffsets[0],BRIGHTENED1:ColorScheme.properties.brightenedOffsets[1],BRIGHTENED2:ColorScheme.properties.brightenedOffsets[2],DIMMED0:ColorScheme.properties.dimmedOffsets[0],DIMMED1:ColorScheme.properties.dimmedOffsets[1],DIMMED2:ColorScheme.properties.dimmedOffsets[2]};const brighteningLevels=[SelectionState.NONE,SelectionState.BRIGHTENED0,SelectionState.BRIGHTENED1,SelectionState.BRIGHTENED2];SelectionState.getFromBrighteningLevel=function(level){return brighteningLevels[level];};const dimmingLevels=[SelectionState.DIMMED0,SelectionState.DIMMED1,SelectionState.DIMMED2];SelectionState.getFromDimmingLevel=function(level){return dimmingLevels[level];};return{SelectionState,};});'use strict';tr.exportTo('tr.model',function(){const SelectionState=tr.model.SelectionState;function SelectableItem(modelItem){this.modelItem_=modelItem;}
-SelectableItem.prototype={get modelItem(){return this.modelItem_;},get selected(){return this.selectionState===SelectionState.SELECTED;},addToSelection(selection){const modelItem=this.modelItem_;if(!modelItem)return;selection.push(modelItem);},addToTrackMap(eventToTrackMap,track){const modelItem=this.modelItem_;if(!modelItem)return;eventToTrackMap.addEvent(modelItem,track);}};return{SelectableItem,};});'use strict';tr.exportTo('tr.model',function(){const SelectableItem=tr.model.SelectableItem;const SelectionState=tr.model.SelectionState;const IMMUTABLE_EMPTY_SET=tr.model.EventSet.IMMUTABLE_EMPTY_SET;function Event(){SelectableItem.call(this,this);this.guid_=tr.b.GUID.allocateSimple();this.selectionState=SelectionState.NONE;this.info=undefined;}
-Event.prototype={__proto__:SelectableItem.prototype,get guid(){return this.guid_;},get stableId(){return undefined;},get range(){const range=new tr.b.math.Range();this.addBoundsToRange(range);return range;},associatedAlerts:IMMUTABLE_EMPTY_SET,addAssociatedAlert(alert){if(this.associatedAlerts===IMMUTABLE_EMPTY_SET){this.associatedAlerts=new tr.model.EventSet();}
-this.associatedAlerts.push(alert);},addBoundsToRange(range){}};return{Event,};});'use strict';tr.exportTo('tr.model',function(){function TimedEvent(start){tr.model.Event.call(this);this.start=start;this.duration=0;this.cpuStart=undefined;this.cpuDuration=undefined;this.contexts=Object.freeze([]);}
-TimedEvent.prototype={__proto__:tr.model.Event.prototype,get end(){return this.start+this.duration;},addBoundsToRange(range){range.addValue(this.start);range.addValue(this.end);},bounds(that,opt_precisionUnit){if(opt_precisionUnit===undefined){opt_precisionUnit=tr.b.TimeDisplayModes.ms;}
-const startsBefore=opt_precisionUnit.roundedLess(that.start,this.start);const endsAfter=opt_precisionUnit.roundedLess(this.end,that.end);return!startsBefore&&!endsAfter;}};return{TimedEvent,};});'use strict';tr.exportTo('tr.model',function(){function Alert(info,start,opt_associatedEvents,opt_args){tr.model.TimedEvent.call(this,start);this.info=info;this.args=opt_args||{};this.associatedEvents=new tr.model.EventSet(opt_associatedEvents);this.associatedEvents.forEach(function(event){event.addAssociatedAlert(this);},this);}
-Alert.prototype={__proto__:tr.model.TimedEvent.prototype,get title(){return this.info.title;},get colorId(){return this.info.colorId;},get userFriendlyName(){return'Alert '+this.title+' at '+
-tr.b.Unit.byName.timeStampInMs.format(this.start);}};tr.model.EventRegistry.register(Alert,{name:'alert',pluralName:'alerts'});return{Alert,};});'use strict';tr.exportTo('tr.model',function(){const ColorScheme=tr.b.ColorScheme;const Statistics=tr.b.math.Statistics;const FRAME_PERF_CLASS={GOOD:'good',BAD:'bad',TERRIBLE:'terrible',NEUTRAL:'generic_work'};function Frame(associatedEvents,threadTimeRanges,opt_args){tr.model.Event.call(this);this.threadTimeRanges=threadTimeRanges;this.associatedEvents=new tr.model.EventSet(associatedEvents);this.args=opt_args||{};this.title='Frame';this.start=Statistics.min(threadTimeRanges,function(x){return x.start;});this.end=Statistics.max(threadTimeRanges,function(x){return x.end;});this.totalDuration=Statistics.sum(threadTimeRanges,function(x){return x.end-x.start;});this.perfClass=FRAME_PERF_CLASS.NEUTRAL;}
-Frame.prototype={__proto__:tr.model.Event.prototype,set perfClass(perfClass){this.colorId=ColorScheme.getColorIdForReservedName(perfClass);this.perfClass_=perfClass;},get perfClass(){return this.perfClass_;},shiftTimestampsForward(amount){this.start+=amount;this.end+=amount;for(let i=0;i<this.threadTimeRanges.length;i++){this.threadTimeRanges[i].start+=amount;this.threadTimeRanges[i].end+=amount;}},addBoundsToRange(range){range.addValue(this.start);range.addValue(this.end);}};tr.model.EventRegistry.register(Frame,{name:'frame',pluralName:'frames'});return{Frame,FRAME_PERF_CLASS,};});'use strict';tr.exportTo('tr.model.helpers',function(){const Frame=tr.model.Frame;const Statistics=tr.b.math.Statistics;const UI_DRAW_TYPE={NONE:'none',LEGACY:'legacy',MARSHMALLOW:'marshmallow'};const UI_THREAD_DRAW_NAMES={'performTraversals':UI_DRAW_TYPE.LEGACY,'Choreographer#doFrame':UI_DRAW_TYPE.MARSHMALLOW};const RENDER_THREAD_DRAW_NAME='DrawFrame';const RENDER_THREAD_INDEP_DRAW_NAME='doFrame';const RENDER_THREAD_QUEUE_NAME='queueBuffer';const RENDER_THREAD_SWAP_NAME='eglSwapBuffers';const THREAD_SYNC_NAME='syncFrameState';function getSlicesForThreadTimeRanges(threadTimeRanges){const ret=[];threadTimeRanges.forEach(function(threadTimeRange){const slices=[];threadTimeRange.thread.sliceGroup.iterSlicesInTimeRange(function(slice){slices.push(slice);},threadTimeRange.start,threadTimeRange.end);ret.push.apply(ret,slices);});return ret;}
-function makeFrame(threadTimeRanges,surfaceFlinger){const args={};if(surfaceFlinger&&surfaceFlinger.hasVsyncs){const start=Statistics.min(threadTimeRanges,function(threadTimeRanges){return threadTimeRanges.start;});args.deadline=surfaceFlinger.getFrameDeadline(start);args.frameKickoff=surfaceFlinger.getFrameKickoff(start);}
-const events=getSlicesForThreadTimeRanges(threadTimeRanges);return new Frame(events,threadTimeRanges,args);}
-function findOverlappingDrawFrame(renderThread,uiDrawSlice){if(!renderThread)return undefined;let overlappingDrawFrame;const slices=tr.b.iterateOverIntersectingIntervals(renderThread.sliceGroup.slices,function(range){return range.start;},function(range){return range.end;},uiDrawSlice.start,uiDrawSlice.end,function(rtDrawSlice){if(rtDrawSlice.title===RENDER_THREAD_DRAW_NAME){const rtSyncSlice=rtDrawSlice.findDescendentSlice(THREAD_SYNC_NAME);if(rtSyncSlice&&rtSyncSlice.start>=uiDrawSlice.start&&rtSyncSlice.end<=uiDrawSlice.end){overlappingDrawFrame=rtDrawSlice;}}});return overlappingDrawFrame;}
-function getPreTraversalWorkRanges(uiThread){if(!uiThread)return[];const preFrameEvents=[];uiThread.sliceGroup.slices.forEach(function(slice){if(slice.title==='obtainView'||slice.title==='setupListItem'||slice.title==='deliverInputEvent'||slice.title==='RV Scroll'){preFrameEvents.push(slice);}});uiThread.asyncSliceGroup.slices.forEach(function(slice){if(slice.title==='deliverInputEvent'){preFrameEvents.push(slice);}});return tr.b.math.mergeRanges(tr.b.math.convertEventsToRanges(preFrameEvents),3,function(events){return{start:events[0].min,end:events[events.length-1].max};});}
-function getFrameStartTime(traversalStart,preTraversalWorkRanges){const preTraversalWorkRange=tr.b.findClosestIntervalInSortedIntervals(preTraversalWorkRanges,function(range){return range.start;},function(range){return range.end;},traversalStart,3);if(preTraversalWorkRange){return preTraversalWorkRange.start;}
-return traversalStart;}
-function getRtFrameEndTime(rtDrawSlice){const rtQueueSlice=rtDrawSlice.findDescendentSlice(RENDER_THREAD_QUEUE_NAME);if(rtQueueSlice){return rtQueueSlice.end;}
-const rtSwapSlice=rtDrawSlice.findDescendentSlice(RENDER_THREAD_SWAP_NAME);if(rtSwapSlice){return rtSwapSlice.end;}
-return rtDrawSlice.end;}
-function getUiThreadDrivenFrames(app){if(!app.uiThread)return[];let preTraversalWorkRanges=[];if(app.uiDrawType===UI_DRAW_TYPE.LEGACY){preTraversalWorkRanges=getPreTraversalWorkRanges(app.uiThread);}
-const frames=[];app.uiThread.sliceGroup.slices.forEach(function(slice){if(!(slice.title in UI_THREAD_DRAW_NAMES)){return;}
-const threadTimeRanges=[];const uiThreadTimeRange={thread:app.uiThread,start:getFrameStartTime(slice.start,preTraversalWorkRanges),end:slice.end};threadTimeRanges.push(uiThreadTimeRange);const rtDrawSlice=findOverlappingDrawFrame(app.renderThread,slice);if(rtDrawSlice){const rtSyncSlice=rtDrawSlice.findDescendentSlice(THREAD_SYNC_NAME);if(rtSyncSlice){uiThreadTimeRange.end=Math.min(uiThreadTimeRange.end,rtSyncSlice.start);}
-threadTimeRanges.push({thread:app.renderThread,start:rtDrawSlice.start,end:getRtFrameEndTime(rtDrawSlice)});}
-frames.push(makeFrame(threadTimeRanges,app.surfaceFlinger));});return frames;}
-function getRenderThreadDrivenFrames(app){if(!app.renderThread)return[];const frames=[];app.renderThread.sliceGroup.getSlicesOfName(RENDER_THREAD_INDEP_DRAW_NAME).forEach(function(slice){const threadTimeRanges=[{thread:app.renderThread,start:slice.start,end:slice.end}];frames.push(makeFrame(threadTimeRanges,app.surfaceFlinger));});return frames;}
-function getUiDrawType(uiThread){if(!uiThread){return UI_DRAW_TYPE.NONE;}
-const slices=uiThread.sliceGroup.slices;for(let i=0;i<slices.length;i++){if(slices[i].title in UI_THREAD_DRAW_NAMES){return UI_THREAD_DRAW_NAMES[slices[i].title];}}
-return UI_DRAW_TYPE.NONE;}
-function getInputSamples(process){let samples=undefined;for(const counterName in process.counters){if(/^android\.aq\:pending/.test(counterName)&&process.counters[counterName].numSeries===1){samples=process.counters[counterName].series[0].samples;break;}}
-if(!samples)return[];const inputSamples=[];let lastValue=0;samples.forEach(function(sample){if(sample.value>lastValue){inputSamples.push(sample);}
-lastValue=sample.value;});return inputSamples;}
-function getAnimationAsyncSlices(uiThread){if(!uiThread)return[];const slices=[];for(const slice of uiThread.asyncSliceGroup.getDescendantEvents()){if(/^animator\:/.test(slice.title)){slices.push(slice);}}
-return slices;}
-function AndroidApp(process,uiThread,renderThread,surfaceFlinger,uiDrawType){this.process=process;this.uiThread=uiThread;this.renderThread=renderThread;this.surfaceFlinger=surfaceFlinger;this.uiDrawType=uiDrawType;this.frames_=undefined;this.inputs_=undefined;}
-AndroidApp.createForProcessIfPossible=function(process,surfaceFlinger){let uiThread=process.getThread(process.pid);const uiDrawType=getUiDrawType(uiThread);if(uiDrawType===UI_DRAW_TYPE.NONE){uiThread=undefined;}
-const renderThreads=process.findAllThreadsNamed('RenderThread');const renderThread=(renderThreads.length===1?renderThreads[0]:undefined);if(uiThread||renderThread){return new AndroidApp(process,uiThread,renderThread,surfaceFlinger,uiDrawType);}};AndroidApp.prototype={getFrames(){if(!this.frames_){const uiFrames=getUiThreadDrivenFrames(this);const rtFrames=getRenderThreadDrivenFrames(this);this.frames_=uiFrames.concat(rtFrames);this.frames_.sort(function(a,b){a.end-b.end;});}
-return this.frames_;},getInputSamples(){if(!this.inputs_){this.inputs_=getInputSamples(this.process);}
-return this.inputs_;},getAnimationAsyncSlices(){if(!this.animations_){this.animations_=getAnimationAsyncSlices(this.uiThread);}
-return this.animations_;}};return{AndroidApp,};});'use strict';tr.exportTo('tr.model.helpers',function(){const findLowIndexInSortedArray=tr.b.findLowIndexInSortedArray;const VSYNC_SF_NAME='android.VSYNC-sf';const VSYNC_APP_NAME='android.VSYNC-app';const VSYNC_FALLBACK_NAME='android.VSYNC';const TIMESTAMP_FUDGE_MS=0.01;function getVsyncTimestamps(process,counterName){let vsync=process.counters[counterName];if(!vsync){vsync=process.counters[VSYNC_FALLBACK_NAME];}
-if(vsync&&vsync.numSeries===1&&vsync.numSamples>1){return vsync.series[0].timestamps;}
-return undefined;}
-function AndroidSurfaceFlinger(process,thread){this.process=process;this.thread=thread;this.appVsync_=undefined;this.sfVsync_=undefined;this.appVsyncTimestamps_=getVsyncTimestamps(process,VSYNC_APP_NAME);this.sfVsyncTimestamps_=getVsyncTimestamps(process,VSYNC_SF_NAME);this.deadlineDelayMs_=this.appVsyncTimestamps_!==this.sfVsyncTimestamps_?5:TIMESTAMP_FUDGE_MS;}
-AndroidSurfaceFlinger.createForProcessIfPossible=function(process){const mainThread=process.getThread(process.pid);if(mainThread&&mainThread.name&&/surfaceflinger/.test(mainThread.name)){return new AndroidSurfaceFlinger(process,mainThread);}
-const primaryThreads=process.findAllThreadsNamed('SurfaceFlinger');if(primaryThreads.length===1){return new AndroidSurfaceFlinger(process,primaryThreads[0]);}
-return undefined;};AndroidSurfaceFlinger.prototype={get hasVsyncs(){return!!this.appVsyncTimestamps_&&!!this.sfVsyncTimestamps_;},getFrameKickoff(timestamp){if(!this.hasVsyncs){throw new Error('cannot query vsync info without vsyncs');}
-const firstGreaterIndex=findLowIndexInSortedArray(this.appVsyncTimestamps_,function(x){return x;},timestamp+TIMESTAMP_FUDGE_MS);if(firstGreaterIndex<1)return undefined;return this.appVsyncTimestamps_[firstGreaterIndex-1];},getFrameDeadline(timestamp){if(!this.hasVsyncs){throw new Error('cannot query vsync info without vsyncs');}
-const firstGreaterIndex=findLowIndexInSortedArray(this.sfVsyncTimestamps_,function(x){return x;},timestamp+this.deadlineDelayMs_);if(firstGreaterIndex>=this.sfVsyncTimestamps_.length){return undefined;}
-return this.sfVsyncTimestamps_[firstGreaterIndex];}};return{AndroidSurfaceFlinger,};});'use strict';tr.exportTo('tr.model.helpers',function(){const AndroidApp=tr.model.helpers.AndroidApp;const AndroidSurfaceFlinger=tr.model.helpers.AndroidSurfaceFlinger;const IMPORTANT_SURFACE_FLINGER_SLICES={'doComposition':true,'updateTexImage':true,'postFramebuffer':true};const IMPORTANT_UI_THREAD_SLICES={'Choreographer#doFrame':true,'performTraversals':true,'deliverInputEvent':true};const IMPORTANT_RENDER_THREAD_SLICES={'doFrame':true};function iterateImportantThreadSlices(thread,important,callback){if(!thread)return;thread.sliceGroup.slices.forEach(function(slice){if(slice.title in important){callback(slice);}});}
-function AndroidModelHelper(model){this.model=model;this.apps=[];this.surfaceFlinger=undefined;const processes=model.getAllProcesses();for(let i=0;i<processes.length&&!this.surfaceFlinger;i++){this.surfaceFlinger=AndroidSurfaceFlinger.createForProcessIfPossible(processes[i]);}
-model.getAllProcesses().forEach(function(process){const app=AndroidApp.createForProcessIfPossible(process,this.surfaceFlinger);if(app){this.apps.push(app);}},this);}
-AndroidModelHelper.guid=tr.b.GUID.allocateSimple();AndroidModelHelper.supportsModel=function(model){return true;};AndroidModelHelper.prototype={iterateImportantSlices(callback){if(this.surfaceFlinger){iterateImportantThreadSlices(this.surfaceFlinger.thread,IMPORTANT_SURFACE_FLINGER_SLICES,callback);}
-this.apps.forEach(function(app){iterateImportantThreadSlices(app.uiThread,IMPORTANT_UI_THREAD_SLICES,callback);iterateImportantThreadSlices(app.renderThread,IMPORTANT_RENDER_THREAD_SLICES,callback);});}};return{AndroidModelHelper,};});'use strict';tr.exportTo('tr.model',function(){function Slice(category,title,colorId,start,args,opt_duration,opt_cpuStart,opt_cpuDuration,opt_argsStripped,opt_bindId){if(new.target){throw new Error('Can\'t instantiate pure virtual class Slice');}
-tr.model.TimedEvent.call(this,start);this.category=category||'';this.title=title;this.colorId=colorId;this.args=args;this.startStackFrame=undefined;this.endStackFrame=undefined;this.didNotFinish=false;this.inFlowEvents=[];this.outFlowEvents=[];this.subSlices=[];this.selfTime=undefined;this.cpuSelfTime=undefined;this.important=false;this.parentContainer=undefined;this.argsStripped=false;this.bind_id_=opt_bindId;this.parentSlice=undefined;this.isTopLevel=false;if(opt_duration!==undefined){this.duration=opt_duration;}
-if(opt_cpuStart!==undefined){this.cpuStart=opt_cpuStart;}
-if(opt_cpuDuration!==undefined){this.cpuDuration=opt_cpuDuration;}
-if(opt_argsStripped!==undefined){this.argsStripped=true;}}
-Slice.prototype={__proto__:tr.model.TimedEvent.prototype,get analysisTypeName(){return this.title;},get userFriendlyName(){return'Slice '+this.title+' at '+
-tr.b.Unit.byName.timeStampInMs.format(this.start);},get stableId(){const parentSliceGroup=this.parentContainer.sliceGroup;return parentSliceGroup.stableId+'.'+
-parentSliceGroup.slices.indexOf(this);},get bindId(){return this.bind_id_;},findDescendentSlice(targetTitle){if(!this.subSlices){return undefined;}
-for(let i=0;i<this.subSlices.length;i++){if(this.subSlices[i].title===targetTitle){return this.subSlices[i];}
-const slice=this.subSlices[i].findDescendentSlice(targetTitle);if(slice)return slice;}
-return undefined;},get mostTopLevelSlice(){if(!this.parentSlice)return this;return this.parentSlice.mostTopLevelSlice;},getProcess(){const thread=this.parentContainer;if(thread&&thread.getProcess){return thread.getProcess();}
-return undefined;},get model(){const process=this.getProcess();if(process!==undefined){return this.getProcess().model;}
-return undefined;},*findTopmostSlicesRelativeToThisSlice(eventPredicate){if(eventPredicate(this)){yield this;return;}
-for(const s of this.subSlices){yield*s.findTopmostSlicesRelativeToThisSlice(eventPredicate);}},iterateAllSubsequentSlices(callback,opt_this){const parentStack=[];let started=false;const topmostSlice=this.mostTopLevelSlice;parentStack.push(topmostSlice);while(parentStack.length!==0){const curSlice=parentStack.pop();if(started){callback.call(opt_this,curSlice);}else{started=(curSlice.guid===this.guid);}
-for(let i=curSlice.subSlices.length-1;i>=0;i--){parentStack.push(curSlice.subSlices[i]);}}},get subsequentSlices(){const res=[];this.iterateAllSubsequentSlices(function(subseqSlice){res.push(subseqSlice);});return res;},*enumerateAllAncestors(){let curSlice=this.parentSlice;while(curSlice){yield curSlice;curSlice=curSlice.parentSlice;}},get ancestorSlices(){return Array.from(this.enumerateAllAncestors());},iterateEntireHierarchy(callback,opt_this){const mostTopLevelSlice=this.mostTopLevelSlice;callback.call(opt_this,mostTopLevelSlice);mostTopLevelSlice.iterateAllSubsequentSlices(callback,opt_this);},get entireHierarchy(){const res=[];this.iterateEntireHierarchy(function(slice){res.push(slice);});return res;},get ancestorAndSubsequentSlices(){const res=[];res.push(this);for(const aSlice of this.enumerateAllAncestors()){res.push(aSlice);}
-this.iterateAllSubsequentSlices(function(sSlice){res.push(sSlice);});return res;},*enumerateAllDescendents(){for(const slice of this.subSlices){yield slice;}
-for(const slice of this.subSlices){yield*slice.enumerateAllDescendents();}},get descendentSlices(){const res=[];for(const slice of this.enumerateAllDescendents()){res.push(slice);}
-return res;}};return{Slice,};});'use strict';tr.exportTo('tr.model',function(){const Slice=tr.model.Slice;const SCHEDULING_STATE={DEBUG:'Debug',EXIT_DEAD:'Exit Dead',RUNNABLE:'Runnable',RUNNING:'Running',SLEEPING:'Sleeping',STOPPED:'Stopped',TASK_DEAD:'Task Dead',UNINTR_SLEEP:'Uninterruptible Sleep',UNINTR_SLEEP_WAKE_KILL:'Uninterruptible Sleep | WakeKill',UNINTR_SLEEP_WAKING:'Uninterruptible Sleep | Waking',UNINTR_SLEEP_IO:'Uninterruptible Sleep - Block I/O',UNINTR_SLEEP_WAKE_KILL_IO:'Uninterruptible Sleep | WakeKill - Block I/O',UNINTR_SLEEP_WAKING_IO:'Uninterruptible Sleep | Waking - Block I/O',UNKNOWN:'UNKNOWN',WAKE_KILL:'Wakekill',WAKING:'Waking',ZOMBIE:'Zombie'};function ThreadTimeSlice(thread,schedulingState,cat,start,args,opt_duration){Slice.call(this,cat,schedulingState,this.getColorForState_(schedulingState),start,args,opt_duration);this.thread=thread;this.schedulingState=schedulingState;this.cpuOnWhichThreadWasRunning=undefined;}
-ThreadTimeSlice.prototype={__proto__:Slice.prototype,getColorForState_(state){const getColorIdForReservedName=tr.b.ColorScheme.getColorIdForReservedName;switch(state){case SCHEDULING_STATE.RUNNABLE:return getColorIdForReservedName('thread_state_runnable');case SCHEDULING_STATE.RUNNING:return getColorIdForReservedName('thread_state_running');case SCHEDULING_STATE.SLEEPING:return getColorIdForReservedName('thread_state_sleeping');case SCHEDULING_STATE.DEBUG:case SCHEDULING_STATE.EXIT_DEAD:case SCHEDULING_STATE.STOPPED:case SCHEDULING_STATE.TASK_DEAD:case SCHEDULING_STATE.UNINTR_SLEEP:case SCHEDULING_STATE.UNINTR_SLEEP_WAKE_KILL:case SCHEDULING_STATE.UNINTR_SLEEP_WAKING:case SCHEDULING_STATE.UNKNOWN:case SCHEDULING_STATE.WAKE_KILL:case SCHEDULING_STATE.WAKING:case SCHEDULING_STATE.ZOMBIE:return getColorIdForReservedName('thread_state_uninterruptible');case SCHEDULING_STATE.UNINTR_SLEEP_IO:case SCHEDULING_STATE.UNINTR_SLEEP_WAKE_KILL_IO:case SCHEDULING_STATE.UNINTR_SLEEP_WAKING_IO:return getColorIdForReservedName('thread_state_iowait');default:return getColorIdForReservedName('thread_state_unknown');}},get analysisTypeName(){return'tr.ui.analysis.ThreadTimeSlice';},getAssociatedCpuSlice(){if(!this.cpuOnWhichThreadWasRunning)return undefined;const cpuSlices=this.cpuOnWhichThreadWasRunning.slices;for(let i=0;i<cpuSlices.length;i++){const cpuSlice=cpuSlices[i];if(cpuSlice.start!==this.start)continue;if(cpuSlice.duration!==this.duration)continue;return cpuSlice;}
-return undefined;},getCpuSliceThatTookCpu(){if(this.cpuOnWhichThreadWasRunning)return undefined;let curIndex=this.thread.indexOfTimeSlice(this);let cpuSliceWhenLastRunning;while(curIndex>=0){const curSlice=this.thread.timeSlices[curIndex];if(!curSlice.cpuOnWhichThreadWasRunning){curIndex--;continue;}
-cpuSliceWhenLastRunning=curSlice.getAssociatedCpuSlice();break;}
-if(!cpuSliceWhenLastRunning)return undefined;const cpu=cpuSliceWhenLastRunning.cpu;const indexOfSliceOnCpuWhenLastRunning=cpu.indexOf(cpuSliceWhenLastRunning);const nextRunningSlice=cpu.slices[indexOfSliceOnCpuWhenLastRunning+1];if(!nextRunningSlice)return undefined;if(Math.abs(nextRunningSlice.start-cpuSliceWhenLastRunning.end)<0.00001){return nextRunningSlice;}
-return undefined;}};tr.model.EventRegistry.register(ThreadTimeSlice,{name:'threadTimeSlice',pluralName:'threadTimeSlices'});return{ThreadTimeSlice,SCHEDULING_STATE,};});'use strict';tr.exportTo('tr.model',function(){const CompoundEventSelectionState={NOT_SELECTED:0,EVENT_SELECTED:0x1,SOME_ASSOCIATED_EVENTS_SELECTED:0x2,ALL_ASSOCIATED_EVENTS_SELECTED:0x4,EVENT_AND_SOME_ASSOCIATED_SELECTED:0x1|0x2,EVENT_AND_ALL_ASSOCIATED_SELECTED:0x1|0x4};return{CompoundEventSelectionState,};});'use strict';tr.exportTo('tr.model.um',function(){const CompoundEventSelectionState=tr.model.CompoundEventSelectionState;function UserExpectation(parentModel,initiatorType,start,duration){tr.model.TimedEvent.call(this,start);this.associatedEvents=new tr.model.EventSet();this.duration=duration;this.initiatorType_=initiatorType;this.parentModel=parentModel;this.typeInfo_=undefined;this.sourceEvents=new tr.model.EventSet();}
-const INITIATOR_TYPE={KEYBOARD:'Keyboard',MOUSE:'Mouse',MOUSE_WHEEL:'MouseWheel',TAP:'Tap',PINCH:'Pinch',FLING:'Fling',TOUCH:'Touch',SCROLL:'Scroll',CSS:'CSS',WEBGL:'WebGL',VIDEO:'Video',VR:'VR',};UserExpectation.prototype={__proto__:tr.model.TimedEvent.prototype,computeCompoundEvenSelectionState(selection){let cess=CompoundEventSelectionState.NOT_SELECTED;if(selection.contains(this)){cess|=CompoundEventSelectionState.EVENT_SELECTED;}
-if(this.associatedEvents.intersectionIsEmpty(selection)){return cess;}
-const allContained=this.associatedEvents.every(function(event){return selection.contains(event);});if(allContained){cess|=CompoundEventSelectionState.ALL_ASSOCIATED_EVENTS_SELECTED;}else{cess|=CompoundEventSelectionState.SOME_ASSOCIATED_EVENTS_SELECTED;}
-return cess;},get associatedSamples(){const samples=new tr.model.EventSet();this.associatedEvents.forEach(function(event){if(event instanceof tr.model.ThreadSlice){samples.addEventSet(event.overlappingSamples);}});return samples;},get userFriendlyName(){return this.title+' User Expectation at '+
-tr.b.Unit.byName.timeStampInMs.format(this.start);},get stableId(){return('UserExpectation.'+this.guid);},get typeInfo(){if(!this.typeInfo_){this.typeInfo_=UserExpectation.subTypes.findTypeInfo(this.constructor);}
-if(!this.typeInfo_){throw new Error('Unregistered UserExpectation');}
-return this.typeInfo_;},get colorId(){return this.typeInfo.metadata.colorId;},get stageTitle(){return this.typeInfo.metadata.stageTitle;},get initiatorType(){return this.initiatorType_;},get title(){if(!this.initiatorType){return this.stageTitle;}
-return this.initiatorType+' '+this.stageTitle;},get totalCpuMs(){let cpuMs=0;this.associatedEvents.forEach(function(event){if(event.cpuSelfTime){cpuMs+=event.cpuSelfTime;}});return cpuMs;}};const subTypes={};const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);tr.b.decorateExtensionRegistry(subTypes,options);subTypes.addEventListener('will-register',function(e){const metadata=e.typeInfo.metadata;if(metadata.stageTitle===undefined){throw new Error('Registered UserExpectations must provide '+'stageTitle');}
-if(metadata.colorId===undefined){throw new Error('Registered UserExpectations must provide '+'colorId');}});tr.model.EventRegistry.register(UserExpectation,{name:'userExpectation',pluralName:'userExpectations',subTypes});return{UserExpectation,INITIATOR_TYPE,};});'use strict';tr.exportTo('tr.model.um',function(){function ResponseExpectation(parentModel,initiatorTitle,start,duration,opt_isAnimationBegin){tr.model.um.UserExpectation.call(this,parentModel,initiatorTitle,start,duration);this.isAnimationBegin=opt_isAnimationBegin||false;}
-ResponseExpectation.prototype={__proto__:tr.model.um.UserExpectation.prototype,constructor:ResponseExpectation};tr.model.um.UserExpectation.subTypes.register(ResponseExpectation,{stageTitle:'Response',colorId:tr.b.ColorScheme.getColorIdForReservedName('rail_response')});return{ResponseExpectation,};});'use strict';tr.exportTo('tr.e.audits',function(){const SCHEDULING_STATE=tr.model.SCHEDULING_STATE;const Auditor=tr.c.Auditor;const AndroidModelHelper=tr.model.helpers.AndroidModelHelper;const ColorScheme=tr.b.ColorScheme;const Statistics=tr.b.math.Statistics;const FRAME_PERF_CLASS=tr.model.FRAME_PERF_CLASS;const Alert=tr.model.Alert;const EventInfo=tr.model.EventInfo;const Scalar=tr.b.Scalar;const timeDurationInMs=tr.b.Unit.byName.timeDurationInMs;const EXPECTED_FRAME_TIME_MS=16.67;function getStart(e){return e.start;}
-function getDuration(e){return e.duration;}
-function getCpuDuration(e){return(e.cpuDuration!==undefined)?e.cpuDuration:e.duration;}
-function frameIsActivityStart(frame){return frame.associatedEvents.any(x=>x.title==='activityStart');}
-function frameMissedDeadline(frame){return frame.args.deadline&&frame.args.deadline<frame.end;}
-function DocLinkBuilder(){this.docLinks=[];}
-DocLinkBuilder.prototype={addAppVideo(name,videoId){this.docLinks.push({label:'Video Link',textContent:('Android Performance Patterns: '+name),href:'https://www.youtube.com/watch?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE&v='+videoId});return this;},addDacRef(name,link){this.docLinks.push({label:'Doc Link',textContent:(name+' documentation'),href:'https://developer.android.com/reference/'+link});return this;},build(){return this.docLinks;}};function AndroidAuditor(model){Auditor.call(this,model);const helper=model.getOrCreateHelper(AndroidModelHelper);if(helper.apps.length||helper.surfaceFlinger){this.helper=helper;}}
-AndroidAuditor.viewAlphaAlertInfo_=new EventInfo('Inefficient View alpha usage','Setting an alpha between 0 and 1 has significant performance costs, if one of the fast alpha paths is not used.',new DocLinkBuilder().addAppVideo('Hidden Cost of Transparency','wIy8g8yNhNk').addDacRef('View#setAlpha()','android/view/View.html#setAlpha(float)').build());AndroidAuditor.saveLayerAlertInfo_=new EventInfo('Expensive rendering with Canvas#saveLayer()','Canvas#saveLayer() incurs extremely high rendering cost. They disrupt the rendering pipeline when drawn, forcing a flush of drawing content. Instead use View hardware layers, or static Bitmaps. This enables the offscreen buffers to be reused in between frames, and avoids the disruptive render target switch.',new DocLinkBuilder().addAppVideo('Hidden Cost of Transparency','wIy8g8yNhNk').addDacRef('Canvas#saveLayerAlpha()','android/graphics/Canvas.html#saveLayerAlpha(android.graphics.RectF, int, int)').build());AndroidAuditor.getSaveLayerAlerts_=function(frame){const badAlphaRegEx=/^(.+) alpha caused (unclipped )?saveLayer (\d+)x(\d+)$/;const saveLayerRegEx=/^(unclipped )?saveLayer (\d+)x(\d+)$/;const ret=[];const events=[];frame.associatedEvents.forEach(function(slice){const match=badAlphaRegEx.exec(slice.title);if(match){const args={'view name':match[1],'width':parseInt(match[3]),'height':parseInt(match[4])};ret.push(new Alert(AndroidAuditor.viewAlphaAlertInfo_,slice.start,[slice],args));}else if(saveLayerRegEx.test(slice.title)){events.push(slice);}},this);if(events.length>ret.length){const unclippedSeen=Statistics.sum(events,function(slice){return saveLayerRegEx.exec(slice.title)[1]?1:0;});const clippedSeen=events.length-unclippedSeen;const earliestStart=Statistics.min(events,function(slice){return slice.start;});const args={'Unclipped saveLayer count (especially bad!)':unclippedSeen,'Clipped saveLayer count':clippedSeen};events.push(frame);ret.push(new Alert(AndroidAuditor.saveLayerAlertInfo_,earliestStart,events,args));}
-return ret;};AndroidAuditor.pathAlertInfo_=new EventInfo('Path texture churn','Paths are drawn with a mask texture, so when a path is modified / newly drawn, that texture must be generated and uploaded to the GPU. Ensure that you cache paths between frames and do not unnecessarily call Path#reset(). You can cut down on this cost by sharing Path object instances between drawables/views.');AndroidAuditor.getPathAlert_=function(frame){const uploadRegEx=/^Generate Path Texture$/;const events=frame.associatedEvents.filter(function(event){return event.title==='Generate Path Texture';});const start=Statistics.min(events,getStart);const duration=Statistics.sum(events,getDuration);if(duration<3)return undefined;events.push(frame);return new Alert(AndroidAuditor.pathAlertInfo_,start,events,{'Time spent':new Scalar(timeDurationInMs,duration)});};AndroidAuditor.uploadAlertInfo_=new EventInfo('Expensive Bitmap uploads','Bitmaps that have been modified / newly drawn must be uploaded to the GPU. Since this is expensive if the total number of pixels uploaded is large, reduce the amount of Bitmap churn in this animation/context, per frame.');AndroidAuditor.getUploadAlert_=function(frame){const uploadRegEx=/^Upload (\d+)x(\d+) Texture$/;const events=[];let start=Number.POSITIVE_INFINITY;let duration=0;let pixelsUploaded=0;frame.associatedEvents.forEach(function(event){const match=uploadRegEx.exec(event.title);if(match){events.push(event);start=Math.min(start,event.start);duration+=event.duration;pixelsUploaded+=parseInt(match[1])*parseInt(match[2]);}});if(events.length===0||duration<3)return undefined;const mPixels=(pixelsUploaded/1000000).toFixed(2)+' million';const args={'Pixels uploaded':mPixels,'Time spent':new Scalar(timeDurationInMs,duration)};events.push(frame);return new Alert(AndroidAuditor.uploadAlertInfo_,start,events,args);};AndroidAuditor.ListViewInflateAlertInfo_=new EventInfo('Inflation during ListView recycling','ListView item recycling involved inflating views. Ensure your Adapter#getView() recycles the incoming View, instead of constructing a new one.');AndroidAuditor.ListViewBindAlertInfo_=new EventInfo('Inefficient ListView recycling/rebinding','ListView recycling taking too much time per frame. Ensure your Adapter#getView() binds data efficiently.');AndroidAuditor.getListViewAlert_=function(frame){const events=frame.associatedEvents.filter(function(event){return event.title==='obtainView'||event.title==='setupListItem';});const duration=Statistics.sum(events,getCpuDuration);if(events.length===0||duration<3)return undefined;let hasInflation=false;for(const event of events){if(event.findDescendentSlice('inflate')){hasInflation=true;}}
-const start=Statistics.min(events,getStart);const args={'Time spent':new Scalar(timeDurationInMs,duration)};args['ListView items '+(hasInflation?'inflated':'rebound')]=events.length/2;const eventInfo=hasInflation?AndroidAuditor.ListViewInflateAlertInfo_:AndroidAuditor.ListViewBindAlertInfo_;events.push(frame);return new Alert(eventInfo,start,events,args);};AndroidAuditor.measureLayoutAlertInfo_=new EventInfo('Expensive measure/layout pass','Measure/Layout took a significant time, contributing to jank. Avoid triggering layout during animations.',new DocLinkBuilder().addAppVideo('Invalidations, Layouts, and Performance','we6poP0kw6E').build());AndroidAuditor.getMeasureLayoutAlert_=function(frame){const events=frame.associatedEvents.filter(function(event){return event.title==='measure'||event.title==='layout';});const duration=Statistics.sum(events,getCpuDuration);if(events.length===0||duration<3)return undefined;const start=Statistics.min(events,getStart);events.push(frame);return new Alert(AndroidAuditor.measureLayoutAlertInfo_,start,events,{'Time spent':new Scalar(timeDurationInMs,duration)});};AndroidAuditor.viewDrawAlertInfo_=new EventInfo('Long View#draw()','Recording the drawing commands of invalidated Views took a long time. Avoid significant work in View or Drawable custom drawing, especially allocations or drawing to Bitmaps.',new DocLinkBuilder().addAppVideo('Invalidations, Layouts, and Performance','we6poP0kw6E').addAppVideo('Avoiding Allocations in onDraw()','HAK5acHQ53E').build());AndroidAuditor.getViewDrawAlert_=function(frame){let slice=undefined;for(const event of frame.associatedEvents){if(event.title==='getDisplayList'||event.title==='Record View#draw()'){slice=event;break;}}
-if(!slice||getCpuDuration(slice)<3)return undefined;return new Alert(AndroidAuditor.viewDrawAlertInfo_,slice.start,[slice,frame],{'Time spent':new Scalar(timeDurationInMs,getCpuDuration(slice))});};AndroidAuditor.blockingGcAlertInfo_=new EventInfo('Blocking Garbage Collection','Blocking GCs are caused by object churn, and made worse by having large numbers of objects in the heap. Avoid allocating objects during animations/scrolling, and recycle Bitmaps to avoid triggering garbage collection.',new DocLinkBuilder().addAppVideo('Garbage Collection in Android','pzfzz50W5Uo').addAppVideo('Avoiding Allocations in onDraw()','HAK5acHQ53E').build());AndroidAuditor.getBlockingGcAlert_=function(frame){const events=frame.associatedEvents.filter(function(event){return event.title==='DVM Suspend'||event.title==='GC: Wait For Concurrent';});const blockedDuration=Statistics.sum(events,getDuration);if(blockedDuration<3)return undefined;const start=Statistics.min(events,getStart);events.push(frame);return new Alert(AndroidAuditor.blockingGcAlertInfo_,start,events,{'Blocked duration':new Scalar(timeDurationInMs,blockedDuration)});};AndroidAuditor.lockContentionAlertInfo_=new EventInfo('Lock contention','UI thread lock contention is caused when another thread holds a lock that the UI thread is trying to use. UI thread progress is blocked until the lock is released. Inspect locking done within the UI thread, and ensure critical sections are short.');AndroidAuditor.getLockContentionAlert_=function(frame){const events=frame.associatedEvents.filter(function(event){return/^Lock Contention on /.test(event.title);});const blockedDuration=Statistics.sum(events,getDuration);if(blockedDuration<1)return undefined;const start=Statistics.min(events,getStart);events.push(frame);return new Alert(AndroidAuditor.lockContentionAlertInfo_,start,events,{'Blocked duration':new Scalar(timeDurationInMs,blockedDuration)});};AndroidAuditor.schedulingAlertInfo_=new EventInfo('Scheduling delay','Work to produce this frame was descheduled for several milliseconds, contributing to jank. Ensure that code on the UI thread doesn\'t block on work being done on other threads, and that background threads (doing e.g. network or bitmap loading) are running at android.os.Process#THREAD_PRIORITY_BACKGROUND or lower so they are less likely to interrupt the UI thread. These background threads should show up with a priority number of 130 or higher in the scheduling section under the Kernel process.');AndroidAuditor.getSchedulingAlert_=function(frame){let totalDuration=0;const totalStats={};for(const ttr of frame.threadTimeRanges){const stats=ttr.thread.getSchedulingStatsForRange(ttr.start,ttr.end);for(const[key,value]of Object.entries(stats)){if(!(key in totalStats)){totalStats[key]=0;}
-totalStats[key]+=value;totalDuration+=value;}}
-if(!(SCHEDULING_STATE.RUNNING in totalStats)||totalDuration===0||totalDuration-totalStats[SCHEDULING_STATE.RUNNING]<3){return;}
-const args={};for(const[key,value]of Object.entries(totalStats)){let newKey=key;if(key===SCHEDULING_STATE.RUNNABLE){newKey='Not scheduled, but runnable';}else if(key===SCHEDULING_STATE.UNINTR_SLEEP){newKey='Blocking I/O delay';}
-args[newKey]=new Scalar(timeDurationInMs,value);}
-return new Alert(AndroidAuditor.schedulingAlertInfo_,frame.start,[frame],args);};AndroidAuditor.prototype={__proto__:Auditor.prototype,renameAndSort_(){this.model.kernel.important=false;this.model.getAllProcesses().forEach(function(process){if(this.helper.surfaceFlinger&&process===this.helper.surfaceFlinger.process){if(!process.name){process.name='SurfaceFlinger';}
-process.sortIndex=Number.NEGATIVE_INFINITY;process.important=false;return;}
-const uiThread=process.getThread(process.pid);if(!process.name&&uiThread&&uiThread.name){if(/^ndroid\./.test(uiThread.name)){uiThread.name='a'+uiThread.name;}
-process.name=uiThread.name;uiThread.name='UI Thread';}
-process.sortIndex=0;for(const tid in process.threads){process.sortIndex-=process.threads[tid].sliceGroup.slices.length;}},this);this.model.getAllThreads().forEach(function(thread){if(thread.tid===thread.parent.pid){thread.sortIndex=-3;}
-if(thread.name==='RenderThread'){thread.sortIndex=-2;}
-if(/^hwuiTask/.test(thread.name)){thread.sortIndex=-1;}});},pushFramesAndJudgeJank_(){let badFramesObserved=0;let framesObserved=0;const surfaceFlinger=this.helper.surfaceFlinger;this.helper.apps.forEach(function(app){app.process.frames=app.getFrames();app.process.frames.forEach(function(frame){if(frame.totalDuration>EXPECTED_FRAME_TIME_MS*2){badFramesObserved+=2;frame.perfClass=FRAME_PERF_CLASS.TERRIBLE;}else if(frame.totalDuration>EXPECTED_FRAME_TIME_MS||frameMissedDeadline(frame)){badFramesObserved++;frame.perfClass=FRAME_PERF_CLASS.BAD;}else{frame.perfClass=FRAME_PERF_CLASS.GOOD;}});framesObserved+=app.process.frames.length;});if(framesObserved){const portionBad=badFramesObserved/framesObserved;if(portionBad>0.3){this.model.faviconHue='red';}else if(portionBad>0.05){this.model.faviconHue='yellow';}else{this.model.faviconHue='green';}}},pushEventInfo_(){const appAnnotator=new AppAnnotator();this.helper.apps.forEach(function(app){if(app.uiThread){appAnnotator.applyEventInfos(app.uiThread.sliceGroup);}
-if(app.renderThread){appAnnotator.applyEventInfos(app.renderThread.sliceGroup);}});},runAnnotate(){if(!this.helper)return;this.renameAndSort_();this.pushFramesAndJudgeJank_();this.pushEventInfo_();this.helper.iterateImportantSlices(function(slice){slice.important=true;});},runAudit(){if(!this.helper)return;const alerts=this.model.alerts;this.helper.apps.forEach(function(app){app.getFrames().forEach(function(frame){alerts.push.apply(alerts,AndroidAuditor.getSaveLayerAlerts_(frame));if(frame.perfClass===FRAME_PERF_CLASS.NEUTRAL||frame.perfClass===FRAME_PERF_CLASS.GOOD){return;}
-let alert=AndroidAuditor.getPathAlert_(frame);if(alert)alerts.push(alert);alert=AndroidAuditor.getUploadAlert_(frame);if(alert)alerts.push(alert);alert=AndroidAuditor.getListViewAlert_(frame);if(alert)alerts.push(alert);alert=AndroidAuditor.getMeasureLayoutAlert_(frame);if(alert)alerts.push(alert);alert=AndroidAuditor.getViewDrawAlert_(frame);if(alert)alerts.push(alert);alert=AndroidAuditor.getBlockingGcAlert_(frame);if(alert)alerts.push(alert);alert=AndroidAuditor.getLockContentionAlert_(frame);if(alert)alerts.push(alert);alert=AndroidAuditor.getSchedulingAlert_(frame);if(alert)alerts.push(alert);});},this);this.addRenderingInteractionRecords();this.addInputInteractionRecords();},addRenderingInteractionRecords(){const events=[];this.helper.apps.forEach(function(app){events.push.apply(events,app.getAnimationAsyncSlices());events.push.apply(events,app.getFrames());});const mergerFunction=function(events){const ir=new tr.model.um.ResponseExpectation(this.model,'Rendering',events[0].min,events[events.length-1].max-events[0].min);this.model.userModel.expectations.push(ir);}.bind(this);tr.b.math.mergeRanges(tr.b.math.convertEventsToRanges(events),30,mergerFunction);},addInputInteractionRecords(){const inputSamples=[];this.helper.apps.forEach(function(app){inputSamples.push.apply(inputSamples,app.getInputSamples());});const mergerFunction=function(events){const ir=new tr.model.um.ResponseExpectation(this.model,'Input',events[0].min,events[events.length-1].max-events[0].min);this.model.userModel.expectations.push(ir);}.bind(this);const inputRanges=inputSamples.map(function(sample){return tr.b.math.Range.fromExplicitRange(sample.timestamp,sample.timestamp);});tr.b.math.mergeRanges(inputRanges,30,mergerFunction);}};Auditor.register(AndroidAuditor);function AppAnnotator(){this.titleInfoLookup=new Map();this.titleParentLookup=new Map();this.build_();}
-AppAnnotator.prototype={build_(){const registerEventInfo=function(dict){this.titleInfoLookup.set(dict.title,new EventInfo(dict.title,dict.description,dict.docLinks));if(dict.parents){this.titleParentLookup.set(dict.title,dict.parents);}}.bind(this);registerEventInfo({title:'inflate',description:'Constructing a View hierarchy from pre-processed XML via LayoutInflater#layout. This includes constructing all of the View objects in the hierarchy, and applying styled attributes.'});registerEventInfo({title:'obtainView',description:'Adapter#getView() called to bind content to a recycled View that is being presented.'});registerEventInfo({title:'setupListItem',description:'Attached a newly-bound, recycled View to its parent ListView.'});registerEventInfo({title:'setupGridItem',description:'Attached a newly-bound, recycled View to its parent GridView.'});const choreographerLinks=new DocLinkBuilder().addDacRef('Choreographer','android/view/Choreographer.html').build();registerEventInfo({title:'Choreographer#doFrame',docLinks:choreographerLinks,description:'Choreographer executes frame callbacks for inputs, animations, and rendering traversals. When this work is done, a frame will be presented to the user.'});registerEventInfo({title:'input',parents:['Choreographer#doFrame'],docLinks:choreographerLinks,description:'Input callbacks are processed. This generally encompasses dispatching input to Views, as well as any work the Views do to process this input/gesture.'});registerEventInfo({title:'animation',parents:['Choreographer#doFrame'],docLinks:choreographerLinks,description:'Animation callbacks are processed. This is generally minimal work, as animations determine progress for the frame, and push new state to animated objects (such as setting View properties).'});registerEventInfo({title:'traversals',parents:['Choreographer#doFrame'],docLinks:choreographerLinks,description:'Primary draw traversals. This is the primary traversal of the View hierarchy, including layout and draw passes.'});const traversalParents=['Choreographer#doFrame','performTraversals'];const layoutLinks=new DocLinkBuilder().addDacRef('View#Layout','android/view/View.html#Layout').build();registerEventInfo({title:'performTraversals',description:'A drawing traversal of the View hierarchy, comprised of all layout and drawing needed to produce the frame.'});registerEventInfo({title:'measure',parents:traversalParents,docLinks:layoutLinks,description:'First of two phases in view hierarchy layout. Views are asked to size themselves according to constraints supplied by their parent. Some ViewGroups may measure a child more than once to help satisfy their own constraints. Nesting ViewGroups that measure children more than once can lead to excessive and repeated work.'});registerEventInfo({title:'layout',parents:traversalParents,docLinks:layoutLinks,description:'Second of two phases in view hierarchy layout, repositioning content and child Views into their new locations.'});const drawString='Draw pass over the View hierarchy. Every invalidated View will have its drawing commands recorded. On Android versions prior to Lollipop, this would also include the issuing of draw commands to the GPU. Starting with Lollipop, it only includes the recording of commands, and syncing that information to the RenderThread.';registerEventInfo({title:'draw',parents:traversalParents,description:drawString});const recordString='Every invalidated View\'s drawing commands are recorded. Each will have View#draw() called, and is passed a Canvas that will record and store its drawing commands until it is next invalidated/rerecorded.';registerEventInfo({title:'getDisplayList',parents:['draw'],description:recordString});registerEventInfo({title:'Record View#draw()',parents:['draw'],description:recordString});registerEventInfo({title:'drawDisplayList',parents:['draw'],description:'Execution of recorded draw commands to generate a frame. This represents the actual formation and issuing of drawing commands to the GPU. On Android L and higher devices, this work is done on a dedicated RenderThread, instead of on the UI Thread.'});registerEventInfo({title:'DrawFrame',description:'RenderThread portion of the standard UI/RenderThread split frame. This represents the actual formation and issuing of drawing commands to the GPU.'});registerEventInfo({title:'doFrame',description:'RenderThread animation frame. Represents drawing work done by the RenderThread on a frame where the UI thread did not produce new drawing content.'});registerEventInfo({title:'syncFrameState',description:'Sync stage between the UI thread and the RenderThread, where the UI thread hands off a frame (including information about modified Views). Time in this method primarily consists of uploading modified Bitmaps to the GPU. After this sync is completed, the UI thread is unblocked, and the RenderThread starts to render the frame.'});registerEventInfo({title:'flush drawing commands',description:'Issuing the now complete drawing commands to the GPU.'});registerEventInfo({title:'eglSwapBuffers',description:'Complete GPU rendering of the frame.'});registerEventInfo({title:'RV Scroll',description:'RecyclerView is calculating a scroll. If there are too many of these in Systrace, some Views inside RecyclerView might be causing it. Try to avoid using EditText, focusable views or handle them with care.'});registerEventInfo({title:'RV OnLayout',description:'OnLayout has been called by the View system. If this shows up too many times in Systrace, make sure the children of RecyclerView do not update themselves directly. This will cause a full re-layout but when it happens via the Adapter notifyItemChanged, RecyclerView can avoid full layout calculation.'});registerEventInfo({title:'RV FullInvalidate',description:'NotifyDataSetChanged or equal has been called. If this is taking a long time, try sending granular notify adapter changes instead of just calling notifyDataSetChanged or setAdapter / swapAdapter. Adding stable ids to your adapter might help.'});registerEventInfo({title:'RV PartialInvalidate',description:'RecyclerView is rebinding a View. If this is taking a lot of time, consider optimizing your layout or make sure you are not doing extra operations in onBindViewHolder call.'});registerEventInfo({title:'RV OnBindView',description:'RecyclerView is rebinding a View. If this is taking a lot of time, consider optimizing your layout or make sure you are not doing extra operations in onBindViewHolder call.'});registerEventInfo({title:'RV CreateView',description:'RecyclerView is creating a new View. If too many of these are present: 1) There might be a problem in Recycling (e.g. custom Animations that set transient state and prevent recycling or ItemAnimator not implementing the contract properly. See Adapter#onFailedToRecycleView(ViewHolder). 2) There may be too many item view types. Try merging them. 3) There might be too many itemChange animations and not enough space in RecyclerPool. Try increasing your pool size and item cache size.'});registerEventInfo({title:'eglSwapBuffers',description:'The CPU has finished producing drawing commands, and is flushing drawing work to the GPU, and posting that buffer to the consumer (which is often SurfaceFlinger window composition). Once this is completed, the GPU can produce the frame content without any involvement from the CPU.'});},applyEventInfosRecursive_(parentNames,slice){const checkExpectedParentNames=function(expectedParentNames){if(!expectedParentNames)return true;return expectedParentNames.some(function(name){return parentNames.has(name);});};if(this.titleInfoLookup.has(slice.title)){if(checkExpectedParentNames(this.titleParentLookup.get(slice.title))){slice.info=this.titleInfoLookup.get(slice.title);}}
-if(slice.subSlices.length>0){if(!parentNames.has(slice.title)){parentNames.set(slice.title,0);}
-parentNames.set(slice.title,parentNames.get(slice.title)+1);slice.subSlices.forEach(function(subSlice){this.applyEventInfosRecursive_(parentNames,subSlice);},this);parentNames.set(slice.title,parentNames.get(slice.title)-1);if(parentNames.get(slice.title)===0){delete parentNames[slice.title];}}},applyEventInfos(sliceGroup){sliceGroup.topLevelSlices.forEach(function(slice){this.applyEventInfosRecursive_(new Map(),slice);},this);}};return{AndroidAuditor,};});'use strict';tr.exportTo('tr.model',function(){function ObjectSnapshot(objectInstance,ts,args){tr.model.Event.call(this);this.objectInstance=objectInstance;this.ts=ts;this.args=args;}
-ObjectSnapshot.prototype={__proto__:tr.model.Event.prototype,preInitialize(){},initialize(){},referencedAt(item,object,field){},addBoundsToRange(range){range.addValue(this.ts);},get userFriendlyName(){return'Snapshot of '+this.objectInstance.userFriendlyName+' @ '+
-tr.b.Unit.byName.timeStampInMs.format(this.ts);}};tr.model.EventRegistry.register(ObjectSnapshot,{name:'objectSnapshot',pluralName:'objectSnapshots'});return{ObjectSnapshot,};});'use strict';tr.exportTo('tr.model',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function ObjectInstance(parent,scopedId,category,name,creationTs,opt_baseTypeName){tr.model.Event.call(this);this.parent=parent;this.scopedId=scopedId;this.category=category;this.baseTypeName=opt_baseTypeName?opt_baseTypeName:name;this.name=name;this.creationTs=creationTs;this.creationTsWasExplicit=false;this.deletionTs=Number.MAX_VALUE;this.deletionTsWasExplicit=false;this.colorId=0;this.bounds=new tr.b.math.Range();this.snapshots=[];this.hasImplicitSnapshots=false;}
-ObjectInstance.prototype={__proto__:tr.model.Event.prototype,get typeName(){return this.name;},addBoundsToRange(range){range.addRange(this.bounds);},addSnapshot(ts,args,opt_name,opt_baseTypeName){if(ts<this.creationTs){throw new Error('Snapshots must be >= instance.creationTs');}
-if(ts>=this.deletionTs){throw new Error('Snapshots cannot be added after '+'an objects deletion timestamp.');}
-let lastSnapshot;if(this.snapshots.length>0){lastSnapshot=this.snapshots[this.snapshots.length-1];if(lastSnapshot.ts===ts){throw new Error('Snapshots already exists at this time!');}
-if(ts<lastSnapshot.ts){throw new Error('Snapshots must be added in increasing timestamp order');}}
-if(opt_name&&(this.name!==opt_name)){if(!opt_baseTypeName){throw new Error('Must provide base type name for name update');}
-if(this.baseTypeName!==opt_baseTypeName){throw new Error('Cannot update type name: base types dont match');}
-this.name=opt_name;}
-const snapshotConstructor=tr.model.ObjectSnapshot.subTypes.getConstructor(this.category,this.name);const snapshot=new snapshotConstructor(this,ts,args);this.snapshots.push(snapshot);return snapshot;},wasDeleted(ts){let lastSnapshot;if(this.snapshots.length>0){lastSnapshot=this.snapshots[this.snapshots.length-1];if(lastSnapshot.ts>ts){throw new Error('Instance cannot be deleted at ts='+
-ts+'. A snapshot exists that is older.');}}
-this.deletionTs=ts;this.deletionTsWasExplicit=true;},preInitialize(){for(let i=0;i<this.snapshots.length;i++){this.snapshots[i].preInitialize();}},initialize(){for(let i=0;i<this.snapshots.length;i++){this.snapshots[i].initialize();}},isAliveAt(ts){if(ts<this.creationTs&&this.creationTsWasExplicit){return false;}
-if(ts>this.deletionTs){return false;}
-return true;},getSnapshotAt(ts){if(ts<this.creationTs){if(this.creationTsWasExplicit){throw new Error('ts must be within lifetime of this instance');}
-return this.snapshots[0];}
-if(ts>this.deletionTs){throw new Error('ts must be within lifetime of this instance');}
-const snapshots=this.snapshots;const i=tr.b.findIndexInSortedIntervals(snapshots,function(snapshot){return snapshot.ts;},function(snapshot,i){if(i===snapshots.length-1){return snapshots[i].objectInstance.deletionTs;}
-return snapshots[i+1].ts-snapshots[i].ts;},ts);if(i<0){return this.snapshots[0];}
-if(i>=this.snapshots.length){return this.snapshots[this.snapshots.length-1];}
-return this.snapshots[i];},updateBounds(){this.bounds.reset();this.bounds.addValue(this.creationTs);if(this.deletionTs!==Number.MAX_VALUE){this.bounds.addValue(this.deletionTs);}else if(this.snapshots.length>0){this.bounds.addValue(this.snapshots[this.snapshots.length-1].ts);}},shiftTimestampsForward(amount){this.creationTs+=amount;if(this.deletionTs!==Number.MAX_VALUE){this.deletionTs+=amount;}
-this.snapshots.forEach(function(snapshot){snapshot.ts+=amount;});},get userFriendlyName(){return this.typeName+' object '+this.scopedId;}};tr.model.EventRegistry.register(ObjectInstance,{name:'objectInstance',pluralName:'objectInstances'});return{ObjectInstance,};});'use strict';tr.exportTo('tr.e.chrome',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;const ObjectInstance=tr.model.ObjectInstance;function BlameContextSnapshot(){ObjectSnapshot.apply(this,arguments);}
-BlameContextSnapshot.prototype={__proto__:ObjectSnapshot.prototype,get parentContext(){if(this.args.parent instanceof BlameContextSnapshot){return this.args.parent;}
-return undefined;},get userFriendlyName(){return'BlameContext';}};function BlameContextInstance(){ObjectInstance.apply(this,arguments);}
-BlameContextInstance.prototype={__proto__:ObjectInstance.prototype,get blameContextType(){throw new Error('Not implemented');}};return{BlameContextSnapshot,BlameContextInstance,};});'use strict';tr.exportTo('tr.e.chrome',function(){const BlameContextSnapshot=tr.e.chrome.BlameContextSnapshot;const BlameContextInstance=tr.e.chrome.BlameContextInstance;function FrameTreeNodeSnapshot(){BlameContextSnapshot.apply(this,arguments);}
-FrameTreeNodeSnapshot.prototype={__proto__:BlameContextSnapshot.prototype,get renderFrame(){if(this.args.renderFrame instanceof tr.e.chrome.RenderFrameSnapshot){return this.args.renderFrame;}
-return undefined;},get url(){return this.args.url;},get userFriendlyName(){return'FrameTreeNode';}};tr.model.ObjectSnapshot.subTypes.register(FrameTreeNodeSnapshot,{typeName:'FrameTreeNode'});function FrameTreeNodeInstance(){BlameContextInstance.apply(this,arguments);}
-FrameTreeNodeInstance.prototype={__proto__:BlameContextInstance.prototype,get blameContextType(){return'Frame';}};tr.model.ObjectInstance.subTypes.register(FrameTreeNodeInstance,{typeName:'FrameTreeNode'});return{FrameTreeNodeSnapshot,FrameTreeNodeInstance,};});'use strict';tr.exportTo('tr.e.chrome',function(){const BlameContextSnapshot=tr.e.chrome.BlameContextSnapshot;const BlameContextInstance=tr.e.chrome.BlameContextInstance;function RenderFrameSnapshot(){BlameContextSnapshot.apply(this,arguments);}
-RenderFrameSnapshot.prototype={__proto__:BlameContextSnapshot.prototype,referencedAt(item,object,field){if(item instanceof tr.e.chrome.FrameTreeNodeSnapshot&&object===item.args&&field==='renderFrame'){this.args.frameTreeNode=item;}},get frameTreeNode(){if(this.args.frameTreeNode instanceof
-tr.e.chrome.FrameTreeNodeSnapshot){return this.args.frameTreeNode;}
-return undefined;},get url(){if(this.frameTreeNode){return this.frameTreeNode.url;}
-return undefined;},get userFriendlyName(){return'RenderFrame';}};tr.model.ObjectSnapshot.subTypes.register(RenderFrameSnapshot,{typeName:'RenderFrame'});function RenderFrameInstance(){BlameContextInstance.apply(this,arguments);}
-RenderFrameInstance.prototype={__proto__:BlameContextInstance.prototype,get blameContextType(){return'Frame';}};tr.model.ObjectInstance.subTypes.register(RenderFrameInstance,{typeName:'RenderFrame'});return{RenderFrameSnapshot,RenderFrameInstance,};});'use strict';tr.exportTo('tr.e.chrome',function(){const BlameContextSnapshot=tr.e.chrome.BlameContextSnapshot;const BlameContextInstance=tr.e.chrome.BlameContextInstance;function TopLevelSnapshot(){BlameContextSnapshot.apply(this,arguments);}
-TopLevelSnapshot.prototype={__proto__:BlameContextSnapshot.prototype,get userFriendlyName(){return'TopLevel';}};tr.model.ObjectSnapshot.subTypes.register(TopLevelSnapshot,{typeName:'TopLevel'});function TopLevelInstance(){BlameContextInstance.apply(this,arguments);}
-TopLevelInstance.prototype={__proto__:BlameContextInstance.prototype,get blameContextType(){return'TopLevel';}};tr.model.ObjectInstance.subTypes.register(TopLevelInstance,{typeName:'TopLevel'});return{TopLevelSnapshot,TopLevelInstance,};});'use strict';tr.exportTo('tr.model',function(){function AsyncSlice(category,title,colorId,start,args,duration,opt_isTopLevel,opt_cpuStart,opt_cpuDuration,opt_argsStripped){tr.model.TimedEvent.call(this,start);this.category=category||'';this.originalTitle=title;this.title=title;this.colorId=colorId;this.args=args;this.startStackFrame=undefined;this.endStackFrame=undefined;this.didNotFinish=false;this.important=false;this.subSlices=[];this.parentContainer_=undefined;this.id=undefined;this.startThread=undefined;this.endThread=undefined;this.cpuStart=undefined;this.cpuDuration=undefined;this.argsStripped=false;this.startStackFrame=undefined;this.endStackFrame=undefined;this.duration=duration;this.isTopLevel=(opt_isTopLevel===true);if(opt_cpuStart!==undefined){this.cpuStart=opt_cpuStart;}
-if(opt_cpuDuration!==undefined){this.cpuDuration=opt_cpuDuration;}
-if(opt_argsStripped!==undefined){this.argsStripped=opt_argsStripped;}}
-AsyncSlice.prototype={__proto__:tr.model.TimedEvent.prototype,get analysisTypeName(){return this.title;},get parentContainer(){return this.parentContainer_;},set parentContainer(parentContainer){this.parentContainer_=parentContainer;for(let i=0;i<this.subSlices.length;i++){const subSlice=this.subSlices[i];if(subSlice.parentContainer===undefined){subSlice.parentContainer=parentContainer;}}},get viewSubGroupTitle(){return this.title;},get viewSubGroupGroupingKey(){return undefined;},get userFriendlyName(){return'Async slice '+this.title+' at '+
-tr.b.Unit.byName.timeStampInMs.format(this.start);},get stableId(){const parentAsyncSliceGroup=this.parentContainer.asyncSliceGroup;return parentAsyncSliceGroup.stableId+'.'+
-parentAsyncSliceGroup.slices.indexOf(this);},*findTopmostSlicesRelativeToThisSlice(eventPredicate,opt_this){if(eventPredicate(this)){yield this;return;}
-for(const s of this.subSlices){yield*s.findTopmostSlicesRelativeToThisSlice(eventPredicate);}},findDescendentSlice(targetTitle){if(!this.subSlices)return undefined;for(let i=0;i<this.subSlices.length;i++){if(this.subSlices[i].title===targetTitle){return this.subSlices[i];}
-const slice=this.subSlices[i].findDescendentSlice(targetTitle);if(slice)return slice;}
-return undefined;},*enumerateAllDescendents(){for(const slice of this.subSlices){yield slice;}
-for(const slice of this.subSlices){if(slice.enumerateAllDescendents!==undefined){yield*slice.enumerateAllDescendents();}}},compareTo(that){return this.title.localeCompare(that.title);}};tr.model.EventRegistry.register(AsyncSlice,{name:'asyncSlice',pluralName:'asyncSlices'});return{AsyncSlice,};});'use strict';tr.exportTo('tr.e.blink',function(){class BlinkSchedulerAsyncSlice extends tr.model.AsyncSlice{get viewSubGroupGroupingKey(){if(this.title.startsWith('WebFrameScheduler.')){return'WebFrame'+this.id;}
-return undefined;}}
-tr.model.AsyncSlice.subTypes.register(BlinkSchedulerAsyncSlice,{categoryParts:['renderer.scheduler','disabled-by-default-renderer.scheduler',]});return{BlinkSchedulerAsyncSlice,};});'use strict';tr.exportTo('tr.model.helpers',function(){const MAIN_FRAMETIME_TYPE='main_frametime_type';const IMPL_FRAMETIME_TYPE='impl_frametime_type';const MAIN_RENDERING_STATS='BenchmarkInstrumentation::MainThreadRenderingStats';const IMPL_RENDERING_STATS='BenchmarkInstrumentation::ImplThreadRenderingStats';function getSlicesIntersectingRange(rangeOfInterest,slices){const slicesInFilterRange=[];for(let i=0;i<slices.length;i++){const slice=slices[i];if(rangeOfInterest.intersectsExplicitRangeInclusive(slice.start,slice.end)){slicesInFilterRange.push(slice);}}
-return slicesInFilterRange;}
-function ChromeProcessHelper(modelHelper,process){this.modelHelper=modelHelper;this.process=process;this.telemetryInternalRanges_=undefined;}
-ChromeProcessHelper.prototype={get pid(){return this.process.pid;},isTelemetryInternalEvent(slice){if(this.telemetryInternalRanges_===undefined){this.findTelemetryInternalRanges_();}
-for(const range of this.telemetryInternalRanges_){if(range.containsExplicitRangeInclusive(slice.start,slice.end)){return true;}}
-return false;},findTelemetryInternalRanges_(){this.telemetryInternalRanges_=[];let start=0;for(const thread of Object.values(this.process.threads)){for(const slice of thread.asyncSliceGroup.getDescendantEvents()){if(/^telemetry\.internal\..*\.start$/.test(slice.title)){start=slice.start;}else if(/^telemetry\.internal\..*\.end$/.test(slice.title)&&start!==undefined){this.telemetryInternalRanges_.push(tr.b.math.Range.fromExplicitRange(start,slice.end));start=undefined;}}}},getFrameEventsInRange(frametimeType,range){const titleToGet=(frametimeType===MAIN_FRAMETIME_TYPE?MAIN_RENDERING_STATS:IMPL_RENDERING_STATS);const frameEvents=[];for(const event of this.process.getDescendantEvents()){if(event.title===titleToGet){if(range.intersectsExplicitRangeInclusive(event.start,event.end)){frameEvents.push(event);}}}
-frameEvents.sort(function(a,b){return a.start-b.start;});return frameEvents;}};function getFrametimeDataFromEvents(frameEvents){const frametimeData=[];for(let i=1;i<frameEvents.length;i++){const diff=frameEvents[i].start-frameEvents[i-1].start;frametimeData.push({'x':frameEvents[i].start,'frametime':diff});}
-return frametimeData;}
-return{ChromeProcessHelper,MAIN_FRAMETIME_TYPE,IMPL_FRAMETIME_TYPE,MAIN_RENDERING_STATS,IMPL_RENDERING_STATS,getSlicesIntersectingRange,getFrametimeDataFromEvents,};});'use strict';tr.exportTo('tr.model.helpers',function(){function ChromeBrowserHelper(modelHelper,process){tr.model.helpers.ChromeProcessHelper.call(this,modelHelper,process);this.mainThread_=process.findAtMostOneThreadNamed('CrBrowserMain');if(!process.name){process.name=ChromeBrowserHelper.PROCESS_NAME;}}
-ChromeBrowserHelper.PROCESS_NAME='Browser';ChromeBrowserHelper.isBrowserProcess=function(process){return!!process.findAtMostOneThreadNamed('CrBrowserMain');};ChromeBrowserHelper.prototype={__proto__:tr.model.helpers.ChromeProcessHelper.prototype,get browserName(){const hasInProcessRendererThread=this.process.findAllThreadsNamed('Chrome_InProcRendererThread').length>0;return hasInProcessRendererThread?'webview':'chrome';},get mainThread(){return this.mainThread_;},get rendererHelpers(){return this.modelHelper.rendererHelpers;},getLoadingEventsInRange(rangeOfInterest){return this.getAllAsyncSlicesMatching(function(slice){return slice.title.indexOf('WebContentsImpl Loading')===0&&rangeOfInterest.intersectsExplicitRangeInclusive(slice.start,slice.end);});},getCommitProvisionalLoadEventsInRange(rangeOfInterest){return this.getAllAsyncSlicesMatching(function(slice){return slice.title==='RenderFrameImpl::didCommitProvisionalLoad'&&rangeOfInterest.intersectsExplicitRangeInclusive(slice.start,slice.end);});},get hasLatencyEvents(){let hasLatency=false;for(const thread of this.modelHelper.model.getAllThreads()){for(const event of thread.getDescendantEvents()){if(!event.isTopLevel)continue;if(!(event instanceof tr.e.cc.InputLatencyAsyncSlice)){continue;}
-hasLatency=true;}}
-return hasLatency;},getLatencyEventsInRange(rangeOfInterest){return this.getAllAsyncSlicesMatching(function(slice){return(slice.title.indexOf('InputLatency')===0)&&rangeOfInterest.intersectsExplicitRangeInclusive(slice.start,slice.end);});},getAllAsyncSlicesMatching(pred,opt_this){const events=[];this.iterAllThreads(function(thread){for(const slice of thread.getDescendantEvents()){if(pred.call(opt_this,slice)){events.push(slice);}}});return events;},iterAllThreads(func,opt_this){for(const thread of Object.values(this.process.threads)){func.call(opt_this,thread);}
-for(const rendererHelper of Object.values(this.rendererHelpers)){const rendererProcess=rendererHelper.process;for(const thread of Object.values(rendererProcess.threads)){func.call(opt_this,thread);}}}};return{ChromeBrowserHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){function ChromeGpuHelper(modelHelper,process){tr.model.helpers.ChromeProcessHelper.call(this,modelHelper,process);if(!process.name){process.name=ChromeGpuHelper.PROCESS_NAME;}}
-ChromeGpuHelper.PROCESS_NAME='GPU Process';ChromeGpuHelper.isGpuProcess=function(process){if(process.findAtMostOneThreadNamed('CrBrowserMain')||process.findAtMostOneThreadNamed('CrRendererMain')){return false;}
-return process.findAllThreadsNamed('CrGpuMain').length>0;};ChromeGpuHelper.prototype={__proto__:tr.model.helpers.ChromeProcessHelper.prototype};return{ChromeGpuHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){const NET_CATEGORIES=new Set(['net','netlog','disabled-by-default-netlog','disabled-by-default-network']);class ChromeThreadHelper{constructor(thread){this.thread=thread;}
-getNetworkEvents(){const networkEvents=[];for(const slice of this.thread.asyncSliceGroup.slices){const categories=tr.b.getCategoryParts(slice.category);const isNetEvent=category=>NET_CATEGORIES.has(category);if(categories.filter(isNetEvent).length===0)continue;networkEvents.push(slice);}
-return networkEvents;}}
-return{ChromeThreadHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){const ChromeThreadHelper=tr.model.helpers.ChromeThreadHelper;function ChromeRendererHelper(modelHelper,process){tr.model.helpers.ChromeProcessHelper.call(this,modelHelper,process);this.mainThread_=process.findAtMostOneThreadNamed('CrRendererMain')||process.findAtMostOneThreadNamed('Chrome_InProcRendererThread');this.compositorThread_=process.findAtMostOneThreadNamed('Compositor');this.rasterWorkerThreads_=process.findAllThreadsMatching(function(t){if(t.name===undefined)return false;if(t.name.indexOf('CompositorTileWorker')===0)return true;if(t.name.indexOf('CompositorRasterWorker')===0)return true;return false;});if(!process.name){process.name=ChromeRendererHelper.PROCESS_NAME;}}
-ChromeRendererHelper.PROCESS_NAME='Renderer';ChromeRendererHelper.isRenderProcess=function(process){if(process.findAtMostOneThreadNamed('CrRendererMain'))return true;if(process.findAtMostOneThreadNamed('Compositor'))return true;return false;};ChromeRendererHelper.isTracingProcess=function(process){return process.labels!==undefined&&process.labels.length===1&&process.labels[0]==='chrome://tracing';};ChromeRendererHelper.prototype={__proto__:tr.model.helpers.ChromeProcessHelper.prototype,get mainThread(){return this.mainThread_;},get compositorThread(){return this.compositorThread_;},get rasterWorkerThreads(){return this.rasterWorkerThreads_;},get isChromeTracingUI(){return ChromeRendererHelper.isTracingProcess(this.process);},};return{ChromeRendererHelper,};});'use strict';tr.exportTo('tr.model.helpers',function(){function findChromeBrowserProcesses(model){return model.getAllProcesses(tr.model.helpers.ChromeBrowserHelper.isBrowserProcess);}
-function findChromeRenderProcesses(model){return model.getAllProcesses(tr.model.helpers.ChromeRendererHelper.isRenderProcess);}
-function findChromeGpuProcess(model){const gpuProcesses=model.getAllProcesses(tr.model.helpers.ChromeGpuHelper.isGpuProcess);if(gpuProcesses.length!==1)return undefined;return gpuProcesses[0];}
-function ChromeModelHelper(model){this.model_=model;const browserProcesses=findChromeBrowserProcesses(model);this.browserHelpers_=browserProcesses.map(p=>new tr.model.helpers.ChromeBrowserHelper(this,p));const gpuProcess=findChromeGpuProcess(model);if(gpuProcess){this.gpuHelper_=new tr.model.helpers.ChromeGpuHelper(this,gpuProcess);}else{this.gpuHelper_=undefined;}
-const rendererProcesses_=findChromeRenderProcesses(model);this.rendererHelpers_={};rendererProcesses_.forEach(function(renderProcess){const rendererHelper=new tr.model.helpers.ChromeRendererHelper(this,renderProcess);this.rendererHelpers_[rendererHelper.pid]=rendererHelper;},this);this.chromeBounds_=undefined;}
-ChromeModelHelper.guid=tr.b.GUID.allocateSimple();ChromeModelHelper.supportsModel=function(model){if(findChromeBrowserProcesses(model).length)return true;if(findChromeRenderProcesses(model).length)return true;return false;};ChromeModelHelper.prototype={get pid(){throw new Error('woah');},get process(){throw new Error('woah');},get model(){return this.model_;},get browserProcess(){if(this.browserHelper===undefined)return undefined;return this.browserHelper.process;},get browserHelper(){return this.browserHelpers_[0];},get browserHelpers(){return this.browserHelpers_;},get gpuHelper(){return this.gpuHelper_;},get rendererHelpers(){return this.rendererHelpers_;},get rendererWithLargestPid(){let largestPid=-1;for(const pid in this.rendererHelpers){const rendererHelper=this.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;if(pid>largestPid)largestPid=pid;}
-if(largestPid===-1)return undefined;return this.rendererHelpers[largestPid];},get chromeBounds(){if(!this.chromeBounds_){this.chromeBounds_=new tr.b.math.Range();for(const browserHelper of Object.values(this.browserHelpers)){this.chromeBounds_.addRange(browserHelper.process.bounds);}
-for(const rendererHelper of Object.values(this.rendererHelpers)){this.chromeBounds_.addRange(rendererHelper.process.bounds);}
-if(this.gpuHelper){this.chromeBounds_.addRange(this.gpuHelper.process.bounds);}}
-if(this.chromeBounds_.isEmpty){return undefined;}
-return this.chromeBounds_;}};return{ChromeModelHelper,};});'use strict';tr.exportTo('tr.e.cc',function(){const AsyncSlice=tr.model.AsyncSlice;const EventSet=tr.model.EventSet;const UI_COMP_NAME='INPUT_EVENT_LATENCY_UI_COMPONENT';const ORIGINAL_COMP_NAME='INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT';const BEGIN_COMP_NAME='INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT';const END_COMP_NAME='INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT';const MAIN_RENDERER_THREAD_NAME='CrRendererMain';const COMPOSITOR_THREAD_NAME='Compositor';const POSTTASK_FLOW_EVENT='disabled-by-default-toplevel.flow';const IPC_FLOW_EVENT='disabled-by-default-ipc.flow';const INPUT_EVENT_TYPE_NAMES={CHAR:'Char',CLICK:'GestureClick',CONTEXT_MENU:'ContextMenu',FLING_CANCEL:'GestureFlingCancel',FLING_START:'GestureFlingStart',KEY_DOWN:'KeyDown',KEY_DOWN_RAW:'RawKeyDown',KEY_UP:'KeyUp',LATENCY_SCROLL_UPDATE:'ScrollUpdate',MOUSE_DOWN:'MouseDown',MOUSE_ENTER:'MouseEnter',MOUSE_LEAVE:'MouseLeave',MOUSE_MOVE:'MouseMove',MOUSE_UP:'MouseUp',MOUSE_WHEEL:'MouseWheel',PINCH_BEGIN:'GesturePinchBegin',PINCH_END:'GesturePinchEnd',PINCH_UPDATE:'GesturePinchUpdate',SCROLL_BEGIN:'GestureScrollBegin',SCROLL_END:'GestureScrollEnd',SCROLL_UPDATE:'GestureScrollUpdate',SCROLL_UPDATE_RENDERER:'ScrollUpdate',SHOW_PRESS:'GestureShowPress',TAP:'GestureTap',TAP_CANCEL:'GestureTapCancel',TAP_DOWN:'GestureTapDown',TOUCH_CANCEL:'TouchCancel',TOUCH_END:'TouchEnd',TOUCH_MOVE:'TouchMove',TOUCH_START:'TouchStart',UNKNOWN:'UNKNOWN'};function InputLatencyAsyncSlice(){AsyncSlice.apply(this,arguments);this.associatedEvents_=new EventSet();this.typeName_=undefined;if(!this.isLegacyEvent){this.determineModernTypeName_();}}
-InputLatencyAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get isLegacyEvent(){return this.title==='InputLatency';},get typeName(){if(!this.typeName_){this.determineLegacyTypeName_();}
-return this.typeName_;},checkTypeName_(){if(!this.typeName_){throw new Error('Unable to determine typeName');}
-let found=false;for(const typeName in INPUT_EVENT_TYPE_NAMES){if(this.typeName===INPUT_EVENT_TYPE_NAMES[typeName]){found=true;break;}}
-if(!found){this.typeName_=INPUT_EVENT_TYPE_NAMES.UNKNOWN;}},determineModernTypeName_(){const lastColonIndex=this.title.lastIndexOf(':');if(lastColonIndex<0)return;const characterAfterLastColonIndex=lastColonIndex+1;this.typeName_=this.title.slice(characterAfterLastColonIndex);this.checkTypeName_();},determineLegacyTypeName_(){for(const subSlice of this.enumerateAllDescendents()){const subSliceIsAInputLatencyAsyncSlice=(subSlice instanceof InputLatencyAsyncSlice);if(!subSliceIsAInputLatencyAsyncSlice)continue;if(!subSlice.typeName)continue;if(this.typeName_&&subSlice.typeName_){const subSliceHasDifferentTypeName=(this.typeName_!==subSlice.typeName_);if(subSliceHasDifferentTypeName){throw new Error('InputLatencyAsyncSlice.determineLegacyTypeName_() '+' found multiple typeNames');}}
-this.typeName_=subSlice.typeName_;}
-if(!this.typeName_){throw new Error('InputLatencyAsyncSlice.determineLegacyTypeName_() failed');}
-this.checkTypeName_();},getRendererHelper(sourceSlices){const traceModel=this.startThread.parent.model;const modelHelper=traceModel.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!modelHelper)return undefined;let mainThread=undefined;let compositorThread=undefined;for(const i in sourceSlices){if(sourceSlices[i].parentContainer.name===MAIN_RENDERER_THREAD_NAME){mainThread=sourceSlices[i].parentContainer;}else if(sourceSlices[i].parentContainer.name===COMPOSITOR_THREAD_NAME){compositorThread=sourceSlices[i].parentContainer;}
-if(mainThread&&compositorThread)break;}
-const rendererHelpers=modelHelper.rendererHelpers;const pids=Object.keys(rendererHelpers);for(let i=0;i<pids.length;i++){const pid=pids[i];const rendererHelper=rendererHelpers[pid];if(rendererHelper.mainThread===mainThread||rendererHelper.compositorThread===compositorThread){return rendererHelper;}}
-return undefined;},addEntireSliceHierarchy(slice){this.associatedEvents_.push(slice);slice.iterateAllSubsequentSlices(function(subsequentSlice){this.associatedEvents_.push(subsequentSlice);},this);},addDirectlyAssociatedEvents(flowEvents){const slices=[];flowEvents.forEach(function(flowEvent){this.associatedEvents_.push(flowEvent);const newSource=flowEvent.startSlice.mostTopLevelSlice;if(slices.indexOf(newSource)===-1){slices.push(newSource);}},this);const lastFlowEvent=flowEvents[flowEvents.length-1];const lastSource=lastFlowEvent.endSlice.mostTopLevelSlice;if(slices.indexOf(lastSource)===-1){slices.push(lastSource);}
-return slices;},addScrollUpdateEvents(rendererHelper){if(!rendererHelper||!rendererHelper.compositorThread){return;}
-const compositorThread=rendererHelper.compositorThread;const gestureScrollUpdateStart=this.start;const gestureScrollUpdateEnd=this.end;const allCompositorAsyncSlices=compositorThread.asyncSliceGroup.slices;for(const i in allCompositorAsyncSlices){const slice=allCompositorAsyncSlices[i];if(slice.title!=='Latency::ScrollUpdate')continue;const parentId=slice.args.data.INPUT_EVENT_LATENCY_FORWARD_SCROLL_UPDATE_TO_MAIN_COMPONENT.sequence_number;if(parentId===undefined){if(slice.start<gestureScrollUpdateStart||slice.start>=gestureScrollUpdateEnd){continue;}}else{if(parseInt(parentId)!==parseInt(this.id)){continue;}}
-slice.associatedEvents.forEach(function(event){this.associatedEvents_.push(event);},this);break;}},belongToOtherInputs(slice,flowEvents){let fromOtherInputs=false;slice.iterateEntireHierarchy(function(subsequentSlice){if(fromOtherInputs)return;subsequentSlice.inFlowEvents.forEach(function(inflow){if(fromOtherInputs)return;if(inflow.category.indexOf('input')>-1){if(flowEvents.indexOf(inflow)===-1){fromOtherInputs=true;}}},this);},this);return fromOtherInputs;},triggerOtherInputs(event,flowEvents){if(event.outFlowEvents===undefined||event.outFlowEvents.length===0){return false;}
-const flow=event.outFlowEvents[0];if(flow.category!==POSTTASK_FLOW_EVENT||!flow.endSlice){return false;}
-const endSlice=flow.endSlice;if(this.belongToOtherInputs(endSlice.mostTopLevelSlice,flowEvents)){return true;}
-return false;},followSubsequentSlices(event,queue,visited,flowEvents){let stopFollowing=false;let inputAck=false;event.iterateAllSubsequentSlices(function(slice){if(stopFollowing)return;if(slice.title==='TaskQueueManager::RunTask')return;if(slice.title==='ThreadProxy::ScheduledActionSendBeginMainFrame'){return;}
-if(slice.title==='Scheduler::ScheduleBeginImplFrameDeadline'){if(this.triggerOtherInputs(slice,flowEvents))return;}
-if(slice.title==='CompositorImpl::PostComposite'){if(this.triggerOtherInputs(slice,flowEvents))return;}
-if(slice.title==='InputRouterImpl::ProcessInputEventAck'){inputAck=true;}
-if(inputAck&&slice.title==='InputRouterImpl::FilterAndSendWebInputEvent'){stopFollowing=true;}
-this.followCurrentSlice(slice,queue,visited);},this);},followCurrentSlice(event,queue,visited){event.outFlowEvents.forEach(function(outflow){if((outflow.category===POSTTASK_FLOW_EVENT||outflow.category===IPC_FLOW_EVENT)&&outflow.endSlice){this.associatedEvents_.push(outflow);const nextEvent=outflow.endSlice.mostTopLevelSlice;if(!visited.contains(nextEvent)){visited.push(nextEvent);queue.push(nextEvent);}}},this);},backtraceFromDraw(beginImplFrame,visited){const pendingEventQueue=[];pendingEventQueue.push(beginImplFrame.mostTopLevelSlice);while(pendingEventQueue.length!==0){const event=pendingEventQueue.pop();this.addEntireSliceHierarchy(event);event.inFlowEvents.forEach(function(inflow){if(inflow.category===POSTTASK_FLOW_EVENT&&inflow.startSlice){const nextEvent=inflow.startSlice.mostTopLevelSlice;if(!visited.contains(nextEvent)){visited.push(nextEvent);pendingEventQueue.push(nextEvent);}}},this);}},sortRasterizerSlices(rasterWorkerThreads,sortedRasterizerSlices){rasterWorkerThreads.forEach(function(rasterizer){Array.prototype.push.apply(sortedRasterizerSlices,rasterizer.sliceGroup.slices);},this);sortedRasterizerSlices.sort(function(a,b){if(a.start!==b.start){return a.start-b.start;}
-return a.guid-b.guid;});},addRasterizationEvents(prepareTiles,rendererHelper,visited,flowEvents,sortedRasterizerSlices){if(!prepareTiles.args.prepare_tiles_id)return;if(!rendererHelper||!rendererHelper.rasterWorkerThreads){return;}
-const rasterWorkerThreads=rendererHelper.rasterWorkerThreads;const prepareTileId=prepareTiles.args.prepare_tiles_id;const pendingEventQueue=[];if(sortedRasterizerSlices.length===0){this.sortRasterizerSlices(rasterWorkerThreads,sortedRasterizerSlices);}
-let numFinishedTasks=0;const RASTER_TASK_TITLE='RasterizerTaskImpl::RunOnWorkerThread';const IMAGEDECODE_TASK_TITLE='ImageDecodeTaskImpl::RunOnWorkerThread';const FINISHED_TASK_TITLE='TaskSetFinishedTaskImpl::RunOnWorkerThread';for(let i=0;i<sortedRasterizerSlices.length;i++){const task=sortedRasterizerSlices[i];if(task.title===RASTER_TASK_TITLE||task.title===IMAGEDECODE_TASK_TITLE){if(task.args.source_prepare_tiles_id===prepareTileId){this.addEntireSliceHierarchy(task.mostTopLevelSlice);}}else if(task.title===FINISHED_TASK_TITLE){if(task.start>prepareTiles.start){pendingEventQueue.push(task.mostTopLevelSlice);if(++numFinishedTasks===3)break;}}}
-while(pendingEventQueue.length!==0){const event=pendingEventQueue.pop();this.addEntireSliceHierarchy(event);this.followSubsequentSlices(event,pendingEventQueue,visited,flowEvents);}},addOtherCausallyRelatedEvents(rendererHelper,sourceSlices,flowEvents,sortedRasterizerSlices){const pendingEventQueue=[];const visitedEvents=new EventSet();let beginImplFrame=undefined;let prepareTiles=undefined;sortedRasterizerSlices=[];sourceSlices.forEach(function(sourceSlice){if(!visitedEvents.contains(sourceSlice)){visitedEvents.push(sourceSlice);pendingEventQueue.push(sourceSlice);}},this);while(pendingEventQueue.length!==0){const event=pendingEventQueue.pop();this.addEntireSliceHierarchy(event);this.followCurrentSlice(event,pendingEventQueue,visitedEvents);this.followSubsequentSlices(event,pendingEventQueue,visitedEvents,flowEvents);const COMPOSITOR_PREPARE_TILES='TileManager::PrepareTiles';prepareTiles=event.findDescendentSlice(COMPOSITOR_PREPARE_TILES);if(prepareTiles){this.addRasterizationEvents(prepareTiles,rendererHelper,visitedEvents,flowEvents,sortedRasterizerSlices);}
-const COMPOSITOR_ON_BIFD='Scheduler::OnBeginImplFrameDeadline';beginImplFrame=event.findDescendentSlice(COMPOSITOR_ON_BIFD);if(beginImplFrame){this.backtraceFromDraw(beginImplFrame,visitedEvents);}}
-const INPUT_GSU='InputLatency::GestureScrollUpdate';if(this.title===INPUT_GSU){this.addScrollUpdateEvents(rendererHelper);}},get associatedEvents(){if(this.associatedEvents_.length!==0){return this.associatedEvents_;}
-const modelIndices=this.startThread.parent.model.modelIndices;const flowEvents=modelIndices.getFlowEventsWithId(this.id);if(flowEvents.length===0){return this.associatedEvents_;}
-const sourceSlices=this.addDirectlyAssociatedEvents(flowEvents);const rendererHelper=this.getRendererHelper(sourceSlices);this.addOtherCausallyRelatedEvents(rendererHelper,sourceSlices,flowEvents);return this.associatedEvents_;},get inputLatency(){if(!('data'in this.args))return undefined;const data=this.args.data;if(!(END_COMP_NAME in data))return undefined;let latency=0;const endTime=data[END_COMP_NAME].time;if(ORIGINAL_COMP_NAME in data){latency=endTime-data[ORIGINAL_COMP_NAME].time;}else if(UI_COMP_NAME in data){latency=endTime-data[UI_COMP_NAME].time;}else if(BEGIN_COMP_NAME in data){latency=endTime-data[BEGIN_COMP_NAME].time;}else{throw new Error('No valid begin latency component');}
-return latency;}};const eventTypeNames=['Char','ContextMenu','GestureClick','GestureFlingCancel','GestureFlingStart','GestureScrollBegin','GestureScrollEnd','GestureScrollUpdate','GestureShowPress','GestureTap','GestureTapCancel','GestureTapDown','GesturePinchBegin','GesturePinchEnd','GesturePinchUpdate','KeyDown','KeyUp','MouseDown','MouseEnter','MouseLeave','MouseMove','MouseUp','MouseWheel','RawKeyDown','ScrollUpdate','TouchCancel','TouchEnd','TouchMove','TouchStart'];const allTypeNames=['InputLatency'];eventTypeNames.forEach(function(eventTypeName){allTypeNames.push('InputLatency:'+eventTypeName);allTypeNames.push('InputLatency::'+eventTypeName);});AsyncSlice.subTypes.register(InputLatencyAsyncSlice,{typeNames:allTypeNames,categoryParts:['latencyInfo']});return{InputLatencyAsyncSlice,INPUT_EVENT_TYPE_NAMES,};});'use strict';tr.exportTo('tr.b',function(){function SinebowColorGenerator(opt_a,opt_brightness){this.a_=(opt_a===undefined)?1:opt_a;this.brightness_=(opt_brightness===undefined)?1:opt_brightness;this.colorIndex_=0;this.keyToColor={};}
-SinebowColorGenerator.prototype={colorForKey(key){if(!this.keyToColor[key]){this.keyToColor[key]=this.nextColor();}
-return this.keyToColor[key];},nextColor(){const components=SinebowColorGenerator.nthColor(this.colorIndex_++);return tr.b.Color.fromString(SinebowColorGenerator.calculateColor(components[0],components[1],components[2],this.a_,this.brightness_));}};SinebowColorGenerator.PHI=(1+Math.sqrt(5))/2;SinebowColorGenerator.sinebow_=function(h){h+=0.5;h=-h;let r=Math.sin(Math.PI*h);let g=Math.sin(Math.PI*(h+1/3));let b=Math.sin(Math.PI*(h+2/3));r*=r;g*=g;b*=b;const y=2*(0.2989*r+0.5870*g+0.1140*b);r/=y;g/=y;b/=y;return[256*r,256*g,256*b];};SinebowColorGenerator.nthColor=function(n){return SinebowColorGenerator.sinebow_(n*this.PHI);};SinebowColorGenerator.calculateColor=function(r,g,b,a,brightness){if(brightness<=1){r*=brightness;g*=brightness;b*=brightness;}else{r=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),r,255);g=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),g,255);b=tr.b.math.lerp(tr.b.math.normalize(brightness,1,2),b,255);}
-r=Math.round(r);g=Math.round(g);b=Math.round(b);return'rgba('+r+','+g+','+b+', '+a+')';};return{SinebowColorGenerator,};});'use strict';tr.exportTo('tr.e.chrome',function(){const SAME_AS_PARENT='same-as-parent';const TITLES_FOR_USER_FRIENDLY_CATEGORY={composite:['CompositingInputsUpdater::update','ThreadProxy::SetNeedsUpdateLayers','LayerTreeHost::UpdateLayers::CalcDrawProps','UpdateLayerTree',],gc:['minorGC','majorGC','MajorGC','MinorGC','V8.GCScavenger','V8.GCIncrementalMarking','V8.GCIdleNotification','V8.GCContext','V8.GCCompactor','V8GCController::traceDOMWrappers',],iframe_creation:['WebLocalFrameImpl::createChildframe',],imageDecode:['Decode Image','ImageFrameGenerator::decode','ImageFrameGenerator::decodeAndScale','ImageResourceContent::updateImage',],input:['HitTest','ScrollableArea::scrollPositionChanged','EventHandler::handleMouseMoveEvent',],layout:['DisplayItemList::Finalize','IntersectionObserverController::computeTrackedIntersectionObservations','LocalFrameView::invalidateTree','LocalFrameView::layout','LocalFrameView::performLayout','LocalFrameView::performPostLayoutTasks','LocalFrameView::performPreLayoutTasks','FrameView::invalidateTree','FrameView::layout','FrameView::performLayout','FrameView::performPostLayoutTasks','FrameView::performPreLayoutTasks','Layer::updateLayerPositionsAfterLayout','LayerTreeHostInProcess::UpdateLayers::BuildPropertyTrees','Layout','LayoutView::hitTest','PaintLayer::updateLayerPositionsAfterLayout','ResourceLoadPriorityOptimizer::updateAllImageResourcePriorities','WebViewImpl::layout',],parseHTML:['BackgroundHTMLParser::pumpTokenizer','BackgroundHTMLParser::sendTokensToMainThread','HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser','HTMLDocumentParser::documentElementAvailable','HTMLDocumentParser::notifyPendingTokenizedChunks','HTMLDocumentParser::processParsedChunkFromBackgroundParser','HTMLDocumentParser::processTokenizedChunkFromBackgroundParser','ParseHTML',],raster:['DisplayListRasterSource::PerformSolidColorAnalysis','Picture::Raster','RasterBufferImpl::Playback','RasterTask','RasterizerTaskImpl::RunOnWorkerThread','SkCanvas::drawImageRect()','SkCanvas::drawPicture()','SkCanvas::drawTextBlob()','TileTaskWorkerPool::PlaybackToMemory',],record:['Canvas2DLayerBridge::flushRecordingOnly','CompositingRequirementsUpdater::updateRecursive','ContentLayerDelegate::paintContents','DeprecatedPaintLayerCompositor::updateIfNeededRecursive','DeprecatedPaintLayerCompositor::updateLayerPositionsAfterLayout','LocalFrameView::paintTree','LocalFrameView::prePaint','Paint','PaintController::commitNewDisplayItems','PaintLayerCompositor::updateIfNeededRecursive','Picture::Record','PictureLayer::Update','RenderLayer::updateLayerPositionsAfterLayout',],style:['CSSParserImpl::parseStyleSheet.parse','CSSParserImpl::parseStyleSheet.tokenize','Document::rebuildLayoutTree','Document::recalcStyle','Document::updateActiveStyle','Document::updateStyle','Document::updateStyleInvalidationIfNeeded','LocalFrameView::updateStyleAndLayoutIfNeededRecursive','ParseAuthorStyleSheet','RuleSet::addRulesFromSheet','StyleElement::processStyleSheet','StyleEngine::createResolver','StyleEngine::updateActiveStyleSheets','StyleSheetContents::parseAuthorStyleSheet','UpdateLayoutTree',],script_parse_and_compile:['V8.CompileFullCode','V8.NewContext','V8.Parse','V8.ParseLazy','V8.RecompileSynchronous','V8.ScriptCompiler','v8.compile','v8.parseOnBackground',],script_execute:['EvaluateScript','FunctionCall','HTMLParserScriptRunner ExecuteScript','V8.Execute','V8.RunMicrotasks','V8.Task','WindowProxy::initialize','v8.callFunction','v8.run',],resource_loading:['RenderFrameImpl::didFinishDocumentLoad','RenderFrameImpl::didFinishLoad','Resource::appendData','ResourceDispatcher::OnReceivedData','ResourceDispatcher::OnReceivedResponse','ResourceDispatcher::OnRequestComplete','ResourceFetcher::requestResource','WebURLLoaderImpl::Context::Cancel','WebURLLoaderImpl::Context::OnCompletedRequest','WebURLLoaderImpl::Context::OnReceivedData','WebURLLoaderImpl::Context::OnReceivedRedirect','WebURLLoaderImpl::Context::OnReceivedResponse','WebURLLoaderImpl::Context::Start','WebURLLoaderImpl::loadAsynchronously','WebURLLoaderImpl::loadSynchronously','content::mojom::URLLoaderClient',],renderer_misc:['DecodeFont','ThreadState::completeSweep',],v8_runtime:[],[SAME_AS_PARENT]:['SyncChannel::Send',]};const COLOR_FOR_USER_FRIENDLY_CATEGORY=new tr.b.SinebowColorGenerator();const USER_FRIENDLY_CATEGORY_FOR_TITLE=new Map();for(const category in TITLES_FOR_USER_FRIENDLY_CATEGORY){TITLES_FOR_USER_FRIENDLY_CATEGORY[category].forEach(function(title){USER_FRIENDLY_CATEGORY_FOR_TITLE.set(title,category);});}
-const USER_FRIENDLY_CATEGORY_FOR_EVENT_CATEGORY={netlog:'net',overhead:'overhead',startup:'startup',gpu:'gpu',};function ChromeUserFriendlyCategoryDriver(){}
-ChromeUserFriendlyCategoryDriver.fromEvent=function(event){let userFriendlyCategory=USER_FRIENDLY_CATEGORY_FOR_TITLE.get(event.title);if(userFriendlyCategory){if(userFriendlyCategory===SAME_AS_PARENT){if(event.parentSlice){return ChromeUserFriendlyCategoryDriver.fromEvent(event.parentSlice);}}else{return userFriendlyCategory;}}
-const eventCategoryParts=tr.b.getCategoryParts(event.category);for(let i=0;i<eventCategoryParts.length;++i){const eventCategory=eventCategoryParts[i];userFriendlyCategory=USER_FRIENDLY_CATEGORY_FOR_EVENT_CATEGORY[eventCategory];if(userFriendlyCategory){return userFriendlyCategory;}}
-return'other';};ChromeUserFriendlyCategoryDriver.getColor=function(ufc){return COLOR_FOR_USER_FRIENDLY_CATEGORY.colorForKey(ufc);};ChromeUserFriendlyCategoryDriver.ALL_TITLES=['other'];for(const category in TITLES_FOR_USER_FRIENDLY_CATEGORY){if(category===SAME_AS_PARENT)continue;ChromeUserFriendlyCategoryDriver.ALL_TITLES.push(category);}
-for(const category of Object.values(USER_FRIENDLY_CATEGORY_FOR_EVENT_CATEGORY)){ChromeUserFriendlyCategoryDriver.ALL_TITLES.push(category);}
-ChromeUserFriendlyCategoryDriver.ALL_TITLES.sort();for(const category of ChromeUserFriendlyCategoryDriver.ALL_TITLES){ChromeUserFriendlyCategoryDriver.getColor(category);}
-return{ChromeUserFriendlyCategoryDriver,};});'use strict';tr.exportTo('tr.model',function(){return{BROWSER_PROCESS_PID_REF:-1,OBJECT_DEFAULT_SCOPE:'ptr',LOCAL_ID_PHASES:new Set(['N','D','O','(',')'])};});'use strict';tr.exportTo('tr.e.audits',function(){const Auditor=tr.c.Auditor;function ChromeAuditor(model){Auditor.call(this,model);const modelHelper=this.model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper&&modelHelper.browserHelper){this.modelHelper=modelHelper;}else{this.modelHelper=undefined;}}
-ChromeAuditor.prototype={__proto__:Auditor.prototype,runAnnotate(){if(!this.modelHelper)return;for(const pid in this.modelHelper.rendererHelpers){const rendererHelper=this.modelHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI){rendererHelper.process.important=false;}}},installUserFriendlyCategoryDriverIfNeeded(){this.model.addUserFriendlyCategoryDriver(tr.e.chrome.ChromeUserFriendlyCategoryDriver);},runAudit(){if(!this.modelHelper)return;this.model.replacePIDRefsInPatchups(tr.model.BROWSER_PROCESS_PID_REF,this.modelHelper.browserProcess.pid);this.model.applyObjectRefPatchups();}};Auditor.register(ChromeAuditor);return{ChromeAuditor,};});'use strict';tr.exportTo('tr.e.chrome',function(){const KNOWN_PROPERTIES={absX:1,absY:1,address:1,anonymous:1,childNeeds:1,children:1,classNames:1,col:1,colSpan:1,float:1,height:1,htmlId:1,name:1,posChildNeeds:1,positioned:1,positionedMovement:1,relX:1,relY:1,relativePositioned:1,row:1,rowSpan:1,selfNeeds:1,stickyPositioned:1,tag:1,width:1};function LayoutObject(snapshot,args){this.snapshot_=snapshot;this.id_=args.address;this.name_=args.name;this.childLayoutObjects_=[];this.otherProperties_={};this.tag_=args.tag;this.relativeRect_=tr.b.math.Rect.fromXYWH(args.relX,args.relY,args.width,args.height);this.absoluteRect_=tr.b.math.Rect.fromXYWH(args.absX,args.absY,args.width,args.height);this.isFloat_=args.float;this.isStickyPositioned_=args.stickyPositioned;this.isPositioned_=args.positioned;this.isRelativePositioned_=args.relativePositioned;this.isAnonymous_=args.anonymous;this.htmlId_=args.htmlId;this.classNames_=args.classNames;this.needsLayoutReasons_=[];if(args.selfNeeds){this.needsLayoutReasons_.push('self');}
-if(args.childNeeds){this.needsLayoutReasons_.push('child');}
-if(args.posChildNeeds){this.needsLayoutReasons_.push('positionedChild');}
-if(args.positionedMovement){this.needsLayoutReasons_.push('positionedMovement');}
-this.tableRow_=args.row;this.tableCol_=args.col;this.tableRowSpan_=args.rowSpan;this.tableColSpan_=args.colSpan;if(args.children){args.children.forEach(function(child){this.childLayoutObjects_.push(new LayoutObject(snapshot,child));}.bind(this));}
-for(const property in args){if(!KNOWN_PROPERTIES[property]){this.otherProperties_[property]=args[property];}}}
-LayoutObject.prototype={get snapshot(){return this.snapshot_;},get id(){return this.id_;},get name(){return this.name_;},get tag(){return this.tag_;},get relativeRect(){return this.relativeRect_;},get absoluteRect(){return this.absoluteRect_;},get isPositioned(){return this.isPositioned_;},get isFloat(){return this.isFloat_;},get isStickyPositioned(){return this.isStickyPositioned_;},get isRelativePositioned(){return this.isRelativePositioned_;},get isAnonymous(){return this.isAnonymous_;},get tableRow(){return this.tableRow_;},get tableCol(){return this.tableCol_;},get tableRowSpan(){return this.tableRowSpan_;},get tableColSpan(){return this.tableColSpan_;},get htmlId(){return this.htmlId_;},get classNames(){return this.classNames_;},get needsLayoutReasons(){return this.needsLayoutReasons_;},get hasChildLayoutObjects(){return this.childLayoutObjects_.length>0;},get childLayoutObjects(){return this.childLayoutObjects_;},traverseTree(cb,opt_this){cb.call(opt_this,this);if(!this.hasChildLayoutObjects)return;this.childLayoutObjects.forEach(function(child){child.traverseTree(cb,opt_this);});},get otherPropertyNames(){const names=[];for(const name in this.otherProperties_){names.push(name);}
-return names;},getProperty(name){return this.otherProperties_[name];},get previousSnapshotLayoutObject(){if(!this.snapshot.previousSnapshot)return undefined;return this.snapshot.previousSnapshot.getLayoutObjectById(this.id);},get nextSnapshotLayoutObject(){if(!this.snapshot.nextSnapshot)return undefined;return this.snapshot.nextSnapshot.getLayoutObjectById(this.id);}};return{LayoutObject,};});'use strict';tr.exportTo('tr.e.chrome',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;const ObjectInstance=tr.model.ObjectInstance;function LayoutTreeInstance(){ObjectInstance.apply(this,arguments);}
-LayoutTreeInstance.prototype={__proto__:ObjectInstance.prototype,};ObjectInstance.subTypes.register(LayoutTreeInstance,{typeName:'LayoutTree'});function LayoutTreeSnapshot(){ObjectSnapshot.apply(this,arguments);this.rootLayoutObject=new tr.e.chrome.LayoutObject(this,this.args);}
-LayoutTreeSnapshot.prototype={__proto__:ObjectSnapshot.prototype,};ObjectSnapshot.subTypes.register(LayoutTreeSnapshot,{typeName:'LayoutTree'});return{LayoutTreeInstance,LayoutTreeSnapshot,};});'use strict';tr.exportTo('tr.model',function(){function EventContainer(){this.guid_=tr.b.GUID.allocateSimple();this.important=true;this.bounds_=new tr.b.math.Range();}
-EventContainer.prototype={get guid(){return this.guid_;},get stableId(){throw new Error('Not implemented');},get bounds(){return this.bounds_;},updateBounds(){throw new Error('Not implemented');},shiftTimestampsForward(amount){throw new Error('Not implemented');},*childEvents(){},*getDescendantEvents(){yield*this.childEvents();for(const container of this.childEventContainers()){yield*container.getDescendantEvents();}},*childEventContainers(){},*getDescendantEventContainers(){yield this;for(const container of this.childEventContainers()){yield*container.getDescendantEventContainers();}},*findTopmostSlicesInThisContainer(eventPredicate,opt_this){},*findTopmostSlices(eventPredicate){for(const ec of this.getDescendantEventContainers()){yield*ec.findTopmostSlicesInThisContainer(eventPredicate);}},*findTopmostSlicesNamed(name){yield*this.findTopmostSlices(e=>e.title===name);}};return{EventContainer,};});'use strict';tr.exportTo('tr.model',function(){const Event=tr.model.Event;const EventRegistry=tr.model.EventRegistry;class ResourceUsageSample extends Event{constructor(series,start,usage){super();this.series_=series;this.start_=start;this.usage_=usage;}
-get series(){return this.series_;}
-get start(){return this.start_;}
-set start(value){this.start_=value;}
-get usage(){return this.usage_;}
-set usage(value){this.usage_=value;}
-addBoundsToRange(range){range.addValue(this.start);}}
-EventRegistry.register(ResourceUsageSample,{name:'resourceUsageSample',pluralName:'resourceUsageSamples'});return{ResourceUsageSample,};});'use strict';tr.exportTo('tr.model',function(){const ResourceUsageSample=tr.model.ResourceUsageSample;class ResourceUsageSeries extends tr.model.EventContainer{constructor(device){super();this.device_=device;this.samples_=[];}
-get device(){return this.device_;}
-get samples(){return this.samples_;}
-get stableId(){return this.device_.stableId+'.ResourceUsageSeries';}
-addUsageSample(ts,val){const sample=new ResourceUsageSample(this,ts,val);this.samples_.push(sample);return sample;}
-computeResourceTimeConsumedInMs(start,end){const measurementRange=tr.b.math.Range.fromExplicitRange(start,end);let resourceTimeInMs=0;let startIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,start)-1;const endIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,end);if(startIndex<0)startIndex=0;for(let i=startIndex;i<endIndex;i++){const sample=this.samples[i];const nextSample=this.samples[i+1];const sampleRange=new tr.b.math.Range();sampleRange.addValue(sample.start);sampleRange.addValue(nextSample?nextSample.start:sample.start);const intersectionRangeInMs=measurementRange.findIntersection(sampleRange);resourceTimeInMs+=intersectionRangeInMs.duration*sample.usage;}
-return resourceTimeInMs;}
-getSamplesWithinRange(start,end){const startIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,start);const endIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,end);return this.samples.slice(startIndex,endIndex);}
-shiftTimestampsForward(amount){for(let i=0;i<this.samples_.length;++i){this.samples_[i].start+=amount;}}
-updateBounds(){this.bounds.reset();if(this.samples_.length===0)return;this.bounds.addValue(this.samples_[0].start);this.bounds.addValue(this.samples_[this.samples_.length-1].start);}*childEvents(){yield*this.samples_;}}
-return{ResourceUsageSeries,};});'use strict';tr.exportTo('tr.e.audits',function(){class CpuUsageAuditor extends tr.c.Auditor{constructor(model){super();this.model_=model;}
-runAnnotate(){this.model_.device.cpuUsageSeries=this.computeCpuUsageSeries_(this.model_.bounds.min,this.model_.bounds.max,this.computeCpuUsage_());}
-computeBinSize_(start,end){const MIN_BIN_SIZE_MS=1.0;const MAX_NUM_BINS=100000;const interval=end-start;let binSize=MIN_BIN_SIZE_MS;while(binSize*MAX_NUM_BINS<interval)binSize*=2;return binSize;}
-computeCpuUsageSeries_(start,end,usageRecords){const series=new tr.model.ResourceUsageSeries();if(start===undefined||usageRecords.length===0)return series;const binSize=this.computeBinSize_(start,end);const numBins=Math.ceil((end-start)/binSize);const arr=new Array(numBins).fill(0);for(const record of usageRecords){const firstIndex=Math.ceil((record.start-start)/binSize);const lastIndex=Math.floor((record.end-start)/binSize);for(let i=firstIndex;i<=lastIndex;i++)arr[i]+=record.usage;}
-for(let i=0;i<numBins;i++){series.addUsageSample(start+(i*binSize),arr[i]);}
-return series;}
-computeCpuUsage_(){const model=this.model_;const result=[];for(const pid in model.processes){for(const e of model.processes[pid].getDescendantEvents()){if(!(e instanceof tr.model.ThreadSlice)||e.duration===0||e.cpuDuration===undefined){continue;}
-if(e.selfTime===0||e.selfTime===undefined||e.cpuSelfTime===undefined){continue;}
-const usage=tr.b.math.clamp(e.cpuSelfTime/e.selfTime,0,1);let lastTime=e.start;for(const subslice of e.subSlices){result.push({usage,start:lastTime,end:subslice.start});lastTime=subslice.end;}
-result.push({usage,start:lastTime,end:e.end});}}
-return result;}}
-tr.c.Auditor.register(CpuUsageAuditor);return{CpuUsageAuditor};});'use strict';tr.exportTo('tr.b',function(){function Base64(){}
-function b64ToUint6(nChr){if(nChr>64&&nChr<91)return nChr-65;if(nChr>96&&nChr<123)return nChr-71;if(nChr>47&&nChr<58)return nChr+4;if(nChr===43)return 62;if(nChr===47)return 63;return 0;}
-Base64.getDecodedBufferLength=function(input){let pad=0;if(input.substr(-2)==='=='){pad=2;}else if(input.substr(-1)==='='){pad=1;}
-return((input.length*3+1)>>2)-pad;};Base64.EncodeArrayBufferToString=function(input){let binary='';const bytes=new Uint8Array(input);const len=bytes.byteLength;for(let i=0;i<len;i++){binary+=String.fromCharCode(bytes[i]);}
-return btoa(binary);};Base64.DecodeToTypedArray=function(input,output){const nInLen=input.length;const nOutLen=Base64.getDecodedBufferLength(input);let nMod3=0;let nMod4=0;let nUint24=0;let nOutIdx=0;if(nOutLen>output.byteLength){throw new Error('Output buffer too small to decode.');}
-for(let nInIdx=0;nInIdx<nInLen;nInIdx++){nMod4=nInIdx&3;nUint24|=b64ToUint6(input.charCodeAt(nInIdx))<<18-6*nMod4;if(nMod4===3||nInLen-nInIdx===1){for(nMod3=0;nMod3<3&&nOutIdx<nOutLen;nMod3++,nOutIdx++){output.setUint8(nOutIdx,nUint24>>>(16>>>nMod3&24)&255);}
-nUint24=0;}}
-return nOutLen;};Base64.btoa=function(input){return btoa(input);};Base64.atob=function(input){return atob(input);};return{Base64,};});'use strict';tr.exportTo('tr.e.importer.etw',function(){function Parser(importer){this.importer=importer;this.model=importer.model;}
-Parser.prototype={__proto__:Object.prototype};const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.mandatoryBaseClass=Parser;tr.b.decorateExtensionRegistry(Parser,options);return{Parser,};});'use strict';tr.exportTo('tr.e.importer.etw',function(){const Parser=tr.e.importer.etw.Parser;const guid='68FDD900-4A3E-11D1-84F4-0000F80464E3';const kEventTraceHeaderOpcode=0;function EventTraceParser(importer){Parser.call(this,importer);importer.registerEventHandler(guid,kEventTraceHeaderOpcode,EventTraceParser.prototype.decodeHeader.bind(this));}
-EventTraceParser.prototype={__proto__:Parser.prototype,decodeFields(header,decoder){if(header.version!==2){throw new Error('Incompatible EventTrace event version.');}
-const bufferSize=decoder.decodeUInt32();const version=decoder.decodeUInt32();const providerVersion=decoder.decodeUInt32();const numberOfProcessors=decoder.decodeUInt32();const endTime=decoder.decodeUInt64ToString();const timerResolution=decoder.decodeUInt32();const maxFileSize=decoder.decodeUInt32();const logFileMode=decoder.decodeUInt32();const buffersWritten=decoder.decodeUInt32();const startBuffers=decoder.decodeUInt32();const pointerSize=decoder.decodeUInt32();const eventsLost=decoder.decodeUInt32();const cpuSpeed=decoder.decodeUInt32();const loggerName=decoder.decodeUInteger(header.is64);const logFileName=decoder.decodeUInteger(header.is64);const timeZoneInformation=decoder.decodeTimeZoneInformation();const padding=decoder.decodeUInt32();const bootTime=decoder.decodeUInt64ToString();const perfFreq=decoder.decodeUInt64ToString();const startTime=decoder.decodeUInt64ToString();const reservedFlags=decoder.decodeUInt32();const buffersLost=decoder.decodeUInt32();const sessionNameString=decoder.decodeW16String();const logFileNameString=decoder.decodeW16String();return{bufferSize,version,providerVersion,numberOfProcessors,endTime,timerResolution,maxFileSize,logFileMode,buffersWritten,startBuffers,pointerSize,eventsLost,cpuSpeed,loggerName,logFileName,timeZoneInformation,bootTime,perfFreq,startTime,reservedFlags,buffersLost,sessionNameString,logFileNameString};},decodeHeader(header,decoder){const fields=this.decodeFields(header,decoder);return true;}};Parser.register(EventTraceParser);return{EventTraceParser,};});'use strict';tr.exportTo('tr.e.importer.etw',function(){const Parser=tr.e.importer.etw.Parser;const guid='3D6FA8D0-FE05-11D0-9DDA-00C04FD7BA7C';const kProcessStartOpcode=1;const kProcessEndOpcode=2;const kProcessDCStartOpcode=3;const kProcessDCEndOpcode=4;const kProcessDefunctOpcode=39;function ProcessParser(importer){Parser.call(this,importer);importer.registerEventHandler(guid,kProcessStartOpcode,ProcessParser.prototype.decodeStart.bind(this));importer.registerEventHandler(guid,kProcessEndOpcode,ProcessParser.prototype.decodeEnd.bind(this));importer.registerEventHandler(guid,kProcessDCStartOpcode,ProcessParser.prototype.decodeDCStart.bind(this));importer.registerEventHandler(guid,kProcessDCEndOpcode,ProcessParser.prototype.decodeDCEnd.bind(this));importer.registerEventHandler(guid,kProcessDefunctOpcode,ProcessParser.prototype.decodeDefunct.bind(this));}
-ProcessParser.prototype={__proto__:Parser.prototype,decodeFields(header,decoder){if(header.version>5){throw new Error('Incompatible Process event version.');}
-let pageDirectoryBase;if(header.version===1){pageDirectoryBase=decoder.decodeUInteger(header.is64);}
-let uniqueProcessKey;if(header.version>=2){uniqueProcessKey=decoder.decodeUInteger(header.is64);}
-const processId=decoder.decodeUInt32();const parentId=decoder.decodeUInt32();let sessionId;let exitStatus;if(header.version>=1){sessionId=decoder.decodeUInt32();exitStatus=decoder.decodeInt32();}
-let directoryTableBase;if(header.version>=3){directoryTableBase=decoder.decodeUInteger(header.is64);}
-let flags;if(header.version>=4){flags=decoder.decodeUInt32();}
-const userSID=decoder.decodeSID(header.is64);let imageFileName;if(header.version>=1){imageFileName=decoder.decodeString();}
-let commandLine;if(header.version>=2){commandLine=decoder.decodeW16String();}
-let packageFullName;let applicationId;if(header.version>=4){packageFullName=decoder.decodeW16String();applicationId=decoder.decodeW16String();}
-let exitTime;if(header.version===5&&header.opcode===kProcessDefunctOpcode){exitTime=decoder.decodeUInt64ToString();}
-return{pageDirectoryBase,uniqueProcessKey,processId,parentId,sessionId,exitStatus,directoryTableBase,flags,userSID,imageFileName,commandLine,packageFullName,applicationId,exitTime};},decodeStart(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);if(process.hasOwnProperty('has_ended')){throw new Error('Process clash detected.');}
-process.name=fields.imageFileName;return true;},decodeEnd(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);process.has_ended=true;return true;},decodeDCStart(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);if(process.hasOwnProperty('has_ended')){throw new Error('Process clash detected.');}
-process.name=fields.imageFileName;return true;},decodeDCEnd(header,decoder){const fields=this.decodeFields(header,decoder);const process=this.model.getOrCreateProcess(fields.processId);process.has_ended=true;return true;},decodeDefunct(header,decoder){const fields=this.decodeFields(header,decoder);return true;}};Parser.register(ProcessParser);return{ProcessParser,};});'use strict';tr.exportTo('tr.e.importer.etw',function(){const Parser=tr.e.importer.etw.Parser;const guid='3D6FA8D1-FE05-11D0-9DDA-00C04FD7BA7C';const kThreadStartOpcode=1;const kThreadEndOpcode=2;const kThreadDCStartOpcode=3;const kThreadDCEndOpcode=4;const kThreadCSwitchOpcode=36;function ThreadParser(importer){Parser.call(this,importer);importer.registerEventHandler(guid,kThreadStartOpcode,ThreadParser.prototype.decodeStart.bind(this));importer.registerEventHandler(guid,kThreadEndOpcode,ThreadParser.prototype.decodeEnd.bind(this));importer.registerEventHandler(guid,kThreadDCStartOpcode,ThreadParser.prototype.decodeDCStart.bind(this));importer.registerEventHandler(guid,kThreadDCEndOpcode,ThreadParser.prototype.decodeDCEnd.bind(this));importer.registerEventHandler(guid,kThreadCSwitchOpcode,ThreadParser.prototype.decodeCSwitch.bind(this));}
-ThreadParser.prototype={__proto__:Parser.prototype,decodeFields(header,decoder){if(header.version>3){throw new Error('Incompatible Thread event version.');}
-const processId=decoder.decodeUInt32();const threadId=decoder.decodeUInt32();let stackBase;let stackLimit;let userStackBase;let userStackLimit;let affinity;let startAddr;let win32StartAddr;let tebBase;let subProcessTag;let basePriority;let pagePriority;let ioPriority;let threadFlags;let waitMode;if(header.version===1){if(header.opcode===kThreadStartOpcode||header.opcode===kThreadDCStartOpcode){stackBase=decoder.decodeUInteger(header.is64);stackLimit=decoder.decodeUInteger(header.is64);userStackBase=decoder.decodeUInteger(header.is64);userStackLimit=decoder.decodeUInteger(header.is64);startAddr=decoder.decodeUInteger(header.is64);win32StartAddr=decoder.decodeUInteger(header.is64);waitMode=decoder.decodeInt8();decoder.skip(3);}}else{stackBase=decoder.decodeUInteger(header.is64);stackLimit=decoder.decodeUInteger(header.is64);userStackBase=decoder.decodeUInteger(header.is64);userStackLimit=decoder.decodeUInteger(header.is64);if(header.version===2){startAddr=decoder.decodeUInteger(header.is64);}else{affinity=decoder.decodeUInteger(header.is64);}
-win32StartAddr=decoder.decodeUInteger(header.is64);tebBase=decoder.decodeUInteger(header.is64);subProcessTag=decoder.decodeUInt32();if(header.version===3){basePriority=decoder.decodeUInt8();pagePriority=decoder.decodeUInt8();ioPriority=decoder.decodeUInt8();threadFlags=decoder.decodeUInt8();}}
-return{processId,threadId,stackBase,stackLimit,userStackBase,userStackLimit,affinity,startAddr,win32StartAddr,tebBase,subProcessTag,waitMode,basePriority,pagePriority,ioPriority,threadFlags};},decodeCSwitchFields(header,decoder){if(header.version!==2){throw new Error('Incompatible Thread event version.');}
-const newThreadId=decoder.decodeUInt32();const oldThreadId=decoder.decodeUInt32();const newThreadPriority=decoder.decodeInt8();const oldThreadPriority=decoder.decodeInt8();const previousCState=decoder.decodeUInt8();const spareByte=decoder.decodeInt8();const oldThreadWaitReason=decoder.decodeInt8();const oldThreadWaitMode=decoder.decodeInt8();const oldThreadState=decoder.decodeInt8();const oldThreadWaitIdealProcessor=decoder.decodeInt8();const newThreadWaitTime=decoder.decodeUInt32();const reserved=decoder.decodeUInt32();return{newThreadId,oldThreadId,newThreadPriority,oldThreadPriority,previousCState,spareByte,oldThreadWaitReason,oldThreadWaitMode,oldThreadState,oldThreadWaitIdealProcessor,newThreadWaitTime,reserved};},decodeStart(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.createThreadIfNeeded(fields.processId,fields.threadId);return true;},decodeEnd(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.removeThreadIfPresent(fields.threadId);return true;},decodeDCStart(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.createThreadIfNeeded(fields.processId,fields.threadId);return true;},decodeDCEnd(header,decoder){const fields=this.decodeFields(header,decoder);this.importer.removeThreadIfPresent(fields.threadId);return true;},decodeCSwitch(header,decoder){const fields=this.decodeCSwitchFields(header,decoder);const cpu=this.importer.getOrCreateCpu(header.cpu);const newThread=this.importer.getThreadFromWindowsTid(fields.newThreadId);let newThreadName;if(newThread&&newThread.userFriendlyName){newThreadName=newThread.userFriendlyName;}else{const newProcessId=this.importer.getPidFromWindowsTid(fields.newThreadId);const newProcess=this.model.getProcess(newProcessId);let newProcessName;if(newProcess){newProcessName=newProcess.name;}else{newProcessName='Unknown process';}
-newThreadName=newProcessName+' (tid '+fields.newThreadId+')';}
-cpu.switchActiveThread(header.timestamp,{},fields.newThreadId,newThreadName,fields);return true;}};Parser.register(ThreadParser);return{ThreadParser,};});'use strict';tr.exportTo('tr.b',function(){function max(a,b){if(a===undefined)return b;if(b===undefined)return a;return Math.max(a,b);}
-function IntervalTree(beginPositionCb,endPositionCb){this.beginPositionCb_=beginPositionCb;this.endPositionCb_=endPositionCb;this.root_=undefined;this.size_=0;}
-IntervalTree.prototype={insert(datum){const startPosition=this.beginPositionCb_(datum);const endPosition=this.endPositionCb_(datum);const node=new IntervalTreeNode(datum,startPosition,endPosition);this.size_++;this.root_=this.insertNode_(this.root_,node);this.root_.colour=Colour.BLACK;return datum;},insertNode_(root,node){if(root===undefined)return node;if(root.leftNode&&root.leftNode.isRed&&root.rightNode&&root.rightNode.isRed){this.flipNodeColour_(root);}
-if(node.key<root.key){root.leftNode=this.insertNode_(root.leftNode,node);}else if(node.key===root.key){root.merge(node);}else{root.rightNode=this.insertNode_(root.rightNode,node);}
-if(root.rightNode&&root.rightNode.isRed&&(root.leftNode===undefined||!root.leftNode.isRed)){root=this.rotateLeft_(root);}
-if(root.leftNode&&root.leftNode.isRed&&root.leftNode.leftNode&&root.leftNode.leftNode.isRed){root=this.rotateRight_(root);}
-return root;},rotateRight_(node){const sibling=node.leftNode;node.leftNode=sibling.rightNode;sibling.rightNode=node;sibling.colour=node.colour;node.colour=Colour.RED;return sibling;},rotateLeft_(node){const sibling=node.rightNode;node.rightNode=sibling.leftNode;sibling.leftNode=node;sibling.colour=node.colour;node.colour=Colour.RED;return sibling;},flipNodeColour_(node){node.colour=this.flipColour_(node.colour);node.leftNode.colour=this.flipColour_(node.leftNode.colour);node.rightNode.colour=this.flipColour_(node.rightNode.colour);},flipColour_(colour){return colour===Colour.RED?Colour.BLACK:Colour.RED;},updateHighValues(){this.updateHighValues_(this.root_);},updateHighValues_(node){if(node===undefined)return undefined;node.maxHighLeft=this.updateHighValues_(node.leftNode);node.maxHighRight=this.updateHighValues_(node.rightNode);return max(max(node.maxHighLeft,node.highValue),node.maxHighRight);},validateFindArguments_(queryLow,queryHigh){if(queryLow===undefined||queryHigh===undefined){throw new Error('queryLow and queryHigh must be defined');}
-if((typeof queryLow!=='number')||(typeof queryHigh!=='number')){throw new Error('queryLow and queryHigh must be numbers');}},findIntersection(queryLow,queryHigh){this.validateFindArguments_(queryLow,queryHigh);if(this.root_===undefined)return[];const ret=[];this.root_.appendIntersectionsInto_(ret,queryLow,queryHigh);return ret;},get size(){return this.size_;},get root(){return this.root_;},dump_(){if(this.root_===undefined)return[];return this.root_.dump();}};const Colour={RED:'red',BLACK:'black'};function IntervalTreeNode(datum,lowValue,highValue){this.lowValue_=lowValue;this.data_=[{datum,high:highValue,low:lowValue}];this.colour_=Colour.RED;this.parentNode_=undefined;this.leftNode_=undefined;this.rightNode_=undefined;this.maxHighLeft_=undefined;this.maxHighRight_=undefined;}
-IntervalTreeNode.prototype={appendIntersectionsInto_(ret,queryLow,queryHigh){if(this.lowValue_>=queryHigh){if(!this.leftNode_)return;return this.leftNode_.appendIntersectionsInto_(ret,queryLow,queryHigh);}
-if(this.maxHighLeft_>queryLow){this.leftNode_.appendIntersectionsInto_(ret,queryLow,queryHigh);}
-if(this.highValue>queryLow){for(let i=(this.data.length-1);i>=0;--i){if(this.data[i].high<queryLow)break;ret.push(this.data[i].datum);}}
-if(this.rightNode_){this.rightNode_.appendIntersectionsInto_(ret,queryLow,queryHigh);}},get colour(){return this.colour_;},set colour(colour){this.colour_=colour;},get key(){return this.lowValue_;},get lowValue(){return this.lowValue_;},get highValue(){return this.data_[this.data_.length-1].high;},set leftNode(left){this.leftNode_=left;},get leftNode(){return this.leftNode_;},get hasLeftNode(){return this.leftNode_!==undefined;},set rightNode(right){this.rightNode_=right;},get rightNode(){return this.rightNode_;},get hasRightNode(){return this.rightNode_!==undefined;},set parentNode(parent){this.parentNode_=parent;},get parentNode(){return this.parentNode_;},get isRootNode(){return this.parentNode_===undefined;},set maxHighLeft(high){this.maxHighLeft_=high;},get maxHighLeft(){return this.maxHighLeft_;},set maxHighRight(high){this.maxHighRight_=high;},get maxHighRight(){return this.maxHighRight_;},get data(){return this.data_;},get isRed(){return this.colour_===Colour.RED;},merge(node){for(let i=0;i<node.data.length;i++){this.data_.push(node.data[i]);}
-this.data_.sort(function(a,b){return a.high-b.high;});},dump(){const ret={};if(this.leftNode_){ret.left=this.leftNode_.dump();}
-ret.data=this.data_.map(function(d){return[d.low,d.high];});if(this.rightNode_){ret.right=this.rightNode_.dump();}
-return ret;}};return{IntervalTree,};});'use strict';tr.exportTo('tr.b.math',function(){const tmpVec2s=[];for(let i=0;i<8;i++){tmpVec2s[i]=vec2.create();}
-const tmpVec2a=vec4.create();const tmpVec4a=vec4.create();const tmpVec4b=vec4.create();const tmpMat4=mat4.create();const tmpMat4b=mat4.create();const p00=vec2.createXY(0,0);const p10=vec2.createXY(1,0);const p01=vec2.createXY(0,1);const p11=vec2.createXY(1,1);const lerpingVecA=vec2.create();const lerpingVecB=vec2.create();function lerpVec2(out,a,b,amt){vec2.scale(lerpingVecA,a,amt);vec2.scale(lerpingVecB,b,1-amt);vec2.add(out,lerpingVecA,lerpingVecB);vec2.normalize(out,out);return out;}
-function Quad(){this.p1=vec2.create();this.p2=vec2.create();this.p3=vec2.create();this.p4=vec2.create();}
-Quad.fromXYWH=function(x,y,w,h){const q=new Quad();vec2.set(q.p1,x,y);vec2.set(q.p2,x+w,y);vec2.set(q.p3,x+w,y+h);vec2.set(q.p4,x,y+h);return q;};Quad.fromRect=function(r){return new Quad.fromXYWH(r.x,r.y,r.width,r.height);};Quad.from4Vecs=function(p1,p2,p3,p4){const q=new Quad();vec2.set(q.p1,p1[0],p1[1]);vec2.set(q.p2,p2[0],p2[1]);vec2.set(q.p3,p3[0],p3[1]);vec2.set(q.p4,p4[0],p4[1]);return q;};Quad.from8Array=function(arr){if(arr.length!==8){throw new Error('Array must be 8 long');}
-const q=new Quad();q.p1[0]=arr[0];q.p1[1]=arr[1];q.p2[0]=arr[2];q.p2[1]=arr[3];q.p3[0]=arr[4];q.p3[1]=arr[5];q.p4[0]=arr[6];q.p4[1]=arr[7];return q;};Quad.prototype={pointInside(point){return pointInImplicitQuad(point,this.p1,this.p2,this.p3,this.p4);},boundingRect(){const x0=Math.min(this.p1[0],this.p2[0],this.p3[0],this.p4[0]);const y0=Math.min(this.p1[1],this.p2[1],this.p3[1],this.p4[1]);const x1=Math.max(this.p1[0],this.p2[0],this.p3[0],this.p4[0]);const y1=Math.max(this.p1[1],this.p2[1],this.p3[1],this.p4[1]);return new tr.b.math.Rect.fromXYWH(x0,y0,x1-x0,y1-y0);},clone(){const q=new Quad();vec2.copy(q.p1,this.p1);vec2.copy(q.p2,this.p2);vec2.copy(q.p3,this.p3);vec2.copy(q.p4,this.p4);return q;},scale(s){const q=new Quad();this.scaleFast(q,s);return q;},scaleFast(dstQuad,s){vec2.copy(dstQuad.p1,this.p1,s);vec2.copy(dstQuad.p2,this.p2,s);vec2.copy(dstQuad.p3,this.p3,s);vec2.copy(dstQuad.p3,this.p3,s);},isRectangle(){const bounds=this.boundingRect();return(bounds.x===this.p1[0]&&bounds.y===this.p1[1]&&bounds.width===this.p2[0]-this.p1[0]&&bounds.y===this.p2[1]&&bounds.width===this.p3[0]-this.p1[0]&&bounds.height===this.p3[1]-this.p2[1]&&bounds.x===this.p4[0]&&bounds.height===this.p4[1]-this.p2[1]);},projectUnitRect(rect){const q=new Quad();this.projectUnitRectFast(q,rect);return q;},projectUnitRectFast(dstQuad,rect){const v12=tmpVec2s[0];const v14=tmpVec2s[1];const v23=tmpVec2s[2];const v43=tmpVec2s[3];vec2.sub(v12,this.p2,this.p1);const l12=vec2.length(v12);vec2.scale(v12,v12,1/l12);vec2.sub(v14,this.p4,this.p1);const l14=vec2.length(v14);vec2.scale(v14,v14,1/l14);vec2.sub(v23,this.p3,this.p2);const l23=vec2.length(v23);vec2.scale(v23,v23,1/l23);vec2.sub(v43,this.p3,this.p4);const l43=vec2.length(v43);vec2.scale(v43,v43,1/l43);const b12=tmpVec2s[0];const b14=tmpVec2s[1];const b23=tmpVec2s[2];const b43=tmpVec2s[3];lerpVec2(b12,v12,v43,rect.y);lerpVec2(b43,v12,v43,1-rect.bottom);lerpVec2(b14,v14,v23,rect.x);lerpVec2(b23,v14,v23,1-rect.right);vec2.addTwoScaledUnitVectors(tmpVec2a,b12,l12*rect.x,b14,l14*rect.y);vec2.add(dstQuad.p1,this.p1,tmpVec2a);vec2.addTwoScaledUnitVectors(tmpVec2a,b12,l12*-(1.0-rect.right),b23,l23*rect.y);vec2.add(dstQuad.p2,this.p2,tmpVec2a);vec2.addTwoScaledUnitVectors(tmpVec2a,b43,l43*-(1.0-rect.right),b23,l23*-(1.0-rect.bottom));vec2.add(dstQuad.p3,this.p3,tmpVec2a);vec2.addTwoScaledUnitVectors(tmpVec2a,b43,l43*rect.left,b14,l14*-(1.0-rect.bottom));vec2.add(dstQuad.p4,this.p4,tmpVec2a);},toString(){return'Quad('+
-vec2.toString(this.p1)+', '+
-vec2.toString(this.p2)+', '+
-vec2.toString(this.p3)+', '+
-vec2.toString(this.p4)+')';}};function sign(p1,p2,p3){return(p1[0]-p3[0])*(p2[1]-p3[1])-
-(p2[0]-p3[0])*(p1[1]-p3[1]);}
-function pointInTriangle2(pt,p1,p2,p3){const b1=sign(pt,p1,p2)<0.0;const b2=sign(pt,p2,p3)<0.0;const b3=sign(pt,p3,p1)<0.0;return((b1===b2)&&(b2===b3));}
-function pointInImplicitQuad(point,p1,p2,p3,p4){return pointInTriangle2(point,p1,p2,p3)||pointInTriangle2(point,p1,p3,p4);}
-return{pointInTriangle2,pointInImplicitQuad,Quad,};});'use strict';tr.exportTo('tr.b',function(){const ESTIMATED_IDLE_PERIOD_LENGTH_MILLISECONDS=10;const REQUEST_IDLE_CALLBACK_TIMEOUT_MILLISECONDS=100;const recordRAFStacks=false;let pendingPreAFs=[];let pendingRAFs=[];const pendingIdleCallbacks=[];let currentRAFDispatchList=undefined;let rafScheduled=false;let idleWorkScheduled=false;function scheduleRAF(){if(rafScheduled)return;rafScheduled=true;if(tr.isHeadless){Promise.resolve().then(function(){processRequests(false,0);},function(e){throw e;});}else{if(window.requestAnimationFrame){window.requestAnimationFrame(processRequests.bind(this,false));}else{const delta=Date.now()-window.performance.now();window.webkitRequestAnimationFrame(function(domTimeStamp){processRequests(false,domTimeStamp-delta);});}}}
-function nativeRequestIdleCallbackSupported(){return!tr.isHeadless&&window.requestIdleCallback;}
-function scheduleIdleWork(){if(idleWorkScheduled)return;if(!nativeRequestIdleCallbackSupported()){scheduleRAF();return;}
-idleWorkScheduled=true;window.requestIdleCallback(function(deadline,didTimeout){processIdleWork(false,deadline);},{timeout:REQUEST_IDLE_CALLBACK_TIMEOUT_MILLISECONDS});}
-function onAnimationFrameError(e,opt_stack){console.log(e.stack);if(tr.isHeadless)throw e;if(opt_stack)console.log(opt_stack);if(e.message){console.error(e.message,e.stack);}else{console.error(e);}}
-function runTask(task,frameBeginTime){try{task.callback.call(task.context,frameBeginTime);}catch(e){tr.b.onAnimationFrameError(e,task.stack);}}
-function processRequests(forceAllTasksToRun,frameBeginTime){rafScheduled=false;const currentPreAFs=pendingPreAFs;currentRAFDispatchList=pendingRAFs;pendingPreAFs=[];pendingRAFs=[];const hasRAFTasks=currentPreAFs.length||currentRAFDispatchList.length;for(let i=0;i<currentPreAFs.length;i++){runTask(currentPreAFs[i],frameBeginTime);}
-while(currentRAFDispatchList.length>0){runTask(currentRAFDispatchList.shift(),frameBeginTime);}
-currentRAFDispatchList=undefined;if((!hasRAFTasks&&!nativeRequestIdleCallbackSupported())||forceAllTasksToRun){const rafCompletionDeadline=frameBeginTime+ESTIMATED_IDLE_PERIOD_LENGTH_MILLISECONDS;processIdleWork(forceAllTasksToRun,{timeRemaining(){return rafCompletionDeadline-window.performance.now();}});}
-if(pendingIdleCallbacks.length>0)scheduleIdleWork();}
-function processIdleWork(forceAllTasksToRun,deadline){idleWorkScheduled=false;while(pendingIdleCallbacks.length>0){runTask(pendingIdleCallbacks.shift());if(!forceAllTasksToRun&&(tr.isHeadless||deadline.timeRemaining()<=0)){break;}}
-if(pendingIdleCallbacks.length>0)scheduleIdleWork();}
-function getStack_(){if(!recordRAFStacks)return'';const stackLines=tr.b.stackTrace();stackLines.shift();return stackLines.join('\n');}
-function requestPreAnimationFrame(callback,opt_this){pendingPreAFs.push({callback,context:opt_this||global,stack:getStack_()});scheduleRAF();}
-function requestAnimationFrameInThisFrameIfPossible(callback,opt_this){if(!currentRAFDispatchList){requestAnimationFrame(callback,opt_this);return;}
-currentRAFDispatchList.push({callback,context:opt_this||global,stack:getStack_()});return;}
-function requestAnimationFrame(callback,opt_this){pendingRAFs.push({callback,context:opt_this||global,stack:getStack_()});scheduleRAF();}
-function animationFrame(){return new Promise(resolve=>requestAnimationFrame(resolve));}
-function requestIdleCallback(callback,opt_this){pendingIdleCallbacks.push({callback,context:opt_this||global,stack:getStack_()});scheduleIdleWork();}
-function forcePendingRAFTasksToRun(frameBeginTime){if(!rafScheduled)return;processRequests(false,frameBeginTime);}
-function forceAllPendingTasksToRunForTest(){if(!rafScheduled&&!idleWorkScheduled)return;processRequests(true,0);}
-function timeout(ms){return new Promise(resolve=>window.setTimeout(resolve,ms));}
-function idle(){return new Promise(resolve=>requestIdleCallback(resolve));}
-return{animationFrame,forceAllPendingTasksToRunForTest,forcePendingRAFTasksToRun,idle,onAnimationFrameError,requestAnimationFrame,requestAnimationFrameInThisFrameIfPossible,requestIdleCallback,requestPreAnimationFrame,timeout,};});'use strict';tr.exportTo('tr.b',function(){class Mark{constructor(groupName,functionName){if(tr.isHeadless)return;this.groupName_=groupName;this.functionName_=functionName;const guid=tr.b.GUID.allocateSimple();this.measureName_=`${groupName} ${functionName}`;this.startMarkName_=`${this.measureName} ${guid} start`;this.endMarkName_=`${this.measureName} ${guid} end`;window.performance.mark(this.startMarkName_);}
-get groupName(){return this.groupName_;}
-get functionName(){return this.functionName_;}
-get measureName(){return this.measureName_;}
-get startMark(){return tr.b.getOnlyElement(window.performance.getEntriesByName(this.startMarkName_));}
-get endMark(){return tr.b.getOnlyElement(window.performance.getEntriesByName(this.endMarkName_));}
-get durationMs(){return this.endMark.startTime-this.startMark.startTime;}
-end(){if(tr.isHeadless)return;window.performance.mark(this.endMarkName_);window.performance.measure(this.measureName_,this.startMarkName_,this.endMarkName_);if(!(window.ga instanceof Function))return;ga('send',{hitType:'event',eventCategory:this.groupName,eventAction:this.functionName,eventValue:this.durationMs,});}}
-class Timing{static mark(groupName,functionName){return new Mark(groupName,functionName);}
-static instant(groupName,functionName,opt_value){const valueString=opt_value===undefined?'':' '+opt_value;if(console&&console.timeStamp){console.timeStamp(`${groupName} ${functionName}${valueString}`);}
-if(window&&window.ga instanceof Function){ga('send',{hitType:'event',eventCategory:groupName,eventAction:functionName,eventValue:opt_value,});}}
-static getCurrentTimeMs(){try{return performance.now();}catch(error){}
-return 0;}}
-return{Timing,};});'use strict';tr.exportTo('tr.b',function(){const Timing=tr.b.Timing;function Task(runCb,thisArg){if(runCb!==undefined&&thisArg===undefined&&runCb.prototype!==undefined){throw new Error('Almost certainly you meant to pass a bound callback '+'or thisArg.');}
-this.runCb_=runCb;this.thisArg_=thisArg;this.afterTask_=undefined;this.subTasks_=[];this.updatesUi_=false;}
-Task.prototype={get name(){return this.runCb_.name;},set updatesUi(value){this.updatesUi_=value;},subTask(cb,thisArg){if(cb instanceof Task){this.subTasks_.push(cb);}else{this.subTasks_.push(new Task(cb,thisArg));}
-return this.subTasks_[this.subTasks_.length-1];},run(){if(this.runCb_!==undefined)this.runCb_.call(this.thisArg_,this);const subTasks=this.subTasks_;this.subTasks_=undefined;if(!subTasks.length)return this.afterTask_;for(let i=1;i<subTasks.length;i++){subTasks[i-1].afterTask_=subTasks[i];}
-subTasks[subTasks.length-1].afterTask_=this.afterTask_;return subTasks[0];},after(cb,thisArg){if(this.afterTask_){throw new Error('Has an after task already');}
-if(cb instanceof Task){this.afterTask_=cb;}else{this.afterTask_=new Task(cb,thisArg);}
-return this.afterTask_;},enqueue(cb,thisArg){if(!this.afterTask_)return this.after(cb,thisArg);return this.afterTask_.enqueue(cb,thisArg);}};Task.RunSynchronously=function(task){let curTask=task;while(curTask){curTask=curTask.run();}};Task.RunWhenIdle=function(task){return new Promise(function(resolve,reject){let curTask=task;function runAnother(){try{curTask=curTask.run();}catch(e){reject(e);return;}
-if(curTask){if(curTask.updatesUi_){tr.b.requestAnimationFrameInThisFrameIfPossible(runAnother);}else{tr.b.requestIdleCallback(runAnother);}
-return;}
-resolve();}
-tr.b.requestIdleCallback(runAnother);});};return{Task,};});'use strict';tr.exportTo('tr.c',function(){function makeCaseInsensitiveRegex(pattern){pattern=pattern.replace(/[.*+?^${}()|[\]\\]/g,'\\$&');return new RegExp(pattern,'i');}
-function Filter(){}
-Filter.prototype={__proto__:Object.prototype,matchCounter(counter){return true;},matchCpu(cpu){return true;},matchProcess(process){return true;},matchSlice(slice){return true;},matchThread(thread){return true;}};function TitleOrCategoryFilter(text){Filter.call(this);this.regex_=makeCaseInsensitiveRegex(text);if(!text.length){throw new Error('Filter text is empty.');}}
-TitleOrCategoryFilter.prototype={__proto__:Filter.prototype,matchSlice(slice){if(slice.title===undefined&&slice.category===undefined){return false;}
-return this.regex_.test(slice.title)||(!!slice.category&&this.regex_.test(slice.category));}};function ExactTitleFilter(text){Filter.call(this);this.text_=text;if(!text.length){throw new Error('Filter text is empty.');}}
-ExactTitleFilter.prototype={__proto__:Filter.prototype,matchSlice(slice){return slice.title===this.text_;}};function FullTextFilter(text){Filter.call(this);this.regex_=makeCaseInsensitiveRegex(text);this.titleOrCategoryFilter_=new TitleOrCategoryFilter(text);}
-FullTextFilter.prototype={__proto__:Filter.prototype,matchObject_(obj){for(const key in obj){if(!obj.hasOwnProperty(key))continue;if(this.regex_.test(key))return true;if(this.regex_.test(obj[key]))return true;}
-return false;},matchSlice(slice){if(this.titleOrCategoryFilter_.matchSlice(slice))return true;return this.matchObject_(slice.args);}};return{Filter,TitleOrCategoryFilter,ExactTitleFilter,FullTextFilter,};});'use strict';tr.exportTo('tr.model',function(){const ClockDomainId={BATTOR:'BATTOR',UNKNOWN_CHROME_LEGACY:'UNKNOWN_CHROME_LEGACY',LINUX_CLOCK_MONOTONIC:'LINUX_CLOCK_MONOTONIC',LINUX_FTRACE_GLOBAL:'LINUX_FTRACE_GLOBAL',MAC_MACH_ABSOLUTE_TIME:'MAC_MACH_ABSOLUTE_TIME',WIN_ROLLOVER_PROTECTED_TIME_GET_TIME:'WIN_ROLLOVER_PROTECTED_TIME_GET_TIME',WIN_QPC:'WIN_QPC',SYSTRACE:'SYSTRACE',TELEMETRY:'TELEMETRY'};const POSSIBLE_CHROME_CLOCK_DOMAINS=new Set([ClockDomainId.UNKNOWN_CHROME_LEGACY,ClockDomainId.LINUX_CLOCK_MONOTONIC,ClockDomainId.MAC_MACH_ABSOLUTE_TIME,ClockDomainId.WIN_ROLLOVER_PROTECTED_TIME_GET_TIME,ClockDomainId.WIN_QPC]);const BATTOR_FAST_SYNC_THRESHOLD_MS=3;function ClockSyncManager(){this.domainsSeen_=new Set();this.markersBySyncId_=new Map();this.transformerMapByDomainId_={};}
-ClockSyncManager.prototype={addClockSyncMarker(domainId,syncId,startTs,opt_endTs){this.onDomainSeen_(domainId);if(Object.values(ClockDomainId).indexOf(domainId)<0){throw new Error('"'+domainId+'" is not in the list of known '+'clock domain IDs.');}
-if(this.modelDomainId_){throw new Error('Cannot add new clock sync markers after getting '+'a model time transformer.');}
-const marker=new ClockSyncMarker(domainId,startTs,opt_endTs);if(!this.markersBySyncId_.has(syncId)){this.markersBySyncId_.set(syncId,[marker]);return;}
-const markers=this.markersBySyncId_.get(syncId);if(markers.length===2){throw new Error('Clock sync with ID "'+syncId+'" is already '+'complete - cannot add a third clock sync marker to it.');}
-if(markers[0].domainId===domainId){throw new Error('A clock domain cannot sync with itself.');}
-markers.push(marker);this.onSyncCompleted_(markers[0],marker);},get markersBySyncId(){return this.markersBySyncId_;},get domainsSeen(){return this.domainsSeen_;},getModelTimeTransformer(domainId){this.onDomainSeen_(domainId);if(!this.modelDomainId_){this.selectModelDomainId_();}
-return this.getTimeTransformerRaw_(domainId,this.modelDomainId_).fn;},getTimeTransformerError(fromDomainId,toDomainId){this.onDomainSeen_(fromDomainId);this.onDomainSeen_(toDomainId);return this.getTimeTransformerRaw_(fromDomainId,toDomainId).error;},getTimeTransformerRaw_(fromDomainId,toDomainId){const transformer=this.getTransformerBetween_(fromDomainId,toDomainId);if(!transformer){throw new Error('No clock sync markers exist pairing clock domain "'+
-fromDomainId+'" '+'with target clock domain "'+
-toDomainId+'".');}
-return transformer;},getTransformerBetween_(fromDomainId,toDomainId){const visitedDomainIds=new Set();const queue=[{domainId:fromDomainId,transformer:Transformer.IDENTITY}];while(queue.length>0){queue.sort((domain1,domain2)=>domain1.transformer.error-domain2.transformer.error);const current=queue.shift();if(current.domainId===toDomainId){return current.transformer;}
-if(visitedDomainIds.has(current.domainId)){continue;}
-visitedDomainIds.add(current.domainId);const outgoingTransformers=this.transformerMapByDomainId_[current.domainId];if(!outgoingTransformers)continue;for(const outgoingDomainId in outgoingTransformers){const toNextDomainTransformer=outgoingTransformers[outgoingDomainId];const toCurrentDomainTransformer=current.transformer;queue.push({domainId:outgoingDomainId,transformer:Transformer.compose(toNextDomainTransformer,toCurrentDomainTransformer)});}}
-return undefined;},selectModelDomainId_(){this.ensureAllDomainsAreConnected_();for(const chromeDomainId of POSSIBLE_CHROME_CLOCK_DOMAINS){if(this.domainsSeen_.has(chromeDomainId)){this.modelDomainId_=chromeDomainId;return;}}
-const domainsSeenArray=Array.from(this.domainsSeen_);domainsSeenArray.sort();this.modelDomainId_=domainsSeenArray[0];},ensureAllDomainsAreConnected_(){let firstDomainId=undefined;for(const domainId of this.domainsSeen_){if(!firstDomainId){firstDomainId=domainId;continue;}
-if(!this.getTransformerBetween_(firstDomainId,domainId)){throw new Error('Unable to select a master clock domain because no '+'path can be found from "'+firstDomainId+'" to "'+domainId+'".');}}
-return true;},onDomainSeen_(domainId){if(domainId===ClockDomainId.UNKNOWN_CHROME_LEGACY&&!this.domainsSeen_.has(ClockDomainId.UNKNOWN_CHROME_LEGACY)){for(const chromeDomainId of POSSIBLE_CHROME_CLOCK_DOMAINS){if(chromeDomainId===ClockDomainId.UNKNOWN_CHROME_LEGACY){continue;}
-this.collapseDomains_(ClockDomainId.UNKNOWN_CHROME_LEGACY,chromeDomainId);}}
-this.domainsSeen_.add(domainId);},onSyncCompleted_(marker1,marker2){const forwardTransformer=Transformer.fromMarkers(marker1,marker2);const backwardTransformer=Transformer.fromMarkers(marker2,marker1);const existingTransformer=this.getOrCreateTransformerMap_(marker1.domainId)[marker2.domainId];if(!existingTransformer||forwardTransformer.error<existingTransformer.error){this.getOrCreateTransformerMap_(marker1.domainId)[marker2.domainId]=forwardTransformer;this.getOrCreateTransformerMap_(marker2.domainId)[marker1.domainId]=backwardTransformer;}},collapseDomains_(domain1Id,domain2Id){this.getOrCreateTransformerMap_(domain1Id)[domain2Id]=this.getOrCreateTransformerMap_(domain2Id)[domain1Id]=Transformer.IDENTITY;},getOrCreateTransformerMap_(domainId){if(!this.transformerMapByDomainId_[domainId]){this.transformerMapByDomainId_[domainId]={};}
-return this.transformerMapByDomainId_[domainId];},computeDotGraph(){let dotString='graph {\n';const domainsSeen=[...this.domainsSeen_].sort();for(const domainId of domainsSeen){dotString+=`  ${domainId}[shape=box]\n`;}
-const markersBySyncIdEntries=[...this.markersBySyncId_.entries()].sort(([syncId1,markers1],[syncId2,markers2])=>syncId1.localeCompare(syncId2));for(const[syncId,markers]of markersBySyncIdEntries){const sortedMarkers=markers.sort((a,b)=>a.domainId.localeCompare(b.domainId));for(const m of markers){dotString+=`  "${syncId}" -- ${m.domainId} `;dotString+=`[label="[${m.startTs}, ${m.endTs}]"]\n`;}}
-dotString+='}';return dotString;}};function ClockSyncMarker(domainId,startTs,opt_endTs){this.domainId=domainId;this.startTs=startTs;this.endTs=opt_endTs===undefined?startTs:opt_endTs;}
-ClockSyncMarker.prototype={get duration(){return this.endTs-this.startTs;},get ts(){return this.startTs+this.duration/2;}};function Transformer(fn,error){this.fn=fn;this.error=error;}
-Transformer.IDENTITY=new Transformer((x=>x),0);Transformer.compose=function(aToB,bToC){return new Transformer((ts)=>bToC.fn(aToB.fn(ts)),aToB.error+bToC.error);};Transformer.fromMarkers=function(fromMarker,toMarker){let fromTs=fromMarker.ts;let toTs=toMarker.ts;if(fromMarker.domainId===ClockDomainId.BATTOR&&toMarker.duration>BATTOR_FAST_SYNC_THRESHOLD_MS){toTs=toMarker.startTs;}else if(toMarker.domainId===ClockDomainId.BATTOR&&fromMarker.duration>BATTOR_FAST_SYNC_THRESHOLD_MS){fromTs=fromMarker.startTs;}
-const tsShift=toTs-fromTs;return new Transformer((ts)=>ts+tsShift,fromMarker.duration+toMarker.duration);};return{ClockDomainId,ClockSyncManager,};});'use strict';tr.exportTo('tr.model',function(){function CounterSample(series,timestamp,value){tr.model.Event.call(this);this.series_=series;this.timestamp_=timestamp;this.value_=value;}
-CounterSample.groupByTimestamp=function(samples){const samplesByTimestamp=tr.b.groupIntoMap(samples,s=>s.timestamp);const timestamps=Array.from(samplesByTimestamp.keys());timestamps.sort();const groups=[];for(const ts of timestamps){const group=samplesByTimestamp.get(ts);group.sort((x,y)=>x.series.seriesIndex-y.series.seriesIndex);groups.push(group);}
-return groups;};CounterSample.prototype={__proto__:tr.model.Event.prototype,get series(){return this.series_;},get timestamp(){return this.timestamp_;},get value(){return this.value_;},set timestamp(timestamp){this.timestamp_=timestamp;},addBoundsToRange(range){range.addValue(this.timestamp);},getSampleIndex(){return tr.b.findLowIndexInSortedArray(this.series.timestamps,function(x){return x;},this.timestamp_);},get userFriendlyName(){return'Counter sample from '+this.series_.title+' at '+
-tr.b.Unit.byName.timeStampInMs.format(this.timestamp);}};tr.model.EventRegistry.register(CounterSample,{name:'counterSample',pluralName:'counterSamples'});return{CounterSample,};});'use strict';tr.exportTo('tr.model',function(){const CounterSample=tr.model.CounterSample;function CounterSeries(name,color){tr.model.EventContainer.call(this);this.name_=name;this.color_=color;this.timestamps_=[];this.samples_=[];this.counter=undefined;this.seriesIndex=undefined;}
-CounterSeries.prototype={__proto__:tr.model.EventContainer.prototype,get length(){return this.timestamps_.length;},get name(){return this.name_;},get color(){return this.color_;},get samples(){return this.samples_;},get timestamps(){return this.timestamps_;},getSample(idx){return this.samples_[idx];},getTimestamp(idx){return this.timestamps_[idx];},addCounterSample(ts,val){const sample=new CounterSample(this,ts,val);this.addSample(sample);return sample;},addSample(sample){this.timestamps_.push(sample.timestamp);this.samples_.push(sample);},getStatistics(sampleIndices){let sum=0;let min=Number.MAX_VALUE;let max=-Number.MAX_VALUE;for(let i=0;i<sampleIndices.length;++i){const sample=this.getSample(sampleIndices[i]).value;sum+=sample;min=Math.min(sample,min);max=Math.max(sample,max);}
-return{min,max,avg:(sum/sampleIndices.length),start:this.getSample(sampleIndices[0]).value,end:this.getSample(sampleIndices.length-1).value};},shiftTimestampsForward(amount){for(let i=0;i<this.timestamps_.length;++i){this.timestamps_[i]+=amount;this.samples_[i].timestamp=this.timestamps_[i];}},*childEvents(){yield*this.samples_;},*childEventContainers(){}};return{CounterSeries,};});'use strict';tr.exportTo('tr.model',function(){function Counter(parent,id,category,name){tr.model.EventContainer.call(this);this.parent_=parent;this.id_=id;this.category_=category||'';this.name_=name;this.series_=[];this.totals=[];}
-Counter.prototype={__proto__:tr.model.EventContainer.prototype,get parent(){return this.parent_;},get id(){return this.id_;},get category(){return this.category_;},get name(){return this.name_;},*childEvents(){},*childEventContainers(){yield*this.series;},set timestamps(arg){throw new Error('Bad counter API. No cookie.');},set seriesNames(arg){throw new Error('Bad counter API. No cookie.');},set seriesColors(arg){throw new Error('Bad counter API. No cookie.');},set samples(arg){throw new Error('Bad counter API. No cookie.');},addSeries(series){series.counter=this;series.seriesIndex=this.series_.length;this.series_.push(series);return series;},getSeries(idx){return this.series_[idx];},get series(){return this.series_;},get numSeries(){return this.series_.length;},get numSamples(){if(this.series_.length===0)return 0;return this.series_[0].length;},get timestamps(){if(this.series_.length===0)return[];return this.series_[0].timestamps;},getSampleStatistics(sampleIndices){sampleIndices.sort();const ret=[];this.series_.forEach(function(series){ret.push(series.getStatistics(sampleIndices));});return ret;},shiftTimestampsForward(amount){for(let i=0;i<this.series_.length;++i){this.series_[i].shiftTimestampsForward(amount);}},updateBounds(){this.totals=[];this.maxTotal=0;this.bounds.reset();if(this.series_.length===0)return;const firstSeries=this.series_[0];const lastSeries=this.series_[this.series_.length-1];this.bounds.addValue(firstSeries.getTimestamp(0));this.bounds.addValue(lastSeries.getTimestamp(lastSeries.length-1));const numSeries=this.numSeries;this.maxTotal=-Infinity;for(let i=0;i<firstSeries.length;++i){let total=0;this.series_.forEach(function(series){total+=series.getSample(i).value;this.totals.push(total);}.bind(this));this.maxTotal=Math.max(total,this.maxTotal);}}};Counter.compare=function(x,y){let tmp=x.parent.compareTo(y.parent);if(tmp!==0)return tmp;tmp=x.name.localeCompare(y.name);if(tmp===0)return x.tid-y.tid;return tmp;};return{Counter,};});'use strict';tr.exportTo('tr.model',function(){const Slice=tr.model.Slice;function CpuSlice(cat,title,colorId,start,args,opt_duration){Slice.apply(this,arguments);this.threadThatWasRunning=undefined;this.cpu=undefined;}
-CpuSlice.prototype={__proto__:Slice.prototype,get analysisTypeName(){return'tr.ui.analysis.CpuSlice';},getAssociatedTimeslice(){if(!this.threadThatWasRunning){return undefined;}
-const timeSlices=this.threadThatWasRunning.timeSlices;for(let i=0;i<timeSlices.length;i++){const timeSlice=timeSlices[i];if(timeSlice.start!==this.start){continue;}
-if(timeSlice.duration!==this.duration){continue;}
-return timeSlice;}
-return undefined;}};tr.model.EventRegistry.register(CpuSlice,{name:'cpuSlice',pluralName:'cpuSlices'});return{CpuSlice,};});'use strict';tr.exportTo('tr.model',function(){function TimeToObjectInstanceMap(createObjectInstanceFunction,parent,scopedId){this.createObjectInstanceFunction_=createObjectInstanceFunction;this.parent=parent;this.scopedId=scopedId;this.instances=[];}
-TimeToObjectInstanceMap.prototype={idWasCreated(category,name,ts){if(this.instances.length===0){this.instances.push(this.createObjectInstanceFunction_(this.parent,this.scopedId,category,name,ts));this.instances[0].creationTsWasExplicit=true;return this.instances[0];}
-let lastInstance=this.instances[this.instances.length-1];if(ts<lastInstance.deletionTs){throw new Error('Mutation of the TimeToObjectInstanceMap must be '+'done in ascending timestamp order.');}
-lastInstance=this.createObjectInstanceFunction_(this.parent,this.scopedId,category,name,ts);lastInstance.creationTsWasExplicit=true;this.instances.push(lastInstance);return lastInstance;},addSnapshot(category,name,ts,args,opt_baseTypeName){if(this.instances.length===0){this.instances.push(this.createObjectInstanceFunction_(this.parent,this.scopedId,category,name,ts,opt_baseTypeName));}
-const i=tr.b.findIndexInSortedIntervals(this.instances,function(inst){return inst.creationTs;},function(inst){return inst.deletionTs-inst.creationTs;},ts);let instance;if(i<0){instance=this.instances[0];if(ts>instance.deletionTs||instance.creationTsWasExplicit){throw new Error('At the provided timestamp, no instance was still alive');}
-if(instance.snapshots.length!==0){throw new Error('Cannot shift creationTs forward, '+'snapshots have been added. First snap was at ts='+
-instance.snapshots[0].ts+' and creationTs was '+
-instance.creationTs);}
-instance.creationTs=ts;}else if(i>=this.instances.length){instance=this.instances[this.instances.length-1];if(ts>=instance.deletionTs){instance=this.createObjectInstanceFunction_(this.parent,this.scopedId,category,name,ts,opt_baseTypeName);this.instances.push(instance);}else{let lastValidIndex;for(let i=this.instances.length-1;i>=0;i--){const tmp=this.instances[i];if(ts>=tmp.deletionTs)break;if(tmp.creationTsWasExplicit===false&&tmp.snapshots.length===0){lastValidIndex=i;}}
-if(lastValidIndex===undefined){throw new Error('Cannot add snapshot. No instance was alive that was mutable.');}
-instance=this.instances[lastValidIndex];instance.creationTs=ts;}}else{instance=this.instances[i];}
-return instance.addSnapshot(ts,args,name,opt_baseTypeName);},get lastInstance(){if(this.instances.length===0)return undefined;return this.instances[this.instances.length-1];},idWasDeleted(category,name,ts){if(this.instances.length===0){this.instances.push(this.createObjectInstanceFunction_(this.parent,this.scopedId,category,name,ts));}
-let lastInstance=this.instances[this.instances.length-1];if(ts<lastInstance.creationTs){throw new Error('Cannot delete an id before it was created');}
-if(lastInstance.deletionTs===Number.MAX_VALUE){lastInstance.wasDeleted(ts);return lastInstance;}
-if(ts<lastInstance.deletionTs){throw new Error('id was already deleted earlier.');}
-lastInstance=this.createObjectInstanceFunction_(this.parent,this.scopedId,category,name,ts);this.instances.push(lastInstance);lastInstance.wasDeleted(ts);return lastInstance;},getInstanceAt(ts){const i=tr.b.findIndexInSortedIntervals(this.instances,function(inst){return inst.creationTs;},function(inst){return inst.deletionTs-inst.creationTs;},ts);if(i<0){if(this.instances[0].creationTsWasExplicit){return undefined;}
-return this.instances[0];}else if(i>=this.instances.length){return undefined;}
-return this.instances[i];}};return{TimeToObjectInstanceMap,};});'use strict';tr.exportTo('tr.model',function(){const ObjectInstance=tr.model.ObjectInstance;const ObjectSnapshot=tr.model.ObjectSnapshot;function ObjectCollection(parent){tr.model.EventContainer.call(this);this.parent=parent;this.instanceMapsByScopedId_={};this.instancesByTypeName_={};this.createObjectInstance_=this.createObjectInstance_.bind(this);}
-ObjectCollection.prototype={__proto__:tr.model.EventContainer.prototype,*childEvents(){for(const instance of this.getAllObjectInstances()){yield instance;yield*instance.snapshots;}},createObjectInstance_(parent,scopedId,category,name,creationTs,opt_baseTypeName){const constructor=tr.model.ObjectInstance.subTypes.getConstructor(category,name);const instance=new constructor(parent,scopedId,category,name,creationTs,opt_baseTypeName);const typeName=instance.typeName;let instancesOfTypeName=this.instancesByTypeName_[typeName];if(!instancesOfTypeName){instancesOfTypeName=[];this.instancesByTypeName_[typeName]=instancesOfTypeName;}
-instancesOfTypeName.push(instance);return instance;},getOrCreateInstanceMap_(scopedId){let dict;if(scopedId.scope in this.instanceMapsByScopedId_){dict=this.instanceMapsByScopedId_[scopedId.scope];}else{dict={};this.instanceMapsByScopedId_[scopedId.scope]=dict;}
-let instanceMap=dict[scopedId.id];if(instanceMap)return instanceMap;instanceMap=new tr.model.TimeToObjectInstanceMap(this.createObjectInstance_,this.parent,scopedId);dict[scopedId.id]=instanceMap;return instanceMap;},idWasCreated(scopedId,category,name,ts){const instanceMap=this.getOrCreateInstanceMap_(scopedId);return instanceMap.idWasCreated(category,name,ts);},addSnapshot(scopedId,category,name,ts,args,opt_baseTypeName){const instanceMap=this.getOrCreateInstanceMap_(scopedId);const snapshot=instanceMap.addSnapshot(category,name,ts,args,opt_baseTypeName);if(snapshot.objectInstance.category!==category){const msg='Added snapshot name='+name+' with cat='+category+' impossible. It instance was created/snapshotted with cat='+
-snapshot.objectInstance.category+' name='+
-snapshot.objectInstance.name;throw new Error(msg);}
-if(opt_baseTypeName&&snapshot.objectInstance.baseTypeName!==opt_baseTypeName){throw new Error('Could not add snapshot with baseTypeName='+
-opt_baseTypeName+'. It '+'was previously created with name='+
-snapshot.objectInstance.baseTypeName);}
-if(snapshot.objectInstance.name!==name){throw new Error('Could not add snapshot with name='+name+'. It '+'was previously created with name='+
-snapshot.objectInstance.name);}
-return snapshot;},idWasDeleted(scopedId,category,name,ts){const instanceMap=this.getOrCreateInstanceMap_(scopedId);const deletedInstance=instanceMap.idWasDeleted(category,name,ts);if(!deletedInstance)return;if(deletedInstance.category!==category){const msg='Deleting object '+deletedInstance.name+' with a different category '+'than when it was created. It previous had cat='+
-deletedInstance.category+' but the delete command '+'had cat='+category;throw new Error(msg);}
-if(deletedInstance.baseTypeName!==name){throw new Error('Deletion requested for name='+
-name+' could not proceed: '+'An existing object with baseTypeName='+
-deletedInstance.baseTypeName+' existed.');}},autoDeleteObjects(maxTimestamp){for(const imapById of Object.values(this.instanceMapsByScopedId_)){for(const i2imap of Object.values(imapById)){const lastInstance=i2imap.lastInstance;if(lastInstance.deletionTs!==Number.MAX_VALUE)continue;i2imap.idWasDeleted(lastInstance.category,lastInstance.name,maxTimestamp);lastInstance.deletionTsWasExplicit=false;}}},getObjectInstanceAt(scopedId,ts){let instanceMap;if(scopedId.scope in this.instanceMapsByScopedId_){instanceMap=this.instanceMapsByScopedId_[scopedId.scope][scopedId.id];}
-if(!instanceMap)return undefined;return instanceMap.getInstanceAt(ts);},getSnapshotAt(scopedId,ts){const instance=this.getObjectInstanceAt(scopedId,ts);if(!instance)return undefined;return instance.getSnapshotAt(ts);},iterObjectInstances(iter,opt_this){opt_this=opt_this||this;for(const imapById of Object.values(this.instanceMapsByScopedId_)){for(const i2imap of Object.values(imapById)){i2imap.instances.forEach(iter,opt_this);}}},getAllObjectInstances(){const instances=[];this.iterObjectInstances(function(i){instances.push(i);});return instances;},getAllInstancesNamed(name){return this.instancesByTypeName_[name];},getAllInstancesByTypeName(){return this.instancesByTypeName_;},preInitializeAllObjects(){this.iterObjectInstances(function(instance){instance.preInitialize();});},initializeAllObjects(){this.iterObjectInstances(function(instance){instance.initialize();});},initializeInstances(){this.iterObjectInstances(function(instance){instance.initialize();});},updateBounds(){this.bounds.reset();this.iterObjectInstances(function(instance){instance.updateBounds();this.bounds.addRange(instance.bounds);},this);},shiftTimestampsForward(amount){this.iterObjectInstances(function(instance){instance.shiftTimestampsForward(amount);});},addCategoriesToDict(categoriesDict){this.iterObjectInstances(function(instance){categoriesDict[instance.category]=true;});}};return{ObjectCollection,};});'use strict';tr.exportTo('tr.model',function(){class AsyncSliceGroup extends tr.model.EventContainer{constructor(parentContainer,opt_name){super();this.parentContainer_=parentContainer;this.name_=opt_name;this.slices=[];this.viewSubGroups_=undefined;this.nestedLevel_=0;this.hasNestedSubGroups_=true;this.title_=undefined;}
-get parentContainer(){return this.parentContainer_;}
-get model(){return this.parentContainer_.parent.model;}
-get stableId(){return this.parentContainer_.stableId+'.AsyncSliceGroup';}
-get title(){if(this.nested_level_===0){return'<root>';}
-return this.title_;}
-getSettingsKey(){if(this.name_===undefined){return undefined;}
-const parentKey=this.parentContainer_.getSettingsKey();if(parentKey===undefined){return undefined;}
-return parentKey+'.'+this.name_;}
-push(slice){if(this.viewSubGroups_!==undefined){throw new Error('No new slices are allowed when view sub-groups already formed.');}
-slice.parentContainer=this.parentContainer;this.slices.push(slice);return slice;}
-get length(){return this.slices.length;}
-shiftTimestampsForward(amount){for(const slice of this.childEvents()){slice.start+=amount;}}
-updateBounds(){this.bounds.reset();for(let i=0;i<this.slices.length;i++){this.bounds.addValue(this.slices[i].start);this.bounds.addValue(this.slices[i].end);}}
-autoCloseOpenSlices(){const maxTimestamp=this.parentContainer_.parent.model.bounds.max;for(const slice of this.childEvents()){if(slice.didNotFinish){slice.duration=maxTimestamp-slice.start;}}}
-get viewSubGroups(){if(!this.hasNestedSubGroups_||this.nestedLevel_===2){return[];}
-if(this.viewSubGroups_!==undefined){return this.viewSubGroups_;}
-const subGroupsByTitle=new Map();for(const slice of this.slices){let subGroupTitle=slice.viewSubGroupTitle;let hasNestedSubGroups=false;if(this.nestedLevel_===0&&slice.viewSubGroupGroupingKey!==undefined){subGroupTitle=slice.viewSubGroupGroupingKey;hasNestedSubGroups=true;}
-let subGroup=subGroupsByTitle.get(subGroupTitle);if(subGroup===undefined){let name;if(this.name_!==undefined){name=this.name_+'.'+subGroupTitle;}else{name=subGroupTitle;}
-subGroup=new AsyncSliceGroup(this.parentContainer_,name);subGroup.title_=subGroupTitle;subGroup.hasNestedSubGroups_=hasNestedSubGroups;subGroup.nestedLevel_=this.nestedLevel_+1;subGroupsByTitle.set(subGroupTitle,subGroup);}
-subGroup.push(slice);}
-this.viewSubGroups_=Array.from(subGroupsByTitle.values());this.viewSubGroups_.sort((a,b)=>a.title.localeCompare(b.title));return this.viewSubGroups_;}*findTopmostSlicesInThisContainer(eventPredicate,opt_this){for(const slice of this.slices){if(slice.isTopLevel){yield*slice.findTopmostSlicesRelativeToThisSlice(eventPredicate,opt_this);}}}*childEvents(){for(const slice of this.slices){yield slice;yield*slice.enumerateAllDescendents();}}*childEventContainers(){}}
-return{AsyncSliceGroup,};});'use strict';tr.exportTo('tr.model',function(){const Slice=tr.model.Slice;function ThreadSlice(cat,title,colorId,start,args,opt_duration,opt_cpuStart,opt_cpuDuration,opt_argsStripped,opt_bindId){Slice.call(this,cat,title,colorId,start,args,opt_duration,opt_cpuStart,opt_cpuDuration,opt_argsStripped,opt_bindId);this.subSlices=[];}
-ThreadSlice.prototype={__proto__:Slice.prototype,get overlappingSamples(){const samples=new tr.model.EventSet();if(!this.parentContainer||!this.parentContainer.samples){return samples;}
-this.parentContainer.samples.forEach(function(sample){if(this.start<=sample.start&&sample.start<=this.end){samples.push(sample);}},this);return samples;}};tr.model.EventRegistry.register(ThreadSlice,{name:'slice',pluralName:'slices'});return{ThreadSlice,};});'use strict';tr.exportTo('tr.model',function(){const ColorScheme=tr.b.ColorScheme;const ThreadSlice=tr.model.ThreadSlice;function getSliceLo(s){return s.start;}
-function getSliceHi(s){return s.end;}
-function SliceGroup(parentContainer,opt_sliceConstructor,opt_name){tr.model.EventContainer.call(this);this.parentContainer_=parentContainer;const sliceConstructor=opt_sliceConstructor||ThreadSlice;this.sliceConstructor=sliceConstructor;this.sliceConstructorSubTypes=this.sliceConstructor.subTypes;if(!this.sliceConstructorSubTypes){throw new Error('opt_sliceConstructor must have a subtype registry.');}
-this.openPartialSlices_=[];this.slices=[];this.topLevelSlices=[];this.haveTopLevelSlicesBeenBuilt=false;this.name_=opt_name;if(this.model===undefined){throw new Error('SliceGroup must have model defined.');}}
-SliceGroup.prototype={__proto__:tr.model.EventContainer.prototype,get parentContainer(){return this.parentContainer_;},get model(){return this.parentContainer_.model;},get stableId(){return this.parentContainer_.stableId+'.SliceGroup';},getSettingsKey(){if(!this.name_)return undefined;const parentKey=this.parentContainer_.getSettingsKey();if(!parentKey)return undefined;return parentKey+'.'+this.name;},get length(){return this.slices.length;},pushSlice(slice){this.haveTopLevelSlicesBeenBuilt=false;slice.parentContainer=this.parentContainer_;this.slices.push(slice);return slice;},pushSlices(slices){this.haveTopLevelSlicesBeenBuilt=false;slices.forEach(function(slice){slice.parentContainer=this.parentContainer_;this.slices.push(slice);},this);},beginSlice(category,title,ts,opt_args,opt_tts,opt_argsStripped,opt_colorId){if(this.openPartialSlices_.length){const prevSlice=this.openPartialSlices_[this.openPartialSlices_.length-1];if(ts<prevSlice.start){throw new Error('Slices must be added in increasing timestamp order');}}
-const colorId=opt_colorId||ColorScheme.getColorIdForGeneralPurposeString(title);const sliceConstructorSubTypes=this.sliceConstructorSubTypes;const sliceType=sliceConstructorSubTypes.getConstructor(category,title);const slice=new sliceType(category,title,colorId,ts,opt_args?opt_args:{},null,opt_tts,undefined,opt_argsStripped);this.openPartialSlices_.push(slice);slice.didNotFinish=true;this.pushSlice(slice);return slice;},isTimestampValidForBeginOrEnd(ts){if(!this.openPartialSlices_.length)return true;const top=this.openPartialSlices_[this.openPartialSlices_.length-1];return ts>=top.start;},get openSliceCount(){return this.openPartialSlices_.length;},get mostRecentlyOpenedPartialSlice(){if(!this.openPartialSlices_.length)return undefined;return this.openPartialSlices_[this.openPartialSlices_.length-1];},endSlice(ts,opt_tts,opt_colorId){if(!this.openSliceCount){throw new Error('endSlice called without an open slice');}
-const slice=this.openPartialSlices_[this.openSliceCount-1];this.openPartialSlices_.splice(this.openSliceCount-1,1);if(ts<slice.start){throw new Error('Slice '+slice.title+' end time is before its start.');}
-slice.duration=ts-slice.start;slice.didNotFinish=false;slice.colorId=opt_colorId||slice.colorId;if(opt_tts&&slice.cpuStart!==undefined){slice.cpuDuration=opt_tts-slice.cpuStart;}
-return slice;},pushCompleteSlice(category,title,ts,duration,tts,cpuDuration,opt_args,opt_argsStripped,opt_colorId,opt_bindId){const colorId=opt_colorId||ColorScheme.getColorIdForGeneralPurposeString(title);const sliceConstructorSubTypes=this.sliceConstructorSubTypes;const sliceType=sliceConstructorSubTypes.getConstructor(category,title);const slice=new sliceType(category,title,colorId,ts,opt_args?opt_args:{},duration,tts,cpuDuration,opt_argsStripped,opt_bindId);if(duration===undefined){slice.didNotFinish=true;}
-this.pushSlice(slice);return slice;},autoCloseOpenSlices(){this.updateBounds();const maxTimestamp=this.bounds.max;for(let sI=0;sI<this.slices.length;sI++){const slice=this.slices[sI];if(slice.didNotFinish){slice.duration=maxTimestamp-slice.start;}}
-this.openPartialSlices_=[];},shiftTimestampsForward(amount){for(let sI=0;sI<this.slices.length;sI++){const slice=this.slices[sI];slice.start=(slice.start+amount);}},updateBounds(){this.bounds.reset();for(let i=0;i<this.slices.length;i++){this.bounds.addValue(this.slices[i].start);this.bounds.addValue(this.slices[i].end);}},copySlice(slice){const sliceConstructorSubTypes=this.sliceConstructorSubTypes;const sliceType=sliceConstructorSubTypes.getConstructor(slice.category,slice.title);const newSlice=new sliceType(slice.category,slice.title,slice.colorId,slice.start,slice.args,slice.duration,slice.cpuStart,slice.cpuDuration);newSlice.didNotFinish=slice.didNotFinish;return newSlice;},*findTopmostSlicesInThisContainer(eventPredicate,opt_this){if(!this.haveTopLevelSlicesBeenBuilt){throw new Error('Nope');}
-for(const s of this.topLevelSlices){yield*s.findTopmostSlicesRelativeToThisSlice(eventPredicate);}},*childEvents(){yield*this.slices;},*childEventContainers(){},getSlicesOfName(title){const slices=[];for(let i=0;i<this.slices.length;i++){if(this.slices[i].title===title){slices.push(this.slices[i]);}}
-return slices;},iterSlicesInTimeRange(callback,start,end){const ret=[];tr.b.iterateOverIntersectingIntervals(this.topLevelSlices,function(s){return s.start;},function(s){return s.duration;},start,end,function(topLevelSlice){callback(topLevelSlice);for(const slice of topLevelSlice.enumerateAllDescendents()){callback(slice);}});return ret;},findFirstSlice(){if(!this.haveTopLevelSlicesBeenBuilt){throw new Error('Nope');}
-if(0===this.slices.length)return undefined;return this.slices[0];},findSliceAtTs(ts){if(!this.haveTopLevelSlicesBeenBuilt)throw new Error('Nope');let i=tr.b.findIndexInSortedClosedIntervals(this.topLevelSlices,getSliceLo,getSliceHi,ts);if(i===-1||i===this.topLevelSlices.length){return undefined;}
-let curSlice=this.topLevelSlices[i];while(true){i=tr.b.findIndexInSortedClosedIntervals(curSlice.subSlices,getSliceLo,getSliceHi,ts);if(i===-1||i===curSlice.subSlices.length){return curSlice;}
-curSlice=curSlice.subSlices[i];}},findNextSliceAfter(ts,refGuid){let i=tr.b.findLowIndexInSortedArray(this.slices,getSliceLo,ts);if(i===this.slices.length){return undefined;}
-for(;i<this.slices.length;i++){const slice=this.slices[i];if(slice.start>ts)return slice;if(slice.guid<=refGuid)continue;return slice;}
-return undefined;},hasCpuDuration_(){if(this.slices.some(function(slice){return slice.cpuDuration!==undefined;}))return true;return false;},createSubSlices(){this.haveTopLevelSlicesBeenBuilt=true;this.createSubSlicesImpl_();if(!this.hasCpuDuration_()&&this.parentContainer.timeSlices){this.addCpuTimeToSubslices_(this.parentContainer.timeSlices);}
-this.slices.forEach(function(slice){let selfTime=slice.duration;for(let i=0;i<slice.subSlices.length;i++){selfTime-=slice.subSlices[i].duration;}
-slice.selfTime=selfTime;if(slice.cpuDuration===undefined)return;let cpuSelfTime=slice.cpuDuration;for(let i=0;i<slice.subSlices.length;i++){if(slice.subSlices[i].cpuDuration!==undefined){cpuSelfTime-=slice.subSlices[i].cpuDuration;}}
-slice.cpuSelfTime=cpuSelfTime;});},createSubSlicesImpl_(){const precisionUnit=this.model.intrinsicTimeUnit;function addSliceIfBounds(parent,child){if(parent.bounds(child,precisionUnit)){child.parentSlice=parent;if(parent.subSlices===undefined){parent.subSlices=[];}
-parent.subSlices.push(child);return true;}
-return false;}
-if(!this.slices.length)return;const ops=[];for(let i=0;i<this.slices.length;i++){if(this.slices[i].subSlices){this.slices[i].subSlices.splice(0,this.slices[i].subSlices.length);}
-ops.push(i);}
-const originalSlices=this.slices;ops.sort(function(ix,iy){const x=originalSlices[ix];const y=originalSlices[iy];if(x.start!==y.start){return x.start-y.start;}
-return ix-iy;});const slices=new Array(this.slices.length);for(let i=0;i<ops.length;i++){slices[i]=originalSlices[ops[i]];}
-let rootSlice=slices[0];this.topLevelSlices=[];this.topLevelSlices.push(rootSlice);rootSlice.isTopLevel=true;for(let i=1;i<slices.length;i++){const slice=slices[i];while(rootSlice!==undefined&&(!addSliceIfBounds(rootSlice,slice))){rootSlice=rootSlice.parentSlice;}
-if(rootSlice===undefined){this.topLevelSlices.push(slice);slice.isTopLevel=true;}
-rootSlice=slice;}
-this.slices=slices;},addCpuTimeToSubslices_(timeSlices){const SCHEDULING_STATE=tr.model.SCHEDULING_STATE;let sliceIdx=0;timeSlices.forEach(function(timeSlice){if(timeSlice.schedulingState===SCHEDULING_STATE.RUNNING){while(sliceIdx<this.topLevelSlices.length){if(this.addCpuTimeToSubslice_(this.topLevelSlices[sliceIdx],timeSlice)){sliceIdx++;}else{break;}}}},this);},addCpuTimeToSubslice_(slice,timeSlice){if(slice.start>timeSlice.end||slice.end<timeSlice.start){return slice.end<=timeSlice.end;}
-let duration=timeSlice.duration;if(slice.start>timeSlice.start){duration-=slice.start-timeSlice.start;}
-if(timeSlice.end>slice.end){duration-=timeSlice.end-slice.end;}
-if(slice.cpuDuration){slice.cpuDuration+=duration;}else{slice.cpuDuration=duration;}
-for(let i=0;i<slice.subSlices.length;i++){this.addCpuTimeToSubslice_(slice.subSlices[i],timeSlice);}
-return slice.end<=timeSlice.end;}};SliceGroup.merge=function(groupA,groupB){if(groupA.openPartialSlices_.length>0){throw new Error('groupA has open partial slices');}
-if(groupB.openPartialSlices_.length>0){throw new Error('groupB has open partial slices');}
-if(groupA.parentContainer!==groupB.parentContainer){throw new Error('Different parent threads. Cannot merge');}
-if(groupA.sliceConstructor!==groupB.sliceConstructor){throw new Error('Different slice constructors. Cannot merge');}
-const result=new SliceGroup(groupA.parentContainer,groupA.sliceConstructor,groupA.name_);const slicesA=groupA.slices;const slicesB=groupB.slices;let idxA=0;let idxB=0;const openA=[];const openB=[];const splitOpenSlices=function(when){for(let i=0;i<openB.length;i++){const oldSlice=openB[i];const oldEnd=oldSlice.end;if(when<oldSlice.start||oldEnd<when){throw new Error('slice should not be split');}
-const newSlice=result.copySlice(oldSlice);newSlice.start=when;newSlice.duration=oldEnd-when;if(newSlice.title.indexOf(' (cont.)')===-1){newSlice.title+=' (cont.)';}
-oldSlice.duration=when-oldSlice.start;openB[i]=newSlice;result.pushSlice(newSlice);}};const closeOpenSlices=function(upTo){while(openA.length>0||openB.length>0){const nextA=openA[openA.length-1];const nextB=openB[openB.length-1];const endA=nextA&&nextA.end;const endB=nextB&&nextB.end;if((endA===undefined||endA>upTo)&&(endB===undefined||endB>upTo)){return;}
-if(endB===undefined||endA<endB){splitOpenSlices(endA);openA.pop();}else{openB.pop();}}};while(idxA<slicesA.length||idxB<slicesB.length){const sA=slicesA[idxA];const sB=slicesB[idxB];let nextSlice;let isFromB;if(sA===undefined||(sB!==undefined&&sA.start>sB.start)){nextSlice=result.copySlice(sB);isFromB=true;idxB++;}else{nextSlice=result.copySlice(sA);isFromB=false;idxA++;}
-closeOpenSlices(nextSlice.start);result.pushSlice(nextSlice);if(isFromB){openB.push(nextSlice);}else{splitOpenSlices(nextSlice.start);openA.push(nextSlice);}}
-closeOpenSlices();return result;};return{SliceGroup,};});'use strict';tr.exportTo('tr.model',function(){const AsyncSlice=tr.model.AsyncSlice;const AsyncSliceGroup=tr.model.AsyncSliceGroup;const SliceGroup=tr.model.SliceGroup;const ThreadSlice=tr.model.ThreadSlice;const ThreadTimeSlice=tr.model.ThreadTimeSlice;function Thread(parent,tid){if(!parent){throw new Error('Parent must be provided.');}
-tr.model.EventContainer.call(this);this.parent=parent;this.sortIndex=0;this.tid=tid;this.name=undefined;this.samples_=undefined;this.sliceGroup=new SliceGroup(this,ThreadSlice,'slices');this.timeSlices=undefined;this.kernelSliceGroup=new SliceGroup(this,ThreadSlice,'kernel-slices');this.asyncSliceGroup=new AsyncSliceGroup(this,'async-slices');}
-Thread.prototype={__proto__:tr.model.EventContainer.prototype,get model(){return this.parent.model;},get stableId(){return this.parent.stableId+'.'+this.tid;},compareTo(that){return Thread.compare(this,that);},*childEventContainers(){if(this.sliceGroup.length){yield this.sliceGroup;}
-if(this.kernelSliceGroup.length){yield this.kernelSliceGroup;}
-if(this.asyncSliceGroup.length){yield this.asyncSliceGroup;}},*childEvents(){if(this.timeSlices){yield*this.timeSlices;}},iterateAllPersistableObjects(cb){cb(this);if(this.sliceGroup.length){cb(this.sliceGroup);}
-this.asyncSliceGroup.viewSubGroups.forEach(cb);},shiftTimestampsForward(amount){this.sliceGroup.shiftTimestampsForward(amount);if(this.timeSlices){for(let i=0;i<this.timeSlices.length;i++){const slice=this.timeSlices[i];slice.start+=amount;}}
-this.kernelSliceGroup.shiftTimestampsForward(amount);this.asyncSliceGroup.shiftTimestampsForward(amount);},get isEmpty(){if(this.sliceGroup.length)return false;if(this.sliceGroup.openSliceCount)return false;if(this.timeSlices&&this.timeSlices.length)return false;if(this.kernelSliceGroup.length)return false;if(this.asyncSliceGroup.length)return false;if(this.samples_.length)return false;return true;},updateBounds(){this.bounds.reset();this.sliceGroup.updateBounds();this.bounds.addRange(this.sliceGroup.bounds);this.kernelSliceGroup.updateBounds();this.bounds.addRange(this.kernelSliceGroup.bounds);this.asyncSliceGroup.updateBounds();this.bounds.addRange(this.asyncSliceGroup.bounds);if(this.timeSlices&&this.timeSlices.length){this.bounds.addValue(this.timeSlices[0].start);this.bounds.addValue(this.timeSlices[this.timeSlices.length-1].end);}
-if(this.samples_&&this.samples_.length){this.bounds.addValue(this.samples_[0].start);this.bounds.addValue(this.samples_[this.samples_.length-1].end);}},addCategoriesToDict(categoriesDict){for(let i=0;i<this.sliceGroup.length;i++){categoriesDict[this.sliceGroup.slices[i].category]=true;}
-for(let i=0;i<this.kernelSliceGroup.length;i++){categoriesDict[this.kernelSliceGroup.slices[i].category]=true;}
-for(let i=0;i<this.asyncSliceGroup.length;i++){categoriesDict[this.asyncSliceGroup.slices[i].category]=true;}
-if(this.samples_){for(let i=0;i<this.samples_.length;i++){categoriesDict[this.samples_[i].category]=true;}}},autoCloseOpenSlices(){this.sliceGroup.autoCloseOpenSlices();this.asyncSliceGroup.autoCloseOpenSlices();this.kernelSliceGroup.autoCloseOpenSlices();},mergeKernelWithUserland(){if(this.kernelSliceGroup.length>0){const newSlices=SliceGroup.merge(this.sliceGroup,this.kernelSliceGroup);this.sliceGroup.slices=newSlices.slices;this.kernelSliceGroup=new SliceGroup(this);this.updateBounds();}},createSubSlices(){this.sliceGroup.createSubSlices();this.samples_=this.parent.model.samples.filter(sample=>sample.thread===this);},get userFriendlyName(){return this.name||this.tid;},get userFriendlyDetails(){return'tid: '+this.tid+
-(this.name?', name: '+this.name:'');},getSettingsKey(){if(!this.name)return undefined;const parentKey=this.parent.getSettingsKey();if(!parentKey)return undefined;return parentKey+'.'+this.name;},getProcess(){return this.parent;},indexOfTimeSlice(timeSlice){const i=tr.b.findLowIndexInSortedArray(this.timeSlices,function(slice){return slice.start;},timeSlice.start);if(this.timeSlices[i]!==timeSlice)return undefined;return i;},getCpuStatsForRange(range){const stats={};stats.total=0;if(!this.timeSlices)return stats;function addStatsForSlice(threadTimeSlice){const freqRange=tr.b.math.Range.fromExplicitRange(threadTimeSlice.start,threadTimeSlice.end);const intersection=freqRange.findIntersection(range);if(threadTimeSlice.schedulingState===tr.model.SCHEDULING_STATE.RUNNING){const cpu=threadTimeSlice.cpuOnWhichThreadWasRunning;if(!(cpu.cpuNumber in stats)){stats[cpu.cpuNumber]=0;}
-stats[cpu.cpuNumber]+=intersection.duration;stats.total+=intersection.duration;}}
-tr.b.iterateOverIntersectingIntervals(this.timeSlices,function(x){return x.start;},function(x){return x.end;},range.min,range.max,addStatsForSlice);return stats;},getSchedulingStatsForRange(start,end){const stats={};if(!this.timeSlices)return stats;function addStatsForSlice(threadTimeSlice){const overlapStart=Math.max(threadTimeSlice.start,start);const overlapEnd=Math.min(threadTimeSlice.end,end);const schedulingState=threadTimeSlice.schedulingState;if(!(schedulingState in stats))stats[schedulingState]=0;stats[schedulingState]+=overlapEnd-overlapStart;}
-tr.b.iterateOverIntersectingIntervals(this.timeSlices,function(x){return x.start;},function(x){return x.end;},start,end,addStatsForSlice);return stats;},get samples(){return this.samples_;},get type(){const re=/^[^0-9|\/]+/;const matches=re.exec(this.name);if(matches&&matches[0])return matches[0];throw new Error('Could not determine thread type for thread name '+
-this.name);}};Thread.compare=function(x,y){let tmp=x.parent.compareTo(y.parent);if(tmp)return tmp;tmp=x.sortIndex-y.sortIndex;if(tmp)return tmp;if(x.name!==undefined){if(y.name!==undefined){tmp=x.name.localeCompare(y.name);}else{tmp=-1;}}else if(y.name!==undefined){tmp=1;}
-if(tmp)return tmp;return x.tid-y.tid;};return{Thread,};});'use strict';tr.exportTo('tr.model',function(){const Thread=tr.model.Thread;const Counter=tr.model.Counter;function ProcessBase(model){if(!model){throw new Error('Must provide a model');}
-tr.model.EventContainer.call(this);this.model=model;this.threads={};this.counters={};this.objects=new tr.model.ObjectCollection(this);this.sortIndex=0;}
-ProcessBase.compare=function(x,y){return x.sortIndex-y.sortIndex;};ProcessBase.prototype={__proto__:tr.model.EventContainer.prototype,get stableId(){throw new Error('Not implemented');},*childEventContainers(){yield*Object.values(this.threads);yield*Object.values(this.counters);yield this.objects;},iterateAllPersistableObjects(cb){cb(this);for(const tid in this.threads){this.threads[tid].iterateAllPersistableObjects(cb);}},get numThreads(){let n=0;for(const p in this.threads){n++;}
-return n;},shiftTimestampsForward(amount){for(const child of this.childEventContainers()){child.shiftTimestampsForward(amount);}},autoCloseOpenSlices(){for(const tid in this.threads){const thread=this.threads[tid];thread.autoCloseOpenSlices();}},autoDeleteObjects(maxTimestamp){this.objects.autoDeleteObjects(maxTimestamp);},preInitializeObjects(){this.objects.preInitializeAllObjects();},initializeObjects(){this.objects.initializeAllObjects();},mergeKernelWithUserland(){for(const tid in this.threads){const thread=this.threads[tid];thread.mergeKernelWithUserland();}},updateBounds(){this.bounds.reset();for(const tid in this.threads){this.threads[tid].updateBounds();this.bounds.addRange(this.threads[tid].bounds);}
-for(const id in this.counters){this.counters[id].updateBounds();this.bounds.addRange(this.counters[id].bounds);}
-this.objects.updateBounds();this.bounds.addRange(this.objects.bounds);},addCategoriesToDict(categoriesDict){for(const tid in this.threads){this.threads[tid].addCategoriesToDict(categoriesDict);}
-for(const id in this.counters){categoriesDict[this.counters[id].category]=true;}
-this.objects.addCategoriesToDict(categoriesDict);},findAllThreadsMatching(predicate,opt_this){const threads=[];for(const tid in this.threads){const thread=this.threads[tid];if(predicate.call(opt_this,thread)){threads.push(thread);}}
-return threads;},findAllThreadsNamed(name){const threads=this.findAllThreadsMatching(function(thread){if(!thread.name)return false;return thread.name===name;});return threads;},findAtMostOneThreadNamed(name){const threads=this.findAllThreadsNamed(name);if(threads.length===0)return undefined;if(threads.length>1){throw new Error('Expected no more than one '+name);}
-return threads[0];},pruneEmptyContainers(){const threadsToKeep={};for(const tid in this.threads){const thread=this.threads[tid];if(!thread.isEmpty){threadsToKeep[tid]=thread;}}
-this.threads=threadsToKeep;},getThread(tid){return this.threads[tid];},getOrCreateThread(tid){if(!this.threads[tid]){this.threads[tid]=new Thread(this,tid);}
-return this.threads[tid];},getOrCreateCounter(cat,name){const id=cat+'.'+name;if(!this.counters[id]){this.counters[id]=new Counter(this,id,cat,name);}
-return this.counters[id];},getSettingsKey(){throw new Error('Not implemented');},createSubSlices(){for(const tid in this.threads){this.threads[tid].createSubSlices();}}};return{ProcessBase,};});'use strict';tr.exportTo('tr.model',function(){const ColorScheme=tr.b.ColorScheme;const Counter=tr.model.Counter;const CpuSlice=tr.model.CpuSlice;function Cpu(kernel,number){if(kernel===undefined||number===undefined){throw new Error('Missing arguments');}
-this.kernel=kernel;this.cpuNumber=number;this.slices=[];this.counters={};this.bounds_=new tr.b.math.Range();this.samples_=undefined;this.lastActiveTimestamp_=undefined;this.lastActiveThread_=undefined;this.lastActiveName_=undefined;this.lastActiveArgs_=undefined;}
-Cpu.prototype={__proto__:tr.model.EventContainer.prototype,get samples(){return this.samples_;},get userFriendlyName(){return'CPU '+this.cpuNumber;},*findTopmostSlicesInThisContainer(eventPredicate,opt_this){for(const s of this.slices){yield*s.findTopmostSlicesRelativeToThisSlice(eventPredicate,opt_this);}},*childEvents(){yield*this.slices;if(this.samples_){yield*this.samples_;}},*childEventContainers(){yield*Object.values(this.counters);},getOrCreateCounter(cat,name){const id=cat+'.'+name;if(!this.counters[id]){this.counters[id]=new Counter(this,id,cat,name);}
-return this.counters[id];},getCounter(cat,name){const id=cat+'.'+name;if(!this.counters[id]){return undefined;}
-return this.counters[id];},shiftTimestampsForward(amount){for(let sI=0;sI<this.slices.length;sI++){this.slices[sI].start=(this.slices[sI].start+amount);}
-for(const id in this.counters){this.counters[id].shiftTimestampsForward(amount);}},updateBounds(){this.bounds_.reset();if(this.slices.length){this.bounds_.addValue(this.slices[0].start);this.bounds_.addValue(this.slices[this.slices.length-1].end);}
-for(const id in this.counters){this.counters[id].updateBounds();this.bounds_.addRange(this.counters[id].bounds);}
-if(this.samples_&&this.samples_.length){this.bounds_.addValue(this.samples_[0].start);this.bounds_.addValue(this.samples_[this.samples_.length-1].end);}},createSubSlices(){this.samples_=this.kernel.model.samples.filter(function(sample){return sample.cpu===this;},this);},addCategoriesToDict(categoriesDict){for(let i=0;i<this.slices.length;i++){categoriesDict[this.slices[i].category]=true;}
-for(const id in this.counters){categoriesDict[this.counters[id].category]=true;}
-for(let i=0;i<this.samples_.length;i++){categoriesDict[this.samples_[i].category]=true;}},indexOf(cpuSlice){const i=tr.b.findLowIndexInSortedArray(this.slices,function(slice){return slice.start;},cpuSlice.start);if(this.slices[i]!==cpuSlice)return undefined;return i;},closeActiveThread(endTimestamp,args){if(this.lastActiveThread_===undefined||this.lastActiveThread_===0){return;}
-if(endTimestamp<this.lastActiveTimestamp_){throw new Error('The end timestamp of a thread running on CPU '+
-this.cpuNumber+' is before its start timestamp.');}
-for(const key in args){this.lastActiveArgs_[key]=args[key];}
-const duration=endTimestamp-this.lastActiveTimestamp_;const slice=new tr.model.CpuSlice('',this.lastActiveName_,ColorScheme.getColorIdForGeneralPurposeString(this.lastActiveName_),this.lastActiveTimestamp_,this.lastActiveArgs_,duration);slice.cpu=this;this.slices.push(slice);this.lastActiveTimestamp_=undefined;this.lastActiveThread_=undefined;this.lastActiveName_=undefined;this.lastActiveArgs_=undefined;},switchActiveThread(timestamp,oldThreadArgs,newThreadId,newThreadName,newThreadArgs){this.closeActiveThread(timestamp,oldThreadArgs);this.lastActiveTimestamp_=timestamp;this.lastActiveThread_=newThreadId;this.lastActiveName_=newThreadName;this.lastActiveArgs_=newThreadArgs;},getFreqStatsForRange(range){const stats={};function addStatsForFreq(freqSample,index){const freqEnd=(index<freqSample.series_.length-1)?freqSample.series_.samples_[index+1].timestamp:range.max;const freqRange=tr.b.math.Range.fromExplicitRange(freqSample.timestamp,freqEnd);const intersection=freqRange.findIntersection(range);if(!(freqSample.value in stats)){stats[freqSample.value]=0;}
-stats[freqSample.value]+=intersection.duration;}
-const freqCounter=this.getCounter('','Clock Frequency');if(freqCounter!==undefined){const freqSeries=freqCounter.getSeries(0);if(!freqSeries)return;tr.b.iterateOverIntersectingIntervals(freqSeries.samples_,function(x){return x.timestamp;},function(x,index){if(index<freqSeries.length-1){return freqSeries.samples_[index+1].timestamp;}
-return range.max;},range.min,range.max,addStatsForFreq);}
-return stats;}};Cpu.compare=function(x,y){return x.cpuNumber-y.cpuNumber;};return{Cpu,};});'use strict';tr.exportTo('tr.model',function(){const Event=tr.model.Event;const EventRegistry=tr.model.EventRegistry;function PowerSample(series,start,powerInW){Event.call(this);this.series_=series;this.start_=parseFloat(start);this.powerInW_=parseFloat(powerInW);}
-PowerSample.prototype={__proto__:Event.prototype,get series(){return this.series_;},get start(){return this.start_;},set start(value){this.start_=value;},get powerInW(){return this.powerInW_;},set powerInW(value){this.powerInW_=value;},addBoundsToRange(range){range.addValue(this.start);}};EventRegistry.register(PowerSample,{name:'powerSample',pluralName:'powerSamples'});return{PowerSample,};});'use strict';tr.exportTo('tr.model',function(){const PowerSample=tr.model.PowerSample;function PowerSeries(device){tr.model.EventContainer.call(this);this.device_=device;this.samples_=[];}
-PowerSeries.prototype={__proto__:tr.model.EventContainer.prototype,get device(){return this.device_;},get samples(){return this.samples_;},get stableId(){return this.device_.stableId+'.PowerSeries';},addPowerSample(ts,val){const sample=new PowerSample(this,ts,val);this.samples_.push(sample);return sample;},getEnergyConsumedInJ(start,end){const measurementRange=tr.b.math.Range.fromExplicitRange(start,end);let energyConsumedInJ=0;let startIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,start)-1;const endIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,end);if(startIndex<0){startIndex=0;}
-for(let i=startIndex;i<endIndex;i++){const sample=this.samples[i];const nextSample=this.samples[i+1];const sampleRange=new tr.b.math.Range();sampleRange.addValue(sample.start);sampleRange.addValue(nextSample?nextSample.start:sample.start);const intersectionRangeInMs=measurementRange.findIntersection(sampleRange);const durationInS=tr.b.convertUnit(intersectionRangeInMs.duration,tr.b.UnitPrefixScale.METRIC.MILLI,tr.b.UnitPrefixScale.METRIC.NONE);energyConsumedInJ+=durationInS*sample.powerInW;}
-return energyConsumedInJ;},getSamplesWithinRange(start,end){const startIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,start);const endIndex=tr.b.findLowIndexInSortedArray(this.samples,x=>x.start,end);return this.samples.slice(startIndex,endIndex);},shiftTimestampsForward(amount){for(let i=0;i<this.samples_.length;++i){this.samples_[i].start+=amount;}},updateBounds(){this.bounds.reset();if(this.samples_.length===0)return;this.bounds.addValue(this.samples_[0].start);this.bounds.addValue(this.samples_[this.samples_.length-1].start);},*childEvents(){yield*this.samples_;},};return{PowerSeries,};});'use strict';tr.exportTo('tr.model',function(){function Device(model){if(!model){throw new Error('Must provide a model.');}
-tr.model.EventContainer.call(this);this.powerSeries_=undefined;this.cpuUsageSeries_=undefined;this.vSyncTimestamps_=[];}
-Device.compare=function(x,y){return x.guid-y.guid;};Device.prototype={__proto__:tr.model.EventContainer.prototype,compareTo(that){return Device.compare(this,that);},get userFriendlyName(){return'Device';},get userFriendlyDetails(){return'Device';},get stableId(){return'Device';},getSettingsKey(){return'device';},get powerSeries(){return this.powerSeries_;},set powerSeries(powerSeries){this.powerSeries_=powerSeries;},get cpuUsageSeries(){return this.cpuUsageSeries_;},set cpuUsageSeries(cpuUsageSeries){this.cpuUsageSeries_=cpuUsageSeries;},get vSyncTimestamps(){return this.vSyncTimestamps_;},set vSyncTimestamps(value){this.vSyncTimestamps_=value;},updateBounds(){this.bounds.reset();for(const child of this.childEventContainers()){child.updateBounds();this.bounds.addRange(child.bounds);}},shiftTimestampsForward(amount){for(const child of this.childEventContainers()){child.shiftTimestampsForward(amount);}
-for(let i=0;i<this.vSyncTimestamps_.length;i++){this.vSyncTimestamps_[i]+=amount;}},addCategoriesToDict(categoriesDict){},*childEventContainers(){if(this.powerSeries_){yield this.powerSeries_;}
-if(this.cpuUsageSeries_){yield this.cpuUsageSeries_;}}};return{Device,};});'use strict';tr.exportTo('tr.model',function(){function FlowEvent(category,id,title,colorId,start,args,opt_duration){tr.model.TimedEvent.call(this,start);this.category=category||'';this.title=title;this.colorId=colorId;this.start=start;this.args=args;this.id=id;this.startSlice=undefined;this.endSlice=undefined;this.startStackFrame=undefined;this.endStackFrame=undefined;if(opt_duration!==undefined){this.duration=opt_duration;}}
-FlowEvent.prototype={__proto__:tr.model.TimedEvent.prototype,get userFriendlyName(){return'Flow event named '+this.title+' at '+
-tr.b.Unit.byName.timeStampInMs.format(this.timestamp);}};tr.model.EventRegistry.register(FlowEvent,{name:'flowEvent',pluralName:'flowEvents'});return{FlowEvent,};});'use strict';tr.exportTo('tr.model',function(){function ContainerMemoryDump(start){tr.model.TimedEvent.call(this,start);this.levelOfDetail=undefined;this.memoryAllocatorDumps_=undefined;this.memoryAllocatorDumpsByFullName_=undefined;}
-ContainerMemoryDump.LevelOfDetail={BACKGROUND:0,LIGHT:1,DETAILED:2};ContainerMemoryDump.prototype={__proto__:tr.model.TimedEvent.prototype,shiftTimestampsForward(amount){this.start+=amount;},get memoryAllocatorDumps(){return this.memoryAllocatorDumps_;},set memoryAllocatorDumps(memoryAllocatorDumps){this.memoryAllocatorDumps_=memoryAllocatorDumps;this.forceRebuildingMemoryAllocatorDumpByFullNameIndex();},getMemoryAllocatorDumpByFullName(fullName){if(this.memoryAllocatorDumps_===undefined)return undefined;if(this.memoryAllocatorDumpsByFullName_===undefined){const index={};function addDumpsToIndex(dumps){dumps.forEach(function(dump){index[dump.fullName]=dump;addDumpsToIndex(dump.children);});}
-addDumpsToIndex(this.memoryAllocatorDumps_);this.memoryAllocatorDumpsByFullName_=index;}
-return this.memoryAllocatorDumpsByFullName_[fullName];},forceRebuildingMemoryAllocatorDumpByFullNameIndex(){this.memoryAllocatorDumpsByFullName_=undefined;},iterateRootAllocatorDumps(fn,opt_this){if(this.memoryAllocatorDumps===undefined)return;this.memoryAllocatorDumps.forEach(fn,opt_this||this);}};return{ContainerMemoryDump,};});'use strict';tr.exportTo('tr.model',function(){function MemoryAllocatorDump(containerMemoryDump,fullName,opt_guid){this.fullName=fullName;this.parent=undefined;this.children=[];this.numerics={};this.diagnostics={};this.containerMemoryDump=containerMemoryDump;this.owns=undefined;this.ownedBy=[];this.ownedBySiblingSizes=new Map();this.retains=[];this.retainedBy=[];this.weak=false;this.infos=[];this.guid=opt_guid;}
-MemoryAllocatorDump.SIZE_NUMERIC_NAME='size';MemoryAllocatorDump.EFFECTIVE_SIZE_NUMERIC_NAME='effective_size';MemoryAllocatorDump.RESIDENT_SIZE_NUMERIC_NAME='resident_size';MemoryAllocatorDump.DISPLAYED_SIZE_NUMERIC_NAME=MemoryAllocatorDump.EFFECTIVE_SIZE_NUMERIC_NAME;MemoryAllocatorDump.prototype={get name(){return this.fullName.substring(this.fullName.lastIndexOf('/')+1);},get quantifiedName(){return'\''+this.fullName+'\' in '+
-this.containerMemoryDump.containerName;},getDescendantDumpByFullName(fullName){return this.containerMemoryDump.getMemoryAllocatorDumpByFullName(this.fullName+'/'+fullName);},isDescendantOf(otherDump){if(this===otherDump)return true;if(this.parent===undefined)return false;return this.parent.isDescendantOf(otherDump);},addNumeric(name,numeric){if(!(numeric instanceof tr.b.Scalar)){throw new Error('Numeric value must be an instance of Scalar.');}
-if(name in this.numerics){throw new Error('Duplicate numeric name: '+name+'.');}
-this.numerics[name]=numeric;},addDiagnostic(name,text){if(typeof text!=='string'){throw new Error('Diagnostic text must be a string.');}
-if(name in this.diagnostics){throw new Error('Duplicate diagnostic name: '+name+'.');}
-this.diagnostics[name]=text;},aggregateNumericsRecursively(opt_model){const numericNames=new Set();this.children.forEach(function(child){child.aggregateNumericsRecursively(opt_model);for(const[item,value]of Object.entries(child.numerics)){numericNames.add(item,value);}},this);numericNames.forEach(function(numericName){if(numericName===MemoryAllocatorDump.SIZE_NUMERIC_NAME||numericName===MemoryAllocatorDump.EFFECTIVE_SIZE_NUMERIC_NAME||this.numerics[numericName]!==undefined){return;}
-this.numerics[numericName]=MemoryAllocatorDump.aggregateNumerics(this.children.map(function(child){return child.numerics[numericName];}),opt_model);},this);}};MemoryAllocatorDump.aggregateNumerics=function(numerics,opt_model){let shouldLogWarning=!!opt_model;let aggregatedUnit=undefined;let aggregatedValue=0;numerics.forEach(function(numeric){if(numeric===undefined)return;const unit=numeric.unit;if(aggregatedUnit===undefined){aggregatedUnit=unit;}else if(aggregatedUnit!==unit){if(shouldLogWarning){opt_model.importWarning({type:'numeric_parse_error',message:'Multiple units provided for numeric: \''+
-aggregatedUnit.unitName+'\' and \''+unit.unitName+'\'.'});shouldLogWarning=false;}
-aggregatedUnit=tr.b.Unit.byName.unitlessNumber_smallerIsBetter;}
-aggregatedValue+=numeric.value;},this);if(aggregatedUnit===undefined)return undefined;return new tr.b.Scalar(aggregatedUnit,aggregatedValue);};function MemoryAllocatorDumpLink(source,target,opt_importance){this.source=source;this.target=target;this.importance=opt_importance;this.size=undefined;}
-const MemoryAllocatorDumpInfoType={PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN:0,PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER:1};return{MemoryAllocatorDump,MemoryAllocatorDumpLink,MemoryAllocatorDumpInfoType,};});'use strict';tr.exportTo('tr.model',function(){function GlobalMemoryDump(model,start){tr.model.ContainerMemoryDump.call(this,start);this.model=model;this.processMemoryDumps={};}
-const SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.SIZE_NUMERIC_NAME;const EFFECTIVE_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.EFFECTIVE_SIZE_NUMERIC_NAME;const MemoryAllocatorDumpInfoType=tr.model.MemoryAllocatorDumpInfoType;const PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN=MemoryAllocatorDumpInfoType.PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN;const PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER=MemoryAllocatorDumpInfoType.PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER;function getSize(dump){const numeric=dump.numerics[SIZE_NUMERIC_NAME];if(numeric===undefined)return 0;return numeric.value;}
-function hasSize(dump){return dump.numerics[SIZE_NUMERIC_NAME]!==undefined;}
-function optional(value,defaultValue){if(value===undefined)return defaultValue;return value;}
-GlobalMemoryDump.prototype={__proto__:tr.model.ContainerMemoryDump.prototype,get userFriendlyName(){return'Global memory dump at '+
-tr.b.Unit.byName.timeStampInMs.format(this.start);},get containerName(){return'global space';},finalizeGraph(){this.removeWeakDumps();this.setUpTracingOverheadOwnership();this.aggregateNumerics();this.calculateSizes();this.calculateEffectiveSizes();this.discountTracingOverheadFromVmRegions();this.forceRebuildingMemoryAllocatorDumpByFullNameIndices();},removeWeakDumps(){this.traverseAllocatorDumpsInDepthFirstPreOrder(function(dump){if(dump.weak)return;if((dump.owns!==undefined&&dump.owns.target.weak)||(dump.parent!==undefined&&dump.parent.weak)){dump.weak=true;}});function removeWeakDumpsFromListRecursively(dumps){tr.b.inPlaceFilter(dumps,function(dump){if(dump.weak){return false;}
-removeWeakDumpsFromListRecursively(dump.children);tr.b.inPlaceFilter(dump.ownedBy,function(ownershipLink){return!ownershipLink.source.weak;});return true;});}
-this.iterateContainerDumps(function(containerDump){const memoryAllocatorDumps=containerDump.memoryAllocatorDumps;if(memoryAllocatorDumps!==undefined){removeWeakDumpsFromListRecursively(memoryAllocatorDumps);}});},calculateSizes(){this.traverseAllocatorDumpsInDepthFirstPostOrder(this.calculateMemoryAllocatorDumpSize_.bind(this));},calculateMemoryAllocatorDumpSize_(dump){let shouldDefineSize=false;function getDependencySize(dependencyDump){const numeric=dependencyDump.numerics[SIZE_NUMERIC_NAME];if(numeric===undefined)return 0;shouldDefineSize=true;return numeric.value;}
-const sizeNumeric=dump.numerics[SIZE_NUMERIC_NAME];let size=0;let checkDependencySizeIsConsistent=function(){};if(sizeNumeric!==undefined){size=sizeNumeric.value;shouldDefineSize=true;if(sizeNumeric.unit!==tr.b.Unit.byName.sizeInBytes_smallerIsBetter){this.model.importWarning({type:'memory_dump_parse_error',message:'Invalid unit of \'size\' numeric of memory allocator '+'dump '+dump.quantifiedName+': '+
-sizeNumeric.unit.unitName+'.'});}
-checkDependencySizeIsConsistent=function(dependencySize,dependencyInfoType,dependencyName){if(size>=dependencySize)return;this.model.importWarning({type:'memory_dump_parse_error',message:'Size provided by memory allocator dump \''+
-dump.fullName+'\''+
-tr.b.Unit.byName.sizeInBytes.format(size)+') is less than '+dependencyName+' ('+
-tr.b.Unit.byName.sizeInBytes.format(dependencySize)+').'});dump.infos.push({type:dependencyInfoType,providedSize:size,dependencySize});}.bind(this);}
-let aggregatedChildrenSize=0;const allOverlaps={};dump.children.forEach(function(childDump){function aggregateDescendantDump(descendantDump){const ownedDumpLink=descendantDump.owns;if(ownedDumpLink!==undefined&&ownedDumpLink.target.isDescendantOf(dump)){let ownedChildDump=ownedDumpLink.target;while(ownedChildDump.parent!==dump){ownedChildDump=ownedChildDump.parent;}
-if(childDump!==ownedChildDump){const ownedBySiblingSize=getDependencySize(descendantDump);if(ownedBySiblingSize>0){const previousTotalOwnedBySiblingSize=ownedChildDump.ownedBySiblingSizes.get(childDump)||0;const updatedTotalOwnedBySiblingSize=previousTotalOwnedBySiblingSize+ownedBySiblingSize;ownedChildDump.ownedBySiblingSizes.set(childDump,updatedTotalOwnedBySiblingSize);}}
-return;}
-if(descendantDump.children.length===0){aggregatedChildrenSize+=getDependencySize(descendantDump);return;}
-descendantDump.children.forEach(aggregateDescendantDump);}
-aggregateDescendantDump(childDump);});checkDependencySizeIsConsistent(aggregatedChildrenSize,PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN,'the aggregated size of its children');let largestOwnerSize=0;dump.ownedBy.forEach(function(ownershipLink){const owner=ownershipLink.source;const ownerSize=getDependencySize(owner);largestOwnerSize=Math.max(largestOwnerSize,ownerSize);});checkDependencySizeIsConsistent(largestOwnerSize,PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER,'the size of its largest owner');if(!shouldDefineSize){delete dump.numerics[SIZE_NUMERIC_NAME];return;}
-size=Math.max(size,aggregatedChildrenSize,largestOwnerSize);dump.numerics[SIZE_NUMERIC_NAME]=new tr.b.Scalar(tr.b.Unit.byName.sizeInBytes_smallerIsBetter,size);if(aggregatedChildrenSize<size&&dump.children!==undefined&&dump.children.length>0){const virtualChild=new tr.model.MemoryAllocatorDump(dump.containerMemoryDump,dump.fullName+'/<unspecified>');virtualChild.parent=dump;dump.children.unshift(virtualChild);virtualChild.numerics[SIZE_NUMERIC_NAME]=new tr.b.Scalar(tr.b.Unit.byName.sizeInBytes_smallerIsBetter,size-aggregatedChildrenSize);}},calculateEffectiveSizes(){this.traverseAllocatorDumpsInDepthFirstPostOrder(this.calculateDumpSubSizes_.bind(this));this.traverseAllocatorDumpsInDepthFirstPostOrder(this.calculateDumpOwnershipCoefficient_.bind(this));this.traverseAllocatorDumpsInDepthFirstPreOrder(this.calculateDumpCumulativeOwnershipCoefficient_.bind(this));this.traverseAllocatorDumpsInDepthFirstPostOrder(this.calculateDumpEffectiveSize_.bind(this));},calculateDumpSubSizes_(dump){if(!hasSize(dump))return;if(dump.children===undefined||dump.children.length===0){const size=getSize(dump);dump.notOwningSubSize_=size;dump.notOwnedSubSize_=size;return;}
-let notOwningSubSize=0;dump.children.forEach(function(childDump){if(childDump.owns!==undefined)return;notOwningSubSize+=optional(childDump.notOwningSubSize_,0);});dump.notOwningSubSize_=notOwningSubSize;let notOwnedSubSize=0;dump.children.forEach(function(childDump){if(childDump.ownedBy.length===0){notOwnedSubSize+=optional(childDump.notOwnedSubSize_,0);return;}
-let largestChildOwnerSize=0;childDump.ownedBy.forEach(function(ownershipLink){largestChildOwnerSize=Math.max(largestChildOwnerSize,getSize(ownershipLink.source));});notOwnedSubSize+=getSize(childDump)-largestChildOwnerSize;});dump.notOwnedSubSize_=notOwnedSubSize;},calculateDumpOwnershipCoefficient_(dump){if(!hasSize(dump))return;if(dump.ownedBy.length===0)return;const owners=dump.ownedBy.map(function(ownershipLink){return{dump:ownershipLink.source,importance:optional(ownershipLink.importance,0),notOwningSubSize:optional(ownershipLink.source.notOwningSubSize_,0)};});owners.sort(function(a,b){if(a.importance===b.importance){return a.notOwningSubSize-b.notOwningSubSize;}
-return b.importance-a.importance;});let currentImportanceStartPos=0;let alreadyAttributedSubSize=0;while(currentImportanceStartPos<owners.length){const currentImportance=owners[currentImportanceStartPos].importance;let nextImportanceStartPos=currentImportanceStartPos+1;while(nextImportanceStartPos<owners.length&&owners[nextImportanceStartPos].importance===currentImportance){nextImportanceStartPos++;}
-let attributedNotOwningSubSize=0;for(let pos=currentImportanceStartPos;pos<nextImportanceStartPos;pos++){const owner=owners[pos];const notOwningSubSize=owner.notOwningSubSize;if(notOwningSubSize>alreadyAttributedSubSize){attributedNotOwningSubSize+=(notOwningSubSize-alreadyAttributedSubSize)/(nextImportanceStartPos-pos);alreadyAttributedSubSize=notOwningSubSize;}
-let owningCoefficient=0;if(notOwningSubSize!==0){owningCoefficient=attributedNotOwningSubSize/notOwningSubSize;}
-owner.dump.owningCoefficient_=owningCoefficient;}
-currentImportanceStartPos=nextImportanceStartPos;}
-const notOwnedSubSize=optional(dump.notOwnedSubSize_,0);const remainderSubSize=notOwnedSubSize-alreadyAttributedSubSize;let ownedCoefficient=0;if(notOwnedSubSize!==0){ownedCoefficient=remainderSubSize/notOwnedSubSize;}
-dump.ownedCoefficient_=ownedCoefficient;},calculateDumpCumulativeOwnershipCoefficient_(dump){if(!hasSize(dump))return;let cumulativeOwnedCoefficient=optional(dump.ownedCoefficient_,1);const parent=dump.parent;if(dump.parent!==undefined){cumulativeOwnedCoefficient*=dump.parent.cumulativeOwnedCoefficient_;}
-dump.cumulativeOwnedCoefficient_=cumulativeOwnedCoefficient;let cumulativeOwningCoefficient;if(dump.owns!==undefined){cumulativeOwningCoefficient=dump.owningCoefficient_*dump.owns.target.cumulativeOwningCoefficient_;}else if(dump.parent!==undefined){cumulativeOwningCoefficient=dump.parent.cumulativeOwningCoefficient_;}else{cumulativeOwningCoefficient=1;}
-dump.cumulativeOwningCoefficient_=cumulativeOwningCoefficient;},calculateDumpEffectiveSize_(dump){if(!hasSize(dump)){delete dump.numerics[EFFECTIVE_SIZE_NUMERIC_NAME];return;}
-let effectiveSize;if(dump.children===undefined||dump.children.length===0){effectiveSize=getSize(dump)*dump.cumulativeOwningCoefficient_*dump.cumulativeOwnedCoefficient_;}else{effectiveSize=0;dump.children.forEach(function(childDump){if(!hasSize(childDump))return;effectiveSize+=childDump.numerics[EFFECTIVE_SIZE_NUMERIC_NAME].value;});}
-dump.numerics[EFFECTIVE_SIZE_NUMERIC_NAME]=new tr.b.Scalar(tr.b.Unit.byName.sizeInBytes_smallerIsBetter,effectiveSize);},aggregateNumerics(){this.iterateRootAllocatorDumps(function(dump){dump.aggregateNumericsRecursively(this.model);});this.iterateRootAllocatorDumps(this.propagateNumericsAndDiagnosticsRecursively);for(const processMemoryDump of Object.values(this.processMemoryDumps)){processMemoryDump.iterateRootAllocatorDumps(function(dump){dump.aggregateNumericsRecursively(this.model);},this);}},propagateNumericsAndDiagnosticsRecursively(globalAllocatorDump){['numerics','diagnostics'].forEach(function(field){for(const[name,value]of
-Object.entries(globalAllocatorDump[field])){globalAllocatorDump.ownedBy.forEach(function(ownershipLink){const processAllocatorDump=ownershipLink.source;if(processAllocatorDump[field][name]!==undefined){return;}
-processAllocatorDump[field][name]=value;});}});globalAllocatorDump.children.forEach(this.propagateNumericsAndDiagnosticsRecursively,this);},setUpTracingOverheadOwnership(){for(const dump of Object.values(this.processMemoryDumps)){dump.setUpTracingOverheadOwnership(this.model);}},discountTracingOverheadFromVmRegions(){for(const dump of Object.values(this.processMemoryDumps)){dump.discountTracingOverheadFromVmRegions(this.model);}},forceRebuildingMemoryAllocatorDumpByFullNameIndices(){this.iterateContainerDumps(function(containerDump){containerDump.forceRebuildingMemoryAllocatorDumpByFullNameIndex();});},iterateContainerDumps(fn){fn.call(this,this);for(const processDump of Object.values(this.processMemoryDumps)){fn.call(this,processDump);}},iterateAllRootAllocatorDumps(fn){this.iterateContainerDumps(function(containerDump){containerDump.iterateRootAllocatorDumps(fn,this);});},traverseAllocatorDumpsInDepthFirstPostOrder(fn){const visitedDumps=new WeakSet();const openDumps=new WeakSet();function visit(dump){if(visitedDumps.has(dump))return;if(openDumps.has(dump)){throw new Error(dump.userFriendlyName+' contains a cycle');}
-openDumps.add(dump);dump.ownedBy.forEach(function(ownershipLink){visit.call(this,ownershipLink.source);},this);dump.children.forEach(visit,this);fn.call(this,dump);visitedDumps.add(dump);openDumps.delete(dump);}
-this.iterateAllRootAllocatorDumps(visit);},traverseAllocatorDumpsInDepthFirstPreOrder(fn){const visitedDumps=new WeakSet();function visit(dump){if(visitedDumps.has(dump))return;if(dump.owns!==undefined&&!visitedDumps.has(dump.owns.target)){return;}
-if(dump.parent!==undefined&&!visitedDumps.has(dump.parent)){return;}
-fn.call(this,dump);visitedDumps.add(dump);dump.ownedBy.forEach(function(ownershipLink){visit.call(this,ownershipLink.source);},this);dump.children.forEach(visit,this);}
-this.iterateAllRootAllocatorDumps(visit);}};tr.model.EventRegistry.register(GlobalMemoryDump,{name:'globalMemoryDump',pluralName:'globalMemoryDumps'});return{GlobalMemoryDump,};});'use strict';tr.exportTo('tr.model',function(){const InstantEventType={GLOBAL:1,PROCESS:2};function InstantEvent(category,title,colorId,start,args){tr.model.TimedEvent.call(this,start);this.category=category||'';this.title=title;this.colorId=colorId;this.args=args;this.type=undefined;}
-InstantEvent.prototype={__proto__:tr.model.TimedEvent.prototype};function GlobalInstantEvent(category,title,colorId,start,args){InstantEvent.apply(this,arguments);this.type=InstantEventType.GLOBAL;}
-GlobalInstantEvent.prototype={__proto__:InstantEvent.prototype,get userFriendlyName(){return'Global instant event '+this.title+' @ '+
-tr.b.Unit.byName.timeStampInMs.format(start);}};function ProcessInstantEvent(category,title,colorId,start,args){InstantEvent.apply(this,arguments);this.type=InstantEventType.PROCESS;}
-ProcessInstantEvent.prototype={__proto__:InstantEvent.prototype,get userFriendlyName(){return'Process-level instant event '+this.title+' @ '+
-tr.b.Unit.byName.timeStampInMs.format(start);}};tr.model.EventRegistry.register(InstantEvent,{name:'instantEvent',pluralName:'instantEvents'});return{GlobalInstantEvent,ProcessInstantEvent,InstantEventType,InstantEvent,};});'use strict';tr.exportTo('tr.model',function(){const Cpu=tr.model.Cpu;const ProcessBase=tr.model.ProcessBase;function Kernel(model){ProcessBase.call(this,model);this.cpus={};this.softwareMeasuredCpuCount_=undefined;}
-Kernel.compare=function(x,y){return 0;};Kernel.prototype={__proto__:ProcessBase.prototype,compareTo(that){return Kernel.compare(this,that);},get userFriendlyName(){return'Kernel';},get userFriendlyDetails(){return'Kernel';},get stableId(){return'Kernel';},getOrCreateCpu(cpuNumber){if(!this.cpus[cpuNumber]){this.cpus[cpuNumber]=new Cpu(this,cpuNumber);}
-return this.cpus[cpuNumber];},get softwareMeasuredCpuCount(){return this.softwareMeasuredCpuCount_;},set softwareMeasuredCpuCount(softwareMeasuredCpuCount){if(this.softwareMeasuredCpuCount_!==undefined&&this.softwareMeasuredCpuCount_!==softwareMeasuredCpuCount){throw new Error('Cannot change the softwareMeasuredCpuCount once it is set');}
-this.softwareMeasuredCpuCount_=softwareMeasuredCpuCount;},get bestGuessAtCpuCount(){const realCpuCount=Object.keys(this.cpus).length;if(realCpuCount!==0){return realCpuCount;}
-return this.softwareMeasuredCpuCount;},updateBounds(){ProcessBase.prototype.updateBounds.call(this);for(const cpuNumber in this.cpus){const cpu=this.cpus[cpuNumber];cpu.updateBounds();this.bounds.addRange(cpu.bounds);}},createSubSlices(){ProcessBase.prototype.createSubSlices.call(this);for(const cpuNumber in this.cpus){const cpu=this.cpus[cpuNumber];cpu.createSubSlices();}},addCategoriesToDict(categoriesDict){ProcessBase.prototype.addCategoriesToDict.call(this,categoriesDict);for(const cpuNumber in this.cpus){this.cpus[cpuNumber].addCategoriesToDict(categoriesDict);}},getSettingsKey(){return'kernel';},*childEventContainers(){yield*ProcessBase.prototype.childEventContainers.call(this);yield*Object.values(this.cpus);},};return{Kernel,};});'use strict';tr.exportTo('tr.model',function(){function ModelIndices(model){this.flowEventsById_={};model.flowEvents.forEach(function(fe){if(fe.id!==undefined){if(!this.flowEventsById_.hasOwnProperty(fe.id)){this.flowEventsById_[fe.id]=[];}
-this.flowEventsById_[fe.id].push(fe);}},this);}
-ModelIndices.prototype={addEventWithId(id,event){if(!this.flowEventsById_.hasOwnProperty(id)){this.flowEventsById_[id]=[];}
-this.flowEventsById_[id].push(event);},getFlowEventsWithId(id){if(!this.flowEventsById_.hasOwnProperty(id)){return[];}
-return this.flowEventsById_[id];}};return{ModelIndices,};});'use strict';tr.exportTo('tr.model',function(){function ModelStats(){this.traceEventCountsByKey_=new Map();this.allTraceEventStats_=[];this.traceEventStatsInTimeIntervals_=new Map();this.allTraceEventStatsInTimeIntervals_=[];this.hasEventSizesinBytes_=false;this.traceImportDurationMs_=undefined;}
-ModelStats.prototype={TIME_INTERVAL_SIZE_IN_MS:100,willProcessBasicTraceEvent(phase,category,title,ts,opt_eventSizeinBytes){const key=phase+'/'+category+'/'+title;let eventStats=this.traceEventCountsByKey_.get(key);if(eventStats===undefined){eventStats={phase,category,title,numEvents:0,totalEventSizeinBytes:0};this.traceEventCountsByKey_.set(key,eventStats);this.allTraceEventStats_.push(eventStats);}
-eventStats.numEvents++;const timeIntervalKey=Math.floor(tr.b.Unit.timestampFromUs(ts)/this.TIME_INTERVAL_SIZE_IN_MS);let eventStatsByTimeInverval=this.traceEventStatsInTimeIntervals_.get(timeIntervalKey);if(eventStatsByTimeInverval===undefined){eventStatsByTimeInverval={timeInterval:timeIntervalKey,numEvents:0,totalEventSizeinBytes:0};this.traceEventStatsInTimeIntervals_.set(timeIntervalKey,eventStatsByTimeInverval);this.allTraceEventStatsInTimeIntervals_.push(eventStatsByTimeInverval);}
-eventStatsByTimeInverval.numEvents++;if(opt_eventSizeinBytes!==undefined){this.hasEventSizesinBytes_=true;eventStats.totalEventSizeinBytes+=opt_eventSizeinBytes;eventStatsByTimeInverval.totalEventSizeinBytes+=opt_eventSizeinBytes;}},get allTraceEventStats(){return this.allTraceEventStats_;},get allTraceEventStatsInTimeIntervals(){return this.allTraceEventStatsInTimeIntervals_;},get hasEventSizesinBytes(){return this.hasEventSizesinBytes_;},get traceImportDurationMs(){return this.traceImportDurationMs_;},set traceImportDurationMs(traceImportDurationMs){this.traceImportDurationMs_=traceImportDurationMs;}};return{ModelStats,};});'use strict';tr.exportTo('tr.model',function(){function VMRegion(startAddress,sizeInBytes,protectionFlags,mappedFile,byteStats){this.startAddress=startAddress;this.sizeInBytes=sizeInBytes;this.protectionFlags=protectionFlags;this.mappedFile=mappedFile||'';this.byteStats=byteStats||{};}
-VMRegion.PROTECTION_FLAG_READ=4;VMRegion.PROTECTION_FLAG_WRITE=2;VMRegion.PROTECTION_FLAG_EXECUTE=1;VMRegion.PROTECTION_FLAG_MAYSHARE=128;VMRegion.prototype={get uniqueIdWithinProcess(){return this.mappedFile+'#'+this.startAddress;},get protectionFlagsToString(){if(this.protectionFlags===undefined)return undefined;return((this.protectionFlags&VMRegion.PROTECTION_FLAG_READ?'r':'-')+
-(this.protectionFlags&VMRegion.PROTECTION_FLAG_WRITE?'w':'-')+
-(this.protectionFlags&VMRegion.PROTECTION_FLAG_EXECUTE?'x':'-')+
-(this.protectionFlags&VMRegion.PROTECTION_FLAG_MAYSHARE?'s':'p'));}};VMRegion.fromDict=function(dict){return new VMRegion(dict.startAddress,dict.sizeInBytes,dict.protectionFlags,dict.mappedFile,dict.byteStats);};function VMRegionClassificationNode(opt_rule){this.rule_=opt_rule||VMRegionClassificationNode.CLASSIFICATION_RULES;this.hasRegions=false;this.sizeInBytes=undefined;this.byteStats={};this.children_=undefined;this.regions_=[];}
-VMRegionClassificationNode.CLASSIFICATION_RULES={name:'Total',children:[{name:'Android',file:/^\/dev\/ashmem(?!\/libc malloc)/,children:[{name:'Java runtime',file:/^\/dev\/ashmem\/dalvik-/,children:[{name:'Spaces',file:/\/dalvik-(alloc|main|large object|non moving|zygote) space/,children:[{name:'Normal',file:/\/dalvik-(alloc|main)/},{name:'Large',file:/\/dalvik-large object/},{name:'Zygote',file:/\/dalvik-zygote/},{name:'Non-moving',file:/\/dalvik-non moving/}]},{name:'Linear Alloc',file:/\/dalvik-LinearAlloc/},{name:'Indirect Reference Table',file:/\/dalvik-indirect.ref/},{name:'Cache',file:/\/dalvik-jit-code-cache/},{name:'Accounting'}]},{name:'Cursor',file:/\/CursorWindow/},{name:'Ashmem'}]},{name:'Native heap',file:/^((\[heap\])|(\[anon:)|(\/dev\/ashmem\/libc malloc)|(\[discounted tracing overhead\])|$)/},{name:'Stack',file:/^\[stack/},{name:'Files',file:/\.((((jar)|(apk)|(ttf)|(odex)|(oat)|(art))$)|(dex)|(so))/,children:[{name:'so',file:/\.so/},{name:'jar',file:/\.jar$/},{name:'apk',file:/\.apk$/},{name:'ttf',file:/\.ttf$/},{name:'dex',file:/\.((dex)|(odex$))/},{name:'oat',file:/\.oat$/},{name:'art',file:/\.art$/}]},{name:'Devices',file:/(^\/dev\/)|(anon_inode:dmabuf)/,children:[{name:'GPU',file:/\/((nv)|(mali)|(kgsl))/},{name:'DMA',file:/anon_inode:dmabuf/}]}]};VMRegionClassificationNode.OTHER_RULE={name:'Other'};VMRegionClassificationNode.fromRegions=function(regions,opt_rules){const tree=new VMRegionClassificationNode(opt_rules);tree.regions_=regions;for(let i=0;i<regions.length;i++){tree.addStatsFromRegion_(regions[i]);}
-return tree;};VMRegionClassificationNode.prototype={get title(){return this.rule_.name;},get children(){if(this.isLeafNode){return undefined;}
-if(this.children_===undefined){this.buildTree_();}
-return this.children_;},get regions(){if(!this.isLeafNode){return undefined;}
-return this.regions_;},get allRegionsForTesting(){if(this.regions_!==undefined){if(this.children_!==undefined){throw new Error('Internal error: a VM region classification node '+'cannot have both regions and children');}
-return this.regions_;}
-let regions=[];this.children_.forEach(function(childNode){regions=regions.concat(childNode.allRegionsForTesting);});return regions;},get isLeafNode(){const children=this.rule_.children;return children===undefined||children.length===0;},addRegion(region){this.addRegionRecursively_(region,true);},someRegion(fn,opt_this){if(this.regions_!==undefined){return this.regions_.some(fn,opt_this);}
-return this.children_.some(function(childNode){return childNode.someRegion(fn,opt_this);});},addRegionRecursively_(region,addStatsToThisNode){if(addStatsToThisNode){this.addStatsFromRegion_(region);}
-if(this.regions_!==undefined){if(this.children_!==undefined){throw new Error('Internal error: a VM region classification node '+'cannot have both regions and children');}
-this.regions_.push(region);return;}
-function regionRowMatchesChildNide(child){const fileRegExp=child.rule_.file;if(fileRegExp===undefined)return true;return fileRegExp.test(region.mappedFile);}
-let matchedChild=this.children_.find(regionRowMatchesChildNide);if(matchedChild===undefined){if(this.children_.length!==this.rule_.children.length){throw new Error('Internal error');}
-matchedChild=new VMRegionClassificationNode(VMRegionClassificationNode.OTHER_RULE);this.children_.push(matchedChild);}
-matchedChild.addRegionRecursively_(region,true);},buildTree_(){const cachedRegions=this.regions_;this.regions_=undefined;this.buildChildNodesRecursively_();for(let i=0;i<cachedRegions.length;i++){this.addRegionRecursively_(cachedRegions[i],false);}},buildChildNodesRecursively_(){if(this.children_!==undefined){throw new Error('Internal error: Classification node already has children');}
-if(this.regions_!==undefined&&this.regions_.length!==0){throw new Error('Internal error: Classification node should have no regions');}
-if(this.isLeafNode){return;}
-this.regions_=undefined;this.children_=this.rule_.children.map(function(childRule){const child=new VMRegionClassificationNode(childRule);child.buildChildNodesRecursively_();return child;});},addStatsFromRegion_(region){this.hasRegions=true;const regionSizeInBytes=region.sizeInBytes;if(regionSizeInBytes!==undefined){this.sizeInBytes=(this.sizeInBytes||0)+regionSizeInBytes;}
-const thisByteStats=this.byteStats;const regionByteStats=region.byteStats;for(const byteStatName in regionByteStats){const regionByteStatValue=regionByteStats[byteStatName];if(regionByteStatValue===undefined)continue;thisByteStats[byteStatName]=(thisByteStats[byteStatName]||0)+regionByteStatValue;}}};return{VMRegion,VMRegionClassificationNode,};});'use strict';tr.exportTo('tr.model',function(){const DISCOUNTED_ALLOCATOR_NAMES=['winheap','malloc'];const TRACING_OVERHEAD_PATH=['allocated_objects','tracing_overhead'];const SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.SIZE_NUMERIC_NAME;const RESIDENT_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.RESIDENT_SIZE_NUMERIC_NAME;function getSizeNumericValue(dump,sizeNumericName){const sizeNumeric=dump.numerics[sizeNumericName];if(sizeNumeric===undefined)return 0;return sizeNumeric.value;}
-function ProcessMemoryDump(globalMemoryDump,process,start){tr.model.ContainerMemoryDump.call(this,start);this.process=process;this.globalMemoryDump=globalMemoryDump;this.totals=undefined;this.vmRegions=undefined;this.heapDumps=undefined;this.tracingOverheadOwnershipSetUp_=false;this.tracingOverheadDiscountedFromVmRegions_=false;}
-ProcessMemoryDump.prototype={__proto__:tr.model.ContainerMemoryDump.prototype,get userFriendlyName(){return'Process memory dump at '+
-tr.b.Unit.byName.timeStampInMs.format(this.start);},get containerName(){return this.process.userFriendlyName;},get processMemoryDumps(){const dumps={};dumps[this.process.pid]=this;return dumps;},get hasOwnVmRegions(){return this.vmRegions!==undefined;},setUpTracingOverheadOwnership(opt_model){if(this.tracingOverheadOwnershipSetUp_)return;this.tracingOverheadOwnershipSetUp_=true;const tracingDump=this.getMemoryAllocatorDumpByFullName('tracing');if(tracingDump===undefined||tracingDump.owns!==undefined){return;}
-if(tracingDump.owns!==undefined)return;const hasDiscountedFromAllocatorDumps=DISCOUNTED_ALLOCATOR_NAMES.some(function(allocatorName){const allocatorDump=this.getMemoryAllocatorDumpByFullName(allocatorName);if(allocatorDump===undefined){return false;}
-let nextPathIndex=0;let currentDump=allocatorDump;let currentFullName=allocatorName;for(;nextPathIndex<TRACING_OVERHEAD_PATH.length;nextPathIndex++){const childFullName=currentFullName+'/'+
-TRACING_OVERHEAD_PATH[nextPathIndex];const childDump=this.getMemoryAllocatorDumpByFullName(childFullName);if(childDump===undefined)break;currentDump=childDump;currentFullName=childFullName;}
-for(;nextPathIndex<TRACING_OVERHEAD_PATH.length;nextPathIndex++){const childFullName=currentFullName+'/'+
-TRACING_OVERHEAD_PATH[nextPathIndex];const childDump=new tr.model.MemoryAllocatorDump(currentDump.containerMemoryDump,childFullName);childDump.parent=currentDump;currentDump.children.push(childDump);currentFullName=childFullName;currentDump=childDump;}
-const ownershipLink=new tr.model.MemoryAllocatorDumpLink(tracingDump,currentDump);tracingDump.owns=ownershipLink;currentDump.ownedBy.push(ownershipLink);return true;},this);if(hasDiscountedFromAllocatorDumps){this.forceRebuildingMemoryAllocatorDumpByFullNameIndex();}},discountTracingOverheadFromVmRegions(opt_model){if(this.tracingOverheadDiscountedFromVmRegions_)return;this.tracingOverheadDiscountedFromVmRegions_=true;const tracingDump=this.getMemoryAllocatorDumpByFullName('tracing');if(tracingDump===undefined)return;const discountedSize=getSizeNumericValue(tracingDump,SIZE_NUMERIC_NAME);const discountedResidentSize=getSizeNumericValue(tracingDump,RESIDENT_SIZE_NUMERIC_NAME);if(discountedSize<=0&&discountedResidentSize<=0)return;if(this.totals!==undefined){if(this.totals.residentBytes!==undefined){this.totals.residentBytes-=discountedResidentSize;}
-if(this.totals.peakResidentBytes!==undefined){this.totals.peakResidentBytes-=discountedResidentSize;}}
-if(this.vmRegions!==undefined){const hasSizeInBytes=this.vmRegions.sizeInBytes!==undefined;const hasPrivateDirtyResident=this.vmRegions.byteStats.privateDirtyResident!==undefined;const hasProportionalResident=this.vmRegions.byteStats.proportionalResident!==undefined;if((hasSizeInBytes&&discountedSize>0)||((hasPrivateDirtyResident||hasProportionalResident)&&discountedResidentSize>0)){const byteStats={};if(hasPrivateDirtyResident){byteStats.privateDirtyResident=-discountedResidentSize;}
-if(hasProportionalResident){byteStats.proportionalResident=-discountedResidentSize;}
-this.vmRegions.addRegion(tr.model.VMRegion.fromDict({mappedFile:'[discounted tracing overhead]',sizeInBytes:hasSizeInBytes?-discountedSize:undefined,byteStats}));}}}};ProcessMemoryDump.hookUpMostRecentVmRegionsLinks=function(processDumps){let mostRecentVmRegions=undefined;processDumps.forEach(function(processDump){if(processDump.vmRegions!==undefined){mostRecentVmRegions=processDump.vmRegions;}
-processDump.mostRecentVmRegions=mostRecentVmRegions;});};tr.model.EventRegistry.register(ProcessMemoryDump,{name:'processMemoryDump',pluralName:'processMemoryDumps'});return{ProcessMemoryDump,};});'use strict';tr.exportTo('tr.model',function(){const ProcessBase=tr.model.ProcessBase;const ProcessInstantEvent=tr.model.ProcessInstantEvent;const Frame=tr.model.Frame;const ProcessMemoryDump=tr.model.ProcessMemoryDump;function Process(model,pid){if(model===undefined){throw new Error('model must be provided');}
-if(pid===undefined){throw new Error('pid must be provided');}
-tr.model.ProcessBase.call(this,model);this.pid=pid;this.name=undefined;this.labels=[];this.uptime_seconds=0;this.instantEvents=[];this.memoryDumps=[];this.frames=[];this.activities=[];}
-Process.compare=function(x,y){let tmp=tr.model.ProcessBase.compare(x,y);if(tmp)return tmp;if(x.name!==undefined){if(y.name!==undefined){tmp=x.name.localeCompare(y.name);}else{tmp=-1;}}else if(y.name!==undefined){tmp=1;}
-if(tmp)return tmp;tmp=tr.b.compareArrays(x.labels,y.labels,function(x,y){return x.localeCompare(y);});if(tmp)return tmp;return x.pid-y.pid;};Process.prototype={__proto__:tr.model.ProcessBase.prototype,get stableId(){return this.pid;},compareTo(that){return Process.compare(this,that);},*childEvents(){yield*ProcessBase.prototype.childEvents.call(this);yield*this.instantEvents;yield*this.frames;yield*this.memoryDumps;},addLabelIfNeeded(labelName){for(let i=0;i<this.labels.length;i++){if(this.labels[i]===labelName)return;}
-this.labels.push(labelName);},get userFriendlyName(){let res;if(this.name){res=this.name+' (pid '+this.pid+')';}else{res='Process '+this.pid;}
-if(this.labels.length){res+=': '+this.labels.join(', ');}
-if(this.uptime_seconds){res+=', uptime:'+this.uptime_seconds+'s';}
-return res;},get userFriendlyDetails(){if(this.name){return this.name+' (pid '+this.pid+')';}
-return'pid: '+this.pid;},getSettingsKey(){if(!this.name)return undefined;if(!this.labels.length)return'processes.'+this.name;return'processes.'+this.name+'.'+this.labels.join('.');},shiftTimestampsForward(amount){for(let i=0;i<this.instantEvents.length;i++){this.instantEvents[i].start+=amount;}
-for(let i=0;i<this.frames.length;i++){this.frames[i].shiftTimestampsForward(amount);}
-for(let i=0;i<this.memoryDumps.length;i++){this.memoryDumps[i].shiftTimestampsForward(amount);}
-for(let i=0;i<this.activities.length;i++){this.activities[i].shiftTimestampsForward(amount);}
-tr.model.ProcessBase.prototype.shiftTimestampsForward.apply(this,arguments);},updateBounds(){tr.model.ProcessBase.prototype.updateBounds.apply(this);for(let i=0;i<this.frames.length;i++){this.frames[i].addBoundsToRange(this.bounds);}
-for(let i=0;i<this.memoryDumps.length;i++){this.memoryDumps[i].addBoundsToRange(this.bounds);}
-for(let i=0;i<this.activities.length;i++){this.activities[i].addBoundsToRange(this.bounds);}},sortMemoryDumps(){this.memoryDumps.sort(function(x,y){return x.start-y.start;});tr.model.ProcessMemoryDump.hookUpMostRecentVmRegionsLinks(this.memoryDumps);}};return{Process,};});'use strict';tr.exportTo('tr.model',function(){function Sample(start,title,leafNode,thread,opt_cpu,opt_weight,opt_args){tr.model.TimedEvent.call(this,start);this.start_=start;this.title_=title;this.leafNode_=leafNode;this.thread_=thread;this.colorId_=leafNode.colorId;this.cpu_=opt_cpu;this.weight_=opt_weight;this.args=opt_args||{};}
-Sample.prototype={__proto__:tr.model.TimedEvent.prototype,get title(){return this.title_;},get colorId(){return this.colorId_;},get thread(){return this.thread_;},get leafNode(){return this.leafNode_;},get userFriendlyName(){return'Sample at '+
-tr.b.Unit.byName.timeStampInMs.format(this.start);},get userFriendlyStack(){return this.leafNode_.userFriendlyStack;},getNodesAsArray(){const nodes=[];let node=this.leafNode_;while(node!==undefined){nodes.push(node);node=node.parentNode;}
-return nodes;},get cpu(){return this.cpu_;},get weight(){return this.weight_;},};tr.model.EventRegistry.register(Sample,{name:'Sample',pluralName:'Samples'});return{Sample,};});'use strict';tr.exportTo('tr.model',function(){function StackFrame(parentFrame,id,title,colorId,opt_sourceInfo){if(id===undefined){throw new Error('id must be given');}
-this.parentFrame_=parentFrame;this.id=id;this.title_=title;this.colorId=colorId;this.children=[];this.sourceInfo_=opt_sourceInfo;if(this.parentFrame_){this.parentFrame_.addChild(this);}}
-StackFrame.prototype={get parentFrame(){return this.parentFrame_;},get title(){if(this.sourceInfo_){const src=this.sourceInfo_.toString();return this.title_+(src===''?'':' '+src);}
-return this.title_;},get domain(){let result='unknown';if(this.sourceInfo_&&this.sourceInfo_.domain){result=this.sourceInfo_.domain;}
-if(result==='unknown'&&this.parentFrame){result=this.parentFrame.domain;}
-return result;},get sourceInfo(){return this.sourceInfo_;},set parentFrame(parentFrame){if(this.parentFrame_){Polymer.dom(this.parentFrame_).removeChild(this);}
-this.parentFrame_=parentFrame;if(this.parentFrame_){this.parentFrame_.addChild(this);}},addChild(child){this.children.push(child);},removeChild(child){const i=this.children.indexOf(child.id);if(i===-1){throw new Error('omg');}
-this.children.splice(i,1);},removeAllChildren(){for(let i=0;i<this.children.length;i++){this.children[i].parentFrame_=undefined;}
-this.children.splice(0,this.children.length);},get stackTrace(){const stack=[this];let cur=this.parentFrame;while(cur){stack.push(cur);cur=cur.parentFrame;}
-return stack;},getUserFriendlyStackTrace(){return this.stackTrace.map(function(x){return x.title;});}};return{StackFrame,};});'use strict';tr.exportTo('tr.model.um',function(){class Segment extends tr.model.TimedEvent{constructor(start,duration){super(start);this.duration=duration;this.expectations_=[];}
-get expectations(){return this.expectations_;}
-clone(){const clone=new Segment(this.start,this.duration);clone.expectations.push(...this.expectations);return clone;}
-addSegment(other){this.duration+=other.duration;this.expectations.push(...other.expectations);}}
-return{Segment,};});'use strict';tr.exportTo('tr.model.um',function(){class UserModel extends tr.model.EventContainer{constructor(parentModel){super();this.parentModel_=parentModel;this.expectations_=new tr.model.EventSet();this.segments_=[];}
-get stableId(){return'UserModel';}
-get parentModel(){return this.parentModel_;}
-sortExpectations(){this.expectations_.sortEvents((x,y)=>(x.start-y.start));}
-get expectations(){return this.expectations_;}
-shiftTimestampsForward(amount){}
-addCategoriesToDict(categoriesDict){}
-get segments(){return this.segments_;}*childEvents(){yield*this.expectations;}*childEventContainers(){}
-updateBounds(){this.bounds.reset();for(const expectation of this.expectations){expectation.addBoundsToRange(this.bounds);}}
-resegment(getKeyForSegment){const newSegments=[];let prevKey=undefined;let prevSegment=undefined;for(let i=0;i<this.segments.length;++i){const segment=this.segments[i];const key=getKeyForSegment(segment,i);if(prevSegment!==undefined&&key===prevKey){prevSegment.addSegment(segment);}else{prevSegment=segment.clone();newSegments.push(prevSegment);}
-prevKey=key;}
-return newSegments;}}
-return{UserModel,};});'use strict';tr.exportTo('tr',function(){const Process=tr.model.Process;const Device=tr.model.Device;const Kernel=tr.model.Kernel;const GlobalMemoryDump=tr.model.GlobalMemoryDump;const GlobalInstantEvent=tr.model.GlobalInstantEvent;const FlowEvent=tr.model.FlowEvent;const Alert=tr.model.Alert;const Sample=tr.model.Sample;function Model(){tr.model.EventContainer.call(this);tr.b.EventTarget.decorate(this);this.timestampShiftToZeroAmount_=0;this.faviconHue='blue';this.device=new Device(this);this.kernel=new Kernel(this);this.processes={};this.metadata=[];this.categories=[];this.instantEvents=[];this.flowEvents=[];this.clockSyncManager=new tr.model.ClockSyncManager();this.intrinsicTimeUnit_=undefined;this.stackFrames={};this.samples=[];this.alerts=[];this.userModel=new tr.model.um.UserModel(this);this.flowIntervalTree=new tr.b.IntervalTree((f)=>f.start,(f)=>f.end);this.globalMemoryDumps=[];this.userFriendlyCategoryDrivers_=[];this.annotationsByGuid_={};this.modelIndices=undefined;this.stats=new tr.model.ModelStats();this.importWarnings_=[];this.reportedImportWarnings_={};this.isTimeHighResolution_=true;this.patchupsToApply_=[];this.doesHelperGUIDSupportThisModel_={};this.helpersByConstructorGUID_={};this.eventsByStableId_=undefined;}
-Model.prototype={__proto__:tr.model.EventContainer.prototype,getEventByStableId(stableId){if(this.eventsByStableId_===undefined){this.eventsByStableId_={};for(const event of this.getDescendantEvents()){this.eventsByStableId_[event.stableId]=event;}}
-return this.eventsByStableId_[stableId];},getOrCreateHelper(constructor){if(!constructor.guid){throw new Error('Helper constructors must have GUIDs');}
-if(this.helpersByConstructorGUID_[constructor.guid]===undefined){if(this.doesHelperGUIDSupportThisModel_[constructor.guid]===undefined){this.doesHelperGUIDSupportThisModel_[constructor.guid]=constructor.supportsModel(this);}
-if(!this.doesHelperGUIDSupportThisModel_[constructor.guid]){return undefined;}
-this.helpersByConstructorGUID_[constructor.guid]=new constructor(this);}
-return this.helpersByConstructorGUID_[constructor.guid];},*childEvents(){yield*this.globalMemoryDumps;yield*this.instantEvents;yield*this.flowEvents;yield*this.alerts;yield*this.samples;},*childEventContainers(){yield this.userModel;yield this.device;yield this.kernel;yield*Object.values(this.processes);},iterateAllPersistableObjects(callback){this.kernel.iterateAllPersistableObjects(callback);for(const pid in this.processes){this.processes[pid].iterateAllPersistableObjects(callback);}},updateBounds(){this.bounds.reset();const bounds=this.bounds;for(const ec of this.childEventContainers()){ec.updateBounds();bounds.addRange(ec.bounds);}
-for(const event of this.childEvents()){event.addBoundsToRange(bounds);}},shiftWorldToZero(){const shiftAmount=-this.bounds.min;this.timestampShiftToZeroAmount_=shiftAmount;for(const ec of this.childEventContainers()){ec.shiftTimestampsForward(shiftAmount);}
-for(const event of this.childEvents()){event.start+=shiftAmount;}
-this.updateBounds();},convertTimestampToModelTime(sourceClockDomainName,ts){if(sourceClockDomainName!=='traceEventClock'){throw new Error('Only traceEventClock is supported.');}
-return tr.b.Unit.timestampFromUs(ts)+
-this.timestampShiftToZeroAmount_;},get numProcesses(){let n=0;for(const p in this.processes){n++;}
-return n;},getProcess(pid){return this.processes[pid];},getOrCreateProcess(pid){if(!this.processes[pid]){this.processes[pid]=new Process(this,pid);}
-return this.processes[pid];},addStackFrame(stackFrame){if(this.stackFrames[stackFrame.id]){throw new Error('Stack frame already exists');}
-this.stackFrames[stackFrame.id]=stackFrame;return stackFrame;},updateCategories_(){const categoriesDict={};this.userModel.addCategoriesToDict(categoriesDict);this.device.addCategoriesToDict(categoriesDict);this.kernel.addCategoriesToDict(categoriesDict);for(const pid in this.processes){this.processes[pid].addCategoriesToDict(categoriesDict);}
-this.categories=[];for(const category in categoriesDict){if(category!==''){this.categories.push(category);}}},getAllThreads(){const threads=[];for(const tid in this.kernel.threads){threads.push(process.threads[tid]);}
-for(const pid in this.processes){const process=this.processes[pid];for(const tid in process.threads){threads.push(process.threads[tid]);}}
-return threads;},getAllProcesses(opt_predicate){const processes=[];for(const pid in this.processes){const process=this.processes[pid];if(opt_predicate===undefined||opt_predicate(process)){processes.push(process);}}
-return processes;},getAllCounters(){const counters=[];counters.push.apply(counters,Object.values(this.device.counters||{}));counters.push.apply(counters,Object.values(this.kernel.counters||{}));for(const pid in this.processes){const process=this.processes[pid];for(const tid in process.counters){counters.push(process.counters[tid]);}}
-return counters;},getAnnotationByGUID(guid){return this.annotationsByGuid_[guid];},addAnnotation(annotation){if(!annotation.guid){throw new Error('Annotation with undefined guid given');}
-this.annotationsByGuid_[annotation.guid]=annotation;tr.b.dispatchSimpleEvent(this,'annotationChange');},removeAnnotation(annotation){this.annotationsByGuid_[annotation.guid].onRemove();delete this.annotationsByGuid_[annotation.guid];tr.b.dispatchSimpleEvent(this,'annotationChange');},getAllAnnotations(){return Object.values(this.annotationsByGuid_);},addUserFriendlyCategoryDriver(ufcd){this.userFriendlyCategoryDrivers_.push(ufcd);},getUserFriendlyCategoryFromEvent(event){for(let i=0;i<this.userFriendlyCategoryDrivers_.length;i++){const ufc=this.userFriendlyCategoryDrivers_[i].fromEvent(event);if(ufc!==undefined)return ufc;}
-return undefined;},findAllThreadsNamed(name){const namedThreads=[];namedThreads.push.apply(namedThreads,this.kernel.findAllThreadsNamed(name));for(const pid in this.processes){namedThreads.push.apply(namedThreads,this.processes[pid].findAllThreadsNamed(name));}
-return namedThreads;},get importOptions(){return this.importOptions_;},set importOptions(options){this.importOptions_=options;},get intrinsicTimeUnit(){if(this.intrinsicTimeUnit_===undefined){return tr.b.TimeDisplayModes.ms;}
-return this.intrinsicTimeUnit_;},set intrinsicTimeUnit(value){if(this.intrinsicTimeUnit_===value)return;if(this.intrinsicTimeUnit_!==undefined){throw new Error('Intrinsic time unit already set');}
-this.intrinsicTimeUnit_=value;},get isTimeHighResolution(){return this.isTimeHighResolution_;},set isTimeHighResolution(value){this.isTimeHighResolution_=value;},get canonicalUrl(){return this.canonicalUrl_;},set canonicalUrl(value){if(this.canonicalUrl_===value)return;if(this.canonicalUrl_!==undefined){throw new Error('canonicalUrl already set');}
-this.canonicalUrl_=value;},importWarning(data){data.showToUser=!!data.showToUser;this.importWarnings_.push(data);if(this.reportedImportWarnings_[data.type]===true)return;this.reportedImportWarnings_[data.type]=true;},get hasImportWarnings(){return(this.importWarnings_.length>0);},get importWarnings(){return this.importWarnings_;},get importWarningsThatShouldBeShownToUser(){return this.importWarnings_.filter(function(warning){return warning.showToUser;});},autoCloseOpenSlices(){this.samples.sort(function(x,y){return x.start-y.start;});this.updateBounds();this.kernel.autoCloseOpenSlices();for(const pid in this.processes){this.processes[pid].autoCloseOpenSlices();}},createSubSlices(){this.kernel.createSubSlices();for(const pid in this.processes){this.processes[pid].createSubSlices();}},preInitializeObjects(){for(const pid in this.processes){this.processes[pid].preInitializeObjects();}},initializeObjects(){for(const pid in this.processes){this.processes[pid].initializeObjects();}},pruneEmptyContainers(){this.kernel.pruneEmptyContainers();for(const pid in this.processes){this.processes[pid].pruneEmptyContainers();}},mergeKernelWithUserland(){for(const pid in this.processes){this.processes[pid].mergeKernelWithUserland();}},computeWorldBounds(shiftWorldToZero){this.updateBounds();this.updateCategories_();if(shiftWorldToZero){this.shiftWorldToZero();}},buildFlowEventIntervalTree(){for(let i=0;i<this.flowEvents.length;++i){const flowEvent=this.flowEvents[i];this.flowIntervalTree.insert(flowEvent);}
-this.flowIntervalTree.updateHighValues();},cleanupUndeletedObjects(){for(const pid in this.processes){this.processes[pid].autoDeleteObjects(this.bounds.max);}},sortMemoryDumps(){this.globalMemoryDumps.sort(function(x,y){return x.start-y.start;});for(const pid in this.processes){this.processes[pid].sortMemoryDumps();}},finalizeMemoryGraphs(){this.globalMemoryDumps.forEach(function(dump){dump.finalizeGraph();});},buildEventIndices(){this.modelIndices=new tr.model.ModelIndices(this);},sortAlerts(){this.alerts.sort(function(x,y){return x.start-y.start;});},applyObjectRefPatchups(){const unresolved=[];this.patchupsToApply_.forEach(function(patchup){if(patchup.pidRef in this.processes){const snapshot=this.processes[patchup.pidRef].objects.getSnapshotAt(patchup.scopedId,patchup.ts);if(snapshot){patchup.object[patchup.field]=snapshot;snapshot.referencedAt(patchup.item,patchup.object,patchup.field);return;}}
-unresolved.push(patchup);},this);this.patchupsToApply_=unresolved;},replacePIDRefsInPatchups(oldPidRef,newPidRef){this.patchupsToApply_.forEach(function(patchup){if(patchup.pidRef===oldPidRef){patchup.pidRef=newPidRef;}});},joinRefs(){this.joinObjectRefs_();this.applyObjectRefPatchups();},joinObjectRefs_(){for(const[pid,process]of Object.entries(this.processes)){this.joinObjectRefsForProcess_(pid,process);}},joinObjectRefsForProcess_(pid,process){for(const thread of Object.values(process.threads)){thread.asyncSliceGroup.slices.forEach(function(item){this.searchItemForIDRefs_(pid,'start',item);},this);thread.sliceGroup.slices.forEach(function(item){this.searchItemForIDRefs_(pid,'start',item);},this);}
-process.objects.iterObjectInstances(function(instance){instance.snapshots.forEach(function(item){this.searchItemForIDRefs_(pid,'ts',item);},this);},this);},searchItemForIDRefs_(pid,itemTimestampField,item){if(!item.args&&!item.contexts)return;const patchupsToApply=this.patchupsToApply_;function handleField(object,fieldName,fieldValue){if(!fieldValue||(!fieldValue.id_ref&&!fieldValue.idRef)){return;}
-const scope=fieldValue.scope||tr.model.OBJECT_DEFAULT_SCOPE;const idRef=fieldValue.id_ref||fieldValue.idRef;const scopedId=new tr.model.ScopedId(scope,idRef);const pidRef=fieldValue.pid_ref||fieldValue.pidRef||pid;const ts=item[itemTimestampField];patchupsToApply.push({item,object,field:fieldName,pidRef,scopedId,ts});}
-function iterObjectFieldsRecursively(object){if(!(object instanceof Object))return;if((object instanceof tr.model.ObjectSnapshot)||(object instanceof Float32Array)||(object instanceof tr.b.math.Quad)){return;}
-if(object instanceof Array){for(let i=0;i<object.length;i++){handleField(object,i,object[i]);iterObjectFieldsRecursively(object[i]);}
-return;}
-for(const key in object){const value=object[key];handleField(object,key,value);iterObjectFieldsRecursively(value);}}
-iterObjectFieldsRecursively(item.args);iterObjectFieldsRecursively(item.contexts);}};return{Model,};});'use strict';tr.exportTo('tr.e.importer.etw',function(){const kThreadGuid='3D6FA8D1-FE05-11D0-9DDA-00C04FD7BA7C';const kThreadDCStartOpcode=3;function Decoder(){this.payload_=new DataView(new ArrayBuffer(256));}
-Decoder.prototype={__proto__:Object.prototype,reset(base64Payload){const decodedSize=tr.b.Base64.getDecodedBufferLength(base64Payload);if(decodedSize>this.payload_.byteLength){this.payload_=new DataView(new ArrayBuffer(decodedSize));}
-tr.b.Base64.DecodeToTypedArray(base64Payload,this.payload_);this.position_=0;},skip(length){this.position_+=length;},decodeUInt8(){const result=this.payload_.getUint8(this.position_,true);this.position_+=1;return result;},decodeUInt16(){const result=this.payload_.getUint16(this.position_,true);this.position_+=2;return result;},decodeUInt32(){const result=this.payload_.getUint32(this.position_,true);this.position_+=4;return result;},decodeUInt64ToString(){const low=this.decodeUInt32();const high=this.decodeUInt32();const lowStr=('0000000'+low.toString(16)).substr(-8);const highStr=('0000000'+high.toString(16)).substr(-8);const result=highStr+lowStr;return result;},decodeInt8(){const result=this.payload_.getInt8(this.position_,true);this.position_+=1;return result;},decodeInt16(){const result=this.payload_.getInt16(this.position_,true);this.position_+=2;return result;},decodeInt32(){const result=this.payload_.getInt32(this.position_,true);this.position_+=4;return result;},decodeInt64ToString(){return this.decodeUInt64ToString();},decodeUInteger(is64){if(is64){return this.decodeUInt64ToString();}
-return this.decodeUInt32();},decodeString(){let str='';while(true){const c=this.decodeUInt8();if(!c)return str;str=str+String.fromCharCode(c);}},decodeW16String(){let str='';while(true){const c=this.decodeUInt16();if(!c)return str;str=str+String.fromCharCode(c);}},decodeFixedW16String(length){const oldPosition=this.position_;let str='';for(let i=0;i<length;i++){const c=this.decodeUInt16();if(!c)break;str=str+String.fromCharCode(c);}
-this.position_=oldPosition+2*length;return str;},decodeBytes(length){const bytes=[];for(let i=0;i<length;++i){const c=this.decodeUInt8();bytes.push(c);}
-return bytes;},decodeSID(is64){const pSid=this.decodeUInteger(is64);const attributes=this.decodeUInt32();if(is64){this.decodeUInt32();}
-const revision=this.decodeUInt8();const subAuthorityCount=this.decodeUInt8();this.decodeUInt16();this.decodeUInt32();if(revision!==1){throw new Error('Invalid SID revision: could not decode the SID structure.');}
-const sid=this.decodeBytes(4*subAuthorityCount);return{pSid,attributes,sid};},decodeSystemTime(){const wYear=this.decodeInt16();const wMonth=this.decodeInt16();const wDayOfWeek=this.decodeInt16();const wDay=this.decodeInt16();const wHour=this.decodeInt16();const wMinute=this.decodeInt16();const wSecond=this.decodeInt16();const wMilliseconds=this.decodeInt16();return{wYear,wMonth,wDayOfWeek,wDay,wHour,wMinute,wSecond,wMilliseconds};},decodeTimeZoneInformation(){const bias=this.decodeUInt32();const standardName=this.decodeFixedW16String(32);const standardDate=this.decodeSystemTime();const standardBias=this.decodeUInt32();const daylightName=this.decodeFixedW16String(32);const daylightDate=this.decodeSystemTime();const daylightBias=this.decodeUInt32();return{bias,standardName,standardDate,standardBias,daylightName,daylightDate,daylightBias};}};function EtwImporter(model,events){this.importPriority=3;this.model_=model;this.events_=events;this.handlers_={};this.decoder_=new Decoder();this.walltime_=undefined;this.ticks_=undefined;this.is64bit_=undefined;this.tidsToPid_={};const allTypeInfos=tr.e.importer.etw.Parser.getAllRegisteredTypeInfos();this.parsers_=allTypeInfos.map(function(typeInfo){return new typeInfo.constructor(this);},this);}
-EtwImporter.canImport=function(events){if(!events.hasOwnProperty('name')||!events.hasOwnProperty('content')||events.name!=='ETW'){return false;}
-return true;};EtwImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'EtwImporter';},get model(){return this.model_;},createThreadIfNeeded(pid,tid){this.tidsToPid_[tid]=pid;},removeThreadIfPresent(tid){this.tidsToPid_[tid]=undefined;},getPidFromWindowsTid(tid){if(tid===0)return 0;const pid=this.tidsToPid_[tid];if(pid===undefined){return 0;}
-return pid;},getThreadFromWindowsTid(tid){const pid=this.getPidFromWindowsTid(tid);const process=this.model_.getProcess(pid);if(!process)return undefined;return process.getThread(tid);},getOrCreateCpu(cpuNumber){const cpu=this.model_.kernel.getOrCreateCpu(cpuNumber);return cpu;},importEvents(){this.events_.content.forEach(this.parseInfo.bind(this));if(this.walltime_===undefined||this.ticks_===undefined){throw Error('Cannot find clock sync information in the system trace.');}
-if(this.is64bit_===undefined){throw Error('Cannot determine pointer size of the system trace.');}
-this.events_.content.forEach(this.parseEvent.bind(this));},importTimestamp(timestamp){const ts=parseInt(timestamp,16);return(ts-this.walltime_+this.ticks_)/1000.;},parseInfo(event){if(event.hasOwnProperty('guid')&&event.hasOwnProperty('walltime')&&event.hasOwnProperty('tick')&&event.guid==='ClockSync'){this.walltime_=parseInt(event.walltime,16);this.ticks_=parseInt(event.tick,16);}
-if(this.is64bit_===undefined&&event.hasOwnProperty('guid')&&event.hasOwnProperty('op')&&event.hasOwnProperty('ver')&&event.hasOwnProperty('payload')&&event.guid===kThreadGuid&&event.op===kThreadDCStartOpcode){const decodedSize=tr.b.Base64.getDecodedBufferLength(event.payload);if(event.ver===1){if(decodedSize>=52){this.is64bit_=true;}else{this.is64bit_=false;}}else if(event.ver===2){if(decodedSize>=64){this.is64bit_=true;}else{this.is64bit_=false;}}else if(event.ver===3){if(decodedSize>=60){this.is64bit_=true;}else{this.is64bit_=false;}}}
-return true;},parseEvent(event){if(!event.hasOwnProperty('guid')||!event.hasOwnProperty('op')||!event.hasOwnProperty('ver')||!event.hasOwnProperty('cpu')||!event.hasOwnProperty('ts')||!event.hasOwnProperty('payload')){return false;}
-const timestamp=this.importTimestamp(event.ts);const header={guid:event.guid,opcode:event.op,version:event.ver,cpu:event.cpu,timestamp,is64:this.is64bit_};const decoder=this.decoder_;decoder.reset(event.payload);const handler=this.getEventHandler(header.guid,header.opcode);if(!handler)return false;if(!handler(header,decoder)){this.model_.importWarning({type:'parse_error',message:'Malformed '+header.guid+' event ('+event.payload+')'});return false;}
-return true;},registerEventHandler(guid,opcode,handler){if(this.handlers_[guid]===undefined){this.handlers_[guid]=[];}
-this.handlers_[guid][opcode]=handler;},getEventHandler(guid,opcode){if(this.handlers_[guid]===undefined){return undefined;}
-return this.handlers_[guid][opcode];}};tr.importer.Importer.register(EtwImporter);return{EtwImporter,};});'use strict';tr.exportTo('tr.b',function(){class TraceStream{static get HEADER_SIZE(){return Math.pow(2,10);}
-static get CHUNK_SIZE(){return Math.pow(2,20);}
-get isBinary(){throw new Error('Not implemented');}
-get hasData(){throw new Error('Not implemented');}
-get header(){throw new Error('Not implemented');}
-readUntilDelimiter(delim){throw new Error('Not implemented');}
-readNumBytes(opt_size){throw new Error('Not implemented');}
-rewind(){throw new Error('Not implemented');}
-substream(offset,opt_length,opt_headerSize){throw new Error('Not implemented');}}
-return{TraceStream,};});'use strict';tr.exportTo('tr.e.importer.fuchsia',function(){const IMPORT_PRIORITY=0;const IDLE_THREAD_THRESHOLD=6444000000;class FuchsiaImporter extends tr.importer.Importer{constructor(model,eventData){super(model,eventData);this.importPriority=IMPORT_PRIORITY;this.model_=model;this.events_=eventData.events;this.parsers_=[];this.threadInfo_=new Map();this.processNames_=new Map();}
-static canImport(eventData){if(eventData instanceof tr.b.TraceStream){if(eventData.isBinary)return false;eventData=eventData.header;}
-if(eventData instanceof Object&&eventData.type==='fuchsia'){return true;}
-return false;}
-get importerName(){return'FuchsiaImporter';}
-get model(){return this.model_;}
-importClockSyncMarkers(){}
-finalizeImport(){}
-processContextSwitchEvent_(event){let tid=event.in.tid;let threadName=tid.toString();let procName='';if(this.threadInfo_.has(tid)){const threadInfo=this.threadInfo_.get(tid);threadName=threadInfo.name;const pid=threadInfo.pid;if(this.processNames_.has(pid)){procName=this.processNames_.get(pid)+':';}}
-const name=procName+threadName;if(tid>IDLE_THREAD_THRESHOLD){tid=undefined;}
-const cpu=this.model_.kernel.getOrCreateCpu(event.cpu);cpu.switchActiveThread(tr.b.Unit.timestampFromUs(event.ts),{},tid,name,tid);}
-processProcessInfoEvent_(event){const process=this.model_.getOrCreateProcess(event.pid);process.name=event.name;this.processNames_.set(event.pid,event.name);if('sort_index'in event){process.sortIndex=event.sort_index;}}
-processThreadInfoEvent_(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);thread.name=event.name;this.threadInfo_.set(event.tid,{'name':event.name,'pid':event.pid});if('sort_index'in event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);thread.sortIndex=event.sort_index;}}
-processEvent_(event){switch(event.ph){case'k':this.processContextSwitchEvent_(event);break;case'p':this.processProcessInfoEvent_(event);break;case't':this.processThreadInfoEvent_(event);break;}}
-importEvents(){for(const event of this.events_){this.processEvent_(event);}}}
-tr.importer.Importer.register(FuchsiaImporter);return{FuchsiaImporter,IMPORT_PRIORITY,};});'use strict';tr.exportTo('tr.b',function(){const MAX_FUNCTION_ARGS_COUNT=Math.pow(2,15)-1;class InMemoryTraceStream extends tr.b.TraceStream{constructor(buffer,isBinary,opt_headerSize){super();if(!buffer instanceof Uint8Array){throw new Error('buffer should be a Uint8Array');}
-const headerSize=opt_headerSize||tr.b.TraceStream.HEADER_SIZE;this.data_=buffer;this.isBinary_=isBinary;this.header_=InMemoryTraceStream.uint8ArrayToString_(this.data_.subarray(0,headerSize));this.cursor_=0;}
-get isBinary(){return this.isBinary_;}
-get hasData(){return this.cursor_<this.data_.length;}
-get header(){return this.header_;}
-get data(){return this.data_;}
-toString(){this.rewind();return this.readNumBytes(Number.MAX_VALUE);}
-readUntilDelimiter(delim){if(delim.length!==1){throw new Error('delim must be exactly one character');}
-const offset=this.data_.indexOf(delim.charCodeAt(0),this.cursor_)+1;return this.readToOffset_(offset>0?Math.min(offset,this.data_.length):this.data_.length);}
-readNumBytes(opt_size){if(opt_size!==undefined&&opt_size<=0){throw new Error(`readNumBytes expects a positive size (${opt_size} given)`);}
-const size=opt_size||tr.b.TraceStream.CHUNK_SIZE;const offset=Math.min(this.cursor_+size,this.data_.length);return this.readToOffset_(offset);}
-rewind(){this.cursor_=0;}
-substream(startOffset,opt_endOffset,opt_headerSize){return new InMemoryTraceStream(this.data_.subarray(startOffset,opt_endOffset),this.isBinary_,opt_headerSize);}
-readToOffset_(offset){const out=InMemoryTraceStream.uint8ArrayToString_(this.data_.subarray(this.cursor_,offset));this.cursor_=offset;return out;}
-static uint8ArrayToString_(arr){if(typeof TextDecoder!=='undefined'){const decoder=new TextDecoder('utf-8');return decoder.decode(arr);}
-const c=[];for(let i=0;i<arr.length;i+=MAX_FUNCTION_ARGS_COUNT){c.push(String.fromCharCode(...arr.subarray(i,i+MAX_FUNCTION_ARGS_COUNT)));}
-return c.join('');}}
-return{InMemoryTraceStream,};});!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).pako=t()}}(function(){return function t(e,a,i){function n(s,o){if(!a[s]){if(!e[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(r)return r(s,!0);var h=new Error("Cannot find module '"+s+"'");throw h.code="MODULE_NOT_FOUND",h}var d=a[s]={exports:{}};e[s][0].call(d.exports,function(t){var a=e[s][1][t];return n(a||t)},d,d.exports,t,e,a,i)}return a[s].exports}for(var r="function"==typeof require&&require,s=0;s<i.length;s++)n(i[s]);return n}({1:[function(t,e,a){"use strict";function i(t){if(!(this instanceof i))return new i(t);this.options=s.assign({level:_,method:c,chunkSize:16384,windowBits:15,memLevel:8,strategy:u,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new h,this.strm.avail_out=0;var a=r.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(a!==f)throw new Error(l[a]);if(e.header&&r.deflateSetHeader(this.strm,e.header),e.dictionary){var n;if(n="string"==typeof e.dictionary?o.string2buf(e.dictionary):"[object ArrayBuffer]"===d.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(a=r.deflateSetDictionary(this.strm,n))!==f)throw new Error(l[a]);this._dict_set=!0}}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg||l[a.err];return a.result}var r=t("./zlib/deflate"),s=t("./utils/common"),o=t("./utils/strings"),l=t("./zlib/messages"),h=t("./zlib/zstream"),d=Object.prototype.toString,f=0,_=-1,u=0,c=8;i.prototype.push=function(t,e){var a,i,n=this.strm,l=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:!0===e?4:0,"string"==typeof t?n.input=o.string2buf(t):"[object ArrayBuffer]"===d.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new s.Buf8(l),n.next_out=0,n.avail_out=l),1!==(a=r.deflate(n,i))&&a!==f)return this.onEnd(a),this.ended=!0,!1;0!==n.avail_out&&(0!==n.avail_in||4!==i&&2!==i)||("string"===this.options.to?this.onData(o.buf2binstring(s.shrinkBuf(n.output,n.next_out))):this.onData(s.shrinkBuf(n.output,n.next_out)))}while((n.avail_in>0||0===n.avail_out)&&1!==a);return 4===i?(a=r.deflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===f):2!==i||(this.onEnd(f),n.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===f&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Deflate=i,a.deflate=n,a.deflateRaw=function(t,e){return e=e||{},e.raw=!0,n(t,e)},a.gzip=function(t,e){return e=e||{},e.gzip=!0,n(t,e)}},{"./utils/common":3,"./utils/strings":4,"./zlib/deflate":8,"./zlib/messages":13,"./zlib/zstream":15}],2:[function(t,e,a){"use strict";function i(t){if(!(this instanceof i))return new i(t);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new d,this.strm.avail_out=0;var a=r.inflateInit2(this.strm,e.windowBits);if(a!==l.Z_OK)throw new Error(h[a]);this.header=new f,r.inflateGetHeader(this.strm,this.header)}function n(t,e){var a=new i(e);if(a.push(t,!0),a.err)throw a.msg||h[a.err];return a.result}var r=t("./zlib/inflate"),s=t("./utils/common"),o=t("./utils/strings"),l=t("./zlib/constants"),h=t("./zlib/messages"),d=t("./zlib/zstream"),f=t("./zlib/gzheader"),_=Object.prototype.toString;i.prototype.push=function(t,e){var a,i,n,h,d,f,u=this.strm,c=this.options.chunkSize,b=this.options.dictionary,g=!1;if(this.ended)return!1;i=e===~~e?e:!0===e?l.Z_FINISH:l.Z_NO_FLUSH,"string"==typeof t?u.input=o.binstring2buf(t):"[object ArrayBuffer]"===_.call(t)?u.input=new Uint8Array(t):u.input=t,u.next_in=0,u.avail_in=u.input.length;do{if(0===u.avail_out&&(u.output=new s.Buf8(c),u.next_out=0,u.avail_out=c),(a=r.inflate(u,l.Z_NO_FLUSH))===l.Z_NEED_DICT&&b&&(f="string"==typeof b?o.string2buf(b):"[object ArrayBuffer]"===_.call(b)?new Uint8Array(b):b,a=r.inflateSetDictionary(this.strm,f)),a===l.Z_BUF_ERROR&&!0===g&&(a=l.Z_OK,g=!1),a!==l.Z_STREAM_END&&a!==l.Z_OK)return this.onEnd(a),this.ended=!0,!1;u.next_out&&(0!==u.avail_out&&a!==l.Z_STREAM_END&&(0!==u.avail_in||i!==l.Z_FINISH&&i!==l.Z_SYNC_FLUSH)||("string"===this.options.to?(n=o.utf8border(u.output,u.next_out),h=u.next_out-n,d=o.buf2string(u.output,n),u.next_out=h,u.avail_out=c-h,h&&s.arraySet(u.output,u.output,n,h,0),this.onData(d)):this.onData(s.shrinkBuf(u.output,u.next_out)))),0===u.avail_in&&0===u.avail_out&&(g=!0)}while((u.avail_in>0||0===u.avail_out)&&a!==l.Z_STREAM_END);return a===l.Z_STREAM_END&&(i=l.Z_FINISH),i===l.Z_FINISH?(a=r.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===l.Z_OK):i!==l.Z_SYNC_FLUSH||(this.onEnd(l.Z_OK),u.avail_out=0,!0)},i.prototype.onData=function(t){this.chunks.push(t)},i.prototype.onEnd=function(t){t===l.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},a.Inflate=i,a.inflate=n,a.inflateRaw=function(t,e){return e=e||{},e.raw=!0,n(t,e)},a.ungzip=n},{"./utils/common":3,"./utils/strings":4,"./zlib/constants":6,"./zlib/gzheader":9,"./zlib/inflate":11,"./zlib/messages":13,"./zlib/zstream":15}],3:[function(t,e,a){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;a.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var a=e.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(var n in a)i(a,n)&&(t[n]=a[n])}}return t},a.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var r={arraySet:function(t,e,a,i,n){if(e.subarray&&t.subarray)t.set(e.subarray(a,a+i),n);else for(var r=0;r<i;r++)t[n+r]=e[a+r]},flattenChunks:function(t){var e,a,i,n,r,s;for(i=0,e=0,a=t.length;e<a;e++)i+=t[e].length;for(s=new Uint8Array(i),n=0,e=0,a=t.length;e<a;e++)r=t[e],s.set(r,n),n+=r.length;return s}},s={arraySet:function(t,e,a,i,n){for(var r=0;r<i;r++)t[n+r]=e[a+r]},flattenChunks:function(t){return[].concat.apply([],t)}};a.setTyped=function(t){t?(a.Buf8=Uint8Array,a.Buf16=Uint16Array,a.Buf32=Int32Array,a.assign(a,r)):(a.Buf8=Array,a.Buf16=Array,a.Buf32=Array,a.assign(a,s))},a.setTyped(n)},{}],4:[function(t,e,a){"use strict";function i(t,e){if(e<65537&&(t.subarray&&s||!t.subarray&&r))return String.fromCharCode.apply(null,n.shrinkBuf(t,e));for(var a="",i=0;i<e;i++)a+=String.fromCharCode(t[i]);return a}var n=t("./common"),r=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(t){r=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){s=!1}for(var o=new n.Buf8(256),l=0;l<256;l++)o[l]=l>=252?6:l>=248?5:l>=240?4:l>=224?3:l>=192?2:1;o[254]=o[254]=1,a.string2buf=function(t){var e,a,i,r,s,o=t.length,l=0;for(r=0;r<o;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<o&&56320==(64512&(i=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(i-56320),r++),l+=a<128?1:a<2048?2:a<65536?3:4;for(e=new n.Buf8(l),s=0,r=0;s<l;r++)55296==(64512&(a=t.charCodeAt(r)))&&r+1<o&&56320==(64512&(i=t.charCodeAt(r+1)))&&(a=65536+(a-55296<<10)+(i-56320),r++),a<128?e[s++]=a:a<2048?(e[s++]=192|a>>>6,e[s++]=128|63&a):a<65536?(e[s++]=224|a>>>12,e[s++]=128|a>>>6&63,e[s++]=128|63&a):(e[s++]=240|a>>>18,e[s++]=128|a>>>12&63,e[s++]=128|a>>>6&63,e[s++]=128|63&a);return e},a.buf2binstring=function(t){return i(t,t.length)},a.binstring2buf=function(t){for(var e=new n.Buf8(t.length),a=0,i=e.length;a<i;a++)e[a]=t.charCodeAt(a);return e},a.buf2string=function(t,e){var a,n,r,s,l=e||t.length,h=new Array(2*l);for(n=0,a=0;a<l;)if((r=t[a++])<128)h[n++]=r;else if((s=o[r])>4)h[n++]=65533,a+=s-1;else{for(r&=2===s?31:3===s?15:7;s>1&&a<l;)r=r<<6|63&t[a++],s--;s>1?h[n++]=65533:r<65536?h[n++]=r:(r-=65536,h[n++]=55296|r>>10&1023,h[n++]=56320|1023&r)}return i(h,n)},a.utf8border=function(t,e){var a;for((e=e||t.length)>t.length&&(e=t.length),a=e-1;a>=0&&128==(192&t[a]);)a--;return a<0?e:0===a?e:a+o[t[a]]>e?a:e}},{"./common":3}],5:[function(t,e,a){"use strict";e.exports=function(t,e,a,i){for(var n=65535&t|0,r=t>>>16&65535|0,s=0;0!==a;){a-=s=a>2e3?2e3:a;do{r=r+(n=n+e[i++]|0)|0}while(--s);n%=65521,r%=65521}return n|r<<16|0}},{}],6:[function(t,e,a){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],7:[function(t,e,a){"use strict";var i=function(){for(var t,e=[],a=0;a<256;a++){t=a;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[a]=t}return e}();e.exports=function(t,e,a,n){var r=i,s=n+a;t^=-1;for(var o=n;o<s;o++)t=t>>>8^r[255&(t^e[o])];return-1^t}},{}],8:[function(t,e,a){"use strict";function i(t,e){return t.msg=A[e],e}function n(t){return(t<<1)-(t>4?9:0)}function r(t){for(var e=t.length;--e>=0;)t[e]=0}function s(t){var e=t.state,a=e.pending;a>t.avail_out&&(a=t.avail_out),0!==a&&(z.arraySet(t.output,e.pending_buf,e.pending_out,a,t.next_out),t.next_out+=a,e.pending_out+=a,t.total_out+=a,t.avail_out-=a,e.pending-=a,0===e.pending&&(e.pending_out=0))}function o(t,e){B._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,s(t.strm)}function l(t,e){t.pending_buf[t.pending++]=e}function h(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function d(t,e,a,i){var n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,z.arraySet(e,t.input,t.next_in,n,a),1===t.state.wrap?t.adler=S(t.adler,e,n,a):2===t.state.wrap&&(t.adler=E(t.adler,e,n,a)),t.next_in+=n,t.total_in+=n,n)}function f(t,e){var a,i,n=t.max_chain_length,r=t.strstart,s=t.prev_length,o=t.nice_match,l=t.strstart>t.w_size-it?t.strstart-(t.w_size-it):0,h=t.window,d=t.w_mask,f=t.prev,_=t.strstart+at,u=h[r+s-1],c=h[r+s];t.prev_length>=t.good_match&&(n>>=2),o>t.lookahead&&(o=t.lookahead);do{if(a=e,h[a+s]===c&&h[a+s-1]===u&&h[a]===h[r]&&h[++a]===h[r+1]){r+=2,a++;do{}while(h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&h[++r]===h[++a]&&r<_);if(i=at-(_-r),r=_-at,i>s){if(t.match_start=e,s=i,i>=o)break;u=h[r+s-1],c=h[r+s]}}}while((e=f[e&d])>l&&0!=--n);return s<=t.lookahead?s:t.lookahead}function _(t){var e,a,i,n,r,s=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-it)){z.arraySet(t.window,t.window,s,s,0),t.match_start-=s,t.strstart-=s,t.block_start-=s,e=a=t.hash_size;do{i=t.head[--e],t.head[e]=i>=s?i-s:0}while(--a);e=a=s;do{i=t.prev[--e],t.prev[e]=i>=s?i-s:0}while(--a);n+=s}if(0===t.strm.avail_in)break;if(a=d(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=a,t.lookahead+t.insert>=et)for(r=t.strstart-t.insert,t.ins_h=t.window[r],t.ins_h=(t.ins_h<<t.hash_shift^t.window[r+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[r+et-1])&t.hash_mask,t.prev[r&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=r,r++,t.insert--,!(t.lookahead+t.insert<et)););}while(t.lookahead<it&&0!==t.strm.avail_in)}function u(t,e){for(var a,i;;){if(t.lookahead<it){if(_(t),t.lookahead<it&&e===Z)return _t;if(0===t.lookahead)break}if(a=0,t.lookahead>=et&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+et-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==a&&t.strstart-a<=t.w_size-it&&(t.match_length=f(t,a)),t.match_length>=et)if(i=B._tr_tally(t,t.strstart-t.match_start,t.match_length-et),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=et){t.match_length--;do{t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+et-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart}while(0!=--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else i=B._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(i&&(o(t,!1),0===t.strm.avail_out))return _t}return t.insert=t.strstart<et-1?t.strstart:et-1,e===N?(o(t,!0),0===t.strm.avail_out?ct:bt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?_t:ut}function c(t,e){for(var a,i,n;;){if(t.lookahead<it){if(_(t),t.lookahead<it&&e===Z)return _t;if(0===t.lookahead)break}if(a=0,t.lookahead>=et&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+et-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=et-1,0!==a&&t.prev_length<t.max_lazy_match&&t.strstart-a<=t.w_size-it&&(t.match_length=f(t,a),t.match_length<=5&&(t.strategy===H||t.match_length===et&&t.strstart-t.match_start>4096)&&(t.match_length=et-1)),t.prev_length>=et&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-et,i=B._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-et),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=n&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+et-1])&t.hash_mask,a=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart)}while(0!=--t.prev_length);if(t.match_available=0,t.match_length=et-1,t.strstart++,i&&(o(t,!1),0===t.strm.avail_out))return _t}else if(t.match_available){if((i=B._tr_tally(t,0,t.window[t.strstart-1]))&&o(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return _t}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(i=B._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<et-1?t.strstart:et-1,e===N?(o(t,!0),0===t.strm.avail_out?ct:bt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?_t:ut}function b(t,e){for(var a,i,n,r,s=t.window;;){if(t.lookahead<=at){if(_(t),t.lookahead<=at&&e===Z)return _t;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=et&&t.strstart>0&&(n=t.strstart-1,(i=s[n])===s[++n]&&i===s[++n]&&i===s[++n])){r=t.strstart+at;do{}while(i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&i===s[++n]&&n<r);t.match_length=at-(r-n),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=et?(a=B._tr_tally(t,1,t.match_length-et),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(a=B._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),a&&(o(t,!1),0===t.strm.avail_out))return _t}return t.insert=0,e===N?(o(t,!0),0===t.strm.avail_out?ct:bt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?_t:ut}function g(t,e){for(var a;;){if(0===t.lookahead&&(_(t),0===t.lookahead)){if(e===Z)return _t;break}if(t.match_length=0,a=B._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,a&&(o(t,!1),0===t.strm.avail_out))return _t}return t.insert=0,e===N?(o(t,!0),0===t.strm.avail_out?ct:bt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?_t:ut}function m(t,e,a,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=a,this.max_chain=i,this.func=n}function w(t){t.window_size=2*t.w_size,r(t.head),t.max_lazy_match=x[t.level].max_lazy,t.good_match=x[t.level].good_length,t.nice_match=x[t.level].nice_length,t.max_chain_length=x[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=et-1,t.match_available=0,t.ins_h=0}function p(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=q,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new z.Buf16(2*$),this.dyn_dtree=new z.Buf16(2*(2*Q+1)),this.bl_tree=new z.Buf16(2*(2*V+1)),r(this.dyn_ltree),r(this.dyn_dtree),r(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new z.Buf16(tt+1),this.heap=new z.Buf16(2*J+1),r(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new z.Buf16(2*J+1),r(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function v(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=Y,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?rt:dt,t.adler=2===e.wrap?0:1,e.last_flush=Z,B._tr_init(e),D):i(t,U)}function k(t){var e=v(t);return e===D&&w(t.state),e}function y(t,e,a,n,r,s){if(!t)return U;var o=1;if(e===L&&(e=6),n<0?(o=0,n=-n):n>15&&(o=2,n-=16),r<1||r>G||a!==q||n<8||n>15||e<0||e>9||s<0||s>M)return i(t,U);8===n&&(n=9);var l=new p;return t.state=l,l.strm=t,l.wrap=o,l.gzhead=null,l.w_bits=n,l.w_size=1<<l.w_bits,l.w_mask=l.w_size-1,l.hash_bits=r+7,l.hash_size=1<<l.hash_bits,l.hash_mask=l.hash_size-1,l.hash_shift=~~((l.hash_bits+et-1)/et),l.window=new z.Buf8(2*l.w_size),l.head=new z.Buf16(l.hash_size),l.prev=new z.Buf16(l.w_size),l.lit_bufsize=1<<r+6,l.pending_buf_size=4*l.lit_bufsize,l.pending_buf=new z.Buf8(l.pending_buf_size),l.d_buf=1*l.lit_bufsize,l.l_buf=3*l.lit_bufsize,l.level=e,l.strategy=s,l.method=a,k(t)}var x,z=t("../utils/common"),B=t("./trees"),S=t("./adler32"),E=t("./crc32"),A=t("./messages"),Z=0,R=1,C=3,N=4,O=5,D=0,I=1,U=-2,T=-3,F=-5,L=-1,H=1,j=2,K=3,M=4,P=0,Y=2,q=8,G=9,X=15,W=8,J=286,Q=30,V=19,$=2*J+1,tt=15,et=3,at=258,it=at+et+1,nt=32,rt=42,st=69,ot=73,lt=91,ht=103,dt=113,ft=666,_t=1,ut=2,ct=3,bt=4,gt=3;x=[new m(0,0,0,0,function(t,e){var a=65535;for(a>t.pending_buf_size-5&&(a=t.pending_buf_size-5);;){if(t.lookahead<=1){if(_(t),0===t.lookahead&&e===Z)return _t;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+a;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,o(t,!1),0===t.strm.avail_out))return _t;if(t.strstart-t.block_start>=t.w_size-it&&(o(t,!1),0===t.strm.avail_out))return _t}return t.insert=0,e===N?(o(t,!0),0===t.strm.avail_out?ct:bt):(t.strstart>t.block_start&&(o(t,!1),t.strm.avail_out),_t)}),new m(4,4,8,4,u),new m(4,5,16,8,u),new m(4,6,32,32,u),new m(4,4,16,16,c),new m(8,16,32,32,c),new m(8,16,128,128,c),new m(8,32,128,256,c),new m(32,128,258,1024,c),new m(32,258,258,4096,c)],a.deflateInit=function(t,e){return y(t,e,q,X,W,P)},a.deflateInit2=y,a.deflateReset=k,a.deflateResetKeep=v,a.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?U:(t.state.gzhead=e,D):U},a.deflate=function(t,e){var a,o,d,f;if(!t||!t.state||e>O||e<0)return t?i(t,U):U;if(o=t.state,!t.output||!t.input&&0!==t.avail_in||o.status===ft&&e!==N)return i(t,0===t.avail_out?F:U);if(o.strm=t,a=o.last_flush,o.last_flush=e,o.status===rt)if(2===o.wrap)t.adler=0,l(o,31),l(o,139),l(o,8),o.gzhead?(l(o,(o.gzhead.text?1:0)+(o.gzhead.hcrc?2:0)+(o.gzhead.extra?4:0)+(o.gzhead.name?8:0)+(o.gzhead.comment?16:0)),l(o,255&o.gzhead.time),l(o,o.gzhead.time>>8&255),l(o,o.gzhead.time>>16&255),l(o,o.gzhead.time>>24&255),l(o,9===o.level?2:o.strategy>=j||o.level<2?4:0),l(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(l(o,255&o.gzhead.extra.length),l(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(t.adler=E(t.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=st):(l(o,0),l(o,0),l(o,0),l(o,0),l(o,0),l(o,9===o.level?2:o.strategy>=j||o.level<2?4:0),l(o,gt),o.status=dt);else{var _=q+(o.w_bits-8<<4)<<8;_|=(o.strategy>=j||o.level<2?0:o.level<6?1:6===o.level?2:3)<<6,0!==o.strstart&&(_|=nt),_+=31-_%31,o.status=dt,h(o,_),0!==o.strstart&&(h(o,t.adler>>>16),h(o,65535&t.adler)),t.adler=1}if(o.status===st)if(o.gzhead.extra){for(d=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>d&&(t.adler=E(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending!==o.pending_buf_size));)l(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>d&&(t.adler=E(t.adler,o.pending_buf,o.pending-d,d)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=ot)}else o.status=ot;if(o.status===ot)if(o.gzhead.name){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=E(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindex<o.gzhead.name.length?255&o.gzhead.name.charCodeAt(o.gzindex++):0,l(o,f)}while(0!==f);o.gzhead.hcrc&&o.pending>d&&(t.adler=E(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.gzindex=0,o.status=lt)}else o.status=lt;if(o.status===lt)if(o.gzhead.comment){d=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>d&&(t.adler=E(t.adler,o.pending_buf,o.pending-d,d)),s(t),d=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindex<o.gzhead.comment.length?255&o.gzhead.comment.charCodeAt(o.gzindex++):0,l(o,f)}while(0!==f);o.gzhead.hcrc&&o.pending>d&&(t.adler=E(t.adler,o.pending_buf,o.pending-d,d)),0===f&&(o.status=ht)}else o.status=ht;if(o.status===ht&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&s(t),o.pending+2<=o.pending_buf_size&&(l(o,255&t.adler),l(o,t.adler>>8&255),t.adler=0,o.status=dt)):o.status=dt),0!==o.pending){if(s(t),0===t.avail_out)return o.last_flush=-1,D}else if(0===t.avail_in&&n(e)<=n(a)&&e!==N)return i(t,F);if(o.status===ft&&0!==t.avail_in)return i(t,F);if(0!==t.avail_in||0!==o.lookahead||e!==Z&&o.status!==ft){var u=o.strategy===j?g(o,e):o.strategy===K?b(o,e):x[o.level].func(o,e);if(u!==ct&&u!==bt||(o.status=ft),u===_t||u===ct)return 0===t.avail_out&&(o.last_flush=-1),D;if(u===ut&&(e===R?B._tr_align(o):e!==O&&(B._tr_stored_block(o,0,0,!1),e===C&&(r(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),s(t),0===t.avail_out))return o.last_flush=-1,D}return e!==N?D:o.wrap<=0?I:(2===o.wrap?(l(o,255&t.adler),l(o,t.adler>>8&255),l(o,t.adler>>16&255),l(o,t.adler>>24&255),l(o,255&t.total_in),l(o,t.total_in>>8&255),l(o,t.total_in>>16&255),l(o,t.total_in>>24&255)):(h(o,t.adler>>>16),h(o,65535&t.adler)),s(t),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?D:I)},a.deflateEnd=function(t){var e;return t&&t.state?(e=t.state.status)!==rt&&e!==st&&e!==ot&&e!==lt&&e!==ht&&e!==dt&&e!==ft?i(t,U):(t.state=null,e===dt?i(t,T):D):U},a.deflateSetDictionary=function(t,e){var a,i,n,s,o,l,h,d,f=e.length;if(!t||!t.state)return U;if(a=t.state,2===(s=a.wrap)||1===s&&a.status!==rt||a.lookahead)return U;for(1===s&&(t.adler=S(t.adler,e,f,0)),a.wrap=0,f>=a.w_size&&(0===s&&(r(a.head),a.strstart=0,a.block_start=0,a.insert=0),d=new z.Buf8(a.w_size),z.arraySet(d,e,f-a.w_size,a.w_size,0),e=d,f=a.w_size),o=t.avail_in,l=t.next_in,h=t.input,t.avail_in=f,t.next_in=0,t.input=e,_(a);a.lookahead>=et;){i=a.strstart,n=a.lookahead-(et-1);do{a.ins_h=(a.ins_h<<a.hash_shift^a.window[i+et-1])&a.hash_mask,a.prev[i&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=i,i++}while(--n);a.strstart=i,a.lookahead=et-1,_(a)}return a.strstart+=a.lookahead,a.block_start=a.strstart,a.insert=a.lookahead,a.lookahead=0,a.match_length=a.prev_length=et-1,a.match_available=0,t.next_in=l,t.input=h,t.avail_in=o,a.wrap=s,D},a.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":3,"./adler32":5,"./crc32":7,"./messages":13,"./trees":14}],9:[function(t,e,a){"use strict";e.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],10:[function(t,e,a){"use strict";e.exports=function(t,e){var a,i,n,r,s,o,l,h,d,f,_,u,c,b,g,m,w,p,v,k,y,x,z,B,S;a=t.state,i=t.next_in,B=t.input,n=i+(t.avail_in-5),r=t.next_out,S=t.output,s=r-(e-t.avail_out),o=r+(t.avail_out-257),l=a.dmax,h=a.wsize,d=a.whave,f=a.wnext,_=a.window,u=a.hold,c=a.bits,b=a.lencode,g=a.distcode,m=(1<<a.lenbits)-1,w=(1<<a.distbits)-1;t:do{c<15&&(u+=B[i++]<<c,c+=8,u+=B[i++]<<c,c+=8),p=b[u&m];e:for(;;){if(v=p>>>24,u>>>=v,c-=v,0===(v=p>>>16&255))S[r++]=65535&p;else{if(!(16&v)){if(0==(64&v)){p=b[(65535&p)+(u&(1<<v)-1)];continue e}if(32&v){a.mode=12;break t}t.msg="invalid literal/length code",a.mode=30;break t}k=65535&p,(v&=15)&&(c<v&&(u+=B[i++]<<c,c+=8),k+=u&(1<<v)-1,u>>>=v,c-=v),c<15&&(u+=B[i++]<<c,c+=8,u+=B[i++]<<c,c+=8),p=g[u&w];a:for(;;){if(v=p>>>24,u>>>=v,c-=v,!(16&(v=p>>>16&255))){if(0==(64&v)){p=g[(65535&p)+(u&(1<<v)-1)];continue a}t.msg="invalid distance code",a.mode=30;break t}if(y=65535&p,v&=15,c<v&&(u+=B[i++]<<c,(c+=8)<v&&(u+=B[i++]<<c,c+=8)),(y+=u&(1<<v)-1)>l){t.msg="invalid distance too far back",a.mode=30;break t}if(u>>>=v,c-=v,v=r-s,y>v){if((v=y-v)>d&&a.sane){t.msg="invalid distance too far back",a.mode=30;break t}if(x=0,z=_,0===f){if(x+=h-v,v<k){k-=v;do{S[r++]=_[x++]}while(--v);x=r-y,z=S}}else if(f<v){if(x+=h+f-v,(v-=f)<k){k-=v;do{S[r++]=_[x++]}while(--v);if(x=0,f<k){k-=v=f;do{S[r++]=_[x++]}while(--v);x=r-y,z=S}}}else if(x+=f-v,v<k){k-=v;do{S[r++]=_[x++]}while(--v);x=r-y,z=S}for(;k>2;)S[r++]=z[x++],S[r++]=z[x++],S[r++]=z[x++],k-=3;k&&(S[r++]=z[x++],k>1&&(S[r++]=z[x++]))}else{x=r-y;do{S[r++]=S[x++],S[r++]=S[x++],S[r++]=S[x++],k-=3}while(k>2);k&&(S[r++]=S[x++],k>1&&(S[r++]=S[x++]))}break}}break}}while(i<n&&r<o);i-=k=c>>3,u&=(1<<(c-=k<<3))-1,t.next_in=i,t.next_out=r,t.avail_in=i<n?n-i+5:5-(i-n),t.avail_out=r<o?o-r+257:257-(r-o),a.hold=u,a.bits=c}},{}],11:[function(t,e,a){"use strict";function i(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function n(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new u.Buf16(320),this.work=new u.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function r(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=N,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new u.Buf32(dt),e.distcode=e.distdyn=new u.Buf32(ft),e.sane=1,e.back=-1,z):E}function s(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,r(t)):E}function o(t,e){var a,i;return t&&t.state?(i=t.state,e<0?(a=0,e=-e):(a=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?E:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=a,i.wbits=e,s(t))):E}function l(t,e){var a,i;return t?(i=new n,t.state=i,i.window=null,(a=o(t,e))!==z&&(t.state=null),a):E}function h(t){if(ut){var e;for(f=new u.Buf32(512),_=new u.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(m(p,t.lens,0,288,f,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;m(v,t.lens,0,32,_,0,t.work,{bits:5}),ut=!1}t.lencode=f,t.lenbits=9,t.distcode=_,t.distbits=5}function d(t,e,a,i){var n,r=t.state;return null===r.window&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new u.Buf8(r.wsize)),i>=r.wsize?(u.arraySet(r.window,e,a-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):((n=r.wsize-r.wnext)>i&&(n=i),u.arraySet(r.window,e,a-i,n,r.wnext),(i-=n)?(u.arraySet(r.window,e,a-i,i,0),r.wnext=i,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=n))),0}var f,_,u=t("../utils/common"),c=t("./adler32"),b=t("./crc32"),g=t("./inffast"),m=t("./inftrees"),w=0,p=1,v=2,k=4,y=5,x=6,z=0,B=1,S=2,E=-2,A=-3,Z=-4,R=-5,C=8,N=1,O=2,D=3,I=4,U=5,T=6,F=7,L=8,H=9,j=10,K=11,M=12,P=13,Y=14,q=15,G=16,X=17,W=18,J=19,Q=20,V=21,$=22,tt=23,et=24,at=25,it=26,nt=27,rt=28,st=29,ot=30,lt=31,ht=32,dt=852,ft=592,_t=15,ut=!0;a.inflateReset=s,a.inflateReset2=o,a.inflateResetKeep=r,a.inflateInit=function(t){return l(t,_t)},a.inflateInit2=l,a.inflate=function(t,e){var a,n,r,s,o,l,f,_,dt,ft,_t,ut,ct,bt,gt,mt,wt,pt,vt,kt,yt,xt,zt,Bt,St=0,Et=new u.Buf8(4),At=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return E;(a=t.state).mode===M&&(a.mode=P),o=t.next_out,r=t.output,f=t.avail_out,s=t.next_in,n=t.input,l=t.avail_in,_=a.hold,dt=a.bits,ft=l,_t=f,xt=z;t:for(;;)switch(a.mode){case N:if(0===a.wrap){a.mode=P;break}for(;dt<16;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(2&a.wrap&&35615===_){a.check=0,Et[0]=255&_,Et[1]=_>>>8&255,a.check=b(a.check,Et,2,0),_=0,dt=0,a.mode=O;break}if(a.flags=0,a.head&&(a.head.done=!1),!(1&a.wrap)||(((255&_)<<8)+(_>>8))%31){t.msg="incorrect header check",a.mode=ot;break}if((15&_)!==C){t.msg="unknown compression method",a.mode=ot;break}if(_>>>=4,dt-=4,yt=8+(15&_),0===a.wbits)a.wbits=yt;else if(yt>a.wbits){t.msg="invalid window size",a.mode=ot;break}a.dmax=1<<yt,t.adler=a.check=1,a.mode=512&_?j:M,_=0,dt=0;break;case O:for(;dt<16;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(a.flags=_,(255&a.flags)!==C){t.msg="unknown compression method",a.mode=ot;break}if(57344&a.flags){t.msg="unknown header flags set",a.mode=ot;break}a.head&&(a.head.text=_>>8&1),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=b(a.check,Et,2,0)),_=0,dt=0,a.mode=D;case D:for(;dt<32;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}a.head&&(a.head.time=_),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,Et[2]=_>>>16&255,Et[3]=_>>>24&255,a.check=b(a.check,Et,4,0)),_=0,dt=0,a.mode=I;case I:for(;dt<16;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}a.head&&(a.head.xflags=255&_,a.head.os=_>>8),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=b(a.check,Et,2,0)),_=0,dt=0,a.mode=U;case U:if(1024&a.flags){for(;dt<16;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}a.length=_,a.head&&(a.head.extra_len=_),512&a.flags&&(Et[0]=255&_,Et[1]=_>>>8&255,a.check=b(a.check,Et,2,0)),_=0,dt=0}else a.head&&(a.head.extra=null);a.mode=T;case T:if(1024&a.flags&&((ut=a.length)>l&&(ut=l),ut&&(a.head&&(yt=a.head.extra_len-a.length,a.head.extra||(a.head.extra=new Array(a.head.extra_len)),u.arraySet(a.head.extra,n,s,ut,yt)),512&a.flags&&(a.check=b(a.check,n,ut,s)),l-=ut,s+=ut,a.length-=ut),a.length))break t;a.length=0,a.mode=F;case F:if(2048&a.flags){if(0===l)break t;ut=0;do{yt=n[s+ut++],a.head&&yt&&a.length<65536&&(a.head.name+=String.fromCharCode(yt))}while(yt&&ut<l);if(512&a.flags&&(a.check=b(a.check,n,ut,s)),l-=ut,s+=ut,yt)break t}else a.head&&(a.head.name=null);a.length=0,a.mode=L;case L:if(4096&a.flags){if(0===l)break t;ut=0;do{yt=n[s+ut++],a.head&&yt&&a.length<65536&&(a.head.comment+=String.fromCharCode(yt))}while(yt&&ut<l);if(512&a.flags&&(a.check=b(a.check,n,ut,s)),l-=ut,s+=ut,yt)break t}else a.head&&(a.head.comment=null);a.mode=H;case H:if(512&a.flags){for(;dt<16;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(_!==(65535&a.check)){t.msg="header crc mismatch",a.mode=ot;break}_=0,dt=0}a.head&&(a.head.hcrc=a.flags>>9&1,a.head.done=!0),t.adler=a.check=0,a.mode=M;break;case j:for(;dt<32;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}t.adler=a.check=i(_),_=0,dt=0,a.mode=K;case K:if(0===a.havedict)return t.next_out=o,t.avail_out=f,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=dt,S;t.adler=a.check=1,a.mode=M;case M:if(e===y||e===x)break t;case P:if(a.last){_>>>=7&dt,dt-=7&dt,a.mode=nt;break}for(;dt<3;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}switch(a.last=1&_,_>>>=1,dt-=1,3&_){case 0:a.mode=Y;break;case 1:if(h(a),a.mode=Q,e===x){_>>>=2,dt-=2;break t}break;case 2:a.mode=X;break;case 3:t.msg="invalid block type",a.mode=ot}_>>>=2,dt-=2;break;case Y:for(_>>>=7&dt,dt-=7&dt;dt<32;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if((65535&_)!=(_>>>16^65535)){t.msg="invalid stored block lengths",a.mode=ot;break}if(a.length=65535&_,_=0,dt=0,a.mode=q,e===x)break t;case q:a.mode=G;case G:if(ut=a.length){if(ut>l&&(ut=l),ut>f&&(ut=f),0===ut)break t;u.arraySet(r,n,s,ut,o),l-=ut,s+=ut,f-=ut,o+=ut,a.length-=ut;break}a.mode=M;break;case X:for(;dt<14;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(a.nlen=257+(31&_),_>>>=5,dt-=5,a.ndist=1+(31&_),_>>>=5,dt-=5,a.ncode=4+(15&_),_>>>=4,dt-=4,a.nlen>286||a.ndist>30){t.msg="too many length or distance symbols",a.mode=ot;break}a.have=0,a.mode=W;case W:for(;a.have<a.ncode;){for(;dt<3;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}a.lens[At[a.have++]]=7&_,_>>>=3,dt-=3}for(;a.have<19;)a.lens[At[a.have++]]=0;if(a.lencode=a.lendyn,a.lenbits=7,zt={bits:a.lenbits},xt=m(w,a.lens,0,19,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid code lengths set",a.mode=ot;break}a.have=0,a.mode=J;case J:for(;a.have<a.nlen+a.ndist;){for(;St=a.lencode[_&(1<<a.lenbits)-1],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(gt<=dt);){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(wt<16)_>>>=gt,dt-=gt,a.lens[a.have++]=wt;else{if(16===wt){for(Bt=gt+2;dt<Bt;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(_>>>=gt,dt-=gt,0===a.have){t.msg="invalid bit length repeat",a.mode=ot;break}yt=a.lens[a.have-1],ut=3+(3&_),_>>>=2,dt-=2}else if(17===wt){for(Bt=gt+3;dt<Bt;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}dt-=gt,yt=0,ut=3+(7&(_>>>=gt)),_>>>=3,dt-=3}else{for(Bt=gt+7;dt<Bt;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}dt-=gt,yt=0,ut=11+(127&(_>>>=gt)),_>>>=7,dt-=7}if(a.have+ut>a.nlen+a.ndist){t.msg="invalid bit length repeat",a.mode=ot;break}for(;ut--;)a.lens[a.have++]=yt}}if(a.mode===ot)break;if(0===a.lens[256]){t.msg="invalid code -- missing end-of-block",a.mode=ot;break}if(a.lenbits=9,zt={bits:a.lenbits},xt=m(p,a.lens,0,a.nlen,a.lencode,0,a.work,zt),a.lenbits=zt.bits,xt){t.msg="invalid literal/lengths set",a.mode=ot;break}if(a.distbits=6,a.distcode=a.distdyn,zt={bits:a.distbits},xt=m(v,a.lens,a.nlen,a.ndist,a.distcode,0,a.work,zt),a.distbits=zt.bits,xt){t.msg="invalid distances set",a.mode=ot;break}if(a.mode=Q,e===x)break t;case Q:a.mode=V;case V:if(l>=6&&f>=258){t.next_out=o,t.avail_out=f,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=dt,g(t,_t),o=t.next_out,r=t.output,f=t.avail_out,s=t.next_in,n=t.input,l=t.avail_in,_=a.hold,dt=a.bits,a.mode===M&&(a.back=-1);break}for(a.back=0;St=a.lencode[_&(1<<a.lenbits)-1],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(gt<=dt);){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(mt&&0==(240&mt)){for(pt=gt,vt=mt,kt=wt;St=a.lencode[kt+((_&(1<<pt+vt)-1)>>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=dt);){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}_>>>=pt,dt-=pt,a.back+=pt}if(_>>>=gt,dt-=gt,a.back+=gt,a.length=wt,0===mt){a.mode=it;break}if(32&mt){a.back=-1,a.mode=M;break}if(64&mt){t.msg="invalid literal/length code",a.mode=ot;break}a.extra=15&mt,a.mode=$;case $:if(a.extra){for(Bt=a.extra;dt<Bt;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}a.length+=_&(1<<a.extra)-1,_>>>=a.extra,dt-=a.extra,a.back+=a.extra}a.was=a.length,a.mode=tt;case tt:for(;St=a.distcode[_&(1<<a.distbits)-1],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(gt<=dt);){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(0==(240&mt)){for(pt=gt,vt=mt,kt=wt;St=a.distcode[kt+((_&(1<<pt+vt)-1)>>pt)],gt=St>>>24,mt=St>>>16&255,wt=65535&St,!(pt+gt<=dt);){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}_>>>=pt,dt-=pt,a.back+=pt}if(_>>>=gt,dt-=gt,a.back+=gt,64&mt){t.msg="invalid distance code",a.mode=ot;break}a.offset=wt,a.extra=15&mt,a.mode=et;case et:if(a.extra){for(Bt=a.extra;dt<Bt;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}a.offset+=_&(1<<a.extra)-1,_>>>=a.extra,dt-=a.extra,a.back+=a.extra}if(a.offset>a.dmax){t.msg="invalid distance too far back",a.mode=ot;break}a.mode=at;case at:if(0===f)break t;if(ut=_t-f,a.offset>ut){if((ut=a.offset-ut)>a.whave&&a.sane){t.msg="invalid distance too far back",a.mode=ot;break}ut>a.wnext?(ut-=a.wnext,ct=a.wsize-ut):ct=a.wnext-ut,ut>a.length&&(ut=a.length),bt=a.window}else bt=r,ct=o-a.offset,ut=a.length;ut>f&&(ut=f),f-=ut,a.length-=ut;do{r[o++]=bt[ct++]}while(--ut);0===a.length&&(a.mode=V);break;case it:if(0===f)break t;r[o++]=a.length,f--,a.mode=V;break;case nt:if(a.wrap){for(;dt<32;){if(0===l)break t;l--,_|=n[s++]<<dt,dt+=8}if(_t-=f,t.total_out+=_t,a.total+=_t,_t&&(t.adler=a.check=a.flags?b(a.check,r,_t,o-_t):c(a.check,r,_t,o-_t)),_t=f,(a.flags?_:i(_))!==a.check){t.msg="incorrect data check",a.mode=ot;break}_=0,dt=0}a.mode=rt;case rt:if(a.wrap&&a.flags){for(;dt<32;){if(0===l)break t;l--,_+=n[s++]<<dt,dt+=8}if(_!==(4294967295&a.total)){t.msg="incorrect length check",a.mode=ot;break}_=0,dt=0}a.mode=st;case st:xt=B;break t;case ot:xt=A;break t;case lt:return Z;case ht:default:return E}return t.next_out=o,t.avail_out=f,t.next_in=s,t.avail_in=l,a.hold=_,a.bits=dt,(a.wsize||_t!==t.avail_out&&a.mode<ot&&(a.mode<nt||e!==k))&&d(t,t.output,t.next_out,_t-t.avail_out)?(a.mode=lt,Z):(ft-=t.avail_in,_t-=t.avail_out,t.total_in+=ft,t.total_out+=_t,a.total+=_t,a.wrap&&_t&&(t.adler=a.check=a.flags?b(a.check,r,_t,t.next_out-_t):c(a.check,r,_t,t.next_out-_t)),t.data_type=a.bits+(a.last?64:0)+(a.mode===M?128:0)+(a.mode===Q||a.mode===q?256:0),(0===ft&&0===_t||e===k)&&xt===z&&(xt=R),xt)},a.inflateEnd=function(t){if(!t||!t.state)return E;var e=t.state;return e.window&&(e.window=null),t.state=null,z},a.inflateGetHeader=function(t,e){var a;return t&&t.state?0==(2&(a=t.state).wrap)?E:(a.head=e,e.done=!1,z):E},a.inflateSetDictionary=function(t,e){var a,i,n=e.length;return t&&t.state?0!==(a=t.state).wrap&&a.mode!==K?E:a.mode===K&&(i=1,(i=c(i,e,n,0))!==a.check)?A:d(t,e,n,n)?(a.mode=lt,Z):(a.havedict=1,z):E},a.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":3,"./adler32":5,"./crc32":7,"./inffast":10,"./inftrees":12}],12:[function(t,e,a){"use strict";var i=t("../utils/common"),n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],r=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],s=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],o=[16,16,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,64,64];e.exports=function(t,e,a,l,h,d,f,_){var u,c,b,g,m,w,p,v,k,y=_.bits,x=0,z=0,B=0,S=0,E=0,A=0,Z=0,R=0,C=0,N=0,O=null,D=0,I=new i.Buf16(16),U=new i.Buf16(16),T=null,F=0;for(x=0;x<=15;x++)I[x]=0;for(z=0;z<l;z++)I[e[a+z]]++;for(E=y,S=15;S>=1&&0===I[S];S--);if(E>S&&(E=S),0===S)return h[d++]=20971520,h[d++]=20971520,_.bits=1,0;for(B=1;B<S&&0===I[B];B++);for(E<B&&(E=B),R=1,x=1;x<=15;x++)if(R<<=1,(R-=I[x])<0)return-1;if(R>0&&(0===t||1!==S))return-1;for(U[1]=0,x=1;x<15;x++)U[x+1]=U[x]+I[x];for(z=0;z<l;z++)0!==e[a+z]&&(f[U[e[a+z]]++]=z);if(0===t?(O=T=f,w=19):1===t?(O=n,D-=257,T=r,F-=257,w=256):(O=s,T=o,w=-1),N=0,z=0,x=B,m=d,A=E,Z=0,b=-1,C=1<<E,g=C-1,1===t&&C>852||2===t&&C>592)return 1;for(;;){p=x-Z,f[z]<w?(v=0,k=f[z]):f[z]>w?(v=T[F+f[z]],k=O[D+f[z]]):(v=96,k=0),u=1<<x-Z,B=c=1<<A;do{h[m+(N>>Z)+(c-=u)]=p<<24|v<<16|k|0}while(0!==c);for(u=1<<x-1;N&u;)u>>=1;if(0!==u?(N&=u-1,N+=u):N=0,z++,0==--I[x]){if(x===S)break;x=e[a+f[z]]}if(x>E&&(N&g)!==b){for(0===Z&&(Z=E),m+=B,R=1<<(A=x-Z);A+Z<S&&!((R-=I[A+Z])<=0);)A++,R<<=1;if(C+=1<<A,1===t&&C>852||2===t&&C>592)return 1;h[b=N&g]=E<<24|A<<16|m-d|0}}return 0!==N&&(h[m+N]=x-Z<<24|64<<16|0),_.bits=E,0}},{"../utils/common":3}],13:[function(t,e,a){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],14:[function(t,e,a){"use strict";function i(t){for(var e=t.length;--e>=0;)t[e]=0}function n(t,e,a,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=a,this.elems=i,this.max_length=n,this.has_stree=t&&t.length}function r(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function s(t){return t<256?et[t]:et[256+(t>>>7)]}function o(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function l(t,e,a){t.bi_valid>M-a?(t.bi_buf|=e<<t.bi_valid&65535,o(t,t.bi_buf),t.bi_buf=e>>M-t.bi_valid,t.bi_valid+=a-M):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=a)}function h(t,e,a){l(t,a[2*e],a[2*e+1])}function d(t,e){var a=0;do{a|=1&t,t>>>=1,a<<=1}while(--e>0);return a>>>1}function f(t){16===t.bi_valid?(o(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function _(t,e){var a,i,n,r,s,o,l=e.dyn_tree,h=e.max_code,d=e.stat_desc.static_tree,f=e.stat_desc.has_stree,_=e.stat_desc.extra_bits,u=e.stat_desc.extra_base,c=e.stat_desc.max_length,b=0;for(r=0;r<=K;r++)t.bl_count[r]=0;for(l[2*t.heap[t.heap_max]+1]=0,a=t.heap_max+1;a<j;a++)(r=l[2*l[2*(i=t.heap[a])+1]+1]+1)>c&&(r=c,b++),l[2*i+1]=r,i>h||(t.bl_count[r]++,s=0,i>=u&&(s=_[i-u]),o=l[2*i],t.opt_len+=o*(r+s),f&&(t.static_len+=o*(d[2*i+1]+s)));if(0!==b){do{for(r=c-1;0===t.bl_count[r];)r--;t.bl_count[r]--,t.bl_count[r+1]+=2,t.bl_count[c]--,b-=2}while(b>0);for(r=c;0!==r;r--)for(i=t.bl_count[r];0!==i;)(n=t.heap[--a])>h||(l[2*n+1]!==r&&(t.opt_len+=(r-l[2*n+1])*l[2*n],l[2*n+1]=r),i--)}}function u(t,e,a){var i,n,r=new Array(K+1),s=0;for(i=1;i<=K;i++)r[i]=s=s+a[i-1]<<1;for(n=0;n<=e;n++){var o=t[2*n+1];0!==o&&(t[2*n]=d(r[o]++,o))}}function c(){var t,e,a,i,r,s=new Array(K+1);for(a=0,i=0;i<U-1;i++)for(it[i]=a,t=0;t<1<<W[i];t++)at[a++]=i;for(at[a-1]=i,r=0,i=0;i<16;i++)for(nt[i]=r,t=0;t<1<<J[i];t++)et[r++]=i;for(r>>=7;i<L;i++)for(nt[i]=r<<7,t=0;t<1<<J[i]-7;t++)et[256+r++]=i;for(e=0;e<=K;e++)s[e]=0;for(t=0;t<=143;)$[2*t+1]=8,t++,s[8]++;for(;t<=255;)$[2*t+1]=9,t++,s[9]++;for(;t<=279;)$[2*t+1]=7,t++,s[7]++;for(;t<=287;)$[2*t+1]=8,t++,s[8]++;for(u($,F+1,s),t=0;t<L;t++)tt[2*t+1]=5,tt[2*t]=d(t,5);rt=new n($,W,T+1,F,K),st=new n(tt,J,0,L,K),ot=new n(new Array(0),Q,0,H,P)}function b(t){var e;for(e=0;e<F;e++)t.dyn_ltree[2*e]=0;for(e=0;e<L;e++)t.dyn_dtree[2*e]=0;for(e=0;e<H;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*Y]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function g(t){t.bi_valid>8?o(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function m(t,e,a,i){g(t),i&&(o(t,a),o(t,~a)),A.arraySet(t.pending_buf,t.window,e,a,t.pending),t.pending+=a}function w(t,e,a,i){var n=2*e,r=2*a;return t[n]<t[r]||t[n]===t[r]&&i[e]<=i[a]}function p(t,e,a){for(var i=t.heap[a],n=a<<1;n<=t.heap_len&&(n<t.heap_len&&w(e,t.heap[n+1],t.heap[n],t.depth)&&n++,!w(e,i,t.heap[n],t.depth));)t.heap[a]=t.heap[n],a=n,n<<=1;t.heap[a]=i}function v(t,e,a){var i,n,r,o,d=0;if(0!==t.last_lit)do{i=t.pending_buf[t.d_buf+2*d]<<8|t.pending_buf[t.d_buf+2*d+1],n=t.pending_buf[t.l_buf+d],d++,0===i?h(t,n,e):(h(t,(r=at[n])+T+1,e),0!==(o=W[r])&&l(t,n-=it[r],o),h(t,r=s(--i),a),0!==(o=J[r])&&l(t,i-=nt[r],o))}while(d<t.last_lit);h(t,Y,e)}function k(t,e){var a,i,n,r=e.dyn_tree,s=e.stat_desc.static_tree,o=e.stat_desc.has_stree,l=e.stat_desc.elems,h=-1;for(t.heap_len=0,t.heap_max=j,a=0;a<l;a++)0!==r[2*a]?(t.heap[++t.heap_len]=h=a,t.depth[a]=0):r[2*a+1]=0;for(;t.heap_len<2;)r[2*(n=t.heap[++t.heap_len]=h<2?++h:0)]=1,t.depth[n]=0,t.opt_len--,o&&(t.static_len-=s[2*n+1]);for(e.max_code=h,a=t.heap_len>>1;a>=1;a--)p(t,r,a);n=l;do{a=t.heap[1],t.heap[1]=t.heap[t.heap_len--],p(t,r,1),i=t.heap[1],t.heap[--t.heap_max]=a,t.heap[--t.heap_max]=i,r[2*n]=r[2*a]+r[2*i],t.depth[n]=(t.depth[a]>=t.depth[i]?t.depth[a]:t.depth[i])+1,r[2*a+1]=r[2*i+1]=n,t.heap[1]=n++,p(t,r,1)}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],_(t,e),u(r,h,t.bl_count)}function y(t,e,a){var i,n,r=-1,s=e[1],o=0,l=7,h=4;for(0===s&&(l=138,h=3),e[2*(a+1)+1]=65535,i=0;i<=a;i++)n=s,s=e[2*(i+1)+1],++o<l&&n===s||(o<h?t.bl_tree[2*n]+=o:0!==n?(n!==r&&t.bl_tree[2*n]++,t.bl_tree[2*q]++):o<=10?t.bl_tree[2*G]++:t.bl_tree[2*X]++,o=0,r=n,0===s?(l=138,h=3):n===s?(l=6,h=3):(l=7,h=4))}function x(t,e,a){var i,n,r=-1,s=e[1],o=0,d=7,f=4;for(0===s&&(d=138,f=3),i=0;i<=a;i++)if(n=s,s=e[2*(i+1)+1],!(++o<d&&n===s)){if(o<f)do{h(t,n,t.bl_tree)}while(0!=--o);else 0!==n?(n!==r&&(h(t,n,t.bl_tree),o--),h(t,q,t.bl_tree),l(t,o-3,2)):o<=10?(h(t,G,t.bl_tree),l(t,o-3,3)):(h(t,X,t.bl_tree),l(t,o-11,7));o=0,r=n,0===s?(d=138,f=3):n===s?(d=6,f=3):(d=7,f=4)}}function z(t){var e;for(y(t,t.dyn_ltree,t.l_desc.max_code),y(t,t.dyn_dtree,t.d_desc.max_code),k(t,t.bl_desc),e=H-1;e>=3&&0===t.bl_tree[2*V[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function B(t,e,a,i){var n;for(l(t,e-257,5),l(t,a-1,5),l(t,i-4,4),n=0;n<i;n++)l(t,t.bl_tree[2*V[n]+1],3);x(t,t.dyn_ltree,e-1),x(t,t.dyn_dtree,a-1)}function S(t){var e,a=4093624447;for(e=0;e<=31;e++,a>>>=1)if(1&a&&0!==t.dyn_ltree[2*e])return R;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return C;for(e=32;e<T;e++)if(0!==t.dyn_ltree[2*e])return C;return R}function E(t,e,a,i){l(t,(O<<1)+(i?1:0),3),m(t,e,a,!0)}var A=t("../utils/common"),Z=4,R=0,C=1,N=2,O=0,D=1,I=2,U=29,T=256,F=T+1+U,L=30,H=19,j=2*F+1,K=15,M=16,P=7,Y=256,q=16,G=17,X=18,W=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],J=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],Q=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],V=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],$=new Array(2*(F+2));i($);var tt=new Array(2*L);i(tt);var et=new Array(512);i(et);var at=new Array(256);i(at);var it=new Array(U);i(it);var nt=new Array(L);i(nt);var rt,st,ot,lt=!1;a._tr_init=function(t){lt||(c(),lt=!0),t.l_desc=new r(t.dyn_ltree,rt),t.d_desc=new r(t.dyn_dtree,st),t.bl_desc=new r(t.bl_tree,ot),t.bi_buf=0,t.bi_valid=0,b(t)},a._tr_stored_block=E,a._tr_flush_block=function(t,e,a,i){var n,r,s=0;t.level>0?(t.strm.data_type===N&&(t.strm.data_type=S(t)),k(t,t.l_desc),k(t,t.d_desc),s=z(t),n=t.opt_len+3+7>>>3,(r=t.static_len+3+7>>>3)<=n&&(n=r)):n=r=a+5,a+4<=n&&-1!==e?E(t,e,a,i):t.strategy===Z||r===n?(l(t,(D<<1)+(i?1:0),3),v(t,$,tt)):(l(t,(I<<1)+(i?1:0),3),B(t,t.l_desc.max_code+1,t.d_desc.max_code+1,s+1),v(t,t.dyn_ltree,t.dyn_dtree)),b(t),i&&g(t)},a._tr_tally=function(t,e,a){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&a,t.last_lit++,0===e?t.dyn_ltree[2*a]++:(t.matches++,e--,t.dyn_ltree[2*(at[a]+T+1)]++,t.dyn_dtree[2*s(e)]++),t.last_lit===t.lit_bufsize-1},a._tr_align=function(t){l(t,D<<1,3),h(t,Y,$),f(t)}},{"../utils/common":3}],15:[function(t,e,a){"use strict";e.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],"/":[function(t,e,a){"use strict";var i={};(0,t("./lib/utils/common").assign)(i,t("./lib/deflate"),t("./lib/inflate"),t("./lib/zlib/constants")),e.exports=i},{"./lib/deflate":1,"./lib/inflate":2,"./lib/utils/common":3,"./lib/zlib/constants":6}]},{},[])("/")});'use strict';tr.exportTo('tr.e.importer',function(){const GZIP_MEMBER_HEADER_ID_SIZE=3;const GZIP_HEADER_ID1=0x1f;const GZIP_HEADER_ID2=0x8b;const GZIP_DEFLATE_COMPRESSION=8;function _stringToUInt8Array(str){const array=new Uint8Array(str.length);for(let i=0;i<str.length;++i){array[i]=str.charCodeAt(i);}
-return array;}
-function GzipImporter(model,eventData){this.inflateAsTraceStream=false;if(typeof(eventData)==='string'||eventData instanceof String){eventData=_stringToUInt8Array(eventData);}else if(eventData instanceof ArrayBuffer){eventData=new Uint8Array(eventData);}else if(eventData instanceof tr.b.InMemoryTraceStream){eventData=eventData.data;this.inflateAsTraceStream_=true;}else{throw new Error('Unknown gzip data format');}
-this.model_=model;this.gzipData_=eventData;}
-GzipImporter.canImport=function(eventData){if(eventData instanceof tr.b.InMemoryTraceStream){eventData=eventData.header;}
-let header;if(eventData instanceof ArrayBuffer){header=new Uint8Array(eventData.slice(0,GZIP_MEMBER_HEADER_ID_SIZE));}else if(typeof(eventData)==='string'||eventData instanceof String){header=eventData.substring(0,GZIP_MEMBER_HEADER_ID_SIZE);header=_stringToUInt8Array(header);}else{return false;}
-return header[0]===GZIP_HEADER_ID1&&header[1]===GZIP_HEADER_ID2&&header[2]===GZIP_DEFLATE_COMPRESSION;};GzipImporter.inflateGzipData_=function(data){let position=0;function getByte(){if(position>=data.length){throw new Error('Unexpected end of gzip data');}
-return data[position++];}
-function getWord(){const low=getByte();const high=getByte();return(high<<8)+low;}
-function skipBytes(amount){position+=amount;}
-function skipZeroTerminatedString(){while(getByte()!==0){}}
-const id1=getByte();const id2=getByte();if(id1!==GZIP_HEADER_ID1||id2!==GZIP_HEADER_ID2){throw new Error('Not gzip data');}
-const compressionMethod=getByte();if(compressionMethod!==GZIP_DEFLATE_COMPRESSION){throw new Error('Unsupported compression method: '+compressionMethod);}
-const flags=getByte();const haveHeaderCrc=flags&(1<<1);const haveExtraFields=flags&(1<<2);const haveFileName=flags&(1<<3);const haveComment=flags&(1<<4);skipBytes(4+1+1);if(haveExtraFields){const bytesToSkip=getWord();skipBytes(bytesToSkip);}
-if(haveFileName)skipZeroTerminatedString();if(haveComment)skipZeroTerminatedString();if(haveHeaderCrc)getWord();const inflatedData=pako.inflateRaw(data.subarray(position));if(this.inflateAsTraceStream_){return GzipImporter.transformToStream(inflatedData);}
-let string;try{string=GzipImporter.transformToString(inflatedData);}catch(err){return GzipImporter.transformToStream(inflatedData);}
-if(inflatedData.length>0&&string.length===0){return GzipImporter.transformToStream(inflatedData);}
-return string;};GzipImporter.transformToStream=function(data){if(data instanceof Uint8Array){return new tr.b.InMemoryTraceStream(data,false);}
-throw new Error(`Cannot transform ${type} to TraceStream.`);};GzipImporter.transformToString=function(data){if(typeof(data)==='string')return data;if(typeof TextDecoder==='undefined'){if(data instanceof ArrayBuffer){data=new Uint8Array(data);}
-const result=[];let chunk=65536;let k=0;const len=data.length;while(k<len&&chunk>1){try{const chunklen=Math.min(k+chunk,len);let dataslice;if(data instanceof Array){dataslice=data.slice(k,chunklen);}else{dataslice=data.subarray(k,chunklen);}
-result.push(String.fromCharCode.apply(null,dataslice));k+=chunk;}catch(e){chunk=Math.floor(chunk/2);}}
-return result.join('');}
-if(data instanceof Array){data=new Uint8Array(data);}
-return new TextDecoder('utf-8').decode(data);};GzipImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'GzipImporter';},isTraceDataContainer(){return true;},extractSubtraces(){const eventData=GzipImporter.inflateGzipData_(this.gzipData_);return eventData?[eventData]:[];}};tr.importer.Importer.register(GzipImporter);return{GzipImporter,};});'use strict';tr.exportTo('tr.importer',function(){class SimpleLineReader{constructor(text){this.data_=text instanceof tr.b.TraceStream?text:text.split(new RegExp('\r?\n'));this.curLine_=0;this.readLastLine_=false;this.savedLines_=undefined;}*[Symbol.iterator](){let lastLine=undefined;while(this.hasData_){if(this.readLastLine_){this.curLine_++;this.readLastLine_=false;}else if(this.data_ instanceof tr.b.TraceStream){this.curLine_++;const line=this.data_.readUntilDelimiter('\n');if(line.endsWith('\r\n')){lastLine=line.slice(0,-2);}else if(line.endsWith('\n')){lastLine=line.slice(0,-1);}else{lastLine=line;}}else{this.curLine_++;lastLine=this.data_[this.curLine_-1];}
-yield lastLine;}}
-get curLineNumber(){return this.curLine_;}
-get hasData_(){if(this.data_ instanceof tr.b.TraceStream)return this.data_.hasData;return this.curLine_<this.data_.length;}
-advanceToLineMatching(regex){for(const line of this){if(this.savedLines_!==undefined)this.savedLines_.push(line);if(regex.test(line)){this.goBack_();return true;}}
-return false;}
-goBack_(){if(this.readLastLine_){throw new Error('There should be at least one nextLine call between '+'any two goBack calls.');}
-if(this.curLine_===0){throw new Error('There should be at least one nextLine call before '+'the first goBack call.');}
-this.readLastLine_=true;this.curLine_--;}
-beginSavingLines(){this.savedLines_=[];}
-endSavingLinesAndGetResult(){const tmp=this.savedLines_;this.savedLines_=undefined;return tmp;}}
-return{SimpleLineReader,};});'use strict';tr.exportTo('tr.e.importer',function(){function Trace2HTMLImporter(model,events){this.importPriority=0;}
-Trace2HTMLImporter.subtraces_=[];function _extractEventsFromHTML(text){Trace2HTMLImporter.subtraces_=[];const r=new tr.importer.SimpleLineReader(text);while(true){if(!r.advanceToLineMatching(new RegExp('^<\s*script id="viewer-data" '+'type="(application\/json|text\/plain)">\r?$'))){break;}
-r.beginSavingLines();if(!r.advanceToLineMatching(/^<\/\s*script>\r?$/))return;let rawEvents=r.endSavingLinesAndGetResult();rawEvents=rawEvents.slice(1,rawEvents.length-1);const data64=rawEvents.join('\n');const buffer=new ArrayBuffer(tr.b.Base64.getDecodedBufferLength(data64));const len=tr.b.Base64.DecodeToTypedArray(data64,new DataView(buffer));Trace2HTMLImporter.subtraces_.push(buffer.slice(0,len));}}
-function _canImportFromHTML(text){if(!/^<!DOCTYPE html>/.test(text))return false;_extractEventsFromHTML(text);if(Trace2HTMLImporter.subtraces_.length===0)return false;return true;}
-Trace2HTMLImporter.canImport=function(events){if(events instanceof tr.b.TraceStream)return false;return _canImportFromHTML(events);};Trace2HTMLImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'Trace2HTMLImporter';},isTraceDataContainer(){return true;},extractSubtraces(){return Trace2HTMLImporter.subtraces_;},importEvents(){}};tr.importer.Importer.register(Trace2HTMLImporter);return{Trace2HTMLImporter,};});'use strict';tr.exportTo('tr.e.importer.v8',function(){function SplayTree(){}
-SplayTree.prototype.root_=null;SplayTree.prototype.isEmpty=function(){return!this.root_;};SplayTree.prototype.insert=function(key,value){if(this.isEmpty()){this.root_=new SplayTree.Node(key,value);return;}
-this.splay_(key);if(this.root_.key===key){return;}
-const node=new SplayTree.Node(key,value);if(key>this.root_.key){node.left=this.root_;node.right=this.root_.right;this.root_.right=null;}else{node.right=this.root_;node.left=this.root_.left;this.root_.left=null;}
-this.root_=node;};SplayTree.prototype.remove=function(key){if(this.isEmpty()){throw Error('Key not found: '+key);}
-this.splay_(key);if(this.root_.key!==key){throw Error('Key not found: '+key);}
-const removed=this.root_;if(!this.root_.left){this.root_=this.root_.right;}else{const right=this.root_.right;this.root_=this.root_.left;this.splay_(key);this.root_.right=right;}
-return removed;};SplayTree.prototype.find=function(key){if(this.isEmpty())return null;this.splay_(key);return this.root_.key===key?this.root_:null;};SplayTree.prototype.findMin=function(){if(this.isEmpty())return null;let current=this.root_;while(current.left){current=current.left;}
-return current;};SplayTree.prototype.findMax=function(opt_startNode){if(this.isEmpty())return null;let current=opt_startNode||this.root_;while(current.right){current=current.right;}
-return current;};SplayTree.prototype.findGreatestLessThan=function(key){if(this.isEmpty())return null;this.splay_(key);if(this.root_.key<=key){return this.root_;}
-if(this.root_.left){return this.findMax(this.root_.left);}
-return null;};SplayTree.prototype.exportKeysAndValues=function(){const result=[];this.traverse_(function(node){result.push([node.key,node.value]);});return result;};SplayTree.prototype.exportValues=function(){const result=[];this.traverse_(function(node){result.push(node.value);});return result;};SplayTree.prototype.splay_=function(key){if(this.isEmpty())return;const dummy=new SplayTree.Node(null,null);let left=dummy;let right=dummy;let current=this.root_;while(true){if(key<current.key){if(!current.left){break;}
-if(key<current.left.key){const tmp=current.left;current.left=tmp.right;tmp.right=current;current=tmp;if(!current.left){break;}}
-right.left=current;right=current;current=current.left;}else if(key>current.key){if(!current.right){break;}
-if(key>current.right.key){const tmp=current.right;current.right=tmp.left;tmp.left=current;current=tmp;if(!current.right){break;}}
-left.right=current;left=current;current=current.right;}else{break;}}
-left.right=current.left;right.left=current.right;current.left=dummy.right;current.right=dummy.left;this.root_=current;};SplayTree.prototype.traverse_=function(f){const nodesToVisit=[this.root_];while(nodesToVisit.length>0){const node=nodesToVisit.shift();if(node===null)continue;f(node);nodesToVisit.push(node.left);nodesToVisit.push(node.right);}};SplayTree.Node=function(key,value){this.key=key;this.value=value;};SplayTree.Node.prototype.left=null;SplayTree.Node.prototype.right=null;return{SplayTree,};});'use strict';tr.exportTo('tr.e.importer.v8',function(){function CodeMap(){this.dynamics_=new tr.e.importer.v8.SplayTree();this.dynamicsNameGen_=new tr.e.importer.v8.CodeMap.NameGenerator();this.statics_=new tr.e.importer.v8.SplayTree();this.libraries_=new tr.e.importer.v8.SplayTree();this.pages_=[];}
-CodeMap.PAGE_ALIGNMENT=12;CodeMap.PAGE_SIZE=1<<CodeMap.PAGE_ALIGNMENT;CodeMap.prototype.addCode=function(start,codeEntry){this.deleteAllCoveredNodes_(this.dynamics_,start,start+codeEntry.size);this.dynamics_.insert(start,codeEntry);};CodeMap.prototype.moveCode=function(from,to){const removedNode=this.dynamics_.remove(from);this.deleteAllCoveredNodes_(this.dynamics_,to,to+removedNode.value.size);this.dynamics_.insert(to,removedNode.value);};CodeMap.prototype.deleteCode=function(start){const removedNode=this.dynamics_.remove(start);};CodeMap.prototype.addLibrary=function(start,codeEntry){this.markPages_(start,start+codeEntry.size);this.libraries_.insert(start,codeEntry);};CodeMap.prototype.addStaticCode=function(start,codeEntry){this.statics_.insert(start,codeEntry);};CodeMap.prototype.markPages_=function(start,end){for(let addr=start;addr<=end;addr+=CodeMap.PAGE_SIZE){this.pages_[addr>>>CodeMap.PAGE_ALIGNMENT]=1;}};CodeMap.prototype.deleteAllCoveredNodes_=function(tree,start,end){const toDelete=[];let addr=end-1;while(addr>=start){const node=tree.findGreatestLessThan(addr);if(!node)break;const start2=node.key;const end2=start2+node.value.size;if(start2<end&&start<end2)toDelete.push(start2);addr=start2-1;}
-for(let i=0,l=toDelete.length;i<l;++i)tree.remove(toDelete[i]);};CodeMap.prototype.isAddressBelongsTo_=function(addr,node){return addr>=node.key&&addr<(node.key+node.value.size);};CodeMap.prototype.findInTree_=function(tree,addr){const node=tree.findGreatestLessThan(addr);return node&&this.isAddressBelongsTo_(addr,node)?node.value:null;};CodeMap.prototype.findEntryInLibraries=function(addr){const pageAddr=addr>>>CodeMap.PAGE_ALIGNMENT;if(pageAddr in this.pages_){return this.findInTree_(this.libraries_,addr);}
-return undefined;};CodeMap.prototype.findEntry=function(addr){const pageAddr=addr>>>CodeMap.PAGE_ALIGNMENT;if(pageAddr in this.pages_){return this.findInTree_(this.statics_,addr)||this.findInTree_(this.libraries_,addr);}
-const min=this.dynamics_.findMin();const max=this.dynamics_.findMax();if(max!==null&&addr<(max.key+max.value.size)&&addr>=min.key){const dynaEntry=this.findInTree_(this.dynamics_,addr);if(dynaEntry===null)return null;if(!dynaEntry.nameUpdated_){dynaEntry.name=this.dynamicsNameGen_.getName(dynaEntry.name);dynaEntry.nameUpdated_=true;}
-return dynaEntry;}
-return null;};CodeMap.prototype.findDynamicEntryByStartAddress=function(addr){const node=this.dynamics_.find(addr);return node?node.value:null;};CodeMap.prototype.getAllDynamicEntries=function(){return this.dynamics_.exportValues();};CodeMap.prototype.getAllDynamicEntriesWithAddresses=function(){return this.dynamics_.exportKeysAndValues();};CodeMap.prototype.getAllStaticEntries=function(){return this.statics_.exportValues();};CodeMap.prototype.getAllLibrariesEntries=function(){return this.libraries_.exportValues();};CodeMap.CodeState={COMPILED:0,OPTIMIZABLE:1,OPTIMIZED:2};CodeMap.CodeEntry=function(size,opt_name,opt_type){this.id=tr.b.GUID.allocateSimple();this.size=size;this.name_=opt_name||'';this.type=opt_type||'';this.nameUpdated_=false;};CodeMap.CodeEntry.prototype={__proto__:Object.prototype,get name(){return this.name_;},set name(value){this.name_=value;},toString(){this.name_+': '+this.size.toString(16);}};CodeMap.CodeEntry.TYPE={SHARED_LIB:'SHARED_LIB',CPP:'CPP'};CodeMap.DynamicFuncCodeEntry=function(size,type,func,state){CodeMap.CodeEntry.call(this,size,'',type);this.func=func;this.state=state;};CodeMap.DynamicFuncCodeEntry.STATE_PREFIX=['','~','*'];CodeMap.DynamicFuncCodeEntry.prototype={__proto__:CodeMap.CodeEntry.prototype,get name(){return CodeMap.DynamicFuncCodeEntry.STATE_PREFIX[this.state]+
-this.func.name;},set name(value){this.name_=value;},getRawName(){return this.func.getName();},isJSFunction(){return true;},toString(){return this.type+': '+this.name+': '+this.size.toString(16);}};CodeMap.FunctionEntry=function(name){CodeMap.CodeEntry.call(this,0,name);};CodeMap.FunctionEntry.prototype={__proto__:CodeMap.CodeEntry.prototype,get name(){let name=this.name_;if(name.length===0){name='<anonymous>';}else if(name.charAt(0)===' '){name='<anonymous>'+name;}
-return name;},set name(value){this.name_=value;}};CodeMap.NameGenerator=function(){this.knownNames_={};};CodeMap.NameGenerator.prototype.getName=function(name){if(!(name in this.knownNames_)){this.knownNames_[name]=0;return name;}
-const count=++this.knownNames_[name];return name+' {'+count+'}';};return{CodeMap,};});'use strict';tr.exportTo('tr.e.importer.v8',function(){function CsvParser(){}
-CsvParser.CSV_FIELD_RE_=/^"((?:[^"]|"")*)"|([^,]*)/;CsvParser.DOUBLE_QUOTE_RE_=/""/g;CsvParser.prototype.parseLine=function(line){const fieldRe=CsvParser.CSV_FIELD_RE_;const doubleQuoteRe=CsvParser.DOUBLE_QUOTE_RE_;let pos=0;const endPos=line.length;const fields=[];if(endPos>0){do{const fieldMatch=fieldRe.exec(line.substr(pos));if(typeof fieldMatch[1]==='string'){const field=fieldMatch[1];pos+=field.length+3;fields.push(field.replace(doubleQuoteRe,'"'));}else{const field=fieldMatch[2];pos+=field.length+1;fields.push(field);}}while(pos<=endPos);}
-return fields;};function LogReader(dispatchTable){this.dispatchTable_=dispatchTable;this.lineNum_=0;this.csvParser_=new CsvParser();}
-LogReader.prototype.printError=function(str){};LogReader.prototype.processLogChunk=function(chunk){this.processLog_(chunk.split('\n'));};LogReader.prototype.processLogLine=function(line){this.processLog_([line]);};LogReader.prototype.processStack=function(pc,func,stack){const fullStack=func?[pc,func]:[pc];let prevFrame=pc;for(let i=0,n=stack.length;i<n;++i){const frame=stack[i];const firstChar=frame.charAt(0);if(firstChar==='+'||firstChar==='-'){prevFrame+=parseInt(frame,16);fullStack.push(prevFrame);}else if(firstChar!=='o'){fullStack.push(parseInt(frame,16));}}
-return fullStack;};LogReader.prototype.skipDispatch=function(dispatch){return false;};LogReader.prototype.dispatchLogRow_=function(fields){const command=fields[0];if(!(command in this.dispatchTable_))return;const dispatch=this.dispatchTable_[command];if(dispatch===null||this.skipDispatch(dispatch)){return;}
-const parsedFields=[];for(let i=0;i<dispatch.parsers.length;++i){const parser=dispatch.parsers[i];if(parser===null){parsedFields.push(fields[1+i]);}else if(typeof parser==='function'){parsedFields.push(parser(fields[1+i]));}else{parsedFields.push(fields.slice(1+i));break;}}
-dispatch.processor.apply(this,parsedFields);};LogReader.prototype.processLog_=function(lines){for(let i=0,n=lines.length;i<n;++i,++this.lineNum_){const line=lines[i];if(!line){continue;}
-try{const fields=this.csvParser_.parseLine(line);this.dispatchLogRow_(fields);}catch(e){this.printError('line '+(this.lineNum_+1)+': '+
-(e.message||e));}}};return{LogReader,};});'use strict';tr.exportTo('tr.model',function(){function ProfileNode(id,title,parentNode){this.id_=id;this.title_=title;this.parentNode_=parentNode;this.colorId_=-1;this.userFriendlyStack_=[];}
-ProfileNode.prototype={__proto__:Object.prototype,get title(){return this.title_;},get parentNode(){return this.parentNode_;},set parentNode(value){this.parentNode_=value;},get id(){return this.id_;},get colorId(){return this.colorId_;},set colorId(value){this.colorId_=value;},get userFriendlyName(){return this.title_;},get userFriendlyStack(){if(this.userFriendlyStack_.length===0){this.userFriendlyStack_=[this.userFriendlyName];if(this.parentNode_!==undefined){this.userFriendlyStack_=this.userFriendlyStack_.concat(this.parentNode_.userFriendlyStack);}}
-return this.userFriendlyStack_;},get sampleTitle(){throw new Error('Not implemented.');}};tr.model.EventRegistry.register(ProfileNode,{name:'Node',pluralName:'Nodes'});return{ProfileNode,};});'use strict';tr.exportTo('tr.e.v8',function(){const ProfileNode=tr.model.ProfileNode;function V8CpuProfileNode(id,callFrame,parentNode){ProfileNode.call(this,id,callFrame.functionName,parentNode);this.callFrame_=tr.b.deepCopy(callFrame);this.deoptReason_='';this.colorId_=tr.b.ColorScheme.getColorIdForGeneralPurposeString(callFrame.functionName);}
-V8CpuProfileNode.prototype={__proto__:ProfileNode.prototype,get functionName(){return this.callFrame_.functionName;},get scriptId(){return this.callFrame_.scriptId;},get url(){if(!this.callFrame_.url){return'unknown';}
-let url=this.callFrame_.url;if(this.callFrame_.lineNumber===undefined){return url;}
-url=url+':'+this.callFrame_.lineNumber;if(this.callFrame_.columnNumber===undefined){return url;}
-url=url+':'+this.callFrame_.columnNumber;return url;},get deoptReason(){return this.deoptReason_;},set deoptReason(value){this.deoptReason_=value;},get userFriendlyName(){const name=this.functionName+' url: '+this.url;return!this.deoptReason_?name:name+' Deoptimized reason: '+this.deoptReason_;},get sampleTitle(){return'V8 Sample';}};V8CpuProfileNode.constructFromObject=function(profileTree,node){const nodeId=node.id;if(nodeId===1){return undefined;}
-const parentNode=profileTree.getNode(node.parent);const profileNode=new V8CpuProfileNode(nodeId,node.callFrame,parentNode);if(node.deoptReason!==undefined){profileNode.deoptReason=node.deoptReason;}
-return profileNode;};ProfileNode.subTypes.register(V8CpuProfileNode,{typeName:'cpuProfile',name:'v8 cpu profile node',pluralName:'v8 cpu profile nodes'});ProfileNode.subTypes.register(V8CpuProfileNode,{typeName:'legacySample',name:'v8 cpu profile node',pluralName:'v8 cpu profile nodes'});return{ProfileNode,};});'use strict';tr.exportTo('tr.model',function(){function ProfileTree(){this.startTime_=undefined;this.endTime_=undefined;this.tree_=new Map();this.pid_=-1;this.tid_=-1;}
-ProfileTree.prototype={__proto__:Object.prototype,get pid(){return this.pid_;},set pid(value){this.pid_=value;},get tid(){return this.tid_;},set tid(value){this.tid_=value;},get tree(){return this.tree_;},get startTime(){return this.startTime_;},set startTime(value){this.startTime_=value;this.endTime_=value;},get endTime(){return this.endTime_;},set endTime(value){this.endTime_=value;},add(node){if(this.tree_.has(node.id)){throw new Error('Conflict id in the profile tree.');}
-this.tree_.set(node.id,node);return node;},getNode(nodeId){return this.tree_.get(nodeId);}};return{ProfileTree,};});'use strict';tr.exportTo('tr.e.importer.v8',function(){const CodeEntry=tr.e.importer.v8.CodeMap.CodeEntry;const CodeMap=tr.e.importer.v8.CodeMap;const ColorScheme=tr.b.ColorScheme;const DynamicFuncCodeEntry=tr.e.importer.v8.CodeMap.DynamicFuncCodeEntry;const FunctionEntry=tr.e.importer.v8.CodeMap.FunctionEntry;const ProfileNodeType=tr.model.ProfileNode.subTypes.getConstructor(undefined,'legacySample');function V8LogImporter(model,eventData){this.importPriority=3;this.model_=model;this.logData_=eventData;this.code_map_=new CodeMap();this.v8_timer_thread_=undefined;this.v8_thread_=undefined;this.profileTree_=new tr.model.ProfileTree();this.profileTree_.add(new ProfileNodeType(-1,{url:'',functionName:'unknown'}));this.v8_stack_timeline_=[];}
-const kV8BinarySuffixes=['/d8','/libv8.so'];const TimerEventDefaultArgs={'V8.Execute':{pause:false,no_execution:false},'V8.External':{pause:false,no_execution:true},'V8.CompileFullCode':{pause:true,no_execution:true},'V8.RecompileSynchronous':{pause:true,no_execution:true},'V8.RecompileParallel':{pause:false,no_execution:false},'V8.CompileEval':{pause:true,no_execution:true},'V8.Parse':{pause:true,no_execution:true},'V8.PreParse':{pause:true,no_execution:true},'V8.ParseLazy':{pause:true,no_execution:true},'V8.GCScavenger':{pause:true,no_execution:true},'V8.GCCompactor':{pause:true,no_execution:true},'V8.GCContext':{pause:true,no_execution:true}};V8LogImporter.canImport=function(eventData){if(typeof(eventData)!=='string'&&!(eventData instanceof String)){return false;}
-return eventData.substring(0,11)==='v8-version,'||eventData.substring(0,12)==='timer-event,'||eventData.substring(0,5)==='tick,'||eventData.substring(0,15)==='shared-library,'||eventData.substring(0,9)==='profiler,'||eventData.substring(0,14)==='code-creation,';};V8LogImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'V8LogImporter';},processTimerEvent_(name,startInUs,lengthInUs){const args=TimerEventDefaultArgs[name];if(args===undefined)return;const startInMs=tr.b.convertUnit(startInUs,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);const lengthInMs=tr.b.convertUnit(lengthInUs,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);const colorId=ColorScheme.getColorIdForGeneralPurposeString(name);const slice=new tr.model.ThreadSlice('v8',name,colorId,startInMs,args,lengthInMs);this.v8_timer_thread_.sliceGroup.pushSlice(slice);},processTimerEventStart_(name,startInUs){const args=TimerEventDefaultArgs[name];if(args===undefined)return;const startInMs=tr.b.convertUnit(startInUs,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);this.v8_timer_thread_.sliceGroup.beginSlice('v8',name,startInMs,args);},processTimerEventEnd_(name,endInUs){const endInMs=tr.b.convertUnit(endInUs,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);this.v8_timer_thread_.sliceGroup.endSlice(endInMs);},processCodeCreateEvent_(type,kind,address,size,name,maybeFunc){function parseState(s){switch(s){case'':return CodeMap.CodeState.COMPILED;case'~':return CodeMap.CodeState.OPTIMIZABLE;case'*':return CodeMap.CodeState.OPTIMIZED;}
-throw new Error('unknown code state: '+s);}
-if(maybeFunc.length){const funcAddr=parseInt(maybeFunc[0]);const state=parseState(maybeFunc[1]);let func=this.code_map_.findDynamicEntryByStartAddress(funcAddr);if(!func){func=new FunctionEntry(name);func.kind=kind;this.code_map_.addCode(funcAddr,func);}else if(func.name!==name){func.name=name;}
-let entry=this.code_map_.findDynamicEntryByStartAddress(address);if(entry){if(entry.size===size&&entry.func===func){entry.state=state;}}else{entry=new DynamicFuncCodeEntry(size,type,func,state);entry.kind=kind;this.code_map_.addCode(address,entry);}}else{const codeEntry=new CodeEntry(size,name);codeEntry.kind=kind;this.code_map_.addCode(address,codeEntry);}},processCodeMoveEvent_(from,to){this.code_map_.moveCode(from,to);},processCodeDeleteEvent_(address){this.code_map_.deleteCode(address);},processSharedLibrary_(name,start,end){const codeEntry=new CodeEntry(end-start,name,CodeEntry.TYPE.SHARED_LIB);codeEntry.kind=-3;for(let i=0;i<kV8BinarySuffixes.length;i++){const suffix=kV8BinarySuffixes[i];if(name.indexOf(suffix,name.length-suffix.length)>=0){codeEntry.kind=-1;break;}}
-this.code_map_.addLibrary(start,codeEntry);},processCppSymbol_(address,size,name){const codeEntry=new CodeEntry(size,name,CodeEntry.TYPE.CPP);codeEntry.kind=-1;this.code_map_.addStaticCode(address,codeEntry);},processTickEvent_(pc,startInUs,isExternalCallback,tosOrExternalCallback,vmstate,stack){const startInMs=tr.b.convertUnit(startInUs,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);function findChildWithEntryID(stackFrame,entryID){for(let i=0;i<stackFrame.children.length;i++){if(stackFrame.children[i].entryID===entryID){return stackFrame.children[i];}}
-return undefined;}
-function processStack(pc,func,stack){const fullStack=func?[pc,func]:[pc];let prevFrame=pc;for(let i=0,n=stack.length;i<n;++i){const frame=stack[i];const firstChar=frame.charAt(0);if(firstChar==='+'||firstChar==='-'){prevFrame+=parseInt(frame,16);fullStack.push(prevFrame);}else if(firstChar!=='o'){fullStack.push(parseInt(frame,16));}}
-return fullStack;}
-if(isExternalCallback){pc=tosOrExternalCallback;tosOrExternalCallback=0;}else if(tosOrExternalCallback){const funcEntry=this.code_map_.findEntry(tosOrExternalCallback);if(!funcEntry||!funcEntry.isJSFunction||!funcEntry.isJSFunction()){tosOrExternalCallback=0;}}
-let processedStack=processStack(pc,tosOrExternalCallback,stack);let node=undefined;let lastNode=undefined;processedStack=processedStack.reverse();for(let i=0,n=processedStack.length;i<n;i++){const frame=processedStack[i];if(!frame)break;const entry=this.code_map_.findEntry(frame);if(!entry&&i!==0){continue;}
-let sourceInfo=undefined;if(entry&&entry.type===CodeEntry.TYPE.CPP){const libEntry=this.code_map_.findEntryInLibraries(frame);if(libEntry){sourceInfo={file:libEntry.name};}}
-const entryId=entry?entry.id:-1;node=this.profileTree_.getNode(entryId);if(node===undefined){node=this.profileTree_.add(new ProfileNodeType(entryId,{functionName:entry.name,url:sourceInfo?sourceInfo.file:'',lineNumber:sourceInfo?sourceInfo.line:undefined,columnNumber:sourceInfo?sourceInfo.column:undefined,scriptId:sourceInfo?sourceInfo.scriptId:undefined},lastNode));}
-lastNode=node;}
-this.model_.samples.push(new tr.model.Sample(startInMs,'V8 PC',node,this.v8_thread_,undefined,1));},processDistortion_(distortionInPicoseconds){},processPlotRange_(start,end){},processV8Version_(major,minor,build,patch,candidate){},importEvents(){const logreader=new tr.e.importer.v8.LogReader({'timer-event':{parsers:[null,parseInt,parseInt],processor:this.processTimerEvent_.bind(this)},'shared-library':{parsers:[null,parseInt,parseInt],processor:this.processSharedLibrary_.bind(this)},'timer-event-start':{parsers:[null,parseInt],processor:this.processTimerEventStart_.bind(this)},'timer-event-end':{parsers:[null,parseInt],processor:this.processTimerEventEnd_.bind(this)},'code-creation':{parsers:[null,parseInt,parseInt,parseInt,null,'var-args'],processor:this.processCodeCreateEvent_.bind(this)},'code-move':{parsers:[parseInt,parseInt],processor:this.processCodeMoveEvent_.bind(this)},'code-delete':{parsers:[parseInt],processor:this.processCodeDeleteEvent_.bind(this)},'cpp':{parsers:[parseInt,parseInt,null],processor:this.processCppSymbol_.bind(this)},'tick':{parsers:[parseInt,parseInt,parseInt,parseInt,parseInt,'var-args'],processor:this.processTickEvent_.bind(this)},'distortion':{parsers:[parseInt],processor:this.processDistortion_.bind(this)},'plot-range':{parsers:[parseInt,parseInt],processor:this.processPlotRange_.bind(this)},'v8-version':{parsers:[parseInt,parseInt,parseInt,parseInt,parseInt],processor:this.processV8Version_.bind(this)}});this.v8_timer_thread_=this.model_.getOrCreateProcess(-32).getOrCreateThread(1);this.v8_timer_thread_.name='V8 Timers';this.v8_thread_=this.model_.getOrCreateProcess(-32).getOrCreateThread(2);this.v8_thread_.name='V8';const lines=this.logData_.split('\n');for(let i=0;i<lines.length;i++){logreader.processLogLine(lines[i]);}
-function addSlices(slices,thread){for(let i=0;i<slices.length;i++){const duration=slices[i].end-slices[i].start;const slice=new tr.model.ThreadSlice('v8',slices[i].name,ColorScheme.getColorIdForGeneralPurposeString(slices[i].name),slices[i].start,{},duration);thread.sliceGroup.pushSlice(slice);addSlices(slices[i].children,thread);}}
-addSlices(this.v8_stack_timeline_,this.v8_thread_);}};tr.importer.Importer.register(V8LogImporter);return{V8LogImporter,};});'use strict';if(tr.isVinn){global.window={};}
-!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.JSZip=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";c.encode=function(a){for(var b,c,e,f,g,h,i,j="",k=0;k<a.length;)b=a.charCodeAt(k++),c=a.charCodeAt(k++),e=a.charCodeAt(k++),f=b>>2,g=(3&b)<<4|c>>4,h=(15&c)<<2|e>>6,i=63&e,isNaN(c)?h=i=64:isNaN(e)&&(i=64),j=j+d.charAt(f)+d.charAt(g)+d.charAt(h)+d.charAt(i);return j},c.decode=function(a){var b,c,e,f,g,h,i,j="",k=0;for(a=a.replace(/[^A-Za-z0-9\+\/\=]/g,"");k<a.length;)f=d.indexOf(a.charAt(k++)),g=d.indexOf(a.charAt(k++)),h=d.indexOf(a.charAt(k++)),i=d.indexOf(a.charAt(k++)),b=f<<2|g>>4,c=(15&g)<<4|h>>2,e=(3&h)<<6|i,j+=String.fromCharCode(b),64!=h&&(j+=String.fromCharCode(c)),64!=i&&(j+=String.fromCharCode(e));return j}},{}],2:[function(a,b){"use strict";function c(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}c.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},b.exports=c},{}],3:[function(a,b,c){"use strict";c.STORE={magic:"\x00\x00",compress:function(a){return a},uncompress:function(a){return a},compressInputType:null,uncompressInputType:null},c.DEFLATE=a("./flate")},{"./flate":8}],4:[function(a,b){"use strict";var c=a("./utils"),d=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];b.exports=function(a,b){if("undefined"==typeof a||!a.length)return 0;var e="string"!==c.getTypeOf(a);"undefined"==typeof b&&(b=0);var f=0,g=0,h=0;b=-1^b;for(var i=0,j=a.length;j>i;i++)h=e?a[i]:a.charCodeAt(i),g=255&(b^h),f=d[g],b=b>>>8^f;return-1^b}},{"./utils":21}],5:[function(a,b){"use strict";function c(){this.data=null,this.length=0,this.index=0}var d=a("./utils");c.prototype={checkOffset:function(a){this.checkIndex(this.index+a)},checkIndex:function(a){if(this.length<a||0>a)throw new Error("End of data reached (data length = "+this.length+", asked index = "+a+"). Corrupted zip ?")},setIndex:function(a){this.checkIndex(a),this.index=a},skip:function(a){this.setIndex(this.index+a)},byteAt:function(){},readInt:function(a){var b,c=0;for(this.checkOffset(a),b=this.index+a-1;b>=this.index;b--)c=(c<<8)+this.byteAt(b);return this.index+=a,c},readString:function(a){return d.transformTo("string",this.readData(a))},readData:function(){},lastIndexOfSignature:function(){},readDate:function(){var a=this.readInt(4);return new Date((a>>25&127)+1980,(a>>21&15)-1,a>>16&31,a>>11&31,a>>5&63,(31&a)<<1)}},b.exports=c},{"./utils":21}],6:[function(a,b,c){"use strict";c.base64=!1,c.binary=!1,c.dir=!1,c.createFolders=!1,c.date=null,c.compression=null,c.comment=null},{}],7:[function(a,b,c){"use strict";var d=a("./utils");c.string2binary=function(a){return d.string2binary(a)},c.string2Uint8Array=function(a){return d.transformTo("uint8array",a)},c.uint8Array2String=function(a){return d.transformTo("string",a)},c.string2Blob=function(a){var b=d.transformTo("arraybuffer",a);return d.arrayBuffer2Blob(b)},c.arrayBuffer2Blob=function(a){return d.arrayBuffer2Blob(a)},c.transformTo=function(a,b){return d.transformTo(a,b)},c.getTypeOf=function(a){return d.getTypeOf(a)},c.checkSupport=function(a){return d.checkSupport(a)},c.MAX_VALUE_16BITS=d.MAX_VALUE_16BITS,c.MAX_VALUE_32BITS=d.MAX_VALUE_32BITS,c.pretty=function(a){return d.pretty(a)},c.findCompression=function(a){return d.findCompression(a)},c.isRegExp=function(a){return d.isRegExp(a)}},{"./utils":21}],8:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,e=a("pako");c.uncompressInputType=d?"uint8array":"array",c.compressInputType=d?"uint8array":"array",c.magic="\b\x00",c.compress=function(a){return e.deflateRaw(a)},c.uncompress=function(a){return e.inflateRaw(a)}},{pako:24}],9:[function(a,b){"use strict";function c(a,b){return this instanceof c?(this.files={},this.comment=null,this.root="",a&&this.load(a,b),void(this.clone=function(){var a=new c;for(var b in this)"function"!=typeof this[b]&&(a[b]=this[b]);return a})):new c(a,b)}var d=a("./base64");c.prototype=a("./object"),c.prototype.load=a("./load"),c.support=a("./support"),c.defaults=a("./defaults"),c.utils=a("./deprecatedPublicUtils"),c.base64={encode:function(a){return d.encode(a)},decode:function(a){return d.decode(a)}},c.compressions=a("./compressions"),b.exports=c},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(a,b){"use strict";var c=a("./base64"),d=a("./zipEntries");b.exports=function(a,b){var e,f,g,h;for(b=b||{},b.base64&&(a=c.decode(a)),f=new d(a,b),e=f.files,g=0;g<e.length;g++)h=e[g],this.file(h.fileName,h.decompressed,{binary:!0,optimizedBinaryString:!0,date:h.date,dir:h.dir,comment:h.fileComment.length?h.fileComment:null,createFolders:b.createFolders});return f.zipComment.length&&(this.comment=f.zipComment),this}},{"./base64":1,"./zipEntries":22}],11:[function(a,b){(function(a){"use strict";b.exports=function(b,c){return new a(b,c)},b.exports.test=function(b){return a.isBuffer(b)}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],12:[function(a,b){"use strict";function c(a){this.data=a,this.length=this.data.length,this.index=0}var d=a("./uint8ArrayReader");c.prototype=new d,c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./uint8ArrayReader":18}],13:[function(a,b){"use strict";var c=a("./support"),d=a("./utils"),e=a("./crc32"),f=a("./signature"),g=a("./defaults"),h=a("./base64"),i=a("./compressions"),j=a("./compressedObject"),k=a("./nodeBuffer"),l=a("./utf8"),m=a("./stringWriter"),n=a("./uint8ArrayWriter"),o=function(a){if(a._data instanceof j&&(a._data=a._data.getContent(),a.options.binary=!0,a.options.base64=!1,"uint8array"===d.getTypeOf(a._data))){var b=a._data;a._data=new Uint8Array(b.length),0!==b.length&&a._data.set(b,0)}return a._data},p=function(a){var b=o(a),e=d.getTypeOf(b);return"string"===e?!a.options.binary&&c.nodebuffer?k(b,"utf-8"):a.asBinary():b},q=function(a){var b=o(this);return null===b||"undefined"==typeof b?"":(this.options.base64&&(b=h.decode(b)),b=a&&this.options.binary?A.utf8decode(b):d.transformTo("string",b),a||this.options.binary||(b=d.transformTo("string",A.utf8encode(b))),b)},r=function(a,b,c){this.name=a,this.dir=c.dir,this.date=c.date,this.comment=c.comment,this._data=b,this.options=c,this._initialMetadata={dir:c.dir,date:c.date}};r.prototype={asText:function(){return q.call(this,!0)},asBinary:function(){return q.call(this,!1)},asNodeBuffer:function(){var a=p(this);return d.transformTo("nodebuffer",a)},asUint8Array:function(){var a=p(this);return d.transformTo("uint8array",a)},asArrayBuffer:function(){return this.asUint8Array().buffer}};var s=function(a,b){var c,d="";for(c=0;b>c;c++)d+=String.fromCharCode(255&a),a>>>=8;return d},t=function(){var a,b,c={};for(a=0;a<arguments.length;a++)for(b in arguments[a])arguments[a].hasOwnProperty(b)&&"undefined"==typeof c[b]&&(c[b]=arguments[a][b]);return c},u=function(a){return a=a||{},a.base64!==!0||null!==a.binary&&void 0!==a.binary||(a.binary=!0),a=t(a,g),a.date=a.date||new Date,null!==a.compression&&(a.compression=a.compression.toUpperCase()),a},v=function(a,b,c){var e,f=d.getTypeOf(b);if(c=u(c),c.createFolders&&(e=w(a))&&x.call(this,e,!0),c.dir||null===b||"undefined"==typeof b)c.base64=!1,c.binary=!1,b=null;else if("string"===f)c.binary&&!c.base64&&c.optimizedBinaryString!==!0&&(b=d.string2binary(b));else{if(c.base64=!1,c.binary=!0,!(f||b instanceof j))throw new Error("The data of '"+a+"' is in an unsupported format !");"arraybuffer"===f&&(b=d.transformTo("uint8array",b))}var g=new r(a,b,c);return this.files[a]=g,g},w=function(a){"/"==a.slice(-1)&&(a=a.substring(0,a.length-1));var b=a.lastIndexOf("/");return b>0?a.substring(0,b):""},x=function(a,b){return"/"!=a.slice(-1)&&(a+="/"),b="undefined"!=typeof b?b:!1,this.files[a]||v.call(this,a,null,{dir:!0,createFolders:b}),this.files[a]},y=function(a,b){var c,f=new j;return a._data instanceof j?(f.uncompressedSize=a._data.uncompressedSize,f.crc32=a._data.crc32,0===f.uncompressedSize||a.dir?(b=i.STORE,f.compressedContent="",f.crc32=0):a._data.compressionMethod===b.magic?f.compressedContent=a._data.getCompressedContent():(c=a._data.getContent(),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c)))):(c=p(a),(!c||0===c.length||a.dir)&&(b=i.STORE,c=""),f.uncompressedSize=c.length,f.crc32=e(c),f.compressedContent=b.compress(d.transformTo(b.compressInputType,c))),f.compressedSize=f.compressedContent.length,f.compressionMethod=b.magic,f},z=function(a,b,c,g){var h,i,j,k,m=(c.compressedContent,d.transformTo("string",l.utf8encode(b.name))),n=b.comment||"",o=d.transformTo("string",l.utf8encode(n)),p=m.length!==b.name.length,q=o.length!==n.length,r=b.options,t="",u="",v="";j=b._initialMetadata.dir!==b.dir?b.dir:r.dir,k=b._initialMetadata.date!==b.date?b.date:r.date,h=k.getHours(),h<<=6,h|=k.getMinutes(),h<<=5,h|=k.getSeconds()/2,i=k.getFullYear()-1980,i<<=4,i|=k.getMonth()+1,i<<=5,i|=k.getDate(),p&&(u=s(1,1)+s(e(m),4)+m,t+="up"+s(u.length,2)+u),q&&(v=s(1,1)+s(this.crc32(o),4)+o,t+="uc"+s(v.length,2)+v);var w="";w+="\n\x00",w+=p||q?"\x00\b":"\x00\x00",w+=c.compressionMethod,w+=s(h,2),w+=s(i,2),w+=s(c.crc32,4),w+=s(c.compressedSize,4),w+=s(c.uncompressedSize,4),w+=s(m.length,2),w+=s(t.length,2);var x=f.LOCAL_FILE_HEADER+w+m+t,y=f.CENTRAL_FILE_HEADER+"\x00"+w+s(o.length,2)+"\x00\x00\x00\x00"+(j===!0?"\x00\x00\x00":"\x00\x00\x00\x00")+s(g,4)+m+t+o;return{fileRecord:x,dirRecord:y,compressedObject:c}},A={load:function(){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(a){var b,c,d,e,f=[];for(b in this.files)this.files.hasOwnProperty(b)&&(d=this.files[b],e=new r(d.name,d._data,t(d.options)),c=b.slice(this.root.length,b.length),b.slice(0,this.root.length)===this.root&&a(c,e)&&f.push(e));return f},file:function(a,b,c){if(1===arguments.length){if(d.isRegExp(a)){var e=a;return this.filter(function(a,b){return!b.dir&&e.test(a)})}return this.filter(function(b,c){return!c.dir&&b===a})[0]||null}return a=this.root+a,v.call(this,a,b,c),this},folder:function(a){if(!a)return this;if(d.isRegExp(a))return this.filter(function(b,c){return c.dir&&a.test(b)});var b=this.root+a,c=x.call(this,b),e=this.clone();return e.root=c.name,e},remove:function(a){a=this.root+a;var b=this.files[a];if(b||("/"!=a.slice(-1)&&(a+="/"),b=this.files[a]),b&&!b.dir)delete this.files[a];else for(var c=this.filter(function(b,c){return c.name.slice(0,a.length)===a}),d=0;d<c.length;d++)delete this.files[c[d].name];return this},generate:function(a){a=t(a||{},{base64:!0,compression:"STORE",type:"base64",comment:null}),d.checkSupport(a.type);var b,c,e=[],g=0,j=0,k=d.transformTo("string",this.utf8encode(a.comment||this.comment||""));for(var l in this.files)if(this.files.hasOwnProperty(l)){var o=this.files[l],p=o.options.compression||a.compression.toUpperCase(),q=i[p];if(!q)throw new Error(p+" is not a valid compression method !");var r=y.call(this,o,q),u=z.call(this,l,o,r,g);g+=u.fileRecord.length+r.compressedSize,j+=u.dirRecord.length,e.push(u)}var v="";v=f.CENTRAL_DIRECTORY_END+"\x00\x00\x00\x00"+s(e.length,2)+s(e.length,2)+s(j,4)+s(g,4)+s(k.length,2)+k;var w=a.type.toLowerCase();for(b="uint8array"===w||"arraybuffer"===w||"blob"===w||"nodebuffer"===w?new n(g+j+v.length):new m(g+j+v.length),c=0;c<e.length;c++)b.append(e[c].fileRecord),b.append(e[c].compressedObject.compressedContent);for(c=0;c<e.length;c++)b.append(e[c].dirRecord);b.append(v);var x=b.finalize();switch(a.type.toLowerCase()){case"uint8array":case"arraybuffer":case"nodebuffer":return d.transformTo(a.type.toLowerCase(),x);case"blob":return d.arrayBuffer2Blob(d.transformTo("arraybuffer",x));case"base64":return a.base64?h.encode(x):x;default:return x}},crc32:function(a,b){return e(a,b)},utf8encode:function(a){return d.transformTo("string",l.utf8encode(a))},utf8decode:function(a){return l.utf8decode(a)}};b.exports=A},{"./base64":1,"./compressedObject":2,"./compressions":3,"./crc32":4,"./defaults":6,"./nodeBuffer":11,"./signature":14,"./stringWriter":16,"./support":17,"./uint8ArrayWriter":19,"./utf8":20,"./utils":21}],14:[function(a,b,c){"use strict";c.LOCAL_FILE_HEADER="PK",c.CENTRAL_FILE_HEADER="PK",c.CENTRAL_DIRECTORY_END="PK",c.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",c.ZIP64_CENTRAL_DIRECTORY_END="PK",c.DATA_DESCRIPTOR="PK\b"},{}],15:[function(a,b){"use strict";function c(a,b){this.data=a,b||(this.data=e.string2binary(this.data)),this.length=this.data.length,this.index=0}var d=a("./dataReader"),e=a("./utils");c.prototype=new d,c.prototype.byteAt=function(a){return this.data.charCodeAt(a)},c.prototype.lastIndexOfSignature=function(a){return this.data.lastIndexOf(a)},c.prototype.readData=function(a){this.checkOffset(a);var b=this.data.slice(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5,"./utils":21}],16:[function(a,b){"use strict";var c=a("./utils"),d=function(){this.data=[]};d.prototype={append:function(a){a=c.transformTo("string",a),this.data.push(a)},finalize:function(){return this.data.join("")}},b.exports=d},{"./utils":21}],17:[function(a,b,c){(function(a){"use strict";if(c.base64=!0,c.array=!0,c.string=!0,c.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,c.nodebuffer="undefined"!=typeof a,c.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)c.blob=!1;else{var b=new ArrayBuffer(0);try{c.blob=0===new Blob([b],{type:"application/zip"}).size}catch(d){try{var e=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,f=new e;f.append(b),c.blob=0===f.getBlob("application/zip").size}catch(d){c.blob=!1}}}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],18:[function(a,b){"use strict";function c(a){a&&(this.data=a,this.length=this.data.length,this.index=0)}var d=a("./dataReader");c.prototype=new d,c.prototype.byteAt=function(a){return this.data[a]},c.prototype.lastIndexOfSignature=function(a){for(var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=this.length-4;f>=0;--f)if(this.data[f]===b&&this.data[f+1]===c&&this.data[f+2]===d&&this.data[f+3]===e)return f;return-1},c.prototype.readData=function(a){if(this.checkOffset(a),0===a)return new Uint8Array(0);var b=this.data.subarray(this.index,this.index+a);return this.index+=a,b},b.exports=c},{"./dataReader":5}],19:[function(a,b){"use strict";var c=a("./utils"),d=function(a){this.data=new Uint8Array(a),this.index=0};d.prototype={append:function(a){0!==a.length&&(a=c.transformTo("uint8array",a),this.data.set(a,this.index),this.index+=a.length)},finalize:function(){return this.data}},b.exports=d},{"./utils":21}],20:[function(a,b,c){"use strict";for(var d=a("./utils"),e=a("./support"),f=a("./nodeBuffer"),g=new Array(256),h=0;256>h;h++)g[h]=h>=252?6:h>=248?5:h>=240?4:h>=224?3:h>=192?2:1;g[254]=g[254]=1;var i=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=e.uint8array?new Uint8Array(i):new Array(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},j=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+g[a[c]]>b?c:b},k=function(a){var b,c,e,f,h=a.length,i=new Array(2*h);for(c=0,b=0;h>b;)if(e=a[b++],128>e)i[c++]=e;else if(f=g[e],f>4)i[c++]=65533,b+=f-1;else{for(e&=2===f?31:3===f?15:7;f>1&&h>b;)e=e<<6|63&a[b++],f--;f>1?i[c++]=65533:65536>e?i[c++]=e:(e-=65536,i[c++]=55296|e>>10&1023,i[c++]=56320|1023&e)}return i.length!==c&&(i.subarray?i=i.subarray(0,c):i.length=c),d.applyFromCharCode(i)};c.utf8encode=function(a){return e.nodebuffer?f(a,"utf-8"):i(a)},c.utf8decode=function(a){if(e.nodebuffer)return d.transformTo("nodebuffer",a).toString("utf-8");a=d.transformTo(e.uint8array?"uint8array":"array",a);for(var b=[],c=0,f=a.length,g=65536;f>c;){var h=j(a,Math.min(c+g,f));b.push(e.uint8array?k(a.subarray(c,h)):k(a.slice(c,h))),c=h}return b.join("")}},{"./nodeBuffer":11,"./support":17,"./utils":21}],21:[function(a,b,c){"use strict";function d(a){return a}function e(a,b){for(var c=0;c<a.length;++c)b[c]=255&a.charCodeAt(c);return b}function f(a){var b=65536,d=[],e=a.length,f=c.getTypeOf(a),g=0,h=!0;try{switch(f){case"uint8array":String.fromCharCode.apply(null,new Uint8Array(0));break;case"nodebuffer":String.fromCharCode.apply(null,j(0))}}catch(i){h=!1}if(!h){for(var k="",l=0;l<a.length;l++)k+=String.fromCharCode(a[l]);return k}for(;e>g&&b>1;)try{d.push("array"===f||"nodebuffer"===f?String.fromCharCode.apply(null,a.slice(g,Math.min(g+b,e))):String.fromCharCode.apply(null,a.subarray(g,Math.min(g+b,e)))),g+=b}catch(i){b=Math.floor(b/2)}return d.join("")}function g(a,b){for(var c=0;c<a.length;c++)b[c]=a[c];return b}var h=a("./support"),i=a("./compressions"),j=a("./nodeBuffer");c.string2binary=function(a){for(var b="",c=0;c<a.length;c++)b+=String.fromCharCode(255&a.charCodeAt(c));return b},c.arrayBuffer2Blob=function(a){c.checkSupport("blob");try{return new Blob([a],{type:"application/zip"})}catch(b){try{var d=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,e=new d;return e.append(a),e.getBlob("application/zip")}catch(b){throw new Error("Bug : can't construct the Blob.")}}},c.applyFromCharCode=f;var k={};k.string={string:d,array:function(a){return e(a,new Array(a.length))},arraybuffer:function(a){return k.string.uint8array(a).buffer},uint8array:function(a){return e(a,new Uint8Array(a.length))},nodebuffer:function(a){return e(a,j(a.length))}},k.array={string:f,array:d,arraybuffer:function(a){return new Uint8Array(a).buffer},uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(a)}},k.arraybuffer={string:function(a){return f(new Uint8Array(a))},array:function(a){return g(new Uint8Array(a),new Array(a.byteLength))},arraybuffer:d,uint8array:function(a){return new Uint8Array(a)},nodebuffer:function(a){return j(new Uint8Array(a))}},k.uint8array={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return a.buffer},uint8array:d,nodebuffer:function(a){return j(a)}},k.nodebuffer={string:f,array:function(a){return g(a,new Array(a.length))},arraybuffer:function(a){return k.nodebuffer.uint8array(a).buffer},uint8array:function(a){return g(a,new Uint8Array(a.length))},nodebuffer:d},c.transformTo=function(a,b){if(b||(b=""),!a)return b;c.checkSupport(a);var d=c.getTypeOf(b),e=k[d][a](b);return e},c.getTypeOf=function(a){return"string"==typeof a?"string":"[object Array]"===Object.prototype.toString.call(a)?"array":h.nodebuffer&&j.test(a)?"nodebuffer":h.uint8array&&a instanceof Uint8Array?"uint8array":h.arraybuffer&&a instanceof ArrayBuffer?"arraybuffer":void 0},c.checkSupport=function(a){var b=h[a.toLowerCase()];if(!b)throw new Error(a+" is not supported by this browser")},c.MAX_VALUE_16BITS=65535,c.MAX_VALUE_32BITS=-1,c.pretty=function(a){var b,c,d="";for(c=0;c<(a||"").length;c++)b=a.charCodeAt(c),d+="\\x"+(16>b?"0":"")+b.toString(16).toUpperCase();return d},c.findCompression=function(a){for(var b in i)if(i.hasOwnProperty(b)&&i[b].magic===a)return i[b];return null},c.isRegExp=function(a){return"[object RegExp]"===Object.prototype.toString.call(a)}},{"./compressions":3,"./nodeBuffer":11,"./support":17}],22:[function(a,b){"use strict";function c(a,b){this.files=[],this.loadOptions=b,a&&this.load(a)}var d=a("./stringReader"),e=a("./nodeBufferReader"),f=a("./uint8ArrayReader"),g=a("./utils"),h=a("./signature"),i=a("./zipEntry"),j=a("./support"),k=a("./object");c.prototype={checkSignature:function(a){var b=this.reader.readString(4);if(b!==a)throw new Error("Corrupted zip or bug : unexpected signature ("+g.pretty(b)+", expected "+g.pretty(a)+")")},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2),this.zipComment=this.reader.readString(this.zipCommentLength),this.zipComment=k.utf8decode(this.zipComment)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.versionMadeBy=this.reader.readString(2),this.versionNeeded=this.reader.readInt(2),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var a,b,c,d=this.zip64EndOfCentralSize-44,e=0;d>e;)a=this.reader.readInt(2),b=this.reader.readInt(4),c=this.reader.readString(b),this.zip64ExtensibleData[a]={id:a,length:b,value:c}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var a,b;for(a=0;a<this.files.length;a++)b=this.files[a],this.reader.setIndex(b.localHeaderOffset),this.checkSignature(h.LOCAL_FILE_HEADER),b.readLocalPart(this.reader),b.handleUTF8()},readCentralDir:function(){var a;for(this.reader.setIndex(this.centralDirOffset);this.reader.readString(4)===h.CENTRAL_FILE_HEADER;)a=new i({zip64:this.zip64},this.loadOptions),a.readCentralPart(this.reader),this.files.push(a)},readEndOfCentral:function(){var a=this.reader.lastIndexOfSignature(h.CENTRAL_DIRECTORY_END);if(-1===a)throw new Error("Corrupted zip : can't find end of central directory");if(this.reader.setIndex(a),this.checkSignature(h.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===g.MAX_VALUE_16BITS||this.diskWithCentralDirStart===g.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===g.MAX_VALUE_16BITS||this.centralDirRecords===g.MAX_VALUE_16BITS||this.centralDirSize===g.MAX_VALUE_32BITS||this.centralDirOffset===g.MAX_VALUE_32BITS){if(this.zip64=!0,a=this.reader.lastIndexOfSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),-1===a)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");this.reader.setIndex(a),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(h.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}},prepareReader:function(a){var b=g.getTypeOf(a);this.reader="string"!==b||j.uint8array?"nodebuffer"===b?new e(a):new f(g.transformTo("uint8array",a)):new d(a,this.loadOptions.optimizedBinaryString)},load:function(a){this.prepareReader(a),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},b.exports=c},{"./nodeBufferReader":12,"./object":13,"./signature":14,"./stringReader":15,"./support":17,"./uint8ArrayReader":18,"./utils":21,"./zipEntry":23}],23:[function(a,b){"use strict";function c(a,b){this.options=a,this.loadOptions=b}var d=a("./stringReader"),e=a("./utils"),f=a("./compressedObject"),g=a("./object");c.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},prepareCompressedContent:function(a,b,c){return function(){var d=a.index;a.setIndex(b);var e=a.readData(c);return a.setIndex(d),e}},prepareContent:function(a,b,c,d,f){return function(){var a=e.transformTo(d.uncompressInputType,this.getCompressedContent()),b=d.uncompress(a);if(b.length!==f)throw new Error("Bug : uncompressed data size mismatch");return b}},readLocalPart:function(a){var b,c;if(a.skip(22),this.fileNameLength=a.readInt(2),c=a.readInt(2),this.fileName=a.readString(this.fileNameLength),a.skip(c),-1==this.compressedSize||-1==this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize == -1 || uncompressedSize == -1)");if(b=e.findCompression(this.compressionMethod),null===b)throw new Error("Corrupted zip : compression "+e.pretty(this.compressionMethod)+" unknown (inner file : "+this.fileName+")");if(this.decompressed=new f,this.decompressed.compressedSize=this.compressedSize,this.decompressed.uncompressedSize=this.uncompressedSize,this.decompressed.crc32=this.crc32,this.decompressed.compressionMethod=this.compressionMethod,this.decompressed.getCompressedContent=this.prepareCompressedContent(a,a.index,this.compressedSize,b),this.decompressed.getContent=this.prepareContent(a,a.index,this.compressedSize,b,this.uncompressedSize),this.loadOptions.checkCRC32&&(this.decompressed=e.transformTo("string",this.decompressed.getContent()),g.crc32(this.decompressed)!==this.crc32))throw new Error("Corrupted zip : CRC32 mismatch")},readCentralPart:function(a){if(this.versionMadeBy=a.readString(2),this.versionNeeded=a.readInt(2),this.bitFlag=a.readInt(2),this.compressionMethod=a.readString(2),this.date=a.readDate(),this.crc32=a.readInt(4),this.compressedSize=a.readInt(4),this.uncompressedSize=a.readInt(4),this.fileNameLength=a.readInt(2),this.extraFieldsLength=a.readInt(2),this.fileCommentLength=a.readInt(2),this.diskNumberStart=a.readInt(2),this.internalFileAttributes=a.readInt(2),this.externalFileAttributes=a.readInt(4),this.localHeaderOffset=a.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");this.fileName=a.readString(this.fileNameLength),this.readExtraFields(a),this.parseZIP64ExtraField(a),this.fileComment=a.readString(this.fileCommentLength),this.dir=16&this.externalFileAttributes?!0:!1},parseZIP64ExtraField:function(){if(this.extraFields[1]){var a=new d(this.extraFields[1].value);this.uncompressedSize===e.MAX_VALUE_32BITS&&(this.uncompressedSize=a.readInt(8)),this.compressedSize===e.MAX_VALUE_32BITS&&(this.compressedSize=a.readInt(8)),this.localHeaderOffset===e.MAX_VALUE_32BITS&&(this.localHeaderOffset=a.readInt(8)),this.diskNumberStart===e.MAX_VALUE_32BITS&&(this.diskNumberStart=a.readInt(4))}},readExtraFields:function(a){var b,c,d,e=a.index;for(this.extraFields=this.extraFields||{};a.index<e+this.extraFieldsLength;)b=a.readInt(2),c=a.readInt(2),d=a.readString(c),this.extraFields[b]={id:b,length:c,value:d}},handleUTF8:function(){if(this.useUTF8())this.fileName=g.utf8decode(this.fileName),this.fileComment=g.utf8decode(this.fileComment);else{var a=this.findExtraFieldUnicodePath();null!==a&&(this.fileName=a);var b=this.findExtraFieldUnicodeComment();null!==b&&(this.fileComment=b)}},findExtraFieldUnicodePath:function(){var a=this.extraFields[28789];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileName)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))}return null},findExtraFieldUnicodeComment:function(){var a=this.extraFields[25461];if(a){var b=new d(a.value);return 1!==b.readInt(1)?null:g.crc32(this.fileComment)!==b.readInt(4)?null:g.utf8decode(b.readString(a.length-5))}return null}},b.exports=c},{"./compressedObject":2,"./object":13,"./stringReader":15,"./utils":21}],24:[function(a,b){"use strict";var c=a("./lib/utils/common").assign,d=a("./lib/deflate"),e=a("./lib/inflate"),f=a("./lib/zlib/constants"),g={};c(g,d,e,f),b.exports=g},{"./lib/deflate":25,"./lib/inflate":26,"./lib/utils/common":27,"./lib/zlib/constants":30}],25:[function(a,b,c){"use strict";function d(a,b){var c=new s(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}function f(a,b){return b=b||{},b.gzip=!0,d(a,b)}var g=a("./zlib/deflate.js"),h=a("./utils/common"),i=a("./utils/strings"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=0,m=4,n=0,o=1,p=-1,q=0,r=8,s=function(a){this.options=h.assign({level:p,method:r,chunkSize:16384,windowBits:15,memLevel:8,strategy:q,to:""},a||{});var b=this.options;b.raw&&b.windowBits>0?b.windowBits=-b.windowBits:b.gzip&&b.windowBits>0&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=g.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(c!==n)throw new Error(j[c]);b.header&&g.deflateSetHeader(this.strm,b.header)};s.prototype.push=function(a,b){var c,d,e=this.strm,f=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?m:l,e.input="string"==typeof a?i.string2buf(a):a,e.next_in=0,e.avail_in=e.input.length;do{if(0===e.avail_out&&(e.output=new h.Buf8(f),e.next_out=0,e.avail_out=f),c=g.deflate(e,d),c!==o&&c!==n)return this.onEnd(c),this.ended=!0,!1;(0===e.avail_out||0===e.avail_in&&d===m)&&this.onData("string"===this.options.to?i.buf2binstring(h.shrinkBuf(e.output,e.next_out)):h.shrinkBuf(e.output,e.next_out))}while((e.avail_in>0||0===e.avail_out)&&c!==o);return d===m?(c=g.deflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===n):!0},s.prototype.onData=function(a){this.chunks.push(a)},s.prototype.onEnd=function(a){a===n&&(this.result="string"===this.options.to?this.chunks.join(""):h.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Deflate=s,c.deflate=d,c.deflateRaw=e,c.gzip=f},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(a,b,c){"use strict";function d(a,b){var c=new m(b);if(c.push(a,!0),c.err)throw c.msg;return c.result}function e(a,b){return b=b||{},b.raw=!0,d(a,b)}var f=a("./zlib/inflate.js"),g=a("./utils/common"),h=a("./utils/strings"),i=a("./zlib/constants"),j=a("./zlib/messages"),k=a("./zlib/zstream"),l=a("./zlib/gzheader"),m=function(a){this.options=g.assign({chunkSize:16384,windowBits:0,to:""},a||{});var b=this.options;b.raw&&b.windowBits>=0&&b.windowBits<16&&(b.windowBits=-b.windowBits,0===b.windowBits&&(b.windowBits=-15)),!(b.windowBits>=0&&b.windowBits<16)||a&&a.windowBits||(b.windowBits+=32),b.windowBits>15&&b.windowBits<48&&0===(15&b.windowBits)&&(b.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new k,this.strm.avail_out=0;var c=f.inflateInit2(this.strm,b.windowBits);if(c!==i.Z_OK)throw new Error(j[c]);this.header=new l,f.inflateGetHeader(this.strm,this.header)};m.prototype.push=function(a,b){var c,d,e,j,k,l=this.strm,m=this.options.chunkSize;if(this.ended)return!1;d=b===~~b?b:b===!0?i.Z_FINISH:i.Z_NO_FLUSH,l.input="string"==typeof a?h.binstring2buf(a):a,l.next_in=0,l.avail_in=l.input.length;do{if(0===l.avail_out&&(l.output=new g.Buf8(m),l.next_out=0,l.avail_out=m),c=f.inflate(l,i.Z_NO_FLUSH),c!==i.Z_STREAM_END&&c!==i.Z_OK)return this.onEnd(c),this.ended=!0,!1;l.next_out&&(0===l.avail_out||c===i.Z_STREAM_END||0===l.avail_in&&d===i.Z_FINISH)&&("string"===this.options.to?(e=h.utf8border(l.output,l.next_out),j=l.next_out-e,k=h.buf2string(l.output,e),l.next_out=j,l.avail_out=m-j,j&&g.arraySet(l.output,l.output,e,j,0),this.onData(k)):this.onData(g.shrinkBuf(l.output,l.next_out)))}while(l.avail_in>0&&c!==i.Z_STREAM_END);return c===i.Z_STREAM_END&&(d=i.Z_FINISH),d===i.Z_FINISH?(c=f.inflateEnd(this.strm),this.onEnd(c),this.ended=!0,c===i.Z_OK):!0},m.prototype.onData=function(a){this.chunks.push(a)},m.prototype.onEnd=function(a){a===i.Z_OK&&(this.result="string"===this.options.to?this.chunks.join(""):g.flattenChunks(this.chunks)),this.chunks=[],this.err=a,this.msg=this.strm.msg},c.Inflate=m,c.inflate=d,c.inflateRaw=e,c.ungzip=d},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(a,b,c){"use strict";var d="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;c.assign=function(a){for(var b=Array.prototype.slice.call(arguments,1);b.length;){var c=b.shift();if(c){if("object"!=typeof c)throw new TypeError(c+"must be non-object");for(var d in c)c.hasOwnProperty(d)&&(a[d]=c[d])}}return a},c.shrinkBuf=function(a,b){return a.length===b?a:a.subarray?a.subarray(0,b):(a.length=b,a)};var e={arraySet:function(a,b,c,d,e){if(b.subarray&&a.subarray)return void a.set(b.subarray(c,c+d),e);for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){var b,c,d,e,f,g;for(d=0,b=0,c=a.length;c>b;b++)d+=a[b].length;for(g=new Uint8Array(d),e=0,b=0,c=a.length;c>b;b++)f=a[b],g.set(f,e),e+=f.length;return g}},f={arraySet:function(a,b,c,d,e){for(var f=0;d>f;f++)a[e+f]=b[c+f]},flattenChunks:function(a){return[].concat.apply([],a)}};c.setTyped=function(a){a?(c.Buf8=Uint8Array,c.Buf16=Uint16Array,c.Buf32=Int32Array,c.assign(c,e)):(c.Buf8=Array,c.Buf16=Array,c.Buf32=Array,c.assign(c,f))},c.setTyped(d)},{}],28:[function(a,b,c){"use strict";function d(a,b){if(65537>b&&(a.subarray&&g||!a.subarray&&f))return String.fromCharCode.apply(null,e.shrinkBuf(a,b));for(var c="",d=0;b>d;d++)c+=String.fromCharCode(a[d]);return c}var e=a("./common"),f=!0,g=!0;try{String.fromCharCode.apply(null,[0])}catch(h){f=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(h){g=!1}for(var i=new e.Buf8(256),j=0;256>j;j++)i[j]=j>=252?6:j>=248?5:j>=240?4:j>=224?3:j>=192?2:1;i[254]=i[254]=1,c.string2buf=function(a){var b,c,d,f,g,h=a.length,i=0;for(f=0;h>f;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),i+=128>c?1:2048>c?2:65536>c?3:4;for(b=new e.Buf8(i),g=0,f=0;i>g;f++)c=a.charCodeAt(f),55296===(64512&c)&&h>f+1&&(d=a.charCodeAt(f+1),56320===(64512&d)&&(c=65536+(c-55296<<10)+(d-56320),f++)),128>c?b[g++]=c:2048>c?(b[g++]=192|c>>>6,b[g++]=128|63&c):65536>c?(b[g++]=224|c>>>12,b[g++]=128|c>>>6&63,b[g++]=128|63&c):(b[g++]=240|c>>>18,b[g++]=128|c>>>12&63,b[g++]=128|c>>>6&63,b[g++]=128|63&c);return b},c.buf2binstring=function(a){return d(a,a.length)},c.binstring2buf=function(a){for(var b=new e.Buf8(a.length),c=0,d=b.length;d>c;c++)b[c]=a.charCodeAt(c);return b},c.buf2string=function(a,b){var c,e,f,g,h=b||a.length,j=new Array(2*h);for(e=0,c=0;h>c;)if(f=a[c++],128>f)j[e++]=f;else if(g=i[f],g>4)j[e++]=65533,c+=g-1;else{for(f&=2===g?31:3===g?15:7;g>1&&h>c;)f=f<<6|63&a[c++],g--;g>1?j[e++]=65533:65536>f?j[e++]=f:(f-=65536,j[e++]=55296|f>>10&1023,j[e++]=56320|1023&f)}return d(j,e)},c.utf8border=function(a,b){var c;for(b=b||a.length,b>a.length&&(b=a.length),c=b-1;c>=0&&128===(192&a[c]);)c--;return 0>c?b:0===c?b:c+i[a[c]]>b?c:b}},{"./common":27}],29:[function(a,b){"use strict";function c(a,b,c,d){for(var e=65535&a|0,f=a>>>16&65535|0,g=0;0!==c;){g=c>2e3?2e3:c,c-=g;do e=e+b[d++]|0,f=f+e|0;while(--g);e%=65521,f%=65521}return e|f<<16|0}b.exports=c},{}],30:[function(a,b){b.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(a,b){"use strict";function c(){for(var a,b=[],c=0;256>c;c++){a=c;for(var d=0;8>d;d++)a=1&a?3988292384^a>>>1:a>>>1;b[c]=a}return b}function d(a,b,c,d){var f=e,g=d+c;a=-1^a;for(var h=d;g>h;h++)a=a>>>8^f[255&(a^b[h])];return-1^a}var e=c();b.exports=d},{}],32:[function(a,b,c){"use strict";function d(a,b){return a.msg=G[b],b}function e(a){return(a<<1)-(a>4?9:0)}function f(a){for(var b=a.length;--b>=0;)a[b]=0}function g(a){var b=a.state,c=b.pending;c>a.avail_out&&(c=a.avail_out),0!==c&&(C.arraySet(a.output,b.pending_buf,b.pending_out,c,a.next_out),a.next_out+=c,b.pending_out+=c,a.total_out+=c,a.avail_out-=c,b.pending-=c,0===b.pending&&(b.pending_out=0))}function h(a,b){D._tr_flush_block(a,a.block_start>=0?a.block_start:-1,a.strstart-a.block_start,b),a.block_start=a.strstart,g(a.strm)}function i(a,b){a.pending_buf[a.pending++]=b}function j(a,b){a.pending_buf[a.pending++]=b>>>8&255,a.pending_buf[a.pending++]=255&b}function k(a,b,c,d){var e=a.avail_in;return e>d&&(e=d),0===e?0:(a.avail_in-=e,C.arraySet(b,a.input,a.next_in,e,c),1===a.state.wrap?a.adler=E(a.adler,b,e,c):2===a.state.wrap&&(a.adler=F(a.adler,b,e,c)),a.next_in+=e,a.total_in+=e,e)}function l(a,b){var c,d,e=a.max_chain_length,f=a.strstart,g=a.prev_length,h=a.nice_match,i=a.strstart>a.w_size-jb?a.strstart-(a.w_size-jb):0,j=a.window,k=a.w_mask,l=a.prev,m=a.strstart+ib,n=j[f+g-1],o=j[f+g];a.prev_length>=a.good_match&&(e>>=2),h>a.lookahead&&(h=a.lookahead);do if(c=b,j[c+g]===o&&j[c+g-1]===n&&j[c]===j[f]&&j[++c]===j[f+1]){f+=2,c++;do;while(j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&j[++f]===j[++c]&&m>f);if(d=ib-(m-f),f=m-ib,d>g){if(a.match_start=b,g=d,d>=h)break;n=j[f+g-1],o=j[f+g]}}while((b=l[b&k])>i&&0!==--e);return g<=a.lookahead?g:a.lookahead}function m(a){var b,c,d,e,f,g=a.w_size;do{if(e=a.window_size-a.lookahead-a.strstart,a.strstart>=g+(g-jb)){C.arraySet(a.window,a.window,g,g,0),a.match_start-=g,a.strstart-=g,a.block_start-=g,c=a.hash_size,b=c;do d=a.head[--b],a.head[b]=d>=g?d-g:0;while(--c);c=g,b=c;do d=a.prev[--b],a.prev[b]=d>=g?d-g:0;while(--c);e+=g}if(0===a.strm.avail_in)break;if(c=k(a.strm,a.window,a.strstart+a.lookahead,e),a.lookahead+=c,a.lookahead+a.insert>=hb)for(f=a.strstart-a.insert,a.ins_h=a.window[f],a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+1])&a.hash_mask;a.insert&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[f+hb-1])&a.hash_mask,a.prev[f&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=f,f++,a.insert--,!(a.lookahead+a.insert<hb)););}while(a.lookahead<jb&&0!==a.strm.avail_in)}function n(a,b){var c=65535;for(c>a.pending_buf_size-5&&(c=a.pending_buf_size-5);;){if(a.lookahead<=1){if(m(a),0===a.lookahead&&b===H)return sb;if(0===a.lookahead)break}a.strstart+=a.lookahead,a.lookahead=0;var d=a.block_start+c;if((0===a.strstart||a.strstart>=d)&&(a.lookahead=a.strstart-d,a.strstart=d,h(a,!1),0===a.strm.avail_out))return sb;if(a.strstart-a.block_start>=a.w_size-jb&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.strstart>a.block_start&&(h(a,!1),0===a.strm.avail_out)?sb:sb}function o(a,b){for(var c,d;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),0!==c&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c)),a.match_length>=hb)if(d=D._tr_tally(a,a.strstart-a.match_start,a.match_length-hb),a.lookahead-=a.match_length,a.match_length<=a.max_lazy_match&&a.lookahead>=hb){a.match_length--;do a.strstart++,a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart;while(0!==--a.match_length);a.strstart++}else a.strstart+=a.match_length,a.match_length=0,a.ins_h=a.window[a.strstart],a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+1])&a.hash_mask;else d=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++;if(d&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function p(a,b){for(var c,d,e;;){if(a.lookahead<jb){if(m(a),a.lookahead<jb&&b===H)return sb;if(0===a.lookahead)break}if(c=0,a.lookahead>=hb&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart),a.prev_length=a.match_length,a.prev_match=a.match_start,a.match_length=hb-1,0!==c&&a.prev_length<a.max_lazy_match&&a.strstart-c<=a.w_size-jb&&(a.match_length=l(a,c),a.match_length<=5&&(a.strategy===S||a.match_length===hb&&a.strstart-a.match_start>4096)&&(a.match_length=hb-1)),a.prev_length>=hb&&a.match_length<=a.prev_length){e=a.strstart+a.lookahead-hb,d=D._tr_tally(a,a.strstart-1-a.prev_match,a.prev_length-hb),a.lookahead-=a.prev_length-1,a.prev_length-=2;do++a.strstart<=e&&(a.ins_h=(a.ins_h<<a.hash_shift^a.window[a.strstart+hb-1])&a.hash_mask,c=a.prev[a.strstart&a.w_mask]=a.head[a.ins_h],a.head[a.ins_h]=a.strstart);while(0!==--a.prev_length);if(a.match_available=0,a.match_length=hb-1,a.strstart++,d&&(h(a,!1),0===a.strm.avail_out))return sb}else if(a.match_available){if(d=D._tr_tally(a,0,a.window[a.strstart-1]),d&&h(a,!1),a.strstart++,a.lookahead--,0===a.strm.avail_out)return sb}else a.match_available=1,a.strstart++,a.lookahead--}return a.match_available&&(d=D._tr_tally(a,0,a.window[a.strstart-1]),a.match_available=0),a.insert=a.strstart<hb-1?a.strstart:hb-1,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function q(a,b){for(var c,d,e,f,g=a.window;;){if(a.lookahead<=ib){if(m(a),a.lookahead<=ib&&b===H)return sb;if(0===a.lookahead)break}if(a.match_length=0,a.lookahead>=hb&&a.strstart>0&&(e=a.strstart-1,d=g[e],d===g[++e]&&d===g[++e]&&d===g[++e])){f=a.strstart+ib;do;while(d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&d===g[++e]&&f>e);a.match_length=ib-(f-e),a.match_length>a.lookahead&&(a.match_length=a.lookahead)}if(a.match_length>=hb?(c=D._tr_tally(a,1,a.match_length-hb),a.lookahead-=a.match_length,a.strstart+=a.match_length,a.match_length=0):(c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++),c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function r(a,b){for(var c;;){if(0===a.lookahead&&(m(a),0===a.lookahead)){if(b===H)return sb;break}if(a.match_length=0,c=D._tr_tally(a,0,a.window[a.strstart]),a.lookahead--,a.strstart++,c&&(h(a,!1),0===a.strm.avail_out))return sb}return a.insert=0,b===K?(h(a,!0),0===a.strm.avail_out?ub:vb):a.last_lit&&(h(a,!1),0===a.strm.avail_out)?sb:tb}function s(a){a.window_size=2*a.w_size,f(a.head),a.max_lazy_match=B[a.level].max_lazy,a.good_match=B[a.level].good_length,a.nice_match=B[a.level].nice_length,a.max_chain_length=B[a.level].max_chain,a.strstart=0,a.block_start=0,a.lookahead=0,a.insert=0,a.match_length=a.prev_length=hb-1,a.match_available=0,a.ins_h=0}function t(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Y,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new C.Buf16(2*fb),this.dyn_dtree=new C.Buf16(2*(2*db+1)),this.bl_tree=new C.Buf16(2*(2*eb+1)),f(this.dyn_ltree),f(this.dyn_dtree),f(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new C.Buf16(gb+1),this.heap=new C.Buf16(2*cb+1),f(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new C.Buf16(2*cb+1),f(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function u(a){var b;return a&&a.state?(a.total_in=a.total_out=0,a.data_type=X,b=a.state,b.pending=0,b.pending_out=0,b.wrap<0&&(b.wrap=-b.wrap),b.status=b.wrap?lb:qb,a.adler=2===b.wrap?0:1,b.last_flush=H,D._tr_init(b),M):d(a,O)}function v(a){var b=u(a);return b===M&&s(a.state),b}function w(a,b){return a&&a.state?2!==a.state.wrap?O:(a.state.gzhead=b,M):O}function x(a,b,c,e,f,g){if(!a)return O;var h=1;if(b===R&&(b=6),0>e?(h=0,e=-e):e>15&&(h=2,e-=16),1>f||f>Z||c!==Y||8>e||e>15||0>b||b>9||0>g||g>V)return d(a,O);8===e&&(e=9);var i=new t;return a.state=i,i.strm=a,i.wrap=h,i.gzhead=null,i.w_bits=e,i.w_size=1<<i.w_bits,i.w_mask=i.w_size-1,i.hash_bits=f+7,i.hash_size=1<<i.hash_bits,i.hash_mask=i.hash_size-1,i.hash_shift=~~((i.hash_bits+hb-1)/hb),i.window=new C.Buf8(2*i.w_size),i.head=new C.Buf16(i.hash_size),i.prev=new C.Buf16(i.w_size),i.lit_bufsize=1<<f+6,i.pending_buf_size=4*i.lit_bufsize,i.pending_buf=new C.Buf8(i.pending_buf_size),i.d_buf=i.lit_bufsize>>1,i.l_buf=3*i.lit_bufsize,i.level=b,i.strategy=g,i.method=c,v(a)}function y(a,b){return x(a,b,Y,$,_,W)}function z(a,b){var c,h,k,l;if(!a||!a.state||b>L||0>b)return a?d(a,O):O;if(h=a.state,!a.output||!a.input&&0!==a.avail_in||h.status===rb&&b!==K)return d(a,0===a.avail_out?Q:O);if(h.strm=a,c=h.last_flush,h.last_flush=b,h.status===lb)if(2===h.wrap)a.adler=0,i(h,31),i(h,139),i(h,8),h.gzhead?(i(h,(h.gzhead.text?1:0)+(h.gzhead.hcrc?2:0)+(h.gzhead.extra?4:0)+(h.gzhead.name?8:0)+(h.gzhead.comment?16:0)),i(h,255&h.gzhead.time),i(h,h.gzhead.time>>8&255),i(h,h.gzhead.time>>16&255),i(h,h.gzhead.time>>24&255),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,255&h.gzhead.os),h.gzhead.extra&&h.gzhead.extra.length&&(i(h,255&h.gzhead.extra.length),i(h,h.gzhead.extra.length>>8&255)),h.gzhead.hcrc&&(a.adler=F(a.adler,h.pending_buf,h.pending,0)),h.gzindex=0,h.status=mb):(i(h,0),i(h,0),i(h,0),i(h,0),i(h,0),i(h,9===h.level?2:h.strategy>=T||h.level<2?4:0),i(h,wb),h.status=qb);else{var m=Y+(h.w_bits-8<<4)<<8,n=-1;n=h.strategy>=T||h.level<2?0:h.level<6?1:6===h.level?2:3,m|=n<<6,0!==h.strstart&&(m|=kb),m+=31-m%31,h.status=qb,j(h,m),0!==h.strstart&&(j(h,a.adler>>>16),j(h,65535&a.adler)),a.adler=1}if(h.status===mb)if(h.gzhead.extra){for(k=h.pending;h.gzindex<(65535&h.gzhead.extra.length)&&(h.pending!==h.pending_buf_size||(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending!==h.pending_buf_size));)i(h,255&h.gzhead.extra[h.gzindex]),h.gzindex++;h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),h.gzindex===h.gzhead.extra.length&&(h.gzindex=0,h.status=nb)}else h.status=nb;if(h.status===nb)if(h.gzhead.name){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.name.length?255&h.gzhead.name.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.gzindex=0,h.status=ob)}else h.status=ob;if(h.status===ob)if(h.gzhead.comment){k=h.pending;do{if(h.pending===h.pending_buf_size&&(h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),g(a),k=h.pending,h.pending===h.pending_buf_size)){l=1;break}l=h.gzindex<h.gzhead.comment.length?255&h.gzhead.comment.charCodeAt(h.gzindex++):0,i(h,l)}while(0!==l);h.gzhead.hcrc&&h.pending>k&&(a.adler=F(a.adler,h.pending_buf,h.pending-k,k)),0===l&&(h.status=pb)}else h.status=pb;if(h.status===pb&&(h.gzhead.hcrc?(h.pending+2>h.pending_buf_size&&g(a),h.pending+2<=h.pending_buf_size&&(i(h,255&a.adler),i(h,a.adler>>8&255),a.adler=0,h.status=qb)):h.status=qb),0!==h.pending){if(g(a),0===a.avail_out)return h.last_flush=-1,M}else if(0===a.avail_in&&e(b)<=e(c)&&b!==K)return d(a,Q);if(h.status===rb&&0!==a.avail_in)return d(a,Q);if(0!==a.avail_in||0!==h.lookahead||b!==H&&h.status!==rb){var o=h.strategy===T?r(h,b):h.strategy===U?q(h,b):B[h.level].func(h,b);if((o===ub||o===vb)&&(h.status=rb),o===sb||o===ub)return 0===a.avail_out&&(h.last_flush=-1),M;if(o===tb&&(b===I?D._tr_align(h):b!==L&&(D._tr_stored_block(h,0,0,!1),b===J&&(f(h.head),0===h.lookahead&&(h.strstart=0,h.block_start=0,h.insert=0))),g(a),0===a.avail_out))return h.last_flush=-1,M}return b!==K?M:h.wrap<=0?N:(2===h.wrap?(i(h,255&a.adler),i(h,a.adler>>8&255),i(h,a.adler>>16&255),i(h,a.adler>>24&255),i(h,255&a.total_in),i(h,a.total_in>>8&255),i(h,a.total_in>>16&255),i(h,a.total_in>>24&255)):(j(h,a.adler>>>16),j(h,65535&a.adler)),g(a),h.wrap>0&&(h.wrap=-h.wrap),0!==h.pending?M:N)}function A(a){var b;return a&&a.state?(b=a.state.status,b!==lb&&b!==mb&&b!==nb&&b!==ob&&b!==pb&&b!==qb&&b!==rb?d(a,O):(a.state=null,b===qb?d(a,P):M)):O}var B,C=a("../utils/common"),D=a("./trees"),E=a("./adler32"),F=a("./crc32"),G=a("./messages"),H=0,I=1,J=3,K=4,L=5,M=0,N=1,O=-2,P=-3,Q=-5,R=-1,S=1,T=2,U=3,V=4,W=0,X=2,Y=8,Z=9,$=15,_=8,ab=29,bb=256,cb=bb+1+ab,db=30,eb=19,fb=2*cb+1,gb=15,hb=3,ib=258,jb=ib+hb+1,kb=32,lb=42,mb=69,nb=73,ob=91,pb=103,qb=113,rb=666,sb=1,tb=2,ub=3,vb=4,wb=3,xb=function(a,b,c,d,e){this.good_length=a,this.max_lazy=b,this.nice_length=c,this.max_chain=d,this.func=e};B=[new xb(0,0,0,0,n),new xb(4,4,8,4,o),new xb(4,5,16,8,o),new xb(4,6,32,32,o),new xb(4,4,16,16,p),new xb(8,16,32,32,p),new xb(8,16,128,128,p),new xb(8,32,128,256,p),new xb(32,128,258,1024,p),new xb(32,258,258,4096,p)],c.deflateInit=y,c.deflateInit2=x,c.deflateReset=v,c.deflateResetKeep=u,c.deflateSetHeader=w,c.deflate=z,c.deflateEnd=A,c.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(a,b){"use strict";function c(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}b.exports=c},{}],34:[function(a,b){"use strict";var c=30,d=12;b.exports=function(a,b){var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;e=a.state,f=a.next_in,B=a.input,g=f+(a.avail_in-5),h=a.next_out,C=a.output,i=h-(b-a.avail_out),j=h+(a.avail_out-257),k=e.dmax,l=e.wsize,m=e.whave,n=e.wnext,o=e.window,p=e.hold,q=e.bits,r=e.lencode,s=e.distcode,t=(1<<e.lenbits)-1,u=(1<<e.distbits)-1;a:do{15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=r[p&t];b:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,0===w)C[h++]=65535&v;else{if(!(16&w)){if(0===(64&w)){v=r[(65535&v)+(p&(1<<w)-1)];continue b}if(32&w){e.mode=d;break a}a.msg="invalid literal/length code",e.mode=c;break a}x=65535&v,w&=15,w&&(w>q&&(p+=B[f++]<<q,q+=8),x+=p&(1<<w)-1,p>>>=w,q-=w),15>q&&(p+=B[f++]<<q,q+=8,p+=B[f++]<<q,q+=8),v=s[p&u];c:for(;;){if(w=v>>>24,p>>>=w,q-=w,w=v>>>16&255,!(16&w)){if(0===(64&w)){v=s[(65535&v)+(p&(1<<w)-1)];continue c}a.msg="invalid distance code",e.mode=c;break a}if(y=65535&v,w&=15,w>q&&(p+=B[f++]<<q,q+=8,w>q&&(p+=B[f++]<<q,q+=8)),y+=p&(1<<w)-1,y>k){a.msg="invalid distance too far back",e.mode=c;break a}if(p>>>=w,q-=w,w=h-i,y>w){if(w=y-w,w>m&&e.sane){a.msg="invalid distance too far back",e.mode=c;break a}if(z=0,A=o,0===n){if(z+=l-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}else if(w>n){if(z+=l+n-w,w-=n,x>w){x-=w;do C[h++]=o[z++];while(--w);if(z=0,x>n){w=n,x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}}}else if(z+=n-w,x>w){x-=w;do C[h++]=o[z++];while(--w);z=h-y,A=C}for(;x>2;)C[h++]=A[z++],C[h++]=A[z++],C[h++]=A[z++],x-=3;x&&(C[h++]=A[z++],x>1&&(C[h++]=A[z++]))}else{z=h-y;do C[h++]=C[z++],C[h++]=C[z++],C[h++]=C[z++],x-=3;while(x>2);x&&(C[h++]=C[z++],x>1&&(C[h++]=C[z++]))}break}}break}}while(g>f&&j>h);x=q>>3,f-=x,q-=x<<3,p&=(1<<q)-1,a.next_in=f,a.next_out=h,a.avail_in=g>f?5+(g-f):5-(f-g),a.avail_out=j>h?257+(j-h):257-(h-j),e.hold=p,e.bits=q}},{}],35:[function(a,b,c){"use strict";function d(a){return(a>>>24&255)+(a>>>8&65280)+((65280&a)<<8)+((255&a)<<24)}function e(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(a){var b;return a&&a.state?(b=a.state,a.total_in=a.total_out=b.total=0,a.msg="",b.wrap&&(a.adler=1&b.wrap),b.mode=K,b.last=0,b.havedict=0,b.dmax=32768,b.head=null,b.hold=0,b.bits=0,b.lencode=b.lendyn=new r.Buf32(ob),b.distcode=b.distdyn=new r.Buf32(pb),b.sane=1,b.back=-1,C):F}function g(a){var b;return a&&a.state?(b=a.state,b.wsize=0,b.whave=0,b.wnext=0,f(a)):F}function h(a,b){var c,d;return a&&a.state?(d=a.state,0>b?(c=0,b=-b):(c=(b>>4)+1,48>b&&(b&=15)),b&&(8>b||b>15)?F:(null!==d.window&&d.wbits!==b&&(d.window=null),d.wrap=c,d.wbits=b,g(a))):F}function i(a,b){var c,d;return a?(d=new e,a.state=d,d.window=null,c=h(a,b),c!==C&&(a.state=null),c):F}function j(a){return i(a,rb)}function k(a){if(sb){var b;for(p=new r.Buf32(512),q=new r.Buf32(32),b=0;144>b;)a.lens[b++]=8;for(;256>b;)a.lens[b++]=9;for(;280>b;)a.lens[b++]=7;for(;288>b;)a.lens[b++]=8;for(v(x,a.lens,0,288,p,0,a.work,{bits:9}),b=0;32>b;)a.lens[b++]=5;v(y,a.lens,0,32,q,0,a.work,{bits:5}),sb=!1}a.lencode=p,a.lenbits=9,a.distcode=q,a.distbits=5}function l(a,b,c,d){var e,f=a.state;return null===f.window&&(f.wsize=1<<f.wbits,f.wnext=0,f.whave=0,f.window=new r.Buf8(f.wsize)),d>=f.wsize?(r.arraySet(f.window,b,c-f.wsize,f.wsize,0),f.wnext=0,f.whave=f.wsize):(e=f.wsize-f.wnext,e>d&&(e=d),r.arraySet(f.window,b,c-d,e,f.wnext),d-=e,d?(r.arraySet(f.window,b,c-d,d,0),f.wnext=d,f.whave=f.wsize):(f.wnext+=e,f.wnext===f.wsize&&(f.wnext=0),f.whave<f.wsize&&(f.whave+=e))),0}function m(a,b){var c,e,f,g,h,i,j,m,n,o,p,q,ob,pb,qb,rb,sb,tb,ub,vb,wb,xb,yb,zb,Ab=0,Bb=new r.Buf8(4),Cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!a||!a.state||!a.output||!a.input&&0!==a.avail_in)return F;c=a.state,c.mode===V&&(c.mode=W),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,o=i,p=j,xb=C;a:for(;;)switch(c.mode){case K:if(0===c.wrap){c.mode=W;break}for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(2&c.wrap&&35615===m){c.check=0,Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0),m=0,n=0,c.mode=L;break}if(c.flags=0,c.head&&(c.head.done=!1),!(1&c.wrap)||(((255&m)<<8)+(m>>8))%31){a.msg="incorrect header check",c.mode=lb;break}if((15&m)!==J){a.msg="unknown compression method",c.mode=lb;break}if(m>>>=4,n-=4,wb=(15&m)+8,0===c.wbits)c.wbits=wb;else if(wb>c.wbits){a.msg="invalid window size",c.mode=lb;break}c.dmax=1<<wb,a.adler=c.check=1,c.mode=512&m?T:V,m=0,n=0;break;case L:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.flags=m,(255&c.flags)!==J){a.msg="unknown compression method",c.mode=lb;break}if(57344&c.flags){a.msg="unknown header flags set",c.mode=lb;break}c.head&&(c.head.text=m>>8&1),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=M;case M:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.time=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,Bb[2]=m>>>16&255,Bb[3]=m>>>24&255,c.check=t(c.check,Bb,4,0)),m=0,n=0,c.mode=N;case N:for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.head&&(c.head.xflags=255&m,c.head.os=m>>8),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0,c.mode=O;case O:if(1024&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length=m,c.head&&(c.head.extra_len=m),512&c.flags&&(Bb[0]=255&m,Bb[1]=m>>>8&255,c.check=t(c.check,Bb,2,0)),m=0,n=0}else c.head&&(c.head.extra=null);c.mode=P;case P:if(1024&c.flags&&(q=c.length,q>i&&(q=i),q&&(c.head&&(wb=c.head.extra_len-c.length,c.head.extra||(c.head.extra=new Array(c.head.extra_len)),r.arraySet(c.head.extra,e,g,q,wb)),512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,c.length-=q),c.length))break a;c.length=0,c.mode=Q;case Q:if(2048&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.name+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.name=null);c.length=0,c.mode=R;case R:if(4096&c.flags){if(0===i)break a;q=0;do wb=e[g+q++],c.head&&wb&&c.length<65536&&(c.head.comment+=String.fromCharCode(wb));while(wb&&i>q);if(512&c.flags&&(c.check=t(c.check,e,q,g)),i-=q,g+=q,wb)break a}else c.head&&(c.head.comment=null);c.mode=S;case S:if(512&c.flags){for(;16>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(65535&c.check)){a.msg="header crc mismatch",c.mode=lb;break}m=0,n=0}c.head&&(c.head.hcrc=c.flags>>9&1,c.head.done=!0),a.adler=c.check=0,c.mode=V;break;case T:for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}a.adler=c.check=d(m),m=0,n=0,c.mode=U;case U:if(0===c.havedict)return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,E;a.adler=c.check=1,c.mode=V;case V:if(b===A||b===B)break a;case W:if(c.last){m>>>=7&n,n-=7&n,c.mode=ib;break}for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}switch(c.last=1&m,m>>>=1,n-=1,3&m){case 0:c.mode=X;break;case 1:if(k(c),c.mode=bb,b===B){m>>>=2,n-=2;break a}break;case 2:c.mode=$;break;case 3:a.msg="invalid block type",c.mode=lb}m>>>=2,n-=2;break;case X:for(m>>>=7&n,n-=7&n;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if((65535&m)!==(m>>>16^65535)){a.msg="invalid stored block lengths",c.mode=lb;break}if(c.length=65535&m,m=0,n=0,c.mode=Y,b===B)break a;case Y:c.mode=Z;case Z:if(q=c.length){if(q>i&&(q=i),q>j&&(q=j),0===q)break a;r.arraySet(f,e,g,q,h),i-=q,g+=q,j-=q,h+=q,c.length-=q;break}c.mode=V;break;case $:for(;14>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(c.nlen=(31&m)+257,m>>>=5,n-=5,c.ndist=(31&m)+1,m>>>=5,n-=5,c.ncode=(15&m)+4,m>>>=4,n-=4,c.nlen>286||c.ndist>30){a.msg="too many length or distance symbols",c.mode=lb;break}c.have=0,c.mode=_;case _:for(;c.have<c.ncode;){for(;3>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.lens[Cb[c.have++]]=7&m,m>>>=3,n-=3}for(;c.have<19;)c.lens[Cb[c.have++]]=0;if(c.lencode=c.lendyn,c.lenbits=7,yb={bits:c.lenbits},xb=v(w,c.lens,0,19,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid code lengths set",c.mode=lb;break}c.have=0,c.mode=ab;case ab:for(;c.have<c.nlen+c.ndist;){for(;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(16>sb)m>>>=qb,n-=qb,c.lens[c.have++]=sb;else{if(16===sb){for(zb=qb+2;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m>>>=qb,n-=qb,0===c.have){a.msg="invalid bit length repeat",c.mode=lb;break}wb=c.lens[c.have-1],q=3+(3&m),m>>>=2,n-=2}else if(17===sb){for(zb=qb+3;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=3+(7&m),m>>>=3,n-=3}else{for(zb=qb+7;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=qb,n-=qb,wb=0,q=11+(127&m),m>>>=7,n-=7}if(c.have+q>c.nlen+c.ndist){a.msg="invalid bit length repeat",c.mode=lb;break}for(;q--;)c.lens[c.have++]=wb}}if(c.mode===lb)break;if(0===c.lens[256]){a.msg="invalid code -- missing end-of-block",c.mode=lb;break}if(c.lenbits=9,yb={bits:c.lenbits},xb=v(x,c.lens,0,c.nlen,c.lencode,0,c.work,yb),c.lenbits=yb.bits,xb){a.msg="invalid literal/lengths set",c.mode=lb;break}if(c.distbits=6,c.distcode=c.distdyn,yb={bits:c.distbits},xb=v(y,c.lens,c.nlen,c.ndist,c.distcode,0,c.work,yb),c.distbits=yb.bits,xb){a.msg="invalid distances set",c.mode=lb;break}if(c.mode=bb,b===B)break a;case bb:c.mode=cb;case cb:if(i>=6&&j>=258){a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,u(a,p),h=a.next_out,f=a.output,j=a.avail_out,g=a.next_in,e=a.input,i=a.avail_in,m=c.hold,n=c.bits,c.mode===V&&(c.back=-1);break}for(c.back=0;Ab=c.lencode[m&(1<<c.lenbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(rb&&0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.lencode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,c.length=sb,0===rb){c.mode=hb;break}if(32&rb){c.back=-1,c.mode=V;break}if(64&rb){a.msg="invalid literal/length code",c.mode=lb;break}c.extra=15&rb,c.mode=db;case db:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.length+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}c.was=c.length,c.mode=eb;case eb:for(;Ab=c.distcode[m&(1<<c.distbits)-1],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(0===(240&rb)){for(tb=qb,ub=rb,vb=sb;Ab=c.distcode[vb+((m&(1<<tb+ub)-1)>>tb)],qb=Ab>>>24,rb=Ab>>>16&255,sb=65535&Ab,!(n>=tb+qb);){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}m>>>=tb,n-=tb,c.back+=tb}if(m>>>=qb,n-=qb,c.back+=qb,64&rb){a.msg="invalid distance code",c.mode=lb;break}c.offset=sb,c.extra=15&rb,c.mode=fb;case fb:if(c.extra){for(zb=c.extra;zb>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}c.offset+=m&(1<<c.extra)-1,m>>>=c.extra,n-=c.extra,c.back+=c.extra}if(c.offset>c.dmax){a.msg="invalid distance too far back",c.mode=lb;break}c.mode=gb;case gb:if(0===j)break a;if(q=p-j,c.offset>q){if(q=c.offset-q,q>c.whave&&c.sane){a.msg="invalid distance too far back",c.mode=lb;break}q>c.wnext?(q-=c.wnext,ob=c.wsize-q):ob=c.wnext-q,q>c.length&&(q=c.length),pb=c.window}else pb=f,ob=h-c.offset,q=c.length;q>j&&(q=j),j-=q,c.length-=q;do f[h++]=pb[ob++];while(--q);0===c.length&&(c.mode=cb);break;case hb:if(0===j)break a;f[h++]=c.length,j--,c.mode=cb;break;case ib:if(c.wrap){for(;32>n;){if(0===i)break a;i--,m|=e[g++]<<n,n+=8}if(p-=j,a.total_out+=p,c.total+=p,p&&(a.adler=c.check=c.flags?t(c.check,f,p,h-p):s(c.check,f,p,h-p)),p=j,(c.flags?m:d(m))!==c.check){a.msg="incorrect data check",c.mode=lb;break}m=0,n=0}c.mode=jb;case jb:if(c.wrap&&c.flags){for(;32>n;){if(0===i)break a;i--,m+=e[g++]<<n,n+=8}if(m!==(4294967295&c.total)){a.msg="incorrect length check",c.mode=lb;break}m=0,n=0}c.mode=kb;case kb:xb=D;break a;case lb:xb=G;break a;case mb:return H;case nb:default:return F}return a.next_out=h,a.avail_out=j,a.next_in=g,a.avail_in=i,c.hold=m,c.bits=n,(c.wsize||p!==a.avail_out&&c.mode<lb&&(c.mode<ib||b!==z))&&l(a,a.output,a.next_out,p-a.avail_out)?(c.mode=mb,H):(o-=a.avail_in,p-=a.avail_out,a.total_in+=o,a.total_out+=p,c.total+=p,c.wrap&&p&&(a.adler=c.check=c.flags?t(c.check,f,p,a.next_out-p):s(c.check,f,p,a.next_out-p)),a.data_type=c.bits+(c.last?64:0)+(c.mode===V?128:0)+(c.mode===bb||c.mode===Y?256:0),(0===o&&0===p||b===z)&&xb===C&&(xb=I),xb)}function n(a){if(!a||!a.state)return F;var b=a.state;return b.window&&(b.window=null),a.state=null,C}function o(a,b){var c;return a&&a.state?(c=a.state,0===(2&c.wrap)?F:(c.head=b,b.done=!1,C)):F}var p,q,r=a("../utils/common"),s=a("./adler32"),t=a("./crc32"),u=a("./inffast"),v=a("./inftrees"),w=0,x=1,y=2,z=4,A=5,B=6,C=0,D=1,E=2,F=-2,G=-3,H=-4,I=-5,J=8,K=1,L=2,M=3,N=4,O=5,P=6,Q=7,R=8,S=9,T=10,U=11,V=12,W=13,X=14,Y=15,Z=16,$=17,_=18,ab=19,bb=20,cb=21,db=22,eb=23,fb=24,gb=25,hb=26,ib=27,jb=28,kb=29,lb=30,mb=31,nb=32,ob=852,pb=592,qb=15,rb=qb,sb=!0;c.inflateReset=g,c.inflateReset2=h,c.inflateResetKeep=f,c.inflateInit=j,c.inflateInit2=i,c.inflate=m,c.inflateEnd=n,c.inflateGetHeader=o,c.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./inffast":34,"./inftrees":36}],36:[function(a,b){"use strict";var c=a("../utils/common"),d=15,e=852,f=592,g=0,h=1,i=2,j=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],k=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],l=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],m=[16,16,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,64,64];b.exports=function(a,b,n,o,p,q,r,s){var t,u,v,w,x,y,z,A,B,C=s.bits,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=null,O=0,P=new c.Buf16(d+1),Q=new c.Buf16(d+1),R=null,S=0;for(D=0;d>=D;D++)P[D]=0;for(E=0;o>E;E++)P[b[n+E]]++;for(H=C,G=d;G>=1&&0===P[G];G--);if(H>G&&(H=G),0===G)return p[q++]=20971520,p[q++]=20971520,s.bits=1,0;for(F=1;G>F&&0===P[F];F++);for(F>H&&(H=F),K=1,D=1;d>=D;D++)if(K<<=1,K-=P[D],0>K)return-1;if(K>0&&(a===g||1!==G))return-1;for(Q[1]=0,D=1;d>D;D++)Q[D+1]=Q[D]+P[D];for(E=0;o>E;E++)0!==b[n+E]&&(r[Q[b[n+E]]++]=E);if(a===g?(N=R=r,y=19):a===h?(N=j,O-=257,R=k,S-=257,y=256):(N=l,R=m,y=-1),M=0,E=0,D=F,x=q,I=H,J=0,v=-1,L=1<<H,w=L-1,a===h&&L>e||a===i&&L>f)return 1;for(var T=0;;){T++,z=D-J,r[E]<y?(A=0,B=r[E]):r[E]>y?(A=R[S+r[E]],B=N[O+r[E]]):(A=96,B=0),t=1<<D-J,u=1<<I,F=u;do u-=t,p[x+(M>>J)+u]=z<<24|A<<16|B|0;while(0!==u);for(t=1<<D-1;M&t;)t>>=1;if(0!==t?(M&=t-1,M+=t):M=0,E++,0===--P[D]){if(D===G)break;D=b[n+r[E]]}if(D>H&&(M&w)!==v){for(0===J&&(J=H),x+=F,I=D-J,K=1<<I;G>I+J&&(K-=P[I+J],!(0>=K));)I++,K<<=1;if(L+=1<<I,a===h&&L>e||a===i&&L>f)return 1;v=M&w,p[v]=H<<24|I<<16|x-q|0}}return 0!==M&&(p[x+M]=D-J<<24|64<<16|0),s.bits=H,0}},{"../utils/common":27}],37:[function(a,b){"use strict";b.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(a,b,c){"use strict";function d(a){for(var b=a.length;--b>=0;)a[b]=0}function e(a){return 256>a?gb[a]:gb[256+(a>>>7)]}function f(a,b){a.pending_buf[a.pending++]=255&b,a.pending_buf[a.pending++]=b>>>8&255}function g(a,b,c){a.bi_valid>V-c?(a.bi_buf|=b<<a.bi_valid&65535,f(a,a.bi_buf),a.bi_buf=b>>V-a.bi_valid,a.bi_valid+=c-V):(a.bi_buf|=b<<a.bi_valid&65535,a.bi_valid+=c)}function h(a,b,c){g(a,c[2*b],c[2*b+1])}function i(a,b){var c=0;do c|=1&a,a>>>=1,c<<=1;while(--b>0);return c>>>1}function j(a){16===a.bi_valid?(f(a,a.bi_buf),a.bi_buf=0,a.bi_valid=0):a.bi_valid>=8&&(a.pending_buf[a.pending++]=255&a.bi_buf,a.bi_buf>>=8,a.bi_valid-=8)}function k(a,b){var c,d,e,f,g,h,i=b.dyn_tree,j=b.max_code,k=b.stat_desc.static_tree,l=b.stat_desc.has_stree,m=b.stat_desc.extra_bits,n=b.stat_desc.extra_base,o=b.stat_desc.max_length,p=0;for(f=0;U>=f;f++)a.bl_count[f]=0;for(i[2*a.heap[a.heap_max]+1]=0,c=a.heap_max+1;T>c;c++)d=a.heap[c],f=i[2*i[2*d+1]+1]+1,f>o&&(f=o,p++),i[2*d+1]=f,d>j||(a.bl_count[f]++,g=0,d>=n&&(g=m[d-n]),h=i[2*d],a.opt_len+=h*(f+g),l&&(a.static_len+=h*(k[2*d+1]+g)));if(0!==p){do{for(f=o-1;0===a.bl_count[f];)f--;a.bl_count[f]--,a.bl_count[f+1]+=2,a.bl_count[o]--,p-=2}while(p>0);for(f=o;0!==f;f--)for(d=a.bl_count[f];0!==d;)e=a.heap[--c],e>j||(i[2*e+1]!==f&&(a.opt_len+=(f-i[2*e+1])*i[2*e],i[2*e+1]=f),d--)}}function l(a,b,c){var d,e,f=new Array(U+1),g=0;for(d=1;U>=d;d++)f[d]=g=g+c[d-1]<<1;for(e=0;b>=e;e++){var h=a[2*e+1];0!==h&&(a[2*e]=i(f[h]++,h))}}function m(){var a,b,c,d,e,f=new Array(U+1);for(c=0,d=0;O-1>d;d++)for(ib[d]=c,a=0;a<1<<_[d];a++)hb[c++]=d;for(hb[c-1]=d,e=0,d=0;16>d;d++)for(jb[d]=e,a=0;a<1<<ab[d];a++)gb[e++]=d;for(e>>=7;R>d;d++)for(jb[d]=e<<7,a=0;a<1<<ab[d]-7;a++)gb[256+e++]=d;for(b=0;U>=b;b++)f[b]=0;for(a=0;143>=a;)eb[2*a+1]=8,a++,f[8]++;for(;255>=a;)eb[2*a+1]=9,a++,f[9]++;for(;279>=a;)eb[2*a+1]=7,a++,f[7]++;for(;287>=a;)eb[2*a+1]=8,a++,f[8]++;for(l(eb,Q+1,f),a=0;R>a;a++)fb[2*a+1]=5,fb[2*a]=i(a,5);kb=new nb(eb,_,P+1,Q,U),lb=new nb(fb,ab,0,R,U),mb=new nb(new Array(0),bb,0,S,W)}function n(a){var b;for(b=0;Q>b;b++)a.dyn_ltree[2*b]=0;for(b=0;R>b;b++)a.dyn_dtree[2*b]=0;for(b=0;S>b;b++)a.bl_tree[2*b]=0;a.dyn_ltree[2*X]=1,a.opt_len=a.static_len=0,a.last_lit=a.matches=0}function o(a){a.bi_valid>8?f(a,a.bi_buf):a.bi_valid>0&&(a.pending_buf[a.pending++]=a.bi_buf),a.bi_buf=0,a.bi_valid=0}function p(a,b,c,d){o(a),d&&(f(a,c),f(a,~c)),E.arraySet(a.pending_buf,a.window,b,c,a.pending),a.pending+=c}function q(a,b,c,d){var e=2*b,f=2*c;return a[e]<a[f]||a[e]===a[f]&&d[b]<=d[c]}function r(a,b,c){for(var d=a.heap[c],e=c<<1;e<=a.heap_len&&(e<a.heap_len&&q(b,a.heap[e+1],a.heap[e],a.depth)&&e++,!q(b,d,a.heap[e],a.depth));)a.heap[c]=a.heap[e],c=e,e<<=1;a.heap[c]=d}function s(a,b,c){var d,f,i,j,k=0;if(0!==a.last_lit)do d=a.pending_buf[a.d_buf+2*k]<<8|a.pending_buf[a.d_buf+2*k+1],f=a.pending_buf[a.l_buf+k],k++,0===d?h(a,f,b):(i=hb[f],h(a,i+P+1,b),j=_[i],0!==j&&(f-=ib[i],g(a,f,j)),d--,i=e(d),h(a,i,c),j=ab[i],0!==j&&(d-=jb[i],g(a,d,j)));while(k<a.last_lit);h(a,X,b)}function t(a,b){var c,d,e,f=b.dyn_tree,g=b.stat_desc.static_tree,h=b.stat_desc.has_stree,i=b.stat_desc.elems,j=-1;for(a.heap_len=0,a.heap_max=T,c=0;i>c;c++)0!==f[2*c]?(a.heap[++a.heap_len]=j=c,a.depth[c]=0):f[2*c+1]=0;for(;a.heap_len<2;)e=a.heap[++a.heap_len]=2>j?++j:0,f[2*e]=1,a.depth[e]=0,a.opt_len--,h&&(a.static_len-=g[2*e+1]);for(b.max_code=j,c=a.heap_len>>1;c>=1;c--)r(a,f,c);e=i;do c=a.heap[1],a.heap[1]=a.heap[a.heap_len--],r(a,f,1),d=a.heap[1],a.heap[--a.heap_max]=c,a.heap[--a.heap_max]=d,f[2*e]=f[2*c]+f[2*d],a.depth[e]=(a.depth[c]>=a.depth[d]?a.depth[c]:a.depth[d])+1,f[2*c+1]=f[2*d+1]=e,a.heap[1]=e++,r(a,f,1);while(a.heap_len>=2);a.heap[--a.heap_max]=a.heap[1],k(a,b),l(f,j,a.bl_count)}function u(a,b,c){var d,e,f=-1,g=b[1],h=0,i=7,j=4;for(0===g&&(i=138,j=3),b[2*(c+1)+1]=65535,d=0;c>=d;d++)e=g,g=b[2*(d+1)+1],++h<i&&e===g||(j>h?a.bl_tree[2*e]+=h:0!==e?(e!==f&&a.bl_tree[2*e]++,a.bl_tree[2*Y]++):10>=h?a.bl_tree[2*Z]++:a.bl_tree[2*$]++,h=0,f=e,0===g?(i=138,j=3):e===g?(i=6,j=3):(i=7,j=4))}function v(a,b,c){var d,e,f=-1,i=b[1],j=0,k=7,l=4;for(0===i&&(k=138,l=3),d=0;c>=d;d++)if(e=i,i=b[2*(d+1)+1],!(++j<k&&e===i)){if(l>j){do h(a,e,a.bl_tree);while(0!==--j)}else 0!==e?(e!==f&&(h(a,e,a.bl_tree),j--),h(a,Y,a.bl_tree),g(a,j-3,2)):10>=j?(h(a,Z,a.bl_tree),g(a,j-3,3)):(h(a,$,a.bl_tree),g(a,j-11,7));j=0,f=e,0===i?(k=138,l=3):e===i?(k=6,l=3):(k=7,l=4)}}function w(a){var b;for(u(a,a.dyn_ltree,a.l_desc.max_code),u(a,a.dyn_dtree,a.d_desc.max_code),t(a,a.bl_desc),b=S-1;b>=3&&0===a.bl_tree[2*cb[b]+1];b--);return a.opt_len+=3*(b+1)+5+5+4,b}function x(a,b,c,d){var e;for(g(a,b-257,5),g(a,c-1,5),g(a,d-4,4),e=0;d>e;e++)g(a,a.bl_tree[2*cb[e]+1],3);v(a,a.dyn_ltree,b-1),v(a,a.dyn_dtree,c-1)}function y(a){var b,c=4093624447;for(b=0;31>=b;b++,c>>>=1)if(1&c&&0!==a.dyn_ltree[2*b])return G;if(0!==a.dyn_ltree[18]||0!==a.dyn_ltree[20]||0!==a.dyn_ltree[26])return H;for(b=32;P>b;b++)if(0!==a.dyn_ltree[2*b])return H;return G}function z(a){pb||(m(),pb=!0),a.l_desc=new ob(a.dyn_ltree,kb),a.d_desc=new ob(a.dyn_dtree,lb),a.bl_desc=new ob(a.bl_tree,mb),a.bi_buf=0,a.bi_valid=0,n(a)}function A(a,b,c,d){g(a,(J<<1)+(d?1:0),3),p(a,b,c,!0)}function B(a){g(a,K<<1,3),h(a,X,eb),j(a)}function C(a,b,c,d){var e,f,h=0;a.level>0?(a.strm.data_type===I&&(a.strm.data_type=y(a)),t(a,a.l_desc),t(a,a.d_desc),h=w(a),e=a.opt_len+3+7>>>3,f=a.static_len+3+7>>>3,e>=f&&(e=f)):e=f=c+5,e>=c+4&&-1!==b?A(a,b,c,d):a.strategy===F||f===e?(g(a,(K<<1)+(d?1:0),3),s(a,eb,fb)):(g(a,(L<<1)+(d?1:0),3),x(a,a.l_desc.max_code+1,a.d_desc.max_code+1,h+1),s(a,a.dyn_ltree,a.dyn_dtree)),n(a),d&&o(a)}function D(a,b,c){return a.pending_buf[a.d_buf+2*a.last_lit]=b>>>8&255,a.pending_buf[a.d_buf+2*a.last_lit+1]=255&b,a.pending_buf[a.l_buf+a.last_lit]=255&c,a.last_lit++,0===b?a.dyn_ltree[2*c]++:(a.matches++,b--,a.dyn_ltree[2*(hb[c]+P+1)]++,a.dyn_dtree[2*e(b)]++),a.last_lit===a.lit_bufsize-1}var E=a("../utils/common"),F=4,G=0,H=1,I=2,J=0,K=1,L=2,M=3,N=258,O=29,P=256,Q=P+1+O,R=30,S=19,T=2*Q+1,U=15,V=16,W=7,X=256,Y=16,Z=17,$=18,_=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],ab=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],bb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],cb=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],db=512,eb=new Array(2*(Q+2));d(eb);var fb=new Array(2*R);d(fb);var gb=new Array(db);d(gb);var hb=new Array(N-M+1);d(hb);var ib=new Array(O);d(ib);var jb=new Array(R);d(jb);var kb,lb,mb,nb=function(a,b,c,d,e){this.static_tree=a,this.extra_bits=b,this.extra_base=c,this.elems=d,this.max_length=e,this.has_stree=a&&a.length},ob=function(a,b){this.dyn_tree=a,this.max_code=0,this.stat_desc=b},pb=!1;c._tr_init=z,c._tr_stored_block=A,c._tr_flush_block=C,c._tr_tally=D,c._tr_align=B},{"../utils/common":27}],39:[function(a,b){"use strict";function c(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}b.exports=c},{}]},{},[9])(9)});'use strict';if(tr.isVinn){global.JSZip=global.window.JSZip;global.window=undefined;}else if(tr.isNode){const jsZipAbsPath=HTMLImportsLoader.hrefToAbsolutePath('/jszip.min.js');const jsZipModule=require(jsZipAbsPath);global.JSZip=jsZipModule;}'use strict';tr.exportTo('tr.e.importer',function(){function ZipImporter(model,eventData){if(eventData instanceof ArrayBuffer){eventData=new Uint8Array(eventData);}
-this.model_=model;this.eventData_=eventData;}
-ZipImporter.canImport=function(eventData){let header;if(eventData instanceof ArrayBuffer){header=new Uint8Array(eventData.slice(0,2));}else if(typeof(eventData)==='string'||eventData instanceof String){header=[eventData.charCodeAt(0),eventData.charCodeAt(1)];}else{return false;}
-return header[0]==='P'.charCodeAt(0)&&header[1]==='K'.charCodeAt(0);};ZipImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'ZipImporter';},isTraceDataContainer(){return true;},extractSubtraces(){const zip=new JSZip(this.eventData_);const subtraces=[];for(const idx in zip.files){subtraces.push(zip.files[idx].asBinary());}
-return subtraces;}};tr.importer.Importer.register(ZipImporter);return{ZipImporter,};});'use strict';tr.exportTo('tr.model',function(){function HeapEntry(heapDump,leafStackFrame,objectTypeName,size,count,valuesAreTotals){this.heapDump=heapDump;this.leafStackFrame=leafStackFrame;this.objectTypeName=objectTypeName;this.size=size;this.count=count;this.valuesAreTotals=valuesAreTotals;}
-function HeapDump(processMemoryDump,allocatorName,isComplete){this.processMemoryDump=processMemoryDump;this.allocatorName=allocatorName;this.isComplete=isComplete;this.entries=[];}
-HeapDump.prototype={addEntry(leafStackFrame,objectTypeName,size,count,opt_valuesAreTotals){if(opt_valuesAreTotals===undefined)opt_valuesAreTotals=true;const valuesAreTotals=opt_valuesAreTotals;const entry=new HeapEntry(this,leafStackFrame,objectTypeName,size,count,valuesAreTotals);this.entries.push(entry);return entry;}};return{HeapEntry,HeapDump,};});'use strict';tr.exportTo('tr.e.importer',function(){function HeapDumpTraceEventImporter(heapProfileExpander,stackFrames,processMemoryDump,idPrefix,model){this.expander=heapProfileExpander;this.stackFrames=stackFrames;this.processMemoryDump=processMemoryDump;this.idPrefix=idPrefix;this.model=model;}
-HeapDumpTraceEventImporter.prototype={getLeafStackFrame(stackFrameId){if(stackFrameId==='')return undefined;const parentId=this.idPrefix+stackFrameId;const id=parentId+':self';if(!this.stackFrames[id]){const parentStackFrame=this.stackFrames[parentId];const stackFrame=new tr.model.StackFrame(parentStackFrame,id,'<self>',undefined);this.model.addStackFrame(stackFrame);}
-return this.stackFrames[id];},parseEntry(entry,heapDump){const size=entry.size;const count=entry.count;const leafStackFrame=this.getLeafStackFrame(entry.node.id);const objectTypeName=entry.type.name;const valuesAreTotals=false;if(objectTypeName===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Missing object type name (ID '+typeId+')',});}
-heapDump.addEntry(leafStackFrame,objectTypeName,size,count,valuesAreTotals);},parse(){const heapDumps={};const inflated=this.expander.inflated;for(const[allocatorName,entries]of Object.entries(inflated)){const heapDump=new tr.model.HeapDump(this.processMemoryDump,allocatorName);for(const entry of entries){this.parseEntry(entry,heapDump);}
-heapDump.isComplete=true;heapDumps[allocatorName]=heapDump;}
-return heapDumps;},};return{HeapDumpTraceEventImporter,};});'use strict';tr.exportTo('tr.e.importer',function(){function LegacyHeapDumpTraceEventImporter(model,processMemoryDump,processObjectTypeNameMap,idPrefix,dumpId,rawHeapDumps){this.model_=model;this.processObjectTypeNameMap_=processObjectTypeNameMap;this.idPrefix_=idPrefix;this.processMemoryDump_=processMemoryDump;this.pid_=this.processMemoryDump_.process.pid;this.dumpId_=dumpId;this.rawHeapDumps_=rawHeapDumps;}
-LegacyHeapDumpTraceEventImporter.prototype={parseRawHeapDump(rawHeapDump,allocatorName){const model=this.model_;const processMemoryDump=this.processMemoryDump_;const heapDump=new tr.model.HeapDump(processMemoryDump,allocatorName);const entries=rawHeapDump.entries;if(entries===undefined||entries.length===0){this.model_.importWarning({type:'memory_dump_parse_error',message:'No heap entries in a '+allocatorName+' heap dump for PID='+this.pid_+' and dump ID='+this.dumpId_+'.'});return undefined;}
-const isOldFormat=entries[0].bt===undefined;if(!isOldFormat&&this.processObjectTypeNameMap_===undefined){return undefined;}
-for(let i=0;i<entries.length;i++){const entry=entries[i];const size=parseInt(entry.size,16);const leafStackFrameIndex=entry.bt;let leafStackFrame;if(isOldFormat){if(leafStackFrameIndex===undefined){leafStackFrame=undefined;}else{let leafStackFrameId=this.idPrefix_+leafStackFrameIndex;if(leafStackFrameIndex===''){leafStackFrame=undefined;}else{leafStackFrame=model.stackFrames[leafStackFrameId];if(leafStackFrame===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Missing leaf stack frame (ID '+
-leafStackFrameId+') of heap entry '+i+' (size '+
-size+') in a '+allocatorName+' heap dump for PID='+this.pid_+'.'});continue;}}
-leafStackFrameId+=':self';if(model.stackFrames[leafStackFrameId]!==undefined){leafStackFrame=model.stackFrames[leafStackFrameId];}else{leafStackFrame=new tr.model.StackFrame(leafStackFrame,leafStackFrameId,'<self>',undefined);model.addStackFrame(leafStackFrame);}}}else{if(leafStackFrameIndex===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Missing stack frame ID of heap entry '+i+' (size '+size+') in a '+allocatorName+' heap dump for PID='+this.pid_+'.'});continue;}
-const leafStackFrameId=this.idPrefix_+leafStackFrameIndex;if(leafStackFrameIndex===''){leafStackFrame=undefined;}else{leafStackFrame=model.stackFrames[leafStackFrameId];if(leafStackFrame===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Missing leaf stack frame (ID '+leafStackFrameId+') of heap entry '+i+' (size '+size+') in a '+
-allocatorName+' heap dump for PID='+this.pid_+'.'});continue;}}}
-const objectTypeId=entry.type;let objectTypeName;if(objectTypeId===undefined){objectTypeName=undefined;}else if(this.processObjectTypeNameMap_===undefined){continue;}else{objectTypeName=this.processObjectTypeNameMap_[objectTypeId];if(objectTypeName===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Missing object type name (ID '+objectTypeId+') of heap entry '+i+' (size '+size+') in a '+
-allocatorName+' heap dump for PID='+this.pid_+'.'});continue;}}
-const count=entry.count===undefined?undefined:parseInt(entry.count,16);heapDump.addEntry(leafStackFrame,objectTypeName,size,count);}
-return heapDump;},parse(){const heapDumps={};for(const allocatorName in this.rawHeapDumps_){const rawHeapDump=this.rawHeapDumps_[allocatorName];const heapDump=this.parseRawHeapDump(rawHeapDump,allocatorName);if(heapDump!==undefined&&heapDump.entries.length>0){heapDumps[allocatorName]=heapDump;}}
-return heapDumps;},};return{LegacyHeapDumpTraceEventImporter,};});'use strict';if(tr.isHeadless){global.window={};}
-(function(window,Object,Array,Error,JSON,undefined){var partialComplete=varArgs(function(fn,args){var numBoundArgs=args.length;return varArgs(function(callArgs){for(var i=0;i<callArgs.length;i++){args[numBoundArgs+i]=callArgs[i];}
-args.length=numBoundArgs+callArgs.length;return fn.apply(this,args);});}),compose=varArgs(function(fns){var fnsList=arrayAsList(fns);function next(params,curFn){return[apply(params,curFn)];}
-return varArgs(function(startParams){return foldR(next,startParams,fnsList)[0];});});function compose2(f1,f2){return function(){return f1.call(this,f2.apply(this,arguments));}}
-function attr(key){return function(o){return o[key];};}
-var lazyUnion=varArgs(function(fns){return varArgs(function(params){var maybeValue;for(var i=0;i<len(fns);i++){maybeValue=apply(params,fns[i]);if(maybeValue){return maybeValue;}}});});function apply(args,fn){return fn.apply(undefined,args);}
-function varArgs(fn){var numberOfFixedArguments=fn.length-1,slice=Array.prototype.slice;if(numberOfFixedArguments==0){return function(){return fn.call(this,slice.call(arguments));}}else if(numberOfFixedArguments==1){return function(){return fn.call(this,arguments[0],slice.call(arguments,1));}}
-var argsHolder=Array(fn.length);return function(){for(var i=0;i<numberOfFixedArguments;i++){argsHolder[i]=arguments[i];}
-argsHolder[numberOfFixedArguments]=slice.call(arguments,numberOfFixedArguments);return fn.apply(this,argsHolder);}}
-function flip(fn){return function(a,b){return fn(b,a);}}
-function lazyIntersection(fn1,fn2){return function(param){return fn1(param)&&fn2(param);};}
-function noop(){}
-function always(){return true}
-function functor(val){return function(){return val;}}
-function isOfType(T,maybeSomething){return maybeSomething&&maybeSomething.constructor===T;}
-var len=attr('length'),isString=partialComplete(isOfType,String);function defined(value){return value!==undefined;}
-function hasAllProperties(fieldList,o){return(o instanceof Object)&&all(function(field){return(field in o);},fieldList);}
-function cons(x,xs){return[x,xs];}
-var emptyList=null,head=attr(0),tail=attr(1);function arrayAsList(inputArray){return reverseList(inputArray.reduce(flip(cons),emptyList));}
-var list=varArgs(arrayAsList);function listAsArray(list){return foldR(function(arraySoFar,listItem){arraySoFar.unshift(listItem);return arraySoFar;},[],list);}
-function map(fn,list){return list?cons(fn(head(list)),map(fn,tail(list))):emptyList;}
-function foldR(fn,startValue,list){return list?fn(foldR(fn,startValue,tail(list)),head(list)):startValue;}
-function foldR1(fn,list){return tail(list)?fn(foldR1(fn,tail(list)),head(list)):head(list);}
-function without(list,test,removedFn){return withoutInner(list,removedFn||noop);function withoutInner(subList,removedFn){return subList?(test(head(subList))?(removedFn(head(subList)),tail(subList)):cons(head(subList),withoutInner(tail(subList),removedFn))):emptyList;}}
-function all(fn,list){return!list||(fn(head(list))&&all(fn,tail(list)));}
-function applyEach(fnList,args){if(fnList){head(fnList).apply(null,args);applyEach(tail(fnList),args);}}
-function reverseList(list){function reverseInner(list,reversedAlready){if(!list){return reversedAlready;}
-return reverseInner(tail(list),cons(head(list),reversedAlready))}
-return reverseInner(list,emptyList);}
-function first(test,list){return list&&(test(head(list))?head(list):first(test,tail(list)));}
-function clarinet(eventBus){"use strict";var
-emitSaxKey=eventBus(SAX_KEY).emit,emitValueOpen=eventBus(SAX_VALUE_OPEN).emit,emitValueClose=eventBus(SAX_VALUE_CLOSE).emit,emitFail=eventBus(FAIL_EVENT).emit,MAX_BUFFER_LENGTH=64*1024,stringTokenPattern=/[\\"\n]/g,_n=0,BEGIN=_n++,VALUE=_n++,OPEN_OBJECT=_n++,CLOSE_OBJECT=_n++,OPEN_ARRAY=_n++,CLOSE_ARRAY=_n++,STRING=_n++,OPEN_KEY=_n++,CLOSE_KEY=_n++,TRUE=_n++,TRUE2=_n++,TRUE3=_n++,FALSE=_n++,FALSE2=_n++,FALSE3=_n++,FALSE4=_n++,NULL=_n++,NULL2=_n++,NULL3=_n++,NUMBER_DECIMAL_POINT=_n++,NUMBER_DIGIT=_n,bufferCheckPosition=MAX_BUFFER_LENGTH,latestError,c,p,textNode=undefined,numberNode="",slashed=false,closed=false,state=BEGIN,stack=[],unicodeS=null,unicodeI=0,depth=0,position=0,column=0,line=1;function checkBufferLength(){var maxActual=0;if(textNode!==undefined&&textNode.length>MAX_BUFFER_LENGTH){emitError("Max buffer length exceeded: textNode");maxActual=Math.max(maxActual,textNode.length);}
-if(numberNode.length>MAX_BUFFER_LENGTH){emitError("Max buffer length exceeded: numberNode");maxActual=Math.max(maxActual,numberNode.length);}
-bufferCheckPosition=(MAX_BUFFER_LENGTH-maxActual)
-+position;}
-eventBus(STREAM_DATA).on(handleData);eventBus(STREAM_END).on(handleStreamEnd);function emitError(errorString){if(textNode!==undefined){emitValueOpen(textNode);emitValueClose();textNode=undefined;}
-latestError=Error(errorString+"\nLn: "+line+"\nCol: "+column+"\nChr: "+c);emitFail(errorReport(undefined,undefined,latestError));}
-function handleStreamEnd(){if(state==BEGIN){emitValueOpen({});emitValueClose();closed=true;return;}
-if(state!==VALUE||depth!==0)
-emitError("Unexpected end");if(textNode!==undefined){emitValueOpen(textNode);emitValueClose();textNode=undefined;}
-closed=true;}
-function whitespace(c){return c=='\r'||c=='\n'||c==' '||c=='\t';}
-function handleData(chunk){if(latestError)
-return;if(closed){return emitError("Cannot write after close");}
-var i=0;c=chunk[0];while(c){p=c;c=chunk[i++];if(!c)break;position++;if(c=="\n"){line++;column=0;}else column++;switch(state){case BEGIN:if(c==="{")state=OPEN_OBJECT;else if(c==="[")state=OPEN_ARRAY;else if(!whitespace(c))
-return emitError("Non-whitespace before {[.");continue;case OPEN_KEY:case OPEN_OBJECT:if(whitespace(c))continue;if(state===OPEN_KEY)stack.push(CLOSE_KEY);else{if(c==='}'){emitValueOpen({});emitValueClose();state=stack.pop()||VALUE;continue;}else stack.push(CLOSE_OBJECT);}
-if(c==='"')
-state=STRING;else
-return emitError("Malformed object key should start with \" ");continue;case CLOSE_KEY:case CLOSE_OBJECT:if(whitespace(c))continue;if(c===':'){if(state===CLOSE_OBJECT){stack.push(CLOSE_OBJECT);if(textNode!==undefined){emitValueOpen({});emitSaxKey(textNode);textNode=undefined;}
-depth++;}else{if(textNode!==undefined){emitSaxKey(textNode);textNode=undefined;}}
-state=VALUE;}else if(c==='}'){if(textNode!==undefined){emitValueOpen(textNode);emitValueClose();textNode=undefined;}
-emitValueClose();depth--;state=stack.pop()||VALUE;}else if(c===','){if(state===CLOSE_OBJECT)
-stack.push(CLOSE_OBJECT);if(textNode!==undefined){emitValueOpen(textNode);emitValueClose();textNode=undefined;}
-state=OPEN_KEY;}else
-return emitError('Bad object');continue;case OPEN_ARRAY:case VALUE:if(whitespace(c))continue;if(state===OPEN_ARRAY){emitValueOpen([]);depth++;state=VALUE;if(c===']'){emitValueClose();depth--;state=stack.pop()||VALUE;continue;}else{stack.push(CLOSE_ARRAY);}}
-if(c==='"')state=STRING;else if(c==='{')state=OPEN_OBJECT;else if(c==='[')state=OPEN_ARRAY;else if(c==='t')state=TRUE;else if(c==='f')state=FALSE;else if(c==='n')state=NULL;else if(c==='-'){numberNode+=c;}else if(c==='0'){numberNode+=c;state=NUMBER_DIGIT;}else if('123456789'.indexOf(c)!==-1){numberNode+=c;state=NUMBER_DIGIT;}else
-return emitError("Bad value");continue;case CLOSE_ARRAY:if(c===','){stack.push(CLOSE_ARRAY);if(textNode!==undefined){emitValueOpen(textNode);emitValueClose();textNode=undefined;}
-state=VALUE;}else if(c===']'){if(textNode!==undefined){emitValueOpen(textNode);emitValueClose();textNode=undefined;}
-emitValueClose();depth--;state=stack.pop()||VALUE;}else if(whitespace(c))
-continue;else
-return emitError('Bad array');continue;case STRING:if(textNode===undefined){textNode="";}
-var starti=i-1;STRING_BIGLOOP:while(true){while(unicodeI>0){unicodeS+=c;c=chunk.charAt(i++);if(unicodeI===4){textNode+=String.fromCharCode(parseInt(unicodeS,16));unicodeI=0;starti=i-1;}else{unicodeI++;}
-if(!c)break STRING_BIGLOOP;}
-if(c==='"'&&!slashed){state=stack.pop()||VALUE;textNode+=chunk.substring(starti,i-1);break;}
-if(c==='\\'&&!slashed){slashed=true;textNode+=chunk.substring(starti,i-1);c=chunk.charAt(i++);if(!c)break;}
-if(slashed){slashed=false;if(c==='n'){textNode+='\n';}
-else if(c==='r'){textNode+='\r';}
-else if(c==='t'){textNode+='\t';}
-else if(c==='f'){textNode+='\f';}
-else if(c==='b'){textNode+='\b';}
-else if(c==='u'){unicodeI=1;unicodeS='';}else{textNode+=c;}
-c=chunk.charAt(i++);starti=i-1;if(!c)break;else continue;}
-stringTokenPattern.lastIndex=i;var reResult=stringTokenPattern.exec(chunk);if(!reResult){i=chunk.length+1;textNode+=chunk.substring(starti,i-1);break;}
-i=reResult.index+1;c=chunk.charAt(reResult.index);if(!c){textNode+=chunk.substring(starti,i-1);break;}}
-continue;case TRUE:if(!c)continue;if(c==='r')state=TRUE2;else
-return emitError('Invalid true started with t'+c);continue;case TRUE2:if(!c)continue;if(c==='u')state=TRUE3;else
-return emitError('Invalid true started with tr'+c);continue;case TRUE3:if(!c)continue;if(c==='e'){emitValueOpen(true);emitValueClose();state=stack.pop()||VALUE;}else
-return emitError('Invalid true started with tru'+c);continue;case FALSE:if(!c)continue;if(c==='a')state=FALSE2;else
-return emitError('Invalid false started with f'+c);continue;case FALSE2:if(!c)continue;if(c==='l')state=FALSE3;else
-return emitError('Invalid false started with fa'+c);continue;case FALSE3:if(!c)continue;if(c==='s')state=FALSE4;else
-return emitError('Invalid false started with fal'+c);continue;case FALSE4:if(!c)continue;if(c==='e'){emitValueOpen(false);emitValueClose();state=stack.pop()||VALUE;}else
-return emitError('Invalid false started with fals'+c);continue;case NULL:if(!c)continue;if(c==='u')state=NULL2;else
-return emitError('Invalid null started with n'+c);continue;case NULL2:if(!c)continue;if(c==='l')state=NULL3;else
-return emitError('Invalid null started with nu'+c);continue;case NULL3:if(!c)continue;if(c==='l'){emitValueOpen(null);emitValueClose();state=stack.pop()||VALUE;}else
-return emitError('Invalid null started with nul'+c);continue;case NUMBER_DECIMAL_POINT:if(c==='.'){numberNode+=c;state=NUMBER_DIGIT;}else
-return emitError('Leading zero not followed by .');continue;case NUMBER_DIGIT:if('0123456789'.indexOf(c)!==-1)numberNode+=c;else if(c==='.'){if(numberNode.indexOf('.')!==-1)
-return emitError('Invalid number has two dots');numberNode+=c;}else if(c==='e'||c==='E'){if(numberNode.indexOf('e')!==-1||numberNode.indexOf('E')!==-1)
-return emitError('Invalid number has two exponential');numberNode+=c;}else if(c==="+"||c==="-"){if(!(p==='e'||p==='E'))
-return emitError('Invalid symbol in number');numberNode+=c;}else{if(numberNode){emitValueOpen(parseFloat(numberNode));emitValueClose();numberNode="";}
-i--;state=stack.pop()||VALUE;}
-continue;default:return emitError("Unknown state: "+state);}}
-if(position>=bufferCheckPosition)
-checkBufferLength();}}
-function ascentManager(oboeBus,handlers){"use strict";var listenerId={},ascent;function stateAfter(handler){return function(param){ascent=handler(ascent,param);}}
-for(var eventName in handlers){oboeBus(eventName).on(stateAfter(handlers[eventName]),listenerId);}
-oboeBus(NODE_SWAP).on(function(newNode){var oldHead=head(ascent),key=keyOf(oldHead),ancestors=tail(ascent),parentNode;if(ancestors){parentNode=nodeOf(head(ancestors));parentNode[key]=newNode;}});oboeBus(NODE_DROP).on(function(){var oldHead=head(ascent),key=keyOf(oldHead),ancestors=tail(ascent),parentNode;if(ancestors){parentNode=nodeOf(head(ancestors));delete parentNode[key];}});oboeBus(ABORTING).on(function(){for(var eventName in handlers){oboeBus(eventName).un(listenerId);}});}
-function parseResponseHeaders(headerStr){var headers={};headerStr&&headerStr.split('\u000d\u000a').forEach(function(headerPair){var index=headerPair.indexOf('\u003a\u0020');headers[headerPair.substring(0,index)]=headerPair.substring(index+2);});return headers;}
-function isCrossOrigin(pageLocation,ajaxHost){function defaultPort(protocol){return{'http:':80,'https:':443}[protocol];}
-function portOf(location){return location.port||defaultPort(location.protocol||pageLocation.protocol);}
-return!!((ajaxHost.protocol&&(ajaxHost.protocol!=pageLocation.protocol))||(ajaxHost.host&&(ajaxHost.host!=pageLocation.host))||(ajaxHost.host&&(portOf(ajaxHost)!=portOf(pageLocation))));}
-function parseUrlOrigin(url){var URL_HOST_PATTERN=/(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/,urlHostMatch=URL_HOST_PATTERN.exec(url)||[];return{protocol:urlHostMatch[1]||'',host:urlHostMatch[2]||'',port:urlHostMatch[3]||''};}
-function httpTransport(){return new XMLHttpRequest();}
-function streamingHttp(oboeBus,xhr,method,url,data,headers,withCredentials){"use strict";var emitStreamData=oboeBus(STREAM_DATA).emit,emitFail=oboeBus(FAIL_EVENT).emit,numberOfCharsAlreadyGivenToCallback=0,stillToSendStartEvent=true;oboeBus(ABORTING).on(function(){xhr.onreadystatechange=null;xhr.abort();});function handleProgress(){var textSoFar=xhr.responseText,newText=textSoFar.substr(numberOfCharsAlreadyGivenToCallback);if(newText){emitStreamData(newText);}
-numberOfCharsAlreadyGivenToCallback=len(textSoFar);}
-if('onprogress'in xhr){xhr.onprogress=handleProgress;}
-xhr.onreadystatechange=function(){function sendStartIfNotAlready(){try{stillToSendStartEvent&&oboeBus(HTTP_START).emit(xhr.status,parseResponseHeaders(xhr.getAllResponseHeaders()));stillToSendStartEvent=false;}catch(e){}}
-switch(xhr.readyState){case 2:case 3:return sendStartIfNotAlready();case 4:sendStartIfNotAlready();var successful=String(xhr.status)[0]==2;if(successful){handleProgress();oboeBus(STREAM_END).emit();}else{emitFail(errorReport(xhr.status,xhr.responseText));}}};try{xhr.open(method,url,true);for(var headerName in headers){xhr.setRequestHeader(headerName,headers[headerName]);}
-if(!isCrossOrigin(window.location,parseUrlOrigin(url))){xhr.setRequestHeader('X-Requested-With','XMLHttpRequest');}
-xhr.withCredentials=withCredentials;xhr.send(data);}catch(e){window.setTimeout(partialComplete(emitFail,errorReport(undefined,undefined,e)),0);}}
-var jsonPathSyntax=(function(){var
-regexDescriptor=function regexDescriptor(regex){return regex.exec.bind(regex);},jsonPathClause=varArgs(function(componentRegexes){componentRegexes.unshift(/^/);return regexDescriptor(RegExp(componentRegexes.map(attr('source')).join('')));}),possiblyCapturing=/(\$?)/,namedNode=/([\w-_]+|\*)/,namePlaceholder=/()/,nodeInArrayNotation=/\["([^"]+)"\]/,numberedNodeInArrayNotation=/\[(\d+|\*)\]/,fieldList=/{([\w ]*?)}/,optionalFieldList=/(?:{([\w ]*?)})?/
-,jsonPathNamedNodeInObjectNotation=jsonPathClause(possiblyCapturing,namedNode,optionalFieldList),jsonPathNamedNodeInArrayNotation=jsonPathClause(possiblyCapturing,nodeInArrayNotation,optionalFieldList),jsonPathNumberedNodeInArrayNotation=jsonPathClause(possiblyCapturing,numberedNodeInArrayNotation,optionalFieldList),jsonPathPureDuckTyping=jsonPathClause(possiblyCapturing,namePlaceholder,fieldList),jsonPathDoubleDot=jsonPathClause(/\.\./),jsonPathDot=jsonPathClause(/\./),jsonPathBang=jsonPathClause(possiblyCapturing,/!/),emptyString=jsonPathClause(/$/);return function(fn){return fn(lazyUnion(jsonPathNamedNodeInObjectNotation,jsonPathNamedNodeInArrayNotation,jsonPathNumberedNodeInArrayNotation,jsonPathPureDuckTyping),jsonPathDoubleDot,jsonPathDot,jsonPathBang,emptyString);};}());function namedNode(key,node){return{key:key,node:node};}
-var keyOf=attr('key');var nodeOf=attr('node');var ROOT_PATH={};function incrementalContentBuilder(oboeBus){var emitNodeOpened=oboeBus(NODE_OPENED).emit,emitNodeClosed=oboeBus(NODE_CLOSED).emit,emitRootOpened=oboeBus(ROOT_PATH_FOUND).emit,emitRootClosed=oboeBus(ROOT_NODE_FOUND).emit;function arrayIndicesAreKeys(possiblyInconsistentAscent,newDeepestNode){var parentNode=nodeOf(head(possiblyInconsistentAscent));return isOfType(Array,parentNode)?keyFound(possiblyInconsistentAscent,len(parentNode),newDeepestNode):possiblyInconsistentAscent;}
-function nodeOpened(ascent,newDeepestNode){if(!ascent){emitRootOpened(newDeepestNode);return keyFound(ascent,ROOT_PATH,newDeepestNode);}
-var arrayConsistentAscent=arrayIndicesAreKeys(ascent,newDeepestNode),ancestorBranches=tail(arrayConsistentAscent),previouslyUnmappedName=keyOf(head(arrayConsistentAscent));appendBuiltContent(ancestorBranches,previouslyUnmappedName,newDeepestNode);return cons(namedNode(previouslyUnmappedName,newDeepestNode),ancestorBranches);}
-function appendBuiltContent(ancestorBranches,key,node){nodeOf(head(ancestorBranches))[key]=node;}
-function keyFound(ascent,newDeepestName,maybeNewDeepestNode){if(ascent){appendBuiltContent(ascent,newDeepestName,maybeNewDeepestNode);}
-var ascentWithNewPath=cons(namedNode(newDeepestName,maybeNewDeepestNode),ascent);emitNodeOpened(ascentWithNewPath);return ascentWithNewPath;}
-function nodeClosed(ascent){emitNodeClosed(ascent);return tail(ascent)||emitRootClosed(nodeOf(head(ascent)));}
-var contentBuilderHandlers={};contentBuilderHandlers[SAX_VALUE_OPEN]=nodeOpened;contentBuilderHandlers[SAX_VALUE_CLOSE]=nodeClosed;contentBuilderHandlers[SAX_KEY]=keyFound;return contentBuilderHandlers;}
-var jsonPathCompiler=jsonPathSyntax(function(pathNodeSyntax,doubleDotSyntax,dotSyntax,bangSyntax,emptySyntax){var CAPTURING_INDEX=1;var NAME_INDEX=2;var FIELD_LIST_INDEX=3;var headKey=compose2(keyOf,head),headNode=compose2(nodeOf,head);function nameClause(previousExpr,detection){var name=detection[NAME_INDEX],matchesName=(!name||name=='*')?always:function(ascent){return headKey(ascent)==name};return lazyIntersection(matchesName,previousExpr);}
-function duckTypeClause(previousExpr,detection){var fieldListStr=detection[FIELD_LIST_INDEX];if(!fieldListStr)
-return previousExpr;var hasAllrequiredFields=partialComplete(hasAllProperties,arrayAsList(fieldListStr.split(/\W+/))),isMatch=compose2(hasAllrequiredFields,headNode);return lazyIntersection(isMatch,previousExpr);}
-function capture(previousExpr,detection){var capturing=!!detection[CAPTURING_INDEX];if(!capturing)
-return previousExpr;return lazyIntersection(previousExpr,head);}
-function skip1(previousExpr){if(previousExpr==always){return always;}
-function notAtRoot(ascent){return headKey(ascent)!=ROOT_PATH;}
-return lazyIntersection(notAtRoot,compose2(previousExpr,tail));}
-function skipMany(previousExpr){if(previousExpr==always){return always;}
-var
-terminalCaseWhenArrivingAtRoot=rootExpr(),terminalCaseWhenPreviousExpressionIsSatisfied=previousExpr,recursiveCase=skip1(function(ascent){return cases(ascent);}),cases=lazyUnion(terminalCaseWhenArrivingAtRoot,terminalCaseWhenPreviousExpressionIsSatisfied,recursiveCase);return cases;}
-function rootExpr(){return function(ascent){return headKey(ascent)==ROOT_PATH;};}
-function statementExpr(lastClause){return function(ascent){var exprMatch=lastClause(ascent);return exprMatch===true?head(ascent):exprMatch;};}
-function expressionsReader(exprs,parserGeneratedSoFar,detection){return foldR(function(parserGeneratedSoFar,expr){return expr(parserGeneratedSoFar,detection);},parserGeneratedSoFar,exprs);}
-function generateClauseReaderIfTokenFound(tokenDetector,clauseEvaluatorGenerators,jsonPath,parserGeneratedSoFar,onSuccess){var detected=tokenDetector(jsonPath);if(detected){var compiledParser=expressionsReader(clauseEvaluatorGenerators,parserGeneratedSoFar,detected),remainingUnparsedJsonPath=jsonPath.substr(len(detected[0]));return onSuccess(remainingUnparsedJsonPath,compiledParser);}}
-function clauseMatcher(tokenDetector,exprs){return partialComplete(generateClauseReaderIfTokenFound,tokenDetector,exprs);}
-var clauseForJsonPath=lazyUnion(clauseMatcher(pathNodeSyntax,list(capture,duckTypeClause,nameClause,skip1)),clauseMatcher(doubleDotSyntax,list(skipMany)),clauseMatcher(dotSyntax,list()),clauseMatcher(bangSyntax,list(capture,rootExpr)),clauseMatcher(emptySyntax,list(statementExpr)),function(jsonPath){throw Error('"'+jsonPath+'" could not be tokenised')});function returnFoundParser(_remainingJsonPath,compiledParser){return compiledParser}
-function compileJsonPathToFunction(uncompiledJsonPath,parserGeneratedSoFar){var onFind=uncompiledJsonPath?compileJsonPathToFunction:returnFoundParser;return clauseForJsonPath(uncompiledJsonPath,parserGeneratedSoFar,onFind);}
-return function(jsonPath){try{return compileJsonPathToFunction(jsonPath,always);}catch(e){throw Error('Could not compile "'+jsonPath+'" because '+e.message);}}});function singleEventPubSub(eventType,newListener,removeListener){var listenerTupleList,listenerList;function hasId(id){return function(tuple){return tuple.id==id;};}
-return{on:function(listener,listenerId){var tuple={listener:listener,id:listenerId||listener};if(newListener){newListener.emit(eventType,listener,tuple.id);}
-listenerTupleList=cons(tuple,listenerTupleList);listenerList=cons(listener,listenerList);return this;},emit:function(){applyEach(listenerList,arguments);},un:function(listenerId){var removed;listenerTupleList=without(listenerTupleList,hasId(listenerId),function(tuple){removed=tuple;});if(removed){listenerList=without(listenerList,function(listener){return listener==removed.listener;});if(removeListener){removeListener.emit(eventType,removed.listener,removed.id);}}},listeners:function(){return listenerList;},hasListener:function(listenerId){var test=listenerId?hasId(listenerId):always;return defined(first(test,listenerTupleList));}};}
-function pubSub(){var singles={},newListener=newSingle('newListener'),removeListener=newSingle('removeListener');function newSingle(eventName){return singles[eventName]=singleEventPubSub(eventName,newListener,removeListener);}
-function pubSubInstance(eventName){return singles[eventName]||newSingle(eventName);}
-['emit','on','un'].forEach(function(methodName){pubSubInstance[methodName]=varArgs(function(eventName,parameters){apply(parameters,pubSubInstance(eventName)[methodName]);});});return pubSubInstance;}
-var
-_S=1,NODE_OPENED=_S++,NODE_CLOSED=_S++,NODE_SWAP=_S++,NODE_DROP=_S++,FAIL_EVENT='fail',ROOT_NODE_FOUND=_S++,ROOT_PATH_FOUND=_S++,HTTP_START='start',STREAM_DATA='data',STREAM_END='end',ABORTING=_S++,SAX_KEY=_S++,SAX_VALUE_OPEN=_S++,SAX_VALUE_CLOSE=_S++;function errorReport(statusCode,body,error){try{var jsonBody=JSON.parse(body);}catch(e){}
-return{statusCode:statusCode,body:body,jsonBody:jsonBody,thrown:error};}
-function patternAdapter(oboeBus,jsonPathCompiler){var predicateEventMap={node:oboeBus(NODE_CLOSED),path:oboeBus(NODE_OPENED)};function emitMatchingNode(emitMatch,node,ascent){var descent=reverseList(ascent);emitMatch(node,listAsArray(tail(map(keyOf,descent))),listAsArray(map(nodeOf,descent)));}
-function addUnderlyingListener(fullEventName,predicateEvent,compiledJsonPath){var emitMatch=oboeBus(fullEventName).emit;predicateEvent.on(function(ascent){var maybeMatchingMapping=compiledJsonPath(ascent);if(maybeMatchingMapping!==false){emitMatchingNode(emitMatch,nodeOf(maybeMatchingMapping),ascent);}},fullEventName);oboeBus('removeListener').on(function(removedEventName){if(removedEventName==fullEventName){if(!oboeBus(removedEventName).listeners()){predicateEvent.un(fullEventName);}}});}
-oboeBus('newListener').on(function(fullEventName){var match=/(node|path):(.*)/.exec(fullEventName);if(match){var predicateEvent=predicateEventMap[match[1]];if(!predicateEvent.hasListener(fullEventName)){addUnderlyingListener(fullEventName,predicateEvent,jsonPathCompiler(match[2]));}}})}
-function instanceApi(oboeBus,contentSource){var oboeApi,fullyQualifiedNamePattern=/^(node|path):./,rootNodeFinishedEvent=oboeBus(ROOT_NODE_FOUND),emitNodeDrop=oboeBus(NODE_DROP).emit,emitNodeSwap=oboeBus(NODE_SWAP).emit,addListener=varArgs(function(eventId,parameters){if(oboeApi[eventId]){apply(parameters,oboeApi[eventId]);}else{var event=oboeBus(eventId),listener=parameters[0];if(fullyQualifiedNamePattern.test(eventId)){addForgettableCallback(event,listener);}else{event.on(listener);}}
-return oboeApi;}),removeListener=function(eventId,p2,p3){if(eventId=='done'){rootNodeFinishedEvent.un(p2);}else if(eventId=='node'||eventId=='path'){oboeBus.un(eventId+':'+p2,p3);}else{var listener=p2;oboeBus(eventId).un(listener);}
-return oboeApi;};function addProtectedCallback(eventName,callback){oboeBus(eventName).on(protectedCallback(callback),callback);return oboeApi;}
-function addForgettableCallback(event,callback,listenerId){listenerId=listenerId||callback;var safeCallback=protectedCallback(callback);event.on(function(){var discard=false;oboeApi.forget=function(){discard=true;};apply(arguments,safeCallback);delete oboeApi.forget;if(discard){event.un(listenerId);}},listenerId);return oboeApi;}
-function protectedCallback(callback){return function(){try{return callback.apply(oboeApi,arguments);}catch(e){setTimeout(function(){throw new Error(e.message);});}}}
-function fullyQualifiedPatternMatchEvent(type,pattern){return oboeBus(type+':'+pattern);}
-function wrapCallbackToSwapNodeIfSomethingReturned(callback){return function(){var returnValueFromCallback=callback.apply(this,arguments);if(defined(returnValueFromCallback)){if(returnValueFromCallback==oboe.drop){emitNodeDrop();}else{emitNodeSwap(returnValueFromCallback);}}}}
-function addSingleNodeOrPathListener(eventId,pattern,callback){var effectiveCallback;if(eventId=='node'){effectiveCallback=wrapCallbackToSwapNodeIfSomethingReturned(callback);}else{effectiveCallback=callback;}
-addForgettableCallback(fullyQualifiedPatternMatchEvent(eventId,pattern),effectiveCallback,callback);}
-function addMultipleNodeOrPathListeners(eventId,listenerMap){for(var pattern in listenerMap){addSingleNodeOrPathListener(eventId,pattern,listenerMap[pattern]);}}
-function addNodeOrPathListenerApi(eventId,jsonPathOrListenerMap,callback){if(isString(jsonPathOrListenerMap)){addSingleNodeOrPathListener(eventId,jsonPathOrListenerMap,callback);}else{addMultipleNodeOrPathListeners(eventId,jsonPathOrListenerMap);}
-return oboeApi;}
-oboeBus(ROOT_PATH_FOUND).on(function(rootNode){oboeApi.root=functor(rootNode);});oboeBus(HTTP_START).on(function(_statusCode,headers){oboeApi.header=function(name){return name?headers[name]:headers;}});return oboeApi={on:addListener,addListener:addListener,removeListener:removeListener,emit:oboeBus.emit,node:partialComplete(addNodeOrPathListenerApi,'node'),path:partialComplete(addNodeOrPathListenerApi,'path'),done:partialComplete(addForgettableCallback,rootNodeFinishedEvent),start:partialComplete(addProtectedCallback,HTTP_START),fail:oboeBus(FAIL_EVENT).on,abort:oboeBus(ABORTING).emit,write:oboeBus(STREAM_DATA).emit,finish:oboeBus(STREAM_END).emit,header:noop,root:noop,source:contentSource};}
-function wire(httpMethodName,contentSource,body,headers,withCredentials){var oboeBus=pubSub();if(contentSource){streamingHttp(oboeBus,httpTransport(),httpMethodName,contentSource,body,headers,withCredentials);}
-clarinet(oboeBus);ascentManager(oboeBus,incrementalContentBuilder(oboeBus));patternAdapter(oboeBus,jsonPathCompiler);return instanceApi(oboeBus,contentSource);}
-function applyDefaults(passthrough,url,httpMethodName,body,headers,withCredentials,cached){headers=headers?JSON.parse(JSON.stringify(headers)):{};if(body){if(!isString(body)){body=JSON.stringify(body);headers['Content-Type']=headers['Content-Type']||'application/json';}}else{body=null;}
-function modifiedUrl(baseUrl,cached){if(cached===false){if(baseUrl.indexOf('?')==-1){baseUrl+='?';}else{baseUrl+='&';}
-baseUrl+='_='+new Date().getTime();}
-return baseUrl;}
-return passthrough(httpMethodName||'GET',modifiedUrl(url,cached),body,headers,withCredentials||false);}
-function oboe(arg1){var nodeStreamMethodNames=list('resume','pause','pipe'),isStream=partialComplete(hasAllProperties,nodeStreamMethodNames);if(arg1){if(isStream(arg1)||isString(arg1)){return applyDefaults(wire,arg1);}else{return applyDefaults(wire,arg1.url,arg1.method,arg1.body,arg1.headers,arg1.withCredentials,arg1.cached);}}else{return wire();}}
-oboe.drop=function(){return oboe.drop;};if(typeof define==="function"&&define.amd){define("oboe",[],function(){return oboe;});}else if(typeof exports==='object'){module.exports=oboe;}else{window.oboe=oboe;}})((function(){try{return window;}catch(e){return self;}}()),Object,Array,Error,JSON);'use strict';if(tr.isVinn){global.oboe=global.window.oboe;global.window=undefined;}else if(tr.isNode){global.window=undefined;const path=HTMLImportsLoader.hrefToAbsolutePath('/oboe/dist/oboe-node.js');global.oboe=require(path);}'use strict';tr.exportTo('tr.e.importer',function(){const STRING_ID_SUFFIX='_sid';const PLURAL_STRING_ID_SUFFIX='_sids';function isStringReference(s){return s.endsWith(STRING_ID_SUFFIX)||s.endsWith(PLURAL_STRING_ID_SUFFIX);}
-function getStringReferenceName(name){if(name.endsWith(PLURAL_STRING_ID_SUFFIX)){return name.slice(0,-PLURAL_STRING_ID_SUFFIX.length);}
-return name.slice(0,-STRING_ID_SUFFIX.length);}
-function deferenceStrings(idToString,o){const clone=Object.assign({},o);for(const[key,value]of Object.entries(clone)){if(isStringReference(key)){const name=getStringReferenceName(key);clone[name]=idToString(value);}}
-return clone;}
-function singularize(word){if(word.endsWith('s')){return word.slice(0,-1);}
-return word;}
-function getMetadataPairs(dataJson){const isMetadata=v=>typeof v!=='object'||Array.isArray(v);const pairs=Object.entries(dataJson);const metadataPairs=pairs.filter(([_,v])=>isMetadata(v));return metadataPairs;}
-function getGroupPairs(dataJson){const pairs=Object.entries(dataJson);const nonMapPairs=pairs.filter(([k,_])=>k!=='maps');const groupPairs=nonMapPairs.filter(([_,v])=>typeof v==='object');return groupPairs;}
-function createMap(mapJson){const map=new Map();for(const entry of mapJson){if(entry.id===undefined){throw new Error('Missing required key "id" in streaming event.');}
-map.set(entry.id,entry);}
-return map;}
-function createMaps(mapsJson){const maps=new Map();for(const[name,mapJson]of Object.entries(mapsJson)){maps.set(name,createMap(mapJson));}
-return maps;}
-function createGroup(groupJson,opt_startTime){const entries=[];const n=Object.values(groupJson)[0].length;for(let i=0;i<n;i++){const entry={};for(const name in groupJson){entry[name]=groupJson[name][i];}
-entries.push(entry);}
-const timeDelta=groupJson.timeDelta;if(opt_startTime===undefined&&timeDelta!==undefined){throw new Error('Missing required key "startTime" in streaming event.');}
-if(opt_startTime){let delta=0;for(const entry of entries){delta+=entry.timeDelta?entry.timeDelta:0;entry.time=opt_startTime+delta;}}
-return entries;}
-function createGroups(groupsJson,opt_startTime){const groups=new Map();for(const[name,groupJson]of Object.entries(groupsJson)){groups.set(name,createGroup(groupJson,opt_startTime));}
-return groups;}
-function createMetadata(metadataPairs){const metadata=new Map();for(const[name,value]of metadataPairs){metadata.set(name,value);}
-if(metadata.get('version')===undefined){throw new Error('Missing required key "version" in streaming event.');}
-return metadata;}
-class ProfilingDictionaryReader{constructor(opt_metadata,opt_maps,opt_groups,opt_parent){this.metadata=opt_metadata||new Map();this.maps=opt_maps||new Map();this.groups=opt_groups||new Map();this.parent_=opt_parent||undefined;this.inflated_=undefined;this.raw_=undefined;this.boundGetString_=this.getString.bind(this);this.deferenceStrings_=o=>deferenceStrings(this.boundGetString_,o);}
-static empty(){return new ProfilingDictionaryReader();}
-get parent(){return this.parent_;}
-get raw(){if(this.raw_)return this.raw_;this.raw_={};for(const[name,group]of this.groups.entries()){this.raw_[name]=group;}
-return this.raw_;}
-get inflated(){if(this.inflated_)return this.inflated_;this.inflated_={};for(const[name,group]of this.groups.entries()){this.inflated_[name]=this.inflateGroup(group);}
-return this.inflated_;}
-getNewMap(name){return this.maps.get(name)||new Map();}
-getMapValue(mapName,id){let value=this.getNewMap(mapName).get(id);if(value===undefined&&this.parent){value=this.parent.getMapValue(mapName,id);}
-return value;}
-getString(id){const value=this.getMapValue('strings',id);if(value===undefined)return undefined;return value.string;}
-hasMap(name){if(this.maps.has(name))return true;if(this.parent===undefined)return false;return this.parent.hasMap(name);}
-inflateGroup(group){return group.map(this.inflateEntry.bind(this));}
-inflateEntry(entry){const inflatedEntry={};for(const[name,value]of Object.entries(entry)){let inflatedValue;if(this.hasMap(name)){const id=value;inflatedValue=this.deferenceStrings_(this.getMapValue(name,id));}else{inflatedValue=value;}
-inflatedEntry[singularize(name)]=inflatedValue;}
-return this.deferenceStrings_(inflatedEntry);}
-expandData(data){const mapsJson=data.maps||{};const groupsJson=data.allocators||{};const metadataPairs=getMetadataPairs(data);const metadata=createMetadata(metadataPairs);const opt_startTime=metadata.get('startTime');const maps=createMaps(mapsJson);const groups=createGroups(groupsJson,opt_startTime);return new ProfilingDictionaryReader(metadata,maps,groups,this);}
-expandEvent(event){return this.expandData(event.args.data);}}
-return{ProfilingDictionaryReader,singularize,deferenceStringsForTest:deferenceStrings,};});'use strict';tr.exportTo('tr.model.source_info',function(){function SourceInfo(file,opt_line,opt_column){this.file_=file;this.line_=opt_line||-1;this.column_=opt_column||-1;}
-SourceInfo.prototype={get file(){return this.file_;},get line(){return this.line_;},get column(){return this.column_;},get domain(){if(!this.file_)return undefined;const domain=this.file_.match(/(.*:\/\/[^:\/]*)/i);return domain?domain[1]:undefined;},toString(){let str='';if(this.file_){str+=this.file_;}
-if(this.line_>0){str+=':'+this.line_;}
-if(this.column_>0){str+=':'+this.column_;}
-return str;}};return{SourceInfo,};});'use strict';tr.exportTo('tr.model.source_info',function(){function JSSourceInfo(file,line,column,isNative,scriptId,state){tr.model.source_info.SourceInfo.call(this,file,line,column);this.isNative_=isNative;this.scriptId_=scriptId;this.state_=state;}
-JSSourceInfo.prototype={__proto__:tr.model.source_info.SourceInfo.prototype,get state(){return this.state_;},get isNative(){return this.isNative_;},get scriptId(){return this.scriptId_;},toString(){const str=this.isNative_?'[native v8] ':'';return str+
-tr.model.source_info.SourceInfo.prototype.toString.call(this);}};const JSSourceState={COMPILED:'compiled',OPTIMIZABLE:'optimizable',OPTIMIZED:'optimized',UNKNOWN:'unknown',};return{JSSourceInfo,JSSourceState,};});'use strict';tr.exportTo('tr.e.importer',function(){function TraceCodeEntry(address,size,name,scriptId){this.id_=tr.b.GUID.allocateSimple();this.address_=address;this.size_=size;const rePrefix=/^(\w*:)?([*~]?)(.*)$/m;const tokens=rePrefix.exec(name);const prefix=tokens[1];let state=tokens[2];const body=tokens[3];if(state==='*'){state=tr.model.source_info.JSSourceState.OPTIMIZED;}else if(state==='~'){state=tr.model.source_info.JSSourceState.OPTIMIZABLE;}else if(state===''){state=tr.model.source_info.JSSourceState.COMPILED;}else{state=tr.model.source_info.JSSourceState.UNKNOWN;}
-let rawName;let rawUrl;if(prefix==='Script:'){rawName='';rawUrl=body;}else{const spacePos=body.lastIndexOf(' ');rawName=spacePos!==-1?body.substr(0,spacePos):body;rawUrl=spacePos!==-1?body.substr(spacePos+1):'';}
-function splitLineAndColumn(url){const lineColumnRegEx=/(?::(\d+))?(?::(\d+))?$/;const lineColumnMatch=lineColumnRegEx.exec(url);let lineNumber;let columnNumber;if(typeof(lineColumnMatch[1])==='string'){lineNumber=parseInt(lineColumnMatch[1],10);lineNumber=isNaN(lineNumber)?undefined:lineNumber-1;}
-if(typeof(lineColumnMatch[2])==='string'){columnNumber=parseInt(lineColumnMatch[2],10);columnNumber=isNaN(columnNumber)?undefined:columnNumber-1;}
-return{url:url.substring(0,url.length-lineColumnMatch[0].length),lineNumber,columnNumber};}
-const nativeSuffix=' native';const isNative=rawName.endsWith(nativeSuffix);this.name_=isNative?rawName.slice(0,-nativeSuffix.length):rawName;const urlData=splitLineAndColumn(rawUrl);const url=urlData.url||'';const line=urlData.lineNumber||0;const column=urlData.columnNumber||0;this.sourceInfo_=new tr.model.source_info.JSSourceInfo(url,line,column,isNative,scriptId,state);}
-TraceCodeEntry.prototype={get id(){return this.id_;},get sourceInfo(){return this.sourceInfo_;},get name(){return this.name_;},set address(address){this.address_=address;},get address(){return this.address_;},set size(size){this.size_=size;},get size(){return this.size_;}};return{TraceCodeEntry,};});'use strict';tr.exportTo('tr.e.importer',function(){function TraceCodeMap(){this.banks_=new Map();}
-TraceCodeMap.prototype={addEntry(addressHex,size,name,scriptId){const entry=new tr.e.importer.TraceCodeEntry(this.getAddress_(addressHex),size,name,scriptId);this.addEntry_(addressHex,entry);},moveEntry(oldAddressHex,newAddressHex,size){const entry=this.getBank_(oldAddressHex).removeEntry(this.getAddress_(oldAddressHex));if(!entry)return;entry.address=this.getAddress_(newAddressHex);entry.size=size;this.addEntry_(newAddressHex,entry);},lookupEntry(addressHex){return this.getBank_(addressHex).lookupEntry(this.getAddress_(addressHex));},addEntry_(addressHex,entry){this.getBank_(addressHex).addEntry(entry);},getAddress_(addressHex){const bankSizeHexDigits=13;addressHex=addressHex.slice(2);return parseInt(addressHex.slice(-bankSizeHexDigits),16);},getBank_(addressHex){addressHex=addressHex.slice(2);const bankSizeHexDigits=13;const maxHexDigits=16;const bankName=addressHex.slice(-maxHexDigits,-bankSizeHexDigits);let bank=this.banks_.get(bankName);if(!bank){bank=new TraceCodeBank();this.banks_.set(bankName,bank);}
-return bank;}};function TraceCodeBank(){this.entries_=[];}
-TraceCodeBank.prototype={removeEntry(address){if(this.entries_.length===0)return undefined;const index=tr.b.findLowIndexInSortedArray(this.entries_,function(entry){return entry.address;},address);const entry=this.entries_[index];if(!entry||entry.address!==address)return undefined;this.entries_.splice(index,1);return entry;},lookupEntry(address){const index=tr.b.findFirstTrueIndexInSortedArray(this.entries_,e=>(address<e.address))-1;const entry=this.entries_[index];return entry&&address<entry.address+entry.size?entry:undefined;},addEntry(newEntry){if(this.entries_.length===0){this.entries_.push(newEntry);}
-const endAddress=newEntry.address+newEntry.size;const lastIndex=tr.b.findLowIndexInSortedArray(this.entries_,function(entry){return entry.address;},endAddress);let index;for(index=lastIndex-1;index>=0;--index){const entry=this.entries_[index];const entryEndAddress=entry.address+entry.size;if(entryEndAddress<=newEntry.address)break;}
-++index;this.entries_.splice(index,lastIndex-index,newEntry);}};return{TraceCodeMap,};});'use strict';tr.exportTo('tr.importer',function(){function ContextProcessor(model){this.model_=model;this.activeContexts_=[];this.stackPerType_={};this.contextCache_={};this.contextSetCache_={};this.cachedEntryForActiveContexts_=undefined;this.seenSnapshots_={};}
-ContextProcessor.prototype={enterContext(contextType,scopedId){const newActiveContexts=[this.getOrCreateContext_(contextType,scopedId),];for(const oldContext of this.activeContexts_){if(oldContext.type===contextType){this.pushContext_(oldContext);}else{newActiveContexts.push(oldContext);}}
-this.activeContexts_=newActiveContexts;this.cachedEntryForActiveContexts_=undefined;},leaveContext(contextType,scopedId){this.leaveContextImpl_(context=>context.type===contextType&&context.snapshot.scope===scopedId.scope&&context.snapshot.idRef===scopedId.id);},destroyContext(scopedId){for(const stack of Object.values(this.stackPerType_)){let newLength=0;for(let i=0;i<stack.length;++i){if(stack[i].snapshot.scope!==scopedId.scope||stack[i].snapshot.idRef!==scopedId.id){stack[newLength++]=stack[i];}}
-stack.length=newLength;}
-this.leaveContextImpl_(context=>context.snapshot.scope===scopedId.scope&&context.snapshot.idRef===scopedId.id);},leaveContextImpl_(predicate){const newActiveContexts=[];for(const oldContext of this.activeContexts_){if(predicate(oldContext)){const previousContext=this.popContext_(oldContext.type);if(previousContext){newActiveContexts.push(previousContext);}}else{newActiveContexts.push(oldContext);}}
-this.activeContexts_=newActiveContexts;this.cachedEntryForActiveContexts_=undefined;},getOrCreateContext_(contextType,scopedId){const context={type:contextType,snapshot:{scope:scopedId.scope,idRef:scopedId.id}};const key=this.getContextKey_(context);if(key in this.contextCache_){return this.contextCache_[key];}
-this.contextCache_[key]=context;const snapshotKey=this.getSnapshotKey_(scopedId);this.seenSnapshots_[snapshotKey]=true;return context;},pushContext_(context){if(!(context.type in this.stackPerType_)){this.stackPerType_[context.type]=[];}
-this.stackPerType_[context.type].push(context);},popContext_(contextType){if(!(contextType in this.stackPerType_)){return undefined;}
-return this.stackPerType_[contextType].pop();},getContextKey_(context){return[context.type,context.snapshot.scope,context.snapshot.idRef].join('\x00');},getSnapshotKey_(scopedId){return[scopedId.scope,scopedId.idRef].join('\x00');},get activeContexts(){if(this.cachedEntryForActiveContexts_===undefined){let key=[];for(const context of this.activeContexts_){key.push(this.getContextKey_(context));}
-key.sort();key=key.join('\x00');if(key in this.contextSetCache_){this.cachedEntryForActiveContexts_=this.contextSetCache_[key];}else{this.activeContexts_.sort(function(a,b){const keyA=this.getContextKey_(a);const keyB=this.getContextKey_(b);if(keyA<keyB){return-1;}
-if(keyA>keyB){return 1;}
-return 0;}.bind(this));this.contextSetCache_[key]=Object.freeze(this.activeContexts_);this.cachedEntryForActiveContexts_=this.contextSetCache_[key];}}
-return this.cachedEntryForActiveContexts_;},invalidateContextCacheForSnapshot(scopedId){const snapshotKey=this.getSnapshotKey_(scopedId);if(!(snapshotKey in this.seenSnapshots_))return;this.contextCache_={};this.contextSetCache_={};this.cachedEntryForActiveContexts_=undefined;this.activeContexts_=this.activeContexts_.map(function(context){if(context.snapshot.scope!==scopedId.scope||context.snapshot.idRef!==scopedId.id){return context;}
-return{type:context.type,snapshot:{scope:context.snapshot.scope,idRef:context.snapshot.idRef}};});this.seenSnapshots_={};},};return{ContextProcessor,};});'use strict';tr.exportTo('tr.model',function(){function Annotation(){this.guid_=tr.b.GUID.allocateSimple();this.view_=undefined;}
-Annotation.fromDictIfPossible=function(args){if(args.typeName===undefined){throw new Error('Missing typeName argument');}
-const typeInfo=Annotation.findTypeInfoMatching(function(typeInfo){return typeInfo.metadata.typeName===args.typeName;});if(typeInfo===undefined)return undefined;return typeInfo.constructor.fromDict(args);};Annotation.fromDict=function(){throw new Error('Not implemented');};Annotation.prototype={get guid(){return this.guid_;},onRemove(){},toDict(){throw new Error('Not implemented');},getOrCreateView(viewport){if(!this.view_){this.view_=this.createView_(viewport);}
-return this.view_;},createView_(){throw new Error('Not implemented');}};const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);tr.b.decorateExtensionRegistry(Annotation,options);Annotation.addEventListener('will-register',function(e){if(!e.typeInfo.constructor.hasOwnProperty('fromDict')){throw new Error('Must have fromDict method');}
-if(!e.typeInfo.metadata.typeName){throw new Error('Registered Annotations must provide typeName');}});return{Annotation,};});'use strict';tr.exportTo('tr.model',function(){function YComponent(stableId,yPercentOffset){this.stableId=stableId;this.yPercentOffset=yPercentOffset;}
-YComponent.prototype={toDict(){return{stableId:this.stableId,yPercentOffset:this.yPercentOffset};}};function Location(xWorld,yComponents){this.xWorld_=xWorld;this.yComponents_=yComponents;}
-Location.fromViewCoordinates=function(viewport,viewX,viewY){const dt=viewport.currentDisplayTransform;const xWorld=dt.xViewToWorld(viewX);const yComponents=[];let elem=document.elementFromPoint(viewX+viewport.modelTrackContainer.canvas.offsetLeft,viewY+viewport.modelTrackContainer.canvas.offsetTop);while(elem instanceof tr.ui.tracks.Track){if(elem.eventContainer){const boundRect=elem.getBoundingClientRect();const yPercentOffset=(viewY-boundRect.top)/boundRect.height;yComponents.push(new YComponent(elem.eventContainer.stableId,yPercentOffset));}
-elem=elem.parentElement;}
-if(yComponents.length===0)return;return new Location(xWorld,yComponents);};Location.fromStableIdAndTimestamp=function(viewport,stableId,ts){const xWorld=ts;const yComponents=[];const containerToTrack=viewport.containerToTrackMap;let elem=containerToTrack.getTrackByStableId(stableId);if(!elem)return;const firstY=elem.getBoundingClientRect().top;while(elem instanceof tr.ui.tracks.Track){if(elem.eventContainer){const boundRect=elem.getBoundingClientRect();const yPercentOffset=(firstY-boundRect.top)/boundRect.height;yComponents.push(new YComponent(elem.eventContainer.stableId,yPercentOffset));}
-elem=elem.parentElement;}
-if(yComponents.length===0)return;return new Location(xWorld,yComponents);};Location.prototype={get xWorld(){return this.xWorld_;},getContainingTrack(viewport){const containerToTrack=viewport.containerToTrackMap;for(const i in this.yComponents_){const yComponent=this.yComponents_[i];const track=containerToTrack.getTrackByStableId(yComponent.stableId);if(track!==undefined)return track;}},toViewCoordinates(viewport){const dt=viewport.currentDisplayTransform;const containerToTrack=viewport.containerToTrackMap;const viewX=dt.xWorldToView(this.xWorld_);let viewY=-1;for(const index in this.yComponents_){const yComponent=this.yComponents_[index];const track=containerToTrack.getTrackByStableId(yComponent.stableId);if(track!==undefined){const boundRect=track.getBoundingClientRect();viewY=yComponent.yPercentOffset*boundRect.height+boundRect.top;break;}}
-return{viewX,viewY};},toDict(){return{xWorld:this.xWorld_,yComponents:this.yComponents_};}};return{Location,};});'use strict';tr.exportTo('tr.ui.annotations',function(){function AnnotationView(viewport,annotation){}
-AnnotationView.prototype={draw(ctx){throw new Error('Not implemented');}};return{AnnotationView,};});'use strict';tr.exportTo('tr.ui.annotations',function(){function RectAnnotationView(viewport,annotation){this.viewport_=viewport;this.annotation_=annotation;}
-RectAnnotationView.prototype={__proto__:tr.ui.annotations.AnnotationView.prototype,draw(ctx){const dt=this.viewport_.currentDisplayTransform;const startCoords=this.annotation_.startLocation.toViewCoordinates(this.viewport_);const endCoords=this.annotation_.endLocation.toViewCoordinates(this.viewport_);let startY=startCoords.viewY-ctx.canvas.getBoundingClientRect().top;const sizeY=endCoords.viewY-startCoords.viewY;if(startY+sizeY<0){startY=sizeY;}else if(startY<0){startY=0;}
-ctx.fillStyle=this.annotation_.fillStyle;ctx.fillRect(startCoords.viewX,startY,endCoords.viewX-startCoords.viewX,sizeY);}};return{RectAnnotationView,};});'use strict';tr.exportTo('tr.model',function(){function RectAnnotation(start,end){tr.model.Annotation.apply(this,arguments);this.startLocation_=start;this.endLocation_=end;this.fillStyle='rgba(255, 180, 0, 0.3)';}
-RectAnnotation.fromDict=function(dict){const args=dict.args;const startLoc=new tr.model.Location(args.start.xWorld,args.start.yComponents);const endLoc=new tr.model.Location(args.end.xWorld,args.end.yComponents);return new tr.model.RectAnnotation(startLoc,endLoc);};RectAnnotation.prototype={__proto__:tr.model.Annotation.prototype,get startLocation(){return this.startLocation_;},get endLocation(){return this.endLocation_;},toDict(){return{typeName:'rect',args:{start:this.startLocation.toDict(),end:this.endLocation.toDict()}};},createView_(viewport){return new tr.ui.annotations.RectAnnotationView(viewport,this);}};tr.model.Annotation.register(RectAnnotation,{typeName:'rect'});return{RectAnnotation,};});'use strict';tr.exportTo('tr.ui.annotations',function(){function CommentBoxAnnotationView(viewport,annotation){this.viewport_=viewport;this.annotation_=annotation;this.textArea_=undefined;this.styleWidth=250;this.styleHeight=50;this.fontSize=10;this.rightOffset=50;this.topOffset=25;}
-CommentBoxAnnotationView.prototype={__proto__:tr.ui.annotations.AnnotationView.prototype,removeTextArea(){Polymer.dom(Polymer.dom(this.textArea_).parentNode).removeChild(this.textArea_);},draw(ctx){const coords=this.annotation_.location.toViewCoordinates(this.viewport_);if(coords.viewX<0){if(this.textArea_){this.textArea_.style.visibility='hidden';}
-return;}
-if(!this.textArea_){this.textArea_=document.createElement('textarea');this.textArea_.style.position='absolute';this.textArea_.readOnly=true;this.textArea_.value=this.annotation_.text;this.textArea_.style.zIndex=1;Polymer.dom(Polymer.dom(ctx.canvas).parentNode).appendChild(this.textArea_);}
-this.textArea_.style.width=this.styleWidth+'px';this.textArea_.style.height=this.styleHeight+'px';this.textArea_.style.fontSize=this.fontSize+'px';this.textArea_.style.visibility='visible';this.textArea_.style.left=coords.viewX+ctx.canvas.getBoundingClientRect().left+
-this.rightOffset+'px';this.textArea_.style.top=coords.viewY-ctx.canvas.getBoundingClientRect().top-
-this.topOffset+'px';ctx.strokeStyle='rgb(0, 0, 0)';ctx.lineWidth=2;ctx.beginPath();tr.ui.b.drawLine(ctx,coords.viewX,coords.viewY-ctx.canvas.getBoundingClientRect().top,coords.viewX+this.rightOffset,coords.viewY-this.topOffset-
-ctx.canvas.getBoundingClientRect().top);ctx.stroke();}};return{CommentBoxAnnotationView,};});'use strict';tr.exportTo('tr.model',function(){function CommentBoxAnnotation(location,text){tr.model.Annotation.apply(this,arguments);this.location=location;this.text=text;}
-CommentBoxAnnotation.fromDict=function(dict){const args=dict.args;const location=new tr.model.Location(args.location.xWorld,args.location.yComponents);return new tr.model.CommentBoxAnnotation(location,args.text);};CommentBoxAnnotation.prototype={__proto__:tr.model.Annotation.prototype,onRemove(){this.view_.removeTextArea();},toDict(){return{typeName:'comment_box',args:{text:this.text,location:this.location.toDict()}};},createView_(viewport){return new tr.ui.annotations.CommentBoxAnnotationView(viewport,this);}};tr.model.Annotation.register(CommentBoxAnnotation,{typeName:'comment_box'});return{CommentBoxAnnotation,};});'use strict';tr.exportTo('tr.model',function(){function ScopedId(scope,id,pid){if(scope===undefined){throw new Error('Scope should be defined. Use \''+
-tr.model.OBJECT_DEFAULT_SCOPE+'\' as the default scope.');}
-this.scope=scope;this.id=id;this.pid=pid;}
-ScopedId.prototype={toString(){const pidStr=this.pid===undefined?'':'pid: '+this.pid+', ';return'{'+pidStr+'scope: '+this.scope+', id: '+this.id+'}';},toStringWithDelimiter(delim){return(this.pid===undefined?'':this.pid)+delim+
-this.scope+delim+this.id;}};return{ScopedId,};});'use strict';tr.exportTo('tr.ui.annotations',function(){function XMarkerAnnotationView(viewport,annotation){this.viewport_=viewport;this.annotation_=annotation;}
-XMarkerAnnotationView.prototype={__proto__:tr.ui.annotations.AnnotationView.prototype,draw(ctx){const dt=this.viewport_.currentDisplayTransform;const viewX=dt.xWorldToView(this.annotation_.timestamp);ctx.beginPath();tr.ui.b.drawLine(ctx,viewX,0,viewX,ctx.canvas.height);ctx.strokeStyle=this.annotation_.strokeStyle;ctx.stroke();}};return{XMarkerAnnotationView,};});'use strict';tr.exportTo('tr.model',function(){function XMarkerAnnotation(timestamp){tr.model.Annotation.apply(this,arguments);this.timestamp=timestamp;this.strokeStyle='rgba(0, 0, 255, 0.5)';}
-XMarkerAnnotation.fromDict=function(dict){return new XMarkerAnnotation(dict.args.timestamp);};XMarkerAnnotation.prototype={__proto__:tr.model.Annotation.prototype,toDict(){return{typeName:'xmarker',args:{timestamp:this.timestamp}};},createView_(viewport){return new tr.ui.annotations.XMarkerAnnotationView(viewport,this);}};tr.model.Annotation.register(XMarkerAnnotation,{typeName:'xmarker'});return{XMarkerAnnotation,};});'use strict';tr.exportTo('tr.e.importer',function(){const Base64=tr.b.Base64;const deepCopy=tr.b.deepCopy;const ColorScheme=tr.b.ColorScheme;const HeapDumpTraceEventImporter=tr.e.importer.HeapDumpTraceEventImporter;const LegacyHeapDumpTraceEventImporter=tr.e.importer.LegacyHeapDumpTraceEventImporter;const StreamingEventExpander=tr.e.importer.StreamingEventExpander;const ProfilingDictionaryReader=tr.e.importer.ProfilingDictionaryReader;function getEventColor(event,opt_customName){if(event.cname){return ColorScheme.getColorIdForReservedName(event.cname);}else if(opt_customName||event.name){return ColorScheme.getColorIdForGeneralPurposeString(opt_customName||event.name);}}
-function isLegacyChromeClockSyncEvent(event){return event.name!==undefined&&event.name.startsWith(LEGACY_CHROME_CLOCK_SYNC_EVENT_NAME_PREFIX)&&((event.ph==='S')||(event.ph==='F'));}
-const PRODUCER='producer';const CONSUMER='consumer';const STEP='step';const BACKGROUND=tr.model.ContainerMemoryDump.LevelOfDetail.BACKGROUND;const LIGHT=tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT;const DETAILED=tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED;const MEMORY_DUMP_LEVEL_OF_DETAIL_ORDER=[undefined,BACKGROUND,LIGHT,DETAILED];const GLOBAL_MEMORY_ALLOCATOR_DUMP_PREFIX='global/';const LEGACY_CHROME_CLOCK_SYNC_EVENT_NAME_PREFIX='ClockSyncEvent.';const BYTE_STAT_NAME_MAP={'pc':'privateCleanResident','pd':'privateDirtyResident','sc':'sharedCleanResident','sd':'sharedDirtyResident','pss':'proportionalResident','sw':'swapped'};const WEAK_MEMORY_ALLOCATOR_DUMP_FLAG=1<<0;const OBJECT_TYPE_NAME_PATTERNS=[{prefix:'const char *WTF::getStringWithTypeName() [T = ',suffix:']'},{prefix:'const char* WTF::getStringWithTypeName() [with T = ',suffix:']'},{prefix:'const char *__cdecl WTF::getStringWithTypeName<',suffix:'>(void)'}];const SUBTRACE_FIELDS=new Set(['powerTraceAsString','systemTraceEvents',]);const NON_METADATA_FIELDS=new Set(['displayTimeUnit','samples','stackFrames','traceAnnotations','traceEvents',...SUBTRACE_FIELDS]);function TraceEventImporter(model,eventData){this.hasEvents_=undefined;this.importPriority=1;this.model_=model;this.events_=undefined;this.sampleEvents_=undefined;this.stackFrameEvents_=undefined;this.stackFrameTree_=new tr.model.ProfileTree();this.subtraces_=[];this.eventsWereFromString_=false;this.softwareMeasuredCpuCount_=undefined;this.allAsyncEvents_=[];this.allFlowEvents_=[];this.allObjectEvents_=[];this.contextProcessorPerThread={};this.traceEventSampleStackFramesByName_={};this.v8ProcessCodeMaps_={};this.v8ProcessRootStackFrame_={};this.v8SamplingData_=[];this.profileTrees_=new Map();this.profileInfo_=new Map();this.legacyChromeClockSyncStartEvent_=undefined;this.legacyChromeClockSyncFinishEvent_=undefined;this.allMemoryDumpEvents_={};this.heapProfileExpander=new ProfilingDictionaryReader();this.objectTypeNameMap_={};this.clockDomainId_=tr.model.ClockDomainId.UNKNOWN_CHROME_LEGACY;this.toModelTime_=undefined;if(typeof(eventData)==='string'||eventData instanceof String){eventData=eventData.trim();if(eventData[0]==='['){eventData=eventData.replace(/\s*,\s*$/,'');if(eventData[eventData.length-1]!==']'){eventData=eventData+']';}}
-this.events_=JSON.parse(eventData);this.eventsWereFromString_=true;}else{this.events_=eventData;}
-if(this.events_.traceEvents){const container=this.events_;this.events_=this.events_.traceEvents;for(const subtraceField of SUBTRACE_FIELDS){if(container[subtraceField]){this.storeSubtrace_(container[subtraceField]);}}
-this.storeSamples_(container.samples);this.storeStackFrames_(container.stackFrames);this.storeDisplayTimeUnit_(container.displayTimeUnit);this.storeTraceAnnotations_(container.traceAnnotations);this.storeMetadata_(container);}else if(this.events_ instanceof tr.b.TraceStream){const parser=oboe().node('{cat ph}',function(e){return oboe.drop;}).node('!.powerTraceAsString',this.storeSubtrace_.bind(this)).node('!.systemTraceEvents',this.storeSubtrace_.bind(this)).node('!.samples',this.storeSamples_.bind(this)).node('!.stackFrames',this.storeStackFrames_.bind(this)).node('!.displayTimeUnit',this.storeDisplayTimeUnit_.bind(this)).node('!.traceAnnotations',this.storeTraceAnnotations_.bind(this)).done(this.storeMetadata_.bind(this));this.events_.rewind();while(this.events_.hasData){parser.write(this.events_.readNumBytes());}
-parser.finish();}}
-TraceEventImporter.canImport=function(eventData){if(eventData instanceof tr.b.TraceStream){if(eventData.isBinary)return false;eventData=eventData.header;}
-if(typeof(eventData)==='string'||eventData instanceof String){eventData=eventData.trim();return eventData[0]==='{'||eventData[0]==='[';}
-if(eventData instanceof Array&&eventData.length&&eventData[0].ph){return true;}
-if(eventData.traceEvents){if(eventData.traceEvents instanceof Array){if(eventData.traceEvents.length&&eventData.traceEvents[0].ph){return true;}
-if(eventData.samples&&eventData.samples.length&&eventData.stackFrames!==undefined){return true;}}}
-return false;};TraceEventImporter.scopedIdForEvent_=function(event){const scope=event.scope||tr.model.OBJECT_DEFAULT_SCOPE;let pid=undefined;if(event.id!==undefined){if(event.id2!==undefined){throw new Error('Event has both id and id2');}
-pid=tr.model.LOCAL_ID_PHASES.has(event.ph)?event.pid:undefined;return new tr.model.ScopedId(scope,event.id,pid);}else if(event.id2!==undefined){if(event.id2.global!==undefined){return new tr.model.ScopedId(scope,event.id2.global);}else if(event.id2.local!==undefined){return new tr.model.ScopedId(scope,event.id2.local,event.pid);}
-throw new Error('Event that uses id2 must have either a global or local ID');}
-return undefined;};TraceEventImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'TraceEventImporter';},extractSubtraces(){const subtraces=this.subtraces_;this.subtraces_=[];return subtraces;},deepCopyIfNeeded_(obj){if(obj===undefined)obj={};if(this.eventsWereFromString_)return obj;return deepCopy(obj);},deepCopyAlways_(obj){if(obj===undefined)obj={};return deepCopy(obj);},processAsyncEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);this.allAsyncEvents_.push({sequenceNumber:this.allAsyncEvents_.length,event,thread});},processFlowEvent(event,opt_slice){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);this.allFlowEvents_.push({refGuid:tr.b.GUID.getLastSimpleGuid(),sequenceNumber:this.allFlowEvents_.length,event,slice:opt_slice,thread});},processCounterEvent(event){let ctrName;if(event.id!==undefined){ctrName=event.name+'['+event.id+']';}else{ctrName=event.name;}
-const ctr=this.model_.getOrCreateProcess(event.pid).getOrCreateCounter(event.cat,ctrName);const reservedColorId=event.cname?getEventColor(event):undefined;if(ctr.numSeries===0){for(const seriesName in event.args){const colorId=reservedColorId||getEventColor(event,ctr.name+'.'+seriesName);ctr.addSeries(new tr.model.CounterSeries(seriesName,colorId));}
-if(ctr.numSeries===0){this.model_.importWarning({type:'counter_parse_error',message:'Expected counter '+event.name+' to have at least one argument to use as a value.'});delete ctr.parent.counters[ctr.name];return;}}
-const ts=this.toModelTimeFromUs_(event.ts);ctr.series.forEach(function(series){const val=event.args[series.name]?event.args[series.name]:0;series.addCounterSample(ts,val);});},processObjectEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);this.allObjectEvents_.push({sequenceNumber:this.allObjectEvents_.length,event,thread});if(thread.guid in this.contextProcessorPerThread){const processor=this.contextProcessorPerThread[thread.guid];const scopedId=TraceEventImporter.scopedIdForEvent_(event);if(event.ph==='D'){processor.destroyContext(scopedId);}
-processor.invalidateContextCacheForSnapshot(scopedId);}},processContextEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);if(!(thread.guid in this.contextProcessorPerThread)){this.contextProcessorPerThread[thread.guid]=new tr.importer.ContextProcessor(this.model_);}
-const scopedId=TraceEventImporter.scopedIdForEvent_(event);const contextType=event.name;const processor=this.contextProcessorPerThread[thread.guid];if(event.ph==='('){processor.enterContext(contextType,scopedId);}else if(event.ph===')'){processor.leaveContext(contextType,scopedId);}else{this.model_.importWarning({type:'unknown_context_phase',message:'Unknown context event phase: '+event.ph+'.'});}},setContextsFromThread_(thread,slice){if(thread.guid in this.contextProcessorPerThread){slice.contexts=this.contextProcessorPerThread[thread.guid].activeContexts;}},processDurationEvent(event){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);const ts=this.toModelTimeFromUs_(event.ts);if(!thread.sliceGroup.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'duration_parse_error',message:'Timestamps are moving backward.'});return;}
-if(event.ph==='B'){const slice=thread.sliceGroup.beginSlice(event.cat,event.name,this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args),this.toModelTimeFromUs_(event.tts),event.argsStripped,getEventColor(event));slice.startStackFrame=this.getStackFrameForEvent_(event);this.setContextsFromThread_(thread,slice);}else if(event.ph==='I'||event.ph==='i'||event.ph==='R'){if(event.s!==undefined&&event.s!=='t'){throw new Error('This should never happen');}
-thread.sliceGroup.beginSlice(event.cat,event.name,this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args),this.toModelTimeFromUs_(event.tts),event.argsStripped,getEventColor(event));const slice=thread.sliceGroup.endSlice(this.toModelTimeFromUs_(event.ts),this.toModelTimeFromUs_(event.tts));slice.startStackFrame=this.getStackFrameForEvent_(event);slice.endStackFrame=undefined;}else{if(!thread.sliceGroup.openSliceCount){this.model_.importWarning({type:'duration_parse_error',message:'E phase event without a matching B phase event.'});return;}
-const slice=thread.sliceGroup.endSlice(this.toModelTimeFromUs_(event.ts),this.toModelTimeFromUs_(event.tts),getEventColor(event));if(event.name&&slice.title!==event.name){this.model_.importWarning({type:'title_match_error',message:'Titles do not match. Title is '+
-slice.title+' in openSlice, and is '+
-event.name+' in endSlice'});}
-slice.endStackFrame=this.getStackFrameForEvent_(event);this.mergeArgsInto_(slice.args,event.args,slice.title);}},mergeArgsInto_(dstArgs,srcArgs,eventName){for(const arg in srcArgs){if(dstArgs[arg]!==undefined){this.model_.importWarning({type:'arg_merge_error',message:'Different phases of '+eventName+' provided values for argument '+arg+'.'+' The last provided value will be used.'});}
-dstArgs[arg]=this.deepCopyIfNeeded_(srcArgs[arg]);}},processCompleteEvent(event){if(event.cat!==undefined&&event.cat.indexOf('trace_event_overhead')>-1){return undefined;}
-const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);if(event.flow_out){if(event.flow_in){event.flowPhase=STEP;}else{event.flowPhase=PRODUCER;}}else if(event.flow_in){event.flowPhase=CONSUMER;}
-const slice=thread.sliceGroup.pushCompleteSlice(event.cat,event.name,this.toModelTimeFromUs_(event.ts),this.maybeToModelTimeFromUs_(event.dur),this.maybeToModelTimeFromUs_(event.tts),this.maybeToModelTimeFromUs_(event.tdur),this.deepCopyIfNeeded_(event.args),event.argsStripped,getEventColor(event),event.bind_id);slice.startStackFrame=this.getStackFrameForEvent_(event);slice.endStackFrame=this.getStackFrameForEvent_(event,true);this.setContextsFromThread_(thread,slice);return slice;},processJitCodeEvent(event){if(this.v8ProcessCodeMaps_[event.pid]===undefined){this.v8ProcessCodeMaps_[event.pid]=new tr.e.importer.TraceCodeMap();}
-const map=this.v8ProcessCodeMaps_[event.pid];const data=event.args.data;if(event.name==='JitCodeMoved'){map.moveEntry(data.code_start,data.new_code_start,data.code_len);}else{map.addEntry(data.code_start,data.code_len,data.name,data.script_id);}},processMetadataEvent(event){if(event.name==='JitCodeAdded'||event.name==='JitCodeMoved'){this.v8SamplingData_.push(event);return;}
-if(event.argsStripped)return;if(event.name==='process_name'){const process=this.model_.getOrCreateProcess(event.pid);process.name=event.args.name;}else if(event.name==='process_labels'){const process=this.model_.getOrCreateProcess(event.pid);const labels=event.args.labels.split(',');for(let i=0;i<labels.length;i++){process.addLabelIfNeeded(labels[i]);}}else if(event.name==='process_uptime_seconds'){const process=this.model_.getOrCreateProcess(event.pid);process.uptime_seconds=event.args.uptime;}else if(event.name==='process_sort_index'){const process=this.model_.getOrCreateProcess(event.pid);process.sortIndex=event.args.sort_index;}else if(event.name==='thread_name'){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);thread.name=event.args.name;}else if(event.name==='thread_sort_index'){const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);thread.sortIndex=event.args.sort_index;}else if(event.name==='num_cpus'){let n=event.args.number;if(this.softwareMeasuredCpuCount_!==undefined){n=Math.max(n,this.softwareMeasuredCpuCount_);}
-this.softwareMeasuredCpuCount_=n;}else if(event.name==='stackFrames'){const stackFrames=event.args.stackFrames;if(stackFrames===undefined){this.model_.importWarning({type:'metadata_parse_error',message:'No stack frames found in a \''+event.name+'\' metadata event'});}else{this.importStackFrames_(stackFrames,'p'+event.pid+':');}}else if(event.name==='typeNames'){const objectTypeNameMap=event.args.typeNames;if(objectTypeNameMap===undefined){this.model_.importWarning({type:'metadata_parse_error',message:'No mapping from object type IDs to names found in a \''+
-event.name+'\' metadata event'});}else{this.importObjectTypeNameMap_(objectTypeNameMap,event.pid);}}else if(event.name==='TraceConfig'){this.model_.metadata.push({name:'TraceConfig',value:event.args.value});}else{this.model_.importWarning({type:'metadata_parse_error',message:'Unrecognized metadata name: '+event.name});}},processInstantEvent(event){if(event.name==='JitCodeAdded'||event.name==='JitCodeMoved'){this.v8SamplingData_.push(event);return;}
-if(event.s==='t'||event.s===undefined){this.processDurationEvent(event);return;}
-let constructor;switch(event.s){case'g':constructor=tr.model.GlobalInstantEvent;break;case'p':constructor=tr.model.ProcessInstantEvent;break;default:this.model_.importWarning({type:'instant_parse_error',message:'I phase event with unknown "s" field value.'});return;}
-const instantEvent=new constructor(event.cat,event.name,getEventColor(event),this.toModelTimeFromUs_(event.ts),this.deepCopyIfNeeded_(event.args));switch(instantEvent.type){case tr.model.InstantEventType.GLOBAL:this.model_.instantEvents.push(instantEvent);break;case tr.model.InstantEventType.PROCESS:{const process=this.model_.getOrCreateProcess(event.pid);process.instantEvents.push(instantEvent);break;}
-default:throw new Error('Unknown instant event type: '+event.s);}},getOrCreateProfileTree_(sampleType,id){if(!this.profileTrees_.has(sampleType)){this.profileTrees_.set(sampleType,new Map());}
-const profileTreeMap=this.profileTrees_.get(sampleType);if(profileTreeMap.has(id)){return profileTreeMap.get(id);}
-const profileTree=new tr.model.ProfileTree();profileTreeMap.set(id,profileTree);const info=this.profileInfo_.get(id);if(info!==undefined){profileTree.startTime=info.startTime;profileTree.pid=info.pid;profileTree.tid=info.tid;}
-return profileTree;},processSample(event){if(event.args===undefined||event.args.data===undefined){return;}
-if(event.id===undefined){throw new Error('No event ID in sample');}
-const data=event.args.data;if(data.startTime!==undefined){this.profileInfo_.set(event.id,{startTime:data.startTime,pid:event.pid,tid:event.tid});}
-const timeDeltas=data.timeDeltas;for(const sampleType in data){if(sampleType==='timeDeltas'||sampleType==='startTime'){continue;}
-if(data[sampleType].samples&&timeDeltas&&data[sampleType].samples.length!==timeDeltas.length){throw new Error('samples and timeDeltas array should have same length');}
-const profileTree=this.getOrCreateProfileTree_(sampleType,event.id);const nodes=data[sampleType].nodes;const samples=data[sampleType].samples;if(nodes!==undefined){for(const node of nodes){const ProfileNodeType=tr.model.ProfileNode.subTypes.getConstructor(undefined,sampleType);const profileNode=ProfileNodeType.constructFromObject(profileTree,node);if(profileNode===undefined){continue;}
-profileTree.add(profileNode);}}
-if(samples!==undefined){const thread=this.model_.getOrCreateProcess(profileTree.pid).getOrCreateThread(profileTree.tid);for(let i=0,len=samples.length;i<len;++i){const node=profileTree.getNode(samples[i]);profileTree.endTime+=timeDeltas[i];if(node===undefined)continue;const start=this.toModelTimeFromUs_(profileTree.endTime);this.model_.samples.push(new tr.model.Sample(start,node.sampleTitle,node,thread));}}}},processLegacyV8Sample(event){const data=event.args.data;const sampleType='legacySample';const ProfileNodeType=tr.model.ProfileNode.subTypes.getConstructor(undefined,sampleType);if(data.vm_state==='js'&&!data.stack.length)return;const profileTree=this.getOrCreateProfileTree_(sampleType,event.pid);if(profileTree.getNode(-1)===undefined){profileTree.add(new ProfileNodeType(-1,{url:'',scriptId:-1,functionName:'unknown'},undefined));}
-let node=undefined;if(data.stack.length>0&&this.v8ProcessCodeMaps_[event.pid]){const map=this.v8ProcessCodeMaps_[event.pid];data.stack.reverse();let parentNode=undefined;for(let i=0;i<data.stack.length;i++){const entry=map.lookupEntry(data.stack[i]);if(entry===undefined){node=profileTree.getNode(-1);}else{node=profileTree.getNode(entry.id);if(node===undefined){const sourceInfo=entry.sourceInfo;node=new ProfileNodeType(entry.id,{functionName:entry.name,url:entry.sourceInfo.file,lineNumber:sourceInfo.line!==-1?sourceInfo.line:undefined,columnNumber:sourceInfo.column!==-1?sourceInfo.column:undefined,scriptid:entry.sourceInfo.scriptId},parentNode);profileTree.add(node);}}
-parentNode=node;}}else{node=profileTree.getNode(data.vm_state);if(node===undefined){node=new ProfileNodeType(data.vm_state,{url:'',functionName:data.vm_state},undefined);profileTree.add(node);}}
-const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);this.model_.samples.push(new tr.model.Sample(this.toModelTimeFromUs_(event.ts),node.sampleTitle,node,thread));},processTraceSampleEvent(event){if(event.name==='V8Sample'||event.name.startsWith('Profile')){this.v8SamplingData_.push(event);return;}
-let node=this.stackFrameTree_.getNode(event.name);if(node===undefined&&event.sf!==undefined){node=this.stackFrameTree_.getNode('g'+event.sf);}
-if(node===undefined){let id=event.name;if(event.sf){id='g'+event.sf;}
-const ProfileNodeType=tr.model.ProfileNode.subTypes.getConstructor(undefined,'legacySample');node=this.stackFrameTree_.add(new ProfileNodeType(id,{functionName:event.name},undefined));}
-const thread=this.model_.getOrCreateProcess(event.pid).getOrCreateThread(event.tid);const sample=new tr.model.Sample(this.toModelTimeFromUs_(event.ts),'Trace Event Sample',node,thread,undefined,1,this.deepCopyIfNeeded_(event.args));this.setContextsFromThread_(thread,sample);this.model_.samples.push(sample);},processMemoryDumpEvent(event){if(event.ph!=='v'){throw new Error('Invalid memory dump event phase "'+event.ph+'".');}
-const dumpId=event.id;if(dumpId===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Memory dump event (phase \''+event.ph+'\') without a dump ID.'});return;}
-const pid=event.pid;if(pid===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Memory dump event (phase\''+event.ph+'\', dump ID \''+
-dumpId+'\') without a PID.'});return;}
-const allEvents=this.allMemoryDumpEvents_;let dumpIdEvents=allEvents[dumpId];if(dumpIdEvents===undefined){allEvents[dumpId]=dumpIdEvents={};}
-let processEvents=dumpIdEvents[pid];if(processEvents===undefined){dumpIdEvents[pid]=processEvents=[];}
-processEvents.push(event);},processClockSyncEvent(event){if(event.ph!=='c'){throw new Error('Invalid clock sync event phase "'+event.ph+'".');}
-const syncId=event.args.sync_id;if(syncId===undefined){this.model_.importWarning({type:'clock_sync_parse_error',message:'Clock sync at time '+event.ts+' without an ID.'});return;}
-if(event.args&&event.args.issue_ts!==undefined){this.model_.clockSyncManager.addClockSyncMarker(this.clockDomainId_,syncId,tr.b.Unit.timestampFromUs(event.args.issue_ts),tr.b.Unit.timestampFromUs(event.ts));}else{this.model_.clockSyncManager.addClockSyncMarker(this.clockDomainId_,syncId,tr.b.Unit.timestampFromUs(event.ts));}},processLegacyChromeClockSyncEvent(event){if(event.ph==='S'){this.legacyChromeClockSyncStartEvent_=event;}else if(event.ph==='F'){this.legacyChromeClockSyncFinishEvent_=event;}
-if(this.legacyChromeClockSyncStartEvent_===undefined||this.legacyChromeClockSyncFinishEvent_===undefined){return;}
-const startSyncId=this.legacyChromeClockSyncStartEvent_.name.substring(LEGACY_CHROME_CLOCK_SYNC_EVENT_NAME_PREFIX.length);const finishSyncId=this.legacyChromeClockSyncFinishEvent_.name.substring(LEGACY_CHROME_CLOCK_SYNC_EVENT_NAME_PREFIX.length);if(startSyncId!==finishSyncId){throw new Error('Inconsistent clock sync ID of legacy Chrome clock sync events');}
-this.model_.clockSyncManager.addClockSyncMarker(this.clockDomainId_,startSyncId,tr.b.Unit.timestampFromUs(this.legacyChromeClockSyncStartEvent_.ts),tr.b.Unit.timestampFromUs(this.legacyChromeClockSyncFinishEvent_.ts));},processV8Events(){this.v8SamplingData_.sort(function(a,b){if(a.ts!==b.ts)return a.ts-b.ts;if(a.ph==='M'||a.ph==='I'){return-1;}else if(b.ph==='M'||b.ph==='I'){return 1;}
-return 0;});const length=this.v8SamplingData_.length;for(let i=0;i<length;++i){const event=this.v8SamplingData_[i];if(event.ph==='M'||event.ph==='I'){this.processJitCodeEvent(event);}else if(event.ph==='P'){if(event.name.startsWith('Profile')){this.processSample(event);}else{this.processLegacyV8Sample(event);}}}},importClockSyncMarkers(){if(this.events_ instanceof tr.b.TraceStream){const parser=oboe().node('{cat ph}',this.importClockSyncMarker_.bind(this));this.events_.rewind();while(this.events_.hasData){parser.write(this.events_.readNumBytes());}
-parser.finish();}else{for(let i=0;i<this.events_.length;i++){this.importClockSyncMarker_(this.events_[i]);}}},importClockSyncMarker_(event){const isLegacyChromeClockSync=isLegacyChromeClockSyncEvent(event);if(event.ph!=='c'&&!isLegacyChromeClockSync)return;const eventSizeInBytes=this.model_.importOptions.trackDetailedModelStats?JSON.stringify(event).length:undefined;this.model_.stats.willProcessBasicTraceEvent('clock_sync',event.cat,event.name,event.ts,eventSizeInBytes);if(isLegacyChromeClockSync){this.processLegacyChromeClockSyncEvent(event);}else{this.processClockSyncEvent(event);}},importEvents(){this.hasEvents_=false;if(this.stackFrameEvents_){this.importStackFrames_(this.stackFrameEvents_,'g');}
-if(this.traceAnnotations_)this.importAnnotations_();if(this.events_ instanceof tr.b.TraceStream){const parser=oboe().node('{cat ph}',this.processEvent_.bind(this));this.events_.rewind();while(this.events_.hasData){parser.write(this.events_.readNumBytes());}
-parser.finish();}else{for(let eI=0;eI<this.events_.length;eI++){this.processEvent_(this.events_[eI]);}}
-this.createAsyncSlices_();this.processV8Events();for(const frame of Object.values(this.v8ProcessRootStackFrame_)){frame.removeAllChildren();}},storeSubtrace_(subtrace){this.subtraces_.push(subtrace);return oboe.drop;},storeSamples_(samples){this.sampleEvents_=samples;return oboe.drop;},storeStackFrames_(stackFrames){this.stackFrameEvents_=stackFrames;return oboe.drop;},storeDisplayTimeUnit_(unitName){if(!unitName)return;const unit=tr.b.TimeDisplayModes[unitName];if(unit===undefined){throw new Error('Unit '+unitName+' is not supported.');}
-this.model_.intrinsicTimeUnit=unit;return oboe.drop;},storeTraceAnnotations_(traceAnnotations){this.traceAnnotations_=traceAnnotations;return oboe.drop;},storeMetadata_(container){for(const fieldName of Object.keys(container)){if(NON_METADATA_FIELDS.has(fieldName))continue;this.model_.metadata.push({name:fieldName,value:container[fieldName]});if(fieldName!=='metadata')continue;const metadata=container[fieldName];if(metadata['highres-ticks']){this.model_.isTimeHighResolution=metadata['highres-ticks'];}
-if(metadata['clock-domain']){this.clockDomainId_=metadata['clock-domain'];}}
-return oboe.drop;},processEvent_(event){this.hasEvents_=true;const importOptions=this.model_.importOptions;const trackDetailedModelStats=importOptions.trackDetailedModelStats;const modelStats=this.model_.stats;if(event.args==='__stripped__'){event.argsStripped=true;event.args=undefined;}
-let eventSizeInBytes=undefined;if(trackDetailedModelStats){eventSizeInBytes=JSON.stringify(event).length;}
-switch(event.ph){case'B':case'E':modelStats.willProcessBasicTraceEvent('begin_end (non-compact)',event.cat,event.name,event.ts,eventSizeInBytes);this.processDurationEvent(event);break;case'X':{modelStats.willProcessBasicTraceEvent('begin_end (compact)',event.cat,event.name,event.ts,eventSizeInBytes);const slice=this.processCompleteEvent(event);if(slice!==undefined&&event.bind_id!==undefined){this.processFlowEvent(event,slice);}
-break;}
-case'b':case'e':case'n':case'S':case'F':case'T':case'p':modelStats.willProcessBasicTraceEvent('async',event.cat,event.name,event.ts,eventSizeInBytes);this.processAsyncEvent(event);break;case'I':case'i':case'R':modelStats.willProcessBasicTraceEvent('instant',event.cat,event.name,event.ts,eventSizeInBytes);this.processInstantEvent(event);break;case'P':modelStats.willProcessBasicTraceEvent('samples',event.cat,event.name,event.ts,eventSizeInBytes);this.processTraceSampleEvent(event);break;case'C':modelStats.willProcessBasicTraceEvent('counters',event.cat,event.name,event.ts,eventSizeInBytes);this.processCounterEvent(event);break;case'M':modelStats.willProcessBasicTraceEvent('metadata',event.cat,event.name,event.ts,eventSizeInBytes);this.processMetadataEvent(event);break;case'N':case'D':case'O':modelStats.willProcessBasicTraceEvent('objects',event.cat,event.name,event.ts,eventSizeInBytes);this.processObjectEvent(event);break;case's':case't':case'f':modelStats.willProcessBasicTraceEvent('flows',event.cat,event.name,event.ts,eventSizeInBytes);this.processFlowEvent(event);break;case'v':modelStats.willProcessBasicTraceEvent('memory_dumps',event.cat,event.name,event.ts,eventSizeInBytes);this.processMemoryDumpEvent(event);break;case'(':case')':this.processContextEvent(event);break;case'c':break;default:modelStats.willProcessBasicTraceEvent('unknown',event.cat,event.name,event.ts,eventSizeInBytes);this.model_.importWarning({type:'parse_error',message:'Unrecognized event phase: '+
-event.ph+' ('+event.name+')'});}
-return oboe.drop;},importStackFrames_(rawStackFrames,idPrefix){const model=this.model_;for(const id in rawStackFrames){const rawStackFrame=rawStackFrames[id];const fullId=idPrefix+id;const textForColor=rawStackFrame.category?rawStackFrame.category:rawStackFrame.name;const stackFrame=new tr.model.StackFrame(undefined,fullId,rawStackFrame.name,ColorScheme.getColorIdForGeneralPurposeString(textForColor));model.addStackFrame(stackFrame);}
-for(const id in rawStackFrames){const fullId=idPrefix+id;const stackFrame=model.stackFrames[fullId];if(stackFrame===undefined){throw new Error('Internal error');}
-const rawStackFrame=rawStackFrames[id];const parentId=rawStackFrame.parent;let parentStackFrame;if(parentId===undefined){parentStackFrame=undefined;}else{const parentFullId=idPrefix+parentId;parentStackFrame=model.stackFrames[parentFullId];if(parentStackFrame===undefined){this.model_.importWarning({type:'metadata_parse_error',message:'Missing parent frame with ID '+parentFullId+' for stack frame \''+stackFrame.name+'\' (ID '+fullId+').'});}}
-stackFrame.parentFrame=parentStackFrame;}
-const ProfileNodeType=tr.model.ProfileNode.subTypes.getConstructor(undefined,'legacySample');if(idPrefix==='g'){for(const id in rawStackFrames){const rawStackFrame=rawStackFrames[id];const textForColor=rawStackFrame.category?rawStackFrame.category:rawStackFrame.name;const node=this.stackFrameTree_.add(new ProfileNodeType('g'+id,{functionName:rawStackFrame.name},undefined));node.colorId=ColorScheme.getColorIdForGeneralPurposeString(textForColor);node.parentId=rawStackFrame.parent;}
-for(const id in rawStackFrames){const node=this.stackFrameTree_.getNode('g'+id);const parentId=node.parentId;let parentNode=undefined;if(parentId!==undefined){parentNode=this.stackFrameTree_.getNode('g'+parentId);if(parentNode===undefined){this.model_.importWarning({type:'metadata_parse_error',message:'Missing parent frame with ID '+parentId+' for stack frame \''+node.name+'\' (ID '+node.id+').'});}
-node.parentNode=parentNode;}}}},importObjectTypeNameMap_(rawObjectTypeNameMap,pid){if(pid in this.objectTypeNameMap_){this.model_.importWarning({type:'metadata_parse_error',message:'Mapping from object type IDs to names provided for pid='+
-pid+' multiple times.'});return;}
-let objectTypeNamePrefix=undefined;let objectTypeNameSuffix=undefined;const objectTypeNameMap={};for(const objectTypeId in rawObjectTypeNameMap){const rawObjectTypeName=rawObjectTypeNameMap[objectTypeId];if(objectTypeNamePrefix===undefined){for(let i=0;i<OBJECT_TYPE_NAME_PATTERNS.length;i++){const pattern=OBJECT_TYPE_NAME_PATTERNS[i];if(rawObjectTypeName.startsWith(pattern.prefix)&&rawObjectTypeName.endsWith(pattern.suffix)){objectTypeNamePrefix=pattern.prefix;objectTypeNameSuffix=pattern.suffix;break;}}}
-if(objectTypeNamePrefix!==undefined&&rawObjectTypeName.startsWith(objectTypeNamePrefix)&&rawObjectTypeName.endsWith(objectTypeNameSuffix)){objectTypeNameMap[objectTypeId]=rawObjectTypeName.substring(objectTypeNamePrefix.length,rawObjectTypeName.length-objectTypeNameSuffix.length);}else{objectTypeNameMap[objectTypeId]=rawObjectTypeName;}}
-this.objectTypeNameMap_[pid]=objectTypeNameMap;},importAnnotations_(){for(const id in this.traceAnnotations_){const annotation=tr.model.Annotation.fromDictIfPossible(this.traceAnnotations_[id]);if(!annotation){this.model_.importWarning({type:'annotation_warning',message:'Unrecognized traceAnnotation typeName \"'+
-this.traceAnnotations_[id].typeName+'\"'});continue;}
-this.model_.addAnnotation(annotation);}},finalizeImport(){if(this.softwareMeasuredCpuCount_!==undefined){this.model_.kernel.softwareMeasuredCpuCount=this.softwareMeasuredCpuCount_;}
-this.createFlowSlices_();this.createExplicitObjects_();this.createImplicitObjects_();this.createMemoryDumps_();},getStackFrameForEvent_(event,opt_lookForEndEvent){let sf;let stack;if(opt_lookForEndEvent){sf=event.esf;stack=event.estack;}else{sf=event.sf;stack=event.stack;}
-if(stack!==undefined&&sf!==undefined){this.model_.importWarning({type:'stack_frame_and_stack_error',message:'Event at '+event.ts+' cannot have both a stack and a stackframe.'});return undefined;}
-if(stack!==undefined){return this.model_.resolveStackToStackFrame_(event.pid,stack);}
-if(sf===undefined)return undefined;const stackFrame=this.model_.stackFrames['g'+sf];if(stackFrame===undefined){this.model_.importWarning({type:'sample_import_error',message:'No frame for '+sf});return;}
-return stackFrame;},resolveStackToStackFrame_(pid,stack){return undefined;},importSampleData(){if(!this.sampleEvents_)return;const m=this.model_;const events=this.sampleEvents_;if(this.hasEvents_===undefined){throw new Error('importEvents is not run before importSampleData');}else if(!this.hasEvents_){for(let i=0;i<events.length;i++){const event=events[i];m.getOrCreateProcess(event.tid).getOrCreateThread(event.tid);}}
-const threadsByTid={};m.getAllThreads().forEach(function(t){threadsByTid[t.tid]=t;});for(let i=0;i<events.length;i++){const event=events[i];const thread=threadsByTid[event.tid];if(thread===undefined){m.importWarning({type:'sample_import_error',message:'Thread '+events.tid+'not found'});continue;}
-let cpu;if(event.cpu!==undefined){cpu=m.kernel.getOrCreateCpu(event.cpu);}
-const leafNode=this.stackFrameTree_.getNode('g'+event.sf);const sample=new tr.model.Sample(this.toModelTimeFromUs_(event.ts),event.name,leafNode,thread,cpu,event.weight);m.samples.push(sample);}},createAsyncSlices_(){if(this.allAsyncEvents_.length===0)return;this.allAsyncEvents_.sort(function(x,y){const d=x.event.ts-y.event.ts;if(d!==0)return d;return x.sequenceNumber-y.sequenceNumber;});const legacyEvents=[];const nestableAsyncEventsByKey={};const nestableMeasureAsyncEventsByKey={};for(let i=0;i<this.allAsyncEvents_.length;i++){const asyncEventState=this.allAsyncEvents_[i];const event=asyncEventState.event;if(event.ph==='S'||event.ph==='F'||event.ph==='T'||event.ph==='p'){legacyEvents.push(asyncEventState);continue;}
-if(event.cat===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async events (ph: b, e, or n) require a '+'cat parameter.'});continue;}
-if(event.name===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async events (ph: b, e, or n) require a '+'name parameter.'});continue;}
-const id=TraceEventImporter.scopedIdForEvent_(event);if(id===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async events (ph: b, e, or n) require an '+'id parameter.'});continue;}
-if(event.cat==='blink.user_timing'){const matched=/([^\/:]+):([^\/:]+)\/?(.*)/.exec(event.name);if(matched!==null){const key=matched[1]+':'+event.cat;event.args=JSON.parse(Base64.atob(matched[3])||'{}');if(nestableMeasureAsyncEventsByKey[key]===undefined){nestableMeasureAsyncEventsByKey[key]=[];}
-nestableMeasureAsyncEventsByKey[key].push(asyncEventState);continue;}}
-const key=event.cat+':'+id.toStringWithDelimiter(':');if(nestableAsyncEventsByKey[key]===undefined){nestableAsyncEventsByKey[key]=[];}
-nestableAsyncEventsByKey[key].push(asyncEventState);}
-this.createLegacyAsyncSlices_(legacyEvents);this.createNestableAsyncSlices_(nestableMeasureAsyncEventsByKey);this.createNestableAsyncSlices_(nestableAsyncEventsByKey);},createLegacyAsyncSlice_(events){const asyncEventState=events[events.length-1];const event=asyncEventState.event;const name=event.name;const id=TraceEventImporter.scopedIdForEvent_(event);const key=id.toStringWithDelimiter(':');const asyncSliceConstructor=tr.model.AsyncSlice.subTypes.getConstructor(events[0].event.cat,name);let duration;if(event.ts!==undefined){duration=this.toModelTimeFromUs_(event.ts-events[0].event.ts);}
-const slice=new asyncSliceConstructor(events[0].event.cat,name,getEventColor(events[0].event),this.toModelTimeFromUs_(events[0].event.ts),Object.assign({},events[0].event.args,event.args),duration||0,true,undefined,undefined,events[0].event.argsStripped);if(duration===undefined){slice.didNotFinish=true;slice.error='Slice has no matching END. End time has been adjusted.';this.model_.importWarning({type:'async_slice_parse_error',message:'Legacy async BEGIN event at '+
-events[0].event.ts+' with name="'+
-name+'" and id='+key+' was unmatched.'});}
-slice.startThread=events[0].thread;slice.endThread=asyncEventState.thread;slice.id=key;const stepType=events[1].event.ph;let isValid=true;for(let j=1;j<events.length-1;++j){if(events[j].event.ph==='T'||events[j].event.ph==='p'){isValid=this.assertStepTypeMatches_(stepType,events[j]);if(!isValid)break;}
-if(events[j].event.ph==='S'){this.model_.importWarning({type:'async_slice_parse_error',message:'At '+events[j].event.ts+', a slice named "'+
-name+'" with id='+id+' had a step before the start event.'});continue;}
-if(events[j].event.ph==='F'){this.model_.importWarning({type:'async_slice_parse_error',message:'At '+events[j].event.ts+', a slice named '+
-name+' with id='+id+' had a step after the finish event.'});continue;}
-const startIndex=j+(stepType==='T'?0:-1);const endIndex=startIndex+1;let subName=name;if(!events[j].event.argsStripped&&(events[j].event.ph==='T'||events[j].event.ph==='p')){subName=events[j].event.args.step;}
-const asyncSliceConstructor=tr.model.AsyncSlice.subTypes.getConstructor(events[0].event.cat,subName);let duration;if(events[endIndex].event.ts!==undefined){duration=this.toModelTimeFromUs_(events[endIndex].event.ts-events[startIndex].event.ts);}
-const subSlice=new asyncSliceConstructor(events[0].event.cat,subName,getEventColor(events[0].event,subName+j),this.toModelTimeFromUs_(events[startIndex].event.ts),this.deepCopyIfNeeded_(events[j].event.args),duration||0,undefined,undefined,events[startIndex].event.argsStripped);if(duration===undefined){subSlice.didNotFinish=true;subSlice.error='Slice has no matching END. End time has been adjusted.';}
-subSlice.startThread=events[startIndex].thread;subSlice.endThread=events[endIndex].thread;subSlice.id=key;slice.subSlices.push(subSlice);}
-if(isValid){slice.startThread.asyncSliceGroup.push(slice);}},createLegacyAsyncSlices_(legacyEvents){if(legacyEvents.length===0)return;legacyEvents.sort(function(x,y){const d=x.event.ts-y.event.ts;if(d!==0)return d;return x.sequenceNumber-y.sequenceNumber;});const asyncEventStatesByNameThenID={};for(let i=0;i<legacyEvents.length;i++){const asyncEventState=legacyEvents[i];const event=asyncEventState.event;const name=event.name;if(name===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Async events (ph: S, T, p, or F) require a name '+' parameter.'});continue;}
-const id=TraceEventImporter.scopedIdForEvent_(event);if(id===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:'Async events (ph: S, T, p, or F) require an id parameter.'});continue;}
-const key=id.toStringWithDelimiter(':');if(event.ph==='S'){if(asyncEventStatesByNameThenID[name]===undefined){asyncEventStatesByNameThenID[name]={};}
-if(asyncEventStatesByNameThenID[name][key]){this.model_.importWarning({type:'async_slice_parse_error',message:'At '+event.ts+', a slice of the same id '+id+' was alrady open.'});continue;}
-asyncEventStatesByNameThenID[name][key]=[];asyncEventStatesByNameThenID[name][key].push(asyncEventState);}else{if(asyncEventStatesByNameThenID[name]===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:`At ${event.ts}, no slice named "${name}" was open.`,});continue;}
-if(asyncEventStatesByNameThenID[name][key]===undefined){this.model_.importWarning({type:'async_slice_parse_error',message:`At ${event.ts}, no slice named "${name}" with id=${id} was `+'open.',});continue;}
-const events=asyncEventStatesByNameThenID[name][key];events.push(asyncEventState);if(event.ph==='F'){this.createLegacyAsyncSlice_(events);delete asyncEventStatesByNameThenID[name][key];}}}
-for(const[name,statesByID]of
-Object.entries(asyncEventStatesByNameThenID)){for(const[id,states]of Object.entries(statesByID)){const startEvent=states[0].event;states.push({sequenceNumber:1+states[states.length-1].sequenceNumber,event:{ph:'F',name,id:startEvent.id,id2:startEvent.id2,scope:startEvent.scope,pid:startEvent.pid,tid:startEvent.tid,cat:startEvent.cat,args:{},},thread:this.model_.getOrCreateProcess(startEvent.pid).getOrCreateThread(startEvent.tid),});this.createLegacyAsyncSlice_(states);}}},createNestableAsyncSlices_(nestableEventsByKey){for(const key in nestableEventsByKey){const eventStateEntries=nestableEventsByKey[key];const parentStack=[];for(let i=0;i<eventStateEntries.length;++i){const eventStateEntry=eventStateEntries[i];if(eventStateEntry.event.ph==='e'){let parentIndex=-1;for(let k=parentStack.length-1;k>=0;--k){if(parentStack[k].event.name===eventStateEntry.event.name){parentIndex=k;break;}}
-if(parentIndex===-1){eventStateEntry.finished=false;}else{parentStack[parentIndex].end=eventStateEntry;while(parentIndex<parentStack.length){parentStack.pop();}}}
-if(parentStack.length>0){eventStateEntry.parentEntry=parentStack[parentStack.length-1];}
-if(eventStateEntry.event.ph==='b'){parentStack.push(eventStateEntry);}}
-const topLevelSlices=[];for(let i=0;i<eventStateEntries.length;++i){const eventStateEntry=eventStateEntries[i];if(eventStateEntry.event.ph==='e'&&eventStateEntry.finished===undefined){continue;}
-let startState=undefined;let endState=undefined;let sliceArgs=eventStateEntry.event.args||{};let sliceError=undefined;const id=TraceEventImporter.scopedIdForEvent_(eventStateEntry.event);if(eventStateEntry.event.ph==='n'){startState=eventStateEntry;endState=eventStateEntry;}else if(eventStateEntry.event.ph==='b'){if(eventStateEntry.end===undefined){eventStateEntry.end=eventStateEntries[eventStateEntries.length-1];sliceError='Slice has no matching END. End time has been adjusted.';this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async BEGIN event at '+
-eventStateEntry.event.ts+' with name="'+
-eventStateEntry.event.name+'" and id='+id+' was unmatched.'});}else{function concatenateArguments(args1,args2){if(args1.params===undefined||args2.params===undefined){return Object.assign({},args1,args2);}
-const args3={};args3.params=Object.assign({},args1.params,args2.params);return Object.assign({},args1,args2,args3);}
-const endArgs=eventStateEntry.end.event.args||{};sliceArgs=concatenateArguments(sliceArgs,endArgs);}
-startState=eventStateEntry;endState=eventStateEntry.end;}else{sliceError='Slice has no matching BEGIN. Start time has been adjusted.';this.model_.importWarning({type:'async_slice_parse_error',message:'Nestable async END event at '+
-eventStateEntry.event.ts+' with name='+
-eventStateEntry.event.name+' and id='+id+' was unmatched.'});startState=eventStateEntries[0];endState=eventStateEntry;}
-const isTopLevel=(eventStateEntry.parentEntry===undefined);const asyncSliceConstructor=tr.model.AsyncSlice.subTypes.getConstructor(eventStateEntry.event.cat,eventStateEntry.event.name);let threadStart=undefined;let threadDuration=undefined;if(startState.event.tts&&startState.event.use_async_tts){threadStart=this.toModelTimeFromUs_(startState.event.tts);if(endState.event.tts){const threadEnd=this.toModelTimeFromUs_(endState.event.tts);threadDuration=threadEnd-threadStart;}}
-const slice=new asyncSliceConstructor(eventStateEntry.event.cat,eventStateEntry.event.name,getEventColor(endState.event),this.toModelTimeFromUs_(startState.event.ts),sliceArgs,this.toModelTimeFromUs_(endState.event.ts-startState.event.ts),isTopLevel,threadStart,threadDuration,startState.event.argsStripped);slice.startThread=startState.thread;slice.endThread=endState.thread;slice.startStackFrame=this.getStackFrameForEvent_(startState.event);slice.endStackFrame=this.getStackFrameForEvent_(endState.event);slice.id=key;if(sliceError!==undefined){slice.error=sliceError;}
-eventStateEntry.slice=slice;if(isTopLevel){topLevelSlices.push(slice);}else if(eventStateEntry.parentEntry.slice!==undefined){eventStateEntry.parentEntry.slice.subSlices.push(slice);}}
-for(let si=0;si<topLevelSlices.length;si++){topLevelSlices[si].startThread.asyncSliceGroup.push(topLevelSlices[si]);}}},assertStepTypeMatches_(stepType,event){if(stepType!==event.event.ph){this.model_.importWarning({type:'async_slice_parse_error',message:'At '+event.event.ts+', a slice named '+
-event.event.name+' with id='+
-TraceEventImporter.scopedIdForEvent_(event.event)+' had both begin and end steps, which is not allowed.'});return false;}
-return true;},validateFlowEvent_(event){if(event.name===undefined){this.model_.importWarning({type:'flow_slice_parse_error',message:'Flow events (ph: s, t or f) require a name parameter.'});return false;}
-if(event.ph==='s'||event.ph==='f'||event.ph==='t'){if(event.id===undefined){this.model_.importWarning({type:'flow_slice_parse_error',message:'Flow events (ph: s, t or f) require an id parameter.'});return false;}
-return true;}
-if(event.bind_id){if(event.flow_in===undefined&&event.flow_out===undefined){this.model_.importWarning({type:'flow_slice_parse_error',message:'Flow producer or consumer require flow_in or flow_out.'});return false;}
-return true;}
-return false;},createFlowSlices_(){if(this.allFlowEvents_.length===0)return;const createFlowEvent=function(thread,event,opt_slice){let startSlice;let flowId;let flowStartTs;if(event.bind_id){startSlice=opt_slice;flowId=event.bind_id;flowStartTs=this.toModelTimeFromUs_(event.ts+event.dur);}else{const ts=this.toModelTimeFromUs_(event.ts);startSlice=thread.sliceGroup.findSliceAtTs(ts);if(startSlice===undefined)return undefined;flowId=event.id;flowStartTs=ts;}
-const flowEvent=new tr.model.FlowEvent(event.cat,flowId,event.name,getEventColor(event),flowStartTs,this.deepCopyAlways_(event.args));flowEvent.startSlice=startSlice;flowEvent.startStackFrame=this.getStackFrameForEvent_(event);flowEvent.endStackFrame=undefined;startSlice.outFlowEvents.push(flowEvent);return flowEvent;}.bind(this);const finishFlowEventWith=function(flowEvent,thread,event,refGuid,bindToParent,opt_slice){let endSlice;if(event.bind_id){endSlice=opt_slice;}else{const ts=this.toModelTimeFromUs_(event.ts);if(bindToParent){endSlice=thread.sliceGroup.findSliceAtTs(ts);}else{endSlice=thread.sliceGroup.findNextSliceAfter(ts,refGuid);}
-if(endSlice===undefined)return false;}
-endSlice.inFlowEvents.push(flowEvent);flowEvent.endSlice=endSlice;flowEvent.duration=this.toModelTimeFromUs_(event.ts)-flowEvent.start;flowEvent.endStackFrame=this.getStackFrameForEvent_(event);this.mergeArgsInto_(flowEvent.args,event.args,flowEvent.title);return true;}.bind(this);const processFlowConsumer=function(flowIdToEvent,sliceGuidToEvent,event,slice){let flowEvent=flowIdToEvent[event.bind_id];if(flowEvent===undefined){this.model_.importWarning({type:'flow_slice_ordering_error',message:'Flow consumer '+event.bind_id+' does not have '+'a flow producer'});return false;}else if(flowEvent.endSlice){const flowProducer=flowEvent.startSlice;flowEvent=createFlowEvent(undefined,sliceGuidToEvent[flowProducer.guid],flowProducer);}
-const refGuid=undefined;const ok=finishFlowEventWith(flowEvent,undefined,event,refGuid,undefined,slice);if(ok){this.model_.flowEvents.push(flowEvent);}else{this.model_.importWarning({type:'flow_slice_end_error',message:'Flow consumer '+event.bind_id+' does not end '+'at an actual slice, so cannot be created.'});return false;}
-return true;}.bind(this);const processFlowProducer=function(flowIdToEvent,flowStatus,event,slice){if(flowIdToEvent[event.bind_id]&&flowStatus[event.bind_id]){this.model_.importWarning({type:'flow_slice_start_error',message:'Flow producer '+event.bind_id+' already seen'});return false;}
-const flowEvent=createFlowEvent(undefined,event,slice);if(!flowEvent){this.model_.importWarning({type:'flow_slice_start_error',message:'Flow producer '+event.bind_id+' does not start'+'a flow'});return false;}
-flowIdToEvent[event.bind_id]=flowEvent;}.bind(this);this.allFlowEvents_.sort(function(x,y){const d=x.event.ts-y.event.ts;if(d!==0)return d;return x.sequenceNumber-y.sequenceNumber;});const flowIdToEvent={};const sliceGuidToEvent={};const flowStatus={};for(let i=0;i<this.allFlowEvents_.length;++i){const data=this.allFlowEvents_[i];const refGuid=data.refGuid;const event=data.event;const thread=data.thread;if(!this.validateFlowEvent_(event))continue;if(event.bind_id){const slice=data.slice;sliceGuidToEvent[slice.guid]=event;if(event.flowPhase===PRODUCER){if(!processFlowProducer(flowIdToEvent,flowStatus,event,slice)){continue;}
-flowStatus[event.bind_id]=true;}else{if(!processFlowConsumer(flowIdToEvent,sliceGuidToEvent,event,slice)){continue;}
-flowStatus[event.bind_id]=false;if(event.flowPhase===STEP){if(!processFlowProducer(flowIdToEvent,flowStatus,event,slice)){continue;}
-flowStatus[event.bind_id]=true;}}
-continue;}
-let flowEvent;if(event.ph==='s'){if(flowIdToEvent[event.id]){this.model_.importWarning({type:'flow_slice_start_error',message:'event id '+event.id+' already seen when '+'encountering start of flow event.'});continue;}
-flowEvent=createFlowEvent(thread,event);if(!flowEvent){this.model_.importWarning({type:'flow_slice_start_error',message:'event id '+event.id+' does not start '+'at an actual slice, so cannot be created.'});continue;}
-flowIdToEvent[event.id]=flowEvent;}else if(event.ph==='t'||event.ph==='f'){flowEvent=flowIdToEvent[event.id];if(flowEvent===undefined){this.model_.importWarning({type:'flow_slice_ordering_error',message:'Found flow phase '+event.ph+' for id: '+event.id+' but no flow start found.'});continue;}
-let bindToParent=event.ph==='t';if(event.ph==='f'){if(event.bp===undefined){if(event.cat.indexOf('input')>-1){bindToParent=true;}else if(event.cat.indexOf('ipc.flow')>-1){bindToParent=true;}}else{if(event.bp!=='e'){this.model_.importWarning({type:'flow_slice_bind_point_error',message:'Flow event with invalid binding point (event.bp).'});continue;}
-bindToParent=true;}}
-const ok=finishFlowEventWith(flowEvent,thread,event,refGuid,bindToParent);if(ok){this.model_.flowEvents.push(flowEvent);}else{this.model_.importWarning({type:'flow_slice_end_error',message:'event id '+event.id+' does not end '+'at an actual slice, so cannot be created.'});}
-flowIdToEvent[event.id]=undefined;if(ok&&event.ph==='t'){flowEvent=createFlowEvent(thread,event);flowIdToEvent[event.id]=flowEvent;}}}},createExplicitObjects_(){if(this.allObjectEvents_.length===0)return;const processEvent=function(objectEventState){const event=objectEventState.event;const scopedId=TraceEventImporter.scopedIdForEvent_(event);const thread=objectEventState.thread;if(event.name===undefined){this.model_.importWarning({type:'object_parse_error',message:'While processing '+JSON.stringify(event)+': '+'Object events require an name parameter.'});}
-if(scopedId===undefined||scopedId.id===undefined){this.model_.importWarning({type:'object_parse_error',message:'While processing '+JSON.stringify(event)+': '+'Object events require an id parameter.'});}
-const process=thread.parent;const ts=this.toModelTimeFromUs_(event.ts);let instance;if(event.ph==='N'){try{instance=process.objects.idWasCreated(scopedId,event.cat,event.name,ts);}catch(e){this.model_.importWarning({type:'object_parse_error',message:'While processing create of '+
-scopedId+' at ts='+ts+': '+e});return;}}else if(event.ph==='O'){if(event.args.snapshot===undefined){this.model_.importWarning({type:'object_parse_error',message:'While processing '+scopedId+' at ts='+ts+': '+'Snapshots must have args: {snapshot: ...}'});return;}
-let snapshot;try{const args=this.deepCopyIfNeeded_(event.args.snapshot);let cat;if(args.cat){cat=args.cat;delete args.cat;}else{cat=event.cat;}
-let baseTypename;if(args.base_type){baseTypename=args.base_type;delete args.base_type;}else{baseTypename=undefined;}
-snapshot=process.objects.addSnapshot(scopedId,cat,event.name,ts,args,baseTypename);snapshot.snapshottedOnThread=thread;}catch(e){this.model_.importWarning({type:'object_parse_error',message:'While processing snapshot of '+
-scopedId+' at ts='+ts+': '+e});return;}
-instance=snapshot.objectInstance;}else if(event.ph==='D'){try{process.objects.idWasDeleted(scopedId,event.cat,event.name,ts);const instanceMap=process.objects.getOrCreateInstanceMap_(scopedId);instance=instanceMap.lastInstance;}catch(e){this.model_.importWarning({type:'object_parse_error',message:'While processing delete of '+
-scopedId+' at ts='+ts+': '+e});return;}}
-if(instance){instance.colorId=getEventColor(event,instance.typeName);}}.bind(this);this.allObjectEvents_.sort(function(x,y){const d=x.event.ts-y.event.ts;if(d!==0)return d;return x.sequenceNumber-y.sequenceNumber;});const allObjectEvents=this.allObjectEvents_;for(let i=0;i<allObjectEvents.length;i++){const objectEventState=allObjectEvents[i];try{processEvent.call(this,objectEventState);}catch(e){this.model_.importWarning({type:'object_parse_error',message:e.message});}}},createImplicitObjects_(){for(const proc of Object.values(this.model_.processes)){this.createImplicitObjectsForProcess_(proc);}},createImplicitObjectsForProcess_(process){function processField(referencingObject,referencingObjectFieldName,referencingObjectFieldValue,containingSnapshot){if(!referencingObjectFieldValue)return;if(referencingObjectFieldValue instanceof
-tr.model.ObjectSnapshot){return null;}
-if(referencingObjectFieldValue.id===undefined)return;const implicitSnapshot=referencingObjectFieldValue;const rawId=implicitSnapshot.id;const m=/(.+)\/(.+)/.exec(rawId);if(!m){throw new Error('Implicit snapshots must have names.');}
-delete implicitSnapshot.id;const name=m[1];const id=m[2];let res;let cat;if(implicitSnapshot.cat!==undefined){cat=implicitSnapshot.cat;}else{cat=containingSnapshot.objectInstance.category;}
-let baseTypename;if(implicitSnapshot.base_type){baseTypename=implicitSnapshot.base_type;}else{baseTypename=undefined;}
-const scope=containingSnapshot.objectInstance.scopedId.scope;try{res=process.objects.addSnapshot(new tr.model.ScopedId(scope,id),cat,name,containingSnapshot.ts,implicitSnapshot,baseTypename);}catch(e){this.model_.importWarning({type:'object_snapshot_parse_error',message:'While processing implicit snapshot of '+
-rawId+' at ts='+containingSnapshot.ts+': '+e});return;}
-res.objectInstance.hasImplicitSnapshots=true;res.containingSnapshot=containingSnapshot;res.snapshottedOnThread=containingSnapshot.snapshottedOnThread;referencingObject[referencingObjectFieldName]=res;if(!(res instanceof tr.model.ObjectSnapshot)){throw new Error('Created object must be instanceof snapshot');}
-return res.args;}
-function iterObject(object,func,containingSnapshot,thisArg){if(!(object instanceof Object))return;if(object instanceof Array){for(let i=0;i<object.length;i++){const res=func.call(thisArg,object,i,object[i],containingSnapshot);if(res===null)continue;if(res){iterObject(res,func,containingSnapshot,thisArg);}else{iterObject(object[i],func,containingSnapshot,thisArg);}}
-return;}
-for(const key in object){const res=func.call(thisArg,object,key,object[key],containingSnapshot);if(res===null)continue;if(res){iterObject(res,func,containingSnapshot,thisArg);}else{iterObject(object[key],func,containingSnapshot,thisArg);}}}
-process.objects.iterObjectInstances(function(instance){instance.snapshots.forEach(function(snapshot){if(snapshot.args.id!==undefined){throw new Error('args cannot have an id field inside it');}
-iterObject(snapshot.args,processField,snapshot,this);},this);},this);},minimalTimestampInPidToEvents_(pidToEvents){let smallestTs=Infinity;for(const events of Object.values(pidToEvents)){for(const event of events){if(event.ts<smallestTs){smallestTs=event.ts;}}}
-return smallestTs;},createMemoryDumps_(){const pairs=Object.entries(this.allMemoryDumpEvents_);const key=x=>this.minimalTimestampInPidToEvents_(x);pairs.sort((x,y)=>key(x[1])-key(y[1]));for(const[dumpId,pidToEvents]of pairs){this.createGlobalMemoryDump_(pidToEvents,dumpId);}},createGlobalMemoryDump_(dumpIdEvents,dumpId){const globalRange=new tr.b.math.Range();for(const pid in dumpIdEvents){const processEvents=dumpIdEvents[pid];for(let i=0;i<processEvents.length;i++){globalRange.addValue(this.toModelTimeFromUs_(processEvents[i].ts));}}
-if(globalRange.isEmpty){throw new Error('Internal error: Global memory dump without events');}
-const globalMemoryDump=new tr.model.GlobalMemoryDump(this.model_,globalRange.min);globalMemoryDump.duration=globalRange.range;this.model_.globalMemoryDumps.push(globalMemoryDump);const globalMemoryAllocatorDumpsByFullName={};const levelsOfDetail={};const allMemoryAllocatorDumpsByGuid={};for(const pid in dumpIdEvents){this.createProcessMemoryDump_(globalMemoryDump,globalMemoryAllocatorDumpsByFullName,levelsOfDetail,allMemoryAllocatorDumpsByGuid,dumpIdEvents[pid],pid,dumpId);}
-globalMemoryDump.levelOfDetail=levelsOfDetail.global;globalMemoryDump.memoryAllocatorDumps=this.inferMemoryAllocatorDumpTree_(globalMemoryAllocatorDumpsByFullName);this.parseMemoryDumpAllocatorEdges_(allMemoryAllocatorDumpsByGuid,dumpIdEvents,dumpId);},createProcessMemoryDump_(globalMemoryDump,globalMemoryAllocatorDumpsByFullName,levelsOfDetail,allMemoryAllocatorDumpsByGuid,processEvents,pid,dumpId){const processRange=new tr.b.math.Range();for(let i=0;i<processEvents.length;i++){processRange.addValue(this.toModelTimeFromUs_(processEvents[i].ts));}
-if(processRange.isEmpty){throw new Error('Internal error: Process memory dump without events');}
-const process=this.model_.getOrCreateProcess(pid);const processMemoryDump=new tr.model.ProcessMemoryDump(globalMemoryDump,process,processRange.min);processMemoryDump.duration=processRange.range;process.memoryDumps.push(processMemoryDump);globalMemoryDump.processMemoryDumps[pid]=processMemoryDump;const processMemoryAllocatorDumpsByFullName={};for(let i=0;i<processEvents.length;i++){const processEvent=processEvents[i];const dumps=processEvent.args.dumps;if(dumps===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'\'dumps\' field not found in a process memory dump'+' event for PID='+pid+' and dump ID='+dumpId+'.'});continue;}
-this.parseMemoryDumpTotals_(processMemoryDump,dumps,pid,dumpId);this.parseMemoryDumpVmRegions_(processMemoryDump,dumps,pid,dumpId);this.parseMemoryDumpHeapDumps_(processMemoryDump,dumps,pid,dumpId);this.parseMemoryDumpLevelOfDetail_(levelsOfDetail,dumps,pid,dumpId);this.parseMemoryDumpAllocatorDumps_(processMemoryDump,globalMemoryDump,processMemoryAllocatorDumpsByFullName,globalMemoryAllocatorDumpsByFullName,allMemoryAllocatorDumpsByGuid,dumps,pid,dumpId);}
-if(levelsOfDetail.process===undefined){levelsOfDetail.process=processMemoryDump.vmRegions?DETAILED:LIGHT;}
-if(!this.updateMemoryDumpLevelOfDetail_(levelsOfDetail,'global',levelsOfDetail.process)){this.model_.importWarning({type:'memory_dump_parse_error',message:'diffent levels of detail provided for global memory'+' dump (dump ID='+dumpId+').'});}
-processMemoryDump.levelOfDetail=levelsOfDetail.process;delete levelsOfDetail.process;processMemoryDump.memoryAllocatorDumps=this.inferMemoryAllocatorDumpTree_(processMemoryAllocatorDumpsByFullName);},parseMemoryDumpTotals_(processMemoryDump,dumps,pid,dumpId){const rawTotals=dumps.process_totals;if(rawTotals===undefined)return;if(processMemoryDump.totals!==undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Process totals provided multiple times for'+' process memory dump for PID='+pid+' and dump ID='+dumpId+'.'});return;}
-const totals={};let platformSpecificTotals=undefined;for(const rawTotalName in rawTotals){const rawTotalValue=rawTotals[rawTotalName];if(rawTotalValue===undefined)continue;if(rawTotalName==='resident_set_bytes'){totals.residentBytes=parseInt(rawTotalValue,16);continue;}
-if(rawTotalName==='peak_resident_set_bytes'){totals.peakResidentBytes=parseInt(rawTotalValue,16);continue;}
-if(rawTotalName==='is_peak_rss_resetable'){totals.arePeakResidentBytesResettable=!!rawTotalValue;continue;}
-if(rawTotalName==='private_footprint_bytes'){totals.privateFootprintBytes=parseInt(rawTotalValue,16);continue;}
-if(platformSpecificTotals===undefined){platformSpecificTotals={};totals.platformSpecific=platformSpecificTotals;}
-platformSpecificTotals[rawTotalName]=parseInt(rawTotalValue,16);}
-if(totals.peakResidentBytes===undefined&&totals.arePeakResidentBytesResettable!==undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Optional field peak_resident_set_bytes found'+' but is_peak_rss_resetable not found in'+' process memory dump for PID='+pid+' and dump ID='+dumpId+'.'});}
-if(totals.arePeakResidentBytesResettable!==undefined&&totals.peakResidentBytes===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Optional field is_peak_rss_resetable found'+' but peak_resident_set_bytes not found in'+' process memory dump for PID='+pid+' and dump ID='+dumpId+'.'});}
-processMemoryDump.totals=totals;},parseMemoryDumpVmRegions_(processMemoryDump,dumps,pid,dumpId){const rawProcessMmaps=dumps.process_mmaps;if(rawProcessMmaps===undefined)return;const rawVmRegions=rawProcessMmaps.vm_regions;if(rawVmRegions===undefined)return;if(processMemoryDump.vmRegions!==undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'VM regions provided multiple times for'+' process memory dump for PID='+pid+' and dump ID='+dumpId+'.'});return;}
-const vmRegions=new Array(rawVmRegions.length);for(let i=0;i<rawVmRegions.length;i++){const rawVmRegion=rawVmRegions[i];const byteStats={};const rawByteStats=rawVmRegion.bs;for(const rawByteStatName in rawByteStats){const rawByteStatValue=rawByteStats[rawByteStatName];if(rawByteStatValue===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Byte stat \''+rawByteStatName+'\' of VM region '+
-i+' ('+rawVmRegion.mf+') in process memory dump for '+'PID='+pid+' and dump ID='+dumpId+' does not have a value.'});continue;}
-const byteStatName=BYTE_STAT_NAME_MAP[rawByteStatName];if(byteStatName===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Unknown byte stat name \''+rawByteStatName+'\' ('+
-rawByteStatValue+') of VM region '+i+' ('+
-rawVmRegion.mf+') in process memory dump for PID='+pid+' and dump ID='+dumpId+'.'});continue;}
-byteStats[byteStatName]=parseInt(rawByteStatValue,16);if(byteStatName==='proportionalResident'&&byteStats[byteStatName]===0){byteStats[byteStatName]=undefined;}}
-vmRegions[i]=new tr.model.VMRegion(parseInt(rawVmRegion.sa,16),parseInt(rawVmRegion.sz,16),rawVmRegion.pf,rawVmRegion.mf,byteStats);}
-processMemoryDump.vmRegions=tr.model.VMRegionClassificationNode.fromRegions(vmRegions);},parseMemoryDumpHeapDumps_(processMemoryDump,dumps,pid,dumpId){const idPrefix='p'+pid+':';let importer;if(dumps.heaps){const processTypeMap=this.objectTypeNameMap_[pid];if(processTypeMap===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Missing mapping from object type IDs to names.'});}
-importer=new LegacyHeapDumpTraceEventImporter(this.model_,processMemoryDump,processTypeMap,idPrefix,dumpId,dumps.heaps);}else if(dumps.heaps_v2){const data=dumps.heaps_v2;this.heapProfileExpander=this.heapProfileExpander.expandData(data);this.addNewStackFramesFromExpander_(this.heapProfileExpander,idPrefix);importer=new HeapDumpTraceEventImporter(this.heapProfileExpander,this.model_.stackFrames,processMemoryDump,idPrefix,this.model_);}
-if(!importer)return;const heapDumps=importer.parse();if(!heapDumps)return;if(processMemoryDump.heapDumps!==undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Heap dumps provided multiple times for'+' process memory dump for PID='+pid+' and dump ID='+dumpId+'.'});return;}
-if(Object.keys(heapDumps).length>0){processMemoryDump.heapDumps=heapDumps;}},addNewStackFramesFromExpander_(expander,idPrefix){const nodeMap=expander.getNewMap('nodes');const newStackFrames={};for(const[id,stackFrame]of nodeMap.entries()){if(!this.model_.stackFrames[idPrefix+id]){newStackFrames[id]={id,name:expander.getString(stackFrame.name_sid),};if(stackFrame.parent)newStackFrames[id].parent=stackFrame.parent;}}
-this.importStackFrames_(newStackFrames,idPrefix);},parseMemoryDumpLevelOfDetail_(levelsOfDetail,dumps,pid,dumpId){const rawLevelOfDetail=dumps.level_of_detail;let level;switch(rawLevelOfDetail){case'background':level=BACKGROUND;break;case'light':level=LIGHT;break;case'detailed':level=DETAILED;break;case undefined:level=undefined;break;default:this.model_.importWarning({type:'memory_dump_parse_error',message:'unknown raw level of detail \''+rawLevelOfDetail+'\' of process memory dump for PID='+pid+' and dump ID='+dumpId+'.'});return;}
-if(!this.updateMemoryDumpLevelOfDetail_(levelsOfDetail,'process',level)){this.model_.importWarning({type:'memory_dump_parse_error',message:'diffent levels of detail provided for process memory'+' dump for PID='+pid+' (dump ID='+dumpId+').'});}},updateMemoryDumpLevelOfDetail_(levelsOfDetail,scope,level){if(!(scope in levelsOfDetail)||level===levelsOfDetail[scope]){levelsOfDetail[scope]=level;return true;}
-if(MEMORY_DUMP_LEVEL_OF_DETAIL_ORDER.indexOf(level)>MEMORY_DUMP_LEVEL_OF_DETAIL_ORDER.indexOf(levelsOfDetail[scope])){levelsOfDetail[scope]=level;}
-return false;},parseMemoryDumpAllocatorDumps_(processMemoryDump,globalMemoryDump,processMemoryAllocatorDumpsByFullName,globalMemoryAllocatorDumpsByFullName,allMemoryAllocatorDumpsByGuid,dumps,pid,dumpId){const rawAllocatorDumps=dumps.allocators;if(rawAllocatorDumps===undefined)return;for(let fullName in rawAllocatorDumps){const rawAllocatorDump=rawAllocatorDumps[fullName];const guid=rawAllocatorDump.guid;if(guid===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Memory allocator dump '+fullName+' for PID='+pid+' and dump ID='+dumpId+' does not have a GUID.'});}
-const flags=rawAllocatorDump.flags||0;const isWeakDump=!!(flags&WEAK_MEMORY_ALLOCATOR_DUMP_FLAG);let containerMemoryDump;let dstIndex;if(fullName.startsWith(GLOBAL_MEMORY_ALLOCATOR_DUMP_PREFIX)){fullName=fullName.substring(GLOBAL_MEMORY_ALLOCATOR_DUMP_PREFIX.length);containerMemoryDump=globalMemoryDump;dstIndex=globalMemoryAllocatorDumpsByFullName;}else{containerMemoryDump=processMemoryDump;dstIndex=processMemoryAllocatorDumpsByFullName;}
-let allocatorDump=allMemoryAllocatorDumpsByGuid[guid];if(allocatorDump===undefined){if(fullName in dstIndex){this.model_.importWarning({type:'memory_dump_parse_error',message:'Multiple GUIDs provided for'+' memory allocator dump '+fullName+': '+
-dstIndex[fullName].guid+', '+guid+' (ignored) for'+' PID='+pid+' and dump ID='+dumpId+'.'});continue;}
-allocatorDump=new tr.model.MemoryAllocatorDump(containerMemoryDump,fullName,guid);allocatorDump.weak=isWeakDump;dstIndex[fullName]=allocatorDump;if(guid!==undefined){allMemoryAllocatorDumpsByGuid[guid]=allocatorDump;}}else{if(allocatorDump.containerMemoryDump!==containerMemoryDump){this.model_.importWarning({type:'memory_dump_parse_error',message:'Memory allocator dump '+fullName+' (GUID='+guid+') for PID='+pid+' and dump ID='+
-dumpId+' dumped in different contexts.'});continue;}
-if(allocatorDump.fullName!==fullName){this.model_.importWarning({type:'memory_dump_parse_error',message:'Memory allocator dump with GUID='+guid+' for PID='+
-pid+' and dump ID='+dumpId+' has multiple names: '+
-allocatorDump.fullName+', '+fullName+' (ignored).'});continue;}
-if(!isWeakDump){allocatorDump.weak=false;}}
-let attributes=rawAllocatorDump.attrs;if(attributes===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Memory allocator dump '+fullName+' (GUID='+guid+') for PID='+pid+' and dump ID='+dumpId+' does not have attributes.'});attributes={};}
-for(const attrName in attributes){const attrArgs=attributes[attrName];const attrType=attrArgs.type;const attrValue=attrArgs.value;switch(attrType){case'scalar':{if(attrName in allocatorDump.numerics){this.model_.importWarning({type:'memory_dump_parse_error',message:'Multiple values provided for scalar attribute '+
-attrName+' of memory allocator dump '+fullName+' (GUID='+guid+') for PID='+pid+' and dump ID='+
-dumpId+'.'});break;}
-const unit=attrArgs.units==='bytes'?tr.b.Unit.byName.sizeInBytes_smallerIsBetter:tr.b.Unit.byName.unitlessNumber_smallerIsBetter;const value=parseInt(attrValue,16);allocatorDump.addNumeric(attrName,new tr.b.Scalar(unit,value));break;}
-case'string':if(attrName in allocatorDump.diagnostics){this.model_.importWarning({type:'memory_dump_parse_error',message:'Multiple values provided for string attribute '+
-attrName+' of memory allocator dump '+fullName+' (GUID='+guid+') for PID='+pid+' and dump ID='+
-dumpId+'.'});break;}
-allocatorDump.addDiagnostic(attrName,attrValue);break;default:this.model_.importWarning({type:'memory_dump_parse_error',message:'Unknown type provided for attribute '+attrName+' of memory allocator dump '+fullName+' (GUID='+guid+') for PID='+pid+' and dump ID='+dumpId+': '+
-attrType});break;}}}},inferMemoryAllocatorDumpTree_(memoryAllocatorDumpsByFullName){const rootAllocatorDumps=[];const fullNames=Object.keys(memoryAllocatorDumpsByFullName);fullNames.sort();for(let i=0;i<fullNames.length;i++){let fullName=fullNames[i];let allocatorDump=memoryAllocatorDumpsByFullName[fullName];while(true){const lastSlashIndex=fullName.lastIndexOf('/');if(lastSlashIndex===-1){rootAllocatorDumps.push(allocatorDump);break;}
-const parentFullName=fullName.substring(0,lastSlashIndex);let parentAllocatorDump=memoryAllocatorDumpsByFullName[parentFullName];let parentAlreadyExisted=true;if(parentAllocatorDump===undefined){parentAlreadyExisted=false;parentAllocatorDump=new tr.model.MemoryAllocatorDump(allocatorDump.containerMemoryDump,parentFullName);if(allocatorDump.weak!==false){parentAllocatorDump.weak=undefined;}
-memoryAllocatorDumpsByFullName[parentFullName]=parentAllocatorDump;}
-allocatorDump.parent=parentAllocatorDump;parentAllocatorDump.children.push(allocatorDump);if(parentAlreadyExisted){if(!allocatorDump.weak){while(parentAllocatorDump!==undefined&&parentAllocatorDump.weak===undefined){parentAllocatorDump.weak=false;parentAllocatorDump=parentAllocatorDump.parent;}}
-break;}
-fullName=parentFullName;allocatorDump=parentAllocatorDump;}}
-for(const fullName in memoryAllocatorDumpsByFullName){const allocatorDump=memoryAllocatorDumpsByFullName[fullName];if(allocatorDump.weak===undefined){allocatorDump.weak=true;}}
-return rootAllocatorDumps;},parseMemoryDumpAllocatorEdges_(allMemoryAllocatorDumpsByGuid,dumpIdEvents,dumpId){for(const pid in dumpIdEvents){const processEvents=dumpIdEvents[pid];for(let i=0;i<processEvents.length;i++){const processEvent=processEvents[i];const dumps=processEvent.args.dumps;if(dumps===undefined)continue;const rawEdges=dumps.allocators_graph;if(rawEdges===undefined)continue;for(let j=0;j<rawEdges.length;j++){const rawEdge=rawEdges[j];const sourceGuid=rawEdge.source;const sourceDump=allMemoryAllocatorDumpsByGuid[sourceGuid];if(sourceDump===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Edge for PID='+pid+' and dump ID='+dumpId+' is missing source memory allocator dump (GUID='+
-sourceGuid+').'});continue;}
-const targetGuid=rawEdge.target;const targetDump=allMemoryAllocatorDumpsByGuid[targetGuid];if(targetDump===undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Edge for PID='+pid+' and dump ID='+dumpId+' is missing target memory allocator dump (GUID='+
-targetGuid+').'});continue;}
-const importance=rawEdge.importance;const edge=new tr.model.MemoryAllocatorDumpLink(sourceDump,targetDump,importance);switch(rawEdge.type){case'ownership':if(sourceDump.owns!==undefined){this.model_.importWarning({type:'memory_dump_parse_error',message:'Memory allocator dump '+sourceDump.fullName+' (GUID='+sourceGuid+') already owns a memory'+' allocator dump ('+
-sourceDump.owns.target.fullName+').'});}else{sourceDump.owns=edge;targetDump.ownedBy.push(edge);}
-break;case'retention':sourceDump.retains.push(edge);targetDump.retainedBy.push(edge);break;default:this.model_.importWarning({type:'memory_dump_parse_error',message:'Invalid edge type: '+rawEdge.type+' (PID='+pid+', dump ID='+dumpId+', source='+sourceGuid+', target='+targetGuid+', importance='+importance+').'});}}}}},toModelTimeFromUs_(ts){if(!this.toModelTime_){this.toModelTime_=this.model_.clockSyncManager.getModelTimeTransformer(this.clockDomainId_);}
-return this.toModelTime_(tr.b.Unit.timestampFromUs(ts));},maybeToModelTimeFromUs_(ts){if(ts===undefined){return undefined;}
-return this.toModelTimeFromUs_(ts);}};tr.importer.Importer.register(TraceEventImporter);return{TraceEventImporter,};});'use strict';tr.exportTo('tr.e.measure',function(){const AsyncSlice=tr.model.AsyncSlice;function MeasureAsyncSlice(){this.groupTitle_='Ungrouped Measure';const matched=/([^\/:]+):([^\/:]+)\/?(.*)/.exec(arguments[1]);if(matched!==null){arguments[1]=matched[2];this.groupTitle_=matched[1];}
-AsyncSlice.apply(this,arguments);}
-MeasureAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get viewSubGroupTitle(){return this.groupTitle_;},get title(){return this.title_;},set title(title){this.title_=title;}};AsyncSlice.subTypes.register(MeasureAsyncSlice,{categoryParts:['blink.user_timing']});return{MeasureAsyncSlice,};});'use strict';tr.exportTo('tr.e.net',function(){const AsyncSlice=tr.model.AsyncSlice;function NetAsyncSlice(){AsyncSlice.apply(this,arguments);this.url_=undefined;this.byteCount_=undefined;this.isTitleComputed_=false;this.isUrlComputed_=false;}
-NetAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get viewSubGroupTitle(){return'NetLog';},get title(){if(this.isTitleComputed_||!this.isTopLevel){return this.title_;}
-if(this.url!==undefined&&this.url.length>0){this.title_=this.url;}else if(this.args!==undefined&&this.args.source_type!==undefined){this.title_=this.args.source_type;}
-this.isTitleComputed_=true;return this.title_;},set title(title){this.title_=title;},get url(){if(this.isUrlComputed_){return this.url_;}
-if(this.args!==undefined&&this.args.params!==undefined&&this.args.params.url!==undefined){this.url_=this.args.params.url;}else if(this.subSlices!==undefined&&this.subSlices.length>0){for(let i=0;i<this.subSlices.length&&!this.url_;i++){if(this.subSlices[i].url!==undefined){this.url_=this.subSlices[i].url;}}}
-this.isUrlComputed_=true;return this.url_;},get byteCount(){if(this.byteCount_!==undefined){return this.byteCount_;}
-this.byteCount_=0;if((this.originalTitle==='URL_REQUEST_JOB_FILTERED_BYTES_READ'||this.originalTitle==='URL_REQUEST_JOB_BYTES_READ')&&this.args!==undefined&&this.args.params!==undefined&&this.args.params.byte_count!==undefined){this.byteCount_=this.args.params.byte_count;}
-for(let i=0;i<this.subSlices.length;i++){this.byteCount_+=this.subSlices[i].byteCount;}
-return this.byteCount_;}};AsyncSlice.subTypes.register(NetAsyncSlice,{categoryParts:['netlog','disabled-by-default-netlog']});return{NetAsyncSlice,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){function Parser(importer){this.importer=importer;this.model=importer.model;}
-Parser.prototype={__proto__:Object.prototype};const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.mandatoryBaseClass=Parser;tr.b.decorateExtensionRegistry(Parser,options);return{Parser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function AndroidParser(importer){Parser.call(this,importer);importer.registerEventHandler('tracing_mark_write:android',AndroidParser.prototype.traceMarkWriteAndroidEvent.bind(this));importer.registerEventHandler('0:android',AndroidParser.prototype.traceMarkWriteAndroidEvent.bind(this));this.model_=importer.model_;this.ppids_={};}
-function parseArgs(argsString){const args={};if(argsString){const argsArray=argsString.split(';');for(let i=0;i<argsArray.length;++i){const parts=argsArray[i].split('=');if(parts[0]){args[parts.shift()]=parts.join('=');}}}
-return args;}
-AndroidParser.prototype={__proto__:Parser.prototype,openAsyncSlice(thread,category,name,cookie,ts,args){const asyncSliceConstructor=tr.model.AsyncSlice.subTypes.getConstructor(category,name);const slice=new asyncSliceConstructor(category,name,ColorScheme.getColorIdForGeneralPurposeString(name),ts,args);const key=category+':'+name+':'+cookie;slice.id=cookie;slice.startThread=thread;if(!this.openAsyncSlices){this.openAsyncSlices={};}
-this.openAsyncSlices[key]=slice;},closeAsyncSlice(thread,category,name,cookie,ts,args){if(!this.openAsyncSlices){return;}
-const key=category+':'+name+':'+cookie;const slice=this.openAsyncSlices[key];if(!slice){return;}
-for(const arg in args){if(slice.args[arg]!==undefined){this.model_.importWarning({type:'parse_error',message:'Both the S and F events of '+slice.title+' provided values for argument '+arg+'.'+' The value of the F event will be used.'});}
-slice.args[arg]=args[arg];}
-slice.endThread=thread;slice.duration=ts-slice.start;slice.startThread.asyncSliceGroup.push(slice);delete this.openAsyncSlices[key];},traceMarkWriteAndroidEvent(eventName,cpuNumber,pid,ts,eventBase){const eventData=eventBase.details.split('|');switch(eventData[0]){case'B':{const ppid=parseInt(eventData[1]);const title=eventData[2];const args=parseArgs(eventData[3]);let category=eventData[4];if(category===undefined)category='android';const thread=this.model_.getOrCreateProcess(ppid).getOrCreateThread(pid);thread.name=eventBase.threadName;if(!thread.sliceGroup.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'parse_error',message:'Timestamps are moving backward.'});return false;}
-this.ppids_[pid]=ppid;thread.sliceGroup.beginSlice(category,title,ts,args);break;}
-case'E':{const ppid=this.ppids_[pid];if(ppid===undefined){break;}
-const thread=this.model_.getOrCreateProcess(ppid).getOrCreateThread(pid);if(!thread.sliceGroup.openSliceCount){break;}
-const slice=thread.sliceGroup.endSlice(ts);const args=parseArgs(eventData[3]);for(const arg in args){if(slice.args[arg]!==undefined){this.model_.importWarning({type:'parse_error',message:'Both the B and E events of '+slice.title+' provided values for argument '+arg+'.'+' The value of the E event will be used.'});}
-slice.args[arg]=args[arg];}
-break;}
-case'C':{const ppid=parseInt(eventData[1]);const name=eventData[2];const value=parseInt(eventData[3]);let category=eventData[4];if(category===undefined)category='android';const ctr=this.model_.getOrCreateProcess(ppid).getOrCreateCounter(category,name);if(ctr.numSeries===0){ctr.addSeries(new tr.model.CounterSeries(value,ColorScheme.getColorIdForGeneralPurposeString(ctr.name+'.'+'value')));}
-ctr.series.forEach(function(series){series.addCounterSample(ts,value);});break;}
-case'S':{const ppid=parseInt(eventData[1]);const name=eventData[2];const cookie=parseInt(eventData[3]);const args=parseArgs(eventData[4]);let category=eventData[5];if(category===undefined)category='android';const thread=this.model_.getOrCreateProcess(ppid).getOrCreateThread(pid);thread.name=eventBase.threadName;this.ppids_[pid]=ppid;this.openAsyncSlice(thread,category,name,cookie,ts,args);break;}
-case'F':{const ppid=parseInt(eventData[1]);const name=eventData[2];const cookie=parseInt(eventData[3]);const args=parseArgs(eventData[4]);let category=eventData[5];if(category===undefined)category='android';const thread=this.model_.getOrCreateProcess(ppid).getOrCreateThread(pid);thread.name=eventBase.threadName;this.ppids_[pid]=ppid;this.closeAsyncSlice(thread,category,name,cookie,ts,args);break;}
-default:return false;}
-return true;}};Parser.register(AndroidParser);return{AndroidParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;const binderTransRE=new RegExp('transaction=(\\d+) dest_node=(\\d+) '+'dest_proc=(\\d+) dest_thread=(\\d+) '+'reply=(\\d+) flags=(0x[0-9a-fA-F]+) '+'code=(0x[0-9a-fA-F]+)');const binderTransReceivedRE=/transaction=(\d+)/;function isBinderThread(name){return(name.indexOf('Binder')>-1);}
-const TF_ONE_WAY=0x01;const TF_ROOT_OBJECT=0x04;const TF_STATUS_CODE=0x08;const TF_ACCEPT_FDS=0x10;const NO_FLAGS=0;function binderFlagsToHuman(num){const flag=parseInt(num,16);let str='';if(flag&TF_ONE_WAY){str+='this is a one-way call: async, no return; ';}
-if(flag&TF_ROOT_OBJECT){str+='contents are the components root object; ';}
-if(flag&TF_STATUS_CODE){str+='contents are a 32-bit status code; ';}
-if(flag&TF_ACCEPT_FDS){str+='allow replies with file descriptors; ';}
-if(flag===NO_FLAGS){str+='No Flags Set';}
-return str;}
-function isReplyToOrigin(calling,called){return(called.dest_proc===calling.calling_pid||called.dest_thread===calling.calling_pid);}
-function binderCodeToHuman(code){return'Java Layer Dependent';}
-function doInternalSlice(trans,slice,ts){if(slice.subSlices.length!==0){slice.subSlices[0].start=ts;return slice.subSlices[0];}
-const kthread=trans.calling_kthread.thread;const internalSlice=kthread.sliceGroup.pushCompleteSlice('binder',slice.title,ts,.001,0,0,slice.args);internalSlice.title=slice.title;internalSlice.id=slice.id;internalSlice.colorId=slice.colorId;slice.subSlices.push(internalSlice);return internalSlice;}
-function generateBinderArgsForSlice(trans,cThreadName){return{'Transaction Id':trans.transaction_key,'Destination Node':trans.dest_node,'Destination Process':trans.dest_proc,'Destination Thread':trans.dest_thread,'Destination Name':cThreadName,'Reply transaction?':trans.is_reply_transaction,'Flags':trans.flags+' '+
-binderFlagsToHuman(trans.flags),'Code':trans.code+' '+
-binderCodeToHuman(trans.code),'Calling PID':trans.calling_pid,'Calling tgid':trans.calling_kthread.thread.parent.pid};}
-function BinderTransaction(events,callingPid,callingTs,callingKthread){this.transaction_key=parseInt(events[1]);this.dest_node=parseInt(events[2]);this.dest_proc=parseInt(events[3]);this.dest_thread=parseInt(events[4]);this.is_reply_transaction=parseInt(events[5])===1?true:false;this.expect_reply=((this.is_reply_transaction===false)&&(parseInt(events[6],16)&TF_ONE_WAY)===0);this.flags=events[6];this.code=events[7];this.calling_pid=callingPid;this.calling_ts=callingTs;this.calling_kthread=callingKthread;}
-function BinderParser(importer){Parser.call(this,importer);importer.registerEventHandler('binder_locked',BinderParser.prototype.binderLocked.bind(this));importer.registerEventHandler('binder_unlock',BinderParser.prototype.binderUnlock.bind(this));importer.registerEventHandler('binder_lock',BinderParser.prototype.binderLock.bind(this));importer.registerEventHandler('binder_transaction',BinderParser.prototype.binderTransaction.bind(this));importer.registerEventHandler('binder_transaction_received',BinderParser.prototype.binderTransactionReceived.bind(this));this.model_=importer.model;this.kthreadlookup={};this.importer_=importer;this.transWaitingRecv={};this.syncTransWaitingCompletion={};this.recursiveSyncTransWaitingCompletion_ByPID={};this.receivedTransWaitingConversion={};}
-BinderParser.prototype={__proto__:Parser.prototype,binderLock(eventName,cpuNumber,pid,ts,eventBase){const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;this.doNameMappings(pid,tgid,eventName.threadName);const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);kthread.binderAttemptLockTS=ts;kthread.binderOpenTsA=ts;return true;},binderLocked(eventName,cpuNumber,pid,ts,eventBase){const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;const binderThread=isBinderThread(eventBase.threadName);const name=eventBase.threadName;const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);this.doNameMappings(pid,tgid,name);const rthread=kthread.thread;kthread.binderLockAquiredTS=ts;if(kthread.binderAttemptLockTS===undefined)return false;const args=this.generateArgsForSlice(tgid,pid,name,kthread);rthread.sliceGroup.pushCompleteSlice('binder','binder lock waiting',kthread.binderAttemptLockTS,ts-kthread.binderAttemptLockTS,0,0,args);kthread.binderAttemptLockTS=undefined;return true;},binderUnlock(eventName,cpuNumber,pid,ts,eventBase){const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);if(kthread.binderLockAquiredTS===undefined)return false;const args=this.generateArgsForSlice(tgid,pid,eventBase.threadName,kthread);kthread.thread.sliceGroup.pushCompleteSlice('binder','binder lock held',kthread.binderLockAquiredTS,ts-kthread.binderLockAquiredTS,0,0,args);kthread.binderLockAquiredTS=undefined;return true;},binderTransaction(eventName,cpuNumber,pid,ts,eventBase){const event=binderTransRE.exec(eventBase.details);if(event===undefined)return false;const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;this.doNameMappings(pid,tgid,eventBase.threadName);const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);const trans=new BinderTransaction(event,pid,ts,kthread);const args=generateBinderArgsForSlice(trans,eventBase.threadName);const priorReceive=this.getPriorReceiveOnPID(pid);if(priorReceive!==false){return this.modelPriorReceive(priorReceive,ts,pid,tgid,kthread,trans,args,event);}
-const recursiveTrans=this.getRecursiveTransactionNeedingCompletion(pid);if(recursiveTrans!==false){return this.modelRecursiveTransactions(recursiveTrans,ts,pid,kthread,trans,args);}
-const slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',ts,.03,0,0,args);slice.colorId=ColorScheme.getColorIdForGeneralPurposeString(ts.toString());trans.slice=slice;if(trans.expect_reply){slice.title='binder transaction';}else{slice.title='binder transaction async';}
-this.addTransactionWaitingForRecv(trans.transaction_key,trans);return true;},binderTransactionReceived(eventName,cpuNumber,pid,ts,eventBase){const event=binderTransReceivedRE.exec(eventBase.details);if(event===undefined)return false;const tgid=parseInt(eventBase.tgid);if(isNaN(tgid))return false;const transactionkey=parseInt(event[1]);const kthread=this.importer_.getOrCreateBinderKernelThread(eventBase.threadName,tgid,pid);const syncComplete=this.getSyncTransNeedsCompletion(transactionkey);if(syncComplete!==false){const syncTrans=syncComplete[0];const syncSlice=syncTrans.slice;const responseTrans=syncComplete[1];const responseSlice=responseTrans.slice;syncSlice.duration=ts-syncSlice.start;const syncInternal=doInternalSlice(syncTrans,syncSlice,ts);const responseTs=responseSlice.start+responseSlice.duration;const responseInternal=doInternalSlice(responseTrans,responseSlice,responseTs);if(responseSlice.outFlowEvents.length===0||syncSlice.inFlowEvents.length===0){const flow=this.generateFlow(responseInternal,syncInternal,responseTrans,syncTrans);syncSlice.inFlowEvents.push(flow);responseSlice.outFlowEvents.push(flow);this.model_.flowEvents.push(flow);}
-for(let i=1;i<syncSlice.inFlowEvents.length;i++){syncSlice.inFlowEvents[i].duration=ts-syncSlice.inFlowEvents[i].start;}
-return true;}
-const trForRecv=this.getTransactionWaitingForRecv(transactionkey);if(trForRecv!==false){if(!trForRecv.expect_reply){const args=generateBinderArgsForSlice(trForRecv,eventBase.threadName);const slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','binder Async recv',ts,.03,0,0,args);const fakeEvent=[0,0,0,0,0,0,0];const fakeTrans=new BinderTransaction(fakeEvent,pid,ts,kthread);const flow=this.generateFlow(trForRecv.slice,slice,trForRecv,fakeTrans);this.model_.flowEvents.push(flow);trForRecv.slice.title='binder transaction async';trForRecv.slice.duration=.03;return true;}
-trForRecv.slice.title='binder transaction';this.setCurrentReceiveOnPID(pid,[ts,trForRecv]);return true;}
-return false;},modelRecursiveTransactions(recursiveTrans,ts,pid,kthread,trans,args){const recursiveSlice=recursiveTrans[1].slice;const origSlice=recursiveTrans[0].slice;recursiveSlice.duration=ts-recursiveSlice.start;trans.slice=recursiveSlice;if(trans.is_reply_transaction){origSlice.duration=ts-origSlice.start;this.addSyncTransNeedingCompletion(trans.transaction_key,recursiveTrans);if(isReplyToOrigin(recursiveTrans[0],trans)){this.removeRecursiveTransaction(pid);}}else{const slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',ts,.03,0,0,args);trans.slice=slice;this.addTransactionWaitingForRecv(trans.transaction_key,trans);}
-return true;},modelPriorReceive(priorReceive,ts,pid,tgid,kthread,trans,args,event){const calleeSlice=priorReceive[1].slice;const calleeTrans=priorReceive[1];const recvTs=priorReceive[0];let slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','',recvTs,ts-recvTs,0,0,args);const flow=this.generateFlow(calleeSlice,slice,calleeTrans,trans);this.model_.flowEvents.push(flow);trans.slice=slice;if(trans.is_reply_transaction){slice.title='binder reply';this.addSyncTransNeedingCompletion(trans.transaction_key,[calleeTrans,trans]);}else{slice.title='binder reply';const trans1=new BinderTransaction(event,pid,ts,kthread);slice=kthread.thread.sliceGroup.pushCompleteSlice('binder','binder transaction',recvTs,(ts-recvTs),0,0,args);if(!trans.expect_reply){slice.title='binder transaction async';slice.duration=.03;}else{}
-trans1.slice=slice;this.addRecursiveSyncTransNeedingCompletion(pid,[calleeTrans,trans]);this.addTransactionWaitingForRecv(trans.transaction_key,trans1);}
-return true;},getRecursiveTransactionNeedingCompletion(pid){if(this.recursiveSyncTransWaitingCompletion_ByPID[pid]===undefined){return false;}
-const len=this.recursiveSyncTransWaitingCompletion_ByPID[pid].length;if(len===0)return false;return this.recursiveSyncTransWaitingCompletion_ByPID[pid][len-1];},addRecursiveSyncTransNeedingCompletion(pid,tuple){if(this.recursiveSyncTransWaitingCompletion_ByPID[pid]===undefined){this.recursiveSyncTransWaitingCompletion_ByPID[pid]=[];}
-this.recursiveSyncTransWaitingCompletion_ByPID[pid].push(tuple);},removeRecursiveTransaction(pid){const len=this.recursiveSyncTransWaitingCompletion_ByPID[pid].length;if(len===0){delete this.recursiveSyncTransWaitingCompletion_ByPID[pid];return;}
-this.recursiveSyncTransWaitingCompletion_ByPID[pid].splice(len-1,1);},setCurrentReceiveOnPID(pid,tuple){if(this.receivedTransWaitingConversion[pid]===undefined){this.receivedTransWaitingConversion[pid]=[];}
-this.receivedTransWaitingConversion[pid].push(tuple);},getPriorReceiveOnPID(pid){if(this.receivedTransWaitingConversion[pid]===undefined){return false;}
-const len=this.receivedTransWaitingConversion[pid].length;if(len===0)return false;return this.receivedTransWaitingConversion[pid].splice(len-1,1)[0];},addSyncTransNeedingCompletion(transactionkey,tuple){const dict=this.syncTransWaitingCompletion;dict[transactionkey]=tuple;},getSyncTransNeedsCompletion(transactionkey){const ret=this.syncTransWaitingCompletion[transactionkey];if(ret===undefined)return false;delete this.syncTransWaitingCompletion[transactionkey];return ret;},getTransactionWaitingForRecv(transactionkey){const ret=this.transWaitingRecv[transactionkey];if(ret===undefined)return false;delete this.transWaitingRecv[transactionkey];return ret;},addTransactionWaitingForRecv(transactionkey,transaction){this.transWaitingRecv[transactionkey]=transaction;},generateFlow(from,to,fromTrans,toTrans){const title='Transaction from : '+
-this.pid2name(fromTrans.calling_pid)+' From PID: '+fromTrans.calling_pid+' to pid: '+
-toTrans.calling_pid+' Thread Name: '+this.pid2name(toTrans.calling_pid);const ts=from.start;const flow=new tr.model.FlowEvent('binder','binder',title,1,ts,[]);flow.startSlice=from;flow.endSlice=to;flow.start=from.start;flow.duration=to.start-ts;from.outFlowEvents.push(flow);to.inFlowEvents.push(flow);return flow;},generateArgsForSlice(tgid,pid,name,kthread){return{'Thread Name':name,pid,'gid':tgid};},pid2name(pid){return this.kthreadlookup[pid];},doNameMappings(pid,tgid,name){this.registerPidName(pid,name);this.registerPidName(tgid,name);},registerPidName(pid,name){if(this.pid2name(pid)===undefined){this.kthreadlookup[pid]=name;}}};Parser.register(BinderParser);return{BinderParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function BusParser(importer){Parser.call(this,importer);importer.registerEventHandler('memory_bus_usage',BusParser.prototype.traceMarkWriteBusEvent.bind(this));this.model_=importer.model_;this.ppids_={};}
-BusParser.prototype={__proto__:Parser.prototype,traceMarkWriteBusEvent(eventName,cpuNumber,pid,ts,eventBase,threadName){const re=new RegExp('bus=(\\S+) rw_bytes=(\\d+) r_bytes=(\\d+) '+'w_bytes=(\\d+) cycles=(\\d+) ns=(\\d+)');const event=re.exec(eventBase.details);const name=event[1];const rwBytes=parseInt(event[2]);const rBytes=parseInt(event[3]);const wBytes=parseInt(event[4]);const cycles=parseInt(event[5]);const ns=parseInt(event[6]);const sec=tr.b.convertUnit(ns,tr.b.UnitPrefixScale.METRIC.NANO,tr.b.UnitPrefixScale.METRIC.NONE);const readBandwidthInBps=rBytes/sec;const readBandwidthInMiBps=tr.b.convertUnit(readBandwidthInBps,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI);const writeBandwidthInBps=wBytes/sec;const writeBandwidthInMiBps=tr.b.convertUnit(writeBandwidthInBps,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI);let ctr=this.model_.kernel.getOrCreateCounter(null,'bus '+name+' read');if(ctr.numSeries===0){ctr.addSeries(new tr.model.CounterSeries('value',ColorScheme.getColorIdForGeneralPurposeString(ctr.name+'.'+'value')));}
-ctr.series.forEach(function(series){series.addCounterSample(ts,readBandwidthInMiBps);});ctr=this.model_.kernel.getOrCreateCounter(null,'bus '+name+' write');if(ctr.numSeries===0){ctr.addSeries(new tr.model.CounterSeries('value',ColorScheme.getColorIdForGeneralPurposeString(ctr.name+'.'+'value')));}
-ctr.series.forEach(function(series){series.addCounterSample(ts,writeBandwidthInMiBps);});return true;}};Parser.register(BusParser);return{BusParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function ClockParser(importer){Parser.call(this,importer);importer.registerEventHandler('clock_set_rate',ClockParser.prototype.traceMarkWriteClockEvent.bind(this));importer.registerEventHandler('clk_set_rate',ClockParser.prototype.traceMarkWriteClkEvent.bind(this));importer.registerEventHandler('clock_enable',ClockParser.prototype.traceMarkWriteClockOnOffEvent.bind(this));importer.registerEventHandler('clock_disable',ClockParser.prototype.traceMarkWriteClockOnOffEvent.bind(this));importer.registerEventHandler('clk_enable',ClockParser.prototype.traceMarkWriteClkOnEvent.bind(this));importer.registerEventHandler('clk_disable',ClockParser.prototype.traceMarkWriteClkOffEvent.bind(this));this.model_=importer.model_;this.ppids_={};}
-ClockParser.prototype={__proto__:Parser.prototype,clockMark(name,subName,value,ts){const ctr=this.model_.kernel.getOrCreateCounter(null,name+' '+subName);if(ctr.numSeries===0){ctr.addSeries(new tr.model.CounterSeries('value',ColorScheme.getColorIdForGeneralPurposeString(ctr.name+'.'+'value')));}
-ctr.series.forEach(function(series){series.addCounterSample(ts,value);});},traceMarkWriteClockEvent(eventName,cpuNumber,pid,ts,eventBase,threadName){const event=/(\S+) state=(\d+)/.exec(eventBase.details);const name=event[1];const rate=parseInt(event[2]);this.clockMark(name,'Frequency',rate,ts);return true;},traceMarkWriteClkEvent(eventName,cpuNumber,pid,ts,eventBase,threadName){const event=/(\S+) (\d+)/.exec(eventBase.details);const name=event[1];const rate=parseInt(event[2]);this.clockMark(name,'Frequency',rate,ts);return true;},traceMarkWriteClockOnOffEvent(eventName,cpuNumber,pid,ts,eventBase,threadName){const event=/(\S+) state=(\d+)/.exec(eventBase.details);const name=event[1];const state=parseInt(event[2]);this.clockMark(name,'State',state,ts);return true;},traceMarkWriteClkOnEvent(eventName,cpuNumber,pid,ts,eventBase,threadName){const event=/\S+/.exec(eventBase.details);const name=event[0];this.clockMark(name,'State',1,ts);return true;},traceMarkWriteClkOffEvent(eventName,cpuNumber,pid,ts,eventBase,threadName){const event=/\S+/.exec(eventBase.details);const name=event[0];this.clockMark(name,'State',0,ts);return true;}};Parser.register(ClockParser);return{ClockParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function CpufreqParser(importer){Parser.call(this,importer);importer.registerEventHandler('cpufreq_interactive_up',CpufreqParser.prototype.cpufreqUpDownEvent.bind(this));importer.registerEventHandler('cpufreq_interactive_down',CpufreqParser.prototype.cpufreqUpDownEvent.bind(this));importer.registerEventHandler('cpufreq_interactive_already',CpufreqParser.prototype.cpufreqTargetEvent.bind(this));importer.registerEventHandler('cpufreq_interactive_notyet',CpufreqParser.prototype.cpufreqTargetEvent.bind(this));importer.registerEventHandler('cpufreq_interactive_setspeed',CpufreqParser.prototype.cpufreqTargetEvent.bind(this));importer.registerEventHandler('cpufreq_interactive_target',CpufreqParser.prototype.cpufreqTargetEvent.bind(this));importer.registerEventHandler('cpufreq_interactive_boost',CpufreqParser.prototype.cpufreqBoostUnboostEvent.bind(this));importer.registerEventHandler('cpufreq_interactive_unboost',CpufreqParser.prototype.cpufreqBoostUnboostEvent.bind(this));}
-function splitData(input){const data={};const args=input.split(/\s+/);const len=args.length;for(let i=0;i<len;i++){const item=args[i].split('=');data[item[0]]=parseInt(item[1]);}
-return data;}
-CpufreqParser.prototype={__proto__:Parser.prototype,cpufreqSlice(ts,eventName,cpu,args){const kthread=this.importer.getOrCreatePseudoThread('cpufreq');kthread.openSlice=eventName;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},cpufreqBoostSlice(ts,eventName,args){const kthread=this.importer.getOrCreatePseudoThread('cpufreq_boost');kthread.openSlice=eventName;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},cpufreqUpDownEvent(eventName,cpuNumber,pid,ts,eventBase){const data=splitData(eventBase.details);this.cpufreqSlice(ts,eventName,data.cpu,data);return true;},cpufreqTargetEvent(eventName,cpuNumber,pid,ts,eventBase){const data=splitData(eventBase.details);this.cpufreqSlice(ts,eventName,data.cpu,data);return true;},cpufreqBoostUnboostEvent(eventName,cpuNumber,pid,ts,eventBase){this.cpufreqBoostSlice(ts,eventName,{type:eventBase.details});return true;}};Parser.register(CpufreqParser);return{CpufreqParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function DiskParser(importer){Parser.call(this,importer);importer.registerEventHandler('f2fs_write_begin',DiskParser.prototype.f2fsWriteBeginEvent.bind(this));importer.registerEventHandler('f2fs_write_end',DiskParser.prototype.f2fsWriteEndEvent.bind(this));importer.registerEventHandler('f2fs_sync_file_enter',DiskParser.prototype.f2fsSyncFileEnterEvent.bind(this));importer.registerEventHandler('f2fs_sync_file_exit',DiskParser.prototype.f2fsSyncFileExitEvent.bind(this));importer.registerEventHandler('ext4_sync_file_enter',DiskParser.prototype.ext4SyncFileEnterEvent.bind(this));importer.registerEventHandler('ext4_sync_file_exit',DiskParser.prototype.ext4SyncFileExitEvent.bind(this));importer.registerEventHandler('ext4_da_write_begin',DiskParser.prototype.ext4WriteBeginEvent.bind(this));importer.registerEventHandler('ext4_da_write_end',DiskParser.prototype.ext4WriteEndEvent.bind(this));importer.registerEventHandler('block_rq_issue',DiskParser.prototype.blockRqIssueEvent.bind(this));importer.registerEventHandler('block_rq_complete',DiskParser.prototype.blockRqCompleteEvent.bind(this));}
-DiskParser.prototype={__proto__:Parser.prototype,openAsyncSlice(ts,category,threadName,pid,key,name){const kthread=this.importer.getOrCreateKernelThread(category+':'+threadName,pid);const asyncSliceConstructor=tr.model.AsyncSlice.subTypes.getConstructor(category,name);const slice=new asyncSliceConstructor(category,name,ColorScheme.getColorIdForGeneralPurposeString(name),ts);slice.startThread=kthread.thread;if(!kthread.openAsyncSlices){kthread.openAsyncSlices={};}
-kthread.openAsyncSlices[key]=slice;},closeAsyncSlice(ts,category,threadName,pid,key,args){const kthread=this.importer.getOrCreateKernelThread(category+':'+threadName,pid);if(kthread.openAsyncSlices){const slice=kthread.openAsyncSlices[key];if(slice){slice.duration=ts-slice.start;slice.args=args;slice.endThread=kthread.thread;slice.subSlices=[new tr.model.AsyncSlice(category,slice.title,slice.colorId,slice.start,slice.args,slice.duration)];kthread.thread.asyncSliceGroup.push(slice);delete kthread.openAsyncSlices[key];}}},f2fsWriteBeginEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev = \((\d+,\d+)\), ino = (\d+), pos = (\d+), len = (\d+), flags = (\d+)/.exec(eventBase.details);if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const pos=parseInt(event[3]);const len=parseInt(event[4]);const key=device+'-'+inode+'-'+pos+'-'+len;this.openAsyncSlice(ts,'f2fs',eventBase.threadName,eventBase.pid,key,'f2fs_write');return true;},f2fsWriteEndEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev = \((\d+,\d+)\), ino = (\d+), pos = (\d+), len = (\d+), copied = (\d+)/.exec(eventBase.details);if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const pos=parseInt(event[3]);const len=parseInt(event[4]);const error=parseInt(event[5])!==len;const key=device+'-'+inode+'-'+pos+'-'+len;this.closeAsyncSlice(ts,'f2fs',eventBase.threadName,eventBase.pid,key,{device,inode,error});return true;},ext4WriteBeginEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev (\d+,\d+) ino (\d+) pos (\d+) len (\d+) flags (\d+)/.exec(eventBase.details);if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const pos=parseInt(event[3]);const len=parseInt(event[4]);const key=device+'-'+inode+'-'+pos+'-'+len;this.openAsyncSlice(ts,'ext4',eventBase.threadName,eventBase.pid,key,'ext4_write');return true;},ext4WriteEndEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev (\d+,\d+) ino (\d+) pos (\d+) len (\d+) copied (\d+)/.exec(eventBase.details);if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const pos=parseInt(event[3]);const len=parseInt(event[4]);const error=parseInt(event[5])!==len;const key=device+'-'+inode+'-'+pos+'-'+len;this.closeAsyncSlice(ts,'ext4',eventBase.threadName,eventBase.pid,key,{device,inode,error});return true;},f2fsSyncFileEnterEvent(eventName,cpuNumber,pid,ts,eventBase){const event=new RegExp('dev = \\((\\d+,\\d+)\\), ino = (\\d+), pino = (\\d+), i_mode = (\\S+), '+'i_size = (\\d+), i_nlink = (\\d+), i_blocks = (\\d+), i_advise = (\\d+)').exec(eventBase.details);if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const key=device+'-'+inode;this.openAsyncSlice(ts,'f2fs',eventBase.threadName,eventBase.pid,key,'fsync');return true;},f2fsSyncFileExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=new RegExp('dev = \\((\\d+,\\d+)\\), ino = (\\d+), checkpoint is (\\S+), '+'datasync = (\\d+), ret = (\\d+)').exec(eventBase.details.replace('not needed','not_needed'));if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const error=parseInt(event[5]);const key=device+'-'+inode;this.closeAsyncSlice(ts,'f2fs',eventBase.threadName,eventBase.pid,key,{device,inode,error});return true;},ext4SyncFileEnterEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev (\d+,\d+) ino (\d+) parent (\d+) datasync (\d+)/.exec(eventBase.details);if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const datasync=(event[4]==='1')||(event[4]===1);const key=device+'-'+inode;const action=datasync?'fdatasync':'fsync';this.openAsyncSlice(ts,'ext4',eventBase.threadName,eventBase.pid,key,action);return true;},ext4SyncFileExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev (\d+,\d+) ino (\d+) ret (\d+)/.exec(eventBase.details);if(!event)return false;const device=event[1];const inode=parseInt(event[2]);const error=parseInt(event[3]);const key=device+'-'+inode;this.closeAsyncSlice(ts,'ext4',eventBase.threadName,eventBase.pid,key,{device,inode,error});return true;},blockRqIssueEvent(eventName,cpuNumber,pid,ts,eventBase){const event=new RegExp('(\\d+,\\d+) (F)?([DWRN])(F)?(A)?(S)?(M)? '+'\\d+ \\(.*\\) (\\d+) \\+ (\\d+) \\[.*\\]').exec(eventBase.details);if(!event)return false;let action;switch(event[3]){case'D':action='discard';break;case'W':action='write';break;case'R':action='read';break;case'N':action='none';break;default:action='unknown';break;}
-if(event[2]){action+=' flush';}
-if(event[4]==='F'){action+=' fua';}
-if(event[5]==='A'){action+=' ahead';}
-if(event[6]==='S'){action+=' sync';}
-if(event[7]==='M'){action+=' meta';}
-const device=event[1];const sector=parseInt(event[8]);const numSectors=parseInt(event[9]);const key=device+'-'+sector+'-'+numSectors;this.openAsyncSlice(ts,'block',eventBase.threadName,eventBase.pid,key,action);return true;},blockRqCompleteEvent(eventName,cpuNumber,pid,ts,eventBase){const event=new RegExp('(\\d+,\\d+) (F)?([DWRN])(F)?(A)?(S)?(M)? '+'\\(.*\\) (\\d+) \\+ (\\d+) \\[(.*)\\]').exec(eventBase.details);if(!event)return false;const device=event[1];const sector=parseInt(event[8]);const numSectors=parseInt(event[9]);const error=parseInt(event[10]);const key=device+'-'+sector+'-'+numSectors;this.closeAsyncSlice(ts,'block',eventBase.threadName,eventBase.pid,key,{device,sector,numSectors,error});return true;}};Parser.register(DiskParser);return{DiskParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function DrmParser(importer){Parser.call(this,importer);importer.registerEventHandler('drm_vblank_event',DrmParser.prototype.vblankEvent.bind(this));}
-DrmParser.prototype={__proto__:Parser.prototype,drmVblankSlice(ts,eventName,args){const kthread=this.importer.getOrCreatePseudoThread('drm_vblank');kthread.openSlice=eventName;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},vblankEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/crtc=(\d+), seq=(\d+)/.exec(eventBase.details);if(!event)return false;const crtc=parseInt(event[1]);const seq=parseInt(event[2]);this.drmVblankSlice(ts,'vblank:'+crtc,{crtc,seq});return true;}};Parser.register(DrmParser);return{DrmParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function ExynosParser(importer){Parser.call(this,importer);importer.registerEventHandler('exynos_busfreq_target_int',ExynosParser.prototype.busfreqTargetIntEvent.bind(this));importer.registerEventHandler('exynos_busfreq_target_mif',ExynosParser.prototype.busfreqTargetMifEvent.bind(this));importer.registerEventHandler('exynos_page_flip_state',ExynosParser.prototype.pageFlipStateEvent.bind(this));}
-ExynosParser.prototype={__proto__:Parser.prototype,exynosBusfreqSample(name,ts,frequency){const targetCpu=this.importer.getOrCreateCpu(0);const counter=targetCpu.getOrCreateCounter('',name);if(counter.numSeries===0){counter.addSeries(new tr.model.CounterSeries('frequency',ColorScheme.getColorIdForGeneralPurposeString(counter.name+'.'+'frequency')));}
-counter.series.forEach(function(series){series.addCounterSample(ts,frequency);});},busfreqTargetIntEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/frequency=(\d+)/.exec(eventBase.details);if(!event)return false;this.exynosBusfreqSample('INT Frequency',ts,parseInt(event[1]));return true;},busfreqTargetMifEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/frequency=(\d+)/.exec(eventBase.details);if(!event)return false;this.exynosBusfreqSample('MIF Frequency',ts,parseInt(event[1]));return true;},exynosPageFlipStateOpenSlice(ts,pipe,fb,state){const kthread=this.importer.getOrCreatePseudoThread('exynos_flip_state (pipe:'+pipe+', fb:'+fb+')');kthread.openSliceTS=ts;kthread.openSlice=state;},exynosPageFlipStateCloseSlice(ts,pipe,fb,args){const kthread=this.importer.getOrCreatePseudoThread('exynos_flip_state (pipe:'+pipe+', fb:'+fb+')');if(kthread.openSlice){const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),kthread.openSliceTS,args,ts-kthread.openSliceTS);kthread.thread.sliceGroup.pushSlice(slice);}
-kthread.openSlice=undefined;},pageFlipStateEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/pipe=(\d+), fb=(\d+), state=(.*)/.exec(eventBase.details);if(!event)return false;const pipe=parseInt(event[1]);const fb=parseInt(event[2]);const state=event[3];this.exynosPageFlipStateCloseSlice(ts,pipe,fb,{pipe,fb});if(state!=='flipped'){this.exynosPageFlipStateOpenSlice(ts,pipe,fb,state);}
-return true;}};Parser.register(ExynosParser);return{ExynosParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const Parser=tr.e.importer.linux_perf.Parser;function GestureParser(importer){Parser.call(this,importer);importer.registerEventHandler('tracing_mark_write:log',GestureParser.prototype.logEvent.bind(this));importer.registerEventHandler('tracing_mark_write:SyncInterpret',GestureParser.prototype.syncEvent.bind(this));importer.registerEventHandler('tracing_mark_write:HandleTimer',GestureParser.prototype.timerEvent.bind(this));}
-GestureParser.prototype={__proto__:Parser.prototype,gestureOpenSlice(title,ts,opt_args){const thread=this.importer.getOrCreatePseudoThread('gesture').thread;thread.sliceGroup.beginSlice('touchpad_gesture',title,ts,opt_args);},gestureCloseSlice(title,ts){const thread=this.importer.getOrCreatePseudoThread('gesture').thread;if(thread.sliceGroup.openSliceCount){const slice=thread.sliceGroup.mostRecentlyOpenedPartialSlice;if(slice.title!==title){this.importer.model.importWarning({type:'title_match_error',message:'Titles do not match. Title is '+
-slice.title+' in openSlice, and is '+
-title+' in endSlice'});}else{thread.sliceGroup.endSlice(ts);}}},logEvent(eventName,cpuNumber,pid,ts,eventBase){const innerEvent=/^\s*(\w+):\s*(\w+)$/.exec(eventBase.details);switch(innerEvent[1]){case'start':this.gestureOpenSlice('GestureLog',ts,{name:innerEvent[2]});break;case'end':this.gestureCloseSlice('GestureLog',ts);}
-return true;},syncEvent(eventName,cpuNumber,pid,ts,eventBase){const innerEvent=/^\s*(\w+):\s*(\w+)$/.exec(eventBase.details);switch(innerEvent[1]){case'start':this.gestureOpenSlice('SyncInterpret',ts,{interpreter:innerEvent[2]});break;case'end':this.gestureCloseSlice('SyncInterpret',ts);}
-return true;},timerEvent(eventName,cpuNumber,pid,ts,eventBase){const innerEvent=/^\s*(\w+):\s*(\w+)$/.exec(eventBase.details);switch(innerEvent[1]){case'start':this.gestureOpenSlice('HandleTimer',ts,{interpreter:innerEvent[2]});break;case'end':this.gestureCloseSlice('HandleTimer',ts);}
-return true;}};Parser.register(GestureParser);return{GestureParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function I2cParser(importer){Parser.call(this,importer);importer.registerEventHandler('i2c_write',I2cParser.prototype.i2cWriteEvent.bind(this));importer.registerEventHandler('i2c_read',I2cParser.prototype.i2cReadEvent.bind(this));importer.registerEventHandler('i2c_reply',I2cParser.prototype.i2cReplyEvent.bind(this));importer.registerEventHandler('i2c_result',I2cParser.prototype.i2cResultEvent.bind(this));}
-const i2cWriteReplyRE=new RegExp('i2c-(\\d+) #(\\d+) a=([\\da-fA-F]+) f=([\\da-fA-F]+) l=(\\d+) '+'(\\[[\\da-fA-F\\-]+\\])');const i2cReadRE=/i2c-(\d+) #(\d+) a=([\da-fA-F]+) f=([\da-fA-F]+) l=(\d+)/;const i2cResultRE=/i2c-(\d+) n=(\d+) ret=(\d+)/;I2cParser.prototype={__proto__:Parser.prototype,i2cWriteEvent(eventName,cpuNumber,pid,ts,eventBase){const event=i2cWriteReplyRE.exec(eventBase.details);if(!event)return false;const adapterNumber=parseInt(event[1]);const messageNumber=event[2];const address=event[3];const flags=event[4];const dataLength=event[5];const data=event[6];const thread=this.importer.getOrCreatePseudoThread('i2c adapter '+adapterNumber);pushLastSliceIfNeeded(thread,event[1],ts);thread.lastEntryTitle='i2c write';thread.lastEntryTs=ts;thread.lastEntryArgs={'Message number':messageNumber,'Address':address,'Flags':flags,'Data Length':dataLength,'Data':data};return true;},i2cReadEvent(eventName,cpuNumber,pid,ts,eventBase){const event=i2cReadRE.exec(eventBase.details);if(!event)return false;const adapterNumber=parseInt(event[1]);const messageNumber=event[2];const address=event[3];const flags=event[4];const dataLength=event[5];const thread=this.importer.getOrCreatePseudoThread('i2c adapter '+adapterNumber);pushLastSliceIfNeeded(thread,event[1],ts);thread.lastEntryTitle='i2c read';thread.lastEntryTs=ts;thread.lastEntryArgs={'Message number':messageNumber,'Address':address,'Flags':flags,'Data Length':dataLength};return true;},i2cReplyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=i2cWriteReplyRE.exec(eventBase.details);if(!event)return false;const adapterNumber=parseInt(event[1]);const messageNumber=event[2];const address=event[3];const flags=event[4];const dataLength=event[5];const data=event[6];const thread=this.importer.getOrCreatePseudoThread('i2c adapter '+adapterNumber);pushLastSliceIfNeeded(thread,event[1],ts);thread.lastEntryTitle='i2c reply';thread.lastEntryTs=ts;thread.lastEntryArgs={'Message number':messageNumber,'Address':address,'Flags':flags,'Data Length':dataLength,'Data':data};return true;},i2cResultEvent(eventName,cpuNumber,pid,ts,eventBase){const event=i2cResultRE.exec(eventBase.details);if(!event)return false;const adapterNumber=parseInt(event[1]);const numMessages=event[2];const ret=event[3];const thread=this.importer.getOrCreatePseudoThread('i2c adapter '+adapterNumber);const args=thread.lastEntryArgs;if(args!==undefined){args['Number of messages']=numMessages;args.Return=ret;}
-pushLastSliceIfNeeded(thread,event[1],ts);thread.lastEntryTitle=undefined;thread.lastEntryTs=undefined;thread.lastEntryArgs=undefined;return true;},};function pushLastSliceIfNeeded(thread,id,currentTs){if(thread.lastEntryTs!==undefined){const duration=currentTs-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('',thread.lastEntryTitle,ColorScheme.getColorIdForGeneralPurposeString(id),thread.lastEntryTs,thread.lastEntryArgs,duration);thread.thread.sliceGroup.pushSlice(slice);}}
-Parser.register(I2cParser);return{I2cParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function I915Parser(importer){Parser.call(this,importer);importer.registerEventHandler('i915_gem_object_create',I915Parser.prototype.gemObjectCreateEvent.bind(this));importer.registerEventHandler('i915_gem_object_bind',I915Parser.prototype.gemObjectBindEvent.bind(this));importer.registerEventHandler('i915_gem_object_unbind',I915Parser.prototype.gemObjectBindEvent.bind(this));importer.registerEventHandler('i915_gem_object_change_domain',I915Parser.prototype.gemObjectChangeDomainEvent.bind(this));importer.registerEventHandler('i915_gem_object_pread',I915Parser.prototype.gemObjectPreadWriteEvent.bind(this));importer.registerEventHandler('i915_gem_object_pwrite',I915Parser.prototype.gemObjectPreadWriteEvent.bind(this));importer.registerEventHandler('i915_gem_object_fault',I915Parser.prototype.gemObjectFaultEvent.bind(this));importer.registerEventHandler('i915_gem_object_clflush',I915Parser.prototype.gemObjectDestroyEvent.bind(this));importer.registerEventHandler('i915_gem_object_destroy',I915Parser.prototype.gemObjectDestroyEvent.bind(this));importer.registerEventHandler('i915_gem_ring_dispatch',I915Parser.prototype.gemRingDispatchEvent.bind(this));importer.registerEventHandler('i915_gem_ring_flush',I915Parser.prototype.gemRingFlushEvent.bind(this));importer.registerEventHandler('i915_gem_request',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_add',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_complete',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_retire',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_wait_begin',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_request_wait_end',I915Parser.prototype.gemRequestEvent.bind(this));importer.registerEventHandler('i915_gem_ring_wait_begin',I915Parser.prototype.gemRingWaitEvent.bind(this));importer.registerEventHandler('i915_gem_ring_wait_end',I915Parser.prototype.gemRingWaitEvent.bind(this));importer.registerEventHandler('i915_reg_rw',I915Parser.prototype.regRWEvent.bind(this));importer.registerEventHandler('i915_flip_request',I915Parser.prototype.flipEvent.bind(this));importer.registerEventHandler('i915_flip_complete',I915Parser.prototype.flipEvent.bind(this));importer.registerEventHandler('intel_gpu_freq_change',I915Parser.prototype.gpuFrequency.bind(this));}
-I915Parser.prototype={__proto__:Parser.prototype,i915FlipOpenSlice(ts,obj,plane){const kthread=this.importer.getOrCreatePseudoThread('i915_flip');kthread.openSliceTS=ts;kthread.openSlice='flip:'+obj+'/'+plane;},i915FlipCloseSlice(ts,args){const kthread=this.importer.getOrCreatePseudoThread('i915_flip');if(kthread.openSlice){const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),kthread.openSliceTS,args,ts-kthread.openSliceTS);kthread.thread.sliceGroup.pushSlice(slice);}
-kthread.openSlice=undefined;},i915GemObjectSlice(ts,eventName,obj,args){const kthread=this.importer.getOrCreatePseudoThread('i915_gem');kthread.openSlice=eventName+':'+obj;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},i915GemRingSlice(ts,eventName,dev,ring,args){const kthread=this.importer.getOrCreatePseudoThread('i915_gem_ring');kthread.openSlice=eventName+':'+dev+'.'+ring;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},i915RegSlice(ts,eventName,reg,args){const kthread=this.importer.getOrCreatePseudoThread('i915_reg');kthread.openSlice=eventName+':'+reg;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},i915FreqChangeSlice(ts,eventName,args){const kthread=this.importer.getOrCreatePseudoThread('i915_gpu_freq');kthread.openSlice=eventName;const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),ts,args,0);kthread.thread.sliceGroup.pushSlice(slice);},gemObjectCreateEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), size=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const size=parseInt(event[2]);this.i915GemObjectSlice(ts,eventName,obj,{obj,size});return true;},gemObjectBindEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), offset=(\w+), size=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const offset=event[2];const size=parseInt(event[3]);this.i915ObjectGemSlice(ts,eventName+':'+obj,{obj,offset,size});return true;},gemObjectChangeDomainEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), read=(\w+=>\w+), write=(\w+=>\w+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const read=event[2];const write=event[3];this.i915GemObjectSlice(ts,eventName,obj,{obj,read,write});return true;},gemObjectPreadWriteEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), offset=(\d+), len=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const offset=parseInt(event[2]);const len=parseInt(event[3]);this.i915GemObjectSlice(ts,eventName,obj,{obj,offset,len});return true;},gemObjectFaultEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+), (\w+) index=(\d+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];const type=event[2];const index=parseInt(event[3]);this.i915GemObjectSlice(ts,eventName,obj,{obj,type,index});return true;},gemObjectDestroyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/obj=(\w+)/.exec(eventBase.details);if(!event)return false;const obj=event[1];this.i915GemObjectSlice(ts,eventName,obj,{obj});return true;},gemRingDispatchEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\d+), seqno=(\d+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);const seqno=parseInt(event[3]);this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring,seqno});return true;},gemRingFlushEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\w+), invalidate=(\w+), flush=(\w+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);const invalidate=event[3];const flush=event[4];this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring,invalidate,flush});return true;},gemRequestEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\d+), seqno=(\d+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);const seqno=parseInt(event[3]);this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring,seqno});return true;},gemRingWaitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/dev=(\d+), ring=(\d+)/.exec(eventBase.details);if(!event)return false;const dev=parseInt(event[1]);const ring=parseInt(event[2]);this.i915GemRingSlice(ts,eventName,dev,ring,{dev,ring});return true;},regRWEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/(\w+) reg=(\w+), len=(\d+), val=(\(\w+, \w+\))/.exec(eventBase.details);if(!event)return false;const rw=event[1];const reg=event[2];const len=event[3];const data=event[3];this.i915RegSlice(ts,rw,reg,{rw,reg,len,data});return true;},flipEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/plane=(\d+), obj=(\w+)/.exec(eventBase.details);if(!event)return false;const plane=parseInt(event[1]);const obj=event[2];if(eventName==='i915_flip_request'){this.i915FlipOpenSlice(ts,obj,plane);}else{this.i915FlipCloseSlice(ts,{obj,plane});}
-return true;},gpuFrequency(eventName,cpuNumver,pid,ts,eventBase){const event=/new_freq=(\d+)/.exec(eventBase.details);if(!event)return false;const freq=parseInt(event[1]);this.i915FreqChangeSlice(ts,eventName,{freq});return true;}};Parser.register(I915Parser);return{I915Parser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function IrqParser(importer){Parser.call(this,importer);importer.registerEventHandler('irq_handler_entry',IrqParser.prototype.irqHandlerEntryEvent.bind(this));importer.registerEventHandler('irq_handler_exit',IrqParser.prototype.irqHandlerExitEvent.bind(this));importer.registerEventHandler('softirq_raise',IrqParser.prototype.softirqRaiseEvent.bind(this));importer.registerEventHandler('softirq_entry',IrqParser.prototype.softirqEntryEvent.bind(this));importer.registerEventHandler('softirq_exit',IrqParser.prototype.softirqExitEvent.bind(this));importer.registerEventHandler('ipi_entry',IrqParser.prototype.ipiEntryEvent.bind(this));importer.registerEventHandler('ipi_exit',IrqParser.prototype.ipiExitEvent.bind(this));importer.registerEventHandler('preempt_disable',IrqParser.prototype.preemptStartEvent.bind(this));importer.registerEventHandler('preempt_enable',IrqParser.prototype.preemptEndEvent.bind(this));importer.registerEventHandler('irq_disable',IrqParser.prototype.irqoffStartEvent.bind(this));importer.registerEventHandler('irq_enable',IrqParser.prototype.irqoffEndEvent.bind(this));}
-const irqHandlerEntryRE=/irq=(\d+) name=(.+)/;const irqHandlerExitRE=/irq=(\d+) ret=(.+)/;const softirqRE=/vec=(\d+) \[action=(.+)\]/;const ipiHandlerExitRE=/\((.+)\)/;const preemptirqRE=/caller=(.+) parent=(.+)/;IrqParser.prototype={__proto__:Parser.prototype,irqHandlerEntryEvent(eventName,cpuNumber,pid,ts,eventBase){const event=irqHandlerEntryRE.exec(eventBase.details);if(!event)return false;const irq=parseInt(event[1]);const name=event[2];const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);thread.lastEntryTs=ts;thread.irqName=name;return true;},irqHandlerExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=irqHandlerExitRE.exec(eventBase.details);if(!event)return false;const irq=parseInt(event[1]);const ret=event[2];const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('','IRQ ('+thread.irqName+')',ColorScheme.getColorIdForGeneralPurposeString(event[1]),thread.lastEntryTs,{ret},duration);thread.thread.sliceGroup.pushSlice(slice);}
-thread.lastEntryTs=undefined;thread.irqName=undefined;return true;},softirqRaiseEvent(eventName,cpuNumber,pid,ts,eventBase){return true;},softirqEntryEvent(eventName,cpuNumber,pid,ts,eventBase){const event=softirqRE.exec(eventBase.details);if(!event)return false;const action=event[2];const thread=this.importer.getOrCreatePseudoThread('softirq cpu '+cpuNumber);thread.lastEntryTs=ts;return true;},softirqExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=softirqRE.exec(eventBase.details);if(!event)return false;const vec=parseInt(event[1]);const action=event[2];const thread=this.importer.getOrCreatePseudoThread('softirq cpu '+cpuNumber);if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('',action,ColorScheme.getColorIdForGeneralPurposeString(event[1]),thread.lastEntryTs,{vec},duration);thread.thread.sliceGroup.pushSlice(slice);}
-thread.lastEntryTs=undefined;return true;},ipiEntryEvent(eventName,cpuNumber,pid,ts,eventBase){const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);thread.lastEntryTs=ts;return true;},ipiExitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=ipiHandlerExitRE.exec(eventBase.details);if(!event)return false;const ipiName=event[1];const thread=this.importer.getOrCreatePseudoThread('irqs cpu '+cpuNumber);if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('','IPI ('+ipiName+')',ColorScheme.getColorIdForGeneralPurposeString(ipiName),thread.lastEntryTs,{},duration);thread.thread.sliceGroup.pushSlice(slice);}
-thread.lastEntryTs=undefined;return true;},preemptStartEvent(eventName,cpuNumber,pid,ts,eventBase){const event=preemptirqRE.exec(eventBase.details);if(!event)return false;const thread=this.importer.getOrCreatePseudoThread('preempt cpu '+cpuNumber);thread.lastEntryTs=ts;thread.preemptStartCaller=event[1];thread.preemptStartParent=event[2];return true;},preemptEndEvent(eventName,cpuNumber,pid,ts,eventBase){const event=preemptirqRE.exec(eventBase.details);if(!event)return false;const thread=this.importer.getOrCreatePseudoThread('preempt cpu '+cpuNumber);thread.preemptEndCaller=event[1];thread.preemptEndParent=event[2];if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('',thread.preemptStartParent+': '+thread.preemptStartCaller,ColorScheme.getColorIdForGeneralPurposeString(thread.preemptEndCaller),thread.lastEntryTs,{},duration);thread.thread.sliceGroup.pushSlice(slice);}
-thread.lastEntryTs=undefined;return true;},irqoffStartEvent(eventName,cpuNumber,pid,ts,eventBase){const event=preemptirqRE.exec(eventBase.details);if(!event)return false;const thread=this.importer.getOrCreatePseudoThread('irqoff cpu '+cpuNumber);thread.lastEntryTs=ts;thread.irqoffStartCaller=event[1];thread.irqoffStartParent=event[2];return true;},irqoffEndEvent(eventName,cpuNumber,pid,ts,eventBase){const event=preemptirqRE.exec(eventBase.details);if(!event)return false;const thread=this.importer.getOrCreatePseudoThread('irqoff cpu '+cpuNumber);thread.irqoffEndCaller=event[1];thread.irqoffEndParent=event[2];if(thread.lastEntryTs!==undefined){const duration=ts-thread.lastEntryTs;const slice=new tr.model.ThreadSlice('',thread.irqoffStartParent+': '+thread.irqoffStartCaller,ColorScheme.getColorIdForGeneralPurposeString(thread.irqoffEndCaller),thread.lastEntryTs,{},duration);thread.thread.sliceGroup.pushSlice(slice);}
-thread.lastEntryTs=undefined;return true;}};Parser.register(IrqParser);return{IrqParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const LinuxPerfParser=tr.e.importer.linux_perf.Parser;function KernelFuncParser(importer){LinuxPerfParser.call(this,importer);importer.registerEventHandler('graph_ent',KernelFuncParser.prototype.traceKernelFuncEnterEvent.bind(this));importer.registerEventHandler('graph_ret',KernelFuncParser.prototype.traceKernelFuncReturnEvent.bind(this));this.model_=importer.model_;this.ppids_={};}
-const TestExports={};const funcEnterRE=new RegExp('func=(.+)');TestExports.funcEnterRE=funcEnterRE;KernelFuncParser.prototype={__proto__:LinuxPerfParser.prototype,traceKernelFuncEnterEvent(eventName,cpuNumber,pid,ts,eventBase){const eventData=funcEnterRE.exec(eventBase.details);if(!eventData)return false;if(eventBase.tgid===undefined){return false;}
-const tgid=parseInt(eventBase.tgid);const name=eventData[1];const thread=this.model_.getOrCreateProcess(tgid).getOrCreateThread(pid);thread.name=eventBase.threadName;const slices=thread.kernelSliceGroup;if(!slices.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'parse_error',message:'Timestamps are moving backward.'});return false;}
-const slice=slices.beginSlice(null,name,ts,{});return true;},traceKernelFuncReturnEvent(eventName,cpuNumber,pid,ts,eventBase){if(eventBase.tgid===undefined){return false;}
-const tgid=parseInt(eventBase.tgid);const thread=this.model_.getOrCreateProcess(tgid).getOrCreateThread(pid);thread.name=eventBase.threadName;const slices=thread.kernelSliceGroup;if(!slices.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'parse_error',message:'Timestamps are moving backward.'});return false;}
-if(slices.openSliceCount>0){slices.endSlice(ts);}
-return true;}};LinuxPerfParser.register(KernelFuncParser);return{KernelFuncParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function MaliParser(importer){Parser.call(this,importer);importer.registerEventHandler('mali_dvfs_event',MaliParser.prototype.dvfsEventEvent.bind(this));importer.registerEventHandler('mali_dvfs_set_clock',MaliParser.prototype.dvfsSetClockEvent.bind(this));importer.registerEventHandler('mali_dvfs_set_voltage',MaliParser.prototype.dvfsSetVoltageEvent.bind(this));this.addJMCounter('mali_hwc_MESSAGES_SENT','Messages Sent');this.addJMCounter('mali_hwc_MESSAGES_RECEIVED','Messages Received');this.addJMCycles('mali_hwc_GPU_ACTIVE','GPU Active');this.addJMCycles('mali_hwc_IRQ_ACTIVE','IRQ Active');for(let i=0;i<7;i++){const jobStr='JS'+i;const jobHWCStr='mali_hwc_'+jobStr;this.addJMCounter(jobHWCStr+'_JOBS',jobStr+' Jobs');this.addJMCounter(jobHWCStr+'_TASKS',jobStr+' Tasks');this.addJMCycles(jobHWCStr+'_ACTIVE',jobStr+' Active');this.addJMCycles(jobHWCStr+'_WAIT_READ',jobStr+' Wait Read');this.addJMCycles(jobHWCStr+'_WAIT_ISSUE',jobStr+' Wait Issue');this.addJMCycles(jobHWCStr+'_WAIT_DEPEND',jobStr+' Wait Depend');this.addJMCycles(jobHWCStr+'_WAIT_FINISH',jobStr+' Wait Finish');}
-this.addTilerCounter('mali_hwc_TRIANGLES','Triangles');this.addTilerCounter('mali_hwc_QUADS','Quads');this.addTilerCounter('mali_hwc_POLYGONS','Polygons');this.addTilerCounter('mali_hwc_POINTS','Points');this.addTilerCounter('mali_hwc_LINES','Lines');this.addTilerCounter('mali_hwc_VCACHE_HIT','VCache Hit');this.addTilerCounter('mali_hwc_VCACHE_MISS','VCache Miss');this.addTilerCounter('mali_hwc_FRONT_FACING','Front Facing');this.addTilerCounter('mali_hwc_BACK_FACING','Back Facing');this.addTilerCounter('mali_hwc_PRIM_VISIBLE','Prim Visible');this.addTilerCounter('mali_hwc_PRIM_CULLED','Prim Culled');this.addTilerCounter('mali_hwc_PRIM_CLIPPED','Prim Clipped');this.addTilerCounter('mali_hwc_WRBUF_HIT','Wrbuf Hit');this.addTilerCounter('mali_hwc_WRBUF_MISS','Wrbuf Miss');this.addTilerCounter('mali_hwc_WRBUF_LINE','Wrbuf Line');this.addTilerCounter('mali_hwc_WRBUF_PARTIAL','Wrbuf Partial');this.addTilerCounter('mali_hwc_WRBUF_STALL','Wrbuf Stall');this.addTilerCycles('mali_hwc_ACTIVE','Tiler Active');this.addTilerCycles('mali_hwc_INDEX_WAIT','Index Wait');this.addTilerCycles('mali_hwc_INDEX_RANGE_WAIT','Index Range Wait');this.addTilerCycles('mali_hwc_VERTEX_WAIT','Vertex Wait');this.addTilerCycles('mali_hwc_PCACHE_WAIT','Pcache Wait');this.addTilerCycles('mali_hwc_WRBUF_WAIT','Wrbuf Wait');this.addTilerCycles('mali_hwc_BUS_READ','Bus Read');this.addTilerCycles('mali_hwc_BUS_WRITE','Bus Write');this.addTilerCycles('mali_hwc_TILER_UTLB_STALL','Tiler UTLB Stall');this.addTilerCycles('mali_hwc_TILER_UTLB_HIT','Tiler UTLB Hit');this.addFragCycles('mali_hwc_FRAG_ACTIVE','Active');this.addFragCounter('mali_hwc_FRAG_PRIMATIVES','Primitives');this.addFragCounter('mali_hwc_FRAG_PRIMATIVES_DROPPED','Primitives Dropped');this.addFragCycles('mali_hwc_FRAG_CYCLE_DESC','Descriptor Processing');this.addFragCycles('mali_hwc_FRAG_CYCLES_PLR','PLR Processing??');this.addFragCycles('mali_hwc_FRAG_CYCLES_VERT','Vertex Processing');this.addFragCycles('mali_hwc_FRAG_CYCLES_TRISETUP','Triangle Setup');this.addFragCycles('mali_hwc_FRAG_CYCLES_RAST','Rasterization???');this.addFragCounter('mali_hwc_FRAG_THREADS','Threads');this.addFragCounter('mali_hwc_FRAG_DUMMY_THREADS','Dummy Threads');this.addFragCounter('mali_hwc_FRAG_QUADS_RAST','Quads Rast');this.addFragCounter('mali_hwc_FRAG_QUADS_EZS_TEST','Quads EZS Test');this.addFragCounter('mali_hwc_FRAG_QUADS_EZS_KILLED','Quads EZS Killed');this.addFragCounter('mali_hwc_FRAG_QUADS_LZS_TEST','Quads LZS Test');this.addFragCounter('mali_hwc_FRAG_QUADS_LZS_KILLED','Quads LZS Killed');this.addFragCycles('mali_hwc_FRAG_CYCLE_NO_TILE','No Tiles');this.addFragCounter('mali_hwc_FRAG_NUM_TILES','Tiles');this.addFragCounter('mali_hwc_FRAG_TRANS_ELIM','Transactions Eliminated');this.addComputeCycles('mali_hwc_COMPUTE_ACTIVE','Active');this.addComputeCounter('mali_hwc_COMPUTE_TASKS','Tasks');this.addComputeCounter('mali_hwc_COMPUTE_THREADS','Threads Started');this.addComputeCycles('mali_hwc_COMPUTE_CYCLES_DESC','Waiting for Descriptors');this.addTripipeCycles('mali_hwc_TRIPIPE_ACTIVE','Active');this.addArithCounter('mali_hwc_ARITH_WORDS','Instructions (/Pipes)');this.addArithCycles('mali_hwc_ARITH_CYCLES_REG','Reg scheduling stalls (/Pipes)');this.addArithCycles('mali_hwc_ARITH_CYCLES_L0','L0 cache miss stalls (/Pipes)');this.addArithCounter('mali_hwc_ARITH_FRAG_DEPEND','Frag dep check failures (/Pipes)');this.addLSCounter('mali_hwc_LS_WORDS','Instruction Words Completed');this.addLSCounter('mali_hwc_LS_ISSUES','Full Pipeline Issues');this.addLSCounter('mali_hwc_LS_RESTARTS','Restarts (unpairable insts)');this.addLSCounter('mali_hwc_LS_REISSUES_MISS','Pipeline reissue (cache miss/uTLB)');this.addLSCounter('mali_hwc_LS_REISSUES_VD','Pipeline reissue (varying data)');this.addLSCounter('mali_hwc_LS_REISSUE_ATTRIB_MISS','Pipeline reissue (attribute cache miss)');this.addLSCounter('mali_hwc_LS_REISSUE_NO_WB','Writeback not used');this.addTexCounter('mali_hwc_TEX_WORDS','Words');this.addTexCounter('mali_hwc_TEX_BUBBLES','Bubbles');this.addTexCounter('mali_hwc_TEX_WORDS_L0','Words L0');this.addTexCounter('mali_hwc_TEX_WORDS_DESC','Words Desc');this.addTexCounter('mali_hwc_TEX_THREADS','Threads');this.addTexCounter('mali_hwc_TEX_RECIRC_FMISS','Recirc due to Full Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_DESC','Recirc due to Desc Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_MULTI','Recirc due to Multipass');this.addTexCounter('mali_hwc_TEX_RECIRC_PMISS','Recirc due to Partial Cache Miss');this.addTexCounter('mali_hwc_TEX_RECIRC_CONF','Recirc due to Cache Conflict');this.addLSCCounter('mali_hwc_LSC_READ_HITS','Read Hits');this.addLSCCounter('mali_hwc_LSC_READ_MISSES','Read Misses');this.addLSCCounter('mali_hwc_LSC_WRITE_HITS','Write Hits');this.addLSCCounter('mali_hwc_LSC_WRITE_MISSES','Write Misses');this.addLSCCounter('mali_hwc_LSC_ATOMIC_HITS','Atomic Hits');this.addLSCCounter('mali_hwc_LSC_ATOMIC_MISSES','Atomic Misses');this.addLSCCounter('mali_hwc_LSC_LINE_FETCHES','Line Fetches');this.addLSCCounter('mali_hwc_LSC_DIRTY_LINE','Dirty Lines');this.addLSCCounter('mali_hwc_LSC_SNOOPS','Snoops');this.addAXICounter('mali_hwc_AXI_TLB_STALL','Address channel stall');this.addAXICounter('mali_hwc_AXI_TLB_MISS','Cache Miss');this.addAXICounter('mali_hwc_AXI_TLB_TRANSACTION','Transactions');this.addAXICounter('mali_hwc_LS_TLB_MISS','LS Cache Miss');this.addAXICounter('mali_hwc_LS_TLB_HIT','LS Cache Hit');this.addAXICounter('mali_hwc_AXI_BEATS_READ','Read Beats');this.addAXICounter('mali_hwc_AXI_BEATS_WRITE','Write Beats');this.addMMUCounter('mali_hwc_MMU_TABLE_WALK','Page Table Walks');this.addMMUCounter('mali_hwc_MMU_REPLAY_MISS','Cache Miss from Replay Buffer');this.addMMUCounter('mali_hwc_MMU_REPLAY_FULL','Replay Buffer Full');this.addMMUCounter('mali_hwc_MMU_NEW_MISS','Cache Miss on New Request');this.addMMUCounter('mali_hwc_MMU_HIT','Cache Hit');this.addMMUCycles('mali_hwc_UTLB_STALL','UTLB Stalled');this.addMMUCycles('mali_hwc_UTLB_REPLAY_MISS','UTLB Replay Miss');this.addMMUCycles('mali_hwc_UTLB_REPLAY_FULL','UTLB Replay Full');this.addMMUCycles('mali_hwc_UTLB_NEW_MISS','UTLB New Miss');this.addMMUCycles('mali_hwc_UTLB_HIT','UTLB Hit');this.addL2Counter('mali_hwc_L2_READ_BEATS','Read Beats');this.addL2Counter('mali_hwc_L2_WRITE_BEATS','Write Beats');this.addL2Counter('mali_hwc_L2_ANY_LOOKUP','Any Lookup');this.addL2Counter('mali_hwc_L2_READ_LOOKUP','Read Lookup');this.addL2Counter('mali_hwc_L2_SREAD_LOOKUP','Shareable Read Lookup');this.addL2Counter('mali_hwc_L2_READ_REPLAY','Read Replayed');this.addL2Counter('mali_hwc_L2_READ_SNOOP','Read Snoop');this.addL2Counter('mali_hwc_L2_READ_HIT','Read Cache Hit');this.addL2Counter('mali_hwc_L2_CLEAN_MISS','CleanUnique Miss');this.addL2Counter('mali_hwc_L2_WRITE_LOOKUP','Write Lookup');this.addL2Counter('mali_hwc_L2_SWRITE_LOOKUP','Shareable Write Lookup');this.addL2Counter('mali_hwc_L2_WRITE_REPLAY','Write Replayed');this.addL2Counter('mali_hwc_L2_WRITE_SNOOP','Write Snoop');this.addL2Counter('mali_hwc_L2_WRITE_HIT','Write Cache Hit');this.addL2Counter('mali_hwc_L2_EXT_READ_FULL','ExtRD with BIU Full');this.addL2Counter('mali_hwc_L2_EXT_READ_HALF','ExtRD with BIU >1/2 Full');this.addL2Counter('mali_hwc_L2_EXT_WRITE_FULL','ExtWR with BIU Full');this.addL2Counter('mali_hwc_L2_EXT_WRITE_HALF','ExtWR with BIU >1/2 Full');this.addL2Counter('mali_hwc_L2_EXT_READ','External Read (ExtRD)');this.addL2Counter('mali_hwc_L2_EXT_READ_LINE','ExtRD (linefill)');this.addL2Counter('mali_hwc_L2_EXT_WRITE','External Write (ExtWR)');this.addL2Counter('mali_hwc_L2_EXT_WRITE_LINE','ExtWR (linefill)');this.addL2Counter('mali_hwc_L2_EXT_WRITE_SMALL','ExtWR (burst size <64B)');this.addL2Counter('mali_hwc_L2_EXT_BARRIER','External Barrier');this.addL2Counter('mali_hwc_L2_EXT_AR_STALL','Address Read stalls');this.addL2Counter('mali_hwc_L2_EXT_R_BUF_FULL','Response Buffer full stalls');this.addL2Counter('mali_hwc_L2_EXT_RD_BUF_FULL','Read Data Buffer full stalls');this.addL2Counter('mali_hwc_L2_EXT_R_RAW','RAW hazard stalls');this.addL2Counter('mali_hwc_L2_EXT_W_STALL','Write Data stalls');this.addL2Counter('mali_hwc_L2_EXT_W_BUF_FULL','Write Data Buffer full');this.addL2Counter('mali_hwc_L2_EXT_R_W_HAZARD','WAW or WAR hazard stalls');this.addL2Counter('mali_hwc_L2_TAG_HAZARD','Tag hazard replays');this.addL2Cycles('mali_hwc_L2_SNOOP_FULL','Snoop buffer full');this.addL2Cycles('mali_hwc_L2_REPLAY_FULL','Replay buffer full');importer.registerEventHandler('tracing_mark_write:mali_driver',MaliParser.prototype.maliDDKEvent.bind(this));this.model_=importer.model_;}
-MaliParser.prototype={__proto__:Parser.prototype,maliDDKOpenSlice(pid,tid,ts,func,blockinfo){const thread=this.importer.model_.getOrCreateProcess(pid).getOrCreateThread(tid);const funcArgs=/^([\w\d_]*)(?:\(\))?:?\s*(.*)$/.exec(func);thread.sliceGroup.beginSlice('gpu-driver',funcArgs[1],ts,{'args':funcArgs[2],blockinfo});},maliDDKCloseSlice(pid,tid,ts,args,blockinfo){const thread=this.importer.model_.getOrCreateProcess(pid).getOrCreateThread(tid);if(!thread.sliceGroup.openSliceCount){return;}
-thread.sliceGroup.endSlice(ts);},autoDetectLineRE(line){const lineREWithThread=/^\s*\(([\w\-]*)\)\s*(\w+):\s*([\w\\\/\.\-]*@\d*):?\s*(.*)$/;if(lineREWithThread.test(line)){return lineREWithThread;}
-const lineRENoThread=/^s*()(\w+):\s*([\w\\\/.\-]*):?\s*(.*)$/;if(lineRENoThread.test(line)){return lineRENoThread;}
-return null;},lineRE:null,maliDDKEvent(eventName,cpuNumber,pid,ts,eventBase){if(this.lineRE===null){this.lineRE=this.autoDetectLineRE(eventBase.details);if(this.lineRE===null)return false;}
-const maliEvent=this.lineRE.exec(eventBase.details);const tid=(maliEvent[1]===''?'mali':maliEvent[1]);switch(maliEvent[2]){case'cros_trace_print_enter':this.maliDDKOpenSlice(pid,tid,ts,maliEvent[4],maliEvent[3]);break;case'cros_trace_print_exit':this.maliDDKCloseSlice(pid,tid,ts,[],maliEvent[3]);}
-return true;},dvfsSample(counterName,seriesName,ts,s){const value=parseInt(s);const counter=this.model_.kernel.getOrCreateCounter('DVFS',counterName);if(counter.numSeries===0){counter.addSeries(new tr.model.CounterSeries(seriesName,ColorScheme.getColorIdForGeneralPurposeString(counter.name)));}
-counter.series.forEach(function(series){series.addCounterSample(ts,value);});},dvfsEventEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/utilization=(\d+)/.exec(eventBase.details);if(!event)return false;this.dvfsSample('DVFS Utilization','utilization',ts,event[1]);return true;},dvfsSetClockEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/frequency=(\d+)/.exec(eventBase.details);if(!event)return false;this.dvfsSample('DVFS Frequency','frequency',ts,event[1]);return true;},dvfsSetVoltageEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/voltage=(\d+)/.exec(eventBase.details);if(!event)return false;this.dvfsSample('DVFS Voltage','voltage',ts,event[1]);return true;},hwcSample(cat,counterName,seriesName,ts,eventBase){const event=/val=(\d+)/.exec(eventBase.details);if(!event)return false;const value=parseInt(event[1]);const counter=this.model_.kernel.getOrCreateCounter(cat,counterName);if(counter.numSeries===0){counter.addSeries(new tr.model.CounterSeries(seriesName,ColorScheme.getColorIdForGeneralPurposeString(counter.name)));}
-counter.series.forEach(function(series){series.addCounterSample(ts,value);});return true;},jmSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:jm','JM: '+ctrName,seriesName,ts,eventBase);},addJMCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.jmSample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addJMCycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.jmSample(hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},tilerSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:tiler','Tiler: '+ctrName,seriesName,ts,eventBase);},addTilerCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.tilerSample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addTilerCycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.tilerSample(hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},fragSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:fragment','Fragment: '+ctrName,seriesName,ts,eventBase);},addFragCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.fragSample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addFragCycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.fragSample(hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},computeSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:compute','Compute: '+ctrName,seriesName,ts,eventBase);},addComputeCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.computeSample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addComputeCycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.computeSample(hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addTripipeCycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.hwcSample('mali:shader','Tripipe: '+hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},arithSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:arith','Arith: '+ctrName,seriesName,ts,eventBase);},addArithCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.arithSample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addArithCycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.arithSample(hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addLSCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.hwcSample('mali:ls','LS: '+hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},textureSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:texture','Texture: '+ctrName,seriesName,ts,eventBase);},addTexCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.textureSample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addLSCCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.hwcSample('mali:lsc','LSC: '+hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addAXICounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.hwcSample('mali:axi','AXI: '+hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},mmuSample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:mmu','MMU: '+ctrName,seriesName,ts,eventBase);},addMMUCounter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.mmuSample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addMMUCycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.mmuSample(hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},l2Sample(ctrName,seriesName,ts,eventBase){return this.hwcSample('mali:l2','L2: '+ctrName,seriesName,ts,eventBase);},addL2Counter(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.l2Sample(hwcTitle,'count',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));},addL2Cycles(hwcEventName,hwcTitle){function handler(eventName,cpuNumber,pid,ts,eventBase){return this.l2Sample(hwcTitle,'cycles',ts,eventBase);}
-this.importer.registerEventHandler(hwcEventName,handler.bind(this));}};Parser.register(MaliParser);return{MaliParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const Parser=tr.e.importer.linux_perf.Parser;function MemReclaimParser(importer){Parser.call(this,importer);importer.registerEventHandler('mm_vmscan_kswapd_wake',MemReclaimParser.prototype.kswapdWake.bind(this));importer.registerEventHandler('mm_vmscan_kswapd_sleep',MemReclaimParser.prototype.kswapdSleep.bind(this));importer.registerEventHandler('mm_vmscan_direct_reclaim_begin',MemReclaimParser.prototype.reclaimBegin.bind(this));importer.registerEventHandler('mm_vmscan_direct_reclaim_end',MemReclaimParser.prototype.reclaimEnd.bind(this));importer.registerEventHandler('lowmemory_kill',MemReclaimParser.prototype.lowmemoryKill.bind(this));}
-const kswapdWakeRE=/nid=(\d+) order=(\d+)/;const kswapdSleepRE=/nid=(\d+)/;const reclaimBeginRE=/order=(\d+) may_writepage=\d+ gfp_flags=(.+)/;const reclaimEndRE=/nr_reclaimed=(\d+)/;const lowmemoryRE=/([^ ]+) \((\d+)\), page cache (\d+)kB \(limit (\d+)kB\), free (-?\d+)Kb/;MemReclaimParser.prototype={__proto__:Parser.prototype,kswapdWake(eventName,cpuNumber,pid,ts,eventBase){const event=kswapdWakeRE.exec(eventBase.details);if(!event)return false;const tgid=parseInt(eventBase.tgid);const nid=parseInt(event[1]);const order=parseInt(event[2]);const kthread=this.importer.getOrCreateKernelThread(eventBase.threadName,tgid,pid);if(kthread.openSliceTS){if(order>kthread.order){kthread.order=order;}}else{kthread.openSliceTS=ts;kthread.order=order;}
-return true;},kswapdSleep(eventName,cpuNumber,pid,ts,eventBase){const tgid=parseInt(eventBase.tgid);const kthread=this.importer.getOrCreateKernelThread(eventBase.threadName,tgid,pid);if(kthread.openSliceTS){kthread.thread.sliceGroup.pushCompleteSlice('memreclaim',eventBase.threadName,kthread.openSliceTS,ts-kthread.openSliceTS,0,0,{order:kthread.order});}
-kthread.openSliceTS=undefined;kthread.order=undefined;return true;},reclaimBegin(eventName,cpuNumber,pid,ts,eventBase){const event=reclaimBeginRE.exec(eventBase.details);if(!event)return false;const order=parseInt(event[1]);const gfp=event[2];const tgid=parseInt(eventBase.tgid);const kthread=this.importer.getOrCreateKernelThread(eventBase.threadName,tgid,pid);kthread.openSliceTS=ts;kthread.order=order;kthread.gfp=gfp;return true;},reclaimEnd(eventName,cpuNumber,pid,ts,eventBase){const event=reclaimEndRE.exec(eventBase.details);if(!event)return false;const nrReclaimed=parseInt(event[1]);const tgid=parseInt(eventBase.tgid);const kthread=this.importer.getOrCreateKernelThread(eventBase.threadName,tgid,pid);if(kthread.openSliceTS!==undefined){kthread.thread.sliceGroup.pushCompleteSlice('memreclaim','direct reclaim',kthread.openSliceTS,ts-kthread.openSliceTS,0,0,{order:kthread.order,gfp:kthread.gfp,nr_reclaimed:nrReclaimed});}
-kthread.openSliceTS=undefined;kthread.order=undefined;kthread.gfp=undefined;return true;},lowmemoryKill(eventName,cpuNumber,pid,ts,eventBase){const event=lowmemoryRE.exec(eventBase.details);if(!event)return false;const tgid=parseInt(eventBase.tgid);const killedName=event[1];const killedPid=parseInt(event[2]);const cache=parseInt(event[3]);const free=parseInt(event[5]);const kthread=this.importer.getOrCreateKernelThread(eventBase.threadName,tgid,pid);kthread.thread.sliceGroup.pushCompleteSlice('lowmemory','low memory kill',ts,0,0,0,{killed_name:killedName,killed_pid:killedPid,cache,free});return true;}};Parser.register(MemReclaimParser);return{MemReclaimParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function PowerParser(importer){Parser.call(this,importer);importer.registerEventHandler('power_start',PowerParser.prototype.powerStartEvent.bind(this));importer.registerEventHandler('power_frequency',PowerParser.prototype.powerFrequencyEvent.bind(this));importer.registerEventHandler('cpu_frequency',PowerParser.prototype.cpuFrequencyEvent.bind(this));importer.registerEventHandler('cpu_frequency_limits',PowerParser.prototype.cpuFrequencyLimitsEvent.bind(this));importer.registerEventHandler('cpu_idle',PowerParser.prototype.cpuIdleEvent.bind(this));}
-PowerParser.prototype={__proto__:Parser.prototype,cpuStateSlice(ts,targetCpuNumber,eventType,cpuState){const targetCpu=this.importer.getOrCreateCpu(targetCpuNumber);if(eventType!=='1'){this.importer.model.importWarning({type:'parse_error',message:'Don\'t understand power_start events of '+'type '+eventType});return;}
-const powerCounter=targetCpu.getOrCreateCounter('','C-State');if(powerCounter.numSeries===0){powerCounter.addSeries(new tr.model.CounterSeries('state',ColorScheme.getColorIdForGeneralPurposeString(powerCounter.name+'.'+'state')));}
-powerCounter.series.forEach(function(series){series.addCounterSample(ts,cpuState);});},cpuIdleSlice(ts,targetCpuNumber,cpuState){const targetCpu=this.importer.getOrCreateCpu(targetCpuNumber);const powerCounter=targetCpu.getOrCreateCounter('','C-State');if(powerCounter.numSeries===0){powerCounter.addSeries(new tr.model.CounterSeries('state',ColorScheme.getColorIdForGeneralPurposeString(powerCounter.name)));}
-const val=(cpuState!==4294967295?cpuState+1:0);powerCounter.series.forEach(function(series){series.addCounterSample(ts,val);});},cpuFrequencySlice(ts,targetCpuNumber,powerState){const targetCpu=this.importer.getOrCreateCpu(targetCpuNumber);const powerCounter=targetCpu.getOrCreateCounter('','Clock Frequency');if(powerCounter.numSeries===0){powerCounter.addSeries(new tr.model.CounterSeries('state',ColorScheme.getColorIdForGeneralPurposeString(powerCounter.name+'.'+'state')));}
-powerCounter.series.forEach(function(series){series.addCounterSample(ts,powerState);});},cpuFrequencyLimitsSlice(ts,targetCpuNumber,minFreq,maxFreq){const targetCpu=this.importer.getOrCreateCpu(targetCpuNumber);const powerCounter=targetCpu.getOrCreateCounter('','Clock Frequency Limits');if(powerCounter.numSeries===0){powerCounter.addSeries(new tr.model.CounterSeries('Min Frequency',ColorScheme.getColorIdForGeneralPurposeString(powerCounter.name+'.'+'Min Frequency')));powerCounter.addSeries(new tr.model.CounterSeries('Max Frequency',ColorScheme.getColorIdForGeneralPurposeString(powerCounter.name+'.'+'Max Frequency')));}
-powerCounter.series.forEach(function(series){if(series.name==='Min Frequency'){series.addCounterSample(ts,minFreq);}
-if(series.name==='Max Frequency'){series.addCounterSample(ts,maxFreq);}});},powerStartEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/type=(\d+) state=(\d) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[3]);const cpuState=parseInt(event[2]);this.cpuStateSlice(ts,targetCpuNumber,event[1],cpuState);return true;},powerFrequencyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/type=(\d+) state=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[3]);const powerState=parseInt(event[2]);this.cpuFrequencySlice(ts,targetCpuNumber,powerState);return true;},cpuFrequencyEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/state=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[2]);const powerState=parseInt(event[1]);this.cpuFrequencySlice(ts,targetCpuNumber,powerState);return true;},cpuFrequencyLimitsEvent(eventName,cpu,pid,ts,eventBase){const event=/min=(\d+) max=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[3]);const minFreq=parseInt(event[1]);const maxFreq=parseInt(event[2]);this.cpuFrequencyLimitsSlice(ts,targetCpuNumber,minFreq,maxFreq);return true;},cpuIdleEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/state=(\d+) cpu_id=(\d+)/.exec(eventBase.details);if(!event)return false;const targetCpuNumber=parseInt(event[2]);const cpuState=parseInt(event[1]);this.cpuIdleSlice(ts,targetCpuNumber,cpuState);return true;}};Parser.register(PowerParser);return{PowerParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function RegulatorParser(importer){Parser.call(this,importer);importer.registerEventHandler('regulator_enable',RegulatorParser.prototype.regulatorEnableEvent.bind(this));importer.registerEventHandler('regulator_enable_delay',RegulatorParser.prototype.regulatorEnableDelayEvent.bind(this));importer.registerEventHandler('regulator_enable_complete',RegulatorParser.prototype.regulatorEnableCompleteEvent.bind(this));importer.registerEventHandler('regulator_disable',RegulatorParser.prototype.regulatorDisableEvent.bind(this));importer.registerEventHandler('regulator_disable_complete',RegulatorParser.prototype.regulatorDisableCompleteEvent.bind(this));importer.registerEventHandler('regulator_set_voltage',RegulatorParser.prototype.regulatorSetVoltageEvent.bind(this));importer.registerEventHandler('regulator_set_voltage_complete',RegulatorParser.prototype.regulatorSetVoltageCompleteEvent.bind(this));this.model_=importer.model_;}
-const regulatorEnableRE=/name=(.+)/;const regulatorDisableRE=/name=(.+)/;const regulatorSetVoltageCompleteRE=/name=(\S+), val=(\d+)/;RegulatorParser.prototype={__proto__:Parser.prototype,getCtr_(ctrName,valueName){const ctr=this.model_.kernel.getOrCreateCounter(null,'vreg '+ctrName+' '+valueName);if(ctr.series[0]===undefined){ctr.addSeries(new tr.model.CounterSeries(valueName,ColorScheme.getColorIdForGeneralPurposeString(ctrName+'.'+valueName)));}
-return ctr;},regulatorEnableEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorEnableRE.exec(eventBase.details);if(!event)return false;const name=event[1];const ctr=this.getCtr_(name,'enabled');ctr.series[0].addCounterSample(ts,1);return true;},regulatorEnableDelayEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorEnableCompleteEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorDisableEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorDisableRE.exec(eventBase.details);if(!event)return false;const name=event[1];const ctr=this.getCtr_(name,'enabled');ctr.series[0].addCounterSample(ts,0);return true;},regulatorDisableCompleteEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorSetVoltageEvent(eventName,cpuNum,pid,ts,eventBase){return true;},regulatorSetVoltageCompleteEvent(eventName,cpuNum,pid,ts,eventBase){const event=regulatorSetVoltageCompleteRE.exec(eventBase.details);if(!event)return false;const name=event[1];const voltage=parseInt(event[2]);const ctr=this.getCtr_(name,'voltage');ctr.series[0].addCounterSample(ts,voltage);return true;}};Parser.register(RegulatorParser);return{RegulatorParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const Parser=tr.e.importer.linux_perf.Parser;function SchedParser(importer){Parser.call(this,importer);importer.registerEventHandler('sched_switch',SchedParser.prototype.schedSwitchEvent.bind(this));importer.registerEventHandler('sched_wakeup',SchedParser.prototype.schedWakeupEvent.bind(this));importer.registerEventHandler('sched_blocked_reason',SchedParser.prototype.schedBlockedEvent.bind(this));importer.registerEventHandler('sched_cpu_hotplug',SchedParser.prototype.schedCpuHotplugEvent.bind(this));}
-const TestExports={};const schedSwitchRE=new RegExp('prev_comm=(.+) prev_pid=(\\d+) prev_prio=(\\d+) '+'prev_state=(\\S\\+?|\\S\\|\\S) ==> '+'next_comm=(.+) next_pid=(\\d+) next_prio=(\\d+)');const schedBlockedRE=new RegExp('pid=(\\d+) iowait=(\\d) caller=(.+)');TestExports.schedSwitchRE=schedSwitchRE;const schedWakeupRE=/comm=(.+) pid=(\d+) prio=(\d+)(?: success=\d+)? target_cpu=(\d+)/;TestExports.schedWakeupRE=schedWakeupRE;SchedParser.prototype={__proto__:Parser.prototype,schedSwitchEvent(eventName,cpuNumber,pid,ts,eventBase){const event=schedSwitchRE.exec(eventBase.details);if(!event)return false;const prevState=event[4];const nextComm=event[5];const nextPid=parseInt(event[6]);const nextPrio=parseInt(event[7]);if(eventBase.tgid!==undefined){const tgid=parseInt(eventBase.tgid);const process=this.importer.model_.getOrCreateProcess(tgid);if(!process.getThread(pid)){const thread=process.getOrCreateThread(pid);thread.name=eventBase.threadName;}}
-const nextThread=this.importer.threadsByLinuxPid[nextPid];let nextName;if(nextThread){nextName=nextThread.userFriendlyName;}else{nextName=nextComm;}
-const cpu=this.importer.getOrCreateCpu(cpuNumber);cpu.switchActiveThread(ts,{stateWhenDescheduled:prevState},nextPid,nextName,{comm:nextComm,tid:nextPid,prio:nextPrio});return true;},schedWakeupEvent(eventName,cpuNumber,pid,ts,eventBase){const event=schedWakeupRE.exec(eventBase.details);if(!event)return false;const fromPid=pid;const comm=event[1];pid=parseInt(event[2]);const prio=parseInt(event[3]);this.importer.markPidRunnable(ts,pid,comm,prio,fromPid);return true;},schedCpuHotplugEvent(eventName,cpuNumber,pid,ts,eventBase){const event=/cpu (\d+) (.+) error=(\d+)/.exec(eventBase.details);if(!event)return false;cpuNumber=event[1];const state=event[2];const targetCpu=this.importer.getOrCreateCpu(cpuNumber);const powerCounter=targetCpu.getOrCreateCounter('','Cpu Hotplug');if(powerCounter.numSeries===0){powerCounter.addSeries(new tr.model.CounterSeries('State',tr.b.ColorScheme.getColorIdForGeneralPurposeString(powerCounter.name+'.'+'State')));}
-powerCounter.series.forEach(function(series){if(series.name==='State'){series.addCounterSample(ts,state.localeCompare('offline')?0:1);}});return true;},schedBlockedEvent(eventName,cpuNumber,pid,ts,eventBase){const event=schedBlockedRE.exec(eventBase.details);if(!event)return false;pid=parseInt(event[1]);const iowait=parseInt(event[2]);const caller=event[3];this.importer.addPidBlockedReason(ts,pid,iowait,caller);return true;}};Parser.register(SchedParser);return{SchedParser,_SchedParserTestExports:TestExports};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function SyncParser(importer){Parser.call(this,importer);importer.registerEventHandler('sync_timeline',SyncParser.prototype.timelineEvent.bind(this));importer.registerEventHandler('sync_wait',SyncParser.prototype.syncWaitEvent.bind(this));importer.registerEventHandler('sync_pt',SyncParser.prototype.syncPtEvent.bind(this));this.model_=importer.model_;}
-const syncTimelineRE=/name=(\S+) value=(\S*)/;const syncWaitRE=/(\S+) name=(\S+) state=(\d+)/;const syncPtRE=/name=(\S+) value=(\S*)/;SyncParser.prototype={__proto__:Parser.prototype,timelineEvent(eventName,cpuNumber,pid,ts,eventBase){const event=syncTimelineRE.exec(eventBase.details);if(!event)return false;const thread=this.importer.getOrCreatePseudoThread(event[1]);if(thread.lastActiveTs!==undefined){const duration=ts-thread.lastActiveTs;let value=thread.lastActiveValue;if(value===undefined)value=' ';const slice=new tr.model.ThreadSlice('',value,ColorScheme.getColorIdForGeneralPurposeString(value),thread.lastActiveTs,{},duration);thread.thread.sliceGroup.pushSlice(slice);}
-thread.lastActiveTs=ts;thread.lastActiveValue=event[2];return true;},syncWaitEvent(eventName,cpuNumber,pid,ts,eventBase){const event=syncWaitRE.exec(eventBase.details);if(!event)return false;if(eventBase.tgid===undefined){return false;}
-const tgid=parseInt(eventBase.tgid);const thread=this.model_.getOrCreateProcess(tgid).getOrCreateThread(pid);thread.name=eventBase.threadName;const slices=thread.kernelSliceGroup;if(!slices.isTimestampValidForBeginOrEnd(ts)){this.model_.importWarning({type:'parse_error',message:'Timestamps are moving backward.'});return false;}
-const name='fence_wait("'+event[2]+'")';if(event[1]==='begin'){const slice=slices.beginSlice(null,name,ts,{'Start state':event[3]});}else if(event[1]==='end'){if(slices.openSliceCount>0){slices.endSlice(ts);}}else{return false;}
-return true;},syncPtEvent(eventName,cpuNumber,pid,ts,eventBase){return!!syncPtRE.exec(eventBase.details);}};Parser.register(SyncParser);return{SyncParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const ColorScheme=tr.b.ColorScheme;const Parser=tr.e.importer.linux_perf.Parser;function WorkqueueParser(importer){Parser.call(this,importer);importer.registerEventHandler('workqueue_execute_start',WorkqueueParser.prototype.executeStartEvent.bind(this));importer.registerEventHandler('workqueue_execute_end',WorkqueueParser.prototype.executeEndEvent.bind(this));importer.registerEventHandler('workqueue_queue_work',WorkqueueParser.prototype.executeQueueWork.bind(this));importer.registerEventHandler('workqueue_activate_work',WorkqueueParser.prototype.executeActivateWork.bind(this));}
-const workqueueExecuteStartRE=/work struct (.+): function (\S+)/;const workqueueExecuteEndRE=/work struct (.+)/;WorkqueueParser.prototype={__proto__:Parser.prototype,executeStartEvent(eventName,cpuNumber,pid,ts,eventBase){const event=workqueueExecuteStartRE.exec(eventBase.details);if(!event)return false;const kthread=this.importer.getOrCreateKernelThread(eventBase.threadName,pid,pid);kthread.openSliceTS=ts;kthread.openSlice=event[2];return true;},executeEndEvent(eventName,cpuNumber,pid,ts,eventBase){const event=workqueueExecuteEndRE.exec(eventBase.details);if(!event)return false;const kthread=this.importer.getOrCreateKernelThread(eventBase.threadName,pid,pid);if(kthread.openSlice){const slice=new tr.model.ThreadSlice('',kthread.openSlice,ColorScheme.getColorIdForGeneralPurposeString(kthread.openSlice),kthread.openSliceTS,{},ts-kthread.openSliceTS);kthread.thread.sliceGroup.pushSlice(slice);}
-kthread.openSlice=undefined;return true;},executeQueueWork(eventName,cpuNumber,pid,ts,eventBase){return true;},executeActivateWork(eventName,cpuNumber,pid,ts,eventBase){return true;}};Parser.register(WorkqueueParser);return{WorkqueueParser,};});'use strict';tr.exportTo('tr.e.importer.linux_perf',function(){const MONOTONIC_TO_FTRACE_GLOBAL_SYNC_ID='linux_clock_monotonic_to_ftrace_global';const IMPORT_PRIORITY=2;function FTraceImporter(model,events){this.importPriority=IMPORT_PRIORITY;this.model_=model;this.events_=events;this.wakeups_=[];this.blockedReasons_=[];this.kernelThreadStates_={};this.buildMapFromLinuxPidsToThreads_();this.lines_=[];this.pseudoThreadCounter=1;this.parsers_=[];this.eventHandlers_={};this.haveClockSyncedMonotonicToGlobal_=false;this.clockDomainId_=tr.model.ClockDomainId.LINUX_FTRACE_GLOBAL;}
-const TestExports={};const lineREWithTGID=new RegExp('^\\s*(.+)-(\\d+)\\s+\\(\\s*(\\d+|-+)\\)\\s\\[(\\d+)\\]'+'\\s+[dX.][Nnp.][Hhs.][0-9a-f.]'+'\\s+(\\d+\\.\\d+):\\s+(\\S+):\\s(.*)$');const lineParserWithTGID=function(line){const groups=lineREWithTGID.exec(line);if(!groups)return groups;let tgid=groups[3];if(tgid[0]==='-')tgid=undefined;return{threadName:groups[1],pid:groups[2],tgid,cpuNumber:groups[4],timestamp:groups[5],eventName:groups[6],details:groups[7]};};TestExports.lineParserWithTGID=lineParserWithTGID;const lineREWithIRQInfo=new RegExp('^\\s*(.+)-(\\d+)\\s+\\[(\\d+)\\]'+'\\s+[dX.][Nnp.][Hhs.][0-9a-f.]'+'\\s+(\\d+\\.\\d+):\\s+(\\S+):\\s(.*)$');const lineParserWithIRQInfo=function(line){const groups=lineREWithIRQInfo.exec(line);if(!groups)return groups;return{threadName:groups[1],pid:groups[2],cpuNumber:groups[3],timestamp:groups[4],eventName:groups[5],details:groups[6]};};TestExports.lineParserWithIRQInfo=lineParserWithIRQInfo;const lineREWithLegacyFmt=/^\s*(.+)-(\d+)\s+\[(\d+)\]\s*(\d+\.\d+):\s+(\S+):\s(.*)$/;const lineParserWithLegacyFmt=function(line){const groups=lineREWithLegacyFmt.exec(line);if(!groups){return groups;}
-return{threadName:groups[1],pid:groups[2],cpuNumber:groups[3],timestamp:groups[4],eventName:groups[5],details:groups[6]};};TestExports.lineParserWithLegacyFmt=lineParserWithLegacyFmt;const traceEventClockSyncRE=/trace_event_clock_sync: parent_ts=(\d+\.?\d*)/;TestExports.traceEventClockSyncRE=traceEventClockSyncRE;const realTimeClockSyncRE=/trace_event_clock_sync: realtime_ts=(\d+)/;const genericClockSyncRE=/trace_event_clock_sync: name=([\w\-]+)/;const pseudoKernelPID=0;function autoDetectLineParser(line){if(line[0]==='{')return false;if(lineREWithTGID.test(line))return lineParserWithTGID;if(lineREWithIRQInfo.test(line))return lineParserWithIRQInfo;if(lineREWithLegacyFmt.test(line))return lineParserWithLegacyFmt;return undefined;}
-TestExports.autoDetectLineParser=autoDetectLineParser;FTraceImporter.canImport=function(events){if(events instanceof tr.b.TraceStream)events=events.header;if(!(typeof(events)==='string'||events instanceof String)){return false;}
-if(FTraceImporter._extractEventsFromSystraceHTML(events,false).ok){return true;}
-if(FTraceImporter._extractEventsFromSystraceMultiHTML(events,false).ok){return true;}
-if(/^# tracer:/.test(events))return true;const lineBreakIndex=events.indexOf('\n');if(lineBreakIndex>-1)events=events.substring(0,lineBreakIndex);if(autoDetectLineParser(events))return true;return false;};FTraceImporter._extractEventsFromSystraceHTML=function(incomingEvents,produceResult){const failure={ok:false};if(produceResult===undefined)produceResult=true;const header=incomingEvents instanceof tr.b.TraceStream?incomingEvents.header:incomingEvents;if(!/^<!DOCTYPE html>/.test(header))return failure;const r=new tr.importer.SimpleLineReader(incomingEvents);if(!r.advanceToLineMatching(/^  <script>$/))return failure;if(!r.advanceToLineMatching(/^  var linuxPerfData = "\\$/))return failure;const eventsBeginAtLine=r.curLineNumber+1;r.beginSavingLines();if(!r.advanceToLineMatching(/^  <\/script>$/))return failure;let rawEvents=r.endSavingLinesAndGetResult();rawEvents=rawEvents.slice(1,rawEvents.length-1);if(!r.advanceToLineMatching(/^<\/body>$/))return failure;if(!r.advanceToLineMatching(/^<\/html>$/))return failure;function endsWith(str,suffix){return str.indexOf(suffix,str.length-suffix.length)!==-1;}
-function stripSuffix(str,suffix){if(!endsWith(str,suffix))return str;return str.substring(str,str.length-suffix.length);}
-let events=[];if(produceResult){for(let i=0;i<rawEvents.length;i++){let event=rawEvents[i];event=stripSuffix(event,'\\n\\');events.push(event);}}else{events=[rawEvents[rawEvents.length-1]];}
-const oldLastEvent=events[events.length-1];const newLastEvent=stripSuffix(oldLastEvent,'\\n";');if(newLastEvent===oldLastEvent)return failure;events[events.length-1]=newLastEvent;return{ok:true,lines:produceResult?events:undefined,eventsBeginAtLine};};FTraceImporter._extractEventsFromSystraceMultiHTML=function(incomingEvents,produceResult){const failure={ok:false};if(produceResult===undefined)produceResult=true;const header=incomingEvents instanceof tr.b.TraceStream?incomingEvents.header:incomingEvents;if(!(new RegExp('^<!DOCTYPE HTML>','i').test(header)))return failure;const r=new tr.importer.SimpleLineReader(incomingEvents);let events=[];let eventsBeginAtLine;while(!/^# tracer:/.test(events)){if(!r.advanceToLineMatching(/^  <script class="trace-data" type="application\/text">$/)){return failure;}
-eventsBeginAtLine=r.curLineNumber+1;r.beginSavingLines();if(!r.advanceToLineMatching(/^  <\/script>$/))return failure;events=r.endSavingLinesAndGetResult();events=events.slice(1,events.length-1);}
-if(!r.advanceToLineMatching(/^<\/body>$/))return failure;if(!r.advanceToLineMatching(/^<\/html>$/))return failure;return{ok:true,lines:produceResult?events:undefined,eventsBeginAtLine,};};FTraceImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'FTraceImporter';},get model(){return this.model_;},importClockSyncMarkers(){this.lazyInit_();this.forEachLine_(function(text,eventBase,cpuNumber,pid,ts){const eventName=eventBase.eventName;if(eventName!=='tracing_mark_write'&&eventName!=='0')return;if(traceEventClockSyncRE.exec(eventBase.details)||genericClockSyncRE.exec(eventBase.details)){this.traceClockSyncEvent_(eventName,cpuNumber,pid,ts,eventBase);}else if(realTimeClockSyncRE.exec(eventBase.details)){const match=realTimeClockSyncRE.exec(eventBase.details);this.model_.realtime_to_monotonic_offset_ms=ts-match[1];}}.bind(this));},importEvents(){const modelTimeTransformer=this.model_.clockSyncManager.getModelTimeTransformer(this.clockDomainId_);this.importCpuData_(modelTimeTransformer);this.buildMapFromLinuxPidsToThreads_();this.buildPerThreadCpuSlicesFromCpuState_();},registerEventHandler(eventName,handler){this.eventHandlers_[eventName]=handler;},getOrCreateCpu(cpuNumber){return this.model_.kernel.getOrCreateCpu(cpuNumber);},getOrCreateKernelThread(kernelThreadName,pid,tid){if(!this.kernelThreadStates_[kernelThreadName]){const thread=this.model_.getOrCreateProcess(pid).getOrCreateThread(tid);thread.name=kernelThreadName;this.kernelThreadStates_[kernelThreadName]={pid,thread,openSlice:undefined,openSliceTS:undefined};this.threadsByLinuxPid[pid]=thread;}
-return this.kernelThreadStates_[kernelThreadName];},getOrCreateBinderKernelThread(kernelThreadName,pid,tid){const key=kernelThreadName+pid+tid;if(!this.kernelThreadStates_[key]){const thread=this.model_.getOrCreateProcess(pid).getOrCreateThread(tid);thread.name=kernelThreadName;this.kernelThreadStates_[key]={pid,thread,openSlice:undefined,openSliceTS:undefined};this.threadsByLinuxPid[pid]=thread;}
-return this.kernelThreadStates_[key];},getOrCreatePseudoThread(threadName){let thread=this.kernelThreadStates_[threadName];if(!thread){thread=this.getOrCreateKernelThread(threadName,pseudoKernelPID,this.pseudoThreadCounter);this.pseudoThreadCounter++;}
-return thread;},markPidRunnable(ts,pid,comm,prio,fromPid){this.wakeups_.push({ts,tid:pid,fromTid:fromPid});},addPidBlockedReason(ts,pid,iowait,caller){this.blockedReasons_.push({ts,tid:pid,iowait,caller});},buildMapFromLinuxPidsToThreads_(){this.threadsByLinuxPid={};this.model_.getAllThreads().forEach(function(thread){this.threadsByLinuxPid[thread.tid]=thread;}.bind(this));},buildPerThreadCpuSlicesFromCpuState_(){const SCHEDULING_STATE=tr.model.SCHEDULING_STATE;for(const cpuNumber in this.model_.kernel.cpus){const cpu=this.model_.kernel.cpus[cpuNumber];for(let i=0;i<cpu.slices.length;i++){const cpuSlice=cpu.slices[i];const thread=this.threadsByLinuxPid[cpuSlice.args.tid];if(!thread)continue;cpuSlice.threadThatWasRunning=thread;if(!thread.tempCpuSlices){thread.tempCpuSlices=[];}
-thread.tempCpuSlices.push(cpuSlice);}}
-for(const i in this.wakeups_){const wakeup=this.wakeups_[i];const thread=this.threadsByLinuxPid[wakeup.tid];if(!thread)continue;thread.tempWakeups=thread.tempWakeups||[];thread.tempWakeups.push(wakeup);}
-for(const i in this.blockedReasons_){const reason=this.blockedReasons_[i];const thread=this.threadsByLinuxPid[reason.tid];if(!thread)continue;thread.tempBlockedReasons=thread.tempBlockedReasons||[];thread.tempBlockedReasons.push(reason);}
-this.model_.getAllThreads().forEach(function(thread){if(thread.tempCpuSlices===undefined)return;const origSlices=thread.tempCpuSlices;delete thread.tempCpuSlices;origSlices.sort(function(x,y){return x.start-y.start;});const wakeups=thread.tempWakeups||[];delete thread.tempWakeups;wakeups.sort(function(x,y){return x.ts-y.ts;});const reasons=thread.tempBlockedReasons||[];delete thread.tempBlockedReasons;reasons.sort(function(x,y){return x.ts-y.ts;});const slices=[];if(origSlices.length){const slice=origSlices[0];if(wakeups.length&&wakeups[0].ts<slice.start){const wakeup=wakeups.shift();const wakeupDuration=slice.start-wakeup.ts;const args={'wakeup from tid':wakeup.fromTid};slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.RUNNABLE,'',wakeup.ts,args,wakeupDuration));}
-const runningSlice=new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.RUNNING,'',slice.start,{},slice.duration);runningSlice.cpuOnWhichThreadWasRunning=slice.cpu;slices.push(runningSlice);}
-for(let i=1;i<origSlices.length;i++){let wakeup=undefined;const prevSlice=origSlices[i-1];const nextSlice=origSlices[i];let midDuration=nextSlice.start-prevSlice.end;while(wakeups.length&&wakeups[0].ts<nextSlice.start){const w=wakeups.shift();if(wakeup===undefined&&w.ts>prevSlice.end){wakeup=w;}}
-let blockedReason=undefined;while(reasons.length&&reasons[0].ts<prevSlice.end){const r=reasons.shift();}
-if(wakeup!==undefined&&reasons.length&&reasons[0].ts<wakeup.ts){blockedReason=reasons.shift();}
-const pushSleep=function(state){if(wakeup!==undefined){midDuration=wakeup.ts-prevSlice.end;}
-if(blockedReason!==undefined){const args={'kernel callsite when blocked:':blockedReason.caller};if(blockedReason.iowait){switch(state){case SCHEDULING_STATE.UNINTR_SLEEP:state=SCHEDULING_STATE.UNINTR_SLEEP_IO;break;case SCHEDULING_STATE.UNINTR_SLEEP_WAKE_KILL:state=SCHEDULING_STATE.UNINTR_SLEEP_WAKE_KILL_IO;break;case SCHEDULING_STATE.UNINTR_SLEEP_WAKING:state=SCHEDULING_STATE.UNINTR_SLEEP_WAKE_KILL_IO;break;default:}}
-slices.push(new tr.model.ThreadTimeSlice(thread,state,'',prevSlice.end,args,midDuration));}else{slices.push(new tr.model.ThreadTimeSlice(thread,state,'',prevSlice.end,{},midDuration));}
-if(wakeup!==undefined){const wakeupDuration=nextSlice.start-wakeup.ts;const args={'wakeup from tid':wakeup.fromTid};slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.RUNNABLE,'',wakeup.ts,args,wakeupDuration));wakeup=undefined;}};if(prevSlice.args.stateWhenDescheduled==='S'){pushSleep(SCHEDULING_STATE.SLEEPING);}else if(prevSlice.args.stateWhenDescheduled==='R'||prevSlice.args.stateWhenDescheduled==='R+'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.RUNNABLE,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='D'){pushSleep(SCHEDULING_STATE.UNINTR_SLEEP);}else if(prevSlice.args.stateWhenDescheduled==='T'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.STOPPED,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='t'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.DEBUG,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='Z'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.ZOMBIE,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='X'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.EXIT_DEAD,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='x'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.TASK_DEAD,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='K'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.WAKE_KILL,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='W'){slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.WAKING,'',prevSlice.end,{},midDuration));}else if(prevSlice.args.stateWhenDescheduled==='D|K'){pushSleep(SCHEDULING_STATE.UNINTR_SLEEP_WAKE_KILL);}else if(prevSlice.args.stateWhenDescheduled==='D|W'){pushSleep(SCHEDULING_STATE.UNINTR_SLEEP_WAKING);}else{slices.push(new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.UNKNOWN,'',prevSlice.end,{},midDuration));this.model_.importWarning({type:'parse_error',message:'Unrecognized sleep state: '+
-prevSlice.args.stateWhenDescheduled});}
-const runningSlice=new tr.model.ThreadTimeSlice(thread,SCHEDULING_STATE.RUNNING,'',nextSlice.start,{},nextSlice.duration);runningSlice.cpuOnWhichThreadWasRunning=prevSlice.cpu;slices.push(runningSlice);}
-thread.timeSlices=slices;},this);},createParsers_(){const allTypeInfos=tr.e.importer.linux_perf.Parser.getAllRegisteredTypeInfos();const parsers=allTypeInfos.map(function(typeInfo){return new typeInfo.constructor(this);},this);return parsers;},registerDefaultHandlers_(){this.registerEventHandler('tracing_mark_write',FTraceImporter.prototype.traceMarkingWriteEvent_.bind(this));this.registerEventHandler('0',FTraceImporter.prototype.traceMarkingWriteEvent_.bind(this));this.registerEventHandler('tracing_mark_write:trace_event_clock_sync',function(){return true;});this.registerEventHandler('0:trace_event_clock_sync',function(){return true;});},traceClockSyncEvent_(eventName,cpuNumber,pid,ts,eventBase){let event=/name=(\w+?)\s(.+)/.exec(eventBase.details);if(event){const name=event[1];const pieces=event[2].split(' ');const args={perfTs:ts};for(let i=0;i<pieces.length;i++){const parts=pieces[i].split('=');if(parts.length!==2){throw new Error('omgbbq');}
-args[parts[0]]=parts[1];}
-this.model_.clockSyncManager.addClockSyncMarker(this.clockDomainId_,name,ts);return true;}
-event=/name=([\w\-]+)/.exec(eventBase.details);if(event){this.model_.clockSyncManager.addClockSyncMarker(this.clockDomainId_,event[1],ts);return true;}
-event=/parent_ts=(\d+\.?\d*)/.exec(eventBase.details);if(!event)return false;let monotonicTs=event[1]*1000;if(monotonicTs===0)monotonicTs=ts;if(this.haveClockSyncedMonotonicToGlobal_){return true;}
-this.model_.clockSyncManager.addClockSyncMarker(this.clockDomainId_,MONOTONIC_TO_FTRACE_GLOBAL_SYNC_ID,ts);this.model_.clockSyncManager.addClockSyncMarker(tr.model.ClockDomainId.LINUX_CLOCK_MONOTONIC,MONOTONIC_TO_FTRACE_GLOBAL_SYNC_ID,monotonicTs);this.haveClockSyncedMonotonicToGlobal_=true;return true;},traceMarkingWriteEvent_(eventName,cpuNumber,pid,ts,eventBase,threadName){eventBase.details=eventBase.details.replace(/\\n.*$/,'');const event=/^\s*(\w+):\s*(.*)$/.exec(eventBase.details);if(!event){const tag=eventBase.details.substring(0,2);if(tag==='B|'||tag==='E'||tag==='E|'||tag==='X|'||tag==='C|'||tag==='S|'||tag==='F|'){eventBase.subEventName='android';}else{return false;}}else{eventBase.subEventName=event[1];eventBase.details=event[2];}
-const writeEventName=eventName+':'+eventBase.subEventName;const handler=this.eventHandlers_[writeEventName];if(!handler){this.model_.importWarning({type:'parse_error',message:'Unknown trace_marking_write event '+writeEventName});return true;}
-return handler(writeEventName,cpuNumber,pid,ts,eventBase,threadName);},importCpuData_(modelTimeTransformer){this.forEachLine_(function(text,eventBase,cpuNumber,pid,ts){const eventName=eventBase.eventName;const handler=this.eventHandlers_[eventName];if(!handler){this.model_.importWarning({type:'parse_error',message:'Unknown event '+eventName+' ('+text+')'});return;}
-ts=modelTimeTransformer(ts);if(!handler(eventName,cpuNumber,pid,ts,eventBase)){this.model_.importWarning({type:'parse_error',message:'Malformed '+eventName+' event ('+text+')'});}}.bind(this));},parseLines_(){let extractResult=FTraceImporter._extractEventsFromSystraceHTML(this.events_,true);if(!extractResult.ok){extractResult=FTraceImporter._extractEventsFromSystraceMultiHTML(this.events_,true);}
-let lineParser=undefined;if(extractResult.ok){for(const line of extractResult.lines){lineParser=this.parseLine_(line,lineParser);}}else{const r=new tr.importer.SimpleLineReader(this.events_);for(const line of r){lineParser=this.parseLine_(line,lineParser);}}},parseLine_(line,lineParser){line=line.trim();if(line.length===0)return lineParser;if(/^#/.test(line)){const clockType=/^# clock_type=([A-Z_]+)$/.exec(line);if(clockType){this.clockDomainId_=clockType[1];}
-return lineParser;}
-if(!lineParser){lineParser=autoDetectLineParser(line);if(!lineParser){this.model_.importWarning({type:'parse_error',message:'Cannot parse line: '+line});return lineParser;}}
-const eventBase=lineParser(line);if(!eventBase){this.model_.importWarning({type:'parse_error',message:'Unrecognized line: '+line});return lineParser;}
-this.lines_.push([line,eventBase,parseInt(eventBase.cpuNumber),parseInt(eventBase.pid),parseFloat(eventBase.timestamp)*1000]);return lineParser;},forEachLine_(handler){for(let i=0;i<this.lines_.length;++i){const line=this.lines_[i];handler.apply(this,line);}},lazyInit_(){this.parsers_=this.createParsers_();this.registerDefaultHandlers_();this.parseLines_();}};tr.importer.Importer.register(FTraceImporter);return{FTraceImporter,_FTraceImporterTestExports:TestExports,IMPORT_PRIORITY,};});'use strict';tr.exportTo('tr.e.importer.android.atrace_process_dump',function(){const IMPORT_PRIORITY=tr.e.importer.linux_perf.IMPORT_PRIORITY+1;const HEADER='ATRACE_PROCESS_DUMP';const PROTECTION_FLAG_LETTERS={'-':0,'r':tr.model.VMRegion.PROTECTION_FLAG_READ,'w':tr.model.VMRegion.PROTECTION_FLAG_WRITE,'x':tr.model.VMRegion.PROTECTION_FLAG_EXECUTE,'s':tr.model.VMRegion.PROTECTION_FLAG_MAYSHARE,};class AtraceProcessDumpImporter extends tr.importer.Importer{constructor(model,data){super(model,data);this.importPriority=IMPORT_PRIORITY;this.model_=model;this.raw_data_=data;this.clock_sync_markers_={};this.snapshots_=[];this.processes_={};}
-static canImport(events){if(!(typeof(events)==='string'||events instanceof String)){return false;}
-return events.startsWith(HEADER);}
-get importerName(){return'AtraceProcessDumpImporter';}
-get model(){return this.model_;}
-lazyParseData(){if(this.raw_data_===undefined){return;}
-const dump=JSON.parse(this.raw_data_.slice(HEADER.length+1));this.clock_sync_markers_=dump.clock_sync_markers;this.snapshots_=dump.dump.snapshots;this.processes_=dump.dump.processes;this.raw_data_=undefined;}
-importClockSyncMarkers(){this.lazyParseData();for(const syncId in this.clock_sync_markers_){const ts=parseInt(this.clock_sync_markers_[syncId]);this.model_.clockSyncManager.addClockSyncMarker(tr.model.ClockDomainId.LINUX_CLOCK_MONOTONIC,syncId,ts);}}
-setProcessMemoryDumpTotals_(pmd,processInfo){pmd.totals={'residentBytes':processInfo.rss*1024,'platformSpecific':{'vm':processInfo.vm*1024}};const totals=pmd.totals.platformSpecific;function importGpuMetric(name){if(processInfo[name]!==undefined&&processInfo[name]>0){totals[name]=processInfo[name]*1024;totals[name+'_pss']=processInfo[name+'_pss']*1024;}}
-importGpuMetric('gpu_egl');importGpuMetric('gpu_gl');importGpuMetric('gpu_etc');if(processInfo.pss!==undefined){totals.pss=processInfo.pss*1024;totals.swp=processInfo.swp*1024;totals.pc=processInfo.pc*1024;totals.pd=processInfo.pd*1024;totals.sc=processInfo.sc*1024;totals.sd=processInfo.sd*1024;}}
-setProcessMemoryDumpVmRegions_(pmd,processInfo){if(processInfo.mmaps===undefined){return;}
-const vmRegions=[];for(const memoryMap of processInfo.mmaps){const addr=memoryMap.vm.split('-').map(x=>parseInt(x,16));let flags=0;for(const letter of memoryMap.flags){flags|=PROTECTION_FLAG_LETTERS[letter];}
-const totals={'proportionalResident':memoryMap.pss*1024,'privateCleanResident':memoryMap.pc*1024,'privateDirtyResident':memoryMap.pd*1024,'sharedCleanResident':memoryMap.sc*1024,'sharedDirtyResident':memoryMap.sd*1024,'swapped':memoryMap.swp*1024,};vmRegions.push(new tr.model.VMRegion(addr[0],addr[1]-addr[0],flags,memoryMap.file,totals));}
-pmd.vmRegions=tr.model.VMRegionClassificationNode.fromRegions(vmRegions);}
-importEvents(){this.lazyParseData();for(const[pid,process]of Object.entries(this.processes_)){const modelProcess=this.model_.getProcess(pid);if(modelProcess===undefined){continue;}
-modelProcess.name=process.name;const threads=process.threads;if(threads===undefined){continue;}
-for(const[tid,thread]of Object.entries(threads)){const modelThread=modelProcess.threads[tid];if(modelThread===undefined){continue;}
-modelThread.name=thread.name;}}
-const memCounter=this.model_.kernel.getOrCreateCounter('global','SystemMemory');const memUsedSeries=new tr.model.CounterSeries('Used (KB)',0);const memSwappedSeries=new tr.model.CounterSeries('Swapped (KB)',0);memCounter.addSeries(memUsedSeries);memCounter.addSeries(memSwappedSeries);for(const snapshot of this.snapshots_){const ts=parseInt(snapshot.ts);const memoryDump=snapshot.memdump;if(memoryDump===undefined){const memInfo=snapshot.meminfo;if(memInfo===undefined){continue;}
-const memCaches=memInfo.Buffers+memInfo.Cached-memInfo.Mapped;const memUsed=memInfo.MemTotal-memInfo.MemFree-memCaches;const memSwapped=memInfo.SwapTotal-memInfo.SwapFree;memUsedSeries.addCounterSample(ts,memUsed);memSwappedSeries.addCounterSample(ts,memSwapped);continue;}
-const gmd=new tr.model.GlobalMemoryDump(this.model_,ts);this.model_.globalMemoryDumps.push(gmd);for(const[pid,processInfo]of Object.entries(memoryDump)){if(processInfo.rss===undefined){continue;}
-const modelProcess=this.model_.getProcess(pid);if(modelProcess===undefined){continue;}
-const pmd=new tr.model.ProcessMemoryDump(gmd,modelProcess,ts);gmd.processMemoryDumps[pid]=pmd;modelProcess.memoryDumps.push(pmd);this.setProcessMemoryDumpTotals_(pmd,processInfo);this.setProcessMemoryDumpVmRegions_(pmd,processInfo);}}}}
-tr.importer.Importer.register(AtraceProcessDumpImporter);return{AtraceProcessDumpImporter,};});'use strict';tr.exportTo('tr.model',function(){const ColorScheme=tr.b.ColorScheme;function Activity(name,category,range,args){tr.model.TimedEvent.call(this,range.min);this.title=name;this.category=category;this.colorId=ColorScheme.getColorIdForGeneralPurposeString(name);this.duration=range.duration;this.args=args;this.name=name;}
-Activity.prototype={__proto__:tr.model.TimedEvent.prototype,shiftTimestampsForward(amount){this.start+=amount;},addBoundsToRange(range){range.addValue(this.start);range.addValue(this.end);}};return{Activity,};});'use strict';tr.exportTo('tr.e.importer.android',function(){const Importer=tr.importer.Importer;const ACTIVITY_STATE={NONE:'none',CREATED:'created',STARTED:'started',RESUMED:'resumed',PAUSED:'paused',STOPPED:'stopped',DESTROYED:'destroyed'};const activityMap={};function EventLogImporter(model,events){this.model_=model;this.events_=events;this.importPriority=3;}
-const eventLogActivityRE=new RegExp('(\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.\\d+)'+'\\s+(\\d+)\\s+(\\d+)\\s+([A-Z])\\s*'+'(am_\\w+)\\s*:(.*)');const amCreateRE=new RegExp('\s*\\[.*,.*,.*,(.*),.*,.*,.*,.*\\]');const amFocusedRE=new RegExp('\s*\\[\\d+,(.*)\\]');const amProcStartRE=new RegExp('\s*\\[\\d+,\\d+,\\d+,.*,activity,(.*)\\]');const amOnResumeRE=new RegExp('\s*\\[\\d+,(.*)\\]');const amOnPauseRE=new RegExp('\s*\\[\\d+,(.*)\\]');const amLaunchTimeRE=new RegExp('\s*\\[\\d+,\\d+,(.*),(\\d+),(\\d+)');const amDestroyRE=new RegExp('\s*\\[\\d+,\\d+,\\d+,(.*)\\]');EventLogImporter.canImport=function(events){if(!(typeof(events)==='string'||events instanceof String)){return false;}
-if(/^<!DOCTYPE html>/.test(events))return false;return eventLogActivityRE.test(events);};EventLogImporter.prototype={__proto__:Importer.prototype,get importerName(){return'EventLogImporter';},get model(){return this.model_;},getFullActivityName(component){const componentSplit=component.split('/');if(componentSplit[1].startsWith('.')){return componentSplit[0]+componentSplit[1];}
-return componentSplit[1];},getProcName(component){const componentSplit=component.split('/');return componentSplit[0];},findOrCreateActivity(activityName){if(activityName in activityMap){return activityMap[activityName];}
-const activity={state:ACTIVITY_STATE.NONE,name:activityName};activityMap[activityName]=activity;return activity;},deleteActivity(activityName){delete activityMap[activityName];},handleCreateActivity(ts,activityName){const activity=this.findOrCreateActivity(activityName);activity.state=ACTIVITY_STATE.CREATED;activity.createdTs=ts;},handleFocusActivity(ts,procName,activityName){const activity=this.findOrCreateActivity(activityName);activity.lastFocusedTs=ts;},handleProcStartForActivity(ts,activityName){const activity=this.findOrCreateActivity(activityName);activity.procStartTs=ts;},handleOnResumeCalled(ts,pid,activityName){const activity=this.findOrCreateActivity(activityName);activity.state=ACTIVITY_STATE.RESUMED;activity.lastResumeTs=ts;activity.pid=pid;},handleOnPauseCalled(ts,activityName){const activity=this.findOrCreateActivity(activityName);activity.state=ACTIVITY_STATE.PAUSED;activity.lastPauseTs=ts;if(ts>this.model_.bounds.min&&ts<this.model_.bounds.max){this.addActivityToProcess(activity);}},handleLaunchTime(ts,activityName,launchTime){const activity=this.findOrCreateActivity(activityName);activity.launchTime=launchTime;},handleDestroyActivity(ts,activityName){this.deleteActivity(activityName);},addActivityToProcess(activity){if(activity.pid===undefined)return;const process=this.model_.getOrCreateProcess(activity.pid);const range=tr.b.math.Range.fromExplicitRange(Math.max(this.model_.bounds.min,activity.lastResumeTs),activity.lastPauseTs);const newActivity=new tr.model.Activity(activity.name,'Android Activity',range,{created:activity.createdTs,procstart:activity.procStartTs,lastfocus:activity.lastFocusedTs});process.activities.push(newActivity);},parseAmLine_(line){let match=eventLogActivityRE.exec(line);if(!match)return;const firstRealtimeTs=this.model_.bounds.min-
-this.model_.realtime_to_monotonic_offset_ms;const year=new Date(firstRealtimeTs).getFullYear();const ts=match[1].substring(0,5)+'-'+year+' '+
-match[1].substring(5,match[1].length);const monotonicTs=Date.parse(ts)+
-this.model_.realtime_to_monotonic_offset_ms;const pid=match[2];const action=match[5];const data=match[6];if(action==='am_create_activity'){match=amCreateRE.exec(data);if(match&&match.length>=2){this.handleCreateActivity(monotonicTs,this.getFullActivityName(match[1]));}}else if(action==='am_focused_activity'){match=amFocusedRE.exec(data);if(match&&match.length>=2){this.handleFocusActivity(monotonicTs,this.getProcName(match[1]),this.getFullActivityName(match[1]));}}else if(action==='am_proc_start'){match=amProcStartRE.exec(data);if(match&&match.length>=2){this.handleProcStartForActivity(monotonicTs,this.getFullActivityName(match[1]));}}else if(action==='am_on_resume_called'){match=amOnResumeRE.exec(data);if(match&&match.length>=2){this.handleOnResumeCalled(monotonicTs,pid,match[1]);}}else if(action==='am_on_paused_called'){match=amOnPauseRE.exec(data);if(match&&match.length>=2){this.handleOnPauseCalled(monotonicTs,match[1]);}}else if(action==='am_activity_launch_time'){match=amLaunchTimeRE.exec(data);this.handleLaunchTime(monotonicTs,this.getFullActivityName(match[1]),match[2]);}else if(action==='am_destroy_activity'){match=amDestroyRE.exec(data);if(match&&match.length===2){this.handleDestroyActivity(monotonicTs,this.getFullActivityName(match[1]));}}},importEvents(){if(isNaN(this.model_.realtime_to_monotonic_offset_ms)){this.model_.importWarning({type:'eveng_log_clock_sync',message:'Need a trace_event_clock_sync to map realtime to import.'});return;}
-this.model_.updateBounds();const lines=this.events_.split('\n');lines.forEach(this.parseAmLine_,this);for(const activityName in activityMap){const activity=activityMap[activityName];if(activity.state===ACTIVITY_STATE.RESUMED){activity.lastPauseTs=this.model_.bounds.max;this.addActivityToProcess(activity);}}}};Importer.register(EventLogImporter);return{EventLogImporter,};});'use strict';tr.exportTo('tr.e.importer.android.process_data',function(){const Importer=tr.importer.Importer;const PROCESS_DUMP_HEADER='PROCESS DUMP';function ProcessDataImporter(model,processData){this.model_=model;this.processDataLines=processData.split('\n');this.importPriority=3;}
-ProcessDataImporter.canImport=function(events){if(!(typeof(events)==='string'||events instanceof String)){return false;}
-if(events.split('\n')[0]===PROCESS_DUMP_HEADER){return true;}
-return false;};ProcessDataImporter.prototype={__proto__:Importer.prototype,get importerName(){return'ProcessDataImporter';},get model(){return this.model_;},parseEventData(data){const allDumpedProcesses={};let parseProcesses=false;let parseThreads=false;let legacy=false;for(let i=1;i<data.length;i++){const cols=data[i].split(/\s+/);if(cols[0].startsWith('USER')){if(parseProcesses){parseProcesses=false;parseThreads=true;}else{parseThreads=false;parseProcesses=true;}
-const colCount=cols.length;if(parseProcesses&&colCount===9){legacy=false;}else if(parseProcesses&&colCount===8){legacy=true;}
-continue;}
-if(parseProcesses){const pid=Number(cols[1]);if(allDumpedProcesses[pid]===undefined){allDumpedProcesses[pid]={};}
-allDumpedProcesses[pid]={'name':cols[8],pid,'comm':cols[9]};continue;}
-if(parseThreads){let pid;let tid;let name;if(legacy){pid=Number(cols[1]);if(allDumpedProcesses[pid]!==undefined){tid=pid;}else{tid=pid;pid=Number(cols[2]);}
-name=cols.slice(8).join(' ');}else{pid=Number(cols[1]);tid=Number(cols[2]);name=cols.slice(3).join(' ');}
-if(allDumpedProcesses[pid]===undefined)continue;if(allDumpedProcesses[pid].threads===undefined){allDumpedProcesses[pid].threads={};}
-allDumpedProcesses[pid].threads[tid]={tid,name};continue;}}
-return allDumpedProcesses;},importEvents(){const allDumpedProcesses=this.parseEventData(this.processDataLines);const modelProcesses=this.model_.getAllProcesses();for(let i=0;i<modelProcesses.length;i++){const modelProcess=modelProcesses[i];const pid=modelProcess.pid;const dumpedProcess=allDumpedProcesses[pid];if(dumpedProcess===undefined){continue;}
-modelProcess.name=dumpedProcess.name;const processDumpThreads=dumpedProcess.threads;if(processDumpThreads!==undefined){for(const tid in modelProcess.threads){const modelThread=modelProcess.threads[tid];if(Number(pid)===Number(tid)){modelThread.name='UI thread';}else if(modelThread.name==='<...>'){if(processDumpThreads[tid]!==undefined){modelThread.name=processDumpThreads[tid].name;}}}}}}};Importer.register(ProcessDataImporter);return{ProcessDataImporter,};});'use strict';tr.exportTo('tr.e.importer.battor',function(){function BattorImporter(model,events){this.importPriority=3;this.model_=model;this.samples_=[];this.syncTimestampsById_=new Map();this.parseTrace_(events);}
-const battorDataLineRE=new RegExp('^(-?\\d+\\.\\d+)\\s+(-?\\d+\\.\\d+)\\s+(-?\\d+\\.\\d+)'+'(?:\\s+<(\\S+)>)?$');const battorHeaderLineRE=/^# BattOr/;BattorImporter.canImport=function(events){if(!(typeof(events)==='string'||events instanceof String)){return false;}
-return battorHeaderLineRE.test(events);};BattorImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'BattorImporter';},get model(){return this.model_;},importClockSyncMarkers(){for(const[syncId,ts]of this.syncTimestampsById_){this.model_.clockSyncManager.addClockSyncMarker(tr.model.ClockDomainId.BATTOR,syncId,ts);}},importEvents(){if(this.model_.device.powerSeries){this.model_.importWarning({type:'import_error',message:'Power counter exists, can not import BattOr power trace.'});return;}
-const modelTimeTransformer=this.model_.clockSyncManager.getModelTimeTransformer(tr.model.ClockDomainId.BATTOR);const powerSeries=this.model_.device.powerSeries=new tr.model.PowerSeries(this.model_.device);for(let i=0;i<this.samples_.length;i++){const sample=this.samples_[i];powerSeries.addPowerSample(modelTimeTransformer(sample.ts),sample.powerInW);}},parseTrace_(trace){const lines=trace.split('\n');for(let line of lines){line=line.trim();if(line.length===0)continue;if(line.startsWith('#'))continue;const groups=battorDataLineRE.exec(line);if(!groups){this.model_.importWarning({type:'parse_error',message:'Unrecognized line in BattOr trace: '+line});continue;}
-const ts=parseFloat(groups[1]);const voltageInV=tr.b.convertUnit(parseFloat(groups[2]),tr.b.UnitPrefixScale.METRIC.MILLI,tr.b.UnitPrefixScale.METRIC.NONE);const currentInA=tr.b.convertUnit(parseFloat(groups[3]),tr.b.UnitPrefixScale.METRIC.MILLI,tr.b.UnitPrefixScale.METRIC.NONE);const syncId=groups[4];if(syncId){this.syncTimestampsById_.set(syncId,ts);}
-if(voltageInV<0||currentInA<0){this.model_.importWarning({type:'parse_error',message:'The following line in the BattOr trace has a negative '+'voltage or current, neither of which are allowed: '+line+'. A common cause of this is that the device is charging '+'while the trace is being recorded.'});continue;}
-this.samples_.push(new Sample(ts,voltageInV,currentInA));}}};function Sample(ts,voltageInV,currentInA){this.ts=ts;this.voltageInV=voltageInV;this.currentInA=currentInA;}
-Sample.prototype={get powerInW(){return this.voltageInV*this.currentInA;}};tr.importer.Importer.register(BattorImporter);return{BattorImporter,};});'use strict';tr.exportTo('tr.e.importer.ddms',function(){const kPid=0;const kCategory='java';const kMethodLutEndMarker='\n*end\n';const kThreadsStart='\n*threads\n';const kMethodsStart='\n*methods\n';const kTraceMethodEnter=0x00;const kTraceMethodExit=0x01;const kTraceUnroll=0x02;const kTraceMethodActionMask=0x03;const kTraceHeaderLength=32;const kTraceMagicValue=0x574f4c53;const kTraceVersionSingleClock=2;const kTraceVersionDualClock=3;const kTraceRecordSizeSingleClock=10;const kTraceRecordSizeDualClock=14;function Reader(stringPayload){this.position_=0;this.data_=new Uint8Array(stringPayload.length);for(let i=0;i<stringPayload.length;++i){this.data_[i]=stringPayload.charCodeAt(i);}}
-Reader.prototype={__proto__:Object.prototype,uint8(){const result=this.data_[this.position_];this.position_+=1;return result;},uint16(){let result=0;result+=this.uint8();result+=this.uint8()<<8;return result;},uint32(){let result=0;result+=this.uint8();result+=this.uint8()<<8;result+=this.uint8()<<16;result+=this.uint8()<<24;return result;},uint64(){const low=this.uint32();const high=this.uint32();const lowStr=('0000000'+low.toString(16)).substr(-8);const highStr=('0000000'+high.toString(16)).substr(-8);const result=highStr+lowStr;return result;},seekTo(position){this.position_=position;},hasMore(){return this.position_<this.data_.length;}};function DdmsImporter(model,data){this.importPriority=3;this.model_=model;this.data_=data;}
-DdmsImporter.canImport=function(data){if(typeof(data)==='string'||data instanceof String){const header=data.slice(0,1000);return header.startsWith('*version\n')&&header.indexOf('\nvm=')>=0&&header.indexOf(kThreadsStart)>=0;}
-return false;};DdmsImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'DdmsImporter';},get model(){return this.model_;},importEvents(){const divider=this.data_.indexOf(kMethodLutEndMarker)+
-kMethodLutEndMarker.length;this.metadata_=this.data_.slice(0,divider);this.methods_={};this.parseThreads();this.parseMethods();const traceReader=new Reader(this.data_.slice(divider));const magic=traceReader.uint32();if(magic!==kTraceMagicValue){throw Error('Failed to match magic value');}
-this.version_=traceReader.uint16();if(this.version_!==kTraceVersionDualClock){throw Error('Unknown version');}
-const dataOffest=traceReader.uint16();const startDateTime=traceReader.uint64();const recordSize=traceReader.uint16();traceReader.seekTo(dataOffest);while(traceReader.hasMore()){this.parseTraceEntry(traceReader);}},parseTraceEntry(reader){const tid=reader.uint16();const methodPacked=reader.uint32();const cpuSinceStart=reader.uint32();const wallClockSinceStart=reader.uint32();let method=methodPacked&~kTraceMethodActionMask;const action=methodPacked&kTraceMethodActionMask;const thread=this.getTid(tid);method=this.getMethodName(method);if(action===kTraceMethodEnter){thread.sliceGroup.beginSlice(kCategory,method,wallClockSinceStart,undefined,cpuSinceStart);}else if(thread.sliceGroup.openSliceCount){thread.sliceGroup.endSlice(wallClockSinceStart,cpuSinceStart);}},parseThreads(){let threads=this.metadata_.slice(this.metadata_.indexOf(kThreadsStart)+
-kThreadsStart.length);threads=threads.slice(0,threads.indexOf('\n*'));threads=threads.split('\n');threads.forEach(this.parseThread.bind(this));},parseThread(threadLine){const tid=threadLine.slice(0,threadLine.indexOf('\t'));const thread=this.getTid(parseInt(tid));thread.name=threadLine.slice(threadLine.indexOf('\t')+1);},getTid(tid){return this.model_.getOrCreateProcess(kPid).getOrCreateThread(tid);},parseMethods(){let methods=this.metadata_.slice(this.metadata_.indexOf(kMethodsStart)+
-kMethodsStart.length);methods=methods.slice(0,methods.indexOf('\n*'));methods=methods.split('\n');methods.forEach(this.parseMethod.bind(this));},parseMethod(methodLine){const data=methodLine.split('\t');const methodId=parseInt(data[0]);const methodName=data[1]+'.'+data[2]+data[3];this.addMethod(methodId,methodName);},addMethod(methodId,methodName){this.methods_[methodId]=methodName;},getMethodName(methodId){return this.methods_[methodId];}};tr.importer.Importer.register(DdmsImporter);return{DdmsImporter,};});'use strict';tr.exportTo('tr.e.audits',function(){class LowMemoryAuditor extends tr.c.Auditor{constructor(model){super();this.model_=model;}
-runAnnotate(){this.model_.device.lowMemoryEvents=this.getLowMemoryEvents_();}
-getLowMemoryEvents_(){const model=this.model_;const result=[];for(const process of model.getAllProcesses()){for(const e of process.getDescendantEvents()){if(!(e instanceof tr.model.ThreadSlice)||e.duration!==0){continue;}
-if(e.category!=='lowmemory'){continue;}
-result.push(e);}}
-return result;}}
-tr.c.Auditor.register(LowMemoryAuditor);return{LowMemoryAuditor};});'use strict';function filterDuplicateTimestamps(timestamps){const dedupedTimestamps=[];let lastTs=0;for(const ts of timestamps){if(ts-lastTs>=1){dedupedTimestamps.push(ts);lastTs=ts;}}
-return dedupedTimestamps;}
-tr.exportTo('tr.e.audits',function(){const VSYNC_COUNTER_PRECISIONS={'android.VSYNC-app':15,'android.VSYNC':15};const VSYNC_SLICE_PRECISIONS={'RenderWidgetHostViewAndroid::OnVSync':5,'VSYNC':10,'vblank':10,'DisplayLinkMac::GetVSyncParameters':5};const BEGIN_FRAME_SLICE_PRECISION={'DisplayScheduler::BeginFrame':10};function VSyncAuditor(model){tr.c.Auditor.call(this,model);}
-VSyncAuditor.prototype={__proto__:tr.c.Auditor.prototype,runAnnotate(){this.model.device.vSyncTimestamps=this.findVSyncTimestamps(this.model);},findVSyncTimestamps(model){let times=[];let maxPrecision=Number.NEGATIVE_INFINITY;let maxTitle=undefined;function useInstead(title,precisions){const precision=precisions[title];if(precision===undefined)return false;if(title===maxTitle)return true;if(precision<=maxPrecision){if(precision===maxPrecision){model.importWarning({type:'VSyncAuditor',message:'Encountered two different VSync events ('+
-maxTitle+', '+title+') with the same precision, '+'ignoring the newer one ('+title+')',showToUser:false,});}
-return false;}
-maxPrecision=precision;maxTitle=title;times=[];return true;}
-for(const pid in model.processes){const process=model.processes[pid];for(const cid in process.counters){if(useInstead(cid,VSYNC_COUNTER_PRECISIONS)){const counter=process.counters[cid];for(let i=0;i<counter.series.length;i++){const series=counter.series[i];Array.prototype.push.apply(times,series.timestamps);}}}
-for(const tid in process.threads){const thread=process.threads[tid];for(let i=0;i<thread.sliceGroup.slices.length;i++){const slice=thread.sliceGroup.slices[i];if(useInstead(slice.title,VSYNC_SLICE_PRECISIONS)){times.push(slice.start);}else if(useInstead(slice.title,BEGIN_FRAME_SLICE_PRECISION)&&slice.args.args&&slice.args.args.frame_time_us){times.push(slice.args.args.frame_time_us/1000.0);}}}}
-times.sort(function(x,y){return x-y;});return filterDuplicateTimestamps(times);}};tr.c.Auditor.register(VSyncAuditor);return{VSyncAuditor,};});'use strict';tr.exportTo('tr.importer',function(){function EmptyImporter(events){this.importPriority=0;}
-EmptyImporter.canImport=function(eventData){if(eventData instanceof Array&&eventData.length===0){return true;}
-if(typeof(eventData)==='string'||eventData instanceof String){return eventData.length===0;}
-return false;};EmptyImporter.prototype={__proto__:tr.importer.Importer.prototype,get importerName(){return'EmptyImporter';}};tr.importer.Importer.register(EmptyImporter);return{EmptyImporter,};});'use strict';tr.exportTo('tr.model.um',function(){function AnimationExpectation(parentModel,initiatorTitle,start,duration){tr.model.um.UserExpectation.call(this,parentModel,initiatorTitle,start,duration);this.frameEvents_=undefined;}
-AnimationExpectation.prototype={__proto__:tr.model.um.UserExpectation.prototype,constructor:AnimationExpectation,get frameEvents(){if(this.frameEvents_){return this.frameEvents_;}
-this.frameEvents_=new tr.model.EventSet();this.associatedEvents.forEach(function(event){if(event.title===tr.model.helpers.IMPL_RENDERING_STATS){this.frameEvents_.push(event);}},this);return this.frameEvents_;}};tr.model.um.UserExpectation.subTypes.register(AnimationExpectation,{stageTitle:'Animation',colorId:tr.b.ColorScheme.getColorIdForReservedName('rail_animation')});return{AnimationExpectation,};});'use strict';tr.exportTo('tr.importer',function(){function ProtoExpectation(type,initiatorType){this.type=type;this.initiatorType=initiatorType;this.start=Infinity;this.end=-Infinity;this.associatedEvents=new tr.model.EventSet();this.isAnimationBegin=false;}
-ProtoExpectation.RESPONSE_TYPE='r';ProtoExpectation.ANIMATION_TYPE='a';ProtoExpectation.IGNORED_TYPE='ignored';const INITIATOR_HIERARCHY=[tr.model.um.INITIATOR_TYPE.PINCH,tr.model.um.INITIATOR_TYPE.FLING,tr.model.um.INITIATOR_TYPE.MOUSE_WHEEL,tr.model.um.INITIATOR_TYPE.SCROLL,tr.model.um.INITIATOR_TYPE.VR,tr.model.um.INITIATOR_TYPE.VIDEO,tr.model.um.INITIATOR_TYPE.WEBGL,tr.model.um.INITIATOR_TYPE.CSS,tr.model.um.INITIATOR_TYPE.MOUSE,tr.model.um.INITIATOR_TYPE.KEYBOARD,tr.model.um.INITIATOR_TYPE.TAP,tr.model.um.INITIATOR_TYPE.TOUCH];function combineInitiatorTypes(title1,title2){for(const item of INITIATOR_HIERARCHY){if(title1===item||title2===item)return item;}
-throw new Error('Invalid titles in combineInitiatorTypes');}
-ProtoExpectation.prototype={get isValid(){return this.end>this.start;},containsTypeNames(typeNames){return this.associatedEvents.some(x=>typeNames.indexOf(x.typeName)>=0);},containsSliceTitle(title){return this.associatedEvents.some(x=>title===x.title);},createInteractionRecord(model){if(this.type!==ProtoExpectation.IGNORED_TYPE&&!this.isValid){model.importWarning({type:'ProtoExpectation',message:'Please file a bug with this trace. '+this.debug(),showToUser:true});return undefined;}
-const duration=this.end-this.start;let ir=undefined;switch(this.type){case ProtoExpectation.RESPONSE_TYPE:ir=new tr.model.um.ResponseExpectation(model,this.initiatorType,this.start,duration,this.isAnimationBegin);break;case ProtoExpectation.ANIMATION_TYPE:ir=new tr.model.um.AnimationExpectation(model,this.initiatorType,this.start,duration);break;}
-if(!ir)return undefined;ir.sourceEvents.addEventSet(this.associatedEvents);function pushAssociatedEvents(event){ir.associatedEvents.push(event);if(event.associatedEvents){ir.associatedEvents.addEventSet(event.associatedEvents);}}
-this.associatedEvents.forEach(function(event){pushAssociatedEvents(event);if(event.subSlices){event.subSlices.forEach(pushAssociatedEvents);}});return ir;},merge(other){this.initiatorType=combineInitiatorTypes(this.initiatorType,other.initiatorType);this.associatedEvents.addEventSet(other.associatedEvents);this.start=Math.min(this.start,other.start);this.end=Math.max(this.end,other.end);if(other.isAnimationBegin){this.isAnimationBegin=true;}},pushEvent(event){this.start=Math.min(this.start,event.start);this.end=Math.max(this.end,event.end);this.associatedEvents.push(event);},pushSample(sample){this.start=Math.min(this.start,sample.timestamp);this.end=Math.max(this.end,sample.timestamp);this.associatedEvents.push(sample);},containsTimestampInclusive(timestamp){return(this.start<=timestamp)&&(timestamp<=this.end);},intersects(other){return(other.start<this.end)&&(other.end>this.start);},isNear(event,threshold){return(this.end+threshold)>event.start;},debug(){let debugString=this.type+'(';debugString+=parseInt(this.start)+' ';debugString+=parseInt(this.end);this.associatedEvents.forEach(function(event){debugString+=' '+event.typeName;});return debugString+')';}};return{ProtoExpectation,};});'use strict';tr.exportTo('tr.importer',function(){const ProtoExpectation=tr.importer.ProtoExpectation;const INITIATOR_TYPE=tr.model.um.INITIATOR_TYPE;const INPUT_TYPE=tr.e.cc.INPUT_EVENT_TYPE_NAMES;const KEYBOARD_TYPE_NAMES=[INPUT_TYPE.CHAR,INPUT_TYPE.KEY_DOWN_RAW,INPUT_TYPE.KEY_DOWN,INPUT_TYPE.KEY_UP];const MOUSE_RESPONSE_TYPE_NAMES=[INPUT_TYPE.CLICK,INPUT_TYPE.CONTEXT_MENU];const MOUSE_WHEEL_TYPE_NAMES=[INPUT_TYPE.MOUSE_WHEEL];const MOUSE_DRAG_TYPE_NAMES=[INPUT_TYPE.MOUSE_DOWN,INPUT_TYPE.MOUSE_MOVE,INPUT_TYPE.MOUSE_UP];const TAP_TYPE_NAMES=[INPUT_TYPE.TAP,INPUT_TYPE.TAP_CANCEL,INPUT_TYPE.TAP_DOWN];const PINCH_TYPE_NAMES=[INPUT_TYPE.PINCH_BEGIN,INPUT_TYPE.PINCH_END,INPUT_TYPE.PINCH_UPDATE];const FLING_TYPE_NAMES=[INPUT_TYPE.FLING_CANCEL,INPUT_TYPE.FLING_START];const TOUCH_TYPE_NAMES=[INPUT_TYPE.TOUCH_END,INPUT_TYPE.TOUCH_MOVE,INPUT_TYPE.TOUCH_START];const SCROLL_TYPE_NAMES=[INPUT_TYPE.SCROLL_BEGIN,INPUT_TYPE.SCROLL_END,INPUT_TYPE.SCROLL_UPDATE];const ALL_HANDLED_TYPE_NAMES=[].concat(KEYBOARD_TYPE_NAMES,MOUSE_RESPONSE_TYPE_NAMES,MOUSE_WHEEL_TYPE_NAMES,MOUSE_DRAG_TYPE_NAMES,PINCH_TYPE_NAMES,TAP_TYPE_NAMES,FLING_TYPE_NAMES,TOUCH_TYPE_NAMES,SCROLL_TYPE_NAMES);const RENDERER_FLING_TITLE='InputHandlerProxy::HandleGestureFling::started';const PLAYBACK_EVENT_TITLE='VideoPlayback';const CSS_ANIMATION_TITLE='Animation';const VR_COUNTER_NAMES=['gpu.WebVR FPS','gpu.WebVR frame time (ms)','gpu.WebVR pose prediction (ms)',];const VR_EVENT_NAMES=['VrShellGl::AcquireFrame','VrShellGl::DrawFrame','VrShellGl::DrawSubmitFrameWhenReady','VrShellGl::DrawUiView','VrShellGl::UpdateController',];const VR_RESPONSE_MS=500;const INPUT_MERGE_THRESHOLD_MS=200;const ANIMATION_MERGE_THRESHOLD_MS=32;const MOUSE_WHEEL_THRESHOLD_MS=40;const MOUSE_MOVE_THRESHOLD_MS=40;function compareEvents(x,y){if(x.start!==y.start){return x.start-y.start;}
-if(x.end!==y.end){return x.end-y.end;}
-if(x.guid&&y.guid){return x.guid-y.guid;}
-return 0;}
-function forEventTypesIn(events,typeNames,cb,opt_this){events.forEach(function(event){if(typeNames.indexOf(event.typeName)>=0){cb.call(opt_this,event);}});}
-function causedFrame(event){return event.associatedEvents.some(x=>x.title===tr.model.helpers.IMPL_RENDERING_STATS);}
-function getSortedFrameEventsByProcess(modelHelper){const frameEventsByPid={};for(const[pid,rendererHelper]of
-Object.entries(modelHelper.rendererHelpers)){frameEventsByPid[pid]=rendererHelper.getFrameEventsInRange(tr.model.helpers.IMPL_FRAMETIME_TYPE,modelHelper.model.bounds);}
-return frameEventsByPid;}
-function getSortedInputEvents(modelHelper){const inputEvents=[];const browserProcess=modelHelper.browserHelper.process;const mainThread=browserProcess.findAtMostOneThreadNamed('CrBrowserMain');for(const slice of mainThread.asyncSliceGroup.getDescendantEvents()){if(!slice.isTopLevel)continue;if(!(slice instanceof tr.e.cc.InputLatencyAsyncSlice))continue;if(isNaN(slice.start)||isNaN(slice.duration)||isNaN(slice.end)){continue;}
-inputEvents.push(slice);}
-return inputEvents.sort(compareEvents);}
-function findProtoExpectations(modelHelper,sortedInputEvents,warn){const protoExpectations=[];const handlers=[handleKeyboardEvents,handleMouseResponseEvents,handleMouseWheelEvents,handleMouseDragEvents,handleTapResponseEvents,handlePinchEvents,handleFlingEvents,handleTouchEvents,handleScrollEvents,handleCSSAnimations,handleWebGLAnimations,handleVideoAnimations,handleVrAnimations,];handlers.forEach(function(handler){protoExpectations.push.apply(protoExpectations,handler(modelHelper,sortedInputEvents,warn));});protoExpectations.sort(compareEvents);return protoExpectations;}
-function handleKeyboardEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];forEventTypesIn(sortedInputEvents,KEYBOARD_TYPE_NAMES,function(event){const pe=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.KEYBOARD);pe.pushEvent(event);protoExpectations.push(pe);});return protoExpectations;}
-function handleMouseResponseEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];forEventTypesIn(sortedInputEvents,MOUSE_RESPONSE_TYPE_NAMES,function(event){const pe=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.MOUSE);pe.pushEvent(event);protoExpectations.push(pe);});return protoExpectations;}
-function handleMouseWheelEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];let currentPE=undefined;let prevEvent_=undefined;forEventTypesIn(sortedInputEvents,MOUSE_WHEEL_TYPE_NAMES,function(event){const prevEvent=prevEvent_;prevEvent_=event;if(currentPE&&(prevEvent.start+MOUSE_WHEEL_THRESHOLD_MS)>=event.start){if(currentPE.type===ProtoExpectation.ANIMATION_TYPE){currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.MOUSE_WHEEL);currentPE.pushEvent(event);protoExpectations.push(currentPE);}
-return;}
-currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.MOUSE_WHEEL);currentPE.pushEvent(event);protoExpectations.push(currentPE);});return protoExpectations;}
-function handleMouseDragEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];let currentPE=undefined;let mouseDownEvent=undefined;forEventTypesIn(sortedInputEvents,MOUSE_DRAG_TYPE_NAMES,function(event){switch(event.typeName){case INPUT_TYPE.MOUSE_DOWN:if(causedFrame(event)){const pe=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.MOUSE);pe.pushEvent(event);protoExpectations.push(pe);}else{mouseDownEvent=event;}
-break;case INPUT_TYPE.MOUSE_MOVE:if(!causedFrame(event)){const pe=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);pe.pushEvent(event);protoExpectations.push(pe);}else if(!currentPE||!currentPE.isNear(event,MOUSE_MOVE_THRESHOLD_MS)){currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.MOUSE);currentPE.pushEvent(event);if(mouseDownEvent){currentPE.associatedEvents.push(mouseDownEvent);mouseDownEvent=undefined;}
-protoExpectations.push(currentPE);}else{if(currentPE.type===ProtoExpectation.ANIMATION_TYPE){currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.MOUSE);currentPE.pushEvent(event);protoExpectations.push(currentPE);}}
-break;case INPUT_TYPE.MOUSE_UP:if(!mouseDownEvent){const pe=new ProtoExpectation(causedFrame(event)?ProtoExpectation.RESPONSE_TYPE:ProtoExpectation.IGNORED_TYPE,INITIATOR_TYPE.MOUSE);pe.pushEvent(event);protoExpectations.push(pe);break;}
-if(currentPE){currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.MOUSE);if(mouseDownEvent){currentPE.associatedEvents.push(mouseDownEvent);}
-currentPE.pushEvent(event);protoExpectations.push(currentPE);}
-mouseDownEvent=undefined;currentPE=undefined;break;}});if(mouseDownEvent){currentPE=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);currentPE.pushEvent(mouseDownEvent);protoExpectations.push(currentPE);}
-return protoExpectations;}
-function handleTapResponseEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];let currentPE=undefined;forEventTypesIn(sortedInputEvents,TAP_TYPE_NAMES,function(event){switch(event.typeName){case INPUT_TYPE.TAP_DOWN:currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.TAP);currentPE.pushEvent(event);protoExpectations.push(currentPE);break;case INPUT_TYPE.TAP:if(currentPE){currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.TAP);currentPE.pushEvent(event);protoExpectations.push(currentPE);}
-currentPE=undefined;break;case INPUT_TYPE.TAP_CANCEL:if(!currentPE){const pe=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);pe.pushEvent(event);protoExpectations.push(pe);break;}
-if(currentPE.isNear(event,INPUT_MERGE_THRESHOLD_MS)){currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.TAP);currentPE.pushEvent(event);protoExpectations.push(currentPE);}
-currentPE=undefined;break;}});return protoExpectations;}
-function handlePinchEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];let currentPE=undefined;let sawFirstUpdate=false;const modelBounds=modelHelper.model.bounds;forEventTypesIn(sortedInputEvents,PINCH_TYPE_NAMES,function(event){switch(event.typeName){case INPUT_TYPE.PINCH_BEGIN:if(currentPE&&currentPE.isNear(event,INPUT_MERGE_THRESHOLD_MS)){currentPE.pushEvent(event);break;}
-currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.PINCH);currentPE.pushEvent(event);currentPE.isAnimationBegin=true;protoExpectations.push(currentPE);sawFirstUpdate=false;break;case INPUT_TYPE.PINCH_UPDATE:if(!currentPE||((currentPE.type===ProtoExpectation.RESPONSE_TYPE)&&sawFirstUpdate)||!currentPE.isNear(event,INPUT_MERGE_THRESHOLD_MS)){currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.PINCH);currentPE.pushEvent(event);protoExpectations.push(currentPE);}else{currentPE.pushEvent(event);sawFirstUpdate=true;}
-break;case INPUT_TYPE.PINCH_END:if(currentPE){currentPE.pushEvent(event);}else{const pe=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);pe.pushEvent(event);protoExpectations.push(pe);}
-currentPE=undefined;break;}});return protoExpectations;}
-function handleFlingEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];let currentPE=undefined;function isRendererFling(event){return event.title===RENDERER_FLING_TITLE;}
-const browserHelper=modelHelper.browserHelper;const flingEvents=browserHelper.getAllAsyncSlicesMatching(isRendererFling);forEventTypesIn(sortedInputEvents,FLING_TYPE_NAMES,function(event){flingEvents.push(event);});flingEvents.sort(compareEvents);flingEvents.forEach(function(event){if(event.title===RENDERER_FLING_TITLE){if(currentPE){currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.FLING);currentPE.pushEvent(event);protoExpectations.push(currentPE);}
-return;}
-switch(event.typeName){case INPUT_TYPE.FLING_START:if(currentPE){warn({type:'UserModelBuilder',message:'Unexpected FlingStart',showToUser:false,});currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.FLING);currentPE.pushEvent(event);currentPE.end=0;protoExpectations.push(currentPE);}
-break;case INPUT_TYPE.FLING_CANCEL:if(currentPE){currentPE.pushEvent(event);currentPE.end=event.start;currentPE=undefined;}else{const pe=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);pe.pushEvent(event);protoExpectations.push(pe);}
-break;}});if(currentPE&&!currentPE.end){currentPE.end=modelHelper.model.bounds.max;}
-return protoExpectations;}
-function handleTouchEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];let currentPE=undefined;let sawFirstMove=false;forEventTypesIn(sortedInputEvents,TOUCH_TYPE_NAMES,function(event){switch(event.typeName){case INPUT_TYPE.TOUCH_START:if(currentPE){currentPE.pushEvent(event);}else{currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.TOUCH);currentPE.pushEvent(event);currentPE.isAnimationBegin=true;protoExpectations.push(currentPE);sawFirstMove=false;}
-break;case INPUT_TYPE.TOUCH_MOVE:if(!currentPE){currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.TOUCH);currentPE.pushEvent(event);protoExpectations.push(currentPE);break;}
-if((sawFirstMove&&(currentPE.type===ProtoExpectation.RESPONSE_TYPE))||!currentPE.isNear(event,INPUT_MERGE_THRESHOLD_MS)){const prevEnd=currentPE.end;currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.TOUCH);currentPE.pushEvent(event);currentPE.start=prevEnd;protoExpectations.push(currentPE);}else{currentPE.pushEvent(event);sawFirstMove=true;}
-break;case INPUT_TYPE.TOUCH_END:if(!currentPE){const pe=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);pe.pushEvent(event);protoExpectations.push(pe);break;}
-if(currentPE.isNear(event,INPUT_MERGE_THRESHOLD_MS)){currentPE.pushEvent(event);}else{const pe=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);pe.pushEvent(event);protoExpectations.push(pe);}
-currentPE=undefined;break;}});return protoExpectations;}
-function handleScrollEvents(modelHelper,sortedInputEvents,warn){const protoExpectations=[];let currentPE=undefined;let sawFirstUpdate=false;forEventTypesIn(sortedInputEvents,SCROLL_TYPE_NAMES,function(event){switch(event.typeName){case INPUT_TYPE.SCROLL_BEGIN:currentPE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.SCROLL);currentPE.pushEvent(event);currentPE.isAnimationBegin=true;protoExpectations.push(currentPE);sawFirstUpdate=false;break;case INPUT_TYPE.SCROLL_UPDATE:if(currentPE){if(currentPE.isNear(event,INPUT_MERGE_THRESHOLD_MS)&&((currentPE.type===ProtoExpectation.ANIMATION_TYPE)||!sawFirstUpdate)){currentPE.pushEvent(event);sawFirstUpdate=true;}else{currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.SCROLL);currentPE.pushEvent(event);protoExpectations.push(currentPE);}}else{currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.SCROLL);currentPE.pushEvent(event);protoExpectations.push(currentPE);}
-break;case INPUT_TYPE.SCROLL_END:if(!currentPE){warn({type:'UserModelBuilder',message:'Unexpected ScrollEnd',showToUser:false,});const pe=new ProtoExpectation(ProtoExpectation.IGNORED_TYPE);pe.pushEvent(event);protoExpectations.push(pe);break;}
-currentPE.pushEvent(event);break;}});return protoExpectations;}
-function handleVideoAnimations(modelHelper,sortedInputEvents,warn){const events=[];for(const pid in modelHelper.rendererHelpers){for(const tid in modelHelper.rendererHelpers[pid].process.threads){for(const asyncSlice of
-modelHelper.rendererHelpers[pid].process.threads[tid].asyncSliceGroup.slices){if(asyncSlice.title===PLAYBACK_EVENT_TITLE){events.push(asyncSlice);}}}}
-events.sort(tr.importer.compareEvents);const protoExpectations=[];for(const event of events){const currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.VIDEO);currentPE.start=event.start;currentPE.end=event.end;currentPE.pushEvent(event);protoExpectations.push(currentPE);}
-return protoExpectations;}
-function handleVrAnimations(modelHelper,sortedInputEvents,warn){const events=[];const processes=[];if(typeof modelHelper.gpuHelper!=='undefined'){processes.push(modelHelper.gpuHelper.process);}
-for(const helper of Object.values(modelHelper.rendererHelpers)){processes.push(helper.process);}
-for(const helper of Object.values(modelHelper.browserHelpers)){processes.push(helper.process);}
-let vrCounterStart=Number.MAX_SAFE_INTEGER;let vrEventStart=Number.MAX_SAFE_INTEGER;for(const proc of processes){for(const[counterName,counterSeries]of
-Object.entries(proc.counters)){if(VR_COUNTER_NAMES.includes(counterName)){for(const series of counterSeries.series){for(const sample of series.samples){events.push(sample);vrCounterStart=Math.min(vrCounterStart,sample.timestamp);}}}}
-for(const thread of Object.values(proc.threads)){for(const container of thread.childEventContainers()){for(const slice of container.slices){if(VR_EVENT_NAMES.includes(slice.title)){events.push(slice);vrEventStart=Math.min(vrEventStart,slice.start);}}}}}
-if(events.length===0){return[];}
-events.sort(function(x,y){if(x.range.min!==y.range.min){return x.range.min-y.range.min;}
-return x.guid-y.guid;});vrCounterStart=(vrCounterStart===Number.MAX_SAFE_INTEGER)?0:vrCounterStart;vrEventStart=(vrEventStart===Number.MAX_SAFE_INTEGER)?0:vrEventStart;const vrAnimationStart=Math.max(vrCounterStart,vrEventStart)+
-VR_RESPONSE_MS;const responsePE=new ProtoExpectation(ProtoExpectation.RESPONSE_TYPE,INITIATOR_TYPE.VR);const animationPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.VR);let lastResponseEvent;for(const event of events){if(event.range.min<vrAnimationStart){if(event instanceof tr.model.CounterSample){responsePE.pushSample(event);}else{responsePE.pushEvent(event);}
-lastResponseEvent=event;}else{if(event instanceof tr.model.CounterSample){animationPE.pushSample(event);}else{animationPE.pushEvent(event);}}}
-if(lastResponseEvent instanceof tr.model.CounterSample){animationPE.pushSample(lastResponseEvent);}else{animationPE.pushEvent(lastResponseEvent);}
-return[responsePE,animationPE];}
-function handleCSSAnimations(modelHelper,sortedInputEvents,warn){const animationEvents=modelHelper.browserHelper.getAllAsyncSlicesMatching(function(event){return((event.title===CSS_ANIMATION_TITLE)&&event.isTopLevel&&(event.duration>0));});const animationRanges=[];function pushAnimationRange(start,end,animation){const range=tr.b.math.Range.fromExplicitRange(start,end);range.animation=animation;animationRanges.push(range);}
-animationEvents.forEach(function(animation){if(animation.subSlices.length===0){pushAnimationRange(animation.start,animation.end,animation);}else{let start=undefined;animation.subSlices.forEach(function(sub){if((sub.args.data.state==='running')&&(start===undefined)){start=sub.start;}else if((sub.args.data.state==='paused')||(sub.args.data.state==='idle')||(sub.args.data.state==='finished')){if(start===undefined){start=modelHelper.model.bounds.min;}
-pushAnimationRange(start,sub.start,animation);start=undefined;}});if(start!==undefined){pushAnimationRange(start,animation.end,animation);}}});return animationRanges.map(function(range){const protoExpectation=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.CSS);protoExpectation.start=range.min;protoExpectation.end=range.max;protoExpectation.associatedEvents.push(range.animation);return protoExpectation;});}
-function findWebGLEvents(modelHelper,mailboxEvents,animationEvents){for(const event of modelHelper.model.getDescendantEvents()){if(event.title==='DrawingBuffer::prepareMailbox'){mailboxEvents.push(event);}else if(event.title==='PageAnimator::serviceScriptedAnimations'){animationEvents.push(event);}}}
-function findMailboxEventsNearAnimationEvents(mailboxEvents,animationEvents){if(animationEvents.length===0)return[];mailboxEvents.sort(compareEvents);animationEvents.sort(compareEvents);const animationIterator=animationEvents[Symbol.iterator]();let animationEvent=animationIterator.next().value;const filteredEvents=[];for(const event of mailboxEvents){while(animationEvent&&(animationEvent.start<(event.start-ANIMATION_MERGE_THRESHOLD_MS))){animationEvent=animationIterator.next().value;}
-if(!animationEvent)break;if(animationEvent.start<(event.start+ANIMATION_MERGE_THRESHOLD_MS)){filteredEvents.push(event);}}
-return filteredEvents;}
-function createProtoExpectationsFromMailboxEvents(mailboxEvents){const protoExpectations=[];let currentPE=undefined;for(const event of mailboxEvents){if(currentPE===undefined||!currentPE.isNear(event,ANIMATION_MERGE_THRESHOLD_MS)){currentPE=new ProtoExpectation(ProtoExpectation.ANIMATION_TYPE,INITIATOR_TYPE.WEBGL);currentPE.pushEvent(event);protoExpectations.push(currentPE);}else{currentPE.pushEvent(event);}}
-return protoExpectations;}
-function handleWebGLAnimations(modelHelper,sortedInputEvents,warn){const prepareMailboxEvents=[];const scriptedAnimationEvents=[];findWebGLEvents(modelHelper,prepareMailboxEvents,scriptedAnimationEvents);const webGLMailboxEvents=findMailboxEventsNearAnimationEvents(prepareMailboxEvents,scriptedAnimationEvents);return createProtoExpectationsFromMailboxEvents(webGLMailboxEvents);}
-function postProcessProtoExpectations(modelHelper,protoExpectations){protoExpectations=findFrameEventsForAnimations(modelHelper,protoExpectations);protoExpectations=mergeIntersectingResponses(protoExpectations);protoExpectations=mergeIntersectingAnimations(protoExpectations);protoExpectations=fixResponseAnimationStarts(protoExpectations);protoExpectations=fixTapResponseTouchAnimations(protoExpectations);return protoExpectations;}
-function mergeIntersectingResponses(protoExpectations){const newPEs=[];while(protoExpectations.length){const pe=protoExpectations.shift();newPEs.push(pe);if(pe.type!==ProtoExpectation.RESPONSE_TYPE)continue;for(let i=0;i<protoExpectations.length;++i){const otherPE=protoExpectations[i];if(otherPE.type!==pe.type)continue;if(!otherPE.intersects(pe))continue;const typeNames=pe.associatedEvents.map(function(event){return event.typeName;});if(otherPE.containsTypeNames(typeNames))continue;pe.merge(otherPE);protoExpectations.splice(i,1);--i;}}
-return newPEs;}
-function mergeIntersectingAnimations(protoExpectations){const newPEs=[];while(protoExpectations.length){const pe=protoExpectations.shift();newPEs.push(pe);if(pe.type!==ProtoExpectation.ANIMATION_TYPE)continue;const isCSS=pe.initiatorType===INITIATOR_TYPE.CSS;const isFling=pe.containsTypeNames([INPUT_TYPE.FLING_START]);const isVideo=pe.initiatorType===INITIATOR_TYPE.VIDEO;for(let i=0;i<protoExpectations.length;++i){const otherPE=protoExpectations[i];if(otherPE.type!==pe.type)continue;if((isCSS&&otherPE.initiatorType!==INITIATOR_TYPE.CSS)||isFling!==otherPE.containsTypeNames([INPUT_TYPE.FLING_START])||isVideo&&otherPE.initiatorType!==INITIATOR_TYPE.VIDEO||otherPE.initiatorType===INITIATOR_TYPE.VR){continue;}
-if(isCSS){if(!pe.isNear(otherPE,ANIMATION_MERGE_THRESHOLD_MS)){continue;}}else if(!otherPE.intersects(pe)){continue;}
-pe.merge(otherPE);protoExpectations.splice(i,1);--i;}}
-return newPEs;}
-function fixResponseAnimationStarts(protoExpectations){protoExpectations.forEach(function(ape){if(ape.type!==ProtoExpectation.ANIMATION_TYPE){return;}
-protoExpectations.forEach(function(rpe){if(rpe.type!==ProtoExpectation.RESPONSE_TYPE){return;}
-if(!ape.containsTimestampInclusive(rpe.end)){return;}
-if(ape.containsTimestampInclusive(rpe.start)){return;}
-ape.start=rpe.end;});});return protoExpectations;}
-function fixTapResponseTouchAnimations(protoExpectations){function isTapResponse(pe){return(pe.type===ProtoExpectation.RESPONSE_TYPE)&&pe.containsTypeNames([INPUT_TYPE.TAP]);}
-function isTouchAnimation(pe){return(pe.type===ProtoExpectation.ANIMATION_TYPE)&&pe.containsTypeNames([INPUT_TYPE.TOUCH_MOVE])&&!pe.containsTypeNames([INPUT_TYPE.SCROLL_UPDATE,INPUT_TYPE.PINCH_UPDATE]);}
-const newPEs=[];while(protoExpectations.length){const pe=protoExpectations.shift();newPEs.push(pe);const peIsTapResponse=isTapResponse(pe);const peIsTouchAnimation=isTouchAnimation(pe);if(!peIsTapResponse&&!peIsTouchAnimation){continue;}
-for(let i=0;i<protoExpectations.length;++i){const otherPE=protoExpectations[i];if(!otherPE.intersects(pe))continue;if(peIsTapResponse&&!isTouchAnimation(otherPE))continue;if(peIsTouchAnimation&&!isTapResponse(otherPE))continue;pe.type=ProtoExpectation.RESPONSE_TYPE;pe.merge(otherPE);protoExpectations.splice(i,1);--i;}}
-return newPEs;}
-function findFrameEventsForAnimations(modelHelper,protoExpectations){const newPEs=[];const frameEventsByPid=getSortedFrameEventsByProcess(modelHelper);for(const pe of protoExpectations){if(pe.type!==ProtoExpectation.ANIMATION_TYPE){newPEs.push(pe);continue;}
-const frameEvents=[];for(const pid of Object.keys(modelHelper.rendererHelpers)){const range=tr.b.math.Range.fromExplicitRange(pe.start,pe.end);frameEvents.push.apply(frameEvents,range.filterArray(frameEventsByPid[pid],e=>e.start));}
-if(frameEvents.length===0&&!(pe.initiatorType===INITIATOR_TYPE.WEBGL||pe.initiatorType===INITIATOR_TYPE.VR)){pe.type=ProtoExpectation.IGNORED_TYPE;newPEs.push(pe);continue;}
-pe.associatedEvents.addEventSet(frameEvents);newPEs.push(pe);}
-return newPEs;}
-function checkAllInputEventsHandled(modelHelper,sortedInputEvents,protoExpectations,warn){const handledEvents=[];protoExpectations.forEach(function(protoExpectation){protoExpectation.associatedEvents.forEach(function(event){if((event.title===CSS_ANIMATION_TITLE)&&(event.subSlices.length>0)){return;}
-if((handledEvents.indexOf(event)>=0)&&(event.title!==tr.model.helpers.IMPL_RENDERING_STATS)){warn({type:'UserModelBuilder',message:`double-handled event: ${event.typeName} @ ${event.start}`,showToUser:false,});return;}
-handledEvents.push(event);});});sortedInputEvents.forEach(function(event){if(handledEvents.indexOf(event)<0){warn({type:'UserModelBuilder',message:`double-handled event: ${event.typeName} @ ${event.start}`,showToUser:false,});}});}
-function findInputExpectations(modelHelper){let warning;function warn(w){if(warning)return;warning=w;}
-const sortedInputEvents=getSortedInputEvents(modelHelper);let protoExpectations=findProtoExpectations(modelHelper,sortedInputEvents,warn);protoExpectations=postProcessProtoExpectations(modelHelper,protoExpectations);checkAllInputEventsHandled(modelHelper,sortedInputEvents,protoExpectations,warn);if(warning)modelHelper.model.importWarning(warning);const expectations=[];protoExpectations.forEach(function(protoExpectation){const ir=protoExpectation.createInteractionRecord(modelHelper.model);if(ir){expectations.push(ir);}});return expectations;}
-return{findInputExpectations,compareEvents,CSS_ANIMATION_TITLE,};});'use strict';tr.exportTo('tr.b',function(){class FixedColorScheme{constructor(namesToColors){this.namesToColors_=namesToColors;}
-static fromNames(names){const namesToColors=new Map();const generator=new tr.b.SinebowColorGenerator();for(const name of names){namesToColors.set(name,generator.colorForKey(name));}
-return new FixedColorScheme(namesToColors);}
-getColor(name){const color=this.namesToColors_.get(name);if(color===undefined)throw new Error('Unknown color: '+name);return color;}}
-const MemoryColumnColorScheme=new FixedColorScheme(new Map([['used_memory_column',new tr.b.Color(0,0,255)],['older_used_memory_column',new tr.b.Color(153,204,255)],['tracing_memory_column',new tr.b.Color(153,153,153)]]));function FixedColorSchemeRegistry(){}
-FixedColorSchemeRegistry.lookUp=function(name){const info=this.findTypeInfoMatching(info=>info.metadata.name===name);if(!info)return undefined;return info.constructor();};const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);tr.b.decorateExtensionRegistry(FixedColorSchemeRegistry,options);return{MemoryColumnColorScheme,FixedColorScheme,FixedColorSchemeRegistry,};});'use strict';tr.exportTo('tr.e.chrome.chrome_processes',function(){const CHROME_PROCESS_NAMES={BROWSER:'browser_process',RENDERER:'renderer_processes',ALL:'all_processes',GPU:'gpu_process',PPAPI:'ppapi_process',UNKNOWN:'unknown_processes',};const PROCESS_COLOR_SCHEME_NAME='ChromeProcessNames';const PROCESS_COLOR_SCHEME=tr.b.FixedColorScheme.fromNames(Object.values(CHROME_PROCESS_NAMES));tr.b.FixedColorSchemeRegistry.register(()=>PROCESS_COLOR_SCHEME,{name:PROCESS_COLOR_SCHEME_NAME,});function canonicalizeName(name){return name.toLowerCase().replace(' ','_');}
-function canonicalizeProcessName(rawProcessName){if(!rawProcessName)return CHROME_PROCESS_NAMES.UNKNOWN;const baseCanonicalName=canonicalizeName(rawProcessName);switch(baseCanonicalName){case'renderer':return CHROME_PROCESS_NAMES.RENDERER;case'browser':return CHROME_PROCESS_NAMES.BROWSER;}
-if(Object.values(CHROME_PROCESS_NAMES).includes(baseCanonicalName)){return baseCanonicalName;}
-return CHROME_PROCESS_NAMES.UNKNOWN;}
-return{CHROME_PROCESS_NAMES,PROCESS_COLOR_SCHEME,PROCESS_COLOR_SCHEME_NAME,canonicalizeName,canonicalizeProcessName,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function perceptualBlend(ir,index,score){return Math.exp(1-score);}
-function filterExpectationsByRange(irs,opt_range){const filteredExpectations=[];irs.forEach(function(ir){if(!(ir instanceof tr.model.um.UserExpectation))return;if(!opt_range||opt_range.intersectsExplicitRangeInclusive(ir.start,ir.end)){filteredExpectations.push(ir);}});return filteredExpectations;}
-function splitGlobalDumpsByBrowserName(model,opt_rangeOfInterest){const chromeModelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const browserNameToGlobalDumps=new Map();const globalDumpToBrowserHelper=new WeakMap();if(chromeModelHelper){chromeModelHelper.browserHelpers.forEach(function(helper){const globalDumps=skipDumpsThatDoNotIntersectRange(helper.process.memoryDumps.map(d=>d.globalMemoryDump),opt_rangeOfInterest);globalDumps.forEach(function(globalDump){const existingHelper=globalDumpToBrowserHelper.get(globalDump);if(existingHelper!==undefined){throw new Error('Memory dump ID clash across multiple browsers '+'with PIDs: '+existingHelper.pid+' and '+helper.pid);}
-globalDumpToBrowserHelper.set(globalDump,helper);});makeKeyUniqueAndSet(browserNameToGlobalDumps,tr.e.chrome.chrome_processes.canonicalizeName(helper.browserName),globalDumps);});}
-const unclassifiedGlobalDumps=skipDumpsThatDoNotIntersectRange(model.globalMemoryDumps.filter(g=>!globalDumpToBrowserHelper.has(g)),opt_rangeOfInterest);if(unclassifiedGlobalDumps.length>0){makeKeyUniqueAndSet(browserNameToGlobalDumps,'unknown_browser',unclassifiedGlobalDumps);}
-return browserNameToGlobalDumps;}
-function makeKeyUniqueAndSet(map,key,value){let uniqueKey=key;let nextIndex=2;while(map.has(uniqueKey)){uniqueKey=key+nextIndex;nextIndex++;}
-map.set(uniqueKey,value);}
-function skipDumpsThatDoNotIntersectRange(dumps,opt_range){if(!opt_range)return dumps;return dumps.filter(d=>opt_range.intersectsExplicitRangeInclusive(d.start,d.end));}
-function hasCategoryAndName(event,category,title){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
-return{hasCategoryAndName,filterExpectationsByRange,perceptualBlend,splitGlobalDumpsByBrowserName};});'use strict';tr.exportTo('tr.e.chrome',function(){class EventFinderUtils{static hasCategoryAndName(event,category,title){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
-static getSortedMainThreadEventsByFrame(rendererHelper,eventTitle,eventCategory){const eventsByFrame=new Map();for(const ev of rendererHelper.mainThread.sliceGroup.childEvents()){if(rendererHelper.isTelemetryInternalEvent(ev))continue;if(!this.hasCategoryAndName(ev,eventCategory,eventTitle)){continue;}
-const frameIdRef=ev.args.frame;if(frameIdRef===undefined)continue;if(!eventsByFrame.has(frameIdRef)){eventsByFrame.set(frameIdRef,[]);}
-eventsByFrame.get(frameIdRef).push(ev);}
-return eventsByFrame;}
-static findLastEventStartingOnOrBeforeTimestamp(sortedEvents,timestamp){const firstIndexAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>timestamp);if(firstIndexAfterTimestamp===0)return undefined;return sortedEvents[firstIndexAfterTimestamp-1];}
-static findLastEventStartingBeforeTimestamp(sortedEvents,timestamp){const firstIndexAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>=timestamp);if(firstIndexAfterTimestamp===0)return undefined;return sortedEvents[firstIndexAfterTimestamp-1];}
-static findNextEventStartingOnOrAfterTimestamp(sortedEvents,timestamp){const firstIndexOnOrAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>=timestamp);if(firstIndexOnOrAfterTimestamp===sortedEvents.length){return undefined;}
-return sortedEvents[firstIndexOnOrAfterTimestamp];}
-static findNextEventStartingAfterTimestamp(sortedEvents,timestamp){const firstIndexOnOrAfterTimestamp=tr.b.findFirstTrueIndexInSortedArray(sortedEvents,e=>e.start>timestamp);if(firstIndexOnOrAfterTimestamp===sortedEvents.length){return undefined;}
-return sortedEvents[firstIndexOnOrAfterTimestamp];}}
-return{EventFinderUtils,};});'use strict';tr.exportTo('tr.e.chrome',function(){const TIME_TO_INTERACTIVE_WINDOW_SIZE_MS=5000;const ACTIVE_REQUEST_TOLERANCE=2;const FCI_MIN_CLUSTER_SEPARATION_MS=1000;const TASK_CLUSTER_HEAVINESS_THRESHOLD_MS=250;const ENDPOINT_TYPES={LONG_TASK_START:'LONG_TASK_START',LONG_TASK_END:'LONG_TASK_END',REQUEST_START:'REQUEST_START',REQUEST_END:'REQUEST_END'};function getEndpoints_(events,startType,endType){const endpoints=[];for(const event of events){endpoints.push({time:event.start,type:startType});endpoints.push({time:event.end,type:endType});}
-return endpoints;}
-function reachedTTIQuiscence_(timestamp,networkQuietWindowStart,mainThreadQuietWindowStart){if(networkQuietWindowStart===undefined||mainThreadQuietWindowStart===undefined){return false;}
-const mainThreadQuietForLongEnough=timestamp-mainThreadQuietWindowStart>=TIME_TO_INTERACTIVE_WINDOW_SIZE_MS;const networkQuietForLongEnough=timestamp-networkQuietWindowStart>=TIME_TO_INTERACTIVE_WINDOW_SIZE_MS;return mainThreadQuietForLongEnough&&networkQuietForLongEnough;}
-function findInteractiveTime(searchBegin,searchEnd,domContentLoadedEnd,longTasksInWindow,networkRequests){const longTaskEndpoints=getEndpoints_(longTasksInWindow,ENDPOINT_TYPES.LONG_TASK_START,ENDPOINT_TYPES.LONG_TASK_END);const networkRequestEndpoints=getEndpoints_(networkRequests,ENDPOINT_TYPES.REQUEST_START,ENDPOINT_TYPES.REQUEST_END);const endpoints=longTaskEndpoints.concat(networkRequestEndpoints);endpoints.sort((a,b)=>a.time-b.time);let networkQuietWindowStart=searchBegin;let mainThreadQuietWindowStart=searchBegin;let interactiveCandidate=undefined;let activeRequests=0;for(const endpoint of endpoints){if(reachedTTIQuiscence_(endpoint.time,networkQuietWindowStart,mainThreadQuietWindowStart)){interactiveCandidate=mainThreadQuietWindowStart;break;}
-switch(endpoint.type){case ENDPOINT_TYPES.LONG_TASK_START:mainThreadQuietWindowStart=undefined;break;case ENDPOINT_TYPES.LONG_TASK_END:mainThreadQuietWindowStart=endpoint.time;break;case ENDPOINT_TYPES.REQUEST_START:activeRequests++;if(activeRequests>ACTIVE_REQUEST_TOLERANCE){networkQuietWindowStart=undefined;}
-break;case ENDPOINT_TYPES.REQUEST_END:activeRequests--;if(activeRequests===ACTIVE_REQUEST_TOLERANCE){networkQuietWindowStart=endpoint.time;}
-break;default:throw new Error('Internal Error: Unhandled endpoint type.');}}
-if(interactiveCandidate===undefined&&reachedTTIQuiscence_(searchEnd,networkQuietWindowStart,mainThreadQuietWindowStart)){interactiveCandidate=mainThreadQuietWindowStart;}
-if(interactiveCandidate===undefined)return undefined;return Math.max(interactiveCandidate,domContentLoadedEnd);}
-function requiredFCIWindowSizeMs(timeSinceSearchBeginMs){const timeCoefficient=1/15*Math.log(2);const timeSinceSearchBeginSeconds=tr.b.convertUnit(timeSinceSearchBeginMs,tr.b.UnitPrefixScale.METRIC.MILLI,tr.b.UnitPrefixScale.METRIC.NONE);const windowSizeSeconds=4*Math.exp(-timeCoefficient*timeSinceSearchBeginSeconds)+1;return tr.b.convertUnit(windowSizeSeconds,tr.b.UnitPrefixScale.METRIC.NONE,tr.b.UnitPrefixScale.METRIC.MILLI);}
-class TaskCluster{constructor(tasksInClusterSorted){if(tasksInClusterSorted.length===0){throw new Error('Internal Error: TaskCluster must have non zero tasks');}
-for(let i=0;i<tasksInClusterSorted.length-1;i++){const durationBetweenTasks=tasksInClusterSorted[i+1].start-
-tasksInClusterSorted[i].end;if(durationBetweenTasks>=FCI_MIN_CLUSTER_SEPARATION_MS){throw new Error('Internal Error: Tasks in a TaskCluster cannot be '+'more than '+FCI_MIN_CLUSTER_SEPARATION_MS+' miliseconds apart');}
-if(durationBetweenTasks<-1e7){throw new Error('Internal Error: List of tasks used to construct '+'TaskCluster must be sorted.');}}
-this._clusterTasks=tasksInClusterSorted;}
-get start(){return this._clusterTasks[0].start;}
-get end(){return this._clusterTasks[this._clusterTasks.length-1].end;}
-isHeavy(){return this.end-this.start>TASK_CLUSTER_HEAVINESS_THRESHOLD_MS;}}
-function findFCITaskClusters(sortedLongTasks){const clusters=[];if(sortedLongTasks.length===0)return clusters;const firstTask=sortedLongTasks[0];const restOfTasks=sortedLongTasks.slice(1);let currentClusterTasks=[firstTask];for(const currTask of restOfTasks){const prevTask=currentClusterTasks[currentClusterTasks.length-1];if(currTask.start-prevTask.end<FCI_MIN_CLUSTER_SEPARATION_MS){currentClusterTasks.push(currTask);}else{clusters.push(new TaskCluster(currentClusterTasks));currentClusterTasks=[currTask];}}
-clusters.push(new TaskCluster(currentClusterTasks));return clusters;}
-function reachedFCIQuiescence_(timestamp,mainThreadQuietWindowStart,searchBegin){const quietWindowSize=timestamp-mainThreadQuietWindowStart;const timeSinceSearchBegin=mainThreadQuietWindowStart-searchBegin;const requiredWindowSize=requiredFCIWindowSizeMs(timeSinceSearchBegin);return quietWindowSize>requiredWindowSize;}
-function findFirstCpuIdleTime(searchBegin,searchEnd,domContentLoadedEnd,longTasksInWindow){const sortedLongTasks=longTasksInWindow.sort((a,b)=>a.start-b.start);const taskClusters=findFCITaskClusters(sortedLongTasks);const heavyTaskClusters=taskClusters.filter(cluster=>cluster.isHeavy());let quietWindowBegin=searchBegin;let fiCandidate=undefined;for(const cluster of heavyTaskClusters){if(reachedFCIQuiescence_(cluster.start,quietWindowBegin,searchBegin)){fiCandidate=quietWindowBegin;break;}
-quietWindowBegin=cluster.end;}
-if(fiCandidate===undefined){if(reachedFCIQuiescence_(searchEnd,quietWindowBegin,searchBegin)){fiCandidate=quietWindowBegin;}else{return undefined;}}
-return Math.max(fiCandidate,domContentLoadedEnd);}
-return{findInteractiveTime,findFirstCpuIdleTime,requiredFCIWindowSizeMs,findFCITaskClusters,};});'use strict';tr.exportTo('tr.model.um',function(){const LOAD_SUBTYPE_NAMES={SUCCESSFUL:'Successful',FAILED:'Failed',};const DOES_LOAD_SUBTYPE_NAME_EXIST={};for(const key in LOAD_SUBTYPE_NAMES){DOES_LOAD_SUBTYPE_NAME_EXIST[LOAD_SUBTYPE_NAMES[key]]=true;}
-function LoadExpectation(parentModel,initiatorTitle,start,duration,renderer,navigationStart,fmpEvent,dclEndEvent,cpuIdleTime,timeToInteractive,url,frameId){if(!DOES_LOAD_SUBTYPE_NAME_EXIST[initiatorTitle]){throw new Error(initiatorTitle+' is not in LOAD_SUBTYPE_NAMES');}
-tr.model.um.UserExpectation.call(this,parentModel,initiatorTitle,start,duration);this.renderProcess=renderer;this.renderMainThread=undefined;this.routingId=undefined;this.parentRoutingId=undefined;this.loadFinishedEvent=undefined;this.navigationStart=navigationStart;this.fmpEvent=fmpEvent;this.domContentLoadedEndEvent=dclEndEvent;this.firstCpuIdleTime=cpuIdleTime;this.timeToInteractive=timeToInteractive;this.url=url;this.frameId=frameId;}
-LoadExpectation.prototype={__proto__:tr.model.um.UserExpectation.prototype,constructor:LoadExpectation};tr.model.um.UserExpectation.subTypes.register(LoadExpectation,{stageTitle:'Load',colorId:tr.b.ColorScheme.getColorIdForReservedName('rail_load')});return{LOAD_SUBTYPE_NAMES,LoadExpectation,};});'use strict';tr.exportTo('tr.importer',function(){const LONG_TASK_THRESHOLD_MS=50;const TOP_LEVEL_TASK_TITLES=['TaskQueueManager::ProcessTaskFromWorkQueue','ThreadControllerImpl::DoWork',];function getNetworkEventsInRange(process,range){const networkEvents=[];for(const thread of Object.values(process.threads)){const threadHelper=new tr.model.helpers.ChromeThreadHelper(thread);const events=threadHelper.getNetworkEvents();for(const event of events){if(range.intersectsExplicitRangeInclusive(event.start,event.end)){networkEvents.push(event);}}}
-return networkEvents;}
-function findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ts){const objects=rendererHelper.process.objects;const frameLoaderInstances=objects.instancesByTypeName_.FrameLoader;if(frameLoaderInstances===undefined)return undefined;let snapshot;for(const instance of frameLoaderInstances){if(!instance.isAliveAt(ts))continue;const maybeSnapshot=instance.getSnapshotAt(ts);if(frameIdRef!==maybeSnapshot.args.frame.id_ref)continue;snapshot=maybeSnapshot;}
-return snapshot;}
-function findFirstMeaningfulPaintCandidates(rendererHelper){const candidatesForFrameId={};for(const ev of rendererHelper.process.getDescendantEvents()){if(!tr.e.chrome.EventFinderUtils.hasCategoryAndName(ev,'loading','firstMeaningfulPaintCandidate')){continue;}
-if(rendererHelper.isTelemetryInternalEvent(ev))continue;const frameIdRef=ev.args.frame;if(frameIdRef===undefined)continue;let list=candidatesForFrameId[frameIdRef];if(list===undefined){candidatesForFrameId[frameIdRef]=list=[];}
-list.push(ev);}
-return candidatesForFrameId;}
-function computeInteractivityMetricSample_(rendererHelper,navigationStart,fmpEvent,domContentLoadedEndEvent,searchWindowEnd){if(domContentLoadedEndEvent===undefined||fmpEvent===undefined){return{interactiveTime:undefined,firstCpuIdleTime:undefined};}
-const firstMeaningfulPaintTime=fmpEvent.start;const mainThreadTasks=[];for(const title of TOP_LEVEL_TASK_TITLES){mainThreadTasks.push(...rendererHelper.mainThread.findTopmostSlicesNamed(title));}
-const longTasks=mainThreadTasks.filter(task=>task.duration>=LONG_TASK_THRESHOLD_MS);const longTasksInWindow=longTasks.filter(task=>task.range.intersectsExplicitRangeInclusive(firstMeaningfulPaintTime,searchWindowEnd));const resourceLoadEvents=getNetworkEventsInRange(rendererHelper.process,tr.b.math.Range.fromExplicitRange(navigationStart.start,searchWindowEnd));const firstCpuIdleTime=tr.e.chrome.findFirstCpuIdleTime(firstMeaningfulPaintTime,searchWindowEnd,domContentLoadedEndEvent.start,longTasksInWindow);const interactiveTime=tr.e.chrome.findInteractiveTime(firstMeaningfulPaintTime,searchWindowEnd,domContentLoadedEndEvent.start,longTasksInWindow,resourceLoadEvents);return{interactiveTime,firstCpuIdleTime};}
-function constructLoadingExpectation_(rendererHelper,frameToDomContentLoadedEndEvents,navigationStart,fmpEvent,nextNavigationStart,url,frameId){const searchWindowEnd=nextNavigationStart!==undefined?nextNavigationStart.start:rendererHelper.modelHelper.chromeBounds.max;const dclTimesForFrame=frameToDomContentLoadedEndEvents.get(frameId)||[];const dclSearchRange=tr.b.math.Range.fromExplicitRange(navigationStart.start,searchWindowEnd);const dclTimesInWindow=dclSearchRange.filterArray(dclTimesForFrame,event=>event.start);let domContentLoadedEndEvent=undefined;if(dclTimesInWindow.length!==0){domContentLoadedEndEvent=dclTimesInWindow[dclTimesInWindow.length-1];}
-const{interactiveTime,firstCpuIdleTime}=computeInteractivityMetricSample_(rendererHelper,navigationStart,fmpEvent,domContentLoadedEndEvent,searchWindowEnd);const duration=(interactiveTime===undefined)?searchWindowEnd-navigationStart.start:interactiveTime-navigationStart.start;return new tr.model.um.LoadExpectation(rendererHelper.modelHelper.model,tr.model.um.LOAD_SUBTYPE_NAMES.SUCCESSFUL,navigationStart.start,duration,rendererHelper.process,navigationStart,fmpEvent,domContentLoadedEndEvent,firstCpuIdleTime,interactiveTime,url,frameId);}
-function collectLoadExpectationsForRenderer(rendererHelper){const samples=[];const frameToNavStartEvents=tr.e.chrome.EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'navigationStart','blink.user_timing');const frameToDomContentLoadedEndEvents=tr.e.chrome.EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'domContentLoadedEventEnd','blink.user_timing');function addSamples(frameIdRef,navigationStart,fmpMarkerEvent,nextNavigationStart){const timestamp=fmpMarkerEvent===undefined?navigationStart.start:fmpMarkerEvent.start;const snapshot=findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,timestamp);if(!snapshot||!snapshot.args.isLoadingMainFrame)return;const url=snapshot.args.documentLoaderURL;samples.push(constructLoadingExpectation_(rendererHelper,frameToDomContentLoadedEndEvents,navigationStart,fmpMarkerEvent,nextNavigationStart,url,frameIdRef));}
-const candidatesForFrameId=findFirstMeaningfulPaintCandidates(rendererHelper);for(const[frameIdRef,navStartEvents]of frameToNavStartEvents){const fmpCandidateList=candidatesForFrameId[frameIdRef]||[];for(let index=0;index<navStartEvents.length-1;index++){const currNavigation=navStartEvents[index];const nextNavigation=navStartEvents[index+1];const fmpCandidate=tr.e.chrome.EventFinderUtils.findLastEventStartingBeforeTimestamp(fmpCandidateList,nextNavigation.start);if(fmpCandidate!==undefined&&currNavigation.start<=fmpCandidate.start){addSamples(frameIdRef,currNavigation,fmpCandidate,nextNavigation);}else{addSamples(frameIdRef,currNavigation,undefined,nextNavigation);}}
-addSamples(frameIdRef,navStartEvents[navStartEvents.length-1],fmpCandidateList[fmpCandidateList.length-1],undefined);}
-return samples;}
-function findLoadExpectations(modelHelper){const loads=[];const chromeHelper=modelHelper.model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const pid in chromeHelper.rendererHelpers){const rendererHelper=chromeHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;loads.push.apply(loads,collectLoadExpectationsForRenderer(rendererHelper));}
-return loads;}
-return{findLoadExpectations,};});'use strict';tr.exportTo('tr.model.um',function(){function StartupExpectation(parentModel,start,duration){tr.model.um.UserExpectation.call(this,parentModel,'',start,duration);}
-StartupExpectation.prototype={__proto__:tr.model.um.UserExpectation.prototype,constructor:StartupExpectation};tr.model.um.UserExpectation.subTypes.register(StartupExpectation,{stageTitle:'Startup',colorId:tr.b.ColorScheme.getColorIdForReservedName('startup')});return{StartupExpectation,};});'use strict';tr.exportTo('tr.importer',function(){function getAllFrameEvents(modelHelper){const frameEvents=[];frameEvents.push.apply(frameEvents,modelHelper.browserHelper.getFrameEventsInRange(tr.model.helpers.IMPL_FRAMETIME_TYPE,modelHelper.model.bounds));for(const renderer of Object.values(modelHelper.rendererHelpers)){frameEvents.push.apply(frameEvents,renderer.getFrameEventsInRange(tr.model.helpers.IMPL_FRAMETIME_TYPE,modelHelper.model.bounds));}
-return frameEvents.sort(tr.importer.compareEvents);}
-function getStartupEvents(modelHelper){function isStartupSlice(slice){return slice.title==='BrowserMainLoop::CreateThreads';}
-const events=modelHelper.browserHelper.getAllAsyncSlicesMatching(isStartupSlice);const deduper=new tr.model.EventSet();events.forEach(function(event){const sliceGroup=event.parentContainer.sliceGroup;const slice=sliceGroup&&sliceGroup.findFirstSlice();if(slice){deduper.push(slice);}});return deduper.toArray();}
-function findStartupExpectations(modelHelper){const openingEvents=getStartupEvents(modelHelper);const closingEvents=getAllFrameEvents(modelHelper);const startups=[];openingEvents.forEach(function(openingEvent){closingEvents.forEach(function(closingEvent){if(openingEvent.closingEvent)return;if(closingEvent.openingEvent)return;if(closingEvent.start<=openingEvent.start)return;if(openingEvent.parentContainer.parent.pid!==closingEvent.parentContainer.parent.pid){return;}
-openingEvent.closingEvent=closingEvent;closingEvent.openingEvent=openingEvent;const se=new tr.model.um.StartupExpectation(modelHelper.model,openingEvent.start,closingEvent.end-openingEvent.start);se.associatedEvents.push(openingEvent);se.associatedEvents.push(closingEvent);startups.push(se);});});return startups;}
-return{findStartupExpectations,};});'use strict';tr.exportTo('tr.model',function(){function getAssociatedEvents(irs){const allAssociatedEvents=new tr.model.EventSet();irs.forEach(function(ir){ir.associatedEvents.forEach(function(event){if(event instanceof tr.model.FlowEvent)return;allAssociatedEvents.push(event);});});return allAssociatedEvents;}
-function getUnassociatedEvents(model,associatedEvents){const unassociatedEvents=new tr.model.EventSet();for(const proc of model.getAllProcesses()){for(const thread of Object.values(proc.threads)){for(const event of thread.sliceGroup.getDescendantEvents()){if(!associatedEvents.contains(event)){unassociatedEvents.push(event);}}}}
-return unassociatedEvents;}
-function getTotalCpuDuration(events){let cpuMs=0;events.forEach(function(event){if(event.cpuSelfTime){cpuMs+=event.cpuSelfTime;}});return cpuMs;}
-function getIRCoverageFromModel(model){const associatedEvents=getAssociatedEvents(model.userModel.expectations);if(!associatedEvents.length)return undefined;const unassociatedEvents=getUnassociatedEvents(model,associatedEvents);const associatedCpuMs=getTotalCpuDuration(associatedEvents);const unassociatedCpuMs=getTotalCpuDuration(unassociatedEvents);const totalEventCount=associatedEvents.length+unassociatedEvents.length;const totalCpuMs=associatedCpuMs+unassociatedCpuMs;let coveredEventsCpuTimeRatio=undefined;if(totalCpuMs!==0){coveredEventsCpuTimeRatio=associatedCpuMs/totalCpuMs;}
-return{associatedEventsCount:associatedEvents.length,unassociatedEventsCount:unassociatedEvents.length,associatedEventsCpuTimeMs:associatedCpuMs,unassociatedEventsCpuTimeMs:unassociatedCpuMs,coveredEventsCountRatio:associatedEvents.length/totalEventCount,coveredEventsCpuTimeRatio};}
-return{getIRCoverageFromModel,getAssociatedEvents,getUnassociatedEvents,};});'use strict';tr.exportTo('tr.model.um',function(){function IdleExpectation(parentModel,start,duration){const initiatorTitle='';tr.model.um.UserExpectation.call(this,parentModel,initiatorTitle,start,duration);}
-IdleExpectation.prototype={__proto__:tr.model.um.UserExpectation.prototype,constructor:IdleExpectation};tr.model.um.UserExpectation.subTypes.register(IdleExpectation,{stageTitle:'Idle',colorId:tr.b.ColorScheme.getColorIdForReservedName('rail_idle')});return{IdleExpectation,};});'use strict';tr.exportTo('tr.importer',function(){const INSIGNIFICANT_MS=1;class UserModelBuilder{constructor(model){this.model=model;this.modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);}
-static supportsModelHelper(modelHelper){return modelHelper.browserHelper!==undefined;}
-buildUserModel(){if(!this.modelHelper||!this.modelHelper.browserHelper)return;try{for(const ue of this.findUserExpectations()){this.model.userModel.expectations.push(ue);}
-this.model.userModel.segments.push(...this.findSegments());}catch(error){this.model.importWarning({type:'UserModelBuilder',message:error,showToUser:true});}}
-findSegments(){let timestamps=new Set();for(const expectation of this.model.userModel.expectations){timestamps.add(expectation.start);timestamps.add(expectation.end);}
-timestamps=[...timestamps];timestamps.sort((x,y)=>x-y);const segments=[];for(let i=0;i<timestamps.length-1;++i){const segment=new tr.model.um.Segment(timestamps[i],timestamps[i+1]-timestamps[i]);segments.push(segment);const segmentRange=tr.b.math.Range.fromExplicitRange(segment.start,segment.end);for(const expectation of this.model.userModel.expectations){const expectationRange=tr.b.math.Range.fromExplicitRange(expectation.start,expectation.end);if(segmentRange.intersectsRangeExclusive(expectationRange)){segment.expectations.push(expectation);}}}
-return segments;}
-findUserExpectations(){const expectations=[];expectations.push.apply(expectations,tr.importer.findStartupExpectations(this.modelHelper));expectations.push.apply(expectations,tr.importer.findLoadExpectations(this.modelHelper));expectations.push.apply(expectations,tr.importer.findInputExpectations(this.modelHelper));expectations.push.apply(expectations,this.findIdleExpectations(expectations));this.collectUnassociatedEvents_(expectations);return expectations;}
-collectUnassociatedEvents_(expectations){const vacuumUEs=[];for(const expectation of expectations){if(expectation instanceof tr.model.um.IdleExpectation||expectation instanceof tr.model.um.LoadExpectation||expectation instanceof tr.model.um.StartupExpectation){vacuumUEs.push(expectation);}}
-if(vacuumUEs.length===0)return;const allAssociatedEvents=tr.model.getAssociatedEvents(expectations);const unassociatedEvents=tr.model.getUnassociatedEvents(this.model,allAssociatedEvents);for(const event of unassociatedEvents){if(!(event instanceof tr.model.ThreadSlice))continue;if(!event.isTopLevel)continue;for(let index=0;index<vacuumUEs.length;++index){const expectation=vacuumUEs[index];if((event.start>=expectation.start)&&(event.start<expectation.end)){expectation.associatedEvents.addEventSet(event.entireHierarchy);break;}}}}
-findIdleExpectations(otherUEs){if(this.model.bounds.isEmpty)return;const emptyRanges=tr.b.math.findEmptyRangesBetweenRanges(tr.b.math.convertEventsToRanges(otherUEs),this.model.bounds);const expectations=[];const model=this.model;for(const range of emptyRanges){if(range.max<(range.min+INSIGNIFICANT_MS))continue;expectations.push(new tr.model.um.IdleExpectation(model,range.min,range.max-range.min));}
-return expectations;}}
-function createCustomizeModelLinesFromModel(model){const modelLines=[];modelLines.push('      audits.addEvent(model.browserMain,');modelLines.push('          {title: \'model start\', start: 0, end: 1});');const typeNames={};for(const typeName in tr.e.cc.INPUT_EVENT_TYPE_NAMES){typeNames[tr.e.cc.INPUT_EVENT_TYPE_NAMES[typeName]]=typeName;}
-let modelEvents=new tr.model.EventSet();for(const ue of model.userModel.expectations){modelEvents.addEventSet(ue.sourceEvents);}
-modelEvents=modelEvents.toArray();modelEvents.sort(tr.importer.compareEvents);for(const event of modelEvents){const startAndEnd='start: '+parseInt(event.start)+', '+'end: '+parseInt(event.end)+'});';if(event instanceof tr.e.cc.InputLatencyAsyncSlice){modelLines.push('      audits.addInputEvent(model, INPUT_TYPE.'+
-typeNames[event.typeName]+',');}else if(event.title==='RenderFrameImpl::didCommitProvisionalLoad'){modelLines.push('      audits.addCommitLoadEvent(model,');}else if(event.title==='InputHandlerProxy::HandleGestureFling::started'){modelLines.push('      audits.addFlingAnimationEvent(model,');}else if(event.title===tr.model.helpers.IMPL_RENDERING_STATS){modelLines.push('      audits.addFrameEvent(model,');}else if(event.title===tr.importer.CSS_ANIMATION_TITLE){modelLines.push('      audits.addEvent(model.rendererMain, {');modelLines.push('        title: \'Animation\', '+startAndEnd);return;}else{throw new Error('You must extend createCustomizeModelLinesFromModel()'+'to support this event:\n'+event.title+'\n');}
-modelLines.push('          {'+startAndEnd);}
-modelLines.push('      audits.addEvent(model.browserMain,');modelLines.push('          {'+'title: \'model end\', '+'start: '+(parseInt(model.bounds.max)-1)+', '+'end: '+parseInt(model.bounds.max)+'});');return modelLines;}
-function createExpectedUELinesFromModel(model){const expectedLines=[];const ueCount=model.userModel.expectations.length;for(let index=0;index<ueCount;++index){const expectation=model.userModel.expectations[index];let ueString='      {';ueString+='title: \''+expectation.title+'\', ';ueString+='start: '+parseInt(expectation.start)+', ';ueString+='end: '+parseInt(expectation.end)+', ';ueString+='eventCount: '+expectation.sourceEvents.length;ueString+='}';if(index<(ueCount-1))ueString+=',';expectedLines.push(ueString);}
-return expectedLines;}
-function createUEFinderTestCaseStringFromModel(model){const filename=window.location.hash.substr(1);let testName=filename.substr(filename.lastIndexOf('/')+1);testName=testName.substr(0,testName.indexOf('.'));try{const testLines=[];testLines.push('  /*');testLines.push('    This test was generated from');testLines.push('    '+filename+'');testLines.push('   */');testLines.push('  test(\''+testName+'\', function() {');testLines.push('    const verifier = new UserExpectationVerifier();');testLines.push('    verifier.customizeModelCallback = function(model) {');testLines.push.apply(testLines,createCustomizeModelLinesFromModel(model));testLines.push('    };');testLines.push('    verifier.expectedUEs = [');testLines.push.apply(testLines,createExpectedUELinesFromModel(model));testLines.push('    ];');testLines.push('    verifier.verify();');testLines.push('  });');return testLines.join('\n');}catch(error){return error;}}
-return{UserModelBuilder,createUEFinderTestCaseStringFromModel,};});'use strict';tr.exportTo('tr.ui.b',function(){function decorate(source,constr){let elements;if(typeof source==='string'){elements=Polymer.dom(tr.doc).querySelectorAll(source);}else{elements=[source];}
-for(let i=0,el;el=elements[i];i++){if(!(el instanceof constr)){constr.decorate(el);}}}
-function define(className,opt_parentConstructor,opt_tagNS){if(typeof className==='function'){throw new Error('Passing functions as className is deprecated. Please '+'use (className, opt_parentConstructor) to subclass');}
-className=className.toLowerCase();if(opt_parentConstructor&&!opt_parentConstructor.tagName){throw new Error('opt_parentConstructor was not '+'created by tr.ui.b.define');}
-let tagName=className;let tagNS=undefined;if(opt_parentConstructor){if(opt_tagNS){throw new Error('Must not specify tagNS if parentConstructor is given');}
-let parent=opt_parentConstructor;while(parent&&parent.tagName){tagName=parent.tagName;tagNS=parent.tagNS;parent=parent.parentConstructor;}}else{tagNS=opt_tagNS;}
-function f(){if(opt_parentConstructor&&f.prototype.__proto__!==opt_parentConstructor.prototype){throw new Error(className+' prototye\'s __proto__ field is messed up. '+'It MUST be the prototype of '+opt_parentConstructor.tagName);}
-let el;if(tagNS===undefined){el=tr.doc.createElement(tagName);}else{el=tr.doc.createElementNS(tagNS,tagName);}
-f.decorate.call(this,el,arguments);return el;}
-f.decorate=function(el){el.__proto__=f.prototype;el.decorate.apply(el,arguments[1]);el.constructor=f;};f.className=className;f.tagName=tagName;f.tagNS=tagNS;f.parentConstructor=(opt_parentConstructor?opt_parentConstructor:undefined);f.toString=function(){if(!f.parentConstructor){return f.tagName;}
-return f.parentConstructor.toString()+'::'+f.className;};return f;}
-function elementIsChildOf(el,potentialParent){if(el===potentialParent)return false;let cur=el;while(Polymer.dom(cur).parentNode){if(cur===potentialParent)return true;cur=Polymer.dom(cur).parentNode;}
-return false;}
-return{decorate,define,elementIsChildOf,};});'use strict';tr.exportTo('tr.b.math',function(){function Rect(){this.x=0;this.y=0;this.width=0;this.height=0;}
-Rect.fromXYWH=function(x,y,w,h){const rect=new Rect();rect.x=x;rect.y=y;rect.width=w;rect.height=h;return rect;};Rect.fromArray=function(ary){if(ary.length!==4){throw new Error('ary.length must be 4');}
-const rect=new Rect();rect.x=ary[0];rect.y=ary[1];rect.width=ary[2];rect.height=ary[3];return rect;};Rect.prototype={__proto__:Object.prototype,get left(){return this.x;},get top(){return this.y;},get right(){return this.x+this.width;},get bottom(){return this.y+this.height;},toString(){return'Rect('+this.x+', '+this.y+', '+
-this.width+', '+this.height+')';},toArray(){return[this.x,this.y,this.width,this.height];},clone(){const rect=new Rect();rect.x=this.x;rect.y=this.y;rect.width=this.width;rect.height=this.height;return rect;},enlarge(pad){const rect=new Rect();this.enlargeFast(rect,pad);return rect;},enlargeFast(out,pad){out.x=this.x-pad;out.y=this.y-pad;out.width=this.width+2*pad;out.height=this.height+2*pad;return out;},size(){return{width:this.width,height:this.height};},scale(s){const rect=new Rect();this.scaleFast(rect,s);return rect;},scaleSize(s){return Rect.fromXYWH(this.x,this.y,this.width*s,this.height*s);},scaleFast(out,s){out.x=this.x*s;out.y=this.y*s;out.width=this.width*s;out.height=this.height*s;return out;},translate(v){const rect=new Rect();this.translateFast(rect,v);return rect;},translateFast(out,v){out.x=this.x+v[0];out.y=this.x+v[1];out.width=this.width;out.height=this.height;return out;},asUVRectInside(containingRect){const rect=new Rect();rect.x=(this.x-containingRect.x)/containingRect.width;rect.y=(this.y-containingRect.y)/containingRect.height;rect.width=this.width/containingRect.width;rect.height=this.height/containingRect.height;return rect;},intersects(that){let ok=true;ok&=this.x<that.right;ok&=this.right>that.x;ok&=this.y<that.bottom;ok&=this.bottom>that.y;return ok;},equalTo(rect){return rect&&(this.x===rect.x)&&(this.y===rect.y)&&(this.width===rect.width)&&(this.height===rect.height);}};return{Rect,};});'use strict';tr.exportTo('tr.ui.b',function(){function instantiateTemplate(selector,doc){doc=doc||document;const el=Polymer.dom(doc).querySelector(selector);if(!el){throw new Error('Element not found');}
-return doc.importNode(el.content,true);}
-function windowRectForElement(element){const position=[element.offsetLeft,element.offsetTop];const size=[element.offsetWidth,element.offsetHeight];let node=element.offsetParent;while(node){position[0]+=node.offsetLeft;position[1]+=node.offsetTop;node=node.offsetParent;}
-return tr.b.math.Rect.fromXYWH(position[0],position[1],size[0],size[1]);}
-function scrollIntoViewIfNeeded(el){const pr=el.parentElement.getBoundingClientRect();const cr=el.getBoundingClientRect();if(cr.top<pr.top){el.scrollIntoView(true);}else if(cr.bottom>pr.bottom){el.scrollIntoView(false);}}
-function extractUrlString(url){let extracted=url.replace(/url\((.*)\)/,'$1');extracted=extracted.replace(/\"(.*)\"/,'$1');return extracted;}
-function toThreeDigitLocaleString(value){return value.toLocaleString(undefined,{minimumFractionDigits:3,maximumFractionDigits:3});}
-function isUnknownElementName(name){return document.createElement(name)instanceof HTMLUnknownElement;}
-return{isUnknownElementName,toThreeDigitLocaleString,instantiateTemplate,windowRectForElement,scrollIntoViewIfNeeded,extractUrlString,};});'use strict';tr.exportTo('tr.ui.b',function(){if(tr.isHeadless)return{};const THIS_DOC=document.currentScript.ownerDocument;const Overlay=tr.ui.b.define('overlay');Overlay.prototype={__proto__:HTMLDivElement.prototype,decorate(){Polymer.dom(this).classList.add('overlay');this.parentEl_=this.ownerDocument.body;this.visible_=false;this.userCanClose_=true;this.onKeyDown_=this.onKeyDown_.bind(this);this.onClick_=this.onClick_.bind(this);this.onFocusIn_=this.onFocusIn_.bind(this);this.onDocumentClick_=this.onDocumentClick_.bind(this);this.onClose_=this.onClose_.bind(this);this.addEventListener('visible-change',tr.ui.b.Overlay.prototype.onVisibleChange_.bind(this),true);const createShadowRoot=this.createShadowRoot||this.webkitCreateShadowRoot;this.shadow_=createShadowRoot.call(this);Polymer.dom(this.shadow_).appendChild(tr.ui.b.instantiateTemplate('#overlay-template',THIS_DOC));this.closeBtn_=Polymer.dom(this.shadow_).querySelector('close-button');this.closeBtn_.addEventListener('click',this.onClose_);Polymer.dom(this.shadow_).querySelector('overlay-frame').addEventListener('click',this.onClick_);this.observer_=new WebKitMutationObserver(this.didButtonBarMutate_.bind(this));this.observer_.observe(Polymer.dom(this.shadow_).querySelector('button-bar'),{childList:true});Object.defineProperty(this,'title',{get(){return Polymer.dom(Polymer.dom(this.shadow_).querySelector('title')).textContent;},set(title){Polymer.dom(Polymer.dom(this.shadow_).querySelector('title')).textContent=title;}});},set userCanClose(userCanClose){this.userCanClose_=userCanClose;this.closeBtn_.style.display=userCanClose?'block':'none';},get buttons(){return Polymer.dom(this.shadow_).querySelector('button-bar');},get visible(){return this.visible_;},set visible(newValue){if(this.visible_===newValue)return;this.visible_=newValue;const e=new tr.b.Event('visible-change');this.dispatchEvent(e);},onVisibleChange_(){this.visible_?this.show_():this.hide_();},show_(){Polymer.dom(this.parentEl_).appendChild(this);if(this.userCanClose_){this.addEventListener('keydown',this.onKeyDown_.bind(this));this.addEventListener('click',this.onDocumentClick_.bind(this));this.closeBtn_.addEventListener('click',this.onClose_);}
-this.parentEl_.addEventListener('focusin',this.onFocusIn_);this.tabIndex=0;const elList=Polymer.dom(this).querySelectorAll('button, input, list, select, a');if(elList.length>0){if(elList[0]===this.closeBtn_){if(elList.length>1)return elList[1].focus();}else{return elList[0].focus();}}
-this.focus();},hide_(){Polymer.dom(this.parentEl_).removeChild(this);this.parentEl_.removeEventListener('focusin',this.onFocusIn_);if(this.closeBtn_){this.closeBtn_.removeEventListener('click',this.onClose_);}
-document.removeEventListener('keydown',this.onKeyDown_);document.removeEventListener('click',this.onDocumentClick_);},onClose_(e){this.visible=false;if((e.type!=='keydown')||(e.type==='keydown'&&e.keyCode===27)){e.stopPropagation();}
-e.preventDefault();tr.b.dispatchSimpleEvent(this,'closeclick');},onFocusIn_(e){let node=e.target;while(node){if(node===this){return;}
-node=node.parentNode;}
-tr.b.timeout(0).then(()=>this.focus());e.preventDefault();e.stopPropagation();},didButtonBarMutate_(e){const hasButtons=this.buttons.children.length>0;if(hasButtons){Polymer.dom(this.shadow_).querySelector('button-bar').style.display=undefined;}else{Polymer.dom(this.shadow_).querySelector('button-bar').style.display='none';}},onKeyDown_(e){if(e.keyCode===9&&e.shiftKey&&e.target===this){e.preventDefault();return;}
-if(e.keyCode!==27)return;this.onClose_(e);},onClick_(e){e.stopPropagation();},onDocumentClick_(e){if(!this.userCanClose_)return;this.onClose_(e);}};Overlay.showError=function(msg,opt_err){const o=new Overlay();o.title='Error';Polymer.dom(o).textContent=msg;if(opt_err){const e=tr.b.normalizeException(opt_err);const stackDiv=document.createElement('pre');Polymer.dom(stackDiv).textContent=e.stack;stackDiv.style.paddingLeft='8px';stackDiv.style.margin=0;Polymer.dom(o).appendChild(stackDiv);}
-const b=document.createElement('button');Polymer.dom(b).textContent='OK';b.addEventListener('click',function(){o.visible=false;});Polymer.dom(o.buttons).appendChild(b);o.visible=true;return o;};return{Overlay,};});'use strict';tr.exportTo('tr.importer',function(){const Timing=tr.b.Timing;function ImportOptions(){this.shiftWorldToZero=true;this.pruneEmptyContainers=true;this.showImportWarnings=true;this.trackDetailedModelStats=false;this.customizeModelCallback=undefined;const auditorTypes=tr.c.Auditor.getAllRegisteredTypeInfos();this.auditorConstructors=auditorTypes.map(function(typeInfo){return typeInfo.constructor;});}
-function Import(model,opt_options){if(model===undefined){throw new Error('Must provide model to import into.');}
-this.importing_=false;this.importOptions_=opt_options||new ImportOptions();this.model_=model;this.model_.importOptions=this.importOptions_;}
-Import.prototype={__proto__:Object.prototype,importTraces(traces){const progressMeter={update(msg){}};tr.b.Task.RunSynchronously(this.createImportTracesTask(progressMeter,traces));},importTracesWithProgressDialog(traces){if(tr.isHeadless){throw new Error('Cannot use this method in headless mode.');}
-const overlay=tr.ui.b.Overlay();overlay.title='Importing...';overlay.userCanClose=false;overlay.msgEl=document.createElement('div');Polymer.dom(overlay).appendChild(overlay.msgEl);overlay.msgEl.style.margin='20px';overlay.update=function(msg){Polymer.dom(this.msgEl).textContent=msg;};overlay.visible=true;const promise=tr.b.Task.RunWhenIdle(this.createImportTracesTask(overlay,traces));promise.then(function(){overlay.visible=false;},function(err){overlay.visible=false;});return promise;},createImportTracesTask(progressMeter,traces){const importStartTimeMs=tr.b.Timing.getCurrentTimeMs();if(this.importing_){throw new Error('Already importing.');}
-this.importing_=true;const importTask=new tr.b.Task(function prepareImport(){progressMeter.update('I will now import your traces for you...');},this);let lastTask=importTask;const importers=[];function addImportStage(title,callback){lastTask=lastTask.after(()=>progressMeter.update(title));lastTask.updatesUi=true;lastTask=lastTask.after(callback);}
-function addStageForEachImporter(title,callback){lastTask=lastTask.after((task)=>{importers.forEach((importer,index)=>{const uiSubTask=task.subTask(()=>{progressMeter.update(`${title} ${index + 1} of ${importers.length}`);});uiSubTask.updatesUi=true;task.subTask(()=>callback(importer));});});}
-addImportStage('Creating importers...',()=>{traces=traces.slice(0);progressMeter.update('Creating importers...');for(let i=0;i<traces.length;++i){importers.push(this.createImporter_(traces[i]));}
-for(let i=0;i<importers.length;i++){const subtraces=importers[i].extractSubtraces();for(let j=0;j<subtraces.length;j++){try{traces.push(subtraces[j]);importers.push(this.createImporter_(subtraces[j]));}catch(error){this.model_.importWarning({type:error.name,message:error.message,showToUser:true,});continue;}}}
-if(traces.length&&!this.hasEventDataDecoder_(importers)){throw new Error('Could not find an importer for the provided eventData.');}
-importers.sort(function(x,y){return x.importPriority-y.importPriority;});});addStageForEachImporter('Importing clock sync markers',importer=>importer.importClockSyncMarkers());addStageForEachImporter('Importing',importer=>importer.importEvents());if(this.importOptions_.customizeModelCallback){addImportStage('Customizing',()=>{this.importOptions_.customizeModelCallback(this.model_);});}
-addStageForEachImporter('Importing sample data',importer=>importer.importSampleData());addImportStage('Autoclosing open slices...',()=>{this.model_.autoCloseOpenSlices();this.model_.createSubSlices();});addStageForEachImporter('Finalizing import',importer=>importer.finalizeImport());addImportStage('Initializing objects (step 1/2)...',()=>this.model_.preInitializeObjects());if(this.importOptions_.pruneEmptyContainers){addImportStage('Pruning empty containers...',()=>this.model_.pruneEmptyContainers());}
-addImportStage('Merging kernel with userland...',()=>this.model_.mergeKernelWithUserland());let auditors=[];addImportStage('Adding arbitrary data to model...',()=>{auditors=this.importOptions_.auditorConstructors.map(auditorConstructor=>new auditorConstructor(this.model_));auditors.forEach((auditor)=>{auditor.runAnnotate();auditor.installUserFriendlyCategoryDriverIfNeeded();});});addImportStage('Computing final world bounds...',()=>{this.model_.computeWorldBounds(this.importOptions_.shiftWorldToZero);});addImportStage('Building flow event map...',()=>this.model_.buildFlowEventIntervalTree());addImportStage('Joining object refs...',()=>this.model_.joinRefs());addImportStage('Cleaning up undeleted objects...',()=>this.model_.cleanupUndeletedObjects());addImportStage('Sorting memory dumps...',()=>this.model_.sortMemoryDumps());addImportStage('Finalizing memory dump graphs...',()=>this.model_.finalizeMemoryGraphs());addImportStage('Initializing objects (step 2/2)...',()=>this.model_.initializeObjects());addImportStage('Building event indices...',()=>this.model_.buildEventIndices());addImportStage('Building UserModel...',()=>{const userModelBuilder=new tr.importer.UserModelBuilder(this.model_);userModelBuilder.buildUserModel();});addImportStage('Sorting user expectations...',()=>this.model_.userModel.sortExpectations());addImportStage('Running auditors...',()=>{auditors.forEach(auditor=>auditor.runAudit());});addImportStage('Updating alerts...',()=>this.model_.sortAlerts());addImportStage('Update bounds...',()=>this.model_.updateBounds());addImportStage('Looking for warnings...',()=>{if(!this.model_.isTimeHighResolution){this.model_.importWarning({type:'low_resolution_timer',message:'Trace time is low resolution, trace may be unusable.',showToUser:true});}});lastTask.after(()=>{this.importing_=false;this.model_.stats.traceImportDurationMs=tr.b.Timing.getCurrentTimeMs()-importStartTimeMs;});return importTask;},createImporter_(eventData){const importerConstructor=tr.importer.Importer.findImporterFor(eventData);if(!importerConstructor){throw new Error('Couldn\'t create an importer for the provided '+'eventData.');}
-return new importerConstructor(this.model_,eventData);},hasEventDataDecoder_(importers){for(let i=0;i<importers.length;++i){if(!importers[i].isTraceDataContainer())return true;}
-return false;}};return{ImportOptions,Import,};});'use strict';tr.exportTo('tr.e.v8',function(){const ThreadSlice=tr.model.ThreadSlice;function V8GCStatsThreadSlice(){ThreadSlice.apply(this,arguments);this.liveObjects_=JSON.parse(this.args.live);delete this.args.live;this.deadObjects_=JSON.parse(this.args.dead);delete this.args.dead;}
-V8GCStatsThreadSlice.prototype={__proto__:ThreadSlice.prototype,get liveObjects(){return this.liveObjects_;},get deadObjects(){return this.deadObjects_;}};ThreadSlice.subTypes.register(V8GCStatsThreadSlice,{categoryParts:['disabled-by-default-v8.gc_stats'],name:'v8 gc stats slice',pluralName:'v8 gc stats slices'});return{V8GCStatsThreadSlice,};});'use strict';tr.exportTo('tr.e.v8',function(){const ThreadSlice=tr.model.ThreadSlice;function V8ICStatsThreadSlice(){ThreadSlice.apply(this,arguments);this.icStats_=undefined;if(this.args['ic-stats']){this.icStats_=this.args['ic-stats'].data;delete this.args['ic-stats'];}}
-V8ICStatsThreadSlice.prototype={__proto__:ThreadSlice.prototype,get icStats(){return this.icStats_;}};ThreadSlice.subTypes.register(V8ICStatsThreadSlice,{categoryParts:['disabled-by-default-v8.ic_stats'],name:'v8 ic stats slice',pluralName:'v8 ic stats slices'});return{V8ICStatsThreadSlice,};});'use strict';tr.exportTo('tr.e.v8',function(){const ThreadSlice=tr.model.ThreadSlice;function V8ThreadSlice(){ThreadSlice.apply(this,arguments);this.runtimeCallStats_=undefined;}
-V8ThreadSlice.prototype={__proto__:ThreadSlice.prototype,get runtimeCallStats(){if('runtime-call-stats'in this.args){this.runtimeCallStats_=this.args['runtime-call-stats'];delete this.args['runtime-call-stats'];}
-return this.runtimeCallStats_;}};ThreadSlice.subTypes.register(V8ThreadSlice,{categoryParts:['v8','disabled-by-default-v8.runtime_stats'],name:'v8 slice',pluralName:'v8 slices'});return{V8ThreadSlice,};});'use strict';tr.exportTo('tr.e.cc',function(){function PictureAsImageData(picture,errorOrImageData){this.picture_=picture;if(errorOrImageData instanceof ImageData){this.error_=undefined;this.imageData_=errorOrImageData;}else{this.error_=errorOrImageData;this.imageData_=undefined;}}
-PictureAsImageData.Pending=function(picture){return new PictureAsImageData(picture,undefined);};PictureAsImageData.prototype={get picture(){return this.picture_;},get error(){return this.error_;},get imageData(){return this.imageData_;},isPending(){return this.error_===undefined&&this.imageData_===undefined;},asCanvas(){if(!this.imageData_)return;const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=this.imageData_.width;canvas.height=this.imageData_.height;ctx.putImageData(this.imageData_,0,0);return canvas;}};return{PictureAsImageData,};});'use strict';tr.exportTo('tr.e.cc',function(){const convertedNameCache={};function convertNameToJSConvention(name){if(name in convertedNameCache){return convertedNameCache[name];}
-if(name[0]==='_'||name[name.length-1]==='_'){convertedNameCache[name]=name;return name;}
-const words=name.split('_');if(words.length===1){convertedNameCache[name]=words[0];return words[0];}
-for(let i=1;i<words.length;i++){words[i]=words[i][0].toUpperCase()+words[i].substring(1);}
-convertedNameCache[name]=words.join('');return convertedNameCache[name];}
-function moveRequiredFieldsFromArgsToToplevel(object,fields){for(let i=0;i<fields.length;i++){const key=fields[i];if(object.args[key]===undefined){throw Error('Expected field '+key+' not found in args');}
-if(object[key]!==undefined){throw Error('Field '+key+' already in object');}
-object[key]=object.args[key];delete object.args[key];}}
-function moveOptionalFieldsFromArgsToToplevel(object,fields){for(let i=0;i<fields.length;i++){const key=fields[i];if(object.args[key]===undefined)continue;if(object[key]!==undefined){throw Error('Field '+key+' already in object');}
-object[key]=object.args[key];delete object.args[key];}}
-function preInitializeObject(object){preInitializeObjectInner(object.args,false);}
-function preInitializeObjectInner(object,hasRecursed){if(!(object instanceof Object))return;if(object instanceof Array){for(let i=0;i<object.length;i++){preInitializeObjectInner(object[i],true);}
-return;}
-if(hasRecursed&&(object instanceof tr.model.ObjectSnapshot||object instanceof tr.model.ObjectInstance)){return;}
-for(let key in object){const newKey=convertNameToJSConvention(key);if(newKey!==key){const value=object[key];delete object[key];object[newKey]=value;key=newKey;}
-if(/Quad$/.test(key)&&!(object[key]instanceof tr.b.math.Quad)){let q;try{q=tr.b.math.Quad.from8Array(object[key]);}catch(e){}
-object[key]=q;continue;}
-if(/Rect$/.test(key)&&!(object[key]instanceof tr.b.math.Rect)){let r;try{r=tr.b.math.Rect.fromArray(object[key]);}catch(e){}
-object[key]=r;}
-preInitializeObjectInner(object[key],true);}}
-return{preInitializeObject,convertNameToJSConvention,moveRequiredFieldsFromArgsToToplevel,moveOptionalFieldsFromArgsToToplevel,};});'use strict';tr.exportTo('tr.e.cc',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;const PictureCount=0;const OPS_TIMING_ITERATIONS=3;function Picture(skp64,layerRect){this.skp64_=skp64;this.layerRect_=layerRect;this.guid_=tr.b.GUID.allocateSimple();}
-Picture.prototype={get canSave(){return true;},get layerRect(){return this.layerRect_;},get guid(){return this.guid_;},getBase64SkpData(){return this.skp64_;},getOps(){if(!PictureSnapshot.CanGetOps()){console.error(PictureSnapshot.HowToEnablePictureDebugging());return undefined;}
-const ops=window.chrome.skiaBenchmarking.getOps({skp64:this.skp64_,params:{layer_rect:this.layerRect_.toArray()}});if(!ops){console.error('Failed to get picture ops.');}
-return ops;},getOpTimings(){if(!PictureSnapshot.CanGetOpTimings()){console.error(PictureSnapshot.HowToEnablePictureDebugging());return undefined;}
-const opTimings=window.chrome.skiaBenchmarking.getOpTimings({skp64:this.skp64_,params:{layer_rect:this.layerRect_.toArray()}});if(!opTimings){console.error('Failed to get picture op timings.');}
-return opTimings;},tagOpsWithTimings(ops){const opTimings=[];for(let iteration=0;iteration<OPS_TIMING_ITERATIONS;iteration++){opTimings[iteration]=this.getOpTimings();if(!opTimings[iteration]||!opTimings[iteration].cmd_times){return ops;}
-if(opTimings[iteration].cmd_times.length!==ops.length){return ops;}}
-for(let opIndex=0;opIndex<ops.length;opIndex++){let min=Number.MAX_VALUE;for(let i=0;i<OPS_TIMING_ITERATIONS;i++){min=Math.min(min,opTimings[i].cmd_times[opIndex]);}
-ops[opIndex].cmd_time=min;}
-return ops;},rasterize(params,rasterCompleteCallback){if(!PictureSnapshot.CanRasterize()||!PictureSnapshot.CanGetOps()){rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,tr.e.cc.PictureSnapshot.HowToEnablePictureDebugging()));return;}
-const raster=window.chrome.skiaBenchmarking.rasterize({skp64:this.skp64_,params:{layer_rect:this.layerRect_.toArray()}},{stop:params.stopIndex===undefined?-1:params.stopIndex,overdraw:!!params.showOverdraw,params:{}});if(raster){const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=raster.width;canvas.height=raster.height;const imageData=ctx.createImageData(raster.width,raster.height);imageData.data.set(new Uint8ClampedArray(raster.data));rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,imageData));}else{const error='Failed to rasterize picture. '+'Your recording may be from an old Chrome version. '+'The SkPicture format is not backward compatible.';rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,error));}}};function LayeredPicture(pictures){this.guid_=tr.b.GUID.allocateSimple();this.pictures_=pictures;this.layerRect_=undefined;}
-LayeredPicture.prototype={__proto__:Picture.prototype,get canSave(){return false;},get typeName(){return'cc::LayeredPicture';},get layerRect(){if(this.layerRect_!==undefined){return this.layerRect_;}
-this.layerRect_={x:0,y:0,width:0,height:0};for(let i=0;i<this.pictures_.length;++i){const rect=this.pictures_[i].layerRect;this.layerRect_.x=Math.min(this.layerRect_.x,rect.x);this.layerRect_.y=Math.min(this.layerRect_.y,rect.y);this.layerRect_.width=Math.max(this.layerRect_.width,rect.x+rect.width);this.layerRect_.height=Math.max(this.layerRect_.height,rect.y+rect.height);}
-return this.layerRect_;},get guid(){return this.guid_;},getBase64SkpData(){throw new Error('Not available with a LayeredPicture.');},getOps(){let ops=[];for(let i=0;i<this.pictures_.length;++i){ops=ops.concat(this.pictures_[i].getOps());}
-return ops;},getOpTimings(){const opTimings=this.pictures_[0].getOpTimings();for(let i=1;i<this.pictures_.length;++i){const timings=this.pictures_[i].getOpTimings();opTimings.cmd_times=opTimings.cmd_times.concat(timings.cmd_times);opTimings.total_time+=timings.total_time;}
-return opTimings;},tagOpsWithTimings(ops){const opTimings=[];for(let iteration=0;iteration<OPS_TIMING_ITERATIONS;iteration++){opTimings[iteration]=this.getOpTimings();if(!opTimings[iteration]||!opTimings[iteration].cmd_times){return ops;}}
-for(let opIndex=0;opIndex<ops.length;opIndex++){let min=Number.MAX_VALUE;for(let i=0;i<OPS_TIMING_ITERATIONS;i++){min=Math.min(min,opTimings[i].cmd_times[opIndex]);}
-ops[opIndex].cmd_time=min;}
-return ops;},rasterize(params,rasterCompleteCallback){this.picturesAsImageData_=[];const rasterCallback=function(pictureAsImageData){this.picturesAsImageData_.push(pictureAsImageData);if(this.picturesAsImageData_.length!==this.pictures_.length){return;}
-const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=this.layerRect.width;canvas.height=this.layerRect.height;for(let i=0;i<this.picturesAsImageData_.length;++i){ctx.putImageData(this.picturesAsImageData_[i].imageData,this.pictures_[i].layerRect.x,this.pictures_[i].layerRect.y);}
-this.picturesAsImageData_=[];rasterCompleteCallback(new tr.e.cc.PictureAsImageData(this,ctx.getImageData(this.layerRect.x,this.layerRect.y,this.layerRect.width,this.layerRect.height)));}.bind(this);for(let i=0;i<this.pictures_.length;++i){this.pictures_[i].rasterize(params,rasterCallback);}}};function PictureSnapshot(){ObjectSnapshot.apply(this,arguments);}
-PictureSnapshot.HasSkiaBenchmarking=function(){return tr.isExported('chrome.skiaBenchmarking');};PictureSnapshot.CanRasterize=function(){if(!PictureSnapshot.HasSkiaBenchmarking()){return false;}
-if(!window.chrome.skiaBenchmarking.rasterize){return false;}
-return true;};PictureSnapshot.CanGetOps=function(){if(!PictureSnapshot.HasSkiaBenchmarking()){return false;}
-if(!window.chrome.skiaBenchmarking.getOps){return false;}
-return true;};PictureSnapshot.CanGetOpTimings=function(){if(!PictureSnapshot.HasSkiaBenchmarking()){return false;}
-if(!window.chrome.skiaBenchmarking.getOpTimings){return false;}
-return true;};PictureSnapshot.CanGetInfo=function(){if(!PictureSnapshot.HasSkiaBenchmarking()){return false;}
-if(!window.chrome.skiaBenchmarking.getInfo){return false;}
-return true;};PictureSnapshot.HowToEnablePictureDebugging=function(){if(tr.isHeadless){return'Pictures only work in chrome';}
-const usualReason=['For pictures to show up, you need to have Chrome running with ','--enable-skia-benchmarking. Please restart chrome with this flag ','and try again.'].join('');if(!tr.isExported('global.chrome.skiaBenchmarking')){return usualReason;}
-if(!global.chrome.skiaBenchmarking.rasterize){return'Your chrome is old';}
-if(!global.chrome.skiaBenchmarking.getOps){return'Your chrome is old: skiaBenchmarking.getOps not found';}
-if(!global.chrome.skiaBenchmarking.getOpTimings){return'Your chrome is old: skiaBenchmarking.getOpTimings not found';}
-if(!global.chrome.skiaBenchmarking.getInfo){return'Your chrome is old: skiaBenchmarking.getInfo not found';}
-return'Rasterizing is on';};PictureSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);this.rasterResult_=undefined;},initialize(){if(this.args.alias){this.args=this.args.alias.args;}
-if(!this.args.params.layerRect){throw new Error('Missing layer rect');}
-this.layerRect_=this.args.params.layerRect;this.picture_=new Picture(this.args.skp64,this.args.params.layerRect);},set picture(picture){this.picture_=picture;},get canSave(){return this.picture_.canSave;},get layerRect(){return this.layerRect_?this.layerRect_:this.picture_.layerRect;},get guid(){return this.picture_.guid;},getBase64SkpData(){return this.picture_.getBase64SkpData();},getOps(){return this.picture_.getOps();},getOpTimings(){return this.picture_.getOpTimings();},tagOpsWithTimings(ops){return this.picture_.tagOpsWithTimings(ops);},rasterize(params,rasterCompleteCallback){this.picture_.rasterize(params,rasterCompleteCallback);}};ObjectSnapshot.subTypes.register(PictureSnapshot,{typeNames:['cc::Picture']});return{PictureSnapshot,Picture,LayeredPicture,};});'use strict';tr.exportTo('tr.e.cc',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function DisplayItemList(skp64,layerRect){tr.e.cc.Picture.apply(this,arguments);}
-DisplayItemList.prototype={__proto__:tr.e.cc.Picture.prototype};function DisplayItemListSnapshot(){tr.e.cc.PictureSnapshot.apply(this,arguments);}
-DisplayItemListSnapshot.prototype={__proto__:tr.e.cc.PictureSnapshot.prototype,initialize(){tr.e.cc.PictureSnapshot.prototype.initialize.call(this);this.displayItems_=this.args.params.items;},get items(){return this.displayItems_;}};ObjectSnapshot.subTypes.register(DisplayItemListSnapshot,{typeNames:['cc::DisplayItemList']});return{DisplayItemListSnapshot,DisplayItemList,};});'use strict';tr.exportTo('tr.b.math',function(){function BBox2(){this.isEmpty_=true;this.min_=undefined;this.max_=undefined;}
-BBox2.prototype={__proto__:Object.prototype,reset(){this.isEmpty_=true;this.min_=undefined;this.max_=undefined;},get isEmpty(){return this.isEmpty_;},addBBox2(bbox2){if(bbox2.isEmpty)return;this.addVec2(bbox2.min_);this.addVec2(bbox2.max_);},clone(){const bbox=new BBox2();bbox.addBBox2(this);return bbox;},addXY(x,y){if(this.isEmpty_){this.max_=vec2.create();this.min_=vec2.create();vec2.set(this.max_,x,y);vec2.set(this.min_,x,y);this.isEmpty_=false;return;}
-this.max_[0]=Math.max(this.max_[0],x);this.max_[1]=Math.max(this.max_[1],y);this.min_[0]=Math.min(this.min_[0],x);this.min_[1]=Math.min(this.min_[1],y);},addVec2(value){if(this.isEmpty_){this.max_=vec2.create();this.min_=vec2.create();vec2.set(this.max_,value[0],value[1]);vec2.set(this.min_,value[0],value[1]);this.isEmpty_=false;return;}
-this.max_[0]=Math.max(this.max_[0],value[0]);this.max_[1]=Math.max(this.max_[1],value[1]);this.min_[0]=Math.min(this.min_[0],value[0]);this.min_[1]=Math.min(this.min_[1],value[1]);},addQuad(quad){this.addVec2(quad.p1);this.addVec2(quad.p2);this.addVec2(quad.p3);this.addVec2(quad.p4);},get minVec2(){if(this.isEmpty_)return undefined;return this.min_;},get maxVec2(){if(this.isEmpty_)return undefined;return this.max_;},get sizeAsVec2(){if(this.isEmpty_){throw new Error('Empty BBox2 has no size');}
-const size=vec2.create();vec2.subtract(size,this.max_,this.min_);return size;},get size(){if(this.isEmpty_){throw new Error('Empty BBox2 has no size');}
-return{width:this.max_[0]-this.min_[0],height:this.max_[1]-this.min_[1]};},get width(){if(this.isEmpty_){throw new Error('Empty BBox2 has no width');}
-return this.max_[0]-this.min_[0];},get height(){if(this.isEmpty_){throw new Error('Empty BBox2 has no width');}
-return this.max_[1]-this.min_[1];},toString(){if(this.isEmpty_)return'empty';return'min=('+this.min_[0]+','+this.min_[1]+') '+'max=('+this.max_[0]+','+this.max_[1]+')';},asRect(){return tr.b.math.Rect.fromXYWH(this.min_[0],this.min_[1],this.max_[0]-this.min_[0],this.max_[1]-this.min_[1]);}};return{BBox2,};});'use strict';tr.exportTo('tr.e.cc',function(){const constants={};constants.ACTIVE_TREE=0;constants.PENDING_TREE=1;constants.HIGH_PRIORITY_BIN=0;constants.LOW_PRIORITY_BIN=1;constants.SEND_BEGIN_FRAME_EVENT='ThreadProxy::ScheduledActionSendBeginMainFrame';constants.BEGIN_MAIN_FRAME_EVENT='ThreadProxy::BeginMainFrame';return{constants};});'use strict';tr.exportTo('tr.e.cc',function(){function Region(){this.rects=[];}
-Region.fromArray=function(array){if(array.length%4!==0){throw new Error('Array must consist be a multiple of 4 in length');}
-const r=new Region();for(let i=0;i<array.length;i+=4){r.rects.push(tr.b.math.Rect.fromXYWH(array[i],array[i+1],array[i+2],array[i+3]));}
-return r;};Region.fromArrayOrUndefined=function(array){if(array===undefined)return new Region();return Region.fromArray(array);};Region.prototype={__proto__:Region.prototype,rectIntersects(r){for(let i=0;i<this.rects.length;i++){if(this.rects[i].intersects(r))return true;}
-return false;},addRect(r){this.rects.push(r);}};return{Region,};});'use strict';tr.exportTo('tr.e.cc',function(){function TileCoverageRect(rect,tile){this.geometryRect=rect;this.tile=tile;}
-return{TileCoverageRect,};});'use strict';tr.exportTo('tr.e.cc',function(){const constants=tr.e.cc.constants;const ObjectSnapshot=tr.model.ObjectSnapshot;function LayerImplSnapshot(){ObjectSnapshot.apply(this,arguments);}
-LayerImplSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);this.layerTreeImpl_=undefined;this.parentLayer=undefined;},initialize(){this.invalidation=new tr.e.cc.Region();this.annotatedInvalidation=new tr.e.cc.Region();this.unrecordedRegion=new tr.e.cc.Region();this.pictures=[];tr.e.cc.moveRequiredFieldsFromArgsToToplevel(this,['layerId','layerQuad']);tr.e.cc.moveOptionalFieldsFromArgsToToplevel(this,['children','maskLayer','replicaLayer','idealContentsScale','geometryContentsScale','layoutRects','usingGpuRasterization']);this.gpuMemoryUsageInBytes=this.args.gpuMemoryUsage;this.bounds=tr.b.math.Rect.fromXYWH(0,0,this.args.bounds.width,this.args.bounds.height);if(this.args.animationBounds){this.animationBoundsRect=tr.b.math.Rect.fromXYWH(this.args.animationBounds[0],this.args.animationBounds[1],this.args.animationBounds[3],this.args.animationBounds[4]);}
-if(this.children){for(let i=0;i<this.children.length;i++){this.children[i].parentLayer=this;}}
-if(this.maskLayer){this.maskLayer.parentLayer=this;}
-if(this.replicaLayer){this.replicaLayer.parentLayer=this;}
-if(!this.geometryContentsScale){this.geometryContentsScale=1.0;}
-if(!this.idealContentsScale){this.idealContentsScale=1.0;}
-this.touchEventHandlerRegion=tr.e.cc.Region.fromArrayOrUndefined(this.args.touchEventHandlerRegion);this.wheelEventHandlerRegion=tr.e.cc.Region.fromArrayOrUndefined(this.args.wheelEventHandlerRegion);this.nonFastScrollableRegion=tr.e.cc.Region.fromArrayOrUndefined(this.args.nonFastScrollableRegion);},get layerTreeImpl(){if(this.layerTreeImpl_){return this.layerTreeImpl_;}
-if(this.parentLayer){return this.parentLayer.layerTreeImpl;}
-return undefined;},set layerTreeImpl(layerTreeImpl){this.layerTreeImpl_=layerTreeImpl;},get activeLayer(){if(this.layerTreeImpl.whichTree===constants.ACTIVE_TREE){return this;}
-const activeTree=this.layerTreeImpl.layerTreeHostImpl.activeTree;return activeTree.findLayerWithId(this.layerId);},get pendingLayer(){if(this.layerTreeImpl.whichTree===constants.PENDING_TREE){return this;}
-const pendingTree=this.layerTreeImpl.layerTreeHostImpl.pendingTree;return pendingTree.findLayerWithId(this.layerId);}};function PictureLayerImplSnapshot(){LayerImplSnapshot.apply(this,arguments);}
-PictureLayerImplSnapshot.prototype={__proto__:LayerImplSnapshot.prototype,initialize(){LayerImplSnapshot.prototype.initialize.call(this);if(this.args.invalidation){this.invalidation=tr.e.cc.Region.fromArray(this.args.invalidation);delete this.args.invalidation;}
-if(this.args.annotatedInvalidationRects){this.annotatedInvalidation=new tr.e.cc.Region();for(let i=0;i<this.args.annotatedInvalidationRects.length;++i){const annotatedRect=this.args.annotatedInvalidationRects[i];const rect=annotatedRect.geometryRect;rect.reason=annotatedRect.reason;this.annotatedInvalidation.addRect(rect);}
-delete this.args.annotatedInvalidationRects;}
-if(this.args.unrecordedRegion){this.unrecordedRegion=tr.e.cc.Region.fromArray(this.args.unrecordedRegion);delete this.args.unrecordedRegion;}
-if(this.args.pictures){this.pictures=this.args.pictures;this.pictures.sort(function(a,b){return a.ts-b.ts;});}
-this.tileCoverageRects=[];if(this.args.coverageTiles){for(let i=0;i<this.args.coverageTiles.length;++i){const rect=this.args.coverageTiles[i].geometryRect.scale(this.idealContentsScale);const tile=this.args.coverageTiles[i].tile;this.tileCoverageRects.push(new tr.e.cc.TileCoverageRect(rect,tile));}
-delete this.args.coverageTiles;}}};ObjectSnapshot.subTypes.register(PictureLayerImplSnapshot,{typeName:'cc::PictureLayerImpl'});ObjectSnapshot.subTypes.register(LayerImplSnapshot,{typeNames:['cc::LayerImpl','cc::DelegatedRendererLayerImpl','cc::HeadsUpDisplayLayerImpl','cc::IOSurfaceLayerImpl','cc::NinePatchLayerImpl','cc::PictureImageLayerImpl','cc::ScrollbarLayerImpl','cc::SolidColorLayerImpl','cc::SolidColorScrollbarLayerImpl','cc::SurfaceLayerImpl','cc::TextureLayerImpl','cc::TiledLayerImpl','cc::VideoLayerImpl','cc::PaintedScrollbarLayerImpl','ClankPatchLayer','TabBorderLayer','CounterLayer']});return{LayerImplSnapshot,PictureLayerImplSnapshot,};});'use strict';tr.exportTo('tr.e.cc',function(){const constants=tr.e.cc.constants;const ObjectSnapshot=tr.model.ObjectSnapshot;function LayerTreeImplSnapshot(){ObjectSnapshot.apply(this,arguments);}
-LayerTreeImplSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);this.layerTreeHostImpl=undefined;this.whichTree=undefined;this.sourceFrameNumber=undefined;},initialize(){tr.e.cc.moveRequiredFieldsFromArgsToToplevel(this,['renderSurfaceLayerList']);tr.e.cc.moveOptionalFieldsFromArgsToToplevel(this,['rootLayer','layers']);if(this.args.sourceFrameNumber){this.sourceFrameNumber=this.args.sourceFrameNumber;}
-if(this.rootLayer){this.rootLayer.layerTreeImpl=this;}else{for(let i=0;i<this.layers.length;i++){this.layers[i].layerTreeImpl=this;}}
-if(this.args.swapPromiseTraceIds&&this.args.swapPromiseTraceIds.length){this.tracedInputLatencies=[];const ownProcess=this.objectInstance.parent;const modelHelper=ownProcess.model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper){this._initializeTracedInputLatencies(modelHelper);}}},_initializeTracedInputLatencies(modelHelper){const latencyEvents=modelHelper.browserHelper.getLatencyEventsInRange(modelHelper.model.bounds);latencyEvents.forEach(function(event){for(let i=0;i<this.args.swapPromiseTraceIds.length;i++){if(!event.args.data||!event.args.data.trace_id){continue;}
-if(parseInt(event.args.data.trace_id)===this.args.swapPromiseTraceIds[i]){this.tracedInputLatencies.push(event);}}},this);},get hasSourceFrameBeenDrawnBefore(){if(this.whichTree===tr.e.cc.constants.PENDING_TREE){return false;}
-if(this.sourceFrameNumber===undefined)return;const thisLTHI=this.layerTreeHostImpl;const thisLTHIIndex=thisLTHI.objectInstance.snapshots.indexOf(thisLTHI);const prevLTHIIndex=thisLTHIIndex-1;if(prevLTHIIndex<0||prevLTHIIndex>=thisLTHI.objectInstance.snapshots.length){return false;}
-const prevLTHI=thisLTHI.objectInstance.snapshots[prevLTHIIndex];if(!prevLTHI.activeTree)return false;if(prevLTHI.activeTree.sourceFrameNumber===undefined)return;return prevLTHI.activeTree.sourceFrameNumber===this.sourceFrameNumber;},get otherTree(){const other=this.whichTree===constants.ACTIVE_TREE?constants.PENDING_TREE:constants.ACTIVE_TREE;return this.layerTreeHostImpl.getTree(other);},get gpuMemoryUsageInBytes(){let totalBytes=0;this.iterLayers(function(layer){if(layer.gpuMemoryUsageInBytes!==undefined){totalBytes+=layer.gpuMemoryUsageInBytes;}});return totalBytes;},iterLayers(func,thisArg){const visitedLayers={};function visitLayer(layer,depth,isMask,isReplica){if(visitedLayers[layer.layerId])return;visitedLayers[layer.layerId]=true;func.call(thisArg,layer,depth,isMask,isReplica);if(layer.children){for(let i=0;i<layer.children.length;i++){visitLayer(layer.children[i],depth+1);}}
-if(layer.maskLayer){visitLayer(layer.maskLayer,depth+1,true,false);}
-if(layer.replicaLayer){visitLayer(layer.replicaLayer,depth+1,false,true);}}
-if(this.rootLayer){visitLayer(this.rootLayer,0,false,false);}else{for(let i=0;i<this.layers.length;i++){visitLayer(this.layers[i],0,false,false);}}},findLayerWithId(id){let foundLayer=undefined;function visitLayer(layer){if(layer.layerId===id){foundLayer=layer;}}
-this.iterLayers(visitLayer);return foundLayer;}};ObjectSnapshot.subTypes.register(LayerTreeImplSnapshot,{typeName:'cc::LayerTreeImpl'});return{LayerTreeImplSnapshot,};});'use strict';tr.exportTo('tr.e.cc',function(){const constants=tr.e.cc.constants;const ObjectSnapshot=tr.model.ObjectSnapshot;const ObjectInstance=tr.model.ObjectInstance;function LayerTreeHostImplSnapshot(){ObjectSnapshot.apply(this,arguments);}
-LayerTreeHostImplSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);},initialize(){tr.e.cc.moveRequiredFieldsFromArgsToToplevel(this,['deviceViewportSize','activeTree']);tr.e.cc.moveOptionalFieldsFromArgsToToplevel(this,['pendingTree']);if(this.args.activeTiles!==undefined){this.activeTiles=this.args.activeTiles;delete this.args.activeTiles;}else if(this.args.tiles!==undefined){this.activeTiles=this.args.tiles;delete this.args.tiles;}
-if(!this.activeTiles){this.activeTiles=[];}
-this.activeTree.layerTreeHostImpl=this;this.activeTree.whichTree=constants.ACTIVE_TREE;if(this.pendingTree){this.pendingTree.layerTreeHostImpl=this;this.pendingTree.whichTree=constants.PENDING_TREE;}},getContentsScaleNames(){const scales={};for(let i=0;i<this.activeTiles.length;++i){const tile=this.activeTiles[i];scales[tile.contentsScale]=tile.resolution;}
-return scales;},getTree(whichTree){if(whichTree===constants.ACTIVE_TREE){return this.activeTree;}
-if(whichTree===constants.PENDING_TREE){return this.pendingTree;}
-throw new Exception('Unknown tree type + '+whichTree);},get tilesHaveGpuMemoryUsageInfo(){if(this.tilesHaveGpuMemoryUsageInfo_!==undefined){return this.tilesHaveGpuMemoryUsageInfo_;}
-for(let i=0;i<this.activeTiles.length;i++){if(this.activeTiles[i].gpuMemoryUsageInBytes===undefined){continue;}
-this.tilesHaveGpuMemoryUsageInfo_=true;return true;}
-this.tilesHaveGpuMemoryUsageInfo_=false;return false;},get gpuMemoryUsageInBytes(){if(!this.tilesHaveGpuMemoryUsageInfo)return;let usage=0;for(let i=0;i<this.activeTiles.length;i++){const u=this.activeTiles[i].gpuMemoryUsageInBytes;if(u!==undefined)usage+=u;}
-return usage;},get userFriendlyName(){let frameNumber;if(!this.activeTree){frameNumber=this.objectInstance.snapshots.indexOf(this);}else{if(this.activeTree.sourceFrameNumber===undefined){frameNumber=this.objectInstance.snapshots.indexOf(this);}else{frameNumber=this.activeTree.sourceFrameNumber;}}
-return'cc::LayerTreeHostImpl frame '+frameNumber;}};ObjectSnapshot.subTypes.register(LayerTreeHostImplSnapshot,{typeName:'cc::LayerTreeHostImpl'});function LayerTreeHostImplInstance(){ObjectInstance.apply(this,arguments);this.allLayersBBox_=undefined;}
-LayerTreeHostImplInstance.prototype={__proto__:ObjectInstance.prototype,get allContentsScales(){if(this.allContentsScales_){return this.allContentsScales_;}
-const scales={};for(const tileID in this.allTileHistories_){const tileHistory=this.allTileHistories_[tileID];scales[tileHistory.contentsScale]=true;}
-this.allContentsScales_=Object.keys(scales);return this.allContentsScales_;},get allLayersBBox(){if(this.allLayersBBox_){return this.allLayersBBox_;}
-const bbox=new tr.b.math.BBox2();function handleTree(tree){tree.renderSurfaceLayerList.forEach(function(layer){bbox.addQuad(layer.layerQuad);});}
-this.snapshots.forEach(function(lthi){handleTree(lthi.activeTree);if(lthi.pendingTree){handleTree(lthi.pendingTree);}});this.allLayersBBox_=bbox;return this.allLayersBBox_;}};ObjectInstance.subTypes.register(LayerTreeHostImplInstance,{typeName:'cc::LayerTreeHostImpl'});return{LayerTreeHostImplSnapshot,LayerTreeHostImplInstance,};});'use strict';tr.exportTo('tr.e.cc',function(){const tileTypes={highRes:'highRes',lowRes:'lowRes',extraHighRes:'extraHighRes',extraLowRes:'extraLowRes',missing:'missing',culled:'culled',solidColor:'solidColor',picture:'picture',directPicture:'directPicture',unknown:'unknown'};const tileBorder={highRes:{color:'rgba(80, 200, 200, 0.7)',width:1},lowRes:{color:'rgba(212, 83, 192, 0.7)',width:2},extraHighRes:{color:'rgba(239, 231, 20, 0.7)',width:2},extraLowRes:{color:'rgba(93, 186, 18, 0.7)',width:2},missing:{color:'rgba(255, 0, 0, 0.7)',width:1},culled:{color:'rgba(160, 100, 0, 0.8)',width:1},solidColor:{color:'rgba(128, 128, 128, 0.7)',width:1},picture:{color:'rgba(64, 64, 64, 0.7)',width:1},directPicture:{color:'rgba(127, 255, 0, 1.0)',width:1},unknown:{color:'rgba(0, 0, 0, 1.0)',width:2}};return{tileTypes,tileBorder};});'use strict';tr.exportTo('tr.e.cc',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function TileSnapshot(){ObjectSnapshot.apply(this,arguments);}
-TileSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);},initialize(){tr.e.cc.moveOptionalFieldsFromArgsToToplevel(this,['layerId','contentsScale','contentRect']);if(this.args.managedState){this.resolution=this.args.managedState.resolution;this.isSolidColor=this.args.managedState.isSolidColor;this.isUsingGpuMemory=this.args.managedState.isUsingGpuMemory;this.hasResource=this.args.managedState.hasResource;this.scheduledPriority=this.args.scheduledPriority;this.gpuMemoryUsageInBytes=this.args.gpuMemoryUsage;}else{this.resolution=this.args.resolution;this.isSolidColor=this.args.drawInfo.isSolidColor;this.isUsingGpuMemory=this.args.isUsingGpuMemory;this.hasResource=this.args.hasResource;this.scheduledPriority=this.args.scheduledPriority;this.gpuMemoryUsageInBytes=this.args.gpuMemoryUsage;}
-if(this.contentRect){this.layerRect=this.contentRect.scale(1.0/this.contentsScale);}
-if(this.isSolidColor){this.type_=tr.e.cc.tileTypes.solidColor;}else if(!this.hasResource){this.type_=tr.e.cc.tileTypes.missing;}else if(this.resolution==='HIGH_RESOLUTION'){this.type_=tr.e.cc.tileTypes.highRes;}else if(this.resolution==='LOW_RESOLUTION'){this.type_=tr.e.cc.tileTypes.lowRes;}else{this.type_=tr.e.cc.tileTypes.unknown;}},getTypeForLayer(layer){let type=this.type_;if(type===tr.e.cc.tileTypes.unknown){if(this.contentsScale<layer.idealContentsScale){type=tr.e.cc.tileTypes.extraLowRes;}else if(this.contentsScale>layer.idealContentsScale){type=tr.e.cc.tileTypes.extraHighRes;}}
-return type;}};ObjectSnapshot.subTypes.register(TileSnapshot,{typeName:'cc::Tile'});return{TileSnapshot,};});'use strict';tr.exportTo('tr.ui.b',function(){const Location=tr.model.Location;function UIState(location,scaleX){this.location_=location;this.scaleX_=scaleX;}
-UIState.fromUserFriendlyString=function(model,viewport,stateString){const navByFinderPattern=/^(-?\d+(\.\d+)?)@(.+)x(\d+(\.\d+)?)$/g;const match=navByFinderPattern.exec(stateString);if(!match)return;const timestamp=parseFloat(match[1]);const stableId=match[3];const scaleX=parseFloat(match[4]);if(scaleX<=0){throw new Error('Invalid ScaleX value in UI State string.');}
-if(!viewport.containerToTrackMap.getTrackByStableId(stableId)){throw new Error('Invalid StableID given in UI State String.');}
-const loc=tr.model.Location.fromStableIdAndTimestamp(viewport,stableId,timestamp);return new UIState(loc,scaleX);};UIState.prototype={get location(){return this.location_;},get scaleX(){return this.scaleX_;},toUserFriendlyString(viewport){const timestamp=this.location_.xWorld;const stableId=this.location_.getContainingTrack(viewport).eventContainer.stableId;const scaleX=this.scaleX_;return timestamp.toFixed(5)+'@'+stableId+'x'+scaleX.toFixed(5);},toDict(){return{location:this.location_.toDict(),scaleX:this.scaleX_};}};return{UIState,};});'use strict';tr.exportTo('tr.ui.b',function(){const EventSet=tr.model.EventSet;const SelectionState=tr.model.SelectionState;function BrushingState(){this.guid_=tr.b.GUID.allocateSimple();this.selection_=new EventSet();this.findMatches_=new EventSet();this.analysisViewRelatedEvents_=new EventSet();this.analysisLinkHoveredEvents_=new EventSet();this.appliedToModel_=undefined;this.viewSpecificBrushingStates_={};}
-BrushingState.prototype={get guid(){return this.guid_;},clone(){const that=new BrushingState();that.selection_=this.selection_;that.findMatches_=this.findMatches_;that.analysisViewRelatedEvents_=this.analysisViewRelatedEvents_;that.analysisLinkHoveredEvents_=this.analysisLinkHoveredEvents_;that.viewSpecificBrushingStates_=this.viewSpecificBrushingStates_;return that;},equals(that){if(!this.selection_.equals(that.selection_)){return false;}
-if(!this.findMatches_.equals(that.findMatches_)){return false;}
-if(!this.analysisViewRelatedEvents_.equals(that.analysisViewRelatedEvents_)){return false;}
-if(!this.analysisLinkHoveredEvents_.equals(that.analysisLinkHoveredEvents_)){return false;}
-return true;},get selectionOfInterest(){if(this.selection_.length){return this.selection_;}
-if(this.highlight_.length){return this.highlight_;}
-if(this.analysisViewRelatedEvents_.length){return this.analysisViewRelatedEvents_;}
-if(this.analysisLinkHoveredEvents_.length){return this.analysisLinkHoveredEvents_;}
-return this.selection_;},get selection(){return this.selection_;},set selection(selection){if(this.appliedToModel_){throw new Error('Cannot mutate this state right now');}
-if(selection===undefined){selection=new EventSet();}
-this.selection_=selection;},get findMatches(){return this.findMatches_;},set findMatches(findMatches){if(this.appliedToModel_){throw new Error('Cannot mutate this state right now');}
-if(findMatches===undefined){findMatches=new EventSet();}
-this.findMatches_=findMatches;},get analysisViewRelatedEvents(){return this.analysisViewRelatedEvents_;},set analysisViewRelatedEvents(analysisViewRelatedEvents){if(this.appliedToModel_){throw new Error('Cannot mutate this state right now');}
-if(analysisViewRelatedEvents===undefined){analysisViewRelatedEvents=new EventSet();}
-this.analysisViewRelatedEvents_=analysisViewRelatedEvents;},get analysisLinkHoveredEvents(){return this.analysisLinkHoveredEvents_;},set analysisLinkHoveredEvents(analysisLinkHoveredEvents){if(this.appliedToModel_){throw new Error('Cannot mutate this state right now');}
-if(analysisLinkHoveredEvents===undefined){analysisLinkHoveredEvents=new EventSet();}
-this.analysisLinkHoveredEvents_=analysisLinkHoveredEvents;},get isAppliedToModel(){return this.appliedToModel_!==undefined;},get viewSpecificBrushingStates(){return this.viewSpecificBrushingStates_;},set viewSpecificBrushingStates(viewSpecificBrushingStates){this.viewSpecificBrushingStates_=viewSpecificBrushingStates;},get dimmedEvents_(){const dimmedEvents=new EventSet();dimmedEvents.addEventSet(this.findMatches);dimmedEvents.addEventSet(this.analysisViewRelatedEvents_);return dimmedEvents;},get brightenedEvents_(){const brightenedEvents=new EventSet();brightenedEvents.addEventSet(this.selection_);brightenedEvents.addEventSet(this.analysisLinkHoveredEvents_);return brightenedEvents;},applyToEventSelectionStates(model){this.appliedToModel_=model;const dimmedEvents=this.dimmedEvents_;if(model){const newDefaultState=(dimmedEvents.length?SelectionState.DIMMED0:SelectionState.NONE);const currentDefaultState=tr.b.getFirstElement(model.getDescendantEvents()).selectionState;if(currentDefaultState!==newDefaultState){for(const e of model.getDescendantEvents()){e.selectionState=newDefaultState;}}}
-let score;for(const e of dimmedEvents){score=0;if(this.findMatches_.contains(e)){score++;}
-if(this.analysisViewRelatedEvents_.contains(e)){score++;}
-e.selectionState=SelectionState.getFromDimmingLevel(score);}
-for(const e of this.brightenedEvents_){score=0;if(this.selection_.contains(e)){score++;}
-if(this.analysisLinkHoveredEvents_.contains(e)){score++;}
-e.selectionState=SelectionState.getFromBrighteningLevel(score);}},transferModelOwnershipToClone(that){if(!this.appliedToModel_){throw new Error('Not applied');}
-that.appliedToModel_=this.appliedToModel_;this.appliedToModel_=undefined;},unapplyFromEventSelectionStates(){if(!this.appliedToModel_){throw new Error('Not applied');}
-const model=this.appliedToModel_;this.appliedToModel_=undefined;const dimmedEvents=this.dimmedEvents_;const defaultState=(dimmedEvents.length?SelectionState.DIMMED0:SelectionState.NONE);for(const e of this.brightenedEvents_){e.selectionState=defaultState;}
-for(const e of dimmedEvents){e.selectionState=defaultState;}
-return defaultState;}};return{BrushingState,};});'use strict';tr.exportTo('tr.ui.b',function(){function Animation(){}
-Animation.prototype={canTakeOverFor(existingAnimation){throw new Error('Not implemented');},takeOverFor(existingAnimation,newStartTimestamp,target){throw new Error('Not implemented');},start(timestamp,target){throw new Error('Not implemented');},didStopEarly(timestamp,target,willBeTakenOverByAnotherAnimation){},tick(timestamp,target){throw new Error('Not implemented');}};return{Animation,};});'use strict';tr.exportTo('tr.ui.b',function(){function AnimationController(){tr.b.EventTarget.call(this);this.target_=undefined;this.activeAnimation_=undefined;this.tickScheduled_=false;}
-AnimationController.prototype={__proto__:tr.b.EventTarget.prototype,get target(){return this.target_;},set target(target){if(this.activeAnimation_){throw new Error('Cannot change target while animation is running.');}
-if(target.cloneAnimationState===undefined||typeof target.cloneAnimationState!=='function'){throw new Error('target must have a cloneAnimationState function');}
-this.target_=target;},get activeAnimation(){return this.activeAnimation_;},get hasActiveAnimation(){return!!this.activeAnimation_;},queueAnimation(animation,opt_now){if(this.target_===undefined){throw new Error('Cannot queue animations without a target');}
-let now;if(opt_now!==undefined){now=opt_now;}else{now=window.performance.now();}
-if(this.activeAnimation_){const done=this.activeAnimation_.tick(now,this.target_);if(done){this.activeAnimation_=undefined;}}
-if(this.activeAnimation_){if(animation.canTakeOverFor(this.activeAnimation_)){this.activeAnimation_.didStopEarly(now,this.target_,true);animation.takeOverFor(this.activeAnimation_,now,this.target_);}else{this.activeAnimation_.didStopEarly(now,this.target_,false);}}
-this.activeAnimation_=animation;this.activeAnimation_.start(now,this.target_);if(this.tickScheduled_)return;this.tickScheduled_=true;tr.b.requestAnimationFrame(this.tickActiveAnimation_,this);},cancelActiveAnimation(opt_now){if(!this.activeAnimation_)return;let now;if(opt_now!==undefined){now=opt_now;}else{now=window.performance.now();}
-this.activeAnimation_.didStopEarly(now,this.target_,false);this.activeAnimation_=undefined;},tickActiveAnimation_(frameBeginTime){this.tickScheduled_=false;if(!this.activeAnimation_)return;if(this.target_===undefined){this.activeAnimation_.didStopEarly(frameBeginTime,this.target_,false);return;}
-const oldTargetState=this.target_.cloneAnimationState();const done=this.activeAnimation_.tick(frameBeginTime,this.target_);if(done){this.activeAnimation_=undefined;}
-if(this.activeAnimation_){this.tickScheduled_=true;tr.b.requestAnimationFrame(this.tickActiveAnimation_,this);}
-if(oldTargetState){const e=new tr.b.Event('didtick');e.oldTargetState=oldTargetState;this.dispatchEvent(e,false,false);}}};return{AnimationController,};});'use strict';tr.exportTo('tr.b',function(){function Settings(){return Settings;}
-if(tr.b.unittest&&tr.b.unittest.TestRunner){tr.b.unittest.TestRunner.addEventListener('tr-unittest-will-run',function(){if(tr.isHeadless){Settings.setAlternativeStorageInstance(new HeadlessStorage());}else{Settings.setAlternativeStorageInstance(global.sessionStorage);global.sessionStorage.clear();}});}
-function SessionSettings(){return SessionSettings;}
-function AddStaticStorageFunctionsToClass_(inputClass,storage){inputClass.storage_=storage;inputClass.get=function(key,opt_default,opt_namespace){key=inputClass.namespace_(key,opt_namespace);const rawVal=inputClass.storage_.getItem(key);if(rawVal===null||rawVal===undefined){return opt_default;}
-try{return JSON.parse(rawVal).value;}catch(e){inputClass.storage_.removeItem(key);return opt_default;}};inputClass.set=function(key,value,opt_namespace){if(value===undefined){throw new Error('Settings.set: value must not be undefined');}
-const v=JSON.stringify({value});inputClass.storage_.setItem(inputClass.namespace_(key,opt_namespace),v);};inputClass.keys=function(opt_namespace){const result=[];opt_namespace=opt_namespace||'';for(let i=0;i<inputClass.storage_.length;i++){const key=inputClass.storage_.key(i);if(inputClass.isnamespaced_(key,opt_namespace)){result.push(inputClass.unnamespace_(key,opt_namespace));}}
-return result;};inputClass.isnamespaced_=function(key,opt_namespace){return key.indexOf(inputClass.normalize_(opt_namespace))===0;};inputClass.namespace_=function(key,opt_namespace){return inputClass.normalize_(opt_namespace)+key;};inputClass.unnamespace_=function(key,opt_namespace){return key.replace(inputClass.normalize_(opt_namespace),'');};inputClass.normalize_=function(opt_namespace){return inputClass.NAMESPACE+(opt_namespace?opt_namespace+'.':'');};inputClass.setAlternativeStorageInstance=function(instance){inputClass.storage_=instance;};inputClass.getAlternativeStorageInstance=function(){if(!tr.isHeadless&&inputClass.storage_===localStorage){return undefined;}
-return inputClass.storage_;};inputClass.NAMESPACE='trace-viewer';}
-function HeadlessStorage(){this.length=0;this.hasItem_={};this.items_={};this.itemsAsArray_=undefined;}
-HeadlessStorage.prototype={key(index){return this.itemsAsArray[index];},get itemsAsArray(){if(this.itemsAsArray_!==undefined){return this.itemsAsArray_;}
-const itemsAsArray=[];for(const k in this.items_){itemsAsArray.push(k);}
-this.itemsAsArray_=itemsAsArray;return this.itemsAsArray_;},getItem(key){if(!this.hasItem_[key]){return null;}
-return this.items_[key];},removeItem(key){if(!this.hasItem_[key]){return;}
-const value=this.items_[key];delete this.hasItem_[key];delete this.items_[key];this.length--;this.itemsAsArray_=undefined;return value;},setItem(key,value){if(this.hasItem_[key]){this.items_[key]=value;return;}
-this.items_[key]=value;this.hasItem_[key]=true;this.length++;this.itemsAsArray_=undefined;return value;}};if(tr.isHeadless){AddStaticStorageFunctionsToClass_(Settings,new HeadlessStorage());AddStaticStorageFunctionsToClass_(SessionSettings,new HeadlessStorage());}else{AddStaticStorageFunctionsToClass_(Settings,localStorage);AddStaticStorageFunctionsToClass_(SessionSettings,sessionStorage);}
-return{Settings,SessionSettings,};});'use strict';tr.exportTo('tr.ui.b',function(){function createSpan(opt_dictionary){let ownerDocument=document;if(opt_dictionary&&opt_dictionary.ownerDocument){ownerDocument=opt_dictionary.ownerDocument;}
-const spanEl=ownerDocument.createElement('span');if(opt_dictionary){if(opt_dictionary.className){spanEl.className=opt_dictionary.className;}
-if(opt_dictionary.textContent){Polymer.dom(spanEl).textContent=opt_dictionary.textContent;}
-if(opt_dictionary.tooltip){spanEl.title=opt_dictionary.tooltip;}
-if(opt_dictionary.parent){Polymer.dom(opt_dictionary.parent).appendChild(spanEl);}
-if(opt_dictionary.bold){spanEl.style.fontWeight='bold';}
-if(opt_dictionary.italic){spanEl.style.fontStyle='italic';}
-if(opt_dictionary.marginLeft){spanEl.style.marginLeft=opt_dictionary.marginLeft;}
-if(opt_dictionary.marginRight){spanEl.style.marginRight=opt_dictionary.marginRight;}
-if(opt_dictionary.backgroundColor){spanEl.style.backgroundColor=opt_dictionary.backgroundColor;}
-if(opt_dictionary.color){spanEl.style.color=opt_dictionary.color;}}
-return spanEl;}
-function createLink(opt_args){let ownerDocument=document;if(opt_args&&opt_args.ownerDocument){ownerDocument=opt_args.ownerDocument;}
-const linkEl=ownerDocument.createElement('a');if(opt_args){if(opt_args.href)linkEl.href=opt_args.href;if(opt_args.tooltip)linkEl.title=opt_args.tooltip;if(opt_args.color)linkEl.style.color=opt_args.color;if(opt_args.bold)linkEl.style.fontWeight='bold';if(opt_args.italic)linkEl.style.fontStyle='italic';if(opt_args.className)linkEl.className=opt_args.className;if(opt_args.parent)Polymer.dom(opt_args.parent).appendChild(linkEl);if(opt_args.marginLeft)linkEl.style.marginLeft=opt_args.marginLeft;if(opt_args.marginRight)linkEl.style.marginRight=opt_args.marginRight;if(opt_args.backgroundColor){linkEl.style.backgroundColor=opt_args.backgroundColor;}
-if(opt_args.textContent){Polymer.dom(linkEl).textContent=opt_args.textContent;}}
-return linkEl;}
-function createDiv(opt_dictionary){const divEl=document.createElement('div');if(opt_dictionary){if(opt_dictionary.className){divEl.className=opt_dictionary.className;}
-if(opt_dictionary.parent){Polymer.dom(opt_dictionary.parent).appendChild(divEl);}
-if(opt_dictionary.textContent){Polymer.dom(divEl).textContent=opt_dictionary.textContent;}
-if(opt_dictionary.maxWidth){divEl.style.maxWidth=opt_dictionary.maxWidth;}}
-return divEl;}
-function createScopedStyle(styleContent){const styleEl=document.createElement('style');styleEl.scoped=true;Polymer.dom(styleEl).innerHTML=styleContent;return styleEl;}
-function valuesEqual(a,b){if(a instanceof Array&&b instanceof Array){return a.length===b.length&&JSON.stringify(a)===JSON.stringify(b);}
-return a===b;}
-function createSelector(targetEl,targetElProperty,settingsKey,defaultValue,items,opt_namespace){let defaultValueIndex;for(let i=0;i<items.length;i++){const item=items[i];if(valuesEqual(item.value,defaultValue)){defaultValueIndex=i;break;}}
-if(defaultValueIndex===undefined){throw new Error('defaultValue must be in the items list');}
-const selectorEl=document.createElement('select');selectorEl.addEventListener('change',onChange);for(let i=0;i<items.length;i++){const item=items[i];const optionEl=document.createElement('option');Polymer.dom(optionEl).textContent=item.label;optionEl.targetPropertyValue=item.value;optionEl.item=item;Polymer.dom(selectorEl).appendChild(optionEl);}
-function onChange(e){const value=selectorEl.selectedOptions[0].targetPropertyValue;tr.b.Settings.set(settingsKey,value,opt_namespace);targetEl[targetElProperty]=value;}
-const oldSetter=targetEl.__lookupSetter__('selectedIndex');selectorEl.__defineGetter__('selectedValue',function(v){return selectorEl.children[selectorEl.selectedIndex].targetPropertyValue;});selectorEl.__defineGetter__('selectedItem',function(v){return selectorEl.children[selectorEl.selectedIndex].item;});selectorEl.__defineSetter__('selectedValue',function(v){for(let i=0;i<selectorEl.children.length;i++){const value=selectorEl.children[i].targetPropertyValue;if(valuesEqual(value,v)){const changed=selectorEl.selectedIndex!==i;if(changed){selectorEl.selectedIndex=i;onChange();}
-return;}}
-throw new Error('Not a valid value');});const initialValue=tr.b.Settings.get(settingsKey,defaultValue,opt_namespace);let didSet=false;for(let i=0;i<selectorEl.children.length;i++){if(valuesEqual(selectorEl.children[i].targetPropertyValue,initialValue)){didSet=true;targetEl[targetElProperty]=initialValue;selectorEl.selectedIndex=i;break;}}
-if(!didSet){selectorEl.selectedIndex=defaultValueIndex;targetEl[targetElProperty]=defaultValue;}
-return selectorEl;}
-function createEditCategorySpan(optionGroupEl,targetEl){const spanEl=createSpan({className:'edit-categories'});Polymer.dom(spanEl).textContent='Edit categories';Polymer.dom(spanEl).classList.add('labeled-option');spanEl.addEventListener('click',function(){targetEl.onClickEditCategories();});return spanEl;}
-function createOptionGroup(targetEl,targetElProperty,settingsKey,defaultValue,items){function onChange(){let value=[];if(this.value.length){value=this.value.split(',');}
-tr.b.Settings.set(settingsKey,value);targetEl[targetElProperty]=value;}
-const optionGroupEl=createSpan({className:'labeled-option-group'});const initialValue=tr.b.Settings.get(settingsKey,defaultValue);for(let i=0;i<items.length;++i){const item=items[i];const id='category-preset-'+item.label.replace(/ /g,'-');const radioEl=document.createElement('input');radioEl.type='radio';Polymer.dom(radioEl).setAttribute('id',id);Polymer.dom(radioEl).setAttribute('name','category-presets-group');Polymer.dom(radioEl).setAttribute('value',item.value);radioEl.addEventListener('change',onChange.bind(radioEl,targetEl,targetElProperty,settingsKey));if(valuesEqual(initialValue,item.value)){radioEl.checked=true;}
-const labelEl=document.createElement('label');Polymer.dom(labelEl).textContent=item.label;Polymer.dom(labelEl).setAttribute('for',id);const spanEl=createSpan({className:'labeled-option'});Polymer.dom(spanEl).appendChild(radioEl);Polymer.dom(spanEl).appendChild(labelEl);spanEl.__defineSetter__('checked',function(opt_bool){const changed=radioEl.checked!==(!!opt_bool);if(!changed)return;radioEl.checked=!!opt_bool;onChange();});spanEl.__defineGetter__('checked',function(){return radioEl.checked;});Polymer.dom(optionGroupEl).appendChild(spanEl);}
-Polymer.dom(optionGroupEl).appendChild(createEditCategorySpan(optionGroupEl,targetEl));if(!initialValue.length){Polymer.dom(optionGroupEl).classList.add('categories-expanded');}
-targetEl[targetElProperty]=initialValue;return optionGroupEl;}
-let nextCheckboxId=1;function createCheckBox(targetEl,targetElProperty,settingsKey,defaultValue,label,opt_changeCb){const buttonEl=document.createElement('input');buttonEl.type='checkbox';let initialValue=defaultValue;if(settingsKey!==undefined){initialValue=tr.b.Settings.get(settingsKey,defaultValue);buttonEl.checked=!!initialValue;}
-if(targetEl){targetEl[targetElProperty]=initialValue;}
-function onChange(){if(settingsKey!==undefined){tr.b.Settings.set(settingsKey,buttonEl.checked);}
-if(targetEl){targetEl[targetElProperty]=buttonEl.checked;}
-if(opt_changeCb){opt_changeCb.call();}}
-buttonEl.addEventListener('change',onChange);const id='#checkbox-'+nextCheckboxId++;const spanEl=createSpan();spanEl.style.display='flex';spanEl.style.whiteSpace='nowrap';Polymer.dom(buttonEl).setAttribute('id',id);const labelEl=document.createElement('label');Polymer.dom(labelEl).textContent=label;Polymer.dom(labelEl).setAttribute('for',id);Polymer.dom(spanEl).appendChild(buttonEl);Polymer.dom(spanEl).appendChild(labelEl);spanEl.__defineSetter__('checked',function(opt_bool){const changed=buttonEl.checked!==(!!opt_bool);if(!changed)return;buttonEl.checked=!!opt_bool;onChange();});spanEl.__defineGetter__('checked',function(){return buttonEl.checked;});return spanEl;}
-function createButton(label,opt_callback,opt_this){const buttonEl=document.createElement('input');buttonEl.type='button';buttonEl.value=label;function onClick(){opt_callback.call(opt_this||buttonEl);}
-if(opt_callback){buttonEl.addEventListener('click',onClick);}
-return buttonEl;}
-function createTextInput(targetEl,targetElProperty,settingsKey,defaultValue){const initialValue=tr.b.Settings.get(settingsKey,defaultValue);const el=document.createElement('input');el.type='text';function onChange(e){tr.b.Settings.set(settingsKey,el.value);targetEl[targetElProperty]=el.value;}
-el.addEventListener('input',onChange);el.value=initialValue;targetEl[targetElProperty]=initialValue;return el;}
-function isElementAttachedToDocument(el){let cur=el;while(Polymer.dom(cur).parentNode){cur=Polymer.dom(cur).parentNode;}
-return(cur===el.ownerDocument||cur.nodeName==='#document-fragment');}
-function asHTMLOrTextNode(value,opt_ownerDocument){if(value instanceof Node){return value;}
-const ownerDocument=opt_ownerDocument||document;return ownerDocument.createTextNode(value);}
-return{createSpan,createLink,createDiv,createScopedStyle,createSelector,createOptionGroup,createCheckBox,createButton,createTextInput,isElementAttachedToDocument,asHTMLOrTextNode,};});'use strict';tr.exportTo('tr.ui.b',function(){const elidedTitleCacheDict=new Map();const elidedTitleCache=new ElidedTitleCache();function ElidedTitleCache(){this.textWidthMap=new Map();}
-ElidedTitleCache.prototype={get(ctx,pixWidth,title,width,sliceDuration){let elidedDict=elidedTitleCacheDict.get(title);if(!elidedDict){elidedDict=new Map();elidedTitleCacheDict.set(title,elidedDict);}
-let elidedDictForPixWidth=elidedDict.get(pixWidth);if(!elidedDictForPixWidth){elidedDict.set(pixWidth,new Map());elidedDictForPixWidth=elidedDict.get(pixWidth);}
-let stringWidthPair=elidedDictForPixWidth.get(sliceDuration);if(stringWidthPair===undefined){let newtitle=title;let elided=false;while(this.labelWidthWorld(ctx,newtitle,pixWidth)>sliceDuration){if(newtitle.length*0.75<1)break;newtitle=newtitle.substring(0,newtitle.length*0.75);elided=true;}
-if(elided&&newtitle.length>3){newtitle=newtitle.substring(0,newtitle.length-3)+'...';}
-stringWidthPair=new ElidedStringWidthPair(newtitle,this.labelWidth(ctx,newtitle));elidedDictForPixWidth.set(sliceDuration,stringWidthPair);}
-return stringWidthPair;},quickMeasureText_(ctx,text){let w=this.textWidthMap.get(text);if(!w){w=ctx.measureText(text).width;this.textWidthMap.set(text,w);}
-return w;},labelWidth(ctx,title){return this.quickMeasureText_(ctx,title)+2;},labelWidthWorld(ctx,title,pixWidth){return this.labelWidth(ctx,title)*pixWidth;}};function ElidedStringWidthPair(string,width){this.string=string;this.width=width;}
-return{ElidedTitleCache,};});'use strict';tr.exportTo('tr.ui.b',function(){const ColorScheme=tr.b.ColorScheme;const colors=ColorScheme.colors;const colorsAsStrings=ColorScheme.colorsAsStrings;const SelectionState=tr.model.SelectionState;const EventPresenter={getSelectableItemColorAsString(item){const offset=this.getColorIdOffset_(item);const colorId=ColorScheme.getVariantColorId(item.colorId,offset);return colorsAsStrings[colorId];},getColorIdOffset_(event){return event.selectionState;},getTextColor(event){if(event.selectionState===SelectionState.DIMMED){return'rgb(60,60,60)';}
-return'rgb(0,0,0)';},getSliceColorId(slice){const offset=this.getColorIdOffset_(slice);return ColorScheme.getVariantColorId(slice.colorId,offset);},getSliceAlpha(slice,async){let alpha=1;if(async){alpha*=0.3;}
-return alpha;},getInstantSliceColor(instant){const offset=this.getColorIdOffset_(instant);const colorId=ColorScheme.getVariantColorId(instant.colorId,offset);return colors[colorId].toStringWithAlphaOverride(1.0);},getObjectInstanceColor(instance){const offset=this.getColorIdOffset_(instance);const colorId=ColorScheme.getVariantColorId(instance.colorId,offset);return colors[colorId].toStringWithAlphaOverride(0.25);},getObjectSnapshotColor(snapshot){const offset=this.getColorIdOffset_(snapshot);let colorId=snapshot.objectInstance.colorId;colorId=ColorScheme.getVariantColorId(colorId,offset);return colors[colorId];},getCounterSeriesColor(colorId,selectionState,opt_alphaMultiplier){const event={selectionState};const offset=this.getColorIdOffset_(event);const c=colors[ColorScheme.getVariantColorId(colorId,offset)];return c.toStringWithAlphaOverride(opt_alphaMultiplier!==undefined?opt_alphaMultiplier:1.0);},getBarSnapshotColor(snapshot,offset){const snapshotOffset=this.getColorIdOffset_(snapshot);let colorId=snapshot.objectInstance.colorId;colorId=ColorScheme.getAnotherColorId(colorId,offset);colorId=ColorScheme.getVariantColorId(colorId,snapshotOffset);return colors[colorId].toStringWithAlphaOverride(1.0);}};return{EventPresenter,};});'use strict';tr.exportTo('tr.ui.b',function(){const elidedTitleCache=new tr.ui.b.ElidedTitleCache();const ColorScheme=tr.b.ColorScheme;const colorsAsStrings=ColorScheme.colorsAsStrings;const EventPresenter=tr.ui.b.EventPresenter;const blackColorId=ColorScheme.getColorIdForReservedName('black');const THIN_SLICE_HEIGHT=4;const SLICE_WAITING_WIDTH_DRAW_THRESHOLD=3;const SLICE_ACTIVE_WIDTH_DRAW_THRESHOLD=1;const SHOULD_ELIDE_TEXT=true;function drawLine(ctx,x1,y1,x2,y2){ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);}
-function drawTriangle(ctx,x1,y1,x2,y2,x3,y3){ctx.beginPath();ctx.moveTo(x1,y1);ctx.lineTo(x2,y2);ctx.lineTo(x3,y3);ctx.closePath();}
-function drawArrow(ctx,x1,y1,x2,y2,arrowLength,arrowWidth){const dx=x2-x1;const dy=y2-y1;const len=Math.sqrt(dx*dx+dy*dy);const perc=(len-arrowLength)/len;const bx=x1+perc*dx;const by=y1+perc*dy;const ux=dx/len;const uy=dy/len;const ax=uy*arrowWidth;const ay=-ux*arrowWidth;ctx.beginPath();drawLine(ctx,x1,y1,x2,y2);ctx.stroke();drawTriangle(ctx,bx+ax,by+ay,x2,y2,bx-ax,by-ay);ctx.fill();}
-function drawSlices(ctx,dt,viewLWorld,viewRWorld,viewHeight,slices,async){const pixelRatio=window.devicePixelRatio||1;const height=viewHeight*pixelRatio;const viewL=dt.xWorldToView(viewLWorld);const viewR=dt.xWorldToView(viewRWorld);let darkRectHeight=THIN_SLICE_HEIGHT*pixelRatio;if(height<darkRectHeight){darkRectHeight=0;}
-const lightRectHeight=height-darkRectHeight;ctx.save();const rect=new tr.ui.b.FastRectRenderer(ctx,viewL,viewR,2,2,colorsAsStrings);rect.setYandH(0,height);const lowSlice=tr.b.findLowIndexInSortedArray(slices,function(slice){return slice.start+slice.duration;},viewLWorld);let hadTopLevel=false;for(let i=lowSlice;i<slices.length;++i){const slice=slices[i];const x=slice.start;if(x>viewRWorld)break;const xView=dt.xWorldToView(x);let wView=1;if(slice.duration>0){const w=Math.max(slice.duration,0.000001);wView=Math.max(dt.xWorldVectorToView(w),1);}
-const colorId=EventPresenter.getSliceColorId(slice);const alpha=EventPresenter.getSliceAlpha(slice,async);const lightAlpha=alpha*0.70;if(async&&slice.isTopLevel){rect.setYandH(3,height-3);hadTopLevel=true;}else{rect.setYandH(0,height);}
-if(!slice.cpuDuration){rect.fillRect(xView,wView,colorId,alpha);continue;}
-let activeWidth=wView*(slice.cpuDuration/slice.duration);let waitingWidth=wView-activeWidth;if(activeWidth<SLICE_ACTIVE_WIDTH_DRAW_THRESHOLD){activeWidth=0;waitingWidth=wView;}
-if(waitingWidth<SLICE_WAITING_WIDTH_DRAW_THRESHOLD){activeWidth=wView;waitingWidth=0;}
-if(activeWidth>0){rect.fillRect(xView,activeWidth,colorId,alpha);}
-if(waitingWidth>0){rect.setYandH(0,lightRectHeight);rect.fillRect(xView+activeWidth-1,waitingWidth+1,colorId,lightAlpha);rect.setYandH(lightRectHeight,darkRectHeight);rect.fillRect(xView+activeWidth-1,waitingWidth+1,colorId,alpha);rect.setYandH(0,height);}}
-rect.flush();if(async&&hadTopLevel){rect.setYandH(2,1);for(let i=lowSlice;i<slices.length;++i){const slice=slices[i];const x=slice.start;if(x>viewRWorld)break;if(!slice.isTopLevel)continue;const xView=dt.xWorldToView(x);let wView=1;if(slice.duration>0){const w=Math.max(slice.duration,0.000001);wView=Math.max(dt.xWorldVectorToView(w),1);}
-rect.fillRect(xView,wView,blackColorId,0.7);}
-rect.flush();}
-ctx.restore();}
-function drawInstantSlicesAsLines(ctx,dt,viewLWorld,viewRWorld,viewHeight,slices,lineWidthInPixels){const pixelRatio=window.devicePixelRatio||1;const height=viewHeight*pixelRatio;ctx.save();ctx.lineWidth=lineWidthInPixels*pixelRatio;const lowSlice=tr.b.findLowIndexInSortedArray(slices,function(slice){return slice.start;},viewLWorld);for(let i=lowSlice;i<slices.length;++i){const slice=slices[i];const x=slice.start;if(x>viewRWorld)break;ctx.strokeStyle=EventPresenter.getInstantSliceColor(slice);const xView=dt.xWorldToView(x);ctx.beginPath();ctx.moveTo(xView,0);ctx.lineTo(xView,height);ctx.stroke();}
-ctx.restore();}
-function drawLabels(ctx,dt,viewLWorld,viewRWorld,slices,async,fontSize,yOffset){const pixelRatio=window.devicePixelRatio||1;const pixWidth=dt.xViewVectorToWorld(1);ctx.save();ctx.textAlign='center';ctx.textBaseline='top';ctx.font=(fontSize*pixelRatio)+'px sans-serif';if(async){ctx.font='italic '+ctx.font;}
-const cY=yOffset*pixelRatio;const lowSlice=tr.b.findLowIndexInSortedArray(slices,function(slice){return slice.start+slice.duration;},viewLWorld);const quickDiscardThreshold=pixWidth*20;for(let i=lowSlice;i<slices.length;++i){const slice=slices[i];if(slice.start>viewRWorld)break;if(slice.duration<=quickDiscardThreshold)continue;const xLeftClipped=Math.max(slice.start,viewLWorld);const xRightClipped=Math.min(slice.start+slice.duration,viewRWorld);const visibleWidth=xRightClipped-xLeftClipped;const title=slice.title+
-(slice.didNotFinish?' (Did Not Finish)':'');let drawnTitle=title;let drawnWidth=elidedTitleCache.labelWidth(ctx,drawnTitle);const fullLabelWidth=elidedTitleCache.labelWidthWorld(ctx,drawnTitle,pixWidth);if(SHOULD_ELIDE_TEXT&&fullLabelWidth>visibleWidth){const elidedValues=elidedTitleCache.get(ctx,pixWidth,drawnTitle,drawnWidth,visibleWidth);drawnTitle=elidedValues.string;drawnWidth=elidedValues.width;}
-if(drawnWidth*pixWidth<visibleWidth){ctx.fillStyle=EventPresenter.getTextColor(slice);const cX=dt.xWorldToView((xLeftClipped+xRightClipped)/2);ctx.fillText(drawnTitle,cX,cY,drawnWidth);}}
-ctx.restore();}
-return{drawSlices,drawInstantSlicesAsLines,drawLabels,drawLine,drawTriangle,drawArrow,elidedTitleCache_:elidedTitleCache,THIN_SLICE_HEIGHT,};});'use strict';tr.exportTo('tr.ui',function(){function TimelineDisplayTransform(opt_that){if(opt_that){this.set(opt_that);return;}
-this.scaleX=1;this.panX=0;this.panY=0;}
-TimelineDisplayTransform.prototype={set(that){this.scaleX=that.scaleX;this.panX=that.panX;this.panY=that.panY;},clone(){return new TimelineDisplayTransform(this);},equals(that){let eq=true;if(that===undefined||that===null){return false;}
-eq&=this.panX===that.panX;eq&=this.panY===that.panY;eq&=this.scaleX===that.scaleX;return!!eq;},almostEquals(that){let eq=true;if(that===undefined||that===null){return false;}
-eq&=Math.abs(this.panX-that.panX)<0.001;eq&=Math.abs(this.panY-that.panY)<0.001;eq&=Math.abs(this.scaleX-that.scaleX)<0.001;return!!eq;},incrementPanXInViewUnits(xDeltaView){this.panX+=this.xViewVectorToWorld(xDeltaView);},xPanWorldPosToViewPos(worldX,viewX,viewWidth){if(typeof viewX==='string'){if(viewX==='left'){viewX=0;}else if(viewX==='center'){viewX=viewWidth/2;}else if(viewX==='right'){viewX=viewWidth-1;}else{throw new Error('viewX must be left|center|right or number.');}}
-this.panX=(viewX/this.scaleX)-worldX;},xPanWorldBoundsIntoView(worldMin,worldMax,viewWidth){if(this.xWorldToView(worldMin)<0){this.xPanWorldPosToViewPos(worldMin,'left',viewWidth);}else if(this.xWorldToView(worldMax)>viewWidth){this.xPanWorldPosToViewPos(worldMax,'right',viewWidth);}},xSetWorldBounds(worldMin,worldMax,viewWidth){const worldWidth=worldMax-worldMin;const scaleX=viewWidth/worldWidth;const panX=-worldMin;this.setPanAndScale(panX,scaleX);},setPanAndScale(p,s){this.scaleX=s;this.panX=p;},xWorldToView(x){return(x+this.panX)*this.scaleX;},xWorldVectorToView(x){return x*this.scaleX;},xViewToWorld(x){return(x/this.scaleX)-this.panX;},xViewVectorToWorld(x){return x/this.scaleX;}};return{TimelineDisplayTransform,};});'use strict';tr.exportTo('tr.ui',function(){function SnapIndicator(y,height){this.y=y;this.height=height;}
-function TimelineInterestRange(vp){this.viewport_=vp;this.range_=new tr.b.math.Range();this.leftSelected_=false;this.rightSelected_=false;this.leftSnapIndicator_=undefined;this.rightSnapIndicator_=undefined;}
-TimelineInterestRange.prototype={get isEmpty(){return this.range_.isEmpty;},reset(){this.range_.reset();this.leftSelected_=false;this.rightSelected_=false;this.leftSnapIndicator_=undefined;this.rightSnapIndicator_=undefined;this.viewport_.dispatchChangeEvent();},get min(){return this.range_.min;},set min(min){this.range_.min=min;this.viewport_.dispatchChangeEvent();},get max(){return this.range_.max;},set max(max){this.range_.max=max;this.viewport_.dispatchChangeEvent();},set(range){this.range_.reset();this.range_.addRange(range);this.viewport_.dispatchChangeEvent();},setMinAndMax(min,max){this.range_.min=min;this.range_.max=max;this.viewport_.dispatchChangeEvent();},get range(){return this.range_.range;},asRangeObject(){const range=new tr.b.math.Range();range.addRange(this.range_);return range;},get leftSelected(){return this.leftSelected_;},set leftSelected(leftSelected){if(this.leftSelected_===leftSelected)return;this.leftSelected_=leftSelected;this.viewport_.dispatchChangeEvent();},get rightSelected(){return this.rightSelected_;},set rightSelected(rightSelected){if(this.rightSelected_===rightSelected)return;this.rightSelected_=rightSelected;this.viewport_.dispatchChangeEvent();},get leftSnapIndicator(){return this.leftSnapIndicator_;},set leftSnapIndicator(leftSnapIndicator){this.leftSnapIndicator_=leftSnapIndicator;this.viewport_.dispatchChangeEvent();},get rightSnapIndicator(){return this.rightSnapIndicator_;},set rightSnapIndicator(rightSnapIndicator){this.rightSnapIndicator_=rightSnapIndicator;this.viewport_.dispatchChangeEvent();},draw(ctx,viewLWorld,viewRWorld,viewHeight){if(this.range_.isEmpty)return;const dt=this.viewport_.currentDisplayTransform;const markerLWorld=this.min;const markerRWorld=this.max;const markerLView=Math.round(dt.xWorldToView(markerLWorld));const markerRView=Math.round(dt.xWorldToView(markerRWorld));ctx.fillStyle='rgba(0, 0, 0, 0.2)';if(markerLWorld>viewLWorld){ctx.fillRect(dt.xWorldToView(viewLWorld),0,markerLView,viewHeight);}
-if(markerRWorld<viewRWorld){ctx.fillRect(markerRView,0,dt.xWorldToView(viewRWorld),viewHeight);}
-const pixelRatio=window.devicePixelRatio||1;ctx.lineWidth=Math.round(pixelRatio);if(this.range_.range>0){this.drawLine_(ctx,viewLWorld,viewRWorld,viewHeight,this.min,this.leftSelected_);this.drawLine_(ctx,viewLWorld,viewRWorld,viewHeight,this.max,this.rightSelected_);}else{this.drawLine_(ctx,viewLWorld,viewRWorld,viewHeight,this.min,this.leftSelected_||this.rightSelected_);}
-ctx.lineWidth=1;},drawLine_(ctx,viewLWorld,viewRWorld,height,ts,selected){if(ts<viewLWorld||ts>=viewRWorld)return;const dt=this.viewport_.currentDisplayTransform;const viewX=Math.round(dt.xWorldToView(ts));ctx.save();ctx.translate((Math.round(ctx.lineWidth)%2)/2,0);ctx.beginPath();tr.ui.b.drawLine(ctx,viewX,0,viewX,height);if(selected){ctx.strokeStyle='rgb(255, 0, 0)';}else{ctx.strokeStyle='rgb(0, 0, 0)';}
-ctx.stroke();ctx.restore();},drawIndicators(ctx,viewLWorld,viewRWorld){if(this.leftSnapIndicator_){this.drawIndicator_(ctx,viewLWorld,viewRWorld,this.range_.min,this.leftSnapIndicator_,this.leftSelected_);}
-if(this.rightSnapIndicator_){this.drawIndicator_(ctx,viewLWorld,viewRWorld,this.range_.max,this.rightSnapIndicator_,this.rightSelected_);}},drawIndicator_(ctx,viewLWorld,viewRWorld,xWorld,si,selected){const dt=this.viewport_.currentDisplayTransform;const viewX=Math.round(dt.xWorldToView(xWorld));ctx.save();ctx.translate((Math.round(ctx.lineWidth)%2)/2,0);const pixelRatio=window.devicePixelRatio||1;const viewY=si.y*devicePixelRatio;const viewHeight=si.height*devicePixelRatio;const arrowSize=4*pixelRatio;if(selected){ctx.fillStyle='rgb(255, 0, 0)';}else{ctx.fillStyle='rgb(0, 0, 0)';}
-tr.ui.b.drawTriangle(ctx,viewX-arrowSize*0.75,viewY,viewX+arrowSize*0.75,viewY,viewX,viewY+arrowSize);ctx.fill();tr.ui.b.drawTriangle(ctx,viewX-arrowSize*0.75,viewY+viewHeight,viewX+arrowSize*0.75,viewY+viewHeight,viewX,viewY+viewHeight-arrowSize);ctx.fill();ctx.restore();}};return{SnapIndicator,TimelineInterestRange,};});'use strict';tr.exportTo('tr.ui.tracks',function(){function ContainerToTrackMap(){this.stableIdToTrackMap_={};}
-ContainerToTrackMap.prototype={addContainer(container,track){if(!track){throw new Error('Must provide a track.');}
-this.stableIdToTrackMap_[container.stableId]=track;},clear(){this.stableIdToTrackMap_={};},getTrackByStableId(stableId){return this.stableIdToTrackMap_[stableId];}};return{ContainerToTrackMap,};});'use strict';tr.exportTo('tr.ui.tracks',function(){function EventToTrackMap(){}
-EventToTrackMap.prototype={addEvent(event,track){if(!track){throw new Error('Must provide a track.');}
-this[event.guid]=track;}};return{EventToTrackMap,};});'use strict';tr.exportTo('tr.ui',function(){const TimelineDisplayTransform=tr.ui.TimelineDisplayTransform;const TimelineInterestRange=tr.ui.TimelineInterestRange;const IDEAL_MAJOR_MARK_DISTANCE_PX=150;const MAJOR_MARK_ROUNDING_FACTOR=100000;class AnimationControllerProxy{constructor(target){this.target_=target;}
-get panX(){return this.target_.currentDisplayTransform_.panX;}
-set panX(panX){this.target_.currentDisplayTransform_.panX=panX;}
-get panY(){return this.target_.currentDisplayTransform_.panY;}
-set panY(panY){this.target_.currentDisplayTransform_.panY=panY;}
-get scaleX(){return this.target_.currentDisplayTransform_.scaleX;}
-set scaleX(scaleX){this.target_.currentDisplayTransform_.scaleX=scaleX;}
-cloneAnimationState(){return this.target_.currentDisplayTransform_.clone();}
-xPanWorldPosToViewPos(xWorld,xView){this.target_.currentDisplayTransform_.xPanWorldPosToViewPos(xWorld,xView,this.target_.modelTrackContainer_.canvas.clientWidth);}}
-function TimelineViewport(parentEl){this.parentEl_=parentEl;this.modelTrackContainer_=undefined;this.currentDisplayTransform_=new TimelineDisplayTransform();this.initAnimationController_();this.showFlowEvents_=false;this.highlightVSync_=false;this.highDetails_=false;this.gridTimebase_=0;this.gridStep_=1000/60;this.gridEnabled_=false;this.hasCalledSetupFunction_=false;this.onResize_=this.onResize_.bind(this);this.onModelTrackControllerScroll_=this.onModelTrackControllerScroll_.bind(this);this.timeMode_=TimelineViewport.TimeMode.TIME_IN_MS;this.majorMarkWorldPositions_=[];this.majorMarkUnit_=undefined;this.interestRange_=new TimelineInterestRange(this);this.eventToTrackMap_=new tr.ui.tracks.EventToTrackMap();this.containerToTrackMap=new tr.ui.tracks.ContainerToTrackMap();this.dispatchChangeEvent=this.dispatchChangeEvent.bind(this);}
-TimelineViewport.TimeMode={TIME_IN_MS:0,REVISIONS:1};TimelineViewport.prototype={__proto__:tr.b.EventTarget.prototype,get isAttachedToDocumentOrInTestMode(){if(this.parentEl_===undefined)return;return tr.ui.b.isElementAttachedToDocument(this.parentEl_);},onResize_(){this.dispatchChangeEvent();},dispatchChangeEvent(){tr.b.dispatchSimpleEvent(this,'change');},detach(){window.removeEventListener('resize',this.dispatchChangeEvent);},initAnimationController_(){this.dtAnimationController_=new tr.ui.b.AnimationController();this.dtAnimationController_.addEventListener('didtick',function(e){this.onCurentDisplayTransformChange_(e.oldTargetState);}.bind(this));this.dtAnimationController_.target=new AnimationControllerProxy(this);},get currentDisplayTransform(){return this.currentDisplayTransform_;},setDisplayTransformImmediately(displayTransform){this.dtAnimationController_.cancelActiveAnimation();const oldDisplayTransform=this.dtAnimationController_.target.cloneAnimationState();this.currentDisplayTransform_.set(displayTransform);this.onCurentDisplayTransformChange_(oldDisplayTransform);},queueDisplayTransformAnimation(animation){if(!(animation instanceof tr.ui.b.Animation)){throw new Error('animation must be instanceof tr.ui.b.Animation');}
-this.dtAnimationController_.queueAnimation(animation);},onCurentDisplayTransformChange_(oldDisplayTransform){if(this.modelTrackContainer_){this.currentDisplayTransform.panY=tr.b.math.clamp(this.currentDisplayTransform.panY,0,this.modelTrackContainer_.scrollHeight-
-this.modelTrackContainer_.clientHeight);}
-const changed=!this.currentDisplayTransform.equals(oldDisplayTransform);const yChanged=this.currentDisplayTransform.panY!==oldDisplayTransform.panY;if(yChanged){this.modelTrackContainer_.scrollTop=this.currentDisplayTransform.panY;}
-if(changed){this.dispatchChangeEvent();}},onModelTrackControllerScroll_(e){if(this.dtAnimationController_.activeAnimation&&this.dtAnimationController_.activeAnimation.affectsPanY){this.dtAnimationController_.cancelActiveAnimation();}
-const panY=this.modelTrackContainer_.scrollTop;this.currentDisplayTransform_.panY=panY;},get modelTrackContainer(){return this.modelTrackContainer_;},set modelTrackContainer(m){if(this.modelTrackContainer_){this.modelTrackContainer_.removeEventListener('scroll',this.onModelTrackControllerScroll_);}
-this.modelTrackContainer_=m;this.modelTrackContainer_.addEventListener('scroll',this.onModelTrackControllerScroll_);},get showFlowEvents(){return this.showFlowEvents_;},set showFlowEvents(showFlowEvents){this.showFlowEvents_=showFlowEvents;this.dispatchChangeEvent();},get highlightVSync(){return this.highlightVSync_;},set highlightVSync(highlightVSync){this.highlightVSync_=highlightVSync;this.dispatchChangeEvent();},get highDetails(){return this.highDetails_;},set highDetails(highDetails){this.highDetails_=highDetails;this.dispatchChangeEvent();},get gridEnabled(){return this.gridEnabled_;},set gridEnabled(enabled){if(this.gridEnabled_===enabled)return;this.gridEnabled_=enabled&&true;this.dispatchChangeEvent();},get gridTimebase(){return this.gridTimebase_;},set gridTimebase(timebase){if(this.gridTimebase_===timebase)return;this.gridTimebase_=timebase;this.dispatchChangeEvent();},get gridStep(){return this.gridStep_;},get interestRange(){return this.interestRange_;},get majorMarkWorldPositions(){return this.majorMarkWorldPositions_;},get majorMarkUnit(){switch(this.timeMode_){case TimelineViewport.TimeMode.TIME_IN_MS:return tr.b.Unit.byName.timeInMsAutoFormat;case TimelineViewport.TimeMode.REVISIONS:return tr.b.Unit.byName.count;default:throw new Error('Cannot get Unit for unsupported time mode '+this.timeMode_);}},get timeMode(){return this.timeMode_;},set timeMode(mode){this.timeMode_=mode;this.dispatchChangeEvent();},updateMajorMarkData(viewLWorld,viewRWorld){const pixelRatio=window.devicePixelRatio||1;const dt=this.currentDisplayTransform;const idealMajorMarkDistancePix=IDEAL_MAJOR_MARK_DISTANCE_PX*pixelRatio;const idealMajorMarkDistanceWorld=dt.xViewVectorToWorld(idealMajorMarkDistancePix);const majorMarkDistanceWorld=tr.b.math.preferredNumberLargerThanMin(idealMajorMarkDistanceWorld);const firstMajorMark=Math.floor(viewLWorld/majorMarkDistanceWorld)*majorMarkDistanceWorld;this.majorMarkWorldPositions_=[];for(let curX=firstMajorMark;curX<viewRWorld;curX+=majorMarkDistanceWorld){this.majorMarkWorldPositions_.push(Math.floor(MAJOR_MARK_ROUNDING_FACTOR*curX)/MAJOR_MARK_ROUNDING_FACTOR);}},drawMajorMarkLines(ctx,viewHeight){ctx.save();ctx.translate((Math.round(ctx.lineWidth)%2)/2,0);ctx.beginPath();for(const majorMark of this.majorMarkWorldPositions_){const x=this.currentDisplayTransform.xWorldToView(majorMark);tr.ui.b.drawLine(ctx,x,0,x,viewHeight);}
-ctx.strokeStyle='#ddd';ctx.stroke();ctx.restore();},drawGridLines(ctx,viewLWorld,viewRWorld,viewHeight){if(!this.gridEnabled)return;const dt=this.currentDisplayTransform;let x=this.gridTimebase;ctx.save();ctx.translate((Math.round(ctx.lineWidth)%2)/2,0);ctx.beginPath();while(x<viewRWorld){if(x>=viewLWorld){const vx=Math.floor(dt.xWorldToView(x));tr.ui.b.drawLine(ctx,vx,0,vx,viewHeight);}
-x+=this.gridStep;}
-ctx.strokeStyle='rgba(255, 0, 0, 0.25)';ctx.stroke();ctx.restore();},getShiftedSelection(selection,offset){const newSelection=new tr.model.EventSet();for(const event of selection){if(event instanceof tr.model.FlowEvent){if(offset>0){newSelection.push(event.endSlice);}else if(offset<0){newSelection.push(event.startSlice);}else{}
-continue;}
-const track=this.trackForEvent(event);track.addEventNearToProvidedEventToSelection(event,offset,newSelection);}
-if(newSelection.length===0)return undefined;return newSelection;},rebuildEventToTrackMap(){this.eventToTrackMap_=new tr.ui.tracks.EventToTrackMap();this.modelTrackContainer_.addEventsToTrackMap(this.eventToTrackMap_);},rebuildContainerToTrackMap(){this.containerToTrackMap.clear();this.modelTrackContainer_.addContainersToTrackMap(this.containerToTrackMap);},trackForEvent(event){return this.eventToTrackMap_[event.guid];}};return{TimelineViewport,};});'use strict';tr.exportTo('tr.c',function(){const BrushingState=tr.ui.b.BrushingState;const EventSet=tr.model.EventSet;const SelectionState=tr.model.SelectionState;const Viewport=tr.ui.TimelineViewport;function BrushingStateController(timelineView){tr.b.EventTarget.call(this);this.timelineView_=timelineView;this.currentBrushingState_=new BrushingState();this.onPopState_=this.onPopState_.bind(this);this.historyEnabled_=false;this.selections_={};}
-BrushingStateController.prototype={__proto__:tr.b.EventTarget.prototype,dispatchChangeEvent_(){const e=new tr.b.Event('change',false,false);this.dispatchEvent(e);},get model(){if(!this.timelineView_){return undefined;}
-return this.timelineView_.model;},get trackView(){if(!this.timelineView_){return undefined;}
-return this.timelineView_.trackView;},get viewport(){if(!this.timelineView_){return undefined;}
-if(!this.timelineView_.trackView){return undefined;}
-return this.timelineView_.trackView.viewport;},get historyEnabled(){return this.historyEnabled_;},set historyEnabled(historyEnabled){this.historyEnabled_=!!historyEnabled;if(historyEnabled){window.addEventListener('popstate',this.onPopState_);}else{window.removeEventListener('popstate',this.onPopState_);}},modelWillChange(){if(this.currentBrushingState_.isAppliedToModel){this.currentBrushingState_.unapplyFromEventSelectionStates();}},modelDidChange(){this.selections_={};this.currentBrushingState_=new BrushingState();this.currentBrushingState_.applyToEventSelectionStates(this.model);const e=new tr.b.Event('model-changed',false,false);this.dispatchEvent(e);this.dispatchChangeEvent_();},onUserInitiatedSelectionChange_(){const selection=this.selection;if(this.historyEnabled){this.selections_[selection.guid]=selection;const state={selection_guid:selection.guid};window.history.pushState(state,document.title);}},onPopState_(e){if(e.state===null)return;const selection=this.selections_[e.state.selection_guid];if(selection){const newState=this.currentBrushingState_.clone();newState.selection=selection;this.currentBrushingState=newState;}
-e.stopPropagation();},get selection(){return this.currentBrushingState_.selection;},get findMatches(){return this.currentBrushingState_.findMatches;},get selectionOfInterest(){return this.currentBrushingState_.selectionOfInterest;},get currentBrushingState(){return this.currentBrushingState_;},set currentBrushingState(newBrushingState){if(newBrushingState.isAppliedToModel){throw new Error('Cannot apply this state, it is applied');}
-const hasValueChanged=!this.currentBrushingState_.equals(newBrushingState);if(newBrushingState!==this.currentBrushingState_&&!hasValueChanged){if(this.currentBrushingState_.isAppliedToModel){this.currentBrushingState_.transferModelOwnershipToClone(newBrushingState);}
-this.currentBrushingState_=newBrushingState;return;}
-if(this.currentBrushingState_.isAppliedToModel){this.currentBrushingState_.unapplyFromEventSelectionStates();}
-this.currentBrushingState_=newBrushingState;this.currentBrushingState_.applyToEventSelectionStates(this.model);this.dispatchChangeEvent_();},addAllEventsMatchingFilterToSelectionAsTask(filter,selection){const timelineView=this.timelineView_.trackView;if(!timelineView){return new tr.b.Task();}
-return timelineView.addAllEventsMatchingFilterToSelectionAsTask(filter,selection);},findTextChangedTo(allPossibleMatches){const newBrushingState=this.currentBrushingState_.clone();newBrushingState.findMatches=allPossibleMatches;this.currentBrushingState=newBrushingState;},findFocusChangedTo(currentFocus){const newBrushingState=this.currentBrushingState_.clone();newBrushingState.selection=currentFocus;this.currentBrushingState=newBrushingState;this.onUserInitiatedSelectionChange_();},findTextCleared(){if(this.xNavStringMarker_!==undefined){this.model.removeAnnotation(this.xNavStringMarker_);this.xNavStringMarker_=undefined;}
-if(this.guideLineAnnotation_!==undefined){this.model.removeAnnotation(this.guideLineAnnotation_);this.guideLineAnnotation_=undefined;}
-const newBrushingState=this.currentBrushingState_.clone();newBrushingState.selection=new EventSet();newBrushingState.findMatches=new EventSet();this.currentBrushingState=newBrushingState;this.onUserInitiatedSelectionChange_();},uiStateFromString(string){return tr.ui.b.UIState.fromUserFriendlyString(this.model,this.viewport,string);},navToPosition(uiState,showNavLine){this.trackView.navToPosition(uiState,showNavLine);},changeSelectionFromTimeline(selection){const newBrushingState=this.currentBrushingState_.clone();newBrushingState.selection=selection;newBrushingState.findMatches=new EventSet();this.currentBrushingState=newBrushingState;this.onUserInitiatedSelectionChange_();},showScriptControlSelection(selection){const newBrushingState=this.currentBrushingState_.clone();newBrushingState.selection=selection;newBrushingState.findMatches=new EventSet();this.currentBrushingState=newBrushingState;},changeSelectionFromRequestSelectionChangeEvent(selection){const newBrushingState=this.currentBrushingState_.clone();newBrushingState.selection=selection;newBrushingState.findMatches=new EventSet();this.currentBrushingState=newBrushingState;this.onUserInitiatedSelectionChange_();},changeAnalysisViewRelatedEvents(eventSet){const newBrushingState=this.currentBrushingState_.clone();newBrushingState.analysisViewRelatedEvents=eventSet;this.currentBrushingState=newBrushingState;},changeAnalysisLinkHoveredEvents(eventSet){const newBrushingState=this.currentBrushingState_.clone();newBrushingState.analysisLinkHoveredEvents=eventSet;this.currentBrushingState=newBrushingState;},getViewSpecificBrushingState(viewId){return this.currentBrushingState.viewSpecificBrushingStates[viewId];},changeViewSpecificBrushingState(viewId,newState){const oldStates=this.currentBrushingState_.viewSpecificBrushingStates;const newStates={};for(const id in oldStates){newStates[id]=oldStates[id];}
-if(newState===undefined){delete newStates[viewId];}else{newStates[viewId]=newState;}
-const newBrushingState=this.currentBrushingState_.clone();newBrushingState.viewSpecificBrushingStates=newStates;this.currentBrushingState=newBrushingState;}};BrushingStateController.getControllerForElement=function(element){if(tr.isHeadless){throw new Error('Unsupported');}
-let currentElement=element;while(currentElement){if(currentElement.brushingStateController){return currentElement.brushingStateController;}
-if(currentElement.parentElement){currentElement=currentElement.parentElement;continue;}
-let currentNode=currentElement;while(Polymer.dom(currentNode).parentNode){currentNode=Polymer.dom(currentNode).parentNode;}
-currentElement=currentNode.host;}
-return undefined;};return{BrushingStateController,};});'use strict';Polymer({is:'tr-ui-a-analysis-link',properties:{href:{type:String}},listeners:{'click':'onClicked_','mouseenter':'onMouseEnter_','mouseleave':'onMouseLeave_'},ready(){this.selection_=undefined;},attached(){this.controller_=tr.c.BrushingStateController.getControllerForElement(this);},detached(){this.clearHighlight_();this.controller_=undefined;},set color(c){this.style.color=c;},get selection(){return this.selection_;},set selection(selection){this.selection_=selection;Polymer.dom(this).textContent=selection.userFriendlyName;},setSelectionAndContent(selection,opt_textContent){this.selection_=selection;if(opt_textContent){Polymer.dom(this).textContent=opt_textContent;}},getCurrentSelection_(){if(typeof this.selection_==='function'){return this.selection_();}
-return this.selection_;},setHighlight_(opt_eventSet){if(this.controller_){this.controller_.changeAnalysisLinkHoveredEvents(opt_eventSet);}},clearHighlight_(opt_eventSet){this.setHighlight_();},onClicked_(clickEvent){if(!this.selection_)return;clickEvent.stopPropagation();const event=new tr.model.RequestSelectionChangeEvent();event.selection=this.getCurrentSelection_();this.dispatchEvent(event);},onMouseEnter_(){this.setHighlight_(this.getCurrentSelection_());},onMouseLeave_(){this.clearHighlight_();}});'use strict';tr.exportTo('tr.ui.b',function(){const TableFormat={};TableFormat.SelectionMode={NONE:0,ROW:1,CELL:2};TableFormat.HighlightStyle={DEFAULT:0,NONE:1,LIGHT:2,DARK:3};TableFormat.ColumnAlignment={LEFT:0,RIGHT:1};return{TableFormat,};});'use strict';(function(){const RIGHT_ARROW=String.fromCharCode(0x25b6);const UNSORTED_ARROW=String.fromCharCode(0x25BF);const ASCENDING_ARROW=String.fromCharCode(0x25B4);const DESCENDING_ARROW=String.fromCharCode(0x25BE);const SelectionMode=tr.ui.b.TableFormat.SelectionMode;const SelectionModeValues=new Set(Object.values(SelectionMode));const HighlightStyle=tr.ui.b.TableFormat.HighlightStyle;const HighlightStyleValues=new Set(Object.values(HighlightStyle));const ColumnAlignment=tr.ui.b.TableFormat.ColumnAlignment;const ColumnAlignmentValues=new Set(Object.values(ColumnAlignment));Polymer({is:'tr-ui-b-table',created(){this.selectionMode_=SelectionMode.NONE;this.rowHighlightStyle_=HighlightStyle.DEFAULT;this.cellHighlightStyle_=HighlightStyle.DEFAULT;this.selectedTableRowInfo_=undefined;this.selectedColumnIndex_=undefined;this.tableColumns_=[];this.tableRows_=[];this.tableRowsInfo_=new WeakMap();this.tableFooterRows_=[];this.tableFooterRowsInfo_=new WeakMap();this.sortColumnIndex_=undefined;this.sortDescending_=false;this.columnsWithExpandButtons_=[];this.headerCells_=[];this.showHeader_=true;this.emptyValue_=undefined;this.subRowsPropertyName_='subRows';this.customizeTableRowCallback_=undefined;this.defaultExpansionStateCallback_=undefined;this.userCanModifySortOrder_=true;this.computedFontSizePx_=undefined;},ready(){this.$.body.addEventListener('keydown',this.onKeyDown_.bind(this),true);this.$.body.addEventListener('focus',this.onFocus_.bind(this),true);},clear(){this.selectionMode_=SelectionMode.NONE;this.rowHighlightStyle_=HighlightStyle.DEFAULT;this.cellHighlightStyle_=HighlightStyle.DEFAULT;this.selectedTableRowInfo_=undefined;this.selectedColumnIndex_=undefined;Polymer.dom(this).textContent='';this.tableColumns_=[];this.tableRows_=[];this.tableRowsInfo_=new WeakMap();this.tableFooterRows_=[];this.tableFooterRowsInfo_=new WeakMap();this.sortColumnIndex_=undefined;this.sortDescending_=false;this.columnsWithExpandButtons_=[];this.headerCells_=[];this.showHeader_=true;this.emptyValue_=undefined;this.subRowsPropertyName_='subRows';this.defaultExpansionStateCallback_=undefined;this.userCanModifySortOrder_=true;},set zebra(zebra){if(zebra){this.setAttribute('zebra',true);}else{this.removeAttribute('zebra');}},get zebra(){return this.getAttribute('zebra');},get showHeader(){return this.showHeader_;},set showHeader(showHeader){this.showHeader_=showHeader;this.scheduleRebuildHeaders_();},set subRowsPropertyName(name){this.subRowsPropertyName_=name;},set defaultExpansionStateCallback(cb){this.defaultExpansionStateCallback_=cb;this.scheduleRebuildBody_();},set customizeTableRowCallback(cb){this.customizeTableRowCallback_=cb;this.scheduleRebuildBody_();},get emptyValue(){return this.emptyValue_;},set emptyValue(emptyValue){const previousEmptyValue=this.emptyValue_;this.emptyValue_=emptyValue;if(this.tableRows_.length===0&&emptyValue!==previousEmptyValue){this.scheduleRebuildBody_();}},set tableColumns(columns){let columnsWithExpandButtons=[];for(let i=0;i<columns.length;i++){if(columns[i].showExpandButtons){columnsWithExpandButtons.push(i);}}
-if(columnsWithExpandButtons.length===0){columnsWithExpandButtons=[0];}
-for(let i=0;i<columns.length;i++){const colInfo=columns[i];if(colInfo.width===undefined)continue;const hasExpandButton=columnsWithExpandButtons.includes(i);const w=colInfo.width;if(w){if(/\d+px/.test(w)){continue;}else if(/\d+%/.test(w)){if(hasExpandButton){throw new Error('Columns cannot be %-sized and host '+' an expand button');}}else{throw new Error('Unrecognized width string');}}}
-let sortIndex=undefined;const currentSortColumn=this.tableColumns[this.sortColumnIndex_];if(currentSortColumn){for(const[i,column]of columns.entries()){if(currentSortColumn.title===column.title){sortIndex=i;break;}}}
-this.tableColumns_=columns;this.headerCells_=[];this.columnsWithExpandButtons_=columnsWithExpandButtons;this.scheduleRebuildHeaders_();this.sortColumnIndex=sortIndex;this.tableRows=this.tableRows_;},get tableColumns(){return this.tableColumns_;},set tableRows(rows){this.selectedTableRowInfo_=undefined;this.selectedColumnIndex_=undefined;this.tableRows_=rows;this.tableRowsInfo_=new WeakMap();this.scheduleRebuildBody_();},get tableRows(){return this.tableRows_;},set footerRows(rows){this.tableFooterRows_=rows;this.tableFooterRowsInfo_=new WeakMap();this.scheduleRebuildFooter_();},get footerRows(){return this.tableFooterRows_;},get userCanModifySortOrder(){return this.userCanModifySortOrder_;},set userCanModifySortOrder(userCanModifySortOrder){const newUserCanModifySortOrder=!!userCanModifySortOrder;if(newUserCanModifySortOrder===this.userCanModifySortOrder_){return;}
-this.userCanModifySortOrder_=newUserCanModifySortOrder;this.scheduleRebuildHeaders_();},set sortColumnIndex(number){if(number===this.sortColumnIndex_)return;if(number!==undefined){if(this.tableColumns_.length<=number){throw new Error('Column number '+number+' is out of bounds.');}
-if(!this.tableColumns_[number].cmp){throw new Error('Column '+number+' does not have a comparator.');}}
-this.sortColumnIndex_=number;this.updateHeaderArrows_();this.scheduleRebuildBody_();this.dispatchSortingChangedEvent_();},get sortColumnIndex(){return this.sortColumnIndex_;},set sortDescending(value){const newValue=!!value;if(newValue!==this.sortDescending_){this.sortDescending_=newValue;this.updateHeaderArrows_();this.scheduleRebuildBody_();this.dispatchSortingChangedEvent_();}},get sortDescending(){return this.sortDescending_;},updateHeaderArrows_(){for(let i=0;i<this.headerCells_.length;i++){const headerCell=this.headerCells_[i];const isColumnCurrentlySorted=i===this.sortColumnIndex_;if(!this.tableColumns_[i].cmp||(!this.userCanModifySortOrder_&&!isColumnCurrentlySorted)){headerCell.sideContent='';continue;}
-if(!isColumnCurrentlySorted){headerCell.sideContent=UNSORTED_ARROW;headerCell.sideContentDisabled=false;continue;}
-headerCell.sideContent=this.sortDescending_?DESCENDING_ARROW:ASCENDING_ARROW;headerCell.sideContentDisabled=!this.userCanModifySortOrder_;}},generateHeaderColumns_(){const selectedTableColumnIndex=this.selectedTableColumnIndex;Polymer.dom(this.$.cols).textContent='';for(let i=0;i<this.tableColumns_.length;++i){const colElement=document.createElement('col');if(i===selectedTableColumnIndex){colElement.setAttribute('selected',true);}
-Polymer.dom(this.$.cols).appendChild(colElement);}
-this.headerCells_=[];Polymer.dom(this.$.head).textContent='';if(!this.showHeader_)return;const tr=this.appendNewElement_(this.$.head,'tr');for(let i=0;i<this.tableColumns_.length;i++){const td=this.appendNewElement_(tr,'td');const headerCell=document.createElement('tr-ui-b-table-header-cell');headerCell.column=this.tableColumns_[i];if(this.tableColumns_[i].cmp){const isColumnCurrentlySorted=i===this.sortColumnIndex_;if(isColumnCurrentlySorted){headerCell.sideContent=this.sortDescending_?DESCENDING_ARROW:ASCENDING_ARROW;if(!this.userCanModifySortOrder_){headerCell.sideContentDisabled=true;}}
-if(this.userCanModifySortOrder_){Polymer.dom(td).classList.add('sensitive');if(!isColumnCurrentlySorted){headerCell.sideContent=UNSORTED_ARROW;}
-headerCell.tapCallback=this.createSortCallback_(i);}}
-Polymer.dom(td).appendChild(headerCell);this.headerCells_.push(headerCell);}},applySizes_(){if(this.tableRows_.length===0&&!this.showHeader)return;let rowToRemoveSizing;let rowToSize;if(this.showHeader){rowToSize=Polymer.dom(this.$.head).children[0];rowToRemoveSizing=Polymer.dom(this.$.body).children[0];}else{rowToSize=Polymer.dom(this.$.body).children[0];rowToRemoveSizing=Polymer.dom(this.$.head).children[0];}
-for(let i=0;i<this.tableColumns_.length;i++){if(rowToRemoveSizing&&Polymer.dom(rowToRemoveSizing).children[i]){const tdToRemoveSizing=Polymer.dom(rowToRemoveSizing).children[i];tdToRemoveSizing.style.minWidth='';tdToRemoveSizing.style.width='';}
-const td=Polymer.dom(rowToSize).children[i];let delta;if(this.columnsWithExpandButtons_.includes(i)){td.style.paddingLeft=this.basicIndentation_+'px';delta=this.basicIndentation_+'px';}else{delta=undefined;}
-function calc(base,delta){if(delta){return'calc('+base+' - '+delta+')';}
-return base;}
-const w=this.tableColumns_[i].width;if(w){if(/\d+px/.test(w)){td.style.minWidth=calc(w,delta);}else if(/\d+%/.test(w)){td.style.width=w;}else{throw new Error('Unrecognized width string: '+w);}}}},createSortCallback_(columnNumber){return function(){if(!this.userCanModifySortOrder_)return;const previousIndex=this.sortColumnIndex;this.sortColumnIndex=columnNumber;if(previousIndex!==columnNumber){this.sortDescending=false;}else{this.sortDescending=!this.sortDescending;}}.bind(this);},generateTableRowNodes_(tableSection,userRows,rowInfoMap,indentation,lastAddedRow,parentRowInfo){if(this.sortColumnIndex_!==undefined&&tableSection===this.$.body){userRows=userRows.slice();userRows.sort(function(rowA,rowB){let c=this.tableColumns_[this.sortColumnIndex_].cmp(rowA,rowB);if(this.sortDescending_){c=-c;}
-return c;}.bind(this));}
-for(let i=0;i<userRows.length;i++){const userRow=userRows[i];const rowInfo=this.getOrCreateRowInfoFor_(rowInfoMap,userRow,parentRowInfo);const htmlNode=this.getHTMLNodeForRowInfo_(tableSection,rowInfo,rowInfoMap,indentation);if(lastAddedRow===undefined){Polymer.dom(tableSection).insertBefore(htmlNode,Polymer.dom(tableSection).firstChild);}else{const nextSiblingOfLastAdded=Polymer.dom(lastAddedRow).nextSibling;Polymer.dom(tableSection).insertBefore(htmlNode,nextSiblingOfLastAdded);}
-lastAddedRow=htmlNode;if(!rowInfo.isExpanded)continue;lastAddedRow=this.generateTableRowNodes_(tableSection,userRow[this.subRowsPropertyName_],rowInfoMap,indentation+1,lastAddedRow,rowInfo);}
-return lastAddedRow;},getOrCreateRowInfoFor_(rowInfoMap,userRow,parentRowInfo){let rowInfo=undefined;if(rowInfoMap.has(userRow)){rowInfo=rowInfoMap.get(userRow);}else{rowInfo={userRow,htmlNode:undefined,parentRowInfo};rowInfoMap.set(userRow,rowInfo);}
-rowInfo.isExpanded=this.getExpandedForUserRow_(userRow);return rowInfo;},customizeTableRow_(userRow,trElement){if(!this.customizeTableRowCallback_)return;this.customizeTableRowCallback_(userRow,trElement);},get basicIndentation_(){if(this.computedFontSizePx_===undefined){this.computedFontSizePx_=parseInt(getComputedStyle(this).fontSize)||16;}
-return this.computedFontSizePx_-2;},getHTMLNodeForRowInfo_(tableSection,rowInfo,rowInfoMap,indentation){if(rowInfo.htmlNode){this.customizeTableRow_(rowInfo.userRow,rowInfo.htmlNode);return rowInfo.htmlNode;}
-const INDENT_SPACE=indentation*16;const INDENT_SPACE_NO_BUTTON=indentation*16+this.basicIndentation_;const trElement=this.ownerDocument.createElement('tr');rowInfo.htmlNode=trElement;rowInfo.indentation=indentation;trElement.rowInfo=rowInfo;this.customizeTableRow_(rowInfo.userRow,trElement);const isBodyRow=tableSection===this.$.body;const isExpandableRow=rowInfo.userRow[this.subRowsPropertyName_]&&rowInfo.userRow[this.subRowsPropertyName_].length;for(let i=0;i<this.tableColumns_.length;){const td=this.appendNewElement_(trElement,'td');td.columnIndex=i;const column=this.tableColumns_[i];const value=column.value(rowInfo.userRow);const colSpan=column.colSpan?column.colSpan:1;td.style.colSpan=colSpan;switch(column.align){case undefined:case ColumnAlignment.LEFT:break;case ColumnAlignment.RIGHT:td.style.textAlign='right';break;default:throw new Error('Invalid alignment of column at index='+i+': '+column.align);}
-if(this.doesColumnIndexSupportSelection(i)){Polymer.dom(td).classList.add('supports-selection');}
-if(this.columnsWithExpandButtons_.includes(i)){if(rowInfo.userRow[this.subRowsPropertyName_]&&rowInfo.userRow[this.subRowsPropertyName_].length>0){td.style.paddingLeft=INDENT_SPACE+'px';td.style.display='flex';const expandButton=this.appendNewElement_(td,'expand-button');Polymer.dom(expandButton).textContent=RIGHT_ARROW;if(rowInfo.isExpanded){Polymer.dom(expandButton).classList.add('button-expanded');}}else{td.style.paddingLeft=INDENT_SPACE_NO_BUTTON+'px';}}
-if(value!==undefined){Polymer.dom(td).appendChild(tr.ui.b.asHTMLOrTextNode(value,this.ownerDocument));}
-td.addEventListener('click',function(i,clickEvent){clickEvent.preventDefault();if(!isBodyRow&&!isExpandableRow)return;clickEvent.stopPropagation();if(clickEvent.target.tagName==='EXPAND-BUTTON'){this.setExpandedForUserRow_(tableSection,rowInfoMap,rowInfo.userRow,!rowInfo.isExpanded);return;}
-if(isBodyRow&&this.selectionMode_!==SelectionMode.NONE){let shouldSelect=false;let shouldFocus=false;switch(this.selectionMode_){case SelectionMode.ROW:shouldSelect=this.selectedTableRowInfo_!==rowInfo;shouldFocus=true;break;case SelectionMode.CELL:if(this.doesColumnIndexSupportSelection(i)){shouldSelect=this.selectedTableRowInfo_!==rowInfo||this.selectedColumnIndex_!==i;shouldFocus=true;}
-break;default:throw new Error('Invalid selection mode '+
-this.selectionMode_);}
-if(shouldFocus){this.focus();}
-if(shouldSelect){this.didTableRowInfoGetClicked_(rowInfo,i);return;}}
-if(isExpandableRow){this.setExpandedForUserRow_(tableSection,rowInfoMap,rowInfo.userRow,!rowInfo.isExpanded);}}.bind(this,i));if(isBodyRow){td.addEventListener('dblclick',function(i,e){e.stopPropagation();this.dispatchStepIntoEvent_(rowInfo,i);}.bind(this,i));}
-i+=colSpan;}
-return rowInfo.htmlNode;},removeSubNodes_(tableSection,rowInfo,rowInfoMap){if(rowInfo.userRow[this.subRowsPropertyName_]===undefined)return;for(let i=0;i<rowInfo.userRow[this.subRowsPropertyName_].length;i++){const subRow=rowInfo.userRow[this.subRowsPropertyName_][i];const subRowInfo=rowInfoMap.get(subRow);if(!subRowInfo)continue;const subNode=subRowInfo.htmlNode;if(subNode&&Polymer.dom(subNode).parentNode===tableSection){Polymer.dom(tableSection).removeChild(subNode);this.removeSubNodes_(tableSection,subRowInfo,rowInfoMap);}}},scheduleRebuildHeaders_(){this.headerDirty_=true;this.scheduleRebuild_();},scheduleRebuildBody_(){this.bodyDirty_=true;this.scheduleRebuild_();},scheduleRebuildFooter_(){this.footerDirty_=true;this.scheduleRebuild_();},scheduleRebuild_(){if(this.rebuildPending_)return;this.rebuildPending_=true;setTimeout(function(){this.rebuildPending_=false;this.rebuild();}.bind(this),0);},rebuildIfNeeded_(){this.rebuild();},rebuild(){const wasBodyOrHeaderDirty=this.headerDirty_||this.bodyDirty_;if(this.headerDirty_){this.generateHeaderColumns_();this.headerDirty_=false;}
-if(this.bodyDirty_){Polymer.dom(this.$.body).textContent='';this.generateTableRowNodes_(this.$.body,this.tableRows_,this.tableRowsInfo_,0,undefined,undefined);if(this.tableRows_.length===0&&this.emptyValue_!==undefined){const trElement=this.ownerDocument.createElement('tr');Polymer.dom(this.$.body).appendChild(trElement);Polymer.dom(trElement).classList.add('empty-row');const td=this.ownerDocument.createElement('td');Polymer.dom(trElement).appendChild(td);td.colSpan=this.tableColumns_.length;const emptyValue=this.emptyValue_;Polymer.dom(td).appendChild(tr.ui.b.asHTMLOrTextNode(emptyValue,this.ownerDocument));}
-this.bodyDirty_=false;}
-if(wasBodyOrHeaderDirty)this.applySizes_();if(this.footerDirty_){Polymer.dom(this.$.foot).textContent='';this.generateTableRowNodes_(this.$.foot,this.tableFooterRows_,this.tableFooterRowsInfo_,0,undefined,undefined);if(this.tableFooterRowsInfo_.length){Polymer.dom(this.$.body).classList.add('has-footer');}else{Polymer.dom(this.$.body).classList.remove('has-footer');}
-this.footerDirty_=false;}},appendNewElement_(parent,tagName){const element=parent.ownerDocument.createElement(tagName);Polymer.dom(parent).appendChild(element);return element;},getExpandedForTableRow(userRow){this.rebuildIfNeeded_();const rowInfo=this.tableRowsInfo_.get(userRow);if(rowInfo===undefined){throw new Error('Row has not been seen, must expand its parents');}
-return rowInfo.isExpanded;},getExpandedForUserRow_(userRow){if(userRow[this.subRowsPropertyName_]===undefined){return false;}
-if(userRow[this.subRowsPropertyName_].length===0){return false;}
-if(userRow.isExpanded){return true;}
-if((userRow.isExpanded!==undefined)&&(userRow.isExpanded===false)){return false;}
-const rowInfo=this.tableRowsInfo_.get(userRow);if(rowInfo&&rowInfo.isExpanded){return true;}
-if(this.defaultExpansionStateCallback_===undefined){return false;}
-let parentUserRow=undefined;if(rowInfo&&rowInfo.parentRowInfo){parentUserRow=rowInfo.parentRowInfo.userRow;}
-return this.defaultExpansionStateCallback_(userRow,parentUserRow);},setExpandedForTableRow(userRow,expanded){this.rebuildIfNeeded_();const rowInfo=this.tableRowsInfo_.get(userRow);if(rowInfo===undefined){throw new Error('Row has not been seen, must expand its parents');}
-return this.setExpandedForUserRow_(this.$.body,this.tableRowsInfo_,userRow,expanded);},setExpandedForUserRow_(tableSection,rowInfoMap,userRow,expanded){this.rebuildIfNeeded_();const rowInfo=rowInfoMap.get(userRow);if(rowInfo===undefined){throw new Error('Row has not been seen, must expand its parents');}
-const wasExpanded=rowInfo.isExpanded;rowInfo.isExpanded=!!expanded;if(rowInfo.htmlNode===undefined)return;if(rowInfo.htmlNode.parentElement!==tableSection){return;}
-const expandButton=Polymer.dom(rowInfo.htmlNode).querySelector('expand-button');if(rowInfo.isExpanded){Polymer.dom(expandButton).classList.add('button-expanded');const lastAddedRow=rowInfo.htmlNode;if(rowInfo.userRow[this.subRowsPropertyName_]){this.generateTableRowNodes_(tableSection,rowInfo.userRow[this.subRowsPropertyName_],rowInfoMap,rowInfo.indentation+1,lastAddedRow,rowInfo);}}else{Polymer.dom(expandButton).classList.remove('button-expanded');this.removeSubNodes_(tableSection,rowInfo,rowInfoMap);}
-if(wasExpanded!==rowInfo.isExpanded){const e=new tr.b.Event('row-expanded-changed');e.row=rowInfo.userRow;this.dispatchEvent(e);}
-this.maybeUpdateSelectedRow_();},get selectionMode(){return this.selectionMode_;},set selectionMode(selectionMode){if(!SelectionModeValues.has(selectionMode)){throw new Error('Invalid selection mode '+selectionMode);}
-this.rebuildIfNeeded_();this.selectionMode_=selectionMode;this.didSelectionStateChange_();},get rowHighlightStyle(){return this.rowHighlightStyle_;},set rowHighlightStyle(rowHighlightStyle){if(!HighlightStyleValues.has(rowHighlightStyle)){throw new Error('Invalid row highlight style '+rowHighlightStyle);}
-this.rebuildIfNeeded_();this.rowHighlightStyle_=rowHighlightStyle;this.didSelectionStateChange_();},get resolvedRowHighlightStyle(){if(this.rowHighlightStyle_!==HighlightStyle.DEFAULT){return this.rowHighlightStyle_;}
-switch(this.selectionMode_){case SelectionMode.NONE:return HighlightStyle.NONE;case SelectionMode.ROW:return HighlightStyle.DARK;case SelectionMode.CELL:return HighlightStyle.LIGHT;default:throw new Error('Invalid selection mode '+selectionMode);}},get cellHighlightStyle(){return this.cellHighlightStyle_;},set cellHighlightStyle(cellHighlightStyle){if(!HighlightStyleValues.has(cellHighlightStyle)){throw new Error('Invalid cell highlight style '+cellHighlightStyle);}
-this.rebuildIfNeeded_();this.cellHighlightStyle_=cellHighlightStyle;this.didSelectionStateChange_();},get resolvedCellHighlightStyle(){if(this.cellHighlightStyle_!==HighlightStyle.DEFAULT){return this.cellHighlightStyle_;}
-switch(this.selectionMode_){case SelectionMode.NONE:case SelectionMode.ROW:return HighlightStyle.NONE;case SelectionMode.CELL:return HighlightStyle.DARK;default:throw new Error('Invalid selection mode '+selectionMode);}},setHighlightStyle_(highlightAttribute,resolvedHighlightStyle){switch(resolvedHighlightStyle){case HighlightStyle.NONE:Polymer.dom(this.$.body).removeAttribute(highlightAttribute);break;case HighlightStyle.LIGHT:Polymer.dom(this.$.body).setAttribute(highlightAttribute,'light');break;case HighlightStyle.DARK:Polymer.dom(this.$.body).setAttribute(highlightAttribute,'dark');break;default:throw new Error('Invalid resolved highlight style '+
-resolvedHighlightStyle);}},didSelectionStateChange_(){this.setHighlightStyle_('row-highlight-style',this.resolvedRowHighlightStyle);this.setHighlightStyle_('cell-highlight-style',this.resolvedCellHighlightStyle);this.removeSelectedState_();switch(this.selectionMode_){case SelectionMode.ROW:Polymer.dom(this.$.body).setAttribute('selection-mode','row');Polymer.dom(this.$.body).setAttribute('tabindex',0);this.selectedColumnIndex_=undefined;break;case SelectionMode.CELL:Polymer.dom(this.$.body).setAttribute('selection-mode','cell');Polymer.dom(this.$.body).setAttribute('tabindex',0);if(this.selectedTableRowInfo_&&this.selectedColumnIndex_===undefined){const i=this.getFirstSelectableColumnIndex_();if(i===-1){this.selectedTableRowInfo_=undefined;}else{this.selectedColumnIndex_=i;}}
-break;case SelectionMode.NONE:Polymer.dom(this.$.body).removeAttribute('selection-mode');Polymer.dom(this.$.body).removeAttribute('tabindex');this.$.body.blur();this.selectedTableRowInfo_=undefined;this.selectedColumnIndex_=undefined;break;default:throw new Error('Invalid selection mode '+this.selectionMode_);}
-this.maybeUpdateSelectedRow_();},maybeUpdateSelectedRow_(){if(this.selectedTableRowInfo_===undefined)return;function isVisible(rowInfo){if(!rowInfo.htmlNode)return false;return!!rowInfo.htmlNode.parentElement;}
-if(isVisible(this.selectedTableRowInfo_)){this.updateSelectedState_();return;}
-this.removeSelectedState_();let curRowInfo=this.selectedTableRowInfo_;while(curRowInfo&&!isVisible(curRowInfo)){curRowInfo=curRowInfo.parentRowInfo;}
-this.selectedTableRowInfo_=curRowInfo;if(this.selectedTableRowInfo_){this.updateSelectedState_();}else{this.selectedColumnIndex_=undefined;}},didTableRowInfoGetClicked_(rowInfo,columnIndex){switch(this.selectionMode_){case SelectionMode.NONE:return;case SelectionMode.CELL:if(!this.doesColumnIndexSupportSelection(columnIndex)){return;}
-if(this.selectedColumnIndex!==columnIndex){this.selectedColumnIndex=columnIndex;}
-case SelectionMode.ROW:if(this.selectedTableRowInfo_!==rowInfo){this.selectedTableRow=rowInfo.userRow;}}},dispatchStepIntoEvent_(rowInfo,columnIndex){const e=new tr.b.Event('step-into');e.tableRow=rowInfo.userRow;e.tableColumn=this.tableColumns_[columnIndex];e.columnIndex=columnIndex;this.dispatchEvent(e);},get selectedCell(){const row=this.selectedTableRow;const columnIndex=this.selectedColumnIndex;if(row===undefined||columnIndex===undefined||this.tableColumns_.length<=columnIndex){return undefined;}
-const column=this.tableColumns_[columnIndex];return{row,column,value:column.value(row)};},get selectedTableColumnIndex(){const cols=Polymer.dom(this.$.cols).children;for(let i=0;i<cols.length;++i){if(cols[i].getAttribute('selected')){return i;}}
-return undefined;},set selectedTableColumnIndex(selectedIndex){const cols=Polymer.dom(this.$.cols).children;for(let i=0;i<cols.length;++i){if(i===selectedIndex){cols[i].setAttribute('selected',true);}else{cols[i].removeAttribute('selected');}}},get selectedTableRow(){if(!this.selectedTableRowInfo_)return undefined;return this.selectedTableRowInfo_.userRow;},set selectedTableRow(userRow){this.rebuildIfNeeded_();if(this.selectionMode_===SelectionMode.NONE){throw new Error('Selection is off.');}
-let rowInfo;if(userRow===undefined){rowInfo=undefined;}else{rowInfo=this.tableRowsInfo_.get(userRow);if(!rowInfo){throw new Error('Row has not been seen, must expand its parents.');}}
-const e=this.prepareToChangeSelection_();if(!rowInfo){this.selectedColumnIndex_=undefined;}else{switch(this.selectionMode_){case SelectionMode.ROW:this.selectedColumnIndex_=undefined;break;case SelectionMode.CELL:if(this.selectedColumnIndex_===undefined){const i=this.getFirstSelectableColumnIndex_();if(i===-1){throw new Error('Cannot find a selectable column.');}
-this.selectedColumnIndex_=i;}
-break;default:throw new Error('Invalid selection mode '+this.selectionMode_);}}
-this.selectedTableRowInfo_=rowInfo;this.updateSelectedState_();this.dispatchEvent(e);},prepareToChangeSelection_(){const e=new tr.b.Event('selection-changed');const previousSelectedRowInfo=this.selectedTableRowInfo_;if(previousSelectedRowInfo){e.previousSelectedTableRow=previousSelectedRowInfo.userRow;}else{e.previousSelectedTableRow=undefined;}
-this.removeSelectedState_();return e;},removeSelectedState_(){this.setSelectedState_(false);},updateSelectedState_(){this.setSelectedState_(true);},setSelectedState_(select){if(this.selectedTableRowInfo_===undefined)return;const rowNode=this.selectedTableRowInfo_.htmlNode;if(select){Polymer.dom(rowNode).setAttribute('selected',true);}else{Polymer.dom(rowNode).removeAttribute('selected');}
-const cellNode=Polymer.dom(rowNode).children[this.selectedColumnIndex_];if(!cellNode)return;if(select){Polymer.dom(cellNode).setAttribute('selected',true);}else{Polymer.dom(cellNode).removeAttribute('selected');}},doesColumnIndexSupportSelection(columnIndex){const columnInfo=this.tableColumns_[columnIndex];const scs=columnInfo.supportsCellSelection;if(scs===false)return false;return true;},getFirstSelectableColumnIndex_(){for(let i=0;i<this.tableColumns_.length;i++){if(this.doesColumnIndexSupportSelection(i)){return i;}}
-return-1;},getSelectableNodeGivenTableRowNode_(htmlNode){switch(this.selectionMode_){case SelectionMode.ROW:return htmlNode;case SelectionMode.CELL:return Polymer.dom(htmlNode).children[this.selectedColumnIndex_];default:throw new Error('Invalid selection mode '+this.selectionMode_);}},get selectedColumnIndex(){if(this.selectionMode_!==SelectionMode.CELL){return undefined;}
-return this.selectedColumnIndex_;},set selectedColumnIndex(selectedColumnIndex){this.rebuildIfNeeded_();if(this.selectionMode_===SelectionMode.NONE){throw new Error('Selection is off.');}
-if(selectedColumnIndex<0||selectedColumnIndex>=this.tableColumns_.length){throw new Error('Invalid index');}
-if(!this.doesColumnIndexSupportSelection(selectedColumnIndex)){throw new Error('Selection is not supported on this column');}
-const e=this.prepareToChangeSelection_();if(this.selectedColumnIndex_===undefined){this.selectedTableRowInfo_=undefined;}else if(!this.selectedTableRowInfo_){if(this.tableRows_.length===0){throw new Error('No available row to be selected');}
-this.selectedTableRowInfo_=this.tableRowsInfo_.get(this.tableRows_[0]);}
-this.selectedColumnIndex_=selectedColumnIndex;this.updateSelectedState_();this.dispatchEvent(e);},onKeyDown_(e){if(this.selectionMode_===SelectionMode.NONE)return;const CODE_TO_COMMAND_NAMES={13:'ENTER',32:'SPACE',37:'ARROW_LEFT',38:'ARROW_UP',39:'ARROW_RIGHT',40:'ARROW_DOWN'};const cmdName=CODE_TO_COMMAND_NAMES[e.keyCode];if(cmdName===undefined)return;e.stopPropagation();e.preventDefault();this.performKeyCommand_(cmdName);},onFocus_(e){if(this.selectionMode_===SelectionMode.NONE||this.selectedTableRow||this.tableRows_.length===0){return;}
-if(this.selectionMode_===SelectionMode.CELL&&this.getFirstSelectableColumnIndex_()===-1){return;}
-this.selectedTableRow=this.tableRows_[0];},focus(){this.$.body.focus();this.onFocus_();},blur(){this.$.body.blur();},get isFocused(){return this.root.activeElement===this.$.body;},performKeyCommand_(cmdName){this.rebuildIfNeeded_();switch(cmdName){case'ARROW_UP':this.selectPreviousOrFirstRowIfPossible_();return;case'ARROW_DOWN':this.selectNextOrFirstRowIfPossible_();return;case'ARROW_RIGHT':switch(this.selectionMode_){case SelectionMode.NONE:return;case SelectionMode.ROW:this.expandRowAndSelectChildRowIfPossible_();return;case SelectionMode.CELL:this.selectNextSelectableCellToTheRightIfPossible_();return;default:throw new Error('Invalid selection mode '+this.selectionMode_);}
-case'ARROW_LEFT':switch(this.selectionMode_){case SelectionMode.NONE:return;case SelectionMode.ROW:this.collapseRowOrSelectParentRowIfPossible_();return;case SelectionMode.CELL:this.selectNextSelectableCellToTheLeftIfPossible_();return;default:throw new Error('Invalid selection mode '+this.selectionMode_);}
-case'SPACE':this.toggleRowExpansionStateIfPossible_();return;case'ENTER':this.stepIntoSelectionIfPossible_();return;default:throw new Error('Unrecognized command '+cmdName);}},selectPreviousOrFirstRowIfPossible_(){const prev=this.selectedTableRowInfo_?this.selectedTableRowInfo_.htmlNode.previousElementSibling:this.$.body.firstChild;if(!prev)return;if(this.selectionMode_===SelectionMode.CELL&&this.getFirstSelectableColumnIndex_()===-1){return;}
-tr.ui.b.scrollIntoViewIfNeeded(prev);this.selectedTableRow=prev.rowInfo.userRow;},selectNextOrFirstRowIfPossible_(){this.getFirstSelectableColumnIndex_;const next=this.selectedTableRowInfo_?this.selectedTableRowInfo_.htmlNode.nextElementSibling:this.$.body.firstChild;if(!next)return;if(this.selectionMode_===SelectionMode.CELL&&this.getFirstSelectableColumnIndex_()===-1){return;}
-tr.ui.b.scrollIntoViewIfNeeded(next);this.selectedTableRow=next.rowInfo.userRow;},expandRowAndSelectChildRowIfPossible_(){const selectedRowInfo=this.selectedTableRowInfo_;if(!selectedRowInfo||selectedRowInfo.userRow[this.subRowsPropertyName_]===undefined||selectedRowInfo.userRow[this.subRowsPropertyName_].length===0){return;}
-if(!selectedRowInfo.isExpanded){this.setExpandedForTableRow(selectedRowInfo.userRow,true);}
-this.selectedTableRow=selectedRowInfo.htmlNode.nextElementSibling.rowInfo.userRow;},collapseRowOrSelectParentRowIfPossible_(){const selectedRowInfo=this.selectedTableRowInfo_;if(!selectedRowInfo)return;if(selectedRowInfo.isExpanded){this.setExpandedForTableRow(selectedRowInfo.userRow,false);}else{const parentRowInfo=selectedRowInfo.parentRowInfo;if(parentRowInfo){this.selectedTableRow=parentRowInfo.userRow;}}},selectNextSelectableCellToTheRightIfPossible_(){if(!this.selectedTableRowInfo_||this.selectedColumnIndex_===undefined){return;}
-for(let i=this.selectedColumnIndex_+1;i<this.tableColumns_.length;i++){if(this.doesColumnIndexSupportSelection(i)){this.selectedColumnIndex=i;return;}}},selectNextSelectableCellToTheLeftIfPossible_(){if(!this.selectedTableRowInfo_||this.selectedColumnIndex_===undefined){return;}
-for(let i=this.selectedColumnIndex_-1;i>=0;i--){if(this.doesColumnIndexSupportSelection(i)){this.selectedColumnIndex=i;return;}}},toggleRowExpansionStateIfPossible_(){const selectedRowInfo=this.selectedTableRowInfo_;if(!selectedRowInfo||selectedRowInfo.userRow[this.subRowsPropertyName_]===undefined||selectedRowInfo.userRow[this.subRowsPropertyName_].length===0){return;}
-this.setExpandedForTableRow(selectedRowInfo.userRow,!selectedRowInfo.isExpanded);},stepIntoSelectionIfPossible_(){if(!this.selectedTableRowInfo_)return;this.dispatchStepIntoEvent_(this.selectedTableRowInfo_,this.selectedColumnIndex_);},dispatchSortingChangedEvent_(){const e=new tr.b.Event('sort-column-changed');e.sortColumnIndex=this.sortColumnIndex_;e.sortDescending=this.sortDescending_;this.dispatchEvent(e);}});})();'use strict';const ColumnAlignment=tr.ui.b.TableFormat.ColumnAlignment;Polymer({is:'tr-ui-b-table-header-cell',created(){this.tapCallback_=undefined;this.cellTitle_='';this.align_=undefined;this.selectable_=false;this.column_=undefined;},ready(){this.addEventListener('click',this.onTap_.bind(this));},set column(column){this.column_=column;this.align=column.align;this.cellTitle=column.title;},get column(){return this.column_;},set cellTitle(value){this.cellTitle_=value;const titleNode=tr.ui.b.asHTMLOrTextNode(this.cellTitle_,this.ownerDocument);this.$.title.innerText='';Polymer.dom(this.$.title).appendChild(titleNode);},get cellTitle(){return this.cellTitle_;},set align(align){switch(align){case undefined:case ColumnAlignment.LEFT:this.style.justifyContent='';break;case ColumnAlignment.RIGHT:this.style.justifyContent='flex-end';break;default:throw new Error('Invalid alignment of column (title=\''+
-this.cellTitle_+'\'): '+align);}
-this.align_=align;},get align(){return this.align_;},clearSideContent(){Polymer.dom(this.$.side).textContent='';},set sideContent(content){Polymer.dom(this.$.side).textContent=content;this.$.side.style.display=content?'inline':'none';},get sideContent(){return Polymer.dom(this.$.side).textContent;},set sideContentDisabled(sideContentDisabled){this.$.side.classList.toggle('disabled',sideContentDisabled);},get sideContentDisabled(){return this.$.side.classList.contains('disabled');},set tapCallback(callback){this.style.cursor='pointer';this.tapCallback_=callback;},get tapCallback(){return this.tapCallback_;},onTap_(){if(this.tapCallback_){this.tapCallback_();}}});'use strict';tr.exportTo('tr.b.math',function(){class RunningStatistics{constructor(){this.mean_=0;this.count_=0;this.max_=-Infinity;this.min_=Infinity;this.sum_=0;this.variance_=0;this.meanlogs_=0;}
-get count(){return this.count_;}
-get geometricMean(){if(this.meanlogs_===undefined)return 0;return Math.exp(this.meanlogs_);}
-get mean(){if(this.count_===0)return undefined;return this.mean_;}
-get max(){return this.max_;}
-get min(){return this.min_;}
-get sum(){return this.sum_;}
-get variance(){if(this.count_===0)return undefined;if(this.count_===1)return 0;return this.variance_/(this.count_-1);}
-get stddev(){if(this.count_===0)return undefined;return Math.sqrt(this.variance);}
-add(x){this.count_++;this.max_=Math.max(this.max_,x);this.min_=Math.min(this.min_,x);this.sum_+=x;if(x<=0){this.meanlogs_=undefined;}else if(this.meanlogs_!==undefined){this.meanlogs_+=(Math.log(Math.abs(x))-this.meanlogs_)/this.count;}
-if(this.count_===1){this.mean_=x;this.variance_=0;}else{const oldMean=this.mean_;const oldVariance=this.variance_;if(oldMean===Infinity||oldMean===-Infinity){this.mean_=this.sum_/this.count_;}else{this.mean_=oldMean+(x-oldMean)/this.count_;}
-this.variance_=oldVariance+(x-oldMean)*(x-this.mean_);}}
-merge(other){const result=new RunningStatistics();result.count_=this.count_+other.count_;result.sum_=this.sum_+other.sum_;result.min_=Math.min(this.min_,other.min_);result.max_=Math.max(this.max_,other.max_);if(result.count===0){result.mean_=0;result.variance_=0;result.meanlogs_=0;}else{result.mean_=result.sum/result.count;const deltaMean=(this.mean||0)-(other.mean||0);result.variance_=this.variance_+other.variance_+
-(this.count*other.count*deltaMean*deltaMean/result.count);if(this.meanlogs_===undefined||other.meanlogs_===undefined){result.meanlogs_=undefined;}else{result.meanlogs_=(this.count*this.meanlogs_+
-other.count*other.meanlogs_)/result.count;}}
-return result;}
-asDict(){if(!this.count){return[];}
-return[this.count_,this.max_,this.meanlogs_,this.mean_,this.min_,this.sum_,this.variance_,];}
-static fromDict(dict){const result=new RunningStatistics();if(dict.length!==7){return result;}
-[result.count_,result.max_,result.meanlogs_,result.mean_,result.min_,result.sum_,result.variance_,]=dict;return result;}}
-return{RunningStatistics,};});'use strict';tr.exportTo('tr.v.d',function(){class Diagnostic{constructor(){this.guid_=undefined;}
-clone(){return new this.constructor();}
-canAddDiagnostic(otherDiagnostic){return false;}
-addDiagnostic(otherDiagnostic){throw new Error('Abstract virtual method: subclasses must override '+'this method if they override canAddDiagnostic');}
-get guid(){if(this.guid_===undefined){this.guid_=tr.b.GUID.allocateUUID4();}
-return this.guid_;}
-set guid(guid){if(this.guid_!==undefined){throw new Error('Cannot reset guid');}
-this.guid_=guid;}
-get hasGuid(){return this.guid_!==undefined;}
-asDictOrReference(){if(this.guid_!==undefined){return this.guid_;}
-return this.asDict();}
-asDict(){const result={type:this.constructor.name};if(this.guid_!==undefined){result.guid=this.guid_;}
-this.asDictInto_(result);return result;}
-asDictInto_(d){throw new Error('Abstract virtual method: subclasses must override '+'this method if they override canAddDiagnostic');}
-static fromDict(d){const typeInfo=Diagnostic.findTypeInfoWithName(d.type);if(!typeInfo){throw new Error('Unrecognized diagnostic type: '+d.type);}
-const diagnostic=typeInfo.constructor.fromDict(d);if(d.guid!==undefined)diagnostic.guid=d.guid;return diagnostic;}}
-const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.defaultMetadata={};options.mandatoryBaseClass=Diagnostic;tr.b.decorateExtensionRegistry(Diagnostic,options);Diagnostic.addEventListener('will-register',function(e){const constructor=e.typeInfo.constructor;if(!(constructor.fromDict instanceof Function)||(constructor.fromDict===Diagnostic.fromDict)||(constructor.fromDict.length!==1)){throw new Error('Diagnostics must define fromDict(d)');}});return{Diagnostic,};});'use strict';tr.exportTo('tr.v.d',function(){class Breakdown extends tr.v.d.Diagnostic{constructor(){super();this.values_=new Map();this.colorScheme=undefined;}
-clone(){const clone=new Breakdown();clone.colorScheme=this.colorScheme;clone.addDiagnostic(this);return clone;}
-canAddDiagnostic(otherDiagnostic){return((otherDiagnostic instanceof Breakdown)&&(otherDiagnostic.colorScheme===this.colorScheme));}
-addDiagnostic(otherDiagnostic){for(const[name,value]of otherDiagnostic){this.set(name,this.get(name)+value);}
-return this;}
-set(name,value){if(typeof name!=='string'||typeof value!=='number'){throw new Error('Breakdown maps from strings to numbers');}
-this.values_.set(name,value);}
-get(name){return this.values_.get(name)||0;}*[Symbol.iterator](){for(const pair of this.values_){yield pair;}}
-get size(){return this.values_.size;}
-asDictInto_(d){d.values={};for(const[name,value]of this){d.values[name]=tr.b.numberToJson(value);}
-if(this.colorScheme){d.colorScheme=this.colorScheme;}}
-static fromEntries(entries){const breakdown=new Breakdown();for(const[name,value]of entries){breakdown.set(name,value);}
-return breakdown;}
-static fromDict(d){const breakdown=new Breakdown();for(const[name,value]of Object.entries(d.values)){breakdown.set(name,tr.b.numberFromJson(value));}
-if(d.colorScheme){breakdown.colorScheme=d.colorScheme;}
-return breakdown;}}
-tr.v.d.Diagnostic.register(Breakdown,{elementName:'tr-v-ui-breakdown-span'});return{Breakdown,};});'use strict';tr.exportTo('tr.v.d',function(){class CollectedRelatedEventSet extends tr.v.d.Diagnostic{constructor(){super();this.eventSetsByCanonicalUrl_=new Map();}
-asDictInto_(d){d.events={};for(const[canonicalUrl,eventSet]of this){d.events[canonicalUrl]=[];for(const event of eventSet){d.events[canonicalUrl].push({stableId:event.stableId,title:event.title,start:event.start,duration:event.duration});}}}
-static fromDict(d){const result=new CollectedRelatedEventSet();for(const[canonicalUrl,events]of Object.entries(d.events)){result.eventSetsByCanonicalUrl_.set(canonicalUrl,events.map(e=>new tr.v.d.EventRef(e)));}
-return result;}
-get size(){return this.eventSetsByCanonicalUrl_.size;}
-get(canonicalUrl){return this.eventSetsByCanonicalUrl_.get(canonicalUrl);}*[Symbol.iterator](){for(const[canonicalUrl,eventSet]of this.eventSetsByCanonicalUrl_){yield[canonicalUrl,eventSet];}}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof tr.v.d.RelatedEventSet||otherDiagnostic instanceof tr.v.d.CollectedRelatedEventSet;}
-addEventSetForCanonicalUrl(canonicalUrl,events){let myEventSet=this.eventSetsByCanonicalUrl_.get(canonicalUrl);if(myEventSet===undefined){myEventSet=new Set();this.eventSetsByCanonicalUrl_.set(canonicalUrl,myEventSet);}
-for(const event of events){myEventSet.add(event);}}
-addDiagnostic(otherDiagnostic){if(otherDiagnostic instanceof tr.v.d.CollectedRelatedEventSet){for(const[canonicalUrl,otherEventSet]of otherDiagnostic){this.addEventSetForCanonicalUrl(canonicalUrl,otherEventSet);}
-return;}
-if(!otherDiagnostic.canonicalUrl)return;this.addEventSetForCanonicalUrl(otherDiagnostic.canonicalUrl,otherDiagnostic);}}
-tr.v.d.Diagnostic.register(CollectedRelatedEventSet,{elementName:'tr-v-ui-collected-related-event-set-span'});return{CollectedRelatedEventSet,};});'use strict';tr.exportTo('tr.v.d',function(){class DateRange extends tr.v.d.Diagnostic{constructor(ms){super();this.range_=new tr.b.math.Range();this.range_.addValue(ms);}
-get minDate(){return new Date(this.range_.min);}
-get maxDate(){return new Date(this.range_.max);}
-get durationMs(){return this.range_.duration;}
-clone(){const clone=new tr.v.d.DateRange(this.range_.min);clone.addDiagnostic(this);return clone;}
-equals(other){if(!(other instanceof DateRange))return false;return this.range_.equals(other.range_);}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof DateRange;}
-addDiagnostic(other){this.range_.addRange(other.range_);}
-toString(){const minDate=tr.b.formatDate(this.minDate);if(this.durationMs===0)return minDate;const maxDate=tr.b.formatDate(this.maxDate);return`${minDate} - ${maxDate}`;}
-asDictInto_(d){d.min=this.range_.min;if(this.durationMs===0)return;d.max=this.range_.max;}
-static fromDict(d){const dateRange=new DateRange(d.min);if(d.max!==undefined)dateRange.range_.addValue(d.max);return dateRange;}}
-tr.v.d.Diagnostic.register(DateRange,{elementName:'tr-v-ui-date-range-span'});return{DateRange,};});'use strict';tr.exportTo('tr.v.d',function(){class DiagnosticRef{constructor(guid){this.guid=guid;}
-asDict(){return this.guid;}
-asDictOrReference(){return this.asDict();}}
-return{DiagnosticRef,};});'use strict';tr.exportTo('tr.v.d',function(){function stableStringify(obj){let replacer;if(!(obj instanceof Array))replacer=Object.keys(obj).sort();return JSON.stringify(obj,replacer);}
-class GenericSet extends tr.v.d.Diagnostic{constructor(values){super();this.values_=new Set(values);}
-get size(){return this.values_.size;}
-get length(){return this.values_.size;}*[Symbol.iterator](){for(const value of this.values_){yield value;}}
-has(value){if(typeof value!=='object')return this.values_.has(value);const json=JSON.stringify(value);for(const x of this){if(typeof x!=='object')continue;if(json===JSON.stringify(x))return true;}
-return false;}
-equals(other){if(!(other instanceof GenericSet))return false;if(this.size!==other.size)return false;for(const value of this){if(!other.has(value))return false;}
-return true;}
-asDictInto_(d){d.values=Array.from(this);}
-static fromDict(d){return new GenericSet(d.values);}
-clone(){return new GenericSet(this.values_);}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof GenericSet;}
-addDiagnostic(otherDiagnostic){const jsons=new Set();for(const value of this){if(typeof value!=='object')continue;jsons.add(stableStringify(value));}
-for(const value of otherDiagnostic){if(typeof value==='object'&&jsons.has(stableStringify(value))){continue;}
-this.values_.add(value);}}}
-tr.v.d.Diagnostic.register(GenericSet,{elementName:'tr-v-ui-generic-set-span'});return{GenericSet,};});'use strict';tr.exportTo('tr.v.d',function(){class GroupingPath extends tr.v.d.Diagnostic{constructor(groupingPath){super();this.groupingPath_=groupingPath;}
-clone(){return new GroupingPath(Array.from(this.groupingPath_));}
-addToHistogram(hist){hist.diagnostics.set(tr.v.d.RESERVED_NAMES.GROUPING_PATH,this);}
-static getFromHistogram(hist){return hist.diagnostics.get(tr.v.d.RESERVED_NAMES.GROUPING_PATH);}
-equals(other){return 0===tr.b.compareArrays(this.groupingPath_,other.groupingPath_,(x,y)=>x.localeCompare(y));}
-asDictInto_(d){d.groupingPath=this.groupingPath_;}
-static fromDict(d){return new GroupingPath(d.groupingPath);}}
-tr.v.d.Diagnostic.register(GroupingPath);return{GroupingPath,};});'use strict';tr.exportTo('tr.v.d',function(){class EventRef{constructor(event){this.stableId=event.stableId;this.title=event.title;this.start=event.start;this.duration=event.duration;this.end=this.start+this.duration;this.guid=tr.b.GUID.allocateSimple();}}
-return{EventRef,};});'use strict';tr.exportTo('tr.v.d',function(){class RelatedEventSet extends tr.v.d.Diagnostic{constructor(opt_events){super();this.eventsByStableId_=new Map();this.canonicalUrl_=undefined;if(opt_events){if(opt_events instanceof tr.model.EventSet||opt_events instanceof Array){for(const event of opt_events){this.add(event);}}else{this.add(opt_events);}}}
-clone(){const clone=new tr.v.d.CollectedRelatedEventSet();clone.addDiagnostic(this);return clone;}
-add(event){this.eventsByStableId_.set(event.stableId,event);}
-has(event){return this.eventsByStableId_.has(event.stableId);}
-get length(){return this.eventsByStableId_.size;}*[Symbol.iterator](){for(const event of this.eventsByStableId_.values()){yield event;}}
-get canonicalUrl(){return this.canonicalUrl_;}
-resolve(model,opt_required){for(const[stableId,value]of this.eventsByStableId_){if(!(value instanceof tr.v.d.EventRef))continue;const event=model.getEventByStableId(stableId);if(event instanceof tr.model.Event){this.eventsByStableId_.set(stableId,event);}else if(opt_required){throw new Error('Unable to find Event '+stableId);}}}
-asDictInto_(d){d.events=[];for(const event of this){d.events.push({stableId:event.stableId,title:event.title,start:event.start,duration:event.duration});}}
-static fromDict(d){return new RelatedEventSet(d.events.map(event=>new tr.v.d.EventRef(event)));}}
-tr.v.d.Diagnostic.register(RelatedEventSet,{elementName:'tr-v-ui-related-event-set-span'});return{RelatedEventSet,};});'use strict';tr.exportTo('tr.v.d',function(){function HistogramRef(guid){this.guid=guid;}
-return{HistogramRef};});'use strict';tr.exportTo('tr.v.d',function(){class RelatedHistogramMap extends tr.v.d.Diagnostic{constructor(){super();this.histogramsByName_=new Map();}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof RelatedHistogramMap;}
-addDiagnostic(otherDiagnostic){}
-mergeRelationships(otherDiagnostic,parentHist,otherParentHist){const parentGroupingPath=tr.v.d.GroupingPath.getFromHistogram(parentHist);for(const[name,otherRelatedHist]of otherDiagnostic){const mergedTo=otherRelatedHist.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_TO);if(mergedTo===undefined)continue;for(const relatedHist of mergedTo.histogramsByName_.values()){const relatedGroupingPath=tr.v.d.GroupingPath.getFromHistogram(relatedHist);if(relatedGroupingPath===undefined)continue;if(!parentGroupingPath.equals(relatedGroupingPath))continue;this.set(name,relatedHist);}}}
-get(name){return this.histogramsByName_.get(name);}
-set(name,hist){if(!(hist instanceof tr.v.Histogram)&&!(hist instanceof tr.v.d.HistogramRef)){throw new Error('Must be instanceof Histogram or HistogramRef: '+
-hist);}
-this.histogramsByName_.set(name,hist);}
-add(hist){this.set(hist.name,hist);}
-get length(){return this.histogramsByName_.size;}*[Symbol.iterator](){for(const pair of this.histogramsByName_){yield pair;}}
-resolve(histograms,opt_required){for(const[name,value]of this){if(!(value instanceof tr.v.d.HistogramRef))continue;const guid=value.guid;const hist=histograms.lookupHistogram(guid);if(hist instanceof tr.v.Histogram){this.histogramsByName_.set(name,hist);}else if(opt_required){throw new Error('Unable to find Histogram '+guid);}}}
-asDictInto_(d){d.values={};for(const[name,hist]of this){d.values[name]=hist.guid;}}
-static fromDict(d){const map=new RelatedHistogramMap();for(const[name,guid]of Object.entries(d.values)){map.set(name,new tr.v.d.HistogramRef(guid));}
-return map;}}
-tr.v.d.Diagnostic.register(RelatedHistogramMap,{elementName:'tr-v-ui-related-histogram-map-span'});return{RelatedHistogramMap,};});'use strict';tr.exportTo('tr.v.d',function(){const COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER='ChromeUserFriendlyCategory';class RelatedHistogramBreakdown extends tr.v.d.RelatedHistogramMap{constructor(){super();this.colorScheme=undefined;}
-clone(){const clone=new RelatedHistogramBreakdown();clone.colorScheme=this.colorScheme;return clone;}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof RelatedHistogramBreakdown&&otherDiagnostic.colorScheme===this.colorScheme;}
-set(name,hist){if(!(hist instanceof tr.v.d.HistogramRef)){if(!(hist instanceof tr.v.Histogram)){throw new Error('RelatedHistogramBreakdown can only contain Histograms');}
-if((this.length>0)&&(hist.unit!==tr.b.getFirstElement(this)[1].unit)){throw new Error('Units mismatch',tr.b.getFirstElement(this)[1].unit,hist.unit);}}
-tr.v.d.RelatedHistogramMap.prototype.set.call(this,name,hist);}
-asDictInto_(d){tr.v.d.RelatedHistogramMap.prototype.asDictInto_.call(this,d);if(this.colorScheme)d.colorScheme=this.colorScheme;}
-static fromDict(d){const diagnostic=new RelatedHistogramBreakdown();for(const[name,guid]of Object.entries(d.values)){diagnostic.set(name,new tr.v.d.HistogramRef(guid));}
-if(d.colorScheme)diagnostic.colorScheme=d.colorScheme;return diagnostic;}
-static buildFromEvents(histograms,namePrefix,events,categoryForEvent,unit,opt_sampleForEvent,opt_binBoundaries,opt_this){const sampleForEvent=opt_sampleForEvent||((event)=>event.cpuSelfTime);const diagnostic=new RelatedHistogramBreakdown();for(const event of events){const sample=sampleForEvent.call(opt_this,event);if(sample===undefined)continue;const eventCategory=categoryForEvent.call(opt_this,event);let hist=diagnostic.get(eventCategory);if(hist===undefined){hist=new tr.v.Histogram(namePrefix+eventCategory,unit,opt_binBoundaries);histograms.addHistogram(hist);diagnostic.set(eventCategory,hist);}
-hist.addSample(sample,{relatedEvents:new tr.v.d.RelatedEventSet([event])});}
-return diagnostic;}}
-tr.v.d.Diagnostic.register(RelatedHistogramBreakdown,{elementName:'tr-v-ui-breakdown-span'});return{COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER,RelatedHistogramBreakdown,};});'use strict';tr.exportTo('tr.v.d',function(){class RelatedNameMap extends tr.v.d.Diagnostic{constructor(opt_info){super();this.map_=new Map();}
-clone(){const clone=new RelatedNameMap();clone.addDiagnostic(this);return clone;}
-equals(other){if(!(other instanceof RelatedNameMap))return false;const keys1=new Set(this.map_.keys());const keys2=new Set(other.map_.keys());if(!tr.b.setsEqual(keys1,keys2))return false;for(const[key,name]of this){if(name!==other.get(key))return false;}
-return true;}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof RelatedNameMap;}
-addDiagnostic(otherDiagnostic){for(const[key,name]of otherDiagnostic){const existing=this.get(key);if(existing===undefined){this.set(key,name);}else if(existing!==name){throw new Error('Histogram names differ: '+`"${existing}" != "${name}"`);}}}
-asDictInto_(d){d.names={};for(const[key,name]of this)d.names[key]=name;}
-set(key,name){this.map_.set(key,name);}
-get(key){return this.map_.get(key);}*[Symbol.iterator](){for(const pair of this.map_)yield pair;}*values(){for(const value of this.map_.values())yield value;}
-static fromEntries(entries){const names=new RelatedNameMap();for(const[key,name]of entries){names.set(key,name);}
-return names;}
-static fromDict(d){return RelatedNameMap.fromEntries(Object.entries(d.names||{}));}}
-tr.v.d.Diagnostic.register(RelatedNameMap,{elementName:'tr-v-ui-related-name-map-span',});return{RelatedNameMap,};});'use strict';tr.exportTo('tr.v.d',function(){class Scalar extends tr.v.d.Diagnostic{constructor(value){super();if(!(value instanceof tr.b.Scalar)){throw new Error('expected Scalar');}
-this.value=value;}
-clone(){return new Scalar(this.value);}
-asDictInto_(d){d.value=this.value.asDict();}
-static fromDict(d){return new Scalar(tr.b.Scalar.fromDict(d.value));}}
-tr.v.d.Diagnostic.register(Scalar,{elementName:'tr-v-ui-scalar-diagnostic-span'});return{Scalar,};});'use strict';tr.exportTo('tr.v.d',function(){class TagMap extends tr.v.d.Diagnostic{constructor(opt_info){super();this.tagsToStoryNames_=new Map();if(opt_info){for(const[tag,storyDisplayNames]of Object.entries(opt_info.tagsToStoryNames||{})){this.tagsToStoryNames.set(tag,new Set(storyDisplayNames));}}}
-clone(){const clone=new TagMap();clone.addDiagnostic(this);return clone;}
-addToHistogram(hist){hist.diagnostics.set(tr.v.d.RESERVED_NAMES.TAG_MAP,this);}
-equals(other){if(!(other instanceof TagMap))return false;const keys1=new Set(this.tagsToStoryNames.keys());const keys2=new Set(other.tagsToStoryNames.keys());if(!tr.b.setsEqual(keys1,keys2)){return false;}
-for(const key of keys1){if(!tr.b.setsEqual(this.tagsToStoryNames.get(key),other.tagsToStoryNames.get(key))){return false;}}
-return true;}
-canAddDiagnostic(otherDiagnostic){return otherDiagnostic instanceof TagMap;}
-addDiagnostic(otherDiagnostic){for(const[name,storyDisplayNames]of
-otherDiagnostic.tagsToStoryNames){if(!this.tagsToStoryNames.has(name)){this.tagsToStoryNames.set(name,new Set());}
-for(const t of storyDisplayNames){this.tagsToStoryNames.get(name).add(t);}}
-return this;}
-asDictInto_(d){d.tagsToStoryNames={};for(const[name,value]of this.tagsToStoryNames){d.tagsToStoryNames[name]=Array.from(value);}}
-get tagsToStoryNames(){return this.tagsToStoryNames_;}
-static fromDict(d){const info=new TagMap();for(const[name,values]of
-Object.entries(d.tagsToStoryNames||{})){info.tagsToStoryNames.set(name,new Set(values));}
-return info;}}
-tr.v.d.Diagnostic.register(TagMap,{elementName:'tr-v-ui-tag-map-span'});return{TagMap,};});'use strict';tr.exportTo('tr.v.d',function(){class UnmergeableDiagnosticSet extends tr.v.d.Diagnostic{constructor(diagnostics){super();this._diagnostics=diagnostics;}
-clone(){const clone=new tr.v.d.UnmergeableDiagnosticSet();clone.addDiagnostic(this);return clone;}
-canAddDiagnostic(otherDiagnostic){return true;}
-addDiagnostic(otherDiagnostic){if(otherDiagnostic instanceof UnmergeableDiagnosticSet){for(const subOtherDiagnostic of otherDiagnostic){const clone=subOtherDiagnostic.clone();this.addDiagnostic(clone);}
-return;}
-for(let i=0;i<this._diagnostics.length;++i){if(this._diagnostics[i].canAddDiagnostic(otherDiagnostic)){this._diagnostics[i].addDiagnostic(otherDiagnostic);return;}}
-const clone=otherDiagnostic.clone();this._diagnostics.push(clone);}
-mergeRelationships(otherDiagnostic,parentHist,otherParentHist){if(otherDiagnostic instanceof UnmergeableDiagnosticSet){for(const subDiagnostic of otherDiagnostic){this.mergeRelationships(subDiagnostic,parentHist,otherParentHist);}
-return;}
-for(const subDiagnostic of this){if(!(subDiagnostic instanceof tr.v.d.RelatedHistogramMap)&&!(subDiagnostic instanceof tr.v.d.RelatedHistogramBreakdown)){continue;}
-subDiagnostic.mergeRelationships(otherDiagnostic,parentHist,otherParentHist);}}
-get length(){return this._diagnostics.length;}*[Symbol.iterator](){for(const diagnostic of this._diagnostics)yield diagnostic;}
-asDictInto_(d){d.diagnostics=this._diagnostics.map(d=>d.asDictOrReference());}
-static fromDict(d){return new UnmergeableDiagnosticSet(d.diagnostics.map(d=>((typeof d==='string')?new tr.v.d.DiagnosticRef(d):tr.v.d.Diagnostic.fromDict(d))));}}
-tr.v.d.Diagnostic.register(UnmergeableDiagnosticSet,{elementName:'tr-v-ui-unmergeable-diagnostic-set-span'});return{UnmergeableDiagnosticSet,};});'use strict';tr.exportTo('tr.v.d',function(){const RESERVED_INFOS={ANGLE_REVISIONS:{name:'angleRevisions',type:tr.v.d.GenericSet},ARCHITECTURES:{name:'architectures',type:tr.v.d.GenericSet},BENCHMARKS:{name:'benchmarks',type:tr.v.d.GenericSet},BENCHMARK_START:{name:'benchmarkStart',type:tr.v.d.DateRange},BENCHMARK_DESCRIPTIONS:{name:'benchmarkDescriptions',type:tr.v.d.GenericSet},BOTS:{name:'bots',type:tr.v.d.GenericSet},BUG_COMPONENTS:{name:'bugComponents',type:tr.v.d.GenericSet},BUILDS:{name:'builds',type:tr.v.d.GenericSet},CATAPULT_REVISIONS:{name:'catapultRevisions',type:tr.v.d.GenericSet},CHROMIUM_COMMIT_POSITIONS:{name:'chromiumCommitPositions',type:tr.v.d.GenericSet},CHROMIUM_REVISIONS:{name:'chromiumRevisions',type:tr.v.d.GenericSet},DEVICE_IDS:{name:'deviceIds',type:tr.v.d.GenericSet},GPUS:{name:'gpus',type:tr.v.d.GenericSet},GROUPING_PATH:{name:'groupingPath',type:tr.v.d.GroupingPath},IS_REFERENCE_BUILD:{name:'isReferenceBuild',type:tr.v.d.GenericSet},LABELS:{name:'labels',type:tr.v.d.GenericSet},LOG_URLS:{name:'logUrls',type:tr.v.d.GenericSet},MASTERS:{name:'masters',type:tr.v.d.GenericSet},MEMORY_AMOUNTS:{name:'memoryAmounts',type:tr.v.d.GenericSet},MERGED_FROM:{name:'mergedFrom',type:tr.v.d.RelatedHistogramMap},MERGED_TO:{name:'mergedTo',type:tr.v.d.RelatedHistogramMap},OS_NAMES:{name:'osNames',type:tr.v.d.GenericSet},OS_VERSIONS:{name:'osVersions',type:tr.v.d.GenericSet},OWNERS:{name:'owners',type:tr.v.d.GenericSet},PRODUCT_VERSIONS:{name:'productVersions',type:tr.v.d.GenericSet},RELATED_NAMES:{name:'relatedNames',type:tr.v.d.GenericSet},SKIA_REVISIONS:{name:'skiaRevisions',type:tr.v.d.GenericSet},STORIES:{name:'stories',type:tr.v.d.GenericSet},STORYSET_REPEATS:{name:'storysetRepeats',type:tr.v.d.GenericSet},STORY_TAGS:{name:'storyTags',type:tr.v.d.GenericSet},TAG_MAP:{name:'tagmap',type:tr.v.d.TagMap},TRACE_START:{name:'traceStart',type:tr.v.d.DateRange},TRACE_URLS:{name:'traceUrls',type:tr.v.d.GenericSet},V8_COMMIT_POSITIONS:{name:'v8CommitPositions',type:tr.v.d.DateRange},V8_REVISIONS:{name:'v8Revisions',type:tr.v.d.GenericSet},WEBRTC_REVISIONS:{name:'webrtcRevisions',type:tr.v.d.GenericSet},};const RESERVED_NAMES={};const RESERVED_NAMES_TO_TYPES=new Map();for(const[codename,info]of Object.entries(RESERVED_INFOS)){RESERVED_NAMES[codename]=info.name;if(RESERVED_NAMES_TO_TYPES.has(info.name)){throw new Error(`Duplicate reserved name "${info.name}"`);}
-RESERVED_NAMES_TO_TYPES.set(info.name,info.type);}
-const RESERVED_NAMES_SET=new Set(Object.values(RESERVED_NAMES));return{RESERVED_INFOS,RESERVED_NAMES,RESERVED_NAMES_SET,RESERVED_NAMES_TO_TYPES,};});'use strict';tr.exportTo('tr.v.d',function(){class DiagnosticMap extends Map{constructor(opt_allowReservedNames){super();if(opt_allowReservedNames===undefined){opt_allowReservedNames=true;}
-this.allowReservedNames_=opt_allowReservedNames;}
-set(name,diagnostic){if(typeof(name)!=='string'){throw new Error(`name must be string, not ${name}`);}
-if(!(diagnostic instanceof tr.v.d.Diagnostic)&&!(diagnostic instanceof tr.v.d.DiagnosticRef)){throw new Error(`Must be instanceof Diagnostic: ${diagnostic}`);}
-if(!this.allowReservedNames_&&tr.v.d.RESERVED_NAMES_SET.has(name)&&!(diagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)&&!(diagnostic instanceof tr.v.d.DiagnosticRef)){const type=tr.v.d.RESERVED_NAMES_TO_TYPES.get(name);if(type&&!(diagnostic instanceof type)){throw new Error(`Diagnostics named "${name}" must be ${type.name}, `+`not ${diagnostic.constructor.name}`);}}
-Map.prototype.set.call(this,name,diagnostic);}
-delete(name){if(name===undefined)throw new Error('missing name');Map.prototype.delete.call(this,name);}
-addDicts(dict){for(const[name,diagnosticDict]of Object.entries(dict)){if(typeof diagnosticDict==='string'){this.set(name,new tr.v.d.DiagnosticRef(diagnosticDict));}else{this.set(name,tr.v.d.Diagnostic.fromDict(diagnosticDict));}}}
-resolveSharedDiagnostics(histograms,opt_required){for(const[name,value]of this){if(!(value instanceof tr.v.d.DiagnosticRef)){continue;}
-const guid=value.guid;const diagnostic=histograms.lookupDiagnostic(guid);if(diagnostic instanceof tr.v.d.Diagnostic){this.set(name,diagnostic);}else if(opt_required){throw new Error('Unable to find shared Diagnostic '+guid);}}}
-asDict(){const dict={};for(const[name,diagnostic]of this){dict[name]=diagnostic.asDictOrReference();}
-return dict;}
-static fromDict(d){const diagnostics=new DiagnosticMap();diagnostics.addDicts(d);return diagnostics;}
-static fromObject(obj){const diagnostics=new DiagnosticMap();if(!(obj instanceof Map))obj=Object.entries(obj);for(const[name,diagnostic]of obj){diagnostics.set(name,diagnostic);}
-return diagnostics;}
-addDiagnostics(other){for(const[name,otherDiagnostic]of other){if(name===tr.v.d.RESERVED_NAMES.MERGED_FROM||name===tr.v.d.RESERVED_NAMES.MERGED_TO||name===tr.v.d.RESERVED_NAMES.GROUPING_PATH){continue;}
-const myDiagnostic=this.get(name);if(myDiagnostic!==undefined&&myDiagnostic.canAddDiagnostic(otherDiagnostic)){myDiagnostic.addDiagnostic(otherDiagnostic);continue;}
-const clone=otherDiagnostic.clone();if(myDiagnostic===undefined){this.set(name,clone);continue;}
-this.set(name,new tr.v.d.UnmergeableDiagnosticSet([myDiagnostic,clone]));}}
-mergeRelationships(parentHist){for(const[name,diagnostic]of this){if(!(diagnostic instanceof tr.v.d.RelatedHistogramMap)&&!(diagnostic instanceof tr.v.d.RelatedHistogramBreakdown)&&!(diagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)){continue;}
-for(const[unusedName,otherHist]of
-this.get(tr.v.d.RESERVED_NAMES.MERGED_FROM)){const otherDiagnostic=otherHist.diagnostics.get(name);if(!(otherDiagnostic instanceof tr.v.d.RelatedHistogramMap)&&!(otherDiagnostic instanceof tr.v.d.RelatedHistogramBreakdown)&&!(otherDiagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)){continue;}
-diagnostic.mergeRelationships(otherDiagnostic,parentHist,otherHist);}}}}
-return{DiagnosticMap,};});'use strict';tr.exportTo('tr.v',function(){const MAX_DIAGNOSTIC_MAPS=16;const DEFAULT_SAMPLE_VALUES_PER_BIN=10;const DEFAULT_REBINNED_COUNT=40;const DEFAULT_BOUNDARIES_FOR_UNIT=new Map();const DELTA=String.fromCharCode(916);const Z_SCORE_NAME='z-score';const P_VALUE_NAME='p-value';const U_STATISTIC_NAME='U';function percentToString(percent,opt_force3){if(percent<0||percent>1){throw new Error('percent must be in [0,1]');}
-if(percent===0)return'000';if(percent===1)return'100';let str=percent.toString();if(str[1]!=='.'){throw new Error('Unexpected percent');}
-str=str+'0'.repeat(Math.max(4-str.length,0));if(str.length>4){if(opt_force3){str=str.slice(0,4);}else{str=str.slice(0,4)+'_'+str.slice(4);}}
-return'0'+str.slice(2);}
-function percentFromString(s){return parseFloat(s[0]+'.'+s.substr(1).replace(/_/g,''));}
-class HistogramBin{constructor(range){this.range=range;this.count=0;this.diagnosticMaps=[];}
-addSample(value){this.count+=1;}
-addDiagnosticMap(diagnostics){tr.b.math.Statistics.uniformlySampleStream(this.diagnosticMaps,this.count,diagnostics,MAX_DIAGNOSTIC_MAPS);}
-addBin(other){if(!this.range.equals(other.range)){throw new Error('Merging incompatible Histogram bins.');}
-tr.b.math.Statistics.mergeSampledStreams(this.diagnosticMaps,this.count,other.diagnosticMaps,other.count,MAX_DIAGNOSTIC_MAPS);this.count+=other.count;}
-fromDict(dict){this.count=dict[0];if(dict.length>1){for(const map of dict[1]){this.diagnosticMaps.push(tr.v.d.DiagnosticMap.fromDict(map));}}}
-asDict(){if(!this.diagnosticMaps.length){return[this.count];}
-return[this.count,this.diagnosticMaps.map(d=>d.asDict())];}}
-const DEFAULT_SUMMARY_OPTIONS=new Map([['avg',true],['count',true],['geometricMean',false],['max',true],['min',true],['nans',false],['std',true],['sum',true],]);class Histogram{constructor(name,unit,opt_binBoundaries){let binBoundaries=opt_binBoundaries;if(!binBoundaries){const baseUnit=unit.baseUnit?unit.baseUnit:unit;binBoundaries=DEFAULT_BOUNDARIES_FOR_UNIT.get(baseUnit.unitName);}
-this.guid_=undefined;this.binBoundariesDict_=binBoundaries.asDict();this.allBins=binBoundaries.bins.slice();this.description='';const allowReservedNames=false;this.diagnostics_=new tr.v.d.DiagnosticMap(allowReservedNames);this.maxNumSampleValues_=this.defaultMaxNumSampleValues_;this.name_=name;this.nanDiagnosticMaps=[];this.numNans=0;this.running_=undefined;this.sampleValues_=[];this.shortName=undefined;this.summaryOptions=new Map(DEFAULT_SUMMARY_OPTIONS);this.summaryOptions.set('percentile',[]);this.summaryOptions.set('iprs',[]);this.unit=unit;}
-static create(name,unit,samples,opt_options){const options=opt_options||{};const hist=new Histogram(name,unit,options.binBoundaries);if(options.description)hist.description=options.description;if(options.shortName)hist.shortName=options.shortName;if(options.summaryOptions){let summaryOptions=options.summaryOptions;if(!(summaryOptions instanceof Map)){summaryOptions=Object.entries(summaryOptions);}
-for(const[name,value]of summaryOptions){hist.summaryOptions.set(name,value);}}
-if(options.diagnostics!==undefined){let diagnostics=options.diagnostics;if(!(diagnostics instanceof Map)){diagnostics=Object.entries(diagnostics);}
-for(const[name,diagnostic]of diagnostics){hist.diagnostics.set(name,diagnostic);}}
-if(!(samples instanceof Array))samples=[samples];for(const sample of samples){if(typeof sample==='object'){hist.addSample(sample.value,sample.diagnostics);}else{hist.addSample(sample);}}
-return hist;}
-get diagnostics(){return this.diagnostics_;}
-get running(){return this.running_;}
-get maxNumSampleValues(){return this.maxNumSampleValues_;}
-set maxNumSampleValues(n){this.maxNumSampleValues_=n;tr.b.math.Statistics.uniformlySampleArray(this.sampleValues_,this.maxNumSampleValues_);}
-get name(){return this.name_;}
-get guid(){if(this.guid_===undefined){this.guid_=tr.b.GUID.allocateUUID4();}
-return this.guid_;}
-set guid(guid){if(this.guid_!==undefined){throw new Error('Cannot reset guid');}
-this.guid_=guid;}
-static fromDict(dict){const hist=new Histogram(dict.name,tr.b.Unit.fromJSON(dict.unit),HistogramBinBoundaries.fromDict(dict.binBoundaries));hist.guid=dict.guid;if(dict.shortName){hist.shortName=dict.shortName;}
-if(dict.description){hist.description=dict.description;}
-if(dict.diagnostics){hist.diagnostics.addDicts(dict.diagnostics);}
-if(dict.allBins){if(dict.allBins.length!==undefined){for(let i=0;i<dict.allBins.length;++i){hist.allBins[i]=new HistogramBin(hist.allBins[i].range);hist.allBins[i].fromDict(dict.allBins[i]);}}else{for(const[i,binDict]of Object.entries(dict.allBins)){hist.allBins[i]=new HistogramBin(hist.allBins[i].range);hist.allBins[i].fromDict(binDict);}}}
-if(dict.running){hist.running_=tr.b.math.RunningStatistics.fromDict(dict.running);}
-if(dict.summaryOptions){if(dict.summaryOptions.iprs){dict.summaryOptions.iprs=dict.summaryOptions.iprs.map(r=>tr.b.math.Range.fromExplicitRange(r[0],r[1]));}
-hist.customizeSummaryOptions(dict.summaryOptions);}
-if(dict.maxNumSampleValues!==undefined){hist.maxNumSampleValues=dict.maxNumSampleValues;}
-if(dict.sampleValues){hist.sampleValues_=dict.sampleValues;}
-if(dict.numNans){hist.numNans=dict.numNans;}
-if(dict.nanDiagnostics){for(const map of dict.nanDiagnostics){hist.nanDiagnosticMaps.push(tr.v.d.DiagnosticMap.fromDict(map));}}
-return hist;}
-get numValues(){return this.running_?this.running_.count:0;}
-get average(){return this.running_?this.running_.mean:undefined;}
-get standardDeviation(){return this.running_?this.running_.stddev:undefined;}
-get geometricMean(){return this.running_?this.running_.geometricMean:0;}
-get sum(){return this.running_?this.running_.sum:0;}
-get min(){return this.running_?this.running_.min:Infinity;}
-get max(){return this.running_?this.running_.max:-Infinity;}
-getDifferenceSignificance(other,opt_alpha){if(this.unit!==other.unit){throw new Error('Cannot compare Histograms with different units');}
-if(this.unit.improvementDirection===tr.b.ImprovementDirection.DONT_CARE){return tr.b.math.Statistics.Significance.DONT_CARE;}
-if(!(other instanceof Histogram)){throw new Error('Unable to compute a p-value');}
-const testResult=tr.b.math.Statistics.mwu(this.sampleValues,other.sampleValues,opt_alpha);return testResult.significance;}
-getApproximatePercentile(percent){if(percent<0||percent>1){throw new Error('percent must be in [0,1]');}
-if(this.numValues===0)return undefined;if(this.allBins.length===1){const sortedSampleValues=this.sampleValues.slice().sort((x,y)=>x-y);return sortedSampleValues[Math.floor((sortedSampleValues.length-1)*percent)];}
-let valuesToSkip=Math.floor((this.numValues-1)*percent);for(const bin of this.allBins){valuesToSkip-=bin.count;if(valuesToSkip>=0)continue;if(bin.range.min===-Number.MAX_VALUE){return bin.range.max;}
-if(bin.range.max===Number.MAX_VALUE){return bin.range.min;}
-return bin.range.center;}
-return this.allBins[this.allBins.length-1].range.min;}
-getBinIndexForValue(value){const i=tr.b.findFirstTrueIndexInSortedArray(this.allBins,b=>value<b.range.max);if(0<=i&&i<this.allBins.length)return i;return this.allBins.length-1;}
-getBinForValue(value){return this.allBins[this.getBinIndexForValue(value)];}
-addSample(value,opt_diagnostics){if(opt_diagnostics&&!(opt_diagnostics instanceof tr.v.d.DiagnosticMap)){opt_diagnostics=tr.v.d.DiagnosticMap.fromObject(opt_diagnostics);}
-if(typeof(value)!=='number'||isNaN(value)){this.numNans++;if(opt_diagnostics){tr.b.math.Statistics.uniformlySampleStream(this.nanDiagnosticMaps,this.numNans,opt_diagnostics,MAX_DIAGNOSTIC_MAPS);}}else{if(this.running_===undefined){this.running_=new tr.b.math.RunningStatistics();}
-this.running_.add(value);const binIndex=this.getBinIndexForValue(value);let bin=this.allBins[binIndex];if(bin.count===0){bin=new HistogramBin(bin.range);this.allBins[binIndex]=bin;}
-bin.addSample(value);if(opt_diagnostics){bin.addDiagnosticMap(opt_diagnostics);}}
-tr.b.math.Statistics.uniformlySampleStream(this.sampleValues_,this.numValues+this.numNans,value,this.maxNumSampleValues);}
-sampleValuesInto(samples){for(const sampleValue of this.sampleValues){samples.push(sampleValue);}}
-canAddHistogram(other){if(this.unit!==other.unit){return false;}
-if(this.binBoundariesDict_===other.binBoundariesDict_){return true;}
-if(this.binBoundariesDict_.length!==other.binBoundariesDict_.length){return false;}
-for(let i=0;i<this.binBoundariesDict_.length;++i){const slice=this.binBoundariesDict_[i];const otherSlice=other.binBoundariesDict_[i];if(slice instanceof Array){if(!(otherSlice instanceof Array)){return false;}
-if(slice[0]!==otherSlice[0]||!tr.b.math.approximately(slice[1],otherSlice[1])||slice[2]!==otherSlice[2]){return false;}}else{if(otherSlice instanceof Array){return false;}
-if(!tr.b.math.approximately(slice,otherSlice)){return false;}}}
-return true;}
-addHistogram(other){if(!this.canAddHistogram(other)){throw new Error('Merging incompatible Histograms');}
-tr.b.math.Statistics.mergeSampledStreams(this.nanDiagnosticMaps,this.numNans,other.nanDiagnosticMaps,other.numNans,MAX_DIAGNOSTIC_MAPS);tr.b.math.Statistics.mergeSampledStreams(this.sampleValues,this.numValues+this.numNans,other.sampleValues,other.numValues+other.numNans,(this.maxNumSampleValues+other.maxNumSampleValues)/2);this.numNans+=other.numNans;if(other.running_!==undefined){if(this.running_===undefined){this.running_=new tr.b.math.RunningStatistics();}
-this.running_=this.running_.merge(other.running_);}
-for(let i=0;i<this.allBins.length;++i){let bin=this.allBins[i];if(bin.count===0){bin=new HistogramBin(bin.range);this.allBins[i]=bin;}
-bin.addBin(other.allBins[i]);}
-let mergedFrom=this.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_FROM);if(!mergedFrom){mergedFrom=new tr.v.d.RelatedHistogramMap();this.diagnostics.set(tr.v.d.RESERVED_NAMES.MERGED_FROM,mergedFrom);}
-mergedFrom.set(mergedFrom.length,other);let mergedTo=other.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_TO);if(!mergedTo){mergedTo=new tr.v.d.RelatedHistogramMap();other.diagnostics.set(tr.v.d.RESERVED_NAMES.MERGED_TO,mergedTo);}
-mergedTo.set(mergedTo.length,this);this.diagnostics.addDiagnostics(other.diagnostics);for(const[stat,option]of other.summaryOptions){if(stat==='percentile'){const percentiles=this.summaryOptions.get(stat);for(const percent of option){if(!percentiles.includes(percent))percentiles.push(percent);}}else if(stat==='iprs'){const thisIprs=this.summaryOptions.get(stat);for(const ipr of option){let found=false;for(const thisIpr of thisIprs){found=ipr.equals(thisIpr);if(found)break;}
-if(!found)thisIprs.push(ipr);}}else if(option&&!this.summaryOptions.get(stat)){this.summaryOptions.set(stat,true);}}}
-customizeSummaryOptions(summaryOptions){for(const[key,value]of Object.entries(summaryOptions)){this.summaryOptions.set(key,value);}}
-getStatisticScalar(statName,opt_referenceHistogram,opt_mwu){if(statName==='avg'){if(typeof(this.average)!=='number')return undefined;return new tr.b.Scalar(this.unit,this.average);}
-if(statName==='std'){if(typeof(this.standardDeviation)!=='number')return undefined;return new tr.b.Scalar(this.unit,this.standardDeviation);}
-if(statName==='geometricMean'){if(typeof(this.geometricMean)!=='number')return undefined;return new tr.b.Scalar(this.unit,this.geometricMean);}
-if(statName==='min'||statName==='max'||statName==='sum'){if(this.running_===undefined){this.running_=new tr.b.math.RunningStatistics();}
-if(typeof(this.running_[statName])!=='number')return undefined;return new tr.b.Scalar(this.unit,this.running_[statName]);}
-if(statName==='nans'){return new tr.b.Scalar(tr.b.Unit.byName.count_smallerIsBetter,this.numNans);}
-if(statName==='count'){return new tr.b.Scalar(tr.b.Unit.byName.count_smallerIsBetter,this.numValues);}
-if(statName.substr(0,4)==='pct_'){const percent=percentFromString(statName.substr(4));if(this.numValues===0)return undefined;const percentile=this.getApproximatePercentile(percent);if(typeof(percentile)!=='number')return undefined;return new tr.b.Scalar(this.unit,percentile);}
-if(statName.substr(0,4)==='ipr_'){let lower=percentFromString(statName.substr(4,3));let upper=percentFromString(statName.substr(8));if(lower>=upper){throw new Error('Invalid inter-percentile range: '+statName);}
-lower=this.getApproximatePercentile(lower);upper=this.getApproximatePercentile(upper);const ipr=upper-lower;if(typeof(ipr)!=='number')return undefined;return new tr.b.Scalar(this.unit,ipr);}
-if(!this.canCompare(opt_referenceHistogram)){throw new Error('Cannot compute '+statName+' when histograms are not comparable');}
-const suffix=tr.b.Unit.nameSuffixForImprovementDirection(this.unit.improvementDirection);const deltaIndex=statName.indexOf(DELTA);if(deltaIndex>=0){const baseStatName=statName.substr(deltaIndex+1);const thisStat=this.getStatisticScalar(baseStatName);const otherStat=opt_referenceHistogram.getStatisticScalar(baseStatName);const deltaValue=thisStat.value-otherStat.value;if(statName[0]==='%'){return new tr.b.Scalar(tr.b.Unit.byName['normalizedPercentageDelta'+suffix],deltaValue/otherStat.value);}
-return new tr.b.Scalar(thisStat.unit.correspondingDeltaUnit,deltaValue);}
-if(statName===Z_SCORE_NAME){return new tr.b.Scalar(tr.b.Unit.byName['sigmaDelta'+suffix],(this.average-opt_referenceHistogram.average)/opt_referenceHistogram.standardDeviation);}
-const mwu=opt_mwu||tr.b.math.Statistics.mwu(this.sampleValues,opt_referenceHistogram.sampleValues);if(statName===P_VALUE_NAME){return new tr.b.Scalar(tr.b.Unit.byName.unitlessNumber,mwu.p);}
-if(statName===U_STATISTIC_NAME){return new tr.b.Scalar(tr.b.Unit.byName.unitlessNumber,mwu.U);}
-throw new Error('Unrecognized statistic name: '+statName);}
-get statisticsNames(){const statisticsNames=new Set();for(const[statName,option]of this.summaryOptions){if(statName==='percentile'){for(const pctile of option){statisticsNames.add('pct_'+tr.v.percentToString(pctile));}}else if(statName==='iprs'){for(const range of option){statisticsNames.add('ipr_'+tr.v.percentToString(range.min,true)+'_'+tr.v.percentToString(range.max,true));}}else if(option){statisticsNames.add(statName);}}
-return statisticsNames;}
-canCompare(other){return other instanceof Histogram&&this.unit===other.unit&&this.numValues>0&&other.numValues>0;}
-getAvailableStatisticName(statName,opt_referenceHist){if(this.canCompare(opt_referenceHist))return statName;if(statName===Z_SCORE_NAME||statName===P_VALUE_NAME||statName===U_STATISTIC_NAME){return'avg';}
-const deltaIndex=statName.indexOf(DELTA);if(deltaIndex<0)return statName;return statName.substr(deltaIndex+1);}
-static getDeltaStatisticsNames(statNames){const deltaNames=[];for(const statName of statNames){deltaNames.push(`${DELTA}${statName}`);deltaNames.push(`%${DELTA}${statName}`);}
-return deltaNames.concat([Z_SCORE_NAME,P_VALUE_NAME,U_STATISTIC_NAME]);}
-get statisticsScalars(){const results=new Map();for(const statName of this.statisticsNames){const scalar=this.getStatisticScalar(statName);if(scalar===undefined)continue;results.set(statName,scalar);}
-return results;}
-get sampleValues(){return this.sampleValues_;}
-clone(){const binBoundaries=HistogramBinBoundaries.fromDict(this.binBoundariesDict_);const hist=new Histogram(this.name,this.unit,binBoundaries);for(const[stat,option]of this.summaryOptions){if(stat==='percentile'||stat==='iprs'){hist.summaryOptions.set(stat,Array.from(option));}else{hist.summaryOptions.set(stat,option);}}
-hist.addHistogram(this);return hist;}
-rebin(newBoundaries){const rebinned=new tr.v.Histogram(this.name,this.unit,newBoundaries);rebinned.description=this.description;for(const sample of this.sampleValues){rebinned.addSample(sample);}
-rebinned.running_=this.running_;for(const[name,diagnostic]of this.diagnostics){rebinned.diagnostics.set(name,diagnostic);}
-for(const[stat,option]of this.summaryOptions){if(stat==='percentile'){rebinned.summaryOptions.set(stat,Array.from(option));}else{rebinned.summaryOptions.set(stat,option);}}
-return rebinned;}
-asDict(){const dict={};dict.name=this.name;dict.unit=this.unit.asJSON();dict.guid=this.guid;if(this.binBoundariesDict_!==undefined){dict.binBoundaries=this.binBoundariesDict_;}
-if(this.shortName){dict.shortName=this.shortName;}
-if(this.description){dict.description=this.description;}
-if(this.diagnostics.size){dict.diagnostics=this.diagnostics.asDict();}
-if(this.maxNumSampleValues!==this.defaultMaxNumSampleValues_){dict.maxNumSampleValues=this.maxNumSampleValues;}
-if(this.numNans){dict.numNans=this.numNans;}
-if(this.nanDiagnosticMaps.length){dict.nanDiagnostics=this.nanDiagnosticMaps.map(dm=>dm.asDict());}
-if(this.numValues){dict.sampleValues=this.sampleValues.slice();dict.running=this.running_.asDict();dict.allBins=this.allBinsAsDict_();}
-const summaryOptions={};let anyOverriddenSummaryOptions=false;for(const[name,value]of this.summaryOptions){let option;if(name==='percentile'){if(value.length===0)continue;option=Array.from(value);}else if(name==='iprs'){if(value.length===0)continue;option=value.map(r=>[r.min,r.max]);}else if(value===DEFAULT_SUMMARY_OPTIONS.get(name)){continue;}else{option=value;}
-summaryOptions[name]=option;anyOverriddenSummaryOptions=true;}
-if(anyOverriddenSummaryOptions){dict.summaryOptions=summaryOptions;}
-return dict;}
-allBinsAsDict_(){const numBins=this.allBins.length;let emptyBins=0;for(let i=0;i<numBins;++i){if(this.allBins[i].count===0){++emptyBins;}}
-if(emptyBins===numBins){return undefined;}
-if(emptyBins>(numBins/2)){const allBinsDict={};for(let i=0;i<numBins;++i){const bin=this.allBins[i];if(bin.count>0){allBinsDict[i]=bin.asDict();}}
-return allBinsDict;}
-const allBinsArray=[];for(let i=0;i<numBins;++i){allBinsArray.push(this.allBins[i].asDict());}
-return allBinsArray;}
-get defaultMaxNumSampleValues_(){return DEFAULT_SAMPLE_VALUES_PER_BIN*Math.max(this.allBins.length,DEFAULT_REBINNED_COUNT);}}
-Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS={count:false,max:false,min:false,std:false,sum:false,};const HISTOGRAM_BIN_BOUNDARIES_CACHE=new Map();class HistogramBinBoundaries{static createLinear(min,max,numBins){return new HistogramBinBoundaries(min).addLinearBins(max,numBins);}
-static createExponential(min,max,numBins){return new HistogramBinBoundaries(min).addExponentialBins(max,numBins);}
-static createWithBoundaries(binBoundaries){const builder=new HistogramBinBoundaries(binBoundaries[0]);for(const boundary of binBoundaries.slice(1)){builder.addBinBoundary(boundary);}
-return builder;}
-constructor(minBinBoundary){this.builder_=[minBinBoundary];this.range_=new tr.b.math.Range();this.range_.addValue(minBinBoundary);this.binRanges_=undefined;this.bins_=undefined;}
-get range(){return this.range_;}
-asDict(){if(this.builder_.length===1&&this.builder_[0]===Number.MAX_VALUE){return undefined;}
-return this.builder_;}
-pushBuilderSlice_(slice){this.builder_.push(slice);this.builder_=this.builder_.slice();}
-static fromDict(dict){if(dict===undefined){return HistogramBinBoundaries.SINGULAR;}
-const cacheKey=JSON.stringify(dict);if(HISTOGRAM_BIN_BOUNDARIES_CACHE.has(cacheKey)){return HISTOGRAM_BIN_BOUNDARIES_CACHE.get(cacheKey);}
-const binBoundaries=new HistogramBinBoundaries(dict[0]);for(const slice of dict.slice(1)){if(!(slice instanceof Array)){binBoundaries.addBinBoundary(slice);continue;}
-switch(slice[0]){case HistogramBinBoundaries.SLICE_TYPE.LINEAR:binBoundaries.addLinearBins(slice[1],slice[2]);break;case HistogramBinBoundaries.SLICE_TYPE.EXPONENTIAL:binBoundaries.addExponentialBins(slice[1],slice[2]);break;default:throw new Error('Unrecognized HistogramBinBoundaries slice type');}}
-HISTOGRAM_BIN_BOUNDARIES_CACHE.set(cacheKey,binBoundaries);return binBoundaries;}
-get bins(){if(this.bins_===undefined){this.buildBins_();}
-return this.bins_;}
-buildBins_(){this.bins_=this.binRanges.map(r=>new HistogramBin(r));}
-get binRanges(){if(this.binRanges_===undefined){this.buildBinRanges_();}
-return this.binRanges_;}
-buildBinRanges_(){if(typeof this.builder_[0]!=='number'){throw new Error('Invalid start of builder_');}
-this.binRanges_=[];let prevBoundary=this.builder_[0];if(prevBoundary>-Number.MAX_VALUE){this.binRanges_.push(tr.b.math.Range.fromExplicitRange(-Number.MAX_VALUE,prevBoundary));}
-for(const slice of this.builder_.slice(1)){if(!(slice instanceof Array)){this.binRanges_.push(tr.b.math.Range.fromExplicitRange(prevBoundary,slice));prevBoundary=slice;continue;}
-const nextMaxBinBoundary=slice[1];const binCount=slice[2];const sliceMinBinBoundary=prevBoundary;switch(slice[0]){case HistogramBinBoundaries.SLICE_TYPE.LINEAR:{const binWidth=(nextMaxBinBoundary-prevBoundary)/binCount;for(let i=1;i<binCount;i++){const boundary=sliceMinBinBoundary+i*binWidth;this.binRanges_.push(tr.b.math.Range.fromExplicitRange(prevBoundary,boundary));prevBoundary=boundary;}
-break;}
-case HistogramBinBoundaries.SLICE_TYPE.EXPONENTIAL:{const binExponentWidth=Math.log(nextMaxBinBoundary/prevBoundary)/binCount;for(let i=1;i<binCount;i++){const boundary=sliceMinBinBoundary*Math.exp(i*binExponentWidth);this.binRanges_.push(tr.b.math.Range.fromExplicitRange(prevBoundary,boundary));prevBoundary=boundary;}
-break;}
-default:throw new Error('Unrecognized HistogramBinBoundaries slice type');}
-this.binRanges_.push(tr.b.math.Range.fromExplicitRange(prevBoundary,nextMaxBinBoundary));prevBoundary=nextMaxBinBoundary;}
-if(prevBoundary<Number.MAX_VALUE){this.binRanges_.push(tr.b.math.Range.fromExplicitRange(prevBoundary,Number.MAX_VALUE));}}
-addBinBoundary(nextMaxBinBoundary){if(nextMaxBinBoundary<=this.range.max){throw new Error('The added max bin boundary must be larger than '+'the current max boundary');}
-this.binRanges_=undefined;this.bins_=undefined;this.pushBuilderSlice_(nextMaxBinBoundary);this.range.addValue(nextMaxBinBoundary);return this;}
-addLinearBins(nextMaxBinBoundary,binCount){if(binCount<=0){throw new Error('Bin count must be positive');}
-if(nextMaxBinBoundary<=this.range.max){throw new Error('The new max bin boundary must be greater than '+'the previous max bin boundary');}
-this.binRanges_=undefined;this.bins_=undefined;this.pushBuilderSlice_([HistogramBinBoundaries.SLICE_TYPE.LINEAR,nextMaxBinBoundary,binCount]);this.range.addValue(nextMaxBinBoundary);return this;}
-addExponentialBins(nextMaxBinBoundary,binCount){if(binCount<=0){throw new Error('Bin count must be positive');}
-if(this.range.max<=0){throw new Error('Current max bin boundary must be positive');}
-if(this.range.max>=nextMaxBinBoundary){throw new Error('The last added max boundary must be greater than '+'the current max boundary boundary');}
-this.binRanges_=undefined;this.bins_=undefined;this.pushBuilderSlice_([HistogramBinBoundaries.SLICE_TYPE.EXPONENTIAL,nextMaxBinBoundary,binCount]);this.range.addValue(nextMaxBinBoundary);return this;}}
-HistogramBinBoundaries.SLICE_TYPE={LINEAR:0,EXPONENTIAL:1,};HistogramBinBoundaries.SINGULAR=new HistogramBinBoundaries(Number.MAX_VALUE);DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.timeDurationInMs.unitName,HistogramBinBoundaries.createExponential(1e-3,1e6,1e2));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.timeStampInMs.unitName,HistogramBinBoundaries.createLinear(0,1e10,1e3));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.normalizedPercentage.unitName,HistogramBinBoundaries.createLinear(0,1.0,20));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.sizeInBytes.unitName,HistogramBinBoundaries.createExponential(1,1e12,1e2));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.energyInJoules.unitName,HistogramBinBoundaries.createExponential(1e-3,1e3,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.powerInWatts.unitName,HistogramBinBoundaries.createExponential(1e-3,1,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.unitlessNumber.unitName,HistogramBinBoundaries.createExponential(1e-3,1e3,50));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.count.unitName,HistogramBinBoundaries.createExponential(1,1e3,20));DEFAULT_BOUNDARIES_FOR_UNIT.set(tr.b.Unit.byName.sigma.unitName,HistogramBinBoundaries.createLinear(-5,5,50));return{DEFAULT_REBINNED_COUNT,DELTA,Histogram,HistogramBinBoundaries,P_VALUE_NAME,U_STATISTIC_NAME,Z_SCORE_NAME,percentFromString,percentToString,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-scalar-context-controller',created(){this.host_=undefined;this.groupToContext_=new Map();this.dirtyGroups_=new Set();},attached(){if(this.host_){throw new Error('Scalar context controller is already attached to a host');}
-const host=findParentOrHost(this);if(host.__scalarContextController){throw new Error('Multiple scalar context controllers attached to this host');}
-host.__scalarContextController=this;this.host_=host;},detached(){if(!this.host_){throw new Error('Scalar context controller is not attached to a host');}
-if(this.host_.__scalarContextController!==this){throw new Error('Scalar context controller is not attached to its host');}
-delete this.host_.__scalarContextController;this.host_=undefined;},getContext(group){return this.groupToContext_.get(group);},onScalarSpanAdded(group,span){let context=this.groupToContext_.get(group);if(context===undefined){context={spans:new Set(),range:new tr.b.math.Range()};this.groupToContext_.set(group,context);}
-if(context.spans.has(span)){throw new Error('Scalar span already registered with group: '+group);}
-context.spans.add(span);this.markGroupDirtyAndScheduleUpdate_(group);},onScalarSpanRemoved(group,span){const context=this.groupToContext_.get(group);if(!context.spans.has(span)){throw new Error('Scalar span not registered with group: '+group);}
-context.spans.delete(span);this.markGroupDirtyAndScheduleUpdate_(group);},onScalarSpanUpdated(group,span){const context=this.groupToContext_.get(group);if(!context.spans.has(span)){throw new Error('Scalar span not registered with group: '+group);}
-this.markGroupDirtyAndScheduleUpdate_(group);},markGroupDirtyAndScheduleUpdate_(group){const alreadyDirty=this.dirtyGroups_.size>0;this.dirtyGroups_.add(group);if(!alreadyDirty){tr.b.requestAnimationFrameInThisFrameIfPossible(this.updateContext,this);}},updateContext(){const groups=this.dirtyGroups_;if(groups.size===0)return;this.dirtyGroups_=new Set();for(const group of groups){this.updateGroup_(group);}
-const event=new tr.b.Event('context-updated');event.groups=groups;this.dispatchEvent(event);},updateGroup_(group){const context=this.groupToContext_.get(group);if(context.spans.size===0){this.groupToContext_.delete(group);return;}
-context.range.reset();for(const span of context.spans){context.range.addValue(span.value);}}});function getScalarContextControllerForElement(element){while(element){if(element.__scalarContextController){return element.__scalarContextController;}
-element=findParentOrHost(element);}
-return undefined;}
-function findParentOrHost(node){if(node.parentElement){return node.parentElement;}
-while(Polymer.dom(node).parentNode){node=Polymer.dom(node).parentNode;}
-return node.host;}
-return{getScalarContextControllerForElement,};});'use strict';tr.exportTo('tr.v.ui',function(){function createScalarSpan(value,opt_config){if(value===undefined)return'';const config=opt_config||{};const ownerDocument=config.ownerDocument||document;const span=ownerDocument.createElement('tr-v-ui-scalar-span');let numericValue;if(value instanceof tr.b.Scalar){span.value=value;numericValue=value.value;}else if(value instanceof tr.v.Histogram){numericValue=value.average;if(numericValue===undefined)return'';span.setValueAndUnit(numericValue,value.unit);}else{const unit=config.unit;if(unit===undefined){throw new Error('Unit must be provided in config when value is a number');}
-span.setValueAndUnit(value,unit);numericValue=value;}
-if(config.context){span.context=config.context;}
-if(config.customContextRange){span.customContextRange=config.customContextRange;}
-if(config.leftAlign){span.leftAlign=true;}
-if(config.inline){span.inline=true;}
-if(config.significance!==undefined){span.significance=config.significance;}
-if(config.contextGroup!==undefined){span.contextGroup=config.contextGroup;}
-return span;}
-return{createScalarSpan,};});'use strict';Polymer({is:'tr-v-ui-scalar-span',properties:{contextGroup:{type:String,reflectToAttribute:true,observer:'contextGroupChanged_'}},created(){this.value_=undefined;this.unit_=undefined;this.context_=undefined;this.warning_=undefined;this.significance_=tr.b.math.Statistics.Significance.DONT_CARE;this.shouldSearchForContextController_=false;this.lazyContextController_=undefined;this.onContextUpdated_=this.onContextUpdated_.bind(this);this.updateContents_=this.updateContents_.bind(this);this.customContextRange_=undefined;},get significance(){return this.significance_;},set significance(s){this.significance_=s;this.updateContents_();},set contentTextDecoration(deco){this.$.content.style.textDecoration=deco;},get value(){return this.value_;},set value(value){if(value instanceof tr.b.Scalar){this.value_=value.value;this.unit_=value.unit;}else{this.value_=value;}
-this.updateContents_();if(this.hasContext_(this.contextGroup)){this.contextController_.onScalarSpanUpdated(this.contextGroup,this);}else{this.updateSparkline_();}},get contextController_(){if(this.shouldSearchForContextController_){this.lazyContextController_=tr.v.ui.getScalarContextControllerForElement(this);this.shouldSearchForContextController_=false;}
-return this.lazyContextController_;},hasContext_(contextGroup){return!!(contextGroup&&this.contextController_);},contextGroupChanged_(newContextGroup,oldContextGroup){this.detachFromContextControllerIfPossible_(oldContextGroup);if(!this.attachToContextControllerIfPossible_(newContextGroup)){this.onContextUpdated_();}},attachToContextControllerIfPossible_(contextGroup){if(!this.hasContext_(contextGroup))return false;this.contextController_.addEventListener('context-updated',this.onContextUpdated_);this.contextController_.onScalarSpanAdded(contextGroup,this);return true;},detachFromContextControllerIfPossible_(contextGroup){if(!this.hasContext_(contextGroup))return;this.contextController_.removeEventListener('context-updated',this.onContextUpdated_);this.contextController_.onScalarSpanRemoved(contextGroup,this);},attached(){tr.b.Unit.addEventListener('display-mode-changed',this.updateContents_);this.shouldSearchForContextController_=true;this.attachToContextControllerIfPossible_(this.contextGroup);},detached(){tr.b.Unit.removeEventListener('display-mode-changed',this.updateContents_);this.detachFromContextControllerIfPossible_(this.contextGroup);this.shouldSearchForContextController_=false;this.lazyContextController_=undefined;},onContextUpdated_(){this.updateSparkline_();},get context(){return this.context_;},set context(context){this.context_=context;this.updateContents_();},get unit(){return this.unit_;},set unit(unit){this.unit_=unit;this.updateContents_();this.updateSparkline_();},setValueAndUnit(value,unit){this.value_=value;this.unit_=unit;this.updateContents_();},get customContextRange(){return this.customContextRange_;},set customContextRange(customContextRange){this.customContextRange_=customContextRange;this.updateSparkline_();},get inline(){return Polymer.dom(this).classList.contains('inline');},set inline(inline){if(inline){Polymer.dom(this).classList.add('inline');}else{Polymer.dom(this).classList.remove('inline');}},get leftAlign(){return Polymer.dom(this).classList.contains('left-align');},set leftAlign(leftAlign){if(leftAlign){Polymer.dom(this).classList.add('left-align');}else{Polymer.dom(this).classList.remove('left-align');}},updateSparkline_(){Polymer.dom(this.$.sparkline).classList.remove('positive');Polymer.dom(this.$.sparkline).classList.remove('better');Polymer.dom(this.$.sparkline).classList.remove('worse');Polymer.dom(this.$.sparkline).classList.remove('same');this.$.sparkline.style.display='none';this.$.sparkline.style.left='0';this.$.sparkline.style.width='0';let range=this.customContextRange_;if(!range&&this.hasContext_(this.contextGroup)){const context=this.contextController_.getContext(this.contextGroup);if(context){range=context.range;}}
-if(!range||range.isEmpty)return;const leftPoint=Math.min(range.min,0);const rightPoint=Math.max(range.max,0);const pointDistance=rightPoint-leftPoint;if(pointDistance===0){return;}
-this.$.sparkline.style.display='block';let left;let width;if(this.value>0){width=Math.min(this.value,rightPoint);left=-leftPoint;Polymer.dom(this.$.sparkline).classList.add('positive');}else if(this.value<=0){width=-Math.max(this.value,leftPoint);left=(-leftPoint)-width;}
-this.$.sparkline.style.left=this.buildSparklineStyle_(left/pointDistance,false);this.$.sparkline.style.width=this.buildSparklineStyle_(width/pointDistance,true);const changeClass=this.changeClassName_;if(changeClass){Polymer.dom(this.$.sparkline).classList.add(changeClass);}},buildSparklineStyle_(ratio,isWidth){let position='calc('+ratio+' * (100% - 1px)';if(isWidth){position+=' + 1px';}
-position+=')';return position;},updateContents_(){Polymer.dom(this.$.content).textContent='';Polymer.dom(this.$.content).classList.remove('better');Polymer.dom(this.$.content).classList.remove('worse');Polymer.dom(this.$.content).classList.remove('same');this.$.insignificant.style.display='';this.$.significantly_better.style.display='';this.$.significantly_worse.style.display='';if(this.unit_===undefined)return;this.$.content.title='';Polymer.dom(this.$.content).textContent=this.unit_.format(this.value,this.context);this.updateDelta_();},updateDelta_(){let changeClass=this.changeClassName_;if(!changeClass){this.$.significance.style.display='none';return;}
-this.$.significance.style.display='inline';let title;switch(changeClass){case'better':title='improvement';break;case'worse':title='regression';break;case'same':title='no change';break;default:throw new Error('Unknown change class: '+changeClass);}
-Polymer.dom(this.$.content).classList.add(changeClass);switch(this.significance){case tr.b.math.Statistics.Significance.DONT_CARE:break;case tr.b.math.Statistics.Significance.INSIGNIFICANT:if(changeClass!=='same')title='insignificant '+title;this.$.insignificant.style.display='inline';changeClass='same';break;case tr.b.math.Statistics.Significance.SIGNIFICANT:if(changeClass==='same'){throw new Error('How can no change be significant?');}
-this.$['significantly_'+changeClass].style.display='inline';title='significant '+title;break;default:throw new Error('Unknown significance '+this.significance);}
-this.$.significance.title=title;this.$.content.title=title;},get changeClassName_(){if(!this.unit_||!this.unit_.isDelta)return undefined;switch(this.unit_.improvementDirection){case tr.b.ImprovementDirection.DONT_CARE:return undefined;case tr.b.ImprovementDirection.BIGGER_IS_BETTER:if(this.value===0)return'same';return this.value>0?'better':'worse';case tr.b.ImprovementDirection.SMALLER_IS_BETTER:if(this.value===0)return'same';return this.value<0?'better':'worse';default:throw new Error('Unknown improvement direction: '+
-this.unit_.improvementDirection);}},get warning(){return this.warning_;},set warning(warning){this.warning_=warning;const warningEl=this.$.warning;if(this.warning_){warningEl.title=warning;warningEl.style.display='inline';}else{warningEl.title='';warningEl.style.display='';}},get timestamp(){return this.value;},set timestamp(timestamp){if(timestamp instanceof tr.b.u.TimeStamp){this.value=timestamp;return;}
-this.setValueAndUnit(timestamp,tr.b.u.Units.timeStampInMs);},get duration(){return this.value;},set duration(duration){if(duration instanceof tr.b.u.TimeDuration){this.value=duration;return;}
-this.setValueAndUnit(duration,tr.b.u.Units.timeDurationInMs);}});'use strict';function isTable(object){if(!(object instanceof Array)||(object.length<2))return false;for(const colName in object[0]){if(typeof colName!=='string')return false;}
-for(let i=0;i<object.length;++i){if(!(object[i]instanceof Object))return false;for(const colName in object[i]){if(i&&(object[0][colName]===undefined))return false;const cellType=typeof object[i][colName];if(cellType!=='string'&&cellType!=='number')return false;}
-if(i){for(const colName in object[0]){if(object[i][colName]===undefined)return false;}}}
-return true;}
-Polymer({is:'tr-ui-a-generic-object-view',ready(){this.object_=undefined;},get object(){return this.object_;},set object(object){this.object_=object;this.updateContents_();},updateContents_(){Polymer.dom(this.$.content).textContent='';this.appendElementsForType_('',this.object_,0,0,5,'');},appendElementsForType_(label,object,indent,depth,maxDepth,suffix){if(depth>maxDepth){this.appendSimpleText_(label,indent,'<recursion limit reached>',suffix);return;}
-if(object===undefined){this.appendSimpleText_(label,indent,'undefined',suffix);return;}
-if(object===null){this.appendSimpleText_(label,indent,'null',suffix);return;}
-if(!(object instanceof Object)){const type=typeof object;if(type!=='string'){return this.appendSimpleText_(label,indent,object,suffix);}
-let objectReplaced=false;if((object[0]==='{'&&object[object.length-1]==='}')||(object[0]==='['&&object[object.length-1]===']')){try{object=JSON.parse(object);objectReplaced=true;}catch(e){}}
-if(!objectReplaced){if(object.includes('\n')){const lines=object.split('\n');lines.forEach(function(line,i){let text;let ioff;let ll;let ss;if(i===0){text='"'+line;ioff=0;ll=label;ss='';}else if(i<lines.length-1){text=line;ioff=1;ll='';ss='';}else{text=line+'"';ioff=1;ll='';ss=suffix;}
-const el=this.appendSimpleText_(ll,indent+ioff*label.length+ioff,text,ss);el.style.whiteSpace='pre';return el;},this);return;}
-if(tr.b.isUrl(object)){const link=document.createElement('a');link.href=object;link.textContent=object;this.appendElementWithLabel_(label,indent,link,suffix);return;}
-this.appendSimpleText_(label,indent,'"'+object+'"',suffix);return;}}
-if(object instanceof tr.model.ObjectSnapshot){const link=document.createElement('tr-ui-a-analysis-link');link.selection=new tr.model.EventSet(object);this.appendElementWithLabel_(label,indent,link,suffix);return;}
-if(object instanceof tr.model.ObjectInstance){const link=document.createElement('tr-ui-a-analysis-link');link.selection=new tr.model.EventSet(object);this.appendElementWithLabel_(label,indent,link,suffix);return;}
-if(object instanceof tr.b.math.Rect){this.appendSimpleText_(label,indent,object.toString(),suffix);return;}
-if(object instanceof tr.b.Scalar){const el=this.ownerDocument.createElement('tr-v-ui-scalar-span');el.value=object;el.inline=true;this.appendElementWithLabel_(label,indent,el,suffix);return;}
-if(object instanceof Array){this.appendElementsForArray_(label,object,indent,depth,maxDepth,suffix);return;}
-this.appendElementsForObject_(label,object,indent,depth,maxDepth,suffix);},appendElementsForArray_(label,object,indent,depth,maxDepth,suffix){if(object.length===0){this.appendSimpleText_(label,indent,'[]',suffix);return;}
-if(isTable(object)){const table=document.createElement('tr-ui-b-table');const columns=[];for(const colName of Object.keys(object[0])){let allStrings=true;let allNumbers=true;for(let i=0;i<object.length;++i){if(typeof(object[i][colName])!=='string'){allStrings=false;}
-if(typeof(object[i][colName])!=='number'){allNumbers=false;}
-if(!allStrings&&!allNumbers)break;}
-const column={title:colName};column.value=function(row){return row[colName];};if(allStrings){column.cmp=function(x,y){return x[colName].localeCompare(y[colName]);};}else if(allNumbers){column.cmp=function(x,y){return x[colName]-y[colName];};}
-columns.push(column);}
-table.tableColumns=columns;table.tableRows=object;this.appendElementWithLabel_(label,indent,table,suffix);table.rebuild();return;}
-this.appendElementsForType_(label+'[',object[0],indent,depth+1,maxDepth,object.length>1?',':']'+suffix);for(let i=1;i<object.length;i++){this.appendElementsForType_('',object[i],indent+label.length+1,depth+1,maxDepth,i<object.length-1?',':']'+suffix);}
-return;},appendElementsForObject_(label,object,indent,depth,maxDepth,suffix){const keys=Object.keys(object);if(keys.length===0){this.appendSimpleText_(label,indent,'{}',suffix);return;}
-this.appendElementsForType_(label+'{'+keys[0]+': ',object[keys[0]],indent,depth,maxDepth,keys.length>1?',':'}'+suffix);for(let i=1;i<keys.length;i++){this.appendElementsForType_(keys[i]+': ',object[keys[i]],indent+label.length+1,depth+1,maxDepth,i<keys.length-1?',':'}'+suffix);}},appendElementWithLabel_(label,indent,dataElement,suffix){const row=document.createElement('div');const indentSpan=document.createElement('span');indentSpan.style.whiteSpace='pre';for(let i=0;i<indent;i++){Polymer.dom(indentSpan).textContent+=' ';}
-Polymer.dom(row).appendChild(indentSpan);const labelSpan=document.createElement('span');Polymer.dom(labelSpan).textContent=label;Polymer.dom(row).appendChild(labelSpan);Polymer.dom(row).appendChild(dataElement);const suffixSpan=document.createElement('span');Polymer.dom(suffixSpan).textContent=suffix;Polymer.dom(row).appendChild(suffixSpan);row.dataElement=dataElement;Polymer.dom(this.$.content).appendChild(row);},appendSimpleText_(label,indent,text,suffix){const el=this.ownerDocument.createElement('span');Polymer.dom(el).textContent=text;this.appendElementWithLabel_(label,indent,el,suffix);return el;}});'use strict';Polymer({is:'tr-ui-a-generic-object-view-with-label',ready(){this.labelEl_=document.createElement('div');this.genericObjectView_=document.createElement('tr-ui-a-generic-object-view');Polymer.dom(this.root).appendChild(this.labelEl_);Polymer.dom(this.root).appendChild(this.genericObjectView_);},get label(){return Polymer.dom(this.labelEl_).textContent;},set label(label){Polymer.dom(this.labelEl_).textContent=label;},get object(){return this.genericObjectView_.object;},set object(object){this.genericObjectView_.object=object;}});'use strict';tr.exportTo('tr.ui.analysis',function(){const ObjectSnapshotView=tr.ui.b.define('object-snapshot-view');ObjectSnapshotView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.objectSnapshot_=undefined;},get requiresTallView(){return true;},set modelEvent(obj){this.objectSnapshot=obj;},get modelEvent(){return this.objectSnapshot;},get objectSnapshot(){return this.objectSnapshot_;},set objectSnapshot(i){this.objectSnapshot_=i;this.updateContents();},updateContents(){throw new Error('Not implemented');}};const options=new tr.b.ExtensionRegistryOptions(tr.b.TYPE_BASED_REGISTRY_MODE);options.mandatoryBaseClass=ObjectSnapshotView;options.defaultMetadata={showInstances:true,showInTrackView:true};tr.b.decorateExtensionRegistry(ObjectSnapshotView,options);return{ObjectSnapshotView,};});'use strict';Polymer({is:'tr-ui-b-drag-handle',created(){this.lastMousePos_=0;this.onMouseMove_=this.onMouseMove_.bind(this);this.onMouseUp_=this.onMouseUp_.bind(this);this.addEventListener('mousedown',this.onMouseDown_);this.target_=undefined;this.horizontal=true;this.observer_=new WebKitMutationObserver(this.didTargetMutate_.bind(this));this.targetSizesByModeKey_={};},get modeKey_(){return this.target_.className===''?'.':this.target_.className;},get target(){return this.target_;},set target(target){this.observer_.disconnect();this.target_=target;if(!this.target_)return;this.observer_.observe(this.target_,{attributes:true,attributeFilter:['class']});},get horizontal(){return this.horizontal_;},set horizontal(h){this.horizontal_=h;if(this.horizontal_){this.className='horizontal-drag-handle';}else{this.className='vertical-drag-handle';}},get vertical(){return!this.horizontal_;},set vertical(v){this.horizontal=!v;},forceMutationObserverFlush_(){const records=this.observer_.takeRecords();if(records.length){this.didTargetMutate_(records);}},didTargetMutate_(e){const modeSize=this.targetSizesByModeKey_[this.modeKey_];if(modeSize!==undefined){this.setTargetSize_(modeSize);return;}
-this.target_.style[this.targetStyleKey_]='';},get targetStyleKey_(){return this.horizontal_?'height':'width';},getTargetSize_(){const targetStyleKey=this.targetStyleKey_;if(!this.target_.style[targetStyleKey]){this.target_.style[targetStyleKey]=window.getComputedStyle(this.target_)[targetStyleKey];}
-const size=parseInt(this.target_.style[targetStyleKey]);this.targetSizesByModeKey_[this.modeKey_]=size;return size;},setTargetSize_(s){this.target_.style[this.targetStyleKey_]=s+'px';this.targetSizesByModeKey_[this.modeKey_]=s;tr.b.dispatchSimpleEvent(this,'drag-handle-resize',true,false);},applyDelta_(delta){const curSize=this.getTargetSize_();let newSize;if(this.target_===this.nextElementSibling){newSize=curSize+delta;}else{newSize=curSize-delta;}
-this.setTargetSize_(newSize);},onMouseMove_(e){const curMousePos=this.horizontal_?e.clientY:e.clientX;const delta=this.lastMousePos_-curMousePos;this.applyDelta_(delta);this.lastMousePos_=curMousePos;e.preventDefault();return true;},onMouseDown_(e){if(!this.target_)return;this.forceMutationObserverFlush_();this.lastMousePos_=this.horizontal_?e.clientY:e.clientX;document.addEventListener('mousemove',this.onMouseMove_);document.addEventListener('mouseup',this.onMouseUp_);e.preventDefault();return true;},onMouseUp_(e){document.removeEventListener('mousemove',this.onMouseMove_);document.removeEventListener('mouseup',this.onMouseUp_);e.preventDefault();}});'use strict';tr.exportTo('tr.ui.b',function(){function HotKey(dict){if(dict.eventType===undefined){throw new Error('eventType must be given');}
-if(dict.keyCode===undefined&&dict.keyCodes===undefined){throw new Error('keyCode or keyCodes must be given');}
-if(dict.keyCode!==undefined&&dict.keyCodes!==undefined){throw new Error('Only keyCode or keyCodes can be given');}
-if(dict.callback===undefined){throw new Error('callback must be given');}
-this.eventType_=dict.eventType;this.keyCodes_=[];if(dict.keyCode){this.pushKeyCode_(dict.keyCode);}else if(dict.keyCodes){dict.keyCodes.forEach(this.pushKeyCode_,this);}
-this.useCapture_=!!dict.useCapture;this.callback_=dict.callback;this.thisArg_=dict.thisArg!==undefined?dict.thisArg:undefined;this.helpText_=dict.helpText!==undefined?dict.helpText:undefined;}
-HotKey.prototype={get eventType(){return this.eventType_;},get keyCodes(){return this.keyCodes_;},get helpText(){return this.helpText_;},call(e){this.callback_.call(this.thisArg_,e);},pushKeyCode_(keyCode){this.keyCodes_.push(keyCode);}};return{HotKey,};});'use strict';Polymer({is:'tv-ui-b-hotkey-controller',created(){this.isAttached_=false;this.globalMode_=false;this.slavedToParentController_=undefined;this.curHost_=undefined;this.childControllers_=[];this.bubblingKeyDownHotKeys_={};this.capturingKeyDownHotKeys_={};this.bubblingKeyPressHotKeys_={};this.capturingKeyPressHotKeys_={};this.onBubblingKeyDown_=this.onKey_.bind(this,false);this.onCapturingKeyDown_=this.onKey_.bind(this,true);this.onBubblingKeyPress_=this.onKey_.bind(this,false);this.onCapturingKeyPress_=this.onKey_.bind(this,true);},attached(){this.isAttached_=true;const host=this.findHost_();if(host.__hotkeyController){throw new Error('Multiple hotkey controllers attached to this host');}
-host.__hotkeyController=this;this.curHost_=host;let parentElement;if(host.parentElement){parentElement=host.parentElement;}else{parentElement=Polymer.dom(host).parentNode.host;}
-const parentController=tr.b.getHotkeyControllerForElement(parentElement);if(parentController){this.slavedToParentController_=parentController;parentController.addChildController_(this);return;}
-host.addEventListener('keydown',this.onBubblingKeyDown_,false);host.addEventListener('keydown',this.onCapturingKeyDown_,true);host.addEventListener('keypress',this.onBubblingKeyPress_,false);host.addEventListener('keypress',this.onCapturingKeyPress_,true);},detached(){this.isAttached_=false;const host=this.curHost_;if(!host)return;delete host.__hotkeyController;this.curHost_=undefined;if(this.slavedToParentController_){this.slavedToParentController_.removeChildController_(this);this.slavedToParentController_=undefined;return;}
-host.removeEventListener('keydown',this.onBubblingKeyDown_,false);host.removeEventListener('keydown',this.onCapturingKeyDown_,true);host.removeEventListener('keypress',this.onBubblingKeyPress_,false);host.removeEventListener('keypress',this.onCapturingKeyPress_,true);},addChildController_(controller){const i=this.childControllers_.indexOf(controller);if(i!==-1){throw new Error('Controller already registered');}
-this.childControllers_.push(controller);},removeChildController_(controller){const i=this.childControllers_.indexOf(controller);if(i===-1){throw new Error('Controller not registered');}
-this.childControllers_.splice(i,1);return controller;},getKeyMapForEventType_(eventType,useCapture){if(eventType==='keydown'){if(!useCapture){return this.bubblingKeyDownHotKeys_;}
-return this.capturingKeyDownHotKeys_;}
-if(eventType==='keypress'){if(!useCapture){return this.bubblingKeyPressHotKeys_;}
-return this.capturingKeyPressHotKeys_;}
-throw new Error('Unsupported key event');},addHotKey(hotKey){if(!(hotKey instanceof tr.ui.b.HotKey)){throw new Error('hotKey must be a tr.ui.b.HotKey');}
-const keyMap=this.getKeyMapForEventType_(hotKey.eventType,hotKey.useCapture);for(let i=0;i<hotKey.keyCodes.length;i++){const keyCode=hotKey.keyCodes[i];if(keyMap[keyCode]){throw new Error('Key is already bound for keyCode='+keyCode);}}
-for(let i=0;i<hotKey.keyCodes.length;i++){const keyCode=hotKey.keyCodes[i];keyMap[keyCode]=hotKey;}
-return hotKey;},removeHotKey(hotKey){if(!(hotKey instanceof tr.ui.b.HotKey)){throw new Error('hotKey must be a tr.ui.b.HotKey');}
-const keyMap=this.getKeyMapForEventType_(hotKey.eventType,hotKey.useCapture);for(let i=0;i<hotKey.keyCodes.length;i++){const keyCode=hotKey.keyCodes[i];if(!keyMap[keyCode]){throw new Error('Key is not bound for keyCode='+keyCode);}
-keyMap[keyCode]=hotKey;}
-for(let i=0;i<hotKey.keyCodes.length;i++){const keyCode=hotKey.keyCodes[i];delete keyMap[keyCode];}
-return hotKey;},get globalMode(){return this.globalMode_;},set globalMode(globalMode){const wasAttached=this.isAttached_;if(wasAttached){this.detached();}
-this.globalMode_=!!globalMode;if(wasAttached){this.attached();}},get topmostConroller_(){if(this.slavedToParentController_){return this.slavedToParentController_.topmostConroller_;}
-return this;},childRequestsGeneralFocus(child){const topmost=this.topmostConroller_;if(topmost.curHost_){if(topmost.curHost_.hasAttribute('tabIndex')){topmost.curHost_.focus();}else{if(document.activeElement){document.activeElement.blur();}}}else{if(document.activeElement){document.activeElement.blur();}}},childRequestsBlur(child){child.blur();const topmost=this.topmostConroller_;if(topmost.curHost_){topmost.curHost_.focus();}},findHost_(){if(this.globalMode_)return document.body;if(this.parentElement)return this.parentElement;if(!Polymer.dom(this).parentNode)return this.host;let node=this.parentNode;while(Polymer.dom(node).parentNode)node=Polymer.dom(node).parentNode;return node.host;},appendMatchingHotKeysTo_(matchedHotKeys,useCapture,e){const localKeyMap=this.getKeyMapForEventType_(e.type,useCapture);const localHotKey=localKeyMap[e.keyCode];if(localHotKey){matchedHotKeys.push(localHotKey);}
-for(let i=0;i<this.childControllers_.length;i++){const controller=this.childControllers_[i];controller.appendMatchingHotKeysTo_(matchedHotKeys,useCapture,e);}},onKey_(useCapture,e){if(!useCapture&&e.path[0].tagName==='INPUT')return;let sortedControllers;const matchedHotKeys=[];this.appendMatchingHotKeysTo_(matchedHotKeys,useCapture,e);if(matchedHotKeys.length===0)return false;if(matchedHotKeys.length>1){throw new Error('More than one hotKey is currently unsupported');}
-const hotKey=matchedHotKeys[0];let prevented=0;prevented|=hotKey.call(e);return!prevented&&e.defaultPrevented;}});'use strict';tr.exportTo('tr.b',function(){function getHotkeyControllerForElement(refElement){let curElement=refElement;while(curElement){if(curElement.tagName==='tv-ui-b-hotkey-controller'){return curElement;}
-if(curElement.__hotkeyController){return curElement.__hotkeyController;}
-if(curElement.parentElement){curElement=curElement.parentElement;continue;}
-curElement=findHost(curElement);}
-return undefined;}
-function findHost(initialNode){let node=initialNode;while(Polymer.dom(node).parentNode){node=Polymer.dom(node).parentNode;}
-return node.host;}
-return{getHotkeyControllerForElement,};});'use strict';Polymer({is:'tr-ui-b-info-bar',ready(){this.messageEl_=this.$.message;this.buttonsEl_=this.$.buttons;this.message='';},get message(){return Polymer.dom(this.messageEl_).textContent;},set message(message){Polymer.dom(this.messageEl_).textContent=message;},get visible(){return!this.hidden;},set visible(visible){this.hidden=!visible;},removeAllButtons(){Polymer.dom(this.buttonsEl_).textContent='';},addButton(text,clickCallback){const button=document.createElement('button');Polymer.dom(button).textContent=text;button.addEventListener('click',event=>clickCallback(event,this));Polymer.dom(this.buttonsEl_).appendChild(button);return button;}});'use strict';tr.exportTo('tr.ui.b',function(){const ContainerThatDecoratesItsChildren=tr.ui.b.define('div');ContainerThatDecoratesItsChildren.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.observer_=new WebKitMutationObserver(this.didMutate_.bind(this));this.observer_.observe(this,{childList:true});Object.defineProperty(this,'textContent',{get:undefined,set:this.onSetTextContent_});},appendChild(x){HTMLDivElement.prototype.appendChild.call(this,x);this.didMutate_(this.observer_.takeRecords());},insertBefore(x,y){HTMLDivElement.prototype.insertBefore.call(this,x,y);this.didMutate_(this.observer_.takeRecords());},removeChild(x){HTMLDivElement.prototype.removeChild.call(this,x);this.didMutate_(this.observer_.takeRecords());},replaceChild(x,y){HTMLDivElement.prototype.replaceChild.call(this,x,y);this.didMutate_(this.observer_.takeRecords());},onSetTextContent_(textContent){if(textContent!==''){throw new Error('textContent can only be set to \'\'.');}
-this.clear();},clear(){while(Polymer.dom(this).lastChild){HTMLDivElement.prototype.removeChild.call(this,Polymer.dom(this).lastChild);}
-this.didMutate_(this.observer_.takeRecords());},didMutate_(records){this.beginDecorating_();for(let i=0;i<records.length;i++){const addedNodes=records[i].addedNodes;if(addedNodes){for(let j=0;j<addedNodes.length;j++){this.decorateChild_(addedNodes[j]);}}
-const removedNodes=records[i].removedNodes;if(removedNodes){for(let j=0;j<removedNodes.length;j++){this.undecorateChild_(removedNodes[j]);}}}
-this.doneDecoratingForNow_();},decorateChild_(child){throw new Error('Not implemented');},undecorateChild_(child){throw new Error('Not implemented');},beginDecorating_(){},doneDecoratingForNow_(){}};return{ContainerThatDecoratesItsChildren,};});'use strict';tr.exportTo('tr.ui.b',function(){const ListView=tr.ui.b.define('x-list-view',tr.ui.b.ContainerThatDecoratesItsChildren);ListView.prototype={__proto__:tr.ui.b.ContainerThatDecoratesItsChildren.prototype,decorate(){tr.ui.b.ContainerThatDecoratesItsChildren.prototype.decorate.call(this);Polymer.dom(this).classList.add('x-list-view');this.style.display='block';this.style.userSelect='none';this.style.outline='none';this.onItemClicked_=this.onItemClicked_.bind(this);this.onKeyDown_=this.onKeyDown_.bind(this);this.tabIndex=0;this.addEventListener('keydown',this.onKeyDown_);this.selectionChanged_=false;},decorateChild_(item){Polymer.dom(item).classList.add('list-item');item.style.paddingTop='2px';item.style.paddingRight='4px';item.style.paddingBottom='2px';item.style.paddingLeft='4px';item.addEventListener('click',this.onItemClicked_,true);Object.defineProperty(item,'selected',{configurable:true,get:()=>item.hasAttribute('selected'),set:value=>{const oldSelection=this.selectedElement;if(oldSelection&&oldSelection!==item&&value){Polymer.dom(this.selectedElement).removeAttribute('selected');}
-if(value){Polymer.dom(item).setAttribute('selected','selected');item.style.backgroundColor='rgb(171, 217, 202)';item.style.outline='1px dotted rgba(0,0,0,0.1)';item.style.outlineOffset=0;}else{Polymer.dom(item).removeAttribute('selected');item.style.backgroundColor='';}
-const newSelection=this.selectedElement;if(newSelection!==oldSelection){tr.b.dispatchSimpleEvent(this,'selection-changed',false);}},});},undecorateChild_(item){this.selectionChanged_|=item.selected;Polymer.dom(item).classList.remove('list-item');item.removeEventListener('click',this.onItemClicked_);delete item.selected;},beginDecorating_(){this.selectionChanged_=false;},doneDecoratingForNow_(){if(this.selectionChanged_){tr.b.dispatchSimpleEvent(this,'selection-changed',false);}},get selectedElement(){const el=Polymer.dom(this).querySelector('.list-item[selected]');if(!el)return undefined;return el;},set selectedElement(el){if(!el){if(this.selectedElement){this.selectedElement.selected=false;}
-return;}
-if(el.parentElement!==this){throw new Error('Can only select elements that are children of this list view');}
-el.selected=true;},getElementByIndex(index){return Polymer.dom(this).querySelector('.list-item:nth-child('+index+')');},clear(){const changed=this.selectedElement!==undefined;tr.ui.b.ContainerThatDecoratesItsChildren.prototype.clear.call(this);if(changed){tr.b.dispatchSimpleEvent(this,'selection-changed',false);}},onItemClicked_(e){const currentSelectedElement=this.selectedElement;if(currentSelectedElement){Polymer.dom(currentSelectedElement).removeAttribute('selected');}
-let element=e.target;while(element.parentElement!==this){element=element.parentElement;}
-if(element!==currentSelectedElement){Polymer.dom(element).setAttribute('selected','selected');}
-tr.b.dispatchSimpleEvent(this,'selection-changed',false);},onKeyDown_(e){if(this.selectedElement===undefined)return;if(e.keyCode===38){const prev=Polymer.dom(this.selectedElement).previousSibling;if(prev){prev.selected=true;tr.ui.b.scrollIntoViewIfNeeded(prev);e.preventDefault();return true;}}else if(e.keyCode===40){const next=Polymer.dom(this.selectedElement).nextSibling;if(next){next.selected=true;tr.ui.b.scrollIntoViewIfNeeded(next);e.preventDefault();return true;}}},addItem(textContent){const item=document.createElement('div');Polymer.dom(item).textContent=textContent;Polymer.dom(this).appendChild(item);item.style.userSelect='none';return item;}};return{ListView,};});'use strict';tr.exportTo('tr.ui.b',function(){const MOUSE_SELECTOR_MODE={};MOUSE_SELECTOR_MODE.SELECTION=0x1;MOUSE_SELECTOR_MODE.PANSCAN=0x2;MOUSE_SELECTOR_MODE.ZOOM=0x4;MOUSE_SELECTOR_MODE.TIMING=0x8;MOUSE_SELECTOR_MODE.ROTATE=0x10;MOUSE_SELECTOR_MODE.ALL_MODES=0x1F;const MOUSE_SELECTOR_MODE_INFOS={};MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.PANSCAN]={name:'PANSCAN',mode:MOUSE_SELECTOR_MODE.PANSCAN,title:'pan',eventNames:{enter:'enterpan',begin:'beginpan',update:'updatepan',end:'endpan',exit:'exitpan'},activeBackgroundPosition:'-30px -10px',defaultBackgroundPosition:'0 -10px'};MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.SELECTION]={name:'SELECTION',mode:MOUSE_SELECTOR_MODE.SELECTION,title:'selection',eventNames:{enter:'enterselection',begin:'beginselection',update:'updateselection',end:'endselection',exit:'exitselection'},activeBackgroundPosition:'-30px -40px',defaultBackgroundPosition:'0 -40px'};MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.ZOOM]={name:'ZOOM',mode:MOUSE_SELECTOR_MODE.ZOOM,title:'zoom',eventNames:{enter:'enterzoom',begin:'beginzoom',update:'updatezoom',end:'endzoom',exit:'exitzoom'},activeBackgroundPosition:'-30px -70px',defaultBackgroundPosition:'0 -70px'};MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.TIMING]={name:'TIMING',mode:MOUSE_SELECTOR_MODE.TIMING,title:'timing',eventNames:{enter:'entertiming',begin:'begintiming',update:'updatetiming',end:'endtiming',exit:'exittiming'},activeBackgroundPosition:'-30px -100px',defaultBackgroundPosition:'0 -100px'};MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.ROTATE]={name:'ROTATE',mode:MOUSE_SELECTOR_MODE.ROTATE,title:'rotate',eventNames:{enter:'enterrotate',begin:'beginrotate',update:'updaterotate',end:'endrotate',exit:'exitrotate'},activeBackgroundPosition:'-30px -130px',defaultBackgroundPosition:'0 -130px'};return{MOUSE_SELECTOR_MODE_INFOS,MOUSE_SELECTOR_MODE,};});'use strict';Polymer({is:'tr-ui-b-mouse-mode-icon',properties:{modeName:{type:String,reflectToAttribute:true,observer:'modeNameChanged'},},created(){this.active_=false;this.acceleratorKey_=undefined;},ready(){this.updateContents_();},get mode(){return tr.ui.b.MOUSE_SELECTOR_MODE[this.modeName];},set mode(mode){const modeInfo=tr.ui.b.MOUSE_SELECTOR_MODE_INFOS[mode];if(modeInfo===undefined){throw new Error('Unknown mode');}
-this.modeName=modeInfo.name;},modeNameChanged(){this.updateContents_();},get active(){return this.active_;},set active(active){this.active_=!!active;if(this.active_){Polymer.dom(this).classList.add('active');}else{Polymer.dom(this).classList.remove('active');}
-this.updateContents_();},get acceleratorKey(){return this.acceleratorKey_;},set acceleratorKey(acceleratorKey){this.acceleratorKey_=acceleratorKey;this.updateContents_();},updateContents_(){if(this.modeName===undefined)return;const mode=this.mode;if(mode===undefined){throw new Error('Invalid mode');}
-const modeInfo=tr.ui.b.MOUSE_SELECTOR_MODE_INFOS[mode];if(!modeInfo){throw new Error('Invalid mode');}
-let title=modeInfo.title;if(this.acceleratorKey_){title=title+' ('+this.acceleratorKey_+')';}
-this.title=title;let bp;if(this.active_){bp=modeInfo.activeBackgroundPosition;}else{bp=modeInfo.defaultBackgroundPosition;}
-this.style.backgroundPosition=bp;}});'use strict';tr.exportTo('tr.ui.b',function(){function MouseTracker(opt_targetElement){this.onMouseDown_=this.onMouseDown_.bind(this);this.onMouseMove_=this.onMouseMove_.bind(this);this.onMouseUp_=this.onMouseUp_.bind(this);this.targetElement=opt_targetElement;}
-MouseTracker.prototype={get targetElement(){return this.targetElement_;},set targetElement(targetElement){if(this.targetElement_){this.targetElement_.removeEventListener('mousedown',this.onMouseDown_);}
-this.targetElement_=targetElement;if(this.targetElement_){this.targetElement_.addEventListener('mousedown',this.onMouseDown_);}},onMouseDown_(e){if(e.button!==0)return true;e=this.remakeEvent_(e,'mouse-tracker-start');this.targetElement_.dispatchEvent(e);document.addEventListener('mousemove',this.onMouseMove_);document.addEventListener('mouseup',this.onMouseUp_);this.targetElement_.addEventListener('blur',this.onMouseUp_);this.savePreviousUserSelect_=document.body.style['-webkit-user-select'];document.body.style['-webkit-user-select']='none';e.preventDefault();return true;},onMouseMove_(e){e=this.remakeEvent_(e,'mouse-tracker-move');this.targetElement_.dispatchEvent(e);},onMouseUp_(e){document.removeEventListener('mousemove',this.onMouseMove_);document.removeEventListener('mouseup',this.onMouseUp_);this.targetElement_.removeEventListener('blur',this.onMouseUp_);document.body.style['-webkit-user-select']=this.savePreviousUserSelect_;e=this.remakeEvent_(e,'mouse-tracker-end');this.targetElement_.dispatchEvent(e);},remakeEvent_(e,newType){const remade=new tr.b.Event(newType,true,true);remade.x=e.x;remade.y=e.y;remade.offsetX=e.offsetX;remade.offsetY=e.offsetY;remade.clientX=e.clientX;remade.clientY=e.clientY;return remade;}};function trackMouseMovesUntilMouseUp(mouseMoveHandler,opt_mouseUpHandler,opt_keyUpHandler){function cleanupAndDispatchToMouseUp(e){document.removeEventListener('mousemove',mouseMoveHandler);if(opt_keyUpHandler){document.removeEventListener('keyup',opt_keyUpHandler);}
-document.removeEventListener('mouseup',cleanupAndDispatchToMouseUp);if(opt_mouseUpHandler){opt_mouseUpHandler(e);}}
-document.addEventListener('mousemove',mouseMoveHandler);if(opt_keyUpHandler){document.addEventListener('keyup',opt_keyUpHandler);}
-document.addEventListener('mouseup',cleanupAndDispatchToMouseUp);}
-return{MouseTracker,trackMouseMovesUntilMouseUp,};});'use strict';tr.exportTo('tr.ui.b',function(){const MOUSE_SELECTOR_MODE=tr.ui.b.MOUSE_SELECTOR_MODE;const MOUSE_SELECTOR_MODE_INFOS=tr.ui.b.MOUSE_SELECTOR_MODE_INFOS;const MIN_MOUSE_SELECTION_DISTANCE=4;const MODIFIER={SHIFT:0x1,SPACE:0x2,CMD_OR_CTRL:0x4};function isCmdOrCtrlPressed(event){if(tr.isMac)return event.metaKey;return event.ctrlKey;}
-Polymer({is:'tr-ui-b-mouse-mode-selector',created(){this.supportedModeMask_=MOUSE_SELECTOR_MODE.ALL_MODES;this.initialRelativeMouseDownPos_={x:0,y:0};this.defaultMode_=MOUSE_SELECTOR_MODE.PANSCAN;this.settingsKey_=undefined;this.mousePos_={x:0,y:0};this.mouseDownPos_={x:0,y:0};this.onMouseDown_=this.onMouseDown_.bind(this);this.onMouseMove_=this.onMouseMove_.bind(this);this.onMouseUp_=this.onMouseUp_.bind(this);this.onKeyDown_=this.onKeyDown_.bind(this);this.onKeyUp_=this.onKeyUp_.bind(this);this.mode_=undefined;this.modeToKeyCodeMap_={};this.modifierToModeMap_={};this.targetElement_=undefined;this.modeBeforeAlternativeModeActivated_=null;this.isInteracting_=false;this.isClick_=false;},ready(){this.buttonsEl_=Polymer.dom(this.root).querySelector('.buttons');this.dragHandleEl_=Polymer.dom(this.root).querySelector('.drag-handle');this.supportedModeMask=MOUSE_SELECTOR_MODE.ALL_MODES;this.dragHandleEl_.addEventListener('mousedown',this.onDragHandleMouseDown_.bind(this));this.buttonsEl_.addEventListener('mouseup',this.onButtonMouseUp_);this.buttonsEl_.addEventListener('mousedown',this.onButtonMouseDown_);this.buttonsEl_.addEventListener('click',this.onButtonPress_.bind(this));},attached(){document.addEventListener('keydown',this.onKeyDown_);document.addEventListener('keyup',this.onKeyUp_);},detached(){document.removeEventListener('keydown',this.onKeyDown_);document.removeEventListener('keyup',this.onKeyUp_);},get targetElement(){return this.targetElement_;},set targetElement(target){if(this.targetElement_){this.targetElement_.removeEventListener('mousedown',this.onMouseDown_);}
-this.targetElement_=target;if(this.targetElement_){this.targetElement_.addEventListener('mousedown',this.onMouseDown_);}},get defaultMode(){return this.defaultMode_;},set defaultMode(defaultMode){this.defaultMode_=defaultMode;},get settingsKey(){return this.settingsKey_;},set settingsKey(settingsKey){this.settingsKey_=settingsKey;if(!this.settingsKey_)return;let mode=tr.b.Settings.get(this.settingsKey_+'.mode',undefined);if(MOUSE_SELECTOR_MODE_INFOS[mode]===undefined){mode=undefined;}
-if((mode&this.supportedModeMask_)===0){mode=undefined;}
-if(!mode)mode=this.defaultMode_;this.mode=mode;const pos=tr.b.Settings.get(this.settingsKey_+'.pos',undefined);if(pos)this.pos=pos;},get supportedModeMask(){return this.supportedModeMask_;},set supportedModeMask(supportedModeMask){if(this.mode&&(supportedModeMask&this.mode)===0){throw new Error('supportedModeMask must include current mode.');}
-function createButtonForMode(mode){return button;}
-this.supportedModeMask_=supportedModeMask;Polymer.dom(this.buttonsEl_).textContent='';for(const modeName in MOUSE_SELECTOR_MODE){if(modeName==='ALL_MODES')continue;const mode=MOUSE_SELECTOR_MODE[modeName];if((this.supportedModeMask_&mode)===0)continue;const button=document.createElement('tr-ui-b-mouse-mode-icon');button.mode=mode;Polymer.dom(button).classList.add('tool-button');Polymer.dom(this.buttonsEl_).appendChild(button);}},getButtonForMode_(mode){for(let i=0;i<this.buttonsEl_.children.length;i++){const buttonEl=this.buttonsEl_.children[i];if(buttonEl.mode===mode){return buttonEl;}}
-return undefined;},get mode(){return this.currentMode_;},set mode(newMode){if(newMode!==undefined){if(typeof newMode!=='number'){throw new Error('Mode must be a number');}
-if((newMode&this.supportedModeMask_)===0){throw new Error('Cannot switch to this mode, it is not supported');}
-if(MOUSE_SELECTOR_MODE_INFOS[newMode]===undefined){throw new Error('Unrecognized mode');}}
-let modeInfo;if(this.currentMode_===newMode)return;if(this.currentMode_){const buttonEl=this.getButtonForMode_(this.currentMode_);if(buttonEl)buttonEl.active=false;if(this.isInteracting_){const mouseEvent=this.createEvent_(MOUSE_SELECTOR_MODE_INFOS[this.mode].eventNames.end);this.dispatchEvent(mouseEvent);}
-modeInfo=MOUSE_SELECTOR_MODE_INFOS[this.currentMode_];tr.b.dispatchSimpleEvent(this,modeInfo.eventNames.exit,true);}
-this.currentMode_=newMode;if(this.currentMode_){const buttonEl=this.getButtonForMode_(this.currentMode_);if(buttonEl)buttonEl.active=true;this.mouseDownPos_.x=this.mousePos_.x;this.mouseDownPos_.y=this.mousePos_.y;modeInfo=MOUSE_SELECTOR_MODE_INFOS[this.currentMode_];if(!this.isInAlternativeMode_){tr.b.dispatchSimpleEvent(this,modeInfo.eventNames.enter,true);}
-if(this.isInteracting_){const mouseEvent=this.createEvent_(MOUSE_SELECTOR_MODE_INFOS[this.mode].eventNames.begin);this.dispatchEvent(mouseEvent);}}
-if(this.settingsKey_&&!this.isInAlternativeMode_){tr.b.Settings.set(this.settingsKey_+'.mode',this.mode);}},setKeyCodeForMode(mode,keyCode){if((mode&this.supportedModeMask_)===0){throw new Error('Mode not supported');}
-this.modeToKeyCodeMap_[mode]=keyCode;if(!this.buttonsEl_)return;const buttonEl=this.getButtonForMode_(mode);if(buttonEl){buttonEl.acceleratorKey=String.fromCharCode(keyCode);}},setCurrentMousePosFromEvent_(e){this.mousePos_.x=e.clientX;this.mousePos_.y=e.clientY;},createEvent_(eventName,sourceEvent){const event=new tr.b.Event(eventName,true);event.clientX=this.mousePos_.x;event.clientY=this.mousePos_.y;event.deltaX=this.mousePos_.x-this.mouseDownPos_.x;event.deltaY=this.mousePos_.y-this.mouseDownPos_.y;event.mouseDownX=this.mouseDownPos_.x;event.mouseDownY=this.mouseDownPos_.y;event.didPreventDefault=false;event.preventDefault=function(){event.didPreventDefault=true;if(sourceEvent){sourceEvent.preventDefault();}};event.stopPropagation=function(){sourceEvent.stopPropagation();};event.stopImmediatePropagation=function(){throw new Error('Not implemented');};return event;},onMouseDown_(e){if(e.button!==0)return;this.setCurrentMousePosFromEvent_(e);const mouseEvent=this.createEvent_(MOUSE_SELECTOR_MODE_INFOS[this.mode].eventNames.begin,e);if(this.mode===MOUSE_SELECTOR_MODE.SELECTION){mouseEvent.appendSelection=isCmdOrCtrlPressed(e);}
-this.dispatchEvent(mouseEvent);this.isInteracting_=true;this.isClick_=true;tr.ui.b.trackMouseMovesUntilMouseUp(this.onMouseMove_,this.onMouseUp_);},onMouseMove_(e){this.setCurrentMousePosFromEvent_(e);const mouseEvent=this.createEvent_(MOUSE_SELECTOR_MODE_INFOS[this.mode].eventNames.update,e);this.dispatchEvent(mouseEvent);if(this.isInteracting_){this.checkIsClick_(e);}},onMouseUp_(e){if(e.button!==0)return;const mouseEvent=this.createEvent_(MOUSE_SELECTOR_MODE_INFOS[this.mode].eventNames.end,e);mouseEvent.isClick=this.isClick_;this.dispatchEvent(mouseEvent);if(this.isClick_&&!mouseEvent.didPreventDefault){this.dispatchClickEvents_(e);}
-this.isInteracting_=false;this.updateAlternativeModeState_(e);},onButtonMouseDown_(e){e.preventDefault();e.stopImmediatePropagation();},onButtonMouseUp_(e){e.preventDefault();e.stopImmediatePropagation();},onButtonPress_(e){this.modeBeforeAlternativeModeActivated_=undefined;this.mode=e.target.mode;e.preventDefault();},onKeyDown_(e){if(e.path[0].tagName==='INPUT')return;if(e.keyCode===' '.charCodeAt(0)){this.spacePressed_=true;}
-this.updateAlternativeModeState_(e);},onKeyUp_(e){if(e.path[0].tagName==='INPUT')return;if(e.keyCode===' '.charCodeAt(0)){this.spacePressed_=false;}
-let didHandleKey=false;for(const[modeStr,keyCode]of Object.entries(this.modeToKeyCodeMap_)){if(e.keyCode===keyCode){this.modeBeforeAlternativeModeActivated_=undefined;const mode=parseInt(modeStr);this.mode=mode;didHandleKey=true;}}
-if(didHandleKey){e.preventDefault();e.stopPropagation();return;}
-this.updateAlternativeModeState_(e);},updateAlternativeModeState_(e){const shiftPressed=e.shiftKey;const spacePressed=this.spacePressed_;const cmdOrCtrlPressed=isCmdOrCtrlPressed(e);const smm=this.supportedModeMask_;let newMode;let isNewModeAnAlternativeMode=false;if(shiftPressed&&(this.modifierToModeMap_[MODIFIER.SHIFT]&smm)!==0){newMode=this.modifierToModeMap_[MODIFIER.SHIFT];isNewModeAnAlternativeMode=true;}else if(spacePressed&&(this.modifierToModeMap_[MODIFIER.SPACE]&smm)!==0){newMode=this.modifierToModeMap_[MODIFIER.SPACE];isNewModeAnAlternativeMode=true;}else if(cmdOrCtrlPressed&&(this.modifierToModeMap_[MODIFIER.CMD_OR_CTRL]&smm)!==0){newMode=this.modifierToModeMap_[MODIFIER.CMD_OR_CTRL];isNewModeAnAlternativeMode=true;}else{if(this.isInAlternativeMode_){newMode=this.modeBeforeAlternativeModeActivated_;isNewModeAnAlternativeMode=false;}else{newMode=undefined;}}
-if(this.mode===newMode||newMode===undefined)return;if(isNewModeAnAlternativeMode){this.modeBeforeAlternativeModeActivated_=this.mode;}
-this.mode=newMode;},get isInAlternativeMode_(){return!!this.modeBeforeAlternativeModeActivated_;},setModifierForAlternateMode(mode,modifier){this.modifierToModeMap_[modifier]=mode;},get pos(){return{x:parseInt(this.style.left),y:parseInt(this.style.top)};},set pos(pos){pos=this.constrainPositionToBounds_(pos);this.style.left=pos.x+'px';this.style.top=pos.y+'px';if(this.settingsKey_){tr.b.Settings.set(this.settingsKey_+'.pos',this.pos);}},constrainPositionToBounds_(pos){const parent=this.offsetParent||document.body;const parentRect=tr.ui.b.windowRectForElement(parent);const top=0;const bottom=parentRect.height-this.offsetHeight;const left=0;const right=parentRect.width-this.offsetWidth;const res={};res.x=Math.max(pos.x,left);res.x=Math.min(res.x,right);res.y=Math.max(pos.y,top);res.y=Math.min(res.y,bottom);return res;},onDragHandleMouseDown_(e){e.preventDefault();e.stopImmediatePropagation();const mouseDownPos={x:e.clientX-this.offsetLeft,y:e.clientY-this.offsetTop};tr.ui.b.trackMouseMovesUntilMouseUp(function(e){const pos={};pos.x=e.clientX-mouseDownPos.x;pos.y=e.clientY-mouseDownPos.y;this.pos=pos;}.bind(this));},checkIsClick_(e){if(!this.isInteracting_||!this.isClick_)return;const deltaX=this.mousePos_.x-this.mouseDownPos_.x;const deltaY=this.mousePos_.y-this.mouseDownPos_.y;const minDist=MIN_MOUSE_SELECTION_DISTANCE;if(deltaX*deltaX+deltaY*deltaY>minDist*minDist){this.isClick_=false;}},dispatchClickEvents_(e){if(!this.isClick_)return;const modeInfo=MOUSE_SELECTOR_MODE_INFOS[MOUSE_SELECTOR_MODE.SELECTION];const eventNames=modeInfo.eventNames;let mouseEvent=this.createEvent_(eventNames.begin);mouseEvent.appendSelection=isCmdOrCtrlPressed(e);this.dispatchEvent(mouseEvent);mouseEvent=this.createEvent_(eventNames.end);this.dispatchEvent(mouseEvent);}});return{MIN_MOUSE_SELECTION_DISTANCE,MODIFIER,};});'use strict';(function(){const DETAILS_SPLIT_REGEX=/^(\S*)\s*([\S\s]*)$/;Polymer({is:'tr-ui-e-chrome-cc-display-item-list-item',created(){Polymer.dom(this).setAttribute('name','');Polymer.dom(this).setAttribute('rawDetails','');Polymer.dom(this).setAttribute('richDetails',undefined);Polymer.dom(this).setAttribute('data_',undefined);},get data(){return this.data_;},set data(data){this.data_=data;if(!data){this.name='DATA MISSING';this.rawDetails='';this.richDetails=undefined;}else if(typeof data==='string'){const match=data.match(DETAILS_SPLIT_REGEX);this.name=match[1];this.rawDetails=match[2];this.richDetails=undefined;}else{this.name=data.name;this.rawDetails='';this.richDetails=data;}},stopPropagation(e){e.stopPropagation();},_computeIf(richDetails){return richDetails&&richDetails.skp64;},_computeHref(richDetails){return'data:application/octet-stream;base64,'+richDetails.skp64;}});})();'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){function Selection(){this.selectionToSetIfClicked=undefined;}
-Selection.prototype={get specicifity(){throw new Error('Not implemented');},get associatedLayerId(){throw new Error('Not implemented');},get associatedRenderPassId(){throw new Error('Not implemented');},get highlightsByLayerId(){return{};},createAnalysis(){throw new Error('Not implemented');},findEquivalent(lthi){throw new Error('Not implemented');}};function RenderPassSelection(renderPass,renderPassId){if(!renderPass||(renderPassId===undefined)){throw new Error('Render pass (with id) is required');}
-this.renderPass_=renderPass;this.renderPassId_=renderPassId;}
-RenderPassSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 1;},get associatedLayerId(){return undefined;},get associatedRenderPassId(){return this.renderPassId_;},get renderPass(){return this.renderPass_;},createAnalysis(){const dataView=document.createElement('tr-ui-a-generic-object-view-with-label');dataView.label='RenderPass '+this.renderPassId_;dataView.object=this.renderPass_.args;return dataView;},get title(){return this.renderPass_.objectInstance.typeName;}};function LayerSelection(layer){if(!layer){throw new Error('Layer is required');}
-this.layer_=layer;}
-LayerSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 1;},get associatedLayerId(){return this.layer_.layerId;},get associatedRenderPassId(){return undefined;},get layer(){return this.layer_;},createAnalysis(){const dataView=document.createElement('tr-ui-a-generic-object-view-with-label');dataView.label='Layer '+this.layer_.layerId;if(this.layer_.usingGpuRasterization){dataView.label+=' (GPU-rasterized)';}
-dataView.object=this.layer_.args;return dataView;},get title(){return this.layer_.objectInstance.typeName;},findEquivalent(lthi){const layer=lthi.activeTree.findLayerWithId(this.layer_.layerId)||lthi.pendingTree.findLayerWithId(this.layer_.layerId);if(!layer)return undefined;return new LayerSelection(layer);}};function TileSelection(tile,opt_data){this.tile_=tile;this.data_=opt_data||{};}
-TileSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 2;},get associatedLayerId(){return this.tile_.layerId;},get highlightsByLayerId(){const highlights={};highlights[this.tile_.layerId]=[{colorKey:this.tile_.objectInstance.typeName,rect:this.tile_.layerRect}];return highlights;},createAnalysis(){const analysis=document.createElement('tr-ui-a-generic-object-view-with-label');analysis.label='Tile '+this.tile_.objectInstance.id+' on layer '+
-this.tile_.layerId;if(this.data_){analysis.object={moreInfo:this.data_,tileArgs:this.tile_.args};}else{analysis.object=this.tile_.args;}
-return analysis;},findEquivalent(lthi){const tileInstance=this.tile_.tileInstance;if(lthi.ts<tileInstance.creationTs||lthi.ts>=tileInstance.deletionTs){return undefined;}
-const tileSnapshot=tileInstance.getSnapshotAt(lthi.ts);if(!tileSnapshot)return undefined;return new TileSelection(tileSnapshot);}};function LayerRectSelection(layer,rectType,rect,opt_data){this.layer_=layer;this.rectType_=rectType;this.rect_=rect;this.data_=opt_data!==undefined?opt_data:rect;}
-LayerRectSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 2;},get associatedLayerId(){return this.layer_.layerId;},get highlightsByLayerId(){const highlights={};highlights[this.layer_.layerId]=[{colorKey:this.rectType_,rect:this.rect_}];return highlights;},createAnalysis(){const analysis=document.createElement('tr-ui-a-generic-object-view-with-label');analysis.label=this.rectType_+' on layer '+this.layer_.layerId;analysis.object=this.data_;return analysis;},findEquivalent(lthi){return undefined;}};function AnimationRectSelection(layer,rect){this.layer_=layer;this.rect_=rect;}
-AnimationRectSelection.prototype={__proto__:Selection.prototype,get specicifity(){return 0;},get associatedLayerId(){return this.layer_.layerId;},createAnalysis(){const analysis=document.createElement('tr-ui-a-generic-object-view-with-label');analysis.label='Animation Bounds of layer '+this.layer_.layerId;analysis.object=this.rect_;return analysis;}};return{Selection,RenderPassSelection,LayerSelection,TileSelection,LayerRectSelection,AnimationRectSelection,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const OPS_TIMING_ITERATIONS=3;const ANNOTATION='Comment';const BEGIN_ANNOTATION='BeginCommentGroup';const END_ANNOTATION='EndCommentGroup';const ANNOTATION_ID='ID: ';const ANNOTATION_CLASS='CLASS: ';const ANNOTATION_TAG='TAG: ';const constants=tr.e.cc.constants;const PictureOpsListView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-list-view');PictureOpsListView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexDirection='column';this.style.borderTop='1px solid grey';this.style.display='flex';this.opsList_=new tr.ui.b.ListView();this.opsList_.style.flexGrow=1;this.opsList_.style.flexShrink=1;this.opsList_.style.flexBasis='auto';this.opsList_.style.overflow='auto';Polymer.dom(this).appendChild(this.opsList_);this.selectedOp_=undefined;this.selectedOpIndex_=undefined;this.opsList_.addEventListener('selection-changed',this.onSelectionChanged_.bind(this));this.picture_=undefined;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.updateContents_();},updateContents_(){this.opsList_.clear();if(!this.picture_)return;let ops=this.picture_.getOps();if(!ops)return;ops=this.picture_.tagOpsWithTimings(ops);ops=this.opsTaggedWithAnnotations_(ops);for(let i=0;i<ops.length;i++){const op=ops[i];const item=document.createElement('div');item.opIndex=op.opIndex;Polymer.dom(item).textContent=i+') '+op.cmd_string;if(op.elementInfo.tag||op.elementInfo.id||op.elementInfo.class){const elementInfo=document.createElement('span');Polymer.dom(elementInfo).classList.add('elementInfo');elementInfo.style.color='purple';elementInfo.style.fontSize='small';elementInfo.style.fontWeight='bold';elementInfo.style.color='#777';const tag=op.elementInfo.tag?op.elementInfo.tag:'unknown';const id=op.elementInfo.id?'id='+op.elementInfo.id:undefined;const className=op.elementInfo.class?'class='+
-op.elementInfo.class:undefined;Polymer.dom(elementInfo).textContent='<'+tag+(id?' ':'')+
-(id?id:'')+(className?' ':'')+
-(className?className:'')+'>';Polymer.dom(item).appendChild(elementInfo);}
-if(op.info.length>0){const infoItem=document.createElement('div');Polymer.dom(infoItem).textContent=JSON.stringify(op.info);infoItem.style.fontSize='x-small';infoItem.style.color='#777';Polymer.dom(item).appendChild(infoItem);}
-if(op.cmd_time&&op.cmd_time>=0.0001){const time=document.createElement('span');Polymer.dom(time).classList.add('time');const rounded=op.cmd_time.toFixed(4);Polymer.dom(time).textContent='('+rounded+'ms)';time.style.fontSize='x-small';time.style.color='rgb(136, 0, 0)';Polymer.dom(item).appendChild(time);}
-item.style.borderBottom='1px solid #555';item.style.fontSize='small';item.style.fontWeight='bold';item.style.paddingBottom='5px';item.style.paddingLeft='5px';item.style.cursor='pointer';for(const child of item.children){child.style.fontWeight='normal';child.style.marginLeft='1em';child.style.maxWidth='300px';}
-Polymer.dom(this.opsList_).appendChild(item);}},onSelectionChanged_(e){let beforeSelectedOp=true;if(this.opsList_.selectedElement===this.selectedOp_){this.opsList_.selectedElement=undefined;beforeSelectedOp=false;this.selectedOpIndex_=undefined;}
-this.selectedOp_=this.opsList_.selectedElement;const ops=this.opsList_.children;for(let i=0;i<ops.length;i++){const op=ops[i];if(op===this.selectedOp_){beforeSelectedOp=false;this.selectedOpIndex_=op.opIndex;}else if(beforeSelectedOp){Polymer.dom(op).setAttribute('beforeSelection','beforeSelection');op.style.backgroundColor='rgb(103, 199, 165)';}else{Polymer.dom(op).removeAttribute('beforeSelection');op.style.backgroundColor='';}}
-tr.b.dispatchSimpleEvent(this,'selection-changed',false);},get numOps(){return this.opsList_.children.length;},get selectedOpIndex(){return this.selectedOpIndex_;},set selectedOpIndex(s){this.selectedOpIndex_=s;if(s===undefined){this.opsList_.selectedElement=this.selectedOp_;this.onSelectionChanged_();}else{if(s<0)throw new Error('Invalid index');if(s>=this.numOps)throw new Error('Invalid index');this.opsList_.selectedElement=this.opsList_.getElementByIndex(s+1);tr.ui.b.scrollIntoViewIfNeeded(this.opsList_.selectedElement);}},opsTaggedWithAnnotations_(ops){const annotationGroups=[];const opsWithoutAnnotations=[];for(let opIndex=0;opIndex<ops.length;opIndex++){const op=ops[opIndex];op.opIndex=opIndex;switch(op.cmd_string){case BEGIN_ANNOTATION:annotationGroups.push([]);break;case END_ANNOTATION:annotationGroups.pop();break;case ANNOTATION:annotationGroups[annotationGroups.length-1].push(op);break;default:{const annotations=[];let elementInfo={};annotationGroups.forEach(function(annotationGroup){elementInfo={};annotationGroup.forEach(function(annotation){annotation.info.forEach(function(info){if(info.includes(ANNOTATION_TAG)){elementInfo.tag=info.substring(info.indexOf(ANNOTATION_TAG)+
-ANNOTATION_TAG.length).toLowerCase();}else if(info.includes(ANNOTATION_ID)){elementInfo.id=info.substring(info.indexOf(ANNOTATION_ID)+
-ANNOTATION_ID.length);}else if(info.includes(ANNOTATION_CLASS)){elementInfo.class=info.substring(info.indexOf(ANNOTATION_CLASS)+
-ANNOTATION_CLASS.length);}
-annotations.push(info);});});});op.annotations=annotations;op.elementInfo=elementInfo;opsWithoutAnnotations.push(op);}}}
-return opsWithoutAnnotations;}};return{PictureOpsListView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const THIS_DOC=document.currentScript.ownerDocument;const DisplayItemDebugger=tr.ui.b.define('tr-ui-e-chrome-cc-display-item-debugger');DisplayItemDebugger.prototype={__proto__:HTMLDivElement.prototype,decorate(){const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-display-item-debugger-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.display='flex';this.pictureAsImageData_=undefined;this.zoomScaleValue_=1;this.sizeInfo_=Polymer.dom(this).querySelector('.size');this.rasterArea_=Polymer.dom(this).querySelector('raster-area');this.rasterArea_.style.flexGrow=1;this.rasterArea_.style.flexShrink=1;this.rasterArea_.style.flexBasis='auto';this.rasterArea_.style.backgroundColor='#ddd';this.rasterArea_.style.minHeight='200px';this.rasterArea_.style.minWidth='200px';this.rasterArea_.style.overflowY='auto';this.rasterArea_.style.paddingLeft='5px';this.rasterCanvas_=Polymer.dom(this.rasterArea_).querySelector('canvas');this.rasterCtx_=this.rasterCanvas_.getContext('2d');this.trackMouse_();this.displayItemInfo_=Polymer.dom(this).querySelector('display-item-info');this.displayItemInfo_.addEventListener('click',this.onDisplayItemInfoClick_.bind(this),false);this.displayItemListView_=new tr.ui.b.ListView();this.displayItemListView_.addEventListener('selection-changed',this.onDisplayItemListSelection_.bind(this));Polymer.dom(this.displayItemInfo_).appendChild(this.displayItemListView_);this.displayListFilename_=Polymer.dom(this).querySelector('.dlfilename');this.displayListExportButton_=Polymer.dom(this).querySelector('.dlexport');this.displayListExportButton_.addEventListener('click',this.onExportDisplayListClicked_.bind(this));this.skpFilename_=Polymer.dom(this).querySelector('.skpfilename');this.skpExportButton_=Polymer.dom(this).querySelector('.skpexport');this.skpExportButton_.addEventListener('click',this.onExportSkPictureClicked_.bind(this));const leftPanel=Polymer.dom(this).querySelector('left-panel');leftPanel.style.display='flex';leftPanel.style.flexDirection='column';leftPanel.style.minWidth='300px';leftPanel.style.overflowY='auto';leftPanel.children[0].paddingTop='2px';leftPanel.children[0].flexGrow=1;leftPanel.children[0].flexShrink=1;leftPanel.children[0].flexBasis='auto';leftPanel.children[0].children[0].style.borderBottom='1px solid #555';const leftPanelTitle=leftPanel.querySelector('.title');leftPanelTitle.style.fontWeight='bold';leftPanelTitle.style.marginLeft='5px';leftPanelTitle.style.marginright='5px';for(const div of leftPanel.querySelectorAll('.export')){div.style.margin='5px';}
-const middleDragHandle=document.createElement('tr-ui-b-drag-handle');middleDragHandle.style.flexGrow=0;middleDragHandle.style.flexShrink=0;middleDragHandle.style.flexBasis='auto';middleDragHandle.horizontal=false;middleDragHandle.target=leftPanel;const rightPanel=Polymer.dom(this).querySelector('right-panel');rightPanel.style.display='flex';rightPanel.style.flexGrow=1;rightPanel.style.flexShrink=1;rightPanel.style.flexBasis='auto';this.infoBar_=document.createElement('tr-ui-b-info-bar');Polymer.dom(this.rasterArea_).insertBefore(this.infoBar_,this.rasterCanvas_);Polymer.dom(this).insertBefore(middleDragHandle,rightPanel);this.picture_=undefined;this.pictureOpsListView_=new tr.ui.e.chrome.cc.PictureOpsListView();this.pictureOpsListView_.style.overflowY='auto';Polymer.dom(rightPanel).insertBefore(this.pictureOpsListView_,this.rasterArea_);this.pictureOpsListDragHandle_=document.createElement('tr-ui-b-drag-handle');this.pictureOpsListDragHandle_.horizontal=false;this.pictureOpsListDragHandle_.target=this.pictureOpsListView_;Polymer.dom(rightPanel).insertBefore(this.pictureOpsListDragHandle_,this.rasterArea_);},get picture(){return this.picture_;},set displayItemList(displayItemList){this.displayItemList_=displayItemList;this.picture=this.displayItemList_;this.displayItemListView_.clear();this.displayItemList_.items.forEach(function(item){const listItem=document.createElement('tr-ui-e-chrome-cc-display-item-list-item');listItem.data=item;Polymer.dom(this.displayItemListView_).appendChild(listItem);}.bind(this));},set picture(picture){this.picture_=picture;const showOpsList=picture&&picture!==this.displayItemList_;this.updateDrawOpsList_(showOpsList);if(picture){const size=this.getRasterCanvasSize_();this.rasterCanvas_.width=size.width;this.rasterCanvas_.height=size.height;}
-const bounds=this.rasterArea_.getBoundingClientRect();const selectorBounds=this.mouseModeSelector_.getBoundingClientRect();this.mouseModeSelector_.pos={x:(bounds.right-selectorBounds.width-10),y:bounds.top};this.rasterize_();this.scheduleUpdateContents_();},getRasterCanvasSize_(){const style=window.getComputedStyle(this.rasterArea_);let width=parseInt(style.width);let height=parseInt(style.height);if(this.picture_){width=Math.max(width,this.picture_.layerRect.width);height=Math.max(height,this.picture_.layerRect.height);}
-return{width,height};},scheduleUpdateContents_(){if(this.updateContentsPending_)return;this.updateContentsPending_=true;tr.b.requestAnimationFrameInThisFrameIfPossible(this.updateContents_.bind(this));},updateContents_(){this.updateContentsPending_=false;if(this.picture_){Polymer.dom(this.sizeInfo_).textContent='('+
-this.picture_.layerRect.width+' x '+
-this.picture_.layerRect.height+')';}
-if(!this.pictureAsImageData_)return;this.infoBar_.visible=false;this.infoBar_.removeAllButtons();if(this.pictureAsImageData_.error){this.infoBar_.message='Cannot rasterize...';this.infoBar_.addButton('More info...',function(e){const overlay=new tr.ui.b.Overlay();Polymer.dom(overlay).textContent=this.pictureAsImageData_.error;overlay.visible=true;e.stopPropagation();return false;}.bind(this));this.infoBar_.visible=true;}
-this.drawPicture_();},drawPicture_(){const size=this.getRasterCanvasSize_();if(size.width!==this.rasterCanvas_.width){this.rasterCanvas_.width=size.width;}
-if(size.height!==this.rasterCanvas_.height){this.rasterCanvas_.height=size.height;}
-this.rasterCtx_.clearRect(0,0,size.width,size.height);if(!this.picture_||!this.pictureAsImageData_.imageData)return;const imgCanvas=this.pictureAsImageData_.asCanvas();const w=imgCanvas.width;const h=imgCanvas.height;this.rasterCtx_.drawImage(imgCanvas,0,0,w,h,0,0,w*this.zoomScaleValue_,h*this.zoomScaleValue_);},rasterize_(){if(this.picture_){this.picture_.rasterize({showOverdraw:false},this.onRasterComplete_.bind(this));}},onRasterComplete_(pictureAsImageData){this.pictureAsImageData_=pictureAsImageData;this.scheduleUpdateContents_();},onDisplayItemListSelection_(e){const selected=this.displayItemListView_.selectedElement;if(!selected){this.picture=this.displayItemList_;return;}
-const index=Array.prototype.indexOf.call(this.displayItemListView_.children,selected);const displayItem=this.displayItemList_.items[index];if(displayItem&&displayItem.skp64){this.picture=new tr.e.cc.Picture(displayItem.skp64,this.displayItemList_.layerRect);}else{this.picture=undefined;}},onDisplayItemInfoClick_(e){if(e&&e.target===this.displayItemInfo_){this.displayItemListView_.selectedElement=undefined;}},updateDrawOpsList_(showOpsList){if(showOpsList){this.pictureOpsListView_.picture=this.picture_;if(this.pictureOpsListView_.numOps>0){this.pictureOpsListView_.style.display='block';this.pictureOpsListDragHandle_.style.display='block';}}else{this.pictureOpsListView_.style.display='none';this.pictureOpsListDragHandle_.style.display='none';}},trackMouse_(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this.rasterArea_;Polymer.dom(this.rasterArea_).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.supportedModeMask=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.mode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.defaultMode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.settingsKey='pictureDebugger.mouseModeSelector';this.mouseModeSelector_.addEventListener('beginzoom',this.onBeginZoom_.bind(this));this.mouseModeSelector_.addEventListener('updatezoom',this.onUpdateZoom_.bind(this));this.mouseModeSelector_.addEventListener('endzoom',this.onEndZoom_.bind(this));},onBeginZoom_(e){this.isZooming_=true;this.lastMouseViewPos_=this.extractRelativeMousePosition_(e);e.preventDefault();},onUpdateZoom_(e){if(!this.isZooming_)return;const currentMouseViewPos=this.extractRelativeMousePosition_(e);this.zoomScaleValue_+=((this.lastMouseViewPos_.y-currentMouseViewPos.y)*0.001);this.zoomScaleValue_=Math.max(this.zoomScaleValue_,0.1);this.drawPicture_();this.lastMouseViewPos_=currentMouseViewPos;},onEndZoom_(e){this.lastMouseViewPos_=undefined;this.isZooming_=false;e.preventDefault();},extractRelativeMousePosition_(e){return{x:e.clientX-this.rasterArea_.offsetLeft,y:e.clientY-this.rasterArea_.offsetTop};},saveFile_(filename,rawData){if(!rawData)return;const length=rawData.length;const arrayBuffer=new ArrayBuffer(length);const uint8Array=new Uint8Array(arrayBuffer);for(let c=0;c<length;c++){uint8Array[c]=rawData.charCodeAt(c);}
-const blob=new Blob([uint8Array],{type:'application/octet-binary'});const blobUrl=window.URL.createObjectURL(blob);const link=document.createElementNS('http://www.w3.org/1999/xhtml','a');link.href=blobUrl;link.download=filename;const event=document.createEvent('MouseEvents');event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);link.dispatchEvent(event);},onExportDisplayListClicked_(){const rawData=JSON.stringify(this.displayItemList_.items);this.saveFile_(this.displayListFilename_.value,rawData);},onExportSkPictureClicked_(){const rawData=tr.b.Base64.atob(this.picture_.getBase64SkpData());this.saveFile_(this.skpFilename_.value,rawData);}};return{DisplayItemDebugger,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const DisplayItemSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-display-item-list-view',tr.ui.analysis.ObjectSnapshotView);DisplayItemSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){this.style.display='flex';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.displayItemDebugger_=new tr.ui.e.chrome.cc.DisplayItemDebugger();Polymer.dom(this).appendChild(this.displayItemDebugger_);},updateContents(){if(this.objectSnapshot_&&this.displayItemDebugger_){this.displayItemDebugger_.displayItemList=this.objectSnapshot_;}}};tr.ui.analysis.ObjectSnapshotView.register(DisplayItemSnapshotView,{typeNames:['cc::DisplayItemList'],showInstances:false});return{DisplayItemSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const constants=tr.e.cc.constants;const RENDER_PASS_QUADS=Math.max(constants.ACTIVE_TREE,constants.PENDING_TREE)+1;const LayerPicker=tr.ui.b.define('tr-ui-e-chrome-cc-layer-picker');LayerPicker.prototype={__proto__:HTMLUnknownElement.prototype,decorate(){this.lthi_=undefined;this.controls_=document.createElement('top-controls');this.renderPassQuads_=false;this.style.display='flex';this.style.flexDirection='column';this.controls_.style.flexGrow=0;this.controls_.style.flexShrink=0;this.controls_.style.flexBasis='auto';this.controls_.style.backgroundImage='-webkit-gradient(linear, 0 0, 100% 0, from(#E5E5E5), to(#D1D1D1))';this.controls_.style.borderBottom='1px solid #8e8e8e';this.controls_.style.borderTop='1px solid white';this.controls_.style.display='inline';this.controls_.style.fontSize='14px';this.controls_.style.paddingLeft='2px';this.itemList_=new tr.ui.b.ListView();this.itemList_.style.flexGrow=1;this.itemList_.style.flexShrink=1;this.itemList_.style.flexBasis='auto';this.itemList_.style.fontFamily='monospace';this.itemList_.style.overflow='auto';Polymer.dom(this).appendChild(this.controls_);Polymer.dom(this).appendChild(this.itemList_);this.itemList_.addEventListener('selection-changed',this.onItemSelectionChanged_.bind(this));Polymer.dom(this.controls_).appendChild(tr.ui.b.createSelector(this,'whichTree','layerPicker.whichTree',constants.ACTIVE_TREE,[{label:'Active tree',value:constants.ACTIVE_TREE},{label:'Pending tree',value:constants.PENDING_TREE},{label:'Render pass quads',value:RENDER_PASS_QUADS}]));this.showPureTransformLayers_=false;const showPureTransformLayers=tr.ui.b.createCheckBox(this,'showPureTransformLayers','layerPicker.showPureTransformLayers',false,'Transform layers');Polymer.dom(showPureTransformLayers).classList.add('show-transform-layers');showPureTransformLayers.title='When checked, pure transform layers are shown';Polymer.dom(this.controls_).appendChild(showPureTransformLayers);},get lthiSnapshot(){return this.lthiSnapshot_;},set lthiSnapshot(lthiSnapshot){this.lthiSnapshot_=lthiSnapshot;this.updateContents_();},get whichTree(){return this.renderPassQuads_?constants.ACTIVE_TREE:this.whichTree_;},set whichTree(whichTree){this.whichTree_=whichTree;this.renderPassQuads_=(whichTree===RENDER_PASS_QUADS);this.updateContents_();tr.b.dispatchSimpleEvent(this,'selection-change',false);},get layerTreeImpl(){if(this.lthiSnapshot===undefined)return undefined;return this.lthiSnapshot.getTree(this.whichTree);},get isRenderPassQuads(){return this.renderPassQuads_;},get showPureTransformLayers(){return this.showPureTransformLayers_;},set showPureTransformLayers(show){if(this.showPureTransformLayers_===show)return;this.showPureTransformLayers_=show;this.updateContents_();},getRenderPassInfos_(){if(!this.lthiSnapshot_)return[];const renderPassInfo=[];if(!this.lthiSnapshot_.args.frame||!this.lthiSnapshot_.args.frame.renderPasses){return renderPassInfo;}
-const renderPasses=this.lthiSnapshot_.args.frame.renderPasses;for(let i=0;i<renderPasses.length;++i){const info={renderPass:renderPasses[i],depth:0,id:i,name:'cc::RenderPass'};renderPassInfo.push(info);}
-return renderPassInfo;},getLayerInfos_(){if(!this.lthiSnapshot_)return[];const tree=this.lthiSnapshot_.getTree(this.whichTree_);if(!tree)return[];const layerInfos=[];const showPureTransformLayers=this.showPureTransformLayers_;function isPureTransformLayer(layer){if(layer.args.compositingReasons&&layer.args.compositingReasons.length!==1&&layer.args.compositingReasons[0]!=='No reasons given'){return false;}
-if(layer.args.drawsContent)return false;return true;}
-const visitedLayers={};function visitLayer(layer,depth,isMask,isReplica){if(visitedLayers[layer.layerId])return;visitedLayers[layer.layerId]=true;const info={layer,depth};if(layer.args.drawsContent){info.name=layer.objectInstance.name;}else{info.name='cc::LayerImpl';}
-if(layer.usingGpuRasterization){info.name+=' (G)';}
-info.isMaskLayer=isMask;info.replicaLayer=isReplica;if(showPureTransformLayers||!isPureTransformLayer(layer)){layerInfos.push(info);}}
-tree.iterLayers(visitLayer);return layerInfos;},updateContents_(){if(this.renderPassQuads_){this.updateRenderPassContents_();}else{this.updateLayerContents_();}},updateRenderPassContents_(){this.itemList_.clear();let selectedRenderPassId;if(this.selection_&&this.selection_.associatedRenderPassId){selectedRenderPassId=this.selection_.associatedRenderPassId;}
-const renderPassInfos=this.getRenderPassInfos_();renderPassInfos.forEach(function(renderPassInfo){const renderPass=renderPassInfo.renderPass;const id=renderPassInfo.id;const item=this.createElementWithDepth_(renderPassInfo.depth);const labelEl=Polymer.dom(item).appendChild(tr.ui.b.createSpan());Polymer.dom(labelEl).textContent=renderPassInfo.name+' '+id;item.renderPass=renderPass;item.renderPassId=id;Polymer.dom(this.itemList_).appendChild(item);if(id===selectedRenderPassId){renderPass.selectionState=tr.model.SelectionState.SELECTED;}},this);},updateLayerContents_(){this.changingItemSelection_=true;try{this.itemList_.clear();let selectedLayerId;if(this.selection_&&this.selection_.associatedLayerId){selectedLayerId=this.selection_.associatedLayerId;}
-const layerInfos=this.getLayerInfos_();layerInfos.forEach(function(layerInfo){const layer=layerInfo.layer;const id=layer.layerId;const item=this.createElementWithDepth_(layerInfo.depth);const labelEl=Polymer.dom(item).appendChild(tr.ui.b.createSpan());Polymer.dom(labelEl).textContent=layerInfo.name+' '+id;const notesEl=Polymer.dom(item).appendChild(tr.ui.b.createSpan());if(layerInfo.isMaskLayer){Polymer.dom(notesEl).textContent+='(mask)';}
-if(layerInfo.isReplicaLayer){Polymer.dom(notesEl).textContent+='(replica)';}
-if((layer.gpuMemoryUsageInBytes!==undefined)&&(layer.gpuMemoryUsageInBytes>0)){const gpuUsageStr=tr.b.Unit.byName.sizeInBytes.format(layer.gpuMemoryUsageInBytes);Polymer.dom(notesEl).textContent+=' ('+gpuUsageStr+' MiB)';}
-item.layer=layer;Polymer.dom(this.itemList_).appendChild(item);if(layer.layerId===selectedLayerId){layer.selectionState=tr.model.SelectionState.SELECTED;item.selected=true;}},this);}finally{this.changingItemSelection_=false;}},createElementWithDepth_(depth){const item=document.createElement('div');const indentEl=Polymer.dom(item).appendChild(tr.ui.b.createSpan());indentEl.style.whiteSpace='pre';for(let i=0;i<depth;i++){Polymer.dom(indentEl).textContent=Polymer.dom(indentEl).textContent+' ';}
-return item;},onItemSelectionChanged_(e){if(this.changingItemSelection_)return;if(this.renderPassQuads_){this.onRenderPassSelected_(e);}else{this.onLayerSelected_(e);}
-tr.b.dispatchSimpleEvent(this,'selection-change',false);},onRenderPassSelected_(e){let selectedRenderPass;let selectedRenderPassId;if(this.itemList_.selectedElement){selectedRenderPass=this.itemList_.selectedElement.renderPass;selectedRenderPassId=this.itemList_.selectedElement.renderPassId;}
-if(selectedRenderPass){this.selection_=new tr.ui.e.chrome.cc.RenderPassSelection(selectedRenderPass,selectedRenderPassId);}else{this.selection_=undefined;}},onLayerSelected_(e){let selectedLayer;if(this.itemList_.selectedElement){selectedLayer=this.itemList_.selectedElement.layer;}
-if(selectedLayer){this.selection_=new tr.ui.e.chrome.cc.LayerSelection(selectedLayer);}else{this.selection_=undefined;}},get selection(){return this.selection_;},set selection(selection){if(this.selection_===selection)return;this.selection_=selection;this.updateContents_();}};return{LayerPicker,};});'use strict';tr.exportTo('tr.e.cc',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function RenderPassSnapshot(){ObjectSnapshot.apply(this,arguments);}
-RenderPassSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){tr.e.cc.preInitializeObject(this);},initialize(){tr.e.cc.moveRequiredFieldsFromArgsToToplevel(this,['quadList']);}};ObjectSnapshot.subTypes.register(RenderPassSnapshot,{typeName:'cc::RenderPass'});return{RenderPassSnapshot,};});'use strict';tr.exportTo('tr.ui.b',function(){const deg2rad=tr.b.math.deg2rad;const constants={DEFAULT_SCALE:0.5,DEFAULT_EYE_DISTANCE:10000,MINIMUM_DISTANCE:1000,MAXIMUM_DISTANCE:100000,FOV:15,RESCALE_TIMEOUT_MS:200,MAXIMUM_TILT:80,SETTINGS_NAMESPACE:'tr.ui_camera'};const Camera=tr.ui.b.define('camera');Camera.prototype={__proto__:HTMLUnknownElement.prototype,decorate(eventSource){this.eventSource_=eventSource;this.eventSource_.addEventListener('beginpan',this.onPanBegin_.bind(this));this.eventSource_.addEventListener('updatepan',this.onPanUpdate_.bind(this));this.eventSource_.addEventListener('endpan',this.onPanEnd_.bind(this));this.eventSource_.addEventListener('beginzoom',this.onZoomBegin_.bind(this));this.eventSource_.addEventListener('updatezoom',this.onZoomUpdate_.bind(this));this.eventSource_.addEventListener('endzoom',this.onZoomEnd_.bind(this));this.eventSource_.addEventListener('beginrotate',this.onRotateBegin_.bind(this));this.eventSource_.addEventListener('updaterotate',this.onRotateUpdate_.bind(this));this.eventSource_.addEventListener('endrotate',this.onRotateEnd_.bind(this));this.eye_=[0,0,constants.DEFAULT_EYE_DISTANCE];this.gazeTarget_=[0,0,0];this.rotation_=[0,0];this.pixelRatio_=window.devicePixelRatio||1;},get modelViewMatrix(){const mvMatrix=mat4.create();mat4.lookAt(mvMatrix,this.eye_,this.gazeTarget_,[0,1,0]);return mvMatrix;},get projectionMatrix(){const rect=tr.ui.b.windowRectForElement(this.canvas_).scaleSize(this.pixelRatio_);const aspectRatio=rect.width/rect.height;const matrix=mat4.create();mat4.perspective(matrix,deg2rad(constants.FOV),aspectRatio,1,100000);return matrix;},set canvas(c){this.canvas_=c;},set deviceRect(rect){this.deviceRect_=rect;},get stackingDistanceDampening(){const gazeVector=[this.gazeTarget_[0]-this.eye_[0],this.gazeTarget_[1]-this.eye_[1],this.gazeTarget_[2]-this.eye_[2]];vec3.normalize(gazeVector,gazeVector);return 1+gazeVector[2];},loadCameraFromSettings(settings){this.eye_=settings.get('eye',this.eye_,constants.SETTINGS_NAMESPACE);this.gazeTarget_=settings.get('gaze_target',this.gazeTarget_,constants.SETTINGS_NAMESPACE);this.rotation_=settings.get('rotation',this.rotation_,constants.SETTINGS_NAMESPACE);this.dispatchRenderEvent_();},saveCameraToSettings(settings){settings.set('eye',this.eye_,constants.SETTINGS_NAMESPACE);settings.set('gaze_target',this.gazeTarget_,constants.SETTINGS_NAMESPACE);settings.set('rotation',this.rotation_,constants.SETTINGS_NAMESPACE);},resetCamera(){this.eye_=[0,0,constants.DEFAULT_EYE_DISTANCE];this.gazeTarget_=[0,0,0];this.rotation_=[0,0];const settings=tr.b.SessionSettings();const keys=settings.keys(constants.SETTINGS_NAMESPACE);if(keys.length!==0){this.loadCameraFromSettings(settings);return;}
-if(this.deviceRect_){const rect=tr.ui.b.windowRectForElement(this.canvas_).scaleSize(this.pixelRatio_);this.eye_[0]=this.deviceRect_.width/2;this.eye_[1]=this.deviceRect_.height/2;this.gazeTarget_[0]=this.deviceRect_.width/2;this.gazeTarget_[1]=this.deviceRect_.height/2;}
-this.saveCameraToSettings(settings);this.dispatchRenderEvent_();},updatePanByDelta(delta){const rect=tr.ui.b.windowRectForElement(this.canvas_).scaleSize(this.pixelRatio_);const eyeVector=[this.eye_[0]-this.gazeTarget_[0],this.eye_[1]-this.gazeTarget_[1],this.eye_[2]-this.gazeTarget_[2]];const length=vec3.length(eyeVector);vec3.normalize(eyeVector,eyeVector);const halfFov=constants.FOV/2;const multiplier=2.0*length*Math.tan(deg2rad(halfFov))/rect.height;const up=[0,1,0];const rotMatrix=mat4.create();mat4.rotate(rotMatrix,rotMatrix,deg2rad(this.rotation_[1]),[0,1,0]);mat4.rotate(rotMatrix,rotMatrix,deg2rad(this.rotation_[0]),[1,0,0]);vec3.transformMat4(up,up,rotMatrix);const right=[0,0,0];vec3.cross(right,eyeVector,up);vec3.normalize(right,right);for(let i=0;i<3;++i){this.gazeTarget_[i]+=delta[0]*multiplier*right[i]-delta[1]*multiplier*up[i];this.eye_[i]=this.gazeTarget_[i]+length*eyeVector[i];}
-if(Math.abs(this.gazeTarget_[2])>1e-6){const gazeVector=[-eyeVector[0],-eyeVector[1],-eyeVector[2]];const newLength=tr.b.math.clamp(-this.eye_[2]/gazeVector[2],constants.MINIMUM_DISTANCE,constants.MAXIMUM_DISTANCE);for(let i=0;i<3;++i){this.gazeTarget_[i]=this.eye_[i]+newLength*gazeVector[i];}}
-this.saveCameraToSettings(tr.b.SessionSettings());this.dispatchRenderEvent_();},updateZoomByDelta(delta){let deltaY=delta[1];deltaY=tr.b.math.clamp(deltaY,-50,50);let scale=1.0-deltaY/100.0;const eyeVector=[0,0,0];vec3.subtract(eyeVector,this.eye_,this.gazeTarget_);const length=vec3.length(eyeVector);if(length*scale<constants.MINIMUM_DISTANCE){scale=constants.MINIMUM_DISTANCE/length;}else if(length*scale>constants.MAXIMUM_DISTANCE){scale=constants.MAXIMUM_DISTANCE/length;}
-vec3.scale(eyeVector,eyeVector,scale);vec3.add(this.eye_,this.gazeTarget_,eyeVector);this.saveCameraToSettings(tr.b.SessionSettings());this.dispatchRenderEvent_();},updateRotateByDelta(delta){delta[0]*=0.5;delta[1]*=0.5;if(Math.abs(this.rotation_[0]+delta[1])>constants.MAXIMUM_TILT){return;}
-if(Math.abs(this.rotation_[1]-delta[0])>constants.MAXIMUM_TILT){return;}
-const eyeVector=[0,0,0,0];vec3.subtract(eyeVector,this.eye_,this.gazeTarget_);const rotMatrix=mat4.create();mat4.rotate(rotMatrix,rotMatrix,-deg2rad(this.rotation_[0]),[1,0,0]);mat4.rotate(rotMatrix,rotMatrix,-deg2rad(this.rotation_[1]),[0,1,0]);vec4.transformMat4(eyeVector,eyeVector,rotMatrix);this.rotation_[0]+=delta[1];this.rotation_[1]-=delta[0];mat4.identity(rotMatrix);mat4.rotate(rotMatrix,rotMatrix,deg2rad(this.rotation_[1]),[0,1,0]);mat4.rotate(rotMatrix,rotMatrix,deg2rad(this.rotation_[0]),[1,0,0]);vec4.transformMat4(eyeVector,eyeVector,rotMatrix);vec3.add(this.eye_,this.gazeTarget_,eyeVector);this.saveCameraToSettings(tr.b.SessionSettings());this.dispatchRenderEvent_();},onPanBegin_(e){this.panning_=true;this.lastMousePosition_=this.getMousePosition_(e);},onPanUpdate_(e){if(!this.panning_)return;const delta=this.getMouseDelta_(e,this.lastMousePosition_);this.lastMousePosition_=this.getMousePosition_(e);this.updatePanByDelta(delta);},onPanEnd_(e){this.panning_=false;},onZoomBegin_(e){this.zooming_=true;const p=this.getMousePosition_(e);this.lastMousePosition_=p;this.zoomPoint_=p;},onZoomUpdate_(e){if(!this.zooming_)return;const delta=this.getMouseDelta_(e,this.lastMousePosition_);this.lastMousePosition_=this.getMousePosition_(e);this.updateZoomByDelta(delta);},onZoomEnd_(e){this.zooming_=false;this.zoomPoint_=undefined;},onRotateBegin_(e){this.rotating_=true;this.lastMousePosition_=this.getMousePosition_(e);},onRotateUpdate_(e){if(!this.rotating_)return;const delta=this.getMouseDelta_(e,this.lastMousePosition_);this.lastMousePosition_=this.getMousePosition_(e);this.updateRotateByDelta(delta);},onRotateEnd_(e){this.rotating_=false;},getMousePosition_(e){const rect=tr.ui.b.windowRectForElement(this.canvas_);return[(e.clientX-rect.x)*this.pixelRatio_,(e.clientY-rect.y)*this.pixelRatio_];},getMouseDelta_(e,p){const newP=this.getMousePosition_(e);return[newP[0]-p[0],newP[1]-p[1]];},dispatchRenderEvent_(){tr.b.dispatchSimpleEvent(this,'renderrequired',false,false);}};return{Camera,};});'use strict';tr.exportTo('tr.ui.b',function(){const THIS_DOC=document.currentScript.ownerDocument;const constants={};constants.IMAGE_LOAD_RETRY_TIME_MS=500;constants.SUBDIVISION_MINIMUM=1;constants.SUBDIVISION_RECURSION_DEPTH=3;constants.SUBDIVISION_DEPTH_THRESHOLD=100;constants.FAR_PLANE_DISTANCE=10000;function drawTexturedTriangle(ctx,img,p0,p1,p2,t0,t1,t2){const tmpP0=[p0[0],p0[1]];const tmpP1=[p1[0],p1[1]];const tmpP2=[p2[0],p2[1]];const tmpT0=[t0[0],t0[1]];const tmpT1=[t1[0],t1[1]];const tmpT2=[t2[0],t2[1]];ctx.beginPath();ctx.moveTo(tmpP0[0],tmpP0[1]);ctx.lineTo(tmpP1[0],tmpP1[1]);ctx.lineTo(tmpP2[0],tmpP2[1]);ctx.closePath();tmpP1[0]-=tmpP0[0];tmpP1[1]-=tmpP0[1];tmpP2[0]-=tmpP0[0];tmpP2[1]-=tmpP0[1];tmpT1[0]-=tmpT0[0];tmpT1[1]-=tmpT0[1];tmpT2[0]-=tmpT0[0];tmpT2[1]-=tmpT0[1];const det=1/(tmpT1[0]*tmpT2[1]-tmpT2[0]*tmpT1[1]);const a=(tmpT2[1]*tmpP1[0]-tmpT1[1]*tmpP2[0])*det;const b=(tmpT2[1]*tmpP1[1]-tmpT1[1]*tmpP2[1])*det;const c=(tmpT1[0]*tmpP2[0]-tmpT2[0]*tmpP1[0])*det;const d=(tmpT1[0]*tmpP2[1]-tmpT2[0]*tmpP1[1])*det;const e=tmpP0[0]-a*tmpT0[0]-c*tmpT0[1];const f=tmpP0[1]-b*tmpT0[0]-d*tmpT0[1];ctx.save();ctx.transform(a,b,c,d,e,f);ctx.clip();ctx.drawImage(img,0,0);ctx.restore();}
-function drawTriangleSub(ctx,img,p0,p1,p2,t0,t1,t2,opt_recursionDepth){const depth=opt_recursionDepth||0;let subdivisionIndex=0;if(depth<constants.SUBDIVISION_MINIMUM){subdivisionIndex=7;}else if(depth<constants.SUBDIVISION_RECURSION_DEPTH){if(Math.abs(p0[2]-p1[2])>constants.SUBDIVISION_DEPTH_THRESHOLD){subdivisionIndex+=1;}
-if(Math.abs(p0[2]-p2[2])>constants.SUBDIVISION_DEPTH_THRESHOLD){subdivisionIndex+=2;}
-if(Math.abs(p1[2]-p2[2])>constants.SUBDIVISION_DEPTH_THRESHOLD){subdivisionIndex+=4;}}
-const p01=vec4.create();const p02=vec4.create();const p12=vec4.create();const t01=vec2.create();const t02=vec2.create();const t12=vec2.create();for(let i=0;i<2;++i){p0[i]*=p0[2];p1[i]*=p1[2];p2[i]*=p2[2];}
-for(let i=0;i<4;++i){p01[i]=(p0[i]+p1[i])/2;p02[i]=(p0[i]+p2[i])/2;p12[i]=(p1[i]+p2[i])/2;}
-for(let i=0;i<2;++i){p0[i]/=p0[2];p1[i]/=p1[2];p2[i]/=p2[2];p01[i]/=p01[2];p02[i]/=p02[2];p12[i]/=p12[2];}
-for(let i=0;i<2;++i){t01[i]=(t0[i]+t1[i])/2;t02[i]=(t0[i]+t2[i])/2;t12[i]=(t1[i]+t2[i])/2;}
-switch(subdivisionIndex){case 1:drawTriangleSub(ctx,img,p0,p01,p2,t0,t01,t2,depth+1);drawTriangleSub(ctx,img,p01,p1,p2,t01,t1,t2,depth+1);break;case 2:drawTriangleSub(ctx,img,p0,p1,p02,t0,t1,t02,depth+1);drawTriangleSub(ctx,img,p1,p02,p2,t1,t02,t2,depth+1);break;case 3:drawTriangleSub(ctx,img,p0,p01,p02,t0,t01,t02,depth+1);drawTriangleSub(ctx,img,p02,p01,p2,t02,t01,t2,depth+1);drawTriangleSub(ctx,img,p01,p1,p2,t01,t1,t2,depth+1);break;case 4:drawTriangleSub(ctx,img,p0,p12,p2,t0,t12,t2,depth+1);drawTriangleSub(ctx,img,p0,p1,p12,t0,t1,t12,depth+1);break;case 5:drawTriangleSub(ctx,img,p0,p01,p2,t0,t01,t2,depth+1);drawTriangleSub(ctx,img,p2,p01,p12,t2,t01,t12,depth+1);drawTriangleSub(ctx,img,p01,p1,p12,t01,t1,t12,depth+1);break;case 6:drawTriangleSub(ctx,img,p0,p12,p02,t0,t12,t02,depth+1);drawTriangleSub(ctx,img,p0,p1,p12,t0,t1,t12,depth+1);drawTriangleSub(ctx,img,p02,p12,p2,t02,t12,t2,depth+1);break;case 7:drawTriangleSub(ctx,img,p0,p01,p02,t0,t01,t02,depth+1);drawTriangleSub(ctx,img,p01,p12,p02,t01,t12,t02,depth+1);drawTriangleSub(ctx,img,p01,p1,p12,t01,t1,t12,depth+1);drawTriangleSub(ctx,img,p02,p12,p2,t02,t12,t2,depth+1);break;default:drawTexturedTriangle(ctx,img,p0,p1,p2,t0,t1,t2);break;}}
-const tmpVec4=vec4.create();function transform(transformed,point,matrix,viewport){vec4.set(tmpVec4,point[0],point[1],0,1);vec4.transformMat4(tmpVec4,tmpVec4,matrix);let w=tmpVec4[3];if(w<1e-6)w=1e-6;transformed[0]=((tmpVec4[0]/w)+1)*viewport.width/2;transformed[1]=((tmpVec4[1]/w)+1)*viewport.height/2;transformed[2]=w;}
-function drawProjectedQuadBackgroundToContext(quad,p1,p2,p3,p4,ctx,quadCanvas){if(quad.imageData){quadCanvas.width=quad.imageData.width;quadCanvas.height=quad.imageData.height;quadCanvas.getContext('2d').putImageData(quad.imageData,0,0);const quadBBox=new tr.b.math.BBox2();quadBBox.addQuad(quad);const iw=quadCanvas.width;const ih=quadCanvas.height;drawTriangleSub(ctx,quadCanvas,p1,p2,p4,[0,0],[iw,0],[0,ih]);drawTriangleSub(ctx,quadCanvas,p2,p3,p4,[iw,0],[iw,ih],[0,ih]);}
-if(quad.backgroundColor){ctx.fillStyle=quad.backgroundColor;ctx.beginPath();ctx.moveTo(p1[0],p1[1]);ctx.lineTo(p2[0],p2[1]);ctx.lineTo(p3[0],p3[1]);ctx.lineTo(p4[0],p4[1]);ctx.closePath();ctx.fill();}}
-function drawProjectedQuadOutlineToContext(quad,p1,p2,p3,p4,ctx,quadCanvas){ctx.beginPath();ctx.moveTo(p1[0],p1[1]);ctx.lineTo(p2[0],p2[1]);ctx.lineTo(p3[0],p3[1]);ctx.lineTo(p4[0],p4[1]);ctx.closePath();ctx.save();if(quad.borderColor){ctx.strokeStyle=quad.borderColor;}else{ctx.strokeStyle='rgb(128,128,128)';}
-if(quad.shadowOffset){ctx.shadowColor='rgb(0, 0, 0)';ctx.shadowOffsetX=quad.shadowOffset[0];ctx.shadowOffsetY=quad.shadowOffset[1];if(quad.shadowBlur){ctx.shadowBlur=quad.shadowBlur;}}
-if(quad.borderWidth){ctx.lineWidth=quad.borderWidth;}else{ctx.lineWidth=1;}
-ctx.stroke();ctx.restore();}
-function drawProjectedQuadSelectionOutlineToContext(quad,p1,p2,p3,p4,ctx,quadCanvas){if(!quad.upperBorderColor)return;ctx.lineWidth=8;ctx.strokeStyle=quad.upperBorderColor;ctx.beginPath();ctx.moveTo(p1[0],p1[1]);ctx.lineTo(p2[0],p2[1]);ctx.lineTo(p3[0],p3[1]);ctx.lineTo(p4[0],p4[1]);ctx.closePath();ctx.stroke();}
-function drawProjectedQuadToContext(passNumber,quad,p1,p2,p3,p4,ctx,quadCanvas){if(passNumber===0){drawProjectedQuadBackgroundToContext(quad,p1,p2,p3,p4,ctx,quadCanvas);}else if(passNumber===1){drawProjectedQuadOutlineToContext(quad,p1,p2,p3,p4,ctx,quadCanvas);}else if(passNumber===2){drawProjectedQuadSelectionOutlineToContext(quad,p1,p2,p3,p4,ctx,quadCanvas);}else{throw new Error('Invalid pass number');}}
-const tmpP1=vec3.create();const tmpP2=vec3.create();const tmpP3=vec3.create();const tmpP4=vec3.create();function transformAndProcessQuads(matrix,viewport,quads,numPasses,handleQuadFunc,opt_arg1,opt_arg2){for(let passNumber=0;passNumber<numPasses;passNumber++){for(let i=0;i<quads.length;i++){const quad=quads[i];transform(tmpP1,quad.p1,matrix,viewport);transform(tmpP2,quad.p2,matrix,viewport);transform(tmpP3,quad.p3,matrix,viewport);transform(tmpP4,quad.p4,matrix,viewport);handleQuadFunc(passNumber,quad,tmpP1,tmpP2,tmpP3,tmpP4,opt_arg1,opt_arg2);}}}
-const QuadStackView=tr.ui.b.define('quad-stack-view');QuadStackView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.className='quad-stack-view';this.style.display='block';this.style.float='left';this.style.height='100%';this.style.overflow='hidden';this.style.position='relative';this.style.width='100%';const node=tr.ui.b.instantiateTemplate('#quad-stack-view-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.updateHeaderVisibility_();const header=Polymer.dom(this).querySelector('#header');header.style.position='absolute';header.style.fontSize='70%';header.style.top='10px';header.style.left='10px';header.style.width='800px';this.canvas_=Polymer.dom(this).querySelector('#canvas');this.chromeImages_={left:Polymer.dom(this).querySelector('#chrome-left'),mid:Polymer.dom(this).querySelector('#chrome-mid'),right:Polymer.dom(this).querySelector('#chrome-right')};const stackingDistanceSlider=Polymer.dom(this).querySelector('#stacking-distance-slider');stackingDistanceSlider.style.position='absolute';stackingDistanceSlider.style.fontSize='70%';stackingDistanceSlider.style.top='10px';stackingDistanceSlider.style.right='10px';stackingDistanceSlider.value=tr.b.Settings.get('quadStackView.stackingDistance',45);stackingDistanceSlider.addEventListener('change',this.onStackingDistanceChange_.bind(this));stackingDistanceSlider.addEventListener('input',this.onStackingDistanceChange_.bind(this));this.trackMouse_();this.camera_=new tr.ui.b.Camera(this.mouseModeSelector_);this.camera_.addEventListener('renderrequired',this.onRenderRequired_.bind(this));this.cameraWasReset_=false;this.camera_.canvas=this.canvas_;this.viewportRect_=tr.b.math.Rect.fromXYWH(0,0,0,0);this.pixelRatio_=window.devicePixelRatio||1;},updateHeaderVisibility_(){if(this.headerText){Polymer.dom(this).querySelector('#header').style.display='';}else{Polymer.dom(this).querySelector('#header').style.display='none';}},get headerText(){return Polymer.dom(this).querySelector('#header').textContent;},set headerText(headerText){Polymer.dom(this).querySelector('#header').textContent=headerText;this.updateHeaderVisibility_();},onStackingDistanceChange_(e){tr.b.Settings.set('quadStackView.stackingDistance',this.stackingDistance);this.scheduleRender();e.stopPropagation();},get stackingDistance(){return Polymer.dom(this).querySelector('#stacking-distance-slider').value;},get mouseModeSelector(){return this.mouseModeSelector_;},get camera(){return this.camera_;},set quads(q){this.quads_=q;this.scheduleRender();},set deviceRect(rect){if(!rect||rect.equalTo(this.deviceRect_))return;this.deviceRect_=rect;this.camera_.deviceRect=rect;this.chromeQuad_=undefined;},resize(){if(!this.offsetParent)return true;const width=parseInt(window.getComputedStyle(this.offsetParent).width);const height=parseInt(window.getComputedStyle(this.offsetParent).height);const rect=tr.b.math.Rect.fromXYWH(0,0,width,height);if(rect.equalTo(this.viewportRect_))return false;this.viewportRect_=rect;this.style.width=width+'px';this.style.height=height+'px';this.canvas_.style.width=width+'px';this.canvas_.style.height=height+'px';this.canvas_.width=this.pixelRatio_*width;this.canvas_.height=this.pixelRatio_*height;if(!this.cameraWasReset_){this.camera_.resetCamera();this.cameraWasReset_=true;}
-return true;},readyToDraw(){if(!this.chromeImages_.left.src){let leftContent=window.getComputedStyle(this.chromeImages_.left).backgroundImage;leftContent=tr.ui.b.extractUrlString(leftContent);let midContent=window.getComputedStyle(this.chromeImages_.mid).backgroundImage;midContent=tr.ui.b.extractUrlString(midContent);let rightContent=window.getComputedStyle(this.chromeImages_.right).backgroundImage;rightContent=tr.ui.b.extractUrlString(rightContent);this.chromeImages_.left.src=leftContent;this.chromeImages_.mid.src=midContent;this.chromeImages_.right.src=rightContent;}
-return(this.chromeImages_.left.height>0)&&(this.chromeImages_.mid.height>0)&&(this.chromeImages_.right.height>0);},get chromeQuad(){if(this.chromeQuad_)return this.chromeQuad_;const chromeCanvas=document.createElement('canvas');const offsetY=this.chromeImages_.left.height;chromeCanvas.width=this.deviceRect_.width;chromeCanvas.height=this.deviceRect_.height+offsetY;const leftWidth=this.chromeImages_.left.width;const midWidth=this.chromeImages_.mid.width;const rightWidth=this.chromeImages_.right.width;const chromeCtx=chromeCanvas.getContext('2d');chromeCtx.drawImage(this.chromeImages_.left,0,0);chromeCtx.save();chromeCtx.translate(leftWidth,0);const s=(this.deviceRect_.width-leftWidth-rightWidth)/midWidth;chromeCtx.scale(s,1);chromeCtx.drawImage(this.chromeImages_.mid,0,0);chromeCtx.restore();chromeCtx.drawImage(this.chromeImages_.right,leftWidth+s*midWidth,0);const chromeRect=tr.b.math.Rect.fromXYWH(this.deviceRect_.x,this.deviceRect_.y-offsetY,this.deviceRect_.width,this.deviceRect_.height+offsetY);const chromeQuad=tr.b.math.Quad.fromRect(chromeRect);chromeQuad.stackingGroupId=this.maxStackingGroupId_+1;chromeQuad.imageData=chromeCtx.getImageData(0,0,chromeCanvas.width,chromeCanvas.height);chromeQuad.shadowOffset=[0,0];chromeQuad.shadowBlur=5;chromeQuad.borderWidth=3;this.chromeQuad_=chromeQuad;return this.chromeQuad_;},scheduleRender(){if(this.redrawScheduled_)return false;this.redrawScheduled_=true;tr.b.requestAnimationFrame(this.render,this);},onRenderRequired_(e){this.scheduleRender();},stackTransformAndProcessQuads_(numPasses,handleQuadFunc,includeChromeQuad,opt_arg1,opt_arg2){const mv=this.camera_.modelViewMatrix;const p=this.camera_.projectionMatrix;const viewport=tr.b.math.Rect.fromXYWH(0,0,this.canvas_.width,this.canvas_.height);const quadStacks=[];for(let i=0;i<this.quads_.length;++i){const quad=this.quads_[i];const stackingId=quad.stackingGroupId||0;while(stackingId>=quadStacks.length){quadStacks.push([]);}
-quadStacks[stackingId].push(quad);}
-const mvp=mat4.create();this.maxStackingGroupId_=quadStacks.length;const effectiveStackingDistance=this.stackingDistance*this.camera_.stackingDistanceDampening;mat4.multiply(mvp,p,mv);for(let i=0;i<quadStacks.length;++i){transformAndProcessQuads(mvp,viewport,quadStacks[i],numPasses,handleQuadFunc,opt_arg1,opt_arg2);mat4.translate(mv,mv,[0,0,effectiveStackingDistance]);mat4.multiply(mvp,p,mv);}
-if(includeChromeQuad&&this.deviceRect_){transformAndProcessQuads(mvp,viewport,[this.chromeQuad],numPasses,drawProjectedQuadToContext,opt_arg1,opt_arg2);}},render(){this.redrawScheduled_=false;if(!this.readyToDraw()){setTimeout(this.scheduleRender.bind(this),constants.IMAGE_LOAD_RETRY_TIME_MS);return;}
-if(!this.quads_)return;const canvasCtx=this.canvas_.getContext('2d');if(!this.resize()){canvasCtx.clearRect(0,0,this.canvas_.width,this.canvas_.height);}
-const quadCanvas=document.createElement('canvas');this.stackTransformAndProcessQuads_(3,drawProjectedQuadToContext,true,canvasCtx,quadCanvas);quadCanvas.width=0;},trackMouse_(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this.canvas_;this.mouseModeSelector_.supportedModeMask=tr.ui.b.MOUSE_SELECTOR_MODE.SELECTION|tr.ui.b.MOUSE_SELECTOR_MODE.PANSCAN|tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM|tr.ui.b.MOUSE_SELECTOR_MODE.ROTATE;this.mouseModeSelector_.mode=tr.ui.b.MOUSE_SELECTOR_MODE.PANSCAN;this.mouseModeSelector_.pos={x:0,y:100};Polymer.dom(this).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.settingsKey='quadStackView.mouseModeSelector';this.mouseModeSelector_.setModifierForAlternateMode(tr.ui.b.MOUSE_SELECTOR_MODE.ROTATE,tr.ui.b.MODIFIER.SHIFT);this.mouseModeSelector_.setModifierForAlternateMode(tr.ui.b.MOUSE_SELECTOR_MODE.PANSCAN,tr.ui.b.MODIFIER.SPACE);this.mouseModeSelector_.setModifierForAlternateMode(tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM,tr.ui.b.MODIFIER.CMD_OR_CTRL);this.mouseModeSelector_.addEventListener('updateselection',this.onSelectionUpdate_.bind(this));this.mouseModeSelector_.addEventListener('endselection',this.onSelectionUpdate_.bind(this));},extractRelativeMousePosition_(e){const br=this.canvas_.getBoundingClientRect();return[this.pixelRatio_*(e.clientX-this.canvas_.offsetLeft-br.left),this.pixelRatio_*(e.clientY-this.canvas_.offsetTop-br.top)];},onSelectionUpdate_(e){const mousePos=this.extractRelativeMousePosition_(e);const res=[];function handleQuad(passNumber,quad,p1,p2,p3,p4){if(tr.b.math.pointInImplicitQuad(mousePos,p1,p2,p3,p4)){res.push(quad);}}
-this.stackTransformAndProcessQuads_(1,handleQuad,false);e=new tr.b.Event('selectionchange');e.quads=res;this.dispatchEvent(e);}};return{QuadStackView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const ColorScheme=tr.b.ColorScheme;const THIS_DOC=document.currentScript.ownerDocument;const TILE_HEATMAP_TYPE={};TILE_HEATMAP_TYPE.NONE='none';TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY='scheduledPriority';TILE_HEATMAP_TYPE.USING_GPU_MEMORY='usingGpuMemory';const cc=tr.ui.e.chrome.cc;function createTileRectsSelectorBaseOptions(){return[{label:'None',value:'none'},{label:'Coverage Rects',value:'coverage'}];}
-const LayerTreeQuadStackView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-tree-quad-stack-view');LayerTreeQuadStackView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='100%';this.style.flexDirection='column';this.style.minHeight=0;this.style.display='flex';this.style.width='100%';this.isRenderPassQuads_=false;this.pictureAsImageData_={};this.messages_=[];this.controls_=document.createElement('top-controls');this.controls_.style.flexGrow=0;this.controls_.style.flexShrink=0;this.controls_.style.flexBasis='auto';this.controls_.style.backgroundImage='-webkit-gradient(linear, 0 0, 100% 0, from(#E5E5E5), to(#D1D1D1))';this.controls_.style.borderBottom='1px solid #8e8e8e';this.controls_.style.borderTop='1px solid white';this.controls_.style.display='flex';this.controls_.style.flexDirection='row';this.controls_.style.flexWrap='wrap';this.controls_.style.fontSize='14px';this.controls_.style.paddingLeft='2px';this.controls_.style.overflow='hidden';this.infoBar_=document.createElement('tr-ui-b-info-bar');this.quadStackView_=new tr.ui.b.QuadStackView();this.quadStackView_.addEventListener('selectionchange',this.onQuadStackViewSelectionChange_.bind(this));this.extraHighlightsByLayerId_=undefined;this.inputEventImageData_=undefined;const m=tr.ui.b.MOUSE_SELECTOR_MODE;const mms=this.quadStackView_.mouseModeSelector;mms.settingsKey='tr.e.cc.layerTreeQuadStackView.mouseModeSelector';mms.setKeyCodeForMode(m.SELECTION,'Z'.charCodeAt(0));mms.setKeyCodeForMode(m.PANSCAN,'X'.charCodeAt(0));mms.setKeyCodeForMode(m.ZOOM,'C'.charCodeAt(0));mms.setKeyCodeForMode(m.ROTATE,'V'.charCodeAt(0));const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-layer-tree-quad-stack-view-template',THIS_DOC);Polymer.dom(this).appendChild(node);Polymer.dom(this).appendChild(this.controls_);Polymer.dom(this).appendChild(this.infoBar_);Polymer.dom(this).appendChild(this.quadStackView_);this.tileRectsSelector_=tr.ui.b.createSelector(this,'howToShowTiles','layerView.howToShowTiles','none',createTileRectsSelectorBaseOptions());Polymer.dom(this.controls_).appendChild(this.tileRectsSelector_);const tileHeatmapText=tr.ui.b.createSpan({textContent:'Tile heatmap:'});Polymer.dom(this.controls_).appendChild(tileHeatmapText);const tileHeatmapSelector=tr.ui.b.createSelector(this,'tileHeatmapType','layerView.tileHeatmapType',TILE_HEATMAP_TYPE.NONE,[{label:'None',value:TILE_HEATMAP_TYPE.NONE},{label:'Scheduled Priority',value:TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY},{label:'Is using GPU memory',value:TILE_HEATMAP_TYPE.USING_GPU_MEMORY}]);Polymer.dom(this.controls_).appendChild(tileHeatmapSelector);const showOtherLayersCheckbox=tr.ui.b.createCheckBox(this,'showOtherLayers','layerView.showOtherLayers',true,'Other layers/passes');showOtherLayersCheckbox.title='When checked, show all layers, selected or not.';Polymer.dom(this.controls_).appendChild(showOtherLayersCheckbox);const showInvalidationsCheckbox=tr.ui.b.createCheckBox(this,'showInvalidations','layerView.showInvalidations',true,'Invalidations');showInvalidationsCheckbox.title='When checked, compositing invalidations are highlighted in red';Polymer.dom(this.controls_).appendChild(showInvalidationsCheckbox);const showUnrecordedRegionCheckbox=tr.ui.b.createCheckBox(this,'showUnrecordedRegion','layerView.showUnrecordedRegion',true,'Unrecorded area');showUnrecordedRegionCheckbox.title='When checked, unrecorded areas are highlighted in yellow';Polymer.dom(this.controls_).appendChild(showUnrecordedRegionCheckbox);const showBottlenecksCheckbox=tr.ui.b.createCheckBox(this,'showBottlenecks','layerView.showBottlenecks',true,'Bottlenecks');showBottlenecksCheckbox.title='When checked, scroll bottlenecks are highlighted';Polymer.dom(this.controls_).appendChild(showBottlenecksCheckbox);const showLayoutRectsCheckbox=tr.ui.b.createCheckBox(this,'showLayoutRects','layerView.showLayoutRects',false,'Layout rects');showLayoutRectsCheckbox.title='When checked, shows rects for regions where layout happened';Polymer.dom(this.controls_).appendChild(showLayoutRectsCheckbox);const showContentsCheckbox=tr.ui.b.createCheckBox(this,'showContents','layerView.showContents',true,'Contents');showContentsCheckbox.title='When checked, show the rendered contents inside the layer outlines';Polymer.dom(this.controls_).appendChild(showContentsCheckbox);const showAnimationBoundsCheckbox=tr.ui.b.createCheckBox(this,'showAnimationBounds','layerView.showAnimationBounds',false,'Animation Bounds');showAnimationBoundsCheckbox.title='When checked, show a border around'+' a layer showing the extent of its animation.';Polymer.dom(this.controls_).appendChild(showAnimationBoundsCheckbox);const showInputEventsCheckbox=tr.ui.b.createCheckBox(this,'showInputEvents','layerView.showInputEvents',true,'Input events');showInputEventsCheckbox.title='When checked, input events are '+'displayed as circles.';Polymer.dom(this.controls_).appendChild(showInputEventsCheckbox);this.whatRasterizedLink_=document.createElement('a');Polymer.dom(this.whatRasterizedLink_).classList.add('what-rasterized');Polymer.dom(this.whatRasterizedLink_).textContent='What rasterized?';this.whatRasterizedLink_.addEventListener('click',this.onWhatRasterizedLinkClicked_.bind(this));Polymer.dom(this).appendChild(this.whatRasterizedLink_);},get layerTreeImpl(){return this.layerTreeImpl_;},set isRenderPassQuads(newValue){this.isRenderPassQuads_=newValue;},set layerTreeImpl(layerTreeImpl){if(this.layerTreeImpl_===layerTreeImpl)return;this.layerTreeImpl_=layerTreeImpl;this.selection=undefined;},get extraHighlightsByLayerId(){return this.extraHighlightsByLayerId_;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.extraHighlightsByLayerId_=extraHighlightsByLayerId;this.scheduleUpdateContents_();},get showOtherLayers(){return this.showOtherLayers_;},set showOtherLayers(show){this.showOtherLayers_=show;this.updateContents_();},get showAnimationBounds(){return this.showAnimationBounds_;},set showAnimationBounds(show){this.showAnimationBounds_=show;this.updateContents_();},get showInputEvents(){return this.showInputEvents_;},set showInputEvents(show){this.showInputEvents_=show;this.updateContents_();},get showContents(){return this.showContents_;},set showContents(show){this.showContents_=show;this.updateContents_();},get showInvalidations(){return this.showInvalidations_;},set showInvalidations(show){this.showInvalidations_=show;this.updateContents_();},get showUnrecordedRegion(){return this.showUnrecordedRegion_;},set showUnrecordedRegion(show){this.showUnrecordedRegion_=show;this.updateContents_();},get showBottlenecks(){return this.showBottlenecks_;},set showBottlenecks(show){this.showBottlenecks_=show;this.updateContents_();},get showLayoutRects(){return this.showLayoutRects_;},set showLayoutRects(show){this.showLayoutRects_=show;this.updateContents_();},get howToShowTiles(){return this.howToShowTiles_;},set howToShowTiles(val){if(val!=='none'&&val!=='coverage'&&isNaN(parseFloat(val))){throw new Error('howToShowTiles requires "none" or "coverage" or a number');}
-this.howToShowTiles_=val;this.updateContents_();},get tileHeatmapType(){return this.tileHeatmapType_;},set tileHeatmapType(val){this.tileHeatmapType_=val;this.updateContents_();},get selection(){return this.selection_;},set selection(selection){if(this.selection===selection)return;this.selection_=selection;tr.b.dispatchSimpleEvent(this,'selection-change');this.updateContents_();},regenerateContent(){this.updateTilesSelector_();this.updateContents_();},loadDataForImageElement_(image,callback){const imageContent=window.getComputedStyle(image).backgroundImage;image.src=tr.ui.b.extractUrlString(imageContent);image.onload=function(){const canvas=document.createElement('canvas');const ctx=canvas.getContext('2d');canvas.width=image.width;canvas.height=image.height;ctx.drawImage(image,0,0);const imageData=ctx.getImageData(0,0,canvas.width,canvas.height);callback(imageData);};},onQuadStackViewSelectionChange_(e){const selectableQuads=e.quads.filter(function(q){return q.selectionToSetIfClicked!==undefined;});if(selectableQuads.length===0){this.selection=undefined;return;}
-selectableQuads.sort(function(x,y){const z=x.stackingGroupId-y.stackingGroupId;if(z!==0)return z;return x.selectionToSetIfClicked.specicifity-
-y.selectionToSetIfClicked.specicifity;});const quadToSelect=selectableQuads[selectableQuads.length-1];this.selection=quadToSelect.selectionToSetIfClicked;},scheduleUpdateContents_(){if(this.updateContentsPending_)return;this.updateContentsPending_=true;tr.b.requestAnimationFrameInThisFrameIfPossible(this.updateContents_,this);},updateContents_(){if(!this.layerTreeImpl_){this.quadStackView_.headerText='No tree';this.quadStackView_.quads=[];return;}
-const status=this.computePictureLoadingStatus_();if(!status.picturesComplete)return;const lthi=this.layerTreeImpl_.layerTreeHostImpl;const lthiInstance=lthi.objectInstance;const worldViewportRect=tr.b.math.Rect.fromXYWH(0,0,lthi.deviceViewportSize.width,lthi.deviceViewportSize.height);this.quadStackView_.deviceRect=worldViewportRect;if(this.isRenderPassQuads_){this.quadStackView_.quads=this.generateRenderPassQuads();}else{this.quadStackView_.quads=this.generateLayerQuads();}
-this.updateWhatRasterizedLinkState_();let message='';if(lthi.tilesHaveGpuMemoryUsageInfo){const thisTreeUsageInBytes=this.layerTreeImpl_.gpuMemoryUsageInBytes;const otherTreeUsageInBytes=lthi.gpuMemoryUsageInBytes-
-thisTreeUsageInBytes;message+=tr.b.convertUnit(thisTreeUsageInBytes,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI).toFixed(1)+' MiB on this tree';if(otherTreeUsageInBytes){message+=', '+
-tr.b.convertUnit(otherTreeUsageInBytes,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI).toFixed(1)+' MiB on the other tree';}}else{if(this.layerTreeImpl_){const thisTreeUsageInBytes=this.layerTreeImpl_.gpuMemoryUsageInBytes;message+=tr.b.convertUnit(thisTreeUsageInBytes,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI).toFixed(1)+' MiB on this tree';if(this.layerTreeImpl_.otherTree){message+=', ??? MiB on other tree. ';}}}
-if(lthi.args.tileManagerBasicState){const tmgs=lthi.args.tileManagerBasicState.globalState;message+=' (softMax='+
-tr.b.convertUnit(tmgs.softMemoryLimitInBytes,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI).toFixed(1)+' MiB, hardMax='+
-tr.b.convertUnit(tmgs.hardMemoryLimitInBytes,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI).toFixed(1)+' MiB, '+
-tmgs.memoryLimitPolicy+')';}else{const thread=lthi.snapshottedOnThread;const didManageTilesSlices=thread.sliceGroup.slices.filter(s=>{if(s.category!=='tr.e.cc')return false;if(s.title!=='DidManage')return false;if(s.end>lthi.ts)return false;return true;});didManageTilesSlices.sort(function(x,y){return x.end-y.end;});if(didManageTilesSlices.length>0){const newest=didManageTilesSlices[didManageTilesSlices.length-1];const tmgs=newest.args.state.global_state;message+=' (softMax='+
-tr.b.convertUnit(tmgs.softMemoryLimitInBytes,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI).toFixed(1)+' MiB, hardMax='+
-tr.b.convertUnit(tmgs.hardMemoryLimitInBytes,tr.b.UnitPrefixScale.BINARY.NONE,tr.b.UnitPrefixScale.BINARY.MEBI).toFixed(1)+' MiB, '+
-tmgs.memoryLimitPolicy+')';}}
-if(this.layerTreeImpl_.otherTree){message+=' (Another tree exists)';}
-if(message.length){this.quadStackView_.headerText=message;}else{this.quadStackView_.headerText=undefined;}
-this.updateInfoBar_(status.messages);},updateTilesSelector_(){const data=createTileRectsSelectorBaseOptions();if(this.layerTreeImpl_){const lthi=this.layerTreeImpl_.layerTreeHostImpl;const scaleNames=lthi.getContentsScaleNames();for(const scale in scaleNames){data.push({label:'Scale '+scale+' ('+scaleNames[scale]+')',value:scale});}}
-const newSelector=tr.ui.b.createSelector(this,'howToShowTiles','layerView.howToShowTiles','none',data);this.controls_.replaceChild(newSelector,this.tileRectsSelector_);this.tileRectsSelector_=newSelector;},computePictureLoadingStatus_(){const layers=this.layers;const status={messages:[],picturesComplete:true};if(this.showContents){let hasPendingRasterizeImage=false;let firstPictureError=undefined;let hasMissingLayerRect=false;let hasUnresolvedPictureRef=false;for(let i=0;i<layers.length;i++){const layer=layers[i];for(let ir=0;ir<layer.pictures.length;++ir){const picture=layer.pictures[ir];if(picture.idRef){hasUnresolvedPictureRef=true;continue;}
-if(!picture.layerRect){hasMissingLayerRect=true;continue;}
-const pictureAsImageData=this.pictureAsImageData_[picture.guid];if(!pictureAsImageData){hasPendingRasterizeImage=true;this.pictureAsImageData_[picture.guid]=tr.e.cc.PictureAsImageData.Pending(this);picture.rasterize({stopIndex:undefined},function(pictureImageData){const picture_=pictureImageData.picture;this.pictureAsImageData_[picture_.guid]=pictureImageData;this.scheduleUpdateContents_();}.bind(this));continue;}
-if(pictureAsImageData.isPending()){hasPendingRasterizeImage=true;continue;}
-if(pictureAsImageData.error){if(!firstPictureError){firstPictureError=pictureAsImageData.error;}
-break;}}}
-if(hasPendingRasterizeImage){status.picturesComplete=false;}else{if(hasUnresolvedPictureRef){status.messages.push({header:'Missing picture',details:'Your trace didn\'t have pictures for every layer. '+'Old chrome versions had this problem'});}
-if(hasMissingLayerRect){status.messages.push({header:'Missing layer rect',details:'Your trace may be corrupt or from a very old '+'Chrome revision.'});}
-if(firstPictureError){status.messages.push({header:'Cannot rasterize',details:firstPictureError});}}}
-if(this.showInputEvents&&this.layerTreeImpl.tracedInputLatencies&&this.inputEventImageData_===undefined){const image=Polymer.dom(this).querySelector('#input-event');if(!image.src){this.loadDataForImageElement_(image,function(imageData){this.inputEventImageData_=imageData;this.updateContentsPending_=false;this.scheduleUpdateContents_();}.bind(this));}
-status.picturesComplete=false;}
-return status;},get selectedRenderPass(){if(this.selection){return this.selection.renderPass_;}},get selectedLayer(){if(this.selection){const selectedLayerId=this.selection.associatedLayerId;return this.layerTreeImpl_.findLayerWithId(selectedLayerId);}},get renderPasses(){let renderPasses=this.layerTreeImpl.layerTreeHostImpl.args.frame.renderPasses;if(!this.showOtherLayers){const selectedRenderPass=this.selectedRenderPass;if(selectedRenderPass){renderPasses=[selectedRenderPass];}}
-return renderPasses;},get layers(){let layers=this.layerTreeImpl.renderSurfaceLayerList;if(!this.showOtherLayers){const selectedLayer=this.selectedLayer;if(selectedLayer){layers=[selectedLayer];}}
-return layers;},appendImageQuads_(quads,layer,layerQuad){for(let ir=0;ir<layer.pictures.length;++ir){const picture=layer.pictures[ir];if(!picture.layerRect)continue;const unitRect=picture.layerRect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);const pictureData=this.pictureAsImageData_[picture.guid];if(this.showContents&&pictureData&&pictureData.imageData){iq.imageData=pictureData.imageData;iq.borderColor='rgba(0,0,0,0)';}else{iq.imageData=undefined;}
-iq.stackingGroupId=layerQuad.stackingGroupId;quads.push(iq);}},appendAnimationQuads_(quads,layer,layerQuad){if(!layer.animationBoundsRect)return;const rect=layer.animationBoundsRect;const abq=tr.b.math.Quad.fromRect(rect);abq.backgroundColor='rgba(164,191,48,0.5)';abq.borderColor='rgba(205,255,0,0.75)';abq.borderWidth=3.0;abq.stackingGroupId=layerQuad.stackingGroupId;abq.selectionToSetIfClicked=new cc.AnimationRectSelection(layer,rect);quads.push(abq);},appendInvalidationQuads_(quads,layer,layerQuad){if(layer.layerTreeImpl.hasSourceFrameBeenDrawnBefore)return;for(let ir=0;ir<layer.annotatedInvalidation.rects.length;ir++){const rect=layer.annotatedInvalidation.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(0, 255, 0, 0.1)';if(rect.reason==='renderer insertion'){iq.backgroundColor='rgba(0, 255, 128, 0.1)';}
-iq.borderColor='rgba(0, 255, 0, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,'Invalidation rect ('+rect.reason+')',rect,rect);quads.push(iq);}
-if(layer.annotatedInvalidation.rects.length===0){for(let ir=0;ir<layer.invalidation.rects.length;ir++){const rect=layer.invalidation.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(0, 255, 0, 0.1)';iq.borderColor='rgba(0, 255, 0, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,'Invalidation rect',rect,rect);quads.push(iq);}}},appendUnrecordedRegionQuads_(quads,layer,layerQuad){for(let ir=0;ir<layer.unrecordedRegion.rects.length;ir++){const rect=layer.unrecordedRegion.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor='rgba(240, 230, 140, 0.3)';iq.borderColor='rgba(240, 230, 140, 1)';iq.stackingGroupId=layerQuad.stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,'Unrecorded area',rect,rect);quads.push(iq);}},appendBottleneckQuads_(quads,layer,layerQuad,stackingGroupId){function processRegion(region,label,borderColor){const backgroundColor=borderColor.clone();backgroundColor.a=0.4*(borderColor.a||1.0);if(!region||!region.rects)return;for(let ir=0;ir<region.rects.length;ir++){const rect=region.rects[ir];const unitRect=rect.asUVRectInside(layer.bounds);const iq=layerQuad.projectUnitRect(unitRect);iq.backgroundColor=backgroundColor.toString();iq.borderColor=borderColor.toString();iq.borderWidth=4.0;iq.stackingGroupId=stackingGroupId;iq.selectionToSetIfClicked=new cc.LayerRectSelection(layer,label,rect,rect);quads.push(iq);}}
-processRegion(layer.touchEventHandlerRegion,'Touch listener',tr.b.Color.fromString('rgb(228, 226, 27)'));processRegion(layer.wheelEventHandlerRegion,'Wheel listener',tr.b.Color.fromString('rgb(176, 205, 29)'));processRegion(layer.nonFastScrollableRegion,'Repaints on scroll',tr.b.Color.fromString('rgb(213, 134, 32)'));},appendTileCoverageRectQuads_(quads,layer,layerQuad,heatmapType){if(!layer.tileCoverageRects)return;const tiles=[];for(let ct=0;ct<layer.tileCoverageRects.length;++ct){const tile=layer.tileCoverageRects[ct].tile;if(tile!==undefined)tiles.push(tile);}
-const lthi=this.layerTreeImpl_.layerTreeHostImpl;const minMax=this.getMinMaxForHeatmap_(lthi.activeTiles,heatmapType);const heatmapResult=this.computeHeatmapColors_(tiles,minMax,heatmapType);let heatIndex=0;for(let ct=0;ct<layer.tileCoverageRects.length;++ct){let rect=layer.tileCoverageRects[ct].geometryRect;rect=rect.scale(1.0/layer.geometryContentsScale);const tile=layer.tileCoverageRects[ct].tile;const unitRect=rect.asUVRectInside(layer.bounds);const quad=layerQuad.projectUnitRect(unitRect);quad.backgroundColor='rgba(0, 0, 0, 0)';quad.stackingGroupId=layerQuad.stackingGroupId;let type=tr.e.cc.tileTypes.missing;if(tile){type=tile.getTypeForLayer(layer);quad.backgroundColor=heatmapResult[heatIndex].color;++heatIndex;}
-quad.borderColor=tr.e.cc.tileBorder[type].color;quad.borderWidth=tr.e.cc.tileBorder[type].width;let label;if(tile){label='coverageRect';}else{label='checkerboard coverageRect';}
-quad.selectionToSetIfClicked=new cc.LayerRectSelection(layer,label,rect,layer.tileCoverageRects[ct]);quads.push(quad);}},appendLayoutRectQuads_(quads,layer,layerQuad){if(!layer.layoutRects){return;}
-for(let ct=0;ct<layer.layoutRects.length;++ct){let rect=layer.layoutRects[ct].geometryRect;rect=rect.scale(1.0/layer.geometryContentsScale);const unitRect=rect.asUVRectInside(layer.bounds);const quad=layerQuad.projectUnitRect(unitRect);quad.backgroundColor='rgba(0, 0, 0, 0)';quad.stackingGroupId=layerQuad.stackingGroupId;quad.borderColor='rgba(0, 0, 200, 0.7)';quad.borderWidth=2;const label='Layout rect';quad.selectionToSetIfClicked=new cc.LayerRectSelection(layer,label,rect);quads.push(quad);}},getValueForHeatmap_(tile,heatmapType){if(heatmapType===TILE_HEATMAP_TYPE.SCHEDULED_PRIORITY){return tile.scheduledPriority===0?undefined:tile.scheduledPriority;}else if(heatmapType===TILE_HEATMAP_TYPE.USING_GPU_MEMORY){if(tile.isSolidColor)return 0.5;return tile.isUsingGpuMemory?0:1;}},getMinMaxForHeatmap_(tiles,heatmapType){const range=new tr.b.math.Range();if(heatmapType===TILE_HEATMAP_TYPE.USING_GPU_MEMORY){range.addValue(0);range.addValue(1);return range;}
-for(let i=0;i<tiles.length;++i){const value=this.getValueForHeatmap_(tiles[i],heatmapType);if(value===undefined)continue;range.addValue(value);}
-if(range.range===0){range.addValue(1);}
-return range;},computeHeatmapColors_(tiles,minMax,heatmapType){const min=minMax.min;const max=minMax.max;const color=function(value){let hue=120*(1-(value-min)/(max-min));if(hue<0)hue=0;return'hsla('+hue+', 100%, 50%, 0.5)';};const values=[];for(let i=0;i<tiles.length;++i){const tile=tiles[i];const value=this.getValueForHeatmap_(tile,heatmapType);const res={value,color:value!==undefined?color(value):undefined};values.push(res);}
-return values;},appendTilesWithScaleQuads_(quads,layer,layerQuad,scale,heatmapType){const lthi=this.layerTreeImpl_.layerTreeHostImpl;const tiles=[];for(let i=0;i<lthi.activeTiles.length;++i){const tile=lthi.activeTiles[i];if(Math.abs(tile.contentsScale-scale)>1e-6){continue;}
-if(layer.layerId!==tile.layerId)continue;tiles.push(tile);}
-const minMax=this.getMinMaxForHeatmap_(lthi.activeTiles,heatmapType);const heatmapResult=this.computeHeatmapColors_(tiles,minMax,heatmapType);for(let i=0;i<tiles.length;++i){const tile=tiles[i];const rect=tile.layerRect;if(!tile.layerRect)continue;const unitRect=rect.asUVRectInside(layer.bounds);const quad=layerQuad.projectUnitRect(unitRect);quad.backgroundColor='rgba(0, 0, 0, 0)';quad.stackingGroupId=layerQuad.stackingGroupId;const type=tile.getTypeForLayer(layer);quad.borderColor=tr.e.cc.tileBorder[type].color;quad.borderWidth=tr.e.cc.tileBorder[type].width;quad.backgroundColor=heatmapResult[i].color;const data={tileType:type};if(heatmapType!==TILE_HEATMAP_TYPE.NONE){data[heatmapType]=heatmapResult[i].value;}
-quad.selectionToSetIfClicked=new cc.TileSelection(tile,data);quads.push(quad);}},appendHighlightQuadsForLayer_(quads,layer,layerQuad,highlights){highlights.forEach(function(highlight){const rect=highlight.rect;const unitRect=rect.asUVRectInside(layer.bounds);const quad=layerQuad.projectUnitRect(unitRect);let colorId=ColorScheme.getColorIdForGeneralPurposeString(highlight.colorKey);const offset=ColorScheme.properties.brightenedOffsets[0];colorId=ColorScheme.getVariantColorId(colorId,offset);const color=ColorScheme.colors[colorId];const quadForDrawing=quad.clone();quadForDrawing.backgroundColor=color.withAlpha(0.5).toString();quadForDrawing.borderColor=color.withAlpha(1.0).darken().toString();quadForDrawing.stackingGroupId=layerQuad.stackingGroupId;quads.push(quadForDrawing);},this);},generateRenderPassQuads(){if(!this.layerTreeImpl.layerTreeHostImpl.args.frame)return[];const renderPasses=this.renderPasses;if(!renderPasses)return[];const quads=[];for(let i=0;i<renderPasses.length;++i){const quadList=renderPasses[i].quadList;for(let j=0;j<quadList.length;++j){const drawQuad=quadList[j];const quad=drawQuad.rectAsTargetSpaceQuad.clone();quad.borderColor='rgb(170, 204, 238)';quad.borderWidth=2;quad.stackingGroupId=i;quads.push(quad);}}
-return quads;},generateLayerQuads(){this.updateContentsPending_=false;const layers=this.layers;const quads=[];let nextStackingGroupId=0;const alreadyVisitedLayerIds={};let selectionHighlightsByLayerId;if(this.selection){selectionHighlightsByLayerId=this.selection.highlightsByLayerId;}else{selectionHighlightsByLayerId={};}
-const extraHighlightsByLayerId=this.extraHighlightsByLayerId||{};for(let i=1;i<=layers.length;i++){const layer=layers[layers.length-i];alreadyVisitedLayerIds[layer.layerId]=true;if(layer.objectInstance.name==='cc::NinePatchLayerImpl'){continue;}
-const layerQuad=layer.layerQuad.clone();if(layer.usingGpuRasterization){const pixelRatio=window.devicePixelRatio||1;layerQuad.borderWidth=2.0*pixelRatio;layerQuad.borderColor='rgba(154,205,50,0.75)';}else{layerQuad.borderColor='rgba(0,0,0,0.75)';}
-layerQuad.stackingGroupId=nextStackingGroupId++;layerQuad.selectionToSetIfClicked=new cc.LayerSelection(layer);layerQuad.layer=layer;if(this.showOtherLayers&&this.selectedLayer===layer){layerQuad.upperBorderColor='rgb(156,189,45)';}
-if(this.showAnimationBounds){this.appendAnimationQuads_(quads,layer,layerQuad);}
-this.appendImageQuads_(quads,layer,layerQuad);quads.push(layerQuad);if(this.showInvalidations){this.appendInvalidationQuads_(quads,layer,layerQuad);}
-if(this.showUnrecordedRegion){this.appendUnrecordedRegionQuads_(quads,layer,layerQuad);}
-if(this.showBottlenecks){this.appendBottleneckQuads_(quads,layer,layerQuad,layerQuad.stackingGroupId);}
-if(this.showLayoutRects){this.appendLayoutRectQuads_(quads,layer,layerQuad);}
-if(this.howToShowTiles==='coverage'){this.appendTileCoverageRectQuads_(quads,layer,layerQuad,this.tileHeatmapType);}else if(this.howToShowTiles!=='none'){this.appendTilesWithScaleQuads_(quads,layer,layerQuad,this.howToShowTiles,this.tileHeatmapType);}
-let highlights;highlights=extraHighlightsByLayerId[layer.layerId];if(highlights){this.appendHighlightQuadsForLayer_(quads,layer,layerQuad,highlights);}
-highlights=selectionHighlightsByLayerId[layer.layerId];if(highlights){this.appendHighlightQuadsForLayer_(quads,layer,layerQuad,highlights);}}
-this.layerTreeImpl.iterLayers(function(layer,depth,isMask,isReplica){if(!this.showOtherLayers&&this.selectedLayer!==layer)return;if(alreadyVisitedLayerIds[layer.layerId])return;const layerQuad=layer.layerQuad;const stackingGroupId=nextStackingGroupId++;if(this.showBottlenecks){this.appendBottleneckQuads_(quads,layer,layerQuad,stackingGroupId);}},this);const tracedInputLatencies=this.layerTreeImpl.tracedInputLatencies;if(this.showInputEvents&&tracedInputLatencies){for(let i=0;i<tracedInputLatencies.length;i++){const coordinatesArray=tracedInputLatencies[i].args.data.coordinates;for(let j=0;j<coordinatesArray.length;j++){const inputQuad=tr.b.math.Quad.fromXYWH(coordinatesArray[j].x-25,coordinatesArray[j].y-25,50,50);inputQuad.borderColor='rgba(0, 0, 0, 0)';inputQuad.imageData=this.inputEventImageData_;quads.push(inputQuad);}}}
-return quads;},updateInfoBar_(infoBarMessages){if(infoBarMessages.length){this.infoBar_.removeAllButtons();this.infoBar_.message='Some problems were encountered...';this.infoBar_.addButton('More info...',function(e){const overlay=new tr.ui.b.Overlay();Polymer.dom(overlay).textContent='';infoBarMessages.forEach(function(message){const title=document.createElement('h3');Polymer.dom(title).textContent=message.header;const details=document.createElement('div');Polymer.dom(details).textContent=message.details;Polymer.dom(overlay).appendChild(title);Polymer.dom(overlay).appendChild(details);});overlay.visible=true;e.stopPropagation();return false;});this.infoBar_.visible=true;}else{this.infoBar_.removeAllButtons();this.infoBar_.message='';this.infoBar_.visible=false;}},getWhatRasterized_(){const lthi=this.layerTreeImpl_.layerTreeHostImpl;const renderProcess=lthi.objectInstance.parent;const tasks=[];for(const event of renderProcess.getDescendantEvents()){if(!(event instanceof tr.model.Slice))continue;const tile=tr.e.cc.getTileFromRasterTaskSlice(event);if(tile===undefined)continue;if(tile.containingSnapshot===lthi){tasks.push(event);}}
-return tasks;},updateWhatRasterizedLinkState_(){const tasks=this.getWhatRasterized_();if(tasks.length){Polymer.dom(this.whatRasterizedLink_).textContent=tasks.length+' raster tasks';this.whatRasterizedLink_.style.display='';}else{Polymer.dom(this.whatRasterizedLink_).textContent='';this.whatRasterizedLink_.style.display='none';}},onWhatRasterizedLinkClicked_(){const tasks=this.getWhatRasterized_();const event=new tr.model.RequestSelectionChangeEvent();event.selection=new tr.model.EventSet(tasks);this.dispatchEvent(event);}};return{LayerTreeQuadStackView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const constants=tr.e.cc.constants;const LayerView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-view');LayerView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexDirection='column';this.style.display='flex';this.style.left=0;this.style.position='relative';this.style.top=0;this.layerTreeQuadStackView_=new tr.ui.e.chrome.cc.LayerTreeQuadStackView();this.dragBar_=document.createElement('tr-ui-b-drag-handle');this.analysisEl_=document.createElement('tr-ui-e-chrome-cc-layer-view-analysis');this.analysisEl_.style.height='150px';this.analysisEl_.style.overflowY='auto';this.analysisEl_.addEventListener('requestSelectionChange',this.onRequestSelectionChangeFromAnalysisEl_.bind(this));this.dragBar_.target=this.analysisEl_;Polymer.dom(this).appendChild(this.layerTreeQuadStackView_);Polymer.dom(this).appendChild(this.dragBar_);Polymer.dom(this).appendChild(this.analysisEl_);this.layerTreeQuadStackView_.addEventListener('selection-change',function(){this.layerTreeQuadStackViewSelectionChanged_();}.bind(this));this.layerTreeQuadStackViewSelectionChanged_();},get layerTreeImpl(){return this.layerTreeQuadStackView_.layerTreeImpl;},set layerTreeImpl(newValue){return this.layerTreeQuadStackView_.layerTreeImpl=newValue;},set isRenderPassQuads(newValue){return this.layerTreeQuadStackView_.isRenderPassQuads=newValue;},get selection(){return this.layerTreeQuadStackView_.selection;},set selection(newValue){this.layerTreeQuadStackView_.selection=newValue;},regenerateContent(){this.layerTreeQuadStackView_.regenerateContent();},layerTreeQuadStackViewSelectionChanged_(){const selection=this.layerTreeQuadStackView_.selection;if(selection){this.dragBar_.style.display='';this.analysisEl_.style.display='';Polymer.dom(this.analysisEl_).textContent='';const layer=selection.layer;if(layer&&layer.args&&layer.args.pictures){Polymer.dom(this.analysisEl_).appendChild(this.createPictureBtn_(layer.args.pictures));}
-const analysis=selection.createAnalysis();Polymer.dom(this.analysisEl_).appendChild(analysis);for(const child of this.analysisEl_.children){child.style.userSelect='text';}}else{this.dragBar_.style.display='none';this.analysisEl_.style.display='none';const analysis=Polymer.dom(this.analysisEl_).firstChild;if(analysis){Polymer.dom(this.analysisEl_).removeChild(analysis);}
-this.layerTreeQuadStackView_.style.height=window.getComputedStyle(this).height;}
-tr.b.dispatchSimpleEvent(this,'selection-change');},createPictureBtn_(pictures){if(!(pictures instanceof Array)){pictures=[pictures];}
-const link=document.createElement('tr-ui-a-analysis-link');link.selection=function(){const layeredPicture=new tr.e.cc.LayeredPicture(pictures);const snapshot=new tr.e.cc.PictureSnapshot(layeredPicture);snapshot.picture=layeredPicture;const selection=new tr.model.EventSet();selection.push(snapshot);return selection;};Polymer.dom(link).textContent='View in Picture Debugger';return link;},onRequestSelectionChangeFromAnalysisEl_(e){if(!(e.selection instanceof tr.ui.e.chrome.cc.Selection)){return;}
-e.stopPropagation();this.selection=e.selection;},get extraHighlightsByLayerId(){return this.layerTreeQuadStackView_.extraHighlightsByLayerId;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.layerTreeQuadStackView_.extraHighlightsByLayerId=extraHighlightsByLayerId;}};return{LayerView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const LayerTreeHostImplSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-layer-tree-host-impl-snapshot-view',tr.ui.analysis.ObjectSnapshotView);LayerTreeHostImplSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-lthi-s-view');this.style.display='flex';this.style.flexDirection='row';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.selection_=undefined;this.layerPicker_=new tr.ui.e.chrome.cc.LayerPicker();this.layerPicker_.style.flexGrow=1;this.layerPicker_.style.flexShrink=1;this.layerPicker_.style.flexBasis='auto';this.layerPicker_.addEventListener('selection-change',this.onLayerPickerSelectionChanged_.bind(this));this.layerView_=new tr.ui.e.chrome.cc.LayerView();this.layerView_.addEventListener('selection-change',this.onLayerViewSelectionChanged_.bind(this));this.dragHandle_=document.createElement('tr-ui-b-drag-handle');this.dragHandle_.style.flexGrow=0;this.dragHandle_.style.flexShrink=0;this.dragHandle_.style.flexBasis='auto';this.dragHandle_.horizontal=false;this.dragHandle_.target=this.layerView_;Polymer.dom(this).appendChild(this.layerPicker_);Polymer.dom(this).appendChild(this.dragHandle_);Polymer.dom(this).appendChild(this.layerView_);this.onLayerViewSelectionChanged_();this.onLayerPickerSelectionChanged_();},get objectSnapshot(){return this.objectSnapshot_;},set objectSnapshot(objectSnapshot){this.objectSnapshot_=objectSnapshot;const lthi=this.objectSnapshot;let layerTreeImpl;if(lthi){layerTreeImpl=lthi.getTree(this.layerPicker_.whichTree);}
-this.layerPicker_.lthiSnapshot=lthi;this.layerView_.layerTreeImpl=layerTreeImpl;this.layerView_.regenerateContent();if(!this.selection_)return;this.selection=this.selection_.findEquivalent(lthi);},get selection(){return this.selection_;},set selection(selection){if(this.selection_===selection)return;this.selection_=selection;this.layerPicker_.selection=selection;this.layerView_.selection=selection;tr.b.dispatchSimpleEvent(this,'cc-selection-change');},onLayerPickerSelectionChanged_(){this.selection_=this.layerPicker_.selection;this.layerView_.selection=this.selection;this.layerView_.layerTreeImpl=this.layerPicker_.layerTreeImpl;this.layerView_.isRenderPassQuads=this.layerPicker_.isRenderPassQuads;this.layerView_.regenerateContent();tr.b.dispatchSimpleEvent(this,'cc-selection-change');},onLayerViewSelectionChanged_(){this.selection_=this.layerView_.selection;this.layerPicker_.selection=this.selection;tr.b.dispatchSimpleEvent(this,'cc-selection-change');},get extraHighlightsByLayerId(){return this.layerView_.extraHighlightsByLayerId;},set extraHighlightsByLayerId(extraHighlightsByLayerId){this.layerView_.extraHighlightsByLayerId=extraHighlightsByLayerId;}};tr.ui.analysis.ObjectSnapshotView.register(LayerTreeHostImplSnapshotView,{typeName:'cc::LayerTreeHostImpl'});return{LayerTreeHostImplSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const OPS_TIMING_ITERATIONS=3;const CHART_PADDING_LEFT=65;const CHART_PADDING_RIGHT=40;const AXIS_PADDING_LEFT=60;const AXIS_PADDING_RIGHT=35;const AXIS_PADDING_TOP=25;const AXIS_PADDING_BOTTOM=45;const AXIS_LABEL_PADDING=5;const AXIS_TICK_SIZE=10;const LABEL_PADDING=5;const LABEL_INTERLEAVE_OFFSET=15;const BAR_PADDING=5;const VERTICAL_TICKS=5;const HUE_CHAR_CODE_ADJUSTMENT=5.7;const PictureOpsChartSummaryView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-chart-summary-view');PictureOpsChartSummaryView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.flexGrow=0;this.style.flexShrink=0;this.style.flexBasis='auto';this.style.fontSize=0;this.style.margin=0;this.style.minHeight='200px';this.style.minWidth='200px';this.style.overflow='hidden';this.style.padding=0;this.picture_=undefined;this.pictureDataProcessed_=false;this.chartScale_=window.devicePixelRatio;this.chart_=document.createElement('canvas');this.chartCtx_=this.chart_.getContext('2d');Polymer.dom(this).appendChild(this.chart_);this.opsTimingData_=[];this.chartWidth_=0;this.chartHeight_=0;this.requiresRedraw_=true;this.currentBarMouseOverTarget_=null;this.chart_.addEventListener('mousemove',this.onMouseMove_.bind(this));},get requiresRedraw(){return this.requiresRedraw_;},set requiresRedraw(requiresRedraw){this.requiresRedraw_=requiresRedraw;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.pictureDataProcessed_=false;if(Polymer.dom(this).classList.contains('hidden'))return;this.processPictureData_();this.requiresRedraw=true;this.updateChartContents();},hide(){Polymer.dom(this).classList.add('hidden');this.style.display='none';},show(){Polymer.dom(this).classList.remove('hidden');this.style.display='';if(this.pictureDataProcessed_)return;this.processPictureData_();this.requiresRedraw=true;this.updateChartContents();},onMouseMove_(e){const lastBarMouseOverTarget=this.currentBarMouseOverTarget_;this.currentBarMouseOverTarget_=null;const x=e.offsetX;const y=e.offsetY;const chartLeft=CHART_PADDING_LEFT;const chartRight=this.chartWidth_-CHART_PADDING_RIGHT;const chartTop=AXIS_PADDING_TOP;const chartBottom=this.chartHeight_-AXIS_PADDING_BOTTOM;const chartInnerWidth=chartRight-chartLeft;if(x>chartLeft&&x<chartRight&&y>chartTop&&y<chartBottom){this.currentBarMouseOverTarget_=Math.floor((x-chartLeft)/chartInnerWidth*this.opsTimingData_.length);this.currentBarMouseOverTarget_=tr.b.math.clamp(this.currentBarMouseOverTarget_,0,this.opsTimingData_.length-1);}
-if(this.currentBarMouseOverTarget_===lastBarMouseOverTarget)return;this.drawChartContents_();},updateChartContents(){if(this.requiresRedraw){this.updateChartDimensions_();}
-this.drawChartContents_();},updateChartDimensions_(){this.chartWidth_=this.offsetWidth;this.chartHeight_=this.offsetHeight;this.chart_.width=this.chartWidth_*this.chartScale_;this.chart_.height=this.chartHeight_*this.chartScale_;this.chart_.style.width=this.chartWidth_+'px';this.chart_.style.height=this.chartHeight_+'px';this.chartCtx_.scale(this.chartScale_,this.chartScale_);},processPictureData_(){this.resetOpsTimingData_();this.pictureDataProcessed_=true;if(!this.picture_)return;let ops=this.picture_.getOps();if(!ops)return;ops=this.picture_.tagOpsWithTimings(ops);if(ops[0].cmd_time===undefined)return;this.collapseOpsToTimingBuckets_(ops);},drawChartContents_(){this.clearChartContents_();if(this.opsTimingData_.length===0){this.showNoTimingDataMessage_();return;}
-this.drawChartAxes_();this.drawBars_();this.drawLineAtBottomOfChart_();if(this.currentBarMouseOverTarget_===null)return;this.drawTooltip_();},drawLineAtBottomOfChart_(){this.chartCtx_.strokeStyle='#AAA';this.chartCtx_.moveTo(0,this.chartHeight_-0.5);this.chartCtx_.lineTo(this.chartWidth_,this.chartHeight_-0.5);this.chartCtx_.stroke();},drawTooltip_(){const tooltipData=this.opsTimingData_[this.currentBarMouseOverTarget_];const tooltipTitle=tooltipData.cmd_string;const tooltipTime=tooltipData.cmd_time.toFixed(4);const tooltipWidth=110;const tooltipHeight=40;const chartInnerWidth=this.chartWidth_-CHART_PADDING_RIGHT-
-CHART_PADDING_LEFT;const barWidth=chartInnerWidth/this.opsTimingData_.length;const tooltipOffset=Math.round((tooltipWidth-barWidth)*0.5);const left=CHART_PADDING_LEFT+this.currentBarMouseOverTarget_*barWidth-tooltipOffset;const top=Math.round((this.chartHeight_-tooltipHeight)*0.5);this.chartCtx_.save();this.chartCtx_.shadowOffsetX=0;this.chartCtx_.shadowOffsetY=5;this.chartCtx_.shadowBlur=4;this.chartCtx_.shadowColor='rgba(0,0,0,0.4)';this.chartCtx_.strokeStyle='#888';this.chartCtx_.fillStyle='#EEE';this.chartCtx_.fillRect(left,top,tooltipWidth,tooltipHeight);this.chartCtx_.shadowColor='transparent';this.chartCtx_.translate(0.5,0.5);this.chartCtx_.strokeRect(left,top,tooltipWidth,tooltipHeight);this.chartCtx_.restore();this.chartCtx_.fillStyle='#222';this.chartCtx_.textBaseline='top';this.chartCtx_.font='800 12px Arial';this.chartCtx_.fillText(tooltipTitle,left+8,top+8);this.chartCtx_.fillStyle='#555';this.chartCtx_.textBaseline='top';this.chartCtx_.font='400 italic 10px Arial';this.chartCtx_.fillText('Total: '+tooltipTime+'ms',left+8,top+22);},drawBars_(){const len=this.opsTimingData_.length;const max=this.opsTimingData_[0].cmd_time;const min=this.opsTimingData_[len-1].cmd_time;const width=this.chartWidth_-CHART_PADDING_LEFT-CHART_PADDING_RIGHT;const height=this.chartHeight_-AXIS_PADDING_TOP-AXIS_PADDING_BOTTOM;const barWidth=Math.floor(width/len);let opData;let opTiming;let opHeight;let opLabel;let barLeft;for(let b=0;b<len;b++){opData=this.opsTimingData_[b];opTiming=opData.cmd_time/max;opHeight=Math.round(Math.max(1,opTiming*height));opLabel=opData.cmd_string;barLeft=CHART_PADDING_LEFT+b*barWidth;this.chartCtx_.fillStyle=this.getOpColor_(opLabel);this.chartCtx_.fillRect(barLeft+BAR_PADDING,AXIS_PADDING_TOP+
-height-opHeight,barWidth-2*BAR_PADDING,opHeight);}},getOpColor_(opName){const characters=opName.split('');const hue=characters.reduce(this.reduceNameToHue,0)%360;return'hsl('+hue+', 30%, 50%)';},reduceNameToHue(previousValue,currentValue,index,array){return Math.round(previousValue+currentValue.charCodeAt(0)*HUE_CHAR_CODE_ADJUSTMENT);},drawChartAxes_(){const len=this.opsTimingData_.length;const max=this.opsTimingData_[0].cmd_time;const min=this.opsTimingData_[len-1].cmd_time;const width=this.chartWidth_-AXIS_PADDING_LEFT-AXIS_PADDING_RIGHT;const height=this.chartHeight_-AXIS_PADDING_TOP-AXIS_PADDING_BOTTOM;const totalBarWidth=this.chartWidth_-CHART_PADDING_LEFT-
-CHART_PADDING_RIGHT;const barWidth=Math.floor(totalBarWidth/len);const tickYInterval=height/(VERTICAL_TICKS-1);let tickYPosition=0;const tickValInterval=(max-min)/(VERTICAL_TICKS-1);let tickVal=0;this.chartCtx_.fillStyle='#333';this.chartCtx_.strokeStyle='#777';this.chartCtx_.save();this.chartCtx_.translate(0.5,0.5);this.chartCtx_.save();this.chartCtx_.translate(AXIS_PADDING_LEFT,AXIS_PADDING_TOP);this.chartCtx_.moveTo(0,0);this.chartCtx_.lineTo(0,height);this.chartCtx_.lineTo(width,height);this.chartCtx_.font='10px Arial';this.chartCtx_.textAlign='right';this.chartCtx_.textBaseline='middle';for(let t=0;t<VERTICAL_TICKS;t++){tickYPosition=Math.round(t*tickYInterval);tickVal=(max-t*tickValInterval).toFixed(4);this.chartCtx_.moveTo(0,tickYPosition);this.chartCtx_.lineTo(-AXIS_TICK_SIZE,tickYPosition);this.chartCtx_.fillText(tickVal,-AXIS_TICK_SIZE-AXIS_LABEL_PADDING,tickYPosition);}
-this.chartCtx_.stroke();this.chartCtx_.restore();this.chartCtx_.save();this.chartCtx_.translate(CHART_PADDING_LEFT+Math.round(barWidth*0.5),AXIS_PADDING_TOP+height+LABEL_PADDING);this.chartCtx_.font='10px Arial';this.chartCtx_.textAlign='center';this.chartCtx_.textBaseline='top';let labelTickLeft;let labelTickBottom;for(let l=0;l<len;l++){labelTickLeft=Math.round(l*barWidth);labelTickBottom=l%2*LABEL_INTERLEAVE_OFFSET;this.chartCtx_.save();this.chartCtx_.moveTo(labelTickLeft,-LABEL_PADDING);this.chartCtx_.lineTo(labelTickLeft,labelTickBottom);this.chartCtx_.stroke();this.chartCtx_.restore();this.chartCtx_.fillText(this.opsTimingData_[l].cmd_string,labelTickLeft,labelTickBottom);}
-this.chartCtx_.restore();this.chartCtx_.restore();},clearChartContents_(){this.chartCtx_.clearRect(0,0,this.chartWidth_,this.chartHeight_);},showNoTimingDataMessage_(){this.chartCtx_.font='800 italic 14px Arial';this.chartCtx_.fillStyle='#333';this.chartCtx_.textAlign='center';this.chartCtx_.textBaseline='middle';this.chartCtx_.fillText('No timing data available.',this.chartWidth_*0.5,this.chartHeight_*0.5);},collapseOpsToTimingBuckets_(ops){const opsTimingDataIndexHash_={};const timingData=this.opsTimingData_;let op;let opIndex;for(let i=0;i<ops.length;i++){op=ops[i];if(op.cmd_time===undefined)continue;opIndex=opsTimingDataIndexHash_[op.cmd_string]||null;if(opIndex===null){timingData.push({cmd_time:0,cmd_string:op.cmd_string});opIndex=timingData.length-1;opsTimingDataIndexHash_[op.cmd_string]=opIndex;}
-timingData[opIndex].cmd_time+=op.cmd_time;}
-timingData.sort(this.sortTimingBucketsByOpTimeDescending_);this.collapseTimingBucketsToOther_(4);},collapseTimingBucketsToOther_(count){const timingData=this.opsTimingData_;const otherSource=timingData.splice(count,timingData.length-count);let otherDestination=null;if(!otherSource.length)return;timingData.push({cmd_time:0,cmd_string:'Other'});otherDestination=timingData[timingData.length-1];for(let i=0;i<otherSource.length;i++){otherDestination.cmd_time+=otherSource[i].cmd_time;}},sortTimingBucketsByOpTimeDescending_(a,b){return b.cmd_time-a.cmd_time;},resetOpsTimingData_(){this.opsTimingData_.length=0;}};return{PictureOpsChartSummaryView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const BAR_PADDING=1;const BAR_WIDTH=5;const CHART_PADDING_LEFT=65;const CHART_PADDING_RIGHT=30;const CHART_PADDING_BOTTOM=35;const CHART_PADDING_TOP=20;const AXIS_PADDING_LEFT=55;const AXIS_PADDING_RIGHT=30;const AXIS_PADDING_BOTTOM=35;const AXIS_PADDING_TOP=20;const AXIS_TICK_SIZE=5;const AXIS_LABEL_PADDING=5;const VERTICAL_TICKS=5;const HUE_CHAR_CODE_ADJUSTMENT=5.7;const PictureOpsChartView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-ops-chart-view');PictureOpsChartView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.style.display='block';this.style.height='180px';this.style.margin=0;this.style.padding=0;this.style.position='relative';this.picture_=undefined;this.pictureOps_=undefined;this.opCosts_=undefined;this.chartScale_=window.devicePixelRatio;this.chart_=document.createElement('canvas');this.chartCtx_=this.chart_.getContext('2d');Polymer.dom(this).appendChild(this.chart_);this.selectedOpIndex_=undefined;this.chartWidth_=0;this.chartHeight_=0;this.dimensionsHaveChanged_=true;this.currentBarMouseOverTarget_=undefined;this.ninetyFifthPercentileCost_=0;this.totalOpCost_=0;this.chart_.addEventListener('click',this.onClick_.bind(this));this.chart_.addEventListener('mousemove',this.onMouseMove_.bind(this));this.usePercentileScale_=false;this.usePercentileScaleCheckbox_=tr.ui.b.createCheckBox(this,'usePercentileScale','PictureOpsChartView.usePercentileScale',false,'Limit to 95%-ile');Polymer.dom(this.usePercentileScaleCheckbox_).classList.add('use-percentile-scale');this.usePercentileScaleCheckbox_.style.position='absolute';this.usePercentileScaleCheckbox_.style.left=0;this.usePercentileScaleCheckbox_.style.top=0;Polymer.dom(this).appendChild(this.usePercentileScaleCheckbox_);},get dimensionsHaveChanged(){return this.dimensionsHaveChanged_;},set dimensionsHaveChanged(dimensionsHaveChanged){this.dimensionsHaveChanged_=dimensionsHaveChanged;},get usePercentileScale(){return this.usePercentileScale_;},set usePercentileScale(usePercentileScale){this.usePercentileScale_=usePercentileScale;this.drawChartContents_();},get numOps(){return this.opCosts_.length;},get selectedOpIndex(){return this.selectedOpIndex_;},set selectedOpIndex(selectedOpIndex){if(selectedOpIndex<0)throw new Error('Invalid index');if(selectedOpIndex>=this.numOps)throw new Error('Invalid index');this.selectedOpIndex_=selectedOpIndex;},get picture(){return this.picture_;},set picture(picture){this.picture_=picture;this.pictureOps_=picture.tagOpsWithTimings(picture.getOps());this.currentBarMouseOverTarget_=undefined;this.processPictureData_();this.dimensionsHaveChanged=true;},processPictureData_(){if(this.pictureOps_===undefined)return;let totalOpCost=0;this.opCosts_=this.pictureOps_.map(function(op){totalOpCost+=op.cmd_time;return op.cmd_time;});this.opCosts_.sort();const ninetyFifthPercentileCostIndex=Math.floor(this.opCosts_.length*0.95);this.ninetyFifthPercentileCost_=this.opCosts_[ninetyFifthPercentileCostIndex];this.maxCost_=this.opCosts_[this.opCosts_.length-1];this.totalOpCost_=totalOpCost;},extractBarIndex_(e){let index=undefined;if(this.pictureOps_===undefined||this.pictureOps_.length===0){return index;}
-const x=e.offsetX;const y=e.offsetY;const totalBarWidth=(BAR_WIDTH+BAR_PADDING)*this.pictureOps_.length;const chartLeft=CHART_PADDING_LEFT;const chartTop=0;const chartBottom=this.chartHeight_-CHART_PADDING_BOTTOM;const chartRight=chartLeft+totalBarWidth;if(x<chartLeft||x>chartRight||y<chartTop||y>chartBottom){return index;}
-index=Math.floor((x-chartLeft)/totalBarWidth*this.pictureOps_.length);index=tr.b.math.clamp(index,0,this.pictureOps_.length-1);return index;},onClick_(e){const barClicked=this.extractBarIndex_(e);if(barClicked===undefined)return;if(barClicked===this.selectedOpIndex){this.selectedOpIndex=undefined;}else{this.selectedOpIndex=barClicked;}
-e.preventDefault();tr.b.dispatchSimpleEvent(this,'selection-changed',false);},onMouseMove_(e){const lastBarMouseOverTarget=this.currentBarMouseOverTarget_;this.currentBarMouseOverTarget_=this.extractBarIndex_(e);if(this.currentBarMouseOverTarget_===lastBarMouseOverTarget){return;}
-this.drawChartContents_();},scrollSelectedItemIntoViewIfNecessary(){if(this.selectedOpIndex===undefined){return;}
-const width=this.offsetWidth;const left=this.scrollLeft;const right=left+width;const targetLeft=CHART_PADDING_LEFT+
-(BAR_WIDTH+BAR_PADDING)*this.selectedOpIndex;if(targetLeft>left&&targetLeft<right){return;}
-this.scrollLeft=(targetLeft-width*0.5);},updateChartContents(){if(this.dimensionsHaveChanged){this.updateChartDimensions_();}
-this.drawChartContents_();},updateChartDimensions_(){if(!this.pictureOps_)return;let width=CHART_PADDING_LEFT+CHART_PADDING_RIGHT+
-((BAR_WIDTH+BAR_PADDING)*this.pictureOps_.length);if(width<this.offsetWidth){width=this.offsetWidth;}
-this.chartWidth_=width;this.chartHeight_=this.getBoundingClientRect().height;this.chart_.width=this.chartWidth_*this.chartScale_;this.chart_.height=this.chartHeight_*this.chartScale_;this.chart_.style.width=this.chartWidth_+'px';this.chart_.style.height=this.chartHeight_+'px';this.chartCtx_.scale(this.chartScale_,this.chartScale_);this.dimensionsHaveChanged=false;},drawChartContents_(){this.clearChartContents_();if(this.pictureOps_===undefined||this.pictureOps_.length===0||this.pictureOps_[0].cmd_time===undefined){this.showNoTimingDataMessage_();return;}
-this.drawSelection_();this.drawBars_();this.drawChartAxes_();this.drawLinesAtTickMarks_();this.drawLineAtBottomOfChart_();if(this.currentBarMouseOverTarget_===undefined){return;}
-this.drawTooltip_();},drawSelection_(){if(this.selectedOpIndex===undefined){return;}
-const width=(BAR_WIDTH+BAR_PADDING)*this.selectedOpIndex;this.chartCtx_.fillStyle='rgb(223, 235, 230)';this.chartCtx_.fillRect(CHART_PADDING_LEFT,CHART_PADDING_TOP,width,this.chartHeight_-CHART_PADDING_TOP-CHART_PADDING_BOTTOM);},drawChartAxes_(){const min=this.opCosts_[0];const max=this.opCosts_[this.opCosts_.length-1];const height=this.chartHeight_-AXIS_PADDING_TOP-AXIS_PADDING_BOTTOM;const tickYInterval=height/(VERTICAL_TICKS-1);let tickYPosition=0;const tickValInterval=(max-min)/(VERTICAL_TICKS-1);let tickVal=0;this.chartCtx_.fillStyle='#333';this.chartCtx_.strokeStyle='#777';this.chartCtx_.save();this.chartCtx_.translate(0.5,0.5);this.chartCtx_.beginPath();this.chartCtx_.moveTo(AXIS_PADDING_LEFT,AXIS_PADDING_TOP);this.chartCtx_.lineTo(AXIS_PADDING_LEFT,this.chartHeight_-
-AXIS_PADDING_BOTTOM);this.chartCtx_.lineTo(this.chartWidth_-AXIS_PADDING_RIGHT,this.chartHeight_-AXIS_PADDING_BOTTOM);this.chartCtx_.stroke();this.chartCtx_.closePath();this.chartCtx_.translate(AXIS_PADDING_LEFT,AXIS_PADDING_TOP);this.chartCtx_.font='10px Arial';this.chartCtx_.textAlign='right';this.chartCtx_.textBaseline='middle';this.chartCtx_.beginPath();for(let t=0;t<VERTICAL_TICKS;t++){tickYPosition=Math.round(t*tickYInterval);tickVal=(max-t*tickValInterval).toFixed(4);this.chartCtx_.moveTo(0,tickYPosition);this.chartCtx_.lineTo(-AXIS_TICK_SIZE,tickYPosition);this.chartCtx_.fillText(tickVal,-AXIS_TICK_SIZE-AXIS_LABEL_PADDING,tickYPosition);}
-this.chartCtx_.stroke();this.chartCtx_.closePath();this.chartCtx_.restore();},drawLinesAtTickMarks_(){const height=this.chartHeight_-AXIS_PADDING_TOP-AXIS_PADDING_BOTTOM;const width=this.chartWidth_-AXIS_PADDING_LEFT-AXIS_PADDING_RIGHT;const tickYInterval=height/(VERTICAL_TICKS-1);let tickYPosition=0;this.chartCtx_.save();this.chartCtx_.translate(AXIS_PADDING_LEFT+0.5,AXIS_PADDING_TOP+0.5);this.chartCtx_.beginPath();this.chartCtx_.strokeStyle='rgba(0,0,0,0.05)';for(let t=0;t<VERTICAL_TICKS;t++){tickYPosition=Math.round(t*tickYInterval);this.chartCtx_.moveTo(0,tickYPosition);this.chartCtx_.lineTo(width,tickYPosition);this.chartCtx_.stroke();}
-this.chartCtx_.restore();this.chartCtx_.closePath();},drawLineAtBottomOfChart_(){this.chartCtx_.strokeStyle='#AAA';this.chartCtx_.beginPath();this.chartCtx_.moveTo(0,this.chartHeight_-0.5);this.chartCtx_.lineTo(this.chartWidth_,this.chartHeight_-0.5);this.chartCtx_.stroke();this.chartCtx_.closePath();},drawTooltip_(){const tooltipData=this.pictureOps_[this.currentBarMouseOverTarget_];const tooltipTitle=tooltipData.cmd_string;const tooltipTime=tooltipData.cmd_time.toFixed(4);const toolTipTimePercentage=((tooltipData.cmd_time/this.totalOpCost_)*100).toFixed(2);const tooltipWidth=120;const tooltipHeight=40;const chartInnerWidth=this.chartWidth_-CHART_PADDING_RIGHT-
-CHART_PADDING_LEFT;const barWidth=BAR_WIDTH+BAR_PADDING;const tooltipOffset=Math.round((tooltipWidth-barWidth)*0.5);const left=CHART_PADDING_LEFT+this.currentBarMouseOverTarget_*barWidth-tooltipOffset;const top=Math.round((this.chartHeight_-tooltipHeight)*0.5);this.chartCtx_.save();this.chartCtx_.shadowOffsetX=0;this.chartCtx_.shadowOffsetY=5;this.chartCtx_.shadowBlur=4;this.chartCtx_.shadowColor='rgba(0,0,0,0.4)';this.chartCtx_.strokeStyle='#888';this.chartCtx_.fillStyle='#EEE';this.chartCtx_.fillRect(left,top,tooltipWidth,tooltipHeight);this.chartCtx_.shadowColor='transparent';this.chartCtx_.translate(0.5,0.5);this.chartCtx_.strokeRect(left,top,tooltipWidth,tooltipHeight);this.chartCtx_.restore();this.chartCtx_.fillStyle='#222';this.chartCtx_.textAlign='left';this.chartCtx_.textBaseline='top';this.chartCtx_.font='800 12px Arial';this.chartCtx_.fillText(tooltipTitle,left+8,top+8);this.chartCtx_.fillStyle='#555';this.chartCtx_.font='400 italic 10px Arial';this.chartCtx_.fillText(tooltipTime+'ms ('+
-toolTipTimePercentage+'%)',left+8,top+22);},drawBars_(){let op;let opColor=0;let opHeight=0;const opWidth=BAR_WIDTH+BAR_PADDING;let opHover=false;const bottom=this.chartHeight_-CHART_PADDING_BOTTOM;const maxHeight=this.chartHeight_-CHART_PADDING_BOTTOM-
-CHART_PADDING_TOP;let maxValue;if(this.usePercentileScale){maxValue=this.ninetyFifthPercentileCost_;}else{maxValue=this.maxCost_;}
-for(let b=0;b<this.pictureOps_.length;b++){op=this.pictureOps_[b];opHeight=Math.round((op.cmd_time/maxValue)*maxHeight);opHeight=Math.max(opHeight,1);opHover=(b===this.currentBarMouseOverTarget_);opColor=this.getOpColor_(op.cmd_string,opHover);if(b===this.selectedOpIndex){this.chartCtx_.fillStyle='#FFFF00';}else{this.chartCtx_.fillStyle=opColor;}
-this.chartCtx_.fillRect(CHART_PADDING_LEFT+b*opWidth,bottom-opHeight,BAR_WIDTH,opHeight);}},getOpColor_(opName,hover){const characters=opName.split('');const hue=characters.reduce(this.reduceNameToHue,0)%360;const saturation=30;const lightness=hover?'75%':'50%';return'hsl('+hue+', '+saturation+'%, '+lightness+'%)';},reduceNameToHue(previousValue,currentValue,index,array){return Math.round(previousValue+currentValue.charCodeAt(0)*HUE_CHAR_CODE_ADJUSTMENT);},clearChartContents_(){this.chartCtx_.clearRect(0,0,this.chartWidth_,this.chartHeight_);},showNoTimingDataMessage_(){this.chartCtx_.font='800 italic 14px Arial';this.chartCtx_.fillStyle='#333';this.chartCtx_.textAlign='center';this.chartCtx_.textBaseline='middle';this.chartCtx_.fillText('No timing data available.',this.chartWidth_*0.5,this.chartHeight_*0.5);}};return{PictureOpsChartView,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const THIS_DOC=document.currentScript.ownerDocument;const PictureDebugger=tr.ui.b.define('tr-ui-e-chrome-cc-picture-debugger');PictureDebugger.prototype={__proto__:HTMLDivElement.prototype,decorate(){const node=tr.ui.b.instantiateTemplate('#tr-ui-e-chrome-cc-picture-debugger-template',THIS_DOC);Polymer.dom(this).appendChild(node);this.style.display='flex';this.style.flexGrow=1;this.style.flexShrink=1;this.style.flexBasis='auto';this.style.flexDirection='row';const title=this.querySelector('.title');title.style.fontWeight='bold';title.style.marginLeft='5px';title.style.marginRight='5px';this.pictureAsImageData_=undefined;this.showOverdraw_=false;this.zoomScaleValue_=1;this.sizeInfo_=Polymer.dom(this).querySelector('.size');this.rasterArea_=Polymer.dom(this).querySelector('raster-area');this.rasterArea_.style.backgroundColor='#ddd';this.rasterArea_.style.minHeight='200px';this.rasterArea_.style.minWidth='200px';this.rasterArea_.style.overflowY='auto';this.rasterArea_.style.paddingLeft='5px';this.rasterCanvas_=Polymer.dom(this.rasterArea_).querySelector('canvas');this.rasterCtx_=this.rasterCanvas_.getContext('2d');this.filename_=Polymer.dom(this).querySelector('.filename');this.filename_.style.userSelect='text';this.filename_.style.marginLeft='5px';this.drawOpsChartSummaryView_=new tr.ui.e.chrome.cc.PictureOpsChartSummaryView();this.drawOpsChartView_=new tr.ui.e.chrome.cc.PictureOpsChartView();this.drawOpsChartView_.addEventListener('selection-changed',this.onChartBarClicked_.bind(this));this.exportButton_=Polymer.dom(this).querySelector('.export');this.exportButton_.addEventListener('click',this.onSaveAsSkPictureClicked_.bind(this));this.trackMouse_();const overdrawCheckbox=tr.ui.b.createCheckBox(this,'showOverdraw','pictureView.showOverdraw',false,'Show overdraw');const chartCheckbox=tr.ui.b.createCheckBox(this,'showSummaryChart','pictureView.showSummaryChart',false,'Show timing summary');const pictureInfo=Polymer.dom(this).querySelector('picture-info');pictureInfo.style.flexGrow=0;pictureInfo.style.flexShrink=0;pictureInfo.style.flexBasis='auto';pictureInfo.style.paddingTop='2px';Polymer.dom(pictureInfo).appendChild(overdrawCheckbox);Polymer.dom(pictureInfo).appendChild(chartCheckbox);this.drawOpsView_=new tr.ui.e.chrome.cc.PictureOpsListView();this.drawOpsView_.addEventListener('selection-changed',this.onChangeDrawOps_.bind(this));const leftPanel=Polymer.dom(this).querySelector('left-panel');leftPanel.style.flexDirection='column';leftPanel.style.display='flex';leftPanel.style.minWidth='300px';Polymer.dom(leftPanel).appendChild(this.drawOpsChartSummaryView_);Polymer.dom(leftPanel).appendChild(this.drawOpsView_);const middleDragHandle=document.createElement('tr-ui-b-drag-handle');middleDragHandle.style.flexGrow=0;middleDragHandle.style.flexShrink=0;middleDragHandle.style.flexBasis='auto';middleDragHandle.horizontal=false;middleDragHandle.target=leftPanel;const rightPanel=Polymer.dom(this).querySelector('right-panel');rightPanel.style.flexGrow=1;rightPanel.style.flexShrink=1;rightPanel.style.flexBasis='auto';rightPanel.style.flexDirection='column';rightPanel.style.display='flex';const chartView=Polymer.dom(rightPanel).querySelector('tr-ui-e-chrome-cc-picture-ops-chart-view');chartView.style.minHeight='150px';chartView.style.minWidth=0;chartView.style.overflowX='auto';chartView.style.overflowY='hidden';rightPanel.replaceChild(this.drawOpsChartView_,chartView);this.infoBar_=document.createElement('tr-ui-b-info-bar');Polymer.dom(this.rasterArea_).appendChild(this.infoBar_);Polymer.dom(this).insertBefore(middleDragHandle,rightPanel);this.picture_=undefined;const hkc=document.createElement('tv-ui-b-hotkey-controller');hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',thisArg:this,keyCode:'h'.charCodeAt(0),callback(e){this.moveSelectedOpBy(-1);e.stopPropagation();}}));hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',thisArg:this,keyCode:'l'.charCodeAt(0),callback(e){this.moveSelectedOpBy(1);e.stopPropagation();}}));Polymer.dom(this).appendChild(hkc);this.mutationObserver_=new MutationObserver(this.onMutation_.bind(this));this.mutationObserver_.observe(leftPanel,{attributes:true});},onMutation_(mutations){for(let m=0;m<mutations.length;m++){if(mutations[m].attributeName==='style'){this.drawOpsChartSummaryView_.requiresRedraw=true;this.drawOpsChartSummaryView_.updateChartContents();this.drawOpsChartView_.dimensionsHaveChanged=true;this.drawOpsChartView_.updateChartContents();break;}}},onSaveAsSkPictureClicked_(){const rawData=tr.b.Base64.atob(this.picture_.getBase64SkpData());const length=rawData.length;const arrayBuffer=new ArrayBuffer(length);const uint8Array=new Uint8Array(arrayBuffer);for(let c=0;c<length;c++){uint8Array[c]=rawData.charCodeAt(c);}
-const blob=new Blob([uint8Array],{type:'application/octet-binary'});const blobUrl=window.webkitURL.createObjectURL(blob);const link=document.createElementNS('http://www.w3.org/1999/xhtml','a');link.href=blobUrl;link.download=this.filename_.value;const event=document.createEvent('MouseEvents');event.initMouseEvent('click',true,false,window,0,0,0,0,0,false,false,false,false,0,null);link.dispatchEvent(event);},get picture(){return this.picture_;},set picture(picture){this.drawOpsView_.picture=picture;this.drawOpsChartView_.picture=picture;this.drawOpsChartSummaryView_.picture=picture;this.picture_=picture;this.exportButton_.disabled=!this.picture_.canSave;if(picture){const size=this.getRasterCanvasSize_();this.rasterCanvas_.width=size.width;this.rasterCanvas_.height=size.height;}
-const bounds=this.rasterArea_.getBoundingClientRect();const selectorBounds=this.mouseModeSelector_.getBoundingClientRect();this.mouseModeSelector_.pos={x:(bounds.right-selectorBounds.width-10),y:bounds.top};this.rasterize_();this.scheduleUpdateContents_();},getRasterCanvasSize_(){const style=window.getComputedStyle(this.rasterArea_);const width=Math.max(parseInt(style.width),this.picture_.layerRect.width);const height=Math.max(parseInt(style.height),this.picture_.layerRect.height);return{width,height};},scheduleUpdateContents_(){if(this.updateContentsPending_)return;this.updateContentsPending_=true;tr.b.requestAnimationFrameInThisFrameIfPossible(this.updateContents_.bind(this));},updateContents_(){this.updateContentsPending_=false;if(this.picture_){Polymer.dom(this.sizeInfo_).textContent='('+
-this.picture_.layerRect.width+' x '+
-this.picture_.layerRect.height+')';}
-this.drawOpsChartView_.updateChartContents();this.drawOpsChartView_.scrollSelectedItemIntoViewIfNecessary();if(!this.pictureAsImageData_)return;this.infoBar_.visible=false;this.infoBar_.removeAllButtons();if(this.pictureAsImageData_.error){this.infoBar_.message='Cannot rasterize...';this.infoBar_.addButton('More info...',function(e){const overlay=new tr.ui.b.Overlay();Polymer.dom(overlay).textContent=this.pictureAsImageData_.error;overlay.visible=true;e.stopPropagation();return false;}.bind(this));this.infoBar_.visible=true;}
-this.drawPicture_();},drawPicture_(){const size=this.getRasterCanvasSize_();if(size.width!==this.rasterCanvas_.width){this.rasterCanvas_.width=size.width;}
-if(size.height!==this.rasterCanvas_.height){this.rasterCanvas_.height=size.height;}
-this.rasterCtx_.clearRect(0,0,size.width,size.height);if(!this.pictureAsImageData_.imageData)return;const imgCanvas=this.pictureAsImageData_.asCanvas();const w=imgCanvas.width;const h=imgCanvas.height;this.rasterCtx_.drawImage(imgCanvas,0,0,w,h,0,0,w*this.zoomScaleValue_,h*this.zoomScaleValue_);},rasterize_(){if(this.picture_){this.picture_.rasterize({stopIndex:this.drawOpsView_.selectedOpIndex,showOverdraw:this.showOverdraw_},this.onRasterComplete_.bind(this));}},onRasterComplete_(pictureAsImageData){this.pictureAsImageData_=pictureAsImageData;this.scheduleUpdateContents_();},moveSelectedOpBy(increment){if(this.selectedOpIndex===undefined){this.selectedOpIndex=0;return;}
-this.selectedOpIndex=tr.b.math.clamp(this.selectedOpIndex+increment,0,this.numOps);},get numOps(){return this.drawOpsView_.numOps;},get selectedOpIndex(){return this.drawOpsView_.selectedOpIndex;},set selectedOpIndex(index){this.drawOpsView_.selectedOpIndex=index;this.drawOpsChartView_.selectedOpIndex=index;},onChartBarClicked_(e){this.drawOpsView_.selectedOpIndex=this.drawOpsChartView_.selectedOpIndex;},onChangeDrawOps_(e){this.rasterize_();this.scheduleUpdateContents_();this.drawOpsChartView_.selectedOpIndex=this.drawOpsView_.selectedOpIndex;},set showOverdraw(v){this.showOverdraw_=v;this.rasterize_();},set showSummaryChart(chartShouldBeVisible){if(chartShouldBeVisible){this.drawOpsChartSummaryView_.show();}else{this.drawOpsChartSummaryView_.hide();}},trackMouse_(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this.rasterArea_;Polymer.dom(this.rasterArea_).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.supportedModeMask=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.mode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.defaultMode=tr.ui.b.MOUSE_SELECTOR_MODE.ZOOM;this.mouseModeSelector_.settingsKey='pictureDebugger.mouseModeSelector';this.mouseModeSelector_.addEventListener('beginzoom',this.onBeginZoom_.bind(this));this.mouseModeSelector_.addEventListener('updatezoom',this.onUpdateZoom_.bind(this));this.mouseModeSelector_.addEventListener('endzoom',this.onEndZoom_.bind(this));},onBeginZoom_(e){this.isZooming_=true;this.lastMouseViewPos_=this.extractRelativeMousePosition_(e);e.preventDefault();},onUpdateZoom_(e){if(!this.isZooming_)return;const currentMouseViewPos=this.extractRelativeMousePosition_(e);this.zoomScaleValue_+=((this.lastMouseViewPos_.y-currentMouseViewPos.y)*0.001);this.zoomScaleValue_=Math.max(this.zoomScaleValue_,0.1);this.drawPicture_();this.lastMouseViewPos_=currentMouseViewPos;},onEndZoom_(e){this.lastMouseViewPos_=undefined;this.isZooming_=false;e.preventDefault();},extractRelativeMousePosition_(e){return{x:e.clientX-this.rasterArea_.offsetLeft,y:e.clientY-this.rasterArea_.offsetTop};}};return{PictureDebugger,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const PictureSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-picture-snapshot-view',tr.ui.analysis.ObjectSnapshotView);PictureSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-picture-snapshot-view');this.style.display='flex';this.style.flexGrow=0;this.style.flexShrink=1;this.style.flexBasis='auto';this.pictureDebugger_=new tr.ui.e.chrome.cc.PictureDebugger();Polymer.dom(this).appendChild(this.pictureDebugger_);},updateContents(){if(this.objectSnapshot_&&this.pictureDebugger_){this.pictureDebugger_.picture=this.objectSnapshot_;}}};tr.ui.analysis.ObjectSnapshotView.register(PictureSnapshotView,{typeNames:['cc::Picture','cc::LayeredPicture'],showInstances:false});return{PictureSnapshotView,};});'use strict';tr.exportTo('tr.e.cc',function(){const knownRasterTaskNames=['TileManager::RunRasterTask','RasterWorkerPoolTaskImpl::RunRasterOnThread','RasterWorkerPoolTaskImpl::Raster','RasterTaskImpl::Raster','cc::RasterTask','RasterTask'];const knownAnalysisTaskNames=['TileManager::RunAnalyzeTask','RasterWorkerPoolTaskImpl::RunAnalysisOnThread','RasterWorkerPoolTaskImpl::Analyze','RasterTaskImpl::Analyze','cc::AnalyzeTask','AnalyzeTask'];function getTileFromRasterTaskSlice(slice){if(!(isSliceDoingRasterization(slice)||isSliceDoingAnalysis(slice))){return undefined;}
-let tileData;if(slice.args.data){tileData=slice.args.data;}else{tileData=slice.args.tileData;}
-if(tileData===undefined)return undefined;if(tileData.tile_id)return tileData.tile_id;const tile=tileData.tileId;if(!(tile instanceof tr.e.cc.TileSnapshot)){return undefined;}
-return tileData.tileId;}
-function isSliceDoingRasterization(slice){return knownRasterTaskNames.includes(slice.title);}
-function isSliceDoingAnalysis(slice){return knownAnalysisTaskNames.includes(slice.title);}
-return{getTileFromRasterTaskSlice,isSliceDoingRasterization,isSliceDoingAnalysis};});'use strict';tr.exportTo('tr.ui.analysis',function(){const AnalysisSubView={set tabLabel(label){Polymer.dom(this).setAttribute('tab-label',label);},get tabLabel(){return this.getAttribute('tab-label');},get requiresTallView(){return false;},get relatedEventsToHighlight(){return undefined;},set selection(selection){throw new Error('Not implemented!');},get selection(){throw new Error('Not implemented!');}};const allTypeInfosByEventProto=new Map();let onlyRootTypeInfosByEventProto=undefined;let eventProtoToRootTypeInfoMap=undefined;function AnalysisSubViewTypeInfo(eventConstructor,options){if(options.multi===undefined){throw new Error('missing field: multi');}
-if(options.title===undefined){throw new Error('missing field: title');}
-this.eventConstructor=eventConstructor;this.singleTagName=undefined;this.singleTitle=undefined;this.multiTagName=undefined;this.multiTitle=undefined;this.childrenTypeInfos_=undefined;}
-AnalysisSubViewTypeInfo.prototype={get childrenTypeInfos(){return this.childrenTypeInfos_;},resetchildrenTypeInfos(){this.childrenTypeInfos_=[];}};AnalysisSubView.register=function(tagName,eventConstructor,options){let typeInfo=allTypeInfosByEventProto.get(eventConstructor.prototype);if(typeInfo===undefined){typeInfo=new AnalysisSubViewTypeInfo(eventConstructor,options);allTypeInfosByEventProto.set(typeInfo.eventConstructor.prototype,typeInfo);onlyRootTypeInfosByEventProto=undefined;}
-if(!options.multi){if(typeInfo.singleTagName!==undefined){throw new Error('SingleTagName already set');}
-typeInfo.singleTagName=tagName;typeInfo.singleTitle=options.title;}else{if(typeInfo.multiTagName!==undefined){throw new Error('MultiTagName already set');}
-typeInfo.multiTagName=tagName;typeInfo.multiTitle=options.title;}
-return typeInfo;};function rebuildRootSubViewTypeInfos(){onlyRootTypeInfosByEventProto=new Map();allTypeInfosByEventProto.forEach(function(typeInfo){typeInfo.resetchildrenTypeInfos();});allTypeInfosByEventProto.forEach(function(typeInfo,eventProto){const eventPrototype=typeInfo.eventConstructor.prototype;let lastEventProto=eventPrototype;let curEventProto=eventPrototype.__proto__;while(true){if(!allTypeInfosByEventProto.has(curEventProto)){const rootTypeInfo=allTypeInfosByEventProto.get(lastEventProto);const rootEventProto=lastEventProto;const isNew=onlyRootTypeInfosByEventProto.has(rootEventProto);onlyRootTypeInfosByEventProto.set(rootEventProto,rootTypeInfo);break;}
-lastEventProto=curEventProto;curEventProto=curEventProto.__proto__;}});allTypeInfosByEventProto.forEach(function(typeInfo,eventProto){const eventPrototype=typeInfo.eventConstructor.prototype;const parentEventProto=eventPrototype.__proto__;const parentTypeInfo=allTypeInfosByEventProto.get(parentEventProto);if(!parentTypeInfo)return;parentTypeInfo.childrenTypeInfos.push(typeInfo);});eventProtoToRootTypeInfoMap=new Map();allTypeInfosByEventProto.forEach(function(typeInfo,eventProto){const eventPrototype=typeInfo.eventConstructor.prototype;let curEventProto=eventPrototype;while(true){if(onlyRootTypeInfosByEventProto.has(curEventProto)){const rootTypeInfo=onlyRootTypeInfosByEventProto.get(curEventProto);eventProtoToRootTypeInfoMap.set(eventPrototype,rootTypeInfo);break;}
-curEventProto=curEventProto.__proto__;}});}
-function findLowestTypeInfoForEvents(thisTypeInfo,events){if(events.length===0)return thisTypeInfo;const event0=tr.b.getFirstElement(events);let candidateSubTypeInfo;for(let i=0;i<thisTypeInfo.childrenTypeInfos.length;i++){const childTypeInfo=thisTypeInfo.childrenTypeInfos[i];if(event0 instanceof childTypeInfo.eventConstructor){candidateSubTypeInfo=childTypeInfo;break;}}
-if(!candidateSubTypeInfo)return thisTypeInfo;let allMatch=true;for(const event of events){if(event instanceof candidateSubTypeInfo.eventConstructor)continue;allMatch=false;break;}
-if(!allMatch){return thisTypeInfo;}
-return findLowestTypeInfoForEvents(candidateSubTypeInfo,events);}
-const primaryEventProtoToTypeInfoMap=new Map();function getRootTypeInfoForEvent(event){const curProto=event.__proto__;const typeInfo=primaryEventProtoToTypeInfoMap.get(curProto);if(typeInfo)return typeInfo;return getRootTypeInfoForEventSlow(event);}
-function getRootTypeInfoForEventSlow(event){let typeInfo;let curProto=event.__proto__;while(true){if(curProto===Object.prototype){throw new Error('No view registered for '+event.toString());}
-typeInfo=onlyRootTypeInfosByEventProto.get(curProto);if(typeInfo){primaryEventProtoToTypeInfoMap.set(event.__proto__,typeInfo);return typeInfo;}
-curProto=curProto.__proto__;}}
-AnalysisSubView.getEventsOrganizedByTypeInfo=function(selection){if(onlyRootTypeInfosByEventProto===undefined){rebuildRootSubViewTypeInfos();}
-const eventsByRootTypeInfo=tr.b.groupIntoMap(selection,function(event){return getRootTypeInfoForEvent(event);},this,tr.model.EventSet);const eventsByLowestTypeInfo=new Map();eventsByRootTypeInfo.forEach(function(events,typeInfo){const lowestTypeInfo=findLowestTypeInfoForEvents(typeInfo,events);eventsByLowestTypeInfo.set(lowestTypeInfo,events);});return eventsByLowestTypeInfo;};return{AnalysisSubView,AnalysisSubViewTypeInfo,};});Polymer({is:'tr-ui-a-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView]});'use strict';Polymer({is:'tr-ui-a-stack-frame',ready(){this.stackFrame_=undefined;this.$.table.tableColumns=[];this.$.table.showHeader=true;},get stackFrame(){return this.stackFrame_;},set stackFrame(stackFrame){const table=this.$.table;this.stackFrame_=stackFrame;if(stackFrame===undefined){table.tableColumns=[];table.tableRows=[];table.rebuild();return;}
-let hasName=false;let hasTitle=false;table.tableRows=stackFrame.stackTrace;table.tableRows.forEach(function(row){hasName|=row.name!==undefined;hasTitle|=row.title!==undefined;});const cols=[];if(hasName){cols.push({title:'Name',value(row){return row.name;}});}
-if(hasTitle){cols.push({title:'Title',value(row){return row.title;}});}
-table.tableColumns=cols;table.rebuild();},tableForTesting(){return this.$.table;}});'use strict';Polymer({is:'tr-ui-a-single-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],properties:{isFlow:{type:Boolean,value:false}},ready(){this.currentSelection_=undefined;this.$.table.tableColumns=[{title:'Label',value(row){return row.name;},width:'150px'},{title:'Value',width:'100%',value(row){return row.value;}}];this.$.table.showHeader=false;},get selection(){return this.currentSelection_;},set selection(selection){if(selection.length!==1){throw new Error('Only supports single slices');}
-this.setSelectionWithoutErrorChecks(selection);},setSelectionWithoutErrorChecks(selection){this.currentSelection_=selection;this.updateContents_();},getFlowEventRows_(event){const rows=this.getEventRowsHelper_(event);rows.splice(0,0,{name:'ID',value:event.id});function createLinkTo(slice){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.model.EventSet(slice);});Polymer.dom(linkEl).textContent=slice.userFriendlyName;return linkEl;}
-rows.push({name:'From',value:createLinkTo(event.startSlice)});rows.push({name:'To',value:createLinkTo(event.endSlice)});return rows;},getEventRowsHelper_(event){const rows=[];if(event.error){rows.push({name:'Error',value:event.error});}
-if(event.title){rows.push({name:'Title',value:event.title});}
-if(event.category){rows.push({name:'Category',value:event.category});}
-if(event.model!==undefined){const ufc=event.model.getUserFriendlyCategoryFromEvent(event);if(ufc!==undefined){rows.push({name:'User Friendly Category',value:ufc});}}
-if(event.name){rows.push({name:'Name',value:event.name});}
-rows.push({name:'Start',value:tr.v.ui.createScalarSpan(event.start,{unit:tr.b.Unit.byName.timeStampInMs})});if(event.duration){rows.push({name:'Wall Duration',value:tr.v.ui.createScalarSpan(event.duration,{unit:tr.b.Unit.byName.timeDurationInMs})});}
-if(event.cpuDuration){rows.push({name:'CPU Duration',value:tr.v.ui.createScalarSpan(event.cpuDuration,{unit:tr.b.Unit.byName.timeDurationInMs})});}
-if(event.subSlices!==undefined&&event.subSlices.length!==0){if(event.selfTime){rows.push({name:'Self Time',value:tr.v.ui.createScalarSpan(event.selfTime,{unit:tr.b.Unit.byName.timeDurationInMs})});}
-if(event.cpuSelfTime){const cpuSelfTimeEl=tr.v.ui.createScalarSpan(event.cpuSelfTime,{unit:tr.b.Unit.byName.timeDurationInMs});if(event.cpuSelfTime>event.selfTime){cpuSelfTimeEl.warning=' Note that CPU Self Time is larger than Self Time. '+'This is a known limitation of this system, which occurs '+'due to several subslices, rounding issues, and imprecise '+'time at which we get cpu- and real-time.';}
-rows.push({name:'CPU Self Time',value:cpuSelfTimeEl});}}
-if(event.durationInUserTime){rows.push({name:'Duration (U)',value:tr.v.ui.createScalarSpan(event.durationInUserTime,{unit:tr.b.Unit.byName.timeDurationInMs})});}
-function createStackFrameEl(sf){const sfEl=document.createElement('tr-ui-a-stack-frame');sfEl.stackFrame=sf;return sfEl;}
-if(event.startStackFrame&&event.endStackFrame){if(event.startStackFrame===event.endStackFrame){rows.push({name:'Start+End Stack Trace',value:createStackFrameEl(event.startStackFrame)});}else{rows.push({name:'Start Stack Trace',value:createStackFrameEl(event.startStackFrame)});rows.push({name:'End Stack Trace',value:createStackFrameEl(event.endStackFrame)});}}else if(event.startStackFrame){rows.push({name:'Start Stack Trace',value:createStackFrameEl(event.startStackFrame)});}else if(event.endStackFrame){rows.push({name:'End Stack Trace',value:createStackFrameEl(event.endStackFrame)});}
-if(event.info){const descriptionEl=tr.ui.b.createDiv({textContent:event.info.description,maxWidth:'300px'});rows.push({name:'Description',value:descriptionEl});if(event.info.docLinks){event.info.docLinks.forEach(function(linkObject){const linkEl=document.createElement('a');linkEl.target='_blank';linkEl.href=linkObject.href;Polymer.dom(linkEl).textContent=Polymer.dom(linkObject).textContent;rows.push({name:linkObject.label,value:linkEl});});}}
-if(event.associatedAlerts.length){const alertSubRows=[];event.associatedAlerts.forEach(function(alert){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.model.EventSet(alert);},alert.info.description);alertSubRows.push({name:alert.title,value:linkEl});});rows.push({name:'Alerts',value:'',isExpanded:true,subRows:alertSubRows});}
-return rows;},getEventRows_(event){if(this.isFlow){return this.getFlowEventRows_(event);}
-return this.getEventRowsHelper_(event);},addArgsToRows_(rows,args){let n=0;for(const argName in args){n+=1;}
-if(n>0){const subRows=[];for(const argName in args){n+=1;}
-if(n>0){const subRows=[];for(const argName in args){const argView=document.createElement('tr-ui-a-generic-object-view');argView.object=args[argName];subRows.push({name:argName,value:argView});}
-rows.push({name:'Args',value:'',isExpanded:true,subRows});}}},addContextsToRows_(rows,contexts){if(contexts.length){const subRows=contexts.map(function(context){const contextView=document.createElement('tr-ui-a-generic-object-view');contextView.object=context;return{name:'Context',value:contextView};});rows.push({name:'Contexts',value:'',isExpanded:true,subRows});}},updateContents_(){if(this.currentSelection_===undefined){this.$.table.rows=[];this.$.table.rebuild();return;}
-const event=tr.b.getOnlyElement(this.currentSelection_);const rows=this.getEventRows_(event);if(event.argsStripped){rows.push({name:'Args',value:'Stripped'});}else{this.addArgsToRows_(rows,event.args);}
-this.addContextsToRows_(rows,event.contexts);const customizeRowsEvent=new tr.b.Event('customize-rows');customizeRowsEvent.rows=rows;this.dispatchEvent(customizeRowsEvent);this.$.table.tableRows=rows;this.$.table.rebuild();}});'use strict';Polymer({is:'tr-ui-e-chrome-cc-raster-task-view',created(){this.selection_=undefined;},set selection(selection){this.selection_=selection;this.updateContents_();},updateColumns_(hadCpuDurations){const timeSpanConfig={unit:tr.b.Unit.byName.timeDurationInMs,ownerDocument:this.ownerDocument};const columns=[{title:'Layer',value(row){if(row.isTotals)return'Totals';if(row.layer){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.ui.e.chrome.cc.LayerSelection(costs.layer);},'Layer '+row.layerId);return linkEl;}
-return'Layer '+row.layerId;},width:'250px'},{title:'Num Tiles',value(row){return row.numTiles;},cmp(a,b){return a.numTiles-b.numTiles;}},{title:'Num Analysis Tasks',value(row){return row.numAnalysisTasks;},cmp(a,b){return a.numAnalysisTasks-b.numAnalysisTasks;}},{title:'Num Raster Tasks',value(row){return row.numRasterTasks;},cmp(a,b){return a.numRasterTasks-b.numRasterTasks;}},{title:'Wall Duration (ms)',value(row){return tr.v.ui.createScalarSpan(row.duration,timeSpanConfig);},cmp(a,b){return a.duration-b.duration;}}];if(hadCpuDurations){columns.push({title:'CPU Duration (ms)',value(row){return tr.v.ui.createScalarSpan(row.cpuDuration,timeSpanConfig);},cmp(a,b){return a.cpuDuration-b.cpuDuration;}});}
-let colWidthPercentage;if(columns.length===1){colWidthPercentage='100%';}else{colWidthPercentage=(100/(columns.length-1)).toFixed(3)+'%';}
-for(let i=1;i<columns.length;i++){columns[i].width=colWidthPercentage;}
-this.$.content.tableColumns=columns;this.$.content.sortColumnIndex=columns.length-1;},updateContents_(){const table=this.$.content;if(this.selection_.length===0){this.$.link.setSelectionAndContent(undefined,'');table.tableRows=[];table.footerRows=[];table.rebuild();return;}
-const lthi=tr.e.cc.getTileFromRasterTaskSlice(tr.b.getFirstElement(this.selection_)).containingSnapshot;this.$.link.setSelectionAndContent(function(){return new tr.model.EventSet(lthi);},lthi.userFriendlyName);const costsByLayerId={};function getCurrentCostsForLayerId(tile){const layerId=tile.layerId;const lthi=tile.containingSnapshot;let layer;if(lthi.activeTree){layer=lthi.activeTree.findLayerWithId(layerId);}
-if(layer===undefined&&lthi.pendingTree){layer=lthi.pendingTree.findLayerWithId(layerId);}
-if(costsByLayerId[layerId]===undefined){costsByLayerId[layerId]={layerId,layer,numTiles:0,numAnalysisTasks:0,numRasterTasks:0,duration:0,cpuDuration:0};}
-return costsByLayerId[layerId];}
-let totalDuration=0;let totalCpuDuration=0;let totalNumAnalyzeTasks=0;let totalNumRasterizeTasks=0;let hadCpuDurations=false;const tilesThatWeHaveSeen={};this.selection_.forEach(function(slice){const tile=tr.e.cc.getTileFromRasterTaskSlice(slice);const curCosts=getCurrentCostsForLayerId(tile);if(!tilesThatWeHaveSeen[tile.objectInstance.id]){tilesThatWeHaveSeen[tile.objectInstance.id]=true;curCosts.numTiles+=1;}
-if(tr.e.cc.isSliceDoingAnalysis(slice)){curCosts.numAnalysisTasks+=1;totalNumAnalyzeTasks+=1;}else{curCosts.numRasterTasks+=1;totalNumRasterizeTasks+=1;}
-curCosts.duration+=slice.duration;totalDuration+=slice.duration;if(slice.cpuDuration!==undefined){curCosts.cpuDuration+=slice.cpuDuration;totalCpuDuration+=slice.cpuDuration;hadCpuDurations=true;}});this.updateColumns_(hadCpuDurations);table.tableRows=Object.values(costsByLayerId);table.rebuild();table.footerRows=[{isTotals:true,numTiles:Object.keys(tilesThatWeHaveSeen).length,numAnalysisTasks:totalNumAnalyzeTasks,numRasterTasks:totalNumRasterizeTasks,duration:totalDuration,cpuDuration:totalCpuDuration}];}});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){function RasterTaskSelection(selection){tr.ui.e.chrome.cc.Selection.call(this);const whySupported=RasterTaskSelection.whySuported(selection);if(!whySupported.ok){throw new Error('Fail: '+whySupported.why);}
-this.slices_=Array.from(selection);this.tiles_=this.slices_.map(function(slice){const tile=tr.e.cc.getTileFromRasterTaskSlice(slice);if(tile===undefined){throw new Error('This should never happen due to .supports check.');}
-return tile;});}
-RasterTaskSelection.whySuported=function(selection){if(!(selection instanceof tr.model.EventSet)){return{ok:false,why:'Must be selection'};}
-if(selection.length===0){return{ok:false,why:'Selection must be non empty'};}
-let referenceSnapshot=undefined;for(const event of selection){if(!(event instanceof tr.model.Slice)){return{ok:false,why:'Not a slice'};}
-const tile=tr.e.cc.getTileFromRasterTaskSlice(event);if(tile===undefined){return{ok:false,why:'No tile found'};}
-if(!referenceSnapshot){referenceSnapshot=tile.containingSnapshot;}else{if(tile.containingSnapshot!==referenceSnapshot){return{ok:false,why:'Raster tasks are from different compositor instances'};}}}
-return{ok:true};};RasterTaskSelection.supports=function(selection){return RasterTaskSelection.whySuported(selection).ok;};RasterTaskSelection.prototype={__proto__:tr.ui.e.chrome.cc.Selection.prototype,get specicifity(){return 3;},get associatedLayerId(){const tile0=this.tiles_[0];const allSameLayer=this.tiles_.every(function(tile){tile.layerId===tile0.layerId;});if(allSameLayer){return tile0.layerId;}
-return undefined;},get extraHighlightsByLayerId(){const highlights={};this.tiles_.forEach(function(tile,i){if(highlights[tile.layerId]===undefined){highlights[tile.layerId]=[];}
-const slice=this.slices_[i];highlights[tile.layerId].push({colorKey:slice.title,rect:tile.layerRect});},this);return highlights;},createAnalysis(){const sel=new tr.model.EventSet();this.slices_.forEach(function(slice){sel.push(slice);});let analysis;if(sel.length===1){analysis=document.createElement('tr-ui-a-single-event-sub-view');}else{analysis=document.createElement('tr-ui-e-chrome-cc-raster-task-view');}
-analysis.selection=sel;return analysis;},findEquivalent(lthi){return undefined;},get containingSnapshot(){return this.tiles_[0].containingSnapshot;}};return{RasterTaskSelection,};});'use strict';tr.exportTo('tr.ui.e.chrome.cc',function(){const TileSnapshotView=tr.ui.b.define('tr-ui-e-chrome-cc-tile-snapshot-view',tr.ui.analysis.ObjectSnapshotView);TileSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-cc-tile-snapshot-view');this.layerTreeView_=new tr.ui.e.chrome.cc.LayerTreeHostImplSnapshotView();Polymer.dom(this).appendChild(this.layerTreeView_);},updateContents(){const tile=this.objectSnapshot_;const layerTreeHostImpl=tile.containingSnapshot;if(!layerTreeHostImpl)return;this.layerTreeView_.objectSnapshot=layerTreeHostImpl;this.layerTreeView_.selection=new tr.ui.e.chrome.cc.TileSelection(tile);}};tr.ui.analysis.ObjectSnapshotView.register(TileSnapshotView,{typeName:'cc::Tile',showInTrackView:false});return{TileSnapshotView,};});'use strict';tr.exportTo('tr.e.gpu',function(){const AsyncSlice=tr.model.AsyncSlice;function GpuAsyncSlice(){AsyncSlice.apply(this,arguments);}
-GpuAsyncSlice.prototype={__proto__:AsyncSlice.prototype,get viewSubGroupTitle(){if(this.args.channel){if(this.category==='disabled-by-default-gpu.device'){return'Device.'+this.args.channel;}
-return'Service.'+this.args.channel;}
-return this.title;}};AsyncSlice.subTypes.register(GpuAsyncSlice,{categoryParts:['disabled-by-default-gpu.device','disabled-by-default-gpu.service']});return{GpuAsyncSlice,};});'use strict';tr.exportTo('tr.e.gpu',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function StateSnapshot(){ObjectSnapshot.apply(this,arguments);}
-StateSnapshot.prototype={__proto__:ObjectSnapshot.prototype,preInitialize(){this.screenshot_=undefined;},initialize(){if(this.args.screenshot){this.screenshot_=this.args.screenshot;}},get screenshot(){return this.screenshot_;}};ObjectSnapshot.subTypes.register(StateSnapshot,{typeName:'gpu::State'});return{StateSnapshot,};});'use strict';tr.exportTo('tr.ui.e.chrome.gpu',function(){const StateSnapshotView=tr.ui.b.define('tr-ui-e-chrome-gpu-state-snapshot-view',tr.ui.analysis.ObjectSnapshotView);StateSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-chrome-gpu-state-snapshot-view');this.screenshotImage_=document.createElement('img');Polymer.dom(this).appendChild(this.screenshotImage_);},updateContents(){if(this.objectSnapshot_&&this.objectSnapshot_.screenshot){this.screenshotImage_.src='data:image/png;base64,'+
-this.objectSnapshot_.screenshot;}}};tr.ui.analysis.ObjectSnapshotView.register(StateSnapshotView,{typeName:'gpu::State'});return{StateSnapshotView,};});'use strict';tr.exportTo('tr.ui.analysis',function(){Polymer({is:'tr-ui-a-layout-tree-sub-view',behaviors:['tr-ui-a-sub-view'],set selection(selection){this.currentSelection_=selection;this.updateContents_();},get selection(){return this.currentSelection_;},updateContents_(){this.set('$.content.textContent','');if(!this.currentSelection_)return;const columns=[{title:'Tag/Name',value(layoutObject){return layoutObject.tag||':'+layoutObject.name;}},{title:'htmlId',value(layoutObject){return layoutObject.htmlId||'';}},{title:'classNames',value(layoutObject){return layoutObject.classNames||'';}},{title:'reasons',value(layoutObject){return layoutObject.needsLayoutReasons.join(', ');}},{title:'width',value(layoutObject){return layoutObject.absoluteRect.width;}},{title:'height',value(layoutObject){return layoutObject.absoluteRect.height;}},{title:'absX',value(layoutObject){return layoutObject.absoluteRect.left;}},{title:'absY',value(layoutObject){return layoutObject.absoluteRect.top;}},{title:'relX',value(layoutObject){return layoutObject.relativeRect.left;}},{title:'relY',value(layoutObject){return layoutObject.relativeRect.top;}},{title:'float',value(layoutObject){return layoutObject.isFloat?'float':'';}},{title:'positioned',value(layoutObject){return layoutObject.isPositioned?'positioned':'';}},{title:'relative',value(layoutObject){return layoutObject.isRelativePositioned?'relative':'';}},{title:'sticky',value(layoutObject){return layoutObject.isStickyPositioned?'sticky':'';}},{title:'anonymous',value(layoutObject){return layoutObject.isAnonymous?'anonymous':'';}},{title:'row',value(layoutObject){if(layoutObject.tableRow===undefined){return'';}
-return layoutObject.tableRow;}},{title:'col',value(layoutObject){if(layoutObject.tableCol===undefined){return'';}
-return layoutObject.tableCol;}},{title:'rowSpan',value(layoutObject){if(layoutObject.tableRowSpan===undefined){return'';}
-return layoutObject.tableRowSpan;}},{title:'colSpan',value(layoutObject){if(layoutObject.tableColSpan===undefined){return'';}
-return layoutObject.tableColSpan;}},{title:'address',value(layoutObject){return layoutObject.id.toString(16);}}];const table=this.ownerDocument.createElement('tr-ui-b-table');table.defaultExpansionStateCallback=function(layoutObject,parentLayoutObject){return true;};table.subRowsPropertyName='childLayoutObjects';table.tableColumns=columns;table.tableRows=this.currentSelection_.map(function(snapshot){return snapshot.rootLayoutObject;});table.rebuild();Polymer.dom(this.$.content).appendChild(table);},});return{};});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-layout-tree-sub-view',tr.e.chrome.LayoutTreeSnapshot,{multi:false,title:'Layout Tree',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-layout-tree-sub-view',tr.e.chrome.LayoutTreeSnapshot,{multi:true,title:'Layout Trees',});'use strict';tr.exportTo('tr.ui.behaviors',function(){const SidePanel={get rangeOfInterest(){throw new Error('Not implemented');},set rangeOfInterest(rangeOfInterest){throw new Error('Not implemented');},get selection(){throw new Error('Not implemented');},set selection(selection){throw new Error('Not implemented');},get model(){throw new Error('Not implemented');},set model(model){throw new Error('Not implemented');},supportsModel(m){throw new Error('Not implemented');}};return{SidePanel,};});'use strict';tr.exportTo('tr.ui.side_panel',function(){function SidePanelRegistry(){}
-const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);tr.b.decorateExtensionRegistry(SidePanelRegistry,options);return{SidePanelRegistry,};});'use strict';tr.exportTo('tr.ui.e.s',function(){const BlameContextSnapshot=tr.e.chrome.BlameContextSnapshot;const FrameTreeNodeSnapshot=tr.e.chrome.FrameTreeNodeSnapshot;const RenderFrameSnapshot=tr.e.chrome.RenderFrameSnapshot;const TopLevelSnapshot=tr.e.chrome.TopLevelSnapshot;const BlameContextInstance=tr.e.chrome.BlameContextInstance;const FrameTreeNodeInstance=tr.e.chrome.FrameTreeNodeInstance;const RenderFrameInstance=tr.e.chrome.RenderFrameInstance;const TopLevelInstance=tr.e.chrome.TopLevelInstance;function Row(context){this.subRows=undefined;this.contexts=[];this.type=undefined;this.renderer='N/A';this.url=undefined;this.time=0;this.eventsOfInterest=new tr.model.EventSet();if(context===undefined)return;this.type=context.objectInstance.blameContextType;this.contexts.push(context);if(context instanceof FrameTreeNodeSnapshot){if(context.renderFrame){this.contexts.push(context.renderFrame);this.renderer=context.renderFrame.objectInstance.parent.pid;}}else if(context instanceof RenderFrameSnapshot){if(context.frameTreeNode){this.contexts.push(context.frameTreeNode);}
-this.renderer=context.objectInstance.parent.pid;}else if(context instanceof TopLevelSnapshot){this.renderer=context.objectInstance.parent.pid;}else{throw new Error('Unknown context type');}
-this.eventsOfInterest.addEventSet(this.contexts);this.url=context.url;}
-const groupFunctions={none:rows=>rows,tree(rows,rowMap){const getParentRow=function(row){let pivot;row.contexts.forEach(function(context){if(context instanceof tr.e.chrome.FrameTreeNodeSnapshot){pivot=context;}});if(pivot&&pivot.parentContext){return rowMap[pivot.parentContext.guid];}
-return undefined;};const rootRows=[];rows.forEach(function(row){const parentRow=getParentRow(row);if(parentRow===undefined){rootRows.push(row);return;}
-if(parentRow.subRows===undefined){parentRow.subRows=[];}
-parentRow.subRows.push(row);});const aggregateAllDescendants=function(row){if(!row.subRows){if(getParentRow(row)){row.type='Subframe';}
-return row;}
-const result=new Row();result.type='Frame Tree';result.renderer=row.renderer;result.url=row.url;result.subRows=[row];row.subRows.forEach(subRow=>result.subRows.push(aggregateAllDescendants(subRow)));result.subRows.forEach(function(subRow){result.time+=subRow.time;result.eventsOfInterest.addEventSet(subRow.eventsOfInterest);});row.subRows=undefined;return result;};return rootRows.map(rootRow=>aggregateAllDescendants(rootRow));}};Polymer({is:'tr-ui-e-s-frame-data-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.model_=undefined;this.rangeOfInterest_=new tr.b.math.Range();this.$.table.showHeader=true;this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;this.$.table.tableColumns=this.createFrameDataTableColumns_();this.$.table.addEventListener('selection-changed',function(e){this.selectEventSet_(this.$.table.selectedTableRow.eventsOfInterest);}.bind(this));this.$.select.addEventListener('change',function(e){this.updateContents_();}.bind(this));},selectEventSet_(eventSet){const event=new tr.model.RequestSelectionChangeEvent();event.selection=eventSet;this.dispatchEvent(event);},createFrameDataTableColumns_(){return[{title:'Renderer',value:row=>row.renderer,cmp:(a,b)=>a.renderer-b.renderer},{title:'Type',value:row=>row.type},{title:'Time',value:row=>tr.v.ui.createScalarSpan(row.time,{unit:tr.b.Unit.byName.timeStampInMs,ownerDocument:this.ownerDocument}),cmp:(a,b)=>a.time-b.time},{title:'URL',value:row=>row.url,cmp:(a,b)=>(a.url||'').localeCompare(b.url||'')}];},createFrameDataTableRows_(){if(!this.model_)return[];const rows=[];const rowMap={};for(const proc of Object.values(this.model_.processes)){proc.objects.iterObjectInstances(function(objectInstance){if(!(objectInstance instanceof BlameContextInstance)){return;}
-objectInstance.snapshots.forEach(function(snapshot){if(rowMap[snapshot.guid])return;const row=new Row(snapshot);row.contexts.forEach(context=>rowMap[context.guid]=row);rows.push(row);},this);},this);}
-for(const proc of Object.values(this.model_.processes)){for(const thread of Object.values(proc.threads)){thread.sliceGroup.iterSlicesInTimeRange(function(topLevelSlice){topLevelSlice.contexts.forEach(function(context){if(!context.snapshot.guid||!rowMap[context.snapshot.guid]){return;}
-const row=rowMap[context.snapshot.guid];row.eventsOfInterest.push(topLevelSlice);row.time+=topLevelSlice.selfTime||0;});},this.currentRangeOfInterest.min,this.currentRangeOfInterest.max);}}
-const select=this.$.select;const groupOption=select.options[select.selectedIndex].value;const groupFunction=groupFunctions[groupOption];return groupFunction(rows,rowMap);},updateContents_(){this.$.table.tableRows=this.createFrameDataTableRows_();this.$.table.rebuild();},supportsModel(m){if(!m){return{supported:false,reason:'No model available.'};}
-const ans={supported:false};for(const proc of Object.values(m.processes)){proc.objects.iterObjectInstances(function(instance){if(instance instanceof BlameContextInstance){ans.supported=true;}});}
-if(!ans.supported){ans.reason='No frame data available';}
-return ans;},get currentRangeOfInterest(){if(this.rangeOfInterest_.isEmpty){return this.model_.bounds;}
-return this.rangeOfInterest_;},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(rangeOfInterest){this.rangeOfInterest_=rangeOfInterest;this.updateContents_();},get selection(){},set selection(_){},get textLabel(){return'Frame Data';},get model(){return this.model_;},set model(model){this.model_=model;this.updateContents_();}});tr.ui.side_panel.SidePanelRegistry.register(function(){return document.createElement('tr-ui-e-s-frame-data-side-panel');});});'use strict';Polymer({is:'tr-ui-b-chart-legend-key',ready(){this.$.checkbox.addEventListener('change',this.onCheckboxChange_.bind(this));},onCheckboxChange_(){tr.b.dispatchSimpleEvent(this,tr.ui.b.DataSeriesEnableChangeEventType,true,false,{key:Polymer.dom(this).textContent,enabled:this.enabled});},set textContent(t){Polymer.dom(this.$.label).textContent=t;Polymer.dom(this.$.link).textContent=t;this.updateContents_();},set width(w){w-=20;this.$.link.style.width=w+'px';this.$.label.style.width=w+'px';},get textContent(){return Polymer.dom(this.$.label).textContent;},set optional(optional){this.$.checkbox.style.visibility=optional?'visible':'hidden';},get optional(){return this.$.checkbox.style.visibility==='visible';},set enabled(enabled){this.$.checkbox.checked=enabled?'checked':'';},get enabled(){return this.$.checkbox.checked;},set color(c){this.$.label.style.color=c;this.$.link.color=c;},set target(target){this.$.link.setSelectionAndContent(target,Polymer.dom(this.$.label).textContent);this.updateContents_();},get target(){return this.$.link.selection;},set title(title){this.$.link.title=title;},updateContents_(){this.$.link.style.display=this.target?'':'none';this.$.label.style.display=this.target?'none':'';this.$.label.htmlFor=this.optional?'checkbox':'';}});'use strict';(function(window){window.define=function(x){window.d3=x;};window.define.amd=true;})(this);!function(){function n(n){return null!=n&&!isNaN(n)}function t(n){return n.length}function e(n){for(var t=1;n*t%1;)t*=10;return t}function r(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function u(){}function i(n){return aa+n in this}function o(n){return n=aa+n,n in this&&delete this[n]}function a(){var n=[];return this.forEach(function(t){n.push(t)}),n}function c(){var n=0;for(var t in this)t.charCodeAt(0)===ca&&++n;return n}function s(){for(var n in this)if(n.charCodeAt(0)===ca)return!1;return!0}function l(){}function f(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function h(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=sa.length;r>e;++e){var u=sa[e]+t;if(u in n)return u}}function g(){}function p(){}function v(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new u;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function d(){Xo.event.preventDefault()}function m(){for(var n,t=Xo.event;n=t.sourceEvent;)t=n;return t}function y(n){for(var t=new p,e=0,r=arguments.length;++e<r;)t[arguments[e]]=v(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=Xo.event;u.target=n,Xo.event=u,t[u.type].apply(e,r)}finally{Xo.event=i}}},t}function x(n){return fa(n,da),n}function M(n){return"function"==typeof n?n:function(){return ha(n,this)}}function _(n){return"function"==typeof n?n:function(){return ga(n,this)}}function b(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=Xo.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?i:u}function w(n){return n.trim().replace(/\s+/g," ")}function S(n){return new RegExp("(?:^|\\s+)"+Xo.requote(n)+"(?:\\s+|$)","g")}function k(n){return n.trim().split(/^|\s+/)}function E(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=k(n).map(A);var u=n.length;return"function"==typeof t?r:e}function A(n){var t=S(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(u)||e.setAttribute("class",w(u+" "+n))):e.setAttribute("class",w(u.replace(t," ")))}}function C(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?i:u}function N(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?u:r}function L(n){return"function"==typeof n?n:(n=Xo.ns.qualify(n)).local?function(){return this.ownerDocument.createElementNS(n.space,n.local)}:function(){return this.ownerDocument.createElementNS(this.namespaceURI,n)}}function T(n){return{__data__:n}}function q(n){return function(){return va(this,n)}}function z(n){return arguments.length||(n=Xo.ascending),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function R(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function D(n){return fa(n,ya),n}function P(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function U(){var n=this.__transition__;n&&++n.active}function j(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=c(t,Bo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp("^__on([^.]+)"+Xo.requote(n)+"$");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),c=H;a>0&&(n=n.substring(0,a));var s=Ma.get(n);return s&&(n=s,c=F),a?t?u:r:t?g:i}function H(n,t){return function(e){var r=Xo.event;Xo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{Xo.event=r}}}function F(n,t){var e=H(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function O(){var n=".dragsuppress-"+ ++ba,t="click"+n,e=Xo.select(Go).on("touchmove"+n,d).on("dragstart"+n,d).on("selectstart"+n,d);if(_a){var r=Jo.style,u=r[_a];r[_a]="none"}return function(i){function o(){e.on(t,null)}e.on(n,null),_a&&(r[_a]=u),i&&(e.on(t,function(){d(),o()},!0),setTimeout(o,0))}}function Y(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>wa&&(Go.scrollX||Go.scrollY)){e=Xo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var u=e[0][0].getScreenCTM();wa=!(u.f||u.e),e.remove()}return wa?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function I(n){return n>0?1:0>n?-1:0}function Z(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function V(n){return n>1?0:-1>n?Sa:Math.acos(n)}function X(n){return n>1?Ea:-1>n?-Ea:Math.asin(n)}function $(n){return((n=Math.exp(n))-1/n)/2}function B(n){return((n=Math.exp(n))+1/n)/2}function W(n){return((n=Math.exp(2*n))-1)/(n+1)}function J(n){return(n=Math.sin(n/2))*n}function G(){}function K(n,t,e){return new Q(n,t,e)}function Q(n,t,e){this.h=n,this.s=t,this.l=e}function nt(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,gt(u(n+120),u(n),u(n-120))}function tt(n,t,e){return new et(n,t,e)}function et(n,t,e){this.h=n,this.c=t,this.l=e}function rt(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),ut(e,Math.cos(n*=Na)*t,Math.sin(n)*t)}function ut(n,t,e){return new it(n,t,e)}function it(n,t,e){this.l=n,this.a=t,this.b=e}function ot(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=ct(u)*Fa,r=ct(r)*Oa,i=ct(i)*Ya,gt(lt(3.2404542*u-1.5371385*r-.4985314*i),lt(-.969266*u+1.8760108*r+.041556*i),lt(.0556434*u-.2040259*r+1.0572252*i))}function at(n,t,e){return n>0?tt(Math.atan2(e,t)*La,Math.sqrt(t*t+e*e),n):tt(0/0,0/0,n)}function ct(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function st(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function lt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function ft(n){return gt(n>>16,255&n>>8,255&n)}function ht(n){return ft(n)+""}function gt(n,t,e){return new pt(n,t,e)}function pt(n,t,e){this.r=n,this.g=t,this.b=e}function vt(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function dt(n,t,e){var r,u,i,o,a=0,c=0,s=0;if(u=/([a-z]+)\((.*)\)/i.exec(n))switch(i=u[2].split(","),u[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Mt(i[0]),Mt(i[1]),Mt(i[2]))}return(o=Va.get(n))?t(o.r,o.g,o.b):(null!=n&&"#"===n.charAt(0)&&(r=parseInt(n.substring(1),16),isNaN(r)||(4===n.length?(a=(3840&r)>>4,a=a>>4|a,c=240&r,c=c>>4|c,s=15&r,s=s<<4|s):7===n.length&&(a=(16711680&r)>>16,c=(65280&r)>>8,s=255&r))),t(a,c,s))}function mt(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),K(r,u,c)}function yt(n,t,e){n=xt(n),t=xt(t),e=xt(e);var r=st((.4124564*n+.3575761*t+.1804375*e)/Fa),u=st((.2126729*n+.7151522*t+.072175*e)/Oa),i=st((.0193339*n+.119192*t+.9503041*e)/Ya);return ut(116*u-16,500*(r-u),200*(u-i))}function xt(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Mt(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function _t(n){return"function"==typeof n?n:function(){return n}}function bt(n){return n}function wt(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),St(t,e,n,r)}}function St(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=Xo.dispatch("beforesend","progress","load","error"),a={},c=new XMLHttpRequest,s=null;return!Go.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(n)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=Xo.event;Xo.event=n;try{o.progress.call(i,c)}finally{Xo.event=t}},i.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",i):t},i.responseType=function(n){return arguments.length?(s=n,i):s},i.response=function(n){return e=n,i},["get","post"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Bo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&"function"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),c.setRequestHeader)for(var l in a)c.setRequestHeader(l,a[l]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=s&&(c.responseType=s),null!=u&&i.on("error",u).on("load",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},Xo.rebind(i,o,"on"),null==r?i:i.get(kt(r))}function kt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Et(){var n=At(),t=Ct()-n;t>24?(isFinite(t)&&(clearTimeout(Wa),Wa=setTimeout(Et,t)),Ba=0):(Ba=1,Ga(Et))}function At(){var n=Date.now();for(Ja=Xa;Ja;)n>=Ja.t&&(Ja.f=Ja.c(n-Ja.t)),Ja=Ja.n;return n}function Ct(){for(var n,t=Xa,e=1/0;t;)t.f?t=n?n.n=t.n:Xa=t.n:(t.t<e&&(e=t.t),t=(n=t).n);return $a=n,e}function Nt(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Lt(n,t){var e=Math.pow(10,3*oa(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function Tt(n){var t=n.decimal,e=n.thousands,r=n.grouping,u=n.currency,i=r?function(n){for(var t=n.length,u=[],i=0,o=r[0];t>0&&o>0;)u.push(n.substring(t-=o,t+o)),o=r[i=(i+1)%r.length];return u.reverse().join(e)}:bt;return function(n){var e=Qa.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"",c=e[4]||"",s=e[5],l=+e[6],f=e[7],h=e[8],g=e[9],p=1,v="",d="",m=!1;switch(h&&(h=+h.substring(1)),(s||"0"===r&&"="===o)&&(s=r="0",o="=",f&&(l-=Math.floor((l-1)/4))),g){case"n":f=!0,g="g";break;case"%":p=100,d="%",g="f";break;case"p":p=100,d="%",g="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+g.toLowerCase());case"c":case"d":m=!0,h=0;break;case"s":p=-1,g="r"}"$"===c&&(v=u[0],d=u[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):("e"==g||"f"==g)&&(h=Math.max(0,Math.min(20,h)))),g=nc.get(g)||qt;var y=s&&f;return function(n){var e=d;if(m&&n%1)return"";var u=0>n||0===n&&0>1/n?(n=-n,"-"):a;if(0>p){var c=Xo.formatPrefix(n,h);n=c.scale(n),e=c.symbol+d}else n*=p;n=g(n,h);var x=n.lastIndexOf("."),M=0>x?n:n.substring(0,x),_=0>x?"":t+n.substring(x+1);!s&&f&&(M=i(M));var b=v.length+M.length+_.length+(y?0:u.length),w=l>b?new Array(b=l-b+1).join(r):"";return y&&(M=i(w+M)),u+=v,n=M+_,("<"===o?u+n+w:">"===o?w+u+n:"^"===o?w.substring(0,b>>=1)+u+n+w.substring(b):u+(y?n:w+n))+e}}}function qt(n){return n+""}function zt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Rt(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new ec(e-1)),1),e}function i(n,e){return t(n=new ec(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{ec=zt;var r=new zt;return r._=n,o(r,t,e)}finally{ec=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Dt(n);return c.floor=c,c.round=Dt(r),c.ceil=Dt(u),c.offset=Dt(i),c.range=a,n}function Dt(n){return function(t,e){try{ec=zt;var r=new zt;return r._=t,n(r,e)._}finally{ec=Date}}}function Pt(n){function t(n){function t(t){for(var e,u,i,o=[],a=-1,c=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.substring(c,a)),null!=(u=uc[e=n.charAt(++a)])&&(e=n.charAt(++a)),(i=C[e])&&(e=i(t,null==u?"e"===e?" ":"0":u)),o.push(e),c=a+1);return o.push(n.substring(c,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},u=e(r,n,t,0);if(u!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&ec!==zt,o=new(i?zt:ec);return"j"in r?o.setFullYear(r.y,0,r.j):"w"in r&&("W"in r||"U"in r)?(o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+Math.floor(r.Z/100),r.M+r.Z%100,r.S,r.L),i?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var u,i,o,a=0,c=t.length,s=e.length;c>a;){if(r>=s)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=N[o in uc?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){b.lastIndex=0;var r=b.exec(t.substring(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){M.lastIndex=0;var r=M.exec(t.substring(e));return r?(n.w=_.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){E.lastIndex=0;var r=E.exec(t.substring(e));return r?(n.m=A.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.substring(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,C.c.toString(),t,r)}function c(n,t,r){return e(n,C.x.toString(),t,r)}function s(n,t,r){return e(n,C.X.toString(),t,r)}function l(n,t,e){var r=x.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var f=n.dateTime,h=n.date,g=n.time,p=n.periods,v=n.days,d=n.shortDays,m=n.months,y=n.shortMonths;t.utc=function(n){function e(n){try{ec=zt;var t=new ec;return t._=n,r(t)}finally{ec=Date}}var r=t(n);return e.parse=function(n){try{ec=zt;var t=r.parse(n);return t&&t._}finally{ec=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ee;var x=Xo.map(),M=jt(v),_=Ht(v),b=jt(d),w=Ht(d),S=jt(m),k=Ht(m),E=jt(y),A=Ht(y);p.forEach(function(n,t){x.set(n.toLowerCase(),t)});var C={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return y[n.getMonth()]},B:function(n){return m[n.getMonth()]},c:t(f),d:function(n,t){return Ut(n.getDate(),t,2)},e:function(n,t){return Ut(n.getDate(),t,2)},H:function(n,t){return Ut(n.getHours(),t,2)},I:function(n,t){return Ut(n.getHours()%12||12,t,2)},j:function(n,t){return Ut(1+tc.dayOfYear(n),t,3)},L:function(n,t){return Ut(n.getMilliseconds(),t,3)},m:function(n,t){return Ut(n.getMonth()+1,t,2)},M:function(n,t){return Ut(n.getMinutes(),t,2)},p:function(n){return p[+(n.getHours()>=12)]},S:function(n,t){return Ut(n.getSeconds(),t,2)},U:function(n,t){return Ut(tc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Ut(tc.mondayOfYear(n),t,2)},x:t(h),X:t(g),y:function(n,t){return Ut(n.getFullYear()%100,t,2)},Y:function(n,t){return Ut(n.getFullYear()%1e4,t,4)},Z:ne,"%":function(){return"%"}},N={a:r,A:u,b:i,B:o,c:a,d:Bt,e:Bt,H:Jt,I:Jt,j:Wt,L:Qt,m:$t,M:Gt,p:l,S:Kt,U:Ot,w:Ft,W:Yt,x:c,X:s,y:Zt,Y:It,Z:Vt,"%":te};return t}function Ut(n,t,e){var r=0>n?"-":"",u=(r?-n:n)+"",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function jt(n){return new RegExp("^(?:"+n.map(Xo.requote).join("|")+")","i")}function Ht(n){for(var t=new u,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Ft(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Ot(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function Yt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function It(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Zt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+2));return r?(n.y=Xt(+r[0]),e+r[0].length):-1}function Vt(n,t,e){return/^[+-]\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=+t,e+5):-1}function Xt(n){return n+(n>68?1900:2e3)}function $t(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function Bt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function Wt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function Jt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function Gt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function Kt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function Qt(n,t,e){ic.lastIndex=0;var r=ic.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function ne(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=~~(oa(t)/60),u=oa(t)%60;return e+Ut(r,"0",2)+Ut(u,"0",2)}function te(n,t,e){oc.lastIndex=0;var r=oc.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function ee(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function re(){}function ue(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function ie(n,t){n&&lc.hasOwnProperty(n.type)&&lc[n.type](n,t)}function oe(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function ae(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)oe(n[e],t,1);t.polygonEnd()}function ce(){function n(n,t){n*=Na,t=t*Na/2+Sa/4;var e=n-r,o=e>=0?1:-1,a=o*e,c=Math.cos(t),s=Math.sin(t),l=i*s,f=u*c+l*Math.cos(a),h=l*o*Math.sin(a);hc.add(Math.atan2(h,f)),r=n,u=c,i=s}var t,e,r,u,i;gc.point=function(o,a){gc.point=n,r=(t=o)*Na,u=Math.cos(a=(e=a)*Na/2+Sa/4),i=Math.sin(a)},gc.lineEnd=function(){n(t,e)}}function se(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function le(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function fe(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function he(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function ge(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function pe(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function ve(n){return[Math.atan2(n[1],n[0]),X(n[2])]}function de(n,t){return oa(n[0]-t[0])<Aa&&oa(n[1]-t[1])<Aa}function me(n,t){n*=Na;var e=Math.cos(t*=Na);ye(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function ye(n,t,e){++pc,dc+=(n-dc)/pc,mc+=(t-mc)/pc,yc+=(e-yc)/pc}function xe(){function n(n,u){n*=Na;var i=Math.cos(u*=Na),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),s=Math.atan2(Math.sqrt((s=e*c-r*a)*s+(s=r*o-t*c)*s+(s=t*a-e*o)*s),t*o+e*a+r*c);vc+=s,xc+=s*(t+(t=o)),Mc+=s*(e+(e=a)),_c+=s*(r+(r=c)),ye(t,e,r)}var t,e,r;kc.point=function(u,i){u*=Na;var o=Math.cos(i*=Na);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),kc.point=n,ye(t,e,r)}}function Me(){kc.point=me}function _e(){function n(n,t){n*=Na;var e=Math.cos(t*=Na),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),s=u*c-i*a,l=i*o-r*c,f=r*a-u*o,h=Math.sqrt(s*s+l*l+f*f),g=r*o+u*a+i*c,p=h&&-V(g)/h,v=Math.atan2(h,g);bc+=p*s,wc+=p*l,Sc+=p*f,vc+=v,xc+=v*(r+(r=o)),Mc+=v*(u+(u=a)),_c+=v*(i+(i=c)),ye(r,u,i)}var t,e,r,u,i;kc.point=function(o,a){t=o,e=a,kc.point=n,o*=Na;var c=Math.cos(a*=Na);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),ye(r,u,i)},kc.lineEnd=function(){n(t,e),kc.lineEnd=Me,kc.point=me}}function be(){return!0}function we(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(de(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c=new ke(e,n,null,!0),s=new ke(e,null,c,!1);c.o=s,i.push(c),o.push(s),c=new ke(r,n,null,!1),s=new ke(r,null,c,!0),c.o=s,i.push(c),o.push(s)}}),o.sort(t),Se(i),Se(o),i.length){for(var a=0,c=e,s=o.length;s>a;++a)o[a].e=c=!c;for(var l,f,h=i[0];;){for(var g=h,p=!0;g.v;)if((g=g.n)===h)return;l=g.z,u.lineStart();do{if(g.v=g.o.v=!0,g.e){if(p)for(var a=0,s=l.length;s>a;++a)u.point((f=l[a])[0],f[1]);else r(g.x,g.n.x,1,u);g=g.n}else{if(p){l=g.p.z;for(var a=l.length-1;a>=0;--a)u.point((f=l[a])[0],f[1])}else r(g.x,g.p.x,-1,u);g=g.p}g=g.o,l=g.z,p=!p}while(!g.v);u.lineEnd()}}}function Se(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.n=e=n[r],e.p=u,u=e;u.n=e=n[0],e.p=u}}function ke(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Ee(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);d.point(e[0],e[1])}function c(){y.point=a,d.lineStart()}function s(){y.point=o,d.lineEnd()}function l(n,t){v.push([n,t]);var e=u(n,t);M.point(e[0],e[1])}function f(){M.lineStart(),v=[]}function h(){l(v[0][0],v[0][1]),M.lineEnd();var n,t=M.clean(),e=x.buffer(),r=e.length;if(v.pop(),p.push(v),v=null,r){if(1&t){n=e[0];var u,r=n.length-1,o=-1;for(i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);return i.lineEnd(),void 0}r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Ae))}}var g,p,v,d=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:s,polygonStart:function(){y.point=l,y.lineStart=f,y.lineEnd=h,g=[],p=[],i.polygonStart()},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=s,g=Xo.merge(g);var n=Le(m,p);g.length?we(g,Ne,n,e,i):n&&(i.lineStart(),e(null,null,1,i),i.lineEnd()),i.polygonEnd(),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},x=Ce(),M=t(x);return y}}function Ae(n){return n.length>1}function Ce(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:g,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ne(n,t){return((n=n.x)[0]<0?n[1]-Ea-Aa:Ea-n[1])-((t=t.x)[0]<0?t[1]-Ea-Aa:Ea-t[1])}function Le(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;hc.reset();for(var a=0,c=t.length;c>a;++a){var s=t[a],l=s.length;if(l)for(var f=s[0],h=f[0],g=f[1]/2+Sa/4,p=Math.sin(g),v=Math.cos(g),d=1;;){d===l&&(d=0),n=s[d];var m=n[0],y=n[1]/2+Sa/4,x=Math.sin(y),M=Math.cos(y),_=m-h,b=_>=0?1:-1,w=b*_,S=w>Sa,k=p*x;if(hc.add(Math.atan2(k*b*Math.sin(w),v*M+k*Math.cos(w))),i+=S?_+b*ka:_,S^h>=e^m>=e){var E=fe(se(f),se(n));pe(E);var A=fe(u,E);pe(A);var C=(S^_>=0?-1:1)*X(A[2]);(r>C||r===C&&(E[0]||E[1]))&&(o+=S^_>=0?1:-1)}if(!d++)break;h=m,p=x,v=M,f=n}}return(-Aa>i||Aa>i&&0>hc)^1&o}function Te(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Sa:-Sa,c=oa(i-e);oa(c-Sa)<Aa?(n.point(e,r=(r+o)/2>0?Ea:-Ea),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Sa&&(oa(e-u)<Aa&&(e-=u*Aa),oa(i-a)<Aa&&(i-=a*Aa),r=qe(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function qe(n,t,e,r){var u,i,o=Math.sin(n-e);return oa(o)>Aa?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function ze(n,t,e,r){var u;if(null==n)u=e*Ea,r.point(-Sa,u),r.point(0,u),r.point(Sa,u),r.point(Sa,0),r.point(Sa,-u),r.point(0,-u),r.point(-Sa,-u),r.point(-Sa,0),r.point(-Sa,u);else if(oa(n[0]-t[0])>Aa){var i=n[0]<t[0]?Sa:-Sa;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function Re(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,s,l;return{lineStart:function(){s=c=!1,l=1},point:function(f,h){var g,p=[f,h],v=t(f,h),d=o?v?0:u(f,h):v?u(f+(0>f?Sa:-Sa),h):0;if(!e&&(s=c=v)&&n.lineStart(),v!==c&&(g=r(e,p),(de(e,g)||de(p,g))&&(p[0]+=Aa,p[1]+=Aa,v=t(p[0],p[1]))),v!==c)l=0,v?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^v){var m;d&i||!(m=r(p,e,!0))||(l=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!v||e&&de(e,p)||n.point(p[0],p[1]),e=p,c=v,i=d},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return l|(s&&c)<<1}}}function r(n,t,e){var r=se(n),u=se(t),o=[1,0,0],a=fe(r,u),c=le(a,a),s=a[0],l=c-s*s;if(!l)return!e&&n;var f=i*c/l,h=-i*s/l,g=fe(o,a),p=ge(o,f),v=ge(a,h);he(p,v);var d=g,m=le(p,d),y=le(d,d),x=m*m-y*(le(p,p)-1);if(!(0>x)){var M=Math.sqrt(x),_=ge(d,(-m-M)/y);if(he(_,p),_=ve(_),!e)return _;var b,w=n[0],S=t[0],k=n[1],E=t[1];w>S&&(b=w,w=S,S=b);var A=S-w,C=oa(A-Sa)<Aa,N=C||Aa>A;if(!C&&k>E&&(b=k,k=E,E=b),N?C?k+E>0^_[1]<(oa(_[0]-w)<Aa?k:E):k<=_[1]&&_[1]<=E:A>Sa^(w<=_[0]&&_[0]<=S)){var L=ge(d,(-m+M)/y);return he(L,p),[_,ve(L)]}}}function u(t,e){var r=o?n:Sa-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=oa(i)>Aa,c=cr(n,6*Na);return Ee(t,e,c,o?[0,-n]:[-Sa,n-Sa])}function De(n,t,e,r){return function(u){var i,o=u.a,a=u.b,c=o.x,s=o.y,l=a.x,f=a.y,h=0,g=1,p=l-c,v=f-s;if(i=n-c,p||!(i>0)){if(i/=p,0>p){if(h>i)return;g>i&&(g=i)}else if(p>0){if(i>g)return;i>h&&(h=i)}if(i=e-c,p||!(0>i)){if(i/=p,0>p){if(i>g)return;i>h&&(h=i)}else if(p>0){if(h>i)return;g>i&&(g=i)}if(i=t-s,v||!(i>0)){if(i/=v,0>v){if(h>i)return;g>i&&(g=i)}else if(v>0){if(i>g)return;i>h&&(h=i)}if(i=r-s,v||!(0>i)){if(i/=v,0>v){if(i>g)return;i>h&&(h=i)}else if(v>0){if(h>i)return;g>i&&(g=i)}return h>0&&(u.a={x:c+h*p,y:s+h*v}),1>g&&(u.b={x:c+g*p,y:s+g*v}),u}}}}}}function Pe(n,t,e,r){function u(r,u){return oa(r[0]-n)<Aa?u>0?0:3:oa(r[0]-e)<Aa?u>0?2:1:oa(r[1]-t)<Aa?u>0?1:0:u>0?3:2}function i(n,t){return o(n.x,t.x)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function c(n){for(var t=0,e=d.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=d[u],c=a.length,s=a[0];c>o;++o)i=a[o],s[1]<=r?i[1]>r&&Z(s,i,n)>0&&++t:i[1]<=r&&Z(s,i,n)<0&&--t,s=i;return 0!==t}function s(i,a,c,s){var l=0,f=0;if(null==i||(l=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do s.point(0===l||3===l?n:e,l>1?r:t);while((l=(l+c+4)%4)!==f)}else s.point(a[0],a[1])}function l(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function f(n,t){l(n,t)&&a.point(n,t)}function h(){N.point=p,d&&d.push(m=[]),S=!0,w=!1,_=b=0/0}function g(){v&&(p(y,x),M&&w&&A.rejoin(),v.push(A.buffer())),N.point=f,w&&a.lineEnd()}function p(n,t){n=Math.max(-Ac,Math.min(Ac,n)),t=Math.max(-Ac,Math.min(Ac,t));var e=l(n,t);if(d&&m.push([n,t]),S)y=n,x=t,M=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:_,y:b},b:{x:n,y:t}};C(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}_=n,b=t,w=e}var v,d,m,y,x,M,_,b,w,S,k,E=a,A=Ce(),C=De(n,t,e,r),N={point:f,lineStart:h,lineEnd:g,polygonStart:function(){a=A,v=[],d=[],k=!0},polygonEnd:function(){a=E,v=Xo.merge(v);var t=c([n,r]),e=k&&t,u=v.length;(e||u)&&(a.polygonStart(),e&&(a.lineStart(),s(null,null,1,a),a.lineEnd()),u&&we(v,i,t,s,a),a.polygonEnd()),v=d=m=null}};return N}}function Ue(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function je(n){var t=0,e=Sa/3,r=nr(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Sa/180,e=n[1]*Sa/180):[180*(t/Sa),180*(e/Sa)]},u}function He(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,X((i-(n*n+e*e)*u*u)/(2*u))]},e}function Fe(){function n(n,t){Nc+=u*n-r*t,r=n,u=t}var t,e,r,u;Rc.point=function(i,o){Rc.point=n,t=r=i,e=u=o},Rc.lineEnd=function(){n(t,e)}}function Oe(n,t){Lc>n&&(Lc=n),n>qc&&(qc=n),Tc>t&&(Tc=t),t>zc&&(zc=t)}function Ye(){function n(n,t){o.push("M",n,",",t,i)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function u(){o.push("Z")}var i=Ie(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=Ie(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Ie(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Ze(n,t){dc+=n,mc+=t,++yc}function Ve(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);xc+=o*(t+n)/2,Mc+=o*(e+r)/2,_c+=o,Ze(t=n,e=r)}var t,e;Pc.point=function(r,u){Pc.point=n,Ze(t=r,e=u)}}function Xe(){Pc.point=Ze}function $e(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);xc+=o*(r+n)/2,Mc+=o*(u+t)/2,_c+=o,o=u*n-r*t,bc+=o*(r+n),wc+=o*(u+t),Sc+=3*o,Ze(r=n,u=t)}var t,e,r,u;Pc.point=function(i,o){Pc.point=n,Ze(t=r=i,e=u=o)},Pc.lineEnd=function(){n(t,e)}}function Be(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,ka)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:g};return a}function We(n){function t(n){return(a?r:e)(n)}function e(t){return Ke(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){x=0/0,S.point=i,t.lineStart()}function i(e,r){var i=se([e,r]),o=n(e,r);u(x,M,y,_,b,w,x=o[0],M=o[1],y=e,_=i[0],b=i[1],w=i[2],a,t),t.point(x,M)}function o(){S.point=e,t.lineEnd()}function c(){r(),S.point=s,S.lineEnd=l}function s(n,t){i(f=n,h=t),g=x,p=M,v=_,d=b,m=w,S.point=i}function l(){u(x,M,y,_,b,w,g,p,f,v,d,m,a,t),S.lineEnd=o,o()}var f,h,g,p,v,d,m,y,x,M,_,b,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function u(t,e,r,a,c,s,l,f,h,g,p,v,d,m){var y=l-t,x=f-e,M=y*y+x*x;if(M>4*i&&d--){var _=a+g,b=c+p,w=s+v,S=Math.sqrt(_*_+b*b+w*w),k=Math.asin(w/=S),E=oa(oa(w)-1)<Aa||oa(r-h)<Aa?(r+h)/2:Math.atan2(b,_),A=n(E,k),C=A[0],N=A[1],L=C-t,T=N-e,q=x*L-y*T;(q*q/M>i||oa((y*L+x*T)/M-.5)>.3||o>a*g+c*p+s*v)&&(u(t,e,r,a,c,s,C,N,E,_/=S,b/=S,w,d,m),m.point(C,N),u(C,N,E,_,b,w,l,f,h,g,p,v,d,m))}}var i=.5,o=Math.cos(30*Na),a=16;return t.precision=function(n){return arguments.length?(a=(i=n*n)>0&&16,t):Math.sqrt(i)},t}function Je(n){var t=We(function(t,e){return n([t*La,e*La])});return function(n){return tr(t(n))}}function Ge(n){this.stream=n}function Ke(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function Qe(n){return nr(function(){return n})()}function nr(n){function t(n){return n=a(n[0]*Na,n[1]*Na),[n[0]*h+c,s-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(s-n[1])/h),n&&[n[0]*La,n[1]*La]}function r(){a=Ue(o=ur(m,y,x),i);var n=i(v,d);return c=g-n[0]*h,s=p+n[1]*h,u()}function u(){return l&&(l.valid=!1,l=null),t}var i,o,a,c,s,l,f=We(function(n,t){return n=i(n,t),[n[0]*h+c,s-n[1]*h]}),h=150,g=480,p=250,v=0,d=0,m=0,y=0,x=0,M=Ec,_=bt,b=null,w=null;return t.stream=function(n){return l&&(l.valid=!1),l=tr(M(o,f(_(n)))),l.valid=!0,l},t.clipAngle=function(n){return arguments.length?(M=null==n?(b=n,Ec):Re((b=+n)*Na),u()):b},t.clipExtent=function(n){return arguments.length?(w=n,_=n?Pe(n[0][0],n[0][1],n[1][0],n[1][1]):bt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(v=n[0]%360*Na,d=n[1]%360*Na,r()):[v*La,d*La]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Na,y=n[1]%360*Na,x=n.length>2?n[2]%360*Na:0,r()):[m*La,y*La,x*La]},Xo.rebind(t,f,"precision"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function tr(n){return Ke(n,function(t,e){n.point(t*Na,e*Na)})}function er(n,t){return[n,t]}function rr(n,t){return[n>Sa?n-ka:-Sa>n?n+ka:n,t]}function ur(n,t,e){return n?t||e?Ue(or(n),ar(t,e)):or(n):t||e?ar(t,e):rr}function ir(n){return function(t,e){return t+=n,[t>Sa?t-ka:-Sa>t?t+ka:t,e]}}function or(n){var t=ir(n);return t.invert=ir(-n),t}function ar(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*r+a*u;return[Math.atan2(c*i-l*o,a*r-s*u),X(l*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,s=Math.sin(t),l=s*i-c*o;return[Math.atan2(c*i+s*o,a*r+l*u),X(l*r-a*u)]},e}function cr(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=sr(e,u),i=sr(e,i),(o>0?i>u:u>i)&&(u+=o*ka)):(u=n+o*ka,i=n-.5*c);for(var s,l=u;o>0?l>i:i>l;l-=c)a.point((s=ve([e,-r*Math.cos(l),-r*Math.sin(l)]))[0],s[1])}}function sr(n,t){var e=se(t);e[0]-=n,pe(e);var r=V(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Aa)%(2*Math.PI)}function lr(n,t,e){var r=Xo.range(n,t-Aa,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function fr(n,t,e){var r=Xo.range(n,t-Aa,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function hr(n){return n.source}function gr(n){return n.target}function pr(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),s=u*Math.sin(n),l=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(J(r-t)+u*o*J(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*l,u=e*s+t*f,o=e*i+t*a;return[Math.atan2(u,r)*La,Math.atan2(o,Math.sqrt(r*r+u*u))*La]}:function(){return[n*La,t*La]};return p.distance=h,p}function vr(){function n(n,u){var i=Math.sin(u*=Na),o=Math.cos(u),a=oa((n*=Na)-t),c=Math.cos(a);Uc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;jc.point=function(u,i){t=u*Na,e=Math.sin(i*=Na),r=Math.cos(i),jc.point=n},jc.lineEnd=function(){jc.point=jc.lineEnd=g}}function dr(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function mr(n,t){function e(n,t){var e=oa(oa(t)-Ea)<Aa?0:o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Sa/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=I(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Ea]},e):xr}function yr(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return oa(u)<Aa?er:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-I(u)*Math.sqrt(n*n+e*e)]},e)}function xr(n,t){return[n,Math.log(Math.tan(Sa/4+t/2))]}function Mr(n){var t,e=Qe(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=Sa*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function _r(n,t){return[Math.log(Math.tan(Sa/4+t/2)),-n]}function br(n){return n[0]}function wr(n){return n[1]}function Sr(n){for(var t=n.length,e=[0,1],r=2,u=2;t>u;u++){for(;r>1&&Z(n[e[r-2]],n[e[r-1]],n[u])<=0;)--r;e[r++]=u}return e.slice(0,r)}function kr(n,t){return n[0]-t[0]||n[1]-t[1]}function Er(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Ar(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],s=e[1],l=t[1]-c,f=r[1]-s,h=(a*(c-s)-f*(u-i))/(f*o-a*l);return[u+h*o,c+h*l]}function Cr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Nr(){Jr(this),this.edge=this.site=this.circle=null}function Lr(n){var t=Jc.pop()||new Nr;return t.site=n,t}function Tr(n){Or(n),$c.remove(n),Jc.push(n),Jr(n)}function qr(n){var t=n.circle,e=t.x,r=t.cy,u={x:e,y:r},i=n.P,o=n.N,a=[n];Tr(n);for(var c=i;c.circle&&oa(e-c.circle.x)<Aa&&oa(r-c.circle.cy)<Aa;)i=c.P,a.unshift(c),Tr(c),c=i;a.unshift(c),Or(c);for(var s=o;s.circle&&oa(e-s.circle.x)<Aa&&oa(r-s.circle.cy)<Aa;)o=s.N,a.push(s),Tr(s),s=o;a.push(s),Or(s);var l,f=a.length;for(l=1;f>l;++l)s=a[l],c=a[l-1],$r(s.edge,c.site,s.site,u);c=a[0],s=a[f-1],s.edge=Vr(c.site,s.site,null,u),Fr(c),Fr(s)}function zr(n){for(var t,e,r,u,i=n.x,o=n.y,a=$c._;a;)if(r=Rr(a,o)-i,r>Aa)a=a.L;else{if(u=i-Dr(a,o),!(u>Aa)){r>-Aa?(t=a.P,e=a):u>-Aa?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var c=Lr(n);if($c.insert(t,c),t||e){if(t===e)return Or(t),e=Lr(t.site),$c.insert(c,e),c.edge=e.edge=Vr(t.site,c.site),Fr(t),Fr(e),void 0;if(!e)return c.edge=Vr(t.site,c.site),void 0;Or(t),Or(e);var s=t.site,l=s.x,f=s.y,h=n.x-l,g=n.y-f,p=e.site,v=p.x-l,d=p.y-f,m=2*(h*d-g*v),y=h*h+g*g,x=v*v+d*d,M={x:(d*y-g*x)/m+l,y:(h*x-v*y)/m+f};$r(e.edge,s,p,M),c.edge=Vr(s,n,null,M),e.edge=Vr(n,p,null,M),Fr(t),Fr(e)}}function Rr(n,t){var e=n.site,r=e.x,u=e.y,i=u-t;if(!i)return r;var o=n.P;if(!o)return-1/0;e=o.site;var a=e.x,c=e.y,s=c-t;if(!s)return a;var l=a-r,f=1/i-1/s,h=l/s;return f?(-h+Math.sqrt(h*h-2*f*(l*l/(-2*s)-c+s/2+u-i/2)))/f+r:(r+a)/2}function Dr(n,t){var e=n.N;if(e)return Rr(e,t);var r=n.site;return r.y===t?r.x:1/0}function Pr(n){this.site=n,this.edges=[]}function Ur(n){for(var t,e,r,u,i,o,a,c,s,l,f=n[0][0],h=n[1][0],g=n[0][1],p=n[1][1],v=Xc,d=v.length;d--;)if(i=v[d],i&&i.prepare())for(a=i.edges,c=a.length,o=0;c>o;)l=a[o].end(),r=l.x,u=l.y,s=a[++o%c].start(),t=s.x,e=s.y,(oa(r-t)>Aa||oa(u-e)>Aa)&&(a.splice(o,0,new Br(Xr(i.site,l,oa(r-f)<Aa&&p-u>Aa?{x:f,y:oa(t-f)<Aa?e:p}:oa(u-p)<Aa&&h-r>Aa?{x:oa(e-p)<Aa?t:h,y:p}:oa(r-h)<Aa&&u-g>Aa?{x:h,y:oa(t-h)<Aa?e:g}:oa(u-g)<Aa&&r-f>Aa?{x:oa(e-g)<Aa?t:f,y:g}:null),i.site,null)),++c)}function jr(n,t){return t.angle-n.angle}function Hr(){Jr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Fr(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,u=n.site,i=e.site;if(r!==i){var o=u.x,a=u.y,c=r.x-o,s=r.y-a,l=i.x-o,f=i.y-a,h=2*(c*f-s*l);if(!(h>=-Ca)){var g=c*c+s*s,p=l*l+f*f,v=(f*g-s*p)/h,d=(c*p-l*g)/h,f=d+a,m=Gc.pop()||new Hr;m.arc=n,m.site=u,m.x=v+o,m.y=f+Math.sqrt(v*v+d*d),m.cy=f,n.circle=m;for(var y=null,x=Wc._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}Wc.insert(y,m),y||(Bc=m)}}}}function Or(n){var t=n.circle;t&&(t.P||(Bc=t.N),Wc.remove(t),Gc.push(t),Jr(t),n.circle=null)}function Yr(n){for(var t,e=Vc,r=De(n[0][0],n[0][1],n[1][0],n[1][1]),u=e.length;u--;)t=e[u],(!Ir(t,n)||!r(t)||oa(t.a.x-t.b.x)<Aa&&oa(t.a.y-t.b.y)<Aa)&&(t.a=t.b=null,e.splice(u,1))}function Ir(n,t){var e=n.b;if(e)return!0;var r,u,i=n.a,o=t[0][0],a=t[1][0],c=t[0][1],s=t[1][1],l=n.l,f=n.r,h=l.x,g=l.y,p=f.x,v=f.y,d=(h+p)/2,m=(g+v)/2;if(v===g){if(o>d||d>=a)return;if(h>p){if(i){if(i.y>=s)return}else i={x:d,y:c};e={x:d,y:s}}else{if(i){if(i.y<c)return}else i={x:d,y:s};e={x:d,y:c}}}else if(r=(h-p)/(v-g),u=m-r*d,-1>r||r>1)if(h>p){if(i){if(i.y>=s)return}else i={x:(c-u)/r,y:c};e={x:(s-u)/r,y:s}}else{if(i){if(i.y<c)return}else i={x:(s-u)/r,y:s};e={x:(c-u)/r,y:c}}else if(v>g){if(i){if(i.x>=a)return}else i={x:o,y:r*o+u};e={x:a,y:r*a+u}}else{if(i){if(i.x<o)return}else i={x:a,y:r*a+u};e={x:o,y:r*o+u}}return n.a=i,n.b=e,!0}function Zr(n,t){this.l=n,this.r=t,this.a=this.b=null}function Vr(n,t,e,r){var u=new Zr(n,t);return Vc.push(u),e&&$r(u,n,t,e),r&&$r(u,t,n,r),Xc[n.i].edges.push(new Br(u,n,t)),Xc[t.i].edges.push(new Br(u,t,n)),u}function Xr(n,t,e){var r=new Zr(n,null);return r.a=t,r.b=e,Vc.push(r),r}function $r(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function Br(n,t,e){var r=n.a,u=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(u.x-r.x,r.y-u.y):Math.atan2(r.x-u.x,u.y-r.y)}function Wr(){this._=null}function Jr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function Gr(n,t){var e=t,r=t.R,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function Kr(n,t){var e=t,r=t.L,u=e.U;u?u.L===e?u.L=r:u.R=r:n._=r,r.U=u,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function Qr(n){for(;n.L;)n=n.L;return n}function nu(n,t){var e,r,u,i=n.sort(tu).pop();for(Vc=[],Xc=new Array(n.length),$c=new Wr,Wc=new Wr;;)if(u=Bc,i&&(!u||i.y<u.y||i.y===u.y&&i.x<u.x))(i.x!==e||i.y!==r)&&(Xc[i.i]=new Pr(i),zr(i),e=i.x,r=i.y),i=n.pop();else{if(!u)break;qr(u.arc)}t&&(Yr(t),Ur(t));var o={cells:Xc,edges:Vc};return $c=Wc=Vc=Xc=null,o}function tu(n,t){return t.y-n.y||t.x-n.x}function eu(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function ru(n){return n.x}function uu(n){return n.y}function iu(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function ou(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&ou(n,c[0],e,r,o,a),c[1]&&ou(n,c[1],o,r,u,a),c[2]&&ou(n,c[2],e,a,o,i),c[3]&&ou(n,c[3],o,a,u,i)}}function au(n,t){n=Xo.rgb(n),t=Xo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return"#"+vt(Math.round(e+i*n))+vt(Math.round(r+o*n))+vt(Math.round(u+a*n))}}function cu(n,t){var e,r={},u={};for(e in n)e in t?r[e]=fu(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function su(n,t){return t-=n=+n,function(e){return n+t*e}}function lu(n,t){var e,r,u,i,o,a=0,c=0,s=[],l=[];for(n+="",t+="",Qc.lastIndex=0,r=0;e=Qc.exec(t);++r)e.index&&s.push(t.substring(a,c=e.index)),l.push({i:s.length,x:e[0]}),s.push(null),a=Qc.lastIndex;for(a<t.length&&s.push(t.substring(a)),r=0,i=l.length;(e=Qc.exec(n))&&i>r;++r)if(o=l[r],o.x==e[0]){if(o.i)if(null==s[o.i+1])for(s[o.i-1]+=o.x,s.splice(o.i,1),u=r+1;i>u;++u)l[u].i--;else for(s[o.i-1]+=o.x+s[o.i+1],s.splice(o.i,2),u=r+1;i>u;++u)l[u].i-=2;else if(null==s[o.i+1])s[o.i]=o.x;else for(s[o.i]=o.x+s[o.i+1],s.splice(o.i+1,1),u=r+1;i>u;++u)l[u].i--;l.splice(r,1),i--,r--}else o.x=su(parseFloat(e[0]),parseFloat(o.x));for(;i>r;)o=l.pop(),null==s[o.i+1]?s[o.i]=o.x:(s[o.i]=o.x+s[o.i+1],s.splice(o.i+1,1)),i--;return 1===s.length?null==s[0]?(o=l[0].x,function(n){return o(n)+""}):function(){return t}:function(n){for(r=0;i>r;++r)s[(o=l[r]).i]=o.x(n);return s.join("")}}function fu(n,t){for(var e,r=Xo.interpolators.length;--r>=0&&!(e=Xo.interpolators[r](n,t)););return e}function hu(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(fu(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function gu(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function pu(n){return function(t){return 1-n(1-t)}}function vu(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function du(n){return n*n}function mu(n){return n*n*n}function yu(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function xu(n){return function(t){return Math.pow(t,n)}}function Mu(n){return 1-Math.cos(n*Ea)}function _u(n){return Math.pow(2,10*(n-1))}function bu(n){return 1-Math.sqrt(1-n*n)}function wu(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/ka*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*ka/t)}}function Su(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function ku(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Eu(n,t){n=Xo.hcl(n),t=Xo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return rt(e+i*n,r+o*n,u+a*n)+""}}function Au(n,t){n=Xo.hsl(n),t=Xo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return nt(e+i*n,r+o*n,u+a*n)+""}}function Cu(n,t){n=Xo.lab(n),t=Xo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return ot(e+i*n,r+o*n,u+a*n)+""}}function Nu(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Lu(n){var t=[n.a,n.b],e=[n.c,n.d],r=qu(t),u=Tu(t,e),i=qu(zu(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*La,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*La:0}function Tu(n,t){return n[0]*t[0]+n[1]*t[1]}function qu(n){var t=Math.sqrt(Tu(n,n));return t&&(n[0]/=t,n[1]/=t),t}function zu(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ru(n,t){var e,r=[],u=[],i=Xo.transform(n),o=Xo.transform(t),a=i.translate,c=o.translate,s=i.rotate,l=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push("translate(",null,",",null,")"),u.push({i:1,x:su(a[0],c[0])},{i:3,x:su(a[1],c[1])})):c[0]||c[1]?r.push("translate("+c+")"):r.push(""),s!=l?(s-l>180?l+=360:l-s>180&&(s+=360),u.push({i:r.push(r.pop()+"rotate(",null,")")-2,x:su(s,l)})):l&&r.push(r.pop()+"rotate("+l+")"),f!=h?u.push({i:r.push(r.pop()+"skewX(",null,")")-2,x:su(f,h)}):h&&r.push(r.pop()+"skewX("+h+")"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+"scale(",null,",",null,")"),u.push({i:e-4,x:su(g[0],p[0])},{i:e-2,x:su(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+"scale("+p+")"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join("")}}function Du(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Pu(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function Uu(n){for(var t=n.source,e=n.target,r=Hu(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function ju(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Hu(n,t){if(n===t)return n;for(var e=ju(n),r=ju(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function Fu(n){n.fixed|=2}function Ou(n){n.fixed&=-7}function Yu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function Iu(n){n.fixed&=-5}function Zu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(Zu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var s=t*e[n.point.index];n.charge+=n.pointCharge=s,r+=s*n.point.x,u+=s*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function Vu(n,t){return Xo.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=Wu,n}function Xu(n){return n.children}function $u(n){return n.value}function Bu(n,t){return t.value-n.value}function Wu(n){return Xo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function Ju(n){return n.x}function Gu(n){return n.y}function Ku(n,t,e){n.y0=t,n.y=e}function Qu(n){return Xo.range(n.length)}function ni(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function ti(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function ei(n){return n.reduce(ri,0)}function ri(n,t){return n+t[1]}function ui(n,t){return ii(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function ii(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function oi(n){return[Xo.min(n),Xo.max(n)]}function ai(n,t){return n.parent==t.parent?1:2}function ci(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}function si(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree.thread}function li(n,t){var e=n.children;if(e&&(u=e.length))for(var r,u,i=-1;++i<u;)t(r=li(e[i],t),n)>0&&(n=r);return n}function fi(n,t){return n.x-t.x}function hi(n,t){return t.x-n.x}function gi(n,t){return n.depth-t.depth}function pi(n,t){function e(n,r){var u=n.children;if(u&&(o=u.length))for(var i,o,a=null,c=-1;++c<o;)i=u[c],e(i,a),a=i;t(n,r)}e(n,null)}function vi(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i]._tree,t.prelim+=e,t.mod+=e,e+=t.shift+(r+=t.change)}function di(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.change+=r,t.change-=r,t.shift+=e,t.prelim+=e,t.mod+=e}function mi(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ancestor:e}function yi(n,t){return n.value-t.value}function xi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Mi(n,t){n._pack_next=t,t._pack_prev=n}function _i(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function bi(n){function t(n){l=Math.min(n.x-n.r,l),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(s=e.length)){var e,r,u,i,o,a,c,s,l=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(wi),r=e[0],r.x=-r.r,r.y=0,t(r),s>1&&(u=e[1],u.x=u.r,u.y=0,t(u),s>2))for(i=e[2],Ei(r,u,i),t(i),xi(r,i),r._pack_prev=i,xi(i,u),u=r._pack_next,o=3;s>o;o++){Ei(r,u,i=e[o]);var p=0,v=1,d=1;for(a=u._pack_next;a!==u;a=a._pack_next,v++)if(_i(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!_i(c,i);c=c._pack_prev,d++);p?(d>v||v==d&&u.r<r.r?Mi(r,u=a):Mi(r=c,u),o--):(xi(r,i),u=i,t(i))}var m=(l+f)/2,y=(h+g)/2,x=0;for(o=0;s>o;o++)i=e[o],i.x-=m,i.y-=y,x=Math.max(x,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=x,e.forEach(Si)}}function wi(n){n._pack_next=n._pack_prev=n}function Si(n){delete n._pack_next,delete n._pack_prev}function ki(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)ki(u[i],t,e,r)}function Ei(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),s=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+s*i,e.y=n.y+c*i-s*u}else e.x=n.x+r,e.y=n.y}function Ai(n){return 1+Xo.max(n,function(n){return n.y})}function Ci(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Ni(n){var t=n.children;return t&&t.length?Ni(t[0]):n}function Li(n){var t,e=n.children;return e&&(t=e.length)?Li(e[t-1]):n}function Ti(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function qi(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function zi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Ri(n){return n.rangeExtent?n.rangeExtent():zi(n.range())}function Di(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Pi(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Ui(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:ls}function ji(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=Xo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Hi(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?ji:Di,c=r?Pu:Du;return o=u(n,t,c,e),a=u(t,n,c,fu),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Nu)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return Ii(n,t)},i.tickFormat=function(t,e){return Zi(n,t,e)},i.nice=function(t){return Oi(n,t),u()},i.copy=function(){return Hi(n,t,e,r)},u()}function Fi(n,t){return Xo.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Oi(n,t){return Pi(n,Ui(Yi(n,t)[2]))}function Yi(n,t){null==t&&(t=10);var e=zi(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function Ii(n,t){return Xo.range.apply(Xo,Yi(n,t))}function Zi(n,t,e){var r=Yi(n,t);return Xo.format(e?e.replace(Qa,function(n,t,e,u,i,o,a,c,s,l){return[t,e,u,i,o,a,c,s||"."+Xi(l,r),l].join("")}):",."+Vi(r[2])+"f")}function Vi(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function Xi(n,t){var e=Vi(t[2]);return n in fs?Math.abs(e-Vi(Math.max(Math.abs(t[0]),Math.abs(t[1]))))+ +("e"!==n):e-2*("%"===n)}function $i(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Pi(r.map(u),e?Math:gs);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=zi(r),o=[],a=n[0],c=n[1],s=Math.floor(u(a)),l=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(l-s)){if(e){for(;l>s;s++)for(var h=1;f>h;h++)o.push(i(s)*h);o.push(i(s))}else for(o.push(i(s));s++<l;)for(var h=f-1;h>0;h--)o.push(i(s)*h);for(s=0;o[s]<a;s++);for(l=o.length;o[l-1]>c;l--);o=o.slice(s,l)}return o},o.tickFormat=function(n,t){if(!arguments.length)return hs;arguments.length<2?t=hs:"function"!=typeof t&&(t=Xo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return $i(n.copy(),t,e,r)},Fi(o,n)}function Bi(n,t,e){function r(t){return n(u(t))}var u=Wi(t),i=Wi(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Ii(e,n)},r.tickFormat=function(n,t){return Zi(e,n,t)},r.nice=function(n){return r.domain(Oi(e,n))},r.exponent=function(o){return arguments.length?(u=Wi(t=o),i=Wi(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Bi(n.copy(),t,e)},Fi(r,n)}function Wi(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Ji(n,t){function e(e){return o[((i.get(e)||"range"===t.t&&i.set(e,n.push(e)))-1)%o.length]}function r(t,e){return Xo.range(n.length).map(function(n){return t+e*n})}var i,o,a;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new u;for(var o,a=-1,c=r.length;++a<c;)i.has(o=r[a])||i.set(o,n.push(o));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(o=n,a=0,t={t:"range",a:arguments},e):o},e.rangePoints=function(u,i){arguments.length<2&&(i=0);var c=u[0],s=u[1],l=(s-c)/(Math.max(1,n.length-1)+i);return o=r(n.length<2?(c+s)/2:c+l*i/2,l),a=0,t={t:"rangePoints",a:arguments},e},e.rangeBands=function(u,i,c){arguments.length<2&&(i=0),arguments.length<3&&(c=i);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=(f-l)/(n.length-i+2*c);return o=r(l+h*c,h),s&&o.reverse(),a=h*(1-i),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(u,i,c){arguments.length<2&&(i=0),arguments.length<3&&(c=i);var s=u[1]<u[0],l=u[s-0],f=u[1-s],h=Math.floor((f-l)/(n.length-i+2*c)),g=f-l-(n.length-i)*h;return o=r(l+Math.round(g/2),h),s&&o.reverse(),a=Math.round(h*(1-i)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return zi(t.a[0])},e.copy=function(){return Ji(n,t)},e.domain(n)}function Gi(n,t){function e(){var e=0,i=t.length;for(u=[];++e<i;)u[e-1]=Xo.quantile(n,e/i);return r}function r(n){return isNaN(n=+n)?void 0:t[Xo.bisect(u,n)]}var u;return r.domain=function(t){return arguments.length?(n=t.filter(function(n){return!isNaN(n)}).sort(Xo.ascending),e()):n},r.range=function(n){return arguments.length?(t=n,e()):t},r.quantiles=function(){return u},r.invertExtent=function(e){return e=t.indexOf(e),0>e?[0/0,0/0]:[e>0?u[e-1]:n[0],e<u.length?u[e]:n[n.length-1]]},r.copy=function(){return Gi(n,t)},e()}function Ki(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return Ki(n,t,e)},u()}function Qi(n,t){function e(e){return e>=e?t[Xo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return Qi(n,t)},e}function no(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Ii(n,t)},t.tickFormat=function(t,e){return Zi(n,t,e)},t.copy=function(){return no(n)},t}function to(n){return n.innerRadius}function eo(n){return n.outerRadius}function ro(n){return n.startAngle}function uo(n){return n.endAngle}function io(n){function t(t){function o(){s.push("M",i(n(l),a))}for(var c,s=[],l=[],f=-1,h=t.length,g=_t(e),p=_t(r);++f<h;)u.call(this,c=t[f],f)?l.push([+g.call(this,c,f),+p.call(this,c,f)]):l.length&&(o(),l=[]);return l.length&&o(),s.length?s.join(""):null}var e=br,r=wr,u=be,i=oo,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?i=n:(i=Ms.get(n)||oo).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function oo(n){return n.join("L")}function ao(n){return oo(n)+"Z"}function co(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&u.push("H",r[0]),u.join("")}function so(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("V",(r=n[t])[1],"H",r[0]);return u.join("")}function lo(n){for(var t=0,e=n.length,r=n[0],u=[r[0],",",r[1]];++t<e;)u.push("H",(r=n[t])[0],"V",r[1]);return u.join("")}function fo(n,t){return n.length<4?oo(n):n[1]+po(n.slice(1,n.length-1),vo(n,t))}function ho(n,t){return n.length<3?oo(n):n[0]+po((n.push(n[0]),n),vo([n[n.length-2]].concat(n,[n[1]]),t))}function go(n,t){return n.length<3?oo(n):n[0]+po(n,vo(n,t))}function po(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return oo(n);var e=n.length!=t.length,r="",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+="C"+(u[0]+o[0])+","+(u[1]+o[1])+","+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1];for(var s=2;s<t.length;s++,c++)i=n[c],a=t[s],r+="S"+(i[0]-a[0])+","+(i[1]-a[1])+","+i[0]+","+i[1]}if(e){var l=n[c];r+="Q"+(i[0]+2*a[0]/3)+","+(i[1]+2*a[1]/3)+","+l[0]+","+l[1]}return r}function vo(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function mo(n){if(n.length<3)return oo(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,",",i,"L",_o(ws,o),",",_o(ws,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),bo(c,o,a);return n.pop(),c.push("L",r),c.join("")}function yo(n){if(n.length<4)return oo(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(_o(ws,i)+","+_o(ws,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),bo(e,i,o);return e.join("")}function xo(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[_o(ws,o),",",_o(ws,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),bo(t,o,a);return t.join("")}function Mo(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,s=-1;++s<=e;)r=n[s],u=s/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return mo(n)}function _o(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function bo(n,t,e){n.push("C",_o(_s,t),",",_o(_s,e),",",_o(bs,t),",",_o(bs,e),",",_o(ws,t),",",_o(ws,e))}function wo(n,t){return(t[1]-n[1])/(t[0]-n[0])}function So(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=wo(u,i);++t<e;)r[t]=(o+(o=wo(u=i,i=n[t+1])))/2;return r[t]=o,r}function ko(n){for(var t,e,r,u,i=[],o=So(n),a=-1,c=n.length-1;++a<c;)t=wo(n[a],n[a+1]),oa(t)<Aa?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function Eo(n){return n.length<3?oo(n):n[0]+po(n,ko(n))}function Ao(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+ys,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Co(n){function t(t){function c(){v.push("M",a(n(m),f),l,s(n(d.reverse()),f),"Z")}for(var h,g,p,v=[],d=[],m=[],y=-1,x=t.length,M=_t(e),_=_t(u),b=e===r?function(){return g}:_t(r),w=u===i?function(){return p}:_t(i);++y<x;)o.call(this,h=t[y],y)?(d.push([g=+M.call(this,h,y),p=+_.call(this,h,y)]),m.push([+b.call(this,h,y),+w.call(this,h,y)])):d.length&&(c(),d=[],m=[]);return d.length&&c(),v.length?v.join(""):null}var e=br,r=br,u=0,i=wr,o=be,a=oo,c=a.key,s=a,l="L",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c="function"==typeof n?a=n:(a=Ms.get(n)||oo).key,s=a.reverse||a,l=a.closed?"M":"L",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function No(n){return n.radius}function Lo(n){return[n.x,n.y]}function To(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+ys;return[e*Math.cos(r),e*Math.sin(r)]}}function qo(){return 64}function zo(){return"circle"}function Ro(n){var t=Math.sqrt(n/Sa);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Do(n,t){return fa(n,Ns),n.id=t,n}function Po(n,t,e,r){var u=n.id;return R(n,"function"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Uo(n){return null==n&&(n=""),function(){this.textContent=n}}function jo(n,t,e,r){var i=n.__transition__||(n.__transition__={active:0,count:0}),o=i[e];if(!o){var a=r.time;o=i[e]={tween:new u,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++i.count,Xo.timer(function(r){function u(r){return i.active>e?s():(i.active=e,o.event&&o.event.start.call(n,l,t),o.tween.forEach(function(e,r){(r=r.call(n,l,t))&&v.push(r)}),Xo.timer(function(){return p.c=c(r||1)?be:c,1},0,a),void 0)}function c(r){if(i.active!==e)return s();for(var u=r/g,a=f(u),c=v.length;c>0;)v[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,l,t),s()):void 0}function s(){return--i.count?delete i[e]:delete n.__transition__,1}var l=n.__data__,f=o.ease,h=o.delay,g=o.duration,p=Ja,v=[];return p.t=h+a,r>=h?u(r-h):(p.c=u,void 0)},0,a)}}function Ho(n,t){n.attr("transform",function(n){return"translate("+t(n)+",0)"})}function Fo(n,t){n.attr("transform",function(n){return"translate(0,"+t(n)+")"})}function Oo(n){return n.toISOString()}function Yo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=Xo.bisect(js,u);return i==js.length?[t.year,Yi(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/js[i-1]<js[i]/u?i-1:i]:[Os,Yi(n,e)[2]]}return r.invert=function(t){return Io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(Io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,Io(+e+1),t).length}var i=r.domain(),o=zi(i),a=null==n?u(o,10):"number"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Pi(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=Io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=Io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=zi(r.domain()),i=null==n?u(e,10):"number"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],Io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return Yo(n.copy(),t,e)},Fi(r,n)}function Io(n){return new Date(n)}function Zo(n){return JSON.parse(n.responseText)}function Vo(n){var t=Wo.createRange();return t.selectNode(Wo.body),t.createContextualFragment(n.responseText)}var Xo={version:"3.4.3"};Date.now||(Date.now=function(){return+new Date});var $o=[].slice,Bo=function(n){return $o.call(n)},Wo=document,Jo=Wo.documentElement,Go=window;try{Bo(Jo.childNodes)[0].nodeType}catch(Ko){Bo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{Wo.createElement("div").style.setProperty("opacity",0,"")}catch(Qo){var na=Go.Element.prototype,ta=na.setAttribute,ea=na.setAttributeNS,ra=Go.CSSStyleDeclaration.prototype,ua=ra.setProperty;na.setAttribute=function(n,t){ta.call(this,n,t+"")},na.setAttributeNS=function(n,t,e){ea.call(this,n,t,e+"")},ra.setProperty=function(n,t,e){ua.call(this,n,t+"",e)}}Xo.ascending=function(n,t){return t>n?-1:n>t?1:n>=t?0:0/0},Xo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},Xo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},Xo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},Xo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},Xo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},Xo.mean=function(t,e){var r,u=t.length,i=0,o=-1,a=0;if(1===arguments.length)for(;++o<u;)n(r=t[o])&&(i+=(r-i)/++a);else for(;++o<u;)n(r=e.call(t,t[o],o))&&(i+=(r-i)/++a);return a?i:void 0},Xo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},Xo.median=function(t,e){return arguments.length>1&&(t=t.map(e)),t=t.filter(n),t.length?Xo.quantile(t.sort(Xo.ascending),.5):void 0},Xo.bisector=function(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n.call(t,t[i],i)<e?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;e<n.call(t,t[i],i)?u=i:r=i+1}return r}}};var ia=Xo.bisector(function(n){return n});Xo.bisectLeft=ia.left,Xo.bisect=Xo.bisectRight=ia.right,Xo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},Xo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},Xo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},Xo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,e=Xo.min(arguments,t),r=new Array(e);++n<e;)for(var u,i=-1,o=r[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return r},Xo.transpose=function(n){return Xo.zip.apply(Xo,n)},Xo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},Xo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},Xo.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},Xo.merge=function(n){for(var t,e,r,u=n.length,i=-1,o=0;++i<u;)o+=n[i].length;for(e=new Array(o);--u>=0;)for(r=n[u],t=r.length;--t>=0;)e[--o]=r[t];return e};var oa=Math.abs;Xo.range=function(n,t,r){if(arguments.length<3&&(r=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/r)throw new Error("infinite range");var u,i=[],o=e(oa(r)),a=-1;if(n*=o,t*=o,r*=o,0>r)for(;(u=n+r*++a)>t;)i.push(u/o);else for(;(u=n+r*++a)<t;)i.push(u/o);return i},Xo.map=function(n){var t=new u;if(n instanceof u)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},r(u,{has:i,get:function(n){return this[aa+n]},set:function(n,t){return this[aa+n]=t},remove:o,keys:a,values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},size:c,empty:s,forEach:function(n){for(var t in this)t.charCodeAt(0)===ca&&n.call(this,t.substring(1),this[t])}});var aa="\x00",ca=aa.charCodeAt(0);Xo.nest=function(){function n(t,a,c){if(c>=o.length)return r?r.call(i,a):e?a.sort(e):a;for(var s,l,f,h,g=-1,p=a.length,v=o[c++],d=new u;++g<p;)(h=d.get(s=v(l=a[g])))?h.push(l):d.set(s,[l]);return t?(l=t(),f=function(e,r){l.set(e,n(t,r,c))}):(l={},f=function(e,r){l[e]=n(t,r,c)}),d.forEach(f),l}function t(n,e){if(e>=o.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,i={},o=[],a=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(Xo.map,e,0),0)},i.key=function(n){return o.push(n),i},i.sortKeys=function(n){return a[o.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},Xo.set=function(n){var t=new l;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},r(l,{has:i,add:function(n){return this[aa+n]=!0,n},remove:function(n){return n=aa+n,n in this&&delete this[n]},values:a,size:c,empty:s,forEach:function(n){for(var t in this)t.charCodeAt(0)===ca&&n.call(this,t.substring(1))}}),Xo.behavior={},Xo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=f(n,t,t[e]);return n};var sa=["webkit","ms","moz","Moz","o","O"];Xo.dispatch=function(){for(var n=new p,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=v(n);return n},p.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},Xo.event=null,Xo.requote=function(n){return n.replace(la,"\\$&")};var la=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,fa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ha=function(n,t){return t.querySelector(n)},ga=function(n,t){return t.querySelectorAll(n)},pa=Jo[h(Jo,"matchesSelector")],va=function(n,t){return pa.call(n,t)};"function"==typeof Sizzle&&(ha=function(n,t){return Sizzle(n,t)[0]||null},ga=Sizzle,va=Sizzle.matchesSelector),Xo.selection=function(){return xa};var da=Xo.selection.prototype=[];da.select=function(n){var t,e,r,u,i=[];n=M(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,s=r.length;++c<s;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&"__data__"in u&&(e.__data__=u.__data__)):t.push(null)}return x(i)},da.selectAll=function(n){var t,e,r=[];n=_(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Bo(n.call(e,e.__data__,a,u))),t.parentNode=e);return x(r)};var ma={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};Xo.ns={prefix:ma,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),ma.hasOwnProperty(e)?{space:ma[e],local:n}:n}},da.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=Xo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(b(t,n[t]));return this}return this.each(b(n,t))},da.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=k(n)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute("class");++u<r;)if(!S(n[u]).test(t))return!1;return!0}for(t in n)this.each(E(t,n[t]));return this}return this.each(E(n,t))},da.style=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t="");for(e in n)this.each(C(e,n[e],t));return this}if(2>r)return Go.getComputedStyle(this.node(),null).getPropertyValue(n);e=""}return this.each(C(n,t,e))},da.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(N(t,n[t]));return this}return this.each(N(n,t))},da.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},da.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},da.append=function(n){return n=L(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},da.insert=function(n,t){return n=L(n),t=M(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},da.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},da.data=function(n,t){function e(n,e){var r,i,o,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),v=new Array(a);if(t){var d,m=new u,y=new u,x=[];for(r=-1;++r<a;)d=t.call(i=n[r],i.__data__,r),m.has(d)?v[r]=i:m.set(d,i),x.push(d);for(r=-1;++r<f;)d=t.call(e,o=e[r],r),(i=m.get(d))?(g[r]=i,i.__data__=o):y.has(d)||(p[r]=T(o)),y.set(d,o),m.remove(d);for(r=-1;++r<a;)m.has(x[r])&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],o=e[r],i?(i.__data__=o,g[r]=i):p[r]=T(o);for(;f>r;++r)p[r]=T(e[r]);for(;a>r;++r)v[r]=n[r]}p.update=g,p.parentNode=g.parentNode=v.parentNode=n.parentNode,c.push(p),s.push(g),l.push(v)}var r,i,o=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++o<a;)(i=r[o])&&(n[o]=i.__data__);return n}var c=D([]),s=x([]),l=x([]);if("function"==typeof n)for(;++o<a;)e(r=this[o],n.call(r,r.parentNode.__data__,o));else for(;++o<a;)e(r=this[o],n);return s.enter=function(){return c},s.exit=function(){return l},s},da.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},da.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=q(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return x(u)},da.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},da.sort=function(n){n=z.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},da.each=function(n){return R(this,function(t,e,r){n.call(t,t.__data__,e,r)})},da.call=function(n){var t=Bo(arguments);return n.apply(t[0]=this,t),this},da.empty=function(){return!this.node()},da.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},da.size=function(){var n=0;return this.each(function(){++n}),n};var ya=[];Xo.selection.enter=D,Xo.selection.enter.prototype=ya,ya.append=da.append,ya.empty=da.empty,ya.node=da.node,ya.call=da.call,ya.size=da.size,ya.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var s=-1,l=u.length;++s<l;)(i=u[s])?(t.push(r[s]=e=n.call(u.parentNode,i.__data__,s,a)),e.__data__=i.__data__):t.push(null)}return x(o)},ya.insert=function(n,t){return arguments.length<2&&(t=P(this)),da.insert.call(this,n,t)},da.transition=function(){for(var n,t,e=ks||++Ls,r=[],u=Es||{time:Date.now(),ease:yu,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,s=a.length;++c<s;)(t=a[c])&&jo(t,c,e,u),n.push(t)}return Do(r,e)},da.interrupt=function(){return this.each(U)},Xo.select=function(n){var t=["string"==typeof n?ha(n,Wo):n];return t.parentNode=Jo,x([t])},Xo.selectAll=function(n){var t=Bo("string"==typeof n?ga(n,Wo):n);return t.parentNode=Jo,x([t])};var xa=Xo.select(Jo);da.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(j(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(j(n,t,e))};var Ma=Xo.map({mouseenter:"mouseover",mouseleave:"mouseout"});Ma.forEach(function(n){"on"+n in Wo&&Ma.remove(n)});var _a="onselectstart"in Wo?null:h(Jo.style,"userSelect"),ba=0;Xo.mouse=function(n){return Y(n,m())};var wa=/WebKit/.test(Go.navigator.userAgent)?-1:0;Xo.touches=function(n,t){return arguments.length<2&&(t=m().touches),t?Bo(t).map(function(t){var e=Y(n,t);return e.identifier=t.identifier,e}):[]},Xo.behavior.drag=function(){function n(){this.on("mousedown.drag",o).on("touchstart.drag",a)}function t(){return Xo.event.changedTouches[0].identifier}function e(n,t){return Xo.touches(n).filter(function(n){return n.identifier===t})[0]}function r(n,t,e,r){return function(){function o(){var n=t(l,g),e=n[0]-v[0],r=n[1]-v[1];d|=e|r,v=n,f({type:"drag",x:n[0]+c[0],y:n[1]+c[1],dx:e,dy:r})}function a(){m.on(e+"."+p,null).on(r+"."+p,null),y(d&&Xo.event.target===h),f({type:"dragend"})}var c,s=this,l=s.parentNode,f=u.of(s,arguments),h=Xo.event.target,g=n(),p=null==g?"drag":"drag-"+g,v=t(l,g),d=0,m=Xo.select(Go).on(e+"."+p,o).on(r+"."+p,a),y=O();i?(c=i.apply(s,arguments),c=[c.x-v[0],c.y-v[1]]):c=[0,0],f({type:"dragstart"})}}var u=y(n,"drag","dragstart","dragend"),i=null,o=r(g,Xo.mouse,"mousemove","mouseup"),a=r(t,e,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},Xo.rebind(n,u,"on")};var Sa=Math.PI,ka=2*Sa,Ea=Sa/2,Aa=1e-6,Ca=Aa*Aa,Na=Sa/180,La=180/Sa,Ta=Math.SQRT2,qa=2,za=4;Xo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=B(v),o=i/(qa*h)*(e*W(Ta*t+v)-$(v));return[r+o*s,u+o*l,i*e/B(Ta*t+v)]}return[r+n*s,u+n*l,i*Math.exp(Ta*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],s=o-r,l=a-u,f=s*s+l*l,h=Math.sqrt(f),g=(c*c-i*i+za*f)/(2*i*qa*h),p=(c*c-i*i-za*f)/(2*c*qa*h),v=Math.log(Math.sqrt(g*g+1)-g),d=Math.log(Math.sqrt(p*p+1)-p),m=d-v,y=(m||Math.log(c/i))/Ta;return e.duration=1e3*y,e},Xo.behavior.zoom=function(){function n(n){n.on(A,s).on(Pa+".zoom",f).on(C,h).on("dblclick.zoom",g).on(L,l)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(E[0],Math.min(E[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){_&&_.domain(M.range().map(function(n){return(n-S.x)/S.k}).map(M.invert)),w&&w.domain(b.range().map(function(n){return(n-S.y)/S.k}).map(b.invert))}function o(n){n({type:"zoomstart"})}function a(n){i(),n({type:"zoom",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:"zoomend"})}function s(){function n(){l=1,u(Xo.mouse(r),g),a(i)}function e(){f.on(C,Go===r?h:null).on(N,null),p(l&&Xo.event.target===s),c(i)}var r=this,i=T.of(r,arguments),s=Xo.event.target,l=0,f=Xo.select(Go).on(C,n).on(N,e),g=t(Xo.mouse(r)),p=O();U.call(r),o(i)}function l(){function n(){var n=Xo.touches(g);return h=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){for(var t=Xo.event.changedTouches,e=0,i=t.length;i>e;++e)v[t[e].identifier]=null;var o=n(),c=Date.now();if(1===o.length){if(500>c-x){var s=o[0],l=v[s.identifier];r(2*S.k),u(s,l),d(),a(p)}x=c}else if(o.length>1){var s=o[0],f=o[1],h=s[0]-f[0],g=s[1]-f[1];m=h*h+g*g}}function i(){for(var n,t,e,i,o=Xo.touches(g),c=0,s=o.length;s>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var l=(l=e[0]-n[0])*l+(l=e[1]-n[1])*l,f=m&&Math.sqrt(l/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*h)}x=null,u(n,t),a(p)}function f(){if(Xo.event.touches.length){for(var t=Xo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}b.on(M,null).on(_,null),w.on(A,s).on(L,l),k(),c(p)}var h,g=this,p=T.of(g,arguments),v={},m=0,y=Xo.event.changedTouches[0].identifier,M="touchmove.zoom-"+y,_="touchend.zoom-"+y,b=Xo.select(Go).on(M,i).on(_,f),w=Xo.select(g).on(A,null).on(L,e),k=O();U.call(g),e(),o(p)}function f(){var n=T.of(this,arguments);m?clearTimeout(m):(U.call(this),o(n)),m=setTimeout(function(){m=null,c(n)},50),d();var e=v||Xo.mouse(this);p||(p=t(e)),r(Math.pow(2,.002*Ra())*S.k),u(e,p),a(n)}function h(){p=null}function g(){var n=T.of(this,arguments),e=Xo.mouse(this),i=t(e),s=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,Xo.event.shiftKey?Math.ceil(s)-1:Math.floor(s)+1)),u(e,i),a(n),c(n)}var p,v,m,x,M,_,b,w,S={x:0,y:0,k:1},k=[960,500],E=Da,A="mousedown.zoom",C="mousemove.zoom",N="mouseup.zoom",L="touchstart.zoom",T=y(n,"zoomstart","zoom","zoomend");return n.event=function(n){n.each(function(){var n=T.of(this,arguments),t=S;ks?Xo.select(this).transition().each("start.zoom",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween("zoom:zoom",function(){var e=k[0],r=k[1],u=e/2,i=r/2,o=Xo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each("end.zoom",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(E=null==t?Da:[+t[0],+t[1]],n):E},n.center=function(t){return arguments.length?(v=t&&[+t[0],+t[1]],n):v},n.size=function(t){return arguments.length?(k=t&&[+t[0],+t[1]],n):k},n.x=function(t){return arguments.length?(_=t,M=t.copy(),S={x:0,y:0,k:1},n):_},n.y=function(t){return arguments.length?(w=t,b=t.copy(),S={x:0,y:0,k:1},n):w},Xo.rebind(n,T,"on")};var Ra,Da=[0,1/0],Pa="onwheel"in Wo?(Ra=function(){return-Xo.event.deltaY*(Xo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in Wo?(Ra=function(){return Xo.event.wheelDelta},"mousewheel"):(Ra=function(){return-Xo.event.detail},"MozMousePixelScroll");G.prototype.toString=function(){return this.rgb()+""},Xo.hsl=function(n,t,e){return 1===arguments.length?n instanceof Q?K(n.h,n.s,n.l):dt(""+n,mt,K):K(+n,+t,+e)};var Ua=Q.prototype=new G;Ua.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),K(this.h,this.s,this.l/n)},Ua.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),K(this.h,this.s,n*this.l)},Ua.rgb=function(){return nt(this.h,this.s,this.l)},Xo.hcl=function(n,t,e){return 1===arguments.length?n instanceof et?tt(n.h,n.c,n.l):n instanceof it?at(n.l,n.a,n.b):at((n=yt((n=Xo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):tt(+n,+t,+e)};var ja=et.prototype=new G;ja.brighter=function(n){return tt(this.h,this.c,Math.min(100,this.l+Ha*(arguments.length?n:1)))},ja.darker=function(n){return tt(this.h,this.c,Math.max(0,this.l-Ha*(arguments.length?n:1)))},ja.rgb=function(){return rt(this.h,this.c,this.l).rgb()},Xo.lab=function(n,t,e){return 1===arguments.length?n instanceof it?ut(n.l,n.a,n.b):n instanceof et?rt(n.l,n.c,n.h):yt((n=Xo.rgb(n)).r,n.g,n.b):ut(+n,+t,+e)};var Ha=18,Fa=.95047,Oa=1,Ya=1.08883,Ia=it.prototype=new G;Ia.brighter=function(n){return ut(Math.min(100,this.l+Ha*(arguments.length?n:1)),this.a,this.b)},Ia.darker=function(n){return ut(Math.max(0,this.l-Ha*(arguments.length?n:1)),this.a,this.b)},Ia.rgb=function(){return ot(this.l,this.a,this.b)},Xo.rgb=function(n,t,e){return 1===arguments.length?n instanceof pt?gt(n.r,n.g,n.b):dt(""+n,gt,nt):gt(~~n,~~t,~~e)};var Za=pt.prototype=new G;Za.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),gt(Math.min(255,~~(t/n)),Math.min(255,~~(e/n)),Math.min(255,~~(r/n)))):gt(u,u,u)},Za.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),gt(~~(n*this.r),~~(n*this.g),~~(n*this.b))},Za.hsl=function(){return mt(this.r,this.g,this.b)},Za.toString=function(){return"#"+vt(this.r)+vt(this.g)+vt(this.b)};var Va=Xo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});Va.forEach(function(n,t){Va.set(n,ft(t))}),Xo.functor=_t,Xo.xhr=wt(bt),Xo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=St(n,t,null==e?r:u(e),i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function i(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),c=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(l>=s)return o;if(u)return u=!1,i;var t=l;if(34===n.charCodeAt(t)){for(var e=t;e++<s;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}l=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++l):10===r&&(u=!0),n.substring(t+1,e).replace(/""/g,'"')}for(;s>l;){var r=n.charCodeAt(l++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(l)&&(++l,++a);else if(r!==c)continue;return n.substring(t,l-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],s=n.length,l=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new l,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(o).join(n)].concat(t.map(function(t){return u.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(i).join("\n")},e},Xo.csv=Xo.dsv(",","text/csv"),Xo.tsv=Xo.dsv("	","text/tab-separated-values");var Xa,$a,Ba,Wa,Ja,Ga=Go[h(Go,"requestAnimationFrame")]||function(n){setTimeout(n,17)};Xo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={c:n,t:u,f:!1,n:null};$a?$a.n=i:Xa=i,$a=i,Ba||(Wa=clearTimeout(Wa),Ba=1,Ga(Et))},Xo.timer.flush=function(){At(),Ct()},Xo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var Ka=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Lt);Xo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=Xo.round(n,Nt(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),Ka[8+e/3]};var Qa=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,nc=Xo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=Xo.round(n,Nt(n,t))).toFixed(Math.max(0,Math.min(20,Nt(n*(1+1e-15),t))))}}),tc=Xo.time={},ec=Date;zt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){rc.setUTCDate.apply(this._,arguments)},setDay:function(){rc.setUTCDay.apply(this._,arguments)},setFullYear:function(){rc.setUTCFullYear.apply(this._,arguments)},setHours:function(){rc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){rc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){rc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){rc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){rc.setUTCSeconds.apply(this._,arguments)},setTime:function(){rc.setTime.apply(this._,arguments)}};var rc=Date.prototype;tc.year=Rt(function(n){return n=tc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),tc.years=tc.year.range,tc.years.utc=tc.year.utc.range,tc.day=Rt(function(n){var t=new ec(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),tc.days=tc.day.range,tc.days.utc=tc.day.utc.range,tc.dayOfYear=function(n){var t=tc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=tc[n]=Rt(function(n){return(n=tc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=tc.year(n).getDay();return Math.floor((tc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});tc[n+"s"]=e.range,tc[n+"s"].utc=e.utc.range,tc[n+"OfYear"]=function(n){var e=tc.year(n).getDay();return Math.floor((tc.dayOfYear(n)+(e+t)%7)/7)}}),tc.week=tc.sunday,tc.weeks=tc.sunday.range,tc.weeks.utc=tc.sunday.utc.range,tc.weekOfYear=tc.sundayOfYear;var uc={"-":"",_:" ",0:"0"},ic=/^\s*\d+/,oc=/^%/;Xo.locale=function(n){return{numberFormat:Tt(n),timeFormat:Pt(n)}};var ac=Xo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Xo.format=ac.numberFormat,Xo.geo={},re.prototype={s:0,t:0,add:function(n){ue(n,this.t,cc),ue(cc.s,this.s,this),this.s?this.t+=cc.t:this.s=cc.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var cc=new re;Xo.geo.stream=function(n,t){n&&sc.hasOwnProperty(n.type)?sc[n.type](n,t):ie(n,t)};var sc={Feature:function(n,t){ie(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)ie(e[r].geometry,t)}},lc={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){oe(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)oe(e[r],t,0)},Polygon:function(n,t){ae(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)ae(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)ie(e[r],t)}};Xo.geo.area=function(n){return fc=0,Xo.geo.stream(n,gc),fc};var fc,hc=new re,gc={sphere:function(){fc+=4*Sa},point:g,lineStart:g,lineEnd:g,polygonStart:function(){hc.reset(),gc.lineStart=ce},polygonEnd:function(){var n=2*hc;fc+=0>n?4*Sa+n:n,gc.lineStart=gc.lineEnd=gc.point=g}};Xo.geo.bounds=function(){function n(n,t){x.push(M=[l=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=se([t*Na,e*Na]);if(m){var u=fe(m,r),i=[u[1],-u[0],0],o=fe(i,u);pe(o),o=ve(o);var c=t-p,s=c>0?1:-1,v=o[0]*La*s,d=oa(c)>180;if(d^(v>s*p&&s*t>v)){var y=o[1]*La;y>g&&(g=y)}else if(v=(v+360)%360-180,d^(v>s*p&&s*t>v)){var y=-o[1]*La;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);d?p>t?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t):h>=l?(l>t&&(l=t),t>h&&(h=t)):t>p?a(l,t)>a(l,h)&&(h=t):a(t,h)>a(l,h)&&(l=t)}else n(t,e);m=r,p=t}function e(){_.point=t}function r(){M[0]=l,M[1]=h,_.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=oa(r)>180?r+(r>0?360:-360):r}else v=n,d=e;gc.point(n,e),t(n,e)}function i(){gc.lineStart()}function o(){u(v,d),gc.lineEnd(),oa(y)>Aa&&(l=-(h=180)),M[0]=l,M[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function s(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var l,f,h,g,p,v,d,m,y,x,M,_={point:n,lineStart:e,lineEnd:r,polygonStart:function(){_.point=u,_.lineStart=i,_.lineEnd=o,y=0,gc.polygonStart()},polygonEnd:function(){gc.polygonEnd(),_.point=n,_.lineStart=e,_.lineEnd=r,0>hc?(l=-(h=180),f=-(g=90)):y>Aa?g=90:-Aa>y&&(f=-90),M[0]=l,M[1]=h}};return function(n){g=h=-(l=f=1/0),x=[],Xo.geo.stream(n,_);var t=x.length;if(t){x.sort(c);for(var e,r=1,u=x[0],i=[u];t>r;++r)e=x[r],s(e[0],u)||s(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,l=e[0],h=u[1])}return x=M=null,1/0===l||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[l,f],[h,g]]}}(),Xo.geo.centroid=function(n){pc=vc=dc=mc=yc=xc=Mc=_c=bc=wc=Sc=0,Xo.geo.stream(n,kc);var t=bc,e=wc,r=Sc,u=t*t+e*e+r*r;return Ca>u&&(t=xc,e=Mc,r=_c,Aa>vc&&(t=dc,e=mc,r=yc),u=t*t+e*e+r*r,Ca>u)?[0/0,0/0]:[Math.atan2(e,t)*La,X(r/Math.sqrt(u))*La]};var pc,vc,dc,mc,yc,xc,Mc,_c,bc,wc,Sc,kc={sphere:g,point:me,lineStart:xe,lineEnd:Me,polygonStart:function(){kc.lineStart=_e},polygonEnd:function(){kc.lineStart=xe}},Ec=Ee(be,Te,ze,[-Sa,-Sa/2]),Ac=1e9;Xo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=Pe(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(Xo.geo.conicEqualArea=function(){return je(He)}).raw=He,Xo.geo.albers=function(){return Xo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},Xo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=Xo.geo.albers(),o=Xo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=Xo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var s=i.scale(),l=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[l-.455*s,f-.238*s],[l+.455*s,f+.238*s]]).stream(c).point,r=o.translate([l-.307*s,f+.201*s]).clipExtent([[l-.425*s+Aa,f+.12*s+Aa],[l-.214*s-Aa,f+.234*s-Aa]]).stream(c).point,u=a.translate([l-.205*s,f+.212*s]).clipExtent([[l-.214*s+Aa,f+.166*s+Aa],[l-.115*s-Aa,f+.234*s-Aa]]).stream(c).point,n},n.scale(1070)};var Cc,Nc,Lc,Tc,qc,zc,Rc={point:g,lineStart:g,lineEnd:g,polygonStart:function(){Nc=0,Rc.lineStart=Fe},polygonEnd:function(){Rc.lineStart=Rc.lineEnd=Rc.point=g,Cc+=oa(Nc/2)}},Dc={point:Oe,lineStart:g,lineEnd:g,polygonStart:g,polygonEnd:g},Pc={point:Ze,lineStart:Ve,lineEnd:Xe,polygonStart:function(){Pc.lineStart=$e},polygonEnd:function(){Pc.point=Ze,Pc.lineStart=Ve,Pc.lineEnd=Xe}};Xo.geo.path=function(){function n(n){return n&&("function"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),Xo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Cc=0,Xo.geo.stream(n,u(Rc)),Cc},n.centroid=function(n){return dc=mc=yc=xc=Mc=_c=bc=wc=Sc=0,Xo.geo.stream(n,u(Pc)),Sc?[bc/Sc,wc/Sc]:_c?[xc/_c,Mc/_c]:yc?[dc/yc,mc/yc]:[0/0,0/0]},n.bounds=function(n){return qc=zc=-(Lc=Tc=1/0),Xo.geo.stream(n,u(Dc)),[[Lc,Tc],[qc,zc]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Je(n):bt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new Ye:new Be(n),"function"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(Xo.geo.albersUsa()).context(null)},Xo.geo.transform=function(n){return{stream:function(t){var e=new Ge(t);for(var r in n)e[r]=n[r];return e}}},Ge.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},Xo.geo.projection=Qe,Xo.geo.projectionMutator=nr,(Xo.geo.equirectangular=function(){return Qe(er)}).raw=er.invert=er,Xo.geo.rotation=function(n){function t(t){return t=n(t[0]*Na,t[1]*Na),t[0]*=La,t[1]*=La,t}return n=ur(n[0]%360*Na,n[1]*Na,n.length>2?n[2]*Na:0),t.invert=function(t){return t=n.invert(t[0]*Na,t[1]*Na),t[0]*=La,t[1]*=La,t},t},rr.invert=er,Xo.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=ur(-n[0]*Na,-n[1]*Na,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=La,n[1]*=La}}),{type:"Polygon",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=cr((t=+r)*Na,u*Na),n):t},n.precision=function(r){return arguments.length?(e=cr(t*Na,(u=+r)*Na),n):u},n.angle(90)},Xo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Na,u=n[1]*Na,i=t[1]*Na,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),s=Math.cos(u),l=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=s*l-c*f*a)*e),c*l+s*f*a)},Xo.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return Xo.range(Math.ceil(i/d)*d,u,d).map(h).concat(Xo.range(Math.ceil(s/m)*m,c,m).map(g)).concat(Xo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return oa(n%d)>Aa}).map(l)).concat(Xo.range(Math.ceil(a/v)*v,o,v).filter(function(n){return oa(n%m)>Aa}).map(f))}var e,r,u,i,o,a,c,s,l,f,h,g,p=10,v=p,d=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(s).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],s=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),s>c&&(t=s,s=c,c=t),n.precision(y)):[[i,s],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],m=+t[1],n):[d,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],v=+t[1],n):[p,v]},n.precision=function(t){return arguments.length?(y=+t,l=lr(a,o,90),f=fr(r,e,y),h=lr(s,c,90),g=fr(i,u,y),n):y},n.majorExtent([[-180,-90+Aa],[180,90-Aa]]).minorExtent([[-180,-80-Aa],[180,80+Aa]])},Xo.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=hr,u=gr;return n.distance=function(){return Xo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e="function"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},Xo.geo.interpolate=function(n,t){return pr(n[0]*Na,n[1]*Na,t[0]*Na,t[1]*Na)},Xo.geo.length=function(n){return Uc=0,Xo.geo.stream(n,jc),Uc};var Uc,jc={sphere:g,point:g,lineStart:vr,lineEnd:g,polygonStart:g,polygonEnd:g},Hc=dr(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(Xo.geo.azimuthalEqualArea=function(){return Qe(Hc)}).raw=Hc;var Fc=dr(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},bt);(Xo.geo.azimuthalEquidistant=function(){return Qe(Fc)}).raw=Fc,(Xo.geo.conicConformal=function(){return je(mr)}).raw=mr,(Xo.geo.conicEquidistant=function(){return je(yr)}).raw=yr;var Oc=dr(function(n){return 1/n},Math.atan);(Xo.geo.gnomonic=function(){return Qe(Oc)}).raw=Oc,xr.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Ea]},(Xo.geo.mercator=function(){return Mr(xr)}).raw=xr;var Yc=dr(function(){return 1},Math.asin);(Xo.geo.orthographic=function(){return Qe(Yc)}).raw=Yc;var Ic=dr(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(Xo.geo.stereographic=function(){return Qe(Ic)}).raw=Ic,_r.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Ea]},(Xo.geo.transverseMercator=function(){var n=Mr(_r),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[-n[1],n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},n.rotate([0,0])}).raw=_r,Xo.geom={},Xo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u=_t(e),i=_t(r),o=n.length,a=[],c=[];for(t=0;o>t;t++)a.push([+u.call(this,n[t],t),+i.call(this,n[t],t),t]);for(a.sort(kr),t=0;o>t;t++)c.push([a[t][0],-a[t][1]]);var s=Sr(a),l=Sr(c),f=l[0]===s[0],h=l[l.length-1]===s[s.length-1],g=[];for(t=s.length-1;t>=0;--t)g.push(n[a[s[t]][2]]);for(t=+f;t<l.length-h;++t)g.push(n[a[l[t]][2]]);return g}var e=br,r=wr;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},Xo.geom.polygon=function(n){return fa(n,Zc),n};var Zc=Xo.geom.polygon.prototype=[];Zc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},Zc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},Zc.clip=function(n){for(var t,e,r,u,i,o,a=Cr(n),c=-1,s=this.length-Cr(this),l=this[s-1];++c<s;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Er(o,l,u)?(Er(i,l,u)||n.push(Ar(i,o,l,u)),n.push(o)):Er(i,l,u)&&n.push(Ar(i,o,l,u)),i=o;a&&n.push(n[0]),l=u}return n};var Vc,Xc,$c,Bc,Wc,Jc=[],Gc=[];Pr.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(jr),t.length},Br.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Wr.prototype={insert:function(n,t){var e,r,u;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=Qr(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(u=r.R,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.R&&(Gr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Kr(this,r))):(u=r.L,u&&u.C?(e.C=u.C=!1,r.C=!0,n=r):(n===e.L&&(Kr(this,e),n=e,e=n.U),e.C=!1,r.C=!0,Gr(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,u=n.U,i=n.L,o=n.R;if(e=i?o?Qr(o):i:o,u?u.L===n?u.L=e:u.R=e:this._=e,i&&o?(r=e.C,e.C=n.C,e.L=i,i.U=e,e!==o?(u=e.U,e.U=n.U,n=e.R,u.L=n,e.R=o,o.U=e):(e.U=u,u=e,n=e.R)):(r=n.C,n=e),n&&(n.U=u),!r){if(n&&n.C)return n.C=!1,void 0;do{if(n===this._)break;if(n===u.L){if(t=u.R,t.C&&(t.C=!1,u.C=!0,Gr(this,u),t=u.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,Kr(this,t),t=u.R),t.C=u.C,u.C=t.R.C=!1,Gr(this,u),n=this._;break}}else if(t=u.L,t.C&&(t.C=!1,u.C=!0,Kr(this,u),t=u.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,Gr(this,t),t=u.L),t.C=u.C,u.C=t.L.C=!1,Kr(this,u),n=this._;break}t.C=!0,n=u,u=u.U}while(!n.C);n&&(n.C=!1)}}},Xo.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],u=a[0][1],i=a[1][0],o=a[1][1];return nu(e(n),a).cells.forEach(function(e,a){var c=e.edges,s=e.site,l=t[a]=c.length?c.map(function(n){var t=n.start();return[t.x,t.y]}):s.x>=r&&s.x<=i&&s.y>=u&&s.y<=o?[[r,o],[i,o],[i,u],[r,u]]:[];l.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(i(n,t)/Aa)*Aa,y:Math.round(o(n,t)/Aa)*Aa,i:t}})}var r=br,u=wr,i=r,o=u,a=Kc;return n?t(n):(t.links=function(n){return nu(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return nu(e(n)).cells.forEach(function(e,r){for(var u,i,o=e.site,a=e.edges.sort(jr),c=-1,s=a.length,l=a[s-1].edge,f=l.l===o?l.r:l.l;++c<s;)u=l,i=f,l=a[c].edge,f=l.l===o?l.r:l.l,r<i.i&&r<f.i&&eu(o,i,f)<0&&t.push([n[r],n[i.i],n[f.i]])}),t},t.x=function(n){return arguments.length?(i=_t(r=n),t):r},t.y=function(n){return arguments.length?(o=_t(u=n),t):u},t.clipExtent=function(n){return arguments.length?(a=null==n?Kc:n,t):a===Kc?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===Kc?null:a&&a[1]},t)};var Kc=[[-1e6,-1e6],[1e6,1e6]];Xo.geom.delaunay=function(n){return Xo.geom.voronoi().triangles(n)},Xo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,l=n.y;if(null!=c)if(oa(c-e)+oa(l-r)<.01)s(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,s(n,f,c,l,u,i,o,a),s(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else s(n,t,e,r,u,i,o,a)}function s(n,t,e,r,u,o,a,c){var s=.5*(u+a),l=.5*(o+c),f=e>=s,h=r>=l,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=iu()),f?u=s:a=s,h?o=l:c=l,i(n,t,e,r,u,o,a,c)}var l,f,h,g,p,v,d,m,y,x=_t(a),M=_t(c);if(null!=t)v=t,d=e,m=r,y=u;else if(m=y=-(v=d=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)l=n[g],l.x<v&&(v=l.x),l.y<d&&(d=l.y),l.x>m&&(m=l.x),l.y>y&&(y=l.y),f.push(l.x),h.push(l.y);else for(g=0;p>g;++g){var _=+x(l=n[g],g),b=+M(l,g);v>_&&(v=_),d>b&&(d=b),_>m&&(m=_),b>y&&(y=b),f.push(_),h.push(b)}var w=m-v,S=y-d;w>S?y=d+w:m=v+S;var k=iu();if(k.add=function(n){i(k,n,+x(n,++g),+M(n,g),v,d,m,y)},k.visit=function(n){ou(n,k,v,d,m,y)},g=-1,null==t){for(;++g<p;)i(k,n[g],f[g],h[g],v,d,m,y);--g}else n.forEach(k.add);return f=h=n=l=null,k}var o,a=br,c=wr;return(o=arguments.length)?(a=ru,c=uu,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},Xo.interpolateRgb=au,Xo.interpolateObject=cu,Xo.interpolateNumber=su,Xo.interpolateString=lu;var Qc=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;Xo.interpolate=fu,Xo.interpolators=[function(n,t){var e=typeof t;return("string"===e?Va.has(t)||/^(#|rgb\(|hsl\()/.test(t)?au:lu:t instanceof G?au:"object"===e?Array.isArray(t)?hu:cu:su)(n,t)}],Xo.interpolateArray=hu;var ns=function(){return bt},ts=Xo.map({linear:ns,poly:xu,quad:function(){return du},cubic:function(){return mu},sin:function(){return Mu},exp:function(){return _u},circle:function(){return bu},elastic:wu,back:Su,bounce:function(){return ku}}),es=Xo.map({"in":bt,out:pu,"in-out":vu,"out-in":function(n){return vu(pu(n))}});Xo.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):"in";return e=ts.get(e)||ns,r=es.get(r)||bt,gu(r(e.apply(null,$o.call(arguments,1))))},Xo.interpolateHcl=Eu,Xo.interpolateHsl=Au,Xo.interpolateLab=Cu,Xo.interpolateRound=Nu,Xo.transform=function(n){var t=Wo.createElementNS(Xo.ns.prefix.svg,"g");return(Xo.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Lu(e?e.matrix:rs)})(n)},Lu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var rs={a:1,b:0,c:0,d:1,e:0,f:0};Xo.interpolateTransform=Ru,Xo.layout={},Xo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Uu(n[e]));return t}},Xo.layout.chord=function(){function n(){var n,s,f,h,g,p={},v=[],d=Xo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(s=0,g=-1;++g<i;)s+=u[h][g];v.push(s),m.push(Xo.range(i)),n+=s}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(ka-l*i)/n,s=0,h=-1;++h<i;){for(f=s,g=-1;++g<i;){var y=d[h],x=m[y][g],M=u[y][x],_=s,b=s+=M*n;p[y+"-"+x]={index:y,subindex:x,startAngle:_,endAngle:b,value:M}}r[y]={index:y,startAngle:f,endAngle:s,value:(s-f)/n},s+=l}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+"-"+g],S=p[g+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,s={},l=0;return s.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,s):u},s.padding=function(n){return arguments.length?(l=n,e=r=null,s):l},s.sortGroups=function(n){return arguments.length?(o=n,e=r=null,s):o},s.sortSubgroups=function(n){return arguments.length?(a=n,e=null,s):a},s.sortChords=function(n){return arguments.length?(c=n,e&&t(),s):c},s.chords=function(){return e||n(),e},s.groups=function(){return r||n(),r},s},Xo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=u-e,c=i*i+o*o;if(c>a*a/d){if(p>c){var s=t.charge/c;n.px-=i*s,n.py-=o*s}return!0}if(t.point&&c&&p>c){var s=t.pointCharge/c;n.px-=i*s,n.py-=o*s}}return!t.charge}}function t(n){n.px=Xo.event.x,n.py=Xo.event.y,a.resume()}var e,r,u,i,o,a={},c=Xo.dispatch("start","tick","end"),s=[1,1],l=.9,f=us,h=is,g=-30,p=os,v=.1,d=.64,m=[],y=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:"end",alpha:r=0}),!0;var t,e,a,f,h,p,d,x,M,_=m.length,b=y.length;for(e=0;b>e;++e)a=y[e],f=a.source,h=a.target,x=h.x-f.x,M=h.y-f.y,(p=x*x+M*M)&&(p=r*i[e]*((p=Math.sqrt(p))-u[e])/p,x*=p,M*=p,h.x-=x*(d=f.weight/(h.weight+f.weight)),h.y-=M*d,f.x+=x*(d=1-d),f.y+=M*d);if((d=r*v)&&(x=s[0]/2,M=s[1]/2,e=-1,d))for(;++e<_;)a=m[e],a.x+=(x-a.x)*d,a.y+=(M-a.y)*d;if(g)for(Zu(t=Xo.geom.quadtree(m),r,o),e=-1;++e<_;)(a=m[e]).fixed||t.visit(n(a));for(e=-1;++e<_;)a=m[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*l,a.y-=(a.py-(a.py=a.y))*l);c.tick({type:"tick",alpha:r})},a.nodes=function(n){return arguments.length?(m=n,a):m},a.links=function(n){return arguments.length?(y=n,a):y},a.size=function(n){return arguments.length?(s=n,a):s},a.linkDistance=function(n){return arguments.length?(f="function"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h="function"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(l=+n,a):l},a.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,a):g},a.chargeDistance=function(n){return arguments.length?(p=n*n,a):Math.sqrt(p)},a.gravity=function(n){return arguments.length?(v=+n,a):v},a.theta=function(n){return arguments.length?(d=n*n,a):Math.sqrt(d)},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:"start",alpha:r=n}),Xo.timer(a.tick)),a):r},a.start=function(){function n(n,r){if(!e){for(e=new Array(c),a=0;c>a;++a)e[a]=[];for(a=0;s>a;++a){var u=y[a];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var i,o=e[t],a=-1,s=o.length;++a<s;)if(!isNaN(i=o[a][n]))return i;return Math.random()*r}var t,e,r,c=m.length,l=y.length,p=s[0],v=s[1];for(t=0;c>t;++t)(r=m[t]).index=t,r.weight=0;for(t=0;l>t;++t)r=y[t],"number"==typeof r.source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;c>t;++t)r=m[t],isNaN(r.x)&&(r.x=n("x",p)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof f)for(t=0;l>t;++t)u[t]=+f.call(this,y[t],t);else for(t=0;l>t;++t)u[t]=f;if(i=[],"function"==typeof h)for(t=0;l>t;++t)i[t]=+h.call(this,y[t],t);else for(t=0;l>t;++t)i[t]=h;if(o=[],"function"==typeof g)for(t=0;c>t;++t)o[t]=+g.call(this,m[t],t);else for(t=0;c>t;++t)o[t]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=Xo.behavior.drag().origin(bt).on("dragstart.force",Fu).on("drag.force",t).on("dragend.force",Ou)),arguments.length?(this.on("mouseover.force",Yu).on("mouseout.force",Iu).call(e),void 0):e},Xo.rebind(a,c,"on")};var us=20,is=1,os=1/0;Xo.layout.hierarchy=function(){function n(t,o,a){var c=u.call(e,t,o);if(t.depth=o,a.push(t),c&&(s=c.length)){for(var s,l,f=-1,h=t.children=new Array(s),g=0,p=o+1;++f<s;)l=h[f]=n(c[f],p,a),l.parent=t,g+=l.value;r&&h.sort(r),i&&(t.value=g)}else delete t.children,i&&(t.value=+i.call(e,t,o)||0);return t}function t(n,r){var u=n.children,o=0;if(u&&(a=u.length))for(var a,c=-1,s=r+1;++c<a;)o+=t(u[c],s);else i&&(o=+i.call(e,n,r)||0);return i&&(n.value=o),o}function e(t){var e=[];return n(t,0,e),e}var r=Bu,u=Xu,i=$u;return e.sort=function(n){return arguments.length?(r=n,e):r},e.children=function(n){return arguments.length?(u=n,e):u},e.value=function(n){return arguments.length?(i=n,e):i},e.revalue=function(n){return t(n,0),n},e},Xo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,s=-1;for(r=t.value?r/t.value:0;++s<o;)n(a=i[s],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=Xo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},Vu(e,r)},Xo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+("function"==typeof r?r.apply(this,arguments):r),c=(("function"==typeof u?u.apply(this,arguments):u)-a)/Xo.sum(o),s=Xo.range(i.length);null!=e&&s.sort(e===as?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var l=[];return s.forEach(function(n){var t;l[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),l}var t=Number,e=as,r=0,u=ka;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var as={};Xo.layout.stack=function(){function n(a,c){var s=a.map(function(e,r){return t.call(n,e,r)}),l=s.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,l,c);s=Xo.permute(s,f),l=Xo.permute(l,f);var h,g,p,v=r.call(n,l,c),d=s.length,m=s[0].length;for(g=0;m>g;++g)for(u.call(n,s[0][g],p=v[g],l[0][g][1]),h=1;d>h;++h)u.call(n,s[h][g],p+=l[h-1][g][1],l[h][g][1]);return a}var t=bt,e=Qu,r=ni,u=Ku,i=Ju,o=Gu;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:cs.get(t)||Qu,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:ss.get(t)||ni,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var cs=Xo.map({"inside-out":function(n){var t,e,r=n.length,u=n.map(ti),i=n.map(ei),o=Xo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,s=[],l=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],s.push(e)):(c+=i[e],l.push(e));return l.reverse().concat(s)},reverse:function(n){return Xo.range(n.length).reverse()},"default":Qu}),ss=Xo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,s,l=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=s=0,e=1;h>e;++e){for(t=0,u=0;l>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];l>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,s>c&&(s=c)}for(e=0;h>e;++e)g[e]-=s;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:ni});Xo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],s=n.map(e,this),l=r.call(this,s,i),f=u.call(this,l,s,i),i=-1,h=s.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=s[i],a>=l[0]&&a<=l[1]&&(o=c[Xo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=oi,u=ui;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=_t(t),n):r},n.bins=function(t){return arguments.length?(u="number"==typeof t?function(n){return ii(n,t)}:_t(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},Xo.layout.tree=function(){function n(n,i){function o(n,t){var r=n.children,u=n._tree;if(r&&(i=r.length)){for(var i,a,s,l=r[0],f=l,h=-1;++h<i;)s=r[h],o(s,a),f=c(s,a,f),a=s;vi(n);var g=.5*(l._tree.prelim+s._tree.prelim);t?(u.prelim=t._tree.prelim+e(n,t),u.mod=u.prelim-g):u.prelim=g}else t&&(u.prelim=t._tree.prelim+e(n,t))}function a(n,t){n.x=n._tree.prelim+t;var e=n.children;if(e&&(r=e.length)){var r,u=-1;for(t+=n._tree.mod;++u<r;)a(e[u],t)}}function c(n,t,r){if(t){for(var u,i=n,o=n,a=t,c=n.parent.children[0],s=i._tree.mod,l=o._tree.mod,f=a._tree.mod,h=c._tree.mod;a=si(a),i=ci(i),a&&i;)c=ci(c),o=si(o),o._tree.ancestor=n,u=a._tree.prelim+f-i._tree.prelim-s+e(a,i),u>0&&(di(mi(a,n,r),n,u),s+=u,l+=u),f+=a._tree.mod,s+=i._tree.mod,h+=c._tree.mod,l+=o._tree.mod;a&&!si(o)&&(o._tree.thread=a,o._tree.mod+=f-l),i&&!ci(c)&&(c._tree.thread=i,c._tree.mod+=s-h,r=n)}return r}var s=t.call(this,n,i),l=s[0];pi(l,function(n,t){n._tree={ancestor:n,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),o(l),a(l,-l._tree.prelim);var f=li(l,hi),h=li(l,fi),g=li(l,gi),p=f.x-e(f,h)/2,v=h.x+e(h,f)/2,d=g.depth||1;return pi(l,u?function(n){n.x*=r[0],n.y=n.depth*r[1],delete n._tree}:function(n){n.x=(n.x-p)/(v-p)*r[0],n.y=n.depth/d*r[1],delete n._tree}),s}var t=Xo.layout.hierarchy().sort(null).value(null),e=ai,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Vu(n,t)},Xo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],s=u[1],l=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,pi(a,function(n){n.r=+l(n.value)}),pi(a,bi),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/s))/2;pi(a,function(n){n.r+=f}),pi(a,bi),pi(a,function(n){n.r-=f})}return ki(a,c/2,s/2,t?1:1/Math.max(2*a.r/c,2*a.r/s)),o}var t,e=Xo.layout.hierarchy().sort(yi),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},Vu(n,e)},Xo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],s=0;pi(c,function(n){var t=n.children;t&&t.length?(n.x=Ci(t),n.y=Ai(t)):(n.x=o?s+=e(n,o):0,n.y=0,o=n)});var l=Ni(c),f=Li(c),h=l.x-e(l,f)/2,g=f.x+e(f,l)/2;return pi(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=Xo.layout.hierarchy().sort(null).value(null),e=ai,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},Vu(n,t)},Xo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,s=f(e),l=[],h=i.slice(),p=1/0,v="slice"===g?s.dx:"dice"===g?s.dy:"slice-dice"===g?1&e.depth?s.dy:s.dx:Math.min(s.dx,s.dy);for(n(h,s.dx*s.dy/e.value),l.area=0;(c=h.length)>0;)l.push(o=h[c-1]),l.area+=o.area,"squarify"!==g||(a=r(l,v))<=p?(h.pop(),p=a):(l.area-=l.pop().area,u(l,v,s,!1),v=Math.min(s.dx,s.dy),l.length=l.area=0,p=1/0);l.length&&(u(l,v,s,!0),l.length=l.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,s=e.y,l=t?c(n.area/t):0;if(t==e.dx){for((r||l>e.dy)&&(l=e.dy);++i<o;)u=n[i],u.x=a,u.y=s,u.dy=l,a+=u.dx=Math.min(e.x+e.dx-a,l?c(u.area/l):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=l,e.dy-=l}else{for((r||l>e.dx)&&(l=e.dx);++i<o;)u=n[i],u.x=a,u.y=s,u.dx=l,s+=u.dy=Math.min(e.y+e.dy-s,l?c(u.area/l):0);u.z=!1,u.dy+=e.y+e.dy-s,e.x+=l,e.dx-=l}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=s[0],i.dy=s[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=Xo.layout.hierarchy(),c=Math.round,s=[1,1],l=null,f=Ti,h=!1,g="squarify",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(s=n,i):s},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Ti(t):qi(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return qi(t,n)}if(!arguments.length)return l;var r;return f=null==(l=n)?Ti:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+"",i):g},Vu(i,a)},Xo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=Xo.random.normal.apply(Xo,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=Xo.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},Xo.scale={};var ls={floor:bt,ceil:bt};Xo.scale.linear=function(){return Hi([0,1],[0,1],fu,!1)};var fs={s:1,g:1,p:1,r:1,e:1};Xo.scale.log=function(){return $i(Xo.scale.linear().domain([0,1]),10,!0,[1,10])};var hs=Xo.format(".0e"),gs={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};Xo.scale.pow=function(){return Bi(Xo.scale.linear(),1,[0,1])},Xo.scale.sqrt=function(){return Xo.scale.pow().exponent(.5)},Xo.scale.ordinal=function(){return Ji([],{t:"range",a:[[]]})},Xo.scale.category10=function(){return Xo.scale.ordinal().range(ps)},Xo.scale.category20=function(){return Xo.scale.ordinal().range(vs)},Xo.scale.category20b=function(){return Xo.scale.ordinal().range(ds)},Xo.scale.category20c=function(){return Xo.scale.ordinal().range(ms)};var ps=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(ht),vs=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(ht),ds=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(ht),ms=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(ht);Xo.scale.quantile=function(){return Gi([],[])},Xo.scale.quantize=function(){return Ki(0,1,[0,1])},Xo.scale.threshold=function(){return Qi([.5],[0,1])},Xo.scale.identity=function(){return no([0,1])},Xo.svg={},Xo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+ys,a=u.apply(this,arguments)+ys,c=(o>a&&(c=o,o=a,a=c),a-o),s=Sa>c?"0":"1",l=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a);return c>=xs?n?"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"M0,"+n+"A"+n+","+n+" 0 1,0 0,"+-n+"A"+n+","+n+" 0 1,0 0,"+n+"Z":"M0,"+i+"A"+i+","+i+" 0 1,1 0,"+-i+"A"+i+","+i+" 0 1,1 0,"+i+"Z":n?"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L"+n*h+","+n*g+"A"+n+","+n+" 0 "+s+",0 "+n*l+","+n*f+"Z":"M"+i*l+","+i*f+"A"+i+","+i+" 0 "+s+",1 "+i*h+","+i*g+"L0,0"+"Z"}var t=to,e=eo,r=ro,u=uo;return n.innerRadius=function(e){return arguments.length?(t=_t(e),n):t},n.outerRadius=function(t){return arguments.length?(e=_t(t),n):e},n.startAngle=function(t){return arguments.length?(r=_t(t),n):r},n.endAngle=function(t){return arguments.length?(u=_t(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+ys;return[Math.cos(i)*n,Math.sin(i)*n]},n};var ys=-Ea,xs=ka-Aa;Xo.svg.line=function(){return io(bt)};var Ms=Xo.map({linear:oo,"linear-closed":ao,step:co,"step-before":so,"step-after":lo,basis:mo,"basis-open":yo,"basis-closed":xo,bundle:Mo,cardinal:go,"cardinal-open":fo,"cardinal-closed":ho,monotone:Eo});Ms.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var _s=[0,2/3,1/3,0],bs=[0,1/3,2/3,0],ws=[0,1/6,2/3,1/6];Xo.svg.line.radial=function(){var n=io(Ao);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},so.reverse=lo,lo.reverse=so,Xo.svg.area=function(){return Co(bt)},Xo.svg.area.radial=function(){var n=Co(Ao);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},Xo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),s=t(this,o,n,a);return"M"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,s)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,s.r,s.p0)+r(s.r,s.p1,s.a1-s.a0)+u(s.r,s.p1,c.r,c.p0))+"Z"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+ys,l=s.call(n,u,r)+ys;return{r:i,a0:o,a1:l,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(l),i*Math.sin(l)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Sa)+",1 "+t}function u(n,t,e,r){return"Q 0,0 "+r}var i=hr,o=gr,a=No,c=ro,s=uo;return n.radius=function(t){return arguments.length?(a=_t(t),n):a},n.source=function(t){return arguments.length?(i=_t(t),n):i},n.target=function(t){return arguments.length?(o=_t(t),n):o},n.startAngle=function(t){return arguments.length?(c=_t(t),n):c},n.endAngle=function(t){return arguments.length?(s=_t(t),n):s},n},Xo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),"M"+c[0]+"C"+c[1]+" "+c[2]+" "+c[3]}var t=hr,e=gr,r=Lo;return n.source=function(e){return arguments.length?(t=_t(e),n):t},n.target=function(t){return arguments.length?(e=_t(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},Xo.svg.diagonal.radial=function(){var n=Xo.svg.diagonal(),t=Lo,e=n.projection;return n.projection=function(n){return arguments.length?e(To(t=n)):t},n},Xo.svg.symbol=function(){function n(n,r){return(Ss.get(t.call(this,n,r))||Ro)(e.call(this,n,r))}var t=zo,e=qo;return n.type=function(e){return arguments.length?(t=_t(e),n):t},n.size=function(t){return arguments.length?(e=_t(t),n):e},n};var Ss=Xo.map({circle:Ro,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Cs)),e=t*Cs;return"M0,"+-t+"L"+e+",0"+" 0,"+t+" "+-e+",0"+"Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/As),e=t*As/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/As),e=t*As/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});Xo.svg.symbolTypes=Ss.keys();var ks,Es,As=Math.sqrt(3),Cs=Math.tan(30*Na),Ns=[],Ls=0;Ns.call=da.call,Ns.empty=da.empty,Ns.node=da.node,Ns.size=da.size,Xo.transition=function(n){return arguments.length?ks?n.transition():n:xa.transition()},Xo.transition.prototype=Ns,Ns.select=function(n){var t,e,r,u=this.id,i=[];n=M(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],s=-1,l=c.length;++s<l;)(r=c[s])&&(e=n.call(r,r.__data__,s,o))?("__data__"in r&&(e.__data__=r.__data__),jo(e,s,u,r.__transition__[u]),t.push(e)):t.push(null)}return Do(i,u)},Ns.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=_(n);for(var c=-1,s=this.length;++c<s;)for(var l=this[c],f=-1,h=l.length;++f<h;)if(r=l[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&jo(u,g,o,i),t.push(u)}return Do(a,o)},Ns.filter=function(n){var t,e,r,u=[];"function"!=typeof n&&(n=q(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a,i)&&t.push(r)}return Do(u,this.id)},Ns.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):R(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Ns.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?Ru:fu,a=Xo.ns.qualify(n);return Po(this,"attr."+n,t,a.local?i:u)},Ns.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=Xo.ns.qualify(n);return this.tween("attr."+n,u.local?r:e)},Ns.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+="",function(){var r,u=Go.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=fu(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(t="");for(e in n)this.style(e,n[e],t);return this}e=""}return Po(this,"style."+n,t,u)},Ns.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,Go.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=""),this.tween("style."+n,r)},Ns.text=function(n){return Po(this,"text",n,Uo)},Ns.remove=function(){return this.each("end.transition",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Ns.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:("function"!=typeof n&&(n=Xo.ease.apply(Xo,arguments)),R(this,function(e){e.__transition__[t].ease=n}))},Ns.delay=function(n){var t=this.id;return R(this,"function"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Ns.duration=function(n){var t=this.id;return R(this,"function"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Ns.each=function(n,t){var e=this.id;if(arguments.length<2){var r=Es,u=ks;ks=e,R(this,function(t,r,u){Es=t.__transition__[e],n.call(t,t.__data__,r,u)}),Es=r,ks=u}else R(this,function(r){var u=r.__transition__[e];(u.event||(u.event=Xo.dispatch("start","end"))).on(n,t)});return this},Ns.transition=function(){for(var n,t,e,r,u=this.id,i=++Ls,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],s=0,l=t.length;l>s;s++)(e=t[s])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,jo(e,s,i,r)),n.push(e)}return Do(o,i)},Xo.svg.axis=function(){function n(n){n.each(function(){var n,s=Xo.select(this),l=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):bt:t,p=s.selectAll(".tick").data(h,f),v=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Aa),d=Xo.transition(p.exit()).style("opacity",Aa).remove(),m=Xo.transition(p).style("opacity",1),y=Ri(f),x=s.selectAll(".domain").data([0]),M=(x.enter().append("path").attr("class","domain"),Xo.transition(x));v.append("line"),v.append("text");var _=v.select("line"),b=m.select("line"),w=p.select("text").text(g),S=v.select("text"),k=m.select("text");switch(r){case"bottom":n=Ho,_.attr("y2",u),S.attr("y",Math.max(u,0)+o),b.attr("x2",0).attr("y2",u),k.attr("x",0).attr("y",Math.max(u,0)+o),w.attr("dy",".71em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+i+"V0H"+y[1]+"V"+i);break;case"top":n=Ho,_.attr("y2",-u),S.attr("y",-(Math.max(u,0)+o)),b.attr("x2",0).attr("y2",-u),k.attr("x",0).attr("y",-(Math.max(u,0)+o)),w.attr("dy","0em").style("text-anchor","middle"),M.attr("d","M"+y[0]+","+-i+"V0H"+y[1]+"V"+-i);break;case"left":n=Fo,_.attr("x2",-u),S.attr("x",-(Math.max(u,0)+o)),b.attr("x2",-u).attr("y2",0),k.attr("x",-(Math.max(u,0)+o)).attr("y",0),w.attr("dy",".32em").style("text-anchor","end"),M.attr("d","M"+-i+","+y[0]+"H0V"+y[1]+"H"+-i);break;case"right":n=Fo,_.attr("x2",u),S.attr("x",Math.max(u,0)+o),b.attr("x2",u).attr("y2",0),k.attr("x",Math.max(u,0)+o).attr("y",0),w.attr("dy",".32em").style("text-anchor","start"),M.attr("d","M"+i+","+y[0]+"H0V"+y[1]+"H"+i)}if(f.rangeBand){var E=f,A=E.rangeBand()/2;l=f=function(n){return E(n)+A}}else l.rangeBand?l=f:d.call(n,f);v.call(n,l),m.call(n,f)})}var t,e=Xo.scale.linear(),r=Ts,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in qs?t+"":Ts,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Ts="bottom",qs={top:1,right:1,bottom:1,left:1};Xo.svg.brush=function(){function n(i){i.each(function(){var i=Xo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=i.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),i.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=i.selectAll(".resize").data(p,bt);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return zs[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,f=Xo.transition(i),h=Xo.transition(o);c&&(l=Ri(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),e(f)),s&&(l=Ri(s),h.attr("y",l[0]).attr("height",l[1]-l[0]),r(f)),t(f)})}function t(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+l[+/e$/.test(n)]+","+f[+/^s/.test(n)]+")"})}function e(n){n.select(".extent").attr("x",l[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",l[1]-l[0])}function r(n){n.select(".extent").attr("y",f[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function u(){function u(){32==Xo.event.keyCode&&(C||(x=null,L[0]-=l[1],L[1]-=f[1],C=2),d())}function p(){32==Xo.event.keyCode&&2==C&&(L[0]+=l[1],L[1]+=f[1],C=0,d())}function v(){var n=Xo.mouse(_),u=!1;M&&(n[0]+=M[0],n[1]+=M[1]),C||(Xo.event.altKey?(x||(x=[(l[0]+l[1])/2,(f[0]+f[1])/2]),L[0]=l[+(n[0]<x[0])],L[1]=f[+(n[1]<x[1])]):x=null),E&&m(n,c,0)&&(e(S),u=!0),A&&m(n,s,1)&&(r(S),u=!0),u&&(t(S),w({type:"brush",mode:C?"move":"resize"}))}function m(n,t,e){var r,u,a=Ri(t),c=a[0],s=a[1],p=L[e],v=e?f:l,d=v[1]-v[0];return C&&(c-=p,s-=d+p),r=(e?g:h)?Math.max(c,Math.min(s,n[e])):n[e],C?u=(r+=p)+d:(x&&(p=Math.max(c,Math.min(s,2*x[e]-r))),r>p?(u=r,r=p):u=p),v[0]!=r||v[1]!=u?(e?o=null:i=null,v[0]=r,v[1]=u,!0):void 0}function y(){v(),S.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),Xo.select("body").style("cursor",null),T.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),N(),w({type:"brushend"})}var x,M,_=this,b=Xo.select(Xo.event.target),w=a.of(_,arguments),S=Xo.select(_),k=b.datum(),E=!/^(n|s)$/.test(k)&&c,A=!/^(e|w)$/.test(k)&&s,C=b.classed("extent"),N=O(),L=Xo.mouse(_),T=Xo.select(Go).on("keydown.brush",u).on("keyup.brush",p);if(Xo.event.changedTouches?T.on("touchmove.brush",v).on("touchend.brush",y):T.on("mousemove.brush",v).on("mouseup.brush",y),S.interrupt().selectAll("*").interrupt(),C)L[0]=l[0]-L[0],L[1]=f[0]-L[1];else if(k){var q=+/w$/.test(k),z=+/^n/.test(k);M=[l[1-q]-L[0],f[1-z]-L[1]],L[0]=l[q],L[1]=f[z]}else Xo.event.altKey&&(x=L.slice());S.style("pointer-events","none").selectAll(".resize").style("display",null),Xo.select("body").style("cursor",b.style("cursor")),w({type:"brushstart"}),v()}var i,o,a=y(n,"brushstart","brush","brushend"),c=null,s=null,l=[0,0],f=[0,0],h=!0,g=!0,p=Rs[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:l,y:f,i:i,j:o},e=this.__chart__||t;this.__chart__=t,ks?Xo.select(this).transition().each("start.brush",function(){i=e.i,o=e.j,l=e.x,f=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=hu(l,t.x),r=hu(f,t.y);return i=o=null,function(u){l=t.x=e(u),f=t.y=r(u),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){i=t.i,o=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,p=Rs[!c<<1|!s],n):c},n.y=function(t){return arguments.length?(s=t,p=Rs[!c<<1|!s],n):s},n.clamp=function(t){return arguments.length?(c&&s?(h=!!t[0],g=!!t[1]):c?h=!!t:s&&(g=!!t),n):c&&s?[h,g]:c?h:s?g:null},n.extent=function(t){var e,r,u,a,h;return arguments.length?(c&&(e=t[0],r=t[1],s&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(h=e,e=r,r=h),(e!=l[0]||r!=l[1])&&(l=[e,r])),s&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],s.invert&&(u=s(u),a=s(a)),u>a&&(h=u,u=a,a=h),(u!=f[0]||a!=f[1])&&(f=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=l[0],r=l[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(h=e,e=r,r=h))),s&&(o?(u=o[0],a=o[1]):(u=f[0],a=f[1],s.invert&&(u=s.invert(u),a=s.invert(a)),u>a&&(h=u,u=a,a=h))),c&&s?[[e,u],[r,a]]:c?[e,r]:s&&[u,a])},n.clear=function(){return n.empty()||(l=[0,0],f=[0,0],i=o=null),n},n.empty=function(){return!!c&&l[0]==l[1]||!!s&&f[0]==f[1]},Xo.rebind(n,a,"on")};var zs={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Rs=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Ds=tc.format=ac.timeFormat,Ps=Ds.utc,Us=Ps("%Y-%m-%dT%H:%M:%S.%LZ");Ds.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?Oo:Us,Oo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},Oo.toString=Us.toString,tc.second=Rt(function(n){return new ec(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),tc.seconds=tc.second.range,tc.seconds.utc=tc.second.utc.range,tc.minute=Rt(function(n){return new ec(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),tc.minutes=tc.minute.range,tc.minutes.utc=tc.minute.utc.range,tc.hour=Rt(function(n){var t=n.getTimezoneOffset()/60;return new ec(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),tc.hours=tc.hour.range,tc.hours.utc=tc.hour.utc.range,tc.month=Rt(function(n){return n=tc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),tc.months=tc.month.range,tc.months.utc=tc.month.utc.range;var js=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Hs=[[tc.second,1],[tc.second,5],[tc.second,15],[tc.second,30],[tc.minute,1],[tc.minute,5],[tc.minute,15],[tc.minute,30],[tc.hour,1],[tc.hour,3],[tc.hour,6],[tc.hour,12],[tc.day,1],[tc.day,2],[tc.week,1],[tc.month,1],[tc.month,3],[tc.year,1]],Fs=Ds.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",be]]),Os={range:function(n,t,e){return Xo.range(Math.ceil(n/e)*e,+t,e).map(Io)},floor:bt,ceil:bt};Hs.year=tc.year,tc.scale=function(){return Yo(Xo.scale.linear(),Hs,Fs)};var Ys=Hs.map(function(n){return[n[0].utc,n[1]]}),Is=Ps.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",be]]);Ys.year=tc.year.utc,tc.scale.utc=function(){return Yo(Xo.scale.linear(),Ys,Is)},Xo.text=wt(function(n){return n.responseText}),Xo.json=function(n,t){return St(n,"application/json",Zo,t)},Xo.html=function(n,t){return St(n,"text/html",Vo,t)},Xo.xml=wt(function(n){return n.responseXML}),"function"==typeof define&&define.amd?define(Xo):"object"==typeof module&&module.exports?module.exports=Xo:this.d3=Xo}();'use strict';(function(window){window.define=undefined;}).call(this,this);'use strict';tr.exportTo('tr.ui.b',function(){const DataSeriesEnableChangeEventType='data-series-enabled-change';const THIS_DOC=document.currentScript.ownerDocument;const svgNS='http://www.w3.org/2000/svg';const ColorScheme=tr.b.ColorScheme;function getColorOfKey(key,selected){let id=ColorScheme.getColorIdForGeneralPurposeString(key);if(selected){id+=ColorScheme.properties.brightenedOffsets[0];}
-return ColorScheme.colorsAsStrings[id];}
-function getSVGTextSize(parentNode,text,opt_callback,opt_this){const textNode=document.createElementNS('http://www.w3.org/2000/svg','text');textNode.setAttributeNS(null,'x',0);textNode.setAttributeNS(null,'y',0);textNode.setAttributeNS(null,'fill','black');textNode.appendChild(document.createTextNode(text));parentNode.appendChild(textNode);if(opt_callback){opt_callback.call(opt_this||parentNode,textNode);}
-const width=textNode.getComputedTextLength();const height=textNode.getBBox().height;parentNode.removeChild(textNode);return{width,height};}
-function DataSeries(key){this.key_=key;this.target_=undefined;this.title_='';this.optional_=false;this.enabled_=true;this.color_=getColorOfKey(key,false);this.highlightedColor_=getColorOfKey(key,true);}
-DataSeries.prototype={get key(){return this.key_;},get title(){return this.title_;},set title(t){this.title_=t;},get color(){return this.color_;},set color(c){this.color_=c;},get highlightedColor(){return this.highlightedColor_;},set highlightedColor(c){this.highlightedColor_=c;},get optional(){return this.optional_;},set optional(optional){this.optional_=optional;},get enabled(){return this.enabled_;},set enabled(enabled){if(!this.optional&&!enabled){this.optional=true;}
-this.enabled_=enabled;},get target(){return this.target_;},set target(t){this.target_=t;}};const ChartBase=tr.ui.b.define('svg',undefined,svgNS);ChartBase.prototype={__proto__:HTMLUnknownElement.prototype,getDataSeries(key){if(!this.seriesByKey_.has(key)){this.seriesByKey_.set(key,new DataSeries(key));}
-return this.seriesByKey_.get(key);},decorate(){Polymer.dom(this).classList.add('chart-base');this.setAttribute('style','cursor: default; user-select: none;');this.chartTitle_=undefined;this.seriesByKey_=new Map();this.graphWidth_=undefined;this.graphHeight_=undefined;this.margin={top:0,right:0,bottom:0,left:0,};this.hideLegend_=false;const template=Polymer.dom(THIS_DOC).querySelector('#chart-base-template');const svgEl=Polymer.dom(template.content).querySelector('svg');for(let i=0;i<Polymer.dom(svgEl).children.length;i++){Polymer.dom(this).appendChild(Polymer.dom(svgEl.children[i]).cloneNode(true));}
-this.addEventListener(DataSeriesEnableChangeEventType,this.onDataSeriesEnableChange_.bind(this));},get hideLegend(){return this.hideLegend_;},set hideLegend(h){this.hideLegend_=h;this.updateContents_();},isSeriesEnabled(key){return this.getDataSeries(key).enabled;},onDataSeriesEnableChange_(event){this.getDataSeries(event.key).enabled=event.enabled;this.updateContents_();},get chartTitle(){return this.chartTitle_;},set chartTitle(chartTitle){this.chartTitle_=chartTitle;this.updateContents_();},get chartAreaElement(){return Polymer.dom(this).querySelector('#chart-area');},get graphWidth(){if(this.graphWidth_===undefined)return this.defaultGraphWidth;return this.graphWidth_;},set graphWidth(width){this.graphWidth_=width;this.updateContents_();},get defaultGraphWidth(){return 0;},get graphHeight(){if(this.graphHeight_===undefined)return this.defaultGraphHeight;return this.graphHeight_;},set graphHeight(height){this.graphHeight_=height;this.updateContents_();},get defaultGraphHeight(){return 0;},get totalWidth(){return this.margin.left+this.graphWidth+this.margin.right;},get totalHeight(){return this.margin.top+this.graphHeight+this.margin.bottom;},updateMargins_(){const legendSize=this.computeLegendSize_();this.margin.right=Math.max(this.margin.right,legendSize.width);this.margin.bottom=Math.max(this.margin.bottom,legendSize.height-this.graphHeight);if(this.chartTitle_){const titleSize=getSVGTextSize(this,this.chartTitle_,textNode=>{textNode.style.fontSize='16pt';});this.margin.top=Math.max(this.margin.top,titleSize.height+15);const horizontalOverhangPx=(titleSize.width-this.graphWidth)/2;this.margin.left=Math.max(this.margin.left,horizontalOverhangPx);this.margin.right=Math.max(this.margin.right,horizontalOverhangPx);}},computeLegendSize_(){let width=0;let height=0;if(this.hideLegend)return{width,height};for(const series of this.seriesByKey_.values()){const textSize=getSVGTextSize(this,series.key);width=Math.max(width,textSize.width+20);height+=textSize.height;}
-return{width,height};},updateDimensions_(){const thisSel=d3.select(this);thisSel.attr('width',this.totalWidth);thisSel.attr('height',this.totalHeight);d3.select(this.chartAreaElement).attr('transform','translate('+this.margin.left+', '+this.margin.top+')');},updateContents_(){this.updateMargins_();this.updateDimensions_();this.updateTitle_();this.updateLegend_();},updateTitle_(){const titleSel=d3.select(this.chartAreaElement).select('#title');if(!this.chartTitle_){titleSel.style('display','none');return;}
-titleSel.attr('transform','translate('+this.graphWidth*0.5+',-15)').style('display',undefined).style('text-anchor','middle').style('font-size','16pt').attr('class','title').attr('width',this.graphWidth).text(this.chartTitle_);},updateLegend_(){const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.legend').remove();if(this.hideLegend)return;const series=[...this.seriesByKey_.values()].reverse();const legendEntriesSel=chartAreaSel.selectAll('.legend').data(series);legendEntriesSel.enter().append('foreignObject').attr('class','legend').attr('x',this.graphWidth+2).attr('width',this.margin.right).attr('height',18).attr('transform',(series,i)=>'translate(0,'+i*18+')').append('xhtml:body').style('margin',0).append('tr-ui-b-chart-legend-key').property('color',series=>((this.currentHighlightedLegendKey===series.key)?series.highlightedColor:series.color)).property('width',this.margin.right).property('target',series=>series.target).property('title',series=>series.title).property('optional',series=>series.optional).property('enabled',series=>series.enabled).text(series=>series.key);legendEntriesSel.exit().remove();},get highlightedLegendKey(){return this.highlightedLegendKey_;},set highlightedLegendKey(highlightedLegendKey){this.highlightedLegendKey_=highlightedLegendKey;this.updateHighlight_();},get currentHighlightedLegendKey(){if(this.tempHighlightedLegendKey_){return this.tempHighlightedLegendKey_;}
-return this.highlightedLegendKey_;},pushTempHighlightedLegendKey(key){if(this.tempHighlightedLegendKey_){throw new Error('push cannot nest');}
-this.tempHighlightedLegendKey_=key;this.updateHighlight_();},popTempHighlightedLegendKey(key){if(this.tempHighlightedLegendKey_!==key){throw new Error('pop cannot happen');}
-this.tempHighlightedLegendKey_=undefined;this.updateHighlight_();},updateHighlight_(){const chartAreaSel=d3.select(this.chartAreaElement);const legendEntriesSel=chartAreaSel.selectAll('.legend');const getDataSeries=chart.getDataSeries.bind(chart);const currentHighlightedLegendKey=chart.currentHighlightedLegendKey;legendEntriesSel.each(function(key){const dataSeries=getDataSeries(key);if(key===currentHighlightedLegendKey){this.style.fill=dataSeries.highlightedColor;this.style.fontWeight='bold';}else{this.style.fill=dataSeries.color;this.style.fontWeight='';}});}};return{ChartBase,DataSeriesEnableChangeEventType,getColorOfKey,getSVGTextSize,};});'use strict';tr.exportTo('tr.ui.b',function(){const D3_Y_AXIS_WIDTH_PX=9;const D3_X_AXIS_HEIGHT_PX=23;function sanitizePower(x,defaultValue){if(!isNaN(x)&&isFinite(x)&&(x!==0))return x;return defaultValue;}
-const ChartBase2D=tr.ui.b.define('chart-base-2d',tr.ui.b.ChartBase);ChartBase2D.prototype={__proto__:tr.ui.b.ChartBase.prototype,decorate(){super.decorate();Polymer.dom(this).classList.add('chart-base-2d');this.xScale_=d3.scale.linear();this.yScale_=d3.scale.linear();this.isYLogScale_=false;this.yLogScaleBase_=10;this.yLogScaleMin_=undefined;this.autoDataRange_=new tr.b.math.Range();this.overrideDataRange_=undefined;this.hideXAxis_=false;this.hideYAxis_=false;this.data_=[];this.xAxisLabel_='';this.yAxisLabel_='';this.textHeightPx_=0;this.unit_=undefined;d3.select(this.chartAreaElement).append('g').attr('id','brushes');d3.select(this.chartAreaElement).append('g').attr('id','series');this.addEventListener('mousedown',this.onMouseDown_.bind(this));},get yLogScaleBase(){return this.yLogScaleBase_;},set yLogScaleBase(b){this.yLogScaleBase_=b;},get unit(){return this.unit_;},set unit(unit){this.unit_=unit;this.updateContents_();},get xAxisLabel(){return this.xAxisLabel_;},set xAxisLabel(label){this.xAxisLabel_=label;},get yAxisLabel(){return this.yAxisLabel_;},set yAxisLabel(label){this.yAxisLabel_=label;},get hideXAxis(){return this.hideXAxis_;},set hideXAxis(h){this.hideXAxis_=h;this.updateContents_();},get hideYAxis(){return this.hideYAxis_;},set hideYAxis(h){this.hideYAxis_=h;this.updateContents_();},get data(){return this.data_;},set data(data){if(data===undefined){throw new Error('data must be an Array');}
-this.data_=data;this.updateSeriesKeys_();this.updateDataRange_();this.updateContents_();},set isYLogScale(logScale){if(logScale){this.yScale_=d3.scale.log().base(this.yLogScaleBase);}else{this.yScale_=d3.scale.linear();}
-this.isYLogScale_=logScale;},getYScaleMin_(){return this.isYLogScale_?this.yLogScaleMin_:0;},getYScaleDomain_(minValue,maxValue){if(this.overrideDataRange_!==undefined){return[this.dataRange.min,this.dataRange.max];}
-if(this.isYLogScale_){return[this.getYScaleMin_(),maxValue];}
-return[Math.min(minValue,this.getYScaleMin_()),maxValue];},getSampleWidth_(data,index,leftSide){let leftIndex;let rightIndex;if(leftSide){leftIndex=Math.max(index-1,0);rightIndex=index;}else{leftIndex=index;rightIndex=Math.min(index+1,data.length-1);}
-const leftWidth=this.getXForDatum_(data[index],index)-
-this.getXForDatum_(data[leftIndex],leftIndex);const rightWidth=this.getXForDatum_(data[rightIndex],rightIndex)-
-this.getXForDatum_(data[index],index);return tr.b.math.Statistics.mean([leftWidth,rightWidth]);},updateSeriesKeys_(){this.data_.forEach(function(datum){Object.keys(datum).forEach(function(key){if(this.isDatumFieldSeries_(key)){this.getDataSeries(key);}},this);},this);},isDatumFieldSeries_(fieldName){return fieldName!=='x';},getXForDatum_(datum,index){return datum.x;},updateMargins_(){this.margin.left=this.hideYAxis?0:this.yAxisWidth;this.margin.bottom=this.hideXAxis?0:this.xAxisHeight;if(this.hideXAxis&&!this.hideYAxis){this.margin.bottom=10;}
-if(this.hideYAxis&&!this.hideXAxis){this.margin.left=10;}
-this.margin.top=this.hideYAxis?0:10;if(this.yAxisLabel){this.margin.top+=this.textHeightPx_;}
-if(this.xAxisLabel){this.margin.right=Math.max(this.margin.right,16+tr.ui.b.getSVGTextSize(this,this.xAxisLabel).width);}
-super.updateMargins_();},get xAxisHeight(){return D3_X_AXIS_HEIGHT_PX;},computeScaleTickWidth_(scale){if(this.data.length===0)return 0;let tickValues=scale.ticks();let tickFormat=scale.tickFormat();if(this.isYLogScale_){const enclosingPowers=this.dataRange.enclosingPowers();tickValues=[];const maxPower=sanitizePower(enclosingPowers.max,this.yLogScaleBase);for(let power=sanitizePower(enclosingPowers.min,1);power<=maxPower;power*=this.yLogScaleBase){tickValues.push(power);}
-tickFormat=v=>v.toString();}
-if(this.unit){tickFormat=v=>this.unit.format(v);}
-let maxTickWidth=0;for(const tickValue of tickValues){maxTickWidth=Math.max(maxTickWidth,tr.ui.b.getSVGTextSize(this,tickFormat(tickValue)).width);}
-return D3_Y_AXIS_WIDTH_PX+maxTickWidth;},get yAxisWidth(){return this.computeScaleTickWidth_(this.yScale_);},updateScales_(){if(this.data_.length===0)return;this.xScale_.range([0,this.graphWidth]);this.xScale_.domain(d3.extent(this.data_,this.getXForDatum_.bind(this)));this.yScale_.range([this.graphHeight,0]);this.yScale_.domain([this.dataRange.min,this.dataRange.max]);},updateBrushContents_(brushSel){brushSel.selectAll('*').remove();},updateXAxis_(xAxis){xAxis.selectAll('*').remove();xAxis[0][0].style.opacity=0;if(this.hideXAxis)return;this.drawXAxis_(xAxis);const label=xAxis.append('text').attr('class','label');this.drawXAxisTicks_(xAxis);this.drawXAxisLabel_(label);xAxis[0][0].style.opacity=1;},drawXAxis_(xAxis){xAxis.attr('transform','translate(0,'+this.graphHeight+')').call(d3.svg.axis().scale(this.xScale_).orient('bottom'));},drawXAxisLabel_(label){label.attr('x',this.graphWidth+16).attr('y',8).text(this.xAxisLabel);},drawXAxisTicks_(xAxis){let previousRight=undefined;xAxis.selectAll('.tick')[0].forEach(function(tick){const currentLeft=tick.transform.baseVal[0].matrix.e;if((previousRight===undefined)||(currentLeft>(previousRight+3))){const currentWidth=tick.getBBox().width;previousRight=currentLeft+currentWidth;}else{tick.style.opacity=0;}});},set overrideDataRange(range){this.overrideDataRange_=range;},get dataRange(){if(this.overrideDataRange_!==undefined){return this.overrideDataRange_;}
-return this.autoDataRange_;},updateDataRange_(){if(this.overrideDataRange_!==undefined)return;const dataBySeriesKey=this.getDataBySeriesKey_();this.autoDataRange_.reset();for(const[series,values]of Object.entries(dataBySeriesKey)){for(let i=0;i<values.length;i++){this.autoDataRange_.addValue(values[i][series]);}}
-this.yLogScaleMin_=undefined;if(this.autoDataRange_.min!==undefined){let minValue=this.autoDataRange_.min;if(minValue===0){minValue=1;}
-const onePowerLess=tr.b.math.lesserPower(minValue/this.yLogScaleBase);this.yLogScaleMin_=onePowerLess;}},updateYAxis_(yAxis){yAxis.selectAll('*').remove();yAxis[0][0].style.opacity=0;if(this.hideYAxis)return;this.drawYAxis_(yAxis);this.drawYAxisTicks_(yAxis);const label=yAxis.append('text').attr('class','label');this.drawYAxisLabel_(label);},drawYAxis_(yAxis){let axisModifier=d3.svg.axis().scale(this.yScale_).orient('left');let tickFormat;if(this.isYLogScale_){if(this.yLogScaleMin_===undefined)return;const tickValues=[];const enclosingPowers=this.dataRange.enclosingPowers();const maxPower=sanitizePower(enclosingPowers.max,this.yLogScaleBase);for(let power=sanitizePower(enclosingPowers.min,1);power<=maxPower;power*=this.yLogScaleBase){tickValues.push(power);}
-axisModifier=axisModifier.tickValues(tickValues);tickFormat=v=>v.toString();}
-if(this.unit){tickFormat=v=>this.unit.format(v);}
-if(tickFormat){axisModifier=axisModifier.tickFormat(tickFormat);}
-yAxis.call(axisModifier);},drawYAxisLabel_(label){const labelWidthPx=Math.ceil(tr.ui.b.getSVGTextSize(this.chartAreaElement,this.yAxisLabel).width);label.attr('x',-labelWidthPx).attr('y',-8).text(this.yAxisLabel);},drawYAxisTicks_(yAxis){let previousTop=undefined;yAxis.selectAll('.tick')[0].forEach(function(tick){const bbox=tick.getBBox();const currentTop=tick.transform.baseVal[0].matrix.f;const currentBottom=currentTop+bbox.height;if((previousTop===undefined)||(previousTop>(currentBottom+3))){previousTop=currentTop;}else{tick.style.opacity=0;}});yAxis[0][0].style.opacity=1;},updateContents_(){if(this.textHeightPx_===0){this.textHeightPx_=tr.ui.b.getSVGTextSize(this,'Ay').height;}
-this.updateScales_();super.updateContents_();const chartAreaSel=d3.select(this.chartAreaElement);this.updateXAxis_(chartAreaSel.select('.x.axis'));this.updateYAxis_(chartAreaSel.select('.y.axis'));for(const child of this.querySelectorAll('.axis path, .axis line')){child.style.fill='none';child.style.shapeRendering='crispEdges';child.style.stroke='black';}
-this.updateBrushContents_(chartAreaSel.select('#brushes'));this.updateDataContents_(chartAreaSel.select('#series'));},updateDataContents_(seriesSel){throw new Error('Not implemented');},getDataBySeriesKey_(){const dataBySeriesKey={};for(const[key,series]of this.seriesByKey_){dataBySeriesKey[key]=[];}
-this.data_.forEach(function(multiSeriesDatum,index){const x=this.getXForDatum_(multiSeriesDatum,index);d3.keys(multiSeriesDatum).forEach(function(seriesKey){if(seriesKey==='x')return;if(multiSeriesDatum[seriesKey]===undefined)return;if(!this.isDatumFieldSeries_(seriesKey))return;const singleSeriesDatum={x};singleSeriesDatum[seriesKey]=multiSeriesDatum[seriesKey];dataBySeriesKey[seriesKey].push(singleSeriesDatum);},this);},this);return dataBySeriesKey;},getChartPointAtClientPoint_(clientPoint){const rect=this.getBoundingClientRect();return{x:clientPoint.x-rect.left-this.margin.left,y:clientPoint.y-rect.top-this.margin.top};},getDataPointAtChartPoint_(chartPoint){return{x:tr.b.math.clamp(this.xScale_.invert(chartPoint.x),this.xScale_.domain()[0],this.xScale_.domain()[1]),y:tr.b.math.clamp(this.yScale_.invert(chartPoint.y),this.yScale_.domain()[0],this.yScale_.domain()[1])};},getDataPointAtClientPoint_(clientX,clientY){const chartPoint=this.getChartPointAtClientPoint_({x:clientX,y:clientY});return this.getDataPointAtChartPoint_(chartPoint);},prepareDataEvent_(mouseEvent,dataEvent){const dataPoint=this.getDataPointAtClientPoint_(mouseEvent.clientX,mouseEvent.clientY);dataEvent.x=dataPoint.x;dataEvent.y=dataPoint.y;},onMouseDown_(mouseEvent){tr.ui.b.trackMouseMovesUntilMouseUp(this.onMouseMove_.bind(this,mouseEvent.button),this.onMouseUp_.bind(this,mouseEvent.button));mouseEvent.preventDefault();mouseEvent.stopPropagation();const dataEvent=new tr.b.Event('item-mousedown');dataEvent.button=mouseEvent.button;this.prepareDataEvent_(mouseEvent,dataEvent);this.dispatchEvent(dataEvent);for(const child of this.querySelector('#brushes').children){child.setAttribute('fill','rgb(103, 199, 165)');}},onMouseMove_(button,mouseEvent){if(mouseEvent.buttons!==undefined){mouseEvent.preventDefault();mouseEvent.stopPropagation();}
-const dataEvent=new tr.b.Event('item-mousemove');dataEvent.button=button;this.prepareDataEvent_(mouseEvent,dataEvent);this.dispatchEvent(dataEvent);for(const child of this.querySelector('#brushes').children){child.setAttribute('fill','rgb(103, 199, 165)');}},onMouseUp_(button,mouseEvent){mouseEvent.preventDefault();mouseEvent.stopPropagation();const dataEvent=new tr.b.Event('item-mouseup');dataEvent.button=button;this.prepareDataEvent_(mouseEvent,dataEvent);this.dispatchEvent(dataEvent);for(const child of this.querySelector('#brushes').children){child.setAttribute('fill','rgb(213, 236, 229)');}}};return{ChartBase2D,};});'use strict';tr.exportTo('tr.ui.b',function(){const ChartBase2D=tr.ui.b.ChartBase2D;const ChartBase2DBrushX=tr.ui.b.define('chart-base-2d-brush-1d',ChartBase2D);ChartBase2DBrushX.prototype={__proto__:ChartBase2D.prototype,decorate(){super.decorate();this.brushedRange_=new tr.b.math.Range();},set brushedRange(range){this.brushedRange_.reset();this.brushedRange_.addRange(range);this.updateContents_();},get brushedRange(){return tr.b.math.Range.fromDict(this.brushedRange_.toJSON());},computeBrushRangeFromIndices(indexA,indexB){indexA=tr.b.math.clamp(indexA,0,this.data_.length-1);indexB=tr.b.math.clamp(indexB,0,this.data_.length-1);const leftIndex=Math.min(indexA,indexB);const rightIndex=Math.max(indexA,indexB);const brushRange=new tr.b.math.Range();brushRange.addValue(this.getXForDatum_(this.data_[leftIndex],leftIndex)-
-this.getSampleWidth_(this.data_,leftIndex,true));brushRange.addValue(this.getXForDatum_(this.data_[rightIndex],rightIndex)+
-this.getSampleWidth_(this.data_,rightIndex,false));return brushRange;},getDataIndex_(dataX){if(this.data.length===0)return undefined;const bisect=d3.bisector(this.getXForDatum_.bind(this)).right;return bisect(this.data_,dataX)-1;},prepareDataEvent_(mouseEvent,dataEvent){ChartBase2D.prototype.prepareDataEvent_.call(this,mouseEvent,dataEvent);dataEvent.index=this.getDataIndex_(dataEvent.x);if(dataEvent.index!==undefined){dataEvent.data=this.data_[dataEvent.index];}},updateBrushContents_(brushSel){brushSel.selectAll('*').remove();const brushes=this.brushedRange_.isEmpty?[]:[this.brushedRange_];const brushRectsSel=brushSel.selectAll('rect').data(brushes);brushRectsSel.enter().append('rect');brushRectsSel.exit().remove();this.drawBrush_(brushRectsSel);},drawBrush_(brushRectsSel){brushRectsSel.attr('x',d=>this.xScale_(d.min)).attr('y',0).attr('width',d=>this.xScale_(d.max)-this.xScale_(d.min)).attr('height',this.graphHeight).attr('fill','rgb(213, 236, 229)');}};return{ChartBase2DBrushX,};});'use strict';tr.exportTo('tr.ui.b',function(){const ColumnChart=tr.ui.b.define('column-chart',tr.ui.b.ChartBase2DBrushX);ColumnChart.prototype={__proto__:tr.ui.b.ChartBase2DBrushX.prototype,decorate(){super.decorate();this.xCushion_=1;this.isStacked_=false;this.enableHoverBox=true;this.displayXInHover=false;},set isStacked(stacked){this.isStacked_=true;this.updateContents_();},get isStacked(){return this.isStacked_;},get defaultGraphHeight(){return 100;},get defaultGraphWidth(){return 10*this.data_.length;},updateScales_(){if(this.data_.length===0)return;let xDifferences=0;let currentX=undefined;let previousX=undefined;this.data_.forEach(function(datum,index){previousX=currentX;currentX=this.getXForDatum_(datum,index);if(previousX!==undefined){xDifferences+=currentX-previousX;}},this);this.xScale_.range([0,this.graphWidth]);const domain=d3.extent(this.data_,this.getXForDatum_.bind(this));if(this.data_.length>1){this.xCushion_=xDifferences/(this.data_.length-1);}
-this.xScale_.domain([domain[0],domain[1]+this.xCushion_]);this.yScale_.range([this.graphHeight,0]);this.yScale_.domain(this.getYScaleDomain_(this.dataRange.min,this.dataRange.max));},updateDataRange_(){if(!this.isStacked){super.updateDataRange_();return;}
-this.autoDataRange_.reset();this.autoDataRange_.addValue(0);for(const datum of this.data_){let sum=0;for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined){continue;}
-sum+=datum[key];}
-this.autoDataRange_.addValue(sum);}},getStackedRectsForDatum_(datum,index){const stacks=[];let bottom=this.yScale_.range()[0];let sum=0;for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined||!this.isSeriesEnabled(key)){continue;}
-sum+=this.dataRange.clamp(datum[key]);const heightPx=bottom-this.yScale_(sum);bottom-=heightPx;stacks.push({key,value:datum[key],color:this.getDataSeries(key).color,heightPx,topPx:bottom,underflow:sum<this.dataRange.min,overflow:sum>this.dataRange.max,});}
-return stacks;},getRectsForDatum_(datum,index){if(this.isStacked){return this.getStackedRectsForDatum_(datum,index);}
-const stacks=[];for(const[key,series]of this.seriesByKey_){if(datum[key]===undefined||!this.isSeriesEnabled(key)){continue;}
-const clampedValue=this.dataRange.clamp(datum[key]);const topPx=this.yScale_(Math.max(clampedValue,this.getYScaleMin_()));stacks.push({key,value:datum[key],topPx,heightPx:this.yScale_.range()[0]-topPx,color:this.getDataSeries(key).color,underflow:datum[key]<this.dataRange.min,overflow:datum[key]>this.dataRange.max,});}
-stacks.sort(function(a,b){return b.topPx-a.topPx;});return stacks;},drawHoverValueBox_(rect){const rectHoverEvent=new tr.b.Event('rect-mouseenter');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);if(!this.enableHoverBox)return;const seriesKeys=[...this.seriesByKey_.keys()];const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.hover').remove();let keyWidthPx=0;let keyHeightPx=0;if(seriesKeys.length>1){keyWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.key).width+5;keyHeightPx=this.textHeightPx_;}
-let xLabelWidthPx=0;let xLabelHeightPx=0;if(this.displayXInHover){xLabelWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.datum.x).width+5;xLabelHeightPx=this.textHeightPx_;}
-let value=rect.value;if(this.unit)value=this.unit.format(value);const valueWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,value).width+5;const valueHeightPx=this.textHeightPx_;const hoverWidthPx=Math.max(keyWidthPx,valueWidthPx,xLabelWidthPx);let hoverLeftPx=rect.leftPx+(rect.widthPx/2);hoverLeftPx=Math.max(hoverLeftPx-hoverWidthPx,-this.margin.left);const hoverHeightPx=keyHeightPx+valueHeightPx+xLabelHeightPx+2;let hoverTopPx=rect.topPx;hoverTopPx=Math.min(hoverTopPx,this.getBoundingClientRect().height-hoverHeightPx-12);chartAreaSel.append('rect').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill','white').attr('stroke','black').attr('x',hoverLeftPx).attr('y',hoverTopPx).attr('width',hoverWidthPx).attr('height',hoverHeightPx);if(seriesKeys.length>1){chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx-2).text(rect.key);}
-if(this.displayXInHover){chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+xLabelHeightPx-2).text(rect.datum.x);}
-chartAreaSel.append('text').attr('class','hover').on('mouseleave',()=>this.clearHoverValueBox_(rect)).attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+hoverHeightPx-2).text(value);},clearHoverValueBox_(rect){const event=window.event;if(event.relatedTarget&&Array.from(event.relatedTarget.classList).includes('hover')){return;}
-const rectHoverEvent=new tr.b.Event('rect-mouseleave');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);d3.select(this.chartAreaElement).selectAll('.hover').remove();},drawRect_(rect,sel){sel=sel.data([rect]);sel.enter().append('rect').attr('fill',rect.color).attr('x',rect.leftPx).attr('y',rect.topPx).attr('width',rect.widthPx).attr('height',rect.heightPx).on('mouseenter',this.drawHoverValueBox_.bind(this,rect)).on('mouseleave',this.clearHoverValueBox_.bind(this,rect));sel.exit().remove();},drawUnderflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',rect.leftPx+(rect.widthPx/2)).attr('y',this.graphHeight).on('mouseenter',this.drawHoverValueBox_.bind(this,rect)).on('mouseleave',this.clearHoverValueBox_.bind(this,rect));sel.exit().remove();},drawOverflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',rect.leftPx+(rect.widthPx/2)).attr('y',0);sel.exit().remove();},updateDataContents_(dataSel){dataSel.selectAll('*').remove();const chartAreaSel=d3.select(this.chartAreaElement);const seriesKeys=[...this.seriesByKey_.keys()];const rectsSel=dataSel.selectAll('path');this.data_.forEach(function(datum,index){const currentX=this.getXForDatum_(datum,index);let width=undefined;if(index<(this.data_.length-1)){const nextX=this.getXForDatum_(this.data_[index+1],index+1);width=nextX-currentX;}else{width=this.xCushion_;}
-for(const rect of this.getRectsForDatum_(datum,index)){rect.datum=datum;rect.index=index;rect.leftPx=this.xScale_(currentX);rect.rightPx=this.xScale_(currentX+width);rect.widthPx=rect.rightPx-rect.leftPx;this.drawRect_(rect,rectsSel);if(rect.underflow){this.drawUnderflow_(rect,rectsSel);}
-if(rect.overflow){this.drawOverflow_(rect,rectsSel);}}},this);}};return{ColumnChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const LineChart=tr.ui.b.define('line-chart',tr.ui.b.ChartBase2DBrushX);LineChart.prototype={__proto__:tr.ui.b.ChartBase2DBrushX.prototype,decorate(){super.decorate();this.enableHoverBox=true;this.displayXInHover=false;},get defaultGraphWidth(){return 20*this.data_.length;},get defaultGraphHeight(){return 100;},drawHoverValueBox_(circle){tr.ui.b.ColumnChart.prototype.drawHoverValueBox_.call(this,circle);},clearHoverValueBox_(circle){tr.ui.b.ColumnChart.prototype.clearHoverValueBox_.call(this,circle);},updateDataContents_(dataSel){dataSel.selectAll('*').remove();const dataBySeriesKey=this.getDataBySeriesKey_();const seriesKeys=[...this.seriesByKey_.keys()];const pathsSel=dataSel.selectAll('path').data(seriesKeys);pathsSel.enter().append('path').style('fill','none').style('stroke-width','1.5px').style('stroke',key=>this.getDataSeries(key).color).attr('d',key=>{const line=d3.svg.line().x(d=>this.xScale_(d.x)).y(d=>this.yScale_(this.dataRange.clamp(d[key])));return line(dataBySeriesKey[key]);});pathsSel.exit().remove();if(this.enableHoverBox){for(let index=0;index<this.data_.length;++index){const datum=this.data_[index];const x=this.getXForDatum_(datum,index);for(const[key,value]of Object.entries(datum)){if(key==='x')continue;if(value===undefined)continue;const color=this.getDataSeries(key).color;const circle=document.createElementNS('http://www.w3.org/2000/svg','circle');circle.setAttribute('cx',this.xScale_(x));circle.setAttribute('cy',this.yScale_(this.dataRange.clamp(value)));circle.setAttribute('r',5);circle.style.fill=color;circle.datum=datum;circle.key=key;circle.value=datum[key];circle.leftPx=this.xScale_(x);circle.widthPx=0;circle.color=color;circle.topPx=this.yScale_(this.dataRange.clamp(value));circle.heightPx=0;circle.addEventListener('mouseenter',()=>this.drawHoverValueBox_(circle));circle.addEventListener('mouseleave',()=>this.clearHoverValueBox_(circle));dataSel[0][0].appendChild(circle);}}}}};return{LineChart,};});'use strict';Polymer({is:'tr-ui-e-s-input-latency-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.rangeOfInterest_=new tr.b.math.Range();this.frametimeType_=tr.model.helpers.IMPL_FRAMETIME_TYPE;this.latencyChart_=undefined;this.frametimeChart_=undefined;this.selectedProcessId_=undefined;this.mouseDownIndex_=undefined;this.curMouseIndex_=undefined;},get model(){return this.model_;},set model(model){this.model_=model;if(this.model_){this.modelHelper_=this.model_.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);}else{this.modelHelper_=undefined;}
-this.updateToolbar_();this.updateContents_();},get frametimeType(){return this.frametimeType_;},set frametimeType(type){if(this.frametimeType_===type)return;this.frametimeType_=type;this.updateContents_();},get selectedProcessId(){return this.selectedProcessId_;},set selectedProcessId(process){if(this.selectedProcessId_===process)return;this.selectedProcessId_=process;this.updateContents_();},set selection(selection){if(this.latencyChart_===undefined)return;this.latencyChart_.brushedRange=selection.bounds;},setBrushedIndices(mouseDownIndex,curIndex){this.mouseDownIndex_=mouseDownIndex;this.curMouseIndex_=curIndex;this.updateBrushedRange_();},updateBrushedRange_(){if(this.latencyChart_===undefined)return;let r=new tr.b.math.Range();if(this.mouseDownIndex_===undefined){this.latencyChart_.brushedRange=r;return;}
-r=this.latencyChart_.computeBrushRangeFromIndices(this.mouseDownIndex_,this.curMouseIndex_);this.latencyChart_.brushedRange=r;let latencySlices=[];for(const thread of this.model_.getAllThreads()){for(const event of thread.getDescendantEvents()){if(event.title.indexOf('InputLatency:')===0){latencySlices.push(event);}}}
-latencySlices=tr.model.helpers.getSlicesIntersectingRange(r,latencySlices);const event=new tr.model.RequestSelectionChangeEvent();event.selection=new tr.model.EventSet(latencySlices);this.latencyChart_.dispatchEvent(event);},registerMouseEventForLatencyChart_(){this.latencyChart_.addEventListener('item-mousedown',function(e){this.mouseDownIndex_=e.index;this.curMouseIndex_=e.index;this.updateBrushedRange_();}.bind(this));this.latencyChart_.addEventListener('item-mousemove',function(e){if(e.button===undefined)return;this.curMouseIndex_=e.index;this.updateBrushedRange_();}.bind(this));this.latencyChart_.addEventListener('item-mouseup',function(e){this.curMouseIndex=e.index;this.updateBrushedRange_();}.bind(this));},updateToolbar_(){const browserProcess=this.modelHelper_.browserProcess;const labels=[];if(browserProcess!==undefined){const labelStr='Browser: '+browserProcess.pid;labels.push({label:labelStr,value:browserProcess.pid});}
-for(const rendererHelper of
-Object.values(this.modelHelper_.rendererHelpers)){const rendererProcess=rendererHelper.process;const labelStr='Renderer: '+rendererProcess.userFriendlyName;labels.push({label:labelStr,value:rendererProcess.userFriendlyName});}
-if(labels.length===0)return;this.selectedProcessId_=labels[0].value;const toolbarEl=this.$.toolbar;Polymer.dom(toolbarEl).appendChild(tr.ui.b.createSelector(this,'frametimeType','inputLatencySidePanel.frametimeType',this.frametimeType_,[{label:'Main Thread Frame Times',value:tr.model.helpers.MAIN_FRAMETIME_TYPE},{label:'Impl Thread Frame Times',value:tr.model.helpers.IMPL_FRAMETIME_TYPE}]));Polymer.dom(toolbarEl).appendChild(tr.ui.b.createSelector(this,'selectedProcessId','inputLatencySidePanel.selectedProcessId',this.selectedProcessId_,labels));},get currentRangeOfInterest(){if(this.rangeOfInterest_.isEmpty){return this.model_.bounds;}
-return this.rangeOfInterest_;},createLatencyLineChart(data,title,parentNode){const chart=new tr.ui.b.LineChart();Polymer.dom(parentNode).appendChild(chart);let width=600;if(document.body.clientWidth!==undefined){width=document.body.clientWidth*0.5;}
-chart.graphWidth=width;chart.chartTitle=title;chart.data=data;return chart;},updateContents_(){const resultArea=this.$.result_area;this.latencyChart_=undefined;this.frametimeChart_=undefined;Polymer.dom(resultArea).textContent='';if(this.modelHelper_===undefined)return;const rangeOfInterest=this.currentRangeOfInterest;let chromeProcess;if(this.modelHelper_.rendererHelpers[this.selectedProcessId_]){chromeProcess=this.modelHelper_.rendererHelpers[this.selectedProcessId_];}else{chromeProcess=this.modelHelper_.browserHelper;}
-const frameEvents=chromeProcess.getFrameEventsInRange(this.frametimeType,rangeOfInterest);const frametimeData=tr.model.helpers.getFrametimeDataFromEvents(frameEvents);const averageFrametime=tr.b.math.Statistics.mean(frametimeData,d=>d.frametime);const latencyEvents=this.modelHelper_.browserHelper.getLatencyEventsInRange(rangeOfInterest);const latencyData=[];latencyEvents.forEach(function(event){if(event.inputLatency===undefined)return;latencyData.push({x:event.start,latency:event.inputLatency/1000});});const averageLatency=tr.b.math.Statistics.mean(latencyData,function(d){return d.latency;});const latencySummaryText=document.createElement('div');Polymer.dom(latencySummaryText).appendChild(tr.ui.b.createSpan({textContent:'Average Latency '+averageLatency+' ms',bold:true}));Polymer.dom(resultArea).appendChild(latencySummaryText);const frametimeSummaryText=document.createElement('div');Polymer.dom(frametimeSummaryText).appendChild(tr.ui.b.createSpan({textContent:'Average Frame Time '+averageFrametime+' ms',bold:true}));Polymer.dom(resultArea).appendChild(frametimeSummaryText);if(latencyData.length!==0){this.latencyChart_=this.createLatencyLineChart(latencyData,'Latency Over Time',resultArea);this.registerMouseEventForLatencyChart_();}
-if(frametimeData.length!==0){this.frametimeChart_=this.createLatencyLineChart(frametimeData,'Frame Times',resultArea);}},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(rangeOfInterest){this.rangeOfInterest_=rangeOfInterest;this.updateContents_();},supportsModel(m){if(m===undefined){return{supported:false,reason:'Unknown tracing model'};}
-if(!tr.model.helpers.ChromeModelHelper.supportsModel(m)){return{supported:false,reason:'No Chrome browser or renderer process found'};}
-const modelHelper=m.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper.browserHelper&&modelHelper.browserHelper.hasLatencyEvents){return{supported:true};}
-return{supported:false,reason:'No InputLatency events trace. Consider enabling '+'benchmark" and "input" category when recording the trace'};},get textLabel(){return'Input Latency';}});tr.ui.side_panel.SidePanelRegistry.register(function(){return document.createElement('tr-ui-e-s-input-latency-side-panel');});'use strict';tr.exportTo('tr.e.system_stats',function(){const ObjectSnapshot=tr.model.ObjectSnapshot;function SystemStatsSnapshot(objectInstance,ts,args){ObjectSnapshot.apply(this,arguments);this.objectInstance=objectInstance;this.ts=ts;this.args=args;this.stats=args;}
-SystemStatsSnapshot.prototype={__proto__:ObjectSnapshot.prototype,initialize(){if(this.args.length===0){throw new Error('No system stats snapshot data.');}
-this.stats_=this.args;},getStats(){return this.stats_;},setStats(stats){this.stats_=stats;}};ObjectSnapshot.subTypes.register(SystemStatsSnapshot,{typeName:'base::TraceEventSystemStatsMonitor::SystemStats'});return{SystemStatsSnapshot,};});'use strict';tr.exportTo('tr.ui.b',function(){const constants={HEADING_WIDTH:250};return{constants,};});'use strict';Polymer({is:'tr-ui-b-heading',DOWN_ARROW:String.fromCharCode(0x25BE),RIGHT_ARROW:String.fromCharCode(0x25B8),ready(viewport){this.style.width=(tr.ui.b.constants.HEADING_WIDTH-6)+'px';this.heading_='';this.expanded_=true;this.arrowVisible_=false;this.selectionGenerator_=undefined;this.updateContents_();},get heading(){return this.heading_;},set heading(text){if(this.heading_===text)return;this.heading_=text;this.updateContents_();},set arrowVisible(val){if(this.arrowVisible_===val)return;this.arrowVisible_=!!val;this.updateContents_();},set tooltip(text){this.$.heading.title=text;},set selectionGenerator(generator){if(this.selectionGenerator_===generator)return;this.selectionGenerator_=generator;this.updateContents_();},get expanded(){return this.expanded_;},set expanded(expanded){if(this.expanded_===expanded)return;this.expanded_=!!expanded;this.updateContents_();},onHeadingDivClicked_(){this.dispatchEvent(new tr.b.Event('heading-clicked',true));},updateContents_(){if(this.arrowVisible_){this.$.arrow.style.display='';}else{this.$.arrow.style.display='none';this.$.heading.style.display=this.expanded_?'':'none';}
-if(this.arrowVisible_){Polymer.dom(this.$.arrow).textContent=this.expanded_?this.DOWN_ARROW:this.RIGHT_ARROW;}
-this.$.link.style.display='none';this.$.heading_content.style.display='none';if(this.selectionGenerator_){this.$.link.style.display='inline-block';this.$.link.selection=this.selectionGenerator_;Polymer.dom(this.$.link).textContent=this.heading_;}else{this.$.heading_content.style.display='inline-block';Polymer.dom(this.$.heading_content).textContent=this.heading_;}}});'use strict';tr.exportTo('tr.ui.tracks',function(){const Track=tr.ui.b.define('track',tr.ui.b.ContainerThatDecoratesItsChildren);Track.prototype={__proto__:tr.ui.b.ContainerThatDecoratesItsChildren.prototype,decorate(viewport){tr.ui.b.ContainerThatDecoratesItsChildren.prototype.decorate.call(this);if(viewport===undefined){throw new Error('viewport is required when creating a Track.');}
-this.viewport_=viewport;Polymer.dom(this).classList.add('track');},get viewport(){return this.viewport_;},get drawingContainer(){if(this instanceof tr.ui.tracks.DrawingContainer)return this;let cur=this.parentElement;while(cur){if(cur instanceof tr.ui.tracks.DrawingContainer)return cur;cur=cur.parentElement;}
-return undefined;},get eventContainer(){},invalidateDrawingContainer(){const dc=this.drawingContainer;if(dc)dc.invalidate();},context(){if(!Polymer.dom(this).parentNode)return undefined;if(!Polymer.dom(this).parentNode.context){throw new Error('Parent container does not support context() method.');}
-return Polymer.dom(this).parentNode.context();},decorateChild_(childTrack){},undecorateChild_(childTrack){if(childTrack.detach){childTrack.detach();}},updateContents_(){},drawTrack(type){const ctx=this.context();const pixelRatio=window.devicePixelRatio||1;const bounds=this.getBoundingClientRect();const canvasBounds=ctx.canvas.getBoundingClientRect();ctx.save();ctx.translate(0,pixelRatio*(bounds.top-canvasBounds.top));const dt=this.viewport.currentDisplayTransform;const viewLWorld=dt.xViewToWorld(0);const viewRWorld=dt.xViewToWorld(canvasBounds.width*pixelRatio);const viewHeight=bounds.height*pixelRatio;this.draw(type,viewLWorld,viewRWorld,viewHeight);ctx.restore();},draw(type,viewLWorld,viewRWorld,viewHeight){},addEventsToTrackMap(eventToTrackMap){},addContainersToTrackMap(containerToTrackMap){},addIntersectingEventsInRangeToSelection(loVX,hiVX,loVY,hiVY,selection){const pixelRatio=window.devicePixelRatio||1;const dt=this.viewport.currentDisplayTransform;const viewPixWidthWorld=dt.xViewVectorToWorld(1);const loWX=dt.xViewToWorld(loVX*pixelRatio);const hiWX=dt.xViewToWorld(hiVX*pixelRatio);const clientRect=this.getBoundingClientRect();const a=Math.max(loVY,clientRect.top);const b=Math.min(hiVY,clientRect.bottom);if(a>b)return;this.addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection);},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){},addClosestInstantEventToSelection(instantEvents,worldX,worldMaxDist,selection){const instantEvent=tr.b.findClosestElementInSortedArray(instantEvents,function(x){return x.start;},worldX,worldMaxDist);if(!instantEvent)return;selection.push(instantEvent);}};return{Track,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const SelectionState=tr.model.SelectionState;const EventPresenter=tr.ui.b.EventPresenter;const ObjectInstanceTrack=tr.ui.b.define('object-instance-track',tr.ui.tracks.Track);ObjectInstanceTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('object-instance-track');this.objectInstances_=[];this.objectSnapshots_=[];this.heading_=document.createElement('tr-ui-b-heading');Polymer.dom(this).appendChild(this.heading_);},set heading(heading){this.heading_.heading=heading;},get heading(){return this.heading_.heading;},set tooltip(tooltip){this.heading_.tooltip=tooltip;},get objectInstances(){return this.objectInstances_;},set objectInstances(objectInstances){if(!objectInstances||objectInstances.length===0){this.heading='';this.objectInstances_=[];this.objectSnapshots_=[];return;}
-this.heading=objectInstances[0].baseTypeName;this.objectInstances_=objectInstances;this.objectSnapshots_=[];this.objectInstances_.forEach(function(instance){this.objectSnapshots_.push.apply(this.objectSnapshots_,instance.snapshots);},this);this.objectSnapshots_.sort(function(a,b){return a.ts-b.ts;});},get height(){return window.getComputedStyle(this).height;},set height(height){this.style.height=height;},get snapshotRadiusView(){return 7*(window.devicePixelRatio||1);},draw(type,viewLWorld,viewRWorld,viewHeight){switch(type){case tr.ui.tracks.DrawType.GENERAL_EVENT:this.drawObjectInstances_(viewLWorld,viewRWorld);break;}},drawObjectInstances_(viewLWorld,viewRWorld){const ctx=this.context();const pixelRatio=window.devicePixelRatio||1;const bounds=this.getBoundingClientRect();const height=bounds.height*pixelRatio;const halfHeight=height*0.5;const twoPi=Math.PI*2;const dt=this.viewport.currentDisplayTransform;const snapshotRadiusView=this.snapshotRadiusView;const snapshotRadiusWorld=dt.xViewVectorToWorld(height);const objectInstances=this.objectInstances_;let loI=tr.b.findLowIndexInSortedArray(objectInstances,function(instance){return instance.deletionTs;},viewLWorld);ctx.save();ctx.strokeStyle='rgb(0,0,0)';for(let i=loI;i<objectInstances.length;++i){const instance=objectInstances[i];const x=instance.creationTs;if(x>viewRWorld)break;const right=instance.deletionTs===Number.MAX_VALUE?viewRWorld:instance.deletionTs;const xView=dt.xWorldToView(x);const widthView=dt.xWorldVectorToView(right-x);ctx.fillStyle=EventPresenter.getObjectInstanceColor(instance);ctx.fillRect(xView,pixelRatio,widthView,height-2*pixelRatio);}
-ctx.restore();const objectSnapshots=this.objectSnapshots_;loI=tr.b.findLowIndexInSortedArray(objectSnapshots,function(snapshot){return snapshot.ts+snapshotRadiusWorld;},viewLWorld);for(let i=loI;i<objectSnapshots.length;++i){const snapshot=objectSnapshots[i];const x=snapshot.ts;if(x-snapshotRadiusWorld>viewRWorld)break;const xView=dt.xWorldToView(x);ctx.fillStyle=EventPresenter.getObjectSnapshotColor(snapshot);ctx.beginPath();ctx.arc(xView,halfHeight,snapshotRadiusView,0,twoPi);ctx.fill();if(snapshot.selected){ctx.lineWidth=5;ctx.strokeStyle='rgb(100,100,0)';ctx.stroke();ctx.beginPath();ctx.arc(xView,halfHeight,snapshotRadiusView-1,0,twoPi);ctx.lineWidth=2;ctx.strokeStyle='rgb(255,255,0)';ctx.stroke();}else{ctx.lineWidth=1;ctx.strokeStyle='rgb(0,0,0)';ctx.stroke();}}
-ctx.lineWidth=1;let selectionState=SelectionState.NONE;if(objectInstances.length&&objectInstances[0].selectionState===SelectionState.DIMMED){selectionState=SelectionState.DIMMED;}
-if(selectionState===SelectionState.DIMMED){const width=bounds.width*pixelRatio;ctx.fillStyle='rgba(255,255,255,0.5)';ctx.fillRect(0,0,width,height);ctx.restore();}},addEventsToTrackMap(eventToTrackMap){if(this.objectInstance_!==undefined){this.objectInstance_.forEach(function(obj){eventToTrackMap.addEvent(obj,this);},this);}
-if(this.objectSnapshots_!==undefined){this.objectSnapshots_.forEach(function(obj){eventToTrackMap.addEvent(obj,this);},this);}},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){let foundSnapshot=false;function onSnapshot(snapshot){selection.push(snapshot);foundSnapshot=true;}
-const snapshotRadiusView=this.snapshotRadiusView;const snapshotRadiusWorld=viewPixWidthWorld*snapshotRadiusView;tr.b.iterateOverIntersectingIntervals(this.objectSnapshots_,function(x){return x.ts-snapshotRadiusWorld;},function(x){return 2*snapshotRadiusWorld;},loWX,hiWX,onSnapshot);if(foundSnapshot)return;tr.b.iterateOverIntersectingIntervals(this.objectInstances_,function(x){return x.creationTs;},function(x){return x.deletionTs-x.creationTs;},loWX,hiWX,(value)=>{selection.push(value);});},addEventNearToProvidedEventToSelection(event,offset,selection){let events;if(event instanceof tr.model.ObjectSnapshot){events=this.objectSnapshots_;}else if(event instanceof tr.model.ObjectInstance){events=this.objectInstances_;}else{throw new Error('Unrecognized event');}
-const index=events.indexOf(event);const newIndex=index+offset;if(newIndex>=0&&newIndex<events.length){selection.push(events[newIndex]);return true;}
-return false;},addAllEventsMatchingFilterToSelection(filter,selection){},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){const snapshot=tr.b.findClosestElementInSortedArray(this.objectSnapshots_,function(x){return x.ts;},worldX,worldMaxDist);if(!snapshot)return;selection.push(snapshot);}};const options=new tr.b.ExtensionRegistryOptions(tr.b.TYPE_BASED_REGISTRY_MODE);tr.b.decorateExtensionRegistry(ObjectInstanceTrack,options);return{ObjectInstanceTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const StackedBarsTrack=tr.ui.b.define('stacked-bars-track',tr.ui.tracks.Track);StackedBarsTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('stacked-bars-track');this.objectInstance_=null;this.heading_=document.createElement('tr-ui-b-heading');Polymer.dom(this).appendChild(this.heading_);},set heading(heading){this.heading_.heading=heading;},get heading(){return this.heading_.heading;},set tooltip(tooltip){this.heading_.tooltip=tooltip;},addEventsToTrackMap(eventToTrackMap){const objectSnapshots=this.objectInstance_.snapshots;objectSnapshots.forEach(function(obj){eventToTrackMap.addEvent(obj,this);},this);},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){function onSnapshot(snapshot){selection.push(snapshot);}
-const snapshots=this.objectInstance_.snapshots;const maxBounds=this.objectInstance_.parent.model.bounds.max;tr.b.iterateOverIntersectingIntervals(snapshots,function(x){return x.ts;},function(x,i){if(i===snapshots.length-1){if(snapshots.length===1){return maxBounds;}
-return snapshots[i].ts-snapshots[i-1].ts;}
-return snapshots[i+1].ts-snapshots[i].ts;},loWX,hiWX,onSnapshot);},addEventNearToProvidedEventToSelection(event,offset,selection){if(!(event instanceof tr.model.ObjectSnapshot)){throw new Error('Unrecognized event');}
-const objectSnapshots=this.objectInstance_.snapshots;const index=objectSnapshots.indexOf(event);const newIndex=index+offset;if(newIndex>=0&&newIndex<objectSnapshots.length){selection.push(objectSnapshots[newIndex]);return true;}
-return false;},addAllEventsMatchingFilterToSelection(filter,selection){},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){const snapshot=tr.b.findClosestElementInSortedArray(this.objectInstance_.snapshots,function(x){return x.ts;},worldX,worldMaxDist);if(!snapshot)return;selection.push(snapshot);}};return{StackedBarsTrack,};});'use strict';tr.exportTo('tr.ui.e.system_stats',function(){const EventPresenter=tr.ui.b.EventPresenter;let statCount;const excludedStats={'meminfo':{'pswpin':0,'pswpout':0,'pgmajfault':0},'diskinfo':{'io':0,'io_time':0,'read_time':0,'reads':0,'reads_merged':0,'sectors_read':0,'sectors_written':0,'weighted_io_time':0,'write_time':0,'writes':0,'writes_merged':0},'swapinfo':{}};const SystemStatsInstanceTrack=tr.ui.b.define('tr-ui-e-system-stats-instance-track',tr.ui.tracks.StackedBarsTrack);SystemStatsInstanceTrack.prototype={__proto__:tr.ui.tracks.StackedBarsTrack.prototype,decorate(viewport){tr.ui.tracks.StackedBarsTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('tr-ui-e-system-stats-instance-track');this.objectInstance_=null;},set objectInstances(objectInstances){if(!objectInstances){this.objectInstance_=[];return;}
-if(objectInstances.length!==1){throw new Error('Bad object instance count.');}
-this.objectInstance_=objectInstances[0];if(this.objectInstance_!==null){this.computeRates_(this.objectInstance_.snapshots);this.maxStats_=this.computeMaxStats_(this.objectInstance_.snapshots);}},computeRates_(snapshots){for(let i=0;i<snapshots.length;i++){const snapshot=snapshots[i];const stats=snapshot.getStats();let prevSnapshot;if(i===0){prevSnapshot=snapshots[0];}else{prevSnapshot=snapshots[i-1];}
-const prevStats=prevSnapshot.getStats();let timeIntervalSeconds=(snapshot.ts-prevSnapshot.ts)/1000;if(timeIntervalSeconds===0){timeIntervalSeconds=1;}
-this.computeRatesRecursive_(prevStats,stats,timeIntervalSeconds);}},computeRatesRecursive_(prevStats,stats,timeIntervalSeconds){for(const statName in stats){if(stats[statName]instanceof Object){this.computeRatesRecursive_(prevStats[statName],stats[statName],timeIntervalSeconds);}else{if(statName==='sectors_read'){stats.bytes_read_per_sec=(stats.sectors_read-
-prevStats.sectors_read)*512/timeIntervalSeconds;}
-if(statName==='sectors_written'){stats.bytes_written_per_sec=(stats.sectors_written-
-prevStats.sectors_written)*512/timeIntervalSeconds;}
-if(statName==='pgmajfault'){stats.pgmajfault_per_sec=(stats.pgmajfault-
-prevStats.pgmajfault)/timeIntervalSeconds;}
-if(statName==='pswpin'){stats.bytes_swpin_per_sec=(stats.pswpin-
-prevStats.pswpin)*1000/timeIntervalSeconds;}
-if(statName==='pswpout'){stats.bytes_swpout_per_sec=(stats.pswpout-
-prevStats.pswpout)*1000/timeIntervalSeconds;}}}},computeMaxStats_(snapshots){const maxStats={};statCount=0;for(let i=0;i<snapshots.length;i++){const snapshot=snapshots[i];const stats=snapshot.getStats();this.computeMaxStatsRecursive_(stats,maxStats,excludedStats);}
-return maxStats;},computeMaxStatsRecursive_(stats,maxStats,excludedStats){for(const statName in stats){if(stats[statName]instanceof Object){if(!(statName in maxStats)){maxStats[statName]={};}
-let excludedNested;if(excludedStats&&statName in excludedStats){excludedNested=excludedStats[statName];}else{excludedNested=null;}
-this.computeMaxStatsRecursive_(stats[statName],maxStats[statName],excludedNested);}else{if(excludedStats&&statName in excludedStats){continue;}
-if(!(statName in maxStats)){maxStats[statName]=0;statCount++;}
-if(stats[statName]>maxStats[statName]){maxStats[statName]=stats[statName];}}}},get height(){return window.getComputedStyle(this).height;},set height(height){this.style.height=height;},draw(type,viewLWorld,viewRWorld,viewHeight){switch(type){case tr.ui.tracks.DrawType.GENERAL_EVENT:this.drawStatBars_(viewLWorld,viewRWorld);break;}},drawStatBars_(viewLWorld,viewRWorld){const ctx=this.context();const pixelRatio=window.devicePixelRatio||1;const bounds=this.getBoundingClientRect();const width=bounds.width*pixelRatio;const height=(bounds.height*pixelRatio)/statCount;const vp=this.viewport.currentDisplayTransform;const maxStats=this.maxStats_;const objectSnapshots=this.objectInstance_.snapshots;let lowIndex=tr.b.findLowIndexInSortedArray(objectSnapshots,function(snapshot){return snapshot.ts;},viewLWorld);if(lowIndex>0)lowIndex-=1;for(let i=lowIndex;i<objectSnapshots.length;++i){const snapshot=objectSnapshots[i];const trace=snapshot.getStats();const currentY=height;const left=snapshot.ts;if(left>viewRWorld)break;let leftView=vp.xWorldToView(left);if(leftView<0)leftView=0;let right;if(i!==objectSnapshots.length-1){right=objectSnapshots[i+1].ts;}else{if(objectSnapshots.length>1){right=objectSnapshots[i].ts+(objectSnapshots[i].ts-
-objectSnapshots[i-1].ts);}else{right=this.objectInstance_.parent.model.bounds.max;}}
-let rightView=vp.xWorldToView(right);if(rightView>width){rightView=width;}
-leftView=Math.floor(leftView);rightView=Math.floor(rightView);this.drawStatBarsRecursive_(snapshot,leftView,rightView,height,trace,maxStats,currentY);if(i===lowIndex){this.drawStatNames_(leftView,height,currentY,'',maxStats);}}
-ctx.lineWidth=1;},drawStatBarsRecursive_(snapshot,leftView,rightView,height,stats,maxStats,currentY){const ctx=this.context();for(const statName in maxStats){if(stats[statName]instanceof Object){currentY=this.drawStatBarsRecursive_(snapshot,leftView,rightView,height,stats[statName],maxStats[statName],currentY);}else{const maxStat=maxStats[statName];ctx.fillStyle=EventPresenter.getBarSnapshotColor(snapshot,Math.round(currentY/height));let barHeight;if(maxStat>0){barHeight=height*Math.max(stats[statName],0)/maxStat;}else{barHeight=0;}
-ctx.fillRect(leftView,currentY-barHeight,Math.max(rightView-leftView,1),barHeight);currentY+=height;}}
-return currentY;},drawStatNames_(leftView,height,currentY,prefix,maxStats){const ctx=this.context();ctx.textAlign='end';ctx.font='12px Arial';ctx.fillStyle='#000000';for(const statName in maxStats){if(maxStats[statName]instanceof Object){currentY=this.drawStatNames_(leftView,height,currentY,statName,maxStats[statName]);}else{let fullname=statName;if(prefix!==''){fullname=prefix+' :: '+statName;}
-ctx.fillText(fullname,leftView-10,currentY-height/4);currentY+=height;}}
-return currentY;}};tr.ui.tracks.ObjectInstanceTrack.register(SystemStatsInstanceTrack,{typeName:'base::TraceEventSystemStatsMonitor::SystemStats'});return{SystemStatsInstanceTrack,};});'use strict';tr.exportTo('tr.ui.e.system_stats',function(){const SystemStatsSnapshotView=tr.ui.b.define('tr-ui-e-system-stats-snapshot-view',tr.ui.analysis.ObjectSnapshotView);SystemStatsSnapshotView.prototype={__proto__:tr.ui.analysis.ObjectSnapshotView.prototype,decorate(){Polymer.dom(this).classList.add('tr-ui-e-system-stats-snapshot-view');},updateContents(){const snapshot=this.objectSnapshot_;if(!snapshot||!snapshot.getStats()){Polymer.dom(this).textContent='No system stats snapshot found.';return;}
-Polymer.dom(this).textContent='';const stats=snapshot.getStats();Polymer.dom(this).appendChild(this.buildList_(stats));},isFloat(n){return typeof n==='number'&&n%1!==0;},buildList_(stats){const statList=document.createElement('ul');for(const statName in stats){const statText=document.createElement('li');Polymer.dom(statText).textContent=''+statName+': ';Polymer.dom(statList).appendChild(statText);if(stats[statName]instanceof Object){Polymer.dom(statList).appendChild(this.buildList_(stats[statName]));}else{if(this.isFloat(stats[statName])){Polymer.dom(statText).textContent+=stats[statName].toFixed(2);}else{Polymer.dom(statText).textContent+=stats[statName];}}}
-return statList;}};tr.ui.analysis.ObjectSnapshotView.register(SystemStatsSnapshotView,{typeName:'base::TraceEventSystemStatsMonitor::SystemStats'});return{SystemStatsSnapshotView,};});'use strict';tr.exportTo('tr.ui.e.v8',function(){const IGNORED_ENTRIES={match:full=>full.startsWith('*CODE_AGE_')};const INSTANCE_TYPE_GROUPS={FIXED_ARRAY_TYPE:{match:full=>full.startsWith('*FIXED_ARRAY_'),realEntry:'FIXED_ARRAY_TYPE',keyToName:key=>key.slice('*FIXED_ARRAY_'.length).slice(0,-('_SUB_TYPE'.length)),nameToKey:name=>'*FIXED_ARRAY_'+name+'_SUB_TYPE'},CODE_TYPE:{match:full=>full.startsWith('*CODE_'),realEntry:'CODE_TYPE',keyToName:key=>key.slice('*CODE_'.length),nameToKey:name=>'*CODE_'+name},JS_OBJECTS:{match:full=>full.startsWith('JS_'),keyToName:key=>key,nameToKey:name=>name},Strings:{match:full=>full.endsWith('STRING_TYPE'),keyToName:key=>key,nameToKey:name=>name}};const DIFF_COLOR={GREEN:'#64DD17',RED:'#D50000'};function computePercentage(valueA,valueB){if(valueA===0)return 0;return valueA/valueB*100;}
-class DiffEntry{constructor(originalEntry,diffEntry){this.originalEntry_=originalEntry;this.diffEntry_=diffEntry;}
-get title(){return this.diffEntry_.title;}
-get overall(){return this.diffEntry_.overall;}
-get overAllocated(){return this.diffEntry_.overAllocated;}
-get count(){return this.diffEntry_.count;}
-get overallPercent(){return this.diffEntry_.overallPercent;}
-get overAllocatedPercent(){return this.diffEntry_.overAllocatedPercent;}
-get origin(){return this.originalEntry_;}
-get diff(){return this.diffEntry_;}
-get subRows(){return this.diffEntry_.subRows;}}
-class Entry{constructor(title,count,overall,overAllocated,histogram,overAllocatedHistogram){this.title_=title;this.overall_=overall;this.count_=count;this.overAllocated_=overAllocated;this.histogram_=histogram;this.overAllocatedHistogram_=overAllocatedHistogram;this.bucketSize_=this.histogram_.length;this.overallPercent_=100;this.overAllocatedPercent_=100;}
-get title(){return this.title_;}
-get overall(){return this.overall_;}
-get count(){return this.count_;}
-get overAllocated(){return this.overAllocated_;}
-get histogram(){return this.histogram_;}
-get overAllocatedHistogram(){return this.overAllocatedHistogram_;}
-get bucketSize(){return this.bucketSize_;}
-get overallPercent(){return this.overallPercent_;}
-set overallPercent(value){this.overallPercent_=value;}
-get overAllocatedPercent(){return this.overAllocatedPercent_;}
-set overAllocatedPercent(value){this.overAllocatedPercent_=value;}
-setFromObject(obj){this.count_=obj.count;this.overall_=obj.overall/1024;this.overAllocated_=obj.over_allocated/1024;this.histogram_=obj.histogram;this.overAllocatedHistogram_=obj.over_allocated_histogram;}
-diff(other){const entry=new Entry(this.title_,other.count_-this.count,other.overall_-this.overall,other.overAllocated_-this.overAllocated,[],[]);entry.overallPercent=computePercentage(entry.overall,this.overall);entry.overAllocatedPercent=computePercentage(entry.overAllocated,this.overAllocated);return new DiffEntry(this,entry);}}
-class GroupedEntry extends Entry{constructor(title,count,overall,overAllocated,histogram,overAllocatedHistogram){super(title,count,overall,overAllocated,histogram,overAllocatedHistogram);this.histogram_.fill(0);this.overAllocatedHistogram_.fill(0);this.entries_=new Map();}
-get title(){return this.title_;}
-set title(value){this.title_=value;}
-get subRows(){return Array.from(this.entries_.values());}
-getEntryFromTitle(title){return this.entries_.get(title);}
-add(entry){this.count_+=entry.count;this.overall_+=entry.overall;this.overAllocated_+=entry.overAllocated;if(this.bucketSize_===entry.bucketSize){for(let i=0;i<this.bucketSize_;++i){this.histogram_[i]+=entry.histogram[i];this.overAllocatedHistogram_[i]+=entry.overAllocatedHistogram[i];}}
-this.entries_.set(entry.title,entry);}
-accumulateUnknown(title){let unknownCount=this.count_;let unknownOverall=this.overall_;let unknownOverAllocated=this.overAllocated_;const unknownHistogram=tr.b.deepCopy(this.histogram_);const unknownOverAllocatedHistogram=tr.b.deepCopy(this.overAllocatedHistogram_);for(const entry of this.entries_.values()){unknownCount-=entry.count;unknownOverall-=entry.overall;unknownOverAllocated-=entry.overAllocated;for(let i=0;i<this.bucketSize_;++i){unknownHistogram[i]-=entry.histogram[i];unknownOverAllocatedHistogram[i]-=entry.overAllocatedHistogram[i];}}
-unknownOverAllocated=unknownOverAllocated<0?0:unknownOverAllocated;this.entries_.set(title,new Entry(title,unknownCount,unknownOverall,unknownOverAllocated,unknownHistogram,unknownOverAllocatedHistogram));}
-calculatePercentage(){for(const entry of this.entries_.values()){entry.overallPercent=computePercentage(entry.overall,this.overall_);entry.overAllocatedPercent=computePercentage(entry.overAllocated,this.overAllocated_);if(entry instanceof GroupedEntry)entry.calculatePercentage();}}
-diff(other){let newTitle='';if(this.title_.startsWith('Isolate')){newTitle='Total';}else{newTitle=this.title_;}
-const result=new GroupedEntry(newTitle,0,0,0,[],[]);for(const entry of this.entries_){const otherEntry=other.getEntryFromTitle(entry[0]);if(otherEntry===undefined)continue;result.add(entry[1].diff(otherEntry));}
-result.overallPercent=computePercentage(result.overall,this.overall);result.overAllocatedPercent=computePercentage(result.overAllocated,this.overAllocated);return new DiffEntry(this,result);}}
-function createSelector(targetEl,defaultValue,items,callback){const selectorEl=document.createElement('select');selectorEl.addEventListener('change',callback.bind(targetEl));const defaultOptionEl=document.createElement('option');for(let i=0;i<items.length;i++){const item=items[i];const optionEl=document.createElement('option');Polymer.dom(optionEl).textContent=item.label;optionEl.targetPropertyValue=item.value;optionEl.item=item;Polymer.dom(selectorEl).appendChild(optionEl);}
-selectorEl.__defineGetter__('selectedValue',function(v){if(selectorEl.children[selectorEl.selectedIndex]===undefined){return undefined;}
-return selectorEl.children[selectorEl.selectedIndex].targetPropertyValue;});selectorEl.__defineGetter__('selectedItem',function(v){if(selectorEl.children[selectorEl.selectedIndex]===undefined){return undefined;}
-return selectorEl.children[selectorEl.selectedIndex].item;});selectorEl.__defineSetter__('selectedValue',function(v){for(let i=0;i<selectorEl.children.length;i++){const value=selectorEl.children[i].targetPropertyValue;if(value===v){const changed=selectorEl.selectedIndex!==i;if(changed){selectorEl.selectedIndex=i;callback();}
-return;}}
-throw new Error('Not a valid value');});selectorEl.selectedIndex=-1;return selectorEl;}
-function plusMinus(value,toFixed=3){return(value>0?'+':'')+value.toFixed(toFixed);}
-function addArrow(value){if(value===0)return value;if(value===Number.NEGATIVE_INFINITY)return'\u2193\u221E';if(value===Number.POSITIVE_INFINITY)return'\u2191\u221E';return(value>0?'\u2191':'\u2193')+Math.abs(value.toFixed(3));}
-Polymer({is:'tr-ui-e-v8-gc-objects-stats-table',ready(){this.$.diffOption.style.display='none';this.isolateEntries_=[];this.selector1_=undefined;this.selector2_=undefined;},constructDiffTable_(table){this.$.diffTable.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;this.$.diffTable.tableColumns=[{title:'Component',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.title;return typeEl;},showExpandButtons:true},{title:'Overall Memory(KB)',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=row.origin.overall.toFixed(3);return spanEl;},cmp(a,b){return a.origin.overall-b.origin.overall;}},{title:'diff(KB)',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=plusMinus(row.overall);if(row.overall>0){spanEl.style.color=DIFF_COLOR.RED;}else if(row.overall<0){spanEl.style.color=DIFF_COLOR.GREEN;}
-return spanEl;},cmp(a,b){return a.overall-b.overall;}},{title:'diff(%)',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=addArrow(row.overallPercent);if(row.overall>0){spanEl.style.color=DIFF_COLOR.RED;}else if(row.overall<0){spanEl.style.color=DIFF_COLOR.GREEN;}
-return spanEl;},cmp(a,b){return a.overall-b.overall;}},{title:'Over Allocated Memory(KB)',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=row.origin.overAllocated.toFixed(3);return spanEl;},cmp(a,b){return a.origin.overAllocated-b.origin.overAllocated;}},{title:'diff(KB)',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=plusMinus(row.overAllocated);if(row.overAllocated>0){spanEl.style.color=DIFF_COLOR.RED;}else if(row.overAllocated<0){spanEl.style.color=DIFF_COLOR.GREEN;}
-return spanEl;},cmp(a,b){return a.overAllocated-b.overAllocated;}},{title:'diff(%)',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=addArrow(row.overAllocatedPercent);if(row.overAllocated>0){spanEl.style.color=DIFF_COLOR.RED;}else if(row.overAllocated<0){spanEl.style.color=DIFF_COLOR.GREEN;}
-return spanEl;},cmp(a,b){return a.overAllocated-b.overAllocated;}},{title:'Count',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=row.origin.count;return spanEl;},cmp(a,b){return a.origin.count-b.origin.count;}},{title:'diff',value(row){const spanEl=tr.ui.b.createSpan();spanEl.innerText=plusMinus(row.count,0);if(row.count>0){spanEl.style.color=DIFF_COLOR.RED;}else if(row.count<0){spanEl.style.color=DIFF_COLOR.GREEN;}
-return spanEl;},cmp(a,b){return a.count-b.count;}},];},buildOptions_(){const items=[];for(const isolateEntry of this.isolateEntries_){items.push({label:isolateEntry.title,value:isolateEntry});}
-this.$.diffOption.style.display='inline-block';this.selector1_=createSelector(this,'',items,this.diffOptionChanged_);Polymer.dom(this.$.diffOption).appendChild(this.selector1_);const spanEl=tr.ui.b.createSpan();spanEl.innerText=' VS ';Polymer.dom(this.$.diffOption).appendChild(spanEl);this.selector2_=createSelector(this,'',items,this.diffOptionChanged_);Polymer.dom(this.$.diffOption).appendChild(this.selector2_);},diffOptionChanged_(){const isolateEntry1=this.selector1_.selectedValue;const isolateEntry2=this.selector2_.selectedValue;if(isolateEntry1===undefined||isolateEntry2===undefined){return;}
-if(isolateEntry1===isolateEntry2){this.$.diffTable.tableRows=[];this.$.diffTable.rebuild();return;}
-this.$.diffTable.tableRows=[isolateEntry1.diff(isolateEntry2)];this.$.diffTable.rebuild();},constructTable_(){this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;this.$.table.tableColumns=[{title:'Component',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.title;return typeEl;},showExpandButtons:true},{title:'Overall Memory (KB)',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.overall.toFixed(3);return typeEl;},cmp(a,b){return a.overall-b.overall;}},{title:'Over Allocated Memory (KB)',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.overAllocated.toFixed(3);return typeEl;},cmp(a,b){return a.overAllocated-b.overAllocated;}},{title:'Overall Count',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.count;return typeEl;},cmp(a,b){return a.count-b.count;}},{title:'Overall Memory Percent',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.overallPercent.toFixed(3)+'%';return typeEl;},cmp(a,b){return a.overall-b.overall;}},{title:'Overall Allocated Memory Percent',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.overAllocatedPercent.toFixed(3)+'%';return typeEl;},cmp(a,b){return a.overAllocated-b.overAllocated;}}];this.$.table.sortColumnIndex=1;this.$.table.sortDescending=true;},buildSubEntry_(objects,groupEntry,keyToName){const typeGroup=INSTANCE_TYPE_GROUPS[groupEntry.title];for(const instanceType of typeGroup){const e=objects[instanceType];if(e===undefined)continue;delete objects[instanceType];let title=instanceType;if(keyToName!==undefined)title=keyToName(title);groupEntry.add(new Entry(title,e.count,e.overall/1024,e.over_allocated/1024,e.histogram,e.over_allocated_histogram));}},buildUnGroupedEntries_(objects,objectEntry,bucketSize){for(const title of Object.getOwnPropertyNames(objects)){const obj=objects[title];const groupedEntry=new GroupedEntry(title,0,0,0,new Array(bucketSize),new Array(bucketSize));groupedEntry.setFromObject(obj);objectEntry.add(groupedEntry);}},createGroupEntries_(groupEntries,objects,bucketSize){for(const groupName of Object.getOwnPropertyNames(INSTANCE_TYPE_GROUPS)){const groupEntry=new GroupedEntry(groupName,0,0,0,new Array(bucketSize),new Array(bucketSize));if(INSTANCE_TYPE_GROUPS[groupName].realEntry!==undefined){groupEntry.savedRealEntry=objects[INSTANCE_TYPE_GROUPS[groupName].realEntry];delete objects[INSTANCE_TYPE_GROUPS[groupName].realEntry];}
-groupEntries[groupName]=groupEntry;}},buildGroupEntries_(groupEntries,objectEntry){for(const groupName of Object.getOwnPropertyNames(groupEntries)){const groupEntry=groupEntries[groupName];if(groupEntry.savedRealEntry!==undefined){groupEntry.setFromObject(groupEntry.savedRealEntry);groupEntry.accumulateUnknown('UNKNOWN');delete groupEntry.savedRealEntry;}
-objectEntry.add(groupEntry);}},buildSubEntriesForGroups_(groupEntries,objects){for(const instanceType of Object.getOwnPropertyNames(objects)){if(IGNORED_ENTRIES.match(instanceType)){delete objects[instanceType];continue;}
-const e=objects[instanceType];for(const name of Object.getOwnPropertyNames(INSTANCE_TYPE_GROUPS)){const group=INSTANCE_TYPE_GROUPS[name];if(group.match(instanceType)){groupEntries[name].add(new Entry(group.keyToName(instanceType),e.count,e.overall/1024,e.over_allocated/1024,e.histogram,e.over_allocated_histogram));delete objects[instanceType];}}}},build_(objects,objectEntry,bucketSize){delete objects.END;const groupEntries={};this.createGroupEntries_(groupEntries,objects,bucketSize);this.buildSubEntriesForGroups_(groupEntries,objects);this.buildGroupEntries_(groupEntries,objectEntry);this.buildUnGroupedEntries_(objects,objectEntry,bucketSize);},set selection(slices){slices.sortEvents(function(a,b){return b.start-a.start;});const previous=undefined;for(const slice of slices){if(!slice instanceof tr.e.v8.V8GCStatsThreadSlice)continue;const liveObjects=slice.liveObjects;const deadObjects=slice.deadObjects;const isolate=liveObjects.isolate;const isolateEntry=new GroupedEntry('Isolate_'+isolate+' at '+slice.start.toFixed(3)+' ms',0,0,0,[],[]);const liveEntry=new GroupedEntry('live objects',0,0,0,[],[]);const deadEntry=new GroupedEntry('dead objects',0,0,0,[],[]);const liveBucketSize=liveObjects.bucket_sizes.length;const deadBucketSize=deadObjects.bucket_sizes.length;this.build_(tr.b.deepCopy(liveObjects.type_data),liveEntry,liveBucketSize);isolateEntry.add(liveEntry);this.build_(tr.b.deepCopy(deadObjects.type_data),deadEntry,deadBucketSize);isolateEntry.add(deadEntry);isolateEntry.calculatePercentage();this.isolateEntries_.push(isolateEntry);}
-this.updateTable_();if(slices.length>1){this.buildOptions_();this.constructDiffTable_();}},updateTable_(){this.constructTable_();this.$.table.tableRows=this.isolateEntries_;this.$.table.rebuild();},});return{};});'use strict';Polymer({is:'tr-ui-e-multi-v8-gc-stats-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.gcObjectsStats.selection=selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-e-multi-v8-gc-stats-thread-slice-sub-view',tr.e.v8.V8GCStatsThreadSlice,{multi:true,title:'V8 GC Stats slices'});'use strict';tr.exportTo('tr.e.v8',function(){const IC_STATS_PROPERTIES=['type','category','scriptName','filePosition','state','isNative','map','propertiesMode','numberOfOwnProperties','instanceType'];class ICStatsEntry{constructor(obj){this.type_=obj.type;if(this.type_.includes('Store')){this.category_='Store';}else if(this.type_.includes('Load')){this.category_='Load';}
-this.state_=obj.state;if(obj.functionName){this.functionName_=obj.optimized?'*':'~';this.functionName_+=obj.functionName.length===0?'(anonymous function)':obj.functionName;}
-this.offset_=obj.offset;this.scriptName_=obj.scriptName?obj.scriptName:'unknown';this.isNative_=obj.scriptName&&obj.scriptName.includes('native');this.lineNum_=obj.lineNum?obj.lineNum:'unknown';this.filePosition_=this.scriptName_+':'+this.lineNum_;if(this.functionName_){this.filePosition_+=' '+this.functionName_+'+'+this.offset_;}
-this.constructor_=obj.constructor?false:true;this.map_=obj.map;if(this.map_){this.propertiesMode_=obj.dict===0?'slow':'fast';}else{this.propertiesMode_='unknown';}
-this.numberOfOwnProperties_=obj.own;this.instanceType_=obj.instanceType;this.key_=obj.key;}
-get type(){return this.type_;}
-get category(){return this.category_;}
-get state(){return this.state_;}
-get functionName(){return this.functionName_;}
-get offset(){return this.offset_;}
-get scriptName(){return this.scriptName_;}
-get isNative(){return this.isNative_;}
-get lineNumber(){return this.lineNum_;}
-get isConstructor(){return this.constructor_;}
-get map(){return this.map_;}
-get propertiesMode(){return this.propertiesMode_;}
-get numberOfOwnProperties(){return this.numberOfOwnProperties_;}
-get instanceType(){return this.instanceType_;}
-get filePosition(){return this.filePosition_;}}
-class ICStatsEntryGroup{constructor(property,key){this.property_=property;this.key_=key;this.percentage_=0;this.entries_=[];this.subGroup_=undefined;}
-static groupBy(groups,entries,property){for(const entry of entries){const key=entry[property];let group=groups.get(key);if(!group){group=new ICStatsEntryGroup(property,key);groups.set(key,group);}
-group.add(entry);}
-for(const group of groups.values()){group.percentage=group.length/entries.length;}}
-add(entry){this.entries_.push(entry);}
-createSubGroup(){if(this.subGroup_)return this.subGroup_;this.subGroup_=new Map();for(const property of IC_STATS_PROPERTIES){if(property===this.property_)continue;const groups=new Map();this.subGroup_.set(property,groups);ICStatsEntryGroup.groupBy(groups,this.entries_,property);}
-return this.subGroup_;}
-get entries(){return this.entries_;}
-get key(){return this.key_;}
-get length(){return this.entries_.length;}
-get percentage(){return this.percentage_;}
-set percentage(value){this.percentage_=value;}}
-class ICStatsCollection{constructor(){this.entries_=[];this.groupedEntries_=new Map();}
-add(entry){this.entries_.push(entry);}
-groupBy(property){if(this.groupedEntries_.has(property)){return Array.from(this.groupedEntries_.get(property).values());}
-const groups=new Map();this.groupedEntries_.set(property,groups);ICStatsEntryGroup.groupBy(groups,this.entries_,property);return Array.from(groups.values());}
-get entries(){return this.entries_;}
-get length(){return this.entries_.length;}}
-return{IC_STATS_PROPERTIES,ICStatsEntry,ICStatsEntryGroup,ICStatsCollection,};});'use strict';tr.exportTo('tr.ui.e.v8',function(){const PROPERTIES=tr.e.v8.IC_STATS_PROPERTIES.map(x=>{return{label:x,value:x};});const ICStatsEntry=tr.e.v8.ICStatsEntry;const ICStatsEntryGroup=tr.e.v8.ICStatsEntryGroup;const ICStatsCollection=tr.e.v8.ICStatsCollection;Polymer({is:'tr-ui-e-v8-ic-stats-table',ready(){this.icStatsCollection_=new ICStatsCollection();this.groupKey_=PROPERTIES[0].value;this.selector_=tr.ui.b.createSelector(this,'groupKey','v8ICStatsGroupKey',this.groupKey_,PROPERTIES);Polymer.dom(this.$.groupOption).appendChild(this.selector_);},get groupKey(){return this.groupKey_;},set groupKey(key){this.groupKey_=key;if(this.icStatsCollection_.length===0)return;this.updateTable_(this.groupKey_);},constructTable_(table,groupKey){table.tableColumns=[{title:'',value:row=>{let expanded=false;const buttonEl=tr.ui.b.createButton('details',function(){const previousSibling=Polymer.dom(this).parentNode.parentNode;const parentNode=previousSibling.parentNode;if(expanded){const trEls=parentNode.getElementsByClassName('subTable');Array.from(trEls).map(x=>x.parentNode.removeChild(x));expanded=false;return;}
-expanded=true;const subGroups=row.createSubGroup();const tr=document.createElement('tr');tr.classList.add('subTable');tr.appendChild(document.createElement('td'));const td=document.createElement('td');td.colSpan=3;for(const subGroup of subGroups){const property=subGroup[0];const all=Array.from(subGroup[1].values());const group=all.slice(0,20);const divEl=document.createElement('div');const spanEl=document.createElement('span');const subTableEl=document.createElement('tr-ui-b-table');spanEl.innerText=`Top 20 out of ${all.length}`;spanEl.style.fontWeight='bold';spanEl.style.fontSize='14px';divEl.appendChild(spanEl);this.constructTable_(subTableEl,property);subTableEl.tableRows=group;subTableEl.rebuild();divEl.appendChild(subTableEl);td.appendChild(divEl);}
-tr.appendChild(td);parentNode.insertBefore(tr,previousSibling.nextSibling);});return buttonEl;}},{title:'Percentage',value(row){const spanEl=document.createElement('span');spanEl.innerText=(row.percentage*100).toFixed(3)+'%';return spanEl;},cmp:(a,b)=>a.percentage-b.percentage},{title:'Count',value(row){const spanEl=document.createElement('span');spanEl.innerText=row.length;return spanEl;},cmp:(a,b)=>a.length-b.length},{title:groupKey,value(row){const spanEl=document.createElement('span');spanEl.innerText=row.key?row.key:'';return spanEl;}}];table.sortColumnIndex=1;table.sortDescending=true;},updateTable_(groupKey){this.constructTable_(this.$.table,groupKey);this.$.table.tableRows=this.icStatsCollection_.groupBy(groupKey);this.$.table.rebuild();},set selection(slices){for(const slice of slices){for(const icStatsObj of slice.icStats){const entry=new ICStatsEntry(icStatsObj);this.icStatsCollection_.add(entry);}}
-this.$.total.innerText='Total items: '+this.icStatsCollection_.length;this.updateTable_(this.selector_.selectedValue);}});return{};});'use strict';Polymer({is:'tr-ui-e-multi-v8-ic-stats-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.table.selection=selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-e-multi-v8-ic-stats-thread-slice-sub-view',tr.e.v8.V8ICStatsThreadSlice,{multi:true,title:'V8 IC stats slices'});'use strict';tr.exportTo('tr.e.v8',function(){class RuntimeStatsEntry{constructor(name,count,time){this.name_=name;this.count_=count;this.time_=time;}
-get name(){return this.name_;}
-get count(){return this.count_;}
-get time(){return this.time_;}
-addSample(count,time){this.count_+=count;this.time_+=time;}}
-class RuntimeStatsGroup extends RuntimeStatsEntry{constructor(name,matchRegex){super(name,0,0);this.regex_=matchRegex;this.entries_=new Map();}
-match(name){return this.regex_&&name.match(this.regex_);}
-add(entry){const value=this.entries_.get(entry.name);if(value!==undefined){value.addSample(entry.count,entry.time);}else{this.entries_.set(entry.name,entry);}
-this.count_+=entry.count;this.time_+=entry.time;}
-get values(){return Array.from(this.entries_.values());}}
-class RuntimeStatsGroupCollection{constructor(){this.blink_cpp_group_=new RuntimeStatsGroup('Blink C++',/.*Callback.*/);this.api_group_=new RuntimeStatsGroup('API',/.*API.*/);this.groups_=[new RuntimeStatsGroup('Total'),new RuntimeStatsGroup('IC',/.*IC_.*/),new RuntimeStatsGroup('Optimize',/StackGuard|.*Optimize.*|.*Deoptimize.*|Recompile.*/),new RuntimeStatsGroup('Compile-Background',/(.*CompileBackground.*)/),new RuntimeStatsGroup('Compile',/(^Compile.*)|(.*_Compile.*)/),new RuntimeStatsGroup('Parse-Background',/.*ParseBackground.*/),new RuntimeStatsGroup('Parse',/.*Parse.*/),this.blink_cpp_group_,this.api_group_,new RuntimeStatsGroup('GC-Background-Marking',/.*GC.MC.BACKGROUND.*MARKING.*/),new RuntimeStatsGroup('GC-Background-Sweeping',/.*GC.MC.BACKGROUND.*SWEEPING.*/),new RuntimeStatsGroup('GC-Background-Scavenger',/.*GC.SCAVENGER.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-MinorMC',/.*GC.MINOR_MC.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-MajorMC',/.*GC.MC.BACKGROUND.*/),new RuntimeStatsGroup('GC-Background-Other',/.*GC.*BACKGROUND.*/),new RuntimeStatsGroup('GC',/GC|AllocateInTargetSpace/),new RuntimeStatsGroup('JavaScript',/JS_Execution/),new RuntimeStatsGroup('V8 C++',/.*/)];this.blink_group_collection_=null;}
-addSlices(slices){const blinkEntries=[];for(const slice of slices){if(!(slice instanceof tr.e.v8.V8ThreadSlice))return;let runtimeCallStats;try{runtimeCallStats=JSON.parse(slice.runtimeCallStats);}catch(e){runtimeCallStats=slice.runtimeCallStats;}
-if(runtimeCallStats===undefined)continue;for(const[name,stat]of Object.entries(runtimeCallStats)){if(name.match(/Blink_.*/)){if(name==='Blink_V8')continue;const entry=new RuntimeStatsEntry(name,stat[0],stat[1]);blinkEntries.push(entry);continue;}
-for(let i=1;i<this.groups_.length;++i){if(this.groups_[i].match(name)){if(stat.length!==2)break;const entry=new RuntimeStatsEntry(name,stat[0],stat[1]);this.groups_[0].addSample(stat[0],stat[1]);this.groups_[i].add(entry);break;}}}}
-this.blink_group_collection_=new BlinkRuntimeStatsGroupCollection(blinkEntries);}
-get totalTime(){return this.groups_[0].time;}
-get totalCount(){return this.groups_[0].count;}
-get runtimeGroups(){return this.groups_;}
-get blinkRCSGroupCollection(){return this.blink_group_collection_;}
-get blinkCppTotalTime(){return this.blink_cpp_group_.time+this.api_group_.time;}}
-class BlinkRuntimeStatsGroupCollection{constructor(entries){this.groups_=[new RuntimeStatsGroup('Blink_Bindings',/^Blink_Bindings_(.*)/),new RuntimeStatsGroup('Blink_GC',/^Blink_GC_(.*)/),new RuntimeStatsGroup('Blink_Layout',/^Blink_Layout_(.*)/),new RuntimeStatsGroup('Blink_Parsing',/^Blink_Parsing_(.*)/),new RuntimeStatsGroup('Blink_Style',/^Blink_Style_(.*)/),new RuntimeStatsGroup('Blink_Callbacks',/^Blink_(.*)/)];this.total_group_=new RuntimeStatsGroup('Blink_Total',/.*/);for(const entry of entries){for(const group of this.groups_){if(group.match(entry.name)){const newEntry=new RuntimeStatsEntry('Blink_'+group.match(entry.name)[1],entry.count,entry.time);group.add(newEntry);this.total_group_.addSample(entry.count,entry.time);break;}}}}
-get runtimeGroups(){return this.groups_.concat(this.total_group_);}
-get values(){return this.groups_.reduce((values,group)=>values.concat(group.values),[]);}
-get totalTime(){return this.total_group_.time;}
-get totalCount(){return this.total_group_.count;}}
-return{BlinkRuntimeStatsGroupCollection,RuntimeStatsEntry,RuntimeStatsGroup,RuntimeStatsGroupCollection,};});'use strict';tr.exportTo('tr.ui.e.v8',function(){const codeSearchURL_='https://cs.chromium.org/search/?sq=package:chromium&type=cs&q=';function removeBlinkPrefix_(name){if(name.startsWith('Blink_'))name=name.substring(6);return name;}
-function handleCodeSearchForV8_(event){if(event.target.parentNode===undefined)return;let name=event.target.parentNode.entryName;if(name.startsWith('API_'))name=name.substring(4);const url=codeSearchURL_+encodeURIComponent(name)+'+file:src/v8/src';window.open(url,'_blank');}
-function handleCodeSearchForBlink_(event){if(event.target.parentNode===undefined)return;const name=event.target.parentNode.entryName;const url=codeSearchURL_+
-encodeURIComponent('RuntimeCallStats::CounterId::k'+name)+'+file:src/third_party/WebKit/|src/out/Debug/';window.open(url,'_blank');}
-function createCodeSearchEl_(handleCodeSearch){const codeSearchEl=document.createElement('span');codeSearchEl.innerText='?';codeSearchEl.style.float='right';codeSearchEl.style.borderRadius='5px';codeSearchEl.style.backgroundColor='#EEE';codeSearchEl.addEventListener('click',handleCodeSearch.bind(this));return codeSearchEl;}
-const timeColumn_={title:'Time',value(row){const typeEl=document.createElement('span');typeEl.innerText=(row.time/1000.0).toFixed(3)+' ms';return typeEl;},width:'100px',cmp(a,b){return a.time-b.time;}};const countColumn_={title:'Count',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.count;return typeEl;},width:'100px',cmp(a,b){return a.count-b.count;}};function percentColumn_(title,totalTime){return{title,value(row){const typeEl=document.createElement('span');typeEl.innerText=(row.time/totalTime*100).toFixed(3)+'%';return typeEl;},width:'100px',cmp(a,b){return a.time-b.time;}};}
-function nameColumn_(handleCodeSearch,modifyName){return{title:'Name',value(row){const typeEl=document.createElement('span');let name=row.name;if(modifyName)name=modifyName(name);typeEl.innerText=name;if(!(row instanceof tr.e.v8.RuntimeStatsGroup)){typeEl.title='click ? for code search';typeEl.entryName=name;const codeSearchEl=createCodeSearchEl_(handleCodeSearch);typeEl.appendChild(codeSearchEl);}
-return typeEl;},width:'200px',showExpandButtons:true};}
-function initializeCommonOptions_(table){table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;table.sortColumnIndex=1;table.sortDescending=true;table.subRowsPropertyName='values';}
-Polymer({is:'tr-ui-e-v8-runtime-call-stats-table',ready(){this.table_=this.$.table;this.blink_rcs_table_=this.$.blink_rcs_table;this.totalTime_=0;},constructV8RCSTable_(totalTime){this.table_.tableColumns=[nameColumn_(handleCodeSearchForV8_),timeColumn_,countColumn_,percentColumn_('Percent',totalTime)];initializeCommonOptions_(this.table_);},constructBlinkRCSTable_(blinkCppTotalTime){this.blink_rcs_table_.tableColumns=[nameColumn_(handleCodeSearchForBlink_,removeBlinkPrefix_),timeColumn_,countColumn_,percentColumn_('Percent (of \'Blink C++\' + \'API\')',blinkCppTotalTime)];initializeCommonOptions_(this.blink_rcs_table_);},set slices(slices){const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slices);if(runtimeGroupCollection.totalTime>0){this.$.v8_rcs_heading.textContent='V8 Runtime Call Stats';this.constructV8RCSTable_(runtimeGroupCollection.totalTime);this.table_.tableRows=runtimeGroupCollection.runtimeGroups;this.table_.rebuild();}
-const blinkRCSGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;if(runtimeGroupCollection.blinkCppTotalTime>0&&blinkRCSGroupCollection.totalTime>0){this.$.blink_rcs_heading.textContent='Blink Runtime Call Stats';this.constructBlinkRCSTable_(runtimeGroupCollection.blinkCppTotalTime);this.blink_rcs_table_.tableRows=blinkRCSGroupCollection.runtimeGroups;this.blink_rcs_table_.rebuild();}}});return{};});'use strict';Polymer({is:'tr-ui-e-multi-v8-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.runtimeCallStats.slices=selection;this.$.content.selection=selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-e-multi-v8-thread-slice-sub-view',tr.e.v8.V8ThreadSlice,{multi:true,title:'V8 slices'});'use strict';Polymer({is:'tr-ui-e-single-v8-gc-stats-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.content.selection=selection;this.$.gcObjectsStats.selection=selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-e-single-v8-gc-stats-thread-slice-sub-view',tr.e.v8.V8GCStatsThreadSlice,{multi:false,title:'V8 GC stats slice'});'use strict';Polymer({is:'tr-ui-e-single-v8-ic-stats-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.table.selection=selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-e-single-v8-ic-stats-thread-slice-sub-view',tr.e.v8.V8ICStatsThreadSlice,{multi:false,title:'V8 IC stats slice'});'use strict';Polymer({is:'tr-ui-e-single-v8-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.runtimeCallStats.slices=selection;this.$.content.selection=selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-e-single-v8-thread-slice-sub-view',tr.e.v8.V8ThreadSlice,{multi:false,title:'V8 slice'});'use strict';tr.exportTo('tr.c',function(){function ScriptingObject(){}
-ScriptingObject.prototype={onModelChanged(model){}};return{ScriptingObject,};});'use strict';tr.exportTo('tr.c',function(){function ScriptingController(brushingStateController){this.brushingStateController_=brushingStateController;this.scriptObjectNames_=[];this.scriptObjectValues_=[];this.brushingStateController.addEventListener('model-changed',this.onModelChanged_.bind(this));const typeInfos=ScriptingObjectRegistry.getAllRegisteredTypeInfos();typeInfos.forEach(function(typeInfo){this.addScriptObject(typeInfo.metadata.name,typeInfo.constructor);global[typeInfo.metadata.name]=typeInfo.constructor;},this);}
-function ScriptingObjectRegistry(){}
-const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);tr.b.decorateExtensionRegistry(ScriptingObjectRegistry,options);ScriptingController.prototype={get brushingStateController(){return this.brushingStateController_;},onModelChanged_(){this.scriptObjectValues_.forEach(function(v){if(v.onModelChanged){v.onModelChanged(this.brushingStateController.model);}},this);},addScriptObject(name,value){this.scriptObjectNames_.push(name);this.scriptObjectValues_.push(value);},executeCommand(command){const f=new Function(this.scriptObjectNames_,'return eval('+command+')');return f.apply(null,this.scriptObjectValues_);}};return{ScriptingController,ScriptingObjectRegistry,};});'use strict';tr.exportTo('tr.metrics',function(){function MetricRegistry(){}
-const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.defaultMetadata={};tr.b.decorateExtensionRegistry(MetricRegistry,options);function camelCaseToHackerString(camelCase){let hackerString='';for(const c of camelCase){const lowered=c.toLocaleLowerCase();if(lowered===c){hackerString+=c;}else{hackerString+='_'+lowered;}}
-return hackerString;}
-function getCallStack(){try{throw new Error();}catch(error){return error.stack;}}
-function getPathsFromStack(stack){return stack.split('\n').map(line=>{line=line.replace(/^ */,'').split(':');if(line.length<4)return'';return line[line.length-3].split('/');}).filter(x=>x);}
-MetricRegistry.checkFilename=function(metricName,opt_metricPathForTest){if(metricName==='runtimeStatsTotalMetric'||metricName==='v8AndMemoryMetrics'){return;}
-const expectedFilename=camelCaseToHackerString(metricName)+'.html';const stack=getCallStack();let metricPath=opt_metricPathForTest;if(metricPath===undefined){const paths=getPathsFromStack(stack);const METRIC_STACK_INDEX=5;if(paths.length<=METRIC_STACK_INDEX||paths[METRIC_STACK_INDEX].join('/')===paths[0].join('/')){return;}
-metricPath=paths[METRIC_STACK_INDEX].slice(paths[METRIC_STACK_INDEX].length-2);}
-if(!metricPath[1].endsWith('_test.html')&&metricPath[1]!==expectedFilename&&metricPath.join('_')!==expectedFilename){throw new Error('Expected '+metricName+' to be in a file named '+
-expectedFilename+'; actual: '+metricPath.join('/')+'; stack: '+stack.replace(/\n/g,'\n  '));}};MetricRegistry.addEventListener('will-register',function(e){const metric=e.typeInfo.constructor;if(!(metric instanceof Function)){throw new Error('Metrics must be functions.');}
-if(!metric.name.endsWith('Metric')&&!metric.name.endsWith('Metrics')){throw new Error('Metric names must end with "Metric" or "Metrics".');}
-if(metric.length<2){throw new Error('Metrics take a HistogramSet and a Model and '+'optionally an options dictionary.');}
-MetricRegistry.checkFilename(metric.name);});return{MetricRegistry,};});'use strict';tr.exportTo('tr.metrics',function(){function accessibilityMetric(histograms,model){const browserAccessibilityEventsHist=new tr.v.Histogram('browser_accessibility_events',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);browserAccessibilityEventsHist.description='Browser accessibility events time';const renderAccessibilityEventsHist=new tr.v.Histogram('render_accessibility_events',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);renderAccessibilityEventsHist.description='Render accessibility events time';const renderAccessibilityLocationsHist=new tr.v.Histogram('render_accessibility_locations',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);renderAccessibilityLocationsHist.description='Render accessibility locations time';const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(chromeHelper===undefined)return;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const mainThread=rendererHelper.mainThread;if(mainThread===undefined)continue;for(const slice of mainThread.getDescendantEvents()){if(!(slice instanceof tr.model.ThreadSlice))continue;if(slice.title==='RenderAccessibilityImpl::SendPendingAccessibilityEvents'){renderAccessibilityEventsHist.addSample(slice.duration,{event:new tr.v.d.RelatedEventSet(slice)});}
-if(slice.title==='RenderAccessibilityImpl::SendLocationChanges'){renderAccessibilityLocationsHist.addSample(slice.duration,{event:new tr.v.d.RelatedEventSet(slice)});}}}
-for(const browserHelper of Object.values(chromeHelper.browserHelpers)){const mainThread=browserHelper.mainThread;if(mainThread===undefined)continue;for(const slice of mainThread.getDescendantEvents()){if(slice.title==='BrowserAccessibilityManager::OnAccessibilityEvents'){browserAccessibilityEventsHist.addSample(slice.duration,{event:new tr.v.d.RelatedEventSet(slice)});}}}
-histograms.addHistogram(browserAccessibilityEventsHist);histograms.addHistogram(renderAccessibilityEventsHist);histograms.addHistogram(renderAccessibilityLocationsHist);}
-tr.metrics.MetricRegistry.register(accessibilityMetric);return{accessibilityMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function androidStartupMetric(histograms,model){const messageLoopStartHistogram=histograms.createHistogram('messageloop_start_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[]);const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!chromeHelper)return;for(const helper of chromeHelper.browserHelpers){for(const ev of helper.mainThread.asyncSliceGroup.childEvents()){if(ev.title==='Startup.BrowserMessageLoopStartTimeFromMainEntry3'){messageLoopStartHistogram.addSample(ev.duration,{events:new tr.v.d.RelatedEventSet([ev])});}}}}
-tr.metrics.MetricRegistry.register(androidStartupMetric);return{androidStartupMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const MAX_INPUT_EVENT_TO_STARTUP_DELAY_IN_MS=2000;const MIN_DRAW_DELAY_IN_MS=80;const MAX_DRAW_DELAY_IN_MS=2000;function findProcess(processName,model){for(const pid in model.processes){const process=model.processes[pid];if(process.name===processName){return process;}}
-return undefined;}
-function findThreads(process,threadPrefix){if(process===undefined)return undefined;const threads=[];for(const tid in process.threads){const thread=process.threads[tid];if(thread.name.startsWith(threadPrefix)){threads.push(thread);}}
-return threads;}
-function findUIThread(process){if(process===undefined)return undefined;const threads=findThreads(process,'UI Thread');if(threads!==undefined&&threads.length===1){return threads[0];}
-return process.threads[process.pid];}
-function findLaunchSlices(model){const launches=[];const binders=findThreads(findProcess('system_server',model),'Binder');for(const binderId in binders){const binder=binders[binderId];for(const sliceId in binder.asyncSliceGroup.slices){const slice=binder.asyncSliceGroup.slices[sliceId];if(slice.title.startsWith('launching:')){launches.push(slice);}}}
-return launches;}
-function findDrawSlice(appName,startNotBefore,model){let drawSlice=undefined;const thread=findUIThread(findProcess(appName,model));if(thread===undefined)return undefined;for(const sliceId in thread.sliceGroup.slices){const slice=thread.sliceGroup.slices[sliceId];if(slice.start<startNotBefore+MIN_DRAW_DELAY_IN_MS||slice.start>startNotBefore+MAX_DRAW_DELAY_IN_MS)continue;if(slice.title!=='draw')continue;if(drawSlice===undefined||slice.start<drawSlice.start){drawSlice=slice;}}
-return drawSlice;}
-function findInputEventSlice(endNotAfter,model){const endNotBefore=endNotAfter-MAX_INPUT_EVENT_TO_STARTUP_DELAY_IN_MS;let inputSlice=undefined;const systemUi=findUIThread(findProcess('com.android.systemui',model));if(systemUi===undefined)return undefined;for(const sliceId in systemUi.asyncSliceGroup.slices){const slice=systemUi.asyncSliceGroup.slices[sliceId];if(slice.end>endNotAfter||slice.end<endNotBefore)continue;if(slice.title!=='deliverInputEvent')continue;if(inputSlice===undefined||slice.end>inputSlice.end){inputSlice=slice;}}
-return inputSlice;}
-function computeStartupTimeInMs(appName,launchSlice,model){let startupStart=launchSlice.start;let startupEnd=launchSlice.end;const drawSlice=findDrawSlice(appName,launchSlice.end,model);if(drawSlice!==undefined){startupEnd=drawSlice.end;}
-const inputSlice=findInputEventSlice(launchSlice.start,model);if(inputSlice!==undefined){startupStart=inputSlice.start;}
-return startupEnd-startupStart;}
-function measureStartup(histograms,model){const launches=findLaunchSlices(model);for(const sliceId in launches){const launchSlice=launches[sliceId];const appName=launchSlice.title.split(': ')[1];const startupMs=computeStartupTimeInMs(appName,launchSlice,model);histograms.createHistogram(`android:systrace:startup:${appName}`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,startupMs);}}
-function measureThreadStates(histograms,model,rangeOfInterest){for(const pid in model.processes){const process=model.processes[pid];if(process.name===undefined)continue;let hasSlices=false;let timeRunning=0;let timeRunnable=0;let timeSleeping=0;let timeUninterruptible=0;let timeBlockIO=0;let timeUnknown=0;for(const tid in process.threads){const thread=process.threads[tid];if(thread.timeSlices===undefined)continue;for(const sliceId in thread.timeSlices){const slice=thread.timeSlices[sliceId];const sliceRange=tr.b.math.Range.fromExplicitRange(slice.start,slice.end);const intersection=rangeOfInterest.findIntersection(sliceRange);const duration=intersection.duration;if(duration===0)continue;hasSlices=true;if(slice.title==='Running'){timeRunning+=duration;}else if(slice.title==='Runnable'){timeRunnable+=duration;}else if(slice.title==='Sleeping'){timeSleeping+=duration;}else if(slice.title.startsWith('Uninterruptible')){timeUninterruptible+=duration;if(slice.title.includes('Block I/O'))timeBlockIO+=duration;}else{timeUnknown+=duration;}}}
-if(hasSlices){const wall=rangeOfInterest.max-rangeOfInterest.min;histograms.createHistogram(`android:systrace:threadtime:${process.name}:running`,tr.b.Unit.byName.normalizedPercentage,timeRunning/wall);histograms.createHistogram(`android:systrace:threadtime:${process.name}:runnable`,tr.b.Unit.byName.normalizedPercentage,timeRunnable/wall);histograms.createHistogram(`android:systrace:threadtime:${process.name}:sleeping`,tr.b.Unit.byName.normalizedPercentage,timeSleeping/wall);histograms.createHistogram(`android:systrace:threadtime:${process.name}:blockio`,tr.b.Unit.byName.normalizedPercentage,timeBlockIO/wall);histograms.createHistogram(`android:systrace:threadtime:${process.name}:uninterruptible`,tr.b.Unit.byName.normalizedPercentage,timeUninterruptible/wall);if(timeUnknown>0){histograms.createHistogram(`android:systrace:threadtime:${process.name}:unknown`,tr.b.Unit.byName.normalizedPercentage,timeUnknown/wall);}}}}
-function androidSystraceMetric(histograms,model,options){let rangeOfInterest=model.bounds;if(options!==undefined&&options.rangeOfInterest!==undefined){rangeOfInterest=options.rangeOfInterest;}
-measureStartup(histograms,model);measureThreadStates(histograms,model,rangeOfInterest);}
-tr.metrics.MetricRegistry.register(androidSystraceMetric,{supportsRangeOfInterest:true});return{androidSystraceMetric,};});'use strict';tr.exportTo('tr.b.math',function(){const PERCENTILE_PRECISION=1e-7;function PiecewiseLinearFunction(){this.pieces=[];}
-PiecewiseLinearFunction.prototype={push(x1,y1,x2,y2){if(x1>=x2){throw new Error('Invalid segment');}
-if(this.pieces.length>0&&this.pieces[this.pieces.length-1].x2>x1){throw new Error('Potentially overlapping segments');}
-if(x1<x2){this.pieces.push(new Piece(x1,y1,x2,y2));}},partBelow(y){return this.pieces.reduce((acc,p)=>(acc+p.partBelow(y)),0);},get min(){return this.pieces.reduce((acc,p)=>Math.min(acc,p.min),Infinity);},get max(){return this.pieces.reduce((acc,p)=>Math.max(acc,p.max),-Infinity);},get average(){let weightedSum=0;let totalWeight=0;this.pieces.forEach(function(piece){weightedSum+=piece.width*piece.average;totalWeight+=piece.width;});if(totalWeight===0)return 0;return weightedSum/totalWeight;},percentile(percent){if(!(percent>=0&&percent<=1)){throw new Error('percent must be [0,1]');}
-let lower=this.min;let upper=this.max;const total=this.partBelow(upper);if(total===0)return 0;while(upper-lower>PERCENTILE_PRECISION){const middle=(lower+upper)/2;const below=this.partBelow(middle);if(below/total<percent){lower=middle;}else{upper=middle;}}
-return(lower+upper)/2;}};function Piece(x1,y1,x2,y2){this.x1=x1;this.y1=y1;this.x2=x2;this.y2=y2;}
-Piece.prototype={partBelow(y){const width=this.width;if(width===0)return 0;const minY=this.min;const maxY=this.max;if(y>=maxY)return width;if(y<minY)return 0;return(y-minY)/(maxY-minY)*width;},get min(){return Math.min(this.y1,this.y2);},get max(){return Math.max(this.y1,this.y2);},get average(){return(this.y1+this.y2)/2;},get width(){return this.x2-this.x1;}};return{PiecewiseLinearFunction,};});'use strict';tr.exportTo('tr.metrics.v8.utils',function(){const IDLE_TASK_EVENT='SingleThreadIdleTaskRunner::RunTask';const V8_EXECUTE='V8.Execute';const GC_EVENT_PREFIX='V8.GC';const FULL_GC_EVENT='V8.GCCompactor';const LOW_MEMORY_EVENT='V8.GCLowMemoryNotification';const MAJOR_GC_EVENT='MajorGC';const MINOR_GC_EVENT='MinorGC';const TOP_GC_EVENTS={'V8.GCCompactor':'v8-gc-full-mark-compactor','V8.GCFinalizeMC':'v8-gc-latency-mark-compactor','V8.GCFinalizeMCReduceMemory':'v8-gc-memory-mark-compactor','V8.GCIncrementalMarking':'v8-gc-incremental-step','V8.GCIncrementalMarkingFinalize':'v8-gc-incremental-finalize','V8.GCIncrementalMarkingStart':'v8-gc-incremental-start','V8.GCPhantomHandleProcessingCallback':'v8-gc-phantom-handle-callback','V8.GCScavenger':'v8-gc-scavenger'};const LOW_MEMORY_MARK_COMPACTOR='v8-gc-low-memory-mark-compactor';function findParent(event,predicate){let parent=event.parentSlice;while(parent){if(predicate(parent)){return parent;}
-parent=parent.parentSlice;}
-return null;}
-function isIdleTask(event){return event.title===IDLE_TASK_EVENT;}
-function isLowMemoryEvent(event){return event.title===LOW_MEMORY_EVENT;}
-function isV8Event(event){return event.title.startsWith('V8.');}
-function isV8ExecuteEvent(event){return event.title===V8_EXECUTE;}
-function isTopV8ExecuteEvent(event){return isV8ExecuteEvent(event)&&findParent(isV8ExecuteEvent)===null;}
-function isGarbageCollectionEvent(event){return event.title&&event.title.startsWith(GC_EVENT_PREFIX)&&event.title!==LOW_MEMORY_EVENT;}
-function isTopGarbageCollectionEvent(event){return event.title in TOP_GC_EVENTS;}
-function isForcedGarbageCollectionEvent(event){return findParent(event,isLowMemoryEvent)!==null;}
-function isSubGarbageCollectionEvent(event){return isGarbageCollectionEvent(event)&&event.parentSlice&&(isTopGarbageCollectionEvent(event.parentSlice)||event.parentSlice.title===MAJOR_GC_EVENT||event.parentSlice.title===MINOR_GC_EVENT);}
-function isFullMarkCompactorEvent(event){return event.title==='V8.GCCompactor';}
-function isIncrementalMarkingEvent(event){return event.title.startsWith('V8.GCIncrementalMarking');}
-function isLatencyMarkCompactorEvent(event){return event.title==='V8.GCFinalizeMC';}
-function isMemoryMarkCompactorEvent(event){return event.title==='V8.GCFinalizeMCReduceMemory';}
-function isScavengerEvent(event){return event.title==='V8.GCScavenger';}
-function isCompileOptimizeRCSCategory(name){return name==='Optimize';}
-function isCompileUnoptimizeRCSCategory(name){return name==='Compile';}
-function isCompileParseRCSCategory(name){return name==='Parse';}
-function isCompileRCSCategory(name){return name==='Compile'||name==='Optimize'||name==='Parse';}
-function isV8RCSEvent(event){return event instanceof tr.e.v8.V8ThreadSlice;}
-function topGarbageCollectionEventName(event){if(event.title===FULL_GC_EVENT){if(findParent(event,isLowMemoryEvent)){return LOW_MEMORY_MARK_COMPACTOR;}}
-return TOP_GC_EVENTS[event.title];}
-function subGarbageCollectionEventName(event){const topEvent=findParent(event,isTopGarbageCollectionEvent);const prefix=topEvent?topGarbageCollectionEventName(topEvent):'unknown';const name=event.title.replace('V8.GC_MC_','').replace('V8.GC_SCAVENGER_','').replace('V8.GC_','').replace(/_/g,'-').toLowerCase();return prefix+'-'+name;}
-function groupAndProcessEvents(model,filterCallback,nameCallback,processCallback){const nameToEvents={};for(const event of model.getDescendantEvents()){if(!filterCallback(event))continue;const name=nameCallback(event);nameToEvents[name]=nameToEvents[name]||[];nameToEvents[name].push(event);}
-for(const[name,events]of Object.entries(nameToEvents)){processCallback(name,events);}}
-function unionOfIntervals(intervals){if(intervals.length===0)return[];return tr.b.math.mergeRanges(intervals.map(x=>{return{min:x.start,max:x.end};}),1e-6,function(ranges){return{start:ranges.reduce((acc,x)=>Math.min(acc,x.min),ranges[0].min),end:ranges.reduce((acc,x)=>Math.max(acc,x.max),ranges[0].max)};});}
-function hasV8Stats(globalMemoryDump){let v8stats=undefined;globalMemoryDump.iterateContainerDumps(function(dump){v8stats=v8stats||dump.getMemoryAllocatorDumpByFullName('v8');});return!!v8stats;}
-function rangeForMemoryDumps(model){const startOfFirstDumpWithV8=model.globalMemoryDumps.filter(hasV8Stats).reduce((start,dump)=>Math.min(start,dump.start),Infinity);if(startOfFirstDumpWithV8===Infinity)return new tr.b.math.Range();return tr.b.math.Range.fromExplicitRange(startOfFirstDumpWithV8,Infinity);}
-return{findParent,groupAndProcessEvents,isForcedGarbageCollectionEvent,isFullMarkCompactorEvent,isGarbageCollectionEvent,isIdleTask,isIncrementalMarkingEvent,isLatencyMarkCompactorEvent,isLowMemoryEvent,isMemoryMarkCompactorEvent,isScavengerEvent,isSubGarbageCollectionEvent,isTopGarbageCollectionEvent,isTopV8ExecuteEvent,isV8Event,isV8ExecuteEvent,isV8RCSEvent,isCompileRCSCategory,isCompileOptimizeRCSCategory,isCompileUnoptimizeRCSCategory,isCompileParseRCSCategory,rangeForMemoryDumps,subGarbageCollectionEventName,topGarbageCollectionEventName,unionOfIntervals,};});'use strict';tr.exportTo('tr.metrics.blink',function(){const BLINK_GC_EVENTS={'BlinkGCMarking':'blink-gc-marking','ThreadState::completeSweep':'blink-gc-complete-sweep','ThreadState::performIdleLazySweep':'blink-gc-idle-lazy-sweep'};function isBlinkGarbageCollectionEvent(event){return event.title in BLINK_GC_EVENTS;}
-function blinkGarbageCollectionEventName(event){return BLINK_GC_EVENTS[event.title];}
-function blinkGcMetric(histograms,model){addDurationOfTopEvents(histograms,model);addTotalDurationOfTopEvents(histograms,model);addIdleTimesOfTopEvents(histograms,model);addTotalIdleTimesOfTopEvents(histograms,model);}
-tr.metrics.MetricRegistry.register(blinkGcMetric);const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const percentage_biggerIsBetter=tr.b.Unit.byName.normalizedPercentage_biggerIsBetter;const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,20,200).addExponentialBins(200,100);function createNumericForTopEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:true,max:true,min:false,std:true,sum:true,percentile:[0.90]});return n;}
-function createNumericForIdleTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:false,max:true,min:false,std:false,sum:true,percentile:[]});return n;}
-function createPercentage(name,numerator,denominator){const histogram=new tr.v.Histogram(name,percentage_biggerIsBetter);if(denominator===0){histogram.addSample(0);}else{histogram.addSample(numerator/denominator);}
-return histogram;}
-function addDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,blinkGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addTotalDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,event=>'blink-gc-total',function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addIdleTimesOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,blinkGarbageCollectionEventName,function(name,events){addIdleTimes(histograms,model,name,events);});}
-function addTotalIdleTimesOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isBlinkGarbageCollectionEvent,event=>'blink-gc-total',function(name,events){addIdleTimes(histograms,model,name,events);});}
-function addIdleTimes(histograms,model,name,events){const cpuDuration=createNumericForIdleTime(name+'_cpu');const insideIdle=createNumericForIdleTime(name+'_inside_idle');const outsideIdle=createNumericForIdleTime(name+'_outside_idle');const idleDeadlineOverrun=createNumericForIdleTime(name+'_idle_deadline_overrun');events.forEach(function(event){const idleTask=tr.metrics.v8.utils.findParent(event,tr.metrics.v8.utils.isIdleTask);let inside=0;let overrun=0;if(idleTask){const allottedTime=idleTask.args.allotted_time_ms;if(event.duration>allottedTime){overrun=event.duration-allottedTime;inside=event.cpuDuration*allottedTime/event.duration;}else{inside=event.cpuDuration;}}
-cpuDuration.addSample(event.cpuDuration);insideIdle.addSample(inside);outsideIdle.addSample(event.cpuDuration-inside);idleDeadlineOverrun.addSample(overrun);});histograms.addHistogram(idleDeadlineOverrun);histograms.addHistogram(outsideIdle);const percentage=createPercentage(name+'_percentage_idle',insideIdle.sum,cpuDuration.sum);histograms.addHistogram(percentage);}
-return{blinkGcMetric,};});'use strict';tr.exportTo('tr.metrics.blink',function(){function leakDetectionMetric(histograms,model){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper===undefined){throw new Error('Chrome is not present.');}
-const rendererHelpers=modelHelper.rendererHelpers;if(Object.keys(rendererHelpers).length===0){throw new Error('Renderer process is not present.');}
-const pids=Object.keys(rendererHelpers);const chromeDumps=tr.metrics.sh.splitGlobalDumpsByBrowserName(model,undefined).get('chrome');const sumCounter=new Map();for(const pid of pids){for(const[key,count]of countLeakedBlinkObjects(chromeDumps,pid)){sumCounter.set(key,(sumCounter.get(key)||0)+count);}}
-for(const[key,count]of sumCounter){histograms.createHistogram('Leaked '+key,tr.b.Unit.byName.count_smallerIsBetter,count);}
-for(const[key,count]of sumCounter){if(count>0){throw new Error('Memory leak is found.');}}}
-tr.metrics.MetricRegistry.register(leakDetectionMetric);function countLeakedBlinkObjects(dumps,pid){if(dumps===undefined||dumps.length<2){throw new Error('Expected at least two memory dumps.');}
-const firstCounter=countBlinkObjects(dumps[0],pid);const lastCounter=countBlinkObjects(dumps[dumps.length-1],pid);const diffCounter=new Map();for(const[key,lastCount]of lastCounter){diffCounter.set(key,lastCount-firstCounter.get(key));}
-return diffCounter;}
-function countBlinkObjects(dump,pid){const counter=new Map();const processesMemoryDumps=dump.processMemoryDumps;if(processesMemoryDumps[pid]===undefined)return counter;const blinkObjectsDump=processesMemoryDumps[pid].memoryAllocatorDumps.find(dump=>dump.fullName==='blink_objects');for(const v of blinkObjectsDump.children){counter.set(v.name,v.numerics.object_count.value);}
-return counter;}
-return{leakDetectionMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function getCpuSnapshotsFromModel(model){const snapshots=[];for(const pid in model.processes){const snapshotInstances=model.processes[pid].objects.getAllInstancesNamed('CPUSnapshots');if(!snapshotInstances)continue;for(const object of snapshotInstances[0].snapshots){snapshots.push(object.args.processes);}}
-return snapshots;}
-function getProcessSumsFromSnapshot(snapshot){const processSums=new Map();for(const processData of snapshot){const processName=processData.name;if(!(processSums.has(processName))){processSums.set(processName,{sum:0.0,paths:new Set()});}
-processSums.get(processName).sum+=parseFloat(processData.pCpu);if(processData.path){processSums.get(processName).paths.add(processData.path);}}
-return processSums;}
-function buildNumericsFromSnapshots(snapshots){const processNumerics=new Map();for(const snapshot of snapshots){const processSums=getProcessSumsFromSnapshot(snapshot);for(const[processName,processData]of processSums.entries()){if(!(processNumerics.has(processName))){processNumerics.set(processName,{numeric:new tr.v.Histogram('cpu:percent:'+processName,tr.b.Unit.byName.normalizedPercentage_smallerIsBetter),paths:new Set()});}
-processNumerics.get(processName).numeric.addSample(processData.sum/100.0);for(const path of processData.paths){processNumerics.get(processName).paths.add(path);}}}
-return processNumerics;}
-function cpuProcessMetric(histograms,model){const snapshots=getCpuSnapshotsFromModel(model);const processNumerics=buildNumericsFromSnapshots(snapshots);for(const[processName,processData]of processNumerics){const numeric=processData.numeric;const missingSnapshotCount=snapshots.length-numeric.numValues;for(let i=0;i<missingSnapshotCount;i++){numeric.addSample(0);}
-numeric.diagnostics.set('paths',new
-tr.v.d.GenericSet([...processData.paths]));histograms.addHistogram(numeric);}}
-tr.metrics.MetricRegistry.register(cpuProcessMetric);return{cpuProcessMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function mediaMetric(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(chromeHelper===undefined)return;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const mainThread=rendererHelper.mainThread;if(mainThread===undefined)continue;const compositorThread=rendererHelper.compositorThread;const audioThreads=rendererHelper.process.findAllThreadsNamed('AudioOutputDevice');if(compositorThread===undefined&&audioThreads.length===0)continue;const processData=new PerProcessData();processData.recordPlayStarts(mainThread);if(!processData.hasPlaybacks)continue;if(compositorThread!==undefined){processData.calculateTimeToVideoPlays(compositorThread);processData.calculateDroppedFrameCounts(compositorThread);}
-if(audioThreads.length!==0){processData.calculateTimeToAudioPlays(audioThreads);}
-processData.calculateSeekTimes(mainThread);processData.calculateBufferingTimes(mainThread);processData.addMetricToHistograms(histograms);}}
-class PerProcessData{constructor(){this.playbackIdToDataMap_=new Map();}
-recordPlayStarts(mainThread){for(const event of mainThread.sliceGroup.getDescendantEvents()){if(event.title==='WebMediaPlayerImpl::DoLoad'){const id=event.args.id;if(this.playbackIdToDataMap_.has(id)){throw new Error('Unexpected multiple initialization of a media playback');}
-this.playbackIdToDataMap_.set(id,new PerPlaybackData(event.start));}}}
-get hasPlaybacks(){return this.playbackIdToDataMap_.size>0;}
-calculateTimeToVideoPlays(compositorThread){for(const event of compositorThread.sliceGroup.getDescendantEvents()){if(event.title==='VideoRendererImpl::Render'){this.getPerPlaybackObject_(event.args.id).processVideoRenderTime(event.start);}}}
-calculateTimeToAudioPlays(audioThreads){for(const audioThread of audioThreads){for(const event of audioThread.sliceGroup.getDescendantEvents()){if(event.title==='AudioRendererImpl::Render'){this.getPerPlaybackObject_(event.args.id).processAudioRenderTime(event.start);}}}}
-calculateSeekTimes(mainThread){for(const event of mainThread.sliceGroup.getDescendantEvents()){if(event.title==='WebMediaPlayerImpl::DoSeek'){this.getPerPlaybackObject_(event.args.id).processDoSeek(event.args.target,event.start);}else if(event.title==='WebMediaPlayerImpl::OnPipelineSeeked'){this.getPerPlaybackObject_(event.args.id).processOnPipelineSeeked(event.args.target,event.start);}else if(event.title==='WebMediaPlayerImpl::BufferingHaveEnough'){this.getPerPlaybackObject_(event.args.id).processBufferingHaveEnough(event.start);}}}
-calculateBufferingTimes(mainThread){for(const event of mainThread.sliceGroup.getDescendantEvents()){if(event.title==='WebMediaPlayerImpl::OnEnded'){this.getPerPlaybackObject_(event.args.id).processOnEnded(event.start,event.args.duration);}}}
-calculateDroppedFrameCounts(compositorThread){for(const event of compositorThread.sliceGroup.getDescendantEvents()){if(event.title==='VideoFramesDropped'){this.getPerPlaybackObject_(event.args.id).processVideoFramesDropped(event.args.count);}}}
-addMetricToHistograms(histograms){for(const[id,playbackData]of this.playbackIdToDataMap_){playbackData.addMetricToHistograms(histograms);}}
-getPerPlaybackObject_(playbackId){let perPlaybackObject=this.playbackIdToDataMap_.get(playbackId);if(perPlaybackObject===undefined){perPlaybackObject=new PerPlaybackData(undefined);this.playbackIdToDataMap_.set(playbackId,perPlaybackObject);}
-return perPlaybackObject;}}
-class PerPlaybackData{constructor(playStartTime){this.playStart_=playStartTime;this.timeToVideoPlay_=undefined;this.timeToAudioPlay_=undefined;this.bufferingTime_=undefined;this.droppedFrameCount_=0;this.seekError_=false;this.seekTimes_=new Map();this.currentSeek_=undefined;}
-get timeToVideoPlay(){return this.timeToVideoPlay_;}
-get timeToAudioPlay(){return this.timeToAudioPlay_;}
-get bufferingTime(){return this.bufferingTime_;}
-get droppedFrameCount(){return(this.timeToVideoPlay_!==undefined)?this.droppedFrameCount_:undefined;}
-get seekTimes(){if(this.seekError_||this.currentSeek_!==undefined)return new Map();return this.seekTimes_;}
-processVideoRenderTime(videoRenderTime){if(this.playStart_!==undefined&&this.timeToVideoPlay_===undefined){this.timeToVideoPlay_=videoRenderTime-this.playStart_;}}
-processAudioRenderTime(audioRenderTime){if(this.playStart_!==undefined&&this.timeToAudioPlay_===undefined){this.timeToAudioPlay_=audioRenderTime-this.playStart_;}}
-processVideoFramesDropped(count){this.droppedFrameCount_+=count;}
-processDoSeek(target,startTime){if(this.currentSeek_!==undefined){this.seekError_=true;return;}
-this.currentSeek_={target,startTime};this.seekTimes_.set(target,this.currentSeek_);}
-processOnPipelineSeeked(target,time){if(this.seekError_)return;const currentSeek=this.currentSeek_;if(currentSeek===undefined){return;}
-if(currentSeek.target!==target){this.seekError_=true;return;}
-if(currentSeek.pipelineSeekTime!==undefined){this.seekError_=true;return;}
-currentSeek.pipelineSeekTime=time-currentSeek.startTime;}
-processBufferingHaveEnough(time){if(this.seekError_)return;const currentSeek=this.currentSeek_;if(currentSeek===undefined){return;}
-if(currentSeek.pipelineSeekTime===undefined){return;}
-currentSeek.seekTime=time-currentSeek.startTime;this.currentSeek_=undefined;}
-processOnEnded(playEndTime,duration){if(this.playStart_===undefined)return;if(this.seekTimes_.size!==0||this.seekError_)return;if(this.bufferingTime_!==undefined)return;duration=tr.b.convertUnit(duration,tr.b.UnitPrefixScale.METRIC.NONE,tr.b.UnitPrefixScale.METRIC.MILLI);const playTime=playEndTime-this.playStart_;if(this.timeToVideoPlay_!==undefined){this.bufferingTime_=playTime-duration-this.timeToVideoPlay_;}else if(this.timeToAudioPlay!==undefined){this.bufferingTime_=playTime-duration-this.timeToAudioPlay_;}}
-addMetricToHistograms(histograms){this.addSample_(histograms,'time_to_video_play',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,this.timeToVideoPlay);this.addSample_(histograms,'time_to_audio_play',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,this.timeToAudioPlay);this.addSample_(histograms,'dropped_frame_count',tr.b.Unit.byName.count_smallerIsBetter,this.droppedFrameCount);for(const[key,value]of this.seekTimes.entries()){const keyString=key.toString().replace('.','_');this.addSample_(histograms,'pipeline_seek_time_'+keyString,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,value.pipelineSeekTime);this.addSample_(histograms,'seek_time_'+keyString,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,value.seekTime);}
-this.addSample_(histograms,'buffering_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,this.bufferingTime);}
-addSample_(histograms,name,unit,sample){if(sample===undefined)return;const histogram=histograms.getHistogramNamed(name);if(histogram===undefined){histograms.createHistogram(name,unit,sample);}else{histogram.addSample(sample);}}}
-tr.metrics.MetricRegistry.register(mediaMetric);return{mediaMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function sampleExceptionMetric(histograms,model){const hist=new tr.v.Histogram('foo',tr.b.Unit.byName.sizeInBytes_smallerIsBetter);hist.addSample(9);hist.addSample(91,{bar:new tr.v.d.GenericSet([{hello:42}])});for(const expectation of model.userModel.expectations){if(expectation instanceof tr.model.um.ResponseExpectation){}else if(expectation instanceof tr.model.um.AnimationExpectation){}else if(expectation instanceof tr.model.um.IdleExpectation){}else if(expectation instanceof tr.model.um.LoadExpectation){}}
-const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const[pid,process]of Object.entries(model.processes)){}
-histograms.addHistogram(hist);throw new Error('There was an error');}
-tr.metrics.MetricRegistry.register(sampleExceptionMetric);return{sampleExceptionMetric,};});'use strict';tr.exportTo('tr.metrics',function(){function sampleMetric(histograms,model){const hist=new tr.v.Histogram('foo',tr.b.Unit.byName.sizeInBytes_smallerIsBetter);hist.addSample(9);hist.addSample(91,{bar:new tr.v.d.GenericSet([{hello:42}])});for(const expectation of model.userModel.expectations){if(expectation instanceof tr.model.um.ResponseExpectation){}else if(expectation instanceof tr.model.um.AnimationExpectation){}else if(expectation instanceof tr.model.um.IdleExpectation){}else if(expectation instanceof tr.model.um.LoadExpectation){}}
-const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const[pid,process]of Object.entries(model.processes)){}
-histograms.addHistogram(hist);}
-tr.metrics.MetricRegistry.register(sampleMetric);return{sampleMetric,};});'use strict';tr.exportTo('tr.metrics',function(){const HANDLE_INPUT_EVENT_TITLE='WebViewImpl::handleInputEvent';function findPrecedingEvents_(eventsA,eventsB){const events=new Map();let eventsBIndex=0;for(const eventA of eventsA){for(;eventsBIndex<eventsB.length;eventsBIndex++){if(eventsB[eventsBIndex].start>eventA.start)break;}
-if(eventsBIndex>0){events.set(eventA,eventsB[eventsBIndex-1]);}}
-return events;}
-function findFollowingEvents_(eventsA,eventsB){const events=new Map();let eventsBIndex=0;for(const eventA of eventsA){for(;eventsBIndex<eventsB.length;eventsBIndex++){if(eventsB[eventsBIndex].start>=eventA.start)break;}
-if(eventsBIndex>=0&&eventsBIndex<eventsB.length){events.set(eventA,eventsB[eventsBIndex]);}}
-return events;}
-function getSpaNavigationStartCandidates_(rendererHelper,browserHelper){const isNavStartEvent=e=>{if(e.title===HANDLE_INPUT_EVENT_TITLE&&e.args.type==='MouseUp'){return true;}
-return e.title==='NavigationControllerImpl::GoToIndex';};return[...rendererHelper.mainThread.sliceGroup.getDescendantEvents(),...browserHelper.mainThread.sliceGroup.getDescendantEvents()].filter(isNavStartEvent);}
-function getSpaNavigationEvents_(rendererHelper){const isNavEvent=e=>e.category==='blink'&&e.title==='FrameLoader::updateForSameDocumentNavigation';return[...rendererHelper.mainThread.sliceGroup.getDescendantEvents()].filter(isNavEvent);}
-function getInputLatencyEvents_(browserHelper){const isInputLatencyEvent=e=>e.title==='InputLatency::MouseUp';return browserHelper.getAllAsyncSlicesMatching(isInputLatencyEvent);}
-function getInputLatencyEventByBindIdMap_(browserHelper){const inputLatencyEventByBindIdMap=new Map();for(const event of getInputLatencyEvents_(browserHelper)){inputLatencyEventByBindIdMap.set(event.args.data.trace_id,event);}
-return inputLatencyEventByBindIdMap;}
-function getSpaNavigationEventToNavigationStartMap_(rendererHelper,browserHelper){const mainThread=rendererHelper.mainThread;const spaNavEvents=getSpaNavigationEvents_(rendererHelper);const navStartCandidates=getSpaNavigationStartCandidates_(rendererHelper,browserHelper).sort(tr.importer.compareEvents);const spaNavEventToNavStartCandidateMap=findPrecedingEvents_(spaNavEvents,navStartCandidates);const inputLatencyEventByBindIdMap=getInputLatencyEventByBindIdMap_(browserHelper);const spaNavEventToNavStartEventMap=new Map();for(const[spaNavEvent,navStartCandidate]of
-spaNavEventToNavStartCandidateMap){if(navStartCandidate.title===HANDLE_INPUT_EVENT_TITLE){const inputLatencySlice=inputLatencyEventByBindIdMap.get(Number(navStartCandidate.parentSlice.bindId));if(inputLatencySlice){spaNavEventToNavStartEventMap.set(spaNavEvent,inputLatencySlice);}}else{spaNavEventToNavStartEventMap.set(spaNavEvent,navStartCandidate);}}
-return spaNavEventToNavStartEventMap;}
-function getFirstPaintEvents_(rendererHelper){const isFirstPaintEvent=e=>e.category==='blink'&&e.title==='PaintLayerCompositor::updateIfNeededRecursive';return[...rendererHelper.mainThread.sliceGroup.getDescendantEvents()].filter(isFirstPaintEvent);}
-function getSpaNavigationEventToFirstPaintEventMap_(rendererHelper){const spaNavEvents=getSpaNavigationEvents_(rendererHelper).sort(tr.importer.compareEvents);const firstPaintEvents=getFirstPaintEvents_(rendererHelper).sort(tr.importer.compareEvents);return findFollowingEvents_(spaNavEvents,firstPaintEvents);}
-function findSpaNavigationsOnRenderer(rendererHelper,browserHelper){const spaNavEventToNavStartMap=getSpaNavigationEventToNavigationStartMap_(rendererHelper,browserHelper);const spaNavEventToFirstPaintEventMap=getSpaNavigationEventToFirstPaintEventMap_(rendererHelper);const spaNavigations=[];for(const[spaNavEvent,navStartEvent]of
-spaNavEventToNavStartMap){if(spaNavEventToFirstPaintEventMap.has(spaNavEvent)){const firstPaintEvent=spaNavEventToFirstPaintEventMap.get(spaNavEvent);const isNavStartAsyncSlice=navStartEvent instanceof tr.model.AsyncSlice;spaNavigations.push({navStartCandidates:{inputLatencyAsyncSlice:isNavStartAsyncSlice?navStartEvent:undefined,goToIndexSlice:isNavStartAsyncSlice?undefined:navStartEvent},firstPaintEvent,url:spaNavEvent.args.url});}}
-return spaNavigations;}
-return{findSpaNavigationsOnRenderer,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function generateTimeBreakdownTree(mainThread,rangeOfInterest,getEventStart,getEventDuration,getEventSelfTime){if(mainThread===null)return;const breakdownTree={};for(const title of
-tr.e.chrome.ChromeUserFriendlyCategoryDriver.ALL_TITLES){breakdownTree[title]={total:0,events:{}};}
-for(const event of mainThread.getDescendantEvents()){const eventStart=getEventStart(event);const eventDuration=getEventDuration(event);const eventSelfTime=getEventSelfTime(event);const eventEnd=eventStart+eventDuration;if(!rangeOfInterest.intersectsExplicitRangeExclusive(eventStart,eventEnd)){continue;}
-if(eventSelfTime===undefined)continue;const title=tr.e.chrome.ChromeUserFriendlyCategoryDriver.fromEvent(event);let timeIntersectionRatio=0;if(eventDuration>0){timeIntersectionRatio=rangeOfInterest.findExplicitIntersectionDuration(eventStart,eventEnd)/eventDuration;}
-const v8Runtime=event.args['runtime-call-stat'];if(v8Runtime!==undefined){const v8RuntimeObject=JSON.parse(v8Runtime);for(const runtimeCall in v8RuntimeObject){if(v8RuntimeObject[runtimeCall].length===2){if(breakdownTree.v8_runtime.events[runtimeCall]===undefined){breakdownTree.v8_runtime.events[runtimeCall]=0;}
-const runtimeTime=tr.b.Unit.timestampFromUs(v8RuntimeObject[runtimeCall][1]*timeIntersectionRatio);breakdownTree.v8_runtime.total+=runtimeTime;breakdownTree.v8_runtime.events[runtimeCall]+=runtimeTime;}}}
-const approximatedSelfTimeContribution=eventSelfTime*timeIntersectionRatio;breakdownTree[title].total+=approximatedSelfTimeContribution;if(breakdownTree[title].events[event.title]===undefined){breakdownTree[title].events[event.title]=0;}
-breakdownTree[title].events[event.title]+=approximatedSelfTimeContribution;}
-return breakdownTree;}
-function addIdleAndBlockByNetworkBreakdown_(breakdownTree,mainThreadEvents,networkEvents,rangeOfInterest){let idleRanges=[rangeOfInterest];const mainThreadEventRanges=tr.b.math.convertEventsToRanges(mainThreadEvents);const networkEventRanges=tr.b.math.convertEventsToRanges(networkEvents);const eventRanges=mainThreadEventRanges.concat(networkEventRanges);eventRanges.sort((a,b)=>a.min-b.min);for(const eventRange of eventRanges){if(!eventRange||eventRange.isEmpty||eventRange.duration<0){throw new Error('Range is invalid');}
-const newLastIdleRanges=tr.b.math.Range.findDifference(idleRanges[idleRanges.length-1],eventRange);idleRanges.pop();idleRanges=idleRanges.concat(newLastIdleRanges);if(idleRanges.length===0)break;}
-const totalFreeDuration=tr.b.math.Statistics.sum(idleRanges,range=>range.duration);breakdownTree.idle={total:totalFreeDuration,events:{}};let totalBlockedDuration=rangeOfInterest.duration;for(const component of Object.values(breakdownTree)){totalBlockedDuration-=component.total;}
-breakdownTree.blocked_on_network={total:totalBlockedDuration,events:{}};}
-function generateWallClockTimeBreakdownTree(mainThread,networkEvents,rangeOfInterest){function getEventStart(e){return e.start;}
-function getEventDuration(e){return e.duration;}
-function getEventSelfTime(e){return e.selfTime;}
-const breakdownTree=generateTimeBreakdownTree(mainThread,rangeOfInterest,getEventStart,getEventDuration,getEventSelfTime);const mainThreadEventsInRange=tr.model.helpers.getSlicesIntersectingRange(rangeOfInterest,mainThread.sliceGroup.topLevelSlices);addIdleAndBlockByNetworkBreakdown_(breakdownTree,mainThreadEventsInRange,networkEvents,rangeOfInterest);return breakdownTree;}
-function generateCpuTimeBreakdownTree(mainThread,rangeOfInterestCpuTime){function getEventStart(e){return e.cpuStart;}
-function getEventDuration(e){return e.cpuDuration;}
-function getEventSelfTime(e){return e.cpuSelfTime;}
-return generateTimeBreakdownTree(mainThread,rangeOfInterestCpuTime,getEventStart,getEventDuration,getEventSelfTime);}
-return{generateTimeBreakdownTree,generateWallClockTimeBreakdownTree,generateCpuTimeBreakdownTree,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const LONG_TASK_THRESHOLD_MS=50;const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const RelatedEventSet=tr.v.d.RelatedEventSet;const hasCategoryAndName=tr.metrics.sh.hasCategoryAndName;const EventFinderUtils=tr.e.chrome.EventFinderUtils;function getNetworkEventsInRange(process,range){const networkEvents=[];for(const thread of Object.values(process.threads)){const threadHelper=new tr.model.helpers.ChromeThreadHelper(thread);const events=threadHelper.getNetworkEvents();for(const event of events){if(range.intersectsExplicitRangeInclusive(event.start,event.end)){networkEvents.push(event);}}}
-return networkEvents;}
-function createBreakdownDiagnostic(breakdownTree){const breakdownDiagnostic=new tr.v.d.Breakdown();breakdownDiagnostic.colorScheme=tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER;for(const label in breakdownTree){breakdownDiagnostic.set(label,breakdownTree[label].total);}
-return breakdownDiagnostic;}
-const LOADING_METRIC_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,1e3,20).addLinearBins(3e3,20).addExponentialBins(20e3,20);const TIME_TO_INTERACTIVE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,40e3,35).addExponentialBins(80e3,15);const SUMMARY_OPTIONS={avg:true,count:false,max:true,min:true,std:true,sum:false,};function findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ts){const objects=rendererHelper.process.objects;const frameLoaderInstances=objects.instancesByTypeName_.FrameLoader;if(frameLoaderInstances===undefined)return undefined;let snapshot;for(const instance of frameLoaderInstances){if(!instance.isAliveAt(ts))continue;const maybeSnapshot=instance.getSnapshotAt(ts);if(frameIdRef!==maybeSnapshot.args.frame.id_ref)continue;snapshot=maybeSnapshot;}
-return snapshot;}
-function findAllEvents(rendererHelper,category,title){const targetEvents=[];for(const ev of rendererHelper.process.getDescendantEvents()){if(!hasCategoryAndName(ev,category,title))continue;targetEvents.push(ev);}
-return targetEvents;}
-const URL_BLACKLIST=['','about:blank','data:text/html,pluginplaceholderdata','chrome-error://chromewebdata/'];function shouldIgnoreURL(url){return URL_BLACKLIST.includes(url);}
-function collectTimeToEvent(category,eventName,rendererHelper,frameToNavStartEvents){const targetEvents=findAllEvents(rendererHelper,category,eventName);const samples=[];for(const ev of targetEvents){if(rendererHelper.isTelemetryInternalEvent(ev))continue;const frameIdRef=ev.args.frame;const snapshot=findFrameLoaderSnapshotAt(rendererHelper,frameIdRef,ev.start);if(snapshot===undefined||!snapshot.args.isLoadingMainFrame)continue;const url=snapshot.args.documentLoaderURL;if(shouldIgnoreURL(url))continue;const navigationStartEvent=EventFinderUtils.findLastEventStartingOnOrBeforeTimestamp(frameToNavStartEvents.get(frameIdRef)||[],ev.start);if(navigationStartEvent===undefined)continue;const navStartToEventRange=tr.b.math.Range.fromExplicitRange(navigationStartEvent.start,ev.start);const networkEvents=getNetworkEventsInRange(rendererHelper.process,navStartToEventRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToEventRange);samples.push({value:navStartToEventRange.duration,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),url:new tr.v.d.GenericSet([url]),Start:new RelatedEventSet(navigationStartEvent),End:new RelatedEventSet(ev)}});}
-return samples;}
-function addFirstMeaningfulPaintSample(samples,rendererHelper,navigationStart,fmpMarkerEvent,url){const navStartToFMPRange=tr.b.math.Range.fromExplicitRange(navigationStart.start,fmpMarkerEvent.start);const networkEvents=getNetworkEventsInRange(rendererHelper.process,navStartToFMPRange);const timeToFirstMeaningfulPaint=navStartToFMPRange.duration;const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToFMPRange);samples.push({value:timeToFirstMeaningfulPaint,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),start:new RelatedEventSet(navigationStart),end:new RelatedEventSet(fmpMarkerEvent),infos:new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,start:navigationStart.start,fmp:fmpMarkerEvent.start,}]),}});}
-function addFirstMeaningfulPaintCpuTimeSample(samples,rendererHelper,navigationStart,fmpMarkerEvent,url){const navStartToFMPCpuRange=tr.b.math.Range.fromExplicitRange(navigationStart.cpuStart,fmpMarkerEvent.cpuStart);const mainThreadCpuTime=getMainThreadCpuTime(rendererHelper,navStartToFMPCpuRange);const breakdownTree=tr.metrics.sh.generateCpuTimeBreakdownTree(rendererHelper.mainThread,navStartToFMPCpuRange);samples.push({value:mainThreadCpuTime,breakdownTree,diagnostics:{breakdown:createBreakdownDiagnostic(breakdownTree),start:new RelatedEventSet(navigationStart),end:new RelatedEventSet(fmpMarkerEvent),infos:new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,start:navigationStart.start,fmp:fmpMarkerEvent.start,}]),}});}
-function getMainThreadCpuTime(rendererHelper,rangeOfInterest){let mainThreadCpuTime=0;for(const slice of rendererHelper.mainThread.sliceGroup.topLevelSlices){if(!slice.cpuDuration)continue;const sliceRange=tr.b.math.Range.fromExplicitRange(slice.cpuStart,slice.cpuStart+slice.cpuDuration);const intersection=rangeOfInterest.findIntersection(sliceRange);mainThreadCpuTime+=intersection.duration;}
-return mainThreadCpuTime;}
-function decorateInteractivitySampleWithDiagnostics_(rendererHelper,eventTimestamp,navigationStartEvent,firstMeaningfulPaintTime,domContentLoadedEndTime,url){if(eventTimestamp===undefined)return undefined;const navigationStartTime=navigationStartEvent.start;const navStartToEventTimeRange=tr.b.math.Range.fromExplicitRange(navigationStartTime,eventTimestamp);const networkEvents=getNetworkEventsInRange(rendererHelper.process,navStartToEventTimeRange);const breakdownTree=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,navStartToEventTimeRange);const breakdownDiagnostic=createBreakdownDiagnostic(breakdownTree);return{value:navStartToEventTimeRange.duration,diagnostics:tr.v.d.DiagnosticMap.fromObject({'Start':new RelatedEventSet(navigationStartEvent),'Navigation infos':new tr.v.d.GenericSet([{url,pid:rendererHelper.pid,navigationStartTime,firstMeaningfulPaintTime,domContentLoadedEndTime,eventTimestamp,}]),'Breakdown of [navStart, eventTimestamp]':breakdownDiagnostic,}),};}
-function collectLoadingMetricsForRenderer(rendererHelper){const model=rendererHelper.modelHelper.model;const frameToNavStartEvents=EventFinderUtils.getSortedMainThreadEventsByFrame(rendererHelper,'navigationStart','blink.user_timing');const firstPaintSamples=collectTimeToEvent('loading','firstPaint',rendererHelper,frameToNavStartEvents);const firstContentfulPaintSamples=collectTimeToEvent('loading','firstContentfulPaint',rendererHelper,frameToNavStartEvents);const onLoadSamples=collectTimeToEvent('blink.user_timing','loadEventStart',rendererHelper,frameToNavStartEvents);const interactiveSamples=[];const firstCpuIdleSamples=[];const firstMeaningfulPaintSamples=[];const firstMeaningfulPaintCpuTimeSamples=[];for(const expectation of model.userModel.expectations){if(!(expectation instanceof tr.model.um.LoadExpectation))continue;if(shouldIgnoreURL(expectation.url))continue;if(expectation.renderProcess.pid!==rendererHelper.pid)continue;if(expectation.fmpEvent!==undefined){addFirstMeaningfulPaintSample(firstMeaningfulPaintSamples,rendererHelper,expectation.navigationStart,expectation.fmpEvent,expectation.url);addFirstMeaningfulPaintCpuTimeSample(firstMeaningfulPaintCpuTimeSamples,rendererHelper,expectation.navigationStart,expectation.fmpEvent,expectation.url);}
-if(expectation.firstCpuIdleTime!==undefined){firstCpuIdleSamples.push(decorateInteractivitySampleWithDiagnostics_(rendererHelper,expectation.firstCpuIdleTime,expectation.navigationStart,expectation.fmpEvent.start,expectation.domContentLoadedEndEvent.start,expectation.url));}
-if(expectation.timeToInteractive!==undefined){interactiveSamples.push(decorateInteractivitySampleWithDiagnostics_(rendererHelper,expectation.timeToInteractive,expectation.navigationStart,expectation.fmpEvent.start,expectation.domContentLoadedEndEvent.start,expectation.url));}}
-return{firstPaintSamples,firstContentfulPaintSamples,onLoadSamples,firstMeaningfulPaintSamples,firstMeaningfulPaintCpuTimeSamples,firstCpuIdleSamples,interactiveSamples,};}
-function addSamplesToHistogram(samples,histogram,histograms){for(const sample of samples){histogram.addSample(sample.value,sample.diagnostics);if(histogram.name!=='timeToFirstContentfulPaint')continue;if(!sample.breakdownTree)continue;for(const[category,breakdown]of Object.entries(sample.breakdownTree)){const relatedName=`${histogram.name}:${category}`;let relatedHist=histograms.getHistogramsNamed(relatedName)[0];if(!relatedHist){relatedHist=histograms.createHistogram(relatedName,histogram.unit,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,summaryOptions:{count:false,max:false,min:false,sum:false,},});let relatedNames=histogram.diagnostics.get('breakdown');if(!relatedNames){relatedNames=new tr.v.d.RelatedNameMap();histogram.diagnostics.set('breakdown',relatedNames);}
-relatedNames.set(category,relatedName);}
-relatedHist.addSample(breakdown.total,{breakdown:tr.v.d.Breakdown.fromEntries(Object.entries(breakdown.events)),});}}}
-function loadingMetric(histograms,model){const firstPaintHistogram=histograms.createHistogram('timeToFirstPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first paint',summaryOptions:SUMMARY_OPTIONS,});const firstContentfulPaintHistogram=histograms.createHistogram('timeToFirstContentfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first contentful paint',summaryOptions:SUMMARY_OPTIONS,});const onLoadHistogram=histograms.createHistogram('timeToOnload',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to onload. '+'This is temporary metric used for PCv1/v2 sanity checking',summaryOptions:SUMMARY_OPTIONS,});const firstMeaningfulPaintHistogram=histograms.createHistogram('timeToFirstMeaningfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'time to first meaningful paint',summaryOptions:SUMMARY_OPTIONS,});const firstMeaningfulPaintCpuTimeHistogram=histograms.createHistogram('cpuTimeToFirstMeaningfulPaint',timeDurationInMs_smallerIsBetter,[],{binBoundaries:LOADING_METRIC_BOUNDARIES,description:'CPU time to first meaningful paint',summaryOptions:SUMMARY_OPTIONS,});const timeToInteractiveHistogram=histograms.createHistogram('timeToInteractive',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time to Interactive',summaryOptions:SUMMARY_OPTIONS,});const timeToFirstCpuIdleHistogram=histograms.createHistogram('timeToFirstCpuIdle',timeDurationInMs_smallerIsBetter,[],{binBoundaries:TIME_TO_INTERACTIVE_BOUNDARIES,description:'Time to First CPU Idle',summaryOptions:SUMMARY_OPTIONS,});const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const pid in chromeHelper.rendererHelpers){const rendererHelper=chromeHelper.rendererHelpers[pid];if(rendererHelper.isChromeTracingUI)continue;const samplesSet=collectLoadingMetricsForRenderer(rendererHelper);addSamplesToHistogram(samplesSet.firstPaintSamples,firstPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstContentfulPaintSamples,firstContentfulPaintHistogram,histograms);addSamplesToHistogram(samplesSet.onLoadSamples,onLoadHistogram,histograms);addSamplesToHistogram(samplesSet.firstMeaningfulPaintSamples,firstMeaningfulPaintHistogram,histograms);addSamplesToHistogram(samplesSet.firstMeaningfulPaintCpuTimeSamples,firstMeaningfulPaintCpuTimeHistogram,histograms);addSamplesToHistogram(samplesSet.interactiveSamples,timeToInteractiveHistogram,histograms);addSamplesToHistogram(samplesSet.firstCpuIdleSamples,timeToFirstCpuIdleHistogram,histograms);}}
-tr.metrics.MetricRegistry.register(loadingMetric);return{loadingMetric,getNetworkEventsInRange,collectLoadingMetricsForRenderer,};});'use strict';tr.exportTo('tr.metrics',function(){const SPA_NAVIGATION_START_TO_FIRST_PAINT_DURATION_BIN_BOUNDARY=tr.v.HistogramBinBoundaries.createExponential(1,1000,50);function spaNavigationMetric(histograms,model){const histogram=new tr.v.Histogram('spaNavigationStartToFpDuration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,SPA_NAVIGATION_START_TO_FIRST_PAINT_DURATION_BIN_BOUNDARY);histogram.description='Latency between the input event causing'+' a SPA navigation and the first paint event after it';histogram.customizeSummaryOptions({count:false,sum:false,});const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(!modelHelper){return;}
-const rendererHelpers=modelHelper.rendererHelpers;if(!rendererHelpers){return;}
-const browserHelper=modelHelper.browserHelper;for(const rendererHelper of Object.values(rendererHelpers)){const spaNavigations=tr.metrics.findSpaNavigationsOnRenderer(rendererHelper,browserHelper);for(const spaNav of spaNavigations){let beginTs=0;if(spaNav.navStartCandidates.inputLatencyAsyncSlice){const beginData=spaNav.navStartCandidates.inputLatencyAsyncSlice.args.data;beginTs=model.convertTimestampToModelTime('traceEventClock',beginData.INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT.time);}else{beginTs=spaNav.navStartCandidates.goToIndexSlice.start;}
-const rangeOfInterest=tr.b.math.Range.fromExplicitRange(beginTs,spaNav.firstPaintEvent.start);const networkEvents=tr.metrics.sh.getNetworkEventsInRange(rendererHelper.process,rangeOfInterest);const breakdownDict=tr.metrics.sh.generateWallClockTimeBreakdownTree(rendererHelper.mainThread,networkEvents,rangeOfInterest);const breakdownDiagnostic=new tr.v.d.Breakdown();breakdownDiagnostic.colorScheme=tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER;for(const label in breakdownDict){breakdownDiagnostic.set(label,parseInt(breakdownDict[label].total*1e3)/1e3);}
-histogram.addSample(rangeOfInterest.duration,{'Breakdown of [navStart, firstPaint]':breakdownDiagnostic,'Start':new tr.v.d.RelatedEventSet(spaNav.navigationStart),'End':new tr.v.d.RelatedEventSet(spaNav.firstPaintEvent),'Navigation infos':new tr.v.d.GenericSet([{url:spaNav.url,pid:rendererHelper.pid,navStart:beginTs,firstPaint:spaNav.firstPaintEvent.start}]),});}}
-histograms.addHistogram(histogram);}
-tr.metrics.MetricRegistry.register(spaNavigationMetric);return{spaNavigationMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const LATENCY_BOUNDS=tr.v.HistogramBinBoundaries.createLinear(0,20,100);function clockSyncLatencyMetric(values,model){const domains=Array.from(model.clockSyncManager.domainsSeen).sort();for(let i=0;i<domains.length;i++){for(let j=i+1;j<domains.length;j++){const latency=model.clockSyncManager.getTimeTransformerError(domains[i],domains[j]);const hist=new tr.v.Histogram('clock_sync_latency_'+
-domains[i].toLowerCase()+'_to_'+domains[j].toLowerCase(),tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,LATENCY_BOUNDS);hist.customizeSummaryOptions({avg:true,count:false,max:false,min:false,std:false,sum:false,});hist.description='Clock sync latency for domain '+domains[i]+' to domain '+domains[j];hist.addSample(latency);values.addHistogram(hist);}}}
-tr.metrics.MetricRegistry.register(clockSyncLatencyMetric);return{clockSyncLatencyMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const CPU_TIME_PERCENTAGE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(0.01,50,200);function cpuTimeMetric(histograms,model,opt_options){let rangeOfInterest=model.bounds;if(opt_options&&opt_options.rangeOfInterest){rangeOfInterest=opt_options.rangeOfInterest;}else{const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(chromeHelper){const chromeBounds=chromeHelper.chromeBounds;if(chromeBounds){rangeOfInterest=chromeBounds;}}}
-let allProcessCpuTime=0;for(const pid in model.processes){const process=model.processes[pid];if(tr.model.helpers.ChromeRendererHelper.isTracingProcess(process)){continue;}
-let processCpuTime=0;for(const tid in process.threads){const thread=process.threads[tid];let threadCpuTime=0;thread.sliceGroup.topLevelSlices.forEach(function(slice){if(slice.duration===0)return;if(!slice.cpuDuration)return;const sliceRange=tr.b.math.Range.fromExplicitRange(slice.start,slice.end);const intersection=rangeOfInterest.findIntersection(sliceRange);const fractionOfSliceInsideRangeOfInterest=intersection.duration/slice.duration;threadCpuTime+=slice.cpuDuration*fractionOfSliceInsideRangeOfInterest;});processCpuTime+=threadCpuTime;}
-allProcessCpuTime+=processCpuTime;}
-let normalizedAllProcessCpuTime=0;if(rangeOfInterest.duration>0){normalizedAllProcessCpuTime=allProcessCpuTime/rangeOfInterest.duration;}
-const unit=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const cpuTimeHist=new tr.v.Histogram('cpu_time_percentage',unit,CPU_TIME_PERCENTAGE_BOUNDARIES);cpuTimeHist.description='Percent CPU utilization, normalized against a single core. Can be '+'greater than 100% if machine has multiple cores.';cpuTimeHist.customizeSummaryOptions({avg:true,count:false,max:false,min:false,std:false,sum:false});cpuTimeHist.addSample(normalizedAllProcessCpuTime);histograms.addHistogram(cpuTimeHist);}
-tr.metrics.MetricRegistry.register(cpuTimeMetric,{supportsRangeOfInterest:true});return{cpuTimeMetric,};});'use strict';tr.exportTo('tr.v.d',function(){function addRelatedNames(histograms){for(const hist of histograms){const relatedNames=new Set();for(const[name,diagnostic]of hist.diagnostics){if(diagnostic instanceof tr.v.d.RelatedHistogramMap){for(const[relationshipName,relatedHist]of diagnostic){relatedNames.add(relatedHist.name);}}}
-if(relatedNames.size){hist.diagnostics.set(tr.v.d.RESERVED_NAMES.RELATED_NAMES,new tr.v.d.GenericSet(relatedNames));}}}
-return{addRelatedNames,};});'use strict';tr.exportTo('tr.v',function(){class HistogramGrouping{constructor(key,callback){this.key_=key;this.callback_=callback;HistogramGrouping.BY_KEY.set(key,this);}
-get key(){return this.key_;}
-get callback(){return this.callback_;}
-get label(){return this.key;}
-static buildFromTags(tags,diagnosticName){const booleanTags=new Set();const keyValueTags=new Set();for(const tag of tags){if(tag.includes(':')){const key=tag.split(':')[0];if(booleanTags.has(key)){throw new Error(`Tag "${key}" cannot be both boolean and key-value`);}
-keyValueTags.add(key);}else{if(keyValueTags.has(tag)){throw new Error(`Tag "${tag}" cannot be both boolean and key-value`);}
-booleanTags.add(tag);}}
-const groupings=[];for(const tag of booleanTags){groupings.push(HistogramGrouping.buildBooleanTagGrouping_(tag,diagnosticName));}
-for(const tag of keyValueTags){groupings.push(HistogramGrouping.buildKeyValueTagGrouping_(tag,diagnosticName));}
-return groupings;}
-static buildBooleanTagGrouping_(tag,diagnosticName){return new HistogramGrouping(`${tag}Tag`,h=>{const tags=h.diagnostics.get(diagnosticName);if(tags===undefined||!tags.has(tag))return`~${tag}`;return tag;});}
-static buildKeyValueTagGrouping_(tag,diagnosticName){return new HistogramGrouping(`${tag}Tag`,h=>{const tags=h.diagnostics.get(diagnosticName);if(tags===undefined)return`~${tag}`;const values=new Set();for(const value of tags){const kvp=value.split(':');if(kvp.length<2||kvp[0]!==tag)continue;values.add(kvp[1]);}
-if(values.size===0)return`~${tag}`;const sortedValues=Array.from(values);sortedValues.sort();return sortedValues.join(',');},`${tag} tag`);}}
-HistogramGrouping.BY_KEY=new Map();HistogramGrouping.HISTOGRAM_NAME=new HistogramGrouping('name',h=>h.name);HistogramGrouping.DISPLAY_LABEL=new HistogramGrouping('displayLabel',hist=>{const labels=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.LABELS);if(labels!==undefined&&labels.size>0){return Array.from(labels).join(',');}
-const benchmarks=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.BENCHMARKS);const start=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.BENCHMARK_START);if(benchmarks===undefined){if(start===undefined)return'Value';return start.toString();}
-const benchmarksStr=Array.from(benchmarks).join('\n');if(start===undefined)return benchmarksStr;return benchmarksStr+'\n'+start.toString();});class GenericSetGrouping extends HistogramGrouping{constructor(name){super(name,undefined);this.callback_=this.compute_.bind(this);}
-compute_(hist){const diag=hist.diagnostics.get(this.key);if(diag===undefined)return'';const parts=Array.from(diag);parts.sort();return parts.join(',');}}
-GenericSetGrouping.NAMES=[tr.v.d.RESERVED_NAMES.ARCHITECTURES,tr.v.d.RESERVED_NAMES.BENCHMARKS,tr.v.d.RESERVED_NAMES.BOTS,tr.v.d.RESERVED_NAMES.BUILDS,tr.v.d.RESERVED_NAMES.DEVICE_IDS,tr.v.d.RESERVED_NAMES.MASTERS,tr.v.d.RESERVED_NAMES.MEMORY_AMOUNTS,tr.v.d.RESERVED_NAMES.OS_NAMES,tr.v.d.RESERVED_NAMES.OS_VERSIONS,tr.v.d.RESERVED_NAMES.PRODUCT_VERSIONS,tr.v.d.RESERVED_NAMES.STORIES,tr.v.d.RESERVED_NAMES.STORYSET_REPEATS,tr.v.d.RESERVED_NAMES.STORY_TAGS,];for(const name of GenericSetGrouping.NAMES){new GenericSetGrouping(name);}
-class DateRangeGrouping extends HistogramGrouping{constructor(name){super(name,undefined);this.callback_=this.compute_.bind(this);}
-compute_(hist){const diag=hist.diagnostics.get(this.key);if(diag===undefined)return'';return diag.toString();}}
-DateRangeGrouping.NAMES=[tr.v.d.RESERVED_NAMES.BENCHMARK_START,tr.v.d.RESERVED_NAMES.TRACE_START,];for(const name of DateRangeGrouping.NAMES){new DateRangeGrouping(name);}
-return{HistogramGrouping,GenericSetGrouping,DateRangeGrouping,};});'use strict';tr.exportTo('tr.v',function(){class HistogramSet{constructor(opt_histograms){this.histogramsByGuid_=new Map();this.sharedDiagnosticsByGuid_=new Map();if(opt_histograms!==undefined){for(const hist of opt_histograms){this.addHistogram(hist);}}}
-createHistogram(name,unit,samples,opt_options){const hist=tr.v.Histogram.create(name,unit,samples,opt_options);this.addHistogram(hist);return hist;}
-addHistogram(hist,opt_diagnostics){if(this.histogramsByGuid_.has(hist.guid)){throw new Error('Cannot add same Histogram twice');}
-if(opt_diagnostics!==undefined){if(!(opt_diagnostics instanceof Map)){opt_diagnostics=Object.entries(opt_diagnostics);}
-for(const[name,diagnostic]of opt_diagnostics){hist.diagnostics.set(name,diagnostic);}}
-this.histogramsByGuid_.set(hist.guid,hist);}
-addSharedDiagnosticToAllHistograms(name,diagnostic){this.addSharedDiagnostic(diagnostic);for(const hist of this){hist.diagnostics.set(name,diagnostic);}}
-addSharedDiagnostic(diagnostic){this.sharedDiagnosticsByGuid_.set(diagnostic.guid,diagnostic);}
-get length(){return this.histogramsByGuid_.size;}*[Symbol.iterator](){for(const hist of this.histogramsByGuid_.values()){yield hist;}}
-getHistogramsNamed(name){return[...this].filter(h=>h.name===name);}
-getHistogramNamed(name){const histograms=this.getHistogramsNamed(name);if(histograms.length===0)return undefined;if(histograms.length>1){throw new Error(`Unexpectedly found multiple histograms named "${name}"`);}
-return histograms[0];}
-lookupHistogram(guid){return this.histogramsByGuid_.get(guid);}
-lookupDiagnostic(guid){return this.sharedDiagnosticsByGuid_.get(guid);}
-resolveRelatedHistograms(){const handleDiagnosticMap=dm=>{for(const[name,diagnostic]of dm){if(diagnostic instanceof tr.v.d.RelatedHistogramMap){diagnostic.resolve(this);}}};for(const hist of this){handleDiagnosticMap(hist.diagnostics);for(const dm of hist.nanDiagnosticMaps){handleDiagnosticMap(dm);}
-for(const bin of hist.allBins){for(const dm of bin.diagnosticMaps){handleDiagnosticMap(dm);}}}}
-importDicts(dicts){for(const dict of dicts){if(dict.type&&tr.v.d.Diagnostic.findTypeInfoWithName(dict.type)){this.sharedDiagnosticsByGuid_.set(dict.guid,tr.v.d.Diagnostic.fromDict(dict));}else{const hist=tr.v.Histogram.fromDict(dict);this.addHistogram(hist);hist.diagnostics.resolveSharedDiagnostics(this,true);}}}
-asDicts(){const dicts=[];for(const diagnostic of this.sharedDiagnosticsByGuid_.values()){dicts.push(diagnostic.asDict());}
-for(const hist of this){dicts.push(hist.asDict());}
-return dicts;}
-get sourceHistograms(){const diagnosticNames=new Set();for(const hist of this){for(const diagnostic of hist.diagnostics.values()){if(!(diagnostic instanceof tr.v.d.RelatedNameMap))continue;for(const name of diagnostic.values()){diagnosticNames.add(name);}}}
-const sourceHistograms=new Map();for(const hist of this){if(!diagnosticNames.has(hist.name)){sourceHistograms.set(hist.guid,hist);}}
-function deleteSourceHistograms(diagnosticMap){for(const[name,diagnostic]of diagnosticMap){if(diagnostic instanceof tr.v.d.RelatedHistogramMap){for(const[name,relatedHist]of diagnostic){sourceHistograms.delete(relatedHist.guid);}}}}
-for(const hist of this){deleteSourceHistograms(hist.diagnostics);for(const dm of hist.nanDiagnosticMaps){deleteSourceHistograms(dm);}
-for(const b of hist.allBins){for(const dm of b.diagnosticMaps){deleteSourceHistograms(dm);}}}
-return new HistogramSet([...sourceHistograms.values()]);}
-groupHistogramsRecursively(groupings,opt_skipGroupingCallback){function recurse(histograms,level){if(level===groupings.length){return histograms;}
-const grouping=groupings[level];const groupedHistograms=tr.b.groupIntoMap(histograms,grouping.callback);if(opt_skipGroupingCallback&&opt_skipGroupingCallback(grouping,groupedHistograms)){return recurse(histograms,level+1);}
-for(const[key,group]of groupedHistograms){groupedHistograms.set(key,recurse(group,level+1));}
-return groupedHistograms;}
-return recurse([...this],0);}
-deduplicateDiagnostics(){const namesToCandidates=new Map();const diagnosticsToHistograms=new Map();for(const hist of this){for(const[name,candidate]of hist.diagnostics){if(candidate.equals===undefined){this.sharedDiagnosticsByGuid_.set(candidate.guid,candidate);continue;}
-if(diagnosticsToHistograms.get(candidate)===undefined){diagnosticsToHistograms.set(candidate,[hist]);}else{diagnosticsToHistograms.get(candidate).push(hist);}
-if(!namesToCandidates.has(name)){namesToCandidates.set(name,new Set());}
-namesToCandidates.get(name).add(candidate);}}
-for(const[name,candidates]of namesToCandidates){const deduplicatedDiagnostics=new Set();for(const candidate of candidates){let found=false;for(const test of deduplicatedDiagnostics){if(candidate.equals(test)){const hists=diagnosticsToHistograms.get(candidate);for(const hist of hists){hist.diagnostics.set(name,test);}
-found=true;break;}}
-if(!found){deduplicatedDiagnostics.add(candidate);}
-for(const diagnostic of deduplicatedDiagnostics){this.sharedDiagnosticsByGuid_.set(diagnostic.guid,diagnostic);}}}}
-buildGroupingsFromTags(names){const tags=new Map();for(const hist of this){for(const name of names){if(!hist.diagnostics.has(name))continue;if(!tags.has(name))tags.set(name,new Set());for(const tag of hist.diagnostics.get(name)){tags.get(name).add(tag);}}}
-const groupings=[];for(const[name,values]of tags){const built=tr.v.HistogramGrouping.buildFromTags(values,name);for(const grouping of built){groupings.push(grouping);}}
-return groupings;}
-mergeRelationships(){for(const hist of this){hist.diagnostics.mergeRelationships(hist);}}}
-return{HistogramSet,};});'use strict';tr.exportTo('tr.e.chrome',function(){function hasTitleAndCategory(event,title,category){return event.title===title&&event.category&&tr.b.getCategoryParts(event.category).includes(category);}
-function getNavStartTimestamps(rendererHelper){const navStartTimestamps=[];for(const e of rendererHelper.mainThread.sliceGroup.childEvents()){if(hasTitleAndCategory(e,'navigationStart','blink.user_timing')){navStartTimestamps.push(e.start);}}
-return navStartTimestamps;}
-function getInteractiveTimestamps(model){const interactiveTimestampsMap=new Map();const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const timestamps=[];interactiveTimestampsMap.set(rendererHelper.pid,timestamps);const samples=tr.metrics.sh.collectLoadingMetricsForRenderer(rendererHelper).interactiveSamples;for(const sample of samples){timestamps.push(tr.b.getOnlyElement(sample.diagnostics.get('Navigation infos')).eventTimestamp);}}
-return interactiveTimestampsMap;}
-function getPostInteractiveTaskWindows(interactiveTimestamps,navStartTimestamps,traceEndTimestamp){let navStartTsIndex=0;let lastTaskWindowEndTs=undefined;const taskWindows=[];for(const currTTI of interactiveTimestamps){while(navStartTsIndex<navStartTimestamps.length&&navStartTimestamps[navStartTsIndex]<currTTI){navStartTsIndex++;}
-const taskWindowEndTs=navStartTsIndex<navStartTimestamps.length?navStartTimestamps[navStartTsIndex]:traceEndTimestamp;if(taskWindowEndTs===lastTaskWindowEndTs){throw Error('Encountered two consecutive interactive timestamps '+'with no navigationStart between them. '+'PostInteractiveTaskWindow is not well defined in this case.');}
-taskWindows.push(tr.b.math.Range.fromExplicitRange(currTTI,taskWindowEndTs));lastTaskWindowEndTs=taskWindowEndTs;}
-return taskWindows;}
-function contributionToEQT(window,task){const startInWindow=Math.max(window.min,task.start);const endInWindow=Math.min(window.max,task.end);const durationInWindow=endInWindow-startInWindow;if(durationInWindow<=0)return 0;const probabilityOfTask=durationInWindow/(window.max-window.min);const minQueueingTime=task.end-endInWindow;const maxQueueingTime=task.end-startInWindow;const expectedQueueingTimeDueToTask=(maxQueueingTime+minQueueingTime)/2;return probabilityOfTask*expectedQueueingTimeDueToTask;}
-function weightedExpectedQueueingTime(window,weightedTasks){let result=0;for(const task of weightedTasks){result+=contributionToEQT(window,task)*task.weight;}
-return result;}
-function expectedQueueingTime(window,tasks){return weightedExpectedQueueingTime(window,tasks.map(function(task){return{start:task.start,end:task.end,weight:1};}));}
-class SlidingWindow{constructor(startTime,windowSize,sortedTasks){this.windowSize_=windowSize;this.sortedTasks_=sortedTasks;this.range_=tr.b.math.Range.fromExplicitRange(startTime,startTime+windowSize);this.firstTaskIndex_=sortedTasks.findIndex(task=>startTime<task.end);if(this.firstTaskIndex_===-1){this.firstTaskIndex_=sortedTasks.length;}
-this.lastTaskIndex_=-1;while(this.lastTaskIndex_+1<sortedTasks.length&&sortedTasks[this.lastTaskIndex_+1].start<startTime+windowSize){this.lastTaskIndex_++;}
-this.innerEQT_=0;for(let i=this.firstTaskIndex_+1;i<this.lastTaskIndex_;i++){this.innerEQT_+=contributionToEQT(this.range_,sortedTasks[i]);}}
-get getEQT(){let firstTaskEQT=0;if(this.firstTaskIndex_<this.sortedTasks_.length){firstTaskEQT=contributionToEQT(this.range_,this.sortedTasks_[this.firstTaskIndex_]);}
-let lastTaskEQT=0;if(this.firstTaskIndex_<this.lastTaskIndex_){lastTaskEQT=contributionToEQT(this.range_,this.sortedTasks_[this.lastTaskIndex_]);}
-return firstTaskEQT+this.innerEQT_+lastTaskEQT;}
-slide(t){this.range_=tr.b.math.Range.fromExplicitRange(t,t+this.windowSize_);if(this.firstTaskIndex_<this.sortedTasks_.length&&this.sortedTasks_[this.firstTaskIndex_].end<=t){this.firstTaskIndex_++;if(this.firstTaskIndex_<this.lastTaskIndex_){this.innerEQT_-=contributionToEQT(this.range_,this.sortedTasks_[this.firstTaskIndex_]);}}
-if(this.lastTaskIndex_+1<this.sortedTasks_.length&&this.sortedTasks_[this.lastTaskIndex_+1].start<t+this.windowSize_){if(this.firstTaskIndex_<this.lastTaskIndex_){this.innerEQT_+=contributionToEQT(this.range_,this.sortedTasks_[this.lastTaskIndex_]);}
-this.lastTaskIndex_++;}}}
-function maxExpectedQueueingTimeInSlidingWindow(startTime,endTime,windowSize,tasks){if(windowSize<=0){throw Error('The window size must be positive number');}
-if(startTime+windowSize>endTime){throw Error('The sliding window must fit in the specified time range');}
-const sortedTasks=tasks.slice().sort((a,b)=>a.start-b.start);for(let i=1;i<sortedTasks.length;i++){const PRECISION_MS=0.1;if(sortedTasks[i-1].end>sortedTasks[i].start+PRECISION_MS){throw Error('Tasks must not overlap');}
-if(sortedTasks[i-1].end>sortedTasks[i].start){const midpoint=(sortedTasks[i-1].end+sortedTasks[i].start)/2;sortedTasks[i-1].end=midpoint;sortedTasks[i].start=midpoint;}}
-let endpoints=[];endpoints.push(startTime);endpoints.push(endTime-windowSize);for(const task of tasks){endpoints.push(task.start-windowSize);endpoints.push(task.start);endpoints.push(task.end-windowSize);endpoints.push(task.end);}
-endpoints=endpoints.filter(x=>(startTime<=x&&x+windowSize<=endTime));endpoints.sort((a,b)=>a-b);const slidingWindow=new SlidingWindow(endpoints[0],windowSize,sortedTasks);let maxEQT=0;for(const t of endpoints){slidingWindow.slide(t);maxEQT=Math.max(maxEQT,slidingWindow.getEQT);}
-return maxEQT;}
-return{getPostInteractiveTaskWindows,getNavStartTimestamps,getInteractiveTimestamps,expectedQueueingTime,maxExpectedQueueingTimeInSlidingWindow,weightedExpectedQueueingTime};});'use strict';tr.exportTo('tr.metrics.sh',function(){const WINDOW_SIZE_MS=500;const EQT_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(0.01,WINDOW_SIZE_MS,50);function containsForcedGC_(slice){return slice.findTopmostSlicesRelativeToThisSlice(tr.metrics.v8.utils.isForcedGarbageCollectionEvent).length>0;}
-function createHistogramForEQT_(name,description){const histogram=new tr.v.Histogram(name,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,EQT_BOUNDARIES);histogram.customizeSummaryOptions({avg:false,count:false,max:true,min:false,std:false,sum:false,});histogram.description=description;return histogram;}
-function expectedQueueingTimeMetric(histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const rendererHelpers=Object.values(chromeHelper.rendererHelpers);const rendererToInteractiveTimestamps=tr.e.chrome.getInteractiveTimestamps(model);addExpectedQueueingTimeMetric_('renderer_eqt',event=>{return{start:event.start,duration:event.duration};},false,rendererHelpers,rendererToInteractiveTimestamps,histograms,model);addExpectedQueueingTimeMetric_('renderer_eqt_cpu',event=>{return{start:event.cpuStart,duration:event.cpuDuration};},true,rendererHelpers,rendererToInteractiveTimestamps,histograms,model);}
-function addExpectedQueueingTimeMetric_(eqtName,getEventTimes,isCpuTime,rendererHelpers,rendererToInteractiveTimestamps,histograms,model){function getTasks(rendererHelper){const tasks=[];for(const slice of rendererHelper.mainThread.sliceGroup.topLevelSlices){const times=getEventTimes(slice);if(times.duration>0&&!containsForcedGC_(slice)){tasks.push({start:times.start,end:times.start+times.duration});}}
-return tasks;}
-const totalHistogram=createHistogramForEQT_(`total:${WINDOW_SIZE_MS}ms_window:${eqtName}`,`The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window`+' for a given renderer');const interactiveHistogram=createHistogramForEQT_(`interactive:${WINDOW_SIZE_MS}ms_window:${eqtName}`,`The maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window`+' for a given renderer while the page is interactive');for(const rendererHelper of rendererHelpers){if(rendererHelper.isChromeTracingUI)continue;if(rendererHelper.mainThread.bounds.duration<WINDOW_SIZE_MS)continue;const tasks=getTasks(rendererHelper);totalHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(rendererHelper.mainThread.bounds.min,rendererHelper.mainThread.bounds.max,WINDOW_SIZE_MS,tasks));const interactiveTimestamps=rendererToInteractiveTimestamps.get(rendererHelper.pid);if(interactiveTimestamps.length===0)continue;if(interactiveTimestamps.length>1){continue;}
-const interactiveWindow=tr.b.math.Range.fromExplicitRange(interactiveTimestamps[0],Infinity).findIntersection(rendererHelper.mainThread.bounds);interactiveHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(interactiveWindow.min,interactiveWindow.max,WINDOW_SIZE_MS,tasks));}
-addV8ContributionToExpectedQueueingTime_(eqtName,getEventTimes,isCpuTime,totalHistogram,interactiveHistogram,rendererToInteractiveTimestamps,histograms,model);histograms.addHistogram(totalHistogram);histograms.addHistogram(interactiveHistogram);}
-function addV8ContributionToExpectedQueueingTime_(eqtName,getEventTimes,isCpuTime,totalEqtHistogram,interactiveEqtHistogram,rendererToInteractiveTimestamps,histograms,model){if(!model.categories.includes('v8'))return;const breakdownForTotal=new tr.v.d.RelatedHistogramMap();const breakdownForInteractive=new tr.v.d.RelatedHistogramMap();const eventNamesWithTaskExtractors=getV8EventNamesWithTaskExtractors_(getEventTimes);if(!isCpuTime){const taskExtractorsUsingRCS=getV8EventNamesWithTaskExtractorsUsingRCS_(getEventTimes);for(const[eventName,getTasks]of taskExtractorsUsingRCS){eventNamesWithTaskExtractors.set(eventName,getTasks);}}
-for(const[eventName,getTasks]of eventNamesWithTaskExtractors){const contribution=contributionToExpectedQueueingTime_(eqtName,eventName,getTasks,rendererToInteractiveTimestamps,histograms,model);breakdownForTotal.set(eventName,contribution.total);breakdownForInteractive.set(eventName,contribution.interactive);}
-totalEqtHistogram.diagnostics.set('v8',breakdownForTotal);interactiveEqtHistogram.diagnostics.set('v8',breakdownForInteractive);}
-function getV8EventNamesWithTaskExtractors_(getEventTimes,cpuMetrics){function durationOfTopmostSubSlices(slice,predicate,excludePredicate){let duration=0;for(const sub of slice.findTopmostSlicesRelativeToThisSlice(predicate)){duration+=getEventTimes(sub).duration;if(excludePredicate!==null&&excludePredicate!==undefined){duration-=durationOfTopmostSubSlices(sub,excludePredicate);}}
-return duration;}
-function taskExtractor(predicate,excludePredicate){return function(rendererHelper){const slices=rendererHelper.mainThread.sliceGroup.topLevelSlices;const result=[];for(const slice of slices){const times=getEventTimes(slice);if(times.duration>0&&!containsForcedGC_(slice)){const duration=durationOfTopmostSubSlices(slice,predicate,excludePredicate);result.push({start:times.start,end:times.start+duration});}}
-return result;};}
-return new Map([['v8',taskExtractor(tr.metrics.v8.utils.isV8Event)],['v8:execute',taskExtractor(tr.metrics.v8.utils.isV8ExecuteEvent)],['v8:gc',taskExtractor(tr.metrics.v8.utils.isGarbageCollectionEvent)],['v8:gc:full-mark-compactor',taskExtractor(tr.metrics.v8.utils.isFullMarkCompactorEvent)],['v8:gc:incremental-marking',taskExtractor(tr.metrics.v8.utils.isIncrementalMarkingEvent)],['v8:gc:latency-mark-compactor',taskExtractor(tr.metrics.v8.utils.isLatencyMarkCompactorEvent)],['v8:gc:memory-mark-compactor',taskExtractor(tr.metrics.v8.utils.isMemoryMarkCompactorEvent)],['v8:gc:scavenger',taskExtractor(tr.metrics.v8.utils.isScavengerEvent)]]);}
-function extractTaskRCS(getEventTimes,predicate,rendererHelper){const result=[];for(const topSlice of
-rendererHelper.mainThread.sliceGroup.topLevelSlices){const times=getEventTimes(topSlice);if(times.duration<=0||containsForcedGC_(topSlice)){continue;}
-const v8ThreadSlices=[];for(const slice of topSlice.descendentSlices){if(tr.metrics.v8.utils.isV8RCSEvent(slice)){v8ThreadSlices.push(slice);}}
-const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(v8ThreadSlices);let duration=0;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){if(predicate(runtimeGroup.name)){duration+=runtimeGroup.time;}}
-duration=tr.b.convertUnit(duration,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);result.push({start:times.start,end:times.start+duration});}
-return result;}
-function getV8EventNamesWithTaskExtractorsUsingRCS_(getEventTimes){const extractors=new Map();extractors.set('v8:compile_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileRCSCategory,rendererHelper));extractors.set('v8:compile:optimize_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileOptimizeRCSCategory,rendererHelper));extractors.set('v8:compile:parse_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileParseRCSCategory,rendererHelper));extractors.set('v8:compile:compile-unoptimize_rcs',rendererHelper=>extractTaskRCS(getEventTimes,tr.metrics.v8.utils.isCompileUnoptimizeRCSCategory,rendererHelper));return extractors;}
-function contributionToExpectedQueueingTime_(eqtName,eventName,getTasks,rendererToInteractiveTimestamps,histograms,model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const totalHistogram=createHistogramForEQT_(`total:${WINDOW_SIZE_MS}ms_window:${eqtName}:${eventName}`,`Contribution to the expected queueing time by ${eventName}`+' for a given renderer. It is computed as the maximum EQT in'+` a ${WINDOW_SIZE_MS}ms sliding window after shrinking top-level`+` tasks to contain only ${eventName} subevents`);const interactiveHistogram=createHistogramForEQT_(`interactive:${WINDOW_SIZE_MS}ms_window:${eqtName}:${eventName}`,`Contribution to the expected queueing time by ${eventName}`+' for a given renderer while the page is interactive. It is computed'+` as the maximum EQT in a ${WINDOW_SIZE_MS}ms sliding window after`+` shrinking top-level tasks to contain only ${eventName} subevents`);const rendererHelpers=Object.values(chromeHelper.rendererHelpers);for(const rendererHelper of rendererHelpers){if(rendererHelper.isChromeTracingUI)continue;const tasks=getTasks(rendererHelper);totalHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(rendererHelper.mainThread.bounds.min,rendererHelper.mainThread.bounds.max,WINDOW_SIZE_MS,tasks));const interactiveTimestamps=rendererToInteractiveTimestamps.get(rendererHelper.pid);if(interactiveTimestamps.length===0)continue;if(interactiveTimestamps.length>1){continue;}
-const interactiveWindow=tr.b.math.Range.fromExplicitRange(interactiveTimestamps[0],Infinity).findIntersection(rendererHelper.mainThread.bounds);interactiveHistogram.addSample(tr.e.chrome.maxExpectedQueueingTimeInSlidingWindow(interactiveWindow.min,interactiveWindow.max,WINDOW_SIZE_MS,tasks));}
-histograms.addHistogram(totalHistogram);histograms.addHistogram(interactiveHistogram);return{total:totalHistogram,interactive:interactiveHistogram};}
-tr.metrics.MetricRegistry.register(expectedQueueingTimeMetric);return{expectedQueueingTimeMetric,};});'use strict';tr.exportTo('tr.b',function(){function MultiDimensionalViewNode(title,valueCount){this.title=title;const dimensions=title.length;this.children=new Array(dimensions);for(let i=0;i<dimensions;i++){this.children[i]=new Map();}
-this.values=new Array(valueCount);for(let v=0;v<valueCount;v++){this.values[v]={self:0,total:0,totalState:NOT_PROVIDED};}}
-MultiDimensionalViewNode.TotalState={NOT_PROVIDED:0,LOWER_BOUND:1,EXACT:2};const NOT_PROVIDED=MultiDimensionalViewNode.TotalState.NOT_PROVIDED;const LOWER_BOUND=MultiDimensionalViewNode.TotalState.LOWER_BOUND;const EXACT=MultiDimensionalViewNode.TotalState.EXACT;MultiDimensionalViewNode.prototype={get subRows(){return Array.from(this.children[0].values());}};function MultiDimensionalViewBuilder(dimensions,valueCount){if(typeof(dimensions)!=='number'||dimensions<0){throw new Error('Dimensions must be a non-negative number');}
-this.dimensions_=dimensions;if(typeof(valueCount)!=='number'||valueCount<0){throw new Error('Number of values must be a non-negative number');}
-this.valueCount_=valueCount;this.buildRoot_=this.createRootNode_();this.topDownTreeViewRoot_=undefined;this.topDownHeavyViewRoot_=undefined;this.bottomUpHeavyViewNode_=undefined;this.complete_=false;this.maxDimensionDepths_=new Array(dimensions);for(let d=0;d<dimensions;d++){this.maxDimensionDepths_[d]=0;}}
-MultiDimensionalViewBuilder.ValueKind={SELF:0,TOTAL:1};MultiDimensionalViewBuilder.ViewType={TOP_DOWN_TREE_VIEW:0,TOP_DOWN_HEAVY_VIEW:1,BOTTOM_UP_HEAVY_VIEW:2};MultiDimensionalViewBuilder.prototype={addPath(path,values,valueKind){if(this.buildRoot_===undefined){throw new Error('Paths cannot be added after either view has been built');}
-if(path.length!==this.dimensions_){throw new Error('Path must be '+this.dimensions_+'-dimensional');}
-if(values.length!==this.valueCount_){throw new Error('Must provide '+this.valueCount_+' values');}
-let isTotal;switch(valueKind){case MultiDimensionalViewBuilder.ValueKind.SELF:isTotal=false;break;case MultiDimensionalViewBuilder.ValueKind.TOTAL:isTotal=true;break;default:throw new Error('Invalid value kind: '+valueKind);}
-let node=this.buildRoot_;for(let d=0;d<path.length;d++){const singleDimensionPath=path[d];const singleDimensionPathLength=singleDimensionPath.length;this.maxDimensionDepths_[d]=Math.max(this.maxDimensionDepths_[d],singleDimensionPathLength);for(let i=0;i<singleDimensionPathLength;i++){node=this.getOrCreateChildNode_(node,d,singleDimensionPath[i]);}}
-for(let v=0;v<this.valueCount_;v++){const addedValue=values[v];if(addedValue===undefined)continue;const nodeValue=node.values[v];if(isTotal){nodeValue.total+=addedValue;nodeValue.totalState=EXACT;}else{nodeValue.self+=addedValue;nodeValue.totalState=Math.max(nodeValue.totalState,LOWER_BOUND);}}},get complete(){return this.complete_;},set complete(isComplete){if(this.buildRoot_===undefined){throw new Error('Can\'t set complete after any view has been built.');}
-this.complete_=isComplete;},buildView(viewType){switch(viewType){case MultiDimensionalViewBuilder.ViewType.TOP_DOWN_TREE_VIEW:return this.buildTopDownTreeView();case MultiDimensionalViewBuilder.ViewType.TOP_DOWN_HEAVY_VIEW:return this.buildTopDownHeavyView();case MultiDimensionalViewBuilder.ViewType.BOTTOM_UP_HEAVY_VIEW:return this.buildBottomUpHeavyView();default:throw new Error('Unknown multi-dimensional view type: '+viewType);}},buildTopDownTreeView(){if(this.topDownTreeViewRoot_===undefined){const treeViewRoot=this.buildRoot_;this.buildRoot_=undefined;this.setUpMissingChildRelationships_(treeViewRoot,0);this.finalizeTotalValues_(treeViewRoot,0,new WeakMap());this.topDownTreeViewRoot_=treeViewRoot;}
-return this.topDownTreeViewRoot_;},buildTopDownHeavyView(){if(this.topDownHeavyViewRoot_===undefined){this.topDownHeavyViewRoot_=this.buildGenericHeavyView_(this.addDimensionToTopDownHeavyViewNode_.bind(this));}
-return this.topDownHeavyViewRoot_;},buildBottomUpHeavyView(){if(this.bottomUpHeavyViewNode_===undefined){this.bottomUpHeavyViewNode_=this.buildGenericHeavyView_(this.addDimensionToBottomUpHeavyViewNode_.bind(this));}
-return this.bottomUpHeavyViewNode_;},createRootNode_(){return new MultiDimensionalViewNode(new Array(this.dimensions_),this.valueCount_);},getOrCreateChildNode_(parentNode,dimension,childDimensionTitle){if(dimension<0||dimension>=this.dimensions_){throw new Error('Invalid dimension');}
-const dimensionChildren=parentNode.children[dimension];let childNode=dimensionChildren.get(childDimensionTitle);if(childNode!==undefined){return childNode;}
-const childTitle=parentNode.title.slice();childTitle[dimension]=childDimensionTitle;childNode=new MultiDimensionalViewNode(childTitle,this.valueCount_);dimensionChildren.set(childDimensionTitle,childNode);return childNode;},setUpMissingChildRelationships_(node,firstDimensionToSetUp){for(let d=firstDimensionToSetUp;d<this.dimensions_;d++){const currentDimensionChildTitles=new Set(node.children[d].keys());for(let i=0;i<d;i++){for(const previousDimensionChildNode of node.children[i].values()){for(const previousDimensionGrandChildTitle of
-previousDimensionChildNode.children[d].keys()){currentDimensionChildTitles.add(previousDimensionGrandChildTitle);}}}
-for(const currentDimensionChildTitle of currentDimensionChildTitles){const currentDimensionChildNode=this.getOrCreateChildNode_(node,d,currentDimensionChildTitle);for(let i=0;i<d;i++){for(const previousDimensionChildNode of
-node.children[i].values()){const previousDimensionGrandChildNode=previousDimensionChildNode.children[d].get(currentDimensionChildTitle);if(previousDimensionGrandChildNode!==undefined){currentDimensionChildNode.children[i].set(previousDimensionChildNode.title[i],previousDimensionGrandChildNode);}}}
-this.setUpMissingChildRelationships_(currentDimensionChildNode,d);}}},finalizeTotalValues_(node,firstDimensionToFinalize,dimensionalSelfSumsMap){const dimensionalSelfSums=new Array(this.dimensions_);const minResidual=new Array(this.valueCount_);for(let v=0;v<this.valueCount_;v++)minResidual[v]=0;const nodeValues=node.values;const nodeSelfSums=new Array(this.valueCount_);for(let v=0;v<this.valueCount_;v++){nodeSelfSums[v]=nodeValues[v].self;}
-for(let d=0;d<this.dimensions_;d++){const childResidualSums=new Array(this.valueCount_);for(let v=0;v<this.valueCount_;v++){childResidualSums[v]=0;}
-for(const childNode of node.children[d].values()){if(d>=firstDimensionToFinalize){this.finalizeTotalValues_(childNode,d,dimensionalSelfSumsMap);}
-const childNodeSelfSums=dimensionalSelfSumsMap.get(childNode);const childNodeValues=childNode.values;for(let v=0;v<this.valueCount_;v++){nodeSelfSums[v]+=childNodeSelfSums[d][v];const residual=childNodeValues[v].total-
-childNodeSelfSums[this.dimensions_-1][v];childResidualSums[v]+=residual;if(this.complete){nodeValues[v].totalState=EXACT;}else if(childNodeValues[v].totalState>NOT_PROVIDED){nodeValues[v].totalState=Math.max(nodeValues[v].totalState,LOWER_BOUND);}}}
-dimensionalSelfSums[d]=nodeSelfSums.slice();for(let v=0;v<this.valueCount_;v++){minResidual[v]=Math.max(minResidual[v],childResidualSums[v]);}}
-for(let v=0;v<this.valueCount_;v++){nodeValues[v].total=Math.max(nodeValues[v].total,nodeSelfSums[v]+minResidual[v]);}
-if(dimensionalSelfSumsMap.has(node)){throw new Error('Internal error: Node finalized more than once');}
-dimensionalSelfSumsMap.set(node,dimensionalSelfSums);},buildGenericHeavyView_(treeViewNodeHandler){const treeViewRoot=this.buildTopDownTreeView();const heavyViewRoot=this.createRootNode_();heavyViewRoot.values=treeViewRoot.values;const recursionDepthTrackers=new Array(this.dimensions_);for(let d=0;d<this.dimensions_;d++){recursionDepthTrackers[d]=new RecursionDepthTracker(this.maxDimensionDepths_[d],d);}
-this.addDimensionsToGenericHeavyViewNode_(treeViewRoot,heavyViewRoot,0,recursionDepthTrackers,false,treeViewNodeHandler);this.setUpMissingChildRelationships_(heavyViewRoot,0);return heavyViewRoot;},addDimensionsToGenericHeavyViewNode_(treeViewParentNode,heavyViewParentNode,startDimension,recursionDepthTrackers,previousDimensionsRecursive,treeViewNodeHandler){for(let d=startDimension;d<this.dimensions_;d++){this.addDimensionDescendantsToGenericHeavyViewNode_(treeViewParentNode,heavyViewParentNode,d,recursionDepthTrackers,previousDimensionsRecursive,treeViewNodeHandler);}},addDimensionDescendantsToGenericHeavyViewNode_(treeViewParentNode,heavyViewParentNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive,treeViewNodeHandler){const treeViewChildren=treeViewParentNode.children[currentDimension];const recursionDepthTracker=recursionDepthTrackers[currentDimension];for(const treeViewChildNode of treeViewChildren.values()){recursionDepthTracker.push(treeViewChildNode);treeViewNodeHandler(treeViewChildNode,heavyViewParentNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive);this.addDimensionDescendantsToGenericHeavyViewNode_(treeViewChildNode,heavyViewParentNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive,treeViewNodeHandler);recursionDepthTracker.pop();}},addDimensionToTopDownHeavyViewNode_(treeViewChildNode,heavyViewParentNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive){this.addDimensionToTopDownHeavyViewNodeRecursively_(treeViewChildNode,heavyViewParentNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive,1);},addDimensionToTopDownHeavyViewNodeRecursively_(treeViewChildNode,heavyViewParentNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive,subTreeDepth){const recursionDepthTracker=recursionDepthTrackers[currentDimension];const currentDimensionRecursive=subTreeDepth<=recursionDepthTracker.recursionDepth;const currentOrPreviousDimensionsRecursive=currentDimensionRecursive||previousDimensionsRecursive;const dimensionTitle=treeViewChildNode.title[currentDimension];const heavyViewChildNode=this.getOrCreateChildNode_(heavyViewParentNode,currentDimension,dimensionTitle);this.addNodeValues_(treeViewChildNode,heavyViewChildNode,!currentOrPreviousDimensionsRecursive);this.addDimensionsToGenericHeavyViewNode_(treeViewChildNode,heavyViewChildNode,currentDimension+1,recursionDepthTrackers,currentOrPreviousDimensionsRecursive,this.addDimensionToTopDownHeavyViewNode_.bind(this));for(const treeViewGrandChildNode of
-treeViewChildNode.children[currentDimension].values()){recursionDepthTracker.push(treeViewGrandChildNode);this.addDimensionToTopDownHeavyViewNodeRecursively_(treeViewGrandChildNode,heavyViewChildNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive,subTreeDepth+1);recursionDepthTracker.pop();}},addDimensionToBottomUpHeavyViewNode_(treeViewChildNode,heavyViewParentNode,currentDimension,recursionDepthTrackers,previousDimensionsRecursive){const recursionDepthTracker=recursionDepthTrackers[currentDimension];const bottomIndex=recursionDepthTracker.bottomIndex;const topIndex=recursionDepthTracker.topIndex;const firstNonRecursiveIndex=bottomIndex+recursionDepthTracker.recursionDepth;const viewNodePath=recursionDepthTracker.viewNodePath;const trackerAncestorNode=recursionDepthTracker.trackerAncestorNode;let heavyViewDescendantNode=heavyViewParentNode;for(let i=bottomIndex;i<topIndex;i++){const treeViewAncestorNode=viewNodePath[i];const dimensionTitle=treeViewAncestorNode.title[currentDimension];heavyViewDescendantNode=this.getOrCreateChildNode_(heavyViewDescendantNode,currentDimension,dimensionTitle);const currentDimensionRecursive=i<firstNonRecursiveIndex;const currentOrPreviousDimensionsRecursive=currentDimensionRecursive||previousDimensionsRecursive;this.addNodeValues_(treeViewChildNode,heavyViewDescendantNode,!currentOrPreviousDimensionsRecursive);this.addDimensionsToGenericHeavyViewNode_(treeViewChildNode,heavyViewDescendantNode,currentDimension+1,recursionDepthTrackers,currentOrPreviousDimensionsRecursive,this.addDimensionToBottomUpHeavyViewNode_.bind(this));}},addNodeValues_(sourceNode,targetNode,addTotal){const targetNodeValues=targetNode.values;const sourceNodeValues=sourceNode.values;for(let v=0;v<this.valueCount_;v++){const targetNodeValue=targetNodeValues[v];const sourceNodeValue=sourceNodeValues[v];targetNodeValue.self+=sourceNodeValue.self;if(addTotal){targetNodeValue.total+=sourceNodeValue.total;if(this.complete){targetNodeValue.totalState=EXACT;}else if(sourceNodeValue.totalState>NOT_PROVIDED){targetNodeValue.totalState=Math.max(targetNodeValue.totalState,LOWER_BOUND);}}}}};function RecursionDepthTracker(maxDepth,dimension){this.titlePath=new Array(maxDepth);this.viewNodePath=new Array(maxDepth);this.bottomIndex=this.topIndex=maxDepth;this.dimension_=dimension;this.currentTrackerNode_=this.createNode_(0,undefined);}
-RecursionDepthTracker.prototype={push(viewNode){if(this.bottomIndex===0){throw new Error('Cannot push to a full tracker');}
-const title=viewNode.title[this.dimension_];this.bottomIndex--;this.titlePath[this.bottomIndex]=title;this.viewNodePath[this.bottomIndex]=viewNode;let childTrackerNode=this.currentTrackerNode_.children.get(title);if(childTrackerNode!==undefined){this.currentTrackerNode_=childTrackerNode;return;}
-const maxLengths=zFunction(this.titlePath,this.bottomIndex);let recursionDepth=0;for(let i=0;i<maxLengths.length;i++){recursionDepth=Math.max(recursionDepth,maxLengths[i]);}
-childTrackerNode=this.createNode_(recursionDepth,this.currentTrackerNode_);this.currentTrackerNode_.children.set(title,childTrackerNode);this.currentTrackerNode_=childTrackerNode;},pop(){if(this.bottomIndex===this.topIndex){throw new Error('Cannot pop from an empty tracker');}
-this.titlePath[this.bottomIndex]=undefined;this.viewNodePath[this.bottomIndex]=undefined;this.bottomIndex++;this.currentTrackerNode_=this.currentTrackerNode_.parent;},get recursionDepth(){return this.currentTrackerNode_.recursionDepth;},createNode_(recursionDepth,parent){return{recursionDepth,parent,children:new Map()};}};function zFunction(list,startIndex){const n=list.length-startIndex;if(n===0)return[];const z=new Array(n);z[0]=0;for(let i=1,left=0,right=0;i<n;++i){let maxLength;if(i<=right){maxLength=Math.min(right-i+1,z[i-left]);}else{maxLength=0;}
-while(i+maxLength<n&&list[startIndex+maxLength]===list[startIndex+i+maxLength]){++maxLength;}
-if(i+maxLength-1>right){left=i;right=i+maxLength-1;}
-z[i]=maxLength;}
-return z;}
-return{MultiDimensionalViewBuilder,MultiDimensionalViewNode,RecursionDepthTracker,zFunction,};});'use strict';tr.exportTo('tr.e.chrome',function(){class CpuTime{static getCpuTimeForThread(thread,range){let totalCpuTime=0;tr.b.iterateOverIntersectingIntervals(thread.sliceGroup.topLevelSlices,slice=>slice.start,slice=>slice.end,range.min,range.max,slice=>{if(slice.duration===0)return;if(!slice.cpuDuration)return;const intersection=range.findIntersection(slice.range);const fractionOfSliceInsideRangeOfInterest=intersection.duration/slice.duration;totalCpuTime+=slice.cpuDuration*fractionOfSliceInsideRangeOfInterest;});return totalCpuTime;}
-static getStageToInitiatorToSegmentBounds(segments,rangeOfInterest){const stageToInitiatorToRanges=new Map();stageToInitiatorToRanges.set('all_stages',new Map([['all_initiators',new Set()]]));const allRanges=stageToInitiatorToRanges.get('all_stages').get('all_initiators');for(const segment of segments){if(!rangeOfInterest.intersectsRangeInclusive(segment.range))continue;const intersectingRange=rangeOfInterest.findIntersection(segment.range);allRanges.add(intersectingRange);for(const expectation of segment.expectations){const stageTitle=expectation.stageTitle;if(!stageToInitiatorToRanges.has(stageTitle)){stageToInitiatorToRanges.set(stageTitle,new Map([['all_initiators',new Set()]]));}
-const initiatorToRanges=stageToInitiatorToRanges.get(stageTitle);initiatorToRanges.get('all_initiators').add(intersectingRange);const initiatorType=expectation.initiatorType;if(initiatorType){if(!initiatorToRanges.has(initiatorType)){initiatorToRanges.set(initiatorType,new Set());}
-initiatorToRanges.get(initiatorType).add(intersectingRange);}}}
-return stageToInitiatorToRanges;}
-static computeCpuTimesForRanges_(ranges,thread){const rangeToCpuTime=new Map();for(const range of ranges){rangeToCpuTime.set(range,CpuTime.getCpuTimeForThread(thread,range));}
-return rangeToCpuTime;}
-static constructMultiDimensionalView(model,rangeOfInterest){const mdvBuilder=new tr.b.MultiDimensionalViewBuilder(3,2);const stageToInitiatorToRanges=CpuTime.getStageToInitiatorToSegmentBounds(model.userModel.segments,rangeOfInterest);const allSegmentBoundsInRange=stageToInitiatorToRanges.get('all_stages').get('all_initiators');for(const[pid,process]of Object.entries(model.processes)){const processType=tr.e.chrome.chrome_processes.canonicalizeProcessName(process.name);for(const[tid,thread]of Object.entries(process.threads)){const rangeToCpuTime=CpuTime.computeCpuTimesForRanges_(allSegmentBoundsInRange,thread);for(const[stage,initiatorToRanges]of stageToInitiatorToRanges){for(const[initiator,ranges]of initiatorToRanges){const cpuTime=tr.b.math.Statistics.sum(ranges,range=>rangeToCpuTime.get(range));const duration=tr.b.math.Statistics.sum(ranges,range=>range.duration);const cpuTimePerSecond=cpuTime/duration;mdvBuilder.addPath([[processType],[thread.type],[stage,initiator]],[cpuTimePerSecond,cpuTime],tr.b.MultiDimensionalViewBuilder.ValueKind.TOTAL);}}}}
-return mdvBuilder.buildTopDownTreeView();}}
-return{CpuTime,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const CPU_PERCENTAGE_UNIT=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const CPU_TIME_UNIT=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;function clonePath_(previousPath){return previousPath.map(subPath=>subPath.map(x=>x));}
-function decodePath_(path){return{processType:path[0][0],threadType:path[1][0],railStage:path[2][0],initiatorType:path[2][1]};}
-function stringifyPathName_(path){const decodedPath=decodePath_(path);return[decodedPath.processType,decodedPath.threadType,decodedPath.railStage,decodedPath.initiatorType].join(':');}
-class CpuTimeTreeDataReporter{constructor(){this.visitedSet_=new Set();}
-reportValuesFromNode_(node,path){const decodedPath=decodePath_(path);const processType=decodedPath.processType||'all_processes';const threadType=decodedPath.threadType||'all_threads';if(!decodedPath.railStage||!decodedPath.initiatorType)return;const{railStage,initiatorType}=decodedPath;const serializedPathName=[processType,threadType,railStage,initiatorType].join(':');const cpuPercentageValue=node.values[0].total;const cpuTimeValue=node.values[1].total;this.histogramSet_.createHistogram(`cpuPercentage:${serializedPathName}`,CPU_PERCENTAGE_UNIT,cpuPercentageValue);this.histogramSet_.createHistogram(`cpuTime:${serializedPathName}`,CPU_TIME_UNIT,cpuTimeValue);}
-reportDataFromTree_(root,rootPath){const rootPathString=stringifyPathName_(rootPath);if(this.visitedSet_.has(rootPathString))return;this.visitedSet_.add(rootPathString);this.reportValuesFromNode_(root,rootPath);for(let dimension=0;dimension<root.children.length;dimension++){const children=root.children[dimension];for(const[name,node]of children){const childPath=clonePath_(rootPath);childPath[dimension].push(name);this.reportDataFromTree_(node,childPath);}}}
-addTreeValuesToHistogramSet(rootNode,histogramSet){const rootPath=[[],[],[]];this.rootNode_=rootNode;this.histogramSet_=histogramSet;this.reportDataFromTree_(this.rootNode_,rootPath);}
-static reportToHistogramSet(rootNode,histogramSet){const reporter=new CpuTimeTreeDataReporter();reporter.addTreeValuesToHistogramSet(rootNode,histogramSet);}}
-return{CpuTimeTreeDataReporter,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function newCpuTimeMetric(histograms,model,opt_options){const rangeOfInterest=opt_options&&opt_options.rangeOfInterest?opt_options.rangeOfInterest:model.bounds;const rootNode=tr.e.chrome.CpuTime.constructMultiDimensionalView(model,rangeOfInterest);tr.metrics.sh.CpuTimeTreeDataReporter.reportToHistogramSet(rootNode,histograms);}
-tr.metrics.MetricRegistry.register(newCpuTimeMetric,{supportsRangeOfInterest:true});return{newCpuTimeMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const includeHistogramNames=['cpuTime:all_processes:all_threads:all_stages:all_initiators','cpuPercentage:all_processes:all_threads:all_stages:all_initiators','cpuTime:browser_process:all_threads:all_stages:all_initiators','cpuPercentage:browser_process:all_threads:all_stages:all_initiators','cpuTime:renderer_processes:all_threads:all_stages:all_initiators','cpuPercentage:renderer_processes:all_threads:all_stages:all_initiators','cpuTime:gpu_process:all_threads:all_stages:all_initiators','cpuPercentage:gpu_process:all_threads:all_stages:all_initiators','cpuTime:renderer_processes:CrRendererMain:all_stages:all_initiators','cpuPercentage:renderer_processes:CrRendererMain:all_stages:all_initiators','cpuTime:browser_process:CrBrowserMain:all_stages:all_initiators','cpuPercentage:browser_process:CrBrowserMain:all_stages:all_initiators','cpuTime:all_processes:all_threads:Load:Successful','cpuPercentage:all_processes:all_threads:Load:Successful',];function limitedCpuTimeMetric(histograms,model,opt_options){const allCpuHistograms=new tr.v.HistogramSet();tr.metrics.sh.newCpuTimeMetric(allCpuHistograms,model,opt_options);for(const histogramName of includeHistogramNames){const histogram=allCpuHistograms.getHistogramNamed(histogramName);if(histogram)histograms.addHistogram(histogram);}}
-tr.metrics.MetricRegistry.register(limitedCpuTimeMetric,{supportsRangeOfInterest:true});return{limitedCpuTimeMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const LONG_TASK_MS=50;const LONGEST_TASK_MS=1000;function iterateLongTopLevelTasksOnThreadInRange(thread,opt_range,cb,opt_this){thread.sliceGroup.topLevelSlices.forEach(function(slice){if(opt_range&&!opt_range.intersectsExplicitRangeInclusive(slice.start,slice.end)){return;}
-if(slice.duration<LONG_TASK_MS)return;cb.call(opt_this,slice);});}
-function iterateRendererMainThreads(model,cb,opt_this){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(modelHelper!==undefined){Object.values(modelHelper.rendererHelpers).forEach(function(rendererHelper){if(!rendererHelper.mainThread)return;cb.call(opt_this,rendererHelper.mainThread);});}}
-const BIN_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(LONG_TASK_MS,LONGEST_TASK_MS,40);function longTasksMetric(histograms,model,opt_options){const rangeOfInterest=opt_options?opt_options.rangeOfInterest:undefined;const longTaskHist=histograms.createHistogram('longTasks',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{binBoundaries:BIN_BOUNDARIES,description:'durations of long tasks',});const relatedNames=new tr.v.d.RelatedNameMap();longTaskHist.diagnostics.set('categories',relatedNames);iterateRendererMainThreads(model,function(thread){iterateLongTopLevelTasksOnThreadInRange(thread,rangeOfInterest,function(task){const breakdown=new tr.v.d.Breakdown();breakdown.colorScheme=tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER;for(const slice of task.descendentSlices){const sample=slice.cpuSelfTime;if(sample===undefined)continue;const category=model.getUserFriendlyCategoryFromEvent(slice);const histName='longTasks:'+category;let hist=histograms.getHistogramNamed(histName);if(hist===undefined){hist=histograms.createHistogram(histName,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],{binBoundaries:BIN_BOUNDARIES,});relatedNames.set(category,hist.name);}
-hist.addSample(sample,{events:new tr.v.d.RelatedEventSet([slice]),});breakdown.set(category,sample+breakdown.get(category));}
-longTaskHist.addSample(task.duration,{events:new tr.v.d.RelatedEventSet([task]),categories:breakdown,});});});}
-tr.metrics.MetricRegistry.register(longTasksMetric,{supportsRangeOfInterest:true,requiredCategories:['toplevel'],});return{longTasksMetric,iterateLongTopLevelTasksOnThreadInRange,iterateRendererMainThreads,LONG_TASK_MS,LONGEST_TASK_MS,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const BACKGROUND=tr.model.ContainerMemoryDump.LevelOfDetail.BACKGROUND;const LIGHT=tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT;const DETAILED=tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED;const sizeInBytes_smallerIsBetter=tr.b.Unit.byName.sizeInBytes_smallerIsBetter;const count_smallerIsBetter=tr.b.Unit.byName.count_smallerIsBetter;const DISPLAYED_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.DISPLAYED_SIZE_NUMERIC_NAME;const LEVEL_OF_DETAIL_NAMES=new Map();LEVEL_OF_DETAIL_NAMES.set(BACKGROUND,'background');LEVEL_OF_DETAIL_NAMES.set(LIGHT,'light');LEVEL_OF_DETAIL_NAMES.set(DETAILED,'detailed');const HEAP_PROFILER_DETAIL_NAME='heap_profiler';const BOUNDARIES_FOR_UNIT_MAP=new WeakMap();BOUNDARIES_FOR_UNIT_MAP.set(count_smallerIsBetter,tr.v.HistogramBinBoundaries.createLinear(0,20,20));BOUNDARIES_FOR_UNIT_MAP.set(sizeInBytes_smallerIsBetter,new tr.v.HistogramBinBoundaries(0).addBinBoundary(1024).addExponentialBins(16*1024*1024*1024,4*24));const CHROME_PROCESS_NAMES=tr.e.chrome.chrome_processes.CHROME_PROCESS_NAMES;function memoryMetric(values,model,opt_options){const rangeOfInterest=opt_options?opt_options.rangeOfInterest:undefined;const browserNameToGlobalDumps=tr.metrics.sh.splitGlobalDumpsByBrowserName(model,rangeOfInterest);addGeneralMemoryDumpValues(browserNameToGlobalDumps,values);addDetailedMemoryDumpValues(browserNameToGlobalDumps,values);addMemoryDumpCountValues(browserNameToGlobalDumps,values);}
-const USER_FRIENDLY_BROWSER_NAMES={'chrome':'Chrome','webview':'WebView','unknown_browser':'an unknown browser'};function convertBrowserNameToUserFriendlyName(browserName){for(const baseName in USER_FRIENDLY_BROWSER_NAMES){if(!browserName.startsWith(baseName))continue;const userFriendlyBaseName=USER_FRIENDLY_BROWSER_NAMES[baseName];const suffix=browserName.substring(baseName.length);if(suffix.length===0){return userFriendlyBaseName;}else if(/^\d+$/.test(suffix)){return userFriendlyBaseName+'('+suffix+')';}}
-return'\''+browserName+'\' browser';}
-function convertProcessNameToUserFriendlyName(processName,opt_requirePlural){switch(processName){case CHROME_PROCESS_NAMES.BROWSER:return opt_requirePlural?'browser processes':'the browser process';case CHROME_PROCESS_NAMES.RENDERER:return'renderer processes';case CHROME_PROCESS_NAMES.GPU:return opt_requirePlural?'GPU processes':'the GPU process';case CHROME_PROCESS_NAMES.PPAPI:return opt_requirePlural?'PPAPI processes':'the PPAPI process';case CHROME_PROCESS_NAMES.ALL:return'all processes';case CHROME_PROCESS_NAMES.UNKNOWN:return'unknown processes';default:return'\''+processName+'\' processes';}}
-function addGeneralMemoryDumpValues(browserNameToGlobalDumps,values){addMemoryDumpValues(browserNameToGlobalDumps,gmd=>true,function(processDump,addProcessScalar){addProcessScalar({source:'process_count',property:PROCESS_COUNT,value:1});if(processDump.totals!==undefined){addProcessScalar({source:'reported_by_os',property:RESIDENT_SIZE,component:['system_memory'],value:processDump.totals.residentBytes});addProcessScalar({source:'reported_by_os',property:PEAK_RESIDENT_SIZE,component:['system_memory'],value:processDump.totals.peakResidentBytes});addProcessScalar({source:'reported_by_os',property:PRIVATE_FOOTPRINT_SIZE,component:['system_memory'],value:processDump.totals.privateFootprintBytes,});}
-if(processDump.memoryAllocatorDumps===undefined)return;processDump.memoryAllocatorDumps.forEach(function(rootAllocatorDump){CHROME_VALUE_PROPERTIES.forEach(function(property){addProcessScalar({source:'reported_by_chrome',component:[rootAllocatorDump.name],property,value:rootAllocatorDump.numerics[property.name]});});if(rootAllocatorDump.numerics.allocated_objects_size===undefined){const allocatedObjectsDump=rootAllocatorDump.getDescendantDumpByFullName('allocated_objects');if(allocatedObjectsDump!==undefined){addProcessScalar({source:'reported_by_chrome',component:[rootAllocatorDump.name],property:ALLOCATED_OBJECTS_SIZE,value:allocatedObjectsDump.numerics.size});}}});addTopHeapDumpCategoryValue(processDump,addProcessScalar);addV8MemoryDumpValues(processDump,addProcessScalar);},function(componentTree){const tracingNode=componentTree.children[1].get('tracing');if(tracingNode===undefined)return;for(let i=0;i<componentTree.values.length;i++){componentTree.values[i].total-=tracingNode.values[i].total;}},values);}
-function addTopHeapDumpCategoryValue(processDump,addProcessScalar){if(!processDump.heapDumps){return;}
-for(const allocatorName in processDump.heapDumps){const heapDump=processDump.heapDumps[allocatorName];if(heapDump.entries===undefined||heapDump.entries.length===0){return;}
-const typeToSize={};for(let i=0;i<heapDump.entries.length;i+=1){const entry=heapDump.entries[i];if(!entry.objectTypeName||entry.leafStackFrame){continue;}
-if(!typeToSize[entry.objectTypeName]){typeToSize[entry.objectTypeName]=0;}
-typeToSize[entry.objectTypeName]+=entry.size;}
-let largestValue=0;let largestType='';for(const key in typeToSize){if(largestValue<typeToSize[key]){largestValue=typeToSize[key];largestType=key;}}
-addProcessScalar({source:'reported_by_chrome',component:[allocatorName,largestType],property:HEAP_CATEGORY_SIZE,value:largestValue});}}
-function addV8MemoryDumpValues(processDump,addProcessScalar){const v8Dump=processDump.getMemoryAllocatorDumpByFullName('v8');if(v8Dump===undefined)return;v8Dump.children.forEach(function(isolateDump){const mallocDump=isolateDump.getDescendantDumpByFullName('malloc');if(mallocDump!==undefined){addV8ComponentValues(mallocDump,['v8','allocated_by_malloc'],addProcessScalar);}
-const heapDump=isolateDump.getDescendantDumpByFullName('heap_spaces');if(heapDump!==undefined){addV8ComponentValues(heapDump,['v8','heap'],addProcessScalar);heapDump.children.forEach(function(spaceDump){if(spaceDump.name==='other_spaces')return;addV8ComponentValues(spaceDump,['v8','heap',spaceDump.name],addProcessScalar);});}});addProcessScalar({source:'reported_by_chrome',component:['v8'],property:CODE_AND_METADATA_SIZE,value:v8Dump.numerics.code_and_metadata_size});addProcessScalar({source:'reported_by_chrome',component:['v8'],property:CODE_AND_METADATA_SIZE,value:v8Dump.numerics.bytecode_and_metadata_size});}
-function addV8ComponentValues(componentDump,componentPath,addProcessScalar){CHROME_VALUE_PROPERTIES.forEach(function(property){addProcessScalar({source:'reported_by_chrome',component:componentPath,property,value:componentDump.numerics[property.name]});});}
-const PROCESS_COUNT={unit:count_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){if(componentPath.length>0){throw new Error('Unexpected process count non-empty component path: '+
-componentPath.join(':'));}
-return'total number of '+convertProcessNameToUserFriendlyName(processName,true);}};const EFFECTIVE_SIZE={name:'effective_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildChromeValueDescriptionPrefix(componentPath,processName,{userFriendlyPropertyName:'effective size',componentPreposition:'of'});}};const ALLOCATED_OBJECTS_SIZE={name:'allocated_objects_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildChromeValueDescriptionPrefix(componentPath,processName,{userFriendlyPropertyName:'size of all objects allocated',totalUserFriendlyPropertyName:'size of all allocated objects',componentPreposition:'by'});}};const SHIM_ALLOCATED_OBJECTS_SIZE={name:'shim_allocated_objects_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildChromeValueDescriptionPrefix(componentPath,processName,{userFriendlyPropertyName:'size of all objects allocated through shim',totalUserFriendlyPropertyName:'size of all allocated objects through shim',componentPreposition:'by'});}};const LOCKED_SIZE={name:'locked_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildChromeValueDescriptionPrefix(componentPath,processName,{userFriendlyPropertyName:'locked (pinned) size',componentPreposition:'of'});}};const PEAK_SIZE={name:'peak_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildChromeValueDescriptionPrefix(componentPath,processName,{userFriendlyPropertyName:'peak size',componentPreposition:'of'});}};const HEAP_CATEGORY_SIZE={name:'heap_category_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildChromeValueDescriptionPrefix(componentPath,processName,{userFriendlyPropertyName:'heap profiler category size',componentPreposition:'for'});}};const CODE_AND_METADATA_SIZE={name:'code_and_metadata_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildChromeValueDescriptionPrefix(componentPath,processName,{userFriendlyPropertyNamePrefix:'size of',userFriendlyPropertyName:'code and metadata'});}};const CHROME_VALUE_PROPERTIES=[EFFECTIVE_SIZE,ALLOCATED_OBJECTS_SIZE,SHIM_ALLOCATED_OBJECTS_SIZE,LOCKED_SIZE,PEAK_SIZE];function buildChromeValueDescriptionPrefix(componentPath,processName,formatSpec){const nameParts=[];if(componentPath.length===0){nameParts.push('total');if(formatSpec.totalUserFriendlyPropertyName){nameParts.push(formatSpec.totalUserFriendlyPropertyName);}else{if(formatSpec.userFriendlyPropertyNamePrefix){nameParts.push(formatSpec.userFriendlyPropertyNamePrefix);}
-nameParts.push(formatSpec.userFriendlyPropertyName);}
-nameParts.push('reported by Chrome for');}else{if(formatSpec.componentPreposition===undefined){if(formatSpec.userFriendlyPropertyNamePrefix){nameParts.push(formatSpec.userFriendlyPropertyNamePrefix);}
-nameParts.push(componentPath.join(':'));nameParts.push(formatSpec.userFriendlyPropertyName);}else{if(formatSpec.userFriendlyPropertyNamePrefix){nameParts.push(formatSpec.userFriendlyPropertyNamePrefix);}
-nameParts.push(formatSpec.userFriendlyPropertyName);nameParts.push(formatSpec.componentPreposition);if(componentPath[componentPath.length-1]==='allocated_by_malloc'){nameParts.push('objects allocated by malloc for');nameParts.push(componentPath.slice(0,componentPath.length-1).join(':'));}else{nameParts.push(componentPath.join(':'));}}
-nameParts.push('in');}
-nameParts.push(convertProcessNameToUserFriendlyName(processName));return nameParts.join(' ');}
-const RESIDENT_SIZE={name:'resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'resident set size (RSS)');}};const PEAK_RESIDENT_SIZE={name:'peak_resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'peak resident set size');}};const PROPORTIONAL_RESIDENT_SIZE={name:'proportional_resident_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'proportional resident size (PSS)');}};const PRIVATE_DIRTY_SIZE={name:'private_dirty_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'private dirty size');}};const PRIVATE_FOOTPRINT_SIZE={name:'private_footprint_size',unit:sizeInBytes_smallerIsBetter,buildDescriptionPrefix(componentPath,processName){return buildOsValueDescriptionPrefix(componentPath,processName,'private footprint size');}};function buildOsValueDescriptionPrefix(componentPath,processName,userFriendlyPropertyName){if(componentPath.length>2){throw new Error('OS value component path for \''+
-userFriendlyPropertyName+'\' too long: '+componentPath.join(':'));}
-const nameParts=[];if(componentPath.length<2){nameParts.push('total');}
-nameParts.push(userFriendlyPropertyName);if(componentPath.length>0){switch(componentPath[0]){case'system_memory':if(componentPath.length>1){const userFriendlyComponentName=SYSTEM_VALUE_COMPONENTS[componentPath[1]].userFriendlyName;if(userFriendlyComponentName===undefined){throw new Error('System value sub-component for \''+
-userFriendlyPropertyName+'\' unknown: '+
-componentPath.join(':'));}
-nameParts.push('of',userFriendlyComponentName,'in');}else{nameParts.push('of system memory (RAM) used by');}
-break;case'gpu_memory':if(componentPath.length>1){nameParts.push('of the',componentPath[1]);nameParts.push('Android memtrack component in');}else{nameParts.push('of GPU memory (Android memtrack) used by');}
-break;default:throw new Error('OS value component for \''+
-userFriendlyPropertyName+'\' unknown: '+
-componentPath.join(':'));}}else{nameParts.push('reported by the OS for');}
-nameParts.push(convertProcessNameToUserFriendlyName(processName));return nameParts.join(' ');}
-function addDetailedMemoryDumpValues(browserNameToGlobalDumps,values){addMemoryDumpValues(browserNameToGlobalDumps,g=>g.levelOfDetail===DETAILED,function(processDump,addProcessScalar){for(const[componentName,componentSpec]of
-Object.entries(SYSTEM_VALUE_COMPONENTS)){const node=getDescendantVmRegionClassificationNode(processDump.vmRegions,componentSpec.classificationPath);const componentPath=['system_memory'];if(componentName)componentPath.push(componentName);addProcessScalar({source:'reported_by_os',component:componentPath,property:PROPORTIONAL_RESIDENT_SIZE,value:node===undefined?0:(node.byteStats.proportionalResident||0)});addProcessScalar({source:'reported_by_os',component:componentPath,property:PRIVATE_DIRTY_SIZE,value:node===undefined?0:(node.byteStats.privateDirtyResident||0)});}
-const memtrackDump=processDump.getMemoryAllocatorDumpByFullName('gpu/android_memtrack');if(memtrackDump!==undefined){memtrackDump.children.forEach(function(memtrackChildDump){addProcessScalar({source:'reported_by_os',component:['gpu_memory',memtrackChildDump.name],property:PROPORTIONAL_RESIDENT_SIZE,value:memtrackChildDump.numerics.memtrack_pss});});}},function(componentTree){},values);}
-const SYSTEM_VALUE_COMPONENTS={'':{classificationPath:[],},'java_heap':{classificationPath:['Android','Java runtime','Spaces'],userFriendlyName:'the Java heap'},'ashmem':{classificationPath:['Android','Ashmem'],userFriendlyName:'ashmem'},'native_heap':{classificationPath:['Native heap'],userFriendlyName:'the native heap'},'stack':{classificationPath:['Stack'],userFriendlyName:'the thread stacks'}};function getDescendantVmRegionClassificationNode(node,path){for(let i=0;i<path.length;i++){if(node===undefined)break;node=node.children.find(c=>c.title===path[i]);}
-return node;}
-function addMemoryDumpCountValues(browserNameToGlobalDumps,values){browserNameToGlobalDumps.forEach(function(globalDumps,browserName){let totalDumpCount=0;const levelOfDetailNameToDumpCount={};LEVEL_OF_DETAIL_NAMES.forEach(function(levelOfDetailName){levelOfDetailNameToDumpCount[levelOfDetailName]=0;});levelOfDetailNameToDumpCount[HEAP_PROFILER_DETAIL_NAME]=0;globalDumps.forEach(function(globalDump){totalDumpCount++;const levelOfDetailName=LEVEL_OF_DETAIL_NAMES.get(globalDump.levelOfDetail);if(levelOfDetailName===undefined){return;}
-levelOfDetailNameToDumpCount[levelOfDetailName]++;if(globalDump.levelOfDetail===DETAILED){if(detectHeapProfilerInMemoryDump(globalDump)){levelOfDetailNameToDumpCount[HEAP_PROFILER_DETAIL_NAME]++;}}});reportMemoryDumpCountAsValue(browserName,undefined,totalDumpCount,values);for(const[levelOfDetailName,levelOfDetailDumpCount]of
-Object.entries(levelOfDetailNameToDumpCount)){reportMemoryDumpCountAsValue(browserName,levelOfDetailName,levelOfDetailDumpCount,values);}});}
-function detectHeapProfilerInMemoryDump(globalDump){for(const processDump of Object.values(globalDump.processMemoryDumps)){if(processDump.heapDumps&&processDump.heapDumps.malloc){const mallocDump=processDump.heapDumps.malloc;if(mallocDump.entries&&mallocDump.entries.length>0){return true;}}}
-return false;}
-function reportMemoryDumpCountAsValue(browserName,levelOfDetailName,levelOfDetailDumpCount,values){const nameParts=['memory',browserName,'all_processes','dump_count'];if(levelOfDetailName!==undefined){nameParts.push(levelOfDetailName);}
-const name=nameParts.join(':');const histogram=new tr.v.Histogram(name,count_smallerIsBetter,BOUNDARIES_FOR_UNIT_MAP.get(count_smallerIsBetter));histogram.addSample(levelOfDetailDumpCount);const userFriendlyLevelOfDetail=(levelOfDetailName||'all').replace('_',' ');histogram.description=['total number of',userFriendlyLevelOfDetail,'memory dumps added by',convertBrowserNameToUserFriendlyName(browserName),'to the trace'].join(' ');values.addHistogram(histogram);}
-function addMemoryDumpValues(browserNameToGlobalDumps,customGlobalDumpFilter,customProcessDumpValueExtractor,customComponentTreeModifier,values){browserNameToGlobalDumps.forEach(function(globalDumps,browserName){const filteredGlobalDumps=globalDumps.filter(customGlobalDumpFilter);const sourceToPropertyToBuilder=extractDataFromGlobalDumps(filteredGlobalDumps,customProcessDumpValueExtractor);reportDataAsValues(sourceToPropertyToBuilder,browserName,customComponentTreeModifier,values);});}
-function extractDataFromGlobalDumps(globalDumps,customProcessDumpValueExtractor){const sourceToPropertyToBuilder=new Map();const dumpCount=globalDumps.length;globalDumps.forEach(function(globalDump,dumpIndex){for(const processDump of Object.values(globalDump.processMemoryDumps)){extractDataFromProcessDump(processDump,sourceToPropertyToBuilder,dumpIndex,dumpCount,customProcessDumpValueExtractor);}});return sourceToPropertyToBuilder;}
-function extractDataFromProcessDump(processDump,sourceToPropertyToBuilder,dumpIndex,dumpCount,customProcessDumpValueExtractor){const rawProcessName=processDump.process.name;const processNamePath=[tr.e.chrome.chrome_processes.canonicalizeProcessName(rawProcessName)];customProcessDumpValueExtractor(processDump,function addProcessScalar(spec){if(spec.value===undefined)return;const component=spec.component||[];function createDetailsForErrorMessage(){return['source=',spec.source,', property=',spec.property.name||'(undefined)',', component=',component.length===0?'(empty)':component.join(':'),' in ',processDump.process.userFriendlyName].join('');}
-let value;if(spec.value instanceof tr.b.Scalar){value=spec.value.value;if(spec.value.unit!==spec.property.unit){throw new Error('Scalar unit for '+
-createDetailsForErrorMessage()+' ('+
-spec.value.unit.unitName+') doesn\'t match the unit of the property ('+
-spec.property.unit.unitName+')');}}else{value=spec.value;}
-let propertyToBuilder=sourceToPropertyToBuilder.get(spec.source);if(propertyToBuilder===undefined){propertyToBuilder=new Map();sourceToPropertyToBuilder.set(spec.source,propertyToBuilder);}
-let builder=propertyToBuilder.get(spec.property);if(builder===undefined){builder=new tr.b.MultiDimensionalViewBuilder(2,dumpCount),propertyToBuilder.set(spec.property,builder);}
-const values=new Array(dumpCount);values[dumpIndex]=value;builder.addPath([processNamePath,component],values,tr.b.MultiDimensionalViewBuilder.ValueKind.TOTAL);});}
-function reportDataAsValues(sourceToPropertyToBuilder,browserName,customComponentTreeModifier,values){sourceToPropertyToBuilder.forEach(function(propertyToBuilder,sourceName){propertyToBuilder.forEach(function(builders,property){const tree=builders.buildTopDownTreeView();reportComponentDataAsValues(browserName,sourceName,property,[],[],tree,values,customComponentTreeModifier);});});}
-function reportComponentDataAsValues(browserName,sourceName,property,processPath,componentPath,tree,values,customComponentTreeModifier,opt_cachedHistograms){const cachedHistograms=opt_cachedHistograms||new Map();function recurse(processPath,componentPath,node){return reportComponentDataAsValues(browserName,sourceName,property,processPath,componentPath,node,values,customComponentTreeModifier,cachedHistograms);}
-function buildHistogram(processPath,componentPath,node){return buildNamedMemoryNumericFromNode(browserName,sourceName,property,processPath.length===0?'all_processes':processPath[0],componentPath,node);}
-customComponentTreeModifier(tree);const histogram=buildHistogram(processPath,componentPath,tree);if(cachedHistograms.has(histogram.name)){return cachedHistograms.get(histogram.name);}
-cachedHistograms.set(histogram.name,histogram);const processNames=new tr.v.d.RelatedNameMap();for(const[childProcessName,childProcessNode]of tree.children[0]){processPath.push(childProcessName);const childProcessHistogram=recurse(processPath,componentPath,childProcessNode);processNames.set(childProcessName,childProcessHistogram.name);processPath.pop();}
-const componentNames=new tr.v.d.RelatedNameMap();for(const[childComponentName,childComponentNode]of tree.children[1]){componentPath.push(childComponentName);const childComponentHistogram=recurse(processPath,componentPath,childComponentNode);componentNames.set(childComponentName,childComponentHistogram.name);componentPath.pop();}
-values.addHistogram(histogram);if(tree.children[0].size>0){histogram.diagnostics.set('processes',processNames);}
-if(tree.children[1].size>0){histogram.diagnostics.set('components',componentNames);}
-return histogram;}
-function getNumericName(browserName,sourceName,propertyName,processName,componentPath){const nameParts=['memory',browserName,processName,sourceName].concat(componentPath);if(propertyName!==undefined)nameParts.push(propertyName);return nameParts.join(':');}
-function getNumericDescription(property,browserName,processName,componentPath){return[property.buildDescriptionPrefix(componentPath,processName),'in',convertBrowserNameToUserFriendlyName(browserName)].join(' ');}
-function buildNamedMemoryNumericFromNode(browserName,sourceName,property,processName,componentPath,node){const name=getNumericName(browserName,sourceName,property.name,processName,componentPath);const description=getNumericDescription(property,browserName,processName,componentPath);const numeric=buildMemoryNumericFromNode(name,node,property.unit);numeric.description=description;return numeric;}
-function buildSampleDiagnostics(value,node){if(node.children.length<2)return undefined;const diagnostics=new Map();const i=node.values.indexOf(value);const processBreakdown=new tr.v.d.Breakdown();processBreakdown.colorScheme=tr.e.chrome.chrome_processes.PROCESS_COLOR_SCHEME_NAME;for(const[name,subNode]of node.children[0]){processBreakdown.set(name,subNode.values[i].total);}
-if(processBreakdown.size>0){diagnostics.set('processes',processBreakdown);}
-const componentBreakdown=new tr.v.d.Breakdown();for(const[name,subNode]of node.children[1]){componentBreakdown.set(name,subNode.values[i].total);}
-if(componentBreakdown.size>0){diagnostics.set('components',componentBreakdown);}
-if(diagnostics.size===0)return undefined;return diagnostics;}
-function buildMemoryNumericFromNode(name,node,unit){const histogram=new tr.v.Histogram(name,unit,BOUNDARIES_FOR_UNIT_MAP.get(unit));node.values.forEach(v=>histogram.addSample(v.total,buildSampleDiagnostics(v,node)));return histogram;}
-tr.metrics.MetricRegistry.register(memoryMetric,{supportsRangeOfInterest:true});return{memoryMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){const CHROME_POWER_GRACE_PERIOD_MS=1;function createEmptyHistogram_(interval,histograms){if(interval.perSecond){return{perSecond:true,energy:histograms.createHistogram(`${interval.name}:power`,tr.b.Unit.byName.powerInWatts_smallerIsBetter,[],{description:`Energy consumption rate for ${interval.description}`,summaryOptions:{avg:true,count:false,max:true,min:true,std:false,sum:false,},}),};}
-return{perSecond:false,energy:histograms.createHistogram(`${interval.name}:energy`,tr.b.Unit.byName.energyInJoules_smallerIsBetter,[],{description:`Energy consumed in ${interval.description}`,summaryOptions:{avg:false,count:false,max:true,min:true,std:false,sum:true,},}),};}
-function createHistograms_(data,interval,histograms){if(data.histograms[interval.name]===undefined){data.histograms[interval.name]=createEmptyHistogram_(interval,histograms);}
-if(data.histograms[interval.name].perSecond){for(const sample of data.model.device.powerSeries.getSamplesWithinRange(interval.bounds.min,interval.bounds.max)){data.histograms[interval.name].energy.addSample(sample.powerInW);}}else{const energyInJ=data.model.device.powerSeries.getEnergyConsumedInJ(interval.bounds.min,interval.bounds.max);data.histograms[interval.name].energy.addSample(energyInJ);}}
-function getNavigationTTIIntervals_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const intervals=[];for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const samples=tr.metrics.sh.collectLoadingMetricsForRenderer(rendererHelper).interactiveSamples;for(const sample of samples){const info=tr.b.getOnlyElement(sample.diagnostics.get('Navigation infos'));intervals.push(tr.b.math.Range.fromExplicitRange(info.navigationStartTime,info.eventTimestamp));}}
-return intervals.sort((x,y)=>x.min-y.min);}
-function*computeTimeIntervals_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);const powerSeries=model.device.powerSeries;if(powerSeries===undefined||powerSeries.samples.length===0){return;}
-yield{bounds:model.bounds,name:'story',description:'user story',perSecond:true};const chromeBounds=computeChromeBounds_(model);if(chromeBounds.isEmpty)return;const powerSeriesBoundsWithGracePeriod=tr.b.math.Range.fromExplicitRange(powerSeries.bounds.min-CHROME_POWER_GRACE_PERIOD_MS,powerSeries.bounds.max+CHROME_POWER_GRACE_PERIOD_MS);if(!powerSeriesBoundsWithGracePeriod.containsRangeExclusive(chromeBounds)){return;}
-for(const interval of getRailStageIntervals_(model)){yield{bounds:interval.bounds.findIntersection(chromeBounds),name:interval.name,description:interval.description,perSecond:interval.perSecond};}
-for(const interval of getLoadingIntervals_(model,chromeBounds)){yield{bounds:interval.bounds.findIntersection(chromeBounds),name:interval.name,description:interval.description,perSecond:interval.perSecond};}}
-function*getRailStageIntervals_(model){for(const exp of model.userModel.expectations){const histogramName=exp.title.toLowerCase().replace(' ','_');const energyHist=undefined;if(histogramName.includes('response')){yield{bounds:tr.b.math.Range.fromExplicitRange(exp.start,exp.end),name:histogramName,description:'RAIL stage '+histogramName,perSecond:false};}else if(histogramName.includes('animation')||histogramName.includes('idle')){yield{bounds:tr.b.math.Range.fromExplicitRange(exp.start,exp.end),name:histogramName,description:'RAIL stage '+histogramName,perSecond:true};}}}
-function*getLoadingIntervals_(model,chromeBounds){const ttiIntervals=getNavigationTTIIntervals_(model);for(const ttiInterval of ttiIntervals){yield{bounds:ttiInterval,name:'load',description:'page loads',perSecond:false};}}
-function computeChromeBounds_(model){const chromeBounds=new tr.b.math.Range();const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);if(chromeHelper===undefined)return chromeBounds;for(const helper of chromeHelper.browserHelpers){if(helper.mainThread){chromeBounds.addRange(helper.mainThread.bounds);}}
-for(const pid in chromeHelper.rendererHelpers){if(chromeHelper.rendererHelpers[pid].mainThread){chromeBounds.addRange(chromeHelper.rendererHelpers[pid].mainThread.bounds);}}
-return chromeBounds;}
-function powerMetric(histograms,model){const data={model,histograms:{}};for(const interval of computeTimeIntervals_(model)){createHistograms_(data,interval,histograms);}}
-tr.metrics.MetricRegistry.register(powerMetric);return{powerMetric};});'use strict';tr.exportTo('tr.metrics.sh',function(){function computeAnimationThroughput(animationExpectation){if(animationExpectation.frameEvents===undefined||animationExpectation.frameEvents.length===0){throw new Error('Animation missing frameEvents '+
-animationExpectation.stableId);}
-const durationInS=tr.b.convertUnit(animationExpectation.duration,tr.b.UnitPrefixScale.METRIC.MILLI,tr.b.UnitPrefixScale.METRIC.NONE);return animationExpectation.frameEvents.length/durationInS;}
-function computeAnimationframeTimeDiscrepancy(animationExpectation){if(animationExpectation.frameEvents===undefined||animationExpectation.frameEvents.length===0){throw new Error('Animation missing frameEvents '+
-animationExpectation.stableId);}
-let frameTimestamps=animationExpectation.frameEvents;frameTimestamps=frameTimestamps.toArray().map(function(event){return event.start;});const absolute=true;return tr.b.math.Statistics.timestampsDiscrepancy(frameTimestamps,absolute);}
-function responsivenessMetric(histograms,model,opt_options){const responseNumeric=new tr.v.Histogram('response latency',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,tr.v.HistogramBinBoundaries.createLinear(100,1e3,50));const throughputNumeric=new tr.v.Histogram('animation throughput',tr.b.Unit.byName.unitlessNumber_biggerIsBetter,tr.v.HistogramBinBoundaries.createLinear(10,60,10));const frameTimeDiscrepancyNumeric=new tr.v.Histogram('animation frameTimeDiscrepancy',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,tr.v.HistogramBinBoundaries.createLinear(0,1e3,50).addExponentialBins(1e4,10));const latencyNumeric=new tr.v.Histogram('animation latency',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,tr.v.HistogramBinBoundaries.createLinear(0,300,60));model.userModel.expectations.forEach(function(ue){if(opt_options&&opt_options.rangeOfInterest&&!opt_options.rangeOfInterest.intersectsExplicitRangeInclusive(ue.start,ue.end)){return;}
-const sampleDiagnosticMap=tr.v.d.DiagnosticMap.fromObject({relatedEvents:new tr.v.d.RelatedEventSet([ue])});if(ue instanceof tr.model.um.IdleExpectation){return;}else if(ue instanceof tr.model.um.StartupExpectation){return;}else if(ue instanceof tr.model.um.LoadExpectation){}else if(ue instanceof tr.model.um.ResponseExpectation){responseNumeric.addSample(ue.duration,sampleDiagnosticMap);}else if(ue instanceof tr.model.um.AnimationExpectation){if(ue.frameEvents===undefined||ue.frameEvents.length===0){return;}
-const throughput=computeAnimationThroughput(ue);if(throughput===undefined){throw new Error('Missing throughput for '+
-ue.stableId);}
-throughputNumeric.addSample(throughput,sampleDiagnosticMap);const frameTimeDiscrepancy=computeAnimationframeTimeDiscrepancy(ue);if(frameTimeDiscrepancy===undefined){throw new Error('Missing frameTimeDiscrepancy for '+
-ue.stableId);}
-frameTimeDiscrepancyNumeric.addSample(frameTimeDiscrepancy,sampleDiagnosticMap);ue.associatedEvents.forEach(function(event){if(!(event instanceof tr.e.cc.InputLatencyAsyncSlice)){return;}
-latencyNumeric.addSample(event.duration,sampleDiagnosticMap);});}else{throw new Error('Unrecognized stage for '+ue.stableId);}});[responseNumeric,throughputNumeric,frameTimeDiscrepancyNumeric,latencyNumeric].forEach(function(numeric){numeric.customizeSummaryOptions({avg:true,max:true,min:true,std:true});});histograms.addHistogram(responseNumeric);histograms.addHistogram(throughputNumeric);histograms.addHistogram(frameTimeDiscrepancyNumeric);histograms.addHistogram(latencyNumeric);}
-tr.metrics.MetricRegistry.register(responsivenessMetric,{supportsRangeOfInterest:true,requiredCategories:['rail'],});return{responsivenessMetric,};});'use strict';tr.exportTo('tr.metrics.sh',function(){function webviewStartupMetric(histograms,model){const startupWallHist=new tr.v.Histogram('webview_startup_wall_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);startupWallHist.description='WebView startup wall time';const startupCPUHist=new tr.v.Histogram('webview_startup_cpu_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);startupCPUHist.description='WebView startup CPU time';const loadWallHist=new tr.v.Histogram('webview_url_load_wall_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);loadWallHist.description='WebView blank URL load wall time';const loadCPUHist=new tr.v.Histogram('webview_url_load_cpu_time',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter);loadCPUHist.description='WebView blank URL load CPU time';for(const slice of model.getDescendantEvents()){if(!(slice instanceof tr.model.ThreadSlice))continue;if(slice.title==='WebViewStartupInterval'){startupWallHist.addSample(slice.duration);startupCPUHist.addSample(slice.cpuDuration);}
-if(slice.title==='WebViewBlankUrlLoadInterval'){loadWallHist.addSample(slice.duration);loadCPUHist.addSample(slice.cpuDuration);}}
-histograms.addHistogram(startupWallHist);histograms.addHistogram(startupCPUHist);histograms.addHistogram(loadWallHist);histograms.addHistogram(loadCPUHist);}
-tr.metrics.MetricRegistry.register(webviewStartupMetric);return{webviewStartupMetric,};});'use strict';tr.exportTo('tr.metrics.tabs',function(){function tabsMetric(histograms,model,opt_options){const thread=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper).browserHelper.mainThread;const tabSwitchLatencies=[];if(thread){for(const slice of thread.asyncSliceGroup.slices){if(slice.title==='TabSwitching::Latency'){tabSwitchLatencies.push(slice.duration);}}}
-histograms.createHistogram('tab_switching_latency',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,tabSwitchLatencies,{description:'Tab switching time in ms',summaryOptions:{sum:false}});}
-tr.metrics.MetricRegistry.register(tabsMetric,{supportsRangeOfInterest:false,});return{tabsMetric,};});'use strict';tr.exportTo('tr.metrics',function(){const MEMORY_INFRA_TRACING_CATEGORY='disabled-by-default-memory-infra';const TIME_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1e-3,1e5,30);const BYTE_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1e9,30);const COUNT_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1e5,30);const SUMMARY_OPTIONS=tr.v.Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS;function addMemoryInfraHistograms(histograms,model,categoryNamesToTotalEventSizes){const memoryDumpCount=model.globalMemoryDumps.length;if(memoryDumpCount===0)return;let totalOverhead=0;let nonMemoryInfraThreadOverhead=0;const overheadByProvider={};for(const process of Object.values(model.processes)){for(const thread of Object.values(process.threads)){for(const slice of Object.values(thread.sliceGroup.slices)){if(slice.category!==MEMORY_INFRA_TRACING_CATEGORY)continue;totalOverhead+=slice.duration;if(thread.name!=='MemoryInfra'){nonMemoryInfraThreadOverhead+=slice.duration;}
-if(slice.args&&slice.args['dump_provider.name']){const providerName=slice.args['dump_provider.name'];let durationAndCount=overheadByProvider[providerName];if(durationAndCount===undefined){overheadByProvider[providerName]=durationAndCount={duration:0,count:0};}
-durationAndCount.duration+=slice.duration;durationAndCount.count++;}}}}
-histograms.createHistogram('memory_dump_cpu_overhead',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,totalOverhead/memoryDumpCount,{binBoundaries:TIME_BOUNDARIES,description:'Average CPU overhead on all threads per memory-infra dump',summaryOptions:SUMMARY_OPTIONS,});histograms.createHistogram('nonmemory_thread_memory_dump_cpu_overhead',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,nonMemoryInfraThreadOverhead/memoryDumpCount,{binBoundaries:TIME_BOUNDARIES,description:'Average CPU overhead on non-memory-infra threads '+'per memory-infra dump',summaryOptions:SUMMARY_OPTIONS,});for(const[providerName,overhead]of Object.entries(overheadByProvider)){histograms.createHistogram(`${providerName}_memory_dump_cpu_overhead`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,overhead.duration/overhead.count,{binBoundaries:TIME_BOUNDARIES,description:`Average CPU overhead of ${providerName} per OnMemoryDump call`,summaryOptions:SUMMARY_OPTIONS,});}
-const memoryInfraEventsSize=categoryNamesToTotalEventSizes.get(MEMORY_INFRA_TRACING_CATEGORY);const memoryInfraTraceBytesValue=new tr.v.Histogram('total_memory_dump_size',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);memoryInfraTraceBytesValue.description='Total trace size of memory-infra dumps in bytes';memoryInfraTraceBytesValue.customizeSummaryOptions(SUMMARY_OPTIONS);memoryInfraTraceBytesValue.addSample(memoryInfraEventsSize);histograms.addHistogram(memoryInfraTraceBytesValue);const traceBytesPerDumpValue=new tr.v.Histogram('memory_dump_size',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);traceBytesPerDumpValue.description='Average trace size of memory-infra dumps in bytes';traceBytesPerDumpValue.customizeSummaryOptions(SUMMARY_OPTIONS);traceBytesPerDumpValue.addSample(memoryInfraEventsSize/memoryDumpCount);histograms.addHistogram(traceBytesPerDumpValue);}
-function tracingMetric(histograms,model){histograms.createHistogram('trace_import_duration',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,model.stats.traceImportDurationMs,{binBoundaries:TIME_BOUNDARIES,description:'Duration that trace viewer required to import the trace',summaryOptions:SUMMARY_OPTIONS,});if(!model.stats.hasEventSizesinBytes)return;const eventStats=model.stats.allTraceEventStatsInTimeIntervals;eventStats.sort((a,b)=>a.timeInterval-b.timeInterval);const totalTraceBytes=eventStats.reduce((a,b)=>a+b.totalEventSizeinBytes,0);let maxEventCountPerSec=0;let maxEventBytesPerSec=0;const INTERVALS_PER_SEC=Math.floor(1000/model.stats.TIME_INTERVAL_SIZE_IN_MS);let runningEventNumPerSec=0;let runningEventBytesPerSec=0;let start=0;let end=0;while(end<eventStats.length){runningEventNumPerSec+=eventStats[end].numEvents;runningEventBytesPerSec+=eventStats[end].totalEventSizeinBytes;end++;while((eventStats[end-1].timeInterval-
-eventStats[start].timeInterval)>=INTERVALS_PER_SEC){runningEventNumPerSec-=eventStats[start].numEvents;runningEventBytesPerSec-=eventStats[start].totalEventSizeinBytes;start++;}
-maxEventCountPerSec=Math.max(maxEventCountPerSec,runningEventNumPerSec);maxEventBytesPerSec=Math.max(maxEventBytesPerSec,runningEventBytesPerSec);}
-const stats=model.stats.allTraceEventStats;const categoryNamesToTotalEventSizes=(stats.reduce((map,stat)=>(map.set(stat.category,((map.get(stat.category)||0)+
-stat.totalEventSizeinBytes))),new Map()));const maxCatNameAndBytes=Array.from(categoryNamesToTotalEventSizes.entries()).reduce((a,b)=>((b[1]>=a[1])?b:a));const maxEventBytesPerCategory=maxCatNameAndBytes[1];const categoryWithMaxEventBytes=maxCatNameAndBytes[0];const maxEventCountPerSecValue=new tr.v.Histogram('peak_event_rate',tr.b.Unit.byName.count_smallerIsBetter,COUNT_BOUNDARIES);maxEventCountPerSecValue.description='Max number of events per second';maxEventCountPerSecValue.customizeSummaryOptions(SUMMARY_OPTIONS);maxEventCountPerSecValue.addSample(maxEventCountPerSec);const maxEventBytesPerSecValue=new tr.v.Histogram('peak_event_size_rate',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);maxEventBytesPerSecValue.description='Max event size in bytes per second';maxEventBytesPerSecValue.customizeSummaryOptions(SUMMARY_OPTIONS);maxEventBytesPerSecValue.addSample(maxEventBytesPerSec);const totalTraceBytesValue=new tr.v.Histogram('trace_size',tr.b.Unit.byName.sizeInBytes_smallerIsBetter,BYTE_BOUNDARIES);totalTraceBytesValue.customizeSummaryOptions(SUMMARY_OPTIONS);totalTraceBytesValue.addSample(totalTraceBytes);const biggestCategory={name:categoryWithMaxEventBytes,size_in_bytes:maxEventBytesPerCategory};totalTraceBytesValue.diagnostics.set('category_with_max_event_size',new tr.v.d.GenericSet([biggestCategory]));histograms.addHistogram(totalTraceBytesValue);maxEventCountPerSecValue.diagnostics.set('category_with_max_event_size',new tr.v.d.GenericSet([biggestCategory]));histograms.addHistogram(maxEventCountPerSecValue);maxEventBytesPerSecValue.diagnostics.set('category_with_max_event_size',new tr.v.d.GenericSet([biggestCategory]));histograms.addHistogram(maxEventBytesPerSecValue);addMemoryInfraHistograms(histograms,model,categoryNamesToTotalEventSizes);}
-tr.metrics.MetricRegistry.register(tracingMetric);return{tracingMetric,MEMORY_INFRA_TRACING_CATEGORY,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(4,200,100);function computeExecuteMetrics(histograms,model){const cpuTotalExecution=new tr.v.Histogram('v8_execution_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalExecution.description='cpu total time spent in script execution';const wallTotalExecution=new tr.v.Histogram('v8_execution_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalExecution.description='wall total time spent in script execution';const cpuSelfExecution=new tr.v.Histogram('v8_execution_cpu_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuSelfExecution.description='cpu self time spent in script execution';const wallSelfExecution=new tr.v.Histogram('v8_execution_wall_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallSelfExecution.description='wall self time spent in script execution';for(const e of model.findTopmostSlicesNamed('V8.Execute')){cpuTotalExecution.addSample(e.cpuDuration);wallTotalExecution.addSample(e.duration);cpuSelfExecution.addSample(e.cpuSelfTime);wallSelfExecution.addSample(e.selfTime);}
-histograms.addHistogram(cpuTotalExecution);histograms.addHistogram(wallTotalExecution);histograms.addHistogram(cpuSelfExecution);histograms.addHistogram(wallSelfExecution);}
-function computeParseLazyMetrics(histograms,model){const cpuSelfParseLazy=new tr.v.Histogram('v8_parse_lazy_cpu_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuSelfParseLazy.description='cpu self time spent performing lazy parsing';const wallSelfParseLazy=new tr.v.Histogram('v8_parse_lazy_wall_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallSelfParseLazy.description='wall self time spent performing lazy parsing';for(const e of model.findTopmostSlicesNamed('V8.ParseLazyMicroSeconds')){cpuSelfParseLazy.addSample(e.cpuSelfTime);wallSelfParseLazy.addSample(e.selfTime);}
-for(const e of model.findTopmostSlicesNamed('V8.ParseLazy')){cpuSelfParseLazy.addSample(e.cpuSelfTime);wallSelfParseLazy.addSample(e.selfTime);}
-histograms.addHistogram(cpuSelfParseLazy);histograms.addHistogram(wallSelfParseLazy);}
-function computeCompileFullCodeMetrics(histograms,model){const cpuSelfCompileFullCode=new tr.v.Histogram('v8_compile_full_code_cpu_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuSelfCompileFullCode.description='cpu self time spent performing compiling full code';const wallSelfCompileFullCode=new tr.v.Histogram('v8_compile_full_code_wall_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallSelfCompileFullCode.description='wall self time spent performing compiling full code';for(const e of model.findTopmostSlicesNamed('V8.CompileFullCode')){cpuSelfCompileFullCode.addSample(e.cpuSelfTime);wallSelfCompileFullCode.addSample(e.selfTime);}
-histograms.addHistogram(cpuSelfCompileFullCode);histograms.addHistogram(wallSelfCompileFullCode);}
-function computeCompileIgnitionMetrics(histograms,model){const cpuSelfCompileIgnition=new tr.v.Histogram('v8_compile_ignition_cpu_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuSelfCompileIgnition.description='cpu self time spent in compile ignition';const wallSelfCompileIgnition=new tr.v.Histogram('v8_compile_ignition_wall_self',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallSelfCompileIgnition.description='wall self time spent in compile ignition';for(const e of model.findTopmostSlicesNamed('V8.CompileIgnition')){cpuSelfCompileIgnition.addSample(e.cpuSelfTime);wallSelfCompileIgnition.addSample(e.selfTime);}
-histograms.addHistogram(cpuSelfCompileIgnition);histograms.addHistogram(wallSelfCompileIgnition);}
-function computeRecompileMetrics(histograms,model){const cpuTotalRecompileSynchronous=new tr.v.Histogram('v8_recompile_synchronous_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalRecompileSynchronous.description='cpu total time spent in synchronous recompilation';const wallTotalRecompileSynchronous=new tr.v.Histogram('v8_recompile_synchronous_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalRecompileSynchronous.description='wall total time spent in synchronous recompilation';const cpuTotalRecompileConcurrent=new tr.v.Histogram('v8_recompile_concurrent_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalRecompileConcurrent.description='cpu total time spent in concurrent recompilation';const wallTotalRecompileConcurrent=new tr.v.Histogram('v8_recompile_concurrent_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalRecompileConcurrent.description='wall total time spent in concurrent recompilation';const cpuTotalRecompileOverall=new tr.v.Histogram('v8_recompile_overall_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalRecompileOverall.description='cpu total time spent in synchronous or concurrent recompilation';const wallTotalRecompileOverall=new tr.v.Histogram('v8_recompile_overall_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalRecompileOverall.description='wall total time spent in synchronous or concurrent recompilation';for(const e of model.findTopmostSlicesNamed('V8.RecompileSynchronous')){cpuTotalRecompileSynchronous.addSample(e.cpuDuration);wallTotalRecompileSynchronous.addSample(e.duration);cpuTotalRecompileOverall.addSample(e.cpuDuration);wallTotalRecompileOverall.addSample(e.duration);}
-histograms.addHistogram(cpuTotalRecompileSynchronous);histograms.addHistogram(wallTotalRecompileSynchronous);for(const e of model.findTopmostSlicesNamed('V8.RecompileConcurrent')){cpuTotalRecompileConcurrent.addSample(e.cpuDuration);wallTotalRecompileConcurrent.addSample(e.duration);cpuTotalRecompileOverall.addSample(e.cpuDuration);wallTotalRecompileOverall.addSample(e.duration);}
-histograms.addHistogram(cpuTotalRecompileConcurrent);histograms.addHistogram(wallTotalRecompileConcurrent);histograms.addHistogram(cpuTotalRecompileOverall);histograms.addHistogram(wallTotalRecompileOverall);}
-function computeOptimizeCodeMetrics(histograms,model){const cpuTotalOptimizeCode=new tr.v.Histogram('v8_optimize_code_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalOptimizeCode.description='cpu total time spent in code optimization';const wallTotalOptimizeCode=new tr.v.Histogram('v8_optimize_code_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalOptimizeCode.description='wall total time spent in code optimization';for(const e of model.findTopmostSlicesNamed('V8.OptimizeCode')){cpuTotalOptimizeCode.addSample(e.cpuDuration);wallTotalOptimizeCode.addSample(e.duration);}
-histograms.addHistogram(cpuTotalOptimizeCode);histograms.addHistogram(wallTotalOptimizeCode);}
-function computeDeoptimizeCodeMetrics(histograms,model){const cpuTotalDeoptimizeCode=new tr.v.Histogram('v8_deoptimize_code_cpu_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);cpuTotalDeoptimizeCode.description='cpu total time spent in code deoptimization';const wallTotalDeoptimizeCode=new tr.v.Histogram('v8_deoptimize_code_wall_total',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);wallTotalDeoptimizeCode.description='wall total time spent in code deoptimization';for(const e of model.findTopmostSlicesNamed('V8.DeoptimizeCode')){cpuTotalDeoptimizeCode.addSample(e.cpuDuration);wallTotalDeoptimizeCode.addSample(e.duration);}
-histograms.addHistogram(cpuTotalDeoptimizeCode);histograms.addHistogram(wallTotalDeoptimizeCode);}
-function executionMetric(histograms,model){computeExecuteMetrics(histograms,model);computeParseLazyMetrics(histograms,model);computeCompileIgnitionMetrics(histograms,model);computeCompileFullCodeMetrics(histograms,model);computeRecompileMetrics(histograms,model);computeOptimizeCodeMetrics(histograms,model);computeDeoptimizeCodeMetrics(histograms,model);}
-tr.metrics.MetricRegistry.register(executionMetric);return{executionMetric,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const TARGET_FPS=60;const MS_PER_SECOND=1000;const WINDOW_SIZE_MS=MS_PER_SECOND/TARGET_FPS;function gcMetric(histograms,model){addDurationOfTopEvents(histograms,model);addTotalDurationOfTopEvents(histograms,model);addDurationOfSubEvents(histograms,model);addPercentageInV8ExecuteOfTopEvents(histograms,model);addTotalPercentageInV8Execute(histograms,model);}
-tr.metrics.MetricRegistry.register(gcMetric);const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const percentage_biggerIsBetter=tr.b.Unit.byName.normalizedPercentage_biggerIsBetter;const percentage_smallerIsBetter=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(0,20,200).addExponentialBins(200,100);function createNumericForTopEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:true,max:true,min:false,std:true,sum:true,percentile:[0.90]});return n;}
-function createNumericForSubEventTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:false,max:true,min:false,std:false,sum:false,percentile:[0.90]});return n;}
-function createNumericForIdleTime(name){const n=new tr.v.Histogram(name,timeDurationInMs_smallerIsBetter,CUSTOM_BOUNDARIES);n.customizeSummaryOptions({avg:true,count:false,max:true,min:false,std:false,sum:true,percentile:[]});return n;}
-function createPercentage(name,numerator,denominator,unit){const hist=new tr.v.Histogram(name,unit);if(denominator===0){hist.addSample(0);}else{hist.addSample(numerator/denominator);}
-hist.customizeSummaryOptions({avg:true,count:false,max:false,min:false,std:false,sum:false,percentile:[]});return hist;}
-function isNotForcedTopGarbageCollectionEvent(event){return tr.metrics.v8.utils.isTopGarbageCollectionEvent(event)&&!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event);}
-function isNotForcedSubGarbageCollectionEvent(event){return tr.metrics.v8.utils.isSubGarbageCollectionEvent(event)&&!tr.metrics.v8.utils.isForcedGarbageCollectionEvent(event);}
-function addDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,tr.metrics.v8.utils.topGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addTotalDurationOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,event=>'v8-gc-total',function(name,events){const cpuDuration=createNumericForTopEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addDurationOfSubEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedSubGarbageCollectionEvent,tr.metrics.v8.utils.subGarbageCollectionEventName,function(name,events){const cpuDuration=createNumericForSubEventTime(name);events.forEach(function(event){cpuDuration.addSample(event.cpuDuration);});histograms.addHistogram(cpuDuration);});}
-function addPercentageInV8ExecuteOfTopEvents(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,tr.metrics.v8.utils.topGarbageCollectionEventName,function(name,events){addPercentageInV8Execute(histograms,model,name,events);});}
-function addTotalPercentageInV8Execute(histograms,model){tr.metrics.v8.utils.groupAndProcessEvents(model,isNotForcedTopGarbageCollectionEvent,event=>'v8-gc-total',function(name,events){addPercentageInV8Execute(histograms,model,name,events);});}
-function addPercentageInV8Execute(histograms,model,name,events){let cpuDurationInV8Execute=0;let cpuDurationTotal=0;events.forEach(function(event){const v8Execute=tr.metrics.v8.utils.findParent(event,tr.metrics.v8.utils.isV8ExecuteEvent);if(v8Execute){cpuDurationInV8Execute+=event.cpuDuration;}
-cpuDurationTotal+=event.cpuDuration;});const percentage=createPercentage(name+'_percentage_in_v8_execute',cpuDurationInV8Execute,cpuDurationTotal,percentage_smallerIsBetter);histograms.addHistogram(percentage);}
-return{gcMetric,WINDOW_SIZE_MS,};});'use strict';tr.exportTo('tr.metrics.v8',function(){const COUNT_CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(1,1000000,50);const DURATION_CUSTOM_BOUNDARIES=tr.v.HistogramBinBoundaries.createExponential(0.1,10000,50);const SUMMARY_OPTIONS={std:false,count:false,sum:false,min:false,max:false,};function computeDomContentLoadedTime_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let domContentLoadedTime=0;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){for(const ev of rendererHelper.mainThread.sliceGroup.childEvents()){if(ev.title==='domContentLoadedEventEnd'&&ev.start>domContentLoadedTime){domContentLoadedTime=ev.start;}}}
-return domContentLoadedTime;}
-function computeInteractiveTime_(model){const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let interactiveTime=0;for(const rendererHelper of Object.values(chromeHelper.rendererHelpers)){const samples=tr.metrics.sh.collectLoadingMetricsForRenderer(rendererHelper).interactiveSamples;if(samples.length===0)continue;if(interactiveTime!==0)throw new Error('Too many navigations');const diagnostics=tr.b.getOnlyElement(samples).diagnostics;interactiveTime=tr.b.getOnlyElement(diagnostics.get('Navigation infos')).eventTimestamp;}
-return interactiveTime;}
-function convertMicroToMilli_(time){return tr.b.convertUnit(time,tr.b.UnitPrefixScale.METRIC.MICRO,tr.b.UnitPrefixScale.METRIC.MILLI);}
-function computeRuntimeStats(histograms,slices){const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slices);function addHistogramsForRuntimeGroup(runtimeGroup,optRelatedNameMaps){histograms.createHistogram(`${runtimeGroup.name}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,{value:convertMicroToMilli_(runtimeGroup.time),diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.durationBreakdown}:{}},{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.durationNames}:{}});histograms.createHistogram(`${runtimeGroup.name}:count`,tr.b.Unit.byName.count_smallerIsBetter,{value:runtimeGroup.count,diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.countBreakdown}:{}},{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,diagnostics:optRelatedNameMaps?{samples:optRelatedNameMaps.countNames}:{}});}
-function addDetailedHistogramsForRuntimeGroup(runtimeGroup){const durationNames=new tr.v.d.RelatedNameMap();const durationBreakdown=new tr.v.d.Breakdown();const countNames=new tr.v.d.RelatedNameMap();const countBreakdown=new tr.v.d.Breakdown();for(const entry of runtimeGroup.values){const durationSampleHistogram=histograms.createHistogram(`${entry.name}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,convertMicroToMilli_(entry.time),{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});durationNames.set(entry.name,durationSampleHistogram.name);durationBreakdown.set(entry.name,convertMicroToMilli_(entry.time));const countSampleHistogram=histograms.createHistogram(`${entry.name}:count`,tr.b.Unit.byName.count_smallerIsBetter,entry.count,{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});countNames.set(entry.name,countSampleHistogram.name);countBreakdown.set(entry.name,entry.count);}
-addHistogramsForRuntimeGroup(runtimeGroup,{durationNames,durationBreakdown,countNames,countBreakdown});}
-for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addHistogramsForRuntimeGroup(runtimeGroup);}
-const blinkGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;if(blinkGroupCollection.totalTime>0){blinkGroupCollection.runtimeGroups.forEach(addDetailedHistogramsForRuntimeGroup);}}
-function runtimeStatsMetric(histograms,model){const interactiveTime=computeInteractiveTime_(model);const domContentLoadedTime=computeDomContentLoadedTime_(model);const endTime=Math.max(interactiveTime,domContentLoadedTime);const slices=[...model.getDescendantEvents()].filter(event=>event instanceof tr.e.v8.V8ThreadSlice&&event.start<=endTime);computeRuntimeStats(histograms,slices);}
-function addDurationHistogram(railStageName,runtimeGroupName,sampleValue,histograms,durationRelatedHistsByGroupName){const durationHistogram=histograms.createHistogram(`${railStageName}_${runtimeGroupName}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,convertMicroToMilli_(sampleValue),{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});if(durationRelatedHistsByGroupName.get(runtimeGroupName)===undefined){const durationHistogramMap=new tr.v.d.RelatedHistogramMap();durationHistogramMap.set(railStageName,durationHistogram);durationRelatedHistsByGroupName.set(runtimeGroupName,durationHistogramMap);}else{durationRelatedHistsByGroupName.get(runtimeGroupName).set(railStageName,durationHistogram);}}
-function addCountHistogram(railStageName,runtimeGroupName,sampleValue,histograms,countRelatedHistsByGroupName){const countHistogram=histograms.createHistogram(`${railStageName}_${runtimeGroupName}:count`,tr.b.Unit.byName.count_smallerIsBetter,sampleValue,{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});if(countRelatedHistsByGroupName.get(runtimeGroupName)===undefined){const countHistogramMap=new tr.v.d.RelatedHistogramMap();countHistogramMap.set(railStageName,countHistogram);countRelatedHistsByGroupName.set(runtimeGroupName,countHistogramMap);}else{countRelatedHistsByGroupName.get(runtimeGroupName).set(railStageName,countHistogram);}}
-function addTotalDurationHistogram(histogramName,time,histograms,durationRelatedHistsByGroupName){const durationHistogram=histograms.createHistogram(`${histogramName}:duration`,tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,convertMicroToMilli_(time),{binBoundaries:DURATION_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});const durationRelatedHistogram=durationRelatedHistsByGroupName.get(histogramName);if(durationRelatedHistogram!==undefined){durationHistogram.diagnostics.set('RAIL stages',durationRelatedHistogram);}}
-function addTotalCountHistogram(histogramName,count,histograms,countRelatedHistsByGroupName){const countHistogram=histograms.createHistogram(`${histogramName}:count`,tr.b.Unit.byName.count_smallerIsBetter,count,{binBoundaries:COUNT_CUSTOM_BOUNDARIES,summaryOptions:SUMMARY_OPTIONS,});const countRelatedHistogram=countRelatedHistsByGroupName.get(histogramName);if(countRelatedHistogram!==undefined){countHistogram.diagnostics.set('RAIL stages',countRelatedHistogram);}}
-function computeRuntimeStatsBucketOnUE(histograms,slices,v8SlicesBucketOnUEMap){const durationRelatedHistsByGroupName=new Map();const countRelatedHistsByGroupName=new Map();for(const[name,slicesUE]of v8SlicesBucketOnUEMap){const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slicesUE);let overallV8Time=runtimeGroupCollection.totalTime;let overallV8Count=runtimeGroupCollection.totalCount;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addDurationHistogram(name,runtimeGroup.name,runtimeGroup.time,histograms,durationRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Time-=runtimeGroup.time;}
-addCountHistogram(name,runtimeGroup.name,runtimeGroup.count,histograms,countRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Count-=runtimeGroup.count;}}
-if(runtimeGroupCollection.blinkRCSGroupCollection.totalTime>0){const blinkRCSGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;for(const group of blinkRCSGroupCollection.runtimeGroups){addDurationHistogram(name,group.name,group.time,histograms,durationRelatedHistsByGroupName);addCountHistogram(name,group.name,group.count,histograms,countRelatedHistsByGroupName);}}
-addDurationHistogram(name,'V8-Only',overallV8Time,histograms,durationRelatedHistsByGroupName);addCountHistogram(name,'V8-Only',overallV8Count,histograms,countRelatedHistsByGroupName);}
-const runtimeGroupCollection=new tr.e.v8.RuntimeStatsGroupCollection();runtimeGroupCollection.addSlices(slices);let overallV8Time=runtimeGroupCollection.totalTime;let overallV8Count=runtimeGroupCollection.totalCount;for(const runtimeGroup of runtimeGroupCollection.runtimeGroups){addTotalDurationHistogram(runtimeGroup.name,runtimeGroup.time,histograms,durationRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Time-=runtimeGroup.time;}
-addTotalCountHistogram(runtimeGroup.name,runtimeGroup.count,histograms,countRelatedHistsByGroupName);if(runtimeGroup.name==='Blink C++'){overallV8Count-=runtimeGroup.count;}}
-if(runtimeGroupCollection.blinkRCSGroupCollection.totalTime>0){const blinkRCSGroupCollection=runtimeGroupCollection.blinkRCSGroupCollection;for(const group of blinkRCSGroupCollection.runtimeGroups){addTotalDurationHistogram(group.name,group.time,histograms,durationRelatedHistsByGroupName);addTotalCountHistogram(group.name,group.count,histograms,countRelatedHistsByGroupName);}}
-addTotalDurationHistogram('V8-Only',overallV8Time,histograms,durationRelatedHistsByGroupName);addTotalCountHistogram('V8-Only',overallV8Count,histograms,countRelatedHistsByGroupName);}
-function runtimeStatsTotalMetric(histograms,model){const v8ThreadSlices=[...model.getDescendantEvents()].filter(event=>event instanceof tr.e.v8.V8ThreadSlice).sort((e1,e2)=>e1.start-e2.start);const v8SlicesBucketOnUEMap=new Map();for(const expectation of model.userModel.expectations){const slices=expectation.range.filterArray(v8ThreadSlices,event=>event.start);if(slices.length===0)continue;const lastSlice=slices[slices.length-1];if(!expectation.range.intersectsRangeExclusive(lastSlice.range)){slices.pop();}
-if(v8SlicesBucketOnUEMap.get(expectation.stageTitle)===undefined){v8SlicesBucketOnUEMap.set(expectation.stageTitle,slices);}else{const totalSlices=v8SlicesBucketOnUEMap.get(expectation.stageTitle).concat(slices);v8SlicesBucketOnUEMap.set(expectation.stageTitle,totalSlices);}}
-computeRuntimeStatsBucketOnUE(histograms,v8ThreadSlices,v8SlicesBucketOnUEMap);}
-tr.metrics.MetricRegistry.register(runtimeStatsTotalMetric);tr.metrics.MetricRegistry.register(runtimeStatsMetric);return{runtimeStatsMetric,runtimeStatsTotalMetric,};});'use strict';tr.exportTo('tr.metrics.v8',function(){function v8AndMemoryMetrics(histograms,model){tr.metrics.v8.executionMetric(histograms,model);tr.metrics.v8.gcMetric(histograms,model);tr.metrics.sh.memoryMetric(histograms,model,{rangeOfInterest:tr.metrics.v8.utils.rangeForMemoryDumps(model)});}
-tr.metrics.MetricRegistry.register(v8AndMemoryMetrics);return{v8AndMemoryMetrics,};});'use strict';tr.exportTo('tr.metrics.vr',function(){function createHistograms(histograms,name,options){return{wall:histograms.createHistogram(name+'_wall',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],options),cpu:histograms.createHistogram(name+'_cpu',tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,[],options),};}
-function frameCycleDurationMetric(histograms,model,opt_options){const histogramsByEventTitle=new Map();histogramsByEventTitle.set('VrShellGl::DrawFrame',createHistograms(histograms,'draw_frame',{description:'Duration to render one frame'}));histogramsByEventTitle.set('VrShellGl::AcquireFrame',createHistograms(histograms,'acquire_frame',{description:'Duration acquire a frame from GVR'}));histogramsByEventTitle.set('VrShellGl::UpdateController',createHistograms(histograms,'update_controller',{description:'Duration to query input from the controller'}));histogramsByEventTitle.set('VrShellGl::DrawFrameSubmitWhenReady',createHistograms(histograms,'submit_frame',{description:'Duration to submit a frame to GVR'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateAnimationsAndOpacity',createHistograms(histograms,'update_animations_and_opacity',{description:'Duration to apply animation and opacity changes'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateBindings',createHistograms(histograms,'update_bindings',{description:'Duration to push binding values'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateTexturesAndSizes',createHistograms(histograms,'update_textures_and_sizes',{description:'Duration to redraw textures and update element sizes'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateLayout',createHistograms(histograms,'update_layout',{description:'Duration to reposition elements according to their layout'}));histogramsByEventTitle.set('UiScene::OnBeginFrame.UpdateWorldSpaceTransform',createHistograms(histograms,'update_world_space_transforms',{description:'Duration to calculate element transforms in world space'}));const chromeHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let rangeOfInterest=model.bounds;const userExpectationsOfInterest=[tr.model.um.AnimationExpectation];if(opt_options&&opt_options.rangeOfInterest){rangeOfInterest=opt_options.rangeOfInterest;userExpectationsOfInterest.push(tr.model.um.ResponseExpectation);}
-for(const ue of model.userModel.expectations){if(ue.initiatorType!==tr.model.um.INITIATOR_TYPE.VR){continue;}
-if(!userExpectationsOfInterest.some(function(ueOfInterest){return ue instanceof ueOfInterest;})){continue;}
-if(!rangeOfInterest.intersectsExplicitRangeInclusive(ue.start,ue.end)){continue;}
-for(const helper of chromeHelper.browserHelpers){const glThreads=helper.process.findAllThreadsMatching(thread=>!thread.name);for(const glThread of glThreads){for(const event of glThread.getDescendantEvents()){if(!(histogramsByEventTitle.has(event.title))){continue;}
-if(event.start<ue.start||event.end>ue.end){continue;}
-if(event.start<rangeOfInterest.min||event.end>rangeOfInterest.max){continue;}
-const{wall:wallHist,cpu:cpuHist}=histogramsByEventTitle.get(event.title);wallHist.addSample(event.duration);cpuHist.addSample(event.cpuDuration);}}}}}
-tr.metrics.MetricRegistry.register(frameCycleDurationMetric,{supportsRangeOfInterest:true,});return{frameCycleDurationMetric,};});'use strict';tr.exportTo('tr.metrics.vr',function(){function webvrMetric(histograms,model,opt_options){const WEBVR_COUNTERS=new Map([['gpu.WebVR FPS',{name:'webvr_fps',unit:tr.b.Unit.byName.count_biggerIsBetter,samples:{},options:{description:'WebVR frame per second',binBoundaries:tr.v.HistogramBinBoundaries.createLinear(20,120,25),},}],['gpu.WebVR frame time (ms)',{name:'webvr_frame_time',unit:tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,samples:{},options:{description:'WebVR frame time in ms',binBoundaries:tr.v.HistogramBinBoundaries.createLinear(20,120,25),},}],['gpu.WebVR pose prediction (ms)',{name:'webvr_pose_prediction',unit:tr.b.Unit.byName.timeDurationInMs_smallerIsBetter,samples:{},options:{description:'WebVR pose prediction in ms',binBoundaries:tr.v.HistogramBinBoundaries.createLinear(20,120,25),},}],]);for(const ue of model.userModel.expectations){const rangeOfInterestEnabled=opt_options&&opt_options.rangeOfInterest;if(rangeOfInterestEnabled&&!opt_options.rangeOfInterest.intersectsExplicitRangeInclusive(ue.start,ue.end)){continue;}
-if(ue.initiatorType!==tr.model.um.INITIATOR_TYPE.VR)continue;if(!rangeOfInterestEnabled){if(!(ue instanceof tr.model.um.AnimationExpectation))continue;}else{if(!(ue instanceof tr.model.um.AnimationExpectation||ue instanceof tr.model.um.ResponseExpectation))continue;}
-for(const counter of model.getAllCounters()){if(!(WEBVR_COUNTERS.has(counter.id)))continue;for(const series of counter.series){if(!(series.name in WEBVR_COUNTERS.get(counter.id).samples)){WEBVR_COUNTERS.get(counter.id).samples[series.name]=[];}
-for(const sample of series.samples){if(sample.timestamp<ue.start||sample.timestamp>=ue.end){continue;}
-if(rangeOfInterestEnabled&&!opt_options.rangeOfInterest.intersectsExplicitRangeInclusive(sample.timestamp,sample.timestamp)){continue;}
-WEBVR_COUNTERS.get(counter.id).samples[series.name].push(sample.value);}}}}
-if(!('value'in WEBVR_COUNTERS.get('gpu.WebVR FPS').samples)){WEBVR_COUNTERS.get('gpu.WebVR FPS').samples.value=[0];}
-for(const[key,value]of WEBVR_COUNTERS){for(const[seriesName,samples]of Object.entries(value.samples)){let histogramName=value.name;if(seriesName!=='value'){histogramName=`${histogramName}_${seriesName}`;}
-histograms.createHistogram(histogramName,value.unit,samples,value.options);}}}
-tr.metrics.MetricRegistry.register(webvrMetric,{supportsRangeOfInterest:true,});return{webvrMetric,};});'use strict';tr.exportTo('tr.metrics.webrtc',function(){const DISPLAY_HERTZ=60.0;const VSYNC_DURATION_US=1e6/DISPLAY_HERTZ;const SEVERITY=3;const FROZEN_FRAME_VSYNC_COUNT_THRESHOLD=6;const WEB_MEDIA_PLAYER_UPDATE_TITLE='UpdateCurrentFrame';const IDEAL_RENDER_INSTANT_NAME='Ideal Render Instant';const ACTUAL_RENDER_BEGIN_NAME='Actual Render Begin';const ACTUAL_RENDER_END_NAME='Actual Render End';const STREAM_ID_NAME='Serial';const REQUIRED_EVENT_ARGS_NAMES=[IDEAL_RENDER_INSTANT_NAME,ACTUAL_RENDER_BEGIN_NAME,ACTUAL_RENDER_END_NAME,STREAM_ID_NAME];const SUMMARY_OPTIONS=tr.v.Histogram.AVERAGE_ONLY_SUMMARY_OPTIONS;const count_smallerIsBetter=tr.b.Unit.byName.count_smallerIsBetter;const percentage_biggerIsBetter=tr.b.Unit.byName.normalizedPercentage_biggerIsBetter;const percentage_smallerIsBetter=tr.b.Unit.byName.normalizedPercentage_smallerIsBetter;const timeDurationInMs_smallerIsBetter=tr.b.Unit.byName.timeDurationInMs_smallerIsBetter;const unitlessNumber_biggerIsBetter=tr.b.Unit.byName.unitlessNumber_biggerIsBetter;function isValidEvent(event){if(event.title!==WEB_MEDIA_PLAYER_UPDATE_TITLE||!event.args){return false;}
-for(const parameter of REQUIRED_EVENT_ARGS_NAMES){if(!(parameter in event.args)){return false;}}
-return true;}
-function webrtcRenderingMetric(histograms,model){const modelHelper=model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);let webMediaPlayerMSEvents=[];for(const rendererPid in modelHelper.rendererHelpers){const rendererHelper=modelHelper.rendererHelpers[rendererPid];const compositorThread=rendererHelper.compositorThread;if(compositorThread!==undefined){webMediaPlayerMSEvents=webMediaPlayerMSEvents.concat(compositorThread.sliceGroup.slices.filter(isValidEvent));}}
-const eventsByStreamName=tr.b.groupIntoMap(webMediaPlayerMSEvents,event=>event.args[STREAM_ID_NAME]);for(const[streamName,events]of eventsByStreamName){getTimeStats(histograms,streamName,events);}}
-tr.metrics.MetricRegistry.register(webrtcRenderingMetric);function getTimeStats(histograms,streamName,events){const frameHist=getFrameDistribution(histograms,events);addFpsFromFrameDistribution(histograms,frameHist);addFreezingScore(histograms,frameHist);const driftTimeStats=getDriftStats(events);histograms.createHistogram('WebRTCRendering_drift_time',timeDurationInMs_smallerIsBetter,driftTimeStats.driftTime,{summaryOptions:{count:false,min:false,percentile:[0.75,0.9],},});histograms.createHistogram('WebRTCRendering_rendering_length_error',percentage_smallerIsBetter,driftTimeStats.renderingLengthError,{summaryOptions:SUMMARY_OPTIONS,});const smoothnessStats=getSmoothnessStats(driftTimeStats.driftTime);histograms.createHistogram('WebRTCRendering_percent_badly_out_of_sync',percentage_smallerIsBetter,smoothnessStats.percentBadlyOutOfSync,{summaryOptions:SUMMARY_OPTIONS,});histograms.createHistogram('WebRTCRendering_percent_out_of_sync',percentage_smallerIsBetter,smoothnessStats.percentOutOfSync,{summaryOptions:SUMMARY_OPTIONS,});histograms.createHistogram('WebRTCRendering_smoothness_score',percentage_biggerIsBetter,smoothnessStats.smoothnessScore,{summaryOptions:SUMMARY_OPTIONS,});histograms.createHistogram('WebRTCRendering_frames_out_of_sync',count_smallerIsBetter,smoothnessStats.framesOutOfSync,{summaryOptions:SUMMARY_OPTIONS,});histograms.createHistogram('WebRTCRendering_frames_badly_out_of_sync',count_smallerIsBetter,smoothnessStats.framesSeverelyOutOfSync,{summaryOptions:SUMMARY_OPTIONS,});}
-const FRAME_DISTRIBUTION_BIN_BOUNDARIES=tr.v.HistogramBinBoundaries.createLinear(1,50,49);function getFrameDistribution(histograms,events){const cadence=tr.b.runLengthEncoding(events.map(e=>e.args[IDEAL_RENDER_INSTANT_NAME]));return histograms.createHistogram('WebRTCRendering_frame_distribution',count_smallerIsBetter,cadence.map(ticks=>ticks.count),{binBoundaries:FRAME_DISTRIBUTION_BIN_BOUNDARIES,summaryOptions:{percentile:[0.75,0.9],},});}
-function addFpsFromFrameDistribution(histograms,frameHist){let numberFrames=0;let numberVsyncs=0;for(let ticks=1;ticks<frameHist.allBins.length;++ticks){const count=frameHist.allBins[ticks].count;numberFrames+=count;numberVsyncs+=ticks*count;}
-const meanRatio=numberVsyncs/numberFrames;histograms.createHistogram('WebRTCRendering_fps',unitlessNumber_biggerIsBetter,DISPLAY_HERTZ/meanRatio,{summaryOptions:SUMMARY_OPTIONS,});}
-function frozenPenaltyWeight(numberFrozenFrames){const penalty={5:1,6:5,7:15,8:25};return penalty[numberFrozenFrames]||(8*(numberFrozenFrames-4));}
-function addFreezingScore(histograms,frameHist){let numberVsyncs=0;let freezingScore=0;let frozenFramesCount=0;for(let ticks=1;ticks<frameHist.allBins.length;++ticks){const count=frameHist.allBins[ticks].count;numberVsyncs+=ticks*count;if(ticks>=FROZEN_FRAME_VSYNC_COUNT_THRESHOLD){frozenFramesCount+=count*(ticks-1);freezingScore+=count*frozenPenaltyWeight(ticks-1);}}
-freezingScore=1-freezingScore/numberVsyncs;if(freezingScore<0){freezingScore=0;}
-histograms.createHistogram('WebRTCRendering_frozen_frames_count',count_smallerIsBetter,frozenFramesCount,{summaryOptions:SUMMARY_OPTIONS,});histograms.createHistogram('WebRTCRendering_freezing_score',percentage_biggerIsBetter,freezingScore,{summaryOptions:SUMMARY_OPTIONS,});}
-function getDriftStats(events){const driftTime=[];const discrepancy=[];let oldIdealRender=0;let expectedIdealRender=0;for(const event of events){const currentIdealRender=event.args[IDEAL_RENDER_INSTANT_NAME];expectedIdealRender+=VSYNC_DURATION_US;if(currentIdealRender===oldIdealRender){continue;}
-const actualRenderBegin=event.args[ACTUAL_RENDER_BEGIN_NAME];driftTime.push(actualRenderBegin-currentIdealRender);discrepancy.push(Math.abs(currentIdealRender-expectedIdealRender));expectedIdealRender=currentIdealRender;oldIdealRender=currentIdealRender;}
-const discrepancySum=tr.b.math.Statistics.sum(discrepancy)-
-discrepancy[0];const lastIdealRender=events[events.length-1].args[IDEAL_RENDER_INSTANT_NAME];const firstIdealRender=events[0].args[IDEAL_RENDER_INSTANT_NAME];const idealRenderSpan=lastIdealRender-firstIdealRender;const renderingLengthError=discrepancySum/idealRenderSpan;return{driftTime,renderingLengthError};}
-function getSmoothnessStats(driftTimes){const meanDriftTime=tr.b.math.Statistics.mean(driftTimes);const normDriftTimes=driftTimes.map(driftTime=>Math.abs(driftTime-meanDriftTime));const framesSeverelyOutOfSync=normDriftTimes.filter(driftTime=>driftTime>2*VSYNC_DURATION_US).length;const framesOutOfSync=normDriftTimes.filter(driftTime=>driftTime>VSYNC_DURATION_US).length;const percentBadlyOutOfSync=framesSeverelyOutOfSync/driftTimes.length;const percentOutOfSync=framesOutOfSync/driftTimes.length;const framesOutOfSyncOnlyOnce=framesOutOfSync-framesSeverelyOutOfSync;let smoothnessScore=1-(framesOutOfSyncOnlyOnce+
-SEVERITY*framesSeverelyOutOfSync)/driftTimes.length;if(smoothnessScore<0){smoothnessScore=0;}
-return{framesOutOfSync,framesSeverelyOutOfSync,percentBadlyOutOfSync,percentOutOfSync,smoothnessScore};}
-return{webrtcRenderingMetric,};});'use strict';Polymer({is:'tr-ui-a-alert-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.currentSelection_=undefined;this.$.table.tableColumns=[{title:'Label',value(row){return row.name;},width:'150px'},{title:'Value',width:'100%',value(row){return row.value;}}];this.$.table.showHeader=false;},get selection(){return this.currentSelection_;},set selection(selection){this.currentSelection_=selection;this.updateContents_();},getRowsForSingleAlert_(alert){const rows=[];for(const argName in alert.args){const argView=document.createElement('tr-ui-a-generic-object-view');argView.object=alert.args[argName];rows.push({name:argName,value:argView});}
-if(alert.associatedEvents.length){alert.associatedEvents.forEach(function(event,i){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(new tr.model.EventSet(event),event.title);let valueString='';if(event instanceof tr.model.TimedEvent){valueString='took '+event.duration.toFixed(2)+'ms';}
-rows.push({name:linkEl,value:valueString});});}
-const descriptionEl=tr.ui.b.createDiv({textContent:alert.info.description,maxWidth:'300px'});rows.push({name:'Description',value:descriptionEl});if(alert.info.docLinks){alert.info.docLinks.forEach(function(linkObject){const linkEl=document.createElement('a');linkEl.target='_blank';linkEl.href=linkObject.href;Polymer.dom(linkEl).textContent=Polymer.dom(linkObject).textContent;rows.push({name:linkObject.label,value:linkEl});});}
-return rows;},getRowsForAlerts_(alerts){if(alerts.length===1){const rows=[{name:'Alert',value:tr.b.getOnlyElement(alerts).title}];const detailRows=this.getRowsForSingleAlert_(tr.b.getOnlyElement(alerts));rows.push.apply(rows,detailRows);return rows;}
-return alerts.map(function(alert){return{name:'Alert',value:alert.title,isExpanded:alerts.size<10,subRows:this.getRowsForSingleAlert_(alert)};},this);},updateContents_(){if(this.currentSelection_===undefined){this.$.table.rows=[];this.$.table.rebuild();return;}
-const alerts=this.currentSelection_;this.$.table.tableRows=this.getRowsForAlerts_(alerts);this.$.table.rebuild();},get relatedEventsToHighlight(){if(!this.currentSelection_)return undefined;const result=new tr.model.EventSet();for(const event of this.currentSelection_){result.addEventSet(event.associatedEvents);}
-return result;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-alert-sub-view',tr.model.Alert,{multi:false,title:'Alert',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-alert-sub-view',tr.model.Alert,{multi:true,title:'Alerts',});'use strict';tr.exportTo('tr.ui.analysis',function(){const NO_BREAK_SPACE=String.fromCharCode(160);const RIGHTWARDS_ARROW=String.fromCharCode(8594);const COLLATOR=new Intl.Collator(undefined,{numeric:true});function TitleColumn(title){this.title=title;}
-TitleColumn.prototype={supportsCellSelection:false,value(row){const formattedTitle=this.formatTitle(row);const contexts=row.contexts;if(contexts===undefined||contexts.length===0){return formattedTitle;}
-const firstContext=contexts[0];const lastContext=contexts[contexts.length-1];let changeDefinedContextCount=0;for(let i=1;i<contexts.length;i++){if((contexts[i]===undefined)!==(contexts[i-1]===undefined)){changeDefinedContextCount++;}}
-let color=undefined;let prefix=undefined;if(!firstContext&&lastContext){color='red';prefix='+++';}else if(firstContext&&!lastContext){color='green';prefix='---';}
-if(changeDefinedContextCount>1){color='purple';}
-if(color===undefined&&prefix===undefined){return formattedTitle;}
-const titleEl=document.createElement('span');if(prefix!==undefined){const prefixEl=tr.ui.b.createSpan({textContent:prefix});prefixEl.style.fontFamily='monospace';Polymer.dom(titleEl).appendChild(prefixEl);Polymer.dom(titleEl).appendChild(tr.ui.b.asHTMLOrTextNode(NO_BREAK_SPACE));}
-if(color!==undefined){titleEl.style.color=color;}
-Polymer.dom(titleEl).appendChild(tr.ui.b.asHTMLOrTextNode(formattedTitle));return titleEl;},formatTitle(row){return row.title;},cmp(rowA,rowB){return COLLATOR.compare(rowA.title,rowB.title);}};function MemoryColumn(name,cellPath,aggregationMode){this.name=name;this.cellPath=cellPath;this.shouldSetContextGroup=false;this.aggregationMode=aggregationMode;}
-MemoryColumn.fromRows=function(rows,config){const cellNames=new Set();function gatherCellNames(rows){rows.forEach(function(row){if(row===undefined)return;const fieldCells=row[config.cellKey];if(fieldCells!==undefined){for(const[fieldName,fieldCell]of Object.entries(fieldCells)){if(fieldCell===undefined||fieldCell.fields===undefined){continue;}
-cellNames.add(fieldName);}}
-const subRows=row.subRows;if(subRows!==undefined){gatherCellNames(subRows);}});}
-gatherCellNames(rows);const positions=[];cellNames.forEach(function(cellName){const cellPath=[config.cellKey,cellName];const matchingRule=MemoryColumn.findMatchingRule(cellName,config.rules);const constructor=matchingRule.columnConstructor;const column=new constructor(cellName,cellPath,config.aggregationMode);column.shouldSetContextGroup=!!config.shouldSetContextGroup;positions.push({importance:matchingRule.importance,column});});positions.sort(function(a,b){if(a.importance===b.importance){return COLLATOR.compare(a.column.name,b.column.name);}
-return b.importance-a.importance;});return positions.map(function(position){return position.column;});};MemoryColumn.spaceEqually=function(columns){const columnWidth=(100/columns.length).toFixed(3)+'%';columns.forEach(function(column){column.width=columnWidth;});};MemoryColumn.findMatchingRule=function(name,rules){for(let i=0;i<rules.length;i++){const rule=rules[i];if(MemoryColumn.nameMatchesCondition(name,rule.condition)){return rule;}}
-return undefined;};MemoryColumn.nameMatchesCondition=function(name,condition){if(condition===undefined)return true;if(typeof(condition)==='string')return name===condition;return condition.test(name);};MemoryColumn.AggregationMode={DIFF:0,MAX:1};MemoryColumn.SOME_TIMESTAMPS_INFO_QUANTIFIER='at some selected timestamps';MemoryColumn.prototype={get title(){return this.name;},cell(row){let cell=row;const cellPath=this.cellPath;for(let i=0;i<cellPath.length;i++){if(cell===undefined)return undefined;cell=cell[cellPath[i]];}
-return cell;},aggregateCells(row,subRows){},fields(row){const cell=this.cell(row);if(cell===undefined)return undefined;return cell.fields;},value(row){const fields=this.fields(row);if(this.hasAllRelevantFieldsUndefined(fields))return'';const contexts=row.contexts;const color=this.color(fields,contexts);const infos=[];this.addInfos(fields,contexts,infos);const formattedFields=this.formatFields(fields);if((color===undefined||formattedFields==='')&&infos.length===0){return formattedFields;}
-const fieldEl=document.createElement('span');fieldEl.style.display='flex';fieldEl.style.alignItems='center';fieldEl.style.justifyContent='flex-end';Polymer.dom(fieldEl).appendChild(tr.ui.b.asHTMLOrTextNode(formattedFields));infos.forEach(function(info){const infoEl=document.createElement('span');infoEl.style.paddingLeft='4px';infoEl.style.cursor='help';infoEl.style.fontWeight='bold';Polymer.dom(infoEl).textContent=info.icon;if(info.color!==undefined){infoEl.style.color=info.color;}
-infoEl.title=info.message;Polymer.dom(fieldEl).appendChild(infoEl);},this);if(color!==undefined){fieldEl.style.color=color;}
-return fieldEl;},hasAllRelevantFieldsUndefined(fields){if(fields===undefined)return true;switch(this.aggregationMode){case MemoryColumn.AggregationMode.DIFF:return fields[0]===undefined&&fields[fields.length-1]===undefined;case MemoryColumn.AggregationMode.MAX:default:return fields.every(function(field){return field===undefined;});}},color(fields,contexts){return undefined;},formatFields(fields){if(fields.length===1){return this.formatSingleField(fields[0]);}
-return this.formatMultipleFields(fields);},formatSingleField(field){throw new Error('Not implemented');},formatMultipleFields(fields){switch(this.aggregationMode){case MemoryColumn.AggregationMode.DIFF:return this.formatMultipleFieldsDiff(fields[0],fields[fields.length-1]);case MemoryColumn.AggregationMode.MAX:return this.formatMultipleFieldsMax(fields);default:return tr.ui.b.createSpan({textContent:'(unsupported aggregation mode)',italic:true});}},formatMultipleFieldsDiff(firstField,lastField){throw new Error('Not implemented');},formatMultipleFieldsMax(fields){return this.formatSingleField(this.getMaxField(fields));},cmp(rowA,rowB){const fieldsA=this.fields(rowA);const fieldsB=this.fields(rowB);if(fieldsA!==undefined&&fieldsB!==undefined&&fieldsA.length!==fieldsB.length){throw new Error('Different number of fields');}
-const undefinedA=this.hasAllRelevantFieldsUndefined(fieldsA);const undefinedB=this.hasAllRelevantFieldsUndefined(fieldsB);if(undefinedA&&undefinedB)return 0;if(undefinedA)return-1;if(undefinedB)return 1;return this.compareFields(fieldsA,fieldsB);},compareFields(fieldsA,fieldsB){if(fieldsA.length===1){return this.compareSingleFields(fieldsA[0],fieldsB[0]);}
-return this.compareMultipleFields(fieldsA,fieldsB);},compareSingleFields(fieldA,fieldB){throw new Error('Not implemented');},compareMultipleFields(fieldsA,fieldsB){switch(this.aggregationMode){case MemoryColumn.AggregationMode.DIFF:return this.compareMultipleFieldsDiff(fieldsA[0],fieldsA[fieldsA.length-1],fieldsB[0],fieldsB[fieldsB.length-1]);case MemoryColumn.AggregationMode.MAX:return this.compareMultipleFieldsMax(fieldsA,fieldsB);default:return 0;}},compareMultipleFieldsDiff(firstFieldA,lastFieldA,firstFieldB,lastFieldB){throw new Error('Not implemented');},compareMultipleFieldsMax(fieldsA,fieldsB){return this.compareSingleFields(this.getMaxField(fieldsA),this.getMaxField(fieldsB));},getMaxField(fields){return fields.reduce(function(accumulator,field){if(field===undefined){return accumulator;}
-if(accumulator===undefined||this.compareSingleFields(field,accumulator)>0){return field;}
-return accumulator;}.bind(this),undefined);},addInfos(fields,contexts,infos){},getImportance(importanceRules){if(importanceRules.length===0)return 0;const matchingRule=MemoryColumn.findMatchingRule(this.name,importanceRules);if(matchingRule!==undefined){return matchingRule.importance;}
-let minImportance=importanceRules[0].importance;for(let i=1;i<importanceRules.length;i++){minImportance=Math.min(minImportance,importanceRules[i].importance);}
-return minImportance-1;}};function StringMemoryColumn(name,cellPath,aggregationMode){MemoryColumn.call(this,name,cellPath,aggregationMode);}
-StringMemoryColumn.prototype={__proto__:MemoryColumn.prototype,formatSingleField(string){return string;},formatMultipleFieldsDiff(firstString,lastString){if(firstString===undefined){const spanEl=tr.ui.b.createSpan({color:'red'});Polymer.dom(spanEl).appendChild(tr.ui.b.asHTMLOrTextNode('+'));Polymer.dom(spanEl).appendChild(tr.ui.b.asHTMLOrTextNode(this.formatSingleField(lastString)));return spanEl;}else if(lastString===undefined){const spanEl=tr.ui.b.createSpan({color:'green'});Polymer.dom(spanEl).appendChild(tr.ui.b.asHTMLOrTextNode('-'));Polymer.dom(spanEl).appendChild(tr.ui.b.asHTMLOrTextNode(this.formatSingleField(firstString)));return spanEl;}else if(firstString===lastString){return this.formatSingleField(firstString);}
-const spanEl=tr.ui.b.createSpan({color:'DarkOrange'});Polymer.dom(spanEl).appendChild(tr.ui.b.asHTMLOrTextNode(this.formatSingleField(firstString)));Polymer.dom(spanEl).appendChild(tr.ui.b.asHTMLOrTextNode(' '+RIGHTWARDS_ARROW+' '));Polymer.dom(spanEl).appendChild(tr.ui.b.asHTMLOrTextNode(this.formatSingleField(lastString)));return spanEl;},compareSingleFields(stringA,stringB){return COLLATOR.compare(stringA,stringB);},compareMultipleFieldsDiff(firstStringA,lastStringA,firstStringB,lastStringB){if(firstStringA===undefined&&firstStringB!==undefined){return 1;}
-if(firstStringA!==undefined&&firstStringB===undefined){return-1;}
-if(firstStringA===undefined&&firstStringB===undefined){return this.compareSingleFields(lastStringA,lastStringB);}
-if(lastStringA===undefined&&lastStringB!==undefined){return-1;}
-if(lastStringA!==undefined&&lastStringB===undefined){return 1;}
-if(lastStringA===undefined&&lastStringB===undefined){return this.compareSingleFields(firstStringB,firstStringA);}
-const areStringsAEqual=firstStringA===lastStringA;const areStringsBEqual=firstStringB===lastStringB;if(areStringsAEqual&&areStringsBEqual)return 0;if(areStringsAEqual)return-1;if(areStringsBEqual)return 1;return 0;}};function NumericMemoryColumn(name,cellPath,aggregationMode){MemoryColumn.call(this,name,cellPath,aggregationMode);}
-NumericMemoryColumn.DIFF_EPSILON=0.0001;NumericMemoryColumn.prototype={__proto__:MemoryColumn.prototype,align:tr.ui.b.TableFormat.ColumnAlignment.RIGHT,aggregateCells(row,subRows){const subRowCells=subRows.map(this.cell,this);let hasDefinedSubRowNumeric=false;let timestampCount=undefined;subRowCells.forEach(function(subRowCell){if(subRowCell===undefined)return;const subRowNumerics=subRowCell.fields;if(subRowNumerics===undefined)return;if(timestampCount===undefined){timestampCount=subRowNumerics.length;}else if(timestampCount!==subRowNumerics.length){throw new Error('Sub-rows have different numbers of timestamps');}
-if(hasDefinedSubRowNumeric){return;}
-hasDefinedSubRowNumeric=subRowNumerics.some(function(numeric){return numeric!==undefined;});});if(!hasDefinedSubRowNumeric){return;}
-const cellPath=this.cellPath;let rowCell=row;for(let i=0;i<cellPath.length;i++){const nextStepName=cellPath[i];let nextStep=rowCell[nextStepName];if(nextStep===undefined){if(i<cellPath.length-1){nextStep={};}else{nextStep=new MemoryCell(undefined);}
-rowCell[nextStepName]=nextStep;}
-rowCell=nextStep;}
-if(rowCell.fields===undefined){rowCell.fields=new Array(timestampCount);}else if(rowCell.fields.length!==timestampCount){throw new Error('Row has a different number of timestamps than sub-rows');}
-for(let i=0;i<timestampCount;i++){if(rowCell.fields[i]!==undefined)continue;rowCell.fields[i]=tr.model.MemoryAllocatorDump.aggregateNumerics(subRowCells.map(function(subRowCell){if(subRowCell===undefined||subRowCell.fields===undefined){return undefined;}
-return subRowCell.fields[i];}));}},formatSingleField(numeric){return tr.v.ui.createScalarSpan(numeric,{context:this.getFormattingContext(numeric.unit),contextGroup:this.shouldSetContextGroup?this.name:undefined,inline:true,});},getFormattingContext(unit){return undefined;},formatMultipleFieldsDiff(firstNumeric,lastNumeric){return this.formatSingleField(this.getDiffField_(firstNumeric,lastNumeric));},compareSingleFields(numericA,numericB){return numericA.value-numericB.value;},compareMultipleFieldsDiff(firstNumericA,lastNumericA,firstNumericB,lastNumericB){return this.getDiffFieldValue_(firstNumericA,lastNumericA)-
-this.getDiffFieldValue_(firstNumericB,lastNumericB);},getDiffField_(firstNumeric,lastNumeric){const definedNumeric=firstNumeric||lastNumeric;return new tr.b.Scalar(definedNumeric.unit.correspondingDeltaUnit,this.getDiffFieldValue_(firstNumeric,lastNumeric));},getDiffFieldValue_(firstNumeric,lastNumeric){const firstValue=firstNumeric===undefined?0:firstNumeric.value;const lastValue=lastNumeric===undefined?0:lastNumeric.value;const diff=lastValue-firstValue;return Math.abs(diff)<NumericMemoryColumn.DIFF_EPSILON?0:diff;}};function MemoryCell(fields){this.fields=fields;}
-MemoryCell.extractFields=function(cell){if(cell===undefined)return undefined;return cell.fields;};const RECURSIVE_EXPANSION_MAX_VISIBLE_ROW_COUNT=10;function expandTableRowsRecursively(table){let currentLevelRows=table.tableRows;let totalVisibleRowCount=currentLevelRows.length;while(currentLevelRows.length>0){let nextLevelRowCount=0;currentLevelRows.forEach(function(currentLevelRow){const subRows=currentLevelRow.subRows;if(subRows===undefined||subRows.length===0)return;nextLevelRowCount+=subRows.length;});if(totalVisibleRowCount+nextLevelRowCount>RECURSIVE_EXPANSION_MAX_VISIBLE_ROW_COUNT){break;}
-const nextLevelRows=new Array(nextLevelRowCount);let nextLevelRowIndex=0;currentLevelRows.forEach(function(currentLevelRow){const subRows=currentLevelRow.subRows;if(subRows===undefined||subRows.length===0)return;table.setExpandedForTableRow(currentLevelRow,true);subRows.forEach(function(subRow){nextLevelRows[nextLevelRowIndex++]=subRow;});});totalVisibleRowCount+=nextLevelRowCount;currentLevelRows=nextLevelRows;}}
-function aggregateTableRowCellsRecursively(row,columns,opt_predicate){const subRows=row.subRows;if(subRows===undefined||subRows.length===0)return;subRows.forEach(function(subRow){aggregateTableRowCellsRecursively(subRow,columns,opt_predicate);});if(opt_predicate===undefined||opt_predicate(row.contexts)){aggregateTableRowCells(row,subRows,columns);}}
-function aggregateTableRowCells(row,subRows,columns){columns.forEach(function(column){if(!(column instanceof MemoryColumn))return;column.aggregateCells(row,subRows);});}
-function createCells(timeToValues,valueFieldsGetter,opt_this){opt_this=opt_this||this;const fieldNameToFields=tr.b.invertArrayOfDicts(timeToValues,valueFieldsGetter,opt_this);const result={};for(const[fieldName,fields]of Object.entries(fieldNameToFields)){result[fieldName]=new tr.ui.analysis.MemoryCell(fields);}
-return result;}
-function createWarningInfo(message){return{message,icon:String.fromCharCode(9888),color:'red'};}
-function DetailsNumericMemoryColumn(name,cellPath,aggregationMode){NumericMemoryColumn.call(this,name,cellPath,aggregationMode);}
-DetailsNumericMemoryColumn.prototype={__proto__:NumericMemoryColumn.prototype,getFormattingContext(unit){if(unit.baseUnit===tr.b.Unit.byName.sizeInBytes){return{unitPrefix:tr.b.UnitPrefixScale.BINARY.KIBI};}
-return undefined;}};return{TitleColumn,MemoryColumn,StringMemoryColumn,NumericMemoryColumn,MemoryCell,expandTableRowsRecursively,aggregateTableRowCellsRecursively,aggregateTableRowCells,createCells,createWarningInfo,DetailsNumericMemoryColumn,};});'use strict';tr.exportTo('tr.ui.analysis',function(){const LATIN_SMALL_LETTER_F_WITH_HOOK=String.fromCharCode(0x0192);const CIRCLED_LATIN_CAPITAL_LETTER_T=String.fromCharCode(0x24C9);const HeapDetailsRowDimension={ROOT:{},STACK_FRAME:{label:'Stack frame',symbol:LATIN_SMALL_LETTER_F_WITH_HOOK,color:'heap_dump_stack_frame'},OBJECT_TYPE:{label:'Object type',symbol:CIRCLED_LATIN_CAPITAL_LETTER_T,color:'heap_dump_object_type'}};function HeapDetailsTitleColumn(title){tr.ui.analysis.TitleColumn.call(this,title);}
-HeapDetailsTitleColumn.prototype={__proto__:tr.ui.analysis.TitleColumn.prototype,formatTitle(row){if(row.dimension===HeapDetailsRowDimension.ROOT){return row.title;}
-const symbolEl=document.createElement('span');Polymer.dom(symbolEl).textContent=row.dimension.symbol;symbolEl.title=row.dimension.label;symbolEl.style.color=tr.b.ColorScheme.getColorForReservedNameAsString(row.dimension.color);symbolEl.style.paddingRight='4px';symbolEl.style.cursor='help';symbolEl.style.fontWeight='bold';const titleEl=document.createElement('span');Polymer.dom(titleEl).appendChild(symbolEl);Polymer.dom(titleEl).appendChild(document.createTextNode(row.title));return titleEl;}};function AllocationCountColumn(name,cellPath,aggregationMode){tr.ui.analysis.DetailsNumericMemoryColumn.call(this,name,cellPath,aggregationMode);}
-AllocationCountColumn.prototype={__proto__:tr.ui.analysis.DetailsNumericMemoryColumn.prototype,getFormattingContext(unit){return{minimumFractionDigits:0};}};const HEAP_DETAILS_COLUMN_RULES=[{condition:'Size',importance:2,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:'Count',importance:1,columnConstructor:AllocationCountColumn},{importance:0,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn}];return{HeapDetailsRowDimension,HeapDetailsTitleColumn,AllocationCountColumn,HEAP_DETAILS_COLUMN_RULES,};});'use strict';tr.exportTo('tr.ui.analysis',function(){const RebuildableBehavior={rebuild(){if(!this.paneDirty_){return;}
-this.paneDirty_=false;this.onRebuild_();},scheduleRebuild_(){if(this.paneDirty_)return;this.paneDirty_=true;tr.b.requestAnimationFrame(this.rebuild.bind(this));},onRebuild_(){}};return{RebuildableBehavior,};});'use strict';Polymer({is:'tr-ui-b-tab-view',properties:{label_:{type:String,value:()=>''},selectedSubView_:Object,subViews_:{type:Array,value:()=>[]},tabsHidden:{type:Boolean,value:false,observer:'tabsHiddenChanged_'}},ready(){this.$.tabs.addEventListener('keydown',this.onKeyDown_.bind(this),true);this.updateFocusability_();},set label(newLabel){this.set('label_',newLabel);},get tabs(){return this.get('subViews_');},get selectedSubView(){return this.selectedSubView_;},set selectedSubView(subView){if(subView===this.selectedSubView_)return;if(this.selectedSubView_){Polymer.dom(this.$.subView).removeChild(this.selectedSubView_);const oldInput=this.root.getElementById(this.computeRadioId_(this.selectedSubView_));if(oldInput){oldInput.checked=false;}}
-this.set('selectedSubView_',subView);if(subView){Polymer.dom(this.$.subView).appendChild(subView);const newInput=this.root.getElementById(this.computeRadioId_(subView));if(newInput){newInput.checked=true;}}
-this.fire('selected-tab-change');},clearSubViews(){this.splice('subViews_',0,this.subViews_.length);this.selectedSubView=undefined;this.updateFocusability_();},addSubView(subView){this.push('subViews_',subView);if(!this.selectedSubView_)this.selectedSubView=subView;this.updateFocusability_();},get subViews(){return this.subViews_;},resetSubViews(subViews){this.splice('subViews_',0,this.subViews_.length);if(subViews.length){for(const subView of subViews){this.push('subViews_',subView);}
-this.selectedSubView=subViews[0];}else{this.selectedSubView=undefined;}
-this.updateFocusability_();},onTabChanged_(event){this.selectedSubView=event.model.item;},isChecked_(subView){return this.selectedSubView_===subView;},tabsHiddenChanged_(){this.updateFocusability_();},onKeyDown_(e){if(this.tabsHidden)return;let keyHandled=false;switch(e.keyCode){case 37:keyHandled=this.selectPreviousTabIfPossible();break;case 39:keyHandled=this.selectNextTabIfPossible();break;}
-if(!keyHandled)return;e.stopPropagation();e.preventDefault();},selectNextTabIfPossible(){return this.selectTabByOffsetIfPossible_(1);},selectPreviousTabIfPossible(){return this.selectTabByOffsetIfPossible_(-1);},selectTabByOffsetIfPossible_(offset){if(!this.selectedSubView_)return false;const currentIndex=this.subViews_.indexOf(this.selectedSubView_);const newSubView=this.tabs[currentIndex+offset];if(!newSubView)return false;this.selectedSubView=newSubView;return true;},shouldBeFocusable_(){return!this.tabsHidden&&this.subViews_.length>0;},updateFocusability_(){if(this.shouldBeFocusable_()){Polymer.dom(this.$.tabs).setAttribute('tabindex',0);}else{Polymer.dom(this.$.tabs).removeAttribute('tabindex');}},computeRadioId_(subView){return subView.tagName+'-'+subView.tabLabel.replace(/ /g,'-');}});'use strict';tr.exportTo('tr.ui.analysis',function(){const RESONABLE_NUMBER_OF_ROWS=200;const TabUiState={NO_LONG_TAIL:0,HIDING_LONG_TAIL:1,SHOWING_LONG_TAIL:2,};function EmptyFillerColumn(){}
-EmptyFillerColumn.prototype={title:'',value(){return'';},};Polymer({is:'tr-ui-a-memory-dump-heap-details-breakdown-view',behaviors:[tr.ui.analysis.RebuildableBehavior],created(){this.displayedNode_=undefined;this.dimensionToTab_=new Map();},ready(){this.scheduleRebuild_();this.root.addEventListener('keydown',this.onKeyDown_.bind(this),true);},get displayedNode(){return this.displayedNode_;},set displayedNode(node){this.displayedNode_=node;this.scheduleRebuild_();},get aggregationMode(){return this.aggregationMode_;},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;for(const tab of this.$.tabs.tabs){tab.aggregationMode=aggregationMode;}},onRebuild_(){const previouslySelectedTab=this.$.tabs.selectedSubView;let previouslySelectedTabFocused=false;let previouslySelectedDimension=undefined;if(previouslySelectedTab){previouslySelectedTabFocused=previouslySelectedTab.isFocused;previouslySelectedDimension=previouslySelectedTab.dimension;}
-for(const tab of this.$.tabs.tabs){tab.nodes=undefined;}
-this.$.tabs.clearSubViews();if(this.displayedNode_===undefined){this.$.tabs.label='No heap node provided.';return;}
-for(const[dimension,children]of this.displayedNode_.childNodes){if(!this.dimensionToTab_.has(dimension)){this.dimensionToTab_.set(dimension,document.createElement('tr-ui-a-memory-dump-heap-details-breakdown-view-tab'));}
-const tab=this.dimensionToTab_.get(dimension);tab.aggregationMode=this.aggregationMode_;tab.dimension=dimension;tab.nodes=children;this.$.tabs.addSubView(tab);tab.rebuild();if(dimension===previouslySelectedDimension){this.$.tabs.selectedSubView=tab;if(previouslySelectedTabFocused){tab.focus();}}}
-if(this.$.tabs.tabs.length>0){this.$.tabs.label='Break selected node further by:';}else{this.$.tabs.label='Selected node cannot be broken down any further.';}},onKeyDown_(keyEvent){if(!this.displayedNode_)return;let keyHandled=false;switch(keyEvent.keyCode){case 8:{if(!this.displayedNode_.parentNode)break;const viewEvent=new tr.b.Event('enter-node');viewEvent.node=this.displayedNode_.parentNode;this.dispatchEvent(viewEvent);keyHandled=true;break;}
-case 37:case 39:{const wasFocused=this.$.tabs.selectedSubView.isFocused;keyHandled=keyEvent.keyCode===37?this.$.tabs.selectPreviousTabIfPossible():this.$.tabs.selectNextTabIfPossible();if(wasFocused&&keyHandled){this.$.tabs.selectedSubView.focus();}}}
-if(!keyHandled)return;keyEvent.stopPropagation();keyEvent.preventDefault();}});Polymer({is:'tr-ui-a-memory-dump-heap-details-breakdown-view-tab',behaviors:[tr.ui.analysis.RebuildableBehavior],created(){this.dimension_=undefined;this.nodes_=undefined;this.aggregationMode_=undefined;this.displayLongTail_=false;},ready(){this.$.table.addEventListener('step-into',function(tableEvent){const viewEvent=new tr.b.Event('enter-node');viewEvent.node=tableEvent.tableRow;this.dispatchEvent(viewEvent);}.bind(this));},get displayLongTail(){return this.displayLongTail_;},set displayLongTail(newValue){if(this.displayLongTail===newValue)return;this.displayLongTail_=newValue;this.scheduleRebuild_();},get dimension(){return this.dimension_;},set dimension(dimension){this.dimension_=dimension;this.scheduleRebuild_();},get nodes(){return this.nodes_;},set nodes(nodes){this.nodes_=nodes;this.scheduleRebuild_();},get nodes(){return this.nodes_||[];},get dimensionLabel_(){if(this.dimension_===undefined)return'(undefined)';return this.dimension_.label;},get tabLabel(){let nodeCount=0;if(this.nodes_){nodeCount=this.nodes_.length;}
-return this.dimensionLabel_+' ('+nodeCount+')';},get tabIcon(){if(this.dimension_===undefined||this.dimension_===tr.ui.analysis.HeapDetailsRowDimension.ROOT){return undefined;}
-return{text:this.dimension_.symbol,style:'color: '+tr.b.ColorScheme.getColorForReservedNameAsString(this.dimension_.color)+';'};},get aggregationMode(){return this.aggregationMode_;},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;this.scheduleRebuild_();},focus(){this.$.table.focus();},blur(){this.$.table.blur();},get isFocused(){return this.$.table.isFocused;},onRebuild_(){this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;this.$.table.emptyValue='Cannot break down by '+
-this.dimensionLabel_.toLowerCase()+' any further.';const[state,rows]=this.getRows_();const total=this.nodes.length;const displayed=rows.length;const hidden=total-displayed;this.updateInfoBar_(state,[total,displayed,hidden]);this.$.table.tableRows=rows;this.$.table.tableColumns=this.createColumns_(rows);if(this.$.table.sortColumnIndex===undefined){this.$.table.sortColumnIndex=0;this.$.table.sortDescending=false;}
-this.$.table.rebuild();},createColumns_(rows){const titleColumn=new tr.ui.analysis.HeapDetailsTitleColumn(this.dimensionLabel_);titleColumn.width='400px';const numericColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'cells',aggregationMode:this.aggregationMode_,rules:tr.ui.analysis.HEAP_DETAILS_COLUMN_RULES,shouldSetContextGroup:true});if(numericColumns.length===0){numericColumns.push(new EmptyFillerColumn());}
-tr.ui.analysis.MemoryColumn.spaceEqually(numericColumns);const columns=[titleColumn].concat(numericColumns);return columns;},getRows_(){let rows=this.nodes;if(rows.length<=RESONABLE_NUMBER_OF_ROWS){return[TabUiState.NO_LONG_TAIL,rows];}else if(this.displayLongTail){return[TabUiState.SHOWING_LONG_TAIL,rows];}
-const absSize=row=>Math.max(row.cells.Size.fields[0].value);rows.sort((a,b)=>absSize(b)-absSize(a));rows=rows.slice(0,RESONABLE_NUMBER_OF_ROWS);return[TabUiState.HIDING_LONG_TAIL,rows];},updateInfoBar_(state,rowStats){if(state===TabUiState.SHOWING_LONG_TAIL){this.longTailVisibleInfoBar_(rowStats);}else if(state===TabUiState.HIDING_LONG_TAIL){this.longTailHiddenInfoBar_(rowStats);}else{this.hideInfoBar_();}},longTailVisibleInfoBar_(rowStats){const[total,visible,hidden]=rowStats;const couldHide=total-RESONABLE_NUMBER_OF_ROWS;this.$.info.message='Showing '+total+' rows. This may be slow.';this.$.info.removeAllButtons();const buttonText='Hide '+couldHide+' rows.';this.$.info.addButton(buttonText,()=>this.displayLongTail=false);this.$.info.visible=true;},longTailHiddenInfoBar_(rowStats){const[total,visible,hidden]=rowStats;this.$.info.message='Hiding the smallest '+hidden+' rows.';this.$.info.removeAllButtons();this.$.info.addButton('Show all.',()=>this.displayLongTail=true);this.$.info.visible=true;},hideInfoBar_(){this.$.info.visible=false;},});return{};});'use strict';tr.exportTo('tr.ui.analysis',function(){const DOWNWARDS_ARROW_WITH_TIP_RIGHTWARDS=String.fromCharCode(0x21B3);function HeapDetailsPathColumn(title){tr.ui.analysis.HeapDetailsTitleColumn.call(this,title);}
-HeapDetailsPathColumn.prototype={__proto__:tr.ui.analysis.HeapDetailsTitleColumn.prototype,formatTitle(row){const title=tr.ui.analysis.HeapDetailsTitleColumn.prototype.formatTitle.call(this,row);if(row.dimension===tr.ui.analysis.HeapDetailsRowDimension.ROOT){return title;}
-const arrowEl=document.createElement('span');Polymer.dom(arrowEl).textContent=DOWNWARDS_ARROW_WITH_TIP_RIGHTWARDS;arrowEl.style.paddingRight='2px';arrowEl.style.fontWeight='bold';arrowEl.style.color=tr.b.ColorScheme.getColorForReservedNameAsString('heap_dump_child_node_arrow');const rowEl=document.createElement('span');Polymer.dom(rowEl).appendChild(arrowEl);Polymer.dom(rowEl).appendChild(tr.ui.b.asHTMLOrTextNode(title));return rowEl;}};Polymer({is:'tr-ui-a-memory-dump-heap-details-path-view',behaviors:[tr.ui.analysis.RebuildableBehavior],created(){this.selectedNode_=undefined;this.aggregationMode_=undefined;},ready(){this.$.table.addEventListener('selection-changed',function(event){this.selectedNode_=this.$.table.selectedTableRow;this.didSelectedNodeChange_();}.bind(this));},didSelectedNodeChange_(){this.dispatchEvent(new tr.b.Event('selected-node-changed'));},get selectedNode(){return this.selectedNode_;},set selectedNode(node){this.selectedNode_=node;this.didSelectedNodeChange_();this.scheduleRebuild_();},get aggregationMode(){return this.aggregationMode_;},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;this.scheduleRebuild_();},onRebuild_(){if(this.selectedNode_===undefined){this.$.table.clear();return;}
-if(this.$.table.tableRows.includes(this.selectedNode_)){this.$.table.selectedTableRow=this.selectedNode_;return;}
-this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;this.$.table.userCanModifySortOrder=false;const rows=this.createRows_(this.selectedNode_);this.$.table.tableRows=rows;this.$.table.tableColumns=this.createColumns_(rows);this.$.table.selectedTableRow=rows[rows.length-1];},createRows_(node){const rows=[];while(node){rows.push(node);node=node.parentNode;}
-rows.reverse();return rows;},createColumns_(rows){const titleColumn=new HeapDetailsPathColumn('Current path');titleColumn.width='200px';const numericColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'cells',aggregationMode:this.aggregationMode_,rules:tr.ui.analysis.HEAP_DETAILS_COLUMN_RULES,shouldSetContextGroup:true});tr.ui.analysis.MemoryColumn.spaceEqually(numericColumns);return[titleColumn].concat(numericColumns);}});return{};});'use strict';tr.exportTo('tr.ui.analysis',function(){const StackedPaneImpl={set childPaneBuilder(childPaneBuilder){this.childPaneBuilder_=childPaneBuilder;this.dispatchEvent(new tr.b.Event('request-child-pane-change'));},get childPaneBuilder(){return this.childPaneBuilder_;},appended(){this.rebuild();}};const StackedPane=[tr.ui.analysis.RebuildableBehavior,StackedPaneImpl];return{StackedPane,};});Polymer({is:'tr-ui-a-stacked-pane',behaviors:[tr.ui.analysis.StackedPane]});'use strict';tr.exportTo('tr.ui.analysis',function(){const Scalar=tr.b.Scalar;const sizeInBytes_smallerIsBetter=tr.b.Unit.byName.sizeInBytes_smallerIsBetter;const count_smallerIsBetter=tr.b.Unit.byName.count_smallerIsBetter;const MultiDimensionalViewBuilder=tr.b.MultiDimensionalViewBuilder;const TotalState=tr.b.MultiDimensionalViewNode.TotalState;function HeapDumpTreeNode(stackFrameNodes,dimension,title,heavyView,parentNode){this.dimension=dimension;this.title=title;this.parentNode=parentNode;this.heavyView_=heavyView;this.stackFrameNodes_=stackFrameNodes;this.lazyCells_=undefined;this.lazyChildNodes_=undefined;}
-HeapDumpTreeNode.prototype={get minDisplayedTotalState_(){if(this.heavyView_){return TotalState.LOWER_BOUND;}
-return TotalState.EXACT;},get childNodes(){if(!this.lazyChildNodes_){this.lazyChildNodes_=new Map();this.addDimensionChildNodes_(tr.ui.analysis.HeapDetailsRowDimension.STACK_FRAME,0);this.addDimensionChildNodes_(tr.ui.analysis.HeapDetailsRowDimension.OBJECT_TYPE,1);this.releaseStackFrameNodesIfPossible_();}
-return this.lazyChildNodes_;},get cells(){if(!this.lazyCells_){this.addCells_();this.releaseStackFrameNodesIfPossible_();}
-return this.lazyCells_;},releaseStackFrameNodesIfPossible_(){if(this.lazyCells_&&this.lazyChildNodes_){this.stackFrameNodes_=undefined;}},addDimensionChildNodes_(dimension,dimensionIndex){const dimensionChildTitleToStackFrameNodes=tr.b.invertArrayOfDicts(this.stackFrameNodes_,node=>this.convertStackFrameNodeDimensionToChildDict_(node,dimensionIndex));const dimensionChildNodes=[];for(const[childTitle,childStackFrameNodes]of
-Object.entries(dimensionChildTitleToStackFrameNodes)){dimensionChildNodes.push(new HeapDumpTreeNode(childStackFrameNodes,dimension,childTitle,this.heavyView_,this));}
-this.lazyChildNodes_.set(dimension,dimensionChildNodes);},convertStackFrameNodeDimensionToChildDict_(stackFrameNode,dimensionIndex){const childDict={};let displayedChildrenTotalSize=0;let displayedChildrenTotalCount=0;let hasDisplayedChildren=false;let allDisplayedChildrenHaveDisplayedCounts=true;for(const child of stackFrameNode.children[dimensionIndex].values()){if(child.values[0].totalState<this.minDisplayedTotalState_){continue;}
-if(child.values[1].totalState<this.minDisplayedTotalState_){allDisplayedChildrenHaveDisplayedCounts=false;}
-childDict[child.title[dimensionIndex]]=child;displayedChildrenTotalSize+=child.values[0].total;displayedChildrenTotalCount+=child.values[1].total;hasDisplayedChildren=true;}
-const nodeTotalSize=stackFrameNode.values[0].total;const nodeTotalCount=stackFrameNode.values[1].total;const hasUnclassifiedSizeOrCount=displayedChildrenTotalSize<nodeTotalSize||displayedChildrenTotalCount<nodeTotalCount;if(!this.heavyView_&&hasUnclassifiedSizeOrCount&&hasDisplayedChildren){const otherTitle=stackFrameNode.title.slice();otherTitle[dimensionIndex]='<other>';const otherNode=new tr.b.MultiDimensionalViewNode(otherTitle,2);childDict[otherTitle[dimensionIndex]]=otherNode;otherNode.values[0].total=nodeTotalSize-displayedChildrenTotalSize;otherNode.values[0].totalState=this.minDisplayedTotalState_;otherNode.values[1].total=nodeTotalCount-displayedChildrenTotalCount;otherNode.values[1].totalState=allDisplayedChildrenHaveDisplayedCounts?this.minDisplayedTotalState_:TotalState.NOT_PROVIDED;}
-return childDict;},addCells_(){this.lazyCells_=tr.ui.analysis.createCells(this.stackFrameNodes_,function(stackFrameNode){const size=stackFrameNode.values[0].total;const numerics={'Size':new Scalar(sizeInBytes_smallerIsBetter,size)};const countValue=stackFrameNode.values[1];if(countValue.totalState>=this.minDisplayedTotalState_){const count=countValue.total;numerics.Count=new Scalar(count_smallerIsBetter,count);}
-return numerics;},this);}};Polymer({is:'tr-ui-a-memory-dump-heap-details-pane',behaviors:[tr.ui.analysis.StackedPane],created(){this.heapDumps_=undefined;this.viewMode_=undefined;this.aggregationMode_=undefined;this.cachedBuilders_=new Map();},ready(){this.$.info_bar.message='Note: Values displayed in the heavy view '+'are lower bounds (except for the root).';Polymer.dom(this.$.view_mode_container).appendChild(tr.ui.b.createSelector(this,'viewMode','memoryDumpHeapDetailsPane.viewMode',MultiDimensionalViewBuilder.ViewType.TOP_DOWN_TREE_VIEW,[{label:'Top-down (Tree)',value:MultiDimensionalViewBuilder.ViewType.TOP_DOWN_TREE_VIEW},{label:'Top-down (Heavy)',value:MultiDimensionalViewBuilder.ViewType.TOP_DOWN_HEAVY_VIEW},{label:'Bottom-up (Heavy)',value:MultiDimensionalViewBuilder.ViewType.BOTTOM_UP_HEAVY_VIEW}]));this.$.drag_handle.target=this.$.path_view;this.$.drag_handle.horizontal=false;this.$.path_view.addEventListener('selected-node-changed',(function(e){this.$.breakdown_view.displayedNode=this.$.path_view.selectedNode;}).bind(this));this.$.breakdown_view.addEventListener('enter-node',(function(e){this.$.path_view.selectedNode=e.node;}).bind(this));},set heapDumps(heapDumps){this.heapDumps_=heapDumps;this.scheduleRebuild_();},get heapDumps(){return this.heapDumps_;},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;this.$.path_view.aggregationMode=aggregationMode;this.$.breakdown_view.aggregationMode=aggregationMode;},get aggregationMode(){return this.aggregationMode_;},set viewMode(viewMode){this.viewMode_=viewMode;this.scheduleRebuild_();},get viewMode(){return this.viewMode_;},get heavyView(){switch(this.viewMode){case MultiDimensionalViewBuilder.ViewType.TOP_DOWN_HEAVY_VIEW:case MultiDimensionalViewBuilder.ViewType.BOTTOM_UP_HEAVY_VIEW:return true;default:return false;}},onRebuild_(){if(this.heapDumps_===undefined||this.heapDumps_.length===0){this.$.info_text.style.display='block';this.$.split_view.style.display='none';this.$.view_mode_container.style.display='none';this.$.info_bar.hidden=true;this.$.path_view.selectedNode=undefined;return;}
-this.$.info_text.style.display='none';this.$.split_view.style.display='flex';this.$.view_mode_container.style.display='block';this.$.info_bar.hidden=!this.heavyView;this.$.path_view.selectedNode=this.createHeapTree_();this.$.path_view.rebuild();this.$.breakdown_view.rebuild();},createHeapTree_(){const definedHeapDump=this.heapDumps_.find(x=>x);if(definedHeapDump===undefined)return undefined;const rootRowTitle=definedHeapDump.allocatorName;const stackFrameTrees=this.createStackFrameTrees_(this.heapDumps_);return new HeapDumpTreeNode(stackFrameTrees,tr.ui.analysis.HeapDetailsRowDimension.ROOT,rootRowTitle,this.heavyView);},createStackFrameTrees_(heapDumps){const builders=heapDumps.map(heapDump=>this.createBuilder_(heapDump));const views=builders.map(builder=>{if(builder===undefined)return undefined;return builder.buildView(this.viewMode);});return views;},createBuilder_(heapDump){if(heapDump===undefined)return undefined;if(this.cachedBuilders_.has(heapDump)){return this.cachedBuilders_.get(heapDump);}
-const dimensions=2;const valueCount=2;const builder=new MultiDimensionalViewBuilder(dimensions,valueCount);for(const entry of heapDump.entries){const leafStackFrame=entry.leafStackFrame;const stackTracePath=leafStackFrame===undefined?[]:leafStackFrame.getUserFriendlyStackTrace().reverse();const objectTypeName=entry.objectTypeName;const objectTypeNamePath=objectTypeName===undefined?[]:[objectTypeName];const valueKind=entry.valuesAreTotals?MultiDimensionalViewBuilder.ValueKind.TOTAL:MultiDimensionalViewBuilder.ValueKind.SELF;builder.addPath([stackTracePath,objectTypeNamePath],[entry.size,entry.count],valueKind);}
-builder.complete=heapDump.isComplete;this.cachedBuilders_.set(heapDump,builder);return builder;},});return{};});'use strict';tr.exportTo('tr.ui.analysis',function(){const URL_TO_SIZE_VS_EFFECTIVE_SIZE='https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/README.md#effective_size-vs_size';const SUBALLOCATION_CONTEXT=true;const MemoryAllocatorDumpInfoType=tr.model.MemoryAllocatorDumpInfoType;const PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN=MemoryAllocatorDumpInfoType.PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN;const PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER=MemoryAllocatorDumpInfoType.PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER;const LEFTWARDS_OPEN_HEADED_ARROW=String.fromCharCode(0x21FD);const RIGHTWARDS_OPEN_HEADED_ARROW=String.fromCharCode(0x21FE);const EN_DASH=String.fromCharCode(0x2013);const CIRCLED_LATIN_SMALL_LETTER_I=String.fromCharCode(0x24D8);function AllocatorDumpNameColumn(){tr.ui.analysis.TitleColumn.call(this,'Component');}
-AllocatorDumpNameColumn.prototype={__proto__:tr.ui.analysis.TitleColumn.prototype,formatTitle(row){if(!row.suballocation){return row.title;}
-return tr.ui.b.createSpan({textContent:row.title,italic:true,tooltip:row.fullNames===undefined?undefined:row.fullNames.join(', ')});}};function getAndUpdateEntry(map,name,createdCallback){let entry=map.get(name);if(entry===undefined){entry={count:0};createdCallback(entry);map.set(name,entry);}
-entry.count++;return entry;}
-function SizeInfoMessageBuilder(){this.parts_=[];this.indent_=0;}
-SizeInfoMessageBuilder.prototype={append(){this.parts_.push.apply(this.parts_,Array.prototype.slice.apply(arguments));},appendMap(map,hasPluralSuffix,emptyText,itemCallback,opt_this){opt_this=opt_this||this;if(map.size===0){if(emptyText){this.append(emptyText);}}else if(map.size===1){this.parts_.push(' ');const key=map.keys().next().value;itemCallback.call(opt_this,key,map.get(key));}else{if(hasPluralSuffix){this.parts_.push('s');}
-this.parts_.push(':');this.indent_++;for(const key of map.keys()){this.parts_.push('\n',' '.repeat(3*(this.indent_-1)),' - ');itemCallback.call(opt_this,key,map.get(key));}
-this.indent_--;}},appendImportanceRange(range){this.append(' (importance: ');if(range.min===range.max){this.append(range.min);}else{this.append(range.min,EN_DASH,range.max);}
-this.append(')');},appendSizeIfDefined(size){if(size!==undefined){this.append(' (',tr.b.Unit.byName.sizeInBytes.format(size),')');}},appendSomeTimestampsQuantifier(){this.append(' ',tr.ui.analysis.MemoryColumn.SOME_TIMESTAMPS_INFO_QUANTIFIER);},build(){return this.parts_.join('');}};function EffectiveSizeColumn(name,cellPath,aggregationMode){tr.ui.analysis.DetailsNumericMemoryColumn.call(this,name,cellPath,aggregationMode);}
-EffectiveSizeColumn.prototype={__proto__:tr.ui.analysis.DetailsNumericMemoryColumn.prototype,get title(){return tr.ui.b.createLink({textContent:this.name,tooltip:'Memory used by this component',href:URL_TO_SIZE_VS_EFFECTIVE_SIZE});},addInfos(numerics,memoryAllocatorDumps,infos){if(memoryAllocatorDumps===undefined)return;const ownerNameToEntry=new Map();const ownedNameToEntry=new Map();for(let i=0;i<numerics.length;i++){if(numerics[i]===undefined)continue;const dump=memoryAllocatorDumps[i];if(dump===SUBALLOCATION_CONTEXT){return;}
-dump.ownedBy.forEach(function(ownerLink){const ownerDump=ownerLink.source;this.getAndUpdateOwnershipEntry_(ownerNameToEntry,ownerDump,ownerLink);},this);const ownedLink=dump.owns;if(ownedLink!==undefined){const ownedDump=ownedLink.target;const ownedEntry=this.getAndUpdateOwnershipEntry_(ownedNameToEntry,ownedDump,ownedLink,true);const sharerNameToEntry=ownedEntry.sharerNameToEntry;ownedDump.ownedBy.forEach(function(sharerLink){const sharerDump=sharerLink.source;if(sharerDump===dump)return;this.getAndUpdateOwnershipEntry_(sharerNameToEntry,sharerDump,sharerLink);},this);}}
-if(ownerNameToEntry.size>0){const messageBuilder=new SizeInfoMessageBuilder();messageBuilder.append('shared by');messageBuilder.appendMap(ownerNameToEntry,false,undefined,function(ownerName,ownerEntry){messageBuilder.append(ownerName);if(ownerEntry.count<numerics.length){messageBuilder.appendSomeTimestampsQuantifier();}
-messageBuilder.appendImportanceRange(ownerEntry.importanceRange);},this);infos.push({message:messageBuilder.build(),icon:LEFTWARDS_OPEN_HEADED_ARROW,color:'green'});}
-if(ownedNameToEntry.size>0){const messageBuilder=new SizeInfoMessageBuilder();messageBuilder.append('shares');messageBuilder.appendMap(ownedNameToEntry,false,undefined,function(ownedName,ownedEntry){messageBuilder.append(ownedName);const ownedCount=ownedEntry.count;if(ownedCount<numerics.length){messageBuilder.appendSomeTimestampsQuantifier();}
-messageBuilder.appendImportanceRange(ownedEntry.importanceRange);messageBuilder.append(' with');messageBuilder.appendMap(ownedEntry.sharerNameToEntry,false,' no other dumps',function(sharerName,sharerEntry){messageBuilder.append(sharerName);if(sharerEntry.count<ownedCount){messageBuilder.appendSomeTimestampsQuantifier();}
-messageBuilder.appendImportanceRange(sharerEntry.importanceRange);},this);},this);infos.push({message:messageBuilder.build(),icon:RIGHTWARDS_OPEN_HEADED_ARROW,color:'green'});}},getAndUpdateOwnershipEntry_(map,dump,link,opt_withSharerNameToEntry){const entry=getAndUpdateEntry(map,dump.quantifiedName,function(newEntry){newEntry.importanceRange=new tr.b.math.Range();if(opt_withSharerNameToEntry){newEntry.sharerNameToEntry=new Map();}});entry.importanceRange.addValue(link.importance||0);return entry;}};function SizeColumn(name,cellPath,aggregationMode){tr.ui.analysis.DetailsNumericMemoryColumn.call(this,name,cellPath,aggregationMode);}
-SizeColumn.prototype={__proto__:tr.ui.analysis.DetailsNumericMemoryColumn.prototype,get title(){return tr.ui.b.createLink({textContent:this.name,tooltip:'Memory requested by this component',href:URL_TO_SIZE_VS_EFFECTIVE_SIZE});},addInfos(numerics,memoryAllocatorDumps,infos){if(memoryAllocatorDumps===undefined)return;this.addOverlapInfo_(numerics,memoryAllocatorDumps,infos);this.addProvidedSizeWarningInfos_(numerics,memoryAllocatorDumps,infos);},addOverlapInfo_(numerics,memoryAllocatorDumps,infos){const siblingNameToEntry=new Map();for(let i=0;i<numerics.length;i++){if(numerics[i]===undefined)continue;const dump=memoryAllocatorDumps[i];if(dump===SUBALLOCATION_CONTEXT){return;}
-const ownedBySiblingSizes=dump.ownedBySiblingSizes;for(const siblingDump of ownedBySiblingSizes.keys()){const siblingName=siblingDump.name;getAndUpdateEntry(siblingNameToEntry,siblingName,function(newEntry){if(numerics.length===1){newEntry.size=ownedBySiblingSizes.get(siblingDump);}});}}
-if(siblingNameToEntry.size>0){const messageBuilder=new SizeInfoMessageBuilder();messageBuilder.append('overlaps with its sibling');messageBuilder.appendMap(siblingNameToEntry,true,undefined,function(siblingName,siblingEntry){messageBuilder.append('\'',siblingName,'\'');messageBuilder.appendSizeIfDefined(siblingEntry.size);if(siblingEntry.count<numerics.length){messageBuilder.appendSomeTimestampsQuantifier();}},this);infos.push({message:messageBuilder.build(),icon:CIRCLED_LATIN_SMALL_LETTER_I,color:'blue'});}},addProvidedSizeWarningInfos_(numerics,memoryAllocatorDumps,infos){const infoTypeToEntry=new Map();for(let i=0;i<numerics.length;i++){if(numerics[i]===undefined)continue;const dump=memoryAllocatorDumps[i];if(dump===SUBALLOCATION_CONTEXT){return;}
-dump.infos.forEach(function(dumpInfo){getAndUpdateEntry(infoTypeToEntry,dumpInfo.type,function(newEntry){if(numerics.length===1){newEntry.providedSize=dumpInfo.providedSize;newEntry.dependencySize=dumpInfo.dependencySize;}});});}
-for(const infoType of infoTypeToEntry.keys()){const entry=infoTypeToEntry.get(infoType);const messageBuilder=new SizeInfoMessageBuilder();messageBuilder.append('provided size');messageBuilder.appendSizeIfDefined(entry.providedSize);let dependencyName;switch(infoType){case PROVIDED_SIZE_LESS_THAN_AGGREGATED_CHILDREN:dependencyName='the aggregated size of the children';break;case PROVIDED_SIZE_LESS_THAN_LARGEST_OWNER:dependencyName='the size of the largest owner';break;default:dependencyName='an unknown dependency';break;}
-messageBuilder.append(' was less than ',dependencyName);messageBuilder.appendSizeIfDefined(entry.dependencySize);if(entry.count<numerics.length){messageBuilder.appendSomeTimestampsQuantifier();}
-infos.push(tr.ui.analysis.createWarningInfo(messageBuilder.build()));}}};const NUMERIC_COLUMN_RULES=[{condition:tr.model.MemoryAllocatorDump.EFFECTIVE_SIZE_NUMERIC_NAME,importance:10,columnConstructor:EffectiveSizeColumn},{condition:tr.model.MemoryAllocatorDump.SIZE_NUMERIC_NAME,importance:9,columnConstructor:SizeColumn},{condition:'page_size',importance:0,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:/size/,importance:5,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{importance:0,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn}];const DIAGNOSTIC_COLUMN_RULES=[{importance:0,columnConstructor:tr.ui.analysis.StringMemoryColumn}];Polymer({is:'tr-ui-a-memory-dump-allocator-details-pane',behaviors:[tr.ui.analysis.StackedPane],created(){this.memoryAllocatorDumps_=undefined;this.heapDumps_=undefined;this.aggregationMode_=undefined;},ready(){this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;},set memoryAllocatorDumps(memoryAllocatorDumps){this.memoryAllocatorDumps_=memoryAllocatorDumps;this.scheduleRebuild_();},get memoryAllocatorDumps(){return this.memoryAllocatorDumps_;},set heapDumps(heapDumps){this.heapDumps_=heapDumps;this.scheduleRebuild_();},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;this.scheduleRebuild_();},get aggregationMode(){return this.aggregationMode_;},onRebuild_(){if(this.memoryAllocatorDumps_===undefined||this.memoryAllocatorDumps_.length===0){this.$.info_text.style.display='block';this.$.table.style.display='none';this.$.table.clear();this.$.table.rebuild();this.childPaneBuilder=undefined;return;}
-this.$.info_text.style.display='none';this.$.table.style.display='block';const rows=this.createRows_();const columns=this.createColumns_(rows);rows.forEach(function(rootRow){tr.ui.analysis.aggregateTableRowCellsRecursively(rootRow,columns,function(contexts){return contexts!==undefined&&contexts.some(function(context){return context===SUBALLOCATION_CONTEXT;});});});this.$.table.tableRows=rows;this.$.table.tableColumns=columns;this.$.table.rebuild();tr.ui.analysis.expandTableRowsRecursively(this.$.table);if(this.heapDumps_===undefined){this.childPaneBuilder=undefined;}else{this.childPaneBuilder=function(){const pane=document.createElement('tr-ui-a-memory-dump-heap-details-pane');pane.heapDumps=this.heapDumps_;pane.aggregationMode=this.aggregationMode_;return pane;}.bind(this);}},createRows_(){return[this.createAllocatorRowRecursively_(this.memoryAllocatorDumps_)];},createAllocatorRowRecursively_(dumps){const definedDump=dumps.find(x=>x);const title=definedDump.name;const fullName=definedDump.fullName;const numericCells=tr.ui.analysis.createCells(dumps,function(dump){return dump.numerics;});const diagnosticCells=tr.ui.analysis.createCells(dumps,function(dump){return dump.diagnostics;});let suballocatedBy=undefined;if(title.startsWith('__')){for(let i=0;i<dumps.length;i++){const dump=dumps[i];if(dump===undefined||dump.ownedBy.length===0){continue;}
-const ownerDump=dump.ownedBy[0].source;if(dump.ownedBy.length>1||dump.children.length>0||ownerDump.containerMemoryDump!==dump.containerMemoryDump){suballocatedBy=undefined;break;}
-if(suballocatedBy===undefined){suballocatedBy=ownerDump.fullName;}else if(suballocatedBy!==ownerDump.fullName){suballocatedBy=undefined;break;}}}
-const row={title,fullNames:[fullName],contexts:dumps,numericCells,diagnosticCells,suballocatedBy};const childDumpNameToDumps=tr.b.invertArrayOfDicts(dumps,function(dump){const results={};for(const child of dump.children){results[child.name]=child;}
-return results;});const subRows=[];let suballocationClassificationRootNode=undefined;for(const childDumps of Object.values(childDumpNameToDumps)){const childRow=this.createAllocatorRowRecursively_(childDumps);if(childRow.suballocatedBy===undefined){subRows.push(childRow);}else{suballocationClassificationRootNode=this.classifySuballocationRow_(childRow,suballocationClassificationRootNode);}}
-if(suballocationClassificationRootNode!==undefined){const suballocationRow=this.createSuballocationRowRecursively_('suballocations',suballocationClassificationRootNode);subRows.push(suballocationRow);}
-if(subRows.length>0){row.subRows=subRows;}
-return row;},classifySuballocationRow_(suballocationRow,rootNode){if(rootNode===undefined){rootNode={children:{},row:undefined};}
-const suballocationLevels=suballocationRow.suballocatedBy.split('/');let currentNode=rootNode;for(let i=0;i<suballocationLevels.length;i++){const suballocationLevel=suballocationLevels[i];let nextNode=currentNode.children[suballocationLevel];if(nextNode===undefined){currentNode.children[suballocationLevel]=nextNode={children:{},row:undefined};}
-currentNode=nextNode;}
-const existingRow=currentNode.row;if(existingRow!==undefined){for(let i=0;i<suballocationRow.contexts.length;i++){const newContext=suballocationRow.contexts[i];if(newContext===undefined)continue;if(existingRow.contexts[i]!==undefined){throw new Error('Multiple suballocations with the same owner name');}
-existingRow.contexts[i]=newContext;['numericCells','diagnosticCells'].forEach(function(cellKey){const suballocationCells=suballocationRow[cellKey];if(suballocationCells===undefined)return;for(const[cellName,cell]of Object.entries(suballocationCells)){if(cell===undefined)continue;const fields=cell.fields;if(fields===undefined)continue;const field=fields[i];if(field===undefined)continue;let existingCells=existingRow[cellKey];if(existingCells===undefined){existingCells={};existingRow[cellKey]=existingCells;}
-let existingCell=existingCells[cellName];if(existingCell===undefined){existingCell=new tr.ui.analysis.MemoryCell(new Array(fields.length));existingCells[cellName]=existingCell;}
-existingCell.fields[i]=field;}});}
-existingRow.fullNames.push.apply(existingRow.fullNames,suballocationRow.fullNames);}else{currentNode.row=suballocationRow;}
-return rootNode;},createSuballocationRowRecursively_(name,node){const childCount=Object.keys(node.children).length;if(childCount===0){if(node.row===undefined){throw new Error('Suballocation node must have a row or children');}
-const row=node.row;row.title=name;row.suballocation=true;return row;}
-const subRows=[];for(const[subName,subNode]of Object.entries(node.children)){subRows.push(this.createSuballocationRowRecursively_(subName,subNode));}
-if(node.row!==undefined){const row=node.row;row.title='<unspecified>';row.suballocation=true;subRows.unshift(row);}
-const contexts=new Array(subRows[0].contexts.length);for(let i=0;i<subRows.length;i++){subRows[i].contexts.forEach(function(subContext,index){if(subContext!==undefined){contexts[index]=SUBALLOCATION_CONTEXT;}});}
-return{title:name,suballocation:true,contexts,subRows};},createColumns_(rows){const titleColumn=new AllocatorDumpNameColumn();titleColumn.width='200px';const numericColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'numericCells',aggregationMode:this.aggregationMode_,rules:NUMERIC_COLUMN_RULES});const diagnosticColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'diagnosticCells',aggregationMode:this.aggregationMode_,rules:DIAGNOSTIC_COLUMN_RULES});const fieldColumns=numericColumns.concat(diagnosticColumns);tr.ui.analysis.MemoryColumn.spaceEqually(fieldColumns);const columns=[titleColumn].concat(fieldColumns);return columns;}});return{SUBALLOCATION_CONTEXT,AllocatorDumpNameColumn,EffectiveSizeColumn,SizeColumn,};});'use strict';tr.exportTo('tr.ui.analysis',function(){const Scalar=tr.b.Scalar;const sizeInBytes_smallerIsBetter=tr.b.Unit.byName.sizeInBytes_smallerIsBetter;const CONSTANT_COLUMN_RULES=[{condition:'Start address',importance:0,columnConstructor:tr.ui.analysis.StringMemoryColumn}];const VARIABLE_COLUMN_RULES=[{condition:'Virtual size',importance:7,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:'Protection flags',importance:6,columnConstructor:tr.ui.analysis.StringMemoryColumn},{condition:'PSS',importance:5,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:'Private dirty',importance:4,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:'Private clean',importance:3,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:'Shared dirty',importance:2,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:'Shared clean',importance:1,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn},{condition:'Swapped',importance:0,columnConstructor:tr.ui.analysis.DetailsNumericMemoryColumn}];const BYTE_STAT_COLUMN_MAP={'proportionalResident':'PSS','privateDirtyResident':'Private dirty','privateCleanResident':'Private clean','sharedDirtyResident':'Shared dirty','sharedCleanResident':'Shared clean','swapped':'Swapped'};function hexString(address,is64BitAddress){if(address===undefined)return undefined;const hexPadding=is64BitAddress?'0000000000000000':'00000000';return(hexPadding+address.toString(16)).substr(-hexPadding.length);}
-function pruneEmptyRuleRows(row){if(row.subRows===undefined||row.subRows.length===0)return;if(row.subRows[0].rule===undefined){return;}
-row.subRows.forEach(pruneEmptyRuleRows);row.subRows=row.subRows.filter(function(subRow){return subRow.subRows.length>0;});}
-Polymer({is:'tr-ui-a-memory-dump-vm-regions-details-pane',behaviors:[tr.ui.analysis.StackedPane],created(){this.vmRegions_=undefined;this.aggregationMode_=undefined;},ready(){this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;},set vmRegions(vmRegions){this.vmRegions_=vmRegions;this.scheduleRebuild_();},get vmRegions(){return this.vmRegions_;},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;this.scheduleRebuild_();},get aggregationMode(){return this.aggregationMode_;},onRebuild_(){if(this.vmRegions_===undefined||this.vmRegions_.length===0){this.$.info_text.style.display='block';this.$.table.style.display='none';this.$.table.clear();this.$.table.rebuild();return;}
-this.$.info_text.style.display='none';this.$.table.style.display='block';const rows=this.createRows_(this.vmRegions_);const columns=this.createColumns_(rows);this.$.table.tableRows=rows;this.$.table.tableColumns=columns;this.$.table.rebuild();tr.ui.analysis.expandTableRowsRecursively(this.$.table);},createRows_(timeToVmRegionTree){const is64BitAddress=timeToVmRegionTree.some(function(vmRegionTree){if(vmRegionTree===undefined)return false;return vmRegionTree.someRegion(function(region){if(region.startAddress===undefined)return false;return region.startAddress>=4294967296;});});return[this.createClassificationNodeRow(timeToVmRegionTree,is64BitAddress)];},createClassificationNodeRow(timeToNode,is64BitAddress){const definedNode=timeToNode.find(x=>x);const childNodeIdToTimeToNode=Object.values(tr.b.invertArrayOfDicts(timeToNode,function(node){const children=node.children;if(children===undefined)return undefined;const childMap={};children.forEach(function(childNode){if(!childNode.hasRegions)return;childMap[childNode.title]=childNode;});return childMap;}));const childNodeSubRows=childNodeIdToTimeToNode.map(function(timeToChildNode){return this.createClassificationNodeRow(timeToChildNode,is64BitAddress);},this);const regionIdToTimeToRegion=Object.values(tr.b.invertArrayOfDicts(timeToNode,function(node){const regions=node.regions;if(regions===undefined)return undefined;const results={};for(const region of regions){results[region.uniqueIdWithinProcess]=region;}
-return results;}));const regionSubRows=regionIdToTimeToRegion.map(function(timeToRegion){return this.createRegionRow_(timeToRegion,is64BitAddress);},this);const subRows=childNodeSubRows.concat(regionSubRows);return{title:definedNode.title,contexts:timeToNode,variableCells:this.createVariableCells_(timeToNode),subRows};},createRegionRow_(timeToRegion,is64BitAddress){const definedRegion=timeToRegion.find(x=>x);return{title:definedRegion.mappedFile,contexts:timeToRegion,constantCells:this.createConstantCells_(definedRegion,is64BitAddress),variableCells:this.createVariableCells_(timeToRegion)};},createConstantCells_(definedRegion,is64BitAddress){return tr.ui.analysis.createCells([definedRegion],function(region){const startAddress=region.startAddress;if(startAddress===undefined)return undefined;return{'Start address':hexString(startAddress,is64BitAddress)};});},createVariableCells_(timeToRegion){return tr.ui.analysis.createCells(timeToRegion,function(region){const fields={};const sizeInBytes=region.sizeInBytes;if(sizeInBytes!==undefined){fields['Virtual size']=new Scalar(sizeInBytes_smallerIsBetter,sizeInBytes);}
-const protectionFlags=region.protectionFlagsToString;if(protectionFlags!==undefined){fields['Protection flags']=protectionFlags;}
-for(const[byteStatName,columnName]of
-Object.entries(BYTE_STAT_COLUMN_MAP)){const byteStat=region.byteStats[byteStatName];if(byteStat===undefined)continue;fields[columnName]=new Scalar(sizeInBytes_smallerIsBetter,byteStat);}
-return fields;});},createColumns_(rows){const titleColumn=new tr.ui.analysis.TitleColumn('Mapped file');titleColumn.width='200px';const constantColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'constantCells',aggregationMode:undefined,rules:CONSTANT_COLUMN_RULES});const variableColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'variableCells',aggregationMode:this.aggregationMode_,rules:VARIABLE_COLUMN_RULES});const fieldColumns=constantColumns.concat(variableColumns);tr.ui.analysis.MemoryColumn.spaceEqually(fieldColumns);const columns=[titleColumn].concat(fieldColumns);return columns;}});return{};});'use strict';Polymer({is:'tr-ui-b-color-legend',ready(){const blackSquareCharCode=9632;this.$.square.innerText=String.fromCharCode(blackSquareCharCode);this.label_=undefined;this.compoundEventSelectionState_=tr.model.CompoundEventSelectionState.NOT_SELECTED;},set compoundEventSelectionState(compoundEventSelectionState){this.compoundEventSelectionState_=compoundEventSelectionState;},get label(){return this.label_;},set label(label){if(label===undefined){this.setLabelAndColorId(undefined,undefined);return;}
-const colorId=tr.b.ColorScheme.getColorIdForGeneralPurposeString(label);this.setLabelAndColorId(label,colorId);},setLabelAndColorId(label,colorId){this.label_=label;Polymer.dom(this.$.label).textContent='';Polymer.dom(this.$.label).appendChild(tr.ui.b.asHTMLOrTextNode(label));if(colorId===undefined){this.$.square.style.color='initial';}else{this.$.square.style.color=tr.b.ColorScheme.colorsAsStrings[colorId];}}});'use strict';Polymer({is:'tr-ui-b-view-specific-brushing-state',get viewId(){return this.getAttribute('view-id');},set viewId(viewId){Polymer.dom(this).setAttribute('view-id',viewId);},get(){const viewId=this.viewId;if(!viewId){throw new Error('Element must have a view-id attribute!');}
-const brushingStateController=tr.c.BrushingStateController.getControllerForElement(this);if(!brushingStateController)return undefined;return brushingStateController.getViewSpecificBrushingState(viewId);},set(state){const viewId=this.viewId;if(!viewId){throw new Error('Element must have a view-id attribute!');}
-const brushingStateController=tr.c.BrushingStateController.getControllerForElement(this);if(!brushingStateController)return;brushingStateController.changeViewSpecificBrushingState(viewId,state);}});'use strict';tr.exportTo('tr.ui.analysis',function(){const MemoryColumnColorScheme=tr.b.MemoryColumnColorScheme;const Scalar=tr.b.Scalar;const sizeInBytes_smallerIsBetter=tr.b.Unit.byName.sizeInBytes_smallerIsBetter;const PLATFORM_SPECIFIC_TOTAL_NAME_SUFFIX='_bytes';const DISPLAYED_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.DISPLAYED_SIZE_NUMERIC_NAME;const SOME_TIMESTAMPS_INFO_QUANTIFIER=tr.ui.analysis.MemoryColumn.SOME_TIMESTAMPS_INFO_QUANTIFIER;const RIGHTWARDS_ARROW_WITH_HOOK=String.fromCharCode(0x21AA);const RIGHTWARDS_ARROW_FROM_BAR=String.fromCharCode(0x21A6);const GREATER_THAN_OR_EQUAL_TO=String.fromCharCode(0x2265);const UNMARRIED_PARTNERSHIP_SYMBOL=String.fromCharCode(0x26AF);const TRIGRAM_FOR_HEAVEN=String.fromCharCode(0x2630);function lazyMap(list,fn,opt_this){opt_this=opt_this||this;let result=undefined;list.forEach(function(item,index){const value=fn.call(opt_this,item,index);if(value===undefined)return;if(result===undefined){result=new Array(list.length);}
-result[index]=value;});return result;}
-function ProcessNameColumn(){tr.ui.analysis.TitleColumn.call(this,'Process');}
-ProcessNameColumn.prototype={__proto__:tr.ui.analysis.TitleColumn.prototype,formatTitle(row){if(row.contexts===undefined){return row.title;}
-const titleEl=document.createElement('tr-ui-b-color-legend');titleEl.label=row.title;return titleEl;}};function UsedMemoryColumn(name,cellPath,aggregationMode){tr.ui.analysis.NumericMemoryColumn.call(this,name,cellPath,aggregationMode);}
-UsedMemoryColumn.COLOR=MemoryColumnColorScheme.getColor('used_memory_column').toString();UsedMemoryColumn.OLDER_COLOR=MemoryColumnColorScheme.getColor('older_used_memory_column').toString();UsedMemoryColumn.prototype={__proto__:tr.ui.analysis.NumericMemoryColumn.prototype,get title(){return tr.ui.b.createSpan({textContent:this.name,color:UsedMemoryColumn.COLOR});},getFormattingContext(unit){return{unitPrefix:tr.b.UnitPrefixScale.BINARY.MEBI};},color(numerics,processMemoryDumps){return UsedMemoryColumn.COLOR;},getChildPaneBuilder(processMemoryDumps){if(processMemoryDumps===undefined)return undefined;const vmRegions=lazyMap(processMemoryDumps,function(pmd){if(pmd===undefined)return undefined;return pmd.mostRecentVmRegions;});if(vmRegions===undefined)return undefined;return function(){const pane=document.createElement('tr-ui-a-memory-dump-vm-regions-details-pane');pane.vmRegions=vmRegions;pane.aggregationMode=this.aggregationMode;return pane;}.bind(this);}};function PeakMemoryColumn(name,cellPath,aggregationMode){UsedMemoryColumn.call(this,name,cellPath,aggregationMode);}
-PeakMemoryColumn.prototype={__proto__:UsedMemoryColumn.prototype,addInfos(numerics,processMemoryDumps,infos){if(processMemoryDumps===undefined)return;let resettableValueCount=0;let nonResettableValueCount=0;for(let i=0;i<numerics.length;i++){if(numerics[i]===undefined)continue;if(processMemoryDumps[i].arePeakResidentBytesResettable){resettableValueCount++;}else{nonResettableValueCount++;}}
-if(resettableValueCount>0&&nonResettableValueCount>0){infos.push(tr.ui.analysis.createWarningInfo('Both resettable and '+'non-resettable peak RSS values were provided by the process'));}else if(resettableValueCount>0){infos.push({icon:RIGHTWARDS_ARROW_WITH_HOOK,message:'Peak RSS since previous memory dump.'});}else{infos.push({icon:RIGHTWARDS_ARROW_FROM_BAR,message:'Peak RSS since process startup. Finer grained '+'peaks require a Linux kernel version '+
-GREATER_THAN_OR_EQUAL_TO+' 4.0.'});}}};function ByteStatColumn(name,cellPath,aggregationMode){UsedMemoryColumn.call(this,name,cellPath,aggregationMode);}
-ByteStatColumn.prototype={__proto__:UsedMemoryColumn.prototype,color(numerics,processMemoryDumps){if(processMemoryDumps===undefined){return UsedMemoryColumn.COLOR;}
-const allOlderValues=processMemoryDumps.every(function(processMemoryDump){if(processMemoryDump===undefined)return true;return!processMemoryDump.hasOwnVmRegions;});if(allOlderValues){return UsedMemoryColumn.OLDER_COLOR;}
-return UsedMemoryColumn.COLOR;},addInfos(numerics,processMemoryDumps,infos){if(processMemoryDumps===undefined)return;let olderValueCount=0;for(let i=0;i<numerics.length;i++){const processMemoryDump=processMemoryDumps[i];if(processMemoryDump!==undefined&&!processMemoryDump.hasOwnVmRegions){olderValueCount++;}}
-if(olderValueCount===0){return;}
-const infoQuantifier=olderValueCount<numerics.length?' '+SOME_TIMESTAMPS_INFO_QUANTIFIER:'';infos.push({message:'Older value'+infoQuantifier+' (only heavy (purple) memory dumps contain memory maps).',icon:UNMARRIED_PARTNERSHIP_SYMBOL});}};UsedMemoryColumn.RULES=[{condition:'Total resident',importance:10,columnConstructor:UsedMemoryColumn},{condition:'Peak total resident',importance:9,columnConstructor:PeakMemoryColumn},{condition:'PSS',importance:8,columnConstructor:ByteStatColumn},{condition:'Private dirty',importance:7,columnConstructor:ByteStatColumn},{condition:'Swapped',importance:6,columnConstructor:ByteStatColumn},{importance:0,columnConstructor:UsedMemoryColumn}];UsedMemoryColumn.TOTALS_MAP={'residentBytes':'Total resident','peakResidentBytes':'Peak total resident','privateFootprintBytes':'Private footprint',};UsedMemoryColumn.PLATFORM_SPECIFIC_TOTALS_MAP={'vm':'Total virtual','swp':'Swapped','pc':'Private clean','pd':'Private dirty','sc':'Shared clean','sd':'Shared dirty','gpu_egl':'GPU EGL','gpu_egl_pss':'GPU EGL PSS','gpu_gl':'GPU GL','gpu_gl_pss':'GPU GL PSS','gpu_etc':'GPU Other','gpu_etc_pss':'GPU Other PSS',};UsedMemoryColumn.BYTE_STAT_MAP={'proportionalResident':'PSS','privateDirtyResident':'Private dirty','swapped':'Swapped'};function AllocatorColumn(name,cellPath,aggregationMode){tr.ui.analysis.NumericMemoryColumn.call(this,name,cellPath,aggregationMode);}
-AllocatorColumn.prototype={__proto__:tr.ui.analysis.NumericMemoryColumn.prototype,get title(){const titleEl=document.createElement('tr-ui-b-color-legend');titleEl.label=this.name;return titleEl;},getFormattingContext(unit){return{unitPrefix:tr.b.UnitPrefixScale.BINARY.MEBI};},addInfos(numerics,processMemoryDumps,infos){if(processMemoryDumps===undefined)return;let heapDumpCount=0;let missingSizeCount=0;for(let i=0;i<processMemoryDumps.length;i++){const processMemoryDump=processMemoryDumps[i];if(processMemoryDump===undefined)continue;const heapDumps=processMemoryDump.heapDumps;if(heapDumps!==undefined&&heapDumps[this.name]!==undefined){heapDumpCount++;}
-const allocatorDump=processMemoryDump.getMemoryAllocatorDumpByFullName(this.name);if(allocatorDump!==undefined&&allocatorDump.numerics[DISPLAYED_SIZE_NUMERIC_NAME]===undefined){missingSizeCount++;}}
-if(heapDumpCount>0){const infoQuantifier=heapDumpCount<numerics.length?' '+SOME_TIMESTAMPS_INFO_QUANTIFIER:'';infos.push({message:'Heap dump provided'+infoQuantifier+'.',icon:TRIGRAM_FOR_HEAVEN});}
-if(missingSizeCount>0){const infoQuantifier=missingSizeCount<numerics.length?' '+SOME_TIMESTAMPS_INFO_QUANTIFIER:'';infos.push(tr.ui.analysis.createWarningInfo('Size was not provided'+infoQuantifier+'.'));}},getChildPaneBuilder(processMemoryDumps){if(processMemoryDumps===undefined)return undefined;const memoryAllocatorDumps=lazyMap(processMemoryDumps,function(pmd){if(pmd===undefined)return undefined;return pmd.getMemoryAllocatorDumpByFullName(this.name);},this);if(memoryAllocatorDumps===undefined)return undefined;const heapDumps=lazyMap(processMemoryDumps,function(pmd){if(pmd===undefined||pmd.heapDumps===undefined)return undefined;return pmd.heapDumps[this.name];},this);return function(){const pane=document.createElement('tr-ui-a-memory-dump-allocator-details-pane');pane.memoryAllocatorDumps=memoryAllocatorDumps;pane.heapDumps=heapDumps;pane.aggregationMode=this.aggregationMode;return pane;}.bind(this);}};function TracingColumn(name,cellPath,aggregationMode){AllocatorColumn.call(this,name,cellPath,aggregationMode);}
-TracingColumn.COLOR=MemoryColumnColorScheme.getColor('tracing_memory_column').toString();TracingColumn.prototype={__proto__:AllocatorColumn.prototype,get title(){return tr.ui.b.createSpan({textContent:this.name,color:TracingColumn.COLOR});},color(numerics,processMemoryDumps){return TracingColumn.COLOR;}};AllocatorColumn.RULES=[{condition:'tracing',importance:0,columnConstructor:TracingColumn},{importance:1,columnConstructor:AllocatorColumn}];Polymer({is:'tr-ui-a-memory-dump-overview-pane',behaviors:[tr.ui.analysis.StackedPane],created(){this.processMemoryDumps_=undefined;this.aggregationMode_=undefined;},ready(){this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.CELL;this.$.table.addEventListener('selection-changed',function(tableEvent){tableEvent.stopPropagation();this.changeChildPane_();}.bind(this));},set processMemoryDumps(processMemoryDumps){this.processMemoryDumps_=processMemoryDumps;this.scheduleRebuild_();},get processMemoryDumps(){return this.processMemoryDumps_;},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;this.scheduleRebuild_();},get aggregationMode(){return this.aggregationMode_;},get selectedMemoryCell(){if(this.processMemoryDumps_===undefined||this.processMemoryDumps_.length===0){return undefined;}
-const selectedTableRow=this.$.table.selectedTableRow;if(!selectedTableRow)return undefined;const selectedColumnIndex=this.$.table.selectedColumnIndex;if(selectedColumnIndex===undefined)return undefined;const selectedColumn=this.$.table.tableColumns[selectedColumnIndex];const selectedMemoryCell=selectedColumn.cell(selectedTableRow);return selectedMemoryCell;},changeChildPane_(){this.storeSelection_();this.childPaneBuilder=this.determineChildPaneBuilderFromSelection_();},determineChildPaneBuilderFromSelection_(){if(this.processMemoryDumps_===undefined||this.processMemoryDumps_.length===0){return undefined;}
-const selectedTableRow=this.$.table.selectedTableRow;if(!selectedTableRow)return undefined;const selectedColumnIndex=this.$.table.selectedColumnIndex;if(selectedColumnIndex===undefined)return undefined;const selectedColumn=this.$.table.tableColumns[selectedColumnIndex];return selectedColumn.getChildPaneBuilder(selectedTableRow.contexts);},onRebuild_(){if(this.processMemoryDumps_===undefined||this.processMemoryDumps_.length===0){this.$.info_text.style.display='block';this.$.table.style.display='none';this.$.table.clear();this.$.table.rebuild();return;}
-this.$.info_text.style.display='none';this.$.table.style.display='block';const rows=this.createRows_();const columns=this.createColumns_(rows);const footerRows=this.createFooterRows_(rows,columns);this.$.table.tableRows=rows;this.$.table.footerRows=footerRows;this.$.table.tableColumns=columns;this.$.table.rebuild();this.restoreSelection_();},createRows_(){const timeToPidToProcessMemoryDump=this.processMemoryDumps_;const pidToTimeToProcessMemoryDump=tr.b.invertArrayOfDicts(timeToPidToProcessMemoryDump);const rows=[];for(const[pid,timeToDump]of
-Object.entries(pidToTimeToProcessMemoryDump)){const process=timeToDump.find(x=>x).process;const usedMemoryCells=tr.ui.analysis.createCells(timeToDump,function(dump){const sizes={};const totals=dump.totals;if(totals!==undefined){for(const[totalName,cellName]of
-Object.entries(UsedMemoryColumn.TOTALS_MAP)){const total=totals[totalName];if(total===undefined)continue;sizes[cellName]=new Scalar(sizeInBytes_smallerIsBetter,total);}
-const platformSpecific=totals.platformSpecific;if(platformSpecific!==undefined){for(const[name,size]of Object.entries(platformSpecific)){let newName=name;if(UsedMemoryColumn.PLATFORM_SPECIFIC_TOTALS_MAP[name]===undefined){if(name.endsWith(PLATFORM_SPECIFIC_TOTAL_NAME_SUFFIX)){newName=name.substring(0,name.length-
-PLATFORM_SPECIFIC_TOTAL_NAME_SUFFIX.length);}
-newName=newName.replace('_',' ').trim();newName=newName.charAt(0).toUpperCase()+newName.slice(1);}else{newName=UsedMemoryColumn.PLATFORM_SPECIFIC_TOTALS_MAP[name];}
-sizes[newName]=new Scalar(sizeInBytes_smallerIsBetter,size);}}}
-const vmRegions=dump.mostRecentVmRegions;if(vmRegions!==undefined){for(const[byteStatName,cellName]of
-Object.entries(UsedMemoryColumn.BYTE_STAT_MAP)){const byteStat=vmRegions.byteStats[byteStatName];if(byteStat===undefined)continue;sizes[cellName]=new Scalar(sizeInBytes_smallerIsBetter,byteStat);}}
-return sizes;});const allocatorCells=tr.ui.analysis.createCells(timeToDump,function(dump){const memoryAllocatorDumps=dump.memoryAllocatorDumps;if(memoryAllocatorDumps===undefined)return undefined;const sizes={};memoryAllocatorDumps.forEach(function(allocatorDump){let rootDisplayedSizeNumeric=allocatorDump.numerics[DISPLAYED_SIZE_NUMERIC_NAME];if(rootDisplayedSizeNumeric===undefined){rootDisplayedSizeNumeric=new Scalar(sizeInBytes_smallerIsBetter,0);}
-sizes[allocatorDump.fullName]=rootDisplayedSizeNumeric;});return sizes;});rows.push({title:process.userFriendlyName,contexts:timeToDump,usedMemoryCells,allocatorCells});}
-return rows;},createFooterRows_(rows,columns){if(rows.length<=1)return[];const totalRow={title:'Total'};tr.ui.analysis.aggregateTableRowCells(totalRow,rows,columns);return[totalRow];},createColumns_(rows){const titleColumn=new ProcessNameColumn();titleColumn.width='200px';const usedMemorySizeColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'usedMemoryCells',aggregationMode:this.aggregationMode_,rules:UsedMemoryColumn.RULES});const allocatorSizeColumns=tr.ui.analysis.MemoryColumn.fromRows(rows,{cellKey:'allocatorCells',aggregationMode:this.aggregationMode_,rules:AllocatorColumn.RULES});const sizeColumns=usedMemorySizeColumns.concat(allocatorSizeColumns);tr.ui.analysis.MemoryColumn.spaceEqually(sizeColumns);const columns=[titleColumn].concat(sizeColumns);return columns;},storeSelection_(){let selectedRowTitle;const selectedRow=this.$.table.selectedTableRow;if(selectedRow!==undefined){selectedRowTitle=selectedRow.title;}
-let selectedColumnName;const selectedColumnIndex=this.$.table.selectedColumnIndex;if(selectedColumnIndex!==undefined){const selectedColumn=this.$.table.tableColumns[selectedColumnIndex];selectedColumnName=selectedColumn.name;}
-this.$.state.set({rowTitle:selectedRowTitle,columnName:selectedColumnName});},restoreSelection_(){const settings=this.$.state.get();if(settings===undefined||settings.rowTitle===undefined||settings.columnName===undefined){return;}
-const selectedColumnIndex=this.$.table.tableColumns.findIndex(col=>col.name===settings.columnName);if(selectedColumnIndex===-1)return;const selectedRowTitle=settings.rowTitle;const selectedRow=this.$.table.tableRows.find(row=>row.title===selectedRowTitle);if(selectedRow===undefined)return;this.$.table.selectedTableRow=selectedRow;this.$.table.selectedColumnIndex=selectedColumnIndex;}});return{ProcessNameColumn,UsedMemoryColumn,PeakMemoryColumn,ByteStatColumn,AllocatorColumn,TracingColumn,};});'use strict';tr.exportTo('tr.ui.analysis',function(){Polymer({is:'tr-ui-a-memory-dump-header-pane',behaviors:[tr.ui.analysis.StackedPane],created(){this.containerMemoryDumps_=undefined;},ready(){Polymer.dom(this.$.aggregation_mode_container).appendChild(tr.ui.b.createSelector(this,'aggregationMode','memoryDumpHeaderPane.aggregationMode',tr.ui.analysis.MemoryColumn.AggregationMode.DIFF,[{label:'Diff',value:tr.ui.analysis.MemoryColumn.AggregationMode.DIFF},{label:'Max',value:tr.ui.analysis.MemoryColumn.AggregationMode.MAX}]));},set containerMemoryDumps(containerMemoryDumps){this.containerMemoryDumps_=containerMemoryDumps;this.scheduleRebuild_();},get containerMemoryDumps(){return this.containerMemoryDumps_;},set aggregationMode(aggregationMode){this.aggregationMode_=aggregationMode;this.scheduleRebuild_();},get aggregationMode(){return this.aggregationMode_;},onRebuild_(){this.updateLabel_();this.updateAggregationModeSelector_();this.changeChildPane_();},updateLabel_(){Polymer.dom(this.$.label).textContent='';if(this.containerMemoryDumps_===undefined||this.containerMemoryDumps_.length<=0){Polymer.dom(this.$.label).textContent='No memory dumps selected';return;}
-const containerDumpCount=this.containerMemoryDumps_.length;const isMultiSelection=containerDumpCount>1;Polymer.dom(this.$.label).appendChild(document.createTextNode('Selected '+containerDumpCount+' memory dump'+
-(isMultiSelection?'s':'')+' in '+this.containerMemoryDumps_[0].containerName+' at '));Polymer.dom(this.$.label).appendChild(document.createTextNode(tr.b.Unit.byName.timeStampInMs.format(this.containerMemoryDumps_[0].start)));if(isMultiSelection){const ELLIPSIS=String.fromCharCode(8230);Polymer.dom(this.$.label).appendChild(document.createTextNode(ELLIPSIS));Polymer.dom(this.$.label).appendChild(document.createTextNode(tr.b.Unit.byName.timeStampInMs.format(this.containerMemoryDumps_[containerDumpCount-1].start)));}},updateAggregationModeSelector_(){let displayStyle;if(this.containerMemoryDumps_===undefined||this.containerMemoryDumps_.length<=1){displayStyle='none';}else{displayStyle='initial';}
-this.$.aggregation_mode_container.style.display=displayStyle;},changeChildPane_(){this.childPaneBuilder=function(){if(this.containerMemoryDumps_===undefined||this.containerMemoryDumps_.length<=0){return undefined;}
-const overviewPane=document.createElement('tr-ui-a-memory-dump-overview-pane');overviewPane.processMemoryDumps=this.containerMemoryDumps_.map(function(containerDump){return containerDump.processMemoryDumps;});overviewPane.aggregationMode=this.aggregationMode;return overviewPane;}.bind(this);}});return{};});'use strict';Polymer({is:'tr-ui-a-stacked-pane-view',setPaneBuilder(paneBuilder,opt_parentPane){const paneContainer=this.$.pane_container;if(opt_parentPane){if(!(opt_parentPane instanceof HTMLElement)){throw new Error('Parent pane must be an HTML element');}
-if(opt_parentPane.parentElement!==paneContainer){throw new Error('Parent pane must be a child of the pane container');}}
-while(Polymer.dom(paneContainer).lastElementChild!==null&&Polymer.dom(paneContainer).lastElementChild!==opt_parentPane){const removedPane=Polymer.dom(this.$.pane_container).lastElementChild;const listener=this.listeners_.get(removedPane);if(listener===undefined){throw new Error('No listener associated with pane');}
-this.listeners_.delete(removedPane);removedPane.removeEventListener('request-child-pane-change',listener);Polymer.dom(paneContainer).removeChild(removedPane);}
-if(opt_parentPane&&opt_parentPane.parentElement!==paneContainer){throw new Error('Parent pane was removed from the pane container');}
-if(!paneBuilder)return;const pane=paneBuilder();if(!pane)return;if(!(pane instanceof HTMLElement)){throw new Error('Pane must be an HTML element');}
-const listener=function(event){this.setPaneBuilder(pane.childPaneBuilder,pane);}.bind(this);if(!this.listeners_){this.listeners_=new WeakMap();}
-this.listeners_.set(pane,listener);pane.addEventListener('request-child-pane-change',listener);Polymer.dom(paneContainer).appendChild(pane);pane.appended();},rebuild(){let currentPane=Polymer.dom(this.$.pane_container).firstElementChild;while(currentPane){currentPane.rebuild();currentPane=currentPane.nextElementSibling;}},get panesForTesting(){const panes=[];let currentChild=Polymer.dom(this.$.pane_container).firstElementChild;while(currentChild){panes.push(currentChild);currentChild=currentChild.nextElementSibling;}
-return panes;}});'use strict';tr.exportTo('tr.ui.analysis',function(){Polymer({is:'tr-ui-a-container-memory-dump-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],set selection(selection){if(selection===undefined){this.currentSelection_=undefined;this.dumpsByContainerName_=undefined;this.updateContents_();return;}
-selection.forEach(function(event){if(!(event instanceof tr.model.ContainerMemoryDump)){throw new Error('Memory dump sub-view only supports container memory dumps');}});this.currentSelection_=selection;this.dumpsByContainerName_=tr.b.groupIntoMap(this.currentSelection_.toArray(),dump=>dump.containerName);for(const dumps of this.dumpsByContainerName_.values()){dumps.sort((a,b)=>a.start-b.start);}
-this.updateContents_();},get selection(){return this.currentSelection_;},get requiresTallView(){return true;},updateContents_(){Polymer.dom(this.$.content).textContent='';if(this.dumpsByContainerName_===undefined)return;const containerNames=Array.from(this.dumpsByContainerName_.keys());if(containerNames.length===0)return;if(containerNames.length>1){this.buildViewForMultipleContainerNames_();}else{this.buildViewForSingleContainerName_();}},buildViewForSingleContainerName_(){const containerMemoryDumps=tr.b.getFirstElement(this.dumpsByContainerName_.values());const dumpView=this.ownerDocument.createElement('tr-ui-a-stacked-pane-view');Polymer.dom(this.$.content).appendChild(dumpView);dumpView.setPaneBuilder(function(){const headerPane=document.createElement('tr-ui-a-memory-dump-header-pane');headerPane.containerMemoryDumps=containerMemoryDumps;return headerPane;});},buildViewForMultipleContainerNames_(){const ownerDocument=this.ownerDocument;const rows=[];for(const[containerName,dumps]of this.dumpsByContainerName_){rows.push({containerName,subRows:dumps,isExpanded:true,});}
-rows.sort(function(a,b){return a.containerName.localeCompare(b.containerName);});const columns=[{title:'Dump',value(row){if(row.subRows===undefined){return this.singleDumpValue_(row);}
-return this.groupedDumpValue_(row);},singleDumpValue_(row){const linkEl=ownerDocument.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(new tr.model.EventSet([row]));Polymer.dom(linkEl).appendChild(tr.v.ui.createScalarSpan(row.start,{unit:tr.b.Unit.byName.timeStampInMs,ownerDocument}));return linkEl;},groupedDumpValue_(row){const linkEl=ownerDocument.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(new tr.model.EventSet(row.subRows));Polymer.dom(linkEl).appendChild(tr.ui.b.createSpan({ownerDocument,textContent:row.subRows.length+' memory dump'+
-(row.subRows.length===1?'':'s')+' in '}));Polymer.dom(linkEl).appendChild(tr.ui.b.createSpan({ownerDocument,textContent:row.containerName,bold:true}));return linkEl;}}];const table=this.ownerDocument.createElement('tr-ui-b-table');table.tableColumns=columns;table.tableRows=rows;table.showHeader=false;table.rebuild();Polymer.dom(this.$.content).appendChild(table);}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-container-memory-dump-sub-view',tr.model.GlobalMemoryDump,{multi:false,title:'Global Memory Dump',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-container-memory-dump-sub-view',tr.model.GlobalMemoryDump,{multi:true,title:'Global Memory Dumps',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-container-memory-dump-sub-view',tr.model.ProcessMemoryDump,{multi:false,title:'Process Memory Dump',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-container-memory-dump-sub-view',tr.model.ProcessMemoryDump,{multi:true,title:'Process Memory Dumps',});return{};});'use strict';(function(){const COUNTER_SAMPLE_TABLE_COLUMNS=[{title:'Counter',width:'150px',value(row){return row.counter;}},{title:'Series',width:'150px',value(row){return row.series;}},{title:'Time',width:'150px',value(row){return row.start;}},{title:'Value',width:'100%',value(row){return row.value;}}];Polymer({is:'tr-ui-a-counter-sample-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.currentSelection_=undefined;this.$.table.tableColumns=COUNTER_SAMPLE_TABLE_COLUMNS;},get selection(){return this.currentSelection_;},set selection(selection){this.currentSelection_=selection;this.updateContents_();},updateContents_(){this.$.table.tableRows=this.selection?this.getRows_(this.selection.toArray()):[];this.$.table.rebuild();},getRows_(samples){const samplesByCounter=tr.b.groupIntoMap(samples,sample=>sample.series.counter.guid);const rows=[];for(const counterSamples of samplesByCounter.values()){const samplesBySeries=tr.b.groupIntoMap(counterSamples,sample=>sample.series.guid);for(const seriesSamples of samplesBySeries.values()){const seriesRows=this.getRowsForSamples_(seriesSamples);seriesRows[0].counter=seriesSamples[0].series.counter.name;seriesRows[0].series=seriesSamples[0].series.name;if(seriesRows.length>1){seriesRows[0].subRows=seriesRows.slice(1);seriesRows[0].isExpanded=true;}
-rows.push(seriesRows[0]);}}
-return rows;},getRowsForSamples_(samples){return samples.map(function(sample){return{start:sample.timestamp,value:sample.value};});}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-counter-sample-sub-view',tr.model.CounterSample,{multi:false,title:'Counter Sample',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-counter-sample-sub-view',tr.model.CounterSample,{multi:true,title:'Counter Samples',});})();'use strict';tr.exportTo('tr.ui.analysis',function(){function MultiEventSummary(title,events){this.title=title;this.duration_=undefined;this.selfTime_=undefined;this.events_=events;this.cpuTimesComputed_=false;this.cpuSelfTime_=undefined;this.cpuDuration_=undefined;this.maxDuration_=undefined;this.maxCpuDuration_=undefined;this.maxSelfTime_=undefined;this.maxCpuSelfTime_=undefined;this.untotallableArgs_=[];this.totalledArgs_=undefined;}
-MultiEventSummary.prototype={set title(title){if(title==='Totals'){this.totalsRow=true;}
-this.title_=title;},get title(){return this.title_;},get duration(){if(this.duration_===undefined){this.duration_=tr.b.math.Statistics.sum(this.events_,function(event){return event.duration;});}
-return this.duration_;},get cpuSelfTime(){this.computeCpuTimesIfNeeded_();return this.cpuSelfTime_;},get cpuDuration(){this.computeCpuTimesIfNeeded_();return this.cpuDuration_;},computeCpuTimesIfNeeded_(){if(this.cpuTimesComputed_)return;this.cpuTimesComputed_=true;let cpuSelfTime=0;let cpuDuration=0;let hasCpuData=false;for(const event of this.events_){if(event.cpuDuration!==undefined){cpuDuration+=event.cpuDuration;hasCpuData=true;}
-if(event.cpuSelfTime!==undefined){cpuSelfTime+=event.cpuSelfTime;hasCpuData=true;}}
-if(hasCpuData){this.cpuDuration_=cpuDuration;this.cpuSelfTime_=cpuSelfTime;}},get selfTime(){if(this.selfTime_===undefined){this.selfTime_=0;for(const event of this.events_){if(event.selfTime!==undefined){this.selfTime_+=event.selfTime;}}}
-return this.selfTime_;},get events(){return this.events_;},get numEvents(){return this.events_.length;},get numAlerts(){if(this.numAlerts_===undefined){this.numAlerts_=tr.b.math.Statistics.sum(this.events_,event=>event.associatedAlerts.length);}
-return this.numAlerts_;},get untotallableArgs(){this.updateArgsIfNeeded_();return this.untotallableArgs_;},get totalledArgs(){this.updateArgsIfNeeded_();return this.totalledArgs_;},get maxDuration(){if(this.maxDuration_===undefined){this.maxDuration_=tr.b.math.Statistics.max(this.events_,function(event){return event.duration;});}
-return this.maxDuration_;},get maxCpuDuration(){if(this.maxCpuDuration_===undefined){this.maxCpuDuration_=tr.b.math.Statistics.max(this.events_,function(event){return event.cpuDuration;});}
-return this.maxCpuDuration_;},get maxSelfTime(){if(this.maxSelfTime_===undefined){this.maxSelfTime_=tr.b.math.Statistics.max(this.events_,function(event){return event.selfTime;});}
-return this.maxSelfTime_;},get maxCpuSelfTime(){if(this.maxCpuSelfTime_===undefined){this.maxCpuSelfTime_=tr.b.math.Statistics.max(this.events_,function(event){return event.cpuSelfTime;});}
-return this.maxCpuSelfTime_;},updateArgsIfNeeded_(){if(this.totalledArgs_!==undefined)return;const untotallableArgs={};const totalledArgs={};for(const event of this.events_){for(const argName in event.args){const argVal=event.args[argName];const type=typeof argVal;if(type!=='number'){untotallableArgs[argName]=true;delete totalledArgs[argName];continue;}
-if(untotallableArgs[argName]){continue;}
-if(totalledArgs[argName]===undefined){totalledArgs[argName]=0;}
-totalledArgs[argName]+=argVal;}}
-this.untotallableArgs_=Object.keys(untotallableArgs);this.totalledArgs_=totalledArgs;}};return{MultiEventSummary,};});'use strict';Polymer({is:'tr-ui-a-multi-event-summary-table',ready(){this.showTotals_=false;this.eventsHaveDuration_=true;this.eventsHaveSubRows_=true;this.eventsByTitle_=undefined;},updateTableColumns_(rows,maxValues){let hasCpuData=false;let hasAlerts=false;rows.forEach(function(row){if(row.cpuDuration!==undefined){hasCpuData=true;}
-if(row.cpuSelfTime!==undefined){hasCpuData=true;}
-if(row.numAlerts){hasAlerts=true;}});const ownerDocument=this.ownerDocument;const columns=[];columns.push({title:'Name',value(row){if(row.title==='Totals')return'Totals';const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.model.EventSet(row.events);},row.title);return linkEl;},width:'350px',cmp(rowA,rowB){return rowA.title.localeCompare(rowB.title);}});if(this.eventsHaveDuration_){columns.push({title:'Wall Duration',value(row){return tr.v.ui.createScalarSpan(row.duration,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.duration),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.duration-rowB.duration;}});}
-if(this.eventsHaveDuration_&&hasCpuData){columns.push({title:'CPU Duration',value(row){return tr.v.ui.createScalarSpan(row.cpuDuration,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.cpuDuration),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.cpuDuration-rowB.cpuDuration;}});}
-if(this.eventsHaveSubRows_&&this.eventsHaveDuration_){columns.push({title:'Self time',value(row){return tr.v.ui.createScalarSpan(row.selfTime,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.selfTime),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.selfTime-rowB.selfTime;}});}
-if(this.eventsHaveSubRows_&&this.eventsHaveDuration_&&hasCpuData){columns.push({title:'CPU Self Time',value(row){return tr.v.ui.createScalarSpan(row.cpuSelfTime,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.cpuSelfTime),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){return rowA.cpuSelfTime-rowB.cpuSelfTime;}});}
-if(this.eventsHaveDuration_){columns.push({title:'Average '+(hasCpuData?'CPU':'Wall')+' Duration',value(row){const totalDuration=hasCpuData?row.cpuDuration:row.duration;return tr.v.ui.createScalarSpan(totalDuration/row.numEvents,{unit:tr.b.Unit.byName.timeDurationInMs,customContextRange:row.totalsRow?undefined:tr.b.math.Range.fromExplicitRange(0,maxValues.duration),ownerDocument,});},width:'<upated further down>',cmp(rowA,rowB){if(hasCpuData){return rowA.cpuDuration/rowA.numEvents-
-rowB.cpuDuration/rowB.numEvents;}
-return rowA.duration/rowA.numEvents-
-rowB.duration/rowB.numEvents;}});}
-columns.push({title:'Occurrences',value(row){return row.numEvents;},width:'<upated further down>',cmp(rowA,rowB){return rowA.numEvents-rowB.numEvents;}});let alertsColumnIndex;if(hasAlerts){columns.push({title:'Num Alerts',value(row){return row.numAlerts;},width:'<upated further down>',cmp(rowA,rowB){return rowA.numAlerts-rowB.numAlerts;}});alertsColumnIndex=columns.length-1;}
-let colWidthPercentage;if(columns.length===1){colWidthPercentage='100%';}else{colWidthPercentage=(100/(columns.length-1)).toFixed(3)+'%';}
-for(let i=1;i<columns.length;i++){columns[i].width=colWidthPercentage;}
-this.$.table.tableColumns=columns;if(hasAlerts){this.$.table.sortColumnIndex=alertsColumnIndex;this.$.table.sortDescending=true;}},configure(config){if(config.eventsByTitle===undefined){throw new Error('Required: eventsByTitle');}
-if(config.showTotals!==undefined){this.showTotals_=config.showTotals;}else{this.showTotals_=true;}
-if(config.eventsHaveDuration!==undefined){this.eventsHaveDuration_=config.eventsHaveDuration;}else{this.eventsHaveDuration_=true;}
-if(config.eventsHaveSubRows!==undefined){this.eventsHaveSubRows_=config.eventsHaveSubRows;}else{this.eventsHaveSubRows_=true;}
-this.eventsByTitle_=config.eventsByTitle;this.updateContents_();},get showTotals(){return this.showTotals_;},set showTotals(showTotals){this.showTotals_=showTotals;this.updateContents_();},get eventsHaveDuration(){return this.eventsHaveDuration_;},set eventsHaveDuration(eventsHaveDuration){this.eventsHaveDuration_=eventsHaveDuration;this.updateContents_();},get eventsHaveSubRows(){return this.eventsHaveSubRows_;},set eventsHaveSubRows(eventsHaveSubRows){this.eventsHaveSubRows_=eventsHaveSubRows;this.updateContents_();},get eventsByTitle(){return this.eventsByTitle_;},set eventsByTitle(eventsByTitle){this.eventsByTitle_=eventsByTitle;this.updateContents_();},get selectionBounds(){return this.selectionBounds_;},set selectionBounds(selectionBounds){this.selectionBounds_=selectionBounds;this.updateContents_();},updateContents_(){let eventsByTitle;if(this.eventsByTitle_!==undefined){eventsByTitle=this.eventsByTitle_;}else{eventsByTitle=[];}
-const allEvents=new tr.model.EventSet();const rows=[];for(const[title,eventsOfSingleTitle]of Object.entries(eventsByTitle)){for(const event of eventsOfSingleTitle)allEvents.push(event);const row=new tr.ui.analysis.MultiEventSummary(title,eventsOfSingleTitle);rows.push(row);}
-this.updateTableColumns_(rows);this.$.table.tableRows=rows;const maxValues={duration:undefined,selfTime:undefined,cpuSelfTime:undefined,cpuDuration:undefined};if(this.eventsHaveDuration){for(const column in maxValues){maxValues[column]=tr.b.math.Statistics.max(rows,function(event){return event[column];});}}
-const footerRows=[];if(this.showTotals_){const multiEventSummary=new tr.ui.analysis.MultiEventSummary('Totals',allEvents);footerRows.push(multiEventSummary);}
-this.updateTableColumns_(rows,maxValues);this.$.table.tableRows=rows;this.$.table.footerRows=footerRows;this.$.table.rebuild();}});'use strict';Polymer({is:'tr-ui-a-selection-summary-table',created(){this.selection_=new tr.b.math.Range();},ready(){this.$.table.showHeader=false;this.$.table.tableColumns=[{title:'Name',value(row){return row.title;},width:'350px'},{title:'Value',width:'100%',value(row){return row.value;}}];},get selection(){return this.selection_;},set selection(selection){this.selection_=selection;this.updateContents_();},updateContents_(){const selection=this.selection_;const rows=[];let hasRange;if(this.selection_&&(!selection.bounds.isEmpty)){hasRange=true;}else{hasRange=false;}
-rows.push({title:'Selection start',value:hasRange?tr.v.ui.createScalarSpan(selection.bounds.min,{unit:tr.b.Unit.byName.timeStampInMs,ownerDocument:this.ownerDocument}):'<empty>'});rows.push({title:'Selection extent',value:hasRange?tr.v.ui.createScalarSpan(selection.bounds.range,{unit:tr.b.Unit.byName.timeDurationInMs,ownerDocument:this.ownerDocument}):'<empty>'});this.$.table.tableRows=rows;this.$.table.rebuild();}});'use strict';Polymer({is:'tr-ui-b-radio-picker',created(){this.needsInit_=true;this.settingsKey_=undefined;this.isReady_=false;this.radioButtons_=undefined;this.selectedKey_=undefined;},ready(){this.isReady_=true;this.maybeInit_();this.maybeRenderRadioButtons_();},get vertical(){return this.getAttribute('vertical');},set vertical(vertical){if(vertical){this.setAttribute('vertical',true);}else{this.removeAttribute('vertical');}},get settingsKey(){return this.settingsKey_;},set settingsKey(settingsKey){if(!this.needsInit_){throw new Error('Already initialized.');}
-this.settingsKey_=settingsKey;this.maybeInit_();},maybeInit_(){if(!this.needsInit_)return;if(this.settingsKey_===undefined)return;this.needsInit_=false;this.select(tr.b.Settings.get(this.settingsKey_));},set items(items){this.radioButtons_={};items.forEach(function(e){if(e.key in this.radioButtons_){throw new Error(e.key+' already exists');}
-const radioButton=document.createElement('div');const input=document.createElement('input');const label=document.createElement('label');input.type='radio';input.id=e.label;input.addEventListener('click',function(){this.select(e.key);}.bind(this));Polymer.dom(label).innerHTML=e.label;label.htmlFor=e.label;label.style.display='inline';Polymer.dom(radioButton).appendChild(input);Polymer.dom(radioButton).appendChild(label);this.radioButtons_[e.key]=input;}.bind(this));this.maybeInit_();this.maybeRenderRadioButtons_();},maybeRenderRadioButtons_(){if(!this.isReady_)return;if(this.radioButtons_===undefined)return;for(const key in this.radioButtons_){Polymer.dom(this.$.container).appendChild(this.radioButtons_[key].parentElement);}
-if(this.selectedKey_!==undefined){this.select(this.selectedKey_);}},select(key){if(key===undefined||key===this.selectedKey_){return;}
-if(this.radioButtons_===undefined){this.selectedKey_=key;return;}
-if(!(key in this.radioButtons_)){throw new Error(key+' does not exists');}
-if(this.selectedKey_!==undefined){this.radioButtons_[this.selectedKey_].checked=false;}
-this.selectedKey_=key;tr.b.Settings.set(this.settingsKey_,this.selectedKey_);if(this.selectedKey_!==undefined){this.radioButtons_[this.selectedKey_].checked=true;}
-this.dispatchEvent(new tr.b.Event('change',false));},get selectedKey(){return this.selectedKey_;},});'use strict';tr.exportTo('tr.ui.b',function(){const MIN_GUIDELINE_HEIGHT_PX=3;const CHECKBOX_WIDTH_PX=18;const NameColumnChart=tr.ui.b.define('name-column-chart',tr.ui.b.ColumnChart);NameColumnChart.prototype={__proto__:tr.ui.b.ColumnChart.prototype,get xAxisHeight(){return 5+(this.textHeightPx_*this.data_.length);},updateMargins_(){super.updateMargins_();let xAxisTickOverhangPx=0;for(let i=0;i<this.data_.length;++i){const datum=this.data_[i];xAxisTickOverhangPx=Math.max(xAxisTickOverhangPx,this.xScale_(i)+tr.ui.b.getSVGTextSize(this,datum.x).width-
-this.graphWidth);}
-this.margin.right=Math.max(this.margin.right,xAxisTickOverhangPx);},getXForDatum_(datum,index){return index;},get xAxisTickOffset(){return 0.5;},updateXAxis_(xAxis){xAxis.selectAll('*').remove();if(this.hideXAxis)return;const nameTexts=xAxis.selectAll('text').data(this.data_);nameTexts.enter().append('text').attr('transform',(d,index)=>'translate(0, '+
-this.textHeightPx_*(this.data_.length-index)+')').attr('x',(d,index)=>this.xScale_(index)).attr('y',d=>this.graphHeight).text(d=>d.x);nameTexts.exit().remove();const guideLines=xAxis.selectAll('line.guide').data(this.data_);guideLines.enter().append('line').attr('x1',(d,index)=>this.xScale_(index+this.xAxisTickOffset)).attr('x2',(d,index)=>this.xScale_(index+this.xAxisTickOffset)).attr('y1',()=>this.graphHeight).attr('y2',(d,index)=>this.graphHeight+Math.max(MIN_GUIDELINE_HEIGHT_PX,(this.textHeightPx_*(this.data_.length-index-1))));}};return{NameColumnChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const LineChart=tr.ui.b.LineChart;const NameLineChart=tr.ui.b.define('name-line-chart',LineChart);NameLineChart.prototype={__proto__:LineChart.prototype,getXForDatum_(datum,index){return index;},get xAxisHeight(){return 5+(this.textHeightPx_*this.data_.length);},get xAxisTickOffset(){return 0;},updateMargins_(){tr.ui.b.NameColumnChart.prototype.updateMargins_.call(this);},updateXAxis_(xAxis){xAxis.selectAll('*').remove();if(this.hideXAxis)return;tr.ui.b.NameColumnChart.prototype.updateXAxis_.call(this,xAxis);const baseline=xAxis.selectAll('path').data([this]);baseline.enter().append('line').attr('stroke','black').attr('x1',this.xScale_(0)).attr('x2',this.xScale_(this.data_.length-1)).attr('y1',this.graphHeight).attr('y2',this.graphHeight);baseline.exit().remove();}};return{NameLineChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const BoxChart=tr.ui.b.define('box-chart',tr.ui.b.NameLineChart);BoxChart.prototype={__proto__:tr.ui.b.NameLineChart.prototype,get hideLegend(){return true;},updateDataRange_(){if(this.overrideDataRange_!==undefined){return;}
-this.autoDataRange_.reset();for(const datum of this.data_){this.autoDataRange_.addValue(datum.percentile_0);this.autoDataRange_.addValue(datum.percentile_100);}},updateScales_(){super.updateScales_();this.xScale_.domain([0,this.data_.length]);},get xAxisTickOffset(){return 0.5;},updateDataRange_(){if(this.overrideDataRange_!==undefined)return;this.autoDataRange_.reset();for(const datum of this.data_){this.autoDataRange_.addValue(datum.percentile_0);this.autoDataRange_.addValue(datum.percentile_100);}},updateXAxis_(xAxis){xAxis.selectAll('*').remove();if(this.hideXAxis)return;tr.ui.b.NameColumnChart.prototype.updateXAxis_.call(this,xAxis);const baseline=xAxis.selectAll('path').data([this]);baseline.enter().append('line').attr('stroke','black').attr('x1',this.xScale_(0)).attr('x2',this.xScale_(this.data_.length)).attr('y1',this.graphHeight).attr('y2',this.graphHeight);baseline.exit().remove();},updateDataContents_(dataSel){dataSel.selectAll('*').remove();const boxesSel=dataSel.selectAll('path');for(let index=0;index<this.data_.length;++index){const datum=this.data_[index];const color=datum.color||'black';let sel=boxesSel.data([datum]);sel.enter().append('rect').attr('fill',color).attr('x',this.xScale_(index+0.2)).attr('width',this.xScale_(index+0.8)-this.xScale_(index+0.2)).attr('y',this.yScale_(datum.percentile_75)).attr('height',this.yScale_(datum.percentile_25)-
-this.yScale_(datum.percentile_75));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index)).attr('x2',this.xScale_(index+1)).attr('y1',this.yScale_(datum.percentile_50)).attr('y2',this.yScale_(datum.percentile_50));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.4)).attr('x2',this.xScale_(index+0.6)).attr('y1',this.yScale_(datum.percentile_0)).attr('y2',this.yScale_(datum.percentile_0));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.4)).attr('x2',this.xScale_(index+0.6)).attr('y1',this.yScale_(datum.percentile_100)).attr('y2',this.yScale_(datum.percentile_100));sel.exit().remove();sel=boxesSel.data([datum]);sel.enter().append('line').attr('stroke',color).attr('x1',this.xScale_(index+0.5)).attr('x2',this.xScale_(index+0.5)).attr('y1',this.yScale_(datum.percentile_100)).attr('y2',this.yScale_(datum.percentile_0));sel.exit().remove();}}};return{BoxChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const BarChart=tr.ui.b.define('bar-chart',tr.ui.b.ColumnChart);BarChart.prototype={__proto__:tr.ui.b.ColumnChart.prototype,decorate(){super.decorate();this.verticalScale_=undefined;this.horizontalScale_=undefined;},updateScales_(){super.updateScales_();this.yScale_.range([this.graphWidth,0]);this.xScale_.range([0,this.graphHeight]);this.verticalScale_=this.isYLogScale_?d3.scale.log(10):d3.scale.linear();this.verticalScale_.domain(this.xScale_.domain());this.verticalScale_.range([this.graphHeight,0]);this.horizontalScale_=d3.scale.linear();this.horizontalScale_.domain(this.yScale_.domain());this.horizontalScale_.range([0,this.graphWidth]);},get defaultGraphHeight(){return Math.max(20,10*this.data_.length);},get defaultGraphWidth(){return 100;},get barHeight(){return this.graphHeight/this.data.length;},drawBrush_(brushRectsSel){brushRectsSel.attr('x',0).attr('width',this.graphWidth).attr('y',d=>this.verticalScale_(d.max)).attr('height',d=>this.verticalScale_(d.min)-this.verticalScale_(d.max)).attr('fill','rgb(213, 236, 229)');},getDataPointAtChartPoint_(chartPoint){const flippedPoint={x:this.graphHeight-chartPoint.y,y:this.graphWidth-chartPoint.x};return super.getDataPointAtChartPoint_(flippedPoint);},drawXAxis_(xAxis){xAxis.attr('transform','translate(0,'+this.graphHeight+')').call(d3.svg.axis().scale(this.horizontalScale_).orient('bottom'));},get yAxisWidth(){return this.computeScaleTickWidth_(this.verticalScale_);},drawYAxis_(yAxis){const axisModifier=d3.svg.axis().scale(this.verticalScale_).orient('left');yAxis.call(axisModifier);},drawHoverValueBox_(rect){const rectHoverEvent=new tr.b.Event('rect-mouseenter');rectHoverEvent.rect=rect;this.dispatchEvent(rectHoverEvent);if(!this.enableHoverBox)return;const seriesKeys=[...this.seriesByKey_.keys()];const chartAreaSel=d3.select(this.chartAreaElement);chartAreaSel.selectAll('.hover').remove();let keyWidthPx=0;let keyHeightPx=0;let xWidthPx=0;let xHeightPx=0;if(seriesKeys.length>1){keyWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.key).width;keyHeightPx=this.textHeightPx_;}
-if(this.data.length>1){xWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,''+rect.datum.x).width;xHeightPx=this.textHeightPx_;}
-const valueWidthPx=tr.ui.b.getSVGTextSize(this.chartAreaElement,rect.value).width;const valueHeightPx=this.textHeightPx_;const hoverWidthPx=Math.min(Math.max(keyWidthPx,xWidthPx,valueWidthPx)+5,Math.max(50,rect.widthPx));const hoverTopPx=rect.topPx+(rect.heightPx/2);const hoverLeftPx=rect.leftPx+rect.widthPx-hoverWidthPx;chartAreaSel.append('rect').attr('class','hover').attr('fill','white').attr('x',hoverLeftPx).attr('y',hoverTopPx).attr('width',hoverWidthPx).attr('height',keyHeightPx+xHeightPx+valueHeightPx);if(seriesKeys.length>1){chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx-3).text(rect.key);}
-if(this.data.length>1){chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+keyHeightPx+valueHeightPx-3).text(''+rect.datum.x);}
-chartAreaSel.append('text').attr('class','hover').attr('fill',rect.color).attr('x',hoverLeftPx+2).attr('y',hoverTopPx+xHeightPx+keyHeightPx+valueHeightPx-3).text(rect.value);},flipRect_(rect){return{datum:rect.datum,index:rect.index,key:rect.key,value:rect.value,color:rect.color,topPx:this.graphHeight-rect.leftPx-rect.widthPx,leftPx:this.graphWidth-rect.topPx-rect.heightPx,widthPx:rect.heightPx,heightPx:rect.widthPx,underflow:rect.underflow,overflow:rect.overflow,};},drawRect_(rect,sel){super.drawRect_(this.flipRect_(rect),sel);},drawUnderflow_(rect,rectsSel){let sel=rectsSel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',0).attr('y',this.graphHeight-rect.leftPx+
-3+(rect.widthPx/2));sel.exit().remove();sel=rectsSel.data([rect]);sel.enter().append('rect').attr('fill','rgba(0, 0, 0, 0)').attr('x',0).attr('y',this.graphHeight-rect.leftPx-rect.widthPx).attr('width',10).attr('height',rect.widthPx).on('mouseenter',()=>this.drawHoverValueBox_(this.flipRect_(rect))).on('mouseleave',()=>this.clearHoverValueBox_(rect));sel.exit().remove();},drawOverflow_(rect,sel){sel=sel.data([rect]);sel.enter().append('text').text('*').attr('fill',rect.color).attr('x',this.graphWidth).attr('y',this.graphHeight-rect.leftPx+
-3+(rect.widthPx/2));sel.exit().remove();}};return{BarChart,};});'use strict';tr.exportTo('tr.ui.b',function(){const NameBarChart=tr.ui.b.define('name-bar-chart',tr.ui.b.BarChart);const Y_AXIS_PADDING=2;NameBarChart.prototype={__proto__:tr.ui.b.BarChart.prototype,getDataPointAtChartPoint_(chartPoint){return{x:tr.ui.b.BarChart.prototype.getDataPointAtChartPoint_.call(this,chartPoint).x,y:parseInt(Math.floor((this.graphHeight-chartPoint.y)/this.barHeight))};},getXForDatum_(datum,index){return index;},get yAxisWidth(){if(this.data.length===0)return 0;return Y_AXIS_PADDING+tr.b.math.Statistics.max(this.data_,d=>tr.ui.b.getSVGTextSize(this,d.x).width);},get defaultGraphHeight(){return(3+this.textHeightPx_)*this.data.length;},updateYAxis_(yAxis){if(tr.ui.b.getSVGTextSize(this,'test').width===0){tr.b.requestAnimationFrame(()=>this.updateYAxis_(yAxis));return;}
-yAxis.selectAll('*').remove();const nameTexts=yAxis.selectAll('text').data(this.data_);nameTexts.enter().append('text').attr('x',d=>-(tr.ui.b.getSVGTextSize(this,d.x).width+Y_AXIS_PADDING)).attr('y',(d,index)=>this.verticalScale_(index)).text(d=>d.x);nameTexts.exit().remove();let previousTop=undefined;for(const text of nameTexts[0]){const bbox=text.getBBox();if((previousTop===undefined)||(previousTop>(bbox.y+bbox.height))){previousTop=bbox.y;}else{text.style.opacity=0;}}}};return{NameBarChart,};});'use strict';tr.exportTo('tr.v.ui',function(){const DIAGNOSTIC_SPAN_BEHAVIOR={created(){this.diagnostic_=undefined;this.name_=undefined;this.histogram_=undefined;},attached(){if(this.diagnostic_)this.updateContents_();},get diagnostic(){return this.diagnostic_;},build(diagnostic,name,histogram){this.diagnostic_=diagnostic;this.name_=name;this.histogram_=histogram;if(this.isAttached)this.updateContents_();},updateContents_(){throw new Error('dom-modules must override updateContents_()');}};return{DIAGNOSTIC_SPAN_BEHAVIOR,};});'use strict';tr.exportTo('tr.v.ui',function(){const DEFAULT_COLOR_SCHEME=new tr.b.SinebowColorGenerator();function getHistogramName(histogram,diagnosticName,key){if(histogram===undefined)return undefined;const nameMap=histogram.diagnostics.get(diagnosticName);if(nameMap===undefined)return undefined;return nameMap.get(key);}
-class BreakdownTableSummaryRow{constructor(displayElement,histogramNames){this.displayElement_=displayElement;this.histogramNames_=histogramNames;this.keySpan_=undefined;}
-get numberValue(){return undefined;}
-get keySpan(){if(this.keySpan_===undefined){if(this.histogramNames_.length){this.keySpan_=document.createElement('tr-ui-a-analysis-link');this.keySpan_.setSelectionAndContent(this.histogramNames_,'Select All');}else{this.keySpan_='Sum';}}
-return this.keySpan_;}
-get name(){return'Sum';}
-get displayElement(){return this.displayElement_;}
-get stringPercent(){return'100%';}}
-class BreakdownTableRow{constructor(name,value,histogramName,unit,color){this.name_=name;this.value_=value;this.histogramName_=histogramName;this.unit_=unit;if(typeof value!=='number'){throw new Error('unsupported value '+value);}
-this.tableSum_=undefined;this.keySpan_=undefined;this.color_=color;const hsl=this.color.toHSL();hsl.l*=0.85;this.highlightedColor_=tr.b.Color.fromHSL(hsl);if(this.unit_){this.displayElement_=tr.v.ui.createScalarSpan(this.numberValue,{unit:this.unit_,});}else{this.displayElement_=tr.ui.b.createSpan({textContent:this.stringValue,});}}
-get name(){return this.name_;}
-get color(){return this.color_;}
-get highlightedColor(){return this.highlightedColor_;}
-get keySpan(){if(this.keySpan_===undefined){if(this.histogramName_){this.keySpan_=document.createElement('tr-ui-a-analysis-link');this.keySpan_.setSelectionAndContent([this.histogramName_],this.name);this.keySpan_.color=this.color;this.keySpan_.title=this.histogramName_;}else{this.keySpan_=document.createElement('span');this.keySpan_.innerText=this.name;this.keySpan_.style.color=this.color;}}
-return this.keySpan_;}
-get numberValue(){if(!isNaN(this.value_)&&(this.value_!==Infinity)&&(this.value_!==-Infinity)&&(this.value_>0))return this.value_;return undefined;}
-get stringValue(){if((this.unit_!==undefined)&&!isNaN(this.value_)&&(this.value_!==Infinity)&&(this.value_!==-Infinity)){return this.unit_.format(this.value_);}
-return this.value_.toString();}
-set tableSum(s){this.tableSum_=s;}
-get stringPercent(){if(this.tableSum_===undefined)return'';const num=this.numberValue;if(num===undefined)return'';return Math.floor(num*100.0/this.tableSum_)+'%';}
-get displayElement(){return this.displayElement_;}
-compare(other){if(this.numberValue===undefined){if(other.numberValue===undefined){return this.name.localeCompare(other.name);}
-return 1;}
-if(other.numberValue===undefined){return-1;}
-if(this.numberValue===other.numberValue){return this.name.localeCompare(other.name);}
-return other.numberValue-this.numberValue;}}
-Polymer({is:'tr-v-ui-breakdown-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],created(){this.chart_=new tr.ui.b.ColumnChart();this.chart_.graphHeight=130;this.chart_.isStacked=true;this.chart_.hideXAxis=true;this.chart_.hideLegend=true;this.chart_.enableHoverBox=false;this.chart_.addEventListener('rect-mouseenter',event=>this.onRectMouseEnter_(event));this.chart_.addEventListener('rect-mouseleave',event=>this.onRectMouseLeave_(event));},onRectMouseEnter_(event){for(const row of this.$.table.tableRows){if(row.name===event.rect.key){row.displayElement.style.background=event.rect.color;row.keySpan.scrollIntoViewIfNeeded();}else{row.displayElement.style.background='';}}},onRectMouseLeave_(event){for(const row of this.$.table.tableRows){row.displayElement.style.background='';}},ready(){Polymer.dom(this.$.container).appendChild(this.chart_);this.$.table.zebra=true;this.$.table.showHeader=false;this.$.table.tableColumns=[{value:row=>row.keySpan,},{value:row=>row.displayElement,align:tr.ui.b.TableFormat.ColumnAlignment.RIGHT,},{value:row=>row.stringPercent,align:tr.ui.b.TableFormat.ColumnAlignment.RIGHT,},];},updateContents_(){this.$.container.style.display='none';this.$.table.style.display='none';this.$.empty.style.display='block';if(!this.diagnostic_){this.chart_.data=[];return;}
-if(this.histogram_)this.chart_.unit=this.histogram_.unit;let colorScheme=undefined;if(this.diagnostic.colorScheme===tr.v.d.COLOR_SCHEME_CHROME_USER_FRIENDLY_CATEGORY_DRIVER){colorScheme=(name)=>{let cat=name.split(' ');cat=cat[cat.length-1];return tr.e.chrome.ChromeUserFriendlyCategoryDriver.getColor(cat);};}else if(this.diagnostic.colorScheme!==undefined){colorScheme=(name)=>tr.b.FixedColorSchemeRegistry.lookUp(this.diagnostic.colorScheme).getColor(name);}else{colorScheme=(name)=>DEFAULT_COLOR_SCHEME.colorForKey(name);}
-const tableRows=[];let tableSum=0;const histogramNames=[];for(const[key,value]of this.diagnostic){let histogramName;let row;if(value instanceof tr.v.Histogram){histogramName=value.name;row=new BreakdownTableRow(key,value.sum,histogramName,value.unit,colorScheme(key));}else{histogramName=getHistogramName(this.histogram_,this.name_,key);row=new BreakdownTableRow(key,value,histogramName,this.chart_.unit,colorScheme(key));}
-tableRows.push(row);if(row.numberValue!==undefined)tableSum+=row.numberValue;if(histogramName){histogramNames.push(histogramName);}}
-tableRows.sort((x,y)=>x.compare(y));if(tableSum>0){let summaryDisplayElement=tableSum;if(this.chart_.unit!==undefined){summaryDisplayElement=this.chart_.unit.format(tableSum);}
-summaryDisplayElement=tr.ui.b.createSpan({textContent:summaryDisplayElement,});tableRows.unshift(new BreakdownTableSummaryRow(summaryDisplayElement,histogramNames));}
-const chartData={x:0};for(const row of tableRows){if(row.numberValue===undefined)continue;row.tableSum=tableSum;chartData[row.name]=row.numberValue;const dataSeries=this.chart_.getDataSeries(row.name);dataSeries.color=row.color;dataSeries.highlightedColor=row.highlightedColor;}
-if(tableRows.length>0){this.$.table.style.display='block';this.$.empty.style.display='none';this.$.table.tableRows=tableRows;this.$.table.rebuild();}
-if(Object.keys(chartData).length>1){this.$.container.style.display='block';this.$.empty.style.display='none';this.chart_.data=[chartData];}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-collected-related-event-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){Polymer.dom(this).textContent='';for(const[canonicalUrl,events]of this.diagnostic){const link=document.createElement('a');if(events.length===1){const event=tr.b.getOnlyElement(events);link.textContent=event.title+' '+
-tr.b.Unit.byName.timeDurationInMs.format(event.duration);}else{link.textContent=events.length+' events';}
-link.href=canonicalUrl;Polymer.dom(this).appendChild(link);Polymer.dom(this).appendChild(document.createElement('br'));}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-date-range-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){if(this.diagnostic===undefined){Polymer.dom(this).textContent='';return;}
-Polymer.dom(this).textContent=this.diagnostic.toString();}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-generic-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){this.$.generic.style.display='none';this.$.links.textContent='';if(this.diagnostic===undefined)return;const values=Array.from(this.diagnostic);let areAllStrings=true;let areAllNumbers=true;for(const value of values){if(typeof value!=='number'){areAllNumbers=false;if(typeof value!=='string'){areAllStrings=false;break;}}}
-if(!areAllStrings){this.$.generic.style.display='';this.$.generic.object=values;return;}
-if(areAllNumbers){values.sort((x,y)=>x-y);}else{values.sort();}
-for(const value of values){const link={textContent:''+value};if(tr.b.isUrl(value))link.href=value;if(this.name_===tr.v.d.RESERVED_NAMES.TRACE_URLS){link.textContent=value.substr(1+value.lastIndexOf('/'));}
-const linkEl=tr.ui.b.createLink(link);if(link.href){linkEl.target='_blank';linkEl.addEventListener('click',e=>e.stopPropagation());}
-this.$.links.appendChild(linkEl);}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-related-event-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){Polymer.dom(this).textContent='';const events=new tr.model.EventSet([...this.diagnostic]);const link=document.createElement('tr-ui-a-analysis-link');let label=events.length+' events';if(events.length===1){const event=tr.b.getOnlyElement(events);label=event.title+' ';label+=tr.b.Unit.byName.timeDurationInMs.format(event.duration);}
-link.setSelectionAndContent(events,label);Polymer.dom(this).appendChild(link);}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-related-histogram-map-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],ready(){this.$.table.showHeader=false;this.$.table.tableColumns=[{value:row=>row[0]},{value:row=>row[1]},];},updateContents_(){Polymer.dom(this).textContent='';const rows=[];const histogramNames=new Set();for(const[name,hist]of this.diagnostic){histogramNames.add(hist.name);}
-if(histogramNames.size>1){const link=document.createElement('tr-ui-a-analysis-link');link.setSelectionAndContent(Array.from(histogramNames),'Select All');rows.push([link,'']);}
-for(const[name,hist]of this.diagnostic){const link=document.createElement('tr-ui-a-analysis-link');link.setSelectionAndContent([hist.name],name);const scalarSpan=tr.v.ui.createScalarSpan(hist);rows.push([link,scalarSpan]);}
-this.$.table.tableRows=rows;this.$.table.rebuild();}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-scalar-diagnostic-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){this.$.scalar.setValueAndUnit(this.diagnostic.value.value,this.diagnostic.value.unit);}});return{};});'use strict';Polymer({is:'tr-v-ui-tag-map-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){if(this.diagnostic===undefined){this.$.generic.object=undefined;return;}
-const obj={};for(const[tag,stories]of this.diagnostic.tagsToStoryNames){obj[tag]=Array.from(stories);}
-this.$.generic.object=obj;},onShow_(){this.$.show.style.display='none';this.$.hide.style.display='block';this.$.generic.style.display='block';},onHide_(){this.$.show.style.display='block';this.$.hide.style.display='none';this.$.generic.style.display='none';},});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-unmergeable-diagnostic-set-span',behaviors:[tr.v.ui.DIAGNOSTIC_SPAN_BEHAVIOR],updateContents_(){Polymer.dom(this).textContent='';for(const diagnostic of this.diagnostic){const div=document.createElement('div');div.appendChild(tr.v.ui.createDiagnosticSpan(diagnostic,this.name_,this.histogram_));Polymer.dom(this).appendChild(div);}}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){function findElementNameForDiagnostic(diagnostic){let typeInfo=undefined;let curProto=diagnostic.constructor.prototype;while(curProto){typeInfo=tr.v.d.Diagnostic.findTypeInfo(curProto.constructor);if(typeInfo&&typeInfo.metadata.elementName)break;typeInfo=undefined;curProto=curProto.__proto__;}
-if(typeInfo===undefined){throw new Error(diagnostic.constructor.name+' or a base class must have a registered elementName');}
-const tagName=typeInfo.metadata.elementName;if(tr.ui.b.isUnknownElementName(tagName)){throw new Error('Element not registered: '+tagName);}
-return tagName;}
-function createDiagnosticSpan(diagnostic,name,histogram){const tagName=findElementNameForDiagnostic(diagnostic);const span=document.createElement(tagName);if(span.build===undefined)throw new Error(tagName);span.build(diagnostic,name,histogram);return span;}
-return{createDiagnosticSpan,};});'use strict';tr.exportTo('tr.v.ui',function(){function makeColumn(title,histogram){return{title,value(map){const diagnostic=map.get(title);if(!diagnostic)return'';return tr.v.ui.createDiagnosticSpan(diagnostic,title,histogram);}};}
-Polymer({is:'tr-v-ui-diagnostic-map-table',created(){this.diagnosticMaps_=undefined;this.histogram_=undefined;this.isMetadata_=false;},set histogram(h){this.histogram_=h;},set isMetadata(m){this.isMetadata_=m;this.$.table.showHeader=!this.isMetadata_;},set diagnosticMaps(maps){this.diagnosticMaps_=maps;this.updateContents_();},get diagnosticMaps(){return this.diagnosticMaps_;},updateContents_(){if(this.isMetadata_&&this.diagnosticMaps_.length!==1){throw new Error('Metadata diagnostic-map-tables require exactly 1 DiagnosticMap');}
-if(this.diagnosticMaps_===undefined||this.diagnosticMaps_.length===0){this.$.table.tableRows=[];this.$.table.tableColumns=[];return;}
-let names=new Set();for(const map of this.diagnosticMaps_){for(const[name,diagnostic]of map){if(diagnostic instanceof tr.v.d.UnmergeableDiagnosticSet)continue;if(diagnostic instanceof tr.v.d.CollectedRelatedEventSet)continue;if(diagnostic instanceof tr.v.d.GroupingPath)continue;names.add(name);}}
-names=Array.from(names).sort();const histogram=this.histogram_;if(this.isMetadata_){const diagnosticMap=this.diagnosticMaps_[0];this.$.table.tableColumns=[{value(name){return name.name;}},{value(name){const diagnostic=diagnosticMap.get(name.name);if(!diagnostic)return'';return tr.v.ui.createDiagnosticSpan(diagnostic,name.name,histogram);}},];this.$.table.tableRows=names.map(name=>{return{name};});}else{this.$.table.tableColumns=names.map(name=>makeColumn(name,histogram));this.$.table.tableRows=this.diagnosticMaps_;}
-this.$.table.rebuild();}});return{};});'use strict';tr.exportTo('tr.b',function(){class Serializable{constructor(){Object.defineProperty(this,'properties_',{configurable:false,enumerable:false,value:new Map(),});}
-define(name,initialValue){if(this[name]!==undefined){throw new Error(`"${name}" is already defined.`);}
-if(name[name.length-1]==='_'){throw new Error(`"${name}" cannot end with an underscore.`);}
-this.properties_.set(name,initialValue);Object.defineProperty(this,name,{configurable:false,enumerable:true,get:()=>this.properties_.get(name),set:value=>this.setProperty_(name,value),});}
-setProperty_(name,value){this.properties_.set(name,value);}
-clone(){return Serializable.fromDict(this.asDict());}
-asDict(){function visit(obj){if(obj instanceof Serializable)return obj.asDict();if(obj instanceof Set)return Array.from(obj);if(obj instanceof Array)return obj.map(visit);if(!(obj instanceof Map))return obj;const result={};for(const[name,value]of obj){result[name]=visit(value);}
-return result;}
-const dict={type:this.constructor.name};for(const[name,value]of this.properties_){dict[name.replace(/_$/,'')]=visit(value);}
-return dict;}
-static fromDict(dict){function visit(d){if(d instanceof Array)return d.map(visit);if(!(d instanceof Object))return d;if(typeof d.type==='string')return Serializable.fromDict(d);const result=new Map();for(const[name,value]of Object.entries(d)){result.set(name,visit(value));}
-return result;}
-const typeInfo=Serializable.findTypeInfoWithName(dict.type);const result=new typeInfo.constructor();for(const[name,value]of Object.entries(dict)){result[name]=visit(value);}
-return result;}}
-const options=new tr.b.ExtensionRegistryOptions(tr.b.BASIC_REGISTRY_MODE);options.defaultMetadata={};options.mandatoryBaseClass=Serializable;tr.b.decorateExtensionRegistry(Serializable,options);return{Serializable,};});'use strict';tr.exportTo('tr.b',function(){class ViewState extends tr.b.Serializable{constructor(){super();tr.b.EventTarget.decorate(this);}
-setProperty_(name,value){this.update(new Map([[name,value]]));}
-async updateFromViewState(other){await this.update(other.properties_);}
-async update(delta){if(!(delta instanceof Map))delta=new Map(Object.entries(delta));const actualDelta={};for(const[name,current]of delta){const previous=this[name];if(previous===current)continue;actualDelta[name]={previous,current};tr.b.Serializable.prototype.setProperty_.call(this,name,current);}
-if(Object.keys(actualDelta).length===0)return;await tr.b.dispatchSimpleEventAsync(this,this.updateEventName_,{delta:actualDelta});}
-get updateEventName_(){return this.constructor.name+'.update';}
-addUpdateListener(listener){this.addEventListener(this.updateEventName_,listener);}
-removeUpdateListener(listener){this.removeEventListener(this.updateEventName_,listener);}}
-return{ViewState,};});'use strict';tr.exportTo('tr.v.ui',function(){class HistogramSetViewState extends tr.b.ViewState{constructor(){super();this.define('searchQuery','');this.define('referenceDisplayLabel','');this.define('displayStatisticName','');this.define('showAll',false);this.define('groupings',[]);this.define('sortColumnIndex',0);this.define('sortDescending',false);this.define('constrainNameColumn',true);this.define('tableRowStates',new Map());this.define('alpha',0.01);}}
-tr.b.ViewState.register(HistogramSetViewState);class HistogramSetTableRowState extends tr.b.ViewState{constructor(){super();this.define('isExpanded',false);this.define('isOverviewed',false);this.define('cells',new Map());this.define('subRows',new Map());this.define('diagnosticsTab','');}
-asCompactDict(){const result={};if(this.isExpanded)result.e='1';if(this.isOverviewed)result.o='1';if(this.diagnosticsTab)result.d=this.diagnosticsTab;const cells={};for(const[name,cell]of this.cells){const cellDict=cell.asCompactDict();if(cellDict===undefined)continue;cells[name]=cellDict;}
-if(Object.keys(cells).length>0)result.c=cells;const subRows={};for(const[name,row]of this.subRows){const rowDict=row.asCompactDict();if(rowDict===undefined)continue;subRows[name]=rowDict;}
-if(Object.keys(subRows).length>0)result.r=subRows;if(Object.keys(result).length===0)return undefined;return result;}
-async updateFromCompactDict(dict){await this.update({isExpanded:dict.e==='1',isOverviewed:dict.o==='1',diagnosticsTab:dict.d||'',});for(const[name,cellDict]of Object.entries(dict.c||{})){const cell=this.cells.get(name);if(cell===undefined)continue;await cell.updateFromCompactDict(cellDict);}
-for(const[name,subRowDict]of Object.entries(dict.r||{})){const subRow=this.subRows.get(name);if(subRow===undefined)continue;await subRow.updateFromCompactDict(subRowDict);}}*walk(){yield this;for(const row of this.subRows.values())yield*row.walk();}
-static*walkAll(rootRows){for(const rootRow of rootRows)yield*rootRow.walk();}}
-tr.b.ViewState.register(HistogramSetTableRowState);class HistogramSetTableCellState extends tr.b.ViewState{constructor(){super();this.define('isOpen',false);this.define('brushedBinRange',new tr.b.math.Range());this.define('mergeSampleDiagnostics',true);}
-asCompactDict(){const result={};if(this.isOpen)result.o='1';if(!this.mergeSampleDiagnostics)result.m='0';if(!this.brushedBinRange.isEmpty){result.b=this.brushedBinRange.min+'_'+this.brushedBinRange.max;}
-if(Object.keys(result).length===0)return undefined;return result;}
-async updateFromCompactDict(dict){let binRange=this.brushedBinRange;if(dict.b){let[bMin,bMax]=dict.b.split('_');bMin=parseInt(bMin);bMax=parseInt(bMax);if(bMin!==binRange.min||bMax!==binRange.max){binRange=tr.b.math.Range.fromExplicitRange(bMin,bMax);}}
-await this.update({isOpen:dict.o==='1',brushedBinRange:binRange,mergeSampleDiagnostics:dict.m!=='0',});}}
-tr.b.ViewState.register(HistogramSetTableCellState);return{HistogramSetTableCellState,HistogramSetTableRowState,HistogramSetViewState,};});'use strict';Polymer({is:'tr-v-ui-scalar-map-table',created(){this.scalarMap_=new Map();this.significance_=new Map();},ready(){this.$.table.showHeader=false;this.$.table.tableColumns=[{value(row){return row.name;}},{value(row){const span=tr.v.ui.createScalarSpan(row.value);if(row.significance!==undefined){span.significance=row.significance;}else if(row.anyRowsHaveSignificance){span.style.marginRight='18px';}
-span.style.whiteSpace='nowrap';return span;}}];},get scalarMap(){return this.scalarMap_;},set scalarMap(map){this.scalarMap_=map;this.updateContents_();},setSignificanceForKey(key,significance){this.significance_.set(key,significance);this.updateContents_();},updateContents_(){const rows=[];for(const[key,scalar]of this.scalarMap){rows.push({name:key,value:scalar,significance:this.significance_.get(key),anyRowsHaveSignificance:(this.significance_.size>0)});}
-this.$.table.tableRows=rows;this.$.table.rebuild();}});'use strict';tr.exportTo('tr.v.ui',function(){const DEFAULT_BAR_HEIGHT_PX=5;const TRUNCATE_BIN_MARGIN=0.15;const IGNORE_DELTA_STATISTICS_NAMES=[`${tr.v.DELTA}min`,`%${tr.v.DELTA}min`,`${tr.v.DELTA}max`,`%${tr.v.DELTA}max`,`${tr.v.DELTA}sum`,`%${tr.v.DELTA}sum`,`${tr.v.DELTA}count`,`%${tr.v.DELTA}count`,];Polymer({is:'tr-v-ui-histogram-span',created(){this.viewStateListener_=this.onViewStateUpdate_.bind(this);this.viewState=new tr.v.ui.HistogramSetTableCellState();this.rowStateListener_=this.onRowStateUpdate_.bind(this);this.rowState=new tr.v.ui.HistogramSetTableRowState();this.rootStateListener_=this.onRootStateUpdate_.bind(this);this.rootState=new tr.v.ui.HistogramSetViewState();this.histogram_=undefined;this.referenceHistogram_=undefined;this.graphWidth_=undefined;this.graphHeight_=undefined;this.mouseDownBin_=undefined;this.prevBrushedBinRange_=new tr.b.math.Range();this.anySampleDiagnostics_=false;this.canMergeSampleDiagnostics_=true;this.mwuResult_=undefined;},get rowState(){return this.rowState_;},set rowState(rs){if(this.rowState){this.rowState.removeUpdateListener(this.rowStateListener_);}
-this.rowState_=rs;this.rowState.addUpdateListener(this.rowStateListener_);if(this.isAttached)this.updateContents_();},get viewState(){return this.viewState_;},set viewState(vs){if(this.viewState){this.viewState.removeUpdateListener(this.viewStateListener_);}
-this.viewState_=vs;this.viewState.addUpdateListener(this.viewStateListener_);if(this.isAttached)this.updateContents_();},get rootState(){return this.rootState_;},set rootState(vs){if(this.rootState){this.rootState.removeUpdateListener(this.rootStateListener_);}
-this.rootState_=vs;this.rootState.addUpdateListener(this.rootStateListener_);if(this.isAttached)this.updateContents_();},build(histogram,opt_referenceHistogram){this.histogram_=histogram;this.$.metric_diagnostics.histogram=histogram;this.$.sample_diagnostics.histogram=histogram;this.referenceHistogram_=opt_referenceHistogram;if(this.histogram.canCompare(this.referenceHistogram)){this.mwuResult_=tr.b.math.Statistics.mwu(this.histogram.sampleValues,this.referenceHistogram.sampleValues,this.rootState.alpha);}
-this.anySampleDiagnostics_=false;for(const bin of this.histogram.allBins){if(bin.diagnosticMaps.length>0){this.anySampleDiagnostics_=true;break;}}
-if(this.isAttached)this.updateContents_();},onViewStateUpdate_(event){if(event.delta.brushedBinRange){if(this.chart_!==undefined){this.chart_.brushedRange=this.viewState.brushedBinRange;}
-this.updateDiagnostics_();}
-if(event.delta.mergeSampleDiagnostics&&(this.viewState.mergeSampleDiagnostics!==this.$.merge_sample_diagnostics.checked)){this.$.merge_sample_diagnostics.checked=this.canMergeSampleDiagnostics&&this.viewState.mergeSampleDiagnostics;this.updateDiagnostics_();}},updateSignificance_(){if(!this.mwuResult_)return;this.$.stats.setSignificanceForKey(`${tr.v.DELTA}avg`,this.mwuResult_.significance);},onRootStateUpdate_(event){if(event.delta.alpha&&this.mwuResult_){this.mwuResult_.compare(this.rootState.alpha);this.updateSignificance_();}},onRowStateUpdate_(event){if(event.delta.diagnosticsTab){if(this.rowState.diagnosticsTab===this.$.sample_diagnostics_container.tabLabel){this.updateDiagnostics_();}else{for(const tab of this.$.diagnostics.subViews){if(this.rowState.diagnosticsTab===tab.tabLabel){this.$.diagnostics.selectedSubView=tab;break;}}}}},ready(){this.$.metric_diagnostics.tabLabel='histogram diagnostics';this.$.sample_diagnostics_container.tabLabel='sample diagnostics';this.$.metadata_diagnostics.tabLabel='metadata';this.$.metadata_diagnostics.isMetadata=true;this.$.diagnostics.addEventListener('selected-tab-change',this.onSelectedDiagnosticsChanged_.bind(this));this.$.drag_handle.target=this.$.container;this.$.drag_handle.addEventListener('drag-handle-resize',this.onResize_.bind(this));},attached(){if(this.histogram_!==undefined)this.updateContents_();},get canMergeSampleDiagnostics(){return this.canMergeSampleDiagnostics_;},set canMergeSampleDiagnostics(merge){this.canMergeSampleDiagnostics_=merge;if(!merge)this.viewState.mergeSampleDiagnostics=false;this.$.merge_sample_diagnostics_container.style.display=(merge?'':'none');},onResize_(event){event.stopPropagation();let heightPx=parseInt(this.$.container.style.height);if(heightPx<this.defaultGraphHeight){heightPx=this.defaultGraphHeight;this.$.container.style.height=this.defaultGraphHeight+'px';}
-this.chart_.graphHeight=heightPx-(this.chart_.margin.top+
-this.chart_.margin.bottom);this.$.stats_container.style.maxHeight=this.chart_.getBoundingClientRect().height+'px';},get graphWidth(){return this.graphWidth_||this.defaultGraphWidth;},set graphWidth(width){this.graphWidth_=width;},get graphHeight(){return this.graphHeight_||this.defaultGraphHeight;},set graphHeight(height){this.graphHeight_=height;},get barHeight(){return this.chart_.barHeight;},set barHeight(px){this.graphHeight=this.computeChartHeight_(px);},computeChartHeight_(barHeightPx){return(this.chart_.margin.top+
-this.chart_.margin.bottom+
-(barHeightPx*this.histogram.allBins.length));},get defaultGraphHeight(){if(this.histogram&&this.histogram.allBins.length===1){return 150;}
-return this.computeChartHeight_(DEFAULT_BAR_HEIGHT_PX);},get defaultGraphWidth(){if(this.histogram.allBins.length===1){return 100;}
-return 300;},get brushedBins(){const bins=[];if(this.histogram&&!this.viewState.brushedBinRange.isEmpty){for(let i=this.viewState.brushedBinRange.min;i<this.viewState.brushedBinRange.max;++i){bins.push(this.histogram.allBins[i]);}}
-return bins;},async updateBrushedRange_(binIndex){const brushedBinRange=new tr.b.math.Range();brushedBinRange.addValue(tr.b.math.clamp(this.mouseDownBinIndex_,0,this.histogram.allBins.length-1));brushedBinRange.addValue(tr.b.math.clamp(binIndex,0,this.histogram.allBins.length-1));brushedBinRange.max+=1;await this.viewState.update({brushedBinRange});},onMouseDown_(chartEvent){chartEvent.stopPropagation();if(!this.histogram)return;this.prevBrushedBinRange_=this.viewState.brushedBinRange;this.mouseDownBinIndex_=chartEvent.y;this.updateBrushedRange_(chartEvent.y);},onMouseMove_(chartEvent){chartEvent.stopPropagation();if(!this.histogram)return;this.updateBrushedRange_(chartEvent.y);},onMouseUp_(chartEvent){chartEvent.stopPropagation();if(!this.histogram)return;this.updateBrushedRange_(chartEvent.y);if(this.prevBrushedBinRange_.range===1&&this.viewState.brushedBinRange.range===1&&(this.prevBrushedBinRange_.min===this.viewState.brushedBinRange.min)){tr.b.Timing.instant('histogram-span','clearBrushedBins');this.viewState.update({brushedBinRange:new tr.b.math.Range()});}else{tr.b.Timing.instant('histogram-span','brushBins');}
-this.mouseDownBinIndex_=undefined;},async onSelectedDiagnosticsChanged_(){await this.rowState.update({diagnosticsTab:this.$.diagnostics.selectedSubView.tabLabel,});if((this.$.diagnostics.selectedSubView===this.$.sample_diagnostics_container)&&this.histogram&&this.viewState.brushedBinRange.isEmpty){const brushedBinRange=tr.b.math.Range.fromExplicitRange(0,this.histogram.allBins.length);await this.viewState.update({brushedBinRange});this.updateDiagnostics_();}},updateDiagnostics_(){let maps=[];for(const bin of this.brushedBins){for(const map of bin.diagnosticMaps){maps.push(map);}}
-if(this.$.merge_sample_diagnostics.checked!==this.viewState.mergeSampleDiagnostics){this.viewState.update({mergeSampleDiagnostics:this.$.merge_sample_diagnostics.checked});}
-if(this.viewState.mergeSampleDiagnostics){const merged=new tr.v.d.DiagnosticMap();for(const map of maps){merged.addDiagnostics(map);}
-maps=[merged];}
-const mark=tr.b.Timing.mark('histogram-span',(this.viewState.mergeSampleDiagnostics?'merge':'split')+'SampleDiagnostics');this.$.sample_diagnostics.diagnosticMaps=maps;mark.end();if(this.anySampleDiagnostics_){this.$.diagnostics.selectedSubView=this.$.sample_diagnostics_container;}},get histogram(){return this.histogram_;},get referenceHistogram(){return this.referenceHistogram_;},getDeltaScalars_(statNames,scalarMap){if(!this.histogram.canCompare(this.referenceHistogram))return;for(const deltaStatName of tr.v.Histogram.getDeltaStatisticsNames(statNames)){if(IGNORE_DELTA_STATISTICS_NAMES.includes(deltaStatName))continue;const scalar=this.histogram.getStatisticScalar(deltaStatName,this.referenceHistogram,this.mwuResult_);if(scalar===undefined)continue;scalarMap.set(deltaStatName,scalar);}},set isYLogScale(logScale){this.chart_.isYLogScale=logScale;},async updateContents_(){this.$.chart.style.display='none';this.$.drag_handle.style.display='none';this.$.container.style.justifyContent='';while(Polymer.dom(this.$.chart).lastChild){Polymer.dom(this.$.chart).removeChild(Polymer.dom(this.$.chart).lastChild);}
-if(!this.histogram)return;this.$.container.style.display='';const scalarMap=new Map();this.getDeltaScalars_(this.histogram.statisticsNames,scalarMap);for(const[name,scalar]of this.histogram.statisticsScalars){scalarMap.set(name,scalar);}
-this.$.stats.scalarMap=scalarMap;this.updateSignificance_();const metricDiagnosticMap=new tr.v.d.DiagnosticMap();const metadataDiagnosticMap=new tr.v.d.DiagnosticMap();for(const[key,diagnostic]of this.histogram.diagnostics){if(key===tr.v.d.RESERVED_NAMES.MERGED_FROM)continue;if(key===tr.v.d.RESERVED_NAMES.MERGED_TO)continue;if(diagnostic instanceof tr.v.d.GroupingPath)continue;if(diagnostic instanceof tr.v.d.RelatedNameMap)continue;if(tr.v.d.RESERVED_NAMES_SET.has(key)){metadataDiagnosticMap.set(key,diagnostic);}else{metricDiagnosticMap.set(key,diagnostic);}}
-const diagnosticTabs=[];if(metricDiagnosticMap.size){this.$.metric_diagnostics.diagnosticMaps=[metricDiagnosticMap];diagnosticTabs.push(this.$.metric_diagnostics);}
-if(this.anySampleDiagnostics_){diagnosticTabs.push(this.$.sample_diagnostics_container);}
-if(metadataDiagnosticMap.size){this.$.metadata_diagnostics.diagnosticMaps=[metadataDiagnosticMap];diagnosticTabs.push(this.$.metadata_diagnostics);}
-this.$.diagnostics.resetSubViews(diagnosticTabs);this.$.diagnostics.set('tabsHidden',diagnosticTabs.length<2);if(this.histogram.numValues<=1){await this.viewState.update({brushedBinRange:tr.b.math.Range.fromExplicitRange(0,this.histogram.allBins.length)});this.$.container.style.justifyContent='flex-end';return;}
-this.$.chart.style.display='block';this.$.drag_handle.style.display='block';if(this.histogram.allBins.length===1){if(this.histogram.min!==this.histogram.max){this.chart_=new tr.ui.b.BoxChart();Polymer.dom(this.$.chart).appendChild(this.chart_);this.chart_.graphWidth=this.graphWidth;this.chart_.graphHeight=this.graphHeight;this.chart_.hideXAxis=true;this.chart_.data=[{x:'',color:'blue',percentile_0:this.histogram.running.min,percentile_25:this.histogram.getApproximatePercentile(0.25),percentile_50:this.histogram.getApproximatePercentile(0.5),percentile_75:this.histogram.getApproximatePercentile(0.75),percentile_100:this.histogram.running.max,}];}
-this.$.stats_container.style.maxHeight=this.chart_.getBoundingClientRect().height+'px';await this.viewState.update({brushedBinRange:tr.b.math.Range.fromExplicitRange(0,this.histogram.allBins.length)});return;}
-this.chart_=new tr.ui.b.NameBarChart();Polymer.dom(this.$.chart).appendChild(this.chart_);this.chart_.graphWidth=this.graphWidth;this.chart_.graphHeight=this.graphHeight;this.chart_.addEventListener('item-mousedown',this.onMouseDown_.bind(this));this.chart_.addEventListener('item-mousemove',this.onMouseMove_.bind(this));this.chart_.addEventListener('item-mouseup',this.onMouseUp_.bind(this));this.chart_.hideLegend=true;this.chart_.getDataSeries('y').color='blue';this.chart_.xAxisLabel='#';this.chart_.brushedRange=this.viewState.brushedBinRange;if(!this.viewState.brushedBinRange.isEmpty){this.updateDiagnostics_();}
-const chartData=[];const binCounts=[];for(const bin of this.histogram.allBins){let x=bin.range.min;if(x===-Number.MAX_VALUE){x='<'+new tr.b.Scalar(this.histogram.unit,bin.range.max).toString();}else{x=new tr.b.Scalar(this.histogram.unit,x).toString();}
-chartData.push({x,y:bin.count});binCounts.push(bin.count);}
-binCounts.sort((x,y)=>y-x);const dataRange=tr.b.math.Range.fromExplicitRange(0,binCounts[0]);if(binCounts[1]>0&&binCounts[0]>(binCounts[1]*2)){dataRange.max=binCounts[1]*(1+TRUNCATE_BIN_MARGIN);}
-if(binCounts[2]>0&&binCounts[1]>(binCounts[2]*2)){dataRange.max=binCounts[2]*(1+TRUNCATE_BIN_MARGIN);}
-this.chart_.overrideDataRange=dataRange;this.chart_.data=chartData;this.$.stats_container.style.maxHeight=this.chart_.getBoundingClientRect().height+'px';}});});'use strict';tr.exportTo('tr.ui.analysis',function(){const EVENT_FIELD=[{key:'start',label:'Start'},{key:'cpuDuration',label:'CPU Duration'},{key:'duration',label:'Duration'},{key:'cpuSelfTime',label:'CPU Self Time'},{key:'selfTime',label:'Self Time'}];function buildDiagnostics_(slice){const diagnostics={};for(const item of EVENT_FIELD){const fieldName=item.key;if(slice[fieldName]===undefined)continue;diagnostics[fieldName]=new tr.v.d.Scalar(new tr.b.Scalar(tr.b.Unit.byName.timeDurationInMs,slice[fieldName]));}
-diagnostics.args=new tr.v.d.GenericSet([slice.args]);diagnostics.event=new tr.v.d.RelatedEventSet(slice);return diagnostics;}
-Polymer({is:'tr-ui-a-multi-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;this.eventsHaveDuration_=true;this.eventsHaveSubRows_=true;},ready(){this.$.radioPicker.style.display='none';this.$.radioPicker.items=EVENT_FIELD;this.$.radioPicker.select('cpuSelfTime');this.$.radioPicker.addEventListener('change',()=>{if(this.isAttached)this.updateContents_();});this.$.histogramSpan.graphWidth=400;this.$.histogramSpan.canMergeSampleDiagnostics=false;this.$.histogramContainer.style.display='none';},attached(){if(this.currentSelection_!==undefined)this.updateContents_();},set selection(selection){if(selection.length<=1){throw new Error('Only supports multiple items');}
-this.setSelectionWithoutErrorChecks(selection);},get selection(){return this.currentSelection_;},setSelectionWithoutErrorChecks(selection){this.currentSelection_=selection;if(this.isAttached)this.updateContents_();},get eventsHaveDuration(){return this.eventsHaveDuration_;},set eventsHaveDuration(eventsHaveDuration){this.eventsHaveDuration_=eventsHaveDuration;if(this.isAttached)this.updateContents_();},get eventsHaveSubRows(){return this.eventsHaveSubRows_;},set eventsHaveSubRows(eventsHaveSubRows){this.eventsHaveSubRows_=eventsHaveSubRows;if(this.isAttached)this.updateContents_();},buildHistogram_(selectedKey){let leftBoundary=Number.MAX_VALUE;let rightBoundary=tr.b.math.Statistics.percentile(this.currentSelection_,0.95,function(value){leftBoundary=Math.min(leftBoundary,value[selectedKey]);return value[selectedKey];});if(leftBoundary===rightBoundary)rightBoundary+=1;const histogram=new tr.v.Histogram('',tr.b.Unit.byName.timeDurationInMs,tr.v.HistogramBinBoundaries.createLinear(leftBoundary,rightBoundary,Math.ceil(Math.sqrt(this.currentSelection_.length))));histogram.customizeSummaryOptions({sum:false});for(const slice of this.currentSelection_){histogram.addSample(slice[selectedKey],buildDiagnostics_(slice));}
-return histogram;},updateContents_(){const selection=this.currentSelection_;if(!selection)return;const eventsByTitle=selection.getEventsOrganizedByTitle();const numTitles=Object.keys(eventsByTitle).length;this.$.eventSummaryTable.configure({showTotals:numTitles>1,eventsByTitle,eventsHaveDuration:this.eventsHaveDuration_,eventsHaveSubRows:this.eventsHaveSubRows_});this.$.selectionSummaryTable.selection=this.currentSelection_;if(numTitles===1){this.$.radioPicker.style.display='block';this.$.histogramContainer.style.display='flex';this.$.histogramSpan.build(this.buildHistogram_(this.$.radioPicker.selectedKey));if(this.$.histogramSpan.histogram.numValues===0){this.$.histogramContainer.style.display='none';}}else{this.$.radioPicker.style.display='none';this.$.histogramContainer.style.display='none';}}});return{};});'use strict';tr.exportTo('tr.ui.analysis',function(){const FLOW_IN=0x1;const FLOW_OUT=0x2;const FLOW_IN_OUT=FLOW_IN|FLOW_OUT;function FlowClassifier(){this.numEvents_=0;this.eventsByGUID_={};}
-FlowClassifier.prototype={getFS_(event){let fs=this.eventsByGUID_[event.guid];if(fs===undefined){this.numEvents_++;fs={state:0,event};this.eventsByGUID_[event.guid]=fs;}
-return fs;},addInFlow(event){const fs=this.getFS_(event);fs.state|=FLOW_IN;return event;},addOutFlow(event){const fs=this.getFS_(event);fs.state|=FLOW_OUT;return event;},hasEvents(){return this.numEvents_>0;},get inFlowEvents(){const selection=new tr.model.EventSet();for(const guid in this.eventsByGUID_){const fs=this.eventsByGUID_[guid];if(fs.state===FLOW_IN){selection.push(fs.event);}}
-return selection;},get outFlowEvents(){const selection=new tr.model.EventSet();for(const guid in this.eventsByGUID_){const fs=this.eventsByGUID_[guid];if(fs.state===FLOW_OUT){selection.push(fs.event);}}
-return selection;},get internalFlowEvents(){const selection=new tr.model.EventSet();for(const guid in this.eventsByGUID_){const fs=this.eventsByGUID_[guid];if(fs.state===FLOW_IN_OUT){selection.push(fs.event);}}
-return selection;}};return{FlowClassifier,};});'use strict';function*getEventInFlowEvents(event){if(!event.inFlowEvents)return;yield*event.inFlowEvents;}
-function*getEventOutFlowEvents(event){if(!event.outFlowEvents)return;yield*event.outFlowEvents;}
-function*getEventAncestors(event){if(!event.enumerateAllAncestors)return;yield*event.enumerateAllAncestors();}
-function*getEventDescendents(event){if(!event.enumerateAllDescendents)return;yield*event.enumerateAllDescendents();}
-Polymer({is:'tr-ui-a-related-events',ready(){this.eventGroups_=[];this.cancelFunctions_=[];this.$.table.tableColumns=[{title:'Event(s)',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.type;if(row.tooltip){typeEl.title=row.tooltip;}
-return typeEl;},width:'150px'},{title:'Link',width:'100%',value(row){const linkEl=document.createElement('tr-ui-a-analysis-link');if(row.name){linkEl.setSelectionAndContent(row.selection,row.name);}else{linkEl.selection=row.selection;}
-return linkEl;}}];},hasRelatedEvents(){return(this.eventGroups_&&this.eventGroups_.length>0);},setRelatedEvents(eventSet){this.cancelAllTasks_();this.eventGroups_=[];this.addRuntimeCallStats_(eventSet);this.addOverlappingV8ICStats_(eventSet);this.addV8GCObjectStats_(eventSet);this.addV8Slices_(eventSet);this.addConnectedFlows_(eventSet);this.addConnectedEvents_(eventSet);this.addOverlappingSamples_(eventSet);this.updateContents_();},addConnectedFlows_(eventSet){const classifier=new tr.ui.analysis.FlowClassifier();eventSet.forEach(function(slice){if(slice.inFlowEvents){slice.inFlowEvents.forEach(function(flow){classifier.addInFlow(flow);});}
-if(slice.outFlowEvents){slice.outFlowEvents.forEach(function(flow){classifier.addOutFlow(flow);});}});if(!classifier.hasEvents())return;const addToEventGroups=function(type,flowEvent){this.eventGroups_.push({type,selection:new tr.model.EventSet(flowEvent),name:flowEvent.title});};classifier.inFlowEvents.forEach(addToEventGroups.bind(this,'Incoming flow'));classifier.outFlowEvents.forEach(addToEventGroups.bind(this,'Outgoing flow'));classifier.internalFlowEvents.forEach(addToEventGroups.bind(this,'Internal flow'));},cancelAllTasks_(){this.cancelFunctions_.forEach(function(cancelFunction){cancelFunction();});this.cancelFunctions_=[];},addConnectedEvents_(eventSet){this.cancelFunctions_.push(this.createEventsLinkIfNeeded_('Preceding events','Add all events that have led to the selected one(s), connected by '+'flow arrows or by call stack.',eventSet,function*(event){yield*getEventInFlowEvents(event);yield*getEventAncestors(event);if(event.startSlice){yield event.startSlice;}}.bind(this)));this.cancelFunctions_.push(this.createEventsLinkIfNeeded_('Following events','Add all events that have been caused by the selected one(s), '+'connected by flow arrows or by call stack.',eventSet,function*(event){yield*getEventOutFlowEvents(event);yield*getEventDescendents(event);if(event.endSlice){yield event.endSlice;}}.bind(this)));this.cancelFunctions_.push(this.createEventsLinkIfNeeded_('All connected events','Add all events connected to the selected one(s) by flow arrows or '+'by call stack.',eventSet,function*(event){yield*getEventInFlowEvents(event);yield*getEventOutFlowEvents(event);yield*getEventAncestors(event);yield*getEventDescendents(event);if(event.startSlice){yield event.startSlice;}
-if(event.endSlice){yield event.endSlice;}}.bind(this)));},createEventsLinkIfNeeded_(title,tooltip,events,connectedFn){events=new tr.model.EventSet(events);const eventsToProcess=new Set(events);let wasChanged=false;let task;let isCanceled=false;function addEventsUntilTimeout(){if(isCanceled)return;const timeout=window.performance.now()+8;while(eventsToProcess.size>0&&window.performance.now()<=timeout){const nextEvent=tr.b.getFirstElement(eventsToProcess);eventsToProcess.delete(nextEvent);for(const eventToAdd of connectedFn(nextEvent)){if(!events.contains(eventToAdd)){events.push(eventToAdd);eventsToProcess.add(eventToAdd);wasChanged=true;}}}
-if(eventsToProcess.size>0){const newTask=new tr.b.Task(addEventsUntilTimeout.bind(this),this);task.after(newTask);task=newTask;return;}
-if(!wasChanged)return;this.eventGroups_.push({type:title,tooltip,selection:events});this.updateContents_();}
-function cancelTask(){isCanceled=true;}
-task=new tr.b.Task(addEventsUntilTimeout.bind(this),this);tr.b.Task.RunWhenIdle(task);return cancelTask;},addOverlappingSamples_(eventSet){const samples=new tr.model.EventSet();for(const slice of eventSet){if(!slice.parentContainer||!slice.parentContainer.samples){continue;}
-const candidates=slice.parentContainer.samples;const range=tr.b.math.Range.fromExplicitRange(slice.start,slice.start+slice.duration);const filteredSamples=range.filterArray(candidates,function(value){return value.start;});for(const sample of filteredSamples){samples.push(sample);}}
-if(samples.length>0){this.eventGroups_.push({type:'Overlapping samples',tooltip:'All samples overlapping the selected slice(s).',selection:samples});}},addV8Slices_(eventSet){const v8Slices=new tr.model.EventSet();for(const slice of eventSet){if(slice.category==='v8'){v8Slices.push(slice);}}
-if(v8Slices.length>0){this.eventGroups_.push({type:'V8 Slices',tooltip:'All V8 slices in the selected slice(s).',selection:v8Slices});}},addRuntimeCallStats_(eventSet){const slices=eventSet.filter(function(slice){return(slice.category==='v8'||slice.category==='disabled-by-default-v8.runtime_stats')&&slice.runtimeCallStats;});if(slices.length>0){this.eventGroups_.push({type:'Runtime call stats table',tooltip:'All V8 slices containing runtime call stats table in the selected slice(s).',selection:slices});}},addV8GCObjectStats_(eventSet){const slices=new tr.model.EventSet();for(const slice of eventSet){if(slice.title==='V8.GC_Objects_Stats'){slices.push(slice);}}
-if(slices.length>0){this.eventGroups_.push({type:'V8 GC stats table',tooltip:'All V8 GC statistics slices in the selected set.',selection:slices});}},addOverlappingV8ICStats_(eventSet){const slices=new tr.model.EventSet();for(const slice of eventSet){if(!slice.parentContainer||!slice.parentContainer.sliceGroup){continue;}
-const sliceGroup=slice.parentContainer.sliceGroup.slices;const range=tr.b.math.Range.fromExplicitRange(slice.start,slice.start+slice.duration);const filteredSlices=range.filterArray(sliceGroup,value=>value.start);const icSlices=filteredSlices.filter(x=>x.title==='V8.ICStats');for(const icSlice of icSlices){slices.push(icSlice);}}
-if(slices.length>0){this.eventGroups_.push({type:'Overlapping V8 IC stats',tooltip:'All V8 IC statistics overlapping the selected set.',selection:slices});}},updateContents_(){const table=this.$.table;if(this.eventGroups_===undefined){table.tableRows=[];}else{table.tableRows=this.eventGroups_.slice();}
-table.rebuild();}});'use strict';Polymer({is:'tr-ui-a-multi-async-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.content.selection=selection;this.$.relatedEvents.setRelatedEvents(selection);if(this.$.relatedEvents.hasRelatedEvents()){this.$.relatedEvents.style.display='';}else{this.$.relatedEvents.style.display='none';}},get relatedEventsToHighlight(){if(!this.$.content.selection)return undefined;const selection=new tr.model.EventSet();this.$.content.selection.forEach(function(asyncEvent){if(!asyncEvent.associatedEvents)return;asyncEvent.associatedEvents.forEach(function(event){selection.push(event);});});if(selection.length)return selection;return undefined;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-async-slice-sub-view',tr.model.AsyncSlice,{multi:true,title:'Async Slices',});'use strict';Polymer({is:'tr-ui-a-multi-cpu-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.$.content.eventsHaveSubRows=false;},get selection(){return this.$.content.selection;},set selection(selection){this.$.content.setSelectionWithoutErrorChecks(selection);}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-cpu-slice-sub-view',tr.model.CpuSlice,{multi:true,title:'CPU Slices',});'use strict';Polymer({is:'tr-ui-a-multi-flow-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.$.content.eventsHaveDuration=false;this.$.content.eventsHaveSubRows=false;},set selection(selection){this.$.content.selection=selection;},get selection(){return this.$.content.selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-flow-event-sub-view',tr.model.FlowEvent,{multi:true,title:'Flow Events',});'use strict';Polymer({is:'tr-ui-a-multi-frame-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},set selection(selection){Polymer.dom(this).textContent='';const realView=document.createElement('tr-ui-a-multi-event-sub-view');realView.eventsHaveDuration=false;realView.eventsHaveSubRows=false;Polymer.dom(this).appendChild(realView);realView.setSelectionWithoutErrorChecks(selection);this.currentSelection_=selection;},get selection(){return this.currentSelection_;},get relatedEventsToHighlight(){if(!this.currentSelection_)return undefined;const selection=new tr.model.EventSet();this.currentSelection_.forEach(function(frameEvent){frameEvent.associatedEvents.forEach(function(event){selection.push(event);});});return selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-frame-sub-view',tr.model.Frame,{multi:true,title:'Frames',});'use strict';Polymer({is:'tr-ui-a-multi-instant-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},set selection(selection){Polymer.dom(this.$.content).textContent='';const realView=document.createElement('tr-ui-a-multi-event-sub-view');realView.eventsHaveDuration=false;realView.eventsHaveSubRows=false;Polymer.dom(this.$.content).appendChild(realView);realView.setSelectionWithoutErrorChecks(selection);this.currentSelection_=selection;},get selection(){return this.currentSelection_;}});'use strict';Polymer({is:'tr-ui-a-multi-object-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},ready(){this.$.content.showHeader=false;},get selection(){return this.currentSelection_;},set selection(selection){this.currentSelection_=selection;const objectEvents=Array.from(selection).sort(tr.b.math.Range.compareByMinTimes);const timeSpanConfig={unit:tr.b.Unit.byName.timeStampInMs,ownerDocument:this.ownerDocument};const table=this.$.content;table.tableColumns=[{title:'First',value(event){if(event instanceof tr.model.ObjectSnapshot){return tr.v.ui.createScalarSpan(event.ts,timeSpanConfig);}
-const spanEl=document.createElement('span');Polymer.dom(spanEl).appendChild(tr.v.ui.createScalarSpan(event.creationTs,timeSpanConfig));Polymer.dom(spanEl).appendChild(tr.ui.b.createSpan({textContent:'-',marginLeft:'4px',marginRight:'4px'}));if(event.deletionTs!==Number.MAX_VALUE){Polymer.dom(spanEl).appendChild(tr.v.ui.createScalarSpan(event.deletionTs,timeSpanConfig));}
-return spanEl;},width:'200px'},{title:'Second',value(event){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(function(){return new tr.model.EventSet(event);},event.userFriendlyName);return linkEl;},width:'100%'}];table.tableRows=objectEvents;table.rebuild();}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-object-sub-view',tr.model.ObjectInstance,{multi:true,title:'Object Instances',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-object-sub-view',tr.model.ObjectSnapshot,{multi:true,title:'Object Snapshots',});'use strict';const EventSet=tr.model.EventSet;const CHART_TITLE='Power (W) by ms since vertical sync';Polymer({is:'tr-ui-a-frame-power-usage-chart',ready(){this.chart_=undefined;this.samples_=new EventSet();this.vSyncTimestamps_=[];},attached(){if(this.samples_)this.updateContents_();},get chart(){return this.chart_;},get samples(){return this.samples_;},get vSyncTimestamps(){return this.vSyncTimestamps_;},setData(samples,vSyncTimestamps){this.samples_=(samples===undefined)?new EventSet():samples;this.vSyncTimestamps_=(vSyncTimestamps===undefined)?[]:vSyncTimestamps;if(this.isAttached)this.updateContents_();},updateContents_(){this.clearChart_();const data=this.getDataForLineChart_();if(data.length===0)return;this.chart_=new tr.ui.b.LineChart();Polymer.dom(this.$.content).appendChild(this.chart_);this.chart_.chartTitle=CHART_TITLE;this.chart_.data=data;},clearChart_(){const content=this.$.content;while(Polymer.dom(content).firstChild){Polymer.dom(content).removeChild(Polymer.dom(content).firstChild);}
-this.chart_=undefined;},getDataForLineChart_(){const sortedSamples=this.sortSamplesByTimestampAscending_(this.samples);const vSyncTimestamps=this.vSyncTimestamps.slice();let lastVSyncTimestamp=undefined;const points=[];let frameNumber=0;sortedSamples.forEach(function(sample){while(vSyncTimestamps.length>0&&vSyncTimestamps[0]<=sample.start){lastVSyncTimestamp=vSyncTimestamps.shift();frameNumber++;}
-if(lastVSyncTimestamp===undefined)return;const point={x:sample.start-lastVSyncTimestamp};point['f'+frameNumber]=sample.powerInW;points.push(point);});return points;},sortSamplesByTimestampAscending_(samples){return samples.toArray().sort(function(smpl1,smpl2){return smpl1.start-smpl2.start;});}});'use strict';Polymer({is:'tr-ui-a-power-sample-summary-table',ready(){this.$.table.tableColumns=[{title:'Min power',width:'100px',value(row){return tr.b.Unit.byName.powerInWatts.format(row.min);}},{title:'Max power',width:'100px',value(row){return tr.b.Unit.byName.powerInWatts.format(row.max);}},{title:'Time-weighted average',width:'100px',value(row){return tr.b.Unit.byName.powerInWatts.format(row.timeWeightedAverageInW);}},{title:'Energy consumed',width:'100px',value(row){return tr.b.Unit.byName.energyInJoules.format(row.energyConsumedInJ);}},{title:'Sample count',width:'100%',value(row){return row.sampleCount;}}];this.samples=new tr.model.EventSet();},get samples(){return this.samples_;},set samples(samples){if(samples===this.samples)return;this.samples_=(samples===undefined)?new tr.model.EventSet():samples;this.updateContents_();},updateContents_(){if(this.samples.length===0){this.$.table.tableRows=[];}else{this.$.table.tableRows=[{min:this.getMin(),max:this.getMax(),timeWeightedAverageInW:this.getTimeWeightedAverageInW(),energyConsumedInJ:this.getEnergyConsumedInJ(),sampleCount:this.samples.length}];}
-this.$.table.rebuild();},getMin(){return Math.min.apply(null,this.samples.map(function(sample){return sample.powerInW;}));},getMax(){return Math.max.apply(null,this.samples.map(function(sample){return sample.powerInW;}));},getTimeWeightedAverageInW(){const energyConsumedInJ=this.getEnergyConsumedInJ();if(energyConsumedInJ==='N/A')return'N/A';const durationInS=tr.b.convertUnit(this.samples.bounds.duration,tr.b.UnitPrefixScale.METRIC.MILLI,tr.b.UnitPrefixScale.METRIC.NONE);return energyConsumedInJ/durationInS;},getEnergyConsumedInJ(){if(this.samples.length<2)return'N/A';const bounds=this.samples.bounds;const series=tr.b.getFirstElement(this.samples).series;return series.getEnergyConsumedInJ(bounds.min,bounds.max);}});'use strict';Polymer({is:'tr-ui-a-multi-power-sample-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.currentSelection_=undefined;},get selection(){return this.currentSelection_;},set selection(selection){this.currentSelection_=selection;this.updateContents_();},updateContents_(){const samples=this.selection;const vSyncTimestamps=(!samples?[]:tr.b.getFirstElement(samples).series.device.vSyncTimestamps);this.$.summaryTable.samples=samples;this.$.chart.setData(this.selection,vSyncTimestamps);}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-power-sample-sub-view',tr.model.PowerSample,{multi:true,title:'Power Samples',});'use strict';(function(){const MultiDimensionalViewBuilder=tr.b.MultiDimensionalViewBuilder;Polymer({is:'tr-ui-a-multi-sample-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.viewOption_=undefined;this.selection_=undefined;},ready(){const viewSelector=tr.ui.b.createSelector(this,'viewOption','tracing.ui.analysis.multi_sample_sub_view',MultiDimensionalViewBuilder.ViewType.TOP_DOWN_TREE_VIEW,[{label:'Top-down (Tree)',value:MultiDimensionalViewBuilder.ViewType.TOP_DOWN_TREE_VIEW},{label:'Top-down (Heavy)',value:MultiDimensionalViewBuilder.ViewType.TOP_DOWN_HEAVY_VIEW},{label:'Bottom-up (Heavy)',value:MultiDimensionalViewBuilder.ViewType.BOTTOM_UP_HEAVY_VIEW}]);Polymer.dom(this.$.control).appendChild(viewSelector);this.$.table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;},get selection(){return this.selection_;},set selection(selection){this.selection_=selection;this.updateContents_();},get viewOption(){return this.viewOption_;},set viewOption(viewOption){this.viewOption_=viewOption;this.updateContents_();},createSamplingSummary_(selection,viewOption){const builder=new MultiDimensionalViewBuilder(1,1);const samples=selection.filter(event=>event instanceof tr.model.Sample);samples.forEach(function(sample){builder.addPath([sample.userFriendlyStack.reverse()],[1],MultiDimensionalViewBuilder.ValueKind.SELF);});return builder.buildView(viewOption);},processSampleRows_(rows){for(const row of rows){let title=row.title[0];let results=/(.*) (Deoptimized reason: .*)/.exec(title);if(results!==null){row.deoptReason=results[2];title=results[1];}
-results=/(.*) url: (.*)/.exec(title);if(results!==null){row.functionName=results[1];row.url=results[2];if(row.functionName===''){row.functionName='(anonymous function)';}
-if(row.url===''){row.url='unknown';}}else{row.functionName=title;row.url='unknown';}
-this.processSampleRows_(row.subRows);}},updateContents_(){if(this.selection===undefined){this.$.table.tableColumns=[];this.$.table.tableRows=[];this.$.table.rebuild();return;}
-const samplingData=this.createSamplingSummary_(this.selection,this.viewOption);const total=samplingData.values[0].total;const columns=[this.createPercentColumn_('Total',total),this.createSamplesColumn_('Total'),this.createPercentColumn_('Self',total),this.createSamplesColumn_('Self'),{title:'Function Name',value(row){if(row.deoptReason!==undefined){const spanEl=tr.ui.b.createSpan({italic:true,color:'#F44336',tooltip:row.deoptReason});spanEl.innerText=row.functionName;return spanEl;}
-return row.functionName;},width:'150px',cmp:(a,b)=>a.functionName.localeCompare(b.functionName),showExpandButtons:true},{title:'Location',value(row){return row.url;},width:'250px',cmp:(a,b)=>a.url.localeCompare(b.url),}];this.processSampleRows_(samplingData.subRows);this.$.table.tableColumns=columns;this.$.table.sortColumnIndex=1;this.$.table.sortDescending=true;this.$.table.tableRows=samplingData.subRows;this.$.table.rebuild();},createPercentColumn_(title,samplingDataTotal){const field=title.toLowerCase();return{title:title+' percent',value(row){return tr.v.ui.createScalarSpan(row.values[0][field]/samplingDataTotal,{customContextRange:tr.b.math.Range.PERCENT_RANGE,unit:tr.b.Unit.byName.normalizedPercentage,context:{minimumFractionDigits:2,maximumFractionDigits:2},});},width:'60px',cmp:(a,b)=>a.values[0][field]-b.values[0][field]};},createSamplesColumn_(title){const field=title.toLowerCase();return{title:title+' samples',value(row){return tr.v.ui.createScalarSpan(row.values[0][field],{unit:tr.b.Unit.byName.unitlessNumber,context:{maximumFractionDigits:0},});},width:'60px',cmp:(a,b)=>a.values[0][field]-b.values[0][field]};}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-sample-sub-view',tr.model.Sample,{multi:true,title:'Samples',});})();'use strict';Polymer({is:'tr-ui-a-multi-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.selection_=undefined;},get selection(){return this.selection_;},set selection(selection){this.selection_=selection;if(tr.isExported('tr.ui.e.chrome.cc.RasterTaskSelection')){if(tr.ui.e.chrome.cc.RasterTaskSelection.supports(selection)){const ltvSelection=new tr.ui.e.chrome.cc.RasterTaskSelection(selection);const ltv=new tr.ui.e.chrome.cc.LayerTreeHostImplSnapshotView();ltv.objectSnapshot=ltvSelection.containingSnapshot;ltv.selection=ltvSelection;ltv.extraHighlightsByLayerId=ltvSelection.extraHighlightsByLayerId;Polymer.dom(this.$.content).textContent='';Polymer.dom(this.$.content).appendChild(ltv);this.requiresTallView_=true;return;}}
-Polymer.dom(this.$.content).textContent='';const mesv=document.createElement('tr-ui-a-multi-event-sub-view');mesv.selection=selection;Polymer.dom(this.$.content).appendChild(mesv);const relatedEvents=document.createElement('tr-ui-a-related-events');relatedEvents.setRelatedEvents(selection);if(relatedEvents.hasRelatedEvents()){Polymer.dom(this.$.content).appendChild(relatedEvents);}},get requiresTallView(){if(this.$.content.children.length===0)return false;const childTagName=this.$.content.children[0].tagName;if(childTagName==='TR-UI-A-MULTI-EVENT-SUB-VIEW'){return false;}
-return true;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-thread-slice-sub-view',tr.model.ThreadSlice,{multi:true,title:'Slices',});'use strict';Polymer({is:'tr-ui-a-multi-thread-time-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.$.content.eventsHaveSubRows=false;},get selection(){return this.$.content.selection;},set selection(selection){this.$.content.setSelectionWithoutErrorChecks(selection);}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-thread-time-slice-sub-view',tr.model.ThreadTimeSlice,{multi:true,title:'Thread Timeslices',});'use strict';Polymer({is:'tr-ui-a-user-expectation-related-samples-table',ready(){this.samples_=[];this.$.table.tableColumns=[{title:'Event(s)',value(row){const typeEl=document.createElement('span');typeEl.innerText=row.type;if(row.tooltip){typeEl.title=row.tooltip;}
-return typeEl;},width:'150px'},{title:'Link',width:'100%',value(row){const linkEl=document.createElement('tr-ui-a-analysis-link');if(row.name){linkEl.setSelectionAndContent(row.selection,row.name);}else{linkEl.selection=row.selection;}
-return linkEl;}}];},hasRelatedSamples(){return(this.samples_&&this.samples_.length>0);},set selection(eventSet){this.samples_=[];const samples=new tr.model.EventSet;eventSet.forEach(function(ue){samples.addEventSet(ue.associatedSamples);}.bind(this));if(samples.length>0){this.samples_.push({type:'Overlapping samples',tooltip:'All samples overlapping the selected user expectation(s).',selection:samples});}
-this.updateContents_();},updateContents_(){const table=this.$.table;if(this.samples_&&this.samples_.length>0){table.tableRows=this.samples_.slice();}else{table.tableRows=[];}
-table.rebuild();}});'use strict';Polymer({is:'tr-ui-a-multi-interaction-record-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},set selection(selection){this.currentSelection_=selection;this.$.realView.setSelectionWithoutErrorChecks(selection);this.currentSelection_=selection;this.$.relatedSamples.selection=selection;if(this.$.relatedSamples.hasRelatedSamples()){this.$.events.style.display='';}else{this.$.events.style.display='none';}},get selection(){return this.currentSelection_;},get relatedEventsToHighlight(){if(!this.currentSelection_)return undefined;const selection=new tr.model.EventSet();this.currentSelection_.forEach(function(ir){ir.associatedEvents.forEach(function(event){selection.push(event);});});return selection;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-user-expectation-sub-view',tr.model.um.UserExpectation,{multi:true,title:'User Expectations',});'use strict';Polymer({is:'tr-ui-a-single-async-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){if(selection.length!==1){throw new Error('Only supports single slices');}
-this.$.content.setSelectionWithoutErrorChecks(selection);this.$.relatedEvents.setRelatedEvents(selection);if(this.$.relatedEvents.hasRelatedEvents()){this.$.relatedEvents.style.display='';}else{this.$.relatedEvents.style.display='none';}},getEventRows_(event){const rows=this.__proto__.__proto__.getEventRows_(event);rows.splice(0,0,{name:'ID',value:event.id});return rows;},get relatedEventsToHighlight(){if(!this.currentSelection_)return undefined;return tr.b.getOnlyElement(this.currentSelection_).associatedEvents;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-async-slice-sub-view',tr.model.AsyncSlice,{multi:false,title:'Async Slice',});'use strict';Polymer({is:'tr-ui-a-single-cpu-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},get selection(){return this.currentSelection_;},set selection(selection){const cpuSlice=tr.b.getOnlyElement(selection);if(!(cpuSlice instanceof tr.model.CpuSlice)){throw new Error('Only supports thread time slices');}
-this.currentSelection_=selection;const thread=cpuSlice.threadThatWasRunning;const root=Polymer.dom(this.root);if(thread){Polymer.dom(root.querySelector('#process-name')).textContent=thread.parent.userFriendlyName;Polymer.dom(root.querySelector('#thread-name')).textContent=thread.userFriendlyName;}else{root.querySelector('#process-name').parentElement.style.display='none';Polymer.dom(root.querySelector('#thread-name')).textContent=cpuSlice.title;}
-root.querySelector('#start').setValueAndUnit(cpuSlice.start,tr.b.Unit.byName.timeStampInMs);root.querySelector('#duration').setValueAndUnit(cpuSlice.duration,tr.b.Unit.byName.timeDurationInMs);const runningThreadEl=root.querySelector('#running-thread');const timeSlice=cpuSlice.getAssociatedTimeslice();if(!timeSlice){runningThreadEl.parentElement.style.display='none';}else{const threadLink=document.createElement('tr-ui-a-analysis-link');threadLink.selection=new tr.model.EventSet(timeSlice);Polymer.dom(threadLink).textContent='Click to select';runningThreadEl.parentElement.style.display='';Polymer.dom(runningThreadEl).textContent='';Polymer.dom(runningThreadEl).appendChild(threadLink);}
-root.querySelector('#args').object=cpuSlice.args;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-cpu-slice-sub-view',tr.model.CpuSlice,{multi:false,title:'CPU Slice',});'use strict';function createAnalysisLinkTo(event){const linkEl=document.createElement('tr-ui-a-analysis-link');linkEl.setSelectionAndContent(new tr.model.EventSet(event),event.userFriendlyName);return linkEl;}
-Polymer({is:'tr-ui-a-single-flow-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],listeners:{'singleEventSubView.customize-rows':'onCustomizeRows_'},set selection(selection){this.currentSelection_=selection;this.$.singleEventSubView.setSelectionWithoutErrorChecks(selection);},get selection(){return this.currentSelection_;},onCustomizeRows_(e){const event=tr.b.getOnlyElement(this.currentSelection_);const rows=e.rows;rows.unshift({name:'ID',value:event.id});rows.push({name:'From',value:createAnalysisLinkTo(event.startSlice)});rows.push({name:'To',value:createAnalysisLinkTo(event.endSlice)});}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-flow-event-sub-view',tr.model.FlowEvent,{multi:false,title:'Flow Event',});'use strict';Polymer({is:'tr-ui-a-single-frame-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.currentSelection_=undefined;},get selection(){return this.currentSelection_;},set selection(selection){this.currentSelection_=selection;this.$.asv.selection=tr.b.getOnlyElement(selection).associatedAlerts;},get relatedEventsToHighlight(){if(!this.currentSelection_)return undefined;return tr.b.getOnlyElement(this.currentSelection_).associatedEvents;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-frame-sub-view',tr.model.Frame,{multi:false,title:'Frame',});'use strict';Polymer({is:'tr-ui-a-single-instant-event-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},set selection(selection){Polymer.dom(this.$.content).textContent='';const realView=document.createElement('tr-ui-a-single-event-sub-view');realView.setSelectionWithoutErrorChecks(selection);Polymer.dom(this.$.content).appendChild(realView);this.currentSelection_=selection;},get selection(){return this.currentSelection_;}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-instant-event-sub-view',tr.model.InstantEvent,{multi:false,title:'Instant Event',});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-multi-instant-event-sub-view',tr.model.InstantEvent,{multi:true,title:'Instant Events',});'use strict';tr.exportTo('tr.ui.analysis',function(){const ObjectInstanceView=tr.ui.b.define('object-instance-view');ObjectInstanceView.prototype={__proto__:HTMLDivElement.prototype,decorate(){this.objectInstance_=undefined;},get requiresTallView(){return true;},set modelEvent(obj){this.objectInstance=obj;},get modelEvent(){return this.objectInstance;},get objectInstance(){return this.objectInstance_;},set objectInstance(i){this.objectInstance_=i;this.updateContents();},updateContents(){throw new Error('Not implemented');}};const options=new tr.b.ExtensionRegistryOptions(tr.b.TYPE_BASED_REGISTRY_MODE);options.mandatoryBaseClass=ObjectInstanceView;options.defaultMetadata={showInTrackView:true};tr.b.decorateExtensionRegistry(ObjectInstanceView,options);return{ObjectInstanceView,};});'use strict';Polymer({is:'tr-ui-a-single-object-instance-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},get requiresTallView(){if(this.$.content.children.length===0){return false;}
-if(this.$.content.children[0]instanceof
-tr.ui.analysis.ObjectInstanceView){return this.$.content.children[0].requiresTallView;}},get selection(){return this.currentSelection_;},set selection(selection){const instance=tr.b.getOnlyElement(selection);if(!(instance instanceof tr.model.ObjectInstance)){throw new Error('Only supports object instances');}
-Polymer.dom(this.$.content).textContent='';this.currentSelection_=selection;const typeInfo=tr.ui.analysis.ObjectInstanceView.getTypeInfo(instance.category,instance.typeName);if(typeInfo){const customView=new typeInfo.constructor();Polymer.dom(this.$.content).appendChild(customView);customView.modelEvent=instance;}else{this.appendGenericAnalysis_(instance);}},appendGenericAnalysis_(instance){let html='';html+='<div class="title">'+
-instance.typeName+' '+
-instance.id+'</div>\n';html+='<table>';html+='<tr>';html+='<tr><td>creationTs:</td><td>'+
-instance.creationTs+'</td></tr>\n';if(instance.deletionTs!==Number.MAX_VALUE){html+='<tr><td>deletionTs:</td><td>'+
-instance.deletionTs+'</td></tr>\n';}else{html+='<tr><td>deletionTs:</td><td>not deleted</td></tr>\n';}
-html+='<tr><td>snapshots:</td><td id="snapshots"></td></tr>\n';html+='</table>';Polymer.dom(this.$.content).innerHTML=html;const snapshotsEl=Polymer.dom(this.$.content).querySelector('#snapshots');instance.snapshots.forEach(function(snapshot){const snapshotLink=document.createElement('tr-ui-a-analysis-link');snapshotLink.selection=new tr.model.EventSet(snapshot);Polymer.dom(snapshotsEl).appendChild(snapshotLink);});}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-object-instance-sub-view',tr.model.ObjectInstance,{multi:false,title:'Object Instance',});'use strict';Polymer({is:'tr-ui-a-single-object-snapshot-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},get requiresTallView(){if(this.children.length===0){return false;}
-if(this.children[0]instanceof tr.ui.analysis.ObjectSnapshotView){return this.children[0].requiresTallView;}},get selection(){return this.currentSelection_;},set selection(selection){const snapshot=tr.b.getOnlyElement(selection);if(!(snapshot instanceof tr.model.ObjectSnapshot)){throw new Error('Only supports object instances');}
-Polymer.dom(this).textContent='';this.currentSelection_=selection;const typeInfo=tr.ui.analysis.ObjectSnapshotView.getTypeInfo(snapshot.objectInstance.category,snapshot.objectInstance.typeName);if(typeInfo){const customView=new typeInfo.constructor();Polymer.dom(this).appendChild(customView);customView.modelEvent=snapshot;}else{this.appendGenericAnalysis_(snapshot);}},appendGenericAnalysis_(snapshot){const instance=snapshot.objectInstance;Polymer.dom(this).textContent='';const titleEl=document.createElement('div');Polymer.dom(titleEl).classList.add('title');Polymer.dom(titleEl).appendChild(document.createTextNode('Snapshot of '));Polymer.dom(this).appendChild(titleEl);const instanceLinkEl=document.createElement('tr-ui-a-analysis-link');instanceLinkEl.selection=new tr.model.EventSet(instance);Polymer.dom(titleEl).appendChild(instanceLinkEl);Polymer.dom(titleEl).appendChild(document.createTextNode(' @ '));Polymer.dom(titleEl).appendChild(tr.v.ui.createScalarSpan(snapshot.ts,{unit:tr.b.Unit.byName.timeStampInMs,ownerDocument:this.ownerDocument,inline:true,}));const tableEl=document.createElement('table');Polymer.dom(this).appendChild(tableEl);const rowEl=document.createElement('tr');Polymer.dom(tableEl).appendChild(rowEl);const labelEl=document.createElement('td');Polymer.dom(labelEl).textContent='args:';Polymer.dom(rowEl).appendChild(labelEl);const argsEl=document.createElement('td');argsEl.id='args';Polymer.dom(rowEl).appendChild(argsEl);const objectViewEl=document.createElement('tr-ui-a-generic-object-view');objectViewEl.object=snapshot.args;Polymer.dom(argsEl).appendChild(objectViewEl);}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-object-snapshot-sub-view',tr.model.ObjectSnapshot,{multi:false,title:'Object Snapshot',});'use strict';Polymer({is:'tr-ui-a-power-sample-table',ready(){this.$.table.tableColumns=[{title:'Time',width:'100px',value(row){return tr.v.ui.createScalarSpan(row.start,{unit:tr.b.Unit.byName.timeStampInMs});}},{title:'Power',width:'100%',value(row){return tr.v.ui.createScalarSpan(row.powerInW,{unit:tr.b.Unit.byName.powerInWatts});}}];this.sample=undefined;},get sample(){return this.sample_;},set sample(sample){this.sample_=sample;this.updateContents_();},updateContents_(){if(this.sample===undefined){this.$.table.tableRows=[];}else{this.$.table.tableRows=[this.sample];}
-this.$.table.rebuild();}});'use strict';Polymer({is:'tr-ui-a-single-power-sample-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],ready(){this.currentSelection_=undefined;},get selection(){return this.currentSelection_;},set selection(selection){this.currentSelection_=selection;this.updateContents_();},updateContents_(){if(this.selection.length!==1){throw new Error('Cannot pass multiple samples to sample table.');}
-this.$.samplesTable.sample=tr.b.getOnlyElement(this.selection);}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-power-sample-sub-view',tr.model.PowerSample,{multi:false,title:'Power Sample',});'use strict';Polymer({is:'tr-ui-a-single-sample-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},ready(){this.$.content.tableColumns=[{title:'',value:row=>row.title,width:'100px'},{title:'',value:row=>row.value,width:'100%'}];this.$.content.showHeader=false;},get selection(){return this.currentSelection_;},set selection(selection){this.currentSelection_=selection;if(this.currentSelection_===undefined){this.$.content.tableRows=[];return;}
-const sample=tr.b.getOnlyElement(this.currentSelection_);const table=this.$.content;const rows=[];rows.push({title:'Title',value:sample.title});rows.push({title:'Sample time',value:tr.v.ui.createScalarSpan(sample.start,{unit:tr.b.Unit.byName.timeStampInMs,ownerDocument:this.ownerDocument})});const callStackTableEl=document.createElement('tr-ui-b-table');callStackTableEl.tableRows=sample.getNodesAsArray().reverse();callStackTableEl.tableColumns=[{title:'function name',value:row=>row.functionName||'(anonymous function)'},{title:'location',value:row=>row.url}];callStackTableEl.rebuild();rows.push({title:'Call stack',value:callStackTableEl});table.tableRows=rows;table.rebuild();}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-sample-sub-view',tr.model.Sample,{multi:false,title:'Sample',});'use strict';Polymer({is:'tr-ui-a-single-thread-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],get selection(){return this.$.content.selection;},set selection(selection){this.$.content.selection=selection;this.$.relatedEvents.setRelatedEvents(selection);if(this.$.relatedEvents.hasRelatedEvents()){this.$.relatedEvents.style.display='';}else{this.$.relatedEvents.style.display='none';}}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-thread-slice-sub-view',tr.model.ThreadSlice,{multi:false,title:'Slice',});'use strict';Polymer({is:'tr-ui-a-single-thread-time-slice-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},get selection(){return this.currentSelection_;},set selection(selection){const timeSlice=tr.b.getOnlyElement(selection);if(!(timeSlice instanceof tr.model.ThreadTimeSlice)){throw new Error('Only supports thread time slices');}
-this.currentSelection_=selection;const thread=timeSlice.thread;const root=Polymer.dom(this.root);Polymer.dom(root.querySelector('#state')).textContent=timeSlice.title;const stateColor=tr.b.ColorScheme.colorsAsStrings[timeSlice.colorId];root.querySelector('#state').style.backgroundColor=stateColor;Polymer.dom(root.querySelector('#process-name')).textContent=thread.parent.userFriendlyName;Polymer.dom(root.querySelector('#thread-name')).textContent=thread.userFriendlyName;root.querySelector('#start').setValueAndUnit(timeSlice.start,tr.b.Unit.byName.timeStampInMs);root.querySelector('#duration').setValueAndUnit(timeSlice.duration,tr.b.Unit.byName.timeDurationInMs);const onCpuEl=root.querySelector('#on-cpu');Polymer.dom(onCpuEl).textContent='';const runningInsteadEl=root.querySelector('#running-instead');if(timeSlice.cpuOnWhichThreadWasRunning){Polymer.dom(runningInsteadEl.parentElement).removeChild(runningInsteadEl);const cpuLink=document.createElement('tr-ui-a-analysis-link');cpuLink.selection=new tr.model.EventSet(timeSlice.getAssociatedCpuSlice());Polymer.dom(cpuLink).textContent=timeSlice.cpuOnWhichThreadWasRunning.userFriendlyName;Polymer.dom(onCpuEl).appendChild(cpuLink);}else{Polymer.dom(onCpuEl.parentElement).removeChild(onCpuEl);const cpuSliceThatTookCpu=timeSlice.getCpuSliceThatTookCpu();if(cpuSliceThatTookCpu){const cpuLink=document.createElement('tr-ui-a-analysis-link');cpuLink.selection=new tr.model.EventSet(cpuSliceThatTookCpu);if(cpuSliceThatTookCpu.thread){Polymer.dom(cpuLink).textContent=cpuSliceThatTookCpu.thread.userFriendlyName;}else{Polymer.dom(cpuLink).textContent=cpuSliceThatTookCpu.title;}
-Polymer.dom(runningInsteadEl).appendChild(cpuLink);}else{Polymer.dom(runningInsteadEl.parentElement).removeChild(runningInsteadEl);}}
-const argsEl=root.querySelector('#args');if(Object.keys(timeSlice.args).length>0){const argsView=document.createElement('tr-ui-a-generic-object-view');argsView.object=timeSlice.args;argsEl.parentElement.style.display='';Polymer.dom(argsEl).textContent='';Polymer.dom(argsEl).appendChild(argsView);}else{argsEl.parentElement.style.display='none';}}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-thread-time-slice-sub-view',tr.model.ThreadTimeSlice,{multi:false,title:'Thread Timeslice',});'use strict';Polymer({is:'tr-ui-a-single-user-expectation-sub-view',behaviors:[tr.ui.analysis.AnalysisSubView],created(){this.currentSelection_=undefined;},get selection(){return this.currentSelection_;},set selection(selection){this.$.realView.addEventListener('customize-rows',this.onCustomizeRows_.bind(this));this.currentSelection_=selection;this.$.realView.setSelectionWithoutErrorChecks(selection);this.$.relatedSamples.selection=selection;if(this.$.relatedSamples.hasRelatedSamples()){this.$.events.style.display='';}else{this.$.events.style.display='none';}},get relatedEventsToHighlight(){if(!this.currentSelection_)return undefined;return tr.b.getOnlyElement(this.currentSelection_).associatedEvents;},onCustomizeRows_(event){const ue=tr.b.getOnlyElement(this.selection);if(ue.rawCpuMs){event.rows.push({name:'Total CPU',value:tr.v.ui.createScalarSpan(ue.totalCpuMs,{unit:tr.b.Unit.byName.timeDurationInMs})});}}});tr.ui.analysis.AnalysisSubView.register('tr-ui-a-single-user-expectation-sub-view',tr.model.um.UserExpectation,{multi:false,title:'User Expectation',});'use strict';(function(){const EventRegistry=tr.model.EventRegistry;function getTabStripLabel(numEvents){if(numEvents===0){return'Nothing selected. Tap stuff.';}else if(numEvents===1){return'1 item selected.';}
-return numEvents+' items selected.';}
-function createSubView(subViewTypeInfo,selection){let tagName;if(selection.length===1){tagName=subViewTypeInfo.singleTagName;}else{tagName=subViewTypeInfo.multiTagName;}
-if(tagName===undefined){throw new Error('No view registered for '+
-subViewTypeInfo.eventConstructor.name);}
-const subView=document.createElement(tagName);let title;if(selection.length===1){title=subViewTypeInfo.singleTitle;}else{title=subViewTypeInfo.multiTitle;}
-title+=' ('+selection.length+')';subView.tabLabel=title;subView.selection=selection;return subView;}
-Polymer({is:'tr-ui-a-analysis-view',ready(){this.brushingStateController_=undefined;this.lastSelection_=undefined;this.tabView_=document.createElement('tr-ui-b-tab-view');this.tabView_.addEventListener('selected-tab-change',this.onSelectedSubViewChanged_.bind(this));Polymer.dom(this).appendChild(this.tabView_);},set tallMode(value){Polymer.dom(this).classList.toggle('tall-mode',value);},get tallMode(){return Polymer.dom(this).classList.contains('tall-mode');},get tabView(){return this.tabView_;},get brushingStateController(){return this.brushingStateController_;},set brushingStateController(brushingStateController){if(this.brushingStateController_){this.brushingStateController_.removeEventListener('change',this.onSelectionChanged_.bind(this));}
-this.brushingStateController_=brushingStateController;if(this.brushingStateController){this.brushingStateController_.addEventListener('change',this.onSelectionChanged_.bind(this));}
-this.onSelectionChanged_();},get selection(){return this.brushingStateController_.selection;},onSelectionChanged_(e){if(this.lastSelection_&&this.selection.equals(this.lastSelection_)){return;}
-this.lastSelection_=this.selection;this.tallMode=false;this.tabView_.label=getTabStripLabel(this.selection.length);const eventsByBaseTypeName=this.selection.getEventsOrganizedByBaseType(true);const ASV=tr.ui.analysis.AnalysisSubView;const eventsByTagName=ASV.getEventsOrganizedByTypeInfo(this.selection);const newSubViews=[];eventsByTagName.forEach(function(events,typeInfo){newSubViews.push(createSubView(typeInfo,events));});this.tabView_.resetSubViews(newSubViews);},onSelectedSubViewChanged_(){const selectedSubView=this.tabView_.selectedSubView;if(!selectedSubView){this.tallMode=false;this.maybeChangeRelatedEvents_(undefined);return;}
-this.tallMode=selectedSubView.requiresTallView;this.maybeChangeRelatedEvents_(selectedSubView.relatedEventsToHighlight);},maybeChangeRelatedEvents_(events){if(this.brushingStateController){this.brushingStateController.changeAnalysisViewRelatedEvents(events);}}});})();'use strict';tr.exportTo('tr.ui.b',function(){Polymer({is:'tr-ui-b-dropdown',properties:{label:{type:String,value:'',},},open(){if(this.isOpen)return;Polymer.dom(this.$.button).classList.add('open');const buttonRect=this.$.button.getBoundingClientRect();this.$.dialog.style.top=buttonRect.bottom-1+'px';this.$.dialog.style.left=buttonRect.left+'px';this.$.dialog.showModal();const dialogRect=this.$.dialog.getBoundingClientRect();if(dialogRect.right>window.innerWidth){this.$.dialog.style.left=Math.max(0,buttonRect.right-
-dialogRect.width)+'px';}},onDialogTap_(event){if(event.detail.sourceEvent.srcElement!==this.$.dialog)return;const dialogRect=this.$.dialog.getBoundingClientRect();let inside=true;inside&=event.detail.x>=dialogRect.left;inside&=event.detail.x<dialogRect.right;inside&=event.detail.y>=dialogRect.top;inside&=event.detail.y<dialogRect.bottom;if(inside)return;event.preventDefault();this.close();},close(){if(!this.isOpen)return;this.$.dialog.close();Polymer.dom(this.$.button).classList.remove('open');this.$.button.focus();},get isOpen(){return this.$.button.classList.contains('open');}});return{};});'use strict';tr.exportTo('tr.ui.b',function(){const FaviconsByHue={blue:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALgAAAC4CAYAAABQMybHAAAlrklEQVR4Ae2dCXwdVb3H5265yc3SpEk3ukEXCqVUBLT4Wm19oFKtaN0fKijy9CMguPBarIJsIiA8qsjTh7SllAoFeVBaEARkLV1ooXtL0yRdkqZp9u3uy/v/5uY/OZm75y659+acdnLOnP385zv/+58zZ2YMinTplIAhzsoDceaT2RKUQLwHIMFqh0V2ll0kn4XA6byv9/Vw834kX19e7keRQCzhRyk6bJJYRvD1YTXuhRdeqDj77LPPtNls400mU7HRaCzFFggEVJ/iSqhsicFgKIXUKL6bvB6fz9fj9/u7Kb4bPjaK67Xb7Q0HDhw49IUvfKEd2XUb7WpxHIYvXRgJ8AELkzRso1gmKrwkBfjG7373u5Zly5ZNKS8vn2G1Ws80m83YphPI0wnQUemQFp0IzQR9tdfrxXbI5XId6ujo+PCuu+6qXbNmjYfa9NMmngDoBmt+hIe944M53AUhwqwCvXTp0qJrr732opKSkk8XFhZ+imC+gIAryAZB0QnlJuB3OJ3Ot3p6el5/6KGHttxzzz0O6pse+GEP+3AGnKE2EhgG0tAFt99++4WkoT9tsVgW0DaH4guzAeg4+uD0eDxbaXuDNPzrt9xyy3bS8G4qB8BF6OOoKr+yDDfAB0B91VVXFf72t7+9lLT05QUFBZfQoYWtnA+ux+12v0ra/W+/+tWvXlq5cqWTBjUsYR8OgDPU8KGtjR9++OHHx4wZ8+2ioqKv0X4lbfnsWh0Ox9+bmprWzpgxYxsNFBpd1Op5bcbkM+AMtgr11q1bTz/zzDP/gy4Qv02zGtPzmehIY6MZmmq6UF176NChJ+bMmXOkD3QR9khFczY+HwEXwTbV1NTMI229FCYIXSTm43gTho8uUgMwYUir3zN16tR3qAIfbXkJej4dcIxF1dbkm44ePfqZqqqqpTT7MZf2pYsgAZqN2dTS0nLP5MmTX6EsDDrDHqFU7kTnA+Aa2BMmTDBv2bLliyNHjlxCZsgFuXMYhr6nZL7saGtru/eiiy7aUF9f76UeAfKcBz2XAUffVbgJbAuB/Y3KysoldONl5tDjkrs9oBtL+1tbWwH6UwS6/mZSzg0sVwHXTJG9e/deOGXKlOWksS/MOelncYdJo2+vra396axZs7ZTN0XTJYt7Hdq1XANc1dg0DNOqVatGLl68+DZa/3E1XTwCeOn6JLCly6ncU9+mNLnBZRLOYPAHHI5H2l5/8TdHbl3SRjUx6DkztZgrgKOfDLf5xIkT36moqLiLzJG0rAFJAomsKDp1W51S74IZnSIX8DcrXV3LlK/Oe5xqZPsckGc96LkAOPpowrZ79+5ZNK31BzkzQtKI4qxvV0dJTSLJ592kHKu7QfnPxXupFmhzbFkNeTb/tGsae/bs2Va6wr/lrLPO2izhTgLQZIuaaMp1yvTNyvNbb1HomFB1ZtrAUNYqymztGMNt2rhx44T58+evohs1n0r2+AyX8mnT4KIAvZ63lA82f1/55TX1FJ21tnk2As4zJObq6urP0BTgCmlri2TFDmcEcHQDtnlz4w+Uyz+Hm0Rsm2PuPGtcNpkomtZesGBBYXNz8210d+05CXfWsBLaEQNd5I+e8JyyYettCh0zyoBrpawyWbJFg2twv/jiixPnzZu3mhZFzQ2VqIyJRwIZ0+BiZzyeTcqebVcqS350nKKzxmTJBsDRB3WWZN++fXPpps060tpVouxkODEJDAng6GIg0KI0Hv+mcsXnN9FeVsyyDLWJwnCbadXfomnTpm2UcCcGc1blNhiqlNMmblT+9soi6hdmWKC4hlSJDiXgaBsCsNDKvysnTpz4JIWLaJMupyVgKFLGjHtSefrNK2kYFtpwjIeMs6FqWIOb7kr+Yty4cX+m2+0446XLBwkESHuPrPqz8uymX9BwhhTyoQBchZseQiigdcj30grAO+SDCPlAtW4MeLikdMQdyvqt9yp0rCl1SDR5pgFX4V64cGERvdhmRWlp6XU6scjdfJNAcfF1ysqNK5Q5C2F+ZhzyTF4AqHCPGjXKSjdwHqUHfr+ab8cyW8YzZLMo0QTgcj2jfO/S7ynNzS7KxtOI0UqkJC1TGlyFm3pccPDgwfsk3Ck5drlVidX6VWXFxvvAAG0Z0+SZAJzhtjQ2Ni6ld5D8KLeOjOxtyiRgK/6R8uy7S6m+jF14phtwmEBow3L8+PGr6FnJm1MmLFlRbkqgtOxm5am3rgITtIGNtJrJ6QQcHcdPkYUuKL9MsybLKSydlICijKxcrjz+0pdJFKzJ0wZ5ugBnuM27du2aT7ffV9JUIGCXTkqAJEAsjJ2wQlm1fj7tpPWOZzoAB9yo1/zSSy/NoLdJraMwFsdLJyUgSqBQGX/GOuX+FTMoEpCDmZRr8nQBbqIHgovnzp27mtaWlImjkmEpAU0CYGPmR1crF19cTHH4hU854KmuECcMOmo9derUAyNGjLiawtJlWAJZOQ8eTQb27keUyz7xM8qS8jnyVGpwNk0s+/fv/4qEO9oRlWkDJGArvVpZ89JXKC7lMyupApzhNm/YsGH6GWec8eCAAcgdKYFYEhhz2oPK3X+ZTtlSao+nEnDzxWRL0eNmj0q7O9bRlOkhEoA9ft6cR5WPq/Y4IE+J+ZyKSjS7m56jvK+srEzeqQw5epmNyDkbXBRPT8//Kl++6EaKSok9nqwG10yTHTt2fJpWB0q4xYMlw4lLoJhu5z/y3KepYEpMlWQBV7U3mSXFNN99H71YPfEByRJSAqIEwND4yfcpFyzgqcOkGE2mMGtvy2OPPXY9vZjnTLGfMiwlMGgJWCxnKktv/QmVT3pWZbCAM9zmxx9//IzRo0fj0STppARSJ4HykTcqN//3GVRhUqZKMoCrC6no6Zy7yTSxpW5ksiYpAZKA0WhTPj73dxRKakHWYABn7W3Zs2cPvjH5eXlApATSIoGi4i8oK56/tA9ysAr2EnKDARxlzJdddlkJ3dC5N6HWZGYpgUQlMH7SvbRWpYSKsamSUA2JAs7a2/ynP/3pOvrc9eSEWpOZpQQSlYDZPFn54a/xcDoDnpAWTxRw5DfRJ7DL6HUPP060rzK/lMCgJFA+8sfKZd/CqlRc9yXEbCKZWXtbli1b9gN6EX3loDorC0kJJCoBk6lS+ebVP6BiCU8bJgI48ppxU2fs2LHXJNpHmV9KICkJVFZdo3zsY7j5w6ZKXNXFCzhrb/PDDz/8HbK9x8ZVu8wkJZAqCZjNY5Wf3vkdqo4Bj8sWjxdw5DPRt3KKTjvtNNxhkk5KIPMSqBz1E2Xq7ITekBUP4Ky9LevWrfsGae9JmR+ZbFFKgCRgLpik3HL3NygUty0eD+Cq9h4/fnwBbTdIQUsJDKkERo+9QSkr47ubMfmNlQHaG5v56aef/ndaUDVtSAcnG5cSMFumKXc/fDGYpI35jCiXeADH3KOZ7lp+Sy6HjShHmZApCWA57dgJ3wKTtIFNQB7RxQIc6abLL7+cniEesTBiLTJBSiCTEiguWah8/isjqEkAHpXhaIk4M5BuXrp06ZfoOUtcvUonJTD0EjCaipSvff9L1JGYU4bRAEeaCjh9P+fr0jwZ+uMqe9AnAZgpo0Z/nfYY8IgcR0qA9sZmeuCBBybZbLZ/66taelIC2SEBKzF5zTJMWbMdDl5DXDTAVe29aNGib5D2jpQvpEIZISWQEQkYicm5C0QtnjDg6uwJPY72tYx0WDYiJZCoBMorGXDW4iE1hNPMOBMQb1qzZs0MmvueHlJKRmS1BCZYYZoOA2exTFd+dT/eTsuzKSFaPJwkNMDPO++8+fLiMvdA+Z8JJcqPN+9RGnocoZ0PBELjFF2cbjdYIEykvq4wWehd4APb05dBari4gaWCe/p8AT+uFOdT4j7aoJTB7oAGowFurqqqmicBV5QPmgLKX3b7lVbHANmRLLPVVSjnGT6hzFRa44dHHEqIHhQThXC8+YQiqQ66K9rnvakoD1O9DPiAJvSAo8vYjMXFxWZ6U9VFA3IP052fv+5VGntzBW4+SCYl4KtQ/L3tpCBJ0+WpC/hKLgKrvb29DDj41Q4WIvUOcaZHH310lslkGqlPHI77uQd38CgZTBbSVBVKXk+CGYwjS758/ywwS1sIz/oI1uCmmTNnflKaJ7l/OmuQG3migQ9xnvg0W2gaN/2TfYDzoLQDFw5wVYOT/T1XAq7JKacDKuS2csVg1B/unB6W2nkwaiiumEs7rMEBueZEG5zpN9Gt+QKyv+douWQg5yXAkPvtHYO78MxiCZisJXNsVRML7C3HndRN5li1w/WnNPaNDz744Ll0ZpRm8Zhk1wYhAYacjPJBlM7eIgHFUFryxZvPpR6q/Io9DavBJ0yYcJY0T0Qx5U84CDnNrtjb82dQZHqZysefRQPaRltEDc4JRlr7PS1/Ri9HopeAwWRWjLYKQiF/NLnBWgpmocGZY3XYoomCBOybaPXgNKnBVfnk7R8V8qLyvIAcrBoLiqaCXdoYcvXYMeB8KmPfSIBPUVPln7yWQD/kjEEOD7fABsBVfvtGoTIdYoOPHDnSXFhYODmHhyq7noAEgpCPUPyOTiql3QBMoIbsyGo0F04uInYdbW3RTZRbb711AnXZmh3dlr3IhAQYcpooz0RzaWmDTk1r0YLrwS4GwRaJuoMGmXrjOeecI5fHQiLDzKmQF9ILXFXIGYfc8q2jZ4JdBlyFnE9ZHolx1KhR8gJzmMHNw9Ugz8U7nrijWToyZCZFtMEBu7GoqGgiD1j6w08CKuTWUsXv6s65O56GApVdlWM+cnoNbqB3D+JzEdINYwkw5DlnkxvNYJetEdVEETU4Ioy0RLZEzoEPY7r7hh6EvIQ0eQ/FZP/sCpilPgNwKG0VbgyFdzTqCXC8ZFw6KQEAoxgLS3NoPbkR7GosIyxqcBxSgwQcYpCOJWDAOnIrKUbS5AH9M5GcKUt8OiEZcK1HbIMjQiVfAq7JRgb6JADIDQR5tpuuAaMGuGaisAbXIiTgkutwEujX5L2UnJ02uSEIOHdfZVpqcBaH9GNKIKjJQ6yAmOUylYHsa+6cprBZg3MfpA3OkpB+WAkENXmxEnDbs2+e3KABrvU9RINTih56LbMMSAlAAqomL7BRQFOU2SGYgMouOqV1jGHWIrxer50+8iofV8uOQ5a1vVA1OUEecOPtWdlhkxsUH/2saE5lmufBtVifz4erCOmkBGJKIKjJ8V0ETT/GLJPODAG/X8+uOg+O0087BaHB09kJWXd+SSCoyYuUgIceaB/qeXL/AA2uci3a4JB8QGrw/AIwE6NRNbmlcMht8oBftT40ZY2xsw2OsJogAYcopEtUAqomt5Am9w6dJg8ENPNagzysBs/2W7KJCl/mz4wE8OYsg3loNLnKbNAG1+DGqFmDI1LdpA2eGRjytRX19XAEecDr6kMqcyM1BNTrR41ltCxqcAYc6yOlkxIYtASCmhyP9WZ2doVmUXhtL1hWHWtw3lccDkcb1H22L6zROiwDWSmBoCa39mnyDHSRmPV7nG36lliDs1r3t7e31+kzyX0pgcFIQNPkGbrj6be3gV287Z95Vk0U7MCpkdXV1bXyIjMoEPk3eQmokJsKglOIAD1tm6J4Wo7UMsd9PQ+wBse+CvgzzzwjAe+TjvRSIwGGnB4qS02F4WohE8W58zk94CGzKP6XX3652+VyNdN6lFHh6pFxUgKDkQAgDygWxeDzDKZ47DJeV3PvvtfpVQChJgoKs80C+8Xf09NzRJopEIt0qZQAIFfou0GpXoUIVv0uxxHqq8ov+cxzyDShmsFut9elcmCyLikBloAKuZEm71Jsi/vdKrMi4GqTbIMz8cjgw0yK1OB8SKSfagkMgDwVlZMGDzg6oJR9tIFh5lmzwdEMR/pPnjxZiwjppATSJQHVJg/QRaffm3wT9Gvg624GswPgRsXhNLh//fr1u2nRFYCXTkogbRJQbybCXEl2diXgCzh2bthNFQHwAZAz4BgEgEaijz4C29zZ2VkjzRSIRbp0SiAIOT7MgCnExDeyThS/s7uma+vaZqpANFHUbusBZ8i9ra2tWyXgqozknzRLQIMcF56JOiLc19O6lYrB1hmgvVGVCDj2VQ1Ovq+mpmaLBBwikS4TElAhx7vJE55dIWhb6rZQH6G9WYNrXRYBh/ZmDe5buXLlVj85LacMSAmkWQIa5Im0Q4x2bXkUGpzhZo7VWsIBrp4JGzZsaCc7/KDU4olIW+ZNVgL9kMe2x4P2d+dB+86X8NFP1uARAUffWIPDnvHSdOE2CTjEIl0mJRCEPA57nAj3dzXj468qr+SzDa51V9TgiGTAcTZ4yQ7fLAHXZCUDGZSABnlUm5wgba3dDFZpE00Uraf6Bx5YveNM8C5fvnzbJZdc4iwuLqYH7Yavq+ytURq70rRIKIvEGlmZAYswDjZCRBchLUJ0ULeGqYzaQL8AfEj/PA5nz8u/Zw3O2ntAC+EAR0bVnnn33Xe7Gxsb35gyZcqlxhR9mGj/oU7liWfrlPZOd5jRZGfUbK9bmUnPGIYIeEB3B8i1PyUKBHTo+vPFEYrcfpR6orYfR6NZmiUQ8Cs9XU1vbDiyEysI2f5myLVe6wFHAqSlanDyPTt37nz+9NNPTxngv/3DHqW5lV4tkGPO67ErPi+9pgw/mYAGfjyO8zJo+vL6dH2dmc6vb1/fP31/9Pn1+7HK69P15fXt9eUP+LxKR/OB5yk7flrFOfABNehtcCSKgHuvu+66t2n5bGtk7TGgvpg7uQg3BmW22BSTGa8pIwehx+s4L3wxzOXFOM4j+sjHecSwmEcMi3nEsJhHDIt5ENY75IXjMhxWI+P4E6u8Pp3bYV/fHsWDRb/f1Vq3b9XblBzxAhNFowEOte+hlYWO+vr6f6QKcDSaq06F3FQYdeUEow9fDGfLmMU+ieFI/RPziOFU5Y9UT/T4gOJ2tP/D7e7Bmz+hwcNeYKKOcIAjHiaKZqa8+uqr6+l9KYgf9g6QG/sgxwHXbxAQgyCG9fmGal/skxiO1B8xjxhOVf5I9USLV8j+7mjd/Rz1RzRPwGuIiwQ4zBScFaDas3Tp0r0dHR2HpRYPyo8hD+7Jv5mUABj0eeyHjx58Yh+1y4CDVTAb4qIBzpCjEjfNiW+Qd+775dcPeTRdI9NCf+OSlQl98M3RvAFM0sbmCVhNCHAcSah8TYuvXr16PT2MjAql65OAapPjXXzRnP4iCnk5Llw5ToMvhsPlzYU4cQxiOFLfxTxiuC+/3+/xNB9/cz3tito7rHmCIpE0ONJwRrAd7l61alXjkSNHXpBaHKLpd5hZMfELJ3FA9Buy8oESw/p8vC/mEcOcnmu+OAYxHGkcYh4xTPlx38DtaHnhZP3rjZQEDR5xehBF4eIFXDVT1q5d+whp8YhnS7DK4fdXhdyEd/FJl04J+ANef3PDpkeoDTZPkgIcfR2gxe+7776aY8eO/VNq8dDD2A95sjamLE8/eSTggRsuLj2Otn821D5fQ4lxaW8cpWgaHOnQ1pqZQmHXU0899VePxxPWoEeB4ewYchwadhzmw4V4jhPDnJ6oL9YhhuOtRywjhuMtr88n1iGGOZ8YJ4Y5PZKv+H2BthOb/0pl8F5mEfCoFkUswNEHVICLTdVMufPOOw+QFn9TanGIJtTBHjeSucIHCjkQZsfhSOmcL14/2fqSLa/vZ6z6YqXr68M+1p24nK1vHq3++wHaZfMETEaFG2XjARzaWgOcwq4XX3zxYdLiKC9dGAkw5Pqf2czso0OMkRhGXG5u9N5vpb3p/YdpAKy9AR+YjGlJxAs4a3GcPa4lS5bsOnHixGapxUkaEVwQcnqrasYdw80wowMcl/HOJN0gtLfb1bH5yMHHd1FlDDhr75QAjk6yFsdVKyB3bty48UE5owLRRHYa5JgSY8dhniZDPMeJYU5P1BfrEMOR6hHzIBzLcV8j1aePR31cRgxzPjFODPel+xWvv6N5x4OUhCWoYA8MxqW9KV9cJgryAXBocQbcdeONN+6kd4k/J9eoQDyRnQq5se+Fk3yg2UcxDvcdULUmjotcbeQULhtvffr8XC6Sj5a5TORe9KdwXq5PXz5KOn0WUHH2nnyudt/qnVSMtXfMqcH+xuMHHGVYi6sXm2jwpptuWk4PJrfLNSqiSEPDGuShSTImggTUNSdee/uxA2uXUxaGO27bm6uNxwbnvKzF8fOABp2vvfZa89atW/8oLzhZRJF9zVyJnEWmCBKgb14qPZ01f2xv3o03VsE8AXNx295cVSKAo4yoxVXIFy9e/Aw91rZLXnCySCP7Jpo+NNLnPMQvHXAYfjz/UDuXEcNcVowTw5yeal9sQwxHakfMI4bF/HhiyuPq2LV/293PUB6GO2HtjfoHA7g4o4LGnWvWrLnL6XT6pKkCkUZ3gNxAL4HnA4rcCMfrOG+k8rHS420n3nyJthcrPxgK+D2+5oa37qI+qHyRj4vLhLU3xpAo4CjDgOOMUrX4HXfcse/AgQPr6I20SJcuhgQYcvVijS++pN938RpQHD0n1h378Cms99Zrb7CXkBsM4GiAIVenDGnfccMNNzzU0tLSKE2V+OSvmiuYXZFOkwDmvD2e7saa/X99iCLxOBoAF7W3ljfewGABZ1ucpw2d7733XusTTzxxE33+xCNNlfjED3vcqELON2WGr0+WCS03cXtaTmy6qbutppUkyHAnNO+tl/xgAUc9DLmmxWnacAeB/hDdANK3I/cjSCAIebi3d0QokKfRZHcrvZ01D9XtW72DhqjX3mBtUC5ZwGGqaFqcws5LL7109dGjR9+WN4DiPx7DHXLc0HE5Wt7es/m21WCob4PiTOimTjiJJwM46gPg2PiCE2ee/Wc/+9lvyB5vkvY4SSNO12+uxFkgT7LB7vZ6uptq9678DQ3JThsYggkAppgvCg7OJQs4WkUnMH2CMw6dc9ANoJNPPvnkL8ke90p7nCQSpzPS9CFscryHbzhsEEvA7/a2NLzzy46WXSdpV+WH/KQuLFEvu1QAzrY4mypqJ+lVE9u3bdv2Z9jjEnIWd2wfkBsM+W+T9813093K6j/X7l+9nSQjwp3UhaUo5VQAjvoY8gGmysKFC1fSgqxX3G6ckNLFKwEVcu3rY/k5swK729Hb9Mqed29fSXLRmyawCAZ9YSnKOVWAo06GHDTjQgGdti9atOjXdNH5noScpJGAU00VI74+ln+OXv2gOJ0t7x3cduevaXQqJ+TztGDK4IbkUg24aI+rkNNXIrquuOKKG+kBiYNyURZEHr/LR8j99OFXt6v94KH377/R4WjtImkAcBFuMJQS7Q1Jp0NFoHNiBw0Eube2tnbT/PnzFzz3UtMIA76mJV1cEjAYcIhInLgTkuMOZonH3XW8dvdff9zZur+JhtNLGwMO8zal2hviSgfgqBduAOhki7u6u7u3NHWO+yxNidkk5EEhxfM3CHmfSHN0zQq98Fjxunta6w+v+9GphneO0Wj0cKdUc7Nc0wW4qG608AcffNBrMlvfLx0x5XMGo7lAQs6HIbbfLytNnLELZUkOrO2mF2b2nDz64rX1hzccpG7p4YbmBuApd+kCHB3lI8G+2vnOlr0dBYVV+4tKxl1MswWW/gOX8rHlXYUsq+C8ChaeZv8/vOqYvo5hb2l48+d1+9fiNrwId8rmuyMd7HQCLrYJyDXQ20/tOGUxF+6wlU1aYDQWFPGBEwvIcHgJ9MtKE2f4jFkQq9rcnu72xrp//OTIgccx181wY8477XBDBJkGXAO9o2VPm+JzbioZMXWewVRQ2n/g0C3poklgoKyyc57cTxeUXnfHCVrXfU1D7fr9NJ4e2gA4w530OpNoMuK0TAGO9ljlaJB3tVd3u1yNb5ZVzPy40Wyt7L+Y4u5JP5IE+iFnsUbKmfl4zHN7nG3VdXtWXNvU8GYd9QBgZxxujDyTgKM9OAZc9e1dDY6ejoOvl1fNnm0yFY1TaApR/QhoMK/8G0UCGuQGEmUWKHK83jhA89z0gvoPDu1cfn1b864T1H29WZIRzc1iyzTgA+CmTqj7Lkeru6156xsVoy+cQk+fn44DJyHnQxTd1yBXRRk9bzpTsSrQ7/MoLvvJN/a/d9uSno5jLdQew40bOVghmFG4Md5MA4424UJA97rtvub6f71VPupcq9lSNttgNBLj8oZQUFzR/w6UU+ZVOeD2eV2B3u7ax/a9e/PvXI7OTuqxCDcuKDMON6Q2VICjbYacJ/jpHYte/8mjr35gtVUdLCwaPYfmyunDlFKbQ1ixXBByiDRzTl0RGPBiPXd7S8Pbyw68d+/TdAz5YlK8QzkkcEMSQwk42mfI4Wugt53c3uB0nHyttHz6THo4dywOnjRZIK7ojiHPxOw4lg4EYJI4mnfW7V95ff3h9bupd9DarLlhkohTgZk9+/pElS2AA27eVOjt3fW9p4699kr5qFkmc0HZR6TJ0nfEYngDzZUYmQeZrN6ZhEnSeXj1nk2/vr2nsw5vn4LGZrj1i6cG2VLyxYYacIyAz2zW4hro9HPnO3nstZ2FhZX7Cm1j5tCDAEWkyqU2j3HctV+7FJvjWE+CWRKvt6utpeGtX+7f/vv/6zNJGG7McfPFZNpuv8cY/oDkbAAcHRIhF0FXw21N2084HfWv2UonjaHPhEwJaikJ+oAjqdvRINfFD2ZXfSILF5I+Fz2kUP/akT0rlhyv2bCX6mKNDcD1N3CgqIbc4RzPJof+YOoEJx7eioNPl+FDlHSxqdgQnj77h5+oGPeJXxQUlE3Cg7qZ+EmmdnPWYYYjGRec/nMrbnfnsbaT2+6v2f3wZqoPJghDzVOAvNwVDbLCSqbplJTNNsAxKP5hBeR4OBGfSQDkDHpRYWFFyYzzf/Gd4oqpV5JGt+IZxlRqLGorr1zwmdjEmOMZEp/X4erpqFld/f4Djzud7ZghgabGBrDZ1sYsCa/lTqwhKphOly0min6MLCT42KAV2Kbzeb1Ob9Pxf+32utteLSqZOJ4++jRJmi16Efbv95/8rDsi++pzFX3mCM1kvXPkw7X/Vbd31eskc3H6D9pbhBvHJ7mfiv7upjSUjRpcHCD6xyYLa3PW6DBbVM0+4/yffKq88iPXmq0jJuOdf/J2vyjC/nBQk/fviyHRzva6u462N+96qHrng29RHtbUrLUx9cc3bljpsEISq8yKcLYDzkIC5Aw6bHNAzva5CrnZbC6c/pHrLykbefYVZmv5NAk6iy66PwBsV8fhrrYDj1Xv+uOr9GYyBpt9ntcWbe2s1NriiHMFcPSZtTlAhzZn0AE4ww7fOuP86z45ovLcKyzWkecEL0RN0kYnwYguaGP78MJLetl8277O1j2Pffj+n96mPAAZG8BmHxobYPMdSYCdtVqb+qa5XAKcO40+49qBQYc2Z42uAk77qj919tUfqxh1wZXWosrz6cEKslxQbPhOLwZNFKz4I7D9broL2fp+e/OO1TW7H3mPBMNgi75ojgBqvpCkYG64XAQckkW/sYlmCzQ6Ty2KoBeccc53Z5eP/uiXrIWjFpjNRTaD+no0FM1/2DWo6cIRb3D1eh12l7P5jY5TH6yv27cGt9cBsQg1wtDWvIl2dk5obeq75nIVcB4AQ86gs+nCoLNmV7V8YcnY4ikzvr3ANuKMz1mLqi4k0E3q+7nVu6OoIn+cOv9NUyJ4+ACfBKG3t263d9a9XPvh2jecPSdxg4a1M4BmyBlqnvaD1s4ZcyTc0ct1wHlMetBhi7CNziYM+6qmrzrtwtHjJi/6rK1k/OfoiblpAJ1hz0XNzpoai6AANTafu/uwvafh5cajG//ZcmL7KZIJA8xwiz7SoK1ZY+c02DQO1eUL4OJ4grZH0E6HRmetDsAZetE3T5q6eHr5mPPmWQurzjcXls8i0K20VFcx4iWYeA9JFpoyA4CmJatYI0JQu7zOjr0uZ8v7HU073zlW82w1dR7aGPAC5nA+0llj8z2HnDNFaAxhXb4BzoMMUtlvo0Ojs1bXA69qdEqHby4sLLeOm7p4Vln5tAsshRXnFxSMOJseirbgAhXPjAZvmrDYgn7/jRRuPjV+EGLUxbzRBSKWqdJ7RnChGKBPftAt9AMeZ/v7XR2HdzTWPLvX6eyAycFQA2jeGHBOY23NGhuNcEMUzA/HRyo/RhM6ChF0aHbRVhe1O0POceybiovH28ZNW/SR4pJJ55oLiieZzLZJJottPFY2BoHHWnWAT1Wr0owkUn18JJYoHv9xUQiQNd/roJfnNPi89mNed++x3p5jexoPb9zV29uAu4qAlDUx+ww2fI6Dz0CL9nWkzlD23HZ6qef2aKL3HmNl84VBZ83OQEfyOR98lDWOnjB3dFnFOZOttjGTLIWlk81m20RaMlBpUEw2Ay2QoRPARg1SffQXF7F9vtpFaOEgxbSrhuhDAV57gBZ+BBSf3e9ztXq99uMeZ/dRl73pWFf7vqOn6jfBhmYoRe0rwhsuLOZlu5p9tTv5/Gc4Ac7HEWMWN4ZW9AE6Q83Q8z6fHKKvQq+r10DmjrmoZEKx1Ta6yGItK7aYy7AiUvF4u+weV1evy37K4eip7yWzAmBCi4obwwyfta7oI8xAM8TYF/NwWbHevNXWNPYQNxwBF4Uggo4wg8q+CL0IuAg350Ec18H1oi0xjH3RMXiI4zBrVwZcDyxDy1DzPudnn+tjX2x32IQhfOmCEmBZMJDwGXQxLMYBbqSxz5AjDg4+b7wPH9DBMXz6fUCKOEAs+gwv+0gTw9jHBsd+cG+Y/uUDMUyHH3XYLBsGNJIvQq3PgwbEesQGGUDRR1i/Mez6eHEf9WJfOp0EWPi6aLkbQQIsLwYZ2aLFiekRqhwAJkPK8KJMtLhIdcr4PgnwwZECSU4Cejnq91G7Po7BFVvWx+n3xbwyHIcE/h9VLWRYHWXC/QAAAABJRU5ErkJggg==',green:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALgAAAC4CAYAAABQMybHAAAltklEQVR4Ae2dCXQcxZnHR3NoNDp8SD7kU7bxFXCchBhMYoLNmhCcOBBykGw2gYTkPV6AhGXD2sTZJQcJG3jsgw3hscuCsTEsOAQW1sbY+MAHxpYtHzI+5EOy5UMStnWPZkZzab9/j75WTWt6NKO5Z6r82lVdXV1d9e/ffPq6uro7zyBDIhXIi7DyngjLyWJRKhDpCYiy2pwoztrpxSwCb+d1bayFm9f1Yu3+cj2MAgOJH2bXnNnEGiHWppW8d999d/inPvWp6YWFheNMJlOR0WgswdLT06PElFdM+xbn5eWVQDXK76TI7vP57H6/v5PyOxFjobwuh8Nx4dixYye+9rWvtaK4ZqFVNY/TiGUIoQCfsBCbcjaLNVHgJRUQG3/4wx9ali1bNmXYsGEzrFbrdLPZjGUagTyNAB2ZCLXoh3CJoD/p9XqxnOju7j7R1tZ2/LHHHqtbtWqVh47pp0X8AaAZbPmRzvnAJzPXhRBhVoBeunSp7b777ruuuLj4xoKCghsI5s8TcPnpIBT9oNwE/D6Xy7Xdbrd/8Oyzz+5+/PHHndQ2LfA5D3suA85QGwmMPLLQ+b///e/nkIW+0WKxLKBlLuUXpAPQEbTB5fF4KmnZShb+g0ceeaSKLLyb9gPgIvQRVJVdRXIN8CCo77777oI//vGPt5CV/n5+fv5NdGrhK2dDsLvd7k1k3f/n17/+9frly5e7qFM5CXsuAM5QI4a1Nh4/fvza0aNH/4PNZvs2rZfRks2h2el0/u2TTz55dcaMGXuoo7DoolXPajcmmwFnsBWoKysrJ02fPv3v6QLxH2hUY1o2E63XNxqhOUkXqq+eOHHitblz557pBV2EXW/XjM3PRsBFsE21tbXXk7VeCheELhKzsb9Rw0cXqT1wYciqP37FFVd8SBX4aMlK0LPphKMvirWm2FRfX//lESNGLKXRj3m0LoOOAjQas/Py5cuPV1RUbKQiDDrDrrNX5mRnA+Aq2OPHjzfv3r3766WlpUvIDfl85pyG1LeU3Jd9LS0tT1x33XVrzp8/76UWAfKMBz2TAUfbFbgJbAuBfUdZWdkSuvFyZepxydwW0I2lo83NzQD9rwS69mZSxnUsUwFXXZHDhw/PmTJlytNksedknPpp3GCy6FV1dXX/OGvWrCpqpui6pHGr+zct0wBXLDZ1w/TSSy+V3n777b+j+R8/pYtHAC9DrwIO9xHD5c5XDF5fS0ya0MWo3+nwvrBx47nfLLlvKypj0DNmaDFTAEc7GW5zQ0PDD4YPH/4YuSMJmQMSExVpsPPxhjsMHt/FuLWkp8dwqb3dt2zhnD2vUKXsnwPytAc9EwBHG01YDh06NIuGtf5DjoyQGmHC4XMLwmwd/Caft2fnmXr3A3d8Zf9hqgXWHEtaQ57Of9pViz179mwrXeE/MnPmzF0S7sEDGuueJnPevCuusO76sPq6R2bPHm2l+sy0gKG0NZTp2jCG27R27drx8+fPf4lu1NwQ6wnKlf0TZcFF/bwe//Z9uxw/vvfuj89Tftr65ukIOI+QmE+ePPllGgJ8UfraIloDp5MBOFoB37zxQvdPvr5gP24SsW+OsfO0CenkoqhWe8GCBQWXLl36Hd1de1vCnTas9GtIXp5h5LgJ1re3H7z2dwsWjMTUYlwrpZXLki4WXIV73bp1E66//vqVNClK3mLvh1RkGcmy4GJr3B7/zkOVXXfd86PD5yg/bVyWdAAcbVBGSY4cOTKPbtqsJqs9QhRPpqNTIBWAo4U0l+1yw1nXd29duH8nrabFKEuqXRSG20yz/hZPnTp1rYQ7OpjTqTRNUhwxtsK69t3tcxZTuzDCAsOVUiOaSsBxbAhgoZl/d02YMOF1SttokSGDFSCabeVj819/v3LOXdQNCy04xynjLFUHVuGmu5K/HDNmzHN0ux2/eBmyQoEe84gRluc2V13zS+pOSiFPBeAK3PQQQj7NQ36CZgA+Kh9EyAqqgzpBQ4h5w4aZH6URlidwrmljSix5sgFX4F60aJGNXmzzYklJyf1BqsiVrFOgqNh0/5ubJr24aFEp3M+kQ57MCwAF7pEjR1rpBs4KeuD3W1l3NtOkQ6kaRQnXfZfL/+Y3bqz7Ed3f6KZyPIwYbpe4bEuWBVfgphbn19TUPCnhjsu5y6hKCgqM33pr4+QnwQAtSbPkyQCc4bY0NjYupXeQ3JNRZ0Y2Nm4KFBab7tlSdc1SqjBpF56JBhwuEI5hOXfu3N30rOS/xk0tWVFGKjB0mPlfN1bOuRtM0AI2EuomJxJwNBx/iix0QfkNupJ+mtIySAUMpSPyn16z5fPfICnYkicM8kQBznCbq6ur59Pt9+U0FAjYZZAK4J6+aczE/BffWn/1fJIjoXc8EwE44Ea95vXr18+gt0mtpjQmx8sgFVAVIEgKJkzJX/2fq66aQZmAHMzE3ZInCnATPRBcNG/evJU0t2SI2iuZkAoIChiNeUM+O6d45cLbxxVRNv7Cxx3weFeIHwwaar148eJTQ4cO/SmlZUiyAuk4Dh5Ogs5O3wsLPrfnQSoT9zHyeFpw/FhQn+Xo0aPflHCHO6Vym6hASYnpp29v+dw3wQ4tYChuhjdegDPc5jVr1kybPHnyM2IHZFoqMJAC48Zbn/nzi1dNo3Jx9cfjCbh54cKFRfS42Qrpdw90OuV2rQLwx6/9QvGKhQsVfxyQx8WKx6MS/EgUv5vmGTw5ZMgQeadSe/aSvJ5pPrgoj73D91/zr97zEOXFxR+P1YKrrsm+fftupNmBEm7xbMl01AoUlRjvWb1u9o20Y1xclVgBV6w3uSVFNN79JL3LLuoOyR2kAqICYKhisu3JBQvG8tBhTIzGsjNbb8vLL7/8C3oxz3SxoTItFRisAhaLcfqyP435Oe0f86jKYAFnuM2vvPLK5FGjRuHRJBmkAnFToLTM8tCfnpk5mSqMyVWJBXBcWFro6Zw/0Z+Vwrj1TFYkFSAFwNQX5w/5N0rGNCFrMICz9bZ8/PHH+MbkV+UZkQokQoGiQtPX/rb+M7f0Qg5WwV5UYTCAYx/zrbfeWkw3dJ6I6miysFQgSgXGV9ieWHjrqGLajV2VqGqIFnC23ua//OUv99PnriuiOposLBWIUgGLJa9iya8q8HA6Ax6VFY8WcJQ30Sewh9DrHn4WZVtlcanAoBQYXmr62fe+NwGzUnHdFxWz0RRm621ZtmzZT+hF9GWDaq3cSSoQpQImU17ZnfeO+gntFvWwYTSAo6wZN3XKy8vvjbKNsrhUICYFykZa7r1mwUjc/GFXJaL6IgWcrbf5+eef/wH53uUR1S4LSQXipIDZklf+m99N/AFVx4BH5ItHCjjKmehbObaxY8fiDpMMUoGkK0BW/OezZxdH9YasSABn621ZvXr1HWS9Jya9Z/KAUgFSID8/b+KjT02/g5IR++KRAK5Y73HjxuXT8oBUWiqQSgVGlVseoCnZfHdzQH4HKgDrjcX8xhtv/B1NqJqays7JY0sFLPl5U59bVbEQTNLCfOoKEwngGHs0013L78npsLo6yg1JUgAMjhlb8D0wSQvYBOS6YSDAsd30/e9/n54hHrpItxa5QSqQRAWKh5gWffWbY4bSIQF4WIbDbcQvA9vNS5cuvY2es8TVqwxSgZQrYDQabHffU34bNWTAIcNwgGObAjh9P+c70j1J+XmVDehVACyOLs//Dq0y4Loc621g59301FNPTSwsLPyiVFcqkE4K2ArzvvjPv52GIWv2w0P64uEAV6z34sWL76BfjF65dOqzbEsOKQAm5/9diWjFowZcGT2hx9G+nUO6ya5mkAL0WBsDzla8X+tDWWa+uDStWrVqBo19T+u3l8xIawUsplFp3b54NY7mik/703/MxNtpeTSlnxWHk64NKuCf/exn58uLS6086b8+3Pqg4WDNHw0O5yf9Gkuf9+sX6N3twXmaVWwMkUWv+Q7eLVShHk1mv310Kg9Vrt/h/PStQoN/PlVxhBYYa7AbVCwc4PQxzxHXS8ANhkZ7jaGq8W8Gh6ed9MuM4C2ebrD7Jhp6CIJsDr481/UGw4nnqY8MeFB3tYDjF6BY8KKiIjO9qeq6oNI5urL+1L8bOt2XM673PrPf4OjwZDXk/p6e68BqV1cXAx5kxUP54MgzrVixYpbJZCrNuLOagAZnItyQwWQ2GgppXlKeEec8OwON75V+/YErZlHv2A8P6qieBTddeeWVX5LuSZBWGbnCkDs7PQa/PyO7EL7RZI5HTCj+EhXaTwt7IKpfprXgintCBU3kf8+TgIfXNlO2AnJbicVAt7izLoBR2xDLPOoYW/CgP1eiBWf6TXRrPp/877lZp0YOd4ghhyUPNUKRydJYbaa5IyYU5l8+53BRP5hjxYprf9NYNz7zzDOfpl9GSSZ3Wra9vwIMORm9rArUn5Kbfzzt09QphV+xcyEt+Pjx42dK90SUKXvSDDksedYEwnrYyIKZ1J89tOhacN5gpLnfU7Om87Ij/RRgyLPJiFlsZjALC84cK/1GBgdswLqJZg9OzabOcwdl3KcAIC8oNuMtrn2ZGZpCHyxW0xXU/H4Xmgw49xLrRgJ8Sob2VTY7CgVUyLNgnLwXcIXfXgkUpvv54KWlpeaCgoKKKHSSRTNYAQXyIrPB1eXVzOLIrE5ZrcaK0lKbuaXFCbDZYCsuCfcEmcbf/va34ym2cqaMs18BhjyTZ/3TmKB17ncngV1Y8X6AM/XGq65SPsaZ/WdV9jBIAUBuLSSfnPFgIjIoHj2pCFO7xR6oFpy7YRw5cqS8wAw69bmz0gc5cMiwQE0uKrH0G0kRfXDFQbfZbBMyrGuyuXFUQIGc3p/Q7fSRT65O6YjjERJXVX6hCewqHPNRsILAFjyP3j2Iz0XIkMMKBCA3ZdwQosloBLsqyziFogXHBiNNkS3OhrFRdE6GwSsAyPPJkrvJkmeCHVeYNeUBcPbBlc7ziko9AY6XjMsgFVDmkysXnqAjAwIN54NdlWWkRQuOLuRJwCGDDKyA0ZRnsNrM5JOn/zi5yZzHgHPz1VEUZCjkS8BVbWSiVwGGXCEkjVUxGlXA1b85bMHVDAl4Gp/BFDaNIXe7vGk7uEL+iOheK0zzKAqkkxY8hQBlwqEBeX4BJmilZ2uNRuX6UeGYW8gWnNelD85KyDikAgy5uzv9xslNRvUiU217PwtOW7TQq4VlQioABRTIrTQzNc1MeU9eD9gNacHVPzper9dBH3mVj6tJlsMqwJB7yJKnyzg5vTXAITRaYZrHwdV8n8/Xpa7IhFQgjAKAnOZhp83gSo/foGVXGQfHD1D9EcKCh+mT3CQVCFKAIfe6yZKrFAUVSdqK39cjsqtwLfrgaEiPtOBJOx9ZcyBAbs7H3JUUd8mnWPCgn5l4QalskICn+CRl6OEVyMld8brp9VkpMuU9fj+7KCrkIS14v9fpZqjostnJVYDuJJIlJ6RSYMrBrK9HAVyFG71nC45MZZE+eHKhyLajMeQ+jz/phtzvy4MPrrIMbUULzoDbs0102Z/kKgDITRZj0g253+8Huwy40mm24KoCTqezBeZezglXJZGJQSgAyA0EOSx5MgLcfp+7p0V7LLbgTL2/tbX1tLaQXJcKDEYBtuSD2Xcw+zg6u8EuflHMs+KiYAVByTx58mSdvMgMCCL/j12BpEFO9Laed9Yxx70t72ELjnUF8DfffFMC3quOjOKjAEOeyMEVfOyqevtFLeD9RlH8GzZs6Ozu7r5E81FGxqd7shapAI1mwCen5zz93sT45H5Pz6UTey52ktb9XBTor1jv3o1+u91+RropkEWGeCoAyI0EebyHV8Bqt8t7htoKuEMCjn4AcqWAw+E4jQwZpALxVkCBnG7tK5DDZ4nT4nb5wawIuNJ09sFFC+7DSIq04PE+tbI+VoAhj5dPjiHCbrsXgNNTGMEWXBwHVyFvamqq48bIWCqQCAUAeQ8ZcJoBGHP1+KF0NHvALCw4c6zUG8qC+995551DNOkq9iPH3HRZQTYrgJuJmKQVa6CvOffUfNhwiOoRXRSFXwYcx0AGCvjoI7CX2tvba6WbAllkSKQCsUKuXGB2eWsr37twidopuihKs7WAM+Te5ubmSgl4Ik+trJsVYMgHMz0E/ndXm6eS6qI3E+m7KHwsxYLTiq+2tna3BJxlkXGiFQDceDe5EiMd6UIPzLU0OneD2d4FDKtBz4L7li9fXkmzs4IKq3vJhFQgAQow5NFUTYT696w5DwsuuieK/416QgGu/BLWrFnTSn54jbTi0cgty8aqgAo5rj0HWHB7vtvhqTnyUVMrlWYLDrhDAo62YQOsNvwZLw0X7pGAkxIyJFWBgHsy8CHhf9tb3Pj4q8IrxWBXhRs1iBYc6ww4fg1e8sN3ScAhiwzJVoAhJ1dc/2YnNaq5oWsXRQBcdFHU5oo3epAJwBly79NPP73npptuchUVFRWoe+RgwnXRZmh3YBQqu4OuMQuyiX0a6GQHCuhs1D1GX7VBKVhp7APgtfvSS4dcm1bUsQVn6x105FCAo6Diz3z00UedjY2NW6dMmXKL0ag19kHtiHil9nyj4b2dVYaOLvEVFhHvnpKCXs9XDUa3m44dpF1QW7TiB23UWdHdR+cw8DlDBlCgE/S30A5h9tOpLubsaG/r6JWnJ+gNrtbmrRdO7sYMQva/GXK1nVrAsQGaoCDMvufgwYP/N2nSpLgB/sJb6w0tHWhTZgV3t4teidBNjYbkkEhPem2/uCyjpt1fu127f7LLa4+vbZ+2Pdry2vWB9tdu1+6vPV6gvN/vMzTUHv8/Ku2hBaz2gxs1hTLLqIEB995///07aPpss661QS1RhEyEG93LtxbQKxH4+7gQPdLAZRGLad5fzOMyYoxyXEZMi2XEtFhGTItlxLRYBmltQFkE3ofTSmYE/w20v3Y7H4dj7fECrorP42mu2rZhB23VvcDEnuEAh9n30MxC5/nz59+LF+A4aKaGAOT5wbxpO6M9X9jOedqyqVjntujxo21Tostrjxfheldnx3tuu91JxWHBQ15goqpQgCMfFpytuGfTpk3v0PtSkJ/zAZBbLL2QMyRiDIUYCjEtlkllWmyTmNZrk1hGTMervF49YfL99JbNpvrat6k5onsCXvsFPcDhpuBXofjhS5cuPdzW1nZKWvGAfhaGvJ+cMiPRCoBBj8t16tCOTUfoWAw4WAWz/UKoi0wUQmGGHJW4aUx8TVlZ2YP0DR9sz/kAyBG8HsgjQ7IUAOD2jvY1dDwMa0F8hjsk4HoWHO2FyVet+MqVK9+hh5Hl2YQyvQGQm/PJXQkXcKcCge9YcFrJDPFftOVDVJFWWdH2Z4Dy9PpjT92R/e9QH8EiPAwwGtI9oXxdHxzb8ItgP9z90ksvNZ45c+ZdOf8K0vQFC42sKJAzwNoYRfmkiWltOV4Xy4hp3p5psdgHMa3XD7GMmKbyALKrs/3dMx8faKQkLDgAB6MhrTflRww4fi3uV1999QWy4rq/FlSYi0GB3GLJxa4ntc9+r9d/5tjHL9BB2T2JCXA0PsiKP/nkk7Vnz559X1rx/ueVIQ9z8a+OJMsygYGmaHTAXVdnZ+f7x/bsqO0FfEC4cZbC+eDYDmutuimU7v7rX//63x6PR/dPAnbK1QDITcoQYq/fDSHwp5hjMR3I7b9d70+3Xj7XPdj6Yt1f266B6htou7a+3nW6c9lTf/Lwf9PuuJ0suidhPYqBAEdzUAEcecVN+cMf/nCMrPg2acUhTf9goYtOk5ncFT5RKII0B07rbedykcax1hfr/tp2DlTfQNu19dE6Rk4c9o5th3d+cIxW2T0Je3HJ1UQCOKy1Cjilu9etW/c8WXGuQ8YaBVTINflydXAK+H007+TUyedpb7begA9MDuhJRAo4W3H8erqXLFlS3dDQsEtacVJDJ0jIdYSJMhvW29nVuevAtvXVtCsDztY7LoCjSWzF4dgDctfatWufkSMqkEY/AHIzja5gLjMHTgcm9AfyOQ9lOM3bo43FOsS0Xj1iGaQHCtG2D/XxPmKa2yPmiWne3uP3+Zvqjj9D21y0gD0wGJH1pnIDXmSiDAIAD7rYfOihhw7Su8TflnNUFH10/zPTRafJbFZOMp9ojrETp/mEinm6lYbZEG192vLcDr042vZp69fuH247psR2tDS/XbVl/UHaj613RKMnLFEkLgqXZSuuXGzigA8//PDT9GByK/6MyKCvAEOuX0Ju0SoAprzd3a3VO9Y/TdsY7oh9b64vWsDZF8cBXZs3b75UWVn5Z3nByXLqxwHI5c0gfYWCt8B6Nzde+HPj6dN4VhDuCZiL2Pfm2qIBHPuIVlyB/Pbbb3+THmurlhecLKl+DH9cHULkYuyfI45kwX68j5jmfcU8Mc3b4x2LxxDTescRy4hpoTwezXN1dVVvfeuVN6kIwx219Ub1gwGcrbhysYkGrFq16jGXy+WTrgokDR8UyE00iZNPKIojHWngsnr7D7Q90uNEWi7a4w1QHgz5vF5f3ZEDj1ETADdfXEZtvdGFaAHHPgw4flGKFX/00UePHDt2bDW9kRbbZRhAAYYcWMslWAMDPcxgb768mm7qYL631nqDvajCYADHARhytuLOBx544NnLly83SlclMv0BuZFGV2ToU6CH4HY7nI37Nr/3LOXicTSt9e4rHGFqsICzL66Oi+/du7f5tddee5g+f+KRrkpk6pvplr4CObsbORwDKBpy9pyuqX74YkN9M60y3FGNe2uVHyzgqIchV604DRvuI9CfpRtA2uPIdR0FFMjlU1L0pQcvjZo0PHvggw37SCqt9QZrgwqxAg5XRbXilHbdcsstK+vr63fIG0CRnw+GPFf9cbpbaejqaNuxZfXylWCod+G7lmAsJYDjDOLgWPiCE788x4MPPvgb8sc/kf44qRFhCECeez45/O5up/OTqo3v/oakwuvOwBBcADDFfFFycCEWC85HRCMwfIJfHBrnpBtATa+//vqvyB/3Sn+cFIkw4Ja+URxCzHKfHGaZ/tJ76SmdX9FrIJpoVeGHYrDEw4KUHHyIB+BoJxrDrorSSHrVRNWePXuegz8uIY/8BCmQG7P/zQVgAn735aYLz+3fsq6KFBLhjunCUlQ7HoCjPoY8yFVZtGjRcpqQtdGtvLhSPKxMh1MgYMkBefZ65TRJ0NDZ1rpxy2vLl1NHta4JDCaYijnEC3A0hCHnURU02rF48eJ/oYvOvRLy6M6ViVwVoymepye64yeytI8sd1dH+94tb6z4FzDSu/CwYNzgRh/iqSAAF/1xNNhBX4nouPPOOx+iByRq5KQsSB55YMizyRXHiEm3vbNm99o3HnJ2dHSQGgBchBsMxcV6Q+lEOHtonNjAPILcW1dXt3P+/PkLPth/eGgePqclQ0QK4L3synvBs2BKMmYIuhz2c/s2rf1ZY33tJyRAFy0MONzbuFpvCJwIwFEvQhDo5It3d3Z27naYCm6mGXWFPNE9UFT+H04B/vhAgPHM9Mv9fvpglNPZfGjnpntOHzl0lvqrhTuulpv1TBTgogVX0wcOHOiix7j2Dx899is0HJYvIefTMHCc1/uFjUwckcL9EHphpv34gY/uq9nzUU0IuGG5AXjcQ6IAR0MZbI6VxjfV17UVlQw5OqR0xEKah2GRkEd+TlXIIW2GGHK86tjtcjnqjx74pwNb38dteNFyx228W0/FRAIuHhOQq6BfqD1+0WIp2Dds1KgFNCRmkz65KFX4tAp5Bvjk8LndDkfriQN7fn5g6waMdTPcGPNOONxQMtmAq6DTnasWn8e1s7R8wvVkyEv4xKFRMoRXQDUIiiGnz16n4b8eGud2d9kbqnd+cC+9bu0o9chOCwBnuHEzJyF+N9WrhmQBjgOyBVchv9xwobOro3XbqPGTrjVZLGV8MaW2TiZ0FQhATlKyqrolk78B49z0HsGT+zatua/uyMHT1AKAnXS40fNkAo7jITDgStx++aKz+cLZD8onTZ1NryEeA59c+uUBoQb6X4UcBdPAJ8dwJt5CRTMDD+xY88YvGs+caqCWad2SpFhu1i7ZgAfBTY1Q1umdz+7zp45uHXfFjCn0AstJeUYJOZ+ggWLVXUmxKcesQHqWkm6/t2zd+saKJW0Xmy5T2xlu3MjBDMGkwg3tkg04jonQD3S60vbVVh/cPmbyFGu+rXA2+eRkyGGWZBhIAdYpYMST75H30Bg3fcqlp62p4eWNry7/N3rVWju1WYQbF5RJhxu6pQpwHJsh5wsN+nit13+quupA4ZChNSVDh881mkw0wiKtOcQaKEAnCJrMoMwIpJESj6Orlaa8Ltv2v6++QeeQLybFO5QpgRtapBJwHJ8hR6yCfuFUzQX6U7d5RPn4K8kvL5cuC6QaOKiQJ8EfJ2/bgItJR3vbwb1b1v3iaOX2Q9RCWG223HBJxKHAZP/+FMHSBXDAzYsCPV18dp06eGBjecVkk7Ww6DPSZVHO14D/sbsyYMEYCuDOpNfj7mlpOL9yw6oXf996sQFvn4LFZri1k6diOFpsu6YacLSef9lsxVXQ6c+d79ShqoN05/NI0TByWYxwWWjAQPrmYc96nz7xNeWBhxRofNvpbDl7rPpX2/73f97qdUkYboxx88Vkwm6/h+28ZmM6AI4miZCLoCvp86eON9ibWzYPHVk+mlyWKXBZMC7WdyI1vZKrvdqwrLEJArAxSoJvgna0XNpctXntkqOVHx6mWtliA3DtDRwYqpQHkJJOAe3BXFr88PCmSist+OKqjZZCpK+55bYvVEy78pcFRcUT8eRL3zAZbZWhnwIAM5bAw3/dXfaz9SeO/vve99fsovrggjDUPATI011xwPj8smJpeO++6QY4mhUwzwHI8Zg5vrQKyBl0W0FJSfENt/39D0pHj73LYrVayXWR1pwE0guBGYjRMaeOkNBDtc1NDSs/XLP6FVdnJ0ZIYKmxAGz2tTFKwnO5ozsQ7ZjIkC4uiraPLBJiLLAK7NP5vG63t/bQvkMOR8emoWWjx9Fr0CZKt0UrYd96nyvHtkM/xhwudkfsra0fHtz6/j/v2/zuB6S5OPwH6y3CjfMT25+KvubGNZWOFlzsINrHLgtbc7bocFsUyz7vq9+6oXzK9PsKCgsraE6L4rb0nVSxutxOByx5aA3Yz/aRn+1yOOobT598dte6N7dTabbUbLUx9Mc3btjosEEKXXkKc9MdcJYGkDPo8M0BOfvnCuRms7lg7uJv31Q+ruJOa1HxVLzcEv65BJ0lDB0z2LiAJD/7VNOF+pcr1/5tE72uhMHmmMe1RV87La222NNMARxtZmsO0GHNGXQAzrAjtn5x0Te/VD556p0FxSVX4Y1RmIorQSdlhKCAjfFsL1lse+eRptOnXv7ovbd2UBGAjAVgcwyLDbD5jiTATlurTW1TQyYBzo1Gm3HtwKDDmrNFVwCndSW+5uavXzNu8oy7CocMuRpfVgi8hiF3hxcDLgpm/GFilMfg6OjYf+H08ZU0MrKXNGOwxVh0RwA1X0hSMjNCJgIOZdFuLKLbAovOQ4si6PlXz7959tipM28rKhm2wGzNL8TrGHLlopShxoQo3Fr3drsdXZ1tWxtO1byzf9v7uL0OiEWokYa15kX0szPCalPb1ZCpgHMHGHIGnV0XBp0tu2Lli4eNKPrc/C8vKC0v/0phybA5NI5uogldivuSbePpGAkB3JifjU+CODrbqlqamjYc2LZxq73tMm7QsHUG0Aw5Q83DfrDaGeOOMBRinOmAc1+0oPONInZfxFix9BOmXjVq+py5Nw8rG/kVmp47lV+XFvDVM8+NUS11H9R0S91xqq350oYTVZXvnzt15CKJxQAz3GKMbbDWbLEzGmwRDE5nQ8ygIwbksOhs1QE54NbG5qu+cMO0cZOmXW8bMvTqgsLiWQS7FW95hc+ersAHA+1XXmRJlrqbXqxz2NnRvv/CmZMfHtm1/ST1F9YY8ALmUDG2s8WGC5IVYFM/lJAtFpz7wzH6xbADdF4AuBZ4xaJTvrKtoLjYOuvaL80qGzPx8wVDSq622Yo/ZTSbLLhbqjwzqsxPp9JKCMiXqBGaAMQ4UMD1xU0Y8jsMmM2HJ9ZpLprH6bQfc3V07m9uPLvv8J4dh112O1wOhhpA88KA8za21myxldqpfFaFbAWcT5IIOvx00VcXrTtDznkcm4aWlRXOuGbeZ4aXjfm0xVYwMT/fOtFsLRhnwsMYyvCjUQG/76KVD62NtVIHoNWWUiAmoHFRCJAVX5pi+oKdk+zzBbe7+6zH6Trb2tz48fG9O6vbm5txVxGQsiXmmMFGzHmIGWjRvw7dGCqc6UGreqb3J1z70VcAzjFbddGVYbC1sVhW+aFUzPzMqNETJ1YUDyubaLUVVeRbrRNMFnOZyWguzAvAj9fToZ6AmwPLjxUKCk1EMltoir30OJOjhyD2+b0On8fb7O7uPtft7Kq3tzWf/eTs2fr6mmr40AylaH1FeEOlxbLsfnCstCeb/2PNs7mP2r6hz+ICeNmycwwwGWqGnde5jBgjjUWsN4/cHfPQ0lFF9PidzVpUWFRgK8KMSIPL2eXo7qLRuvZWZ3vLxS5yKwAmuwgcM8yI2eqKMdIMNEOMdbEM78t1ckzFciPkIuDimQ0CkjYwqByL8IuAY7u4jcujPqS5XkoGpbEuBhE4TrN1ZcC1wDK0DDWvc3mOuT6OxePmTDrXARdPNGvBcCLWgsvrDDEgRzmOOT9UXTgW5wM6BIZPuw5IkQeIxZjh5RjbxDTWsSBwHFjL0f9Z8BztfthuszaIwy0i1NpyOIBYj3hABlCMkdYuDLs2X1xHvViXQaMAi6/Jlqs6CrBeDDKKhcsTt+tUGQQmQ8rwYp9weXp1yvxeBfjkSEFiU0Cro3YdtWvzGFzxyNo87bpYVqYjUOD/AZrbm7Ts1rpFAAAAAElFTkSuQmCC',red:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALgAAAC4CAYAAABQMybHAAAk/0lEQVR4Ae2dCZxUxZ3Hq8/pnhkGmOEQuQS5VCTxWHEDBlyNkciakMMkxujGuOvHO24IKCae0UQlKwmyroocoqtozGpA4oFiVAQU5IaRcchwDsPczNF39/5/b+bfVL/p7ume6bur+DyqXt31r2//5//q1XvPIJRLpgQMMVYeiDGfyhanBGKdgDirzYvsLLtIPguB0/lc7+vh5vNIvr68Oo8ige6EH6Vo3iSxjODrw1rcm2++2f+MM84YV1hYONRkMhUZjcY+OAKBgOZTXDGVLTYYDH0gNYpvIa/V5/O1+v3+FopvgY+D4tra29uP7N27d98VV1zRiOy6g06DcRyGr1wYCfCEhUnK2yiWiQYvSQG+8ac//all3rx5o/v16ze+oKBgnNlsxjGWQB5LgA5MhrToh1BL0Fd4vV4c+1wu176mpqYvHnnkkf0rVqzwUJt+OuQfALrBmh/hvHc8mfkuCBlmDei5c+fab7nllguLi4svttlsXyeYzyPgrJkgKPpBuQn4LU6n88PW1tZ1ixYt2vjoo486qG964PMe9nwGnKE2EhgG0tDWBx988HzS0BdbLJbpdEymeFsmAB1DH5wej2cTHR+Qhl937733biYN76ZyAFyGPoaqcitLvgEeAvX1119ve/jhhy8nLX211Wq9lKYWtnIuuFa3272WtPv/3nPPPW8tWbLESYPKS9jzAXCGGj60tfGLL764YPDgwT+x2+3fp/MyOnLZ1Tscjj/X1NS8OH78+E9poNDoslbPaTMmlwFnsDWoN23adNq4ceN+TBeIP6FVjbG5THSksdEKTQVdqL64b9++lyZPnlzVCboMe6SiWRufi4DLYJsqKyunkraeCxOELhJzcbxxw0cXqQGYMKTVHz399NM/pgp8dOQk6Lk04RiLpq3JNx04cOAbAwYMmEurH1PoXLkIEqDVmPV1dXWPjhw58l3KwqAz7BFKZU90LgAeBHvYsGHmjRs3/mtpaekcMkPOy55pSH9PyXzZ0tDQ8NiFF1646vDhw17qESDPetCzGXD0XYObwLYQ2FeVlZXNoRsvZ6Yfl+ztAd1Y2lNfXw/QXyHQ9TeTsm5g2Qp40BTZtWvX+aNHj15AGvv8rJN+BneYNPrm/fv3/2LixImbqZuy6ZLBve7atWwDXNPYNAzT0qVLS2fNmvUA7f+4gS4eAbxynRIwHN8ozDseFQZHTW9l4m/3BBa/8nnDfT97vKqBKmPQs2ZpMVsARz8ZbvPRo0ev6d+//yNkjiRlD0hvqUh3ecsrpwtD2+GEdcMfELUNbWLewNniBaqU7XNAnvGgZwPg6KMJx44dOybSstYf1coISSOKsy4tiJLa8ySPX6wvrxN3TLpX7KJaoM1xZDTkmfynPaixJ02aVEBX+PdOmDBhg4K754D2tqTFKKacPVhsOPEnce+kSQK/IjMdYChjFWWmdozhNq1evXrYtGnTltKNmq/3doLypXyyNLgsP49XfPhOpfjZzCcEbKGMtc0zEXBeITFXVFR8g5YAn1O2toxW9+FUAI5ewDY/UC9+PvrXAjeJ2DbH2nnGuEwyUYJae/r06bba2toH6O7a6wrujGGlS0eMBjFw1ADxetMT4oHpZ2lbi3GtlFEmS6Zo8CDca9asGT516tTltClK3WLvglRsEanS4HJvXF6x/v0vxHXfWigOUXzGmCyZADj6oK2S7N69ewrdtFlJWnuALDwVjk8C6QAcPSSTpa6iTvxwwm/EejrNiFWWdJsoDLeZdv3NHDNmzGoFd3wwZ1JuMlkGjBsoVlf9TsykfmGFBYorrUo0nYCjbQjAQjv/rhs+fPjLFLbToVwWS4Boto/sL14++ri4joZhoQNznDbO0tVwEG66K/nLIUOGPEW32/GLVy43JGAeUiKeqvsv8UsaTlohTwfgGtz0EIKV9iE/RjsAH1IPIuQG1SGjCAhDWaF4qHmBeGzwYIG3EaRFk6cacA3uGTNm2OnFNs/16dPn1hChqJOck0CJTdxaeY94bsZkzfxMOeSpvADQ4B44cGAB3cBZRg/8fi/nZjNDBpSuVZRow3d4xGsjHxT/VlsrXJSPlxGjFUlIWqo0uAY39dhaXl4+X8GdkLnLqkrsFvE90uTzwQAdKdPkqQCc4bZUV1fPpXeQ3JhVM6M6mzAJ9LGJG+v/IOZShSm78Ew24DCB0Ibl0KFD19Ozkr9JmLRURVkpgdIi8Zvqx8X1YIIOsJFUMzmZgKPj+FNkoQvK79CqyQIKK6ckIE4pEQsqHxbfIVGwJk8a5MkCnOE2b9++fRrdfl9CS4GAXTklATwiYRpVJp7bfb+YRuJI6h3PZAAOuFGv+a233hpPb5NaSeHkPGJCFSuXnRIgSGwTBomVb/2nGE8jAORgJuGaPFmAm+iB4KIpU6Ysp70lJdk5BarXyZaA0ShKLh4tls+6QBRRW/gLn3DAE10hfjDoaMHx48ef6Nu37w0UVi7FEsjEdfBoImh2iMX97hR3Up6Er5EnUoPjx4L6LHv27PmugjvalKo0WQJ97eKGLx8U3wU7dIChhCneRAHOcJtXrVo1dtSoUQvlAaiwkkB3EqAngxauuk2MpXwJtccTCbj5kksuKaLHzZYpu7u76VTpegnAHr9svFh2yQTNHgfkCdHiiagEPxLN7qbnKOeXlJSoO5X62UvxebbZ4LJ4yB5/muzx2RSXEHu8txo8aJps2bLlYtodqOCWZ0uF45YA7T68cfu94mIqmBBTpbeAa9qbzJIiWu+eTy9Wj3tAqoCSgCwBIETr4/OnjwsuHfaK0d4UZu1tef7552+nF/OMkzuqwkoCPZWA1SzGvXS9uI3K93pVpaeAM9zmF154YdSgQYPwaJJySgIJk8DgvmL2C/8hRlGFvTJVegM4Liwt9HTO78k0KUzYyFRFSgIkATJVCq88S/yOgr3akNUTwFl7W3bu3IlvTH5LzYiSQDIk0KdAXEEbsi7vhBysgr24XE8ARxnzlVdeWUw3dB6LqzWVWUkgTgmMHSgeu3Ky9oFeNlXiqiFewFl7m5988slb6XPXI+NqTWVWEohTAhaTGPnMLIGH0xnwuLR4vIAjv4k+gV1Cr3u4Kc6+quxKAj2SwIA+4qbrpwjsSsV1X1zMxpOZtbdl3rx5P6cX0Zf1qLeqkJJAnBIwmUTZ/TPFz6lY3MuG8QCOvGbc1DnllFNujrOPKruSQK8kQG/Kuple0Yx942yqxFRfrICz9jY/88wz15DtfUpMtatMSgIJkoDZJE5Z9mNxDVXHgMdki8cKOPKZ6Fs59lNPPRV3mJRTEki5BIb0FbdNOj2+N2TFAjhrb8vKlSuvIu09IuUjUw0qCZAErBYx4i/XiasoGLMtHgvgmvYeOnSolY47lKSVBNIpgWH9xR0lJcG7m93y210GaG8c5ldfffVfaEPVmHQOTrWtJEAbsca8f7O4BEzSwXxGFEwsgGPt0Ux3LX+ktsNGlKNKSJEEsJ121CDxIzBJB9gE5BFdd4Aj3XT11VfTM8R9Z0SsRSUoCaRQAn0LxIyrvyb6UpMAPCrD0RLxy0C6ee7cud+m5yzV50VIGMqlXwL0/Kb9nsvEt6kn3S4ZRgMcaRrg9P2cHyjzJP0Tq3rQIQGYKSP6iR/QGQMekeNICdDeOExPPPHEiMLCwq91VK3+VxLIDAkUWcXXnrhaYMma7XDw2sVFA1zT3jNnzryKtHekfF0qVBFKAqmQABFpnDUxRIvHDbi2ekKPo30/FR1WbSgJxCuBwcVBwFmLd6kinGbGLwHxphUrVoynte+xXUqpiIyWQKBoWEb3L1GdozXxsS/9u/Z2Wl5N6aLFYaTrXRDwr371q9PUxaVePJl/3nzef4uaN28S7hNHunQ2EOgSRa/r1rkuEXild1enr6unecJVHktd9OlwaOJp1LPddEApg92QotEANw8YMGCqApwktmen8K9cIURTI8kv810BdXGI72JR73LR9+ND5jvzOx9nD80u11QhVj1DxRjwkBr0gOMXoGnwoqIiM72p6sKQ3Hl64nv0fhGoPZ5Vo8ff7P5+v2jw+Eil5S7kfQKBC8FqW1sbAx6ixRGpd4gzLVu2bKLJZCrVJ+bjebbBzXNkoTsipfRQo0HTWRybWz7BWvqHkYMn0qjYDg8ZoB5w1uCmM8888yJlnoTIKitPGHIj3R3hyc0lHwCPLbRdRB4A56EF5yoc4Igzkf09RQEelFNWBwB5f3okJhfnE2MqNZumgFk6wC4gDzoZcKbfRLfmrWR/Tw7mUoGsl0Ao5DzVueEXmUyThxcW8heUeVDanMmAIwLnxoULF55Nv4w+Wg71X85IgCE3AoEccjScPr8ZderZNCSNX3lo8ioKk28aNmzYhFz8cyYPPF/DHZAbRKPXmzNrK6B6qM0ygbxP6WCOtaUjWYNzgpH2fo/JVwDyYdxmUuH9zWZN3eXKePuYjGAWPDPH2tD0GhwZTLR7cIzS4Jp8cvY/QN6PIG/KAU0OVouMxtPBLh0MuTZ3rMFBPRzOjQT4aO1M/ZfTEmDIc8Emt5s0wDV+OydNY5oBR5ym2ktLS802m21kTs+sGlxQAoC8r4nMFZp9DQAGIct8m9EwstRuh0XCw9DGqAfceP/992MrGrYzKJcnEjgJOdjIUhcQBbcPHQx2wXRwIGyDM/XGs846S22PzdI57k23AXkJmbAnfNm5dwUAn1mkbe3+ohNwRAVYgwcBHzhwoLrA7A0pWVxWg5xe5Wo8qQCzZjQAuNRs7rKSwhocAwHsRrvdPhwnyuWnBAB5H9LkLZomzy4ZFJmNYFfjmHuu1+AGevdgMScqPz8loEGuafLsGr/ZYAC7bI3A1x6751EgwkhbZIvVGjiLJH99QF5Mmrw1SzQ5mKVFcAAOpa3BjdnjkyD1BDheMq6ckoDQNDntQsQSYjY4ghzsBllGWLbBMQaDAhxiUI4lYCLNWEzmiqbJM/zBIKvByIBz9zUNzica+QpwFofyWQIMObGe0c4kAgx4sKeswYMRCvCMnsO0dY4hb/P5M/YZT7NJ0+AsI41pXkVBJCKUicLiUX4XCQDyIhNWyYP6sEuedEZE0+DcLwU4S0L5YSXAkLdrmjxslrRFGmOxwal3bLakraOq4cyWACAv1DR5ZvWTVlHArmaJcM/YRAn+zfF6ve2cqHwlgUgSYMi7rDNTASYs1b7PH5DZ1Zjm/gXH4fP52oInKqAkEEUCgJz2YWeMRU6Xv3p2NZWO1c3gCqfS4FFmVCV1kQBD7qS3aKX7LXE+v1/W4BrXbKJwxwNKg7MolB+rBAC5jd69Ql5anS8goMGDyhqdkS8otQQFeFrnKGsb1zQ5Qa5p8jSNwm8ImihByMNq8EC6/9akSUCq2d5JAK+H0zR576rpUWkwSyuXETW4Zq9QzQFlg/dIvqpQpwQYche9vDvVb7X1BgRs8CDL6JKswbUEAry1s6/KUxLokQQAeQFtQUz1HU96FzrYZcC1vss2uBbhcDgaoO7VnvAeza0q1CmBDsiFcPlTIxJQ7aTXoetbYw3O1PsbGxv/oc+kzpUEeiKBk5q8J6XjL9Pk9YBd/KSYZ81EwQmcFllRUbFfXWR2CET933sJAHKrZq4k9w4nelrldOwnLwg3wqzBka4lvPbaawpwSEO5hEkgCHkS18kB72v1zXrAg+vgTL3/7bffbnG5XLVms3lgwkaoKsp7CQByC0nBo+nRxIvD7ffXrjve1EI1dzFR0FoQcGRobW2tUmYKxKJcIiWgQU6gJ1qRg9U2X6CK+gq4wwKOcQByLUN7e/s/EKGckkCiJQDI6fUOCd9x2O7zgVkZcK3rbIPLGtyHlRSlwRM9tao+loAMOcf1xge8TT4vAPfREaLB5XXwIOTHjh3b35sGVVklge4kAMhhqngTsC0E9dR6fGA2BG70IZwG97/xxhs7aNMVgFdOSSBpEsDNxA5zpXdWuY/MjVW1zTuoowA8BHIGHIMA0Ej00Udga5ubmyuVmQKxKJdMCQByE/ENfd6Tf6C2xR+ofPFITS31UzZRtG7rAWfIvfX19ZsU4MmcWlU3SyAIeQ8UOYCt93g3keelI0R7o34ZcJxrGpx8X2Vl5UYFOESiXCokAMgBI3lxHTDkqxyujVQU2ps1eLDLMuD4MbAG9y1ZsmSTn1wwpwooCSRZAgx5PM3Qg3L+JTX10OAMN3OsVRMOcO2XsGrVqkayw8uVFo9H3CpvbyXAkMNa6e7AQ6DNXl/5W8fqGyk7a/CIgKNvrMFhz3hpufBTBTjEolwqJQDIAXd3DrDWuj34+KvGK/lsgweLyhockQw4fg1essM3KMCDslKBFEqAIY+mxdGdynbPBvIAuGyiIElz8o0eRLB6xy/Bu2DBgk8vvfRSZ1FRkU3Lnaf/VRaVCM/xmpwffSRlBijCuUjxyBsxLUJCpMfbkB39AvD6/jn8fufjh46wBmftHdJCOMCRUbNnPvnkk5bq6uoPRo8efbmRnphOhGvbWiGO/c9fhaeuORHVpaQOt+8rwlmCb7uHyC6k7UgpUctEKBStTEijnSf6iZfzRGhCyxJvO3K96Q7T42mi2nnig21N5dhByPY3Qx7snh5wJEAmmgYn37Nt27a/nnbaaQkDfP+dTwp3dT3aySrn9HtEu9+r2YYQUCw2IgbIeRk0lOO4cOmIk12q88ttI8x9jdR/fX79eXfl9en68pHG7w34xW5nzV8pv4cOeQ08pIpwahltMuDeW2+99SPaPlsfTUuE1NjNSTbCjSEVGS2i0NihD2KFG+U4L3w5jDQ4OY7zyL6cRw7LeeSwnEcOy3nksJwHYb1DXjguw2EtMob/uiuvT+d22Ne3h3iw6Az46he37PyITiNeYKJsNMCh9j20s9Bx+PDhvyUKcDSarQ6Q2wnyaNf4nMa3nTFWjsuEcXNfYu1fsvP3RCbQwLU+598a3W4HBaHBw15gou5wgCMeGpy1uGft2rVv0OskEJ/3DpDbjCYNWoZE9iEghkIOy3nSGZb7JIcj9UnOI4cTlT9SPdHiAeZ2Z93r5MnmCaK7uEiA40eCXwWo9sydO3dXU1PTl0qLd8iPIe84U/+nUgJgsC3g+XJJ8+7d1C4DDlbBbBcX7iITmZCZIUclbloTX1VWVnYnfcMH6XnvADmcKwDZKpcqCUBN13jbVpHnpoPNE+a1SzciaXBkRF1BLb58+fI36GFkVKhcpwQ0Td7lS4xKPMmUgFv4PG+3HXmD2pC1d1jzBP2IBjh+FSgIM8W9dOnS6qqqqjfV/iuShuSwsmJTkEsSSV4Qa9+1Pseb77ZWVVMr0OBgE4yC1bAuVsA1M+XFF19cTFo84q8lbAt5EKkgT80kuwMB/7q2I4upNTZPegU4eh2ixefPn1958ODBd5QW7zqhDHm0q3+V1nMJkPIW9f72d149UVHZCXi3cGOWomlwpENbB80UCrteeeWVZz0eT8Q/CSiUr64DciwhnnQcjnbjArk5PV6fy3KL+va6q6+35fX1d1dfd+n6+vjcL/yBjx3Vz1J5Fx2yeRLVougOcPQHFeBiUzNTfvvb3+4lLf53pcUhmq4ON4IKDB2QY3Lg2JfDPHFyHMLxOq67p/X1try+v93V1126vj6cd9jezr+vaCrfS6dsnoDJqHCjbCyAQ1sHAaewa82aNc+QFkd55cJIQA85w5cKH91hiORwKtpOVhs+4nij89gzNB7W3oAPTHZrScQKOGtx/Hpcc+bM2X706NENSouTNCI4QG4lTZ5qx3AzbGif41Ldl0S0B+1d73dtWNy4ezvVx4Cz9k4I4Ogna3EY9oDcuXr16oVqRQWiiexOavKTiOEyC44vtzisRXbGcxznicfnsrHWp8/P5SL5+v531zd9/fry3aV7aOVkk+P4QsrnpAPsgcGYtDfli8lEQT4ADi3OgLtmz569jd4l/rraowLxRHY2TZPjY6kd/5CTJ1kOR0qPXHP4FK471vr0+blcJF/uc/gehMbq69eXj5buoy2xR31trz/duGMblWPtHdPqCfciFhOF87IW1y420eBdd921gB5MblR7VFhE4X2GPHyqig0ngY49J97GxU27FlA6wx2z7c11xgs42+Jo0Pnee+/Vbtq06U/qgpPFGdkH5FhdUS42CeD5qb2exj997qzFG6tgnoC5mG1vbiUewFFG1uIa5LNmzXqNHmvbri44WaSR/QLaZstLiJyLrXP4sRwox2XkMJeV4+Qwpyfal9uQw5HakfPIYTk/tHej37X9vuMbX6M8DHfc2hv19wRw1uLaxSY6sGLFikecTifegYg6lYsiAUCO1RWeUGRFOFbHeSOV7y491nZizRdve93lB0Nu+qD8O22HH6E+AG6+uIxbe2MM8QKOMgw4flGaFn/ooYd27927dyW9kRbpynUjgSDkeP+HOkJkEKBfwCF/68oXmvdgv7dee4O9uFxPAEcDDDlrcccdd9yxqK6urlqZKrHJH5BbeqRfYqs/G3NhzftEwF39ZNPORdR/PI6m195xD6ungLMtzsuGzs8++6z+pZdeuos+f0JLl8pUiWUmGHL82c73A69hcwm/5/3WQ3eVOxrw2gWGO651b73cewo46mHIg1qclg23EOiL6AaQvh11HkECgNysNDltdPKLfe6GRU837d5CotJr7x5rzN4CDlMlqMUp7Lz88suXHzhw4CN1AygC0WGi8x1y3NCp8To++lXN+uVgqPPgu5ZgLC2AY6rQOA6+4MQvr/3OO++8j+zxGmWPkzRidJq5YuiNvomxoQzLBru72e+pWdS46z7qWjsdYAgmAJhivijYM5cIiaITWD7BLw6dc9ANoGMvv/zy3WSP0zeGevzjo6ryy2H50EKQR7pNnmvx0MvugN/7vuPw3Vucx47RbGv8kA+WeFmwVxAkAnAQjM6wqaJ1kl41sfnTTz99Cva4gjz2OQLk+DBTrjswAbt7r6fhqacbdm6m8cpw9+rCUpZdIgBHfQx5iKkyY8aMJbQh6123Gz9I5WKVwElNnrurK16C+4i39d05NeuXkFz0pgkUZkL+9CcKcMwdQw6acaGATrfPnDnz13TR+ZmCnKQRh4OpYs5Rm9yjXVS2f3ZX3YZfk0g0TsjnZcGEwQ1xJxpw2R7XIKevRJy49tprZ9MDEuVqUxZEHrtjyHNpjRwrJvU+R/nDjZtn13scJ0gaAFyGGwwlRHtD0snY3obOyR00EOTe/fv3r582bdr0pmXv9MVXbpWLTQImklWHQGWRxlY203IB7kaf69CC5p037XDU4osCbXQw4DBvE6q9Mf5kAI564UJAJ1vc1dLSsnFUZctltKOuUEHeIaRY/gfkcBBotq6k+KnzJwKe+mUnym9c13roIA1FD3dCNTfkBZcswGV1Ewxv3bq1rcBk+Xycpd836c+vVUHeMQmx/M+yCgozlkIZkoe2mYrWgKf19ROVt/y55cty6pYebmhuAJ5wlyzA0VGeC/a1zm9z1jaVme17hluKL6HVAgtPXMJHloMVsqxCBJrh4+yA292+tv3Ifz7btAu34WW4E7beHUkMyQRcbhNzEpyXTY5jx+kJly2jrSXTSZPbeeLkAiocXgIsq6Aww2fLiFjY3Cf8nsbX2/bf9mzjLqx1M9xY80463BBCqgEPgr7VWdvQbvCuH28tnUo2eR+eOHRKuegSCMqKTHOY55l44F0mDQHn0eXNX9z8yomKPTSiVjoAOMONmzlJsbup3qBLFeBokJVOEPJyV2PLUW/738+2DbjAZjCV8cVUsHcqEFECgDwoyIi50pOAde46n6NiYePuW9a2HfgH9QJgpxxujD6VgKM9OJ4XzT/gOeHY7W5Yd65t0CS70TRE24nRuWrQkV39H0kCDHmmrK1gZnH7/ZjXsfWRhs23b3HUHKW+682SlGhullmqAQ+Bmzqhndd6He5PHDUfTC48ZXShwXyagpynp3ufzRUIMp0OuwLpWUq6/d72wd21G+fsdzfVUX8YbtzIwQ7BlMINeaQacLQJ1wX0Fr/b9zfnwQ/PKxhUUGKyTjIJo4Enr6OI+j+SBGQ5YcU81Qfgdga8gQpP0/O/qP/4d41eB77yK8ONC8qUww15pQtwtM2Q84VGwEsbyN9srdo60FRYPsRin2wxmOzYS4AHc5WLLoGT5kr0fIlMxY5AvL+k2e9ufK/98Lz7aje9SnPIF5PyHcq0wI2xphNwtM+Qww+CvsFRfaTa2/beuILSM+0G0ynKZIGounephJxNkhpf+7aFjTtvp5WSHdRDaG3W3DBJ5KVAzHHKXaYADrj50KCv8rS0rXFUvXtOwSBTX5P1K8pkiY0NNleSSRNu3sAkKfc0L7+j9sMH97ua8fYpaGyGW795KrbOJyFXugHHkHgu4DPkmjanP3e+Na1V2waa7buHmAsn0/ZRu7YXQ5ksUVE4adIlducKcU0mCW7euBvWOo7c/UDtxr90miQMN9a4+WIyabffow5el5gJgKNLMuQy6Fp4g+PY0cNksoyylgymz4SM7nioS9nmurkMOT0JeUh0j05ga/toiuj78OKQr/W9RY3b57x64stdVBlrbACuv4EDJZV2l2lXb+gPrivxw8OXVgvosNFhp6MQ4TvKzvnni+yn/rLUaB2BJ1/4TzKlKRdGArCVe+PY1m70uw9+7Kz+wx/rt26g+mCCMNS8BMjbXbW/vr1pM5FlMw1wjA19wgHI8SVmKx2AnEG39zfbiu8vu+CasdZ+19HHWAvM2ESqzBYSUXgHDRwv5rxC0ub3uCrI1n6w/tMXGr1OrJBAU+MA2GxrY5WE93LH2xQVTZ7LFBNFP0IWEnwc0Aps0/mcfq/3rbYDO+r9zrUjLMVDaePWCGW26EV48px//Kw5ovl4wxSbI/Ty+Y+fa97zq0WNO9aRzOXlP2hvGW7MT0aYJCdH3RHCWDPZoX9ssrA2Z40Os0XT7HMGnP/1C2yDbulrtI7E64nx7lae1EweXKr7Bq0cybGd7SI7m9a1D3zmqln0WN3nH1J+1tSstbH0xzduWOlErjhSgymKz3TAWQyAnEGHbQ7I2T7XIDebzba7+p1z6STbgGv7GwvGKNBZdNF9GWx6J/eXO5x1z/++aetaejMZg80+r2vLtnZGam15xNkCOPrM2hygQ5sz6ACcYYdf8Kuy8y86zz7g2jKj7SwFOkkkjJPBJlNv9xZH3fOP12/+iLICZBwAm31obIDNdyQBdsZqbepb0GUT4Nxp9BnXDgw6tDlrdA1wOtf828rO+afJtkHXDTLZz7XiNQxUBIXz1XwB1KASa9n0Rilx3Of4fJPz+PKF9Vs/o2gGW/ZlcwRQ84UkBbPDZSPgkKzGKfmy2QKNzkuLMujWG0rPmnRhwZBvDzbbp9sN5kLAni8XpQy1n9AG1I6At51edPnBRlf1G4sbduP2OiCWoUYY2poP2c7OCq1NfQ+6bAWcB4D+A3IGnU0XBp01u6blh5qLi27od8b0Mdb+3xxosp9PoJvwch3Anmvr6Vi/BtRegprA9tX6HJu/dDe+vbhp7wf0RincoGHtDKAZcoaal/2gtbPGHKG+dnHZDjgPSA86TBi20dmEYV/T9FMKTx00q3j0ZSOsfb5ZYrCO0UyYLNbssqbuhBpfS/jyoLvl7f9r3f/O+vajx0kmDDDDLftIg7ZmjZ3VYNM4NJcrgMvjgTbHuAA5NDprdQDO0Mu++Yf9xo2dXDB4Kmn1c/uZCibShWkBPi+CR+gy1ZSRgcbmJzxJQ0t8riafaxdp6883uWo+Xtm0r4LGDG0MeAFzOB/prLFhguQE2DQOzeUa4PK4WKsDdD4Ath54TaNTvJbWz2wr+FHfsRMnWErPG2iyndvfVHAGwW7BBSqA7/jX0QwLL1kXrYAYjg1f+LhMBNC4UCSoPfSmqL21Pufn5Z6GLS83V+xq8jphcjDUAJoPBpzTWFuzxu6ongrkkuM5yqUxyWPB+Bh0va0ua3eGnOPYNw21FRX+oHDcV06zlpxdQvtfCg2mEYVGy1CrMNpZw7Mvwy93AmG9oBlafT6GGPYzQGbfLfyOdr/nSHvAd5B28x2scp/Y+Wr7vu1HnG24qwhIWROzz2DD5zj4DLRsX0fqDmXPbqeXe3aPJnrvGXT2WavLpgyDrfflvNoP5eLiYYMmWctGDjEVj+hrtowsMliG01cayugppEK6k2qnbWCFlNGMxhh81vRsXkAbgywizUuvWWinW+QOT8DX7vL76tsCnkPNXs+Bal/rwR3u+gPrWg/DhmYoZe0rwxsuLOdl84P96BLLgdR8Apynq4O5DqWKMOAFtLIPwBlqhp3P9Xk14DvrCKmbzB3zSGtx0RBjob2fuaCoj8GKHZGiJeBub/K62qr97Y4D7tY2MisAZofyPukzzPBZ68o+wgw0Q4xzOQ+X1ddN2fLD5SPg8syGAEkJMqx6kGXA9WlcDvUhzPWiLTmMc9kxeIjjMGtXBlwPLEPLUPM552ef62NfbjdvwhC+ch0SYFkwkPD14PI5QwzokY99jg9XF1rheEAHx/DpzwEp4gCx7DO87CNNDuMcBxz7HWd5+j8LPE+HH3XYLBv40Q4Zan0+NCDXIzfIAMo+wvqDYdfHy+eoF+fK6STAwtdFq9MIEmB5McjIFi1OTo9QZQiYDCnDizLR4iLVqeI7JcCTowTSOwno5ag/R+36OAZXblkfpz+X86pwDBL4fwN/IZwMBwH5AAAAAElFTkSuQmCC',yellow:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALcAAAC4CAYAAAChOH1KAAAlaElEQVR4Ae2dCZhUxbXHTy+zL8ywDDsSVhEVJQoCkoSIIr4kvohLxO2ZfC8an0mQrCQm+uJ7qHkv5hE/xSQaNokBogkxigaUuLDIpsiOMA4MOwyz7zPd7/yLOZfqnu7p7umeXut83+2qW7du3apTv3v63Lr31rWRkUhowOZViPc6Nutpbq/8WPVO8173sYtJ6kgDusI7yme2nYdTdIZQj0NH1vrgwYNtc+bMyb344otzCgsL87KysnLT0tKym5ub6+rr62vKy8urd+7cWfv444/XlJSUAGSB2VfoKw3HM9KBBqQzOsiSspsEXgmhCMTtDGT2TTfdNDwvL28kQzvC6XSOcDgcQ2w2Wzfenme323M5nuN2uwPql/O5OF+dy+Wq4X2rOV7Z2tpa3NLSsp9Pgv3V1dX7XnnllU/4RKnj7S5edNARl4WjRnQNBFS+njnJ4wKxHtp37NgxpG/fvlPY6l7CAI/kZTgv/YMBN1L64hPAzcAf5eUTXvax9d9x/PjxtZdcckkxH0OAF8gljNThE7acVIdbQLZzDyJuX7du3YChQ4dOycnJ+QJb5M+zFR4Qr73L1v4IW/h3amtr/3nw4MG1kyZNOsJ1FdglBOwpKakItwfQTz31VN4dd9wxnd2LL7J1/hzDPCxRSWDYD7BVf5fdmbeXLl26avbs2dXcFsCdkqCnCtwCNEL7gAEDnBs2bPh8QUHBnenp6TdyWi4vySY1TU1NKysqKl6cMGHCO0eOHGnhBuqQJ71FT3a4FczcqQgdu3btGtWvX787MzMzv8YWun+y0eyvPWzRjzY0NPzp2LFjL44ePXoP52vlRbfo/nZN6PRkhdvyoX/7299245GNe9iHvoMvBC9P6N6KQOX5gvRD9tGX8gjMovvuu6+SixRrjjCpJJngRluwAGz78uXLu0+dOvXbDPW3eL2QFyOeGihnyOevWbPm6VtvvfUsbwLcAnpSuCzJALcH1KtXr+4zduzYWbm5uf/OnZWMvrQnouGv1bD8ftu2bf937bXXnmgDPCkgT3S4lZXmDrGvX79+0EUXXTSbRz3u5fXM8Ps85Upo4FGWBbt3735q4sSJh7n1YskRJqQkKtyoN8B2vPzyyz2uueaaX2RnZ9/NN1bSE7IX4qjSfMOoqa6ubvFbb7318xkzZpRx1XDxKZY8jmoauCqJBjfqi8WB4bzNmzf/W/fu3R/j9R6Bm5o6OWyuErK1fMiKwuhfJ8VNZWUVtT/77MTHFrYNI8oIS8L444kEt7ggju3bt182bNiweXwHcXwnuy5pdwPYzrofMdiR8SaaW9wffFLc+N3RE/7xEStNrHhkCu/iXkgEuFFHBfb8+fMLb7vttkf4YvGb7II4u1g3CVm8vXEpORtfiGzdbbaWmpqW3724ou4/v/WDj8u5cMAd965KvMMt1tp56NCh24qKip7gmy99IttzyVWao3ERYekKcbnpxKmy5h/3HbVpGZcvdzzj1ooDnngUnHQOLI8++mhBZWXlC3369FlowI5tV9lt1KdPz7SFdaUTXnj00REF0kccxqWRjMdKWWBv2rTpUn7YfwnfWRwZ225NnKN3peXWtdDion0799TedfkXPvqY0+GLywWnni2m8Xiz3KgPLLbz6NGj3xgzZsw7BuyY8uH34E47jRxzUc47J/eN/wb6ixf0W1zxFC+VEWvtnDt3biE/ybagZ8+ez7CysngxEqcasNkoq6i785m6w1ctmDt3GB5xEMjjwiOIh0qgDjjJMG49hp9ae5Gt9fA47c+4r1a03BJvRbS43J/s3FN3R5ubIhebMR0Tj7XlFoudtm/fvmsuvfTSNQZsb2wSY91ptw0fMzrnrYObr7iGa5zGC9yUmBrPWMItYGOY7xZ+W/wvrIw8XowkqAa4Q/M+MzjjL0d2jL+FmxBzFyVWcOO4OLPT+AH6b/ELuAs5bp4LYSUkujDg6f37Ohee3ncVHjUWCx4TzmJxUAE7/eTJk4/06NHjKb7bGIt6JDpH8Vt/N9l7dnc8dfaTcY9wJWG0YjKSEm2oFNh80ZhRVlb2NL/D+KP47SFTs3A1UFiQ9qOakglPjx7dKyMWgEcTbgX2+PHjs3j6hCX8fMjXw1We2T/+NZCTY//65jeGLRk/vjuGdaNqwaN1NavA5salnz179jl+9evO+O+WxKxhrIYCA2mrtq71xdwLNt7P+Zp4kacLA+0W1vZoWG4BO4197McM2GH1V8LunJPtuLP84FWPcQOidpHZ1XCjfCxppaWl32Ef+6GE7R1T8bA1UJDveOjUnvHfAQ+8CBthl+uvgK6EGy6PAru4uPj23r17z/VXCZOeOhro1cs5t3T7uNu5xQJ4l7nGXQU3KqzGsfmF0+v79+8/P5oTR6YOKgnYUjfZ+vdLm7/vg7HXtwEOTroE8K6AWyy2kx9ZHTdkyJAlbY1IwJ4wVe4KDTAgacMHZy3Z9vbl47h83MkEhxEHvCvgRpnOefPmFfF49lLMU83rRowGPDRgs1POpRdlLZ33xJAi3iCAe+QJdyXSZ4sCmyuVwY+truA5RKaFW0Gzf2gaiNehQH+tqKt3vZkzaAOeRWnkRZ4m9Jc9pPRIWm6cKMrPPnz48HcN2CH1Q8pmzs6yTzux+8rvsgJkiDBiBjdScAvY8LOv4hd58UyBEaOBoDRQ1DPtEfa/r+LMEX2SMFJwoxzHE0880Yv97AXsZ6OSRowGgtIAeLl0VNaCJx4d0ot3wL9/RLiMxF8AKgKY4WcvY3dkOseNxEgDieZz62qqq29dlTNo422cFhH/O9wzBCeHgptfOHjAgK13lYmHqoHsLMf0ozvHPcD7yehJWMY3HLgtsBcvXnwB34F8ONTGmPxGA94a6FuU9vDiZy6+gNPDBjxcuNXoyA033PA4+01mLmzvnjLrIWuA36jP/dcb8h7nHcMePeks3JbV3rp167X8sVF8NMmI0UBENJCXa7/xo3fGXsuFhWW9Ows39nNed911uRdeeOEvI9IiU4jRgKaBi0Zk/vK663rDGxDAta3BRTsDt2W1n3/++Vk8jfDQ4A5lchkNBK+BNKdt6OJfD5rFewjcIV9chgq3BTZ/UGkY36wxz2cH318mZ4ga4Js7Dy1fMHpYZwHvDNzqIpI/1fEkX0Sab8+E2GEme/AasNltmdO/kP8k79Gpi8tQ4Las9rvvvjuBXxe7LvhqmpxGA53TQE6O7bp1r4+RW/PgNWj3JFS4ldXmW+zfY6vdudqavYwGQtAAOONb89/nXUK23sHCbVnt119//TKelmFqCPUzWY0GwtJAbq596j9eueQyLiSki8tQ4IbVdl555ZWzOTRmO6zuMjuHpgGbbfxlOeAOcIPDoPgLBm7LavM3H0fl5+d/KbSKmdxGA+FrID/P/qWXXxw1iksK2noHC7ey2pMnT8bQXzD7hN8aU4LRgIcGbPYpV3UDf0Fb70CgitV2LFq0aAhb7RkexzMrRgNR1ADPezJj0fyLhvAhYWzBbofuSbBwO6dOnfogX7miUCNGAzHRAA+cOP5lSt6DfPCgXJNg4HawO5LDs0XdFJMWmYMaDWgaKChw3DR5ck/MqBDwwrIjuMUlwTQN0/lzHvjuoBGjgZhqwG6ngmfnDsTbXgGtd0dwY5u6kBwwYMCt5qZNTPvUHLxNA+BwYP/0W3lVLiz9MuxvA6w2FsecOXN68fPaX2wr2wRGAzHXQF6O44tzZlsvEwur7erVEdzY5rz77rtv5s9S49anEaOBuNCA3W5L+/rt3W/mynTomnQEt3JJ+JvrmA3IiNFAXGmgX1FawC+m+YJbzLxjyZIlI/mNdtzTN2I0EFcayMqyXfbS7y4cyZWSURNw6yH+4MYOjokTJ95iLiQ99BX3K271Tx331Qy7guBy0vg8WG/FKoft4IbP4i3IpPztwsLCz3tvNOvxrYEW23iqKPs9VxKfnUlc4fncPSrvtUpYb2lygU+/frc33JZLcs899xSwS3KpxxFSdMVWv4dsle+Qzd0c9xqAGevm/AJVVBSTy+ViCDwhQQN8JLVLc1P7/bz39VXOuTye+/rK5zvNcz+U1ZG4XO5Lb5teWbBs1QHMUCXsWoV4w42yYLUd99133yQ2/dBVSoutbhc5997MmkscS4hOK2hxU1mlb7h9daj3f7r3uq99Yp3GJ67jnqktk5atopVcF3Dr0UnecKNNCu5+/fpNNv42m4PyN8jWdDTW/Rjy8TF22yPLTWeriFyWLQu5mLjeAbD26eaezMHfeQG3SLJaiwRdsK7g5icAJ+kbUjVuc+OziYkpPD0Cdc/nDk0EM9xJFedn2ybyrvizEnatknS4oQIsjlmzZvXMzs6+0MplIgmrAQHcwT0tHZxMYXaGe9QDX03vCW55kaap/vIFt33mzJlXt2VUmcxPYmsAgBfmsWkD4Nz9SbbYvnq1G7yC5Q7hRgYH35W82vjbiQ20d+11wL23JfI6OO1TSIBbXBMArsTbciu4eU4Sc1dSNJREoQKcZ9+DBY+U4F8AIv8GEleJUfrJyiTw2g5uGS0R2hXcPL79mSjVyxwmyhpwwkXJdVNFTeRGUQRwNEXiEkajedkZBF4FblUN/nHr5zDi9p/85Cd92NSzh2YkWTUAwAtgwcWkJXhD+UTKm3VLWh9uhmJYmiNwo5lY7Pw8yXDZaMLk1YAArkZRuOdhaRN5mXSxDdyCZ2FZrUgPKrj55s1QczEpKknuEIB347cRYcGFiEQMUf++3V1DubcEbtVx7Sw3v3UzLLm71LRO14AADqudyJKbaQO3ArdqjQ434naeB3CIsdyJ3M2h110Aj+QoSui16Pwe4DUnm4ZwCYphDhXcGC2Rcxahg0dKkMlIimkAgOdnu6mqzvdTg/Gujqx0G7jFiInFM0iHIME+atSo9MzMzAEqxfyknAbOAc4gMBWJdnGZke4eMOozmengmBcFuA63bdq0aYV4jDDletU02NIAAM/LOge3lZgYEceUMa2FXFWAbcEtKzaen4RHP42kugYE8M6Mg8uFqVh+6FLSfOlVtnU2v+yHcFCRG/xaPOt3KG29evUyN2989UAKpgHwXH4evKZee0A6SD0IsMgucQl9FaFvk7iEgfLr27vnucGvwK38E9lu42FAY7lFGyYkZcGz2YkFLgkg+TkOsdyqtjJaomjnZ7gN3AnQidGsosOhWXDrHZdo1iC4YwHgzEzfbglKsBm4g1NkquUSwGsb4neYEG5MTjp5WG6P0RIeBswxN3BSDd3g2gvAc/irox35wsGV1DW5UK/0DDemNlZeCI5ijQkikT91jY1GjAZ8asAX4AI7Qj3us4BOJOpl6nFfRaU77AI3Ntv00RK+gDBw+1KaSTuvgXOAu6mOZwqRuUcEOuSSuITn9+x8TC9L4hLqpTqdynIjCdbbc+6t1tbWFiQaMRroSAMAnF/MpXoA3lHGKG9rddk8+BWfG9WwNTU11fqaoSjKdTSHSwANAPCsjDYTGQf1xb9IYzPVclWU1UaVdLipoaEBG40YDQSlAR1wuYrzDlGQRZuPUmWb937+1r3L0/fnuQM9+NXhdhu4fWjfJHWoAQtwocwrtyQHC6vX7u1WvctDBkmrb7YBbstTErhVQl1dHb82asRoIDQNAHA8j+frIi+0ksLLzRe5wq/iGaMlQrq7oqLCw6yHdyizdypp4JwFd1MDzz4noyjRbD9OrMpaD8vtlqFAAO4uLy8X8qNZL3OsJNEAf6uGLfg5wKPdJMBdXuMCv4plHF/cElWX06dPV5vREqUK89NJDZwDPPouCv4tTpVTtV5tgVvRvnv37hoDt64eE++MBgB4Bs+hDGvqvaA8pIlIXPIhXdIkjx7KNskvIa4q9xyyA24Py40ViHvlypXVPNbNMzobMRoITwMW4F7FeMOJzZKmxwVa71DPg7hIczNVvba+SdwSJFszTgntbh4xKTHWW1RmwnA0AMDTYcG5kK5ccAXLIyUlfBiLY9Rb3BLEscFVW1tbghUjRgOR0IAFuOaKRKJc7zJqG2wlnObiRTwRBbfQjg0uHg781Fhu1oSRiGkAgKfxuJy3ixGpdVS0qtb9KQeKYQ4V02K5BXA3j5gUI7MRo4FIakAAj2SZelmnKuggr1scYxvg1hNaecTkoLHcUI2RSGtAAI+UxZZyUM89h1wwyviamcWzWG5sVyZ94cKFn/L3CxE3YjQQcQ0AcCfPjAMwIyVMq2vhasenXJ5iWMoVuIV2165duxp4xOSYZDCh0UCkNaADLtY3nLC+yXZs14EmfsPTuqAEz9ZoiQU3p7XW1NQY1wTaMdJlGsC7urDg4Qpc6JoGN/xtuCSw3MKyB9xi0l0nTpzYbPzucNVu9g+kAQE8lDFwlOnh0TDKJ8tsmznZ4pfjHpYb+yABGVq3bNmywbjdUImRrtYAAHeE4IML2HJC4OvIW/e3buB66pZbVbudz41MP/3pT3fziwvmNnxX96wpX2kAgHd2ZtnGFqr68QuO3eCWF59uCQ5iWe7q6uqms2fPbjWuCdRiJBoaEMBDORb4LKugLYwrvmGuw62KEcuNFQtujrccO3bsAwO30pH5iZIGBPBgR05QrWNltk0c4K33gHADcGRq2bBhw3rjd7MmjERVAwAccAcj8LfX7Wxdz3kFbvCLRYleDOIYnOEX9tWca93OnDmznmd+7aFypuiP48jjhMVIdDUQjNdQVecuK7iheSLXrJIXPO7KM6ko46wAl9fMOE0Rj0Q1YsJhC8O9mT+Vfb09Ub8EhFaFKc2taVReYRmDMEszu4eigY4Ad7HZPnyKMAQoVtvjYhLH0eHGusCNHVr27du3euDAgRGF21axm2zH1pLN3Yzjxb3YG89Qel02PzIM3bUXf9jjtSdf4i8def3s4veFW39l+StHHaODjaGW5zd/R8fw08pQy2ppddOuva2rGVPFKrdN4EYzlehuCRKwDuB5Pk/KGzlyZM/169e/z5/vi8gXFwC28x9fZrDh1ieOVNW7cBcscSqcAjWtbXRXf/l/K6/ed6rpDDcXr5fh9jtAtzrKl+XGRtDXzJa77siRI6tHjBhxUyRcE9vhV8lWe4SLTizJR3XZLtRiwMlIzDWAx/qOn6HV+04Rf1iQ4AKAV3Brgc1x6/Y74iIw71hwFjTxqMlKniBTtoUV2lyJS0c+f+GLJzc3EgcaYI+EthyilVwVAAVOhVmP2unj3LJBLLfyZe6///5NVVVVRzty7mXHZA8BeC6PJcF3M0tsdADbzF94OPq9P5OMb4NTsdweCPqDWwCHyW8uKSl5zcB9Tm95fDWSg8FSIzHRAC48SyvoNT64YpNDARvMeogvuJEBZh474axo5ikf/trM784bOacBATzYO2kmH1t5/quLxNLCCK/aSX8Fl7yI1Qav7cQf3DgLLL/7ySefLC4rK9turPd5/QHwbOODn1dIFGKw2uW1tP3/3qZiPpzub7ez2qhOMHDj7GjasWPHSy1qSBG7GYEGlAVnwI3/HR0dtLK53XWCXmLVC9hgE0Y4JLg5v9oBO8L8N82cOfM1nvah1FhvqOa85BoLfl4ZXRiD1a6sp9L7lil/G3CDS79goyr+LDe24Wyw/G5+9axh+/btf4jUsCAOkCwigEfCpzRl+PbN8ZDUzhP0h5oadbNG97d9Wm2wFQhuAVxZ729+85t/raysPGmsd/vTEoBn8dRhRiKvAWW1G+jk7OXqQlKstt9REqlBR3AjD8w+CgHcjUePHq3duXPnImO9WRs+xFhw31Y33H8jWO29J2jR0Qr1QSc8+QcewSX49CuB4IblRgHqopLDxm9/+9sr+E2dMmO9fesUY+DGgvvWTWdSYbVrmqjsxytpBfjjRS4mO/S3caxAcCOPWG8FOD9vUrVnz54XjfWGanyLAG5GUcIfRcFzJPtP0ov7jhPe6RWwA1pt9EwwcIv1Vn4379M4Z86cl9h6VxrrDRX6FgW4GQf3rZwgU2G1qxup8ud/V8N/YrXBYUCrjUMEAzfyifVWvvfGjRvLN2/e/LS5awnV+Bfc5MnCOHiE7s6lWjktTN22Unp6awmVs5aD9rWlR4KF29t6N8yYMWMFT96z07xnKar0HQLwTDOK4ls5HaTCHTlVTTvvWqR8bTyrLaMkQVltFB0s3MjrYb358yL1y5Ytm8vzm7iMewL1+BcB3PjgwfnguMPC85G4Xt5Gc3nShnrWbMhWG70RCtztrPfDDz/88f79+/9sLi79gy1bBHBZN6F/DeA2+4Ez9OdfvE4fc65OWW2UHgrcyC/WG38ROJsavv/97/+Gb8ufNdYb6ulY4H/DRUk13zmU9kKDlY109sd/pd9wFGDLhWRQIyTYXyRUuGG9cRAMC+Kg9e+9914ZX2D+mt0UXjUSSAMAPMP75b5AO6XQ9iama0sJ/XrjQSrjZotLAt7AHfgLWkKFGwUL4GrkhNfr+eJyJd+93Gbck+D0LoCHYtFSIS/uRJ6oom23v6BeIROwwVnIYKMnOgs33BPrriXHG+bNm/cIv45WY0ZPoNbAIoAHznk+By5IIXJhKnGV2JYuaXpe2R4o1PfR4/720/PocX/5O0rH6EhlA9U88096hPPp7gg4A28hWW0cqzNwYz/xvS3r/dxzzx1cvXr1L3j0hOfZCLkeKDPlBP43XBSAEcwCBQlEelz21dP0uGwPFOr76HF/++l59Li//P7S20ZHaO0++sXv31cfbvK22uAtZOks3DgQDijWG2da/V133fXm3r17l5ubO1BPcALA01PcB29mp4OnaVj+jcX0JmsNYMsIiVjt4JTplSscuGGeAbhYb1So7pZbbvnV8ePH9xr/20vTHaxaFpxNWyr41nob4WefrKG9dy6kX4EfXsQlAVfgq9NuQAS+SsKHPy829rt5gquWDydMmPCVjIyMdMzaKWI/8S5hMdJeA+r7MNyN6GwR0Zy/v/NIp+O4ckw9LsfR0/S4bA81xAx1VQ1U+8s19K1/7qVjXGYtL7Dc8oCUpg0cMTQJx3LjSDi4t3tSN3/+fPjfjxn/O7TOyGAXJQ2f0ODdsEAkPLfWtb9yLH/HD7Q9lNrhsqyBnY639tJjv39X+dlitQXssKw26hIu3ChDABf3BGdeHfvfq/jR2BVm/BsqCl4E8OD3SMycGM/ec4JW3LuYVnELADa4wb2TsN0RLkNJJOBGQTjLMBbpAfj06dOfLC4uft8ADhUFLwAcF5m6b5pMcVxAlpyl9298jp5krXiDDY7AU9gSKbhREVhwffSkjt+3rLn55pt/WFpa+rEZQQmtrwA3XJRkE4B9pJw+/trz9MPKOjVhvLc7Ao4iIpGGW/xv/L2o0ZMDBw5U8HyDD/HjscUteEDXSNAaEMCTxWrjgaiT1VT84Ev00IFTVMGKELDBiwz7RQzurrYNqqKHDh1q4tvzGyZfmHVNbsUHufz5byNBasDRZn7kvpiuOokj9LXgEJJHj/vKK/kk7Ex+7KOLlIUQdyBP19CJOa/Q/W/soSOchJERwB1RP5vLs6Qr4PZ55vHFZb2r1b1lXNHRa/muXKYB3OqDgBFfgOvg+CtAz6PHuyo/jqEvOA7WYbF5GrSKX71NDyzaQAc4SYb88O+O67SI+dlcliVdATcKB+CyyMFsH+w6WsnTAO+8pD9dx4CnGcBFNYFDAVwfBw+8V+xzAGyeKar+D+vpu798k7ZzjWCtxR3Rh/0iXtmugluvqECO0MbPD5zpmUs7RvamKQx4Rgp/S0rXUVBxAVwpkk1ivPviAPtsPVUv2Uizfvaq+jgToBarDbBhsdGcLpFowo0GqIas3kOnud0fjBlAk/nWc450Wpe0MMkKFV3BB9ddgHiLtzC27GOfmvcWPTj3DfqIuwFQY4ErolvshIab22KdnWiIasyGYqrkZwreu/ICmsivYBVIpyGzkY41IP92cpHZce7ob23icY/jVXToZ3+jB55fR59wDfCNSN1iR3xkxFcro2G55bhyhlqAf3yEanccp7WfG05j+XszRQAcf7VGAmsgHgHHyQawedqzXQ8up/949WNrVEQHO2J3IANpKZpwS10EbhV+eoYaV++lt68dRaPyM2mAAVzUFDgUwJEz1v436oBb6p+W0cZbX6CHNn1KpzkJUMPP1h+GYo/U+ifnaNdJtOHWwZZGus/UUMufPqS114+mfvkZNNxpLHjQPS6Ax9JFwRh2Hdtjnqzy9WnP0k9Ky9QNmpiCDQVGG27pNB1yxF31jeT63Xu07ooLqLx3N7oy3UFO6TjZyYS+NaAPqUbbgquhvkZq5FGwX13/ND3L/YgPnsLH9jXch76OmsQKbjRQQd0WWrAv30r7bXbaOLIPXZHppG7GTQmOBQ/AeZeuHj1B7/HEOXSikg4/vZZmzV5Ba/mwsNbiX8uoiNygQR9HVWIJtzQUjYaLYrkp6w5QOfvhb04aSn3YDx9m3BRRVcehAN7VFCk3hAfz9p6kN29fQD9Y+REd4poJ2GKx9TuPXV0ln4qJNdxotPeiQD9dTc3sprw39gI60zufxsFNkb9cny0xiUoDMtrUFTTBr1e30huo8e399D/TfkPPcj9V8oF1/1qeFRGLHbOeiTXcaLj0g1hvPXSv2EqfuG20bngRXc43fAod/H8rHRgzrcX5gS39tOlKjEI4IcDGmzPHKql43ts0i7/g+y6rQe44yoiIgC19GFNNwTWLF0FdcLJh4cf1Cd/p5Q9SqyW7ex7lLL2X7vjsILq3WyZ/vIBzWZ3ImYy01wDch3AFUOMZbJ5TpH7rYVrAs64uPVvtYan1N2hgrbGIwQr38GHtHw+WW28AlCKLnP0IW+ubyLX0A9pxqIzWXNib+vLk7oPlYtNArqvwfDwcvYgLUsu2eP9pemfOSvrBwyvpHe4HuCAyGgKwvZ/siwuwoYV4styojwieYsaCGT14dj1lxfl7YZYlz3j2drr6Xy6m2T3zqD+PqpAZNmTt+BGAiiVYgcWHC8L3H46+toOeenAZvc/7wuUAzAI01vVnRCLwP8ElRlDiFW40EXUTwAVyAG4tA3tR3oI76J4xA+mOvHTKgKtiIIfq2kswcANquCDVTdTIj0YsvXcpLSo9rcatYZ31RaDmU8Aa5Wp/0BinxDPcUA3qhwXuEwCHLw5LbgGO+MyraNCDk+nuEb1pOrsr6TyyYiBnxXiLP8ABNW6dswvStP8UrXrmPVr8x410mPfXgUYcUGOID1CLbx3CfwLvFUWJd7hFFagnrLhALq4KLjoF9IyvXkb9Zk+lmSOK6Cv8XfZMfl7cQC4a9BECatyIqW6gBob6b0+toT/+5SM1OQ5cDgEbcd0FAdRwQeIWaq6bkkSBG5VFXQVyWHFxVQC4QK7iU4ZTr4e/RLeN7kdfzcugXAU57xnOBRYfIykE1htv8yioG6lm1zH6y3/9nZat/UQ96CQgA2yJ+3JB4h5sdFYiwS1wCeDe/jjAFosOa57+2c9Q4X9/mW4Z3Zdm8J3OQszJJ3c7Uwl0AI0Fkw80sFPBU5iV7zpOL//0VVqx9VP1pTAALEAjrltq8asTwlpz3S1JRLil8gI5XBUs8MdlfFwgV8AX5lHW4zfSxCsG0vUDu9NEfnY8Xax5Ml+Awu0QK13bRE2lZ2n9llJ6g4f11pdXW4+h6hYacfjUcus8YVwQrnM7SWS40RjUXyAXn1wgB+ACucTTxw2mbj+cRlNH9aZp/QroYobcpmZ3QkFcUiJbdLHQ8Bnw0gC7Hu5jFbRzDz8Dwi/nrtlUom6VwzLLIhYa6zrUsNJiqRPCBeH6tpNEh1sa5AtyfXQFcAN6gVydAHdNoAF3j6PpQ3rQlIIcGoxRFoCubg5x5niHXYcZz3wAaIx6VNRSSXEZrV28iVYt2UBHuCkCrkCNdT0O10OsdMJDzW1Rkixw6+0R0MVd0V0WuQgV0MXKO798CRV9bRxdMbQHje3TjS7n0Za+cF0wdq7DjgPFwroDZIgCmkPAjDHpttGO4/zo6YcHy2jbnzbRlld30CnOAmB1qAVoPR1Ay4IjyMLRxJdkg1vvEbQNroq4KwI7ABeovUNsQz7nzHHU78YxdMWQnjSWn0q8LDuNemIObVyQAnbrwpQzQ3Tg9fi5rYF/BV7klLgijX9wIQiYEeKtcn7r5czJKvqo+AxtW7mdtvxxkxq+E+urwytwSyh5BGgu0XI/AlcywXIkM9zSFWLJBXSEFsQcB+BYF+glriBvS7dPGU6FUy+iwcOKaFBRPg3qlkUD89NpIFv4fmzdnQAez1OLK6POLK91bBPLq0IGFxd8AjHSsN5mlVt4/PlYVROV8qQ2paeq6DDPr3d4zW4q4WE7fAsdYAJWAVbiANk7DpiRJjAjVIflMGkFfZAqgrbqC+AF6Ahl8QU20mS7vo86WXIzyfm1K6jfZQNpQEEm5fP0w1lZaZTNw47Z7L9ns4XPZl8+i61+NsOdwQA3svWtY9+4ni1xHfvJdTw8V1fPS2Mz1Vc0UNVHpXTkT1voWE2DB5AAFFCK1RVgBWR9Xc8j+wjMEnJRyS2pBLfekzrkiCtQOdThFaB9wS0nhYRShne5so5jIy4CwCACmncolhWQCpwIJS7wAmyJ+8rrXS5nTx3RFZ46rfZsqQCohwK7Hgr4HaXpZUgcR9PjWBfo9LikIRSQBWZ93V8a0vUyJI5jpKRA6UY8NSAgeoeAGmmBQu/9UDrSvAXwQQRCPRRQA4X6PhI/V6r59al0oxZPDQisSPUVlzQ9lLx6iLi3AEiIHgqk3qHk886rCjA/7TWADjESugZ0vUncO5RSJV3W9VBAlTRZ9w6xXdIkrwkDaKAjxQfY1WwOoIFQdGvADaDMzmz+f6SMYEX4z7hMAAAAAElFTkSuQmCC'};return{FaviconsByHue,};});'use strict';Polymer({is:'tr-ui-b-info-bar-group',ready(){this.messages_=[];},clearMessages(){this.messages_=[];this.updateContents_();},addMessage(text,opt_buttons){opt_buttons=opt_buttons||[];for(let i=0;i<opt_buttons.length;i++){if(opt_buttons[i].buttonText===undefined){throw new Error('buttonText must be provided');}
-if(opt_buttons[i].onClick===undefined){throw new Error('onClick must be provided');}}
-this.messages_.push({text,buttons:opt_buttons||[]});this.updateContents_();},updateContents_(){Polymer.dom(this.$.messages).textContent='';this.messages_.forEach(function(message){const bar=document.createElement('tr-ui-b-info-bar');bar.message=message.text;bar.visible=true;message.buttons.forEach(function(button){bar.addButton(button.buttonText,button.onClick);},this);Polymer.dom(this.$.messages).appendChild(bar);},this);}});'use strict';Polymer({is:'tr-ui-b-toolbar-button'});'use strict';tr.exportTo('tr.ui',function(){const Task=tr.b.Task;function FindController(brushingStateController){this.brushingStateController_=brushingStateController;this.filterHits_=[];this.currentHitIndex_=-1;this.activePromise_=Promise.resolve();this.activeTask_=undefined;}
-FindController.prototype={__proto__:Object.prototype,get model(){return this.brushingStateController_.model;},get brushingStateController(){return this.brushingStateController_;},enqueueOperation_(operation){let task;if(operation instanceof tr.b.Task){task=operation;}else{task=new tr.b.Task(operation,this);}
-if(this.activeTask_){this.activeTask_=this.activeTask_.enqueue(task);}else{this.activeTask_=task;this.activePromise_=Task.RunWhenIdle(this.activeTask_);this.activePromise_.then(function(){this.activePromise_=undefined;this.activeTask_=undefined;}.bind(this));}},startFiltering(filterText){const sc=this.brushingStateController_;if(!sc)return;this.enqueueOperation_(function(){this.filterHits_=[];this.currentHitIndex_=-1;}.bind(this));let stateFromString;try{stateFromString=sc.uiStateFromString(filterText);}catch(e){this.enqueueOperation_(function(){const overlay=new tr.ui.b.Overlay();Polymer.dom(overlay).textContent=e.message;overlay.title='UI State Navigation Error';overlay.visible=true;});return this.activePromise_;}
-if(stateFromString!==undefined){this.enqueueOperation_(sc.navToPosition.bind(this,stateFromString,true));}else{if(filterText.length===0){this.enqueueOperation_(sc.findTextCleared.bind(sc));}else{const filter=new tr.c.FullTextFilter(filterText);const filterHitSet=new tr.model.EventSet();this.enqueueOperation_(sc.addAllEventsMatchingFilterToSelectionAsTask(filter,filterHitSet));this.enqueueOperation_(function(){this.filterHits_=filterHitSet.toArray();sc.findTextChangedTo(filterHitSet);}.bind(this));}}
-return this.activePromise_;},get filterHits(){return this.filterHits_;},get currentHitIndex(){return this.currentHitIndex_;},find_(dir){const firstHit=this.currentHitIndex_===-1;if(firstHit&&dir<0){this.currentHitIndex_=0;}
-const N=this.filterHits.length;this.currentHitIndex_=(this.currentHitIndex_+dir+N)%N;if(!this.brushingStateController_)return;this.brushingStateController_.findFocusChangedTo(new tr.model.EventSet(this.filterHits[this.currentHitIndex]));},findNext(){this.find_(1);},findPrevious(){this.find_(-1);}};return{FindController,};});'use strict';tr.exportTo('tr.ui.b',function(){function TimingTool(viewport,targetElement){this.viewport_=viewport;this.onMouseMove_=this.onMouseMove_.bind(this);this.onDblClick_=this.onDblClick_.bind(this);this.targetElement_=targetElement;this.isMovingLeftEdge_=false;}
-TimingTool.prototype={onEnterTiming(e){this.targetElement_.addEventListener('mousemove',this.onMouseMove_);this.targetElement_.addEventListener('dblclick',this.onDblClick_);},onBeginTiming(e){if(!this.isTouchPointInsideTrackBounds_(e.clientX,e.clientY)){return;}
-const pt=this.getSnappedToEventPosition_(e);this.mouseDownAt_(pt.x,pt.y);this.updateSnapIndicators_(pt);},updateSnapIndicators_(pt){if(!pt.snapped)return;const ir=this.viewport_.interestRange;if(ir.min===pt.x){ir.leftSnapIndicator=new tr.ui.SnapIndicator(pt.y,pt.height);}
-if(ir.max===pt.x){ir.rightSnapIndicator=new tr.ui.SnapIndicator(pt.y,pt.height);}},onUpdateTiming(e){const pt=this.getSnappedToEventPosition_(e);this.mouseMoveAt_(pt.x,pt.y,true);this.updateSnapIndicators_(pt);},onEndTiming(e){this.mouseUp_();},onExitTiming(e){this.targetElement_.removeEventListener('mousemove',this.onMouseMove_);this.targetElement_.removeEventListener('dblclick',this.onDblClick_);},onMouseMove_(e){if(e.button)return;const worldX=this.getWorldXFromEvent_(e);this.mouseMoveAt_(worldX,e.clientY,false);},onDblClick_(e){},isTouchPointInsideTrackBounds_(clientX,clientY){if(!this.viewport_||!this.viewport_.modelTrackContainer||!this.viewport_.modelTrackContainer.canvas){return false;}
-const canvas=this.viewport_.modelTrackContainer.canvas;const canvasRect=canvas.getBoundingClientRect();if(clientX>=canvasRect.left&&clientX<=canvasRect.right&&clientY>=canvasRect.top&&clientY<=canvasRect.bottom){return true;}
-return false;},mouseDownAt_(worldX,y){const ir=this.viewport_.interestRange;const dt=this.viewport_.currentDisplayTransform;const pixelRatio=window.devicePixelRatio||1;const nearnessThresholdWorld=dt.xViewVectorToWorld(6*pixelRatio);if(ir.isEmpty){ir.setMinAndMax(worldX,worldX);ir.rightSelected=true;this.isMovingLeftEdge_=false;return;}
-if(Math.abs(worldX-ir.min)<nearnessThresholdWorld){ir.leftSelected=true;ir.min=worldX;this.isMovingLeftEdge_=true;return;}
-if(Math.abs(worldX-ir.max)<nearnessThresholdWorld){ir.rightSelected=true;ir.max=worldX;this.isMovingLeftEdge_=false;return;}
-ir.setMinAndMax(worldX,worldX);ir.rightSelected=true;this.isMovingLeftEdge_=false;},mouseMoveAt_(worldX,y,mouseDown){if(mouseDown){this.updateMovingEdge_(worldX);return;}
-const ir=this.viewport_.interestRange;const dt=this.viewport_.currentDisplayTransform;const pixelRatio=window.devicePixelRatio||1;const nearnessThresholdWorld=dt.xViewVectorToWorld(6*pixelRatio);if(Math.abs(worldX-ir.min)<nearnessThresholdWorld){ir.leftSelected=true;ir.rightSelected=false;return;}
-if(Math.abs(worldX-ir.max)<nearnessThresholdWorld){ir.leftSelected=false;ir.rightSelected=true;return;}
-ir.leftSelected=false;ir.rightSelected=false;return;},updateMovingEdge_(newWorldX){const ir=this.viewport_.interestRange;let a=ir.min;let b=ir.max;if(this.isMovingLeftEdge_){a=newWorldX;}else{b=newWorldX;}
-if(a<=b){ir.setMinAndMax(a,b);}else{ir.setMinAndMax(b,a);}
-if(ir.min===newWorldX){this.isMovingLeftEdge_=true;ir.leftSelected=true;ir.rightSelected=false;}else{this.isMovingLeftEdge_=false;ir.leftSelected=false;ir.rightSelected=true;}},mouseUp_(){const dt=this.viewport_.currentDisplayTransform;const ir=this.viewport_.interestRange;ir.leftSelected=false;ir.rightSelected=false;const pixelRatio=window.devicePixelRatio||1;const minWidthValue=dt.xViewVectorToWorld(2*pixelRatio);if(ir.range<minWidthValue){ir.reset();}},getWorldXFromEvent_(e){const pixelRatio=window.devicePixelRatio||1;const canvas=this.viewport_.modelTrackContainer.canvas;const worldOffset=canvas.getBoundingClientRect().left;const viewX=(e.clientX-worldOffset)*pixelRatio;return this.viewport_.currentDisplayTransform.xViewToWorld(viewX);},getSnappedToEventPosition_(e){const pixelRatio=window.devicePixelRatio||1;const EVENT_SNAP_RANGE=16*pixelRatio;const modelTrackContainer=this.viewport_.modelTrackContainer;const modelTrackContainerRect=modelTrackContainer.getBoundingClientRect();const viewport=this.viewport_;const dt=viewport.currentDisplayTransform;const worldMaxDist=dt.xViewVectorToWorld(EVENT_SNAP_RANGE);const worldX=this.getWorldXFromEvent_(e);const mouseY=e.clientY;const selection=new tr.model.EventSet();modelTrackContainer.addClosestEventToSelection(worldX,worldMaxDist,mouseY,mouseY,selection);if(!selection.length){modelTrackContainer.addClosestEventToSelection(worldX,worldMaxDist,modelTrackContainerRect.top,modelTrackContainerRect.bottom,selection);}
-let minDistX=worldMaxDist;let minDistY=Infinity;const pixWidth=dt.xViewVectorToWorld(1);const result={x:worldX,y:mouseY-modelTrackContainerRect.top,height:0,snapped:false};const eventBounds=new tr.b.math.Range();for(const event of selection){const track=viewport.trackForEvent(event);const trackRect=track.getBoundingClientRect();eventBounds.reset();event.addBoundsToRange(eventBounds);let eventX;if(Math.abs(eventBounds.min-worldX)<Math.abs(eventBounds.max-worldX)){eventX=eventBounds.min;}else{eventX=eventBounds.max;}
-const distX=eventX-worldX;const eventY=trackRect.top;const eventHeight=trackRect.height;const distY=Math.abs(eventY+eventHeight/2-mouseY);if((distX<=minDistX||Math.abs(distX-minDistX)<pixWidth)&&distY<minDistY){minDistX=distX;minDistY=distY;result.x=eventX;result.y=eventY+
-modelTrackContainer.scrollTop-modelTrackContainerRect.top;result.height=eventHeight;result.snapped=true;}}
-return result;}};return{TimingTool,};});'use strict';tr.exportTo('tr.ui',function(){const kDefaultPanAnimationDurationMs=100.0;const lerp=tr.b.math.lerp;function TimelineDisplayTransformPanAnimation(deltaX,deltaY,opt_durationMs){this.deltaX=deltaX;this.deltaY=deltaY;if(opt_durationMs===undefined){this.durationMs=kDefaultPanAnimationDurationMs;}else{this.durationMs=opt_durationMs;}
-this.startPanX=undefined;this.startPanY=undefined;this.startTimeMs=undefined;}
-TimelineDisplayTransformPanAnimation.prototype={__proto__:tr.ui.b.Animation.prototype,get affectsPanY(){return this.deltaY!==0;},canTakeOverFor(existingAnimation){return existingAnimation instanceof TimelineDisplayTransformPanAnimation;},takeOverFor(existing,timestamp,target){const remainingDeltaXOnExisting=existing.goalPanX-target.panX;const remainingDeltaYOnExisting=existing.goalPanY-target.panY;let remainingTimeOnExisting=timestamp-(existing.startTimeMs+existing.durationMs);remainingTimeOnExisting=Math.max(remainingTimeOnExisting,0);this.deltaX+=remainingDeltaXOnExisting;this.deltaY+=remainingDeltaYOnExisting;this.durationMs+=remainingTimeOnExisting;},start(timestamp,target){this.startTimeMs=timestamp;this.startPanX=target.panX;this.startPanY=target.panY;},tick(timestamp,target){let percentDone=(timestamp-this.startTimeMs)/this.durationMs;percentDone=tr.b.math.clamp(percentDone,0,1);target.panX=lerp(percentDone,this.startPanX,this.goalPanX);if(this.affectsPanY){target.panY=lerp(percentDone,this.startPanY,this.goalPanY);}
-return timestamp>=this.startTimeMs+this.durationMs;},get goalPanX(){return this.startPanX+this.deltaX;},get goalPanY(){return this.startPanY+this.deltaY;}};function TimelineDisplayTransformZoomToAnimation(goalFocalPointXWorld,goalFocalPointXView,goalFocalPointY,zoomInRatioX,opt_durationMs){this.goalFocalPointXWorld=goalFocalPointXWorld;this.goalFocalPointXView=goalFocalPointXView;this.goalFocalPointY=goalFocalPointY;this.zoomInRatioX=zoomInRatioX;if(opt_durationMs===undefined){this.durationMs=kDefaultPanAnimationDurationMs;}else{this.durationMs=opt_durationMs;}
-this.startTimeMs=undefined;this.startScaleX=undefined;this.goalScaleX=undefined;this.startPanY=undefined;}
-TimelineDisplayTransformZoomToAnimation.prototype={__proto__:tr.ui.b.Animation.prototype,get affectsPanY(){return this.startPanY!==this.goalFocalPointY;},canTakeOverFor(existingAnimation){return false;},takeOverFor(existingAnimation,timestamp,target){this.goalScaleX=target.scaleX*this.zoomInRatioX;},start(timestamp,target){this.startTimeMs=timestamp;this.startScaleX=target.scaleX;this.goalScaleX=this.zoomInRatioX*target.scaleX;this.startPanY=target.panY;},tick(timestamp,target){let percentDone=(timestamp-this.startTimeMs)/this.durationMs;percentDone=tr.b.math.clamp(percentDone,0,1);target.scaleX=lerp(percentDone,this.startScaleX,this.goalScaleX);if(this.affectsPanY){target.panY=lerp(percentDone,this.startPanY,this.goalFocalPointY);}
-target.xPanWorldPosToViewPos(this.goalFocalPointXWorld,this.goalFocalPointXView);return timestamp>=this.startTimeMs+this.durationMs;}};return{TimelineDisplayTransformPanAnimation,TimelineDisplayTransformZoomToAnimation,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const DrawType={GENERAL_EVENT:1,INSTANT_EVENT:2,BACKGROUND:3,GRID:4,FLOW_ARROWS:5,MARKERS:6,HIGHLIGHTS:7,ANNOTATIONS:8};const MAX_OVERSIZE_MULTIPLE=3.0;const REDRAW_SLOP=(MAX_OVERSIZE_MULTIPLE-1)/2;const DrawingContainer=tr.ui.b.define('drawing-container',tr.ui.tracks.Track);DrawingContainer.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('drawing-container');this.canvas_=document.createElement('canvas');this.canvas_.className='drawing-container-canvas';this.canvas_.style.left=tr.ui.b.constants.HEADING_WIDTH+'px';Polymer.dom(this).appendChild(this.canvas_);this.ctx_=this.canvas_.getContext('2d');this.offsetY_=0;this.viewportChange_=this.viewportChange_.bind(this);this.viewport.addEventListener('change',this.viewportChange_);window.addEventListener('resize',this.windowResized_.bind(this));this.addEventListener('scroll',this.scrollChanged_.bind(this));},get canvas(){return this.canvas_;},context(){return this.ctx_;},viewportChange_(){this.invalidate();},windowResized_(){this.invalidate();},scrollChanged_(){if(this.updateOffsetY_()){this.invalidate();}},invalidate(){if(this.rafPending_)return;this.rafPending_=true;tr.b.requestPreAnimationFrame(this.preDraw_,this);},preDraw_(){this.rafPending_=false;this.updateCanvasSizeIfNeeded_();tr.b.requestAnimationFrameInThisFrameIfPossible(this.draw_,this);},draw_(){this.ctx_.clearRect(0,0,this.canvas_.width,this.canvas_.height);const typesToDraw=[DrawType.BACKGROUND,DrawType.HIGHLIGHTS,DrawType.GRID,DrawType.INSTANT_EVENT,DrawType.GENERAL_EVENT,DrawType.MARKERS,DrawType.ANNOTATIONS,DrawType.FLOW_ARROWS];for(const idx in typesToDraw){for(let i=0;i<this.children.length;++i){if(!(this.children[i]instanceof tr.ui.tracks.Track)){continue;}
-this.children[i].drawTrack(typesToDraw[idx]);}}
-const pixelRatio=window.devicePixelRatio||1;const bounds=this.canvas_.getBoundingClientRect();const dt=this.viewport.currentDisplayTransform;const viewLWorld=dt.xViewToWorld(0);const viewRWorld=dt.xViewToWorld(bounds.width*pixelRatio);const viewHeight=bounds.height*pixelRatio;this.viewport.drawGridLines(this.ctx_,viewLWorld,viewRWorld,viewHeight);},updateOffsetY_(){const maxYDelta=window.innerHeight*REDRAW_SLOP;let newOffset=this.scrollTop-maxYDelta;if(Math.abs(newOffset-this.offsetY_)<=maxYDelta)return false;const maxOffset=this.scrollHeight-
-this.canvas_.getBoundingClientRect().height;newOffset=Math.max(0,Math.min(newOffset,maxOffset));if(newOffset!==this.offsetY_){this.offsetY_=newOffset;return true;}
-return false;},updateCanvasSizeIfNeeded_(){const visibleChildTracks=Array.from(this.children).filter(this.visibleFilter_);if(visibleChildTracks.length===0){return;}
-const thisBounds=this.getBoundingClientRect();const firstChildTrackBounds=visibleChildTracks[0].getBoundingClientRect();const lastChildTrackBounds=visibleChildTracks[visibleChildTracks.length-1].getBoundingClientRect();const innerWidth=firstChildTrackBounds.width-
-tr.ui.b.constants.HEADING_WIDTH;const innerHeight=Math.min(lastChildTrackBounds.bottom-firstChildTrackBounds.top,Math.floor(window.innerHeight*MAX_OVERSIZE_MULTIPLE));const pixelRatio=window.devicePixelRatio||1;if(this.canvas_.width!==innerWidth*pixelRatio){this.canvas_.width=innerWidth*pixelRatio;this.canvas_.style.width=innerWidth+'px';}
-if(this.canvas_.height!==innerHeight*pixelRatio){this.canvas_.height=innerHeight*pixelRatio;this.canvas_.style.height=innerHeight+'px';}
-if(this.canvas_.top!==this.offsetY_){this.canvas_.top=this.offsetY_;this.canvas_.style.top=this.offsetY_+'px';}},visibleFilter_(element){if(!(element instanceof tr.ui.tracks.Track))return false;return window.getComputedStyle(element).display!=='none';},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){for(let i=0;i<this.children.length;++i){if(!(this.children[i]instanceof tr.ui.tracks.Track)){continue;}
-const trackClientRect=this.children[i].getBoundingClientRect();const a=Math.max(loY,trackClientRect.top);const b=Math.min(hiY,trackClientRect.bottom);if(a<=b){this.children[i].addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection);}}
-tr.ui.tracks.Track.prototype.addClosestEventToSelection.apply(this,arguments);},addEventsToTrackMap(eventToTrackMap){for(let i=0;i<this.children.length;++i){if(!(this.children[i]instanceof tr.ui.tracks.Track)){continue;}
-this.children[i].addEventsToTrackMap(eventToTrackMap);}}};return{DrawingContainer,DrawType,};});'use strict';tr.exportTo('tr.model',function(){const SelectableItem=tr.model.SelectableItem;const SelectionState=tr.model.SelectionState;function ProxySelectableItem(modelItem){SelectableItem.call(this,modelItem);}
-ProxySelectableItem.prototype={__proto__:SelectableItem.prototype,get selectionState(){const modelItem=this.modelItem_;if(modelItem===undefined){return SelectionState.NONE;}
-return modelItem.selectionState;}};return{ProxySelectableItem,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const EventPresenter=tr.ui.b.EventPresenter;const SelectionState=tr.model.SelectionState;const LetterDotTrack=tr.ui.b.define('letter-dot-track',tr.ui.tracks.Track);LetterDotTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('letter-dot-track');this.items_=undefined;this.heading_=document.createElement('tr-ui-b-heading');Polymer.dom(this).appendChild(this.heading_);},set heading(heading){this.heading_.heading=heading;},get heading(){return this.heading_.heading;},set tooltip(tooltip){this.heading_.tooltip=tooltip;},get items(){return this.items_;},set items(items){this.items_=items;this.invalidateDrawingContainer();},get height(){return window.getComputedStyle(this).height;},set height(height){this.style.height=height;},get dumpRadiusView(){return 7*(window.devicePixelRatio||1);},draw(type,viewLWorld,viewRWorld,viewHeight){if(this.items_===undefined)return;switch(type){case tr.ui.tracks.DrawType.GENERAL_EVENT:this.drawLetterDots_(viewLWorld,viewRWorld);break;}},drawLetterDots_(viewLWorld,viewRWorld){const ctx=this.context();const pixelRatio=window.devicePixelRatio||1;const bounds=this.getBoundingClientRect();const height=bounds.height*pixelRatio;const halfHeight=height*0.5;const twoPi=Math.PI*2;const dt=this.viewport.currentDisplayTransform;const dumpRadiusView=this.dumpRadiusView;const itemRadiusWorld=dt.xViewVectorToWorld(height);const items=this.items_;const loI=tr.b.findLowIndexInSortedArray(items,function(item){return item.start;},viewLWorld);const oldFont=ctx.font;ctx.font='400 '+Math.floor(9*pixelRatio)+'px Arial';ctx.strokeStyle='rgb(0,0,0)';ctx.textBaseline='middle';ctx.textAlign='center';const drawItems=function(selected){for(let i=loI;i<items.length;++i){const item=items[i];const x=item.start;if(x-itemRadiusWorld>viewRWorld)break;if(item.selected!==selected)continue;const xView=dt.xWorldToView(x);ctx.fillStyle=EventPresenter.getSelectableItemColorAsString(item);ctx.beginPath();ctx.arc(xView,halfHeight,dumpRadiusView+0.5,0,twoPi);ctx.fill();if(item.selected){ctx.lineWidth=3;ctx.strokeStyle='rgb(100,100,0)';ctx.stroke();ctx.beginPath();ctx.arc(xView,halfHeight,dumpRadiusView,0,twoPi);ctx.lineWidth=1.5;ctx.strokeStyle='rgb(255,255,0)';ctx.stroke();}else{ctx.lineWidth=1;ctx.strokeStyle='rgb(0,0,0)';ctx.stroke();}
-ctx.fillStyle='rgb(255, 255, 255)';ctx.fillText(item.dotLetter,xView,halfHeight);}};drawItems(false);drawItems(true);ctx.lineWidth=1;ctx.font=oldFont;},addEventsToTrackMap(eventToTrackMap){if(this.items_===undefined)return;this.items_.forEach(function(item){item.addToTrackMap(eventToTrackMap,this);},this);},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){if(this.items_===undefined)return;const itemRadiusWorld=viewPixWidthWorld*this.dumpRadiusView;tr.b.iterateOverIntersectingIntervals(this.items_,function(x){return x.start-itemRadiusWorld;},function(x){return 2*itemRadiusWorld;},loWX,hiWX,function(item){item.addToSelection(selection);}.bind(this));},addEventNearToProvidedEventToSelection(event,offset,selection){if(this.items_===undefined)return;const index=this.items_.findIndex(item=>item.modelItem===event);if(index===-1)return false;const newIndex=index+offset;if(newIndex>=0&&newIndex<this.items_.length){this.items_[newIndex].addToSelection(selection);return true;}
-return false;},addAllEventsMatchingFilterToSelection(filter,selection){},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){if(this.items_===undefined)return;const item=tr.b.findClosestElementInSortedArray(this.items_,function(x){return x.start;},worldX,worldMaxDist);if(!item)return;item.addToSelection(selection);}};function LetterDot(modelItem,dotLetter,colorId,start){tr.model.ProxySelectableItem.call(this,modelItem);this.dotLetter=dotLetter;this.colorId=colorId;this.start=start;}
-LetterDot.prototype={__proto__:tr.model.ProxySelectableItem.prototype};return{LetterDotTrack,LetterDot,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const AlertTrack=tr.ui.b.define('alert-track',tr.ui.tracks.LetterDotTrack);AlertTrack.prototype={__proto__:tr.ui.tracks.LetterDotTrack.prototype,decorate(viewport){tr.ui.tracks.LetterDotTrack.prototype.decorate.call(this,viewport);this.heading='Alerts';this.alerts_=undefined;},get alerts(){return this.alerts_;},set alerts(alerts){this.alerts_=alerts;if(alerts===undefined){this.items=undefined;return;}
-this.items=this.alerts_.map(function(alert){return new tr.ui.tracks.LetterDot(alert,String.fromCharCode(9888),alert.colorId,alert.start);});}};return{AlertTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const Task=tr.b.Task;const ContainerTrack=tr.ui.b.define('container-track',tr.ui.tracks.Track);ContainerTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);},detach(){Polymer.dom(this).textContent='';},get tracks_(){const tracks=[];for(let i=0;i<this.children.length;i++){if(this.children[i]instanceof tr.ui.tracks.Track){tracks.push(this.children[i]);}}
-return tracks;},drawTrack(type){this.tracks_.forEach(function(track){track.drawTrack(type);});},addIntersectingEventsInRangeToSelection(loVX,hiVX,loY,hiY,selection){for(let i=0;i<this.tracks_.length;i++){const trackClientRect=this.tracks_[i].getBoundingClientRect();const a=Math.max(loY,trackClientRect.top);const b=Math.min(hiY,trackClientRect.bottom);if(a<=b){this.tracks_[i].addIntersectingEventsInRangeToSelection(loVX,hiVX,loY,hiY,selection);}}
-tr.ui.tracks.Track.prototype.addIntersectingEventsInRangeToSelection.apply(this,arguments);},addEventsToTrackMap(eventToTrackMap){for(const track of this.tracks_){track.addEventsToTrackMap(eventToTrackMap);}},addAllEventsMatchingFilterToSelection(filter,selection){for(let i=0;i<this.tracks_.length;i++){this.tracks_[i].addAllEventsMatchingFilterToSelection(filter,selection);}},addAllEventsMatchingFilterToSelectionAsTask(filter,selection){const task=new Task();for(let i=0;i<this.tracks_.length;i++){task.subTask(function(i){return function(){this.tracks_[i].addAllEventsMatchingFilterToSelection(filter,selection);};}(i),this);}
-return task;},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){for(let i=0;i<this.tracks_.length;i++){const trackClientRect=this.tracks_[i].getBoundingClientRect();const a=Math.max(loY,trackClientRect.top);const b=Math.min(hiY,trackClientRect.bottom);if(a<=b){this.tracks_[i].addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection);}}
-tr.ui.tracks.Track.prototype.addClosestEventToSelection.apply(this,arguments);},addContainersToTrackMap(containerToTrackMap){this.tracks_.forEach(function(track){track.addContainersToTrackMap(containerToTrackMap);});},clearTracks_(){this.tracks_.forEach(function(track){Polymer.dom(this).removeChild(track);},this);}};return{ContainerTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){function ChartPoint(modelItem,x,y,opt_yBase){tr.model.ProxySelectableItem.call(this,modelItem);this.x=x;this.y=y;this.dotLetter=undefined;this.yBase=opt_yBase;}
-ChartPoint.prototype={__proto__:tr.model.ProxySelectableItem.prototype,};return{ChartPoint,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const EventPresenter=tr.ui.b.EventPresenter;const SelectionState=tr.model.SelectionState;const ChartSeriesType={LINE:0,AREA:1};const DEFAULT_RENDERING_CONFIG={chartType:ChartSeriesType.LINE,selectedPointSize:4,unselectedPointSize:3,solidSelectedDots:false,colorId:0,lineWidth:1,skipDistance:1,unselectedPointDensityTransparent:0.10,unselectedPointDensityOpaque:0.05,backgroundOpacity:0.5,stepGraph:true};const LAST_POINT_WIDTH=16;const DOT_LETTER_RADIUS_PX=7;const DOT_LETTER_RADIUS_PADDING_PX=0.5;const DOT_LETTER_SELECTED_OUTLINE_WIDTH_PX=3;const DOT_LETTER_SELECTED_OUTLINE_DETAIL_WIDTH_PX=1.5;const DOT_LETTER_UNSELECTED_OUTLINE_WIDTH_PX=1;const DOT_LETTER_FONT_WEIGHT=400;const DOT_LETTER_FONT_SIZE_PX=9;const DOT_LETTER_FONT='Arial';const ChartSeriesComponent={BACKGROUND:0,LINE:1,DOTS:2};function ChartSeries(points,seriesYAxis,opt_renderingConfig){this.points=points;this.seriesYAxis=seriesYAxis;this.useRenderingConfig_(opt_renderingConfig);}
-ChartSeries.prototype={useRenderingConfig_(opt_renderingConfig){const config=opt_renderingConfig||{};for(const[key,defaultValue]of
-Object.entries(DEFAULT_RENDERING_CONFIG)){let value=config[key];if(value===undefined){value=defaultValue;}
-this[key+'_']=value;}
-this.topPadding=this.bottomPadding=Math.max(this.selectedPointSize_,this.unselectedPointSize_)/2;},get range(){const range=new tr.b.math.Range();this.points.forEach(function(point){range.addValue(point.y);},this);return range;},draw(ctx,transform,highDetails){if(this.points===undefined||this.points.length===0){return;}
-if(this.chartType_===ChartSeriesType.AREA){this.drawComponent_(ctx,transform,ChartSeriesComponent.BACKGROUND,highDetails);}
-if(this.chartType_===ChartSeriesType.LINE||highDetails){this.drawComponent_(ctx,transform,ChartSeriesComponent.LINE,highDetails);}
-this.drawComponent_(ctx,transform,ChartSeriesComponent.DOTS,highDetails);},drawComponent_(ctx,transform,component,highDetails){let extraPixels=0;if(component===ChartSeriesComponent.DOTS){extraPixels=Math.max(this.selectedPointSize_,this.unselectedPointSize_);}
-const pixelRatio=transform.pixelRatio;const leftViewX=transform.leftViewX-extraPixels*pixelRatio;const rightViewX=transform.rightViewX+extraPixels*pixelRatio;const leftTimestamp=transform.leftTimestamp-extraPixels;const rightTimestamp=transform.rightTimestamp+extraPixels;const firstVisibleIndex=tr.b.findLowIndexInSortedArray(this.points,function(point){return point.x;},leftTimestamp);let lastVisibleIndex=tr.b.findLowIndexInSortedArray(this.points,function(point){return point.x;},rightTimestamp);if(lastVisibleIndex>=this.points.length||this.points[lastVisibleIndex].x>rightTimestamp){lastVisibleIndex--;}
-const viewSkipDistance=this.skipDistance_*pixelRatio;let selectedCircleRadius;let letterDotRadius;let squareSize;let squareHalfSize;let squareOpacity;let unselectedSeriesColor;let currentStateSeriesColor;ctx.save();ctx.font=DOT_LETTER_FONT_WEIGHT+' '+
-Math.floor(DOT_LETTER_FONT_SIZE_PX*pixelRatio)+'px '+
-DOT_LETTER_FONT;ctx.textBaseline='middle';ctx.textAlign='center';switch(component){case ChartSeriesComponent.DOTS:{selectedCircleRadius=(this.selectedPointSize_/2)*pixelRatio;letterDotRadius=Math.max(selectedCircleRadius,DOT_LETTER_RADIUS_PX*pixelRatio);squareSize=this.unselectedPointSize_*pixelRatio;squareHalfSize=squareSize/2;unselectedSeriesColor=EventPresenter.getCounterSeriesColor(this.colorId_,SelectionState.NONE);if(!highDetails){squareOpacity=0;break;}
-const visibleIndexRange=lastVisibleIndex-firstVisibleIndex;if(visibleIndexRange<=0){squareOpacity=1;break;}
-const visibleViewXRange=transform.worldXToViewX(this.points[lastVisibleIndex].x)-
-transform.worldXToViewX(this.points[firstVisibleIndex].x);if(visibleViewXRange===0){squareOpacity=1;break;}
-const density=visibleIndexRange/visibleViewXRange;const clampedDensity=tr.b.math.clamp(density,this.unselectedPointDensityOpaque_,this.unselectedPointDensityTransparent_);const densityRange=this.unselectedPointDensityTransparent_-
-this.unselectedPointDensityOpaque_;squareOpacity=(this.unselectedPointDensityTransparent_-clampedDensity)/densityRange;break;}
-case ChartSeriesComponent.LINE:ctx.strokeStyle=EventPresenter.getCounterSeriesColor(this.colorId_,SelectionState.NONE);ctx.lineWidth=this.lineWidth_*pixelRatio;break;case ChartSeriesComponent.BACKGROUND:break;default:throw new Error('Invalid component: '+component);}
-let previousViewX=undefined;let previousViewY=undefined;let previousViewYBase=undefined;let lastSelectionState=undefined;let baseSteps=undefined;const startIndex=Math.max(firstVisibleIndex-1,0);let currentViewX;for(let i=startIndex;i<this.points.length;i++){const currentPoint=this.points[i];currentViewX=transform.worldXToViewX(currentPoint.x);if(currentViewX>rightViewX){if(previousViewX!==undefined){previousViewX=currentViewX=rightViewX;if(component===ChartSeriesComponent.BACKGROUND||component===ChartSeriesComponent.LINE){ctx.lineTo(currentViewX,previousViewY);}}
-break;}
-if(i+1<this.points.length){const nextPoint=this.points[i+1];const nextViewX=transform.worldXToViewX(nextPoint.x);if(previousViewX!==undefined&&nextViewX-previousViewX<=viewSkipDistance&&nextViewX<rightViewX){continue;}
-if(currentViewX<leftViewX){currentViewX=leftViewX;}}
-if(previousViewX!==undefined&&currentViewX-previousViewX<viewSkipDistance){currentViewX=previousViewX+viewSkipDistance;}
-const currentViewY=Math.round(transform.worldYToViewY(currentPoint.y));let currentViewYBase;if(currentPoint.yBase===undefined){currentViewYBase=transform.outerBottomViewY;}else{currentViewYBase=Math.round(transform.worldYToViewY(currentPoint.yBase));}
-const currentSelectionState=currentPoint.selectionState;if(currentSelectionState!==lastSelectionState){const opacity=currentSelectionState===SelectionState.SELECTED?1:squareOpacity;currentStateSeriesColor=EventPresenter.getCounterSeriesColor(this.colorId_,currentSelectionState,opacity);}
-switch(component){case ChartSeriesComponent.DOTS:if(currentPoint.dotLetter){ctx.fillStyle=unselectedSeriesColor;ctx.strokeStyle=ColorScheme.getColorForReservedNameAsString('black');ctx.beginPath();ctx.arc(currentViewX,currentViewY,letterDotRadius+DOT_LETTER_RADIUS_PADDING_PX,0,2*Math.PI);ctx.fill();if(currentSelectionState===SelectionState.SELECTED){ctx.lineWidth=DOT_LETTER_SELECTED_OUTLINE_WIDTH_PX;ctx.strokeStyle=ColorScheme.getColorForReservedNameAsString('olive');ctx.stroke();ctx.beginPath();ctx.arc(currentViewX,currentViewY,letterDotRadius,0,2*Math.PI);ctx.lineWidth=DOT_LETTER_SELECTED_OUTLINE_DETAIL_WIDTH_PX;ctx.strokeStyle=ColorScheme.getColorForReservedNameAsString('yellow');ctx.stroke();}else{ctx.lineWidth=DOT_LETTER_UNSELECTED_OUTLINE_WIDTH_PX;ctx.strokeStyle=ColorScheme.getColorForReservedNameAsString('black');ctx.stroke();}
-ctx.fillStyle=ColorScheme.getColorForReservedNameAsString('white');ctx.fillText(currentPoint.dotLetter,currentViewX,currentViewY);}else{ctx.strokeStyle=unselectedSeriesColor;ctx.lineWidth=pixelRatio;if(currentSelectionState===SelectionState.SELECTED){if(this.solidSelectedDots_){ctx.fillStyle=ctx.strokeStyle;}else{ctx.fillStyle=currentStateSeriesColor;}
-ctx.beginPath();ctx.arc(currentViewX,currentViewY,selectedCircleRadius,0,2*Math.PI);ctx.fill();ctx.stroke();}else if(squareOpacity>0){ctx.fillStyle=currentStateSeriesColor;ctx.fillRect(currentViewX-squareHalfSize,currentViewY-squareHalfSize,squareSize,squareSize);}}
-break;case ChartSeriesComponent.LINE:if(previousViewX===undefined){ctx.beginPath();ctx.moveTo(currentViewX,currentViewY);}else if(this.stepGraph_){ctx.lineTo(currentViewX,previousViewY);}
-ctx.lineTo(currentViewX,currentViewY);break;case ChartSeriesComponent.BACKGROUND:if(previousViewX!==undefined&&this.stepGraph_){ctx.lineTo(currentViewX,previousViewY);}else{ctx.lineTo(currentViewX,currentViewY);}
-if(currentSelectionState!==lastSelectionState){if(previousViewX!==undefined){let previousBaseStepViewX=currentViewX;for(let j=baseSteps.length-1;j>=0;j--){const baseStep=baseSteps[j];const baseStepViewX=baseStep.viewX;const baseStepViewY=baseStep.viewY;ctx.lineTo(previousBaseStepViewX,baseStepViewY);ctx.lineTo(baseStepViewX,baseStepViewY);previousBaseStepViewX=baseStepViewX;}
-ctx.closePath();ctx.fill();}
-ctx.beginPath();ctx.fillStyle=EventPresenter.getCounterSeriesColor(this.colorId_,currentSelectionState,this.backgroundOpacity_);ctx.moveTo(currentViewX,currentViewYBase);baseSteps=[];}
-if(currentViewYBase!==previousViewYBase||currentSelectionState!==lastSelectionState){baseSteps.push({viewX:currentViewX,viewY:currentViewYBase});}
-ctx.lineTo(currentViewX,currentViewY);break;default:throw new Error('Not reachable');}
-previousViewX=currentViewX;previousViewY=currentViewY;previousViewYBase=currentViewYBase;lastSelectionState=currentSelectionState;}
-if(previousViewX!==undefined){switch(component){case ChartSeriesComponent.DOTS:break;case ChartSeriesComponent.LINE:ctx.stroke();break;case ChartSeriesComponent.BACKGROUND:{let previousBaseStepViewX=currentViewX;for(let j=baseSteps.length-1;j>=0;j--){const baseStep=baseSteps[j];const baseStepViewX=baseStep.viewX;const baseStepViewY=baseStep.viewY;ctx.lineTo(previousBaseStepViewX,baseStepViewY);ctx.lineTo(baseStepViewX,baseStepViewY);previousBaseStepViewX=baseStepViewX;}
-ctx.closePath();ctx.fill();break;}
-default:throw new Error('Not reachable');}}
-ctx.restore();},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){const points=this.points;function getPointWidth(point,i){if(i===points.length-1){return LAST_POINT_WIDTH*viewPixWidthWorld;}
-const nextPoint=points[i+1];return nextPoint.x-point.x;}
-function selectPoint(point){point.addToSelection(selection);}
-tr.b.iterateOverIntersectingIntervals(this.points,function(point){return point.x;},getPointWidth,loWX,hiWX,selectPoint);},addEventNearToProvidedEventToSelection(event,offset,selection){if(this.points===undefined)return false;const index=this.points.findIndex(point=>point.modelItem===event);if(index===-1)return false;const newIndex=index+offset;if(newIndex<0||newIndex>=this.points.length)return false;this.points[newIndex].addToSelection(selection);return true;},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){if(this.points===undefined)return;const item=tr.b.findClosestElementInSortedArray(this.points,function(point){return point.x;},worldX,worldMaxDist);if(!item)return;item.addToSelection(selection);}};return{ChartSeries,ChartSeriesType,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const IDEAL_MAJOR_MARK_HEIGHT_PX=30;const AXIS_LABLE_MARGIN_PX=10;const AXIS_LABLE_FONT_SIZE_PX=9;const AXIS_LABLE_FONT='Arial';function ChartSeriesYAxis(opt_min,opt_max){this.guid_=tr.b.GUID.allocateSimple();this.bounds=new tr.b.math.Range();if(opt_min!==undefined)this.bounds.addValue(opt_min);if(opt_max!==undefined)this.bounds.addValue(opt_max);}
-ChartSeriesYAxis.prototype={get guid(){return this.guid_;},valueToUnitRange(value){if(this.bounds.isEmpty){throw new Error('Chart series y-axis bounds are empty');}
-const bounds=this.bounds;if(bounds.range===0)return 0;return(value-bounds.min)/bounds.range;},unitRangeToValue(unitRange){if(this.bounds.isEmpty){throw new Error('Chart series y-axis bounds are empty');}
-return unitRange*this.bounds.range+this.bounds.min;},autoSetFromSeries(series,opt_config){const range=new tr.b.math.Range();series.forEach(function(s){range.addRange(s.range);},this);this.autoSetFromRange(range,opt_config);},autoSetFromRange(range,opt_config){if(range.isEmpty)return;const bounds=this.bounds;if(bounds.isEmpty){bounds.addRange(range);return;}
-if(!opt_config)return;const useRangeMin=(opt_config.expandMin&&range.min<bounds.min||opt_config.shrinkMin&&range.min>bounds.min);const useRangeMax=(opt_config.expandMax&&range.max>bounds.max||opt_config.shrinkMax&&range.max<bounds.max);if(!useRangeMin&&!useRangeMax)return;if(useRangeMin&&useRangeMax){bounds.min=range.min;bounds.max=range.max;return;}
-if(useRangeMin){bounds.min=Math.min(range.min,bounds.max);}else{bounds.max=Math.max(range.max,bounds.min);}},majorMarkHeightWorld_(transform,pixelRatio){const idealMajorMarkHeightPx=IDEAL_MAJOR_MARK_HEIGHT_PX*pixelRatio;const idealMajorMarkHeightWorld=transform.vectorToWorldDistance(idealMajorMarkHeightPx);return tr.b.math.preferredNumberLargerThanMin(idealMajorMarkHeightWorld);},draw(ctx,transform,showYAxisLabels,showYGridLines){if(!showYAxisLabels&&!showYGridLines)return;const pixelRatio=transform.pixelRatio;const viewTop=transform.outerTopViewY;const worldTop=transform.viewYToWorldY(viewTop);const viewBottom=transform.outerBottomViewY;const viewHeight=viewBottom-viewTop;const viewLeft=transform.leftViewX;const viewRight=transform.rightViewX;const labelLeft=transform.leftYLabel;ctx.save();ctx.lineWidth=pixelRatio;ctx.fillStyle=ColorScheme.getColorForReservedNameAsString('black');ctx.textAlign='left';ctx.textBaseline='center';ctx.font=(AXIS_LABLE_FONT_SIZE_PX*pixelRatio)+'px '+AXIS_LABLE_FONT;ctx.beginPath();ctx.strokeStyle=ColorScheme.getColorForReservedNameAsString('black');tr.ui.b.drawLine(ctx,viewLeft,viewTop,viewLeft,viewBottom,viewLeft);ctx.stroke();ctx.closePath();ctx.beginPath();ctx.strokeStyle=ColorScheme.getColorForReservedNameAsString('grey');const majorMarkHeight=this.majorMarkHeightWorld_(transform,pixelRatio);const maxMajorMark=Math.max(transform.viewYToWorldY(viewTop),Math.abs(transform.viewYToWorldY(viewBottom)));for(let curWorldY=0;curWorldY<=maxMajorMark;curWorldY+=majorMarkHeight){const roundedUnitValue=Math.floor(curWorldY*1000000)/1000000;const curViewYPositive=transform.worldYToViewY(curWorldY);if(curViewYPositive>=viewTop){if(showYAxisLabels){ctx.fillText(roundedUnitValue,viewLeft+AXIS_LABLE_MARGIN_PX,curViewYPositive-AXIS_LABLE_MARGIN_PX);}
-if(showYGridLines){tr.ui.b.drawLine(ctx,viewLeft,curViewYPositive,viewRight,curViewYPositive);}}
-const curViewYNegative=transform.worldYToViewY(-1*curWorldY);if(curViewYNegative<=viewBottom){if(showYAxisLabels){ctx.fillText(roundedUnitValue,viewLeft+AXIS_LABLE_MARGIN_PX,curViewYNegative-AXIS_LABLE_MARGIN_PX);}
-if(showYGridLines){tr.ui.b.drawLine(ctx,viewLeft,curViewYNegative,viewRight,curViewYNegative);}}}
-ctx.stroke();ctx.restore();}};return{ChartSeriesYAxis,};});'use strict';tr.exportTo('tr.ui.tracks',function(){function ChartTransform(displayTransform,axis,trackWidth,trackHeight,topPadding,bottomPadding,pixelRatio){this.pixelRatio=pixelRatio;this.leftViewX=0;this.rightViewX=trackWidth;this.leftTimestamp=displayTransform.xViewToWorld(this.leftViewX);this.rightTimestamp=displayTransform.xViewToWorld(this.rightViewX);this.displayTransform_=displayTransform;this.outerTopViewY=0;this.innerTopViewY=topPadding;this.innerBottomViewY=trackHeight-bottomPadding;this.outerBottomViewY=trackHeight;this.axis_=axis;this.innerHeight_=this.innerBottomViewY-this.innerTopViewY;}
-ChartTransform.prototype={worldXToViewX(worldX){return this.displayTransform_.xWorldToView(worldX);},viewXToWorldX(viewX){return this.displayTransform_.xViewToWorld(viewX);},vectorToWorldDistance(viewY){return this.axis_.bounds.range*Math.abs(viewY/this.innerHeight_);},viewYToWorldY(viewY){return this.axis_.unitRangeToValue(1-(viewY-this.innerTopViewY)/this.innerHeight_);},worldYToViewY(worldY){const innerHeightCoefficient=1-this.axis_.valueToUnitRange(worldY);return innerHeightCoefficient*this.innerHeight_+this.innerTopViewY;}};return{ChartTransform,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ChartTrack=tr.ui.b.define('chart-track',tr.ui.tracks.Track);ChartTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('chart-track');this.series_=undefined;this.axes_=undefined;this.axisGuidToAxisData_=undefined;this.topPadding_=undefined;this.bottomPadding_=undefined;this.showYAxisLabels_=undefined;this.showGridLines_=undefined;this.heading_=document.createElement('tr-ui-b-heading');Polymer.dom(this).appendChild(this.heading_);},set heading(heading){this.heading_.heading=heading;},get heading(){return this.heading_.heading;},set tooltip(tooltip){this.heading_.tooltip=tooltip;},get series(){return this.series_;},set series(series){this.series_=series;this.calculateAxisDataAndPadding_();this.invalidateDrawingContainer();},get height(){return window.getComputedStyle(this).height;},set height(height){this.style.height=height;this.invalidateDrawingContainer();},get showYAxisLabels(){return this.showYAxisLabels_;},set showYAxisLabels(showYAxisLabels){this.showYAxisLabels_=showYAxisLabels;this.invalidateDrawingContainer();},get showGridLines(){return this.showGridLines_;},set showGridLines(showGridLines){this.showGridLines_=showGridLines;this.invalidateDrawingContainer();},get hasVisibleContent(){return!!this.series&&this.series.length>0;},calculateAxisDataAndPadding_(){if(!this.series_){this.axes_=undefined;this.axisGuidToAxisData_=undefined;this.topPadding_=undefined;this.bottomPadding_=undefined;return;}
-const axisGuidToAxisData={};let topPadding=0;let bottomPadding=0;this.series_.forEach(function(series){const seriesYAxis=series.seriesYAxis;const axisGuid=seriesYAxis.guid;if(!(axisGuid in axisGuidToAxisData)){axisGuidToAxisData[axisGuid]={axis:seriesYAxis,series:[]};if(!this.axes_)this.axes_=[];this.axes_.push(seriesYAxis);}
-axisGuidToAxisData[axisGuid].series.push(series);topPadding=Math.max(topPadding,series.topPadding);bottomPadding=Math.max(bottomPadding,series.bottomPadding);},this);this.axisGuidToAxisData_=axisGuidToAxisData;this.topPadding_=topPadding;this.bottomPadding_=bottomPadding;},draw(type,viewLWorld,viewRWorld,viewHeight){switch(type){case tr.ui.tracks.DrawType.GENERAL_EVENT:this.drawChart_(viewLWorld,viewRWorld);break;}},drawChart_(viewLWorld,viewRWorld){if(!this.series_)return;const ctx=this.context();const displayTransform=this.viewport.currentDisplayTransform;const pixelRatio=window.devicePixelRatio||1;const bounds=this.getBoundingClientRect();const highDetails=this.viewport.highDetails;const width=bounds.width*pixelRatio;const height=bounds.height*pixelRatio;const topPadding=this.topPadding_*pixelRatio;const bottomPadding=this.bottomPadding_*pixelRatio;ctx.save();ctx.beginPath();ctx.rect(0,0,width,height);ctx.clip();if(this.axes_){if((this.showGridLines_||this.showYAxisLabels_)&&this.axes_.length>1){throw new Error('Only one axis allowed when showing grid lines.');}
-for(const yAxis of this.axes_){const chartTransform=new tr.ui.tracks.ChartTransform(displayTransform,yAxis,width,height,topPadding,bottomPadding,pixelRatio);yAxis.draw(ctx,chartTransform,this.showYAxisLabels_,this.showGridLines_);}}
-for(const series of this.series){const chartTransform=new tr.ui.tracks.ChartTransform(displayTransform,series.seriesYAxis,width,height,topPadding,bottomPadding,pixelRatio);series.draw(ctx,chartTransform,highDetails);}
-ctx.restore();},addEventsToTrackMap(eventToTrackMap){this.series_.forEach(function(series){series.points.forEach(function(point){point.addToTrackMap(eventToTrackMap,this);},this);},this);},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){this.series_.forEach(function(series){series.addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection);},this);},addEventNearToProvidedEventToSelection(event,offset,selection){let foundItem=false;this.series_.forEach(function(series){foundItem=foundItem||series.addEventNearToProvidedEventToSelection(event,offset,selection);},this);return foundItem;},addAllEventsMatchingFilterToSelection(filter,selection){},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){this.series_.forEach(function(series){series.addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection);},this);},autoSetAllAxes(opt_config){for(const axisData of Object.values(this.axisGuidToAxisData_)){const seriesYAxis=axisData.axis;const series=axisData.series;seriesYAxis.autoSetFromSeries(series,opt_config);}},autoSetAxis(seriesYAxis,opt_config){const series=this.axisGuidToAxisData_[seriesYAxis.guid].series;seriesYAxis.autoSetFromSeries(series,opt_config);}};return{ChartTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const ChartTrack=tr.ui.tracks.ChartTrack;const CpuUsageTrack=tr.ui.b.define('cpu-usage-track',ChartTrack);CpuUsageTrack.prototype={__proto__:ChartTrack.prototype,decorate(viewport){ChartTrack.prototype.decorate.call(this,viewport);this.classList.add('cpu-usage-track');this.heading='CPU usage';this.cpuUsageSeries_=undefined;},initialize(model){if(model!==undefined){this.cpuUsageSeries_=model.device.cpuUsageSeries;}else{this.cpuUsageSeries_=undefined;}
-this.series=this.buildChartSeries_();this.autoSetAllAxes({expandMax:true});},get hasVisibleContent(){return!!this.cpuUsageSeries_&&this.cpuUsageSeries_.samples.length>0;},addContainersToTrackMap(containerToTrackMap){containerToTrackMap.addContainer(this.series_,this);},buildChartSeries_(yAxis,color){if(!this.hasVisibleContent)return[];yAxis=new tr.ui.tracks.ChartSeriesYAxis(0,undefined);const usageSamples=this.cpuUsageSeries_.samples;const pts=new Array(usageSamples.length+1);for(let i=0;i<usageSamples.length;i++){pts[i]=new tr.ui.tracks.ChartPoint(undefined,usageSamples[i].start,usageSamples[i].usage);}
-pts[usageSamples.length]=new tr.ui.tracks.ChartPoint(undefined,usageSamples[usageSamples.length-1].start,0);const renderingConfig={chartType:tr.ui.tracks.ChartSeriesType.AREA,colorId:color};return[new tr.ui.tracks.ChartSeries(pts,yAxis,renderingConfig)];},};return{CpuUsageTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const ChartTrack=tr.ui.tracks.ChartTrack;const PowerSeriesTrack=tr.ui.b.define('power-series-track',ChartTrack);PowerSeriesTrack.prototype={__proto__:ChartTrack.prototype,decorate(viewport){ChartTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('power-series-track');this.heading='Power';this.powerSeries_=undefined;},set powerSeries(powerSeries){this.powerSeries_=powerSeries;this.series=this.buildChartSeries_();this.autoSetAllAxes({expandMax:true});},get hasVisibleContent(){return(this.powerSeries_&&this.powerSeries_.samples.length>0);},addContainersToTrackMap(containerToTrackMap){containerToTrackMap.addContainer(this.powerSeries_,this);},buildChartSeries_(){if(!this.hasVisibleContent)return[];const seriesYAxis=new tr.ui.tracks.ChartSeriesYAxis(0,undefined);const pts=this.powerSeries_.samples.map(function(smpl){return new tr.ui.tracks.ChartPoint(smpl,smpl.start,smpl.powerInW);});const renderingConfig={chartType:tr.ui.tracks.ChartSeriesType.AREA,colorId:ColorScheme.getColorIdForGeneralPurposeString(this.heading)};return[new tr.ui.tracks.ChartSeries(pts,seriesYAxis,renderingConfig)];}};return{PowerSeriesTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const SpacingTrack=tr.ui.b.define('spacing-track',tr.ui.tracks.Track);SpacingTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('spacing-track');this.heading_=document.createElement('tr-ui-b-heading');Polymer.dom(this).appendChild(this.heading_);},addAllEventsMatchingFilterToSelection(filter,selection){}};return{SpacingTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ContainerTrack=tr.ui.tracks.ContainerTrack;const DeviceTrack=tr.ui.b.define('device-track',ContainerTrack);DeviceTrack.prototype={__proto__:ContainerTrack.prototype,decorate(viewport){ContainerTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('device-track');this.device_=undefined;this.powerSeriesTrack_=undefined;},get device(){return this.device_;},set device(device){this.device_=device;this.updateContents_();},get powerSeriesTrack(){return this.powerSeriesTrack_;},get hasVisibleContent(){return(this.powerSeriesTrack_&&this.powerSeriesTrack_.hasVisibleContent);},addContainersToTrackMap(containerToTrackMap){tr.ui.tracks.ContainerTrack.prototype.addContainersToTrackMap.call(this,containerToTrackMap);containerToTrackMap.addContainer(this.device,this);},addEventsToTrackMap(eventToTrackMap){this.tracks_.forEach(function(track){track.addEventsToTrackMap(eventToTrackMap);});},appendPowerSeriesTrack_(){this.powerSeriesTrack_=new tr.ui.tracks.PowerSeriesTrack(this.viewport);this.powerSeriesTrack_.powerSeries=this.device.powerSeries;if(this.powerSeriesTrack_.hasVisibleContent){Polymer.dom(this).appendChild(this.powerSeriesTrack_);Polymer.dom(this).appendChild(new tr.ui.tracks.SpacingTrack(this.viewport));}},updateContents_(){this.clearTracks_();this.appendPowerSeriesTrack_();}};return{DeviceTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const DISPLAYED_SIZE_NUMERIC_NAME=tr.model.MemoryAllocatorDump.DISPLAYED_SIZE_NUMERIC_NAME;const BACKGROUND=tr.model.ContainerMemoryDump.LevelOfDetail.BACKGROUND;const LIGHT=tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT;const DETAILED=tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED;const SYSTEM_MEMORY_CHART_RENDERING_CONFIG={chartType:tr.ui.tracks.ChartSeriesType.AREA,colorId:ColorScheme.getColorIdForGeneralPurposeString('systemMemory'),backgroundOpacity:0.8};const SYSTEM_MEMORY_SERIES_NAMES=['Used (KB)','Swapped (KB)'];function extractGlobalMemoryDumpUsedSizes(globalMemoryDump,addSize){for(const[pid,pmd]of
-Object.entries(globalMemoryDump.processMemoryDumps)){const mostRecentVmRegions=pmd.mostRecentVmRegions;if(mostRecentVmRegions===undefined)continue;addSize(pid,mostRecentVmRegions.byteStats.proportionalResident||0,pmd.process.userFriendlyName);}}
-function extractProcessMemoryDumpAllocatorSizes(processMemoryDump,addSize){const allocatorDumps=processMemoryDump.memoryAllocatorDumps;if(allocatorDumps===undefined)return;allocatorDumps.forEach(function(allocatorDump){if(allocatorDump.fullName==='tracing')return;const allocatorSize=allocatorDump.numerics[DISPLAYED_SIZE_NUMERIC_NAME];if(allocatorSize===undefined)return;const allocatorSizeValue=allocatorSize.value;if(allocatorSizeValue===undefined)return;addSize(allocatorDump.fullName,allocatorSizeValue);});}
-function extractGlobalMemoryDumpAllocatorSizes(globalMemoryDump,addSize){for(const pmd of Object.values(globalMemoryDump.processMemoryDumps)){extractProcessMemoryDumpAllocatorSizes(pmd,addSize);}}
-function buildMemoryChartSeries(memoryDumps,dumpSizeExtractor){const dumpCount=memoryDumps.length;const idToTimestampToPoint={};const idToName={};memoryDumps.forEach(function(dump,index){dumpSizeExtractor(dump,function addSize(id,size,opt_name){let timestampToPoint=idToTimestampToPoint[id];if(timestampToPoint===undefined){idToTimestampToPoint[id]=timestampToPoint=new Array(dumpCount);for(let i=0;i<dumpCount;i++){const modelItem=memoryDumps[i];timestampToPoint[i]=new tr.ui.tracks.ChartPoint(modelItem,modelItem.start,0);}}
-timestampToPoint[index].y+=size;if(opt_name!==undefined)idToName[id]=opt_name;});});const ids=Object.keys(idToTimestampToPoint);if(ids.length===0)return undefined;ids.sort();for(let i=0;i<dumpCount;i++){let baseSize=0;for(let j=ids.length-1;j>=0;j--){const point=idToTimestampToPoint[ids[j]][i];point.yBase=baseSize;point.y+=baseSize;baseSize=point.y;}}
-const seriesYAxis=new tr.ui.tracks.ChartSeriesYAxis(0);const series=ids.map(function(id){const colorId=ColorScheme.getColorIdForGeneralPurposeString(idToName[id]||id);const renderingConfig={chartType:tr.ui.tracks.ChartSeriesType.AREA,colorId,backgroundOpacity:0.8};return new tr.ui.tracks.ChartSeries(idToTimestampToPoint[id],seriesYAxis,renderingConfig);});series.reverse();return series;}
-function buildMemoryLetterDots(memoryDumps){const backgroundMemoryColorId=ColorScheme.getColorIdForReservedName('background_memory_dump');const lightMemoryColorId=ColorScheme.getColorIdForReservedName('light_memory_dump');const detailedMemoryColorId=ColorScheme.getColorIdForReservedName('detailed_memory_dump');return memoryDumps.map(function(memoryDump){let memoryColorId;switch(memoryDump.levelOfDetail){case BACKGROUND:memoryColorId=backgroundMemoryColorId;break;case DETAILED:memoryColorId=detailedMemoryColorId;break;case LIGHT:default:memoryColorId=lightMemoryColorId;}
-return new tr.ui.tracks.LetterDot(memoryDump,'M',memoryColorId,memoryDump.start);});}
-function buildGlobalUsedMemoryChartSeries(globalMemoryDumps){return buildMemoryChartSeries(globalMemoryDumps,extractGlobalMemoryDumpUsedSizes);}
-function buildProcessAllocatedMemoryChartSeries(processMemoryDumps){return buildMemoryChartSeries(processMemoryDumps,extractProcessMemoryDumpAllocatorSizes);}
-function buildGlobalAllocatedMemoryChartSeries(globalMemoryDumps){return buildMemoryChartSeries(globalMemoryDumps,extractGlobalMemoryDumpAllocatorSizes);}
-function buildSystemMemoryChartSeries(model){if(model.kernel.counters===undefined)return;const memoryCounter=model.kernel.counters['global.SystemMemory'];if(memoryCounter===undefined)return;const tracks=[];for(const name of SYSTEM_MEMORY_SERIES_NAMES){const series=memoryCounter.series.find(series=>series.name===name);if(series===undefined||series.samples.length===0)return;const chartPoints=[];const valueRange=new tr.b.math.Range();for(const sample of series.samples){chartPoints.push(new tr.ui.tracks.ChartPoint(sample,sample.timestamp,sample.value,0));valueRange.addValue(sample.value);}
-const baseLine=Math.max(0,valueRange.min-valueRange.range);const axisY=new tr.ui.tracks.ChartSeriesYAxis(baseLine,valueRange.max);const chartSeries=[new tr.ui.tracks.ChartSeries(chartPoints,axisY,SYSTEM_MEMORY_CHART_RENDERING_CONFIG)];tracks.push({name:'System Memory '+name,series:chartSeries});}
-return tracks;}
-return{buildMemoryLetterDots,buildGlobalUsedMemoryChartSeries,buildProcessAllocatedMemoryChartSeries,buildGlobalAllocatedMemoryChartSeries,buildSystemMemoryChartSeries,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const USED_MEMORY_TRACK_HEIGHT=50;const ALLOCATED_MEMORY_TRACK_HEIGHT=50;const GlobalMemoryDumpTrack=tr.ui.b.define('global-memory-dump-track',tr.ui.tracks.ContainerTrack);GlobalMemoryDumpTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.memoryDumps_=undefined;},get memoryDumps(){return this.memoryDumps_;},set memoryDumps(memoryDumps){this.memoryDumps_=memoryDumps;this.updateContents_();},updateContents_(){this.clearTracks_();if(!this.memoryDumps_||!this.memoryDumps_.length)return;this.appendDumpDotsTrack_();this.appendUsedMemoryTrack_();this.appendAllocatedMemoryTrack_();},appendDumpDotsTrack_(){const items=tr.ui.tracks.buildMemoryLetterDots(this.memoryDumps_);if(!items)return;const track=new tr.ui.tracks.LetterDotTrack(this.viewport);track.heading='Memory Dumps';track.items=items;Polymer.dom(this).appendChild(track);},appendUsedMemoryTrack_(){const tracks=[];const perProcessSeries=tr.ui.tracks.buildGlobalUsedMemoryChartSeries(this.memoryDumps_);if(perProcessSeries!==undefined){tracks.push({name:'Memory per process',series:perProcessSeries});}else{tracks.push.apply(tracks,tr.ui.tracks.buildSystemMemoryChartSeries(this.memoryDumps_[0].model));}
-for(const{name,series}of tracks){const track=new tr.ui.tracks.ChartTrack(this.viewport);track.heading=name;track.height=USED_MEMORY_TRACK_HEIGHT+'px';track.series=series;track.autoSetAllAxes({expandMax:true});Polymer.dom(this).appendChild(track);}},appendAllocatedMemoryTrack_(){const series=tr.ui.tracks.buildGlobalAllocatedMemoryChartSeries(this.memoryDumps_);if(!series)return;const track=new tr.ui.tracks.ChartTrack(this.viewport);track.heading='Memory per component';track.height=ALLOCATED_MEMORY_TRACK_HEIGHT+'px';track.series=series;track.autoSetAllAxes({expandMax:true});Polymer.dom(this).appendChild(track);}};return{GlobalMemoryDumpTrack,};});'use strict';tr.exportTo('tr.ui.b',function(){function FastRectRenderer(ctx,xMin,xMax,minRectSize,maxMergeDist,palette){this.ctx_=ctx;this.xMin_=xMin;this.xMax_=xMax;this.minRectSize_=minRectSize;this.maxMergeDist_=maxMergeDist;this.palette_=palette;}
-FastRectRenderer.prototype={y_:0,h_:0,merging_:false,mergeStartX_:0,mergeCurRight_:0,mergedColorId_:0,mergedAlpha_:0,setYandH(y,h){if(this.y_===y&&this.h_===h){return;}
-this.flush();this.y_=y;this.h_=h;},fillRect(x,w,colorId,alpha){const r=x+w;if(w<this.minRectSize_){if(r-this.mergeStartX_>this.maxMergeDist_){this.flush();}
-if(!this.merging_){this.merging_=true;this.mergeStartX_=x;this.mergeCurRight_=r;this.mergedColorId_=colorId;this.mergedAlpha_=alpha;}else{this.mergeCurRight_=r;if(this.mergedAlpha_<alpha||(this.mergedAlpha_===alpha&&this.mergedColorId_<colorId)){this.mergedAlpha_=alpha;this.mergedColorId_=colorId;}}}else{if(this.merging_){this.flush();}
-this.ctx_.fillStyle=this.palette_[colorId];this.ctx_.globalAlpha=alpha;const xLeft=Math.max(x,this.xMin_);const xRight=Math.min(r,this.xMax_);if(xLeft<xRight){this.ctx_.fillRect(xLeft,this.y_,xRight-xLeft,this.h_);}}},flush(){if(this.merging_){this.ctx_.fillStyle=this.palette_[this.mergedColorId_];this.ctx_.globalAlpha=this.mergedAlpha_;const xLeft=Math.max(this.mergeStartX_,this.xMin_);const xRight=Math.min(this.mergeCurRight_,this.xMax_);if(xLeft<xRight){this.ctx_.fillRect(xLeft,this.y_,xRight-xLeft,this.h_);}
-this.merging_=false;}}};return{FastRectRenderer,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const RectTrack=tr.ui.b.define('rect-track',tr.ui.tracks.Track);RectTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('rect-track');this.asyncStyle_=false;this.rects_=null;this.heading_=document.createElement('tr-ui-b-heading');Polymer.dom(this).appendChild(this.heading_);},set heading(heading){this.heading_.heading=heading;},get heading(){return this.heading_.heading;},set tooltip(tooltip){this.heading_.tooltip=tooltip;},set selectionGenerator(generator){this.heading_.selectionGenerator=generator;},set expanded(expanded){this.heading_.expanded=!!expanded;},set arrowVisible(arrowVisible){this.heading_.arrowVisible=!!arrowVisible;},get expanded(){return this.heading_.expanded;},get asyncStyle(){return this.asyncStyle_;},set asyncStyle(v){this.asyncStyle_=!!v;},get rects(){return this.rects_;},set rects(rects){this.rects_=rects||[];this.invalidateDrawingContainer();},get height(){return window.getComputedStyle(this).height;},set height(height){this.style.height=height;this.invalidateDrawingContainer();},get hasVisibleContent(){return this.rects_.length>0;},draw(type,viewLWorld,viewRWorld,viewHeight){switch(type){case tr.ui.tracks.DrawType.GENERAL_EVENT:this.drawRects_(viewLWorld,viewRWorld);break;}},drawRects_(viewLWorld,viewRWorld){const ctx=this.context();ctx.save();const bounds=this.getBoundingClientRect();tr.ui.b.drawSlices(ctx,this.viewport.currentDisplayTransform,viewLWorld,viewRWorld,bounds.height,this.rects_,this.asyncStyle_);ctx.restore();if(bounds.height<=6)return;let fontSize;let yOffset;if(bounds.height<15){fontSize=6;yOffset=1.0;}else{fontSize=10;yOffset=2.5;}
-tr.ui.b.drawLabels(ctx,this.viewport.currentDisplayTransform,viewLWorld,viewRWorld,this.rects_,this.asyncStyle_,fontSize,yOffset);},addEventsToTrackMap(eventToTrackMap){if(this.rects_===undefined||this.rects_===null){return;}
-this.rects_.forEach(function(rect){rect.addToTrackMap(eventToTrackMap,this);},this);},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){function onRect(rect){rect.addToSelection(selection);}
-onRect=onRect.bind(this);const instantEventWidth=2*viewPixWidthWorld;tr.b.iterateOverIntersectingIntervals(this.rects_,function(x){return x.start;},function(x){return x.duration===0?x.duration+instantEventWidth:x.duration;},loWX,hiWX,onRect);},addEventNearToProvidedEventToSelection(event,offset,selection){const index=this.rects_.findIndex(rect=>rect.modelItem===event);if(index===-1)return false;const newIndex=index+offset;if(newIndex<0||newIndex>=this.rects_.length)return false;this.rects_[newIndex].addToSelection(selection);return true;},addAllEventsMatchingFilterToSelection(filter,selection){for(let i=0;i<this.rects_.length;++i){const modelItem=this.rects_[i].modelItem;if(!modelItem)continue;if(filter.matchSlice(modelItem)){selection.push(modelItem);}}},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){const rect=tr.b.findClosestIntervalInSortedIntervals(this.rects_,function(x){return x.start;},function(x){return x.end;},worldX,worldMaxDist);if(!rect)return;rect.addToSelection(selection);}};function Rect(modelItem,title,colorId,start,duration){tr.model.ProxySelectableItem.call(this,modelItem);this.title=title;this.colorId=colorId;this.start=start;this.duration=duration;this.end=start+duration;}
-Rect.prototype={__proto__:tr.model.ProxySelectableItem.prototype};return{RectTrack,Rect,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const SliceTrack=tr.ui.b.define('slice-track',tr.ui.tracks.RectTrack);SliceTrack.prototype={__proto__:tr.ui.tracks.RectTrack.prototype,decorate(viewport){tr.ui.tracks.RectTrack.prototype.decorate.call(this,viewport);},get slices(){return this.rects;},set slices(slices){this.rects=slices;}};return{SliceTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const CpuTrack=tr.ui.b.define('cpu-track',tr.ui.tracks.ContainerTrack);CpuTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('cpu-track');this.detailedMode_=true;},get cpu(){return this.cpu_;},set cpu(cpu){this.cpu_=cpu;this.updateContents_();},get detailedMode(){return this.detailedMode_;},set detailedMode(detailedMode){this.detailedMode_=detailedMode;this.updateContents_();},get tooltip(){return this.tooltip_;},set tooltip(value){this.tooltip_=value;this.updateContents_();},get hasVisibleContent(){if(this.cpu_===undefined)return false;const cpu=this.cpu_;if(cpu.slices.length)return true;if(cpu.samples&&cpu.samples.length)return true;if(Object.keys(cpu.counters).length>0)return true;return false;},updateContents_(){this.detach();if(!this.cpu_)return;const slices=this.cpu_.slices;if(slices.length){const track=new tr.ui.tracks.SliceTrack(this.viewport);track.slices=slices;track.heading=this.cpu_.userFriendlyName+':';Polymer.dom(this).appendChild(track);}
-if(this.detailedMode_){this.appendSamplesTracks_();for(const counterName in this.cpu_.counters){const counter=this.cpu_.counters[counterName];const track=new tr.ui.tracks.CounterTrack(this.viewport);track.heading=this.cpu_.userFriendlyName+' '+
-counter.name+':';track.counter=counter;Polymer.dom(this).appendChild(track);}}},appendSamplesTracks_(){const samples=this.cpu_.samples;if(samples===undefined||samples.length===0){return;}
-const samplesByTitle={};samples.forEach(function(sample){if(samplesByTitle[sample.title]===undefined){samplesByTitle[sample.title]=[];}
-samplesByTitle[sample.title].push(sample);});const sampleTitles=Object.keys(samplesByTitle);sampleTitles.sort();sampleTitles.forEach(function(sampleTitle){const samples=samplesByTitle[sampleTitle];const samplesTrack=new tr.ui.tracks.SliceTrack(this.viewport);samplesTrack.group=this.cpu_;samplesTrack.slices=samples;samplesTrack.heading=this.cpu_.userFriendlyName+': '+
-sampleTitle;samplesTrack.tooltip=this.cpu_.userFriendlyDetails;samplesTrack.selectionGenerator=function(){const selection=new tr.model.EventSet();for(let i=0;i<samplesTrack.slices.length;i++){selection.push(samplesTrack.slices[i]);}
-return selection;};Polymer.dom(this).appendChild(samplesTrack);},this);}};return{CpuTrack,};});'use strict';tr.exportTo('tr.model',function(){const Settings=tr.b.Settings;function ModelSettings(model){this.model=model;this.objectsByKey_=[];this.nonuniqueKeys_=[];this.buildObjectsByKeyMap_();this.removeNonuniqueKeysFromSettings_();this.ephemeralSettingsByGUID_={};}
-ModelSettings.prototype={buildObjectsByKeyMap_(){const objects=[];this.model.iterateAllPersistableObjects(function(o){objects.push(o);});const objectsByKey={};const NONUNIQUE_KEY='nonuniqueKey';for(let i=0;i<objects.length;i++){const object=objects[i];const objectKey=object.getSettingsKey();if(!objectKey)continue;if(objectsByKey[objectKey]===undefined){objectsByKey[objectKey]=object;continue;}
-objectsByKey[objectKey]=NONUNIQUE_KEY;}
-const nonuniqueKeys={};Object.keys(objectsByKey).forEach(function(objectKey){if(objectsByKey[objectKey]!==NONUNIQUE_KEY){return;}
-delete objectsByKey[objectKey];nonuniqueKeys[objectKey]=true;});this.nonuniqueKeys=nonuniqueKeys;this.objectsByKey_=objectsByKey;},removeNonuniqueKeysFromSettings_(){const settings=Settings.get('trace_model_settings',{});let settingsChanged=false;Object.keys(settings).forEach(function(objectKey){if(!this.nonuniqueKeys[objectKey]){return;}
-settingsChanged=true;delete settings[objectKey];},this);if(settingsChanged){Settings.set('trace_model_settings',settings);}},hasUniqueSettingKey(object){const objectKey=object.getSettingsKey();if(!objectKey)return false;return this.objectsByKey_[objectKey]!==undefined;},getSettingFor(object,objectLevelKey,defaultValue){const objectKey=object.getSettingsKey();if(!objectKey||!this.objectsByKey_[objectKey]){const settings=this.getEphemeralSettingsFor_(object);const ephemeralValue=settings[objectLevelKey];if(ephemeralValue!==undefined){return ephemeralValue;}
-return defaultValue;}
-const settings=Settings.get('trace_model_settings',{});if(!settings[objectKey]){settings[objectKey]={};}
-const value=settings[objectKey][objectLevelKey];if(value!==undefined){return value;}
-return defaultValue;},setSettingFor(object,objectLevelKey,value){const objectKey=object.getSettingsKey();if(!objectKey||!this.objectsByKey_[objectKey]){this.getEphemeralSettingsFor_(object)[objectLevelKey]=value;return;}
-const settings=Settings.get('trace_model_settings',{});if(!settings[objectKey]){settings[objectKey]={};}
-if(settings[objectKey][objectLevelKey]===value){return;}
-settings[objectKey][objectLevelKey]=value;Settings.set('trace_model_settings',settings);},getEphemeralSettingsFor_(object){if(object.guid===undefined){throw new Error('Only objects with GUIDs can be persisted');}
-if(this.ephemeralSettingsByGUID_[object.guid]===undefined){this.ephemeralSettingsByGUID_[object.guid]={};}
-return this.ephemeralSettingsByGUID_[object.guid];}};return{ModelSettings,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const CounterTrack=tr.ui.b.define('counter-track',tr.ui.tracks.ChartTrack);CounterTrack.prototype={__proto__:tr.ui.tracks.ChartTrack.prototype,decorate(viewport){tr.ui.tracks.ChartTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('counter-track');},get counter(){return this.chart;},set counter(counter){this.heading=counter.name+': ';this.series=CounterTrack.buildChartSeriesFromCounter(counter);this.autoSetAllAxes({expandMax:true});},getModelEventFromItem(chartValue){return chartValue;}};CounterTrack.buildChartSeriesFromCounter=function(counter){const numSeries=counter.series.length;const totals=counter.totals;const seriesYAxis=new tr.ui.tracks.ChartSeriesYAxis(0,undefined);const chartSeries=counter.series.map(function(series,seriesIndex){const chartPoints=series.samples.map(function(sample,sampleIndex){const total=totals[sampleIndex*numSeries+seriesIndex];return new tr.ui.tracks.ChartPoint(sample,sample.timestamp,total);});const renderingConfig={chartType:tr.ui.tracks.ChartSeriesType.AREA,colorId:series.color};return new tr.ui.tracks.ChartSeries(chartPoints,seriesYAxis,renderingConfig);});chartSeries.reverse();return chartSeries;};return{CounterTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const startCompare=function(x,y){return x.start-y.start;};const FrameTrack=tr.ui.b.define('frame-track',tr.ui.tracks.LetterDotTrack);FrameTrack.prototype={__proto__:tr.ui.tracks.LetterDotTrack.prototype,decorate(viewport){tr.ui.tracks.LetterDotTrack.prototype.decorate.call(this,viewport);this.heading='Frames';this.frames_=undefined;this.items=undefined;},get frames(){return this.frames_;},set frames(frames){this.frames_=frames;if(frames===undefined)return;this.frames_=this.frames_.slice();this.frames_.sort(startCompare);this.items=this.frames_.map(function(frame){return new FrameDot(frame);});}};function FrameDot(frame){tr.ui.tracks.LetterDot.call(this,frame,'F',frame.colorId,frame.start);}
-FrameDot.prototype={__proto__:tr.ui.tracks.LetterDot.prototype};return{FrameTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const MultiRowTrack=tr.ui.b.define('multi-row-track',tr.ui.tracks.ContainerTrack);MultiRowTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.tooltip_='';this.heading_='';this.groupingSource_=undefined;this.itemsToGroup_=undefined;this.defaultToCollapsedWhenSubRowCountMoreThan=1;this.currentSubRowsWithHeadings_=undefined;this.expanded_=true;},get itemsToGroup(){return this.itemsToGroup_;},setItemsToGroup(itemsToGroup,opt_groupingSource){this.itemsToGroup_=itemsToGroup;this.groupingSource_=opt_groupingSource;this.currentSubRowsWithHeadings_=undefined;this.updateContents_();this.updateExpandedStateFromGroupingSource_();},setPrebuiltSubRows(groupingSource,subRowsWithHeadings){this.itemsToGroup_=undefined;this.groupingSource_=groupingSource;this.currentSubRowsWithHeadings_=subRowsWithHeadings;this.updateContents_();this.updateExpandedStateFromGroupingSource_();},get heading(){return this.heading_;},set heading(h){this.heading_=h;this.updateHeadingAndTooltip_();},get tooltip(){return this.tooltip_;},set tooltip(t){this.tooltip_=t;this.updateHeadingAndTooltip_();},get subRows(){return this.currentSubRowsWithHeadings_.map(elem=>elem.row);},get hasVisibleContent(){return this.children.length>0;},get expanded(){return this.expanded_;},set expanded(expanded){if(this.expanded_===expanded)return;this.expanded_=expanded;this.expandedStateChanged_();},onHeadingClicked_(e){if(this.subRows.length<=1)return;this.expanded=!this.expanded;if(this.groupingSource_){const modelSettings=new tr.model.ModelSettings(this.groupingSource_.model);modelSettings.setSettingFor(this.groupingSource_,'expanded',this.expanded);}
-e.stopPropagation();},updateExpandedStateFromGroupingSource_(){if(this.groupingSource_){const numSubRows=this.subRows.length;const modelSettings=new tr.model.ModelSettings(this.groupingSource_.model);if(numSubRows>1){let defaultExpanded;if(numSubRows>this.defaultToCollapsedWhenSubRowCountMoreThan){defaultExpanded=false;}else{defaultExpanded=true;}
-this.expanded=modelSettings.getSettingFor(this.groupingSource_,'expanded',defaultExpanded);}else{this.expanded=undefined;}}},expandedStateChanged_(){const minH=Math.max(2,Math.ceil(18/this.children.length));const h=(this.expanded_?18:minH)+'px';for(let i=0;i<this.children.length;i++){this.children[i].height=h;if(i===0){this.children[i].arrowVisible=true;}
-this.children[i].expanded=this.expanded;}
-if(this.children.length===1){this.children[0].expanded=true;this.children[0].arrowVisible=false;}},updateContents_(){tr.ui.tracks.ContainerTrack.prototype.updateContents_.call(this);this.detach();if(this.currentSubRowsWithHeadings_===undefined){if(this.itemsToGroup_===undefined){return;}
-const subRows=this.buildSubRows_(this.itemsToGroup_);this.currentSubRowsWithHeadings_=subRows.map(row=>{return{row,heading:undefined};});}
-if(this.currentSubRowsWithHeadings_===undefined||this.currentSubRowsWithHeadings_.length===0){return;}
-const addSubTrackEx=(items,opt_heading)=>{const track=this.addSubTrack_(items);if(opt_heading!==undefined){track.heading=opt_heading;}
-track.addEventListener('heading-clicked',this.onHeadingClicked_.bind(this));};if(this.currentSubRowsWithHeadings_[0].heading!==undefined&&this.currentSubRowsWithHeadings_[0].heading!==this.heading_){addSubTrackEx([]);}
-for(const subRowWithHeading of this.currentSubRowsWithHeadings_){const subRow=subRowWithHeading.row;if(subRow.length===0){continue;}
-addSubTrackEx(subRow,subRowWithHeading.heading);}
-this.updateHeadingAndTooltip_();this.expandedStateChanged_();},updateHeadingAndTooltip_(){if(!Polymer.dom(this).firstChild)return;Polymer.dom(this).firstChild.heading=this.heading_;Polymer.dom(this).firstChild.tooltip=this.tooltip_;},buildSubRows_(itemsToGroup){throw new Error('Not implemented');},addSubTrack_(subRowItems){throw new Error('Not implemented');},areArrayContentsSame_(a,b){if(!a||!b)return false;if(!a.length||!b.length)return false;if(a.length!==b.length)return false;for(let i=0;i<a.length;++i){if(a[i]!==b[i])return false;}
-return true;}};return{MultiRowTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ObjectInstanceGroupTrack=tr.ui.b.define('object-instance-group-track',tr.ui.tracks.MultiRowTrack);ObjectInstanceGroupTrack.prototype={__proto__:tr.ui.tracks.MultiRowTrack.prototype,decorate(viewport){tr.ui.tracks.MultiRowTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('object-instance-group-track');this.objectInstances_=undefined;},get objectInstances(){return this.itemsToGroup;},set objectInstances(objectInstances){this.setItemsToGroup(objectInstances);},addSubTrack_(objectInstances){const hasMultipleRows=this.subRows.length>1;const track=new tr.ui.tracks.ObjectInstanceTrack(this.viewport);track.objectInstances=objectInstances;Polymer.dom(this).appendChild(track);return track;},buildSubRows_(objectInstances){objectInstances.sort(function(x,y){return x.creationTs-y.creationTs;});const subRows=[];for(let i=0;i<objectInstances.length;i++){const objectInstance=objectInstances[i];let found=false;for(let j=0;j<subRows.length;j++){const subRow=subRows[j];const lastItemInSubRow=subRow[subRow.length-1];if(objectInstance.creationTs>=lastItemInSubRow.deletionTs){found=true;subRow.push(objectInstance);break;}}
-if(!found){subRows.push([objectInstance]);}}
-return subRows;},updateHeadingAndTooltip_(){}};return{ObjectInstanceGroupTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const AsyncSliceGroupTrack=tr.ui.b.define('async-slice-group-track',tr.ui.tracks.MultiRowTrack);AsyncSliceGroupTrack.prototype={__proto__:tr.ui.tracks.MultiRowTrack.prototype,decorate(viewport){tr.ui.tracks.MultiRowTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('async-slice-group-track');this.group_=undefined;},addSubTrack_(slices){const track=new tr.ui.tracks.SliceTrack(this.viewport);track.slices=slices;Polymer.dom(this).appendChild(track);track.asyncStyle=true;return track;},get group(){return this.group_;},set group(group){this.group_=group;this.buildAndSetSubRows_();},get eventContainer(){return this.group;},addContainersToTrackMap(containerToTrackMap){tr.ui.tracks.MultiRowTrack.prototype.addContainersToTrackMap.apply(this,arguments);containerToTrackMap.addContainer(this.group,this);},buildAndSetSubRows_(){if(this.group_.viewSubGroups.length<=1){const rows=groupAsyncSlicesIntoSubRows(this.group_.slices);const rowsWithHeadings=rows.map(row=>{return{row,heading:undefined};});this.setPrebuiltSubRows(this.group_,rowsWithHeadings);return;}
-const rowsWithHeadings=[];for(const subGroup of this.group_.viewSubGroups){const subGroupRows=groupAsyncSlicesIntoSubRows(subGroup.slices);if(subGroupRows.length===0){continue;}
-for(let i=0;i<subGroupRows.length;i++){rowsWithHeadings.push({row:subGroupRows[i],heading:(i===0?subGroup.title:'')});}}
-this.setPrebuiltSubRows(this.group_,rowsWithHeadings);}};function stripSlice_(slice){if(slice.subSlices!==undefined&&slice.subSlices.length===1){const subSlice=slice.subSlices[0];if(tr.b.math.approximately(subSlice.start,slice.start,1)&&tr.b.math.approximately(subSlice.duration,slice.duration,1)){return subSlice;}}
-return slice;}
-function makeLevelSubRows_(slices){const rows=[];const putSlice=(slice,level)=>{while(rows.length<=level){rows.push([]);}
-rows[level].push(slice);};const putSliceRecursively=(slice,level)=>{putSlice(slice,level);if(slice.subSlices!==undefined){for(const subSlice of slice.subSlices){putSliceRecursively(subSlice,level+1);}}};for(const slice of slices){putSliceRecursively(stripSlice_(slice),0);}
-return rows;}
-function groupAsyncSlicesIntoSubRows(slices,opt_skipSort){if(!opt_skipSort){slices.sort((x,y)=>x.start-y.start);}
-const rows=[];let slicesLeft=slices;while(slicesLeft.length!==0){const fit=[];const unfit=[];let levelEndTime=-1;for(const slice of slicesLeft){if(slice.start>=levelEndTime){levelEndTime=slice.end;fit.push(slice);}else{unfit.push(slice);}}
-rows.push(...makeLevelSubRows_(fit));slicesLeft=unfit;}
-return rows;}
-return{AsyncSliceGroupTrack,groupAsyncSlicesIntoSubRows,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const SampleTrack=tr.ui.b.define('sample-track',tr.ui.tracks.RectTrack);SampleTrack.prototype={__proto__:tr.ui.tracks.RectTrack.prototype,decorate(viewport){tr.ui.tracks.RectTrack.prototype.decorate.call(this,viewport);},get samples(){return this.rects;},set samples(samples){this.rects=samples;}};return{SampleTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const SliceGroupTrack=tr.ui.b.define('slice-group-track',tr.ui.tracks.MultiRowTrack);SliceGroupTrack.prototype={__proto__:tr.ui.tracks.MultiRowTrack.prototype,decorate(viewport){tr.ui.tracks.MultiRowTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('slice-group-track');this.group_=undefined;this.defaultToCollapsedWhenSubRowCountMoreThan=100;},addSubTrack_(slices){const track=new tr.ui.tracks.SliceTrack(this.viewport);track.slices=slices;Polymer.dom(this).appendChild(track);return track;},get group(){return this.group_;},set group(group){this.group_=group;this.setItemsToGroup(this.group_.slices,this.group_);},get eventContainer(){return this.group;},addContainersToTrackMap(containerToTrackMap){tr.ui.tracks.MultiRowTrack.prototype.addContainersToTrackMap.apply(this,arguments);containerToTrackMap.addContainer(this.group,this);},buildSubRows_(slices){const precisionUnit=this.group.model.intrinsicTimeUnit;if(!slices.length)return[];const ops=[];for(let i=0;i<slices.length;i++){if(slices[i].subSlices){slices[i].subSlices.splice(0,slices[i].subSlices.length);}
-ops.push(i);}
-ops.sort(function(ix,iy){const x=slices[ix];const y=slices[iy];if(x.start!==y.start)return x.start-y.start;return ix-iy;});const subRows=[[]];this.badSlices_=[];for(let i=0;i<ops.length;i++){const op=ops[i];const slice=slices[op];let inserted=false;for(let j=subRows.length-1;j>=0;j--){if(subRows[j].length===0)continue;const insertedSlice=subRows[j][subRows[j].length-1];if(slice.start<insertedSlice.start){this.badSlices_.push(slice);inserted=true;}
-if(insertedSlice.bounds(slice,precisionUnit)){while(subRows.length<=j+1){subRows.push([]);}
-subRows[j+1].push(slice);if(insertedSlice.subSlices){insertedSlice.subSlices.push(slice);}
-inserted=true;break;}}
-if(inserted)continue;subRows[0].push(slice);}
-return subRows;}};return{SliceGroupTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ThreadTrack=tr.ui.b.define('thread-track',tr.ui.tracks.ContainerTrack);ThreadTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('thread-track');this.heading_=document.createElement('tr-ui-b-heading');},get thread(){return this.thread_;},set thread(thread){this.thread_=thread;this.updateContents_();},get hasVisibleContent(){return this.tracks_.length>0;},get hasSlices(){return this.thread_.asyncSliceGroup.length>0||this.thread_.sliceGroup.length>0;},get hasTimeSlices(){return this.thread_.timeSlices;},get eventContainer(){return this.thread;},addContainersToTrackMap(containerToTrackMap){tr.ui.tracks.ContainerTrack.prototype.addContainersToTrackMap.apply(this,arguments);containerToTrackMap.addContainer(this.thread,this);},updateContents_(){this.detach();if(!this.thread_)return;this.heading_.heading=this.thread_.userFriendlyName;this.heading_.tooltip=this.thread_.userFriendlyDetails;if(this.thread_.asyncSliceGroup.length){this.appendAsyncSliceTracks_();}
-this.appendThreadSamplesTracks_();let needsHeading=false;if(this.thread_.timeSlices){const timeSlicesTrack=new tr.ui.tracks.SliceTrack(this.viewport);timeSlicesTrack.heading='';timeSlicesTrack.height=tr.ui.b.THIN_SLICE_HEIGHT+'px';timeSlicesTrack.slices=this.thread_.timeSlices;if(timeSlicesTrack.hasVisibleContent){needsHeading=true;Polymer.dom(this).appendChild(timeSlicesTrack);}}
-if(this.thread_.sliceGroup.length){const track=new tr.ui.tracks.SliceGroupTrack(this.viewport);track.heading=this.thread_.userFriendlyName;track.tooltip=this.thread_.userFriendlyDetails;track.group=this.thread_.sliceGroup;if(track.hasVisibleContent){needsHeading=false;Polymer.dom(this).appendChild(track);}}
-if(needsHeading){Polymer.dom(this).appendChild(this.heading_);}},appendAsyncSliceTracks_(){const subGroups=this.thread_.asyncSliceGroup.viewSubGroups;subGroups.forEach(function(subGroup){const asyncTrack=new tr.ui.tracks.AsyncSliceGroupTrack(this.viewport);asyncTrack.group=subGroup;asyncTrack.heading=subGroup.title;if(asyncTrack.hasVisibleContent){Polymer.dom(this).appendChild(asyncTrack);}},this);},appendThreadSamplesTracks_(){const threadSamples=this.thread_.samples;if(threadSamples===undefined||threadSamples.length===0){return;}
-const samplesByTitle={};threadSamples.forEach(function(sample){if(samplesByTitle[sample.title]===undefined){samplesByTitle[sample.title]=[];}
-samplesByTitle[sample.title].push(sample);});const sampleTitles=Object.keys(samplesByTitle);sampleTitles.sort();sampleTitles.forEach(function(sampleTitle){const samples=samplesByTitle[sampleTitle];const samplesTrack=new tr.ui.tracks.SampleTrack(this.viewport);samplesTrack.group=this.thread_;samplesTrack.samples=samples;samplesTrack.heading=this.thread_.userFriendlyName+': '+
-sampleTitle;samplesTrack.tooltip=this.thread_.userFriendlyDetails;samplesTrack.selectionGenerator=function(){const selection=new tr.model.EventSet();for(let i=0;i<samplesTrack.samples.length;i++){selection.push(samplesTrack.samples[i]);}
-return selection;};Polymer.dom(this).appendChild(samplesTrack);},this);},collapsedDidChange(collapsed){if(collapsed){let h=parseInt(this.tracks[0].height);for(let i=0;i<this.tracks.length;++i){if(h>2){this.tracks[i].height=Math.floor(h)+'px';}else{this.tracks[i].style.display='none';}
-h=h*0.5;}}else{for(let i=0;i<this.tracks.length;++i){this.tracks[i].height=this.tracks[0].height;this.tracks[i].style.display='';}}}};return{ThreadTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const OtherThreadsTrack=tr.ui.b.define('other-threads-track',tr.ui.tracks.OtherThreadsTrack);const SpacingTrack=tr.ui.tracks.SpacingTrack;OtherThreadsTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.header_=document.createElement('tr-ui-b-heading');this.header_.addEventListener('click',this.onHeaderClick_.bind(this));this.header_.heading='Other Threads';this.header_.tooltip='Threads with only scheduling information';this.header_.arrowVisible=true;this.threads_=[];this.expanded=false;this.collapsible_=true;},set threads(threads){this.threads_=threads;this.updateContents_();},set collapsible(collapsible){this.collapsible_=collapsible;this.updateContents_();},onHeaderClick_(e){e.stopPropagation();e.preventDefault();this.expanded=!this.expanded;},get expanded(){return this.header_.expanded;},set expanded(expanded){expanded=!!expanded;if(this.expanded===expanded)return;this.header_.expanded=expanded;this.viewport_.dispatchChangeEvent();this.updateContents_();},updateContents_(){this.detach();if(this.collapsible_){Polymer.dom(this).appendChild(this.header_);}
-if(this.expanded||!this.collapsible_){for(const thread of this.threads_){const track=new tr.ui.tracks.ThreadTrack(this.viewport);track.thread=thread;if(!track.hasVisibleContent)return;Polymer.dom(this).appendChild(track);Polymer.dom(this).appendChild(new SpacingTrack(this.viewport));}}}};return{OtherThreadsTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const ProcessSummaryTrack=tr.ui.b.define('process-summary-track',tr.ui.tracks.RectTrack);ProcessSummaryTrack.buildRectsFromProcess=function(process){if(!process)return[];const ops=[];const pushOp=function(isStart,time,slice){ops.push({isStart,time,slice});};for(const tid in process.threads){const sliceGroup=process.threads[tid].sliceGroup;sliceGroup.topLevelSlices.forEach(function(slice){pushOp(true,slice.start,undefined);pushOp(false,slice.end,undefined);});sliceGroup.slices.forEach(function(slice){if(slice.important){pushOp(true,slice.start,slice);pushOp(false,slice.end,slice);}});}
-ops.sort(function(a,b){return a.time-b.time;});const rects=[];const genericColorId=ColorScheme.getColorIdForReservedName('generic_work');const pushRect=function(start,end,slice){rects.push(new tr.ui.tracks.Rect(slice,slice?slice.title:'',slice?slice.colorId:genericColorId,start,end-start));};let depth=0;let currentSlice=undefined;let lastStart=undefined;ops.forEach(function(op){depth+=op.isStart?1:-1;if(currentSlice){if(!op.isStart&&op.slice===currentSlice){pushRect(lastStart,op.time,currentSlice);lastStart=depth>=1?op.time:undefined;currentSlice=undefined;}}else{if(op.isStart){if(depth===1){lastStart=op.time;currentSlice=op.slice;}else if(op.slice){if(op.time!==lastStart){pushRect(lastStart,op.time,undefined);lastStart=op.time;}
-currentSlice=op.slice;}}else{if(depth===0){pushRect(lastStart,op.time,undefined);lastStart=undefined;}}}});return rects;};ProcessSummaryTrack.prototype={__proto__:tr.ui.tracks.RectTrack.prototype,decorate(viewport){tr.ui.tracks.RectTrack.prototype.decorate.call(this,viewport);},get process(){return this.process_;},set process(process){this.process_=process;this.rects=ProcessSummaryTrack.buildRectsFromProcess(process);}};return{ProcessSummaryTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ObjectSnapshotView=tr.ui.analysis.ObjectSnapshotView;const ObjectInstanceView=tr.ui.analysis.ObjectInstanceView;const SpacingTrack=tr.ui.tracks.SpacingTrack;const ProcessTrackBase=tr.ui.b.define('process-track-base',tr.ui.tracks.ContainerTrack);ProcessTrackBase.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.processBase_=undefined;Polymer.dom(this).classList.add('process-track-base');Polymer.dom(this).classList.add('expanded');this.processNameEl_=tr.ui.b.createSpan();Polymer.dom(this.processNameEl_).classList.add('process-track-name');this.headerEl_=tr.ui.b.createDiv({className:'process-track-header'});Polymer.dom(this.headerEl_).appendChild(this.processNameEl_);this.headerEl_.addEventListener('click',this.onHeaderClick_.bind(this));Polymer.dom(this).appendChild(this.headerEl_);},get processBase(){return this.processBase_;},set processBase(processBase){this.processBase_=processBase;if(this.processBase_){const modelSettings=new tr.model.ModelSettings(this.processBase_.model);const defaultValue=this.processBase_.important;this.expanded=modelSettings.getSettingFor(this.processBase_,'expanded',defaultValue);}
-this.updateContents_();},get expanded(){return Polymer.dom(this).classList.contains('expanded');},set expanded(expanded){expanded=!!expanded;if(this.expanded===expanded)return;Polymer.dom(this).classList.toggle('expanded');this.viewport_.dispatchChangeEvent();if(!this.processBase_)return;const modelSettings=new tr.model.ModelSettings(this.processBase_.model);modelSettings.setSettingFor(this.processBase_,'expanded',expanded);this.updateContents_();this.viewport.rebuildEventToTrackMap();this.viewport.rebuildContainerToTrackMap();},get hasVisibleContent(){if(this.expanded){return this.children.length>1;}
-return true;},onHeaderClick_(e){e.stopPropagation();e.preventDefault();this.expanded=!this.expanded;},updateContents_(){this.clearTracks_();if(!this.processBase_)return;Polymer.dom(this.processNameEl_).textContent=this.processBase_.userFriendlyName;this.headerEl_.title=this.processBase_.userFriendlyDetails;this.willAppendTracks_();if(this.expanded){this.appendMemoryDumpTrack_();this.appendObjectInstanceTracks_();this.appendCounterTracks_();this.appendFrameTrack_();this.appendThreadTracks_();}else{this.appendSummaryTrack_();}
-this.didAppendTracks_();},willAppendTracks_(){},didAppendTracks_(){},appendMemoryDumpTrack_(){},appendSummaryTrack_(){const track=new tr.ui.tracks.ProcessSummaryTrack(this.viewport);track.process=this.process;if(!track.hasVisibleContent)return;Polymer.dom(this).appendChild(track);},appendFrameTrack_(){const frames=this.process?this.process.frames:undefined;if(!frames||!frames.length)return;const track=new tr.ui.tracks.FrameTrack(this.viewport);track.frames=frames;Polymer.dom(this).appendChild(track);},appendObjectInstanceTracks_(){const instancesByTypeName=this.processBase_.objects.getAllInstancesByTypeName();const instanceTypeNames=Object.keys(instancesByTypeName);instanceTypeNames.sort();let didAppendAtLeastOneTrack=false;instanceTypeNames.forEach(function(typeName){const allInstances=instancesByTypeName[typeName];let instanceViewInfo=ObjectInstanceView.getTypeInfo(undefined,typeName);let snapshotViewInfo=ObjectSnapshotView.getTypeInfo(undefined,typeName);if(instanceViewInfo&&!instanceViewInfo.metadata.showInTrackView){instanceViewInfo=undefined;}
-if(snapshotViewInfo&&!snapshotViewInfo.metadata.showInTrackView){snapshotViewInfo=undefined;}
-const hasViewInfo=instanceViewInfo||snapshotViewInfo;const visibleInstances=[];for(let i=0;i<allInstances.length;i++){const instance=allInstances[i];if(instance.snapshots.length===0)continue;if(instance.hasImplicitSnapshots&&!hasViewInfo)continue;visibleInstances.push(instance);}
-if(visibleInstances.length===0)return;let trackConstructor=tr.ui.tracks.ObjectInstanceTrack.getConstructor(undefined,typeName);if(!trackConstructor){snapshotViewInfo=ObjectSnapshotView.getTypeInfo(undefined,typeName);if(snapshotViewInfo&&snapshotViewInfo.metadata.showInstances){trackConstructor=tr.ui.tracks.ObjectInstanceGroupTrack;}else{trackConstructor=tr.ui.tracks.ObjectInstanceTrack;}}
-const track=new trackConstructor(this.viewport);track.objectInstances=visibleInstances;Polymer.dom(this).appendChild(track);didAppendAtLeastOneTrack=true;},this);if(didAppendAtLeastOneTrack){Polymer.dom(this).appendChild(new SpacingTrack(this.viewport));}},appendCounterTracks_(){const counters=Object.values(this.processBase.counters);counters.sort(tr.model.Counter.compare);counters.forEach(function(counter){const track=new tr.ui.tracks.CounterTrack(this.viewport);track.counter=counter;Polymer.dom(this).appendChild(track);Polymer.dom(this).appendChild(new SpacingTrack(this.viewport));}.bind(this));},appendThreadTracks_(){const threads=Object.values(this.processBase.threads);threads.sort(tr.model.Thread.compare);const otherThreads=[];let hasVisibleThreads=false;threads.forEach(function(thread){const track=new tr.ui.tracks.ThreadTrack(this.viewport);track.thread=thread;if(!track.hasVisibleContent)return;if(track.hasSlices){hasVisibleThreads=true;Polymer.dom(this).appendChild(track);Polymer.dom(this).appendChild(new SpacingTrack(this.viewport));}else if(track.hasTimeSlices){otherThreads.push(thread);}}.bind(this));if(otherThreads.length>0){const track=new tr.ui.tracks.OtherThreadsTrack(this.viewport);track.threads=otherThreads;track.collapsible=otherThreads.length>1&&hasVisibleThreads;Polymer.dom(this).appendChild(track);}}};return{ProcessTrackBase,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const Cpu=tr.model.Cpu;const CpuTrack=tr.ui.tracks.cpu_track;const ProcessTrackBase=tr.ui.tracks.ProcessTrackBase;const SpacingTrack=tr.ui.tracks.SpacingTrack;const KernelTrack=tr.ui.b.define('kernel-track',ProcessTrackBase);KernelTrack.prototype={__proto__:ProcessTrackBase.prototype,decorate(viewport){ProcessTrackBase.prototype.decorate.call(this,viewport);},set kernel(kernel){this.processBase=kernel;},get kernel(){return this.processBase;},get eventContainer(){return this.kernel;},get hasVisibleContent(){return this.children.length>1;},addContainersToTrackMap(containerToTrackMap){tr.ui.tracks.ProcessTrackBase.prototype.addContainersToTrackMap.call(this,containerToTrackMap);containerToTrackMap.addContainer(this.kernel,this);},willAppendTracks_(){const cpus=Object.values(this.kernel.cpus);cpus.sort(tr.model.Cpu.compare);let didAppendAtLeastOneTrack=false;for(let i=0;i<cpus.length;++i){const cpu=cpus[i];const track=new tr.ui.tracks.CpuTrack(this.viewport);track.detailedMode=this.expanded;track.cpu=cpu;if(!track.hasVisibleContent)continue;Polymer.dom(this).appendChild(track);didAppendAtLeastOneTrack=true;}
-if(didAppendAtLeastOneTrack){Polymer.dom(this).appendChild(new SpacingTrack(this.viewport));}}};return{KernelTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const InteractionTrack=tr.ui.b.define('interaction-track',tr.ui.tracks.MultiRowTrack);InteractionTrack.prototype={__proto__:tr.ui.tracks.MultiRowTrack.prototype,decorate(viewport){tr.ui.tracks.MultiRowTrack.prototype.decorate.call(this,viewport);this.heading='Interactions';this.subRows_=[];},set model(model){this.setItemsToGroup(model.userModel.expectations,{guid:tr.b.GUID.allocateSimple(),model,getSettingsKey(){return undefined;}});},buildSubRows_(slices){if(this.subRows_.length){return this.subRows_;}
-this.subRows_.push(...tr.ui.tracks.groupAsyncSlicesIntoSubRows(slices,true));return this.subRows_;},addSubTrack_(slices){const track=new tr.ui.tracks.SliceTrack(this.viewport);track.slices=slices;Polymer.dom(this).appendChild(track);return track;}};return{InteractionTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ColorScheme=tr.b.ColorScheme;const LetterDotTrack=tr.ui.tracks.LetterDotTrack;const MemoryTrack=tr.ui.b.define('memory-track',LetterDotTrack);MemoryTrack.prototype={__proto__:LetterDotTrack.prototype,decorate(viewport){LetterDotTrack.prototype.decorate.call(this,viewport);this.classList.add('memory-track');this.heading='Memory Events';this.lowMemoryEvents_=undefined;},initialize(model){if(model!==undefined){this.lowMemoryEvents_=model.device.lowMemoryEvents;}else{this.lowMemoryEvents_=undefined;}
-if(this.hasVisibleContent){this.items=this.buildMemoryLetterDots_(this.lowMemoryEvents_);}},get hasVisibleContent(){return!!this.lowMemoryEvents_&&this.lowMemoryEvents_.length!==0;},buildMemoryLetterDots_(memoryEvents){return memoryEvents.map(memoryEvent=>new tr.ui.tracks.LetterDot(memoryEvent,'K',ColorScheme.getColorIdForReservedName('background_memory_dump'),memoryEvent.start));},};return{MemoryTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ALLOCATED_MEMORY_TRACK_HEIGHT=50;const ProcessMemoryDumpTrack=tr.ui.b.define('process-memory-dump-track',tr.ui.tracks.ContainerTrack);ProcessMemoryDumpTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);this.memoryDumps_=undefined;},get memoryDumps(){return this.memoryDumps_;},set memoryDumps(memoryDumps){this.memoryDumps_=memoryDumps;this.updateContents_();},updateContents_(){this.clearTracks_();if(!this.memoryDumps_||!this.memoryDumps_.length)return;this.appendAllocatedMemoryTrack_();},appendAllocatedMemoryTrack_(){const series=tr.ui.tracks.buildProcessAllocatedMemoryChartSeries(this.memoryDumps_);if(!series)return;const track=new tr.ui.tracks.ChartTrack(this.viewport);track.heading='Memory per component';track.height=ALLOCATED_MEMORY_TRACK_HEIGHT+'px';track.series=series;track.autoSetAllAxes({expandMax:true});Polymer.dom(this).appendChild(track);}};return{ProcessMemoryDumpTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const ProcessTrackBase=tr.ui.tracks.ProcessTrackBase;const ProcessTrack=tr.ui.b.define('process-track',ProcessTrackBase);ProcessTrack.prototype={__proto__:ProcessTrackBase.prototype,decorate(viewport){tr.ui.tracks.ProcessTrackBase.prototype.decorate.call(this,viewport);},drawTrack(type){switch(type){case tr.ui.tracks.DrawType.INSTANT_EVENT:{if(!this.processBase.instantEvents||this.processBase.instantEvents.length===0){break;}
-const ctx=this.context();const pixelRatio=window.devicePixelRatio||1;const bounds=this.getBoundingClientRect();const canvasBounds=ctx.canvas.getBoundingClientRect();ctx.save();ctx.translate(0,pixelRatio*(bounds.top-canvasBounds.top));const dt=this.viewport.currentDisplayTransform;const viewLWorld=dt.xViewToWorld(0);const viewRWorld=dt.xViewToWorld(canvasBounds.width*pixelRatio);tr.ui.b.drawInstantSlicesAsLines(ctx,this.viewport.currentDisplayTransform,viewLWorld,viewRWorld,bounds.height,this.processBase.instantEvents,2);ctx.restore();break;}
-case tr.ui.tracks.DrawType.BACKGROUND:this.drawBackground_();return;}
-tr.ui.tracks.ContainerTrack.prototype.drawTrack.call(this,type);},drawBackground_(){const ctx=this.context();const canvasBounds=ctx.canvas.getBoundingClientRect();const pixelRatio=window.devicePixelRatio||1;let draw=false;ctx.fillStyle='#eee';for(let i=0;i<this.children.length;++i){if(!(this.children[i]instanceof tr.ui.tracks.Track)||(this.children[i]instanceof tr.ui.tracks.SpacingTrack)){continue;}
-draw=!draw;if(!draw)continue;const bounds=this.children[i].getBoundingClientRect();ctx.fillRect(0,pixelRatio*(bounds.top-canvasBounds.top),ctx.canvas.width,pixelRatio*bounds.height);}},set process(process){this.processBase=process;},get process(){return this.processBase;},get eventContainer(){return this.process;},addContainersToTrackMap(containerToTrackMap){tr.ui.tracks.ProcessTrackBase.prototype.addContainersToTrackMap.apply(this,arguments);containerToTrackMap.addContainer(this.process,this);},appendMemoryDumpTrack_(){const processMemoryDumps=this.process.memoryDumps;if(processMemoryDumps.length){const pmdt=new tr.ui.tracks.ProcessMemoryDumpTrack(this.viewport_);pmdt.memoryDumps=processMemoryDumps;Polymer.dom(this).appendChild(pmdt);}},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){function onPickHit(instantEvent){selection.push(instantEvent);}
-const instantEventWidth=2*viewPixWidthWorld;tr.b.iterateOverIntersectingIntervals(this.processBase.instantEvents,function(x){return x.start;},function(x){return x.duration+instantEventWidth;},loWX,hiWX,onPickHit.bind(this));tr.ui.tracks.ContainerTrack.prototype.addIntersectingEventsInRangeToSelectionInWorldSpace.apply(this,arguments);},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){this.addClosestInstantEventToSelection(this.processBase.instantEvents,worldX,worldMaxDist,selection);tr.ui.tracks.ContainerTrack.prototype.addClosestEventToSelection.apply(this,arguments);}};return{ProcessTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const SelectionState=tr.model.SelectionState;const ColorScheme=tr.b.ColorScheme;const EventPresenter=tr.ui.b.EventPresenter;const ModelTrack=tr.ui.b.define('model-track',tr.ui.tracks.ContainerTrack);ModelTrack.VSYNC_HIGHLIGHT_ALPHA=0.1;ModelTrack.VSYNC_DENSITY_TRANSPARENT=0.20;ModelTrack.VSYNC_DENSITY_OPAQUE=0.10;ModelTrack.VSYNC_DENSITY_RANGE=ModelTrack.VSYNC_DENSITY_TRANSPARENT-ModelTrack.VSYNC_DENSITY_OPAQUE;ModelTrack.generateStripes_=function(times,minTime,maxTime){if(times.length===0)return[];const lowIndex=tr.b.findLowIndexInSortedArray(times,(x=>x),minTime);let highIndex=lowIndex-1;while(times[highIndex+1]<=maxTime){highIndex++;}
-const stripes=[];for(let i=lowIndex-(lowIndex%2);i<=highIndex;i+=2){const left=i<lowIndex?minTime:times[i];const right=i+1>highIndex?maxTime:times[i+1];stripes.push(tr.b.math.Range.fromExplicitRange(left,right));}
-return stripes;};ModelTrack.prototype={__proto__:tr.ui.tracks.ContainerTrack.prototype,decorate(viewport){tr.ui.tracks.ContainerTrack.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('model-track');this.upperMode_=false;this.annotationViews_=[];this.vSyncTimes_=[];},get upperMode(){return this.upperMode_;},set upperMode(upperMode){this.upperMode_=upperMode;this.updateContents_();},detach(){tr.ui.tracks.ContainerTrack.prototype.detach.call(this);},get model(){return this.model_;},set model(model){this.model_=model;this.updateContents_();this.model_.addEventListener('annotationChange',this.updateAnnotations_.bind(this));},get hasVisibleContent(){return this.children.length>0;},updateContents_(){Polymer.dom(this).textContent='';if(!this.model_)return;if(this.upperMode_){this.updateContentsForUpperMode_();}else{this.updateContentsForLowerMode_();}},updateContentsForUpperMode_(){},updateContentsForLowerMode_(){if(this.model_.userModel.expectations.length>1){const mrt=new tr.ui.tracks.InteractionTrack(this.viewport_);mrt.model=this.model_;Polymer.dom(this).appendChild(mrt);}
-if(this.model_.alerts.length){const at=new tr.ui.tracks.AlertTrack(this.viewport_);at.alerts=this.model_.alerts;Polymer.dom(this).appendChild(at);}
-if(this.model_.globalMemoryDumps.length){const gmdt=new tr.ui.tracks.GlobalMemoryDumpTrack(this.viewport_);gmdt.memoryDumps=this.model_.globalMemoryDumps;Polymer.dom(this).appendChild(gmdt);}
-this.appendDeviceTrack_();this.appendCpuUsageTrack_();this.appendMemoryTrack_();this.appendKernelTrack_();const processes=this.model_.getAllProcesses();processes.sort(tr.model.Process.compare);for(let i=0;i<processes.length;++i){const process=processes[i];const track=new tr.ui.tracks.ProcessTrack(this.viewport);track.process=process;if(!track.hasVisibleContent)continue;Polymer.dom(this).appendChild(track);}
-this.viewport_.rebuildEventToTrackMap();this.viewport_.rebuildContainerToTrackMap();this.vSyncTimes_=this.model_.device.vSyncTimestamps;this.updateAnnotations_();},getContentBounds(){return this.model.bounds;},addAnnotation(annotation){this.model.addAnnotation(annotation);},removeAnnotation(annotation){this.model.removeAnnotation(annotation);},updateAnnotations_(){this.annotationViews_=[];const annotations=this.model_.getAllAnnotations();for(let i=0;i<annotations.length;i++){this.annotationViews_.push(annotations[i].getOrCreateView(this.viewport_));}
-this.invalidateDrawingContainer();},addEventsToTrackMap(eventToTrackMap){if(!this.model_)return;const tracks=this.children;for(let i=0;i<tracks.length;++i){tracks[i].addEventsToTrackMap(eventToTrackMap);}
-if(this.instantEvents===undefined)return;const vp=this.viewport_;this.instantEvents.forEach(function(ev){eventToTrackMap.addEvent(ev,this);}.bind(this));},appendDeviceTrack_(){const device=this.model.device;const track=new tr.ui.tracks.DeviceTrack(this.viewport);track.device=this.model.device;if(!track.hasVisibleContent)return;Polymer.dom(this).appendChild(track);},appendKernelTrack_(){const kernel=this.model.kernel;const track=new tr.ui.tracks.KernelTrack(this.viewport);track.kernel=this.model.kernel;if(!track.hasVisibleContent)return;Polymer.dom(this).appendChild(track);},appendCpuUsageTrack_(){const track=new tr.ui.tracks.CpuUsageTrack(this.viewport);track.initialize(this.model);if(!track.hasVisibleContent)return;this.appendChild(track);},appendMemoryTrack_(){const track=new tr.ui.tracks.MemoryTrack(this.viewport);track.initialize(this.model);if(!track.hasVisibleContent)return;Polymer.dom(this).appendChild(track);},drawTrack(type){const ctx=this.context();if(!this.model_)return;const pixelRatio=window.devicePixelRatio||1;const bounds=this.getBoundingClientRect();const canvasBounds=ctx.canvas.getBoundingClientRect();ctx.save();ctx.translate(0,pixelRatio*(bounds.top-canvasBounds.top));const dt=this.viewport.currentDisplayTransform;const viewLWorld=dt.xViewToWorld(0);const viewRWorld=dt.xViewToWorld(canvasBounds.width*pixelRatio);const viewHeight=bounds.height*pixelRatio;switch(type){case tr.ui.tracks.DrawType.GRID:this.viewport.drawMajorMarkLines(ctx,viewHeight);ctx.restore();return;case tr.ui.tracks.DrawType.FLOW_ARROWS:if(this.model_.flowIntervalTree.size===0){ctx.restore();return;}
-this.drawFlowArrows_(viewLWorld,viewRWorld);ctx.restore();return;case tr.ui.tracks.DrawType.INSTANT_EVENT:if(!this.model_.instantEvents||this.model_.instantEvents.length===0){break;}
-tr.ui.b.drawInstantSlicesAsLines(ctx,this.viewport.currentDisplayTransform,viewLWorld,viewRWorld,bounds.height,this.model_.instantEvents,4);break;case tr.ui.tracks.DrawType.MARKERS:if(!this.viewport.interestRange.isEmpty){this.viewport.interestRange.draw(ctx,viewLWorld,viewRWorld,viewHeight);this.viewport.interestRange.drawIndicators(ctx,viewLWorld,viewRWorld);}
-ctx.restore();return;case tr.ui.tracks.DrawType.HIGHLIGHTS:this.drawVSyncHighlight(ctx,dt,viewLWorld,viewRWorld,viewHeight);ctx.restore();return;case tr.ui.tracks.DrawType.ANNOTATIONS:for(let i=0;i<this.annotationViews_.length;i++){this.annotationViews_[i].draw(ctx);}
-ctx.restore();return;}
-ctx.restore();tr.ui.tracks.ContainerTrack.prototype.drawTrack.call(this,type);},drawFlowArrows_(viewLWorld,viewRWorld){const ctx=this.context();ctx.strokeStyle='rgba(0, 0, 0, 0.4)';ctx.fillStyle='rgba(0, 0, 0, 0.4)';ctx.lineWidth=1;const events=this.model_.flowIntervalTree.findIntersection(viewLWorld,viewRWorld);const onlyHighlighted=!this.viewport.showFlowEvents;const canvasBounds=ctx.canvas.getBoundingClientRect();for(let i=0;i<events.length;++i){if(onlyHighlighted&&events[i].selectionState!==SelectionState.SELECTED&&events[i].selectionState!==SelectionState.HIGHLIGHTED){continue;}
-this.drawFlowArrow_(ctx,events[i],canvasBounds);}},drawFlowArrow_(ctx,flowEvent,canvasBounds){const dt=this.viewport.currentDisplayTransform;const pixelRatio=window.devicePixelRatio||1;const startTrack=this.viewport.trackForEvent(flowEvent.startSlice);const endTrack=this.viewport.trackForEvent(flowEvent.endSlice);if(startTrack===undefined||endTrack===undefined)return;const startBounds=startTrack.getBoundingClientRect();const endBounds=endTrack.getBoundingClientRect();if(flowEvent.selectionState===SelectionState.SELECTED){ctx.shadowBlur=1;ctx.shadowColor='red';ctx.shadowOffsety=2;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[tr.b.ColorScheme.getVariantColorId(flowEvent.colorId,tr.b.ColorScheme.properties.brightenedOffsets[0])];}else if(flowEvent.selectionState===SelectionState.HIGHLIGHTED){ctx.shadowBlur=1;ctx.shadowColor='red';ctx.shadowOffsety=2;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[tr.b.ColorScheme.getVariantColorId(flowEvent.colorId,tr.b.ColorScheme.properties.brightenedOffsets[0])];}else if(flowEvent.selectionState===SelectionState.DIMMED){ctx.shadowBlur=0;ctx.shadowOffsetX=0;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[flowEvent.colorId];}else{let hasBoost=false;const startSlice=flowEvent.startSlice;hasBoost|=startSlice.selectionState===SelectionState.SELECTED;hasBoost|=startSlice.selectionState===SelectionState.HIGHLIGHTED;const endSlice=flowEvent.endSlice;hasBoost|=endSlice.selectionState===SelectionState.SELECTED;hasBoost|=endSlice.selectionState===SelectionState.HIGHLIGHTED;if(hasBoost){ctx.shadowBlur=1;ctx.shadowColor='rgba(255, 0, 0, 0.4)';ctx.shadowOffsety=2;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[tr.b.ColorScheme.getVariantColorId(flowEvent.colorId,tr.b.ColorScheme.properties.brightenedOffsets[0])];}else{ctx.shadowBlur=0;ctx.shadowOffsetX=0;ctx.strokeStyle=tr.b.ColorScheme.colorsAsStrings[flowEvent.colorId];}}
-const startSize=startBounds.left+startBounds.top+
-startBounds.bottom+startBounds.right;const endSize=endBounds.left+endBounds.top+
-endBounds.bottom+endBounds.right;if(startSize===0&&endSize===0)return;const startY=this.calculateTrackY_(startTrack,canvasBounds);const endY=this.calculateTrackY_(endTrack,canvasBounds);const pixelStartY=pixelRatio*startY;const pixelEndY=pixelRatio*endY;const startXView=dt.xWorldToView(flowEvent.start);const endXView=dt.xWorldToView(flowEvent.end);const midXView=(startXView+endXView)/2;ctx.beginPath();ctx.moveTo(startXView,pixelStartY);ctx.bezierCurveTo(midXView,pixelStartY,midXView,pixelEndY,endXView,pixelEndY);ctx.stroke();const arrowWidth=5*pixelRatio;const distance=endXView-startXView;if(distance<=(2*arrowWidth))return;const tipX=endXView;const tipY=pixelEndY;const arrowHeight=(endBounds.height/4)*pixelRatio;tr.ui.b.drawTriangle(ctx,tipX,tipY,tipX-arrowWidth,tipY-arrowHeight,tipX-arrowWidth,tipY+arrowHeight);ctx.fill();},drawVSyncHighlight(ctx,dt,viewLWorld,viewRWorld,viewHeight){if(!this.viewport_.highlightVSync){return;}
-const stripes=ModelTrack.generateStripes_(this.vSyncTimes_,viewLWorld,viewRWorld);if(stripes.length===0){return;}
-const vSyncHighlightColor=new tr.b.Color(ColorScheme.getColorForReservedNameAsString('vsync_highlight_color'));const stripeRange=stripes[stripes.length-1].max-stripes[0].min;const stripeDensity=stripeRange?stripes.length/(dt.scaleX*stripeRange):0;const clampedStripeDensity=tr.b.math.clamp(stripeDensity,ModelTrack.VSYNC_DENSITY_OPAQUE,ModelTrack.VSYNC_DENSITY_TRANSPARENT);const opacity=(ModelTrack.VSYNC_DENSITY_TRANSPARENT-clampedStripeDensity)/ModelTrack.VSYNC_DENSITY_RANGE;if(opacity===0){return;}
-ctx.fillStyle=vSyncHighlightColor.toStringWithAlphaOverride(ModelTrack.VSYNC_HIGHLIGHT_ALPHA*opacity);for(let i=0;i<stripes.length;i++){const xLeftView=dt.xWorldToView(stripes[i].min);const xRightView=dt.xWorldToView(stripes[i].max);ctx.fillRect(xLeftView,0,xRightView-xLeftView,viewHeight);}},calculateTrackY_(track,canvasBounds){const bounds=track.getBoundingClientRect();const size=bounds.left+bounds.top+bounds.bottom+bounds.right;if(size===0){return this.calculateTrackY_(Polymer.dom(track).parentNode,canvasBounds);}
-return bounds.top-canvasBounds.top+(bounds.height/2);},addIntersectingEventsInRangeToSelectionInWorldSpace(loWX,hiWX,viewPixWidthWorld,selection){function onPickHit(instantEvent){selection.push(instantEvent);}
-const instantEventWidth=3*viewPixWidthWorld;tr.b.iterateOverIntersectingIntervals(this.model_.instantEvents,function(x){return x.start;},function(x){return x.duration+instantEventWidth;},loWX,hiWX,onPickHit.bind(this));tr.ui.tracks.ContainerTrack.prototype.addIntersectingEventsInRangeToSelectionInWorldSpace.apply(this,arguments);},addClosestEventToSelection(worldX,worldMaxDist,loY,hiY,selection){this.addClosestInstantEventToSelection(this.model_.instantEvents,worldX,worldMaxDist,selection);tr.ui.tracks.ContainerTrack.prototype.addClosestEventToSelection.apply(this,arguments);}};return{ModelTrack,};});'use strict';tr.exportTo('tr.ui.tracks',function(){const XAxisTrack=tr.ui.b.define('x-axis-track',tr.ui.tracks.Track);XAxisTrack.prototype={__proto__:tr.ui.tracks.Track.prototype,decorate(viewport){tr.ui.tracks.Track.prototype.decorate.call(this,viewport);Polymer.dom(this).classList.add('x-axis-track');this.strings_secs_=[];this.strings_msecs_=[];this.strings_usecs_=[];this.strings_nsecs_=[];this.viewportChange_=this.viewportChange_.bind(this);viewport.addEventListener('change',this.viewportChange_);const heading=document.createElement('tr-ui-b-heading');heading.arrowVisible=false;Polymer.dom(this).appendChild(heading);},detach(){tr.ui.tracks.Track.prototype.detach.call(this);this.viewport.removeEventListener('change',this.viewportChange_);},viewportChange_(){if(this.viewport.interestRange.isEmpty){Polymer.dom(this).classList.remove('tall-mode');}else{Polymer.dom(this).classList.add('tall-mode');}},draw(type,viewLWorld,viewRWorld,viewHeight){switch(type){case tr.ui.tracks.DrawType.GRID:this.drawGrid_(viewLWorld,viewRWorld);break;case tr.ui.tracks.DrawType.MARKERS:this.drawMarkers_(viewLWorld,viewRWorld);break;}},drawGrid_(viewLWorld,viewRWorld){const ctx=this.context();const pixelRatio=window.devicePixelRatio||1;const canvasBounds=ctx.canvas.getBoundingClientRect();const trackBounds=this.getBoundingClientRect();const width=canvasBounds.width*pixelRatio;const height=trackBounds.height*pixelRatio;const hasInterestRange=!this.viewport.interestRange.isEmpty;const xAxisHeightPx=hasInterestRange?(height*2)/5:height;const vp=this.viewport;const dt=vp.currentDisplayTransform;vp.updateMajorMarkData(viewLWorld,viewRWorld);const majorMarkDistanceWorld=vp.majorMarkWorldPositions.length>1?vp.majorMarkWorldPositions[1]-vp.majorMarkWorldPositions[0]:0;const numTicksPerMajor=5;const minorMarkDistanceWorld=majorMarkDistanceWorld/numTicksPerMajor;const minorMarkDistancePx=dt.xWorldVectorToView(minorMarkDistanceWorld);const minorTickHeight=Math.floor(xAxisHeightPx*0.25);ctx.save();ctx.lineWidth=Math.round(pixelRatio);const crispLineCorrection=(ctx.lineWidth%2)/2;ctx.translate(crispLineCorrection,-crispLineCorrection);ctx.fillStyle='rgb(0, 0, 0)';ctx.strokeStyle='rgb(0, 0, 0)';ctx.textAlign='left';ctx.textBaseline='top';ctx.font=(9*pixelRatio)+'px sans-serif';const tickLabels=[];ctx.beginPath();for(let i=0;i<vp.majorMarkWorldPositions.length;i++){const curXWorld=vp.majorMarkWorldPositions[i];const curXView=dt.xWorldToView(curXWorld);const displayText=vp.majorMarkUnit.format(curXWorld,{deltaValue:majorMarkDistanceWorld});ctx.fillText(displayText,curXView+(2*pixelRatio),0);tr.ui.b.drawLine(ctx,curXView,0,curXView,xAxisHeightPx);if(minorMarkDistancePx){for(let j=1;j<numTicksPerMajor;++j){const xView=Math.floor(curXView+minorMarkDistancePx*j);tr.ui.b.drawLine(ctx,xView,xAxisHeightPx-minorTickHeight,xView,xAxisHeightPx);}}}
-ctx.strokeStyle='rgb(0, 0, 0)';tr.ui.b.drawLine(ctx,0,height,width,height);ctx.stroke();if(!hasInterestRange)return;tr.ui.b.drawLine(ctx,0,xAxisHeightPx,width,xAxisHeightPx);ctx.stroke();let displayDistance;const displayTextColor='rgb(0,0,0)';const arrowSpacing=10*pixelRatio;const arrowColor='rgb(128,121,121)';const arrowPosY=xAxisHeightPx*1.75;const arrowWidthView=3*pixelRatio;const arrowLengthView=10*pixelRatio;const spaceForArrowsView=2*(arrowWidthView+arrowSpacing);ctx.textBaseline='middle';ctx.font=(14*pixelRatio)+'px sans-serif';const textPosY=arrowPosY;const interestRange=vp.interestRange;if(interestRange.range===0){const markerWorld=interestRange.min;const markerView=dt.xWorldToView(markerWorld);const textToDraw=vp.majorMarkUnit.format(markerWorld);let textLeftView=markerView+4*pixelRatio;const textWidthView=ctx.measureText(textToDraw).width;if(textLeftView+textWidthView>width){textLeftView=markerView-4*pixelRatio-textWidthView;}
-ctx.fillStyle=displayTextColor;ctx.fillText(textToDraw,textLeftView,textPosY);return;}
-const leftMarker=interestRange.min;const rightMarker=interestRange.max;const leftMarkerView=dt.xWorldToView(leftMarker);const rightMarkerView=dt.xWorldToView(rightMarker);const distanceBetweenMarkers=interestRange.range;const distanceBetweenMarkersView=dt.xWorldVectorToView(distanceBetweenMarkers);const positionInMiddleOfMarkersView=leftMarkerView+(distanceBetweenMarkersView/2);const textToDraw=vp.majorMarkUnit.format(distanceBetweenMarkers);const textWidthView=ctx.measureText(textToDraw).width;const spaceForArrowsAndTextView=textWidthView+spaceForArrowsView+arrowSpacing;let textLeftView=positionInMiddleOfMarkersView-textWidthView/2;const textRightView=textLeftView+textWidthView;if(spaceForArrowsAndTextView>distanceBetweenMarkersView){textLeftView=rightMarkerView+2*arrowSpacing;if(textLeftView+textWidthView>width){textLeftView=leftMarkerView-2*arrowSpacing-textWidthView;}
-ctx.fillStyle=displayTextColor;ctx.fillText(textToDraw,textLeftView,textPosY);ctx.strokeStyle=arrowColor;ctx.beginPath();tr.ui.b.drawLine(ctx,leftMarkerView,arrowPosY,rightMarkerView,arrowPosY);ctx.stroke();ctx.fillStyle=arrowColor;tr.ui.b.drawArrow(ctx,leftMarkerView-1.5*arrowSpacing,arrowPosY,leftMarkerView,arrowPosY,arrowLengthView,arrowWidthView);tr.ui.b.drawArrow(ctx,rightMarkerView+1.5*arrowSpacing,arrowPosY,rightMarkerView,arrowPosY,arrowLengthView,arrowWidthView);}else if(spaceForArrowsView<=distanceBetweenMarkersView){let leftArrowStart;let rightArrowStart;if(spaceForArrowsAndTextView<=distanceBetweenMarkersView){ctx.fillStyle=displayTextColor;ctx.fillText(textToDraw,textLeftView,textPosY);leftArrowStart=textLeftView-arrowSpacing;rightArrowStart=textRightView+arrowSpacing;}else{leftArrowStart=positionInMiddleOfMarkersView;rightArrowStart=positionInMiddleOfMarkersView;}
-ctx.strokeStyle=arrowColor;ctx.fillStyle=arrowColor;tr.ui.b.drawArrow(ctx,leftArrowStart,arrowPosY,leftMarkerView,arrowPosY,arrowLengthView,arrowWidthView);tr.ui.b.drawArrow(ctx,rightArrowStart,arrowPosY,rightMarkerView,arrowPosY,arrowLengthView,arrowWidthView);}
-ctx.restore();},drawMarkers_(viewLWorld,viewRWorld){const pixelRatio=window.devicePixelRatio||1;const trackBounds=this.getBoundingClientRect();const viewHeight=trackBounds.height*pixelRatio;if(!this.viewport.interestRange.isEmpty){this.viewport.interestRange.draw(this.context(),viewLWorld,viewRWorld,viewHeight);}},addIntersectingEventsInRangeToSelection(loVX,hiVX,loY,hiY,selection){},addAllEventsMatchingFilterToSelection(filter,selection){}};return{XAxisTrack,};});'use strict';Polymer({is:'tr-ui-timeline-track-view',ready(){this.displayTransform_=new tr.ui.TimelineDisplayTransform();this.model_=undefined;this.timelineView_=undefined;this.pollIfViewportAttachedInterval_=undefined;this.viewport_=new tr.ui.TimelineViewport(this);this.viewportDisplayTransformAtMouseDown_=undefined;this.brushingStateController_=undefined;this.rulerTrackContainer_=new tr.ui.tracks.DrawingContainer(this.viewport_);Polymer.dom(this).appendChild(this.rulerTrackContainer_);this.rulerTrackContainer_.invalidate();this.rulerTrackContainer_.style.overflowY='hidden';this.rulerTrackContainer_.style.flexShrink='0';this.rulerTrack_=new tr.ui.tracks.XAxisTrack(this.viewport_);Polymer.dom(this.rulerTrackContainer_).appendChild(this.rulerTrack_);this.upperModelTrack_=new tr.ui.tracks.ModelTrack(this.viewport_);this.upperModelTrack_.upperMode=true;Polymer.dom(this.rulerTrackContainer_).appendChild(this.upperModelTrack_);this.modelTrackContainer_=new tr.ui.tracks.DrawingContainer(this.viewport_);Polymer.dom(this).appendChild(this.modelTrackContainer_);this.modelTrackContainer_.style.display='block';this.modelTrackContainer_.style.flexGrow='1';this.modelTrackContainer_.invalidate();this.viewport_.modelTrackContainer=this.modelTrackContainer_;this.modelTrack_=new tr.ui.tracks.ModelTrack(this.viewport_);Polymer.dom(this.modelTrackContainer_).appendChild(this.modelTrack_);this.timingTool_=new tr.ui.b.TimingTool(this.viewport_,this);this.initMouseModeSelector();this.hideDragBox_();this.initHintText_();this.onSelectionChanged_=this.onSelectionChanged_.bind(this);this.onDblClick_=this.onDblClick_.bind(this);this.addEventListener('dblclick',this.onDblClick_);this.onMouseWheel_=this.onMouseWheel_.bind(this);this.addEventListener('mousewheel',this.onMouseWheel_);this.onMouseDown_=this.onMouseDown_.bind(this);this.addEventListener('mousedown',this.onMouseDown_);this.onMouseMove_=this.onMouseMove_.bind(this);this.addEventListener('mousemove',this.onMouseMove_);this.onTouchStart_=this.onTouchStart_.bind(this);this.addEventListener('touchstart',this.onTouchStart_);this.onTouchMove_=this.onTouchMove_.bind(this);this.addEventListener('touchmove',this.onTouchMove_);this.onTouchEnd_=this.onTouchEnd_.bind(this);this.addEventListener('touchend',this.onTouchEnd_);this.addHotKeys_();this.mouseViewPosAtMouseDown_={x:0,y:0};this.lastMouseViewPos_={x:0,y:0};this.lastTouchViewPositions_=[];this.alert_=undefined;this.isPanningAndScanning_=false;this.isZooming_=false;},initMouseModeSelector(){this.mouseModeSelector_=document.createElement('tr-ui-b-mouse-mode-selector');this.mouseModeSelector_.targetElement=this;Polymer.dom(this).appendChild(this.mouseModeSelector_);this.mouseModeSelector_.addEventListener('beginpan',this.onBeginPanScan_.bind(this));this.mouseModeSelector_.addEventListener('updatepan',this.onUpdatePanScan_.bind(this));this.mouseModeSelector_.addEventListener('endpan',this.onEndPanScan_.bind(this));this.mouseModeSelector_.addEventListener('beginselection',this.onBeginSelection_.bind(this));this.mouseModeSelector_.addEventListener('updateselection',this.onUpdateSelection_.bind(this));this.mouseModeSelector_.addEventListener('endselection',this.onEndSelection_.bind(this));this.mouseModeSelector_.addEventListener('beginzoom',this.onBeginZoom_.bind(this));this.mouseModeSelector_.addEventListener('updatezoom',this.onUpdateZoom_.bind(this));this.mouseModeSelector_.addEventListener('endzoom',this.onEndZoom_.bind(this));this.mouseModeSelector_.addEventListener('entertiming',this.timingTool_.onEnterTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('begintiming',this.timingTool_.onBeginTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('updatetiming',this.timingTool_.onUpdateTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('endtiming',this.timingTool_.onEndTiming.bind(this.timingTool_));this.mouseModeSelector_.addEventListener('exittiming',this.timingTool_.onExitTiming.bind(this.timingTool_));const m=tr.ui.b.MOUSE_SELECTOR_MODE;this.mouseModeSelector_.supportedModeMask=m.SELECTION|m.PANSCAN|m.ZOOM|m.TIMING;this.mouseModeSelector_.settingsKey='timelineTrackView.mouseModeSelector';this.mouseModeSelector_.setKeyCodeForMode(m.PANSCAN,'2'.charCodeAt(0));this.mouseModeSelector_.setKeyCodeForMode(m.SELECTION,'1'.charCodeAt(0));this.mouseModeSelector_.setKeyCodeForMode(m.ZOOM,'3'.charCodeAt(0));this.mouseModeSelector_.setKeyCodeForMode(m.TIMING,'4'.charCodeAt(0));this.mouseModeSelector_.setModifierForAlternateMode(m.SELECTION,tr.ui.b.MODIFIER.SHIFT);this.mouseModeSelector_.setModifierForAlternateMode(m.PANSCAN,tr.ui.b.MODIFIER.SPACE);},get brushingStateController(){return this.brushingStateController_;},set brushingStateController(brushingStateController){if(this.brushingStateController_){this.brushingStateController_.removeEventListener('change',this.onSelectionChanged_);}
-this.brushingStateController_=brushingStateController;if(this.brushingStateController_){this.brushingStateController_.addEventListener('change',this.onSelectionChanged_);}},set timelineView(view){this.timelineView_=view;},onSelectionChanged_(){this.showHintText_('Press \'m\' to mark current selection');this.viewport_.dispatchChangeEvent();},set selection(selection){throw new Error('DO NOT CALL THIS');},set highlight(highlight){throw new Error('DO NOT CALL THIS');},detach(){this.modelTrack_.detach();this.upperModelTrack_.detach();if(this.pollIfViewportAttachedInterval_){window.clearInterval(this.pollIfViewportAttachedInterval_);this.pollIfViewportAttachedInterval_=undefined;}
-this.viewport_.detach();},get viewport(){return this.viewport_;},get model(){return this.model_;},set model(model){if(!model){throw new Error('Model cannot be undefined');}
-const modelInstanceChanged=this.model_!==model;this.model_=model;this.modelTrack_.model=model;this.upperModelTrack_.model=model;if(modelInstanceChanged){this.pollIfViewportAttachedInterval_=window.setInterval(this.pollIfViewportAttached_.bind(this),250);}},get hasVisibleContent(){return this.modelTrack_.hasVisibleContent||this.upperModelTrack_.hasVisibleContent;},pollIfViewportAttached_(){if(!this.viewport_.isAttachedToDocumentOrInTestMode||this.viewport_.clientWidth===0){return;}
-window.addEventListener('resize',this.viewport_.dispatchChangeEvent);window.clearInterval(this.pollIfViewportAttachedInterval_);this.pollIfViewportAttachedInterval_=undefined;this.setInitialViewport_();},setInitialViewport_(){this.modelTrackContainer_.updateCanvasSizeIfNeeded_();const w=this.modelTrackContainer_.canvas.width;let min;let range;if(this.model_.bounds.isEmpty){min=0;range=1000;}else if(this.model_.bounds.range===0){min=this.model_.bounds.min;range=1000;}else{min=this.model_.bounds.min;range=this.model_.bounds.range;}
-const boost=range*0.15;this.displayTransform_.set(this.viewport_.currentDisplayTransform);this.displayTransform_.xSetWorldBounds(min-boost,min+range+boost,w);this.viewport_.setDisplayTransformImmediately(this.displayTransform_);},addAllEventsMatchingFilterToSelectionAsTask(filter,selection){const modelTrack=this.modelTrack_;const firstT=modelTrack.addAllEventsMatchingFilterToSelectionAsTask(filter,selection);const lastT=firstT.after(function(){this.upperModelTrack_.addAllEventsMatchingFilterToSelection(filter,selection);},this);return firstT;},onMouseMove_(e){if(this.isZooming_)return;this.storeLastMousePos_(e);},onTouchStart_(e){this.storeLastTouchPositions_(e);this.focusElements_();},onTouchMove_(e){e.preventDefault();this.onUpdateTransformForTouch_(e);},onTouchEnd_(e){this.storeLastTouchPositions_(e);this.focusElements_();},addHotKeys_(){this.addKeyDownHotKeys_();this.addKeyPressHotKeys_();},addKeyPressHotKey(dict){dict.eventType='keypress';dict.useCapture=false;dict.thisArg=this;const binding=new tr.ui.b.HotKey(dict);this.$.hotkey_controller.addHotKey(binding);},addKeyPressHotKeys_(){this.addKeyPressHotKey({keyCodes:['w'.charCodeAt(0),','.charCodeAt(0)],callback(e){this.zoomBy_(1.5,true);e.stopPropagation();}});this.addKeyPressHotKey({keyCodes:['s'.charCodeAt(0),'o'.charCodeAt(0)],callback(e){this.zoomBy_(1/1.5,true);e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'g'.charCodeAt(0),callback(e){this.onGridToggle_(true);e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'G'.charCodeAt(0),callback(e){this.onGridToggle_(false);e.stopPropagation();}});this.addKeyPressHotKey({keyCodes:['W'.charCodeAt(0),'<'.charCodeAt(0)],callback(e){this.zoomBy_(10,true);e.stopPropagation();}});this.addKeyPressHotKey({keyCodes:['S'.charCodeAt(0),'O'.charCodeAt(0)],callback(e){this.zoomBy_(1/10,true);e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'a'.charCodeAt(0),callback(e){this.queueSmoothPan_(this.viewWidth_*0.3,0);e.stopPropagation();}});this.addKeyPressHotKey({keyCodes:['d'.charCodeAt(0),'e'.charCodeAt(0)],callback(e){this.queueSmoothPan_(this.viewWidth_*-0.3,0);e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'A'.charCodeAt(0),callback(e){this.queueSmoothPan_(viewWidth*0.5,0);e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'D'.charCodeAt(0),callback(e){this.queueSmoothPan_(viewWidth*-0.5,0);e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'0'.charCodeAt(0),callback(e){this.setInitialViewport_();e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'f'.charCodeAt(0),callback(e){this.zoomToSelection();e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'m'.charCodeAt(0),callback(e){this.setCurrentSelectionAsInterestRange_();e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'p'.charCodeAt(0),callback(e){this.selectPowerSamplesInCurrentTimeRange_();e.stopPropagation();}});this.addKeyPressHotKey({keyCode:'h'.charCodeAt(0),callback(e){this.toggleHighDetails_();e.stopPropagation();}});},get viewWidth_(){return this.modelTrackContainer_.canvas.clientWidth;},addKeyDownHotKeys_(){const addBinding=function(dict){dict.eventType='keydown';dict.useCapture=false;dict.thisArg=this;const binding=new tr.ui.b.HotKey(dict);this.$.hotkey_controller.addHotKey(binding);}.bind(this);addBinding({keyCode:37,callback(e){const curSel=this.brushingStateController_.selection;const sel=this.viewport.getShiftedSelection(curSel,-1);if(sel){this.brushingStateController.changeSelectionFromTimeline(sel);this.panToSelection();}else{this.queueSmoothPan_(this.viewWidth_*0.3,0);}
-e.preventDefault();e.stopPropagation();}});addBinding({keyCode:39,callback(e){const curSel=this.brushingStateController_.selection;const sel=this.viewport.getShiftedSelection(curSel,1);if(sel){this.brushingStateController.changeSelectionFromTimeline(sel);this.panToSelection();}else{this.queueSmoothPan_(-this.viewWidth_*0.3,0);}
-e.preventDefault();e.stopPropagation();}});},onDblClick_(e){if(this.mouseModeSelector_.mode!==tr.ui.b.MOUSE_SELECTOR_MODE.SELECTION){return;}
-const curSelection=this.brushingStateController_.selection;if(!curSelection.length||!tr.b.getOnlyElement(curSelection).title){return;}
-const selection=new tr.model.EventSet();const filter=new tr.c.ExactTitleFilter(tr.b.getOnlyElement(curSelection).title);this.modelTrack_.addAllEventsMatchingFilterToSelection(filter,selection);this.brushingStateController.changeSelectionFromTimeline(selection);},onMouseWheel_(e){if(!e.altKey)return;const delta=e.wheelDelta/120;const zoomScale=Math.pow(1.5,delta);this.zoomBy_(zoomScale);e.preventDefault();},onMouseDown_(e){if(this.mouseModeSelector_.mode!==tr.ui.b.MOUSE_SELECTOR_MODE.SELECTION){return;}
-if(e.target!==this.rulerTrack_)return;this.dragBeginEvent_=undefined;if(this.xNavStringMarker_){this.model.removeAnnotation(this.xNavStringMarker_);this.xNavStringMarker_=undefined;}
-const dt=this.viewport_.currentDisplayTransform;tr.ui.b.trackMouseMovesUntilMouseUp(function(e){if(e.target===this.rulerTrack_)return;const relativePosition=this.extractRelativeMousePosition_(e);const loc=tr.model.Location.fromViewCoordinates(this.viewport_,relativePosition.x,relativePosition.y);if(!loc)return;if(this.guideLineAnnotation_===undefined){this.guideLineAnnotation_=new tr.model.XMarkerAnnotation(loc.xWorld);this.model.addAnnotation(this.guideLineAnnotation_);}else{this.guideLineAnnotation_.timestamp=loc.xWorld;this.modelTrackContainer_.invalidate();}
-const state=new tr.ui.b.UIState(loc,this.viewport_.currentDisplayTransform.scaleX);this.timelineView_.setFindCtlText(state.toUserFriendlyString(this.viewport_));}.bind(this),undefined,function onKeyUpDuringDrag(){if(this.dragBeginEvent_){this.setDragBoxPosition_(this.dragBoxXStart_,this.dragBoxYStart_,this.dragBoxXEnd_,this.dragBoxYEnd_);}}.bind(this));},queueSmoothPan_(viewDeltaX,deltaY){const deltaX=this.viewport_.currentDisplayTransform.xViewVectorToWorld(viewDeltaX);const animation=new tr.ui.TimelineDisplayTransformPanAnimation(deltaX,deltaY);this.viewport_.queueDisplayTransformAnimation(animation);},zoomBy_(scale,smooth){if(scale<=0){return;}
-smooth=!!smooth;const vp=this.viewport_;const pixelRatio=window.devicePixelRatio||1;const goalFocalPointXView=this.lastMouseViewPos_.x*pixelRatio;const goalFocalPointXWorld=vp.currentDisplayTransform.xViewToWorld(goalFocalPointXView);if(smooth){const animation=new tr.ui.TimelineDisplayTransformZoomToAnimation(goalFocalPointXWorld,goalFocalPointXView,vp.currentDisplayTransform.panY,scale);vp.queueDisplayTransformAnimation(animation);}else{this.displayTransform_.set(vp.currentDisplayTransform);this.displayTransform_.scaleX*=scale;this.displayTransform_.xPanWorldPosToViewPos(goalFocalPointXWorld,goalFocalPointXView,this.viewWidth_);vp.setDisplayTransformImmediately(this.displayTransform_);}},zoomToSelection(){if(!this.brushingStateController.selectionOfInterest.length)return;const bounds=this.brushingStateController.selectionOfInterest.bounds;if(!bounds.range)return;const worldCenter=bounds.center;const viewCenter=this.modelTrackContainer_.canvas.width/2;const adjustedWorldRange=bounds.range*1.25;const newScale=this.modelTrackContainer_.canvas.width/adjustedWorldRange;const zoomInRatio=newScale/this.viewport_.currentDisplayTransform.scaleX;const animation=new tr.ui.TimelineDisplayTransformZoomToAnimation(worldCenter,viewCenter,this.viewport_.currentDisplayTransform.panY,zoomInRatio);this.viewport_.queueDisplayTransformAnimation(animation);},panToSelection(){if(!this.brushingStateController.selectionOfInterest.length)return;const bounds=this.brushingStateController.selectionOfInterest.bounds;const worldCenter=bounds.center;const viewWidth=this.viewWidth_;const dt=this.viewport_.currentDisplayTransform;if(false&&!bounds.range){if(dt.xWorldToView(bounds.center)<0||dt.xWorldToView(bounds.center)>viewWidth){this.displayTransform_.set(dt);this.displayTransform_.xPanWorldPosToViewPos(worldCenter,'center',viewWidth);const deltaX=this.displayTransform_.panX-dt.panX;const animation=new tr.ui.TimelineDisplayTransformPanAnimation(deltaX,0);this.viewport_.queueDisplayTransformAnimation(animation);}
-return;}
-this.displayTransform_.set(dt);this.displayTransform_.xPanWorldBoundsIntoView(bounds.min,bounds.max,viewWidth);const deltaX=this.displayTransform_.panX-dt.panX;const animation=new tr.ui.TimelineDisplayTransformPanAnimation(deltaX,0);this.viewport_.queueDisplayTransformAnimation(animation);},navToPosition(uiState,showNavLine){const location=uiState.location;const scaleX=uiState.scaleX;const track=location.getContainingTrack(this.viewport_);const worldCenter=location.xWorld;const viewCenter=this.modelTrackContainer_.canvas.width/5;const zoomInRatio=scaleX/this.viewport_.currentDisplayTransform.scaleX;track.scrollIntoViewIfNeeded();const animation=new tr.ui.TimelineDisplayTransformZoomToAnimation(worldCenter,viewCenter,this.viewport_.currentDisplayTransform.panY,zoomInRatio);this.viewport_.queueDisplayTransformAnimation(animation);if(!showNavLine)return;if(this.xNavStringMarker_){this.model.removeAnnotation(this.xNavStringMarker_);}
-this.xNavStringMarker_=new tr.model.XMarkerAnnotation(worldCenter);this.model.addAnnotation(this.xNavStringMarker_);},selectPowerSamplesInCurrentTimeRange_(){const selectionBounds=this.brushingStateController_.selection.bounds;if(this.model.device.powerSeries&&!selectionBounds.empty){const events=this.model.device.powerSeries.getSamplesWithinRange(selectionBounds.min,selectionBounds.max);const selection=new tr.model.EventSet(events);this.brushingStateController_.changeSelectionFromTimeline(selection);}},setCurrentSelectionAsInterestRange_(){const selectionBounds=this.brushingStateController_.selection.bounds;if(selectionBounds.empty){this.viewport_.interestRange.reset();return;}
-if(this.viewport_.interestRange.min===selectionBounds.min&&this.viewport_.interestRange.max===selectionBounds.max){this.viewport_.interestRange.reset();}else{this.viewport_.interestRange.set(selectionBounds);}},toggleHighDetails_(){this.viewport_.highDetails=!this.viewport_.highDetails;},hideDragBox_(){this.$.drag_box.style.left='-1000px';this.$.drag_box.style.top='-1000px';this.$.drag_box.style.width=0;this.$.drag_box.style.height=0;},setDragBoxPosition_(xStart,yStart,xEnd,yEnd){const loY=Math.min(yStart,yEnd);const hiY=Math.max(yStart,yEnd);const loX=Math.min(xStart,xEnd);const hiX=Math.max(xStart,xEnd);const modelTrackRect=this.modelTrack_.getBoundingClientRect();const dragRect={left:loX,top:loY,width:hiX-loX,height:hiY-loY};dragRect.right=dragRect.left+dragRect.width;dragRect.bottom=dragRect.top+dragRect.height;const modelTrackContainerRect=this.modelTrackContainer_.getBoundingClientRect();const clipRect={left:modelTrackContainerRect.left,top:modelTrackContainerRect.top,right:modelTrackContainerRect.right,bottom:modelTrackContainerRect.bottom};const headingWidth=window.getComputedStyle(Polymer.dom(this).querySelector('tr-ui-b-heading')).width;const trackTitleWidth=parseInt(headingWidth);clipRect.left=clipRect.left+trackTitleWidth;const intersectRect_=function(r1,r2){if(r2.left>r1.right||r2.right<r1.left||r2.top>r1.bottom||r2.bottom<r1.top){return false;}
-const results={};results.left=Math.max(r1.left,r2.left);results.top=Math.max(r1.top,r2.top);results.right=Math.min(r1.right,r2.right);results.bottom=Math.min(r1.bottom,r2.bottom);results.width=results.right-results.left;results.height=results.bottom-results.top;return results;};const finalDragBox=intersectRect_(clipRect,dragRect);this.$.drag_box.style.left=finalDragBox.left+'px';this.$.drag_box.style.width=finalDragBox.width+'px';this.$.drag_box.style.top=finalDragBox.top+'px';this.$.drag_box.style.height=finalDragBox.height+'px';this.$.drag_box.style.whiteSpace='nowrap';const pixelRatio=window.devicePixelRatio||1;const canv=this.modelTrackContainer_.canvas;const dt=this.viewport_.currentDisplayTransform;const loWX=dt.xViewToWorld((loX-canv.offsetLeft)*pixelRatio);const hiWX=dt.xViewToWorld((hiX-canv.offsetLeft)*pixelRatio);Polymer.dom(this.$.drag_box).textContent=tr.b.Unit.byName.timeDurationInMs.format(hiWX-loWX);const e=new tr.b.Event('selectionChanging');e.loWX=loWX;e.hiWX=hiWX;this.dispatchEvent(e);},onGridToggle_(left){const selection=this.brushingStateController_.selection;const tb=left?selection.bounds.min:selection.bounds.max;if(this.viewport_.gridEnabled&&this.viewport_.gridSide===left&&this.viewport_.gridInitialTimebase===tb){this.viewport_.gridside=undefined;this.viewport_.gridEnabled=false;this.viewport_.gridInitialTimebase=undefined;return;}
-const numIntervalsSinceStart=Math.ceil((tb-this.model_.bounds.min)/this.viewport_.gridStep_);this.viewport_.gridEnabled=true;this.viewport_.gridSide=left;this.viewport_.gridInitialTimebase=tb;this.viewport_.gridTimebase=tb-
-(numIntervalsSinceStart+1)*this.viewport_.gridStep_;},storeLastMousePos_(e){this.lastMouseViewPos_=this.extractRelativeMousePosition_(e);},storeLastTouchPositions_(e){this.lastTouchViewPositions_=this.extractRelativeTouchPositions_(e);},extractRelativeMousePosition_(e){const canv=this.modelTrackContainer_.canvas;return{x:e.clientX-canv.offsetLeft,y:e.clientY-canv.offsetTop};},extractRelativeTouchPositions_(e){const canv=this.modelTrackContainer_.canvas;const touches=[];for(let i=0;i<e.touches.length;++i){touches.push({x:e.touches[i].clientX-canv.offsetLeft,y:e.touches[i].clientY-canv.offsetTop});}
-return touches;},storeInitialMouseDownPos_(e){const position=this.extractRelativeMousePosition_(e);this.mouseViewPosAtMouseDown_.x=position.x;this.mouseViewPosAtMouseDown_.y=position.y;},focusElements_(){this.$.hotkey_controller.childRequestsGeneralFocus(this);},storeInitialInteractionPositionsAndFocus_(e){this.storeInitialMouseDownPos_(e);this.storeLastMousePos_(e);this.focusElements_();},onBeginPanScan_(e){const vp=this.viewport_;this.viewportDisplayTransformAtMouseDown_=vp.currentDisplayTransform.clone();this.isPanningAndScanning_=true;this.storeInitialInteractionPositionsAndFocus_(e);e.preventDefault();},onUpdatePanScan_(e){if(!this.isPanningAndScanning_)return;const viewWidth=this.viewWidth_;const pixelRatio=window.devicePixelRatio||1;const xDeltaView=pixelRatio*(this.lastMouseViewPos_.x-
-this.mouseViewPosAtMouseDown_.x);const yDelta=this.lastMouseViewPos_.y-
-this.mouseViewPosAtMouseDown_.y;this.displayTransform_.set(this.viewportDisplayTransformAtMouseDown_);this.displayTransform_.incrementPanXInViewUnits(xDeltaView);this.displayTransform_.panY-=yDelta;this.viewport_.setDisplayTransformImmediately(this.displayTransform_);e.preventDefault();e.stopPropagation();this.storeLastMousePos_(e);},onEndPanScan_(e){this.isPanningAndScanning_=false;this.storeLastMousePos_(e);if(!e.isClick){e.preventDefault();}},onBeginSelection_(e){const canv=this.modelTrackContainer_.canvas;const rect=this.modelTrack_.getBoundingClientRect();const canvRect=canv.getBoundingClientRect();const inside=rect&&e.clientX>=rect.left&&e.clientX<rect.right&&e.clientY>=rect.top&&e.clientY<rect.bottom&&e.clientX>=canvRect.left&&e.clientX<canvRect.right;if(!inside)return;this.dragBeginEvent_=e;this.storeInitialInteractionPositionsAndFocus_(e);e.preventDefault();},onUpdateSelection_(e){if(!this.dragBeginEvent_)return;this.dragBoxXStart_=this.dragBeginEvent_.clientX;this.dragBoxXEnd_=e.clientX;this.dragBoxYStart_=this.dragBeginEvent_.clientY;this.dragBoxYEnd_=e.clientY;this.setDragBoxPosition_(this.dragBoxXStart_,this.dragBoxYStart_,this.dragBoxXEnd_,this.dragBoxYEnd_);},onEndSelection_(e){e.preventDefault();if(!this.dragBeginEvent_)return;this.hideDragBox_();const eDown=this.dragBeginEvent_;this.dragBeginEvent_=undefined;const loY=Math.min(eDown.clientY,e.clientY);const hiY=Math.max(eDown.clientY,e.clientY);const loX=Math.min(eDown.clientX,e.clientX);const hiX=Math.max(eDown.clientX,e.clientX);const canv=this.modelTrackContainer_.canvas;const worldOffset=canv.getBoundingClientRect().left;const loVX=loX-worldOffset;const hiVX=hiX-worldOffset;const selection=new tr.model.EventSet();if(eDown.appendSelection){const previousSelection=this.brushingStateController_.selection;if(previousSelection!==undefined){selection.addEventSet(previousSelection);}}
-this.modelTrack_.addIntersectingEventsInRangeToSelection(loVX,hiVX,loY,hiY,selection);this.brushingStateController_.changeSelectionFromTimeline(selection);},onBeginZoom_(e){this.isZooming_=true;this.storeInitialInteractionPositionsAndFocus_(e);e.preventDefault();},onUpdateZoom_(e){if(!this.isZooming_)return;const newPosition=this.extractRelativeMousePosition_(e);const zoomScaleValue=1+(this.lastMouseViewPos_.y-
-newPosition.y)*0.01;this.zoomBy_(zoomScaleValue,false);this.storeLastMousePos_(e);},onEndZoom_(e){this.isZooming_=false;if(!e.isClick){e.preventDefault();}},computeTouchCenter_(positions){let xSum=0;let ySum=0;for(let i=0;i<positions.length;++i){xSum+=positions[i].x;ySum+=positions[i].y;}
-return{x:xSum/positions.length,y:ySum/positions.length};},computeTouchSpan_(positions){let xMin=Number.MAX_VALUE;let yMin=Number.MAX_VALUE;let xMax=Number.MIN_VALUE;let yMax=Number.MIN_VALUE;for(let i=0;i<positions.length;++i){xMin=Math.min(xMin,positions[i].x);yMin=Math.min(yMin,positions[i].y);xMax=Math.max(xMax,positions[i].x);yMax=Math.max(yMax,positions[i].y);}
-return Math.sqrt((xMin-xMax)*(xMin-xMax)+
-(yMin-yMax)*(yMin-yMax));},onUpdateTransformForTouch_(e){const newPositions=this.extractRelativeTouchPositions_(e);const currentPositions=this.lastTouchViewPositions_;const newCenter=this.computeTouchCenter_(newPositions);const currentCenter=this.computeTouchCenter_(currentPositions);const newSpan=this.computeTouchSpan_(newPositions);const currentSpan=this.computeTouchSpan_(currentPositions);const vp=this.viewport_;const viewWidth=this.viewWidth_;const pixelRatio=window.devicePixelRatio||1;const xDelta=pixelRatio*(newCenter.x-currentCenter.x);const yDelta=newCenter.y-currentCenter.y;const zoomScaleValue=currentSpan>10?newSpan/currentSpan:1;const viewFocus=pixelRatio*newCenter.x;const worldFocus=vp.currentDisplayTransform.xViewToWorld(viewFocus);this.displayTransform_.set(vp.currentDisplayTransform);this.displayTransform_.scaleX*=zoomScaleValue;this.displayTransform_.xPanWorldPosToViewPos(worldFocus,viewFocus,viewWidth);this.displayTransform_.incrementPanXInViewUnits(xDelta);this.displayTransform_.panY-=yDelta;vp.setDisplayTransformImmediately(this.displayTransform_);this.storeLastTouchPositions_(e);},initHintText_(){this.$.hint_text.style.display='none';this.pendingHintTextClearTimeout_=undefined;},showHintText_(text){if(this.pendingHintTextClearTimeout_){window.clearTimeout(this.pendingHintTextClearTimeout_);this.pendingHintTextClearTimeout_=undefined;}
-this.pendingHintTextClearTimeout_=setTimeout(this.hideHintText_.bind(this),1000);Polymer.dom(this.$.hint_text).textContent=text;this.$.hint_text.style.display='';},hideHintText_(){this.pendingHintTextClearTimeout_=undefined;this.$.hint_text.style.display='none';}});'use strict';Polymer({is:'tr-ui-find-control',filterKeyDown(e){if(e.keyCode===27){const hkc=tr.b.getHotkeyControllerForElement(this);if(hkc){hkc.childRequestsBlur(this);}else{this.blur();}
-e.preventDefault();e.stopPropagation();return;}else if(e.keyCode===13){if(e.shiftKey){this.findPrevious();}else{this.findNext();}}},filterBlur(e){this.updateHitCountEl();},filterFocus(e){this.$.filter.select();},filterMouseUp(e){e.preventDefault();},get controller(){return this.controller_;},set controller(c){this.controller_=c;this.updateHitCountEl();},focus(){this.$.filter.focus();},get hasFocus(){return this===document.activeElement;},filterTextChanged(){Polymer.dom(this.$.hitCount).textContent='';this.$.spinner.style.visibility='visible';this.$.spinner.style.animation='spin 1s linear infinite';this.controller.startFiltering(this.$.filter.value).then(function(){this.$.spinner.style.visibility='hidden';this.$.spinner.style.animation='';this.updateHitCountEl();}.bind(this));},findNext(){if(this.controller){this.controller.findNext();}
-this.updateHitCountEl();},findPrevious(){if(this.controller){this.controller.findPrevious();}
-this.updateHitCountEl();},updateHitCountEl(){if(!this.controller||this.$.filter.value.length===0){Polymer.dom(this.$.hitCount).textContent='';return;}
-const n=this.controller.filterHits.length;const i=n===0?-1:this.controller.currentHitIndex;Polymer.dom(this.$.hitCount).textContent=(i+1)+' of '+n;},setText(string){this.$.filter.value=string;}});'use strict';tr.exportTo('tr.e.tquery',function(){function Context(){this.event=undefined;this.ancestors=[];}
-Context.prototype={push(event){const ctx=new Context();ctx.ancestors=this.ancestors.slice();ctx.ancestors.push(event);return ctx;},pop(event){const ctx=new Context();ctx.event=this.ancestors[this.ancestors.length-1];ctx.ancestors=this.ancestors.slice(0,this.ancestors.length-1);return ctx;}};return{Context,};});'use strict';tr.exportTo('tr.e.tquery',function(){function Filter(){tr.c.ScriptingObject.call(this);}
-Filter.normalizeFilterExpression=function(filterExpression){if(filterExpression instanceof String||typeof(filterExpression)==='string'||filterExpression instanceof RegExp){const filter=new tr.e.tquery.FilterHasTitle(filterExpression);return filter;}
-return filterExpression;};Filter.prototype={__proto__:tr.c.ScriptingObject.prototype,evaluate(context){throw new Error('Not implemented');},matchValue_(value,expected){if(expected instanceof RegExp){return expected.test(value);}else if(expected instanceof Function){return expected(value);}
-return value===expected;}};return{Filter,};});'use strict';tr.exportTo('tr.e.tquery',function(){function FilterAllOf(opt_subExpressions){tr.e.tquery.Filter.call(this);this.subExpressions=opt_subExpressions||[];}
-FilterAllOf.prototype={__proto__:tr.e.tquery.Filter.prototype,set subExpressions(exprs){this.subExpressions_=[];for(let i=0;i<exprs.length;i++){this.subExpressions_.push(tr.e.tquery.Filter.normalizeFilterExpression(exprs[i]));}},get subExpressions(){return this.subExpressions_;},evaluate(context){if(!this.subExpressions.length)return true;for(let i=0;i<this.subExpressions.length;i++){if(!this.subExpressions[i].evaluate(context)){return false;}}
-return true;}};tr.c.ScriptingObjectRegistry.register(function(){const exprs=[];for(let i=0;i<arguments.length;i++){exprs.push(arguments[i]);}
-return new FilterAllOf(exprs);},{name:'allOf'});return{FilterAllOf,};});'use strict';tr.exportTo('tr.e.tquery',function(){function FilterNot(subExpression){tr.e.tquery.Filter.call(this);this.subExpression=subExpression;}
-FilterNot.prototype={__proto__:tr.e.tquery.Filter.prototype,set subExpression(expr){this.subExpression_=tr.e.tquery.Filter.normalizeFilterExpression(expr);},get subExpression(){return this.subExpression_;},evaluate(context){return!this.subExpression.evaluate(context);}};tr.c.ScriptingObjectRegistry.register(function(){const exprs=Array.prototype.slice.call(arguments);if(exprs.length!==1){throw new Error('not() must have exactly one subexpression');}
-return new FilterNot(exprs[0]);},{name:'not'});return{FilterNot,};});'use strict';tr.exportTo('tr.e.tquery',function(){function FilterAnyOf(opt_subExpressions){tr.e.tquery.Filter.call(this);this.subExpressions=opt_subExpressions||[];}
-FilterAnyOf.prototype={__proto__:tr.e.tquery.Filter.prototype,set subExpressions(exprs){this.subExpressions_=[];for(let i=0;i<exprs.length;i++){this.subExpressions_.push(tr.e.tquery.Filter.normalizeFilterExpression(exprs[i]));}},get subExpressions(){return this.subExpressions_;},evaluate(context){if(!this.subExpressions.length)return true;for(let i=0;i<this.subExpressions.length;i++){if(this.subExpressions[i].evaluate(context))return true;}
-return false;}};tr.c.ScriptingObjectRegistry.register(function(){const exprs=Array.prototype.slice.call(arguments);return new FilterAnyOf(exprs);},{name:'anyOf'});tr.c.ScriptingObjectRegistry.register(function(){const exprs=Array.prototype.slice.call(arguments);return new tr.e.tquery.FilterNot(new FilterAnyOf(exprs));},{name:'noneOf'});return{FilterAnyOf,};});'use strict';tr.exportTo('tr.e.tquery',function(){function FilterHasAncestor(opt_subExpression){this.subExpression=opt_subExpression;}
-FilterHasAncestor.prototype={__proto__:tr.e.tquery.Filter.prototype,set subExpression(expr){this.subExpression_=tr.e.tquery.Filter.normalizeFilterExpression(expr);},get subExpression(){return this.subExpression_;},evaluate(context){if(!this.subExpression){return context.ancestors.length>0;}
-while(context.ancestors.length){context=context.pop();if(this.subExpression.evaluate(context))return true;}
-return false;}};tr.c.ScriptingObjectRegistry.register(function(subExpression){return new FilterHasAncestor(subExpression);},{name:'hasAncestor'});return{FilterHasAncestor,};});'use strict';tr.exportTo('tr.e.tquery',function(){function FilterHasDuration(minValueOrExpected,opt_maxValue){if(minValueOrExpected!==undefined&&opt_maxValue!==undefined){this.minValue=minValueOrExpected;this.maxValue=opt_maxValue;}else{this.expected=minValueOrExpected;}}
-FilterHasDuration.prototype={__proto__:tr.e.tquery.Filter.prototype,evaluate(context){if(context.event.duration===undefined)return false;if(this.minValue!==undefined&&this.maxValue!==undefined){return context.event.duration>=this.minValue&&context.event.duration<=this.maxValue;}
-return this.matchValue_(context.event.duration,this.expected);}};tr.c.ScriptingObjectRegistry.register(function(minValueOrExpected,opt_maxValue){return new FilterHasDuration(minValueOrExpected,opt_maxValue);},{name:'hasDuration'});return{FilterHasDuration,};});'use strict';tr.exportTo('tr.e.tquery',function(){function FilterHasTitle(expected){tr.e.tquery.Filter.call(this);this.expected=expected;}
-FilterHasTitle.prototype={__proto__:tr.e.tquery.Filter.prototype,evaluate(context){return this.matchValue_(context.event.title,this.expected);}};tr.c.ScriptingObjectRegistry.register(function(expected){const filter=new tr.e.tquery.FilterHasTitle(expected);return filter;},{name:'hasTitle'});return{FilterHasTitle,};});'use strict';tr.exportTo('tr.e.tquery',function(){function FilterIsTopLevel(opt_subExpression){this.subExpression=opt_subExpression;}
-FilterIsTopLevel.prototype={__proto__:tr.e.tquery.Filter.prototype,set subExpression(expr){this.subExpression_=tr.e.tquery.Filter.normalizeFilterExpression(expr);},get subExpression(){return this.subExpression_;},evaluate(context){if(context.ancestors.length>0)return false;if(!this.subExpression)return true;return this.subExpression.evaluate(context);}};tr.c.ScriptingObjectRegistry.register(function(subExpression){return new FilterIsTopLevel(subExpression);},{name:'isTopLevel'});return{FilterIsTopLevel,};});'use strict';tr.exportTo('tr.e.tquery',function(){function addEventTreeToSelection(selection,event){selection.push(event);if(!event.subSlices)return;event.subSlices.forEach(addEventTreeToSelection.bind(undefined,selection));}
-function TQuery(model){tr.c.ScriptingObject.call(this);this.model_=model;this.parent_=undefined;this.filterExpression_=undefined;this.selection_=undefined;}
-TQuery.prototype={__proto__:tr.c.ScriptingObject.prototype,onModelChanged(model){this.model_=model;this.selection_=undefined;},get brushingStateController(){return this.brushingStateController_;},filter(filterExpression){const result=new TQuery(this.model_);result.parent_=this;result.filterExpression_=tr.e.tquery.Filter.normalizeFilterExpression(filterExpression);return result;},createFilterTaskGraph_(){const nodes=[this];while(nodes[nodes.length-1].parent_){nodes.push(nodes[nodes.length-1].parent_);}
-const rootTask=new tr.b.Task();let lastTask=rootTask;let node;for(let i=nodes.length-1;i>=0;i--){node=nodes[i];if(node.selection_!==undefined)continue;node.selection_=new tr.model.EventSet();if(node.parent_===undefined){lastTask=lastTask.after(this.selectEverythingAsTask_(node.selection_));}else{const prevNode=nodes[i+1];lastTask=this.createFilterTaskForNode_(lastTask,node,prevNode);}}
-return{rootTask,lastTask,lastNode:node};},createFilterTaskForNode_(lastTask,node,prevNode){return lastTask.after(function(){node.evaluateFilterExpression_(prevNode.selection_,node.selection_);},this);},evaluateFilterExpression_(inputSelection,outputSelection){const seenEvents={};inputSelection.forEach(function(event){const context=new tr.e.tquery.Context();context.event=event;this.evaluateFilterExpressionForEvent_(context,inputSelection,outputSelection,seenEvents);}.bind(this));},evaluateFilterExpressionForEvent_(context,inputSelection,outputSelection,seenEvents){const event=context.event;if(inputSelection.contains(event)&&!seenEvents[event.guid]){seenEvents[event.guid]=true;if(!this.filterExpression_||this.filterExpression_.evaluate(context)){outputSelection.push(event);}}
-if(!event.subSlices)return;context=context.push(event);for(let i=0;i<event.subSlices.length;i++){context.event=event.subSlices[i];this.evaluateFilterExpressionForEvent_(context,inputSelection,outputSelection,seenEvents);}},selectEverythingAsTask_(selection){const filterTask=new tr.b.Task();for(const container of this.model_.getDescendantEventContainers()){filterTask.subTask(()=>{for(const event of container.childEvents()){addEventTreeToSelection(selection,event);}},this);}
-return filterTask;},ready(){return new Promise(function(resolve,reject){const graph=this.createFilterTaskGraph_();graph.lastTask=graph.lastTask.after(function(){resolve(this.selection_);},this);tr.b.Task.RunWhenIdle(graph.rootTask);}.bind(this));},get selection(){if(this.selection_===undefined){const graph=this.createFilterTaskGraph_();tr.b.Task.RunSynchronously(graph.rootTask);}
-return this.selection_;}};tr.c.ScriptingObjectRegistry.register(new TQuery(),{name:'$t'});return{TQuery,};});'use strict';Polymer({is:'tr-ui-scripting-control',isEnterKey_(event){return event.keyCode!==229&&(event.key==='Enter'||event.keyIdentifier==='Enter');},setFocus_(focused){const promptEl=this.$.prompt;if(focused){promptEl.focus();Polymer.dom(this.$.root).classList.add('focused');if(promptEl.value.length>0){const sel=window.getSelection();sel.collapse(Polymer.dom(promptEl).firstChild,promptEl.value.length);}}else{promptEl.blur();Polymer.dom(this.$.root).classList.remove('focused');const parent=promptEl.parentElement;const nextEl=Polymer.dom(promptEl).nextSibling;promptEl.remove();Polymer.dom(parent).insertBefore(promptEl,nextEl);}},onConsoleFocus(e){e.stopPropagation();this.setFocus_(true);},onConsoleBlur(e){e.stopPropagation();this.setFocus_(false);},promptKeyDown(e){e.stopPropagation();if(!this.isEnterKey_(e))return;e.preventDefault();const promptEl=this.$.prompt;const command=promptEl.value;if(command.length===0)return;promptEl.value='';this.addLine_(String.fromCharCode(187)+' '+command);let result;try{result=this.controller_.executeCommand(command);}catch(e){result=e.stack||e.stackTrace;}
-if(result instanceof tr.e.tquery.TQuery){result.ready().then(function(selection){this.addLine_(selection.length+' matches');this.controller_.brushingStateController.showScriptControlSelection(selection);}.bind(this));}else{this.addLine_(result);}
-promptEl.scrollIntoView();},addLine_(line){const historyEl=this.$.history;if(historyEl.innerText.length!==0){historyEl.innerText+='\n';}
-historyEl.innerText+=line;},promptKeyPress(e){e.stopPropagation();},toggleVisibility(){const root=this.$.root;if(!this.visible){Polymer.dom(root).classList.remove('hidden');this.setFocus_(true);}else{Polymer.dom(root).classList.add('hidden');this.setFocus_(false);}},get hasFocus(){return this===document.activeElement;},get visible(){const root=this.$.root;return!Polymer.dom(root).classList.contains('hidden');},get controller(){return this.controller_;},set controller(c){this.controller_=c;}});'use strict';Polymer({is:'tr-ui-side-panel-container',ready(){this.activePanelContainer_=this.$.active_panel_container;this.tabStrip_=this.$.tab_strip;this.dragHandle_=this.$.side_panel_drag_handle;this.dragHandle_.horizontal=false;this.dragHandle_.target=this.activePanelContainer_;this.rangeOfInterest_=new tr.b.math.Range();this.brushingStateController_=undefined;this.onSelectionChanged_=this.onSelectionChanged_.bind(this);this.onModelChanged_=this.onModelChanged_.bind(this);},get brushingStateController(){return this.brushingStateController_;},set brushingStateController(brushingStateController){if(this.brushingStateController){this.brushingStateController_.removeEventListener('change',this.onSelectionChanged_);this.brushingStateController_.removeEventListener('model-changed',this.onModelChanged_);}
-this.brushingStateController_=brushingStateController;if(this.brushingStateController){this.brushingStateController_.addEventListener('change',this.onSelectionChanged_);this.brushingStateController_.addEventListener('model-changed',this.onModelChanged_);if(this.model){this.onModelChanged_();}}},onSelectionChanged_(){if(this.activePanel){this.activePanel.selection=this.selection;}},get model(){return this.brushingStateController_.model;},onModelChanged_(){this.activePanelType_=undefined;this.updateContents_();},get expanded(){this.hasAttribute('expanded');},get activePanel(){return this.activePanelContainer_.children[0];},get activePanelType(){return this.activePanelType_;},set activePanelType(panelType){if(this.model===undefined){throw new Error('Cannot activate panel without a model');}
-let panel=undefined;if(panelType){panel=document.createElement(panelType);}
-if(panel!==undefined&&!panel.supportsModel(this.model)){throw new Error('Cannot activate panel: does not support this model');}
-if(this.activePanelType){Polymer.dom(this.getLabelElementForPanelType_(this.activePanelType)).removeAttribute('selected');}
-if(this.activePanelType){this.getLabelElementForPanelType_(this.activePanelType).removeAttribute('selected');}
-if(this.activePanel){this.activePanelContainer_.removeChild(this.activePanel);}
-if(panelType===undefined){Polymer.dom(this).removeAttribute('expanded');this.activePanelType_=undefined;return;}
-Polymer.dom(this.getLabelElementForPanelType_(panelType)).setAttribute('selected',true);Polymer.dom(this).setAttribute('expanded',true);Polymer.dom(this.activePanelContainer_).appendChild(panel);panel.rangeOfInterest=this.rangeOfInterest_;panel.selection=this.selection_;panel.model=this.model;this.activePanelType_=panelType;},getPanelTypeForConstructor_(constructor){for(let i=0;i<this.tabStrip_.children.length;i++){if(this.tabStrip_.children[i].panelType.constructor===constructor){return this.tabStrip_.children[i].panelType;}}},getLabelElementForPanelType_(panelType){for(let i=0;i<this.tabStrip_.children.length;i++){if(this.tabStrip_.children[i].panelType===panelType){return this.tabStrip_.children[i];}}
-return undefined;},updateContents_(){const previouslyActivePanelType=this.activePanelType;Polymer.dom(this.tabStrip_).textContent='';const supportedPanelTypes=[];const panelTypeInfos=tr.ui.side_panel.SidePanelRegistry.getAllRegisteredTypeInfos();const unsupportedLabelEls=[];for(const panelTypeInfo of panelTypeInfos){const labelEl=document.createElement('tab-strip-label');const panel=panelTypeInfo.constructor();const panelType=panel.tagName;Polymer.dom(labelEl).textContent=panel.textLabel;labelEl.panelType=panelType;const supported=panel.supportsModel(this.model);if(this.model&&supported.supported){supportedPanelTypes.push(panelType);Polymer.dom(labelEl).setAttribute('enabled',true);labelEl.addEventListener('click',function(panelType){this.activePanelType=this.activePanelType===panelType?undefined:panelType;}.bind(this,panelType));Polymer.dom(this.tabStrip_).appendChild(labelEl);}else{if(this.activePanel){this.activePanelContainer_.removeChild(this.activePanel);}
-this.removeAttribute('expanded');unsupportedLabelEls.push(labelEl);}}
-for(const labelEl of unsupportedLabelEls){Polymer.dom(this.tabStrip_).appendChild(labelEl);}
-if(previouslyActivePanelType&&supportedPanelTypes.includes(previouslyActivePanelType)){this.activePanelType=previouslyActivePanelType;Polymer.dom(this).setAttribute('expanded',true);}else{if(this.activePanel){Polymer.dom(this.activePanelContainer_).removeChild(this.activePanel);}
-Polymer.dom(this).removeAttribute('expanded');}},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(range){if(range===undefined){throw new Error('Must not be undefined');}
-this.rangeOfInterest_=range;if(this.activePanel){this.activePanel.rangeOfInterest=range;}}});'use strict';Polymer({is:'tr-ui-timeline-view-help-overlay',ready(){const mod=tr.isMac?'cmd ':'ctrl';const spans=Polymer.dom(this.root).querySelectorAll('span.mod');for(let i=0;i<spans.length;i++){Polymer.dom(spans[i]).textContent=mod;}}});'use strict';Polymer({is:'tr-ui-timeline-view-metadata-overlay',created(){this.metadata_=undefined;},ready(){this.$.table.tableColumns=[{title:'name',value:d=>d.name,},{title:'value',value:d=>{const gov=document.createElement('tr-ui-a-generic-object-view');gov.object=d.value;return gov;},}];},get metadata(){return this.metadata_;},set metadata(metadata){this.metadata_=metadata;this.$.table.tableRows=this.metadata_;this.$.table.rebuild();}});'use strict';Polymer({is:'tr-v-ui-preferred-display-unit',ready(){this.preferredTimeDisplayMode_=undefined;},attached(){tr.b.Unit.didPreferredTimeDisplayUnitChange();},detached(){tr.b.Unit.didPreferredTimeDisplayUnitChange();},get preferredTimeDisplayMode(){return this.preferredTimeDisplayMode_;},set preferredTimeDisplayMode(v){if(this.preferredTimeDisplayMode_===v)return;this.preferredTimeDisplayMode_=v;tr.b.Unit.didPreferredTimeDisplayUnitChange();}});'use strict';Polymer({is:'tr-ui-timeline-view',created(){this.trackViewContainer_=undefined;this.queuedModel_=undefined;this.builtPromise_=undefined;this.doneBuilding_=undefined;},attached(){this.async(function(){this.trackViewContainer_=Polymer.dom(this).querySelector('#track_view_container');if(!this.trackViewContainer_){throw new Error('missing trackviewContainer');}
-if(this.queuedModel_)this.updateContents_();});},ready(){this.tabIndex=0;this.titleEl_=this.$.title;this.leftControlsEl_=this.$.left_controls;this.rightControlsEl_=this.$.right_controls;this.collapsingControlsEl_=this.$.collapsing_controls;this.sidePanelContainer_=this.$.side_panel_container;this.brushingStateController_=new tr.c.BrushingStateController(this);this.findCtl_=this.$.view_find_control;this.findCtl_.controller=new tr.ui.FindController(this.brushingStateController_);this.scriptingCtl_=document.createElement('tr-ui-scripting-control');this.scriptingCtl_.controller=new tr.c.ScriptingController(this.brushingStateController_);this.sidePanelContainer_.brushingStateController=this.brushingStateController_;if(window.tr.metrics&&window.tr.metrics.sh&&window.tr.metrics.sh.SystemHealthMetric){this.railScoreSpan_=document.createElement('tr-metrics-ui-sh-system-health-span');Polymer.dom(this.rightControls).appendChild(this.railScoreSpan_);}else{this.railScoreSpan_=undefined;}
-this.optionsDropdown_=this.$.view_options_dropdown;Polymer.dom(this.optionsDropdown_.iconElement).textContent='View Options';this.showFlowEvents_=false;Polymer.dom(this.optionsDropdown_).appendChild(tr.ui.b.createCheckBox(this,'showFlowEvents','tr.ui.TimelineView.showFlowEvents',false,'Flow events'));this.highlightVSync_=false;this.highlightVSyncCheckbox_=tr.ui.b.createCheckBox(this,'highlightVSync','tr.ui.TimelineView.highlightVSync',false,'Highlight VSync');Polymer.dom(this.optionsDropdown_).appendChild(this.highlightVSyncCheckbox_);this.initMetadataButton_();this.initConsoleButton_();this.initHelpButton_();Polymer.dom(this.collapsingControls).appendChild(this.scriptingCtl_);this.dragEl_=this.$.drag_handle;this.analysisEl_=this.$.analysis;this.analysisEl_.brushingStateController=this.brushingStateController_;this.addEventListener('requestSelectionChange',function(e){const sc=this.brushingStateController_;sc.changeSelectionFromRequestSelectionChangeEvent(e.selection);}.bind(this));this.onViewportChanged_=this.onViewportChanged_.bind(this);this.bindKeyListeners_();this.dragEl_.target=this.analysisEl_;},get globalMode(){return this.hotkeyController.globalMode;},set globalMode(globalMode){globalMode=!!globalMode;this.brushingStateController_.historyEnabled=globalMode;this.hotkeyController.globalMode=globalMode;},get hotkeyController(){return this.$.hkc;},updateDocumentFavicon(){let hue;if(!this.model){hue='blue';}else{hue=this.model.faviconHue;}
-let faviconData=tr.ui.b.FaviconsByHue[hue];if(faviconData===undefined){faviconData=tr.ui.b.FaviconsByHue.blue;}
-let link=Polymer.dom(document.head).querySelector('link[rel="shortcut icon"]');if(!link){link=document.createElement('link');link.rel='shortcut icon';Polymer.dom(document.head).appendChild(link);}
-link.href=faviconData;},get showFlowEvents(){return this.showFlowEvents_;},set showFlowEvents(showFlowEvents){this.showFlowEvents_=showFlowEvents;if(!this.trackView_)return;this.trackView_.viewport.showFlowEvents=showFlowEvents;},get highlightVSync(){return this.highlightVSync_;},set highlightVSync(highlightVSync){this.highlightVSync_=highlightVSync;if(!this.trackView_)return;this.trackView_.viewport.highlightVSync=highlightVSync;},initHelpButton_(){const helpButtonEl=this.$.view_help_button;const dlg=new tr.ui.b.Overlay();dlg.title='Chrome Tracing Help';dlg.visible=false;dlg.appendChild(document.createElement('tr-ui-timeline-view-help-overlay'));function onClick(e){dlg.visible=!dlg.visible;e.stopPropagation();}
-helpButtonEl.addEventListener('click',onClick.bind(this));},initConsoleButton_(){const toggleEl=this.$.view_console_button;function onClick(e){this.scriptingCtl_.toggleVisibility();e.stopPropagation();return false;}
-toggleEl.addEventListener('click',onClick.bind(this));},initMetadataButton_(){const showEl=this.$.view_metadata_button;function onClick(e){const dlg=new tr.ui.b.Overlay();dlg.title='Metadata for trace';const metadataOverlay=document.createElement('tr-ui-timeline-view-metadata-overlay');metadataOverlay.metadata=this.model.metadata;Polymer.dom(dlg).appendChild(metadataOverlay);dlg.visible=true;e.stopPropagation();return false;}
-showEl.addEventListener('click',onClick.bind(this));this.updateMetadataButtonVisibility_();},updateMetadataButtonVisibility_(){const showEl=this.$.view_metadata_button;showEl.style.display=(this.model&&this.model.metadata.length)?'':'none';},get leftControls(){return this.leftControlsEl_;},get rightControls(){return this.rightControlsEl_;},get collapsingControls(){return this.collapsingControlsEl_;},get viewTitle(){return Polymer.dom(this.titleEl_).textContent.substring(Polymer.dom(this.titleEl_).textContent.length-2);},set viewTitle(text){if(text===undefined){Polymer.dom(this.titleEl_).textContent='';this.titleEl_.hidden=true;return;}
-this.titleEl_.hidden=false;Polymer.dom(this.titleEl_).textContent=text;},get model(){if(this.trackView_){return this.trackView_.model;}
-return undefined;},set model(model){this.build(model);},async build(model){this.queuedModel_=model;this.builtPromise_=new Promise((resolve,reject)=>{this.doneBuilding_=resolve;});if(this.trackViewContainer_)await this.updateContents_();},get builtPromise(){return this.builtPromise_;},async updateContents_(){if(this.trackViewContainer_===undefined){throw new Error('timeline-view.updateContents_ requires trackViewContainer_');}
-const model=this.queuedModel_;this.queuedModel_=undefined;const modelInstanceChanged=model!==this.model;const modelValid=model&&!model.bounds.isEmpty;const importWarningsEl=Polymer.dom(this.root).querySelector('#import-warnings');Polymer.dom(importWarningsEl).textContent='';if(modelInstanceChanged){if(this.railScoreSpan_){this.railScoreSpan_.model=undefined;}
-Polymer.dom(this.trackViewContainer_).textContent='';if(this.trackView_){this.trackView_.viewport.removeEventListener('change',this.onViewportChanged_);this.trackView_.brushingStateController=undefined;this.trackView_.detach();this.trackView_=undefined;}
-this.brushingStateController_.modelWillChange();}
-if(modelValid&&!this.trackView_){this.trackView_=document.createElement('tr-ui-timeline-track-view');this.trackView_.timelineView=this;this.trackView.brushingStateController=this.brushingStateController_;Polymer.dom(this.trackViewContainer_).appendChild(this.trackView_);this.trackView_.viewport.addEventListener('change',this.onViewportChanged_);}
-if(modelValid){this.trackView_.model=model;this.trackView_.viewport.showFlowEvents=this.showFlowEvents;this.trackView_.viewport.highlightVSync=this.highlightVSync;if(this.railScoreSpan_){this.railScoreSpan_.model=model;}
-this.$.display_unit.preferredTimeDisplayMode=model.intrinsicTimeUnit;}
-if(model){for(const warning of model.importWarningsThatShouldBeShownToUser){importWarningsEl.addMessage(`Import Warning: ${warning.type}: ${warning.message}`,[{buttonText:'Dismiss',onClick(event,infobar){infobar.visible=false;}}]);}}
-if(modelInstanceChanged){this.updateMetadataButtonVisibility_();this.brushingStateController_.modelDidChange();this.onViewportChanged_();}
-this.doneBuilding_();},get brushingStateController(){return this.brushingStateController_;},get trackView(){return this.trackView_;},get settings(){if(!this.settings_){this.settings_=new tr.b.Settings();}
-return this.settings_;},set focusElement(value){throw new Error('This is deprecated. Please set globalMode to true.');},bindKeyListeners_(){const hkc=this.hotkeyController;hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',keyCode:'`'.charCodeAt(0),useCapture:true,thisArg:this,callback(e){this.scriptingCtl_.toggleVisibility();if(!this.scriptingCtl_.hasFocus){this.focus();}
-e.stopPropagation();}}));hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',keyCode:'/'.charCodeAt(0),useCapture:true,thisArg:this,callback(e){if(this.scriptingCtl_.hasFocus)return;if(this.findCtl_.hasFocus){this.focus();}else{this.findCtl_.focus();}
-e.preventDefault();e.stopPropagation();}}));hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',keyCode:'?'.charCodeAt(0),useCapture:false,thisArg:this,callback(e){this.$.view_help_button.click();e.stopPropagation();}}));hkc.addHotKey(new tr.ui.b.HotKey({eventType:'keypress',keyCode:'v'.charCodeAt(0),useCapture:false,thisArg:this,callback(e){this.toggleHighlightVSync_();e.stopPropagation();}}));},onViewportChanged_(e){const spc=this.sidePanelContainer_;if(!this.trackView_){spc.rangeOfInterest.reset();return;}
-const vr=this.trackView_.viewport.interestRange.asRangeObject();if(!spc.rangeOfInterest.equals(vr)){spc.rangeOfInterest=vr;}
-if(this.railScoreSpan_&&this.model){this.railScoreSpan_.model=this.model;}},toggleHighlightVSync_(){this.highlightVSyncCheckbox_.checked=!this.highlightVSyncCheckbox_.checked;},setFindCtlText(string){this.findCtl_.setText(string);}});'use strict';tr.exportTo('tr.ui.b',function(){function Row(title,data,groupingKeyFuncs,rowStatsConstructor){this.title=title;this.data_=data;if(groupingKeyFuncs===undefined){groupingKeyFuncs=[];}
-this.groupingKeyFuncs_=groupingKeyFuncs;this.rowStatsConstructor_=rowStatsConstructor;this.subRowsBuilt_=false;this.subRows_=undefined;this.rowStats_=undefined;}
-Row.prototype={getCurrentGroupingKeyFunc_(){if(this.groupingKeyFuncs_.length===0)return undefined;return this.groupingKeyFuncs_[0];},get data(){return this.data_;},get rowStats(){if(this.rowStats_===undefined){this.rowStats_=new this.rowStatsConstructor_(this);}
-return this.rowStats_;},rebuildSubRowsIfNeeded_(){if(this.subRowsBuilt_)return;this.subRowsBuilt_=true;const groupingKeyFunc=this.getCurrentGroupingKeyFunc_();if(groupingKeyFunc===undefined){this.subRows_=undefined;return;}
-const dataByKey={};let hasValues=false;this.data_.forEach(function(datum){const key=groupingKeyFunc(datum);hasValues=hasValues||(key!==undefined);if(dataByKey[key]===undefined){dataByKey[key]=[];}
-dataByKey[key].push(datum);});if(!hasValues){this.subRows_=undefined;return;}
-this.subRows_=[];for(const key in dataByKey){const row=new Row(key,dataByKey[key],this.groupingKeyFuncs_.slice(1),this.rowStatsConstructor_);this.subRows_.push(row);}},get isExpanded(){return(this.subRows&&(this.subRows.length>0)&&(this.subRows.length<5));},get subRows(){this.rebuildSubRowsIfNeeded_();return this.subRows_;}};Polymer({is:'tr-ui-b-grouping-table',created(){this.dataToGroup_=undefined;this.groupBy_=undefined;this.rowStatsConstructor_=undefined;},get tableColumns(){return this.$.table.tableColumns;},set tableColumns(tableColumns){this.$.table.tableColumns=tableColumns;},get tableRows(){return this.$.table.tableRows;},get sortColumnIndex(){return this.$.table.sortColumnIndex;},set sortColumnIndex(sortColumnIndex){this.$.table.sortColumnIndex=sortColumnIndex;},get sortDescending(){return this.$.table.sortDescending;},set sortDescending(sortDescending){this.$.table.sortDescending=sortDescending;},get selectionMode(){return this.$.table.selectionMode;},set selectionMode(selectionMode){this.$.table.selectionMode=selectionMode;},get rowHighlightStyle(){return this.$.table.rowHighlightStyle;},set rowHighlightStyle(rowHighlightStyle){this.$.table.rowHighlightStyle=rowHighlightStyle;},get cellHighlightStyle(){return this.$.table.cellHighlightStyle;},set cellHighlightStyle(cellHighlightStyle){this.$.table.cellHighlightStyle=cellHighlightStyle;},get selectedColumnIndex(){return this.$.table.selectedColumnIndex;},set selectedColumnIndex(selectedColumnIndex){this.$.table.selectedColumnIndex=selectedColumnIndex;},get selectedTableRow(){return this.$.table.selectedTableRow;},set selectedTableRow(selectedTableRow){this.$.table.selectedTableRow=selectedTableRow;},get groupBy(){return this.groupBy_;},set groupBy(groupBy){this.groupBy_=groupBy;this.updateContents_();},get dataToGroup(){return this.dataToGroup_;},set dataToGroup(dataToGroup){this.dataToGroup_=dataToGroup;this.updateContents_();},get rowStatsConstructor(){return this.rowStatsConstructor_;},set rowStatsConstructor(rowStatsConstructor){this.rowStatsConstructor_=rowStatsConstructor;this.updateContents_();},rebuild(){this.$.table.rebuild();},updateContents_(){const groupBy=this.groupBy_||[];const dataToGroup=this.dataToGroup_||[];const rowStatsConstructor=this.rowStatsConstructor_||function(){};const superRow=new Row('',dataToGroup,groupBy,rowStatsConstructor);this.$.table.tableRows=superRow.subRows||[];}});return{};});'use strict';tr.exportTo('tr.ui.b',function(){const THIS_DOC=document.currentScript.ownerDocument;Polymer({is:'tr-ui-b-grouping-table-groupby-picker-group',created(){this.picker_=undefined;this.group_=undefined;},get picker(){return this.picker_;},set picker(picker){this.picker_=picker;},get group(){return this.group_;},set group(g){this.group_=g;this.$.label.textContent=g.label;},get enabled(){return this.$.enabled.checked;},set enabled(enabled){this.$.enabled.checked=enabled;if(!this.enabled){this.$.left.style.display='none';this.$.right.style.display='none';}},set isFirst(isFirst){this.$.left.style.display=(!this.enabled||isFirst)?'none':'inline';},set isLast(isLast){this.$.right.style.display=(!this.enabled||isLast)?'none':'inline';},moveLeft_(){this.picker.moveLeft_(this);},moveRight_(){this.picker.moveRight_(this);},onEnableChanged_(){if(!this.enabled){this.$.left.style.display='none';this.$.right.style.display='none';}
-this.picker.onEnableChanged_(this);}});Polymer({is:'tr-ui-b-grouping-table-groupby-picker',created(){this.settingsKey_=undefined;},get settingsKey(){return this.settingsKey_;},set settingsKey(settingsKey){this.settingsKey_=settingsKey;if(this.$.container.children.length){this.restoreSetting_();}},restoreSetting_(){if(this.settingsKey_===undefined)return;this.currentGroupKeys=tr.b.Settings.get(this.settingsKey_,this.currentGroupKeys);},get possibleGroups(){return[...this.$.container.children].map(groupEl=>groupEl.group);},set possibleGroups(possibleGroups){Polymer.dom(this.$.container).textContent='';for(let i=0;i<possibleGroups.length;++i){const groupEl=document.createElement('tr-ui-b-grouping-table-groupby-picker-group');groupEl.picker=this;groupEl.group=possibleGroups[i];Polymer.dom(this.$.container).appendChild(groupEl);}
-this.restoreSetting_();this.updateFirstLast_();},updateFirstLast_(){const groupEls=this.$.container.children;const enabledGroupEls=[...groupEls].filter(el=>el.enabled);for(let i=0;i<enabledGroupEls.length;++i){enabledGroupEls[i].isFirst=i===0;enabledGroupEls[i].isLast=i===enabledGroupEls.length-1;}},get currentGroupKeys(){return this.currentGroups.map(group=>group.key);},get currentGroups(){const groups=[];for(const groupEl of this.$.container.children){if(groupEl.enabled){groups.push(groupEl.group);}}
-return groups;},set currentGroupKeys(newKeys){if(!tr.b.compareArrays(this.currentGroupKeys,newKeys,(x,y)=>x.localeCompare(y))){return;}
-const possibleGroups=new Map();for(const group of this.possibleGroups){possibleGroups.set(group.key,group);}
-const groupEls=this.$.container.children;let i=0;for(i=0;i<newKeys.length;++i){const group=possibleGroups.get(newKeys[i]);if(group===undefined){newKeys.splice(i,1);--i;continue;}
-groupEls[i].group=group;groupEls[i].enabled=true;possibleGroups.delete(newKeys[i]);}
-for(const group of possibleGroups.values()){groupEls[i].group=group;groupEls[i].enabled=false;++i;}
-this.updateFirstLast_();this.onCurrentGroupsChanged_();},moveLeft_(groupEl){const reference=groupEl.previousSibling;Polymer.dom(this.$.container).removeChild(groupEl);Polymer.dom(this.$.container).insertBefore(groupEl,reference);this.updateFirstLast_();if(groupEl.enabled){this.onCurrentGroupsChanged_();}},moveRight_(groupEl){const reference=groupEl.nextSibling.nextSibling;Polymer.dom(this.$.container).removeChild(groupEl);if(reference){Polymer.dom(this.$.container).insertBefore(groupEl,reference);}else{Polymer.dom(this.$.container).appendChild(groupEl);}
-this.updateFirstLast_();if(groupEl.enabled){this.onCurrentGroupsChanged_();}},onCurrentGroupsChanged_(){this.dispatchEvent(new tr.b.Event('current-groups-changed'));tr.b.Settings.set(this.settingsKey_,this.currentGroupKeys);},onEnableChanged_(groupEl){this.updateFirstLast_();this.onCurrentGroupsChanged_();}});return{};});'use strict';(function(){Polymer({is:'tr-ui-sp-file-size-stats-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.model_=undefined;this.selection_=new tr.model.EventSet();this.$.picker.settingsKey='tr-ui-sp-file-size-stats-side-panel-picker';this.$.picker.possibleGroups=[{key:'phase',label:'Event Type',dataFn(eventStat){return eventStat.phase;}},{key:'category',label:'Category',dataFn(eventStat){return eventStat.category;}},{key:'title',label:'Title',dataFn(eventStat){return eventStat.title;}}];if(this.$.picker.currentGroupKeys.length===0){this.$.picker.currentGroupKeys=['phase','title'];}
-this.$.picker.addEventListener('current-groups-changed',this.updateContents_.bind(this));},get textLabel(){return'File Size Stats';},supportsModel(m){if(!m){return{supported:false,reason:'No stats were collected for this file.'};}
-if(m.stats.allTraceEventStats.length===0){return{supported:false,reason:'No stats were collected for this file.'};}
-return{supported:true};},get model(){return this.model_;},set model(model){this.model_=model;this.updateContents_();},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(rangeOfInterest){this.rangeOfInterest_=rangeOfInterest;},get selection(){return this.selection_;},set selection(selection){this.selection_=selection;},createColumns_(stats){const columns=[{title:'Title',value(row){const titleEl=document.createElement('span');Polymer.dom(titleEl).textContent=row.title;titleEl.style.textOverflow='ellipsis';return titleEl;},cmp(a,b){return a.title.localeCompare(b.title);},width:'400px'},{title:'Num Events',align:tr.ui.b.TableFormat.ColumnAlignment.RIGHT,value(row){return row.rowStats.numEvents;},cmp(a,b){return a.rowStats.numEvents-b.rowStats.numEvents;},width:'80px'}];if(stats&&stats.hasEventSizesinBytes){columns.push({title:'Bytes',value(row){const value=new tr.b.Scalar(tr.b.Unit.byName.sizeInBytes,row.rowStats.totalEventSizeinBytes);const spanEl=tr.v.ui.createScalarSpan(value);return spanEl;},cmp(a,b){return a.rowStats.totalEventSizeinBytes-
-b.rowStats.totalEventSizeinBytes;},width:'80px'});}
-return columns;},updateContents_(){const table=this.$.table;const columns=this.createColumns_(this.model.stats);table.rowStatsConstructor=function ModelStatsRowStats(row){const sum=tr.b.math.Statistics.sum(row.data,function(x){return x.numEvents;});const totalEventSizeinBytes=tr.b.math.Statistics.sum(row.data,x=>x.totalEventSizeinBytes);return{numEvents:sum,totalEventSizeinBytes};};table.tableColumns=columns;table.sortColumnIndex=1;table.sortDescending=true;table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;table.groupBy=this.$.picker.currentGroups.map(function(group){return group.dataFn;});if(!this.model){table.dataToGroup=[];}else{table.dataToGroup=this.model.stats.allTraceEventStats;}
-this.$.table.rebuild();}});tr.ui.side_panel.SidePanelRegistry.register(function(){return document.createElement('tr-ui-sp-file-size-stats-side-panel');});})();'use strict';tr.exportTo('tr.mre',function(){function Failure(job,functionHandleString,traceCanonicalUrl,failureTypeName,description,stack){this.job=job;this.functionHandleString=functionHandleString;this.traceCanonicalUrl=traceCanonicalUrl;this.failureTypeName=failureTypeName;this.description=description;this.stack=stack;}
-Failure.prototype={asDict(){return{function_handle_string:this.functionHandleString,trace_canonical_url:this.traceCanonicalUrl,type:this.failureTypeName,description:this.description,stack:this.stack};}};Failure.fromDict=function(failureDict){return new Failure(undefined,failureDict.function_handle_string,failureDict.trace_canonical_url,failureDict.type,failureDict.description,failureDict.stack);};return{Failure,};});'use strict';tr.exportTo('tr.mre',function(){const FunctionRegistry={allFunctions_:[],allFunctionsByName_:{},get allFunctions(){return this.allFunctions_;},get allFunctionsByName(){return this.allFunctionsByName_;}};FunctionRegistry.getFunction=function(name){return this.allFunctionsByName_[name];};FunctionRegistry.register=function(func){if(func.name===''){throw new Error('Registered functions must not be anonymous');}
-if(this.allFunctionsByName[func.name]!==undefined){throw new Error('Function named '+func.name+'is already registered.');}
-this.allFunctionsByName[func.name]=func;this.allFunctions.push(func);};function ModuleToLoad(href,filename){if((href!==undefined)?(filename!==undefined):(filename===undefined)){throw new Error('ModuleToLoad must specify exactly one of href or '+'filename');}
-this.href=href;this.filename=filename;}
-ModuleToLoad.prototype={asDict(){if(this.href!==undefined){return{'href':this.href};}
-return{'filename':this.filename};},toString(){if(this.href!==undefined){return'ModuleToLoad(href="'+this.href+'")';}
-return'ModuleToLoad(filename="'+this.filename+'")';}};ModuleToLoad.fromDict=function(moduleDict){return new ModuleToLoad(moduleDict.href,moduleDict.filename);};function FunctionHandle(modulesToLoad,functionName,opt_options){if(!(modulesToLoad instanceof Array)){throw new Error('modulesToLoad in FunctionHandle must be an array');}
-if(typeof(functionName)!=='string'){throw new Error('functionName in FunctionHandle must be a string');}
-this.modulesToLoad=modulesToLoad;this.functionName=functionName;this.options_=opt_options;}
-FunctionHandle.prototype={get options(){return this.options_;},asDict(){return{'modules_to_load':this.modulesToLoad.map(function(m){return m.asDict();}),'function_name':this.functionName,'options':this.options_};},asUserFriendlyString(){const parts=this.modulesToLoad.map(mtl=>mtl.filename);parts.push(this.functionName);parts.push(JSON.stringify(this.options_));return parts.join(',');},hasHrefs(){for(const module in this.modulesToLoad){if(this.modulesToLoad[module].href!==undefined){return true;}}
-return false;},load(){if(this.hasHrefs()){const err=new Error('FunctionHandle named '+this.functionName+' specifies hrefs, which cannot be loaded.');err.name='FunctionLoadingError';throw err;}
-for(const module in this.modulesToLoad){const filename=this.modulesToLoad[module].filename;try{HTMLImportsLoader.loadHTMLFile(filename);}catch(err){err.name='FunctionLoadingError';throw err;}}
-const func=FunctionRegistry.getFunction(this.functionName);if(func===undefined){const err=new Error('No registered function named '+this.functionName);err.name='FunctionNotDefinedError';throw err;}
-return func;},toString(){const modulesToLoadStr=this.modulesToLoad.map(function(module){return module.toString();});return'FunctionHandle(modulesToLoad=['+modulesToLoadStr+'], '+'functionName="'+this.functionName+'", options="'+
-JSON.stringify(this.options_)+'")';}};FunctionHandle.loadFromFilename_=function(filename){try{const numFunctionsBefore=FunctionRegistry.allFunctions.length;HTMLImportsLoader.loadHTMLFile(filename);}catch(err){err.name='FunctionLoadingError';throw err;}
-const numFunctionsNow=FunctionRegistry.allFunctions.length;if(numFunctionsNow!==(numFunctionsBefore+1)){const err=new Error(filename+' didn\'t call FunctionRegistry.register');err.name='FunctionNotDefinedError';throw err;}
-return FunctionRegistry.allFunctions[numFunctionsNow-1];};FunctionHandle.fromDict=function(handleDict){const options=handleDict.options;let modulesToLoad;if(handleDict.modules_to_load!==undefined){modulesToLoad=handleDict.modules_to_load.map(function(module){return ModuleToLoad.fromDict(module);});}
-return new FunctionHandle(modulesToLoad,handleDict.function_name,options);};return{FunctionHandle,ModuleToLoad,FunctionRegistry,};});'use strict';tr.exportTo('tr.metrics',function(){function runMetrics(model,options,addFailureCb){if(options===undefined){throw new Error('Options are required.');}
-const metricNames=options.metrics;if(!metricNames){throw new Error('Metric names should be specified.');}
-const categories=getTraceCategories(model);const histograms=new tr.v.HistogramSet();for(const metricName of metricNames){const metric=tr.metrics.MetricRegistry.findTypeInfoWithName(metricName);if(metric===undefined){throw new Error(`"${metricName}" is not a registered metric.`);}
-validateTraceCategories(metric.metadata.requiredCategories,categories);try{metric.constructor(histograms,model,options);}catch(e){const err=tr.b.normalizeException(e);addFailureCb(new tr.mre.Failure(undefined,'metricMapFunction',model.canonicalUrl,err.typeName,err.message,err.stack));}}
-validateDiagnosticNames(histograms);return histograms;}
-function getTraceCategories(model){for(const metadata of model.metadata){let config;if(metadata.name==='TraceConfig'&&metadata.value){config=metadata.value;}
-if(metadata.name==='metadata'&&metadata.value&&metadata.value['trace-config']&&metadata.value['trace-config']!=='__stripped__'){config=JSON.parse(metadata.value['trace-config']);}
-if(config){return{excluded:config.excluded_categories||[],included:config.included_categories||[],};}}}
-function validateTraceCategories(requiredCategories,categories){if(!requiredCategories)return;if(!categories)throw new Error('Missing trace config metadata');for(const cat of requiredCategories){const isDisabledByDefault=(cat.indexOf('disabled-by-default')===0);let missing=false;if(isDisabledByDefault){if(!categories.included.includes(cat)){missing=true;}}else if(categories.excluded.includes(cat)){missing=true;}
-if(missing){throw new Error(`Trace is missing required category "${cat}"`);}}}
-function validateDiagnosticNames(histograms){for(const hist of histograms){for(const name of hist.diagnostics.keys()){if(tr.v.d.RESERVED_NAMES_SET.has(name)){throw new Error(`Illegal diagnostic name "${name}" on Histogram "${hist.name}"`);}}}}
-function addTelemetryInfo(histograms,model){for(const metadata of model.metadata){if(!metadata.value||!metadata.value.telemetry)continue;const traceUrls=metadata.value.telemetry[tr.v.d.RESERVED_NAMES.TRACE_URLS];if(traceUrls&&model.canonicalUrl!==traceUrls[0]){throw new Error(`canonicalUrl "${model.canonicalUrl}" != `+`traceUrl "${traceUrls[0]}"`);}
-for(const[name,value]of Object.entries(metadata.value.telemetry)){const type=tr.v.d.RESERVED_NAMES_TO_TYPES.get(name);if(type===undefined){throw new Error(`Unexpected telemetry.${name}`);}
-histograms.addSharedDiagnosticToAllHistograms(name,new type(value));}}}
-function metricMapFunction(result,model,options){const histograms=runMetrics(model,options,result.addFailure.bind(result));addTelemetryInfo(histograms,model);result.addPair('histograms',histograms.asDicts());const scalarDicts=[];for(const value of histograms){for(const[statName,scalar]of value.statisticsScalars){scalarDicts.push({name:value.name+'_'+statName,numeric:scalar.asDict(),description:value.description,});}}
-result.addPair('scalars',scalarDicts);}
-tr.mre.FunctionRegistry.register(metricMapFunction);return{metricMapFunction,runMetrics,};});'use strict';tr.exportTo('tr.mre',function(){class MreResult{constructor(failures,pairs){if(failures===undefined){failures=[];}
-if(pairs===undefined){pairs={};}
-this.failures=failures;this.pairs=pairs;}
-addFailure(failure){this.failures.push(failure);}
-addPair(key,value){if(key in this.pairs){throw new Error('Key '+key+' already exists in result.');}
-this.pairs[key]=value;}
-asDict(){const d={pairs:this.pairs};if(this.failures){d.failures=this.failures.map(function(f){return f.asDict();});}
-return d;}
-hadFailures(){return this.failures.length>0;}
-static fromDict(resultDict){const failures=(resultDict.failures!==undefined)?resultDict.failures.map(tr.mre.Failure.fromDict):undefined;const pairs=resultDict.pairs;return new MreResult(failures,pairs);}}
-return{MreResult,};});'use strict';tr.exportTo('tr.ui',function(){class NullBrushingStateController extends tr.c.BrushingStateController{constructor(){super(undefined);this.parentController=undefined;}
-dispatchChangeEvent_(){if(this.parentController)this.parentController.dispatchChangeEvent_();}
-get model(){if(!this.parentController)return undefined;return this.parentController.model;}
-get trackView(){if(!this.parentController)return undefined;return this.parentController.trackView;}
-get viewport(){if(!this.parentController)return undefined;return this.parentController.viewport;}
-get historyEnabled(){if(!this.parentController)return undefined;return this.parentController.historyEnabled;}
-set historyEnabled(historyEnabled){if(this.parentController){this.parentController.historyEnabled=historyEnabled;}}
-modelWillChange(){if(this.parentController)this.parentController.modelWillChange();}
-modelDidChange(){if(this.parentController)this.parentController.modelDidChange();}
-onUserInitiatedSelectionChange_(){if(this.parentController){this.parentController.onUserInitiatedSelectionChange_();}}
-onPopState_(e){if(this.parentController)this.parentController.onPopState_(e);}
-get selection(){if(!this.parentController)return undefined;return this.parentController.selection;}
-get findMatches(){if(!this.parentController)return undefined;return this.parentController.findMatches;}
-get selectionOfInterest(){if(!this.parentController)return undefined;return this.parentController.selectionOfInterest;}
-get currentBrushingState(){if(!this.parentController)return undefined;return this.parentController.currentBrushingState;}
-set currentBrushingState(newBrushingState){if(this.parentController){this.parentController.currentBrushingState=newBrushingState;}}
-addAllEventsMatchingFilterToSelectionAsTask(filter,selection){if(this.parentController){this.parentController.addAllEventsMatchingFilterToSelectionAsTask(filter,selection);}}
-findTextChangedTo(allPossibleMatches){if(this.parentController){this.parentController.findTextChangedTo(allPossibleMatches);}}
-findFocusChangedTo(currentFocus){if(this.parentController){this.parentController.findFocusChangedTo(currentFocus);}}
-findTextCleared(){if(this.parentController){this.parentController.findTextCleared();}}
-uiStateFromString(string){if(this.parentController){this.parentController.uiStateFromString(string);}}
-navToPosition(uiState,showNavLine){if(this.parentController){this.parentController.navToPosition(uiState,showNavLine);}}
-changeSelectionFromTimeline(selection){if(this.parentController){this.parentController.changeSelectionFromTimeline(selection);}}
-showScriptControlSelection(selection){if(this.parentController){this.parentController.showScriptControlSelection(selection);}}
-changeSelectionFromRequestSelectionChangeEvent(selection){if(this.parentController){this.parentController.changeSelectionFromRequestSelectionChangeEvent(selection);}}
-changeAnalysisViewRelatedEvents(eventSet){if(this.parentController&&(eventSet instanceof tr.model.EventSet)){this.parentController.changeAnalysisViewRelatedEvents(eventSet);}}
-changeAnalysisLinkHoveredEvents(eventSet){if(this.parentController&&(eventSet instanceof tr.model.EventSet)){this.parentController.changeAnalysisLinkHoveredEvents(eventSet);}}
-getViewSpecificBrushingState(viewId){if(this.parentController){this.parentController.getViewSpecificBrushingState(viewId);}}
-changeViewSpecificBrushingState(viewId,newState){if(this.parentController){this.parentController.changeViewSpecificBrushingState(viewId,newState);}}}
-return{NullBrushingStateController,};});'use strict';tr.exportTo('tr.v',function(){const IGNORE_GROUPING_KEYS=['name','storyTags',];class CSVBuilder{constructor(histograms){this.histograms_=histograms;this.table_=[];this.statisticsNames_=new Set();this.groupings_=[];}
-build(){this.prepare_();this.buildHeader_();this.buildTable_();}
-prepare_(){for(const[key,grouping]of tr.v.HistogramGrouping.BY_KEY){if(IGNORE_GROUPING_KEYS.includes(key))continue;this.groupings_.push(grouping);}
-this.groupings_.push(new tr.v.GenericSetGrouping(tr.v.d.RESERVED_NAMES.TRACE_URLS));this.groupings_.sort((a,b)=>a.key.localeCompare(b.key));for(const hist of this.histograms_){for(const name of hist.statisticsNames){this.statisticsNames_.add(name);}}
-this.statisticsNames_=Array.from(this.statisticsNames_);this.statisticsNames_.sort();}
-buildHeader_(){const header=['name','unit'];for(const name of this.statisticsNames_){header.push(name);}
-for(const grouping of this.groupings_){header.push(grouping.key);}
-this.table_.push(header);}
-buildTable_(){for(const hist of this.histograms_){const row=[hist.name,hist.unit.unitString];this.table_.push(row);for(const name of this.statisticsNames_){const stat=hist.getStatisticScalar(name);if(stat){row.push(stat.value);}else{row.push('');}}
-for(const grouping of this.groupings_){row.push(grouping.callback(hist));}}}
-toString(){let str='';for(const row of this.table_){for(let i=0;i<row.length;++i){if(i>0){str+=',';}
-let cell=''+row[i];cell=cell.replace(/\n/g,' ');if(cell.indexOf(',')>=0||cell.indexOf('"')>=0){cell='"'+cell.replace(/"/g,'""')+'"';}
-str+=cell;}
-str+='\n';}
-return str;}}
-return{CSVBuilder,};});'use strict';tr.exportTo('tr.v',function(){const getDisplayLabel=tr.v.HistogramGrouping.DISPLAY_LABEL.callback;const DEFAULT_POSSIBLE_GROUPS=[];DEFAULT_POSSIBLE_GROUPS.push(new tr.v.HistogramGrouping(tr.v.HistogramGrouping.HISTOGRAM_NAME.key,h=>h.shortName||h.name));const EXCLUDED_GROUPING_KEYS=[tr.v.HistogramGrouping.HISTOGRAM_NAME.key,tr.v.HistogramGrouping.DISPLAY_LABEL.key,];for(const group of tr.v.HistogramGrouping.BY_KEY.values()){if(EXCLUDED_GROUPING_KEYS.includes(group.key))continue;DEFAULT_POSSIBLE_GROUPS.push(group);}
-class HistogramParameterCollector{constructor(){this.statisticNames_=new Set(['avg']);this.labelsToStartTimes_=new Map();this.keysToGroupings_=new Map(DEFAULT_POSSIBLE_GROUPS.map(g=>[g.key,g]));this.keysToValues_=new Map(DEFAULT_POSSIBLE_GROUPS.map(g=>[g.key,new Set()]));this.keysToValues_.delete(tr.v.HistogramGrouping.HISTOGRAM_NAME.key);}
-process(histograms){const allStoryTags=new Set();let maxSampleCount=0;for(const hist of histograms){maxSampleCount=Math.max(maxSampleCount,hist.numValues);for(const statName of hist.statisticsNames){this.statisticNames_.add(statName);}
-let startTime=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.BENCHMARK_START);if(startTime!==undefined)startTime=startTime.minDate.getTime();const displayLabel=getDisplayLabel(hist);if(this.labelsToStartTimes_.has(displayLabel)){startTime=Math.min(startTime,this.labelsToStartTimes_.get(displayLabel));}
-this.labelsToStartTimes_.set(displayLabel,startTime);for(const[groupingKey,values]of this.keysToValues_){const grouping=this.keysToGroupings_.get(groupingKey);const value=grouping.callback(hist);if(!value)continue;values.add(value);if(values.size>1){this.keysToValues_.delete(groupingKey);}}
-const storyTags=hist.diagnostics.get(tr.v.d.RESERVED_NAMES.STORY_TAGS);for(const tag of(storyTags||[])){allStoryTags.add(tag);}}
-tr.b.Timing.instant('HistogramParameterCollector','maxSampleCount',maxSampleCount);for(const tagGrouping of tr.v.HistogramGrouping.buildFromTags(allStoryTags,tr.v.d.RESERVED_NAMES.STORY_TAGS)){const values=new Set();for(const hist of histograms){values.add(tagGrouping.callback(hist));}
-if(values.size>1){this.keysToGroupings_.set(tagGrouping.key,tagGrouping);this.keysToValues_.set(tagGrouping.key,values);}}}
-get statisticNames(){return Array.from(this.statisticNames_);}
-get labels(){const displayLabels=Array.from(this.labelsToStartTimes_.keys());displayLabels.sort((x,y)=>this.labelsToStartTimes_.get(x)-this.labelsToStartTimes_.get(y));return displayLabels;}
-get possibleGroupings(){for(const[key,values]of this.keysToValues_){if(values.size>=2)continue;this.keysToGroupings_.delete(key);}
-return Array.from(this.keysToGroupings_.values());}}
-return{HistogramParameterCollector,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-controls-export',exportRawCsv_(){this.export_(false,'csv');},exportRawJson_(){this.export_(false,'json');},exportMergedCsv_(){this.export_(true,'csv');},exportMergedJson_(){this.export_(true,'json');},export_(merged,format){tr.b.dispatchSimpleEvent(this,'export',true,true,{merged,format});},});return{};});'use strict';tr.exportTo('tr.v.ui',function(){const ALPHA_OPTIONS=[];for(let i=1;i<10;++i)ALPHA_OPTIONS.push(i*1e-3);for(let i=1;i<10;++i)ALPHA_OPTIONS.push(i*1e-2);ALPHA_OPTIONS.push(0.1);Polymer({is:'tr-v-ui-histogram-set-controls',properties:{searchQuery:{type:String,value:'',observer:'onUserChange_',},showAll:{type:Boolean,value:false,observer:'onUserChange_',},referenceDisplayLabel:{type:String,value:'',observer:'onUserChange_',},displayStatisticName:{type:String,value:'',observer:'onUserChange_',},alphaString:{type:String,computed:'getAlphaString_(alphaIndex)',},alphaIndex:{type:Number,value:9,observer:'onUserChange_',},},created(){this.viewState_=undefined;this.rowListener_=this.onRowViewStateUpdate_.bind(this);this.baseStatisticNames_=[];this.isInOnViewStateUpdate_=false;},ready(){this.$.picker.addEventListener('current-groups-changed',this.onGroupsChanged_.bind(this));},get viewState(){return this.viewState_;},set viewState(vs){if(this.viewState_){throw new Error('viewState must be set exactly once.');}
-this.viewState_=vs;this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));},async onUserChange_(){if(!this.viewState)return;if(this.isInOnViewStateUpdate_)return;const marks=[];if(this.searchQuery!==this.viewState.searchQuery){marks.push(tr.b.Timing.mark('histogram-set-controls','search'));}
-if(this.showAll!==this.viewState.showAll){marks.push(tr.b.Timing.mark('histogram-set-controls','showAll'));}
-if(this.referenceDisplayLabel!==this.viewState.referenceDisplayLabel){marks.push(tr.b.Timing.mark('histogram-set-controls','referenceColumn'));}
-if(this.displayStatisticName!==this.viewState.displayStatisticName){marks.push(tr.b.Timing.mark('histogram-set-controls','statistic'));}
-if(parseInt(this.alphaIndex)!==this.getAlphaIndexFromViewState_()){marks.push(tr.b.Timing.mark('histogram-set-controls','alpha'));}
-this.$.clear_search.style.visibility=this.searchQuery?'visible':'hidden';let displayStatisticName=this.displayStatisticName;if(this.viewState.referenceDisplayLabel===''&&this.referenceDisplayLabel!==''&&this.baseStatisticNames.length){displayStatisticName=`%${tr.v.DELTA}${this.displayStatisticName}`;}
-if(this.referenceDisplayLabel===''&&this.viewState.referenceDisplayLabel!==''&&this.baseStatisticNames.length){const deltaIndex=displayStatisticName.indexOf(tr.v.DELTA);if(deltaIndex>=0){displayStatisticName=displayStatisticName.slice(deltaIndex+1);}else if(!this.baseStatisticNames.includes(displayStatisticName)){displayStatisticName='avg';}}
-await this.viewState.update({searchQuery:this.searchQuery,showAll:this.showAll,referenceDisplayLabel:this.referenceDisplayLabel,displayStatisticName,alpha:ALPHA_OPTIONS[this.alphaIndex],});if(this.referenceDisplayLabel&&this.statisticNames.length===this.baseStatisticNames.length){this.statisticNames=this.baseStatisticNames.concat(tr.v.Histogram.getDeltaStatisticsNames(this.baseStatisticNames));}else if(!this.referenceDisplayLabel&&this.statisticNames.length>this.baseStatisticNames.length){this.statisticNames=this.baseStatisticNames;}
-for(const mark of marks)mark.end();},onViewStateUpdate_(event){this.isInOnViewStateUpdate_=true;if(event.delta.searchQuery){this.searchQuery=this.viewState.searchQuery;}
-if(event.delta.showAll)this.showAll=this.viewState.showAll;if(event.delta.displayStatisticName){this.displayStatisticName=this.viewState.displayStatisticName;}
-if(event.delta.referenceDisplayLabel){this.referenceDisplayLabel=this.viewState.referenceDisplayLabel;this.$.alpha.style.display=this.referenceDisplayLabel?'inline':'';}
-if(event.delta.groupings){this.$.picker.currentGroupKeys=this.viewState.groupings.map(g=>g.key);}
-if(event.delta.tableRowStates){for(const row of tr.v.ui.HistogramSetTableRowState.walkAll(this.viewState.tableRowStates.values())){row.addUpdateListener(this.rowListener_);}
-const anyShowing=this.anyOverviewCharts_;this.$.hide_overview.style.display=anyShowing?'inline':'none';this.$.show_overview.style.display=anyShowing?'none':'inline';}
-if(event.delta.alpha){this.alphaIndex=this.getAlphaIndexFromViewState_();}
-this.isInOnViewStateUpdate_=false;this.onUserChange_();},onRowViewStateUpdate_(event){if(event.delta.isOverviewed){const anyShowing=event.delta.isOverviewed.current||this.anyOverviewCharts_;this.$.hide_overview.style.display=anyShowing?'inline':'none';this.$.show_overview.style.display=anyShowing?'none':'inline';}
-if(event.delta.subRows){for(const subRow of event.delta.subRows.previous){subRow.removeUpdateListener(this.rowListener_);}
-for(const subRow of event.delta.subRows.current){subRow.addUpdateListener(this.rowListener_);}}},onGroupsChanged_(){if(this.$.picker.currentGroups.length===0&&this.$.picker.possibleGroups.length>0){this.$.picker.currentGroupKeys=[this.$.picker.possibleGroups[0].key];}
-this.viewState.groupings=this.$.picker.currentGroups;},set showAllEnabled(enable){if(!enable)this.$.show_all.checked=true;this.$.show_all.disabled=!enable;},set possibleGroupings(groupings){this.$.picker.possibleGroups=groupings;this.$.picker.style.display=(groupings.length<2)?'none':'block';this.onGroupsChanged_();},set displayLabels(labels){this.$.reference_display_label.style.display=(labels.length<2)?'none':'inline';while(this.$.reference_display_label.children.length>1){this.$.reference_display_label.removeChild(this.$.reference_display_label.lastChild);}
-for(const displayLabel of labels){const option=document.createElement('option');option.textContent=displayLabel;option.value=displayLabel;this.$.reference_display_label.appendChild(option);}
-if(labels.includes(this.viewState.referenceDisplayLabel)){this.referenceDisplayLabel=this.viewState.referenceDisplayLabel;}else{this.viewState.referenceDisplayLabel='';}},get baseStatisticNames(){return this.baseStatisticNames_;},set baseStatisticNames(names){this.baseStatisticNames_=names;this.statisticNames=names;},get statisticNames(){return Array.from(this.$.statistic.options).map(o=>o.value);},set statisticNames(names){this.$.statistic.style.display=(names.length<2)?'none':'inline';while(this.$.statistic.children.length){this.$.statistic.removeChild(this.$.statistic.lastChild);}
-for(const name of names){const option=document.createElement('option');option.textContent=name;this.$.statistic.appendChild(option);}
-if(names.includes(this.viewState.displayStatisticName)){this.displayStatisticName=this.viewState.displayStatisticName;this.$.statistic.value=this.displayStatisticName;}else{this.viewState.displayStatisticName=names[0]||'';}},get anyOverviewCharts_(){for(const row of tr.v.ui.HistogramSetTableRowState.walkAll(this.viewState.tableRowStates.values())){if(row.isOverviewed)return true;}
-return false;},async toggleOverviewLineCharts_(){const showOverviews=!this.anyOverviewCharts_;const mark=tr.b.Timing.mark('histogram-set-controls',(showOverviews?'show':'hide')+'OverviewCharts');for(const row of tr.v.ui.HistogramSetTableRowState.walkAll(this.viewState.tableRowStates.values())){await row.update({isOverviewed:showOverviews});}
-this.$.hide_overview.style.display=showOverviews?'inline':'none';this.$.show_overview.style.display=showOverviews?'none':'inline';await tr.b.animationFrame();mark.end();},set helpHref(href){this.$.help.href=href;this.$.help.style.display='inline';},set feedbackHref(href){this.$.feedback.href=href;this.$.feedback.style.display='inline';},clearSearch_(){this.set('searchQuery','');this.$.search.focus();},getAlphaString_(alphaIndex){return(''+ALPHA_OPTIONS[alphaIndex]).substr(0,5);},openAlphaSlider_(){const alphaButtonRect=this.$.alpha.getBoundingClientRect();this.$.alpha_slider_container.style.display='flex';this.$.alpha_slider_container.style.top=alphaButtonRect.bottom+'px';this.$.alpha_slider_container.style.left=alphaButtonRect.left+'px';this.$.alpha_slider.focus();},closeAlphaSlider_(){this.$.alpha_slider_container.style.display='';},updateAlpha_(){this.alphaIndex=this.$.alpha_slider.value;},getAlphaIndexFromViewState_(){for(let i=0;i<ALPHA_OPTIONS.length;++i){if(ALPHA_OPTIONS[i]>=this.viewState.alpha)return i;}
-return ALPHA_OPTIONS.length-1;},});return{};});'use strict';tr.exportTo('tr.v',function(){function deleteMergedToDiagnostics(histogramArrayMap){for(const[name,histograms]of histogramArrayMap){if(histograms instanceof Array){for(const histogram of histograms){histogram.diagnostics.delete(tr.v.d.RESERVED_NAMES.MERGED_TO);}}else if(histograms instanceof Map){deleteMergedToDiagnostics(histograms);}}}
-class HistogramSetHierarchy{constructor(name){this.name=name;this.description='';this.depth=0;this.subRows=[];this.columns=new Map();this.mergeRelationshipsForColumn_=new Map();}*walk(){yield this;for(const row of this.subRows)yield*row.walk();}
-static*walkAll(rootRows){for(const rootRow of rootRows)yield*rootRow.walk();}
-static build(histogramArrayMap){const rootRows=[];HistogramSetHierarchy.buildInternal_(histogramArrayMap,[],rootRows);const histograms=new tr.v.HistogramSet();for(const row of HistogramSetHierarchy.walkAll(rootRows)){for(const hist of row.columns.values()){if(!(hist instanceof tr.v.Histogram))continue;histograms.addHistogram(hist);}}
-histograms.deduplicateDiagnostics();for(const row of HistogramSetHierarchy.walkAll(rootRows)){for(const[name,hist]of row.columns){if(!(hist instanceof tr.v.Histogram))continue;if(!row.mergeRelationshipsForColumn_.get(name))continue;hist.diagnostics.mergeRelationships(hist);}}
-deleteMergedToDiagnostics(histogramArrayMap);for(const row of HistogramSetHierarchy.walkAll(rootRows)){row.maybeRebin_();}
-return rootRows;}
-maybeRebin_(){const dataRange=new tr.b.math.Range();for(const hist of this.columns.values()){if(!(hist instanceof tr.v.Histogram))continue;if(hist.allBins.length>1)return;if(hist.numValues===0)continue;dataRange.addValue(hist.min);dataRange.addValue(hist.max);}
-dataRange.addValue(tr.b.math.lesserWholeNumber(dataRange.min));dataRange.addValue(tr.b.math.greaterWholeNumber(dataRange.max));if(dataRange.min===dataRange.max)return;const boundaries=tr.v.HistogramBinBoundaries.createLinear(dataRange.min,dataRange.max,tr.v.DEFAULT_REBINNED_COUNT);for(const[name,hist]of this.columns){if(!(hist instanceof tr.v.Histogram))continue;this.columns.set(name,hist.rebin(boundaries));}}
-static mergeHistogramDownHierarchy_(histogram,hierarchy,columnName){let groupingPath=undefined;for(const row of hierarchy){if(groupingPath!==undefined){groupingPath.push(row.name);}else if(row.name===histogram.name){groupingPath=[];}
-if(!row.description){row.description=histogram.description;}
-const existing=row.columns.get(columnName);if(existing===undefined){const clone=histogram.clone();if(groupingPath!==undefined){new tr.v.d.GroupingPath(groupingPath).addToHistogram(clone);}
-row.columns.set(columnName,clone);row.mergeRelationshipsForColumn_.set(columnName,true);continue;}
-if(existing instanceof tr.v.HistogramSet){existing.addHistogram(histogram);continue;}
-if(!existing.canAddHistogram(histogram)){const unmergeableHistograms=new tr.v.HistogramSet([histogram]);const mergedFrom=existing.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_FROM);if(mergedFrom!==undefined){for(const[unusedName,origHist]of mergedFrom){unmergeableHistograms.addHistogram(origHist);}}
-row.columns.set(columnName,unmergeableHistograms);continue;}
-if(existing.name!==histogram.name){row.mergeRelationshipsForColumn_.set(name,false);}
-existing.addHistogram(histogram);}}
-static buildInternal_(histogramArrayMap,hierarchy,rootRows){for(const[name,histograms]of histogramArrayMap){if(histograms instanceof Array){for(const histogram of histograms){HistogramSetHierarchy.mergeHistogramDownHierarchy_(histogram,hierarchy,name);}}else if(histograms instanceof Map){const row=new HistogramSetHierarchy(name);row.depth=hierarchy.length;hierarchy.push(row);HistogramSetHierarchy.buildInternal_(histograms,hierarchy,rootRows);hierarchy.pop();if(hierarchy.length===0){rootRows.push(row);}else{const parentRow=hierarchy[hierarchy.length-1];parentRow.subRows.push(row);}}}}
-static filter(rows,histograms){const results=[];for(const row of rows){let filteredSubRows=[];if(row.subRows.length>0){filteredSubRows=HistogramSetHierarchy.filter(row.subRows,histograms);if(filteredSubRows.length===0)continue;}else{let found=false;for(const testHist of row.columns.values()){if(testHist instanceof tr.v.HistogramSet){for(const origHist of testHist){if(histograms.lookupHistogram(origHist.guid)!==undefined){found=true;break;}}
-if(found)break;continue;}
-if(!(testHist instanceof tr.v.Histogram)){throw new Error('Cells can only contain Histogram or HistogramSet');}
-if(histograms.lookupHistogram(testHist.guid)!==undefined){found=true;break;}
-const mergedFrom=testHist.diagnostics.get(tr.v.d.RESERVED_NAMES.MERGED_FROM);if(mergedFrom!==undefined){for(const[unusedName,origHist]of mergedFrom){if(histograms.lookupHistogram(origHist.guid)!==undefined){found=true;break;}}}
-if(found)break;}
-if(!found)continue;}
-const clone=new HistogramSetHierarchy(row.name);clone.description=row.description;clone.depth=row.depth;clone.subRows=filteredSubRows;clone.columns=row.columns;results.push(clone);}
-return results;}}
-return{HistogramSetHierarchy,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-table-cell',created(){this.viewState_=undefined;this.rootListener_=this.onRootStateUpdate_.bind(this);this.row_=undefined;this.displayLabel_='';this.histogram_=undefined;this.histogramSpan_=undefined;this.overviewChart_=undefined;this.mwuResult_=undefined;},ready(){this.addEventListener('click',this.onClick_.bind(this));},attached(){if(this.row){this.row.rootViewState.addUpdateListener(this.rootListener_);}},detached(){this.row.rootViewState.removeUpdateListener(this.rootListener_);},updateMwu_(){const referenceHistogram=this.referenceHistogram;this.mwuResult_=undefined;if(!(this.histogram instanceof tr.v.Histogram))return;if(!this.histogram.canCompare(referenceHistogram))return;this.mwuResult_=tr.b.math.Statistics.mwu(this.histogram.sampleValues,referenceHistogram.sampleValues,this.row.rootViewState.alpha);},build(row,displayLabel,viewState){this.row_=row;this.displayLabel_=displayLabel;this.viewState_=viewState;this.histogram_=this.row.columns.get(displayLabel);if(this.viewState){this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));}
-this.row.viewState.addUpdateListener(this.onRowStateUpdate_.bind(this));if(this.isAttached){this.row.rootViewState.addUpdateListener(this.rootListener_);}
-this.updateMwu_();this.updateContents_();},updateSignificance_(){if(!this.mwuResult_)return;this.$.scalar.significance=this.mwuResult_.significance;},get viewState(){return this.viewState_;},get row(){return this.row_;},get histogram(){return this.histogram_;},get referenceHistogram(){const referenceDisplayLabel=this.row.rootViewState.referenceDisplayLabel;if(!referenceDisplayLabel)return undefined;if(referenceDisplayLabel===this.displayLabel_)return undefined;return this.row.columns.get(referenceDisplayLabel);},get isHistogramOpen(){return(this.histogramSpan_!==undefined)&&(this.$.histogram.style.display==='block');},set isHistogramOpen(open){if(!(this.histogram instanceof tr.v.Histogram)||(this.histogram.numValues===0)){return;}
-this.$.scalar.style.display=open?'none':'flex';this.$.open_histogram.style.display=open?'none':'block';this.$.close_histogram.style.display=open?'block':'none';this.$.histogram.style.display=open?'block':'none';if(open&&this.histogramSpan_===undefined){this.histogramSpan_=document.createElement('tr-v-ui-histogram-span');this.histogramSpan_.viewState=this.viewState;this.histogramSpan_.rowState=this.row.viewState;this.histogramSpan_.rootState=this.row.rootViewState;this.histogramSpan_.build(this.histogram,this.referenceHistogram);this.$.histogram.appendChild(this.histogramSpan_);}
-this.viewState.isOpen=open;},onViewStateUpdate_(event){if(event.delta.isOpen){this.isHistogramOpen=this.viewState.isOpen;}},onRowStateUpdate_(event){if(event.delta.isOverviewed===undefined)return;if(this.row.viewState.isOverviewed){this.showOverview();}else{this.hideOverview();}},onRootStateUpdate_(event){if(event.delta.referenceDisplayLabel&&this.histogramSpan_){this.histogramSpan_.build(this.histogram,this.referenceHistogram);}
-if(event.delta.displayStatisticName||event.delta.referenceDisplayLabel){this.updateMwu_();this.updateContents_();}else if(event.delta.alpha&&this.mwuResult_){this.mwuResult_.compare(this.row.rootViewState.alpha);this.updateSignificance_();}
-if(this.row.viewState.isOverviewed&&(event.delta.sortColumnIndex||event.delta.sortDescending||event.delta.displayStatisticName||event.delta.referenceDisplayLabel)){if(this.overviewChart_!==undefined){this.$.overview_container.removeChild(this.overviewChart_);this.overviewChart_=undefined;}
-this.showOverview();}},onClick_(event){event.stopPropagation();},openHistogram_(){this.isHistogramOpen=true;tr.b.Timing.instant('histogram-set-table-cell','open');},closeHistogram_(){this.isHistogramOpen=false;tr.b.Timing.instant('histogram-set-table-cell','close');},updateContents_(){const isOpen=this.isHistogramOpen;this.$.empty.style.display='none';this.$.unmergeable.style.display='none';this.$.scalar.style.display='none';this.$.histogram.style.display='none';this.$.close_histogram.style.display='none';this.$.open_histogram.style.visibility='hidden';if(!this.histogram){this.$.missing.style.display='block';return;}
-this.$.missing.style.display='none';if(this.histogram instanceof tr.v.HistogramSet){this.$.unmergeable.style.display='block';return;}
-if(!(this.histogram instanceof tr.v.Histogram)){throw new Error('Invalid Histogram: '+this.histogram);}
-if(this.histogram.numValues===0){this.$.empty.style.display='block';return;}
-this.$.open_histogram.style.display='block';this.$.open_histogram.style.visibility='visible';this.$.scalar.style.display='flex';this.updateSignificance_();const referenceHistogram=this.referenceHistogram;const statName=this.histogram.getAvailableStatisticName(this.row.rootViewState.displayStatisticName,referenceHistogram);const statisticScalar=this.histogram.getStatisticScalar(statName,referenceHistogram);this.$.scalar.setValueAndUnit(statisticScalar.value,statisticScalar.unit);this.isHistogramOpen=isOpen;},showOverview(){this.$.overview_container.style.display='block';if(this.overviewChart_!==undefined)return;this.row.sortSubRows();let referenceDisplayLabel=this.row.rootViewState.referenceDisplayLabel;if(referenceDisplayLabel===this.displayLabel_){referenceDisplayLabel=undefined;}
-const displayStatisticName=this.row.rootViewState.displayStatisticName;const data=[];let unit;for(const subRow of this.row.subRows){const subHist=subRow.columns.get(this.displayLabel_);if(!(subHist instanceof tr.v.Histogram))continue;if(unit===undefined){unit=subHist.unit;}else if(unit!==subHist.unit){data.splice(0);break;}
-const refHist=subRow.columns.get(referenceDisplayLabel);const statName=subHist.getAvailableStatisticName(displayStatisticName,refHist);const statScalar=subHist.getStatisticScalar(statName,refHist);if(statScalar!==undefined){data.push({x:subRow.name,y:statScalar.value,});}}
-if(data.length<2)return;this.overviewChart_=new tr.ui.b.NameLineChart();this.$.overview_container.appendChild(this.overviewChart_);this.overviewChart_.displayXInHover=true;this.overviewChart_.hideLegend=true;this.overviewChart_.unit=unit;this.overviewChart_.overrideDataRange=this.row.overviewDataRange;this.overviewChart_.data=data;},hideOverview(){this.$.overview_container.style.display='none';}});return{};});'use strict';tr.exportTo('tr.v.ui',function(){const NAME_COLUMN_WIDTH_PX=300;Polymer({is:'tr-v-ui-histogram-set-table-name-cell',created(){this.row_=undefined;this.overviewChart_=undefined;this.cellListener_=this.onCellStateUpdate_.bind(this);this.rootListener_=this.onRootStateUpdate_.bind(this);},attached(){if(this.row){this.row.rootViewState.addUpdateListener(this.rootListener_);}},detached(){this.row.rootViewState.removeUpdateListener(this.rootListener_);},get row(){return this.row_;},build(row){if(this.row_!==undefined){throw new Error('row must be set exactly once.');}
-this.row_=row;this.row.viewState.addUpdateListener(this.onRowStateUpdate_.bind(this));this.constrainWidth=this.row.rootViewState.constrainNameColumn;if(this.isAttached){this.row.rootViewState.addUpdateListener(this.rootListener_);}
-for(const cellState of this.row.viewState.cells.values()){cellState.addUpdateListener(this.cellListener_);}
-Polymer.dom(this.$.name).textContent=this.row.name;this.title=this.row.name;if(this.row.description){this.title+='\n'+this.row.description;}
-if(this.row.overviewDataRange.isEmpty||this.row.overviewDataRange.min===this.row.overviewDataRange.max){this.$.show_overview.style.display='none';}
-let histogramCount=0;for(const cell of this.row.columns.values()){if(cell instanceof tr.v.Histogram&&cell.numValues>0){++histogramCount;}}
-if(histogramCount<=1){this.$.open_histograms.style.display='none';}},set constrainWidth(constrain){this.$.name.style.maxWidth=constrain?(this.nameWidthPx+'px'):'none';},get nameWidthPx(){return NAME_COLUMN_WIDTH_PX-(16*this.row.depth);},get isOverflowing(){return this.$.name.style.maxWidth!=='none'&&this.$.name.getBoundingClientRect().width===this.nameWidthPx;},get isOverviewed(){return this.$.overview_container.style.display==='block';},set isOverviewed(isOverviewed){if(isOverviewed===this.isOverviewed)return;if(isOverviewed){this.showOverview_();}else{this.hideOverview_();}},hideOverview_(opt_event){this.$.overview_container.style.display='none';this.$.hide_overview.style.display='none';this.$.show_overview.style.display='block';if(opt_event!==undefined){opt_event.stopPropagation();tr.b.Timing.instant('histogram-set-table-name-cell','hideOverview');this.row.viewState.isOverviewed=this.isOverviewed;}},showOverview_(opt_event){if(opt_event!==undefined){opt_event.stopPropagation();tr.b.Timing.instant('histogram-set-table-name-cell','showOverview');this.row.viewState.isOverviewed=true;}
-this.$.overview_container.style.display='block';this.$.hide_overview.style.display='block';this.$.show_overview.style.display='none';if(this.overviewChart_===undefined){const displayStatisticName=this.row.rootViewState.displayStatisticName;const data=[];let unit;for(const[displayLabel,hist]of this.row.sortedColumns()){if(!(hist instanceof tr.v.Histogram))continue;if(unit===undefined){unit=hist.unit;}else if(unit!==hist.unit){data.splice(0);break;}
-const statName=hist.getAvailableStatisticName(displayStatisticName);const statScalar=hist.getStatisticScalar(statName);if(statScalar!==undefined){data.push({x:displayLabel,y:statScalar.value,});}}
-if(data.length<2){return;}
-this.overviewChart_=new tr.ui.b.NameLineChart();this.$.overview_container.appendChild(this.overviewChart_);this.overviewChart_.displayXInHover=true;this.overviewChart_.hideLegend=true;this.overviewChart_.unit=unit;this.overviewChart_.overrideDataRange=this.row.overviewDataRange;this.overviewChart_.data=data;}},openHistograms_(event){event.stopPropagation();tr.b.Timing.instant('histogram-set-table-name-cell','openHistograms');for(const cell of this.row.cells.values()){cell.isHistogramOpen=true;}
-this.$.close_histograms.style.display='block';this.$.open_histograms.style.display='none';},closeHistograms_(event){event.stopPropagation();tr.b.Timing.instant('histogram-set-table-name-cell','closeHistograms');for(const cell of this.row.cells.values()){cell.isHistogramOpen=false;}
-this.$.open_histograms.style.display='block';this.$.close_histograms.style.display='none';},onRootStateUpdate_(event){if(event.delta.constrainNameColumn){this.constrainWidth=this.row.rootViewState.constrainNameColumn;}
-if(this.row.viewState.isOverviewed&&event.delta.displayStatisticName){this.row.resetOverviewDataRange();if(this.overviewChart_!==undefined){this.$.overview_container.removeChild(this.overviewChart_);this.overviewChart_=undefined;}
-this.showOverview_();}},onRowStateUpdate_(event){if(event.delta.isOverviewed){this.isOverviewed=this.row.viewState.isOverviewed;}},onCellStateUpdate_(event){if(!event.delta.isOpen)return;let cellCount=0;let openCellCount=0;for(const cell of this.row.cells.values()){if(!(cell.histogram instanceof tr.v.Histogram)||(cell.histogram.numValues===0)){continue;}
-++cellCount;if(cell.isHistogramOpen)++openCellCount;}
-if(cellCount<=1)return;const mostlyOpen=openCellCount>(cellCount/2);this.$.open_histograms.style.display=mostlyOpen?'none':'block';this.$.close_histograms.style.display=mostlyOpen?'block':'none';}});return{NAME_COLUMN_WIDTH_PX,};});'use strict';tr.exportTo('tr.v.ui',function(){class HistogramSetTableRow{constructor(hierarchy,baseTable,rootViewState){this.hierarchy_=hierarchy;this.baseTable_=baseTable;this.rootViewState_=rootViewState;this.viewState_=new tr.v.ui.HistogramSetTableRowState();this.viewState_.addUpdateListener(this.onViewStateUpdate_.bind(this));this.overviewDataRange_=undefined;this.nameCell_=undefined;this.cells_=new Map();this.subRows_=[];for(const subHierarchy of hierarchy.subRows){const subRow=new HistogramSetTableRow(subHierarchy,baseTable,rootViewState);this.subRows_.push(subRow);this.viewState.subRows.set(subRow.name,subRow.viewState);}
-for(const columnName of this.columns.keys()){this.viewState.cells.set(columnName,new tr.v.ui.HistogramSetTableCellState());}}
-get name(){return this.hierarchy_.name;}
-get depth(){return this.hierarchy_.depth;}
-get description(){return this.hierarchy_.description;}
-get columns(){return this.hierarchy_.columns;}*sortedColumns(){for(const col of this.baseTable_.tableColumns){yield[col.displayLabel,this.hierarchy_.columns.get(col.displayLabel),];}}
-get overviewDataRange(){if(this.overviewDataRange_===undefined){this.overviewDataRange_=new tr.b.math.Range();const displayStatisticName=this.rootViewState.displayStatisticName;const referenceDisplayLabel=this.rootViewState.referenceDisplayLabel;for(const[displayLabel,hist]of this.columns){if(hist instanceof tr.v.Histogram){const statName=hist.getAvailableStatisticName(displayStatisticName);const statScalar=hist.getStatisticScalar(statName);if(statScalar!==undefined){this.overviewDataRange_.addValue(statScalar.value);}}
-for(const subRow of this.subRows){const subHist=subRow.columns.get(displayLabel);if(!(subHist instanceof tr.v.Histogram))continue;const refHist=subRow.columns.get(referenceDisplayLabel);const statName=subHist.getAvailableStatisticName(displayStatisticName,refHist);const statScalar=subHist.getStatisticScalar(statName,refHist);if(statScalar!==undefined){this.overviewDataRange_.addValue(statScalar.value);}}}}
-return this.overviewDataRange_;}
-resetOverviewDataRange(){this.overviewDataRange_=undefined;}
-get rootViewState(){return this.rootViewState_;}
-get cells(){return this.cells_;}
-get subRows(){return this.subRows_;}
-get viewState(){return this.viewState_;}*walk(){yield this;for(const row of this.subRows)yield*row.walk();}
-static*walkAll(rootRows){for(const rootRow of rootRows)yield*rootRow.walk();}
-get nameCell(){if(this.nameCell_===undefined){this.nameCell_=document.createElement('tr-v-ui-histogram-set-table-name-cell');this.nameCell_.build(this);}
-return this.nameCell_;}
-getCell(columnName){if(this.cells.has(columnName))return this.cells.get(columnName);const cell=document.createElement('tr-v-ui-histogram-set-table-cell');cell.build(this,columnName,this.viewState.cells.get(columnName));this.cells.set(columnName,cell);return cell;}
-compareNames(other){return this.name.localeCompare(other.name);}
-compareCells(other,displayLabel){const cellA=this.columns.get(displayLabel);const cellB=other.columns.get(displayLabel);if(!(cellA instanceof tr.v.Histogram)||!(cellB instanceof tr.v.Histogram)){return undefined;}
-let referenceCellA;let referenceCellB;const referenceDisplayLabel=this.rootViewState.referenceDisplayLabel;if(referenceDisplayLabel&&referenceDisplayLabel!==displayLabel){referenceCellA=this.columns.get(referenceDisplayLabel);referenceCellB=other.columns.get(referenceDisplayLabel);}
-const statisticA=cellA.getAvailableStatisticName(this.rootViewState.displayStatisticName,referenceCellA);const statisticB=cellB.getAvailableStatisticName(this.rootViewState.displayStatisticName,referenceCellB);const scalarA=cellA.getStatisticScalar(statisticA,referenceCellA);const scalarB=cellB.getStatisticScalar(statisticB,referenceCellB);const valueA=scalarA?scalarA.value:undefined;const valueB=scalarB?scalarB.value:undefined;return valueA-valueB;}
-onViewStateUpdate_(event){if(event.delta.isExpanded){this.baseTable_.setExpandedForTableRow(this,this.viewState.isExpanded);}
-if(event.delta.subRows){throw new Error('HistogramSetTableRow.subRows must not be reassigned.');}
-if(event.delta.cells){for(const[displayLabel,cell]of this.cells){if(cell.viewState!==this.viewState.cells.get(displayLabel)){throw new Error('Only HistogramSetTableRow may update cells');}}}}
-async restoreState(vs){await this.viewState.update({isExpanded:vs.isExpanded,isOverviewed:vs.isOverviewed,});for(const[displayLabel,cell]of this.cells){const previousState=vs.cells.get(displayLabel);if(!previousState)continue;await cell.viewState.updateFromViewState(previousState);}
-for(const row of this.subRows){const previousState=vs.subRows.get(row.name);if(!previousState)continue;await row.restoreState(previousState);}}
-sortSubRows(){const sortColumn=this.baseTable_.tableColumns[this.rootViewState_.sortColumnIndex];if(sortColumn===undefined)return;this.subRows_.sort(sortColumn.cmp);if(this.rootViewState_.sortDescending){this.subRows_.reverse();}}}
-return{HistogramSetTableRow,};});'use strict';tr.exportTo('tr.v.ui',function(){const MIDLINE_HORIZONTAL_ELLIPSIS=String.fromCharCode(0x22ef);function escapeRegExp(str){return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,'\\$&');}
-Polymer({is:'tr-v-ui-histogram-set-table',created(){this.viewState_=undefined;this.progress_=()=>Promise.resolve();this.nameColumnTitle_=undefined;this.displayLabels_=[];this.histograms_=undefined;this.sourceHistograms_=undefined;this.groupedHistograms_=undefined;this.hierarchies_=undefined;this.tableRows_=undefined;this.sortColumnChangedListener_=e=>this.onSortColumnChanged_(e);},ready(){this.$.table.zebra=true;this.addEventListener('sort-column-changed',this.sortColumnChangedListener_);this.addEventListener('requestSelectionChange',this.onRequestSelectionChange_.bind(this));this.addEventListener('row-expanded-changed',this.onRowExpandedChanged_.bind(this));},get viewState(){return this.viewState_;},set viewState(vs){if(this.viewState_){throw new Error('viewState must be set exactly once.');}
-this.viewState_=vs;this.viewState.addUpdateListener(this.onViewStateUpdate_.bind(this));},get histograms(){return this.histograms_;},async build(histograms,sourceHistograms,displayLabels,opt_progress){this.histograms_=histograms;this.sourceHistograms_=sourceHistograms;this.groupedHistograms_=undefined;this.displayLabels_=displayLabels;if(opt_progress!==undefined)this.progress_=opt_progress;if(histograms.length===0){throw new Error('histogram-set-table requires non-empty HistogramSet.');}
-await this.progress_('Building columns...');this.$.table.tableColumns=[{title:this.buildNameColumnTitle_(),value:row=>row.nameCell,cmp:(a,b)=>a.compareNames(b),}].concat(displayLabels.map(l=>this.buildColumn_(l)));tr.b.Timing.instant('histogram-set-table','columnCount',this.$.table.tableColumns.length);await this.updateContents_();this.fire('display-ready');this.progress_=()=>Promise.resolve();this.checkNameColumnOverflow_(tr.v.ui.HistogramSetTableRow.walkAll(this.$.table.tableRows));},buildNameColumnTitle_(){this.nameColumnTitle_=document.createElement('span');this.nameColumnTitle_.style.display='inline-flex';const nameEl=document.createElement('span');nameEl.textContent='Name';this.nameColumnTitle_.appendChild(nameEl);const toggleWidthEl=document.createElement('span');toggleWidthEl.style.fontWeight='bold';toggleWidthEl.style.background='#bbb';toggleWidthEl.style.color='#333';toggleWidthEl.style.padding='0px 3px';toggleWidthEl.style.marginRight='8px';toggleWidthEl.style.display='none';toggleWidthEl.textContent=MIDLINE_HORIZONTAL_ELLIPSIS;toggleWidthEl.addEventListener('click',this.toggleNameColumnWidth_.bind(this));this.nameColumnTitle_.appendChild(toggleWidthEl);return this.nameColumnTitle_;},toggleNameColumnWidth_(opt_event){this.viewState.update({constrainNameColumn:!this.viewState.constrainNameColumn,});if(opt_event!==undefined){opt_event.stopPropagation();opt_event.preventDefault();tr.b.Timing.instant('histogram-set-table','nameColumn'+
-(this.viewState.constrainNameColumn?'Constrained':'Unconstrained'));}},buildColumn_(displayLabel){const title=document.createElement('span');title.textContent=displayLabel;title.style.whiteSpace='pre';return{displayLabel,title,value:row=>row.getCell(displayLabel),cmp:(rowA,rowB)=>rowA.compareCells(rowB,displayLabel),};},async updateContents_(){if(this.groupedHistograms_===undefined){await this.progress_('Grouping Histograms...');this.groupHistograms_();}
-if(this.hierarchies_===undefined){await this.progress_('Merging Histograms...');this.hierarchies_=tr.v.HistogramSetHierarchy.build(this.groupedHistograms_);this.tableRows_=undefined;}
-const tableRowsDirty=this.tableRows_===undefined;const previousRowStates=this.viewState.tableRowStates;if(tableRowsDirty){await this.progress_('Filtering rows...');let filteredHistograms=this.viewState.showAll?this.histograms:this.sourceHistograms_;if(this.viewState.searchQuery){let query=undefined;try{query=new RegExp(this.viewState.searchQuery);}catch(e){}
-if(query!==undefined){filteredHistograms=new tr.v.HistogramSet([...filteredHistograms].filter(hist=>hist.name.match(query)));if(filteredHistograms.length===0&&!this.viewState.showAll){await this.viewState.update({showAll:true});return;}}}
-const filteredHierarchies=tr.v.HistogramSetHierarchy.filter(this.hierarchies_,filteredHistograms);this.tableRows_=filteredHierarchies.map(hierarchy=>new tr.v.ui.HistogramSetTableRow(hierarchy,this.$.table,this.viewState));tr.b.Timing.instant('histogram-set-table','rootRowCount',this.tableRows_.length);const namesToRowStates=new Map();for(const row of this.tableRows_){namesToRowStates.set(row.name,row.viewState);}
-await this.viewState.update({tableRowStates:namesToRowStates});}
-await this.progress_('Configuring table...');this.nameColumnTitle_.children[1].style.filter=this.viewState.constrainNameColumn?'invert(100%)':'';const referenceDisplayLabelIndex=this.displayLabels_.indexOf(this.viewState.referenceDisplayLabel);this.$.table.selectedTableColumnIndex=(referenceDisplayLabelIndex<0)?undefined:(1+referenceDisplayLabelIndex);this.removeEventListener('sort-column-changed',this.sortColumnChangedListener_);this.$.table.sortColumnIndex=this.viewState.sortColumnIndex;this.$.table.sortDescending=this.viewState.sortDescending;this.addEventListener('sort-column-changed',this.sortColumnChangedListener_);if(tableRowsDirty){await this.progress_('Building DOM...');this.$.table.tableRows=this.tableRows_;for(const row of this.tableRows_){const previousState=previousRowStates.get(row.name);if(!previousState)continue;await row.restoreState(previousState);}}
-this.$.table.rebuild();},async onRowExpandedChanged_(event){event.row.viewState.isExpanded=this.$.table.getExpandedForTableRow(event.row);tr.b.Timing.instant('histogram-set-table','row'+(event.row.viewState.isExpanded?'Expanded':'Collapsed'));if(this.nameColumnTitle_.children[1].style.display==='block')return;await tr.b.animationFrame();this.checkNameColumnOverflow_(event.row.subRows);},checkNameColumnOverflow_(rows){for(const row of rows){if(!row.nameCell.isOverflowing)continue;const[nameSpan,dots]=this.nameColumnTitle_.children;dots.style.display='block';const labelWidthPx=tr.v.ui.NAME_COLUMN_WIDTH_PX-
-dots.getBoundingClientRect().width;nameSpan.style.width=labelWidthPx+'px';return;}},groupHistograms_(){const groupings=this.viewState.groupings.slice();groupings.push(tr.v.HistogramGrouping.DISPLAY_LABEL);function canSkipGrouping(grouping,groupedHistograms){if(groupedHistograms.size>1)return false;if(grouping.key===groupings[0].key)return false;if(grouping.key===tr.v.HistogramGrouping.DISPLAY_LABEL.key){return false;}
-return true;}
-this.groupedHistograms_=this.histograms.groupHistogramsRecursively(groupings,canSkipGrouping);this.hierarchies_=undefined;},async onViewStateUpdate_(event){if(this.histograms_===undefined)return;if(event.delta.groupings!==undefined){this.groupedHistograms_=undefined;}
-if(event.delta.searchQuery!==undefined||event.delta.showAll!==undefined){this.tableRows_=undefined;}
-if(event.delta.displayStatistic!==undefined&&this.$.table.sortColumnIndex>0){this.$.table.sortColumnIndex=undefined;}
-if(event.delta.referenceDisplayLabel!==undefined||event.delta.displayStatisticName!==undefined){this.$.table.tableRows=this.$.table.tableRows;}
-if(event.delta.tableRowStates){if(this.tableRows_.length!==this.viewState.tableRowStates.size){throw new Error('Only histogram-set-table may update tableRowStates');}
-for(const row of this.tableRows_){if(this.viewState.tableRowStates.get(row.name)!==row.viewState){throw new Error('Only histogram-set-table may update tableRowStates');}}}
-await this.updateContents_();},onSortColumnChanged_(event){tr.b.Timing.instant('histogram-set-table','sortColumn');this.viewState.update({sortColumnIndex:event.sortColumnIndex,sortDescending:event.sortDescending,});},onRequestSelectionChange_(event){if(event.selection instanceof tr.model.EventSet)return;event.stopPropagation();tr.b.Timing.instant('histogram-set-table','selectHistogramNames');let histogramNames=event.selection;histogramNames.sort();histogramNames=histogramNames.map(escapeRegExp).join('|');this.viewState.update({showAll:true,searchQuery:`^(${histogramNames})$`,});},get leafHistograms(){const histograms=new tr.v.HistogramSet();for(const row of
-tr.v.ui.HistogramSetTableRow.walkAll(this.$.table.tableRows)){if(row.subRows.length)continue;for(const hist of row.columns.values()){if(!(hist instanceof tr.v.Histogram))continue;histograms.addHistogram(hist);}}
-return histograms;}});return{MIDLINE_HORIZONTAL_ELLIPSIS,};});'use strict';tr.exportTo('tr.v.ui',function(){Polymer({is:'tr-v-ui-histogram-set-view',listeners:{export:'onExport_',},created(){this.brushingStateController_=new tr.ui.NullBrushingStateController();this.viewState_=new tr.v.ui.HistogramSetViewState();},ready(){this.$.table.viewState=this.viewState;this.$.controls.viewState=this.viewState;},attached(){this.brushingStateController.parentController=tr.c.BrushingStateController.getControllerForElement(this.parentNode);},get brushingStateController(){return this.brushingStateController_;},get viewState(){return this.viewState_;},get histograms(){return this.$.table.histograms;},async build(histograms,opt_options){const options=opt_options||{};const progress=options.progress||(()=>Promise.resolve());if(options.helpHref)this.$.controls.helpHref=options.helpHref;if(options.feedbackHref){this.$.controls.feedbackHref=options.feedbackHref;}
-if(histograms===undefined||histograms.length===0){this.$.container.style.display='none';this.$.zero.style.display='block';this.style.display='block';return;}
-this.$.zero.style.display='none';this.$.container.style.display='block';this.$.container.style.maxHeight=(window.innerHeight-16)+'px';const buildMark=tr.b.Timing.mark('histogram-set-view','build');await progress('Finding important Histograms...');const sourceHistogramsMark=tr.b.Timing.mark('histogram-set-view','sourceHistograms');const sourceHistograms=histograms.sourceHistograms;sourceHistogramsMark.end();this.$.controls.showAllEnabled=(sourceHistograms.length!==histograms.length);await progress('Collecting parameters...');const collectParametersMark=tr.b.Timing.mark('histogram-set-view','collectParameters');const parameterCollector=new tr.v.HistogramParameterCollector();parameterCollector.process(histograms);this.$.controls.baseStatisticNames=parameterCollector.statisticNames;this.$.controls.possibleGroupings=parameterCollector.possibleGroupings;const displayLabels=parameterCollector.labels;this.$.controls.displayLabels=displayLabels;collectParametersMark.end();await this.$.table.build(histograms,sourceHistograms,displayLabels,progress);buildMark.end();},onExport_(event){const mark=tr.b.Timing.mark('histogram-set-view','export'+
-(event.merged?'Merged':'Raw')+event.format.toUpperCase());const histograms=event.merged?this.$.table.leafHistograms:this.histograms;let blob;if(event.format==='csv'){const csv=new tr.v.CSVBuilder(histograms);csv.build();blob=new window.Blob([csv.toString()],{type:'text/csv'});}else if(event.format==='json'){blob=new window.Blob([JSON.stringify(histograms.asDicts())],{type:'text/json'});}else{throw new Error(`Unable to export format "${event.format}"`);}
-const path=window.location.pathname.split('/');const basename=path[path.length-1].split('.')[0]||'histograms';const anchor=document.createElement('a');anchor.download=`${basename}.${event.format}`;anchor.href=window.URL.createObjectURL(blob);anchor.click();mark.end();},});return{};});'use strict';tr.exportTo('tr.ui',function(){Polymer({is:'tr-ui-sp-metrics-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.model_=undefined;this.rangeOfInterest_=undefined;this.metricLatenciesMs_=[];this.metrics_=[];tr.metrics.MetricRegistry.getAllRegisteredTypeInfos().forEach(function(m){if(m.constructor.name==='sampleMetric')return;this.metrics_.push({label:m.constructor.name,value:m.constructor.name});},this);this.metrics_.sort((x,y)=>x.label.localeCompare(y.label));this.settingsKey_='metrics-side-panel-metric-name';this.currentMetricName_='responsivenessMetric';const metricSelector=tr.ui.b.createSelector(this,'currentMetricName_',this.settingsKey_,this.currentMetricName_,this.metrics_);Polymer.dom(this.$.top_left_controls).appendChild(metricSelector);metricSelector.addEventListener('change',this.onMetricChange_.bind(this));this.currentMetricTypeInfo_=tr.metrics.MetricRegistry.findTypeInfoWithName(this.currentMetricName_);this.recomputeButton_=tr.ui.b.createButton('Recompute',this.onRecompute_,this);Polymer.dom(this.$.top_left_controls).appendChild(this.recomputeButton_);this.$.results.addEventListener('display-ready',()=>{this.$.results.style.display='';});},async build(model){this.model_=model;await this.updateContents_();},get metricLatencyMs(){return tr.b.math.Statistics.mean(this.metricLatenciesMs_);},onMetricChange_(){this.currentMetricTypeInfo_=tr.metrics.MetricRegistry.findTypeInfoWithName(this.currentMetricName_);this.metricLatenciesMs_=[];this.updateContents_();},onRecompute_(){this.updateContents_();},get textLabel(){return'Metrics';},supportsModel(m){if(!m){return{supported:false,reason:'No model available'};}
-return{supported:true};},get model(){return this.model_;},set model(model){this.build(model);},get selection(){},set selection(_){},get rangeOfInterest(){return this.rangeOfInterest_;},set rangeOfInterest(range){this.rangeOfInterest_=range;if(this.currentMetricTypeInfo_&&this.currentMetricTypeInfo_.metadata.supportsRangeOfInterest){if((this.metricLatencyMs===undefined)||(this.metricLatencyMs<100)){this.updateContents_();}else{this.recomputeButton_.style.background='red';}}},async updateContents_(){Polymer.dom(this.$.error).textContent='';this.$.results.style.display='none';if(!this.model_){Polymer.dom(this.$.error).textContent='Missing model';return;}
-const options={metrics:[this.currentMetricName_]};if(this.currentMetricTypeInfo_&&this.currentMetricTypeInfo_.metadata.supportsRangeOfInterest&&this.rangeOfInterest&&!this.rangeOfInterest.isEmpty){options.rangeOfInterest=this.rangeOfInterest;}
-const startDate=new Date();const addFailureCb=failure=>{Polymer.dom(this.$.error).textContent=failure.description;};const histograms=tr.metrics.runMetrics(this.model_,options,addFailureCb);this.metricLatenciesMs_.push(new Date()-startDate);while(this.metricLatenciesMs_.length>20){this.metricLatenciesMs_.shift();}
-this.recomputeButton_.style.background='';await this.$.results.build(histograms);}});tr.ui.side_panel.SidePanelRegistry.register(function(){return document.createElement('tr-ui-sp-metrics-side-panel');});return{};});'use strict';Polymer({is:'tr-ui-e-s-alerts-side-panel',behaviors:[tr.ui.behaviors.SidePanel],ready(){this.rangeOfInterest_=new tr.b.math.Range();this.selection_=undefined;},get model(){return this.model_;},set model(model){this.model_=model;this.updateContents_();},set selection(selection){},set rangeOfInterest(rangeOfInterest){},selectAlertsOfType(alertTypeString){const alertsOfType=this.model_.alerts.filter(function(alert){return alert.title===alertTypeString;});const event=new tr.model.RequestSelectionChangeEvent();event.selection=new tr.model.EventSet(alertsOfType);this.dispatchEvent(event);},alertsByType_(alerts){const alertsByType={};alerts.forEach(function(alert){if(!alertsByType[alert.title]){alertsByType[alert.title]=[];}
-alertsByType[alert.title].push(alert);});return alertsByType;},alertsTableRows_(alertsByType){return Object.keys(alertsByType).map(function(key){return{alertType:key,count:alertsByType[key].length};});},alertsTableColumns_(){return[{title:'Alert type',value(row){return row.alertType;},width:'180px'},{title:'Count',width:'100%',value(row){return row.count;}}];},createAlertsTable_(alerts){const alertsByType=this.alertsByType_(alerts);const table=document.createElement('tr-ui-b-table');table.tableColumns=this.alertsTableColumns_();table.tableRows=this.alertsTableRows_(alertsByType);table.selectionMode=tr.ui.b.TableFormat.SelectionMode.ROW;table.addEventListener('selection-changed',function(e){const row=table.selectedTableRow;if(row){this.selectAlertsOfType(row.alertType);}}.bind(this));return table;},updateContents_(){Polymer.dom(this.$.result_area).textContent='';if(this.model_===undefined)return;const panel=this.createAlertsTable_(this.model_.alerts);Polymer.dom(this.$.result_area).appendChild(panel);},supportsModel(m){if(m===undefined){return{supported:false,reason:'Unknown tracing model'};}else if(m.alerts.length===0){return{supported:false,reason:'No alerts in tracing model'};}
-return{supported:true};},get textLabel(){return'Alerts';}});tr.ui.side_panel.SidePanelRegistry.register(function(){return document.createElement('tr-ui-e-s-alerts-side-panel');});
-</script>
-<!--CATAPULT_REV=NO_AUTO_UPDATE-->
\ No newline at end of file
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_data b/systrace/catapult/systrace/systrace/test_data/atrace_data
deleted file mode 100644
index 2aceb18..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_data
+++ /dev/null
@@ -1,127 +0,0 @@
-# tracer: nop
-#
-# entries-in-buffer/entries-written: 116/116   #P:1
-#
-#                              _-----=> irqs-off
-#                             / _----=> need-resched
-#                            | / _---=> hardirq/softirq
-#                            || / _--=> preempt-depth
-#                            ||| /     delay
-#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
-#              | |       |   ||||       |         |
-atrace-14446 [000] ...2  1212.465062: sched_switch: prev_comm=atrace prev_pid=14446 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465074: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465082: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.465092: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465102: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465126: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.465132: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465139: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465145: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.465227: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h5  1212.465297: sched_wakeup: comm=adbd pid=212 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465306: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=adbd next_pid=212 next_prio=120
-dsx_exp_workque-212   [000] d..4  1212.465329: sched_wakeup: comm=adbd pid=209 prio=120 success=1 target_cpu=000
-dsx_exp_workque-212   [000] ...2  1212.465348: sched_switch: prev_comm=adbd prev_pid=212 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=209 next_prio=120
-uether-209   [000] d..4  1212.465395: sched_wakeup: comm=adbd pid=211 prio=120 success=1 target_cpu=000
-uether-209   [000] ...2  1212.465441: sched_switch: prev_comm=adbd prev_pid=209 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=211 next_prio=120
-dsx_rebuild_wor-211   [000] ...2  1212.465448: sched_switch: prev_comm=adbd prev_pid=211 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h5  1212.574554: sched_wakeup: comm=sensors.qcom pid=292 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.574566: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=sensors.qcom next_pid=292 next_prio=120
-irq/363-ARM64 s-292   [000] ...2  1212.574665: sched_switch: prev_comm=sensors.qcom prev_pid=292 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-sensors.qcom-14447 [000] d..4  1212.574797: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-sensors.qcom-14447 [000] ...2  1212.574802: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-sensors.qcom-1593  [000] ...2  1212.574819: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=D ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-sensors.qcom-14447 [000] d..3  1212.574823: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-sensors.qcom-14447 [000] ...2  1212.574827: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-sensors.qcom-1593  [000] d..4  1212.574865: sched_wakeup: comm=sensors.qcom pid=760 prio=120 success=1 target_cpu=000
-sensors.qcom-1593  [000] ...2  1212.574876: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=760 next_prio=120
-sensors.qcom-760   [000] d..4  1212.574905: sched_wakeup: comm=system_server pid=782 prio=118 success=1 target_cpu=000
-sensors.qcom-760   [000] ...2  1212.574917: sched_switch: prev_comm=sensors.qcom prev_pid=760 prev_prio=120 prev_state=S ==> next_comm=system_server next_pid=782 next_prio=118
-system_server-782   [000] d..4  1212.574981: sched_wakeup: comm=system_server pid=785 prio=118 success=1 target_cpu=000
-system_server-782   [000] ...2  1212.575009: sched_switch: prev_comm=system_server prev_pid=782 prev_prio=118 prev_state=S ==> next_comm=system_server next_pid=785 next_prio=118
-system_server-785   [000] ...2  1212.575045: sched_switch: prev_comm=system_server prev_pid=785 prev_prio=118 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-sensors.qcom-14447 [000] ...3  1212.575143: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=x ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575153: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575159: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.575167: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575175: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575181: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.575188: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575195: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575201: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.575211: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1212.649601: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.649614: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
-MMHandlerThread-7231  [000] ...2  1212.649630: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.729539: sched_wakeup: comm=kworker/u:1 pid=21 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNs6  1212.729550: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.729563: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:1 next_pid=21 next_prio=120
-kworker/u:1-21    [000] d..5  1212.729571: sched_wakeup: comm=mpdecision pid=2046 prio=113 success=1 target_cpu=000
-kworker/u:1-21    [000] ...2  1212.729578: sched_switch: prev_comm=kworker/u:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-thermal-engine-557   [000] d..4  1212.729597: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-thermal-engine-557   [000] ...2  1212.729600: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=D ==> next_comm=mpdecision next_pid=2046 next_prio=113
-mpdecision-2046  [000] ...2  1212.729801: sched_switch: prev_comm=mpdecision prev_pid=2046 prev_prio=113 prev_state=S ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-kworker/0:1H-17    [000] ...2  1212.730104: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730134: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730154: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.730176: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730201: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730220: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.730241: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730262: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730280: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1212.730303: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.730638: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730669: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-migration/0-7     [000] d..6  1212.730707: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-migration/0-7     [000] ...2  1212.730728: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-kworker/0:1H-17    [000] ...2  1212.730916: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.731632: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.731661: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-migration/0-7     [000] d..6  1212.731702: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-migration/0-7     [000] ...2  1212.731722: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-kworker/0:1H-17    [000] ...2  1212.731832: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.732685: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.732714: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-migration/0-7     [000] d..6  1212.732747: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-migration/0-7     [000] ...2  1212.732767: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-kworker/0:1H-17    [000] d..4  1212.732810: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-kworker/0:1H-17    [000] ...2  1212.732829: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-thermal-engine-557   [000] ...2  1212.732854: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1212.876266: sched_wakeup: comm=RILSender0 pid=1365 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1212.876284: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.876316: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=RILSender0 next_pid=1365 next_prio=120
-RILSender0-1365  [000] ...2  1212.876415: sched_switch: prev_comm=RILSender0 prev_pid=1365 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
-MMHandlerThread-7231  [000] ...2  1212.876454: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.089569: sched_wakeup: comm=Thread-625 pid=5750 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1213.089587: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.089622: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Thread-625 next_pid=5750 next_prio=120
-AsyncTask #1-5750  [000] ...2  1213.089842: sched_switch: prev_comm=Thread-625 prev_pid=5750 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
-MMHandlerThread-7231  [000] ...2  1213.089879: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.327439: sched_wakeup: comm=pandora.android pid=5395 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1213.327455: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.327487: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
-MMHandlerThread-7231  [000] ...2  1213.327518: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
-pandora.android-5395  [000] d..4  1213.327718: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
-pandora.android-5395  [000] ...2  1213.327739: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-Binder_1-780   [000] ...2  1213.327763: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=D ==> next_comm=pandora.android next_pid=5395 next_prio=120
-pandora.android-5395  [000] d..3  1213.327781: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
-pandora.android-5395  [000] ...2  1213.327795: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-Binder_1-780   [000] d..4  1213.328056: sched_wakeup: comm=Binder_1 pid=878 prio=120 success=1 target_cpu=000
-Binder_1-780   [000] ...2  1213.328095: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=878 next_prio=120
-Binder_1-878   [000] d..4  1213.328263: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
-Binder_1-878   [000] ...2  1213.328345: sched_switch: prev_comm=Binder_1 prev_pid=878 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=780 next_prio=120
-Binder_1-780   [000] ...2  1213.328558: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
-pandora.android-5395  [000] ...2  1213.328743: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328773: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328793: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1213.328821: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328846: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328866: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1213.328891: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328913: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328931: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3     [000] ...2  1213.328964: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.465138: sched_wakeup: comm=atrace pid=14446 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.465171: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=atrace next_pid=14446 next_prio=120
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_data_raw b/systrace/catapult/systrace/systrace/test_data/atrace_data_raw
deleted file mode 100644
index 1c8e086..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_data_raw
+++ /dev/null
@@ -1,128 +0,0 @@
-
-# tracer: nop
-#
-# entries-in-buffer/entries-written: 116/116   #P:1
-#
-#                              _-----=> irqs-off
-#                             / _----=> need-resched
-#                            | / _---=> hardirq/softirq
-#                            || / _--=> preempt-depth
-#                            ||| /     delay
-#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
-#              | |       |   ||||       |         |
-          atrace-14446 [000] ...2  1212.465062: sched_switch: prev_comm=atrace prev_pid=14446 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465074: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465082: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.465092: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465102: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465126: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.465132: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465139: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465145: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.465227: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h5  1212.465297: sched_wakeup: comm=adbd pid=212 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465306: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=adbd next_pid=212 next_prio=120
-            adbd-212   [000] d..4  1212.465329: sched_wakeup: comm=adbd pid=209 prio=120 success=1 target_cpu=000
-            adbd-212   [000] ...2  1212.465348: sched_switch: prev_comm=adbd prev_pid=212 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=209 next_prio=120
-            adbd-209   [000] d..4  1212.465395: sched_wakeup: comm=adbd pid=211 prio=120 success=1 target_cpu=000
-            adbd-209   [000] ...2  1212.465441: sched_switch: prev_comm=adbd prev_pid=209 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=211 next_prio=120
-            adbd-211   [000] ...2  1212.465448: sched_switch: prev_comm=adbd prev_pid=211 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h5  1212.574554: sched_wakeup: comm=sensors.qcom pid=292 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.574566: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=sensors.qcom next_pid=292 next_prio=120
-    sensors.qcom-292   [000] ...2  1212.574665: sched_switch: prev_comm=sensors.qcom prev_pid=292 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447 [000] d..4  1212.574797: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447 [000] ...2  1212.574802: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593  [000] ...2  1212.574819: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=D ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447 [000] d..3  1212.574823: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447 [000] ...2  1212.574827: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593  [000] d..4  1212.574865: sched_wakeup: comm=sensors.qcom pid=760 prio=120 success=1 target_cpu=000
-    sensors.qcom-1593  [000] ...2  1212.574876: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=760 next_prio=120
-    sensors.qcom-760   [000] d..4  1212.574905: sched_wakeup: comm=system_server pid=782 prio=118 success=1 target_cpu=000
-    sensors.qcom-760   [000] ...2  1212.574917: sched_switch: prev_comm=sensors.qcom prev_pid=760 prev_prio=120 prev_state=S ==> next_comm=system_server next_pid=782 next_prio=118
-   system_server-782   [000] d..4  1212.574981: sched_wakeup: comm=system_server pid=785 prio=118 success=1 target_cpu=000
-   system_server-782   [000] ...2  1212.575009: sched_switch: prev_comm=system_server prev_pid=782 prev_prio=118 prev_state=S ==> next_comm=system_server next_pid=785 next_prio=118
-   system_server-785   [000] ...2  1212.575045: sched_switch: prev_comm=system_server prev_pid=785 prev_prio=118 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447 [000] ...3  1212.575143: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=x ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575153: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575159: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.575167: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575175: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575181: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.575188: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575195: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575201: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.575211: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1212.649601: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.649614: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1212.649630: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.729539: sched_wakeup: comm=kworker/u:1 pid=21 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNs6  1212.729550: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.729563: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:1 next_pid=21 next_prio=120
-     kworker/u:1-21    [000] d..5  1212.729571: sched_wakeup: comm=mpdecision pid=2046 prio=113 success=1 target_cpu=000
-     kworker/u:1-21    [000] ...2  1212.729578: sched_switch: prev_comm=kworker/u:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557   [000] d..4  1212.729597: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/0:2H-557   [000] ...2  1212.729600: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=D ==> next_comm=mpdecision next_pid=2046 next_prio=113
-      mpdecision-2046  [000] ...2  1212.729801: sched_switch: prev_comm=mpdecision prev_pid=2046 prev_prio=113 prev_state=S ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] ...2  1212.730104: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730134: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730154: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.730176: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730201: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730220: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.730241: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730262: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730280: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.730303: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.730638: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730669: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7     [000] d..6  1212.730707: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7     [000] ...2  1212.730728: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] ...2  1212.730916: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.731632: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.731661: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7     [000] d..6  1212.731702: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7     [000] ...2  1212.731722: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] ...2  1212.731832: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.732685: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.732714: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7     [000] d..6  1212.732747: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7     [000] ...2  1212.732767: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] d..4  1212.732810: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-    kworker/0:1H-17    [000] ...2  1212.732829: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557   [000] ...2  1212.732854: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1212.876266: sched_wakeup: comm=RILSender0 pid=1365 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1212.876284: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.876316: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=RILSender0 next_pid=1365 next_prio=120
-      RILSender0-1365  [000] ...2  1212.876415: sched_switch: prev_comm=RILSender0 prev_pid=1365 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1212.876454: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.089569: sched_wakeup: comm=Thread-625 pid=5750 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1213.089587: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.089622: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Thread-625 next_pid=5750 next_prio=120
-      Thread-625-5750  [000] ...2  1213.089842: sched_switch: prev_comm=Thread-625 prev_pid=5750 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1213.089879: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.327439: sched_wakeup: comm=pandora.android pid=5395 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1213.327455: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.327487: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1213.327518: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395  [000] d..4  1213.327718: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395  [000] ...2  1213.327739: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780   [000] ...2  1213.327763: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=D ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395  [000] d..3  1213.327781: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395  [000] ...2  1213.327795: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780   [000] d..4  1213.328056: sched_wakeup: comm=Binder_1 pid=878 prio=120 success=1 target_cpu=000
-        Binder_1-780   [000] ...2  1213.328095: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=878 next_prio=120
-        Binder_1-878   [000] d..4  1213.328263: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
-        Binder_1-878   [000] ...2  1213.328345: sched_switch: prev_comm=Binder_1 prev_pid=878 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780   [000] ...2  1213.328558: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395  [000] ...2  1213.328743: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328773: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328793: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1213.328821: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328846: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328866: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1213.328891: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328913: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328931: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1213.328964: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.465138: sched_wakeup: comm=atrace pid=14446 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.465171: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=atrace next_pid=14446 next_prio=120
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_data_stripped b/systrace/catapult/systrace/systrace/test_data/atrace_data_stripped
deleted file mode 100644
index 3261ebf..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_data_stripped
+++ /dev/null
@@ -1,127 +0,0 @@
-# tracer: nop
-#
-# entries-in-buffer/entries-written: 116/116   #P:1
-#
-#                              _-----=> irqs-off
-#                             / _----=> need-resched
-#                            | / _---=> hardirq/softirq
-#                            || / _--=> preempt-depth
-#                            ||| /     delay
-#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
-#              | |       |   ||||       |         |
-          atrace-14446 [000] ...2  1212.465062: sched_switch: prev_comm=atrace prev_pid=14446 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465074: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465082: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.465092: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465102: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465126: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.465132: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.465139: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465145: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.465227: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h5  1212.465297: sched_wakeup: comm=adbd pid=212 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.465306: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=adbd next_pid=212 next_prio=120
-            adbd-212   [000] d..4  1212.465329: sched_wakeup: comm=adbd pid=209 prio=120 success=1 target_cpu=000
-            adbd-212   [000] ...2  1212.465348: sched_switch: prev_comm=adbd prev_pid=212 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=209 next_prio=120
-            adbd-209   [000] d..4  1212.465395: sched_wakeup: comm=adbd pid=211 prio=120 success=1 target_cpu=000
-            adbd-209   [000] ...2  1212.465441: sched_switch: prev_comm=adbd prev_pid=209 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=211 next_prio=120
-            adbd-211   [000] ...2  1212.465448: sched_switch: prev_comm=adbd prev_pid=211 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h5  1212.574554: sched_wakeup: comm=sensors.qcom pid=292 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.574566: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=sensors.qcom next_pid=292 next_prio=120
-    sensors.qcom-292   [000] ...2  1212.574665: sched_switch: prev_comm=sensors.qcom prev_pid=292 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447 [000] d..4  1212.574797: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447 [000] ...2  1212.574802: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593  [000] ...2  1212.574819: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=D ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447 [000] d..3  1212.574823: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447 [000] ...2  1212.574827: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593  [000] d..4  1212.574865: sched_wakeup: comm=sensors.qcom pid=760 prio=120 success=1 target_cpu=000
-    sensors.qcom-1593  [000] ...2  1212.574876: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=760 next_prio=120
-    sensors.qcom-760   [000] d..4  1212.574905: sched_wakeup: comm=system_server pid=782 prio=118 success=1 target_cpu=000
-    sensors.qcom-760   [000] ...2  1212.574917: sched_switch: prev_comm=sensors.qcom prev_pid=760 prev_prio=120 prev_state=S ==> next_comm=system_server next_pid=782 next_prio=118
-   system_server-782   [000] d..4  1212.574981: sched_wakeup: comm=system_server pid=785 prio=118 success=1 target_cpu=000
-   system_server-782   [000] ...2  1212.575009: sched_switch: prev_comm=system_server prev_pid=782 prev_prio=118 prev_state=S ==> next_comm=system_server next_pid=785 next_prio=118
-   system_server-785   [000] ...2  1212.575045: sched_switch: prev_comm=system_server prev_pid=785 prev_prio=118 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447 [000] ...3  1212.575143: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=x ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575153: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575159: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.575167: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575175: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575181: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.575188: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.575195: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.575201: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.575211: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1212.649601: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.649614: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1212.649630: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.729539: sched_wakeup: comm=kworker/u:1 pid=21 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNs6  1212.729550: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.729563: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:1 next_pid=21 next_prio=120
-     kworker/u:1-21    [000] d..5  1212.729571: sched_wakeup: comm=mpdecision pid=2046 prio=113 success=1 target_cpu=000
-     kworker/u:1-21    [000] ...2  1212.729578: sched_switch: prev_comm=kworker/u:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557   [000] d..4  1212.729597: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/0:2H-557   [000] ...2  1212.729600: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=D ==> next_comm=mpdecision next_pid=2046 next_prio=113
-      mpdecision-2046  [000] ...2  1212.729801: sched_switch: prev_comm=mpdecision prev_pid=2046 prev_prio=113 prev_state=S ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] ...2  1212.730104: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730134: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730154: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.730176: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730201: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730220: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.730241: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1212.730262: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730280: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1212.730303: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.730638: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.730669: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7     [000] d..6  1212.730707: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7     [000] ...2  1212.730728: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] ...2  1212.730916: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.731632: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.731661: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7     [000] d..6  1212.731702: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7     [000] ...2  1212.731722: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] ...2  1212.731832: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h6  1212.732685: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.732714: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7     [000] d..6  1212.732747: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7     [000] ...2  1212.732767: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17    [000] d..4  1212.732810: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-    kworker/0:1H-17    [000] ...2  1212.732829: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557   [000] ...2  1212.732854: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1212.876266: sched_wakeup: comm=RILSender0 pid=1365 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1212.876284: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1212.876316: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=RILSender0 next_pid=1365 next_prio=120
-      RILSender0-1365  [000] ...2  1212.876415: sched_switch: prev_comm=RILSender0 prev_pid=1365 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1212.876454: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.089569: sched_wakeup: comm=Thread-625 pid=5750 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1213.089587: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.089622: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Thread-625 next_pid=5750 next_prio=120
-      Thread-625-5750  [000] ...2  1213.089842: sched_switch: prev_comm=Thread-625 prev_pid=5750 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1213.089879: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.327439: sched_wakeup: comm=pandora.android pid=5395 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] dNh4  1213.327455: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.327487: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231  [000] ...2  1213.327518: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395  [000] d..4  1213.327718: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395  [000] ...2  1213.327739: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780   [000] ...2  1213.327763: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=D ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395  [000] d..3  1213.327781: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395  [000] ...2  1213.327795: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780   [000] d..4  1213.328056: sched_wakeup: comm=Binder_1 pid=878 prio=120 success=1 target_cpu=000
-        Binder_1-780   [000] ...2  1213.328095: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=878 next_prio=120
-        Binder_1-878   [000] d..4  1213.328263: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
-        Binder_1-878   [000] ...2  1213.328345: sched_switch: prev_comm=Binder_1 prev_pid=878 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780   [000] ...2  1213.328558: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395  [000] ...2  1213.328743: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328773: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328793: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1213.328821: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328846: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328866: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1213.328891: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d..4  1213.328913: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.328931: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3     [000] ...2  1213.328964: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0     [000] d.h4  1213.465138: sched_wakeup: comm=atrace pid=14446 prio=120 success=1 target_cpu=000
-          <idle>-0     [000] ...2  1213.465171: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=atrace next_pid=14446 next_prio=120
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_extracted_tgids b/systrace/catapult/systrace/systrace/test_data/atrace_extracted_tgids
deleted file mode 100644
index 1084fba..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_extracted_tgids
+++ /dev/null
@@ -1 +0,0 @@
-{'22503': '18089', '1868': '1772', '10458': '1772', '429': '429', '234': '234', '18956': '18949', '18957': '18949', '18954': '18949', '18955': '18949', '5980': '1370', '344': '344', '345': '345', '346': '346', '340': '340', '341': '341', '342': '342', '343': '343', '3723': '450', '22184': '1760', '349': '349', '411': '406', '2912': '1483', '2913': '1483', '1793': '1772', '1790': '1772', '1797': '1483', '1490': '1393', '1397': '1393', '1492': '1483', '1493': '1483', '1494': '1483', '1495': '1483', '1496': '858', '1497': '1483', '1498': '1483', '18686': '454', '24304': '24304', '1395': '1393', '1068': '1068', '422': '422', '1704': '1500', '5262': '1772', '425': '425', '6654': '1370', '25224': '25224', '424': '424', '868': '858', '1669': '1655', '1668': '1655', '1667': '1655', '1666': '1655', '294': '294', '295': '295', '1663': '1655', '2708': '2579', '1660': '1655', '1129': '1124', '1628': '1483', '3776': '858', '1081': '1079', '1080': '1079', '1124': '1124', '1127': '1124', '270': '270', '271': '271', '272': '272', '273': '273', '274': '274', '275': '275', '276': '276', '277': '277', '278': '278', '279': '279', '25115': '25115', '583': '444', '3386': '858', '11689': '8269', '2544': '1655', '2548': '1655', '524': '450', '525': '450', '526': '450', '527': '450', '520': '450', '521': '450', '522': '450', '523': '450', '1403': '1393', '1402': '1393', '1016': '445', '1017': '445', '1407': '1393', '1406': '1393', '1405': '1393', '1013': '445', '303': '303', '1339': '858', '7516': '858', '1232': '1124', '2445': '1760', '25227': '25227', '442': '442', '2761': '2761', '421': '421', '447': '447', '446': '446', '445': '445', '305': '305', '108': '108', '109': '109', '18101': '18089', '18100': '18089', '8280': '8269', '2102': '1772', '102': '102', '103': '103', '100': '100', '101': '101', '106': '106', '107': '107', '104': '104', '105': '105', '1849': '1500', '1848': '1500', '906': '906', '907': '907', '905': '905', '33': '33', '1842': '1500', '31': '31', '30': '30', '1847': '1500', '1536': '858', '1535': '1393', '246': '246', '1533': '1393', '1532': '1393', '1531': '1500', '21920': '1370', '24281': '24281', '437': '437', '434': '434', '1512': '1500', '2161': '1370', '1940': '1772', '1539': '1458', '2162': '1772', '2615': '1655', '2614': '1760', '2612': '1760', '2611': '2579', '423': '423', '335': '335', '337': '337', '18450': '18089', '331': '331', '19187': '1370', '333': '333', '332': '332', '5136': '1500', '23246': '23233', '2087': '1772', '23240': '23233', '23241': '23233', '23242': '23233', '23243': '23233', '854': '439', '850': '439', '851': '439', '852': '439', '853': '439', '858': '858', '88': '88', '1375': '858', '541': '442', '2688': '2579', '6': '6', '2684': '2579', '2685': '2579', '23398': '1124', '2683': '2579', '49': '49', '846': '439', '1374': '858', '3555': '858', '5424': '445', '99': '99', '98': '98', '2245': '858', '91': '91', '90': '90', '93': '93', '92': '92', '95': '95', '94': '94', '14143': '1760', '96': '96', '1623': '1471', '1622': '1483', '1621': '1483', '5181': '1500', '1627': '1483', '2578': '2558', '1625': '1483', '1624': '1483', '348': '348', '5189': '1500', '5427': '445', '4469': '442', '20228': '18649', '559': '442', '774': '405', '11180': '858', '22758': '18649', '18670': '18649', '238': '238', '239': '239', '24337': '1124', '235': '235', '22751': '18649', '22750': '18649', '236': '236', '22752': '18649', '22755': '18649', '231': '231', '232': '232', '22756': '18649', '1050': '858', '1051': '445', '1052': '858', '237': '237', '230': '230', '233': '233', '2705': '2579', '1692': '1370', '1693': '1500', '2704': '2579', '1754': '1655', '5928': '858', '502': '450', '1579': '1483', '614': '457', '12281': '1772', '4468': '442', '2565': '2558', '1887': '405', '1886': '1500', '1885': '1760', '1438': '445', '1882': '1772', '11048': '1370', '2123': '1370', '80': '80', '1491': '1471', '2082': '1370', '3116': '1772', '3114': '1370', '1288': '1124', '1028': '858', '1470': '1458', '1471': '1471', '1476': '1458', '1475': '1471', '1478': '1471', '1479': '1471', '680': '452', '23200': '23187', '23201': '23187', '2659': '2579', '2711': '2579', '2716': '2579', '1301': '1124', '23206': '23187', '2715': '2579', '2653': '2579', '2652': '2579', '2651': '2579', '2650': '2579', '2657': '2579', '2655': '2579', '873': '871', '23590': '453', '23591': '453', '23593': '453', '498': '450', '499': '436', '135': '135', '134': '134', '494': '450', '495': '450', '218': '218', '497': '450', '490': '450', '491': '450', '492': '450', '493': '450', '24': '24', '2037': '1772', '26': '26', '27': '27', '1836': '1655', '22': '22', '23': '23', '1838': '1655', '1839': '1772', '28': '28', '29': '29', '1370': '1370', '405': '405', '404': '404', '403': '403', '402': '402', '1377': '1370', '451': '451', '1378': '1370', '452': '452', '453': '453', '879': '877', '3': '3', '454': '454', '8298': '8269', '2450': '858', '11274': '8269', '9': '9', '1951': '1772', '456': '456', '2712': '2579', '9701': '858', '23370': '1124', '18969': '18089', '8290': '8269', '18964': '18949', '18962': '18949', '18961': '18949', '371': '364', '370': '364', '372': '372', '821': '442', '820': '442', '1314': '858', '1334': '858', '179': '179', '18665': '18649', '18660': '18649', '18661': '18649', '1483': '1483', '1482': '1471', '1481': '1471', '1480': '1471', '397': '397', '9011': '1772', '1485': '1471', '394': '366', '82': '82', '83': '83', '1489': '1483', '398': '398', '86': '86', '87': '87', '84': '84', '85': '85', '797': '442', '796': '442', '5250': '1500', '1710': '1655', '1716': '1655', '415': '405', '1718': '1655', '799': '442', '7': '7', '1655': '1655', '3214': '1760', '298': '298', '18690': '454', '1133': '1124', '1772': '1772', '1131': '1124', '299': '299', '1137': '1124', '1136': '1124', '1135': '1124', '1134': '1124', '245': '245', '244': '244', '247': '247', '18340': '18089', '241': '241', '3156': '1772', '243': '243', '19309': '1760', '249': '249', '248': '248', '1983': '1772', '1437': '1437', '201': '201', '1430': '1124', '2579': '2579', '2577': '1655', '3213': '1760', '2570': '2558', '519': '450', '518': '450', '1009': '445', '1008': '405', '511': '450', '510': '450', '513': '450', '512': '450', '515': '450', '514': '450', '517': '450', '516': '450', '2594': '2579', '459': '459', '1224': '1124', '2590': '2579', '2591': '2579', '53': '53', '450': '450', '5234': '1471', '2714': '2579', '8058': '1370', '2598': '2579', '1345': '1345', '2453': '1370', '457': '457', '3702': '450', '25228': '465', '8294': '8269', '1870': '1655', '178': '178', '177': '177', '176': '176', '175': '175', '174': '174', '173': '173', '172': '172', '171': '171', '170': '170', '2883': '2883', '3200': '858', '2886': '2883', '3775': '858', '2441': '858', '69': '69', '895': '858', '2888': '2883', '3774': '858', '4463': '442', '1500': '1500', '1501': '1483', '871': '871', '297': '297', '1509': '1500', '6367': '1772', '2626': '2579', '2625': '1760', '2628': '2579', '2629': '2579', '1919': '1500', '1911': '1772', '1910': '1772', '1913': '1772', '1912': '1772', '1915': '1500', '1914': '1772', '23237': '23233', '11': '11', '10': '10', '3086': '1370', '15': '15', '14': '14', '16': '16', '19': '19', '18': '18', '25214': '8269', '862': '858', '865': '858', '5712': '1772', '7568': '858', '866': '858', '18949': '18949', '2699': '2579', '2698': '2579', '2697': '2579', '2694': '2579', '883': '858', '882': '877', '881': '877', '880': '880', '887': '457', '886': '858', '885': '858', '884': '858', '889': '457', '888': '858', '3908': '442', '1972': '1370', '1607': '1483', '1970': '1772', '1011': '445', '11181': '858', '496': '450', '18685': '454', '3234': '1760', '1616': '1500', '1617': '1471', '1614': '1471', '1967': '1772', '1613': '1370', '322': '322', '323': '323', '320': '320', '321': '321', '326': '326', '327': '327', '324': '324', '325': '325', '433': '433', '328': '328', '329': '329', '18655': '18649', '18654': '18649', '18657': '18649', '18656': '18649', '205': '205', '204': '204', '207': '207', '772': '405', '209': '209', '208': '208', '18659': '18649', '18658': '18649', '1340': '858', '77': '77', '3354': '436', '75': '75', '74': '74', '73': '73', '72': '72', '71': '71', '70': '70', '79': '79', '78': '78', '2': '2', '23239': '23233', '20067': '1500', '1040': '858', '1047': '858', '1043': '858', '1045': '858', '1044': '858', '1048': '858', '2235': '1760', '12764': '1760', '3575': '442', '1768': '1760', '1769': '1760', '4122': '442', '1760': '1760', '1766': '1760', '1767': '1760', '1765': '1760', '216': '216', '1268': '1268', '2713': '2579', '1267': '858', '2710': '2579', '13400': '1655', '2096': '1760', '2090': '1772', '2093': '1471', '3170': '858', '4470': '442', '3656': '450', '23233': '23233', '8753': '8269', '2717': '2579', '2524': '1500', '1542': '1458', '2520': '1500', '2486': '1760', '2487': '1760', '2484': '1760', '2485': '1760', '2483': '1760', '1548': '1458', '1549': '1458', '4494': '442', '1469': '1458', '368': '364', '1465': '1458', '8': '8', '1467': '1458', '1466': '1458', '1461': '1458', '2718': '2579', '1463': '1458', '23604': '1760', '869': '858', '1315': '1124', '2719': '2579', '2709': '2579', '2461': '1772', '5148': '1471', '1024': '858', '5146': '1471', '18097': '18089', '2707': '2579', '2706': '2579', '2702': '2579', '1014': '445', '12': '12', '8272': '8269', '18095': '18089', '1015': '445', '13927': '1370', '219': '219', '25219': '25219', '25218': '858', '4230': '436', '777': '405', '5740': '5740', '25181': '25181', '1023': '858', '1825': '1760', '1010': '445', '1827': '1760', '1821': '1500', '1822': '1500', '414': '405', '2069': '1471', '416': '405', '410': '406', '1389': '1370', '412': '406', '413': '406', '1384': '1370', '1385': '1124', '1386': '1370', '361': '361', '1184': '1124', '1382': '1370', '1383': '1370', '319': '319', '318': '318', '18693': '454', '313': '313', '312': '312', '311': '311', '310': '310', '317': '317', '316': '316', '315': '315', '314': '314', '1921': '1772', '1922': '1772', '448': '448', '867': '858', '369': '364', '24678': '24678', '20693': '18089', '784': '784', '808': '442', '2666': '2579', '2667': '2579', '2589': '2579', '2665': '2579', '2662': '2579', '2663': '2579', '2660': '2579', '2661': '2579', '366': '366', '364': '364', '362': '362', '363': '363', '360': '360', '2669': '2579', '440': '440', '12042': '8269', '2664': '2579', '1331': '858', '22782': '1124', '97': '97', '380': '364', '381': '364', '406': '406', '5133': '445', '528': '450', '20': '20', '444': '444', '9009': '1370', '1770': '1760', '4758': '1483', '4759': '1483', '1647': '1483', '5248': '1471', '1725': '1655', '5242': '1471', '5979': '1370', '3610': '437', '1072': '858', '8281': '8269', '1042': '858', '60': '60', '775': '405', '4631': '1483', '259': '259', '64': '64', '65': '65', '66': '66', '67': '67', '252': '252', '253': '253', '250': '250', '251': '251', '256': '256', '257': '257', '254': '254', '255': '255', '2568': '2558', '24358': '1124', '1426': '1124', '1429': '858', '2560': '2558', '1580': '1483', '2562': '2558', '24357': '1124', '24356': '1124', '24355': '1124', '2566': '2558', '1038': '858', '18958': '18949', '508': '450', '509': '450', '506': '450', '507': '450', '504': '450', '505': '450', '23245': '23233', '503': '450', '500': '450', '2001': '1772', '2586': '1655', '1359': '1345', '2584': '2579', '469': '465', '468': '465', '785': '785', '465': '465', '464': '451', '467': '465', '466': '466', '461': '461', '1355': '1345', '1354': '1345', '1861': '1655', '901': '436', '168': '168', '169': '169', '280': '280', '164': '164', '165': '165', '166': '166', '167': '167', '160': '160', '161': '161', '162': '162', '163': '163', '8289': '8269', '1457': '858', '2898': '2883', '864': '858', '2895': '2883', '2894': '2883', '2897': '2883', '2891': '2883', '2890': '2883', '2893': '2883', '2892': '2883', '1454': '858', '529': '450', '2108': '1760', '1519': '1500', '1518': '1500', '32': '32', '2103': '1370', '1514': '1500', '2516': '1471', '286': '286', '1458': '1458', '2106': '1370', '1513': '1500', '2104': '1760', '10168': '8269', '2634': '2579', '8278': '8269', '2631': '2579', '2630': '2579', '2633': '2579', '1097': '858', '23187': '23187', '18765': '858', '1810': '1471', '1811': '1471', '878': '877', '1813': '1471', '876': '871', '877': '877', '874': '871', '875': '871', '872': '872', '6410': '858', '870': '858', '441': '441', '7777': '1655', '7776': '1655', '7775': '1655', '7773': '1655', '10769': '8269', '18764': '858', '890': '457', '891': '858', '892': '858', '893': '858', '894': '858', '438': '438', '896': '858', '897': '436', '899': '858', '439': '439', '3186': '858', '436': '436', '9768': '8269', '63': '63', '1609': '1471', '435': '435', '4155': '442', '18089': '18089', '4158': '442', '25094': '25094', '3220': '1760', '3223': '1760', '3222': '1760', '356': '356', '355': '355', '354': '354', '52': '52', '430': '430', '803': '803', '908': '436', '801': '442', '431': '431', '807': '442', '1788': '1772', '18099': '18089', '18098': '18089', '212': '212', '213': '213', '211': '211', '18093': '18089', '1781': '1772', '18763': '858', '1783': '1772', '1784': '1772', '18096': '18089', '1786': '1772', '18649': '18649', '463': '463', '3329': '1370', '1033': '858', '338': '338', '1775': '1760', '76': '76', '1776': '1772', '1771': '1760', '4702': '1483', '1078': '858', '1079': '1079', '1076': '858', '1077': '858', '1074': '858', '1075': '858', '1779': '1772', '1073': '858', '484': '450', '1071': '858', '289': '289', '288': '288', '3750': '858', '281': '281', '1675': '1655', '283': '283', '282': '282', '285': '285', '284': '284', '287': '287', '1673': '1655', '1094': '858', '1096': '858', '336': '336', '2498': '1772', '330': '330', '263': '263', '262': '262', '261': '261', '260': '260', '267': '267', '266': '266', '265': '265', '264': '264', '59': '59', '269': '269', '268': '268', '18368': '18089', '58': '58', '2550': '1655', '1550': '1393', '2552': '1655', '1552': '1124', '2554': '1655', '1554': '1124', '61': '61', '1559': '1483', '54': '54', '57': '57', '56': '56', '2495': '1772', '2494': '1772', '2497': '1772', '2496': '1772', '2558': '2558', '535': '450', '24912': '24912', '533': '450', '532': '450', '531': '450', '530': '450', '24918': '24918', '1412': '1393', '1415': '858', '539': '466', '538': '461', '1322': '1124', '1323': '1124', '2475': '1760', '2473': '1760', '1327': '1124', '200': '200', '5151': '1458', '5152': '1471', '203': '203', '50': '50', '68': '68', '776': '405', '111': '111', '110': '110', '1907': '1772', '771': '405', '5': '5', '9356': '8269', '1858': '1760', '1859': '1500', '25194': '25194', '5134': '445', '536': '450', '1850': '1500', '16865': '1370', '1852': '1500', '1853': '1500', '1854': '1500', '1857': '1772', '1524': '1500', '534': '450', '1398': '858', '2073': '1471', '2072': '1471', '2071': '1471', '2070': '1471', '1393': '1393', '1392': '1370', '427': '427', '426': '426', '308': '308', '309': '309', '2607': '1655', '2600': '1655', '2602': '2579', '300': '300', '301': '301', '302': '302', '19192': '1370', '304': '304', '2609': '2579', '306': '306', '778': '405', '23253': '23253', '1035': '858', '4114': '436', '4112': '436', '4113': '436', '22382': '22382', '458': '458', '847': '439', '3343': '435', '3462': '442', '296': '296', '55': '55', '18869': '1772', '849': '439', '848': '439', '2671': '2579', '2670': '1760', '2672': '2579', '1428': '858', '24767': '24767', '1581': '405', '7100': '858', '20230': '18649', '62': '62', '81': '81', '487': '450', '240': '240', '258': '258', '2567': '2558', '23400': '23400', '23401': '1124', '1585': '858', '485': '450', '1986': '1760', '1738': '1345', '3216': '1760', '3217': '1760', '1982': '1370', '3211': '1760', '18697': '18649', '1637': '1500', '5232': '1500', '3218': '1760', '3219': '1760', '1737': '1655', '482': '435', '1039': '858', '480': '480', '1046': '858', '3602': '450', '2811': '858', '3604': '437', '1036': '858', '3608': '437', '1041': '858', '242': '242', '2183': '1760', '229': '229', '228': '228', '227': '227', '226': '226', '225': '225', '224': '224', '223': '223', '222': '222', '221': '221', '220': '220', '1025': '858', '393': '393', '1027': '858', '1026': '858', '1021': '445', '2272': '858', '8269': '8269', '1333': '858', '5425': '445', '1187': '1124', '17951': '1760', '5426': '445', '1182': '1124', '3372': '436', '1037': '858', '89': '89', '1034': '858', '1746': '1483', '501': '450', '396': '366', '605': '605', '8172': '858', '2438': '1370', '155': '155', '395': '366', '157': '157', '156': '156', '159': '159', '158': '158', '2585': '1655', '2435': '858', '1898': '1760', '1899': '1500', '8279': '8269', '15349': '8269', '8277': '8269', '8276': '8269', '8275': '8269', '3733': '858', '399': '399', '1892': '1655', '2136': '1772', '2135': '1370', '2132': '1772', '48': '48', '2131': '1370', '46': '46', '47': '47', '44': '44', '45': '45', '42': '42', '40': '40', '41': '41', '1682': '1483', '1443': '1370', '1442': '1370', '1012': '445', '3201': '858', '1449': '858', '477': '450', '2727': '2579', '2649': '2579', '2725': '2579', '5164': '1471', '5165': '1500', '2720': '2579', '2640': '2579', '606': '606', '475': '437', '486': '463', '23198': '23187', '8060': '1772', '488': '450', '23194': '23187', '23195': '23187', '23196': '23187', '23197': '23187', '483': '463', '23191': '23187', '23589': '453', '11310': '1655', '1800': '1483', '3789': '450', '1809': '1471', '1364': '1345', '1365': '1345', '1363': '1345', '1360': '1345', '1851': '1500', '479': '450', '1368': '1345', '3198': '2579'}
\ No newline at end of file
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_extracted_threads b/systrace/catapult/systrace/systrace/test_data/atrace_extracted_threads
deleted file mode 100644
index b649fbf..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_extracted_threads
+++ /dev/null
@@ -1 +0,0 @@
-{1: '/init', 2: 'kthreadd', 3: 'ksoftirqd/0', 7: 'kworker/u:0H', 8: 'migration/0', 13: 'khelper', 14: 'netns'}
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_fixed_tgids b/systrace/catapult/systrace/systrace/test_data/atrace_fixed_tgids
deleted file mode 100644
index 92456d5..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_fixed_tgids
+++ /dev/null
@@ -1,127 +0,0 @@
-# tracer: nop
-#
-# entries-in-buffer/entries-written: 116/116   #P:1
-#
-#                              _-----=> irqs-off
-#                             / _----=> need-resched
-#                            | / _---=> hardirq/softirq
-#                            || / _--=> preempt-depth
-#                            ||| /     delay
-#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
-#              | |       |   ||||       |         |
-          atrace-14446  (-----) [000] ...2  1212.465062: sched_switch: prev_comm=atrace prev_pid=14446 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.465074: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465082: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.465092: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.465102: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465126: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.465132: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.465139: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465145: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.465227: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h5  1212.465297: sched_wakeup: comm=adbd pid=212 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465306: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=adbd next_pid=212 next_prio=120
-adbd-212 ( 212) [000] d..4  1212.465329: sched_wakeup: comm=adbd pid=209 prio=120 success=1 target_cpu=000
-adbd-212 ( 212) [000] ...2  1212.465348: sched_switch: prev_comm=adbd prev_pid=212 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=209 next_prio=120
-adbd-209 ( 209) [000] d..4  1212.465395: sched_wakeup: comm=adbd pid=211 prio=120 success=1 target_cpu=000
-adbd-209 ( 209) [000] ...2  1212.465441: sched_switch: prev_comm=adbd prev_pid=209 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=211 next_prio=120
-adbd-211 ( 211) [000] ...2  1212.465448: sched_switch: prev_comm=adbd prev_pid=211 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h5  1212.574554: sched_wakeup: comm=sensors.qcom pid=292 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.574566: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=sensors.qcom next_pid=292 next_prio=120
-    sensors.qcom-292    (-----) [000] ...2  1212.574665: sched_switch: prev_comm=sensors.qcom prev_pid=292 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447  (-----) [000] d..4  1212.574797: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447  (-----) [000] ...2  1212.574802: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593   (-----) [000] ...2  1212.574819: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=D ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447  (-----) [000] d..3  1212.574823: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447  (-----) [000] ...2  1212.574827: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593   (-----) [000] d..4  1212.574865: sched_wakeup: comm=sensors.qcom pid=760 prio=120 success=1 target_cpu=000
-    sensors.qcom-1593   (-----) [000] ...2  1212.574876: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=760 next_prio=120
-    sensors.qcom-760    (-----) [000] d..4  1212.574905: sched_wakeup: comm=system_server pid=782 prio=118 success=1 target_cpu=000
-    sensors.qcom-760    (-----) [000] ...2  1212.574917: sched_switch: prev_comm=sensors.qcom prev_pid=760 prev_prio=120 prev_state=S ==> next_comm=system_server next_pid=782 next_prio=118
-   system_server-782    (-----) [000] d..4  1212.574981: sched_wakeup: comm=system_server pid=785 prio=118 success=1 target_cpu=000
-   system_server-782    (-----) [000] ...2  1212.575009: sched_switch: prev_comm=system_server prev_pid=782 prev_prio=118 prev_state=S ==> next_comm=system_server next_pid=785 next_prio=118
-system_server-785 ( 785) [000] ...2  1212.575045: sched_switch: prev_comm=system_server prev_pid=785 prev_prio=118 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447  (-----) [000] ...3  1212.575143: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=x ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.575153: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.575159: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.575167: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.575175: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.575181: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.575188: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.575195: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.575201: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.575211: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h4  1212.649601: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.649614: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231   (-----) [000] ...2  1212.649630: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h6  1212.729539: sched_wakeup: comm=kworker/u:1 pid=21 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] dNs6  1212.729550: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.729563: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:1 next_pid=21 next_prio=120
-     kworker/u:1-21        (-----) [000] d..5  1212.729571: sched_wakeup: comm=mpdecision pid=2046 prio=113 success=1 target_cpu=000
-     kworker/u:1-21        (-----) [000] ...2  1212.729578: sched_switch: prev_comm=kworker/u:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557       (-----) [000] d..4  1212.729597: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/0:2H-557       (-----) [000] ...2  1212.729600: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=D ==> next_comm=mpdecision next_pid=2046 next_prio=113
-      mpdecision-2046      (-----) [000] ...2  1212.729801: sched_switch: prev_comm=mpdecision prev_pid=2046 prev_prio=113 prev_state=S ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] ...2  1212.730104: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1212.730134: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730154: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.730176: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1212.730201: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730220: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.730241: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1212.730262: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730280: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1212.730303: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h6  1212.730638: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730669: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-kworker/u:0H-7 ( 7) [000] d..6  1212.730707: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-kworker/u:0H-7 ( 7) [000] ...2  1212.730728: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] ...2  1212.730916: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h6  1212.731632: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.731661: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-kworker/u:0H-7 ( 7) [000] d..6  1212.731702: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-kworker/u:0H-7 ( 7) [000] ...2  1212.731722: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] ...2  1212.731832: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h6  1212.732685: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.732714: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-kworker/u:0H-7 ( 7) [000] d..6  1212.732747: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-kworker/u:0H-7 ( 7) [000] ...2  1212.732767: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] d..4  1212.732810: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-    kworker/0:1H-17        (-----) [000] ...2  1212.732829: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557       (-----) [000] ...2  1212.732854: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1212.876266: sched_wakeup: comm=RILSender0 pid=1365 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] dNh4  1212.876284: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.876316: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=RILSender0 next_pid=1365 next_prio=120
-RILSender0-1365 ( 1345) [000] ...2  1212.876415: sched_switch: prev_comm=RILSender0 prev_pid=1365 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231      (-----) [000] ...2  1212.876454: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1213.089569: sched_wakeup: comm=Thread-625 pid=5750 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] dNh4  1213.089587: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.089622: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Thread-625 next_pid=5750 next_prio=120
-      Thread-625-5750      (-----) [000] ...2  1213.089842: sched_switch: prev_comm=Thread-625 prev_pid=5750 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231      (-----) [000] ...2  1213.089879: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1213.327439: sched_wakeup: comm=pandora.android pid=5395 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] dNh4  1213.327455: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.327487: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231      (-----) [000] ...2  1213.327518: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395      (-----) [000] d..4  1213.327718: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395      (-----) [000] ...2  1213.327739: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780       (-----) [000] ...2  1213.327763: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=D ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395      (-----) [000] d..3  1213.327781: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395      (-----) [000] ...2  1213.327795: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780       (-----) [000] d..4  1213.328056: sched_wakeup: comm=Binder_1 pid=878 prio=120 success=1 target_cpu=000
-        Binder_1-780       (-----) [000] ...2  1213.328095: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=878 next_prio=120
-Binder_1-878 ( 877) [000] d..4  1213.328263: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
-Binder_1-878 ( 877) [000] ...2  1213.328345: sched_switch: prev_comm=Binder_1 prev_pid=878 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780       (-----) [000] ...2  1213.328558: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395      (-----) [000] ...2  1213.328743: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1213.328773: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.328793: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1213.328821: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1213.328846: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.328866: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1213.328891: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1213.328913: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.328931: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-ksoftirqd/0-3 ( 3) [000] ...2  1213.328964: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1213.465138: sched_wakeup: comm=atrace pid=14446 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.465171: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=atrace next_pid=14446 next_prio=120
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_missing_tgids b/systrace/catapult/systrace/systrace/test_data/atrace_missing_tgids
deleted file mode 100644
index c662482..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_missing_tgids
+++ /dev/null
@@ -1,127 +0,0 @@
-# tracer: nop
-#
-# entries-in-buffer/entries-written: 116/116   #P:1
-#
-#                              _-----=> irqs-off
-#                             / _----=> need-resched
-#                            | / _---=> hardirq/softirq
-#                            || / _--=> preempt-depth
-#                            ||| /     delay
-#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
-#              | |       |   ||||       |         |
-          atrace-14446  (-----) [000] ...2  1212.465062: sched_switch: prev_comm=atrace prev_pid=14446 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.465074: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465082: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3      (-----) [000] ...2  1212.465092: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.465102: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465126: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3      (-----) [000] ...2  1212.465132: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.465139: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465145: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3      (-----) [000] ...2  1212.465227: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h5  1212.465297: sched_wakeup: comm=adbd pid=212 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.465306: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=adbd next_pid=212 next_prio=120
-            adbd-212    (-----) [000] d..4  1212.465329: sched_wakeup: comm=adbd pid=209 prio=120 success=1 target_cpu=000
-            adbd-212    (-----) [000] ...2  1212.465348: sched_switch: prev_comm=adbd prev_pid=212 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=209 next_prio=120
-            adbd-209    (-----) [000] d..4  1212.465395: sched_wakeup: comm=adbd pid=211 prio=120 success=1 target_cpu=000
-            adbd-209    (-----) [000] ...2  1212.465441: sched_switch: prev_comm=adbd prev_pid=209 prev_prio=120 prev_state=S ==> next_comm=adbd next_pid=211 next_prio=120
-            adbd-211    (-----) [000] ...2  1212.465448: sched_switch: prev_comm=adbd prev_pid=211 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h5  1212.574554: sched_wakeup: comm=sensors.qcom pid=292 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.574566: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=sensors.qcom next_pid=292 next_prio=120
-    sensors.qcom-292    (-----) [000] ...2  1212.574665: sched_switch: prev_comm=sensors.qcom prev_pid=292 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447  (-----) [000] d..4  1212.574797: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447  (-----) [000] ...2  1212.574802: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593   (-----) [000] ...2  1212.574819: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=D ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447  (-----) [000] d..3  1212.574823: sched_wakeup: comm=sensors.qcom pid=1593 prio=120 success=1 target_cpu=000
-    sensors.qcom-14447  (-----) [000] ...2  1212.574827: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=R+ ==> next_comm=sensors.qcom next_pid=1593 next_prio=120
-    sensors.qcom-1593   (-----) [000] d..4  1212.574865: sched_wakeup: comm=sensors.qcom pid=760 prio=120 success=1 target_cpu=000
-    sensors.qcom-1593   (-----) [000] ...2  1212.574876: sched_switch: prev_comm=sensors.qcom prev_pid=1593 prev_prio=120 prev_state=S ==> next_comm=sensors.qcom next_pid=760 next_prio=120
-    sensors.qcom-760    (-----) [000] d..4  1212.574905: sched_wakeup: comm=system_server pid=782 prio=118 success=1 target_cpu=000
-    sensors.qcom-760    (-----) [000] ...2  1212.574917: sched_switch: prev_comm=sensors.qcom prev_pid=760 prev_prio=120 prev_state=S ==> next_comm=system_server next_pid=782 next_prio=118
-   system_server-782    (-----) [000] d..4  1212.574981: sched_wakeup: comm=system_server pid=785 prio=118 success=1 target_cpu=000
-   system_server-782    (-----) [000] ...2  1212.575009: sched_switch: prev_comm=system_server prev_pid=782 prev_prio=118 prev_state=S ==> next_comm=system_server next_pid=785 next_prio=118
-   system_server-785    (-----) [000] ...2  1212.575045: sched_switch: prev_comm=system_server prev_pid=785 prev_prio=118 prev_state=S ==> next_comm=sensors.qcom next_pid=14447 next_prio=120
-    sensors.qcom-14447  (-----) [000] ...3  1212.575143: sched_switch: prev_comm=sensors.qcom prev_pid=14447 prev_prio=120 prev_state=x ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.575153: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.575159: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3      (-----) [000] ...2  1212.575167: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.575175: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.575181: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3      (-----) [000] ...2  1212.575188: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d..4  1212.575195: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.575201: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3      (-----) [000] ...2  1212.575211: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h4  1212.649601: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.649614: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231   (-----) [000] ...2  1212.649630: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0      (-----) [000] d.h6  1212.729539: sched_wakeup: comm=kworker/u:1 pid=21 prio=120 success=1 target_cpu=000
-          <idle>-0      (-----) [000] dNs6  1212.729550: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-          <idle>-0      (-----) [000] ...2  1212.729563: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:1 next_pid=21 next_prio=120
-     kworker/u:1-21        (-----) [000] d..5  1212.729571: sched_wakeup: comm=mpdecision pid=2046 prio=113 success=1 target_cpu=000
-     kworker/u:1-21        (-----) [000] ...2  1212.729578: sched_switch: prev_comm=kworker/u:1 prev_pid=21 prev_prio=120 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557       (-----) [000] d..4  1212.729597: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/0:2H-557       (-----) [000] ...2  1212.729600: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=D ==> next_comm=mpdecision next_pid=2046 next_prio=113
-      mpdecision-2046      (-----) [000] ...2  1212.729801: sched_switch: prev_comm=mpdecision prev_pid=2046 prev_prio=113 prev_state=S ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] ...2  1212.730104: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1212.730134: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730154: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3         (-----) [000] ...2  1212.730176: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1212.730201: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730220: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3         (-----) [000] ...2  1212.730241: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1212.730262: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730280: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3         (-----) [000] ...2  1212.730303: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h6  1212.730638: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.730669: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7         (-----) [000] d..6  1212.730707: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7         (-----) [000] ...2  1212.730728: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] ...2  1212.730916: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h6  1212.731632: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.731661: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7         (-----) [000] d..6  1212.731702: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7         (-----) [000] ...2  1212.731722: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] ...2  1212.731832: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h6  1212.732685: sched_wakeup: comm=kworker/u:0H pid=7 prio=100 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.732714: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=kworker/u:0H next_pid=7 next_prio=100
-    kworker/u:0H-7         (-----) [000] d..6  1212.732747: sched_wakeup: comm=kworker/0:1H pid=17 prio=100 success=1 target_cpu=000
-    kworker/u:0H-7         (-----) [000] ...2  1212.732767: sched_switch: prev_comm=kworker/u:0H prev_pid=7 prev_prio=100 prev_state=D ==> next_comm=kworker/0:1H next_pid=17 next_prio=100
-    kworker/0:1H-17        (-----) [000] d..4  1212.732810: sched_wakeup: comm=kworker/0:2H pid=557 prio=100 success=1 target_cpu=000
-    kworker/0:1H-17        (-----) [000] ...2  1212.732829: sched_switch: prev_comm=kworker/0:1H prev_pid=17 prev_prio=100 prev_state=S ==> next_comm=kworker/0:2H next_pid=557 next_prio=100
-    kworker/0:2H-557       (-----) [000] ...2  1212.732854: sched_switch: prev_comm=kworker/0:2H prev_pid=557 prev_prio=100 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1212.876266: sched_wakeup: comm=RILSender0 pid=1365 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] dNh4  1212.876284: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1212.876316: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=RILSender0 next_pid=1365 next_prio=120
-      RILSender0-1365      (-----) [000] ...2  1212.876415: sched_switch: prev_comm=RILSender0 prev_pid=1365 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231      (-----) [000] ...2  1212.876454: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1213.089569: sched_wakeup: comm=Thread-625 pid=5750 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] dNh4  1213.089587: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.089622: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=Thread-625 next_pid=5750 next_prio=120
-      Thread-625-5750      (-----) [000] ...2  1213.089842: sched_switch: prev_comm=Thread-625 prev_pid=5750 prev_prio=120 prev_state=S ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231      (-----) [000] ...2  1213.089879: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1213.327439: sched_wakeup: comm=pandora.android pid=5395 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] dNh4  1213.327455: sched_wakeup: comm=MMHandlerThread pid=7231 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.327487: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=MMHandlerThread next_pid=7231 next_prio=120
- MMHandlerThread-7231      (-----) [000] ...2  1213.327518: sched_switch: prev_comm=MMHandlerThread prev_pid=7231 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395      (-----) [000] d..4  1213.327718: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395      (-----) [000] ...2  1213.327739: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780       (-----) [000] ...2  1213.327763: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=D ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395      (-----) [000] d..3  1213.327781: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
- pandora.android-5395      (-----) [000] ...2  1213.327795: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780       (-----) [000] d..4  1213.328056: sched_wakeup: comm=Binder_1 pid=878 prio=120 success=1 target_cpu=000
-        Binder_1-780       (-----) [000] ...2  1213.328095: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=878 next_prio=120
-        Binder_1-878       (-----) [000] d..4  1213.328263: sched_wakeup: comm=Binder_1 pid=780 prio=120 success=1 target_cpu=000
-        Binder_1-878       (-----) [000] ...2  1213.328345: sched_switch: prev_comm=Binder_1 prev_pid=878 prev_prio=120 prev_state=S ==> next_comm=Binder_1 next_pid=780 next_prio=120
-        Binder_1-780       (-----) [000] ...2  1213.328558: sched_switch: prev_comm=Binder_1 prev_pid=780 prev_prio=120 prev_state=S ==> next_comm=pandora.android next_pid=5395 next_prio=120
- pandora.android-5395      (-----) [000] ...2  1213.328743: sched_switch: prev_comm=pandora.android prev_pid=5395 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1213.328773: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.328793: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3         (-----) [000] ...2  1213.328821: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1213.328846: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.328866: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3         (-----) [000] ...2  1213.328891: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d..4  1213.328913: sched_wakeup: comm=ksoftirqd/0 pid=3 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.328931: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=ksoftirqd/0 next_pid=3 next_prio=120
-     ksoftirqd/0-3         (-----) [000] ...2  1213.328964: sched_switch: prev_comm=ksoftirqd/0 prev_pid=3 prev_prio=120 prev_state=S ==> next_comm=swapper/0 next_pid=0 next_prio=120
-          <idle>-0         (-----) [000] d.h4  1213.465138: sched_wakeup: comm=atrace pid=14446 prio=120 success=1 target_cpu=000
-          <idle>-0         (-----) [000] ...2  1213.465171: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=atrace next_pid=14446 next_prio=120
diff --git a/systrace/catapult/systrace/systrace/test_data/atrace_procfs_dump b/systrace/catapult/systrace/systrace/test_data/atrace_procfs_dump
deleted file mode 100644
index f1f0c76..0000000
--- a/systrace/catapult/systrace/systrace/test_data/atrace_procfs_dump
+++ /dev/null
@@ -1,1156 +0,0 @@
-proc/1/task/1
-/proc/10/task/10
-/proc/100/task/100
-/proc/101/task/101
-/proc/102/task/102
-/proc/103/task/103
-/proc/104/task/104
-/proc/105/task/105
-/proc/106/task/106
-/proc/1068/task/1068
-/proc/107/task/107
-/proc/1079/task/1079
-/proc/1079/task/1080
-/proc/1079/task/1081
-/proc/108/task/108
-/proc/109/task/109
-/proc/11/task/11
-/proc/110/task/110
-/proc/111/task/111
-/proc/1124/task/1124
-/proc/1124/task/1127
-/proc/1124/task/1129
-/proc/1124/task/1131
-/proc/1124/task/1133
-/proc/1124/task/1134
-/proc/1124/task/1135
-/proc/1124/task/1136
-/proc/1124/task/1137
-/proc/1124/task/1182
-/proc/1124/task/1184
-/proc/1124/task/1187
-/proc/1124/task/1224
-/proc/1124/task/1232
-/proc/1124/task/1288
-/proc/1124/task/1301
-/proc/1124/task/1315
-/proc/1124/task/1322
-/proc/1124/task/1323
-/proc/1124/task/1327
-/proc/1124/task/1385
-/proc/1124/task/1426
-/proc/1124/task/1430
-/proc/1124/task/1552
-/proc/1124/task/1554
-/proc/1124/task/22782
-/proc/1124/task/23370
-/proc/1124/task/23398
-/proc/1124/task/23401
-/proc/1124/task/24337
-/proc/1124/task/24355
-/proc/1124/task/24356
-/proc/1124/task/24357
-/proc/1124/task/24358
-/proc/12/task/12
-/proc/1268/task/1268
-/proc/134/task/134
-/proc/1345/task/1345
-/proc/1345/task/1354
-/proc/1345/task/1355
-/proc/1345/task/1359
-/proc/1345/task/1360
-/proc/1345/task/1363
-/proc/1345/task/1364
-/proc/1345/task/1365
-/proc/1345/task/1368
-/proc/1345/task/1738
-/proc/135/task/135
-/proc/1370/task/11048
-/proc/1370/task/1370
-/proc/1370/task/1377
-/proc/1370/task/1378
-/proc/1370/task/1382
-/proc/1370/task/1383
-/proc/1370/task/1384
-/proc/1370/task/1386
-/proc/1370/task/1389
-/proc/1370/task/1392
-/proc/1370/task/13927
-/proc/1370/task/1442
-/proc/1370/task/1443
-/proc/1370/task/1613
-/proc/1370/task/16865
-/proc/1370/task/1692
-/proc/1370/task/19187
-/proc/1370/task/19192
-/proc/1370/task/1972
-/proc/1370/task/1982
-/proc/1370/task/2082
-/proc/1370/task/2103
-/proc/1370/task/2106
-/proc/1370/task/2123
-/proc/1370/task/2131
-/proc/1370/task/2135
-/proc/1370/task/2161
-/proc/1370/task/21920
-/proc/1370/task/2438
-/proc/1370/task/2453
-/proc/1370/task/3086
-/proc/1370/task/3114
-/proc/1370/task/3329
-/proc/1370/task/5979
-/proc/1370/task/5980
-/proc/1370/task/6654
-/proc/1370/task/8058
-/proc/1370/task/9009
-/proc/1393/task/1393
-/proc/1393/task/1395
-/proc/1393/task/1397
-/proc/1393/task/1402
-/proc/1393/task/1403
-/proc/1393/task/1405
-/proc/1393/task/1406
-/proc/1393/task/1407
-/proc/1393/task/1412
-/proc/1393/task/1490
-/proc/1393/task/1532
-/proc/1393/task/1533
-/proc/1393/task/1535
-/proc/1393/task/1550
-/proc/14/task/14
-/proc/1437/task/1437
-/proc/1458/task/1458
-/proc/1458/task/1461
-/proc/1458/task/1463
-/proc/1458/task/1465
-/proc/1458/task/1466
-/proc/1458/task/1467
-/proc/1458/task/1469
-/proc/1458/task/1470
-/proc/1458/task/1476
-/proc/1458/task/1539
-/proc/1458/task/1542
-/proc/1458/task/1548
-/proc/1458/task/1549
-/proc/1458/task/5151
-/proc/1471/task/1471
-/proc/1471/task/1475
-/proc/1471/task/1478
-/proc/1471/task/1479
-/proc/1471/task/1480
-/proc/1471/task/1481
-/proc/1471/task/1482
-/proc/1471/task/1485
-/proc/1471/task/1491
-/proc/1471/task/1609
-/proc/1471/task/1614
-/proc/1471/task/1617
-/proc/1471/task/1623
-/proc/1471/task/1809
-/proc/1471/task/1810
-/proc/1471/task/1811
-/proc/1471/task/1813
-/proc/1471/task/2069
-/proc/1471/task/2070
-/proc/1471/task/2071
-/proc/1471/task/2072
-/proc/1471/task/2073
-/proc/1471/task/2093
-/proc/1471/task/2516
-/proc/1471/task/5146
-/proc/1471/task/5148
-/proc/1471/task/5152
-/proc/1471/task/5164
-/proc/1471/task/5234
-/proc/1471/task/5242
-/proc/1471/task/5248
-/proc/1483/task/1483
-/proc/1483/task/1489
-/proc/1483/task/1492
-/proc/1483/task/1493
-/proc/1483/task/1494
-/proc/1483/task/1495
-/proc/1483/task/1497
-/proc/1483/task/1498
-/proc/1483/task/1501
-/proc/1483/task/1559
-/proc/1483/task/1579
-/proc/1483/task/1580
-/proc/1483/task/1607
-/proc/1483/task/1621
-/proc/1483/task/1622
-/proc/1483/task/1624
-/proc/1483/task/1625
-/proc/1483/task/1627
-/proc/1483/task/1628
-/proc/1483/task/1647
-/proc/1483/task/1682
-/proc/1483/task/1746
-/proc/1483/task/1797
-/proc/1483/task/1800
-/proc/1483/task/2912
-/proc/1483/task/2913
-/proc/1483/task/4631
-/proc/1483/task/4702
-/proc/1483/task/4758
-/proc/1483/task/4759
-/proc/15/task/15
-/proc/1500/task/1500
-/proc/1500/task/1509
-/proc/1500/task/1512
-/proc/1500/task/1513
-/proc/1500/task/1514
-/proc/1500/task/1518
-/proc/1500/task/1519
-/proc/1500/task/1524
-/proc/1500/task/1531
-/proc/1500/task/1616
-/proc/1500/task/1637
-/proc/1500/task/1693
-/proc/1500/task/1704
-/proc/1500/task/1821
-/proc/1500/task/1822
-/proc/1500/task/1842
-/proc/1500/task/1847
-/proc/1500/task/1848
-/proc/1500/task/1849
-/proc/1500/task/1850
-/proc/1500/task/1851
-/proc/1500/task/1852
-/proc/1500/task/1853
-/proc/1500/task/1854
-/proc/1500/task/1859
-/proc/1500/task/1886
-/proc/1500/task/1899
-/proc/1500/task/1915
-/proc/1500/task/1919
-/proc/1500/task/20067
-/proc/1500/task/2520
-/proc/1500/task/2524
-/proc/1500/task/5136
-/proc/1500/task/5165
-/proc/1500/task/5181
-/proc/1500/task/5189
-/proc/1500/task/5232
-/proc/1500/task/5250
-/proc/155/task/155
-/proc/156/task/156
-/proc/157/task/157
-/proc/158/task/158
-/proc/159/task/159
-/proc/16/task/16
-/proc/160/task/160
-/proc/161/task/161
-/proc/162/task/162
-/proc/163/task/163
-/proc/164/task/164
-/proc/165/task/165
-/proc/1655/task/11310
-/proc/1655/task/13400
-/proc/1655/task/1655
-/proc/1655/task/1660
-/proc/1655/task/1663
-/proc/1655/task/1666
-/proc/1655/task/1667
-/proc/1655/task/1668
-/proc/1655/task/1669
-/proc/1655/task/1673
-/proc/1655/task/1675
-/proc/1655/task/1710
-/proc/1655/task/1716
-/proc/1655/task/1718
-/proc/1655/task/1725
-/proc/1655/task/1737
-/proc/1655/task/1754
-/proc/1655/task/1836
-/proc/1655/task/1838
-/proc/1655/task/1861
-/proc/1655/task/1870
-/proc/1655/task/1892
-/proc/1655/task/2544
-/proc/1655/task/2548
-/proc/1655/task/2550
-/proc/1655/task/2552
-/proc/1655/task/2554
-/proc/1655/task/2577
-/proc/1655/task/2585
-/proc/1655/task/2586
-/proc/1655/task/2600
-/proc/1655/task/2607
-/proc/1655/task/2615
-/proc/1655/task/7773
-/proc/1655/task/7775
-/proc/1655/task/7776
-/proc/1655/task/7777
-/proc/166/task/166
-/proc/167/task/167
-/proc/168/task/168
-/proc/169/task/169
-/proc/170/task/170
-/proc/171/task/171
-/proc/172/task/172
-/proc/173/task/173
-/proc/174/task/174
-/proc/175/task/175
-/proc/176/task/176
-/proc/1760/task/12764
-/proc/1760/task/14143
-/proc/1760/task/1760
-/proc/1760/task/1765
-/proc/1760/task/1766
-/proc/1760/task/1767
-/proc/1760/task/1768
-/proc/1760/task/1769
-/proc/1760/task/1770
-/proc/1760/task/1771
-/proc/1760/task/1775
-/proc/1760/task/17951
-/proc/1760/task/1825
-/proc/1760/task/1827
-/proc/1760/task/1858
-/proc/1760/task/1885
-/proc/1760/task/1898
-/proc/1760/task/19309
-/proc/1760/task/1986
-/proc/1760/task/2096
-/proc/1760/task/2104
-/proc/1760/task/2108
-/proc/1760/task/2183
-/proc/1760/task/22184
-/proc/1760/task/2235
-/proc/1760/task/23604
-/proc/1760/task/2445
-/proc/1760/task/2473
-/proc/1760/task/2475
-/proc/1760/task/2483
-/proc/1760/task/2484
-/proc/1760/task/2485
-/proc/1760/task/2486
-/proc/1760/task/2487
-/proc/1760/task/2612
-/proc/1760/task/2614
-/proc/1760/task/2625
-/proc/1760/task/2670
-/proc/1760/task/3211
-/proc/1760/task/3213
-/proc/1760/task/3214
-/proc/1760/task/3216
-/proc/1760/task/3217
-/proc/1760/task/3218
-/proc/1760/task/3219
-/proc/1760/task/3220
-/proc/1760/task/3222
-/proc/1760/task/3223
-/proc/1760/task/3234
-/proc/177/task/177
-/proc/1772/task/10458
-/proc/1772/task/12281
-/proc/1772/task/1772
-/proc/1772/task/1776
-/proc/1772/task/1779
-/proc/1772/task/1781
-/proc/1772/task/1783
-/proc/1772/task/1784
-/proc/1772/task/1786
-/proc/1772/task/1788
-/proc/1772/task/1790
-/proc/1772/task/1793
-/proc/1772/task/1839
-/proc/1772/task/1857
-/proc/1772/task/1868
-/proc/1772/task/1882
-/proc/1772/task/18869
-/proc/1772/task/1907
-/proc/1772/task/1910
-/proc/1772/task/1911
-/proc/1772/task/1912
-/proc/1772/task/1913
-/proc/1772/task/1914
-/proc/1772/task/1921
-/proc/1772/task/1922
-/proc/1772/task/1940
-/proc/1772/task/1951
-/proc/1772/task/1967
-/proc/1772/task/1970
-/proc/1772/task/1983
-/proc/1772/task/2001
-/proc/1772/task/2037
-/proc/1772/task/2087
-/proc/1772/task/2090
-/proc/1772/task/2102
-/proc/1772/task/2132
-/proc/1772/task/2136
-/proc/1772/task/2162
-/proc/1772/task/2461
-/proc/1772/task/2494
-/proc/1772/task/2495
-/proc/1772/task/2496
-/proc/1772/task/2497
-/proc/1772/task/2498
-/proc/1772/task/3116
-/proc/1772/task/3156
-/proc/1772/task/5262
-/proc/1772/task/5712
-/proc/1772/task/6367
-/proc/1772/task/8060
-/proc/1772/task/9011
-/proc/178/task/178
-/proc/179/task/179
-/proc/18/task/18
-/proc/18089/task/18089
-/proc/18089/task/18093
-/proc/18089/task/18095
-/proc/18089/task/18096
-/proc/18089/task/18097
-/proc/18089/task/18098
-/proc/18089/task/18099
-/proc/18089/task/18100
-/proc/18089/task/18101
-/proc/18089/task/18340
-/proc/18089/task/18368
-/proc/18089/task/18450
-/proc/18089/task/18969
-/proc/18089/task/20693
-/proc/18089/task/22503
-/proc/18649/task/18649
-/proc/18649/task/18654
-/proc/18649/task/18655
-/proc/18649/task/18656
-/proc/18649/task/18657
-/proc/18649/task/18658
-/proc/18649/task/18659
-/proc/18649/task/18660
-/proc/18649/task/18661
-/proc/18649/task/18665
-/proc/18649/task/18670
-/proc/18649/task/18697
-/proc/18649/task/20228
-/proc/18649/task/20230
-/proc/18649/task/22750
-/proc/18649/task/22751
-/proc/18649/task/22752
-/proc/18649/task/22755
-/proc/18649/task/22756
-/proc/18649/task/22758
-/proc/18949/task/18949
-/proc/18949/task/18954
-/proc/18949/task/18955
-/proc/18949/task/18956
-/proc/18949/task/18957
-/proc/18949/task/18958
-/proc/18949/task/18961
-/proc/18949/task/18962
-/proc/18949/task/18964
-/proc/19/task/19
-/proc/2/task/2
-/proc/20/task/20
-/proc/200/task/200
-/proc/201/task/201
-/proc/203/task/203
-/proc/204/task/204
-/proc/205/task/205
-/proc/207/task/207
-/proc/208/task/208
-/proc/209/task/209
-/proc/211/task/211
-/proc/212/task/212
-/proc/213/task/213
-/proc/216/task/216
-/proc/218/task/218
-/proc/219/task/219
-/proc/22/task/22
-/proc/220/task/220
-/proc/221/task/221
-/proc/222/task/222
-/proc/223/task/223
-/proc/22382/task/22382
-/proc/224/task/224
-/proc/225/task/225
-/proc/226/task/226
-/proc/227/task/227
-/proc/228/task/228
-/proc/229/task/229
-/proc/23/task/23
-/proc/230/task/230
-/proc/231/task/231
-/proc/23187/task/23187
-/proc/23187/task/23191
-/proc/23187/task/23194
-/proc/23187/task/23195
-/proc/23187/task/23196
-/proc/23187/task/23197
-/proc/23187/task/23198
-/proc/23187/task/23200
-/proc/23187/task/23201
-/proc/23187/task/23206
-/proc/232/task/232
-/proc/23233/task/23233
-/proc/23233/task/23237
-/proc/23233/task/23239
-/proc/23233/task/23240
-/proc/23233/task/23241
-/proc/23233/task/23242
-/proc/23233/task/23243
-/proc/23233/task/23245
-/proc/23233/task/23246
-/proc/23253/task/23253
-/proc/233/task/233
-/proc/234/task/234
-/proc/23400/task/23400
-/proc/235/task/235
-/proc/236/task/236
-/proc/237/task/237
-/proc/238/task/238
-/proc/239/task/239
-/proc/24/task/24
-/proc/240/task/240
-/proc/241/task/241
-/proc/242/task/242
-/proc/24281/task/24281
-/proc/243/task/243
-/proc/24304/task/24304
-/proc/244/task/244
-/proc/245/task/245
-/proc/246/task/246
-/proc/24678/task/24678
-/proc/247/task/247
-/proc/24767/task/24767
-/proc/248/task/248
-/proc/249/task/249
-/proc/24912/task/24912
-/proc/24918/task/24918
-/proc/250/task/250
-/proc/25094/task/25094
-/proc/251/task/251
-/proc/25115/task/25115
-/proc/25181/task/25181
-/proc/25194/task/25194
-/proc/252/task/252
-/proc/25219/task/25219
-/proc/25224/task/25224
-/proc/25227/task/25227
-/proc/253/task/253
-/proc/254/task/254
-/proc/255/task/255
-/proc/2558/task/2558
-/proc/2558/task/2560
-/proc/2558/task/2562
-/proc/2558/task/2565
-/proc/2558/task/2566
-/proc/2558/task/2567
-/proc/2558/task/2568
-/proc/2558/task/2570
-/proc/2558/task/2578
-/proc/256/task/256
-/proc/257/task/257
-/proc/2579/task/2579
-/proc/2579/task/2584
-/proc/2579/task/2589
-/proc/2579/task/2590
-/proc/2579/task/2591
-/proc/2579/task/2594
-/proc/2579/task/2598
-/proc/2579/task/2602
-/proc/2579/task/2609
-/proc/2579/task/2611
-/proc/2579/task/2626
-/proc/2579/task/2628
-/proc/2579/task/2629
-/proc/2579/task/2630
-/proc/2579/task/2631
-/proc/2579/task/2633
-/proc/2579/task/2634
-/proc/2579/task/2640
-/proc/2579/task/2649
-/proc/2579/task/2650
-/proc/2579/task/2651
-/proc/2579/task/2652
-/proc/2579/task/2653
-/proc/2579/task/2655
-/proc/2579/task/2657
-/proc/2579/task/2659
-/proc/2579/task/2660
-/proc/2579/task/2661
-/proc/2579/task/2662
-/proc/2579/task/2663
-/proc/2579/task/2664
-/proc/2579/task/2665
-/proc/2579/task/2666
-/proc/2579/task/2667
-/proc/2579/task/2669
-/proc/2579/task/2671
-/proc/2579/task/2672
-/proc/2579/task/2683
-/proc/2579/task/2684
-/proc/2579/task/2685
-/proc/2579/task/2688
-/proc/2579/task/2694
-/proc/2579/task/2697
-/proc/2579/task/2698
-/proc/2579/task/2699
-/proc/2579/task/2702
-/proc/2579/task/2704
-/proc/2579/task/2705
-/proc/2579/task/2706
-/proc/2579/task/2707
-/proc/2579/task/2708
-/proc/2579/task/2709
-/proc/2579/task/2710
-/proc/2579/task/2711
-/proc/2579/task/2712
-/proc/2579/task/2713
-/proc/2579/task/2714
-/proc/2579/task/2715
-/proc/2579/task/2716
-/proc/2579/task/2717
-/proc/2579/task/2718
-/proc/2579/task/2719
-/proc/2579/task/2720
-/proc/2579/task/2725
-/proc/2579/task/2727
-/proc/2579/task/3198
-/proc/258/task/258
-/proc/259/task/259
-/proc/26/task/26
-/proc/260/task/260
-/proc/261/task/261
-/proc/262/task/262
-/proc/263/task/263
-/proc/264/task/264
-/proc/265/task/265
-/proc/266/task/266
-/proc/267/task/267
-/proc/268/task/268
-/proc/269/task/269
-/proc/27/task/27
-/proc/270/task/270
-/proc/271/task/271
-/proc/272/task/272
-/proc/273/task/273
-/proc/274/task/274
-/proc/275/task/275
-/proc/276/task/276
-/proc/2761/task/2761
-/proc/277/task/277
-/proc/278/task/278
-/proc/279/task/279
-/proc/28/task/28
-/proc/280/task/280
-/proc/281/task/281
-/proc/282/task/282
-/proc/283/task/283
-/proc/284/task/284
-/proc/285/task/285
-/proc/286/task/286
-/proc/287/task/287
-/proc/288/task/288
-/proc/2883/task/2883
-/proc/2883/task/2886
-/proc/2883/task/2888
-/proc/2883/task/2890
-/proc/2883/task/2891
-/proc/2883/task/2892
-/proc/2883/task/2893
-/proc/2883/task/2894
-/proc/2883/task/2895
-/proc/2883/task/2897
-/proc/2883/task/2898
-/proc/289/task/289
-/proc/29/task/29
-/proc/294/task/294
-/proc/295/task/295
-/proc/296/task/296
-/proc/297/task/297
-/proc/298/task/298
-/proc/299/task/299
-/proc/3/task/3
-/proc/30/task/30
-/proc/300/task/300
-/proc/301/task/301
-/proc/302/task/302
-/proc/303/task/303
-/proc/304/task/304
-/proc/305/task/305
-/proc/306/task/306
-/proc/308/task/308
-/proc/309/task/309
-/proc/31/task/31
-/proc/310/task/310
-/proc/311/task/311
-/proc/312/task/312
-/proc/313/task/313
-/proc/314/task/314
-/proc/315/task/315
-/proc/316/task/316
-/proc/317/task/317
-/proc/318/task/318
-/proc/319/task/319
-/proc/32/task/32
-/proc/320/task/320
-/proc/321/task/321
-/proc/322/task/322
-/proc/323/task/323
-/proc/324/task/324
-/proc/325/task/325
-/proc/326/task/326
-/proc/327/task/327
-/proc/328/task/328
-/proc/329/task/329
-/proc/33/task/33
-/proc/330/task/330
-/proc/331/task/331
-/proc/332/task/332
-/proc/333/task/333
-/proc/335/task/335
-/proc/336/task/336
-/proc/337/task/337
-/proc/338/task/338
-/proc/340/task/340
-/proc/341/task/341
-/proc/342/task/342
-/proc/343/task/343
-/proc/344/task/344
-/proc/345/task/345
-/proc/346/task/346
-/proc/348/task/348
-/proc/349/task/349
-/proc/354/task/354
-/proc/355/task/355
-/proc/356/task/356
-/proc/360/task/360
-/proc/361/task/361
-/proc/362/task/362
-/proc/363/task/363
-/proc/364/task/364
-/proc/364/task/368
-/proc/364/task/369
-/proc/364/task/370
-/proc/364/task/371
-/proc/364/task/380
-/proc/364/task/381
-/proc/366/task/366
-/proc/366/task/394
-/proc/366/task/395
-/proc/366/task/396
-/proc/372/task/372
-/proc/393/task/393
-/proc/397/task/397
-/proc/398/task/398
-/proc/399/task/399
-/proc/40/task/40
-/proc/402/task/402
-/proc/403/task/403
-/proc/404/task/404
-/proc/405/task/1008
-/proc/405/task/1581
-/proc/405/task/1887
-/proc/405/task/405
-/proc/405/task/414
-/proc/405/task/415
-/proc/405/task/416
-/proc/405/task/771
-/proc/405/task/772
-/proc/405/task/774
-/proc/405/task/775
-/proc/405/task/776
-/proc/405/task/777
-/proc/405/task/778
-/proc/406/task/406
-/proc/406/task/410
-/proc/406/task/411
-/proc/406/task/412
-/proc/406/task/413
-/proc/41/task/41
-/proc/42/task/42
-/proc/421/task/421
-/proc/422/task/422
-/proc/423/task/423
-/proc/424/task/424
-/proc/425/task/425
-/proc/426/task/426
-/proc/427/task/427
-/proc/429/task/429
-/proc/430/task/430
-/proc/431/task/431
-/proc/433/task/433
-/proc/434/task/434
-/proc/435/task/3343
-/proc/435/task/435
-/proc/435/task/482
-/proc/436/task/3354
-/proc/436/task/3372
-/proc/436/task/4112
-/proc/436/task/4113
-/proc/436/task/4114
-/proc/436/task/4230
-/proc/436/task/436
-/proc/436/task/499
-/proc/436/task/897
-/proc/436/task/901
-/proc/436/task/908
-/proc/437/task/3604
-/proc/437/task/3608
-/proc/437/task/3610
-/proc/437/task/437
-/proc/437/task/475
-/proc/438/task/438
-/proc/439/task/439
-/proc/439/task/846
-/proc/439/task/847
-/proc/439/task/848
-/proc/439/task/849
-/proc/439/task/850
-/proc/439/task/851
-/proc/439/task/852
-/proc/439/task/853
-/proc/439/task/854
-/proc/44/task/44
-/proc/440/task/440
-/proc/441/task/441
-/proc/442/task/3462
-/proc/442/task/3575
-/proc/442/task/3908
-/proc/442/task/4122
-/proc/442/task/4155
-/proc/442/task/4158
-/proc/442/task/442
-/proc/442/task/4463
-/proc/442/task/4468
-/proc/442/task/4469
-/proc/442/task/4470
-/proc/442/task/4494
-/proc/442/task/541
-/proc/442/task/559
-/proc/442/task/796
-/proc/442/task/797
-/proc/442/task/799
-/proc/442/task/801
-/proc/442/task/807
-/proc/442/task/808
-/proc/442/task/820
-/proc/442/task/821
-/proc/444/task/444
-/proc/444/task/583
-/proc/445/task/1009
-/proc/445/task/1010
-/proc/445/task/1011
-/proc/445/task/1012
-/proc/445/task/1013
-/proc/445/task/1014
-/proc/445/task/1015
-/proc/445/task/1016
-/proc/445/task/1017
-/proc/445/task/1021
-/proc/445/task/1051
-/proc/445/task/1438
-/proc/445/task/445
-/proc/445/task/5133
-/proc/445/task/5134
-/proc/445/task/5424
-/proc/445/task/5425
-/proc/445/task/5426
-/proc/445/task/5427
-/proc/446/task/446
-/proc/447/task/447
-/proc/448/task/448
-/proc/45/task/45
-/proc/450/task/3602
-/proc/450/task/3656
-/proc/450/task/3702
-/proc/450/task/3723
-/proc/450/task/3789
-/proc/450/task/450
-/proc/450/task/477
-/proc/450/task/479
-/proc/450/task/484
-/proc/450/task/485
-/proc/450/task/487
-/proc/450/task/488
-/proc/450/task/490
-/proc/450/task/491
-/proc/450/task/492
-/proc/450/task/493
-/proc/450/task/494
-/proc/450/task/495
-/proc/450/task/496
-/proc/450/task/497
-/proc/450/task/498
-/proc/450/task/500
-/proc/450/task/501
-/proc/450/task/502
-/proc/450/task/503
-/proc/450/task/504
-/proc/450/task/505
-/proc/450/task/506
-/proc/450/task/507
-/proc/450/task/508
-/proc/450/task/509
-/proc/450/task/510
-/proc/450/task/511
-/proc/450/task/512
-/proc/450/task/513
-/proc/450/task/514
-/proc/450/task/515
-/proc/450/task/516
-/proc/450/task/517
-/proc/450/task/518
-/proc/450/task/519
-/proc/450/task/520
-/proc/450/task/521
-/proc/450/task/522
-/proc/450/task/523
-/proc/450/task/524
-/proc/450/task/525
-/proc/450/task/526
-/proc/450/task/527
-/proc/450/task/528
-/proc/450/task/529
-/proc/450/task/530
-/proc/450/task/531
-/proc/450/task/532
-/proc/450/task/533
-/proc/450/task/534
-/proc/450/task/535
-/proc/450/task/536
-/proc/451/task/451
-/proc/451/task/464
-/proc/452/task/452
-/proc/452/task/680
-/proc/453/task/23589
-/proc/453/task/23590
-/proc/453/task/23591
-/proc/453/task/23593
-/proc/453/task/453
-/proc/454/task/18685
-/proc/454/task/18686
-/proc/454/task/18690
-/proc/454/task/18693
-/proc/454/task/454
-/proc/456/task/456
-/proc/457/task/457
-/proc/457/task/614
-/proc/457/task/887
-/proc/457/task/889
-/proc/457/task/890
-/proc/458/task/458
-/proc/459/task/459
-/proc/46/task/46
-/proc/461/task/461
-/proc/461/task/538
-/proc/463/task/463
-/proc/463/task/483
-/proc/463/task/486
-/proc/465/task/25228
-/proc/465/task/465
-/proc/465/task/467
-/proc/465/task/468
-/proc/465/task/469
-/proc/466/task/466
-/proc/466/task/539
-/proc/47/task/47
-/proc/48/task/48
-/proc/480/task/480
-/proc/49/task/49
-/proc/5/task/5
-/proc/50/task/50
-/proc/52/task/52
-/proc/53/task/53
-/proc/54/task/54
-/proc/55/task/55
-/proc/56/task/56
-/proc/57/task/57
-/proc/5740/task/5740
-/proc/58/task/58
-/proc/59/task/59
-/proc/6/task/6
-/proc/60/task/60
-/proc/605/task/605
-/proc/606/task/606
-/proc/61/task/61
-/proc/62/task/62
-/proc/63/task/63
-/proc/64/task/64
-/proc/65/task/65
-/proc/66/task/66
-/proc/67/task/67
-/proc/68/task/68
-/proc/69/task/69
-/proc/7/task/7
-/proc/70/task/70
-/proc/71/task/71
-/proc/72/task/72
-/proc/73/task/73
-/proc/74/task/74
-/proc/75/task/75
-/proc/76/task/76
-/proc/77/task/77
-/proc/78/task/78
-/proc/784/task/784
-/proc/785/task/785
-/proc/79/task/79
-/proc/8/task/8
-/proc/80/task/80
-/proc/803/task/803
-/proc/81/task/81
-/proc/82/task/82
-/proc/8269/task/10168
-/proc/8269/task/10769
-/proc/8269/task/11274
-/proc/8269/task/11689
-/proc/8269/task/12042
-/proc/8269/task/15349
-/proc/8269/task/25214
-/proc/8269/task/8269
-/proc/8269/task/8272
-/proc/8269/task/8275
-/proc/8269/task/8276
-/proc/8269/task/8277
-/proc/8269/task/8278
-/proc/8269/task/8279
-/proc/8269/task/8280
-/proc/8269/task/8281
-/proc/8269/task/8289
-/proc/8269/task/8290
-/proc/8269/task/8294
-/proc/8269/task/8298
-/proc/8269/task/8753
-/proc/8269/task/9356
-/proc/8269/task/9768
-/proc/83/task/83
-/proc/84/task/84
-/proc/85/task/85
-/proc/858/task/1023
-/proc/858/task/1024
-/proc/858/task/1025
-/proc/858/task/1026
-/proc/858/task/1027
-/proc/858/task/1028
-/proc/858/task/1033
-/proc/858/task/1034
-/proc/858/task/1035
-/proc/858/task/1036
-/proc/858/task/1037
-/proc/858/task/1038
-/proc/858/task/1039
-/proc/858/task/1040
-/proc/858/task/1041
-/proc/858/task/1042
-/proc/858/task/1043
-/proc/858/task/1044
-/proc/858/task/1045
-/proc/858/task/1046
-/proc/858/task/1047
-/proc/858/task/1048
-/proc/858/task/1050
-/proc/858/task/1052
-/proc/858/task/1071
-/proc/858/task/1072
-/proc/858/task/1073
-/proc/858/task/1074
-/proc/858/task/1075
-/proc/858/task/1076
-/proc/858/task/1077
-/proc/858/task/1078
-/proc/858/task/1094
-/proc/858/task/1096
-/proc/858/task/1097
-/proc/858/task/11180
-/proc/858/task/11181
-/proc/858/task/1267
-/proc/858/task/1314
-/proc/858/task/1331
-/proc/858/task/1333
-/proc/858/task/1334
-/proc/858/task/1339
-/proc/858/task/1340
-/proc/858/task/1374
-/proc/858/task/1375
-/proc/858/task/1398
-/proc/858/task/1415
-/proc/858/task/1428
-/proc/858/task/1429
-/proc/858/task/1449
-/proc/858/task/1454
-/proc/858/task/1457
-/proc/858/task/1496
-/proc/858/task/1536
-/proc/858/task/1585
-/proc/858/task/18763
-/proc/858/task/18764
-/proc/858/task/18765
-/proc/858/task/2245
-/proc/858/task/2272
-/proc/858/task/2435
-/proc/858/task/2441
-/proc/858/task/2450
-/proc/858/task/25218
-/proc/858/task/2811
-/proc/858/task/3170
-/proc/858/task/3186
-/proc/858/task/3200
-/proc/858/task/3201
-/proc/858/task/3386
-/proc/858/task/3555
-/proc/858/task/3733
-/proc/858/task/3750
-/proc/858/task/3774
-/proc/858/task/3775
-/proc/858/task/3776
-/proc/858/task/5928
-/proc/858/task/6410
-/proc/858/task/7100
-/proc/858/task/7516
-/proc/858/task/7568
-/proc/858/task/8172
-/proc/858/task/858
-/proc/858/task/862
-/proc/858/task/864
-/proc/858/task/865
-/proc/858/task/866
-/proc/858/task/867
-/proc/858/task/868
-/proc/858/task/869
-/proc/858/task/870
-/proc/858/task/883
-/proc/858/task/884
-/proc/858/task/885
-/proc/858/task/886
-/proc/858/task/888
-/proc/858/task/891
-/proc/858/task/892
-/proc/858/task/893
-/proc/858/task/894
-/proc/858/task/895
-/proc/858/task/896
-/proc/858/task/899
-/proc/858/task/9701
-/proc/86/task/86
-/proc/87/task/87
-/proc/871/task/871
-/proc/871/task/873
-/proc/871/task/874
-/proc/871/task/875
-/proc/871/task/876
-/proc/872/task/872
-/proc/877/task/877
-/proc/877/task/878
-/proc/877/task/879
-/proc/877/task/881
-/proc/877/task/882
-/proc/88/task/88
-/proc/880/task/880
-/proc/89/task/89
-/proc/9/task/9
-/proc/90/task/90
-/proc/905/task/905
-/proc/906/task/906
-/proc/907/task/907
-/proc/91/task/91
-/proc/92/task/92
-/proc/93/task/93
-/proc/94/task/94
-/proc/95/task/95
-/proc/96/task/96
-/proc/97/task/97
-/proc/98/task/98
-/proc/99/task/99
\ No newline at end of file
diff --git a/systrace/catapult/systrace/systrace/test_data/battor_test_data.txt b/systrace/catapult/systrace/systrace/test_data/battor_test_data.txt
deleted file mode 100644
index 9672736..0000000
--- a/systrace/catapult/systrace/systrace/test_data/battor_test_data.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# BattOr
-# voltage_range [-6079.7, 6196.8] mV
-# current_range [-6057.3, 5764.1] mA
-# sample_rate 10000 Hz, gain 10.1x
-0.00 6.5 4307.7
-0.10 15.1 4313.7
-0.20 15.1 4313.7
-0.30 12.2 4310.7
-0.40 12.2 4307.7
-0.50 18.0 4334.7
-0.60 15.1 4334.7
-0.70 18.0 4337.7
-0.80 18.0 4337.7
-0.90 20.9 4331.7
-1.00 9.3 4334.7
-1.10 9.3 4307.7
diff --git a/systrace/catapult/systrace/systrace/test_data/compressed_atrace_data.txt b/systrace/catapult/systrace/systrace/test_data/compressed_atrace_data.txt
deleted file mode 100644
index 1368210..0000000
--- a/systrace/catapult/systrace/systrace/test_data/compressed_atrace_data.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-TRACE:
-xœ½]ÛnG’}÷W4 σìÊ[U–±3€¯³Æzlíʞ}X,„6Ùõ˜dsº›¶µàÇo$-Ê&+£OEd5€dhÄs²òžqâòluܯÏ6ûOVW»ëž}ðlµ¹:ÃóíÕóo^¿Þì?¾ÿ›_öÛãqsõÉÊuÑ\~[­VÏ^|Òßýܬ_¯ž—_þËj»ÿ×áùîõë™?øño?I?xµÙœ?ßogo6çó~øöÝOÓ¿YïωùãÃîõ‘þœùómŠ"9tŒ„FûÆ‘éöÍâ	„#>¼ÌZRPâÀk‰1•Ê¡@‚¹–Tf‘CµqhkI5@r¶ó@`-‘%u󖈍Šz·ÐѨxÚvL œ-Õ%ø|‘žÞt‘èu/è‰ñ¿“åQ‘Nfµ+ðù#‡©×úü¦q„CËýóÒãøùM>Á£Úâþ׻ǯè.D[@-´” „8ÛˆÔÛj¸
-Ooº‡È€'rfÄ⌷‚â¡	´%AÁ­@R]U±50ŠåVè_6ŒCŽ¡±ËÆ¿]ôE} 2É|Ñ"!Ç°:
-@ÐԌ\®!ÇÀƒÃ×>· ‡c0V±›þ49äLµ”A¬ÞyD•ç	'O•sPœ[2w÷Ê(àÜvçgOÓ ࿉„f¹<€ÔT?¶9x¯Ðj¦è4´ÚQ)ÙɆóµ5
-9æ[·Ó
\ No newline at end of file
diff --git a/systrace/catapult/systrace/systrace/test_data/decompressed_atrace_data.txt b/systrace/catapult/systrace/systrace/test_data/decompressed_atrace_data.txt
deleted file mode 100644
index a7fb5e8..0000000
--- a/systrace/catapult/systrace/systrace/test_data/decompressed_atrace_data.txt
+++ /dev/null
@@ -1,1053 +0,0 @@
-# tracer: nop
-#
-# entries-in-buffer/entries-written: 1042/1042   #P:6
-#
-#                                      _-----=> irqs-off
-#                                     / _----=> need-resched
-#                                    | / _---=> hardirq/softirq
-#                                    || / _--=> preempt-depth
-#                                    ||| /     delay
-#           TASK-PID    TGID   CPU#  ||||    TIMESTAMP  FUNCTION
-#              | |        |      |   ||||       |         |
-           <...>-19161 (-----) [001] ...1 683201.354908: tracing_mark_write: trace_event_clock_sync: parent_ts=683201.375000
-           <...>-19161 (-----) [001] ...1 683201.354926: tracing_mark_write: trace_event_clock_sync: realtime_ts=3720325137
- ndroid.systemui-13580 (13580) [001] ...1 683202.104223: tracing_mark_write: S|13580|deliverInputEvent|263
-           <...>-18926 (-----) [000] ...1 683202.104223: tracing_mark_write: S|18926|deliverInputEvent|1024
- ndroid.systemui-13580 (13580) [001] ...1 683202.104606: tracing_mark_write: F|13580|deliverInputEvent|263
- ndroid.systemui-13580 (13580) [001] ...1 683202.104846: tracing_mark_write: S|13580|deliverInputEvent|267
- ndroid.systemui-13580 (13580) [001] ...1 683202.105046: tracing_mark_write: F|13580|deliverInputEvent|267
-           <...>-18926 (-----) [000] ...1 683202.107286: tracing_mark_write: F|18926|deliverInputEvent|1024
-           <...>-18926 (-----) [005] ...1 683202.115809: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [005] ...1 683202.115860: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [005] ...1 683202.115972: tracing_mark_write: S|18926|deliverInputEvent|1041
-           <...>-18926 (-----) [005] ...1 683202.116506: tracing_mark_write: F|18926|deliverInputEvent|1041
-           <...>-18926 (-----) [005] ...1 683202.116849: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.116883: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.131660: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.131710: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.131833: tracing_mark_write: S|18926|deliverInputEvent|1056
-           <...>-18926 (-----) [004] ...1 683202.132351: tracing_mark_write: F|18926|deliverInputEvent|1056
-           <...>-18926 (-----) [004] ...1 683202.132442: tracing_mark_write: S|18926|deliverInputEvent|1071
-           <...>-18926 (-----) [004] ...1 683202.133158: tracing_mark_write: S|18926|animator:opacity|23751452
-           <...>-18964 (-----) [002] ...1 683202.133760: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [002] ...1 683202.133771: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.133780: tracing_mark_write: F|18926|deliverInputEvent|1071
-           <...>-18926 (-----) [004] ...1 683202.133853: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.133879: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.133993: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.134018: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.134075: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.134114: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18926 (-----) [004] ...1 683202.134466: tracing_mark_write: E
-           <...>-18964 (-----) [002] ...1 683202.134734: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [002] ...1 683202.134743: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [002] ...1 683202.134797: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [002] ...1 683202.135205: tracing_mark_write: E
-           <...>-18964 (-----) [002] ...1 683202.135213: tracing_mark_write: E
-           <...>-18964 (-----) [002] ...1 683202.135308: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [002] ...1 683202.135376: tracing_mark_write: E
-           <...>-18964 (-----) [002] ...1 683202.135819: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18989 (-----) [003] ...1 683202.136120: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [003] ...1 683202.136133: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [003] ...1 683202.136151: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136156: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [003] ...1 683202.136165: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [002] ...1 683202.136165: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [003] ...1 683202.136170: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.136177: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [002] ...1 683202.136177: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136186: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [002] ...1 683202.136204: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136210: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [003] ...1 683202.136220: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.136228: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136234: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136243: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136250: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [002] ...1 683202.136257: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [002] ...1 683202.136264: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136273: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [002] ...1 683202.136281: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136288: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [002] ...1 683202.136311: tracing_mark_write: E
-           <...>-18988 (-----) [002] ...1 683202.136318: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.136377: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.136393: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.136441: tracing_mark_write: C|18926|jitterNanos|6767359
-           <...>-18926 (-----) [004] ...1 683202.136470: tracing_mark_write: B|18926|commit
-           <...>-18926 (-----) [004] ...1 683202.136500: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.136531: tracing_mark_write: E
-           <...>-18964 (-----) [002] ...1 683202.137447: tracing_mark_write: E
-           <...>-18964 (-----) [001] ...1 683202.139502: tracing_mark_write: C|18926|hwui_Texture|1858380
-           <...>-18964 (-----) [001] ...1 683202.139532: tracing_mark_write: C|18926|hwui_Texture_count|157
-           <...>-18964 (-----) [001] ...1 683202.139542: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [001] ...1 683202.139552: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|0
-           <...>-18964 (-----) [001] ...1 683202.139562: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [001] ...1 683202.139571: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [001] ...1 683202.139771: tracing_mark_write: E
-           <...>-18964 (-----) [001] ...1 683202.139787: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [001] ...1 683202.139793: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.149085: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.149136: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.149185: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.149204: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.149511: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.149537: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.149595: tracing_mark_write: B|18926|measure
-           <...>-18926 (-----) [004] ...1 683202.149738: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.149762: tracing_mark_write: B|18926|layout
-           <...>-18926 (-----) [004] ...1 683202.157004: tracing_mark_write: S|18926|animator:bottom|177885989
-           <...>-18926 (-----) [004] ...1 683202.161620: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.161704: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.161755: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18926 (-----) [004] ...1 683202.165418: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.165542: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.165553: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.165586: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.165981: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.165989: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.166060: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.166072: tracing_mark_write: B|18926|computeOrdering
-           <...>-18926 (-----) [004] ...1 683202.166074: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.166116: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.166125: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.166296: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.166312: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18926 (-----) [004] ...1 683202.166314: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18988 (-----) [001] ...1 683202.166330: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.166342: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.166361: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.166363: tracing_mark_write: B|18926|animation
-           <...>-18988 (-----) [001] ...1 683202.166369: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [001] ...1 683202.166408: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.166416: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.167058: tracing_mark_write: S|18926|animator|46267553
-           <...>-18926 (-----) [004] ...1 683202.167297: tracing_mark_write: S|18926|animator|219664070
-           <...>-18988 (-----) [001] ...1 683202.167362: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.167377: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [001] ...1 683202.167386: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.167394: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.167402: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.167408: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [001] ...1 683202.167429: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.167434: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.167467: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.167469: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [001] ...1 683202.167477: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [001] ...1 683202.167487: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.167494: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18926 (-----) [004] ...1 683202.167501: tracing_mark_write: B|18926|traversal
-           <...>-18964 (-----) [005] ...1 683202.167508: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18989 (-----) [001] ...1 683202.167529: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.167536: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [001] ...1 683202.167556: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.167561: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.167580: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.167626: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [005] ...1 683202.168483: tracing_mark_write: B|18926|Upload 63x63 Texture
-           <...>-18964 (-----) [005] ...1 683202.168780: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.168970: tracing_mark_write: B|18926|Upload 63x63 Texture
-           <...>-18926 (-----) [004] ...1 683202.168978: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.169188: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.169313: tracing_mark_write: B|18926|Upload 63x63 Texture
-           <...>-18964 (-----) [005] ...1 683202.169537: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.170878: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.171711: tracing_mark_write: C|18926|hwui_Texture|1906008
-           <...>-18964 (-----) [005] ...1 683202.171721: tracing_mark_write: C|18926|hwui_Texture_count|160
-           <...>-18964 (-----) [005] ...1 683202.171728: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.171735: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|0
-           <...>-18964 (-----) [005] ...1 683202.171742: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.171748: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.171872: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.171882: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.171886: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.171893: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.171896: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.171903: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.171909: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.171933: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.172095: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.172101: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.172156: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.172196: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172318: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.172326: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [001] ...1 683202.172335: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172343: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.172354: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172360: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [001] ...1 683202.172380: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172386: tracing_mark_write: E
-           <...>-18926 (-----) [000] ...1 683202.172480: tracing_mark_write: E
-           <...>-18926 (-----) [000] ...1 683202.172495: tracing_mark_write: E
-           <...>-18926 (-----) [000] ...1 683202.172539: tracing_mark_write: C|18926|jitterNanos|10113151
-           <...>-18926 (-----) [000] ...1 683202.172566: tracing_mark_write: B|18926|commit
-           <...>-18988 (-----) [001] ...1 683202.172593: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.172600: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18926 (-----) [000] ...1 683202.172603: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172607: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172615: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18964 (-----) [005] ...1 683202.172618: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18988 (-----) [001] ...1 683202.172619: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172626: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18926 (-----) [000] ...1 683202.172642: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172646: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.172652: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.172681: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [001] ...1 683202.172687: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [001] ...1 683202.172695: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.172702: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [001] ...1 683202.172710: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.172716: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [001] ...1 683202.172741: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.172746: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.173451: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.173460: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.173489: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.173506: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.174384: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.179559: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [005] ...1 683202.179602: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [005] ...1 683202.179643: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.179663: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [005] ...1 683202.180146: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.180178: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [005] ...1 683202.180238: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [005] ...1 683202.180274: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18926 (-----) [005] ...1 683202.181062: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.181975: tracing_mark_write: C|18926|hwui_Texture|1906008
-           <...>-18964 (-----) [005] ...1 683202.181986: tracing_mark_write: C|18926|hwui_Texture_count|160
-           <...>-18964 (-----) [005] ...1 683202.181993: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.182000: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|0
-           <...>-18964 (-----) [005] ...1 683202.182006: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.182012: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.182117: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.182133: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.182138: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.182146: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.182152: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.182184: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.182379: tracing_mark_write: B|18926|Allocate 896x128 HW Layer
-           <...>-18964 (-----) [005] ...1 683202.182455: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.182548: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.182554: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.182809: tracing_mark_write: B|18926|Optimize HW Layer DisplayList Button 849x126
-           <...>-18964 (-----) [005] ...1 683202.182898: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.182956: tracing_mark_write: E
-           <...>-18926 (-----) [001] ...1 683202.183195: tracing_mark_write: E
-           <...>-18926 (-----) [001] ...1 683202.183223: tracing_mark_write: E
-           <...>-18926 (-----) [001] ...1 683202.183332: tracing_mark_write: C|18926|jitterNanos|4175322
-           <...>-18926 (-----) [001] ...1 683202.183361: tracing_mark_write: B|18926|commit
-           <...>-18926 (-----) [001] ...1 683202.183393: tracing_mark_write: E
-           <...>-18926 (-----) [001] ...1 683202.183428: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.184160: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.184173: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.184248: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184400: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.184411: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.184451: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184463: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.184478: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184485: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18964 (-----) [005] ...1 683202.184607: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [005] ...1 683202.184612: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184829: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184871: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184884: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.184891: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.184898: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184907: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.184910: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.184916: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [000] ...1 683202.184921: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [000] ...1 683202.184930: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [000] ...1 683202.184941: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.184949: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [000] ...1 683202.184961: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.184968: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [000] ...1 683202.184989: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.185017: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.185064: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.185072: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.187274: tracing_mark_write: B|18926|Issue HW Layer DisplayList Button 849x126
-           <...>-18964 (-----) [005] ...1 683202.187506: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.187645: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18964 (-----) [005] ...1 683202.188279: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.188289: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.188318: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.188332: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.188578: tracing_mark_write: B|18926|Build GL Shader
-           <...>-18964 (-----) [005] ...1 683202.188959: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.188972: tracing_mark_write: B|18926|Build GL Shader
-           <...>-18964 (-----) [005] ...1 683202.192088: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.192173: tracing_mark_write: B|18926|linkProgram
-           <...>-18926 (-----) [004] ...1 683202.196237: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.196276: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.196304: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.196320: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.196702: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.196732: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.196791: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.196824: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18926 (-----) [004] ...1 683202.197263: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.206362: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.207218: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208128: tracing_mark_write: C|18926|hwui_Texture|2364760
-           <...>-18964 (-----) [005] ...1 683202.208138: tracing_mark_write: C|18926|hwui_Texture_count|161
-           <...>-18964 (-----) [005] ...1 683202.208144: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.208150: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|1
-           <...>-18964 (-----) [005] ...1 683202.208156: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.208162: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.208236: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208244: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.208248: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208254: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.208260: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.208281: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.208469: tracing_mark_write: B|18926|Allocate 1088x192 HW Layer
-           <...>-18964 (-----) [005] ...1 683202.208515: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208545: tracing_mark_write: B|18926|Allocate 1088x192 HW Layer
-           <...>-18964 (-----) [005] ...1 683202.208559: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208574: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208580: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.208631: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208632: tracing_mark_write: B|18926|Optimize HW Layer DisplayList LinearLayout 1080x189
-           <...>-18964 (-----) [005] ...1 683202.208637: tracing_mark_write: B|18926|computeOrdering
-           <...>-18926 (-----) [004] ...1 683202.208642: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208644: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.208672: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208694: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208705: tracing_mark_write: B|18926|Optimize HW Layer DisplayList LinearLayout 1080x189
-           <...>-18964 (-----) [005] ...1 683202.208710: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.208716: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208741: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.208749: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.208798: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.208892: tracing_mark_write: F|18926|animator:opacity|23751452
-           <...>-18988 (-----) [003] ...1 683202.208930: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.208942: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.208956: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.208967: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18964 (-----) [005] ...1 683202.208971: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [005] ...1 683202.208975: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.208989: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.208995: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.209027: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.209034: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.209124: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.209127: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.209137: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.209140: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.209199: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.209205: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.209212: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.209220: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.209223: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.209228: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.209251: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.209257: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.209347: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [003] ...1 683202.209357: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [003] ...1 683202.209367: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.209421: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [003] ...1 683202.209476: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.209484: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [003] ...1 683202.209506: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.209511: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.210303: tracing_mark_write: B|18926|Issue HW Layer DisplayList LinearLayout 1080x189
-           <...>-18964 (-----) [005] ...1 683202.210644: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.211769: tracing_mark_write: B|18926|Issue HW Layer DisplayList LinearLayout 1080x189
-           <...>-18964 (-----) [005] ...1 683202.212040: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.212151: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18964 (-----) [005] ...1 683202.212697: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.212705: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.212733: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.212747: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.212810: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.212843: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.212878: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.212895: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.213187: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.213221: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.213321: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.213360: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [005] ...1 683202.214038: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.214843: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215111: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [005] ...1 683202.215118: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [005] ...1 683202.215122: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.215127: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [005] ...1 683202.215131: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.215135: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.215203: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215210: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.215212: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215219: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.215223: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.215242: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.215444: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215452: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.215496: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.215504: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215506: tracing_mark_write: B|18926|computeOrdering
-           <...>-18926 (-----) [004] ...1 683202.215527: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215546: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215665: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.215676: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.215691: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215699: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18988 (-----) [003] ...1 683202.215702: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18964 (-----) [005] ...1 683202.215703: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215718: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215725: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.215758: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215765: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215840: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.215843: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.215852: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.215854: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215907: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.215914: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.215916: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18988 (-----) [003] ...1 683202.215922: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215930: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.215933: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215939: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.215959: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.215964: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.215995: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [003] ...1 683202.216002: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [003] ...1 683202.216010: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.216016: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [003] ...1 683202.216028: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.216034: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [003] ...1 683202.216054: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.216059: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.216381: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.216388: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.216407: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.216416: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.217126: tracing_mark_write: E
-           <...>-18964 (-----) [001] ...1 683202.222253: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [001] ...1 683202.222264: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [001] ...1 683202.222271: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [001] ...1 683202.222279: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [001] ...1 683202.222287: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [001] ...1 683202.222295: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [001] ...1 683202.222397: tracing_mark_write: E
-           <...>-18964 (-----) [001] ...1 683202.222406: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [001] ...1 683202.222421: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.229007: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.229029: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [004] ...1 683202.229037: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.229039: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.230451: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.230484: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.230507: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.230518: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.230755: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.230773: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.230818: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.230848: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18926 (-----) [004] ...1 683202.231162: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.231162: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.231169: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.231178: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.231182: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.231203: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.231342: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.231347: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.231381: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.231388: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.231392: tracing_mark_write: B|18926|computeOrdering
-           <...>-18926 (-----) [004] ...1 683202.231408: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.231424: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.231572: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [005] ...1 683202.231576: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231706: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18964 (-----) [005] ...1 683202.231715: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.231718: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231719: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.231728: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.231730: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231735: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231746: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.231771: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.231774: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18988 (-----) [003] ...1 683202.231779: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.231811: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231818: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231832: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.231837: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.231844: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231851: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.231854: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231859: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.231883: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.231889: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.232044: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [000] ...1 683202.232053: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [000] ...1 683202.232063: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.232071: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [000] ...1 683202.232080: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.232085: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [000] ...1 683202.232107: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.232113: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.232269: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.232275: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.232293: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.232303: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.232352: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.232356: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.232363: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.232367: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.232939: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.233604: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [005] ...1 683202.233612: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [005] ...1 683202.233616: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.233621: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [005] ...1 683202.233626: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.233630: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.233688: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.233694: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [005] ...1 683202.233696: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.233700: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.233710: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.245778: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.245799: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [005] ...1 683202.245805: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.245807: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.246567: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [005] ...1 683202.246598: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [005] ...1 683202.246649: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.246661: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [005] ...1 683202.246881: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.246894: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [005] ...1 683202.246927: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [005] ...1 683202.246948: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [004] ...1 683202.247070: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [004] ...1 683202.247077: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.247196: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.247236: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [004] ...1 683202.247240: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [004] ...1 683202.247263: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [004] ...1 683202.247407: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.247412: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.247443: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.247450: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.247457: tracing_mark_write: B|18926|computeOrdering
-           <...>-18926 (-----) [005] ...1 683202.247465: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.247487: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.247631: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [004] ...1 683202.247634: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247744: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18964 (-----) [004] ...1 683202.247756: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18988 (-----) [003] ...1 683202.247756: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.247759: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.247768: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [004] ...1 683202.247772: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247772: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247783: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.247805: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247812: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18964 (-----) [004] ...1 683202.247819: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18988 (-----) [003] ...1 683202.247847: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247854: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247864: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.247870: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.247876: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247883: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.247886: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247891: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.247912: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.247917: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.247948: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [003] ...1 683202.247955: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [003] ...1 683202.247963: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.247970: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [003] ...1 683202.247981: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.247986: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [003] ...1 683202.248006: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.248011: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.248259: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.248265: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.248282: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.248292: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.248345: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.248349: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.248358: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.248365: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.248952: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.249556: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [004] ...1 683202.249562: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [004] ...1 683202.249567: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [004] ...1 683202.249572: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [004] ...1 683202.249576: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [004] ...1 683202.249580: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [004] ...1 683202.249663: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.249669: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [004] ...1 683202.249671: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.249676: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.249684: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.262890: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.262909: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [004] ...1 683202.262917: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.262919: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.263007: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [005] ...1 683202.263032: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [005] ...1 683202.263055: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.263064: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [005] ...1 683202.263309: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.263323: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [005] ...1 683202.263356: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [005] ...1 683202.263379: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [004] ...1 683202.263518: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [004] ...1 683202.263523: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.263649: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.263700: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [004] ...1 683202.263704: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [004] ...1 683202.263729: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [004] ...1 683202.263882: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.263888: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.263946: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [004] ...1 683202.263978: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.264105: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.264116: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.264139: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.264149: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [004] ...1 683202.264153: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264271: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.264282: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.264291: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [004] ...1 683202.264294: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264297: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.264304: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [004] ...1 683202.264307: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264309: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.264323: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264329: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18964 (-----) [004] ...1 683202.264355: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18988 (-----) [003] ...1 683202.264370: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264377: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264389: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.264395: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.264401: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264408: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.264411: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264416: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.264439: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.264444: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.264476: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [003] ...1 683202.264483: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [003] ...1 683202.264491: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.264498: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [003] ...1 683202.264507: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.264513: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [003] ...1 683202.264532: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.264538: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.264793: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.264799: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.264818: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.264828: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.264877: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.264881: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.264890: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.264896: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.265471: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.266007: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [004] ...1 683202.266013: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [004] ...1 683202.266018: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [004] ...1 683202.266023: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [004] ...1 683202.266027: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [004] ...1 683202.266031: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [004] ...1 683202.266086: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.266092: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [004] ...1 683202.266095: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.266099: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.266107: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.279197: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.279278: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [005] ...1 683202.279290: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.279292: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.280270: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [005] ...1 683202.280317: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [005] ...1 683202.280361: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.280373: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [005] ...1 683202.280645: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.280659: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [005] ...1 683202.280703: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [005] ...1 683202.280735: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [004] ...1 683202.281109: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18926 (-----) [005] ...1 683202.281109: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.281118: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.281131: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [004] ...1 683202.281135: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [004] ...1 683202.281160: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [004] ...1 683202.281328: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.281334: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.281376: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.281383: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.281387: tracing_mark_write: B|18926|computeOrdering
-           <...>-18926 (-----) [005] ...1 683202.281405: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.281422: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.281607: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [004] ...1 683202.281612: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281740: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18964 (-----) [004] ...1 683202.281751: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18988 (-----) [003] ...1 683202.281754: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.281755: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.281764: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [004] ...1 683202.281766: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281771: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281783: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.281808: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281815: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18964 (-----) [004] ...1 683202.281816: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18988 (-----) [003] ...1 683202.281854: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281861: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281872: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [003] ...1 683202.281878: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [003] ...1 683202.281885: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281891: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [003] ...1 683202.281895: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281900: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [003] ...1 683202.281919: tracing_mark_write: E
-           <...>-18988 (-----) [003] ...1 683202.281924: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.281958: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [003] ...1 683202.281965: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [003] ...1 683202.281975: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.281982: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [003] ...1 683202.281993: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.281999: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [003] ...1 683202.282018: tracing_mark_write: E
-           <...>-18989 (-----) [003] ...1 683202.282024: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.282331: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.282338: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.282357: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.282367: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.282425: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.282429: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.282438: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.282444: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.283093: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.283996: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [004] ...1 683202.284005: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [004] ...1 683202.284011: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [004] ...1 683202.284016: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [004] ...1 683202.284020: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [004] ...1 683202.284025: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [004] ...1 683202.284112: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.284119: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [004] ...1 683202.284121: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.284125: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.284135: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.295969: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.296010: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [004] ...1 683202.296019: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.296021: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.297071: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.297129: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.297210: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.297224: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.297739: tracing_mark_write: S|18926|animator|122130055
-           <...>-18926 (-----) [004] ...1 683202.297847: tracing_mark_write: S|18926|animator|172949940
-           <...>-18926 (-----) [004] ...1 683202.297932: tracing_mark_write: S|18926|animator|190890461
-           <...>-18926 (-----) [004] ...1 683202.298010: tracing_mark_write: S|18926|animator|20058450
-           <...>-18926 (-----) [004] ...1 683202.298087: tracing_mark_write: S|18926|animator|184847395
-           <...>-18926 (-----) [004] ...1 683202.298200: tracing_mark_write: S|18926|animator|162825504
-           <...>-18926 (-----) [004] ...1 683202.298288: tracing_mark_write: S|18926|animator|153919193
-           <...>-18926 (-----) [004] ...1 683202.298327: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.298340: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.298377: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.298402: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [005] ...1 683202.298521: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [005] ...1 683202.298566: tracing_mark_write: B|18926|prepareAndDraw
-           <...>-18964 (-----) [005] ...1 683202.298580: tracing_mark_write: B|18926|prepareTree
-           <...>-18926 (-----) [004] ...1 683202.298754: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.298770: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.298832: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.298903: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299039: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [000] ...1 683202.299052: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [000] ...1 683202.299068: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299079: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18964 (-----) [005] ...1 683202.299087: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.299090: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299099: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.299100: tracing_mark_write: B|18926|LinearLayout alpha caused saveLayer 1080x189
-           <...>-18964 (-----) [005] ...1 683202.299103: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299108: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18964 (-----) [005] ...1 683202.299153: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18988 (-----) [000] ...1 683202.299155: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299162: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299178: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [000] ...1 683202.299184: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [000] ...1 683202.299191: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299198: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [000] ...1 683202.299201: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299207: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [000] ...1 683202.299227: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.299233: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.299267: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [000] ...1 683202.299274: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [000] ...1 683202.299284: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.299291: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [000] ...1 683202.299307: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.299313: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [000] ...1 683202.299334: tracing_mark_write: E
-           <...>-18989 (-----) [000] ...1 683202.299339: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.299552: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.299559: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.299576: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.299587: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.299659: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.299663: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.299672: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.299678: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.299902: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.301062: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [005] ...1 683202.301075: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [005] ...1 683202.301084: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.301094: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [005] ...1 683202.301103: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.301112: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.301214: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.301220: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.301231: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.301236: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.301247: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.301254: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.301281: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.301489: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.301497: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.301520: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.301537: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.301557: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.301798: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.301813: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.301858: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.312850: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.312883: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [005] ...1 683202.312896: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.312900: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.313023: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.313069: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.313105: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.313125: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.313914: tracing_mark_write: F|18926|animator|46267553
-           <...>-18926 (-----) [004] ...1 683202.314201: tracing_mark_write: F|18926|animator|219664070
-           <...>-18926 (-----) [004] ...1 683202.314488: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.314515: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.314638: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.314704: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [005] ...1 683202.314999: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.315016: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.315048: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [005] ...1 683202.315053: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.315061: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.315072: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.315243: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.315872: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.315882: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.315916: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.316177: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.316188: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.316281: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.316338: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.316502: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.316515: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [001] ...1 683202.316532: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.316543: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.316560: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.316568: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18926 (-----) [004] ...1 683202.316571: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.316575: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [005] ...1 683202.316581: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.316585: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.316608: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.316673: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.316834: tracing_mark_write: C|18926|jitterNanos|5552900
-           <...>-18926 (-----) [004] ...1 683202.316973: tracing_mark_write: B|18926|commit
-           <...>-18989 (-----) [001] ...1 683202.316982: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18964 (-----) [005] ...1 683202.316984: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18989 (-----) [001] ...1 683202.316992: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [001] ...1 683202.317003: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.317010: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.317013: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [001] ...1 683202.317026: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.317032: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18926 (-----) [004] ...1 683202.317040: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.317054: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.317060: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.317090: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.317096: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [001] ...1 683202.317103: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.317111: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.317115: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.317120: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [001] ...1 683202.317141: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.317146: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.317779: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.317790: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.317823: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.317844: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.317935: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.317944: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.317964: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.317977: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.319029: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.319801: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [005] ...1 683202.319813: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [005] ...1 683202.319822: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.319832: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [005] ...1 683202.319841: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.319850: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.319939: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.320015: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.320033: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.329503: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.329538: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [005] ...1 683202.329557: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.329562: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.329759: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.329819: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.329857: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.329877: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.330409: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.330434: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.330505: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.330553: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18926 (-----) [004] ...1 683202.331128: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.331212: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [004] ...1 683202.331227: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.331237: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [004] ...1 683202.331245: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [004] ...1 683202.331281: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [004] ...1 683202.331518: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.331539: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.331639: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [004] ...1 683202.331700: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.331876: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.331892: tracing_mark_write: E
-           <...>-18926 (-----) [005] ...1 683202.331933: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.331988: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [004] ...1 683202.331994: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332075: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.332088: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [001] ...1 683202.332107: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332119: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.332136: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332143: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [001] ...1 683202.332189: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332195: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.332319: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18989 (-----) [001] ...1 683202.332349: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [001] ...1 683202.332357: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [001] ...1 683202.332368: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.332376: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [001] ...1 683202.332385: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.332391: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [001] ...1 683202.332412: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.332417: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332446: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.332453: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [001] ...1 683202.332459: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332466: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.332469: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332475: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [001] ...1 683202.332499: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.332504: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.333108: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.333119: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.333156: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.333176: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.333267: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [004] ...1 683202.333362: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [004] ...1 683202.333387: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.333405: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.334671: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.335531: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [004] ...1 683202.335544: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [004] ...1 683202.335554: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [004] ...1 683202.335563: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [004] ...1 683202.335572: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [004] ...1 683202.335582: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [004] ...1 683202.335733: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.335745: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [004] ...1 683202.335749: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.335757: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.335773: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.344870: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [004] ...1 683202.344923: tracing_mark_write: B|18926|queue mFrameCallbackTask
-           <...>-18964 (-----) [004] ...1 683202.344939: tracing_mark_write: E
-           <...>-18964 (-----) [004] ...1 683202.344943: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.346588: tracing_mark_write: B|18926|Choreographer#doFrame
-           <...>-18926 (-----) [004] ...1 683202.346695: tracing_mark_write: B|18926|input
-           <...>-18926 (-----) [004] ...1 683202.346761: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.346782: tracing_mark_write: B|18926|animation
-           <...>-18926 (-----) [004] ...1 683202.347462: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.347492: tracing_mark_write: B|18926|traversal
-           <...>-18926 (-----) [004] ...1 683202.347562: tracing_mark_write: B|18926|draw
-           <...>-18926 (-----) [004] ...1 683202.347603: tracing_mark_write: B|18926|Record View#draw()
-           <...>-18964 (-----) [005] ...1 683202.348107: tracing_mark_write: B|18926|notifyFramePending
-           <...>-18964 (-----) [005] ...1 683202.348120: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.348131: tracing_mark_write: B|18926|dispatchFrameCallbacks
-           <...>-18964 (-----) [005] ...1 683202.348135: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.348143: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.348155: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.348158: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.348226: tracing_mark_write: B|18926|DrawFrame
-           <...>-18964 (-----) [005] ...1 683202.348235: tracing_mark_write: B|18926|syncFrameState
-           <...>-18964 (-----) [005] ...1 683202.348270: tracing_mark_write: B|18926|prepareTree
-           <...>-18964 (-----) [005] ...1 683202.348510: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.348519: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.348615: tracing_mark_write: B|18926|computeOrdering
-           <...>-18964 (-----) [005] ...1 683202.348675: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.348863: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.348877: tracing_mark_write: E
-           <...>-18926 (-----) [004] ...1 683202.348910: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.348946: tracing_mark_write: B|18926|Button alpha caused saveLayer 849x126
-           <...>-18964 (-----) [005] ...1 683202.348953: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.348986: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [000] ...1 683202.348999: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [000] ...1 683202.349018: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.349030: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [000] ...1 683202.349049: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.349056: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [000] ...1 683202.349096: tracing_mark_write: E
-           <...>-18988 (-----) [000] ...1 683202.349103: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.349254: tracing_mark_write: B|18926|flush drawing commands
-           <...>-18989 (-----) [001] ...1 683202.349316: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18989 (-----) [001] ...1 683202.349326: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18989 (-----) [001] ...1 683202.349338: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.349346: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18989 (-----) [001] ...1 683202.349359: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.349365: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18989 (-----) [001] ...1 683202.349386: tracing_mark_write: E
-           <...>-18989 (-----) [001] ...1 683202.349392: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.349424: tracing_mark_write: B|18926|shadow tessellation
-           <...>-18988 (-----) [001] ...1 683202.349430: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18988 (-----) [001] ...1 683202.349438: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.349445: tracing_mark_write: B|18926|tessellateAmbientShadow
-           <...>-18988 (-----) [001] ...1 683202.349448: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.349454: tracing_mark_write: B|18926|tessellateSpotShadow
-           <...>-18988 (-----) [001] ...1 683202.349473: tracing_mark_write: E
-           <...>-18988 (-----) [001] ...1 683202.349479: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.350099: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.350115: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.350172: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.350197: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.350339: tracing_mark_write: B|18926|tessellatePath
-           <...>-18964 (-----) [005] ...1 683202.350349: tracing_mark_write: B|18926|approximatePathOutlineVertices
-           <...>-18964 (-----) [005] ...1 683202.350368: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.350381: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.351526: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.352548: tracing_mark_write: C|18926|hwui_Texture|4035928
-           <...>-18964 (-----) [005] ...1 683202.352562: tracing_mark_write: C|18926|hwui_Texture_count|163
-           <...>-18964 (-----) [005] ...1 683202.352571: tracing_mark_write: C|18926|hwui_OffscreenBuffer|0
-           <...>-18964 (-----) [005] ...1 683202.352580: tracing_mark_write: C|18926|hwui_OffscreenBuffer_count|3
-           <...>-18964 (-----) [005] ...1 683202.352589: tracing_mark_write: C|18926|hwui_Layer|0
-           <...>-18964 (-----) [005] ...1 683202.352599: tracing_mark_write: C|18926|hwui_Layer_count|0
-           <...>-18964 (-----) [005] ...1 683202.352734: tracing_mark_write: E
-           <...>-18964 (-----) [005] ...1 683202.352745: tracing_mark_write: B|18926|drainDisplayEventQueue
-           <...>-18964 (-----) [005] ...1 683202.352760: tracing_mark_write: E
diff --git a/systrace/catapult/systrace/systrace/test_data/profile-chrome_systrace_perf_chrome_data b/systrace/catapult/systrace/systrace/test_data/profile-chrome_systrace_perf_chrome_data
deleted file mode 100644
index 3ef0b90..0000000
--- a/systrace/catapult/systrace/systrace/test_data/profile-chrome_systrace_perf_chrome_data
+++ /dev/null
@@ -1 +0,0 @@
-{"traceEvents": [{"tdur": 460, "name": "MessageLoop::RunTask", "tts": 6016200, "args": {"src_func": "PushOntoImmediateIncomingQueueLocked", "src_file": "../../components/scheduler/base/task_queue_impl.cc"}, "pid": 13931, "ts": 196489505302, "cat": "toplevel", "tid": 13956, "ph": "X", "dur": 463}, {"tdur": 412, "name": "TaskQueueManager::DoWork", "tts": 6016243, "args": {"from_main_thread": false}, "pid": 13931, "ts": 196489505345, "cat": "renderer.scheduler", "tid": 13956, "ph": "X", "dur": 415}, {"tdur": 113, "name": "TaskQueueManager::ProcessTaskFromWorkQueue", "tts": 6016280, "args": {"src_func": "SetEnabled", "src_file": "../../base/trace_event/trace_log.cc"}, "pid": 13931, "ts": 196489505382, "cat": "toplevel", "tid": 13956, "ph": "X", "dur": 117}, {"name": "FrameBlameContext", "tts": 6016311, "args": {}, "pid": 13931, "ts": 196489505414, "cat": "blink", "tid": 13956, "scope": "PlatformThread", "ph": "(", "id": "0x3684"}, {"tdur": 71, "name": "TaskQueueManager::RunTask", "tts": 6016318, "args": {"queue": "default_tq"}, "pid": 13931, "ts": 196489505421, "cat": "renderer.scheduler", "tid": 13956, "ph": "X", "dur": 74}, {"name": "TopLevel", "tts": 6016332, "args": {"snapshot": {}}, "pid": 13931, "ts": 196489505434, "cat": "blink", "tid": 13956, "scope": "PlatformThread", "ph": "O", "id": "0x3684"}, {"name": "FrameBlameContext", "tts": 6016382, "args": {}, "pid": 13931, "ts": 196489505483, "cat": "blink", "tid": 13956, "scope": "PlatformThread", "ph": ")", "id": "0x3684"}, {"tdur": 87, "name": "TaskQueueManager::ProcessTaskFromWorkQueue", "tts": 6016413, "args": {"src_func": "SetEnabled", "src_file": "../../base/trace_event/trace_log.cc"}, "pid": 13931, "ts": 196489505515, "cat": "toplevel", "tid": 13956, "ph": "X", "dur": 91}, {"name": "FrameBlameContext", "tts": 6016441, "args": {}, "pid": 13931, "ts": 196489505543, "cat": "blink", "tid": 13956, "scope": "PlatformThread", "ph": "(", "id": "0x3684"}, {"tdur": 48, "name": "TaskQueueManager::RunTask", "tts": 6016447, "args": {"queue": "default_tq"}, "pid": 13931, "ts": 196489505550, "cat": "renderer.scheduler", "tid": 13956, "ph": "X", "dur": 51}], "stackFrames": {"2850": {"category": "Kernel", "name": "datagram_poll", "parent": 2573}, "2853": {"category": "Android", "name": "android::IPCThreadState::IPCThreadState()", "parent": 152}, "1523": {"category": "Kernel", "name": "update_clk_statistics", "parent": 1522}, "2855": {"category": "Java", "name": "art::mirror::PrimitiveArray<unsigned char>::SetArrayClass(art::mirror::Class*)"}, "1993": {"category": "Kernel", "name": "_find_next_bit_le"}, "2857": {"category": "Kernel", "name": "__put_task_struct", "parent": 2856}, "2856": {"category": "Kernel", "name": "delayed_put_task_struct", "parent": 541}, "1490": {"category": "Kernel", "name": "__rcu_read_unlock", "parent": 1194}, "1397": {"category": "Kernel", "name": "msm_rpm_send_smd_buffer", "parent": 1396}, "1492": {"category": "Kernel", "name": "kgsl_iommu_default_setstate", "parent": 1143}, "1493": {"category": "Kernel", "name": "_raw_spin_lock", "parent": 126}, "1494": {"category": "libinputflinger.so", "name": "android::EventHub::mapKey(int, int, int, int*, unsigned int*) const"}, "1495": {"category": "Standard Lib", "name": "je_free"}, "1496": {"category": "liboverlay.so", "name": "overlay::Overlay::configBegin()", "parent": 1495}, "1396": {"category": "Kernel", "name": "msm_rpm_send_data.isra.11", "parent": 1395}, "1498": {"category": "Kernel", "name": "schedule_hrtimeout_range", "parent": 1497}, "1499": {"category": "Kernel", "name": "schedule_hrtimeout_range_clock", "parent": 1498}, "3339": {"category": "Kernel", "name": "force_quiescent_state", "parent": 3338}, "3338": {"category": "Kernel", "name": "rcu_process_callbacks", "parent": 3337}, "1395": {"category": "Kernel", "name": "msm_rpm_send_request", "parent": 1394}, "4189": {"category": "libz.so", "name": "inflate_fast"}, "1994": {"category": "Kernel", "name": "up_read", "parent": 28}, "1700": {"category": "GPU Driver", "name": "gsl_memory_write"}, "1701": {"category": "GPU Driver", "name": "leia_end_tiling"}, "1702": {"category": "Kernel", "name": "tracing_mark_write", "parent": 59}, "1394": {"category": "Kernel", "name": "msm_bus_rpm_req.constprop.2", "parent": 1393}, "1704": {"category": "Android", "name": "android::SortedVector<android::key_value_pair_t<android::wp<android::IBinder>, android::HeapCache::heap_info_t> >::do_move_backward(void*, void const*, unsigned int) const"}, "1705": {"category": "Standard Lib", "name": "epoll_pwait"}, "1706": {"category": "Kernel", "name": "dpcm_dapm_stream_event", "parent": 1689}, "1707": {"category": "Kernel", "name": "snd_soc_dapm_rtd_stream_event", "parent": 1706}, "1708": {"category": "Kernel", "name": "widget_stream_event", "parent": 1707}, "1393": {"category": "Kernel", "name": "msm_bus_rpm_commit_arb.isra.1", "parent": 1392}, "1996": {"category": "Kernel", "name": "schedule", "parent": 1569}, "4572": {"category": "libc++_shared.so", "name": "std::__1::ios_base::~ios_base()"}, "1392": {"category": "Kernel", "name": "msm_bus_remote_hw_commit", "parent": 1391}, "4573": {"category": "Kernel", "name": "fput", "parent": 53}, "1391": {"category": "Kernel", "name": "msm_bus_bimc_commit", "parent": 1390}, "3217": {"category": "Kernel", "name": "msm_bus_fabric_clk_set", "parent": 3216}, "1390": {"category": "Kernel", "name": "msm_bus_fabric_hw_commit", "parent": 1389}, "4188": {"category": "libgpu.cr.so", "name": "gpu::gles2::GLES2DecoderImpl::RestoreState(gpu::gles2::ContextState const*)"}, "3659": {"category": "Kernel", "name": "__ocmem_allocate_range", "parent": 3658}, "1128": {"category": "Kernel", "name": "put_cred_rcu", "parent": 541}, "1129": {"category": "Kernel", "name": "kmem_cache_free", "parent": 1128}, "1628": {"category": "Kernel", "name": "kgsl_iommu_unmap", "parent": 1627}, "4576": {"category": "Java", "name": "art::JNI::ReleaseBooleanArrayElements(_JNIEnv*, _jbooleanArray*, unsigned char*, int)"}, "3813": {"category": "Kernel", "name": "regulator_disable", "parent": 3812}, "1120": {"category": "Standard Lib", "name": "sendto"}, "1121": {"category": "Java", "name": "artAllocStringFromBytesFromCodeRegion"}, "1122": {"category": "Android", "name": "android::IPCThreadState::decStrongHandle(int)", "parent": 152}, "1123": {"category": "Android", "name": "android::BpMemory::getMemory(int*, unsigned int*) const"}, "1124": {"category": "GPU Driver", "name": "oxili_configure_depthcontrol"}, "1125": {"category": "Android", "name": "android::BufferedTextOutput::popBundle()"}, "1126": {"category": "Kernel", "name": "_test_and_set_bit", "parent": 83}, "1127": {"category": "thermal-engine-hh", "name": "[unknown]"}, "4490": {"category": "Kernel", "name": "__schedule", "parent": 4489}, "4579": {"category": "libc++_shared.so", "name": "std::__1::num_put<char, std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > >::do_put(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, std::__1::ios_base&, char, long) const"}, "2989": {"category": "Kernel", "name": "tty_release", "parent": 51}, "2988": {"category": "Kernel", "name": "kmem_cache_alloc", "parent": 2987}, "3029": {"category": "Kernel", "name": "prepare_to_wait", "parent": 3028}, "3028": {"category": "Kernel", "name": "dhd_pno_stop_for_gscan", "parent": 2102}, "2983": {"category": "Kernel", "name": "kfree", "parent": 2982}, "2982": {"category": "Kernel", "name": "binder_deferred_func", "parent": 35}, "2981": {"category": "Kernel", "name": "__mutex_lock_slowpath", "parent": 2980}, "2980": {"category": "Kernel", "name": "mutex_lock", "parent": 2979}, "2987": {"category": "Kernel", "name": "split_vma", "parent": 2293}, "2986": {"category": "Kernel", "name": "__slab_free", "parent": 2985}, "2985": {"category": "Kernel", "name": "kmem_cache_free", "parent": 2984}, "2984": {"category": "Kernel", "name": "remove_vma", "parent": 2973}, "524": {"category": "Kernel", "name": "rcu_idle_enter", "parent": 200}, "525": {"category": "Standard Lib", "name": "sigemptyset"}, "526": {"category": "Kernel", "name": "skb_free_datagram", "parent": 284}, "527": {"category": "Kernel", "name": "consume_skb", "parent": 526}, "520": {"category": "Kernel", "name": "run_rebalance_domains", "parent": 519}, "521": {"category": "Kernel", "name": "rebalance_domains", "parent": 520}, "522": {"category": "Kernel", "name": "load_balance", "parent": 521}, "523": {"category": "Kernel", "name": "cpumask_next_and", "parent": 522}, "1014": {"category": "Java", "name": "art::mirror::Class::SetStatus(art::Handle<art::mirror::Class>, art::mirror::Class::Status, art::Thread*)"}, "1015": {"category": "Kernel", "name": "sg_next", "parent": 159}, "1016": {"category": "GPU Driver", "name": "leia_primitive_clear"}, "1017": {"category": "Standard Lib", "name": "memmove"}, "528": {"category": "Kernel", "name": "__kfree_skb", "parent": 527}, "529": {"category": "Kernel", "name": "skb_release_head_state", "parent": 528}, "1012": {"category": "Kernel", "name": "__schedule", "parent": 1011}, "1013": {"category": "Kernel", "name": "_raw_spin_unlock_irq", "parent": 1012}, "1234": {"category": "GPU Driver", "name": "eglMapImage"}, "1235": {"category": "Kernel", "name": "mutex_unlock", "parent": 391}, "1236": {"category": "Kernel", "name": "__mutex_unlock_slowpath", "parent": 1235}, "1237": {"category": "Kernel", "name": "gen_pool_alloc_aligned", "parent": 403}, "1230": {"category": "Standard Lib", "name": "strncmp"}, "1231": {"category": "libqmi_encdec.so", "name": "[unknown]"}, "1232": {"category": "base.odex", "name": "[unknown]"}, "1233": {"category": "Java", "name": "[unknown]", "parent": 1232}, "4196": {"category": "libcc.cr.so", "name": "cc::RollingTimeDeltaHistory::Percentile(double) const"}, "3957": {"category": "Android", "name": "android::BpBinder::BpBinder(int)"}, "4194": {"category": "Kernel", "name": "select_estimate_accuracy", "parent": 380}, "4195": {"category": "Kernel", "name": "ktime_get_ts", "parent": 4194}, "1238": {"category": "Kernel", "name": "set_bits_ll", "parent": 1237}, "1239": {"category": "Kernel", "name": "atomic_notifier_call_chain", "parent": 1146}, "4190": {"category": "libgpu.cr.so", "name": "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*, unsigned int)"}, "3956": {"category": "Kernel", "name": "remove_vm_area", "parent": 3955}, "2526": {"category": "Kernel", "name": "__d_alloc", "parent": 2525}, "4358": {"category": "Kernel", "name": "mdss_mdp_smp_reserve", "parent": 592}, "3955": {"category": "Kernel", "name": "__vunmap", "parent": 3954}, "4354": {"category": "Kernel", "name": "kmap_atomic", "parent": 4353}, "4355": {"category": "Kernel", "name": "kmap_high_get", "parent": 4354}, "4356": {"category": "Kernel", "name": "_raw_spin_unlock_irqrestore", "parent": 4355}, "3954": {"category": "Kernel", "name": "vfree", "parent": 1558}, "3167": {"category": "Kernel", "name": "__alloc_skb", "parent": 3166}, "4351": {"category": "Kernel", "name": "__inc_zone_page_state", "parent": 4350}, "4352": {"category": "Kernel", "name": "__inc_zone_state", "parent": 4351}, "4353": {"category": "Kernel", "name": "v6_clear_user_highpage_nonaliasing", "parent": 4349}, "4310": {"category": "libgpu.cr.so", "name": "[unknown]", "parent": 4309}, "438": {"category": "Kernel", "name": "kgsl_add_fence_event", "parent": 437}, "439": {"category": "Kernel", "name": "sync_fence_create", "parent": 438}, "436": {"category": "Android", "name": "android::RefBase::weakref_type::decWeak(void const*)"}, "437": {"category": "Kernel", "name": "kgsl_ioctl_timestamp_event", "parent": 386}, "434": {"category": "Standard Lib", "name": "pthread_create"}}, "samples": [{"name": "cycles:HG", "weight": 297850, "ts": 196493621870.241, "cpu": 2, "comm": "ksoftirqd/2", "tid": 14106, "sf": 539}, {"name": "cycles:HG", "weight": 1132096, "ts": 196493621938.626, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132116, "ts": 196493622439.043, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130919, "ts": 196493622938.678, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130876, "ts": 196493623438.105, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130876, "ts": 196493623937.897, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131083, "ts": 196493624437.22, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131128, "ts": 196493624936.074, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131320, "ts": 196493625435.918, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131601, "ts": 196493625937.48, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131734, "ts": 196493626435.918, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131397, "ts": 196493626935.397, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 437658, "ts": 196493626987.168, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 1131678, "ts": 196493627436.126, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131929, "ts": 196493627935.762, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131710, "ts": 196493628435.605, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131799, "ts": 196493628934.772, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131829, "ts": 196493629434.407, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131977, "ts": 196493629934.772, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132199, "ts": 196493630434.824, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132038, "ts": 196493630934.668, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131980, "ts": 196493631434.772, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 437658, "ts": 196493631773.105, "cpu": 0, "comm": "surfaceflinger", "tid": 235, "sf": 48}, {"name": "cycles:HG", "weight": 348651, "ts": 196493631851.855, "cpu": 2, "comm": "ksoftirqd/2", "tid": 14106, "sf": 3005}, {"name": "cycles:HG", "weight": 1131995, "ts": 196493631939.668, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 275538, "ts": 196493631973.626, "cpu": 2, "comm": "ndroid.systemui", "tid": 965, "sf": 152}, {"name": "cycles:HG", "weight": 386273, "ts": 196493632025.553, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 242822, "ts": 196493632086.282, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 524}, {"name": "cycles:HG", "weight": 306050, "ts": 196493632162.48, "cpu": 0, "comm": "ksoftirqd/0", "tid": 3, "sf": 84}, {"name": "cycles:HG", "weight": 1131861, "ts": 196493632439.928, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130548, "ts": 196493632938.105, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130563, "ts": 196493633438.366, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130932, "ts": 196493633937.637, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130919, "ts": 196493634437.22, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131082, "ts": 196493634936.491, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131230, "ts": 196493635435.501, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131407, "ts": 196493635935.293, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131717, "ts": 196493636434.72, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131747, "ts": 196493636934.72, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 343424, "ts": 196493637077.272, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 1131954, "ts": 196493637435.501, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131911, "ts": 196493637934.824, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 457251, "ts": 196493638301.23, "cpu": 0, "comm": "sensors.qcom", "tid": 973, "sf": 5}, {"name": "cycles:HG", "weight": 1131824, "ts": 196493638434.928, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 405911, "ts": 196493638480.189, "cpu": 0, "comm": "system_server", "tid": 844, "sf": 3006}, {"name": "cycles:HG", "weight": 337207, "ts": 196493638558.053, "cpu": 2, "comm": "system_server", "tid": 885, "sf": 584}, {"name": "cycles:HG", "weight": 375907, "ts": 196493638727.376, "cpu": 0, "comm": "r.ScannerThread", "tid": 14164, "sf": 409}, {"name": "cycles:HG", "weight": 482221, "ts": 196493638770.449, "cpu": 2, "comm": ".gms.persistent", "tid": 13885, "sf": 24}, {"name": "cycles:HG", "weight": 1131898, "ts": 196493638935.501, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131870, "ts": 196493639434.668, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131680, "ts": 196493639934.355, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131916, "ts": 196493640434.355, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132034, "ts": 196493640935.189, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132034, "ts": 196493641434.095, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131888, "ts": 196493641937.897, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 459973, "ts": 196493641989.147, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 426602, "ts": 196493642392.116, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 204}, {"name": "cycles:HG", "weight": 1132137, "ts": 196493642437.168, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131128, "ts": 196493642936.751, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131261, "ts": 196493643436.491, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131335, "ts": 196493643936.803, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131394, "ts": 196493644435.762, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131336, "ts": 196493644935.97, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131602, "ts": 196493645435.605, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131662, "ts": 196493645935.137, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131736, "ts": 196493646434.46, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131810, "ts": 196493646935.345, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132017, "ts": 196493647436.699, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131739, "ts": 196493647935.345, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131417, "ts": 196493648434.147, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 468491, "ts": 196493648580.449, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 73}, {"name": "cycles:HG", "weight": 446158, "ts": 196493648862.585, "cpu": 2, "comm": "ndroid.systemui", "tid": 965, "sf": 152}, {"name": "cycles:HG", "weight": 1131831, "ts": 196493648934.564, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132141, "ts": 196493649434.824, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132025, "ts": 196493649934.616, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131982, "ts": 196493650434.251, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131968, "ts": 196493650935.241, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132057, "ts": 196493651434.512, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 398089, "ts": 196493651839.824, "cpu": 2, "comm": "ksoftirqd/2", "tid": 14106, "sf": 84}, {"name": "cycles:HG", "weight": 418907, "ts": 196493651861.074, "cpu": 0, "comm": "ksoftirqd/0", "tid": 3, "sf": 1699}, {"name": "cycles:HG", "weight": 1131926, "ts": 196493651937.22, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131921, "ts": 196493652437.949, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131233, "ts": 196493652936.855, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131087, "ts": 196493653435.866, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131309, "ts": 196493653935.866, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131590, "ts": 196493654435.814, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131562, "ts": 196493654935.449, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131607, "ts": 196493655435.397, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131710, "ts": 196493655935.605, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131740, "ts": 196493656434.616, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131653, "ts": 196493656934.72, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 331059, "ts": 196493657041.855, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 1131993, "ts": 196493657435.189, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131906, "ts": 196493657933.939, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 295985, "ts": 196493658029.98, "cpu": 0, "comm": "kworker/u:2", "tid": 13922, "sf": 34}, {"name": "cycles:HG", "weight": 262559, "ts": 196493658147.637, "cpu": 0, "comm": "sensors.qcom", "tid": 973, "sf": 534}, {"name": "cycles:HG", "weight": 246341, "ts": 196493658256.595, "cpu": 0, "comm": "system_server", "tid": 840, "sf": 2330}, {"name": "cycles:HG", "weight": 314916, "ts": 196493658369.616, "cpu": 2, "comm": "system_server", "tid": 885, "sf": 454}, {"name": "cycles:HG", "weight": 1131848, "ts": 196493658434.46, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 346814, "ts": 196493658469.928, "cpu": 0, "comm": "r.ScannerThread", "tid": 14164, "sf": 1262}, {"name": "cycles:HG", "weight": 282163, "ts": 196493658493.314, "cpu": 2, "comm": "system_server", "tid": 809, "sf": 480}, {"name": "cycles:HG", "weight": 249595, "ts": 196493658604.616, "cpu": 2, "comm": ".gms.persistent", "tid": 13885, "sf": 1186}, {"name": "cycles:HG", "weight": 1132099, "ts": 196493658934.407, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132012, "ts": 196493659435.189, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131969, "ts": 196493659935.137, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131764, "ts": 196493660434.303, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131868, "ts": 196493660934.98, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132045, "ts": 196493661433.835, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131884, "ts": 196493661938.21, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 502401, "ts": 196493661992.532, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 344348, "ts": 196493662348.418, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 204}, {"name": "cycles:HG", "weight": 1132124, "ts": 196493662438.366, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130985, "ts": 196493662938.105, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130913, "ts": 196493663437.532, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130987, "ts": 196493663937.168, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131105, "ts": 196493664435.657, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131208, "ts": 196493664935.762, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131637, "ts": 196493665436.282, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 439774, "ts": 196493665612.064, "cpu": 2, "comm": "ndroid.systemui", "tid": 965, "sf": 834}, {"name": "cycles:HG", "weight": 1131609, "ts": 196493665936.699, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131536, "ts": 196493666434.72, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131523, "ts": 196493666934.564, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 525437, "ts": 196493666979.303, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 1131893, "ts": 196493667436.491, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131908, "ts": 196493667934.199, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131542, "ts": 196493668434.928, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132075, "ts": 196493668934.876, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132003, "ts": 196493669434.095, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131857, "ts": 196493669934.043, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132064, "ts": 196493670434.199, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132109, "ts": 196493670934.564, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132051, "ts": 196493671434.668, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131979, "ts": 196493671938.939, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 469080, "ts": 196493671981.387, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 313399, "ts": 196493672291.595, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 1060}, {"name": "cycles:HG", "weight": 1131941, "ts": 196493672438.574, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130831, "ts": 196493672937.793, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130831, "ts": 196493673436.491, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131038, "ts": 196493673936.178, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131393, "ts": 196493674436.491, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131511, "ts": 196493674936.647, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131394, "ts": 196493675435.866, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131424, "ts": 196493675935.397, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131557, "ts": 196493676435.449, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131690, "ts": 196493676935.553, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 370528, "ts": 196493677103.47, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 1131764, "ts": 196493677435.605, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 328843, "ts": 196493677897.741, "cpu": 0, "comm": "sensors.qcom", "tid": 973, "sf": 3009}, {"name": "cycles:HG", "weight": 1131647, "ts": 196493677934.928, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 291752, "ts": 196493678027.949, "cpu": 0, "comm": "system_server", "tid": 840, "sf": 1004}, {"name": "cycles:HG", "weight": 278245, "ts": 196493678150.293, "cpu": 0, "comm": "system_server", "tid": 844, "sf": 48}, {"name": "cycles:HG", "weight": 313399, "ts": 196493678267.376, "cpu": 2, "comm": "system_server", "tid": 885, "sf": 2046}, {"name": "cycles:HG", "weight": 377236, "ts": 196493678367.741, "cpu": 0, "comm": "r.ScannerThread", "tid": 14164, "sf": 409}, {"name": "cycles:HG", "weight": 277158, "ts": 196493678389.251, "cpu": 2, "comm": ".gms.persistent", "tid": 13885, "sf": 3010}, {"name": "cycles:HG", "weight": 1131750, "ts": 196493678435.397, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131839, "ts": 196493678934.46, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131722, "ts": 196493679434.407, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131944, "ts": 196493679935.345, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1132003, "ts": 196493680434.772, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131725, "ts": 196493680934.772, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1131902, "ts": 196493681434.46, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 245413, "ts": 196493681847.428, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 524}, {"name": "cycles:HG", "weight": 1131902, "ts": 196493681938.001, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 521979, "ts": 196493681991.699, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 304608, "ts": 196493682404.616, "cpu": 2, "comm": "ndroid.systemui", "tid": 965, "sf": 1191}, {"name": "cycles:HG", "weight": 1131941, "ts": 196493682438.678, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 272039, "ts": 196493682524.303, "cpu": 2, "comm": "ndroid.systemui", "tid": 965, "sf": 24}, {"name": "cycles:HG", "weight": 268553, "ts": 196493682649.928, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 204}, {"name": "cycles:HG", "weight": 1130903, "ts": 196493682938.366, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1130772, "ts": 196493683437.324, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 607013, "ts": 196493683841.543, "cpu": 0, "comm": "dhd_dpc", "tid": 125, "sf": 3021}, {"name": "cycles:HG", "weight": 1130861, "ts": 196493683936.959, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 541605, "ts": 196493684080.137, "cpu": 0, "comm": "wpa_supplicant", "tid": 1108, "sf": 3022}, {"name": "cycles:HG", "weight": 1126514, "ts": 196493684083.678, "cpu": 3, "comm": "system_server", "tid": 1103, "sf": 1024}, {"name": "cycles:HG", "weight": 1131127, "ts": 196493684437.376, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 492206, "ts": 196493684605.709, "cpu": 0, "comm": "swapper", "tid": 0, "sf": 77}, {"name": "cycles:HG", "weight": 559558, "ts": 196493684824.824, "cpu": 0, "comm": "dhd_dpc", "tid": 125, "sf": 3025}, {"name": "cycles:HG", "weight": 1050347, "ts": 196493684920.605, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 1887}, {"name": "cycles:HG", "weight": 1131216, "ts": 196493684935.605, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 272}, {"name": "cycles:HG", "weight": 1050347, "ts": 196493685385.241, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 152}, {"name": "cycles:HG", "weight": 1131114, "ts": 196493685435.241, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 997507, "ts": 196493685826.178, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 905}, {"name": "cycles:HG", "weight": 1131617, "ts": 196493685935.032, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1007073, "ts": 196493686270.345, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 3026}, {"name": "cycles:HG", "weight": 1131691, "ts": 196493686435.293, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1023885, "ts": 196493686722.428, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 3027}, {"name": "cycles:HG", "weight": 1131721, "ts": 196493686934.72, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1039957, "ts": 196493687182.897, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 2356}, {"name": "cycles:HG", "weight": 1131780, "ts": 196493687436.074, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 1053686, "ts": 196493687647.428, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 2326}, {"name": "cycles:HG", "weight": 1131810, "ts": 196493687935.762, "cpu": 1, "comm": ".gms.persistent", "tid": 1660, "sf": 152}, {"name": "cycles:HG", "weight": 1065205, "ts": 196493688117.532, "cpu": 3, "comm": ".gms.persistent", "tid": 1729, "sf": 12}, {"name": "cycles:HG", "weight": 1131532, "ts": 196493688436.074, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 556143, "ts": 196493688570.345, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 1232}, {"name": "cycles:HG", "weight": 1075356, "ts": 196493688591.855, "cpu": 3, "comm": "system_server", "tid": 924, "sf": 3029}, {"name": "cycles:HG", "weight": 645259, "ts": 196493688855.137, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 152}, {"name": "cycles:HG", "weight": 1131680, "ts": 196493688935.032, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 575371, "ts": 196493689110.397, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 1378}, {"name": "cycles:HG", "weight": 629674, "ts": 196493689387.845, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 12}, {"name": "cycles:HG", "weight": 1131593, "ts": 196493689434.095, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 705297, "ts": 196493689699.824, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 905}, {"name": "cycles:HG", "weight": 1131800, "ts": 196493689934.407, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 775837, "ts": 196493690042.272, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 1232}, {"name": "cycles:HG", "weight": 834492, "ts": 196493690411.282, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 152}, {"name": "cycles:HG", "weight": 1132036, "ts": 196493690433.73, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 882321, "ts": 196493690800.814, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 3030}, {"name": "cycles:HG", "weight": 1131934, "ts": 196493690934.251, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 921577, "ts": 196493691209.407, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 1014}, {"name": "cycles:HG", "weight": 1132126, "ts": 196493691434.876, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 954187, "ts": 196493691630.501, "cpu": 0, "comm": "system_server", "tid": 2277, "sf": 152}, {"name": "cycles:HG", "weight": 374916, "ts": 196493691678.262, "cpu": 2, "comm": "system_server", "tid": 815, "sf": 2713}, {"name": "cycles:HG", "weight": 514732, "ts": 196493691913.782, "cpu": 2, "comm": "dhd_dpc", "tid": 125, "sf": 728}, {"name": "cycles:HG", "weight": 1131980, "ts": 196493691937.48, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 980963, "ts": 196493692076.803, "cpu": 0, "comm": ".gms.persistent", "tid": 1692, "sf": 3031}, {"name": "cycles:HG", "weight": 1083778, "ts": 196493692182.064, "cpu": 3, "comm": "swapper", "tid": 0, "sf": 524}, {"name": "cycles:HG", "weight": 407059, "ts": 196493692255.709, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 201}, {"name": "cycles:HG", "weight": 1131786, "ts": 196493692438.782, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 464437, "ts": 196493692462.168, "cpu": 2, "comm": "system_server", "tid": 1419, "sf": 24}, {"name": "cycles:HG", "weight": 956095, "ts": 196493692503.939, "cpu": 0, "comm": "system_server", "tid": 808, "sf": 380}, {"name": "cycles:HG", "weight": 491108, "ts": 196493692678.991, "cpu": 2, "comm": "lmkd", "tid": 192, "sf": 1053}, {"name": "cycles:HG", "weight": 578691, "ts": 196493692934.98, "cpu": 2, "comm": "system_server", "tid": 1419, "sf": 2261}, {"name": "cycles:HG", "weight": 1131069, "ts": 196493692936.282, "cpu": 1, "comm": ".gms.persistent", "tid": 1375, "sf": 1479}, {"name": "cycles:HG", "weight": 673045, "ts": 196493693233.626, "cpu": 2, "comm": "system_server", "tid": 1436, "sf": 2382}, {"name": "cycles:HG", "weight": 970459, "ts": 196493693301.439, "cpu": 0, "comm": "system_server", "tid": 2979, "sf": 152}, {"name": "cycles:HG", "weight": 1130952, "ts": 196493693437.584, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 753340, "ts": 196493693568.678, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 204}, {"name": "cycles:HG", "weight": 990963, "ts": 196493693739.564, "cpu": 0, "comm": "system_server", "tid": 802, "sf": 152}, {"name": "cycles:HG", "weight": 1131425, "ts": 196493693939.564, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 816721, "ts": 196493694022.324, "cpu": 2, "comm": "system_server", "tid": 1202, "sf": 152}, {"name": "cycles:HG", "weight": 1018311, "ts": 196493694280.709, "cpu": 3, "comm": ".gms.persistent", "tid": 1692, "sf": 3031}, {"name": "cycles:HG", "weight": 944745, "ts": 196493694318.262, "cpu": 0, "comm": "dhd_dpc", "tid": 125, "sf": 718}, {"name": "cycles:HG", "weight": 1131132, "ts": 196493694436.907, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 866886, "ts": 196493694583.314, "cpu": 2, "comm": "system_server", "tid": 31585, "sf": 152}, {"name": "cycles:HG", "weight": 1130561, "ts": 196493694935.605, "cpu": 1, "comm": ".gms.persistent", "tid": 27896, "sf": 24}, {"name": "cycles:HG", "weight": 877972, "ts": 196493694970.709, "cpu": 2, "comm": "system_server", "tid": 31585, "sf": 1885}, {"name": "cycles:HG", "weight": 908751, "ts": 196493695255.397, "cpu": 3, "comm": ".gms.persistent", "tid": 1692, "sf": 1518}, {"name": "cycles:HG", "weight": 961487, "ts": 196493695255.97, "cpu": 0, "comm": ".gms.persistent", "tid": 1581, "sf": 2579}, {"name": "cycles:HG", "weight": 1131391, "ts": 196493695438.939, "cpu": 1, "comm": ".gms.persistent", "tid": 3490, "sf": 152}, {"name": "cycles:HG", "weight": 866087, "ts": 196493695617.793, "cpu": 2, "comm": "swapper", "tid": 0, "sf": 204}, {"name": "cycles:HG", "weight": 822225, "ts": 196493695626.959, "cpu": 3, "comm": "system_server", "tid": 3435, "sf": 3036}, {"name": "cycles:HG", "weight": 945135, "ts": 196493695725.449, "cpu": 0, "comm": "system_server", "tid": 2276, "sf": 152}, {"name": "cycles:HG", "weight": 1131701, "ts": 196493695938.991, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 772163, "ts": 196493696069.512, "cpu": 3, "comm": ".gms.persistent", "tid": 1692, "sf": 24}, {"name": "cycles:HG", "weight": 889986, "ts": 196493696117.949, "cpu": 0, "comm": "system_server", "tid": 807, "sf": 152}, {"name": "cycles:HG", "weight": 1130736, "ts": 196493696437.168, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 897232, "ts": 196493696514.147, "cpu": 0, "comm": "system_server", "tid": 1428, "sf": 20}, {"name": "cycles:HG", "weight": 805509, "ts": 196493696757.064, "cpu": 3, "comm": ".gms.persistent", "tid": 1363, "sf": 2326}, {"name": "cycles:HG", "weight": 927988, "ts": 196493696926.022, "cpu": 0, "comm": "system_server", "tid": 2277, "sf": 152}, {"name": "cycles:HG", "weight": 1130736, "ts": 196493696940.501, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 897462, "ts": 196493696952.064, "cpu": 2, "comm": "system_server", "tid": 1419, "sf": 24}, {"name": "cycles:HG", "weight": 818607, "ts": 196493697124.147, "cpu": 3, "comm": ".gms.persistent", "tid": 1363, "sf": 447}, {"name": "cycles:HG", "weight": 958379, "ts": 196493697357.012, "cpu": 0, "comm": "system_server", "tid": 2979, "sf": 12}, {"name": "cycles:HG", "weight": 1131180, "ts": 196493697440.293, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 872027, "ts": 196493697586.959, "cpu": 2, "comm": "system_server", "tid": 1436, "sf": 152}, {"name": "cycles:HG", "weight": 983975, "ts": 196493697792.689, "cpu": 0, "comm": "sensors.qcom", "tid": 819, "sf": 2017}, {"name": "cycles:HG", "weight": 1130230, "ts": 196493697939.928, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 803857, "ts": 196493697942.376, "cpu": 2, "comm": ".gms.persistent", "tid": 1363, "sf": 192}, {"name": "cycles:HG", "weight": 1003687, "ts": 196493698237.116, "cpu": 0, "comm": ".gms.persistent", "tid": 1636, "sf": 1232}, {"name": "cycles:HG", "weight": 782509, "ts": 196493698288.105, "cpu": 2, "comm": "system_server", "tid": 1202, "sf": 19}, {"name": "cycles:HG", "weight": 1130334, "ts": 196493698438.678, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 822340, "ts": 196493698651.699, "cpu": 2, "comm": ".gms.persistent", "tid": 1363, "sf": 3038}, {"name": "cycles:HG", "weight": 1022348, "ts": 196493698687.012, "cpu": 0, "comm": "system_server", "tid": 807, "sf": 1256}, {"name": "cycles:HG", "weight": 1130541, "ts": 196493698938.782, "cpu": 1, "comm": "system_server", "tid": 807, "sf": 3039}, {"name": "cycles:HG", "weight": 790673, "ts": 196493699002.168, "cpu": 3, "comm": "system_server", "tid": 3435, "sf": 3041}, {"name": "cycles:HG", "weight": 868186, "ts": 196493699036.855, "cpu": 2, "comm": "system_server", "tid": 1414, "sf": 841}, {"name": "cycles:HG", "weight": 1038294, "ts": 196493699151.803, "cpu": 0, "comm": "surfaceflinger", "tid": 235, "sf": 48}, {"name": "cycles:HG", "weight": 826537, "ts": 196493699369.459, "cpu": 3, "comm": "system_server", "tid": 3435, "sf": 152}, {"name": "cycles:HG", "weight": 1130748, "ts": 196493699439.147, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 908964, "ts": 196493699439.459, "cpu": 2, "comm": "ndroid.systemui", "tid": 965, "sf": 24}, {"name": "cycles:HG", "weight": 1052615, "ts": 196493699622.116, "cpu": 0, "comm": "system_server", "tid": 1428, "sf": 450}, {"name": "cycles:HG", "weight": 750727, "ts": 196493699702.793, "cpu": 3, "comm": "system_server", "tid": 2978, "sf": 24}, {"name": "cycles:HG", "weight": 942863, "ts": 196493699855.032, "cpu": 2, "comm": ".gms.persistent", "tid": 1363, "sf": 1754}, {"name": "cycles:HG", "weight": 1130940, "ts": 196493699938.834, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 784670, "ts": 196493700050.241, "cpu": 3, "comm": "system_server", "tid": 807, "sf": 12}, {"name": "cycles:HG", "weight": 1062662, "ts": 196493700157.012, "cpu": 0, "comm": "system_server", "tid": 1428, "sf": 938}, {"name": "cycles:HG", "weight": 971451, "ts": 196493700288.366, "cpu": 2, "comm": "system_server", "tid": 2979, "sf": 3047}, {"name": "cycles:HG", "weight": 833621, "ts": 196493700418.887, "cpu": 3, "comm": ".gms.persistent", "tid": 1692, "sf": 1232}, {"name": "cycles:HG", "weight": 1130750, "ts": 196493700436.595, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}, {"name": "cycles:HG", "weight": 879395, "ts": 196493700810.709, "cpu": 3, "comm": "system_server", "tid": 804, "sf": 3054}, {"name": "cycles:HG", "weight": 1130898, "ts": 196493700936.751, "cpu": 1, "comm": "ileged_process1", "tid": 14138, "sf": 3}], "metadata": {"network-type": "WiFi", "gpu-gl-vendor": "Qualcomm", "gpu-psver": "3.00", "field-trials": ["853359fa-f7de5af1", "236d5d9e-fecfffa1", "e036a196-3f4a17df", "77207729-3f4a17df", "4bf94d2-15606520", "2a33b90e-3f4a17df", "ba3f87da-92cc81ec", "46da3e07-3f4a17df", "1ce8a192-3f4a17df", "3fbe5359-3f4a17df", "43d0dd1e-3f4a17df", "10667b28-e2bc4126", "6ce7d7b5-3f4a17df", "93731dca-3f4a17df", "64cbdfc2-3f4a17df", "b7786474-d93a0620", "158a87f-3f4a17df", "868bda90-3f4a17df", "2182dcae-37a58975", "4ea303a6-3f4a17df", "826d6cab-96e3ef3c", "8b4d89aa-3f4a17df", "30e679f-3f4a17df", "f2cb3653-c2fe0862", "867c4c68-3f4a17df", "d747916f-d747916f", "77d0f131-df0c9747", "2f40feb6-3f4a17df", "dd139bd7-3f4a17df", "fe05be5f-4ad60575"], "product-version": "Chrome/53.0.2784.0", "gpu-vsver": "3.00", "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA59G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2784.0 Mobile Safari/537.36", "os-arch": "armv7l", "os-version": "6.0.0", "gpu-gl-renderer": "Adreno (TM) 330", "num-cpus": 4, "gpu-driver": "127.0", "clock-domain": "LINUX_CLOCK_MONOTONIC", "physical-memory": 1854, "cpu-model": 0, "cpu-family": 0, "highres-ticks": true, "cpu-brand": "RMv7 Processor rev 0 (v7l)", "cpu-stepping": 0, "os-name": "Android"}}
\ No newline at end of file
diff --git a/systrace/catapult/systrace/systrace/trace_result.py b/systrace/catapult/systrace/systrace/trace_result.py
deleted file mode 100644
index 11c78f7..0000000
--- a/systrace/catapult/systrace/systrace/trace_result.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-'''Tracing agent result wrapper for systrace.
-
-This class represents the captured trace results from a particular
-tool (e.g. atrace, ftrace.)
-'''
-
-
-class TraceResult(object):
-  def __init__(self, source_name, raw_data):
-    self.source_name = source_name
-    self.raw_data = raw_data
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/__init__.py b/systrace/catapult/systrace/systrace/tracing_agents/__init__.py
deleted file mode 100644
index 859d779..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/__init__.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-'''Tracing agent interface for systrace.
-
-This class represents an agent that captures traces from a particular
-tool (e.g. atrace, ftrace.)
-'''
-
-# Timeout interval constants.
-
-START_STOP_TIMEOUT = 10.0
-GET_RESULTS_TIMEOUT = 30.0
-
-
-class TracingConfig(object):
-  '''Store the tracing configuration options for all Systrace agents. If there
-  are ever any options that are to be shared between all of the agents, those
-  options should go here.
-  '''
-  def __init__(self):
-    pass
-
-
-class TracingAgent(object):
-  def __init__(self):
-    pass
-
-  def StartAgentTracing(self, config, timeout=None):
-    '''Starts running the trace for this agent. Stops with timeout if
-    not completed within timeout interval.
-
-    Args:
-        config: TracingConfig subclass containing agent-specific options
-                and categories.
-        timeout: Timeout interval in seconds.
-
-    Returns:
-        Boolean value indicating whether or not the trace started successfully.
-    '''
-    pass
-
-  def StopAgentTracing(self, timeout=None):
-    '''Stops running the trace for this agent and returns immediately.
-    Stops with timeout if not completed within timeout interval.
-
-    Args:
-        timeout: Timeout interval in seconds.
-
-    Returns:
-        Boolean value indicating whether or not the trace started successfully.
-    '''
-    pass
-
-  def SupportsExplicitClockSync(self):
-    '''Find out if this agent supports recording of clock sync markers.
-
-    Returns:
-        Boolean value indicating whether this agent supports recording
-        of clock sync markers.
-    '''
-    raise NotImplementedError
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    '''Record a clock sync marker for this agent.
-
-    Args:
-        sync_id: Clock sync ID string.
-        did_record_sync_marker_callback: Callback function to call
-        (with arguments: timestamp and sync_id) after the
-        clock sync marker is recorded.
-    '''
-    raise NotImplementedError
-
-  def GetResults(self, timeout=None):
-    '''Get the completed trace for this agent, stopping with timeout
-
-    Get the completed trace for this agent. Call only after
-    StopAgentTracing is done. This function blocks until the result
-    is collected (note; this may take several seconds). Stops with timeout
-    if not completed within self._options.collection_timeout seconds.
-
-    Args:
-        timeout: Timeout interval in seconds.
-    Returns:
-        Completed trace for this agent.
-    '''
-    pass
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py
deleted file mode 100644
index 4071caf..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/agents_unittest.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from systrace import util
-
-from devil.android import device_utils
-from devil.android.sdk import intent
-from devil.android.sdk import keyevent
-
-
-class BaseAgentTest(unittest.TestCase):
-  def setUp(self):
-    devices = device_utils.DeviceUtils.HealthyDevices()
-    self.browser = 'stable'
-    self.package_info = util.get_supported_browsers()[self.browser]
-    self.device = devices[0]
-
-    curr_browser = self.GetChromeProcessID()
-    if curr_browser == None:
-      self.StartBrowser()
-
-  def tearDown(self):
-    # Stop the browser after each test to ensure that it doesn't interfere
-    # with subsequent tests, e.g. by holding the devtools socket open.
-    self.device.ForceStop(self.package_info.package)
-
-  def StartBrowser(self):
-    # Turn on the device screen.
-    self.device.SetScreen(True)
-
-    # Unlock device.
-    self.device.SendKeyEvent(keyevent.KEYCODE_MENU)
-
-    # Start browser.
-    self.device.StartActivity(
-      intent.Intent(activity=self.package_info.activity,
-                    package=self.package_info.package,
-                    data='about:blank',
-                    extras={'create_new_tab': True}),
-      blocking=True, force_stop=True)
-
-  def GetChromeProcessID(self):
-    return self.device.GetApplicationPids(
-        self.package_info.package, at_most_one=True)
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/android_process_data_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/android_process_data_agent.py
deleted file mode 100644
index b809a0c..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/android_process_data_agent.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Tracing agent that captures friendly process and thread data - names, pids and
-# tids and names, etc to enrich display in the trace viewer. Captures snapshots
-# of the output of 'ps' on the device at intervals.
-
-import logging
-import py_utils
-
-from devil.android import device_utils
-from devil.android.device_errors import AdbShellCommandFailedError
-from systrace import tracing_agents
-from systrace import trace_result
-
-# Leftmost output columns match those used on legacy devices.
-# Get thread names separately as there may be spaces that breaks col
-# splitting.
-# TODO(benm): Refactor device_utils.GetPids to get threads and use that here.
-PS_COMMAND_PROC = "ps -A -o USER,PID,PPID,VSIZE,RSS,WCHAN,ADDR=PC,S,NAME,COMM" \
-    "&& ps -AT -o USER,PID,TID,CMD"
-
-# Fallback for old devices.
-PS_COMMAND_PROC_LEGACY = "ps && ps -t"
-
-# identify this as trace of thread / process state
-TRACE_HEADER = 'PROCESS DUMP\n'
-
-def try_create_agent(config):
-  if config.target != 'android':
-    return None
-  if config.from_file is not None:
-    return None
-  if config.process_dump_enable:
-    # Since AtraceProcessDumpAgent was enabled it's unnecessary to collect ps
-    # data because each process memory dump updates information about processes
-    # and their threads. It's more complete data than two ps snapshots for an
-    # entire trace. However, that agent isn't enabled by default.
-    return None
-  return AndroidProcessDataAgent()
-
-def get_config(options):
-  return options
-
-class AndroidProcessDataAgent(tracing_agents.TracingAgent):
-  def __init__(self):
-    super(AndroidProcessDataAgent, self).__init__()
-    self._trace_data = ""
-    self._device = None
-
-  def __repr__(self):
-    return 'android_process_data'
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    self._device = device_utils.DeviceUtils(config.device_serial_number)
-    self._trace_data += self._get_process_snapshot()
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    self._trace_data += self._get_process_snapshot()
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    result = TRACE_HEADER + self._trace_data
-    return trace_result.TraceResult('androidProcessDump', result)
-
-  def SupportsExplicitClockSync(self):
-    return False
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    pass
-
-  def _get_process_snapshot(self):
-    use_legacy = False
-    try:
-      dump = self._device.RunShellCommand( \
-          PS_COMMAND_PROC, check_return=True, as_root=True, shell=True)
-    except AdbShellCommandFailedError:
-      use_legacy = True
-
-    # Check length of 2 as we execute two commands, which in case of failure
-    # on old devices output 1 line each.
-    if use_legacy or len(dump) == 2:
-      logging.debug('Couldn\'t parse ps dump, trying legacy method ...')
-      dump = self._device.RunShellCommand( \
-          PS_COMMAND_PROC_LEGACY, check_return=True, as_root=True, shell=True)
-      if len(dump) == 2:
-        logging.error('Unable to extract process data!')
-        return ""
-
-    return '\n'.join(dump) + '\n'
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py
deleted file mode 100644
index 47ed3fa..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent.py
+++ /dev/null
@@ -1,457 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import optparse
-import platform
-import py_utils
-import re
-import sys
-import threading
-import zlib
-
-from devil.android import device_utils
-from devil.android.sdk import version_codes
-from py_trace_event import trace_time as trace_time_module
-from systrace import trace_result
-from systrace import tracing_agents
-from systrace import util
-
-# Text that ADB sends, but does not need to be displayed to the user.
-ADB_IGNORE_REGEXP = r'^capturing trace\.\.\. done|^capturing trace\.\.\.'
-# The number of seconds to wait on output from ADB.
-ADB_STDOUT_READ_TIMEOUT = 0.2
-# The number of seconds to wait for large output from ADB.
-ADB_LARGE_OUTPUT_TIMEOUT = 600
-# The adb shell command to initiate a trace.
-ATRACE_BASE_ARGS = ['atrace']
-# If a custom list of categories is not specified, traces will include
-# these categories (if available on the device).
-DEFAULT_CATEGORIES = 'sched,freq,gfx,view,dalvik,webview,'\
-                     'input,disk,am,wm,rs,binder_driver'
-# The command to list trace categories.
-LIST_CATEGORIES_ARGS = ATRACE_BASE_ARGS + ['--list_categories']
-# Minimum number of seconds between displaying status updates.
-MIN_TIME_BETWEEN_STATUS_UPDATES = 0.2
-# ADB sends this text to indicate the beginning of the trace data.
-TRACE_START_REGEXP = r'TRACE\:'
-# Plain-text trace data should always start with this string.
-TRACE_TEXT_HEADER = '# tracer'
-_FIX_MISSING_TGIDS = True
-_FIX_CIRCULAR_TRACES = True
-
-
-def list_categories(config):
-  """List the possible trace event categories.
-
-  This function needs the tracing config since it needs to get the serial
-  number of the device to send a command to.
-
-  Args:
-      config: Tracing config.
-  """
-  devutils = device_utils.DeviceUtils(config.device_serial_number)
-  categories = devutils.RunShellCommand(
-      LIST_CATEGORIES_ARGS, check_return=True)
-
-  device_sdk_version = util.get_device_sdk_version()
-  if device_sdk_version < version_codes.MARSHMALLOW:
-    # work around platform bug where rs tag would corrupt trace until M(Api23)
-    categories = [c for c in categories if not re.match(r'^\s*rs\s*-', c)]
-
-  print '\n'.join(categories)
-  if not devutils.HasRoot():
-    print '\nNOTE: more categories may be available with adb root\n'
-
-
-def get_available_categories(config, device_sdk_version):
-  """Gets the list of atrace categories available for tracing.
-  Args:
-      config: Tracing config.
-      device_sdk_version: Sdk version int of device to be queried.
-  """
-  devutils = device_utils.DeviceUtils(config.device_serial_number)
-  categories_output = devutils.RunShellCommand(
-      LIST_CATEGORIES_ARGS, check_return=True)
-  categories = [c.split('-')[0].strip() for c in categories_output]
-
-  if device_sdk_version < version_codes.MARSHMALLOW:
-    # work around platform bug where rs tag would corrupt trace until M(Api23)
-    categories = [c for c in categories if c != 'rs']
-  return categories
-
-
-def try_create_agent(config):
-  """Create an Atrace agent.
-
-  Args:
-      config: Command line config.
-  """
-  if config.target != 'android':
-    return None
-  if config.from_file is not None:
-    return None
-
-  if not config.atrace_categories:
-    return None
-
-  # Check device SDK version.
-  device_sdk_version = util.get_device_sdk_version()
-  if device_sdk_version < version_codes.JELLY_BEAN_MR2:
-    print ('Device SDK versions < 18 (Jellybean MR2) not supported.\n'
-           'Your device SDK version is %d.' % device_sdk_version)
-    return None
-
-  return AtraceAgent(device_sdk_version)
-
-def _construct_extra_atrace_args(config, categories):
-  """Construct extra arguments (-a, -k, categories) for atrace command.
-
-  Args:
-      config: Tracing config.
-  """
-  extra_args = []
-
-  if config.app_name is not None:
-    extra_args.extend(['-a', config.app_name])
-
-  if config.kfuncs is not None:
-    extra_args.extend(['-k', config.kfuncs])
-
-  extra_args.extend(categories)
-  return extra_args
-
-def _construct_atrace_args(config, categories):
-  """Builds the command used to invoke a trace process.
-  Returns:
-    A tuple where the first element is an array of command arguments, and
-    the second element is a boolean which will be true if the command will
-    stream trace data.
-  """
-  atrace_args = ATRACE_BASE_ARGS[:]
-
-  if config.compress_trace_data:
-    atrace_args.extend(['-z'])
-
-  if (config.trace_time is not None) and (config.trace_time > 0):
-    atrace_args.extend(['-t', str(config.trace_time)])
-
-  if (config.trace_buf_size is not None) and (config.trace_buf_size > 0):
-    atrace_args.extend(['-b', str(config.trace_buf_size)])
-
-  elif 'sched' in categories:
-    # 'sched' is a high-volume tag, double the default buffer size
-    # to accommodate that
-    atrace_args.extend(['-b', '4096'])
-  extra_args = _construct_extra_atrace_args(config, categories)
-
-  atrace_args.extend(extra_args)
-  return atrace_args
-
-
-class AtraceAgent(tracing_agents.TracingAgent):
-
-  def __init__(self, device_sdk_version):
-    super(AtraceAgent, self).__init__()
-    self._device_sdk_version = device_sdk_version
-    self._adb = None
-    self._trace_data = None
-    self._tracer_args = None
-    self._collection_thread = None
-    self._device_utils = None
-    self._device_serial_number = None
-    self._config = None
-    self._categories = None
-
-  def __repr__(self):
-    return 'atrace'
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    assert config.atrace_categories, 'Atrace categories are missing!'
-    self._config = config
-    self._categories = config.atrace_categories
-    if isinstance(self._categories, list):
-      self._categories = ','.join(self._categories)
-    avail_cats = get_available_categories(config, self._device_sdk_version)
-    unavailable = [x for x in self._categories.split(',') if
-        x not in avail_cats]
-    self._categories = [x for x in self._categories.split(',') if
-        x in avail_cats]
-    if unavailable:
-      print 'These categories are unavailable: ' + ' '.join(unavailable)
-    self._device_utils = device_utils.DeviceUtils(config.device_serial_number)
-    self._device_serial_number = config.device_serial_number
-    self._tracer_args = _construct_atrace_args(config,
-                                               self._categories)
-    self._device_utils.RunShellCommand(
-        self._tracer_args + ['--async_start'], check_return=True)
-    return True
-
-  def _collect_and_preprocess(self):
-    """Collects and preprocesses trace data.
-
-    Stores results in self._trace_data.
-    """
-    trace_data = self._collect_trace_data()
-    self._trace_data = self._preprocess_trace_data(trace_data)
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    """Stops tracing and starts collecting results.
-
-    To synchronously retrieve the results after calling this function,
-    call GetResults().
-    """
-    self._collection_thread = threading.Thread(
-        target=self._collect_and_preprocess)
-    self._collection_thread.start()
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    """Waits for collection thread to finish and returns trace results."""
-    self._collection_thread.join()
-    self._collection_thread = None
-    return trace_result.TraceResult('systemTraceEvents', self._trace_data)
-
-  def SupportsExplicitClockSync(self):
-    return True
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    """Records a clock sync marker.
-
-    Args:
-        sync_id: ID string for clock sync marker.
-    """
-    cmd = 'echo trace_event_clock_sync: name=%s >' \
-        ' /sys/kernel/debug/tracing/trace_marker' % sync_id
-    with self._device_utils.adb.PersistentShell(
-        self._device_serial_number) as shell:
-      t1 = trace_time_module.Now()
-      shell.RunCommand(cmd, close=True)
-      did_record_sync_marker_callback(t1, sync_id)
-
-  def _stop_collect_trace(self):
-    """Stops atrace.
-
-    Note that prior to Api 23, --async-stop may not actually stop tracing.
-    Thus, this uses a fallback method of running a zero-length synchronous
-    trace if tracing is still on."""
-    result = self._device_utils.RunShellCommand(
-        self._tracer_args + ['--async_stop'], raw_output=True,
-        large_output=True, check_return=True, timeout=ADB_LARGE_OUTPUT_TIMEOUT)
-    is_trace_enabled_file = '/sys/kernel/debug/tracing/tracing_on'
-
-    if self._device_sdk_version < version_codes.MARSHMALLOW:
-      if int(self._device_utils.ReadFile(is_trace_enabled_file)):
-        # tracing was incorrectly left on, disable it
-        self._device_utils.RunShellCommand(
-            self._tracer_args + ['-t 0'], check_return=True)
-
-    return result
-
-  def _collect_trace_data(self):
-    """Reads the output from atrace and stops the trace."""
-    result = self._stop_collect_trace()
-
-    data_start = re.search(TRACE_START_REGEXP, result)
-    if data_start:
-      data_start = data_start.end(0)
-    else:
-      raise IOError('Unable to get atrace data. Did you forget adb root?')
-    output = re.sub(ADB_IGNORE_REGEXP, '', result[data_start:])
-    return output
-
-  def _preprocess_trace_data(self, trace_data):
-    """Performs various processing on atrace data.
-
-    Args:
-      trace_data: The raw trace data.
-    Returns:
-      The processed trace data.
-    """
-    if trace_data:
-      trace_data = strip_and_decompress_trace(trace_data)
-
-    if not trace_data:
-      print >> sys.stderr, ('No data was captured.  Output file was not '
-                            'written.')
-      sys.exit(1)
-
-    if _FIX_MISSING_TGIDS:
-      # Gather proc data from device and patch tgids
-      procfs_dump = self._device_utils.RunShellCommand(
-          'echo -n /proc/[0-9]*/task/[0-9]*',
-          shell=True, check_return=True)[0].split(' ')
-      pid2_tgid = extract_tgids(procfs_dump)
-      trace_data = fix_missing_tgids(trace_data, pid2_tgid)
-
-    if _FIX_CIRCULAR_TRACES:
-      trace_data = fix_circular_traces(trace_data)
-
-    return trace_data
-
-def extract_tgids(trace_lines):
-  """Removes the procfs dump from the given trace text
-
-  Args:
-    trace_lines: The text portion of the trace
-
-  Returns:
-    a map of pids to their tgid.
-  """
-  tgid_2pid = {}
-  for line in trace_lines:
-    result = re.match('^/proc/([0-9]+)/task/([0-9]+)', line)
-    if result:
-      parent_pid, tgid = result.group(1, 2)
-      tgid_2pid[tgid] = parent_pid
-
-  return tgid_2pid
-
-
-def strip_and_decompress_trace(trace_data):
-  """Fixes new-lines and decompresses trace data.
-
-  Args:
-    trace_data: The trace data returned by atrace.
-  Returns:
-    The decompressed trace data.
-  """
-  # Collapse CRLFs that are added by adb shell.
-  if trace_data.startswith('\r\n'):
-    trace_data = trace_data.replace('\r\n', '\n')
-  elif trace_data.startswith('\r\r\n'):
-    # On windows, adb adds an extra '\r' character for each line.
-    trace_data = trace_data.replace('\r\r\n', '\n')
-
-  # Skip the initial newline.
-  if trace_data[0] == '\n':
-    trace_data = trace_data[1:]
-
-  if not trace_data.startswith(TRACE_TEXT_HEADER):
-    # No header found, so assume the data is compressed.
-    trace_data = zlib.decompress(trace_data)
-
-  # Enforce Unix line-endings.
-  trace_data = trace_data.replace('\r', '')
-
-  # Skip any initial newlines.
-  while trace_data and trace_data[0] == '\n':
-    trace_data = trace_data[1:]
-
-  return trace_data
-
-
-def fix_missing_tgids(trace_data, pid2_tgid):
-  """Replaces missing TGIDs from the trace data with those found in procfs
-
-  Args:
-    trace_data: the atrace data
-
-  Returns:
-    The updated trace data with missing TGIDs replaced with the correct TGID
-  """
-
-  def repl(m):
-    tid = m.group(2)
-    if (int(tid) > 0 and m.group(1) != '<idle>' and m.group(3) == '(-----)'
-        and tid in pid2_tgid):
-      # returns Proc_name-PID (TGID)
-      # Binder_2-381 (-----) becomes Binder_2-381 (128)
-      return m.group(1) + '-' + m.group(2) + ' ( ' + pid2_tgid[tid] + ')'
-
-    return m.group(0)
-
-  # matches something like:
-  # Binder_2-895 (-----)
-  trace_data = re.sub(r'^\s*(\S+)-(\d+)\s+(\(\S+\))', repl, trace_data,
-                      flags=re.MULTILINE)
-  return trace_data
-
-
-def fix_circular_traces(out):
-  """Fix inconsistentcies in traces due to circular buffering.
-
-  The circular buffers are kept per CPU, so it is not guaranteed that the
-  beginning of a slice is overwritten before the end. To work around this, we
-  throw away the prefix of the trace where not all CPUs have events yet.
-
-  Args:
-    out: The data to fix.
-  Returns:
-    The updated trace data.
-  """
-  # If any of the CPU's buffers have filled up and
-  # older events have been dropped, the kernel
-  # emits markers of the form '##### CPU 2 buffer started ####' on
-  # the line before the first event in the trace on that CPU.
-  #
-  # No such headers are emitted if there were no overflows or the trace
-  # was captured with non-circular buffers.
-  buffer_start_re = re.compile(r'^#+ CPU \d+ buffer started', re.MULTILINE)
-
-  start_of_full_trace = 0
-
-  while True:
-    result = buffer_start_re.search(out, start_of_full_trace + 1)
-    if result:
-      start_of_full_trace = result.start()
-    else:
-      break
-
-  if start_of_full_trace > 0:
-    # Need to keep the header intact to make the importer happy.
-    end_of_header = re.search(r'^[^#]', out, re.MULTILINE).start()
-    out = out[:end_of_header] + out[start_of_full_trace:]
-  return out
-
-
-class AtraceConfig(tracing_agents.TracingConfig):
-  def __init__(self, atrace_categories, trace_buf_size, kfuncs,
-               app_name, compress_trace_data, from_file,
-               device_serial_number, trace_time, target):
-    tracing_agents.TracingConfig.__init__(self)
-    self.atrace_categories = atrace_categories
-    self.trace_buf_size = trace_buf_size
-    self.kfuncs = kfuncs
-    self.app_name = app_name
-    # Trace compression is broken on Windows.
-    # TODO: Fix https://crbug.com/739751.
-    self.compress_trace_data = \
-        compress_trace_data and platform.system() != 'Windows'
-    self.from_file = from_file
-    self.device_serial_number = device_serial_number
-    self.trace_time = trace_time
-    self.target = target
-
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Atrace options')
-  options.add_option('--atrace-categories', dest='atrace_categories',
-                     help='Select atrace categories with a comma-delimited '
-                     'list, e.g. --atrace-categories=cat1,cat2,cat3')
-  options.add_option('-k', '--ktrace', dest='kfuncs', action='store',
-                     help='specify a comma-separated list of kernel functions '
-                     'to trace')
-  options.add_option('--no-compress', dest='compress_trace_data',
-                     default=True, action='store_false',
-                     help='Tell the device not to send the trace data in '
-                     'compressed form.')
-  options.add_option('-a', '--app', dest='app_name', default=None,
-                     type='string', action='store',
-                     help='enable application-level tracing for '
-                     'comma-separated list of app cmdlines')
-  options.add_option('--from-file', dest='from_file',
-                     action='store', help='read the trace from a '
-                     'file (compressed) rather than running a '
-                     'live trace')
-  return options
-
-def get_config(options):
-  return AtraceConfig(options.atrace_categories,
-                      options.trace_buf_size, options.kfuncs,
-                      options.app_name, options.compress_trace_data,
-                      options.from_file, options.device_serial_number,
-                      options.trace_time, options.target)
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py
deleted file mode 100755
index 9ccc6e3..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_agent_unittest.py
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import logging
-import os
-import unittest
-
-from systrace import decorators
-from systrace import run_systrace
-from systrace import util
-from systrace.tracing_agents import atrace_agent
-
-from devil.android import device_utils
-from devil.android.sdk import intent
-
-
-DEVICE_SERIAL = 'AG8404EC0444AGC'
-ATRACE_ARGS = ['atrace', '-z', '-t', '10', '-b', '4096']
-CATEGORIES = ['sched', 'gfx', 'view', 'wm']
-ADB_SHELL = ['adb', '-s', DEVICE_SERIAL, 'shell']
-
-SYSTRACE_CMD = ['./run_systrace.py', '--time', '10', '-o', 'out.html', '-e',
-                DEVICE_SERIAL] + CATEGORIES
-TRACE_ARGS = (ATRACE_ARGS + CATEGORIES)
-
-TEST_DIR = os.path.join(os.path.dirname(__file__), os.pardir, 'test_data')
-ATRACE_DATA = os.path.join(TEST_DIR, 'atrace_data')
-ATRACE_DATA_RAW = os.path.join(TEST_DIR, 'atrace_data_raw')
-ATRACE_DATA_STRIPPED = os.path.join(TEST_DIR, 'atrace_data_stripped')
-ATRACE_PROCFS_DUMP = os.path.join(TEST_DIR, 'atrace_procfs_dump')
-ATRACE_EXTRACTED_TGIDS = os.path.join(TEST_DIR, 'atrace_extracted_tgids')
-ATRACE_MISSING_TGIDS = os.path.join(TEST_DIR, 'atrace_missing_tgids')
-ATRACE_FIXED_TGIDS = os.path.join(TEST_DIR, 'atrace_fixed_tgids')
-
-
-class AtraceAgentTest(unittest.TestCase):
-
-  # TODO(washingtonp): These end-to-end tests do not work on the Trybot server
-  # because adb cannot be found on the Trybot servers. Figure out what the
-  # issue is and update this test.
-  @decorators.Disabled
-  def test_tracing(self):
-    TRACE_BUFFER_SIZE = '16384'
-    TRACE_TIME = '5'
-
-    devices = device_utils.DeviceUtils.HealthyDevices()
-    package_info = util.get_supported_browsers()['stable']
-    device = devices[0]
-    output_file_name = util.generate_random_filename_for_test()
-
-    try:
-      # Launch the browser before tracing.
-      device.StartActivity(
-          intent.Intent(activity=package_info.activity,
-                        package=package_info.package,
-                        data='about:blank',
-                        extras={'create_new_tab': True}),
-          blocking=True, force_stop=True)
-
-      # Run atrace agent.
-      run_systrace.main_impl(['./run_systrace.py',
-                              '-b',
-                              TRACE_BUFFER_SIZE,
-                              '-t',
-                              TRACE_TIME,
-                              '-o',
-                              output_file_name,
-                              '-e',
-                              str(device),
-                              '--atrace-categories=gfx,input,view'])
-
-      # Verify results.
-      with open(output_file_name, 'r') as f:
-        full_trace = f.read()
-        self.assertTrue('CPU#'in full_trace)
-    except:
-      raise
-    finally:
-      if os.path.exists(output_file_name):
-        os.remove(output_file_name)
-
-  @decorators.HostOnlyTest
-  def test_construct_atrace_args(self):
-    options, categories = run_systrace.parse_options(SYSTRACE_CMD)
-    options.atrace_categories = categories
-    tracer_args = atrace_agent._construct_atrace_args(options, categories)
-    self.assertEqual(' '.join(TRACE_ARGS), ' '.join(tracer_args))
-
-  @decorators.HostOnlyTest
-  def test_strip_and_decompress_trace(self):
-    with contextlib.nested(open(ATRACE_DATA_RAW, 'r'),
-                           open(ATRACE_DATA_STRIPPED, 'r')) as (f1, f2):
-      atrace_data_raw = f1.read()
-      atrace_data_stripped = f2.read()
-
-      trace_data = atrace_agent.strip_and_decompress_trace(atrace_data_raw)
-      self.assertEqual(atrace_data_stripped, trace_data)
-
-  @decorators.HostOnlyTest
-  def test_extract_tgids(self):
-    with contextlib.nested(open(ATRACE_PROCFS_DUMP, 'r'),
-                           open(ATRACE_EXTRACTED_TGIDS, 'r')) as (f1, f2):
-
-      atrace_procfs_dump = f1.read()
-      atrace_procfs_extracted = f2.read()
-
-      tgids = eval(atrace_procfs_extracted)
-      result = atrace_agent.extract_tgids(atrace_procfs_dump.splitlines())
-
-      self.assertEqual(result, tgids)
-
-  @decorators.HostOnlyTest
-  def test_fix_missing_tgids(self):
-    with contextlib.nested(open(ATRACE_EXTRACTED_TGIDS, 'r'),
-                           open(ATRACE_MISSING_TGIDS, 'r'),
-                           open(ATRACE_FIXED_TGIDS, 'r')) as (f1, f2, f3):
-
-      atrace_data = f2.read()
-      tgid_map = eval(f1.read())
-      fixed = f3.read()
-
-      res = atrace_agent.fix_missing_tgids(atrace_data, tgid_map)
-      self.assertEqual(res, fixed)
-
-
-if __name__ == "__main__":
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py
deleted file mode 100644
index 2a4e781..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import py_utils
-import re
-
-from systrace import trace_result
-from systrace import tracing_agents
-from systrace.tracing_agents import atrace_agent
-
-
-# ADB sends this text to indicate the beginning of the trace data.
-TRACE_START_REGEXP = r'TRACE\:'
-# Text that ADB sends, but does not need to be displayed to the user.
-ADB_IGNORE_REGEXP = r'^capturing trace\.\.\. done|^capturing trace\.\.\.'
-
-
-def try_create_agent(options):
-  if options.from_file is not None:
-    return AtraceFromFileAgent(options)
-  else:
-    return False
-
-
-class AtraceFromFileConfig(tracing_agents.TracingConfig):
-  def __init__(self, from_file):
-    tracing_agents.TracingConfig.__init__(self)
-    self.fix_circular = True
-    self.from_file = from_file
-
-def add_options(parser): # pylint: disable=unused-argument
-  # The atrace_from_file_agent is not currently used, so don't display
-  # any options.
-  return None
-
-def get_config(options):
-  return AtraceFromFileConfig(options.from_file)
-
-
-class AtraceFromFileAgent(tracing_agents.TracingAgent):
-  def __init__(self, options):
-    super(AtraceFromFileAgent, self).__init__()
-    self._filename = os.path.expanduser(options.from_file)
-    self._trace_data = False
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    # pylint: disable=unused-argument
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    self._trace_data = self._read_trace_data()
-    return True
-
-  def SupportsExplicitClockSync(self):
-    return False
-
-  def RecordClockSyncMarker(self, sync_id, did_record_clock_sync_callback):
-    raise NotImplementedError
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    return trace_result.TraceResult('trace-data', self._trace_data)
-
-  def _read_trace_data(self):
-    with open(self._filename, 'rb') as f:
-      result = f.read()
-    data_start = re.search(TRACE_START_REGEXP, result).end(0)
-    data = re.sub(ADB_IGNORE_REGEXP, '', result[data_start:])
-    return self._preprocess_data(data)
-
-  # pylint: disable=no-self-use
-  def _preprocess_data(self, data):
-    # TODO: add fix_threads and fix_tgids options back in here
-    # once we embed the dump data in the file (b/27504068)
-    data = atrace_agent.strip_and_decompress_trace(data)
-    data = atrace_agent.fix_circular_traces(data)
-    return data
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py
deleted file mode 100755
index 610b570..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_from_file_agent_unittest.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import contextlib
-import os
-import unittest
-
-from systrace import decorators
-from systrace import run_systrace
-from systrace import update_systrace_trace_viewer
-from systrace import util
-
-TEST_DIR = os.path.join(os.path.dirname(__file__), '..', 'test_data')
-
-COMPRESSED_ATRACE_DATA = os.path.join(TEST_DIR, 'compressed_atrace_data.txt')
-DECOMPRESSED_ATRACE_DATA = os.path.join(TEST_DIR,
-                                        'decompressed_atrace_data.txt')
-NON_EXISTENT_DATA = os.path.join(TEST_DIR, 'THIS_FILE_DOES_NOT_EXIST.txt')
-
-class AtraceFromFileAgentTest(unittest.TestCase):
-  @decorators.HostOnlyTest
-  def test_from_file(self):
-    update_systrace_trace_viewer.update(force_update=True)
-    self.assertTrue(os.path.exists(
-        update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE))
-    output_file_name = util.generate_random_filename_for_test()
-    try:
-      # use from-file to create a specific expected output
-      run_systrace.main_impl(['./run_systrace.py',
-                              '--from-file',
-                              COMPRESSED_ATRACE_DATA,
-                              '-o',
-                              output_file_name])
-      # and verify file contents
-      with contextlib.nested(open(output_file_name, 'r'),
-                             open(DECOMPRESSED_ATRACE_DATA, 'r')) as (f1, f2):
-        full_trace = f1.read()
-        expected_contents = f2.read()
-        self.assertTrue(expected_contents in full_trace)
-    except:
-      raise
-    finally:
-      os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
-      if os.path.exists(output_file_name):
-        os.remove(output_file_name)
-
-
-  @decorators.HostOnlyTest
-  def test_default_output_filename(self):
-    update_systrace_trace_viewer.update(force_update=True)
-    self.assertTrue(os.path.exists(
-        update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE))
-    output_file_name = os.path.join(TEST_DIR, 'compressed_atrace_data.html')
-    try:
-      # use from-file to create a specific expected output
-      run_systrace.main_impl(['./run_systrace.py',
-                              '--from-file',
-                              COMPRESSED_ATRACE_DATA])
-      # and verify file contents
-      with contextlib.nested(open(output_file_name, 'r'),
-                             open(DECOMPRESSED_ATRACE_DATA, 'r')) as (f1, f2):
-        full_trace = f1.read()
-        expected_contents = f2.read()
-        self.assertTrue(expected_contents in full_trace)
-    except:
-      raise
-    finally:
-      os.remove(update_systrace_trace_viewer.SYSTRACE_TRACE_VIEWER_HTML_FILE)
-      if os.path.exists(output_file_name):
-        os.remove(output_file_name)
-
-
-  @decorators.HostOnlyTest
-  def test_missing_file(self):
-    try:
-      run_systrace.main_impl(['./run_systrace.py',
-                              '--from-file',
-                              NON_EXISTENT_DATA])
-      self.fail('should not get here')
-    except IOError:
-      pass
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/atrace_process_dump.py b/systrace/catapult/systrace/systrace/tracing_agents/atrace_process_dump.py
deleted file mode 100644
index 107da58..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/atrace_process_dump.py
+++ /dev/null
@@ -1,128 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-# Tracing agent that captures periodic per-process memory dumps and other
-# useful information from ProcFS like utime, stime, OOM stats, etc.
-
-import json
-import logging
-import optparse
-import py_utils
-
-from devil.android import device_utils
-from devil.android.device_errors import AdbShellCommandFailedError
-from py_trace_event import trace_time as trace_time_module
-from systrace import tracing_agents
-from systrace import trace_result
-
-TRACE_HEADER = 'ATRACE_PROCESS_DUMP'
-TRACE_RESULT_NAME = 'atraceProcessDump'
-
-HELPER_COMMAND = '/data/local/tmp/atrace_helper'
-HELPER_STOP_COMMAND = 'kill -TERM `pidof atrace_helper`'
-HELPER_DUMP_JSON = '/data/local/tmp/procdump.json'
-
-
-class AtraceProcessDumpAgent(tracing_agents.TracingAgent):
-  def __init__(self):
-    super(AtraceProcessDumpAgent, self).__init__()
-    self._device = None
-    self._dump = None
-    self._clock_sync_markers = {}
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    self._device = device_utils.DeviceUtils(config.device_serial_number)
-    cmd = [HELPER_COMMAND, '-b', '-g',
-        '-t', str(config.dump_interval_ms),
-        '-o', HELPER_DUMP_JSON]
-    if config.full_dump_config:
-      cmd += ['-m', config.full_dump_config]
-    if config.enable_mmaps:
-      cmd += ['-s']
-    self._device.RunShellCommand(cmd, check_return=True, as_root=True)
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    self._device.RunShellCommand(
-        HELPER_STOP_COMMAND,
-        shell=True, check_return=True, as_root=True)
-    try:
-      self._device.RunShellCommand(['test', '-f', HELPER_DUMP_JSON],
-          check_return=True, as_root=True)
-      self._dump = self._device.ReadFile(HELPER_DUMP_JSON, force_pull=True)
-      self._device.RunShellCommand(['rm', HELPER_DUMP_JSON],
-          check_return=True, as_root=True)
-    except AdbShellCommandFailedError:
-      logging.error('AtraceProcessDumpAgent failed to pull data. Check device storage.')
-      return False
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    result = TRACE_HEADER + '\n' + self._dump
-    cs = json.dumps(self._clock_sync_markers)
-    result = TRACE_HEADER + \
-        '\n{\"clock_sync_markers\":' + cs + ',\n\"dump\":' + self._dump + '}'
-    return trace_result.TraceResult(TRACE_RESULT_NAME, result)
-
-  def SupportsExplicitClockSync(self):
-    return True
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    with self._device.adb.PersistentShell(self._device.serial) as shell:
-      ts_in_controller_domain = trace_time_module.Now()
-      output = shell.RunCommand(HELPER_COMMAND + ' --echo-ts', close=True)
-      ts_in_agent_domain = int(output[0][0])
-      self._clock_sync_markers[sync_id] = ts_in_agent_domain
-      did_record_sync_marker_callback(ts_in_controller_domain, sync_id)
-
-
-class AtraceProcessDumpConfig(tracing_agents.TracingConfig):
-  def __init__(self, enabled, device_serial_number,
-               dump_interval_ms, full_dump_config, enable_mmaps):
-    tracing_agents.TracingConfig.__init__(self)
-    self.enabled = enabled
-    self.device_serial_number = device_serial_number
-    self.dump_interval_ms = dump_interval_ms
-    self.full_dump_config = full_dump_config
-    self.enable_mmaps = enable_mmaps
-
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Atrace process dump options')
-  options.add_option('--process-dump', dest='process_dump_enable',
-                     default=False, action='store_true',
-                     help='Capture periodic per-process memory dumps.')
-  options.add_option('--process-dump-interval', dest='process_dump_interval_ms',
-                     default=5000,
-                     help='Interval between memory dumps in milliseconds.')
-  options.add_option('--process-dump-full', dest='process_dump_full_config',
-                     default=None,
-                     help='Capture full memory dumps for some processes.\n' \
-                          'Value: all, apps or comma-separated process names.')
-  options.add_option('--process-dump-mmaps', dest='process_dump_mmaps',
-                     default=False, action='store_true',
-                     help='Capture VM regions and memory-mapped files.\n' \
-                          'It increases dump size dramatically, hence only ' \
-                          'has effect if --process-dump-full is a whitelist.')
-  return options
-
-
-def get_config(options):
-  can_enable = (options.target == 'android') and (not options.from_file)
-  return AtraceProcessDumpConfig(
-    enabled=(options.process_dump_enable and can_enable),
-    device_serial_number=options.device_serial_number,
-    dump_interval_ms=options.process_dump_interval_ms,
-    full_dump_config=options.process_dump_full_config,
-    enable_mmaps=options.process_dump_mmaps
-  )
-
-
-def try_create_agent(config):
-  if config.enabled:
-    return AtraceProcessDumpAgent()
-  return None
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent.py
deleted file mode 100644
index a591b13..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import atexit
-import logging
-import optparse
-import py_utils
-
-from battor import battor_wrapper
-from devil.android import battery_utils
-from devil.android import device_utils
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-from py_trace_event import trace_time
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-def try_create_agent(config):
-  if config.from_file is not None:
-    return None
-  if config.battor:
-    return BattOrTraceAgent()
-  return None
-
-
-class BattOrConfig(tracing_agents.TracingConfig):
-  def __init__(self, battor_categories, serial_map, battor_path,
-               battor, target, from_file, device_serial_number):
-    tracing_agents.TracingConfig.__init__(self)
-    self.battor_categories = battor_categories
-    self.serial_map = serial_map
-    self.battor_path = battor_path
-    self.battor = battor
-    self.target = target
-    self.from_file = from_file
-    self.device_serial_number = device_serial_number
-
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'BattOr trace options')
-  options.add_option('--battor-categories', dest='battor_categories',
-                     help='Select battor categories with a comma-delimited '
-                     'list, e.g. --battor-categories=cat1,cat2,cat3')
-  options.add_option('--serial-map', dest='serial_map',
-                    default='serial_map.json',
-                    help='File containing pregenerated map of phone serial '
-                    'numbers to BattOr serial numbers.')
-  options.add_option('--battor-path', dest='battor_path', default=None,
-                    type='string', help='specify a BattOr path to use')
-  options.add_option('--battor', dest='battor', default=False,
-                    action='store_true', help='Use the BattOr tracing agent.')
-  return options
-
-def get_config(options):
-  return BattOrConfig(
-      options.battor_categories, options.serial_map, options.battor_path,
-      options.battor, options.target, options.from_file,
-      options.device_serial_number)
-
-def _reenable_charging_if_needed(battery):
-  if not battery.GetCharging():
-    battery.SetCharging(True)
-  logging.info('Charging status checked at exit.')
-
-
-class BattOrTraceAgent(tracing_agents.TracingAgent):
-  # Class representing tracing agent that gets data from a BattOr.
-  # BattOrs are high-frequency power monitors used for battery testing.
-  def __init__(self):
-    super(BattOrTraceAgent, self).__init__()
-    self._collection_process = None
-    self._recording_error = None
-    self._battor_wrapper = None
-    self._battery_utils = None
-
-  @staticmethod
-  def _FindBattOrPath(config):
-    battor_path = config.battor_path
-    if not config.battor_path and not config.serial_map:
-      device_tree = find_usb_devices.GetBusNumberToDeviceTreeMap()
-      battors = battor_device_mapping.GetBattOrList(device_tree)
-      assert len(battors) == 1, ('Must specify BattOr path if there is not '
-                                 'exactly one')
-      battor_path = battors[0]
-    return battor_path
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    """Starts tracing.
-
-    Args:
-        config: Tracing config.
-
-    Raises:
-        RuntimeError: If trace already in progress.
-        AssertionError: If There is no BattOr path given and more
-            than one BattOr is attached.
-    """
-    battor_path = self._FindBattOrPath(config)
-    self._battor_wrapper = battor_wrapper.BattOrWrapper(
-        target_platform=config.target,
-        android_device=config.device_serial_number,
-        battor_path=battor_path,
-        battor_map_file=config.serial_map)
-
-    dev_utils = device_utils.DeviceUtils(config.device_serial_number)
-    self._battery_utils = battery_utils.BatteryUtils(dev_utils)
-    self._battery_utils.SetCharging(False)
-    atexit.register(_reenable_charging_if_needed, self._battery_utils)
-    self._battor_wrapper.StartShell()
-    self._battor_wrapper.StartTracing()
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    """Stops tracing and collects the results asynchronously.
-
-    Creates a new process that stops the tracing and collects the results.
-    Returns immediately after the process is created (does not wait for
-    trace results to be collected).
-    """
-    self._battor_wrapper.StopTracing()
-    self._battery_utils.SetCharging(True)
-    return True
-
-  def SupportsExplicitClockSync(self):
-    """Returns whether this function supports explicit clock sync."""
-    return self._battor_wrapper.SupportsExplicitClockSync()
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    """Records a clock sync marker.
-
-    Args:
-        sync_id: ID string for clock sync marker.
-        did_record_sync_marker_callback: Callback function to call after
-        the clock sync marker is recorded.
-    """
-    ts = trace_time.Now()
-    self._battor_wrapper.RecordClockSyncMarker(sync_id)
-    did_record_sync_marker_callback(ts, sync_id)
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    """Waits until data collection is completed and get the trace data.
-
-    The trace data is the data that comes out of the BattOr, and is in the
-    format with the following lines:
-
-    time current voltage <sync_id>
-
-    where the sync_id is only there if a clock sync marker was recorded
-    during that sample.
-
-    time = time since start of trace (ms)
-    current = current through battery (mA) - this can be negative if the
-        battery is charging
-    voltage = voltage of battery (mV)
-
-    Returns:
-      The trace data.
-    """
-    return trace_result.TraceResult(
-        'powerTraceAsString', self._battor_wrapper.CollectTraceData())
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent_unittest.py
deleted file mode 100755
index 6347161..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/battor_trace_agent_unittest.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from collections import namedtuple
-import unittest
-import logging
-
-from systrace import decorators
-from systrace.tracing_agents import battor_trace_agent
-from battor import battor_wrapper
-from devil.android import battery_utils
-from devil.utils import battor_device_mapping
-from devil.utils import find_usb_devices
-
-
-mock_opts = namedtuple('mock_opts', ['target', 'device_serial_number',
-                                     'battor_path', 'serial_map'])
-OPTIONS = mock_opts('android', 'Phn2', None, __file__)
-CATEGORIES = None
-_DEFAULT_BATTOR_LIST = ['dev/ttyUSB0']
-
-def raise_error(*args, **kwargs):
-  del args
-  del kwargs
-  raise RuntimeError('Should not call this function in the test')
-
-battor_device_mapping.GenerateSerialMapFile = raise_error
-
-def setup_battor_test(StartShell_error, StartTracing_error,
-                      StopTracing_error, CollectTraceData_error,
-                      battor_paths=None):
-  wrapper = MockBattOrWrapper(StartShell_error, StartTracing_error,
-                              StopTracing_error, CollectTraceData_error)
-  def wrapper_maker(*args, **kwargs):
-    del args
-    del kwargs
-    return wrapper
-  battor_wrapper.BattOrWrapper = wrapper_maker
-  find_usb_devices.GetBusNumberToDeviceTreeMap = lambda: None
-  if battor_paths is None:
-    battor_paths = _DEFAULT_BATTOR_LIST
-  battor_device_mapping.GetBattOrList = lambda x: battor_paths
-
-
-class MockBattOrWrapper(object):
-  def __init__(self, StartShell_error=False, StartTracing_error=False,
-               StopTracing_error=False, CollectTraceData_error=False):
-    self._StartShell_error = StartShell_error
-    self._StartTracing_error = StartTracing_error
-    self._StopTracing_error = StopTracing_error
-    self._CollectTraceData_error = CollectTraceData_error
-    self._running = False
-    self._tracing = False
-    self._output = False
-
-  def IsShellRunning(self):
-    return self._running
-
-  def StartShell(self):
-    assert not self._running
-    if self._StartShell_error:
-      raise RuntimeError('Simulated error in StartShell')
-    self._running = True
-
-  def StartTracing(self):
-    assert self._running
-    assert not self._tracing
-    if self._StartTracing_error:
-      raise RuntimeError('Simulated error in StartTracing')
-    self._tracing = True
-
-  def StopTracing(self):
-    assert self._running
-    assert self._tracing
-    if self._StopTracing_error:
-      raise RuntimeError('Simulated error in StopTracing')
-    self._running = False
-    self._tracing = False
-    self._output = True
-
-  def CollectTraceData(self):
-    assert self._output
-    if self._CollectTraceData_error:
-      raise RuntimeError('Simulated error in CollectTraceData')
-    return 'traceout1\ntraceout2'
-
-
-class MockBatteryUtils(object):
-  def __init__(self, _):
-    self._is_charging = True
-
-  def GetCharging(self):
-    return self._is_charging
-
-  def SetCharging(self, value):
-    self._is_charging = value
-
-
-battery_utils.BatteryUtils = MockBatteryUtils
-
-
-class BattOrAgentTest(unittest.TestCase):
-
-  @decorators.HostOnlyTest
-  def test_trace_double_start(self):
-    setup_battor_test(StartShell_error=False, StartTracing_error=False,
-                      StopTracing_error=False, CollectTraceData_error=False)
-    agent = battor_trace_agent.BattOrTraceAgent()
-    agent.StartAgentTracing(OPTIONS, CATEGORIES)
-    self.assertRaises(AssertionError,
-                      lambda: agent.StartAgentTracing(OPTIONS, CATEGORIES))
-
-  @decorators.HostOnlyTest
-  def test_trace_error_start_shell(self):
-    setup_battor_test(StartShell_error=True, StartTracing_error=False,
-                      StopTracing_error=False, CollectTraceData_error=False)
-    agent = battor_trace_agent.BattOrTraceAgent()
-    self.assertRaises(RuntimeError,
-                      lambda: agent.StartAgentTracing(OPTIONS, CATEGORIES))
-
-  @decorators.HostOnlyTest
-  def test_trace_error_start_tracing(self):
-    setup_battor_test(StartShell_error=False, StartTracing_error=True,
-                      StopTracing_error=False, CollectTraceData_error=False)
-    agent = battor_trace_agent.BattOrTraceAgent()
-    self.assertRaises(RuntimeError,
-                      lambda: agent.StartAgentTracing(OPTIONS, CATEGORIES))
-
-  @decorators.HostOnlyTest
-  def test_trace_error_stop_tracing(self):
-    setup_battor_test(StartShell_error=False, StartTracing_error=False,
-                      StopTracing_error=True, CollectTraceData_error=False)
-    agent = battor_trace_agent.BattOrTraceAgent()
-    agent.StartAgentTracing(OPTIONS, CATEGORIES)
-    self.assertRaises(RuntimeError, agent.StopAgentTracing)
-
-  @decorators.HostOnlyTest
-  def test_trace_error_get_results(self):
-    setup_battor_test(StartShell_error=False, StartTracing_error=False,
-                      StopTracing_error=False, CollectTraceData_error=True)
-    agent = battor_trace_agent.BattOrTraceAgent()
-    agent.StartAgentTracing(OPTIONS, CATEGORIES)
-    agent.StopAgentTracing()
-    self.assertRaises(RuntimeError, agent.GetResults)
-
-  @decorators.HostOnlyTest
-  def test_trace_complete(self):
-    setup_battor_test(StartShell_error=False, StartTracing_error=False,
-                      StopTracing_error=False, CollectTraceData_error=False)
-    agent = battor_trace_agent.BattOrTraceAgent()
-    agent.StartAgentTracing(OPTIONS, CATEGORIES)
-    agent.StopAgentTracing()
-    x = agent.GetResults()
-    self.assertEqual(x.raw_data, 'traceout1\ntraceout2')
-
-  @decorators.HostOnlyTest
-  def test_trace_error_no_battor(self):
-    setup_battor_test(StartShell_error=False, StartTracing_error=False,
-                      StopTracing_error=False, CollectTraceData_error=False,
-                      battor_paths=[])
-    agent = battor_trace_agent.BattOrTraceAgent()
-    options = mock_opts('android', 'Phn2', None, None)
-    with self.assertRaises(AssertionError):
-      agent.StartAgentTracing(options, CATEGORIES)
-
-  @decorators.HostOnlyTest
-  def test_trace_error_multiple_battors_no_battor_path(self):
-    setup_battor_test(StartShell_error=False, StartTracing_error=False,
-                      StopTracing_error=False, CollectTraceData_error=False,
-                      battor_paths=['a', 'b'])
-    agent = battor_trace_agent.BattOrTraceAgent()
-    options = mock_opts('android', 'Phn2', None, None)
-    with self.assertRaises(AssertionError):
-      agent.StartAgentTracing(options, CATEGORIES)
-
-
-if __name__ == "__main__":
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/ftrace_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/ftrace_agent.py
deleted file mode 100644
index 8830746..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/ftrace_agent.py
+++ /dev/null
@@ -1,258 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import optparse
-import os
-import py_utils
-
-from systrace import trace_result
-from systrace import tracing_agents
-
-
-class FtraceAgentIo(object):
-  @staticmethod
-  def writeFile(path, data):
-    if FtraceAgentIo.haveWritePermissions(path):
-      with open(path, 'w') as f:
-        f.write(data)
-    else:
-      raise IOError('Cannot write to %s; did you forget sudo/root?' % path)
-
-  @staticmethod
-  def readFile(path):
-    with open(path, 'r') as f:
-      return f.read()
-
-  @staticmethod
-  def haveWritePermissions(path):
-    return os.access(path, os.W_OK)
-
-
-FT_DIR = "/sys/kernel/debug/tracing/"
-FT_CLOCK = FT_DIR + "trace_clock"
-FT_BUFFER_SIZE = FT_DIR + "buffer_size_kb"
-FT_TRACER = FT_DIR + "current_tracer"
-FT_PRINT_TGID = FT_DIR + "options/print-tgid"
-FT_TRACE_ON = FT_DIR + "tracing_on"
-FT_TRACE = FT_DIR + "trace"
-FT_TRACE_MARKER = FT_DIR + "trace_marker"
-FT_OVERWRITE = FT_DIR + "options/overwrite"
-
-all_categories = {
-    "sched": {
-          "desc": "CPU Scheduling",
-          "req": ["sched/sched_switch/", "sched/sched_wakeup/"]
-    },
-    "freq": {
-          "desc": "CPU Frequency",
-          "req": ["power/cpu_frequency/"],
-          "opt": ["power/clock_set_rate/", "clk/clk_set_rate/"]
-    },
-    "irq": {
-          "desc": "CPU IRQS and IPIS",
-          "req": ["irq/"],
-          "opt": ["ipi/"]
-    },
-    "workq": {
-          "desc": "Kernel workqueues",
-          "req": ["workqueue/"]
-    },
-    "memreclaim": {
-          "desc": "Kernel Memory Reclaim",
-          "req": ["vmscan/mm_vmscan_direct_reclaim_begin/",
-                  "vmscan/mm_vmscan_direct_reclaim_end/",
-                  "vmscan/mm_vmscan_kswapd_wake/",
-                  "vmscan/mm_vmscan_kswapd_sleep/"]
-    },
-    "idle": {
-          "desc": "CPU Idle",
-          "req": ["power/cpu_idle/"]
-    },
-    "regulators": {
-          "desc": "Voltage and Current Regulators",
-          "req": ["regulator/"]
-    },
-    "disk": {
-          "desc": "Disk I/O",
-          "req": ["block/block_rq_issue/",
-                  "block/block_rq_complete/"],
-          "opt": ["f2fs/f2fs_sync_file_enter/",
-                  "f2fs/f2fs_sync_file_exit/",
-                  "f2fs/f2fs_write_begin/",
-                  "f2fs/f2fs_write_end/",
-                  "ext4/ext4_da_write_begin/",
-                  "ext4/ext4_da_write_end/",
-                  "ext4/ext4_sync_file_enter/",
-                  "ext4/ext4_sync_file_exit/"]
-    }
-}
-
-
-def try_create_agent(config):
-  if config.target != 'linux':
-    return None
-  return FtraceAgent(FtraceAgentIo)
-
-
-def list_categories(_):
-  agent = FtraceAgent(FtraceAgentIo)
-  agent._print_avail_categories()
-
-
-class FtraceConfig(tracing_agents.TracingConfig):
-  def __init__(self, ftrace_categories, target, trace_buf_size):
-    tracing_agents.TracingConfig.__init__(self)
-    self.ftrace_categories = ftrace_categories
-    self.target = target
-    self.trace_buf_size = trace_buf_size
-
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'Ftrace options')
-  options.add_option('--ftrace-categories', dest='ftrace_categories',
-                     help='Select ftrace categories with a comma-delimited '
-                     'list, e.g. --ftrace-categories=cat1,cat2,cat3')
-  return options
-
-
-def get_config(options):
-  return FtraceConfig(options.ftrace_categories, options.target,
-                      options.trace_buf_size)
-
-
-class FtraceAgent(tracing_agents.TracingAgent):
-
-  def __init__(self, fio=FtraceAgentIo):
-    """Initialize a systrace agent.
-
-    Args:
-      config: The command-line config.
-      categories: The trace categories to capture.
-    """
-    super(FtraceAgent, self).__init__()
-    self._fio = fio
-    self._config = None
-    self._categories = None
-
-  def _get_trace_buffer_size(self):
-    buffer_size = 4096
-    if ((self._config.trace_buf_size is not None)
-        and (self._config.trace_buf_size > 0)):
-      buffer_size = self._config.trace_buf_size
-    return buffer_size
-
-  def _fix_categories(self, categories):
-    """
-    Applies the default category (sched) if there are no categories
-    in the list and removes unavailable categories from the list.
-    Args:
-        categories: List of categories.
-    """
-    if not categories:
-      categories = ["sched"]
-    return [x for x in categories
-            if self._is_category_available(x)]
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    """Start tracing.
-    """
-    self._config = config
-    categories = self._fix_categories(config.ftrace_categories)
-    self._fio.writeFile(FT_BUFFER_SIZE,
-                        str(self._get_trace_buffer_size()))
-    self._fio.writeFile(FT_CLOCK, 'global')
-    self._fio.writeFile(FT_TRACER, 'nop')
-    self._fio.writeFile(FT_OVERWRITE, "0")
-
-    # TODO: riandrews to push necessary patches for TGID option to upstream
-    # linux kernel
-    # self._fio.writeFile(FT_PRINT_TGID, '1')
-
-    for category in categories:
-      self._category_enable(category)
-
-    self._categories = categories # need to store list of categories to disable
-    print 'starting tracing.'
-
-    self._fio.writeFile(FT_TRACE, '')
-    self._fio.writeFile(FT_TRACE_ON, '1')
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    """Collect the result of tracing.
-
-    This function will block while collecting the result. For sync mode, it
-    reads the data, e.g., from stdout, until it finishes. For async mode, it
-    blocks until the agent is stopped and the data is ready.
-    """
-    self._fio.writeFile(FT_TRACE_ON, '0')
-    for category in self._categories:
-      self._category_disable(category)
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    # get the output
-    d = self._fio.readFile(FT_TRACE)
-    self._fio.writeFile(FT_BUFFER_SIZE, "1")
-    return trace_result.TraceResult('trace-data', d)
-
-  def SupportsExplicitClockSync(self):
-    return False
-
-  def RecordClockSyncMarker(self, sync_id, did_record_sync_marker_callback):
-    # No implementation, but need to have this to support the API
-    # pylint: disable=unused-argument
-    return False
-
-  def _is_category_available(self, category):
-    if category not in all_categories:
-      return False
-    events_dir = FT_DIR + "events/"
-    req_events = all_categories[category]["req"]
-    for event in req_events:
-      event_full_path = events_dir + event + "enable"
-      if not self._fio.haveWritePermissions(event_full_path):
-        return False
-    return True
-
-  def _avail_categories(self):
-    ret = []
-    for event in all_categories:
-      if self._is_category_available(event):
-        ret.append(event)
-    return ret
-
-  def _print_avail_categories(self):
-    avail = self._avail_categories()
-    if len(avail):
-      print "tracing config:"
-      for category in self._avail_categories():
-        desc = all_categories[category]["desc"]
-        print "{0: <16}".format(category), ": ", desc
-    else:
-      print "No tracing categories available - perhaps you need root?"
-
-  def _category_enable_paths(self, category):
-    events_dir = FT_DIR + "events/"
-    req_events = all_categories[category]["req"]
-    for event in req_events:
-      event_full_path = events_dir + event + "enable"
-      yield event_full_path
-    if "opt" in all_categories[category]:
-      opt_events = all_categories[category]["opt"]
-      for event in opt_events:
-        event_full_path = events_dir + event + "enable"
-        if self._fio.haveWritePermissions(event_full_path):
-          yield event_full_path
-
-  def _category_enable(self, category):
-    for path in self._category_enable_paths(category):
-      self._fio.writeFile(path, "1")
-
-  def _category_disable(self, category):
-    for path in self._category_enable_paths(category):
-      self._fio.writeFile(path, "0")
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/ftrace_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/ftrace_agent_unittest.py
deleted file mode 100755
index fdc54cd..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/ftrace_agent_unittest.py
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-import logging
-
-from systrace import decorators
-from systrace import run_systrace
-from systrace.tracing_agents import ftrace_agent
-
-
-SYSTRACE_HOST_CMD_DEFAULT = ['./systrace.py', '--target=linux']
-FT_DIR = "/sys/kernel/debug/tracing/"
-FT_EVENT_DIR = FT_DIR + "events/"
-FT_TRACE_ON = FT_DIR + "tracing_on"
-FT_TRACE = FT_DIR + "trace"
-FT_BUFFER_SIZE = FT_DIR + "buffer_size_kb"
-
-
-def make_test_io_interface(permitted_files):
-  class TestIoImpl(object):
-
-    @staticmethod
-    def writeFile(path, data):
-      permitted_files[path] = data
-
-    @staticmethod
-    def readFile(path):
-      if path in permitted_files:
-        return permitted_files[path]
-      else:
-        return ""
-
-    @staticmethod
-    def haveWritePermissions(path):
-      return path in permitted_files
-
-  return TestIoImpl
-
-
-class FtraceAgentTest(unittest.TestCase):
-
-  @decorators.HostOnlyTest
-  def test_avail_categories(self):
-    # sched only has required events
-    permitted_files = {
-      FT_EVENT_DIR + "sched/sched_switch/enable": "0",
-      FT_EVENT_DIR + "sched/sched_wakeup/enable": "0"
-    }
-    io_interface = make_test_io_interface(permitted_files)
-    agent = ftrace_agent.FtraceAgent(io_interface)
-    self.assertEqual(['sched'], agent._avail_categories())
-
-    # check for no available categories
-    permitted_files = {}
-    io_interface = make_test_io_interface(permitted_files)
-    agent = ftrace_agent.FtraceAgent(io_interface)
-    self.assertEqual([], agent._avail_categories())
-
-    # block has some required, some optional events
-    permitted_files = {
-      FT_EVENT_DIR + "block/block_rq_complete/enable": "0",
-      FT_EVENT_DIR + "block/block_rq_issue/enable": "0"
-    }
-    io_interface = make_test_io_interface(permitted_files)
-    agent = ftrace_agent.FtraceAgent(io_interface)
-    self.assertEqual(['disk'], agent._avail_categories())
-
-  @decorators.HostOnlyTest
-  def test_tracing_bootstrap(self):
-    workq_event_path = FT_EVENT_DIR + "workqueue/enable"
-    permitted_files = {
-      workq_event_path: "0",
-      FT_TRACE: "x"
-    }
-    io_interface = make_test_io_interface(permitted_files)
-    systrace_cmd = SYSTRACE_HOST_CMD_DEFAULT + ["workq"]
-    options, categories = run_systrace.parse_options(systrace_cmd)
-    agent = ftrace_agent.FtraceAgent(io_interface)
-    self.assertEqual(['workq'], agent._avail_categories())
-
-    # confirm tracing is enabled, buffer is cleared
-    agent.StartAgentTracing(options, categories)
-    self.assertEqual(permitted_files[FT_TRACE_ON], "1")
-    self.assertEqual(permitted_files[FT_TRACE], "")
-
-    # fill in file with dummy contents
-    dummy_trace = "trace_contents"
-    permitted_files[FT_TRACE] = dummy_trace
-
-    # confirm tracing is disabled
-    agent.StopAgentTracing()
-    agent.GetResults()
-    self.assertEqual(permitted_files[FT_TRACE_ON], "0")
-
-    # confirm trace is expected, and read from fs
-    self.assertEqual(agent.GetResults().raw_data, dummy_trace)
-
-    # confirm buffer size is reset to 1
-    self.assertEqual(permitted_files[FT_BUFFER_SIZE], "1")
-
-  @decorators.HostOnlyTest
-  def test_tracing_event_enable_disable(self):
-    # turn on irq tracing
-    ipi_event_path = FT_EVENT_DIR + "ipi/enable"
-    irq_event_path = FT_EVENT_DIR + "irq/enable"
-    permitted_files = {
-      ipi_event_path: "0",
-      irq_event_path: "0"
-    }
-    io_interface = make_test_io_interface(permitted_files)
-    systrace_cmd = SYSTRACE_HOST_CMD_DEFAULT + ["irq"]
-    options, categories = run_systrace.parse_options(systrace_cmd)
-    options.ftrace_categories = categories
-    agent = ftrace_agent.FtraceAgent(io_interface)
-    self.assertEqual(['irq'], agent._avail_categories())
-
-    # confirm all the event nodes are turned on during tracing
-    agent.StartAgentTracing(options)
-    self.assertEqual(permitted_files[irq_event_path], "1")
-    self.assertEqual(permitted_files[ipi_event_path], "1")
-
-    # and then turned off when completed.
-    agent.StopAgentTracing()
-    agent.GetResults()
-    self.assertEqual(permitted_files[irq_event_path], "0")
-    self.assertEqual(permitted_files[ipi_event_path], "0")
-
-  @decorators.HostOnlyTest
-  def test_buffer_size(self):
-    systrace_cmd = SYSTRACE_HOST_CMD_DEFAULT + ['-b', '16000']
-    options, categories = run_systrace.parse_options(systrace_cmd)
-    agent = ftrace_agent.FtraceAgent()
-    agent._config = options
-    agent._config.atrace_categories = categories
-    self.assertEqual(agent._get_trace_buffer_size(), 16000)
-
-if __name__ == "__main__":
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py b/systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py
deleted file mode 100644
index 72d84b5..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import py_utils
-import optparse
-import threading
-
-from devil.android import device_utils
-from systrace import trace_result
-from systrace import tracing_agents
-from py_trace_event import trace_time as trace_time_module
-
-TRACE_FILE_PATH = \
-    '/sdcard/Android/data/org.chromium.latency.walt/files/trace.txt'
-
-CLOCK_DOMAIN_MARKER = '# clock_type=LINUX_CLOCK_MONOTONIC\n'
-
-
-def try_create_agent(options):
-  if options.is_walt_enabled:
-    return WaltAgent()
-  return None
-
-
-class WaltConfig(tracing_agents.TracingConfig):
-  def __init__(self, device_serial_number, is_walt_enabled):
-    tracing_agents.TracingConfig.__init__(self)
-    self.device_serial_number = device_serial_number
-    self.is_walt_enabled = is_walt_enabled
-
-
-def add_options(parser):
-  options = optparse.OptionGroup(parser, 'WALT trace options')
-  options.add_option('--walt', dest='is_walt_enabled', default=False,
-                    action='store_true', help='Use the WALT tracing agent. '
-                    'WALT is a device for measuring latency of physical '
-                    'sensors on phones and computers. '
-                    'See https://github.com/google/walt')
-  return options
-
-
-def get_config(options):
-  return WaltConfig(options.device_serial_number, options.is_walt_enabled)
-
-
-class WaltAgent(tracing_agents.TracingAgent):
-  """
-  This tracing agent requires the WALT app to be installed on the Android phone,
-  and requires the WALT device to be attached to the phone. WALT is a device
-  for measuring latency of physical sensors and outputs on phones and
-  computers. For more information, visit https://github.com/google/walt
-  """
-  def __init__(self):
-    super(WaltAgent, self).__init__()
-    self._trace_contents = None
-    self._config = None
-    self._device_utils = None
-    self._clock_sync_marker = None
-    self._collection_thread = None
-
-  def __repr__(self):
-    return 'WaltAgent'
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    del timeout  # unused
-    self._config = config
-    self._device_utils = device_utils.DeviceUtils(
-        self._config.device_serial_number)
-    if self._device_utils.PathExists(TRACE_FILE_PATH):
-      # clear old trace events so they are not included in the current trace
-      self._device_utils.WriteFile(TRACE_FILE_PATH, '')
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    """Stops tracing and starts collecting results.
-
-    To synchronously retrieve the results after calling this function,
-    call GetResults().
-    """
-    del timeout  # unused
-    self._collection_thread = threading.Thread(
-        target=self._collect_trace_data)
-    self._collection_thread.start()
-    return True
-
-  def _collect_trace_data(self):
-    self._trace_contents = self._device_utils.ReadFile(TRACE_FILE_PATH)
-
-  def SupportsExplicitClockSync(self):
-    return True
-
-  def RecordClockSyncMarker(self, sync_id, did_record_clock_sync_callback):
-    cmd = 'cat /proc/timer_list | grep now'
-    t1 = trace_time_module.Now()
-    command_result = self._device_utils.RunShellCommand(cmd, shell=True)
-    nsec = command_result[0].split()[2]
-    self._clock_sync_marker = format_clock_sync_marker(sync_id, nsec)
-    did_record_clock_sync_callback(t1, sync_id)
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    del timeout  # unused
-    self._collection_thread.join()
-    self._collection_thread = None
-    return trace_result.TraceResult('waltTrace', self._get_trace_result())
-
-  def _get_trace_result(self):
-    result = '# tracer: \n' + CLOCK_DOMAIN_MARKER + self._trace_contents
-    if self._clock_sync_marker is not None:
-      result += self._clock_sync_marker
-    return result
-
-
-def format_clock_sync_marker(sync_id, nanosec_time):
-  return ('<0>-0  (-----) [001] ...1  ' + str(float(nanosec_time) / 1e9)
-          + ': tracing_mark_write: trace_event_clock_sync: name='
-          + sync_id + '\n')
diff --git a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py b/systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py
deleted file mode 100644
index b4fcaf7..0000000
--- a/systrace/catapult/systrace/systrace/tracing_agents/walt_agent_unittest.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import unittest
-
-from systrace import decorators
-from systrace import run_systrace
-from systrace.tracing_agents import walt_agent
-
-
-class WaltAgentTest(unittest.TestCase):
-  """
-  The WALT agent pulls the trace log from the Android phone, and does not
-  communicate with the WALT device directly. This makes the agent more similar
-  to atrace than BattOr. Since the host only connects to the Android phone,
-  more exhaustive testing would require mocking DeviceUtils.
-  """
-
-  @decorators.HostOnlyTest
-  def test_construct_walt_args(self):
-    options, _ = run_systrace.parse_options(['./run_systrace.py',
-                                                      '--walt'])
-    self.assertTrue(walt_agent.get_config(options).is_walt_enabled)
-    options, _ = run_systrace.parse_options(['./run_systrace.py'])
-    self.assertFalse(walt_agent.get_config(options).is_walt_enabled)
-
-  @decorators.HostOnlyTest
-  def test_format_clock_sync_marker(self):
-    actual_marker = walt_agent.format_clock_sync_marker(
-                    'some_sync_id', 12345678901234)
-    expected_marker = ('<0>-0  (-----) [001] ...1  12345.6789012: ' +
-                       'tracing_mark_write: trace_event_clock_sync: ' +
-                       'name=some_sync_id\n')
-    self.assertEqual(actual_marker, expected_marker)
-
-  @decorators.HostOnlyTest
-  def test_get_results_string(self):
-    agent = walt_agent.WaltAgent()
-    agent._trace_contents = '<trace contents here>\n'
-    agent._clock_sync_marker = '<clock sync marker here>\n'
-    result = agent._get_trace_result()
-    self.assertEquals(result, '# tracer: \n# clock_type=LINUX_CLOCK_MONOTONIC\n'
-                      '<trace contents here>\n<clock sync marker here>\n')
-
-if __name__ == "__main__":
-  logging.getLogger().setLevel(logging.DEBUG)
-  unittest.main(verbosity=2)
diff --git a/systrace/catapult/systrace/systrace/tracing_controller.py b/systrace/catapult/systrace/systrace/tracing_controller.py
deleted file mode 100644
index d0d2d7c..0000000
--- a/systrace/catapult/systrace/systrace/tracing_controller.py
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-'''Tracing controller class. This class manages
-multiple tracing agents and collects data from all of them. It also
-manages the clock sync process.
-'''
-
-import ast
-import json
-import sys
-import py_utils
-import tempfile
-import uuid
-
-from systrace import trace_result
-from systrace import tracing_agents
-from py_trace_event import trace_event
-
-
-TRACE_DATA_CONTROLLER_NAME = 'systraceController'
-
-
-def ControllerAgentClockSync(issue_ts, name):
-  """Record the clock sync marker for controller tracing agent.
-
-  Unlike with the other tracing agents, the tracing controller should not
-  call this directly. Rather, it is called via callback from the other
-  tracing agents when they write a trace.
-  """
-  trace_event.clock_sync(name, issue_ts=issue_ts)
-
-
-class TracingControllerAgent(tracing_agents.TracingAgent):
-  def __init__(self):
-    super(TracingControllerAgent, self).__init__()
-    self._log_path = None
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StartAgentTracing(self, config, timeout=None):
-    """Start tracing for the controller tracing agent.
-
-    Start tracing for the controller tracing agent. Note that
-    the tracing controller records the "controller side"
-    of the clock sync records, and nothing else.
-    """
-    del config
-    if not trace_event.trace_can_enable():
-      raise RuntimeError, ('Cannot enable trace_event;'
-                           ' ensure py_utils is in PYTHONPATH')
-
-    controller_log_file = tempfile.NamedTemporaryFile(delete=False)
-    self._log_path = controller_log_file.name
-    controller_log_file.close()
-    trace_event.trace_enable(self._log_path)
-    return True
-
-  @py_utils.Timeout(tracing_agents.START_STOP_TIMEOUT)
-  def StopAgentTracing(self, timeout=None):
-    """Stops tracing for the controller tracing agent.
-    """
-    # pylint: disable=no-self-use
-    # This function doesn't use self, but making it a member function
-    # for consistency with the other TracingAgents
-    trace_event.trace_disable()
-    return True
-
-  @py_utils.Timeout(tracing_agents.GET_RESULTS_TIMEOUT)
-  def GetResults(self, timeout=None):
-    """Gets the log output from the controller tracing agent.
-
-    This output only contains the "controller side" of the clock sync records.
-    """
-    with open(self._log_path, 'r') as outfile:
-      data = ast.literal_eval(outfile.read() + ']')
-    # Explicitly set its own clock domain. This will stop the Systrace clock
-    # domain from incorrectly being collapsed into the on device clock domain.
-    formatted_data = {
-        'traceEvents': data,
-        'metadata': {
-            'clock-domain': 'SYSTRACE',
-        }
-    }
-    return trace_result.TraceResult(TRACE_DATA_CONTROLLER_NAME,
-                                    json.dumps(formatted_data))
-
-  def SupportsExplicitClockSync(self):
-    """Returns whether this supports explicit clock sync.
-    Although the tracing controller conceptually supports explicit clock
-    sync, it is not an agent controlled by other controllers so it does not
-    define RecordClockSyncMarker (rather, the recording of the "controller
-    side" of the clock sync marker is done in _IssueClockSyncMarker). Thus,
-    SupportsExplicitClockSync must return false.
-    """
-    return False
-
-  # pylint: disable=unused-argument
-  def RecordClockSyncMarker(self, sync_id, callback):
-    raise NotImplementedError
-
-class TracingController(object):
-  def __init__(self, agents_with_config, controller_config):
-    """Create tracing controller.
-
-    Create a tracing controller object. Note that the tracing
-    controller is also a tracing agent.
-
-    Args:
-       agents_with_config: List of tracing agents for this controller with the
-                           corresponding tracing configuration objects.
-       controller_config:  Configuration options for the tracing controller.
-    """
-    self._child_agents = None
-    self._child_agents_with_config = agents_with_config
-    self._controller_agent = TracingControllerAgent()
-    self._controller_config = controller_config
-    self._trace_in_progress = False
-    self.all_results = None
-
-  @property
-  def get_child_agents(self):
-    return self._child_agents
-
-  def StartTracing(self):
-    """Start tracing for all tracing agents.
-
-    This function starts tracing for both the controller tracing agent
-    and the child tracing agents.
-
-    Returns:
-        Boolean indicating whether or not the start tracing succeeded.
-        Start tracing is considered successful if at least the
-        controller tracing agent was started.
-    """
-    assert not self._trace_in_progress, 'Trace already in progress.'
-    self._trace_in_progress = True
-
-    # Start the controller tracing agents. Controller tracing agent
-    # must be started successfully to proceed.
-    if not self._controller_agent.StartAgentTracing(
-        self._controller_config,
-        timeout=self._controller_config.timeout):
-      print 'Unable to start controller tracing agent.'
-      return False
-
-    # Start the child tracing agents.
-    succ_agents = []
-    for agent_and_config in self._child_agents_with_config:
-      agent = agent_and_config.agent
-      config = agent_and_config.config
-      if agent.StartAgentTracing(config,
-                                 timeout=self._controller_config.timeout):
-        succ_agents.append(agent)
-      else:
-        print 'Agent %s not started.' % str(agent)
-
-    # Print warning if all agents not started.
-    na = len(self._child_agents_with_config)
-    ns = len(succ_agents)
-    if ns < na:
-      print 'Warning: Only %d of %d tracing agents started.' % (ns, na)
-    self._child_agents = succ_agents
-    return True
-
-  def StopTracing(self):
-    """Issue clock sync marker and stop tracing for all tracing agents.
-
-    This function stops both the controller tracing agent
-    and the child tracing agents. It issues a clock sync marker prior
-    to stopping tracing.
-
-    Returns:
-        Boolean indicating whether or not the stop tracing succeeded
-        for all agents.
-    """
-    assert self._trace_in_progress, 'No trace in progress.'
-    self._trace_in_progress = False
-
-    # Issue the clock sync marker and stop the child tracing agents.
-    self._IssueClockSyncMarker()
-    succ_agents = []
-    for agent in self._child_agents:
-      if agent.StopAgentTracing(timeout=self._controller_config.timeout):
-        succ_agents.append(agent)
-      else:
-        print 'Agent %s not stopped.' % str(agent)
-
-    # Stop the controller tracing agent. Controller tracing agent
-    # must be stopped successfully to proceed.
-    if not self._controller_agent.StopAgentTracing(
-        timeout=self._controller_config.timeout):
-      print 'Unable to stop controller tracing agent.'
-      return False
-
-    # Print warning if all agents not stopped.
-    na = len(self._child_agents)
-    ns = len(succ_agents)
-    if ns < na:
-      print 'Warning: Only %d of %d tracing agents stopped.' % (ns, na)
-      self._child_agents = succ_agents
-
-    # Collect the results from all the stopped tracing agents.
-    all_results = []
-    for agent in self._child_agents + [self._controller_agent]:
-      try:
-        result = agent.GetResults(
-            timeout=self._controller_config.collection_timeout)
-        if not result:
-          print 'Warning: Timeout when getting results from %s.' % str(agent)
-          continue
-        if result.source_name in [r.source_name for r in all_results]:
-          print ('Warning: Duplicate tracing agents named %s.' %
-                 result.source_name)
-        all_results.append(result)
-      # Check for exceptions. If any exceptions are seen, reraise and abort.
-      # Note that a timeout exception will be swalloed by the timeout
-      # mechanism and will not get to that point (it will return False instead
-      # of the trace result, which will be dealt with above)
-      except:
-        print 'Warning: Exception getting results from %s:' % str(agent)
-        print sys.exc_info()[0]
-        raise
-    self.all_results = all_results
-    return all_results
-
-  def GetTraceType(self):
-    """Return a string representing the child agents that are being traced."""
-    sorted_agents = sorted(map(str, self._child_agents))
-    return ' + '.join(sorted_agents)
-
-  def _IssueClockSyncMarker(self):
-    """Issue clock sync markers to all the child tracing agents."""
-    for agent in self._child_agents:
-      if agent.SupportsExplicitClockSync():
-        sync_id = GetUniqueSyncID()
-        agent.RecordClockSyncMarker(sync_id, ControllerAgentClockSync)
-
-def GetUniqueSyncID():
-  """Get a unique sync ID.
-
-  Gets a unique sync ID by generating a UUID and converting it to a string
-  (since UUIDs are not JSON serializable)
-  """
-  return str(uuid.uuid4())
-
-
-class AgentWithConfig(object):
-  def __init__(self, agent, config):
-    self.agent = agent
-    self.config = config
-
-
-def CreateAgentsWithConfig(options, modules):
-  """Create tracing agents.
-
-  This function will determine which tracing agents are valid given the
-  options and create those agents along with their corresponding configuration
-  object.
-  Args:
-    options: The command-line options.
-    modules: The modules for either Systrace or profile_chrome.
-             TODO(washingtonp): After all profile_chrome agents are in
-             Systrace, this parameter will no longer be valid.
-  Returns:
-    A list of AgentWithConfig options containing agents and their corresponding
-    configuration object.
-  """
-  result = []
-  for module in modules:
-    config = module.get_config(options)
-    agent = module.try_create_agent(config)
-    if agent and config:
-      result.append(AgentWithConfig(agent, config))
-  return [x for x in result if x and x.agent]
-
-
-class TracingControllerConfig(tracing_agents.TracingConfig):
-  def __init__(self, output_file, trace_time, write_json,
-               link_assets, asset_dir, timeout, collection_timeout,
-               device_serial_number, target):
-    tracing_agents.TracingConfig.__init__(self)
-    self.output_file = output_file
-    self.trace_time = trace_time
-    self.write_json = write_json
-    self.link_assets = link_assets
-    self.asset_dir = asset_dir
-    self.timeout = timeout
-    self.collection_timeout = collection_timeout
-    self.device_serial_number = device_serial_number
-    self.target = target
-
-
-def GetControllerConfig(options):
-  return TracingControllerConfig(options.output_file, options.trace_time,
-                                 options.write_json,
-                                 options.link_assets, options.asset_dir,
-                                 options.timeout, options.collection_timeout,
-                                 options.device_serial_number, options.target)
-
-def GetChromeStartupControllerConfig(options):
-  return TracingControllerConfig(None, options.trace_time,
-                                 options.write_json, None, None, None, None,
-                                 None, None)
diff --git a/systrace/catapult/systrace/systrace/update_systrace_trace_viewer.py b/systrace/catapult/systrace/systrace/update_systrace_trace_viewer.py
deleted file mode 100755
index 72878a4..0000000
--- a/systrace/catapult/systrace/systrace/update_systrace_trace_viewer.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import codecs
-import optparse
-import os
-import re
-import subprocess
-import sys
-
-_CATAPULT_PATH = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir))
-sys.path.append(os.path.join(_CATAPULT_PATH, 'tracing'))
-
-from tracing_build import vulcanize_trace_viewer
-
-
-SYSTRACE_TRACE_VIEWER_HTML_FILE = os.path.join(
-    os.path.abspath(os.path.dirname(__file__)),
-    'systrace_trace_viewer.html')
-CATAPULT_REV_ = 'CATAPULT_REV'
-NO_AUTO_UPDATE_ = 'NO_AUTO_UPDATE'
-UNKNOWN_REVISION_ = 'UNKNOWN'
-
-
-def create_catapult_rev_str_(revision):
-  return '<!--' + CATAPULT_REV_ + '=' + str(revision) + '-->'
-
-
-def get_catapult_rev_in_file_(html_file):
-  assert os.path.exists(html_file)
-  rev = ''
-  with open(html_file, 'r') as f:
-    lines = f.readlines()
-    for line in lines[::-1]:
-      if CATAPULT_REV_ in line:
-        tokens = line.split(CATAPULT_REV_)
-        rev = re.sub(r'[=\->]', '', tokens[1]).strip()
-        break
-  return rev
-
-
-def get_catapult_rev_in_git_():
-  try:
-    catapult_rev = subprocess.check_output(
-        'git rev-parse HEAD',
-        shell=True, # Needed by Windows
-        cwd=os.path.dirname(os.path.abspath(__file__))).strip()
-  except (subprocess.CalledProcessError, OSError):
-    return None
-  if not catapult_rev:
-    return None
-  return catapult_rev
-
-
-def update(no_auto_update=False, no_min=False, force_update=False):
-  """Update the systrace trace viewer html file.
-
-  When the html file exists, do not update the file if
-  1. the revision is NO_AUTO_UPDATE_;
-  2. or the revision is not changed.
-
-  Args:
-    no_auto_update: If true, force updating the file with revision
-                    NO_AUTO_UPDATE_. Future auto-updates will be skipped.
-    no_min:         If true, skip minification when updating the file.
-    force_update:   If true, update the systrace trace viewer file no matter
-                    what.
-  """
-  if no_auto_update:
-    new_rev = NO_AUTO_UPDATE_
-  else:
-    new_rev = get_catapult_rev_in_git_()
-    if not new_rev:
-      # Source tree could be missing git metadata.
-      print >> sys.stderr, 'Warning: Couldn\'t determine current git revision.'
-      new_rev = UNKNOWN_REVISION_
-
-  need_update = False
-  if force_update:
-    need_update = True
-  elif no_auto_update:
-    need_update = True
-  elif not os.path.exists(SYSTRACE_TRACE_VIEWER_HTML_FILE):
-    need_update = True
-  else:
-    old_rev = get_catapult_rev_in_file_(SYSTRACE_TRACE_VIEWER_HTML_FILE)
-    if not old_rev or old_rev == UNKNOWN_REVISION_:
-      need_update = True
-    # If old_rev was set to NO_AUTO_UPDATE_ it should be skipped, since forced
-    # update cases have been already handled above.
-    if old_rev != new_rev and old_rev != NO_AUTO_UPDATE_:
-      need_update = True
-
-  if not need_update:
-    print 'Update skipped.'
-    return
-
-  print 'Generating viewer file %s with revision %s.' % (
-            SYSTRACE_TRACE_VIEWER_HTML_FILE, new_rev)
-
-  # Generate the vulcanized result.
-  with codecs.open(SYSTRACE_TRACE_VIEWER_HTML_FILE,
-                   encoding='utf-8', mode='w') as f:
-    vulcanize_trace_viewer.WriteTraceViewer(
-        f,
-        config_name='full',
-        minify=(not no_min),
-        output_html_head_and_body=False)
-    if not force_update:
-      f.write(create_catapult_rev_str_(new_rev))
-
-def main():
-  parser = optparse.OptionParser()
-  parser.add_option('--force-update', dest='force_update',
-                    default=False, action='store_true', help='force update the '
-                    'systrace trace viewer html file')
-  parser.add_option('--no-auto-update', dest='no_auto_update',
-                    default=False, action='store_true', help='force update the '
-                    'systrace trace viewer html file and disable auto-updates, '
-                    'delete \'systrace_trace_viewer.html\' to re-enable '
-                    'auto-updates')
-  parser.add_option('--no-min', dest='no_min', default=False,
-                    action='store_true', help='skip minification')
-  # pylint: disable=unused-variable
-  options, unused_args = parser.parse_args(sys.argv[1:])
-
-  update(no_auto_update=options.no_auto_update,
-         no_min=options.no_min,
-         force_update=options.force_update)
-
-if __name__ == '__main__':
-  main()
diff --git a/systrace/catapult/systrace/systrace/util.py b/systrace/catapult/systrace/systrace/util.py
deleted file mode 100644
index 61dc475..0000000
--- a/systrace/catapult/systrace/systrace/util.py
+++ /dev/null
@@ -1,211 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import optparse
-import os
-import random
-import string
-import subprocess
-import sys
-
-from devil.android.constants import chrome
-
-class OptionParserIgnoreErrors(optparse.OptionParser):
-  """Wrapper for OptionParser that ignores errors and produces no output."""
-
-  def error(self, msg):
-    pass
-
-  def exit(self, status=0, msg=None):
-    pass
-
-  def print_usage(self, out_file=None):
-    pass
-
-  def print_help(self, out_file=None):
-    pass
-
-  def print_version(self, out_file=None):
-    pass
-
-
-def add_adb_serial(adb_command, device_serial):
-  """Add serial number to ADB shell command.
-
-  ADB shell command is given as list, e.g.
-  ['adb','shell','some_command','some_args'].
-  This replaces it with:
-  ['adb','shell',-s',device_serial,'some_command','some_args']
-
-  Args:
-     adb_command: ADB command list.
-     device_serial: Device serial number.
-
-  Returns:
-     ADB command list with serial number added.
-  """
-  if device_serial is not None:
-    adb_command.insert(1, device_serial)
-    adb_command.insert(1, '-s')
-
-
-def construct_adb_shell_command(shell_args, device_serial):
-  """Construct an ADB shell command with given device serial and arguments.
-
-  Args:
-     shell_args: array of arguments to pass to adb shell.
-     device_serial: if not empty, will add the appropriate command-line
-        parameters so that adb targets the given device.
-  """
-  adb_command = ['adb', 'shell', ' '.join(shell_args)]
-  add_adb_serial(adb_command, device_serial)
-  return adb_command
-
-
-def run_adb_command(adb_command):
-  adb_output = []
-  adb_return_code = 0
-  try:
-    adb_output = subprocess.check_output(adb_command, stderr=subprocess.STDOUT,
-                                         shell=False, universal_newlines=True)
-  except OSError as error:
-    # This usually means that the adb executable was not found in the path.
-    print >> sys.stderr, ('\nThe command "%s" failed with the following error:'
-                          % ' '.join(adb_command))
-    print >> sys.stderr, '    %s' % str(error)
-    print >> sys.stderr, 'Is adb in your path?'
-    adb_return_code = error.errno
-    adb_output = error
-  except subprocess.CalledProcessError as error:
-    # The process exited with an error.
-    adb_return_code = error.returncode
-    adb_output = error.output
-
-  return (adb_output, adb_return_code)
-
-
-def run_adb_shell(shell_args, device_serial):
-  """Runs "adb shell" with the given arguments.
-
-  Args:
-    shell_args: array of arguments to pass to adb shell.
-    device_serial: if not empty, will add the appropriate command-line
-        parameters so that adb targets the given device.
-  Returns:
-    A tuple containing the adb output (stdout & stderr) and the return code
-    from adb.  Will exit if adb fails to start.
-  """
-  adb_command = construct_adb_shell_command(shell_args, device_serial)
-  return run_adb_command(adb_command)
-
-
-def get_device_sdk_version():
-  """Uses adb to attempt to determine the SDK version of a running device."""
-
-  getprop_args = ['getprop', 'ro.build.version.sdk']
-
-  # get_device_sdk_version() is called before we even parse our command-line
-  # args.  Therefore, parse just the device serial number part of the
-  # command-line so we can send the adb command to the correct device.
-  parser = OptionParserIgnoreErrors()
-  parser.add_option('-e', '--serial', dest='device_serial', type='string')
-  options, unused_args = parser.parse_args()  # pylint: disable=unused-variable
-
-  success = False
-
-  adb_output, adb_return_code = run_adb_shell(getprop_args,
-                                              options.device_serial)
-
-  if adb_return_code == 0:
-    # ADB may print output other than the version number (e.g. it chould
-    # print a message about starting the ADB server).
-    # Break the ADB output into white-space delimited segments.
-    parsed_output = str.split(adb_output)
-    if parsed_output:
-      # Assume that the version number is the last thing printed by ADB.
-      version_string = parsed_output[-1]
-      if version_string:
-        try:
-          # Try to convert the text into an integer.
-          version = int(version_string)
-        except ValueError:
-          version = -1
-        else:
-          success = True
-
-  if not success:
-    sys.exit(1)
-
-  return version
-
-
-def generate_random_filename_for_test():
-  """Used for temporary files used in tests.
-
-  Files created from 'NamedTemporaryFile' have inconsistent reuse support across
-  platforms, so it's not guaranteed that they can be reopened. Since many tests
-  communicate files via path, we typically use this method, as well as
-  manual file removal."""
-  name = ''.join(random.choice(string.ascii_uppercase +
-              string.digits) for _ in range(10))
-  return os.path.abspath(name)
-
-
-def get_supported_browsers():
-  """Returns the package names of all supported browsers."""
-  # Add aliases for backwards compatibility.
-  supported_browsers = {
-    'stable': chrome.PACKAGE_INFO['chrome_stable'],
-    'beta': chrome.PACKAGE_INFO['chrome_beta'],
-    'dev': chrome.PACKAGE_INFO['chrome_dev'],
-    'build': chrome.PACKAGE_INFO['chrome'],
-  }
-  supported_browsers.update(chrome.PACKAGE_INFO)
-  return supported_browsers
-
-
-def get_default_serial():
-  if 'ANDROID_SERIAL' in os.environ:
-    return os.environ['ANDROID_SERIAL']
-  return None
-
-
-def get_main_options(parser):
-  parser.add_option('-o', dest='output_file', help='write trace output to FILE',
-                    default=None, metavar='FILE')
-  parser.add_option('-t', '--time', dest='trace_time', type='int',
-                    help='trace for N seconds', metavar='N')
-  parser.add_option('-j', '--json', dest='write_json',
-                    default=False, action='store_true',
-                    help='write a JSON file')
-  parser.add_option('--link-assets', dest='link_assets', default=False,
-                    action='store_true',
-                    help='(deprecated)')
-  parser.add_option('--from-file', dest='from_file', action='store',
-                    help='read the trace from a file (compressed) rather than'
-                    'running a live trace')
-  parser.add_option('--asset-dir', dest='asset_dir', default='trace-viewer',
-                    type='string', help='(deprecated)')
-  parser.add_option('-e', '--serial', dest='device_serial_number',
-                    default=get_default_serial(),
-                    type='string', help='adb device serial number')
-  parser.add_option('--target', dest='target', default='android', type='string',
-                    help='choose tracing target (android or linux)')
-  parser.add_option('--timeout', dest='timeout', type='int',
-                    help='timeout for start and stop tracing (seconds)')
-  parser.add_option('--collection-timeout', dest='collection_timeout',
-                    type='int', help='timeout for data collection (seconds)')
-  parser.add_option('-a', '--app', dest='app_name', default=None,
-                    type='string', action='store',
-                    help='enable application-level tracing for '
-                    'comma-separated list of app cmdlines')
-  parser.add_option('-t', '--time', dest='trace_time', type='int',
-                    help='trace for N seconds', metavar='N')
-  parser.add_option('--target', dest='target', default='android',
-                    type='string', help='choose tracing target (android or '
-                    ' linux)')
-  parser.add_option('-b', '--buf-size', dest='trace_buf_size',
-                    type='int', help='use a trace buffer size '
-                    ' of N KB', metavar='N')
-  return parser
diff --git a/systrace/catapult/systrace/systrace/util_unittest.py b/systrace/catapult/systrace/systrace/util_unittest.py
deleted file mode 100644
index e88f835..0000000
--- a/systrace/catapult/systrace/systrace/util_unittest.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import unittest
-
-from systrace import decorators
-from systrace import util
-
-
-DEVICE_SERIAL = 'AG8404EC0444AGC'
-LIST_TMP_ARGS = ['ls', '/data/local/tmp']
-ATRACE_ARGS = ['atrace', '-z', '-t', '10', '-b', '4096']
-ADB_SHELL = ['adb', '-s', DEVICE_SERIAL, 'shell']
-
-
-class UtilTest(unittest.TestCase):
-
-  @decorators.HostOnlyTest
-  def test_construct_adb_shell_command(self):
-    command = util.construct_adb_shell_command(LIST_TMP_ARGS, None)
-    self.assertEqual(' '.join(command), 'adb shell ls /data/local/tmp')
-
-    command = util.construct_adb_shell_command(LIST_TMP_ARGS, DEVICE_SERIAL)
-    self.assertEqual(' '.join(command),
-                     'adb -s AG8404EC0444AGC shell ls /data/local/tmp')
-
-    command = util.construct_adb_shell_command(ATRACE_ARGS, DEVICE_SERIAL)
-    self.assertEqual(' '.join(command),
-                     'adb -s AG8404EC0444AGC shell atrace -z -t 10 -b 4096')
diff --git a/systrace/catapult/third_party/pyserial/LICENSE.txt b/systrace/catapult/third_party/pyserial/LICENSE.txt
deleted file mode 100644
index f604ea3..0000000
--- a/systrace/catapult/third_party/pyserial/LICENSE.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-Copyright (c) 2001-2013 Chris Liechti <cliechti@gmx.net>;
-All Rights Reserved.
-
-This is the Python license. In short, you can use this product in
-commercial and non-commercial applications, modify it, redistribute it.
-A notification to the author when you use and/or modify it is welcome.
-
-
-TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING THIS SOFTWARE
-===================================================================
-
-LICENSE AGREEMENT
------------------
-
-1. This LICENSE AGREEMENT is between the copyright holder of this
-product, and the Individual or Organization ("Licensee") accessing
-and otherwise using this product in source or binary form and its
-associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement,
-the copyright holder hereby grants Licensee a nonexclusive,
-royalty-free, world-wide license to reproduce, analyze, test,
-perform and/or display publicly, prepare derivative works, distribute,
-and otherwise use this product alone or in any derivative version,
-provided, however, that copyright holders License Agreement and
-copyright holders notice of copyright are retained in this product
-alone or in any derivative version prepared by Licensee.
-
-3. In the event Licensee prepares a derivative work that is based on
-or incorporates this product or any part thereof, and wants to make
-the derivative work available to others as provided herein, then
-Licensee hereby agrees to include in any such work a brief summary of
-the changes made to this product.
-
-4. The copyright holder is making this product available to Licensee on
-an "AS IS" basis. THE COPYRIGHT HOLDER MAKES NO REPRESENTATIONS OR
-WARRANTIES, EXPRESS OR IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION,
-THE COPYRIGHT HOLDER MAKES NO AND DISCLAIMS ANY REPRESENTATION OR
-WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR
-THAT THE USE OF THIS PRODUCT WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. THE COPYRIGHT HOLDER SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER
-USERS OF THIS PRODUCT FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL
-DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE
-USING THIS PRODUCT, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE
-POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-7. Nothing in this License Agreement shall be deemed to create any
-relationship of agency, partnership, or joint venture between the
-copyright holder and Licensee. This License Agreement does not grant
-permission to use trademarks or trade names from the copyright holder
-in a trademark sense to endorse or promote products or services of
-Licensee, or any third party.
-
-8. By copying, installing or otherwise using this product, Licensee
-agrees to be bound by the terms and conditions of this License
-Agreement.
-
diff --git a/systrace/catapult/third_party/pyserial/README.chromium b/systrace/catapult/third_party/pyserial/README.chromium
deleted file mode 100644
index 04593db..0000000
--- a/systrace/catapult/third_party/pyserial/README.chromium
+++ /dev/null
@@ -1,19 +0,0 @@
-Name: pySerial
-Short Name: pySerial
-URL: https://github.com/pyserial/pyserial
-Version: 2.7
-Date: 2013-10-17
-License: Python
-License File: NOT_SHIPPED
-Security Critical: no
-
-Description:
-Library for Python access for the serial port. Used for communication with
-a Monsoon device, which tunnels serial over USB.
-
-Local Modifications:
-Includes only the serial/ folder and LICENSE.txt.
-Packaging and setup files have not been copied downstream.
-All other files and folders (documentation/, examples/, test/)
-have not been copied downstream.
-linux-product_info.patch has been applied to include the product information as description.
diff --git a/systrace/catapult/third_party/pyserial/linux-product_info.patch b/systrace/catapult/third_party/pyserial/linux-product_info.patch
deleted file mode 100644
index 9f8001a..0000000
--- a/systrace/catapult/third_party/pyserial/linux-product_info.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: serial/tools/list_ports_linux.py
-===================================================================
---- serial/tools/list_ports_linux.py	(revision 494)
-+++ serial/tools/list_ports_linux.py	(working copy)
-@@ -110,6 +110,14 @@
-     sys_dev_path = '/sys/class/tty/%s/device/interface' % (base,)
-     if os.path.exists(sys_dev_path):
-         return read_line(sys_dev_path)
-+
-+    # USB Product Information
-+    sys_dev_path = '/sys/class/tty/%s/device' % (base,)
-+    if os.path.exists(sys_dev_path):
-+        product_name_file = os.path.dirname(os.path.realpath(sys_dev_path)) + "/product"
-+        if os.path.exists(product_name_file):
-+            return read_line(product_name_file)
-+
-     return base
- 
- def hwinfo(device):
diff --git a/systrace/catapult/third_party/pyserial/serial/__init__.py b/systrace/catapult/third_party/pyserial/serial/__init__.py
deleted file mode 100755
index 33ae52e..0000000
--- a/systrace/catapult/third_party/pyserial/serial/__init__.py
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env python 
-
-# portable serial port access with python
-# this is a wrapper module for different platform implementations
-#
-# (C) 2001-2010 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-VERSION = '2.7'
-
-import sys
-
-if sys.platform == 'cli':
-    from serial.serialcli import *
-else:
-    import os
-    # chose an implementation, depending on os
-    if os.name == 'nt': #sys.platform == 'win32':
-        from serial.serialwin32 import *
-    elif os.name == 'posix':
-        from serial.serialposix import *
-    elif os.name == 'java':
-        from serial.serialjava import *
-    else:
-        raise ImportError("Sorry: no implementation for your platform ('%s') available" % (os.name,))
-
-
-protocol_handler_packages = [
-        'serial.urlhandler',
-        ]
-
-def serial_for_url(url, *args, **kwargs):
-    """\
-    Get an instance of the Serial class, depending on port/url. The port is not
-    opened when the keyword parameter 'do_not_open' is true, by default it
-    is. All other parameters are directly passed to the __init__ method when
-    the port is instantiated.
-
-    The list of package names that is searched for protocol handlers is kept in
-    ``protocol_handler_packages``.
-
-    e.g. we want to support a URL ``foobar://``. A module
-    ``my_handlers.protocol_foobar`` is provided by the user. Then
-    ``protocol_handler_packages.append("my_handlers")`` would extend the search
-    path so that ``serial_for_url("foobar://"))`` would work.
-    """
-    # check remove extra parameter to not confuse the Serial class
-    do_open = 'do_not_open' not in kwargs or not kwargs['do_not_open']
-    if 'do_not_open' in kwargs: del kwargs['do_not_open']
-    # the default is to use the native version
-    klass = Serial   # 'native' implementation
-    # check port type and get class
-    try:
-        url_nocase = url.lower()
-    except AttributeError:
-        # it's not a string, use default
-        pass
-    else:
-        if '://' in url_nocase:
-            protocol = url_nocase.split('://', 1)[0]
-            for package_name in protocol_handler_packages:
-                module_name = '%s.protocol_%s' % (package_name, protocol,)
-                try:
-                    handler_module = __import__(module_name)
-                except ImportError:
-                    pass
-                else:
-                    klass = sys.modules[module_name].Serial
-                    break
-            else:
-                raise ValueError('invalid URL, protocol %r not known' % (protocol,))
-        else:
-            klass = Serial   # 'native' implementation
-    # instantiate and open when desired
-    instance = klass(None, *args, **kwargs)
-    instance.port = url
-    if do_open:
-        instance.open()
-    return instance
diff --git a/systrace/catapult/third_party/pyserial/serial/rfc2217.py b/systrace/catapult/third_party/pyserial/serial/rfc2217.py
deleted file mode 100644
index 2012ea7..0000000
--- a/systrace/catapult/third_party/pyserial/serial/rfc2217.py
+++ /dev/null
@@ -1,1323 +0,0 @@
-#! python
-#
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see __init__.py
-#
-# This module implements a RFC2217 compatible client. RF2217 descibes a
-# protocol to access serial ports over TCP/IP and allows setting the baud rate,
-# modem control lines etc.
-#
-# (C) 2001-2013 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-# TODO:
-# - setting control line -> answer is not checked (had problems with one of the
-#   severs). consider implementing a compatibility mode flag to make check
-#   conditional
-# - write timeout not implemented at all
-
-##############################################################################
-# observations and issues with servers
-#=============================================================================
-# sredird V2.2.1
-# - http://www.ibiblio.org/pub/Linux/system/serial/   sredird-2.2.2.tar.gz
-# - does not acknowledge SET_CONTROL (RTS/DTR) correctly, always responding
-#   [105 1] instead of the actual value.
-# - SET_BAUDRATE answer contains 4 extra null bytes -> probably for larger
-#   numbers than 2**32?
-# - To get the signature [COM_PORT_OPTION 0] has to be sent.
-# - run a server: while true; do nc -l -p 7000 -c "sredird debug /dev/ttyUSB0 /var/lock/sredir"; done
-#=============================================================================
-# telnetcpcd (untested)
-# - http://ftp.wayne.edu/kermit/sredird/telnetcpcd-1.09.tar.gz
-# - To get the signature [COM_PORT_OPTION] w/o data has to be sent.
-#=============================================================================
-# ser2net
-# - does not negotiate BINARY or COM_PORT_OPTION for his side but at least
-#   acknowledges that the client activates these options
-# - The configuration may be that the server prints a banner. As this client
-#   implementation does a flushInput on connect, this banner is hidden from
-#   the user application.
-# - NOTIFY_MODEMSTATE: the poll interval of the server seems to be one
-#   second.
-# - To get the signature [COM_PORT_OPTION 0] has to be sent.
-# - run a server: run ser2net daemon, in /etc/ser2net.conf:
-#     2000:telnet:0:/dev/ttyS0:9600 remctl banner
-##############################################################################
-
-# How to identify ports? pySerial might want to support other protocols in the
-# future, so lets use an URL scheme.
-# for RFC2217 compliant servers we will use this:
-#    rfc2217://<host>:<port>[/option[/option...]]
-#
-# options:
-# - "debug" print diagnostic messages
-# - "ign_set_control": do not look at the answers to SET_CONTROL
-# - "poll_modem": issue NOTIFY_MODEMSTATE requests when CTS/DTR/RI/CD is read.
-#   Without this option it expects that the server sends notifications
-#   automatically on change (which most servers do and is according to the
-#   RFC).
-# the order of the options is not relevant
-
-from serial.serialutil import *
-import time
-import struct
-import socket
-import threading
-import Queue
-import logging
-
-# port string is expected to be something like this:
-# rfc2217://host:port
-# host may be an IP or including domain, whatever.
-# port is 0...65535
-
-# map log level names to constants. used in fromURL()
-LOGGER_LEVELS = {
-    'debug': logging.DEBUG,
-    'info': logging.INFO,
-    'warning': logging.WARNING,
-    'error': logging.ERROR,
-    }
-
-
-# telnet protocol characters
-IAC  = to_bytes([255]) # Interpret As Command
-DONT = to_bytes([254])
-DO   = to_bytes([253])
-WONT = to_bytes([252])
-WILL = to_bytes([251])
-IAC_DOUBLED = to_bytes([IAC, IAC])
-
-SE  = to_bytes([240])  # Subnegotiation End
-NOP = to_bytes([241])  # No Operation
-DM  = to_bytes([242])  # Data Mark
-BRK = to_bytes([243])  # Break
-IP  = to_bytes([244])  # Interrupt process
-AO  = to_bytes([245])  # Abort output
-AYT = to_bytes([246])  # Are You There
-EC  = to_bytes([247])  # Erase Character
-EL  = to_bytes([248])  # Erase Line
-GA  = to_bytes([249])  # Go Ahead
-SB =  to_bytes([250])  # Subnegotiation Begin
-
-# selected telnet options
-BINARY = to_bytes([0]) # 8-bit data path
-ECHO = to_bytes([1])   # echo
-SGA = to_bytes([3])    # suppress go ahead
-
-# RFC2217
-COM_PORT_OPTION = to_bytes([44])
-
-# Client to Access Server
-SET_BAUDRATE = to_bytes([1])
-SET_DATASIZE = to_bytes([2])
-SET_PARITY = to_bytes([3])
-SET_STOPSIZE = to_bytes([4])
-SET_CONTROL = to_bytes([5])
-NOTIFY_LINESTATE = to_bytes([6])
-NOTIFY_MODEMSTATE = to_bytes([7])
-FLOWCONTROL_SUSPEND = to_bytes([8])
-FLOWCONTROL_RESUME = to_bytes([9])
-SET_LINESTATE_MASK = to_bytes([10])
-SET_MODEMSTATE_MASK = to_bytes([11])
-PURGE_DATA = to_bytes([12])
-
-SERVER_SET_BAUDRATE = to_bytes([101])
-SERVER_SET_DATASIZE = to_bytes([102])
-SERVER_SET_PARITY = to_bytes([103])
-SERVER_SET_STOPSIZE = to_bytes([104])
-SERVER_SET_CONTROL = to_bytes([105])
-SERVER_NOTIFY_LINESTATE = to_bytes([106])
-SERVER_NOTIFY_MODEMSTATE = to_bytes([107])
-SERVER_FLOWCONTROL_SUSPEND = to_bytes([108])
-SERVER_FLOWCONTROL_RESUME = to_bytes([109])
-SERVER_SET_LINESTATE_MASK = to_bytes([110])
-SERVER_SET_MODEMSTATE_MASK = to_bytes([111])
-SERVER_PURGE_DATA = to_bytes([112])
-
-RFC2217_ANSWER_MAP = {
-    SET_BAUDRATE: SERVER_SET_BAUDRATE,
-    SET_DATASIZE: SERVER_SET_DATASIZE,
-    SET_PARITY: SERVER_SET_PARITY,
-    SET_STOPSIZE: SERVER_SET_STOPSIZE,
-    SET_CONTROL: SERVER_SET_CONTROL,
-    NOTIFY_LINESTATE: SERVER_NOTIFY_LINESTATE,
-    NOTIFY_MODEMSTATE: SERVER_NOTIFY_MODEMSTATE,
-    FLOWCONTROL_SUSPEND: SERVER_FLOWCONTROL_SUSPEND,
-    FLOWCONTROL_RESUME: SERVER_FLOWCONTROL_RESUME,
-    SET_LINESTATE_MASK: SERVER_SET_LINESTATE_MASK,
-    SET_MODEMSTATE_MASK: SERVER_SET_MODEMSTATE_MASK,
-    PURGE_DATA: SERVER_PURGE_DATA,
-}
-
-SET_CONTROL_REQ_FLOW_SETTING = to_bytes([0])        # Request Com Port Flow Control Setting (outbound/both)
-SET_CONTROL_USE_NO_FLOW_CONTROL = to_bytes([1])     # Use No Flow Control (outbound/both)
-SET_CONTROL_USE_SW_FLOW_CONTROL = to_bytes([2])     # Use XON/XOFF Flow Control (outbound/both)
-SET_CONTROL_USE_HW_FLOW_CONTROL = to_bytes([3])     # Use HARDWARE Flow Control (outbound/both)
-SET_CONTROL_REQ_BREAK_STATE = to_bytes([4])         # Request BREAK State
-SET_CONTROL_BREAK_ON = to_bytes([5])                # Set BREAK State ON
-SET_CONTROL_BREAK_OFF = to_bytes([6])               # Set BREAK State OFF
-SET_CONTROL_REQ_DTR = to_bytes([7])                 # Request DTR Signal State
-SET_CONTROL_DTR_ON = to_bytes([8])                  # Set DTR Signal State ON
-SET_CONTROL_DTR_OFF = to_bytes([9])                 # Set DTR Signal State OFF
-SET_CONTROL_REQ_RTS = to_bytes([10])                # Request RTS Signal State
-SET_CONTROL_RTS_ON = to_bytes([11])                 # Set RTS Signal State ON
-SET_CONTROL_RTS_OFF = to_bytes([12])                # Set RTS Signal State OFF
-SET_CONTROL_REQ_FLOW_SETTING_IN = to_bytes([13])    # Request Com Port Flow Control Setting (inbound)
-SET_CONTROL_USE_NO_FLOW_CONTROL_IN = to_bytes([14]) # Use No Flow Control (inbound)
-SET_CONTROL_USE_SW_FLOW_CONTOL_IN = to_bytes([15])  # Use XON/XOFF Flow Control (inbound)
-SET_CONTROL_USE_HW_FLOW_CONTOL_IN = to_bytes([16])  # Use HARDWARE Flow Control (inbound)
-SET_CONTROL_USE_DCD_FLOW_CONTROL = to_bytes([17])   # Use DCD Flow Control (outbound/both)
-SET_CONTROL_USE_DTR_FLOW_CONTROL = to_bytes([18])   # Use DTR Flow Control (inbound)
-SET_CONTROL_USE_DSR_FLOW_CONTROL = to_bytes([19])   # Use DSR Flow Control (outbound/both)
-
-LINESTATE_MASK_TIMEOUT = 128                # Time-out Error
-LINESTATE_MASK_SHIFTREG_EMPTY = 64          # Transfer Shift Register Empty
-LINESTATE_MASK_TRANSREG_EMPTY = 32          # Transfer Holding Register Empty
-LINESTATE_MASK_BREAK_DETECT = 16            # Break-detect Error
-LINESTATE_MASK_FRAMING_ERROR = 8            # Framing Error
-LINESTATE_MASK_PARTIY_ERROR = 4             # Parity Error
-LINESTATE_MASK_OVERRUN_ERROR = 2            # Overrun Error
-LINESTATE_MASK_DATA_READY = 1               # Data Ready
-
-MODEMSTATE_MASK_CD = 128                    # Receive Line Signal Detect (also known as Carrier Detect)
-MODEMSTATE_MASK_RI = 64                     # Ring Indicator
-MODEMSTATE_MASK_DSR = 32                    # Data-Set-Ready Signal State
-MODEMSTATE_MASK_CTS = 16                    # Clear-To-Send Signal State
-MODEMSTATE_MASK_CD_CHANGE = 8               # Delta Receive Line Signal Detect
-MODEMSTATE_MASK_RI_CHANGE = 4               # Trailing-edge Ring Detector
-MODEMSTATE_MASK_DSR_CHANGE = 2              # Delta Data-Set-Ready
-MODEMSTATE_MASK_CTS_CHANGE = 1              # Delta Clear-To-Send
-
-PURGE_RECEIVE_BUFFER = to_bytes([1])        # Purge access server receive data buffer
-PURGE_TRANSMIT_BUFFER = to_bytes([2])       # Purge access server transmit data buffer
-PURGE_BOTH_BUFFERS = to_bytes([3])          # Purge both the access server receive data buffer and the access server transmit data buffer
-
-
-RFC2217_PARITY_MAP = {
-    PARITY_NONE: 1,
-    PARITY_ODD: 2,
-    PARITY_EVEN: 3,
-    PARITY_MARK: 4,
-    PARITY_SPACE: 5,
-}
-RFC2217_REVERSE_PARITY_MAP = dict((v,k) for k,v in RFC2217_PARITY_MAP.items())
-
-RFC2217_STOPBIT_MAP = {
-    STOPBITS_ONE: 1,
-    STOPBITS_ONE_POINT_FIVE: 3,
-    STOPBITS_TWO: 2,
-}
-RFC2217_REVERSE_STOPBIT_MAP = dict((v,k) for k,v in RFC2217_STOPBIT_MAP.items())
-
-# Telnet filter states
-M_NORMAL = 0
-M_IAC_SEEN = 1
-M_NEGOTIATE = 2
-
-# TelnetOption and TelnetSubnegotiation states
-REQUESTED = 'REQUESTED'
-ACTIVE = 'ACTIVE'
-INACTIVE = 'INACTIVE'
-REALLY_INACTIVE = 'REALLY_INACTIVE'
-
-class TelnetOption(object):
-    """Manage a single telnet option, keeps track of DO/DONT WILL/WONT."""
-
-    def __init__(self, connection, name, option, send_yes, send_no, ack_yes, ack_no, initial_state, activation_callback=None):
-        """\
-        Initialize option.
-        :param connection: connection used to transmit answers
-        :param name: a readable name for debug outputs
-        :param send_yes: what to send when option is to be enabled.
-        :param send_no: what to send when option is to be disabled.
-        :param ack_yes: what to expect when remote agrees on option.
-        :param ack_no: what to expect when remote disagrees on option.
-        :param initial_state: options initialized with REQUESTED are tried to
-            be enabled on startup. use INACTIVE for all others.
-        """
-        self.connection = connection
-        self.name = name
-        self.option = option
-        self.send_yes = send_yes
-        self.send_no = send_no
-        self.ack_yes = ack_yes
-        self.ack_no = ack_no
-        self.state = initial_state
-        self.active = False
-        self.activation_callback = activation_callback
-
-    def __repr__(self):
-        """String for debug outputs"""
-        return "%s:%s(%s)" % (self.name, self.active, self.state)
-
-    def process_incoming(self, command):
-        """A DO/DONT/WILL/WONT was received for this option, update state and
-        answer when needed."""
-        if command == self.ack_yes:
-            if self.state is REQUESTED:
-                self.state = ACTIVE
-                self.active = True
-                if self.activation_callback is not None:
-                    self.activation_callback()
-            elif self.state is ACTIVE:
-                pass
-            elif self.state is INACTIVE:
-                self.state = ACTIVE
-                self.connection.telnetSendOption(self.send_yes, self.option)
-                self.active = True
-                if self.activation_callback is not None:
-                    self.activation_callback()
-            elif self.state is REALLY_INACTIVE:
-                self.connection.telnetSendOption(self.send_no, self.option)
-            else:
-                raise ValueError('option in illegal state %r' % self)
-        elif command == self.ack_no:
-            if self.state is REQUESTED:
-                self.state = INACTIVE
-                self.active = False
-            elif self.state is ACTIVE:
-                self.state = INACTIVE
-                self.connection.telnetSendOption(self.send_no, self.option)
-                self.active = False
-            elif self.state is INACTIVE:
-                pass
-            elif self.state is REALLY_INACTIVE:
-                pass
-            else:
-                raise ValueError('option in illegal state %r' % self)
-
-
-class TelnetSubnegotiation(object):
-    """\
-    A object to handle subnegotiation of options. In this case actually
-    sub-sub options for RFC 2217. It is used to track com port options.
-    """
-
-    def __init__(self, connection, name, option, ack_option=None):
-        if ack_option is None: ack_option = option
-        self.connection = connection
-        self.name = name
-        self.option = option
-        self.value = None
-        self.ack_option = ack_option
-        self.state = INACTIVE
-
-    def __repr__(self):
-        """String for debug outputs."""
-        return "%s:%s" % (self.name, self.state)
-
-    def set(self, value):
-        """\
-        request a change of the value. a request is sent to the server. if
-        the client needs to know if the change is performed he has to check the
-        state of this object.
-        """
-        self.value = value
-        self.state = REQUESTED
-        self.connection.rfc2217SendSubnegotiation(self.option, self.value)
-        if self.connection.logger:
-            self.connection.logger.debug("SB Requesting %s -> %r" % (self.name, self.value))
-
-    def isReady(self):
-        """\
-        check if answer from server has been received. when server rejects
-        the change, raise a ValueError.
-        """
-        if self.state == REALLY_INACTIVE:
-            raise ValueError("remote rejected value for option %r" % (self.name))
-        return self.state == ACTIVE
-    # add property to have a similar interface as TelnetOption
-    active = property(isReady)
-
-    def wait(self, timeout=3):
-        """\
-        wait until the subnegotiation has been acknowledged or timeout. It
-        can also throw a value error when the answer from the server does not
-        match the value sent.
-        """
-        timeout_time = time.time() + timeout
-        while time.time() < timeout_time:
-            time.sleep(0.05)    # prevent 100% CPU load
-            if self.isReady():
-                break
-        else:
-            raise SerialException("timeout while waiting for option %r" % (self.name))
-
-    def checkAnswer(self, suboption):
-        """\
-        check an incoming subnegotiation block. the parameter already has
-        cut off the header like sub option number and com port option value.
-        """
-        if self.value == suboption[:len(self.value)]:
-            self.state = ACTIVE
-        else:
-            # error propagation done in isReady
-            self.state = REALLY_INACTIVE
-        if self.connection.logger:
-            self.connection.logger.debug("SB Answer %s -> %r -> %s" % (self.name, suboption, self.state))
-
-
-class RFC2217Serial(SerialBase):
-    """Serial port implementation for RFC 2217 remote serial ports."""
-
-    BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
-                 9600, 19200, 38400, 57600, 115200)
-
-    def open(self):
-        """\
-        Open port with current settings. This may throw a SerialException
-        if the port cannot be opened.
-        """
-        self.logger = None
-        self._ignore_set_control_answer = False
-        self._poll_modem_state = False
-        self._network_timeout = 3
-        if self._port is None:
-            raise SerialException("Port must be configured before it can be used.")
-        if self._isOpen:
-            raise SerialException("Port is already open.")
-        try:
-            self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            self._socket.connect(self.fromURL(self.portstr))
-            self._socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
-        except Exception, msg:
-            self._socket = None
-            raise SerialException("Could not open port %s: %s" % (self.portstr, msg))
-
-        self._socket.settimeout(5) # XXX good value?
-
-        # use a thread save queue as buffer. it also simplifies implementing
-        # the read timeout
-        self._read_buffer = Queue.Queue()
-        # to ensure that user writes does not interfere with internal
-        # telnet/rfc2217 options establish a lock
-        self._write_lock = threading.Lock()
-        # name the following separately so that, below, a check can be easily done
-        mandadory_options = [
-            TelnetOption(self, 'we-BINARY', BINARY, WILL, WONT, DO, DONT, INACTIVE),
-            TelnetOption(self, 'we-RFC2217', COM_PORT_OPTION, WILL, WONT, DO, DONT, REQUESTED),
-        ]
-        # all supported telnet options
-        self._telnet_options = [
-            TelnetOption(self, 'ECHO', ECHO, DO, DONT, WILL, WONT, REQUESTED),
-            TelnetOption(self, 'we-SGA', SGA, WILL, WONT, DO, DONT, REQUESTED),
-            TelnetOption(self, 'they-SGA', SGA, DO, DONT, WILL, WONT, REQUESTED),
-            TelnetOption(self, 'they-BINARY', BINARY, DO, DONT, WILL, WONT, INACTIVE),
-            TelnetOption(self, 'they-RFC2217', COM_PORT_OPTION, DO, DONT, WILL, WONT, REQUESTED),
-        ] + mandadory_options
-        # RFC 2217 specific states
-        # COM port settings
-        self._rfc2217_port_settings = {
-            'baudrate': TelnetSubnegotiation(self, 'baudrate', SET_BAUDRATE, SERVER_SET_BAUDRATE),
-            'datasize': TelnetSubnegotiation(self, 'datasize', SET_DATASIZE, SERVER_SET_DATASIZE),
-            'parity':   TelnetSubnegotiation(self, 'parity',   SET_PARITY,   SERVER_SET_PARITY),
-            'stopsize': TelnetSubnegotiation(self, 'stopsize', SET_STOPSIZE, SERVER_SET_STOPSIZE),
-            }
-        # There are more subnegotiation objects, combine all in one dictionary
-        # for easy access
-        self._rfc2217_options = {
-            'purge':    TelnetSubnegotiation(self, 'purge',    PURGE_DATA,   SERVER_PURGE_DATA),
-            'control':  TelnetSubnegotiation(self, 'control',  SET_CONTROL,  SERVER_SET_CONTROL),
-            }
-        self._rfc2217_options.update(self._rfc2217_port_settings)
-        # cache for line and modem states that the server sends to us
-        self._linestate = 0
-        self._modemstate = None
-        self._modemstate_expires = 0
-        # RFC 2217 flow control between server and client
-        self._remote_suspend_flow = False
-
-        self._thread = threading.Thread(target=self._telnetReadLoop)
-        self._thread.setDaemon(True)
-        self._thread.setName('pySerial RFC 2217 reader thread for %s' % (self._port,))
-        self._thread.start()
-
-        # negotiate Telnet/RFC 2217 -> send initial requests
-        for option in self._telnet_options:
-            if option.state is REQUESTED:
-                self.telnetSendOption(option.send_yes, option.option)
-        # now wait until important options are negotiated
-        timeout_time = time.time() + self._network_timeout
-        while time.time() < timeout_time:
-            time.sleep(0.05)    # prevent 100% CPU load
-            if sum(o.active for o in mandadory_options) == len(mandadory_options):
-                break
-        else:
-            raise SerialException("Remote does not seem to support RFC2217 or BINARY mode %r" % mandadory_options)
-        if self.logger:
-            self.logger.info("Negotiated options: %s" % self._telnet_options)
-
-        # fine, go on, set RFC 2271 specific things
-        self._reconfigurePort()
-        # all things set up get, now a clean start
-        self._isOpen = True
-        if not self._rtscts:
-            self.setRTS(True)
-            self.setDTR(True)
-        self.flushInput()
-        self.flushOutput()
-
-    def _reconfigurePort(self):
-        """Set communication parameters on opened port."""
-        if self._socket is None:
-            raise SerialException("Can only operate on open ports")
-
-        # if self._timeout != 0 and self._interCharTimeout is not None:
-            # XXX
-
-        if self._writeTimeout is not None:
-            raise NotImplementedError('writeTimeout is currently not supported')
-            # XXX
-
-        # Setup the connection
-        # to get good performance, all parameter changes are sent first...
-        if not isinstance(self._baudrate, (int, long)) or not 0 < self._baudrate < 2**32:
-            raise ValueError("invalid baudrate: %r" % (self._baudrate))
-        self._rfc2217_port_settings['baudrate'].set(struct.pack('!I', self._baudrate))
-        self._rfc2217_port_settings['datasize'].set(struct.pack('!B', self._bytesize))
-        self._rfc2217_port_settings['parity'].set(struct.pack('!B', RFC2217_PARITY_MAP[self._parity]))
-        self._rfc2217_port_settings['stopsize'].set(struct.pack('!B', RFC2217_STOPBIT_MAP[self._stopbits]))
-
-        # and now wait until parameters are active
-        items = self._rfc2217_port_settings.values()
-        if self.logger:
-            self.logger.debug("Negotiating settings: %s" % (items,))
-        timeout_time = time.time() + self._network_timeout
-        while time.time() < timeout_time:
-            time.sleep(0.05)    # prevent 100% CPU load
-            if sum(o.active for o in items) == len(items):
-                break
-        else:
-            raise SerialException("Remote does not accept parameter change (RFC2217): %r" % items)
-        if self.logger:
-            self.logger.info("Negotiated settings: %s" % (items,))
-
-        if self._rtscts and self._xonxoff:
-            raise ValueError('xonxoff and rtscts together are not supported')
-        elif self._rtscts:
-            self.rfc2217SetControl(SET_CONTROL_USE_HW_FLOW_CONTROL)
-        elif self._xonxoff:
-            self.rfc2217SetControl(SET_CONTROL_USE_SW_FLOW_CONTROL)
-        else:
-            self.rfc2217SetControl(SET_CONTROL_USE_NO_FLOW_CONTROL)
-
-    def close(self):
-        """Close port"""
-        if self._isOpen:
-            if self._socket:
-                try:
-                    self._socket.shutdown(socket.SHUT_RDWR)
-                    self._socket.close()
-                except:
-                    # ignore errors.
-                    pass
-                self._socket = None
-            if self._thread:
-                self._thread.join()
-            self._isOpen = False
-            # in case of quick reconnects, give the server some time
-            time.sleep(0.3)
-
-    def makeDeviceName(self, port):
-        raise SerialException("there is no sensible way to turn numbers into URLs")
-
-    def fromURL(self, url):
-        """extract host and port from an URL string"""
-        if url.lower().startswith("rfc2217://"): url = url[10:]
-        try:
-            # is there a "path" (our options)?
-            if '/' in url:
-                # cut away options
-                url, options = url.split('/', 1)
-                # process options now, directly altering self
-                for option in options.split('/'):
-                    if '=' in option:
-                        option, value = option.split('=', 1)
-                    else:
-                        value = None
-                    if option == 'logging':
-                        logging.basicConfig()   # XXX is that good to call it here?
-                        self.logger = logging.getLogger('pySerial.rfc2217')
-                        self.logger.setLevel(LOGGER_LEVELS[value])
-                        self.logger.debug('enabled logging')
-                    elif option == 'ign_set_control':
-                        self._ignore_set_control_answer = True
-                    elif option == 'poll_modem':
-                        self._poll_modem_state = True
-                    elif option == 'timeout':
-                        self._network_timeout = float(value)
-                    else:
-                        raise ValueError('unknown option: %r' % (option,))
-            # get host and port
-            host, port = url.split(':', 1) # may raise ValueError because of unpacking
-            port = int(port)               # and this if it's not a number
-            if not 0 <= port < 65536: raise ValueError("port not in range 0...65535")
-        except ValueError, e:
-            raise SerialException('expected a string in the form "[rfc2217://]<host>:<port>[/option[/option...]]": %s' % e)
-        return (host, port)
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def inWaiting(self):
-        """Return the number of characters currently in the input buffer."""
-        if not self._isOpen: raise portNotOpenError
-        return self._read_buffer.qsize()
-
-    def read(self, size=1):
-        """\
-        Read size bytes from the serial port. If a timeout is set it may
-        return less characters as requested. With no timeout it will block
-        until the requested number of bytes is read.
-        """
-        if not self._isOpen: raise portNotOpenError
-        data = bytearray()
-        try:
-            while len(data) < size:
-                if self._thread is None:
-                    raise SerialException('connection failed (reader thread died)')
-                data.append(self._read_buffer.get(True, self._timeout))
-        except Queue.Empty: # -> timeout
-            pass
-        return bytes(data)
-
-    def write(self, data):
-        """\
-        Output the given string over the serial port. Can block if the
-        connection is blocked. May raise SerialException if the connection is
-        closed.
-        """
-        if not self._isOpen: raise portNotOpenError
-        self._write_lock.acquire()
-        try:
-            try:
-                self._socket.sendall(to_bytes(data).replace(IAC, IAC_DOUBLED))
-            except socket.error, e:
-                raise SerialException("connection failed (socket error): %s" % e) # XXX what exception if socket connection fails
-        finally:
-            self._write_lock.release()
-        return len(data)
-
-    def flushInput(self):
-        """Clear input buffer, discarding all that is in the buffer."""
-        if not self._isOpen: raise portNotOpenError
-        self.rfc2217SendPurge(PURGE_RECEIVE_BUFFER)
-        # empty read buffer
-        while self._read_buffer.qsize():
-            self._read_buffer.get(False)
-
-    def flushOutput(self):
-        """\
-        Clear output buffer, aborting the current output and
-        discarding all that is in the buffer.
-        """
-        if not self._isOpen: raise portNotOpenError
-        self.rfc2217SendPurge(PURGE_TRANSMIT_BUFFER)
-
-    def sendBreak(self, duration=0.25):
-        """Send break condition. Timed, returns to idle state after given
-        duration."""
-        if not self._isOpen: raise portNotOpenError
-        self.setBreak(True)
-        time.sleep(duration)
-        self.setBreak(False)
-
-    def setBreak(self, level=True):
-        """\
-        Set break: Controls TXD. When active, to transmitting is
-        possible.
-        """
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('set BREAK to %s' % ('inactive', 'active')[bool(level)])
-        if level:
-            self.rfc2217SetControl(SET_CONTROL_BREAK_ON)
-        else:
-            self.rfc2217SetControl(SET_CONTROL_BREAK_OFF)
-
-    def setRTS(self, level=True):
-        """Set terminal status line: Request To Send."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('set RTS to %s' % ('inactive', 'active')[bool(level)])
-        if level:
-            self.rfc2217SetControl(SET_CONTROL_RTS_ON)
-        else:
-            self.rfc2217SetControl(SET_CONTROL_RTS_OFF)
-
-    def setDTR(self, level=True):
-        """Set terminal status line: Data Terminal Ready."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('set DTR to %s' % ('inactive', 'active')[bool(level)])
-        if level:
-            self.rfc2217SetControl(SET_CONTROL_DTR_ON)
-        else:
-            self.rfc2217SetControl(SET_CONTROL_DTR_OFF)
-
-    def getCTS(self):
-        """Read terminal status line: Clear To Send."""
-        if not self._isOpen: raise portNotOpenError
-        return bool(self.getModemState() & MODEMSTATE_MASK_CTS)
-
-    def getDSR(self):
-        """Read terminal status line: Data Set Ready."""
-        if not self._isOpen: raise portNotOpenError
-        return bool(self.getModemState() & MODEMSTATE_MASK_DSR)
-
-    def getRI(self):
-        """Read terminal status line: Ring Indicator."""
-        if not self._isOpen: raise portNotOpenError
-        return bool(self.getModemState() & MODEMSTATE_MASK_RI)
-
-    def getCD(self):
-        """Read terminal status line: Carrier Detect."""
-        if not self._isOpen: raise portNotOpenError
-        return bool(self.getModemState() & MODEMSTATE_MASK_CD)
-
-    # - - - platform specific - - -
-    # None so far
-
-    # - - - RFC2217 specific - - -
-
-    def _telnetReadLoop(self):
-        """read loop for the socket."""
-        mode = M_NORMAL
-        suboption = None
-        try:
-            while self._socket is not None:
-                try:
-                    data = self._socket.recv(1024)
-                except socket.timeout:
-                    # just need to get out of recv form time to time to check if
-                    # still alive
-                    continue
-                except socket.error, e:
-                    # connection fails -> terminate loop
-                    if self.logger:
-                        self.logger.debug("socket error in reader thread: %s" % (e,))
-                    break
-                if not data: break # lost connection
-                for byte in data:
-                    if mode == M_NORMAL:
-                        # interpret as command or as data
-                        if byte == IAC:
-                            mode = M_IAC_SEEN
-                        else:
-                            # store data in read buffer or sub option buffer
-                            # depending on state
-                            if suboption is not None:
-                                suboption.append(byte)
-                            else:
-                                self._read_buffer.put(byte)
-                    elif mode == M_IAC_SEEN:
-                        if byte == IAC:
-                            # interpret as command doubled -> insert character
-                            # itself
-                            if suboption is not None:
-                                suboption.append(IAC)
-                            else:
-                                self._read_buffer.put(IAC)
-                            mode = M_NORMAL
-                        elif byte == SB:
-                            # sub option start
-                            suboption = bytearray()
-                            mode = M_NORMAL
-                        elif byte == SE:
-                            # sub option end -> process it now
-                            self._telnetProcessSubnegotiation(bytes(suboption))
-                            suboption = None
-                            mode = M_NORMAL
-                        elif byte in (DO, DONT, WILL, WONT):
-                            # negotiation
-                            telnet_command = byte
-                            mode = M_NEGOTIATE
-                        else:
-                            # other telnet commands
-                            self._telnetProcessCommand(byte)
-                            mode = M_NORMAL
-                    elif mode == M_NEGOTIATE: # DO, DONT, WILL, WONT was received, option now following
-                        self._telnetNegotiateOption(telnet_command, byte)
-                        mode = M_NORMAL
-        finally:
-            self._thread = None
-            if self.logger:
-                self.logger.debug("read thread terminated")
-
-    # - incoming telnet commands and options
-
-    def _telnetProcessCommand(self, command):
-        """Process commands other than DO, DONT, WILL, WONT."""
-        # Currently none. RFC2217 only uses negotiation and subnegotiation.
-        if self.logger:
-            self.logger.warning("ignoring Telnet command: %r" % (command,))
-
-    def _telnetNegotiateOption(self, command, option):
-        """Process incoming DO, DONT, WILL, WONT."""
-        # check our registered telnet options and forward command to them
-        # they know themselves if they have to answer or not
-        known = False
-        for item in self._telnet_options:
-            # can have more than one match! as some options are duplicated for
-            # 'us' and 'them'
-            if item.option == option:
-                item.process_incoming(command)
-                known = True
-        if not known:
-            # handle unknown options
-            # only answer to positive requests and deny them
-            if command == WILL or command == DO:
-                self.telnetSendOption((command == WILL and DONT or WONT), option)
-                if self.logger:
-                    self.logger.warning("rejected Telnet option: %r" % (option,))
-
-
-    def _telnetProcessSubnegotiation(self, suboption):
-        """Process subnegotiation, the data between IAC SB and IAC SE."""
-        if suboption[0:1] == COM_PORT_OPTION:
-            if suboption[1:2] == SERVER_NOTIFY_LINESTATE and len(suboption) >= 3:
-                self._linestate = ord(suboption[2:3]) # ensure it is a number
-                if self.logger:
-                    self.logger.info("NOTIFY_LINESTATE: %s" % self._linestate)
-            elif suboption[1:2] == SERVER_NOTIFY_MODEMSTATE and len(suboption) >= 3:
-                self._modemstate = ord(suboption[2:3]) # ensure it is a number
-                if self.logger:
-                    self.logger.info("NOTIFY_MODEMSTATE: %s" % self._modemstate)
-                # update time when we think that a poll would make sense
-                self._modemstate_expires = time.time() + 0.3
-            elif suboption[1:2] == FLOWCONTROL_SUSPEND:
-                self._remote_suspend_flow = True
-            elif suboption[1:2] == FLOWCONTROL_RESUME:
-                self._remote_suspend_flow = False
-            else:
-                for item in self._rfc2217_options.values():
-                    if item.ack_option == suboption[1:2]:
-                        #~ print "processing COM_PORT_OPTION: %r" % list(suboption[1:])
-                        item.checkAnswer(bytes(suboption[2:]))
-                        break
-                else:
-                    if self.logger:
-                        self.logger.warning("ignoring COM_PORT_OPTION: %r" % (suboption,))
-        else:
-            if self.logger:
-                self.logger.warning("ignoring subnegotiation: %r" % (suboption,))
-
-    # - outgoing telnet commands and options
-
-    def _internal_raw_write(self, data):
-        """internal socket write with no data escaping. used to send telnet stuff."""
-        self._write_lock.acquire()
-        try:
-            self._socket.sendall(data)
-        finally:
-            self._write_lock.release()
-
-    def telnetSendOption(self, action, option):
-        """Send DO, DONT, WILL, WONT."""
-        self._internal_raw_write(to_bytes([IAC, action, option]))
-
-    def rfc2217SendSubnegotiation(self, option, value=''):
-        """Subnegotiation of RFC2217 parameters."""
-        value = value.replace(IAC, IAC_DOUBLED)
-        self._internal_raw_write(to_bytes([IAC, SB, COM_PORT_OPTION, option] + list(value) + [IAC, SE]))
-
-    def rfc2217SendPurge(self, value):
-        item = self._rfc2217_options['purge']
-        item.set(value) # transmit desired purge type
-        item.wait(self._network_timeout) # wait for acknowledge from the server
-
-    def rfc2217SetControl(self, value):
-        item = self._rfc2217_options['control']
-        item.set(value) # transmit desired control type
-        if self._ignore_set_control_answer:
-            # answers are ignored when option is set. compatibility mode for
-            # servers that answer, but not the expected one... (or no answer
-            # at all) i.e. sredird
-            time.sleep(0.1)  # this helps getting the unit tests passed
-        else:
-            item.wait(self._network_timeout)  # wait for acknowledge from the server
-
-    def rfc2217FlowServerReady(self):
-        """\
-        check if server is ready to receive data. block for some time when
-        not.
-        """
-        #~ if self._remote_suspend_flow:
-            #~ wait---
-
-    def getModemState(self):
-        """\
-        get last modem state (cached value. if value is "old", request a new
-        one. this cache helps that we don't issue to many requests when e.g. all
-        status lines, one after the other is queried by te user (getCTS, getDSR
-        etc.)
-        """
-        # active modem state polling enabled? is the value fresh enough?
-        if self._poll_modem_state and self._modemstate_expires < time.time():
-            if self.logger:
-                self.logger.debug('polling modem state')
-            # when it is older, request an update
-            self.rfc2217SendSubnegotiation(NOTIFY_MODEMSTATE)
-            timeout_time = time.time() + self._network_timeout
-            while time.time() < timeout_time:
-                time.sleep(0.05)    # prevent 100% CPU load
-                # when expiration time is updated, it means that there is a new
-                # value
-                if self._modemstate_expires > time.time():
-                    if self.logger:
-                        self.logger.warning('poll for modem state failed')
-                    break
-            # even when there is a timeout, do not generate an error just
-            # return the last known value. this way we can support buggy
-            # servers that do not respond to polls, but send automatic
-            # updates.
-        if self._modemstate is not None:
-            if self.logger:
-                self.logger.debug('using cached modem state')
-            return self._modemstate
-        else:
-            # never received a notification from the server
-            raise SerialException("remote sends no NOTIFY_MODEMSTATE")
-
-
-# assemble Serial class with the platform specific implementation and the base
-# for file-like behavior. for Python 2.6 and newer, that provide the new I/O
-# library, derive from io.RawIOBase
-try:
-    import io
-except ImportError:
-    # classic version with our own file-like emulation
-    class Serial(RFC2217Serial, FileLike):
-        pass
-else:
-    # io library present
-    class Serial(RFC2217Serial, io.RawIOBase):
-        pass
-
-
-#############################################################################
-# The following is code that helps implementing an RFC 2217 server.
-
-class PortManager(object):
-    """\
-    This class manages the state of Telnet and RFC 2217. It needs a serial
-    instance and a connection to work with. Connection is expected to implement
-    a (thread safe) write function, that writes the string to the network.
-    """
-
-    def __init__(self, serial_port, connection, logger=None):
-        self.serial = serial_port
-        self.connection = connection
-        self.logger = logger
-        self._client_is_rfc2217 = False
-
-        # filter state machine
-        self.mode = M_NORMAL
-        self.suboption = None
-        self.telnet_command = None
-
-        # states for modem/line control events
-        self.modemstate_mask = 255
-        self.last_modemstate = None
-        self.linstate_mask = 0
-
-        # all supported telnet options
-        self._telnet_options = [
-            TelnetOption(self, 'ECHO', ECHO, WILL, WONT, DO, DONT, REQUESTED),
-            TelnetOption(self, 'we-SGA', SGA, WILL, WONT, DO, DONT, REQUESTED),
-            TelnetOption(self, 'they-SGA', SGA, DO, DONT, WILL, WONT, INACTIVE),
-            TelnetOption(self, 'we-BINARY', BINARY, WILL, WONT, DO, DONT, INACTIVE),
-            TelnetOption(self, 'they-BINARY', BINARY, DO, DONT, WILL, WONT, REQUESTED),
-            TelnetOption(self, 'we-RFC2217', COM_PORT_OPTION, WILL, WONT, DO, DONT, REQUESTED, self._client_ok),
-            TelnetOption(self, 'they-RFC2217', COM_PORT_OPTION, DO, DONT, WILL, WONT, INACTIVE, self._client_ok),
-            ]
-
-        # negotiate Telnet/RFC2217 -> send initial requests
-        if self.logger:
-            self.logger.debug("requesting initial Telnet/RFC 2217 options")
-        for option in self._telnet_options:
-            if option.state is REQUESTED:
-                self.telnetSendOption(option.send_yes, option.option)
-        # issue 1st modem state notification
-
-    def _client_ok(self):
-        """\
-        callback of telnet option. it gets called when option is activated.
-        this one here is used to detect when the client agrees on RFC 2217. a
-        flag is set so that other functions like check_modem_lines know if the
-        client is ok.
-        """
-        # The callback is used for we and they so if one party agrees, we're
-        # already happy. it seems not all servers do the negotiation correctly
-        # and i guess there are incorrect clients too.. so be happy if client
-        # answers one or the other positively.
-        self._client_is_rfc2217 = True
-        if self.logger:
-            self.logger.info("client accepts RFC 2217")
-        # this is to ensure that the client gets a notification, even if there
-        # was no change
-        self.check_modem_lines(force_notification=True)
-
-    # - outgoing telnet commands and options
-
-    def telnetSendOption(self, action, option):
-        """Send DO, DONT, WILL, WONT."""
-        self.connection.write(to_bytes([IAC, action, option]))
-
-    def rfc2217SendSubnegotiation(self, option, value=''):
-        """Subnegotiation of RFC 2217 parameters."""
-        value = value.replace(IAC, IAC_DOUBLED)
-        self.connection.write(to_bytes([IAC, SB, COM_PORT_OPTION, option] + list(value) + [IAC, SE]))
-
-    # - check modem lines, needs to be called periodically from user to
-    # establish polling
-
-    def check_modem_lines(self, force_notification=False):
-        modemstate = (
-            (self.serial.getCTS() and MODEMSTATE_MASK_CTS) |
-            (self.serial.getDSR() and MODEMSTATE_MASK_DSR) |
-            (self.serial.getRI() and MODEMSTATE_MASK_RI) |
-            (self.serial.getCD() and MODEMSTATE_MASK_CD)
-        )
-        # check what has changed
-        deltas = modemstate ^ (self.last_modemstate or 0) # when last is None -> 0
-        if deltas & MODEMSTATE_MASK_CTS:
-            modemstate |= MODEMSTATE_MASK_CTS_CHANGE
-        if deltas & MODEMSTATE_MASK_DSR:
-            modemstate |= MODEMSTATE_MASK_DSR_CHANGE
-        if deltas & MODEMSTATE_MASK_RI:
-            modemstate |= MODEMSTATE_MASK_RI_CHANGE
-        if deltas & MODEMSTATE_MASK_CD:
-            modemstate |= MODEMSTATE_MASK_CD_CHANGE
-        # if new state is different and the mask allows this change, send
-        # notification. suppress notifications when client is not rfc2217
-        if modemstate != self.last_modemstate or force_notification:
-            if (self._client_is_rfc2217 and (modemstate & self.modemstate_mask)) or force_notification:
-                self.rfc2217SendSubnegotiation(
-                    SERVER_NOTIFY_MODEMSTATE,
-                    to_bytes([modemstate & self.modemstate_mask])
-                    )
-                if self.logger:
-                    self.logger.info("NOTIFY_MODEMSTATE: %s" % (modemstate,))
-            # save last state, but forget about deltas.
-            # otherwise it would also notify about changing deltas which is
-            # probably not very useful
-            self.last_modemstate = modemstate & 0xf0
-
-    # - outgoing data escaping
-
-    def escape(self, data):
-        """\
-        this generator function is for the user. all outgoing data has to be
-        properly escaped, so that no IAC character in the data stream messes up
-        the Telnet state machine in the server.
-
-        socket.sendall(escape(data))
-        """
-        for byte in data:
-            if byte == IAC:
-                yield IAC
-                yield IAC
-            else:
-                yield byte
-
-    # - incoming data filter
-
-    def filter(self, data):
-        """\
-        handle a bunch of incoming bytes. this is a generator. it will yield
-        all characters not of interest for Telnet/RFC 2217.
-
-        The idea is that the reader thread pushes data from the socket through
-        this filter:
-
-        for byte in filter(socket.recv(1024)):
-            # do things like CR/LF conversion/whatever
-            # and write data to the serial port
-            serial.write(byte)
-
-        (socket error handling code left as exercise for the reader)
-        """
-        for byte in data:
-            if self.mode == M_NORMAL:
-                # interpret as command or as data
-                if byte == IAC:
-                    self.mode = M_IAC_SEEN
-                else:
-                    # store data in sub option buffer or pass it to our
-                    # consumer depending on state
-                    if self.suboption is not None:
-                        self.suboption.append(byte)
-                    else:
-                        yield byte
-            elif self.mode == M_IAC_SEEN:
-                if byte == IAC:
-                    # interpret as command doubled -> insert character
-                    # itself
-                    if self.suboption is not None:
-                        self.suboption.append(byte)
-                    else:
-                        yield byte
-                    self.mode = M_NORMAL
-                elif byte == SB:
-                    # sub option start
-                    self.suboption = bytearray()
-                    self.mode = M_NORMAL
-                elif byte == SE:
-                    # sub option end -> process it now
-                    self._telnetProcessSubnegotiation(bytes(self.suboption))
-                    self.suboption = None
-                    self.mode = M_NORMAL
-                elif byte in (DO, DONT, WILL, WONT):
-                    # negotiation
-                    self.telnet_command = byte
-                    self.mode = M_NEGOTIATE
-                else:
-                    # other telnet commands
-                    self._telnetProcessCommand(byte)
-                    self.mode = M_NORMAL
-            elif self.mode == M_NEGOTIATE: # DO, DONT, WILL, WONT was received, option now following
-                self._telnetNegotiateOption(self.telnet_command, byte)
-                self.mode = M_NORMAL
-
-    # - incoming telnet commands and options
-
-    def _telnetProcessCommand(self, command):
-        """Process commands other than DO, DONT, WILL, WONT."""
-        # Currently none. RFC2217 only uses negotiation and subnegotiation.
-        if self.logger:
-            self.logger.warning("ignoring Telnet command: %r" % (command,))
-
-    def _telnetNegotiateOption(self, command, option):
-        """Process incoming DO, DONT, WILL, WONT."""
-        # check our registered telnet options and forward command to them
-        # they know themselves if they have to answer or not
-        known = False
-        for item in self._telnet_options:
-            # can have more than one match! as some options are duplicated for
-            # 'us' and 'them'
-            if item.option == option:
-                item.process_incoming(command)
-                known = True
-        if not known:
-            # handle unknown options
-            # only answer to positive requests and deny them
-            if command == WILL or command == DO:
-                self.telnetSendOption((command == WILL and DONT or WONT), option)
-                if self.logger:
-                    self.logger.warning("rejected Telnet option: %r" % (option,))
-
-
-    def _telnetProcessSubnegotiation(self, suboption):
-        """Process subnegotiation, the data between IAC SB and IAC SE."""
-        if suboption[0:1] == COM_PORT_OPTION:
-            if self.logger:
-                self.logger.debug('received COM_PORT_OPTION: %r' % (suboption,))
-            if suboption[1:2] == SET_BAUDRATE:
-                backup = self.serial.baudrate
-                try:
-                    (baudrate,) = struct.unpack("!I", suboption[2:6])
-                    if baudrate != 0:
-                        self.serial.baudrate = baudrate
-                except ValueError, e:
-                    if self.logger:
-                        self.logger.error("failed to set baud rate: %s" % (e,))
-                    self.serial.baudrate = backup
-                else:
-                    if self.logger:
-                        self.logger.info("%s baud rate: %s" % (baudrate and 'set' or 'get', self.serial.baudrate))
-                self.rfc2217SendSubnegotiation(SERVER_SET_BAUDRATE, struct.pack("!I", self.serial.baudrate))
-            elif suboption[1:2] == SET_DATASIZE:
-                backup = self.serial.bytesize
-                try:
-                    (datasize,) = struct.unpack("!B", suboption[2:3])
-                    if datasize != 0:
-                        self.serial.bytesize = datasize
-                except ValueError, e:
-                    if self.logger:
-                        self.logger.error("failed to set data size: %s" % (e,))
-                    self.serial.bytesize = backup
-                else:
-                    if self.logger:
-                        self.logger.info("%s data size: %s" % (datasize and 'set' or 'get', self.serial.bytesize))
-                self.rfc2217SendSubnegotiation(SERVER_SET_DATASIZE, struct.pack("!B", self.serial.bytesize))
-            elif suboption[1:2] == SET_PARITY:
-                backup = self.serial.parity
-                try:
-                    parity = struct.unpack("!B", suboption[2:3])[0]
-                    if parity != 0:
-                            self.serial.parity = RFC2217_REVERSE_PARITY_MAP[parity]
-                except ValueError, e:
-                    if self.logger:
-                        self.logger.error("failed to set parity: %s" % (e,))
-                    self.serial.parity = backup
-                else:
-                    if self.logger:
-                        self.logger.info("%s parity: %s" % (parity and 'set' or 'get', self.serial.parity))
-                self.rfc2217SendSubnegotiation(
-                    SERVER_SET_PARITY,
-                    struct.pack("!B", RFC2217_PARITY_MAP[self.serial.parity])
-                    )
-            elif suboption[1:2] == SET_STOPSIZE:
-                backup = self.serial.stopbits
-                try:
-                    stopbits = struct.unpack("!B", suboption[2:3])[0]
-                    if stopbits != 0:
-                        self.serial.stopbits = RFC2217_REVERSE_STOPBIT_MAP[stopbits]
-                except ValueError, e:
-                    if self.logger:
-                        self.logger.error("failed to set stop bits: %s" % (e,))
-                    self.serial.stopbits = backup
-                else:
-                    if self.logger:
-                        self.logger.info("%s stop bits: %s" % (stopbits and 'set' or 'get', self.serial.stopbits))
-                self.rfc2217SendSubnegotiation(
-                    SERVER_SET_STOPSIZE,
-                    struct.pack("!B", RFC2217_STOPBIT_MAP[self.serial.stopbits])
-                    )
-            elif suboption[1:2] == SET_CONTROL:
-                if suboption[2:3] == SET_CONTROL_REQ_FLOW_SETTING:
-                    if self.serial.xonxoff:
-                        self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_SW_FLOW_CONTROL)
-                    elif self.serial.rtscts:
-                        self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_HW_FLOW_CONTROL)
-                    else:
-                        self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_NO_FLOW_CONTROL)
-                elif suboption[2:3] == SET_CONTROL_USE_NO_FLOW_CONTROL:
-                    self.serial.xonxoff = False
-                    self.serial.rtscts = False
-                    if self.logger:
-                        self.logger.info("changed flow control to None")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_NO_FLOW_CONTROL)
-                elif suboption[2:3] == SET_CONTROL_USE_SW_FLOW_CONTROL:
-                    self.serial.xonxoff = True
-                    if self.logger:
-                        self.logger.info("changed flow control to XON/XOFF")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_SW_FLOW_CONTROL)
-                elif suboption[2:3] == SET_CONTROL_USE_HW_FLOW_CONTROL:
-                    self.serial.rtscts = True
-                    if self.logger:
-                        self.logger.info("changed flow control to RTS/CTS")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_USE_HW_FLOW_CONTROL)
-                elif suboption[2:3] == SET_CONTROL_REQ_BREAK_STATE:
-                    if self.logger:
-                        self.logger.warning("requested break state - not implemented")
-                    pass # XXX needs cached value
-                elif suboption[2:3] == SET_CONTROL_BREAK_ON:
-                    self.serial.setBreak(True)
-                    if self.logger:
-                        self.logger.info("changed BREAK to active")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_BREAK_ON)
-                elif suboption[2:3] == SET_CONTROL_BREAK_OFF:
-                    self.serial.setBreak(False)
-                    if self.logger:
-                        self.logger.info("changed BREAK to inactive")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_BREAK_OFF)
-                elif suboption[2:3] == SET_CONTROL_REQ_DTR:
-                    if self.logger:
-                        self.logger.warning("requested DTR state - not implemented")
-                    pass # XXX needs cached value
-                elif suboption[2:3] == SET_CONTROL_DTR_ON:
-                    self.serial.setDTR(True)
-                    if self.logger:
-                        self.logger.info("changed DTR to active")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_DTR_ON)
-                elif suboption[2:3] == SET_CONTROL_DTR_OFF:
-                    self.serial.setDTR(False)
-                    if self.logger:
-                        self.logger.info("changed DTR to inactive")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_DTR_OFF)
-                elif suboption[2:3] == SET_CONTROL_REQ_RTS:
-                    if self.logger:
-                        self.logger.warning("requested RTS state - not implemented")
-                    pass # XXX needs cached value
-                    #~ self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_RTS_ON)
-                elif suboption[2:3] == SET_CONTROL_RTS_ON:
-                    self.serial.setRTS(True)
-                    if self.logger:
-                        self.logger.info("changed RTS to active")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_RTS_ON)
-                elif suboption[2:3] == SET_CONTROL_RTS_OFF:
-                    self.serial.setRTS(False)
-                    if self.logger:
-                        self.logger.info("changed RTS to inactive")
-                    self.rfc2217SendSubnegotiation(SERVER_SET_CONTROL, SET_CONTROL_RTS_OFF)
-                #~ elif suboption[2:3] == SET_CONTROL_REQ_FLOW_SETTING_IN:
-                #~ elif suboption[2:3] == SET_CONTROL_USE_NO_FLOW_CONTROL_IN:
-                #~ elif suboption[2:3] == SET_CONTROL_USE_SW_FLOW_CONTOL_IN:
-                #~ elif suboption[2:3] == SET_CONTROL_USE_HW_FLOW_CONTOL_IN:
-                #~ elif suboption[2:3] == SET_CONTROL_USE_DCD_FLOW_CONTROL:
-                #~ elif suboption[2:3] == SET_CONTROL_USE_DTR_FLOW_CONTROL:
-                #~ elif suboption[2:3] == SET_CONTROL_USE_DSR_FLOW_CONTROL:
-            elif suboption[1:2] == NOTIFY_LINESTATE:
-                # client polls for current state
-                self.rfc2217SendSubnegotiation(
-                    SERVER_NOTIFY_LINESTATE,
-                    to_bytes([0])   # sorry, nothing like that implemented
-                    )
-            elif suboption[1:2] == NOTIFY_MODEMSTATE:
-                if self.logger:
-                    self.logger.info("request for modem state")
-                # client polls for current state
-                self.check_modem_lines(force_notification=True)
-            elif suboption[1:2] == FLOWCONTROL_SUSPEND:
-                if self.logger:
-                    self.logger.info("suspend")
-                self._remote_suspend_flow = True
-            elif suboption[1:2] == FLOWCONTROL_RESUME:
-                if self.logger:
-                    self.logger.info("resume")
-                self._remote_suspend_flow = False
-            elif suboption[1:2] == SET_LINESTATE_MASK:
-                self.linstate_mask = ord(suboption[2:3]) # ensure it is a number
-                if self.logger:
-                    self.logger.info("line state mask: 0x%02x" % (self.linstate_mask,))
-            elif suboption[1:2] == SET_MODEMSTATE_MASK:
-                self.modemstate_mask = ord(suboption[2:3]) # ensure it is a number
-                if self.logger:
-                    self.logger.info("modem state mask: 0x%02x" % (self.modemstate_mask,))
-            elif suboption[1:2] == PURGE_DATA:
-                if suboption[2:3] == PURGE_RECEIVE_BUFFER:
-                    self.serial.flushInput()
-                    if self.logger:
-                        self.logger.info("purge in")
-                    self.rfc2217SendSubnegotiation(SERVER_PURGE_DATA, PURGE_RECEIVE_BUFFER)
-                elif suboption[2:3] == PURGE_TRANSMIT_BUFFER:
-                    self.serial.flushOutput()
-                    if self.logger:
-                        self.logger.info("purge out")
-                    self.rfc2217SendSubnegotiation(SERVER_PURGE_DATA, PURGE_TRANSMIT_BUFFER)
-                elif suboption[2:3] == PURGE_BOTH_BUFFERS:
-                    self.serial.flushInput()
-                    self.serial.flushOutput()
-                    if self.logger:
-                        self.logger.info("purge both")
-                    self.rfc2217SendSubnegotiation(SERVER_PURGE_DATA, PURGE_BOTH_BUFFERS)
-                else:
-                    if self.logger:
-                        self.logger.error("undefined PURGE_DATA: %r" % list(suboption[2:]))
-            else:
-                if self.logger:
-                    self.logger.error("undefined COM_PORT_OPTION: %r" % list(suboption[1:]))
-        else:
-            if self.logger:
-                self.logger.warning("unknown subnegotiation: %r" % (suboption,))
-
-
-# simple client test
-if __name__ == '__main__':
-    import sys
-    s = Serial('rfc2217://localhost:7000', 115200)
-    sys.stdout.write('%s\n' % s)
-
-    #~ s.baudrate = 1898
-
-    sys.stdout.write("write...\n")
-    s.write("hello\n")
-    s.flush()
-    sys.stdout.write("read: %s\n" % s.read(5))
-
-    #~ s.baudrate = 19200
-    #~ s.databits = 7
-    s.close()
diff --git a/systrace/catapult/third_party/pyserial/serial/serialcli.py b/systrace/catapult/third_party/pyserial/serial/serialcli.py
deleted file mode 100644
index 19169a3..0000000
--- a/systrace/catapult/third_party/pyserial/serial/serialcli.py
+++ /dev/null
@@ -1,273 +0,0 @@
-#! python
-# Python Serial Port Extension for Win32, Linux, BSD, Jython and .NET/Mono
-# serial driver for .NET/Mono (IronPython), .NET >= 2
-# see __init__.py
-#
-# (C) 2008 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-import clr
-import System
-import System.IO.Ports
-from serial.serialutil import *
-
-
-def device(portnum):
-    """Turn a port number into a device name"""
-    return System.IO.Ports.SerialPort.GetPortNames()[portnum]
-
-
-# must invoke function with byte array, make a helper to convert strings
-# to byte arrays
-sab = System.Array[System.Byte]
-def as_byte_array(string):
-    return sab([ord(x) for x in string])  # XXX will require adaption when run with a 3.x compatible IronPython
-
-class IronSerial(SerialBase):
-    """Serial port implementation for .NET/Mono."""
-
-    BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
-                9600, 19200, 38400, 57600, 115200)
-
-    def open(self):
-        """Open port with current settings. This may throw a SerialException
-           if the port cannot be opened."""
-        if self._port is None:
-            raise SerialException("Port must be configured before it can be used.")
-        if self._isOpen:
-            raise SerialException("Port is already open.")
-        try:
-            self._port_handle = System.IO.Ports.SerialPort(self.portstr)
-        except Exception, msg:
-            self._port_handle = None
-            raise SerialException("could not open port %s: %s" % (self.portstr, msg))
-
-        self._reconfigurePort()
-        self._port_handle.Open()
-        self._isOpen = True
-        if not self._rtscts:
-            self.setRTS(True)
-            self.setDTR(True)
-        self.flushInput()
-        self.flushOutput()
-
-    def _reconfigurePort(self):
-        """Set communication parameters on opened port."""
-        if not self._port_handle:
-            raise SerialException("Can only operate on a valid port handle")
-
-        #~ self._port_handle.ReceivedBytesThreshold = 1
-
-        if self._timeout is None:
-            self._port_handle.ReadTimeout = System.IO.Ports.SerialPort.InfiniteTimeout
-        else:
-            self._port_handle.ReadTimeout = int(self._timeout*1000)
-
-        # if self._timeout != 0 and self._interCharTimeout is not None:
-            # timeouts = (int(self._interCharTimeout * 1000),) + timeouts[1:]
-
-        if self._writeTimeout is None:
-            self._port_handle.WriteTimeout = System.IO.Ports.SerialPort.InfiniteTimeout
-        else:
-            self._port_handle.WriteTimeout = int(self._writeTimeout*1000)
-
-
-        # Setup the connection info.
-        try:
-            self._port_handle.BaudRate = self._baudrate
-        except IOError, e:
-            # catch errors from illegal baudrate settings
-            raise ValueError(str(e))
-
-        if self._bytesize == FIVEBITS:
-            self._port_handle.DataBits     = 5
-        elif self._bytesize == SIXBITS:
-            self._port_handle.DataBits     = 6
-        elif self._bytesize == SEVENBITS:
-            self._port_handle.DataBits     = 7
-        elif self._bytesize == EIGHTBITS:
-            self._port_handle.DataBits     = 8
-        else:
-            raise ValueError("Unsupported number of data bits: %r" % self._bytesize)
-
-        if self._parity == PARITY_NONE:
-            self._port_handle.Parity       = getattr(System.IO.Ports.Parity, 'None') # reserved keyword in Py3k
-        elif self._parity == PARITY_EVEN:
-            self._port_handle.Parity       = System.IO.Ports.Parity.Even
-        elif self._parity == PARITY_ODD:
-            self._port_handle.Parity       = System.IO.Ports.Parity.Odd
-        elif self._parity == PARITY_MARK:
-            self._port_handle.Parity       = System.IO.Ports.Parity.Mark
-        elif self._parity == PARITY_SPACE:
-            self._port_handle.Parity       = System.IO.Ports.Parity.Space
-        else:
-            raise ValueError("Unsupported parity mode: %r" % self._parity)
-
-        if self._stopbits == STOPBITS_ONE:
-            self._port_handle.StopBits     = System.IO.Ports.StopBits.One
-        elif self._stopbits == STOPBITS_ONE_POINT_FIVE:
-            self._port_handle.StopBits     = System.IO.Ports.StopBits.OnePointFive
-        elif self._stopbits == STOPBITS_TWO:
-            self._port_handle.StopBits     = System.IO.Ports.StopBits.Two
-        else:
-            raise ValueError("Unsupported number of stop bits: %r" % self._stopbits)
-
-        if self._rtscts and self._xonxoff:
-            self._port_handle.Handshake  = System.IO.Ports.Handshake.RequestToSendXOnXOff
-        elif self._rtscts:
-            self._port_handle.Handshake  = System.IO.Ports.Handshake.RequestToSend
-        elif self._xonxoff:
-            self._port_handle.Handshake  = System.IO.Ports.Handshake.XOnXOff
-        else:
-            self._port_handle.Handshake  = getattr(System.IO.Ports.Handshake, 'None')   # reserved keyword in Py3k
-
-    #~ def __del__(self):
-        #~ self.close()
-
-    def close(self):
-        """Close port"""
-        if self._isOpen:
-            if self._port_handle:
-                try:
-                    self._port_handle.Close()
-                except System.IO.Ports.InvalidOperationException:
-                    # ignore errors. can happen for unplugged USB serial devices
-                    pass
-                self._port_handle = None
-            self._isOpen = False
-
-    def makeDeviceName(self, port):
-        try:
-            return device(port)
-        except TypeError, e:
-            raise SerialException(str(e))
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def inWaiting(self):
-        """Return the number of characters currently in the input buffer."""
-        if not self._port_handle: raise portNotOpenError
-        return self._port_handle.BytesToRead
-
-    def read(self, size=1):
-        """Read size bytes from the serial port. If a timeout is set it may
-           return less characters as requested. With no timeout it will block
-           until the requested number of bytes is read."""
-        if not self._port_handle: raise portNotOpenError
-        # must use single byte reads as this is the only way to read
-        # without applying encodings
-        data = bytearray()
-        while size:
-            try:
-                data.append(self._port_handle.ReadByte())
-            except System.TimeoutException, e:
-                break
-            else:
-                size -= 1
-        return bytes(data)
-
-    def write(self, data):
-        """Output the given string over the serial port."""
-        if not self._port_handle: raise portNotOpenError
-        if not isinstance(data, (bytes, bytearray)):
-            raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
-        try:
-            # must call overloaded method with byte array argument
-            # as this is the only one not applying encodings
-            self._port_handle.Write(as_byte_array(data), 0, len(data))
-        except System.TimeoutException, e:
-            raise writeTimeoutError
-        return len(data)
-
-    def flushInput(self):
-        """Clear input buffer, discarding all that is in the buffer."""
-        if not self._port_handle: raise portNotOpenError
-        self._port_handle.DiscardInBuffer()
-
-    def flushOutput(self):
-        """Clear output buffer, aborting the current output and
-        discarding all that is in the buffer."""
-        if not self._port_handle: raise portNotOpenError
-        self._port_handle.DiscardOutBuffer()
-
-    def sendBreak(self, duration=0.25):
-        """Send break condition. Timed, returns to idle state after given duration."""
-        if not self._port_handle: raise portNotOpenError
-        import time
-        self._port_handle.BreakState = True
-        time.sleep(duration)
-        self._port_handle.BreakState = False
-
-    def setBreak(self, level=True):
-        """Set break: Controls TXD. When active, to transmitting is possible."""
-        if not self._port_handle: raise portNotOpenError
-        self._port_handle.BreakState = bool(level)
-
-    def setRTS(self, level=True):
-        """Set terminal status line: Request To Send"""
-        if not self._port_handle: raise portNotOpenError
-        self._port_handle.RtsEnable = bool(level)
-
-    def setDTR(self, level=True):
-        """Set terminal status line: Data Terminal Ready"""
-        if not self._port_handle: raise portNotOpenError
-        self._port_handle.DtrEnable = bool(level)
-
-    def getCTS(self):
-        """Read terminal status line: Clear To Send"""
-        if not self._port_handle: raise portNotOpenError
-        return self._port_handle.CtsHolding
-
-    def getDSR(self):
-        """Read terminal status line: Data Set Ready"""
-        if not self._port_handle: raise portNotOpenError
-        return self._port_handle.DsrHolding
-
-    def getRI(self):
-        """Read terminal status line: Ring Indicator"""
-        if not self._port_handle: raise portNotOpenError
-        #~ return self._port_handle.XXX
-        return False #XXX an error would be better
-
-    def getCD(self):
-        """Read terminal status line: Carrier Detect"""
-        if not self._port_handle: raise portNotOpenError
-        return self._port_handle.CDHolding
-
-    # - - platform specific - - - -
-    # none
-
-
-# assemble Serial class with the platform specific implementation and the base
-# for file-like behavior. for Python 2.6 and newer, that provide the new I/O
-# library, derive from io.RawIOBase
-try:
-    import io
-except ImportError:
-    # classic version with our own file-like emulation
-    class Serial(IronSerial, FileLike):
-        pass
-else:
-    # io library present
-    class Serial(IronSerial, io.RawIOBase):
-        pass
-
-
-# Nur Testfunktion!!
-if __name__ == '__main__':
-    import sys
-
-    s = Serial(0)
-    sys.stdio.write('%s\n' % s)
-
-    s = Serial()
-    sys.stdio.write('%s\n' % s)
-
-
-    s.baudrate = 19200
-    s.databits = 7
-    s.close()
-    s.port = 0
-    s.open()
-    sys.stdio.write('%s\n' % s)
-
diff --git a/systrace/catapult/third_party/pyserial/serial/serialjava.py b/systrace/catapult/third_party/pyserial/serial/serialjava.py
deleted file mode 100644
index 46a78f8..0000000
--- a/systrace/catapult/third_party/pyserial/serial/serialjava.py
+++ /dev/null
@@ -1,262 +0,0 @@
-#!jython
-#
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# module for serial IO for Jython and JavaComm
-# see __init__.py
-#
-# (C) 2002-2008 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-from serial.serialutil import *
-
-def my_import(name):
-    mod = __import__(name)
-    components = name.split('.')
-    for comp in components[1:]:
-        mod = getattr(mod, comp)
-    return mod
-
-
-def detect_java_comm(names):
-    """try given list of modules and return that imports"""
-    for name in names:
-        try:
-            mod = my_import(name)
-            mod.SerialPort
-            return mod
-        except (ImportError, AttributeError):
-            pass
-    raise ImportError("No Java Communications API implementation found")
-
-
-# Java Communications API implementations
-# http://mho.republika.pl/java/comm/
-
-comm = detect_java_comm([
-    'javax.comm', # Sun/IBM
-    'gnu.io',     # RXTX
-])
-
-
-def device(portnumber):
-    """Turn a port number into a device name"""
-    enum = comm.CommPortIdentifier.getPortIdentifiers()
-    ports = []
-    while enum.hasMoreElements():
-        el = enum.nextElement()
-        if el.getPortType() == comm.CommPortIdentifier.PORT_SERIAL:
-            ports.append(el)
-    return ports[portnumber].getName()
-
-
-class JavaSerial(SerialBase):
-    """Serial port class, implemented with Java Communications API and
-       thus usable with jython and the appropriate java extension."""
-
-    def open(self):
-        """Open port with current settings. This may throw a SerialException
-           if the port cannot be opened."""
-        if self._port is None:
-            raise SerialException("Port must be configured before it can be used.")
-        if self._isOpen:
-            raise SerialException("Port is already open.")
-        if type(self._port) == type(''):      # strings are taken directly
-            portId = comm.CommPortIdentifier.getPortIdentifier(self._port)
-        else:
-            portId = comm.CommPortIdentifier.getPortIdentifier(device(self._port))     # numbers are transformed to a comport id obj
-        try:
-            self.sPort = portId.open("python serial module", 10)
-        except Exception, msg:
-            self.sPort = None
-            raise SerialException("Could not open port: %s" % msg)
-        self._reconfigurePort()
-        self._instream = self.sPort.getInputStream()
-        self._outstream = self.sPort.getOutputStream()
-        self._isOpen = True
-
-    def _reconfigurePort(self):
-        """Set communication parameters on opened port."""
-        if not self.sPort:
-            raise SerialException("Can only operate on a valid port handle")
-
-        self.sPort.enableReceiveTimeout(30)
-        if self._bytesize == FIVEBITS:
-            jdatabits = comm.SerialPort.DATABITS_5
-        elif self._bytesize == SIXBITS:
-            jdatabits = comm.SerialPort.DATABITS_6
-        elif self._bytesize == SEVENBITS:
-            jdatabits = comm.SerialPort.DATABITS_7
-        elif self._bytesize == EIGHTBITS:
-            jdatabits = comm.SerialPort.DATABITS_8
-        else:
-            raise ValueError("unsupported bytesize: %r" % self._bytesize)
-
-        if self._stopbits == STOPBITS_ONE:
-            jstopbits = comm.SerialPort.STOPBITS_1
-        elif stopbits == STOPBITS_ONE_POINT_FIVE:
-            self._jstopbits = comm.SerialPort.STOPBITS_1_5
-        elif self._stopbits == STOPBITS_TWO:
-            jstopbits = comm.SerialPort.STOPBITS_2
-        else:
-            raise ValueError("unsupported number of stopbits: %r" % self._stopbits)
-
-        if self._parity == PARITY_NONE:
-            jparity = comm.SerialPort.PARITY_NONE
-        elif self._parity == PARITY_EVEN:
-            jparity = comm.SerialPort.PARITY_EVEN
-        elif self._parity == PARITY_ODD:
-            jparity = comm.SerialPort.PARITY_ODD
-        elif self._parity == PARITY_MARK:
-            jparity = comm.SerialPort.PARITY_MARK
-        elif self._parity == PARITY_SPACE:
-            jparity = comm.SerialPort.PARITY_SPACE
-        else:
-            raise ValueError("unsupported parity type: %r" % self._parity)
-
-        jflowin = jflowout = 0
-        if self._rtscts:
-            jflowin  |=  comm.SerialPort.FLOWCONTROL_RTSCTS_IN
-            jflowout |=  comm.SerialPort.FLOWCONTROL_RTSCTS_OUT
-        if self._xonxoff:
-            jflowin  |=  comm.SerialPort.FLOWCONTROL_XONXOFF_IN
-            jflowout |=  comm.SerialPort.FLOWCONTROL_XONXOFF_OUT
-
-        self.sPort.setSerialPortParams(self._baudrate, jdatabits, jstopbits, jparity)
-        self.sPort.setFlowControlMode(jflowin | jflowout)
-
-        if self._timeout >= 0:
-            self.sPort.enableReceiveTimeout(self._timeout*1000)
-        else:
-            self.sPort.disableReceiveTimeout()
-
-    def close(self):
-        """Close port"""
-        if self._isOpen:
-            if self.sPort:
-                self._instream.close()
-                self._outstream.close()
-                self.sPort.close()
-                self.sPort = None
-            self._isOpen = False
-
-    def makeDeviceName(self, port):
-        return device(port)
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def inWaiting(self):
-        """Return the number of characters currently in the input buffer."""
-        if not self.sPort: raise portNotOpenError
-        return self._instream.available()
-
-    def read(self, size=1):
-        """Read size bytes from the serial port. If a timeout is set it may
-           return less characters as requested. With no timeout it will block
-           until the requested number of bytes is read."""
-        if not self.sPort: raise portNotOpenError
-        read = bytearray()
-        if size > 0:
-            while len(read) < size:
-                x = self._instream.read()
-                if x == -1:
-                    if self.timeout >= 0:
-                        break
-                else:
-                    read.append(x)
-        return bytes(read)
-
-    def write(self, data):
-        """Output the given string over the serial port."""
-        if not self.sPort: raise portNotOpenError
-        if not isinstance(data, (bytes, bytearray)):
-            raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
-        self._outstream.write(data)
-        return len(data)
-
-    def flushInput(self):
-        """Clear input buffer, discarding all that is in the buffer."""
-        if not self.sPort: raise portNotOpenError
-        self._instream.skip(self._instream.available())
-
-    def flushOutput(self):
-        """Clear output buffer, aborting the current output and
-        discarding all that is in the buffer."""
-        if not self.sPort: raise portNotOpenError
-        self._outstream.flush()
-
-    def sendBreak(self, duration=0.25):
-        """Send break condition. Timed, returns to idle state after given duration."""
-        if not self.sPort: raise portNotOpenError
-        self.sPort.sendBreak(duration*1000.0)
-
-    def setBreak(self, level=1):
-        """Set break: Controls TXD. When active, to transmitting is possible."""
-        if self.fd is None: raise portNotOpenError
-        raise SerialException("The setBreak function is not implemented in java.")
-
-    def setRTS(self, level=1):
-        """Set terminal status line: Request To Send"""
-        if not self.sPort: raise portNotOpenError
-        self.sPort.setRTS(level)
-
-    def setDTR(self, level=1):
-        """Set terminal status line: Data Terminal Ready"""
-        if not self.sPort: raise portNotOpenError
-        self.sPort.setDTR(level)
-
-    def getCTS(self):
-        """Read terminal status line: Clear To Send"""
-        if not self.sPort: raise portNotOpenError
-        self.sPort.isCTS()
-
-    def getDSR(self):
-        """Read terminal status line: Data Set Ready"""
-        if not self.sPort: raise portNotOpenError
-        self.sPort.isDSR()
-
-    def getRI(self):
-        """Read terminal status line: Ring Indicator"""
-        if not self.sPort: raise portNotOpenError
-        self.sPort.isRI()
-
-    def getCD(self):
-        """Read terminal status line: Carrier Detect"""
-        if not self.sPort: raise portNotOpenError
-        self.sPort.isCD()
-
-
-# assemble Serial class with the platform specific implementation and the base
-# for file-like behavior. for Python 2.6 and newer, that provide the new I/O
-# library, derive from io.RawIOBase
-try:
-    import io
-except ImportError:
-    # classic version with our own file-like emulation
-    class Serial(JavaSerial, FileLike):
-        pass
-else:
-    # io library present
-    class Serial(JavaSerial, io.RawIOBase):
-        pass
-
-
-if __name__ == '__main__':
-    s = Serial(0,
-         baudrate=19200,        # baudrate
-         bytesize=EIGHTBITS,    # number of databits
-         parity=PARITY_EVEN,    # enable parity checking
-         stopbits=STOPBITS_ONE, # number of stopbits
-         timeout=3,             # set a timeout value, None for waiting forever
-         xonxoff=0,             # enable software flow control
-         rtscts=0,              # enable RTS/CTS flow control
-    )
-    s.setRTS(1)
-    s.setDTR(1)
-    s.flushInput()
-    s.flushOutput()
-    s.write('hello')
-    sys.stdio.write('%r\n' % s.read(5))
-    sys.stdio.write('%s\n' % s.inWaiting())
-    del s
-
-
diff --git a/systrace/catapult/third_party/pyserial/serial/serialposix.py b/systrace/catapult/third_party/pyserial/serial/serialposix.py
deleted file mode 100755
index b9b4b28..0000000
--- a/systrace/catapult/third_party/pyserial/serial/serialposix.py
+++ /dev/null
@@ -1,703 +0,0 @@
-#!/usr/bin/env python
-#
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# module for serial IO for POSIX compatible systems, like Linux
-# see __init__.py
-#
-# (C) 2001-2010 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-#
-# parts based on code from Grant B. Edwards  <grante@visi.com>:
-#  ftp://ftp.visi.com/users/grante/python/PosixSerial.py
-#
-# references: http://www.easysw.com/~mike/serial/serial.html
-
-import sys, os, fcntl, termios, struct, select, errno, time
-from serial.serialutil import *
-
-# Do check the Python version as some constants have moved.
-if (sys.hexversion < 0x020100f0):
-    import TERMIOS
-else:
-    TERMIOS = termios
-
-if (sys.hexversion < 0x020200f0):
-    import FCNTL
-else:
-    FCNTL = fcntl
-
-# try to detect the OS so that a device can be selected...
-# this code block should supply a device() and set_special_baudrate() function
-# for the platform
-plat = sys.platform.lower()
-
-if   plat[:5] == 'linux':    # Linux (confirmed)
-
-    def device(port):
-        return '/dev/ttyS%d' % port
-
-    TCGETS2 = 0x802C542A
-    TCSETS2 = 0x402C542B
-    BOTHER = 0o010000
-
-    def set_special_baudrate(port, baudrate):
-        # right size is 44 on x86_64, allow for some growth
-        import array
-        buf = array.array('i', [0] * 64)
-
-        try:
-            # get serial_struct
-            FCNTL.ioctl(port.fd, TCGETS2, buf)
-            # set custom speed
-            buf[2] &= ~TERMIOS.CBAUD
-            buf[2] |= BOTHER
-            buf[9] = buf[10] = baudrate
-
-            # set serial_struct
-            res = FCNTL.ioctl(port.fd, TCSETS2, buf)
-        except IOError, e:
-            raise ValueError('Failed to set custom baud rate (%s): %s' % (baudrate, e))
-
-    baudrate_constants = {
-        0:       0000000,  # hang up
-        50:      0000001,
-        75:      0000002,
-        110:     0000003,
-        134:     0000004,
-        150:     0000005,
-        200:     0000006,
-        300:     0000007,
-        600:     0000010,
-        1200:    0000011,
-        1800:    0000012,
-        2400:    0000013,
-        4800:    0000014,
-        9600:    0000015,
-        19200:   0000016,
-        38400:   0000017,
-        57600:   0010001,
-        115200:  0010002,
-        230400:  0010003,
-        460800:  0010004,
-        500000:  0010005,
-        576000:  0010006,
-        921600:  0010007,
-        1000000: 0010010,
-        1152000: 0010011,
-        1500000: 0010012,
-        2000000: 0010013,
-        2500000: 0010014,
-        3000000: 0010015,
-        3500000: 0010016,
-        4000000: 0010017
-    }
-
-elif plat == 'cygwin':       # cygwin/win32 (confirmed)
-
-    def device(port):
-        return '/dev/com%d' % (port + 1)
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {
-        128000: 0x01003,
-        256000: 0x01005,
-        500000: 0x01007,
-        576000: 0x01008,
-        921600: 0x01009,
-        1000000: 0x0100a,
-        1152000: 0x0100b,
-        1500000: 0x0100c,
-        2000000: 0x0100d,
-        2500000: 0x0100e,
-        3000000: 0x0100f
-    }
-
-elif plat[:7] == 'openbsd':    # OpenBSD
-
-    def device(port):
-        return '/dev/cua%02d' % port
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {}
-
-elif plat[:3] == 'bsd' or  \
-    plat[:7] == 'freebsd':
-
-    def device(port):
-        return '/dev/cuad%d' % port
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {}
-
-elif plat[:6] == 'darwin':   # OS X
-
-    version = os.uname()[2].split('.')
-    # Tiger or above can support arbitrary serial speeds
-    if int(version[0]) >= 8:
-        def set_special_baudrate(port, baudrate):
-            # use IOKit-specific call to set up high speeds
-            import array, fcntl
-            buf = array.array('i', [baudrate])
-            IOSSIOSPEED = 0x80045402 #_IOW('T', 2, speed_t)
-            fcntl.ioctl(port.fd, IOSSIOSPEED, buf, 1)
-    else: # version < 8
-        def set_special_baudrate(port, baudrate):
-            raise ValueError("baud rate not supported")
-
-    def device(port):
-        return '/dev/cuad%d' % port
-
-    baudrate_constants = {}
-
-
-elif plat[:6] == 'netbsd':   # NetBSD 1.6 testing by Erk
-
-    def device(port):
-        return '/dev/dty%02d' % port
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {}
-
-elif plat[:4] == 'irix':     # IRIX (partially tested)
-
-    def device(port):
-        return '/dev/ttyf%d' % (port+1) #XXX different device names depending on flow control
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {}
-
-elif plat[:2] == 'hp':       # HP-UX (not tested)
-
-    def device(port):
-        return '/dev/tty%dp0' % (port+1)
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {}
-
-elif plat[:5] == 'sunos':    # Solaris/SunOS (confirmed)
-
-    def device(port):
-        return '/dev/tty%c' % (ord('a')+port)
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {}
-
-elif plat[:3] == 'aix':      # AIX
-
-    def device(port):
-        return '/dev/tty%d' % (port)
-
-    def set_special_baudrate(port, baudrate):
-        raise ValueError("sorry don't know how to handle non standard baud rate on this platform")
-
-    baudrate_constants = {}
-
-else:
-    # platform detection has failed...
-    sys.stderr.write("""\
-don't know how to number ttys on this system.
-! Use an explicit path (eg /dev/ttyS1) or send this information to
-! the author of this module:
-
-sys.platform = %r
-os.name = %r
-serialposix.py version = %s
-
-also add the device name of the serial port and where the
-counting starts for the first serial port.
-e.g. 'first serial port: /dev/ttyS0'
-and with a bit luck you can get this module running...
-""" % (sys.platform, os.name, VERSION))
-    # no exception, just continue with a brave attempt to build a device name
-    # even if the device name is not correct for the platform it has chances
-    # to work using a string with the real device name as port parameter.
-    def device(portum):
-        return '/dev/ttyS%d' % portnum
-    def set_special_baudrate(port, baudrate):
-        raise SerialException("sorry don't know how to handle non standard baud rate on this platform")
-    baudrate_constants = {}
-    #~ raise Exception, "this module does not run on this platform, sorry."
-
-# whats up with "aix", "beos", ....
-# they should work, just need to know the device names.
-
-
-# load some constants for later use.
-# try to use values from TERMIOS, use defaults from linux otherwise
-TIOCMGET  = hasattr(TERMIOS, 'TIOCMGET') and TERMIOS.TIOCMGET or 0x5415
-TIOCMBIS  = hasattr(TERMIOS, 'TIOCMBIS') and TERMIOS.TIOCMBIS or 0x5416
-TIOCMBIC  = hasattr(TERMIOS, 'TIOCMBIC') and TERMIOS.TIOCMBIC or 0x5417
-TIOCMSET  = hasattr(TERMIOS, 'TIOCMSET') and TERMIOS.TIOCMSET or 0x5418
-
-#TIOCM_LE = hasattr(TERMIOS, 'TIOCM_LE') and TERMIOS.TIOCM_LE or 0x001
-TIOCM_DTR = hasattr(TERMIOS, 'TIOCM_DTR') and TERMIOS.TIOCM_DTR or 0x002
-TIOCM_RTS = hasattr(TERMIOS, 'TIOCM_RTS') and TERMIOS.TIOCM_RTS or 0x004
-#TIOCM_ST = hasattr(TERMIOS, 'TIOCM_ST') and TERMIOS.TIOCM_ST or 0x008
-#TIOCM_SR = hasattr(TERMIOS, 'TIOCM_SR') and TERMIOS.TIOCM_SR or 0x010
-
-TIOCM_CTS = hasattr(TERMIOS, 'TIOCM_CTS') and TERMIOS.TIOCM_CTS or 0x020
-TIOCM_CAR = hasattr(TERMIOS, 'TIOCM_CAR') and TERMIOS.TIOCM_CAR or 0x040
-TIOCM_RNG = hasattr(TERMIOS, 'TIOCM_RNG') and TERMIOS.TIOCM_RNG or 0x080
-TIOCM_DSR = hasattr(TERMIOS, 'TIOCM_DSR') and TERMIOS.TIOCM_DSR or 0x100
-TIOCM_CD  = hasattr(TERMIOS, 'TIOCM_CD') and TERMIOS.TIOCM_CD or TIOCM_CAR
-TIOCM_RI  = hasattr(TERMIOS, 'TIOCM_RI') and TERMIOS.TIOCM_RI or TIOCM_RNG
-#TIOCM_OUT1 = hasattr(TERMIOS, 'TIOCM_OUT1') and TERMIOS.TIOCM_OUT1 or 0x2000
-#TIOCM_OUT2 = hasattr(TERMIOS, 'TIOCM_OUT2') and TERMIOS.TIOCM_OUT2 or 0x4000
-if hasattr(TERMIOS, 'TIOCINQ'):
-    TIOCINQ = TERMIOS.TIOCINQ
-else:
-    TIOCINQ = hasattr(TERMIOS, 'FIONREAD') and TERMIOS.FIONREAD or 0x541B
-TIOCOUTQ   = hasattr(TERMIOS, 'TIOCOUTQ') and TERMIOS.TIOCOUTQ or 0x5411
-
-TIOCM_zero_str = struct.pack('I', 0)
-TIOCM_RTS_str = struct.pack('I', TIOCM_RTS)
-TIOCM_DTR_str = struct.pack('I', TIOCM_DTR)
-
-TIOCSBRK  = hasattr(TERMIOS, 'TIOCSBRK') and TERMIOS.TIOCSBRK or 0x5427
-TIOCCBRK  = hasattr(TERMIOS, 'TIOCCBRK') and TERMIOS.TIOCCBRK or 0x5428
-
-
-class PosixSerial(SerialBase):
-    """Serial port class POSIX implementation. Serial port configuration is 
-    done with termios and fcntl. Runs on Linux and many other Un*x like
-    systems."""
-
-    def open(self):
-        """Open port with current settings. This may throw a SerialException
-           if the port cannot be opened."""
-        if self._port is None:
-            raise SerialException("Port must be configured before it can be used.")
-        if self._isOpen:
-            raise SerialException("Port is already open.")
-        self.fd = None
-        # open
-        try:
-            self.fd = os.open(self.portstr, os.O_RDWR|os.O_NOCTTY|os.O_NONBLOCK)
-        except IOError, msg:
-            self.fd = None
-            raise SerialException(msg.errno, "could not open port %s: %s" % (self._port, msg))
-        #~ fcntl.fcntl(self.fd, FCNTL.F_SETFL, 0)  # set blocking
-
-        try:
-            self._reconfigurePort()
-        except:
-            try:
-                os.close(self.fd)
-            except:
-                # ignore any exception when closing the port
-                # also to keep original exception that happened when setting up
-                pass
-            self.fd = None
-            raise
-        else:
-            self._isOpen = True
-        self.flushInput()
-
-
-    def _reconfigurePort(self):
-        """Set communication parameters on opened port."""
-        if self.fd is None:
-            raise SerialException("Can only operate on a valid file descriptor")
-        custom_baud = None
-
-        vmin = vtime = 0                # timeout is done via select
-        if self._interCharTimeout is not None:
-            vmin = 1
-            vtime = int(self._interCharTimeout * 10)
-        try:
-            orig_attr = termios.tcgetattr(self.fd)
-            iflag, oflag, cflag, lflag, ispeed, ospeed, cc = orig_attr
-        except termios.error, msg:      # if a port is nonexistent but has a /dev file, it'll fail here
-            raise SerialException("Could not configure port: %s" % msg)
-        # set up raw mode / no echo / binary
-        cflag |=  (TERMIOS.CLOCAL|TERMIOS.CREAD)
-        lflag &= ~(TERMIOS.ICANON|TERMIOS.ECHO|TERMIOS.ECHOE|TERMIOS.ECHOK|TERMIOS.ECHONL|
-                     TERMIOS.ISIG|TERMIOS.IEXTEN) #|TERMIOS.ECHOPRT
-        for flag in ('ECHOCTL', 'ECHOKE'): # netbsd workaround for Erk
-            if hasattr(TERMIOS, flag):
-                lflag &= ~getattr(TERMIOS, flag)
-
-        oflag &= ~(TERMIOS.OPOST)
-        iflag &= ~(TERMIOS.INLCR|TERMIOS.IGNCR|TERMIOS.ICRNL|TERMIOS.IGNBRK)
-        if hasattr(TERMIOS, 'IUCLC'):
-            iflag &= ~TERMIOS.IUCLC
-        if hasattr(TERMIOS, 'PARMRK'):
-            iflag &= ~TERMIOS.PARMRK
-
-        # setup baud rate
-        try:
-            ispeed = ospeed = getattr(TERMIOS, 'B%s' % (self._baudrate))
-        except AttributeError:
-            try:
-                ispeed = ospeed = baudrate_constants[self._baudrate]
-            except KeyError:
-                #~ raise ValueError('Invalid baud rate: %r' % self._baudrate)
-                # may need custom baud rate, it isn't in our list.
-                ispeed = ospeed = getattr(TERMIOS, 'B38400')
-                try:
-                    custom_baud = int(self._baudrate) # store for later
-                except ValueError:
-                    raise ValueError('Invalid baud rate: %r' % self._baudrate)
-                else:
-                    if custom_baud < 0:
-                        raise ValueError('Invalid baud rate: %r' % self._baudrate)
-
-        # setup char len
-        cflag &= ~TERMIOS.CSIZE
-        if self._bytesize == 8:
-            cflag |= TERMIOS.CS8
-        elif self._bytesize == 7:
-            cflag |= TERMIOS.CS7
-        elif self._bytesize == 6:
-            cflag |= TERMIOS.CS6
-        elif self._bytesize == 5:
-            cflag |= TERMIOS.CS5
-        else:
-            raise ValueError('Invalid char len: %r' % self._bytesize)
-        # setup stopbits
-        if self._stopbits == STOPBITS_ONE:
-            cflag &= ~(TERMIOS.CSTOPB)
-        elif self._stopbits == STOPBITS_ONE_POINT_FIVE:
-            cflag |=  (TERMIOS.CSTOPB)  # XXX same as TWO.. there is no POSIX support for 1.5
-        elif self._stopbits == STOPBITS_TWO:
-            cflag |=  (TERMIOS.CSTOPB)
-        else:
-            raise ValueError('Invalid stop bit specification: %r' % self._stopbits)
-        # setup parity
-        iflag &= ~(TERMIOS.INPCK|TERMIOS.ISTRIP)
-        if self._parity == PARITY_NONE:
-            cflag &= ~(TERMIOS.PARENB|TERMIOS.PARODD)
-        elif self._parity == PARITY_EVEN:
-            cflag &= ~(TERMIOS.PARODD)
-            cflag |=  (TERMIOS.PARENB)
-        elif self._parity == PARITY_ODD:
-            cflag |=  (TERMIOS.PARENB|TERMIOS.PARODD)
-        else:
-            raise ValueError('Invalid parity: %r' % self._parity)
-        # setup flow control
-        # xonxoff
-        if hasattr(TERMIOS, 'IXANY'):
-            if self._xonxoff:
-                iflag |=  (TERMIOS.IXON|TERMIOS.IXOFF) #|TERMIOS.IXANY)
-            else:
-                iflag &= ~(TERMIOS.IXON|TERMIOS.IXOFF|TERMIOS.IXANY)
-        else:
-            if self._xonxoff:
-                iflag |=  (TERMIOS.IXON|TERMIOS.IXOFF)
-            else:
-                iflag &= ~(TERMIOS.IXON|TERMIOS.IXOFF)
-        # rtscts
-        if hasattr(TERMIOS, 'CRTSCTS'):
-            if self._rtscts:
-                cflag |=  (TERMIOS.CRTSCTS)
-            else:
-                cflag &= ~(TERMIOS.CRTSCTS)
-        elif hasattr(TERMIOS, 'CNEW_RTSCTS'):   # try it with alternate constant name
-            if self._rtscts:
-                cflag |=  (TERMIOS.CNEW_RTSCTS)
-            else:
-                cflag &= ~(TERMIOS.CNEW_RTSCTS)
-        # XXX should there be a warning if setting up rtscts (and xonxoff etc) fails??
-
-        # buffer
-        # vmin "minimal number of characters to be read. = for non blocking"
-        if vmin < 0 or vmin > 255:
-            raise ValueError('Invalid vmin: %r ' % vmin)
-        cc[TERMIOS.VMIN] = vmin
-        # vtime
-        if vtime < 0 or vtime > 255:
-            raise ValueError('Invalid vtime: %r' % vtime)
-        cc[TERMIOS.VTIME] = vtime
-        # activate settings
-        if [iflag, oflag, cflag, lflag, ispeed, ospeed, cc] != orig_attr:
-            termios.tcsetattr(self.fd, TERMIOS.TCSANOW, [iflag, oflag, cflag, lflag, ispeed, ospeed, cc])
-
-        # apply custom baud rate, if any
-        if custom_baud is not None:
-            set_special_baudrate(self, custom_baud)
-
-    def close(self):
-        """Close port"""
-        if self._isOpen:
-            if self.fd is not None:
-                os.close(self.fd)
-                self.fd = None
-            self._isOpen = False
-
-    def makeDeviceName(self, port):
-        return device(port)
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def inWaiting(self):
-        """Return the number of characters currently in the input buffer."""
-        #~ s = fcntl.ioctl(self.fd, TERMIOS.FIONREAD, TIOCM_zero_str)
-        s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str)
-        return struct.unpack('I',s)[0]
-
-    # select based implementation, proved to work on many systems
-    def read(self, size=1):
-        """Read size bytes from the serial port. If a timeout is set it may
-           return less characters as requested. With no timeout it will block
-           until the requested number of bytes is read."""
-        if not self._isOpen: raise portNotOpenError
-        read = bytearray()
-        while len(read) < size:
-            try:
-                ready,_,_ = select.select([self.fd],[],[], self._timeout)
-                # If select was used with a timeout, and the timeout occurs, it
-                # returns with empty lists -> thus abort read operation.
-                # For timeout == 0 (non-blocking operation) also abort when there
-                # is nothing to read.
-                if not ready:
-                    break   # timeout
-                buf = os.read(self.fd, size-len(read))
-                # read should always return some data as select reported it was
-                # ready to read when we get to this point.
-                if not buf:
-                    # Disconnected devices, at least on Linux, show the
-                    # behavior that they are always ready to read immediately
-                    # but reading returns nothing.
-                    raise SerialException('device reports readiness to read but returned no data (device disconnected or multiple access on port?)')
-                read.extend(buf)
-            except select.error, e:
-                # ignore EAGAIN errors. all other errors are shown
-                # see also http://www.python.org/dev/peps/pep-3151/#select
-                if e[0] != errno.EAGAIN:
-                    raise SerialException('read failed: %s' % (e,))
-            except OSError, e:
-                # ignore EAGAIN errors. all other errors are shown
-                if e.errno != errno.EAGAIN:
-                    raise SerialException('read failed: %s' % (e,))
-        return bytes(read)
-
-    def write(self, data):
-        """Output the given string over the serial port."""
-        if not self._isOpen: raise portNotOpenError
-        d = to_bytes(data)
-        tx_len = len(d)
-        if self._writeTimeout is not None and self._writeTimeout > 0:
-            timeout = time.time() + self._writeTimeout
-        else:
-            timeout = None
-        while tx_len > 0:
-            try:
-                n = os.write(self.fd, d)
-                if timeout:
-                    # when timeout is set, use select to wait for being ready
-                    # with the time left as timeout
-                    timeleft = timeout - time.time()
-                    if timeleft < 0:
-                        raise writeTimeoutError
-                    _, ready, _ = select.select([], [self.fd], [], timeleft)
-                    if not ready:
-                        raise writeTimeoutError
-                else:
-                    # wait for write operation
-                    _, ready, _ = select.select([], [self.fd], [], None)
-                    if not ready:
-                        raise SerialException('write failed (select)')
-                d = d[n:]
-                tx_len -= n
-            except OSError, v:
-                if v.errno != errno.EAGAIN:
-                    raise SerialException('write failed: %s' % (v,))
-        return len(data)
-
-    def flush(self):
-        """Flush of file like objects. In this case, wait until all data
-           is written."""
-        self.drainOutput()
-
-    def flushInput(self):
-        """Clear input buffer, discarding all that is in the buffer."""
-        if not self._isOpen: raise portNotOpenError
-        termios.tcflush(self.fd, TERMIOS.TCIFLUSH)
-
-    def flushOutput(self):
-        """Clear output buffer, aborting the current output and
-        discarding all that is in the buffer."""
-        if not self._isOpen: raise portNotOpenError
-        termios.tcflush(self.fd, TERMIOS.TCOFLUSH)
-
-    def sendBreak(self, duration=0.25):
-        """Send break condition. Timed, returns to idle state after given duration."""
-        if not self._isOpen: raise portNotOpenError
-        termios.tcsendbreak(self.fd, int(duration/0.25))
-
-    def setBreak(self, level=1):
-        """Set break: Controls TXD. When active, no transmitting is possible."""
-        if self.fd is None: raise portNotOpenError
-        if level:
-            fcntl.ioctl(self.fd, TIOCSBRK)
-        else:
-            fcntl.ioctl(self.fd, TIOCCBRK)
-
-    def setRTS(self, level=1):
-        """Set terminal status line: Request To Send"""
-        if not self._isOpen: raise portNotOpenError
-        if level:
-            fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_RTS_str)
-        else:
-            fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_RTS_str)
-
-    def setDTR(self, level=1):
-        """Set terminal status line: Data Terminal Ready"""
-        if not self._isOpen: raise portNotOpenError
-        if level:
-            fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str)
-        else:
-            fcntl.ioctl(self.fd, TIOCMBIC, TIOCM_DTR_str)
-
-    def getCTS(self):
-        """Read terminal status line: Clear To Send"""
-        if not self._isOpen: raise portNotOpenError
-        s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str)
-        return struct.unpack('I',s)[0] & TIOCM_CTS != 0
-
-    def getDSR(self):
-        """Read terminal status line: Data Set Ready"""
-        if not self._isOpen: raise portNotOpenError
-        s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str)
-        return struct.unpack('I',s)[0] & TIOCM_DSR != 0
-
-    def getRI(self):
-        """Read terminal status line: Ring Indicator"""
-        if not self._isOpen: raise portNotOpenError
-        s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str)
-        return struct.unpack('I',s)[0] & TIOCM_RI != 0
-
-    def getCD(self):
-        """Read terminal status line: Carrier Detect"""
-        if not self._isOpen: raise portNotOpenError
-        s = fcntl.ioctl(self.fd, TIOCMGET, TIOCM_zero_str)
-        return struct.unpack('I',s)[0] & TIOCM_CD != 0
-
-    # - - platform specific - - - -
-
-    def outWaiting(self):
-        """Return the number of characters currently in the output buffer."""
-        #~ s = fcntl.ioctl(self.fd, TERMIOS.FIONREAD, TIOCM_zero_str)
-        s = fcntl.ioctl(self.fd, TIOCOUTQ, TIOCM_zero_str)
-        return struct.unpack('I',s)[0]
-
-    def drainOutput(self):
-        """internal - not portable!"""
-        if not self._isOpen: raise portNotOpenError
-        termios.tcdrain(self.fd)
-
-    def nonblocking(self):
-        """internal - not portable!"""
-        if not self._isOpen: raise portNotOpenError
-        fcntl.fcntl(self.fd, FCNTL.F_SETFL, os.O_NONBLOCK)
-
-    def fileno(self):
-        """\
-        For easier use of the serial port instance with select.
-        WARNING: this function is not portable to different platforms!
-        """
-        if not self._isOpen: raise portNotOpenError
-        return self.fd
-
-    def setXON(self, level=True):
-        """\
-        Manually control flow - when software flow control is enabled.
-        This will send XON (true) and XOFF (false) to the other device.
-        WARNING: this function is not portable to different platforms!
-        """
-        if not self.hComPort: raise portNotOpenError
-        if enable:
-            termios.tcflow(self.fd, TERMIOS.TCION)
-        else:
-            termios.tcflow(self.fd, TERMIOS.TCIOFF)
-
-    def flowControlOut(self, enable):
-        """\
-        Manually control flow of outgoing data - when hardware or software flow
-        control is enabled.
-        WARNING: this function is not portable to different platforms!
-        """
-        if not self._isOpen: raise portNotOpenError
-        if enable:
-            termios.tcflow(self.fd, TERMIOS.TCOON)
-        else:
-            termios.tcflow(self.fd, TERMIOS.TCOOFF)
-
-
-# assemble Serial class with the platform specifc implementation and the base
-# for file-like behavior. for Python 2.6 and newer, that provide the new I/O
-# library, derrive from io.RawIOBase
-try:
-    import io
-except ImportError:
-    # classic version with our own file-like emulation
-    class Serial(PosixSerial, FileLike):
-        pass
-else:
-    # io library present
-    class Serial(PosixSerial, io.RawIOBase):
-        pass
-
-class PosixPollSerial(Serial):
-    """poll based read implementation. not all systems support poll properly.
-    however this one has better handling of errors, such as a device
-    disconnecting while it's in use (e.g. USB-serial unplugged)"""
-
-    def read(self, size=1):
-        """Read size bytes from the serial port. If a timeout is set it may
-           return less characters as requested. With no timeout it will block
-           until the requested number of bytes is read."""
-        if self.fd is None: raise portNotOpenError
-        read = bytearray()
-        poll = select.poll()
-        poll.register(self.fd, select.POLLIN|select.POLLERR|select.POLLHUP|select.POLLNVAL)
-        if size > 0:
-            while len(read) < size:
-                # print "\tread(): size",size, "have", len(read)    #debug
-                # wait until device becomes ready to read (or something fails)
-                for fd, event in poll.poll(self._timeout*1000):
-                    if event & (select.POLLERR|select.POLLHUP|select.POLLNVAL):
-                        raise SerialException('device reports error (poll)')
-                    #  we don't care if it is select.POLLIN or timeout, that's
-                    #  handled below
-                buf = os.read(self.fd, size - len(read))
-                read.extend(buf)
-                if ((self._timeout is not None and self._timeout >= 0) or 
-                    (self._interCharTimeout is not None and self._interCharTimeout > 0)) and not buf:
-                    break   # early abort on timeout
-        return bytes(read)
-
-
-if __name__ == '__main__':
-    s = Serial(0,
-                 baudrate=19200,        # baud rate
-                 bytesize=EIGHTBITS,    # number of data bits
-                 parity=PARITY_EVEN,    # enable parity checking
-                 stopbits=STOPBITS_ONE, # number of stop bits
-                 timeout=3,             # set a timeout value, None for waiting forever
-                 xonxoff=0,             # enable software flow control
-                 rtscts=0,              # enable RTS/CTS flow control
-               )
-    s.setRTS(1)
-    s.setDTR(1)
-    s.flushInput()
-    s.flushOutput()
-    s.write('hello')
-    sys.stdout.write('%r\n' % s.read(5))
-    sys.stdout.write('%s\n' % s.inWaiting())
-    del s
-
diff --git a/systrace/catapult/third_party/pyserial/serial/serialutil.py b/systrace/catapult/third_party/pyserial/serial/serialutil.py
deleted file mode 100644
index f28ece4..0000000
--- a/systrace/catapult/third_party/pyserial/serial/serialutil.py
+++ /dev/null
@@ -1,551 +0,0 @@
-#! python
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see __init__.py
-#
-# (C) 2001-2010 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-# compatibility for older Python < 2.6
-try:
-    bytes
-    bytearray
-except (NameError, AttributeError):
-    # Python older than 2.6 do not have these types. Like for Python 2.6 they
-    # should behave like str. For Python older than 3.0 we want to work with
-    # strings anyway, only later versions have a true bytes type.
-    bytes = str
-    # bytearray is a mutable type that is easily turned into an instance of
-    # bytes
-    class bytearray(list):
-        # for bytes(bytearray()) usage
-        def __str__(self): return ''.join(self)
-        def __repr__(self): return 'bytearray(%r)' % ''.join(self)
-        # append automatically converts integers to characters
-        def append(self, item):
-            if isinstance(item, str):
-                list.append(self, item)
-            else:
-                list.append(self, chr(item))
-        # +=
-        def __iadd__(self, other):
-            for byte in other:
-                self.append(byte)
-            return self
-
-        def __getslice__(self, i, j):
-            return bytearray(list.__getslice__(self, i, j))
-
-        def __getitem__(self, item):
-            if isinstance(item, slice):
-                return bytearray(list.__getitem__(self, item))
-            else:
-                return ord(list.__getitem__(self, item))
-
-        def __eq__(self, other):
-            if isinstance(other, basestring):
-                other = bytearray(other)
-            return list.__eq__(self, other)
-
-# ``memoryview`` was introduced in Python 2.7 and ``bytes(some_memoryview)``
-# isn't returning the contents (very unfortunate). Therefore we need special
-# cases and test for it. Ensure that there is a ``memoryview`` object for older
-# Python versions. This is easier than making every test dependent on its
-# existence.
-try:
-    memoryview
-except (NameError, AttributeError):
-    # implementation does not matter as we do not realy use it.
-    # it just must not inherit from something else we might care for.
-    class memoryview:
-        pass
-
-
-# all Python versions prior 3.x convert ``str([17])`` to '[17]' instead of '\x11'
-# so a simple ``bytes(sequence)`` doesn't work for all versions
-def to_bytes(seq):
-    """convert a sequence to a bytes type"""
-    if isinstance(seq, bytes):
-        return seq
-    elif isinstance(seq, bytearray):
-        return bytes(seq)
-    elif isinstance(seq, memoryview):
-        return seq.tobytes()
-    else:
-        b = bytearray()
-        for item in seq:
-            b.append(item)  # this one handles int and str for our emulation and ints for Python 3.x
-        return bytes(b)
-
-# create control bytes
-XON  = to_bytes([17])
-XOFF = to_bytes([19])
-
-CR = to_bytes([13])
-LF = to_bytes([10])
-
-
-PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE = 'N', 'E', 'O', 'M', 'S'
-STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO = (1, 1.5, 2)
-FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5, 6, 7, 8)
-
-PARITY_NAMES = {
-    PARITY_NONE:  'None',
-    PARITY_EVEN:  'Even',
-    PARITY_ODD:   'Odd',
-    PARITY_MARK:  'Mark',
-    PARITY_SPACE: 'Space',
-}
-
-
-class SerialException(IOError):
-    """Base class for serial port related exceptions."""
-
-
-class SerialTimeoutException(SerialException):
-    """Write timeouts give an exception"""
-
-
-writeTimeoutError = SerialTimeoutException('Write timeout')
-portNotOpenError = SerialException('Attempting to use a port that is not open')
-
-
-class FileLike(object):
-    """An abstract file like class.
-
-    This class implements readline and readlines based on read and
-    writelines based on write.
-    This class is used to provide the above functions for to Serial
-    port objects.
-
-    Note that when the serial port was opened with _NO_ timeout that
-    readline blocks until it sees a newline (or the specified size is
-    reached) and that readlines would never return and therefore
-    refuses to work (it raises an exception in this case)!
-    """
-
-    def __init__(self):
-        self.closed = True
-
-    def close(self):
-        self.closed = True
-
-    # so that ports are closed when objects are discarded
-    def __del__(self):
-        """Destructor.  Calls close()."""
-        # The try/except block is in case this is called at program
-        # exit time, when it's possible that globals have already been
-        # deleted, and then the close() call might fail.  Since
-        # there's nothing we can do about such failures and they annoy
-        # the end users, we suppress the traceback.
-        try:
-            self.close()
-        except:
-            pass
-
-    def writelines(self, sequence):
-        for line in sequence:
-            self.write(line)
-
-    def flush(self):
-        """flush of file like objects"""
-        pass
-
-    # iterator for e.g. "for line in Serial(0): ..." usage
-    def next(self):
-        line = self.readline()
-        if not line: raise StopIteration
-        return line
-
-    def __iter__(self):
-        return self
-
-    def readline(self, size=None, eol=LF):
-        """read a line which is terminated with end-of-line (eol) character
-        ('\n' by default) or until timeout."""
-        leneol = len(eol)
-        line = bytearray()
-        while True:
-            c = self.read(1)
-            if c:
-                line += c
-                if line[-leneol:] == eol:
-                    break
-                if size is not None and len(line) >= size:
-                    break
-            else:
-                break
-        return bytes(line)
-
-    def readlines(self, sizehint=None, eol=LF):
-        """read a list of lines, until timeout.
-        sizehint is ignored."""
-        if self.timeout is None:
-            raise ValueError("Serial port MUST have enabled timeout for this function!")
-        leneol = len(eol)
-        lines = []
-        while True:
-            line = self.readline(eol=eol)
-            if line:
-                lines.append(line)
-                if line[-leneol:] != eol:    # was the line received with a timeout?
-                    break
-            else:
-                break
-        return lines
-
-    def xreadlines(self, sizehint=None):
-        """Read lines, implemented as generator. It will raise StopIteration on
-        timeout (empty read). sizehint is ignored."""
-        while True:
-            line = self.readline()
-            if not line: break
-            yield line
-
-    # other functions of file-likes - not used by pySerial
-
-    #~ readinto(b)
-
-    def seek(self, pos, whence=0):
-        raise IOError("file is not seekable")
-
-    def tell(self):
-        raise IOError("file is not seekable")
-
-    def truncate(self, n=None):
-        raise IOError("file is not seekable")
-
-    def isatty(self):
-        return False
-
-
-class SerialBase(object):
-    """Serial port base class. Provides __init__ function and properties to
-       get/set port settings."""
-
-    # default values, may be overridden in subclasses that do not support all values
-    BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
-                 9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000,
-                 576000, 921600, 1000000, 1152000, 1500000, 2000000, 2500000,
-                 3000000, 3500000, 4000000)
-    BYTESIZES = (FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS)
-    PARITIES  = (PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE)
-    STOPBITS  = (STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO)
-
-    def __init__(self,
-                 port = None,           # number of device, numbering starts at
-                                        # zero. if everything fails, the user
-                                        # can specify a device string, note
-                                        # that this isn't portable anymore
-                                        # port will be opened if one is specified
-                 baudrate=9600,         # baud rate
-                 bytesize=EIGHTBITS,    # number of data bits
-                 parity=PARITY_NONE,    # enable parity checking
-                 stopbits=STOPBITS_ONE, # number of stop bits
-                 timeout=None,          # set a timeout value, None to wait forever
-                 xonxoff=False,         # enable software flow control
-                 rtscts=False,          # enable RTS/CTS flow control
-                 writeTimeout=None,     # set a timeout for writes
-                 dsrdtr=False,          # None: use rtscts setting, dsrdtr override if True or False
-                 interCharTimeout=None  # Inter-character timeout, None to disable
-                 ):
-        """Initialize comm port object. If a port is given, then the port will be
-           opened immediately. Otherwise a Serial port object in closed state
-           is returned."""
-
-        self._isOpen   = False
-        self._port     = None           # correct value is assigned below through properties
-        self._baudrate = None           # correct value is assigned below through properties
-        self._bytesize = None           # correct value is assigned below through properties
-        self._parity   = None           # correct value is assigned below through properties
-        self._stopbits = None           # correct value is assigned below through properties
-        self._timeout  = None           # correct value is assigned below through properties
-        self._writeTimeout = None       # correct value is assigned below through properties
-        self._xonxoff  = None           # correct value is assigned below through properties
-        self._rtscts   = None           # correct value is assigned below through properties
-        self._dsrdtr   = None           # correct value is assigned below through properties
-        self._interCharTimeout = None   # correct value is assigned below through properties
-
-        # assign values using get/set methods using the properties feature
-        self.port     = port
-        self.baudrate = baudrate
-        self.bytesize = bytesize
-        self.parity   = parity
-        self.stopbits = stopbits
-        self.timeout  = timeout
-        self.writeTimeout = writeTimeout
-        self.xonxoff  = xonxoff
-        self.rtscts   = rtscts
-        self.dsrdtr   = dsrdtr
-        self.interCharTimeout = interCharTimeout
-
-        if port is not None:
-            self.open()
-
-    def isOpen(self):
-        """Check if the port is opened."""
-        return self._isOpen
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    # TODO: these are not really needed as the is the BAUDRATES etc. attribute...
-    # maybe i remove them before the final release...
-
-    def getSupportedBaudrates(self):
-        return [(str(b), b) for b in self.BAUDRATES]
-
-    def getSupportedByteSizes(self):
-        return [(str(b), b) for b in self.BYTESIZES]
-
-    def getSupportedStopbits(self):
-        return [(str(b), b) for b in self.STOPBITS]
-
-    def getSupportedParities(self):
-        return [(PARITY_NAMES[b], b) for b in self.PARITIES]
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def setPort(self, port):
-        """Change the port. The attribute portstr is set to a string that
-           contains the name of the port."""
-
-        was_open = self._isOpen
-        if was_open: self.close()
-        if port is not None:
-            if isinstance(port, basestring):
-                self.portstr = port
-            else:
-                self.portstr = self.makeDeviceName(port)
-        else:
-            self.portstr = None
-        self._port = port
-        self.name = self.portstr
-        if was_open: self.open()
-
-    def getPort(self):
-        """Get the current port setting. The value that was passed on init or using
-           setPort() is passed back. See also the attribute portstr which contains
-           the name of the port as a string."""
-        return self._port
-
-    port = property(getPort, setPort, doc="Port setting")
-
-
-    def setBaudrate(self, baudrate):
-        """Change baud rate. It raises a ValueError if the port is open and the
-        baud rate is not possible. If the port is closed, then the value is
-        accepted and the exception is raised when the port is opened."""
-        try:
-            b = int(baudrate)
-        except TypeError:
-            raise ValueError("Not a valid baudrate: %r" % (baudrate,))
-        else:
-            if b <= 0:
-                raise ValueError("Not a valid baudrate: %r" % (baudrate,))
-            self._baudrate = b
-            if self._isOpen:  self._reconfigurePort()
-
-    def getBaudrate(self):
-        """Get the current baud rate setting."""
-        return self._baudrate
-
-    baudrate = property(getBaudrate, setBaudrate, doc="Baud rate setting")
-
-
-    def setByteSize(self, bytesize):
-        """Change byte size."""
-        if bytesize not in self.BYTESIZES: raise ValueError("Not a valid byte size: %r" % (bytesize,))
-        self._bytesize = bytesize
-        if self._isOpen: self._reconfigurePort()
-
-    def getByteSize(self):
-        """Get the current byte size setting."""
-        return self._bytesize
-
-    bytesize = property(getByteSize, setByteSize, doc="Byte size setting")
-
-
-    def setParity(self, parity):
-        """Change parity setting."""
-        if parity not in self.PARITIES: raise ValueError("Not a valid parity: %r" % (parity,))
-        self._parity = parity
-        if self._isOpen: self._reconfigurePort()
-
-    def getParity(self):
-        """Get the current parity setting."""
-        return self._parity
-
-    parity = property(getParity, setParity, doc="Parity setting")
-
-
-    def setStopbits(self, stopbits):
-        """Change stop bits size."""
-        if stopbits not in self.STOPBITS: raise ValueError("Not a valid stop bit size: %r" % (stopbits,))
-        self._stopbits = stopbits
-        if self._isOpen: self._reconfigurePort()
-
-    def getStopbits(self):
-        """Get the current stop bits setting."""
-        return self._stopbits
-
-    stopbits = property(getStopbits, setStopbits, doc="Stop bits setting")
-
-
-    def setTimeout(self, timeout):
-        """Change timeout setting."""
-        if timeout is not None:
-            try:
-                timeout + 1     # test if it's a number, will throw a TypeError if not...
-            except TypeError:
-                raise ValueError("Not a valid timeout: %r" % (timeout,))
-            if timeout < 0: raise ValueError("Not a valid timeout: %r" % (timeout,))
-        self._timeout = timeout
-        if self._isOpen: self._reconfigurePort()
-
-    def getTimeout(self):
-        """Get the current timeout setting."""
-        return self._timeout
-
-    timeout = property(getTimeout, setTimeout, doc="Timeout setting for read()")
-
-
-    def setWriteTimeout(self, timeout):
-        """Change timeout setting."""
-        if timeout is not None:
-            if timeout < 0: raise ValueError("Not a valid timeout: %r" % (timeout,))
-            try:
-                timeout + 1     #test if it's a number, will throw a TypeError if not...
-            except TypeError:
-                raise ValueError("Not a valid timeout: %r" % timeout)
-
-        self._writeTimeout = timeout
-        if self._isOpen: self._reconfigurePort()
-
-    def getWriteTimeout(self):
-        """Get the current timeout setting."""
-        return self._writeTimeout
-
-    writeTimeout = property(getWriteTimeout, setWriteTimeout, doc="Timeout setting for write()")
-
-
-    def setXonXoff(self, xonxoff):
-        """Change XON/XOFF setting."""
-        self._xonxoff = xonxoff
-        if self._isOpen: self._reconfigurePort()
-
-    def getXonXoff(self):
-        """Get the current XON/XOFF setting."""
-        return self._xonxoff
-
-    xonxoff = property(getXonXoff, setXonXoff, doc="XON/XOFF setting")
-
-    def setRtsCts(self, rtscts):
-        """Change RTS/CTS flow control setting."""
-        self._rtscts = rtscts
-        if self._isOpen: self._reconfigurePort()
-
-    def getRtsCts(self):
-        """Get the current RTS/CTS flow control setting."""
-        return self._rtscts
-
-    rtscts = property(getRtsCts, setRtsCts, doc="RTS/CTS flow control setting")
-
-    def setDsrDtr(self, dsrdtr=None):
-        """Change DsrDtr flow control setting."""
-        if dsrdtr is None:
-            # if not set, keep backwards compatibility and follow rtscts setting
-            self._dsrdtr = self._rtscts
-        else:
-            # if defined independently, follow its value
-            self._dsrdtr = dsrdtr
-        if self._isOpen: self._reconfigurePort()
-
-    def getDsrDtr(self):
-        """Get the current DSR/DTR flow control setting."""
-        return self._dsrdtr
-
-    dsrdtr = property(getDsrDtr, setDsrDtr, "DSR/DTR flow control setting")
-
-    def setInterCharTimeout(self, interCharTimeout):
-        """Change inter-character timeout setting."""
-        if interCharTimeout is not None:
-            if interCharTimeout < 0: raise ValueError("Not a valid timeout: %r" % interCharTimeout)
-            try:
-                interCharTimeout + 1     # test if it's a number, will throw a TypeError if not...
-            except TypeError:
-                raise ValueError("Not a valid timeout: %r" % interCharTimeout)
-
-        self._interCharTimeout = interCharTimeout
-        if self._isOpen: self._reconfigurePort()
-
-    def getInterCharTimeout(self):
-        """Get the current inter-character timeout setting."""
-        return self._interCharTimeout
-
-    interCharTimeout = property(getInterCharTimeout, setInterCharTimeout, doc="Inter-character timeout setting for read()")
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    _SETTINGS = ('baudrate', 'bytesize', 'parity', 'stopbits', 'xonxoff',
-            'dsrdtr', 'rtscts', 'timeout', 'writeTimeout', 'interCharTimeout')
-
-    def getSettingsDict(self):
-        """Get current port settings as a dictionary. For use with
-        applySettingsDict"""
-        return dict([(key, getattr(self, '_'+key)) for key in self._SETTINGS])
-
-    def applySettingsDict(self, d):
-        """apply stored settings from a dictionary returned from
-        getSettingsDict. it's allowed to delete keys from the dictionary. these
-        values will simply left unchanged."""
-        for key in self._SETTINGS:
-            if d[key] != getattr(self, '_'+key):   # check against internal "_" value
-                setattr(self, key, d[key])          # set non "_" value to use properties write function
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def __repr__(self):
-        """String representation of the current port settings and its state."""
-        return "%s<id=0x%x, open=%s>(port=%r, baudrate=%r, bytesize=%r, parity=%r, stopbits=%r, timeout=%r, xonxoff=%r, rtscts=%r, dsrdtr=%r)" % (
-            self.__class__.__name__,
-            id(self),
-            self._isOpen,
-            self.portstr,
-            self.baudrate,
-            self.bytesize,
-            self.parity,
-            self.stopbits,
-            self.timeout,
-            self.xonxoff,
-            self.rtscts,
-            self.dsrdtr,
-        )
-
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-    # compatibility with io library
-
-    def readable(self): return True
-    def writable(self): return True
-    def seekable(self): return False
-    def readinto(self, b):
-        data = self.read(len(b))
-        n = len(data)
-        try:
-            b[:n] = data
-        except TypeError, err:
-            import array
-            if not isinstance(b, array.array):
-                raise err
-            b[:n] = array.array('b', data)
-        return n
-
-
-if __name__ == '__main__':
-    import sys
-    s = SerialBase()
-    sys.stdout.write('port name:  %s\n' % s.portstr)
-    sys.stdout.write('baud rates: %s\n' % s.getSupportedBaudrates())
-    sys.stdout.write('byte sizes: %s\n' % s.getSupportedByteSizes())
-    sys.stdout.write('parities:   %s\n' % s.getSupportedParities())
-    sys.stdout.write('stop bits:  %s\n' % s.getSupportedStopbits())
-    sys.stdout.write('%s\n' % s)
diff --git a/systrace/catapult/third_party/pyserial/serial/serialwin32.py b/systrace/catapult/third_party/pyserial/serial/serialwin32.py
deleted file mode 100644
index dfdd953..0000000
--- a/systrace/catapult/third_party/pyserial/serial/serialwin32.py
+++ /dev/null
@@ -1,461 +0,0 @@
-#! python
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# serial driver for win32
-# see __init__.py
-#
-# (C) 2001-2011 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-#
-# Initial patch to use ctypes by Giovanni Bajo <rasky@develer.com>
-
-import ctypes
-from serial import win32
-
-from serial.serialutil import *
-
-
-def device(portnum):
-    """Turn a port number into a device name"""
-    return 'COM%d' % (portnum+1) # numbers are transformed to a string
-
-
-class Win32Serial(SerialBase):
-    """Serial port implementation for Win32 based on ctypes."""
-
-    BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
-                 9600, 19200, 38400, 57600, 115200)
-
-    def __init__(self, *args, **kwargs):
-        self.hComPort = None
-        self._overlappedRead = None
-        self._overlappedWrite = None
-        self._rtsToggle = False
-
-        self._rtsState = win32.RTS_CONTROL_ENABLE
-        self._dtrState = win32.DTR_CONTROL_ENABLE
-
-
-        SerialBase.__init__(self, *args, **kwargs)
-
-    def open(self):
-        """Open port with current settings. This may throw a SerialException
-           if the port cannot be opened."""
-        if self._port is None:
-            raise SerialException("Port must be configured before it can be used.")
-        if self._isOpen:
-            raise SerialException("Port is already open.")
-        # the "\\.\COMx" format is required for devices other than COM1-COM8
-        # not all versions of windows seem to support this properly
-        # so that the first few ports are used with the DOS device name
-        port = self.portstr
-        try:
-            if port.upper().startswith('COM') and int(port[3:]) > 8:
-                port = '\\\\.\\' + port
-        except ValueError:
-            # for like COMnotanumber
-            pass
-        self.hComPort = win32.CreateFile(port,
-               win32.GENERIC_READ | win32.GENERIC_WRITE,
-               0, # exclusive access
-               None, # no security
-               win32.OPEN_EXISTING,
-               win32.FILE_ATTRIBUTE_NORMAL | win32.FILE_FLAG_OVERLAPPED,
-               0)
-        if self.hComPort == win32.INVALID_HANDLE_VALUE:
-            self.hComPort = None    # 'cause __del__ is called anyway
-            raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.WinError()))
-
-        try:
-            self._overlappedRead = win32.OVERLAPPED()
-            self._overlappedRead.hEvent = win32.CreateEvent(None, 1, 0, None)
-            self._overlappedWrite = win32.OVERLAPPED()
-            #~ self._overlappedWrite.hEvent = win32.CreateEvent(None, 1, 0, None)
-            self._overlappedWrite.hEvent = win32.CreateEvent(None, 0, 0, None)
-
-            # Setup a 4k buffer
-            win32.SetupComm(self.hComPort, 4096, 4096)
-
-            # Save original timeout values:
-            self._orgTimeouts = win32.COMMTIMEOUTS()
-            win32.GetCommTimeouts(self.hComPort, ctypes.byref(self._orgTimeouts))
-
-            self._reconfigurePort()
-
-            # Clear buffers:
-            # Remove anything that was there
-            win32.PurgeComm(self.hComPort,
-                    win32.PURGE_TXCLEAR | win32.PURGE_TXABORT |
-                    win32.PURGE_RXCLEAR | win32.PURGE_RXABORT)
-        except:
-            try:
-                self._close()
-            except:
-                # ignore any exception when closing the port
-                # also to keep original exception that happened when setting up
-                pass
-            self.hComPort = None
-            raise
-        else:
-            self._isOpen = True
-
-
-    def _reconfigurePort(self):
-        """Set communication parameters on opened port."""
-        if not self.hComPort:
-            raise SerialException("Can only operate on a valid port handle")
-
-        # Set Windows timeout values
-        # timeouts is a tuple with the following items:
-        # (ReadIntervalTimeout,ReadTotalTimeoutMultiplier,
-        #  ReadTotalTimeoutConstant,WriteTotalTimeoutMultiplier,
-        #  WriteTotalTimeoutConstant)
-        if self._timeout is None:
-            timeouts = (0, 0, 0, 0, 0)
-        elif self._timeout == 0:
-            timeouts = (win32.MAXDWORD, 0, 0, 0, 0)
-        else:
-            timeouts = (0, 0, int(self._timeout*1000), 0, 0)
-        if self._timeout != 0 and self._interCharTimeout is not None:
-            timeouts = (int(self._interCharTimeout * 1000),) + timeouts[1:]
-
-        if self._writeTimeout is None:
-            pass
-        elif self._writeTimeout == 0:
-            timeouts = timeouts[:-2] + (0, win32.MAXDWORD)
-        else:
-            timeouts = timeouts[:-2] + (0, int(self._writeTimeout*1000))
-        win32.SetCommTimeouts(self.hComPort, ctypes.byref(win32.COMMTIMEOUTS(*timeouts)))
-
-        win32.SetCommMask(self.hComPort, win32.EV_ERR)
-
-        # Setup the connection info.
-        # Get state and modify it:
-        comDCB = win32.DCB()
-        win32.GetCommState(self.hComPort, ctypes.byref(comDCB))
-        comDCB.BaudRate = self._baudrate
-
-        if self._bytesize == FIVEBITS:
-            comDCB.ByteSize     = 5
-        elif self._bytesize == SIXBITS:
-            comDCB.ByteSize     = 6
-        elif self._bytesize == SEVENBITS:
-            comDCB.ByteSize     = 7
-        elif self._bytesize == EIGHTBITS:
-            comDCB.ByteSize     = 8
-        else:
-            raise ValueError("Unsupported number of data bits: %r" % self._bytesize)
-
-        if self._parity == PARITY_NONE:
-            comDCB.Parity       = win32.NOPARITY
-            comDCB.fParity      = 0 # Disable Parity Check
-        elif self._parity == PARITY_EVEN:
-            comDCB.Parity       = win32.EVENPARITY
-            comDCB.fParity      = 1 # Enable Parity Check
-        elif self._parity == PARITY_ODD:
-            comDCB.Parity       = win32.ODDPARITY
-            comDCB.fParity      = 1 # Enable Parity Check
-        elif self._parity == PARITY_MARK:
-            comDCB.Parity       = win32.MARKPARITY
-            comDCB.fParity      = 1 # Enable Parity Check
-        elif self._parity == PARITY_SPACE:
-            comDCB.Parity       = win32.SPACEPARITY
-            comDCB.fParity      = 1 # Enable Parity Check
-        else:
-            raise ValueError("Unsupported parity mode: %r" % self._parity)
-
-        if self._stopbits == STOPBITS_ONE:
-            comDCB.StopBits     = win32.ONESTOPBIT
-        elif self._stopbits == STOPBITS_ONE_POINT_FIVE:
-            comDCB.StopBits     = win32.ONE5STOPBITS
-        elif self._stopbits == STOPBITS_TWO:
-            comDCB.StopBits     = win32.TWOSTOPBITS
-        else:
-            raise ValueError("Unsupported number of stop bits: %r" % self._stopbits)
-
-        comDCB.fBinary          = 1 # Enable Binary Transmission
-        # Char. w/ Parity-Err are replaced with 0xff (if fErrorChar is set to TRUE)
-        if self._rtscts:
-            comDCB.fRtsControl  = win32.RTS_CONTROL_HANDSHAKE
-        elif self._rtsToggle:
-            comDCB.fRtsControl  = win32.RTS_CONTROL_TOGGLE
-        else:
-            comDCB.fRtsControl  = self._rtsState
-        if self._dsrdtr:
-            comDCB.fDtrControl  = win32.DTR_CONTROL_HANDSHAKE
-        else:
-            comDCB.fDtrControl  = self._dtrState
-
-        if self._rtsToggle:
-            comDCB.fOutxCtsFlow     = 0
-        else:
-            comDCB.fOutxCtsFlow     = self._rtscts
-        comDCB.fOutxDsrFlow     = self._dsrdtr
-        comDCB.fOutX            = self._xonxoff
-        comDCB.fInX             = self._xonxoff
-        comDCB.fNull            = 0
-        comDCB.fErrorChar       = 0
-        comDCB.fAbortOnError    = 0
-        comDCB.XonChar          = XON
-        comDCB.XoffChar         = XOFF
-
-        if not win32.SetCommState(self.hComPort, ctypes.byref(comDCB)):
-            raise ValueError("Cannot configure port, some setting was wrong. Original message: %r" % ctypes.WinError())
-
-    #~ def __del__(self):
-        #~ self.close()
-
-
-    def _close(self):
-        """internal close port helper"""
-        if self.hComPort:
-            # Restore original timeout values:
-            win32.SetCommTimeouts(self.hComPort, self._orgTimeouts)
-            # Close COM-Port:
-            win32.CloseHandle(self.hComPort)
-            if self._overlappedRead is not None:
-                win32.CloseHandle(self._overlappedRead.hEvent)
-                self._overlappedRead = None
-            if self._overlappedWrite is not None:
-                win32.CloseHandle(self._overlappedWrite.hEvent)
-                self._overlappedWrite = None
-            self.hComPort = None
-
-    def close(self):
-        """Close port"""
-        if self._isOpen:
-            self._close()
-            self._isOpen = False
-
-    def makeDeviceName(self, port):
-        return device(port)
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def inWaiting(self):
-        """Return the number of characters currently in the input buffer."""
-        flags = win32.DWORD()
-        comstat = win32.COMSTAT()
-        if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)):
-            raise SerialException('call to ClearCommError failed')
-        return comstat.cbInQue
-
-    def read(self, size=1):
-        """Read size bytes from the serial port. If a timeout is set it may
-           return less characters as requested. With no timeout it will block
-           until the requested number of bytes is read."""
-        if not self.hComPort: raise portNotOpenError
-        if size > 0:
-            win32.ResetEvent(self._overlappedRead.hEvent)
-            flags = win32.DWORD()
-            comstat = win32.COMSTAT()
-            if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)):
-                raise SerialException('call to ClearCommError failed')
-            if self.timeout == 0:
-                n = min(comstat.cbInQue, size)
-                if n > 0:
-                    buf = ctypes.create_string_buffer(n)
-                    rc = win32.DWORD()
-                    err = win32.ReadFile(self.hComPort, buf, n, ctypes.byref(rc), ctypes.byref(self._overlappedRead))
-                    if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
-                        raise SerialException("ReadFile failed (%r)" % ctypes.WinError())
-                    err = win32.WaitForSingleObject(self._overlappedRead.hEvent, win32.INFINITE)
-                    read = buf.raw[:rc.value]
-                else:
-                    read = bytes()
-            else:
-                buf = ctypes.create_string_buffer(size)
-                rc = win32.DWORD()
-                err = win32.ReadFile(self.hComPort, buf, size, ctypes.byref(rc), ctypes.byref(self._overlappedRead))
-                if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
-                    raise SerialException("ReadFile failed (%r)" % ctypes.WinError())
-                err = win32.GetOverlappedResult(self.hComPort, ctypes.byref(self._overlappedRead), ctypes.byref(rc), True)
-                read = buf.raw[:rc.value]
-        else:
-            read = bytes()
-        return bytes(read)
-
-    def write(self, data):
-        """Output the given string over the serial port."""
-        if not self.hComPort: raise portNotOpenError
-        #~ if not isinstance(data, (bytes, bytearray)):
-            #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
-        # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview
-        data = to_bytes(data)
-        if data:
-            #~ win32event.ResetEvent(self._overlappedWrite.hEvent)
-            n = win32.DWORD()
-            err = win32.WriteFile(self.hComPort, data, len(data), ctypes.byref(n), self._overlappedWrite)
-            if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
-                raise SerialException("WriteFile failed (%r)" % ctypes.WinError())
-            if self._writeTimeout != 0: # if blocking (None) or w/ write timeout (>0)
-                # Wait for the write to complete.
-                #~ win32.WaitForSingleObject(self._overlappedWrite.hEvent, win32.INFINITE)
-                err = win32.GetOverlappedResult(self.hComPort, self._overlappedWrite, ctypes.byref(n), True)
-                if n.value != len(data):
-                    raise writeTimeoutError
-            return n.value
-        else:
-            return 0
-
-    def flush(self):
-        """Flush of file like objects. In this case, wait until all data
-           is written."""
-        while self.outWaiting():
-            time.sleep(0.05)
-        # XXX could also use WaitCommEvent with mask EV_TXEMPTY, but it would
-        # require overlapped IO and its also only possible to set a single mask
-        # on the port---
-
-    def flushInput(self):
-        """Clear input buffer, discarding all that is in the buffer."""
-        if not self.hComPort: raise portNotOpenError
-        win32.PurgeComm(self.hComPort, win32.PURGE_RXCLEAR | win32.PURGE_RXABORT)
-
-    def flushOutput(self):
-        """Clear output buffer, aborting the current output and
-        discarding all that is in the buffer."""
-        if not self.hComPort: raise portNotOpenError
-        win32.PurgeComm(self.hComPort, win32.PURGE_TXCLEAR | win32.PURGE_TXABORT)
-
-    def sendBreak(self, duration=0.25):
-        """Send break condition. Timed, returns to idle state after given duration."""
-        if not self.hComPort: raise portNotOpenError
-        import time
-        win32.SetCommBreak(self.hComPort)
-        time.sleep(duration)
-        win32.ClearCommBreak(self.hComPort)
-
-    def setBreak(self, level=1):
-        """Set break: Controls TXD. When active, to transmitting is possible."""
-        if not self.hComPort: raise portNotOpenError
-        if level:
-            win32.SetCommBreak(self.hComPort)
-        else:
-            win32.ClearCommBreak(self.hComPort)
-
-    def setRTS(self, level=1):
-        """Set terminal status line: Request To Send"""
-        # remember level for reconfigure
-        if level:
-            self._rtsState = win32.RTS_CONTROL_ENABLE
-        else:
-            self._rtsState = win32.RTS_CONTROL_DISABLE
-        # also apply now if port is open
-        if self.hComPort:
-            if level:
-                win32.EscapeCommFunction(self.hComPort, win32.SETRTS)
-            else:
-                win32.EscapeCommFunction(self.hComPort, win32.CLRRTS)
-
-    def setDTR(self, level=1):
-        """Set terminal status line: Data Terminal Ready"""
-        # remember level for reconfigure
-        if level:
-            self._dtrState = win32.DTR_CONTROL_ENABLE
-        else:
-            self._dtrState = win32.DTR_CONTROL_DISABLE
-        # also apply now if port is open
-        if self.hComPort:
-            if level:
-                win32.EscapeCommFunction(self.hComPort, win32.SETDTR)
-            else:
-                win32.EscapeCommFunction(self.hComPort, win32.CLRDTR)
-
-    def _GetCommModemStatus(self):
-        stat = win32.DWORD()
-        win32.GetCommModemStatus(self.hComPort, ctypes.byref(stat))
-        return stat.value
-
-    def getCTS(self):
-        """Read terminal status line: Clear To Send"""
-        if not self.hComPort: raise portNotOpenError
-        return win32.MS_CTS_ON & self._GetCommModemStatus() != 0
-
-    def getDSR(self):
-        """Read terminal status line: Data Set Ready"""
-        if not self.hComPort: raise portNotOpenError
-        return win32.MS_DSR_ON & self._GetCommModemStatus() != 0
-
-    def getRI(self):
-        """Read terminal status line: Ring Indicator"""
-        if not self.hComPort: raise portNotOpenError
-        return win32.MS_RING_ON & self._GetCommModemStatus() != 0
-
-    def getCD(self):
-        """Read terminal status line: Carrier Detect"""
-        if not self.hComPort: raise portNotOpenError
-        return win32.MS_RLSD_ON & self._GetCommModemStatus() != 0
-
-    # - - platform specific - - - -
-
-    def setBufferSize(self, rx_size=4096, tx_size=None):
-        """\
-        Recommend a buffer size to the driver (device driver can ignore this
-        vlaue). Must be called before the port is opended.
-        """
-        if tx_size is None: tx_size = rx_size
-        win32.SetupComm(self.hComPort, rx_size, tx_size)
-
-    def setXON(self, level=True):
-        """\
-        Manually control flow - when software flow control is enabled.
-        This will send XON (true) and XOFF (false) to the other device.
-        WARNING: this function is not portable to different platforms!
-        """
-        if not self.hComPort: raise portNotOpenError
-        if level:
-            win32.EscapeCommFunction(self.hComPort, win32.SETXON)
-        else:
-            win32.EscapeCommFunction(self.hComPort, win32.SETXOFF)
-
-    def outWaiting(self):
-        """return how many characters the in the outgoing buffer"""
-        flags = win32.DWORD()
-        comstat = win32.COMSTAT()
-        if not win32.ClearCommError(self.hComPort, ctypes.byref(flags), ctypes.byref(comstat)):
-            raise SerialException('call to ClearCommError failed')
-        return comstat.cbOutQue
-
-    # functions useful for RS-485 adapters
-    def setRtsToggle(self, rtsToggle):
-        """Change RTS toggle control setting."""
-        self._rtsToggle = rtsToggle
-        if self._isOpen: self._reconfigurePort()
-
-    def getRtsToggle(self):
-        """Get the current RTS toggle control setting."""
-        return self._rtsToggle
-
-    rtsToggle = property(getRtsToggle, setRtsToggle, doc="RTS toggle control setting")
-
-
-# assemble Serial class with the platform specific implementation and the base
-# for file-like behavior. for Python 2.6 and newer, that provide the new I/O
-# library, derive from io.RawIOBase
-try:
-    import io
-except ImportError:
-    # classic version with our own file-like emulation
-    class Serial(Win32Serial, FileLike):
-        pass
-else:
-    # io library present
-    class Serial(Win32Serial, io.RawIOBase):
-        pass
-
-
-# Nur Testfunktion!!
-if __name__ == '__main__':
-    s = Serial(0)
-    sys.stdout.write("%s\n" % s)
-
-    s = Serial()
-    sys.stdout.write("%s\n" % s)
-
-    s.baudrate = 19200
-    s.databits = 7
-    s.close()
-    s.port = 0
-    s.open()
-    sys.stdout.write("%s\n" % s)
-
diff --git a/systrace/catapult/third_party/pyserial/serial/sermsdos.py b/systrace/catapult/third_party/pyserial/serial/sermsdos.py
deleted file mode 100644
index 09a0017..0000000
--- a/systrace/catapult/third_party/pyserial/serial/sermsdos.py
+++ /dev/null
@@ -1,200 +0,0 @@
-# sermsdos.py
-#
-# History:
-#
-#   3rd September 2002                      Dave Haynes
-#   1. First defined
-#
-# Although this code should run under the latest versions of
-# Python, on DOS-based platforms such as Windows 95 and 98,
-# it has been specifically written to be compatible with
-# PyDOS, available at:
-# http://www.python.org/ftp/python/wpy/dos.html
-#
-# PyDOS is a stripped-down version of Python 1.5.2 for
-# DOS machines. Therefore, in making changes to this file,
-# please respect Python 1.5.2 syntax. In addition, please
-# limit the width of this file to 60 characters.
-#
-# Note also that the modules in PyDOS contain fewer members
-# than other versions, so we are restricted to using the
-# following:
-#
-# In module os:
-# -------------
-# environ, chdir, getcwd, getpid, umask, fdopen, close,
-# dup, dup2, fstat, lseek, open, read, write, O_RDONLY,
-# O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_EXCL, O_TRUNC,
-# access, F_OK, R_OK, W_OK, X_OK, chmod, listdir, mkdir,
-# remove, rename, renames, rmdir, stat, unlink, utime,
-# execl, execle, execlp, execlpe, execvp, execvpe, _exit,
-# system.
-#
-# In module os.path:
-# ------------------
-# curdir, pardir, sep, altsep, pathsep, defpath, linesep.
-#
-
-import os
-import sys
-import string
-import serial.serialutil
-
-BAUD_RATES = {
-                110: "11",
-                150: "15",
-                300: "30",
-                600: "60",
-                1200: "12",
-                2400: "24",
-                4800: "48",
-                9600: "96",
-                19200: "19"}
-
-(PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK,
-PARITY_SPACE) = (0, 1, 2, 3, 4)
-(STOPBITS_ONE, STOPBITS_ONEANDAHALF,
-STOPBITS_TWO) = (1, 1.5, 2)
-FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS = (5, 6, 7, 8)
-(RETURN_ERROR, RETURN_BUSY, RETURN_RETRY, RETURN_READY,
-RETURN_NONE) = ('E', 'B', 'P', 'R', 'N')
-portNotOpenError = ValueError('port not open')
-
-def device(portnum):
-    return 'COM%d' % (portnum+1)
-
-class Serial(serialutil.FileLike):
-    """
-       port: number of device; numbering starts at
-            zero. if everything fails, the user can
-            specify a device string, note that this
-            isn't portable any more
-       baudrate: baud rate
-       bytesize: number of databits
-       parity: enable parity checking
-       stopbits: number of stopbits
-       timeout: set a timeout (None for waiting forever)
-       xonxoff: enable software flow control
-       rtscts: enable RTS/CTS flow control
-       retry: DOS retry mode
-    """
-    def __init__(self,
-                 port,
-                 baudrate = 9600,
-                 bytesize = EIGHTBITS,
-                 parity = PARITY_NONE,
-                 stopbits = STOPBITS_ONE,
-                 timeout = None,
-                 xonxoff = 0,
-                 rtscts = 0,
-                 retry = RETURN_RETRY
-                 ):
-
-        if type(port) == type(''):
-        # strings are taken directly
-            self.portstr = port
-        else:
-        # numbers are transformed to a string
-            self.portstr = device(port+1)
-
-        self.baud = BAUD_RATES[baudrate]
-        self.bytesize = str(bytesize)
-
-        if parity == PARITY_NONE:
-            self.parity = 'N'
-        elif parity == PARITY_EVEN:
-            self.parity = 'E'
-        elif parity == PARITY_ODD:
-            self.parity = 'O'
-        elif parity == PARITY_MARK:
-            self.parity = 'M'
-        elif parity == PARITY_SPACE:
-            self.parity = 'S'
-
-        self.stop = str(stopbits)
-        self.retry = retry
-        self.filename = "sermsdos.tmp"
-
-        self._config(self.portstr, self.baud, self.parity,
-        self.bytesize, self.stop, self.retry, self.filename)
-
-    def __del__(self):
-        self.close()
-
-    def close(self):
-        pass
-
-    def _config(self, port, baud, parity, data, stop, retry,
-        filename):
-        comString = string.join(("MODE ", port, ":"
-        , " BAUD= ", baud, " PARITY= ", parity
-        , " DATA= ", data, " STOP= ", stop, " RETRY= ",
-        retry, " > ", filename ), '')
-        os.system(comString)
-
-    def setBaudrate(self, baudrate):
-        self._config(self.portstr, BAUD_RATES[baudrate],
-        self.parity, self.bytesize, self.stop, self.retry,
-        self.filename)
-
-    def inWaiting(self):
-        """returns the number of bytes waiting to be read"""
-        raise NotImplementedError
-
-    def read(self, num = 1):
-        """Read num bytes from serial port"""
-        handle = os.open(self.portstr,
-        os.O_RDONLY | os.O_BINARY)
-        rv = os.read(handle, num)
-        os.close(handle)
-        return rv
-
-    def write(self, s):
-        """Write string to serial port"""
-        handle = os.open(self.portstr,
-        os.O_WRONLY | os.O_BINARY)
-        rv = os.write(handle, s)
-        os.close(handle)
-        return rv
-
-    def flushInput(self):
-        raise NotImplementedError
-
-    def flushOutput(self):
-        raise NotImplementedError
-
-    def sendBreak(self):
-        raise NotImplementedError
-
-    def setRTS(self,level=1):
-        """Set terminal status line"""
-        raise NotImplementedError
-
-    def setDTR(self,level=1):
-        """Set terminal status line"""
-        raise NotImplementedError
-
-    def getCTS(self):
-        """Eead terminal status line"""
-        raise NotImplementedError
-
-    def getDSR(self):
-        """Eead terminal status line"""
-        raise NotImplementedError
-
-    def getRI(self):
-        """Eead terminal status line"""
-        raise NotImplementedError
-
-    def getCD(self):
-        """Eead terminal status line"""
-        raise NotImplementedError
-
-    def __repr__(self):
-        return string.join(( "<Serial>: ", self.portstr
-        , self.baud, self.parity, self.bytesize, self.stop,
-        self.retry , self.filename), ' ')
-
-if __name__ == '__main__':
-    s = Serial(0)
-    sys.stdio.write('%s %s\n' % (__name__, s))
diff --git a/systrace/catapult/third_party/pyserial/serial/tools/__init__.py b/systrace/catapult/third_party/pyserial/serial/tools/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/systrace/catapult/third_party/pyserial/serial/tools/__init__.py
+++ /dev/null
diff --git a/systrace/catapult/third_party/pyserial/serial/tools/list_ports.py b/systrace/catapult/third_party/pyserial/serial/tools/list_ports.py
deleted file mode 100755
index d373a55..0000000
--- a/systrace/catapult/third_party/pyserial/serial/tools/list_ports.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-
-# portable serial port access with python
-# this is a wrapper module for different platform implementations of the
-# port enumeration feature
-#
-# (C) 2011-2013 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-"""\
-This module will provide a function called comports that returns an
-iterable (generator or list) that will enumerate available com ports. Note that
-on some systems non-existent ports may be listed.
-
-Additionally a grep function is supplied that can be used to search for ports
-based on their descriptions or hardware ID.
-"""
-
-import sys, os, re
-
-# chose an implementation, depending on os
-#~ if sys.platform == 'cli':
-#~ else:
-import os
-# chose an implementation, depending on os
-if os.name == 'nt': #sys.platform == 'win32':
-    from serial.tools.list_ports_windows import *
-elif os.name == 'posix':
-    from serial.tools.list_ports_posix import *
-#~ elif os.name == 'java':
-else:
-    raise ImportError("Sorry: no implementation for your platform ('%s') available" % (os.name,))
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-def grep(regexp):
-    """\
-    Search for ports using a regular expression. Port name, description and
-    hardware ID are searched. The function returns an iterable that returns the
-    same tuples as comport() would do.
-    """
-    r = re.compile(regexp, re.I)
-    for port, desc, hwid in comports():
-        if r.search(port) or r.search(desc) or r.search(hwid):
-            yield port, desc, hwid
-
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-def main():
-    import optparse
-
-    parser = optparse.OptionParser(
-        usage = "%prog [options] [<regexp>]",
-        description = "Miniterm - A simple terminal program for the serial port."
-    )
-
-    parser.add_option("--debug",
-            help="print debug messages and tracebacks (development mode)",
-            dest="debug",
-            default=False,
-            action='store_true')
-
-    parser.add_option("-v", "--verbose",
-            help="show more messages (can be given multiple times)",
-            dest="verbose",
-            default=1,
-            action='count')
-
-    parser.add_option("-q", "--quiet",
-            help="suppress all messages",
-            dest="verbose",
-            action='store_const',
-            const=0)
-
-    (options, args) = parser.parse_args()
-
-
-    hits = 0
-    # get iteraror w/ or w/o filter
-    if args:
-        if len(args) > 1:
-            parser.error('more than one regexp not supported')
-        print "Filtered list with regexp: %r" % (args[0],)
-        iterator = sorted(grep(args[0]))
-    else:
-        iterator = sorted(comports())
-    # list them
-    for port, desc, hwid in iterator:
-        print("%-20s" % (port,))
-        if options.verbose > 1:
-            print("    desc: %s" % (desc,))
-            print("    hwid: %s" % (hwid,))
-        hits += 1
-    if options.verbose:
-        if hits:
-            print("%d ports found" % (hits,))
-        else:
-            print("no ports found")
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# test
-if __name__ == '__main__':
-    main()
diff --git a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_linux.py b/systrace/catapult/third_party/pyserial/serial/tools/list_ports_linux.py
deleted file mode 100755
index ecfd158..0000000
--- a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_linux.py
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/usr/bin/env python
-
-# portable serial port access with python
-#
-# This is a module that gathers a list of serial ports including details on
-# GNU/Linux systems
-#
-# (C) 2011-2013 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-import glob
-import sys
-import os
-import re
-
-try:
-    import subprocess
-except ImportError:
-    def popen(argv):
-        try:
-            si, so =  os.popen4(' '.join(argv))
-            return so.read().strip()
-        except:
-            raise IOError('lsusb failed')
-else:
-    def popen(argv):
-        try:
-            return subprocess.check_output(argv, stderr=subprocess.STDOUT).strip()
-        except:
-            raise IOError('lsusb failed')
-
-
-# The comports function is expected to return an iterable that yields tuples of
-# 3 strings: port name, human readable description and a hardware ID.
-#
-# as currently no method is known to get the second two strings easily, they
-# are currently just identical to the port name.
-
-# try to detect the OS so that a device can be selected...
-plat = sys.platform.lower()
-
-def read_line(filename):
-    """help function to read a single line from a file. returns none"""
-    try:
-        f = open(filename)
-        line = f.readline().strip()
-        f.close()
-        return line
-    except IOError:
-        return None
-
-def re_group(regexp, text):
-    """search for regexp in text, return 1st group on match"""
-    if sys.version < '3':
-        m = re.search(regexp, text)
-    else:
-        # text is bytes-like
-        m = re.search(regexp, text.decode('ascii', 'replace'))
-    if m: return m.group(1)
-
-
-# try to extract descriptions from sysfs. this was done by experimenting,
-# no guarantee that it works for all devices or in the future...
-
-def usb_sysfs_hw_string(sysfs_path):
-    """given a path to a usb device in sysfs, return a string describing it"""
-    bus, dev = os.path.basename(os.path.realpath(sysfs_path)).split('-')
-    snr = read_line(sysfs_path+'/serial')
-    if snr:
-        snr_txt = ' SNR=%s' % (snr,)
-    else:
-        snr_txt = ''
-    return 'USB VID:PID=%s:%s%s' % (
-            read_line(sysfs_path+'/idVendor'),
-            read_line(sysfs_path+'/idProduct'),
-            snr_txt
-            )
-
-def usb_lsusb_string(sysfs_path):
-    base = os.path.basename(os.path.realpath(sysfs_path))
-    bus = base.split('-')[0]
-    try:
-        dev = int(read_line(os.path.join(sysfs_path, 'devnum')))
-        desc = popen(['lsusb', '-v', '-s', '%s:%s' % (bus, dev)])
-        # descriptions from device
-        iManufacturer = re_group('iManufacturer\s+\w+ (.+)', desc)
-        iProduct = re_group('iProduct\s+\w+ (.+)', desc)
-        iSerial = re_group('iSerial\s+\w+ (.+)', desc) or ''
-        # descriptions from kernel
-        idVendor = re_group('idVendor\s+0x\w+ (.+)', desc)
-        idProduct = re_group('idProduct\s+0x\w+ (.+)', desc)
-        # create descriptions. prefer text from device, fall back to the others
-        return '%s %s %s' % (iManufacturer or idVendor, iProduct or idProduct, iSerial)
-    except IOError:
-        return base
-
-def describe(device):
-    """\
-    Get a human readable description.
-    For USB-Serial devices try to run lsusb to get a human readable description.
-    For USB-CDC devices read the description from sysfs.
-    """
-    base = os.path.basename(device)
-    # USB-Serial devices
-    sys_dev_path = '/sys/class/tty/%s/device/driver/%s' % (base, base)
-    if os.path.exists(sys_dev_path):
-        sys_usb = os.path.dirname(os.path.dirname(os.path.realpath(sys_dev_path)))
-        return usb_lsusb_string(sys_usb)
-    # USB-CDC devices
-    sys_dev_path = '/sys/class/tty/%s/device/interface' % (base,)
-    if os.path.exists(sys_dev_path):
-        return read_line(sys_dev_path)
-
-    # USB Product Information
-    sys_dev_path = '/sys/class/tty/%s/device' % (base,)
-    if os.path.exists(sys_dev_path):
-        product_name_file = os.path.dirname(os.path.realpath(sys_dev_path)) + "/product"
-        if os.path.exists(product_name_file):
-            return read_line(product_name_file)
-
-    return base
-
-def hwinfo(device):
-    """Try to get a HW identification using sysfs"""
-    base = os.path.basename(device)
-    if os.path.exists('/sys/class/tty/%s/device' % (base,)):
-        # PCI based devices
-        sys_id_path = '/sys/class/tty/%s/device/id' % (base,)
-        if os.path.exists(sys_id_path):
-            return read_line(sys_id_path)
-        # USB-Serial devices
-        sys_dev_path = '/sys/class/tty/%s/device/driver/%s' % (base, base)
-        if os.path.exists(sys_dev_path):
-            sys_usb = os.path.dirname(os.path.dirname(os.path.realpath(sys_dev_path)))
-            return usb_sysfs_hw_string(sys_usb)
-        # USB-CDC devices
-        if base.startswith('ttyACM'):
-            sys_dev_path = '/sys/class/tty/%s/device' % (base,)
-            if os.path.exists(sys_dev_path):
-                return usb_sysfs_hw_string(sys_dev_path + '/..')
-    return 'n/a'    # XXX directly remove these from the list?
-
-def comports():
-    devices = glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*')
-    return [(d, describe(d), hwinfo(d)) for d in devices]
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# test
-if __name__ == '__main__':
-    for port, desc, hwid in sorted(comports()):
-        print "%s: %s [%s]" % (port, desc, hwid)
diff --git a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_osx.py b/systrace/catapult/third_party/pyserial/serial/tools/list_ports_osx.py
deleted file mode 100755
index c9ed615..0000000
--- a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_osx.py
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/usr/bin/env python
-
-# portable serial port access with python
-#
-# This is a module that gathers a list of serial ports including details on OSX
-#
-# code originally from https://github.com/makerbot/pyserial/tree/master/serial/tools
-# with contributions from cibomahto, dgs3, FarMcKon, tedbrandston
-# and modifications by cliechti
-#
-# this is distributed under a free software license, see license.txt
-
-
-
-# List all of the callout devices in OS/X by querying IOKit.
-
-# See the following for a reference of how to do this:
-# http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/WorkingWSerial/WWSerial_SerialDevs/SerialDevices.html#//apple_ref/doc/uid/TP30000384-CIHGEAFD
-
-# More help from darwin_hid.py
-
-# Also see the 'IORegistryExplorer' for an idea of what we are actually searching
-
-import ctypes
-from ctypes import util
-import re
-
-iokit = ctypes.cdll.LoadLibrary(ctypes.util.find_library('IOKit'))
-cf = ctypes.cdll.LoadLibrary(ctypes.util.find_library('CoreFoundation'))
-
-kIOMasterPortDefault = ctypes.c_void_p.in_dll(iokit, "kIOMasterPortDefault")
-kCFAllocatorDefault = ctypes.c_void_p.in_dll(cf, "kCFAllocatorDefault")
-
-kCFStringEncodingMacRoman = 0
-
-iokit.IOServiceMatching.restype = ctypes.c_void_p
-
-iokit.IOServiceGetMatchingServices.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
-iokit.IOServiceGetMatchingServices.restype = ctypes.c_void_p
-
-iokit.IORegistryEntryGetParentEntry.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
-
-iokit.IORegistryEntryCreateCFProperty.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint32]
-iokit.IORegistryEntryCreateCFProperty.restype = ctypes.c_void_p
-
-iokit.IORegistryEntryGetPath.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p]
-iokit.IORegistryEntryGetPath.restype = ctypes.c_void_p
-
-iokit.IORegistryEntryGetName.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
-iokit.IORegistryEntryGetName.restype = ctypes.c_void_p
-
-iokit.IOObjectGetClass.argtypes = [ctypes.c_void_p, ctypes.c_void_p]
-iokit.IOObjectGetClass.restype = ctypes.c_void_p
-
-iokit.IOObjectRelease.argtypes = [ctypes.c_void_p]
-
-
-cf.CFStringCreateWithCString.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_int32]
-cf.CFStringCreateWithCString.restype = ctypes.c_void_p
-
-cf.CFStringGetCStringPtr.argtypes = [ctypes.c_void_p, ctypes.c_uint32]
-cf.CFStringGetCStringPtr.restype = ctypes.c_char_p
-
-cf.CFNumberGetValue.argtypes = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p]
-cf.CFNumberGetValue.restype = ctypes.c_void_p
-
-def get_string_property(device_t, property):
-    """ Search the given device for the specified string property
-
-    @param device_t Device to search
-    @param property String to search for.
-    @return Python string containing the value, or None if not found.
-    """
-    key = cf.CFStringCreateWithCString(
-        kCFAllocatorDefault,
-        property.encode("mac_roman"),
-        kCFStringEncodingMacRoman
-    )
-
-    CFContainer = iokit.IORegistryEntryCreateCFProperty(
-        device_t,
-        key,
-        kCFAllocatorDefault,
-        0
-    );
-
-    output = None
-
-    if CFContainer:
-        output = cf.CFStringGetCStringPtr(CFContainer, 0)
-
-    return output
-
-def get_int_property(device_t, property):
-    """ Search the given device for the specified string property
-
-    @param device_t Device to search
-    @param property String to search for.
-    @return Python string containing the value, or None if not found.
-    """
-    key = cf.CFStringCreateWithCString(
-        kCFAllocatorDefault,
-        property.encode("mac_roman"),
-        kCFStringEncodingMacRoman
-    )
-
-    CFContainer = iokit.IORegistryEntryCreateCFProperty(
-        device_t,
-        key,
-        kCFAllocatorDefault,
-        0
-    );
-
-    number = ctypes.c_uint16()
-
-    if CFContainer:
-        output = cf.CFNumberGetValue(CFContainer, 2, ctypes.byref(number))
-
-    return number.value
-
-def IORegistryEntryGetName(device):
-    pathname = ctypes.create_string_buffer(100) # TODO: Is this ok?
-    iokit.IOObjectGetClass(
-        device,
-        ctypes.byref(pathname)
-    )
-
-    return pathname.value
-
-def GetParentDeviceByType(device, parent_type):
-    """ Find the first parent of a device that implements the parent_type
-        @param IOService Service to inspect
-        @return Pointer to the parent type, or None if it was not found.
-    """
-    # First, try to walk up the IOService tree to find a parent of this device that is a IOUSBDevice.
-    while IORegistryEntryGetName(device) != parent_type:
-        parent = ctypes.c_void_p()
-        response = iokit.IORegistryEntryGetParentEntry(
-            device,
-            "IOService".encode("mac_roman"),
-            ctypes.byref(parent)
-        )
-
-        # If we weren't able to find a parent for the device, we're done.
-        if response != 0:
-            return None
-
-        device = parent
-
-    return device
-
-def GetIOServicesByType(service_type):
-    """
-    """
-    serial_port_iterator = ctypes.c_void_p()
-
-    response = iokit.IOServiceGetMatchingServices(
-        kIOMasterPortDefault,
-        iokit.IOServiceMatching(service_type),
-        ctypes.byref(serial_port_iterator)
-    )
-
-    services = []
-    while iokit.IOIteratorIsValid(serial_port_iterator):
-        service = iokit.IOIteratorNext(serial_port_iterator)
-        if not service:
-            break
-        services.append(service)
-
-    iokit.IOObjectRelease(serial_port_iterator)
-
-    return services
-
-def comports():
-    # Scan for all iokit serial ports
-    services = GetIOServicesByType('IOSerialBSDClient')
-
-    ports = []
-    for service in services:
-        info = []
-
-        # First, add the callout device file.
-        info.append(get_string_property(service, "IOCalloutDevice"))
-
-        # If the serial port is implemented by a
-        usb_device = GetParentDeviceByType(service, "IOUSBDevice")
-        if usb_device != None:
-            info.append(get_string_property(usb_device, "USB Product Name"))
-
-            info.append(
-                "USB VID:PID=%x:%x SNR=%s"%(
-                get_int_property(usb_device, "idVendor"),
-                get_int_property(usb_device, "idProduct"),
-                get_string_property(usb_device, "USB Serial Number"))
-            )
-        else:
-           info.append('n/a')
-           info.append('n/a')
-
-        ports.append(info)
-
-    return ports
-
-# test
-if __name__ == '__main__':
-    for port, desc, hwid in sorted(comports()):
-        print "%s: %s [%s]" % (port, desc, hwid)
-
diff --git a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_posix.py b/systrace/catapult/third_party/pyserial/serial/tools/list_ports_posix.py
deleted file mode 100755
index 09f115f..0000000
--- a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_posix.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-
-# portable serial port access with python
-
-# This is a module that gathers a list of serial ports on POSIXy systems.
-# For some specific implementations, see also list_ports_linux, list_ports_osx
-#
-# this is a wrapper module for different platform implementations of the
-# port enumeration feature
-#
-# (C) 2011-2013 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-"""\
-The ``comports`` function is expected to return an iterable that yields tuples
-of 3 strings: port name, human readable description and a hardware ID.
-
-As currently no method is known to get the second two strings easily, they are
-currently just identical to the port name.
-"""
-
-import glob
-import sys
-import os
-
-# try to detect the OS so that a device can be selected...
-plat = sys.platform.lower()
-
-if   plat[:5] == 'linux':    # Linux (confirmed)
-    from serial.tools.list_ports_linux import comports
-
-elif plat == 'cygwin':       # cygwin/win32
-    def comports():
-        devices = glob.glob('/dev/com*')
-        return [(d, d, d) for d in devices]
-
-elif plat[:7] == 'openbsd':    # OpenBSD
-    def comports():
-        devices = glob.glob('/dev/cua*')
-        return [(d, d, d) for d in devices]
-
-elif plat[:3] == 'bsd' or  \
-        plat[:7] == 'freebsd':
-
-    def comports():
-        devices = glob.glob('/dev/cuad*')
-        return [(d, d, d) for d in devices]
-
-elif plat[:6] == 'darwin':   # OS X (confirmed)
-    from serial.tools.list_ports_osx import comports
-
-elif plat[:6] == 'netbsd':   # NetBSD
-    def comports():
-        """scan for available ports. return a list of device names."""
-        devices = glob.glob('/dev/dty*')
-        return [(d, d, d) for d in devices]
-
-elif plat[:4] == 'irix':     # IRIX
-    def comports():
-        """scan for available ports. return a list of device names."""
-        devices = glob.glob('/dev/ttyf*')
-        return [(d, d, d) for d in devices]
-
-elif plat[:2] == 'hp':       # HP-UX (not tested)
-    def comports():
-        """scan for available ports. return a list of device names."""
-        devices = glob.glob('/dev/tty*p0')
-        return [(d, d, d) for d in devices]
-
-elif plat[:5] == 'sunos':    # Solaris/SunOS
-    def comports():
-        """scan for available ports. return a list of device names."""
-        devices = glob.glob('/dev/tty*c')
-        return [(d, d, d) for d in devices]
-
-elif plat[:3] == 'aix':      # AIX
-    def comports():
-        """scan for available ports. return a list of device names."""
-        devices = glob.glob('/dev/tty*')
-        return [(d, d, d) for d in devices]
-
-else:
-    # platform detection has failed...
-    sys.stderr.write("""\
-don't know how to enumerate ttys on this system.
-! I you know how the serial ports are named send this information to
-! the author of this module:
-
-sys.platform = %r
-os.name = %r
-pySerial version = %s
-
-also add the naming scheme of the serial ports and with a bit luck you can get
-this module running...
-""" % (sys.platform, os.name, serial.VERSION))
-    raise ImportError("Sorry: no implementation for your platform ('%s') available" % (os.name,))
-
-# test
-if __name__ == '__main__':
-    for port, desc, hwid in sorted(comports()):
-        print "%s: %s [%s]" % (port, desc, hwid)
diff --git a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_windows.py b/systrace/catapult/third_party/pyserial/serial/tools/list_ports_windows.py
deleted file mode 100644
index ca597ca..0000000
--- a/systrace/catapult/third_party/pyserial/serial/tools/list_ports_windows.py
+++ /dev/null
@@ -1,240 +0,0 @@
-import ctypes
-import re
-
-def ValidHandle(value, func, arguments):
-    if value == 0:
-        raise ctypes.WinError()
-    return value
-
-import serial
-from serial.win32 import ULONG_PTR, is_64bit
-from ctypes.wintypes import HANDLE
-from ctypes.wintypes import BOOL
-from ctypes.wintypes import HWND
-from ctypes.wintypes import DWORD
-from ctypes.wintypes import WORD
-from ctypes.wintypes import LONG
-from ctypes.wintypes import ULONG
-from ctypes.wintypes import LPCSTR
-from ctypes.wintypes import HKEY
-from ctypes.wintypes import BYTE
-
-NULL = 0
-HDEVINFO = ctypes.c_void_p
-PCTSTR = ctypes.c_char_p
-PTSTR = ctypes.c_void_p
-CHAR = ctypes.c_char
-LPDWORD = PDWORD = ctypes.POINTER(DWORD)
-#~ LPBYTE = PBYTE = ctypes.POINTER(BYTE)
-LPBYTE = PBYTE = ctypes.c_void_p        # XXX avoids error about types
-
-ACCESS_MASK = DWORD
-REGSAM = ACCESS_MASK
-
-
-def byte_buffer(length):
-    """Get a buffer for a string"""
-    return (BYTE*length)()
-
-def string(buffer):
-    s = []
-    for c in buffer:
-        if c == 0: break
-        s.append(chr(c & 0xff)) # "& 0xff": hack to convert signed to unsigned
-    return ''.join(s)
-
-
-class GUID(ctypes.Structure):
-    _fields_ = [
-        ('Data1', DWORD),
-        ('Data2', WORD),
-        ('Data3', WORD),
-        ('Data4', BYTE*8),
-    ]
-    def __str__(self):
-        return "{%08x-%04x-%04x-%s-%s}" % (
-            self.Data1,
-            self.Data2,
-            self.Data3,
-            ''.join(["%02x" % d for d in self.Data4[:2]]),
-            ''.join(["%02x" % d for d in self.Data4[2:]]),
-        )
-
-class SP_DEVINFO_DATA(ctypes.Structure):
-    _fields_ = [
-        ('cbSize', DWORD),
-        ('ClassGuid', GUID),
-        ('DevInst', DWORD),
-        ('Reserved', ULONG_PTR),
-    ]
-    def __str__(self):
-        return "ClassGuid:%s DevInst:%s" % (self.ClassGuid, self.DevInst)
-PSP_DEVINFO_DATA = ctypes.POINTER(SP_DEVINFO_DATA)
-
-PSP_DEVICE_INTERFACE_DETAIL_DATA = ctypes.c_void_p
-
-setupapi = ctypes.windll.LoadLibrary("setupapi")
-SetupDiDestroyDeviceInfoList = setupapi.SetupDiDestroyDeviceInfoList
-SetupDiDestroyDeviceInfoList.argtypes = [HDEVINFO]
-SetupDiDestroyDeviceInfoList.restype = BOOL
-
-SetupDiClassGuidsFromName = setupapi.SetupDiClassGuidsFromNameA
-SetupDiClassGuidsFromName.argtypes = [PCTSTR, ctypes.POINTER(GUID), DWORD, PDWORD]
-SetupDiClassGuidsFromName.restype = BOOL
-
-SetupDiEnumDeviceInfo = setupapi.SetupDiEnumDeviceInfo
-SetupDiEnumDeviceInfo.argtypes = [HDEVINFO, DWORD, PSP_DEVINFO_DATA]
-SetupDiEnumDeviceInfo.restype = BOOL
-
-SetupDiGetClassDevs = setupapi.SetupDiGetClassDevsA
-SetupDiGetClassDevs.argtypes = [ctypes.POINTER(GUID), PCTSTR, HWND, DWORD]
-SetupDiGetClassDevs.restype = HDEVINFO
-SetupDiGetClassDevs.errcheck = ValidHandle
-
-SetupDiGetDeviceRegistryProperty = setupapi.SetupDiGetDeviceRegistryPropertyA
-SetupDiGetDeviceRegistryProperty.argtypes = [HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD]
-SetupDiGetDeviceRegistryProperty.restype = BOOL
-
-SetupDiGetDeviceInstanceId = setupapi.SetupDiGetDeviceInstanceIdA
-SetupDiGetDeviceInstanceId.argtypes = [HDEVINFO, PSP_DEVINFO_DATA, PTSTR, DWORD, PDWORD]
-SetupDiGetDeviceInstanceId.restype = BOOL
-
-SetupDiOpenDevRegKey = setupapi.SetupDiOpenDevRegKey
-SetupDiOpenDevRegKey.argtypes = [HDEVINFO, PSP_DEVINFO_DATA, DWORD, DWORD, DWORD, REGSAM]
-SetupDiOpenDevRegKey.restype = HKEY
-
-advapi32 = ctypes.windll.LoadLibrary("Advapi32")
-RegCloseKey = advapi32.RegCloseKey
-RegCloseKey.argtypes = [HKEY]
-RegCloseKey.restype = LONG
-
-RegQueryValueEx = advapi32.RegQueryValueExA
-RegQueryValueEx.argtypes = [HKEY, LPCSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD]
-RegQueryValueEx.restype = LONG
-
-
-DIGCF_PRESENT = 2
-DIGCF_DEVICEINTERFACE = 16
-INVALID_HANDLE_VALUE = 0
-ERROR_INSUFFICIENT_BUFFER = 122
-SPDRP_HARDWAREID = 1
-SPDRP_FRIENDLYNAME = 12
-DICS_FLAG_GLOBAL = 1
-DIREG_DEV = 0x00000001
-KEY_READ = 0x20019
-
-# workaround for compatibility between Python 2.x and 3.x
-Ports = serial.to_bytes([80, 111, 114, 116, 115]) # "Ports"
-PortName = serial.to_bytes([80, 111, 114, 116, 78, 97, 109, 101]) # "PortName"
-
-def comports():
-    GUIDs = (GUID*8)() # so far only seen one used, so hope 8 are enough...
-    guids_size = DWORD()
-    if not SetupDiClassGuidsFromName(
-            Ports,
-            GUIDs,
-            ctypes.sizeof(GUIDs),
-            ctypes.byref(guids_size)):
-        raise ctypes.WinError()
-
-    # repeat for all possible GUIDs
-    for index in range(guids_size.value):
-        g_hdi = SetupDiGetClassDevs(
-                ctypes.byref(GUIDs[index]),
-                None,
-                NULL,
-                DIGCF_PRESENT) # was DIGCF_PRESENT|DIGCF_DEVICEINTERFACE which misses CDC ports
-
-        devinfo = SP_DEVINFO_DATA()
-        devinfo.cbSize = ctypes.sizeof(devinfo)
-        index = 0
-        while SetupDiEnumDeviceInfo(g_hdi, index, ctypes.byref(devinfo)):
-            index += 1
-
-            # get the real com port name
-            hkey = SetupDiOpenDevRegKey(
-                    g_hdi,
-                    ctypes.byref(devinfo),
-                    DICS_FLAG_GLOBAL,
-                    0,
-                    DIREG_DEV,  # DIREG_DRV for SW info
-                    KEY_READ)
-            port_name_buffer = byte_buffer(250)
-            port_name_length = ULONG(ctypes.sizeof(port_name_buffer))
-            RegQueryValueEx(
-                    hkey,
-                    PortName,
-                    None,
-                    None,
-                    ctypes.byref(port_name_buffer),
-                    ctypes.byref(port_name_length))
-            RegCloseKey(hkey)
-
-            # unfortunately does this method also include parallel ports.
-            # we could check for names starting with COM or just exclude LPT
-            # and hope that other "unknown" names are serial ports...
-            if string(port_name_buffer).startswith('LPT'):
-                continue
-
-            # hardware ID
-            szHardwareID = byte_buffer(250)
-            # try to get ID that includes serial number
-            if not SetupDiGetDeviceInstanceId(
-                    g_hdi,
-                    ctypes.byref(devinfo),
-                    ctypes.byref(szHardwareID),
-                    ctypes.sizeof(szHardwareID) - 1,
-                    None):
-                # fall back to more generic hardware ID if that would fail
-                if not SetupDiGetDeviceRegistryProperty(
-                        g_hdi,
-                        ctypes.byref(devinfo),
-                        SPDRP_HARDWAREID,
-                        None,
-                        ctypes.byref(szHardwareID),
-                        ctypes.sizeof(szHardwareID) - 1,
-                        None):
-                    # Ignore ERROR_INSUFFICIENT_BUFFER
-                    if ctypes.GetLastError() != ERROR_INSUFFICIENT_BUFFER:
-                        raise ctypes.WinError()
-            # stringify
-            szHardwareID_str = string(szHardwareID)
-
-            # in case of USB, make a more readable string, similar to that form
-            # that we also generate on other platforms
-            if szHardwareID_str.startswith('USB'):
-                m = re.search(r'VID_([0-9a-f]{4})&PID_([0-9a-f]{4})(\\(\w+))?', szHardwareID_str, re.I)
-                if m:
-                    if m.group(4):
-                        szHardwareID_str = 'USB VID:PID=%s:%s SNR=%s' % (m.group(1), m.group(2), m.group(4))
-                    else:
-                        szHardwareID_str = 'USB VID:PID=%s:%s' % (m.group(1), m.group(2))
-
-            # friendly name
-            szFriendlyName = byte_buffer(250)
-            if not SetupDiGetDeviceRegistryProperty(
-                    g_hdi,
-                    ctypes.byref(devinfo),
-                    SPDRP_FRIENDLYNAME,
-                    #~ SPDRP_DEVICEDESC,
-                    None,
-                    ctypes.byref(szFriendlyName),
-                    ctypes.sizeof(szFriendlyName) - 1,
-                    None):
-                # Ignore ERROR_INSUFFICIENT_BUFFER
-                #~ if ctypes.GetLastError() != ERROR_INSUFFICIENT_BUFFER:
-                    #~ raise IOError("failed to get details for %s (%s)" % (devinfo, szHardwareID.value))
-                # ignore errors and still include the port in the list, friendly name will be same as port name
-                yield string(port_name_buffer), 'n/a', szHardwareID_str
-            else:
-                yield string(port_name_buffer), string(szFriendlyName), szHardwareID_str
-
-        SetupDiDestroyDeviceInfoList(g_hdi)
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-# test
-if __name__ == '__main__':
-    import serial
-
-    for port, desc, hwid in sorted(comports()):
-        print "%s: %s [%s]" % (port, desc, hwid)
diff --git a/systrace/catapult/third_party/pyserial/serial/tools/miniterm.py b/systrace/catapult/third_party/pyserial/serial/tools/miniterm.py
deleted file mode 100755
index 274c7fb..0000000
--- a/systrace/catapult/third_party/pyserial/serial/tools/miniterm.py
+++ /dev/null
@@ -1,694 +0,0 @@
-#!/usr/bin/env python
-
-# Very simple serial terminal
-# (C)2002-2011 Chris Liechti <cliechti@gmx.net>
-
-# Input characters are sent directly (only LF -> CR/LF/CRLF translation is
-# done), received characters are displayed as is (or escaped trough pythons
-# repr, useful for debug purposes)
-
-
-import sys, os, serial, threading
-try:
-    from serial.tools.list_ports import comports
-except ImportError:
-    comports = None
-
-EXITCHARCTER = serial.to_bytes([0x1d])   # GS/CTRL+]
-MENUCHARACTER = serial.to_bytes([0x14])  # Menu: CTRL+T
-
-DEFAULT_PORT = None
-DEFAULT_BAUDRATE = 9600
-DEFAULT_RTS = None
-DEFAULT_DTR = None
-
-
-def key_description(character):
-    """generate a readable description for a key"""
-    ascii_code = ord(character)
-    if ascii_code < 32:
-        return 'Ctrl+%c' % (ord('@') + ascii_code)
-    else:
-        return repr(character)
-
-
-# help text, starts with blank line! it's a function so that the current values
-# for the shortcut keys is used and not the value at program start
-def get_help_text():
-    return """
---- pySerial (%(version)s) - miniterm - help
----
---- %(exit)-8s Exit program
---- %(menu)-8s Menu escape key, followed by:
---- Menu keys:
----    %(itself)-7s Send the menu character itself to remote
----    %(exchar)-7s Send the exit character itself to remote
----    %(info)-7s Show info
----    %(upload)-7s Upload file (prompt will be shown)
---- Toggles:
----    %(rts)-7s RTS          %(echo)-7s local echo
----    %(dtr)-7s DTR          %(break)-7s BREAK
----    %(lfm)-7s line feed    %(repr)-7s Cycle repr mode
----
---- Port settings (%(menu)s followed by the following):
----    p          change port
----    7 8        set data bits
----    n e o s m  change parity (None, Even, Odd, Space, Mark)
----    1 2 3      set stop bits (1, 2, 1.5)
----    b          change baud rate
----    x X        disable/enable software flow control
----    r R        disable/enable hardware flow control
-""" % {
-    'version': getattr(serial, 'VERSION', 'unknown version'),
-    'exit': key_description(EXITCHARCTER),
-    'menu': key_description(MENUCHARACTER),
-    'rts': key_description('\x12'),
-    'repr': key_description('\x01'),
-    'dtr': key_description('\x04'),
-    'lfm': key_description('\x0c'),
-    'break': key_description('\x02'),
-    'echo': key_description('\x05'),
-    'info': key_description('\x09'),
-    'upload': key_description('\x15'),
-    'itself': key_description(MENUCHARACTER),
-    'exchar': key_description(EXITCHARCTER),
-}
-
-if sys.version_info >= (3, 0):
-    def character(b):
-        return b.decode('latin1')
-else:
-    def character(b):
-        return b
-
-LF = serial.to_bytes([10])
-CR = serial.to_bytes([13])
-CRLF = serial.to_bytes([13, 10])
-
-X00 = serial.to_bytes([0])
-X0E = serial.to_bytes([0x0e])
-
-# first choose a platform dependant way to read single characters from the console
-global console
-
-if os.name == 'nt':
-    import msvcrt
-    class Console(object):
-        def __init__(self):
-            pass
-
-        def setup(self):
-            pass    # Do nothing for 'nt'
-
-        def cleanup(self):
-            pass    # Do nothing for 'nt'
-
-        def getkey(self):
-            while True:
-                z = msvcrt.getch()
-                if z == X00 or z == X0E:    # functions keys, ignore
-                    msvcrt.getch()
-                else:
-                    if z == CR:
-                        return LF
-                    return z
-
-    console = Console()
-
-elif os.name == 'posix':
-    import termios, sys, os
-    class Console(object):
-        def __init__(self):
-            self.fd = sys.stdin.fileno()
-            self.old = None
-
-        def setup(self):
-            self.old = termios.tcgetattr(self.fd)
-            new = termios.tcgetattr(self.fd)
-            new[3] = new[3] & ~termios.ICANON & ~termios.ECHO & ~termios.ISIG
-            new[6][termios.VMIN] = 1
-            new[6][termios.VTIME] = 0
-            termios.tcsetattr(self.fd, termios.TCSANOW, new)
-
-        def getkey(self):
-            c = os.read(self.fd, 1)
-            return c
-
-        def cleanup(self):
-            if self.old is not None:
-                termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old)
-
-    console = Console()
-
-    def cleanup_console():
-        console.cleanup()
-
-    sys.exitfunc = cleanup_console      # terminal modes have to be restored on exit...
-
-else:
-    raise NotImplementedError("Sorry no implementation for your platform (%s) available." % sys.platform)
-
-
-def dump_port_list():
-    if comports:
-        sys.stderr.write('\n--- Available ports:\n')
-        for port, desc, hwid in sorted(comports()):
-            #~ sys.stderr.write('--- %-20s %s [%s]\n' % (port, desc, hwid))
-            sys.stderr.write('--- %-20s %s\n' % (port, desc))
-
-
-CONVERT_CRLF = 2
-CONVERT_CR   = 1
-CONVERT_LF   = 0
-NEWLINE_CONVERISON_MAP = (LF, CR, CRLF)
-LF_MODES = ('LF', 'CR', 'CR/LF')
-
-REPR_MODES = ('raw', 'some control', 'all control', 'hex')
-
-class Miniterm(object):
-    def __init__(self, port, baudrate, parity, rtscts, xonxoff, echo=False, convert_outgoing=CONVERT_CRLF, repr_mode=0):
-        try:
-            self.serial = serial.serial_for_url(port, baudrate, parity=parity, rtscts=rtscts, xonxoff=xonxoff, timeout=1)
-        except AttributeError:
-            # happens when the installed pyserial is older than 2.5. use the
-            # Serial class directly then.
-            self.serial = serial.Serial(port, baudrate, parity=parity, rtscts=rtscts, xonxoff=xonxoff, timeout=1)
-        self.echo = echo
-        self.repr_mode = repr_mode
-        self.convert_outgoing = convert_outgoing
-        self.newline = NEWLINE_CONVERISON_MAP[self.convert_outgoing]
-        self.dtr_state = True
-        self.rts_state = True
-        self.break_state = False
-
-    def _start_reader(self):
-        """Start reader thread"""
-        self._reader_alive = True
-        # start serial->console thread
-        self.receiver_thread = threading.Thread(target=self.reader)
-        self.receiver_thread.setDaemon(True)
-        self.receiver_thread.start()
-
-    def _stop_reader(self):
-        """Stop reader thread only, wait for clean exit of thread"""
-        self._reader_alive = False
-        self.receiver_thread.join()
-
-
-    def start(self):
-        self.alive = True
-        self._start_reader()
-        # enter console->serial loop
-        self.transmitter_thread = threading.Thread(target=self.writer)
-        self.transmitter_thread.setDaemon(True)
-        self.transmitter_thread.start()
-
-    def stop(self):
-        self.alive = False
-
-    def join(self, transmit_only=False):
-        self.transmitter_thread.join()
-        if not transmit_only:
-            self.receiver_thread.join()
-
-    def dump_port_settings(self):
-        sys.stderr.write("\n--- Settings: %s  %s,%s,%s,%s\n" % (
-                self.serial.portstr,
-                self.serial.baudrate,
-                self.serial.bytesize,
-                self.serial.parity,
-                self.serial.stopbits))
-        sys.stderr.write('--- RTS: %-8s  DTR: %-8s  BREAK: %-8s\n' % (
-                (self.rts_state and 'active' or 'inactive'),
-                (self.dtr_state and 'active' or 'inactive'),
-                (self.break_state and 'active' or 'inactive')))
-        try:
-            sys.stderr.write('--- CTS: %-8s  DSR: %-8s  RI: %-8s  CD: %-8s\n' % (
-                    (self.serial.getCTS() and 'active' or 'inactive'),
-                    (self.serial.getDSR() and 'active' or 'inactive'),
-                    (self.serial.getRI() and 'active' or 'inactive'),
-                    (self.serial.getCD() and 'active' or 'inactive')))
-        except serial.SerialException:
-            # on RFC 2217 ports it can happen to no modem state notification was
-            # yet received. ignore this error.
-            pass
-        sys.stderr.write('--- software flow control: %s\n' % (self.serial.xonxoff and 'active' or 'inactive'))
-        sys.stderr.write('--- hardware flow control: %s\n' % (self.serial.rtscts and 'active' or 'inactive'))
-        sys.stderr.write('--- data escaping: %s  linefeed: %s\n' % (
-                REPR_MODES[self.repr_mode],
-                LF_MODES[self.convert_outgoing]))
-
-    def reader(self):
-        """loop and copy serial->console"""
-        try:
-            while self.alive and self._reader_alive:
-                data = character(self.serial.read(1))
-
-                if self.repr_mode == 0:
-                    # direct output, just have to care about newline setting
-                    if data == '\r' and self.convert_outgoing == CONVERT_CR:
-                        sys.stdout.write('\n')
-                    else:
-                        sys.stdout.write(data)
-                elif self.repr_mode == 1:
-                    # escape non-printable, let pass newlines
-                    if self.convert_outgoing == CONVERT_CRLF and data in '\r\n':
-                        if data == '\n':
-                            sys.stdout.write('\n')
-                        elif data == '\r':
-                            pass
-                    elif data == '\n' and self.convert_outgoing == CONVERT_LF:
-                        sys.stdout.write('\n')
-                    elif data == '\r' and self.convert_outgoing == CONVERT_CR:
-                        sys.stdout.write('\n')
-                    else:
-                        sys.stdout.write(repr(data)[1:-1])
-                elif self.repr_mode == 2:
-                    # escape all non-printable, including newline
-                    sys.stdout.write(repr(data)[1:-1])
-                elif self.repr_mode == 3:
-                    # escape everything (hexdump)
-                    for c in data:
-                        sys.stdout.write("%s " % c.encode('hex'))
-                sys.stdout.flush()
-        except serial.SerialException, e:
-            self.alive = False
-            # would be nice if the console reader could be interruptted at this
-            # point...
-            raise
-
-
-    def writer(self):
-        """\
-        Loop and copy console->serial until EXITCHARCTER character is
-        found. When MENUCHARACTER is found, interpret the next key
-        locally.
-        """
-        menu_active = False
-        try:
-            while self.alive:
-                try:
-                    b = console.getkey()
-                except KeyboardInterrupt:
-                    b = serial.to_bytes([3])
-                c = character(b)
-                if menu_active:
-                    if c == MENUCHARACTER or c == EXITCHARCTER: # Menu character again/exit char -> send itself
-                        self.serial.write(b)                    # send character
-                        if self.echo:
-                            sys.stdout.write(c)
-                    elif c == '\x15':                       # CTRL+U -> upload file
-                        sys.stderr.write('\n--- File to upload: ')
-                        sys.stderr.flush()
-                        console.cleanup()
-                        filename = sys.stdin.readline().rstrip('\r\n')
-                        if filename:
-                            try:
-                                file = open(filename, 'r')
-                                sys.stderr.write('--- Sending file %s ---\n' % filename)
-                                while True:
-                                    line = file.readline().rstrip('\r\n')
-                                    if not line:
-                                        break
-                                    self.serial.write(line)
-                                    self.serial.write('\r\n')
-                                    # Wait for output buffer to drain.
-                                    self.serial.flush()
-                                    sys.stderr.write('.')   # Progress indicator.
-                                sys.stderr.write('\n--- File %s sent ---\n' % filename)
-                            except IOError, e:
-                                sys.stderr.write('--- ERROR opening file %s: %s ---\n' % (filename, e))
-                        console.setup()
-                    elif c in '\x08hH?':                    # CTRL+H, h, H, ? -> Show help
-                        sys.stderr.write(get_help_text())
-                    elif c == '\x12':                       # CTRL+R -> Toggle RTS
-                        self.rts_state = not self.rts_state
-                        self.serial.setRTS(self.rts_state)
-                        sys.stderr.write('--- RTS %s ---\n' % (self.rts_state and 'active' or 'inactive'))
-                    elif c == '\x04':                       # CTRL+D -> Toggle DTR
-                        self.dtr_state = not self.dtr_state
-                        self.serial.setDTR(self.dtr_state)
-                        sys.stderr.write('--- DTR %s ---\n' % (self.dtr_state and 'active' or 'inactive'))
-                    elif c == '\x02':                       # CTRL+B -> toggle BREAK condition
-                        self.break_state = not self.break_state
-                        self.serial.setBreak(self.break_state)
-                        sys.stderr.write('--- BREAK %s ---\n' % (self.break_state and 'active' or 'inactive'))
-                    elif c == '\x05':                       # CTRL+E -> toggle local echo
-                        self.echo = not self.echo
-                        sys.stderr.write('--- local echo %s ---\n' % (self.echo and 'active' or 'inactive'))
-                    elif c == '\x09':                       # CTRL+I -> info
-                        self.dump_port_settings()
-                    elif c == '\x01':                       # CTRL+A -> cycle escape mode
-                        self.repr_mode += 1
-                        if self.repr_mode > 3:
-                            self.repr_mode = 0
-                        sys.stderr.write('--- escape data: %s ---\n' % (
-                            REPR_MODES[self.repr_mode],
-                        ))
-                    elif c == '\x0c':                       # CTRL+L -> cycle linefeed mode
-                        self.convert_outgoing += 1
-                        if self.convert_outgoing > 2:
-                            self.convert_outgoing = 0
-                        self.newline = NEWLINE_CONVERISON_MAP[self.convert_outgoing]
-                        sys.stderr.write('--- line feed %s ---\n' % (
-                            LF_MODES[self.convert_outgoing],
-                        ))
-                    elif c in 'pP':                         # P -> change port
-                        dump_port_list()
-                        sys.stderr.write('--- Enter port name: ')
-                        sys.stderr.flush()
-                        console.cleanup()
-                        try:
-                            port = sys.stdin.readline().strip()
-                        except KeyboardInterrupt:
-                            port = None
-                        console.setup()
-                        if port and port != self.serial.port:
-                            # reader thread needs to be shut down
-                            self._stop_reader()
-                            # save settings
-                            settings = self.serial.getSettingsDict()
-                            try:
-                                try:
-                                    new_serial = serial.serial_for_url(port, do_not_open=True)
-                                except AttributeError:
-                                    # happens when the installed pyserial is older than 2.5. use the
-                                    # Serial class directly then.
-                                    new_serial = serial.Serial()
-                                    new_serial.port = port
-                                # restore settings and open
-                                new_serial.applySettingsDict(settings)
-                                new_serial.open()
-                                new_serial.setRTS(self.rts_state)
-                                new_serial.setDTR(self.dtr_state)
-                                new_serial.setBreak(self.break_state)
-                            except Exception, e:
-                                sys.stderr.write('--- ERROR opening new port: %s ---\n' % (e,))
-                                new_serial.close()
-                            else:
-                                self.serial.close()
-                                self.serial = new_serial
-                                sys.stderr.write('--- Port changed to: %s ---\n' % (self.serial.port,))
-                            # and restart the reader thread
-                            self._start_reader()
-                    elif c in 'bB':                         # B -> change baudrate
-                        sys.stderr.write('\n--- Baudrate: ')
-                        sys.stderr.flush()
-                        console.cleanup()
-                        backup = self.serial.baudrate
-                        try:
-                            self.serial.baudrate = int(sys.stdin.readline().strip())
-                        except ValueError, e:
-                            sys.stderr.write('--- ERROR setting baudrate: %s ---\n' % (e,))
-                            self.serial.baudrate = backup
-                        else:
-                            self.dump_port_settings()
-                        console.setup()
-                    elif c == '8':                          # 8 -> change to 8 bits
-                        self.serial.bytesize = serial.EIGHTBITS
-                        self.dump_port_settings()
-                    elif c == '7':                          # 7 -> change to 8 bits
-                        self.serial.bytesize = serial.SEVENBITS
-                        self.dump_port_settings()
-                    elif c in 'eE':                         # E -> change to even parity
-                        self.serial.parity = serial.PARITY_EVEN
-                        self.dump_port_settings()
-                    elif c in 'oO':                         # O -> change to odd parity
-                        self.serial.parity = serial.PARITY_ODD
-                        self.dump_port_settings()
-                    elif c in 'mM':                         # M -> change to mark parity
-                        self.serial.parity = serial.PARITY_MARK
-                        self.dump_port_settings()
-                    elif c in 'sS':                         # S -> change to space parity
-                        self.serial.parity = serial.PARITY_SPACE
-                        self.dump_port_settings()
-                    elif c in 'nN':                         # N -> change to no parity
-                        self.serial.parity = serial.PARITY_NONE
-                        self.dump_port_settings()
-                    elif c == '1':                          # 1 -> change to 1 stop bits
-                        self.serial.stopbits = serial.STOPBITS_ONE
-                        self.dump_port_settings()
-                    elif c == '2':                          # 2 -> change to 2 stop bits
-                        self.serial.stopbits = serial.STOPBITS_TWO
-                        self.dump_port_settings()
-                    elif c == '3':                          # 3 -> change to 1.5 stop bits
-                        self.serial.stopbits = serial.STOPBITS_ONE_POINT_FIVE
-                        self.dump_port_settings()
-                    elif c in 'xX':                         # X -> change software flow control
-                        self.serial.xonxoff = (c == 'X')
-                        self.dump_port_settings()
-                    elif c in 'rR':                         # R -> change hardware flow control
-                        self.serial.rtscts = (c == 'R')
-                        self.dump_port_settings()
-                    else:
-                        sys.stderr.write('--- unknown menu character %s --\n' % key_description(c))
-                    menu_active = False
-                elif c == MENUCHARACTER: # next char will be for menu
-                    menu_active = True
-                elif c == EXITCHARCTER: 
-                    self.stop()
-                    break                                   # exit app
-                elif c == '\n':
-                    self.serial.write(self.newline)         # send newline character(s)
-                    if self.echo:
-                        sys.stdout.write(c)                 # local echo is a real newline in any case
-                        sys.stdout.flush()
-                else:
-                    self.serial.write(b)                    # send byte
-                    if self.echo:
-                        sys.stdout.write(c)
-                        sys.stdout.flush()
-        except:
-            self.alive = False
-            raise
-
-def main():
-    import optparse
-
-    parser = optparse.OptionParser(
-        usage = "%prog [options] [port [baudrate]]",
-        description = "Miniterm - A simple terminal program for the serial port."
-    )
-
-    group = optparse.OptionGroup(parser, "Port settings")
-
-    group.add_option("-p", "--port",
-        dest = "port",
-        help = "port, a number or a device name. (deprecated option, use parameter instead)",
-        default = DEFAULT_PORT
-    )
-
-    group.add_option("-b", "--baud",
-        dest = "baudrate",
-        action = "store",
-        type = 'int',
-        help = "set baud rate, default %default",
-        default = DEFAULT_BAUDRATE
-    )
-
-    group.add_option("--parity",
-        dest = "parity",
-        action = "store",
-        help = "set parity, one of [N, E, O, S, M], default=N",
-        default = 'N'
-    )
-
-    group.add_option("--rtscts",
-        dest = "rtscts",
-        action = "store_true",
-        help = "enable RTS/CTS flow control (default off)",
-        default = False
-    )
-
-    group.add_option("--xonxoff",
-        dest = "xonxoff",
-        action = "store_true",
-        help = "enable software flow control (default off)",
-        default = False
-    )
-
-    group.add_option("--rts",
-        dest = "rts_state",
-        action = "store",
-        type = 'int',
-        help = "set initial RTS line state (possible values: 0, 1)",
-        default = DEFAULT_RTS
-    )
-
-    group.add_option("--dtr",
-        dest = "dtr_state",
-        action = "store",
-        type = 'int',
-        help = "set initial DTR line state (possible values: 0, 1)",
-        default = DEFAULT_DTR
-    )
-
-    parser.add_option_group(group)
-
-    group = optparse.OptionGroup(parser, "Data handling")
-
-    group.add_option("-e", "--echo",
-        dest = "echo",
-        action = "store_true",
-        help = "enable local echo (default off)",
-        default = False
-    )
-
-    group.add_option("--cr",
-        dest = "cr",
-        action = "store_true",
-        help = "do not send CR+LF, send CR only",
-        default = False
-    )
-
-    group.add_option("--lf",
-        dest = "lf",
-        action = "store_true",
-        help = "do not send CR+LF, send LF only",
-        default = False
-    )
-
-    group.add_option("-D", "--debug",
-        dest = "repr_mode",
-        action = "count",
-        help = """debug received data (escape non-printable chars)
---debug can be given multiple times:
-0: just print what is received
-1: escape non-printable characters, do newlines as unusual
-2: escape non-printable characters, newlines too
-3: hex dump everything""",
-        default = 0
-    )
-
-    parser.add_option_group(group)
-
-
-    group = optparse.OptionGroup(parser, "Hotkeys")
-
-    group.add_option("--exit-char",
-        dest = "exit_char",
-        action = "store",
-        type = 'int',
-        help = "ASCII code of special character that is used to exit the application",
-        default = 0x1d
-    )
-
-    group.add_option("--menu-char",
-        dest = "menu_char",
-        action = "store",
-        type = 'int',
-        help = "ASCII code of special character that is used to control miniterm (menu)",
-        default = 0x14
-    )
-
-    parser.add_option_group(group)
-
-    group = optparse.OptionGroup(parser, "Diagnostics")
-
-    group.add_option("-q", "--quiet",
-        dest = "quiet",
-        action = "store_true",
-        help = "suppress non-error messages",
-        default = False
-    )
-
-    parser.add_option_group(group)
-
-
-    (options, args) = parser.parse_args()
-
-    options.parity = options.parity.upper()
-    if options.parity not in 'NEOSM':
-        parser.error("invalid parity")
-
-    if options.cr and options.lf:
-        parser.error("only one of --cr or --lf can be specified")
-
-    if options.menu_char == options.exit_char:
-        parser.error('--exit-char can not be the same as --menu-char')
-
-    global EXITCHARCTER, MENUCHARACTER
-    EXITCHARCTER = chr(options.exit_char)
-    MENUCHARACTER = chr(options.menu_char)
-
-    port = options.port
-    baudrate = options.baudrate
-    if args:
-        if options.port is not None:
-            parser.error("no arguments are allowed, options only when --port is given")
-        port = args.pop(0)
-        if args:
-            try:
-                baudrate = int(args[0])
-            except ValueError:
-                parser.error("baud rate must be a number, not %r" % args[0])
-            args.pop(0)
-        if args:
-            parser.error("too many arguments")
-    else:
-        # noport given on command line -> ask user now
-        if port is None:
-            dump_port_list()
-            port = raw_input('Enter port name:')
-
-    convert_outgoing = CONVERT_CRLF
-    if options.cr:
-        convert_outgoing = CONVERT_CR
-    elif options.lf:
-        convert_outgoing = CONVERT_LF
-
-    try:
-        miniterm = Miniterm(
-            port,
-            baudrate,
-            options.parity,
-            rtscts=options.rtscts,
-            xonxoff=options.xonxoff,
-            echo=options.echo,
-            convert_outgoing=convert_outgoing,
-            repr_mode=options.repr_mode,
-        )
-    except serial.SerialException, e:
-        sys.stderr.write("could not open port %r: %s\n" % (port, e))
-        sys.exit(1)
-
-    if not options.quiet:
-        sys.stderr.write('--- Miniterm on %s: %d,%s,%s,%s ---\n' % (
-            miniterm.serial.portstr,
-            miniterm.serial.baudrate,
-            miniterm.serial.bytesize,
-            miniterm.serial.parity,
-            miniterm.serial.stopbits,
-        ))
-        sys.stderr.write('--- Quit: %s  |  Menu: %s | Help: %s followed by %s ---\n' % (
-            key_description(EXITCHARCTER),
-            key_description(MENUCHARACTER),
-            key_description(MENUCHARACTER),
-            key_description('\x08'),
-        ))
-
-    if options.dtr_state is not None:
-        if not options.quiet:
-            sys.stderr.write('--- forcing DTR %s\n' % (options.dtr_state and 'active' or 'inactive'))
-        miniterm.serial.setDTR(options.dtr_state)
-        miniterm.dtr_state = options.dtr_state
-    if options.rts_state is not None:
-        if not options.quiet:
-            sys.stderr.write('--- forcing RTS %s\n' % (options.rts_state and 'active' or 'inactive'))
-        miniterm.serial.setRTS(options.rts_state)
-        miniterm.rts_state = options.rts_state
-
-    console.setup()
-    miniterm.start()
-    try:
-        miniterm.join(True)
-    except KeyboardInterrupt:
-        pass
-    if not options.quiet:
-        sys.stderr.write("\n--- exit ---\n")
-    miniterm.join()
-    #~ console.cleanup()
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-if __name__ == '__main__':
-    main()
diff --git a/systrace/catapult/third_party/pyserial/serial/urlhandler/__init__.py b/systrace/catapult/third_party/pyserial/serial/urlhandler/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/systrace/catapult/third_party/pyserial/serial/urlhandler/__init__.py
+++ /dev/null
diff --git a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_hwgrep.py b/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_hwgrep.py
deleted file mode 100644
index 62cda43..0000000
--- a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_hwgrep.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#! python
-#
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see __init__.py
-#
-# This module implements a special URL handler that uses the port listing to
-# find ports by searching the string descriptions.
-#
-# (C) 2011 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-#
-# URL format:    hwgrep://regexp
-
-import serial
-import serial.tools.list_ports
-
-class Serial(serial.Serial):
-    """Just inherit the native Serial port implementation and patch the open function."""
-
-    def setPort(self, value):
-        """translate port name before storing it"""
-        if isinstance(value, basestring) and value.startswith('hwgrep://'):
-            serial.Serial.setPort(self, self.fromURL(value))
-        else:
-            serial.Serial.setPort(self, value)
-
-    def fromURL(self, url):
-        """extract host and port from an URL string"""
-        if url.lower().startswith("hwgrep://"): url = url[9:]
-        # use a for loop to get the 1st element from the generator
-        for port, desc, hwid in serial.tools.list_ports.grep(url):
-            return port
-        else:
-            raise serial.SerialException('no ports found matching regexp %r' % (url,))
-
-    # override property
-    port = property(serial.Serial.getPort, setPort, doc="Port setting")
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-if __name__ == '__main__':
-    #~ s = Serial('hwgrep://ttyS0')
-    s = Serial(None)
-    s.port = 'hwgrep://ttyS0'
-    print s
-
diff --git a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_loop.py b/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_loop.py
deleted file mode 100644
index 7da94ad..0000000
--- a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_loop.py
+++ /dev/null
@@ -1,265 +0,0 @@
-#! python
-#
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see __init__.py
-#
-# This module implements a loop back connection receiving itself what it sent.
-#
-# The purpose of this module is.. well... You can run the unit tests with it.
-# and it was so easy to implement ;-)
-#
-# (C) 2001-2011 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-#
-# URL format:    loop://[option[/option...]]
-# options:
-# - "debug" print diagnostic messages
-
-from serial.serialutil import *
-import threading
-import time
-import logging
-
-# map log level names to constants. used in fromURL()
-LOGGER_LEVELS = {
-    'debug': logging.DEBUG,
-    'info': logging.INFO,
-    'warning': logging.WARNING,
-    'error': logging.ERROR,
-    }
-
-
-class LoopbackSerial(SerialBase):
-    """Serial port implementation that simulates a loop back connection in plain software."""
-
-    BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
-                 9600, 19200, 38400, 57600, 115200)
-
-    def open(self):
-        """Open port with current settings. This may throw a SerialException
-           if the port cannot be opened."""
-        if self._isOpen:
-            raise SerialException("Port is already open.")
-        self.logger = None
-        self.buffer_lock = threading.Lock()
-        self.loop_buffer = bytearray()
-        self.cts = False
-        self.dsr = False
-
-        if self._port is None:
-            raise SerialException("Port must be configured before it can be used.")
-        # not that there is anything to open, but the function applies the
-        # options found in the URL
-        self.fromURL(self.port)
-
-        # not that there anything to configure...
-        self._reconfigurePort()
-        # all things set up get, now a clean start
-        self._isOpen = True
-        if not self._rtscts:
-            self.setRTS(True)
-            self.setDTR(True)
-        self.flushInput()
-        self.flushOutput()
-
-    def _reconfigurePort(self):
-        """Set communication parameters on opened port. for the loop://
-        protocol all settings are ignored!"""
-        # not that's it of any real use, but it helps in the unit tests
-        if not isinstance(self._baudrate, (int, long)) or not 0 < self._baudrate < 2**32:
-            raise ValueError("invalid baudrate: %r" % (self._baudrate))
-        if self.logger:
-            self.logger.info('_reconfigurePort()')
-
-    def close(self):
-        """Close port"""
-        if self._isOpen:
-            self._isOpen = False
-            # in case of quick reconnects, give the server some time
-            time.sleep(0.3)
-
-    def makeDeviceName(self, port):
-        raise SerialException("there is no sensible way to turn numbers into URLs")
-
-    def fromURL(self, url):
-        """extract host and port from an URL string"""
-        if url.lower().startswith("loop://"): url = url[7:]
-        try:
-            # process options now, directly altering self
-            for option in url.split('/'):
-                if '=' in option:
-                    option, value = option.split('=', 1)
-                else:
-                    value = None
-                if not option:
-                    pass
-                elif option == 'logging':
-                    logging.basicConfig()   # XXX is that good to call it here?
-                    self.logger = logging.getLogger('pySerial.loop')
-                    self.logger.setLevel(LOGGER_LEVELS[value])
-                    self.logger.debug('enabled logging')
-                else:
-                    raise ValueError('unknown option: %r' % (option,))
-        except ValueError, e:
-            raise SerialException('expected a string in the form "[loop://][option[/option...]]": %s' % e)
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def inWaiting(self):
-        """Return the number of characters currently in the input buffer."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            # attention the logged value can differ from return value in
-            # threaded environments...
-            self.logger.debug('inWaiting() -> %d' % (len(self.loop_buffer),))
-        return len(self.loop_buffer)
-
-    def read(self, size=1):
-        """Read size bytes from the serial port. If a timeout is set it may
-        return less characters as requested. With no timeout it will block
-        until the requested number of bytes is read."""
-        if not self._isOpen: raise portNotOpenError
-        if self._timeout is not None:
-            timeout = time.time() + self._timeout
-        else:
-            timeout = None
-        data = bytearray()
-        while size > 0:
-            self.buffer_lock.acquire()
-            try:
-                block = to_bytes(self.loop_buffer[:size])
-                del self.loop_buffer[:size]
-            finally:
-                self.buffer_lock.release()
-            data += block
-            size -= len(block)
-            # check for timeout now, after data has been read.
-            # useful for timeout = 0 (non blocking) read
-            if timeout and time.time() > timeout:
-                break
-        return bytes(data)
-
-    def write(self, data):
-        """Output the given string over the serial port. Can block if the
-        connection is blocked. May raise SerialException if the connection is
-        closed."""
-        if not self._isOpen: raise portNotOpenError
-        # ensure we're working with bytes
-        data = to_bytes(data)
-        # calculate aprox time that would be used to send the data
-        time_used_to_send = 10.0*len(data) / self._baudrate
-        # when a write timeout is configured check if we would be successful
-        # (not sending anything, not even the part that would have time)
-        if self._writeTimeout is not None and time_used_to_send > self._writeTimeout:
-            time.sleep(self._writeTimeout) # must wait so that unit test succeeds
-            raise writeTimeoutError
-        self.buffer_lock.acquire()
-        try:
-            self.loop_buffer += data
-        finally:
-            self.buffer_lock.release()
-        return len(data)
-
-    def flushInput(self):
-        """Clear input buffer, discarding all that is in the buffer."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('flushInput()')
-        self.buffer_lock.acquire()
-        try:
-            del self.loop_buffer[:]
-        finally:
-            self.buffer_lock.release()
-
-    def flushOutput(self):
-        """Clear output buffer, aborting the current output and
-        discarding all that is in the buffer."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('flushOutput()')
-
-    def sendBreak(self, duration=0.25):
-        """Send break condition. Timed, returns to idle state after given
-        duration."""
-        if not self._isOpen: raise portNotOpenError
-
-    def setBreak(self, level=True):
-        """Set break: Controls TXD. When active, to transmitting is
-        possible."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('setBreak(%r)' % (level,))
-
-    def setRTS(self, level=True):
-        """Set terminal status line: Request To Send"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('setRTS(%r) -> state of CTS' % (level,))
-        self.cts = level
-
-    def setDTR(self, level=True):
-        """Set terminal status line: Data Terminal Ready"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('setDTR(%r) -> state of DSR' % (level,))
-        self.dsr = level
-
-    def getCTS(self):
-        """Read terminal status line: Clear To Send"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('getCTS() -> state of RTS (%r)' % (self.cts,))
-        return self.cts
-
-    def getDSR(self):
-        """Read terminal status line: Data Set Ready"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('getDSR() -> state of DTR (%r)' % (self.dsr,))
-        return self.dsr
-
-    def getRI(self):
-        """Read terminal status line: Ring Indicator"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('returning dummy for getRI()')
-        return False
-
-    def getCD(self):
-        """Read terminal status line: Carrier Detect"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('returning dummy for getCD()')
-        return True
-
-    # - - - platform specific - - -
-    # None so far
-
-
-# assemble Serial class with the platform specific implementation and the base
-# for file-like behavior. for Python 2.6 and newer, that provide the new I/O
-# library, derive from io.RawIOBase
-try:
-    import io
-except ImportError:
-    # classic version with our own file-like emulation
-    class Serial(LoopbackSerial, FileLike):
-        pass
-else:
-    # io library present
-    class Serial(LoopbackSerial, io.RawIOBase):
-        pass
-
-
-# simple client test
-if __name__ == '__main__':
-    import sys
-    s = Serial('loop://')
-    sys.stdout.write('%s\n' % s)
-
-    sys.stdout.write("write...\n")
-    s.write("hello\n")
-    s.flush()
-    sys.stdout.write("read: %s\n" % s.read(5))
-
-    s.close()
diff --git a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_rfc2217.py b/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_rfc2217.py
deleted file mode 100644
index 981ba45..0000000
--- a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_rfc2217.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#! python
-#
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see ../__init__.py
-#
-# This is a thin wrapper to load the rfc2271 implementation.
-#
-# (C) 2011 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-
-from serial.rfc2217 import Serial
diff --git a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_socket.py b/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_socket.py
deleted file mode 100644
index c90a8e4..0000000
--- a/systrace/catapult/third_party/pyserial/serial/urlhandler/protocol_socket.py
+++ /dev/null
@@ -1,274 +0,0 @@
-#! python
-#
-# Python Serial Port Extension for Win32, Linux, BSD, Jython
-# see __init__.py
-#
-# This module implements a simple socket based client.
-# It does not support changing any port parameters and will silently ignore any
-# requests to do so.
-#
-# The purpose of this module is that applications using pySerial can connect to
-# TCP/IP to serial port converters that do not support RFC 2217.
-#
-# (C) 2001-2011 Chris Liechti <cliechti@gmx.net>
-# this is distributed under a free software license, see license.txt
-#
-# URL format:    socket://<host>:<port>[/option[/option...]]
-# options:
-# - "debug" print diagnostic messages
-
-from serial.serialutil import *
-import time
-import socket
-import logging
-
-# map log level names to constants. used in fromURL()
-LOGGER_LEVELS = {
-    'debug': logging.DEBUG,
-    'info': logging.INFO,
-    'warning': logging.WARNING,
-    'error': logging.ERROR,
-    }
-
-POLL_TIMEOUT = 2
-
-class SocketSerial(SerialBase):
-    """Serial port implementation for plain sockets."""
-
-    BAUDRATES = (50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
-                 9600, 19200, 38400, 57600, 115200)
-
-    def open(self):
-        """Open port with current settings. This may throw a SerialException
-           if the port cannot be opened."""
-        self.logger = None
-        if self._port is None:
-            raise SerialException("Port must be configured before it can be used.")
-        if self._isOpen:
-            raise SerialException("Port is already open.")
-        try:
-            # XXX in future replace with create_connection (py >=2.6)
-            self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            self._socket.connect(self.fromURL(self.portstr))
-        except Exception, msg:
-            self._socket = None
-            raise SerialException("Could not open port %s: %s" % (self.portstr, msg))
-
-        self._socket.settimeout(POLL_TIMEOUT) # used for write timeout support :/
-
-        # not that there anything to configure...
-        self._reconfigurePort()
-        # all things set up get, now a clean start
-        self._isOpen = True
-        if not self._rtscts:
-            self.setRTS(True)
-            self.setDTR(True)
-        self.flushInput()
-        self.flushOutput()
-
-    def _reconfigurePort(self):
-        """Set communication parameters on opened port. for the socket://
-        protocol all settings are ignored!"""
-        if self._socket is None:
-            raise SerialException("Can only operate on open ports")
-        if self.logger:
-            self.logger.info('ignored port configuration change')
-
-    def close(self):
-        """Close port"""
-        if self._isOpen:
-            if self._socket:
-                try:
-                    self._socket.shutdown(socket.SHUT_RDWR)
-                    self._socket.close()
-                except:
-                    # ignore errors.
-                    pass
-                self._socket = None
-            self._isOpen = False
-            # in case of quick reconnects, give the server some time
-            time.sleep(0.3)
-
-    def makeDeviceName(self, port):
-        raise SerialException("there is no sensible way to turn numbers into URLs")
-
-    def fromURL(self, url):
-        """extract host and port from an URL string"""
-        if url.lower().startswith("socket://"): url = url[9:]
-        try:
-            # is there a "path" (our options)?
-            if '/' in url:
-                # cut away options
-                url, options = url.split('/', 1)
-                # process options now, directly altering self
-                for option in options.split('/'):
-                    if '=' in option:
-                        option, value = option.split('=', 1)
-                    else:
-                        value = None
-                    if option == 'logging':
-                        logging.basicConfig()   # XXX is that good to call it here?
-                        self.logger = logging.getLogger('pySerial.socket')
-                        self.logger.setLevel(LOGGER_LEVELS[value])
-                        self.logger.debug('enabled logging')
-                    else:
-                        raise ValueError('unknown option: %r' % (option,))
-            # get host and port
-            host, port = url.split(':', 1) # may raise ValueError because of unpacking
-            port = int(port)               # and this if it's not a number
-            if not 0 <= port < 65536: raise ValueError("port not in range 0...65535")
-        except ValueError, e:
-            raise SerialException('expected a string in the form "[rfc2217://]<host>:<port>[/option[/option...]]": %s' % e)
-        return (host, port)
-
-    #  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-
-    def inWaiting(self):
-        """Return the number of characters currently in the input buffer."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            # set this one to debug as the function could be called often...
-            self.logger.debug('WARNING: inWaiting returns dummy value')
-        return 0 # hmmm, see comment in read()
-
-    def read(self, size=1):
-        """Read size bytes from the serial port. If a timeout is set it may
-        return less characters as requested. With no timeout it will block
-        until the requested number of bytes is read."""
-        if not self._isOpen: raise portNotOpenError
-        data = bytearray()
-        if self._timeout is not None:
-            timeout = time.time() + self._timeout
-        else:
-            timeout = None
-        while len(data) < size and (timeout is None or time.time() < timeout):
-            try:
-                # an implementation with internal buffer would be better
-                # performing...
-                t = time.time()
-                block = self._socket.recv(size - len(data))
-                duration = time.time() - t
-                if block:
-                    data.extend(block)
-                else:
-                    # no data -> EOF (connection probably closed)
-                    break
-            except socket.timeout:
-                # just need to get out of recv from time to time to check if
-                # still alive
-                continue
-            except socket.error, e:
-                # connection fails -> terminate loop
-                raise SerialException('connection failed (%s)' % e)
-        return bytes(data)
-
-    def write(self, data):
-        """Output the given string over the serial port. Can block if the
-        connection is blocked. May raise SerialException if the connection is
-        closed."""
-        if not self._isOpen: raise portNotOpenError
-        try:
-            self._socket.sendall(to_bytes(data))
-        except socket.error, e:
-            # XXX what exception if socket connection fails
-            raise SerialException("socket connection failed: %s" % e)
-        return len(data)
-
-    def flushInput(self):
-        """Clear input buffer, discarding all that is in the buffer."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('ignored flushInput')
-
-    def flushOutput(self):
-        """Clear output buffer, aborting the current output and
-        discarding all that is in the buffer."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('ignored flushOutput')
-
-    def sendBreak(self, duration=0.25):
-        """Send break condition. Timed, returns to idle state after given
-        duration."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('ignored sendBreak(%r)' % (duration,))
-
-    def setBreak(self, level=True):
-        """Set break: Controls TXD. When active, to transmitting is
-        possible."""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('ignored setBreak(%r)' % (level,))
-
-    def setRTS(self, level=True):
-        """Set terminal status line: Request To Send"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('ignored setRTS(%r)' % (level,))
-
-    def setDTR(self, level=True):
-        """Set terminal status line: Data Terminal Ready"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('ignored setDTR(%r)' % (level,))
-
-    def getCTS(self):
-        """Read terminal status line: Clear To Send"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('returning dummy for getCTS()')
-        return True
-
-    def getDSR(self):
-        """Read terminal status line: Data Set Ready"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('returning dummy for getDSR()')
-        return True
-
-    def getRI(self):
-        """Read terminal status line: Ring Indicator"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('returning dummy for getRI()')
-        return False
-
-    def getCD(self):
-        """Read terminal status line: Carrier Detect"""
-        if not self._isOpen: raise portNotOpenError
-        if self.logger:
-            self.logger.info('returning dummy for getCD()')
-        return True
-
-    # - - - platform specific - - -
-    # None so far
-
-
-# assemble Serial class with the platform specific implementation and the base
-# for file-like behavior. for Python 2.6 and newer, that provide the new I/O
-# library, derive from io.RawIOBase
-try:
-    import io
-except ImportError:
-    # classic version with our own file-like emulation
-    class Serial(SocketSerial, FileLike):
-        pass
-else:
-    # io library present
-    class Serial(SocketSerial, io.RawIOBase):
-        pass
-
-
-# simple client test
-if __name__ == '__main__':
-    import sys
-    s = Serial('socket://localhost:7000')
-    sys.stdout.write('%s\n' % s)
-
-    sys.stdout.write("write...\n")
-    s.write("hello\n")
-    s.flush()
-    sys.stdout.write("read: %s\n" % s.read(5))
-
-    s.close()
diff --git a/systrace/catapult/third_party/pyserial/serial/win32.py b/systrace/catapult/third_party/pyserial/serial/win32.py
deleted file mode 100644
index 61b3d7a..0000000
--- a/systrace/catapult/third_party/pyserial/serial/win32.py
+++ /dev/null
@@ -1,320 +0,0 @@
-from ctypes import *
-from ctypes.wintypes import HANDLE
-from ctypes.wintypes import BOOL
-from ctypes.wintypes import LPCWSTR
-_stdcall_libraries = {}
-_stdcall_libraries['kernel32'] = WinDLL('kernel32')
-from ctypes.wintypes import DWORD
-from ctypes.wintypes import WORD
-from ctypes.wintypes import BYTE
-
-INVALID_HANDLE_VALUE = HANDLE(-1).value
-
-# some details of the windows API differ between 32 and 64 bit systems..
-def is_64bit():
-    """Returns true when running on a 64 bit system"""
-    return sizeof(c_ulong) != sizeof(c_void_p)
-
-# ULONG_PTR is a an ordinary number, not a pointer and contrary to the name it
-# is either 32 or 64 bits, depending on the type of windows...
-# so test if this a 32 bit windows...
-if is_64bit():
-    # assume 64 bits
-    ULONG_PTR = c_int64
-else:
-    # 32 bits
-    ULONG_PTR = c_ulong
-
-
-class _SECURITY_ATTRIBUTES(Structure):
-    pass
-LPSECURITY_ATTRIBUTES = POINTER(_SECURITY_ATTRIBUTES)
-
-
-try:
-    CreateEventW = _stdcall_libraries['kernel32'].CreateEventW
-except AttributeError:
-    # Fallback to non wide char version for old OS...
-    from ctypes.wintypes import LPCSTR
-    CreateEventA = _stdcall_libraries['kernel32'].CreateEventA
-    CreateEventA.restype = HANDLE
-    CreateEventA.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCSTR]
-    CreateEvent=CreateEventA
-
-    CreateFileA = _stdcall_libraries['kernel32'].CreateFileA
-    CreateFileA.restype = HANDLE
-    CreateFileA.argtypes = [LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE]
-    CreateFile = CreateFileA
-else:
-    CreateEventW.restype = HANDLE
-    CreateEventW.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCWSTR]
-    CreateEvent = CreateEventW # alias
-
-    CreateFileW = _stdcall_libraries['kernel32'].CreateFileW
-    CreateFileW.restype = HANDLE
-    CreateFileW.argtypes = [LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE]
-    CreateFile = CreateFileW # alias
-
-class _OVERLAPPED(Structure):
-    pass
-OVERLAPPED = _OVERLAPPED
-
-class _COMSTAT(Structure):
-    pass
-COMSTAT = _COMSTAT
-
-class _DCB(Structure):
-    pass
-DCB = _DCB
-
-class _COMMTIMEOUTS(Structure):
-    pass
-COMMTIMEOUTS = _COMMTIMEOUTS
-
-GetLastError = _stdcall_libraries['kernel32'].GetLastError
-GetLastError.restype = DWORD
-GetLastError.argtypes = []
-
-LPOVERLAPPED = POINTER(_OVERLAPPED)
-LPDWORD = POINTER(DWORD)
-
-GetOverlappedResult = _stdcall_libraries['kernel32'].GetOverlappedResult
-GetOverlappedResult.restype = BOOL
-GetOverlappedResult.argtypes = [HANDLE, LPOVERLAPPED, LPDWORD, BOOL]
-
-ResetEvent = _stdcall_libraries['kernel32'].ResetEvent
-ResetEvent.restype = BOOL
-ResetEvent.argtypes = [HANDLE]
-
-LPCVOID = c_void_p
-
-WriteFile = _stdcall_libraries['kernel32'].WriteFile
-WriteFile.restype = BOOL
-WriteFile.argtypes = [HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED]
-
-LPVOID = c_void_p
-
-ReadFile = _stdcall_libraries['kernel32'].ReadFile
-ReadFile.restype = BOOL
-ReadFile.argtypes = [HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED]
-
-CloseHandle = _stdcall_libraries['kernel32'].CloseHandle
-CloseHandle.restype = BOOL
-CloseHandle.argtypes = [HANDLE]
-
-ClearCommBreak = _stdcall_libraries['kernel32'].ClearCommBreak
-ClearCommBreak.restype = BOOL
-ClearCommBreak.argtypes = [HANDLE]
-
-LPCOMSTAT = POINTER(_COMSTAT)
-
-ClearCommError = _stdcall_libraries['kernel32'].ClearCommError
-ClearCommError.restype = BOOL
-ClearCommError.argtypes = [HANDLE, LPDWORD, LPCOMSTAT]
-
-SetupComm = _stdcall_libraries['kernel32'].SetupComm
-SetupComm.restype = BOOL
-SetupComm.argtypes = [HANDLE, DWORD, DWORD]
-
-EscapeCommFunction = _stdcall_libraries['kernel32'].EscapeCommFunction
-EscapeCommFunction.restype = BOOL
-EscapeCommFunction.argtypes = [HANDLE, DWORD]
-
-GetCommModemStatus = _stdcall_libraries['kernel32'].GetCommModemStatus
-GetCommModemStatus.restype = BOOL
-GetCommModemStatus.argtypes = [HANDLE, LPDWORD]
-
-LPDCB = POINTER(_DCB)
-
-GetCommState = _stdcall_libraries['kernel32'].GetCommState
-GetCommState.restype = BOOL
-GetCommState.argtypes = [HANDLE, LPDCB]
-
-LPCOMMTIMEOUTS = POINTER(_COMMTIMEOUTS)
-
-GetCommTimeouts = _stdcall_libraries['kernel32'].GetCommTimeouts
-GetCommTimeouts.restype = BOOL
-GetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS]
-
-PurgeComm = _stdcall_libraries['kernel32'].PurgeComm
-PurgeComm.restype = BOOL
-PurgeComm.argtypes = [HANDLE, DWORD]
-
-SetCommBreak = _stdcall_libraries['kernel32'].SetCommBreak
-SetCommBreak.restype = BOOL
-SetCommBreak.argtypes = [HANDLE]
-
-SetCommMask = _stdcall_libraries['kernel32'].SetCommMask
-SetCommMask.restype = BOOL
-SetCommMask.argtypes = [HANDLE, DWORD]
-
-SetCommState = _stdcall_libraries['kernel32'].SetCommState
-SetCommState.restype = BOOL
-SetCommState.argtypes = [HANDLE, LPDCB]
-
-SetCommTimeouts = _stdcall_libraries['kernel32'].SetCommTimeouts
-SetCommTimeouts.restype = BOOL
-SetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS]
-
-WaitForSingleObject = _stdcall_libraries['kernel32'].WaitForSingleObject
-WaitForSingleObject.restype = DWORD
-WaitForSingleObject.argtypes = [HANDLE, DWORD]
-
-ONESTOPBIT = 0 # Variable c_int
-TWOSTOPBITS = 2 # Variable c_int
-ONE5STOPBITS = 1
-
-NOPARITY = 0 # Variable c_int
-ODDPARITY = 1 # Variable c_int
-EVENPARITY = 2 # Variable c_int
-MARKPARITY = 3
-SPACEPARITY = 4
-
-RTS_CONTROL_HANDSHAKE = 2 # Variable c_int
-RTS_CONTROL_DISABLE = 0 # Variable c_int
-RTS_CONTROL_ENABLE = 1 # Variable c_int
-RTS_CONTROL_TOGGLE = 3 # Variable c_int
-SETRTS = 3
-CLRRTS = 4
-
-DTR_CONTROL_HANDSHAKE = 2 # Variable c_int
-DTR_CONTROL_DISABLE = 0 # Variable c_int
-DTR_CONTROL_ENABLE = 1 # Variable c_int
-SETDTR = 5
-CLRDTR = 6
-
-MS_DSR_ON = 32 # Variable c_ulong
-EV_RING = 256 # Variable c_int
-EV_PERR = 512 # Variable c_int
-EV_ERR = 128 # Variable c_int
-SETXOFF = 1 # Variable c_int
-EV_RXCHAR = 1 # Variable c_int
-GENERIC_WRITE = 1073741824 # Variable c_long
-PURGE_TXCLEAR = 4 # Variable c_int
-FILE_FLAG_OVERLAPPED = 1073741824 # Variable c_int
-EV_DSR = 16 # Variable c_int
-MAXDWORD = 4294967295L # Variable c_uint
-EV_RLSD = 32 # Variable c_int
-ERROR_IO_PENDING = 997 # Variable c_long
-MS_CTS_ON = 16 # Variable c_ulong
-EV_EVENT1 = 2048 # Variable c_int
-EV_RX80FULL = 1024 # Variable c_int
-PURGE_RXABORT = 2 # Variable c_int
-FILE_ATTRIBUTE_NORMAL = 128 # Variable c_int
-PURGE_TXABORT = 1 # Variable c_int
-SETXON = 2 # Variable c_int
-OPEN_EXISTING = 3 # Variable c_int
-MS_RING_ON = 64 # Variable c_ulong
-EV_TXEMPTY = 4 # Variable c_int
-EV_RXFLAG = 2 # Variable c_int
-MS_RLSD_ON = 128 # Variable c_ulong
-GENERIC_READ = 2147483648L # Variable c_ulong
-EV_EVENT2 = 4096 # Variable c_int
-EV_CTS = 8 # Variable c_int
-EV_BREAK = 64 # Variable c_int
-PURGE_RXCLEAR = 8 # Variable c_int
-INFINITE = 0xFFFFFFFFL
-
-
-class N11_OVERLAPPED4DOLLAR_48E(Union):
-    pass
-class N11_OVERLAPPED4DOLLAR_484DOLLAR_49E(Structure):
-    pass
-N11_OVERLAPPED4DOLLAR_484DOLLAR_49E._fields_ = [
-    ('Offset', DWORD),
-    ('OffsetHigh', DWORD),
-]
-
-PVOID = c_void_p
-
-N11_OVERLAPPED4DOLLAR_48E._anonymous_ = ['_0']
-N11_OVERLAPPED4DOLLAR_48E._fields_ = [
-    ('_0', N11_OVERLAPPED4DOLLAR_484DOLLAR_49E),
-    ('Pointer', PVOID),
-]
-_OVERLAPPED._anonymous_ = ['_0']
-_OVERLAPPED._fields_ = [
-    ('Internal', ULONG_PTR),
-    ('InternalHigh', ULONG_PTR),
-    ('_0', N11_OVERLAPPED4DOLLAR_48E),
-    ('hEvent', HANDLE),
-]
-_SECURITY_ATTRIBUTES._fields_ = [
-    ('nLength', DWORD),
-    ('lpSecurityDescriptor', LPVOID),
-    ('bInheritHandle', BOOL),
-]
-_COMSTAT._fields_ = [
-    ('fCtsHold', DWORD, 1),
-    ('fDsrHold', DWORD, 1),
-    ('fRlsdHold', DWORD, 1),
-    ('fXoffHold', DWORD, 1),
-    ('fXoffSent', DWORD, 1),
-    ('fEof', DWORD, 1),
-    ('fTxim', DWORD, 1),
-    ('fReserved', DWORD, 25),
-    ('cbInQue', DWORD),
-    ('cbOutQue', DWORD),
-]
-_DCB._fields_ = [
-    ('DCBlength', DWORD),
-    ('BaudRate', DWORD),
-    ('fBinary', DWORD, 1),
-    ('fParity', DWORD, 1),
-    ('fOutxCtsFlow', DWORD, 1),
-    ('fOutxDsrFlow', DWORD, 1),
-    ('fDtrControl', DWORD, 2),
-    ('fDsrSensitivity', DWORD, 1),
-    ('fTXContinueOnXoff', DWORD, 1),
-    ('fOutX', DWORD, 1),
-    ('fInX', DWORD, 1),
-    ('fErrorChar', DWORD, 1),
-    ('fNull', DWORD, 1),
-    ('fRtsControl', DWORD, 2),
-    ('fAbortOnError', DWORD, 1),
-    ('fDummy2', DWORD, 17),
-    ('wReserved', WORD),
-    ('XonLim', WORD),
-    ('XoffLim', WORD),
-    ('ByteSize', BYTE),
-    ('Parity', BYTE),
-    ('StopBits', BYTE),
-    ('XonChar', c_char),
-    ('XoffChar', c_char),
-    ('ErrorChar', c_char),
-    ('EofChar', c_char),
-    ('EvtChar', c_char),
-    ('wReserved1', WORD),
-]
-_COMMTIMEOUTS._fields_ = [
-    ('ReadIntervalTimeout', DWORD),
-    ('ReadTotalTimeoutMultiplier', DWORD),
-    ('ReadTotalTimeoutConstant', DWORD),
-    ('WriteTotalTimeoutMultiplier', DWORD),
-    ('WriteTotalTimeoutConstant', DWORD),
-]
-__all__ = ['GetLastError', 'MS_CTS_ON', 'FILE_ATTRIBUTE_NORMAL',
-           'DTR_CONTROL_ENABLE', '_COMSTAT', 'MS_RLSD_ON',
-           'GetOverlappedResult', 'SETXON', 'PURGE_TXABORT',
-           'PurgeComm', 'N11_OVERLAPPED4DOLLAR_48E', 'EV_RING',
-           'ONESTOPBIT', 'SETXOFF', 'PURGE_RXABORT', 'GetCommState',
-           'RTS_CONTROL_ENABLE', '_DCB', 'CreateEvent',
-           '_COMMTIMEOUTS', '_SECURITY_ATTRIBUTES', 'EV_DSR',
-           'EV_PERR', 'EV_RXFLAG', 'OPEN_EXISTING', 'DCB',
-           'FILE_FLAG_OVERLAPPED', 'EV_CTS', 'SetupComm',
-           'LPOVERLAPPED', 'EV_TXEMPTY', 'ClearCommBreak',
-           'LPSECURITY_ATTRIBUTES', 'SetCommBreak', 'SetCommTimeouts',
-           'COMMTIMEOUTS', 'ODDPARITY', 'EV_RLSD',
-           'GetCommModemStatus', 'EV_EVENT2', 'PURGE_TXCLEAR',
-           'EV_BREAK', 'EVENPARITY', 'LPCVOID', 'COMSTAT', 'ReadFile',
-           'PVOID', '_OVERLAPPED', 'WriteFile', 'GetCommTimeouts',
-           'ResetEvent', 'EV_RXCHAR', 'LPCOMSTAT', 'ClearCommError',
-           'ERROR_IO_PENDING', 'EscapeCommFunction', 'GENERIC_READ',
-           'RTS_CONTROL_HANDSHAKE', 'OVERLAPPED',
-           'DTR_CONTROL_HANDSHAKE', 'PURGE_RXCLEAR', 'GENERIC_WRITE',
-           'LPDCB', 'CreateEventW', 'SetCommMask', 'EV_EVENT1',
-           'SetCommState', 'LPVOID', 'CreateFileW', 'LPDWORD',
-           'EV_RX80FULL', 'TWOSTOPBITS', 'LPCOMMTIMEOUTS', 'MAXDWORD',
-           'MS_DSR_ON', 'MS_RING_ON',
-           'N11_OVERLAPPED4DOLLAR_484DOLLAR_49E', 'EV_ERR',
-           'ULONG_PTR', 'CreateFile', 'NOPARITY', 'CloseHandle']
diff --git a/systrace/catapult/third_party/zipfile/LICENSE b/systrace/catapult/third_party/zipfile/LICENSE
deleted file mode 100644
index 84a3337..0000000
--- a/systrace/catapult/third_party/zipfile/LICENSE
+++ /dev/null
@@ -1,255 +0,0 @@
-A. HISTORY OF THE SOFTWARE
-==========================
-
-Python was created in the early 1990s by Guido van Rossum at Stichting
-Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
-as a successor of a language called ABC.  Guido remains Python's
-principal author, although it includes many contributions from others.
-
-In 1995, Guido continued his work on Python at the Corporation for
-National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
-in Reston, Virginia where he released several versions of the
-software.
-
-In May 2000, Guido and the Python core development team moved to
-BeOpen.com to form the BeOpen PythonLabs team.  In October of the same
-year, the PythonLabs team moved to Digital Creations (now Zope
-Corporation, see http://www.zope.com).  In 2001, the Python Software
-Foundation (PSF, see http://www.python.org/psf/) was formed, a
-non-profit organization created specifically to own Python-related
-Intellectual Property.  Zope Corporation is a sponsoring member of
-the PSF.
-
-All Python releases are Open Source (see http://www.opensource.org for
-the Open Source Definition).  Historically, most, but not all, Python
-releases have also been GPL-compatible; the table below summarizes
-the various releases.
-
-    Release         Derived     Year        Owner       GPL-
-                    from                                compatible? (1)
-
-    0.9.0 thru 1.2              1991-1995   CWI         yes
-    1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes
-    1.6             1.5.2       2000        CNRI        no
-    2.0             1.6         2000        BeOpen.com  no
-    1.6.1           1.6         2001        CNRI        yes (2)
-    2.1             2.0+1.6.1   2001        PSF         no
-    2.0.1           2.0+1.6.1   2001        PSF         yes
-    2.1.1           2.1+2.0.1   2001        PSF         yes
-    2.1.2           2.1.1       2002        PSF         yes
-    2.1.3           2.1.2       2002        PSF         yes
-    2.2 and above   2.1.1       2001-now    PSF         yes
-
-Footnotes:
-
-(1) GPL-compatible doesn't mean that we're distributing Python under
-    the GPL.  All Python licenses, unlike the GPL, let you distribute
-    a modified version without making your changes open source.  The
-    GPL-compatible licenses make it possible to combine Python with
-    other software that is released under the GPL; the others don't.
-
-(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
-    because its license has a choice of law clause.  According to
-    CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
-    is "not incompatible" with the GPL.
-
-Thanks to the many outside volunteers who have worked under Guido's
-direction to make these releases possible.
-
-
-B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
-===============================================================
-
-PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
---------------------------------------------
-
-1. This LICENSE AGREEMENT is between the Python Software Foundation
-("PSF"), and the Individual or Organization ("Licensee") accessing and
-otherwise using this software ("Python") in source or binary form and
-its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, PSF hereby
-grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
-analyze, test, perform and/or display publicly, prepare derivative works,
-distribute, and otherwise use Python alone or in any derivative version,
-provided, however, that PSF's License Agreement and PSF's notice of copyright,
-i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights
-Reserved" are retained in Python alone or in any derivative version prepared by
-Licensee.
-
-3. In the event Licensee prepares a derivative work that is based on
-or incorporates Python or any part thereof, and wants to make
-the derivative work available to others as provided herein, then
-Licensee hereby agrees to include in any such work a brief summary of
-the changes made to Python.
-
-4. PSF is making Python available to Licensee on an "AS IS"
-basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
-OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-7. Nothing in this License Agreement shall be deemed to create any
-relationship of agency, partnership, or joint venture between PSF and
-Licensee.  This License Agreement does not grant permission to use PSF
-trademarks or trade name in a trademark sense to endorse or promote
-products or services of Licensee, or any third party.
-
-8. By copying, installing or otherwise using Python, Licensee
-agrees to be bound by the terms and conditions of this License
-Agreement.
-
-
-BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
--------------------------------------------
-
-BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
-
-1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
-office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
-Individual or Organization ("Licensee") accessing and otherwise using
-this software in source or binary form and its associated
-documentation ("the Software").
-
-2. Subject to the terms and conditions of this BeOpen Python License
-Agreement, BeOpen hereby grants Licensee a non-exclusive,
-royalty-free, world-wide license to reproduce, analyze, test, perform
-and/or display publicly, prepare derivative works, distribute, and
-otherwise use the Software alone or in any derivative version,
-provided, however, that the BeOpen Python License is retained in the
-Software, alone or in any derivative version prepared by Licensee.
-
-3. BeOpen is making the Software available to Licensee on an "AS IS"
-basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
-SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
-AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
-DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-5. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-6. This License Agreement shall be governed by and interpreted in all
-respects by the law of the State of California, excluding conflict of
-law provisions.  Nothing in this License Agreement shall be deemed to
-create any relationship of agency, partnership, or joint venture
-between BeOpen and Licensee.  This License Agreement does not grant
-permission to use BeOpen trademarks or trade names in a trademark
-sense to endorse or promote products or services of Licensee, or any
-third party.  As an exception, the "BeOpen Python" logos available at
-http://www.pythonlabs.com/logos.html may be used according to the
-permissions granted on that web page.
-
-7. By copying, installing or otherwise using the software, Licensee
-agrees to be bound by the terms and conditions of this License
-Agreement.
-
-
-CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
----------------------------------------
-
-1. This LICENSE AGREEMENT is between the Corporation for National
-Research Initiatives, having an office at 1895 Preston White Drive,
-Reston, VA 20191 ("CNRI"), and the Individual or Organization
-("Licensee") accessing and otherwise using Python 1.6.1 software in
-source or binary form and its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, CNRI
-hereby grants Licensee a nonexclusive, royalty-free, world-wide
-license to reproduce, analyze, test, perform and/or display publicly,
-prepare derivative works, distribute, and otherwise use Python 1.6.1
-alone or in any derivative version, provided, however, that CNRI's
-License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
-1995-2001 Corporation for National Research Initiatives; All Rights
-Reserved" are retained in Python 1.6.1 alone or in any derivative
-version prepared by Licensee.  Alternately, in lieu of CNRI's License
-Agreement, Licensee may substitute the following text (omitting the
-quotes): "Python 1.6.1 is made available subject to the terms and
-conditions in CNRI's License Agreement.  This Agreement together with
-Python 1.6.1 may be located on the Internet using the following
-unique, persistent identifier (known as a handle): 1895.22/1013.  This
-Agreement may also be obtained from a proxy server on the Internet
-using the following URL: http://hdl.handle.net/1895.22/1013".
-
-3. In the event Licensee prepares a derivative work that is based on
-or incorporates Python 1.6.1 or any part thereof, and wants to make
-the derivative work available to others as provided herein, then
-Licensee hereby agrees to include in any such work a brief summary of
-the changes made to Python 1.6.1.
-
-4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
-basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
-DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
-INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
-OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-breach of its terms and conditions.
-
-7. This License Agreement shall be governed by the federal
-intellectual property law of the United States, including without
-limitation the federal copyright law, and, to the extent such
-U.S. federal law does not apply, by the law of the Commonwealth of
-Virginia, excluding Virginia's conflict of law provisions.
-Notwithstanding the foregoing, with regard to derivative works based
-on Python 1.6.1 that incorporate non-separable material that was
-previously distributed under the GNU General Public License (GPL), the
-law of the Commonwealth of Virginia shall govern this License
-Agreement only as to issues arising under or with respect to
-Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
-License Agreement shall be deemed to create any relationship of
-agency, partnership, or joint venture between CNRI and Licensee.  This
-License Agreement does not grant permission to use CNRI trademarks or
-trade name in a trademark sense to endorse or promote products or
-services of Licensee, or any third party.
-
-8. By clicking on the "ACCEPT" button where indicated, or by copying,
-installing or otherwise using Python 1.6.1, Licensee agrees to be
-bound by the terms and conditions of this License Agreement.
-
-        ACCEPT
-
-
-CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
---------------------------------------------------
-
-Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
-The Netherlands.  All rights reserved.
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Stichting Mathematisch
-Centrum or CWI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
-THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
-FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
-OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/systrace/catapult/third_party/zipfile/README.chromium b/systrace/catapult/third_party/zipfile/README.chromium
deleted file mode 100644
index f45d3cf..0000000
--- a/systrace/catapult/third_party/zipfile/README.chromium
+++ /dev/null
@@ -1,16 +0,0 @@
-Name: Python zipfile module
-Short Name: zipfile
-URL: https://github.com/python/cpython/blob/master/Lib/zipfile.py
-Version: 2.7.13
-License: Python
-License File: NOT_SHIPPED
-Security Critical: no
-
-Description:
-This is a copy of the zipfile module from Python 2.7.13. This snapshot was
-taken to workaround a bug in older Python versions such as 2.7.3. See
-<https://bugs.python.org/issue6972> and specifically the fix at
-<https://hg.python.org/cpython/rev/0c5fa35c9f12#l3.11>.
-
-Local Modifications:
-Renamed zipfile.py to zipfile_2_7_13.py to avoid conflicting with system copy.
diff --git a/systrace/catapult/third_party/zipfile/zipfile_2_7_13.py b/systrace/catapult/third_party/zipfile/zipfile_2_7_13.py
deleted file mode 100644
index 1d10650..0000000
--- a/systrace/catapult/third_party/zipfile/zipfile_2_7_13.py
+++ /dev/null
@@ -1,1543 +0,0 @@
-"""
-Read and write ZIP files.
-"""
-import struct, os, time, sys, shutil
-import binascii, cStringIO, stat
-import io
-import re
-import string
-
-try:
-    import zlib # We may need its compression method
-    crc32 = zlib.crc32
-except ImportError:
-    zlib = None
-    crc32 = binascii.crc32
-
-__all__ = ["BadZipfile", "error", "ZIP_STORED", "ZIP_DEFLATED", "is_zipfile",
-           "ZipInfo", "ZipFile", "PyZipFile", "LargeZipFile" ]
-
-class BadZipfile(Exception):
-    pass
-
-
-class LargeZipFile(Exception):
-    """
-    Raised when writing a zipfile, the zipfile requires ZIP64 extensions
-    and those extensions are disabled.
-    """
-
-error = BadZipfile      # The exception raised by this module
-
-ZIP64_LIMIT = (1 << 31) - 1
-ZIP_FILECOUNT_LIMIT = (1 << 16) - 1
-ZIP_MAX_COMMENT = (1 << 16) - 1
-
-# constants for Zip file compression methods
-ZIP_STORED = 0
-ZIP_DEFLATED = 8
-# Other ZIP compression methods not supported
-
-# Below are some formats and associated data for reading/writing headers using
-# the struct module.  The names and structures of headers/records are those used
-# in the PKWARE description of the ZIP file format:
-#     http://www.pkware.com/documents/casestudies/APPNOTE.TXT
-# (URL valid as of January 2008)
-
-# The "end of central directory" structure, magic number, size, and indices
-# (section V.I in the format document)
-structEndArchive = "<4s4H2LH"
-stringEndArchive = "PK\005\006"
-sizeEndCentDir = struct.calcsize(structEndArchive)
-
-_ECD_SIGNATURE = 0
-_ECD_DISK_NUMBER = 1
-_ECD_DISK_START = 2
-_ECD_ENTRIES_THIS_DISK = 3
-_ECD_ENTRIES_TOTAL = 4
-_ECD_SIZE = 5
-_ECD_OFFSET = 6
-_ECD_COMMENT_SIZE = 7
-# These last two indices are not part of the structure as defined in the
-# spec, but they are used internally by this module as a convenience
-_ECD_COMMENT = 8
-_ECD_LOCATION = 9
-
-# The "central directory" structure, magic number, size, and indices
-# of entries in the structure (section V.F in the format document)
-structCentralDir = "<4s4B4HL2L5H2L"
-stringCentralDir = "PK\001\002"
-sizeCentralDir = struct.calcsize(structCentralDir)
-
-# indexes of entries in the central directory structure
-_CD_SIGNATURE = 0
-_CD_CREATE_VERSION = 1
-_CD_CREATE_SYSTEM = 2
-_CD_EXTRACT_VERSION = 3
-_CD_EXTRACT_SYSTEM = 4
-_CD_FLAG_BITS = 5
-_CD_COMPRESS_TYPE = 6
-_CD_TIME = 7
-_CD_DATE = 8
-_CD_CRC = 9
-_CD_COMPRESSED_SIZE = 10
-_CD_UNCOMPRESSED_SIZE = 11
-_CD_FILENAME_LENGTH = 12
-_CD_EXTRA_FIELD_LENGTH = 13
-_CD_COMMENT_LENGTH = 14
-_CD_DISK_NUMBER_START = 15
-_CD_INTERNAL_FILE_ATTRIBUTES = 16
-_CD_EXTERNAL_FILE_ATTRIBUTES = 17
-_CD_LOCAL_HEADER_OFFSET = 18
-
-# The "local file header" structure, magic number, size, and indices
-# (section V.A in the format document)
-structFileHeader = "<4s2B4HL2L2H"
-stringFileHeader = "PK\003\004"
-sizeFileHeader = struct.calcsize(structFileHeader)
-
-_FH_SIGNATURE = 0
-_FH_EXTRACT_VERSION = 1
-_FH_EXTRACT_SYSTEM = 2
-_FH_GENERAL_PURPOSE_FLAG_BITS = 3
-_FH_COMPRESSION_METHOD = 4
-_FH_LAST_MOD_TIME = 5
-_FH_LAST_MOD_DATE = 6
-_FH_CRC = 7
-_FH_COMPRESSED_SIZE = 8
-_FH_UNCOMPRESSED_SIZE = 9
-_FH_FILENAME_LENGTH = 10
-_FH_EXTRA_FIELD_LENGTH = 11
-
-# The "Zip64 end of central directory locator" structure, magic number, and size
-structEndArchive64Locator = "<4sLQL"
-stringEndArchive64Locator = "PK\x06\x07"
-sizeEndCentDir64Locator = struct.calcsize(structEndArchive64Locator)
-
-# The "Zip64 end of central directory" record, magic number, size, and indices
-# (section V.G in the format document)
-structEndArchive64 = "<4sQ2H2L4Q"
-stringEndArchive64 = "PK\x06\x06"
-sizeEndCentDir64 = struct.calcsize(structEndArchive64)
-
-_CD64_SIGNATURE = 0
-_CD64_DIRECTORY_RECSIZE = 1
-_CD64_CREATE_VERSION = 2
-_CD64_EXTRACT_VERSION = 3
-_CD64_DISK_NUMBER = 4
-_CD64_DISK_NUMBER_START = 5
-_CD64_NUMBER_ENTRIES_THIS_DISK = 6
-_CD64_NUMBER_ENTRIES_TOTAL = 7
-_CD64_DIRECTORY_SIZE = 8
-_CD64_OFFSET_START_CENTDIR = 9
-
-def _check_zipfile(fp):
-    try:
-        if _EndRecData(fp):
-            return True         # file has correct magic number
-    except IOError:
-        pass
-    return False
-
-def is_zipfile(filename):
-    """Quickly see if a file is a ZIP file by checking the magic number.
-
-    The filename argument may be a file or file-like object too.
-    """
-    result = False
-    try:
-        if hasattr(filename, "read"):
-            result = _check_zipfile(fp=filename)
-        else:
-            with open(filename, "rb") as fp:
-                result = _check_zipfile(fp)
-    except IOError:
-        pass
-    return result
-
-def _EndRecData64(fpin, offset, endrec):
-    """
-    Read the ZIP64 end-of-archive records and use that to update endrec
-    """
-    try:
-        fpin.seek(offset - sizeEndCentDir64Locator, 2)
-    except IOError:
-        # If the seek fails, the file is not large enough to contain a ZIP64
-        # end-of-archive record, so just return the end record we were given.
-        return endrec
-
-    data = fpin.read(sizeEndCentDir64Locator)
-    if len(data) != sizeEndCentDir64Locator:
-        return endrec
-    sig, diskno, reloff, disks = struct.unpack(structEndArchive64Locator, data)
-    if sig != stringEndArchive64Locator:
-        return endrec
-
-    if diskno != 0 or disks != 1:
-        raise BadZipfile("zipfiles that span multiple disks are not supported")
-
-    # Assume no 'zip64 extensible data'
-    fpin.seek(offset - sizeEndCentDir64Locator - sizeEndCentDir64, 2)
-    data = fpin.read(sizeEndCentDir64)
-    if len(data) != sizeEndCentDir64:
-        return endrec
-    sig, sz, create_version, read_version, disk_num, disk_dir, \
-            dircount, dircount2, dirsize, diroffset = \
-            struct.unpack(structEndArchive64, data)
-    if sig != stringEndArchive64:
-        return endrec
-
-    # Update the original endrec using data from the ZIP64 record
-    endrec[_ECD_SIGNATURE] = sig
-    endrec[_ECD_DISK_NUMBER] = disk_num
-    endrec[_ECD_DISK_START] = disk_dir
-    endrec[_ECD_ENTRIES_THIS_DISK] = dircount
-    endrec[_ECD_ENTRIES_TOTAL] = dircount2
-    endrec[_ECD_SIZE] = dirsize
-    endrec[_ECD_OFFSET] = diroffset
-    return endrec
-
-
-def _EndRecData(fpin):
-    """Return data from the "End of Central Directory" record, or None.
-
-    The data is a list of the nine items in the ZIP "End of central dir"
-    record followed by a tenth item, the file seek offset of this record."""
-
-    # Determine file size
-    fpin.seek(0, 2)
-    filesize = fpin.tell()
-
-    # Check to see if this is ZIP file with no archive comment (the
-    # "end of central directory" structure should be the last item in the
-    # file if this is the case).
-    try:
-        fpin.seek(-sizeEndCentDir, 2)
-    except IOError:
-        return None
-    data = fpin.read()
-    if (len(data) == sizeEndCentDir and
-        data[0:4] == stringEndArchive and
-        data[-2:] == b"\000\000"):
-        # the signature is correct and there's no comment, unpack structure
-        endrec = struct.unpack(structEndArchive, data)
-        endrec=list(endrec)
-
-        # Append a blank comment and record start offset
-        endrec.append("")
-        endrec.append(filesize - sizeEndCentDir)
-
-        # Try to read the "Zip64 end of central directory" structure
-        return _EndRecData64(fpin, -sizeEndCentDir, endrec)
-
-    # Either this is not a ZIP file, or it is a ZIP file with an archive
-    # comment.  Search the end of the file for the "end of central directory"
-    # record signature. The comment is the last item in the ZIP file and may be
-    # up to 64K long.  It is assumed that the "end of central directory" magic
-    # number does not appear in the comment.
-    maxCommentStart = max(filesize - (1 << 16) - sizeEndCentDir, 0)
-    fpin.seek(maxCommentStart, 0)
-    data = fpin.read()
-    start = data.rfind(stringEndArchive)
-    if start >= 0:
-        # found the magic number; attempt to unpack and interpret
-        recData = data[start:start+sizeEndCentDir]
-        if len(recData) != sizeEndCentDir:
-            # Zip file is corrupted.
-            return None
-        endrec = list(struct.unpack(structEndArchive, recData))
-        commentSize = endrec[_ECD_COMMENT_SIZE] #as claimed by the zip file
-        comment = data[start+sizeEndCentDir:start+sizeEndCentDir+commentSize]
-        endrec.append(comment)
-        endrec.append(maxCommentStart + start)
-
-        # Try to read the "Zip64 end of central directory" structure
-        return _EndRecData64(fpin, maxCommentStart + start - filesize,
-                             endrec)
-
-    # Unable to find a valid end of central directory structure
-    return None
-
-
-class ZipInfo (object):
-    """Class with attributes describing each file in the ZIP archive."""
-
-    __slots__ = (
-            'orig_filename',
-            'filename',
-            'date_time',
-            'compress_type',
-            'comment',
-            'extra',
-            'create_system',
-            'create_version',
-            'extract_version',
-            'reserved',
-            'flag_bits',
-            'volume',
-            'internal_attr',
-            'external_attr',
-            'header_offset',
-            'CRC',
-            'compress_size',
-            'file_size',
-            '_raw_time',
-        )
-
-    def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
-        self.orig_filename = filename   # Original file name in archive
-
-        # Terminate the file name at the first null byte.  Null bytes in file
-        # names are used as tricks by viruses in archives.
-        null_byte = filename.find(chr(0))
-        if null_byte >= 0:
-            filename = filename[0:null_byte]
-        # This is used to ensure paths in generated ZIP files always use
-        # forward slashes as the directory separator, as required by the
-        # ZIP format specification.
-        if os.sep != "/" and os.sep in filename:
-            filename = filename.replace(os.sep, "/")
-
-        self.filename = filename        # Normalized file name
-        self.date_time = date_time      # year, month, day, hour, min, sec
-
-        if date_time[0] < 1980:
-            raise ValueError('ZIP does not support timestamps before 1980')
-
-        # Standard values:
-        self.compress_type = ZIP_STORED # Type of compression for the file
-        self.comment = ""               # Comment for each file
-        self.extra = ""                 # ZIP extra data
-        if sys.platform == 'win32':
-            self.create_system = 0          # System which created ZIP archive
-        else:
-            # Assume everything else is unix-y
-            self.create_system = 3          # System which created ZIP archive
-        self.create_version = 20        # Version which created ZIP archive
-        self.extract_version = 20       # Version needed to extract archive
-        self.reserved = 0               # Must be zero
-        self.flag_bits = 0              # ZIP flag bits
-        self.volume = 0                 # Volume number of file header
-        self.internal_attr = 0          # Internal attributes
-        self.external_attr = 0          # External file attributes
-        # Other attributes are set by class ZipFile:
-        # header_offset         Byte offset to the file header
-        # CRC                   CRC-32 of the uncompressed file
-        # compress_size         Size of the compressed file
-        # file_size             Size of the uncompressed file
-
-    def FileHeader(self, zip64=None):
-        """Return the per-file header as a string."""
-        dt = self.date_time
-        dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
-        dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
-        if self.flag_bits & 0x08:
-            # Set these to zero because we write them after the file data
-            CRC = compress_size = file_size = 0
-        else:
-            CRC = self.CRC
-            compress_size = self.compress_size
-            file_size = self.file_size
-
-        extra = self.extra
-
-        if zip64 is None:
-            zip64 = file_size > ZIP64_LIMIT or compress_size > ZIP64_LIMIT
-        if zip64:
-            fmt = '<HHQQ'
-            extra = extra + struct.pack(fmt,
-                    1, struct.calcsize(fmt)-4, file_size, compress_size)
-        if file_size > ZIP64_LIMIT or compress_size > ZIP64_LIMIT:
-            if not zip64:
-                raise LargeZipFile("Filesize would require ZIP64 extensions")
-            # File is larger than what fits into a 4 byte integer,
-            # fall back to the ZIP64 extension
-            file_size = 0xffffffff
-            compress_size = 0xffffffff
-            self.extract_version = max(45, self.extract_version)
-            self.create_version = max(45, self.extract_version)
-
-        filename, flag_bits = self._encodeFilenameFlags()
-        header = struct.pack(structFileHeader, stringFileHeader,
-                 self.extract_version, self.reserved, flag_bits,
-                 self.compress_type, dostime, dosdate, CRC,
-                 compress_size, file_size,
-                 len(filename), len(extra))
-        return header + filename + extra
-
-    def _encodeFilenameFlags(self):
-        if isinstance(self.filename, unicode):
-            try:
-                return self.filename.encode('ascii'), self.flag_bits
-            except UnicodeEncodeError:
-                return self.filename.encode('utf-8'), self.flag_bits | 0x800
-        else:
-            return self.filename, self.flag_bits
-
-    def _decodeFilename(self):
-        if self.flag_bits & 0x800:
-            return self.filename.decode('utf-8')
-        else:
-            return self.filename
-
-    def _decodeExtra(self):
-        # Try to decode the extra field.
-        extra = self.extra
-        unpack = struct.unpack
-        while len(extra) >= 4:
-            tp, ln = unpack('<HH', extra[:4])
-            if tp == 1:
-                if ln >= 24:
-                    counts = unpack('<QQQ', extra[4:28])
-                elif ln == 16:
-                    counts = unpack('<QQ', extra[4:20])
-                elif ln == 8:
-                    counts = unpack('<Q', extra[4:12])
-                elif ln == 0:
-                    counts = ()
-                else:
-                    raise RuntimeError, "Corrupt extra field %s"%(ln,)
-
-                idx = 0
-
-                # ZIP64 extension (large files and/or large archives)
-                if self.file_size in (0xffffffffffffffffL, 0xffffffffL):
-                    self.file_size = counts[idx]
-                    idx += 1
-
-                if self.compress_size == 0xFFFFFFFFL:
-                    self.compress_size = counts[idx]
-                    idx += 1
-
-                if self.header_offset == 0xffffffffL:
-                    old = self.header_offset
-                    self.header_offset = counts[idx]
-                    idx+=1
-
-            extra = extra[ln+4:]
-
-
-class _ZipDecrypter:
-    """Class to handle decryption of files stored within a ZIP archive.
-
-    ZIP supports a password-based form of encryption. Even though known
-    plaintext attacks have been found against it, it is still useful
-    to be able to get data out of such a file.
-
-    Usage:
-        zd = _ZipDecrypter(mypwd)
-        plain_char = zd(cypher_char)
-        plain_text = map(zd, cypher_text)
-    """
-
-    def _GenerateCRCTable():
-        """Generate a CRC-32 table.
-
-        ZIP encryption uses the CRC32 one-byte primitive for scrambling some
-        internal keys. We noticed that a direct implementation is faster than
-        relying on binascii.crc32().
-        """
-        poly = 0xedb88320
-        table = [0] * 256
-        for i in range(256):
-            crc = i
-            for j in range(8):
-                if crc & 1:
-                    crc = ((crc >> 1) & 0x7FFFFFFF) ^ poly
-                else:
-                    crc = ((crc >> 1) & 0x7FFFFFFF)
-            table[i] = crc
-        return table
-    crctable = _GenerateCRCTable()
-
-    def _crc32(self, ch, crc):
-        """Compute the CRC32 primitive on one byte."""
-        return ((crc >> 8) & 0xffffff) ^ self.crctable[(crc ^ ord(ch)) & 0xff]
-
-    def __init__(self, pwd):
-        self.key0 = 305419896
-        self.key1 = 591751049
-        self.key2 = 878082192
-        for p in pwd:
-            self._UpdateKeys(p)
-
-    def _UpdateKeys(self, c):
-        self.key0 = self._crc32(c, self.key0)
-        self.key1 = (self.key1 + (self.key0 & 255)) & 4294967295
-        self.key1 = (self.key1 * 134775813 + 1) & 4294967295
-        self.key2 = self._crc32(chr((self.key1 >> 24) & 255), self.key2)
-
-    def __call__(self, c):
-        """Decrypt a single character."""
-        c = ord(c)
-        k = self.key2 | 2
-        c = c ^ (((k * (k^1)) >> 8) & 255)
-        c = chr(c)
-        self._UpdateKeys(c)
-        return c
-
-
-compressor_names = {
-    0: 'store',
-    1: 'shrink',
-    2: 'reduce',
-    3: 'reduce',
-    4: 'reduce',
-    5: 'reduce',
-    6: 'implode',
-    7: 'tokenize',
-    8: 'deflate',
-    9: 'deflate64',
-    10: 'implode',
-    12: 'bzip2',
-    14: 'lzma',
-    18: 'terse',
-    19: 'lz77',
-    97: 'wavpack',
-    98: 'ppmd',
-}
-
-
-class ZipExtFile(io.BufferedIOBase):
-    """File-like object for reading an archive member.
-       Is returned by ZipFile.open().
-    """
-
-    # Max size supported by decompressor.
-    MAX_N = 1 << 31 - 1
-
-    # Read from compressed files in 4k blocks.
-    MIN_READ_SIZE = 4096
-
-    # Search for universal newlines or line chunks.
-    PATTERN = re.compile(r'^(?P<chunk>[^\r\n]+)|(?P<newline>\n|\r\n?)')
-
-    def __init__(self, fileobj, mode, zipinfo, decrypter=None,
-            close_fileobj=False):
-        self._fileobj = fileobj
-        self._decrypter = decrypter
-        self._close_fileobj = close_fileobj
-
-        self._compress_type = zipinfo.compress_type
-        self._compress_size = zipinfo.compress_size
-        self._compress_left = zipinfo.compress_size
-
-        if self._compress_type == ZIP_DEFLATED:
-            self._decompressor = zlib.decompressobj(-15)
-        elif self._compress_type != ZIP_STORED:
-            descr = compressor_names.get(self._compress_type)
-            if descr:
-                raise NotImplementedError("compression type %d (%s)" % (self._compress_type, descr))
-            else:
-                raise NotImplementedError("compression type %d" % (self._compress_type,))
-        self._unconsumed = ''
-
-        self._readbuffer = ''
-        self._offset = 0
-
-        self._universal = 'U' in mode
-        self.newlines = None
-
-        # Adjust read size for encrypted files since the first 12 bytes
-        # are for the encryption/password information.
-        if self._decrypter is not None:
-            self._compress_left -= 12
-
-        self.mode = mode
-        self.name = zipinfo.filename
-
-        if hasattr(zipinfo, 'CRC'):
-            self._expected_crc = zipinfo.CRC
-            self._running_crc = crc32(b'') & 0xffffffff
-        else:
-            self._expected_crc = None
-
-    def readline(self, limit=-1):
-        """Read and return a line from the stream.
-
-        If limit is specified, at most limit bytes will be read.
-        """
-
-        if not self._universal and limit < 0:
-            # Shortcut common case - newline found in buffer.
-            i = self._readbuffer.find('\n', self._offset) + 1
-            if i > 0:
-                line = self._readbuffer[self._offset: i]
-                self._offset = i
-                return line
-
-        if not self._universal:
-            return io.BufferedIOBase.readline(self, limit)
-
-        line = ''
-        while limit < 0 or len(line) < limit:
-            readahead = self.peek(2)
-            if readahead == '':
-                return line
-
-            #
-            # Search for universal newlines or line chunks.
-            #
-            # The pattern returns either a line chunk or a newline, but not
-            # both. Combined with peek(2), we are assured that the sequence
-            # '\r\n' is always retrieved completely and never split into
-            # separate newlines - '\r', '\n' due to coincidental readaheads.
-            #
-            match = self.PATTERN.search(readahead)
-            newline = match.group('newline')
-            if newline is not None:
-                if self.newlines is None:
-                    self.newlines = []
-                if newline not in self.newlines:
-                    self.newlines.append(newline)
-                self._offset += len(newline)
-                return line + '\n'
-
-            chunk = match.group('chunk')
-            if limit >= 0:
-                chunk = chunk[: limit - len(line)]
-
-            self._offset += len(chunk)
-            line += chunk
-
-        return line
-
-    def peek(self, n=1):
-        """Returns buffered bytes without advancing the position."""
-        if n > len(self._readbuffer) - self._offset:
-            chunk = self.read(n)
-            if len(chunk) > self._offset:
-                self._readbuffer = chunk + self._readbuffer[self._offset:]
-                self._offset = 0
-            else:
-                self._offset -= len(chunk)
-
-        # Return up to 512 bytes to reduce allocation overhead for tight loops.
-        return self._readbuffer[self._offset: self._offset + 512]
-
-    def readable(self):
-        return True
-
-    def read(self, n=-1):
-        """Read and return up to n bytes.
-        If the argument is omitted, None, or negative, data is read and returned until EOF is reached..
-        """
-        buf = ''
-        if n is None:
-            n = -1
-        while True:
-            if n < 0:
-                data = self.read1(n)
-            elif n > len(buf):
-                data = self.read1(n - len(buf))
-            else:
-                return buf
-            if len(data) == 0:
-                return buf
-            buf += data
-
-    def _update_crc(self, newdata, eof):
-        # Update the CRC using the given data.
-        if self._expected_crc is None:
-            # No need to compute the CRC if we don't have a reference value
-            return
-        self._running_crc = crc32(newdata, self._running_crc) & 0xffffffff
-        # Check the CRC if we're at the end of the file
-        if eof and self._running_crc != self._expected_crc:
-            raise BadZipfile("Bad CRC-32 for file %r" % self.name)
-
-    def read1(self, n):
-        """Read up to n bytes with at most one read() system call."""
-
-        # Simplify algorithm (branching) by transforming negative n to large n.
-        if n < 0 or n is None:
-            n = self.MAX_N
-
-        # Bytes available in read buffer.
-        len_readbuffer = len(self._readbuffer) - self._offset
-
-        # Read from file.
-        if self._compress_left > 0 and n > len_readbuffer + len(self._unconsumed):
-            nbytes = n - len_readbuffer - len(self._unconsumed)
-            nbytes = max(nbytes, self.MIN_READ_SIZE)
-            nbytes = min(nbytes, self._compress_left)
-
-            data = self._fileobj.read(nbytes)
-            self._compress_left -= len(data)
-
-            if data and self._decrypter is not None:
-                data = ''.join(map(self._decrypter, data))
-
-            if self._compress_type == ZIP_STORED:
-                self._update_crc(data, eof=(self._compress_left==0))
-                self._readbuffer = self._readbuffer[self._offset:] + data
-                self._offset = 0
-            else:
-                # Prepare deflated bytes for decompression.
-                self._unconsumed += data
-
-        # Handle unconsumed data.
-        if (len(self._unconsumed) > 0 and n > len_readbuffer and
-            self._compress_type == ZIP_DEFLATED):
-            data = self._decompressor.decompress(
-                self._unconsumed,
-                max(n - len_readbuffer, self.MIN_READ_SIZE)
-            )
-
-            self._unconsumed = self._decompressor.unconsumed_tail
-            eof = len(self._unconsumed) == 0 and self._compress_left == 0
-            if eof:
-                data += self._decompressor.flush()
-
-            self._update_crc(data, eof=eof)
-            self._readbuffer = self._readbuffer[self._offset:] + data
-            self._offset = 0
-
-        # Read from buffer.
-        data = self._readbuffer[self._offset: self._offset + n]
-        self._offset += len(data)
-        return data
-
-    def close(self):
-        try :
-            if self._close_fileobj:
-                self._fileobj.close()
-        finally:
-            super(ZipExtFile, self).close()
-
-
-class ZipFile(object):
-    """ Class with methods to open, read, write, close, list zip files.
-
-    z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=False)
-
-    file: Either the path to the file, or a file-like object.
-          If it is a path, the file will be opened and closed by ZipFile.
-    mode: The mode can be either read "r", write "w" or append "a".
-    compression: ZIP_STORED (no compression) or ZIP_DEFLATED (requires zlib).
-    allowZip64: if True ZipFile will create files with ZIP64 extensions when
-                needed, otherwise it will raise an exception when this would
-                be necessary.
-
-    """
-
-    fp = None                   # Set here since __del__ checks it
-
-    def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=False):
-        """Open the ZIP file with mode read "r", write "w" or append "a"."""
-        if mode not in ("r", "w", "a"):
-            raise RuntimeError('ZipFile() requires mode "r", "w", or "a"')
-
-        if compression == ZIP_STORED:
-            pass
-        elif compression == ZIP_DEFLATED:
-            if not zlib:
-                raise RuntimeError,\
-                      "Compression requires the (missing) zlib module"
-        else:
-            raise RuntimeError, "That compression method is not supported"
-
-        self._allowZip64 = allowZip64
-        self._didModify = False
-        self.debug = 0  # Level of printing: 0 through 3
-        self.NameToInfo = {}    # Find file info given name
-        self.filelist = []      # List of ZipInfo instances for archive
-        self.compression = compression  # Method of compression
-        self.mode = key = mode.replace('b', '')[0]
-        self.pwd = None
-        self._comment = ''
-
-        # Check if we were passed a file-like object
-        if isinstance(file, basestring):
-            self._filePassed = 0
-            self.filename = file
-            modeDict = {'r' : 'rb', 'w': 'wb', 'a' : 'r+b'}
-            try:
-                self.fp = open(file, modeDict[mode])
-            except IOError:
-                if mode == 'a':
-                    mode = key = 'w'
-                    self.fp = open(file, modeDict[mode])
-                else:
-                    raise
-        else:
-            self._filePassed = 1
-            self.fp = file
-            self.filename = getattr(file, 'name', None)
-
-        try:
-            if key == 'r':
-                self._RealGetContents()
-            elif key == 'w':
-                # set the modified flag so central directory gets written
-                # even if no files are added to the archive
-                self._didModify = True
-                self._start_disk = self.fp.tell()
-            elif key == 'a':
-                try:
-                    # See if file is a zip file
-                    self._RealGetContents()
-                    # seek to start of directory and overwrite
-                    self.fp.seek(self.start_dir, 0)
-                except BadZipfile:
-                    # file is not a zip file, just append
-                    self.fp.seek(0, 2)
-
-                    # set the modified flag so central directory gets written
-                    # even if no files are added to the archive
-                    self._didModify = True
-                    self._start_disk = self.fp.tell()
-            else:
-                raise RuntimeError('Mode must be "r", "w" or "a"')
-        except:
-            fp = self.fp
-            self.fp = None
-            if not self._filePassed:
-                fp.close()
-            raise
-
-    def __enter__(self):
-        return self
-
-    def __exit__(self, type, value, traceback):
-        self.close()
-
-    def _RealGetContents(self):
-        """Read in the table of contents for the ZIP file."""
-        fp = self.fp
-        try:
-            endrec = _EndRecData(fp)
-        except IOError:
-            raise BadZipfile("File is not a zip file")
-        if not endrec:
-            raise BadZipfile, "File is not a zip file"
-        if self.debug > 1:
-            print endrec
-        size_cd = endrec[_ECD_SIZE]             # bytes in central directory
-        offset_cd = endrec[_ECD_OFFSET]         # offset of central directory
-        self._comment = endrec[_ECD_COMMENT]    # archive comment
-
-        # self._start_disk:  Position of the start of ZIP archive
-        # It is zero, unless ZIP was concatenated to another file
-        self._start_disk = endrec[_ECD_LOCATION] - size_cd - offset_cd
-        if endrec[_ECD_SIGNATURE] == stringEndArchive64:
-            # If Zip64 extension structures are present, account for them
-            self._start_disk -= (sizeEndCentDir64 + sizeEndCentDir64Locator)
-
-        if self.debug > 2:
-            inferred = self._start_disk + offset_cd
-            print "given, inferred, offset", offset_cd, inferred, self._start_disk
-        # self.start_dir:  Position of start of central directory
-        self.start_dir = offset_cd + self._start_disk
-        fp.seek(self.start_dir, 0)
-        data = fp.read(size_cd)
-        fp = cStringIO.StringIO(data)
-        total = 0
-        while total < size_cd:
-            centdir = fp.read(sizeCentralDir)
-            if len(centdir) != sizeCentralDir:
-                raise BadZipfile("Truncated central directory")
-            centdir = struct.unpack(structCentralDir, centdir)
-            if centdir[_CD_SIGNATURE] != stringCentralDir:
-                raise BadZipfile("Bad magic number for central directory")
-            if self.debug > 2:
-                print centdir
-            filename = fp.read(centdir[_CD_FILENAME_LENGTH])
-            # Create ZipInfo instance to store file information
-            x = ZipInfo(filename)
-            x.extra = fp.read(centdir[_CD_EXTRA_FIELD_LENGTH])
-            x.comment = fp.read(centdir[_CD_COMMENT_LENGTH])
-            x.header_offset = centdir[_CD_LOCAL_HEADER_OFFSET]
-            (x.create_version, x.create_system, x.extract_version, x.reserved,
-                x.flag_bits, x.compress_type, t, d,
-                x.CRC, x.compress_size, x.file_size) = centdir[1:12]
-            x.volume, x.internal_attr, x.external_attr = centdir[15:18]
-            # Convert date/time code to (year, month, day, hour, min, sec)
-            x._raw_time = t
-            x.date_time = ( (d>>9)+1980, (d>>5)&0xF, d&0x1F,
-                                     t>>11, (t>>5)&0x3F, (t&0x1F) * 2 )
-
-            x._decodeExtra()
-            x.header_offset = x.header_offset + self._start_disk
-            x.filename = x._decodeFilename()
-            self.filelist.append(x)
-            self.NameToInfo[x.filename] = x
-
-            # update total bytes read from central directory
-            total = (total + sizeCentralDir + centdir[_CD_FILENAME_LENGTH]
-                     + centdir[_CD_EXTRA_FIELD_LENGTH]
-                     + centdir[_CD_COMMENT_LENGTH])
-
-            if self.debug > 2:
-                print "total", total
-
-
-    def namelist(self):
-        """Return a list of file names in the archive."""
-        l = []
-        for data in self.filelist:
-            l.append(data.filename)
-        return l
-
-    def infolist(self):
-        """Return a list of class ZipInfo instances for files in the
-        archive."""
-        return self.filelist
-
-    def printdir(self):
-        """Print a table of contents for the zip file."""
-        print "%-46s %19s %12s" % ("File Name", "Modified    ", "Size")
-        for zinfo in self.filelist:
-            date = "%d-%02d-%02d %02d:%02d:%02d" % zinfo.date_time[:6]
-            print "%-46s %s %12d" % (zinfo.filename, date, zinfo.file_size)
-
-    def testzip(self):
-        """Read all the files and check the CRC."""
-        chunk_size = 2 ** 20
-        for zinfo in self.filelist:
-            try:
-                # Read by chunks, to avoid an OverflowError or a
-                # MemoryError with very large embedded files.
-                with self.open(zinfo.filename, "r") as f:
-                    while f.read(chunk_size):     # Check CRC-32
-                        pass
-            except BadZipfile:
-                return zinfo.filename
-
-    def getinfo(self, name):
-        """Return the instance of ZipInfo given 'name'."""
-        info = self.NameToInfo.get(name)
-        if info is None:
-            raise KeyError(
-                'There is no item named %r in the archive' % name)
-
-        return info
-
-    def setpassword(self, pwd):
-        """Set default password for encrypted files."""
-        self.pwd = pwd
-
-    @property
-    def comment(self):
-        """The comment text associated with the ZIP file."""
-        return self._comment
-
-    @comment.setter
-    def comment(self, comment):
-        # check for valid comment length
-        if len(comment) > ZIP_MAX_COMMENT:
-            import warnings
-            warnings.warn('Archive comment is too long; truncating to %d bytes'
-                          % ZIP_MAX_COMMENT, stacklevel=2)
-            comment = comment[:ZIP_MAX_COMMENT]
-        self._comment = comment
-        self._didModify = True
-
-    def read(self, name, pwd=None):
-        """Return file bytes (as a string) for name."""
-        return self.open(name, "r", pwd).read()
-
-    def open(self, name, mode="r", pwd=None):
-        """Return file-like object for 'name'."""
-        if mode not in ("r", "U", "rU"):
-            raise RuntimeError, 'open() requires mode "r", "U", or "rU"'
-        if not self.fp:
-            raise RuntimeError, \
-                  "Attempt to read ZIP archive that was already closed"
-
-        # Only open a new file for instances where we were not
-        # given a file object in the constructor
-        if self._filePassed:
-            zef_file = self.fp
-            should_close = False
-        else:
-            zef_file = open(self.filename, 'rb')
-            should_close = True
-
-        try:
-            # Make sure we have an info object
-            if isinstance(name, ZipInfo):
-                # 'name' is already an info object
-                zinfo = name
-            else:
-                # Get info object for name
-                zinfo = self.getinfo(name)
-
-            zef_file.seek(zinfo.header_offset, 0)
-
-            # Skip the file header:
-            fheader = zef_file.read(sizeFileHeader)
-            if len(fheader) != sizeFileHeader:
-                raise BadZipfile("Truncated file header")
-            fheader = struct.unpack(structFileHeader, fheader)
-            if fheader[_FH_SIGNATURE] != stringFileHeader:
-                raise BadZipfile("Bad magic number for file header")
-
-            fname = zef_file.read(fheader[_FH_FILENAME_LENGTH])
-            if fheader[_FH_EXTRA_FIELD_LENGTH]:
-                zef_file.read(fheader[_FH_EXTRA_FIELD_LENGTH])
-
-            if fname != zinfo.orig_filename:
-                raise BadZipfile, \
-                        'File name in directory "%s" and header "%s" differ.' % (
-                            zinfo.orig_filename, fname)
-
-            # check for encrypted flag & handle password
-            is_encrypted = zinfo.flag_bits & 0x1
-            zd = None
-            if is_encrypted:
-                if not pwd:
-                    pwd = self.pwd
-                if not pwd:
-                    raise RuntimeError, "File %s is encrypted, " \
-                        "password required for extraction" % name
-
-                zd = _ZipDecrypter(pwd)
-                # The first 12 bytes in the cypher stream is an encryption header
-                #  used to strengthen the algorithm. The first 11 bytes are
-                #  completely random, while the 12th contains the MSB of the CRC,
-                #  or the MSB of the file time depending on the header type
-                #  and is used to check the correctness of the password.
-                bytes = zef_file.read(12)
-                h = map(zd, bytes[0:12])
-                if zinfo.flag_bits & 0x8:
-                    # compare against the file type from extended local headers
-                    check_byte = (zinfo._raw_time >> 8) & 0xff
-                else:
-                    # compare against the CRC otherwise
-                    check_byte = (zinfo.CRC >> 24) & 0xff
-                if ord(h[11]) != check_byte:
-                    raise RuntimeError("Bad password for file", name)
-
-            return ZipExtFile(zef_file, mode, zinfo, zd,
-                    close_fileobj=should_close)
-        except:
-            if should_close:
-                zef_file.close()
-            raise
-
-    def extract(self, member, path=None, pwd=None):
-        """Extract a member from the archive to the current working directory,
-           using its full name. Its file information is extracted as accurately
-           as possible. `member' may be a filename or a ZipInfo object. You can
-           specify a different directory using `path'.
-        """
-        if not isinstance(member, ZipInfo):
-            member = self.getinfo(member)
-
-        if path is None:
-            path = os.getcwd()
-
-        return self._extract_member(member, path, pwd)
-
-    def extractall(self, path=None, members=None, pwd=None):
-        """Extract all members from the archive to the current working
-           directory. `path' specifies a different directory to extract to.
-           `members' is optional and must be a subset of the list returned
-           by namelist().
-        """
-        if members is None:
-            members = self.namelist()
-
-        for zipinfo in members:
-            self.extract(zipinfo, path, pwd)
-
-    def _extract_member(self, member, targetpath, pwd):
-        """Extract the ZipInfo object 'member' to a physical
-           file on the path targetpath.
-        """
-        # build the destination pathname, replacing
-        # forward slashes to platform specific separators.
-        arcname = member.filename.replace('/', os.path.sep)
-
-        if os.path.altsep:
-            arcname = arcname.replace(os.path.altsep, os.path.sep)
-        # interpret absolute pathname as relative, remove drive letter or
-        # UNC path, redundant separators, "." and ".." components.
-        arcname = os.path.splitdrive(arcname)[1]
-        arcname = os.path.sep.join(x for x in arcname.split(os.path.sep)
-                    if x not in ('', os.path.curdir, os.path.pardir))
-        if os.path.sep == '\\':
-            # filter illegal characters on Windows
-            illegal = ':<>|"?*'
-            if isinstance(arcname, unicode):
-                table = {ord(c): ord('_') for c in illegal}
-            else:
-                table = string.maketrans(illegal, '_' * len(illegal))
-            arcname = arcname.translate(table)
-            # remove trailing dots
-            arcname = (x.rstrip('.') for x in arcname.split(os.path.sep))
-            arcname = os.path.sep.join(x for x in arcname if x)
-
-        targetpath = os.path.join(targetpath, arcname)
-        targetpath = os.path.normpath(targetpath)
-
-        # Create all upper directories if necessary.
-        upperdirs = os.path.dirname(targetpath)
-        if upperdirs and not os.path.exists(upperdirs):
-            os.makedirs(upperdirs)
-
-        if member.filename[-1] == '/':
-            if not os.path.isdir(targetpath):
-                os.mkdir(targetpath)
-            return targetpath
-
-        with self.open(member, pwd=pwd) as source, \
-             file(targetpath, "wb") as target:
-            shutil.copyfileobj(source, target)
-
-        return targetpath
-
-    def _writecheck(self, zinfo):
-        """Check for errors before writing a file to the archive."""
-        if zinfo.filename in self.NameToInfo:
-            import warnings
-            warnings.warn('Duplicate name: %r' % zinfo.filename, stacklevel=3)
-        if self.mode not in ("w", "a"):
-            raise RuntimeError, 'write() requires mode "w" or "a"'
-        if not self.fp:
-            raise RuntimeError, \
-                  "Attempt to write ZIP archive that was already closed"
-        if zinfo.compress_type == ZIP_DEFLATED and not zlib:
-            raise RuntimeError, \
-                  "Compression requires the (missing) zlib module"
-        if zinfo.compress_type not in (ZIP_STORED, ZIP_DEFLATED):
-            raise RuntimeError, \
-                  "That compression method is not supported"
-        if not self._allowZip64:
-            requires_zip64 = None
-            if len(self.filelist) >= ZIP_FILECOUNT_LIMIT:
-                requires_zip64 = "Files count"
-            elif zinfo.file_size > ZIP64_LIMIT:
-                requires_zip64 = "Filesize"
-            elif zinfo.header_offset > ZIP64_LIMIT:
-                requires_zip64 = "Zipfile size"
-            if requires_zip64:
-                raise LargeZipFile(requires_zip64 +
-                                   " would require ZIP64 extensions")
-
-    def write(self, filename, arcname=None, compress_type=None):
-        """Put the bytes from filename into the archive under the name
-        arcname."""
-        if not self.fp:
-            raise RuntimeError(
-                  "Attempt to write to ZIP archive that was already closed")
-
-        st = os.stat(filename)
-        isdir = stat.S_ISDIR(st.st_mode)
-        mtime = time.localtime(st.st_mtime)
-        date_time = mtime[0:6]
-        # Create ZipInfo instance to store file information
-        if arcname is None:
-            arcname = filename
-        arcname = os.path.normpath(os.path.splitdrive(arcname)[1])
-        while arcname[0] in (os.sep, os.altsep):
-            arcname = arcname[1:]
-        if isdir:
-            arcname += '/'
-        zinfo = ZipInfo(arcname, date_time)
-        zinfo.external_attr = (st[0] & 0xFFFF) << 16L      # Unix attributes
-        if isdir:
-            zinfo.compress_type = ZIP_STORED
-        elif compress_type is None:
-            zinfo.compress_type = self.compression
-        else:
-            zinfo.compress_type = compress_type
-
-        zinfo.file_size = st.st_size
-        zinfo.flag_bits = 0x00
-        zinfo.header_offset = self.fp.tell()    # Start of header bytes
-
-        self._writecheck(zinfo)
-        self._didModify = True
-
-        if isdir:
-            zinfo.file_size = 0
-            zinfo.compress_size = 0
-            zinfo.CRC = 0
-            zinfo.external_attr |= 0x10  # MS-DOS directory flag
-            self.filelist.append(zinfo)
-            self.NameToInfo[zinfo.filename] = zinfo
-            self.fp.write(zinfo.FileHeader(False))
-            return
-
-        with open(filename, "rb") as fp:
-            # Must overwrite CRC and sizes with correct data later
-            zinfo.CRC = CRC = 0
-            zinfo.compress_size = compress_size = 0
-            # Compressed size can be larger than uncompressed size
-            zip64 = self._allowZip64 and \
-                    zinfo.file_size * 1.05 > ZIP64_LIMIT
-            self.fp.write(zinfo.FileHeader(zip64))
-            if zinfo.compress_type == ZIP_DEFLATED:
-                cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
-                     zlib.DEFLATED, -15)
-            else:
-                cmpr = None
-            file_size = 0
-            while 1:
-                buf = fp.read(1024 * 8)
-                if not buf:
-                    break
-                file_size = file_size + len(buf)
-                CRC = crc32(buf, CRC) & 0xffffffff
-                if cmpr:
-                    buf = cmpr.compress(buf)
-                    compress_size = compress_size + len(buf)
-                self.fp.write(buf)
-        if cmpr:
-            buf = cmpr.flush()
-            compress_size = compress_size + len(buf)
-            self.fp.write(buf)
-            zinfo.compress_size = compress_size
-        else:
-            zinfo.compress_size = file_size
-        zinfo.CRC = CRC
-        zinfo.file_size = file_size
-        if not zip64 and self._allowZip64:
-            if file_size > ZIP64_LIMIT:
-                raise RuntimeError('File size has increased during compressing')
-            if compress_size > ZIP64_LIMIT:
-                raise RuntimeError('Compressed size larger than uncompressed size')
-        # Seek backwards and write file header (which will now include
-        # correct CRC and file sizes)
-        position = self.fp.tell() # Preserve current position in file
-        self.fp.seek(zinfo.header_offset, 0)
-        self.fp.write(zinfo.FileHeader(zip64))
-        self.fp.seek(position, 0)
-        self.filelist.append(zinfo)
-        self.NameToInfo[zinfo.filename] = zinfo
-
-    def writestr(self, zinfo_or_arcname, bytes, compress_type=None):
-        """Write a file into the archive.  The contents is the string
-        'bytes'.  'zinfo_or_arcname' is either a ZipInfo instance or
-        the name of the file in the archive."""
-        if not isinstance(zinfo_or_arcname, ZipInfo):
-            zinfo = ZipInfo(filename=zinfo_or_arcname,
-                            date_time=time.localtime(time.time())[:6])
-
-            zinfo.compress_type = self.compression
-            if zinfo.filename[-1] == '/':
-                zinfo.external_attr = 0o40775 << 16   # drwxrwxr-x
-                zinfo.external_attr |= 0x10           # MS-DOS directory flag
-            else:
-                zinfo.external_attr = 0o600 << 16     # ?rw-------
-        else:
-            zinfo = zinfo_or_arcname
-
-        if not self.fp:
-            raise RuntimeError(
-                  "Attempt to write to ZIP archive that was already closed")
-
-        if compress_type is not None:
-            zinfo.compress_type = compress_type
-
-        zinfo.file_size = len(bytes)            # Uncompressed size
-        zinfo.header_offset = self.fp.tell()    # Start of header bytes
-        self._writecheck(zinfo)
-        self._didModify = True
-        zinfo.CRC = crc32(bytes) & 0xffffffff       # CRC-32 checksum
-        if zinfo.compress_type == ZIP_DEFLATED:
-            co = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
-                 zlib.DEFLATED, -15)
-            bytes = co.compress(bytes) + co.flush()
-            zinfo.compress_size = len(bytes)    # Compressed size
-        else:
-            zinfo.compress_size = zinfo.file_size
-        zip64 = zinfo.file_size > ZIP64_LIMIT or \
-                zinfo.compress_size > ZIP64_LIMIT
-        if zip64 and not self._allowZip64:
-            raise LargeZipFile("Filesize would require ZIP64 extensions")
-        self.fp.write(zinfo.FileHeader(zip64))
-        self.fp.write(bytes)
-        if zinfo.flag_bits & 0x08:
-            # Write CRC and file sizes after the file data
-            fmt = '<LQQ' if zip64 else '<LLL'
-            self.fp.write(struct.pack(fmt, zinfo.CRC, zinfo.compress_size,
-                  zinfo.file_size))
-        self.fp.flush()
-        self.filelist.append(zinfo)
-        self.NameToInfo[zinfo.filename] = zinfo
-
-    def __del__(self):
-        """Call the "close()" method in case the user forgot."""
-        self.close()
-
-    def close(self):
-        """Close the file, and for mode "w" and "a" write the ending
-        records."""
-        if self.fp is None:
-            return
-
-        try:
-            if self.mode in ("w", "a") and self._didModify: # write ending records
-                pos1 = self.fp.tell()
-                for zinfo in self.filelist:         # write central directory
-                    dt = zinfo.date_time
-                    dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2]
-                    dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2)
-                    extra = []
-                    if zinfo.file_size > ZIP64_LIMIT \
-                            or zinfo.compress_size > ZIP64_LIMIT:
-                        extra.append(zinfo.file_size)
-                        extra.append(zinfo.compress_size)
-                        file_size = 0xffffffff
-                        compress_size = 0xffffffff
-                    else:
-                        file_size = zinfo.file_size
-                        compress_size = zinfo.compress_size
-
-                    header_offset = zinfo.header_offset - self._start_disk
-                    if header_offset > ZIP64_LIMIT:
-                        extra.append(header_offset)
-                        header_offset = 0xffffffffL
-
-                    extra_data = zinfo.extra
-                    if extra:
-                        # Append a ZIP64 field to the extra's
-                        extra_data = struct.pack(
-                                '<HH' + 'Q'*len(extra),
-                                1, 8*len(extra), *extra) + extra_data
-
-                        extract_version = max(45, zinfo.extract_version)
-                        create_version = max(45, zinfo.create_version)
-                    else:
-                        extract_version = zinfo.extract_version
-                        create_version = zinfo.create_version
-
-                    try:
-                        filename, flag_bits = zinfo._encodeFilenameFlags()
-                        centdir = struct.pack(structCentralDir,
-                        stringCentralDir, create_version,
-                        zinfo.create_system, extract_version, zinfo.reserved,
-                        flag_bits, zinfo.compress_type, dostime, dosdate,
-                        zinfo.CRC, compress_size, file_size,
-                        len(filename), len(extra_data), len(zinfo.comment),
-                        0, zinfo.internal_attr, zinfo.external_attr,
-                        header_offset)
-                    except DeprecationWarning:
-                        print >>sys.stderr, (structCentralDir,
-                        stringCentralDir, create_version,
-                        zinfo.create_system, extract_version, zinfo.reserved,
-                        zinfo.flag_bits, zinfo.compress_type, dostime, dosdate,
-                        zinfo.CRC, compress_size, file_size,
-                        len(zinfo.filename), len(extra_data), len(zinfo.comment),
-                        0, zinfo.internal_attr, zinfo.external_attr,
-                        header_offset)
-                        raise
-                    self.fp.write(centdir)
-                    self.fp.write(filename)
-                    self.fp.write(extra_data)
-                    self.fp.write(zinfo.comment)
-
-                pos2 = self.fp.tell()
-                # Write end-of-zip-archive record
-                centDirCount = len(self.filelist)
-                centDirSize = pos2 - pos1
-                centDirOffset = pos1 - self._start_disk
-                requires_zip64 = None
-                if centDirCount > ZIP_FILECOUNT_LIMIT:
-                    requires_zip64 = "Files count"
-                elif centDirOffset > ZIP64_LIMIT:
-                    requires_zip64 = "Central directory offset"
-                elif centDirSize > ZIP64_LIMIT:
-                    requires_zip64 = "Central directory size"
-                if requires_zip64:
-                    # Need to write the ZIP64 end-of-archive records
-                    if not self._allowZip64:
-                        raise LargeZipFile(requires_zip64 +
-                                           " would require ZIP64 extensions")
-                    zip64endrec = struct.pack(
-                            structEndArchive64, stringEndArchive64,
-                            44, 45, 45, 0, 0, centDirCount, centDirCount,
-                            centDirSize, centDirOffset)
-                    self.fp.write(zip64endrec)
-
-                    zip64locrec = struct.pack(
-                            structEndArchive64Locator,
-                            stringEndArchive64Locator, 0, pos2, 1)
-                    self.fp.write(zip64locrec)
-                    centDirCount = min(centDirCount, 0xFFFF)
-                    centDirSize = min(centDirSize, 0xFFFFFFFF)
-                    centDirOffset = min(centDirOffset, 0xFFFFFFFF)
-
-                endrec = struct.pack(structEndArchive, stringEndArchive,
-                                    0, 0, centDirCount, centDirCount,
-                                    centDirSize, centDirOffset, len(self._comment))
-                self.fp.write(endrec)
-                self.fp.write(self._comment)
-                self.fp.flush()
-        finally:
-            fp = self.fp
-            self.fp = None
-            if not self._filePassed:
-                fp.close()
-
-
-class PyZipFile(ZipFile):
-    """Class to create ZIP archives with Python library files and packages."""
-
-    def writepy(self, pathname, basename = ""):
-        """Add all files from "pathname" to the ZIP archive.
-
-        If pathname is a package directory, search the directory and
-        all package subdirectories recursively for all *.py and enter
-        the modules into the archive.  If pathname is a plain
-        directory, listdir *.py and enter all modules.  Else, pathname
-        must be a Python *.py file and the module will be put into the
-        archive.  Added modules are always module.pyo or module.pyc.
-        This method will compile the module.py into module.pyc if
-        necessary.
-        """
-        dir, name = os.path.split(pathname)
-        if os.path.isdir(pathname):
-            initname = os.path.join(pathname, "__init__.py")
-            if os.path.isfile(initname):
-                # This is a package directory, add it
-                if basename:
-                    basename = "%s/%s" % (basename, name)
-                else:
-                    basename = name
-                if self.debug:
-                    print "Adding package in", pathname, "as", basename
-                fname, arcname = self._get_codename(initname[0:-3], basename)
-                if self.debug:
-                    print "Adding", arcname
-                self.write(fname, arcname)
-                dirlist = os.listdir(pathname)
-                dirlist.remove("__init__.py")
-                # Add all *.py files and package subdirectories
-                for filename in dirlist:
-                    path = os.path.join(pathname, filename)
-                    root, ext = os.path.splitext(filename)
-                    if os.path.isdir(path):
-                        if os.path.isfile(os.path.join(path, "__init__.py")):
-                            # This is a package directory, add it
-                            self.writepy(path, basename)  # Recursive call
-                    elif ext == ".py":
-                        fname, arcname = self._get_codename(path[0:-3],
-                                         basename)
-                        if self.debug:
-                            print "Adding", arcname
-                        self.write(fname, arcname)
-            else:
-                # This is NOT a package directory, add its files at top level
-                if self.debug:
-                    print "Adding files from directory", pathname
-                for filename in os.listdir(pathname):
-                    path = os.path.join(pathname, filename)
-                    root, ext = os.path.splitext(filename)
-                    if ext == ".py":
-                        fname, arcname = self._get_codename(path[0:-3],
-                                         basename)
-                        if self.debug:
-                            print "Adding", arcname
-                        self.write(fname, arcname)
-        else:
-            if pathname[-3:] != ".py":
-                raise RuntimeError, \
-                      'Files added with writepy() must end with ".py"'
-            fname, arcname = self._get_codename(pathname[0:-3], basename)
-            if self.debug:
-                print "Adding file", arcname
-            self.write(fname, arcname)
-
-    def _get_codename(self, pathname, basename):
-        """Return (filename, archivename) for the path.
-
-        Given a module name path, return the correct file path and
-        archive name, compiling if necessary.  For example, given
-        /python/lib/string, return (/python/lib/string.pyc, string).
-        """
-        file_py  = pathname + ".py"
-        file_pyc = pathname + ".pyc"
-        file_pyo = pathname + ".pyo"
-        if os.path.isfile(file_pyo) and \
-                            os.stat(file_pyo).st_mtime >= os.stat(file_py).st_mtime:
-            fname = file_pyo    # Use .pyo file
-        elif not os.path.isfile(file_pyc) or \
-             os.stat(file_pyc).st_mtime < os.stat(file_py).st_mtime:
-            import py_compile
-            if self.debug:
-                print "Compiling", file_py
-            try:
-                py_compile.compile(file_py, file_pyc, None, True)
-            except py_compile.PyCompileError,err:
-                print err.msg
-            fname = file_pyc
-        else:
-            fname = file_pyc
-        archivename = os.path.split(fname)[1]
-        if basename:
-            archivename = "%s/%s" % (basename, archivename)
-        return (fname, archivename)
-
-
-def main(args = None):
-    import textwrap
-    USAGE=textwrap.dedent("""\
-        Usage:
-            zipfile.py -l zipfile.zip        # Show listing of a zipfile
-            zipfile.py -t zipfile.zip        # Test if a zipfile is valid
-            zipfile.py -e zipfile.zip target # Extract zipfile into target dir
-            zipfile.py -c zipfile.zip src ... # Create zipfile from sources
-        """)
-    if args is None:
-        args = sys.argv[1:]
-
-    if not args or args[0] not in ('-l', '-c', '-e', '-t'):
-        print USAGE
-        sys.exit(1)
-
-    if args[0] == '-l':
-        if len(args) != 2:
-            print USAGE
-            sys.exit(1)
-        with ZipFile(args[1], 'r') as zf:
-            zf.printdir()
-
-    elif args[0] == '-t':
-        if len(args) != 2:
-            print USAGE
-            sys.exit(1)
-        with ZipFile(args[1], 'r') as zf:
-            badfile = zf.testzip()
-        if badfile:
-            print("The following enclosed file is corrupted: {!r}".format(badfile))
-        print "Done testing"
-
-    elif args[0] == '-e':
-        if len(args) != 3:
-            print USAGE
-            sys.exit(1)
-
-        with ZipFile(args[1], 'r') as zf:
-            zf.extractall(args[2])
-
-    elif args[0] == '-c':
-        if len(args) < 3:
-            print USAGE
-            sys.exit(1)
-
-        def addToZip(zf, path, zippath):
-            if os.path.isfile(path):
-                zf.write(path, zippath, ZIP_DEFLATED)
-            elif os.path.isdir(path):
-                if zippath:
-                    zf.write(path, zippath)
-                for nm in os.listdir(path):
-                    addToZip(zf,
-                            os.path.join(path, nm), os.path.join(zippath, nm))
-            # else: ignore
-
-        with ZipFile(args[1], 'w', allowZip64=True) as zf:
-            for path in args[2:]:
-                zippath = os.path.basename(path)
-                if not zippath:
-                    zippath = os.path.basename(os.path.dirname(path))
-                if zippath in ('', os.curdir, os.pardir):
-                    zippath = ''
-                addToZip(zf, path, zippath)
-
-if __name__ == "__main__":
-    main()
diff --git a/systrace/catapult/tracing/tracing/__init__.py b/systrace/catapult/tracing/tracing/__init__.py
deleted file mode 100644
index 76063aa..0000000
--- a/systrace/catapult/tracing/tracing/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright (c) 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import tracing_project
-tracing_project.UpdateSysPathIfNeeded()
diff --git a/systrace/catapult/tracing/tracing/trace_data/__init__.py b/systrace/catapult/tracing/tracing/trace_data/__init__.py
deleted file mode 100644
index bdb1f26..0000000
--- a/systrace/catapult/tracing/tracing/trace_data/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
diff --git a/systrace/catapult/tracing/tracing/trace_data/trace_data.py b/systrace/catapult/tracing/tracing/trace_data/trace_data.py
deleted file mode 100644
index 8d6f624..0000000
--- a/systrace/catapult/tracing/tracing/trace_data/trace_data.py
+++ /dev/null
@@ -1,340 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import copy
-import json
-import logging
-import os
-import shutil
-import subprocess
-import tempfile
-
-
-_TRACING_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),
-                            os.path.pardir, os.path.pardir)
-_TRACE2HTML_PATH = os.path.join(_TRACING_DIR, 'bin', 'trace2html')
-
-
-class NonSerializableTraceData(Exception):
-  """Raised when raw trace data cannot be serialized to TraceData."""
-  pass
-
-
-class TraceDataPart(object):
-  """TraceData can have a variety of events.
-
-  These are called "parts" and are accessed by the following fixed field names.
-  """
-  def __init__(self, raw_field_name):
-    self._raw_field_name = raw_field_name
-
-  def __repr__(self):
-    return 'TraceDataPart("%s")' % self._raw_field_name
-
-  @property
-  def raw_field_name(self):
-    return self._raw_field_name
-
-  def __eq__(self, other):
-    return self.raw_field_name == other.raw_field_name
-
-  def __hash__(self):
-    return hash(self.raw_field_name)
-
-
-ANDROID_PROCESS_DATA_PART = TraceDataPart('androidProcessDump')
-ATRACE_PART = TraceDataPart('systemTraceEvents')
-ATRACE_PROCESS_DUMP_PART = TraceDataPart('atraceProcessDump')
-BATTOR_TRACE_PART = TraceDataPart('powerTraceAsString')
-CHROME_TRACE_PART = TraceDataPart('traceEvents')
-CPU_TRACE_DATA = TraceDataPart('cpuSnapshots')
-INSPECTOR_TRACE_PART = TraceDataPart('inspectorTimelineEvents')
-SURFACE_FLINGER_PART = TraceDataPart('surfaceFlinger')
-TAB_ID_PART = TraceDataPart('tabIds')
-TELEMETRY_PART = TraceDataPart('telemetry')
-WALT_TRACE_PART = TraceDataPart('waltTraceEvents')
-
-ALL_TRACE_PARTS = {ANDROID_PROCESS_DATA_PART,
-                   ATRACE_PART,
-                   ATRACE_PROCESS_DUMP_PART,
-                   BATTOR_TRACE_PART,
-                   CHROME_TRACE_PART,
-                   CPU_TRACE_DATA,
-                   INSPECTOR_TRACE_PART,
-                   SURFACE_FLINGER_PART,
-                   TAB_ID_PART,
-                   TELEMETRY_PART}
-
-ALL_TRACE_PARTS_RAW_NAMES = set(k.raw_field_name for k in ALL_TRACE_PARTS)
-
-def _HasTraceFor(part, raw):
-  assert isinstance(part, TraceDataPart)
-  if part.raw_field_name not in raw:
-    return False
-  return len(raw[part.raw_field_name]) > 0
-
-
-def _GetFilePathForTrace(trace, dir_path):
-  """ Return path to a file that contains |trace|.
-
-  Note: if |trace| is an instance of TraceFileHandle, this reuses the trace path
-  that the trace file handle holds. Otherwise, it creates a new trace file
-  in |dir_path| directory.
-  """
-  if isinstance(trace, TraceFileHandle):
-    return trace.file_path
-  with tempfile.NamedTemporaryFile(mode='w', dir=dir_path, delete=False) as fp:
-    if isinstance(trace, basestring):
-      fp.write(trace)
-    elif isinstance(trace, dict) or isinstance(trace, list):
-      json.dump(trace, fp)
-    else:
-      raise TypeError('Trace is of unknown type.')
-    return fp.name
-
-
-class TraceData(object):
-  """ TraceData holds a collection of traces from multiple sources.
-
-  A TraceData can have multiple active parts. Each part represents traces
-  collected from a different trace agent.
-  """
-  def __init__(self):
-    """Creates TraceData from the given data."""
-    self._raw_data = {}
-    self._events_are_safely_mutable = False
-
-  def _SetFromBuilder(self, d):
-    self._raw_data = d
-    self._events_are_safely_mutable = True
-
-  @property
-  def events_are_safely_mutable(self):
-    """Returns true if the events in this value are completely sealed.
-
-    Some importers want to take complex fields out of the TraceData and add
-    them to the model, changing them subtly as they do so. If the TraceData
-    was constructed with data that is shared with something outside the trace
-    data, for instance a test harness, then this mutation is unexpected. But,
-    if the values are sealed, then mutating the events is a lot faster.
-
-    We know if events are sealed if the value came from a string, or if the
-    value came from a TraceDataBuilder.
-    """
-    return self._events_are_safely_mutable
-
-  @property
-  def active_parts(self):
-    return {p for p in ALL_TRACE_PARTS if p.raw_field_name in self._raw_data}
-
-  def HasTracesFor(self, part):
-    return _HasTraceFor(part, self._raw_data)
-
-  def GetTracesFor(self, part):
-    """ Return the list of traces for |part| in string or dictionary forms.
-
-    Note: since this API return the traces that can be directly accessed in
-    memory, it may require lots of memory usage as some of the trace can be
-    very big.
-    For references, we have cases where Telemetry is OOM'ed because the memory
-    required for processing the trace in Python is too big (crbug.com/672097).
-    """
-    assert isinstance(part, TraceDataPart)
-    if not self.HasTracesFor(part):
-      return []
-    traces_list = self._raw_data[part.raw_field_name]
-    # Since this API return the traces in memory form, and since the memory
-    # bottleneck of Telemetry is for keeping trace in memory, there is no uses
-    # in keeping the on-disk form of tracing beyond this point. Hence we convert
-    # all traces for part of form TraceFileHandle to the JSON form.
-    for i, data in enumerate(traces_list):
-      if isinstance(data, TraceFileHandle):
-        traces_list[i] = data.AsTraceData()
-    return traces_list
-
-  def GetTraceFor(self, part):
-    assert isinstance(part, TraceDataPart)
-    traces = self.GetTracesFor(part)
-    assert len(traces) == 1
-    return traces[0]
-
-  def CleanUpAllTraces(self):
-    """ Remove all the traces that this has handles to.
-
-    Those include traces stored in memory & on disk. After invoking this,
-    one can no longer uses this object for collecting the traces.
-    """
-    for traces_list in self._raw_data.itervalues():
-      for trace in traces_list:
-        if isinstance(trace, TraceFileHandle):
-          trace.Clean()
-    self._raw_data = {}
-
-  def Serialize(self, file_path, trace_title=''):
-    """Serializes the trace result to |file_path|.
-
-    """
-    if not self._raw_data:
-      logging.warning('No traces to convert to html.')
-      return
-    temp_dir = tempfile.mkdtemp()
-    trace_files = []
-    try:
-      trace_size_data = {}
-      for part, traces_list in self._raw_data.iteritems():
-        for trace in traces_list:
-          path = _GetFilePathForTrace(trace, temp_dir)
-          trace_size_data.setdefault(part, 0)
-          trace_size_data[part] += os.path.getsize(path)
-          trace_files.append(path)
-      logging.info('Trace sizes in bytes: %s', trace_size_data)
-
-      cmd = (['python', _TRACE2HTML_PATH] + trace_files +
-             ['--output', file_path] + ['--title', trace_title])
-      subprocess.check_output(cmd)
-    finally:
-      shutil.rmtree(temp_dir)
-
-
-class TraceFileHandle(object):
-  """A trace file handle object allows storing trace data on disk.
-
-  TraceFileHandle API allows one to collect traces from Chrome into disk instead
-  of keeping them in memory. This is important for keeping memory usage of
-  Telemetry low to avoid OOM (see:
-  https://github.com/catapult-project/catapult/issues/3119).
-
-  The fact that this uses a file underneath to store tracing data means the
-  callsite is repsonsible for discarding the file when they no longer need the
-  tracing data. Call TraceFileHandle.Clean when you done using this object.
-  """
-  def __init__(self):
-    self._backing_file = None
-    self._file_path = None
-    self._trace_data = None
-
-  def Open(self):
-    assert not self._backing_file and not self._file_path
-    self._backing_file = tempfile.NamedTemporaryFile(delete=False, mode='a')
-
-  def AppendTraceData(self, partial_trace_data):
-    assert isinstance(partial_trace_data, basestring)
-    self._backing_file.write(partial_trace_data)
-
-  @property
-  def file_path(self):
-    assert self._file_path, (
-        'Either the handle need to be closed first or this handle is cleaned')
-    return self._file_path
-
-  def Close(self):
-    assert self._backing_file
-    self._backing_file.close()
-    self._file_path = self._backing_file.name
-    self._backing_file = None
-
-  def AsTraceData(self):
-    """Get the object form of trace data that this handle manages.
-
-    *Warning: this can have large memory footprint if the trace data is big.
-
-    Since this requires the in-memory form of the trace, it is no longer useful
-    to still keep the backing file underneath, invoking this will also discard
-    the file to avoid the risk of leaking the backing trace file.
-    """
-    if self._trace_data:
-      return self._trace_data
-    assert self._file_path
-    with open(self._file_path) as f:
-      self._trace_data = json.load(f)
-    self.Clean()
-    return self._trace_data
-
-  def Clean(self):
-    """Remove the backing file used for storing trace on disk.
-
-    This should be called when and only when you no longer need to use
-    TraceFileHandle.
-    """
-    assert self._file_path
-    os.remove(self._file_path)
-    self._file_path = None
-
-
-class TraceDataBuilder(object):
-  """TraceDataBuilder helps build up a trace from multiple trace agents.
-
-  TraceData is supposed to be immutable, but it is useful during recording to
-  have a mutable version. That is TraceDataBuilder.
-  """
-  def __init__(self):
-    self._raw_data = {}
-
-  def AsData(self):
-    if self._raw_data == None:
-      raise Exception('Can only AsData once')
-    data = TraceData()
-    data._SetFromBuilder(self._raw_data)
-    self._raw_data = None
-    return data
-
-  def AddTraceFor(self, part, trace):
-    assert isinstance(part, TraceDataPart), part
-    if part == CHROME_TRACE_PART:
-      assert (isinstance(trace, dict) or
-              isinstance(trace, list) or
-              isinstance(trace, TraceFileHandle))
-    else:
-      assert (isinstance(trace, basestring) or
-              isinstance(trace, dict) or
-              isinstance(trace, list))
-
-    if self._raw_data == None:
-      raise Exception('Already called AsData() on this builder.')
-
-    self._raw_data.setdefault(part.raw_field_name, [])
-    self._raw_data[part.raw_field_name].append(trace)
-
-  def HasTracesFor(self, part):
-    return _HasTraceFor(part, self._raw_data)
-
-
-def CreateTraceDataFromRawData(raw_data):
-  """Convenient method for creating a TraceData object from |raw_data|.
-     This is mostly used for testing.
-
-     Args:
-        raw_data can be:
-            + A dictionary that repsents multiple trace parts. Keys of the
-            dictionary must always contain 'traceEvents', as chrome trace
-            must always present.
-            + A list that represents Chrome trace events.
-            + JSON string of either above.
-
-  """
-  raw_data = copy.deepcopy(raw_data)
-  if isinstance(raw_data, basestring):
-    json_data = json.loads(raw_data)
-  else:
-    json_data = raw_data
-
-  b = TraceDataBuilder()
-  if not json_data:
-    return b.AsData()
-  if isinstance(json_data, dict):
-    assert 'traceEvents' in json_data, 'Only raw chrome trace is supported'
-    trace_parts_keys = []
-    for k in json_data:
-      if k != 'traceEvents' and k in ALL_TRACE_PARTS_RAW_NAMES:
-        trace_parts_keys.append(k)
-        b.AddTraceFor(TraceDataPart(k), json_data[k])
-    # Delete the data for extra keys to form trace data for Chrome part only.
-    for k in trace_parts_keys:
-      del json_data[k]
-    b.AddTraceFor(CHROME_TRACE_PART, json_data)
-  elif isinstance(json_data, list):
-    b.AddTraceFor(CHROME_TRACE_PART, {'traceEvents': json_data})
-  else:
-    raise NonSerializableTraceData('Unrecognized data format.')
-  return b.AsData()
diff --git a/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py b/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
deleted file mode 100644
index b065b4f..0000000
--- a/systrace/catapult/tracing/tracing/trace_data/trace_data_unittest.py
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import datetime
-import exceptions
-import os
-import shutil
-import tempfile
-import unittest
-
-from tracing.trace_data import trace_data
-from tracing_build import html2trace
-
-
-class TraceDataTest(unittest.TestCase):
-  def testSerialize(self):
-    test_dir = tempfile.mkdtemp()
-    trace_path = os.path.join(test_dir, 'test_trace.json')
-    try:
-      ri = trace_data.CreateTraceDataFromRawData({'traceEvents': [1, 2, 3]})
-      ri.Serialize(trace_path)
-      with open(trace_path) as f:
-        json_traces = html2trace.ReadTracesFromHTMLFilePath(f)
-      self.assertEqual(json_traces, [{'traceEvents': [1, 2, 3]}])
-    finally:
-      shutil.rmtree(test_dir)
-
-  def testEmptyArrayValue(self):
-    # We can import empty lists and empty string.
-    d = trace_data.CreateTraceDataFromRawData([])
-    self.assertFalse(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
-
-  def testInvalidTrace(self):
-    with self.assertRaises(AssertionError):
-      trace_data.CreateTraceDataFromRawData({'hello': 1})
-
-  def testListForm(self):
-    d = trace_data.CreateTraceDataFromRawData([{'ph': 'B'}])
-    self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
-    events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
-        'traceEvents', [])
-    self.assertEquals(1, len(events))
-
-  def testStringForm(self):
-    d = trace_data.CreateTraceDataFromRawData('[{"ph": "B"}]')
-    self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
-    events = d.GetTracesFor(trace_data.CHROME_TRACE_PART)[0].get(
-        'traceEvents', [])
-    self.assertEquals(1, len(events))
-
-
-class TraceDataBuilderTest(unittest.TestCase):
-  def testBasicChrome(self):
-    builder = trace_data.TraceDataBuilder()
-    builder.AddTraceFor(trace_data.CHROME_TRACE_PART,
-                        {'traceEvents': [1, 2, 3]})
-    builder.AddTraceFor(trace_data.TAB_ID_PART, ['tab-7'])
-    builder.AddTraceFor(trace_data.BATTOR_TRACE_PART, 'battor data here')
-
-    d = builder.AsData()
-    self.assertTrue(d.HasTracesFor(trace_data.CHROME_TRACE_PART))
-    self.assertTrue(d.HasTracesFor(trace_data.TAB_ID_PART))
-    self.assertTrue(d.HasTracesFor(trace_data.BATTOR_TRACE_PART))
-
-    self.assertRaises(Exception, builder.AsData)
-
-  def testSetTraceFor(self):
-    telemetry_trace = {
-        'traceEvents': [1, 2, 3],
-        'metadata': {
-            'field1': 'value1'
-        }
-    }
-
-    builder = trace_data.TraceDataBuilder()
-    builder.AddTraceFor(trace_data.TELEMETRY_PART, telemetry_trace)
-    d = builder.AsData()
-
-    self.assertEqual(d.GetTracesFor(trace_data.TELEMETRY_PART),
-                     [telemetry_trace])
-
-  def testSetTraceForRaisesWithInvalidPart(self):
-    builder = trace_data.TraceDataBuilder()
-
-    self.assertRaises(exceptions.AssertionError,
-                      lambda: builder.AddTraceFor('not_a_trace_part', {}))
-
-  def testSetTraceForRaisesWithInvalidTrace(self):
-    builder = trace_data.TraceDataBuilder()
-
-    self.assertRaises(
-        exceptions.AssertionError,
-        lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART,
-                                    datetime.time.min))
-
-  def testSetTraceForRaisesAfterAsData(self):
-    builder = trace_data.TraceDataBuilder()
-    builder.AsData()
-
-    self.assertRaises(
-        exceptions.Exception,
-        lambda: builder.AddTraceFor(trace_data.TELEMETRY_PART, {}))
diff --git a/systrace/catapult/tracing/tracing_project.py b/systrace/catapult/tracing/tracing_project.py
deleted file mode 100644
index 633b98b..0000000
--- a/systrace/catapult/tracing/tracing_project.py
+++ /dev/null
@@ -1,209 +0,0 @@
-# Copyright (c) 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-import os
-import re
-
-
-def _AddToPathIfNeeded(path):
-  if path not in sys.path:
-    sys.path.insert(0, path)
-
-
-def UpdateSysPathIfNeeded():
-  for path in GetDependencyPaths():
-    _AddToPathIfNeeded(path)
-
-
-def GetDependencyPaths():
-  # TODO(#3703): Separate the paths that are only used by the dev server into
-  # another call.
-  p = TracingProject()
-  return [
-      p.catapult_path,
-      p.py_vulcanize_path,
-      p.vinn_path,
-      os.path.join(p.catapult_third_party_path, 'WebOb'),
-      os.path.join(p.catapult_third_party_path, 'Paste'),
-      os.path.join(p.catapult_third_party_path, 'six'),
-      os.path.join(p.catapult_third_party_path, 'webapp2'),
-      os.path.join(p.catapult_path, 'common', 'py_utils'),
-      os.path.join(p.tracing_third_party_path, 'symbols')
-  ]
-
-
-def _FindAllFilesRecursive(source_paths):
-  assert isinstance(source_paths, list)
-  all_filenames = set()
-  for source_path in source_paths:
-    for dirpath, _, filenames in os.walk(source_path):
-      for f in filenames:
-        if f.startswith('.'):
-          continue
-        x = os.path.abspath(os.path.join(dirpath, f))
-        all_filenames.add(x)
-  return all_filenames
-
-def _IsFilenameATest(x):
-  if x.endswith('_test.js'):
-    return True
-
-  if x.endswith('_test.html'):
-    return True
-
-  if x.endswith('_unittest.js'):
-    return True
-
-  if x.endswith('_unittest.html'):
-    return True
-
-  # TODO(nduca): Add content test?
-  return False
-
-
-class TracingProject(object):
-  catapult_path = os.path.abspath(
-      os.path.join(os.path.dirname(__file__), os.path.pardir))
-
-  tracing_root_path = os.path.join(catapult_path, 'tracing')
-  trace_processor_root_path = os.path.join(catapult_path, 'trace_processor')
-  common_root_path = os.path.join(catapult_path, 'common')
-  tracing_src_path = os.path.join(tracing_root_path, 'tracing')
-  extras_path = os.path.join(tracing_src_path, 'extras')
-  ui_extras_path = os.path.join(tracing_src_path, 'ui', 'extras')
-
-  catapult_third_party_path = os.path.join(catapult_path, 'third_party')
-  polymer_path = os.path.join(catapult_third_party_path, 'polymer')
-
-  tracing_third_party_path = os.path.join(tracing_root_path, 'third_party')
-  py_vulcanize_path = os.path.join(common_root_path, 'py_vulcanize')
-  vinn_path = os.path.join(catapult_third_party_path, 'vinn')
-
-  jszip_path = os.path.join(tracing_third_party_path, 'jszip')
-  pako_path = os.path.join(tracing_third_party_path, 'pako')
-
-  glmatrix_path = os.path.join(
-      tracing_third_party_path, 'gl-matrix', 'dist')
-
-  mannwhitneyu_path = os.path.join(
-      tracing_third_party_path, 'mannwhitneyu')
-
-  ui_path = os.path.join(tracing_src_path, 'ui')
-  d3_path = os.path.join(tracing_third_party_path, 'd3')
-  chai_path = os.path.join(tracing_third_party_path, 'chai')
-  mocha_path = os.path.join(tracing_third_party_path, 'mocha')
-  oboe_path = os.path.join(tracing_third_party_path, 'oboe')
-
-  mre_path = os.path.join(tracing_src_path, 'mre')
-
-  metrics_path = os.path.join(tracing_src_path, 'metrics')
-  diagnostics_path = os.path.join(tracing_src_path, 'value', 'diagnostics')
-
-  value_ui_path = os.path.join(tracing_src_path, 'value', 'ui')
-  metrics_ui_path = os.path.join(tracing_src_path, 'metrics', 'ui')
-
-  test_data_path = os.path.join(tracing_root_path, 'test_data')
-  skp_data_path = os.path.join(tracing_root_path, 'skp_data')
-
-  rjsmin_path = os.path.join(
-      tracing_third_party_path, 'tvcm', 'third_party', 'rjsmin')
-  rcssmin_path = os.path.join(
-      tracing_third_party_path, 'tvcm', 'third_party', 'rcssmin')
-
-  def __init__(self):
-    self.source_paths = []
-    self.source_paths.append(self.tracing_root_path)
-    self.source_paths.append(self.polymer_path)
-    self.source_paths.append(self.tracing_third_party_path)
-    self.source_paths.append(self.mre_path)
-    self.source_paths.append(self.jszip_path)
-    self.source_paths.append(self.pako_path)
-    self.source_paths.append(self.glmatrix_path)
-    self.source_paths.append(self.mannwhitneyu_path)
-    self.source_paths.append(self.d3_path)
-    self.source_paths.append(self.chai_path)
-    self.source_paths.append(self.mocha_path)
-    self.source_paths.append(self.oboe_path)
-
-  def CreateVulcanizer(self):
-    from py_vulcanize import project as project_module
-    return project_module.Project(self.source_paths)
-
-  def IsD8CompatibleFile(self, filename):
-    if filename.startswith(self.ui_path):
-      return False
-
-    if filename.startswith(self.value_ui_path):
-      return False
-
-    if filename.startswith(self.metrics_ui_path):
-      return False
-
-    return True
-
-  def FindAllTestModuleRelPaths(self, pred=None):
-    if pred is None:
-      pred = lambda x: True
-
-    all_filenames = _FindAllFilesRecursive([self.tracing_src_path])
-    test_module_filenames = [x for x in all_filenames if
-                             _IsFilenameATest(x) and pred(x)]
-    test_module_filenames.sort()
-
-    return [os.path.relpath(x, self.tracing_root_path)
-            for x in test_module_filenames]
-
-  def FindAllMetricsModuleRelPaths(self):
-    all_filenames = _FindAllFilesRecursive([self.tracing_src_path])
-    all_metrics_module_filenames = []
-    for x in all_filenames:
-      if x.startswith(self.metrics_path) and not _IsFilenameATest(x):
-        all_metrics_module_filenames.append(x)
-    all_metrics_module_filenames.sort()
-    return [os.path.relpath(x, self.tracing_root_path)
-            for x in all_metrics_module_filenames]
-
-  def FindAllDiagnosticsModuleRelPaths(self):
-    all_filenames = _FindAllFilesRecursive([self.tracing_src_path])
-    all_diagnostics_module_filenames = []
-    for x in all_filenames:
-      if x.startswith(self.diagnostics_path) and not _IsFilenameATest(x):
-        all_diagnostics_module_filenames.append(x)
-    all_diagnostics_module_filenames.sort()
-    return [os.path.relpath(x, self.tracing_root_path)
-            for x in all_diagnostics_module_filenames]
-
-  def FindAllD8TestModuleRelPaths(self):
-    return self.FindAllTestModuleRelPaths(pred=self.IsD8CompatibleFile)
-
-  def GetConfigNames(self):
-    config_files = [
-        os.path.join(self.ui_extras_path, x)
-        for x in os.listdir(self.ui_extras_path)
-        if x.endswith('_config.html')
-    ]
-
-    config_files = [x for x in config_files if os.path.isfile(x)]
-
-    config_basenames = [os.path.basename(x) for x in config_files]
-    config_names = [re.match('(.+)_config.html$', x).group(1)
-                    for x in config_basenames]
-    return config_names
-
-  def GetDefaultConfigName(self):
-    assert 'full' in self.GetConfigNames()
-    return 'full'
-
-  def AddConfigNameOptionToParser(self, parser):
-    choices = self.GetConfigNames()
-    parser.add_argument(
-        '--config', dest='config_name',
-        choices=choices, default=self.GetDefaultConfigName(),
-        help='Picks a browser config. Valid choices: %s' % ', '.join(choices))
-    return choices
-
-  def GetModuleNameForConfigName(self, config_name):
-    return 'tracing.ui.extras.%s_config' % config_name
-
diff --git a/systrace/systrace.py b/systrace/systrace.py
deleted file mode 100755
index 71da650..0000000
--- a/systrace/systrace.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-version = sys.version_info[:2]
-if version != (2, 7):
-  sys.stderr.write('Systrace does not support Python %d.%d. '
-                   'Please use Python 2.7.\n' % version)
-  sys.exit(1)
-
-systrace_dir = os.path.abspath(
-    os.path.join(os.path.dirname(__file__), 'catapult', 'systrace'))
-sys.path.insert(0, systrace_dir)
-
-def RemoveAllStalePycFiles(base_dir):
-  """Scan directories for old .pyc files without a .py file and delete them."""
-  for dirname, _, filenames in os.walk(base_dir):
-    if '.git' in dirname:
-      continue
-    for filename in filenames:
-      root, ext = os.path.splitext(filename)
-      if ext != '.pyc':
-        continue
-
-      pyc_path = os.path.join(dirname, filename)
-      py_path = os.path.join(dirname, root + '.py')
-
-      try:
-        if not os.path.exists(py_path):
-          os.remove(pyc_path)
-      except OSError:
-        # Wrap OS calls in try/except in case another process touched this file.
-        pass
-
-    try:
-      os.removedirs(dirname)
-    except OSError:
-      # Wrap OS calls in try/except in case another process touched this dir.
-      pass
-
-if __name__ == '__main__':
-  RemoveAllStalePycFiles(os.path.dirname(__file__))
-  from systrace import run_systrace
-  sys.exit(run_systrace.main())